maestro-flow 0.4.7 → 0.4.9

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 (136) hide show
  1. package/.claude/commands/maestro-ralph.md +548 -377
  2. package/.claude/commands/maestro.md +220 -191
  3. package/.codex/skills/maestro/SKILL.md +495 -462
  4. package/.codex/skills/maestro-ralph/SKILL.md +491 -339
  5. package/dashboard/dist/assets/{ArtifactsPage-CVh0Z2I2.js → ArtifactsPage-BLvAqQlQ.js} +1 -1
  6. package/dashboard/dist/assets/{ChatInput-CBI3qHQQ.js → ChatInput-DU9YGZKX.js} +1 -1
  7. package/dashboard/dist/assets/{ChatPage-BjJ9CYox.js → ChatPage-DYHfheXC.js} +1 -1
  8. package/dashboard/dist/assets/{CollabPage-CprGGO9y.js → CollabPage-CSlmvEa-.js} +1 -1
  9. package/dashboard/dist/assets/{ExecutionPanel-CClxD7cH.js → ExecutionPanel-RYWf0dYC.js} +1 -1
  10. package/dashboard/dist/assets/{KanbanPage-copqjdPg.js → KanbanPage-N55Iv0-X.js} +1 -1
  11. package/dashboard/dist/assets/{MaestroCoordinatePage-CioZjQ9N.js → MaestroCoordinatePage-BxwZ6yy5.js} +1 -1
  12. package/dashboard/dist/assets/{MarkdownRenderer-CtUhoxCT.js → MarkdownRenderer-ZGtOY7Ti.js} +1 -1
  13. package/dashboard/dist/assets/{McpPage-BcPPcJpr.js → McpPage-Im6s4pGR.js} +1 -1
  14. package/dashboard/dist/assets/{MeetingRoomPage-BgmAKxU-.js → MeetingRoomPage-CxHRn1xx.js} +1 -1
  15. package/dashboard/dist/assets/{OutputPanel-DgT3gMyp.js → OutputPanel-DaL8c1i5.js} +1 -1
  16. package/dashboard/dist/assets/{ProblemsPanel-BmG7rxoG.js → ProblemsPanel-BQTd5812.js} +1 -1
  17. package/dashboard/dist/assets/{RequirementBoardPage-k8YoeQ0r.js → RequirementBoardPage-22y9u1qh.js} +1 -1
  18. package/dashboard/dist/assets/{RequirementPage-Da2354px.js → RequirementPage-_mO743Xm.js} +1 -1
  19. package/dashboard/dist/assets/{RoomsPage-BtqDiYaU.js → RoomsPage-CExTbOGr.js} +1 -1
  20. package/dashboard/dist/assets/{SpecsPage-ByPVH_M3.js → SpecsPage-gr4KX51-.js} +1 -1
  21. package/dashboard/dist/assets/{TeamsPage-sFDLN30L.js → TeamsPage-BxEXLb5g.js} +1 -1
  22. package/dashboard/dist/assets/{TreeBrowser-oEx8YJXV.js → TreeBrowser-CVtPF5C9.js} +1 -1
  23. package/dashboard/dist/assets/{WorkflowPage-JrX7CVHh.js → WorkflowPage-BoN18Lhs.js} +1 -1
  24. package/dashboard/dist/assets/{arrow-left-DYvgSdIH.js → arrow-left-C5ROg97G.js} +1 -1
  25. package/dashboard/dist/assets/{check-jcgYBWVR.js → check-Bs8PM0tQ.js} +1 -1
  26. package/dashboard/dist/assets/{chevron-right-DvZ5sMOg.js → chevron-right-SmErd_1F.js} +1 -1
  27. package/dashboard/dist/assets/{circle-DYT-zoRZ.js → circle-CjpslL_D.js} +1 -1
  28. package/dashboard/dist/assets/{circle-alert-Bfbv3gt4.js → circle-alert-CuzAg2fd.js} +1 -1
  29. package/dashboard/dist/assets/{circle-check-D82WnpbI.js → circle-check-BIkDU5D5.js} +1 -1
  30. package/dashboard/dist/assets/{circle-check-big-CPVD1GKF.js → circle-check-big-CYctV8bK.js} +1 -1
  31. package/dashboard/dist/assets/{code-B3bKFGI4.js → code-DoB7rfxt.js} +1 -1
  32. package/dashboard/dist/assets/{columns-3-BeMAQCix.js → columns-3-Ch5KIyRa.js} +1 -1
  33. package/dashboard/dist/assets/{download-BCtpoWYB.js → download-DadtG2Nr.js} +1 -1
  34. package/dashboard/dist/assets/{folder-CTj6SNNu.js → folder-B8ODoZfb.js} +1 -1
  35. package/dashboard/dist/assets/{index-BxR_3IbJ.js → index-BL4h1OKY.js} +1 -1
  36. package/dashboard/dist/assets/{index-DpcPd-UG.js → index-DQIlX2w_.js} +4 -4
  37. package/dashboard/dist/assets/{index-CWBJLu42.js → index-DaFwSmVJ.js} +10 -10
  38. package/dashboard/dist/assets/{list-BMv8pIQn.js → list-CI-XIPZh.js} +1 -1
  39. package/dashboard/dist/assets/{loader-DdM4VOgF.js → loader-DpdMoQvh.js} +1 -1
  40. package/dashboard/dist/assets/{minus-D15s2E__.js → minus-BVbfXGrC.js} +1 -1
  41. package/dashboard/dist/assets/{pen-line-DO6o4xWz.js → pen-line-CR8GaHt-.js} +1 -1
  42. package/dashboard/dist/assets/{pencil-qGxg9jOe.js → pencil-I7GE0y29.js} +1 -1
  43. package/dashboard/dist/assets/{proxy-DOffTzwA.js → proxy-CcYyZZWI.js} +1 -1
  44. package/dashboard/dist/assets/{refresh-cw-C9UNdLCy.js → refresh-cw-BG9V_T4R.js} +1 -1
  45. package/dashboard/dist/assets/{rows-2-CifAA5SL.js → rows-2-DP6NjQFk.js} +1 -1
  46. package/dashboard/dist/assets/{search-pe7pU1YN.js → search-b78eLlw2.js} +1 -1
  47. package/dashboard/dist/assets/{shallow-r7YynQYA.js → shallow-CJEesgtu.js} +1 -1
  48. package/dashboard/dist/assets/{table-Bh772iIw.js → table-B_lk-a1d.js} +1 -1
  49. package/dashboard/dist/assets/{team-types-C_HqX2p2.js → team-types-Se7f9LfJ.js} +1 -1
  50. package/dashboard/dist/assets/{terminal-EpmtGBlw.js → terminal-DXx4tvzq.js} +1 -1
  51. package/dashboard/dist/assets/{trash-2-Xen46iNQ.js → trash-2-CVh9mnRj.js} +1 -1
  52. package/dashboard/dist/assets/{users-BLueDPxF.js → users-Da9zGME5.js} +1 -1
  53. package/dashboard/dist/assets/{zap-DsQCPF61.js → zap-C0zaC7gJ.js} +1 -1
  54. package/dashboard/dist/index.html +1 -1
  55. package/dashboard/dist-server/dashboard/src/server/agents/adapter-factory.js +4 -0
  56. package/dashboard/dist-server/dashboard/src/server/agents/adapter-factory.js.map +1 -1
  57. package/dashboard/dist-server/dashboard/src/server/agents/agy-adapter.d.ts +39 -0
  58. package/dashboard/dist-server/dashboard/src/server/agents/agy-adapter.js +423 -0
  59. package/dashboard/dist-server/dashboard/src/server/agents/agy-adapter.js.map +1 -0
  60. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +25 -33
  61. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
  62. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.test.js +9 -3
  63. package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.test.js.map +1 -1
  64. package/dashboard/dist-server/dashboard/src/server/agents/codex-app-server-adapter.js +5 -2
  65. package/dashboard/dist-server/dashboard/src/server/agents/codex-app-server-adapter.js.map +1 -1
  66. package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.d.ts +6 -0
  67. package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.js +129 -8
  68. package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.js.map +1 -1
  69. package/dashboard/dist-server/dashboard/src/server/agents/gemini-a2a-adapter.js +6 -3
  70. package/dashboard/dist-server/dashboard/src/server/agents/gemini-a2a-adapter.js.map +1 -1
  71. package/dashboard/dist-server/dashboard/src/server/agents/gemini-a2a-adapter.test.js +7 -1
  72. package/dashboard/dist-server/dashboard/src/server/agents/gemini-a2a-adapter.test.js.map +1 -1
  73. package/dashboard/dist-server/dashboard/src/server/agents/opencode-adapter.d.ts +2 -0
  74. package/dashboard/dist-server/dashboard/src/server/agents/opencode-adapter.js +40 -15
  75. package/dashboard/dist-server/dashboard/src/server/agents/opencode-adapter.js.map +1 -1
  76. package/dashboard/dist-server/dashboard/src/server/agents/process-tree-kill.d.ts +1 -0
  77. package/dashboard/dist-server/dashboard/src/server/agents/process-tree-kill.js +59 -0
  78. package/dashboard/dist-server/dashboard/src/server/agents/process-tree-kill.js.map +1 -0
  79. package/dashboard/dist-server/dashboard/src/server/agents/process-tree-kill.test.d.ts +1 -0
  80. package/dashboard/dist-server/dashboard/src/server/agents/process-tree-kill.test.js +78 -0
  81. package/dashboard/dist-server/dashboard/src/server/agents/process-tree-kill.test.js.map +1 -0
  82. package/dashboard/dist-server/dashboard/src/server/agents/stale-handler.d.ts +25 -0
  83. package/dashboard/dist-server/dashboard/src/server/agents/stale-handler.js +40 -0
  84. package/dashboard/dist-server/dashboard/src/server/agents/stale-handler.js.map +1 -0
  85. package/dashboard/dist-server/dashboard/src/server/agents/stale-handler.test.d.ts +1 -0
  86. package/dashboard/dist-server/dashboard/src/server/agents/stale-handler.test.js +89 -0
  87. package/dashboard/dist-server/dashboard/src/server/agents/stale-handler.test.js.map +1 -0
  88. package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.js +19 -8
  89. package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.js.map +1 -1
  90. package/dashboard/dist-server/dashboard/src/server/agents/stream-monitor.d.ts +6 -0
  91. package/dashboard/dist-server/dashboard/src/server/agents/stream-monitor.js +7 -1
  92. package/dashboard/dist-server/dashboard/src/server/agents/stream-monitor.js.map +1 -1
  93. package/dashboard/dist-server/dashboard/src/server/agents/stream-monitor.test.d.ts +1 -0
  94. package/dashboard/dist-server/dashboard/src/server/agents/stream-monitor.test.js +46 -0
  95. package/dashboard/dist-server/dashboard/src/server/agents/stream-monitor.test.js.map +1 -0
  96. package/dashboard/dist-server/dashboard/src/shared/constants.js +2 -0
  97. package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
  98. package/dashboard/dist-server/shared/agent-types.d.ts +7 -1
  99. package/dist/shared/agent-types.d.ts +7 -1
  100. package/dist/shared/agent-types.d.ts.map +1 -1
  101. package/dist/src/agents/cli-agent-runner.d.ts +3 -0
  102. package/dist/src/agents/cli-agent-runner.d.ts.map +1 -1
  103. package/dist/src/agents/cli-agent-runner.js +4 -0
  104. package/dist/src/agents/cli-agent-runner.js.map +1 -1
  105. package/dist/src/commands/delegate.d.ts +2 -0
  106. package/dist/src/commands/delegate.d.ts.map +1 -1
  107. package/dist/src/commands/delegate.js +18 -0
  108. package/dist/src/commands/delegate.js.map +1 -1
  109. package/dist/src/commands/hooks.d.ts +64 -0
  110. package/dist/src/commands/hooks.d.ts.map +1 -1
  111. package/dist/src/commands/hooks.js +107 -0
  112. package/dist/src/commands/hooks.js.map +1 -1
  113. package/dist/src/commands/install.d.ts.map +1 -1
  114. package/dist/src/commands/install.js +17 -3
  115. package/dist/src/commands/install.js.map +1 -1
  116. package/dist/src/commands/update.d.ts.map +1 -1
  117. package/dist/src/commands/update.js +53 -0
  118. package/dist/src/commands/update.js.map +1 -1
  119. package/dist/src/config/cli-tools-config.d.ts +22 -5
  120. package/dist/src/config/cli-tools-config.d.ts.map +1 -1
  121. package/dist/src/config/cli-tools-config.js +77 -32
  122. package/dist/src/config/cli-tools-config.js.map +1 -1
  123. package/dist/src/config/cli-tools-defaults.json +2 -1
  124. package/dist/src/core/component-defs.d.ts.map +1 -1
  125. package/dist/src/core/component-defs.js +53 -0
  126. package/dist/src/core/component-defs.js.map +1 -1
  127. package/dist/src/tui/install-ui/InstallExecution.d.ts.map +1 -1
  128. package/dist/src/tui/install-ui/InstallExecution.js +5 -3
  129. package/dist/src/tui/install-ui/InstallExecution.js.map +1 -1
  130. package/dist/src/utils/update-notices.d.ts +62 -0
  131. package/dist/src/utils/update-notices.d.ts.map +1 -0
  132. package/dist/src/utils/update-notices.js +178 -0
  133. package/dist/src/utils/update-notices.js.map +1 -0
  134. package/package.json +82 -82
  135. package/shared/agent-types.ts +237 -231
  136. package/workflows/agy-instructions.md +124 -0
@@ -1,191 +1,220 @@
1
- ---
2
- name: maestro
3
- description: Auto-route intent to optimal command chain
4
- argument-hint: "<intent> [-y] [-c] [--dry-run] [--exec auto|cli|internal] [--tool <name>] [--super]"
5
- allowed-tools:
6
- - Read
7
- - Write
8
- - Edit
9
- - Bash
10
- - Glob
11
- - Grep
12
- - Agent
13
- - AskUserQuestion
14
- - TodoWrite
15
- ---
16
- <purpose>
17
- Orchestrate all maestro commands based on user intent and project state.
18
- Classify intent → select chain → create session → dispatch to `maestro-ralph-execute`.
19
-
20
- Entry points:
21
- - **`/maestro "intent"`** — Intent-based: classify → chain → execute
22
- - **`/maestro -c`** — Resume previous session
23
- - **`/maestro --dry-run "intent"`** — Show chain, no execution
24
- - **`/maestro --super "intent"`** — Production-ready mode (read maestro-super.md)
25
-
26
- Session: `.workflow/.maestro/{session_id}/status.json`
27
- </purpose>
28
-
29
- <deferred_reading>
30
- - [maestro.md](~/.maestro/workflows/maestro.md) — read at execution start for intent analysis + chain selection
31
- - [maestro-super.md](~/.maestro/workflows/maestro-super.md) — read when `--super` flag active
32
- </deferred_reading>
33
-
34
- <context>
35
- $ARGUMENTS — user intent text, or special keywords.
36
-
37
- **Keywords:** `continue`/`next`/`go` → state-based routing; `status` → `Skill("manage-status")`
38
-
39
- **Flags:**
40
- - `-y` / `--yes` — Auto mode: skip clarification, skip confirmation, auto-skip on errors
41
- - `-c` / `--continue` — Resume previous session
42
- - `--dry-run` — Show chain without executing
43
- - `--exec <mode>` — `auto` (default), `cli`, `internal`
44
- - `--tool <name>` — CLI tool for delegates (default: claude)
45
- - `--super` — Read and follow `maestro-super.md`
46
- </context>
47
-
48
- <invariants>
49
- 1. **All chains dispatch via maestro-ralph-execute** — maestro never executes steps directly
50
- 2. **Session before execution** — status.json created before any step runs
51
- 3. **Auto flags only to supporting commands** — unlisted commands execute as-is
52
- </invariants>
53
-
54
- <state_machine>
55
-
56
- <states>
57
- S_PARSE — 解析参数、检测 flags PERSIST: —
58
- S_RESUME — 扫描已有 session、恢复执行 PERSIST: —
59
- S_CLASSIFY 意图分类、chain 选择 PERSIST: —
60
- S_CREATE创建 session + status.json PERSIST: session (全量)
61
- S_DRY_RUN 显示 chain 后结束 PERSIST: —
62
- S_CONFIRM 用户确认(auto_mode 跳过) PERSIST:
63
- S_DISPATCH 移交 maestro-ralph-execute PERSIST:
64
- S_FALLBACK 意图无法分类、请求输入 PERSIST: —
65
- </states>
66
-
67
- <transitions>
68
-
69
- S_PARSE:
70
- → S_RESUME WHEN: -c / --continue flag
71
- → S_CLASSIFY WHEN: intent text present
72
- → S_CLASSIFY WHEN: keyword "continue"/"next"/"go" DO: A_STATE_BASED_ROUTE
73
- S_FALLBACK WHEN: no intent AND no flags
74
-
75
- S_RESUME:
76
- S_DISPATCH WHEN: session found DO: A_LOCATE_SESSION
77
- → S_FALLBACK WHEN: no session found
78
-
79
- S_CLASSIFY:
80
- S_CREATE WHEN: chain resolved DO: A_CLASSIFY_INTENT
81
- → S_FALLBACK WHEN: no match AND auto_mode
82
- S_CLASSIFY WHEN: no match AND not auto_mode DO: A_CLARIFY
83
- GUARD: max 2 clarification rounds → S_FALLBACK
84
-
85
- S_CREATE:
86
- → S_DRY_RUN WHEN: --dry-run flag DO: A_CREATE_SESSION
87
- → S_CONFIRM WHEN: not auto_mode DO: A_CREATE_SESSION
88
- → S_DISPATCH WHEN: auto_mode DO: A_CREATE_SESSION
89
-
90
- S_DRY_RUN:
91
- → END DO: display chain with step types
92
-
93
- S_CONFIRM:
94
- S_DISPATCH WHEN: user confirms
95
- S_PARSE WHEN: user wants to modify
96
- END WHEN: user cancels
97
-
98
- S_DISPATCH:
99
- → END DO: Skill({ skill: "maestro-ralph-execute" })
100
-
101
- S_FALLBACK:
102
- S_CLASSIFY WHEN: user provides new intent DO: AskUserQuestion
103
- END WHEN: user cancels
104
-
105
- </transitions>
106
-
107
- <actions>
108
-
109
- ### A_STATE_BASED_ROUTE
110
-
111
- 1. Read `.workflow/state.json` determine next logical step
112
- 2. Convert to equivalent intent for chain classification
113
-
114
- ### A_LOCATE_SESSION
115
-
116
- 1. Scan `.workflow/.maestro/*/status.json`, filter `status == "running"`, sort DESC
117
- 2. Take most recent; if not found → S_FALLBACK
118
-
119
- ### A_CLASSIFY_INTENT
120
-
121
- 1. Read `~/.maestro/workflows/maestro.md` from deferred_reading
122
- 2. Match intent to best task_type via chain catalog (semantic, AI-driven)
123
- 3. Select chain from chainMap
124
- 4. Determine per-step type: `internal` (Skill) or `external` (delegate)
125
-
126
- ### A_CLARIFY
127
-
128
- 1. `AskUserQuestion` with parsed intent + available chain options
129
- 2. Re-classify with user response
130
-
131
- ### A_CREATE_SESSION
132
-
133
- 1. Read `.workflow/state.json` for project context (phase, milestone)
134
- 2. Create `.workflow/.maestro/maestro-{YYYYMMDD-HHMMSS}/status.json`:
135
- ```json
136
- { "session_id", "source": "maestro", "intent", "task_type", "chain_name",
137
- "phase", "milestone", "auto_mode", "exec_mode", "cli_tool",
138
- "context": { ... }, "steps": [{ "index", "skill", "args", "type", "status": "pending" }],
139
- "waves": [], "current_step": 0, "status": "running" }
140
- ```
141
- 3. Initialize tracking: `create_goal`, `update_plan`
142
- 4. If `--super`: read `maestro-super.md`, follow it completely
143
-
144
- </actions>
145
-
146
- </state_machine>
147
-
148
- <appendix>
149
-
150
- ### Auto-Yes Flag Map
151
-
152
- | Command | Auto Flag | Effect |
153
- |---------|-----------|--------|
154
- | maestro-init | `-y` | Skip interactive questioning |
155
- | maestro-analyze | `-y` | Skip scoping, auto-deepen |
156
- | maestro-brainstorm | `-y` | Skip questions, use defaults |
157
- | maestro-roadmap | `-y` | Skip questions (create/revise/review) |
158
- | maestro-impeccable | `-y` | Auto-select design variant + skip confirmations |
159
- | maestro-plan | `-y` | Skip confirmations and clarification |
160
- | maestro-execute | `-y` | Skip confirmations, blocked auto-continue |
161
- | quality-auto-test | `-y` | Skip plan confirmation |
162
- | quality-test | `-y --auto-fix` | Auto-trigger gap-fix loop |
163
- | quality-retrospective | `-y` | Accept all routing recommendations |
164
- | maestro-milestone-complete | `-y` | Skip knowledge promotion |
165
-
166
- Unlisted commands have no auto flags.
167
-
168
- ### Error Codes
169
-
170
- | Code | Severity | Description | Recovery |
171
- |------|----------|-------------|----------|
172
- | E001 | error | No intent and project not initialized | Prompt or suggest maestro-init |
173
- | E002 | error | Clarity too low after 2 rounds | Show parsed intent, ask rephrase |
174
- | E003 | error | Chain step failed + user abort | Record partial, suggest -c resume |
175
- | E004 | error | Resume session not found | Show available sessions |
176
- | W001 | warning | Ambiguous intent, multiple chains | Present options |
177
- | W002 | warning | Step completed with warnings | Log and continue |
178
- | W003 | warning | State suggests different chain | Show discrepancy |
179
-
180
- ### Success Criteria
181
-
182
- - [ ] Intent classified with task_type, complexity, clarity_score
183
- - [ ] Chain selected and confirmed (or auto-confirmed)
184
- - [ ] Session dir created with status.json before execution
185
- - [ ] Auto flags propagated to supporting commands only
186
- - [ ] All chains dispatched via maestro-ralph-execute
187
- - [ ] Low-complexity intents routed to maestro-quick
188
- - [ ] (super) Requirements validated before roadmap
189
- - [ ] (super) Each milestone scored >= 80%
190
-
191
- </appendix>
1
+ ---
2
+ name: maestro
3
+ description: Auto-route intent to optimal command chain
4
+ argument-hint: "<intent> [-y] [-c] [--dry-run] [--exec auto|cli|internal] [--tool <name>] [--super]"
5
+ allowed-tools:
6
+ - Read
7
+ - Write
8
+ - Edit
9
+ - Bash
10
+ - Glob
11
+ - Grep
12
+ - Agent
13
+ - AskUserQuestion
14
+ - TodoWrite
15
+ ---
16
+ <purpose>
17
+ Orchestrate all maestro commands based on user intent and project state.
18
+ Classify intent → select chain → create session → dispatch to `maestro-ralph-execute`.
19
+
20
+ Entry points:
21
+ - **`/maestro "intent"`** — Intent-based: classify → chain → execute
22
+ - **`/maestro -c`** — Resume previous session
23
+ - **`/maestro --dry-run "intent"`** — Show chain, no execution
24
+ - **`/maestro --super "intent"`** — Production-ready mode (read maestro-super.md)
25
+
26
+ Session: `.workflow/.maestro/{session_id}/status.json`
27
+ </purpose>
28
+
29
+ <deferred_reading>
30
+ - [maestro.md](~/.maestro/workflows/maestro.md) — read at execution start for intent analysis + chain selection
31
+ - [maestro-super.md](~/.maestro/workflows/maestro-super.md) — read when `--super` flag active
32
+ </deferred_reading>
33
+
34
+ <context>
35
+ $ARGUMENTS — user intent text, or special keywords.
36
+
37
+ **Keywords:** `continue`/`next`/`go` → state-based routing; `status` → `Skill("manage-status")`
38
+
39
+ **Flags:**
40
+ - `-y` / `--yes` — Auto mode: skip clarification, skip confirmation, auto-skip on errors
41
+ - `-c` / `--continue` — Resume previous session
42
+ - `--dry-run` — Show chain without executing
43
+ - `--exec <mode>` — `auto` (default), `cli`, `internal`
44
+ - `--tool <name>` — CLI tool for delegates (default: claude)
45
+ - `--super` — Read and follow `maestro-super.md`
46
+ </context>
47
+
48
+ <invariants>
49
+ 1. **All chains dispatch via maestro-ralph-execute** — maestro never executes steps directly
50
+ 2. **Session before execution** — status.json created before any step runs
51
+ 3. **Auto flags only to supporting commands** — unlisted commands execute as-is
52
+ 4. **Decomposition contract shared with maestro-ralph** — broad/lifecycle intents run S_DECOMPOSE producing the SAME additive block (`boundary_contract`, `execution_criteria`, `task_decomposition`, `goal_checklist_path`) + `goal-checklist.md`, then EMIT the `/goal` bind prompt. Reference maestro-ralph `A_DECOMPOSE_TASKS` for the full spec; do not duplicate logic
53
+ 5. **Status JSON: schema-additive + step-dynamic** — decomposition fields OPTIONAL (absent → old flat-chain behavior); `steps[]` is a living array grown at runtime by ralph-execute's `post-goal-audit`. Never remove/rename existing fields
54
+ </invariants>
55
+
56
+ <state_machine>
57
+
58
+ <states>
59
+ S_PARSE 解析参数、检测 flags PERSIST: —
60
+ S_RESUME扫描已有 session、恢复执行 PERSIST:
61
+ S_CLASSIFY 意图分类、chain 选择 PERSIST: —
62
+ S_DECOMPOSE 边界澄清、写执行准则+子目标清单 PERSIST: session.boundary_contract, .execution_criteria, .task_decomposition
63
+ S_CREATE 创建 session + status.json PERSIST: session (全量)
64
+ S_DRY_RUN 显示 chain 后结束 PERSIST: —
65
+ S_CONFIRM — 用户确认(auto_mode 跳过) PERSIST: —
66
+ S_DISPATCH — 移交 maestro-ralph-execute PERSIST: —
67
+ S_FALLBACK — 意图无法分类、请求输入 PERSIST: —
68
+ </states>
69
+
70
+ <transitions>
71
+
72
+ S_PARSE:
73
+ S_RESUME WHEN: -c / --continue flag
74
+ → S_CLASSIFY WHEN: intent text present
75
+ → S_CLASSIFY WHEN: keyword "continue"/"next"/"go" DO: A_STATE_BASED_ROUTE
76
+ S_FALLBACK WHEN: no intent AND no flags
77
+
78
+ S_RESUME:
79
+ → S_DISPATCH WHEN: session found DO: A_LOCATE_SESSION
80
+ S_FALLBACK WHEN: no session found
81
+
82
+ S_CLASSIFY:
83
+ → S_DECOMPOSE WHEN: chain resolved DO: A_CLASSIFY_INTENT
84
+ → S_FALLBACK WHEN: no match AND auto_mode
85
+ → S_CLASSIFY WHEN: no match AND not auto_mode DO: A_CLARIFY
86
+ GUARD: max 2 clarification rounds → S_FALLBACK
87
+
88
+ S_DECOMPOSE:
89
+ → S_CREATE DO: A_DECOMPOSE_TASKS
90
+ GUARD: broad intent (重构/全面/重写/迁移/overhaul/migrate/rewrite) on a multi-step lifecycle chain → MUST clarify even if auto_mode
91
+ GUARD: single-step chain OR narrow intent OR chain ∈ {status,init,quick} → skip decomposition (pass through)
92
+
93
+ S_CREATE:
94
+ S_DRY_RUN WHEN: --dry-run flag DO: A_CREATE_SESSION
95
+ S_CONFIRM WHEN: not auto_mode DO: A_CREATE_SESSION
96
+ S_DISPATCH WHEN: auto_mode DO: A_CREATE_SESSION
97
+
98
+ S_DRY_RUN:
99
+ → END DO: display chain with step types
100
+
101
+ S_CONFIRM:
102
+ S_DISPATCH WHEN: user confirms
103
+ S_PARSE WHEN: user wants to modify
104
+ → END WHEN: user cancels
105
+
106
+ S_DISPATCH:
107
+ → END DO: Skill({ skill: "maestro-ralph-execute" })
108
+
109
+ S_FALLBACK:
110
+ → S_CLASSIFY WHEN: user provides new intent DO: AskUserQuestion
111
+ END WHEN: user cancels
112
+
113
+ </transitions>
114
+
115
+ <actions>
116
+
117
+ ### A_STATE_BASED_ROUTE
118
+
119
+ 1. Read `.workflow/state.json` → determine next logical step
120
+ 2. Convert to equivalent intent for chain classification
121
+
122
+ ### A_LOCATE_SESSION
123
+
124
+ 1. Scan `.workflow/.maestro/*/status.json`, filter `status == "running"`, sort DESC
125
+ 2. Take most recent; if not found → S_FALLBACK
126
+
127
+ ### A_CLASSIFY_INTENT
128
+
129
+ 1. Read `~/.maestro/workflows/maestro.md` from deferred_reading
130
+ 2. Match intent to best task_type via chain catalog (semantic, AI-driven)
131
+ 3. Select chain from chainMap
132
+ 4. Determine per-step type: `internal` (Skill) or `external` (delegate)
133
+
134
+ ### A_CLARIFY
135
+
136
+ 1. `AskUserQuestion` with parsed intent + available chain options
137
+ 2. Re-classify with user response
138
+
139
+ ### A_DECOMPOSE_TASKS
140
+
141
+ Shares the decomposition contract with maestro-ralph `A_DECOMPOSE_TASKS` — **reference that spec; do not duplicate the table logic here.** Condensed:
142
+
143
+ 1. Classify intent breadth (broad: 重构/全面/重写/迁移/overhaul/migrate/rewrite; narrow: single file/function/bug). Skip entirely for narrow / single-step / {status,init,quick} chains
144
+ 2. Broad/medium → `AskUserQuestion` ≤3 rounds: Scope (in/out) | Constraints (compat/API/perf/test bar) | Definition of Done
145
+ 3. Derive `execution_criteria` (3-6 imperative rules) + `task_decomposition` (outcome sub-goals, each `done_when` objectively verifiable and mapped to a ralph evidence artifact: verification.json / review.json / uat.md / test path)
146
+ 4. Write `{session_dir}/goal-checklist.md` (same template as maestro-ralph) with `ALL_GOALS_DONE` sentinel; set `goal_checklist_path`
147
+ 5. Append a `{ type: "decision", decision: "post-goal-audit", retry_count: 0, max_retries: 2 }` node as the FINAL node — after the last evidence-producing step (verify/review/test), before a milestone-complete/close-out step if the chain ends with one. (Audit needs evidence artifacts to exist.) ralph-execute then dynamically grows `steps[]` for unmet sub-goals
148
+ 6. **Emit the `/goal` bind prompt:**
149
+ ```
150
+ 📋 任务分解完成。复制下面一行设定目标(推荐):
151
+ /goal 当 {session_dir}/goal-checklist.md 中子目标全 [x] 且含 ALL_GOALS_DONE 时达成;否则按执行准则继续推进且不越边界契约
152
+ ```
153
+
154
+ ### A_CREATE_SESSION
155
+
156
+ 1. Read `.workflow/state.json` for project context (phase, milestone)
157
+ 2. Create `.workflow/.maestro/maestro-{YYYYMMDD-HHMMSS}/status.json`:
158
+ ```json
159
+ { "session_id", "source": "maestro", "intent", "task_type", "chain_name",
160
+ "phase", "milestone", "auto_mode", "exec_mode", "cli_tool",
161
+ "context": { ... }, "steps": [{ "index", "skill", "args", "type", "status": "pending", "goal_ref": null }],
162
+ "waves": [], "current_step": 0, "status": "running",
163
+ "_comment": "↓ OPTIONAL additive block present only if S_DECOMPOSE ran; absent → old flat-chain behavior",
164
+ "boundary_contract": {}, "execution_criteria": [], "task_decomposition": [], "goal_checklist_path": "" }
165
+ ```
166
+ Decomposition fields written ONLY if A_DECOMPOSE_TASKS produced them (additive; never break flat-chain readers)
167
+ 3. Initialize tracking via `TodoWrite`. The decomposition goal is bound by the user via the emitted `/goal` prompt
168
+ 4. If `--super`: read `maestro-super.md`, follow it completely
169
+
170
+ </actions>
171
+
172
+ </state_machine>
173
+
174
+ <appendix>
175
+
176
+ ### Auto-Yes Flag Map
177
+
178
+ | Command | Auto Flag | Effect |
179
+ |---------|-----------|--------|
180
+ | maestro-init | `-y` | Skip interactive questioning |
181
+ | maestro-analyze | `-y` | Skip scoping, auto-deepen |
182
+ | maestro-brainstorm | `-y` | Skip questions, use defaults |
183
+ | maestro-roadmap | `-y` | Skip questions (create/revise/review) |
184
+ | maestro-impeccable | `-y` | Auto-select design variant + skip confirmations |
185
+ | maestro-plan | `-y` | Skip confirmations and clarification |
186
+ | maestro-execute | `-y` | Skip confirmations, blocked auto-continue |
187
+ | quality-auto-test | `-y` | Skip plan confirmation |
188
+ | quality-test | `-y --auto-fix` | Auto-trigger gap-fix loop |
189
+ | quality-retrospective | `-y` | Accept all routing recommendations |
190
+ | maestro-milestone-complete | `-y` | Skip knowledge promotion |
191
+
192
+ Unlisted commands have no auto flags.
193
+
194
+ ### Error Codes
195
+
196
+ | Code | Severity | Description | Recovery |
197
+ |------|----------|-------------|----------|
198
+ | E001 | error | No intent and project not initialized | Prompt or suggest maestro-init |
199
+ | E002 | error | Clarity too low after 2 rounds | Show parsed intent, ask rephrase |
200
+ | E003 | error | Chain step failed + user abort | Record partial, suggest -c resume |
201
+ | E004 | error | Resume session not found | Show available sessions |
202
+ | W001 | warning | Ambiguous intent, multiple chains | Present options |
203
+ | W002 | warning | Step completed with warnings | Log and continue |
204
+ | W003 | warning | State suggests different chain | Show discrepancy |
205
+
206
+ ### Success Criteria
207
+
208
+ - [ ] Intent classified with task_type, complexity, clarity_score
209
+ - [ ] Broad lifecycle intents decomposed (S_DECOMPOSE, ≤3 boundary questions) sharing maestro-ralph contract; narrow/single-step skip
210
+ - [ ] Decomposition writes additive block + goal-checklist.md + post-goal-audit node; emits /goal bind prompt (no self-call, no phantom create_goal)
211
+ - [ ] Chain selected and confirmed (or auto-confirmed)
212
+ - [ ] Session dir created with status.json before execution; decomposition fields additive-only
213
+ - [ ] Tracking via TodoWrite (Claude); status.json steps[] grown dynamically by ralph-execute post-goal-audit
214
+ - [ ] Auto flags propagated to supporting commands only
215
+ - [ ] All chains dispatched via maestro-ralph-execute
216
+ - [ ] Low-complexity intents routed to maestro-quick
217
+ - [ ] (super) Requirements validated before roadmap
218
+ - [ ] (super) Each milestone scored >= 80%
219
+
220
+ </appendix>