前言¶
用 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。