前言¶
在 DeepSeek Harness(DSH)里跑 Agent,常见情况是:你派了一轮或多轮任务,转身去做别的事,希望「这一轮都跑完、机器也真的闲下来」之后再关机、锁屏或休眠。手工盯着会话列表容易漏看后台任务,定时关机又可能在回合间隙误触发。
dsh-shutdown-idle 是社区维护者 liaoyuqing 发布的工作流类 DSH 插件:开启后,等所有会话结束且(可配置)后台任务也空闲,经过确认与倒计时,再执行你选定的系统动作。下面介绍它的判据、参数和用法;安装与配置以 GitHub 仓库与 SkillHub 目录页为准。
这是什么¶
插件全名 dsh-shutdown-idle(npm 包名同),一句话定位是:在 DSH 进程内监测 Agent 会话与后台作业,全部空闲后自动执行关机、重启、休眠、睡眠、锁定、注销或仅记录(none)。
- 维护者:liaoyuqing
- 社区目录:SkillHub — liaoyuqing/dsh-shutdown-idle(独立社区站点,与 DeepSeek / 幻方无官方从属关系)
- 源码与文档:GitHub — liaoyuqing/dsh-shutdown-idle
- 当前资料中的版本:v1.0.0,许可证 MIT
DSH 生态强调「一切皆插件」;本插件通过 cordis.patch.yml 打入 bundle,并在浏览器侧提供设置页与浮层状态卡片。
核心功能¶
空闲判据¶
插件每秒采样一次,用与 dshmarket 更新守卫相同的思路判断「还在忙」:
- 会话进行中:
ctx.get('agents').list()里存在status === 'running'的 Agent。这一条固定生效,不可关闭。 - 后台任务(可选):
ctx.get('jobs')中status === 'running'的作业(含各存活会话名下的作业),即界面里的「后台任务」。是否计入由配置项considerJobs决定;关闭后不再检测 shell 作业。 - 拿不到
agents服务:按不空闲处理,宁可不执行也不误关机。 - 必须观察到会话运行过(默认开启):刚开启且没有任何任务时不会执行动作,避免误触发。
执行流程¶
全部空闲后,先等待「空闲确认」秒数,再进入「倒计时」秒数;倒计时结束执行所选动作。期间任意会话重新开始运行,或用户在界面上点 取消,本次动作都会撤销。
开启后,右上角(浮层右下角)会常驻一张小卡片,显示当前阶段与剩余秒数,并提供「取消」。按住卡片标题可拖动;松手后位置写入浏览器 localStorage(键 dsh.shutdown-idle.pill.position),拖动时保持在视口内(留 8px 可见)。从「取消」按钮按下不会误触发拖动。
可配置参数¶
| 参数 | 默认 | 说明 |
|---|---|---|
| 动作 | shutdown |
shutdown / restart / hibernate / sleep / lock / logoff / none(none 只记录不执行) |
| 空闲确认 | 20 秒 | 全部空闲后先确认这么久,避免回合间隙被误判为结束 |
| 倒计时 | 60 秒 | 可取消的执行前倒计时 |
| 必须观察到会话运行过 | 是 | 防止刚开启就执行 |
后台任务也算占用(considerJobs) |
是 | 关掉后完全不再检测后台任务 |
设置页把后两项收在「什么算『还在忙』」区块:会话在跑固定算忙,下面两个复选框对应后两项配置。
初始值来自包内 cordis.patch.yml 的 config 行;界面改动写入 <DSH_HOME>/dsh-shutdown-idle/settings.json 并优先生效(删除该文件即回落到 patch 初始值)。
开关状态不持久化:宿主重启后一律是「关闭」,避免开机即误关机。
HTTP 接口(宿主半)¶
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /dsh-shutdown/api/state |
开关、阶段、倒计时、运行中会话/作业 |
| POST | /dsh-shutdown/api/config |
{ enabled?, action?, settleSeconds?, countdownSeconds?, requireActivity?, considerJobs? } |
| POST | /dsh-shutdown/api/cancel |
取消倒计时并关闭开关 |
| GET | /dsh-shutdown |
客户端半不可用时的兜底页面 |
平台¶
动作命令使用 Windows 自带的 shutdown / rundll32。非 Windows 平台上,除 none 外的动作会降级为 none 并在界面标注,不会执行系统命令。
安装与启用¶
在已安装 DSH 的环境里,可用官方文档中的命令从社区标识安装:
dsh plugin add liaoyuqing/dsh-shutdown-idle
本地开发或已有源码目录时,README 也支持 link 方式(路径换成你的实际目录):
dsh plugin add link:/path/to/dsh-shutdown-idle
安装完成后,在 DSH 中打开 设置 → 会话结束后关机,点 开启,并按需调整动作与「什么算还在忙」相关选项。
典型用法¶
- 执行
dsh plugin add liaoyuqing/dsh-shutdown-idle安装插件。 - 在设置里开启「会话结束后关机」,选择动作(例如
shutdown或lock),按需修改空闲确认、倒计时,以及是否要求「必须观察到会话运行过」、是否把后台任务算作占用。 - 正常向任意会话派活;当所有会话回合结束、且判据认为机器空闲时,插件先等空闲确认时间,再进入倒计时。
- 若仍需继续使用 DSH,在倒计时内点浮层上的 取消,或让任意会话再次进入
running,即可中止本次动作。
需要脚本或外部工具查询状态时,可调用 GET /dsh-shutdown/api/state;改配置用 POST /dsh-shutdown/api/config,紧急取消用 POST /dsh-shutdown/api/cancel。
适用场景与注意¶
适合谁:长时间批跑 Agent、希望「任务真正跑完再关机/锁屏」的 Windows 用户;需要把后台 shell 作业也算进「占用」时,保持默认 considerJobs 即可。
务必注意:
- 插件以当前 DSH 宿主进程权限运行,安装前请阅读源码与 MIT 许可证,确认动作命令符合你的安全策略。
- 非 Windows 上除
none外不会真正执行电源/会话动作,仅适合联调状态机或 UI。 - 开关不随宿主重启保留,每次重启后需重新开启,这是刻意设计的安全措施。
- 社区目录页标注星标为 0(截至资料抓取时),选型时请自行评估维护活跃度与 Issue 区。
实现上,host.v2.mjs 负责状态机与 HTTP;client.js 负责设置页与可拖动浮层;升级宿主半代码时需换文件名并同步 package.json 的 main / exports,因为仅改配置的 hot reload 不会重新加载同路径模块。
结尾¶
dsh-shutdown-idle 把「会话结束」和「后台任务空闲」绑在一起,用确认窗口、可取消倒计时和不持久化的总开关,降低误关机风险。若你在 DSH 里需要这类工作流,可从目录页查看简介与版本信息,并在 GitHub 阅读完整 README 与 README.zh.md。
- 目录页:https://www.skillhub.cn/plugins/liaoyuqing/dsh-shutdown-idle
- GitHub:https://github.com/liaoyuqing/dsh-shutdown-idle