前言¶
在 DSH 里做长任务时,有时需要「关一次 Harness、再按原样起来、让同一会话接着聊」——例如装完依赖、改完 Host 侧配置、或中间插一段必须在 DSH 进程外执行的命令。人工点重启会打断 agent 当前轮次;若不管其它 agent 和后台 job 就杀进程,又容易把未收摊的任务一起带走。
下面介绍社区插件 dsh-autonomous-restart(维护者 meng-lx,分类:工作流)。它不是界面上的重启按钮,而是暴露给 agent 的工具:调用后插件接管倒计时与空闲判定,再通过包内 PowerShell 脚本关进程、可选执行命令、按启动计划重新拉起 DSH,并把唤醒词投回原会话。
这是什么¶
dsh-autonomous-restart 解决的是「何时可以安全重启整机上的 DSH,以及重启后如何续上原会话」。
插件负责判断「什么时候可以动手」;杀进程、跑命令、重启、唤醒交给 scripts/Restart-DSH.ps1 等脚本。两边通过交接文件通信,不互相猜测状态。
前置条件(资料原文):
- DeepSeek Harness 官方桌面端,或官方网页端(
dsh web) - Windows(重启动作由 PowerShell 脚本完成)
README 写明当前版本 1.2.2,已适配上述两种官方载体并在真机重启跑通;第三方载体不在默认支持范围内,检测出差异后由 agent 按 SETUP.md 征得同意后配置启动计划。
核心功能¶
唯一触发方式:restart_dsh¶
没有开关、没有自动触发。agent 调用 restart_dsh 工具后:
- 工具立刻返回,倒计时在后台进行,界面浮出毛玻璃卡片;
- 倒计时期间任意鼠标点击、滚轮、按键 → 取消本次重启,界面显示「已取消重启」;
- 倒计时结束 → 只在这一刻判一次整机是否空闲:
- 仍 busy → 不重启,展示「现在不能重启」及阻塞来源;
- 全部空闲 → 写交接文件、拉起脚本,调用方所在轮次可继续输出; - 脚本关闭 DSH、执行可选命令、再启动;新进程里插件读交接文件,把唤醒词投进原会话后删除文件。
从触发到唤醒词出现,文档给出的典型耗时约 15–20 秒。
调用参数¶
| 参数 | 必填 | 说明 |
|---|---|---|
command |
否 | DSH 关闭之后、重启之前执行的命令;可留空表示纯重启 |
autoSay |
否 | 重启后发给原会话的话,默认「已通过插件重启」 |
countdownSec |
否 | 倒计时秒数,3–600,默认 10 |
timeoutSec |
否 | 命令最长运行秒数,10–3600,默认 600;超时杀进程树仍启动 DSH |
wakeMode |
否 | plugin(默认,插件直投)或 script(外部脚本 CDP 注入,插件不可用时) |
命令失败或超时不会阻止重启;退出码写入日志与 last-run.json,唤醒词会附带失败说明。
空闲判定(倒计时结束那一刻)¶
任一成立即视为忙(宁可不动手):
agents.list()中有status === 'running'(含正在调用本工具的 agent;子代理在同一注册表);- 任一 owner 的 job 处于
running/stopping; - 消息队列
agent.inbox.nextTurn/nextStep非空; - 会话上存在已武装的
schedule类定时提醒; - 拿不到
agents服务时按忙处理。
插件自己创建的 job / 子代理不计入。忙则只提示、不排队、不自动重试。
入口处不预扫忙闲——调用时 agent 必然在跑;能否重启只由倒计时结束那一次判定。
桌面端与 dsh web¶
每次重启前宿主把实际启动方式写入 launch-plan.json(execPath、argv、cwd、getOrigin() 等),脚本照计划执行。计划校验失败则不杀进程。
唤醒链路两种载体一致:交接文件 + sessionController.prompt()。网页端标签页会自行重连;桌面端由脚本新开窗口。
设置与状态¶
「设置 → DSH 自动重启」提供五个默认值:唤醒方式、默认唤醒词、默认倒计时、默认超时、日志保留份数。没有「默认命令」是刻意的——命令只能当次由调用方传入。
状态与日志目录:~/.dsh/dsh-auto-restart/(含 settings.json、launch-plan.json、wake-request.json、last-run.json、logs/ 等)。
插件自用 UI 路由前缀 /auto-restart/api(非对外 API);请求需本机回环、自定义头 X-Auto-Restart: 1 等条件,否则 403。
安装与启用¶
资料给出的安装步骤如下。
- 把插件目录放到任意位置(例如
D:\DeepSeek Harness\dsh-auto-restart); - 在 DSH 里执行插件安装:
plugin_manager install_bundle,target填该目录的绝对路径; - 重启 DSH(Host 半边改动需重启才生效)。
也可在 profile 的 package.json 增加 link: 依赖并写入 dsh.profile.bundles,效果相同。仓库还提供 install.ps1(-Profile web|desktop|both)用于写入 profile。
安装前请自行阅读 GitHub 仓库 源码与 MIT 许可证;插件以当前 DSH 进程权限运行,重启脚本具备关进程与执行命令的能力。
典型用法¶
agent 在需要「先说完这一轮 → 等整机空闲 → 重启 → 续聊」时调用工具,例如纯重启:
restart_dsh({})
或在关闭 DSH 后、重启前执行一条命令,并自定义倒计时与唤醒语:
restart_dsh({
command: "npm install",
countdownSec: 30,
autoSay: "依赖已安装,请继续之前的任务"
})
倒计时内若用户仍在操作机器,任意输入会取消;取消后需 agent 再次调用才会重新进入流程。
适用场景与注意¶
适合:Windows 上使用官方 DSH 桌面端或 dsh web,希望由 agent 在可控窗口内发起重启,并在重启后自动向原会话投递一句继续指令的工作流。
务必留意(README「已知限制」摘要):
- 容器、systemd、Windows 服务等「杀不死」的托管形态不支持;无法检测时可通过
allowAutoRestart=false明确关闭; - 动手时需要脱离 DSH 进程树的子进程拉起脚本,否则
taskkill /T会连带脚本;插件按计划任务 → schtasks → WMI 阶梯尝试,三级均失败则报错且保持 DSH 运行; - 非官方 Electron 壳、
UtilityProcess内 CLI 等需按SETUP.md配置launchCommand; - 状态路由的闸主要挡网页跨站滥用,本机其它进程补头即可调用——不能当作安全边界。
DSH 生态主张「一切皆插件」;SkillHub 目录页 为社区站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-autonomous-restart 把「agent 发起重启」拆成可取消倒计时、单次空闲判定、脚本化关启与交接文件唤醒,避免 agent 一边跑一边被误杀,也避免 busy 时硬重启。需要细节时以仓库 README、SETUP.md 为准。
- 目录页:https://www.skillhub.cn/plugins/meng-lx/dsh-autonomous-restart
- GitHub:https://github.com/meng-lx/dsh-autonomous-restart