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
package/workflows/execute.md
CHANGED
|
@@ -18,43 +18,18 @@ Core principle: **Execute per-plan, not per-phase.** Each plan's wave DAG runs i
|
|
|
18
18
|
```
|
|
19
19
|
Input: [phase] argument OR --dir <path>
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
IF --dir <path> is provided:
|
|
34
|
-
1. Set PLAN_DIRS = [<path>] // single plan
|
|
35
|
-
2. Validate directory exists and contains plan.json
|
|
36
|
-
|
|
37
|
-
ELSE IF no arguments:
|
|
38
|
-
// Find all pending plans for current milestone
|
|
39
|
-
1. Read state.json.artifacts
|
|
40
|
-
2. Filter: milestone == current_milestone, type == "plan", status == "completed"
|
|
41
|
-
3. Exclude plans that already have a corresponding EXC artifact (same path)
|
|
42
|
-
4. Sort by phase order (from roadmap), adhoc plans last
|
|
43
|
-
5. Set PLAN_DIRS = filtered plan paths
|
|
44
|
-
6. If empty: ERROR E001 "No pending plans found"
|
|
45
|
-
|
|
46
|
-
ELSE IF argument is a number:
|
|
47
|
-
// Find pending plans for specific phase
|
|
48
|
-
1. Read state.json.artifacts
|
|
49
|
-
2. Filter: milestone == current_milestone, type == "plan", status == "completed", phase == arg
|
|
50
|
-
3. Exclude plans with existing EXC artifacts
|
|
51
|
-
4. Set PLAN_DIRS = filtered plan paths
|
|
52
|
-
|
|
53
|
-
// Execute plans sequentially
|
|
54
|
-
FOR each PLAN_DIR IN PLAN_DIRS:
|
|
55
|
-
execute_single_plan(PLAN_DIR)
|
|
56
|
-
register_exc_artifact(PLAN_DIR)
|
|
57
|
-
extract_incremental_learnings(PLAN_DIR)
|
|
21
|
+
Worktree scope check: if .workflow/worktree-scope.json exists, reject <phase> not in scope.owned_phases
|
|
22
|
+
Auto-bootstrap: create .workflow/state.json if missing
|
|
23
|
+
|
|
24
|
+
Resolve PLAN_DIRS:
|
|
25
|
+
--dir <path> → single plan, validate plan.json exists
|
|
26
|
+
no arguments → all pending plans: state.json artifacts where type=plan, status=completed,
|
|
27
|
+
current milestone, no matching EXC artifact; sorted by phase order, adhoc last
|
|
28
|
+
<phase number> → pending plans for that phase only (same filter + phase match)
|
|
29
|
+
If empty: ERROR E001 "No pending plans found"
|
|
30
|
+
|
|
31
|
+
For each PLAN_DIR in PLAN_DIRS (sequential):
|
|
32
|
+
Execute plan, register EXC artifact, extract incremental learnings
|
|
58
33
|
```
|
|
59
34
|
|
|
60
35
|
---
|
|
@@ -64,9 +39,73 @@ FOR each PLAN_DIR IN PLAN_DIRS:
|
|
|
64
39
|
| Flag | Effect |
|
|
65
40
|
|------|--------|
|
|
66
41
|
| `--auto-commit` | Override config: commit after each task completion |
|
|
67
|
-
| `--method agent\|cli\|auto` | Override execution method (default: config.json.execution.method) |
|
|
42
|
+
| `--method agent\|codex\|gemini\|cli\|auto` | Override execution method (default: config.json.execution.method) |
|
|
68
43
|
| `--executor <tool>` | Default CLI tool: gemini\|codex\|qwen\|opencode\|claude (default: first enabled in cli-tools.json) |
|
|
69
44
|
| `--dir <path>` | Use arbitrary directory instead of phase resolution (skip roadmap validation) |
|
|
45
|
+
| `-y` | Auto-approve execution options (skip confirmation prompt) |
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## E0.5: Execution Options Confirmation
|
|
50
|
+
|
|
51
|
+
**Purpose:** Let user choose how tasks execute. Supports both menu selection and natural language intent (e.g., "前端用gemini,后端用codex,其余agent"). Skipped when `-y` flag or executionContext already confirmed.
|
|
52
|
+
|
|
53
|
+
### Skip conditions
|
|
54
|
+
|
|
55
|
+
- `-y` flag → use resolved defaults, skip prompt
|
|
56
|
+
- `executionContext.executionMethod` already set → skip (confirmed in /maestro-plan)
|
|
57
|
+
|
|
58
|
+
### Tool Call
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
AskUserQuestion({
|
|
62
|
+
questions: [
|
|
63
|
+
{
|
|
64
|
+
question: "How should tasks be executed? Select one, or choose Other to specify per-domain rules (e.g. '前端gemini 后端codex 其余agent')",
|
|
65
|
+
header: "Executor",
|
|
66
|
+
multiSelect: false,
|
|
67
|
+
options: [
|
|
68
|
+
{ label: "Auto (Recommended)", description: "Per-task domain routing: frontend→gemini, backend→codex, general→agent" },
|
|
69
|
+
{ label: "Agent", description: "Claude Code agent for all tasks (fastest)" },
|
|
70
|
+
{ label: "Codex", description: "Codex CLI for all tasks (strong for complex backend)" },
|
|
71
|
+
{ label: "Gemini", description: "Gemini CLI for all tasks (strong for frontend/UI)" }
|
|
72
|
+
]
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
question: "Run code review after execution?",
|
|
76
|
+
header: "Review",
|
|
77
|
+
multiSelect: false,
|
|
78
|
+
options: [
|
|
79
|
+
{ label: "Skip (Recommended)", description: "No code review, proceed to verification" },
|
|
80
|
+
{ label: "Gemini Review", description: "Gemini CLI: git diff quality review" },
|
|
81
|
+
{ label: "Codex Review", description: "Codex CLI: git-aware code review" }
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
})
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Parse response
|
|
89
|
+
|
|
90
|
+
**Question 1 (Executor):**
|
|
91
|
+
|
|
92
|
+
| Answer | executionMethod | domainRouting |
|
|
93
|
+
|--------|----------------|---------------|
|
|
94
|
+
| "Auto" | `"auto"` | `{ frontend: "gemini", backend: "codex", default: "agent" }` |
|
|
95
|
+
| "Agent" / "Codex" / "Gemini" | that value | not used |
|
|
96
|
+
| Other text with domain rules | `"auto"` | Parse from user text (see examples below) |
|
|
97
|
+
|
|
98
|
+
Other text parsing examples:
|
|
99
|
+
|
|
100
|
+
| User types | domainRouting |
|
|
101
|
+
|------------|---------------|
|
|
102
|
+
| `前端gemini 后端codex` | `{ frontend: "gemini", backend: "codex", default: "agent" }` |
|
|
103
|
+
| `backend agent, frontend gemini` | `{ frontend: "gemini", backend: "agent", default: "agent" }` |
|
|
104
|
+
| `all codex` | `{ default: "codex" }` |
|
|
105
|
+
|
|
106
|
+
**Question 2 (Review):** store as `codeReviewTool`
|
|
107
|
+
|
|
108
|
+
Store: `executionMethod`, `domainRouting`, `codeReviewTool`
|
|
70
109
|
|
|
71
110
|
---
|
|
72
111
|
|
|
@@ -81,9 +120,11 @@ If executionContext is available in memory:
|
|
|
81
120
|
planObject = executionContext.planObject
|
|
82
121
|
explorations = executionContext.explorations
|
|
83
122
|
clarifications = executionContext.clarifications
|
|
84
|
-
executionMethod = --method flag || executionContext.executionMethod
|
|
123
|
+
executionMethod = E0.5 selection || --method flag || executionContext.executionMethod
|
|
85
124
|
defaultExecutor = --executor flag || executionContext.defaultExecutor
|
|
86
125
|
executorAssignments = executionContext.executorAssignments || {}
|
|
126
|
+
domainRouting = E0.5 domainRouting || executionContext.domainRouting || {}
|
|
127
|
+
codeReviewTool = E0.5 selection || executionContext.codeReviewTool || "Skip"
|
|
87
128
|
Skip disk reload
|
|
88
129
|
```
|
|
89
130
|
|
|
@@ -92,36 +133,24 @@ If executionContext is available in memory:
|
|
|
92
133
|
```
|
|
93
134
|
Read ${PLAN_DIR}/plan.json
|
|
94
135
|
|
|
95
|
-
executionMethod = --method flag || config.json.execution.method || "
|
|
136
|
+
executionMethod = E0.5 selection || --method flag || config.json.execution.method || "auto"
|
|
96
137
|
defaultExecutor = --executor flag || config.json.execution.default_executor || "gemini"
|
|
97
138
|
executorAssignments = plan.json.executor_assignments || {}
|
|
139
|
+
domainRouting = E0.5 domainRouting || { frontend: "gemini", backend: "codex", default: "agent" }
|
|
140
|
+
codeReviewTool = E0.5 selection || "Skip"
|
|
98
141
|
```
|
|
99
142
|
|
|
100
143
|
### Detect completed tasks (breakpoint resume)
|
|
101
144
|
|
|
102
145
|
```
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
Read ${PLAN_DIR}/.task/${task_id}.json
|
|
106
|
-
If status == "completed":
|
|
107
|
-
completed_tasks.push(task_id)
|
|
108
|
-
|
|
109
|
-
If completed_tasks.length > 0:
|
|
110
|
-
Log "Resuming: {completed_tasks.length}/{total} tasks already completed"
|
|
111
|
-
Filter completed tasks out of wave execution queue
|
|
112
|
-
Set current_wave = first wave with pending tasks
|
|
146
|
+
Scan .task/${task_id}.json for each task in plan.json.task_ids
|
|
147
|
+
Collect completed tasks; if any found, log resume status and advance to first wave with pending tasks
|
|
113
148
|
```
|
|
114
149
|
|
|
115
150
|
### Build wave execution queue
|
|
116
151
|
|
|
117
152
|
```
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
execution_queue = []
|
|
121
|
-
For each wave in waves:
|
|
122
|
-
pending_tasks = wave.tasks.filter(t => !completed_tasks.includes(t))
|
|
123
|
-
If pending_tasks.length > 0:
|
|
124
|
-
execution_queue.push({ wave: wave.wave, tasks: pending_tasks })
|
|
153
|
+
Build execution_queue from plan.json.waves, including only waves with pending (non-completed) tasks
|
|
125
154
|
```
|
|
126
155
|
|
|
127
156
|
### Output
|
|
@@ -145,19 +174,25 @@ Pass specs_content to each executor agent in E2.
|
|
|
145
174
|
|
|
146
175
|
### Executor Resolution
|
|
147
176
|
|
|
177
|
+
Resolution priority: per-task assignment > explicit method > auto domain routing.
|
|
178
|
+
|
|
179
|
+
**Single executor mode** (executionMethod is agent/codex/gemini/cli): all tasks use that executor.
|
|
180
|
+
|
|
181
|
+
**Auto mode** (executionMethod is "auto"): route each task by domain using `domainRouting` map from E0.5.
|
|
182
|
+
|
|
183
|
+
For each task, judge its domain from the task definition (scope, file paths, action description):
|
|
184
|
+
- **frontend** — UI components, pages, styles, layouts, templates (.tsx/.jsx/.vue/.css/.html, scope contains ui/frontend/component/style/page/view)
|
|
185
|
+
- **backend** — API, server, database, services, algorithms (.go/.rs/.java/.py/.sql/.proto, scope contains api/backend/server/database/service/worker)
|
|
186
|
+
- **general** — mixed, .ts/.js only, config, tests, or unclear domain
|
|
187
|
+
|
|
188
|
+
Then look up `domainRouting[domain]`, falling back to `domainRouting.default` (which is "agent" if unset).
|
|
189
|
+
|
|
190
|
+
Log the routing decision per task before dispatch:
|
|
191
|
+
|
|
148
192
|
```
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
return executorAssignments[task_id].executor # "agent"|"gemini"|"codex"|"qwen"|"opencode"|"claude"
|
|
153
|
-
If executionMethod == "agent":
|
|
154
|
-
return "agent"
|
|
155
|
-
If executionMethod == "cli":
|
|
156
|
-
return defaultExecutor # e.g., "gemini"
|
|
157
|
-
# executionMethod == "auto":
|
|
158
|
-
task = loaded task definition
|
|
159
|
-
# Heuristic: tasks with many files or multi-step implementation → agent; otherwise → CLI
|
|
160
|
-
return (task.files.length > 5 || task.implementation.length > 8) ? "agent" : defaultExecutor
|
|
193
|
+
TASK-001 [frontend] → gemini
|
|
194
|
+
TASK-002 [backend] → codex
|
|
195
|
+
TASK-003 [general] → agent
|
|
161
196
|
```
|
|
162
197
|
|
|
163
198
|
### Delegate Prompt Builder
|
|
@@ -209,147 +244,52 @@ ${prior_summaries}
|
|
|
209
244
|
|
|
210
245
|
```
|
|
211
246
|
For each wave in execution_queue (sequential):
|
|
247
|
+
Log wave start; update index.json (current_wave, started_at)
|
|
248
|
+
On first wave: set state.json.status = "executing" if not already
|
|
212
249
|
|
|
213
|
-
|
|
250
|
+
For each task_id in wave.tasks (parallel):
|
|
251
|
+
Mark task active in state.json (last-write-wins for parallel tasks)
|
|
252
|
+
Load .task/${task_id}.json; resolve executor
|
|
214
253
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
254
|
+
IF executor == "agent":
|
|
255
|
+
Spawn workflow-executor agent (fresh 200k context) with:
|
|
256
|
+
task definition, phase context, prior wave summaries, specs_content, context.md, analysis.md
|
|
257
|
+
Agent: implement task → verify convergence → auto-fix (max 3) → checkpoint if blocked
|
|
258
|
+
On success: atomic commit (if auto-commit), write .summaries/${task_id}-summary.md
|
|
259
|
+
Update .task/${task_id}.json: status = "completed" | "blocked"
|
|
218
260
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
Write .workflow/state.json
|
|
261
|
+
ELSE (CLI path via maestro delegate):
|
|
262
|
+
fixedId = "${PHASE_NUM || 'scratch'}-${PHASE_SLUG}-${task_id}"
|
|
263
|
+
Store fixedId in index.json.execution.delegate_ids[task_id]
|
|
264
|
+
Dispatch: maestro delegate "${prompt}" --to ${executor} --mode write --id ${fixedId}
|
|
265
|
+
Post-dispatch: verify convergence criteria against file state
|
|
266
|
+
Write summary, update task status, auto-commit if enabled
|
|
226
267
|
|
|
227
|
-
|
|
268
|
+
Collect result: { task_id, status, executor, summary_path, commit_hash, delegate_id }
|
|
269
|
+
Clear state.json.current_task_id
|
|
228
270
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
# Note: parallel tasks will overwrite; last-write-wins is acceptable for an advisory field
|
|
232
|
-
0. Mark task active in state.json
|
|
233
|
-
Read .workflow/state.json
|
|
234
|
-
state.json.current_task_id = task_id
|
|
235
|
-
state.json.last_updated = now()
|
|
236
|
-
Write .workflow/state.json
|
|
237
|
-
|
|
238
|
-
1. Load task definition
|
|
239
|
-
Read .task/${task_id}.json (lazy loading)
|
|
240
|
-
|
|
241
|
-
2. Resolve executor and dispatch
|
|
242
|
-
executor = resolveTaskExecutor(task_id)
|
|
243
|
-
|
|
244
|
-
IF executor == "agent":
|
|
245
|
-
# --- Agent path (existing) ---
|
|
246
|
-
Spawn workflow-executor agent (fresh 200k context)
|
|
247
|
-
Input:
|
|
248
|
-
- Task definition (.task/${task_id}.json)
|
|
249
|
-
- Phase context (index.json goal, success_criteria)
|
|
250
|
-
- Relevant summaries from prior waves (.summaries/ of deps)
|
|
251
|
-
- Project specs (specs_content from E1.5)
|
|
252
|
-
- Phase context decisions (context.md)
|
|
253
|
-
- Phase analysis scores (analysis.md)
|
|
254
|
-
|
|
255
|
-
Agent responsibilities:
|
|
256
|
-
a. Read task definition (read_first, files, action, convergence.criteria)
|
|
257
|
-
b. Implement the task (create/modify files per task.files)
|
|
258
|
-
c. Verify convergence.criteria pass
|
|
259
|
-
d. If verification fails: auto-fix (max 3 attempts)
|
|
260
|
-
e. If auto-fix fails: write checkpoint, mark task as "blocked"
|
|
261
|
-
f. Atomic commit (if auto-commit enabled):
|
|
262
|
-
git add <task files>
|
|
263
|
-
git commit -m "{type}({slug}): {task.title}"
|
|
264
|
-
g. Write .summaries/${task_id}-summary.md
|
|
265
|
-
h. Update .task/${task_id}.json:
|
|
266
|
-
status = "completed" | "blocked"
|
|
267
|
-
|
|
268
|
-
ELSE:
|
|
269
|
-
# --- CLI path (via maestro delegate) ---
|
|
270
|
-
fixedId = "${PHASE_NUM || 'scratch'}-${PHASE_SLUG}-${task_id}"
|
|
271
|
-
prompt = buildDelegatePrompt(task_def, phase_context, specs_content, prior_summaries)
|
|
272
|
-
|
|
273
|
-
# Store delegate ID for resume tracking
|
|
274
|
-
index.json.execution.delegate_ids[task_id] = fixedId
|
|
275
|
-
|
|
276
|
-
# Dispatch — synchronous, returns when done
|
|
277
|
-
Bash("maestro delegate \"${prompt}\" --to ${executor} --mode write --id ${fixedId}")
|
|
278
|
-
|
|
279
|
-
# Post-dispatch processing (CLI tools don't do this internally):
|
|
280
|
-
a. Verify convergence criteria against actual file state
|
|
281
|
-
For each criterion in task_def.convergence.criteria:
|
|
282
|
-
Check file contents / grep / test command
|
|
283
|
-
b. Determine status:
|
|
284
|
-
If all criteria pass: status = "completed"
|
|
285
|
-
Else: status = "blocked", log which criteria failed
|
|
286
|
-
c. Write .summaries/${task_id}-summary.md (from delegate output + verification result)
|
|
287
|
-
d. Update .task/${task_id}.json: status = status
|
|
288
|
-
e. Auto-commit (if --auto-commit and status == "completed"):
|
|
289
|
-
git add <task files>
|
|
290
|
-
git commit -m "{type}({slug}): {task.title}"
|
|
291
|
-
|
|
292
|
-
3. Collect result
|
|
293
|
-
result = { task_id, status, executor, summary_path, commit_hash, delegate_id }
|
|
294
|
-
|
|
295
|
-
4. Clear current_task_id in state.json
|
|
296
|
-
Read .workflow/state.json
|
|
297
|
-
state.json.current_task_id = null
|
|
298
|
-
state.json.last_updated = now()
|
|
299
|
-
Write .workflow/state.json
|
|
300
|
-
|
|
301
|
-
# --- End per-task ---
|
|
302
|
-
|
|
303
|
-
Wait for all tasks in wave to complete
|
|
304
|
-
|
|
305
|
-
# Post-wave processing
|
|
306
|
-
For each result in wave_results:
|
|
307
|
-
Update index.json.execution:
|
|
308
|
-
tasks_completed += (completed count)
|
|
309
|
-
commits.push({ hash, task, message }) for each commit
|
|
310
|
-
|
|
311
|
-
If any task blocked:
|
|
312
|
-
Log "Wave {wave.wave}: {blocked_count} tasks blocked"
|
|
313
|
-
AskUserQuestion:
|
|
314
|
-
"Tasks blocked: {blocked_list}. Continue to next wave or stop?"
|
|
315
|
-
Options: [Continue (skip blocked), Stop and review]
|
|
316
|
-
If stop: break execution loop
|
|
317
|
-
|
|
318
|
-
Log "=== Wave {wave.wave} complete ==="
|
|
271
|
+
Wait for all wave tasks; update index.json (tasks_completed, commits)
|
|
272
|
+
If any blocked: prompt user to continue or stop
|
|
319
273
|
```
|
|
320
274
|
|
|
321
275
|
### Parallel Dispatch Rules
|
|
322
276
|
|
|
323
277
|
```
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
- Mixed: Agent() + Bash() calls together in single message
|
|
328
|
-
- Each task = one independent dispatch (never merge tasks into one delegate prompt)
|
|
278
|
+
All tasks in a wave dispatch in parallel (Agent + CLI mixed in single message).
|
|
279
|
+
Agent tasks: run_in_background: false | CLI tasks: run_in_background: true
|
|
280
|
+
Each task = one independent dispatch (never merge tasks into one delegate prompt)
|
|
329
281
|
```
|
|
330
282
|
|
|
331
283
|
### Deviation Rule
|
|
332
284
|
|
|
333
285
|
```
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
CLI path: auto-fix via session resume:
|
|
339
|
-
Attempt 1: Re-dispatch with --resume ${fixedId}
|
|
340
|
-
Attempt 2: Re-dispatch with simplified prompt (reduce to core action + criteria)
|
|
341
|
-
Attempt 3: Fallback to agent executor for this task
|
|
286
|
+
Max 3 auto-fix attempts per task:
|
|
287
|
+
Agent path: handled internally by workflow-executor agent
|
|
288
|
+
CLI path: 1) --resume ${fixedId} → 2) simplified prompt → 3) fallback to agent
|
|
342
289
|
|
|
343
|
-
If all 3 fail:
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
attempt: 3,
|
|
347
|
-
last_error: "...",
|
|
348
|
-
partial_files: [...],
|
|
349
|
-
executor: executor,
|
|
350
|
-
delegate_id: fixedId
|
|
351
|
-
}
|
|
352
|
-
Continue wave (other tasks unaffected)
|
|
290
|
+
If all 3 fail: mark "blocked" with checkpoint in .task/${task_id}.json.meta.checkpoint
|
|
291
|
+
{ attempt: 3, last_error, partial_files, executor, delegate_id: fixedId }
|
|
292
|
+
Continue wave (other tasks unaffected)
|
|
353
293
|
```
|
|
354
294
|
|
|
355
295
|
---
|
|
@@ -361,103 +301,51 @@ If all 3 fail:
|
|
|
361
301
|
### Check 1: Summary Existence
|
|
362
302
|
|
|
363
303
|
```
|
|
364
|
-
For each
|
|
365
|
-
|
|
366
|
-
If status == "completed":
|
|
367
|
-
If NOT file exists .summaries/${task_id}-summary.md:
|
|
368
|
-
violations.push({
|
|
369
|
-
type: "missing_summary",
|
|
370
|
-
severity: "warning",
|
|
371
|
-
task_id: task_id,
|
|
372
|
-
message: "Completed task ${task_id} has no summary file at .summaries/${task_id}-summary.md"
|
|
373
|
-
})
|
|
304
|
+
For each completed task: flag warning if .summaries/${task_id}-summary.md missing
|
|
305
|
+
→ violation: { type: "missing_summary", severity: "warning", task_id, message }
|
|
374
306
|
```
|
|
375
307
|
|
|
376
308
|
### Check 2: Task Status Consistency
|
|
377
309
|
|
|
378
310
|
```
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
# Verify completed tasks were actually in the execution results
|
|
384
|
-
If task_status == "completed":
|
|
385
|
-
If task_id NOT in wave_results (collected from E2):
|
|
386
|
-
violations.push({
|
|
387
|
-
type: "status_mismatch",
|
|
388
|
-
severity: "warning",
|
|
389
|
-
task_id: task_id,
|
|
390
|
-
message: "Task ${task_id} status is 'completed' but was not part of execution results"
|
|
391
|
-
})
|
|
392
|
-
|
|
393
|
-
# Verify tasks that ran successfully are marked completed
|
|
394
|
-
If task_id in wave_results AND wave_results[task_id].status == "completed":
|
|
395
|
-
If task_status != "completed":
|
|
396
|
-
violations.push({
|
|
397
|
-
type: "status_mismatch",
|
|
398
|
-
severity: "critical",
|
|
399
|
-
task_id: task_id,
|
|
400
|
-
message: "Task ${task_id} completed execution but .task/${task_id}.json status is '${task_status}'"
|
|
401
|
-
})
|
|
311
|
+
Cross-check task status against wave_results from E2:
|
|
312
|
+
- Completed in .task/ but not in wave_results → warning "status_mismatch"
|
|
313
|
+
- Completed in wave_results but not in .task/ → critical "status_mismatch"
|
|
402
314
|
```
|
|
403
315
|
|
|
404
316
|
### Check 3: Tech Stack Constraint Compliance
|
|
405
317
|
|
|
406
318
|
```
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
If tech_constraints is not empty:
|
|
412
|
-
# Collect files modified during execution
|
|
413
|
-
modified_files = []
|
|
414
|
-
For each task_id in completed_tasks:
|
|
415
|
-
Read .task/${task_id}.json
|
|
416
|
-
For each file in task.files:
|
|
417
|
-
modified_files.push(file.path)
|
|
418
|
-
|
|
419
|
-
# Scan modified files for disallowed imports
|
|
420
|
-
For each file_path in modified_files:
|
|
421
|
-
If file exists ${file_path}:
|
|
422
|
-
file_content = Read ${file_path}
|
|
423
|
-
For each constraint in tech_constraints.disallowed_imports:
|
|
424
|
-
If file_content matches constraint.pattern:
|
|
425
|
-
violations.push({
|
|
426
|
-
type: "tech_stack_violation",
|
|
427
|
-
severity: "critical",
|
|
428
|
-
task_id: associated_task_id,
|
|
429
|
-
file: file_path,
|
|
430
|
-
message: "File ${file_path} contains disallowed import matching '${constraint.pattern}': ${constraint.reason}"
|
|
431
|
-
})
|
|
319
|
+
Extract tech_stack constraints from specs_content (allowed_languages, disallowed_imports, required_patterns)
|
|
320
|
+
If constraints exist:
|
|
321
|
+
Collect all files modified by completed tasks
|
|
322
|
+
Scan each for disallowed import patterns → critical "tech_stack_violation" per match
|
|
432
323
|
```
|
|
433
324
|
|
|
434
325
|
### Gate Logic
|
|
435
326
|
|
|
436
327
|
```
|
|
437
|
-
|
|
438
|
-
|
|
328
|
+
Log all warnings; log all critical violations
|
|
329
|
+
If any critical: set index.json.status = "blocked" with blocked_reason and violations, abort
|
|
330
|
+
If none critical: log "passed" and continue to E2.6
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
---
|
|
439
334
|
|
|
440
|
-
|
|
441
|
-
Log "Post-wave validation: {warnings.length} warning(s)"
|
|
442
|
-
For each warning in warnings:
|
|
443
|
-
Log " WARN: ${warning.message}"
|
|
335
|
+
## E2.6: Code Review (Optional)
|
|
444
336
|
|
|
445
|
-
|
|
446
|
-
Log "Post-wave validation: {critical_violations.length} critical violation(s)"
|
|
447
|
-
For each violation in critical_violations:
|
|
448
|
-
Log " CRITICAL: ${violation.message}"
|
|
337
|
+
**Purpose:** Run code review on execution output if selected in E0.5.
|
|
449
338
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
index.json.execution.blocked_reason = "Post-wave validation failed with critical violations"
|
|
453
|
-
index.json.execution.violations = violations
|
|
454
|
-
index.json.updated_at = now()
|
|
455
|
-
Write index.json
|
|
339
|
+
```
|
|
340
|
+
If codeReviewTool == "Skip": continue to E3
|
|
456
341
|
|
|
457
|
-
|
|
342
|
+
Dispatch review via maestro delegate (run_in_background: true):
|
|
343
|
+
--to gemini|codex (per codeReviewTool selection) --mode analysis
|
|
344
|
+
Prompt: review git diff (execution start → HEAD) for correctness, style, bugs
|
|
345
|
+
Rule: analysis-review-code-quality (gemini only)
|
|
346
|
+
Expected: severity-ranked issues with file:line references and fix suggestions
|
|
458
347
|
|
|
459
|
-
|
|
460
|
-
Log "Post-wave validation passed ({warnings.length} warnings, 0 critical)"
|
|
348
|
+
Wait for completion, log findings summary
|
|
461
349
|
```
|
|
462
350
|
|
|
463
351
|
---
|
|
@@ -507,26 +395,13 @@ If config.json.workflow.reflection == true:
|
|
|
507
395
|
## Final State Update
|
|
508
396
|
|
|
509
397
|
```
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
If all_completed:
|
|
513
|
-
index.json.status = "verifying" (ready for /workflow:verify)
|
|
514
|
-
index.json.execution.completed_at = now()
|
|
515
|
-
Log "All tasks completed. Run /workflow:verify to validate results."
|
|
398
|
+
If all tasks completed:
|
|
399
|
+
index.json.status = "verifying", set completed_at → "Run /workflow:verify"
|
|
516
400
|
Else:
|
|
517
|
-
index.json.status = "executing"
|
|
518
|
-
Log "{completed}/{total} tasks completed. Re-run /workflow:execute to resume."
|
|
401
|
+
index.json.status = "executing" (partial) → "Re-run /workflow:execute to resume"
|
|
519
402
|
|
|
520
|
-
index.json.updated_at
|
|
521
|
-
|
|
522
|
-
# Update project state.json (skip in SCRATCH_MODE)
|
|
523
|
-
If NOT SCRATCH_MODE:
|
|
524
|
-
Read .workflow/state.json
|
|
525
|
-
If all_completed:
|
|
526
|
-
state.json.status = "verifying"
|
|
527
|
-
state.json.current_task_id = null # safety clear: no task is active once the wave loop exits
|
|
528
|
-
state.json.last_updated = now()
|
|
529
|
-
Write .workflow/state.json
|
|
403
|
+
Update index.json.updated_at
|
|
404
|
+
If NOT SCRATCH_MODE: sync state.json (status, clear current_task_id)
|
|
530
405
|
```
|
|
531
406
|
|
|
532
407
|
---
|
|
@@ -537,51 +412,19 @@ If NOT SCRATCH_MODE:
|
|
|
537
412
|
|
|
538
413
|
```
|
|
539
414
|
// Register EXC artifact
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
id: "EXC-{next_id padded to 3}",
|
|
546
|
-
type: "execute",
|
|
547
|
-
milestone: plan_artifact.milestone,
|
|
548
|
-
phase: plan_artifact.phase,
|
|
549
|
-
scope: plan_artifact.scope,
|
|
550
|
-
path: plan_artifact.path, // same path — execute writes into plan dir
|
|
551
|
-
status: "completed",
|
|
552
|
-
depends_on: plan_artifact.id,
|
|
553
|
-
harvested: false,
|
|
554
|
-
created_at: execution_start_time,
|
|
555
|
-
completed_at: now()
|
|
556
|
-
}
|
|
557
|
-
|
|
558
|
-
state.json.artifacts.push(artifact)
|
|
559
|
-
state.json.last_updated = now()
|
|
560
|
-
Write state.json (atomic)
|
|
415
|
+
Find matching plan artifact in state.json; create EXC artifact:
|
|
416
|
+
{ id: "EXC-{next_id padded to 3}", type: "execute", milestone, phase, scope,
|
|
417
|
+
path: plan_artifact.path, status: "completed", depends_on: plan_artifact.id,
|
|
418
|
+
harvested: false, created_at, completed_at }
|
|
419
|
+
Append to state.json.artifacts (atomic write)
|
|
561
420
|
|
|
562
421
|
// Incremental learning extraction
|
|
563
|
-
Read all
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
existing_learnings = maestro spec load --category learning
|
|
422
|
+
Read all .summaries/TASK-*-summary.md; extract strategy adjustments, patterns, pitfalls
|
|
423
|
+
Deduplicate against existing learnings (maestro spec load --category learning)
|
|
424
|
+
Append unique entries to .workflow/specs/learnings.md using <spec-entry> closed-tag format:
|
|
425
|
+
category="learning", keywords (3-5 terms), date, source="execute"
|
|
568
426
|
|
|
569
|
-
|
|
570
|
-
FOR each extracted learning:
|
|
571
|
-
keywords = extract_keywords(learning.content) // 3-5 domain-specific terms
|
|
572
|
-
IF not duplicate of existing_learnings:
|
|
573
|
-
Append to .workflow/specs/learnings.md:
|
|
574
|
-
<spec-entry category="learning" keywords="{keywords}" date="{YYYY-MM-DD}" source="execute">
|
|
575
|
-
|
|
576
|
-
### {learning.summary}
|
|
577
|
-
|
|
578
|
-
{learning.content}
|
|
579
|
-
Phase: {phase} | Plan: {PLAN_DIR}
|
|
580
|
-
|
|
581
|
-
</spec-entry>
|
|
582
|
-
|
|
583
|
-
Mark artifact.harvested = true
|
|
584
|
-
Write state.json (atomic)
|
|
427
|
+
Mark artifact.harvested = true; write state.json (atomic)
|
|
585
428
|
```
|
|
586
429
|
|
|
587
430
|
---
|
|
@@ -605,23 +448,13 @@ Write state.json (atomic)
|
|
|
605
448
|
The execute workflow is fully resumable:
|
|
606
449
|
|
|
607
450
|
```
|
|
608
|
-
State
|
|
609
|
-
tasks_completed
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
1. Reads index.json.execution.tasks_completed
|
|
618
|
-
2. Checks each .task/TASK-*.json status
|
|
619
|
-
3. For CLI-dispatched tasks with status "in-progress":
|
|
620
|
-
fixedId = index.json.execution.delegate_ids[task_id]
|
|
621
|
-
Check maestro delegate status ${fixedId}
|
|
622
|
-
If completed: retrieve output, process as completed
|
|
623
|
-
If failed: add to retry queue with --resume ${fixedId}
|
|
624
|
-
4. Builds queue of remaining tasks
|
|
625
|
-
5. Continues from next pending wave
|
|
626
|
-
6. No duplicate execution of completed tasks
|
|
451
|
+
State tracked in index.json.execution:
|
|
452
|
+
tasks_completed, current_wave, commits, method, default_executor,
|
|
453
|
+
delegate_ids: { task_id: fixedId, ... }
|
|
454
|
+
|
|
455
|
+
Resume behavior (/workflow:execute <phase> re-run):
|
|
456
|
+
Check each .task/TASK-*.json status + delegate status for in-progress CLI tasks
|
|
457
|
+
CLI tasks: retrieve completed output or retry with --resume ${fixedId}
|
|
458
|
+
Build queue of remaining tasks, continue from next pending wave
|
|
459
|
+
No duplicate execution of completed tasks
|
|
627
460
|
```
|