dsh-ding
Notifies you when a conversation finishes: plays a sound and shows a Windows notification when the agent goes idle (configurable sound file, volume, debounce/throttle).
Install
dsh plugin --profile web add dsh-ding
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
dsh-ding 🔔

DSH(DeepSeek Harness)宿主插件:对话完成时提醒你——每当 Agent 结束一轮对话(状态回到 idle,不再主动输出),播放提示音并弹出 Windows 通知,让你切到别的窗口等回复时也不会错过。
A DSH host plugin that notifies you when a conversation finishes: whenever the Agent completes a turn (back to idle, no more proactive output), it plays a sound and shows a Windows notification, so you never miss the reply while working in another window.
切换语言 / Language: [中文](#中文) · [English](#english)
中文
主要功能
- 🔔 提示音:对话完成后播放提示音——默认使用
ding.mp3(可配置任意音频文件:mp3/wav/mid/wma/aac),找不到时回退系统"叮咚"双音 - 🪟 Windows 原生通知:弹出系统原生 Toast(含会话标题、DSH 蓝鲸图标)。首次使用时自动注册 AppUserModelID(开始菜单快捷方式),确保通知真正显示——未注册的 AUMID 会被 Windows 静默丢弃
- 🎚️ 音量可调:
volume配置项(0.0 ~ 1.0)控制提示音大小,改配置即时生效 - 🔔 Web 铃铛按钮:对话页顶栏有个铃铛——单击开关提示音、悬停拖音量滑杆(松手自动试听)、右键选择音效并可上传自己的音频文件;设置即时保存,无需改配置
- 🖱️ 通知点击直达会话:Windows 通知(toast/气泡)点击后直达输出完成的对话(快捷方式激活 +
dsh-ding://协议)。dsh web启动时打开浏览器并用?dingOpen=定位会话;DeepSeek Harness 桌面版启动时改为在应用窗口内直接切换会话(宿主事件流推送 +dsh://open聚焦窗口),不弹浏览器、也不会撞上 WebUI 的认证拦截 - 🔕 当前会话免打扰:窗口在前台且完成的会话正是你正在查看的会话时静默;切走窗口、看别的会话、或没开对话页时照常提醒
- ⏱ 长任务运行中提醒:任务运行超 3 分钟后每 5 分钟提醒一次(只弹通知、不响铃),提醒文本含已运行时长
- ❓ 用户提问提醒:Agent 通过
ask_user_question提问等待回答时立即提醒(文本区别于完成通知) - 🛡️ 工具审批提醒:工具调用等待你批准(approval/request)时立即提醒,点击通知直达该会话,在 WebUI 里完成审批
- 🛠 高级设置弹窗:右键菜单底部「⚙ 高级设置」打开页面内设置窗口,可改全部参数(通知开关/标题/时机毫秒/音量/自定义通知模板),自定义模板支持参数引用:
{title}会话标题、{prefix}对话前缀、{elapsed}耗时、{question}问题文本、{tool}工具名(审批模板) - 💾 导入/导出配置:右键菜单底部可导出配置(下载 JSON 文件)或导入配置(从 JSON 恢复全部设置)
- ▶ 铃声试听:右键菜单铃声列表每项右侧有播放按钮,可单独试听每个铃声(不切换当前铃声)
- 🧪 通知测试按钮:高级设置页提供完成 / 运行中 / 提问 / 审批 4 个测试按钮,点击立即弹出对应类型的真实通知,点击通知打开测试结果页
- 🏷️ 通知应用名可改:高级设置可自定义通知应用名;留空时跟随 WebUI 中英文自动切换(中文:DSH叮当通知,英文:dsh-ding-notifier)
- 📦 内置 ding.mp3:提示音文件随插件包分发,不再依赖启动目录或主目录存在 ding.mp3
- 🌐 双语:通知正文与标题、面板文案跟随 WebUI 界面语言(中/英)
- 🎯 时机精准:以会话 turn 是否真正结束判断完成(排除回复中途的短暂空闲),完成通知带耗时
- 🧹 不误报:自动跳过子代理(subagent)的完成事件(那只是主对话的中间过程)
- ⚡ 防抖节流:默认 200ms 防抖 + 3s 全局节流,避免连发
安装方法
$DSH_HOME 默认为 ~/.dsh。
方法 A:npm 安装(推荐)
dsh plugin --profile web add dsh-ding
也可以直接在项目里装:
npm install dsh-ding
装完重启 dsh web 生效。已发布版本见 https://www.npmjs.com/package/dsh-ding 。
方法 B:从 GitHub 安装(bundle)
dsh plugin --profile web add github:CAOGGL/dsh-ding
依赖 pnpm(npm install -g pnpm 即可)。本插件也支持 insert 行挂载(改配置即时生效),见方法 D。
方法 C:插件市场
设置 → 插件市场 → 搜索 dsh-ding → 一键安装(已收录于 awesome-dsh-plugin,市场目录每日刷新后出现)。
方法 D:手动放置(无需 pnpm)
1. 把本仓库克隆(或下载)到:$DSH_HOME/profiles/node_modules/dsh-ding/
2. 在 profile 的用户补丁 $DSH_HOME/profiles/web/cordis.patch.yml(其他 profile 同理)追加:
- insert:
- id: dsh-ding
name: 'dsh-ding'
inject: ['webServer'] # 必需:声明对 webServer 的依赖,Web 铃铛 API 才能挂载
config:
sound: true
balloon: true
3. 保存即生效(补丁文件是热监控的);插件代码本身的改动需要重启服务才生效。
验证:对话完成后应听到提示音并看到通知;也可以先单独测试通知脚本:
powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.dsh\profiles\node_modules\dsh-ding\notify.ps1" -Title "测试" -Text "dsh-ding 工作正常"
配置
配置项 · 默认值 · 说明
sound · true · 播放提示音
soundFile · 空 · 提示音文件路径(mp3/wav/mid/wma/aac)。留空时自动在 服务器工作目录 / 插件目录(自带 ding.mp3)/ 用户主目录 找 ding.mp3,找不到则回退系统"叮咚"双音
volume · 1.0 · 提示音音量(0.0 ~ 1.0,1.0 为原始音量,如 0.5 即一半音量)
balloon · true · 显示 Windows 通知
title · DSH 完成 · 通知标题
debounceMs · 200 · 状态防抖毫秒数
minIntervalMs · 3000 · 两次通知的最小间隔
notifySubagents · false · 是否也通知子代理完成
quietOnViewing · true · 当前会话免打扰:窗口在前台(可见且有焦点)且完成的会话正是正在查看的会话时静默;切走窗口 / 看别的会话 / 没开对话页时照常提醒
runningNotify · true · 长任务运行中提醒:只弹 Windows 通知、不响铃
runningFirstAfterMs · 180000 · 运行中提醒首次延迟毫秒数(默认 3 分钟)
runningIntervalMs · 300000 · 运行中提醒后续间隔毫秒数(默认 5 分钟)
runningTitle · DSH 运行中 · 运行中提醒的通知标题(v1.0.0 更新新增)
questionNotify · true · 用户提问提醒:Agent 通过 ask_user_question 提问等待回答时立即提醒(文本区别于完成通知)
questionTitle · DSH 提问 · 提问提醒的通知标题
doneTemplate · 空 · 自定义完成通知文本(支持 {title}/{prefix}/{elapsed},留空用默认)
runningTemplate · 空 · 自定义运行中提醒文本(支持 {title}/{prefix}/{elapsed},留空用默认)
questionTemplate · 空 · 自定义提问通知文本(支持 {title}/{prefix}/{question},留空用默认)
approvalNotify · true · 工具审批提醒:工具调用等待你批准时立即提醒
approvalTitle · DSH 审批 · 审批提醒的通知标题
approvalTemplate · 空 · 自定义审批通知文本(支持 {title}/{prefix}/{tool},留空用默认)
notifierName · 空 · 通知应用显示名(Windows 通知设置里显示的名称)。留空时跟随 WebUI 语言自动切换:中文「DSH叮当通知」,英文「dsh-ding-notifier」;填写后固定使用该名称
完整示例:
- insert:
- id: dsh-ding
name: 'dsh-ding'
config:
sound: true
soundFile: 'C:\codewhale\ding.mp3'
volume: 0.8
balloon: true
title: 'DSH 完成'
debounceMs: 200
minIntervalMs: 3000
quietOnViewing: true
runningNotify: true
runningFirstAfterMs: 180000
runningIntervalMs: 300000
Web 铃铛按钮(v0.4.0+)
对话页顶栏右侧的铃铛,全部设置即时保存到 $DSH_HOME/profiles/<name>/data/dsh-ding.json(仅覆盖你动过的项,其余仍跟随 cordis.patch.yml 配置):
操作 · 效果
单击铃铛 · 快速开关提示音
悬停铃铛 · 铃铛正左侧滑出音量条(行内元素带宽度动画,同行元素自动左移);拖动松手自动试听
右键铃铛 · 打开通知设置面板:提示音/气泡通知开关(两个都关 = 对话完成时无任何提示)、当前会话免打扰(正在查看的会话完成时不提醒,别的会话完成/切走后照常提醒)、运行中提醒(任务运行中超 3 分钟后每 5 分钟提醒一次,仅通知)、提问提醒(Agent 提问等待回答时立即提醒),下方可选音效(内置叮咚 / 已上传的音频)或上传新音效(mp3/wav/mid/wma/aac/m4a/ogg/flac,存到 data/sounds/);面板底部 ⚙ 高级设置 进入全部参数编辑(通知开关/标题/时机毫秒/音量,即时保存);底部还有 导出配置 / 导入配置(下载/恢复 JSON 配置)
卸载
1. 从 cordis.patch.yml 删掉 dsh-ding 那一整块
2. 删除 $DSH_HOME/profiles/node_modules/dsh-ding/ 目录
更新日志
- v1.1.1(2026-10-24):修复右键菜单半透明——设置面板与高级设置弹窗此前只取了
--dsw-specific-menu(该令牌只带 94% 不透明度)却没带核心菜单配套的backdrop-filter,导致背后的对话正文清晰透上来
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::5,最后更新 2026-10-24