Y
dsh-approval-alert
yangluoup/dsh-approval-alert
DeepSeek Harness approval alert — desktop notification + sound + tab-title flash when a session waits for an approval or a user question, so you never leave dsh waiting while you are away. v2 adds host-side system notifications fired from the dsh process,
安装
dsh plugin --profile web add github:yangluoup/dsh-approval-alertREADME
dsh-approval-alert
DeepSeek Harness(dsh)审批提醒插件:当会话等待审批或等待你回答提问时,即使你在浏览器的其他标签页刷视频、或者在使用其他软件,也会弹系统通知、响提示音、标签页标题闪烁提醒你回 dsh 处理,避免会话一直干等。
特性
- ✅ 同时覆盖两种"卡住等你"的场景:审批(approval)与用户提问(question)
- ✅ 三种提醒手段:桌面通知(Web Notification)+ 提示音(WebAudio)+ 标签页标题
[审批]/[提问]前缀 - ✅ 重复提醒:未处理期间按设定间隔(默认 30s)重复提醒,直到你处理或切回页面
- ✅ 设置页开关:总开关 / 提示音 / 重复间隔 / "开启通知并测试"按钮
- ✅ 通知内容自动带上审批工具名、原因或提问内容
- ✅ v2 主机端通知:由 dsh 进程直接弹系统通知(node-notifier),浏览器标签页关闭、没有 GUI 连接也能提醒
- ✅ 偏好存 localStorage,无服务器依赖
安装
从 npm 安装(发布后)
dsh plugin --profile web add dsh-approval-alert
# 或
npm i -g dsh-approval-alert # 若作为全局插件分发
使用
- 打开 dsh web → 设置 → 审批提醒
- 点击 「开启通知并测试」 授权浏览器通知权限(浏览器要求权限必须来自点击手势)
- 按需调整:提示音、重复提醒间隔(0 = 不重复)
- 之后当会话需要审批/提问而你不在页面上时,就会收到提醒;点击通知可切回 dsh 窗口
工作原理
浏览器端(v1)
- 插件注册到客户端
conversation.input.dock插槽(与官方 todo / 队列面板同插槽,多渲染、互不冲突),用套件提供的useSession钩子订阅当前会话快照的pending列表 - 过滤出
approval/question两种 pending(与 dsh 自带审批弹窗、提问面板同源数据) - 挂载期间若页面隐藏或失焦:立即提醒一次,并按设定间隔重复
- 处理完成(pending 消失)或你切回页面(
visibilitychange/focus)→ 停止提醒、恢复标题 - 通知
tag按审批/提问 id 区分:同一 pending 的重复提醒合并不堆叠,不同 pending 各弹各的
主机端(v2)
- 主机半(
lib/index.js)仅监听approval/asked/approval/decided会话事件(纯观察者,不触碰approval/requestwaterfall,避免干扰 GUI 审批通道) - 每次
approval/asked后延迟delayMs(默认 5s)检查:若该审批仍未被应答(你没答)→ 弹系统通知;若approval/decided以unavailable结束(无 GUI 连接、无人应答)→ 立即通知 - 通知用 node-notifier(Windows snoretoast / macOS terminal-notifier / Linux notify-send),由 dsh 进程直接发送,与 UI 形态无关
- 配置
host-config.json(插件目录内):{ "enabled": true, "delayMs": 5000 },改完即生效,无需重启 - 说明:浏览器开着时,v2 的延迟通知相当于一条"跟进提醒";只想用浏览器端提醒可把
enabled设为false
环境兼容性(FAQ)
| 使用环境 | v1 浏览器通知 | 声音/标题 | v2 主机端通知 |
|---|---|---|---|
| Chrome / Edge(普通标签页) | ✅ | ✅ | ✅ |
| Chrome / Edge「安装为应用」独立窗口 | ✅ | ✅ | ✅ |
| 桌面端(Electron 内核) | ✅(Chromium 支持 Notification) | ✅ | ✅ |
| 桌面端(系统 WebView,如 Tauri / WebView2) | ⚠️ 可能不支持(无 Notification API 与权限 UI) | ✅ | ✅ |
| 无 GUI / 浏览器关闭 | ❌ | ❌ | ✅ |
- v2 与 UI 形态无关:由 dsh 进程(node 侧)经 node-notifier 发送,浏览器、桌面端、CLI 都适用
- v1 依赖渲染环境:Chrome/Edge(含安装为应用)与 Electron 支持 Web Notification;系统 WebView(WebView2 / WKWebView)通常不支持 → v1 通知静默失效,但声音、标题闪烁不受影响,v2 兜底
浏览器通知权限授权(Edge / Chrome)
- 打开 dsh 页面 → 设置 → 审批提醒
- 点击 「开启通知并测试」——若显示
权限: default,浏览器会弹出授权请求,点 允许 - 若之前误点了"阻止"(显示
权限: denied),requestPermission()不会再询问,必须手动改回:- Edge:地址栏左侧网站信息图标 → 网站权限 → 通知 → 允许;或 Edge 设置 → Cookie 和网站权限 → 通知 → 找到
127.0.0.1→ 允许 - Chrome:地址栏左侧锁形图标 → 网站设置 → 通知 → 允许;或 Chrome 设置 → 隐私和安全 → 网站设置 → 通知 → 找到
127.0.0.1→ 允许
- Edge:地址栏左侧网站信息图标 → 网站权限 → 通知 → 允许;或 Edge 设置 → Cookie 和网站权限 → 通知 → 找到
- 改完刷新页面,再点「开启通知并测试」验证
Windows 弹不出通知的排查(与浏览器无关)
- 设置 → 系统 → 通知 → 「获取来自应用和其他发送者的通知」 开启
- 应用列表中找到 Chrome / Edge → 通知开启
- 请勿打扰(专注助手)关闭
- 浏览器 / dsh 不要以管理员身份运行(Windows 会抑制提权进程的 toast)
- 通知中心有旧队列时先清空(tag 冲突会导致新通知被替换进队列而不弹出)
未来方向(Roadmap)
- 工作区级提醒 —— 当前只提醒当前会话;后续可扩展为工作区内任意会话的审批都提醒(侧栏"等待审批"角标同源数据)
- 通知点击跳转 —— 目前点击通知只聚焦窗口;后续可携带会话/审批 id 直接跳转到对应会话
许可
MIT