dsh-smart-restart:DSH 重启后自动唤醒主 agent

前言

DSH 的插件生态遵循「一切皆插件」的思路。社区目录是独立站点,不等于官方应用商店。

对 DSH 使用者来说,一个具体问题出现在服务重启后:主 agent 可能不知道服务刚刚重启过,也不知道上一次会话为什么中断。已有做法可能需要用户再提示一次,例如说明服务已重启。下面介绍的插件会在 boot 时自动发送通知,使中断的工作可以被继续处理。

这是什么

  • 插件名:
edusrez/dsh-smart-restart
  • 维护者:
edusrez
  • 许可证:
MIT
  • 定位:这是一个 DSH host plugin,用于检测 DeepSeek Harness service 是否重启,并在 boot 时向主 agent 发送一次 Smart-restart 通知,使中断的工作可以恢复。
  • 已核实资料中的 package.json 版本字段:
0.5.1

已核实资料未提供该版本的具体变更说明。

核心能力

重启检测

插件会保存上一次 boot 的状态。状态文件路径如下:

<DSH_HOME>/<stateDir>/marker.json

该文件包含以下字段:

{lastBootAt, pid, dshVersion?}

boot 时,插件比较上一次 boot 的 pid 与当前 process.pid。如果两者不同,说明新进程已经接管,即服务发生过重启。downtime 按以下公式计算:

now - previous lastBootAt

计算结果会 clamp 到大于等于 0。

插件随后会写入新的 marker,供下一次 boot 比较。

boot 通知

每次 boot,插件通过 source-agnostic 的 agent/session-start hook 向主 agent 发送一次 Smart-restart 通知:

agent/session-start

该 hook 不依赖 publication source。对于延迟恢复的 pinned session,插件使用 bounded poll 来捕获稍晚恢复的 session:

750ms tick
~15s cap

投递优先级

通知投递按以下优先级处理:

pending-notice.json
shutdown-notice.json
target

其中:

pending-notice.json

优先级最高。读取一次后会被消费。

如果没有 pending notice,则读取:

shutdown-notice.json

该文件也读取一次后消费。

如果 shutdown notice 不满足 pin 条件,则回退到:

target

agent 主动重启 DSH

v0.2.0 新增了一个工具:

smart_restart

主 agent 可以这样调用:

smart_restart(reason?)

这一步由 agent 发起 DSH 重启,并可选携带 reason。

工具会先校验配置项:

restartUnit

校验通过后,工具会同步写入:

pending-notice.json

这一步在进程 spawn 之前完成,使通知能够在服务被重启后保留下来。

随后,工具生成 detached setsid bash 进程,并延迟约 1s 执行:

systemctl restart <unit>

这一步用于在当前 DSH 进程被终止后仍触发 systemd 重启。

工具返回类似以下结构:

{ok: true, restarting: true, ...}

下一次 boot 时,插件读取:

pending-notice.json

并将通知 pin 到发起该调用的会话。

普通重启时的自动通知

v0.3.0 增加了对普通重启场景的覆盖。

当进程收到以下信号时:

SIGTERM
SIGINT

上一个进程会写入:

shutdown-notice.json

该文件记录最后活跃 session 以及时间戳。

boot 时,如果没有:

pending-notice.json

插件会读取:

shutdown-notice.json

如果记录中的最后活跃 session 在以下配置项时间内保持活跃:

shutdownGraceMs

则插件会把通知 pin 到该 session。

否则,投递回退到:

target

因此,普通 systemctl restart 在 agent 活跃期间发生时,也可以在该 session boot 时收到通知,而不需要用户额外提示。

canary pre-restart gate

v0.4.0 支持可选的 canary pre-restart gate。

启用后,插件会先启动一个临时 DSH 实例,验证启动结果。如果临时启动失败,重启会被中止。

v0.5.0 支持从以下路径自动检测 systemd unit:

/proc/self/cgroup

这使得 smart_restart 工具和 canary 在 systemd-managed installs 中可以实现零配置。

安装与依赖

已核实资料未提供 Install 命令原文,因此本文不给出安装命令。安装前建议查看目录页或 GitHub 仓库中的安装说明。

插件声明了以下 peerDependencies:

@deepseek-ai/cordis ^4.0.1
@deepseek-ai/dsh-agent ^0.1.0-rc.7 || ^0.1.1-rc.0
@deepseek-ai/dsh-llm ^0.1.0-rc.7 || ^0.1.1-rc.0
@deepseek-ai/dsh-session ^0.1.0-rc.7 || ^0.1.1-rc.0
@deepseek-ai/dsh-home-paths ^0.1.0-rc.7 || ^0.1.1-rc.0
@deepseek-ai/dsh-tools ^0.1.0-rc.7 || ^0.1.1-rc.0

插件是自包含单主机 bundle,不依赖外部服务。

典型用法

agent 发起重启

  1. agent 调用:
smart_restart(reason?)
  1. 工具校验:
restartUnit
  1. 工具同步写入:
pending-notice.json
  1. 工具生成 detached setsid bash 进程,并延迟约 1s 执行:
systemctl restart <unit>
  1. 工具返回:
{ok: true, restarting: true, ...}
  1. 下一次 boot 时,插件读取:
pending-notice.json
  1. 插件将通知 pin 到发起该调用的会话。

agent 活跃期间发生普通重启

  1. 进程收到:
SIGTERM
SIGINT
  1. 上一个进程写入:
shutdown-notice.json
  1. boot 时,插件在没有 pending notice 的情况下读取该文件。

  2. 如果记录中的最后活跃 session 在:

shutdownGraceMs

内活跃,则通知 pin 到该 session。

  1. 否则,通知回退到:
target

适用场景与注意

适合以下场景:

  • DSH 实例会因服务重启而中断;
  • 希望主 agent 在 boot 后知道服务刚刚重启;
  • 希望 agent 在重启后继续处理未完成任务;
  • 希望普通 systemctl restart 也能把通知送到对应 session;
  • 希望在重启前使用 canary 做一次临时启动验证。

注意以下几点:

  • 插件作为 DSH host plugin 运行,会以当前 dsh 进程权限访问状态文件并调用系统命令;
  • 安装前应检查源码、依赖和许可证;
  • canary 会启动临时 DSH 实例,启用前需要确认当前环境允许这样做;
  • v0.5.0 的 systemd unit 自动检测依赖:
/proc/self/cgroup

适用于 systemd-managed installs。
- 已核实资料未提供官方安装命令原文,不要凭仓库名拼接安装命令。

链接

  • 目录页:
https://www.skillhub.cn/plugins/edusrez/dsh-smart-restart
  • GitHub 仓库:
https://github.com/edusrez/dsh-smart-restart
羽毛球分组比赛记分
小程序二维码

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

小夜