dsh-notifier:DSH 待审批与提问时的浏览器系统通知

前言

用 DSH Web 跑智能体时,工具调用需要审批、或出现 ask_user_question 结构化提问,界面会停在当前 Session 里等你操作。若此时焦点在别的标签页、别的窗口,或浏览器被最小化,这类等待很容易被忽略,任务会在后台一直挂着。

常见补救是用 notify-send、AppleScript、PowerShell 等本机脚本把事件推到操作系统通知中心,但要多装依赖、还要和 DSH 进程或日志对接。AlleyRain 维护的 dsh-notifier(仓库名 AlleyRain/dsh-notifier,npm 包名 @local/dsh-notifier)走另一条路:在 DSH 插件体系里监听 Host 侧的待处理请求,经同源 SSE 推到仍打开的 DSH 页面,再用浏览器 Web Notifications API 弹出系统通知,不引入原生通知守护进程,也没有运行时 npm 依赖。

下面介绍它做什么、怎么装、怎么开,以及使用时的边界。

这是什么

dsh-notifier 是 DSH 的 Web profile 插件(dsh web),分类上属于工作流相关能力。它在 DSH 等待你回应时及时提醒,具体包括:

  • 权限审批(approval/request)
  • 结构化提问(user-questions/request,含计划审阅类提问)

Host 端只做观察:监听上述请求后始终 next() 交给原有审批/答题流程,不会替你批准、拒绝或代答。通知文案支持英文与简体中文。

核心功能

何时弹系统通知

DSH 页面状态 结果
前台且聚焦 仅应用内审批/提问 UI,不弹系统通知
后台标签、其他标签在前台、浏览器最小化 浏览器系统通知
标签页已关闭 无通知(SSE 连接断开)
浏览器完全退出 无通知
系统勿扰 / 专注模式 可能被系统抑制

DSH 重新获得焦点时,由本插件触发的通知会被收起。多个 DSH 标签页会收到同一事件;支持 tag 的浏览器会用稳定 tag 合并重复通知而非堆叠。

审批策略为 never 时不会询问,因此也不会通知。

通知内容与交互

  • 审批:工具名、审批原因或本地化展示原因。
  • 提问:标题与第一个问题,并注明本批中其余问题数量。

点击通知会聚焦 DSH,并打开持有该请求的 Session。

架构要点(便于排查)

Host 侧用 prepend: true 挂载观察者,在浏览器侧 answerer 处理瀑布流之前就能感知请求。Client 通过同源 SSE 端点 /dsh-notifier/events 订阅事件;该端点走 DSH 已有的 ctx.connection.requestRejection 连接围栏,使用浏览器会话 Cookie,不新增鉴权方式。插件不发起外部网络请求,载荷仅为 DSH 界面里已有的工具名、原因与问题文本,且不持久化。

环境与要求

  • 使用 DSH Web profile(dsh web)。
  • 桌面浏览器支持 Web Notifications API:Chrome/Edge、Firefox 或 Safari。
  • 安全上下文:HTTPS,或 localhost / 127.0.0.1;非 loopback 的纯 http:// 不可用。
  • DSH 页面必须保持打开;标签或浏览器完全关闭后无法送达。当前版本面向桌面浏览器,未针对需要 Service Worker 的移动 Chrome 做适配。

README 注明在 DSH 0.2.1-rc.3 Web profile 与具备 Web Notifications API 的桌面浏览器上验证过。

安装与启用

本目录是 DSH 本地 bundle,通过 Plugin Manager 安装;安装会写入当前 profile 的 bundle 选择与包依赖,不要手改 profile 的 package.json。

安装步骤

  1. 克隆仓库到本机:
git clone https://github.com/AlleyRain/dsh-notifier.git
  1. 将克隆目录作为本地 bundle 安装到当前激活的 profile:
    - Agent 路径(推荐):让 DSH 调用 plugin_manager,action: install_bundle,并传入克隆目录的绝对路径。
    - UI 路径:若你的 DSH 构建在 Plugins 中提供本地 bundle 安装入口,可在那里选择该目录。

  2. 安装完成后 bundle 会绑定到 profile,DSH 重启后仍保留。

包名为 @local/dsh-notifier(本地 bundle,未发布到 npm)。许可证为 MIT(见仓库 LICENSE)。

若从 GitHub URL 安装时在 Plugin Manager 阶段超时,属于 DSH Plugin Manager 对 GitHub 的 git ls-remote 检查(默认 githubConnectionTimeoutMs 为 5000 ms)过短,可在 profile 用户补丁中调高后再试——这是 plugin-manager 的配置,不是 dsh-notifier 自身配置项:

- id: plugin-manager
  name: "@deepseek-ai/dsh-plugin-manager"
  config:
    githubConnectionTimeoutMs: 60000

启用浏览器通知

权限不会在页面加载时自动弹出,需手动开启:

  1. 打开 Settings → General(设置 → 通用)。
  2. 在 Language 与 Appearance 之间找到 Browser notifications(浏览器通知)。
  3. 点击 Enable notifications(启用通知),并在浏览器权限对话框中允许。
  4. 点击 Send test(发送测试),确认系统通知能出现。

典型用法

安装并启用后,无需额外配置文件:照常使用 DSH,当 Agent 触发需你审批的工具调用或结构化提问时:

  • 若你正在看 DSH 当前标签,直接在页面内处理即可。
  • 若 DSH 在后台或浏览器被最小化,会收到系统通知;点开后回到对应 Session 完成审批或答题。

这与 README 描述的日常工作流一致——插件不改变审批策略,也不代替你作答。

适用场景与注意

适合:长时间用 DSH Web 跑任务、经常多标签或多窗口办公,希望在「没盯着 DSH 标签」时仍能收到待办提醒的开发者。

务必知晓:

  • 插件随当前 DSH 进程与 Web 会话运行;安装前请自行阅读 GitHub 仓库 源码与 MIT 许可证,确认符合你的安全与合规要求。
  • 前台聚焦时不弹系统通知是有意设计,避免与已有 UI 重复;当前版本无开关改变该行为。
  • 关闭标签或浏览器后无法通知;若要浏览器完全退出仍能提醒,需要独立的 OS 级后端,本插件不提供。
  • 社区目录 SkillHub 插件页 与 GitHub 为独立信息源;DSH 生态强调「一切皆插件」,该目录站点与 DeepSeek / 幻方无官方从属关系,不宜当作官方应用商店理解。

结尾

dsh-notifier 把 DSH 的待审批与待回答事件,在页面仍在线的前提下转成浏览器系统通知,点击即可回到对应 Session,适合 Web 工作流里「人不在 DSH 标签上」的场景。更多细节与故障排查见仓库 README。

  • 目录页:https://www.skillhub.cn/plugins/AlleyRain/dsh-notifier
  • GitHub:https://github.com/AlleyRain/dsh-notifier
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜