在 agent 任務執行期間,電腦自動休眠會導致任務中斷、服務重啓報錯或會話數據損壞。dsh-awake 是 DeepSeek Harness 的一個插件,用於在任務執行期間阻止操作系統休眠,任務結束後(包含出錯、中斷或取消)自動恢復允許休眠。
核心功能¶
- 阻止休眠與恢復:任務開始時阻止操作系統休眠,任務結束後恢復。
- 跨平臺支持:支持 Windows / Linux / macOS。
- 動態配置:支持動態配置 schema,設置頁熱改生效。
- 瀏覽器 Wake Lock:爲當前瀏覽器開啓頁面防休眠,狀態獨立於系統。
- 一鍵更新/重啓:支持插件版本更新及服務重啓。
- 自動遷移:v0.2.0 升級後自動遷移舊配置。
安裝與啓用¶
通過命令行安裝到目標 profile(例如 web):
dsh plugin --profile web add dsh-awake
安裝後,需將倉庫根目錄的 cordis.patch.yml 裏的 - insert: 段追加到 $DSH_HOME/profiles/web/cordis.patch.yml。運行中的 DSH 會熱監視該文件,追加配置後立即生效,無需重啓。本地開發時可直接鏈接源碼目錄:
pnpm add dsh-awake@link:...
配置格式¶
配置保存在 $DSH_HOME/settings.yaml,通過設置頁「防休眠」進行熱改。v0.2.0 後配置格式如下:
dsh-awake:
version: 2 # 配置文件版本:2;有老配置(0.1.x)自動轉換
platform: linux # 錨點:上次寫入配置的平臺
mode: systemd # 當前平臺選中的方式(實現文件名);'off' = 關閉服務端
config: # 該方式的配置;字段由方式聲明,多爲空 {}
why: 'dsh 任務執行中'
平臺與方式¶
插件根據平臺自動選擇底層實現方式:
- Linux:
systemd(systemd-inhibit)、gnome-gsettings;默認爲systemd。 - macOS:
caffeinate、pmset;默認爲caffeinate。 - Windows:
powershell(SetThreadExecutionState)、powercfg;默認爲powershell。
常開防休眠¶
設置頁底部有一個「常開防休眠」開關。開啓後,服務端無論是否有任務運行都持續值守。此狀態僅保存在內存中,不寫入配置文件,宿主重啓後失效。若 mode 設置爲 off,則無法開啓此開關。
跨平臺處理¶
如果配置的 platform 與當前系統不一致,運行時自動使用當前平臺的默認方式,並顯示黃色提示(不覆蓋文件)。下次保存配置時,platform 會更新爲當前平臺。
設置頁使用¶
在 dsh web 中打開設置 → 防休眠。頁面每 5 秒輪詢狀態,狀態行顯示連接狀態和值守方式。刷新按鈕可重新探測方式可用性。
- 值守狀態:顯示「值守中」或「未啓用」。
- 方式選擇:下拉菜單選擇具體實現(如 systemd-inhibit),禁用項會顯示原因。
- 動態表單:根據所選方式顯示配置項(如阻止原因)。
- 更新提示:檢測到新版本時顯示更新卡片,支持一鍵更新並自動重啓。
開發¶
插件基於 TypeScript 和 Vitest 構建。工程化對齊 dsh-win-mgr,host 輸出 ESM 單文件,client 輸出 ModuleLoader 殼。
pnpm install
pnpm typecheck # tsc 雙半
pnpm test # vitest(單測 + 看門狗進程測試)
pnpm build # host → lib/index.js;client → lib/client.js
數據面¶
所有設置頁數據通過 POST /api/dsh-awake 單通道傳輸,使用 connection.fetch.register 註冊精確路由(awake.status / awake.refresh / awake.select / awake.alwaysOn 等)。v0.2.1 起改用 fetch 而非 connection.rpc.handle,以避免在 DSH 0.1.5-rc 中因 fiber 兄弟關係導致的啓動失敗。
注意事項¶
- 版本變更:v0.2.0 爲破壞性重構,引入了方式子系統和動態 schema。v0.2.1 修正了 DSH 0.1.5-rc 的兼容性問題。
- 依賴環境:Linux 依賴
systemd-inhibit,Windows 依賴 PowerShell 環境。 - 權限:插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。