前言¶
在 DeepSeek Harness(DSH)里跑长任务——模型推理、多轮 agent、手动 /compact——往往要几十分钟甚至更久。Mac 在接电源或电池策略较激进时,会在空闲一段时间后进入系统休眠,进程被挂起,会话中途被打断。手动改「系统设置 → 电池/节能」可以治标,但每次改、且容易忘记改回。
下面介绍社区插件 dsh-mac-keep-awake(维护者 wjvalue):在任意 DSH 会话处于运行中时,通过 macOS 的 caffeinate 持有一次电源断言,阻止空闲导致的系统休眠;最后一个会话结束后立即释放。屏幕仍可正常息屏,适合长时间挂着 DSH 又不希望整晚亮屏的场景。
这是什么¶
dsh-mac-keep-awake 是 DeepSeek Harness 的 Host 侧插件,分类上常归在「模型推理」等与长时运行相关的场景。它解决的是:会话还在跑,机器却因空闲休眠而中断任务。
- 仓库:github.com/wjvalue/dsh-mac-keep-awake
- 社区目录页:skillhub.cn/plugins/wjvalue/dsh-mac-keep-awake
- 当前包版本(资料):1.4.2
- 许可证:MIT
- 运行环境:Node >= 20;仅 macOS 会真正持有断言,其他平台加载后只打 warning,不影响 DSH 启动
DSH 生态强调「一切皆插件」;SkillHub 等目录为社区站点,与 DeepSeek / 幻方无官方从属关系。安装前请自行查看源码与许可证,插件以当前 DSH 进程权限运行。
核心功能¶
何时持有、何时释放¶
只要有任意一个 DSH 会话处于运行中,插件持有一次 macOS 电源断言(PreventUserIdleSystemSleep);最后一个会话结束后立即释放。
- 多个会话并行时,按 session id 引用计数,全局只持有一个断言,不会叠多个
caffeinate。 - 屏幕可以照常息屏(默认使用
caffeinate -i,不加-d)。 - DSH 主进程异常退出时,子进程通过
-w <pid>监视宿主,避免机器被永久「钉住」。
底层机制(简要)¶
断言由子进程执行:
caffeinate -i -w <DSH 主进程 pid>
| 参数 | 作用 |
|---|---|
-i |
只阻止系统空闲休眠,不阻止屏幕息屏 |
-w <pid> |
被监视进程退出时,caffeinate 自行退出 |
可选配置会追加 -d(同时阻止屏幕息屏)或 -t <秒>(单次断言的兜底超时,到点后若会话仍在运行会重新获取)。
插件还监听 agent/status、agent/disposed、compaction/start / compaction/end,并周期性对账 ctx.agents.list(),以覆盖热重载、手动 /compact(maintenance 阶段在 API 上读作 idle)等边界情况。断言失败时采用指数退避重试(上限 60 秒),不会在会话仍运行时永久放弃。
安装与启用¶
官方 README 给出的步骤如下(不要凭插件名自行拼接 dsh plugin add github:...)。
1、打包并暂存到 profile 的 vendor/ 目录
在插件仓库根目录执行:
node scripts/install.mjs
2、用 DSH 插件管理器安装
说明:desktop profile 只能由 Electron 应用管理。安装 spec 示例:
file:vendor/dsh-mac-keep-awake-1.4.2.tgz
安装后 bundle 自带的 cordis.patch.yml 会插入 Host;patchReload: live 表示改完 src/ 后重新安装即可生效,无需重启应用。
3、按需改配置
在 profile 的 cordis.patch.yml 里覆盖该插件行的 config,例如:
- id: keep-awake
name: 'dsh-mac-keep-awake'
config:
enabled: true # 总开关
preventDisplaySleep: false # true = 屏幕也不息屏(加 -d)
maxHours: 0 # >0 = 每次断言的兜底超时(小时);0 = 关闭
reconcileSeconds: 60 # 对账间隔;0 = 关闭对账
executable: /usr/bin/caffeinate
典型用法与验证¶
日常无需额外命令:启用插件后,开 DSH 会话跑任务即可;会话全部结束后再看机器应恢复原有休眠策略。
真机确认断言是否存在
会话运行中:
pmset -g assertions | grep -A2 caffeinate
pgrep -fl "caffeinate -i -w"
会话全部结束后再次执行,应当无相关输出。
开发者自测
在插件仓库内:
node --test test/*.test.js
包含单元测试、接线测试,以及依赖真机 pmset -g assertions 的集成测试(仅 macOS 有意义)。
适用场景与注意¶
适合谁
- 在 Mac 上用 DSH 跑长时推理、agent 或多会话,且不想为单次任务改系统节能设置的用户。
- 需要屏幕能息屏、但系统不能因空闲睡过去的场景(默认
preventDisplaySleep: false)。
务必知晓
- 仅 macOS 有效;Linux / Windows 上插件会降级为 warning,不持有断言。
- 依赖系统自带的
/usr/bin/caffeinate(可通过executable覆盖路径)。 - 插件与 DSH 同进程权限;安装前请阅读 GitHub 仓库 源码与 MIT 许可证。
- 社区目录页:https://www.skillhub.cn/plugins/wjvalue/dsh-mac-keep-awake
结尾¶
dsh-mac-keep-awake 把「有会话就不空闲休眠、没会话就释放」做成 DSH 内置行为:默认不挡息屏,多会话共用一条断言,并对热重载、压缩与进程崩溃做了兜底。若你经常在 Mac 上挂着 Harness 跑长任务,可按 README 打包安装并在 cordis.patch.yml 中微调开关与对账间隔。
- 目录页:https://www.skillhub.cn/plugins/wjvalue/dsh-mac-keep-awake
- GitHub:https://github.com/wjvalue/dsh-mac-keep-awake