前言¶
用 DeepSeek Harness(DSH)做多輪對話和工具調用時,失敗往往散落在各會話的 tool/result、turn/end 或模型重試事件裏。要復盤「哪類錯誤最煩、最近是否在惡化」,通常只能翻日誌或憑印象。dsh-error-digest 在宿主側摺疊會話投影、在側欄彙總錯誤事實,跨會話按頻次排序,併爲每條錯誤提供「分析」「防範」「忽略」三種後續動作。
這是什麼¶
dsh-error-digest 是維護者 railgun20001 發佈的 DSH 插件,npm 包名與倉庫名一致,當前版本 0.2.1,許可證 MIT。它在社區目錄 SkillHub 中歸類爲 admin-security。
插件分兩半:bundle.patch 向宿主寫入錯誤賬本投影;client 提供左側欄底部的「錯誤彙總」面板。面板只合並、排序和渲染,不 retain 歷史會話,避免誤激活他人會話。
收集哪些錯誤¶
宿主半監聽會話事件,將下列情況記入賬本:
| 會話事件 | 含義 | 界面歸類 |
|---|---|---|
tool/result 且 data.error 或 message.isError |
工具執行失敗(非零退出、編輯無唯一匹配、參數校驗拒絕等) | 工具失敗 |
turn/end 且 reason.kind === 'error' |
整輪失敗(重試耗盡後模型請求仍失敗) | 回合失敗 |
llm/retry |
模型請求失敗並觸發重試(限流、5xx、超時等) | 模型重試 |
寫入時用簽名合併同類項:類別、工具名或提供方、錯誤碼、歸一化後的首段摘要。歸一化會去掉 UUID、長十六進制、絕對路徑、行列號、耗時與字節數,但保留 HTTP 狀態碼、退出碼等區分信息。界面再跨會話合併同簽名,並按出現次數排序,便於一眼看到高頻問題。
面板上的三個動作¶
每條錯誤後有三個按鈕,均通過宿主 uiWorkspace.startSession 打開新對話,提示詞落在草稿輸入框,發送仍由用戶確認:
| 按鈕 | 作用 |
|---|---|
| 分析 | 新對話任務爲查根因、影響範圍、修復或規避步驟;輸入框預填類別、來源、錯誤碼、次數、最近時間與摘要 |
| 防範 | 新對話任務爲判斷在哪一層攔截(規則、skill、工具校驗、插件代碼、文檔),並給出最小改動與自查清單 |
| 忽略 | 僅在本機面板隱藏該條;不刪日誌,不影響投影統計口徑 |
「忽略」存在瀏覽器 localStorage 鍵 dsh-error-digest/ignored-v1,按簽名記賬並保留摘要,上限 200 條。面板頂部可查看「已忽略 N 條」並逐條或全部恢復。
安裝與啓用¶
在 DSH 插件環境中按 npm 安裝(與 README 一致,勿自行拼接 dsh plugin add github:...):
npm install dsh-error-digest
包內 dsh 字段聲明 bundle.patch(cordis.patch.yml)與 web 客戶端;exports 暴露 ./client(lib/client.js)、./locale/*.json、./icon 與 ./package.json,無需二次構建。運行環境要求 Node >= 20。
客戶端硬依賴注入:@deepseek-ai/dsh-api-session-controller、@deepseek-ai/dsh-client-locale、@deepseek-ai/dsh-client-ui-layout、@deepseek-ai/dsh-client-ui-sidebar、@deepseek-ai/dsh-client-ui-workspace。若 uiWorkspace / layout 未正確注入,「分析 / 防範」可能出現點了無反應。
典型用法¶
- 安裝並啓用插件後,在左側欄底部打開「錯誤彙總」面板。
- 按頻次查看工具失敗、回合失敗、模型重試;前三名序號會加深,便於關注高頻項。
- 對需要深挖的項點「分析」,在草稿中核對預填信息後再發送;對需要制度性攔截的項點「防範」。
- 對已知噪聲或已接受的失敗點「忽略」;誤操作時在「已忽略」列表中恢復。
排障時可在瀏覽器控制台使用全局對象(與面板同一份合併邏輯):
__DSH_ERROR_DIGEST__.snapshot()
__DSH_ERROR_DIGEST__.lastAction()
__DSH_ERROR_DIGEST__.canOpenConversation()
若面板一直爲空,可用宿主只讀診斷區分「確實沒錯誤」與「投影未工作」:
# POST /dsh-error-digest/debug,body 可爲 ping 或 debug
該路由回答投影鍵是否註冊、各在掛會話摺疊出了什麼。
實現要點(便於排障)¶
- 宿主註冊
dialogErrors會話投影,由框架摺疊所有會話(含未打開的冷會話),並隨會話列表 RPC 到達客戶端。 - 每個會話賬本最多 60 條不同簽名(超出時先刪次數最少的);在途工具調用表最多 128 項;摘要最長 240 字符。
- 「分析 / 防範」先
layout.selectPanel(null)回到對話主面板,再uiWorkspace.startSession,避免 composer 未掛載時靜默失敗;失敗時會重試並將提示詞複製到剪貼板。
適用場景與注意¶
適合誰:長期用 DSH 跑 Agent、頻繁遇到工具或模型錯誤的開發者,需要跨會話看頻次、並想把復盤接到「新建對話」工作流裏的人。
權限與信任:插件以當前 DSH 進程權限運行,會讀取本機可見會話的投影數據。安裝前建議查看 GitHub 倉庫 源碼與 MIT 許可證。
已知邊界(README 明確寫出):
- 只統計本機可見會話;很久未物化的歷史會話,需被打開或產生新事件後纔會進入統計。
- 分叉會話會繼承前綴裏的錯誤再記一次,符合「複製歷史」語義。
- 「忽略」僅本機瀏覽器存儲;換機器、換 profile 或清站點數據會丟失忽略列表,恢復後面板頻次仍完整。
- 按鈕不自動發送消息,避免在用戶未選好目錄或模型時消耗請求。
結尾¶
dsh-error-digest 把分散在對話日誌裏的失敗收成一張按頻次排序的表,並用與官方一致的 startSession 通路把「分析」和「防範」落到新對話草稿裏。目錄頁:SkillHub · dsh-error-digest;源碼與說明:github.com/railgun20001/dsh-error-digest。