前言¶
在 DSH 环境中,当 DeepSeek 网关在工具调用增量中发出空的 id 或 name 时,已持久化的历史记录会被“污染”,导致后续加载会话时抛出 message must have tool source 错误。dsh-session-repair 是一个 DSH Web 插件,提供会话诊断、受信检查点、修复前备份和安全修复能力,旨在修复这些被污染的历史记录。
插件定位¶
dsh-session-repair 是一个 DSH Web 插件,用于会话诊断、受信检查点、修复前备份和安全修复。
* 维护者: Zn-Dk
* 分类: session
* 许可证: MIT
核心功能¶
该插件提供以下能力:
* 会话诊断: 通过 Session Health Check 生成诊断报告。
* 安全修复: 提供确定性的修复计划,修复前自动创建备份。
* 备份管理: 支持修复前备份、回滚至修复前状态、手动清除备份。
* Agent 工具集成: 注册 dsh_session_repair 模型可调用工具,用于只读诊断。
* 报告导出: 支持诊断 JSON 导出和报告文件下载。
安装与启用¶
通过 npm 安装该插件(推荐):
dsh plugin --profile web add dsh-session-repair
安装完成后,重启 dsh web 服务并刷新 Web 界面。
使用方式¶
1. Web 界面操作¶
打开任意会话,在 Chat 头部点击 Session Health Check。
* 如果诊断报告状态为 repairable(可修复)且存在确定性修复计划,面板将显示 Backup & Repair 按钮。
* 点击该按钮会确认目标序列和修复前备份,然后执行批量修复并重新验证。
* 如果会话处于模糊、活跃、文件已变更或被阻塞状态,将不会显示可写修复按钮。
* 面板还提供 Refresh(刷新报告)、Copy Report(复制 JSON)、Export Report(导出文件)、Restore Pre-Repair(回滚)和 Clear Backups(清除备份)功能。
2. Agent 工具调用¶
插件注册了一个模型可调用的工具 dsh_session_repair。
* 用途: 这是一个只读诊断工具,用于诊断会话健康状态。
* 典型用法: 在当前会话中告诉 Agent “health-check the current session”,Agent 会调用该工具。在历史会话中,可指定 sessionId 进行诊断。
* 注意: 工具仅用于诊断,实际的修复操作仍需通过 Web 界面的 Session Health Check 面板执行。
安全边界与注意事项¶
- 权限控制: 插件以当前 dsh 进程权限运行,Host 会先读取原始存储再决定是否调用引擎 API。客户端无法直接触碰
~/.dsh目录,也不能提交任意的 JSON 补丁。 - 修复机制: 修复操作使用 batchId 和工件指纹,每次修复前强制创建预修复备份,并在重新验证后才原子性地替换旧数据。
- 会话状态: 活跃会话通过
ctx.get('sessions')/ctx.get('agents')检测,其未闭合的回合/步骤被视为正常追加状态,不会触发修复。 - 数据存储: 插件自身数据存储在
~/.dsh/session-repair/目录。外部的~/.dsh/backup-sessions-*目录仅作为遗留的法医/对比源使用,默认不会被自动恢复。
总结¶
dsh-session-repair 提供了一套在 Web 界面下安全修复 DSH 会话历史损坏的方案,特别是针对工具调用 ID 丢失导致的污染问题。它通过强制备份和确定性修复计划,降低了手动干预的风险。
- 插件目录: https://www.skillhub.cn/plugins/Zn-Dk/dsh-session-repair
- GitHub: https://github.com/Zn-Dk/dsh-session-repair