โ† Back to home

Aisland-SJL

dsh-reminder

๐Ÿ”” Cross-window completion & approval notifications for DeepSeek Harness โ€” popup reminders that bring you back to DSH, Codex/WorkBuddy style.

Stars
1
Language
TypeScript
Created
Aug 16, 2026
Updated
Aug 16, 2026

Introduction

dsh-reminder ๐Ÿ””

English ยท ็ฎ€ไฝ“ไธญๆ–‡

A cross-window reminder plugin for DeepSeek Harness โ€” while you work in any other window, it taps you on the shoulder the moment a task finishes or waits for your approval. Codex / WorkBuddy style.

Toast preview

โœจ Features

๐ŸŽฏFeatureDescription
๐ŸŸขCompletionPops "Task completed" on every turn end, with session ยท duration and a green check icon
๐ŸŸกApprovalPops "Waiting for your approval" with the tool name and an amber alert icon
๐ŸŽฏPops in any windowNotifies even while you work in other apps
๐Ÿ–ฑ๏ธClick to returnClicking focuses the DSH window and opens the session
โฑ๏ธAuto-dismissGone in 3-5 s (adjustable)
๐ŸŽตSoft chimeA gentle two-note chime (D4โ†’A4) โ€” nothing startling
๐Ÿ”DeduplicatedNever pops twice for the same event
๐Ÿ›ก๏ธReminds, never actsNever approves on your behalf

๐Ÿค” Why

  • ๐Ÿ˜ด Nobody calls you for approvals โ€” the agent waits while you are away; now an amber popup tells you
  • ๐Ÿ‘€ Nobody tells you it's done โ€” no completion signal before; now a green popup tells you

๐Ÿš€ Quick start

  1. Install: dsh plugin --profile web add <dsh-reminder> (or npm i dsh-reminder), register dsh-reminder in the profile bundle list, restart the DSH web process
  2. Grant permission: Settings โ†’ Reminders โ†’ "Enable & test notifications" โ†’ Allow โ€” a test popup arrives instantly
  3. Enjoy: Switch away and work โ€” the popups come to you

โš™๏ธ Settings

SettingDefaultDescription
Notification permissionunsetOne-click grant + test popup
Approval remindersOnOff = no approval popups
Completion remindersOnOff = no completion popups
Duration3-5 sSeconds before auto-dismiss
Failure alertsOff (reserved)Planned for v0.3

๐Ÿ—๏ธ Architecture

One package ships the host Cordis plugin and the web client:

  • host: registers the settings namespace plus a plugin-owned Typert Remote (reminder/getSettings ยท updateSettings) โ€” plugin namespaces sit outside the web settings allowlist
  • client: subscribes to the session list and conversation snapshots (turn/end, approval/requested arrive over the mux stream), pops via the Notification API with a Web Audio chime
  • Read-only: never mutates DSH core behavior

๐Ÿ”ง Development

pnpm install
pnpm run typecheck   # tsc --noEmit
pnpm test            # node tests/unit/*.test.cjs (16 tests)
pnpm run build       # esbuild: host ESM + single-file client CJS (ModuleLoader handshake) + tsc d.ts
  • Artifacts: lib/index.js (host ESM), lib/client.js (client), lib/types/ (.d.ts)
  • Offline dev: no new dependencies; @deepseek-ai/* types and local esbuild/typescript come from 03_local/codes (not in git)

โš ๏ธ Known limits

  • Chrome page notifications reject actions (ServiceWorker persistent notifications only) โ€” dismiss via auto-close or the hover โœ•
  • Permission must be requested from a user gesture (browser policy) โ€” the settings button does it in one click
  • The chime unlocks on the first click (autoplay policy)

๐Ÿ“„ License

MIT