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
@@ -18,43 +18,18 @@ Core principle: **Execute per-plan, not per-phase.** Each plan's wave DAG runs i
18
18
  ```
19
19
  Input: [phase] argument OR --dir <path>
20
20
 
21
- # Worktree scope check
22
- IF file_exists(".workflow/worktree-scope.json"):
23
- scope = read(".workflow/worktree-scope.json")
24
- IF <phase> is a number AND <phase> NOT IN scope.owned_phases:
25
- ERROR "Phase {phase} not owned by this worktree. Owned: {scope.owned_phases}"
26
- EXIT
27
-
28
- # Auto-bootstrap state.json if missing
29
- IF NOT file_exists(".workflow/state.json"):
30
- mkdir -p .workflow/scratch/
31
- Write minimal state.json
32
-
33
- IF --dir <path> is provided:
34
- 1. Set PLAN_DIRS = [<path>] // single plan
35
- 2. Validate directory exists and contains plan.json
36
-
37
- ELSE IF no arguments:
38
- // Find all pending plans for current milestone
39
- 1. Read state.json.artifacts
40
- 2. Filter: milestone == current_milestone, type == "plan", status == "completed"
41
- 3. Exclude plans that already have a corresponding EXC artifact (same path)
42
- 4. Sort by phase order (from roadmap), adhoc plans last
43
- 5. Set PLAN_DIRS = filtered plan paths
44
- 6. If empty: ERROR E001 "No pending plans found"
45
-
46
- ELSE IF argument is a number:
47
- // Find pending plans for specific phase
48
- 1. Read state.json.artifacts
49
- 2. Filter: milestone == current_milestone, type == "plan", status == "completed", phase == arg
50
- 3. Exclude plans with existing EXC artifacts
51
- 4. Set PLAN_DIRS = filtered plan paths
52
-
53
- // Execute plans sequentially
54
- FOR each PLAN_DIR IN PLAN_DIRS:
55
- execute_single_plan(PLAN_DIR)
56
- register_exc_artifact(PLAN_DIR)
57
- extract_incremental_learnings(PLAN_DIR)
21
+ Worktree scope check: if .workflow/worktree-scope.json exists, reject <phase> not in scope.owned_phases
22
+ Auto-bootstrap: create .workflow/state.json if missing
23
+
24
+ Resolve PLAN_DIRS:
25
+ --dir <path> single plan, validate plan.json exists
26
+ no arguments → all pending plans: state.json artifacts where type=plan, status=completed,
27
+ current milestone, no matching EXC artifact; sorted by phase order, adhoc last
28
+ <phase number> → pending plans for that phase only (same filter + phase match)
29
+ If empty: ERROR E001 "No pending plans found"
30
+
31
+ For each PLAN_DIR in PLAN_DIRS (sequential):
32
+ Execute plan, register EXC artifact, extract incremental learnings
58
33
  ```
59
34
 
60
35
  ---
@@ -64,9 +39,73 @@ FOR each PLAN_DIR IN PLAN_DIRS:
64
39
  | Flag | Effect |
65
40
  |------|--------|
66
41
  | `--auto-commit` | Override config: commit after each task completion |
67
- | `--method agent\|cli\|auto` | Override execution method (default: config.json.execution.method) |
42
+ | `--method agent\|codex\|gemini\|cli\|auto` | Override execution method (default: config.json.execution.method) |
68
43
  | `--executor <tool>` | Default CLI tool: gemini\|codex\|qwen\|opencode\|claude (default: first enabled in cli-tools.json) |
69
44
  | `--dir <path>` | Use arbitrary directory instead of phase resolution (skip roadmap validation) |
45
+ | `-y` | Auto-approve execution options (skip confirmation prompt) |
46
+
47
+ ---
48
+
49
+ ## E0.5: Execution Options Confirmation
50
+
51
+ **Purpose:** Let user choose how tasks execute. Supports both menu selection and natural language intent (e.g., "前端用gemini,后端用codex,其余agent"). Skipped when `-y` flag or executionContext already confirmed.
52
+
53
+ ### Skip conditions
54
+
55
+ - `-y` flag → use resolved defaults, skip prompt
56
+ - `executionContext.executionMethod` already set → skip (confirmed in /maestro-plan)
57
+
58
+ ### Tool Call
59
+
60
+ ```
61
+ AskUserQuestion({
62
+ questions: [
63
+ {
64
+ question: "How should tasks be executed? Select one, or choose Other to specify per-domain rules (e.g. '前端gemini 后端codex 其余agent')",
65
+ header: "Executor",
66
+ multiSelect: false,
67
+ options: [
68
+ { label: "Auto (Recommended)", description: "Per-task domain routing: frontend→gemini, backend→codex, general→agent" },
69
+ { label: "Agent", description: "Claude Code agent for all tasks (fastest)" },
70
+ { label: "Codex", description: "Codex CLI for all tasks (strong for complex backend)" },
71
+ { label: "Gemini", description: "Gemini CLI for all tasks (strong for frontend/UI)" }
72
+ ]
73
+ },
74
+ {
75
+ question: "Run code review after execution?",
76
+ header: "Review",
77
+ multiSelect: false,
78
+ options: [
79
+ { label: "Skip (Recommended)", description: "No code review, proceed to verification" },
80
+ { label: "Gemini Review", description: "Gemini CLI: git diff quality review" },
81
+ { label: "Codex Review", description: "Codex CLI: git-aware code review" }
82
+ ]
83
+ }
84
+ ]
85
+ })
86
+ ```
87
+
88
+ ### Parse response
89
+
90
+ **Question 1 (Executor):**
91
+
92
+ | Answer | executionMethod | domainRouting |
93
+ |--------|----------------|---------------|
94
+ | "Auto" | `"auto"` | `{ frontend: "gemini", backend: "codex", default: "agent" }` |
95
+ | "Agent" / "Codex" / "Gemini" | that value | not used |
96
+ | Other text with domain rules | `"auto"` | Parse from user text (see examples below) |
97
+
98
+ Other text parsing examples:
99
+
100
+ | User types | domainRouting |
101
+ |------------|---------------|
102
+ | `前端gemini 后端codex` | `{ frontend: "gemini", backend: "codex", default: "agent" }` |
103
+ | `backend agent, frontend gemini` | `{ frontend: "gemini", backend: "agent", default: "agent" }` |
104
+ | `all codex` | `{ default: "codex" }` |
105
+
106
+ **Question 2 (Review):** store as `codeReviewTool`
107
+
108
+ Store: `executionMethod`, `domainRouting`, `codeReviewTool`
70
109
 
71
110
  ---
72
111
 
@@ -81,9 +120,11 @@ If executionContext is available in memory:
81
120
  planObject = executionContext.planObject
82
121
  explorations = executionContext.explorations
83
122
  clarifications = executionContext.clarifications
84
- executionMethod = --method flag || executionContext.executionMethod
123
+ executionMethod = E0.5 selection || --method flag || executionContext.executionMethod
85
124
  defaultExecutor = --executor flag || executionContext.defaultExecutor
86
125
  executorAssignments = executionContext.executorAssignments || {}
126
+ domainRouting = E0.5 domainRouting || executionContext.domainRouting || {}
127
+ codeReviewTool = E0.5 selection || executionContext.codeReviewTool || "Skip"
87
128
  Skip disk reload
88
129
  ```
89
130
 
@@ -92,36 +133,24 @@ If executionContext is available in memory:
92
133
  ```
93
134
  Read ${PLAN_DIR}/plan.json
94
135
 
95
- executionMethod = --method flag || config.json.execution.method || "agent"
136
+ executionMethod = E0.5 selection || --method flag || config.json.execution.method || "auto"
96
137
  defaultExecutor = --executor flag || config.json.execution.default_executor || "gemini"
97
138
  executorAssignments = plan.json.executor_assignments || {}
139
+ domainRouting = E0.5 domainRouting || { frontend: "gemini", backend: "codex", default: "agent" }
140
+ codeReviewTool = E0.5 selection || "Skip"
98
141
  ```
99
142
 
100
143
  ### Detect completed tasks (breakpoint resume)
101
144
 
102
145
  ```
103
- completed_tasks = []
104
- For each task_id in plan.json.task_ids:
105
- Read ${PLAN_DIR}/.task/${task_id}.json
106
- If status == "completed":
107
- completed_tasks.push(task_id)
108
-
109
- If completed_tasks.length > 0:
110
- Log "Resuming: {completed_tasks.length}/{total} tasks already completed"
111
- Filter completed tasks out of wave execution queue
112
- Set current_wave = first wave with pending tasks
146
+ Scan .task/${task_id}.json for each task in plan.json.task_ids
147
+ Collect completed tasks; if any found, log resume status and advance to first wave with pending tasks
113
148
  ```
114
149
 
115
150
  ### Build wave execution queue
116
151
 
117
152
  ```
118
- waves = plan.json.waves
119
-
120
- execution_queue = []
121
- For each wave in waves:
122
- pending_tasks = wave.tasks.filter(t => !completed_tasks.includes(t))
123
- If pending_tasks.length > 0:
124
- execution_queue.push({ wave: wave.wave, tasks: pending_tasks })
153
+ Build execution_queue from plan.json.waves, including only waves with pending (non-completed) tasks
125
154
  ```
126
155
 
127
156
  ### Output
@@ -145,19 +174,25 @@ Pass specs_content to each executor agent in E2.
145
174
 
146
175
  ### Executor Resolution
147
176
 
177
+ Resolution priority: per-task assignment > explicit method > auto domain routing.
178
+
179
+ **Single executor mode** (executionMethod is agent/codex/gemini/cli): all tasks use that executor.
180
+
181
+ **Auto mode** (executionMethod is "auto"): route each task by domain using `domainRouting` map from E0.5.
182
+
183
+ For each task, judge its domain from the task definition (scope, file paths, action description):
184
+ - **frontend** — UI components, pages, styles, layouts, templates (.tsx/.jsx/.vue/.css/.html, scope contains ui/frontend/component/style/page/view)
185
+ - **backend** — API, server, database, services, algorithms (.go/.rs/.java/.py/.sql/.proto, scope contains api/backend/server/database/service/worker)
186
+ - **general** — mixed, .ts/.js only, config, tests, or unclear domain
187
+
188
+ Then look up `domainRouting[domain]`, falling back to `domainRouting.default` (which is "agent" if unset).
189
+
190
+ Log the routing decision per task before dispatch:
191
+
148
192
  ```
149
- # Priority: per-task assignment > global method > auto fallback
150
- function resolveTaskExecutor(task_id):
151
- If executorAssignments[task_id]:
152
- return executorAssignments[task_id].executor # "agent"|"gemini"|"codex"|"qwen"|"opencode"|"claude"
153
- If executionMethod == "agent":
154
- return "agent"
155
- If executionMethod == "cli":
156
- return defaultExecutor # e.g., "gemini"
157
- # executionMethod == "auto":
158
- task = loaded task definition
159
- # Heuristic: tasks with many files or multi-step implementation → agent; otherwise → CLI
160
- return (task.files.length > 5 || task.implementation.length > 8) ? "agent" : defaultExecutor
193
+ TASK-001 [frontend] gemini
194
+ TASK-002 [backend] → codex
195
+ TASK-003 [general] → agent
161
196
  ```
162
197
 
163
198
  ### Delegate Prompt Builder
@@ -209,147 +244,52 @@ ${prior_summaries}
209
244
 
210
245
  ```
211
246
  For each wave in execution_queue (sequential):
247
+ Log wave start; update index.json (current_wave, started_at)
248
+ On first wave: set state.json.status = "executing" if not already
212
249
 
213
- Log "=== Wave {wave.wave}: {wave.tasks.length} tasks ==="
250
+ For each task_id in wave.tasks (parallel):
251
+ Mark task active in state.json (last-write-wins for parallel tasks)
252
+ Load .task/${task_id}.json; resolve executor
214
253
 
215
- Update index.json:
216
- execution.current_wave = wave.wave
217
- execution.started_at = execution.started_at || now()
254
+ IF executor == "agent":
255
+ Spawn workflow-executor agent (fresh 200k context) with:
256
+ task definition, phase context, prior wave summaries, specs_content, context.md, analysis.md
257
+ Agent: implement task → verify convergence → auto-fix (max 3) → checkpoint if blocked
258
+ On success: atomic commit (if auto-commit), write .summaries/${task_id}-summary.md
259
+ Update .task/${task_id}.json: status = "completed" | "blocked"
218
260
 
219
- # State tracking (once, on first wave entry)
220
- If first_wave_entry (current_wave == execution_queue[0].wave):
221
- Read .workflow/state.json
222
- If state.json.status != "executing":
223
- state.json.status = "executing"
224
- state.json.last_updated = now()
225
- Write .workflow/state.json
261
+ ELSE (CLI path via maestro delegate):
262
+ fixedId = "${PHASE_NUM || 'scratch'}-${PHASE_SLUG}-${task_id}"
263
+ Store fixedId in index.json.execution.delegate_ids[task_id]
264
+ Dispatch: maestro delegate "${prompt}" --to ${executor} --mode write --id ${fixedId}
265
+ Post-dispatch: verify convergence criteria against file state
266
+ Write summary, update task status, auto-commit if enabled
226
267
 
227
- For each task_id in wave.tasks (parallel):
268
+ Collect result: { task_id, status, executor, summary_path, commit_hash, delegate_id }
269
+ Clear state.json.current_task_id
228
270
 
229
- # --- Per-task execution ---
230
-
231
- # Note: parallel tasks will overwrite; last-write-wins is acceptable for an advisory field
232
- 0. Mark task active in state.json
233
- Read .workflow/state.json
234
- state.json.current_task_id = task_id
235
- state.json.last_updated = now()
236
- Write .workflow/state.json
237
-
238
- 1. Load task definition
239
- Read .task/${task_id}.json (lazy loading)
240
-
241
- 2. Resolve executor and dispatch
242
- executor = resolveTaskExecutor(task_id)
243
-
244
- IF executor == "agent":
245
- # --- Agent path (existing) ---
246
- Spawn workflow-executor agent (fresh 200k context)
247
- Input:
248
- - Task definition (.task/${task_id}.json)
249
- - Phase context (index.json goal, success_criteria)
250
- - Relevant summaries from prior waves (.summaries/ of deps)
251
- - Project specs (specs_content from E1.5)
252
- - Phase context decisions (context.md)
253
- - Phase analysis scores (analysis.md)
254
-
255
- Agent responsibilities:
256
- a. Read task definition (read_first, files, action, convergence.criteria)
257
- b. Implement the task (create/modify files per task.files)
258
- c. Verify convergence.criteria pass
259
- d. If verification fails: auto-fix (max 3 attempts)
260
- e. If auto-fix fails: write checkpoint, mark task as "blocked"
261
- f. Atomic commit (if auto-commit enabled):
262
- git add <task files>
263
- git commit -m "{type}({slug}): {task.title}"
264
- g. Write .summaries/${task_id}-summary.md
265
- h. Update .task/${task_id}.json:
266
- status = "completed" | "blocked"
267
-
268
- ELSE:
269
- # --- CLI path (via maestro delegate) ---
270
- fixedId = "${PHASE_NUM || 'scratch'}-${PHASE_SLUG}-${task_id}"
271
- prompt = buildDelegatePrompt(task_def, phase_context, specs_content, prior_summaries)
272
-
273
- # Store delegate ID for resume tracking
274
- index.json.execution.delegate_ids[task_id] = fixedId
275
-
276
- # Dispatch — synchronous, returns when done
277
- Bash("maestro delegate \"${prompt}\" --to ${executor} --mode write --id ${fixedId}")
278
-
279
- # Post-dispatch processing (CLI tools don't do this internally):
280
- a. Verify convergence criteria against actual file state
281
- For each criterion in task_def.convergence.criteria:
282
- Check file contents / grep / test command
283
- b. Determine status:
284
- If all criteria pass: status = "completed"
285
- Else: status = "blocked", log which criteria failed
286
- c. Write .summaries/${task_id}-summary.md (from delegate output + verification result)
287
- d. Update .task/${task_id}.json: status = status
288
- e. Auto-commit (if --auto-commit and status == "completed"):
289
- git add <task files>
290
- git commit -m "{type}({slug}): {task.title}"
291
-
292
- 3. Collect result
293
- result = { task_id, status, executor, summary_path, commit_hash, delegate_id }
294
-
295
- 4. Clear current_task_id in state.json
296
- Read .workflow/state.json
297
- state.json.current_task_id = null
298
- state.json.last_updated = now()
299
- Write .workflow/state.json
300
-
301
- # --- End per-task ---
302
-
303
- Wait for all tasks in wave to complete
304
-
305
- # Post-wave processing
306
- For each result in wave_results:
307
- Update index.json.execution:
308
- tasks_completed += (completed count)
309
- commits.push({ hash, task, message }) for each commit
310
-
311
- If any task blocked:
312
- Log "Wave {wave.wave}: {blocked_count} tasks blocked"
313
- AskUserQuestion:
314
- "Tasks blocked: {blocked_list}. Continue to next wave or stop?"
315
- Options: [Continue (skip blocked), Stop and review]
316
- If stop: break execution loop
317
-
318
- Log "=== Wave {wave.wave} complete ==="
271
+ Wait for all wave tasks; update index.json (tasks_completed, commits)
272
+ If any blocked: prompt user to continue or stop
319
273
  ```
320
274
 
321
275
  ### Parallel Dispatch Rules
322
276
 
323
277
  ```
324
- Within a wave, tasks execute in parallel regardless of executor type:
325
- - Agent tasks: multiple Agent() calls in single message (run_in_background: false)
326
- - CLI tasks: multiple Bash("maestro delegate ...") calls in single message (run_in_background: true)
327
- - Mixed: Agent() + Bash() calls together in single message
328
- - Each task = one independent dispatch (never merge tasks into one delegate prompt)
278
+ All tasks in a wave dispatch in parallel (Agent + CLI mixed in single message).
279
+ Agent tasks: run_in_background: false | CLI tasks: run_in_background: true
280
+ Each task = one independent dispatch (never merge tasks into one delegate prompt)
329
281
  ```
330
282
 
331
283
  ### Deviation Rule
332
284
 
333
285
  ```
334
- Per task, max 3 auto-fix attempts:
335
-
336
- Agent path: auto-fix handled internally by workflow-executor agent.
337
-
338
- CLI path: auto-fix via session resume:
339
- Attempt 1: Re-dispatch with --resume ${fixedId}
340
- Attempt 2: Re-dispatch with simplified prompt (reduce to core action + criteria)
341
- Attempt 3: Fallback to agent executor for this task
286
+ Max 3 auto-fix attempts per task:
287
+ Agent path: handled internally by workflow-executor agent
288
+ CLI path: 1) --resume ${fixedId} 2) simplified prompt → 3) fallback to agent
342
289
 
343
- If all 3 fail:
344
- Mark task as "blocked" with checkpoint data:
345
- .task/${task_id}.json.meta.checkpoint = {
346
- attempt: 3,
347
- last_error: "...",
348
- partial_files: [...],
349
- executor: executor,
350
- delegate_id: fixedId
351
- }
352
- Continue wave (other tasks unaffected)
290
+ If all 3 fail: mark "blocked" with checkpoint in .task/${task_id}.json.meta.checkpoint
291
+ { attempt: 3, last_error, partial_files, executor, delegate_id: fixedId }
292
+ Continue wave (other tasks unaffected)
353
293
  ```
354
294
 
355
295
  ---
@@ -361,103 +301,51 @@ If all 3 fail:
361
301
  ### Check 1: Summary Existence
362
302
 
363
303
  ```
364
- For each task_id in index.json.plan.task_ids:
365
- Read .task/${task_id}.json
366
- If status == "completed":
367
- If NOT file exists .summaries/${task_id}-summary.md:
368
- violations.push({
369
- type: "missing_summary",
370
- severity: "warning",
371
- task_id: task_id,
372
- message: "Completed task ${task_id} has no summary file at .summaries/${task_id}-summary.md"
373
- })
304
+ For each completed task: flag warning if .summaries/${task_id}-summary.md missing
305
+ violation: { type: "missing_summary", severity: "warning", task_id, message }
374
306
  ```
375
307
 
376
308
  ### Check 2: Task Status Consistency
377
309
 
378
310
  ```
379
- For each task_id in index.json.plan.task_ids:
380
- Read .task/${task_id}.json
381
- task_status = task.status
382
-
383
- # Verify completed tasks were actually in the execution results
384
- If task_status == "completed":
385
- If task_id NOT in wave_results (collected from E2):
386
- violations.push({
387
- type: "status_mismatch",
388
- severity: "warning",
389
- task_id: task_id,
390
- message: "Task ${task_id} status is 'completed' but was not part of execution results"
391
- })
392
-
393
- # Verify tasks that ran successfully are marked completed
394
- If task_id in wave_results AND wave_results[task_id].status == "completed":
395
- If task_status != "completed":
396
- violations.push({
397
- type: "status_mismatch",
398
- severity: "critical",
399
- task_id: task_id,
400
- message: "Task ${task_id} completed execution but .task/${task_id}.json status is '${task_status}'"
401
- })
311
+ Cross-check task status against wave_results from E2:
312
+ - Completed in .task/ but not in wave_results → warning "status_mismatch"
313
+ - Completed in wave_results but not in .task/ → critical "status_mismatch"
402
314
  ```
403
315
 
404
316
  ### Check 3: Tech Stack Constraint Compliance
405
317
 
406
318
  ```
407
- # Load specs constraints from E1.5 specs_content (already loaded)
408
- tech_constraints = extract tech_stack constraints from specs_content
409
- # e.g., allowed_languages, disallowed_imports, required_patterns
410
-
411
- If tech_constraints is not empty:
412
- # Collect files modified during execution
413
- modified_files = []
414
- For each task_id in completed_tasks:
415
- Read .task/${task_id}.json
416
- For each file in task.files:
417
- modified_files.push(file.path)
418
-
419
- # Scan modified files for disallowed imports
420
- For each file_path in modified_files:
421
- If file exists ${file_path}:
422
- file_content = Read ${file_path}
423
- For each constraint in tech_constraints.disallowed_imports:
424
- If file_content matches constraint.pattern:
425
- violations.push({
426
- type: "tech_stack_violation",
427
- severity: "critical",
428
- task_id: associated_task_id,
429
- file: file_path,
430
- message: "File ${file_path} contains disallowed import matching '${constraint.pattern}': ${constraint.reason}"
431
- })
319
+ Extract tech_stack constraints from specs_content (allowed_languages, disallowed_imports, required_patterns)
320
+ If constraints exist:
321
+ Collect all files modified by completed tasks
322
+ Scan each for disallowed import patterns → critical "tech_stack_violation" per match
432
323
  ```
433
324
 
434
325
  ### Gate Logic
435
326
 
436
327
  ```
437
- critical_violations = violations.filter(v => v.severity == "critical")
438
- warnings = violations.filter(v => v.severity == "warning")
328
+ Log all warnings; log all critical violations
329
+ If any critical: set index.json.status = "blocked" with blocked_reason and violations, abort
330
+ If none critical: log "passed" and continue to E2.6
331
+ ```
332
+
333
+ ---
439
334
 
440
- If warnings.length > 0:
441
- Log "Post-wave validation: {warnings.length} warning(s)"
442
- For each warning in warnings:
443
- Log " WARN: ${warning.message}"
335
+ ## E2.6: Code Review (Optional)
444
336
 
445
- If critical_violations.length > 0:
446
- Log "Post-wave validation: {critical_violations.length} critical violation(s)"
447
- For each violation in critical_violations:
448
- Log " CRITICAL: ${violation.message}"
337
+ **Purpose:** Run code review on execution output if selected in E0.5.
449
338
 
450
- # Block execution
451
- index.json.status = "blocked"
452
- index.json.execution.blocked_reason = "Post-wave validation failed with critical violations"
453
- index.json.execution.violations = violations
454
- index.json.updated_at = now()
455
- Write index.json
339
+ ```
340
+ If codeReviewTool == "Skip": continue to E3
456
341
 
457
- Abort: "Post-wave validation failed. Fix critical violations before proceeding."
342
+ Dispatch review via maestro delegate (run_in_background: true):
343
+ --to gemini|codex (per codeReviewTool selection) --mode analysis
344
+ Prompt: review git diff (execution start → HEAD) for correctness, style, bugs
345
+ Rule: analysis-review-code-quality (gemini only)
346
+ Expected: severity-ranked issues with file:line references and fix suggestions
458
347
 
459
- # No critical violations continue to E3
460
- Log "Post-wave validation passed ({warnings.length} warnings, 0 critical)"
348
+ Wait for completion, log findings summary
461
349
  ```
462
350
 
463
351
  ---
@@ -507,26 +395,13 @@ If config.json.workflow.reflection == true:
507
395
  ## Final State Update
508
396
 
509
397
  ```
510
- all_completed = index.json.execution.tasks_completed == index.json.execution.tasks_total
511
-
512
- If all_completed:
513
- index.json.status = "verifying" (ready for /workflow:verify)
514
- index.json.execution.completed_at = now()
515
- Log "All tasks completed. Run /workflow:verify to validate results."
398
+ If all tasks completed:
399
+ index.json.status = "verifying", set completed_at → "Run /workflow:verify"
516
400
  Else:
517
- index.json.status = "executing" (partial, can resume)
518
- Log "{completed}/{total} tasks completed. Re-run /workflow:execute to resume."
401
+ index.json.status = "executing" (partial) "Re-run /workflow:execute to resume"
519
402
 
520
- index.json.updated_at = now()
521
-
522
- # Update project state.json (skip in SCRATCH_MODE)
523
- If NOT SCRATCH_MODE:
524
- Read .workflow/state.json
525
- If all_completed:
526
- state.json.status = "verifying"
527
- state.json.current_task_id = null # safety clear: no task is active once the wave loop exits
528
- state.json.last_updated = now()
529
- Write .workflow/state.json
403
+ Update index.json.updated_at
404
+ If NOT SCRATCH_MODE: sync state.json (status, clear current_task_id)
530
405
  ```
531
406
 
532
407
  ---
@@ -537,51 +412,19 @@ If NOT SCRATCH_MODE:
537
412
 
538
413
  ```
539
414
  // Register EXC artifact
540
- Read .workflow/state.json
541
- plan_artifact = state.json.artifacts.find(a => a.type == "plan" && a.path == PLAN_DIR_relative)
542
- next_id = max(artifacts.filter(a => a.type == "execute").map(a => parseInt(a.id.replace("EXC-","")))) + 1
543
-
544
- artifact = {
545
- id: "EXC-{next_id padded to 3}",
546
- type: "execute",
547
- milestone: plan_artifact.milestone,
548
- phase: plan_artifact.phase,
549
- scope: plan_artifact.scope,
550
- path: plan_artifact.path, // same path — execute writes into plan dir
551
- status: "completed",
552
- depends_on: plan_artifact.id,
553
- harvested: false,
554
- created_at: execution_start_time,
555
- completed_at: now()
556
- }
557
-
558
- state.json.artifacts.push(artifact)
559
- state.json.last_updated = now()
560
- Write state.json (atomic)
415
+ Find matching plan artifact in state.json; create EXC artifact:
416
+ { id: "EXC-{next_id padded to 3}", type: "execute", milestone, phase, scope,
417
+ path: plan_artifact.path, status: "completed", depends_on: plan_artifact.id,
418
+ harvested: false, created_at, completed_at }
419
+ Append to state.json.artifacts (atomic write)
561
420
 
562
421
  // Incremental learning extraction
563
- Read all ${PLAN_DIR}/.summaries/TASK-*-summary.md
564
- Extract: strategy adjustments, patterns discovered, pitfalls encountered
565
-
566
- // Check existing entries to avoid duplicates
567
- existing_learnings = maestro spec load --category learning
422
+ Read all .summaries/TASK-*-summary.md; extract strategy adjustments, patterns, pitfalls
423
+ Deduplicate against existing learnings (maestro spec load --category learning)
424
+ Append unique entries to .workflow/specs/learnings.md using <spec-entry> closed-tag format:
425
+ category="learning", keywords (3-5 terms), date, source="execute"
568
426
 
569
- // Append using <spec-entry> closed-tag format:
570
- FOR each extracted learning:
571
- keywords = extract_keywords(learning.content) // 3-5 domain-specific terms
572
- IF not duplicate of existing_learnings:
573
- Append to .workflow/specs/learnings.md:
574
- <spec-entry category="learning" keywords="{keywords}" date="{YYYY-MM-DD}" source="execute">
575
-
576
- ### {learning.summary}
577
-
578
- {learning.content}
579
- Phase: {phase} | Plan: {PLAN_DIR}
580
-
581
- </spec-entry>
582
-
583
- Mark artifact.harvested = true
584
- Write state.json (atomic)
427
+ Mark artifact.harvested = true; write state.json (atomic)
585
428
  ```
586
429
 
587
430
  ---
@@ -605,23 +448,13 @@ Write state.json (atomic)
605
448
  The execute workflow is fully resumable:
606
449
 
607
450
  ```
608
- State tracking in index.json.execution:
609
- tasks_completed: N # Count of finished tasks
610
- current_wave: W # Last active wave
611
- commits: [...] # All commits made
612
- method: "agent"|"cli"|"auto" # Execution method used
613
- default_executor: "gemini"|... # CLI tool used (if method != "agent")
614
- delegate_ids: { task_id: fixedId, ... } # CLI task delegate IDs
615
-
616
- Re-running /workflow:execute <phase>:
617
- 1. Reads index.json.execution.tasks_completed
618
- 2. Checks each .task/TASK-*.json status
619
- 3. For CLI-dispatched tasks with status "in-progress":
620
- fixedId = index.json.execution.delegate_ids[task_id]
621
- Check maestro delegate status ${fixedId}
622
- If completed: retrieve output, process as completed
623
- If failed: add to retry queue with --resume ${fixedId}
624
- 4. Builds queue of remaining tasks
625
- 5. Continues from next pending wave
626
- 6. No duplicate execution of completed tasks
451
+ State tracked in index.json.execution:
452
+ tasks_completed, current_wave, commits, method, default_executor,
453
+ delegate_ids: { task_id: fixedId, ... }
454
+
455
+ Resume behavior (/workflow:execute <phase> re-run):
456
+ Check each .task/TASK-*.json status + delegate status for in-progress CLI tasks
457
+ CLI tasks: retrieve completed output or retry with --resume ${fixedId}
458
+ Build queue of remaining tasks, continue from next pending wave
459
+ No duplicate execution of completed tasks
627
460
  ```