用 dsh-answer-pet 給 DeepSeek Harness 網頁界面加上回答狀態寵物

前言

DeepSeek Harness(dsh)是 DeepSeek AI 開源的智能體運行時,官方倉庫把架構概括成一句話:一切皆插件。模型適配器、工具、會話日誌、Agent 循環和界面都可以替換,不必改框架源碼。社區裏還有一份獨立的插件目錄站點(deepseek-harness-plugin.com),用來檢索帶 dsh-plugin 話題的倉庫。它和 DeepSeek / 幻方沒有官方從屬關係,不要把它當成官方應用商店。

在 Web 界面裏跑智能體時,常見的情況是:模型已經開始思考、正在吐字,或者正在調 grepread 一類工具,頁面上卻只剩一條流式文本。開了多個會話以後,更難一眼看出哪一輪還在跑、卡在哪一步、輸出了多少 token。會話事件其實都在 session/event 裏,缺的是一層面向人的進度展示。

dsh-answer-pet 做的就是這件事:在 DSH Web 頁面角落放一隻寵物,用動畫對應開始處理、思考、輸出、工具調用和完成;旁邊的狀態卡彙總 token、速率、耗時,並列出最近的模型軌跡。

這是什麼

dsh-answer-pet 是一款 會話與消息 類插件,由 Nanki-nn 維護,許可證 MIT,主要語言 JavaScript。GitHub 倉庫是 Nanki-nn/dsh-answer-pet。本文覈對時,package.json 版本爲 0.6.0,聲明自己是 DeepSeek Harness 的 Web bundle 插件(dsh.client.platformweb)。

它把兩件事拆開:

  • 核心層:按會話維護進度、模型軌跡和狀態卡。
  • 主題層:聲明式 PetTheme v1 負責寵物 SVG、局部動畫、寬高比和階段文案。

默認主題是藍鯨(blue-whale)。倉庫 README 還內置橘貓示例主題(orange-cat),以及高相似度銀漸層貓主題(silver-shaded-cat)。社區目錄頁收錄時的簡介仍寫「藍鯨 + 橘貓」;銀漸層貓是 2026-08-16 寫入主分支的,以 GitHub README 和 package.json 爲準。

它解決的不是「再養一隻會走動的桌面寵物」,而是回答進行中的可觀測性:當前階段、輸出速度、工具有沒有失敗。社區裏另有 dsh-petdsh-desktop-pet 等寵物插件,定位不同,不要混用安裝說明。

核心功能

回答階段與寵物動畫

插件監聽會話事件,把原始事件歸一成主題能理解的階段。README 給出的對應關係如下:

階段 來源事件 主題接口 狀態卡進度
空閒 無運行會話 idle 不顯示運行會話卡與數量
開始處理 turn/start turn 2%
思考 step/start think 5% → 10%
輸出 assistant/chunk stream 10% → 90%,按 token 填充
工具 tool/call tool 凍結當前進度並顯示工具名
完成 turn/end done 100%

進度不是模型接口返回的「完成百分比」。計算規則在 README 裏寫得很明確:優先用 assistant/chunkusage;流式期間按文本長度估算;有 maxTokens 時按 outputTokens / maxTokens 填充,沒有則用飽和曲線,避免進度長期停在某一格。同一回合內進度單調不減。輸出速率用 EMA 平滑。真實 token usage 到達後會覆蓋流式估算值。

寵物外觀跟階段走。藍鯨保留噴水、擺尾、眨眼和完成表情;橘貓有擺尾、抬爪、說話和完成表情;銀漸層貓是去背景緊裁切原畫,再加上呼吸、眨眼、搖擺、說話、抬爪和完成跳躍。單擊寵物只觸發主題定義的一次眨眼,不會換位置。

多會話狀態卡

每個正在運行的會話對應一張獨立卡片,縱向排列。卡片結構固定爲四塊:

  1. 標題行:運行狀態圓點、會話標題、進度百分比。
  2. 統計行:當前階段、輸出 token、token/s、已運行時間。
  3. 軌跡時間線:最近的模型動作、工具調用、狀態和耗時。
  4. 進度條:同一回合內平滑、單調填充;模型輸出時顯示流動效果。

沒有運行會話時,不顯示狀態卡,也不顯示數量按鈕。狀態卡可以摺疊;摺疊後,只有仍有運行會話時,纔會在寵物下方出現數量按鈕,點一下重新展開。空閒時不顯示數字 0,這是預期行爲。

寵物可以拖拽,位置寫在瀏覽器 localStorage。恢復默認位置時,README 給出的做法是在當前 DSH Web 頁面執行:

localStorage.removeItem('answer-pet:pos')
location.reload()

同時恢復狀態卡展開狀態:

localStorage.removeItem('answer-pet:bar')
location.reload()

模型執行軌跡

每張運行會話卡會展示最近的模型動作,例如 README 中的示例:

分析任務 · 步驟 1                  1s
推理與規劃                         3s
調用 grep · SessionEvent           2s
組織回答                           5s

時間線圓點含義:

  • 藍色呼吸圓點:當前正在執行。
  • 綠色圓點:動作或工具調用已完成。
  • 紅色圓點:工具調用失敗。

可識別的軌跡包括:開始處理請求、進入模型步驟並分析任務、生成 reasoning 時顯示「推理與規劃」、生成正文時顯示「組織回答」、原生 tool/call / tool/result,以及 run_code 內部的 tool/code-dispatch-start / tool/code-dispatch 嵌套調用。

爲避免面板過高,宿主最多保存最近 6 條,卡片顯示最近 4 條。每個運行會話獨立維護自己的軌跡。數據來源是 Node 側監聽 session/event,再通過輪詢 /answer-pet/state 和 SSE /answer-pet/events 推到瀏覽器;階段切換即時刷新,流式數據平滑更新。

工具摘要與隱私邊界

工具軌跡始終顯示實際工具名,例如 readgreppwshweb_search。參數區域只從白名單字段提取短摘要:

  • description
  • query
  • pattern
  • file_path
  • path
  • url

插件不會在軌跡面板裏展示完整 Shell 命令、完整工具參數或原始 JSON;摘要會壓縮空白並限制長度。PetTheme 文檔也寫明:主題拿不到原始 session/event,也拿不到完整工具參數。

PetTheme v1

主題和核心解耦。當前版本只加載隨插件構建、通過契約校驗的可信內置主題,不會:

  • 從 URL 下載主題
  • 掃描並執行第三方 JavaScript
  • 把未經清理的用戶 SVG 注入 DSH 頁面
  • 向主題暴露原始會話事件或完整工具參數

普通主題禁止外部圖片。銀漸層貓是例外:它顯式聲明 trustedRaster: true,運行時只允許一張構建時注入的 data:image/png;base64,...,仍然拒絕外部 URL。這個能力不對配置項或第三方動態主題開放。未知主題 id 會回退到藍鯨。

開發自己的內置主題,倉庫提供 PetTheme v1 開發指南。流程是複製橘貓主題文件、改 id / SVG / CSS / 文案、登記到 BUILTIN_THEME_IDS 和構建腳本,再跑測試與 npm run build:client。主題必須覆蓋 idleturnthinkstreamtooldoneerror 七個階段;CSS 必須限定在自己的 data-ap-theme 作用域。

安裝與啓用

社區目錄頁給出的安裝命令是:

dsh plugin add github:Nanki-nn/dsh-answer-pet

倉庫 README 額外要求裝到 Web profile,因爲客戶端只聲明瞭 platform: web

dsh plugin --profile web add github:Nanki-nn/dsh-answer-pet

安裝後停止並重新啓動當前的 dsh web 進程,再刷新原來的 Web 頁面。單獨再開一個 Web 服務,不會更新當前已經打開的頁面。升級時重複執行同一條安裝命令即可。

README 特別寫了:模型軌跡和主題配置都由插件的 Node half 提供;從舊版本升到 0.6.0 後必須重啓 dsh web,只刷新瀏覽器不會加載新的配置 schema。能看到寵物但沒有模型軌跡,通常也是這個原因。

目錄頁提示:如需可復現安裝,請固定 commit 哈希。本文覈對時,倉庫 main 最新提交爲 a0827d41c3f8f9177622c460a99f1aeeb8034b8d(2026-08-16),寫法如下:

dsh plugin add github:Nanki-nn/dsh-answer-pet#a0827d41c3f8f9177622c460a99f1aeeb8034b8d

插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。安裝前請檢查源代碼倉庫和許可證。

典型用法

切換主題與外觀

settings.yamlanswer-pet 段配置。倉庫給出的完整示例如下:

answer-pet:
  theme: blue-whale # blue-whale / orange-cat / silver-shaded-cat
  size: 96          # 寵物高度 px(48–200)
  corner: br        # 停靠角:br / bl / tr / tl
  opacity: 1        # 透明度(0.2–1)
  pollMs: 800       # /state 輪詢間隔
  showBar: true     # 顯示會話進度卡
  showBubble: true  # 顯示狀態氣泡

源碼裏的默認值與上表一致:主題 blue-whale,高度 96px,停靠右下角,透明度 1,輪詢 800ms,進度卡和氣泡都打開。pollMs 允許範圍是 200–5000。

主題更新會在下一次配置刷新時掛載。如果改完 theme 仍顯示藍鯨,先確認 id 寫對了;未知或無效 id 會回退到藍鯨。升級插件後還需要重啓 dsh web,讓新的 settings schema 生效。

只想看銀漸層貓時:

answer-pet:
  theme: silver-shaded-cat

看一次完整回合

  1. 確認寵物出現在設定的停靠角(默認右下)。
  2. 在某個會話裏發出請求。寵物切到思考 / 輸出動畫,狀態卡從約 2% 起跳。
  3. 模型開始吐字後,統計行出現輸出 token 和 token/s,進度按 token 向 90% 推進。
  4. 發生工具調用時,進度凍結,氣泡或軌跡裏出現工具名;失敗則軌跡圓點變紅。
  5. turn/end 後進度到 100%,寵物切換完成表情。
  6. 多個會話同時跑時,每張卡獨立更新。不需要看卡時把狀態卡收起,只留數量按鈕。

本地開發(可選)

倉庫提供的開發命令:

npm install
npm test
node scripts/build-client.mjs
node scripts/build-client.mjs --check

客戶端 bundle 改完刷新頁面即可;Node half 改完必須重啓 dsh web

適用場景與注意事項

適合這些情況:

  • 主要在 DSH Web 裏使用智能體,想看當前回合卡在思考、輸出還是工具。
  • 同時開多個會話,需要按會話分開看進度和軌跡。
  • 關心輸出 token、速率和耗時,但不想翻原始事件日誌。
  • 想換一隻內置寵物,或者按 PetTheme v1 給項目提交新的內置主題。

需要注意:

  • 只覆蓋 Web profilepackage.json 把客戶端平臺寫成 web,裝到 headless 不會出現這隻寵物。
  • 進度是估算值。多數模型接口不提供「回答完成百分比」;有 usage 時會校正,沒有時用階段和飽和曲線。
  • 軌跡有長度上限,不是完整審計日誌。宿主留 6 條,界面展示 4 條;完整命令和原始參數故意不展示。
  • 主題不能從網上下載。當前只接受構建進插件的可信主題,不能把任意 SVG 或遠程圖片配進 settings.yaml
  • 安裝後必須重啓 dsh web。尤其是升級到帶新 schema 的版本之後,只刷新瀏覽器不夠。
  • 權限與許可證。插件以當前 dsh 進程權限運行,許可證爲 MIT。安裝前自己看源碼;社區目錄不是 DeepSeek 官方應用商店。

小結

dsh-answer-pet 把 DSH Web 裏本來就有的會話事件,收成一隻角落寵物和一組可摺疊狀態卡:階段動畫、token 統計、多會話進度,以及帶隱私裁剪的模型 / 工具軌跡。外觀由 PetTheme v1 聲明,默認藍鯨,另有橘貓和銀漸層貓。

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-answer-pet/

GitHub:https://github.com/Nanki-nn/dsh-answer-pet

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

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

小夜