maestro-flow 0.3.10 → 0.3.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. package/.claude/agents/conceptual-planning-agent.md +1 -0
  2. package/.claude/agents/workflow-analyzer.md +114 -114
  3. package/.claude/agents/workflow-collab-planner.md +144 -144
  4. package/.claude/agents/workflow-debugger.md +102 -103
  5. package/.claude/agents/workflow-executor.md +127 -128
  6. package/.claude/agents/workflow-integration-checker.md +82 -82
  7. package/.claude/agents/workflow-nyquist-auditor.md +85 -84
  8. package/.claude/agents/workflow-phase-researcher.md +85 -85
  9. package/.claude/agents/workflow-plan-checker.md +90 -90
  10. package/.claude/agents/workflow-planner.md +178 -178
  11. package/.claude/agents/workflow-roadmapper.md +81 -83
  12. package/.claude/agents/workflow-verifier.md +119 -119
  13. package/.claude/commands/learn-decompose.md +176 -176
  14. package/.claude/commands/learn-follow.md +167 -167
  15. package/.claude/commands/learn-retro.md +3 -3
  16. package/.claude/commands/learn-second-opinion.md +2 -2
  17. package/.claude/commands/maestro-brainstorm.md +1 -0
  18. package/.claude/commands/maestro-coordinate.md +1 -3
  19. package/.claude/commands/maestro-fork.md +133 -111
  20. package/.claude/commands/maestro-merge.md +85 -77
  21. package/.claude/commands/maestro-plan.md +88 -2
  22. package/.claude/commands/maestro-roadmap.md +113 -2
  23. package/.claude/commands/maestro.md +1 -0
  24. package/.claude/commands/manage-harvest.md +131 -131
  25. package/.claude/commands/manage-issue.md +2 -2
  26. package/.claude/commands/quality-business-test.md +5 -5
  27. package/.claude/commands/quality-debug.md +3 -2
  28. package/.claude/commands/quality-retrospective.md +6 -4
  29. package/.claude/commands/quality-review.md +1 -1
  30. package/.claude/commands/quality-test-gen.md +5 -4
  31. package/.claude/commands/spec-add.md +67 -56
  32. package/.claude/commands/spec-load.md +66 -64
  33. package/.claude/commands/spec-setup.md +5 -9
  34. package/.codex/skills/learn-decompose/SKILL.md +119 -0
  35. package/.codex/skills/learn-follow/SKILL.md +83 -0
  36. package/.codex/skills/learn-investigate/SKILL.md +83 -0
  37. package/.codex/skills/learn-retro/SKILL.md +83 -0
  38. package/.codex/skills/learn-second-opinion/SKILL.md +86 -0
  39. package/.codex/skills/maestro/SKILL.md +151 -279
  40. package/.codex/skills/maestro-analyze/SKILL.md +59 -71
  41. package/.codex/skills/maestro-brainstorm/SKILL.md +452 -463
  42. package/.codex/skills/maestro-chain/SKILL.md +95 -110
  43. package/.codex/skills/maestro-coordinate/SKILL.md +68 -234
  44. package/.codex/skills/maestro-execute/SKILL.md +435 -446
  45. package/.codex/skills/maestro-fork/SKILL.md +98 -0
  46. package/.codex/skills/maestro-init/SKILL.md +172 -167
  47. package/.codex/skills/maestro-learn/SKILL.md +80 -0
  48. package/.codex/skills/maestro-link-coordinate/SKILL.md +224 -220
  49. package/.codex/skills/maestro-merge/SKILL.md +69 -0
  50. package/.codex/skills/maestro-milestone-audit/SKILL.md +108 -103
  51. package/.codex/skills/maestro-milestone-complete/SKILL.md +155 -149
  52. package/.codex/skills/maestro-milestone-release/SKILL.md +70 -0
  53. package/.codex/skills/maestro-overlay/SKILL.md +188 -185
  54. package/.codex/skills/maestro-plan/SKILL.md +58 -69
  55. package/.codex/skills/maestro-quick/SKILL.md +26 -23
  56. package/.codex/skills/maestro-roadmap/SKILL.md +65 -73
  57. package/.codex/skills/maestro-spec-generate/SKILL.md +66 -74
  58. package/.codex/skills/maestro-ui-design/SKILL.md +35 -32
  59. package/.codex/skills/maestro-verify/SKILL.md +556 -566
  60. package/.codex/skills/manage-codebase-rebuild/SKILL.md +397 -405
  61. package/.codex/skills/manage-codebase-refresh/SKILL.md +93 -82
  62. package/.codex/skills/manage-harvest/SKILL.md +82 -0
  63. package/.codex/skills/manage-issue/SKILL.md +80 -65
  64. package/.codex/skills/manage-issue-discover/SKILL.md +491 -503
  65. package/.codex/skills/manage-learn/SKILL.md +190 -186
  66. package/.codex/skills/manage-memory/SKILL.md +95 -72
  67. package/.codex/skills/manage-memory-capture/SKILL.md +99 -86
  68. package/.codex/skills/manage-status/SKILL.md +102 -89
  69. package/.codex/skills/quality-business-test/SKILL.md +228 -223
  70. package/.codex/skills/quality-debug/SKILL.md +54 -66
  71. package/.codex/skills/quality-integration-test/SKILL.md +532 -544
  72. package/.codex/skills/quality-refactor/SKILL.md +197 -191
  73. package/.codex/skills/quality-retrospective/SKILL.md +512 -505
  74. package/.codex/skills/quality-review/SKILL.md +95 -107
  75. package/.codex/skills/quality-sync/SKILL.md +101 -89
  76. package/.codex/skills/quality-test/SKILL.md +202 -198
  77. package/.codex/skills/quality-test-gen/SKILL.md +94 -105
  78. package/.codex/skills/spec-add/SKILL.md +58 -39
  79. package/.codex/skills/spec-load/SKILL.md +45 -40
  80. package/.codex/skills/spec-map/SKILL.md +180 -182
  81. package/.codex/skills/spec-setup/SKILL.md +94 -76
  82. package/.codex/skills/team-coordinate/SKILL.md +346 -357
  83. package/.codex/skills/team-executor/SKILL.md +70 -112
  84. package/.codex/skills/team-lifecycle-v4/SKILL.md +311 -299
  85. package/.codex/skills/team-quality-assurance/SKILL.md +234 -227
  86. package/.codex/skills/team-review/SKILL.md +232 -225
  87. package/.codex/skills/team-tech-debt/SKILL.md +78 -100
  88. package/.codex/skills/team-testing/SKILL.md +242 -235
  89. package/.codex/skills/wiki-connect/SKILL.md +75 -0
  90. package/.codex/skills/wiki-digest/SKILL.md +87 -0
  91. package/README.md +9 -4
  92. package/README.zh-CN.md +9 -4
  93. package/dashboard/dist/assets/{ArtifactsPage-DZNCi6tn.js → ArtifactsPage-CUrrDGgN.js} +1 -1
  94. package/dashboard/dist/assets/ChatInput-pUOLJIKE.js +49 -0
  95. package/dashboard/dist/assets/ChatPage-B8Xqkt0v.js +27 -0
  96. package/dashboard/dist/assets/{CollabPage-B4NAHXS2.js → CollabPage-DIUXeazv.js} +1 -1
  97. package/dashboard/dist/assets/{ExecutionPanel-CFt4LJyq.js → ExecutionPanel-VmYeADFj.js} +1 -1
  98. package/dashboard/dist/assets/KanbanPage-DLq8v7hg.js +21 -0
  99. package/dashboard/dist/assets/{MarkdownRenderer-X4af_WNb.js → MarkdownRenderer-D7AehrnR.js} +1 -1
  100. package/dashboard/dist/assets/{McpPage-BKfCVIyU.js → McpPage-BY0SjTgw.js} +2 -2
  101. package/dashboard/dist/assets/{OutputPanel-BlBQFJSW.js → OutputPanel-B-Rjwgmv.js} +1 -1
  102. package/dashboard/dist/assets/{ProblemsPanel-De3DLvoI.js → ProblemsPanel-GEpF-oi4.js} +1 -1
  103. package/dashboard/dist/assets/RequirementBoardPage-xs8uDM7I.js +6 -0
  104. package/dashboard/dist/assets/{RequirementPage-Bllxe2XI.js → RequirementPage-BKDSFwjA.js} +5 -10
  105. package/dashboard/dist/assets/SpecsPage-DLFb9ZH0.js +36 -0
  106. package/dashboard/dist/assets/SupervisorPage-SOki_kgz.js +6 -0
  107. package/dashboard/dist/assets/TeamsPage-BO2kP70F.js +11 -0
  108. package/dashboard/dist/assets/{TreeBrowser-Q12qobZs.js → TreeBrowser-B9DHdULE.js} +1 -1
  109. package/dashboard/dist/assets/{WorkflowPage-D_Fzdy3_.js → WorkflowPage-C8hWbYim.js} +1 -1
  110. package/dashboard/dist/assets/{check-u6fGOwQO.js → check-DJDk3A2a.js} +1 -1
  111. package/dashboard/dist/assets/{chevron-right-Csu22t58.js → chevron-right-C7bVDreZ.js} +1 -1
  112. package/dashboard/dist/assets/{circle-CMrkbRNg.js → circle-Qfgy4LB_.js} +1 -1
  113. package/dashboard/dist/assets/{circle-alert-c3tH1P4z.js → circle-alert-Na1vf6qQ.js} +1 -1
  114. package/dashboard/dist/assets/{circle-check-gYxxSYuH.js → circle-check-CEGgy3NV.js} +1 -1
  115. package/dashboard/dist/assets/{circle-check-big-TDSeWstm.js → circle-check-big-3JB8zRYj.js} +1 -1
  116. package/dashboard/dist/assets/{code-CFN2uX9V.js → code-Ble63Idz.js} +1 -1
  117. package/dashboard/dist/assets/{columns-3-38xIDlzy.js → columns-3-BUcKlxve.js} +1 -1
  118. package/dashboard/dist/assets/{download-DC7KkKyP.js → download-CMqkfn8x.js} +1 -1
  119. package/dashboard/dist/assets/{folder-CWq_lAnf.js → folder-B9ewx9LL.js} +1 -1
  120. package/dashboard/dist/assets/index-C2Mcb4TJ.js +231 -0
  121. package/dashboard/dist/assets/index-DyBbPc18.css +1 -0
  122. package/dashboard/dist/assets/{index-Do71weNR.js → index-JTmGteaT.js} +1 -1
  123. package/dashboard/dist/assets/{list-CgIP_2A-.js → list-DI8Wn2aT.js} +1 -1
  124. package/dashboard/dist/assets/loader-B5F6PzFT.js +11 -0
  125. package/dashboard/dist/assets/{minus-DYoN5UGk.js → minus-Lp_BfctG.js} +1 -1
  126. package/dashboard/dist/assets/{pen-line-Bh_WKYHm.js → pen-line-Ch7sphzZ.js} +1 -1
  127. package/dashboard/dist/assets/pencil-_yRMHmGT.js +6 -0
  128. package/dashboard/dist/assets/{proxy-BKxDAKTj.js → proxy-D72Y8a4Y.js} +1 -1
  129. package/dashboard/dist/assets/{search-SieXnOgr.js → search-BS6fI6Bg.js} +1 -1
  130. package/dashboard/dist/assets/{shallow-Bme1JY57.js → shallow-BXasQBvr.js} +1 -1
  131. package/dashboard/dist/assets/table-CeGlFjlP.js +6 -0
  132. package/dashboard/dist/assets/{terminal-BB3Xfuv5.js → terminal-BJic2yW-.js} +1 -1
  133. package/dashboard/dist/assets/{trash-2-C8f4vFFM.js → trash-2-Czz4X8Fb.js} +1 -1
  134. package/dashboard/dist/assets/{zap-4uwlzVm0.js → zap-C3H0jVFA.js} +1 -1
  135. package/dashboard/dist/index.html +2 -2
  136. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js +16 -1
  137. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js.map +1 -1
  138. package/dashboard/dist-server/dashboard/src/server/agents/delegate-broker-monitor.js +1 -2
  139. package/dashboard/dist-server/dashboard/src/server/agents/delegate-broker-monitor.js.map +1 -1
  140. package/dashboard/dist-server/dashboard/src/server/commander/commander-prompts.d.ts +1 -1
  141. package/dashboard/dist-server/dashboard/src/server/commander/commander-prompts.js +2 -1
  142. package/dashboard/dist-server/dashboard/src/server/commander/commander-prompts.js.map +1 -1
  143. package/dashboard/dist-server/dashboard/src/server/index.js +3 -0
  144. package/dashboard/dist-server/dashboard/src/server/index.js.map +1 -1
  145. package/dashboard/dist-server/dashboard/src/server/routes/collab.js +124 -0
  146. package/dashboard/dist-server/dashboard/src/server/routes/collab.js.map +1 -1
  147. package/dashboard/dist-server/dashboard/src/server/routes/specs.d.ts +1 -1
  148. package/dashboard/dist-server/dashboard/src/server/routes/specs.js +75 -30
  149. package/dashboard/dist-server/dashboard/src/server/routes/specs.js.map +1 -1
  150. package/dashboard/dist-server/dashboard/src/server/state/event-bus.d.ts +5 -0
  151. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js +5 -0
  152. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js.map +1 -1
  153. package/dashboard/dist-server/dashboard/src/server/ws/handlers/team-handler.d.ts +10 -0
  154. package/dashboard/dist-server/dashboard/src/server/ws/handlers/team-handler.js +73 -0
  155. package/dashboard/dist-server/dashboard/src/server/ws/handlers/team-handler.js.map +1 -0
  156. package/dashboard/dist-server/dashboard/src/shared/collab-types.d.ts +31 -0
  157. package/dashboard/dist-server/dashboard/src/shared/collab-types.js +28 -0
  158. package/dashboard/dist-server/dashboard/src/shared/collab-types.js.map +1 -1
  159. package/dashboard/dist-server/dashboard/src/shared/constants.js +10 -0
  160. package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
  161. package/dashboard/dist-server/dashboard/src/shared/coordinate-types.d.ts +22 -0
  162. package/dashboard/dist-server/dashboard/src/shared/issue-types.d.ts +12 -0
  163. package/dashboard/dist-server/dashboard/src/shared/issue-types.js +12 -0
  164. package/dashboard/dist-server/dashboard/src/shared/issue-types.js.map +1 -1
  165. package/dashboard/dist-server/dashboard/src/shared/team-types.d.ts +22 -0
  166. package/dashboard/dist-server/dashboard/src/shared/team-types.js +7 -0
  167. package/dashboard/dist-server/dashboard/src/shared/team-types.js.map +1 -1
  168. package/dashboard/dist-server/dashboard/src/shared/types.d.ts +3 -2
  169. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.d.ts +28 -2
  170. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.js.map +1 -1
  171. package/dashboard/dist-server/shared/agent-types.d.ts +4 -0
  172. package/dashboard/dist-server/src/hooks/constants.d.ts +3 -1
  173. package/dashboard/dist-server/src/hooks/constants.js +4 -2
  174. package/dashboard/dist-server/src/hooks/constants.js.map +1 -1
  175. package/dist/shared/agent-types.d.ts +4 -0
  176. package/dist/shared/agent-types.d.ts.map +1 -1
  177. package/dist/src/commands/collab.js +4 -4
  178. package/dist/src/commands/collab.js.map +1 -1
  179. package/dist/src/commands/hooks.d.ts.map +1 -1
  180. package/dist/src/commands/hooks.js +66 -1
  181. package/dist/src/commands/hooks.js.map +1 -1
  182. package/dist/src/commands/install-backend.d.ts.map +1 -1
  183. package/dist/src/commands/install-backend.js +29 -18
  184. package/dist/src/commands/install-backend.js.map +1 -1
  185. package/dist/src/commands/spec.d.ts.map +1 -1
  186. package/dist/src/commands/spec.js +7 -2
  187. package/dist/src/commands/spec.js.map +1 -1
  188. package/dist/src/hooks/__tests__/statusline-visual-test.js +23 -1
  189. package/dist/src/hooks/__tests__/statusline-visual-test.js.map +1 -1
  190. package/dist/src/hooks/constants.d.ts +3 -1
  191. package/dist/src/hooks/constants.d.ts.map +1 -1
  192. package/dist/src/hooks/constants.js +4 -2
  193. package/dist/src/hooks/constants.js.map +1 -1
  194. package/dist/src/hooks/guards/index.d.ts +1 -0
  195. package/dist/src/hooks/guards/index.d.ts.map +1 -1
  196. package/dist/src/hooks/guards/index.js +1 -0
  197. package/dist/src/hooks/guards/index.js.map +1 -1
  198. package/dist/src/hooks/guards/spec-validator.d.ts +25 -0
  199. package/dist/src/hooks/guards/spec-validator.d.ts.map +1 -0
  200. package/dist/src/hooks/guards/spec-validator.js +66 -0
  201. package/dist/src/hooks/guards/spec-validator.js.map +1 -0
  202. package/dist/src/hooks/keyword-spec-injector.d.ts +21 -0
  203. package/dist/src/hooks/keyword-spec-injector.d.ts.map +1 -0
  204. package/dist/src/hooks/keyword-spec-injector.js +96 -0
  205. package/dist/src/hooks/keyword-spec-injector.js.map +1 -0
  206. package/dist/src/hooks/plugins/spec-injection-plugin.d.ts +2 -1
  207. package/dist/src/hooks/plugins/spec-injection-plugin.d.ts.map +1 -1
  208. package/dist/src/hooks/plugins/spec-injection-plugin.js +21 -12
  209. package/dist/src/hooks/plugins/spec-injection-plugin.js.map +1 -1
  210. package/dist/src/hooks/skill-context.d.ts +3 -0
  211. package/dist/src/hooks/skill-context.d.ts.map +1 -1
  212. package/dist/src/hooks/skill-context.js +95 -9
  213. package/dist/src/hooks/skill-context.js.map +1 -1
  214. package/dist/src/hooks/spec-bridge.d.ts +40 -0
  215. package/dist/src/hooks/spec-bridge.d.ts.map +1 -0
  216. package/dist/src/hooks/spec-bridge.js +97 -0
  217. package/dist/src/hooks/spec-bridge.js.map +1 -0
  218. package/dist/src/hooks/spec-injector.d.ts.map +1 -1
  219. package/dist/src/hooks/spec-injector.js +18 -12
  220. package/dist/src/hooks/spec-injector.js.map +1 -1
  221. package/dist/src/hooks/statusline.d.ts.map +1 -1
  222. package/dist/src/hooks/statusline.js +6 -3
  223. package/dist/src/hooks/statusline.js.map +1 -1
  224. package/dist/src/team/phase-orchestrator.d.ts +52 -0
  225. package/dist/src/team/phase-orchestrator.d.ts.map +1 -0
  226. package/dist/src/team/phase-orchestrator.js +165 -0
  227. package/dist/src/team/phase-orchestrator.js.map +1 -0
  228. package/dist/src/team/phase-types.d.ts +51 -0
  229. package/dist/src/team/phase-types.d.ts.map +1 -0
  230. package/dist/src/team/phase-types.js +41 -0
  231. package/dist/src/team/phase-types.js.map +1 -0
  232. package/dist/src/tools/index.d.ts.map +1 -1
  233. package/dist/src/tools/index.js +6 -0
  234. package/dist/src/tools/index.js.map +1 -1
  235. package/dist/src/tools/merge-validator.d.ts.map +1 -1
  236. package/dist/src/tools/merge-validator.js +114 -16
  237. package/dist/src/tools/merge-validator.js.map +1 -1
  238. package/dist/src/tools/spec-entry-parser.d.ts +56 -0
  239. package/dist/src/tools/spec-entry-parser.d.ts.map +1 -0
  240. package/dist/src/tools/spec-entry-parser.js +196 -0
  241. package/dist/src/tools/spec-entry-parser.js.map +1 -0
  242. package/dist/src/tools/spec-init.d.ts.map +1 -1
  243. package/dist/src/tools/spec-init.js +66 -92
  244. package/dist/src/tools/spec-init.js.map +1 -1
  245. package/dist/src/tools/spec-keyword-index.d.ts +30 -0
  246. package/dist/src/tools/spec-keyword-index.d.ts.map +1 -0
  247. package/dist/src/tools/spec-keyword-index.js +101 -0
  248. package/dist/src/tools/spec-keyword-index.js.map +1 -0
  249. package/dist/src/tools/spec-loader.d.ts +3 -3
  250. package/dist/src/tools/spec-loader.d.ts.map +1 -1
  251. package/dist/src/tools/spec-loader.js +49 -23
  252. package/dist/src/tools/spec-loader.js.map +1 -1
  253. package/dist/src/tools/team-agents.d.ts +27 -0
  254. package/dist/src/tools/team-agents.d.ts.map +1 -0
  255. package/dist/src/tools/team-agents.js +362 -0
  256. package/dist/src/tools/team-agents.js.map +1 -0
  257. package/dist/src/tools/team-mailbox.d.ts +40 -0
  258. package/dist/src/tools/team-mailbox.d.ts.map +1 -0
  259. package/dist/src/tools/team-mailbox.js +384 -0
  260. package/dist/src/tools/team-mailbox.js.map +1 -0
  261. package/dist/src/tools/team-msg.d.ts +17 -8
  262. package/dist/src/tools/team-msg.d.ts.map +1 -1
  263. package/dist/src/tools/team-msg.js +110 -13
  264. package/dist/src/tools/team-msg.js.map +1 -1
  265. package/dist/src/tools/team-tasks-mcp.d.ts +27 -0
  266. package/dist/src/tools/team-tasks-mcp.d.ts.map +1 -0
  267. package/dist/src/tools/team-tasks-mcp.js +408 -0
  268. package/dist/src/tools/team-tasks-mcp.js.map +1 -0
  269. package/package.json +2 -1
  270. package/shared/agent-types.ts +4 -0
  271. package/templates/worktree-scope.json +9 -10
  272. package/templates/worktrees.json +26 -27
  273. package/workflows/analyze.md +816 -816
  274. package/workflows/brainstorm.md +480 -471
  275. package/workflows/codebase-rebuild.md +332 -332
  276. package/workflows/codebase-refresh.md +240 -240
  277. package/workflows/debug.md +16 -6
  278. package/workflows/execute.md +1 -1
  279. package/workflows/fork.md +100 -36
  280. package/workflows/harvest.md +420 -420
  281. package/workflows/integration-test.md +355 -343
  282. package/workflows/issue-discover.md +414 -414
  283. package/workflows/issue.md +14 -4
  284. package/workflows/learn.md +19 -5
  285. package/workflows/maestro.md +1 -0
  286. package/workflows/map.md +111 -111
  287. package/workflows/merge.md +113 -55
  288. package/workflows/milestone-complete.md +176 -176
  289. package/workflows/plan.md +1 -1
  290. package/workflows/quick.md +497 -497
  291. package/workflows/refactor.md +300 -300
  292. package/workflows/retrospective.md +61 -22
  293. package/workflows/review.md +17 -4
  294. package/workflows/roadmap.md +335 -335
  295. package/workflows/spec-generate.md +640 -640
  296. package/workflows/specs-add.md +46 -81
  297. package/workflows/specs-load.md +15 -17
  298. package/workflows/specs-setup.md +40 -161
  299. package/workflows/test.md +12 -2
  300. package/workflows/ui-style.md +9 -2
  301. package/dashboard/dist/assets/ChatInput-Bvr-FeEq.js +0 -49
  302. package/dashboard/dist/assets/ChatPage-D9zTkJZo.js +0 -22
  303. package/dashboard/dist/assets/KanbanPage-C8USth6H.js +0 -21
  304. package/dashboard/dist/assets/RequirementBoardPage-Bf1trzqs.js +0 -11
  305. package/dashboard/dist/assets/SpecsPage-9lwxKT27.js +0 -36
  306. package/dashboard/dist/assets/SupervisorPage-SusdfHFq.js +0 -6
  307. package/dashboard/dist/assets/TeamsPage-DsuM6OwC.js +0 -6
  308. package/dashboard/dist/assets/arrow-left-Bqtb2hle.js +0 -6
  309. package/dashboard/dist/assets/index-DWG-WrzT.js +0 -231
  310. package/dashboard/dist/assets/index-GUNJodSR.css +0 -1
  311. package/dashboard/dist/assets/table-llyEtj-7.js +0 -6
@@ -0,0 +1,384 @@
1
+ /**
2
+ * Team Mailbox - MCP tools for agent-to-agent messaging with delivery tracking
3
+ *
4
+ * Tools:
5
+ * - team_send_message: Send a message to a team role (persists to JSONL + broker inject)
6
+ * - team_read_mailbox: Read unread messages for a role, mark as delivered
7
+ * - team_mailbox_status: Per-role unread/pending/delivered counts
8
+ *
9
+ * Storage: .workflow/.team/{session-id}/.msg/mailbox.jsonl
10
+ *
11
+ * Integration points for TASK-001 (team-msg dispatch upgrade):
12
+ * - opReadMailbox: reads messages addressed to a role
13
+ * - opGetMailboxStatus: aggregates per-role delivery counts
14
+ * - delivery_method field on opLog messages
15
+ */
16
+ import { z } from 'zod';
17
+ import { existsSync, mkdirSync, readFileSync, appendFileSync, writeFileSync } from 'fs';
18
+ import { join, dirname } from 'path';
19
+ import { getProjectRoot } from '../utils/path-validator.js';
20
+ import { createDefaultDelegateBroker } from '../async/delegate-broker.js';
21
+ // --- Storage helpers ---
22
+ function getMailboxDir(sessionId) {
23
+ const root = getProjectRoot();
24
+ return join(root, '.workflow', '.team', sessionId, '.msg');
25
+ }
26
+ function getMailboxPath(sessionId) {
27
+ return join(getMailboxDir(sessionId), 'mailbox.jsonl');
28
+ }
29
+ function ensureMailboxFile(sessionId) {
30
+ const mailboxPath = getMailboxPath(sessionId);
31
+ const dir = dirname(mailboxPath);
32
+ if (!existsSync(dir)) {
33
+ mkdirSync(dir, { recursive: true });
34
+ }
35
+ if (!existsSync(mailboxPath)) {
36
+ appendFileSync(mailboxPath, '', 'utf-8');
37
+ }
38
+ return mailboxPath;
39
+ }
40
+ function readAllMailboxMessages(sessionId) {
41
+ const mailboxPath = getMailboxPath(sessionId);
42
+ if (!existsSync(mailboxPath))
43
+ return [];
44
+ const content = readFileSync(mailboxPath, 'utf-8').trim();
45
+ if (!content)
46
+ return [];
47
+ return content.split('\n').map(line => {
48
+ try {
49
+ return JSON.parse(line);
50
+ }
51
+ catch {
52
+ return null;
53
+ }
54
+ }).filter((m) => m !== null);
55
+ }
56
+ function writeAllMailboxMessages(sessionId, messages) {
57
+ const mailboxPath = ensureMailboxFile(sessionId);
58
+ writeFileSync(mailboxPath, messages.map(m => JSON.stringify(m)).join('\n') + (messages.length > 0 ? '\n' : ''), 'utf-8');
59
+ }
60
+ function getNextMailboxId(messages) {
61
+ const maxNum = messages.reduce((max, m) => {
62
+ const match = m.id.match(/^MBX-(\d+)$/);
63
+ return match ? Math.max(max, parseInt(match[1], 10)) : max;
64
+ }, 0);
65
+ return `MBX-${String(maxNum + 1).padStart(3, '0')}`;
66
+ }
67
+ function nowISO() {
68
+ return new Date().toISOString().replace('Z', '+00:00');
69
+ }
70
+ // --- Broker integration ---
71
+ /**
72
+ * Attempt to inject a message into a running delegate agent via the broker.
73
+ * Returns true if injection was attempted (even if the job was not found),
74
+ * false only if broker itself was unavailable.
75
+ */
76
+ function attemptBrokerInject(jobId, message) {
77
+ try {
78
+ const broker = createDefaultDelegateBroker();
79
+ const job = broker.getJob(jobId);
80
+ if (!job) {
81
+ return { attempted: false, result: `No running job found for: ${jobId}` };
82
+ }
83
+ if (job.status === 'completed' || job.status === 'failed' || job.status === 'cancelled') {
84
+ return { attempted: false, result: `Job ${jobId} is ${job.status}, message persisted for polling` };
85
+ }
86
+ const queued = broker.queueMessage({
87
+ jobId,
88
+ message,
89
+ delivery: 'inject',
90
+ });
91
+ return { attempted: true, result: `Injected into job ${jobId} as ${queued.messageId}` };
92
+ }
93
+ catch (error) {
94
+ return { attempted: false, result: `Broker error: ${error.message}` };
95
+ }
96
+ }
97
+ // --- Zod Schemas ---
98
+ const SendMessageSchema = z.object({
99
+ session_id: z.string().describe('Session ID that determines mailbox storage path'),
100
+ from: z.string().describe('Sender role name'),
101
+ to: z.string().describe('Recipient role name'),
102
+ message: z.string().describe('Message content to send'),
103
+ type: z.string().optional().describe('Message type (default: "message")'),
104
+ delivery_method: z.enum(['inject', 'poll', 'broadcast']).optional().default('inject').describe('Delivery method (default: "inject")'),
105
+ data: z.record(z.string(), z.unknown()).optional().describe('Structured data payload'),
106
+ });
107
+ const ReadMailboxSchema = z.object({
108
+ session_id: z.string().describe('Session ID that determines mailbox storage path'),
109
+ role: z.string().describe('Role name to read mailbox for'),
110
+ limit: z.number().min(1).max(100).optional().default(50).describe('Max messages to return (default: 50)'),
111
+ mark_delivered: z.boolean().optional().default(true).describe('Mark returned messages as delivered (default: true)'),
112
+ });
113
+ const MailboxStatusSchema = z.object({
114
+ session_id: z.string().describe('Session ID that determines mailbox storage path'),
115
+ });
116
+ // --- Operations ---
117
+ function opSendMessage(params) {
118
+ const { session_id, from, to, message, type, delivery_method, data } = params;
119
+ ensureMailboxFile(session_id);
120
+ const messages = readAllMailboxMessages(session_id);
121
+ const id = getNextMailboxId(messages);
122
+ const ts = nowISO();
123
+ const mailboxMsg = {
124
+ id,
125
+ ts,
126
+ from,
127
+ to,
128
+ type: type || 'message',
129
+ message,
130
+ delivery_method,
131
+ delivery_status: 'pending',
132
+ };
133
+ if (data)
134
+ mailboxMsg.data = data;
135
+ // Persist to JSONL
136
+ const mailboxPath = ensureMailboxFile(session_id);
137
+ appendFileSync(mailboxPath, JSON.stringify(mailboxMsg) + '\n', 'utf-8');
138
+ // Attempt broker injection for 'inject' delivery method
139
+ let injectResult = null;
140
+ if (delivery_method === 'inject') {
141
+ // Derive job ID from role name convention: {session_id}-{role}
142
+ const jobId = `${session_id}-${to}`;
143
+ injectResult = attemptBrokerInject(jobId, message);
144
+ // Update delivery status based on injection result
145
+ if (injectResult.attempted) {
146
+ const allMessages = readAllMailboxMessages(session_id);
147
+ const saved = allMessages.find(m => m.id === id);
148
+ if (saved) {
149
+ saved.delivery_status = 'notified';
150
+ writeAllMailboxMessages(session_id, allMessages);
151
+ }
152
+ }
153
+ }
154
+ const statusLine = injectResult
155
+ ? ` | inject: ${injectResult.result}`
156
+ : '';
157
+ return {
158
+ success: true,
159
+ result: {
160
+ id,
161
+ message: `Sent ${id}: [${from} -> ${to}] ${message.substring(0, 80)}${message.length > 80 ? '...' : ''}${statusLine}`,
162
+ delivery_method,
163
+ delivery_status: injectResult?.attempted ? 'notified' : 'pending',
164
+ },
165
+ };
166
+ }
167
+ function opReadMailbox(params) {
168
+ const { session_id, role, limit, mark_delivered } = params;
169
+ const allMessages = readAllMailboxMessages(session_id);
170
+ const unread = allMessages.filter(m => m.to === role && m.delivery_status !== 'delivered');
171
+ const toReturn = unread.slice(0, limit || 50);
172
+ if (mark_delivered && toReturn.length > 0) {
173
+ const now = nowISO();
174
+ const deliveredIds = new Set(toReturn.map(m => m.id));
175
+ for (const msg of allMessages) {
176
+ if (deliveredIds.has(msg.id)) {
177
+ msg.delivery_status = 'delivered';
178
+ msg.delivered_at = now;
179
+ }
180
+ }
181
+ writeAllMailboxMessages(session_id, allMessages);
182
+ }
183
+ const formatted = toReturn.map(m => `${m.id} [${m.ts.substring(11, 19)}] ${m.from} -> ${m.to} (${m.type}) ${m.message.substring(0, 100)}`);
184
+ return {
185
+ success: true,
186
+ result: {
187
+ role,
188
+ unread_count: toReturn.length,
189
+ total_pending: unread.length,
190
+ messages: toReturn,
191
+ formatted: formatted.join('\n'),
192
+ },
193
+ };
194
+ }
195
+ function opMailboxStatus(params) {
196
+ const { session_id } = params;
197
+ const allMessages = readAllMailboxMessages(session_id);
198
+ if (allMessages.length === 0) {
199
+ return {
200
+ success: true,
201
+ result: {
202
+ roles: [],
203
+ total_messages: 0,
204
+ summary: 'No mailbox messages recorded yet.',
205
+ },
206
+ };
207
+ }
208
+ // Aggregate per-role counts
209
+ const roleMap = new Map();
210
+ for (const msg of allMessages) {
211
+ // Count by recipient role
212
+ if (!roleMap.has(msg.to)) {
213
+ roleMap.set(msg.to, { role: msg.to, pending: 0, notified: 0, delivered: 0, failed: 0 });
214
+ }
215
+ const entry = roleMap.get(msg.to);
216
+ switch (msg.delivery_status) {
217
+ case 'pending':
218
+ entry.pending++;
219
+ break;
220
+ case 'notified':
221
+ entry.notified++;
222
+ break;
223
+ case 'delivered':
224
+ entry.delivered++;
225
+ break;
226
+ case 'failed':
227
+ entry.failed++;
228
+ break;
229
+ }
230
+ }
231
+ const roles = Array.from(roleMap.values());
232
+ const formatted = roles.map(r => `${r.role.padEnd(12)} | pending: ${r.pending} | notified: ${r.notified} | delivered: ${r.delivered} | failed: ${r.failed}`).join('\n');
233
+ return {
234
+ success: true,
235
+ result: {
236
+ roles,
237
+ total_messages: allMessages.length,
238
+ formatted,
239
+ },
240
+ };
241
+ }
242
+ // --- Tool Schema ---
243
+ export const schema = {
244
+ name: 'team_mailbox',
245
+ description: `Team mailbox - agent-to-agent messaging with delivery tracking and broker injection.
246
+
247
+ **Storage Location:** .workflow/.team/{session-id}/.msg/mailbox.jsonl
248
+
249
+ **Operations & Required Parameters:**
250
+
251
+ * **send**: Send a message to a team role.
252
+ * **session_id** (string, **REQUIRED**): Session ID.
253
+ * **from** (string, **REQUIRED**): Sender role name.
254
+ * **to** (string, **REQUIRED**): Recipient role name.
255
+ * **message** (string, **REQUIRED**): Message content.
256
+ * *type* (string): Message type (default: "message").
257
+ * *delivery_method* (string): "inject" | "poll" | "broadcast" (default: "inject").
258
+ * *data* (object): Structured data payload.
259
+
260
+ * **read**: Read unread messages for a role and mark as delivered.
261
+ * **session_id** (string, **REQUIRED**): Session ID.
262
+ * **role** (string, **REQUIRED**): Role name to read mailbox for.
263
+ * *limit* (number): Max messages to return (default: 50).
264
+ * *mark_delivered* (boolean): Mark messages as delivered (default: true).
265
+
266
+ * **status**: Per-role unread/delivered counts.
267
+ * **session_id** (string, **REQUIRED**): Session ID.`,
268
+ inputSchema: {
269
+ type: 'object',
270
+ properties: {
271
+ operation: {
272
+ type: 'string',
273
+ enum: ['send', 'read', 'status'],
274
+ description: 'Operation to perform',
275
+ },
276
+ session_id: {
277
+ type: 'string',
278
+ description: 'Session ID (e.g., TLS-my-project-2026-02-27)',
279
+ },
280
+ from: {
281
+ type: 'string',
282
+ description: '[send] Sender role name',
283
+ },
284
+ to: {
285
+ type: 'string',
286
+ description: '[send] Recipient role name',
287
+ },
288
+ message: {
289
+ type: 'string',
290
+ description: '[send] Message content',
291
+ },
292
+ type: {
293
+ type: 'string',
294
+ description: '[send] Message type (default: "message")',
295
+ },
296
+ delivery_method: {
297
+ type: 'string',
298
+ enum: ['inject', 'poll', 'broadcast'],
299
+ description: '[send] Delivery method (default: "inject")',
300
+ },
301
+ data: {
302
+ type: 'object',
303
+ description: '[send] Structured data payload',
304
+ },
305
+ role: {
306
+ type: 'string',
307
+ description: '[read] Role name to read mailbox for',
308
+ },
309
+ limit: {
310
+ type: 'number',
311
+ description: '[read] Max messages to return (default: 50)',
312
+ minimum: 1,
313
+ maximum: 100,
314
+ },
315
+ mark_delivered: {
316
+ type: 'boolean',
317
+ description: '[read] Mark returned messages as delivered (default: true)',
318
+ },
319
+ },
320
+ required: ['operation'],
321
+ },
322
+ };
323
+ // --- Unified Params Schema for dispatch ---
324
+ const DispatchParamsSchema = z.object({
325
+ operation: z.enum(['send', 'read', 'status']),
326
+ // send params
327
+ session_id: z.string().optional(),
328
+ from: z.string().optional(),
329
+ to: z.string().optional(),
330
+ message: z.string().optional(),
331
+ type: z.string().optional(),
332
+ delivery_method: z.enum(['inject', 'poll', 'broadcast']).optional(),
333
+ data: z.record(z.string(), z.unknown()).optional(),
334
+ // read params
335
+ role: z.string().optional(),
336
+ limit: z.number().min(1).max(100).optional(),
337
+ mark_delivered: z.boolean().optional(),
338
+ });
339
+ // --- Handler ---
340
+ export async function handler(params) {
341
+ const parsed = DispatchParamsSchema.safeParse(params);
342
+ if (!parsed.success) {
343
+ return { success: false, error: `Invalid params: ${parsed.error.message}` };
344
+ }
345
+ const p = parsed.data;
346
+ if (!p.session_id) {
347
+ return { success: false, error: 'Missing required parameter: session_id' };
348
+ }
349
+ switch (p.operation) {
350
+ case 'send': {
351
+ if (!p.from)
352
+ return { success: false, error: 'send requires "from"' };
353
+ if (!p.to)
354
+ return { success: false, error: 'send requires "to"' };
355
+ if (!p.message)
356
+ return { success: false, error: 'send requires "message"' };
357
+ return opSendMessage({
358
+ session_id: p.session_id,
359
+ from: p.from,
360
+ to: p.to,
361
+ message: p.message,
362
+ type: p.type || 'message',
363
+ delivery_method: p.delivery_method || 'inject',
364
+ data: p.data,
365
+ });
366
+ }
367
+ case 'read': {
368
+ if (!p.role)
369
+ return { success: false, error: 'read requires "role"' };
370
+ return opReadMailbox({
371
+ session_id: p.session_id,
372
+ role: p.role,
373
+ limit: p.limit || 50,
374
+ mark_delivered: p.mark_delivered !== false,
375
+ });
376
+ }
377
+ case 'status': {
378
+ return opMailboxStatus({ session_id: p.session_id });
379
+ }
380
+ default:
381
+ return { success: false, error: `Unknown operation: ${p.operation}` };
382
+ }
383
+ }
384
+ //# sourceMappingURL=team-mailbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-mailbox.js","sourceRoot":"","sources":["../../../src/tools/team-mailbox.ts"],"names":[],"mappings":"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"}
@@ -2,14 +2,16 @@
2
2
  * Team Message Bus - JSONL-based persistent message log for Agent Teams
3
3
  *
4
4
  * Operations:
5
- * - log: Append a message (to defaults to "coordinator", summary auto-generated if omitted)
6
- * - read: Read message(s) by ID
7
- * - list: List recent messages with optional filters (from/to/type/last N)
8
- * - status: Summarize team member activity from message history
9
- * - delete: Delete a specific message by ID
10
- * - clear: Clear all messages for a team
11
- * - broadcast: Log a message with to="all"
12
- * - get_state: Read role state from meta.json
5
+ * - log: Append a message (to defaults to "coordinator", summary auto-generated if omitted)
6
+ * - read: Read message(s) by ID
7
+ * - list: List recent messages with optional filters (from/to/type/last N)
8
+ * - status: Summarize team member activity from message history
9
+ * - delete: Delete a specific message by ID
10
+ * - clear: Clear all messages for a team
11
+ * - broadcast: Log a message with to="all"
12
+ * - get_state: Read role state from meta.json
13
+ * - read_mailbox: Read unread messages for a role and mark them as delivered
14
+ * - mailbox_status: Return counts of pending/notified/delivered/failed per role
13
15
  */
14
16
  import type { ToolSchema, CcwToolResult } from '../types/tool-schema.js';
15
17
  export interface TeamMeta {
@@ -29,6 +31,8 @@ export declare function readTeamMeta(team: string): TeamMeta | null;
29
31
  export declare function writeTeamMeta(team: string, meta: TeamMeta): void;
30
32
  export declare function inferTeamStatus(team: string): TeamMeta['status'];
31
33
  export declare function getEffectiveTeamMeta(team: string): TeamMeta;
34
+ /** Dispatch status lifecycle: pending -> notified -> delivered (or failed) */
35
+ export type DispatchStatus = 'pending' | 'notified' | 'delivered' | 'failed';
32
36
  export interface TeamMessage {
33
37
  id: string;
34
38
  ts: string;
@@ -37,6 +41,11 @@ export interface TeamMessage {
37
41
  type: string;
38
42
  summary: string;
39
43
  data?: Record<string, unknown>;
44
+ dispatch_status?: DispatchStatus;
45
+ delivery_method?: string;
46
+ notified_at?: string;
47
+ delivered_at?: string;
48
+ failed_at?: string;
40
49
  }
41
50
  export interface StatusEntry {
42
51
  member: string;
@@ -1 +1 @@
1
- {"version":3,"file":"team-msg.d.ts","sourceRoot":"","sources":["../../../src/tools/team-msg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAOzE,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAQ1D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAMhE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAKhE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CA4C3D;AA+CD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AA4BD,eAAO,MAAM,MAAM,EAAE,UAmEpB,CAAC;AAIF,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAO/D;AAkBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,CAc7D;AAoMD,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAyBrF"}
1
+ {"version":3,"file":"team-msg.d.ts","sourceRoot":"","sources":["../../../src/tools/team-msg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAOzE,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAQ1D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAMhE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAKhE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CA4C3D;AA+CD,8EAA8E;AAC9E,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE7E,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AA6BD,eAAO,MAAM,MAAM,EAAE,UA4EpB,CAAC;AAIF,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAO/D;AAkBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,CAc7D;AAqSD,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CA2BrF"}
@@ -2,14 +2,16 @@
2
2
  * Team Message Bus - JSONL-based persistent message log for Agent Teams
3
3
  *
4
4
  * Operations:
5
- * - log: Append a message (to defaults to "coordinator", summary auto-generated if omitted)
6
- * - read: Read message(s) by ID
7
- * - list: List recent messages with optional filters (from/to/type/last N)
8
- * - status: Summarize team member activity from message history
9
- * - delete: Delete a specific message by ID
10
- * - clear: Clear all messages for a team
11
- * - broadcast: Log a message with to="all"
12
- * - get_state: Read role state from meta.json
5
+ * - log: Append a message (to defaults to "coordinator", summary auto-generated if omitted)
6
+ * - read: Read message(s) by ID
7
+ * - list: List recent messages with optional filters (from/to/type/last N)
8
+ * - status: Summarize team member activity from message history
9
+ * - delete: Delete a specific message by ID
10
+ * - clear: Clear all messages for a team
11
+ * - broadcast: Log a message with to="all"
12
+ * - get_state: Read role state from meta.json
13
+ * - read_mailbox: Read unread messages for a role and mark them as delivered
14
+ * - mailbox_status: Return counts of pending/notified/delivered/failed per role
13
15
  */
14
16
  import { z } from 'zod';
15
17
  import { existsSync, mkdirSync, readFileSync, appendFileSync, writeFileSync, rmSync, statSync } from 'fs';
@@ -136,7 +138,7 @@ function readLegacyFiles(team) {
136
138
  }
137
139
  // --- Zod Schema ---
138
140
  const ParamsSchema = z.object({
139
- operation: z.enum(['log', 'read', 'list', 'status', 'delete', 'clear', 'broadcast', 'get_state']).describe('Operation to perform'),
141
+ operation: z.enum(['log', 'read', 'list', 'status', 'delete', 'clear', 'broadcast', 'get_state', 'read_mailbox', 'mailbox_status']).describe('Operation to perform'),
140
142
  session_id: z.string().optional().describe('Session ID that determines message storage path'),
141
143
  team_session_id: z.string().optional().describe('[deprecated] Use session_id'),
142
144
  team: z.string().optional().describe('[deprecated] Use session_id'),
@@ -147,8 +149,9 @@ const ParamsSchema = z.object({
147
149
  data: z.record(z.string(), z.unknown()).optional().describe('[log/broadcast] Structured data payload'),
148
150
  id: z.string().optional().describe('[read/delete] Message ID'),
149
151
  last: z.number().min(1).max(100).optional().describe('[list] Return last N messages'),
150
- role: z.string().optional().describe('[get_state] Role name to query'),
152
+ role: z.string().optional().describe('[get_state/read_mailbox] Role name to query'),
151
153
  ref: z.string().optional().describe('[deprecated] Use data.ref instead'),
154
+ delivery_method: z.string().optional().describe('[log] Delivery method for dispatch tracking'),
152
155
  });
153
156
  function resolveTeamId(params) {
154
157
  return params.session_id || params.team_session_id || params.team || null;
@@ -169,6 +172,7 @@ export const schema = {
169
172
  * *type* (string): Message type (default: "message").
170
173
  * *summary* (string): One-line summary (auto-generated if omitted).
171
174
  * *data* (object): Structured data payload.
175
+ * *delivery_method* (string): Delivery method for dispatch tracking.
172
176
 
173
177
  * **broadcast**: Send message to all team members.
174
178
  * **session_id** (string, **REQUIRED**): Session ID.
@@ -189,6 +193,13 @@ export const schema = {
189
193
  * **session_id** (string, **REQUIRED**): Session ID.
190
194
  * *role* (string): Role name to query.
191
195
 
196
+ * **read_mailbox**: Read unread messages for a role and mark them delivered.
197
+ * **session_id** (string, **REQUIRED**): Session ID.
198
+ * **role** (string, **REQUIRED**): Role name whose mailbox to read.
199
+
200
+ * **mailbox_status**: Return dispatch status counts per role.
201
+ * **session_id** (string, **REQUIRED**): Session ID.
202
+
192
203
  * **delete**: Delete a message by ID.
193
204
  * **session_id** (string, **REQUIRED**): Session ID.
194
205
  * **id** (string, **REQUIRED**): Message ID.
@@ -200,7 +211,7 @@ export const schema = {
200
211
  properties: {
201
212
  operation: {
202
213
  type: 'string',
203
- enum: ['log', 'read', 'list', 'status', 'delete', 'clear', 'broadcast', 'get_state'],
214
+ enum: ['log', 'read', 'list', 'status', 'delete', 'clear', 'broadcast', 'get_state', 'read_mailbox', 'mailbox_status'],
204
215
  description: 'Operation to perform',
205
216
  },
206
217
  session_id: {
@@ -214,7 +225,8 @@ export const schema = {
214
225
  data: { type: 'object', description: '[log/broadcast] Structured data' },
215
226
  id: { type: 'string', description: '[read/delete] Message ID' },
216
227
  last: { type: 'number', description: '[list] Last N messages', minimum: 1, maximum: 100 },
217
- role: { type: 'string', description: '[get_state] Role name to query' },
228
+ role: { type: 'string', description: '[get_state/read_mailbox] Role name to query' },
229
+ delivery_method: { type: 'string', description: '[log] Delivery method for dispatch tracking' },
218
230
  team_session_id: { type: 'string', description: '[deprecated] Use session_id' },
219
231
  team: { type: 'string', description: '[deprecated] Use session_id' },
220
232
  ref: { type: 'string', description: '[deprecated] Use data.ref instead' },
@@ -290,16 +302,27 @@ function opLog(params, teamId) {
290
302
  const logPath = ensureLogFile(teamId);
291
303
  const messages = readAllMessages(teamId);
292
304
  const id = getNextId(messages);
305
+ const now = nowISO();
306
+ // When delivery_method is provided, the message starts as 'pending' (explicit delivery).
307
+ // When no delivery_method, it's a legacy direct message and defaults to 'delivered'.
308
+ const dispatchStatus = params.delivery_method ? 'pending' : 'delivered';
293
309
  const msg = {
294
310
  id,
295
- ts: nowISO(),
311
+ ts: now,
296
312
  from: params.from,
297
313
  to,
298
314
  type: params.type || 'message',
299
315
  summary,
316
+ dispatch_status: dispatchStatus,
300
317
  };
301
318
  if (params.data)
302
319
  msg.data = params.data;
320
+ if (params.delivery_method)
321
+ msg.delivery_method = params.delivery_method;
322
+ // Set delivered_at for legacy messages (backward compat)
323
+ if (dispatchStatus === 'delivered') {
324
+ msg.delivered_at = now;
325
+ }
303
326
  appendFileSync(logPath, JSON.stringify(msg) + '\n', 'utf-8');
304
327
  if (params.type === 'state_update' && params.data) {
305
328
  const meta = getEffectiveTeamMeta(teamId);
@@ -422,6 +445,78 @@ function opClear(params, teamId) {
422
445
  rmSync(dir, { recursive: true, force: true });
423
446
  return { success: true, result: { cleared: count, message: `Cleared ${count} messages for team "${teamId}".` } };
424
447
  }
448
+ /** Rewrite all messages to the JSONL file (used for batch status updates). */
449
+ function writeAllMessages(teamId, messages) {
450
+ const logPath = ensureLogFile(teamId);
451
+ writeFileSync(logPath, messages.map(m => JSON.stringify(m)).join('\n') + (messages.length > 0 ? '\n' : ''), 'utf-8');
452
+ }
453
+ function opReadMailbox(params, teamId) {
454
+ if (!params.role)
455
+ return { success: false, error: 'read_mailbox requires "role"' };
456
+ const messages = readAllMessages(teamId);
457
+ const now = nowISO();
458
+ // Find messages addressed to this role that are pending or notified (unread)
459
+ const unreadStatuses = ['pending', 'notified'];
460
+ const unreadIndices = [];
461
+ const unreadMessages = [];
462
+ for (let i = 0; i < messages.length; i++) {
463
+ const m = messages[i];
464
+ if (m.to === params.role && unreadStatuses.includes(m.dispatch_status ?? 'delivered')) {
465
+ unreadIndices.push(i);
466
+ unreadMessages.push(m);
467
+ }
468
+ }
469
+ // Batch-update dispatch_status to 'delivered' with delivered_at timestamp
470
+ if (unreadIndices.length > 0) {
471
+ for (const idx of unreadIndices) {
472
+ messages[idx] = {
473
+ ...messages[idx],
474
+ dispatch_status: 'delivered',
475
+ delivered_at: now,
476
+ };
477
+ }
478
+ writeAllMessages(teamId, messages);
479
+ }
480
+ return {
481
+ success: true,
482
+ result: {
483
+ role: params.role,
484
+ count: unreadMessages.length,
485
+ messages: unreadMessages,
486
+ formatted: unreadMessages.length > 0
487
+ ? unreadMessages.map(m => `${m.id} [${m.ts.substring(11, 19)}] ${m.from} → ${m.to} (${m.type}) ${m.summary}`).join('\n')
488
+ : `No unread messages for role "${params.role}".`,
489
+ },
490
+ };
491
+ }
492
+ function opMailboxStatus(params, teamId) {
493
+ const messages = readAllMessages(teamId);
494
+ // Group dispatch counts by role (using the "to" field)
495
+ const counts = {};
496
+ for (const msg of messages) {
497
+ const role = msg.to;
498
+ if (!counts[role]) {
499
+ counts[role] = { pending: 0, notified: 0, delivered: 0, failed: 0 };
500
+ }
501
+ // Backward compat: messages without dispatch_status default to 'delivered'
502
+ const status = msg.dispatch_status ?? 'delivered';
503
+ counts[role][status]++;
504
+ }
505
+ // Format as a summary table
506
+ const roles = Object.keys(counts).sort();
507
+ const formatted = roles.map(role => {
508
+ const c = counts[role];
509
+ return `${role.padEnd(12)} | pending: ${c.pending} | notified: ${c.notified} | delivered: ${c.delivered} | failed: ${c.failed}`;
510
+ }).join('\n');
511
+ return {
512
+ success: true,
513
+ result: {
514
+ roles: counts,
515
+ total_messages: messages.length,
516
+ formatted: formatted || 'No messages recorded yet.',
517
+ },
518
+ };
519
+ }
425
520
  // --- Handler ---
426
521
  export async function handler(params) {
427
522
  const parsed = ParamsSchema.safeParse(params);
@@ -442,6 +537,8 @@ export async function handler(params) {
442
537
  case 'clear': return opClear(p, teamId);
443
538
  case 'broadcast': return opBroadcast(p, teamId);
444
539
  case 'get_state': return opGetState(p, teamId);
540
+ case 'read_mailbox': return opReadMailbox(p, teamId);
541
+ case 'mailbox_status': return opMailboxStatus(p, teamId);
445
542
  default:
446
543
  return { success: false, error: `Unknown operation: ${p.operation}` };
447
544
  }