deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
English | 中文
A notification plugin for the dsh web GUI. When a session finishes, hits an error, asks you a question, or needs your permission, you get a heads-up: a sound plays, and when you step away from the tab a system notification keeps you in the loop.
| The settings panel with the Notifications entry in the sidebar and the section content | The sound picker for each kind (the official dropdown) |
|---|---|
![]() |
![]() |
# Install from npm (requires dsh >= 0.1.0-rc.7)
dsh plugin --profile web add @dingyi222666/dsh-session-notification
# Restart dsh web for it to take effect
dsh web
Everything lives in this plugin — no harness (host) changes:
settings.section), exactly like official sections.WEB_SETTINGS_NAMESPACES or any other host-package change. (The node half still reserves the dsh-session-notification namespace host-side through the settings seam; that reservation is inert without exposure.)| Kind | When it fires | Default sound |
|---|---|---|
| Session completed | A turn ends normally (turn/end completed) |
chime |
| Session failed | A turn breaks with an error, or the host reports an agent error | fault |
| Question asked | The agent is waiting for your answer (question/requested) |
pop |
| Permission requested | The agent requests an authorized operation (approval/requested) |
alert |
Each kind can be enabled or disabled and reassigned to any of the four built-in sound effects (or muted). The four sounds are synthesized with Web Audio — no audio files are shipped — and the master volume is adjustable with the official-style slider.
Beyond the four built-in sounds, each kind accepts your own audio file (mp3/ogg/wav, up to 1 MB): pick Custom audio on a kind's row to upload one, and it replaces the built-in for that kind — with a Replace and remove affordance, plus the Custom audio in use tag. Custom files are stored browser-locally (they are device media, not shared preferences).
Browser (system-level) notifications are off by default; turning the switch on asks for the browser's permission first (a user gesture). Once granted, a notification is shown when the event's session is not the one you are reading, or when the tab is in the background. Notifications carry the page's own icon (the favicon the harness serves). A completed session's notification carries its final reply text (the last assistant message). The Test notification button in the section sends one immediately to verify the channel once permission is granted. The session you are reading stays quiet by default — its own events don't interrupt you; flip the Alert for the current session toggle if you want it to alert too.
The plugin registers a Notifications section in the settings panel (Settings ⚙ → Notifications):
Preferences are stored browser-locally (localStorage) under the dsh-session-notification key — no host settings-namespace exposure required — so they persist across sessions and sync across tabs, and never depend on a harness change.
The browser half watches the sessions list snapshot and each session's conversation snapshot — no polling, no new wire channels:
running edge true→false ends a run; the run is classified failed when a new turn-error node or a host agent-error appeared during it, otherwise completed (a failure that a retry recovered reads as completed).question / approval) raises the question / permission kinds, with the question text or the tool name+reason in the notification body.yarn run build — builds the browser bundle (lib/client.js) and the Node half (lib/index.js / lib/invariant.js).src/client/notification-service.ts — the engine (classification) and dispatcher (gating); src/client/settings-store.ts — the settings section bridge; src/client/NotificationsSection.tsx — the section UI; src/client/sounds.ts + src/client/custom-audio.ts — the built-in and custom sounds.yarn test — behavior tests; yarn run typecheck — type gate.dsh web restart; browser-bundle changes need a rebuild (yarn run build) — a --dev server hot-reloads them.None. The plugin is a pure client-side observer over the already-logged session state; nothing here reaches a model request.
None; this package neither assembles nor sends provider requests.
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。