DSH plugin: Plays a notification sound when a conversation is complete + Windows notifications; click the notification to go directly to the conversation (the desktop version navigates within the app); the WebUI bell button adjusts the toggle, volume, and sound effect
The plugin will be installed here. Keep web if you are unsure.
npx -y @deepseek-ai/dsh plugin --profile web add dsh-ding@1.1.1
Compatibility and provenance
Ding is published as dsh-ding and currently resolves to version 1.1.1. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.
DSH compatibility
*
Runtime surfaces
web
Release source
npm
Registry updated
Versions
1.1.2stable
1.1.1stable
1.1.0stable
Show 5 more versionsCollapse versions
1.0.4stable
1.0.5stable
1.0.6stable
1.0.3stable
1.0.2stable
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.
🔔 Sound alert: plays 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 missing
🪟 Native Windows notification: shows a system toast (including the session title and the DSH whale logo). On first use the plugin registers an AppUserModelID (Start Menu shortcut) so the toast is actually displayed — toasts with an unregistered AUMID are silently dropped by Windows
🎚️ Adjustable volume: the volume option (0.0 ~ 1.0) controls the alert loudness; config changes apply immediately
🔔 Web bell button: a bell in the conversation header — click toggles the sound, hover slides a volume bar out on the left of the bell (in-flow width animation; the other items in the row shift left), right-click opens the notification settings panel: sound/toast toggles (both off = no notification at all), sound picker and upload; changes save immediately, no config editing
🖱️ Click the notification to jump to the conversation: clicking the Windows toast/balloon lands on the finished conversation (shortcut activation + dsh-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 hit
🔕 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
⏱ Long-task progress reminder: first toast after 3 minutes, then every 5 minutes (toast only, no sound), with the elapsed time in the text
❓ Question reminder: alerts immediately when the agent asks you via ask_user_question and waits (text differs from completion)
🛡️ Tool approval reminder: alerts immediately when a tool call waits for your approval (approval/request); clicking the notification jumps to that conversation, where you approve or reject in the WebUI
🛠 Advanced settings window: the "⚙ Advanced settings" entry in the right-click menu opens an in-page settings window with every parameter (notification toggles, titles, timing in ms, volume, custom notification templates). Templates support placeholders: session title, conversation prefix, elapsed time, question text, tool name (approval template)
dsh plugin --profile web add github:CAOGGL/dsh-ding
Requires 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)
Clone (or download) this repo to: $DSH_HOME/profiles/node_modules/dsh-ding/
Append to your profile's user patch file $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: true
It takes effect immediately on save (the patch file is hot-watched). Changes to the plugin code itself require a service restart.
Verification: finish a conversation and you should hear the sound and see the notification. You can also test the notification script standalone:
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)
The bell in the conversation header saves every change immediately to $DSH_HOME/profiles/<name>/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)
Uninstall
Remove the whole dsh-ding block from cordis.patch.yml
Delete the $DSH_HOME/profiles/node_modules/dsh-ding/ directory
Changelog
v1.1.1 (2026-10-24): Fixed the see-through settings panel — the right-click panel and the advanced-settings modal only used --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 unavailable
v1.1.0 (2026-10-24): Desktop-aware notification click — the click handler now detects the host: with dsh 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.0
v1.0.3 (2026-10-24): npm release — the plugin is now published on the npm registry as dsh-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-ding
v1.0.2 (2026-08-21): Per-sound preview — every sound item in the right-click menu now has a ▶ play button to preview that sound without switching; GET /dsh-ding/audio supports ?file=<id>. Export/import config — new entries at the bottom of the right-click menu (download/restore JSON settings). — the plugin now ships its own ; searches the plugin directory, so it no longer depends on the start directory or home directory containing ding.mp3; — 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; — 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 it
FAQ
No sound? Check that the file pointed to by soundFile exists; if it doesn't, the script falls back to the system beep. If both are silent, check your system volume/mute settings.
No notification? On first use the plugin registers the dsh-ding-notifier Start Menu shortcut (AppUserModelID registration — required for Windows to display toasts). If notifications still don't show, check Settings → System → Notifications to make sure dsh-ding-notifier is enabled. If the WinRT toast fails, the script falls back to a NotifyIcon balloon automatically.
Want a different sound? Right-click the bell in the web UI to pick/upload one; or drop in a new audio file and point soundFile to it (takes effect immediately).
💾 Export/import config: at the bottom of the right-click menu you can export config (download a JSON file) or import config (restore all settings from JSON)
▶ Per-sound preview: every sound item in the right-click menu has a play button to preview that sound without switching
🧪 Notification test buttons: the advanced settings page provides 4 test buttons (completion / running / question / approval) that immediately send a real notification of that type; clicking the toast opens a test result page
🏷️ Renamable notification app name: advanced settings lets you rename the notification app name; leave it empty to follow the WebUI language automatically (zh: DSH叮当通知, en: dsh-ding-notifier)
📦 Bundled ding.mp3: the alert sound ships with the plugin package, so it no longer depends on the start directory or home directory containing ding.mp3
🌐 Bilingual: notification text & title and panel copy follow the WebUI language (zh/en)
🎯 Precise timing: completion is judged by the turn actually ending (phase filter excludes mid-reply pauses); completion text includes the elapsed time
🧹 No false positives: ignores subagent completion events (they are just intermediate steps of the main conversation)
⚡ Debounced & throttled: 200ms debounce and 3s global rate limit by default
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
Export config / Import config
Bundled ding.mp3
ding.mp3
notify.ps1
Four notification test buttons
Renamable notification app name
v1.0.1 (2026-08-17): Tool approval reminder — when a tool call waits for your approval (approval/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 approve or reject in the WebUI. New config keys: approvalNotify / approvalTitle / approvalTemplate (editable in Advanced settings). Async sound — the alert sound now plays in parallel with the notification instead of blocking it until the sound file finishes (fixes notification lag with long tail sounds)
v1.0.0 (2026-08-15, updated 08-16): Complete reminder system — ① Quiet on current (default on): 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 (the browser reports foreground state and the current session via the new POST /dsh-ding/presence); ② Completion text with elapsed time: the notification now shows "took Xm Ys" (the host tracks when the task started); ③ Long-task progress reminder (default on): first toast after 3 minutes, then every 5 minutes — toast only, no sound (respects "no noise before the task finishes"), with the elapsed time in the text; ④ Click the notification to jump to the conversation: opens the browser and lands directly on the finished session (shortcut activation + dsh-ding:// protocol + ?dingOpen= deep link, new toast-activate.ps1); ⑤ Question reminder (default on): alerts immediately when the agent asks you via ask_user_question and waits; ⑥ Advanced settings window: the "⚙ Advanced settings" entry opens an in-page modal window (overlay + centered panel) with every parameter editable at runtime (notification toggles, titles, timing in ms, volume, subagent completion); ⑦ Custom notification templates: completion and question text are customizable with {title}/{prefix}/{elapsed}/{question} placeholders; ⑧ Bilingual notifications: text and title follow the WebUI language (DSH 完成/DSH Done, DSH 提问/DSH Question, DSH 运行中/DSH Running), built-in sound name follows too; ⑨ Completion detection fix: completion is judged by the turn actually ending plus phase filtering — fixes mid-reply false notifications and missed completion notifications. (2026-08-16 update): ⑩ Dedicated progress-reminder title — the progress toast title changed from "DSH 完成" to "DSH 运行中" and a new runningTitle config key plus an advanced-settings "Running title" input were added; ⑪ Progress-reminder template — new runningTemplate config key plus an advanced-settings "Progress template" editor ({title}/{prefix}/{elapsed}); ⑫ Localized title inputs — when a title input still holds its default value, the advanced settings show the localized default (DSH 完成/DSH 运行中/DSH 提问 in Chinese, DSH Done/DSH Running/DSH Question in English) and switch with the WebUI language. New config keys: quietOnViewing / runningNotify / runningFirstAfterMs / runningIntervalMs / questionNotify / questionTitle / runningTitle / doneTemplate / runningTemplate / questionTemplate, all editable at runtime in the advanced settings window
v0.4.3 (2026-08-14): Slider knob is now black in light mode / white in dark mode (follows the WebUI theme live); the volume-bar title row was removed; the menu copy now follows the WebUI language setting (ctx.locale, switches instantly, no longer tied to the page lang)
v0.4.2 (2026-08-14): Slider and right-click menu restyled with WebUI design tokens (--dsw-alias-*) — custom slider: 4px rounded track, brand-colored fill, themed knob (grows on hover/press); the menu surface/border/shadow/text/hover/active colors now match the WebUI popover style (--dsw-specific-menu / --dsw-shadow-lv3) and adapt to light/dark themes automatically
v0.4.1 (2026-08-14): Bell interaction redesign — the volume bar moved to the left of the bell (in-flow width animation, row items shift left); the right-click panel gained Sound/Toast toggles (both off = completely silent); popups got transition animations; fixed the hover menu closing too early
v0.4.0 (2026-08-14): Web bell button added — click the bell in the conversation header to toggle the sound, hover for a volume slider (release to preview), right-click to pick/upload sounds; new GET/POST /dsh-ding/settings, /dsh-ding/test, /dsh-ding/sounds HTTP APIs; settings persist to data/dsh-ding.json
v0.3.1 (2026-08-14): Toast icon switched to the DSH whale logo; README install methods updated, changelog added
v0.3.0 (2026-08-14): Fixed native notifications not showing — auto-registers an AppUserModelID (toasts with an unregistered AUMID are silently dropped by Windows)
v0.2.0 (2026-08-14): Bundled, installable with dsh plugin add github:CAOGGL/dsh-ding
v0.1.0 (2026-08-14): Initial release — sound + Windows notification when a conversation finishes; supports soundFile / volume / debounce & throttle / skip-subagents