Back to home@MuziiXzx

dsh-taskdone-notify

任务完成时通知用户

Stars
0
Language
JavaScript
Created
Aug 23, 2026
Updated
Aug 23, 2026
GitHub repo

Introduction

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 中的插件行支持一个开关:

默认说明
osToaststrue是否从 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