前言¶
在 DSH Web GUI 里跑 agent 时,一旦触发 ask_user_question、审批或计划确认,界面会进入「等你作答」的等待态。内置问题卡片会接管输入区——只有当你正看着这个标签页时,才容易发现 agent 已经停下来了。切到别的标签、别的窗口或别的程序时,会话可能长时间卡在等待里,页面上却没有足够醒目的信号把你拉回来。
下面介绍社区插件 dsh-ask-notify(维护者 liujianqiao701):在 DSH 客户端侧监听与会话列表「琥珀色小圆点」同一份运行时状态,把「需要你回答」主动推到右下角提醒卡;若页面不可见或未聚焦,再补系统通知和标签标题闪烁。插件当前版本 1.0.4(MIT),分类为客户端;在 SkillHub 插件目录 可找到条目,源码在 GitHub。
这是什么¶
dsh-ask-notify 是 DSH Web GUI 的客户端插件,不抓取 DOM,而是从宿主已有的 uiSession / 会话列表快照里读取等待态(question、approval、plan-review 等 kind)。有等待时弹出右下角提醒;你不在当前页面时再触发 Windows 桌面通知,并把标签标题改成带 ❓ 的闪烁样式。
本插件不发起任何网络请求;偏好写在浏览器 localStorage,系统通知走 Notification API。安装前建议自行查看源码与许可证——插件随当前 dsh web 进程在浏览器环境中运行。
三个提醒通道¶
| 通道 | 出现条件 | 作用 |
|---|---|---|
| 右下角提醒卡 | 存在任意等待(是否在页面均会显示) | 回到页面时一眼看到还剩什么问题 |
| 系统通知 | 页面不可见或未聚焦,且已授权通知 | 在别的标签或程序里也能被叫到 |
| 标题闪烁 | 页面不可见 | 在标签栏上区分「有个标签在等我」 |
卡片提供 去回答(切到对应会话并滚到输入区)、稍后提醒(本条不再弹,下一条等待仍会弹)、以及 桌面提醒 / 声音 开关。
安装与启用¶
首选:插件市场¶
在 DSH 界面 设置 → 插件市场 → 搜索 dsh-ask-notify → 安装。装完后看市场卡片上的状态:
| 卡片状态 | 还要做什么 |
|---|---|
| 已生效 | 刷新页面:F5,不行再 Ctrl+F5 |
| 已安装,重启后生效 | 重启 dsh web,然后 Ctrl+F5 |
| 已安装,未生效 / 已停用 | 点「为什么未生效?」——常见原因是「有 agent 正在运行」,停掉再装 |
插件条目随页面启动清单(window.__DSH_BOOT__)下发;不刷新页面,浏览器不会加载新插件。市场显示「已生效」却「没效果」时,多数只差这一步刷新。
备选:命令行¶
dsh plugin --profile web add github:liujianqiao701/dsh-ask-notify
命令行或本包 install.ps1 登记在 bundle 层,bundle 只在 dsh web 启动时读一次,因此装完后必须重启 dsh web,再 Ctrl+F5 刷新页面。
环境要求¶
- Windows +
dsh web。 - Harness 1.0.4 起各版本可用:插件按优先级读取
uiSession.sessionStatus(0.1.7+)、uiSession.pendingInteractions(0.1.2~0.1.6)、会话列表行上的pendingInteraction(≤0.1.1-rc.x);三个源都读不到时会扫描 map 型成员并可在控制台__dshAskNotify.sources()查看discovered。 - 1.0.4 起无强制 cordis 注入依赖;服务暂时缺失时仍会挂载,约 15 秒读不到数据会在控制台报警并在右下角显示提示卡。
典型用法与自检¶
平时无需配置:agent 进入等待态后,插件通过订阅与约 2 秒轮询更新提醒。不必真等问题,可在页面控制台自检:
__dshAskNotify.version // 当前安装版本(资料中示例为 1.0.4)
__dshAskNotify.selftest() // 右下角卡片保持约 12 秒
__dshAskNotify.sources() // used / carries / discovered
__dshAskNotify.state() // 等待、偏好、通知权限、页面是否可见
__dshAskNotify.collect() // 当前等待列表;空数组表示现在无人等你
__dshAskNotify.show('approval', '试试审批样式')
__dshAskNotify.hide()
sources().used 表示真正在供数据的源;used: "none" 且控制台出现读不到数据源的警告时,可把 sources() 输出反馈给维护者。
偏好键(localStorage):
| key | 含义 |
|---|---|
dsh-ask-notify:prefs |
各类等待与系统通知、声音的布尔开关 |
dsh-ask-notify:autoasked |
首次用户手势申请通知权限的标记 |
dsh-ask-notify:lastshot |
多标签下系统通知约 20 秒内去重 |
通知权限在第一次点击或按键时自动申请一次;若曾被拒绝,可在卡片上开启桌面提醒,或在 http://127.0.0.1 的站点设置里允许。
适用场景与注意¶
适合谁:长时间在 DSH Web 里跑 agent、经常多标签或多窗口并行,又希望「审批 / 追问 / 计划确认」不要静默耗在等待态上的开发者。
排障要点:
- 先
Ctrl+F5,再执行__dshAskNotify.selftest();若返回undefined表示客户端脚本未加载(命令行安装未重启、或未刷新页面)。 - 不要用不带
?rev=的/plugins/.../client.jsURL 手敲判活;新代 harness 路由带 rev,手敲可能 404。可用Ctrl+U搜 boot payload,或看__dshAskNotify.sources()。 - 市场更新时若有 agent 在跑,市场会拦截更新;等会话结束或取消后再点更新。
- 系统通知不弹时检查
__dshAskNotify.state().permission;用局域网 IP 打开时浏览器可能禁用通知。 - 若页面已有
dsh-whale-mascot,提醒卡叠在其上方;同一等待多标签各有一张卡,系统通知跨标签只弹一次。
插件以你当前 DSH 进程与浏览器权限运行;安装前请阅读 仓库 README 与源码。SkillHub 为社区插件目录,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-ask-notify 把「agent blocked 等你回答」从「必须盯着输入区才发现」变成右下角可见、离页可通知、标签可闪烁的三通道提醒,且数据来自与会话 UI 一致的运行时状态,不依赖 DOM 结构。