dsh-autonomous-restart:由 Agent 发起、整机空闲后再重启 DSH

前言

在 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 工具后:

  1. 工具立刻返回,倒计时在后台进行,界面浮出毛玻璃卡片;
  2. 倒计时期间任意鼠标点击、滚轮、按键 → 取消本次重启,界面显示「已取消重启」;
  3. 倒计时结束 → 只在这一刻判一次整机是否空闲:
    - 仍 busy → 不重启,展示「现在不能重启」及阻塞来源;
    - 全部空闲 → 写交接文件、拉起脚本,调用方所在轮次可继续输出;
  4. 脚本关闭 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。

安装与启用

资料给出的安装步骤如下。

  1. 把插件目录放到任意位置(例如 D:\DeepSeek Harness\dsh-auto-restart);
  2. 在 DSH 里执行插件安装:plugin_manager install_bundle,target 填该目录的绝对路径;
  3. 重启 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
羽毛球分组比赛记分
小程序二维码

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

Xiaoye