Preface¶
The DSH (DeepSeek Harness) Web UI plugin can extend interface behavior. dsh-sound addresses notification issues: when a task ends, requires approval, needs an answer, a plan review is needed, a goal is blocked, or a background task fails, it uses sound to notify the developer instead of relying solely on interface state changes.
What is this¶
dsh-sound is a DeepSeek Harness (DSH) plugin for the Web UI, maintained by AI-Galaxy-GPU and licensed under MIT. Its function is to play customizable sounds when a task ends or requires human attention, so developers don’t have to keep staring at the Web UI window.
Core Features¶
Six independent event types¶
dsh-sound covers six types of events:
turn end / background task completedapproval requestuser questionplan reviewgoal blockedbackground / loop failure
Each type of event has an independent sound and independent volume, with a volume range of 0–100%.
Sound sources¶
For each event type, you can choose:
- Built-in synthesized sounds:
Ding/Chime/Bell/Complete/Success - Mute
- Local files:
MP3/WAV, etc.
Local audio files are stored in IndexedDB under the database name dsh-sound-audio, not consuming the localStorage quota.
Settings panel¶
To open:
Settings → Sound Notification
The settings panel contains:
- Global toggle
- Six event rows
- Volume slider
- Sound selection
- Local file selection/replacement
- Configuration export/import
Multi-tab and event fallback¶
When multiple tabs are open, the same event will only ring once, using BroadcastChannel for tie-breaking. When the event stream is unavailable or frame unpacking fails, the plugin falls back to snapshot diffing.
Installation and Enabling¶
Installation conditions¶
Before installation, the following must be met:
- DSH version supports bundle-plugin, including
dsh.profile.bundlesanddsh.bundle.patch pnpmis in PATH- Node version meets
>=20
Regarding dependencies, dependencies includes @deepseek-ai/schemastery, and peerDependencies includes @deepseek-ai/cordis.
Web profile installation¶
Execute:
dsh plugin --profile web add dsh-sound
Then open Settings → Sound Notification, select event sounds, volume, or local files.
Other profiles¶
Other profiles use the same method:
dsh plugin --profile <name> add dsh-sound
Manual installation without pnpm¶
If pnpm is not available, you can install manually:
- Copy the package and its runtime dependencies to:
$DSH_HOME/profiles/web/node_modules/
- Add
"dsh-sound"todsh.profile.bundlesin:
$DSH_HOME/profiles/web/package.json
- Restart:
dsh web
Typical usage¶
Configuring each event type¶
In the settings panel, select a sound, adjust the volume, or choose a local file for each event.
Export and import configuration¶
Use the settings panel to export the complete configuration as JSON, or restore configuration from a JSON file. This allows migrating configurations between browsers or machines.
Local development verification¶
You can run:
npm test
npm run check
npm test runs the tests; npm run check performs syntax checking.
Configuration and migration¶
Browser-side configuration is saved in localStorage with the key:
dsh-sound:config
Defaults are added after cleaning on every read.
Configuration items include:
enabled
quietCurrent
plus six event sound fields, six event volume fields, and:
localFiles
The 0.2.0 migration automatically upgrades old configuration:
defaultSoundbecomescompletionSound- voice/TTS values degrade to event defaults
workspaces,debounceMs, globalvolume, and voice settings will be removed
In rc.6, the settings API allowlist does not expose third-party namespaces to the browser, so the current client does not depend on settingsScope.
Use cases and notes¶
Suitable for developers who run tasks, approvals, questions, etc., in the DSH Web UI and wish to use sound to reduce screen-watching costs.
Notes:
- The plugin runs with the permissions of the current
dshprocess; you should check the source code and license before installing. - Built-in synthesized sounds do not require audio files; local files are written to IndexedDB.
- The multi-tab scenario relies on
BroadcastChanneltie-breaking. - During local development, pnpm for the profile uses
nodeLinker: hoisted, which copiesfile:dependencies intonode_modules; after modifying the local checkout, you need to re-run update or replace the copied directory with a symlink.
Conclusion¶
dsh-sound maps completion, approval, question, plan review, goal blocked, and failure events in the DSH Web UI into configurable sound notifications, making it a lightweight plugin suitable for maintaining attention during local development.
- GitHub: https://github.com/AI-Galaxy-GPU/dsh-sound
- Community Directory: Search for
dsh-sound