前言¶
DeepSeek Harness(DSH,dsh)在执行审批、提问、登录这类需要人介入的节点时,只在聊天输入区渲染提示。一旦你切到别的窗口写代码、开会,Agent 就安静地停在那里:没有系统通知、没有 Dock 提醒、没有声音。等你回来,可能已经过去二十分钟。
dsh-needs-you-mac 就是补「叫你回来」这一环的插件:监听 DSH 的事件,在原生 macOS 通知里弹一条横幅,点一下就把 DeepSeek Harness 切回前台。它只负责通知,不替你做决定。插件由 xuwhao 维护,分类是客户端,npm 包名 dsh-needs-you-mac,当前版本 0.2.1,MIT 许可。
它解决什么问题¶
0.1.x 的做法是用 osascript 发通知,macOS 会把通知算在脚本编辑器头上,点横幅打开的是脚本编辑器。0.2.0 改成在宿主进程内调用原生 UserNotifications API,通知归属 DeepSeek Harness 本身,点击横幅直接把 DSH 窗口带到前台,即使窗口最小化也会恢复。
插件只在「真的卡在等你」这一步才通知:
- 通知来自 DeepSeek Harness 本身,不是脚本编辑器;
- 点横幅切回 DSH;
- 只观察、不返回审批结果,批准仍必须由你点。
覆盖场景¶
插件监听三类事件,对应三组通知副标题:
approval/request:工具审批、沙箱升级、插件安装/列表、工作区外写入,副标题「需要你审批一次操作」;user-questions/request:ask_user_question、计划审核,副标题「需要你回答问题 / 需要你审核计划」;deepseek-account/model-sign-in-required、deepseek-account/session-expired:模型请求需要登录、登录过期,副标题「需要你登录 DeepSeek 账号」。
通知正文只包含工具名、原因、会话短 ID 或问题文本,全部留在本机。插件不联网、不读凭据、不读写文件。
防打扰机制¶
审批请求到达后先等 delayMs(默认 1200 ms)。如果这段时间里请求已被自动审核等非人类 answerer 答复,就不通知。只有真正停在「等你」这一步的请求才会弹。
安装与启用¶
在桌面版里用侧栏安装:插件 → 添加插件 → 输入 dsh-needs-you-mac,然后重启 DeepSeek Harness。
或者用 CLI:
# Desktop profile(使用桌面应用自带的 dsh 命令)
dsh plugin --profile desktop add dsh-needs-you-mac
# Web profile
dsh plugin --profile web add dsh-needs-you-mac
dsh plugin add 会把包追加进对应 profile 的 dsh.profile.bundles,然后重启 dsh 生效。
注意 Desktop 和 Web 的 profile 是独立的:装到 web 不会自动出现在桌面版。原生通知后端需要桌面版宿主(进程在 DeepSeek Harness.app 内)。
首次授权¶
原生后端发出第一条通知时,macOS 会弹一次:
“DeepSeek Harness”想要发送通知
点「允许」即可。如果没弹出、没点或点了拒绝:
- 打开「系统设置 → 通知 → 应用程序通知 → DeepSeek Harness」,打开「允许通知」;
- 确认没有开启专注模式 / 勿扰;
- 重启 DSH(或等下一次通知)后生效。
不需要重装。插件会自己检测授权状态,未授权时在日志里说明原因,并按 terminal-notifier → osascript 的顺序回退。
配置¶
在 profile 的 cordis.patch.yml 里覆盖 config。注意 config 是整段替换,不是深合并,覆盖时要把需要的键都写出来:
- id: dsh-needs-you-mac
name: dsh-needs-you-mac
config:
enabled: true
notifyApproval: true
notifyQuestion: true
notifySignIn: true
delayMs: 1200
title: DeepSeek Harness
sound: Glass
maxBodyChars: 220
backend: auto
各字段含义:
| 字段 | 默认 | 含义 |
|---|---|---|
enabled |
true |
总开关 |
notifyApproval |
true |
工具审批 / 沙箱升级 / 插件安装等 approval/request |
notifyQuestion |
true |
ask_user_question、计划审核等 user-questions/request |
notifySignIn |
true |
模型请求需要登录 / 登录过期 |
delayMs |
1200 |
请求到达后等待多久再通知,给自动审核留时间;范围 100–10000 |
title |
DeepSeek Harness |
通知标题 |
sound |
Glass |
macOS 提示音;none 静音(原生后端使用系统默认通知声) |
maxBodyChars |
220 |
通知正文最大长度;范围 40–500 |
backend |
auto |
auto = 原生 → terminal-notifier → osascript;native = 只用原生;osascript = 强制旧后端 |
适用场景与注意¶
适合在 macOS 上用 DSH 桌面版、经常让 Agent 停下来等人审批的开发者。使用前注意:
- 插件以当前 dsh 进程权限运行。它的原生后端是
native/dsh_notify.mm编译出的 N-API 动态库(native/dsh_notify.node,arm64 + x86_64 通用二进制),源码随包发布,只调用系统UserNotifications;兜底通知由固定的/usr/bin/osascript或terminal-notifier通过 argv 启动,不经过 shell 拼接。安装前仍应检查源码与许可证(MIT)。 - 仅支持 macOS。非 darwin 平台会直接禁用并打日志。
- 原生后端需要 DSH 桌面版;
dsh web的 CLI 宿主没有 app 身份,原生后端不可用,会退回osascript,点击横幅仍是脚本编辑器。这是宿主限制,不是配置问题。 - 原生后端使用系统默认通知声,
sound里的音名只在osascript/terminal-notifier后端生效。 - 插件市场不支持原地升级,更新方式是卸载后重装,或重新执行
dsh plugin add dsh-needs-you-mac@latest。 - 已在 DSH
0.2.1-rc.5、macOS 27 上实测;engines.dsh声明为>=0.2.1-rc.5 <0.3.0-0。
结尾¶
dsh-needs-you-mac 的价值很小也很清楚:把 DSH 每一次「停下来等你」变成一条点一下就回到窗口的系统通知,同时不碰审批决策。它只做一件事,并且没有越界。
目录页:https://www.skillhub.cn/plugins/xuwhao/dsh-needs-you-mac
GitHub:https://github.com/xuwhao/dsh-needs-you-mac