前言¶
在 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 安装命令。
- 打开 DSH 侧边栏 → Plugins → Install / Add plugin。
- 若包已发布到 npm:填入包名
dsh-approval-notifier,或在插件市场 Discover 一键安装(若已收录)。 - 本地/离线:填 tarball 绝对路径(仓库
node tools/package.mjs产出dist/dsh-approval-notifier-<version>.tgz),或开发目录绝对路径。 - 安装后出现在 Installed plugins:可启停、打开配置页;卸载在该 bundle 页点 Remove(管理器会清理 profile 依赖与选择项)。
安装、卸载、启停与设置均由官方插件管理完成,无需手改 profile 以外的散落配置。
典型用法¶
日常无需额外 API:插件随 Host 观察 waterfall,有待确认即排队弹卡。
- 安装并启用后,在 Plugins → 哨兵 按需改动画、间隔、提示音与升级/二次提醒开关。
- 用设置页的测试提醒确认右下角顺序、音量和二次提醒是否符合预期。
- 真实待确认出现时,在右下角点「去处理」进入对应会话,在 Harness 内完成审批或回答问题;左下角短暂提示表示跳转已生效。
- 若长时间未处理,留意该条的放大与升级音;若已点「去处理」但迟迟未操作界面,可能收到带「二次提醒」的红卡。
开发侧自检(维护者仓库命令,普通用户可跳过):
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。