前言¶
DeepSeek Harness(DSH)采用“一切皆插件”的理念。现有的重启插件往往会在用户操作时中断当前正在进行的回复轮次。dsh-graceful-restart 插件旨在解决这一问题,它通过自动“套壳”机制,在后台维护一个守护进程。当需要重启时,它不会立刻杀掉进程,而是等待当前轮次结束,确保工作不丢失。同时,它具备启动失败自动回滚和页面自动刷新能力。
核心功能¶
优雅重启¶
触发 restart_harness 工具或 /restart 斜杠命令后,插件不会立即终止进程,而是等待当前所有 agent 轮次结束。只有确认当前回复完整落盘后,才会由第一代进程拉起新一代,实现无缝切换。
重启后自动唤醒¶
重启前,插件会将活跃会话 ID 写入 marker 文件。新一代启动后,会轮询等待会话恢复,并自动执行 steer() 操作唤醒智能体。唤醒时的提示语优先级为:continuePrompt 参数 > settings.yaml 默认值 > 内置默认。
启动守护与失败回滚¶
这是插件的核心能力。它采用 git 风格的快照链机制:每次启动前记录插件清单快照,生成按时间排序的链表,并通过一个 current 指针指向当前生效版本。
当启动失败(退出码非 0 或宽限期内退出)时,系统会执行以下步骤:
1. 将错误独立记录。
2. current 指针回退到更早的快照。
3. 对比实际清单与当前快照,计算差集。
4. 执行逆操作(新增的卸载、被卸载的装回、版本变化的恢复基线)。
5. 重试启动,循环直到成功或没有更早的快照。
页面自动刷新¶
插件通过 WebSocket 连接状态和代际 ID(进程启动时间戳)对比来判断页面是否需要刷新。只有当连接恢复且 ID 发生变化时,页面才会自动刷新一次。这种方式不依赖轮询,仅在连接事件触发动作。
设置菜单¶
在 DSH 的设置页面中会新增“优雅重启”页签,用于查看快照时间线、错误信息以及回滚记录。
安装与配置¶
安装命令如下:
dsh plugin --profile web add dsh-graceful-restart
安装后需重启 DSH 生效。如果是本地开发,使用 file: 依赖时,修改代码后需要先 remove 再 add 重新同步。
在 settings.yaml 中可以配置唤醒时的默认提示语:
dsh-graceful-restart:
continuePrompt: (系统已重启完成)请继续之前未完成的工作。
使用方式¶
用户可以通过以下方式操作:
- 模型工具:
restart_harness(支持continuePrompt参数,会自动唤醒),shutdown_harness(优雅关闭不重启),cancel_harness_action(撤销未执行的重启或关闭)。 - 斜杠命令:
/restart(重启,需等待唤醒),/shutdown(关闭)。
工作原理与文件¶
插件通过 ConPTY 句柄继承链将输出重定向回用户终端。第一代进程作为隐形 Launcher,负责拉起新一代并处理守护逻辑。
相关文件位于 $DSH_HOME 下:
* dsh-process.json:进程索引。
* dsh-graceful-restart-snapshot.json:启动守护快照链与 current 指针。
* dsh-resume.json:唤醒 marker。
* dsh-graceful-restart.log:插件与守护日志。
* dsh-graceful-restart-stderr-<时间戳>.log:每次启动尝试的完整错误输出。
注意事项¶
- 运行环境:用户必须通过
dsh web启动,插件依赖 Windows Terminal 的 ConPTY 句柄继承链才能正常显示输出。 - 生效时机:安装后必须重启 DSH 才能生效。
- 回滚机制:回滚无次数上限,直到成功或无更早快照。
- 撤销操作:已安排但未执行的重启或关闭操作,可以通过
cancel_harness_action随时撤销。
结语¶
该插件解决了 DSH 在插件升级或配置变更时必须中断当前任务的问题。通过自动回滚和唤醒机制,它提供了比原生重启更稳定、更智能的运行体验。
- 插件目录:https://www.skillhub.cn/plugins/msilita/dsh-graceful-restart
- 源码地址:https://github.com/msilita/dsh-graceful-restart