maestro-flow 0.3.8 → 0.3.10
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.
- package/.claude/commands/learn-decompose.md +3 -3
- package/.claude/commands/learn-follow.md +5 -5
- package/.claude/commands/learn-investigate.md +3 -3
- package/.claude/commands/learn-retro.md +6 -6
- package/.claude/commands/learn-second-opinion.md +3 -3
- package/.claude/commands/maestro-analyze.md +166 -99
- package/.claude/commands/maestro-brainstorm.md +2 -2
- package/.claude/commands/maestro-execute.md +151 -97
- package/.claude/commands/maestro-fork.md +111 -0
- package/.claude/commands/maestro-init.md +6 -6
- package/.claude/commands/maestro-merge.md +77 -0
- package/.claude/commands/maestro-milestone-audit.md +72 -60
- package/.claude/commands/maestro-milestone-complete.md +67 -59
- package/.claude/commands/maestro-milestone-release.md +6 -6
- package/.claude/commands/maestro-plan.md +167 -130
- package/.claude/commands/maestro-quick.md +4 -4
- package/.claude/commands/maestro-roadmap.md +5 -5
- package/.claude/commands/maestro-spec-generate.md +5 -5
- package/.claude/commands/maestro-ui-design.md +3 -3
- package/.claude/commands/maestro-verify.md +106 -87
- package/.claude/commands/maestro.md +10 -4
- package/.claude/commands/manage-codebase-rebuild.md +4 -4
- package/.claude/commands/manage-codebase-refresh.md +1 -1
- package/.claude/commands/manage-harvest.md +6 -6
- package/.claude/commands/manage-issue-discover.md +2 -2
- package/.claude/commands/manage-issue.md +7 -7
- package/.claude/commands/manage-learn.md +2 -2
- package/.claude/commands/manage-memory-capture.md +4 -4
- package/.claude/commands/manage-memory.md +2 -2
- package/.claude/commands/manage-status.md +24 -24
- package/.claude/commands/quality-business-test.md +5 -5
- package/.claude/commands/quality-debug.md +4 -4
- package/.claude/commands/quality-integration-test.md +4 -4
- package/.claude/commands/quality-refactor.md +3 -3
- package/.claude/commands/quality-retrospective.md +2 -2
- package/.claude/commands/quality-review.md +4 -4
- package/.claude/commands/quality-sync.md +3 -3
- package/.claude/commands/quality-test-gen.md +4 -4
- package/.claude/commands/quality-test.md +9 -9
- package/.claude/commands/spec-add.md +2 -2
- package/.claude/commands/spec-load.md +1 -1
- package/.claude/commands/spec-setup.md +5 -5
- package/.claude/commands/wiki-connect.md +3 -3
- package/.claude/commands/wiki-digest.md +4 -4
- package/.codex/skills/maestro/SKILL.md +463 -0
- package/.codex/skills/maestro-analyze/SKILL.md +79 -20
- package/.codex/skills/maestro-chain/SKILL.md +248 -0
- package/.codex/skills/maestro-coordinate/SKILL.md +279 -224
- package/.codex/skills/maestro-execute/SKILL.md +35 -26
- package/.codex/skills/maestro-milestone-audit/SKILL.md +103 -209
- package/.codex/skills/maestro-milestone-complete/SKILL.md +149 -158
- package/.codex/skills/maestro-plan/SKILL.md +56 -18
- package/.codex/skills/maestro-roadmap/SKILL.md +3 -2
- package/.codex/skills/team-coordinate/roles/coordinator/commands/monitor.md +2 -2
- package/.codex/skills/team-executor/roles/executor/commands/monitor.md +1 -1
- package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +2 -2
- package/.codex/skills/team-lifecycle-v4/specs/knowledge-transfer.md +2 -2
- package/.codex/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +1 -1
- package/.codex/skills/team-review/roles/coordinator/commands/monitor.md +1 -1
- package/.codex/skills/team-tech-debt/roles/coordinator/commands/monitor.md +1 -1
- package/.codex/skills/team-testing/roles/coordinator/commands/monitor.md +1 -1
- package/README.md +26 -21
- package/README.zh-CN.md +23 -19
- package/bin/maestro-mcp.js +1 -1
- package/chains/_intent-map.json +21 -9
- package/chains/_router.json +30 -77
- package/chains/brainstorm-driven.json +17 -6
- package/chains/full-lifecycle.json +22 -23
- package/chains/issue-lifecycle.json +13 -13
- package/chains/milestone-close.json +20 -7
- package/chains/milestone-fork-merge.json +50 -0
- package/chains/roadmap-driven.json +17 -6
- package/chains/singles/issue-analyze.json +3 -3
- package/chains/singles/issue-execute.json +3 -3
- package/chains/singles/issue-plan.json +3 -3
- package/chains/spec-driven.json +17 -6
- package/dashboard/dist/assets/{ArtifactsPage-BmPOu8sO.js → ArtifactsPage-DZNCi6tn.js} +12 -7
- package/dashboard/dist/assets/ChatInput-Bvr-FeEq.js +49 -0
- package/dashboard/dist/assets/ChatPage-D9zTkJZo.js +22 -0
- package/dashboard/dist/assets/CollabPage-B4NAHXS2.js +1 -0
- package/dashboard/dist/assets/ExecutionPanel-CFt4LJyq.js +1 -0
- package/dashboard/dist/assets/KanbanPage-C8USth6H.js +21 -0
- package/dashboard/dist/assets/{MarkdownRenderer-BjZ43aSa.js → MarkdownRenderer-X4af_WNb.js} +1 -1
- package/dashboard/dist/assets/McpPage-BKfCVIyU.js +21 -0
- package/dashboard/dist/assets/OutputPanel-BlBQFJSW.js +1 -0
- package/dashboard/dist/assets/ProblemsPanel-De3DLvoI.js +1 -0
- package/dashboard/dist/assets/{RequirementBoardPage-B7yRL0s_.js → RequirementBoardPage-Bf1trzqs.js} +2 -2
- package/dashboard/dist/assets/{RequirementPage-D8J_-b6O.js → RequirementPage-Bllxe2XI.js} +10 -5
- package/dashboard/dist/assets/{SpecsPage-6lO8v8_C.js → SpecsPage-9lwxKT27.js} +2 -2
- package/dashboard/dist/assets/{SupervisorPage-Ds5N378a.js → SupervisorPage-SusdfHFq.js} +1 -1
- package/dashboard/dist/assets/{TeamsPage-DrkKr17T.js → TeamsPage-DsuM6OwC.js} +2 -2
- package/dashboard/dist/assets/TreeBrowser-Q12qobZs.js +6 -0
- package/dashboard/dist/assets/WorkflowPage-D_Fzdy3_.js +6 -0
- package/dashboard/dist/assets/{arrow-left-CadP5YgU.js → arrow-left-Bqtb2hle.js} +1 -1
- package/dashboard/dist/assets/{check-5xufDzS8.js → check-u6fGOwQO.js} +1 -1
- package/dashboard/dist/assets/{chevron-right-CYbpR4ev.js → chevron-right-Csu22t58.js} +1 -1
- package/dashboard/dist/assets/{circle-Bm-5Q-Yh.js → circle-CMrkbRNg.js} +1 -1
- package/dashboard/dist/assets/{circle-alert-BqcYuT7x.js → circle-alert-c3tH1P4z.js} +1 -1
- package/dashboard/dist/assets/{circle-check-big-yyzAFysU.js → circle-check-big-TDSeWstm.js} +1 -1
- package/dashboard/dist/assets/{circle-check-DEVzW_lm.js → circle-check-gYxxSYuH.js} +1 -1
- package/dashboard/dist/assets/{code-BBdC8Wmw.js → code-CFN2uX9V.js} +1 -1
- package/dashboard/dist/assets/{columns-3-CQ9Trztr.js → columns-3-38xIDlzy.js} +1 -1
- package/dashboard/dist/assets/{download-DayuF-sn.js → download-DC7KkKyP.js} +1 -1
- package/dashboard/dist/assets/{folder-CqXeSKeC.js → folder-CWq_lAnf.js} +1 -1
- package/dashboard/dist/assets/index-DWG-WrzT.js +231 -0
- package/dashboard/dist/assets/{index-Dru5HYy0.js → index-Do71weNR.js} +1 -1
- package/dashboard/dist/assets/index-GUNJodSR.css +1 -0
- package/dashboard/dist/assets/{list-DBOD6IUt.js → list-CgIP_2A-.js} +1 -1
- package/dashboard/dist/assets/{minus-fQI1Syn2.js → minus-DYoN5UGk.js} +1 -1
- package/dashboard/dist/assets/{pen-line-Bkbbngl5.js → pen-line-Bh_WKYHm.js} +1 -1
- package/dashboard/dist/assets/{proxy-teW12DdZ.js → proxy-BKxDAKTj.js} +1 -1
- package/dashboard/dist/assets/{search-Bq3ygFUW.js → search-SieXnOgr.js} +1 -1
- package/dashboard/dist/assets/{shallow-22ZN8sFt.js → shallow-Bme1JY57.js} +1 -1
- package/dashboard/dist/assets/{table-BEYtdWc4.js → table-llyEtj-7.js} +1 -1
- package/dashboard/dist/assets/terminal-BB3Xfuv5.js +6 -0
- package/dashboard/dist/assets/{trash-2-DMqGBgcF.js → trash-2-C8f4vFFM.js} +1 -1
- package/dashboard/dist/assets/{zap-9DVkGVtt.js → zap-4uwlzVm0.js} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +8 -4
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/entry-normalizer.d.ts +1 -0
- package/dashboard/dist-server/dashboard/src/server/agents/entry-normalizer.js +2 -1
- package/dashboard/dist-server/dashboard/src/server/agents/entry-normalizer.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.js +20 -10
- package/dashboard/dist-server/dashboard/src/server/agents/stream-json-adapter.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.js +2 -2
- package/dashboard/dist-server/dashboard/src/server/commander/commander-agent.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js +3 -3
- package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/git.d.ts +2 -0
- package/dashboard/dist-server/dashboard/src/server/routes/git.js +79 -0
- package/dashboard/dist-server/dashboard/src/server/routes/git.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/routes/index.js +3 -0
- package/dashboard/dist-server/dashboard/src/server/routes/index.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/issues.js +34 -0
- package/dashboard/dist-server/dashboard/src/server/routes/issues.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/workspace.js +43 -0
- package/dashboard/dist-server/dashboard/src/server/routes/workspace.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/state/state-manager.js +43 -3
- package/dashboard/dist-server/dashboard/src/server/state/state-manager.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/ws/handlers/execution-handler.js +2 -3
- package/dashboard/dist-server/dashboard/src/server/ws/handlers/execution-handler.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/shared/issue-types.d.ts +5 -0
- package/dashboard/dist-server/dashboard/src/shared/issue-types.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/shared/normalize-task.d.ts +2 -0
- package/dashboard/dist-server/dashboard/src/shared/normalize-task.js +75 -0
- package/dashboard/dist-server/dashboard/src/shared/normalize-task.js.map +1 -0
- package/dashboard/dist-server/src/hooks/constants.d.ts +90 -12
- package/dashboard/dist-server/src/hooks/constants.js +149 -16
- package/dashboard/dist-server/src/hooks/constants.js.map +1 -1
- package/dashboard/dist-server/src/types/index.d.ts +5 -0
- package/dashboard/package.json +59 -59
- package/dist/src/cli.js +3 -1
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/collab.d.ts +14 -0
- package/dist/src/commands/collab.d.ts.map +1 -0
- package/dist/src/commands/{team.js → collab.js} +395 -96
- package/dist/src/commands/collab.js.map +1 -0
- package/dist/src/commands/hooks.d.ts +5 -1
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +50 -10
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/install-ui/InstallConfirm.d.ts +3 -1
- package/dist/src/commands/install-ui/InstallConfirm.d.ts.map +1 -1
- package/dist/src/commands/install-ui/InstallConfirm.js +3 -1
- package/dist/src/commands/install-ui/InstallConfirm.js.map +1 -1
- package/dist/src/commands/install-ui/InstallExecution.d.ts.map +1 -1
- package/dist/src/commands/install-ui/InstallExecution.js +5 -1
- package/dist/src/commands/install-ui/InstallExecution.js.map +1 -1
- package/dist/src/commands/install-ui/InstallFlow.d.ts.map +1 -1
- package/dist/src/commands/install-ui/InstallFlow.js +7 -3
- package/dist/src/commands/install-ui/InstallFlow.js.map +1 -1
- package/dist/src/commands/install-ui/StatuslineConfig.d.ts +6 -1
- package/dist/src/commands/install-ui/StatuslineConfig.d.ts.map +1 -1
- package/dist/src/commands/install-ui/StatuslineConfig.js +27 -5
- package/dist/src/commands/install-ui/StatuslineConfig.js.map +1 -1
- package/dist/src/commands/msg.d.ts.map +1 -1
- package/dist/src/commands/msg.js +4 -3
- package/dist/src/commands/msg.js.map +1 -1
- package/dist/src/hooks/__tests__/statusline-visual-test.d.ts +7 -0
- package/dist/src/hooks/__tests__/statusline-visual-test.d.ts.map +1 -0
- package/dist/src/hooks/__tests__/statusline-visual-test.js +236 -0
- package/dist/src/hooks/__tests__/statusline-visual-test.js.map +1 -0
- package/dist/src/hooks/constants.d.ts +90 -12
- package/dist/src/hooks/constants.d.ts.map +1 -1
- package/dist/src/hooks/constants.js +149 -16
- package/dist/src/hooks/constants.js.map +1 -1
- package/dist/src/hooks/guards/index.d.ts +1 -0
- package/dist/src/hooks/guards/index.d.ts.map +1 -1
- package/dist/src/hooks/guards/index.js +1 -0
- package/dist/src/hooks/guards/index.js.map +1 -1
- package/dist/src/hooks/guards/preflight-guard.d.ts +29 -0
- package/dist/src/hooks/guards/preflight-guard.d.ts.map +1 -0
- package/dist/src/hooks/guards/preflight-guard.js +95 -0
- package/dist/src/hooks/guards/preflight-guard.js.map +1 -0
- package/dist/src/hooks/index.d.ts +1 -0
- package/dist/src/hooks/index.d.ts.map +1 -1
- package/dist/src/hooks/index.js +1 -0
- package/dist/src/hooks/index.js.map +1 -1
- package/dist/src/{commands/team.d.ts → hooks/preflight-core.d.ts} +12 -22
- package/dist/src/hooks/preflight-core.d.ts.map +1 -0
- package/dist/src/hooks/preflight-core.js +86 -0
- package/dist/src/hooks/preflight-core.js.map +1 -0
- package/dist/src/hooks/statusline.d.ts +8 -17
- package/dist/src/hooks/statusline.d.ts.map +1 -1
- package/dist/src/hooks/statusline.js +269 -112
- package/dist/src/hooks/statusline.js.map +1 -1
- package/dist/src/hooks/team-monitor.d.ts.map +1 -1
- package/dist/src/hooks/team-monitor.js +16 -0
- package/dist/src/hooks/team-monitor.js.map +1 -1
- package/dist/src/i18n/locales/en.d.ts.map +1 -1
- package/dist/src/i18n/locales/en.js +5 -0
- package/dist/src/i18n/locales/en.js.map +1 -1
- package/dist/src/i18n/locales/zh.d.ts.map +1 -1
- package/dist/src/i18n/locales/zh.js +5 -0
- package/dist/src/i18n/locales/zh.js.map +1 -1
- package/dist/src/i18n/types.d.ts +5 -0
- package/dist/src/i18n/types.d.ts.map +1 -1
- package/dist/src/tools/collab-adapter.d.ts +102 -0
- package/dist/src/tools/collab-adapter.d.ts.map +1 -0
- package/dist/src/tools/collab-adapter.js +458 -0
- package/dist/src/tools/collab-adapter.js.map +1 -0
- package/dist/src/tools/merge-validator.d.ts +24 -0
- package/dist/src/tools/merge-validator.d.ts.map +1 -0
- package/dist/src/tools/merge-validator.js +220 -0
- package/dist/src/tools/merge-validator.js.map +1 -0
- package/dist/src/tools/namespace-guard.d.ts +2 -0
- package/dist/src/tools/namespace-guard.d.ts.map +1 -1
- package/dist/src/tools/namespace-guard.js +12 -0
- package/dist/src/tools/namespace-guard.js.map +1 -1
- package/dist/src/tools/phase-gate-evaluator.d.ts +45 -0
- package/dist/src/tools/phase-gate-evaluator.d.ts.map +1 -0
- package/dist/src/tools/phase-gate-evaluator.js +42 -0
- package/dist/src/tools/phase-gate-evaluator.js.map +1 -0
- package/dist/src/tools/team-members.d.ts +18 -0
- package/dist/src/tools/team-members.d.ts.map +1 -1
- package/dist/src/tools/team-members.js +50 -0
- package/dist/src/tools/team-members.js.map +1 -1
- package/dist/src/tools/team-tasks.d.ts +120 -0
- package/dist/src/tools/team-tasks.d.ts.map +1 -0
- package/dist/src/tools/team-tasks.js +365 -0
- package/dist/src/tools/team-tasks.js.map +1 -0
- package/dist/src/tools/transition-recorder.d.ts +3 -0
- package/dist/src/tools/transition-recorder.d.ts.map +1 -1
- package/dist/src/tools/transition-recorder.js +52 -1
- package/dist/src/tools/transition-recorder.js.map +1 -1
- package/dist/src/types/index.d.ts +5 -0
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/utils/get-version.d.ts.map +1 -1
- package/dist/src/utils/get-version.js +15 -4
- package/dist/src/utils/get-version.js.map +1 -1
- package/package.json +1 -1
- package/templates/cli/prompts/workflow-skill-conflict-patterns.txt +3 -3
- package/templates/cli/prompts/workflow-skill-lessons-learned.txt +3 -3
- package/templates/config.json +7 -0
- package/templates/search-tools.md +1 -1
- package/templates/worktree-scope.json +10 -0
- package/templates/worktrees.json +27 -0
- package/workflows/analyze.md +86 -36
- package/workflows/brainstorm.md +17 -37
- package/workflows/cli-tools-usage.md +44 -27
- package/workflows/delegate-usage.md +3 -3
- package/workflows/execute.md +94 -28
- package/workflows/fork.md +309 -0
- package/workflows/init.md +10 -1
- package/workflows/issue-analyze.md +6 -2
- package/workflows/issue-discover.md +4 -4
- package/workflows/issue-execute.md +6 -3
- package/workflows/issue-plan.md +5 -2
- package/workflows/issue.md +66 -7
- package/workflows/maestro-coordinate.codex.md +281 -470
- package/workflows/maestro-coordinate.md +37 -30
- package/workflows/maestro-link-coordinate.md +2 -2
- package/workflows/maestro.codex.md +710 -0
- package/workflows/maestro.md +62 -46
- package/workflows/merge.md +285 -0
- package/workflows/milestone-audit.md +89 -70
- package/workflows/milestone-complete.md +89 -156
- package/workflows/plan.md +122 -17
- package/workflows/retrospective.md +4 -4
- package/workflows/roadmap.md +11 -3
- package/workflows/spec-generate.md +9 -0
- package/workflows/status.md +76 -27
- package/workflows/ui-design.md +14 -12
- package/workflows/verify.md +44 -8
- package/.claude/commands/maestro-phase-add.md +0 -63
- package/.claude/commands/maestro-phase-transition.md +0 -75
- package/.claude/commands/manage-issue-analyze.md +0 -62
- package/.claude/commands/manage-issue-execute.md +0 -73
- package/.claude/commands/manage-issue-plan.md +0 -62
- package/.codex/skills/maestro-phase-add/SKILL.md +0 -154
- package/.codex/skills/maestro-phase-transition/SKILL.md +0 -173
- package/.codex/skills/manage-issue-analyze/SKILL.md +0 -207
- package/.codex/skills/manage-issue-execute/SKILL.md +0 -200
- package/.codex/skills/manage-issue-plan/SKILL.md +0 -186
- package/chains/singles/phase-add.json +0 -31
- package/chains/singles/phase-transition.json +0 -23
- package/dashboard/dist/assets/ChatInput-CL8YDfOU.js +0 -67
- package/dashboard/dist/assets/ChatPage-CT-ozBK2.js +0 -8
- package/dashboard/dist/assets/CollabPage-C0rWMden.js +0 -1
- package/dashboard/dist/assets/KanbanPage-C6WbAlwI.js +0 -16
- package/dashboard/dist/assets/McpPage-BPIXADQi.js +0 -16
- package/dashboard/dist/assets/TreeBrowser-g_QUKemL.js +0 -11
- package/dashboard/dist/assets/WorkflowPage-X8aNkDEr.js +0 -6
- package/dashboard/dist/assets/git-branch-SqFf4Ru5.js +0 -6
- package/dashboard/dist/assets/index-D2Mtyw7I.css +0 -1
- package/dashboard/dist/assets/index-nufWop4p.js +0 -231
- package/dashboard/dist/assets/wrench-B84-zdLI.js +0 -11
- package/dist/src/commands/team.d.ts.map +0 -1
- package/dist/src/commands/team.js.map +0 -1
- package/workflows/phase-add.md +0 -252
- package/workflows/phase-transition.md +0 -399
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: maestro-coordinate
|
|
3
|
-
description:
|
|
4
|
-
argument-hint: "\"intent text\" [-y] [-c
|
|
5
|
-
allowed-tools:
|
|
3
|
+
description: CLI-based coordinator — analyze intent → select command chain → execute sequentially via codex delegate with auto-confirm. Async state machine with template-driven prompts and gemini analysis between steps.
|
|
4
|
+
argument-hint: "\"intent text\" [-y] [-c] [--dry-run] [--chain <name>] [--tool <tool>]"
|
|
5
|
+
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
## Auto Mode
|
|
9
9
|
|
|
10
|
-
When `-y` or `--yes`: Skip clarification and confirmation prompts.
|
|
10
|
+
When `-y` or `--yes`: Skip clarification and confirmation prompts. Auto-confirm all delegate executions.
|
|
11
11
|
|
|
12
|
-
# Maestro Coordinate
|
|
12
|
+
# Maestro Coordinate (CLI Delegate)
|
|
13
13
|
|
|
14
14
|
## Usage
|
|
15
15
|
|
|
@@ -19,13 +19,15 @@ $maestro-coordinate -y "refactor the payment module"
|
|
|
19
19
|
$maestro-coordinate --continue
|
|
20
20
|
$maestro-coordinate --dry-run "add rate limiting to API endpoints"
|
|
21
21
|
$maestro-coordinate --chain feature "add dark mode toggle"
|
|
22
|
+
$maestro-coordinate --tool gemini "fix auth regression"
|
|
22
23
|
```
|
|
23
24
|
|
|
24
25
|
**Flags**:
|
|
25
|
-
- `-y, --yes` — Auto mode: skip all prompts
|
|
26
|
-
-
|
|
27
|
-
- `--dry-run` —
|
|
26
|
+
- `-y, --yes` — Auto mode: skip all prompts, inject auto-confirm into delegates
|
|
27
|
+
- `-c, --continue` — Resume previous session from last incomplete step
|
|
28
|
+
- `--dry-run` — Show planned chain without executing
|
|
28
29
|
- `--chain <name>` — Force a specific chain (skips intent classification)
|
|
30
|
+
- `--tool <tool>` — CLI tool override (default: codex)
|
|
29
31
|
|
|
30
32
|
**Session state**: `.workflow/.maestro-coordinate/{session-id}/state.json`
|
|
31
33
|
|
|
@@ -33,292 +35,345 @@ $maestro-coordinate --chain feature "add dark mode toggle"
|
|
|
33
35
|
|
|
34
36
|
## Overview
|
|
35
37
|
|
|
36
|
-
Sequential
|
|
38
|
+
Sequential CLI-delegate coordinator. Each chain step is executed via `codex delegate "prompt" --to <tool> --mode write` with a template-driven prompt. After each step completes, a gemini analysis evaluates output quality and generates optimization hints for subsequent steps. All execution is background-async with hook callbacks.
|
|
37
39
|
|
|
38
40
|
```
|
|
39
|
-
Intent → Resolve Chain → Step 1 → Step 2 →
|
|
40
|
-
(chainMap)
|
|
41
|
-
|
|
42
|
-
close close close
|
|
43
|
-
│ │ │
|
|
44
|
-
findings → prev_context → prev_context
|
|
41
|
+
Intent → Resolve Chain → Step 1 → Analysis → Step 2 → Analysis → … → Report
|
|
42
|
+
(chainMap) delegate gemini delegate gemini
|
|
43
|
+
callback callback callback callback
|
|
45
44
|
```
|
|
46
45
|
|
|
47
46
|
---
|
|
48
47
|
|
|
49
|
-
## Chain Map
|
|
50
|
-
|
|
51
|
-
| Intent keywords | Chain | Steps (skills, in order) |
|
|
52
|
-
|----------------|-------|--------------------------|
|
|
53
|
-
| fix, bug, error, broken, crash | `quality-fix` | $manage-issue-analyze → $manage-issue-execute → $maestro-verify |
|
|
54
|
-
| test, spec, coverage | `quality-test` | $quality-test |
|
|
55
|
-
| refactor, cleanup, debt | `quality-refactor` | $quality-refactor |
|
|
56
|
-
| feature, implement, add, build | `feature` | $maestro-plan → $maestro-execute → $maestro-verify |
|
|
57
|
-
| review, check, audit | `quality-review` | $quality-review |
|
|
58
|
-
| deploy, release, ship | `deploy` | $maestro-verify → $maestro-execute |
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
|
|
62
48
|
## Implementation
|
|
63
49
|
|
|
64
50
|
> **Full implementation reference**: The complete `detectTaskType`, `detectNextAction`, and `chainMap` definitions (35+ intent patterns, 40+ chain types) are in `~/.maestro/workflows/maestro-coordinate.codex.md`. Read that file for authoritative logic before executing any step.
|
|
65
51
|
|
|
66
|
-
|
|
52
|
+
<required_reading>
|
|
53
|
+
@~/.maestro/workflows/maestro-coordinate.codex.md
|
|
54
|
+
</required_reading>
|
|
55
|
+
|
|
56
|
+
<deferred_reading>
|
|
57
|
+
- [coordinate template](~/.maestro/templates/cli/prompts/coordinate-step.txt) — read when filling step prompts
|
|
58
|
+
</deferred_reading>
|
|
59
|
+
|
|
60
|
+
### Step 1: Parse Arguments
|
|
67
61
|
|
|
68
62
|
```javascript
|
|
69
|
-
const
|
|
70
|
-
const
|
|
71
|
-
const
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
{ step: "Phase 1: Resolve intent and chain", status: "in_progress" },
|
|
80
|
-
{ step: "Phase 2: Execute steps (pipeline)", status: "pending" },
|
|
81
|
-
{ step: "Phase 3: Completion report", status: "pending" }
|
|
82
|
-
]
|
|
83
|
-
})
|
|
63
|
+
const args = $ARGUMENTS.trim();
|
|
64
|
+
const AUTO_YES = /\b(-y|--yes)\b/.test(args);
|
|
65
|
+
const RESUME = /\b(-c|--continue)\b/.test(args);
|
|
66
|
+
const DRY_RUN = /\b--dry-run\b/.test(args);
|
|
67
|
+
const forcedChain = args.match(/--chain\s+(\S+)/)?.[1] || null;
|
|
68
|
+
const cliTool = args.match(/--tool\s+(\S+)/)?.[1] || 'codex';
|
|
69
|
+
const intent = args
|
|
70
|
+
.replace(/\b(-y|--yes|-c|--continue|--dry-run)\b/g, '')
|
|
71
|
+
.replace(/--(chain|tool)\s+\S+/g, '')
|
|
72
|
+
.trim();
|
|
84
73
|
```
|
|
85
74
|
|
|
86
|
-
|
|
75
|
+
**If RESUME:**
|
|
76
|
+
1. Find latest `state.json` in `.workflow/.maestro-coordinate/`
|
|
77
|
+
2. Load state → set `current_step` to first non-completed step
|
|
78
|
+
3. Jump to **Step 6**
|
|
87
79
|
|
|
88
|
-
|
|
80
|
+
---
|
|
89
81
|
|
|
90
|
-
|
|
82
|
+
### Step 2: Read Project State
|
|
91
83
|
|
|
92
|
-
|
|
93
|
-
2. If `--chain` is given, use it directly
|
|
94
|
-
3. Otherwise, classify intent with keyword heuristics (see Chain Map above)
|
|
95
|
-
4. If no keyword matches and not `AUTO_YES`: ask one clarifying question via `functions.request_user_input`
|
|
96
|
-
5. Resolve the chain's skill list from Chain Map
|
|
97
|
-
6. Write `state.json`:
|
|
84
|
+
Read `.workflow/state.json` + `.workflow/roadmap.md` + current phase `index.json`.
|
|
98
85
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}, null, 2))
|
|
116
|
-
```
|
|
86
|
+
**If missing:** `projectState = { initialized: false }`. If intent also empty → Error E001.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### Step 3: Classify Intent & Select Chain
|
|
91
|
+
|
|
92
|
+
Follow `~/.maestro/workflows/maestro-coordinate.md` Steps 3a–3d exactly:
|
|
93
|
+
- Exact-match keywords (fast path)
|
|
94
|
+
- Structured intent extraction (action × object matrix)
|
|
95
|
+
- State-based routing for `state_continue`
|
|
96
|
+
- Chain map lookup
|
|
97
|
+
- Phase/issue ID resolution
|
|
98
|
+
|
|
99
|
+
If clarity < 2 and not AUTO_YES: clarify via AskUserQuestion (max 2 rounds).
|
|
100
|
+
|
|
101
|
+
---
|
|
117
102
|
|
|
118
|
-
|
|
103
|
+
### Step 4: Confirm
|
|
104
|
+
|
|
105
|
+
**If `DRY_RUN`:** Display chain and exit.
|
|
119
106
|
|
|
120
107
|
```
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
2. <skill-2>
|
|
125
|
-
3. <skill-3>
|
|
108
|
+
MAESTRO-COORDINATE: {chain_name} (dry run)
|
|
109
|
+
1. [{cmd}] {args}
|
|
110
|
+
2. [{cmd}] {args}
|
|
126
111
|
```
|
|
127
112
|
|
|
128
|
-
**
|
|
113
|
+
**If not AUTO_YES:** AskUserQuestion — Execute / Execute from step N / Cancel.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
### Step 5: Setup Session
|
|
129
118
|
|
|
130
119
|
```javascript
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
120
|
+
const sessionId = `coord-${new Date().toISOString().replace(/[-:T]/g, '').slice(0, 15)}`;
|
|
121
|
+
const sessionDir = `.workflow/.maestro-coordinate/${sessionId}`;
|
|
122
|
+
Bash(`mkdir -p "${sessionDir}"`);
|
|
123
|
+
|
|
124
|
+
const state = {
|
|
125
|
+
session_id: sessionId, status: 'running',
|
|
126
|
+
created_at: new Date().toISOString(),
|
|
127
|
+
intent, task_type: taskType, chain_name: chainName,
|
|
128
|
+
tool: cliTool, auto_mode: AUTO_YES, phase: resolvedPhase,
|
|
129
|
+
current_step: 0,
|
|
130
|
+
gemini_session_id: null,
|
|
131
|
+
step_analyses: [],
|
|
132
|
+
steps: chain.map((s, i) => ({
|
|
133
|
+
index: i, cmd: s.cmd, args: s.args || '',
|
|
134
|
+
status: 'pending', exec_id: null, analysis: null
|
|
135
|
+
}))
|
|
136
|
+
};
|
|
137
|
+
Write(`${sessionDir}/state.json`, JSON.stringify(state, null, 2));
|
|
139
138
|
```
|
|
140
139
|
|
|
141
140
|
---
|
|
142
141
|
|
|
143
|
-
###
|
|
142
|
+
### Step 6: Execute Step via codex delegate
|
|
144
143
|
|
|
145
|
-
|
|
144
|
+
#### 6a: Assemble args
|
|
146
145
|
|
|
147
146
|
```javascript
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
// Spawn step agent
|
|
165
|
-
const agent = spawn_agent({ message: stepPrompt })
|
|
166
|
-
|
|
167
|
-
// Wait — initial spawn: 30 min
|
|
168
|
-
let result = wait_agent({ timeout_ms: 1800000 })
|
|
169
|
-
if (result.timed_out) {
|
|
170
|
-
// Step 1: Status probe (non-interrupting, 3 min)
|
|
171
|
-
followup_task({ target: agent, message: "STATUS_CHECK: Report current progress, findings so far, and estimated remaining work." })
|
|
172
|
-
const status = wait_agent({ timeout_ms: 180000 })
|
|
173
|
-
if (status.timed_out) {
|
|
174
|
-
// Step 2: Force finalize (interrupt, 3 min)
|
|
175
|
-
followup_task({ target: agent, message: "FINALIZE: Output all current findings immediately. Time limit reached.", interrupt: true })
|
|
176
|
-
const forced = wait_agent({ timeout_ms: 180000 })
|
|
177
|
-
if (forced.timed_out) {
|
|
178
|
-
// Step 3: Abort
|
|
179
|
-
close_agent({ target: agent })
|
|
180
|
-
} else {
|
|
181
|
-
result = forced
|
|
182
|
-
}
|
|
183
|
-
} else {
|
|
184
|
-
result = status
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
// Parse structured output from agent
|
|
189
|
-
const output = parseLastJSON(result.status[agent].completed) ?? {
|
|
190
|
-
quality_score: null,
|
|
191
|
-
findings: result.status[agent].completed?.slice(-500) ?? "(no output)",
|
|
192
|
-
hints_for_next: ""
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
close_agent({ target: agent })
|
|
196
|
-
|
|
197
|
-
// Persist step result
|
|
198
|
-
step.status = result.timed_out ? "failed" : "completed"
|
|
199
|
-
step.findings = output.findings
|
|
200
|
-
step.quality_score = output.quality_score
|
|
201
|
-
step.hints_for_next = output.hints_for_next
|
|
202
|
-
step.completed_at = new Date().toISOString()
|
|
203
|
-
Write(`${sessionDir}/state.json`, JSON.stringify(state, null, 2))
|
|
204
|
-
|
|
205
|
-
// Build prev_context for next step
|
|
206
|
-
prevContext += `\n\n## Step ${step.step_n}: ${step.skill}\nFindings: ${step.findings}\nHints: ${step.hints_for_next ?? ''}`
|
|
207
|
-
|
|
208
|
-
// Abort on failure — mark remaining steps as skipped
|
|
209
|
-
if (step.status === "failed") {
|
|
210
|
-
state.steps
|
|
211
|
-
.filter(s => s.status === 'pending')
|
|
212
|
-
.forEach(s => { s.status = 'skipped'; s.findings = `Blocked: step ${step.step_n} (${step.skill}) failed` })
|
|
213
|
-
state.status = "aborted"
|
|
214
|
-
Write(`${sessionDir}/state.json`, JSON.stringify(state, null, 2))
|
|
215
|
-
break
|
|
147
|
+
const AUTO_FLAG_MAP = {
|
|
148
|
+
'maestro-analyze': '-y', 'maestro-brainstorm': '-y', 'maestro-ui-design': '-y',
|
|
149
|
+
'maestro-plan': '--auto', 'maestro-spec-generate': '-y', 'quality-test': '--auto-fix',
|
|
150
|
+
'quality-retrospective': '--auto-yes',
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
function assembleArgs(step) {
|
|
154
|
+
let a = (step.args || '')
|
|
155
|
+
.replace(/\{phase\}/g, context.current_phase || '')
|
|
156
|
+
.replace(/\{description\}/g, context.user_intent || '')
|
|
157
|
+
.replace(/\{issue_id\}/g, context.issue_id || '')
|
|
158
|
+
.replace(/\{spec_session_id\}/g, context.spec_session_id || '')
|
|
159
|
+
.replace(/\{scratch_dir\}/g, context.scratch_dir || '');
|
|
160
|
+
if (state.auto_mode) {
|
|
161
|
+
const flag = AUTO_FLAG_MAP[step.cmd];
|
|
162
|
+
if (flag && !a.includes(flag)) a = a ? `${a} ${flag}` : flag;
|
|
216
163
|
}
|
|
164
|
+
return a.trim();
|
|
217
165
|
}
|
|
218
166
|
```
|
|
219
167
|
|
|
220
|
-
|
|
168
|
+
#### 6b: Build prompt from template
|
|
221
169
|
|
|
222
|
-
|
|
170
|
+
Read `~/.maestro/templates/cli/prompts/coordinate-step.txt`, fill placeholders.
|
|
171
|
+
If previous step has analysis hints, inject them as `{{ANALYSIS_HINTS}}`.
|
|
223
172
|
|
|
224
|
-
|
|
173
|
+
```javascript
|
|
174
|
+
function escapeForShell(str) { return "'" + str.replace(/'/g, "'\\''") + "'"; }
|
|
175
|
+
|
|
176
|
+
const assembledArgs = assembleArgs(step);
|
|
177
|
+
const template = Read('~/.maestro/templates/cli/prompts/coordinate-step.txt');
|
|
178
|
+
|
|
179
|
+
let analysisHints = '';
|
|
180
|
+
const prevAnalysis = (state.step_analyses || []).find(a => a.step_index === state.current_step - 1);
|
|
181
|
+
if (prevAnalysis?.next_step_hints) {
|
|
182
|
+
const h = prevAnalysis.next_step_hints;
|
|
183
|
+
const parts = [];
|
|
184
|
+
if (h.prompt_additions) parts.push(h.prompt_additions);
|
|
185
|
+
if (h.cautions?.length) parts.push('Cautions: ' + h.cautions.join('; '));
|
|
186
|
+
if (h.context_to_carry) parts.push('Context from prior step: ' + h.context_to_carry);
|
|
187
|
+
if (parts.length) analysisHints = parts.join('\n');
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const prompt = template
|
|
191
|
+
.replace('{{COMMAND}}', `/${step.cmd}`)
|
|
192
|
+
.replace('{{ARGS}}', assembledArgs)
|
|
193
|
+
.replace('{{STEP_N}}', `${state.current_step + 1}/${state.steps.length}`)
|
|
194
|
+
.replace('{{AUTO_DIRECTIVE}}', state.auto_mode ? 'Auto-confirm all prompts. No interactive questions.' : '')
|
|
195
|
+
.replace('{{CHAIN_NAME}}', state.chain_name)
|
|
196
|
+
.replace('{{ANALYSIS_HINTS}}', analysisHints);
|
|
197
|
+
```
|
|
225
198
|
|
|
199
|
+
#### 6c: Launch via codex delegate
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
------------------------------------------------------------
|
|
203
|
+
STEP {i+1}/{total}: {step.cmd} | Tool: {cliTool}
|
|
204
|
+
------------------------------------------------------------
|
|
226
205
|
```
|
|
227
|
-
## TASK ASSIGNMENT
|
|
228
206
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
207
|
+
```javascript
|
|
208
|
+
state.steps[state.current_step].status = 'running';
|
|
209
|
+
state.steps[state.current_step].started_at = new Date().toISOString();
|
|
210
|
+
Write(`${sessionDir}/state.json`, JSON.stringify(state, null, 2));
|
|
211
|
+
|
|
212
|
+
Bash({
|
|
213
|
+
command: `codex delegate ${escapeForShell(prompt)} --to ${state.tool} --mode write`,
|
|
214
|
+
run_in_background: true, timeout: 600000
|
|
215
|
+
});
|
|
216
|
+
// ■ STOP — wait for hook callback
|
|
217
|
+
```
|
|
232
218
|
|
|
233
219
|
---
|
|
234
220
|
|
|
235
|
-
|
|
221
|
+
### Step 7: Post-Step Callback
|
|
236
222
|
|
|
237
|
-
|
|
238
|
-
|
|
223
|
+
```javascript
|
|
224
|
+
const stepIdx = state.current_step;
|
|
225
|
+
const step = state.steps[stepIdx];
|
|
226
|
+
const output = /* callback output */;
|
|
227
|
+
|
|
228
|
+
step.exec_id = /* from callback stderr */;
|
|
229
|
+
step.completed_at = new Date().toISOString();
|
|
230
|
+
|
|
231
|
+
// Context propagation
|
|
232
|
+
const phaseMatch = output.match(/PHASE:\s*(\d+)/m);
|
|
233
|
+
if (phaseMatch) context.current_phase = phaseMatch[1];
|
|
234
|
+
const specMatch = output.match(/SPEC-[\w-]+/);
|
|
235
|
+
if (specMatch) context.spec_session_id = specMatch[0];
|
|
236
|
+
const scratchMatch = output.match(/scratch_dir:\s*(.+)/m);
|
|
237
|
+
if (scratchMatch) context.scratch_dir = scratchMatch[1].trim();
|
|
238
|
+
|
|
239
|
+
// Success/failure
|
|
240
|
+
const failed = /^STATUS:\s*FAILURE/m.test(output);
|
|
241
|
+
if (!failed) {
|
|
242
|
+
step.status = 'completed';
|
|
243
|
+
} else if (state.auto_mode) {
|
|
244
|
+
if (!step.retried) { step.retried = true; /* re-execute Step 6c */ return; }
|
|
245
|
+
step.status = 'skipped';
|
|
246
|
+
} else {
|
|
247
|
+
// AskUserQuestion: Retry / Skip / Abort
|
|
248
|
+
}
|
|
239
249
|
|
|
240
|
-
|
|
250
|
+
Write(`${sessionDir}/step-${stepIdx + 1}-output.txt`, output);
|
|
251
|
+
Write(`${sessionDir}/state.json`, JSON.stringify(state, null, 2));
|
|
252
|
+
|
|
253
|
+
// → Step 7b: Gemini analysis (skip if step failed/skipped or single-step chain)
|
|
254
|
+
if (step.status === 'completed' && state.steps.length > 1) {
|
|
255
|
+
// → Step 7b
|
|
256
|
+
} else {
|
|
257
|
+
state.current_step = stepIdx + 1;
|
|
258
|
+
Write(`${sessionDir}/state.json`, JSON.stringify(state, null, 2));
|
|
259
|
+
if (state.current_step < state.steps.length) { /* → Step 6 */ }
|
|
260
|
+
else { /* → Step 8 */ }
|
|
261
|
+
}
|
|
262
|
+
```
|
|
241
263
|
|
|
242
|
-
|
|
243
|
-
The intent above is your driving goal.
|
|
264
|
+
---
|
|
244
265
|
|
|
245
|
-
|
|
246
|
-
## Context from Previous Steps
|
|
247
|
-
{prevContext}
|
|
266
|
+
### Step 7b: Analyze Step Output (via gemini)
|
|
248
267
|
|
|
249
|
-
|
|
250
|
-
{/if}
|
|
268
|
+
After each step completes, call gemini to evaluate execution quality and generate optimization hints.
|
|
251
269
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
270
|
+
```javascript
|
|
271
|
+
const analysisPrompt = `PURPOSE: Evaluate execution quality of coordinate step "${step.cmd}" and generate optimization hints for the next step.
|
|
272
|
+
CHAIN: ${state.chain_name} | Intent: ${state.intent}
|
|
273
|
+
COMMAND: /${step.cmd} ${step.args || ''}
|
|
274
|
+
STEP OUTPUT (last 200 lines):
|
|
275
|
+
${output.split('\n').slice(-200).join('\n')}
|
|
276
|
+
NEXT STEP: ${nextStep ? `/${nextStep.cmd} ${nextStep.args || ''}` : 'None (last step)'}
|
|
277
|
+
EXPECTED OUTPUT (strict JSON):
|
|
255
278
|
{
|
|
256
|
-
"quality_score": <0-
|
|
257
|
-
"
|
|
258
|
-
"
|
|
259
|
-
|
|
279
|
+
"quality_score": <0-100>,
|
|
280
|
+
"execution_assessment": { "success": <bool>, "completeness": "<full|partial|minimal>", "key_outputs": [], "missing_outputs": [] },
|
|
281
|
+
"issues": [{ "severity": "critical|high|medium|low", "description": "" }],
|
|
282
|
+
"next_step_hints": {
|
|
283
|
+
"prompt_additions": "<extra context or constraints to inject into next step prompt>",
|
|
284
|
+
"cautions": ["<things next step should watch out for>"],
|
|
285
|
+
"context_to_carry": "<key facts from this step's output that next step needs>"
|
|
286
|
+
},
|
|
287
|
+
"step_summary": ""
|
|
288
|
+
}`;
|
|
289
|
+
|
|
290
|
+
let delegateCmd = `codex delegate ${escapeForShell(analysisPrompt)} --to gemini --mode analysis --rule analysis-review-code-quality`;
|
|
291
|
+
if (state.gemini_session_id) delegateCmd += ` --resume ${state.gemini_session_id}`;
|
|
292
|
+
Bash({ command: delegateCmd, run_in_background: true, timeout: 300000 });
|
|
293
|
+
// ■ STOP — wait for hook callback
|
|
260
294
|
```
|
|
261
295
|
|
|
262
|
-
|
|
296
|
+
### Step 7c: Post-Analyze Callback
|
|
297
|
+
|
|
298
|
+
```javascript
|
|
299
|
+
const analysisResult = /* parsed JSON from callback output */;
|
|
300
|
+
state.gemini_session_id = /* from callback stderr */;
|
|
301
|
+
|
|
302
|
+
if (!state.step_analyses) state.step_analyses = [];
|
|
303
|
+
state.step_analyses.push({
|
|
304
|
+
step_index: stepIdx, cmd: step.cmd,
|
|
305
|
+
quality_score: analysisResult.quality_score,
|
|
306
|
+
issues: analysisResult.issues,
|
|
307
|
+
next_step_hints: analysisResult.next_step_hints,
|
|
308
|
+
summary: analysisResult.step_summary
|
|
309
|
+
});
|
|
310
|
+
step.analysis = {
|
|
311
|
+
quality_score: analysisResult.quality_score,
|
|
312
|
+
issue_count: (analysisResult.issues || []).length
|
|
313
|
+
};
|
|
314
|
+
Write(`${sessionDir}/step-${stepIdx + 1}-analysis.json`, JSON.stringify(analysisResult, null, 2));
|
|
315
|
+
|
|
316
|
+
// Advance
|
|
317
|
+
state.current_step = stepIdx + 1;
|
|
318
|
+
Write(`${sessionDir}/state.json`, JSON.stringify(state, null, 2));
|
|
319
|
+
|
|
320
|
+
if (state.current_step < state.steps.length) { /* → Step 6 */ }
|
|
321
|
+
else { /* → Step 8 */ }
|
|
263
322
|
```
|
|
264
323
|
|
|
265
324
|
---
|
|
266
325
|
|
|
267
|
-
###
|
|
326
|
+
### Step 8: Completion Report
|
|
268
327
|
|
|
269
328
|
```javascript
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
explanation: "Coordinate complete",
|
|
275
|
-
plan: [
|
|
276
|
-
{ step: "Phase 1: Resolve intent and chain", status: "completed" },
|
|
277
|
-
{ step: "Phase 2: Execute steps (pipeline)", status: "completed" },
|
|
278
|
-
{ step: "Phase 3: Completion report", status: "completed" }
|
|
279
|
-
]
|
|
280
|
-
})
|
|
329
|
+
const done = state.steps.filter(s => s.status === 'completed').length;
|
|
330
|
+
state.status = state.steps.some(s => s.status === 'failed') ? 'completed_with_errors' : 'completed';
|
|
331
|
+
state.completed_at = new Date().toISOString();
|
|
332
|
+
Write(`${sessionDir}/state.json`, JSON.stringify(state, null, 2));
|
|
281
333
|
```
|
|
282
334
|
|
|
283
|
-
Display:
|
|
284
335
|
```
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
336
|
+
============================================================
|
|
337
|
+
MAESTRO-COORDINATE COMPLETE
|
|
338
|
+
============================================================
|
|
339
|
+
Session: {session_id}
|
|
340
|
+
Chain: {chain_name} ({done}/{total})
|
|
341
|
+
Tool: {cliTool}
|
|
342
|
+
|
|
343
|
+
Steps:
|
|
344
|
+
[✓] 1. maestro-plan — completed (quality: 85/100)
|
|
345
|
+
[✓] 2. maestro-execute — completed (quality: 78/100)
|
|
346
|
+
|
|
347
|
+
Avg Quality: {avg_score}/100
|
|
348
|
+
Next: $maestro-coordinate --continue
|
|
349
|
+
============================================================
|
|
297
350
|
```
|
|
298
351
|
|
|
299
352
|
---
|
|
300
353
|
|
|
301
354
|
## Error Handling
|
|
302
355
|
|
|
303
|
-
| Code | Severity |
|
|
304
|
-
|
|
305
|
-
| E001 | error |
|
|
306
|
-
| E002 | error |
|
|
307
|
-
| E003 | error | Step
|
|
308
|
-
| E004 | error |
|
|
309
|
-
| E005 | error |
|
|
310
|
-
| W001 | warning | Step output JSON missing `hints_for_next` | Continue with empty hints; next step still gets `findings` |
|
|
356
|
+
| Code | Severity | Description | Recovery |
|
|
357
|
+
|------|----------|-------------|----------|
|
|
358
|
+
| E001 | error | No intent and project not initialized | Suggest $maestro-init |
|
|
359
|
+
| E002 | error | Clarity too low after 2 rounds | Ask to rephrase |
|
|
360
|
+
| E003 | error | Step failed + abort | Suggest resume with -c |
|
|
361
|
+
| E004 | error | Resume session not found | Show available sessions |
|
|
362
|
+
| E005 | error | CLI tool unavailable | Try fallback tool |
|
|
311
363
|
|
|
312
364
|
---
|
|
313
365
|
|
|
314
366
|
## Core Rules
|
|
315
367
|
|
|
316
|
-
1. **
|
|
317
|
-
2. **
|
|
318
|
-
3. **
|
|
319
|
-
4. **
|
|
320
|
-
5. **
|
|
321
|
-
6. **
|
|
322
|
-
7. **
|
|
323
|
-
8. **
|
|
324
|
-
9. **
|
|
368
|
+
1. **Semantic routing** — LLM-native structured extraction (`action × object`) replaces regex; disambiguates by context
|
|
369
|
+
2. **STOP after each `codex delegate` call** — background execution, wait for hook callback
|
|
370
|
+
3. **State machine** — advance via `current_step`, no sync loops for async operations
|
|
371
|
+
4. **Template-driven** — all steps use `coordinate-step.txt`, no per-command prompt assembly
|
|
372
|
+
5. **Context propagation** — parse PHASE / spec session ID / scratch_dir / issue_id from each step output, feed to next step
|
|
373
|
+
6. **Quality gates** — issue chains auto-include review; `issue-full` is default for issue execution
|
|
374
|
+
7. **Tool fallback** — if `codex delegate` fails: retry with same tool once, then try `gemini` → `qwen`
|
|
375
|
+
8. **Auto-confirm injection** — `{{AUTO_DIRECTIVE}}` in template prevents blocking during background execution
|
|
376
|
+
9. **Resumable** — `-c` reads `state.json`, jumps to first pending step
|
|
377
|
+
10. **Gemini analysis after each step** — evaluate output quality via `codex delegate --to gemini --mode analysis`, chained via `--resume`
|
|
378
|
+
11. **Session capture** — after each gemini callback, capture exec_id → `gemini_session_id` for resume chain
|
|
379
|
+
12. **Analysis skip conditions** — skip gemini analysis for: failed/skipped steps, single-step chains
|