maestro-flow 0.4.10 → 0.4.11

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 (226) hide show
  1. package/.agents/agents/cli-explore-agent.md +189 -0
  2. package/.agents/agents/conceptual-planning-agent.md +247 -0
  3. package/.agents/agents/impeccable-agent.md +101 -0
  4. package/.agents/agents/team-supervisor.md +145 -0
  5. package/.agents/agents/team-worker.md +239 -0
  6. package/.agents/agents/ui-design-agent.md +289 -0
  7. package/.agents/agents/workflow-analyzer.md +117 -0
  8. package/.agents/agents/workflow-codebase-mapper.md +79 -0
  9. package/.agents/agents/workflow-collab-planner.md +145 -0
  10. package/.agents/agents/workflow-debugger.md +105 -0
  11. package/.agents/agents/workflow-executor.md +134 -0
  12. package/.agents/agents/workflow-external-researcher.md +88 -0
  13. package/.agents/agents/workflow-integration-checker.md +85 -0
  14. package/.agents/agents/workflow-nyquist-auditor.md +87 -0
  15. package/.agents/agents/workflow-phase-researcher.md +87 -0
  16. package/.agents/agents/workflow-plan-checker.md +92 -0
  17. package/.agents/agents/workflow-planner.md +197 -0
  18. package/.agents/agents/workflow-project-researcher.md +76 -0
  19. package/.agents/agents/workflow-research-synthesizer.md +72 -0
  20. package/.agents/agents/workflow-reviewer.md +84 -0
  21. package/.agents/agents/workflow-roadmapper.md +83 -0
  22. package/.agents/agents/workflow-verifier.md +122 -0
  23. package/.agents/skills/codify-to-knowhow/SKILL.md +169 -0
  24. package/.agents/skills/codify-to-knowhow/phases/01-load-manifest.md +101 -0
  25. package/.agents/skills/codify-to-knowhow/phases/02-generate-knowhow.md +97 -0
  26. package/.agents/skills/codify-to-knowhow/phases/03-generate-specs.md +92 -0
  27. package/.agents/skills/codify-to-knowhow/phases/04-index-verify.md +119 -0
  28. package/.agents/skills/learn-decompose/SKILL.md +118 -0
  29. package/.agents/skills/learn-follow/SKILL.md +129 -0
  30. package/.agents/skills/learn-investigate/SKILL.md +154 -0
  31. package/.agents/skills/learn-retro/SKILL.md +159 -0
  32. package/.agents/skills/learn-second-opinion/SKILL.md +124 -0
  33. package/.agents/skills/maestro/SKILL.md +224 -0
  34. package/.agents/skills/maestro-amend/SKILL.md +165 -0
  35. package/.agents/skills/maestro-analyze/SKILL.md +135 -0
  36. package/.agents/skills/maestro-brainstorm/SKILL.md +118 -0
  37. package/.agents/skills/maestro-collab/SKILL.md +174 -0
  38. package/.agents/skills/maestro-composer/SKILL.md +181 -0
  39. package/.agents/skills/maestro-execute/SKILL.md +133 -0
  40. package/.agents/skills/maestro-fork/SKILL.md +88 -0
  41. package/.agents/skills/maestro-guard/SKILL.md +103 -0
  42. package/.agents/skills/maestro-help/SKILL.md +266 -0
  43. package/.agents/skills/maestro-help/index/catalog.json +184 -0
  44. package/.agents/skills/maestro-help/phases/01-parse-intent.md +122 -0
  45. package/.agents/skills/maestro-help/phases/02-search-present.md +181 -0
  46. package/.agents/skills/maestro-help/phases/03-workflow-guide.md +186 -0
  47. package/.agents/skills/maestro-impeccable/SKILL.md +251 -0
  48. package/.agents/skills/maestro-init/SKILL.md +80 -0
  49. package/.agents/skills/maestro-learn/SKILL.md +142 -0
  50. package/.agents/skills/maestro-merge/SKILL.md +66 -0
  51. package/.agents/skills/maestro-milestone-audit/SKILL.md +70 -0
  52. package/.agents/skills/maestro-milestone-complete/SKILL.md +77 -0
  53. package/.agents/skills/maestro-milestone-release/SKILL.md +98 -0
  54. package/.agents/skills/maestro-overlay/SKILL.md +180 -0
  55. package/.agents/skills/maestro-plan/SKILL.md +172 -0
  56. package/.agents/skills/maestro-player/SKILL.md +177 -0
  57. package/.agents/skills/maestro-quick/SKILL.md +67 -0
  58. package/.agents/skills/maestro-ralph/SKILL.md +685 -0
  59. package/.agents/skills/maestro-ralph-execute/SKILL.md +259 -0
  60. package/.agents/skills/maestro-roadmap/SKILL.md +170 -0
  61. package/.agents/skills/maestro-tools-execute/SKILL.md +119 -0
  62. package/.agents/skills/maestro-tools-register/SKILL.md +159 -0
  63. package/.agents/skills/maestro-ui-codify/SKILL.md +82 -0
  64. package/.agents/skills/maestro-update/SKILL.md +178 -0
  65. package/.agents/skills/maestro-verify/SKILL.md +111 -0
  66. package/.agents/skills/manage-codebase-rebuild/SKILL.md +77 -0
  67. package/.agents/skills/manage-codebase-refresh/SKILL.md +59 -0
  68. package/.agents/skills/manage-harvest/SKILL.md +96 -0
  69. package/.agents/skills/manage-issue/SKILL.md +75 -0
  70. package/.agents/skills/manage-issue-discover/SKILL.md +83 -0
  71. package/.agents/skills/manage-knowhow/SKILL.md +79 -0
  72. package/.agents/skills/manage-knowhow-capture/SKILL.md +81 -0
  73. package/.agents/skills/manage-learn/SKILL.md +67 -0
  74. package/.agents/skills/manage-status/SKILL.md +54 -0
  75. package/.agents/skills/manage-wiki/SKILL.md +64 -0
  76. package/.agents/skills/quality-auto-test/SKILL.md +138 -0
  77. package/.agents/skills/quality-debug/SKILL.md +122 -0
  78. package/.agents/skills/quality-refactor/SKILL.md +69 -0
  79. package/.agents/skills/quality-retrospective/SKILL.md +79 -0
  80. package/.agents/skills/quality-review/SKILL.md +130 -0
  81. package/.agents/skills/quality-sync/SKILL.md +53 -0
  82. package/.agents/skills/quality-test/SKILL.md +119 -0
  83. package/.agents/skills/security-audit/SKILL.md +157 -0
  84. package/.agents/skills/skill-iter-tune/SKILL.md +384 -0
  85. package/.agents/skills/skill-iter-tune/phases/01-setup.md +144 -0
  86. package/.agents/skills/skill-iter-tune/phases/02-execute.md +292 -0
  87. package/.agents/skills/skill-iter-tune/phases/03-evaluate.md +312 -0
  88. package/.agents/skills/skill-iter-tune/phases/04-improve.md +186 -0
  89. package/.agents/skills/skill-iter-tune/phases/05-report.md +166 -0
  90. package/.agents/skills/skill-iter-tune/specs/evaluation-criteria.md +63 -0
  91. package/.agents/skills/skill-iter-tune/templates/eval-prompt.md +134 -0
  92. package/.agents/skills/skill-iter-tune/templates/execute-prompt.md +97 -0
  93. package/.agents/skills/spec-add/SKILL.md +70 -0
  94. package/.agents/skills/spec-load/SKILL.md +73 -0
  95. package/.agents/skills/spec-remove/SKILL.md +53 -0
  96. package/.agents/skills/spec-setup/SKILL.md +50 -0
  97. package/.agents/skills/team-coordinate/SKILL.md +268 -0
  98. package/.agents/skills/team-coordinate/roles/coordinator/commands/analyze-task.md +247 -0
  99. package/.agents/skills/team-coordinate/roles/coordinator/commands/dispatch.md +131 -0
  100. package/.agents/skills/team-coordinate/roles/coordinator/commands/monitor.md +358 -0
  101. package/.agents/skills/team-coordinate/roles/coordinator/role.md +365 -0
  102. package/.agents/skills/team-coordinate/specs/knowledge-transfer.md +111 -0
  103. package/.agents/skills/team-coordinate/specs/pipelines.md +97 -0
  104. package/.agents/skills/team-coordinate/specs/quality-gates.md +112 -0
  105. package/.agents/skills/team-coordinate/specs/role-spec-template.md +198 -0
  106. package/.agents/skills/team-executor/SKILL.md +191 -0
  107. package/.agents/skills/team-executor/roles/executor/commands/monitor.md +239 -0
  108. package/.agents/skills/team-executor/roles/executor/role.md +171 -0
  109. package/.agents/skills/team-executor/specs/session-schema.md +264 -0
  110. package/.agents/skills/team-lifecycle-v4/SKILL.md +211 -0
  111. package/.agents/skills/team-lifecycle-v4/roles/analyst/role.md +96 -0
  112. package/.agents/skills/team-lifecycle-v4/roles/coordinator/commands/analyze.md +56 -0
  113. package/.agents/skills/team-lifecycle-v4/roles/coordinator/commands/dispatch.md +56 -0
  114. package/.agents/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +206 -0
  115. package/.agents/skills/team-lifecycle-v4/roles/coordinator/role.md +130 -0
  116. package/.agents/skills/team-lifecycle-v4/roles/executor/commands/fix.md +35 -0
  117. package/.agents/skills/team-lifecycle-v4/roles/executor/commands/implement.md +62 -0
  118. package/.agents/skills/team-lifecycle-v4/roles/executor/role.md +69 -0
  119. package/.agents/skills/team-lifecycle-v4/roles/planner/role.md +87 -0
  120. package/.agents/skills/team-lifecycle-v4/roles/reviewer/commands/review-code.md +34 -0
  121. package/.agents/skills/team-lifecycle-v4/roles/reviewer/commands/review-spec.md +44 -0
  122. package/.agents/skills/team-lifecycle-v4/roles/reviewer/role.md +71 -0
  123. package/.agents/skills/team-lifecycle-v4/roles/supervisor/role.md +194 -0
  124. package/.agents/skills/team-lifecycle-v4/roles/tester/role.md +89 -0
  125. package/.agents/skills/team-lifecycle-v4/roles/writer/role.md +97 -0
  126. package/.agents/skills/team-lifecycle-v4/specs/knowledge-transfer.md +114 -0
  127. package/.agents/skills/team-lifecycle-v4/specs/pipelines.md +140 -0
  128. package/.agents/skills/team-lifecycle-v4/specs/quality-gates.md +130 -0
  129. package/.agents/skills/team-lifecycle-v4/templates/architecture.md +254 -0
  130. package/.agents/skills/team-lifecycle-v4/templates/epics.md +196 -0
  131. package/.agents/skills/team-lifecycle-v4/templates/product-brief.md +133 -0
  132. package/.agents/skills/team-lifecycle-v4/templates/requirements.md +224 -0
  133. package/.agents/skills/team-quality-assurance/SKILL.md +149 -0
  134. package/.agents/skills/team-quality-assurance/roles/analyst/role.md +90 -0
  135. package/.agents/skills/team-quality-assurance/roles/coordinator/commands/analyze.md +72 -0
  136. package/.agents/skills/team-quality-assurance/roles/coordinator/commands/dispatch.md +111 -0
  137. package/.agents/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +250 -0
  138. package/.agents/skills/team-quality-assurance/roles/coordinator/role.md +143 -0
  139. package/.agents/skills/team-quality-assurance/roles/executor/role.md +68 -0
  140. package/.agents/skills/team-quality-assurance/roles/generator/role.md +70 -0
  141. package/.agents/skills/team-quality-assurance/roles/scout/role.md +77 -0
  142. package/.agents/skills/team-quality-assurance/roles/strategist/role.md +73 -0
  143. package/.agents/skills/team-quality-assurance/specs/pipelines.md +115 -0
  144. package/.agents/skills/team-quality-assurance/specs/team-config.json +131 -0
  145. package/.agents/skills/team-review/SKILL.md +149 -0
  146. package/.agents/skills/team-review/roles/coordinator/commands/analyze.md +71 -0
  147. package/.agents/skills/team-review/roles/coordinator/commands/dispatch.md +91 -0
  148. package/.agents/skills/team-review/roles/coordinator/commands/monitor.md +224 -0
  149. package/.agents/skills/team-review/roles/coordinator/role.md +132 -0
  150. package/.agents/skills/team-review/roles/fixer/role.md +78 -0
  151. package/.agents/skills/team-review/roles/reviewer/role.md +70 -0
  152. package/.agents/skills/team-review/roles/scanner/role.md +81 -0
  153. package/.agents/skills/team-review/specs/dimensions.md +82 -0
  154. package/.agents/skills/team-review/specs/finding-schema.json +82 -0
  155. package/.agents/skills/team-review/specs/pipelines.md +102 -0
  156. package/.agents/skills/team-review/specs/team-config.json +27 -0
  157. package/.agents/skills/team-tech-debt/SKILL.md +130 -0
  158. package/.agents/skills/team-tech-debt/roles/assessor/role.md +79 -0
  159. package/.agents/skills/team-tech-debt/roles/coordinator/commands/analyze.md +47 -0
  160. package/.agents/skills/team-tech-debt/roles/coordinator/commands/dispatch.md +156 -0
  161. package/.agents/skills/team-tech-debt/roles/coordinator/commands/monitor.md +209 -0
  162. package/.agents/skills/team-tech-debt/roles/coordinator/role.md +123 -0
  163. package/.agents/skills/team-tech-debt/roles/executor/role.md +78 -0
  164. package/.agents/skills/team-tech-debt/roles/planner/role.md +71 -0
  165. package/.agents/skills/team-tech-debt/roles/scanner/role.md +92 -0
  166. package/.agents/skills/team-tech-debt/roles/validator/role.md +80 -0
  167. package/.agents/skills/team-tech-debt/specs/pipelines.md +47 -0
  168. package/.agents/skills/team-tech-debt/specs/team-config.json +129 -0
  169. package/.agents/skills/team-testing/SKILL.md +145 -0
  170. package/.agents/skills/team-testing/roles/analyst/role.md +105 -0
  171. package/.agents/skills/team-testing/roles/coordinator/commands/analyze.md +70 -0
  172. package/.agents/skills/team-testing/roles/coordinator/commands/dispatch.md +108 -0
  173. package/.agents/skills/team-testing/roles/coordinator/commands/monitor.md +257 -0
  174. package/.agents/skills/team-testing/roles/coordinator/role.md +134 -0
  175. package/.agents/skills/team-testing/roles/executor/role.md +101 -0
  176. package/.agents/skills/team-testing/roles/generator/role.md +100 -0
  177. package/.agents/skills/team-testing/roles/strategist/role.md +85 -0
  178. package/.agents/skills/team-testing/specs/pipelines.md +101 -0
  179. package/.agents/skills/team-testing/specs/team-config.json +93 -0
  180. package/.agents/skills/wiki-connect/SKILL.md +64 -0
  181. package/.agents/skills/wiki-digest/SKILL.md +70 -0
  182. package/.agents/skills/workflow-skill-designer/SKILL.md +498 -0
  183. package/.agents/skills/workflow-skill-designer/phases/01-requirements-analysis.md +356 -0
  184. package/.agents/skills/workflow-skill-designer/phases/02-orchestrator-design.md +444 -0
  185. package/.agents/skills/workflow-skill-designer/phases/03-phase-design.md +458 -0
  186. package/.agents/skills/workflow-skill-designer/phases/04-validation.md +471 -0
  187. package/.agy/skills/maestro/SKILL.md +13 -11
  188. package/.agy/skills/maestro-ralph/SKILL.md +222 -87
  189. package/.claude/commands/maestro-ralph.md +222 -87
  190. package/.claude/commands/maestro.md +13 -11
  191. package/.codex/skills/maestro/SKILL.md +23 -17
  192. package/.codex/skills/maestro-ralph/SKILL.md +177 -67
  193. package/dist/src/commands/install-backend.d.ts +12 -0
  194. package/dist/src/commands/install-backend.d.ts.map +1 -1
  195. package/dist/src/commands/install-backend.js +144 -0
  196. package/dist/src/commands/install-backend.js.map +1 -1
  197. package/dist/src/core/component-defs.d.ts +6 -0
  198. package/dist/src/core/component-defs.d.ts.map +1 -1
  199. package/dist/src/core/component-defs.js +97 -0
  200. package/dist/src/core/component-defs.js.map +1 -1
  201. package/dist/src/tui/install-ui/ExtraMcpConfig.d.ts +11 -0
  202. package/dist/src/tui/install-ui/ExtraMcpConfig.d.ts.map +1 -0
  203. package/dist/src/tui/install-ui/ExtraMcpConfig.js +61 -0
  204. package/dist/src/tui/install-ui/ExtraMcpConfig.js.map +1 -0
  205. package/dist/src/tui/install-ui/InstallConfirm.d.ts +3 -0
  206. package/dist/src/tui/install-ui/InstallConfirm.d.ts.map +1 -1
  207. package/dist/src/tui/install-ui/InstallConfirm.js +1 -1
  208. package/dist/src/tui/install-ui/InstallConfirm.js.map +1 -1
  209. package/dist/src/tui/install-ui/InstallExecution.d.ts +2 -0
  210. package/dist/src/tui/install-ui/InstallExecution.d.ts.map +1 -1
  211. package/dist/src/tui/install-ui/InstallExecution.js +14 -2
  212. package/dist/src/tui/install-ui/InstallExecution.js.map +1 -1
  213. package/dist/src/tui/install-ui/InstallFlow.d.ts +1 -1
  214. package/dist/src/tui/install-ui/InstallFlow.d.ts.map +1 -1
  215. package/dist/src/tui/install-ui/InstallFlow.js +16 -3
  216. package/dist/src/tui/install-ui/InstallFlow.js.map +1 -1
  217. package/dist/src/tui/install-ui/InstallHub.d.ts +2 -0
  218. package/dist/src/tui/install-ui/InstallHub.d.ts.map +1 -1
  219. package/dist/src/tui/install-ui/InstallHub.js +8 -0
  220. package/dist/src/tui/install-ui/InstallHub.js.map +1 -1
  221. package/dist/src/tui/install-ui/InstallResult.d.ts.map +1 -1
  222. package/dist/src/tui/install-ui/InstallResult.js +3 -1
  223. package/dist/src/tui/install-ui/InstallResult.js.map +1 -1
  224. package/dist/src/utils/update-notices.js +19 -0
  225. package/dist/src/utils/update-notices.js.map +1 -1
  226. package/package.json +5 -2
@@ -18,8 +18,25 @@ Session at `.workflow/.maestro/ralph-{YYYYMMDD-HHmmss}/status.json`.
18
18
  Codex specifics:
19
19
  - **No agent spawning** — skills run directly in coordinator context, sequentially, one step at a time.
20
20
  - **Goal created via built-in tool** — `create_goal` binds the decomposed sub-goal checklist as a
21
- hard objective; `update_plan` mirrors steps; `update_goal` releases on convergence. Codex
22
- registers the goal itself via `create_goal`.
21
+ hard objective; `update_plan` mirrors steps; `update_goal` releases on convergence.
22
+
23
+ ### 执行方式 / Execution Flow
24
+
25
+ ```
26
+ $maestro-ralph "intent" ─▶ coordinator infer → decompose → build chain
27
+ │ writes status.json (truth)
28
+ │ renders goal-checklist.md (projection, Resume 区块指向 $maestro-ralph execute)
29
+ │ create_goal({success_criteria: sub-goals})
30
+
31
+ step loop (in-context, sequential)
32
+ │ skill → run directly, read artifacts
33
+ │ decision → delegate analyze OR structural evaluate
34
+ │ unmet sub-goals → insert scoped mini-loops (steps[] grows)
35
+ └─ persist status.json + update_plan after every step
36
+ all_met → update_goal(complete) → milestone-complete
37
+ ```
38
+
39
+ `status.json` 为唯一真源;checklist 为渲染视图;`steps[]` 按需生长(`post-goal-audit`、`post-verify/review/test` 决策节点)。Resume 入口统一走 `$maestro-ralph execute`(或 `continue`)。
23
40
  </purpose>
24
41
 
25
42
  <context>
@@ -65,8 +82,8 @@ $ARGUMENTS -- intent text, flags, or keywords.
65
82
  <states>
66
83
  S_PARSE_ROUTE -- 解析参数、路由入口点 PERSIST: --
67
84
  S_STATUS -- 显示 session 进度后结束 PERSIST: --
68
- S_INFER -- 推断生命周期位置 PERSIST: session.lifecycle_position
69
- S_RESOLVE_PHASE -- 解析目标 phase PERSIST: session.phase
85
+ S_RESOLVE_PHASE -- 解析目标 phase + 标记 phase_is_new PERSIST: session.phase, session.phase_is_new
86
+ S_INFER -- 基于已解析 phase 推断 lifecycle_position PERSIST: session.lifecycle_position
70
87
  S_QUALITY_MODE -- 确定质量模式 full/standard/quick PERSIST: session.quality_mode
71
88
  S_DECOMPOSE -- 边界澄清、写执行准则+子目标、建 goal PERSIST: session.boundary_contract, .execution_criteria, .task_decomposition
72
89
  S_BUILD_CHAIN -- 构建步骤链 PERSIST: session.steps[]
@@ -88,18 +105,18 @@ S_PARSE_ROUTE:
88
105
  -> S_STATUS WHEN: intent == "status"
89
106
  -> S_LOAD_NEXT WHEN: intent == "execute" | "continue"
90
107
  -> S_DECISION_EVAL WHEN: running session with decision step in "running"
91
- -> S_INFER WHEN: intent non-empty
108
+ -> S_RESOLVE_PHASE WHEN: intent non-empty -- phase 必须先于 position
92
109
  -> S_FALLBACK WHEN: no intent AND no running session
93
110
 
94
111
  S_STATUS -> END DO: A_SHOW_STATUS
95
112
 
113
+ S_RESOLVE_PHASE:
114
+ -> S_INFER DO: A_RESOLVE_PHASE
115
+
96
116
  S_INFER:
97
- -> S_RESOLVE_PHASE WHEN: position resolved DO: A_INFER_POSITION
117
+ -> S_QUALITY_MODE WHEN: position resolved DO: A_INFER_POSITION
98
118
  -> S_FALLBACK WHEN: cannot infer
99
119
 
100
- S_RESOLVE_PHASE:
101
- -> S_QUALITY_MODE DO: A_RESOLVE_PHASE
102
-
103
120
  S_QUALITY_MODE:
104
121
  -> S_DECOMPOSE DO: A_DETERMINE_QUALITY_MODE
105
122
 
@@ -162,6 +179,8 @@ S_FALLBACK -> S_PARSE_ROUTE WHEN: user input | -> END WHEN: cancel
162
179
 
163
180
  ### A_INFER_POSITION
164
181
 
182
+ **前置依赖**:A_RESOLVE_PHASE 已写入 `session.phase` 与 `session.phase_is_new`。
183
+
165
184
  **Intent-based override**: brainstorm pattern -> position = brainstorm.
166
185
 
167
186
  **Bootstrap detection**:
@@ -171,18 +190,22 @@ S_FALLBACK -> S_PARSE_ROUTE WHEN: user input | -> END WHEN: cancel
171
190
  | No .workflow/ + no source | brainstorm |
172
191
  | No .workflow/ + has source | init |
173
192
  | Has .workflow/ but no state.json | init |
174
- | Has state.json | artifact-based inference |
193
+ | Has state.json | phase-aware artifact inference |
175
194
 
176
- **Artifact-based inference:** Filter by current_milestone + target phase:
195
+ **Phase-aware artifact inference** (使用 `session.phase` + `session.phase_is_new`):
177
196
 
178
197
  | Condition | Position |
179
198
  |-----------|----------|
199
+ | `phase_is_new == true` (intent 派生的新 phase, state.json 中无) | **`analyze`** (强制从头起) |
180
200
  | no milestones defined or no roadmap.md | `roadmap` |
181
- | no artifacts for target phase | `analyze` |
182
- | latest artifact = analyze | `plan` |
183
- | latest artifact = plan | `execute` |
184
- | latest artifact = execute | `verify` |
185
- | latest artifact = verify | refine from result files |
201
+ | `phase == null` (brainstorm/init/roadmap 已由 override 决定) | n/a |
202
+ | phase 已存在 + no artifacts for that phase | `analyze` |
203
+ | phase 已存在 + latest artifact = analyze | `plan` |
204
+ | phase 已存在 + latest artifact = plan | `execute` |
205
+ | phase 已存在 + latest artifact = execute | `verify` |
206
+ | phase 已存在 + latest artifact = verify | → refine from result files |
207
+
208
+ **关键不变量**:artifact 过滤必须用 `session.phase`(A_RESOLVE_PHASE 已写入),而不是 state.json.current_phase。当 `phase_is_new` 时跳过过滤直接走 `analyze`,避免错用其他 phase 的 artifact 推断位置。
186
209
 
187
210
  **Refine from verify results:**
188
211
 
@@ -198,7 +221,24 @@ S_FALLBACK -> S_PARSE_ROUTE WHEN: user input | -> END WHEN: cancel
198
221
 
199
222
  ### A_RESOLVE_PHASE
200
223
 
201
- Priority: regex from intent `phase\s*(\d+)` -> latest in-progress artifact's phase -> first incomplete phase -> null (brainstorm/init/roadmap) -> request_user_input if ambiguous.
224
+ **前置于 A_INFER_POSITION**——position 推断需要先知道 target phase 是否在 state.json 中已存在。
225
+
226
+ **Priority (产出 `phase` + `phase_is_new` 二元组):**
227
+
228
+ | Step | 行为 | phase_is_new |
229
+ |------|------|--------------|
230
+ | 1 | intent 匹配 `phase\s*(\d+)` 正则 → 取 state.json 中对应 phase | false |
231
+ | 2 | intent 派生短语(如 "docs-site-redesign", "auth-refactor")→ 在 state.json.milestones[*].phases / artifacts[*].path 中查找 | false (匹配) / **true (无匹配)** |
232
+ | 3 | 未派生 → 取最新 in-progress artifact 的 phase | false |
233
+ | 4 | 仍无 → state.json 首个 incomplete phase | false |
234
+ | 5 | position 将是 brainstorm/init/roadmap → phase = null | n/a |
235
+ | 6 | 仍模糊 → `request_user_input`(新 phase / 已存在 phase 二选一) | 由用户回答 |
236
+
237
+ **写入 session**: `phase` (string 或 null) + `phase_is_new` (bool)。`phase_is_new=true` 表示当前 milestone 下需要为该 phase 创建全套生命周期。
238
+
239
+ **新派生 phase 时 milestone 处理**:
240
+ - state.json 当前 milestone 仍 active → 沿用,仅新增 phase
241
+ - intent 派生新 milestone 名 → 仅写入 session 作标签;state.json.milestones 由后续 `maestro-roadmap` / `maestro-milestone-release` 真实创建。禁止 session 层面虚构 milestone 直接改 state.json
202
242
 
203
243
  ### A_DETERMINE_QUALITY_MODE
204
244
 
@@ -274,17 +314,23 @@ Goal stays bound until A_APPLY_GOAL_DONE / A_FINALIZE calls `update_goal`. Skipp
274
314
  | goal-audit | *(decision-only, no skill)* | — | all (only if decomposed) | post-goal-audit |
275
315
  | milestone-complete | maestro-milestone-complete | no | all | post-milestone |
276
316
 
277
- **Build rules:**
278
- 1. Start from `lifecycle_position`, end at `milestone-complete`
279
- 2. Skip stages with existing completed artifacts (check state.json)
280
- 3. Filter stages by `quality_mode` skip non-applicable stages (see Quality Mode column)
281
- 4. Quick mode: `review` appends `--tier quick`; skips `business-test`, `test-gen`, `test`
282
- 5. Insert decision node after each stage with non-empty Decision column: `{ type: "decision", decision: "<gate>", retry_count: 0, max_retries: 2 }`
283
- 6. **If `task_decomposition` present**: insert a `goal-audit` pure-decision node (no skill) immediately before `milestone-complete` `decision:post-goal-audit`
284
- 7. Step type for runnable stages = `"skill"` (executed directly in-context, no spawn). `barrier` field retained as optional metadata only — execution is sequential regardless
285
- 8. Args use placeholders `{phase}`, `{intent}`, `{dirs}` — resolved at step execution time
286
- 9. Append `-y` to all skill args when `auto_mode` is true (see -y propagation table in context)
287
- 10. Dynamically-inserted steps (by `post-goal-audit` / fix-loops) carry optional `goal_ref: "G{n}"`
317
+ **Build rules (按顺序应用):**
318
+ 1. **起点**:从 `session.lifecycle_position` 开始;不读 `state.json.current_phase`
319
+ 2. **跳过已完成**:跳过 (session.phase + current_milestone) 下已完成的 artifact 对应 stage;artifact 过滤按 `session.phase`,不按 state.json 当前 phase
320
+ 3. **quality_mode 过滤**:按 `session.quality_mode` 排除上表 Quality Mode 列不包含该模式的 stage
321
+ 4. Quick mode 特例:`review` 追加 `--tier quick`;跳过 `business-test`, `test-gen`, `test`
322
+ 5. **决策节点**:每个 Decision after 非空的 stage 之后插入 `{ type: "decision", decision: "<gate>", retry_count: 0, max_retries: 2 }`
323
+ 6. **goal-audit 插入**:当且仅当 `task_decomposition` 存在 在最后一个 evidence-producing stage(verify/review/test)之后、`milestone-complete` 之前插入 `decision:post-goal-audit`
324
+ 7. **终点硬约束**:chain 必须以 `milestone-complete` 步骤结尾(除非 `lifecycle_position` 已是 `milestone-complete` 之后的状态)。生成器在收尾时不论 quality_mode 都必须 append step
325
+ 8. **初始 goal_ref 传播**:若 `task_decomposition` 存在,遍历每个新建 step
326
+ - 计算 `step.stage`(execute/verify/review 等)
327
+ - 对每个 `g task_decomposition`:若 `step.stage g.lifecycle` → `step.goal_ref = g.id`
328
+ - 多 G 匹配 → 取 id 字典序最小者;保证 verify/review 等共用 lifecycle 的 step 也有可追溯标签
329
+ - decision 节点不打 goal_ref(goal-audit 自身除外)
330
+ 9. Step type for runnable stages = `"skill"`(直接 in-context 执行,无 spawn);`barrier` 字段保留为可选 metadata,执行始终顺序
331
+ 10. Args 用 `{phase}`, `{intent}`, `{dirs}` 占位符 — 执行时解析
332
+ 11. `auto_mode=true` 时给所有 skill args 追加 `-y`(见 -y propagation table)
333
+ 12. 动态插入的 step(A_APPLY_GOAL_FIX / A_INSERT_FIX_LOOP)同样按规则 8 打 `goal_ref` —— A_APPLY_GOAL_FIX 用触发它的 G{n}
288
334
 
289
335
  ### A_CREATE_SESSION
290
336
 
@@ -314,22 +360,39 @@ Direct in-context skill invocation — **replaces the old spawn/wave/CSV mechani
314
360
 
315
361
  ### A_GOAL_AUDIT_EVALUATE
316
362
 
317
- Re-checks the goal-checklist and decides whether `steps[]` must dynamically grow. Only runs when `task_decomposition` present.
363
+ Re-checks sub-goals against `status.json` (source of truth). Runs only when `task_decomposition` present.
318
364
 
319
- 1. Read `session.task_decomposition` + `goal_checklist_path`
320
- 2. For each sub-goal `status != "done"`: resolve its `evidence` artifact under the current phase scratch dir
365
+ 1. Read `session.task_decomposition` from status.json (NOT from checklist — checklist is just a view)
366
+ 2. For each sub-goal `status != "done"`: resolve `evidence` artifact under current phase scratch dir
321
367
  3. Delegate read-only audit:
322
368
  ```
323
- maestro delegate "PURPOSE: 审计子目标达成情况,决定是否需要补充执行步骤
324
- TASK: 逐个读取未完成子目标的 evidence 产物 | 对照 done_when 判定 met/unmet | 给出每个 unmet 子目标的差距与目标 phase
325
- CONTEXT: @{goal_checklist_path} @{evidence artifacts} | 执行准则: {execution_criteria} | 边界: {boundary_contract}
326
- EXPECTED: ---VERDICT--- STATUS(all_met|has_unmet) / UNMET=[{id:G2,gap:'...',target_phase:execute}] / CONFIDENCE_SCORE(0-100) ---END---
327
- CONSTRAINTS: 只评估不修改 | 严格按 done_when 判定 | 不得超出 boundary_contract"
369
+ maestro delegate "PURPOSE: 审计未完成子目标,判定哪些已达成、哪些仍需补步骤
370
+ TASK:
371
+ 1. 读取 status.json.task_decomposition 中每个 status!=done 的子目标
372
+ 2. 打开其 evidence 产物,对照 done_when 严格判定
373
+ 3. 输出 met / unmet,unmet 给出差距与应回补 target_phase
374
+ CONTEXT:
375
+ status.json = {session_dir}/status.json
376
+ checklist = {goal_checklist_path} (人类视图,仅供参考)
377
+ evidence = {evidence artifacts}
378
+ 执行准则 = {execution_criteria}
379
+ 边界契约 = {boundary_contract}
380
+ EXPECTED (单行 verdict 块):
381
+ ---VERDICT---
382
+ STATUS=all_met|has_unmet
383
+ UNMET=[{id:G2,gap:'...',target_phase:execute}, ...]
384
+ CONFIDENCE_SCORE=0-100
385
+ ---END---
386
+ CONSTRAINTS:
387
+ - 只评估,不修改任何文件
388
+ - 严格按 done_when;evidence 缺失 → unmet
389
+ - 不得超出 boundary_contract
390
+ "
328
391
  --role analyze --mode analysis
329
392
  ```
330
- 4. On result: parse UNMET. For each met sub-goal → set `task_decomposition[i].status="done"` + flip `[ ]→[x]` in goal-checklist.md
331
- 5. Verdict: `all_met` → A_APPLY_GOAL_DONE; `has_unmet` → A_APPLY_GOAL_FIX
332
- GUARD: retry_count >= max_retries AND still unmet → escalate (insert quality-debug, S_PAUSED for human)
393
+ 4. On result: parse UNMET。**status.json 为写入目标** —— 对每个已达成子目标置 `task_decomposition[i].status="done"` + `completed_at=now`,然后从 status.json 重渲染 checklist(见 Sync Rule)
394
+ 5. Verdict: `all_met` → A_APPLY_GOAL_DONE;`has_unmet` → A_APPLY_GOAL_FIX
395
+ GUARD: retry_count >= max_retries AND still unmet → escalate(插入 quality-debugS_PAUSED 等人)
333
396
 
334
397
  ### A_STRUCTURAL_EVALUATE
335
398
 
@@ -355,11 +418,11 @@ Insert fix template by decision type after current position, reindex:
355
418
 
356
419
  ### A_APPLY_GOAL_DONE
357
420
 
358
- 1. Set all `task_decomposition[*].status="done"`, persist status.json
359
- 2. Append `ALL_GOALS_DONE` sentinel to goal-checklist.md
360
- 3. `update_goal({ status: "complete" })` releases the decomposition goal constraint
361
- 4. Mark goal-audit decision completed; proceed to `milestone-complete`
362
- 5. Display: ◆ Goal audit: 全部子目标达成 ✓ — goal 已释放
421
+ 1. status.json(真源):全部 `task_decomposition[*].status="done"` + `completed_at=now` + 顶层 `task_decomposition_all_done=true`
422
+ 2. status.json 重渲染 `goal-checklist.md`(见 Sync Rule)—— 复选框全 `[x]`,文件末追加 `ALL_GOALS_DONE` 哨兵
423
+ 3. `update_goal({ status: "complete" })` —— 释放分解 goal 约束
424
+ 4. 标记 goal-audit decision 完成;继续到 `milestone-complete`
425
+ 5. Display: ◆ Goal audit: 全部子目标达成 ✓ — status.json + checklist + goal 已同步
363
426
 
364
427
  ### A_ADVANCE_MILESTONE
365
428
 
@@ -383,7 +446,14 @@ Update session: milestone, phase, reset passed_gates. Re-infer quality_mode. Bui
383
446
  1. Find latest ralph session
384
447
  2. Display: Session, Status, Position, Quality mode, Progress, Current step
385
448
  3. List steps: [✓] done, [▸] running, [ ] pending, [◆] decision (with goal_ref if set)
386
- 4. If `task_decomposition` present: show `Sub-goals: {done}/{total}` + unmet G-ids (graceful skip if absent backward compat)
449
+ 4. If `task_decomposition` present (else 跳过向后兼容):
450
+ ```
451
+ Sub-goals ({done}/{total}) source: {session_dir}/status.json#/task_decomposition
452
+ [x] G1 done_when={done_when} evidence={evidence}
453
+ [ ] G2 done_when={done_when} evidence={evidence} ◀ unmet
454
+ Checklist view: {goal_checklist_path} (从 status.json 重渲染)
455
+ ```
456
+ 状态直读 `status.json.task_decomposition[*].status`;checklist 是视图,冲突以 JSON 为准。
387
457
 
388
458
  </actions>
389
459
 
@@ -397,8 +467,10 @@ Update session: milestone, phase, reset passed_gates. Re-infer quality_mode. Bui
397
467
  {
398
468
  "session_id": "ralph-{YYYYMMDD-HHmmss}",
399
469
  "source": "ralph", "intent": "", "status": "running|paused|completed",
400
- "lifecycle_position": "", "phase": null, "milestone": null,
401
- "auto_mode": false, "quality_mode": "standard", "passed_gates": [],
470
+ "lifecycle_position": "", "phase": null, "phase_is_new": false, "milestone": null,
471
+ "auto_mode": false,
472
+ "quality_mode": "standard", // "full" | "standard" | "quick" — 由 A_DETERMINE_QUALITY_MODE 写入
473
+ "passed_gates": [],
402
474
  "context": { "issue_id": null, "scratch_dir": null, "plan_dir": null, "analysis_dir": null, "brainstorm_dir": null },
403
475
  "steps": [{ "index": 0, "type": "skill|decision", "skill": "", "args": "", "barrier": false, "status": "pending", "goal_ref": null }],
404
476
  "waves": [], "current_step": 0,
@@ -407,41 +479,73 @@ Update session: milestone, phase, reset passed_gates. Re-infer quality_mode. Bui
407
479
  "boundary_contract": { "in_scope": [], "out_of_scope": [], "constraints": [], "definition_of_done": "" },
408
480
  "execution_criteria": [],
409
481
  "task_decomposition": [
410
- { "id": "G1", "goal": "", "boundary": "", "done_when": "", "evidence": "", "lifecycle": [], "status": "pending|done" }
482
+ { "id": "G1", "goal": "", "boundary": "", "done_when": "", "evidence": "", "lifecycle": [], "status": "pending|done", "completed_at": null }
411
483
  ],
412
- "goal_checklist_path": ""
484
+ "task_decomposition_all_done": false,
485
+ "goal_checklist_path": "",
486
+ "goal_checklist_synced_at": null
413
487
  }
414
488
  ```
415
489
 
416
- > **Extensibility contract (two dimensions)**:
417
- > 1. **Schema-additive** decomposition block fields optional; absence = old behavior.
418
- > 2. **Step-dynamic** `steps[]` is a living array: `post-goal-audit` (and fix/escalate/milestone decisions) **append/reindex steps at runtime** until sub-goals converge. The JSON "extends" primarily by growing `steps[]`, not by freezing a plan. `goal_ref` (optional, default null) traces dynamically-added steps to the spawning sub-goal. `waves` retained as empty array for backward-compat (no longer populated — spawning removed).
490
+ **扩展约定**:
491
+ - Schema 加字段 = 可选(缺省 = 旧行为);不删/不改既有字段名。
492
+ - `steps[]` 是活数组:`post-goal-audit` `post-verify/review/test` 等决策节点按需追加+重排,子目标收敛即停。`goal_ref`(可选)回溯每条动态插入步骤所属子目标。`waves` 保留为空数组(spawning 已移除)。
419
493
 
420
- ### Goal Checklist Template
494
+ ### Goal Checklist Template (status.json projection)
421
495
 
422
- Written to `{session_dir}/goal-checklist.md`. Stable within the session; never renamed (so the registered `create_goal` success criteria stay traceable).
496
+ `{session_dir}/goal-checklist.md` `status.json` 的只读投影:不要手改,永远从 JSON 重渲染。文件名在 session 内稳定(`create_goal` 注册的 success_criteria 始终可追溯)。
423
497
 
424
498
  ```markdown
425
499
  # Ralph Goal Checklist — {session_id}
426
- > Intent: {intent}
500
+ <!-- AUTO-GENERATED from status.json. Source: ../status.json#/task_decomposition -->
501
+
502
+ > Intent : {intent}
503
+ > Source : `{session_dir}/status.json` (authoritative)
504
+ > Last sync : {ISO} Phase: {phase} Milestone: {milestone}
505
+
506
+ ## Resume / 恢复入口
507
+ **不要直接执行 skill,调用入口:**
508
+ ```
509
+ $maestro-ralph execute # 或 $maestro-ralph continue
510
+ ```
511
+ coordinator 评估下一步门控,按顺序在 in-context 中调用各 skill。
427
512
 
428
513
  ## 执行准则 / Execution Criteria
514
+ <!-- status.json#/execution_criteria -->
429
515
  - {criterion 1}
430
516
  - {criterion 2}
431
517
 
432
518
  ## 边界契约 / Boundary Contract
433
- - In scope: {in_scope}
434
- - Out of scope: {out_of_scope}
435
- - Constraints: {constraints}
436
- - Definition of Done: {definition_of_done}
519
+ <!-- status.json#/boundary_contract -->
520
+ - In scope : {in_scope}
521
+ - Out of scope : {out_of_scope}
522
+ - Constraints : {constraints}
523
+ - Definition of Done : {definition_of_done}
524
+
525
+ ## 子目标 / Sub-goals ({done}/{total})
526
+ <!-- status.json#/task_decomposition -->
527
+ - [ ] G1 — {goal}
528
+ done_when : {done_when}
529
+ evidence : {evidence}
530
+ lifecycle : {lifecycle}
531
+ <!-- ref: status.json#/task_decomposition/0 status=pending -->
532
+ - [x] G2 — {goal}
533
+ done_when : {done_when}
534
+ evidence : {evidence}
535
+ <!-- ref: status.json#/task_decomposition/1 status=done completed_at={ISO} -->
536
+
537
+ <!-- A_APPLY_GOAL_DONE 在全部 status=done 时在文件末追加 ALL_GOALS_DONE -->
538
+ ```
437
539
 
438
- ## 子目标 / Sub-goals
439
- - [ ] G1: {goal} — done when: {done_when} (evidence: {evidence})
440
- - [ ] G2: {goal} — done when: {done_when} (evidence: {evidence})
540
+ ### Sync Rule (status.json ↔ goal-checklist.md)
441
541
 
442
- <!-- A_GOAL_AUDIT_EVALUATE flips [ ]→[x] when evidence confirms;
443
- A_APPLY_GOAL_DONE appends `ALL_GOALS_DONE` once all [x]. -->
444
- ```
542
+ 单向投影;status.json 为真源;冲突时直接重渲染,不合并。
543
+
544
+ 1. 只有 ralph coordinator 写 `task_decomposition[*].status`;markdown 不可写入状态。
545
+ 2. `task_decomposition` / `execution_criteria` / `boundary_contract` 任一变化 → 立即重渲染 checklist。
546
+ 3. 全部 `status="done"` → 文件末追加 `ALL_GOALS_DONE`。
547
+ 4. checklist 缺失或漂移 → 直接重渲染覆盖;视 markdown 为可丢弃产物。
548
+ 5. coordinator 在 lifecycle 覆盖某子目标的 step 完成后,校验 evidence;满足则置 `status="done"` + 重渲染 + `update_goal` 进度。
445
549
 
446
550
  ### Fix-Loop Templates
447
551
 
@@ -473,16 +577,22 @@ Written to `{session_dir}/goal-checklist.md`. Stable within the session; never r
473
577
 
474
578
  ### Success Criteria
475
579
 
580
+ - [ ] Phase 先于 position 解析(S_RESOLVE_PHASE → S_INFER → S_QUALITY_MODE);phase_is_new 标记写入 session
581
+ - [ ] phase_is_new=true 时 lifecycle_position 强制为 `analyze`(禁用其他 phase 的 artifact 推断)
582
+ - [ ] artifact 过滤始终按 session.phase(不读 state.json.current_phase)
476
583
  - [ ] Lifecycle position inferred from bootstrap + artifact chain + result files
477
584
  - [ ] Quality mode governs step generation
478
585
  - [ ] Decomposition runs as initial step; broad intent boundary-clarified via ≤3 questions (ignores auto_mode); narrow auto-derives
479
- - [ ] Goal registered via built-in `create_goal` with sub-goal success criteria (NOT a user-copied prompt)
586
+ - [ ] Goal registered via built-in `create_goal` with sub-goal success criteria
480
587
  - [ ] status.json enriched additively with boundary_contract + execution_criteria + task_decomposition; absent = old behavior preserved
481
- - [ ] goal-checklist.md generated with verifiable done_when + ALL_GOALS_DONE sentinel
588
+ - [ ] status.json 为唯一真源;goal-checklist.md 是从 JSON 重渲染的投影视图(Resume 区块指向 `$maestro-ralph execute`)
589
+ - [ ] task_decomposition 变更触发 checklist 重渲染;ALL_GOALS_DONE 仅在 all done 时追加;JSON pointer 注释回溯每个条目
482
590
  - [ ] post-goal-audit decision inserted before milestone-complete (only when decomposed)
483
591
  - [ ] Unmet sub-goals DYNAMICALLY grow steps[] via scoped per-goal mini-loops (goal_ref tagged), loop until all_met or max retries → escalate
484
592
  - [ ] Skills invoked DIRECTLY in-context — NO spawn_agents_on_csv, NO wave/CSV/worker
485
593
  - [ ] Sequential execution; status.json + update_plan persisted after every step and decision
594
+ - [ ] Chain 末端硬约束:必须以 `milestone-complete` 结尾(goal-audit decision 紧前)
595
+ - [ ] 初始构建按 task_decomposition[*].lifecycle 给每个 step 打 goal_ref(verify/review 等共用 lifecycle 的 step 也有标签)
486
596
  - [ ] Quality-gate / goal-gate decisions delegate-evaluated via maestro delegate --role analyze
487
597
  - [ ] Confidence-based verdict adjustment applied
488
598
  - [ ] -y: auto-follow verdict, no STOP (except post-debug-escalate)
@@ -51,4 +51,16 @@ export declare function createTargetBackup(components: ScannedComponent[], optio
51
51
  */
52
52
  export declare function countExistingTargetFiles(components: ScannedComponent[]): number;
53
53
  export declare const MCP_TOOLS: readonly ["write_file", "edit_file", "read_file", "read_many_files", "team_msg", "store_knowhow"];
54
+ export type ExtraMcpTargetId = 'cursor' | 'qoder' | 'trae' | 'kiro' | 'roo' | 'vscode-copilot' | 'gemini-cli';
55
+ type McpFormat = 'json-mcpServers' | 'json-vscode-servers' | 'json-gemini-merge';
56
+ interface ExtraMcpTargetSpec {
57
+ id: ExtraMcpTargetId;
58
+ label: string;
59
+ format: McpFormat;
60
+ /** Returns the config file path, or null when scope is unsupported. */
61
+ configPath: (scope: 'global' | 'project', projectPath: string) => string | null;
62
+ }
63
+ export declare const EXTRA_MCP_TARGETS: ExtraMcpTargetSpec[];
64
+ export declare function addExtraMcpServer(targetId: ExtraMcpTargetId, scope: 'global' | 'project', projectPath: string, enabledTools: string[], projectRoot?: string): boolean;
65
+ export declare function removeExtraMcpServer(targetId: ExtraMcpTargetId, scope: 'global' | 'project', projectPath: string): boolean;
54
66
  //# sourceMappingURL=install-backend.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"install-backend.d.ts","sourceRoot":"","sources":["../../../src/commands/install-backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-backend.d.ts","sourceRoot":"","sources":["../../../src/commands/install-backend.ts"],"names":[],"mappings":"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"}
@@ -415,4 +415,148 @@ export const MCP_TOOLS = [
415
415
  'team_msg',
416
416
  'store_knowhow',
417
417
  ];
418
+ export const EXTRA_MCP_TARGETS = [
419
+ {
420
+ id: 'cursor',
421
+ label: 'Cursor (.cursor/mcp.json)',
422
+ format: 'json-mcpServers',
423
+ configPath: (scope, p) => scope === 'project'
424
+ ? join(p, '.cursor', 'mcp.json')
425
+ : join(homedir(), '.cursor', 'mcp.json'),
426
+ },
427
+ {
428
+ id: 'qoder',
429
+ label: 'Qoder (<proj>/mcp.json — Settings → MCP)',
430
+ format: 'json-mcpServers',
431
+ configPath: (scope, p) => scope === 'project'
432
+ // Qoder uses root-level mcp.json (no leading dot) per their docs
433
+ ? join(p, 'mcp.json')
434
+ // Global config lives under SharedClientCache; we write the canonical path,
435
+ // even though Qoder UI commonly bootstraps this on first launch.
436
+ : join(homedir(), '.qoder', 'SharedClientCache', 'mcp.json'),
437
+ },
438
+ {
439
+ id: 'trae',
440
+ label: 'Trae (.mcp.json)',
441
+ format: 'json-mcpServers',
442
+ configPath: (scope, p) => scope === 'project'
443
+ ? join(p, '.mcp.json')
444
+ : join(homedir(), '.trae', 'mcp.json'),
445
+ },
446
+ {
447
+ id: 'kiro',
448
+ label: 'Kiro (.kiro/settings/mcp.json)',
449
+ format: 'json-mcpServers',
450
+ configPath: (scope, p) => scope === 'project'
451
+ ? join(p, '.kiro', 'settings', 'mcp.json')
452
+ : join(homedir(), '.kiro', 'settings', 'mcp.json'),
453
+ },
454
+ {
455
+ id: 'roo',
456
+ label: 'Roo Code (.roo/mcp.json)',
457
+ format: 'json-mcpServers',
458
+ // Roo Code global config lives inside VS Code globalStorage — skip global
459
+ // (users almost always want project-level). Project = .roo/mcp.json.
460
+ configPath: (scope, p) => scope === 'project' ? join(p, '.roo', 'mcp.json') : null,
461
+ },
462
+ {
463
+ id: 'vscode-copilot',
464
+ label: 'VS Code Copilot (.vscode/mcp.json)',
465
+ format: 'json-vscode-servers',
466
+ configPath: (scope, p) => scope === 'project'
467
+ ? join(p, '.vscode', 'mcp.json')
468
+ // User-profile mcp.json — location varies by OS, command-driven in VS Code.
469
+ // We target the canonical app-data folder.
470
+ : process.platform === 'win32'
471
+ ? join(homedir(), 'AppData', 'Roaming', 'Code', 'User', 'mcp.json')
472
+ : process.platform === 'darwin'
473
+ ? join(homedir(), 'Library', 'Application Support', 'Code', 'User', 'mcp.json')
474
+ : join(homedir(), '.config', 'Code', 'User', 'mcp.json'),
475
+ },
476
+ {
477
+ id: 'gemini-cli',
478
+ label: 'Gemini CLI (.gemini/settings.json)',
479
+ format: 'json-gemini-merge',
480
+ configPath: (scope, p) => scope === 'project'
481
+ ? join(p, '.gemini', 'settings.json')
482
+ : join(homedir(), '.gemini', 'settings.json'),
483
+ },
484
+ ];
485
+ function buildServerConfig(enabledTools, projectRoot, format) {
486
+ const isWin = process.platform === 'win32';
487
+ const env = {
488
+ MAESTRO_ENABLED_TOOLS: enabledTools.join(','),
489
+ };
490
+ if (projectRoot)
491
+ env.MAESTRO_PROJECT_ROOT = projectRoot;
492
+ const base = {
493
+ command: isWin ? 'cmd' : 'maestro-mcp',
494
+ args: isWin ? ['/c', 'maestro-mcp'] : [],
495
+ env,
496
+ };
497
+ if (format === 'json-vscode-servers') {
498
+ return { type: 'stdio', ...base };
499
+ }
500
+ return base;
501
+ }
502
+ export function addExtraMcpServer(targetId, scope, projectPath, enabledTools, projectRoot) {
503
+ const spec = EXTRA_MCP_TARGETS.find((t) => t.id === targetId);
504
+ if (!spec)
505
+ return false;
506
+ const fp = spec.configPath(scope, projectPath);
507
+ if (!fp)
508
+ return false;
509
+ try {
510
+ const dir = dirname(fp);
511
+ if (!existsSync(dir))
512
+ mkdirSync(dir, { recursive: true });
513
+ const serverConfig = buildServerConfig(enabledTools, projectRoot, spec.format);
514
+ const containerKey = spec.format === 'json-vscode-servers' ? 'servers' : 'mcpServers';
515
+ let data = {};
516
+ if (existsSync(fp)) {
517
+ try {
518
+ data = JSON.parse(readFileSync(fp, 'utf-8'));
519
+ }
520
+ catch {
521
+ // Corrupt JSON — back up before overwriting
522
+ try {
523
+ const backupPath = `${fp}.bak.${Date.now()}`;
524
+ writeFileSync(backupPath, readFileSync(fp, 'utf-8'));
525
+ }
526
+ catch { /* best-effort */ }
527
+ data = {};
528
+ }
529
+ }
530
+ if (!data[containerKey] || typeof data[containerKey] !== 'object') {
531
+ data[containerKey] = {};
532
+ }
533
+ data[containerKey]['maestro-tools'] = serverConfig;
534
+ writeFileSync(fp, JSON.stringify(data, null, 2), 'utf-8');
535
+ return true;
536
+ }
537
+ catch {
538
+ return false;
539
+ }
540
+ }
541
+ export function removeExtraMcpServer(targetId, scope, projectPath) {
542
+ const spec = EXTRA_MCP_TARGETS.find((t) => t.id === targetId);
543
+ if (!spec)
544
+ return false;
545
+ const fp = spec.configPath(scope, projectPath);
546
+ if (!fp || !existsSync(fp))
547
+ return false;
548
+ try {
549
+ const data = JSON.parse(readFileSync(fp, 'utf-8'));
550
+ const containerKey = spec.format === 'json-vscode-servers' ? 'servers' : 'mcpServers';
551
+ const servers = data[containerKey];
552
+ if (!servers || !('maestro-tools' in servers))
553
+ return false;
554
+ delete servers['maestro-tools'];
555
+ writeFileSync(fp, JSON.stringify(data, null, 2), 'utf-8');
556
+ return true;
557
+ }
558
+ catch {
559
+ return false;
560
+ }
561
+ }
418
562
  //# sourceMappingURL=install-backend.js.map