dsh-at-file
FSMargoo/dsh-at-fileCodex 风格的 `@file` 文件引用,输入框里直接搜索并引用工作区文件。
把内置 'Deep diving...' 思考状态行扩展为 53 条 deep 系英/中双语短语池:回合开场随机一条,随新思考段/工具调用事件轮换(最短间隔 3 秒),点击状态行切换中英文。
简体中文(默认) | 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:
localStorage and restored on reload;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"; 60 of this plugin's phrases are directly borrowed from that same word list.
[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
assistant-step (reasoning/answer segment) or tool-call (tool call, incl. retries) row advances the phrase; streamed tokens never mount rows, so no false triggers; re-inserted rows are deduped;MIN_SWITCH_MS); events inside the window merge into one catch-up switch at the boundary;Deep Seeking... ← click the status line (pointer cursor + tooltip)
↓
深度求索中… ← same phrase, other language; no re-draw
Deep Seeking... ↔ 深度求索中… — the two pools are index-aligned, so the phrase never jumps;localStorage (dsh-deep-verbs:lang) and restored on reload;| 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 |
The following 60 phrases are taken from Claude Code's spinner word list (40 introduced in v0.5.0, 20 added in v0.6.0) (
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... | 到处浪中… |
| Craft | Deep crafting... | 打磨中… |
| Craft | Deep forging... | 锻造中… |
| Brains | Deep deliberating... | 斟酌中… |
| Brains | Deep inferring... | 推演中… |
| Brains | Deep puzzling... | 解谜中… |
| Brains | Deep reticulating... | 编织中… |
| Wandering | Deep wandering... | 游弋中… |
| Wandering | Deep meandering... | 漫步中… |
| Wandering | Deep orbiting... | 绕飞中… |
| Fluid | Deep cascading... | 飞瀑中… |
| Fluid | Deep churning... | 翻腾中… |
| Fluid | Deep billowing... | 鼓涌中… |
| Fluid | Deep swirling... | 回旋中… |
| Fluid | Deep undulating... | 起伏中… |
| Flight | Deep fluttering... | 扑棱中… |
| Flight | Deep swooping... | 俯冲中… |
| Groove | Deep shimmying... | 扭摆中… |
| Groove | Deep grooving... | 踩点中… |
| Slacking | Deep lollygagging... | 磨洋工中… |
| Growth | Deep sprouting... | 冒芽中… |
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. When junctions are unavailable (permission / filesystem limits) it falls back to copying by the package.json files whitelist (no .git or other dev artifacts; re-run the installer to refresh the copy after plugin updates).
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><profile>\cordis.patch.yml:
- insert:
- id: dsh-deep-verbs
name: 'dsh-deep-verbs'
<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.ChatNodeSeat) carries a host-internal data-chat-flow-kind attribute (DSH's own scroll anchoring relies on it — a stable detail); a newly mounted assistant-step / tool-call / model-retry row counts as one rotation event.MutationObserver subscribes 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).cursor / title hints live outside React's vdom, so re-renders don't clobber them (same mechanism as the text node).Text.data enqueues 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).Deep diving..., the plugin degrades to a no-op; if it drops the data-chat-flow-kind attribute, it degrades to "new phrase per turn, no in-turn rotation" — neither touches any other UI.client.js.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.
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.
Delete the profiles/node_modules/dsh-deep-verbs link and remove the matching - insert block from cordis.patch.yml, then restart DSH.