为 dsh 网页界面提供声音/语音提醒:审批、提问、完成、错误各有独立音色,可选语音朗读。
安装
# npm 包(预构建)
dsh plugin --profile web add @machine-126/dsh-alert-sound
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:Machine-126/dsh-alert-sound
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
English | 中文
为 DeepSeek Harness (dsh) 网页图形界面提供通知声音提醒。当会话需要审批、需要回答、一轮输出完成、或出现错误时,插件播放不同的提示音并弹出悬浮提示——可选语音朗读。每类通知可单独设置音色/语音、启用开关与总音量,都在专属的设置页里配置。界面与语音支持中文 / English 切换。
关于本项目的开发:本插件由 @Machine-126 提出需求与测试验收;代码开发全程由 DeepSeek Harness(AI 编程代理)驱动完成。发现 bug 欢迎提 issue。
- 五类提醒,音色各异:需要审批 / 需要回答 / 输出完成 / 发生错误,外加实验性的「卡住」(默认关)。
- 可选语音(中/英文随界面语言):把某类切到“语音”,即可用浏览器语音合成朗读;朗读语言跟随“界面语言”设置(中文
zh-CN/ Englishen-US)。若浏览器语音合成未能开始朗读,会自动改播该类的提示音,保证一定有声。 - 设置页(侧栏 → 提醒音):总音量滑杆(0–200%)、每类启用开关、音色下拉(叮咚/低沉/轻点/警醒/语音/自定义/静音)、试听按钮,以及 “恢复默认设置”(带二次确认)。
- 后台也能响:首次用户手势自动解锁音频。
- 默认对所有会话提醒:多会话用户也能听到任何会话的审批/回答/出错/完成;可在设置切到“仅当前会话”。
- 语音播报具体内容:切到“语音”后会读出具体卡在哪(如“需要审批:write;写入文件 xxx”“需要回答:<问题>”“发生错误:<原因>”)。
- 阻断事件重复提醒:审批/提问未处理时,每隔一段时间再响一次(可设关/10/20/30 秒),直到处理;错误重复几次。
- 多语言(zh/en):设置里可切“界面语言”(自动/中文/English);设置页、悬浮提示、每类/音色名与语音朗读语言随之切换。
- 浏览器系统通知:开启后,提醒时在系统通知区也弹一条(后台也能看到)。
- 停滞检测(实验性,默认关):Agent 长时间无进展时提醒;当前基于
updatedAt,可靠性待改进,故默认关闭。注意:只有把「停滞检测」打开,第 5 类「卡住」提醒才会触发。 - 设置持久化到
localStorage,刷新/重启保留;可一键恢复默认。
要求
- DeepSeek Harness
0.2.0-rc.2或更新(dsh web)——审批/提问的检测依赖 rc2 的uiSession.sessionStatus(0.1.2 引入的uiSession.pendingInteractions已被核心收回、不再是公开面);更早版本只能收到“完成/错误”提醒。 - 支持 Web Audio 的浏览器(播放音色);Web Speech 用于语音,可选、缺失时自动降级为提示音
安装
推荐用 npm 包(预构建安装、免构建授权,市场按下载量展示):
dsh plugin --profile web add @machine-126/dsh-alert-sound
也可从 GitHub 安装(纯 JS 无构建,直接生效):
dsh plugin --profile web add github:Machine-126/dsh-alert-sound
或从本地目录(路径必须绝对;rc2 会装成 link: 链接,改代码后刷新页面即可):
dsh plugin --profile web add D:\path\to\dsh-alert-sound
重启 dsh web,然后打开 设置 → 提醒音 配置。
使用
安装后,打开 DSH 设置 → 提醒音,为每类通知设置音色/语音、启停与音量;顶部“界面语言”可在 自动 / 中文 / English 间切换;底部 “恢复默认设置” 可一键复位(会二次确认)。满足条件时自动提醒,无需其它操作。
通知类型与默认音色
| 类型 | 触发条件 | 默认音色 | 提示 |
|---|---|---|---|
| 需要审批 | uiSession.sessionStatus 里该会话 pendingInteraction.kind === 'approval' |
警醒(方波三连) | 琥珀色 |
| 需要回答 | 同上,kind === 'question'(含 plan-review) |
轻点(双短音) | 紫色 |
| 输出完成 | 会话 running 由真→假(以 sessionStatus.running 为准) |
叮咚(上行双音) | 绿色 |
| 发生错误 | 运行中途出错(lastAgentError 变化) |
低沉(下行锯齿) | 红色 |
另有第 5 类 “卡住” 提醒(实验性,默认关闭,需先打开“停滞检测”),音色默认取“低沉(fault)”。
关于「语音」这一档:审批 / 提问会念出挂起交互的详情(工具名、原因、问题文本);「输出完成」的正文(最后一条助手回复)需要同时开启「朗读输出」,未开启时只念类型名(如“输出完成”)。正文上限 400 字。
设置持久化
偏好保存在 localStorage 的 dsh-alert-sound.v1 键下(音量 + 每类 {enabled, sound} + 提醒范围/重复间隔/系统通知/朗读输出/停滞检测/悬浮提示/语音语速/勿扰时段/界面语言等),自定义音色单独存在 dsh-alert-sound.custom.v1。刷新页面与重启都会保留。
隐私
所有处理都在浏览器内完成。插件只在内存中读取:会话状态 uiSession.sessionStatus(running 与挂起交互的类型,以及工具名、原因、问题文本);会话列表行的 updatedAt 与 retainedBy(判定“当前会话”;running 仅作回退);会话快照的 lastAgentError(判定“失败”);以及仅在开启“朗读输出”时读取会话视图里最后一条助手回复文本(用于朗读)。以上不保存、不外发。唯一持久化的数据是你自己的设置(localStorage 的 dsh-alert-sound.v1;自定义音色另存 dsh-alert-sound.custom.v1)。插件不发起任何网络请求、不向任何服务器发送数据、不用 analytics/telemetry,声音/语音通过浏览器本地的 Web Audio 和语音合成播放。
项目结构
├─ package.json # dsh.bundle + dsh.client(web 客户端插件)
├─ cordis.patch.yml # 组合补丁:插入一行插件(id = 包内 name)
└─ lib/
├─ index.mjs # 主机端(纯客户端插件,主机行为为最小占位)
└─ client.js # 客户端逻辑(__ModuleLoader__ 格式)
致谢(来源参考)
本插件的检测思路(监听 uiSession.sessionStatus 的 running 与 pendingInteraction 判定“审批/提问/完成”)参考了 dsh-session-notification(BSD-3-Clause);“任务完成提示音”概念参考 dsh-chime(Apache-2.0);打包结构 / web 客户端插件形态参考官方文档 docs/user/develop/basic/publish.md,以及 dsh-plugin-tts、dsh-status-rotator、dsh-web-ui-notify。
音色为原创设计(波形/频率为本插件自定),未照搬任何项目的音色常量;本插件源码为独立实现。发布时请保留本致谢并遵守对应开源许可。
许可
MIT
链接
同类插件
xmanrui/dsh-im★ 1710
通过二维码或机器人凭据将 IM 机器人接入 DeepSeek Harness(支持飞书、微信、钉钉、企业微信、QQ、Slack、Telegram、Discord 和 WhatsApp 共 9 种渠道)。
shaobeichen/dsh-pocket★ 1576
手机远程访问 DSH Web 界面:扫码即用局域网或公网(cloudflared 隧道)访问,实时同屏、移动端适配布局,带设置页管理。
inclusionAI/Avernet#deepseek-harness-channel-bcn★ 677
通过 WebSocket V2 将 DeepSeek Harness 接入 Avernet Bot 协作网络,支持自动注册、Agent 会话隔离、工具调用事件和多 Bot 路由工具。
omdsh-dev/dsh-notification★ 87
回合完成桌面通知,按结果分控 + 关键词过滤。
THEWOLFWALKER/dsh-notifier★ 56
DSH 通知与远程操作控制面:一个 `notify()` API 接入 28 个出站渠道,六条入站控制通道承载手机审批、提问与任务控制;提供 DSH 原生「通知与控制」UI、出站热生效、多 agent 路由,并保持零运行时依赖。
whyihaveyou/dsh-suite#plugin-notify★ 56
回合完成、错误或待审批时推送 IM webhook(飞书/企微/钉钉/Slack/Discord/自定义)与本地通知。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。