前言¶
在 DSH 里跑长任务时,常见问题之一是:回答已经收尾,人却还在等窗口、或临时离开,电脑一直开着。手工关机又怕 agent 还在跑后台任务。上游插件 dsh-Shutdown-Guard 用一套状态机与会话/任务判定,在「确实可以关」时再下发 Windows 关机。本文介绍社区分线 dsh-shutdown-guard-plus(维护者 Jd44chs):在上游 v1.6.0(MIT)判定逻辑不变的前提下,增加全屏关机倒计时与可选的自动武装,仍属 DSH 客户端类插件。
这是什么¶
- 定位:DSH 插件;会话与任务满足条件后,调用 Windows 自带
shutdown.exe执行关机,侧边栏提供守夜状态卡片。 - 与上游关系:衍生分线(fork),不改上游五道判定闸与状态机;插件 id 为
dsh-shutdown-guard-plus,可与上游dsh-shutdown-guard并存,但 README 建议只保留一个,避免重复监听「会话空闲」。 - 版本与许可:package 版本
1.6.0-plus.1;MIT;上游基线 v1.6.0。 - 平台:
package.json声明os: ["win32"],面向 Windows;引擎要求 DSH>=0.1.5-rc.1,Node>=22.19。
侧边栏卡片对应六种状态:武装 / 待命 / 等待后台任务 / 倒计时 / 已下发 / 阻断,与上游一致。
上游机制(本分线原样保留)¶
上游解决「让它自己关电脑」,核心包括:
- 五道判定闸:已武装、无进行中倒计时、全部 root 会话空闲、无运行中或停止中的后台任务、本批次无会话报错。
- 六种状态流转:未开启 → 待命 → 等待后台任务 → 倒计时 → 已下发;任意阶段可进入阻断。
- AFK 自动接管:agent 提问时可按配置自动回复「用户处于 AFK,先完成已交代的任务」。
- 阻断分级:
halted(需人工解除)与waiting(按策略自动重试)。 - 默认安全基线:如 60 秒倒计时、等后台任务、出错跳过等;
countdownSec、marginSec等字段在默认配置中锁死,改动须自定义配置。
判定细节以 上游 README 为准;本分线只在其上做显示与便利性加法。
本分线新增的两项能力¶
全屏关机倒计时(fullscreen,默认 true)¶
倒计时开始时,在客户端窗口上覆盖整屏遮罩:
- 黑底、大号等宽秒数、进度条;文案提示「正在关机」,并说明可按
Esc或点「取消关机」撤销。 - 取消走上游原有
POST /cancel,不绕过状态机。 - 遮罩仅随 snapshot 展示;
state离开countdown/fired即移除。关闭该开关后行为退化为仅侧边栏卡片。
实现位于 lib/client.js(fsEnsure / fsPaint 等),由 setSnapshot() 末尾 fsSync() 驱动。
自动守夜(autoArm,默认 false)¶
上游需手点「武装」。开启后,当 agent/status 由 running 变为 idle,且配置允许、当前未武装、无 root 会话在跑时,自动 setArmed(true) 并走上游 tryArm()。武装之后的判定仍是上游五道闸。倒计时期间若 agent 再次 running,会撤销关机。
README 说明默认关闭:开启后每轮对话结束都可能进入倒计时,闲聊结束 60 秒也可能真关机。
配置字段¶
两字段写入 profile(data/config.json),不在 PROFILE_LOCKED_FIELDS 中,默认配置下也可改:
| 字段 | 类型 | 默认 |
|---|---|---|
fullscreen |
boolean | true |
autoArm |
boolean | false |
GET /api/dsh-shutdown-guard-plus/state 会下发上述字段;侧边栏与 /window 悬浮窗读同一份状态。
设置路径:
设置 → 插件 → dsh-shutdown-guard-plus → 「守夜」标签页
页面上方两项为本分线新增;其余(后台任务守卫、出错跳过、倒计时时长、AFK 自动回答等)来自上游。
安装与启用¶
插件以当前 DSH 进程权限运行;安装前请自行查看仓库源码与 MIT 许可证。社区目录页:SkillHub 插件页。仓库:github.com/Jd44chs/dsh-Shutdown-Guard-plus(目录介绍处星标为 0,以站点为准)。
推荐从 GitHub 安装(资料原文命令,Windows PowerShell):
& "$env:LOCALAPPDATA\Programs\DeepSeekRuntime\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add "github:Jd44chs/dsh-Shutdown-Guard-plus"
若 github: 前缀在当前 dsh 版本不被接受,可改为 plugin add 指向本机已下载的插件目录(路径按你本机填写)。
装完后 dsh.profile.bundles 会追加 dsh-shutdown-guard-plus。必须重启 DSH:lib/client.js 仅在启动时编入客户端模块图,刷新页面不生效。
典型用法¶
- 安装并重启 DSH 后,在「守夜」设置页按需开关 大屏关机倒计时 与 自动守夜(多数场景可先保持
autoArm为关)。 - 需要关机守卫时:关闭
autoArm则手点侧边栏「武装」;开启autoArm则在对话结束且会话空闲满足条件时自动武装。 - 进入倒计时后:全屏层显示剩余秒数;要取消则按
Esc或点「取消关机」。agent 重新跑任务时,上游会取消倒计时。 - 观察卡片状态:若卡在「等待后台任务」或「阻断」,说明上游闸未通过,需先处理任务或错误,而非强行关机。
适用场景与注意¶
适合:在 Windows 上用 DSH 跑批处理式 agent 任务,希望任务链结束后自动关机,又不想误判仍在运行的会话或后台 job。
注意:
- 仅调用
shutdown.exe(/s /t与/a),不联网、不写系统目录;不处理休眠/待机。 autoArm打开后,每轮对话结束都可能倒计时;长时间等回答却离开机器时有被关机风险。- 全屏遮罩无法盖住 Electron 窗口层左上角标题徽标(README 称无功能影响)。
- 与上游同装可能互相干扰,建议只启用一个守夜插件。
结尾¶
dsh-shutdown-guard-plus 在 ltayshark0637 的 dsh-Shutdown-Guard v1.6.0 上做了最小加法:全屏倒计时提醒与可选自动武装,安全判定仍交还给上游。需要客户端侧自动关机守卫时,可从 SkillHub 或 GitHub 安装,在设置页调整 fullscreen / autoArm 后重启 DSH 使用。
- 目录页:https://www.skillhub.cn/plugins/Jd44chs/dsh-Shutdown-Guard-plus
- GitHub:https://github.com/Jd44chs/dsh-Shutdown-Guard-plus