{"_id":"@dsh-next/dsh-next-notifier","_rev":"2-c234e869a0a6d14fce420b9bf01e4482","name":"@dsh-next/dsh-next-notifier","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.1":{"name":"@dsh-next/dsh-next-notifier","version":"0.1.1","author":"Rok Grabnar <sitegroove>","license":"MIT","_id":"@dsh-next/dsh-next-notifier@0.1.1","maintainers":[{"name":"sitegroove","email":"grabnarrok@gmail.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"},"engines":{"dsh":">=0.1.1-rc.1"}},"dist":{"shasum":"399076059d75e11a64f69691206b4baeeaa83728","tarball":"https://registry.npmjs.org/@dsh-next/dsh-next-notifier/-/dsh-next-notifier-0.1.1.tgz","fileCount":9,"integrity":"sha512-XJqqWSvL7C52IeAUtbi/wZpOzt5APjP8kXliqb3VkEE2aIfiTW1UjGglgDNZpde1BQV/BU5uu9NkQiur849kzQ==","signatures":[{"sig":"MEYCIQDBuseelsznmT4YvtAiwGzSLOOqCP8Tsw+YV057RxjGvgIhAIl4VzFIJLwGxNSSCgeL3XevJN5WZrM3uS/W8xDEei4k","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139817},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./src/*":"./src/*","./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && tsdown","watch":"tsdown --watch","typecheck":"tsc --noEmit"},"_npmUser":{"name":"sitegroove","email":"grabnarrok@gmail.com"},"description":"DeepSeek Harness plugin: browser notifications and sound alerts when the agent finishes, needs approval, asks a question, or a goal completes.","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"jsdom":"29.1.1","react":"^18.3.1","tsdown":"^0.22.2","vitest":"^4.1.8","react-dom":"^18.3.1","typescript":"~5.7.2","@types/node":"^22.10.0","@types/react":"~18.3.1","@types/react-dom":"^18.3.5","@deepseek-ai/cordis":"^4.0.1","vite-tsconfig-paths":"^6.1.1","@deepseek-ai/dsh-goal":"^0.1.1-rc.2","@deepseek-ai/dsh-agent":"^0.1.1-rc.2","@deepseek-ai/dsh-tools":"^0.1.1-rc.2","@deepseek-ai/dsh-session":"^0.1.1-rc.2","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-settings":"^0.1.1-rc.2","@deepseek-ai/dsh-subagent":"^0.1.1-rc.2","@deepseek-ai/dsh-subprocess":"^0.1.1-rc.2","@deepseek-ai/dsh-client-locale":"0.1.1-rc.2","@deepseek-ai/dsh-user-approval":"^0.1.1-rc.2","@deepseek-ai/dsh-client-runtime":"^0.1.1-rc.2","@deepseek-ai/dsh-client-ui-slots":"^0.1.1-rc.2","@deepseek-ai/dsh-client-ui-settings-plugins":"^0.1.1-rc.2"},"peerDependencies":{"react":"^18.2.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-next-notifier_0.1.1_1788424107895_0.575526815476394","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@dsh-next/dsh-next-notifier","description":"DeepSeek Harness plugin: browser notifications and sound alerts when the agent finishes, needs approval, asks a question, or a goal completes.","version":"0.2.0","type":"module","main":"lib/index.js","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./src/*":"./src/*","./package.json":"./package.json"},"dsh":{"engines":{"dsh":">=0.1.1-rc.1"},"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime"],"platform":"web"}},"peerDependencies":{"react":"^18.2.0"},"devDependencies":{"@deepseek-ai/cordis":"^4.0.2","@deepseek-ai/dsh-client-locale":"^0.1.2-rc.1","@deepseek-ai/dsh-agent":"^0.1.2-rc.1","@deepseek-ai/dsh-client-runtime":"^0.1.1-rc.2","@deepseek-ai/dsh-client-ui-primitives":"^0.1.2-rc.1","@deepseek-ai/dsh-client-ui-slots":"^0.1.2-rc.1","@deepseek-ai/dsh-client-ui-settings-plugins":"^0.1.2-rc.1","@deepseek-ai/dsh-goal":"^0.1.2-rc.1","@deepseek-ai/dsh-session":"^0.1.2-rc.1","@deepseek-ai/dsh-settings":"^0.1.2-rc.1","@deepseek-ai/dsh-subagent":"^0.1.2-rc.1","@deepseek-ai/dsh-subprocess":"^0.1.2-rc.1","@deepseek-ai/dsh-tools":"^0.1.2-rc.1","@deepseek-ai/dsh-user-approval":"^0.1.2-rc.1","@deepseek-ai/schemastery":"^3.18.2","@types/node":"^22.10.0","@types/react":"~18.3.1","@types/react-dom":"^18.3.5","jsdom":"29.1.1","react":"^18.3.1","react-dom":"^18.3.1","tsdown":"^0.22.2","typescript":"~5.7.2","vite-tsconfig-paths":"^6.1.1","vitest":"^4.1.8"},"license":"MIT","author":"Rok Grabnar <sitegroove>","scripts":{"build":"tsc -p tsconfig.build.json && tsdown","watch":"tsdown --watch","test":"vitest run","typecheck":"tsc --noEmit"},"_nodeVersion":"22.23.2","_id":"@dsh-next/dsh-next-notifier@0.2.0","dist":{"integrity":"sha512-o1PcR1KT8fxmbpR4lafs+AsrtkTErtsGeHMNScix+yEZJjxKUzaZ3nlDe+U3A7iawM26lWOYwvEICx89gNfGdg==","shasum":"c7f021e4ba1ea04f10900fc84d9cd8042c5ce18c","tarball":"https://registry.npmjs.org/@dsh-next/dsh-next-notifier/-/dsh-next-notifier-0.2.0.tgz","fileCount":9,"unpackedSize":169539,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICehsmm4SVd97pnDVPt9cXn8FnQE9/qB8/x7Vp7r/PFxAiEAzlblZnlNAzpaU7Yf3TDsf+7F8xoE7JRAnZfatu1CfvM="}]},"_npmUser":{"name":"sitegroove","email":"grabnarrok@gmail.com"},"directories":{},"maintainers":[{"name":"sitegroove","email":"grabnarrok@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-next-notifier_0.2.0_1788518128903_0.7607669280587079"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-03T08:28:27.522Z","modified":"2026-09-04T10:35:29.207Z","0.1.1":"2026-09-03T08:28:28.037Z","0.2.0":"2026-09-04T10:35:29.048Z"},"author":"Rok Grabnar <sitegroove>","license":"MIT","description":"DeepSeek Harness plugin: browser notifications and sound alerts when the agent finishes, needs approval, asks a question, or a goal completes.","maintainers":[{"name":"sitegroove","email":"grabnarrok@gmail.com"}],"readme":"# dsh-next-notifier\n\nEnglish | [中文](README.zh.md)\n\nA DeepSeek Harness plugin that alerts you when the agent finishes its turn,\nneeds your approval, or asks you a question: an **in-page toast** while you are\nlooking at the page and a **browser (web) notification** when the window is\nbackgrounded or minimized, plus a configuration card in **Settings → Plugins**\nwith a curated sound library.\n\n## Triggers\n\n| Trigger | Notification |\n| --- | --- |\n| Agent finishes its turn | \"Agent finished its turn.\" |\n| Agent asks for an approval | \"Approval needed — Waiting for your approval: `<tool>`\" |\n| Agent calls `ask_user_question` | \"Question — The agent asked you a question…\" |\n| Subagent finishes (opt-in) | \"A subagent finished its turn.\" |\n| Session goal completes | \"Goal completed — The session goal completed.\" |\n| Session goal gets blocked | \"Goal blocked — The session goal was blocked: `<reason>`\" |\n\n## Configuration UI\n\nThe card in Settings → Plugins offers:\n\n- **Enable notifications** — master switch for everything.\n- **Mute while viewing the session** — default on: stays quiet when the focused\n  window shows the exact session that triggered the notification.\n- **Volume** — 0–100 slider for all notification sounds. Loudness is baked into\n  the synthesized WAVs (perceptual `(v/100)^2` gain), so every player honors it.\n- **Per-category groups** (Agent finished / Approval needed / Question asked),\n  each with: Notify, Play sound, and a Sound dropdown (previews on select). The\n  finished group additionally has **Subagent finished** (opt-in) and **Only\n  notify when the goal completes** (default on).\n- **Test browser notification** — verifies the web layer and requests permission\n  the first time.\n- **Test in-page toast** — shows a sample toast inside the page.\n- **Show details** — the backend sound-player line and a live focus-tracking line.\n\nChanges apply immediately and persist in the settings document under the\n`dsh-next-notifier` namespace.\n\n## Sound library (17 synthesized sounds)\n\nNo audio assets ship: every sound is synthesized at startup as a WAV (16-bit\nPCM, 22.05 kHz mono) and written into the OS temp dir.\n\n| Group | Sounds |\n| --- | --- |\n| Chimes | Chime, Ping, Bell |\n| Alerts | Alert, Error, Success |\n| Effects | Chirp, Pop, Knock, Whoosh, Magic, Blip, Ring, Gong |\n| Farts | Fart · Classic, Fart · Deep, Fart · Squeaky |\n\nDefaults: finished = Chime, approval = Ping, question = Chirp.\n\nPlayback: `afplay` (macOS) / `Media.SoundPlayer` via PowerShell (Windows) /\n`paplay` or `aplay` (Linux), played alongside the web notification.\n\n## Delivery\n\nAlerts arrive through the channel that fits where you are:\n\n- **Looking at the page** (window focused and visible): an **in-page toast**\n  slides in at the top of the window. Clicking the toast opens its session,\n  the close button dismisses it, and toasts auto-dismiss after 12 seconds.\n  Toasts need no browser permission.\n- **Backgrounded or minimized**: a **browser (web) notification** with the\n  DeepSeek icon — the OS shows it while the window is out of sight.\n- **Page closed**: the alert is dropped.\n\nEach alert's headline is an **emoji icon + the event type** (e.g.\n\"⚠️ Approval needed\", \"✅ Agent finished\"), and the **body is the session's\ntitle** (e.g. \"Design spec\"), so a glance tells you both what happened and in\nwhich session. Clicking either channel opens that session.\n\n## Architecture\n\n- **Host** (`src/index.ts` + `src/host/`) — registers the settings namespace\n  (Schemastery schema), listens to `agent/status`, `subagent/end`,\n  `approval/request`, `tools/execute`, and `goal/changed`, and serves the RPC\n  route at `POST /dsh-next-notifier/rpc`.\n- **Client** (`src/client/`) — the settings card in `settings.plugin.item`,\n  presence reporting, the web-notification drainer, and the in-page toast\n  layer registered in the shell's `shell.overlay` slot.\n- **Core** (`src/core/`) — pure shared logic: config normalization, WAV\n  synthesis, and notification decision, unit-tested without a runtime.\n\n## Install\n\n```sh\ndsh plugin --profile <name> add @dsh-next/dsh-next-notifier\n```\n\n## Development\n\n```sh\npnpm build\npnpm typecheck\npnpm test\n```\n","readmeFilename":""}