vilicvane
dsh-plugin-web-notify
Browser notifications for the DeepSeek Harness Web GUI.
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 14, 2026
- Updated
- Aug 14, 2026
Introduction
dsh-plugin-web-notify
Browser notifications for the DeepSeek Harness Web GUI.
Shows a browser notification when:
- a conversation turn finishes while you are not watching that session;
- the agent starts waiting for you — an approval request, a plan review, or a question.
Features
- Click to focus and switch — clicking the notification brings the GUI window to the front and switches to the finished/asking session.
- Turn summaries — when a turn completes, the notification first shows a "summarizing…" hint (only when the host summary capability is detected) and is then replaced with a one-sentence summary of what the turn accomplished, generated by a small model (host-side; configurable provider/model).
- Stays until dismissed — notifications use
requireInteractionand stay on screen until you click or dismiss them (set theREQUIRE_INTERACTIONconstant inclient.jstofalsefor the OS default auto-dismiss timing). - Chime — plays a short two-tone sound along with the notification (browsers allow page audio after the page has been interacted with at least once).
- No interruptions — no notification while the page is focused on the finished/asking session; you already see it.
- One toast per session — notifications for the same session replace each other instead of stacking.
- Subagents ignored — subagent sessions do not produce notifications.
- Permission on first click — the notification permission is requested automatically on the first click inside the page; grant it once and you are done.
- Bilingual — notification text follows the browser language (Chinese / English).
Install
Add the plugin to your dsh profile and register it in the Loader.
From GitHub
dsh plugin --profile web add github:vilicvane/dsh-plugin-web-notify
This is equivalent to running pnpm add github:vilicvane/dsh-plugin-web-notify
inside the profile directory.
From npm
Once the package is published to the npm registry:
dsh plugin --profile web add dsh-plugin-web-notify
Then append an insert row to the profile's cordis.patch.yml
($DSH_HOME/profiles/web/cordis.patch.yml):
- insert:
- id: web-notify
name: dsh-plugin-web-notify
config:
provider: deepseek-official
model: deepseek-chat
The config block is optional and defaults to deepseek-official /
deepseek-chat. All settings and their defaults:
| Key | Default | Meaning |
|---|---|---|
provider | deepseek-official | LLM provider route used for summaries. |
model | deepseek-chat | Small/fast model used for summaries. |
maxInputChars | 4000 | Cap on the turn text (user request + assistant reply) sent to the model. |
maxOutputTokens | 150 | Cap on the summary length. |
timeoutMs | 60000 | Summary generation timeout. |
systemPrompt | (built-in) | System prompt for the summarization call. |
Restart dsh web, refresh the page, and click anywhere once to grant the
notification permission.
How it works
index.js(host half) registers/web-notify/summaryand/web-notify/capabilityroutes on the DSH web server. On a summary request it reads the finished turn's user/assistant text on demand from the in-memory session store (ctx.sessions), then streams a call to the configured small model (ctx.llm.stream, with thesession-titlepurpose so the provider disables model thinking and the token budget goes to the summary text) and caches the one-sentence result per session.client.js(client half) is a Cordis client plugin. It injects thesessionsservice and watches the session-list snapshot forrunning → falsetransitions and forpendingInteraction(approval/plan-review/question) arrivals. It probes the capability route at apply (and again after server connection resets), so completion notifications start with a "summarizing…" hint only when the host summary is actually available. The client polls the summary route; the summary replaces the hint (same tag) once ready, and failures degrade back to the plain completion text.
Notes
- Windows may deliver Chrome notifications quietly (notification center only, no banner, no sound). Check Windows Settings → System → Notifications → Google Chrome and enable "Show notification banners" and "Play a sound"; also make sure Focus Assist is off.
- Browsers do not expose a configurable auto-dismiss duration; the operating
system controls it. This plugin uses
requireInteractionso notifications stay visible until clicked or dismissed. - The chime is subject to the browser autoplay policy: it plays only after the page has been interacted with at least once.
- Bringing a window to the front without a user gesture is restricted by browsers, so automatic focusing on show is best-effort; clicking the notification always focuses the window and switches to the session.
- Summaries are generated only when a completion notification actually fires (one small-model call per notified turn), and only the truncated turn text is sent — tool outputs and the rest of the log are never transmitted.
License
MIT