maestro-flow 0.3.15 → 0.3.17

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 (390) hide show
  1. package/.claude/agents/workflow-planner.md +24 -8
  2. package/.claude/commands/maestro-amend.md +300 -0
  3. package/.claude/commands/maestro-analyze.md +1 -49
  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-roadmap.md +3 -101
  11. package/.claude/commands/maestro-spec-generate.md +1 -25
  12. package/.claude/commands/maestro-ui-design.md +14 -73
  13. package/.claude/commands/maestro-verify.md +1 -32
  14. package/.claude/commands/maestro.md +13 -30
  15. package/.claude/commands/manage-harvest.md +7 -44
  16. package/.claude/commands/manage-knowhow-capture.md +193 -0
  17. package/.claude/commands/{manage-memory.md → manage-knowhow.md} +77 -88
  18. package/.claude/commands/manage-learn.md +3 -28
  19. package/.claude/commands/manage-status.md +1 -20
  20. package/.claude/commands/manage-wiki.md +1 -1
  21. package/.claude/commands/quality-business-test.md +1 -1
  22. package/.claude/commands/quality-debug.md +3 -18
  23. package/.claude/commands/quality-integration-test.md +3 -23
  24. package/.claude/commands/quality-retrospective.md +1 -28
  25. package/.claude/commands/quality-review.md +3 -52
  26. package/.claude/commands/quality-test-gen.md +1 -10
  27. package/.claude/commands/quality-test.md +3 -25
  28. package/.claude/commands/spec-add.md +1 -21
  29. package/.claude/commands/spec-load.md +1 -16
  30. package/.claude/commands/wiki-connect.md +2 -112
  31. package/.claude/commands/wiki-digest.md +2 -141
  32. package/.codex/skills/learn-decompose/SKILL.md +2 -8
  33. package/.codex/skills/maestro/SKILL.md +60 -146
  34. package/.codex/skills/maestro-analyze/SKILL.md +52 -150
  35. package/.codex/skills/maestro-brainstorm/SKILL.md +36 -91
  36. package/.codex/skills/maestro-composer/SKILL.md +4 -76
  37. package/.codex/skills/maestro-execute/SKILL.md +46 -177
  38. package/.codex/skills/maestro-init/SKILL.md +7 -51
  39. package/.codex/skills/maestro-link-coordinate/SKILL.md +56 -229
  40. package/.codex/skills/maestro-milestone-audit/SKILL.md +7 -36
  41. package/.codex/skills/maestro-milestone-complete/SKILL.md +11 -93
  42. package/.codex/skills/maestro-overlay/SKILL.md +23 -92
  43. package/.codex/skills/maestro-plan/SKILL.md +70 -166
  44. package/.codex/skills/maestro-player/SKILL.md +24 -149
  45. package/.codex/skills/maestro-quick/SKILL.md +5 -48
  46. package/.codex/skills/maestro-roadmap/SKILL.md +21 -66
  47. package/.codex/skills/maestro-spec-generate/SKILL.md +20 -56
  48. package/.codex/skills/maestro-ui-design/SKILL.md +6 -53
  49. package/.codex/skills/maestro-verify/SKILL.md +39 -136
  50. package/.codex/skills/manage-codebase-rebuild/SKILL.md +25 -75
  51. package/.codex/skills/manage-codebase-refresh/SKILL.md +5 -32
  52. package/.codex/skills/manage-issue/SKILL.md +1 -6
  53. package/.codex/skills/manage-issue-discover/SKILL.md +33 -93
  54. package/.codex/skills/{manage-memory → manage-knowhow}/SKILL.md +95 -95
  55. package/.codex/skills/manage-knowhow-capture/SKILL.md +110 -0
  56. package/.codex/skills/manage-learn/SKILL.md +17 -71
  57. package/.codex/skills/manage-status/SKILL.md +4 -35
  58. package/.codex/skills/manage-wiki/SKILL.md +1 -1
  59. package/.codex/skills/quality-business-test/SKILL.md +2 -14
  60. package/.codex/skills/quality-debug/SKILL.md +41 -133
  61. package/.codex/skills/quality-integration-test/SKILL.md +36 -145
  62. package/.codex/skills/quality-refactor/SKILL.md +6 -59
  63. package/.codex/skills/quality-retrospective/SKILL.md +292 -531
  64. package/.codex/skills/quality-review/SKILL.md +30 -65
  65. package/.codex/skills/quality-sync/SKILL.md +2 -11
  66. package/.codex/skills/quality-test/SKILL.md +4 -45
  67. package/.codex/skills/quality-test-gen/SKILL.md +33 -121
  68. package/.codex/skills/spec-add/SKILL.md +2 -9
  69. package/.codex/skills/spec-load/SKILL.md +4 -14
  70. package/.codex/skills/spec-map/SKILL.md +4 -37
  71. package/.codex/skills/spec-remove/SKILL.md +3 -35
  72. package/.codex/skills/spec-setup/SKILL.md +2 -19
  73. package/.codex/skills/team-coordinate/SKILL.md +20 -132
  74. package/.codex/skills/team-coordinate/roles/coordinator/commands/monitor.md +61 -215
  75. package/.codex/skills/team-executor/SKILL.md +7 -66
  76. package/.codex/skills/team-executor/roles/executor/commands/monitor.md +60 -182
  77. package/.codex/skills/team-executor/specs/session-schema.md +22 -56
  78. package/.codex/skills/team-lifecycle-v4/SKILL.md +22 -143
  79. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +31 -223
  80. package/.codex/skills/team-quality-assurance/SKILL.md +14 -88
  81. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +46 -186
  82. package/.codex/skills/team-review/SKILL.md +12 -86
  83. package/.codex/skills/team-review/roles/coordinator/commands/monitor.md +49 -187
  84. package/.codex/skills/team-tech-debt/SKILL.md +11 -50
  85. package/.codex/skills/team-tech-debt/roles/coordinator/commands/monitor.md +50 -239
  86. package/.codex/skills/team-testing/SKILL.md +14 -99
  87. package/.codex/skills/team-testing/roles/coordinator/commands/monitor.md +52 -228
  88. package/.codex/skills/wiki-connect/SKILL.md +2 -5
  89. package/README.md +6 -0
  90. package/README.zh-CN.md +6 -0
  91. package/chains/_intent-map.json +7 -7
  92. package/chains/singles/{memory-capture.json → knowhow-capture.json} +5 -5
  93. package/chains/singles/{memory.json → knowhow.json} +6 -6
  94. package/dashboard/dist/assets/{ArtifactsPage-CUrrDGgN.js → ArtifactsPage-iJZtYsmR.js} +6 -6
  95. package/dashboard/dist/assets/ChatInput-DNnDLdQF.js +6 -0
  96. package/dashboard/dist/assets/ChatPage-BjBibfE4.js +22 -0
  97. package/dashboard/dist/assets/{CollabPage-DIUXeazv.js → CollabPage-8lUMUol_.js} +1 -1
  98. package/dashboard/dist/assets/{ExecutionPanel-VmYeADFj.js → ExecutionPanel-BKV3GZ7Q.js} +1 -1
  99. package/dashboard/dist/assets/{KanbanPage-DLq8v7hg.js → KanbanPage-diY3QmGd.js} +2 -2
  100. package/dashboard/dist/assets/{MarkdownRenderer-D7AehrnR.js → MarkdownRenderer-cYFfe1uX.js} +1 -1
  101. package/dashboard/dist/assets/McpPage-COjuIf7U.js +21 -0
  102. package/dashboard/dist/assets/MeetingRoomPage-wnvT7wlB.js +85 -0
  103. package/dashboard/dist/assets/{OutputPanel-B-Rjwgmv.js → OutputPanel-DDL90Idy.js} +1 -1
  104. package/dashboard/dist/assets/{ProblemsPanel-GEpF-oi4.js → ProblemsPanel-zFN9IIs0.js} +1 -1
  105. package/dashboard/dist/assets/{RequirementBoardPage-xs8uDM7I.js → RequirementBoardPage-DOPJoT0I.js} +2 -2
  106. package/dashboard/dist/assets/{RequirementPage-BKDSFwjA.js → RequirementPage-CEVquRgM.js} +1 -1
  107. package/dashboard/dist/assets/RoomsPage-D5USEWDh.js +1 -0
  108. package/dashboard/dist/assets/{SpecsPage-DLFb9ZH0.js → SpecsPage-BOwBin_o.js} +1 -1
  109. package/dashboard/dist/assets/{SupervisorPage-SOki_kgz.js → SupervisorPage-5iRyMU5T.js} +1 -1
  110. package/dashboard/dist/assets/TeamsPage-DlcEmr_Q.js +1 -0
  111. package/dashboard/dist/assets/{TreeBrowser-B9DHdULE.js → TreeBrowser-Y48Wz-QY.js} +1 -1
  112. package/dashboard/dist/assets/WorkflowPage-CmQaRVgL.js +6 -0
  113. package/dashboard/dist/assets/arrow-left-NCUOENvg.js +6 -0
  114. package/dashboard/dist/assets/{check-DJDk3A2a.js → check-o7nfGNHf.js} +1 -1
  115. package/dashboard/dist/assets/{chevron-right-C7bVDreZ.js → chevron-right-BXySK2fn.js} +1 -1
  116. package/dashboard/dist/assets/{circle-alert-Na1vf6qQ.js → circle-alert-DcSBokh4.js} +1 -1
  117. package/dashboard/dist/assets/{circle-check-CEGgy3NV.js → circle-check-Cd-jce4j.js} +1 -1
  118. package/dashboard/dist/assets/{circle-check-big-3JB8zRYj.js → circle-check-big-BN7Mdp4i.js} +1 -1
  119. package/dashboard/dist/assets/{circle-Qfgy4LB_.js → circle-cooAwnAR.js} +1 -1
  120. package/dashboard/dist/assets/{code-Ble63Idz.js → code-BQa9oL1n.js} +1 -1
  121. package/dashboard/dist/assets/{columns-3-BUcKlxve.js → columns-3-BzgxelGx.js} +1 -1
  122. package/dashboard/dist/assets/{download-CMqkfn8x.js → download-swRJnate.js} +1 -1
  123. package/dashboard/dist/assets/en-C_BD3UCD.js +1 -0
  124. package/dashboard/dist/assets/{folder-B9ewx9LL.js → folder-DbGbLNFN.js} +1 -1
  125. package/dashboard/dist/assets/index-BEUaOz_b.css +1 -0
  126. package/dashboard/dist/assets/{index-JTmGteaT.js → index-DIoMBMbv.js} +1 -1
  127. package/dashboard/dist/assets/index-DLBN_7fb.js +44 -0
  128. package/dashboard/dist/assets/index-uIqUCT8y.js +236 -0
  129. package/dashboard/dist/assets/{list-DI8Wn2aT.js → list-BTRAIvDq.js} +1 -1
  130. package/dashboard/dist/assets/loader-NHtB6Mdn.js +6 -0
  131. package/dashboard/dist/assets/{minus-Lp_BfctG.js → minus-BjMxRTET.js} +1 -1
  132. package/dashboard/dist/assets/{pen-line-Ch7sphzZ.js → pen-line-C4_O16H0.js} +1 -1
  133. package/dashboard/dist/assets/{pencil-_yRMHmGT.js → pencil-DTmKhyDY.js} +1 -1
  134. package/dashboard/dist/assets/{proxy-D72Y8a4Y.js → proxy-Dtx5p6IO.js} +1 -1
  135. package/dashboard/dist/assets/rows-2-GR1dZtRu.js +6 -0
  136. package/dashboard/dist/assets/{search-BS6fI6Bg.js → search-DVtgy2W7.js} +1 -1
  137. package/dashboard/dist/assets/{shallow-BXasQBvr.js → shallow-BOmvDNsv.js} +1 -1
  138. package/dashboard/dist/assets/{table-CeGlFjlP.js → table-DCzuJAFh.js} +1 -1
  139. package/dashboard/dist/assets/team-types-BPeOvVdA.js +6 -0
  140. package/dashboard/dist/assets/{terminal-BJic2yW-.js → terminal-CzogW4cl.js} +1 -1
  141. package/dashboard/dist/assets/{trash-2-Czz4X8Fb.js → trash-2-52LATVfW.js} +1 -1
  142. package/dashboard/dist/assets/users-DLFE2voE.js +6 -0
  143. package/dashboard/dist/assets/{zap-C3H0jVFA.js → zap-DhiYlgyZ.js} +1 -1
  144. package/dashboard/dist/assets/zh-CN-DvQKfow3.js +1 -0
  145. package/dashboard/dist/index.html +2 -2
  146. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.d.ts +2 -0
  147. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js +19 -11
  148. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js.map +1 -1
  149. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js +5 -0
  150. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js.map +1 -1
  151. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.d.ts +1 -0
  152. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +21 -4
  153. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
  154. package/dashboard/dist-server/dashboard/src/server/agents/env-cleanup.js +8 -0
  155. package/dashboard/dist-server/dashboard/src/server/agents/env-cleanup.js.map +1 -1
  156. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js +6 -6
  157. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js.map +1 -1
  158. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.test.js +2 -2
  159. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.test.js.map +1 -1
  160. package/dashboard/dist-server/dashboard/src/server/index.js +14 -3
  161. package/dashboard/dist-server/dashboard/src/server/index.js.map +1 -1
  162. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.d.ts +24 -0
  163. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.js +220 -0
  164. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.js.map +1 -0
  165. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.d.ts +1 -0
  166. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.js +115 -0
  167. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.js.map +1 -0
  168. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.d.ts +44 -0
  169. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.js +260 -0
  170. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.js.map +1 -0
  171. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.d.ts +1 -0
  172. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.js +194 -0
  173. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.js.map +1 -0
  174. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.d.ts +2 -0
  175. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.js +279 -0
  176. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.js.map +1 -0
  177. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.d.ts +14 -0
  178. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.js +131 -0
  179. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.js.map +1 -0
  180. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.d.ts +1 -0
  181. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.js +134 -0
  182. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.js.map +1 -0
  183. package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.d.ts +51 -0
  184. package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.js +185 -0
  185. package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.js.map +1 -0
  186. package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.d.ts +29 -0
  187. package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.js +125 -0
  188. package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.js.map +1 -0
  189. package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.d.ts +18 -0
  190. package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.js +63 -0
  191. package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.js.map +1 -0
  192. package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.d.ts +19 -0
  193. package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.js +45 -0
  194. package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.js.map +1 -0
  195. package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.d.ts +25 -0
  196. package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.js +115 -0
  197. package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.js.map +1 -0
  198. package/dashboard/dist-server/dashboard/src/server/rooms/room-types.d.ts +53 -0
  199. package/dashboard/dist-server/dashboard/src/server/rooms/room-types.js +5 -0
  200. package/dashboard/dist-server/dashboard/src/server/rooms/room-types.js.map +1 -0
  201. package/dashboard/dist-server/dashboard/src/server/routes/agents.js +6 -0
  202. package/dashboard/dist-server/dashboard/src/server/routes/agents.js.map +1 -1
  203. package/dashboard/dist-server/dashboard/src/server/routes/cli-history.js +20 -1
  204. package/dashboard/dist-server/dashboard/src/server/routes/cli-history.js.map +1 -1
  205. package/dashboard/dist-server/dashboard/src/server/routes/index.d.ts +2 -1
  206. package/dashboard/dist-server/dashboard/src/server/routes/index.js +8 -1
  207. package/dashboard/dist-server/dashboard/src/server/routes/index.js.map +1 -1
  208. package/dashboard/dist-server/dashboard/src/server/routes/install.js +1 -1
  209. package/dashboard/dist-server/dashboard/src/server/routes/install.js.map +1 -1
  210. package/dashboard/dist-server/dashboard/src/server/routes/mcp.js +2 -2
  211. package/dashboard/dist-server/dashboard/src/server/routes/mcp.js.map +1 -1
  212. package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.d.ts +3 -0
  213. package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.js +246 -0
  214. package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.js.map +1 -0
  215. package/dashboard/dist-server/dashboard/src/server/routes/rooms.d.ts +3 -0
  216. package/dashboard/dist-server/dashboard/src/server/routes/rooms.js +38 -0
  217. package/dashboard/dist-server/dashboard/src/server/routes/rooms.js.map +1 -0
  218. package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js +7 -7
  219. package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js.map +1 -1
  220. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js +1 -1
  221. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js.map +1 -1
  222. package/dashboard/dist-server/dashboard/src/server/state/event-bus.d.ts +39 -1
  223. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js +12 -0
  224. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js.map +1 -1
  225. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js +1 -1
  226. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js.map +1 -1
  227. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +25 -14
  228. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
  229. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js +6 -6
  230. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js.map +1 -1
  231. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-types.d.ts +1 -1
  232. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js +17 -16
  233. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js.map +1 -1
  234. package/dashboard/dist-server/dashboard/src/server/wiki/writer.d.ts +1 -1
  235. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js +18 -7
  236. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js.map +1 -1
  237. package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.d.ts +3 -1
  238. package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.js +75 -1
  239. package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.js.map +1 -1
  240. package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.d.ts +17 -0
  241. package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.js +192 -0
  242. package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.js.map +1 -0
  243. package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.d.ts +13 -0
  244. package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.js +37 -0
  245. package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.js.map +1 -0
  246. package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.d.ts +7 -1
  247. package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.js +39 -2
  248. package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.js.map +1 -1
  249. package/dashboard/dist-server/dashboard/src/shared/constants.js +12 -0
  250. package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
  251. package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.d.ts +1 -0
  252. package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.js +38 -0
  253. package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.js.map +1 -0
  254. package/dashboard/dist-server/dashboard/src/shared/team-types.d.ts +66 -0
  255. package/dashboard/dist-server/dashboard/src/shared/team-types.js.map +1 -1
  256. package/dashboard/dist-server/dashboard/src/shared/types.d.ts +24 -3
  257. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.d.ts +76 -2
  258. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.js.map +1 -1
  259. package/dashboard/dist-server/shared/agent-types.d.ts +2 -0
  260. package/dashboard/dist-server/src/commands/delegate.js +11 -8
  261. package/dashboard/dist-server/src/commands/delegate.js.map +1 -1
  262. package/dist/shared/agent-types.d.ts +2 -0
  263. package/dist/shared/agent-types.d.ts.map +1 -1
  264. package/dist/src/cli.js +2 -2
  265. package/dist/src/cli.js.map +1 -1
  266. package/dist/src/commands/delegate.d.ts.map +1 -1
  267. package/dist/src/commands/delegate.js +11 -8
  268. package/dist/src/commands/delegate.js.map +1 -1
  269. package/dist/src/commands/install-backend.d.ts +1 -1
  270. package/dist/src/commands/install-backend.d.ts.map +1 -1
  271. package/dist/src/commands/install-backend.js +1 -1
  272. package/dist/src/commands/install-backend.js.map +1 -1
  273. package/dist/src/commands/install-ui/ExecutionView.d.ts.map +1 -1
  274. package/dist/src/commands/install-ui/ExecutionView.js +4 -1
  275. package/dist/src/commands/install-ui/ExecutionView.js.map +1 -1
  276. package/dist/src/commands/install-ui/InstallExecution.d.ts.map +1 -1
  277. package/dist/src/commands/install-ui/InstallExecution.js +4 -1
  278. package/dist/src/commands/install-ui/InstallExecution.js.map +1 -1
  279. package/dist/src/commands/install.js +5 -5
  280. package/dist/src/commands/install.js.map +1 -1
  281. package/dist/src/commands/knowhow.d.ts +10 -0
  282. package/dist/src/commands/knowhow.d.ts.map +1 -0
  283. package/dist/src/commands/knowhow.js +217 -0
  284. package/dist/src/commands/knowhow.js.map +1 -0
  285. package/dist/src/commands/overlay-ui/OverlayList.d.ts +2 -0
  286. package/dist/src/commands/overlay-ui/OverlayList.d.ts.map +1 -1
  287. package/dist/src/commands/overlay-ui/OverlayList.js +6 -3
  288. package/dist/src/commands/overlay-ui/OverlayList.js.map +1 -1
  289. package/dist/src/commands/overlay-ui/index.d.ts.map +1 -1
  290. package/dist/src/commands/overlay-ui/index.js +70 -44
  291. package/dist/src/commands/overlay-ui/index.js.map +1 -1
  292. package/dist/src/commands/overlay.d.ts.map +1 -1
  293. package/dist/src/commands/overlay.js +4 -3
  294. package/dist/src/commands/overlay.js.map +1 -1
  295. package/dist/src/commands/update.d.ts.map +1 -1
  296. package/dist/src/commands/update.js +31 -21
  297. package/dist/src/commands/update.js.map +1 -1
  298. package/dist/src/core/manifest.d.ts +8 -1
  299. package/dist/src/core/manifest.d.ts.map +1 -1
  300. package/dist/src/core/manifest.js +3 -1
  301. package/dist/src/core/manifest.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/workflows/analyze.md +61 -185
  330. package/workflows/brainstorm.md +3 -23
  331. package/workflows/codebase-rebuild.md +79 -191
  332. package/workflows/codebase-refresh.md +26 -124
  333. package/workflows/debug.md +21 -141
  334. package/workflows/execute.md +183 -350
  335. package/workflows/fork.md +72 -230
  336. package/workflows/harvest.md +12 -79
  337. package/workflows/init.md +3 -17
  338. package/workflows/integration-test.md +21 -190
  339. package/workflows/issue-analyze.md +35 -153
  340. package/workflows/issue-discover.md +88 -263
  341. package/workflows/issue-execute.md +29 -208
  342. package/workflows/issue-plan.md +33 -154
  343. package/workflows/issue.md +44 -202
  344. package/workflows/knowhow.md +374 -0
  345. package/workflows/learn.md +30 -177
  346. package/workflows/maestro-coordinate.codex.md +77 -362
  347. package/workflows/maestro-link-coordinate.md +12 -61
  348. package/workflows/maestro.codex.md +124 -457
  349. package/workflows/maestro.md +562 -976
  350. package/workflows/map.md +16 -53
  351. package/workflows/merge.md +42 -197
  352. package/workflows/milestone-audit.md +5 -43
  353. package/workflows/milestone-complete.md +11 -60
  354. package/workflows/plan.md +188 -387
  355. package/workflows/quick.md +25 -174
  356. package/workflows/refactor.md +28 -221
  357. package/workflows/retrospective.md +104 -443
  358. package/workflows/review.md +87 -299
  359. package/workflows/roadmap.md +117 -97
  360. package/workflows/spec-generate.md +22 -118
  361. package/workflows/specs-add.md +5 -25
  362. package/workflows/specs-load.md +1 -5
  363. package/workflows/specs-remove.md +0 -11
  364. package/workflows/specs-setup.md +11 -47
  365. package/workflows/status.md +58 -200
  366. package/workflows/sync.md +28 -141
  367. package/workflows/test-gen.md +23 -100
  368. package/workflows/test.md +15 -125
  369. package/workflows/ui-design.md +139 -465
  370. package/workflows/ui-style.md +36 -228
  371. package/workflows/verify.md +52 -273
  372. package/workflows/wiki-connect.md +9 -46
  373. package/workflows/wiki-digest.md +7 -50
  374. package/workflows/wiki-manage.md +11 -108
  375. package/.claude/commands/maestro-coordinate.md +0 -63
  376. package/.claude/commands/manage-memory-capture.md +0 -59
  377. package/.codex/skills/maestro-coordinate/SKILL.md +0 -213
  378. package/.codex/skills/manage-memory-capture/SKILL.md +0 -93
  379. package/dashboard/dist/assets/ChatInput-pUOLJIKE.js +0 -49
  380. package/dashboard/dist/assets/ChatPage-B8Xqkt0v.js +0 -27
  381. package/dashboard/dist/assets/McpPage-BY0SjTgw.js +0 -21
  382. package/dashboard/dist/assets/TeamsPage-BO2kP70F.js +0 -11
  383. package/dashboard/dist/assets/WorkflowPage-C8hWbYim.js +0 -6
  384. package/dashboard/dist/assets/en-ZbRpfzuP.js +0 -1
  385. package/dashboard/dist/assets/index-C2Mcb4TJ.js +0 -231
  386. package/dashboard/dist/assets/index-DyBbPc18.css +0 -1
  387. package/dashboard/dist/assets/loader-B5F6PzFT.js +0 -11
  388. package/dashboard/dist/assets/zh-CN-CoXBFuny.js +0 -1
  389. package/workflows/maestro-coordinate.md +0 -582
  390. 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
+ }