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:

  1. turn end / background task completed
  2. approval request
  3. user question
  4. plan review
  5. goal blocked
  6. background / 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.bundles and dsh.bundle.patch
  • pnpm is 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:

  1. Copy the package and its runtime dependencies to:
$DSH_HOME/profiles/web/node_modules/
  1. Add "dsh-sound" to dsh.profile.bundles in:
$DSH_HOME/profiles/web/package.json
  1. 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:

  • defaultSound becomes completionSound
  • voice/TTS values degrade to event defaults
  • workspaces, debounceMs, global volume, 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 dsh process; 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 BroadcastChannel tie-breaking.
  • During local development, pnpm for the profile uses nodeLinker: hoisted, which copies file: dependencies into node_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