前言¶
在 DeepSeek Harness (DSH) 的智能体开发与运行场景中,审批任务、任务完成状态或错误信息往往容易被后台进程淹没。dsh-notifier 插件解决了这一问题,它通过浏览器 Notification API 和系统原生 Toast(Windows PowerShell WinRT / macOS osascript / Linux notify-send)提供独立的通知渠道,确保用户即使不在浏览器前也能收到关键事件提醒。本插件 fork 自 wingsky-1/dsh-notifier,为 DSH 提供了轻量级的事件分发能力。
安装¶
安装前需确认 dsh web 已正常启动。本插件为独立构建,不依赖上游插件仓库。
dsh plugin --profile web add @jypjypjypjyp/dsh-notifier
安装/卸载/更新后需重启一次 dsh web 以使 bundle 生效。若未全局安装 dsh,可使用 npx 临时拉起(需本机安装 pnpm 与 Node.js):
npx @deepseek-ai/dsh plugin --profile web add @jypjypjypjyp/dsh-notifier
访问方式¶
插件所有接口均受 loopback 围栏 保护,仅接受本机回环(127.0.0.1 / localhost)调用。因此从局域网浏览器直连 HTTP 接口会返回 403,通知通道不工作。
请选用下列任一形态访问:
| 形态 | 访问方式 | 说明 |
|---|---|---|
| 本机桌面 | http://127.0.0.1:3080 |
安全上下文,浏览器通知与系统通知均可用 |
| 局域网 HTTPS | https://<IP>:3443 |
需配合 dsh-lan-proxy,满足安全上下文与回环校验 |
| 隧道 | ssh -L 3080:127.0.0.1:3080 <服务器> |
SSH 隧道转发后访问本机地址 |
核心功能¶
插件通过双通道分发事件,并支持多种管理策略。
1. 事件类型¶
- 向你提问(默认开):
ask_user_question/ GUI 提问弹窗触发时通知。 - 审批提醒:真实审批路径触发,含任务标题、工具名、申请理由与操作提示。
- 完成提醒:任务从运行到空闲时通知。子代理完成需开启
notifySubagentDone(默认关)。 - 错误提醒:任务出错时通知,错误信息会脱敏处理(前 300 字符)。同类错误 60 秒内自动合并。
- 轮次完成(默认关):
agent/turn-stopping时通知。
2. 通知渠道¶
- 系统通知:Windows 使用 PowerShell WinRT,macOS 使用
osascript,Linux 使用notify-send,均无需额外安装。 - 浏览器通知:通过 SSE 推送,仅在页面隐藏时弹出。
- 降级策略:非安全上下文(如局域网 HTTP)自动降级为页面内横幅、提示音及标题提醒。
3. 管理策略¶
- 免打扰时段:支持跨午夜设置(如 22:00-08:00),可配置紧急例外。
- 完成风暴聚合:多任务/子代理同时收尾时聚合为“另有 N 个任务已完成”,避免刷屏。
- 审批超时二次提醒:等待超过
askRemindMin分钟(默认 5)未处理时再次提醒。
配置与接口¶
配置文件默认位于 ~/.dsh/dsh-notifier.json,通过 /api/dsh-notifier/config 接口读写。
常用配置项:
{
"notifyAsk": true,
"notifyTaskDone": true,
"notifyTaskError": true,
"notifySubagentDone": false,
"quietHours": { "enabled": false, "start": "22:00", "end": "08:00", "allowKinds": [] },
"errorMergeWindowMs": 60000,
"askRemindMin": 5
}
接口列表:
- GET/PUT /api/dsh-notifier/config:读取/保存配置。
- GET /api/dsh-notifier/events:SSE 订阅通知帧。
- POST /api/dsh-notifier/test:测试通知(绕过免打扰)。
- GET /api/dsh-notifier/history:获取最近通知记录(最多 200 条)。
- DELETE /api/dsh-notifier/history:清空记录。
- GET /api/dsh-notifier/health:健康检查。
安全与限制¶
- 安全上下文:浏览器通知需 HTTPS 或 localhost。iOS Safari 普通标签页无 Web Notifications API,需添加到主屏幕获得 PWA 级通知。
- Loopback 保护:所有接口拒绝非本机调用。
- 数据脱敏:错误通知、审批理由、提问文本中包含的路径、私钥、令牌、密码等敏感信息会被脱敏为占位符。
- 通知目标区分:浏览器通知推送到当前浏览器客户端;系统通知(Toast)弹在 dsh web 运行的宿主机器桌面。
验证¶
本地健康检查:
curl -s http://127.0.0.1:3080/api/dsh-notifier/health