Skip to content

dsh-smart-restart

Verified

@goodandready/dsh-smart-restart · v0.1.1 · MIT · Web UI

Verified restart for DeepSeek Harness: restart without privileges, check that the harness really came back, report the verdict to the session that asked, and hand back what was left to do.

Install

dsh plugin add @goodandready/dsh-smart-restart

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Tags

Readme

@goodandready/dsh-smart-restart

让重启经过验证,而不只是发出通知。

npm package · MIT · DSH plugin

DSH Hub — goodandready.app

English • 中文 • Русский

⭐ 如果您喜欢这个插件,请在 GitHub 上为它点亮 Star — 这能让我知道插件对您有用,并鼓励我继续维护它。

🐛 如果您发现 Bug 或希望增加功能,请使用任意语言在 GitHub 上提交 Issue。

概述

重启会终止执行该操作的进程。普通通知只能说“服务已重启”,却无法回答两个关键问题:Harness 现在是否健康,以及被中断的任务应该继续什么。直接调用 systemctl restart 还可能需要 root 或 polkit 权限。

本插件为 DeepSeek Harness 提供经过验证的重启流程:先记录原因、目标会话和待继续任务,再结束当前进程让 systemd 启动新进程。新进程执行健康检查,并把结果和恢复提示发回发起请求的会话。默认方式无需额外权限。

架构

graph LR
  A[DSH web profile] --> B[Host plugin]
  B --> C[Restart intent and guard]
  C --> D[Service manager restarts DSH]
  D --> E[Next-process health checks]
  E --> F[Report to requesting session]
  A --> G[Client module loader]
  G --> H[Settings card]
  H --> B

浏览器端通过 DSH 的延迟 CommonJS 客户端加载器注册设置卡片;工厂返回 apply 和 inject。宿主端负责工具、重启、健康检查和报告。

功能

  • 无需额外权限重启:默认结束 Harness 进程,由配置为 Restart=always 的 systemd 拉起;systemctl 模式适用于已授予相应权限的环境。
  • 启动后健康检查:检查 DSH 服务、已注册工具、systemd 单元状态及重启次数、监听端口是否由本服务 cgroup 中的进程持有,以及插件和核心版本。结果为 ok 或带失败明细的 degraded。
  • 报告发回原会话:重启前保存目标会话、原因和待继续内容;新进程将检查结果发回同一会话,必要时会有限等待会话上线。
  • 循环保护:10 分钟窗口内达到 3 次重启上限后拒绝新请求。
  • 设置卡片:提供英文和中文界面;俄语翻译由 dsh-russian-lang 提供。

Модули

  • lib/index.js:Cordis 宿主入口,注册设置、重启/状态工具、启动检查与报告发送。
  • lib/boot.js:纯函数逻辑,识别重启、保护循环、检查 cgroup 和端口、汇总结果并格式化报告。
  • lib/client.js:浏览器设置卡片;DSH 加载工厂必须返回 CommonJS 导出对象。
  • cordis.patch.yml:将此包加入所选 web profile。

安装

dsh plugin --profile web add @goodandready/dsh-smart-restart

默认模式要求 Harness 由 systemd 管理,且服务配置 Restart=always。插件从进程 cgroup 自动检测单元,也可以在设置中指定。

设置

在 DSH 插件设置卡片中修改;不需要密钥。

参数 类型 默认值 说明
enabled boolean true 是否注册工具并检查每次启动。
restartMode string kill kill 结束进程并由 systemd 重启;systemctl 调用 systemctl restart 。
unit string 自动检测 要检查和重启的 systemd 单元;空值从 /proc/self/cgroup 检测。
delayMs number 3000 结束进程前的等待时间,让工具回执先返回。
target string requester 报告目标:发起请求的会话、primary 或会话 ID。
stateDir string .restart-guard $DSH_HOME 下保存启动标记、意图、报告和重启历史的目录。
maxRestarts number 3 窗口内达到该次数时拒绝重启。
windowMs number 600000 循环保护窗口,单位毫秒。
timeoutMs number 5000 每项健康探测的超时时间。
expectTools string[] [] 启动后必须注册的工具;缺失会降低健康结论。
toolEnabled boolean true 是否注册 dsh_restart 和 dsh_restart_status。

工具

  • dsh_restart:参数 reason、resume、confirm 和 delayMs。保存意图、检查循环限制、安排重启并返回回执;重启后的结论会发给调用它的会话。
  • dsh_restart_status:只读显示最近启动、停机时长、健康报告、待处理意图和当前窗口中的重启次数。

报告

报告包含启动时间、停机时长、每项健康检查结果、插件/核心版本、总体结论,以及重启前记录的待继续内容。值缺失时不会伪造健康状态。

限制与故障排查

  • 默认模式依赖 systemd 的 Restart=always。手动启动的独立进程无法自行恢复,插件会明确报告这一限制。
  • kill 模式会结束当前执行轮次;保存的意图用于为下一轮提供上下文。
  • 端口和 cgroup 检查面向 Linux;其他系统会跳过这些检查。
  • 插件由 DSH 包管理器 (CLI/pnpm) 统一管理;本插件不提供独立的 /api/dsh/update 路由,更新会在重启后由内置 health-check 验证。
  • 对于 systemd 用户单元,--user 标志会在状态检查和 systemctl restart 中自动传递。
  • 如果 DSH 报告客户端导入失败并提示 module is not defined,说明客户端加载工厂不兼容。请使用定义并返回 CommonJS 导出的版本,再重新加载 web profile。
  • 宿主端工具可能正常,而浏览器设置卡片仍失败;请分别检查客户端模块启动错误。

开发与许可证

运行 npm test 执行测试。

MIT © GooDAnDReaDY