Skip to main content

dsh-status-rotator

42Stars2Forks3Issues0Watchers

Replaces the "Deep diving..." status text at the bottom of rounds in DSH Web interface, featuring stage-aware switching, typewriter effect, colorful gradient, and visual vocabulary editing.

Evidence5/5methodologySourceInstallMaintenanceDSH versionSecurity scan
Machine-auditedInstall commandRepo verifieddsh-plugin topicLicenseREADMEAI wiki
Language
JavaScript
License
MIT
Branch
main
dshdsh-plugin

Install

cmdweb profile
$ dsh plugin --profile web add dsh-status-rotator

Run the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial

Install via your agent

Install the DeepSeek Harness plugin 01Virex/dsh-status-rotator for me: review the repository at https://github.com/01Virex/dsh-status-rotator first, then run the install command and verify the plugin loads successfully.

Paste this instruction to the DSH Web GUI assistant — it will install and verify for you.

One-Line Description

Replace the fixed "Deep diving..." status text at the bottom of the DSH Web interface turn display with your own text: switchable by turn phase, typewriter character-by-character appearance, flowing rainbow gradient (can be disabled), and automatically switch between Chinese and English based on DSH language.

Core Features

  • Replace turn status text: Take over the TurnStatus copy at the bottom of DSH chat, no longer showing "Deep diving..."
  • Switch copy by turn phase: thinking (turn just started) / running (after clock appears) / long (exceeds threshold) three phrase libraries
  • Typewriter character-by-character output: Each phrase is typed character by character at configurable intervals, 0 to disable
  • Flowing rainbow gradient text: Seven-color gradient enabled by default, can be disabled with one click or customized for colors and flow speed
  • Auto-switch Chinese/English copy: Follows DSH settings language in real-time, falls back to Chinese for unknown languages
  • DSH settings page phrase editor: Plugin adds a "Status Copy" page to the settings sidebar, with Chinese/English × three-stage text boxes for visual editing
  • Hot reload: Reads configuration periodically when page is open, reloads immediately when switching back to the tab, no need to refresh or restart to apply changes

Technical Implementation

  • Language: JavaScript (ESM)
  • Key Dependencies: No external npm dependencies; node side only uses node:fs/promises, node:url, node:path; browser side uses DSH's built-in React (from __ModuleLoader__.load) and built-in locale / slots services
  • Architecture: Cordis dual-end plugin; node side lib/index.js registers GET/PUT /plugins/dsh-status-rotator/config.json routes via ctx.webServer.register to read/write local config.json; client side lib/client.js injects Web UI via window.__ModuleLoader__.load, listens to DOM to find [role="status"][aria-live="polite"] element and rotates copy; registers settings panel via ctx.slots.inject("settings.section")
  • Entry Files: lib/index.js (node side) + lib/client.js (browser side), exposed via main and exports in package.json

Use Cases

Users who want to customize the DSH Web interface turn waiting experience: can replace with more colloquial Chinese ("正在帮你想", "再等一下下"), English ("Cooking up a response", "Still thinking…"), or even QQ group member rotation Easter egg copy to make the waiting process more relaxing.

Prerequisites & Compatibility

DependencyMinimum VersionNotes
DSHNot declaredNo dsh version dependency declared in package.json; runs by cordis.patch.yml and service names webServer / locale / slots in lib/index.js
Node.jsNot declaredNode scripts gen-config.cjs and scripts/fetch-qq-group.cjs use CommonJS, require Node 14+; lib/index.js uses node: protocol, requires Node 18+
PlatformCross-platformPure frontend injection + pure node file I/O, no native module dependencies
Native modulesNone—

Installation

dsh plugin --profile web add github:01Virex/dsh-status-rotator

Configuration

The phrase library is saved in config.json in the plugin root directory (first installation requires running node gen-config.cjs to initialize from config.example.json).

ConfigTypeDescriptionDefault
config.intervalMsNumber (ms)Interval to rotate to the next phrase within the same phase10000
config.typeSpeedMsNumber (ms/char)Typewriter interval per character, 0 disables typewriter and shows full copy immediately30
config.longAfterMsNumber (ms)Threshold to enter long phase (slow/stuck turn)60000
config.reloadIntervalMsNumber (ms)Auto re-read config.json interval while page stays open, 0 to disable15000
config.debugBooleanWhether to output diagnostic logs to browser consolefalse
config.gradient.enabledBooleanWhether to add flowing rainbow gradient to status texttrue
config.gradient.colorsString array (≥2)Gradient color sequence, loops end-to-end["#ff5f6d", "#ffc371", "#ffdd55", "#7dff7d", "#5fd4ff", "#a78bfa", "#ff8adb"]
config.gradient.speedNumber (seconds/loop)Gradient flow speed4
phrases.zh.thinkingString arrayChinese thinking phase copy (turn just started, clock not yet appeared)From config.example.json
phrases.zh.runningString arrayChinese running phase copy (clock appeared, threshold not exceeded)From config.example.json
phrases.zh.longString arrayChinese long phase copy (exceeds longAfterMs)From config.example.json
phrases.en.thinkingString arrayEnglish thinking phase copyFrom config.example.json
phrases.en.runningString arrayEnglish running phase copyFrom config.example.json
phrases.en.longString arrayEnglish long phase copyFrom config.example.json

FAQ

Q: Do I need to restart dsh web after first installation?

A: Yes. The node-side HTTP route (/plugins/dsh-status-rotator/config.json) is only registered after restarting dsh web; after that, modifying copy and saving the phrase library doesn't require restarting again.

Q: Do I need to refresh the page after modifying copy?

A: No. The plugin automatically re-reads config.json every reloadIntervalMs (15 seconds by default), and also re-reads immediately when switching back to the browser tab; saving via DSH Settings → Status Copy page applies hot immediately.

Q: Can't see rainbow gradient text, what should I do?

A: Check if gradient.enabled in config.json is true. If your browser or DSH theme has special handling for animations, the gradient may be compressed to solid color; you can temporarily change gradient.colors to two high-contrast colors to verify.

Q: After editing, page still shows old copy, console has ⚠ warning?

A: Browser localStorage has dsh-status-rotator.texts, dsh-status-rotator.config, or dsh-status-rotator.url overriding config.json. In DevTools → Application → Local Storage, clear the corresponding key and refresh.

Q: How to generate copy from QQ group members?

A: Default group number is 684306814. After connecting to OneBot v11 HTTP API, run node scripts/fetch-qq-group.cjs --url http://127.0.0.1:3000 --token yourtoken, adding --activate will directly overwrite current config.json (old file backed up as config.backup-<timestamp>.json); without a bot, you can also prepare members.txt (one nickname per line) and use --input members.txt.

Q: Will the plugin affect the runtime clock that appears after 15 seconds?

A: No. The plugin only replaces the text in TurnStatus, the clock itself remains unchanged, and the clock reading is used to determine the phase (appeared = running, exceeded longAfterMs = long).

Q: How to uninstall?

A: Delete the status-rotator line from cordis.patch.yml (for manual installation), then restart dsh web.

Learning Curve

Beginner — No coding required, just edit config.json or modify copy in DSH settings panel to use; only need one extra step if you want to use QQ group member generator or custom external JSON.

Known Issues & Limitations

  • Clock text parsing only recognizes a few DSH-localized formats (15秒 / 1分02秒 / 15s / 1m 02s / mm:ss / h:mm:ss); numbers appearing in regular copy won't be mistakenly interpreted as duration
  • Settings page PUT request body limit is 5 MiB (MAX_BODY_BYTES in lib/index.js), returns 413 when exceeded
  • If browser localStorage has dsh-status-rotator.texts / .config / .url set, it will silently override config.json; only versions injected via __ModuleLoader__ will output [status-rotator] ⚠ localStorage override active warning to console
  • Settings page "Save" button doesn't touch styles outside DSH theme; modifying config items requires saving before they take effect
  • Old pure-copy JSON format ({ "zh": [...] } or { "thinking": [...] }) is still compatible and will be treated as thinking phase, other phases fallback automatically

Read the usage guide →

Install steps, key points, FAQ and compatibility for this plugin — auto-derived from indexed fields.

Listing badge

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/01Virex/dsh-status-rotator)

Paste this markdown into your GitHub README to link back to this listing. The badge only states the listing — not a security endorsement.

← Back to plugin directory