READMESource: main@ebc4c942
dsh-taskdone-notify
DSH 会话提醒插件 / Session alerts for the DSH web GUI.
在两个关键时刻提醒你:
| 时刻 | 触发条件 |
|---|---|
| 任务完成 | 根 agent(交互式会话,不含 subagent 子代理)由运行中转为空闲——这一轮任务已完成,正在等你 |
| 等你回答(v1.1 新增) | agent 调用 ask_user_question 工具提问——轮次阻塞中途,agent/status 仍是 running,完成提醒不会覆盖此场景 |
每个时刻都走三个通道:
| 通道 | 机制 | 覆盖场景 |
|---|---|---|
| Windows 系统通知 | Host 侧直接调用 Windows PowerShell + WinRT Toast API 弹系统通知(进入 Windows 通知中心) | 浏览器全部关闭也有效 |
| 浏览器通知 | Web Notification API;页面右下角有一次性「开启系统通知」授权按钮 | 浏览器开着、DSH 页面在后台标签 |
| 页面内 toast | 右下角提醒卡片:任务完成为绿点/10 秒消失,等你回答为黄点/20 秒消失 | 页面正打开时 |
点击任一提醒即可跳转到对应会话。
安装 / Install
dsh plugin --profile web add link:D:/AICODING/DSH/dsh-taskdone-notify
然后重启 web 服务(重启后生效)。
安装到其他机器:把本目录放过去,改用路径安装,或发布到 npm 后:
dsh plugin --profile web add @muziixzx/dsh-taskdone-notify
组合配置 / Composition config
cordis.patch.yml 中的插件行支持一个开关:
| 键 | 默认 | 说明 |
|---|---|---|
osToasts |
true |
是否从 Host 进程弹 Windows 系统通知(浏览器通道不受影响) |
工作原理 / How it works
- Host 半(
lib/index.js,标准 Cordis 插件)- 任务完成:监听
agent/status事件;仅统计「先见过 running 再转 idle」的根 agent,避免 agent 创建时的初始 idle 误报、避免工作流子代理刷屏;激活时对已在运行的 agent 做快照,插件随服务启动时也能正确补报进行中的轮次; - 等你回答:挂
tools/execute环绕分发钩子,识别ask_user_question调用——该钩子在 pre-execute 审批之后、真正分发之前触发,此时问题卡片必然出现,不误报;通知后立即next(),绝不阻塞或改写分发;从arguments.questions[0]取问题标题作为提醒正文; - 通过
sessionQuery.readTitle取会话标题(仅提取叶子字段); - OS 通知以 argv 数组调用 PowerShell,正文经注入安全处理(剥除引号/控制字符、截断 80 字符);
GET /api/taskdone-notify/poll?since=<游标>提供游标式轮询(环形缓冲 50 条,条目带kind: task|question):每个浏览器各自维护游标,服务端重启后客户端自动重新基线,局域网多访问端互不抢通知。
- 任务完成:监听
- 浏览器半(
lib/client.js,shell module-loader 格式,零依赖纯 DOM)- 每 2 秒轮询;首次轮询只基线不回放(打开页面不会重播历史完成);
- toast 卡片按
kind区分视觉(绿点/黄点)与停留时长(10s/20s)、浏览器通知区分标题(tag常量去重,多标签页不叠加)、授权引导 pill; - 点击经
sessions服务跳转会话;挂载/轮询失败只记日志,绝不拖垮页面。
限制 / Notes
- OS 系统通知弹在 DSH 服务端所在机器(dsh-lan 瘦终端模型下即服务器本机);局域网访问端请用浏览器通知通道(点一次授权)。
- Windows 专注助手/勿扰模式可能拦截系统通知,请在系统设置中放行。
- 后台标签页的浏览器通知受浏览器节流(约每分钟一次),近实时通知由 OS 通道与页面内 toast 保证。
- 「任务完成」判定为该会话本轮 agent 转入空闲,无论以正常回复、出错还是中止结束。
License
Apache-2.0
No comments yet. Be the first to write one.