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
|
@@ -141,68 +141,31 @@ Each wave generates `wave-{N}.csv` with extra `prev_context` column.
|
|
|
141
141
|
### Session Initialization
|
|
142
142
|
|
|
143
143
|
```javascript
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
//
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
//
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
//
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
//
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
// Scope determination (per scratch-milestone-architecture)
|
|
171
|
-
const state = JSON.parse(Read('.workflow/state.json'))
|
|
172
|
-
let scope, phaseNum = null, phaseSlug, contextDir
|
|
173
|
-
|
|
174
|
-
if (dirMatch) {
|
|
175
|
-
contextDir = dirMatch[1]
|
|
176
|
-
phaseSlug = contextDir.split('/').pop()
|
|
177
|
-
// Inherit scope from parent artifact if registered
|
|
178
|
-
const parentArtifact = state.artifacts.find(a => a.path === contextDir)
|
|
179
|
-
scope = parentArtifact?.scope || 'standalone'
|
|
180
|
-
} else if (phaseArg === '') {
|
|
181
|
-
if (state.current_milestone && fileExists('.workflow/roadmap.md')) {
|
|
182
|
-
scope = 'milestone'
|
|
183
|
-
phaseSlug = slugify(state.milestones.find(m => m.id === state.current_milestone)?.name || state.current_milestone)
|
|
184
|
-
// Find latest analyze artifact for this milestone
|
|
185
|
-
contextDir = state.artifacts.filter(a => a.type === 'analyze' && a.milestone === state.current_milestone && a.status === 'completed').pop()?.path
|
|
186
|
-
} else {
|
|
187
|
-
ERROR('E001: No args and no roadmap')
|
|
188
|
-
}
|
|
189
|
-
} else if (/^\d+$/.test(phaseArg)) {
|
|
190
|
-
scope = 'phase'
|
|
191
|
-
phaseNum = parseInt(phaseArg)
|
|
192
|
-
phaseSlug = resolvePhaseSlugFromRoadmap(phaseNum)
|
|
193
|
-
contextDir = state.artifacts.filter(a => a.type === 'analyze' && a.milestone === state.current_milestone && a.phase === phaseNum && a.status === 'completed').pop()?.path
|
|
194
|
-
} else {
|
|
195
|
-
scope = state.current_milestone ? 'adhoc' : 'standalone'
|
|
196
|
-
phaseSlug = phaseArg.toLowerCase().replace(/[^a-z0-9]+/g, '-').substring(0, 40)
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
|
|
200
|
-
const sessionId = `${dateStr}-plan-P${phaseArg}-${phaseSlug}`
|
|
201
|
-
const sessionFolder = `.workflow/.csv-wave/${sessionId}`
|
|
202
|
-
const scratchDir = `.workflow/scratch/${dateStr}-plan-P${phaseArg}-${phaseSlug}`
|
|
203
|
-
|
|
204
|
-
Bash(`mkdir -p ${sessionFolder}`)
|
|
205
|
-
Bash(`mkdir -p ${scratchDir}/.task/`)
|
|
144
|
+
// Parse from $ARGUMENTS:
|
|
145
|
+
// AUTO_YES <- --yes | -y
|
|
146
|
+
// continueMode <- --continue
|
|
147
|
+
// maxConcurrency <- --concurrency N | -c N (default: 4)
|
|
148
|
+
// autoMode <- --auto
|
|
149
|
+
// gapsMode <- --gaps
|
|
150
|
+
// dirMatch <- --dir <path>
|
|
151
|
+
// specMatch <- --spec SPEC-xxx
|
|
152
|
+
// collabMode <- --collab
|
|
153
|
+
// phaseArg <- remaining text after stripping all flags
|
|
154
|
+
|
|
155
|
+
// Auto-bootstrap .workflow/state.json if missing
|
|
156
|
+
|
|
157
|
+
// Scope determination from state.json (priority order):
|
|
158
|
+
// --dir given → scope from parent artifact or 'standalone'
|
|
159
|
+
// phaseArg empty → 'milestone' (requires current_milestone + roadmap.md) or ERROR E001
|
|
160
|
+
// phaseArg is digit → 'phase', resolve slug from roadmap, find latest completed analyze artifact
|
|
161
|
+
// phaseArg is text → 'adhoc' (if milestone active) or 'standalone', slugify phaseArg
|
|
162
|
+
|
|
163
|
+
// Session IDs (UTC+8):
|
|
164
|
+
// sessionId = {YYYYMMDD}-plan-P{phaseArg}-{phaseSlug}
|
|
165
|
+
// sessionFolder = .workflow/.csv-wave/{sessionId}
|
|
166
|
+
// scratchDir = .workflow/scratch/{sessionId}
|
|
167
|
+
|
|
168
|
+
// Create: sessionFolder, scratchDir/.task/
|
|
206
169
|
```
|
|
207
170
|
|
|
208
171
|
### Phase 1: Phase Resolution -> CSV
|
|
@@ -266,21 +229,22 @@ spawn_agents_on_csv({
|
|
|
266
229
|
max_concurrency: maxConcurrency,
|
|
267
230
|
max_runtime_seconds: 600,
|
|
268
231
|
output_csv_path: `${sessionFolder}/wave-1-results.csv`,
|
|
269
|
-
output_schema: {
|
|
270
|
-
|
|
271
|
-
properties: {
|
|
272
|
-
id: { type: "string" },
|
|
273
|
-
status: { type: "string", enum: ["completed", "failed"] },
|
|
274
|
-
findings: { type: "string" },
|
|
275
|
-
error: { type: "string" }
|
|
276
|
-
},
|
|
277
|
-
required: ["id", "status", "findings"]
|
|
232
|
+
output_schema: { // required: id, status, findings
|
|
233
|
+
id: "string", status: "completed|failed", findings: "string", error: "string"
|
|
278
234
|
}
|
|
279
235
|
})
|
|
280
236
|
```
|
|
281
237
|
|
|
282
|
-
6.
|
|
283
|
-
|
|
238
|
+
6. Merge `wave-1-results.csv` into master `tasks.csv`, delete `wave-1.csv`
|
|
239
|
+
|
|
240
|
+
#### Task Count Guard (before Wave 2)
|
|
241
|
+
|
|
242
|
+
Before generating the planning instruction, assess scope complexity and embed expected task count ceiling:
|
|
243
|
+
- Single feature / simple change → expect **1-2 tasks** max
|
|
244
|
+
- Medium feature (multiple files, one module) → expect **2-4 tasks** max
|
|
245
|
+
- Large feature (cross-module) → expect **4-8 tasks** max
|
|
246
|
+
|
|
247
|
+
Include this ceiling in `buildPlanningInstruction`. If the planning agent outputs more tasks than the threshold, re-prompt with explicit instruction to merge.
|
|
284
248
|
|
|
285
249
|
#### Wave 2: Plan Generation (Sequential)
|
|
286
250
|
|
|
@@ -303,123 +267,63 @@ spawn_agents_on_csv({
|
|
|
303
267
|
instruction: buildPlanningInstruction(sessionFolder, phaseDir, {
|
|
304
268
|
contextMd, indexJson, specRef, docIndex, designRef, gapsContext
|
|
305
269
|
}),
|
|
306
|
-
max_concurrency: 1, //
|
|
270
|
+
max_concurrency: 1, // Single planning agent
|
|
307
271
|
max_runtime_seconds: 900,
|
|
308
272
|
output_csv_path: `${sessionFolder}/wave-2-results.csv`,
|
|
309
|
-
output_schema: {
|
|
310
|
-
|
|
311
|
-
properties: {
|
|
312
|
-
id: { type: "string" },
|
|
313
|
-
status: { type: "string", enum: ["completed", "failed"] },
|
|
314
|
-
findings: { type: "string" },
|
|
315
|
-
error: { type: "string" }
|
|
316
|
-
},
|
|
317
|
-
required: ["id", "status", "findings"]
|
|
273
|
+
output_schema: { // required: id, status, findings
|
|
274
|
+
id: "string", status: "completed|failed", findings: "string", error: "string"
|
|
318
275
|
}
|
|
319
276
|
})
|
|
320
277
|
```
|
|
321
278
|
|
|
322
|
-
6. Merge results into master `tasks.csv`
|
|
323
|
-
7. Delete `wave-2.csv`
|
|
279
|
+
6. Merge `wave-2-results.csv` into master `tasks.csv`, delete `wave-2.csv`
|
|
324
280
|
|
|
325
281
|
**Planning agent responsibilities** (embedded in instruction):
|
|
326
|
-
-
|
|
327
|
-
-
|
|
328
|
-
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
- If
|
|
282
|
+
- Group work into feature-level tasks. One feature = one task (even if it touches 3-5 files). Do NOT split a single feature into multiple file-level tasks.
|
|
283
|
+
- Apply Deep Work Rules: `read_first[]` includes modified file + source of truth; `convergence.criteria[]` are grep-verifiable; all actions/steps have concrete values
|
|
284
|
+
- Write `plan.json` to `{PHASE_DIR}/plan.json` and `.task/TASK-{NNN}.json` to `{PHASE_DIR}/.task/`
|
|
285
|
+
- `--gaps`: create fix tasks from gap context, link to issues; `--collab`: pre-allocate ID ranges
|
|
286
|
+
|
|
287
|
+
**Task Grouping Rules (MANDATORY)** — pass to planning agent, re-prompt if violated:
|
|
288
|
+
|
|
289
|
+
1. **Group by feature** — All changes for one feature = one task (even if 3-5 files). Never create separate tasks per file.
|
|
290
|
+
2. **Group by context** — Related functional changes belong together. Don't split just because changes touch different files.
|
|
291
|
+
3. **Minimize agent count** — Group simple unrelated changes into a single "batch" task to reduce overhead. Each agent spawn costs significant tokens.
|
|
292
|
+
4. **Substantial tasks only** — Each task should represent 15-60 minutes of real work. If a task takes <5 minutes, merge it into another.
|
|
293
|
+
5. **True dependencies only** — `depends_on` only when Task B genuinely needs Task A's output (e.g., "Task A defines the interface that Task B implements"). Sequential execution wastes time.
|
|
294
|
+
6. **Prefer parallel** — Most tasks should be independent (no depends_on). Default to parallel waves.
|
|
295
|
+
7. **Complexity-based sizing**:
|
|
296
|
+
- **Low** (single file, single concern, zero cross-module): **1 task**
|
|
297
|
+
- **Medium** (multiple files OR integration point): **1-4 tasks**
|
|
298
|
+
- **High** (cross-module, architectural, new subsystem): **4-10 tasks**
|
|
299
|
+
|
|
300
|
+
**Anti-splitting rules** (re-prompt if violated):
|
|
301
|
+
- One feature = one task (even if 3-5 files); never split a feature into per-file tasks
|
|
302
|
+
- Group simple unrelated changes into a batch task to minimize agent spawns
|
|
303
|
+
- `depends_on` only for genuine output dependencies; most tasks should be parallel
|
|
304
|
+
- Each task must be substantial (15-60 min); sub-5-min changes must be merged
|
|
337
305
|
|
|
338
306
|
### Phase 3: Plan Checking + Confirmation
|
|
339
307
|
|
|
340
308
|
**Objective**: Validate plan quality, revise if needed, present to user.
|
|
341
309
|
|
|
342
310
|
1. **Plan checking** (inline, not a separate wave):
|
|
343
|
-
|
|
344
|
-
- Validate dimensions:
|
|
345
|
-
|
|
346
|
-
| Check | Criteria |
|
|
347
|
-
|-------|----------|
|
|
348
|
-
| Requirements coverage | Every success_criterion maps to at least one task |
|
|
349
|
-
| Feasibility | Referenced files exist or can be created |
|
|
350
|
-
| Dependency correctness | No circular deps, deps exist, wave ordering valid |
|
|
351
|
-
| Convergence criteria quality | Grep-verifiable, no subjective language |
|
|
352
|
-
| read_first completeness | Every task has read_first[] with modified file |
|
|
353
|
-
| Action concreteness | No vague "align X with Y" |
|
|
354
|
-
| Wave structure | Parallel tasks have no conflicting file modifications |
|
|
311
|
+
Read `plan.json` + all `.task/TASK-*.json`. Validate: requirements coverage, file feasibility, dependency correctness (no cycles, valid wave order), grep-verifiable convergence criteria, read_first completeness, action concreteness, no parallel file conflicts, **task count within complexity threshold** (reject over-split plans), **no per-file splitting** (each task must be feature-level).
|
|
355
312
|
|
|
356
313
|
2. **Revision loop** (max 3 rounds): If critical issues found, regenerate affected tasks.
|
|
357
314
|
|
|
358
315
|
3. **Export results**:
|
|
359
316
|
- Export `results.csv` from master `tasks.csv`
|
|
360
|
-
- Generate `context.md`:
|
|
361
|
-
|
|
362
|
-
```markdown
|
|
363
|
-
# Plan Report -- Phase {phase}
|
|
364
|
-
|
|
365
|
-
## Summary
|
|
366
|
-
- Phase: {phase_name}
|
|
367
|
-
- Tasks: {task_count} in {wave_count} waves
|
|
368
|
-
- Complexity: {complexity}
|
|
369
|
-
- Explorations: {exploration_count} angles explored
|
|
370
|
-
|
|
371
|
-
## Exploration Findings
|
|
372
|
-
|
|
373
|
-
### {angle}: {title}
|
|
374
|
-
{findings}
|
|
317
|
+
- Generate `context.md`: summary (phase, task count, wave count, complexity, exploration count), exploration findings per angle, plan overview (approach, task IDs, waves), next steps
|
|
375
318
|
|
|
376
|
-
|
|
377
|
-
- Approach: {plan.approach}
|
|
378
|
-
- Task IDs: {task_ids}
|
|
379
|
-
- Waves: {wave_structure}
|
|
380
|
-
|
|
381
|
-
## Next Steps
|
|
382
|
-
{suggested actions}
|
|
383
|
-
```
|
|
384
|
-
|
|
385
|
-
4. **Update index.json**:
|
|
386
|
-
```json
|
|
387
|
-
{
|
|
388
|
-
"status": "planning",
|
|
389
|
-
"plan": {
|
|
390
|
-
"task_ids": ["TASK-001", "TASK-002"],
|
|
391
|
-
"task_count": N,
|
|
392
|
-
"complexity": "moderate",
|
|
393
|
-
"waves": [[...], [...]]
|
|
394
|
-
},
|
|
395
|
-
"updated_at": "<ISO>"
|
|
396
|
-
}
|
|
397
|
-
```
|
|
319
|
+
4. **Update index.json**: set `status: "planning"`, `plan: { task_ids, task_count, complexity, waves }`, `updated_at`
|
|
398
320
|
|
|
399
321
|
5. **Issue linking** (if --gaps):
|
|
400
|
-
For each
|
|
401
|
-
- Update corresponding issue in `.workflow/issues/issues.jsonl`:
|
|
402
|
-
- `task_refs`: append TASK-{NNN} to array
|
|
403
|
-
- `task_plan_dir`: relative path to `.task/` directory
|
|
404
|
-
- `status`: "planned"
|
|
405
|
-
- `updated_at`: now()
|
|
406
|
-
- Append history entry: `{ action: "planned", at: <ISO>, by: "maestro-plan", summary: "Linked to TASK-{NNN}" }`
|
|
407
|
-
This ensures bidirectional issue <-> TASK traceability for dashboard display.
|
|
322
|
+
For each TASK with `issue_id`: update issue in `issues.jsonl` (`task_refs` += TASK-NNN, `task_plan_dir`, `status: "planned"`, `updated_at`) + append history entry. Ensures bidirectional issue-TASK traceability.
|
|
408
323
|
|
|
409
324
|
6. **Display summary + options** (skip options if AUTO_YES):
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
Phase: {phase_name}
|
|
413
|
-
Tasks: {task_count} tasks in {wave_count} waves
|
|
414
|
-
Check: {checker_status}
|
|
415
|
-
|
|
416
|
-
Plan: {scratch_dir}/plan.json
|
|
417
|
-
Tasks: {scratch_dir}/.task/TASK-*.json
|
|
418
|
-
|
|
419
|
-
Next steps:
|
|
420
|
-
Skill({ skill: "maestro-execute", args: "{phase}" }) -- Execute the plan
|
|
421
|
-
Skill({ skill: "maestro-plan", args: "{phase}" }) -- Re-plan with modifications
|
|
422
|
-
```
|
|
325
|
+
Show phase name, task/wave counts, checker status, output file paths.
|
|
326
|
+
Next steps: `maestro-execute "{phase}"` (execute) or `maestro-plan "{phase}"` (re-plan).
|
|
423
327
|
|
|
424
328
|
### Shared Discovery Board Protocol
|
|
425
329
|
|
|
@@ -130,75 +130,28 @@ If not found: "No templates. Create with $maestro-composer"
|
|
|
130
130
|
|
|
131
131
|
**Trigger**: `-c [session-id]`
|
|
132
132
|
|
|
133
|
-
|
|
134
|
-
2. If no session-id: Glob `.workflow/.maestro-coordinate/MCP-*/state.json` sorted desc, find `status = "in_progress" | "paused"`
|
|
135
|
-
3. None found → error E005
|
|
136
|
-
4. Identify last completed wave, resume from next pending step
|
|
137
|
-
5. Jump to Phase 3 (Wave Execution)
|
|
133
|
+
Load session state by explicit ID or most recent `MCP-*/state.json` with `status = "in_progress" | "paused"`. Error E005 if none found. Resume from next pending step after last completed wave → jump to Phase 3.
|
|
138
134
|
|
|
139
135
|
---
|
|
140
136
|
|
|
141
137
|
### Phase 1: Load & Bind
|
|
142
138
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
**Step 1.2** — Parse `--context key=value` pairs into `bound_context`.
|
|
150
|
-
|
|
151
|
-
**Step 1.3** — Load and validate template JSON.
|
|
152
|
-
|
|
153
|
-
**Step 1.4** — Collect missing required variables via AskUserQuestion.
|
|
154
|
-
|
|
155
|
-
**Step 1.5** — Bind `{variable_name}` in all `args_template` strings. Leave `{N-xxx.field}` and `{prev_*}` unresolved (runtime Phase 3).
|
|
156
|
-
|
|
157
|
-
**Step 1.6** — If `--dry-run`: print wave plan and exit (see Phase 2 output).
|
|
139
|
+
1. **Resolve template**: absolute path → as-is, slug → lookup in `~/.maestro/templates/workflows/index.json`, partial → confirm, not found → show `--list`
|
|
140
|
+
2. **Parse** `--context key=value` pairs into `bound_context`
|
|
141
|
+
3. **Load and validate** template JSON
|
|
142
|
+
4. **Collect missing** required variables via AskUserQuestion
|
|
143
|
+
5. **Bind** `{variable_name}` in all `args_template` strings. Leave `{N-xxx.field}` and `{prev_*}` unresolved (runtime Phase 3)
|
|
144
|
+
6. If `--dry-run`: print wave plan and exit
|
|
158
145
|
|
|
159
146
|
---
|
|
160
147
|
|
|
161
148
|
### Phase 2: Init Session & Build Wave Plan
|
|
162
149
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
```javascript
|
|
170
|
-
const BARRIER_SKILLS = new Set([
|
|
171
|
-
'maestro-analyze', 'maestro-plan', 'maestro-brainstorm',
|
|
172
|
-
'maestro-spec-generate', 'maestro-execute'
|
|
173
|
-
]);
|
|
174
|
-
|
|
175
|
-
function isBarrier(node) {
|
|
176
|
-
if (node.type === 'checkpoint') return true;
|
|
177
|
-
return BARRIER_SKILLS.has(node.executor);
|
|
178
|
-
}
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
**Step 2.4** — Group into waves:
|
|
182
|
-
|
|
183
|
-
```javascript
|
|
184
|
-
function buildWaves(sortedNodes) {
|
|
185
|
-
const waves = [];
|
|
186
|
-
let currentWave = [];
|
|
187
|
-
for (const node of sortedNodes) {
|
|
188
|
-
if (isBarrier(node)) {
|
|
189
|
-
if (currentWave.length > 0) waves.push(currentWave);
|
|
190
|
-
waves.push([node]); // barrier = solo wave
|
|
191
|
-
currentWave = [];
|
|
192
|
-
} else {
|
|
193
|
-
currentWave.push(node);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
if (currentWave.length > 0) waves.push(currentWave);
|
|
197
|
-
return waves;
|
|
198
|
-
}
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
**Step 2.5** — Build steps array from waves. Write `state.json` to `.workflow/.maestro-coordinate/<session-id>/`.
|
|
150
|
+
1. Generate session ID: `MCP-<YYYYMMDD>-<HHmmss>`
|
|
151
|
+
2. Topological sort (Kahn's algorithm) on template nodes + edges
|
|
152
|
+
3. Classify barrier vs non-barrier: barriers = checkpoint nodes + `maestro-analyze`, `maestro-plan`, `maestro-brainstorm`, `maestro-spec-generate`, `maestro-execute`
|
|
153
|
+
4. Group into waves: barrier nodes → solo wave, non-barrier nodes → accumulate into parallel wave
|
|
154
|
+
5. Build steps array from waves, write `state.json`
|
|
202
155
|
|
|
203
156
|
**Step 2.6** — Display start banner:
|
|
204
157
|
```
|
|
@@ -223,69 +176,20 @@ function buildWaves(sortedNodes) {
|
|
|
223
176
|
|
|
224
177
|
### Phase 3: Wave Execution Loop
|
|
225
178
|
|
|
226
|
-
|
|
227
|
-
let waveNum = 0;
|
|
228
|
-
while (state.steps.some(s => s.status === 'pending')) {
|
|
229
|
-
waveNum++;
|
|
230
|
-
const waveSteps = getNextWave(state.steps);
|
|
231
|
-
```
|
|
179
|
+
Loop while any step has `status === 'pending'`:
|
|
232
180
|
|
|
233
181
|
**3a. Resolve runtime references** in each step's args:
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
return args
|
|
238
|
-
.replace(/{(\w+)}/g, (_, key) => context[key] ?? '')
|
|
239
|
-
.replace(/{N-(\d+)\.(\w+)}/g, (_, id, field) => {
|
|
240
|
-
const step = steps.find(s => s.node_id === `N-${id}`);
|
|
241
|
-
return step?.[field] ?? '';
|
|
242
|
-
})
|
|
243
|
-
.replace(/{prev_(\w+)}/g, (_, field) => {
|
|
244
|
-
const prev = [...steps].reverse().find(s =>
|
|
245
|
-
s.status === 'completed' && s.type !== 'checkpoint');
|
|
246
|
-
return prev?.[field] ?? '';
|
|
247
|
-
});
|
|
248
|
-
}
|
|
249
|
-
```
|
|
182
|
+
- `{key}` → lookup from `context[key]`
|
|
183
|
+
- `{N-xxx.field}` → lookup from completed step with matching `node_id`
|
|
184
|
+
- `{prev_field}` → lookup from most recently completed non-checkpoint step
|
|
250
185
|
|
|
251
186
|
**3b. Handle checkpoint nodes** (no CSV spawn needed):
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
const cp = waveSteps[0];
|
|
256
|
-
// Save checkpoint snapshot
|
|
257
|
-
Write(`${sessionDir}/checkpoints/${cp.node_id}.json`, JSON.stringify({
|
|
258
|
-
session_id: state.id, checkpoint_id: cp.node_id,
|
|
259
|
-
saved_at: new Date().toISOString(),
|
|
260
|
-
steps_snapshot: state.steps, context: state.context
|
|
261
|
-
}, null, 2));
|
|
262
|
-
|
|
263
|
-
state.context.last_checkpoint = cp.node_id;
|
|
264
|
-
cp.status = 'completed'; cp.wave_n = waveNum;
|
|
265
|
-
|
|
266
|
-
// If auto_continue == false: pause for user
|
|
267
|
-
if (!cp.auto_continue) {
|
|
268
|
-
AskUserQuestion: Continue / Pause / Abort
|
|
269
|
-
on Pause: state.status = 'paused', save, exit
|
|
270
|
-
on Abort: state.status = 'aborted', skip remaining, exit
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
Write(stateFile, JSON.stringify(state, null, 2));
|
|
274
|
-
continue;
|
|
275
|
-
}
|
|
276
|
-
```
|
|
187
|
+
- Save checkpoint snapshot to `checkpoints/{node_id}.json` (session state + context)
|
|
188
|
+
- Update `context.last_checkpoint`, mark completed
|
|
189
|
+
- If `auto_continue === false`: prompt user (Continue / Pause / Abort)
|
|
277
190
|
|
|
278
191
|
**3c. Build wave CSV** for skill nodes:
|
|
279
|
-
|
|
280
|
-
```javascript
|
|
281
|
-
const csvContent = 'id,skill_call,topic\n' + waveSteps.map(step => {
|
|
282
|
-
const resolvedArgs = resolveArgs(step.args, state.steps, state.context);
|
|
283
|
-
const skillCall = `$${step.skill} ${resolvedArgs}`.trim();
|
|
284
|
-
return `"${step.step_n}","${skillCall.replace(/"/g, '""')}","Template \"${state.template_name}\" step ${step.step_n}/${state.steps.length}"`;
|
|
285
|
-
}).join('\n');
|
|
286
|
-
|
|
287
|
-
Write(`${sessionDir}/wave-${waveNum}.csv`, csvContent);
|
|
288
|
-
```
|
|
192
|
+
Write `wave-{N}.csv` with columns `id,skill_call,topic`. Each row: resolved `$${step.skill} ${args}`.
|
|
289
193
|
|
|
290
194
|
**3d. Spawn agents**:
|
|
291
195
|
|
|
@@ -298,43 +202,14 @@ spawn_agents_on_csv({
|
|
|
298
202
|
max_runtime_seconds: 1800,
|
|
299
203
|
output_csv_path: `${sessionDir}/wave-${waveNum}-results.csv`,
|
|
300
204
|
output_schema: RESULT_SCHEMA
|
|
301
|
-
})
|
|
302
|
-
```
|
|
303
|
-
|
|
304
|
-
**3e. Read results, update state**:
|
|
305
|
-
|
|
306
|
-
```javascript
|
|
307
|
-
const results = readCSV(`${sessionDir}/wave-${waveNum}-results.csv`);
|
|
308
|
-
for (const row of results) {
|
|
309
|
-
const step = state.steps.find(s => s.step_n === parseInt(row.id));
|
|
310
|
-
step.status = row.status;
|
|
311
|
-
step.findings = row.summary;
|
|
312
|
-
step.artifacts = row.artifacts;
|
|
313
|
-
step.wave_n = waveNum;
|
|
314
|
-
}
|
|
205
|
+
})
|
|
315
206
|
```
|
|
316
207
|
|
|
317
|
-
**
|
|
208
|
+
**3e. Read results**: Map each result row back to its step — update status, findings, artifacts, wave_n.
|
|
318
209
|
|
|
319
|
-
|
|
320
|
-
if (isBarrier(waveSteps[0])) {
|
|
321
|
-
analyzeBarrierArtifacts(waveSteps[0], results[0], state.context);
|
|
322
|
-
}
|
|
323
|
-
```
|
|
324
|
-
|
|
325
|
-
**3g. Persist + abort check**:
|
|
210
|
+
**3f. Barrier analysis**: If barrier wave, read artifacts and update context (see barrier node table in `<context>`).
|
|
326
211
|
|
|
327
|
-
|
|
328
|
-
state.waves.push({ wave_n: waveNum, steps: waveSteps.map(s => s.step_n) });
|
|
329
|
-
Write(stateFile, JSON.stringify(state, null, 2));
|
|
330
|
-
|
|
331
|
-
if (results.some(r => r.status === 'failed')) {
|
|
332
|
-
state.status = 'aborted';
|
|
333
|
-
state.steps.filter(s => s.status === 'pending').forEach(s => s.status = 'skipped');
|
|
334
|
-
Write(stateFile, JSON.stringify(state, null, 2));
|
|
335
|
-
break;
|
|
336
|
-
}
|
|
337
|
-
```
|
|
212
|
+
**3g. Persist + abort check**: Append wave record to `state.waves[]`, persist `state.json`. If any result failed → set `state.status = 'aborted'`, mark remaining steps as skipped.
|
|
338
213
|
|
|
339
214
|
### Sub-Agent Instruction Template
|
|
340
215
|
|
|
@@ -49,30 +49,11 @@ Extract from arguments:
|
|
|
49
49
|
|
|
50
50
|
### Step 2: Load Project Context
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
cat .workflow/state.json 2>/dev/null
|
|
54
|
-
cat .workflow/project.md 2>/dev/null
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
If `.workflow/` does not exist, create minimal scratch structure anyway (quick works without full init).
|
|
52
|
+
Read `.workflow/state.json` and `.workflow/project.md` if they exist. If `.workflow/` does not exist, create minimal scratch structure anyway (quick works without full init).
|
|
58
53
|
|
|
59
54
|
### Step 3: Create Scratch Directory
|
|
60
55
|
|
|
61
|
-
Generate slug from task description (lowercase, hyphens, max 40 chars).
|
|
62
|
-
|
|
63
|
-
```bash
|
|
64
|
-
mkdir -p .workflow/scratch/{slug}
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
Write `config.json` with task metadata:
|
|
68
|
-
```json
|
|
69
|
-
{
|
|
70
|
-
"task": "<description>",
|
|
71
|
-
"flags": { "discuss": false, "full": false },
|
|
72
|
-
"created_at": "<ISO timestamp>",
|
|
73
|
-
"status": "active"
|
|
74
|
-
}
|
|
75
|
-
```
|
|
56
|
+
Generate slug from task description (lowercase, hyphens, max 40 chars). Create `.workflow/scratch/{slug}/`. Write `config.json` with: `task`, `flags` (discuss, full), `created_at` (ISO), `status` ("active").
|
|
76
57
|
|
|
77
58
|
### Step 4: Discussion Phase (if --discuss)
|
|
78
59
|
|
|
@@ -113,37 +94,13 @@ Update plan.json task statuses as completed.
|
|
|
113
94
|
|
|
114
95
|
### Step 8: Verification (if --full)
|
|
115
96
|
|
|
116
|
-
**Only when `--full` is set.**
|
|
117
|
-
|
|
118
|
-
Run convergence criteria checks:
|
|
119
|
-
```bash
|
|
120
|
-
# For each task, verify convergence_criteria via grep/test commands
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
If gaps found (W001): attempt single fix iteration, then report remaining gaps.
|
|
97
|
+
**Only when `--full` is set.** Run convergence criteria checks for each task via grep/test commands. If gaps found (W001): attempt single fix iteration, then report remaining gaps.
|
|
124
98
|
|
|
125
99
|
### Step 9: Commit and Report
|
|
126
100
|
|
|
127
|
-
|
|
128
|
-
git add -A
|
|
129
|
-
git commit -m "quick: {slug} - {short description}"
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
Update `.workflow/state.json` scratch task entry (if state.json exists).
|
|
101
|
+
Commit all changes: `git add -A && git commit -m "quick: {slug} - {short description}"`. Update `.workflow/state.json` scratch task entry (if state.json exists).
|
|
133
102
|
|
|
134
|
-
|
|
135
|
-
=== QUICK TASK COMPLETE ===
|
|
136
|
-
Task: {description}
|
|
137
|
-
Scratch: .workflow/scratch/{slug}/
|
|
138
|
-
Status: {completed|completed-with-gaps}
|
|
139
|
-
|
|
140
|
-
Tasks: {completed}/{total}
|
|
141
|
-
Files modified: {count}
|
|
142
|
-
|
|
143
|
-
{if --full}
|
|
144
|
-
Verification: {PASS|GAPS}
|
|
145
|
-
{endif}
|
|
146
|
-
```
|
|
103
|
+
Display report: task description, scratch path, status (completed/completed-with-gaps), tasks completed/total, files modified count. If `--full`: include verification result (PASS/GAPS).
|
|
147
104
|
|
|
148
105
|
</execution>
|
|
149
106
|
|