前言¶
在 DeepSeek Harness(DSH)里跑 Agent 时,人往往盯着别的窗口:回合何时结束、是否出错、是否在等审批或提问,单靠界面状态不够直观。一直切回 DSH 看日志也费精力。dsh-notify-chime 监听会话事件,在固定几类节点播放区分度明显的短音,并可按需弹出系统通知,把「该不该回来点一下」变成可听、可选横幅的反馈。下面介绍插件定位、安装、设置与使用时的注意点。
这是什么¶
dsh-notify-chime 是社区维护的 DSH 工作流类插件,维护者为 dixieWithHeart。当前包版本为 1.8.0(以 package.json 为准),许可证 MIT,要求 Node.js >= 20。插件随包提供 cordis.patch.yml,安装后自动写入宿主配置;宿主侧逻辑在 lib/host.js,设置页通过 client.js 注入 DSH 设置 UI。
一句话:在回合完成 / 中断 / 出错 / Agent 提问等场景发声,Windows 等平台还可选 Toast;八类事件各自可开关、可配音色,支持自定义音频文件。
生态上,DSH 主张「一切皆插件」;SkillHub 目录页 与 GitHub 仓库 为社区来源,与 DeepSeek / 幻方无官方应用商店从属关系。安装前宜自行查看源码与许可证;插件以当前 dsh 进程权限运行。
核心功能:八类事件与默认听感¶
插件按 kind 区分场景,内置默认音色语义一致:完成偏上行、中断偏下行、出错低频、提问偏高音催问。
| 场景 | kind | 默认音色(README 描述) |
|---|---|---|
| 回合正常结束 | finished |
上行三音 |
| 中断(停止、归档、取消) | interrupted |
下行两音 |
| 出错结束 | error |
低频双响 |
| Agent 提问(等回答) | question |
三声高音 |
等待审批(approval/asked) |
approval |
上行双音,稍急 |
计划评审(exit_plan_mode) |
plan-review |
三音上行 |
目标受阻(goal/change → phase: blocked) |
goal-blocked |
低频下行 |
后台任务失败(job/settled → failed) |
job-failed |
短促双音 |
自 1.5.0 起,计划评审不再与「提问」混为一类。目标受阻仅在「非 blocked → blocked」那一次跃迁发声;后台任务失败按会话 3 秒窗口去抖,多任务同时失败只响一次。
不发声的情况(资料明确):应用退出、会话分叉、被阻断,以及默认被过滤的 subagent 会话。监听的是会话日志追加流,冷启动打开历史会话不会补响。
安装与启用¶
官方安装命令如下(资料原文,勿自行拼接 github:owner/repo 形式):
dsh plugin add dsh-notify-chime
装完后刷新页面,在 设置 → 提示音 中调整。设置保存即生效,无需重启 DSH。
设置页结构¶
三组配置;总开关关闭时不发声、不弹通知,但事件仍记账,可随时重新打开。
| 组 | 内容 |
|---|---|
| 声音 | 总开关、音色、八类事件各自开关与试听、正在看的会话完成时不响、同类事件最小间隔、子会话提醒 |
| 通知 | 通知总开关、哪些事件弹、标题前缀、正文是否带会话名 |
| 高级 | 设置文件 / 音效 / 自定义 / 轨迹目录(只读)、恢复默认 |
用户改过的项写入 ~/.dsh/dsh-notify-chime.json,未在界面改动的仍以 cordis.patch.yml 初值为准。
界面语言:设置页中英文文案随 DSH 设置 → 常规 → 语言切换,无需重启。系统通知标题与正文由宿主生成,资料写明目前固定中文。
音色与自定义音效¶
六套内置音色只换听感,不改触发规则:default、soft、chime、retro、digital、wood(具体听感见 README 表)。顶部选择为全局默认;单类事件可点行内「跟随全局 ▾」单独指定。
某行音色选为「自定义」后出现「上传」:
- 支持 WAV / MP3 / M4A / AAC,单文件 ≤ 5 MB;WAV 走
SoundPlayer,其它走 WPFMediaPlayer - 存于
~/.dsh/dsh-notify-chime-sounds/<kind>.wav,卸载插件不删文件
assets/ 下内置 WAV 由包内 tools/make_sounds.py 合成,MIT 分发,无第三方采样。
配置初值与高级项¶
cordis.patch.yml 中的 config 仅为初值;界面保存后以 JSON 设置文件为准。典型片段:
- id: dsh-notify-chime
config:
enabled: true
soundset: default
minIntervalMs: 700
includeSubagents: false
kinds:
finished: true
interrupted: true
error: true
question: true
approval: true
plan-review: true
goal-blocked: true
job-failed: true
toast: { enabled: true, kinds: [question], includeSession: true }
常用字段含义(默认值以 README 表为准):
enabled:总开关初值;false时插件仍加载,设置页可用soundset:全局音色,含customminIntervalMs:同类事件最小间隔(默认 700),防连响includeSubagents:是否为子会话发声(默认 false)quietCurrent:当前正在查看的会话完成时不响(仅影响完成类)kinds.<kind>:该类是否发声toast.*:是否弹系统通知、对哪些 kind、标题前缀、是否带会话名;Windows 上toast.appId默认com.deepseek.dsh,须为已注册 AppUserModelID
也可在 patch 里为单类写死路径或静音,例如:
- id: dsh-notify-chime
config:
sounds:
finished: C:/Windows/Media/Windows Print complete.wav
error: false
调试触发记录:为 traceFile 指定路径后,每次触发追加一行 JSON;默认不配则不写文件。
系统通知与平台行为¶
- Windows:WinRT Toast
- macOS:
osascript - Linux:
notify-send
appId 未在系统注册时,通知可能只进通知中心、不弹横幅。资料提供了 Windows 下排查用的 tools/check-notifications.py、tools/try.mjs toast 等命令,并建议检查系统通知开关与勿扰模式。
典型用法:本地试听与冒烟¶
不依赖真实会话即可验证音效与通知:
node tools/try.mjs all # 试听四种音效
node tools/try.mjs toast # 试弹通知
node tools/smoke-test.mjs # 契约冒烟,临时目录,不碰真实设置、不发声
node tools/smoke-test.mjs --verbose
重新生成内置 WAV(可选):
python tools/make_sounds.py # 全部重生成
python tools/make_sounds.py chime # 只重生成一套
适用场景与限制¶
适合谁:长时间让 Agent 在后台跑、需要靠声音区分「正常结束 / 被打断 / 出错 / 在等你答或批」的 DSH 用户;希望提问类事件再配系统通知、减少切窗的用户。
实现上的限制(README 原文要点):
- 每次提醒通过独立子进程播放,不阻塞 Host;PowerShell 冷启动约 200 ms,感知延迟约 0.3 s
- 无插件内音量调节,跟随系统默认输出设备;虚拟声卡可能导致听不清
- 自定义格式不支持 WMA、FLAC
- 暂停:设置页总开关;卸载:
dsh plugin remove dsh-notify-chime,设置文件可保留或删除
结尾¶
dsh-notify-chime 把 DSH 回合生命周期里几类关键节点映射成可配置的提示音与可选系统通知,并用八类 kind、六套音色和去抖规则减少误报与连响。若要安装或查看版本说明,见 SkillHub 目录 与 GitHub:dixieWithHeart/dsh-notify-chime。