前言¶
在 DeepSeek Harness(DSH)里跑智能体时,工具调用往往需要你在界面里点批准或拒绝。若开了实验性的 Auto review,审查不通过时同样会弹出「请你决定」的审批请求。窗口在后台、你在看别的应用时,很容易错过这类请求,任务就卡在等待状态。
社区插件 dsh-approval-notify(维护者 sakuraboy9128-cmd,SkillHub 分类:客户端)在 DSH 等待你对某次工具调用做审批时弹出桌面通知;在 Windows 上还可点击通知把 DSH 窗口带到前台。下面介绍它的定位、能力与安装配置方式。事实以 GitHub 仓库 README 为准。
这是什么¶
dsh-approval-notify 是一个 DSH bundle:挂到已有 profile 上,监听 @deepseek-ai/dsh-user-approval 提供的 approval/request 事件。当 DSH 需要你批准或拒绝一次工具调用时,在系统侧给出本地化标题与正文(来自请求字段 toolName、displayReason、reason),而不是在 DSH 窗口里再叠一层 UI。
需要事先说明:通知只是提醒,不能代替你在 DSH 界面里的决定;点通知不会自动批准任何操作。
核心功能¶
审批事件覆盖范围¶
插件向 approval 服务的 approval/request 瀑布流注册一个 listener。README 写明它覆盖 approval 服务抛出的各类 ask,包括 @deepseek-ai/dsh-experimental-auto-review 在 ask 审批策略下产生的请求——典型场景是 Auto review 拒绝某次调用后,DSH 转问你,而你没有盯着窗口。
通知内容与去重¶
- 标题与正文由请求自身字段渲染;没有工具名时标为 unknown,不做猜测。
- 在可配置的
dedupeWindowMs窗口内,相同工具名 + 相同 reason 的重复请求会被抑制,避免同一条 ask 弹两次;不同请求仍会分别通知。
各平台呈现方式¶
| 平台 | 行为(据 README) |
|---|---|
| Windows 10/11 | 通过长期运行的 PowerShell helper:优先 WinRT toast,不可用时改用屏幕角落的置顶卡片(card) |
| macOS | 需有 osascript,普通通知,无点击聚焦 DSH |
| Linux | 需有 notify-send,普通通知,无点击聚焦 DSH |
Windows 上点击通知会恢复并聚焦 DSH 窗口;若 DSH 未运行,则启动配置的可执行文件(单实例锁会拉起已有窗口)。registerProtocol 为 true 时注册 dsh-approval-notify:// 协议,便于 toast 点击路径聚焦;卡片 presenter 不依赖该协议,点击直接交给 helper 进程。
与审批链路的隔离¶
实现上不在 approval 瀑布流里 await 自身 I/O,也不向外抛错:通知失败不应把审批结果变成 fail-closed 的 unavailable,也不会拖慢其他 answerer。
环境与依赖¶
- DSH 需挂载
approval服务(@deepseek-ai/dsh-user-approval);官方 Desktop / Web profile 默认具备。 - Node.js >= 20(见
package.json的engines)。 - 无 npm 依赖,bundle 仅使用 Node 内置模块。
- 支持操作系统:
win32、darwin、linux(见package.json)。
安装与启用¶
安装时使用本地绝对路径添加 bundle,不要用凭仓库名拼出来的 github:owner/repo 形式(除非你的环境文档另有说明)。官方 README 给出的命令如下:
dsh plugin --profile <profile> add /absolute/path/to/dsh-approval-notify
将 <profile> 换成你要接收审批提醒的 profile;README 举例:desktop 是自带 Auto review 的 profile。若 loader 提示需重启,则重启 DSH。CLI 会安装包并把 bundle 声明的 patch 写入 profile,使 approval-notify 行进入配置。
安装后建议先验证通知链路是否正常:
node bin/cli.mjs test # 弹出一条测试通知
node bin/cli.mjs doctor # 打印通知路径上各 resolved 输入
node bin/cli.mjs logs # 跟踪插件与 helper 日志
(以上命令在插件目录下执行;也可通过包内 bin 名 dsh-approval-notify 调用,见 package.json。)
配置说明¶
在 profile patch 里,approval-notify 行的 config 支持下列字段(默认值见 README;非法值会回退默认并在插件日志里 warning):
| 字段 | 默认值 | 含义 |
|---|---|---|
enabled |
true |
false 时 bundle 仍激活但不发通知 |
mode |
auto |
auto = 先 toast 再 card;还可 toast、popup、balloon、none |
clickAction |
focus-dsh |
focus-dsh 聚焦或启动 DSH;none 不处理点击 |
locale |
auto |
auto 跟随宿主;或 zh、en |
title |
'' |
自定义标题;空则用本地化默认 |
includeReason |
true |
正文是否包含请求的 reason |
maxBodyChars |
220 |
标题与正文截断长度 |
dedupeWindowMs |
4000 |
相同 tool+reason 在此毫秒内去重;0 关闭 |
appId |
'' |
WinRT toast 的 AppUserModelID |
dshExePath |
'' |
无 DSH 窗口时启动的可执行文件;空则自动探测 |
windowTitleSuffix |
DeepSeek Harness |
用于匹配要聚焦的窗口标题后缀 |
registerProtocol |
true |
是否注册 dsh-approval-notify:// 处理器 |
popupTimeoutMs |
12000 |
卡片停留时长;悬停暂停倒计时 |
helperIdleMs |
900000 |
helper 空闲多久后退出 |
sound |
true |
是否播放提示音 |
dshExeCandidates |
[] |
额外尝试的 DSH 可执行路径 |
示例 patch 片段:
- id: approval-notify
name: 'dsh-approval-notify'
config:
mode: popup
locale: zh
dedupeWindowMs: 10000
若不再需要协议处理器,README 提供:
node bin/cli.mjs unregister-protocol
典型用法与排查¶
- 在
desktop(或你实际使用的)profile 上按上文命令安装并重启(若需要)。 - 运行
node bin/cli.mjs test确认本机能否出通知。 - 触发一次需要人工审批的工具调用(或 Auto review 的 ask),观察是否弹出且日志中有
notified类记录(Windows 上可node bin/cli.mjs logs)。
常见问题(摘自 README 故障表):
- 完全没有通知:审批策略为
never、bundle 被enabled: false、或mode: none;查dsh-approval-notify logs。 - 总是卡片、从不 toast:宿主无 package identity 时 WinRT 可能返回
0x80073D54;可设mode: popup跳过 toast 尝试。 - 点击不能聚焦:主要验证路径在 Windows;macOS/Linux 本身不提供 click-to-focus。
README 在 Windows 11(build 26100)、DSH Desktop profile、Node 24 上验证了 listener、热加载、toast、卡片回退、点击聚焦等;macOS/Linux presenter 标注为未在该环境实测。
适用场景与注意¶
适合谁:经常在 DSH 里跑带审批或 Auto review ask 策略的工作流,且容易把 DSH 窗口留在后台的开发者。
权限与安全:插件随当前 DSH 进程权限运行;安装前请自行查看 GitHub 源码 与 MIT 许可证(package.json)。社区目录 SkillHub 插件页 与 DeepSeek / 幻方无官方从属关系,DSH 生态强调「一切皆插件」,选用第三方 bundle 需自行评估。
结尾¶
dsh-approval-notify 把「DSH 在等你批工具」这件事推到桌面通知层,Windows 上还可一键回到 DSH 窗口,减少后台卡住却无人知晓的情况。当前 package 版本为 0.1.0。