february2015/dsh-dingo
DSH 声音提醒 + 对话直达插件:多对话并行时,哪个对话有回复就出声提醒,点右上角卡片直达对应对话;切到别的应用时还有系统级通知(macOS 通知中心 / Windows toast),点击直达。当前对话当/当当(crisp 档),其他对话叮/叮叮(soft 档)。
已收录
0
Voice
Bundle 已验证
功能介绍
多对话并行的声音提醒 + 对话直达:当前对话当/当当(crisp 清脆档),其他对话叮/叮叮(soft 柔和档)+ 右上角小卡片,点一下直达对应对话。
适合
- 并行运行多个 DSH 对话或子代理、需要及时发现回复完成的用户。
- 希望区分普通回复、待回答问题和失败状态提醒的用户。
- 会切换到其他应用,并可使用文档所述 macOS 或 Windows 系统通知的用户。
- 需要通过常驻卡片直接跳到产生回复会话的工作流。
不适合
- 当前对话始终可见的单会话工作流。
- 对声音敏感且不愿使用关闭提醒、免打扰或安静时段的环境。
- 需要每条中间进度消息都触发提醒的用户;该插件面向最终回复或等待输入的问题。
- 使用文档所列 macOS、Windows 之外的平台,且必须依赖系统级通知的用户。
README
dsh-dingo
| English | 中文 |
Ding + Go — sound reminders + one-click jump for DeepSeek Harness (DSH).
Hear it, reach it: when another conversation replies, a tone alerts you and a small card appears — one click takes you straight to that conversation; and when you’ve switched to another app, a system notification (macOS Notification Center / Windows toast) still gets through — click it to jump right in. It doesn’t just tell you “something happened”; it puts you in front of the conversation (the core capability that sets it apart from plain notifiers).
Great when you run many conversations in parallel: open several chats (including subagents) side by side and stop watching them one by one — when any of them replies, you hear a distinct tone and the card shows the workspace/conversation name; click it and you’re there. Never miss a reply while you work on something else, and switch between tasks with ease.
Current conversation replies → dang / dang-dang (crisp tone set); other conversations → another sound (ding, soft tone set) + a top-right card; click the card to jump straight to that conversation. Reminders fire only on a turn’s final reply (or a question awaiting you) — in-between progress messages stay quiet. Pure event-driven and lightweight.
What it does
| Scenario | Sound | Card |
|---|---|---|
| Current conversation has a reply (plain statement) | dang (1 beep, crisp) | none (you’re already looking at it) |
| Current conversation needs your answer (question/confirmation) | dang-dang (2 beeps, crisp) | none |
| Another conversation has a reply | ding (soft) 1 beep | ✅ top-right card |
| Another conversation needs your answer | ding-ding (soft) 2 beeps | ✅ top-right card |
| Task failed | dong (low tone) | ✅ card |
When does a reply “need your answer”? Works for both English and Chinese. Structured signals first — ask_user tool calls, approval requests (approval/asked), and questions-domain prompts always count as “needs answer”. For plain text, the heuristic is deliberately strict to avoid mistaking the model’s self-talk for a question to you:
- Explicit request for action / decision / confirmation (“please confirm”, “please choose”, “your call”, “what do you think”… / 请确认、需要你拍板、你怎么看…) → needs answer;
- Question mark + question tone (wh-words, auxiliary-verb questions… / 吗/呢/怎么/是否…) → needs answer, but excludes rhetorical questions (“Isn’t this obvious?” / 难道…吗?), self-answered Q&A (“Should we roll back? No, because…” / …吗?因为/其实…), and question-list enumerations (…? Next… / …?其次…);
- Question words in a plain statement without a question mark → just a reply.
The card (other conversations only):
- Fixed 200×56, semi-transparent floating;
- Shows: status icon + workspace name (≤12 chars) + conversation title (≤10 chars);
- 🟩 green square = reply, 🟠 question mark = needs answer, 🔴 exclamation = failed;
- Click the card → jump to that conversation; × in the corner closes it;
- Cards stack from the top right (below the Session log button), 8px apart; clicking a card clears all cards of that conversation and the rest reflow up;
- Cards stay until you click to jump (clears all cards of that conversation) or close them with × — no auto-dismiss.
Reminder discipline:
- The same reminder in the same conversation won’t repeat within 10s (content-based dedup: different reminders still ring; each conversation tracks its own window);
-
/dingo dnd ondo-not-disturb: task-completion reminders go silent, “needs answer” still alerts; - Configurable quiet hours (
quietHours“HH:mm”, overnight supported) — task-class reminders queue silently and play after the window ends; -
/dingo offdisables all reminders.
System notifications (macOS Notification Center / Windows toast, optional):
- When any conversation needs your answer / replies / fails while the DSH Web UI is not in the foreground, a system-level notification is sent — so you notice even while working in another app (the current conversation included, since you’re not looking at it);
- Two channels, distinct jobs: the system notification tells you something happened; the in-browser card (always visible while the Web UI is open) tells you which conversation — click it to jump straight there;
-
Windows: clicking the notification itself also jumps straight to the conversation (deep link
?dingOpen=); - macOS: the notification is a reminder only (no click callback — a macOS system limit; the in-browser card handles the jump);
- Suppressed while the DSH Web UI is visible in the foreground (the in-browser tones/cards are enough); sent when the page is in the background or not open;
-
Zero setup: macOS uses built-in
osascript; Windows uses built-in PowerShell (scripts underscripts/).
Install
# From local source (development)
dsh plugin --profile web add /path/to/dsh-dingo
# Or from npm (released)
dsh plugin --profile web add dsh-dingo
# Replace "web" with your target profile name if different
System-notification prerequisites (optional feature)
The optional system notifications (macOS Notification Center / Windows toast) need no installation on either platform:
-
macOS: uses built-in
osascript(display notification). -
Windows: uses built-in PowerShell (
scripts/notify.ps1+scripts/toast-activate.ps1).
Disable anytime with systemNotify: false (see config below).
Overridable in the profile’s cordis.patch.yml or plugin config:
- id: dsh-dingo
config:
enabled: true
feedback:
toneStyle: soft # tone set: soft (other conversations "ding") / crisp (current conversation "dang")
dnd: false
dedupeWindowMs: 10000 # same-conversation same-content dedup window (same reminder won't repeat, different ones ring)
quietHours: { start: '', end: '' }
# systemNotify: true # system notifications for other conversations (default on)
# systemNotifyBaseUrl: '' # deep-link base URL (default http://127.0.0.1:3080)
Commands
/dingo on|off # enable/disable reminders
/dingo status # enabled/DND/queue status
/dingo dnd [on|off] # do-not-disturb (task-completion silent, needs-answer still alerts)
Architecture
-
host half (
src/index.ts+src/feedback.ts):- Subscribes to
session/event:turn/end(completed)/approval/asked/tool/call(ask_user)/assistant/message→ classifies → enqueues (priority: needs-answer > reply > failure); - Current-conversation replies (from the client’s reported active session) → own reminder (tone only, no card);
- Queue plays serially by priority; the client reports
spokenbefore the next item plays;
- Subscribes to
-
client half (
src/client/FeedbackCard.tsx+tones.ts):- Polls the
/dingo.feedbacksnapshot → current-conversation items play crisp (dang/dang-dang), other-conversation items play soft (ding) + render cards; - Two built-in tone sets (soft/crisp, data-URL WAV), no external audio files;
- Clicking a card calls client-side
sessions.opento jump to the conversation (same entry point as the sidebar).
- Polls the
-
RPC (
/dingochannel):feedback/set-current-session.
Development
npm install
npm run typecheck # type checking
npm test # vitest
npm run verify # typecheck + test + build
License
MIT
Windows system-notification scripts adapted from CAOGGL/dsh-ding (MIT) — see LICENSE third-party notices.
常见问题常见问题
在启用了 DSH 的终端中执行已验证命令 dsh plugin --profile default add github:february2015/dsh-dingo。命令会解析公开 package 元数据,并保持插件与本页展示的目录身份一致。
兼容性以页面上展示的 bundle 与 profile 状态为准。如果某个 profile 尚未检测到,请先保持禁用,并在生产启用前阅读仓库文档。
GitHub 链接和 activity 元数据是 release 与维护状态的来源。新版本发布后重新查看本页,确认目录已经观察到最新版本。