dsh
OpenPetsHQ/openpets将 DeepSeek Harness 的生命周期状态、错误与审批请求,桥接到本地运行的 OpenPets 桌面伙伴。
DeepSeek Harness 音效提示:智能体需要确认、回合完成、后台任务结束或失败时播放短提示音,内置 5 套音色、逐事件开关与音量、免打扰规则,配置存放在宿主设置文档。
English | 中文
Audio cues for DeepSeek Harness: a short sound when an agent needs your confirmation, finishes a turn, finishes a background job, or fails — so you do not have to watch the window.
Sounds are synthesized at runtime with Web Audio (the package ships no audio files), and the configuration lives in the host settings document, so it survives a reload, a different browser, and a restart of DSH.
Being listed is not an endorsement. Plugins are third-party code; install only what you trust. This plugin makes no network requests, touches no file outside the settings document, and never logs your message content or file paths.
Five kinds of event, each with its own switch and its own volume:
| Event | When it sounds | Default |
|---|---|---|
| Approval needed | An agent asks to run a privileged tool | on, 80% |
| Question asked | An agent asks you a question and waits | on, 80% |
| Turn finished | The current conversation finishes a turn | on, 70% |
| Background job finished | Another session (background job or subagent) stops | on, 70% |
| Task failed | A session reports an error that needs attention | on, 90% |
| Privilege escalation | An approval is classified as a sandbox escalation | off (it would double up with Approval needed) |
Five built-in sound packs — the same event keeps the same shape, only the timbre changes:
marimba (wooden, the default), glass (bright), pulse (electronic), arcade (8-bit),
minimal (a soft tap).
Do not disturb:
dsh plugin --profile desktop add github:tangjx2007/dsh-audio-cue
Replace desktop with your profile name (usually web when you run dsh web). Reload the page
afterwards; the host settings section needs one restart of dsh.
The build output is committed (
lib/), so installing from git runs no build script.
Settings → Plugins → Plugin configuration → Audio cues: master switch, sound pack, master volume, per-event switch/volume/preview, do-not-disturb rules, restore defaults. Bilingual, following the interface language.
To answer "why was there no sound?", type this in a conversation:
/audio-cue
It prints a table of every event and whether it would sound right now. /audio-cue test plays the
approval cue immediately, which is the quickest way to confirm the audio path itself works.
| dsh-audio-cue | Completion-chime plugins (e.g. dsh-turn-chime, dsh-sound-cue) | |
|---|---|---|
| Events covered | 5 kinds (including background jobs, failures, escalation) | usually 1–2 |
| Timbre | 5 packs, per-event preview | one or two fixed sounds |
| Configuration granularity | per-event switch and volume, plus a master volume | master switch and volume |
| Where the configuration lives | the host settings document ($DSH_HOME/settings.yaml) | browser storage |
| Audio assets | none (synthesized) | depends on the implementation |
dsh-sandbox, which always writes the reason as escalate sandbox to <mode>: <justification> — and
the plugin matches that format, so a real escalation is not missed. Anything that does not match is
reported as Approval needed: a mislabelled cue is preferable to a dropped event. The escalation
cue is off by default.| Input | Effect |
|---|---|
/audio-cue | Print the current configuration and the suppression reason per event |
/audio-cue test | Force one approval cue, bypassing every suppression rule |
data/plugins/tangjx2007__dsh-audio-cue.yml (submitted to the awesome-dsh-plugin repository; a draft ships here)notifyscreenshots.json in the repository root, 1–8 paths relative to that filenpm run build # write lib/ (a dependency-free bundler)
npm run test # node --test
npm run verify # build freshness plus the full assertion set
Specification and design:
docs/spec/audio-cue.mddocs/spec/audio-cue-design.mddocs/tasks/src/ is layered: config, dnd, classify, events and cue-spec are pure logic with no browser
dependency (unit-testable straight from Node), while synth, player, settings-ui and client are
the glue that needs Web Audio, the DOM, or the Cordis context.