前言¶
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 发起重启¶
- agent 调用:
smart_restart(reason?)
- 工具校验:
restartUnit
- 工具同步写入:
pending-notice.json
- 工具生成 detached setsid bash 进程,并延迟约 1s 执行:
systemctl restart <unit>
- 工具返回:
{ok: true, restarting: true, ...}
- 下一次 boot 时,插件读取:
pending-notice.json
- 插件将通知 pin 到发起该调用的会话。
agent 活跃期间发生普通重启¶
- 进程收到:
SIGTERM
SIGINT
- 上一个进程写入:
shutdown-notice.json
-
boot 时,插件在没有 pending notice 的情况下读取该文件。
-
如果记录中的最后活跃 session 在:
shutdownGraceMs
内活跃,则通知 pin 到该 session。
- 否则,通知回退到:
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