前言¶
在 DeepSeek Harness(DSH)里跑长任务时,会话往往在后台从 running 回到空闲,或者弹出需要你授权的 pendingInteraction。如果一直盯着界面,既费神也容易错过时机;若完全不看,又不知道什么时候该回来点确认。
社区插件 dsh-notify-sound 面向 DSH Web GUI:在任务完成、需要确认、出错或中断时,用 Web Audio 合成提示音,并在页面右上角显示通知条。它不调用系统级通知,也不依赖外部音频文件。下面介绍它的行为、安装方式和使用上的注意点。
这是什么¶
dsh-notify-sound 由维护者 Su-1003 发布,在 SkillHub 目录中归类为客户端插件。当前 package.json 版本为 0.1.0,许可证 MIT,零运行时依赖、无构建步骤。
插件声明 "platform": "web",逻辑主要在浏览器侧的 lib/client.cjs;宿主侧 lib/index.js 仅为可挂载的空壳。判定依据是 DSH 客户端 uiSession.sessionStatus 的状态迁移。
核心功能¶
三种场景¶
| 场景 | 触发条件 | 通知条颜色 |
|---|---|---|
| 任务完成 | 会话从 running 变回空闲,且没有待你的交互 |
绿 #2ea043 |
| 需要你确认 | 出现 pendingInteraction(授权 / 确认弹窗) |
黄 #d29922 |
| 出错 / 被中断 | 本轮结束但带错误标记 | 红 #f85149 |
声音只负责「叫你一声」:三种场景默认同一音型(同音双响),区别在通知条文字与颜色。若要按场景区分音色,需改 lib/client.cjs 里的 CALL_SHAPE。
提示音与通知条¶
- 提示音由 Web Audio 实时合成(振荡器 + 指数包络),不需要任何音频文件。
- 内置 6 种音色集:清脆(
clean)、柔和(soft)、铃音(bell)、醒目三连音(alarm)、极简单声(minimal)、木质(wood,默认)。 - 防刷屏:同类通知 1.5 秒内只响一次;4 秒内同类事件在通知条合并为
×N。 - 通知条最多同时 4 条,20 秒后自动消失,可单条关闭或一键全部关闭。
- 浮层挂在 DSH 页面内,不盖到其他软件;容器
pointer-events: none,仅卡片可点。插件会补偿带transform/filter祖先导致的position: fixed失效,使条目贴在视口右上角。 - 首次加载只做基线观测,不会补发历史通知。
插件在 ui-session 之后才激活时,会轮询最多 15 秒等待服务就绪。
安装与启用¶
需要 DSH 的 Web GUI;TUI 不适用。
方式一:命令行安装
桌面端 profile 名常见为 desktop,请按本机配置替换 --profile 后的名称。
dsh plugin --profile web add github:Su-1003/dsh-notify-sound
方式二:本地目录
将仓库放到 DSH 插件目录后,在 GUI 设置 → 插件 → 本地开发 选中该目录安装(README 中给出了 Windows PowerShell 下的 git clone 目标路径示例)。
装完后重启 DSH,或刷新 Web GUI。
初次出声:浏览器要求至少一次用户手势才能解锁 AudioContext。安装后请在界面上点一下或按一下键,之后提示音才会正常播放;通知条不受此限制。
换音色¶
目前没有图形设置页,可用两种方式:
- 修改
lib/client.cjs中的DEFAULT_SOUND_SET为上述六种之一,保存后刷新 GUI。 - 在浏览器控制台执行:
localStorage.setItem("dsh-notify-sound.style", "bell")
键名固定为 dsh-notify-sound.style,刷新后按该值恢复。
适用场景与注意¶
适合:长时间在 DSH Web 里跑智能体任务、希望离开屏幕后仍能感知「完成 / 待确认 / 出错」的开发者。
务必了解:
- 插件以当前 DSH 进程及浏览器环境运行;安装前请自行查看 源码与 LICENSE。
- 仅在 Web GUI 生效;标签页在后台时,浏览器可能限流定时器,提示音可能延后。
- 页面未被点击过时不会响(AudioContext 策略),属浏览器行为而非插件单独限制。
- SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系;本文事实以仓库 README 与
package.json为准。
结尾¶
dsh-notify-sound 用零依赖的合成音和页面内通知条,把 DSH 会话状态变化转成可感知的反馈,适合不盯屏又需要及时回到授权或结果的场景。