Rotates the model status line through a 53-phrase English/Chinese deep-theme pool: a random pick at turn start, event-driven switching on new thinking segments or tool calls (3s throttle), and a click on the status line toggles the language.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:Winter-And-You-Gone/dsh-deep-verbs
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
简体中文(默认) | English
Tired of the built-in status line showing
Deep diving...forever? Want the model to show some personality while it thinks? Then this plugin is for you.
A pure plugin for DeepSeek Harness (DSH) that only handles swapping the status line copy:
- Random phrase per turn: a bilingual (EN/ZH) pool of 53 "deep" phrases, drawn from a shuffled bag (no repeats within a bag, no same phrase across bag boundaries);
- Event-driven rotation: each new reasoning segment or tool call switches to the next phrase, at least 3 seconds apart (events inside the window merge into one catch-up switch at the window edge — rapid tool calls change the word only once);
- Click to toggle language: click the status line to re-display the current phrase in the other language (no re-draw), synced across all parallel sessions; the choice is stored in
localStorageand restored on reload; - The timer is untouched: the built-in "N分N秒" clock still appears after 15 seconds.
Does not modify any @deepseek-ai/dsh-* source code.
Design reference: the phrase-rotation play is inspired by Claude Code's spinner verbs — it samples a random gerund (Wandering… / Combobulating… / Noodling…) each time the spinner mounts, much like "one random phrase per turn"; 40 of this plugin's phrases are directly borrowed from that same word list.
Feature 1: random per turn + event-driven rotation
[user message]
Deep diving... ← built-in: forever
↓ claimed by the plugin
Deep Seeking... ← random phrase at turn start
Deep cooking... ← switches on each new segment / tool call
深潜中…(1分23秒) ← language toggles on click; timer still shows after 15s
- Shuffled-bag draw: a bag of 53 indices is reshuffled only when exhausted — no short-term repeats, no same phrase across bag boundaries;
- Random at turn start: the first status row of a turn draws a phrase; rows mounted in the same batch (parallel sessions) share it;
- Event-driven: a newly mounted
assistant-step(reasoning/answer segment) ortool-call(tool call, incl. retries) row advances the phrase; streamed tokens never mount rows, so no false triggers; re-inserted rows are deduped; - Throttle floor: at least 3 seconds between switches (
MIN_SWITCH_MS); events inside the window merge into one catch-up switch at the boundary; - No rotation during long thinking: without new rows the phrase stays put until the next event.
Feature 2: click to toggle EN/ZH
Deep Seeking... ← click the status line (pointer cursor + tooltip)
↓
深度求索中… ← same phrase, other language; no re-draw
- Same phrase, other language:
Deep Seeking...↔深度求索中…— the two pools are index-aligned, so the phrase never jumps; - Synced everywhere: all active status rows (parallel sessions) toggle together;
- Persisted: the choice is stored in
localStorage(dsh-deep-verbs:lang) and restored on reload; - User action wins: a click resets the 3-second floor, so an imminent auto-rotation can't instantly override the language you just picked.
Phrase pools
Original 13
| EN | ZH | meaning |
|---|---|---|
Deep diving... |
深潜中… |
the original: diving |
Deep seeking... |
深度求索中… |
DeepSeek's official Chinese name |
Deep delving... |
刨根问底中… |
delve into |
Deep surfacing... |
喷涂彩虹中… |
coming up for air (whale spout) |
Deep breaching... |
跃出海面中… |
breaching (whale logo nod) |
Deep bubbling... |
海底冒泡中… |
bubbling on the seafloor |
Deep singing... |
引吭高歌中… |
whale song |
Deep fishing... |
摸鱼中… |
slacking off |
Deep sinking... |
沉底中… |
sinking to think slowly |
Deep sleeping... |
呼呼大睡中… |
sound asleep (long-thinking joke) |
Deep napping... |
偷偷打盹中… |
sneaking a nap (long-thinking joke) |
Deep dreaming... |
白日做梦中… |
daydreaming |
Deep cooking... |
小火慢炖中… |
let me cook |
40 more, borrowed from Claude Code's spinner verbs
The following 40 phrases are taken from Claude Code's spinner word list (
github.com/ConardLi/easy-agent), grouped as culinary / exploration / brains / whale / whimsy / slacking / science / existential / free-spirited.
| mood | EN | ZH |
|---|---|---|
| Culinary | Deep baking... |
烘焙中… |
| Culinary | Deep brewing... |
酿造中… |
| Culinary | Deep caramelizing... |
熬糖色中… |
| Culinary | Deep fermenting... |
发酵中… |
| Culinary | Deep flambéing... |
喷火炙烤中… |
| Culinary | Deep frosting... |
抹奶油中… |
| Culinary | Deep garnishing... |
摆盘中… |
| Culinary | Deep julienning... |
切丝中… |
| Culinary | Deep kneading... |
揉面中… |
| Culinary | Deep leavening... |
发面中… |
| Culinary | Deep marinating... |
腌制入味中… |
| Culinary | Deep proofing... |
醒面中…(dough resting = thinking) |
| Culinary | Deep sautéing... |
爆炒中… |
| Culinary | Deep seasoning... |
调味中… |
| Culinary | Deep simmering... |
咕嘟咕嘟中… |
| Culinary | Deep stewing... |
文火炖煮中… |
| Culinary | Deep tempering... |
回火中… |
| Culinary | Deep whisking... |
打发中… |
| Culinary | Deep zesting... |
削皮中… |
| Exploration | Deep spelunking... |
洞窟探秘中…(cave cousin of deep diving) |
| Exploration | Deep burrowing... |
挖洞中… |
| Brains | Deep ruminating... |
反刍中…(cud-chewing thoughts) |
| Brains | Deep incubating... |
孵化中… |
| Brains | Deep percolating... |
渗滤中…(coffee dripping) |
| Whale | Deep honking... |
哔哔鸣笛中…(whale honk) |
| Whimsy | Deep noodling... |
瞎鼓捣中… |
| Whimsy | Deep doodling... |
涂鸦中… |
| Whimsy | Deep waddling... |
摇摇晃晃中… |
| Whimsy | Deep frolicking... |
撒欢中… |
| Whimsy | Deep moseying... |
溜达中… |
| Whimsy | Deep moonwalking... |
太空步中… |
| Slacking | Deep photosynthesizing... |
光合作用中…(sunbathing and zoning out) |
| Science | Deep precipitating... |
沉淀中… |
| Existential | Deep combobulating... |
拼拼凑凑中… |
| Existential | Deep recombobulating... |
重组中… |
| Free-spirited | Deep levitating... |
悬空冥想中… |
| Free-spirited | Deep metamorphosing... |
蜕变中… |
| Free-spirited | Deep zigzagging... |
蛇皮走位中… |
| Free-spirited | Deep boondoggling... |
瞎忙活中… |
| Free-spirited | Deep gallivanting... |
到处浪中… |
Installation
pwsh install.ps1 # or: powershell -ExecutionPolicy Bypass -File install.ps1
The script prefers ~/.dsh/profiles/desktop (desktop build), falling back to profiles/web; junction-links this directory into profiles/node_modules/dsh-deep-verbs; registers the insert in the profile's cordis.patch.yml.
Then fully quit the DSH process and restart (closing the window is not enough); the desktop window restarts on its own, browser users just refresh.
Manual install is equivalent to:
mklink /J %USERPROFILE%\.dsh\profiles\node_modules\dsh-deep-verbs <this directory>- Append to
<profile>\cordis.patch.yml:- insert: - id: dsh-deep-verbs name: 'dsh-deep-verbs' - Restart DSH.
How it works (why no source changes)
- The built-in TurnStatus renders
<div role="status">Deep diving...<span>clock</span></div>; React re-renders every second but never writes back the DOM text node while the string child is unchanged — so rewriting that text node in the browser side sticks. - Rotation is event-driven: every chat row (
ChatNodeSeat) carries a host-internaldata-chat-flow-kindattribute (DSH's own scroll anchoring relies on it — a stable detail); a newly mountedassistant-step/tool-call/model-retryrow counts as one rotation event. - The
MutationObserversubscribes to childList only (streamed text changes never trigger scans) and both claims new turn status rows and captures rotation events; a 3-second maintenance scan only covers claim fallback, repairing the rare React write-back of the built-in text, and catching up pending switches when background-tab timers are throttled (it never advances the phrase). - The click listener is attached when a status row is claimed;
cursor/titlehints live outside React's vdom, so re-renders don't clobber them (same mechanism as the text node). - Every DOM write goes through a "same-value, no write" guard: assigning
Text.dataenqueues a mutation record even when the value is unchanged, so writing the built-in phrase back verbatim would spin a sweep→observe→sweep microtask storm (the 2026-08-17 freeze incident; fixed in v0.2.1 with a regression test).
Notes
- If a future DSH release changes the built-in text
Deep diving..., the plugin degrades to a no-op; if it drops thedata-chat-flow-kindattribute, it degrades to "new phrase per turn, no in-turn rotation" — neither touches any other UI. - Phrase pools, the switch interval, and the language key all live in the constants at the top of
client.js.
Customization
Edit the PHRASES_EN / PHRASES_ZH arrays in client.js: English phrases stay lowercase deep xxxing (auto-capitalized with ... on display); Chinese phrases keep the …中 suffix (auto-appended …); the two arrays are index-aligned — same index = same phrase, and the language toggle maps by index. The minimum switch interval is MIN_SWITCH_MS (3000ms default — a floor, not a beat: slower events mean slower rotation). Restart DSH after saving.
Dev self-test
node verify.mjs
Drives the bundle's rewrite / rotation / throttle / storm-regression / language-toggle paths with a tiny DOM shim and a fake clock — no browser needed.
Uninstall
Delete the profiles/node_modules/dsh-deep-verbs link and remove the matching - insert block from cordis.patch.yml, then restart DSH.
Links
More in this category
zhu1090093659/dsh-web-ui#packages/dsh-web-ui-all★ 4634
Plugin and skin collection for the DSH Web UI: task board, Git graph, right-side panel, remote mobile UI, pet, live token stats, and a skin center.
omdsh-dev/DSH-better-sidebar★ 2203
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
ccch1mneyyy/dsh-TUI★ 1996
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
omdsh-dev/dsh-at-file★ 391
Codex-style `@file` mentions: search workspace files in the composer and attach their contents to prompts.
omdsh-dev/dsh-genui★ 223
Interactive UI components rendered inline in replies: layout, charts, forms, quizzes, mermaid, 3D scenes, and an action event loop back to the model.
huiliyi37/dsh-tianshu-tui★ 215
A terminal UI (TUI) for DeepSeek Harness.