在 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 进程权限运行,安装前应检查源码与许可证。