前言¶
在 DeepSeek Harness(DSH)的插件生态中,单个插件故障可能导致 dsh web 无法启动,或长时间运行的任务因网络中断/流阻塞而卡死。dsh-doctor 是一个运行在独立 Node 进程中的监控插件,用于处理由插件引起的启动故障和会话卡顿。它不依赖 dsh-daemon,通过独立的机制介入并尝试修复环境。
核心功能¶
dsh-doctor 提供四种核心能力:
1. Web 启动恢复:在 60 秒预算内自动尝试恢复因插件导致失败的 Web 服务启动。
2. 工具错误捕获:通过 tools/* 事件钩子捕获所有工具调用错误。
3. 会话监控:监控所有活动会话,检测卡顿并尝试恢复。
4. 安全模式补丁:支持通过写入补丁文件来禁用故障插件或开启安全模式,不直接修改原始配置文件。
安装与启用¶
安装方式:通过官方目录或 GitHub 仓库安装。
官方目录链接:https://www.skillhub.cn/plugins/d86e/dsh-doctor
GitHub 仓库链接:https://github.com/d86e/dsh-doctor
工作原理¶
Web 启动恢复(60秒预算)¶
监控器每 30 秒探测一次 dsh web 健康状态。连续失败三次后进入故障处理流程,硬性限制单次故障恢复总时长不超过 60 秒。
简单路径(约 10 秒):读取日志,通过正则匹配识别故障插件,在 cordis.patch.yml 的兄弟文件中禁用该插件行,然后重启 dsh web。
复杂路径(≤60 秒):若无法定位单一故障,则写入一个覆盖所有插件的“安全模式补丁”(仅允许 dsh-core 运行),重启后进入安全模式,直到安全模式被移除。
工具错误捕获¶
插件订阅 tools/execute 和 tools/post-execute 事件。当工具调用失败时,错误会被分类并记录,不会阻塞主进程。
会话监控¶
监控器维护一个会话状态机,检测到回合处于 running 状态且超过阈值时间无新事件时,会通过 agent.followup 发送“继续”消息唤醒会话。同时也提供 dsh_doctor_watch_cancel 用于手动取消。
使用示例¶
检查正在监控的会话列表:
dsh_doctor_watch_list()
诊断失败的插件:
dsh_doctor_diagnose()
注意事项¶
- CLI doctor 功能:
dsh doctor命令计划在 v0.3.0 版本中推出,当前版本仅支持在运行中的dsh web进程内通过工具调用进行诊断。 - 独立性:插件不调用或依赖
dsh-daemon,两者共存不会冲突。 - 配置文件安全:安全模式补丁和修复操作会写入
cordis.patch.yml(不修改原始文件),您可以随时检查或回滚。 - 权限:插件以当前 DSH 进程的权限运行。
结语¶
dsh-doctor 为 DSH 用户提供了一个独立的故障恢复层,适合需要高可用性和自动容灾的场景。