dsh-approval-notifier(哨兵):DSH 内待确认事项提醒

前言

在 DeepSeek Harness(DSH)里跑智能体时,审批、越权确认、ask_user_question 提问往往散落在不同工作区或会话里。你一旦切到别的界面或盯着当前对话,很容易错过需要本人拍板的节点。系统级桌面通知能用,但和 Harness 的会话上下文脱节,也不符合「只在客户端内完成操作」的习惯。

「哨兵 / Sentinel」(包名 dsh-approval-notifier)是 Macicle77 维护的客户端类 DSH 插件:当任意工作区、任意会话有待确认事件时,在 DSH 右下角逐条弹出紧凑提醒卡片,可配动画与提示音;点「去处理」会跳到对应会话,并在左下角短暂反馈「正在处理」。它只负责提醒,不替你做任何决定。

这是什么

  • 名称:dsh-approval-notifier(展示名:哨兵 / Sentinel)
  • 维护者:Macicle77(npm 作者字段:macicle)
  • 分类:客户端(dsh.client,注入 Web 端 UI)
  • 许可证:MIT(见仓库 LICENSE)
  • 当前版本(package.json):2.0.1
  • DSH 引擎要求:dsh 满足 >=0.2.1-rc.1 <0.2.2-0 || >=0.2.2-rc.1 <0.3.0-0,Node >=20

插件通过 Host 半观察待确认流,由浏览器半绘制右下角卡片、提示音与窗口标题提示;不使用 Windows 或其它系统通知 API。

核心功能

提醒方式与布局

  • 提醒落在 Harness 窗口内:右下角卡片 + 提示音 + 可选窗口标题闪烁待确认数量。
  • 卡片宽 min(390px, 100vw-36px),多条自下而上堆叠,新卡默认间隔 700ms(可配置);序号自上而下 1→2→3。
  • 框架贴对话区测量:右贴滚动条左缘、底边贴在输入框(或审批面板)上沿之上,避免挡住底部输入框和原生「允许一次 / 拒绝」等按钮;若原生按钮被卡片盖住,会在卡片上方绘制青色高亮环,点击可穿透点到原生按钮。

去处理与左下反馈

点某条「去处理」:该卡约 0.18s 收起后移除,一定跳转到对应会话(跳转前保存视图,其它提醒仍保留)。同时在左下角(工作区列表下方、头像上方)显示「✅ 提示有效,正在处理」,5 秒后约 300ms 淡出。

30 秒分级升级(按条独立)

某条 30 秒未处理时,仅该条卡片与文字等比放大(每级约 +6%,封顶约 +30%),提示音换成更急促的升级音,音量逐级增加。升级与「二次提醒」逻辑独立。

二次提醒

点「去处理」后若 10 秒内没有任何 pointer/滚动/按键等操作,且请求仍 pending、页面可见,会重新弹出该条:红色警示卡片 +「⚠ 二次提醒」+ 双响提示音;每条每次「去处理」最多触发一次二次提醒。

条数多时的紧凑黄条

高度不够时先压缩单卡;仍放不下时,全部卡片切换为紧凑黄条(深色底 + 亮黄描边),只显示「第几次 · 项目 · 第几级」。鼠标悬停某条时该条恢复全文与按钮(类似 Mac Dock),其余保持紧凑。升级等级在紧凑模式下仍逐级醒目(琥珀→橙→红等),升级瞬间该条可抖动约 3 秒。

去重与测试

同一待确认事件只生成一张卡(Host 与本地兜底统一去重)。设置页提供测试提醒:默认每 3 秒连续弹 3 条,可验证弹出顺序与二次提醒。

配置与热更新

全部设置在 Plugins → Installed plugins → 哨兵 bundle 配置页,经官方 Host Config(volatile 字段)写入 profile 的 cordis.patch.yml,保存后 HMR 立即生效;无浮动设置面板。本地图片/音频上传目录为 $DSH_HOME/approval-notifier/assets/($DSH_HOME 默认 ~/.dsh)。

主要配置项(摘自 README 表格):

字段 默认 说明
提醒品牌名 哨兵 通知/标题里显示的名字
弹出动画 / 逐条间隔 向上弹出 / 700ms 6 种预设 + 预览
自定义动画图片 无 网图 URL 或本地上传(≤3MB)
首次提示音 / 音量 叮咚 / 0.6 6 种预设;可自定义 URL/本地(≤5MB)
30 秒升级 开 / 30s / 5 级 / 急促警报 仅放大该条
二次提醒 开 / 10s 点去处理后无操作才触发
标题提示 开 窗口标题闪烁待确认数量

还可配置:升级开关/间隔/级数/升级音、自定义提示音等(见 README「可配置」一节)。

安装与启用

推荐走 DSH 官方插件管理器,不要凭仓库名手拼 CLI 安装命令。

  1. 打开 DSH 侧边栏 → Plugins → Install / Add plugin。
  2. 若包已发布到 npm:填入包名 dsh-approval-notifier,或在插件市场 Discover 一键安装(若已收录)。
  3. 本地/离线:填 tarball 绝对路径(仓库 node tools/package.mjs 产出 dist/dsh-approval-notifier-<version>.tgz),或开发目录绝对路径。
  4. 安装后出现在 Installed plugins:可启停、打开配置页;卸载在该 bundle 页点 Remove(管理器会清理 profile 依赖与选择项)。

安装、卸载、启停与设置均由官方插件管理完成,无需手改 profile 以外的散落配置。

典型用法

日常无需额外 API:插件随 Host 观察 waterfall,有待确认即排队弹卡。

  1. 安装并启用后,在 Plugins → 哨兵 按需改动画、间隔、提示音与升级/二次提醒开关。
  2. 用设置页的测试提醒确认右下角顺序、音量和二次提醒是否符合预期。
  3. 真实待确认出现时,在右下角点「去处理」进入对应会话,在 Harness 内完成审批或回答问题;左下角短暂提示表示跳转已生效。
  4. 若长时间未处理,留意该条的放大与升级音;若已点「去处理」但迟迟未操作界面,可能收到带「二次提醒」的红卡。

开发侧自检(维护者仓库命令,普通用户可跳过):

npm install
node selftest.mjs

适用场景与注意

适合谁:经常在 DSH 多工作区、多会话并行,且不愿依赖系统通知、又希望待确认不淹没在聊天记录里的开发者或操作者。

范围与限制(README「限制」):

  • 覆盖当前 DSH Host 进程内所有工作区/会话(桌面 App 通常只有一个 Host)。
  • App 完全退出时不提醒;窗口最小化时卡片仍在 Harness 内,恢复窗口即可见。
  • 「阅读」判定依赖滚动/指针/按键等;纯静止盯屏会被视为「无操作」,从而可能触发二次提醒——这是插件需求定义的行为。
  • HMR 或刷新会重置页面内存里的「已点开/二次提醒」状态,审批请求本身不受影响。

安全习惯:插件以当前 DSH 进程权限运行,会读写 profile 配置与 $DSH_HOME/approval-notifier/assets/。安装前应在 GitHub 查看源码与 MIT 许可证,确认符合你的环境策略。

结尾

dsh-approval-notifier 把「待你确认」收敛成右下角可配置的哨兵提醒:不越权代批,只把跳转与升级节奏说清楚。插件目录页见 SkillHub 条目;源码与完整说明见 GitHub:Macicle77/dsh-approval-notifier。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye