dsh-web-notification
Manifest validSystem-level Web Notification when the model finishes a reply in the DeepSeek Harness web GUI
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

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 thechatnodes. - Display: every notification uses a unique tag (
dsh-reply-done-<sessionId>-<turn>) withrenotify: 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.mjswrapssrc/client/index.jsin thewindow.__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 addforwards its arguments to pnpm inside the profile directory, and because the package declaresdsh.bundle, it automatically appends the package todsh.profile.bundles. If you install with a barepnpm addinstead, add the bundles entry manually.- If installation fails with
ERR_PNPM_TARBALL_INTEGRITY(stale lockfile checksums from other moving-branch dependencies in the profile), runpnpm install --update-checksumsfirst 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
Versions
| Latest version | Published | Size |
|---|---|---|
| 0.1.0 | — | — |
Comments
Loading…
From the same category
by nexu-io
🎨 Best DeepSeek Harness Design Plugin. The open-source Claude Design alternative. 🖥️ Local-first desktop app. 🖼️ Your coding agent becomes the design engine: prototypes, landing pages, dashboards,
★ 98.6k
Apache-2.0
TypeScript
Sep 29, 2026
by Molunerfinn
:rocket: The Ultimate Image Uploader for Efficient Creators. Supports Obsidian, Typora, VS Code etc. and 60+ image hosting services (S3, GitHub, Cloudflare R2, Imgur, Aliyun OSS...). Paste, upload, d
★ 27.3k
MIT
TypeScript
Sep 24, 2026
by zhu1090093659
DeepSeek Harness (DSH) Web Plugin Aggregation Ecosystem · Everything is a plugin, distributed via the Creative Workshop
★ 8.1k
Apache-2.0
TypeScript
Sep 29, 2026
dsh plugin --profile web add dsh-webby YaoApp
✨ All your agents and workspaces in one place, on every device you own. Track tasks on a board, accessible from desktop, mobile, browser, or API. Self-hosted.
★ 8k
Go
Sep 28, 2026
by omdsh-dev
开放的侧边栏底座,支持三方拓展注册新侧边栏页面。内置文件渲染编辑/终端/侧边对话/Git/子代理页面 | Open sidebar foundation, supports third-party extensions to register new sidebar pages. Built-in file rendering/editing, terminal, side chat, Git,
★ 3.9k
↓ 49.8k/wk
MIT
TypeScript
Sep 28, 2026
dsh plugin --profile web add dsh-better-sidebarby ccch1mneyyy
DSH 官方公众号收录的 TUI 补位插件:Claude Code 风,鲸鱼顶栏/实时状态/流式思考/双击 Esc 回滚/上下文进度+TPS。npm 一键装。 DSH official WeChat featured TUI plugin — Claude Code style: whale bar, live status, streaming thoughts, double-Esc rol
★ 3.8k
↓ 10.1k/wk
MIT
TypeScript
Sep 29, 2026
dsh plugin --profile terminal add @deepseek-harness-tui/dsh-tui