DeepSeek Harness 插件

dsh-sound-notifier

DSH bundle: plays distinct chimes in the Web UI on message received, thinking start, tool call, and turn end.(英文原文)

跳到安装方式

来源信息

GitHub 仓库
Zhengshuji/dsh-sound-notifier
最近更新
2026年8月17日
分类
工具与能力
GitHub stars
0
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-20

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/Zhengshuji/dsh-sound-notifier
插件名:dsh-sound-notifier
作者:Zhengshuji

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器3 个文件
README.md来源说明 · 只读预览

dsh-sound-notifier

Sound alerts for DeepSeek Harness (DSH): the Web UI plays a distinct chime when the agent receives a message, starts thinking, calls a tool, or finishes a turn.

Installed as an official DSH bundle (dsh.bundle + dsh.client), so it loads automatically on every DSH start — no per-session activation required.

Features

MomentEventSound
Message receivedagent/inbox/insertedtwo short pops (660 Hz → 990 Hz)
Thinking startsfirst reasoning-delta in llm/streamrising sweep (392 → 784 Hz, triangle)
Tool invokedtools/pre-executecrisp double tick (233 Hz → 311 Hz, triangle)
Turn endedagent/turn-stoppingmajor-triad arpeggio (C5–E5–G5)
  • Sounds are synthesized with the Web Audio API — no audio assets.
  • Only top-level sessions chime; subagent/workflow activity stays silent.
  • Already-played events are not replayed after a page refresh (sessionStorage).

How it works

The plugin has two halves:

  • Host half (index.js) listens to DSH events, appends them to a bounded queue (256 entries), and serves them over a GET /sound-alerts/events?after=N endpoint registered through the official webServer service.
  • Browser half (client.js) is a standard dsh.client plugin: the client-modules table injects it into window.__DSH_BOOT__, it polls the endpoint every 400 ms, and plays the matching chime.

Requirements

  • DeepSeek Harness with the Web UI (dsh web / dsh --profile web)
  • pnpm (the dsh plugin command forwards to pnpm)

Installation

From the root of your deepseek-harness checkout:

pnpm dsh plugin --profile web add /path/to/dsh-sound-notifier

This links the directory into ~/.dsh/profiles/web, and because package.json declares dsh.bundle, it is appended to the profile's dsh.profile.bundles automatically.

Restart DSH (stop the running pnpm dsh web and start it again) for the plugin to load.

Verify the composed config without restarting:

pnpm dsh --profile web --dump-config   # shows a "# == dsh-sound-notifier" layer

Install directly from GitHub (add the printed package key to the profile's pnpm-workspace.yaml allowBuilds on first try, see the official publishing guide):

pnpm dsh plugin --profile web add github:your-name/dsh-sound-notifier

Uninstall

pnpm dsh plugin --profile web remove dsh-sound-notifier

Customizing sounds

Edit the SOUNDS table in client.js:

OptionMeaning
freqstart frequency (Hz)
endFreqsweep target frequency (Hz); omit for no sweep
durduration (seconds)
typewaveform: sine / triangle / square / sawtooth
gainvolume (0–1)
delayrelative delay (seconds), for sequencing multiple notes

The local link: install reads the file directly — save and restart DSH.

Project structure

dsh-sound-notifier/
├── package.json        # dsh.bundle + dsh.client manifest; exports ./client
├── cordis.patch.yml    # plugin row: { id: sound-alerts, name: dsh-sound-notifier }
├── index.js            # host half: event listeners, queue, polling endpoint
└── client.js           # browser half: dsh.client bundle, polls and plays

Known limitations

  • Polling latency: up to ~400 ms between an event and its chime.
  • Fixed endpoint: /sound-alerts/events is served by the host half's webServer route; without a webserver the events are still recorded but never polled.
  • Top-level sessions only: agent.owner === undefined filtering means a subagent page opened on its own stays silent.
  • Internal LLM calls are skipped: compaction and session-title purposes never trigger the "thinking" chime.
  • Browser autoplay policy: the audio context is created lazily and resume()d on each play.

Contributing

Bug reports and pull requests are welcome. Keep changes focused; update this README when behavior changes.

License

[MIT](LICENSE)