ppy-web/dsh-plugin-xiaomi-mimo-tts
ppy-web/dsh-plugin-xiaomi-mimo-tts为 DSH 提供小米 MiMo、豆包和浏览器本地语音朗读,支持自动播报、自定义音色与可选 UI 音效。
对话完成提醒:Agent 空闲(idle)时播放提示音并弹 Windows 原生通知,可配 ding.mp3、音量与防抖节流。
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
ding.mp3(可配置任意音频文件:mp3/wav/mid/wma/aac),找不到时回退系统"叮咚"双音volume 配置项(0.0 ~ 1.0)控制提示音大小,改配置即时生效dsh-ding:// 协议)。dsh web 启动时打开浏览器并用 ?dingOpen= 定位会话;DeepSeek Harness 桌面版启动时改为在应用窗口内直接切换会话(宿主事件流推送 + dsh://open 聚焦窗口),不弹浏览器、也不会撞上 WebUI 的认证拦截ask_user_question 提问等待回答时立即提醒(文本区别于完成通知){title} 会话标题、{prefix} 对话前缀、{elapsed} 耗时、{question} 问题文本、{tool} 工具名(审批模板)$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)
$DSH_HOME/profiles/node_modules/dsh-ding/$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验证:对话完成后应听到提示音并看到通知;也可以先单独测试通知脚本:
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对话页顶栏右侧的铃铛,全部设置即时保存到 $DSH_HOME/profiles//data/dsh-ding.json(仅覆盖你动过的项,其余仍跟随 cordis.patch.yml 配置):
操作 · 效果 单击铃铛 · 快速开关提示音 悬停铃铛 · 铃铛正左侧滑出音量条(行内元素带宽度动画,同行元素自动左移);拖动松手自动试听 右键铃铛 · 打开通知设置面板:提示音/气泡通知开关(两个都关 = 对话完成时无任何提示)、当前会话免打扰(正在查看的会话完成时不提醒,别的会话完成/切走后照常提醒)、运行中提醒(任务运行中超 3 分钟后每 5 分钟提醒一次,仅通知)、提问提醒(Agent 提问等待回答时立即提醒),下方可选音效(内置叮咚 / 已上传的音频)或上传新音效(mp3/wav/mid/wma/aac/m4a/ogg/flac,存到 data/sounds/);面板底部 ⚙ 高级设置 进入全部参数编辑(通知开关/标题/时机毫秒/音量,即时保存);底部还有 导出配置 / 导入配置(下载/恢复 JSON 配置)
cordis.patch.yml 删掉 dsh-ding 那一整块$DSH_HOME/profiles/node_modules/dsh-ding/ 目录--dsw-specific-menu(该令牌只带 94% 不透明度)却没带核心菜单配套的 backdrop-filter,导致背后的对话正文清晰透上来;现补上 backdrop-filter: var(--dsw-menu-backdrop-filter) 并把表面同色叠两层(≈99.6% 不透明),即使环境不支持背景模糊也不会再透字dsh web 命令行启动仍打开浏览器(行为不变);DeepSeek Harness 桌面版改为在应用窗口内直接切到目标会话并聚焦窗口,不再弹出浏览器、也不会遇到 dsh web authentication required 的认证拦截(新增 POST /dsh-ding/activate 与 GET /dsh-ding/events 事件流,宿主把会话 id 推给已连接客户端;宿主判定为 Electron 运行时的桌面版 vs 命令行 dsh web)。同时修复三处:① 会话跳转改调核心 uiWorkspace.openSession——原来用的 sessions.open 在 WebUI 服务里并不存在,点击通知其实从未真正切换会话(dsh web 的 ?dingOpen= 深链同样受影响);② NotifyIcon 气泡兜底点击改走同一套判定,不再一律打开浏览器;③ POST /dsh-ding/activate 只接受本机回环 + application/json,避免任意网页或局域网对本地服务做 CSRF 式跳转。版本号说明:npm 上 1.0.4/1.0.5/1.0.6 曾于 2026-09-30 发布后删除,npm 永久禁止复用已发布过的版本号,故本次直接从 1.0.3 跳到 1.1.0dsh-ding),内容与 v1.0.2 相同,仅版本号对齐 npm latest;安装方式:npm install dsh-ding 或 dsh plugin add dsh-dingGET /dsh-ding/audio 支持 ?file= 指定音效;配置导入/导出——右键菜单底部新增「导出配置 / 导入配置」,可把当前配置下载为 JSON 或从 JSON 恢复全部设置;内置 ding.mp3——ding.mp3 随插件包分发,notify.ps1 搜索链新增插件自身目录,不再依赖启动目录或用户主目录里存在 ding.mp3;四种通知测试按钮——高级设置页新增完成/运行中/提问/审批四个测试按钮,点击立即发出对应类型的真实通知,点击通知跳转到测试结果页,并记录本次测试使用的配置;通知应用名可改——高级设置新增「通知应用名」,留空时跟随 WebUI 中英文自动切换(中文默认:DSH叮当通知,英文默认:dsh-ding-notifier),填写后固定使用approval/request)时播放提示音并弹出 Windows 审批通知(标题与文案可自定义,支持 {tool} 工具名参数);点击通知直达发起审批的会话,在 WebUI 里完成批准/拒绝;新增配置项 approvalNotify / approvalTitle / approvalTemplate(可在高级设置里编辑);提示音异步播放——提示音与通知同时弹出,不再等待音效放完(修复音效尾音长时通知卡顿的问题)POST /dsh-ding/presence);② 完成通知带耗时:通知文本显示"用时 X 分 Y 秒"(宿主自动记录任务开始时间);③ 长任务运行中提醒(默认开):任务运行超 3 分钟后首次提醒、之后每 5 分钟一次,只弹通知不响铃(尊重"完成前不打扰"),提醒文本含已运行时长;④ 点击通知跳转会话:点击 Windows 通知自动打开浏览器直达对应对话(dsh-ding:// 协议激活 + toast-activate.ps1 + ?dingOpen= 深链);⑤ 用户提问提醒(默认开):Agent 通过 ask_user_question 提问等待回答时立即提醒;⑥ 高级设置弹窗:右键菜单「⚙ 高级设置」打开页面内设置窗口(遮罩 + 居中面板),全部参数运行时编辑(通知开关/标题/时机毫秒/音量/子代理完成通知);⑦ 自定义通知模板:完成/运行中/提问通知文本可自定义,支持 {title}/{prefix}/{elapsed}/{question} 参数引用;⑧ 双语通知:通知正文与标题跟随 WebUI 界面语言(DSH 完成/DSH Done、DSH 提问/DSH Question、DSH 运行中/DSH Running),内置音效名跟随语言;⑨ 完成判定修复:以 turn 真正结束 + 相位过滤判断完成,修复回复中途误通知与完成不通知的问题。(08-16 更新):⑩ 运行中提醒独立标题——运行中通知标题由「DSH 完成」改为「DSH 运行中」,并新增 runningTitle 配置项与高级设置「运行中通知标题」输入框;⑪ 运行中通知模板——新增 runningTemplate 配置项与高级设置「运行中通知模板」编辑框;⑫ 标题框语言化——标题输入框在未自定义时随 WebUI 语言显示对应默认标题(中文 DSH 完成/DSH 运行中/DSH 提问,英文 DSH Done/DSH Running/DSH Question);⑬ 设置文件热重载——直接编辑 data/dsh-ding.json 保存后即时生效,无需重启。(08-17 更新):⑭ 点击跳转修复——Windows 11 对非打包应用的 toast 点击(foreground 激活)失效,改为 activationType="protocol" 协议激活,并补全 URL Protocol 注册标志、修复 launch 参数解析(dsh-ding://open// 中 open 被解析为 host 的情况)、浏览器端深链加自动重试;⑮ 跳转黑窗修复——协议命令改用 wscript + toast-activate.vbs 无窗口启动器(避免 powershell 控制台黑窗闪烁)。新增配置项:quietOnViewing / runningNotify / runningFirstAfterMs / runningIntervalMs / questionNotify / questionTitle / runningTitle / doneTemplate / runningTemplate / questionTemplate,全部参数可在高级设置窗口运行时修改ctx.locale,切换语言即时生效,不再是页面 lang)--dsw-alias-*)——自定义滑杆:4px 圆角轨道 + 品牌色填充 + 主题化旋钮(悬停/按压放大);菜单表面/边框/阴影/文字/悬停/选中色全部对齐 WebUI 弹层样式(--dsw-specific-menu / --dsw-shadow-lv3),自动适配明暗主题GET/POST /dsh-ding/settings、/dsh-ding/test、/dsh-ding/sounds HTTP API,设置持久化到 data/dsh-ding.jsondsh plugin add github:CAOGGL/dsh-ding 一行安装soundFile 指向的文件是否存在;文件不存在会自动回退系统"叮咚"双音;两者都无声请检查系统音量/静音。dsh-ding-notifier 快捷方式(AppUserModelID 注册,这是 Windows 显示 toast 的前提)。若通知仍不显示,检查 设置 → 系统 → 通知 里 dsh-ding-notifier 是否被关闭;WinRT Toast 失败时脚本会自动回退 NotifyIcon 气泡。soundFile 指向它(即时生效)。ding.mp3 (configurable to any audio file: mp3/wav/mid/wma/aac) when a conversation completes; falls back to the system "ding-dong" beep if the file is missingvolume option (0.0 ~ 1.0) controls the alert loudness; config changes apply immediatelydsh-ding:// protocol). With dsh web it opens the browser and uses the ?dingOpen= deep link; with the DeepSeek Harness desktop app it switches the conversation inside the app window instead (host event-stream push + dsh://open to focus), so no browser pops up and the WebUI authentication gate is never hitask_user_question and waits (text differs from completion)approval/request); clicking the notification jumps to that conversation, where you approve or reject in the WebUI{title} session title, {prefix} conversation prefix, {elapsed} elapsed time, {question} question text, {tool} tool name (approval template)$DSH_HOME defaults to ~/.dsh.
Method A: npm install (recommended)
dsh plugin --profile web add dsh-dingOr install it in your project:
npm install dsh-dingThen restart `dsh web`. Published versions: https://www.npmjs.com/package/dsh-ding
Method B: install from GitHub (bundle)
dsh plugin --profile web add github:CAOGGL/dsh-dingRequires pnpm (npm install -g pnpm). The plugin also supports insert-row mounting with live config reload (see Method D).
Method C: plugin market
Settings → Plugin Market → search dsh-ding → one-click install (listed in awesome-dsh-plugin; the market catalog refreshes daily).
Method D: manual placement (no pnpm needed)
$DSH_HOME/profiles/node_modules/dsh-ding/$DSH_HOME/profiles/web/cordis.patch.yml (same for other profiles):- insert:
- id: dsh-ding
name: 'dsh-ding'
inject: ['webServer'] # required: depends on the webServer service so the bell API mounts
config:
sound: true
balloon: trueVerification: finish a conversation and you should hear the sound and see the notification. You can also test the notification script standalone:
powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.dsh\profiles\node_modules\dsh-ding\notify.ps1" -Title "Test" -Text "dsh-ding works"Option · Default · Description sound · true · Play the alert sound soundFile · empty · Path to the sound file (mp3/wav/mid/wma/aac). When empty, the script looks for ding.mp3 in the server working directory / plugin directory (bundled ding.mp3) / user home; falls back to the system beep if not found volume · 1.0 · Alert sound volume (0.0 ~ 1.0; 1.0 = original volume, e.g. 0.5 = half volume) balloon · true · Show the Windows notification title · DSH Done · Notification title debounceMs · 200 · Status debounce in ms minIntervalMs · 3000 · Minimum interval between two notifications notifySubagents · false · Also notify when subagents finish quietOnViewing · true · Quiet on current: silent while the window is focused AND the finishing session is the one you are viewing; still reminds when you switch away, view another session, or no conversation page is open runningNotify · true · Long-task progress reminder: Windows toast only, no sound runningFirstAfterMs · 180000 · First progress reminder delay in ms (default 3 min) runningIntervalMs · 300000 · Progress reminder interval in ms (default 5 min) runningTitle · DSH Running · Notification title for progress reminders (new in v1.0.0 update) questionNotify · true · Question reminder: alerts immediately when the agent asks you something via ask_user_question and waits (text differs from completion) questionTitle · DSH Question · Notification title for question reminders doneTemplate · empty · Custom completion text ({title}/{prefix}/{elapsed}; empty = default) runningTemplate · empty · Custom progress-reminder text ({title}/{prefix}/{elapsed}; empty = default) questionTemplate · empty · Custom question text ({title}/{prefix}/{question}; empty = default) approvalNotify · true · Tool approval reminder: alert when a tool call waits for your approval approvalTitle · DSH Approval · Notification title for approval reminders approvalTemplate · empty · Custom approval text ({title}/{prefix}/{tool}; empty = default) notifierName · empty · Notification app display name (shown in Windows notification settings). Leave empty to follow the WebUI language: Chinese "DSH叮当通知", English "dsh-ding-notifier"; enter a name to pin it
Full example:
- 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: 300000The bell in the conversation header saves every change immediately to $DSH_HOME/profiles//data/dsh-ding.json (only the fields you touched; everything else still follows cordis.patch.yml):
Action · Effect Click the bell · Quickly toggle the sound Hover the bell · A volume bar slides out on the left of the bell (in-flow width animation; the other items in the row shift left automatically); releasing the slider previews the sound once Right-click the bell · Notification settings panel: Sound / Toast toggles (both off = no notification when a conversation finishes), Quiet on current (skip when the session you are viewing finishes; other sessions and away-window still remind), While running (progress toast every 5 min after 3 min, toast only), While asked (alert when the agent asks you a question and waits), plus the sound picker (built-in ding / your uploaded files) and upload (mp3/wav/mid/wma/aac/m4a/ogg/flac, stored in data/sounds/); the ⚙ Advanced settings entry at the bottom opens the full parameter editor (notification toggles, titles, timing in ms, volume — saved instantly); the bottom also has Export config / Import config (download/restore JSON settings)
dsh-ding block from cordis.patch.yml$DSH_HOME/profiles/node_modules/dsh-ding/ directory--dsw-specific-menu (a 94%-opaque token) without the backdrop-filter that core DSH menus pair it with, so conversation text behind the panel stayed readable. Both surfaces now apply backdrop-filter: var(--dsw-menu-backdrop-filter) and stack the same colour twice (≈99.6% opaque), so nothing bleeds through even where background blur is unavailabledsh web it still opens the browser (unchanged); with the DeepSeek Harness desktop app it switches to the target conversation inside the app window and focuses it, so no browser pops up and the dsh web authentication required gate is never hit (new POST /dsh-ding/activate and GET /dsh-ding/events event stream so the host can push the session id to connected clients; the host is detected as an Electron runtime vs the dsh web CLI). Three fixes alongside: ① session navigation now calls the core uiWorkspace.openSession — the previously used sessions.open does not exist, so clicking a notification never actually switched conversations (the dsh web ?dingOpen= deep link was affected too); ② the NotifyIcon balloon fallback now uses the same host detection instead of always opening a browser; ③ POST /dsh-ding/activate only accepts loopback requests with application/json, so no web page or LAN peer can CSRF-navigate the local UI. Version note: 1.0.4 / 1.0.5 / 1.0.6 were published on 2026-09-30 and later unpublished; npm permanently forbids reusing a published version number, so this release jumps from 1.0.3 to 1.1.0dsh-ding; content is identical to v1.0.2 and the version aligns with the npm latest tag. Install with npm install dsh-ding or dsh plugin add dsh-dingGET /dsh-ding/audio supports ?file=. Export/import config — new Export config / Import config entries at the bottom of the right-click menu (download/restore JSON settings). Bundled ding.mp3 — the plugin now ships its own ding.mp3; notify.ps1 searches the plugin directory, so it no longer depends on the start directory or home directory containing ding.mp3; Four notification test buttons — the advanced settings page gains four test buttons (completion/running/question/approval) that immediately send a real notification of that type; clicking the toast opens a test result page and records the configuration used for the test; Renamable notification app name — a new "Notification app name" field in advanced settings; leave it empty to follow the WebUI language automatically (zh default: DSH叮当通知, en default: dsh-ding-notifier), or enter a name to pin itapproval/request), the plugin plays the sound and shows an approval notification (title & text customizable, {tool} placeholder supported); clicking the notification jumps to the conversation that requested approval, where you ap