前言¶
DeepSeek Harness(DSH)在沙箱提权、命令执行、写文件等场景会弹出审批;ask_user_question 或计划审核也会在界面等你作答。人若不在电脑前,很容易错过弹窗。社区插件 dsh-qq-approval-notify(维护者 EviMing,分类:工作流)在本机监听这些事件,优先经 NapCat 给指定 QQ 发私信;NapCat 不可用或发送失败时,再尝试 Windows 通知;仍失败则写日志并放弃,不影响 DSH 本身的审批与提问流程。
这是什么¶
一句话:Host 侧 DSH 插件,把「需要你处理的审批」和「需要你回答的界面提问」转成 QQ 私信或 Windows 桌面提醒,只做提醒,不参与批准或代答。
插件只装在 Host,不需要 Client 代码;实现上仅使用 Node 内置模块,无额外 npm 依赖。当前 package 版本为 1.1.0,许可证 MIT。
核心功能¶
监听的场景¶
插件观察两类 waterfall 事件(只观察、始终 next(),fire-and-forget):
approval/request:沙箱提权、bash/shell/exec、run_code、读写删文件、联网、插件安装与 MCP 等工具调用等审批。user-questions/request:ask_user_question及计划审核等界面提问。
审批策略为 never 时不会产生审批请求,插件也就不会发通知;需要在 ask 或会触发审批的模式下才有意义。
消息格式¶
审批类消息形如:
【申请{XX}权限】申请原因
XX 按审批类型映射为人话标签(例如沙箱提权为「沙箱」,shell 为「执行命令」,write/edit 为「修改文件」,web_fetch 为「联网」等)。原因优先使用 DSH 的 displayReason.zh,与审批弹窗一致。dsh-ops 的 ops_bash 提权走独立通道,显示为「执行命令」;经 dsh-sandbox 的提权显示为「沙箱」。
提问类消息形如:
【需要你回答】<标题>:<问题>(单选:选项 A / 选项 B)
多题时首行带 【需要你回答】,后续以 - 开头;选项会标「单选 / 可多选」;detail 截断后放在 〔…〕 中。
通知链路¶
- 生成消息文本。
- 发现 NapCat:配置
endpoints→ 进程端口探测 → 默认端口;对每个候选调用 OneBotget_login_info,仅当user_id等于配置的selfQQ才使用,避免连错实例。 - 用
send_private_msg发给ownerQQ。 - 失败则 Windows Toast(WinRT),再失败试托盘气泡。
- 均失败则放弃本次通知。
相同申请文本在 dedupeMs(默认 20000 ms)内只通知一次,减轻重试风暴;设为 0 关闭去重。
实现上为何要用 prepend¶
Web 端转发器对 approval/request 与 user-questions/request 注册了不 prepend 的监听器,会把事件转给浏览器并结束链,后注册的观察者不会被调用。本插件用 ctx.on(..., handler, { prepend: true }) 排在链首,仍立刻 return next(),不影响正常审批与提问。
安装与启用¶
官方 README 推荐在 Windows 上用 tarball 安装(未开开发者模式时,pnpm 对本地目录建符号链接可能被拒):
cd D:\DSH_WorkArea\qq-approval-notify
npm pack --pack-destination dist
然后由 DSH 的 plugin_manager 安装生成的 dist\local-qq-approval-notify-<版本>.tgz。改源码后重新 pack 并重装即可;配置文件在包外,重装不会丢失。
装好后若运行中的 DSH 无变化,需重启 DSH:Node 会缓存已加载的 ESM,重装或开关插件不会替换进程内旧代码。
安装前应自行查看 GitHub 仓库 源码与 MIT 许可证;插件以当前 dsh 进程权限运行。
配置¶
默认读取:
%DSH_HOME%\qq-approval-notify.json
DSH_HOME 未设置时为 C:\Users\<你>\.dsh。也可用环境变量 DSH_QQ_APPROVAL_CONFIG 或插件行配置里的 configFile 指定路径。
示例(字段含义以 README 为准):
{
"ownerQQ": "2368199809",
"selfQQ": "3641194452",
"napcat": {
"endpoints": ["http://127.0.0.1:3000"],
"ports": [3000, 3001],
"token": "你的 NapCat token",
"timeoutMs": 1200,
"discoveryCacheMs": 60000
},
"windowsNotification": {
"enabled": true,
"timeoutMs": 12000
},
"dedupeMs": 20000,
"debug": false
}
ownerQQ:收件人(主人)QQ 号。selfQQ:DSH 侧登录的 QQ 号,用于校验 NapCat 登录身份。napcat.token:OneBot access token,以Authorization: Bearer ...发送。- 缺少
ownerQQ或selfQQ时,插件不猜测收件人与 NapCat,仅尝试 Windows 通知。
典型用法与自检¶
本地跑测试(消息格式、配置解析、假 OneBot、真实 NapCat 只读探测、Windows 通知自检):
cd D:\DSH_WorkArea\qq-approval-notify
node test/check.mjs
可选:向真实 QQ 发一条自检消息:
$env:DSH_QQ_LIVE_SEND = '1'; node test/check.mjs
使用上:DSH 正常工作时,一旦有审批或提问事件,插件按上述链路通知;在 QQ 里回复不会自动批准,也不会替你答题,仍需回到 DSH 界面处理。
适用场景与注意¶
适合在本机已部署 NapCat(OneBot HTTP)、且希望离开桌面仍能收到 DSH「待处理」提醒的 Windows 用户。Toast 依赖当前用户桌面会话;无交互会话时会退回托盘气泡。
DSH 社区目录 SkillHub 插件页 与 GitHub 为独立信息源,与 DeepSeek / 幻方无官方从属关系;生态上 DSH 强调「一切皆插件」,本插件属于其中的工作流类扩展。
结尾¶
dsh-qq-approval-notify 把审批与界面提问变成可触达的 QQ 私信或 Windows 通知,并明确失败回退与去重策略,适合需要「离开电脑也不漏提醒」的 Host 部署。详情与 issue 见 GitHub,目录入口见 SkillHub。