dsh-error-digest:把 DSH 對話裏的錯誤收成一張可排序的表

前言

用 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 未正確注入,「分析 / 防範」可能出現點了無反應。

典型用法

  1. 安裝並啓用插件後,在左側欄底部打開「錯誤彙總」面板。
  2. 按頻次查看工具失敗、回合失敗、模型重試;前三名序號會加深,便於關注高頻項。
  3. 對需要深挖的項點「分析」,在草稿中核對預填信息後再發送;對需要制度性攔截的項點「防範」。
  4. 對已知噪聲或已接受的失敗點「忽略」;誤操作時在「已忽略」列表中恢復。

排障時可在瀏覽器控制台使用全局對象(與面板同一份合併邏輯):

__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。

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

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

小夜