dsh-graceful-restart:DeepSeek Harness 优雅重启与启动守护插件

前言

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

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

小夜