dsh-notify:给 DeepSeek Harness Web 补上待处理提醒

前言

DSH Web 里最让人不安的不是工具跑得慢,而是它太安静。审批在等你确认、提问在等你回答、方案审阅在等你过一眼——页面只是停在那里,没有任何声音或浮层。你需要盯窗口、需要点进对应会话,一旦切到别的应用或最小化,就很容易错过。现有的解决方案往往依赖第三方客户端或外部监听脚本,配置成本高于它解决的问题。

下面介绍 HansyLin-xCoFe 维护的 dsh-notify。它做的是同一件事:在 DSH Web 自身页面内,为「等待你处理」的状态加上提示音、右上角浮层卡片和后台系统通知。

插件归在 SkillHub 目录的「客户端」分类下,采用 MIT 许可证。目录页是独立的社区站点,与 DeepSeek / 幻方没有官方从属关系。

它解决什么问题

DSH Web 本体不带任何提醒手段。当你离开页面窗口时,等待状态只体现为会话状态值的变化(approval / question / plan-review),UI 本身没有视觉或听觉信号。dsh-notify 监听这几个挂起状态,在它们出现时补上三层提醒:声音、浮层、系统通知。

一句话定位:把「等你处理」这件事从被动翻页变成主动提醒,且不需要离开 DSH Web 环境。

能力一览

下面只列 README 中明确出现的能力。

  1. 触发条件:approval(审批)、question(提问)、plan-review(方案审阅)开始等待用户处理时触发提醒。
  2. 提示音:6 款内置柔和音色,分别为玻璃 / 风铃 / 木琴 / 水滴 / 花开 / 脉冲,音量可调;审批音与提问音可分别选择。默认音色为「风铃 / 花开」。音效由纯数学 PCM 合成,不依赖音频文件。
  3. 右上角提醒卡片:半透明浮层,带有弹簧缓动、背景模糊和悬停微动效。卡片显示会话名与工具/问题摘要,点「前往处理」直接跳转到等待中的会话,关闭后收成带角标的小铃铛。
  4. 后台提醒:窗口不在前台时可发系统桌面通知(浏览器中授权一次),同时让标签页标题闪烁。
  5. 自定义音频:支持上传 MP3 / WAV / OGG / M4A,单个文件不超过 1.5 MB。音频写入当前浏览器的 localStorage,不会上传到远端。
  6. 界面语言:中文 / English,跟随 DSH 的语言设置。

设置项集中在 设置 → 通用 → 提醒,包括总开关、音量、审批音 / 提问音、自定义音频、试听、桌面通知开关、横幅开关、标题闪烁开关和效果预览。

安装与启用

要求:DSH 版本不低于 0.2.1-rc.2,且运行在 Web 形态。

在 DSH Web 的 设置 → 插件 中添加以下 spec:

github:HansyLin-xCoFe/dsh-notify

另一个等价方式是使用 plugin_manager 工具的 install_bundle,target 填同一个 spec。

安装后刷新一次页面,到 设置 → 通用 → 提醒 就能看到入口。之后用右侧开关启用即可。

以上是官方 README 写明的两种方式,不是从插件名拼出来的命令。

配置与自定义

启用后进入设置页,点「设置」展开详细选项。有三项值得先说清。

  • 「预览审批提醒」与「预览提问提醒」会直接弹出卡片并播放对应声音,用来确认当前音色是否符合预期。
  • 「测试 Windows 通知」会立刻发送一条系统通知,用来验证浏览器的通知权限和 Windows 通知设置。这条测试不受前台限制,随时可用。
  • 「允许桌面通知」需要你在浏览器弹窗里允许一次。之后只有窗口不在前台(切到其它应用或最小化)时才会发系统通知,避免正盯着页面时被打断。

自定义音频上传后需要点试听确认解码正常。如果浏览器自动播放策略限制了音频解锁,正常使用 DSH 时会有一次交互在前,通常不会感知到这个限制。

工作原理

插件在浏览器侧半监听 Client 的 ctx.uiSession.sessionStatus 源。该源是三种挂起交互的统一发布点。新的 pending key 出现时,插件按顺序做三件事:播放对应提示音、在 shell.overlay 槽位渲染右上角卡片、在窗口处于后台时发系统通知并闪烁标题。

pending 消失(已处理或已撤回)时卡片自动淡出。首帧加载时已经存在的挂起只显示卡片、不响铃,避免刷新页面后重复响;如果挂起在首帧之后才同步到,仍会正常响一次。Host 侧(index.js)无路由、无状态,全部逻辑在浏览器端完成,随页面启动加载。

测试与构建

仓库里同时包含可安装产物和源码。构建与测试命令如下,需要 Node 22 及以上:

node scripts/build-client.mjs            # 构建 client.js
node scripts/build-client.mjs --check    # 只校验产物是否最新
node scripts/test-client.mjs             # 无浏览器行为测试
node scripts/test-sound-engine.mjs       # 音频渲染与调度断言

client.js 由 src/main.js 注入 src/sound-engine.js 生成,README 明确要求不要手改这个文件。最新版本号见仓库的 package.json。

适用场景与注意

适合日常使用 DSH Web 且需要频繁处理审批、提问、方案审阅的用户,尤其是经常切窗口、多任务并行的场景。

需要留意的边界,全部来自 README:

  • 提醒只在 DSH Web 页面打开时生效,没有 Service Worker 推送。关掉页面后,系统通知不会到达。
  • 偏好设置与自定义音频保存在当前浏览器的 localStorage,跨浏览器、跨设备不同步。
  • 桌面通知需要一次性授权,如果被浏览器拒绝,需要在站点设置里恢复。
  • 与其它「等待交互提醒」类插件(README 中提到了 dsh-whale-widget 的等待气泡)可以并存,同时开启会各自提醒一次。只想保留一套就关掉另一套。

此外,插件运行在当前 dsh 进程的权限范围内。安装任何第三方插件前,建议先打开仓库目录审查源码与许可证。本插件是 MIT 许可证,可以从包的 files 字段列出的文件确认产物范围。

结尾

dsh-notify 做的事情很窄:在 DSH Web 里,审批、提问、方案审阅等待用户处理时给出声音、浮层和后台通知。它没有扩展新的审批逻辑,也不改会话状态,只是把已经存在但不可感知的等待状态变得可感知,适合作为日常体验的一个补充。

目录页:https://www.skillhub.cn/plugins/HansyLin-xCoFe/dsh-notify
GitHub:https://github.com/HansyLin-xCoFe/dsh-notify

羽毛球分组比赛记分
小程序二维码

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

小夜