前言¶
在 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