Repository navigation
Releases
Releases · ltl0312/my-dsh-plugins
dsh-plugin-tlnotify v0.1.0
首个版本,按仓库内 doc/tlnotify-设计方案.md 完整实现。
这是什么
把所有 DSH 会话的事件通知聚合到一个 IM 通道里:哪个项目的哪个对话触发了中断、结束、报错或等待你操作,一眼能看出来;该给按钮的地方给按钮;你还能直接在那个通道里回复,消息会被定向注入回对应的会话。
零公网依赖——QQ 与飞书都走长连接,不需要公网 IP,也不需要内网穿透。
本版包含
通道
- QQ 单聊机器人:WebSocket 长连接、
keyboard按钮、长按引用回复;被动回复窗口用尽后自动降级为主动推送 - 飞书自建应用:长连接 + 交互卡片,SDK 按需动态加载
- 统一的
start/stop/send/update四方法接口,单通道启动失败不影响插件装载
事件(9 类)
任务完成、执行错误、执行被阻塞、手动中止、Token 达到上限、异常中断、等待我回答、权限请求、等待计划确认。默认只通知主会话,子 Agent 静默且可开关。
可操作性
- 权限请求与用户提问通过
approval/request、user-questions/request两个 waterfall 认领并结算 - 按钮 value 结构化,点击后把回答回注到对应会话
- 计划确认(
exit_plan_mode)同样支持按钮批准
回复路由(三层,顺序不可反)
- 按钮 —— value 自带
sessionId,零歧义 - 长按引用回复 —— 维护
byMessage/byRefIdx/byThread/byContent四张反查表 - 显式短 id 前缀 —— 例如
519cc141 继续
兜底发最新一条通知,其次退到最近一次需要人介入的会话,并回显「已发给 X」。路由表带 7 天 TTL 且落盘,重启不丢。
两种运行模式
- 全局模式:一行精简提示,不刷屏;对某个会话回复
detail可临时升到详细 - 单会话模式:只推绑定会话,带完整上下文与前 N 轮摘要
- 切换途径:
config.json、IM 命令/mode、回复detail
其余
- 完成门控(等 Agent 真正 idle 再发)、按
会话:seq去重、正文实时聚合 - 长文本按通道上限分片,按钮只挂首片
- 配置与状态落
$DSH_HOME/tlnotify/{config.json,state.json,plugin.log},日志 1 MiB 轮转 - 123 个单元测试覆盖聚合、渲染、路由、去重与模式切换
安装
dsh plugin --profile web add dsh-plugin-tlnotify或手工在 profile 里 pnpm add dsh-plugin-tlnotify,并把包加进 dsh.profile.bundles。
飞书通道需要额外自行安装官方 SDK(约 30 MB,故意不做成自动依赖):
pnpm add @larksuiteoapi/node-sdk已知限制
- QQ 用户可在客户端关闭「允许主动发送」,关闭后主动消息一律失败(被动回复不受影响)
- QQ 被动回复有硬上限(单聊 4 片、群聊 5 片),超出平台会静默丢弃,本插件会自动切到主动推送
- 未安装飞书 SDK 时只有飞书通道启动失败,QQ 通道与插件装载不受影响
校验
pnpm install --frozen-lockfile通过pnpm --filter dsh-plugin-tlnotify typecheck零错误pnpm --filter dsh-plugin-tlnotify test—— 123 passedpnpm --filter dsh-plugin-tlnotify build—— 产出 CJS + ESM +.d.ts