前言¶
DeepSeek Harness(以下簡稱 dsh)是 DeepSeek 開源的智能體運行時,核心理念是「一切皆插件」:模型、工具、會話、沙箱,連網頁界面本身,都可以用插件增刪。目前它仍處於開發者預覽階段,接口會繼續變動。社區裏有人整理了一份插件目錄(https://deepseek-harness-plugin.com/),方便按分類查找安裝命令;該目錄是獨立站點,與 DeepSeek / 幻方沒有官方從屬關係,收錄條目需要自行覈對源碼。
日常用 dsh web 跑智能體時,網頁底部回合運行那一行,默認會一直顯示 Deep diving...。任務剛啓動、已經跑了十幾秒、卡了很久,看起來都是同一句話。如果你只是想讓這一行跟着階段換文案、帶一點打字機和漸變,而不去改 dsh 本體,可以看社區插件 dsh-status-rotator。
這是什麼¶
dsh-status-rotator 是一款面向 dsh 網頁界面 的界面增強插件,由 01Virex 維護,倉庫地址爲 01Virex/dsh-status-rotator。許可證是 MIT,主要語言是 JavaScript,package.json 裏的版本號爲 0.2.0。截至 2026-08-17,GitHub 顯示 20 星;社區目錄頁上的星標快照仍是 8,以倉庫頁面爲準。
它做的事情很窄:把聊天界面底部回合運行時那行 Deep diving... 狀態文字,替換成你在 JSON 裏寫好的文案。文案可以按回合階段切換、打字機逐字輸出、用流動炫彩漸變顯示(可關),並按間隔定時輪換。回合運行時長時鐘(大約 15 秒後出現)不會被改掉,插件反而靠這隻時鐘判斷當前處在哪個階段。
它不給模型增加工具,也不改智能體的推理或寫代碼行爲。源碼裏如果拿不到任何文案來源,狀態行會保持原來的 Deep diving...,相當於沒裝。
核心功能¶
倉庫 README 與瀏覽器端 lib/client.js 對能力的描述一致,可以分成下面幾塊。
1、按回合階段換文案。 判定依據是 TurnStatus 元素裏有沒有時鐘、以及時鐘讀數。默認分成三組:
| 階段 | 觸發條件 | 默認時長 |
|---|---|---|
thinking |
回合剛啓動,還沒有時鐘 | 0 ~ 15 秒 |
running |
時鐘已經出現,尚未超時 | 15 秒 ~ longAfterMs |
long |
時鐘超過 longAfterMs |
默認 ≥ 60 秒 |
階段一切換就立刻換文案,不用等到下一輪輪換間隔。某一階段缺文案時,按 running → thinking → 任意非空組 回退。
2、打字機效果。 新文案逐字打出,間隔由 typeSpeedMs 控制,默認 30 毫秒;設成 0 就關閉,整句直接顯示。
3、流動炫彩漸變。 默認開,只作用在文案上,不影響旁邊的時鐘。顏色序列和流速可配,也可以一鍵關掉。
4、文案和代碼分開。 句子全部寫在 JSON 裏。插件的 Node 端會註冊 HTTP 路由 /plugins/dsh-status-rotator/config.json,每次請求即時讀插件目錄裏的 config.json(沒有這個文件時回退到入庫的 config.example.json)。改完文案刷新頁面即可,不必改 lib/client.js,也不必配 localStorage。
5、中英文跟隨界面語言。 文案分 zh / en 兩套,跟隨「設置 → 語言」切換;未知語言回退到中文。
6、定位比較剋制。 瀏覽器端按 role="status" 且 aria-live="polite" 去找 TurnStatus,並再加一層結構判斷,避免誤傷聊天記錄裏的代碼片段、軌跡歷史、模型保存提示等同樣帶 aria-live 的區域,也不去改時鐘節點。
安裝與啓用¶
社區目錄頁給出的安裝命令如下,在已經跑起來的 DeepSeek Harness 終端裏執行即可:
dsh plugin add github:01Virex/dsh-status-rotator
dsh CLI 會從 GitHub 解析插件並裝進當前 profile。來自 GitHub 的插件安裝時可能執行代碼,插件也會以當前 dsh 進程的權限運行。安裝前應先看倉庫源碼和 MIT 許可證;只裝自己信任的來源。若要可復現安裝,可以固定 commit 哈希。本文覈對倉庫時,main 分支最新提交是 09836ff04330a17fc670c27a4bed6855547c88ad(2026-08-15),可以寫成:
dsh plugin add github:01Virex/dsh-status-rotator#09836ff04330a17fc670c27a4bed6855547c88ad
哈希會隨倉庫更新變化,安裝前到 GitHub 再確認一次更穩妥。目錄頁上的佔位寫法是 github:01Virex/dsh-status-rotator#commit。
裝好之後,按 README 的建議重啓 dsh web,瀏覽器裏用 Ctrl+F5 硬刷新。插件聲明瞭 dsh.client.platform = "web",只作用於網頁界面;純 headless 跑任務看不到效果。
若不想走 dsh plugin add,README 還提供了手動掛載步驟,和 cordis.patch.yml 裏的插入內容一致:
- 把項目目錄放到當前 profile 的
node_modules下(Windows 默認路徑形如C:\Users\<你>\.dsh\profiles\node_modules\dsh-status-rotator\)。 - 在該 profile 的
cordis.patch.yml裏插入:
- insert:
- id: status-rotator
name: dsh-status-rotator
- 在插件目錄執行
node gen-config.cjs,從config.example.json生成本地config.json(僅當文件不存在時創建,不會覆蓋你已經改過的配置)。 - 重啓
dsh web,瀏覽器 Ctrl+F5 硬刷新。
gen-config.cjs 這一步不是強制的:Node 端讀不到 config.json 時會直接 serve config.example.json,所以用目錄命令裝完、硬刷新後,一般就能看到示例文案。想長期改自己的句子,再生成一份本地 config.json 更合適;該文件已被 .gitignore 忽略。
卸載時,從 cordis.patch.yml 刪掉 status-rotator 那一行,重啓 dsh web 即可。
配置與典型用法¶
項目根目錄有兩份配置:
config.example.json:入庫的完整模板,帶默認參數和中英、三階段文案。config.json:本地個性化配置,由gen-config.cjs初始化。
結構可以看成「參數 + 文案」兩部分。下面是 README 給出的骨架(文案用省略號代替):
{
"config": {
"intervalMs": 10000,
"typeSpeedMs": 30,
"longAfterMs": 60000,
"debug": false,
"gradient": {
"enabled": true,
"colors": ["#ff5f6d", "#ffc371", "#ffdd55", "#7dff7d", "#5fd4ff", "#a78bfa", "#ff8adb"],
"speed": 4
}
},
"phrases": {
"zh": {
"thinking": ["…"],
"running": ["…"],
"long": ["…"]
},
"en": {
"thinking": ["…"],
"running": ["…"],
"long": ["…"]
}
}
}
各字段含義如下:
| 鍵 | 默認 | 說明 |
|---|---|---|
intervalMs |
10000 | 同一階段內輪換間隔(毫秒) |
typeSpeedMs |
30 | 打字機每字符間隔(毫秒),0 關閉 |
longAfterMs |
60000 | 進入 long 階段的閾值 |
debug |
false | 控制檯診斷日誌 |
gradient |
見上 | false 關閉;true 用默認配色;或 {enabled, colors, speed} |
phrases |
來自配置文件 | 中英 × 三階段;可只寫一部分,缺的按回退規則補 |
只想關掉彩虹字、其它保持默認時,把 gradient.enabled 設爲 false 即可,例如:
"gradient": {
"enabled": false
}
colors 至少兩個顏色,首尾循環;speed 是流動一圈的秒數,默認 4。
示例倉庫裏的默認中文,偏社區梗和吐槽,例如 running 階段有「正在自己玩Wordle…」「正在假裝通過圖靈測試…」,long 階段有「正在服務器繁忙,請稍後再試…」。這些只是界面文案,不是插件真的在執行對應動作。如果要在工作環境裏用,建議整表換成自己的句子,例如:
{
"config": {
"intervalMs": 8000,
"typeSpeedMs": 0,
"longAfterMs": 60000,
"debug": false,
"gradient": { "enabled": false }
},
"phrases": {
"zh": {
"thinking": ["正在讀取任務…", "正在整理上下文…"],
"running": ["正在調用工具…", "正在修改工作區文件…"],
"long": ["這一回合比較久,請稍候…"]
}
}
}
改完保存 config.json,刷新頁面就會重新 fetch 路由。不必重啓 Node 進程;如果瀏覽器還在用舊緩存,再硬刷新一次。
文案來源有多層覆蓋,優先級從高到低是:
- localStorage 單條覆蓋:
dsh-status-rotator.texts[.]/texts - localStorage 完整配置:
dsh-status-rotator.config(把整份 JSON 貼進去,刷新生效) - 外部 JSON:
dsh-status-rotator.url> 源碼裏的EXTERNAL_URL常量 > 本地自動加載/plugins/dsh-status-rotator/config.json - 內置默認值:僅
lib/client.js頂部的DEFAULT_CONFIG(不含文案)
舊格式的純文案 JSON(例如 { "zh": [...], "en": [...] } 或 { "thinking": [...] })仍然兼容,會被當成「只帶文案的配置」。日常改 config.json 就夠用;localStorage 更適合臨時試一句、不想動文件的情況。
另外,倉庫還帶了一個可選腳本 scripts/fetch-qq-group.cjs:若本機有 OneBot v11 兼容的 HTTP API(README 舉例 NapCat / LLOneBot / go-cqhttp / OpenShamrock),或準備一份本地成員名單,可以生成「正在路由(某某)寫代碼…」這類句子。沒有機器人時,把暱稱按行寫入 members.txt 再跑:
node scripts/fetch-qq-group.cjs --input members.txt
生成結果默認只有 zh.thinking 一組,其它階段會按回退規則用同一組。這不是安裝插件的必做步驟,用不到可以忽略。
適用場景與注意事項¶
比較適合已經在用 dsh 網頁界面、覺得底部狀態行過於單調,又希望自己寫文案的人。它只改這一處展示,和側邊欄、主題皮膚、任務看板不是一類東西。
使用時有幾點需要注意。
第一,這是 Web UI 插件。package.json 裏 dsh.client.platform 爲 web,在無界面的 headless 運行方式下沒有對應的狀態行。
第二,它不改變智能體做什麼。階段劃分只看 TurnStatus 裏的時鐘,不是去解析模型輸出或工具調用。時鐘大約 15 秒後纔出現,因此前十幾秒會落在 thinking。
第三,默認示例文案是玩笑口吻,個別句子帶梗、帶吐槽。裝完如果直接拿 config.example.json 用,狀態欄會輪播這些句子;對外演示或嚴肅環境裏,應先換成自己的文案。
第四,插件以當前 dsh 進程權限運行,安裝時可能執行來自 GitHub 的代碼。安裝前檢查源碼倉庫和許可證;需要可復現環境時固定 commit。社區目錄不是官方應用商店,收錄不等於官方背書。
第五,dsh 本身仍是開發者預覽,Web UI 的 DOM 結構若後續調整,按 role / aria-live 定位的方式有可能失效。遇到狀態行不變,可先硬刷新,再打開 debug: true 看控制檯日誌。
小結¶
dsh-status-rotator 把網頁界面底部那行固定的 Deep diving...,換成按階段輪播、可打字、可漸變的自定義文案,時鐘和智能體行爲保持原樣。安裝命令以目錄頁爲準:
dsh plugin add github:01Virex/dsh-status-rotator
目錄詳情頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-status-rotator/
GitHub 倉庫:https://github.com/01Virex/dsh-status-rotator