DeepSeek Harness plugin

dsh-web-notification

System-level Web Notification when the model finishes a reply in the DeepSeek Harness web GUI

Jump to install

Source facts

Repository
2h0n/dsh-web-notification
Latest update
Aug 14, 2026
Category
Notifications & Integrations
GitHub stars
2
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/2h0n/dsh-web-notification
Plugin: dsh-web-notification
Author: 2h0n

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer4 files
README.mdSource · read only
README language

dsh-web-notification

English | 简体中文

Show a system-level Web Notification when the model finishes a reply in the DeepSeek Harness Web UI — whether or not the page is focused.

Features

  • Fires a system notification on every completed reply: title 🐳 Model Replied, body = the user message of this turn

- Falls back to the session title when no user message is available

  • Requests notification permission automatically at boot and on the first user gesture (Safari requires a gesture)
  • Deduplicates per turn, so a reply never notifies twice
  • No UI injection: mounts no visible elements

Screenshots

![notification example](screenshot.png)

How It Works

  • Detection: the client watches every open session's snapshot turnEnds (Map<turn, endSeq>); a turn count increase means one reply completed — multi-session replies each fire their own notification. The triggering user message text is read from the chat nodes.
  • Display: every notification uses a unique tag (dsh-reply-done-<sessionId>-<turn>) with renotify: true. Same-tag notifications have replace semantics — while the previous one is still visible, the replacement does not re-show a banner on macOS/Chrome.
  • Packaging: build.mjs wraps src/client/index.js in the window.__ModuleLoader__.load({ id, factory }) handshake, which the browser module table executes.

---

Installation (Users)

Prerequisites: dsh installed (npx @deepseek-ai/dsh) and the web profile initialized.

# 1. Install the bundle
npx @deepseek-ai/dsh plugin --profile web add https://github.com/2h0n/dsh-web-notification/archive/refs/tags/v0.1.0.tar.gz

# 2. Restart
npx @deepseek-ai/dsh web

Verify: no dsh-web-notification errors in the browser console; send two messages in the same session and confirm each reply fires a notification; restart once more and confirm the plugin is still there.

> - npx @deepseek-ai/dsh plugin --profile web add forwards its arguments to pnpm inside the profile directory, and because the package declares dsh.bundle, it automatically appends the package to dsh.profile.bundles. If you install with a bare pnpm add instead, add the bundles entry manually. > - If installation fails with ERR_PNPM_TARBALL_INTEGRITY (stale lockfile checksums from other moving-branch dependencies in the profile), run pnpm install --update-checksums first and retry.

Development (Developers)

Requirements

  • Node.js 22.19+ or 24+ (matching the DeepSeek Harness supported range; the build is dependency-free — no npm packages to install)

Directory Structure

dsh-web-notification/
├── package.json          # Manifest: exports + dsh.bundle.patch + dsh.client
├── cordis.patch.yml      # Patch entry (plugin rows), referenced by dsh.bundle.patch
├── dsh.plugin.json       # Plugin manifest
├── build.mjs             # Build script (zero dependencies)
├── src/
│   ├── index.js          # Plugin entry (Node side): no-op (no host logic)
│   └── client/index.js   # Client plugin (browser side): all logic (the only file you edit)
└── lib/                  # Build output (do not edit; generated by build.mjs)
    ├── index.js
    └── client.js         # Browser bundle in __ModuleLoader__ handshake format

Local Development

The official way: install the local checkout into the profile (npx @deepseek-ai/dsh plugin add links the directory and registers the bundle automatically):

# 1. Build
node build.mjs

# 2. Install the local checkout
npx @deepseek-ai/dsh plugin --profile web add "$PWD"

# 3. Restart
npx @deepseek-ai/dsh web

If pnpm is not available, link it manually (equivalent result):

ln -s "$PWD" ~/.dsh/profiles/web/node_modules/dsh-web-notification
# And edit ~/.dsh/profiles/web/package.json by hand:
#   dependencies:        "dsh-web-notification": "file:$PWD"
#   dsh.profile.bundles: append "dsh-web-notification"

Iteration loop after editing code (symlinked, no reinstall needed):

node build.mjs            # regenerate lib/
npx @deepseek-ai/dsh web  # restart (file: symlink — no reinstall needed)

Removing

The official way (removes the dependency and its bundle layer together):

npx @deepseek-ai/dsh plugin --profile web remove dsh-web-notification

For a manually linked install, undo the steps:

rm ~/.dsh/profiles/web/node_modules/dsh-web-notification
# And edit ~/.dsh/profiles/web/package.json:
#   remove "dsh-web-notification" from dependencies and dsh.profile.bundles

Restart npx @deepseek-ai/dsh web afterwards.

License

MIT