maestro-flow 0.3.15 → 0.3.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (374) hide show
  1. package/.claude/commands/maestro-amend.md +300 -0
  2. package/.claude/commands/maestro-analyze.md +1 -49
  3. package/.claude/commands/maestro-execute.md +2 -56
  4. package/.claude/commands/maestro-fork.md +3 -50
  5. package/.claude/commands/maestro-merge.md +2 -26
  6. package/.claude/commands/maestro-milestone-audit.md +1 -5
  7. package/.claude/commands/maestro-milestone-complete.md +1 -7
  8. package/.claude/commands/maestro-plan.md +6 -127
  9. package/.claude/commands/maestro-roadmap.md +3 -101
  10. package/.claude/commands/maestro-spec-generate.md +1 -25
  11. package/.claude/commands/maestro-ui-design.md +14 -73
  12. package/.claude/commands/maestro-verify.md +1 -32
  13. package/.claude/commands/maestro.md +13 -30
  14. package/.claude/commands/manage-harvest.md +7 -44
  15. package/.claude/commands/manage-knowhow-capture.md +193 -0
  16. package/.claude/commands/{manage-memory.md → manage-knowhow.md} +77 -88
  17. package/.claude/commands/manage-learn.md +3 -28
  18. package/.claude/commands/manage-status.md +1 -20
  19. package/.claude/commands/manage-wiki.md +1 -1
  20. package/.claude/commands/quality-business-test.md +1 -1
  21. package/.claude/commands/quality-debug.md +3 -18
  22. package/.claude/commands/quality-integration-test.md +3 -23
  23. package/.claude/commands/quality-retrospective.md +1 -28
  24. package/.claude/commands/quality-review.md +3 -52
  25. package/.claude/commands/quality-test-gen.md +1 -10
  26. package/.claude/commands/quality-test.md +3 -25
  27. package/.claude/commands/spec-add.md +1 -21
  28. package/.claude/commands/spec-load.md +1 -16
  29. package/.claude/commands/wiki-connect.md +2 -112
  30. package/.claude/commands/wiki-digest.md +2 -141
  31. package/.codex/skills/learn-decompose/SKILL.md +2 -8
  32. package/.codex/skills/maestro/SKILL.md +60 -146
  33. package/.codex/skills/maestro-analyze/SKILL.md +52 -150
  34. package/.codex/skills/maestro-brainstorm/SKILL.md +36 -91
  35. package/.codex/skills/maestro-composer/SKILL.md +4 -76
  36. package/.codex/skills/maestro-execute/SKILL.md +46 -177
  37. package/.codex/skills/maestro-init/SKILL.md +7 -51
  38. package/.codex/skills/maestro-link-coordinate/SKILL.md +56 -229
  39. package/.codex/skills/maestro-milestone-audit/SKILL.md +7 -36
  40. package/.codex/skills/maestro-milestone-complete/SKILL.md +11 -93
  41. package/.codex/skills/maestro-overlay/SKILL.md +23 -92
  42. package/.codex/skills/maestro-plan/SKILL.md +42 -166
  43. package/.codex/skills/maestro-player/SKILL.md +24 -149
  44. package/.codex/skills/maestro-quick/SKILL.md +5 -48
  45. package/.codex/skills/maestro-roadmap/SKILL.md +21 -66
  46. package/.codex/skills/maestro-spec-generate/SKILL.md +20 -56
  47. package/.codex/skills/maestro-ui-design/SKILL.md +6 -53
  48. package/.codex/skills/maestro-verify/SKILL.md +39 -136
  49. package/.codex/skills/manage-codebase-rebuild/SKILL.md +25 -75
  50. package/.codex/skills/manage-codebase-refresh/SKILL.md +5 -32
  51. package/.codex/skills/manage-issue/SKILL.md +1 -6
  52. package/.codex/skills/manage-issue-discover/SKILL.md +33 -93
  53. package/.codex/skills/{manage-memory → manage-knowhow}/SKILL.md +95 -95
  54. package/.codex/skills/manage-knowhow-capture/SKILL.md +110 -0
  55. package/.codex/skills/manage-learn/SKILL.md +17 -71
  56. package/.codex/skills/manage-status/SKILL.md +4 -35
  57. package/.codex/skills/manage-wiki/SKILL.md +1 -1
  58. package/.codex/skills/quality-business-test/SKILL.md +2 -14
  59. package/.codex/skills/quality-debug/SKILL.md +41 -133
  60. package/.codex/skills/quality-integration-test/SKILL.md +36 -145
  61. package/.codex/skills/quality-refactor/SKILL.md +6 -59
  62. package/.codex/skills/quality-retrospective/SKILL.md +292 -531
  63. package/.codex/skills/quality-review/SKILL.md +30 -65
  64. package/.codex/skills/quality-sync/SKILL.md +2 -11
  65. package/.codex/skills/quality-test/SKILL.md +4 -45
  66. package/.codex/skills/quality-test-gen/SKILL.md +33 -121
  67. package/.codex/skills/spec-add/SKILL.md +2 -9
  68. package/.codex/skills/spec-load/SKILL.md +4 -14
  69. package/.codex/skills/spec-map/SKILL.md +4 -37
  70. package/.codex/skills/spec-remove/SKILL.md +3 -35
  71. package/.codex/skills/spec-setup/SKILL.md +2 -19
  72. package/.codex/skills/team-coordinate/SKILL.md +20 -132
  73. package/.codex/skills/team-coordinate/roles/coordinator/commands/monitor.md +61 -215
  74. package/.codex/skills/team-executor/SKILL.md +7 -66
  75. package/.codex/skills/team-executor/roles/executor/commands/monitor.md +60 -182
  76. package/.codex/skills/team-executor/specs/session-schema.md +22 -56
  77. package/.codex/skills/team-lifecycle-v4/SKILL.md +22 -143
  78. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +31 -223
  79. package/.codex/skills/team-quality-assurance/SKILL.md +14 -88
  80. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +46 -186
  81. package/.codex/skills/team-review/SKILL.md +12 -86
  82. package/.codex/skills/team-review/roles/coordinator/commands/monitor.md +49 -187
  83. package/.codex/skills/team-tech-debt/SKILL.md +11 -50
  84. package/.codex/skills/team-tech-debt/roles/coordinator/commands/monitor.md +50 -239
  85. package/.codex/skills/team-testing/SKILL.md +14 -99
  86. package/.codex/skills/team-testing/roles/coordinator/commands/monitor.md +52 -228
  87. package/.codex/skills/wiki-connect/SKILL.md +2 -5
  88. package/README.md +6 -0
  89. package/README.zh-CN.md +6 -0
  90. package/chains/_intent-map.json +7 -7
  91. package/chains/singles/{memory-capture.json → knowhow-capture.json} +5 -5
  92. package/chains/singles/{memory.json → knowhow.json} +6 -6
  93. package/dashboard/dist/assets/{ArtifactsPage-CUrrDGgN.js → ArtifactsPage-iJZtYsmR.js} +6 -6
  94. package/dashboard/dist/assets/ChatInput-DNnDLdQF.js +6 -0
  95. package/dashboard/dist/assets/ChatPage-BjBibfE4.js +22 -0
  96. package/dashboard/dist/assets/{CollabPage-DIUXeazv.js → CollabPage-8lUMUol_.js} +1 -1
  97. package/dashboard/dist/assets/{ExecutionPanel-VmYeADFj.js → ExecutionPanel-BKV3GZ7Q.js} +1 -1
  98. package/dashboard/dist/assets/{KanbanPage-DLq8v7hg.js → KanbanPage-diY3QmGd.js} +2 -2
  99. package/dashboard/dist/assets/{MarkdownRenderer-D7AehrnR.js → MarkdownRenderer-cYFfe1uX.js} +1 -1
  100. package/dashboard/dist/assets/McpPage-COjuIf7U.js +21 -0
  101. package/dashboard/dist/assets/MeetingRoomPage-wnvT7wlB.js +85 -0
  102. package/dashboard/dist/assets/{OutputPanel-B-Rjwgmv.js → OutputPanel-DDL90Idy.js} +1 -1
  103. package/dashboard/dist/assets/{ProblemsPanel-GEpF-oi4.js → ProblemsPanel-zFN9IIs0.js} +1 -1
  104. package/dashboard/dist/assets/{RequirementBoardPage-xs8uDM7I.js → RequirementBoardPage-DOPJoT0I.js} +2 -2
  105. package/dashboard/dist/assets/{RequirementPage-BKDSFwjA.js → RequirementPage-CEVquRgM.js} +1 -1
  106. package/dashboard/dist/assets/RoomsPage-D5USEWDh.js +1 -0
  107. package/dashboard/dist/assets/{SpecsPage-DLFb9ZH0.js → SpecsPage-BOwBin_o.js} +1 -1
  108. package/dashboard/dist/assets/{SupervisorPage-SOki_kgz.js → SupervisorPage-5iRyMU5T.js} +1 -1
  109. package/dashboard/dist/assets/TeamsPage-DlcEmr_Q.js +1 -0
  110. package/dashboard/dist/assets/{TreeBrowser-B9DHdULE.js → TreeBrowser-Y48Wz-QY.js} +1 -1
  111. package/dashboard/dist/assets/WorkflowPage-CmQaRVgL.js +6 -0
  112. package/dashboard/dist/assets/arrow-left-NCUOENvg.js +6 -0
  113. package/dashboard/dist/assets/{check-DJDk3A2a.js → check-o7nfGNHf.js} +1 -1
  114. package/dashboard/dist/assets/{chevron-right-C7bVDreZ.js → chevron-right-BXySK2fn.js} +1 -1
  115. package/dashboard/dist/assets/{circle-alert-Na1vf6qQ.js → circle-alert-DcSBokh4.js} +1 -1
  116. package/dashboard/dist/assets/{circle-check-CEGgy3NV.js → circle-check-Cd-jce4j.js} +1 -1
  117. package/dashboard/dist/assets/{circle-check-big-3JB8zRYj.js → circle-check-big-BN7Mdp4i.js} +1 -1
  118. package/dashboard/dist/assets/{circle-Qfgy4LB_.js → circle-cooAwnAR.js} +1 -1
  119. package/dashboard/dist/assets/{code-Ble63Idz.js → code-BQa9oL1n.js} +1 -1
  120. package/dashboard/dist/assets/{columns-3-BUcKlxve.js → columns-3-BzgxelGx.js} +1 -1
  121. package/dashboard/dist/assets/{download-CMqkfn8x.js → download-swRJnate.js} +1 -1
  122. package/dashboard/dist/assets/en-C_BD3UCD.js +1 -0
  123. package/dashboard/dist/assets/{folder-B9ewx9LL.js → folder-DbGbLNFN.js} +1 -1
  124. package/dashboard/dist/assets/index-BEUaOz_b.css +1 -0
  125. package/dashboard/dist/assets/{index-JTmGteaT.js → index-DIoMBMbv.js} +1 -1
  126. package/dashboard/dist/assets/index-DLBN_7fb.js +44 -0
  127. package/dashboard/dist/assets/index-uIqUCT8y.js +236 -0
  128. package/dashboard/dist/assets/{list-DI8Wn2aT.js → list-BTRAIvDq.js} +1 -1
  129. package/dashboard/dist/assets/loader-NHtB6Mdn.js +6 -0
  130. package/dashboard/dist/assets/{minus-Lp_BfctG.js → minus-BjMxRTET.js} +1 -1
  131. package/dashboard/dist/assets/{pen-line-Ch7sphzZ.js → pen-line-C4_O16H0.js} +1 -1
  132. package/dashboard/dist/assets/{pencil-_yRMHmGT.js → pencil-DTmKhyDY.js} +1 -1
  133. package/dashboard/dist/assets/{proxy-D72Y8a4Y.js → proxy-Dtx5p6IO.js} +1 -1
  134. package/dashboard/dist/assets/rows-2-GR1dZtRu.js +6 -0
  135. package/dashboard/dist/assets/{search-BS6fI6Bg.js → search-DVtgy2W7.js} +1 -1
  136. package/dashboard/dist/assets/{shallow-BXasQBvr.js → shallow-BOmvDNsv.js} +1 -1
  137. package/dashboard/dist/assets/{table-CeGlFjlP.js → table-DCzuJAFh.js} +1 -1
  138. package/dashboard/dist/assets/team-types-BPeOvVdA.js +6 -0
  139. package/dashboard/dist/assets/{terminal-BJic2yW-.js → terminal-CzogW4cl.js} +1 -1
  140. package/dashboard/dist/assets/{trash-2-Czz4X8Fb.js → trash-2-52LATVfW.js} +1 -1
  141. package/dashboard/dist/assets/users-DLFE2voE.js +6 -0
  142. package/dashboard/dist/assets/{zap-C3H0jVFA.js → zap-DhiYlgyZ.js} +1 -1
  143. package/dashboard/dist/assets/zh-CN-DvQKfow3.js +1 -0
  144. package/dashboard/dist/index.html +2 -2
  145. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.d.ts +2 -0
  146. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js +19 -11
  147. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js.map +1 -1
  148. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js +5 -0
  149. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js.map +1 -1
  150. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.d.ts +1 -0
  151. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +21 -4
  152. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
  153. package/dashboard/dist-server/dashboard/src/server/agents/env-cleanup.js +8 -0
  154. package/dashboard/dist-server/dashboard/src/server/agents/env-cleanup.js.map +1 -1
  155. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js +6 -6
  156. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js.map +1 -1
  157. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.test.js +2 -2
  158. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.test.js.map +1 -1
  159. package/dashboard/dist-server/dashboard/src/server/index.js +14 -3
  160. package/dashboard/dist-server/dashboard/src/server/index.js.map +1 -1
  161. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.d.ts +24 -0
  162. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.js +220 -0
  163. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.js.map +1 -0
  164. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.d.ts +1 -0
  165. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.js +115 -0
  166. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.js.map +1 -0
  167. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.d.ts +44 -0
  168. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.js +260 -0
  169. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.js.map +1 -0
  170. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.d.ts +1 -0
  171. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.js +194 -0
  172. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.js.map +1 -0
  173. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.d.ts +2 -0
  174. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.js +279 -0
  175. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.js.map +1 -0
  176. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.d.ts +14 -0
  177. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.js +131 -0
  178. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.js.map +1 -0
  179. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.d.ts +1 -0
  180. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.js +134 -0
  181. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.js.map +1 -0
  182. package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.d.ts +51 -0
  183. package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.js +185 -0
  184. package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.js.map +1 -0
  185. package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.d.ts +29 -0
  186. package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.js +125 -0
  187. package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.js.map +1 -0
  188. package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.d.ts +18 -0
  189. package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.js +63 -0
  190. package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.js.map +1 -0
  191. package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.d.ts +19 -0
  192. package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.js +45 -0
  193. package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.js.map +1 -0
  194. package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.d.ts +25 -0
  195. package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.js +115 -0
  196. package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.js.map +1 -0
  197. package/dashboard/dist-server/dashboard/src/server/rooms/room-types.d.ts +53 -0
  198. package/dashboard/dist-server/dashboard/src/server/rooms/room-types.js +5 -0
  199. package/dashboard/dist-server/dashboard/src/server/rooms/room-types.js.map +1 -0
  200. package/dashboard/dist-server/dashboard/src/server/routes/agents.js +6 -0
  201. package/dashboard/dist-server/dashboard/src/server/routes/agents.js.map +1 -1
  202. package/dashboard/dist-server/dashboard/src/server/routes/cli-history.js +20 -1
  203. package/dashboard/dist-server/dashboard/src/server/routes/cli-history.js.map +1 -1
  204. package/dashboard/dist-server/dashboard/src/server/routes/index.d.ts +2 -1
  205. package/dashboard/dist-server/dashboard/src/server/routes/index.js +8 -1
  206. package/dashboard/dist-server/dashboard/src/server/routes/index.js.map +1 -1
  207. package/dashboard/dist-server/dashboard/src/server/routes/install.js +1 -1
  208. package/dashboard/dist-server/dashboard/src/server/routes/install.js.map +1 -1
  209. package/dashboard/dist-server/dashboard/src/server/routes/mcp.js +2 -2
  210. package/dashboard/dist-server/dashboard/src/server/routes/mcp.js.map +1 -1
  211. package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.d.ts +3 -0
  212. package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.js +246 -0
  213. package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.js.map +1 -0
  214. package/dashboard/dist-server/dashboard/src/server/routes/rooms.d.ts +3 -0
  215. package/dashboard/dist-server/dashboard/src/server/routes/rooms.js +38 -0
  216. package/dashboard/dist-server/dashboard/src/server/routes/rooms.js.map +1 -0
  217. package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js +7 -7
  218. package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js.map +1 -1
  219. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js +1 -1
  220. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js.map +1 -1
  221. package/dashboard/dist-server/dashboard/src/server/state/event-bus.d.ts +39 -1
  222. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js +12 -0
  223. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js.map +1 -1
  224. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js +1 -1
  225. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js.map +1 -1
  226. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +25 -14
  227. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
  228. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js +6 -6
  229. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js.map +1 -1
  230. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-types.d.ts +1 -1
  231. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js +17 -16
  232. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js.map +1 -1
  233. package/dashboard/dist-server/dashboard/src/server/wiki/writer.d.ts +1 -1
  234. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js +18 -7
  235. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js.map +1 -1
  236. package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.d.ts +3 -1
  237. package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.js +75 -1
  238. package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.js.map +1 -1
  239. package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.d.ts +17 -0
  240. package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.js +192 -0
  241. package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.js.map +1 -0
  242. package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.d.ts +13 -0
  243. package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.js +37 -0
  244. package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.js.map +1 -0
  245. package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.d.ts +7 -1
  246. package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.js +39 -2
  247. package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.js.map +1 -1
  248. package/dashboard/dist-server/dashboard/src/shared/constants.js +12 -0
  249. package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
  250. package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.d.ts +1 -0
  251. package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.js +38 -0
  252. package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.js.map +1 -0
  253. package/dashboard/dist-server/dashboard/src/shared/team-types.d.ts +66 -0
  254. package/dashboard/dist-server/dashboard/src/shared/team-types.js.map +1 -1
  255. package/dashboard/dist-server/dashboard/src/shared/types.d.ts +24 -3
  256. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.d.ts +76 -2
  257. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.js.map +1 -1
  258. package/dashboard/dist-server/shared/agent-types.d.ts +2 -0
  259. package/dashboard/dist-server/src/commands/delegate.js +11 -8
  260. package/dashboard/dist-server/src/commands/delegate.js.map +1 -1
  261. package/dist/shared/agent-types.d.ts +2 -0
  262. package/dist/shared/agent-types.d.ts.map +1 -1
  263. package/dist/src/cli.js +2 -2
  264. package/dist/src/cli.js.map +1 -1
  265. package/dist/src/commands/delegate.d.ts.map +1 -1
  266. package/dist/src/commands/delegate.js +11 -8
  267. package/dist/src/commands/delegate.js.map +1 -1
  268. package/dist/src/commands/install-backend.d.ts +1 -1
  269. package/dist/src/commands/install-backend.d.ts.map +1 -1
  270. package/dist/src/commands/install-backend.js +1 -1
  271. package/dist/src/commands/install-backend.js.map +1 -1
  272. package/dist/src/commands/knowhow.d.ts +10 -0
  273. package/dist/src/commands/knowhow.d.ts.map +1 -0
  274. package/dist/src/commands/knowhow.js +217 -0
  275. package/dist/src/commands/knowhow.js.map +1 -0
  276. package/dist/src/commands/overlay-ui/OverlayList.d.ts +2 -0
  277. package/dist/src/commands/overlay-ui/OverlayList.d.ts.map +1 -1
  278. package/dist/src/commands/overlay-ui/OverlayList.js +6 -3
  279. package/dist/src/commands/overlay-ui/OverlayList.js.map +1 -1
  280. package/dist/src/commands/overlay-ui/index.d.ts.map +1 -1
  281. package/dist/src/commands/overlay-ui/index.js +70 -44
  282. package/dist/src/commands/overlay-ui/index.js.map +1 -1
  283. package/dist/src/commands/overlay.d.ts.map +1 -1
  284. package/dist/src/commands/overlay.js +4 -3
  285. package/dist/src/commands/overlay.js.map +1 -1
  286. package/dist/src/core/overlay/applier.d.ts +1 -1
  287. package/dist/src/core/overlay/applier.d.ts.map +1 -1
  288. package/dist/src/core/overlay/applier.js +40 -13
  289. package/dist/src/core/overlay/applier.js.map +1 -1
  290. package/dist/src/core/overlay/loader.d.ts.map +1 -1
  291. package/dist/src/core/overlay/loader.js +6 -0
  292. package/dist/src/core/overlay/loader.js.map +1 -1
  293. package/dist/src/core/overlay/types.d.ts +5 -1
  294. package/dist/src/core/overlay/types.d.ts.map +1 -1
  295. package/dist/src/core/overlay/types.js +1 -1
  296. package/dist/src/core/overlay/types.js.map +1 -1
  297. package/dist/src/hooks/context-monitor.js +1 -1
  298. package/dist/src/hooks/context-monitor.js.map +1 -1
  299. package/dist/src/hooks/skill-context.js +1 -1
  300. package/dist/src/hooks/skill-context.js.map +1 -1
  301. package/dist/src/mcp/delegate-channel-relay.d.ts +4 -0
  302. package/dist/src/mcp/delegate-channel-relay.d.ts.map +1 -1
  303. package/dist/src/mcp/delegate-channel-relay.js +73 -4
  304. package/dist/src/mcp/delegate-channel-relay.js.map +1 -1
  305. package/dist/src/tools/index.js +2 -2
  306. package/dist/src/tools/index.js.map +1 -1
  307. package/dist/src/tools/store-knowhow.d.ts +21 -0
  308. package/dist/src/tools/store-knowhow.d.ts.map +1 -0
  309. package/dist/src/tools/store-knowhow.js +295 -0
  310. package/dist/src/tools/store-knowhow.js.map +1 -0
  311. package/package.json +1 -1
  312. package/shared/agent-types.ts +2 -0
  313. package/workflows/analyze.md +61 -185
  314. package/workflows/brainstorm.md +3 -23
  315. package/workflows/codebase-rebuild.md +79 -191
  316. package/workflows/codebase-refresh.md +26 -124
  317. package/workflows/debug.md +21 -141
  318. package/workflows/execute.md +183 -350
  319. package/workflows/fork.md +72 -230
  320. package/workflows/harvest.md +12 -79
  321. package/workflows/init.md +3 -17
  322. package/workflows/integration-test.md +21 -190
  323. package/workflows/issue-analyze.md +35 -153
  324. package/workflows/issue-discover.md +88 -263
  325. package/workflows/issue-execute.md +29 -208
  326. package/workflows/issue-plan.md +33 -154
  327. package/workflows/issue.md +44 -202
  328. package/workflows/knowhow.md +374 -0
  329. package/workflows/learn.md +30 -177
  330. package/workflows/maestro-coordinate.codex.md +77 -362
  331. package/workflows/maestro-link-coordinate.md +12 -61
  332. package/workflows/maestro.codex.md +124 -457
  333. package/workflows/maestro.md +562 -976
  334. package/workflows/map.md +16 -53
  335. package/workflows/merge.md +42 -197
  336. package/workflows/milestone-audit.md +5 -43
  337. package/workflows/milestone-complete.md +11 -60
  338. package/workflows/plan.md +176 -387
  339. package/workflows/quick.md +25 -174
  340. package/workflows/refactor.md +28 -221
  341. package/workflows/retrospective.md +104 -443
  342. package/workflows/review.md +87 -299
  343. package/workflows/roadmap.md +117 -97
  344. package/workflows/spec-generate.md +22 -118
  345. package/workflows/specs-add.md +5 -25
  346. package/workflows/specs-load.md +1 -5
  347. package/workflows/specs-remove.md +0 -11
  348. package/workflows/specs-setup.md +11 -47
  349. package/workflows/status.md +58 -200
  350. package/workflows/sync.md +28 -141
  351. package/workflows/test-gen.md +23 -100
  352. package/workflows/test.md +15 -125
  353. package/workflows/ui-design.md +139 -465
  354. package/workflows/ui-style.md +36 -228
  355. package/workflows/verify.md +52 -273
  356. package/workflows/wiki-connect.md +9 -46
  357. package/workflows/wiki-digest.md +7 -50
  358. package/workflows/wiki-manage.md +11 -108
  359. package/.claude/commands/maestro-coordinate.md +0 -63
  360. package/.claude/commands/manage-memory-capture.md +0 -59
  361. package/.codex/skills/maestro-coordinate/SKILL.md +0 -213
  362. package/.codex/skills/manage-memory-capture/SKILL.md +0 -93
  363. package/dashboard/dist/assets/ChatInput-pUOLJIKE.js +0 -49
  364. package/dashboard/dist/assets/ChatPage-B8Xqkt0v.js +0 -27
  365. package/dashboard/dist/assets/McpPage-BY0SjTgw.js +0 -21
  366. package/dashboard/dist/assets/TeamsPage-BO2kP70F.js +0 -11
  367. package/dashboard/dist/assets/WorkflowPage-C8hWbYim.js +0 -6
  368. package/dashboard/dist/assets/en-ZbRpfzuP.js +0 -1
  369. package/dashboard/dist/assets/index-C2Mcb4TJ.js +0 -231
  370. package/dashboard/dist/assets/index-DyBbPc18.css +0 -1
  371. package/dashboard/dist/assets/loader-B5F6PzFT.js +0 -11
  372. package/dashboard/dist/assets/zh-CN-CoXBFuny.js +0 -1
  373. package/workflows/maestro-coordinate.md +0 -582
  374. package/workflows/memory.md +0 -451
@@ -1,976 +1,562 @@
1
- # Workflow: maestro
2
-
3
- Intelligent coordinator that routes user intent to optimal command chain based on project state.
4
- Combines intent classification with state-aware routing to orchestrate all maestro commands.
5
-
6
- ---
7
-
8
- ## Prerequisites
9
-
10
- - None for initial invocation (coordinator can bootstrap from scratch)
11
- - For `continue`/`next`: `.workflow/state.json` must exist
12
- - For `-c` (resume): `.workflow/.maestro/*/status.json` must exist
13
-
14
- ---
15
-
16
- ### Step 1: Parse Arguments & Detect Mode
17
-
18
- **Parse $ARGUMENTS for flags and intent:**
19
-
20
- ```javascript
21
- const autoYes = /\b(-y|--yes)\b/.test($ARGUMENTS)
22
- const resumeMode = /\b(-c|--continue)\b/.test($ARGUMENTS)
23
- const dryRun = /\b--dry-run\b/.test($ARGUMENTS)
24
- const forcedChain = $ARGUMENTS.match(/--chain\s+(\S+)/)?.[1] || null
25
- const intent = $ARGUMENTS
26
- .replace(/\b(-y|--yes|-c|--continue|--dry-run)\b/g, '')
27
- .replace(/--chain\s+\S+/g, '')
28
- .trim()
29
- ```
30
-
31
- **If resumeMode:**
32
- 1. Scan `.workflow/.maestro/` for latest session (or session ID if specified)
33
- 2. Read `status.json` → find last completed step, remaining steps
34
- 3. Set `$CHAIN` from status.json, `$STEP_INDEX` = last_completed + 1
35
- 4. If no session found: **Error E004** — list available sessions with dates
36
- 5. Jump to **Step 6** (Execute Chain) at resume point
37
-
38
- **Display banner:**
39
- ```
40
- ============================================================
41
- MAESTRO COORDINATOR
42
- ============================================================
43
- Mode: {intent-based | state-based | resume}
44
- Auto: {yes | no}
45
- Input: {intent or "continue"}
46
- ```
47
-
48
- ---
49
-
50
- ### Step 2: Read Project State
51
-
52
- **Load project state (if exists):**
53
-
54
- ```bash
55
- test -f .workflow/state.json && echo "exists" || echo "missing"
56
- ```
57
-
58
- **If `.workflow/state.json` exists:**
59
- 1. Read `state.json` → extract `current_milestone`, `status`, `milestones[]`, `artifacts[]`, `accumulated_context`
60
- 2. Read `.workflow/roadmap.md` → extract phase list with titles
61
- 3. Derive progress from artifact registry:
62
- - Group `artifacts[]` by phase for current milestone
63
- - For each phase: determine furthest artifact type (analyze→plan→execute→verify)
64
- - Identify which phases have pending plans (plan artifact without execute artifact)
65
- 4. Build `$PROJECT_STATE`:
66
- ```json
67
- {
68
- "initialized": true,
69
- "current_milestone": "M1",
70
- "milestone_name": "MVP Auth",
71
- "milestone_progress": {
72
- "phases_total": 3,
73
- "phases_with_execute": 1,
74
- "phases_with_plan": 2,
75
- "adhoc_count": 0
76
- },
77
- "latest_artifact": { "id": "PLN-002", "type": "plan", "phase": 2 },
78
- "pending_actions": ["execute phase 2", "analyze phase 3"],
79
- "has_blockers": false,
80
- "suggested_next": null
81
- }
82
- ```
83
-
84
- **If `.workflow/state.json` missing:**
85
- - `$PROJECT_STATE = { initialized: false }`
86
- - If `$INTENT` is also empty: **Error E001** — suggest `maestro-init` or describe a task
87
-
88
- ---
89
-
90
- ### Step 3: Analyze Intent
91
-
92
- **If `$FORCED_CHAIN` is set:**
93
- - Validate against known chains: `full-lifecycle`, `spec-driven`, `brainstorm-driven`, `ui-design-driven`, `analyze-plan-execute`, `execute-verify`, `quality-loop`, `milestone-close`, `next-milestone`, `quick`, `review`, `issue-full`, `issue-quick`, `fork`, `merge`
94
- - If valid: skip intent analysis, jump to **Step 5**
95
- - If invalid: display valid chains, ask user to choose
96
-
97
- #### 3a: Exact-match keywords (fast path)
98
-
99
- Before LLM extraction, check for exact-match special keywords:
100
-
101
- ```javascript
102
- const exactMatch = {
103
- 'continue': 'state_continue', 'next': 'state_continue', 'go': 'state_continue',
104
- '继续': 'state_continue', '下一步': 'state_continue',
105
- 'status': 'status', '状态': 'status', 'dashboard': 'status',
106
- };
107
- const normalized = intent.toLowerCase().trim();
108
- if (exactMatch[normalized]) {
109
- taskType = exactMatch[normalized];
110
- // skip to Step 5
111
- }
112
- ```
113
-
114
- #### 3b: Structured intent extraction (LLM-native)
115
-
116
- Instead of regex pattern matching, extract a structured intent tuple from the user's natural language. This leverages the LLM's semantic understanding to disambiguate polysemous words (e.g., "问题" as bug vs. issue-tracker item).
117
-
118
- **Extract the following JSON from the user input:**
119
-
120
- ```json
121
- {
122
- "action": "<from enum>",
123
- "object": "<from enum>",
124
- "scope": "<module/file/area or null>",
125
- "issue_id": "<ISS-XXXXXXXX-NNN if mentioned, else null>",
126
- "phase_ref": "<integer if mentioned, else null>",
127
- "urgency": "<low | normal | high>"
128
- }
129
- ```
130
-
131
- **Action enum** (what the user wants to do):
132
-
133
- | action | Triggered by (semantic, not regex) |
134
- |--------|-----------------------------------|
135
- | `create` | Build something new — new feature, new component, new spec, new project |
136
- | `fix` | Repair something broken — fix bug, resolve error, patch, 修复, 修, 解决 |
137
- | `analyze` | Understand something — analyze, evaluate, assess, investigate, 分析, 评估 |
138
- | `plan` | Design approach — plan, break down, design, architect, 规划, 分解 |
139
- | `execute` | Implement planned work — execute, implement, develop, code, 实现, 开发 |
140
- | `verify` | Check completeness against goals — verify, validate, check goals, 验证 |
141
- | `review` | Evaluate code quality — review code, code review, 代码审查 |
142
- | `test` | Run or create tests — test, UAT, acceptance, 测试, 验收 |
143
- | `debug` | Diagnose failures — debug, diagnose, troubleshoot, 调试, 排查 |
144
- | `refactor` | Restructure without behavior change — refactor, clean up, tech debt, 重构 |
145
- | `explore` | Open-ended discovery brainstorm, ideate, discover, explore, 头脑风暴, 发散 |
146
- | `manage` | CRUD / lifecycle ops — list, create issue, close, update, track, 管理 |
147
- | `transition` | Move to next phase/milestone — next phase, advance, complete milestone |
148
- | `continue` | Resume work — continue, next, go on, 继续 |
149
- | `sync` | Update docs/state sync, refresh, update docs, 同步 |
150
- | `fork` | Create worktree for parallel milestone fork, worktree, parallel, 分叉, 并行 |
151
- | `merge` | Merge worktree back merge worktree, merge milestone, 合并工作树 |
152
- | `learn` | Capture insights — learn, capture insight, eureka, 记录洞察 |
153
- | `retrospect` | Post-mortem review retrospective, retro, 复盘, post-mortem |
154
-
155
- **Object enum** (what the action targets):
156
-
157
- | object | Meaning |
158
- |--------|---------|
159
- | `feature` | New functionality or enhancement |
160
- | `bug` | Defect, error, broken behavior (includes "问题" when meaning "something is wrong") |
161
- | `issue` | Issue-tracker item (includes "问题" when meaning "tracked issue for management") |
162
- | `code` | Source code in general |
163
- | `test` | Tests, test suite, test coverage |
164
- | `spec` | Specification, PRD, product requirements |
165
- | `phase` | Workflow phase |
166
- | `milestone` | Workflow milestone |
167
- | `doc` | Documentation |
168
- | `performance` | Performance characteristics |
169
- | `security` | Security concerns |
170
- | `ui` | User interface, design, prototype |
171
- | `memory` | Memory/knowledge management |
172
- | `codebase` | Codebase documentation/mapping |
173
- | `team` | Team-based multi-agent execution |
174
- | `config` | Configuration, setup, initialization |
175
-
176
- **Disambiguation rules for "问题" / "issue" / "problem":**
177
- - "问题" / "problem" describing **something broken or wrong** → `object: "bug"` (route to debug/fix)
178
- - "问题" / "issue" referring to **a tracked item** (especially with ISS-ID, or in context of "create/list/manage issue") → `object: "issue"` (route to issue management)
179
- - When ambiguous, prefer `"bug"` — it routes to the main workflow (debug) which is more actionable
180
-
181
- #### 3c: Route via action × object matrix
182
-
183
- ```javascript
184
- function routeIntent(intent, projectState) {
185
- const { action, object, issue_id, phase_ref } = intent;
186
-
187
- // ── Hard signal: explicit issue ID issue pipeline ──
188
- if (issue_id) {
189
- const issueRoutes = {
190
- 'analyze': 'issue_analyze',
191
- 'plan': 'issue_plan',
192
- 'fix': 'issue_execute',
193
- 'execute': 'issue_execute',
194
- 'debug': 'issue_analyze',
195
- 'manage': 'issue',
196
- };
197
- return { taskType: issueRoutes[action] || 'issue', issueId: issue_id };
198
- }
199
-
200
- // ── Action × Object routing matrix ──
201
- const matrix = {
202
- 'fix': {
203
- 'bug': 'debug',
204
- 'issue': 'issue',
205
- 'code': 'debug',
206
- 'performance': 'debug',
207
- 'security': 'debug',
208
- 'test': 'debug',
209
- '_default': 'debug',
210
- },
211
- 'create': {
212
- 'feature': 'quick', // new feature without lifecyclequick
213
- 'issue': 'issue',
214
- 'test': 'test_gen',
215
- 'spec': 'spec_generate',
216
- 'ui': 'ui_design',
217
- 'config': 'init',
218
- 'phase': 'phase_add',
219
- '_default': 'quick',
220
- },
221
- 'analyze': {
222
- 'bug': 'analyze',
223
- 'issue': 'issue_analyze',
224
- 'code': 'analyze',
225
- 'performance': 'analyze',
226
- 'security': 'analyze',
227
- 'feature': 'analyze',
228
- 'codebase': 'spec_map',
229
- '_default': 'analyze',
230
- },
231
- 'explore': {
232
- 'issue': 'issue_discover',
233
- 'feature': 'brainstorm',
234
- 'ui': 'ui_design',
235
- '_default': 'brainstorm',
236
- },
237
- 'plan': {
238
- 'issue': 'issue_plan',
239
- 'spec': 'spec_generate',
240
- 'phase': 'plan',
241
- 'milestone': 'plan',
242
- '_default': 'plan',
243
- },
244
- 'execute': {
245
- 'issue': 'issue_execute',
246
- '_default': 'execute',
247
- },
248
- 'verify': { '_default': 'verify' },
249
- 'review': { '_default': 'review' },
250
- 'test': {
251
- 'feature': 'test',
252
- 'code': 'test',
253
- '_default': 'test',
254
- },
255
- 'debug': { '_default': 'debug' },
256
- 'refactor': { '_default': 'refactor' },
257
- 'manage': {
258
- 'issue': 'issue',
259
- 'milestone': 'milestone_audit',
260
- 'phase': 'milestone_close',
261
- 'memory': 'memory',
262
- 'doc': 'sync',
263
- 'codebase': 'codebase_refresh',
264
- 'config': 'spec_setup',
265
- 'team': 'team_coordinate',
266
- '_default': 'status',
267
- },
268
- 'transition': {
269
- 'phase': 'milestone_close',
270
- 'milestone': 'milestone_complete',
271
- '_default': 'milestone_close',
272
- },
273
- 'continue': { '_default': 'state_continue' },
274
- 'sync': {
275
- 'doc': 'sync',
276
- 'codebase': 'codebase_refresh',
277
- '_default': 'sync',
278
- },
279
- 'fork': { '_default': 'fork' },
280
- 'merge': { '_default': 'merge' },
281
- 'learn': { '_default': 'learn' },
282
- 'retrospect': { '_default': 'retrospective' },
283
- };
284
-
285
- const actionMap = matrix[action];
286
- if (!actionMap) return { taskType: 'quick' };
287
-
288
- const taskType = actionMap[object] || actionMap['_default'] || 'quick';
289
-
290
- // ── Team skill detection ──
291
- if (object === 'team') {
292
- const teamRoutes = {
293
- 'review': 'team_review',
294
- 'test': 'team_test',
295
- 'debug': 'team_qa',
296
- 'analyze': 'team_qa',
297
- 'refactor': 'team_tech_debt',
298
- 'execute': 'team_lifecycle',
299
- 'plan': 'team_coordinate',
300
- '_default': 'team_coordinate',
301
- };
302
- return { taskType: teamRoutes[action] || 'team_coordinate' };
303
- }
304
-
305
- return { taskType };
306
- }
307
- ```
308
-
309
- #### 3d: State-aware chain upgrade
310
-
311
- After routing, check if the resolved command should be upgraded to a multi-step chain based on project state:
312
-
313
- ```javascript
314
- function upgradeChain(taskType, projectState) {
315
- // Issue executeauto-append review gate
316
- if (taskType === 'issue_execute') {
317
- return 'issue-full'; // analyze → plan → execute → review
318
- }
319
-
320
- // Debug/fix in executing phasedebug + re-execute + verify
321
- if (taskType === 'debug' && projectState.initialized && projectState.phase_status === 'executing') {
322
- return null; // keep single-step, but state validation (5b) will prepend/append as needed
323
- }
324
-
325
- return null; // no upgrade, use default chainMap lookup
326
- }
327
- ```
328
-
329
- #### 3e: Compute clarity score
330
-
331
- From the extracted intent tuple:
332
- - 3: `action` + `object` + `scope` all present (e.g., "plan phase 2 with gap fixes")
333
- - 2: `action` + `object` present (e.g., "run tests on auth module")
334
- - 1: Only `action` present, or only vague `object` (e.g., "help with quality")
335
- - 0: Neither `action` nor `object` could be extracted
336
-
337
- **Output:**
338
- ```
339
- Intent Analysis:
340
- Action: {action}
341
- Object: {object}
342
- Scope: {scope or "none"}
343
- Issue ID: {issue_id or "none"}
344
- Task type: {task_type}
345
- Clarity: {clarity_score}/3
346
- Phase ref: {N or "none"}
347
- ```
348
-
349
- ---
350
-
351
- ### Step 4: Clarify (if clarity_score < 2)
352
-
353
- **Skip if `$AUTO_MODE` is true.**
354
-
355
- **If clarity_score == 0:**
356
- ```
357
- AskUserQuestion:
358
- header: "Unclear Intent"
359
- question: "I couldn't understand your request. What would you like to do?"
360
- options:
361
- - "Start a new project" → task_type = init
362
- - "Continue working" task_type = state_continue
363
- - "Run a quick task" → task_type = quick
364
- - "Check status" task_type = status
365
- - "Let me rephrase" → re-run Step 3 with new input
366
- ```
367
-
368
- **If clarity_score == 1:**
369
- ```
370
- AskUserQuestion:
371
- header: "Clarification"
372
- question: "I think you want to {inferred_action}. Is that right?"
373
- options:
374
- - "Yes, proceed" → continue
375
- - "{alternative_1}" → update task_type
376
- - "{alternative_2}" → update task_type
377
- - "Let me rephrase" → re-run Step 3
378
- ```
379
-
380
- Max 2 clarification rounds. If still unclear: **Error E002**.
381
-
382
- ---
383
-
384
- ### Step 5: Select Chain & Confirm
385
-
386
- #### 5a: Map task_type chain
387
-
388
- **State-based routing (task_type == `state_continue`):**
389
-
390
- Run state detection algorithm using `$PROJECT_STATE`:
391
-
392
- ```javascript
393
- function detectNextAction(state) {
394
- if (!state.initialized) return { chain: 'init', steps: ['maestro-init'] };
395
-
396
- const ps = state.phase_status;
397
- const art = state.phase_artifacts;
398
- const exec = state.execution;
399
- const ver = state.verification_status;
400
- const uat = state.uat_status;
401
-
402
- // Post-milestone state: initialized, no roadmap, has accumulated_context
403
- // This happens after milestone-complete deletes roadmap.md
404
- const hasRoadmap = fileExists('.workflow/roadmap.md');
405
- if (state.phases_total === 0 && !hasRoadmap && state.accumulated_context) {
406
- // Format deferred items and key decisions as context for new roadmap
407
- const deferred = (state.accumulated_context.deferred || []).join('; ');
408
- const decisions = (state.accumulated_context.key_decisions || []).join('; ');
409
- const context = [
410
- deferred ? `Deferred from previous milestone: ${deferred}` : '',
411
- decisions ? `Key decisions carried forward: ${decisions}` : ''
412
- ].filter(Boolean).join('. ');
413
- return {
414
- chain: 'next-milestone',
415
- steps: [
416
- { cmd: 'maestro-roadmap', args: `"Plan next milestone. ${context}"` }
417
- ]
418
- };
419
- }
420
-
421
- // No phases exist and no prior context — fresh start
422
- if (state.phases_total === 0) {
423
- return { chain: 'brainstorm-driven', steps: ['maestro-brainstorm', 'maestro-plan', 'maestro-execute', 'maestro-verify'] };
424
- }
425
-
426
- // Phase pending determine entry point by artifacts (progressive: analyze → plan)
427
- if (ps === 'pending') {
428
- if (art.context) return { chain: 'plan', steps: ['maestro-plan'] };
429
- if (art.analysis) return { chain: 'analyze-quick', steps: ['maestro-analyze -q'] };
430
- if (art.brainstorm) return { chain: 'analyze', steps: ['maestro-analyze'] };
431
- return { chain: 'analyze', steps: ['maestro-analyze'] };
432
- }
433
-
434
- // Planning in progress
435
- if (ps === 'exploring' || ps === 'planning') {
436
- if (art.plan) return { chain: 'execute-verify', steps: ['maestro-execute', 'maestro-verify'] };
437
- return { chain: 'plan', steps: ['maestro-plan'] };
438
- }
439
-
440
- // Executing
441
- if (ps === 'executing') {
442
- if (exec.tasks_completed >= exec.tasks_total && exec.tasks_total > 0)
443
- return { chain: 'verify', steps: ['maestro-verify'] };
444
- if (state.has_blockers) return { chain: 'debug', steps: ['quality-debug'] };
445
- return { chain: 'execute', steps: ['maestro-execute'] };
446
- }
447
-
448
- // Verifying
449
- if (ps === 'verifying') {
450
- const rev = state.review_verdict; // "PASS" | "WARN" | "BLOCK" | null
451
- if (ver === 'passed') {
452
- // Review gate: run review before UAT if not yet done
453
- if (!rev) return { chain: 'review', steps: ['quality-review'] };
454
- if (rev === 'BLOCK') return { chain: 'review-fix', steps: ['maestro-plan --gaps', 'maestro-execute', 'quality-review'] };
455
- // Review passed or warned — proceed to UAT
456
- if (uat === 'pending') return { chain: 'test', steps: ['quality-test'] };
457
- if (uat === 'passed') return { chain: 'milestone-close', steps: ['maestro-milestone-audit', 'maestro-milestone-complete'] };
458
- if (uat === 'failed') return { chain: 'debug', steps: ['quality-debug --from-uat {phase}'] };
459
- if (uat === 'in_progress') return { chain: 'test', steps: ['quality-test'] };
460
- return { chain: 'test', steps: ['quality-test'] };
461
- }
462
- // Verification has gaps
463
- return { chain: 'quality-loop-partial', steps: ['maestro-plan --gaps', 'maestro-execute', 'maestro-verify'] };
464
- }
465
-
466
- // Testing
467
- if (ps === 'testing') {
468
- if (uat === 'passed') return { chain: 'milestone-close', steps: ['maestro-milestone-audit', 'maestro-milestone-complete'] };
469
- return { chain: 'debug', steps: ['quality-debug --from-uat {phase}'] };
470
- }
471
-
472
- // Phase completed
473
- if (ps === 'completed') {
474
- if (state.phases_completed >= state.phases_total)
475
- return { chain: 'milestone-close', steps: ['maestro-milestone-audit', 'maestro-milestone-complete'] };
476
- return { chain: 'milestone-close', steps: ['maestro-milestone-audit', 'maestro-milestone-complete'] };
477
- }
478
-
479
- // Phase forked (developed in a worktree)
480
- if (ps === 'forked') {
481
- // Check if worktree is complete — suggest merge
482
- if (fileExists('.workflow/worktrees.json')) {
483
- return { chain: 'merge', steps: ['maestro-merge'] };
484
- }
485
- return { chain: 'status', steps: ['manage-status'] };
486
- }
487
-
488
- // Blocked
489
- if (ps === 'blocked') return { chain: 'debug', steps: ['quality-debug'] };
490
-
491
- // Issue-aware: if open critical issues exist, suggest issue management
492
- // (checked via .workflow/issues/issues.jsonl if present)
493
- // This is evaluated as a secondary signal alongside phase_status routing above
494
-
495
- // Fallback
496
- return { chain: 'status', steps: ['manage-status'] };
497
- }
498
- ```
499
-
500
- **Intent-based routing (all other task_types):**
501
-
502
- ```javascript
503
- const chainMap = {
504
- // Single-step chains
505
- 'status': [{ cmd: 'manage-status' }],
506
- 'init': [{ cmd: 'maestro-init' }],
507
- 'analyze': [{ cmd: 'maestro-analyze', args: '{phase}' }],
508
- 'analyze-quick': [{ cmd: 'maestro-analyze', args: '{phase} -q' }],
509
- 'ui_design': [{ cmd: 'maestro-ui-design', args: '{phase}' }],
510
- 'plan': [{ cmd: 'maestro-plan', args: '{phase}' }],
511
- 'execute': [{ cmd: 'maestro-execute', args: '{phase}' }],
512
- 'verify': [{ cmd: 'maestro-verify', args: '{phase}' }],
513
- 'test_gen': [{ cmd: 'quality-test-gen', args: '{phase}' }],
514
- 'test': [{ cmd: 'quality-test', args: '{phase}' }],
515
- 'debug': [{ cmd: 'quality-debug', args: '"{description}"' }],
516
- 'integration_test': [{ cmd: 'quality-integration-test', args: '{phase}' }],
517
- 'refactor': [{ cmd: 'quality-refactor', args: '"{description}"' }],
518
- 'review': [{ cmd: 'quality-review', args: '{phase}' }],
519
- 'retrospective': [{ cmd: 'quality-retrospective', args: '{phase}' }],
520
- 'learn': [{ cmd: 'manage-learn', args: '"{description}"' }],
521
- 'sync': [{ cmd: 'quality-sync', args: '{phase}' }],
522
- 'milestone_close': [{ cmd: 'maestro-milestone-audit' }, { cmd: 'maestro-milestone-complete' }],
523
- 'milestone_audit': [{ cmd: 'maestro-milestone-audit' }],
524
- 'milestone_complete': [{ cmd: 'maestro-milestone-complete' }],
525
- 'codebase_rebuild': [{ cmd: 'manage-codebase-rebuild' }],
526
- 'codebase_refresh': [{ cmd: 'manage-codebase-refresh' }],
527
- 'spec_setup': [{ cmd: 'spec-setup' }],
528
- 'spec_add': [{ cmd: 'spec-add', args: '"{description}"' }],
529
- 'spec_load': [{ cmd: 'spec-load', args: '"{description}"' }],
530
- 'spec_map': [{ cmd: 'manage-codebase-rebuild' }],
531
- 'memory_capture': [{ cmd: 'manage-memory-capture', args: '"{description}"' }],
532
- 'issue': [{ cmd: 'manage-issue', args: '"{description}"' }],
533
- 'issue_discover': [{ cmd: 'manage-issue-discover', args: '"{description}"' }],
534
- 'issue_analyze': [{ cmd: 'maestro-analyze', args: '--gaps "{description}"' }],
535
- 'issue_plan': [{ cmd: 'maestro-plan', args: '--gaps' }],
536
- 'issue_execute': [{ cmd: 'maestro-execute', args: '' }],
537
- 'memory': [{ cmd: 'manage-memory', args: '"{description}"' }],
538
- 'quick': [{ cmd: 'maestro-quick', args: '"{description}"' }],
539
- 'fork': [{ cmd: 'maestro-fork', args: '-m {milestone_num}' }],
540
- 'merge': [{ cmd: 'maestro-merge', args: '-m {milestone_num}' }],
541
-
542
- // Team skills (independent, single-step)
543
- 'team_lifecycle': [{ cmd: 'team-lifecycle-v4', args: '"{description}"' }],
544
- 'team_coordinate': [{ cmd: 'team-coordinate', args: '"{description}"' }],
545
- 'team_design': [{ cmd: 'team-designer', args: '"{description}"' }],
546
- 'team_execute': [{ cmd: 'team-executor', args: '"{description}"' }],
547
- 'team_qa': [{ cmd: 'team-quality-assurance', args: '"{description}"' }],
548
- 'team_test': [{ cmd: 'team-testing', args: '"{description}"' }],
549
- 'team_review': [{ cmd: 'team-review', args: '"{description}"' }],
550
- 'team_tech_debt': [{ cmd: 'team-tech-debt', args: '"{description}"' }],
551
-
552
- // Multi-step chains
553
- 'full-lifecycle': [
554
- { cmd: 'maestro-plan', args: '{phase}' },
555
- { cmd: 'maestro-execute', args: '{phase}' },
556
- { cmd: 'maestro-verify', args: '{phase}' },
557
- { cmd: 'quality-review', args: '{phase}' },
558
- { cmd: 'quality-test', args: '{phase}' },
559
- { cmd: 'maestro-milestone-audit' }
560
- ],
561
- 'spec-driven': [
562
- { cmd: 'maestro-init' },
563
- { cmd: 'maestro-spec-generate', args: '"{description}"' },
564
- { cmd: 'maestro-plan', args: '{phase}' },
565
- { cmd: 'maestro-execute', args: '{phase}' },
566
- { cmd: 'maestro-verify', args: '{phase}' }
567
- ],
568
- 'roadmap-driven': [
569
- { cmd: 'maestro-init' },
570
- { cmd: 'maestro-roadmap', args: '"{description}"' },
571
- { cmd: 'maestro-plan', args: '{phase}' },
572
- { cmd: 'maestro-execute', args: '{phase}' },
573
- { cmd: 'maestro-verify', args: '{phase}' }
574
- ],
575
- 'brainstorm-driven': [
576
- { cmd: 'maestro-brainstorm', args: '"{description}"' },
577
- { cmd: 'maestro-plan', args: '{phase}' },
578
- { cmd: 'maestro-execute', args: '{phase}' },
579
- { cmd: 'maestro-verify', args: '{phase}' }
580
- ],
581
- 'ui-design-driven': [
582
- { cmd: 'maestro-ui-design', args: '{phase}' },
583
- { cmd: 'maestro-plan', args: '{phase}' },
584
- { cmd: 'maestro-execute', args: '{phase}' },
585
- { cmd: 'maestro-verify', args: '{phase}' }
586
- ],
587
- 'analyze-plan-execute': [
588
- { cmd: 'maestro-analyze', args: '"{description}" -q' },
589
- { cmd: 'maestro-plan', args: '--dir {scratch_dir}' },
590
- { cmd: 'maestro-execute', args: '--dir {scratch_dir}' }
591
- ],
592
- 'execute-verify': [
593
- { cmd: 'maestro-execute', args: '{phase}' },
594
- { cmd: 'maestro-verify', args: '{phase}' }
595
- ],
596
- 'quality-loop': [
597
- { cmd: 'maestro-verify', args: '{phase}' },
598
- { cmd: 'quality-review', args: '{phase}' },
599
- { cmd: 'quality-test-gen', args: '{phase}' },
600
- { cmd: 'quality-test', args: '{phase}' },
601
- { cmd: 'quality-debug', args: '--from-uat {phase}' },
602
- { cmd: 'maestro-plan', args: '{phase} --gaps' },
603
- { cmd: 'maestro-execute', args: '{phase}' }
604
- ],
605
- 'milestone-close': [
606
- { cmd: 'maestro-milestone-audit' },
607
- { cmd: 'maestro-milestone-complete' }
608
- ],
609
- 'next-milestone': [
610
- { cmd: 'maestro-roadmap', args: '"{description}"' },
611
- { cmd: 'maestro-plan', args: '{phase}' },
612
- { cmd: 'maestro-execute', args: '{phase}' },
613
- { cmd: 'maestro-verify', args: '{phase}' }
614
- ],
615
- // Issue lifecycle chains (with quality gates)
616
- 'issue-full': [
617
- { cmd: 'maestro-analyze', args: '--gaps {issue_id}' },
618
- { cmd: 'maestro-plan', args: '--gaps' },
619
- { cmd: 'maestro-execute', args: '' },
620
- { cmd: 'quality-review', args: '--scope {affected_files}' },
621
- { cmd: 'manage-issue', args: 'close {issue_id} --resolution fixed' }
622
- ],
623
- 'issue-quick': [
624
- { cmd: 'maestro-plan', args: '--gaps' },
625
- { cmd: 'maestro-execute', args: '' },
626
- { cmd: 'manage-issue', args: 'close {issue_id} --resolution fixed' }
627
- ]
628
- };
629
-
630
- // Map task_type → chain (when task_type should use a multi-step chain instead of single-step)
631
- const taskToChain = {
632
- 'spec_generate': 'spec-driven',
633
- 'brainstorm': 'brainstorm-driven',
634
- 'issue_execute': 'issue-full', // issue execute always gets review gate
635
- };
636
- ```
637
-
638
- **For `spec_generate`** → use `spec-driven` chain.
639
- **For `brainstorm`** → use `brainstorm-driven` chain.
640
- **All other task_types** → look up directly in `chainMap[task_type]`.
641
- **`--chain` flag** → use forced chain from `chainMap[forcedChain]`.
642
-
643
- #### 5b: State validation (W003 check)
644
-
645
- Cross-validate intent against project state:
646
- - Intent says `execute` but phase has no plan → warn, prepend `maestro-plan`
647
- - Intent says `verify` but phase not executed → warn, prepend `maestro-execute`
648
- - Intent says `test` but phase not verified → warn, prepend `maestro-verify`
649
- - Intent says `milestone_close` but not all phases executed → warn, suggest completing execution first
650
-
651
- Display warning but let user override.
652
-
653
- #### 5c: Resolve phase number and issue ID
654
-
655
- ```javascript
656
- function resolvePhase(intent_analysis, project_state) {
657
- // 1. From structured extraction
658
- if (intent_analysis.phase_ref) return intent_analysis.phase_ref;
659
-
660
- // 2. Fallback: regex on raw intent text
661
- const phaseMatch = intent.match(/phase\s*(\d+)|^(\d+)$/);
662
- if (phaseMatch) return phaseMatch[1] || phaseMatch[2];
663
-
664
- // 3. From project state — derive from artifacts
665
- if (project_state.initialized) {
666
- // Derive current phase: first phase with in_progress execute, or first without completed execute
667
- const arts = project_state.artifacts ?? [];
668
- const inProgress = arts.find(a => a.type === 'execute' && a.status === 'in_progress');
669
- if (inProgress) return inProgress.phase;
670
- const phases = [...new Set(arts.map(a => a.phase).filter(Boolean))].sort((a,b) => a - b);
671
- const current = phases.find(p => !arts.some(a => a.phase === p && a.type === 'execute' && a.status === 'completed'));
672
- if (current) return current;
673
- return project_state.latest_artifact?.phase ?? null;
674
- }
675
-
676
- // 4. Scratch mode chains use {scratch_dir} instead of {phase}
677
- if (chainName === 'analyze-plan-execute') return null;
678
-
679
- // 5. Chain doesn't need phase (init, status, memory, issue, etc.)
680
- const noPhaseCommands = ['manage-status', 'manage-issue', 'manage-issue-discover',
681
- 'maestro-init', 'maestro-spec-generate', 'maestro-fork', 'maestro-merge',
682
- 'maestro-roadmap', 'spec-setup', 'manage-memory', 'manage-memory-capture', 'manage-learn',
683
- 'manage-codebase-rebuild', 'manage-codebase-refresh', 'maestro-milestone-audit',
684
- 'maestro-milestone-complete', 'maestro-milestone-audit'];
685
- if (chain.every(s => noPhaseCommands.includes(s.cmd))) return null;
686
-
687
- // 6. Ask user
688
- return askUserForPhase();
689
- }
690
-
691
- // Resolve issue ID for issue chains
692
- function resolveIssueId(intent_analysis) {
693
- // 1. From structured extraction
694
- if (intent_analysis.issue_id) return intent_analysis.issue_id;
695
-
696
- // 2. Fallback: regex on raw intent text
697
- const issueMatch = intent.match(/ISS-[\w]+-\d+/i);
698
- if (issueMatch) return issueMatch[0];
699
-
700
- return null;
701
- }
702
- ```
703
-
704
- When executing issue chains (`issue-full`, `issue-quick`), replace `{issue_id}` in step args with the resolved issue ID. If no issue ID is found and the chain requires one, prompt the user.
705
-
706
- #### 5d: Confirm (skip if autoYes)
707
-
708
- **If `$DRY_RUN`:**
709
- Display chain visualization and exit:
710
- ```
711
- ============================================================
712
- MAESTRO CHAIN: {chain_name} (dry run)
713
- ============================================================
714
- Intent: {original_intent}
715
- Phase: {phase} ({phase_title})
716
-
717
- Pipeline:
718
- 1. [{command}] args: {assembled_args}
719
- 2. [{command}] args: {assembled_args}
720
- ...
721
-
722
- (Use without --dry-run to execute)
723
- ============================================================
724
- ```
725
-
726
- **If not autoYes:**
727
- ```
728
- AskUserQuestion:
729
- header: "Confirm Chain: {chain_name}"
730
- question: |
731
- Execute this {step_count}-step chain?
732
-
733
- Pipeline:
734
- 1. {command} — {description}
735
- 2. {command} — {description}
736
- ...
737
-
738
- options:
739
- - "Execute" → proceed
740
- - "Execute from step N" → ask step number, set $STEP_INDEX
741
- - "Cancel" → exit
742
- ```
743
-
744
- ---
745
-
746
- ### Step 6: Setup Tracking
747
-
748
- **Generate session ID:**
749
- ```bash
750
- SESSION_ID="maestro-$(date +%Y%m%d-%H%M%S)"
751
- SESSION_DIR=".workflow/.maestro/${SESSION_ID}"
752
- mkdir -p "${SESSION_DIR}"
753
- ```
754
-
755
- **Write `${SESSION_DIR}/status.json`:**
756
- ```json
757
- {
758
- "session_id": "{SESSION_ID}",
759
- "created_at": "{ISO timestamp}",
760
- "intent": "{original_intent}",
761
- "task_type": "{task_type}",
762
- "chain_name": "{chain_name}",
763
- "phase": {resolved_phase},
764
- "auto_mode": {autoYes},
765
- "steps": [
766
- {
767
- "index": 0,
768
- "skill": "{command_name}",
769
- "args": "{assembled_args}",
770
- "status": "pending",
771
- "started_at": null,
772
- "completed_at": null
773
- }
774
- ],
775
- "current_step": 0,
776
- "status": "running"
777
- }
778
- ```
779
-
780
- ---
781
-
782
- ### Step 7: Execute Chain
783
-
784
- **Initialize execution context:**
785
- ```javascript
786
- const context = {
787
- current_phase: resolvedPhase, // derived from artifacts
788
- user_intent: intent,
789
- issue_id: resolvedIssueId,
790
- spec_session_id: null,
791
- auto_mode: autoYes
792
- };
793
- ```
794
-
795
- **Argument assembly function:**
796
- ```javascript
797
- // Commands that support auto-mode flags
798
- const AUTO_FLAG_MAP = {
799
- 'maestro-analyze': '-y',
800
- 'maestro-brainstorm': '-y',
801
- 'maestro-roadmap': '-y',
802
- 'maestro-ui-design': '-y',
803
- 'maestro-plan': '--auto',
804
- 'maestro-spec-generate': '-y',
805
- 'quality-test': '--auto-fix',
806
- 'quality-retrospective': '--auto-yes',
807
- };
808
-
809
- function assembleArgs(step, context) {
810
- let args = step.args || '';
811
-
812
- // Template substitution
813
- args = args.replace(/\{phase\}/g, context.current_phase || '');
814
- args = args.replace(/\{description\}/g, context.user_intent || '');
815
- args = args.replace(/\{issue_id\}/g, context.issue_id || '');
816
- args = args.replace(/\{spec_session_id\}/g, context.spec_session_id || '');
817
-
818
- // Propagate auto flag only to commands that support it
819
- if (context.auto_mode) {
820
- const autoFlag = AUTO_FLAG_MAP[step.cmd];
821
- if (autoFlag && !args.includes(autoFlag)) {
822
- args = args ? `${args} ${autoFlag}` : autoFlag;
823
- }
824
- }
825
-
826
- return args.trim();
827
- }
828
- ```
829
-
830
- **For each step starting at `$STEP_INDEX` (default 0):**
831
-
832
- **7a. Display step banner:**
833
- ```
834
- ------------------------------------------------------------
835
- STEP {i+1}/{total}: {command_name}
836
- ------------------------------------------------------------
837
- Args: {assembled_args}
838
- ```
839
-
840
- **7a-1. Context cleanup hint (after step 3+):**
841
-
842
- If `i >= 3` and not `$AUTO_MODE`:
843
- ```
844
- ⚡ 已执行 {i} 步,上下文较重。可随时 /maestro -c 在新上下文中恢复。
845
- ```
846
- If `$AUTO_MODE` and `i >= 4`: log one-line warning to status.json, continue.
847
-
848
- **7b. Update status.json:** Set step status = `"running"`, started_at = now.
849
-
850
- **7c. Execute via Skill():**
851
- ```javascript
852
- Skill({ skill: step.cmd, args: assembledArgs })
853
- ```
854
-
855
- **7d. Parse output & update context:**
856
-
857
- After each Skill() returns, scan output for key artifacts:
858
- - Phase number references (e.g., "Phase: 2") → update `context.current_phase`
859
- - Spec session IDs (e.g., "SPEC-auth-2026-03-15") → update `context.spec_session_id`
860
- - These enable downstream steps to receive correct arguments
861
-
862
- **7e. Handle result:**
863
-
864
- **On success:**
865
- - Update status.json: step status = `"completed"`, completed_at = now
866
- - Continue to next step
867
-
868
- **On failure:**
869
- - Update status.json: step status = `"failed"`
870
- - If `$AUTO_MODE`: log warning, mark as `"skipped"`, continue to next step
871
- - If interactive:
872
- ```
873
- AskUserQuestion:
874
- header: "Step Failed: {command_name}"
875
- question: "{error_description}"
876
- options:
877
- - "Retry" → re-execute (max 2 retries per step)
878
- - "Skip" → mark skipped, continue
879
- - "Abort" → save progress, display resume instructions, exit
880
- ```
881
- - On Abort: **Error E003** — display: `Resume with: /maestro -c`
882
-
883
- **7f. After all steps complete:**
884
-
885
- Update status.json: status = `"completed"`.
886
-
887
- Display completion report:
888
- ```
889
- ============================================================
890
- MAESTRO SESSION COMPLETE
891
- ============================================================
892
- Session: {session_id}
893
- Chain: {chain_name}
894
- Steps: {completed}/{total} completed
895
- Phase: {current_phase}
896
-
897
- Results:
898
- [✓] 1. {command} — completed
899
- [✓] 2. {command} — completed
900
- [—] 3. {command} — skipped
901
- ...
902
-
903
- Next:
904
- Skill({ skill: "maestro", args: "continue" })
905
- Skill({ skill: "manage-status" })
906
- ============================================================
907
- ```
908
-
909
- ---
910
-
911
- ## Chain Reference
912
-
913
- | Chain | Steps | Use Case |
914
- |-------|-------|----------|
915
- | `full-lifecycle` | plan → execute → verify → review → test → milestone-audit → milestone-complete | Full milestone completion |
916
- | `spec-driven` | init → spec-generate → plan → execute → verify | Start from idea/requirements (heavy path) |
917
- | `roadmap-driven` | init → maestro-roadmap → plan → execute → verify | Start from requirements (light path) |
918
- | `brainstorm-driven` | brainstorm → plan → execute → verify | Start from exploration |
919
- | `ui-design-driven` | ui-design → plan → execute → verify | Start from UI design prototypes |
920
- | `analyze-plan-execute` | analyze -q → plan --dir → execute --dir | Fast track without roadmap (scratch mode) |
921
- | `execute-verify` | execute → verify | Resume after planning |
922
- | `quality-loop` | verify → review → test-gen → test → debug → plan --gaps → execute | Fix quality issues |
923
- | `milestone-close` | milestone-audit → milestone-complete | Close a milestone |
924
- | `next-milestone` | maestro-roadmap → plan → execute → verify | Start next milestone (auto-loads deferred items) |
925
- | `issue-full` | analyze → plan → execute → review → close | Issue with quality gate (default for issue execute) |
926
- | `issue-quick` | plan → execute → close | Issue fast path (use `--chain issue-quick`) |
927
- | *(single-step)* | Any individual command | Direct invocation |
928
-
929
- ---
930
-
931
- ## Pipeline Examples
932
-
933
- Shows how structured extraction routes common inputs — especially cases where regex previously misrouted:
934
-
935
- | Input | Extraction | Task Type | Chain |
936
- |-------|-----------|-----------|-------|
937
- | `"continue"` | *(exact match)* | state_continue | (from state) |
938
- | `"status"` | *(exact match)* | status | manage-status |
939
- | `"Add API endpoint"` | `{create, feature}` | quick | maestro-quick |
940
- | `"plan phase 2"` | `{plan, phase, phase_ref:2}` | plan | maestro-plan 2 |
941
- | `"execute"` | `{execute, code}` | execute | maestro-execute |
942
- | `"run tests"` | `{test, test}` | test | quality-test |
943
- | `"debug auth crash"` | `{debug, bug, scope:"auth"}` | debug | quality-debug |
944
- | `"修复登录问题"` | `{fix, bug, scope:"登录"}` | debug | quality-debug |
945
- | `"fix this issue"` | `{fix, bug}` | debug | quality-debug |
946
- | `"fix issue ISS-abc-001"` | `{fix, issue, ISS-abc-001}` | issue_execute | issue-full (analyze→plan→execute→review→close) |
947
- | `"解决性能问题"` | `{fix, performance}` | debug | quality-debug |
948
- | `"这个问题需要看看"` | `{analyze, bug}` | analyze | maestro-analyze |
949
- | `"创建一个 issue 跟踪"` | `{manage, issue}` | issue | manage-issue |
950
- | `"discover issues"` | `{explore, issue}` | issue_discover | manage-issue-discover |
951
- | `"analyze issue ISS-xxx"` | `{analyze, issue, ISS-xxx}` | issue_analyze | maestro-analyze --gaps |
952
- | `"plan issue ISS-xxx"` | `{plan, issue, ISS-xxx}` | issue_plan | maestro-plan --gaps |
953
- | `"brainstorm notification system"` | `{explore, feature}` | brainstorm | brainstorm-driven |
954
- | `"spec generate user auth"` | `{create, spec}` | spec_generate | spec-driven |
955
- | `"ui design landing page"` | `{create, ui}` | ui_design | ui-design-driven |
956
- | `"refactor auth module"` | `{refactor, code}` | refactor | quality-refactor |
957
- | `"复盘 phase 2"` | `{retrospect, phase}` | retrospective | quality-retrospective |
958
- | `"team review code"` | `{review, team}` | team_review | team-review |
959
- | `"team qa full scan"` | `{analyze, team}` | team_qa | team-quality-assurance |
960
- | `"next phase"` | `{transition, milestone}` | milestone_close | maestro-milestone-audit → milestone-complete |
961
- | `"milestone audit"` | `{manage, milestone}` | milestone_audit | maestro-milestone-audit |
962
- | `-y "implement feature X"` | `{execute, feature}` | execute | maestro-execute (auto mode) |
963
-
964
- ---
965
-
966
- ## Key Design Principles
967
-
968
- 1. **Semantic Routing** — LLM-native structured extraction (`action × object`) replaces regex pattern matching; disambiguates polysemous words like "问题" by semantic context
969
- 2. **State-Aware** — Reads `.workflow/state.json` to understand project context before routing
970
- 3. **Quality Gates** — Issue chains auto-include review steps; `issue-full` is the default for issue execution
971
- 4. **Skill Composition** — Chains compose independent Skills via sequential Skill() calls
972
- 5. **Phase Propagation** — Auto-detects and passes phase numbers to downstream commands
973
- 6. **Auto Mode** — `-y` flag propagates through entire chain, skipping all confirmations
974
- 7. **Resumable** — Session state in `.workflow/.maestro/` enables resume with `-c`
975
- 8. **Progressive Clarification** — Low clarity triggers user questions (max 2 rounds)
976
- 9. **Error Resilience** — Retry/skip/abort per step, with auto-skip in `-y` mode
1
+ # Workflow: maestro
2
+
3
+ Intelligent coordinator that routes user intent to optimal command chain based on project state.
4
+ Dual execution engines: **Skill()** (in-process, synchronous) and **CLI delegate** (via `maestro delegate`, async with gemini quality analysis).
5
+ Default `auto` mode selects engine based on chain complexity.
6
+
7
+ **Prerequisites:**
8
+ - None for initial invocation (can bootstrap)
9
+ - `continue`/`next`: `.workflow/state.json` must exist
10
+ - `-c` (resume): `.workflow/.maestro/*/status.json` must exist
11
+
12
+ ## Step 1: Parse & Initialize
13
+
14
+ ### 1a: Parse arguments
15
+
16
+ ```
17
+ Parse $ARGUMENTS → extract flags, remainder is intent text.
18
+ Flags: autoYes (-y/--yes), resumeMode (-c/--continue), dryRun (--dry-run)
19
+ Valued: forcedChain (--chain X), execMode (--exec auto|cli|skill, default 'auto'), cliTool (--tool X, default 'claude')
20
+ intent = arguments with all flags/valued options stripped, trimmed
21
+ ```
22
+
23
+ ### 1b: Handle resume mode
24
+
25
+ If `resumeMode`:
26
+ 1. Scan `.workflow/.maestro/` for latest session (or session ID if specified)
27
+ 2. Read `status.json` → find last completed step, remaining steps
28
+ 3. Set `$CHAIN` from status.json, `$STEP_INDEX` = last_completed + 1
29
+ 4. If no session found: **Error E004** — list available sessions
30
+ 5. Jump to **Step 4** at resume point
31
+
32
+ ### 1c: Read project state
33
+
34
+ Check `.workflow/state.json` existence.
35
+
36
+ **If exists:** Read state.json + roadmap.md. Derive progress by grouping artifacts by phase, determining furthest artifact type per phase (analyze→plan→execute→verify), and identifying pending plans. Build `$PROJECT_STATE`:
37
+ ```json
38
+ {
39
+ "initialized": true,
40
+ "current_milestone": "M1",
41
+ "milestone_name": "MVP Auth",
42
+ "milestone_progress": {
43
+ "phases_total": 3,
44
+ "phases_with_execute": 1,
45
+ "phases_with_plan": 2,
46
+ "adhoc_count": 0
47
+ },
48
+ "latest_artifact": { "id": "PLN-002", "type": "plan", "phase": 2 },
49
+ "pending_actions": ["execute phase 2", "analyze phase 3"],
50
+ "has_blockers": false,
51
+ "suggested_next": null
52
+ }
53
+ ```
54
+
55
+ **If missing:** `$PROJECT_STATE = { initialized: false }`. If intent also empty → **Error E001** (suggest `maestro-init`).
56
+
57
+ ### 1d: Display banner
58
+
59
+ ```
60
+ ============================================================
61
+ MAESTRO COORDINATOR
62
+ ============================================================
63
+ Mode: {intent-based | state-based | resume}
64
+ Auto: {yes | no}
65
+ Exec: {auto | cli | skill}
66
+ Input: {intent or "continue"}
67
+ ```
68
+
69
+ ## Step 2: Analyze Intent
70
+
71
+ ### 2a: Fast path — forced chain or exact match
72
+
73
+ **Forced chain (`--chain`):**
74
+ - Validate against known chains (see [Chain Reference](#chain-reference))
75
+ - If valid: skip intent analysis, jump to **Step 3**
76
+ - If invalid: display valid chains, ask user to choose
77
+
78
+ **Exact-match keywords:**
79
+ ```
80
+ Keyword → taskType (skip to Step 3):
81
+ continue/next/go/继续/下一步 → 'state_continue'
82
+ status/状态/dashboard → 'status'
83
+ ```
84
+
85
+ ### 2b: Structured intent extraction (LLM-native)
86
+
87
+ Extract a structured intent tuple from user input. Leverages LLM semantic understanding to disambiguate polysemous words (e.g., "问题" as bug vs. issue-tracker item).
88
+
89
+ ```json
90
+ {
91
+ "action": "<from action enum>",
92
+ "object": "<from object enum>",
93
+ "scope": "<module/file/area or null>",
94
+ "issue_id": "<ISS-XXXXXXXX-NNN if mentioned, else null>",
95
+ "phase_ref": "<integer if mentioned, else null>",
96
+ "urgency": "<low | normal | high>"
97
+ }
98
+ ```
99
+
100
+ **Action enum:**
101
+
102
+ | action | Triggered by (semantic) |
103
+ |--------|------------------------|
104
+ | `create` | Build new — feature, component, spec, project |
105
+ | `fix` | Repair broken — fix bug, resolve error, 修复, 解决 |
106
+ | `analyze` | Understand — analyze, evaluate, investigate, 分析, 评估 |
107
+ | `plan` | Design approach — plan, break down, architect, 规划, 分解 |
108
+ | `execute` | Implement — execute, implement, develop, code, 实现, 开发 |
109
+ | `verify` | Check goals — verify, validate, 验证 |
110
+ | `review` | Code quality — review code, 代码审查 |
111
+ | `test` | Run/create tests — test, UAT, 测试, 验收 |
112
+ | `debug` | Diagnose — debug, troubleshoot, 调试, 排查 |
113
+ | `refactor` | Restructure — refactor, clean up, tech debt, 重构 |
114
+ | `explore` | Discover brainstorm, ideate, explore, 头脑风暴, 发散 |
115
+ | `manage` | CRUD/lifecycle — list, create issue, close, track, 管理 |
116
+ | `transition` | Advance next phase, complete milestone |
117
+ | `continue` | Resume — continue, next, go on, 继续 |
118
+ | `sync` | Update docs sync, refresh, 同步 |
119
+ | `fork` | Worktree — fork, parallel, 分叉, 并行 |
120
+ | `merge` | Merge back — merge worktree, 合并工作树 |
121
+ | `learn` | Capture — learn, insight, eureka, 记录洞察 |
122
+ | `retrospect` | Post-mortem — retrospective, retro, 复盘 |
123
+ | `release` | Publish — release, publish, ship, tag, 发布 |
124
+ | `amend` | Revise — amend workflow, fix command, 修正流程 |
125
+ | `compose` | Design workflow — compose, build workflow, 编排流程 |
126
+
127
+ **Object enum:**
128
+
129
+ | object | Meaning |
130
+ |--------|---------|
131
+ | `feature` | New functionality or enhancement |
132
+ | `bug` | Defect, error, broken behavior |
133
+ | `issue` | Issue-tracker item |
134
+ | `code` | Source code in general |
135
+ | `test` | Tests, test suite, coverage |
136
+ | `spec` | Specification, PRD, requirements |
137
+ | `phase` | Workflow phase |
138
+ | `milestone` | Workflow milestone |
139
+ | `doc` | Documentation |
140
+ | `performance` | Performance characteristics |
141
+ | `security` | Security concerns |
142
+ | `ui` | User interface, design, prototype |
143
+ | `memory` | Memory/knowledge management |
144
+ | `codebase` | Codebase documentation/mapping |
145
+ | `team` | Team-based multi-agent execution |
146
+ | `config` | Configuration, setup, initialization |
147
+
148
+ **Disambiguation ("问题" / "issue" / "problem"):**
149
+ - Describing **something broken** `object: "bug"` (route to debug/fix)
150
+ - Referring to **a tracked item** (with ISS-ID, or "create/manage issue" context) `object: "issue"`
151
+ - When ambiguous prefer `"bug"` (more actionable)
152
+
153
+ ### 2c: Route via action × object matrix
154
+
155
+ ```
156
+ Route priority:
157
+ 1. issue_id present route by action: analyze→issue_analyze, plan→issue_plan, fix/execute→issue_execute, debug→issue_analyze, manage→issue; default→issue
158
+ 2. object == 'team' → route by action: review→team_review, test→team_test, debug/analyze→team_qa, refactor→team_tech_debt, execute→team_lifecycle; default→team_coordinate
159
+ 3. action × object matrix lookup (fallback per action via '_default', global fallback 'quick'):
160
+
161
+ fix: bug/code/performance/security/test→debug, issueissue; default→debug
162
+ create: feature→quick, issue→issue, test→test_gen, spec→spec_generate, ui→ui_design, config→init; default→quick
163
+ analyze: bug/code/performance/security/feature→analyze, issue→issue_analyze, codebase→spec_map; default→analyze
164
+ explore: issue→issue_discover, feature→brainstorm, ui→ui_design; default→brainstorm
165
+ plan: issue→issue_plan, spec→spec_generate, phase/milestone→plan; default→plan
166
+ execute: issue→issue_execute; default→execute
167
+ verify: default→verify
168
+ review: default→review
169
+ test: feature/code→test; default→test
170
+ debug: default→debug
171
+ refactor: default→refactor
172
+ manage: issue→issue, milestone→milestone_audit, phase→milestone_close, memory→memory, doc→sync, codebase→codebase_refresh, config→spec_setup, team→team_coordinate; default→status
173
+ transition: phase→milestone_close, milestone→milestone_complete; default→milestone_close
174
+ continue: default→state_continue
175
+ sync: doc→sync, codebase→codebase_refresh; default→sync
176
+ fork/merge/learn/retrospect/release/amend/compose: default→same name (retrospect→retrospective)
177
+ ```
178
+
179
+ ### 2d: Chain upgrade & clarity
180
+
181
+ **State-aware chain upgrade:**
182
+ - `issue_execute` → auto-upgrade to `issue-full` (appends review gate)
183
+ - `debug` during `executing` phase → keep single-step (state validation handles prepend/append)
184
+
185
+ **Clarity score** (from extracted intent tuple): 3 = action+object+scope, 2 = action+object, 1 = action only, 0 = neither
186
+
187
+ Display intent analysis: action, object, scope, issue_id, phase_ref, task_type, clarity score.
188
+
189
+ **Clarification** (skip if `autoYes` or clarity >= 2, max 2 rounds):
190
+ - 0 → offer: "Start new project" / "Continue working" / "Quick task" / "Check status" / "Rephrase"
191
+ - 1 → confirm inferred action with alternatives
192
+ - Still unclear after 2 rounds → **Error E002**
193
+
194
+ ## Step 3: Select Chain & Prepare
195
+
196
+ ### 3a: Map task_type → chain
197
+
198
+ **Resolution order:**
199
+ 1. `forcedChain` → `chainMap[forcedChain]`
200
+ 2. `state_continue` `detectNextAction(projectState)` `{ chain, argsOverride? }`. Apply argsOverride before template substitution.
201
+ 3. Task-type aliases → named chain: `spec_generate`→`spec-driven`, `brainstorm`→`brainstorm-driven`, `issue_execute`→`issue-full`
202
+ 4. `chainMap[taskType]` → direct lookup
203
+
204
+ Full `chainMap` and `detectNextAction` are in the [Reference Data](#reference-data) section.
205
+
206
+ ### 3b: Validate against state (W003)
207
+
208
+ Cross-validate intent against project state:
209
+ - `execute` but no plan → warn, prepend `maestro-plan`
210
+ - `verify` but not executed → warn, prepend `maestro-execute`
211
+ - `test` but not verified → warn, prepend `maestro-verify`
212
+ - `milestone_close` but not all phases executed warn, suggest completing first
213
+
214
+ Display warning but let user override.
215
+
216
+ ### 3c: Resolve phase number and issue ID
217
+
218
+ ```
219
+ resolvePhase — priority order:
220
+ 1. intent_analysis.phase_ref (from structured extraction)
221
+ 2. Regex match "phase N" or bare number from raw intent
222
+ 3. From project state artifacts: in-progress execute → first incomplete phase → latest artifact phase
223
+ 4. null if chain is 'analyze-plan-execute' (uses {scratch_dir} instead)
224
+ 5. null if all chain commands are phase-independent:
225
+ manage-status, manage-issue, manage-issue-discover, maestro-init, maestro-spec-generate,
226
+ maestro-fork, maestro-merge, maestro-roadmap, spec-setup, manage-knowhow, manage-knowhow-capture,
227
+ manage-learn, manage-codebase-rebuild, manage-codebase-refresh, maestro-milestone-audit,
228
+ maestro-milestone-complete
229
+ 6. Ask user
230
+
231
+ resolveIssueId — priority: intent_analysis.issue_id → regex match ISS-*-NNN from raw intent → null
232
+ ```
233
+
234
+ When executing issue chains, replace `{issue_id}` in step args with resolved ID. If missing and required, prompt user.
235
+
236
+ ### 3d: Confirm chain
237
+
238
+ **If `dryRun`:** Display chain visualization and exit.
239
+ **If not `autoYes`:** Confirm with user — show numbered steps, offer: Execute / Execute from step N / Cancel.
240
+
241
+ ### 3e: Step-level engine selection
242
+
243
+ Engine is selected **per step**, not per chain.
244
+
245
+ ```
246
+ If execMode is 'cli' or 'skill' → force that engine for all steps.
247
+ In 'auto' mode, select per step:
248
+ CLI steps (heavy, context-isolated): maestro-plan, maestro-execute, maestro-analyze, maestro-brainstorm, maestro-spec-generate, maestro-roadmap, maestro-ui-design, quality-refactor
249
+ Skill steps (everything else): observable, interactive, lightweight (verify, review, test, debug, milestone-*, manage-*, spec-*, quick, etc.)
250
+ ```
251
+
252
+ **Trade-off:** CLI = context isolation + template prompts + gemini analysis. Skill = direct visibility + synchronous + user can intervene.
253
+
254
+ ### 3f: Setup session
255
+
256
+ Create session directory `.workflow/.maestro/maestro-{YYYYMMDD-HHMMSS}/` and write `status.json`:
257
+ ```json
258
+ {
259
+ "session_id": "{SESSION_ID}",
260
+ "created_at": "{ISO timestamp}",
261
+ "intent": "{original_intent}",
262
+ "task_type": "{task_type}",
263
+ "chain_name": "{chain_name}",
264
+ "phase": "{resolved_phase}",
265
+ "auto_mode": "{autoYes}",
266
+ "exec_mode": "{execMode}",
267
+ "cli_tool": "{cliTool}",
268
+ "gemini_session_id": null,
269
+ "step_analyses": [],
270
+ "steps": [{ "index": 0, "skill": "{cmd}", "args": "{args}", "engine": null, "status": "pending", "started_at": null, "completed_at": null }],
271
+ "current_step": 0,
272
+ "status": "running"
273
+ }
274
+ ```
275
+
276
+ ## Step 4: Execute Chain
277
+
278
+ ### Shared: context & argument assembly
279
+
280
+ ```
281
+ Context object tracks: current_phase, user_intent, issue_id, spec_session_id, scratch_dir, auto_mode.
282
+
283
+ assembleArgs: substitute placeholders {phase}, {description}, {issue_id}, {spec_session_id}, {scratch_dir} in step.args.
284
+ In auto_mode, append per-command flag if not already present:
285
+ maestro-analyze/brainstorm/roadmap/ui-design/spec-generate -y
286
+ maestro-plan --auto
287
+ quality-test → --auto-fix
288
+ quality-retrospective --auto-yes
289
+
290
+ Shell-escape strings with single quotes for CLI delegate calls.
291
+ ```
292
+
293
+ ### Step loop — for each step starting at `$STEP_INDEX` (default 0):
294
+
295
+ **4a. Select engine & display banner:**
296
+
297
+ Select engine per step (see 3e). Display step banner with index, command name, engine, args.
298
+ - Step >= 4 and not autoYes: hint user about `/maestro -c` for fresh context resume.
299
+ - autoYes and step >= 5: log warning to status.json.
300
+ - Update status.json: step status = `"running"`, engine, started_at.
301
+
302
+ **4b. Execute (engine-dependent):**
303
+
304
+ **Skill** — invoke `Skill({ skill: step.cmd, args: assembledArgs })` directly (synchronous, visible).
305
+
306
+ **CLI** — template-driven, async, context-isolated:
307
+ 1. Load template `~/.maestro/templates/cli/prompts/coordinate-step.txt`
308
+ 2. Build `analysisHints` from previous step's `next_step_hints` (prompt_additions, cautions, context_to_carry)
309
+ 3. Substitute template placeholders: `{{COMMAND}}`, `{{ARGS}}`, `{{STEP_N}}`, `{{AUTO_DIRECTIVE}}`, `{{CHAIN_NAME}}`, `{{ANALYSIS_HINTS}}`
310
+ 4. Run `maestro delegate <prompt> --to {cliTool} --mode write` via `Bash(run_in_background: true, timeout: 600000)`
311
+ 5. **STOP** wait for background callback
312
+
313
+ **4c. Parse output & update context:**
314
+
315
+ Scan step output for context propagation: `PHASE: N` current_phase, `SPEC-xxx` spec_session_id, `scratch_dir: path` → scratch_dir. CLI: capture exec_id from stderr.
316
+
317
+ **4d. Handle result:**
318
+
319
+ Success: mark `"completed"` in status.json. CLI: save output to `step-{N}-output.txt`.
320
+ Failure: autoYes → retry once then skip. Interactive → Retry (max 2) / Skip / Abort. Abort **Error E003** with resume hint.
321
+
322
+ **4e. Post-step analysis (CLI steps only, multi-step chains):**
323
+
324
+ Skip if: step failed/skipped, single-step chain, or `stepEngine === 'skill'`.
325
+
326
+ Delegate to gemini (analysis mode, `--resume` if prior gemini_session_id exists) with prompt containing:
327
+ - Step command, args, chain name, intent
328
+ - Last 200 lines of step output
329
+ - Next step info (if any)
330
+
331
+ Expected JSON response:
332
+ ```json
333
+ {
334
+ "quality_score": "<0-100>",
335
+ "execution_assessment": { "success": "<bool>", "completeness": "<full|partial|minimal>", "key_outputs": [], "missing_outputs": [] },
336
+ "issues": [{ "severity": "critical|high|medium|low", "description": "" }],
337
+ "next_step_hints": {
338
+ "prompt_additions": "<extra context for next step>",
339
+ "cautions": ["<things to watch out for>"],
340
+ "context_to_carry": "<key facts from this step>"
341
+ },
342
+ "step_summary": ""
343
+ }
344
+ ```
345
+
346
+ On callback: capture gemini exec_id for session continuity, store analysis in `state.step_analyses[]` and `step-{N}-analysis.json`, advance to next step (**4a**).
347
+
348
+ **4f. Completion report:**
349
+
350
+ ```
351
+ ============================================================
352
+ MAESTRO SESSION COMPLETE
353
+ ============================================================
354
+ Session: {session_id}
355
+ Chain: {chain_name}
356
+ Steps: {completed}/{total} completed
357
+ Phase: {current_phase}
358
+
359
+ Results:
360
+ [✓] 1. maestro-plan — completed [cli] (quality: 85/100)
361
+ [✓] 2. maestro-verify completed [skill]
362
+ [—] 3. quality-review skipped [skill]
363
+
364
+ CLI Avg Quality: {avgScore}/100 (based on {cliStepCount} cli steps)
365
+
366
+ Next: /maestro continue | /manage-status
367
+ ============================================================
368
+ ```
369
+
370
+ ---
371
+
372
+ ## Reference Data
373
+
374
+ ### Chain Map
375
+
376
+ ```javascript
377
+ const chainMap = {
378
+ // ── Single-step ──
379
+ 'status': [{ cmd: 'manage-status' }],
380
+ 'init': [{ cmd: 'maestro-init' }],
381
+ 'analyze': [{ cmd: 'maestro-analyze', args: '{phase}' }],
382
+ 'analyze-quick': [{ cmd: 'maestro-analyze', args: '{phase} -q' }],
383
+ 'ui_design': [{ cmd: 'maestro-ui-design', args: '{phase}' }],
384
+ 'plan': [{ cmd: 'maestro-plan', args: '{phase}' }],
385
+ 'execute': [{ cmd: 'maestro-execute', args: '{phase}' }],
386
+ 'verify': [{ cmd: 'maestro-verify', args: '{phase}' }],
387
+ 'test_gen': [{ cmd: 'quality-test-gen', args: '{phase}' }],
388
+ 'test': [{ cmd: 'quality-test', args: '{phase}' }],
389
+ 'debug': [{ cmd: 'quality-debug', args: '"{description}"' }],
390
+ 'integration_test': [{ cmd: 'quality-integration-test', args: '{phase}' }],
391
+ 'refactor': [{ cmd: 'quality-refactor', args: '"{description}"' }],
392
+ 'review': [{ cmd: 'quality-review', args: '{phase}' }],
393
+ 'retrospective': [{ cmd: 'quality-retrospective', args: '{phase}' }],
394
+ 'learn': [{ cmd: 'manage-learn', args: '"{description}"' }],
395
+ 'sync': [{ cmd: 'quality-sync' }],
396
+ 'milestone_close': [{ cmd: 'maestro-milestone-audit' }, { cmd: 'maestro-milestone-complete' }],
397
+ 'milestone_audit': [{ cmd: 'maestro-milestone-audit' }],
398
+ 'milestone_complete': [{ cmd: 'maestro-milestone-complete' }],
399
+ 'codebase_rebuild': [{ cmd: 'manage-codebase-rebuild' }],
400
+ 'codebase_refresh': [{ cmd: 'manage-codebase-refresh' }],
401
+ 'spec_setup': [{ cmd: 'spec-setup' }],
402
+ 'spec_add': [{ cmd: 'spec-add', args: '"{description}"' }],
403
+ 'spec_load': [{ cmd: 'spec-load' }],
404
+ 'spec_map': [{ cmd: 'manage-codebase-rebuild' }],
405
+ 'knowhow_capture': [{ cmd: 'manage-knowhow-capture', args: '"{description}"' }],
406
+ 'issue': [{ cmd: 'manage-issue', args: '"{description}"' }],
407
+ 'issue_discover': [{ cmd: 'manage-issue-discover', args: '"{description}"' }],
408
+ 'issue_analyze': [{ cmd: 'maestro-analyze', args: '--gaps "{description}"' }],
409
+ 'issue_plan': [{ cmd: 'maestro-plan', args: '--gaps' }],
410
+ 'issue_execute': [{ cmd: 'maestro-execute', args: '' }],
411
+ 'knowhow': [{ cmd: 'manage-knowhow', args: '"{description}"' }],
412
+ 'quick': [{ cmd: 'maestro-quick', args: '"{description}"' }],
413
+ 'fork': [{ cmd: 'maestro-fork', args: '-m {milestone_num}' }],
414
+ 'merge': [{ cmd: 'maestro-merge', args: '-m {milestone_num}' }],
415
+
416
+ // ── Team skills ──
417
+ 'team_lifecycle': [{ cmd: 'team-lifecycle-v4', args: '"{description}"' }],
418
+ 'team_coordinate': [{ cmd: 'team-coordinate', args: '"{description}"' }],
419
+ 'team_design': [{ cmd: 'team-coordinate', args: '"{description}"' }],
420
+ 'team_execute': [{ cmd: 'team-executor', args: '"{description}"' }],
421
+ 'team_qa': [{ cmd: 'team-quality-assurance', args: '"{description}"' }],
422
+ 'team_test': [{ cmd: 'team-testing', args: '"{description}"' }],
423
+ 'team_review': [{ cmd: 'team-review', args: '"{description}"' }],
424
+ 'team_tech_debt': [{ cmd: 'team-tech-debt', args: '"{description}"' }],
425
+
426
+ // ── Multi-step chains ──
427
+ 'full-lifecycle': [{ cmd: 'maestro-plan', args: '{phase}' }, { cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'maestro-verify', args: '{phase}' }, { cmd: 'quality-review', args: '{phase}' }, { cmd: 'quality-test', args: '{phase}' }, { cmd: 'maestro-milestone-audit' }],
428
+ 'spec-driven': [{ cmd: 'maestro-init' }, { cmd: 'maestro-spec-generate', args: '"{description}"' }, { cmd: 'maestro-plan', args: '{phase}' }, { cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'maestro-verify', args: '{phase}' }],
429
+ 'roadmap-driven': [{ cmd: 'maestro-init' }, { cmd: 'maestro-roadmap', args: '"{description}"' }, { cmd: 'maestro-plan', args: '{phase}' }, { cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'maestro-verify', args: '{phase}' }],
430
+ 'brainstorm-driven': [{ cmd: 'maestro-brainstorm', args: '"{description}"' }, { cmd: 'maestro-plan', args: '{phase}' }, { cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'maestro-verify', args: '{phase}' }],
431
+ 'ui-design-driven': [{ cmd: 'maestro-ui-design', args: '{phase}' }, { cmd: 'maestro-plan', args: '{phase}' }, { cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'maestro-verify', args: '{phase}' }],
432
+ 'analyze-plan-execute': [{ cmd: 'maestro-analyze', args: '"{description}" -q' }, { cmd: 'maestro-plan', args: '--dir {scratch_dir}' }, { cmd: 'maestro-execute', args: '--dir {scratch_dir}' }],
433
+ 'execute-verify': [{ cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'maestro-verify', args: '{phase}' }],
434
+ 'quality-loop': [{ cmd: 'maestro-verify', args: '{phase}' }, { cmd: 'quality-review', args: '{phase}' }, { cmd: 'quality-test-gen', args: '{phase}' }, { cmd: 'quality-test', args: '{phase}' }, { cmd: 'quality-debug', args: '--from-uat {phase}' }, { cmd: 'maestro-plan', args: '{phase} --gaps' }, { cmd: 'maestro-execute', args: '{phase}' }],
435
+ 'milestone-close': [{ cmd: 'maestro-milestone-audit' }, { cmd: 'maestro-milestone-complete' }],
436
+ 'next-milestone': [{ cmd: 'maestro-roadmap', args: '"{description}"' }, { cmd: 'maestro-plan', args: '{phase}' }, { cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'maestro-verify', args: '{phase}' }],
437
+ 'review-fix': [{ cmd: 'maestro-plan', args: '{phase} --gaps' }, { cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'quality-review', args: '{phase}' }],
438
+ 'quality-loop-partial': [{ cmd: 'maestro-plan', args: '{phase} --gaps' }, { cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'maestro-verify', args: '{phase}' }],
439
+ 'issue-full': [{ cmd: 'maestro-analyze', args: '--gaps {issue_id}' }, { cmd: 'maestro-plan', args: '--gaps' }, { cmd: 'maestro-execute', args: '' }, { cmd: 'quality-review', args: '{phase}' }, { cmd: 'manage-issue', args: 'close {issue_id} --resolution fixed' }],
440
+ 'issue-quick': [{ cmd: 'maestro-plan', args: '--gaps' }, { cmd: 'maestro-execute', args: '' }, { cmd: 'manage-issue', args: 'close {issue_id} --resolution fixed' }],
441
+ 'milestone-release': [{ cmd: 'maestro-milestone-audit' }, { cmd: 'maestro-milestone-release' }],
442
+
443
+ 'learn': [{ cmd: 'maestro-learn', args: '"{description}"' }],
444
+ 'harvest': [{ cmd: 'manage-harvest', args: '"{description}"' }],
445
+ 'wiki': [{ cmd: 'manage-wiki' }],
446
+ 'wiki_connect': [{ cmd: 'wiki-connect' }],
447
+ 'wiki_digest': [{ cmd: 'wiki-digest' }],
448
+ 'business_test': [{ cmd: 'quality-business-test', args: '{phase}' }],
449
+ 'spec_remove': [{ cmd: 'spec-remove', args: '"{description}"' }],
450
+ 'amend': [{ cmd: 'maestro-amend', args: '"{description}"' }],
451
+ 'release': [{ cmd: 'maestro-milestone-release' }],
452
+ 'compose': [{ cmd: 'maestro-composer', args: '"{description}"' }],
453
+ 'play': [{ cmd: 'maestro-player', args: '"{description}"' }],
454
+ 'update': [{ cmd: 'maestro-update' }],
455
+ 'overlay': [{ cmd: 'maestro-overlay', args: '"{description}"' }],
456
+ 'link_coordinate': [{ cmd: 'maestro-link-coordinate', args: '"{description}"' }],
457
+ };
458
+ ```
459
+
460
+ ### State Detection (detectNextAction)
461
+
462
+ Used when `task_type == state_continue`. Routes based on `phase_status` and artifact presence:
463
+
464
+ ```
465
+ Returns { chain, argsOverride? }. Steps resolved from chainMap[chain].
466
+
467
+ detectNextAction(state):
468
+ not initialized 'init'
469
+
470
+ phases_total == 0:
471
+ no roadmap + has accumulated_context → 'next-milestone' with argsOverride containing deferred items and key decisions
472
+ otherwise 'brainstorm-driven'
473
+
474
+ Route by phase_status (ps):
475
+ pending: has context artifact 'plan'; has analysis → 'analyze-quick'; else → 'analyze'
476
+ exploring/planning: has plan 'execute-verify'; else 'plan'
477
+ executing: all tasks done → 'verify'; has blockers → 'debug'; else → 'execute'
478
+ verifying:
479
+ verification passed:
480
+ no review 'review'
481
+ review BLOCK 'review-fix'
482
+ uat pending → 'test'; uat passed → 'milestone-close'; uat failed → 'debug'
483
+ default 'test'
484
+ verification not passed → 'quality-loop-partial'
485
+ testing: uat passed 'milestone-close'; else 'debug'
486
+ completed: → 'milestone-close'
487
+ forked: worktrees.json exists → 'merge'; else → 'status'
488
+ blocked: → 'debug'
489
+ default: 'status'
490
+ ```
491
+
492
+ ### Chain Reference
493
+
494
+ | Chain | Steps | Use Case |
495
+ |-------|-------|----------|
496
+ | `full-lifecycle` | plan execute → verify → review → test → audit | Full milestone completion |
497
+ | `spec-driven` | init → spec-generate → plan → execute → verify | From idea/requirements (heavy) |
498
+ | `roadmap-driven` | init → roadmap → plan → execute → verify | From requirements (light) |
499
+ | `brainstorm-driven` | brainstorm → plan → execute → verify | From exploration |
500
+ | `ui-design-driven` | ui-design plan → execute → verify | From UI prototypes |
501
+ | `analyze-plan-execute` | analyze -q → plan --dir → execute --dir | Fast track (scratch mode) |
502
+ | `execute-verify` | execute → verify | Resume after planning |
503
+ | `review-fix` | plan --gaps → execute → review | Fix review-blocked issues |
504
+ | `quality-loop` | verify → review → test-gen → test → debug → plan --gaps → execute | Fix quality issues |
505
+ | `quality-loop-partial` | plan --gaps → execute → verify | Partial quality fix cycle |
506
+ | `milestone-close` | audit → complete | Close a milestone |
507
+ | `milestone-release` | audit → release | Release with version tag |
508
+ | `next-milestone` | roadmap plan → execute → verify | Next milestone (auto-loads deferred) |
509
+ | `issue-full` | analyze → plan → execute → review → close | Issue with quality gate |
510
+ | `issue-quick` | plan execute → close | Issue fast path |
511
+
512
+ ### Pipeline Examples
513
+
514
+ | Input | Extraction | Route | Chain |
515
+ |-------|-----------|-------|-------|
516
+ | `"continue"` | *(exact match)* | state_continue | (from state) |
517
+ | `"status"` | *(exact match)* | status | manage-status |
518
+ | `"Add API endpoint"` | `{create, feature}` | quick | maestro-quick |
519
+ | `"plan phase 2"` | `{plan, phase, ref:2}` | plan | maestro-plan 2 |
520
+ | `"execute"` | `{execute, code}` | execute | maestro-execute |
521
+ | `"run tests"` | `{test, test}` | test | quality-test |
522
+ | `"debug auth crash"` | `{debug, bug, scope:"auth"}` | debug | quality-debug |
523
+ | `"修复登录问题"` | `{fix, bug, scope:"登录"}` | debug | quality-debug |
524
+ | `"fix issue ISS-abc-001"` | `{fix, issue, ISS-abc-001}` | issue_execute | issue-full |
525
+ | `"这个问题需要看看"` | `{analyze, bug}` | analyze | maestro-analyze |
526
+ | `"创建一个 issue 跟踪"` | `{manage, issue}` | issue | manage-issue |
527
+ | `"discover issues"` | `{explore, issue}` | issue_discover | manage-issue-discover |
528
+ | `"brainstorm notifications"` | `{explore, feature}` | brainstorm | brainstorm-driven |
529
+ | `"spec generate auth"` | `{create, spec}` | spec_generate | spec-driven |
530
+ | `"ui design landing"` | `{create, ui}` | ui_design | ui-design-driven |
531
+ | `"refactor auth module"` | `{refactor, code}` | refactor | quality-refactor |
532
+ | `"复盘 phase 2"` | `{retrospect, phase}` | retrospective | quality-retrospective |
533
+ | `"team review code"` | `{review, team}` | team_review | team-review |
534
+ | `"next phase"` | `{transition, milestone}` | milestone_close | audit → complete |
535
+ | `-y "implement X"` | `{execute, feature}` | execute | maestro-execute (auto) |
536
+ | `"release v1.2"` | `{release, milestone}` | release | maestro-milestone-release |
537
+ | `"amend plan command"` | `{amend, config}` | amend | maestro-amend |
538
+ | `"compose deploy flow"` | `{compose, config}` | compose | maestro-composer |
539
+
540
+ ### Error Codes
541
+
542
+ | Code | Description | Recovery |
543
+ |------|-------------|----------|
544
+ | E001 | No intent + project not initialized | Suggest maestro-init |
545
+ | E002 | Clarity too low after 2 rounds | Ask to rephrase |
546
+ | E003 | Chain step failed + abort | Suggest resume with -c |
547
+ | E004 | Resume session not found | Show available sessions |
548
+ | W001 | Ambiguous intent, multiple chains | Present options |
549
+ | W002 | Step completed with warnings | Log and continue |
550
+ | W003 | State suggests different chain | Show discrepancy, let user decide |
551
+
552
+ ### Design Principles
553
+
554
+ 1. **Semantic Routing** — LLM-native `action × object` extraction; disambiguates "问题" by context
555
+ 2. **State-Aware** Reads `.workflow/state.json` before routing
556
+ 3. **Quality Gates** — Issue chains auto-include review; `issue-full` is default for issue execution
557
+ 4. **Per-Step Engine** — Each step independently selects Skill or CLI. Heavy steps (plan, execute, analyze, brainstorm) → CLI for context isolation. Observable steps (verify, review, test, debug, manage-*) → Skill for direct visibility. `--exec cli|skill` forces all steps.
558
+ 5. **CLI Analysis Chain** — Gemini evaluates each CLI step's output, generates `next_step_hints` via `{{ANALYSIS_HINTS}}`. Skill steps skip analysis (output already visible). Sessions chained via `--resume`
559
+ 6. **Phase Propagation** — Auto-detects and passes phase numbers to downstream commands
560
+ 7. **Auto Mode** — `-y` propagates through chain, skipping all confirmations
561
+ 8. **Resumable** — Session state in `.workflow/.maestro/` enables `-c` resume
562
+ 9. **Error Resilience** — Retry/skip/abort per step; auto-skip in `-y` mode