maestro-flow 0.3.14 → 0.3.16

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 (392) hide show
  1. package/.claude/commands/maestro-amend.md +300 -0
  2. package/.claude/commands/maestro-analyze.md +1 -49
  3. package/.claude/commands/maestro-composer.md +354 -0
  4. package/.claude/commands/maestro-execute.md +2 -56
  5. package/.claude/commands/maestro-fork.md +3 -50
  6. package/.claude/commands/maestro-merge.md +2 -26
  7. package/.claude/commands/maestro-milestone-audit.md +1 -5
  8. package/.claude/commands/maestro-milestone-complete.md +1 -7
  9. package/.claude/commands/maestro-plan.md +6 -127
  10. package/.claude/commands/maestro-player.md +404 -0
  11. package/.claude/commands/maestro-roadmap.md +3 -101
  12. package/.claude/commands/maestro-spec-generate.md +1 -25
  13. package/.claude/commands/maestro-ui-design.md +14 -73
  14. package/.claude/commands/maestro-verify.md +1 -32
  15. package/.claude/commands/maestro.md +13 -30
  16. package/.claude/commands/manage-harvest.md +7 -44
  17. package/.claude/commands/manage-knowhow-capture.md +193 -0
  18. package/.claude/commands/{manage-memory.md → manage-knowhow.md} +77 -88
  19. package/.claude/commands/manage-learn.md +3 -28
  20. package/.claude/commands/manage-status.md +1 -20
  21. package/.claude/commands/manage-wiki.md +1 -1
  22. package/.claude/commands/quality-business-test.md +1 -1
  23. package/.claude/commands/quality-debug.md +3 -18
  24. package/.claude/commands/quality-integration-test.md +3 -23
  25. package/.claude/commands/quality-retrospective.md +1 -28
  26. package/.claude/commands/quality-review.md +3 -52
  27. package/.claude/commands/quality-test-gen.md +1 -10
  28. package/.claude/commands/quality-test.md +3 -25
  29. package/.claude/commands/spec-add.md +1 -21
  30. package/.claude/commands/spec-load.md +1 -16
  31. package/.claude/commands/wiki-connect.md +2 -112
  32. package/.claude/commands/wiki-digest.md +2 -141
  33. package/.claude/skills/skill-iter-tune/SKILL.md +382 -0
  34. package/.claude/skills/skill-iter-tune/phases/01-setup.md +144 -0
  35. package/.claude/skills/skill-iter-tune/phases/02-execute.md +292 -0
  36. package/.claude/skills/skill-iter-tune/phases/03-evaluate.md +312 -0
  37. package/.claude/skills/skill-iter-tune/phases/04-improve.md +186 -0
  38. package/.claude/skills/skill-iter-tune/phases/05-report.md +166 -0
  39. package/.claude/skills/skill-iter-tune/specs/evaluation-criteria.md +63 -0
  40. package/.claude/skills/skill-iter-tune/templates/eval-prompt.md +134 -0
  41. package/.claude/skills/skill-iter-tune/templates/execute-prompt.md +97 -0
  42. package/.claude/skills/workflow-skill-designer/SKILL.md +496 -0
  43. package/.claude/skills/workflow-skill-designer/phases/01-requirements-analysis.md +356 -0
  44. package/.claude/skills/workflow-skill-designer/phases/02-orchestrator-design.md +444 -0
  45. package/.claude/skills/workflow-skill-designer/phases/03-phase-design.md +458 -0
  46. package/.claude/skills/workflow-skill-designer/phases/04-validation.md +471 -0
  47. package/.codex/skills/learn-decompose/SKILL.md +2 -8
  48. package/.codex/skills/maestro/SKILL.md +60 -146
  49. package/.codex/skills/maestro-analyze/SKILL.md +52 -150
  50. package/.codex/skills/maestro-brainstorm/SKILL.md +36 -91
  51. package/.codex/skills/maestro-composer/SKILL.md +213 -0
  52. package/.codex/skills/maestro-execute/SKILL.md +46 -177
  53. package/.codex/skills/maestro-init/SKILL.md +7 -51
  54. package/.codex/skills/maestro-link-coordinate/SKILL.md +56 -229
  55. package/.codex/skills/maestro-milestone-audit/SKILL.md +7 -36
  56. package/.codex/skills/maestro-milestone-complete/SKILL.md +11 -93
  57. package/.codex/skills/maestro-overlay/SKILL.md +23 -92
  58. package/.codex/skills/maestro-plan/SKILL.md +42 -166
  59. package/.codex/skills/maestro-player/SKILL.md +323 -0
  60. package/.codex/skills/maestro-quick/SKILL.md +5 -48
  61. package/.codex/skills/maestro-roadmap/SKILL.md +21 -66
  62. package/.codex/skills/maestro-spec-generate/SKILL.md +20 -56
  63. package/.codex/skills/maestro-ui-design/SKILL.md +6 -53
  64. package/.codex/skills/maestro-verify/SKILL.md +39 -136
  65. package/.codex/skills/manage-codebase-rebuild/SKILL.md +25 -75
  66. package/.codex/skills/manage-codebase-refresh/SKILL.md +5 -32
  67. package/.codex/skills/manage-issue/SKILL.md +1 -6
  68. package/.codex/skills/manage-issue-discover/SKILL.md +33 -93
  69. package/.codex/skills/{manage-memory → manage-knowhow}/SKILL.md +95 -95
  70. package/.codex/skills/manage-knowhow-capture/SKILL.md +110 -0
  71. package/.codex/skills/manage-learn/SKILL.md +17 -71
  72. package/.codex/skills/manage-status/SKILL.md +4 -35
  73. package/.codex/skills/manage-wiki/SKILL.md +1 -1
  74. package/.codex/skills/quality-business-test/SKILL.md +2 -14
  75. package/.codex/skills/quality-debug/SKILL.md +41 -133
  76. package/.codex/skills/quality-integration-test/SKILL.md +36 -145
  77. package/.codex/skills/quality-refactor/SKILL.md +6 -59
  78. package/.codex/skills/quality-retrospective/SKILL.md +292 -531
  79. package/.codex/skills/quality-review/SKILL.md +30 -65
  80. package/.codex/skills/quality-sync/SKILL.md +2 -11
  81. package/.codex/skills/quality-test/SKILL.md +4 -45
  82. package/.codex/skills/quality-test-gen/SKILL.md +33 -121
  83. package/.codex/skills/spec-add/SKILL.md +2 -9
  84. package/.codex/skills/spec-load/SKILL.md +4 -14
  85. package/.codex/skills/spec-map/SKILL.md +4 -37
  86. package/.codex/skills/spec-remove/SKILL.md +3 -35
  87. package/.codex/skills/spec-setup/SKILL.md +2 -19
  88. package/.codex/skills/team-coordinate/SKILL.md +20 -132
  89. package/.codex/skills/team-coordinate/roles/coordinator/commands/monitor.md +61 -215
  90. package/.codex/skills/team-executor/SKILL.md +7 -66
  91. package/.codex/skills/team-executor/roles/executor/commands/monitor.md +60 -182
  92. package/.codex/skills/team-executor/specs/session-schema.md +22 -56
  93. package/.codex/skills/team-lifecycle-v4/SKILL.md +22 -143
  94. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +31 -223
  95. package/.codex/skills/team-quality-assurance/SKILL.md +14 -88
  96. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +46 -186
  97. package/.codex/skills/team-review/SKILL.md +12 -86
  98. package/.codex/skills/team-review/roles/coordinator/commands/monitor.md +49 -187
  99. package/.codex/skills/team-tech-debt/SKILL.md +11 -50
  100. package/.codex/skills/team-tech-debt/roles/coordinator/commands/monitor.md +50 -239
  101. package/.codex/skills/team-testing/SKILL.md +14 -99
  102. package/.codex/skills/team-testing/roles/coordinator/commands/monitor.md +52 -228
  103. package/.codex/skills/wiki-connect/SKILL.md +2 -5
  104. package/README.md +6 -0
  105. package/README.zh-CN.md +6 -0
  106. package/chains/_intent-map.json +7 -7
  107. package/chains/singles/{memory-capture.json → knowhow-capture.json} +5 -5
  108. package/chains/singles/{memory.json → knowhow.json} +6 -6
  109. package/dashboard/dist/assets/{ArtifactsPage-CUrrDGgN.js → ArtifactsPage-iJZtYsmR.js} +6 -6
  110. package/dashboard/dist/assets/ChatInput-DNnDLdQF.js +6 -0
  111. package/dashboard/dist/assets/ChatPage-BjBibfE4.js +22 -0
  112. package/dashboard/dist/assets/{CollabPage-DIUXeazv.js → CollabPage-8lUMUol_.js} +1 -1
  113. package/dashboard/dist/assets/{ExecutionPanel-VmYeADFj.js → ExecutionPanel-BKV3GZ7Q.js} +1 -1
  114. package/dashboard/dist/assets/{KanbanPage-DLq8v7hg.js → KanbanPage-diY3QmGd.js} +2 -2
  115. package/dashboard/dist/assets/{MarkdownRenderer-D7AehrnR.js → MarkdownRenderer-cYFfe1uX.js} +1 -1
  116. package/dashboard/dist/assets/McpPage-COjuIf7U.js +21 -0
  117. package/dashboard/dist/assets/MeetingRoomPage-wnvT7wlB.js +85 -0
  118. package/dashboard/dist/assets/{OutputPanel-B-Rjwgmv.js → OutputPanel-DDL90Idy.js} +1 -1
  119. package/dashboard/dist/assets/{ProblemsPanel-GEpF-oi4.js → ProblemsPanel-zFN9IIs0.js} +1 -1
  120. package/dashboard/dist/assets/{RequirementBoardPage-xs8uDM7I.js → RequirementBoardPage-DOPJoT0I.js} +2 -2
  121. package/dashboard/dist/assets/{RequirementPage-BKDSFwjA.js → RequirementPage-CEVquRgM.js} +1 -1
  122. package/dashboard/dist/assets/RoomsPage-D5USEWDh.js +1 -0
  123. package/dashboard/dist/assets/{SpecsPage-DLFb9ZH0.js → SpecsPage-BOwBin_o.js} +1 -1
  124. package/dashboard/dist/assets/{SupervisorPage-SOki_kgz.js → SupervisorPage-5iRyMU5T.js} +1 -1
  125. package/dashboard/dist/assets/TeamsPage-DlcEmr_Q.js +1 -0
  126. package/dashboard/dist/assets/{TreeBrowser-B9DHdULE.js → TreeBrowser-Y48Wz-QY.js} +1 -1
  127. package/dashboard/dist/assets/WorkflowPage-CmQaRVgL.js +6 -0
  128. package/dashboard/dist/assets/arrow-left-NCUOENvg.js +6 -0
  129. package/dashboard/dist/assets/{check-DJDk3A2a.js → check-o7nfGNHf.js} +1 -1
  130. package/dashboard/dist/assets/{chevron-right-C7bVDreZ.js → chevron-right-BXySK2fn.js} +1 -1
  131. package/dashboard/dist/assets/{circle-alert-Na1vf6qQ.js → circle-alert-DcSBokh4.js} +1 -1
  132. package/dashboard/dist/assets/{circle-check-CEGgy3NV.js → circle-check-Cd-jce4j.js} +1 -1
  133. package/dashboard/dist/assets/{circle-check-big-3JB8zRYj.js → circle-check-big-BN7Mdp4i.js} +1 -1
  134. package/dashboard/dist/assets/{circle-Qfgy4LB_.js → circle-cooAwnAR.js} +1 -1
  135. package/dashboard/dist/assets/{code-Ble63Idz.js → code-BQa9oL1n.js} +1 -1
  136. package/dashboard/dist/assets/{columns-3-BUcKlxve.js → columns-3-BzgxelGx.js} +1 -1
  137. package/dashboard/dist/assets/{download-CMqkfn8x.js → download-swRJnate.js} +1 -1
  138. package/dashboard/dist/assets/en-C_BD3UCD.js +1 -0
  139. package/dashboard/dist/assets/{folder-B9ewx9LL.js → folder-DbGbLNFN.js} +1 -1
  140. package/dashboard/dist/assets/index-BEUaOz_b.css +1 -0
  141. package/dashboard/dist/assets/{index-JTmGteaT.js → index-DIoMBMbv.js} +1 -1
  142. package/dashboard/dist/assets/index-DLBN_7fb.js +44 -0
  143. package/dashboard/dist/assets/index-uIqUCT8y.js +236 -0
  144. package/dashboard/dist/assets/{list-DI8Wn2aT.js → list-BTRAIvDq.js} +1 -1
  145. package/dashboard/dist/assets/loader-NHtB6Mdn.js +6 -0
  146. package/dashboard/dist/assets/{minus-Lp_BfctG.js → minus-BjMxRTET.js} +1 -1
  147. package/dashboard/dist/assets/{pen-line-Ch7sphzZ.js → pen-line-C4_O16H0.js} +1 -1
  148. package/dashboard/dist/assets/{pencil-_yRMHmGT.js → pencil-DTmKhyDY.js} +1 -1
  149. package/dashboard/dist/assets/{proxy-D72Y8a4Y.js → proxy-Dtx5p6IO.js} +1 -1
  150. package/dashboard/dist/assets/rows-2-GR1dZtRu.js +6 -0
  151. package/dashboard/dist/assets/{search-BS6fI6Bg.js → search-DVtgy2W7.js} +1 -1
  152. package/dashboard/dist/assets/{shallow-BXasQBvr.js → shallow-BOmvDNsv.js} +1 -1
  153. package/dashboard/dist/assets/{table-CeGlFjlP.js → table-DCzuJAFh.js} +1 -1
  154. package/dashboard/dist/assets/team-types-BPeOvVdA.js +6 -0
  155. package/dashboard/dist/assets/{terminal-BJic2yW-.js → terminal-CzogW4cl.js} +1 -1
  156. package/dashboard/dist/assets/{trash-2-Czz4X8Fb.js → trash-2-52LATVfW.js} +1 -1
  157. package/dashboard/dist/assets/users-DLFE2voE.js +6 -0
  158. package/dashboard/dist/assets/{zap-C3H0jVFA.js → zap-DhiYlgyZ.js} +1 -1
  159. package/dashboard/dist/assets/zh-CN-DvQKfow3.js +1 -0
  160. package/dashboard/dist/index.html +2 -2
  161. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.d.ts +2 -0
  162. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js +19 -11
  163. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js.map +1 -1
  164. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js +5 -0
  165. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js.map +1 -1
  166. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.d.ts +1 -0
  167. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +21 -4
  168. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
  169. package/dashboard/dist-server/dashboard/src/server/agents/env-cleanup.js +8 -0
  170. package/dashboard/dist-server/dashboard/src/server/agents/env-cleanup.js.map +1 -1
  171. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js +6 -6
  172. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js.map +1 -1
  173. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.test.js +2 -2
  174. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.test.js.map +1 -1
  175. package/dashboard/dist-server/dashboard/src/server/index.js +14 -3
  176. package/dashboard/dist-server/dashboard/src/server/index.js.map +1 -1
  177. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.d.ts +24 -0
  178. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.js +220 -0
  179. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.js.map +1 -0
  180. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.d.ts +1 -0
  181. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.js +115 -0
  182. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.js.map +1 -0
  183. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.d.ts +44 -0
  184. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.js +260 -0
  185. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.js.map +1 -0
  186. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.d.ts +1 -0
  187. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.js +194 -0
  188. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.js.map +1 -0
  189. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.d.ts +2 -0
  190. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.js +279 -0
  191. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.js.map +1 -0
  192. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.d.ts +14 -0
  193. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.js +131 -0
  194. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.js.map +1 -0
  195. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.d.ts +1 -0
  196. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.js +134 -0
  197. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.js.map +1 -0
  198. package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.d.ts +51 -0
  199. package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.js +185 -0
  200. package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.js.map +1 -0
  201. package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.d.ts +29 -0
  202. package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.js +125 -0
  203. package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.js.map +1 -0
  204. package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.d.ts +18 -0
  205. package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.js +63 -0
  206. package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.js.map +1 -0
  207. package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.d.ts +19 -0
  208. package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.js +45 -0
  209. package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.js.map +1 -0
  210. package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.d.ts +25 -0
  211. package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.js +115 -0
  212. package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.js.map +1 -0
  213. package/dashboard/dist-server/dashboard/src/server/rooms/room-types.d.ts +53 -0
  214. package/dashboard/dist-server/dashboard/src/server/rooms/room-types.js +5 -0
  215. package/dashboard/dist-server/dashboard/src/server/rooms/room-types.js.map +1 -0
  216. package/dashboard/dist-server/dashboard/src/server/routes/agents.js +6 -0
  217. package/dashboard/dist-server/dashboard/src/server/routes/agents.js.map +1 -1
  218. package/dashboard/dist-server/dashboard/src/server/routes/cli-history.js +20 -1
  219. package/dashboard/dist-server/dashboard/src/server/routes/cli-history.js.map +1 -1
  220. package/dashboard/dist-server/dashboard/src/server/routes/index.d.ts +2 -1
  221. package/dashboard/dist-server/dashboard/src/server/routes/index.js +8 -1
  222. package/dashboard/dist-server/dashboard/src/server/routes/index.js.map +1 -1
  223. package/dashboard/dist-server/dashboard/src/server/routes/install.js +1 -1
  224. package/dashboard/dist-server/dashboard/src/server/routes/install.js.map +1 -1
  225. package/dashboard/dist-server/dashboard/src/server/routes/mcp.js +2 -2
  226. package/dashboard/dist-server/dashboard/src/server/routes/mcp.js.map +1 -1
  227. package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.d.ts +3 -0
  228. package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.js +246 -0
  229. package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.js.map +1 -0
  230. package/dashboard/dist-server/dashboard/src/server/routes/rooms.d.ts +3 -0
  231. package/dashboard/dist-server/dashboard/src/server/routes/rooms.js +38 -0
  232. package/dashboard/dist-server/dashboard/src/server/routes/rooms.js.map +1 -0
  233. package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js +7 -7
  234. package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js.map +1 -1
  235. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js +1 -1
  236. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js.map +1 -1
  237. package/dashboard/dist-server/dashboard/src/server/state/event-bus.d.ts +39 -1
  238. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js +12 -0
  239. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js.map +1 -1
  240. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js +1 -1
  241. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js.map +1 -1
  242. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +25 -14
  243. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
  244. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js +6 -6
  245. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js.map +1 -1
  246. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-types.d.ts +1 -1
  247. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js +17 -16
  248. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js.map +1 -1
  249. package/dashboard/dist-server/dashboard/src/server/wiki/writer.d.ts +1 -1
  250. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js +18 -7
  251. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js.map +1 -1
  252. package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.d.ts +3 -1
  253. package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.js +75 -1
  254. package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.js.map +1 -1
  255. package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.d.ts +17 -0
  256. package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.js +192 -0
  257. package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.js.map +1 -0
  258. package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.d.ts +13 -0
  259. package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.js +37 -0
  260. package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.js.map +1 -0
  261. package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.d.ts +7 -1
  262. package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.js +39 -2
  263. package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.js.map +1 -1
  264. package/dashboard/dist-server/dashboard/src/shared/constants.js +12 -0
  265. package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
  266. package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.d.ts +1 -0
  267. package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.js +38 -0
  268. package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.js.map +1 -0
  269. package/dashboard/dist-server/dashboard/src/shared/team-types.d.ts +66 -0
  270. package/dashboard/dist-server/dashboard/src/shared/team-types.js.map +1 -1
  271. package/dashboard/dist-server/dashboard/src/shared/types.d.ts +24 -3
  272. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.d.ts +76 -2
  273. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.js.map +1 -1
  274. package/dashboard/dist-server/shared/agent-types.d.ts +2 -0
  275. package/dashboard/dist-server/src/commands/delegate.js +11 -8
  276. package/dashboard/dist-server/src/commands/delegate.js.map +1 -1
  277. package/dist/shared/agent-types.d.ts +2 -0
  278. package/dist/shared/agent-types.d.ts.map +1 -1
  279. package/dist/src/cli.js +2 -2
  280. package/dist/src/cli.js.map +1 -1
  281. package/dist/src/commands/delegate.d.ts.map +1 -1
  282. package/dist/src/commands/delegate.js +11 -8
  283. package/dist/src/commands/delegate.js.map +1 -1
  284. package/dist/src/commands/install-backend.d.ts +1 -1
  285. package/dist/src/commands/install-backend.d.ts.map +1 -1
  286. package/dist/src/commands/install-backend.js +1 -1
  287. package/dist/src/commands/install-backend.js.map +1 -1
  288. package/dist/src/commands/knowhow.d.ts +10 -0
  289. package/dist/src/commands/knowhow.d.ts.map +1 -0
  290. package/dist/src/commands/knowhow.js +217 -0
  291. package/dist/src/commands/knowhow.js.map +1 -0
  292. package/dist/src/commands/overlay-ui/OverlayList.d.ts +2 -0
  293. package/dist/src/commands/overlay-ui/OverlayList.d.ts.map +1 -1
  294. package/dist/src/commands/overlay-ui/OverlayList.js +6 -3
  295. package/dist/src/commands/overlay-ui/OverlayList.js.map +1 -1
  296. package/dist/src/commands/overlay-ui/index.d.ts.map +1 -1
  297. package/dist/src/commands/overlay-ui/index.js +70 -44
  298. package/dist/src/commands/overlay-ui/index.js.map +1 -1
  299. package/dist/src/commands/overlay.d.ts.map +1 -1
  300. package/dist/src/commands/overlay.js +4 -3
  301. package/dist/src/commands/overlay.js.map +1 -1
  302. package/dist/src/core/overlay/applier.d.ts +1 -1
  303. package/dist/src/core/overlay/applier.d.ts.map +1 -1
  304. package/dist/src/core/overlay/applier.js +40 -13
  305. package/dist/src/core/overlay/applier.js.map +1 -1
  306. package/dist/src/core/overlay/loader.d.ts.map +1 -1
  307. package/dist/src/core/overlay/loader.js +6 -0
  308. package/dist/src/core/overlay/loader.js.map +1 -1
  309. package/dist/src/core/overlay/types.d.ts +5 -1
  310. package/dist/src/core/overlay/types.d.ts.map +1 -1
  311. package/dist/src/core/overlay/types.js +1 -1
  312. package/dist/src/core/overlay/types.js.map +1 -1
  313. package/dist/src/hooks/context-monitor.js +1 -1
  314. package/dist/src/hooks/context-monitor.js.map +1 -1
  315. package/dist/src/hooks/skill-context.js +1 -1
  316. package/dist/src/hooks/skill-context.js.map +1 -1
  317. package/dist/src/mcp/delegate-channel-relay.d.ts +4 -0
  318. package/dist/src/mcp/delegate-channel-relay.d.ts.map +1 -1
  319. package/dist/src/mcp/delegate-channel-relay.js +73 -4
  320. package/dist/src/mcp/delegate-channel-relay.js.map +1 -1
  321. package/dist/src/tools/index.js +2 -2
  322. package/dist/src/tools/index.js.map +1 -1
  323. package/dist/src/tools/store-knowhow.d.ts +21 -0
  324. package/dist/src/tools/store-knowhow.d.ts.map +1 -0
  325. package/dist/src/tools/store-knowhow.js +295 -0
  326. package/dist/src/tools/store-knowhow.js.map +1 -0
  327. package/package.json +1 -1
  328. package/shared/agent-types.ts +2 -0
  329. package/templates/workflows/specs/node-catalog.md +170 -0
  330. package/templates/workflows/specs/template-schema.md +157 -0
  331. package/workflows/analyze.md +61 -185
  332. package/workflows/brainstorm.md +3 -23
  333. package/workflows/codebase-rebuild.md +79 -191
  334. package/workflows/codebase-refresh.md +26 -124
  335. package/workflows/debug.md +21 -141
  336. package/workflows/execute.md +183 -350
  337. package/workflows/fork.md +72 -230
  338. package/workflows/harvest.md +12 -79
  339. package/workflows/init.md +3 -17
  340. package/workflows/integration-test.md +21 -190
  341. package/workflows/issue-analyze.md +35 -153
  342. package/workflows/issue-discover.md +88 -263
  343. package/workflows/issue-execute.md +29 -208
  344. package/workflows/issue-plan.md +33 -154
  345. package/workflows/issue.md +44 -202
  346. package/workflows/knowhow.md +374 -0
  347. package/workflows/learn.md +30 -177
  348. package/workflows/maestro-coordinate.codex.md +77 -362
  349. package/workflows/maestro-link-coordinate.md +12 -61
  350. package/workflows/maestro.codex.md +124 -457
  351. package/workflows/maestro.md +562 -976
  352. package/workflows/map.md +16 -53
  353. package/workflows/merge.md +42 -197
  354. package/workflows/milestone-audit.md +5 -43
  355. package/workflows/milestone-complete.md +11 -60
  356. package/workflows/plan.md +176 -387
  357. package/workflows/quick.md +25 -174
  358. package/workflows/refactor.md +28 -221
  359. package/workflows/retrospective.md +104 -443
  360. package/workflows/review.md +87 -299
  361. package/workflows/roadmap.md +117 -97
  362. package/workflows/spec-generate.md +22 -118
  363. package/workflows/specs-add.md +5 -25
  364. package/workflows/specs-load.md +1 -5
  365. package/workflows/specs-remove.md +0 -11
  366. package/workflows/specs-setup.md +11 -47
  367. package/workflows/status.md +58 -200
  368. package/workflows/sync.md +28 -141
  369. package/workflows/test-gen.md +23 -100
  370. package/workflows/test.md +15 -125
  371. package/workflows/ui-design.md +139 -465
  372. package/workflows/ui-style.md +36 -228
  373. package/workflows/verify.md +52 -273
  374. package/workflows/wiki-connect.md +9 -46
  375. package/workflows/wiki-digest.md +7 -50
  376. package/workflows/wiki-manage.md +11 -108
  377. package/.claude/commands/maestro-coordinate.md +0 -63
  378. package/.claude/commands/manage-memory-capture.md +0 -59
  379. package/.codex/skills/maestro-coordinate/SKILL.md +0 -213
  380. package/.codex/skills/manage-memory-capture/SKILL.md +0 -93
  381. package/dashboard/dist/assets/ChatInput-pUOLJIKE.js +0 -49
  382. package/dashboard/dist/assets/ChatPage-B8Xqkt0v.js +0 -27
  383. package/dashboard/dist/assets/McpPage-BY0SjTgw.js +0 -21
  384. package/dashboard/dist/assets/TeamsPage-BO2kP70F.js +0 -11
  385. package/dashboard/dist/assets/WorkflowPage-C8hWbYim.js +0 -6
  386. package/dashboard/dist/assets/en-ZbRpfzuP.js +0 -1
  387. package/dashboard/dist/assets/index-C2Mcb4TJ.js +0 -231
  388. package/dashboard/dist/assets/index-DyBbPc18.css +0 -1
  389. package/dashboard/dist/assets/loader-B5F6PzFT.js +0 -11
  390. package/dashboard/dist/assets/zh-CN-CoXBFuny.js +0 -1
  391. package/workflows/maestro-coordinate.md +0 -582
  392. package/workflows/memory.md +0 -451
@@ -0,0 +1,51 @@
1
+ import type { DashboardEventBus } from '../state/event-bus.js';
2
+ import type { AgentManager } from '../agents/agent-manager.js';
3
+ import type { McpSdkServerConfigWithInstance, McpStdioServerConfig } from '@anthropic-ai/claude-agent-sdk';
4
+ import { RoomMailbox } from './room-mailbox.js';
5
+ import { RoomTaskBoard } from './room-task-board.js';
6
+ import { RoomAgentRegistry } from './room-agent-registry.js';
7
+ import type { MeetingRoomMcpServerInfo } from './mcp-server/meeting-room-mcp-server.js';
8
+ import type { StdioMcpConfig } from './mcp-server/mcp-config-builder.js';
9
+ import type { RoomSessionStatus, RoomSessionSnapshot, RoomMailboxMessage, RoomTask, RoomTaskCreate, RoomTaskUpdate, RoomAgent, RoomAgentStatus, MessagePriority } from './room-types.js';
10
+ export type RoomMcpAgentType = 'claude-code' | 'codex' | 'agent-sdk';
11
+ export declare class MeetingRoomSession {
12
+ private readonly eventBus;
13
+ readonly sessionId: string;
14
+ private status;
15
+ private readonly createdAt;
16
+ readonly mailbox: RoomMailbox;
17
+ readonly taskBoard: RoomTaskBoard;
18
+ readonly agentRegistry: RoomAgentRegistry;
19
+ private mcpServer;
20
+ private mcpServerInfo;
21
+ constructor(sessionId: string, eventBus: DashboardEventBus, agentManager: AgentManager);
22
+ addAgent(role: string, processId?: string): RoomAgent;
23
+ removeAgent(role: string): boolean;
24
+ setAgentStatus(role: string, status: RoomAgentStatus): boolean;
25
+ getAgents(): RoomAgent[];
26
+ /** Send a message to a specific agent, write to mailbox + emit event + wake agent */
27
+ sendMessage(from: string, to: string, content: string, priority?: MessagePriority): Promise<RoomMailboxMessage>;
28
+ /** Broadcast a message to all agents */
29
+ broadcastMessage(from: string, content: string, priority?: MessagePriority): Promise<RoomMailboxMessage>;
30
+ createTask(input: RoomTaskCreate): RoomTask;
31
+ updateTask(taskId: string, patch: RoomTaskUpdate): RoomTask | undefined;
32
+ getTasks(): RoomTask[];
33
+ /** Start the MCP TCP server. Must be called before getMcpConfig(). */
34
+ startMcp(): Promise<MeetingRoomMcpServerInfo>;
35
+ /** Stop the MCP TCP server and release resources. */
36
+ stopMcp(): Promise<void>;
37
+ /** Get MCP server info (port + token) for HTTP transport. */
38
+ getMcpInfo(): MeetingRoomMcpServerInfo | null;
39
+ /**
40
+ * Get MCP config for a specific adapter type and agent.
41
+ * - 'claude-code': returns McpStdioServerConfig for --mcp-config
42
+ * - 'codex': returns StdioMcpConfig with env vars
43
+ * - 'agent-sdk': returns McpSdkServerConfigWithInstance for in-process SDK
44
+ */
45
+ getMcpConfig(agentType: RoomMcpAgentType, agentId: string): McpStdioServerConfig | StdioMcpConfig | McpSdkServerConfigWithInstance;
46
+ getSnapshot(): RoomSessionSnapshot;
47
+ getStatus(): RoomSessionStatus;
48
+ pause(): void;
49
+ resume(): void;
50
+ destroy(): Promise<void>;
51
+ }
@@ -0,0 +1,185 @@
1
+ // ---------------------------------------------------------------------------
2
+ // MeetingRoomSession — thin coordinator composing subsystems + EventBus
3
+ // ---------------------------------------------------------------------------
4
+ import { RoomMailbox } from './room-mailbox.js';
5
+ import { RoomTaskBoard } from './room-task-board.js';
6
+ import { RoomAgentRegistry } from './room-agent-registry.js';
7
+ import { MeetingRoomMcpServer } from './mcp-server/meeting-room-mcp-server.js';
8
+ import { getStdioConfig, getClaudeCodeConfig, getSdkMcpServer, } from './mcp-server/mcp-config-builder.js';
9
+ export class MeetingRoomSession {
10
+ eventBus;
11
+ sessionId;
12
+ status = 'active';
13
+ createdAt;
14
+ mailbox;
15
+ taskBoard;
16
+ agentRegistry;
17
+ mcpServer = null;
18
+ mcpServerInfo = null;
19
+ constructor(sessionId, eventBus, agentManager) {
20
+ this.eventBus = eventBus;
21
+ this.sessionId = sessionId;
22
+ this.createdAt = new Date().toISOString();
23
+ this.mailbox = new RoomMailbox();
24
+ this.taskBoard = new RoomTaskBoard();
25
+ this.agentRegistry = new RoomAgentRegistry(agentManager);
26
+ }
27
+ // --- Agent management ---
28
+ addAgent(role, processId) {
29
+ const agent = this.agentRegistry.register(this.sessionId, role, processId);
30
+ this.eventBus.emit('team:agent_status', {
31
+ role: agent.role,
32
+ status: agent.status,
33
+ lastActivity: agent.lastActivityAt,
34
+ });
35
+ return agent;
36
+ }
37
+ removeAgent(role) {
38
+ const removed = this.agentRegistry.unregister(this.sessionId, role);
39
+ if (removed) {
40
+ this.eventBus.emit('team:agent_status', {
41
+ role,
42
+ status: 'offline',
43
+ lastActivity: new Date().toISOString(),
44
+ });
45
+ }
46
+ return removed;
47
+ }
48
+ setAgentStatus(role, status) {
49
+ const updated = this.agentRegistry.setStatus(this.sessionId, role, status);
50
+ if (updated) {
51
+ const agent = this.agentRegistry.getAgentByRole(this.sessionId, role);
52
+ if (agent) {
53
+ this.eventBus.emit('team:agent_status', {
54
+ role: agent.role,
55
+ status: agent.status,
56
+ lastActivity: agent.lastActivityAt,
57
+ });
58
+ }
59
+ }
60
+ return updated;
61
+ }
62
+ getAgents() {
63
+ return this.agentRegistry.getAgents(this.sessionId);
64
+ }
65
+ // --- Messaging ---
66
+ /** Send a message to a specific agent, write to mailbox + emit event + wake agent */
67
+ async sendMessage(from, to, content, priority = 'normal') {
68
+ const msg = this.mailbox.write(this.sessionId, from, to, content, priority);
69
+ this.eventBus.emit('team:message', {
70
+ id: msg.id,
71
+ from: msg.from,
72
+ to: msg.to,
73
+ content: msg.content,
74
+ dispatch_status: 'pending',
75
+ timestamp: msg.createdAt,
76
+ });
77
+ // Wake the target agent
78
+ if (to !== '*') {
79
+ await this.agentRegistry.wake(this.sessionId, to, content);
80
+ }
81
+ return msg;
82
+ }
83
+ /** Broadcast a message to all agents */
84
+ async broadcastMessage(from, content, priority = 'normal') {
85
+ const msg = this.mailbox.write(this.sessionId, from, '*', content, priority);
86
+ this.eventBus.emit('team:dispatch', {
87
+ id: msg.id,
88
+ from: msg.from,
89
+ to: '*',
90
+ content: msg.content,
91
+ dispatch_status: 'pending',
92
+ timestamp: msg.createdAt,
93
+ });
94
+ // Wake all agents
95
+ const agents = this.agentRegistry.getAgents(this.sessionId);
96
+ await Promise.allSettled(agents.map((agent) => this.agentRegistry.wake(this.sessionId, agent.role, content)));
97
+ return msg;
98
+ }
99
+ // --- Task management ---
100
+ createTask(input) {
101
+ return this.taskBoard.create(this.sessionId, input);
102
+ }
103
+ updateTask(taskId, patch) {
104
+ const task = this.taskBoard.update(this.sessionId, taskId, patch);
105
+ // If task was marked completed, cascade unblocks
106
+ if (task && patch.status === 'completed') {
107
+ this.taskBoard.checkUnblocks(this.sessionId, taskId);
108
+ }
109
+ return task;
110
+ }
111
+ getTasks() {
112
+ return this.taskBoard.list(this.sessionId);
113
+ }
114
+ // --- MCP server lifecycle ---
115
+ /** Start the MCP TCP server. Must be called before getMcpConfig(). */
116
+ async startMcp() {
117
+ if (this.mcpServer) {
118
+ return this.mcpServer.getInfo();
119
+ }
120
+ this.mcpServer = new MeetingRoomMcpServer(this);
121
+ this.mcpServerInfo = await this.mcpServer.start();
122
+ return this.mcpServerInfo;
123
+ }
124
+ /** Stop the MCP TCP server and release resources. */
125
+ async stopMcp() {
126
+ if (this.mcpServer) {
127
+ await this.mcpServer.destroy();
128
+ this.mcpServer = null;
129
+ this.mcpServerInfo = null;
130
+ }
131
+ }
132
+ /** Get MCP server info (port + token) for HTTP transport. */
133
+ getMcpInfo() {
134
+ return this.mcpServerInfo;
135
+ }
136
+ /**
137
+ * Get MCP config for a specific adapter type and agent.
138
+ * - 'claude-code': returns McpStdioServerConfig for --mcp-config
139
+ * - 'codex': returns StdioMcpConfig with env vars
140
+ * - 'agent-sdk': returns McpSdkServerConfigWithInstance for in-process SDK
141
+ */
142
+ getMcpConfig(agentType, agentId) {
143
+ if (agentType === 'agent-sdk') {
144
+ // SDK adapter uses in-process server -- no TCP needed
145
+ return getSdkMcpServer(this, agentId);
146
+ }
147
+ // CLI adapters need the TCP server running
148
+ if (!this.mcpServerInfo) {
149
+ throw new Error('MCP server not started. Call startMcp() first.');
150
+ }
151
+ if (agentType === 'claude-code') {
152
+ return getClaudeCodeConfig(agentId, this.mcpServerInfo);
153
+ }
154
+ // Default: stdio config (codex and other CLI adapters)
155
+ return getStdioConfig(agentId, this.mcpServerInfo);
156
+ }
157
+ // --- Session lifecycle ---
158
+ getSnapshot() {
159
+ return {
160
+ sessionId: this.sessionId,
161
+ status: this.status,
162
+ agents: this.agentRegistry.getAgents(this.sessionId),
163
+ messages: this.mailbox.getHistory(this.sessionId),
164
+ tasks: this.taskBoard.list(this.sessionId),
165
+ createdAt: this.createdAt,
166
+ };
167
+ }
168
+ getStatus() {
169
+ return this.status;
170
+ }
171
+ pause() {
172
+ this.status = 'paused';
173
+ }
174
+ resume() {
175
+ this.status = 'active';
176
+ }
177
+ async destroy() {
178
+ this.status = 'destroyed';
179
+ await this.stopMcp();
180
+ this.mailbox.clear(this.sessionId);
181
+ this.taskBoard.clear(this.sessionId);
182
+ this.agentRegistry.clear(this.sessionId);
183
+ }
184
+ }
185
+ //# sourceMappingURL=meeting-room-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meeting-room-session.js","sourceRoot":"","sources":["../../../../../src/server/rooms/meeting-room-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { AgentManager } from '../agents/agent-manager.js';
2
+ import type { RoomAgent, RoomAgentStatus } from './room-types.js';
3
+ export declare class RoomAgentRegistry {
4
+ private readonly agentManager;
5
+ private readonly wakeTimeoutMs;
6
+ private readonly agents;
7
+ private readonly activeWakes;
8
+ private readonly wakeTimeouts;
9
+ constructor(agentManager: AgentManager, wakeTimeoutMs?: number);
10
+ /** Register an agent in a session */
11
+ register(sessionId: string, role: string, processId?: string): RoomAgent;
12
+ /** Unregister an agent from a session */
13
+ unregister(sessionId: string, role: string): boolean;
14
+ /** Get all agents in a session */
15
+ getAgents(sessionId: string): RoomAgent[];
16
+ /** Get a specific agent by role in a session */
17
+ getAgentByRole(sessionId: string, role: string): RoomAgent | undefined;
18
+ /** Update agent status */
19
+ setStatus(sessionId: string, role: string, status: RoomAgentStatus): boolean;
20
+ /**
21
+ * Wake an agent by sending a message to its process.
22
+ * Uses an activeWakes guard set to prevent concurrent wake calls for the same agent.
23
+ * Guard auto-clears after wakeTimeoutMs.
24
+ */
25
+ wake(sessionId: string, role: string, message: string): Promise<boolean>;
26
+ /** Clear all agents for a session */
27
+ clear(sessionId: string): void;
28
+ private clearWakeGuard;
29
+ }
@@ -0,0 +1,125 @@
1
+ // ---------------------------------------------------------------------------
2
+ // RoomAgentRegistry — agent lifecycle management with activeWakes guard
3
+ // ---------------------------------------------------------------------------
4
+ const DEFAULT_WAKE_TIMEOUT_MS = 5_000;
5
+ export class RoomAgentRegistry {
6
+ agentManager;
7
+ wakeTimeoutMs;
8
+ agents = new Map();
9
+ activeWakes = new Set(); // "sessionId:role" keys
10
+ wakeTimeouts = new Map();
11
+ constructor(agentManager, wakeTimeoutMs = DEFAULT_WAKE_TIMEOUT_MS) {
12
+ this.agentManager = agentManager;
13
+ this.wakeTimeoutMs = wakeTimeoutMs;
14
+ }
15
+ /** Register an agent in a session */
16
+ register(sessionId, role, processId) {
17
+ const now = new Date().toISOString();
18
+ const agent = {
19
+ role,
20
+ processId,
21
+ status: 'idle',
22
+ joinedAt: now,
23
+ lastActivityAt: now,
24
+ };
25
+ let list = this.agents.get(sessionId);
26
+ if (!list) {
27
+ list = [];
28
+ this.agents.set(sessionId, list);
29
+ }
30
+ // Replace existing agent with same role if present
31
+ const existingIdx = list.findIndex((a) => a.role === role);
32
+ if (existingIdx !== -1) {
33
+ list[existingIdx] = agent;
34
+ }
35
+ else {
36
+ list.push(agent);
37
+ }
38
+ return agent;
39
+ }
40
+ /** Unregister an agent from a session */
41
+ unregister(sessionId, role) {
42
+ const list = this.agents.get(sessionId);
43
+ if (!list)
44
+ return false;
45
+ const idx = list.findIndex((a) => a.role === role);
46
+ if (idx === -1)
47
+ return false;
48
+ list.splice(idx, 1);
49
+ // Clean up wake guard
50
+ const wakeKey = `${sessionId}:${role}`;
51
+ this.clearWakeGuard(wakeKey);
52
+ return true;
53
+ }
54
+ /** Get all agents in a session */
55
+ getAgents(sessionId) {
56
+ return this.agents.get(sessionId) ?? [];
57
+ }
58
+ /** Get a specific agent by role in a session */
59
+ getAgentByRole(sessionId, role) {
60
+ const list = this.agents.get(sessionId);
61
+ if (!list)
62
+ return undefined;
63
+ return list.find((a) => a.role === role);
64
+ }
65
+ /** Update agent status */
66
+ setStatus(sessionId, role, status) {
67
+ const agent = this.getAgentByRole(sessionId, role);
68
+ if (!agent)
69
+ return false;
70
+ agent.status = status;
71
+ agent.lastActivityAt = new Date().toISOString();
72
+ return true;
73
+ }
74
+ /**
75
+ * Wake an agent by sending a message to its process.
76
+ * Uses an activeWakes guard set to prevent concurrent wake calls for the same agent.
77
+ * Guard auto-clears after wakeTimeoutMs.
78
+ */
79
+ async wake(sessionId, role, message) {
80
+ const agent = this.getAgentByRole(sessionId, role);
81
+ if (!agent?.processId)
82
+ return false;
83
+ const wakeKey = `${sessionId}:${role}`;
84
+ // Guard: prevent concurrent wakes for the same agent
85
+ if (this.activeWakes.has(wakeKey)) {
86
+ return false;
87
+ }
88
+ this.activeWakes.add(wakeKey);
89
+ // Auto-clear guard after timeout
90
+ const timer = setTimeout(() => {
91
+ this.clearWakeGuard(wakeKey);
92
+ }, this.wakeTimeoutMs);
93
+ this.wakeTimeouts.set(wakeKey, timer);
94
+ try {
95
+ await this.agentManager.sendMessage(agent.processId, message);
96
+ agent.lastActivityAt = new Date().toISOString();
97
+ return true;
98
+ }
99
+ catch {
100
+ // Clear guard on failure so retry is possible
101
+ this.clearWakeGuard(wakeKey);
102
+ return false;
103
+ }
104
+ }
105
+ /** Clear all agents for a session */
106
+ clear(sessionId) {
107
+ const list = this.agents.get(sessionId);
108
+ if (list) {
109
+ for (const agent of list) {
110
+ const wakeKey = `${sessionId}:${agent.role}`;
111
+ this.clearWakeGuard(wakeKey);
112
+ }
113
+ }
114
+ this.agents.delete(sessionId);
115
+ }
116
+ clearWakeGuard(wakeKey) {
117
+ this.activeWakes.delete(wakeKey);
118
+ const timer = this.wakeTimeouts.get(wakeKey);
119
+ if (timer) {
120
+ clearTimeout(timer);
121
+ this.wakeTimeouts.delete(wakeKey);
122
+ }
123
+ }
124
+ }
125
+ //# sourceMappingURL=room-agent-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-agent-registry.js","sourceRoot":"","sources":["../../../../../src/server/rooms/room-agent-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { RoomMailboxMessage, MessagePriority } from './room-types.js';
2
+ export declare class RoomMailbox {
3
+ private readonly messages;
4
+ /** Write a message into the session mailbox. Returns the generated message. */
5
+ write(sessionId: string, from: string, to: string, content: string, priority?: MessagePriority): RoomMailboxMessage;
6
+ /**
7
+ * Atomically read all unread messages for an agent in a session.
8
+ * Marks returned messages as read so subsequent calls won't return them again.
9
+ * Pass `to = '*'` to read broadcast messages only.
10
+ */
11
+ readUnread(sessionId: string, agentRole: string): RoomMailboxMessage[];
12
+ /** Get full message history for a session */
13
+ getHistory(sessionId: string): RoomMailboxMessage[];
14
+ /** Get message history filtered to a specific agent (sent or received) */
15
+ getHistoryForAgent(sessionId: string, agentRole: string): RoomMailboxMessage[];
16
+ /** Clear all messages for a session */
17
+ clear(sessionId: string): void;
18
+ }
@@ -0,0 +1,63 @@
1
+ // ---------------------------------------------------------------------------
2
+ // RoomMailbox — in-memory message store with atomic readUnread
3
+ // ---------------------------------------------------------------------------
4
+ import { randomUUID } from 'node:crypto';
5
+ export class RoomMailbox {
6
+ messages = new Map();
7
+ /** Write a message into the session mailbox. Returns the generated message. */
8
+ write(sessionId, from, to, content, priority = 'normal') {
9
+ const msg = {
10
+ id: randomUUID(),
11
+ sessionId,
12
+ from,
13
+ to,
14
+ content,
15
+ priority,
16
+ read: false,
17
+ createdAt: new Date().toISOString(),
18
+ };
19
+ let list = this.messages.get(sessionId);
20
+ if (!list) {
21
+ list = [];
22
+ this.messages.set(sessionId, list);
23
+ }
24
+ list.push(msg);
25
+ return msg;
26
+ }
27
+ /**
28
+ * Atomically read all unread messages for an agent in a session.
29
+ * Marks returned messages as read so subsequent calls won't return them again.
30
+ * Pass `to = '*'` to read broadcast messages only.
31
+ */
32
+ readUnread(sessionId, agentRole) {
33
+ const list = this.messages.get(sessionId);
34
+ if (!list)
35
+ return [];
36
+ const unread = [];
37
+ for (const msg of list) {
38
+ if (msg.read)
39
+ continue;
40
+ if (msg.to === agentRole || msg.to === '*') {
41
+ msg.read = true;
42
+ unread.push(msg);
43
+ }
44
+ }
45
+ return unread;
46
+ }
47
+ /** Get full message history for a session */
48
+ getHistory(sessionId) {
49
+ return this.messages.get(sessionId) ?? [];
50
+ }
51
+ /** Get message history filtered to a specific agent (sent or received) */
52
+ getHistoryForAgent(sessionId, agentRole) {
53
+ const list = this.messages.get(sessionId);
54
+ if (!list)
55
+ return [];
56
+ return list.filter((msg) => msg.from === agentRole || msg.to === agentRole || msg.to === '*');
57
+ }
58
+ /** Clear all messages for a session */
59
+ clear(sessionId) {
60
+ this.messages.delete(sessionId);
61
+ }
62
+ }
63
+ //# sourceMappingURL=room-mailbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-mailbox.js","sourceRoot":"","sources":["../../../../../src/server/rooms/room-mailbox.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,+DAA+D;AAC/D,8EAA8E;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,MAAM,OAAO,WAAW;IACL,QAAQ,GAAG,IAAI,GAAG,EAAgC,CAAC;IAEpE,+EAA+E;IAC/E,KAAK,CACH,SAAiB,EACjB,IAAY,EACZ,EAAU,EACV,OAAe,EACf,WAA4B,QAAQ;QAEpC,MAAM,GAAG,GAAuB;YAC9B,EAAE,EAAE,UAAU,EAAE;YAChB,SAAS;YACT,IAAI;YACJ,EAAE;YACF,OAAO;YACP,QAAQ;YACR,IAAI,EAAE,KAAK;YACX,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,EAAE,CAAC;YACV,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEf,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,SAAiB,EAAE,SAAiB;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,MAAM,MAAM,GAAyB,EAAE,CAAC;QACxC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,GAAG,CAAC,IAAI;gBAAE,SAAS;YACvB,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC;gBAC3C,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,6CAA6C;IAC7C,UAAU,CAAC,SAAiB;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED,0EAA0E;IAC1E,kBAAkB,CAAC,SAAiB,EAAE,SAAiB;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAC1E,CAAC;IACJ,CAAC;IAED,uCAAuC;IACvC,KAAK,CAAC,SAAiB;QACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import type { AgentManager } from '../agents/agent-manager.js';
2
+ import type { DashboardEventBus } from '../state/event-bus.js';
3
+ import { MeetingRoomSession } from './meeting-room-session.js';
4
+ export declare class RoomSessionManager {
5
+ private readonly agentManager;
6
+ private readonly eventBus;
7
+ private readonly sessions;
8
+ constructor(agentManager: AgentManager, eventBus: DashboardEventBus);
9
+ /** Create a new meeting room session */
10
+ createSession(sessionId: string): MeetingRoomSession;
11
+ /** Get an existing session by ID */
12
+ getSession(sessionId: string): MeetingRoomSession | undefined;
13
+ /** List all active session IDs */
14
+ listSessions(): string[];
15
+ /** Destroy a specific session and clean up resources */
16
+ destroySession(sessionId: string): Promise<boolean>;
17
+ /** Destroy all sessions — used during server shutdown */
18
+ destroyAll(): Promise<void>;
19
+ }
@@ -0,0 +1,45 @@
1
+ // ---------------------------------------------------------------------------
2
+ // RoomSessionManager — manages all MeetingRoomSession instances
3
+ // ---------------------------------------------------------------------------
4
+ import { MeetingRoomSession } from './meeting-room-session.js';
5
+ export class RoomSessionManager {
6
+ agentManager;
7
+ eventBus;
8
+ sessions = new Map();
9
+ constructor(agentManager, eventBus) {
10
+ this.agentManager = agentManager;
11
+ this.eventBus = eventBus;
12
+ }
13
+ /** Create a new meeting room session */
14
+ createSession(sessionId) {
15
+ if (this.sessions.has(sessionId)) {
16
+ throw new Error(`Room session already exists: ${sessionId}`);
17
+ }
18
+ const session = new MeetingRoomSession(sessionId, this.eventBus, this.agentManager);
19
+ this.sessions.set(sessionId, session);
20
+ return session;
21
+ }
22
+ /** Get an existing session by ID */
23
+ getSession(sessionId) {
24
+ return this.sessions.get(sessionId);
25
+ }
26
+ /** List all active session IDs */
27
+ listSessions() {
28
+ return Array.from(this.sessions.keys());
29
+ }
30
+ /** Destroy a specific session and clean up resources */
31
+ async destroySession(sessionId) {
32
+ const session = this.sessions.get(sessionId);
33
+ if (!session)
34
+ return false;
35
+ await session.destroy();
36
+ this.sessions.delete(sessionId);
37
+ return true;
38
+ }
39
+ /** Destroy all sessions — used during server shutdown */
40
+ async destroyAll() {
41
+ await Promise.allSettled(Array.from(this.sessions.values()).map((session) => session.destroy()));
42
+ this.sessions.clear();
43
+ }
44
+ }
45
+ //# sourceMappingURL=room-session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-session-manager.js","sourceRoot":"","sources":["../../../../../src/server/rooms/room-session-manager.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,gEAAgE;AAChE,8EAA8E;AAI9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,OAAO,kBAAkB;IAIV;IACA;IAJF,QAAQ,GAAG,IAAI,GAAG,EAA8B,CAAC;IAElE,YACmB,YAA0B,EAC1B,QAA2B;QAD3B,iBAAY,GAAZ,YAAY,CAAc;QAC1B,aAAQ,GAAR,QAAQ,CAAmB;IAC3C,CAAC;IAEJ,wCAAwC;IACxC,aAAa,CAAC,SAAiB;QAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,gCAAgC,SAAS,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACpF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACtC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,oCAAoC;IACpC,UAAU,CAAC,SAAiB;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,kCAAkC;IAClC,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,cAAc,CAAC,SAAiB;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAE3B,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yDAAyD;IACzD,KAAK,CAAC,UAAU;QACd,MAAM,OAAO,CAAC,UAAU,CACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CACvE,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ import type { RoomTask, RoomTaskCreate, RoomTaskUpdate } from './room-types.js';
2
+ export declare class RoomTaskBoard {
3
+ private readonly tasks;
4
+ /**
5
+ * Create a task in the session. Auto-links bidirectional blockedBy/blocks.
6
+ * Returns the created task.
7
+ */
8
+ create(sessionId: string, input: RoomTaskCreate): RoomTask;
9
+ /**
10
+ * Update a task by ID. Returns the updated task or undefined if not found.
11
+ */
12
+ update(sessionId: string, taskId: string, patch: RoomTaskUpdate): RoomTask | undefined;
13
+ /** List all tasks in a session */
14
+ list(sessionId: string): RoomTask[];
15
+ /** Get tasks owned by a specific agent role */
16
+ getByOwner(sessionId: string, owner: string): RoomTask[];
17
+ /**
18
+ * Check which tasks become unblocked after a task completes.
19
+ * Removes the completed task from dependents' blockedBy arrays.
20
+ * Returns the list of tasks that became newly unblocked (transitioned from blocked to pending).
21
+ */
22
+ checkUnblocks(sessionId: string, completedTaskId: string): RoomTask[];
23
+ /** Clear all tasks for a session */
24
+ clear(sessionId: string): void;
25
+ }