dsh-attention-reminder
chenyuiyu/dsh-attention-reminder
需要授权或确认时敲一记短音、把 DSH 窗口提到最前、在页面最上层浮出提醒卡片,并弹一条系统通知。声音与弹窗是会话头部上的两个独立开关,刷新与重启后仍然保持。
安装
dsh plugin --profile web add github:chenyuiyu/dsh-attention-reminderREADME
dsh-attention-reminder
Sound and on-screen alerts for DeepSeek Harness: when the agent needs your approval (an approval/request) or an answer (ask_user_question), the plugin strikes a short chime, raises the DSH window, and floats a card above the page.
Two independent toggles — sound and popup — both remembered across reloads and restarts.
Install
dsh plugin --profile <profile> add github:chenyuiyu/dsh-attention-reminder
On DSH Desktop, install it from Settings → Plugins. The plugin is plain JavaScript: no build step, no dependencies.
The two toggles
Both live behind the 🔔 button at the right end of the session header.
- Sound — one bell strike (WebAudio, ~0.5 s). Each new request chimes exactly once and never repeats; the card stays on screen until you answer it.
- Popup —
window.focus()to put DSH in front, a floating card above the page naming what is waiting (up to 3 cards, the rest folded into “+N more”), and a system notification where the browser allows one.
The panel also has Send a test reminder, which travels the same path as a real alert.
Toggles are stored in $DSH_HOME/plugin-data/dsh-attention-reminder/state.json (default ~/.dsh/plugin-data/...).
How it works
- Host half (index.js) listens to the waterfall events
approval/requestanduser-questions/requestand keeps the unanswered ones in a bounded queue (24 entries). An entry leaves the queue when the promise returned bynext()settles or the request'sAbortSignalaborts. It only observes: every handler delegates withreturn next(), so approvals and questions behave exactly as before. The queue and the toggles are served asGET/POST /api/attention-reminderthroughconnection.fetch.register. - Web half (client.js) polls that route once a second and announces only ids it has not seen yet. Cards register into
shell.overlay; the 🔔 panel intoconversation.session.header.utilities.
Plugins have no host-to-page push channel, which is why the page polls; @deepseek-ai/dsh-deja uses the same HTTP route pattern.
Notes
- Audio starts after one interaction with the page — a browser rule, not this plugin. If DSH was just opened and an alert fires before you touched anything, one click on the page fixes it and the next alert is audible.
window.focus()cannot always beat the Windows foreground lock; the floating card and the system notification still appear.- The system notification needs the browser's notification permission, requested the first time you enable popup or press the test button (both are user gestures).
License
MIT