前言¶
在 DeepSeek Harness(DSH)里跑长任务或并行多个 session 时,开发者往往不能一直盯着 Web 界面。会话何时停跑、是否报错、Agent 是否在等你回答或审批工具调用,这些信息如果只能靠手动刷新页面才能看到,很容易错过时机。
常见做法是另写脚本轮询状态,或依赖外部监控;它们要么和 DSH 的事件模型脱节,要么无法同时推到手机和当前打开的浏览器标签页。dsh-plugin-notify 由社区维护者 This-is-XiaoDeng 提供,在 Host 侧监听会话状态转换,用同一套 payload 分别走 WxPusher 与浏览器原生通知(含可选提示音与 requireInteraction),并通过 DSH 自带的设置页完成配置,无需改 profile 里的 YAML 才能日常调参。
这是什么¶
dsh-plugin-notify 是 DSH 生态中的一款「联网工具」类插件(当前 package 版本 0.1.0,MIT 许可证)。它面向已启用 Web 面的 DSH profile(例如 dsh web),在 session 停止、异常退出、Agent 提问或(可选)待审批工具调用等场景下发出通知。
维护者与源码仓库:This-is-XiaoDeng / GitHub: This-is-XiaoDeng/dsh-plugin-notify。插件目录页见 SkillHub 插件页(社区目录站点,与 DeepSeek / 幻方无官方从属关系)。
核心功能¶
双通道、一次检测¶
Host 在状态转换时只检测一次,将相同内容投递到 WxPusher,以及所有已连接浏览器页面。没有 Web 面时(缺少 ctx.webServer),插件仍可推 WxPusher,但不会向浏览器下发通知流。
会触发通知的事件¶
| 事件 | 来源 | 展示内容 |
|---|---|---|
| Session 停止 | api-session/status → running: false |
折叠后的 session 标题 |
| 异常退出 | api-session/error、agent/error |
错误信息 |
| Agent 提问 | user-questions/request(observe 后 delegate) |
第一个问题 |
| 待审批 | approval/request(observe 后 delegate) |
工具名 |
user-questions/request 与 approval/request 属于 Cordis waterfall:插件只 observe 并始终 next() 委托,不会拦截其他 answerer 的请求。
降噪与过滤¶
minRunMs:运行时长低于该阈值的 stop 不通知。stopDebounceMs:Agent 空闲后 Host 等待该时长再上报 stop;若 session 再次运行则丢弃。同一 session 刚发过 error 通知时也会抑制 stop,避免重复且更不精确的信息。
浏览器侧行为¶
Client 通过 SSE 订阅事件,使用 new Notification(...)(PNG 图标),可选 WebAudio 双音提示,以及 requireInteraction 使横幅保持到用户关闭。配置项 browser.onlyWhenHidden 默认为 true,标签页可见时可保持静默。
设置页与密钥¶
在 设置 → 通知(Settings → Notifications)中编辑插件 Config schema 定义的字段;字段均为 volatile,修改即时生效,无需重启或 remount 插件。WxPusher 的 appToken 声明为 role('secret'):写入 profile,不在 API 中回传,界面加载时输入框始终为空,仅显示是否已设置 token。
实现上 Host 注册 /dsh-plugin-notify/events(SSE)与 /dsh-plugin-notify/test;除 @deepseek-ai/schemastery 外无额外运行时依赖,单 Host 文件、单 Client 文件,无构建步骤。
环境与要求¶
- 带 Web 面的 DSH Host(
@deepseek-ai/dsh-web-app),即常规dsh webprofile。 - Node.js ≥ 20。
- 支持 Notification API 的浏览器(Chrome、Edge、Firefox、Safari 16+)。
- 若需要手机推送,需 WxPusher 账号。
安装与启用¶
通过插件管理器(推荐)¶
在 DSH 的 Plugins 页面添加包 spec(registry 名、git URL 或本地 checkout 绝对路径),并启用对应 bundle:
dsh-plugin-notify
或指向本地目录:
/path/to/dsh-plugin-notify
bundle 由插件自带的 cordis.patch.yml 声明,无需再改其他清单。若 profile 已在运行,需 reload 或重启以使新包进入模块解析表。
在 profile 中手动安装¶
在 profile 目录(例如 ~/.dsh/profiles/web)执行:
pnpm add dsh-plugin-notify
在该 profile 的 package.json 里把 bundle 加入 dsh.profile.bundles:
{
"dsh": {
"profile": {
"bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-plugin-notify"]
}
}
}
配置与典型用法¶
打开 设置 → 通知,字段会直接写入 profile 中的插件条目。常用项如下(完整列表见 README):
| 字段 | 默认值 | 含义 |
|---|---|---|
enabled |
true |
总开关(两通道) |
events.stopped / error / question |
true |
对应事件是否通知 |
events.approval |
false |
待审批是否通知 |
browser.enabled / sound / requireInteraction / onlyWhenHidden |
见 README | 浏览器通道行为 |
wxpusher.enabled |
false |
是否启用 WxPusher |
wxpusher.appToken |
'' |
仅写 secret |
wxpusher.uids / topicIds |
[] |
接收方 UID 或 topic |
advanced.stopDebounceMs |
1200 |
stop 上报前的空闲等待 |
advanced.minRunMs |
2000 |
短于该时长的 run 不报 stop |
advanced.rootSessionsOnly |
true |
跳过 subagent session |
需要持久化到 profile patch 时,可在 YAML 中写入同级结构,例如:
- id: dsh-plugin-notify
config:
events:
approval: true
wxpusher:
enabled: true
uids:
- UID_xxxxxxxx
WxPusher¶
- 在 https://wxpusher.zjiecode.com 登录,创建应用并复制 appToken。
- 用微信扫应用二维码订阅,从用户列表复制 UID(或使用 topic id 群发)。
- 在设置页填入 appToken 与 UID,保存。
浏览器权限与声音¶
页面展示当前 Notification.permission:default 时点 Request permission;denied 时需在浏览器站点设置中重新允许。提示音依赖 WebAudio,需用户在页面上有一次点击或按键后浏览器才允许 AudioContext 启动,插件会在首次交互时解锁。
测试¶
各通道卡片自带测试按钮:
- Browser notifications → Send a test notification:向所有连接页广播一帧,并发送一条 WxPusher(全链路探测)。
- WxPusher push → Send a test push:仅 WxPusher;不弹出系统通知,且在
wxpusher.enabled仍为 false 时也可验证凭据。
按钮下方会显示结果,例如 Browser: delivered to 1 page(s) · WxPusher: sent 或 WxPusher: no appToken 等。
适用场景与注意¶
适合需要在 DSH Web 会话跑在后台或另一台机器上时,仍能在手机和浏览器上收到「停跑、报错、提问、审批」提醒的开发者。若只开浏览器通知、不用 WxPusher,可不配置 WxPusher 账号。
安装前请自行审阅 仓库源码 与 MIT 许可证。插件在当前 DSH 进程权限下运行,WxPusher 推送会携带你配置的 token 与消息内容;appToken 虽为 write-only secret,仍应妥善保管,勿将含 secret 的 profile 提交到公开仓库。
DSH 生态遵循「一切皆插件」;本插件通过社区目录与 npm 包名 dsh-plugin-notify 分发,与官方 Harness 仓库并列存在,按需选用即可。
结尾¶
dsh-plugin-notify 将会话状态变更收敛为 Host 侧一次检测,再同步到 WxPusher 与浏览器 SSE 通知,并用原生设置页管理事件开关、降噪参数与密钥。若你已在用 DSH Web profile,可从插件管理器添加 dsh-plugin-notify,在 设置 → 通知 中完成权限与(可选)WxPusher 配置后,用各卡片自带的测试按钮验证通道。