Skip to content

dsh-notify 0.5.0

Choose a tag to compare

@having5548 having5548 released this 30 Sep 10:10

dsh-notify 0.5.0

适配 DSH 0.2.0-rc.2 + 两项降噪优化。

如果你在用 0.4.0 且一切正常,这一版没有必须升级的理由——它不会修掉你遇到的任何故障,只是让通知更安静、更省资源。在 DSH 0.1.7 / 0.2.0 上都可用。


先说兼容性:这次没有 API 漂移

对当前打包版 DSH(0.2.0-rc.2,Electron 构建)逐项核对,插件用到的客户端接口全部健在:

接口 状态
ctx.uiSession.sessionStatus / adapter.current ✅
ctx.configForms.get(entryId) ✅
ctx.jobs.state + watchRows ✅
settings.section 槽位 ✅
ctx.on('session/event') / webServer.register ✅
ctx.settingsScope ✅ 仍然不存在(0.1.7 起就已移除)

也确认了 dsh.client.platform 仍必须是 "web"——新版桌面端是 Electron 外壳,渲染的是同一套 Web 客户端。

优化一:子代理会话静音 🤖

DSH 会给每个子代理分配独立会话(客户端 SessionSummary.origin、服务端 session.header.origin 都是 'subagent'),而它们每一轮都会发 turn/end。

后果是:一次 fan-out 工作流(并行子代理、workflow 编排)能瞬间刷出几十条「新会话已创建」和「任务完成」,把真正属于你的任务通知淹掉。

本版在两侧都做了过滤:

  • 服务端在 broadcast 之前就拦掉子代理的 turn/end(连流量都不产生)
  • 客户端的「新会话」与 turn-end 两条路径各自独立过滤

审批 / 待回答类通知不过滤。 子代理同样可能请求授权,漏掉一次授权的代价远大于多一条通知。

优化二:任务订阅有界 📉

ctx.jobs 的任务名册是按会话订阅的(ctx.jobs.watchRows),每个订阅在服务端是一条常开的 job.list 流。

之前的实现给会话列表里的每个会话都开一条——本机上就是 45 条流,其中绝大多数永远不会再有任务。

现在只订阅「可能还有任务在跑」的会话:

  1. 当前会话
  2. 正在运行的会话(任务只可能在运行期被创建)
  3. 12 小时内活跃过的会话(兜住「轮次已结束但任务还在跑」)
  4. 名册里当前仍有任务的会话(任务比会话活动活得更久时继续盯着)

订阅会在会话列表变化、以及切换当前会话时重算。

回归测试扩充

tools/smoke-client.mjs 新增覆盖:

  • 子代理会话不产生「新会话」通知
  • 子代理的 turn/end 不产生通知(普通会话的仍通知)
  • 48 小时未活动的会话不会被 watchRows
  • 切换当前会话时立即补上它的订阅
node tools/smoke-client.mjs

安装

# 从 npm
dsh plugin --profile desktop add @having5548/dsh-notify

# 或从本页附件
dsh plugin --profile desktop add having5548-dsh-notify-0.5.0.tgz

新版桌面端的 profile 名是 desktop(旧版 Web 是 web)。可以先用 dsh plugin --help 确认。

安装后重启 DSH 生效。

环境

  • DSH ≥ 0.1.7-rc.2(已在 0.1.7-rc.2 与 0.2.0-rc.2 上核对)
  • Windows 10+ / macOS

完整改动

见 6ea8f7c。


Assets

  • having5548-dsh-notify-0.5.0.tgz — 插件安装包
  • SHA256:141FFCDF47A98188AEB2177F7CE0C024B16401695B4707BED6C6B5B54A4CD20B