maestro-flow 0.3.15 → 0.3.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (390) hide show
  1. package/.claude/agents/workflow-planner.md +24 -8
  2. package/.claude/commands/maestro-amend.md +300 -0
  3. package/.claude/commands/maestro-analyze.md +1 -49
  4. package/.claude/commands/maestro-execute.md +2 -56
  5. package/.claude/commands/maestro-fork.md +3 -50
  6. package/.claude/commands/maestro-merge.md +2 -26
  7. package/.claude/commands/maestro-milestone-audit.md +1 -5
  8. package/.claude/commands/maestro-milestone-complete.md +1 -7
  9. package/.claude/commands/maestro-plan.md +6 -127
  10. package/.claude/commands/maestro-roadmap.md +3 -101
  11. package/.claude/commands/maestro-spec-generate.md +1 -25
  12. package/.claude/commands/maestro-ui-design.md +14 -73
  13. package/.claude/commands/maestro-verify.md +1 -32
  14. package/.claude/commands/maestro.md +13 -30
  15. package/.claude/commands/manage-harvest.md +7 -44
  16. package/.claude/commands/manage-knowhow-capture.md +193 -0
  17. package/.claude/commands/{manage-memory.md → manage-knowhow.md} +77 -88
  18. package/.claude/commands/manage-learn.md +3 -28
  19. package/.claude/commands/manage-status.md +1 -20
  20. package/.claude/commands/manage-wiki.md +1 -1
  21. package/.claude/commands/quality-business-test.md +1 -1
  22. package/.claude/commands/quality-debug.md +3 -18
  23. package/.claude/commands/quality-integration-test.md +3 -23
  24. package/.claude/commands/quality-retrospective.md +1 -28
  25. package/.claude/commands/quality-review.md +3 -52
  26. package/.claude/commands/quality-test-gen.md +1 -10
  27. package/.claude/commands/quality-test.md +3 -25
  28. package/.claude/commands/spec-add.md +1 -21
  29. package/.claude/commands/spec-load.md +1 -16
  30. package/.claude/commands/wiki-connect.md +2 -112
  31. package/.claude/commands/wiki-digest.md +2 -141
  32. package/.codex/skills/learn-decompose/SKILL.md +2 -8
  33. package/.codex/skills/maestro/SKILL.md +60 -146
  34. package/.codex/skills/maestro-analyze/SKILL.md +52 -150
  35. package/.codex/skills/maestro-brainstorm/SKILL.md +36 -91
  36. package/.codex/skills/maestro-composer/SKILL.md +4 -76
  37. package/.codex/skills/maestro-execute/SKILL.md +46 -177
  38. package/.codex/skills/maestro-init/SKILL.md +7 -51
  39. package/.codex/skills/maestro-link-coordinate/SKILL.md +56 -229
  40. package/.codex/skills/maestro-milestone-audit/SKILL.md +7 -36
  41. package/.codex/skills/maestro-milestone-complete/SKILL.md +11 -93
  42. package/.codex/skills/maestro-overlay/SKILL.md +23 -92
  43. package/.codex/skills/maestro-plan/SKILL.md +70 -166
  44. package/.codex/skills/maestro-player/SKILL.md +24 -149
  45. package/.codex/skills/maestro-quick/SKILL.md +5 -48
  46. package/.codex/skills/maestro-roadmap/SKILL.md +21 -66
  47. package/.codex/skills/maestro-spec-generate/SKILL.md +20 -56
  48. package/.codex/skills/maestro-ui-design/SKILL.md +6 -53
  49. package/.codex/skills/maestro-verify/SKILL.md +39 -136
  50. package/.codex/skills/manage-codebase-rebuild/SKILL.md +25 -75
  51. package/.codex/skills/manage-codebase-refresh/SKILL.md +5 -32
  52. package/.codex/skills/manage-issue/SKILL.md +1 -6
  53. package/.codex/skills/manage-issue-discover/SKILL.md +33 -93
  54. package/.codex/skills/{manage-memory → manage-knowhow}/SKILL.md +95 -95
  55. package/.codex/skills/manage-knowhow-capture/SKILL.md +110 -0
  56. package/.codex/skills/manage-learn/SKILL.md +17 -71
  57. package/.codex/skills/manage-status/SKILL.md +4 -35
  58. package/.codex/skills/manage-wiki/SKILL.md +1 -1
  59. package/.codex/skills/quality-business-test/SKILL.md +2 -14
  60. package/.codex/skills/quality-debug/SKILL.md +41 -133
  61. package/.codex/skills/quality-integration-test/SKILL.md +36 -145
  62. package/.codex/skills/quality-refactor/SKILL.md +6 -59
  63. package/.codex/skills/quality-retrospective/SKILL.md +292 -531
  64. package/.codex/skills/quality-review/SKILL.md +30 -65
  65. package/.codex/skills/quality-sync/SKILL.md +2 -11
  66. package/.codex/skills/quality-test/SKILL.md +4 -45
  67. package/.codex/skills/quality-test-gen/SKILL.md +33 -121
  68. package/.codex/skills/spec-add/SKILL.md +2 -9
  69. package/.codex/skills/spec-load/SKILL.md +4 -14
  70. package/.codex/skills/spec-map/SKILL.md +4 -37
  71. package/.codex/skills/spec-remove/SKILL.md +3 -35
  72. package/.codex/skills/spec-setup/SKILL.md +2 -19
  73. package/.codex/skills/team-coordinate/SKILL.md +20 -132
  74. package/.codex/skills/team-coordinate/roles/coordinator/commands/monitor.md +61 -215
  75. package/.codex/skills/team-executor/SKILL.md +7 -66
  76. package/.codex/skills/team-executor/roles/executor/commands/monitor.md +60 -182
  77. package/.codex/skills/team-executor/specs/session-schema.md +22 -56
  78. package/.codex/skills/team-lifecycle-v4/SKILL.md +22 -143
  79. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +31 -223
  80. package/.codex/skills/team-quality-assurance/SKILL.md +14 -88
  81. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +46 -186
  82. package/.codex/skills/team-review/SKILL.md +12 -86
  83. package/.codex/skills/team-review/roles/coordinator/commands/monitor.md +49 -187
  84. package/.codex/skills/team-tech-debt/SKILL.md +11 -50
  85. package/.codex/skills/team-tech-debt/roles/coordinator/commands/monitor.md +50 -239
  86. package/.codex/skills/team-testing/SKILL.md +14 -99
  87. package/.codex/skills/team-testing/roles/coordinator/commands/monitor.md +52 -228
  88. package/.codex/skills/wiki-connect/SKILL.md +2 -5
  89. package/README.md +6 -0
  90. package/README.zh-CN.md +6 -0
  91. package/chains/_intent-map.json +7 -7
  92. package/chains/singles/{memory-capture.json → knowhow-capture.json} +5 -5
  93. package/chains/singles/{memory.json → knowhow.json} +6 -6
  94. package/dashboard/dist/assets/{ArtifactsPage-CUrrDGgN.js → ArtifactsPage-iJZtYsmR.js} +6 -6
  95. package/dashboard/dist/assets/ChatInput-DNnDLdQF.js +6 -0
  96. package/dashboard/dist/assets/ChatPage-BjBibfE4.js +22 -0
  97. package/dashboard/dist/assets/{CollabPage-DIUXeazv.js → CollabPage-8lUMUol_.js} +1 -1
  98. package/dashboard/dist/assets/{ExecutionPanel-VmYeADFj.js → ExecutionPanel-BKV3GZ7Q.js} +1 -1
  99. package/dashboard/dist/assets/{KanbanPage-DLq8v7hg.js → KanbanPage-diY3QmGd.js} +2 -2
  100. package/dashboard/dist/assets/{MarkdownRenderer-D7AehrnR.js → MarkdownRenderer-cYFfe1uX.js} +1 -1
  101. package/dashboard/dist/assets/McpPage-COjuIf7U.js +21 -0
  102. package/dashboard/dist/assets/MeetingRoomPage-wnvT7wlB.js +85 -0
  103. package/dashboard/dist/assets/{OutputPanel-B-Rjwgmv.js → OutputPanel-DDL90Idy.js} +1 -1
  104. package/dashboard/dist/assets/{ProblemsPanel-GEpF-oi4.js → ProblemsPanel-zFN9IIs0.js} +1 -1
  105. package/dashboard/dist/assets/{RequirementBoardPage-xs8uDM7I.js → RequirementBoardPage-DOPJoT0I.js} +2 -2
  106. package/dashboard/dist/assets/{RequirementPage-BKDSFwjA.js → RequirementPage-CEVquRgM.js} +1 -1
  107. package/dashboard/dist/assets/RoomsPage-D5USEWDh.js +1 -0
  108. package/dashboard/dist/assets/{SpecsPage-DLFb9ZH0.js → SpecsPage-BOwBin_o.js} +1 -1
  109. package/dashboard/dist/assets/{SupervisorPage-SOki_kgz.js → SupervisorPage-5iRyMU5T.js} +1 -1
  110. package/dashboard/dist/assets/TeamsPage-DlcEmr_Q.js +1 -0
  111. package/dashboard/dist/assets/{TreeBrowser-B9DHdULE.js → TreeBrowser-Y48Wz-QY.js} +1 -1
  112. package/dashboard/dist/assets/WorkflowPage-CmQaRVgL.js +6 -0
  113. package/dashboard/dist/assets/arrow-left-NCUOENvg.js +6 -0
  114. package/dashboard/dist/assets/{check-DJDk3A2a.js → check-o7nfGNHf.js} +1 -1
  115. package/dashboard/dist/assets/{chevron-right-C7bVDreZ.js → chevron-right-BXySK2fn.js} +1 -1
  116. package/dashboard/dist/assets/{circle-alert-Na1vf6qQ.js → circle-alert-DcSBokh4.js} +1 -1
  117. package/dashboard/dist/assets/{circle-check-CEGgy3NV.js → circle-check-Cd-jce4j.js} +1 -1
  118. package/dashboard/dist/assets/{circle-check-big-3JB8zRYj.js → circle-check-big-BN7Mdp4i.js} +1 -1
  119. package/dashboard/dist/assets/{circle-Qfgy4LB_.js → circle-cooAwnAR.js} +1 -1
  120. package/dashboard/dist/assets/{code-Ble63Idz.js → code-BQa9oL1n.js} +1 -1
  121. package/dashboard/dist/assets/{columns-3-BUcKlxve.js → columns-3-BzgxelGx.js} +1 -1
  122. package/dashboard/dist/assets/{download-CMqkfn8x.js → download-swRJnate.js} +1 -1
  123. package/dashboard/dist/assets/en-C_BD3UCD.js +1 -0
  124. package/dashboard/dist/assets/{folder-B9ewx9LL.js → folder-DbGbLNFN.js} +1 -1
  125. package/dashboard/dist/assets/index-BEUaOz_b.css +1 -0
  126. package/dashboard/dist/assets/{index-JTmGteaT.js → index-DIoMBMbv.js} +1 -1
  127. package/dashboard/dist/assets/index-DLBN_7fb.js +44 -0
  128. package/dashboard/dist/assets/index-uIqUCT8y.js +236 -0
  129. package/dashboard/dist/assets/{list-DI8Wn2aT.js → list-BTRAIvDq.js} +1 -1
  130. package/dashboard/dist/assets/loader-NHtB6Mdn.js +6 -0
  131. package/dashboard/dist/assets/{minus-Lp_BfctG.js → minus-BjMxRTET.js} +1 -1
  132. package/dashboard/dist/assets/{pen-line-Ch7sphzZ.js → pen-line-C4_O16H0.js} +1 -1
  133. package/dashboard/dist/assets/{pencil-_yRMHmGT.js → pencil-DTmKhyDY.js} +1 -1
  134. package/dashboard/dist/assets/{proxy-D72Y8a4Y.js → proxy-Dtx5p6IO.js} +1 -1
  135. package/dashboard/dist/assets/rows-2-GR1dZtRu.js +6 -0
  136. package/dashboard/dist/assets/{search-BS6fI6Bg.js → search-DVtgy2W7.js} +1 -1
  137. package/dashboard/dist/assets/{shallow-BXasQBvr.js → shallow-BOmvDNsv.js} +1 -1
  138. package/dashboard/dist/assets/{table-CeGlFjlP.js → table-DCzuJAFh.js} +1 -1
  139. package/dashboard/dist/assets/team-types-BPeOvVdA.js +6 -0
  140. package/dashboard/dist/assets/{terminal-BJic2yW-.js → terminal-CzogW4cl.js} +1 -1
  141. package/dashboard/dist/assets/{trash-2-Czz4X8Fb.js → trash-2-52LATVfW.js} +1 -1
  142. package/dashboard/dist/assets/users-DLFE2voE.js +6 -0
  143. package/dashboard/dist/assets/{zap-C3H0jVFA.js → zap-DhiYlgyZ.js} +1 -1
  144. package/dashboard/dist/assets/zh-CN-DvQKfow3.js +1 -0
  145. package/dashboard/dist/index.html +2 -2
  146. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.d.ts +2 -0
  147. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js +19 -11
  148. package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js.map +1 -1
  149. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js +5 -0
  150. package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js.map +1 -1
  151. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.d.ts +1 -0
  152. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +21 -4
  153. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
  154. package/dashboard/dist-server/dashboard/src/server/agents/env-cleanup.js +8 -0
  155. package/dashboard/dist-server/dashboard/src/server/agents/env-cleanup.js.map +1 -1
  156. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js +6 -6
  157. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js.map +1 -1
  158. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.test.js +2 -2
  159. package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.test.js.map +1 -1
  160. package/dashboard/dist-server/dashboard/src/server/index.js +14 -3
  161. package/dashboard/dist-server/dashboard/src/server/index.js.map +1 -1
  162. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.d.ts +24 -0
  163. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.js +220 -0
  164. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.js.map +1 -0
  165. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.d.ts +1 -0
  166. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.js +115 -0
  167. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.js.map +1 -0
  168. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.d.ts +44 -0
  169. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.js +260 -0
  170. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.js.map +1 -0
  171. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.d.ts +1 -0
  172. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.js +194 -0
  173. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.js.map +1 -0
  174. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.d.ts +2 -0
  175. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.js +279 -0
  176. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.js.map +1 -0
  177. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.d.ts +14 -0
  178. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.js +131 -0
  179. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.js.map +1 -0
  180. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.d.ts +1 -0
  181. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.js +134 -0
  182. package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.js.map +1 -0
  183. package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.d.ts +51 -0
  184. package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.js +185 -0
  185. package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.js.map +1 -0
  186. package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.d.ts +29 -0
  187. package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.js +125 -0
  188. package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.js.map +1 -0
  189. package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.d.ts +18 -0
  190. package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.js +63 -0
  191. package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.js.map +1 -0
  192. package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.d.ts +19 -0
  193. package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.js +45 -0
  194. package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.js.map +1 -0
  195. package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.d.ts +25 -0
  196. package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.js +115 -0
  197. package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.js.map +1 -0
  198. package/dashboard/dist-server/dashboard/src/server/rooms/room-types.d.ts +53 -0
  199. package/dashboard/dist-server/dashboard/src/server/rooms/room-types.js +5 -0
  200. package/dashboard/dist-server/dashboard/src/server/rooms/room-types.js.map +1 -0
  201. package/dashboard/dist-server/dashboard/src/server/routes/agents.js +6 -0
  202. package/dashboard/dist-server/dashboard/src/server/routes/agents.js.map +1 -1
  203. package/dashboard/dist-server/dashboard/src/server/routes/cli-history.js +20 -1
  204. package/dashboard/dist-server/dashboard/src/server/routes/cli-history.js.map +1 -1
  205. package/dashboard/dist-server/dashboard/src/server/routes/index.d.ts +2 -1
  206. package/dashboard/dist-server/dashboard/src/server/routes/index.js +8 -1
  207. package/dashboard/dist-server/dashboard/src/server/routes/index.js.map +1 -1
  208. package/dashboard/dist-server/dashboard/src/server/routes/install.js +1 -1
  209. package/dashboard/dist-server/dashboard/src/server/routes/install.js.map +1 -1
  210. package/dashboard/dist-server/dashboard/src/server/routes/mcp.js +2 -2
  211. package/dashboard/dist-server/dashboard/src/server/routes/mcp.js.map +1 -1
  212. package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.d.ts +3 -0
  213. package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.js +246 -0
  214. package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.js.map +1 -0
  215. package/dashboard/dist-server/dashboard/src/server/routes/rooms.d.ts +3 -0
  216. package/dashboard/dist-server/dashboard/src/server/routes/rooms.js +38 -0
  217. package/dashboard/dist-server/dashboard/src/server/routes/rooms.js.map +1 -0
  218. package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js +7 -7
  219. package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js.map +1 -1
  220. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js +1 -1
  221. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js.map +1 -1
  222. package/dashboard/dist-server/dashboard/src/server/state/event-bus.d.ts +39 -1
  223. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js +12 -0
  224. package/dashboard/dist-server/dashboard/src/server/state/event-bus.js.map +1 -1
  225. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js +1 -1
  226. package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js.map +1 -1
  227. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +25 -14
  228. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
  229. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js +6 -6
  230. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js.map +1 -1
  231. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-types.d.ts +1 -1
  232. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js +17 -16
  233. package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js.map +1 -1
  234. package/dashboard/dist-server/dashboard/src/server/wiki/writer.d.ts +1 -1
  235. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js +18 -7
  236. package/dashboard/dist-server/dashboard/src/server/wiki/writer.js.map +1 -1
  237. package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.d.ts +3 -1
  238. package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.js +75 -1
  239. package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.js.map +1 -1
  240. package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.d.ts +17 -0
  241. package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.js +192 -0
  242. package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.js.map +1 -0
  243. package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.d.ts +13 -0
  244. package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.js +37 -0
  245. package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.js.map +1 -0
  246. package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.d.ts +7 -1
  247. package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.js +39 -2
  248. package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.js.map +1 -1
  249. package/dashboard/dist-server/dashboard/src/shared/constants.js +12 -0
  250. package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
  251. package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.d.ts +1 -0
  252. package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.js +38 -0
  253. package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.js.map +1 -0
  254. package/dashboard/dist-server/dashboard/src/shared/team-types.d.ts +66 -0
  255. package/dashboard/dist-server/dashboard/src/shared/team-types.js.map +1 -1
  256. package/dashboard/dist-server/dashboard/src/shared/types.d.ts +24 -3
  257. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.d.ts +76 -2
  258. package/dashboard/dist-server/dashboard/src/shared/ws-protocol.js.map +1 -1
  259. package/dashboard/dist-server/shared/agent-types.d.ts +2 -0
  260. package/dashboard/dist-server/src/commands/delegate.js +11 -8
  261. package/dashboard/dist-server/src/commands/delegate.js.map +1 -1
  262. package/dist/shared/agent-types.d.ts +2 -0
  263. package/dist/shared/agent-types.d.ts.map +1 -1
  264. package/dist/src/cli.js +2 -2
  265. package/dist/src/cli.js.map +1 -1
  266. package/dist/src/commands/delegate.d.ts.map +1 -1
  267. package/dist/src/commands/delegate.js +11 -8
  268. package/dist/src/commands/delegate.js.map +1 -1
  269. package/dist/src/commands/install-backend.d.ts +1 -1
  270. package/dist/src/commands/install-backend.d.ts.map +1 -1
  271. package/dist/src/commands/install-backend.js +1 -1
  272. package/dist/src/commands/install-backend.js.map +1 -1
  273. package/dist/src/commands/install-ui/ExecutionView.d.ts.map +1 -1
  274. package/dist/src/commands/install-ui/ExecutionView.js +4 -1
  275. package/dist/src/commands/install-ui/ExecutionView.js.map +1 -1
  276. package/dist/src/commands/install-ui/InstallExecution.d.ts.map +1 -1
  277. package/dist/src/commands/install-ui/InstallExecution.js +4 -1
  278. package/dist/src/commands/install-ui/InstallExecution.js.map +1 -1
  279. package/dist/src/commands/install.js +5 -5
  280. package/dist/src/commands/install.js.map +1 -1
  281. package/dist/src/commands/knowhow.d.ts +10 -0
  282. package/dist/src/commands/knowhow.d.ts.map +1 -0
  283. package/dist/src/commands/knowhow.js +217 -0
  284. package/dist/src/commands/knowhow.js.map +1 -0
  285. package/dist/src/commands/overlay-ui/OverlayList.d.ts +2 -0
  286. package/dist/src/commands/overlay-ui/OverlayList.d.ts.map +1 -1
  287. package/dist/src/commands/overlay-ui/OverlayList.js +6 -3
  288. package/dist/src/commands/overlay-ui/OverlayList.js.map +1 -1
  289. package/dist/src/commands/overlay-ui/index.d.ts.map +1 -1
  290. package/dist/src/commands/overlay-ui/index.js +70 -44
  291. package/dist/src/commands/overlay-ui/index.js.map +1 -1
  292. package/dist/src/commands/overlay.d.ts.map +1 -1
  293. package/dist/src/commands/overlay.js +4 -3
  294. package/dist/src/commands/overlay.js.map +1 -1
  295. package/dist/src/commands/update.d.ts.map +1 -1
  296. package/dist/src/commands/update.js +31 -21
  297. package/dist/src/commands/update.js.map +1 -1
  298. package/dist/src/core/manifest.d.ts +8 -1
  299. package/dist/src/core/manifest.d.ts.map +1 -1
  300. package/dist/src/core/manifest.js +3 -1
  301. package/dist/src/core/manifest.js.map +1 -1
  302. package/dist/src/core/overlay/applier.d.ts +1 -1
  303. package/dist/src/core/overlay/applier.d.ts.map +1 -1
  304. package/dist/src/core/overlay/applier.js +40 -13
  305. package/dist/src/core/overlay/applier.js.map +1 -1
  306. package/dist/src/core/overlay/loader.d.ts.map +1 -1
  307. package/dist/src/core/overlay/loader.js +6 -0
  308. package/dist/src/core/overlay/loader.js.map +1 -1
  309. package/dist/src/core/overlay/types.d.ts +5 -1
  310. package/dist/src/core/overlay/types.d.ts.map +1 -1
  311. package/dist/src/core/overlay/types.js +1 -1
  312. package/dist/src/core/overlay/types.js.map +1 -1
  313. package/dist/src/hooks/context-monitor.js +1 -1
  314. package/dist/src/hooks/context-monitor.js.map +1 -1
  315. package/dist/src/hooks/skill-context.js +1 -1
  316. package/dist/src/hooks/skill-context.js.map +1 -1
  317. package/dist/src/mcp/delegate-channel-relay.d.ts +4 -0
  318. package/dist/src/mcp/delegate-channel-relay.d.ts.map +1 -1
  319. package/dist/src/mcp/delegate-channel-relay.js +73 -4
  320. package/dist/src/mcp/delegate-channel-relay.js.map +1 -1
  321. package/dist/src/tools/index.js +2 -2
  322. package/dist/src/tools/index.js.map +1 -1
  323. package/dist/src/tools/store-knowhow.d.ts +21 -0
  324. package/dist/src/tools/store-knowhow.d.ts.map +1 -0
  325. package/dist/src/tools/store-knowhow.js +295 -0
  326. package/dist/src/tools/store-knowhow.js.map +1 -0
  327. package/package.json +1 -1
  328. package/shared/agent-types.ts +2 -0
  329. package/workflows/analyze.md +61 -185
  330. package/workflows/brainstorm.md +3 -23
  331. package/workflows/codebase-rebuild.md +79 -191
  332. package/workflows/codebase-refresh.md +26 -124
  333. package/workflows/debug.md +21 -141
  334. package/workflows/execute.md +183 -350
  335. package/workflows/fork.md +72 -230
  336. package/workflows/harvest.md +12 -79
  337. package/workflows/init.md +3 -17
  338. package/workflows/integration-test.md +21 -190
  339. package/workflows/issue-analyze.md +35 -153
  340. package/workflows/issue-discover.md +88 -263
  341. package/workflows/issue-execute.md +29 -208
  342. package/workflows/issue-plan.md +33 -154
  343. package/workflows/issue.md +44 -202
  344. package/workflows/knowhow.md +374 -0
  345. package/workflows/learn.md +30 -177
  346. package/workflows/maestro-coordinate.codex.md +77 -362
  347. package/workflows/maestro-link-coordinate.md +12 -61
  348. package/workflows/maestro.codex.md +124 -457
  349. package/workflows/maestro.md +562 -976
  350. package/workflows/map.md +16 -53
  351. package/workflows/merge.md +42 -197
  352. package/workflows/milestone-audit.md +5 -43
  353. package/workflows/milestone-complete.md +11 -60
  354. package/workflows/plan.md +188 -387
  355. package/workflows/quick.md +25 -174
  356. package/workflows/refactor.md +28 -221
  357. package/workflows/retrospective.md +104 -443
  358. package/workflows/review.md +87 -299
  359. package/workflows/roadmap.md +117 -97
  360. package/workflows/spec-generate.md +22 -118
  361. package/workflows/specs-add.md +5 -25
  362. package/workflows/specs-load.md +1 -5
  363. package/workflows/specs-remove.md +0 -11
  364. package/workflows/specs-setup.md +11 -47
  365. package/workflows/status.md +58 -200
  366. package/workflows/sync.md +28 -141
  367. package/workflows/test-gen.md +23 -100
  368. package/workflows/test.md +15 -125
  369. package/workflows/ui-design.md +139 -465
  370. package/workflows/ui-style.md +36 -228
  371. package/workflows/verify.md +52 -273
  372. package/workflows/wiki-connect.md +9 -46
  373. package/workflows/wiki-digest.md +7 -50
  374. package/workflows/wiki-manage.md +11 -108
  375. package/.claude/commands/maestro-coordinate.md +0 -63
  376. package/.claude/commands/manage-memory-capture.md +0 -59
  377. package/.codex/skills/maestro-coordinate/SKILL.md +0 -213
  378. package/.codex/skills/manage-memory-capture/SKILL.md +0 -93
  379. package/dashboard/dist/assets/ChatInput-pUOLJIKE.js +0 -49
  380. package/dashboard/dist/assets/ChatPage-B8Xqkt0v.js +0 -27
  381. package/dashboard/dist/assets/McpPage-BY0SjTgw.js +0 -21
  382. package/dashboard/dist/assets/TeamsPage-BO2kP70F.js +0 -11
  383. package/dashboard/dist/assets/WorkflowPage-C8hWbYim.js +0 -6
  384. package/dashboard/dist/assets/en-ZbRpfzuP.js +0 -1
  385. package/dashboard/dist/assets/index-C2Mcb4TJ.js +0 -231
  386. package/dashboard/dist/assets/index-DyBbPc18.css +0 -1
  387. package/dashboard/dist/assets/loader-B5F6PzFT.js +0 -11
  388. package/dashboard/dist/assets/zh-CN-CoXBFuny.js +0 -1
  389. package/workflows/maestro-coordinate.md +0 -582
  390. package/workflows/memory.md +0 -451
package/workflows/plan.md CHANGED
@@ -20,45 +20,18 @@ All output goes to `.workflow/scratch/plan-{slug}-{date}/`.
20
20
  ```
21
21
  Input: [phase] argument OR --dir <path>
22
22
 
23
- # Worktree scope check
24
- IF file_exists(".workflow/worktree-scope.json"):
25
- scope = read(".workflow/worktree-scope.json")
26
- IF <phase> is a number AND <phase> NOT IN scope.owned_phases:
27
- ERROR "Phase {phase} not owned by this worktree. Owned: {scope.owned_phases}"
28
- EXIT
29
-
30
- # Auto-bootstrap state.json if missing
31
- IF NOT file_exists(".workflow/state.json"):
32
- mkdir -p .workflow/scratch/
33
- Write minimal state.json: { project: null, status: "active", current_milestone: null,
34
- current_task_id: null, milestones: [], artifacts: [], last_updated: now() }
35
-
36
- IF --dir <path> is provided:
37
- 1. Set CONTEXT_DIR = <path> (absolute or relative to .workflow/)
38
- 2. Validate directory exists (context.md or conclusions.json present)
39
- 3. Determine scope from parent artifact in state.json (if registered), else "standalone"
40
- 4. Set PHASE_NUM = null, PHASE_SLUG = directory basename
41
-
42
- ELSE IF no arguments:
43
- IF state.json.current_milestone AND roadmap.md exists:
44
- scope = "milestone"
45
- milestone_slug = slugify(current_milestone name)
46
- CONTEXT_DIR = find latest analyze artifact for this milestone from state.json.artifacts[]
47
- ELSE:
48
- ERROR E001 "No args and no roadmap — provide phase number or create roadmap"
49
-
50
- ELSE IF argument is a number:
51
- IF state.json.current_milestone AND roadmap.md exists:
52
- scope = "phase"
53
- PHASE_NUM = parsed number
54
- PHASE_SLUG = resolve from roadmap.md
55
- CONTEXT_DIR = find latest analyze artifact for this phase from state.json.artifacts[]
56
- ELSE:
57
- ERROR "Phase number requires init + roadmap"
58
-
59
- # Output directory (always scratch)
23
+ Worktree guard: reject if phase not in .workflow/worktree-scope.json owned_phases
24
+ Auto-bootstrap: create minimal state.json if missing
25
+
26
+ Resolution priority:
27
+ --dir <path> → CONTEXT_DIR = path, scope from state.json artifact or "standalone"
28
+ no arguments → scope = "milestone", CONTEXT_DIR = latest analyze artifact for current_milestone
29
+ (ERROR E001 if no roadmap)
30
+ numeric arg → scope = "phase", resolve PHASE_SLUG from roadmap.md,
31
+ CONTEXT_DIR = latest analyze artifact for phase
32
+ (ERROR if no init + roadmap)
33
+
60
34
  OUTPUT_DIR = .workflow/scratch/plan-{PHASE_SLUG or milestone_slug}-{date}/
61
- mkdir -p {OUTPUT_DIR}/.task/
62
35
  ```
63
36
 
64
37
  ---
@@ -72,6 +45,18 @@ mkdir -p {OUTPUT_DIR}/.task/
72
45
  | `--auto` | Skip P2 (clarification), proceed directly to P3 |
73
46
  | `--gaps` | Load verification.json gaps, skip P1 exploration, plan only gap fixes |
74
47
  | `--dir <path>` | Use arbitrary directory instead of phase resolution (skip roadmap validation) |
48
+ | `--revise [instructions]` | Revise existing plan (skip P1-P3, load → modify → P4). Auto-discovers latest plan or use `--dir` |
49
+ | `--check <plan-dir>` | Standalone plan verification (P4 only, read-only) |
50
+
51
+ ---
52
+
53
+ ## Mode Routing
54
+
55
+ ```
56
+ --check <plan-dir> → Check Mode (P4 only, read-only)
57
+ --revise → Revise Mode (load → modify → P4)
58
+ default → Create Mode: P1 → P2 → P3 → P4 → P4.5 → P5
59
+ ```
75
60
 
76
61
  ---
77
62
 
@@ -82,21 +67,10 @@ mkdir -p {OUTPUT_DIR}/.task/
82
67
  ### Steps
83
68
 
84
69
  1. **Load user decisions**
85
- ```
86
- IF CONTEXT_DIR exists:
87
- Read ${CONTEXT_DIR}/context.md
88
- ELSE:
89
- warn "No upstream analyze found. Run /maestro-analyze first or proceed with defaults."
90
- ```
70
+ - Read `${CONTEXT_DIR}/context.md` if exists, else warn (no upstream analyze)
91
71
 
92
72
  2. **Load spec reference** (if `--spec` flag or index.json has spec_ref)
93
- ```
94
- spec_ref = --spec argument || index.json.spec_ref
95
- If spec_ref:
96
- Read .workflow/task-specs/${spec_ref}/spec-summary.md
97
- Read .workflow/task-specs/${spec_ref}/requirements/_index.md
98
- Read .workflow/task-specs/${spec_ref}/epics/_index.md
99
- ```
73
+ - Read from `.workflow/task-specs/${spec_ref}/`: spec-summary.md, requirements/_index.md, epics/_index.md
100
74
 
101
75
  3. **Load project specs**
102
76
  ```
@@ -105,120 +79,38 @@ mkdir -p {OUTPUT_DIR}/.task/
105
79
  Pass to planner agent as project constraints context.
106
80
 
107
81
  4. **Load codebase context**
108
- ```
109
- If exists .workflow/codebase/doc-index.json:
110
- Read doc-index.json -> extract relevant features, components, requirements
111
- ```
82
+ - Read `.workflow/codebase/doc-index.json` if exists → extract relevant features, components, requirements
112
83
 
113
84
  4b. **Load design reference** (if available)
114
- ```
115
- IF file exists "${PHASE_DIR}/design-ref/MASTER.md":
116
- designRef = read("${PHASE_DIR}/design-ref/MASTER.md")
117
- designTokens = read_json("${PHASE_DIR}/design-ref/design-tokens.json")
118
- animationTokens = read_json("${PHASE_DIR}/design-ref/animation-tokens.json") // optional
119
- layoutTemplates = list("${PHASE_DIR}/design-ref/layout-templates/layout-*.json")
120
- display "Found design reference from maestro-ui-design. Including in plan context."
121
- // Pass to planner: MASTER.md, tokens, animation tokens, layout templates, prototype paths
122
- // Ensure every UI task includes in read_first[]:
123
- // - design-ref/design-tokens.json (colors, typography, component_styles)
124
- // - design-ref/animation-tokens.json (transitions, keyframes)
125
- // - design-ref/layout-templates/layout-{target}-*.json (relevant target layout)
126
- // - design-ref/MASTER.md (overall design system reference)
127
- ELSE IF phase goal matches UI keywords (landing|page|dashboard|frontend|UI|component|界面):
128
- display "This phase has UI work but no design reference."
129
- display "Consider: Skill({ skill: \"maestro-ui-design\", args: \"{phase}\" })"
130
- // Continue without design ref — non-blocking suggestion
131
- ```
85
+ - If `${PHASE_DIR}/design-ref/MASTER.md` exists: load MASTER.md, design-tokens.json, animation-tokens.json (optional), layout-templates/layout-*.json
86
+ - Every UI task must include in `read_first[]`: design-tokens.json, animation-tokens.json, relevant layout-*.json, MASTER.md
87
+ - Else if phase goal matches UI keywords (`landing|page|dashboard|frontend|UI|component|界面`): suggest running `maestro-ui-design` (non-blocking)
132
88
 
133
89
  5. **Load upstream analysis** (if available)
134
- ```
135
- IF file exists "${PHASE_DIR}/conclusions.json":
136
- conclusions = read_json("${PHASE_DIR}/conclusions.json")
137
- IF conclusions.status is not empty:
138
- display "Found existing analysis from maestro-analyze. Reusing exploration context."
139
- explorationContext = { conclusions: conclusions }
140
- IF file exists "${PHASE_DIR}/explorations.json":
141
- explorationContext.explorations = read_json("${PHASE_DIR}/explorations.json")
142
- IF file exists "${PHASE_DIR}/perspectives.json":
143
- explorationContext.perspectives = read_json("${PHASE_DIR}/perspectives.json")
144
-
145
- // Extract implementation scope (from analyze Step 9 scoping)
146
- IF conclusions.implementation_scope is not empty:
147
- explorationContext.implementationScope = conclusions.implementation_scope
148
- display "Found implementation scope: ${conclusions.implementation_scope.length} scoped items with acceptance criteria"
149
- // Planner MUST use these as primary input:
150
- // scope.objective → task title/description
151
- // scope.acceptance_criteria → convergence.criteria (make grep-verifiable)
152
- // scope.target_files → files[] + read_first[]
153
- // scope.priority → task/wave ordering
154
-
155
- Skip step 5 (parallel exploration).
156
- ```
90
+ - If `${PHASE_DIR}/conclusions.json` exists with non-empty status: load as explorationContext (conclusions + explorations.json + perspectives.json)
91
+ - If `conclusions.implementation_scope` exists: use as primary planner input:
92
+ - `scope.objective` → task title/description
93
+ - `scope.acceptance_criteria` convergence.criteria (grep-verifiable)
94
+ - `scope.target_files` files[] + read_first[]
95
+ - `scope.priority` task/wave ordering
96
+ - Skip parallel exploration
157
97
 
158
98
  5. **Parallel exploration** (skip if `--gaps` or upstream analysis loaded)
159
- ```
160
- Determine exploration angles based on phase goal + context complexity:
161
- - architecture: How does this fit into existing codebase?
162
- - implementation: What patterns/libraries to use?
163
- - integration: What existing code needs modification?
164
- - risk: What could go wrong?
165
-
166
- Spawn 1-4 cli-explore-agent in parallel (based on complexity):
167
- Each agent:
168
- Input: phase goal + success_criteria + one exploration angle
169
- Output: .process/exploration-{angle}.json
170
-
171
- Write .process/explorations-manifest.json:
172
- { "explorations": [{ "angle": "...", "file": "...", "status": "completed" }] }
173
-
174
- Write .process/context-package.json:
175
- Aggregated exploration results for downstream consumption
176
- ```
99
+ - Exploration angles (1-4 based on complexity): architecture, implementation, integration, risk
100
+ - Spawn 1-4 `cli-explore-agent` in parallel, each with phase goal + success_criteria + one angle
101
+ - Output: `.process/exploration-{angle}.json`, `.process/explorations-manifest.json`, `.process/context-package.json`
177
102
 
178
103
  6. **Gap-mode context** (if `--gaps`)
179
- ```
180
- all_gaps = []
181
-
182
- // Primary source: issues registry
183
- IF file exists ".workflow/issues/issues.jsonl":
184
- issues = read_ndjson(".workflow/issues/issues.jsonl")
185
- phase_issues = issues.filter(i => i.phase_ref == PHASE_SLUG
186
- AND i.status in ["registered", "diagnosed"])
187
- FOR each issue in phase_issues:
188
- all_gaps.push({
189
- issue_id: issue.id,
190
- description: issue.description,
191
- fix_direction: issue.fix_direction,
192
- severity: issue.severity,
193
- source: "issue",
194
- context: issue.context
195
- })
196
- Update issue in issues.jsonl: status = "planning"
197
-
198
- // Fallback source: verification gaps (when no issues registry)
199
- IF all_gaps is empty AND file exists "${PHASE_DIR}/verification.json":
200
- verification = read_json("${PHASE_DIR}/verification.json")
201
- all_gaps.extend(verification.gaps)
202
-
203
- // Additional source: UAT human-found gaps
204
- IF file exists "${PHASE_DIR}/uat.md":
205
- Parse uat.md "Gaps" section into structured gap objects.
206
- FOR each uat_gap:
207
- IF not already covered in all_gaps (match by test/truth):
208
- all_gaps.push({ ...uat_gap, source: "uat" })
209
-
210
- // Enrichment source: debug diagnosis (enrich existing gaps)
211
- FOR each debug_dir IN "${PHASE_DIR}/.debug/*/":
212
- IF file exists "${debug_dir}/understanding.md":
213
- Parse root_cause and fix_direction from understanding.md.
214
- Match to existing gap by affected area/test_id.
215
- IF matched: enrich gap with root_cause, fix_direction, affected_files.
216
-
217
- IF all_gaps is empty:
218
- Error: "--gaps mode requires issues.jsonl, verification.json, or uat.md with identified gaps."
219
-
220
- Set explorationContext = all_gaps (skip exploration agents)
221
- ```
104
+
105
+ Gap sources (in priority order, first non-empty wins, then additionals merged):
106
+ - **Primary**: `.workflow/issues/issues.jsonl` — filter by phase_ref + status in ["registered","diagnosed"], mark as "planning"
107
+ - **Fallback**: `${PHASE_DIR}/verification.json` gaps (when no issues found)
108
+ - **Additional**: `${PHASE_DIR}/uat.md` "Gaps" section — deduplicate against existing gaps
109
+ - **Enrichment**: `${PHASE_DIR}/.debug/*/understanding.md` — enrich matched gaps with root_cause, fix_direction, affected_files
110
+
111
+ Each gap: `{ issue_id, description, fix_direction, severity, source, context }`
112
+
113
+ ERROR if all sources empty. Set `explorationContext = all_gaps` (skip exploration agents).
222
114
 
223
115
  ### Output
224
116
  - `.process/exploration-{angle}.json` (1-4 files, skipped if upstream analysis loaded)
@@ -235,30 +127,12 @@ mkdir -p {OUTPUT_DIR}/.task/
235
127
  ### Steps
236
128
 
237
129
  1. **Aggregate clarification needs**
238
- ```
239
- For each exploration-{angle}.json:
240
- Extract clarification_needs[] field
241
- Deduplicate similar questions
242
- Sort by priority (blocking > important > nice-to-have)
243
- ```
130
+ - Extract `clarification_needs[]` from each exploration, deduplicate, sort by priority (blocking > important > nice-to-have)
244
131
 
245
- 2. **Interactive clarification rounds**
246
- ```
247
- While unresolved_questions > 0 AND round <= 3:
248
- Present max 4 questions per round via AskUserQuestion
249
- Record answers
250
- Mark questions as resolved
251
- Check if answers trigger follow-up questions
252
- ```
132
+ 2. **Interactive clarification rounds** (max 3 rounds, max 4 questions each)
133
+ - Present via AskUserQuestion, record answers, check for follow-ups
253
134
 
254
- 3. **Build clarification context**
255
- ```
256
- clarificationContext = {
257
- questions_asked: [...],
258
- answers: [...],
259
- decisions_made: [...]
260
- }
261
- ```
135
+ 3. **Build clarification context** → `{ questions_asked, answers, decisions_made }`
262
136
 
263
137
  ### Output
264
138
  - In-memory: clarificationContext
@@ -271,38 +145,29 @@ mkdir -p {OUTPUT_DIR}/.task/
271
145
 
272
146
  ### Standard Mode (default)
273
147
 
274
- ```
275
- Spawn workflow-planner Agent:
276
- Input:
277
- - context.md (user decisions)
278
- - spec-ref (if available)
279
- - doc-index.json (if available)
280
- - explorationContext (from P1)
281
- - explorationContext.implementationScope (from P1, if present)
282
- - clarificationContext (from P2)
283
- - Phase goal + success_criteria from index.json
284
- - Templates: @templates/plan.json, @templates/task.json
285
-
286
- Agent responsibilities:
287
- 1. Decompose goal into concrete tasks
288
- - **When implementationScope exists**: use each scope item as primary task seed
289
- (1 scope item → 1 task, group only if tightly coupled)
290
- 2. Assign task IDs (TASK-001, TASK-002, ...)
291
- 3. Determine dependencies between tasks
292
- 4. Group tasks into execution waves
293
- - **When implementationScope exists**: order by scope.priority (high first)
294
- 5. Estimate complexity and time
295
- 6. Set convergence.criteria (grep-verifiable) for each task
296
- - **When implementationScope exists**: use scope.acceptance_criteria as seed,
297
- then refine into grep-verifiable form
298
- 7. Identify files to create/modify per task
299
- - **When implementationScope exists**: use scope.target_files as starting point
300
- 8. Populate read_first[] for each task
301
-
302
- Output:
303
- - plan.json (summary, approach, task_ids[], task_count, complexity, waves[])
304
- - .task/TASK-{NNN}.json per task (using task.json template)
305
- ```
148
+ Spawn `workflow-planner` agent with: context.md, spec-ref, doc-index.json, explorationContext (incl. implementationScope), clarificationContext, phase goal + success_criteria, templates (plan.json, task.json).
149
+
150
+ **Task count guard**: Before spawning, assess scope complexity:
151
+ - Single feature / simple change → expect **1-2 tasks** max
152
+ - Medium feature (multiple files, one module) → expect **2-4 tasks** max
153
+ - Large feature (cross-module) → expect **4-8 tasks** max
154
+ - If planner outputs more tasks than these thresholds, re-prompt with explicit instruction to merge.
155
+
156
+ Agent responsibilities:
157
+ 1. Decompose goal into tasks (when implementationScope exists: 1 scope item → 1 task)
158
+ 2. Assign task IDs (TASK-001, TASK-002, ...), determine dependencies
159
+ 3. Group into execution waves (implementationScope: order by scope.priority)
160
+ 4. Estimate complexity/time
161
+ 5. Set grep-verifiable `convergence.criteria` (from scope.acceptance_criteria when available)
162
+ 6. Identify files per task (from scope.target_files when available), populate `read_first[]`
163
+
164
+ Output: `plan.json` (summary, approach, task_ids[], task_count, complexity, waves[]) + `.task/TASK-{NNN}.json` per task.
165
+
166
+ **Anti-splitting rules** (pass to planner; re-prompt if violated):
167
+ - One feature = one task (even if 3-5 files); never split a feature into per-file tasks
168
+ - Group simple unrelated changes into a batch task to minimize agent spawns
169
+ - depends_on only for genuine output dependencies; most tasks should be parallel
170
+ - Each task must be substantial (15-60 min); sub-5-min changes must be merged
306
171
 
307
172
  ### Deep Work Rules (MANDATORY for all modes)
308
173
 
@@ -336,53 +201,17 @@ Every TASK-*.json MUST include these fields — they are NOT optional:
336
201
 
337
202
  ### Collaborative Mode (`--collab`)
338
203
 
339
- ```
340
- Determine planner count (2-5 based on task scope)
341
-
342
- Pre-allocate TASK ID ranges:
343
- Planner 1: TASK-001..010
344
- Planner 2: TASK-011..020
345
- (etc.)
346
-
347
- Create plan-note.md for coordination:
348
- - Shared context summary
349
- - ID range assignments
350
- - Coordination rules (no overlapping files)
351
-
352
- Spawn N workflow-collab-planner agents in parallel:
353
- Each agent:
354
- - Assigned ID range
355
- - Read/append plan-note.md for coordination
356
- - Output: .task/TASK-{NNN}.json within assigned range
357
-
358
- Merge results:
359
- - Collect all task files
360
- - Build unified plan.json with merged waves
361
- - Resolve cross-planner dependencies
362
- ```
204
+ - Pre-allocate TASK ID ranges per planner (2-5 planners based on scope): TASK-001..010, TASK-011..020, etc.
205
+ - Create `plan-note.md` for coordination (shared context, ID ranges, no-overlap rules)
206
+ - Spawn N `workflow-collab-planner` agents in parallel, each writing `.task/TASK-{NNN}.json` within assigned range
207
+ - Merge: collect all task files, build unified plan.json with merged waves, resolve cross-planner dependencies
363
208
 
364
209
  ### Gap Mode (`--gaps`)
365
210
 
366
- ```
367
- Skip exploration, load gaps from explorationContext (populated in P1 Step 6):
368
- For each gap:
369
- Create TASK-{NNN}.json with:
370
- type: "fix"
371
- description: gap.description
372
- action: gap.fix_direction (with concrete values, not vague references)
373
- read_first: [affected files from gap context]
374
- convergence.criteria: [grep-verifiable conditions derived from gap description]
375
- issue_id: gap.issue_id (if source == "issue", else null)
376
-
377
- Link tasks to issues (bidirectional):
378
- For each created TASK-{NNN}.json that has issue_id:
379
- Update corresponding issue in .workflow/issues/issues.jsonl:
380
- status: "planned"
381
- updated_at: now()
382
- Display: "TASK-{NNN} <-> {issue_id}"
383
-
384
- Build plan.json with gap-fix tasks
385
- ```
211
+ For each gap from explorationContext (P1 Step 6), create `TASK-{NNN}.json`:
212
+ - `type: "fix"`, `description`, `action` (concrete fix_direction), `read_first` (affected files), `convergence.criteria` (grep-verifiable), `issue_id` (if source == "issue")
213
+
214
+ Bidirectional linking: update matching issues in `.workflow/issues/issues.jsonl` → `status: "planned"`. Build plan.json with gap-fix tasks.
386
215
 
387
216
  ### Output
388
217
  - `plan.json` in PHASE_DIR
@@ -398,44 +227,16 @@ Build plan.json with gap-fix tasks
398
227
  ### Steps
399
228
 
400
229
  1. **Spawn workflow-plan-checker agent**
401
- ```
402
- Input: plan.json + all .task/TASK-*.json + index.json (success_criteria)
403
-
404
- Check dimensions:
405
- - Requirements coverage: Every success_criterion maps to at least one task
406
- - Feasibility: Files referenced exist or can be created
407
- - Dependency correctness: No circular deps, deps exist, wave ordering valid
408
- - Convergence criteria quality: Each task has grep-verifiable convergence.criteria (no subjective language)
409
- - read_first completeness: Every task has read_first[] with at least the file being modified
410
- - Action concreteness: No vague "align X with Y" — every action has exact values
411
- - Wave structure: Parallel tasks have no conflicting file modifications
412
- - Completeness: No orphan tasks (not in any wave)
413
- ```
230
+ - Input: plan.json + all .task/TASK-*.json + index.json (success_criteria)
231
+ - Check dimensions: requirements coverage, feasibility, dependency correctness (no circular deps), convergence criteria quality (grep-verifiable, no subjective language), read_first completeness, action concreteness (no vague references), wave structure (no conflicting files), completeness (no orphan tasks)
414
232
 
415
233
  2. **Revision loop** (max 3 rounds)
416
- ```
417
- While issues_found AND round <= 3:
418
- checker returns issues[] with severity + fix_suggestion
419
- If critical issues:
420
- Re-spawn workflow-planner with issues as additional input
421
- Planner revises plan.json + affected .task/ files
422
- Re-check
423
- If only warnings:
424
- Log warnings, proceed
425
- ```
234
+ - Critical issues → re-spawn planner with issues, revise, re-check
235
+ - Warnings only log and proceed
426
236
 
427
237
  3. **Update index.json**
428
- ```
429
- index.json.plan = {
430
- task_ids: [extracted from plan.json],
431
- task_count: plan.json.task_count,
432
- complexity: plan.json.complexity,
433
- waves: plan.json.waves,
434
- executor_assignments: {} # populated by user override or auto-assignment in P5
435
- }
436
- index.json.status = "planning"
437
- index.json.updated_at = now()
438
- ```
238
+ - Set `index.json.plan` = `{ task_ids, task_count, complexity, waves, executor_assignments: {} }`
239
+ - Set `status: "planning"`, `updated_at: now()`
439
240
 
440
241
  ### Output
441
242
  - Updated plan.json (if revised)
@@ -451,40 +252,11 @@ Build plan.json with gap-fix tasks
451
252
  **Skip if:** scope == "standalone" (no milestone context to compare against)
452
253
 
453
254
  ```
454
- // 1. Collect existing plan file sets
455
- existing_plans = state.json.artifacts
456
- .filter(a => a.milestone == current_milestone
457
- && a.type == "plan"
458
- && a.status == "completed")
459
-
460
- existing_files = {} // { file_path: [plan_id, ...] }
461
- FOR each plan IN existing_plans:
462
- tasks = load_all_tasks(plan.path + "/.task/")
463
- FOR each task IN tasks:
464
- FOR each file IN task.files:
465
- existing_files[file].push(plan.id)
466
-
467
- // 2. Collect new plan's file set
468
- new_tasks = load_all_tasks(OUTPUT_DIR + "/.task/")
469
- new_files = Set()
470
- FOR each task IN new_tasks:
471
- FOR each file IN task.files:
472
- new_files.add(file)
473
-
474
- // 3. Check intersection
475
- collisions = []
476
- FOR each file IN new_files:
477
- IF file IN existing_files:
478
- collisions.push({ file, existing_plans: existing_files[file] })
479
-
480
- // 4. Report (non-blocking)
481
- IF collisions.length > 0:
482
- WARN: "碰撞检测发现 {collisions.length} 个文件重叠:"
483
- FOR each c IN collisions:
484
- " {c.file} ← 已在 {c.existing_plans.join(', ')} 中规划"
485
- "建议: 确认是否有意覆盖,或调整 task 范围"
486
- ELSE:
487
- "碰撞检测通过: 无文件重叠"
255
+ 1. Collect task.files[] from all completed plans in current milestone
256
+ 2. Collect task.files[] from new plan
257
+ 3. Intersect collisions (non-blocking warning)
258
+ 碰撞 WARN "{file} ← 已在 {plan_ids} 中规划"
259
+ 无重叠 "碰撞检测通过"
488
260
  ```
489
261
 
490
262
  **Note:** Only checks `task.files[]` (write targets). `task.read_first[]` (read-only references) are excluded.
@@ -497,77 +269,33 @@ ELSE:
497
269
 
498
270
  ### Steps
499
271
 
500
- 1. **Display plan summary**
501
- ```
502
- Show:
503
- - Plan summary and approach
504
- - Task count and wave structure
505
- - Complexity estimate
506
- - Key dependencies
507
- ```
272
+ 1. **Display plan summary** — summary, approach, task count, wave structure, complexity, key dependencies
508
273
 
509
- 2. **Present options via AskUserQuestion** (skip if `config.gates.confirm_plan == false`, auto-proceed to Execute)
510
- ```
511
- "Plan ready ({task_count} tasks in {wave_count} waves). What next?"
512
-
513
- Options:
514
- 1. Execute now -> Build executionContext, hand off to /workflow:execute
515
- 2. Verify plan quality -> Re-run P4 with stricter checks
516
- 3. Just view -> Display full plan details, exit
517
- 4. Modify -> Open specific task for editing, return to P4
518
- ```
274
+ 2. **Present options via AskUserQuestion** (skip if `config.gates.confirm_plan == false`, auto-proceed)
275
+ - Execute now → build executionContext, hand off to /workflow:execute
276
+ - Verify plan quality re-run P4 with stricter checks
277
+ - Just view → display full plan details, exit
278
+ - Modify → open specific task for editing, return to P4
519
279
 
520
280
  3. **executionContext handoff** (if "Execute now")
521
- ```
522
- executionMethod = config.json.execution.method || "agent"
523
- defaultExecutor = config.json.execution.default_executor || "gemini"
524
- executorAssignments = index.json.plan.executor_assignments || {}
525
-
526
- executionContext = {
527
- planObject: {
528
- plan: plan.json contents,
529
- tasks: { "TASK-001": task-001.json, ... }
530
- },
531
- explorations: [ exploration-*.json contents ],
532
- clarifications: clarificationContext,
533
- executionMethod: executionMethod,
534
- defaultExecutor: defaultExecutor,
535
- executorAssignments: executorAssignments,
536
- phaseIndex: index.json contents,
537
- specRef: spec-ref contents (if loaded)
281
+ ```json
282
+ {
283
+ "planObject": { "plan": "plan.json contents", "tasks": { "TASK-001": "..." } },
284
+ "explorations": ["exploration-*.json contents"],
285
+ "clarifications": "clarificationContext",
286
+ "executionMethod": "config.json.execution.method || 'agent'",
287
+ "defaultExecutor": "config.json.execution.default_executor || 'gemini'",
288
+ "executorAssignments": "index.json.plan.executor_assignments || {}",
289
+ "phaseIndex": "index.json contents",
290
+ "specRef": "spec-ref contents (if loaded)"
538
291
  }
539
-
540
- Hand off to /workflow:execute with executionContext in memory
541
292
  ```
293
+ Hand off to /workflow:execute with executionContext in memory.
542
294
 
543
295
  4. **Register artifact in state.json**
544
- ```
545
- Read .workflow/state.json
546
- // Find upstream analyze artifact
547
- upstream_analyze = state.json.artifacts
548
- .filter(a => a.type == "analyze" && a.path == CONTEXT_DIR relative path)
549
- .last() // most recent
550
-
551
- next_id = max(artifacts.filter(a => a.type == "plan").map(a => parseInt(a.id.replace("PLN-","")))) + 1
552
-
553
- artifact = {
554
- id: "PLN-{next_id padded to 3}",
555
- type: "plan",
556
- milestone: state.json.current_milestone,
557
- phase: PHASE_NUM,
558
- scope: scope,
559
- path: OUTPUT_DIR relative to .workflow/,
560
- status: "completed",
561
- depends_on: upstream_analyze?.id || null,
562
- harvested: false,
563
- created_at: plan_start_time,
564
- completed_at: now()
565
- }
566
-
567
- state.json.artifacts.push(artifact)
568
- state.json.last_updated = now()
569
- Write state.json (atomic: write tmp + rename)
570
- ```
296
+ - Find upstream analyze artifact by CONTEXT_DIR path
297
+ - Create artifact: `{ id: "PLN-{NNN}", type: "plan", milestone, phase, scope, path, status: "completed", depends_on, harvested: false, created_at, completed_at }`
298
+ - Append to `state.json.artifacts`, atomic write
571
299
 
572
300
  ---
573
301
 
@@ -575,6 +303,9 @@ ELSE:
575
303
 
576
304
  | Error | Action |
577
305
  |-------|--------|
306
+ | E001: No args and no roadmap | Provide phase number or topic, or create roadmap |
307
+ | E004: No plan found to revise | Use --dir to specify plan, or create plan first |
308
+ | E005: Plan directory not found (--check) | Check path, use --dir |
578
309
  | Phase directory not found | Abort with message: "Phase {phase} not found. Run /workflow:init first." |
579
310
  | No context.md | Warn, proceed with exploration only |
580
311
  | Exploration agent fails | Log error, continue with available explorations |
@@ -592,3 +323,73 @@ ELSE:
592
323
  | P3 complete | index.json.plan.* | Plan metadata |
593
324
  | P4 pass | index.json.updated_at | Current timestamp |
594
325
  | P5 "Execute now" | (handoff, no write) | executionContext in memory |
326
+
327
+ ---
328
+
329
+ ## Revise Mode (`--revise`)
330
+
331
+ Incrementally modify an existing plan without rebuilding from scratch.
332
+
333
+ ### Plan Discovery
334
+
335
+ - `--dir` specified → use directly
336
+ - Else → latest completed plan artifact for current phase from state.json
337
+ - Not found → ERROR E004
338
+
339
+ ### Execution Flow
340
+
341
+ 1. **Load existing plan**
342
+ - Read `plan.json` + all `.task/TASK-*.json` from PLAN_DIR
343
+ - Show current plan summary: task count, waves, status per task
344
+
345
+ 2. **Obtain revision instructions**
346
+ - If `--revise "instructions"` provided → parse as change directive
347
+ - If `--revise` without instructions → AskUserQuestion for what to change:
348
+ - Add/remove tasks
349
+ - Modify task scope, action, implementation
350
+ - Reorder waves or adjust dependencies
351
+ - Update convergence criteria
352
+ - Parse instructions into concrete changes
353
+
354
+ 3. **Apply targeted changes**
355
+ - Modify affected TASK files in-place
356
+ - If tasks added/removed: re-sequence task IDs, regenerate wave assignments
357
+ - Update plan.json summary (task count, wave structure)
358
+ - Preserve unmodified tasks completely
359
+
360
+ 4. **Re-run plan-checker (P4)**
361
+ - Validate modified plan with same checker as create mode
362
+ - Re-run collision detection against same-milestone plans
363
+ - Present check results for confirmation
364
+
365
+ 5. **Update artifact**
366
+ - Overwrite plan files in existing scratch directory
367
+ - Update artifact timestamp in state.json (no new artifact created)
368
+
369
+ ---
370
+
371
+ ## Check Mode (`--check`)
372
+
373
+ Read-only plan verification without modification.
374
+
375
+ ### Execution Flow
376
+
377
+ 1. **Load plan** — read plan.json + .task/TASK-*.json from `--check` path (ERROR E005 if not found), plus roadmap.md
378
+
379
+ 2. **Run checks** — plan-checker (task quality, convergence criteria), roadmap consistency, collision detection, dependency integrity
380
+
381
+ 3. **Produce check report**
382
+ ```
383
+ === PLAN CHECK ===
384
+ Plan: {plan_dir}/plan.json
385
+ Tasks: {total} ({completed} done, {pending} pending)
386
+ Checker: {PASS|WARN|FAIL} ({issues} issues)
387
+ Roadmap: {aligned|drift detected}
388
+ Collision: {clear|{N} overlaps}
389
+
390
+ Suggested actions:
391
+ /maestro-plan --revise "fix instructions"
392
+ /maestro-execute --dir {plan_dir}
393
+ ```
394
+
395
+ **No file modifications.** Pure verification + report.