maestro-flow 0.3.15 → 0.3.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/workflow-planner.md +24 -8
- package/.claude/commands/maestro-amend.md +300 -0
- package/.claude/commands/maestro-analyze.md +1 -49
- package/.claude/commands/maestro-execute.md +2 -56
- package/.claude/commands/maestro-fork.md +3 -50
- package/.claude/commands/maestro-merge.md +2 -26
- package/.claude/commands/maestro-milestone-audit.md +1 -5
- package/.claude/commands/maestro-milestone-complete.md +1 -7
- package/.claude/commands/maestro-plan.md +6 -127
- package/.claude/commands/maestro-roadmap.md +3 -101
- package/.claude/commands/maestro-spec-generate.md +1 -25
- package/.claude/commands/maestro-ui-design.md +14 -73
- package/.claude/commands/maestro-verify.md +1 -32
- package/.claude/commands/maestro.md +13 -30
- package/.claude/commands/manage-harvest.md +7 -44
- package/.claude/commands/manage-knowhow-capture.md +193 -0
- package/.claude/commands/{manage-memory.md → manage-knowhow.md} +77 -88
- package/.claude/commands/manage-learn.md +3 -28
- package/.claude/commands/manage-status.md +1 -20
- package/.claude/commands/manage-wiki.md +1 -1
- package/.claude/commands/quality-business-test.md +1 -1
- package/.claude/commands/quality-debug.md +3 -18
- package/.claude/commands/quality-integration-test.md +3 -23
- package/.claude/commands/quality-retrospective.md +1 -28
- package/.claude/commands/quality-review.md +3 -52
- package/.claude/commands/quality-test-gen.md +1 -10
- package/.claude/commands/quality-test.md +3 -25
- package/.claude/commands/spec-add.md +1 -21
- package/.claude/commands/spec-load.md +1 -16
- package/.claude/commands/wiki-connect.md +2 -112
- package/.claude/commands/wiki-digest.md +2 -141
- package/.codex/skills/learn-decompose/SKILL.md +2 -8
- package/.codex/skills/maestro/SKILL.md +60 -146
- package/.codex/skills/maestro-analyze/SKILL.md +52 -150
- package/.codex/skills/maestro-brainstorm/SKILL.md +36 -91
- package/.codex/skills/maestro-composer/SKILL.md +4 -76
- package/.codex/skills/maestro-execute/SKILL.md +46 -177
- package/.codex/skills/maestro-init/SKILL.md +7 -51
- package/.codex/skills/maestro-link-coordinate/SKILL.md +56 -229
- package/.codex/skills/maestro-milestone-audit/SKILL.md +7 -36
- package/.codex/skills/maestro-milestone-complete/SKILL.md +11 -93
- package/.codex/skills/maestro-overlay/SKILL.md +23 -92
- package/.codex/skills/maestro-plan/SKILL.md +70 -166
- package/.codex/skills/maestro-player/SKILL.md +24 -149
- package/.codex/skills/maestro-quick/SKILL.md +5 -48
- package/.codex/skills/maestro-roadmap/SKILL.md +21 -66
- package/.codex/skills/maestro-spec-generate/SKILL.md +20 -56
- package/.codex/skills/maestro-ui-design/SKILL.md +6 -53
- package/.codex/skills/maestro-verify/SKILL.md +39 -136
- package/.codex/skills/manage-codebase-rebuild/SKILL.md +25 -75
- package/.codex/skills/manage-codebase-refresh/SKILL.md +5 -32
- package/.codex/skills/manage-issue/SKILL.md +1 -6
- package/.codex/skills/manage-issue-discover/SKILL.md +33 -93
- package/.codex/skills/{manage-memory → manage-knowhow}/SKILL.md +95 -95
- package/.codex/skills/manage-knowhow-capture/SKILL.md +110 -0
- package/.codex/skills/manage-learn/SKILL.md +17 -71
- package/.codex/skills/manage-status/SKILL.md +4 -35
- package/.codex/skills/manage-wiki/SKILL.md +1 -1
- package/.codex/skills/quality-business-test/SKILL.md +2 -14
- package/.codex/skills/quality-debug/SKILL.md +41 -133
- package/.codex/skills/quality-integration-test/SKILL.md +36 -145
- package/.codex/skills/quality-refactor/SKILL.md +6 -59
- package/.codex/skills/quality-retrospective/SKILL.md +292 -531
- package/.codex/skills/quality-review/SKILL.md +30 -65
- package/.codex/skills/quality-sync/SKILL.md +2 -11
- package/.codex/skills/quality-test/SKILL.md +4 -45
- package/.codex/skills/quality-test-gen/SKILL.md +33 -121
- package/.codex/skills/spec-add/SKILL.md +2 -9
- package/.codex/skills/spec-load/SKILL.md +4 -14
- package/.codex/skills/spec-map/SKILL.md +4 -37
- package/.codex/skills/spec-remove/SKILL.md +3 -35
- package/.codex/skills/spec-setup/SKILL.md +2 -19
- package/.codex/skills/team-coordinate/SKILL.md +20 -132
- package/.codex/skills/team-coordinate/roles/coordinator/commands/monitor.md +61 -215
- package/.codex/skills/team-executor/SKILL.md +7 -66
- package/.codex/skills/team-executor/roles/executor/commands/monitor.md +60 -182
- package/.codex/skills/team-executor/specs/session-schema.md +22 -56
- package/.codex/skills/team-lifecycle-v4/SKILL.md +22 -143
- package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +31 -223
- package/.codex/skills/team-quality-assurance/SKILL.md +14 -88
- package/.codex/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +46 -186
- package/.codex/skills/team-review/SKILL.md +12 -86
- package/.codex/skills/team-review/roles/coordinator/commands/monitor.md +49 -187
- package/.codex/skills/team-tech-debt/SKILL.md +11 -50
- package/.codex/skills/team-tech-debt/roles/coordinator/commands/monitor.md +50 -239
- package/.codex/skills/team-testing/SKILL.md +14 -99
- package/.codex/skills/team-testing/roles/coordinator/commands/monitor.md +52 -228
- package/.codex/skills/wiki-connect/SKILL.md +2 -5
- package/README.md +6 -0
- package/README.zh-CN.md +6 -0
- package/chains/_intent-map.json +7 -7
- package/chains/singles/{memory-capture.json → knowhow-capture.json} +5 -5
- package/chains/singles/{memory.json → knowhow.json} +6 -6
- package/dashboard/dist/assets/{ArtifactsPage-CUrrDGgN.js → ArtifactsPage-iJZtYsmR.js} +6 -6
- package/dashboard/dist/assets/ChatInput-DNnDLdQF.js +6 -0
- package/dashboard/dist/assets/ChatPage-BjBibfE4.js +22 -0
- package/dashboard/dist/assets/{CollabPage-DIUXeazv.js → CollabPage-8lUMUol_.js} +1 -1
- package/dashboard/dist/assets/{ExecutionPanel-VmYeADFj.js → ExecutionPanel-BKV3GZ7Q.js} +1 -1
- package/dashboard/dist/assets/{KanbanPage-DLq8v7hg.js → KanbanPage-diY3QmGd.js} +2 -2
- package/dashboard/dist/assets/{MarkdownRenderer-D7AehrnR.js → MarkdownRenderer-cYFfe1uX.js} +1 -1
- package/dashboard/dist/assets/McpPage-COjuIf7U.js +21 -0
- package/dashboard/dist/assets/MeetingRoomPage-wnvT7wlB.js +85 -0
- package/dashboard/dist/assets/{OutputPanel-B-Rjwgmv.js → OutputPanel-DDL90Idy.js} +1 -1
- package/dashboard/dist/assets/{ProblemsPanel-GEpF-oi4.js → ProblemsPanel-zFN9IIs0.js} +1 -1
- package/dashboard/dist/assets/{RequirementBoardPage-xs8uDM7I.js → RequirementBoardPage-DOPJoT0I.js} +2 -2
- package/dashboard/dist/assets/{RequirementPage-BKDSFwjA.js → RequirementPage-CEVquRgM.js} +1 -1
- package/dashboard/dist/assets/RoomsPage-D5USEWDh.js +1 -0
- package/dashboard/dist/assets/{SpecsPage-DLFb9ZH0.js → SpecsPage-BOwBin_o.js} +1 -1
- package/dashboard/dist/assets/{SupervisorPage-SOki_kgz.js → SupervisorPage-5iRyMU5T.js} +1 -1
- package/dashboard/dist/assets/TeamsPage-DlcEmr_Q.js +1 -0
- package/dashboard/dist/assets/{TreeBrowser-B9DHdULE.js → TreeBrowser-Y48Wz-QY.js} +1 -1
- package/dashboard/dist/assets/WorkflowPage-CmQaRVgL.js +6 -0
- package/dashboard/dist/assets/arrow-left-NCUOENvg.js +6 -0
- package/dashboard/dist/assets/{check-DJDk3A2a.js → check-o7nfGNHf.js} +1 -1
- package/dashboard/dist/assets/{chevron-right-C7bVDreZ.js → chevron-right-BXySK2fn.js} +1 -1
- package/dashboard/dist/assets/{circle-alert-Na1vf6qQ.js → circle-alert-DcSBokh4.js} +1 -1
- package/dashboard/dist/assets/{circle-check-CEGgy3NV.js → circle-check-Cd-jce4j.js} +1 -1
- package/dashboard/dist/assets/{circle-check-big-3JB8zRYj.js → circle-check-big-BN7Mdp4i.js} +1 -1
- package/dashboard/dist/assets/{circle-Qfgy4LB_.js → circle-cooAwnAR.js} +1 -1
- package/dashboard/dist/assets/{code-Ble63Idz.js → code-BQa9oL1n.js} +1 -1
- package/dashboard/dist/assets/{columns-3-BUcKlxve.js → columns-3-BzgxelGx.js} +1 -1
- package/dashboard/dist/assets/{download-CMqkfn8x.js → download-swRJnate.js} +1 -1
- package/dashboard/dist/assets/en-C_BD3UCD.js +1 -0
- package/dashboard/dist/assets/{folder-B9ewx9LL.js → folder-DbGbLNFN.js} +1 -1
- package/dashboard/dist/assets/index-BEUaOz_b.css +1 -0
- package/dashboard/dist/assets/{index-JTmGteaT.js → index-DIoMBMbv.js} +1 -1
- package/dashboard/dist/assets/index-DLBN_7fb.js +44 -0
- package/dashboard/dist/assets/index-uIqUCT8y.js +236 -0
- package/dashboard/dist/assets/{list-DI8Wn2aT.js → list-BTRAIvDq.js} +1 -1
- package/dashboard/dist/assets/loader-NHtB6Mdn.js +6 -0
- package/dashboard/dist/assets/{minus-Lp_BfctG.js → minus-BjMxRTET.js} +1 -1
- package/dashboard/dist/assets/{pen-line-Ch7sphzZ.js → pen-line-C4_O16H0.js} +1 -1
- package/dashboard/dist/assets/{pencil-_yRMHmGT.js → pencil-DTmKhyDY.js} +1 -1
- package/dashboard/dist/assets/{proxy-D72Y8a4Y.js → proxy-Dtx5p6IO.js} +1 -1
- package/dashboard/dist/assets/rows-2-GR1dZtRu.js +6 -0
- package/dashboard/dist/assets/{search-BS6fI6Bg.js → search-DVtgy2W7.js} +1 -1
- package/dashboard/dist/assets/{shallow-BXasQBvr.js → shallow-BOmvDNsv.js} +1 -1
- package/dashboard/dist/assets/{table-CeGlFjlP.js → table-DCzuJAFh.js} +1 -1
- package/dashboard/dist/assets/team-types-BPeOvVdA.js +6 -0
- package/dashboard/dist/assets/{terminal-BJic2yW-.js → terminal-CzogW4cl.js} +1 -1
- package/dashboard/dist/assets/{trash-2-Czz4X8Fb.js → trash-2-52LATVfW.js} +1 -1
- package/dashboard/dist/assets/users-DLFE2voE.js +6 -0
- package/dashboard/dist/assets/{zap-C3H0jVFA.js → zap-DhiYlgyZ.js} +1 -1
- package/dashboard/dist/assets/zh-CN-DvQKfow3.js +1 -0
- package/dashboard/dist/index.html +2 -2
- package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.d.ts +2 -0
- package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js +19 -11
- package/dashboard/dist-server/dashboard/src/server/agents/agent-manager.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js +5 -0
- package/dashboard/dist-server/dashboard/src/server/agents/agent-sdk-adapter.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.d.ts +1 -0
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js +21 -4
- package/dashboard/dist-server/dashboard/src/server/agents/claude-code-adapter.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/env-cleanup.js +8 -0
- package/dashboard/dist-server/dashboard/src/server/agents/env-cleanup.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js +6 -6
- package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.test.js +2 -2
- package/dashboard/dist-server/dashboard/src/server/coordinator/chain-map.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/index.js +14 -3
- package/dashboard/dist-server/dashboard/src/server/index.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.d.ts +24 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.js +220 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.d.ts +1 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.js +115 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/mcp-config-builder.test.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.d.ts +44 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.js +260 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.d.ts +1 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.js +194 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/meeting-room-mcp-server.test.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.d.ts +2 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.js +279 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/stdio-bridge.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.d.ts +14 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.js +131 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.d.ts +1 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.js +134 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/mcp-server/tcp-helpers.test.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.d.ts +51 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.js +185 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/meeting-room-session.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.d.ts +29 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.js +125 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/room-agent-registry.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.d.ts +18 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.js +63 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/room-mailbox.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.d.ts +19 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.js +45 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/room-session-manager.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.d.ts +25 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.js +115 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/room-task-board.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/room-types.d.ts +53 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/room-types.js +5 -0
- package/dashboard/dist-server/dashboard/src/server/rooms/room-types.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/routes/agents.js +6 -0
- package/dashboard/dist-server/dashboard/src/server/routes/agents.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/cli-history.js +20 -1
- package/dashboard/dist-server/dashboard/src/server/routes/cli-history.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/index.d.ts +2 -1
- package/dashboard/dist-server/dashboard/src/server/routes/index.js +8 -1
- package/dashboard/dist-server/dashboard/src/server/routes/index.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/install.js +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/install.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/mcp.js +2 -2
- package/dashboard/dist-server/dashboard/src/server/routes/mcp.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.d.ts +3 -0
- package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.js +246 -0
- package/dashboard/dist-server/dashboard/src/server/routes/room-mcp.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/routes/rooms.d.ts +3 -0
- package/dashboard/dist-server/dashboard/src/server/routes/rooms.js +38 -0
- package/dashboard/dist-server/dashboard/src/server/routes/rooms.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js +7 -7
- package/dashboard/dist-server/dashboard/src/server/routes/wiki.integration.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/wiki.js +1 -1
- package/dashboard/dist-server/dashboard/src/server/routes/wiki.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/state/event-bus.d.ts +39 -1
- package/dashboard/dist-server/dashboard/src/server/state/event-bus.js +12 -0
- package/dashboard/dist-server/dashboard/src/server/state/event-bus.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/stress.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +25 -14
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js +6 -6
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-types.d.ts +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js +17 -16
- package/dashboard/dist-server/dashboard/src/server/wiki/writer-stress.test.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/writer.d.ts +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/writer.js +18 -7
- package/dashboard/dist-server/dashboard/src/server/wiki/writer.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.d.ts +3 -1
- package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.js +75 -1
- package/dashboard/dist-server/dashboard/src/server/ws/handlers/agent-handler.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.d.ts +17 -0
- package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.js +192 -0
- package/dashboard/dist-server/dashboard/src/server/ws/handlers/room-handler.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.d.ts +13 -0
- package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.js +37 -0
- package/dashboard/dist-server/dashboard/src/server/ws/session-scoped-event-filter.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.d.ts +7 -1
- package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.js +39 -2
- package/dashboard/dist-server/dashboard/src/server/ws/ws-manager.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/shared/constants.js +12 -0
- package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.d.ts +1 -0
- package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.js +38 -0
- package/dashboard/dist-server/dashboard/src/shared/room-leader-prompt.js.map +1 -0
- package/dashboard/dist-server/dashboard/src/shared/team-types.d.ts +66 -0
- package/dashboard/dist-server/dashboard/src/shared/team-types.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/shared/types.d.ts +24 -3
- package/dashboard/dist-server/dashboard/src/shared/ws-protocol.d.ts +76 -2
- package/dashboard/dist-server/dashboard/src/shared/ws-protocol.js.map +1 -1
- package/dashboard/dist-server/shared/agent-types.d.ts +2 -0
- package/dashboard/dist-server/src/commands/delegate.js +11 -8
- package/dashboard/dist-server/src/commands/delegate.js.map +1 -1
- package/dist/shared/agent-types.d.ts +2 -0
- package/dist/shared/agent-types.d.ts.map +1 -1
- package/dist/src/cli.js +2 -2
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/delegate.d.ts.map +1 -1
- package/dist/src/commands/delegate.js +11 -8
- package/dist/src/commands/delegate.js.map +1 -1
- package/dist/src/commands/install-backend.d.ts +1 -1
- package/dist/src/commands/install-backend.d.ts.map +1 -1
- package/dist/src/commands/install-backend.js +1 -1
- package/dist/src/commands/install-backend.js.map +1 -1
- package/dist/src/commands/install-ui/ExecutionView.d.ts.map +1 -1
- package/dist/src/commands/install-ui/ExecutionView.js +4 -1
- package/dist/src/commands/install-ui/ExecutionView.js.map +1 -1
- package/dist/src/commands/install-ui/InstallExecution.d.ts.map +1 -1
- package/dist/src/commands/install-ui/InstallExecution.js +4 -1
- package/dist/src/commands/install-ui/InstallExecution.js.map +1 -1
- package/dist/src/commands/install.js +5 -5
- package/dist/src/commands/install.js.map +1 -1
- package/dist/src/commands/knowhow.d.ts +10 -0
- package/dist/src/commands/knowhow.d.ts.map +1 -0
- package/dist/src/commands/knowhow.js +217 -0
- package/dist/src/commands/knowhow.js.map +1 -0
- package/dist/src/commands/overlay-ui/OverlayList.d.ts +2 -0
- package/dist/src/commands/overlay-ui/OverlayList.d.ts.map +1 -1
- package/dist/src/commands/overlay-ui/OverlayList.js +6 -3
- package/dist/src/commands/overlay-ui/OverlayList.js.map +1 -1
- package/dist/src/commands/overlay-ui/index.d.ts.map +1 -1
- package/dist/src/commands/overlay-ui/index.js +70 -44
- package/dist/src/commands/overlay-ui/index.js.map +1 -1
- package/dist/src/commands/overlay.d.ts.map +1 -1
- package/dist/src/commands/overlay.js +4 -3
- package/dist/src/commands/overlay.js.map +1 -1
- package/dist/src/commands/update.d.ts.map +1 -1
- package/dist/src/commands/update.js +31 -21
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/core/manifest.d.ts +8 -1
- package/dist/src/core/manifest.d.ts.map +1 -1
- package/dist/src/core/manifest.js +3 -1
- package/dist/src/core/manifest.js.map +1 -1
- package/dist/src/core/overlay/applier.d.ts +1 -1
- package/dist/src/core/overlay/applier.d.ts.map +1 -1
- package/dist/src/core/overlay/applier.js +40 -13
- package/dist/src/core/overlay/applier.js.map +1 -1
- package/dist/src/core/overlay/loader.d.ts.map +1 -1
- package/dist/src/core/overlay/loader.js +6 -0
- package/dist/src/core/overlay/loader.js.map +1 -1
- package/dist/src/core/overlay/types.d.ts +5 -1
- package/dist/src/core/overlay/types.d.ts.map +1 -1
- package/dist/src/core/overlay/types.js +1 -1
- package/dist/src/core/overlay/types.js.map +1 -1
- package/dist/src/hooks/context-monitor.js +1 -1
- package/dist/src/hooks/context-monitor.js.map +1 -1
- package/dist/src/hooks/skill-context.js +1 -1
- package/dist/src/hooks/skill-context.js.map +1 -1
- package/dist/src/mcp/delegate-channel-relay.d.ts +4 -0
- package/dist/src/mcp/delegate-channel-relay.d.ts.map +1 -1
- package/dist/src/mcp/delegate-channel-relay.js +73 -4
- package/dist/src/mcp/delegate-channel-relay.js.map +1 -1
- package/dist/src/tools/index.js +2 -2
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/store-knowhow.d.ts +21 -0
- package/dist/src/tools/store-knowhow.d.ts.map +1 -0
- package/dist/src/tools/store-knowhow.js +295 -0
- package/dist/src/tools/store-knowhow.js.map +1 -0
- package/package.json +1 -1
- package/shared/agent-types.ts +2 -0
- package/workflows/analyze.md +61 -185
- package/workflows/brainstorm.md +3 -23
- package/workflows/codebase-rebuild.md +79 -191
- package/workflows/codebase-refresh.md +26 -124
- package/workflows/debug.md +21 -141
- package/workflows/execute.md +183 -350
- package/workflows/fork.md +72 -230
- package/workflows/harvest.md +12 -79
- package/workflows/init.md +3 -17
- package/workflows/integration-test.md +21 -190
- package/workflows/issue-analyze.md +35 -153
- package/workflows/issue-discover.md +88 -263
- package/workflows/issue-execute.md +29 -208
- package/workflows/issue-plan.md +33 -154
- package/workflows/issue.md +44 -202
- package/workflows/knowhow.md +374 -0
- package/workflows/learn.md +30 -177
- package/workflows/maestro-coordinate.codex.md +77 -362
- package/workflows/maestro-link-coordinate.md +12 -61
- package/workflows/maestro.codex.md +124 -457
- package/workflows/maestro.md +562 -976
- package/workflows/map.md +16 -53
- package/workflows/merge.md +42 -197
- package/workflows/milestone-audit.md +5 -43
- package/workflows/milestone-complete.md +11 -60
- package/workflows/plan.md +188 -387
- package/workflows/quick.md +25 -174
- package/workflows/refactor.md +28 -221
- package/workflows/retrospective.md +104 -443
- package/workflows/review.md +87 -299
- package/workflows/roadmap.md +117 -97
- package/workflows/spec-generate.md +22 -118
- package/workflows/specs-add.md +5 -25
- package/workflows/specs-load.md +1 -5
- package/workflows/specs-remove.md +0 -11
- package/workflows/specs-setup.md +11 -47
- package/workflows/status.md +58 -200
- package/workflows/sync.md +28 -141
- package/workflows/test-gen.md +23 -100
- package/workflows/test.md +15 -125
- package/workflows/ui-design.md +139 -465
- package/workflows/ui-style.md +36 -228
- package/workflows/verify.md +52 -273
- package/workflows/wiki-connect.md +9 -46
- package/workflows/wiki-digest.md +7 -50
- package/workflows/wiki-manage.md +11 -108
- package/.claude/commands/maestro-coordinate.md +0 -63
- package/.claude/commands/manage-memory-capture.md +0 -59
- package/.codex/skills/maestro-coordinate/SKILL.md +0 -213
- package/.codex/skills/manage-memory-capture/SKILL.md +0 -93
- package/dashboard/dist/assets/ChatInput-pUOLJIKE.js +0 -49
- package/dashboard/dist/assets/ChatPage-B8Xqkt0v.js +0 -27
- package/dashboard/dist/assets/McpPage-BY0SjTgw.js +0 -21
- package/dashboard/dist/assets/TeamsPage-BO2kP70F.js +0 -11
- package/dashboard/dist/assets/WorkflowPage-C8hWbYim.js +0 -6
- package/dashboard/dist/assets/en-ZbRpfzuP.js +0 -1
- package/dashboard/dist/assets/index-C2Mcb4TJ.js +0 -231
- package/dashboard/dist/assets/index-DyBbPc18.css +0 -1
- package/dashboard/dist/assets/loader-B5F6PzFT.js +0 -11
- package/dashboard/dist/assets/zh-CN-CoXBFuny.js +0 -1
- package/workflows/maestro-coordinate.md +0 -582
- package/workflows/memory.md +0 -451
|
@@ -1,582 +0,0 @@
|
|
|
1
|
-
# Workflow: maestro-coordinate
|
|
2
|
-
|
|
3
|
-
Autonomous CLI coordinator. Classifies intent, selects command chain, executes each step via `maestro delegate` with template-driven prompts and async state machine.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
### Step 1: Parse Arguments
|
|
8
|
-
|
|
9
|
-
```javascript
|
|
10
|
-
const args = $ARGUMENTS.trim();
|
|
11
|
-
const autoYes = /\b(-y|--yes)\b/.test(args);
|
|
12
|
-
const resumeMode = /\b(-c|--continue)\b/.test(args);
|
|
13
|
-
const dryRun = /\b--dry-run\b/.test(args);
|
|
14
|
-
const forcedChain = args.match(/--chain\s+(\S+)/)?.[1] || null;
|
|
15
|
-
const cliTool = args.match(/--tool\s+(\S+)/)?.[1] || 'claude';
|
|
16
|
-
const intent = args
|
|
17
|
-
.replace(/\b(-y|--yes|-c|--continue|--dry-run)\b/g, '')
|
|
18
|
-
.replace(/--(chain|tool)\s+\S+/g, '')
|
|
19
|
-
.trim();
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
**If resumeMode:**
|
|
23
|
-
1. Find latest `status.json` in `.workflow/.maestro-coordinate/`
|
|
24
|
-
2. Load state → set `current_step` to first non-completed step
|
|
25
|
-
3. Jump to **Step 6**
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
### Step 2: Read Project State
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
test -f .workflow/state.json && echo "exists" || echo "missing"
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
**If exists:** Read `.workflow/state.json` + `.workflow/roadmap.md` + current phase `index.json`:
|
|
36
|
-
|
|
37
|
-
```javascript
|
|
38
|
-
const projectState = {
|
|
39
|
-
initialized: true,
|
|
40
|
-
current_milestone: /* from state.json */,
|
|
41
|
-
latest_artifact: /* last artifact in artifacts[] */,
|
|
42
|
-
milestone_progress: '...', // derived from artifact registry
|
|
43
|
-
phase_artifacts: { brainstorm: false, analysis: false, context: false, plan: false, verification: false, uat: false },
|
|
44
|
-
execution: { tasks_completed: 0, tasks_total: 0 },
|
|
45
|
-
verification_status: 'pending',
|
|
46
|
-
review_verdict: null, // PASS|WARN|BLOCK|null
|
|
47
|
-
uat_status: 'pending',
|
|
48
|
-
phases_total: 0, phases_completed: 0,
|
|
49
|
-
has_blockers: false, accumulated_context: null
|
|
50
|
-
};
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
**If missing:** `projectState = { initialized: false }`. If intent also empty → **Error E001**.
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
### Step 3: Classify Intent & Select Chain
|
|
58
|
-
|
|
59
|
-
#### 3a: Exact-match keywords (fast path)
|
|
60
|
-
|
|
61
|
-
If `forcedChain` is set, validate and jump to **3c**.
|
|
62
|
-
|
|
63
|
-
```javascript
|
|
64
|
-
const exactMatch = {
|
|
65
|
-
'continue': 'state_continue', 'next': 'state_continue', 'go': 'state_continue',
|
|
66
|
-
'继续': 'state_continue', '下一步': 'state_continue',
|
|
67
|
-
'status': 'status', '状态': 'status', 'dashboard': 'status',
|
|
68
|
-
};
|
|
69
|
-
const normalized = intent.toLowerCase().trim();
|
|
70
|
-
if (exactMatch[normalized]) {
|
|
71
|
-
taskType = exactMatch[normalized];
|
|
72
|
-
// → skip to 3c
|
|
73
|
-
}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
#### 3a-2: Structured intent extraction (LLM-native)
|
|
77
|
-
|
|
78
|
-
> **Implementation note**: The runtime (`src/coordinator/intent-router.ts`) currently
|
|
79
|
-
> uses pattern-based regex matching via `chains/_intent-map.json`. The structured
|
|
80
|
-
> extraction below is a design target, not the current implementation.
|
|
81
|
-
|
|
82
|
-
Instead of regex, extract a structured intent tuple using LLM semantic understanding:
|
|
83
|
-
|
|
84
|
-
```json
|
|
85
|
-
{
|
|
86
|
-
"action": "<create|fix|analyze|plan|execute|verify|review|test|debug|refactor|explore|manage|transition|continue|sync|learn|retrospect>",
|
|
87
|
-
"object": "<feature|bug|issue|code|test|spec|phase|milestone|doc|performance|security|ui|memory|codebase|team|config>",
|
|
88
|
-
"scope": "<module/file/area or null>",
|
|
89
|
-
"issue_id": "<ISS-XXXXXXXX-NNN if mentioned, else null>",
|
|
90
|
-
"phase_ref": "<integer if mentioned, else null>",
|
|
91
|
-
"urgency": "<low|normal|high>"
|
|
92
|
-
}
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
**Key disambiguation**: "问题"/"issue"/"problem" as something broken → `object: "bug"` (routes to debug). As a tracked item (with ISS-ID or management context) → `object: "issue"` (routes to issue management). When ambiguous, prefer `"bug"`.
|
|
96
|
-
|
|
97
|
-
#### 3a-3: Route via action × object matrix
|
|
98
|
-
|
|
99
|
-
```javascript
|
|
100
|
-
function routeIntent(intent, projectState) {
|
|
101
|
-
const { action, object, issue_id } = intent;
|
|
102
|
-
|
|
103
|
-
// Hard signal: explicit issue ID → issue pipeline
|
|
104
|
-
if (issue_id) {
|
|
105
|
-
const issueRoutes = { 'analyze': 'issue_analyze', 'plan': 'issue_plan', 'fix': 'issue_execute', 'execute': 'issue_execute', 'debug': 'issue_analyze', 'manage': 'issue' };
|
|
106
|
-
return issueRoutes[action] || 'issue';
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// Action × Object matrix
|
|
110
|
-
const matrix = {
|
|
111
|
-
'fix': { 'bug': 'debug', 'issue': 'issue', 'code': 'debug', 'performance': 'debug', 'security': 'debug', '_default': 'debug' },
|
|
112
|
-
'create': { 'feature': 'quick', 'issue': 'issue', 'test': 'test_gen', 'spec': 'spec_generate', 'ui': 'ui_design', 'config': 'init', 'phase': 'roadmap', '_default': 'quick' },
|
|
113
|
-
'analyze': { 'bug': 'analyze', 'issue': 'issue_analyze', 'code': 'analyze', 'codebase': 'spec_map', '_default': 'analyze' },
|
|
114
|
-
'explore': { 'issue': 'issue_discover', 'feature': 'brainstorm', 'ui': 'ui_design', '_default': 'brainstorm' },
|
|
115
|
-
'plan': { 'issue': 'issue_plan', 'spec': 'spec_generate', '_default': 'plan' },
|
|
116
|
-
'execute': { 'issue': 'issue_execute', '_default': 'execute' },
|
|
117
|
-
'verify': { '_default': 'verify' },
|
|
118
|
-
'review': { '_default': 'review' },
|
|
119
|
-
'test': { '_default': 'test' },
|
|
120
|
-
'debug': { '_default': 'debug' },
|
|
121
|
-
'refactor': { '_default': 'refactor' },
|
|
122
|
-
'manage': { 'issue': 'issue', 'milestone': 'milestone_audit', 'phase': 'milestone_close', 'memory': 'memory', 'doc': 'sync', 'codebase': 'codebase_refresh', 'team': 'team_coordinate', '_default': 'status' },
|
|
123
|
-
'transition':{ 'phase': 'milestone_close', 'milestone': 'milestone_complete', '_default': 'milestone_close' },
|
|
124
|
-
'continue': { '_default': 'state_continue' },
|
|
125
|
-
'sync': { '_default': 'sync' },
|
|
126
|
-
'learn': { '_default': 'learn' },
|
|
127
|
-
'retrospect':{ '_default': 'retrospective' },
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
// Team skill detection
|
|
131
|
-
if (object === 'team') {
|
|
132
|
-
const teamRoutes = { 'review': 'team_review', 'test': 'team_test', 'debug': 'team_qa', 'refactor': 'team_tech_debt', 'execute': 'team_lifecycle', '_default': 'team_coordinate' };
|
|
133
|
-
return teamRoutes[action] || 'team_coordinate';
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
const actionMap = matrix[action] || matrix['fix'];
|
|
137
|
-
return actionMap[object] || actionMap['_default'] || 'quick';
|
|
138
|
-
}
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
Compute clarity (3=action+object+scope, 2=action+object, 1=action only, 0=empty).
|
|
142
|
-
If clarity < 2 and not autoYes: clarify via AskUserQuestion (max 2 rounds).
|
|
143
|
-
|
|
144
|
-
#### 3b: State-based routing (task_type == `state_continue`)
|
|
145
|
-
|
|
146
|
-
```javascript
|
|
147
|
-
function detectNextAction(s) {
|
|
148
|
-
if (!s.initialized) return { chain: 'init', steps: [{ cmd: 'maestro-init' }] };
|
|
149
|
-
const ps = s.phase_status, art = s.phase_artifacts, exec = s.execution;
|
|
150
|
-
|
|
151
|
-
// Post-milestone: no roadmap, has accumulated context
|
|
152
|
-
if (s.phases_total === 0 && !fileExists('.workflow/roadmap.md') && s.accumulated_context)
|
|
153
|
-
return { chain: 'next-milestone', steps: [{ cmd: 'maestro-roadmap', args: '"{description}"' }] };
|
|
154
|
-
if (s.phases_total === 0)
|
|
155
|
-
return { chain: 'brainstorm-driven', steps: [{ cmd: 'maestro-brainstorm', args: '"{description}"' }, { cmd: 'maestro-plan', args: '{phase}' }, { cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'maestro-verify', args: '{phase}' }] };
|
|
156
|
-
|
|
157
|
-
if (ps === 'pending') {
|
|
158
|
-
if (art.context) return { chain: 'plan', steps: [{ cmd: 'maestro-plan', args: '{phase}' }] };
|
|
159
|
-
return { chain: 'analyze', steps: [{ cmd: 'maestro-analyze', args: '{phase}' }] };
|
|
160
|
-
}
|
|
161
|
-
if (ps === 'exploring' || ps === 'planning') {
|
|
162
|
-
if (art.plan) return { chain: 'execute-verify', steps: [{ cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'maestro-verify', args: '{phase}' }] };
|
|
163
|
-
return { chain: 'plan', steps: [{ cmd: 'maestro-plan', args: '{phase}' }] };
|
|
164
|
-
}
|
|
165
|
-
if (ps === 'executing') {
|
|
166
|
-
if (exec.tasks_completed >= exec.tasks_total && exec.tasks_total > 0) return { chain: 'verify', steps: [{ cmd: 'maestro-verify', args: '{phase}' }] };
|
|
167
|
-
return { chain: 'execute', steps: [{ cmd: 'maestro-execute', args: '{phase}' }] };
|
|
168
|
-
}
|
|
169
|
-
if (ps === 'verifying') {
|
|
170
|
-
if (s.verification_status === 'passed') {
|
|
171
|
-
if (!s.review_verdict) return { chain: 'review', steps: [{ cmd: 'quality-review', args: '{phase}' }] };
|
|
172
|
-
if (s.uat_status === 'pending') return { chain: 'test', steps: [{ cmd: 'quality-test', args: '{phase}' }] };
|
|
173
|
-
if (s.uat_status === 'passed') return { chain: 'milestone-close', steps: [{ cmd: 'maestro-milestone-audit' }, { cmd: 'maestro-milestone-complete' }] };
|
|
174
|
-
return { chain: 'debug', steps: [{ cmd: 'quality-debug', args: '--from-uat {phase}' }] };
|
|
175
|
-
}
|
|
176
|
-
return { chain: 'quality-loop-partial', steps: [{ cmd: 'maestro-plan', args: '{phase} --gaps' }, { cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'maestro-verify', args: '{phase}' }] };
|
|
177
|
-
}
|
|
178
|
-
if (ps === 'testing') {
|
|
179
|
-
if (s.uat_status === 'passed') return { chain: 'milestone-close', steps: [{ cmd: 'maestro-milestone-audit' }, { cmd: 'maestro-milestone-complete' }] };
|
|
180
|
-
return { chain: 'debug', steps: [{ cmd: 'quality-debug', args: '--from-uat {phase}' }] };
|
|
181
|
-
}
|
|
182
|
-
if (ps === 'completed') {
|
|
183
|
-
if (s.phases_completed >= s.phases_total) return { chain: 'milestone-close', steps: [{ cmd: 'maestro-milestone-audit' }, { cmd: 'maestro-milestone-complete' }] };
|
|
184
|
-
return { chain: 'milestone-close', steps: [{ cmd: 'maestro-milestone-audit' }, { cmd: 'maestro-milestone-complete' }] };
|
|
185
|
-
}
|
|
186
|
-
if (ps === 'blocked') return { chain: 'debug', steps: [{ cmd: 'quality-debug' }] };
|
|
187
|
-
return { chain: 'status', steps: [{ cmd: 'manage-status' }] };
|
|
188
|
-
}
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
#### 3c: Intent-based chain map
|
|
192
|
-
|
|
193
|
-
```javascript
|
|
194
|
-
const chainMap = {
|
|
195
|
-
// Single-step
|
|
196
|
-
'status': [{ cmd: 'manage-status' }],
|
|
197
|
-
'init': [{ cmd: 'maestro-init' }],
|
|
198
|
-
'analyze': [{ cmd: 'maestro-analyze', args: '{phase}' }],
|
|
199
|
-
'ui_design': [{ cmd: 'maestro-ui-design', args: '{phase}' }],
|
|
200
|
-
'plan': [{ cmd: 'maestro-plan', args: '{phase}' }],
|
|
201
|
-
'execute': [{ cmd: 'maestro-execute', args: '{phase}' }],
|
|
202
|
-
'verify': [{ cmd: 'maestro-verify', args: '{phase}' }],
|
|
203
|
-
'test_gen': [{ cmd: 'quality-test-gen', args: '{phase}' }],
|
|
204
|
-
'test': [{ cmd: 'quality-test', args: '{phase}' }],
|
|
205
|
-
'debug': [{ cmd: 'quality-debug', args: '"{description}"' }],
|
|
206
|
-
'integration_test': [{ cmd: 'quality-integration-test', args: '{phase}' }],
|
|
207
|
-
'refactor': [{ cmd: 'quality-refactor', args: '"{description}"' }],
|
|
208
|
-
'review': [{ cmd: 'quality-review', args: '{phase}' }],
|
|
209
|
-
'retrospective': [{ cmd: 'quality-retrospective', args: '{phase}' }],
|
|
210
|
-
'learn': [{ cmd: 'manage-learn', args: '"{description}"' }],
|
|
211
|
-
'sync': [{ cmd: 'quality-sync', args: '{phase}' }],
|
|
212
|
-
'milestone_close': [{ cmd: 'maestro-milestone-audit' }, { cmd: 'maestro-milestone-complete' }],
|
|
213
|
-
'roadmap': [{ cmd: 'maestro-roadmap', args: '"{description}"' }],
|
|
214
|
-
'milestone_audit': [{ cmd: 'maestro-milestone-audit' }],
|
|
215
|
-
'milestone_complete': [{ cmd: 'maestro-milestone-complete' }],
|
|
216
|
-
'codebase_rebuild': [{ cmd: 'manage-codebase-rebuild' }],
|
|
217
|
-
'codebase_refresh': [{ cmd: 'manage-codebase-refresh' }],
|
|
218
|
-
'spec_setup': [{ cmd: 'spec-setup' }],
|
|
219
|
-
'spec_add': [{ cmd: 'spec-add', args: '"{description}"' }],
|
|
220
|
-
'spec_load': [{ cmd: 'spec-load', args: '"{description}"' }],
|
|
221
|
-
'spec_map': [{ cmd: 'manage-codebase-rebuild' }],
|
|
222
|
-
'memory_capture': [{ cmd: 'manage-memory-capture', args: '"{description}"' }],
|
|
223
|
-
'memory': [{ cmd: 'manage-memory', args: '"{description}"' }],
|
|
224
|
-
'issue': [{ cmd: 'manage-issue', args: '"{description}"' }],
|
|
225
|
-
'issue_discover': [{ cmd: 'manage-issue-discover', args: '"{description}"' }],
|
|
226
|
-
'issue_analyze': [{ cmd: 'maestro-analyze', args: '--gaps "{description}"' }],
|
|
227
|
-
'issue_plan': [{ cmd: 'maestro-plan', args: '--gaps' }],
|
|
228
|
-
'issue_execute': [{ cmd: 'maestro-execute', args: '' }],
|
|
229
|
-
'quick': [{ cmd: 'maestro-quick', args: '"{description}"' }],
|
|
230
|
-
'fork': [{ cmd: 'maestro-fork', args: '-m {milestone_num}' }],
|
|
231
|
-
'merge': [{ cmd: 'maestro-merge', args: '-m {milestone_num}' }],
|
|
232
|
-
'team_lifecycle': [{ cmd: 'team-lifecycle-v4', args: '"{description}"' }],
|
|
233
|
-
'team_coordinate': [{ cmd: 'team-coordinate', args: '"{description}"' }],
|
|
234
|
-
'team_qa': [{ cmd: 'team-quality-assurance', args: '"{description}"' }],
|
|
235
|
-
'team_test': [{ cmd: 'team-testing', args: '"{description}"' }],
|
|
236
|
-
'team_review': [{ cmd: 'team-review', args: '"{description}"' }],
|
|
237
|
-
'team_tech_debt': [{ cmd: 'team-tech-debt', args: '"{description}"' }],
|
|
238
|
-
|
|
239
|
-
// Multi-step chains
|
|
240
|
-
'spec-driven': [{ cmd: 'maestro-init' }, { cmd: 'maestro-spec-generate', args: '"{description}"' }, { cmd: 'maestro-plan', args: '{phase}' }, { cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'maestro-verify', args: '{phase}' }],
|
|
241
|
-
'brainstorm-driven': [{ cmd: 'maestro-brainstorm', args: '"{description}"' }, { cmd: 'maestro-plan', args: '{phase}' }, { cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'maestro-verify', args: '{phase}' }],
|
|
242
|
-
'ui-design-driven': [{ cmd: 'maestro-ui-design', args: '{phase}' }, { cmd: 'maestro-plan', args: '{phase}' }, { cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'maestro-verify', args: '{phase}' }],
|
|
243
|
-
'full-lifecycle': [{ cmd: 'maestro-plan', args: '{phase}' }, { cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'maestro-verify', args: '{phase}' }, { cmd: 'quality-review', args: '{phase}' }, { cmd: 'quality-test', args: '{phase}' }, { cmd: 'maestro-milestone-audit' }, { cmd: 'maestro-milestone-complete' }],
|
|
244
|
-
'execute-verify': [{ cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'maestro-verify', args: '{phase}' }],
|
|
245
|
-
'quality-loop': [{ cmd: 'maestro-verify', args: '{phase}' }, { cmd: 'quality-review', args: '{phase}' }, { cmd: 'quality-test', args: '{phase}' }, { cmd: 'quality-debug', args: '--from-uat {phase}' }, { cmd: 'maestro-plan', args: '{phase} --gaps' }, { cmd: 'maestro-execute', args: '{phase}' }],
|
|
246
|
-
'milestone-close': [{ cmd: 'maestro-milestone-audit' }, { cmd: 'maestro-milestone-complete' }],
|
|
247
|
-
'roadmap-driven': [{ cmd: 'maestro-init' }, { cmd: 'maestro-roadmap', args: '"{description}"' }, { cmd: 'maestro-plan', args: '{phase}' }, { cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'maestro-verify', args: '{phase}' }],
|
|
248
|
-
'next-milestone': [{ cmd: 'maestro-roadmap', args: '"{description}"' }, { cmd: 'maestro-plan', args: '{phase}' }, { cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'maestro-verify', args: '{phase}' }],
|
|
249
|
-
'analyze-plan-execute': [{ cmd: 'maestro-analyze', args: '"{description}" -q' }, { cmd: 'maestro-plan', args: '--dir {scratch_dir}' }, { cmd: 'maestro-execute', args: '--dir {scratch_dir}' }],
|
|
250
|
-
// Issue lifecycle chains (with quality gates)
|
|
251
|
-
'issue-full': [{ cmd: 'maestro-analyze', args: '--gaps {issue_id}' }, { cmd: 'maestro-plan', args: '--gaps' }, { cmd: 'maestro-execute', args: '' }, { cmd: 'quality-review', args: '--scope {affected_files}' }, { cmd: 'manage-issue', args: 'close {issue_id} --resolution fixed' }],
|
|
252
|
-
'issue-quick': [{ cmd: 'maestro-plan', args: '--gaps' }, { cmd: 'maestro-execute', args: '' }, { cmd: 'manage-issue', args: 'close {issue_id} --resolution fixed' }],
|
|
253
|
-
};
|
|
254
|
-
|
|
255
|
-
// Aliases: task type → named multi-step chain
|
|
256
|
-
const taskToChain = {
|
|
257
|
-
'spec_generate': 'spec-driven',
|
|
258
|
-
'brainstorm': 'brainstorm-driven',
|
|
259
|
-
'issue_execute': 'issue-full', // issue execute always gets review gate
|
|
260
|
-
};
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
**Resolution order:**
|
|
264
|
-
1. `forcedChain` → `chainMap[forcedChain]`
|
|
265
|
-
2. `state_continue` → `detectNextAction(projectState)`
|
|
266
|
-
3. `taskToChain[taskType]` → named chain
|
|
267
|
-
4. `chainMap[taskType]` → direct lookup
|
|
268
|
-
|
|
269
|
-
#### 3d: Resolve phase number and issue ID
|
|
270
|
-
|
|
271
|
-
```javascript
|
|
272
|
-
function resolvePhase() {
|
|
273
|
-
// From structured extraction
|
|
274
|
-
if (intentAnalysis.phase_ref) return intentAnalysis.phase_ref;
|
|
275
|
-
// Fallback regex
|
|
276
|
-
const m = intent.match(/phase\s*(\d+)|^(\d+)$/);
|
|
277
|
-
if (m) return m[1] || m[2];
|
|
278
|
-
// With scratch-based architecture, commands default to milestone-wide when no phase specified
|
|
279
|
-
// Return null to let commands use their default scope routing
|
|
280
|
-
return null;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
function resolveIssueId() {
|
|
284
|
-
if (intentAnalysis.issue_id) return intentAnalysis.issue_id;
|
|
285
|
-
const m = intent.match(/ISS-[\w]+-\d+/i);
|
|
286
|
-
return m ? m[0] : null;
|
|
287
|
-
}
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
When executing issue chains, replace `{issue_id}` in step args with the resolved issue ID.
|
|
291
|
-
|
|
292
|
-
---
|
|
293
|
-
|
|
294
|
-
### Step 4: Confirm
|
|
295
|
-
|
|
296
|
-
**If `dryRun`:** Display chain and exit.
|
|
297
|
-
|
|
298
|
-
```
|
|
299
|
-
MAESTRO-COORDINATE: {chain_name} (dry run)
|
|
300
|
-
1. [{cmd}] {args}
|
|
301
|
-
2. [{cmd}] {args}
|
|
302
|
-
```
|
|
303
|
-
|
|
304
|
-
**If not autoYes:** AskUserQuestion — Execute / Execute from step N / Cancel.
|
|
305
|
-
|
|
306
|
-
---
|
|
307
|
-
|
|
308
|
-
### Step 5: Setup Session
|
|
309
|
-
|
|
310
|
-
```javascript
|
|
311
|
-
const sessionId = `coord-${new Date().toISOString().replace(/[-:T]/g, '').slice(0, 15)}`;
|
|
312
|
-
const sessionDir = `.workflow/.maestro-coordinate/${sessionId}`;
|
|
313
|
-
Bash(`mkdir -p "${sessionDir}"`);
|
|
314
|
-
|
|
315
|
-
const state = {
|
|
316
|
-
session_id: sessionId, status: 'running',
|
|
317
|
-
created_at: new Date().toISOString(),
|
|
318
|
-
intent, task_type: taskType, chain_name: chainName,
|
|
319
|
-
tool: cliTool, auto_mode: autoYes, phase: resolvedPhase,
|
|
320
|
-
current_step: 0,
|
|
321
|
-
gemini_session_id: null,
|
|
322
|
-
step_analyses: [],
|
|
323
|
-
steps: chain.map((s, i) => ({
|
|
324
|
-
index: i, skill: s.cmd, args: s.args || '',
|
|
325
|
-
status: 'pending', exec_id: null, analysis: null
|
|
326
|
-
}))
|
|
327
|
-
};
|
|
328
|
-
Write(`${sessionDir}/status.json`, JSON.stringify(state, null, 2));
|
|
329
|
-
|
|
330
|
-
const context = { resolved_phase: resolvedPhase, user_intent: intent, issue_id: resolvedIssueId, spec_session_id: null };
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
---
|
|
334
|
-
|
|
335
|
-
### Step 6: Execute Step via maestro delegate
|
|
336
|
-
|
|
337
|
-
#### 6a: Assemble args
|
|
338
|
-
|
|
339
|
-
```javascript
|
|
340
|
-
const AUTO_FLAG_MAP = {
|
|
341
|
-
'maestro-analyze': '-y', 'maestro-brainstorm': '-y', 'maestro-ui-design': '-y',
|
|
342
|
-
'maestro-plan': '--auto', 'maestro-spec-generate': '-y', 'quality-test': '--auto-fix',
|
|
343
|
-
'quality-retrospective': '--auto-yes',
|
|
344
|
-
};
|
|
345
|
-
|
|
346
|
-
function assembleArgs(step) {
|
|
347
|
-
let a = (step.args || '')
|
|
348
|
-
.replace(/\{phase\}/g, context.resolved_phase || '') // empty = milestone-wide default
|
|
349
|
-
.replace(/\{description\}/g, context.user_intent || '')
|
|
350
|
-
.replace(/\{issue_id\}/g, context.issue_id || '')
|
|
351
|
-
.replace(/\{spec_session_id\}/g, context.spec_session_id || '')
|
|
352
|
-
.replace(/\{scratch_dir\}/g, context.scratch_dir || '');
|
|
353
|
-
if (state.auto_mode) {
|
|
354
|
-
const flag = AUTO_FLAG_MAP[step.cmd];
|
|
355
|
-
if (flag && !a.includes(flag)) a = a ? `${a} ${flag}` : flag;
|
|
356
|
-
}
|
|
357
|
-
return a.trim();
|
|
358
|
-
}
|
|
359
|
-
```
|
|
360
|
-
|
|
361
|
-
#### 6b: Build prompt from template
|
|
362
|
-
|
|
363
|
-
Read `~/.maestro/templates/cli/prompts/coordinate-step.txt`, fill placeholders.
|
|
364
|
-
If previous step has analysis hints, inject them as `{{ANALYSIS_HINTS}}`.
|
|
365
|
-
|
|
366
|
-
```javascript
|
|
367
|
-
function escapeForShell(str) { return "'" + str.replace(/'/g, "'\\''") + "'"; }
|
|
368
|
-
|
|
369
|
-
const assembledArgs = assembleArgs(step);
|
|
370
|
-
const template = Read('~/.maestro/templates/cli/prompts/coordinate-step.txt');
|
|
371
|
-
|
|
372
|
-
// Build analysis hints from previous step's gemini evaluation
|
|
373
|
-
let analysisHints = '';
|
|
374
|
-
const prevAnalysis = (state.step_analyses || []).find(a => a.step_index === state.current_step - 1);
|
|
375
|
-
if (prevAnalysis?.next_step_hints) {
|
|
376
|
-
const h = prevAnalysis.next_step_hints;
|
|
377
|
-
const parts = [];
|
|
378
|
-
if (h.prompt_additions) parts.push(h.prompt_additions);
|
|
379
|
-
if (h.cautions?.length) parts.push('Cautions: ' + h.cautions.join('; '));
|
|
380
|
-
if (h.context_to_carry) parts.push('Context from prior step: ' + h.context_to_carry);
|
|
381
|
-
if (parts.length) analysisHints = parts.join('\n');
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
const prompt = template
|
|
385
|
-
.replace('{{COMMAND}}', `/${step.cmd}`)
|
|
386
|
-
.replace('{{ARGS}}', assembledArgs)
|
|
387
|
-
.replace('{{STEP_N}}', `${state.current_step + 1}/${state.steps.length}`)
|
|
388
|
-
.replace('{{AUTO_DIRECTIVE}}', state.auto_mode ? 'Auto-confirm all prompts. No interactive questions.' : '')
|
|
389
|
-
.replace('{{CHAIN_NAME}}', state.chain_name)
|
|
390
|
-
.replace('{{ANALYSIS_HINTS}}', analysisHints);
|
|
391
|
-
```
|
|
392
|
-
|
|
393
|
-
#### 6c: Launch
|
|
394
|
-
|
|
395
|
-
```
|
|
396
|
-
------------------------------------------------------------
|
|
397
|
-
STEP {i+1}/{total}: {step.cmd} | Tool: {tool}
|
|
398
|
-
------------------------------------------------------------
|
|
399
|
-
```
|
|
400
|
-
|
|
401
|
-
```javascript
|
|
402
|
-
state.steps[state.current_step].status = 'running';
|
|
403
|
-
state.steps[state.current_step].started_at = new Date().toISOString();
|
|
404
|
-
Write(`${sessionDir}/status.json`, JSON.stringify(state, null, 2));
|
|
405
|
-
|
|
406
|
-
Bash({
|
|
407
|
-
command: `maestro delegate ${escapeForShell(prompt)} --to ${state.tool} --mode write`,
|
|
408
|
-
run_in_background: true, timeout: 600000
|
|
409
|
-
});
|
|
410
|
-
// ■ STOP — wait for hook callback
|
|
411
|
-
```
|
|
412
|
-
|
|
413
|
-
---
|
|
414
|
-
|
|
415
|
-
### Step 7: Post-Step Callback
|
|
416
|
-
|
|
417
|
-
```javascript
|
|
418
|
-
const stepIdx = state.current_step;
|
|
419
|
-
const step = state.steps[stepIdx];
|
|
420
|
-
const output = /* callback output */;
|
|
421
|
-
|
|
422
|
-
// Capture exec_id from stderr [MAESTRO_EXEC_ID=xxx]
|
|
423
|
-
step.exec_id = /* from callback */;
|
|
424
|
-
step.completed_at = new Date().toISOString();
|
|
425
|
-
|
|
426
|
-
// Context propagation
|
|
427
|
-
const phaseMatch = output.match(/PHASE:\s*(\d+)/m);
|
|
428
|
-
if (phaseMatch) context.resolved_phase = phaseMatch[1];
|
|
429
|
-
const specMatch = output.match(/SPEC-[\w-]+/);
|
|
430
|
-
if (specMatch) context.spec_session_id = specMatch[0];
|
|
431
|
-
const scratchMatch = output.match(/scratch_dir:\s*(.+)/m);
|
|
432
|
-
if (scratchMatch) context.scratch_dir = scratchMatch[1].trim();
|
|
433
|
-
|
|
434
|
-
// Success/failure
|
|
435
|
-
const failed = /^STATUS:\s*FAILURE/m.test(output);
|
|
436
|
-
if (!failed) {
|
|
437
|
-
step.status = 'completed';
|
|
438
|
-
} else if (state.auto_mode) {
|
|
439
|
-
if (!step.retried) { step.retried = true; /* re-execute Step 6c */ return; }
|
|
440
|
-
step.status = 'skipped';
|
|
441
|
-
} else {
|
|
442
|
-
// AskUserQuestion: Retry / Skip / Abort
|
|
443
|
-
// On Abort: state.status = 'aborted', save, exit
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
// Save output for analysis
|
|
447
|
-
Write(`${sessionDir}/step-${stepIdx + 1}-output.txt`, output);
|
|
448
|
-
Write(`${sessionDir}/status.json`, JSON.stringify(state, null, 2));
|
|
449
|
-
|
|
450
|
-
// → Step 7b: Gemini analysis (skip if step failed/skipped or single-step chain)
|
|
451
|
-
if (step.status === 'completed' && state.steps.length > 1) {
|
|
452
|
-
// → Step 7b
|
|
453
|
-
} else {
|
|
454
|
-
// Skip analysis, advance directly
|
|
455
|
-
state.current_step = stepIdx + 1;
|
|
456
|
-
Write(`${sessionDir}/status.json`, JSON.stringify(state, null, 2));
|
|
457
|
-
if (state.current_step < state.steps.length) { /* → Step 6 */ }
|
|
458
|
-
else { /* → Step 8 */ }
|
|
459
|
-
}
|
|
460
|
-
```
|
|
461
|
-
|
|
462
|
-
---
|
|
463
|
-
|
|
464
|
-
### Step 7b: Analyze Step Output (via gemini)
|
|
465
|
-
|
|
466
|
-
After each step completes, call gemini to evaluate execution quality and generate optimization hints for subsequent steps.
|
|
467
|
-
|
|
468
|
-
```javascript
|
|
469
|
-
const stepIdx = state.current_step;
|
|
470
|
-
const step = state.steps[stepIdx];
|
|
471
|
-
const output = Read(`${sessionDir}/step-${stepIdx + 1}-output.txt`);
|
|
472
|
-
const nextStep = stepIdx < state.steps.length - 1 ? state.steps[stepIdx + 1] : null;
|
|
473
|
-
|
|
474
|
-
// Build analysis prompt
|
|
475
|
-
const priorAnalyses = (state.step_analyses || [])
|
|
476
|
-
.map(a => `- Step ${a.step_index + 1} (${a.cmd}): score=${a.quality_score}, issues=${a.issues?.length || 0}`)
|
|
477
|
-
.join('\n');
|
|
478
|
-
|
|
479
|
-
const analysisPrompt = `PURPOSE: Evaluate execution quality of coordinate step "${step.cmd}" (${stepIdx + 1}/${state.steps.length}) and generate optimization hints for the next step.
|
|
480
|
-
CHAIN: ${state.chain_name} | Intent: ${state.intent}
|
|
481
|
-
COMMAND: /${step.cmd} ${step.args || ''}
|
|
482
|
-
STEP OUTPUT (last 200 lines):
|
|
483
|
-
${output.split('\n').slice(-200).join('\n')}
|
|
484
|
-
${priorAnalyses ? `PRIOR STEP ANALYSES:\n${priorAnalyses}` : ''}
|
|
485
|
-
${nextStep ? `NEXT STEP: /${nextStep.cmd} ${nextStep.args || ''}` : 'NEXT STEP: None (last step)'}
|
|
486
|
-
EXPECTED OUTPUT (strict JSON):
|
|
487
|
-
{
|
|
488
|
-
"quality_score": <0-100>,
|
|
489
|
-
"execution_assessment": { "success": <bool>, "completeness": "<full|partial|minimal>", "key_outputs": [], "missing_outputs": [] },
|
|
490
|
-
"issues": [{ "severity": "critical|high|medium|low", "description": "" }],
|
|
491
|
-
"next_step_hints": {
|
|
492
|
-
"prompt_additions": "<extra context or constraints to inject into next step prompt>",
|
|
493
|
-
"cautions": ["<things next step should watch out for>"],
|
|
494
|
-
"context_to_carry": "<key facts from this step's output that next step needs>"
|
|
495
|
-
},
|
|
496
|
-
"step_summary": ""
|
|
497
|
-
}`;
|
|
498
|
-
|
|
499
|
-
let delegateCmd = `maestro delegate ${escapeForShell(analysisPrompt)} --to gemini --mode analysis --rule analysis-review-code-quality`;
|
|
500
|
-
if (state.gemini_session_id) delegateCmd += ` --resume ${state.gemini_session_id}`;
|
|
501
|
-
Bash({ command: delegateCmd, run_in_background: true, timeout: 300000 });
|
|
502
|
-
// ■ STOP — wait for hook callback
|
|
503
|
-
```
|
|
504
|
-
|
|
505
|
-
### Step 7c: Post-Analyze Callback
|
|
506
|
-
|
|
507
|
-
```javascript
|
|
508
|
-
const analysisResult = /* parsed JSON from callback output */;
|
|
509
|
-
|
|
510
|
-
// Capture gemini session ID for resume chain
|
|
511
|
-
state.gemini_session_id = /* from callback stderr [MAESTRO_EXEC_ID=xxx] */;
|
|
512
|
-
|
|
513
|
-
// Store analysis
|
|
514
|
-
if (!state.step_analyses) state.step_analyses = [];
|
|
515
|
-
state.step_analyses.push({
|
|
516
|
-
step_index: stepIdx, cmd: step.cmd,
|
|
517
|
-
quality_score: analysisResult.quality_score,
|
|
518
|
-
issues: analysisResult.issues,
|
|
519
|
-
next_step_hints: analysisResult.next_step_hints,
|
|
520
|
-
summary: analysisResult.step_summary
|
|
521
|
-
});
|
|
522
|
-
step.analysis = {
|
|
523
|
-
quality_score: analysisResult.quality_score,
|
|
524
|
-
issue_count: (analysisResult.issues || []).length
|
|
525
|
-
};
|
|
526
|
-
Write(`${sessionDir}/step-${stepIdx + 1}-analysis.json`, JSON.stringify(analysisResult, null, 2));
|
|
527
|
-
|
|
528
|
-
// Advance
|
|
529
|
-
state.current_step = stepIdx + 1;
|
|
530
|
-
Write(`${sessionDir}/status.json`, JSON.stringify(state, null, 2));
|
|
531
|
-
|
|
532
|
-
if (state.current_step < state.steps.length) {
|
|
533
|
-
// → Back to Step 6
|
|
534
|
-
} else {
|
|
535
|
-
// → Step 8
|
|
536
|
-
}
|
|
537
|
-
```
|
|
538
|
-
|
|
539
|
-
---
|
|
540
|
-
|
|
541
|
-
### Step 8: Completion Report
|
|
542
|
-
|
|
543
|
-
```javascript
|
|
544
|
-
const done = state.steps.filter(s => s.status === 'completed').length;
|
|
545
|
-
state.status = state.steps.some(s => s.status === 'failed') ? 'completed_with_errors' : 'completed';
|
|
546
|
-
state.completed_at = new Date().toISOString();
|
|
547
|
-
Write(`${sessionDir}/status.json`, JSON.stringify(state, null, 2));
|
|
548
|
-
```
|
|
549
|
-
|
|
550
|
-
```
|
|
551
|
-
============================================================
|
|
552
|
-
MAESTRO-COORDINATE COMPLETE
|
|
553
|
-
============================================================
|
|
554
|
-
Session: {session_id}
|
|
555
|
-
Chain: {chain_name} ({done}/{total})
|
|
556
|
-
Tool: {tool}
|
|
557
|
-
|
|
558
|
-
Steps:
|
|
559
|
-
[✓] 1. maestro-plan — completed (quality: 85/100)
|
|
560
|
-
[✓] 2. maestro-execute — completed (quality: 78/100)
|
|
561
|
-
|
|
562
|
-
Avg Quality: {avg_score}/100
|
|
563
|
-
Next: /maestro-coordinate continue
|
|
564
|
-
============================================================
|
|
565
|
-
```
|
|
566
|
-
|
|
567
|
-
---
|
|
568
|
-
|
|
569
|
-
## Core Rules
|
|
570
|
-
|
|
571
|
-
1. **Semantic routing** — LLM-native structured extraction (`action × object`) replaces regex; disambiguates "问题" by context
|
|
572
|
-
2. **STOP after each `maestro delegate` call** — background execution, wait for hook callback
|
|
573
|
-
3. **State machine** — advance via `current_step`, no sync loops for async operations
|
|
574
|
-
4. **Template-driven** — all steps use `coordinate-step.txt`, no per-command prompt assembly
|
|
575
|
-
5. **Context propagation** — parse PHASE / spec session ID / scratch_dir / issue_id from each step output, feed to next step
|
|
576
|
-
6. **Quality gates** — issue chains auto-include review; `issue-full` is default for issue execution
|
|
577
|
-
7. **Tool fallback** — if `maestro delegate` fails: retry with same tool once, then try `gemini` → `qwen`
|
|
578
|
-
8. **Auto-confirm injection** — `{{AUTO_DIRECTIVE}}` in template prevents blocking during background execution
|
|
579
|
-
9. **Resumable** — `-c` reads `status.json`, jumps to first pending step
|
|
580
|
-
10. **Gemini analysis after each step** — evaluate output quality via `maestro delegate --to gemini --mode analysis`, chained via `--resume`. Analysis generates `next_step_hints` injected into next step's prompt as `{{ANALYSIS_HINTS}}`
|
|
581
|
-
11. **Session capture** — after each gemini callback, capture exec_id → `gemini_session_id` for resume chain
|
|
582
|
-
12. **Analysis skip conditions** — skip gemini analysis for: failed/skipped steps, single-step chains
|