Bundle
@yangzhe1991/dsh-task-notify
DSH Web plugin: completion chime and tab-title alert when agent turns or background jobs finish
- Source
- yangzhe1991
- stars
- 3 stars
- License
- MIT
- Updated
- Updated 15 hours ago
Readme
# dsh-task-notify [English](README.md) | [中文](README.zh.md) [](https://www.npmjs.com/package/@yangzhe1991/dsh-task-notify) [](https://www.npmjs.com/package/@yangzhe1991/dsh-task-notify) [](LICENSE) [](https://github.com/topics/dsh-plugin) A DSH (DeepSeek Harness) browser plugin that tells you when your agent finishes work — a completion chime, and a tab-title alert while you are on another tab. --- ## Compatibility - **dsh ≥ 0.1.2-alpha.4** — supported since **0.1.1**. Turn timings now come from the chat snapshot's legacy layer via the session-standard `useChat` hook, and completed-turn failures are detected from `turn-error` nodes; the legacy paths are retained for older dsh. Verified against **dsh 0.1.3-alpha.2** since **0.1.2**. - **dsh 0.1.0-rc.x** — still supported via the legacy snapshot paths. ## Install (30 seconds) Prereqs: the `dsh` CLI ([DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)). ```sh dsh plugin --profile web add @yangzhe1991/dsh-task-notify ``` Then restart the Web GUI and refresh the browser tab. That's it — the package ships prebuilt artifacts, so nothing compiles on your machine and no allowlist is needed. `dsh plugin` auto-appends the bundle to your profile's `dsh.profile.bundles`. > **Other install methods** (usually not needed): > | Method | Command | Builds on install | Notes | > |---|---|---|---| > | npm registry **(recommended)** | `dsh plugin --profile web add @yangzhe1991/dsh-task-notify` | No | Prebuilt, quickest | > | tarball | `dsh plugin --profile web add ./dsh-task-notify-0.1.0.tgz` | No | Offline-friendly | > | git | `dsh plugin --profile web add github:yangzhe1991/dsh-task-notify` | Yes (via `prepare`) | Requires one-time `allowBuilds` in `pnpm-workspace.yaml` | ## What it does - 🎵 **Completion chime** — a synthesized two-tone chime (no audio files) when: - an **agent turn finishes** in your current session (normal reply, error, or abort) — this covers ordinary conversations; - a **background job settles** in any session (`completed` / `failed` / `killed` — background bash/pwsh, subagents, workflows, …). - Success: ascending *do → mi*. Failure / kill: descending *mi → do*. - 🔔 **Tab-title alert** — while the page is not the active tab (`document.hidden`), a finished task changes the title to `🔔 N 个任务完成 — <original title>`; switching back to the tab restores it. - ✅ **No false positives** — switching sessions, loading history, or refreshing the page never re-alerts for old turns. Only work that actually finishes while you are watching the current session triggers. ## First-run note: click the page once Browsers block audio until the user has interacted with the page (autoplay policy). **Click or press a key anywhere in the page once** — chimes are unlocked from then on. The tab-title alert is never affected. ## FAQ **Q: I finished a task but heard nothing.** A: You likely haven't interacted with the page yet (see above), or the task was a plain foreground tool call — those don't trigger; only agent turns and background jobs do. **Q: It beeped when I switched to another session.** A: That was a bug in early versions, fixed since — old turns in the newly opened session were mistaken for fresh completions. Update the plugin (`dsh plugin --profile web update @yangzhe1991/dsh-task-notify`) and refresh the page; only turns that finish while you're in the session will alert now. **Q: Which tasks exactly trigger the chime?** A: (1) The agent completing a turn in your current session — every round of work, whether it answered, errored, or was aborted; (2) any background job settling in any session. **Q: Can I change the sound or turn things off?** A: See Customization below. **Q: What does the plugin actually install?** A: A profile bundle: a config layer (`cordis.patch.yml`) plus a browser-half bundle (`lib/client.js`) that the DSH web app discovers automatically — no manual configuration, no UI added. ## Customization Tunables live at the top of `src/client/index.tsx`; edit and re-run `npm run build` (or send a PR 🙂). | Constant | Default | Meaning | |---|---|---| | `SOUND_ENABLED` | `true` | Play the chime on completion | | `TITLE_ENABLED` | `true` | Change the tab title while hidden | | `ALERT_PREFIX` | `'🔔'` | Prefix of the alert title | ## Development ```sh git clone git@github.com:yangzhe1991/dsh-task-notify.git cd dsh-task-notify npm install npm run build # produces lib/index.js (node half) + lib/client.js (browser half) npx tsc --noEmit # type-check ``` ``` ├── package.json # dsh.bundle (profile config layer) + dsh.client (browser half) declarations ├── cordis.patch.yml # plugin-row config layer ├── build.mjs # esbuild build: node half + browser half ├── src/ │ ├── index.ts # node half (empty apply placeholder) │ └── client/index.tsx # browser half: turn/job listeners, chime, title alert └── lib/ # build output (gitignored) ``` ## Uninstall ```sh dsh plugin --profile web remove @yangzhe1991/dsh-task-notify ``` ## License MIT
Install
dsh plugin --profile web add github:yangzhe1991/dsh-task-notify
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install yangzhe1991-dsh-task-notify from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.