在 DeepSeek Harness(DSH)中开发或运行长时间任务(如深度推理、复杂 workflow)时,系统休眠往往会中断进程或导致任务中断。dsh-keep-awake 旨在解决这一问题。这是一个系统级插件,在任意 agent、subagent 或后台任务运行时阻止系统休眠,并在所有任务完成后通过宽限期自动释放资源。
核心功能¶
- 实时状态监控:在 Web 界面显示当前运行状态(保持唤醒中 / 宽限中 / 待机)、运行中的 agent 数量、后台任务数以及辅助进程的 PID。
- 活动判定:智能识别运行中的活动,包括主 agent、subagent、workflow 子代理,以及通过
run_in_background命令或后台 subagent 任务触发的后台任务。 - 宽限期机制:当检测到所有活动结束后,进入可配置的宽限期(默认 60s,范围 15s-5m)自动释放防休眠标志。
- 手动保持唤醒:提供手动开关,无视当前活动状态强制保持系统唤醒。
- 阻止屏幕关闭:可选功能,默认只防休眠,勾选后可同时阻止屏幕熄灭。
- 多语言支持:界面语言跟随 DSH 全局语言设置(zh/en),切换即时生效。
安装与配置¶
插件通过 pnpm 安装,配置文件为 profile 目录下的 settings.yaml。
- 进入 profile 目录(例如
~/.dsh/profiles/web)。 - 添加插件包:
pnpm add "dsh-keep-awake@github:bearice/dsh-keep-awake"
- 编辑
package.json,将"dsh-keep-awake"加入dsh.profile.bundles字段。 - 运行
pnpm install并重启 profile。
在 settings.yaml 中配置参数:
keep-awake:
enabled: true
graceMs: 60000 # 宽限期(毫秒),默认 60s
preventDisplaySleep: false # 是否同时阻止屏幕关闭
manualHold: false # 是否手动保持唤醒
工作原理¶
插件通过每 5 秒的轮询配合事件即时重扫(agent/status、subagent/start|end、job 集变更)来检测活动状态。一旦检测到活动,它会通过 subprocess 服务启动一个平台辅助进程来设置休眠标志,进程退出即释放:
- Windows:使用 PowerShell
SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED),勾选阻止屏幕时添加ES_DISPLAY_REQUIRED。 - macOS:使用
caffeinate -i -s。 - Linux:使用
systemd-inhibit --what=idle --mode=block sleep 1e8。
依赖与兼容性¶
- Node.js:需要 Node.js >= 22.0.0。
- 依赖库:需要
@deepseek-ai/schemastery^3.18.1。
结尾¶
该插件通过自动管理操作系统电源状态,使 DSH 能够在不进行人工干预的情况下处理长时间运行的任务。完整源码与文档位于 GitHub。