使用 dsh-status-rotator 爲 DeepSeek Harness 網頁界面輪播回合狀態文案

前言

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 裏的插入內容一致:

  1. 把項目目錄放到當前 profile 的 node_modules 下(Windows 默認路徑形如 C:\Users\<你>\.dsh\profiles\node_modules\dsh-status-rotator\)。
  2. 在該 profile 的 cordis.patch.yml 裏插入:
- insert:
    - id: status-rotator
      name: dsh-status-rotator
  1. 在插件目錄執行 node gen-config.cjs,從 config.example.json 生成本地 config.json(僅當文件不存在時創建,不會覆蓋你已經改過的配置)。
  2. 重啓 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 進程;如果瀏覽器還在用舊緩存,再硬刷新一次。

文案來源有多層覆蓋,優先級從高到低是:

  1. localStorage 單條覆蓋:dsh-status-rotator.texts[.] / texts
  2. localStorage 完整配置:dsh-status-rotator.config(把整份 JSON 貼進去,刷新生效)
  3. 外部 JSON:dsh-status-rotator.url > 源碼裏的 EXTERNAL_URL 常量 > 本地自動加載 /plugins/dsh-status-rotator/config.json
  4. 內置默認值:僅 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.jsondsh.client.platformweb,在無界面的 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

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜