npm.io
0.2.0 • Published yesterday

dsh-approval-alert

Licence
MIT
Version
0.2.0
Deps
1
Size
30 kB
Vulns
0
Weekly
0

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   # 若作为全局插件分发
本地/开发安装
# 1. 把本包复制到 profile 的 plugins 目录(保持可随 dsh-sync 同步)
$dst = "$env:USERPROFILE\.dsh\profiles\web\plugins\dsh-approval-alert"
New-Item -ItemType Directory -Force -Path $dst | Out-Null
Copy-Item .\* $dst -Recurse -Force

# 2. 在 ~/.dsh/profiles/web/package.json 中:
#    dependencies 加:  "dsh-approval-alert": "file:./plugins/dsh-approval-alert"
#    dsh.profile.bundles 加: "dsh-approval-alert"

# 3. 安装并重启
dsh plugin --profile web install
# 重启 dsh web

file:./plugins/... 本地依赖时,插件源码在 profile 内,会随 dsh-sync 的同步包一起分发到其他机器。

使用

  1. 打开 dsh web → 设置 → 审批提醒
  2. 点击 「开启通知并测试」 授权浏览器通知权限(浏览器要求权限必须来自点击手势)
  3. 按需调整:提示音、重复提醒间隔(0 = 不重复)
  4. 之后当会话需要审批/提问而你不在页面上时,就会收到提醒;点击通知可切回 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/request waterfall,避免干扰 GUI 审批通道)
  • 每次 approval/asked延迟 delayMs(默认 5s)检查:若该审批仍未被应答(你没答)→ 弹系统通知;若 approval/decidedunavailable 结束(无 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)
  1. 打开 dsh 页面 → 设置 → 审批提醒
  2. 点击 「开启通知并测试」——若显示 权限: default,浏览器会弹出授权请求,点 允许
  3. 若之前误点了"阻止"(显示 权限: denied),requestPermission() 不会再询问,必须手动改回:
    • Edge:地址栏左侧网站信息图标 → 网站权限通知允许;或 Edge 设置 → Cookie 和网站权限 → 通知 → 找到 127.0.0.1 → 允许
    • Chrome:地址栏左侧锁形图标 → 网站设置通知允许;或 Chrome 设置 → 隐私和安全 → 网站设置 → 通知 → 找到 127.0.0.1 → 允许
  4. 改完刷新页面,再点「开启通知并测试」验证
Windows 弹不出通知的排查(与浏览器无关)
  1. 设置 → 系统 → 通知 → 「获取来自应用和其他发送者的通知」 开启
  2. 应用列表中找到 Chrome / Edge → 通知开启
  3. 请勿打扰(专注助手)关闭
  4. 浏览器 / dsh 不要以管理员身份运行(Windows 会抑制提权进程的 toast)
  5. 通知中心有旧队列时先清空(tag 冲突会导致新通知被替换进队列而不弹出)

未来方向(Roadmap)

  • 工作区级提醒 —— 当前只提醒当前会话;后续可扩展为工作区内任意会话的审批都提醒(侧栏"等待审批"角标同源数据)
  • 通知点击跳转 —— 目前点击通知只聚焦窗口;后续可携带会话/审批 id 直接跳转到对应会话

许可

MIT

Keywords