maestro-flow 0.5.45 → 0.5.47

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 (310) hide show
  1. package/.agents/agents/ralph-executor.md +51 -6
  2. package/.agents/skills/domain-add/SKILL.md +9 -0
  3. package/.agents/skills/learn-decompose/SKILL.md +12 -0
  4. package/.agents/skills/learn-follow/SKILL.md +41 -0
  5. package/.agents/skills/learn-investigate/SKILL.md +14 -0
  6. package/.agents/skills/learn-second-opinion/SKILL.md +14 -0
  7. package/.agents/skills/maestro-amend/SKILL.md +11 -0
  8. package/.agents/skills/maestro-companion/SKILL.md +11 -0
  9. package/.agents/skills/maestro-composer/SKILL.md +11 -0
  10. package/.agents/skills/maestro-guard/SKILL.md +25 -0
  11. package/.agents/skills/maestro-init/SKILL.md +28 -0
  12. package/.agents/skills/maestro-overlay/SKILL.md +11 -0
  13. package/.agents/skills/maestro-player/SKILL.md +11 -0
  14. package/.agents/skills/maestro-quick/SKILL.md +29 -0
  15. package/.agents/skills/maestro-ralph-v2/SKILL.md +124 -61
  16. package/.agents/skills/maestro-swarm-workflow/SKILL.md +25 -0
  17. package/.agents/skills/maestro-tools-execute/SKILL.md +29 -0
  18. package/.agents/skills/maestro-tools-register/SKILL.md +29 -0
  19. package/.agents/skills/maestro-ui-codify/SKILL.md +11 -0
  20. package/.agents/skills/maestro-universal-workflow/SKILL.md +59 -0
  21. package/.agents/skills/maestro-update/SKILL.md +38 -0
  22. package/.agents/skills/manage-codebase-rebuild/SKILL.md +29 -0
  23. package/.agents/skills/manage-drift-realign/SKILL.md +12 -0
  24. package/.agents/skills/manage-harvest/SKILL.md +30 -6
  25. package/.agents/skills/manage-issue/SKILL.md +23 -0
  26. package/.agents/skills/manage-issue-discover/SKILL.md +28 -0
  27. package/.agents/skills/manage-kg-extractors/SKILL.md +27 -1
  28. package/.agents/skills/manage-knowhow/SKILL.md +26 -0
  29. package/.agents/skills/manage-knowhow-capture/SKILL.md +24 -0
  30. package/.agents/skills/manage-knowledge-audit/SKILL.md +13 -0
  31. package/.agents/skills/manage-status/SKILL.md +22 -0
  32. package/.agents/skills/manage-wiki/SKILL.md +28 -0
  33. package/.agents/skills/odyssey-debug/SKILL.md +338 -253
  34. package/.agents/skills/odyssey-improve/SKILL.md +417 -281
  35. package/.agents/skills/odyssey-planex/SKILL.md +536 -420
  36. package/.agents/skills/odyssey-review-test-fix/SKILL.md +386 -251
  37. package/.agents/skills/odyssey-ui/SKILL.md +382 -247
  38. package/.agents/skills/quality-auto-test/SKILL.md +12 -0
  39. package/.agents/skills/quality-debug/SKILL.md +11 -0
  40. package/.agents/skills/quality-refactor/SKILL.md +11 -0
  41. package/.agents/skills/quality-retrospective/SKILL.md +11 -0
  42. package/.agents/skills/quality-review/SKILL.md +11 -0
  43. package/.agents/skills/quality-sync/SKILL.md +10 -0
  44. package/.agents/skills/quality-test/SKILL.md +12 -0
  45. package/.agents/skills/security-audit/SKILL.md +11 -0
  46. package/.agents/skills/spec-add/SKILL.md +27 -0
  47. package/.agents/skills/spec-load/SKILL.md +25 -0
  48. package/.agents/skills/spec-remove/SKILL.md +26 -0
  49. package/.agents/skills/spec-setup/SKILL.md +30 -0
  50. package/.agy/agents/ralph-executor.md +53 -6
  51. package/.agy/skills/domain-add/SKILL.md +9 -0
  52. package/.agy/skills/learn-decompose/SKILL.md +12 -0
  53. package/.agy/skills/learn-follow/SKILL.md +41 -0
  54. package/.agy/skills/learn-investigate/SKILL.md +14 -0
  55. package/.agy/skills/learn-second-opinion/SKILL.md +14 -0
  56. package/.agy/skills/maestro-amend/SKILL.md +11 -0
  57. package/.agy/skills/maestro-companion/SKILL.md +11 -0
  58. package/.agy/skills/maestro-composer/SKILL.md +11 -0
  59. package/.agy/skills/maestro-guard/SKILL.md +25 -0
  60. package/.agy/skills/maestro-init/SKILL.md +28 -0
  61. package/.agy/skills/maestro-overlay/SKILL.md +11 -0
  62. package/.agy/skills/maestro-player/SKILL.md +11 -0
  63. package/.agy/skills/maestro-quick/SKILL.md +29 -0
  64. package/.agy/skills/maestro-ralph-v2/SKILL.md +123 -61
  65. package/.agy/skills/maestro-swarm-workflow/SKILL.md +25 -0
  66. package/.agy/skills/maestro-tools-execute/SKILL.md +29 -0
  67. package/.agy/skills/maestro-tools-register/SKILL.md +29 -0
  68. package/.agy/skills/maestro-ui-codify/SKILL.md +11 -0
  69. package/.agy/skills/maestro-universal-workflow/SKILL.md +59 -0
  70. package/.agy/skills/maestro-update/SKILL.md +38 -0
  71. package/.agy/skills/manage-codebase-rebuild/SKILL.md +29 -0
  72. package/.agy/skills/manage-drift-realign/SKILL.md +12 -0
  73. package/.agy/skills/manage-harvest/SKILL.md +30 -6
  74. package/.agy/skills/manage-issue/SKILL.md +23 -0
  75. package/.agy/skills/manage-issue-discover/SKILL.md +28 -0
  76. package/.agy/skills/manage-kg-extractors/SKILL.md +27 -1
  77. package/.agy/skills/manage-knowhow/SKILL.md +26 -0
  78. package/.agy/skills/manage-knowhow-capture/SKILL.md +24 -0
  79. package/.agy/skills/manage-knowledge-audit/SKILL.md +13 -0
  80. package/.agy/skills/manage-status/SKILL.md +22 -0
  81. package/.agy/skills/manage-wiki/SKILL.md +28 -0
  82. package/.agy/skills/odyssey-debug/SKILL.md +338 -253
  83. package/.agy/skills/odyssey-improve/SKILL.md +417 -281
  84. package/.agy/skills/odyssey-planex/SKILL.md +536 -420
  85. package/.agy/skills/odyssey-review-test-fix/SKILL.md +386 -251
  86. package/.agy/skills/odyssey-ui/SKILL.md +382 -247
  87. package/.agy/skills/quality-auto-test/SKILL.md +12 -0
  88. package/.agy/skills/quality-debug/SKILL.md +11 -0
  89. package/.agy/skills/quality-refactor/SKILL.md +11 -0
  90. package/.agy/skills/quality-retrospective/SKILL.md +11 -0
  91. package/.agy/skills/quality-review/SKILL.md +11 -0
  92. package/.agy/skills/quality-sync/SKILL.md +10 -0
  93. package/.agy/skills/quality-test/SKILL.md +12 -0
  94. package/.agy/skills/security-audit/SKILL.md +11 -0
  95. package/.agy/skills/spec-add/SKILL.md +27 -0
  96. package/.agy/skills/spec-load/SKILL.md +25 -0
  97. package/.agy/skills/spec-remove/SKILL.md +26 -0
  98. package/.agy/skills/spec-setup/SKILL.md +30 -0
  99. package/.claude/agents/ralph-executor.md +51 -6
  100. package/.claude/commands/domain-add.md +9 -0
  101. package/.claude/commands/learn-decompose.md +12 -0
  102. package/.claude/commands/learn-follow.md +41 -0
  103. package/.claude/commands/learn-investigate.md +14 -0
  104. package/.claude/commands/learn-second-opinion.md +14 -0
  105. package/.claude/commands/maestro-amend.md +11 -0
  106. package/.claude/commands/maestro-companion.md +11 -0
  107. package/.claude/commands/maestro-composer.md +11 -0
  108. package/.claude/commands/maestro-guard.md +25 -0
  109. package/.claude/commands/maestro-init.md +28 -0
  110. package/.claude/commands/maestro-overlay.md +11 -0
  111. package/.claude/commands/maestro-player.md +11 -0
  112. package/.claude/commands/maestro-quick.md +29 -0
  113. package/.claude/commands/maestro-ralph-v2.md +124 -61
  114. package/.claude/commands/maestro-swarm-workflow.md +25 -0
  115. package/.claude/commands/maestro-tools-execute.md +29 -0
  116. package/.claude/commands/maestro-tools-register.md +29 -0
  117. package/.claude/commands/maestro-ui-codify.md +11 -0
  118. package/.claude/commands/maestro-universal-workflow.md +59 -0
  119. package/.claude/commands/maestro-update.md +38 -0
  120. package/.claude/commands/manage-codebase-rebuild.md +29 -0
  121. package/.claude/commands/manage-drift-realign.md +12 -0
  122. package/.claude/commands/manage-harvest.md +30 -6
  123. package/.claude/commands/manage-issue-discover.md +28 -0
  124. package/.claude/commands/manage-issue.md +23 -0
  125. package/.claude/commands/manage-kg-extractors.md +27 -1
  126. package/.claude/commands/manage-knowhow-capture.md +24 -0
  127. package/.claude/commands/manage-knowhow.md +26 -0
  128. package/.claude/commands/manage-knowledge-audit.md +13 -0
  129. package/.claude/commands/manage-status.md +22 -0
  130. package/.claude/commands/manage-wiki.md +28 -0
  131. package/.claude/commands/odyssey-debug.md +352 -267
  132. package/.claude/commands/odyssey-improve.md +431 -295
  133. package/.claude/commands/odyssey-planex.md +550 -434
  134. package/.claude/commands/odyssey-review-test-fix.md +400 -265
  135. package/.claude/commands/odyssey-ui.md +396 -261
  136. package/.claude/commands/quality-auto-test.md +12 -0
  137. package/.claude/commands/quality-debug.md +11 -0
  138. package/.claude/commands/quality-refactor.md +11 -0
  139. package/.claude/commands/quality-retrospective.md +11 -0
  140. package/.claude/commands/quality-review.md +11 -0
  141. package/.claude/commands/quality-sync.md +10 -0
  142. package/.claude/commands/quality-test.md +12 -0
  143. package/.claude/commands/security-audit.md +11 -0
  144. package/.claude/commands/spec-add.md +27 -0
  145. package/.claude/commands/spec-load.md +25 -0
  146. package/.claude/commands/spec-remove.md +26 -0
  147. package/.claude/commands/spec-setup.md +30 -0
  148. package/.codex/skills/codify-to-knowhow/SKILL.md +2 -0
  149. package/.codex/skills/domain-add/SKILL.md +26 -0
  150. package/.codex/skills/domain-discover/SKILL.md +46 -0
  151. package/.codex/skills/domain-list/SKILL.md +29 -0
  152. package/.codex/skills/learn-decompose/SKILL.md +2 -0
  153. package/.codex/skills/learn-follow/SKILL.md +34 -0
  154. package/.codex/skills/learn-investigate/SKILL.md +33 -0
  155. package/.codex/skills/learn-retro/SKILL.md +33 -0
  156. package/.codex/skills/learn-second-opinion/SKILL.md +30 -0
  157. package/.codex/skills/maestro-amend/SKILL.md +11 -0
  158. package/.codex/skills/maestro-companion/SKILL.md +11 -0
  159. package/.codex/skills/maestro-composer/SKILL.md +11 -0
  160. package/.codex/skills/maestro-guard/SKILL.md +25 -0
  161. package/.codex/skills/maestro-help/SKILL.md +2 -0
  162. package/.codex/skills/maestro-init/SKILL.md +16 -0
  163. package/.codex/skills/maestro-learn/SKILL.md +2 -0
  164. package/.codex/skills/maestro-overlay/SKILL.md +1 -0
  165. package/.codex/skills/maestro-player/SKILL.md +2 -0
  166. package/.codex/skills/maestro-quick/SKILL.md +17 -0
  167. package/.codex/skills/maestro-tools-execute/SKILL.md +31 -0
  168. package/.codex/skills/maestro-tools-register/SKILL.md +29 -0
  169. package/.codex/skills/maestro-ui-codify/SKILL.md +2 -0
  170. package/.codex/skills/maestro-update/SKILL.md +38 -0
  171. package/.codex/skills/manage-codebase-rebuild/SKILL.md +2 -0
  172. package/.codex/skills/manage-codebase-refresh/SKILL.md +11 -0
  173. package/.codex/skills/manage-drift-realign/SKILL.md +2 -0
  174. package/.codex/skills/manage-harvest/SKILL.md +30 -8
  175. package/.codex/skills/manage-issue/SKILL.md +24 -0
  176. package/.codex/skills/manage-issue-discover/SKILL.md +2 -0
  177. package/.codex/skills/manage-knowhow/SKILL.md +26 -0
  178. package/.codex/skills/manage-knowhow-capture/SKILL.md +23 -0
  179. package/.codex/skills/manage-learn/SKILL.md +2 -0
  180. package/.codex/skills/manage-status/SKILL.md +22 -0
  181. package/.codex/skills/manage-wiki/SKILL.md +28 -0
  182. package/.codex/skills/odyssey-debug/SKILL.md +44 -0
  183. package/.codex/skills/odyssey-improve/SKILL.md +49 -0
  184. package/.codex/skills/odyssey-planex/SKILL.md +44 -0
  185. package/.codex/skills/odyssey-review-test-fix/SKILL.md +48 -0
  186. package/.codex/skills/odyssey-ui/SKILL.md +49 -0
  187. package/.codex/skills/quality-auto-test/SKILL.md +2 -0
  188. package/.codex/skills/quality-debug/SKILL.md +2 -0
  189. package/.codex/skills/quality-refactor/SKILL.md +2 -0
  190. package/.codex/skills/quality-retrospective/SKILL.md +2 -0
  191. package/.codex/skills/quality-review/SKILL.md +2 -0
  192. package/.codex/skills/quality-sync/SKILL.md +24 -0
  193. package/.codex/skills/quality-test/SKILL.md +2 -0
  194. package/.codex/skills/security-audit/SKILL.md +30 -0
  195. package/.codex/skills/spec-add/SKILL.md +28 -0
  196. package/.codex/skills/spec-load/SKILL.md +26 -0
  197. package/.codex/skills/spec-map/SKILL.md +1 -0
  198. package/.codex/skills/spec-remove/SKILL.md +28 -0
  199. package/.codex/skills/spec-setup/SKILL.md +28 -0
  200. package/.codex/skills/wiki-connect/SKILL.md +11 -0
  201. package/.codex/skills/wiki-digest/SKILL.md +11 -0
  202. package/dashboard/dist-server/dashboard/src/server/agents/api-explore-adapter.js +3 -1
  203. package/dashboard/dist-server/dashboard/src/server/agents/api-explore-adapter.js.map +1 -1
  204. package/dashboard/dist-server/dashboard/src/server/wiki/embedding.d.ts +5 -0
  205. package/dashboard/dist-server/dashboard/src/server/wiki/embedding.js +28 -4
  206. package/dashboard/dist-server/dashboard/src/server/wiki/embedding.js.map +1 -1
  207. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +4 -4
  208. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
  209. package/dashboard/dist-server/src/graph/kg/db/queries.d.ts +10 -0
  210. package/dashboard/dist-server/src/graph/kg/db/queries.js +176 -38
  211. package/dashboard/dist-server/src/graph/kg/db/queries.js.map +1 -1
  212. package/dashboard/dist-server/src/graph/kg/extraction/code/svelte-extractor.js +1 -1
  213. package/dashboard/dist-server/src/graph/kg/extraction/code/svelte-extractor.js.map +1 -1
  214. package/dashboard/dist-server/src/graph/kg/extraction/code/tree-sitter.js +2 -2
  215. package/dashboard/dist-server/src/graph/kg/extraction/code/tree-sitter.js.map +1 -1
  216. package/dashboard/dist-server/src/graph/kg/extraction/code/vue-extractor.js +1 -1
  217. package/dashboard/dist-server/src/graph/kg/extraction/code/vue-extractor.js.map +1 -1
  218. package/dashboard/dist-server/src/graph/kg/extraction/code/wasm-stability.js +1 -1
  219. package/dashboard/dist-server/src/graph/kg/extraction/code/wasm-stability.js.map +1 -1
  220. package/dashboard/dist-server/src/graph/kg/extraction/orchestrator.js +20 -12
  221. package/dashboard/dist-server/src/graph/kg/extraction/orchestrator.js.map +1 -1
  222. package/dashboard/dist-server/src/graph/kg/surface/hook-injector.js +1 -1
  223. package/dashboard/dist-server/src/graph/kg/surface/hook-injector.js.map +1 -1
  224. package/dashboard/dist-server/src/hooks/keyword-spec-injector.js +35 -0
  225. package/dashboard/dist-server/src/hooks/keyword-spec-injector.js.map +1 -1
  226. package/dashboard/dist-server/src/hooks/spec-analytics.d.ts +1 -0
  227. package/dashboard/dist-server/src/hooks/spec-analytics.js.map +1 -1
  228. package/dashboard/dist-server/src/hooks/wiki-search-bridge.d.ts +32 -0
  229. package/dashboard/dist-server/src/hooks/wiki-search-bridge.js +71 -0
  230. package/dashboard/dist-server/src/hooks/wiki-search-bridge.js.map +1 -0
  231. package/dist/src/agents/api-explore/agent-loop.d.ts +15 -2
  232. package/dist/src/agents/api-explore/agent-loop.d.ts.map +1 -1
  233. package/dist/src/agents/api-explore/agent-loop.js +6 -5
  234. package/dist/src/agents/api-explore/agent-loop.js.map +1 -1
  235. package/dist/src/agents/api-explore/config.d.ts +67 -1
  236. package/dist/src/agents/api-explore/config.d.ts.map +1 -1
  237. package/dist/src/agents/api-explore/config.js +50 -15
  238. package/dist/src/agents/api-explore/config.js.map +1 -1
  239. package/dist/src/agents/api-explore/index.js +4 -4
  240. package/dist/src/agents/api-explore/index.js.map +1 -1
  241. package/dist/src/agents/api-explore/llm.d.ts +7 -1
  242. package/dist/src/agents/api-explore/llm.d.ts.map +1 -1
  243. package/dist/src/agents/api-explore/llm.js +26 -12
  244. package/dist/src/agents/api-explore/llm.js.map +1 -1
  245. package/dist/src/agents/api-explore/moa-cache.d.ts +12 -0
  246. package/dist/src/agents/api-explore/moa-cache.d.ts.map +1 -0
  247. package/dist/src/agents/api-explore/moa-cache.js +50 -0
  248. package/dist/src/agents/api-explore/moa-cache.js.map +1 -0
  249. package/dist/src/agents/api-explore/moa-loop.d.ts +49 -0
  250. package/dist/src/agents/api-explore/moa-loop.d.ts.map +1 -0
  251. package/dist/src/agents/api-explore/moa-loop.js +43 -0
  252. package/dist/src/agents/api-explore/moa-loop.js.map +1 -0
  253. package/dist/src/agents/api-explore/moa-pipeline.d.ts +43 -0
  254. package/dist/src/agents/api-explore/moa-pipeline.d.ts.map +1 -0
  255. package/dist/src/agents/api-explore/moa-pipeline.js +276 -0
  256. package/dist/src/agents/api-explore/moa-pipeline.js.map +1 -0
  257. package/dist/src/agents/api-explore/runner.d.ts +3 -0
  258. package/dist/src/agents/api-explore/runner.d.ts.map +1 -1
  259. package/dist/src/agents/api-explore/runner.js +39 -18
  260. package/dist/src/agents/api-explore/runner.js.map +1 -1
  261. package/dist/src/agents/api-explore/session.d.ts +15 -0
  262. package/dist/src/agents/api-explore/session.d.ts.map +1 -1
  263. package/dist/src/agents/api-explore/session.js.map +1 -1
  264. package/dist/src/cli.js +1 -0
  265. package/dist/src/cli.js.map +1 -1
  266. package/dist/src/commands/explore.d.ts.map +1 -1
  267. package/dist/src/commands/explore.js +34 -2
  268. package/dist/src/commands/explore.js.map +1 -1
  269. package/dist/src/commands/install.js +7 -28
  270. package/dist/src/commands/install.js.map +1 -1
  271. package/dist/src/commands/moa.d.ts +3 -0
  272. package/dist/src/commands/moa.d.ts.map +1 -0
  273. package/dist/src/commands/moa.js +217 -0
  274. package/dist/src/commands/moa.js.map +1 -0
  275. package/dist/src/commands/search.d.ts.map +1 -1
  276. package/dist/src/commands/search.js +2 -0
  277. package/dist/src/commands/search.js.map +1 -1
  278. package/dist/src/graph/kg/db/queries.d.ts +10 -0
  279. package/dist/src/graph/kg/db/queries.d.ts.map +1 -1
  280. package/dist/src/graph/kg/db/queries.js +176 -38
  281. package/dist/src/graph/kg/db/queries.js.map +1 -1
  282. package/dist/src/graph/kg/extraction/code/svelte-extractor.js +1 -1
  283. package/dist/src/graph/kg/extraction/code/svelte-extractor.js.map +1 -1
  284. package/dist/src/graph/kg/extraction/code/tree-sitter.js +2 -2
  285. package/dist/src/graph/kg/extraction/code/tree-sitter.js.map +1 -1
  286. package/dist/src/graph/kg/extraction/code/vue-extractor.js +1 -1
  287. package/dist/src/graph/kg/extraction/code/vue-extractor.js.map +1 -1
  288. package/dist/src/graph/kg/extraction/code/wasm-stability.js +1 -1
  289. package/dist/src/graph/kg/extraction/code/wasm-stability.js.map +1 -1
  290. package/dist/src/graph/kg/extraction/orchestrator.d.ts.map +1 -1
  291. package/dist/src/graph/kg/extraction/orchestrator.js +20 -12
  292. package/dist/src/graph/kg/extraction/orchestrator.js.map +1 -1
  293. package/dist/src/graph/kg/surface/hook-injector.js +1 -1
  294. package/dist/src/graph/kg/surface/hook-injector.js.map +1 -1
  295. package/dist/src/hooks/keyword-spec-injector.d.ts.map +1 -1
  296. package/dist/src/hooks/keyword-spec-injector.js +35 -0
  297. package/dist/src/hooks/keyword-spec-injector.js.map +1 -1
  298. package/dist/src/hooks/plugins/explore-plugin.d.ts.map +1 -1
  299. package/dist/src/hooks/plugins/explore-plugin.js +3 -2
  300. package/dist/src/hooks/plugins/explore-plugin.js.map +1 -1
  301. package/dist/src/hooks/spec-analytics.d.ts +1 -0
  302. package/dist/src/hooks/spec-analytics.d.ts.map +1 -1
  303. package/dist/src/hooks/spec-analytics.js.map +1 -1
  304. package/dist/src/hooks/wiki-search-bridge.d.ts +33 -0
  305. package/dist/src/hooks/wiki-search-bridge.d.ts.map +1 -0
  306. package/dist/src/hooks/wiki-search-bridge.js +71 -0
  307. package/dist/src/hooks/wiki-search-bridge.js.map +1 -0
  308. package/dist/src/utils/update-notices.js +12 -0
  309. package/dist/src/utils/update-notices.js.map +1 -1
  310. package/package.json +1 -1
@@ -12,6 +12,7 @@ allowed-tools:
12
12
  - invoke_skill
13
13
  - ask_user
14
14
  - delegate_subagent
15
+ - send_message
15
16
  ---
16
17
  <!-- Open-standard mirror generated by scripts/build-agents-standard.mjs — do not edit; re-run after editing .claude/ source. -->
17
18
 
@@ -44,13 +45,16 @@ Remaining → intent (amend_mode 时为 change_request)
44
45
  </context>
45
46
 
46
47
  <invariants>
47
- 1. **Ralph-v2 owns the full loop** — locate step → resolve args → load context → dispatch agent → extract signals → drift → complete,全部在本命令内完成
48
- 2. **One agent per step** — 每个执行 step 派发一个 executor agent,agent 执行完返回,主流程解析结果后决定下一步
49
- 3. **Agent is a thin wrapper** — executor agent 调 `ralph next` 获取 skill prompt 并执行,返回输出;arg resolution、context loading、signal extraction、drift analysis、ralph complete 均由主流程完成
50
- 4. **Synchronous dispatch** — delegate_subagent() 调用是同步的(等待返回),不需要 STOP/callback 模式
48
+ 1. **Ralph-v2 owns the full loop** — locate step → resolve args → load context → dispatch agent → wait for send_message → receive → extract signals → drift → complete,全部在本命令内完成
49
+ 2. **One agent per step** — 每个执行 step 派发一个 named executor agent,agent 通过 send_message 回传结果,主流程解析结果后决定下一步
50
+ 3. **Agent is a thin wrapper** — executor agent 调 `ralph next` 获取 skill prompt 并执行,通过 send_message 回传输出;arg resolution、context loading、signal extraction、drift analysis、ralph complete 均由主流程完成
51
+ 4. **Dual dispatch model** — 执行 Agent 与评估 Agent 使用不同派发模式:
52
+ - **执行 Agent**(A_STEP_DISPATCH):`delegate_subagent({name: "exe-xxx"})` — named mailbox teammate,支持内部多 agent 编排,通过 `send_message({to: "main"})` 回传结果
53
+ - **评估 Agent**(A_AGENT_EVALUATE / A_AGENT_GOAL_AUDIT / A_AGENT_REGROUND):`delegate_subagent()` 不传 `name` — 同步阻塞,直接返回结果(评估 agent 只读不需要多 agent)
54
+ - `agent_exec_name` 既用于 display/日志,也作为执行 Agent 的 `name` 参数
51
55
  5. **主流程调 `ralph complete`** — 每个 step 完成后由主流程调 `maestro ralph complete`,非 agent 上报
52
- 6. **Decision evaluation inline** — decision 节点不 handoff,通过 `delegate_subagent()` 启动分析 Agent 在本循环内评估
53
- 7. **No CLI delegation** — 本命令不使用 `maestro delegate`;执行和评估均通过 delegate_subagent() 完成
56
+ 6. **Decision evaluation inline** — decision 节点不 handoff,通过 Agent CLI delegate 在本循环内评估
57
+ 7. **CLI delegation for evaluation only** — CLI delegate(`maestro delegate --mode analysis`)仅限评估环节;执行仍通过 executor Agent 完成
54
58
  8. **Decision delegates read-only** — 评估 Agent 通过 prompt 中的 CONSTRAINTS 约束为只读
55
59
  9. **执行 step 通过 `maestro ralph next` CLI 加载并内联执行**(由 execute Agent 完成)
56
60
  10. **status.json 是唯一真源** — 不生成 markdown 清单或侧文件
@@ -87,7 +91,8 @@ S_CONFIRM — 用户确认
87
91
 
88
92
  S_STEP_LOCATE — 找下一个 pending step PERSIST: —
89
93
  S_STEP_RESOLVE — 解析占位符 + 丰富参数 PERSIST: step.args (enriched)
90
- S_STEP_DISPATCH — 组装上下文 + 派发 executor agent 执行单步 PERSIST: step.agent_exec_name, step.status = "running"
94
+ S_STEP_DISPATCH — 组装上下文 + 派发 named executor agent PERSIST: step.agent_exec_name, step.status = "running"
95
+ S_STEP_WAIT_MSG — 等待 executor 的 send_message 回传 PERSIST: —
91
96
  S_STEP_ANALYZE — 提取信号 + 组装 completion 参数 PERSIST: —
92
97
  S_STEP_DRIFT — 产物 vs 目标偏离分析 PERSIST: step.drift_score
93
98
  S_STEP_COMPLETE — 调 `ralph complete` 上报 PERSIST: step.completion_*
@@ -142,8 +147,12 @@ S_STEP_RESOLVE:
142
147
  → S_STEP_DISPATCH DO: A_STEP_RESOLVE_ARGS
143
148
 
144
149
  S_STEP_DISPATCH:
145
- S_STEP_ANALYZE WHEN: agent returned output DO: A_STEP_DISPATCH
146
- → S_HANDLE_FAIL WHEN: agent returned error/null DO: A_STEP_DISPATCH
150
+ S_STEP_WAIT_MSG WHEN: executor dispatched DO: A_STEP_DISPATCH
151
+
152
+ S_STEP_WAIT_MSG:
153
+ → S_STEP_ANALYZE WHEN: received agent-message with EXECUTOR_OUTPUT DO: A_STEP_RECEIVE
154
+ → S_HANDLE_FAIL WHEN: received agent-message with status=ERROR DO: A_STEP_RECEIVE
155
+ → S_HANDLE_FAIL WHEN: executor idle without send_message(崩溃检测) DO: mark BLOCKED
147
156
 
148
157
  S_STEP_ANALYZE:
149
158
  → S_STEP_DRIFT WHEN: STATUS == DONE|DONE_WITH_CONCERNS DO: A_STEP_EXTRACT
@@ -323,14 +332,17 @@ Execution criteria: {session.execution_criteria joined by '; '}
323
332
  | debug | `dbg` |
324
333
  | Other | `run` |
325
334
 
326
- **4. Dispatch:**
335
+ **4. Dispatch(named mailbox executor):**
336
+
337
+ > 执行 Agent 使用 `name` 参数派发为 named mailbox teammate,支持内部多 agent 编排。executor 通过 `send_message({to: "main"})` 回传执行结果。`resolved_agent_name` 同时用于 display 和 Agent `name` 参数。
327
338
 
328
339
  ```
329
340
  delegate_subagent({
330
- subagent_type: "ralph-executor",
331
341
  name: "{resolved_agent_name}",
342
+ subagent_type: "ralph-executor",
332
343
  description: "执行 step {index}: {step.skill}",
333
344
  prompt: `Session: {session_id}
345
+ Agent name: {resolved_agent_name}
334
346
 
335
347
  {goal_context 块,仅 protocol < 2 时}
336
348
 
@@ -339,11 +351,24 @@ delegate_subagent({
339
351
  })
340
352
  ```
341
353
 
342
- Agent 内部调 `maestro ralph next --session {session_id}` 获取 skill prompt 并执行。
343
-
344
354
  5. Write `step.agent_exec_name` to status.json
345
- 6. Display: `[{index}/{total}] ⟶ {step.skill} → Agent:{name}`
346
- 7. Agent 同步返回 `agent_output` = 返回文本;返回 null STATUS=BLOCKED
355
+ 6. Display: `[{index}/{total}] ⟶ {step.skill} → {resolved_agent_name}`
356
+ 7. delegate_subagent() 立即返回(named teammate 异步启动)→ 进入 S_STEP_WAIT_MSG 等待 executor 的 send_message
357
+
358
+ ### A_STEP_RECEIVE
359
+
360
+ 从 executor 的 `agent-message` 中提取执行输出。
361
+
362
+ 1. 接收到 `<agent-message from="{resolved_agent_name}">` 后,提取 message 内容
363
+ 2. 解析 `EXECUTOR_OUTPUT` 格式:
364
+ - `status: DONE` → agent_output = message 内容,继续 S_STEP_ANALYZE
365
+ - `status: DONE_WITH_CONCERNS` → agent_output = message 内容,继续 S_STEP_ANALYZE
366
+ - `status: ERROR` → STATUS=BLOCKED,转 S_HANDLE_FAIL
367
+ 3. idle_notification 处理(区分正常等待与崩溃):
368
+ - 首次收到 `idle_notification`:executor 可能在等待 worker 回传,正常现象,继续等待
369
+ - 连续收到 2 次 `idle_notification` 且中间无 `agent-message`:向 executor 发送 `send_message({to: "{resolved_agent_name}", message: "请回报执行状态"})` 询问
370
+ - 询问后仍只收到 `idle_notification` 无 `agent-message`:STATUS=BLOCKED,转 S_HANDLE_FAIL
371
+ 4. `agent_output` = 提取的 message 内容
347
372
 
348
373
  ### A_STEP_EXTRACT
349
374
 
@@ -472,10 +497,12 @@ Agent 内部调 `maestro ralph next --session {session_id}` 获取 skill prompt
472
497
 
473
498
  ### A_AGENT_EVALUATE
474
499
 
475
- 通过 Agent 在本循环内评估质量门。
500
+ 通过 Agent 和/或 CLI delegate 评估质量门。评估模式由 `step.evaluate_via` 决定。
501
+
502
+ **1. Common setup:**
476
503
 
477
504
  1. Resolve artifact dir: `.workflow/scratch/{artifact.path}/` with fallback glob
478
- 2. Parse decision metadata: `{ decision, retry_count, max_retries }`
505
+ 2. Parse decision metadata: `{ decision, retry_count, max_retries, evaluate_via }`
479
506
  3. Map result files:
480
507
 
481
508
  | Decision | Files |
@@ -486,33 +513,65 @@ Agent 内部调 `maestro ralph next --session {session_id}` 获取 skill prompt
486
513
  | post-test | uat.md, .tests/test-results.json |
487
514
  | post-frontend-verify | e2e-results.json |
488
515
 
489
- 4. Dispatch evaluation Agent:
490
- ```
491
- delegate_subagent({
492
- name: "eval-{decision}-{timestamp}",
493
- description: "评估 {decision} 质量门",
494
- prompt: "PURPOSE: 评估 {decision} 质量门结果
495
- TASK: 读取以下结果文件 | 分析状态 | 评估严重性 | 给出建议
496
- FILES: {result_file_paths}
497
- SESSION: {session_dir}/status.json
498
- EXPECTED: 输出以下格式:
499
- ---VERDICT---
500
- STATUS: PASS|FAIL|PARTIAL|BLOCKED
501
- REASON: <一句话原因>
502
- GAP_SUMMARY: <差距摘要>
503
- CONFIDENCE: high|medium|low
504
- CONFIDENCE_SCORE: 0-100
505
- WEAKEST_DIMENSION: <最弱维度>
506
- ---END---
507
- CONSTRAINTS: 只评估不修改文件 | 置信度<60%倾向 fix | retry {n}/{max} 达上限必须 escalate"
508
- })
509
- ```
510
- 5. On return: parse `---VERDICT---` block — STATUS must match strict enum `PASS|FAIL|PARTIAL|BLOCKED`; parse failure → fallback STATUS="fix", `parse_failed: true`, `confidence_score: 0` (invariant 18)
516
+ 4. `evaluate_via` 默认值:`"agent"`(未设置时)
517
+
518
+ **2. Dispatch by mode:**
519
+
520
+ **Mode: `agent`(默认)** 同步 Agent 评估:
521
+
522
+ ```
523
+ delegate_subagent({
524
+ description: "评估 {decision} 质量门(同步评估 Agent,不传 name)",
525
+ prompt: "PURPOSE: 评估 {decision} 质量门结果
526
+ TASK: 读取以下结果文件 | 分析状态 | 评估严重性 | 给出建议
527
+ FILES: {result_file_paths}
528
+ SESSION: {session_dir}/status.json
529
+ EXPECTED: 输出以下格式:
530
+ ---VERDICT---
531
+ STATUS: PASS|FAIL|PARTIAL|BLOCKED
532
+ REASON: <一句话原因>
533
+ GAP_SUMMARY: <差距摘要>
534
+ CONFIDENCE: high|medium|low
535
+ CONFIDENCE_SCORE: 0-100
536
+ WEAKEST_DIMENSION: <最弱维度>
537
+ ---END---
538
+ CONSTRAINTS: 只评估不修改文件 | 置信度<60%倾向 fix | retry {n}/{max} 达上限必须 escalate"
539
+ })
540
+ ```
541
+
542
+ **Mode: `cli`** — CLI delegate 评估(异步后台):
543
+
544
+ ```
545
+ shell({
546
+ command: `maestro delegate "PURPOSE: 评估 ${decision} 质量门结果\nTASK: 读取 ${result_file_paths} | 分析状态 | 评估严重性\nEXPECTED: ---VERDICT--- 格式(STATUS/REASON/GAP_SUMMARY/CONFIDENCE_SCORE)\nCONSTRAINTS: 只评估不修改文件" --mode analysis --rule analysis-review-code-quality`,
547
+ run_in_background: true
548
+ })
549
+ ```
550
+ 等待 delegate 完成 → `maestro delegate output {exec_id}` 获取结果 → 解析 `---VERDICT---`
551
+
552
+ **Mode: `dual`** — Agent + CLI 并行评估,交叉验证:
553
+
554
+ 1. 先派发 CLI delegate(`run_in_background: true`)
555
+ 2. 同时派发同步 Agent(阻塞等待)
556
+ 3. Agent 返回后,检查 CLI delegate 状态(`maestro delegate status {exec_id}`)
557
+ 4. 合并裁决:
558
+
559
+ | Agent 结果 | CLI 结果 | 合并策略 |
560
+ |-----------|---------|---------|
561
+ | 两者一致 | — | 采用共识,confidence_score 取较高值 |
562
+ | Agent=PASS, CLI=FAIL | — | 降级为 PARTIAL,confidence_score 取平均值 |
563
+ | Agent=FAIL, CLI=PASS | — | 维持 FAIL(保守策略) |
564
+ | CLI 未返回 | — | 使用 Agent 结果,标 `"cli_pending": true` |
565
+
566
+ **3. Verdict parse + adjustment(所有模式通用):**
567
+
568
+ 5. Parse `---VERDICT---` block — STATUS must match strict enum `PASS|FAIL|PARTIAL|BLOCKED`; parse failure → fallback STATUS="fix", `parse_failed: true`, `confidence_score: 0` (invariant 18)
511
569
  6. Confidence adjustment: <60 + proceed → fix; >95 + fix + retry>0 → suggest proceed
512
570
  7. **Decision log**: Append to `{session_dir}/decisions.ndjson`:
513
571
  ```json
514
572
  { "id": "DEC-{timestamp}", "timestamp": "{ISO}", "source": "ralph-v2",
515
573
  "node_id": "{step.decision}", "type": "quality-gate",
574
+ "evaluate_via": "{mode}", "cli_exec_id": "{exec_id|null}",
516
575
  "verdict": "{adjusted_verdict}", "confidence_score": {N},
517
576
  "parse_failed": false,
518
577
  "close_call": {N>=50 && N<=70}, "summary": "{REASON}" }
@@ -520,14 +579,13 @@ Agent 内部调 `maestro ralph next --session {session_id}` 获取 skill prompt
520
579
 
521
580
  ### A_AGENT_GOAL_AUDIT
522
581
 
523
- 通过 Agent 审计子目标完成情况。
582
+ 通过 Agent 和/或 CLI delegate 审计子目标完成情况。支持 `evaluate_via` 三种模式(同 A_AGENT_EVALUATE)。
524
583
 
525
584
  1. Read `session.task_decomposition` from status.json
526
- 2. Dispatch audit Agent:
585
+ 2. Dispatch audit(按 `evaluate_via` 模式,默认 `agent`):
527
586
  ```
528
587
  delegate_subagent({
529
- name: "goal-audit-{timestamp}",
530
- description: "审计子目标完成情况",
588
+ description: "审计子目标完成情况(同步评估 Agent,不传 name)",
531
589
  prompt: "PURPOSE: 审计未完成子目标,判定 met / unmet
532
590
  TASK:
533
591
  1. 读取 {session_dir}/status.json 中 task_decomposition 的 status!=done 子目标
@@ -551,20 +609,19 @@ Agent 内部调 `maestro ralph next --session {session_id}` 获取 skill prompt
551
609
  })
552
610
  ```
553
611
  3. On return: parse verdict, update task_decomposition status
554
- 4. Append `{session_dir}/decisions.ndjson`:`{ "type": "goal-gate", "unmet_count": N, "unmet_ids": [...] }`
612
+ 4. Append `{session_dir}/decisions.ndjson`:`{ "type": "goal-gate", "evaluate_via": "{mode}", "unmet_count": N, "unmet_ids": [...] }`
555
613
  5. Verdict routing: `all_met` + `INTENT_ALIGNED=true` → A_APPLY_GOAL_DONE;`all_met` + `INTENT_ALIGNED=false` → A_REGROUND_HALT;`has_unmet` → A_APPLY_GOAL_FIX
556
614
  GUARD: retry_count >= max_retries AND still unmet → A_APPLY_ESCALATE
557
615
 
558
616
  ### A_AGENT_REGROUND
559
617
 
560
- 通过 Agent 执行意图保真检查。
618
+ 通过 Agent 和/或 CLI delegate 执行意图保真检查。支持 `evaluate_via` 三种模式(同 A_AGENT_EVALUATE)。
561
619
 
562
620
  1. Read status.json:intent, boundary_contract, completed steps, done goals
563
- 2. Dispatch reground Agent:
621
+ 2. Dispatch reground(按 `evaluate_via` 模式,默认 `agent`):
564
622
  ```
565
623
  delegate_subagent({
566
- name: "reground-{timestamp}",
567
- description: "意图保真检查",
624
+ description: "意图保真检查(同步评估 Agent,不传 name)",
568
625
  prompt: "PURPOSE: 意图保真检查 — 对照 intent 验证累积执行是否漂移
569
626
  TASK:
570
627
  1. 读取 intent + boundary_contract.definition_of_done
@@ -663,8 +720,7 @@ Agent 内部调 `maestro ralph next --session {session_id}` 获取 skill prompt
663
720
  **Phase 3 Agent prompt:**
664
721
  ```
665
722
  delegate_subagent({
666
- name: "amend-grill-{timestamp}",
667
- description: "Amend impact analysis",
723
+ description: "Amend impact analysis(同步评估 Agent,不传 name)",
668
724
  prompt: "PURPOSE: 评估目标修改对 running session 的影响
669
725
  TASK:
670
726
  1. 读取 {session_dir}/status.json 的 task_decomposition + boundary_contract + 已完成 steps
@@ -695,7 +751,10 @@ GUARD: 已完成(`status: "done"`)的目标不可 supersede(skip + warn)
695
751
 
696
752
  - **A_RETRY**: `shell("maestro ralph retry {index}")` — CLI 设 `step.retried = true`, `step.status = "pending"`, 清 `active_step_index`
697
753
  - **A_PAUSE_SESSION**: `ralph complete N --status BLOCKED --reason "..."` — CLI 写 `session.status = "paused"`
698
- - **A_COMPLETE_SESSION**: 校验所有 step `completion_confirmed == true` + `task_decomposition_all_done == true`(若存在),通过后写 `session.status = "completed"`
754
+ - **A_COMPLETE_SESSION**: 校验所有 step `completion_confirmed == true` + `task_decomposition_all_done == true`(若存在),通过后写 `session.status = "completed"`。完成后向所有 idle executor 发送 shutdown_request 清理:
755
+ ```
756
+ 遍历 steps[].agent_exec_name → send_message({to: name, message: {type: "shutdown_request"}})
757
+ ```
699
758
 
700
759
  </actions>
701
760
 
@@ -762,6 +821,7 @@ Build rules 0-14 全部适用,包括 spec-setup 预检(rule 0.5)、grill a
762
821
  "stage": "",
763
822
  "scope": null,
764
823
  "decision": null,
824
+ "evaluate_via": "agent|cli|dual",
765
825
  "retry_count": 0,
766
826
  "max_retries": 2,
767
827
  "command_scope": "global|project|missing|null",
@@ -826,24 +886,27 @@ E001–E006, W001–W004 适用。Agent 新增:
826
886
 
827
887
  ### Success Criteria
828
888
 
829
- - [ ] ralph-v2 owns full step loop: locate → resolve → dispatch → extract → drift → complete → next
830
- - [ ] One agent per step — `delegate_subagent({ subagent_type: "ralph-executor" })` 每步派发一个
831
- - [ ] Agent 内调 `maestro ralph next` 获取 skill prompt 并执行,返回执行输出
889
+ - [ ] ralph-v2 owns full step loop: locate → resolve → dispatch → wait → receive → extract → drift → complete → next
890
+ - [ ] One agent per step — `delegate_subagent({ name, subagent_type: "ralph-executor" })` 每步派发一个 named executor
891
+ - [ ] Executor 内调 `maestro ralph next` 获取 skill prompt 并执行,支持内部多 agent 编排
892
+ - [ ] Executor 通过 `send_message({to: "main"})` 回传 `EXECUTOR_OUTPUT` 格式结果
832
893
  - [ ] 主流程调 `maestro ralph complete` 上报(非 agent 上报)
833
894
  - [ ] 主流程负责 arg resolution、context loading、signal extraction、drift analysis
834
- - [ ] Agent 返回执行输出文本,主流程从中提取信号和状态
835
- - [ ] Agent 崩溃(返回 null)→ STATUS=BLOCKED,转 S_HANDLE_FAIL
836
- - [ ] STOP/callback 模式 delegate_subagent() 同步等待返回
837
- - [ ] Decision evaluation 通过 delegate_subagent() 同步完成
895
+ - [ ] A_STEP_RECEIVE 从 executor 的 agent-message 中提取执行输出
896
+ - [ ] Executor 崩溃(idle 无 send_message)→ 询问 2 次后 STATUS=BLOCKED,转 S_HANDLE_FAIL
897
+ - [ ] Dual dispatch: 执行 Agent `name`(async + send_message),评估 Agent 不传 `name`(sync)或 CLI delegate
898
+ - [ ] Decision evaluation 支持三种模式:agent(同步)、cli(CLI delegate)、dual(并行交叉验证)
899
+ - [ ] `evaluate_via` 字段控制评估模式,默认 `"agent"`
900
+ - [ ] dual 模式合并策略:一致取共识、分歧保守降级、CLI 未返回用 Agent 结果
838
901
  - [ ] Verdict 解析保持 `---VERDICT---` 格式,parse 失败 → fallback fix + parse_failed: true
839
902
  - [ ] decisions.ndjson 追加:source 字段为 `"ralph-v2"`
840
- - [ ] Session schema: `execution_mode: "agent"`,`agent_exec_name`(执行 Agent 名称标识),含 `artifacts_produced`
903
+ - [ ] Session schema: `execution_mode: "agent"`,`agent_exec_name`(执行 Agent name + display),含 `artifacts_produced`
841
904
  - [ ] Chain building(S_RESOLVE_PHASE through S_BUILD_CHAIN)自包含执行
842
905
  - [ ] A_STEP_DISPATCH 含前序产出加载(滑动窗口 5 step + accumulated signals + stage-specific artifacts)
843
- - [ ] Agent name 含 stage prefix(grl/brn/anm/ana/pln/exe/rev/tst/dbg
906
+ - [ ] `agent_exec_name` 含 stage prefix(grl/brn/anm/ana/pln/exe/rev/tst/dbg)——同时用于 Agent name 参数和 display
844
907
  - [ ] `--summary` 在 DONE/DONE_WITH_CONCERNS 时为 MUST(动词开头,≤100 字)
845
908
  - [ ] CAVEATS 在 DONE_WITH_CONCERNS 时同时映射 --concerns
846
- - [ ] A_STEP_EXTRACT 从 agent 输出提取 artifact IDs、path signals、phase signals
909
+ - [ ] A_STEP_EXTRACT 从 executor 输出提取 artifact IDs、path signals、phase signals
847
910
  - [ ] A_STEP_DRIFT_ANALYZE:ALIGNED/MINOR_DRIFT → complete;MAJOR_DRIFT+未重试 → retry;MAJOR_DRIFT+已重试 → DONE_WITH_CONCERNS
848
911
  - [ ] A_STEP_COMPLETE 将 context signals 写入 status.json.context
849
912
  - [ ] A_AMEND_GOAL:完整 5 步流程 + deferred_reading ralph-amend-goal.md + Agent mini grill 含完整 prompt
@@ -45,6 +45,8 @@ Remaining → intent
45
45
  | `wf-plan` | `{ context_dir?, from?, phase?, scope?, specs?, gaps?, quick? }` |
46
46
  | `wf-execute` | `{ plan_dir, specs?, codebase_context?, wiki_context?, auto_commit? }` |
47
47
  | `wf-milestone-audit` | `{ milestone?, is_adhoc? }` |
48
+
49
+ **Output boundary**: ALL file writes MUST target `.workflow/scratch/{YYYYMMDD}-swarm-{script}-{slug}/` (results, ralph-compatible artifacts). When inside a ralph session, writes target the corresponding step's scratch directory. NEVER modify source code, workflow scripts (`~/.maestro/workflows/swarm/`), or `.claude/commands/` files.
48
50
  </context>
49
51
 
50
52
  <state_machine>
@@ -198,6 +200,29 @@ Workflow 返回 JSON 后:
198
200
  6. **结果必须展示** — Workflow 返回后必须向用户展示格式化摘要,不得静默完成
199
201
  </invariants>
200
202
 
203
+ <execution>
204
+
205
+ ### Phase Gates (MANDATORY, BLOCKING)
206
+
207
+ **GATE 1: Parse → Route**
208
+ - REQUIRED: Intent text or `--script` flag parsed successfully.
209
+ - BLOCKED if: no intent and no `--script` (E001).
210
+
211
+ **GATE 2: Route → Context Assembly**
212
+ - REQUIRED: Target script resolved unambiguously (single match or user-selected from candidates).
213
+ - BLOCKED if: ambiguous routing without user resolution (E002).
214
+
215
+ **GATE 3: Context → Dispatch**
216
+ - REQUIRED: Args payload assembled with all required fields for target script.
217
+ - REQUIRED: Script file exists at `~/.maestro/workflows/swarm/{script}.js`.
218
+ - BLOCKED if: script file not found (E003) or required args missing.
219
+
220
+ **GATE 4: Dispatch → Ingest**
221
+ - REQUIRED: Workflow execution completed (success or partial results available).
222
+ - BLOCKED if: Workflow execution failed entirely (E004) — offer `--resume`.
223
+
224
+ </execution>
225
+
201
226
  <appendix>
202
227
 
203
228
  ### 与 Ralph 集成
@@ -37,8 +37,37 @@ $ARGUMENTS — Tool name, keyword, or --category filter
37
37
  Empty arguments enters interactive mode: list all tools for user selection.
38
38
  </context>
39
39
 
40
+ <invariants>
41
+ 1. **Confirmation before execution** — MUST ask_user before executing tool steps; NEVER auto-execute without user consent
42
+ 2. **Sequential step execution** — steps MUST be executed in defined order; NEVER skip or reorder steps unless user explicitly requests skip
43
+ 3. **Blocker escalation** — step failure MUST be reported to user with retry/skip/abort options; NEVER silently skip failed steps
44
+ 4. **Read-only tool definition** — tool execution MUST NOT modify the tool's knowhow document or spec entry; only the target codebase is modified per tool steps
45
+ 5. **Progress feedback** — each completed step MUST report `[Step N/M] done — <step_name>`; NEVER execute silently
46
+ 6. **Output boundary** — file writes are governed by the individual tool's step definitions. This command itself writes NO files beyond what the loaded tool prescribes
47
+ </invariants>
48
+
40
49
  <execution>
41
50
 
51
+ ### Phase Gates (MANDATORY, BLOCKING)
52
+
53
+ **GATE 1: Parse → Load**
54
+ - REQUIRED: Tool name, keyword, or --category parsed from arguments (or empty for interactive mode).
55
+ - BLOCKED if: invalid category value.
56
+
57
+ **GATE 2: Load → Confirm**
58
+ - REQUIRED: Exactly one tool resolved (direct match or user selection from candidates).
59
+ - REQUIRED: Tool document loaded and steps extracted (ref entries expanded via `maestro load --type knowhow`).
60
+ - BLOCKED if: E001 (no match found), E002 unresolved (multiple matches without user selection).
61
+
62
+ **GATE 3: Confirm → Execute**
63
+ - REQUIRED: User confirmed execution mode via ask_user (execute as-is / adjust / view only).
64
+ - BLOCKED if: user selects "View only" — display steps and END without execution.
65
+
66
+ **GATE 4: Execute → Report**
67
+ - REQUIRED: All steps attempted (completed, skipped with user approval, or aborted by user).
68
+ - REQUIRED: Results collected for each step (success/skip/fail).
69
+ - BLOCKED if: user chose abort mid-execution — report partial results and END.
70
+
42
71
  ### Step 1: Load Tool
43
72
 
44
73
  **By name**:
@@ -37,8 +37,37 @@ $ARGUMENTS — Intent description
37
37
  ```
38
38
  </context>
39
39
 
40
+ <invariants>
41
+ 1. **Schema validation** — tool knowhow document MUST include `tool: true`, `category`, `keywords`, and `summary` in YAML frontmatter; missing fields → reject write
42
+ 2. **No duplicate names** — tool title MUST be unique within its category; duplicate detection → E002 warning with overwrite/optimize confirmation
43
+ 3. **Category required** — every tool MUST declare exactly one category from: coding, test, review, arch, debug; empty category → E003
44
+ 4. **Confirmation gate** — MUST ask_user before writing knowhow document and spec ref entry; NEVER persist without user confirmation
45
+ 5. **Promote is in-place** — promote mode MUST update existing knowhow frontmatter via `maestro wiki update`; NEVER recreate the document
46
+ 6. **Output boundary** — ALL file writes MUST target .workflow/knowhow/ (tool documents) and .workflow/specs/ (ref entries via maestro spec add) only. NEVER modify source code or files outside these paths
47
+ 7. **Description format** — first line after `### Title` MUST state "Use when ..." (usage timing); this is critical for ref entry summary visibility in spec-load
48
+ </invariants>
49
+
40
50
  <execution>
41
51
 
52
+ ### Phase Gates (MANDATORY, BLOCKING)
53
+
54
+ **GATE 1: Parse → Gather**
55
+ - REQUIRED: Mode determined (extract/generate/optimize/promote) from argument parsing.
56
+ - REQUIRED: For optimize/promote modes, target tool/document exists and is loadable.
57
+ - BLOCKED if: empty args without user response to ask_user.
58
+
59
+ **GATE 2: Gather → Write**
60
+ - REQUIRED: Tool name, category, and usage timing confirmed.
61
+ - REQUIRED: Steps extracted or generated (extract: ≥1 step, generate: user-confirmed scope).
62
+ - REQUIRED: Inline vs ref mode decided based on step count.
63
+ - REQUIRED: User confirmed via ask_user (title, category, keywords, summary, step count).
64
+ - BLOCKED if: E001 (.workflow/specs/ not initialized), E003 (no category), user cancels.
65
+
66
+ **GATE 3: Write → Verify**
67
+ - REQUIRED: Knowhow document written with `tool: true` frontmatter (or updated in-place for promote).
68
+ - REQUIRED: Spec ref entry registered (if user confirmed).
69
+ - BLOCKED if: write failed or spec add returned error.
70
+
42
71
  ### Step 1: Intent Detection
43
72
 
44
73
  Parse $ARGUMENTS to determine mode:
@@ -35,8 +35,19 @@ Flags:
35
35
  - `--package-name <name>`: Package name for reference output (default: auto-generated from source directory)
36
36
  - `--output-dir <path>`: Output directory for reference package (default: `.workflow/reference_style`)
37
37
  - `--overwrite`: Allow overwriting existing package directory
38
+
39
+ **Output boundary**: ALL file writes MUST target the `--output-dir` path (default: `.workflow/reference_style/`) for reference packages, and `.workflow/knowhow/` for knowledge assets (via `codify-to-knowhow`). NEVER modify the source directory being analyzed.
38
40
  </context>
39
41
 
42
+ <invariants>
43
+ 1. **Source read-only** — the source path being analyzed MUST NOT be modified; extraction is purely read-only
44
+ 2. **Phase-sequential loading** — workflow files (ui-codify-extract, ui-codify-package, ui-codify-knowhow) MUST be read only when their phase starts; NEVER load all phases eagerly
45
+ 3. **User confirmation before knowhow** — Phase 3→4 gate MUST present ask_user before generating knowledge assets; NEVER auto-proceed to knowhow generation
46
+ 4. **Overwrite protection** — existing package directory MUST NOT be overwritten without `--overwrite` flag (E003)
47
+ 5. **Artifact completeness** — all 5 required artifacts MUST exist before reporting completion; NEVER skip artifact verification
48
+ 6. **Token-first extraction** — design-tokens.json MUST be generated before layout-templates.json; layout extraction depends on token foundation
49
+ </invariants>
50
+
40
51
  <execution>
41
52
  ## 1. Load UI Specs
42
53
 
@@ -35,6 +35,8 @@ Remaining → intent
35
35
  **Library locations:**
36
36
  - Fixed scripts: `~/.maestro/workflows/swarm/wf-*.js`
37
37
  - Dynamic scripts: `~/.maestro/workflows/dynamic/uwf-*.js`
38
+
39
+ **Output boundary**: ALL file writes MUST target `~/.maestro/workflows/dynamic/` (generated scripts) and `.workflow/scratch/{YYYYMMDD}-uwf-*/` (execution results). Fixed scripts at `~/.maestro/workflows/swarm/` are read-only. NEVER modify source code or `.claude/commands/` files.
38
40
  </context>
39
41
 
40
42
  <state_machine>
@@ -511,6 +513,36 @@ Findings: ${digest}
511
513
  12. **无反斜杠路径** — 字符串中路径用正斜杠(`\u`、`\a` 等会被解析为转义序列)
512
514
  </invariants>
513
515
 
516
+ <execution>
517
+
518
+ ### Phase Gates (MANDATORY, BLOCKING)
519
+
520
+ **GATE 1: Parse → Scan**
521
+ - REQUIRED: Intent text or `--from`/`--resume` flag parsed.
522
+ - BLOCKED if: no intent and no flags (E001).
523
+
524
+ **GATE 2: Scan → Design/Execute**
525
+ - REQUIRED: Library scan completed (both `swarm/` and `dynamic/` directories).
526
+ - REQUIRED: User decision if matches found (reuse existing vs generate new).
527
+ - BLOCKED if: scan fails to read script directories.
528
+
529
+ **GATE 3: Design → Generate**
530
+ - REQUIRED: Task decomposition completed with work_items, decision_points, data_flow.
531
+ - REQUIRED: Phase orchestration and adversarial pattern selection determined by depth.
532
+ - BLOCKED if: task cannot be decomposed (E002).
533
+
534
+ **GATE 4: Generate → Execute**
535
+ - REQUIRED: Script written to `~/.maestro/workflows/dynamic/uwf-{slug}.js`.
536
+ - REQUIRED: `node --check` syntax validation passed.
537
+ - REQUIRED: User confirmation via ask_user (unless resuming).
538
+ - BLOCKED if: syntax validation fails after 2 retries (E003).
539
+
540
+ **GATE 5: Execute → Persist**
541
+ - REQUIRED: Workflow execution completed via `scriptPath` invocation.
542
+ - BLOCKED if: Workflow execution failed (E004) — offer `--resume`.
543
+
544
+ </execution>
545
+
514
546
  <appendix>
515
547
 
516
548
  ### 使用示例
@@ -571,3 +603,30 @@ universal-workflow 扫描时会同时检查 swarm/ 和 dynamic/ 目录,
571
603
  | E005 | 持久化失败 | 展示脚本内容,让用户手动保存 |
572
604
 
573
605
  </appendix>
606
+
607
+ <error_codes>
608
+ | Code | Severity | Condition | Recovery |
609
+ |------|----------|-----------|----------|
610
+ | E001 | error | No intent and no --from/--resume flag | Prompt user for intent text |
611
+ | E002 | error | Task decomposition failed — cannot identify work_items | Require more specific intent description |
612
+ | E003 | error | Generated script syntax error after 2 retries | Show script content + error for manual fix |
613
+ | E004 | error | Workflow execution failed | Show error, offer --resume with runId |
614
+ | E005 | error | Script persistence failed (filesystem write error) | Show script content for manual save |
615
+ | W001 | warning | No matching scripts found in library scan | Proceed directly to S_DESIGN |
616
+ | W002 | warning | Adversarial gate confidence < 50% | Flag low-confidence decision, suggest --depth deep |
617
+ </error_codes>
618
+
619
+ <success_criteria>
620
+ - [ ] Intent parsed and flags extracted (--name, --depth, --dry-run, --from, --resume)
621
+ - [ ] Library scan completed across both swarm/ and dynamic/ directories
622
+ - [ ] User decision captured if matching scripts found (reuse vs generate)
623
+ - [ ] Task decomposition produced: work_items, decision_points, data_flow
624
+ - [ ] Adversarial pattern selected per decision_point according to depth level
625
+ - [ ] Blueprint presented to user with estimated agent count
626
+ - [ ] Script generated as pure JavaScript with all 12 generation rules enforced
627
+ - [ ] `node --check` syntax validation passed
628
+ - [ ] User confirmation obtained before execution (unless --resume)
629
+ - [ ] Workflow executed via scriptPath (not inline script string)
630
+ - [ ] Script persisted to `~/.maestro/workflows/dynamic/uwf-{slug}.js`
631
+ - [ ] Completion summary displayed with reuse/resume commands
632
+ </success_criteria>
@@ -32,10 +32,38 @@ $ARGUMENTS — optional flags.
32
32
  - `update-v{TO}-setup.md` — post-migration setup for version {TO}
33
33
 
34
34
  **Schema registry:** `src/migrations/` — handles all intermediate version bumps automatically
35
+
36
+ **Output boundary**: ALL file writes MUST target `.workflow/state.json` (version bump), `.workflow/state.json.backup-*` (backup), and `.workflow/` config files touched by version-specific setup. NEVER modify source code or `src/migrations/` files.
35
37
  </context>
36
38
 
39
+ <invariants>
40
+ 1. **Backup before migration** — a timestamped backup of `.workflow/state.json` MUST be created before any schema migration runs; NEVER execute migration without backup
41
+ 2. **Idempotent** — running update when already on latest version MUST be a no-op (display "up to date"); NEVER re-apply migrations
42
+ 3. **Confirmation before execute** — migration diff MUST be displayed and user MUST confirm via ask_user before execution (unless `--force`); NEVER silently apply schema changes
43
+ 4. **Migration diff always visible** — even with `--force`, the migration diff MUST be displayed for audit visibility; NEVER skip diff display
44
+ 5. **Restore path on failure** — if migration fails, the backup restore command MUST be displayed; NEVER leave user without recovery instructions
45
+ 6. **Sequential migration** — all intermediate version steps MUST be applied in order by the schema registry; NEVER skip intermediate versions
46
+ </invariants>
47
+
37
48
  <execution>
38
49
 
50
+ ### Phase Gates (MANDATORY, BLOCKING)
51
+
52
+ **GATE 1: Detect → Check**
53
+ - REQUIRED: Current version read from `.workflow/state.json`.
54
+ - BLOCKED if: state.json missing or unreadable (E001).
55
+
56
+ **GATE 2: Check → Execute**
57
+ - REQUIRED: Dry-run migration check completed; target version identified.
58
+ - REQUIRED: User confirmation via ask_user (unless `--force`).
59
+ - BLOCKED if: already up to date (display message and exit) or user cancels.
60
+
61
+ **GATE 3: Execute → Summary**
62
+ - REQUIRED: Backup created at `.workflow/state.json.backup-v{current}-{timestamp}`.
63
+ - REQUIRED: Schema migration completed successfully.
64
+ - REQUIRED: Version-specific setup doc followed (if exists).
65
+ - BLOCKED if: migration failed — display restore command and exit.
66
+
39
67
  ### Step 1: Detect Version
40
68
 
41
69
  ```
@@ -108,6 +136,16 @@ Next steps:
108
136
 
109
137
  </execution>
110
138
 
139
+ <error_codes>
140
+ | Code | Severity | Condition | Recovery |
141
+ |------|----------|-----------|----------|
142
+ | E001 | error | `.workflow/state.json` not found or unreadable | Run `/maestro-init` first |
143
+ | E002 | error | Schema migration failed (npx tsx returned error) | Display backup restore command: `cp .workflow/state.json.backup-* .workflow/state.json` |
144
+ | E003 | error | Version-specific setup doc failed to execute | Manual setup: read `~/.maestro/workflows/updates/update-v{target}-setup.md` |
145
+ | W001 | warning | No version-specific setup doc found for target version | Proceed without setup; schema migration alone is sufficient |
146
+ | W002 | warning | `--setup-only` but no setup script exists for current version | Display message and exit |
147
+ </error_codes>
148
+
111
149
  <success_criteria>
112
150
  - [ ] Current version detected from state.json
113
151
  - [ ] Schema migrations run automatically (no manual intermediate steps)
@@ -46,13 +46,42 @@ $ARGUMENTS -- optional flags.
46
46
  - `.workflow/codebase/` -- target directory (will be cleared and rebuilt)
47
47
  - `.workflow/codebase/doc-index.json` -- generated documentation index
48
48
  - `.workflow/codebase/knowledge-graph.json` -- Knowledge Graph with nodes, edges, layers, and tour (generated by `maestro kg index`)
49
+
50
+ **Output boundary**: ALL file writes MUST target `.workflow/codebase/`, `.workflow/state.json`, or `.workflow/project.md` (Tech Stack section only). NEVER modify source code or files outside these paths.
49
51
  </context>
50
52
 
53
+ <invariants>
54
+ 1. **Destructive with confirmation** — rebuild clears `.workflow/codebase/` entirely; MUST confirm with user unless `--force` is set
55
+ 2. **Commit confirmation** — git commit MUST be confirmed by user unless `--force` is set; `--skip-commit` bypasses commit entirely
56
+ 3. **Partial failure tolerance** — if 1-3 mapper agents fail, proceed with partial results (W001); only abort if all 4 fail (E002)
57
+ 4. **Focus scoping** — when `--focus <area>` is set, MUST only regenerate docs relevant to that scope; leave unrelated docs untouched
58
+ 5. **State update** — MUST update state.json with rebuild timestamp on completion
59
+ 6. **KG pipeline mandatory** — MUST run `maestro kg index` after doc regeneration; KG validation failure is non-fatal (W003)
60
+ </invariants>
61
+
51
62
  <execution>
52
63
  Follow '~/.maestro/workflows/codebase-rebuild.md' completely.
53
64
 
54
65
  **When `--focus <area>` is set:** pass the area string to each mapper agent as scoping context; only regenerate the docs relevant to that scope (leave others untouched unless missing).
55
66
 
67
+ ### Phase Gates (MANDATORY, BLOCKING)
68
+
69
+ **GATE 1: Confirmation → Mapping** (Pre-flight → Agent spawn)
70
+ - REQUIRED: `.workflow/` initialized (E001 if missing).
71
+ - REQUIRED: User confirmed rebuild (or `--force` set). W002 if existing docs found.
72
+ - BLOCKED if user declines confirmation.
73
+
74
+ **GATE 2: Mapping → KG Pipeline** (Agent results → Knowledge Graph)
75
+ - REQUIRED: At least 1 of 4 mapper agents returned valid results.
76
+ - REQUIRED: All output files written to `.workflow/codebase/`.
77
+ - REQUIRED: doc-index.json generated and valid.
78
+ - BLOCKED if all 4 mapper agents failed (E002).
79
+
80
+ **GATE 3: KG Pipeline → Commit** (Knowledge Graph → Git)
81
+ - REQUIRED: `maestro kg index` executed (W003 if validation fails — non-blocking).
82
+ - REQUIRED: state.json updated with rebuild timestamp.
83
+ - REQUIRED: If not `--skip-commit`: user confirmed git commit (or `--force` set).
84
+ - BLOCKED if state.json update fails.
56
85
  </execution>
57
86
 
58
87
  <completion>