dsh-shutdown-guard-plus:任务结束后自动关机(全屏倒计时与自动守夜)

前言

在 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。

侧边栏卡片对应六种状态:武装 / 待命 / 等待后台任务 / 倒计时 / 已下发 / 阻断,与上游一致。

上游机制(本分线原样保留)

上游解决「让它自己关电脑」,核心包括:

  1. 五道判定闸:已武装、无进行中倒计时、全部 root 会话空闲、无运行中或停止中的后台任务、本批次无会话报错。
  2. 六种状态流转:未开启 → 待命 → 等待后台任务 → 倒计时 → 已下发;任意阶段可进入阻断。
  3. AFK 自动接管:agent 提问时可按配置自动回复「用户处于 AFK,先完成已交代的任务」。
  4. 阻断分级:halted(需人工解除)与 waiting(按策略自动重试)。
  5. 默认安全基线:如 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 仅在启动时编入客户端模块图,刷新页面不生效。

典型用法

  1. 安装并重启 DSH 后,在「守夜」设置页按需开关 大屏关机倒计时 与 自动守夜(多数场景可先保持 autoArm 为关)。
  2. 需要关机守卫时:关闭 autoArm 则手点侧边栏「武装」;开启 autoArm 则在对话结束且会话空闲满足条件时自动武装。
  3. 进入倒计时后:全屏层显示剩余秒数;要取消则按 Esc 或点「取消关机」。agent 重新跑任务时,上游会取消倒计时。
  4. 观察卡片状态:若卡在「等待后台任务」或「阻断」,说明上游闸未通过,需先处理任务或错误,而非强行关机。

适用场景与注意

适合:在 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
羽毛球分组比赛记分
小程序二维码

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

小夜