dsh-session-repair:DSH 会话诊断与安全修复

前言

在 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
羽毛球分组比赛记分
小程序二维码

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

小夜