maestro-flow 0.3.15 → 0.3.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/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 +42 -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/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/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 +176 -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,13 @@ 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
|
-
7. Delete `wave-1.csv`
|
|
238
|
+
6. Merge `wave-1-results.csv` into master `tasks.csv`, delete `wave-1.csv`
|
|
284
239
|
|
|
285
240
|
#### Wave 2: Plan Generation (Sequential)
|
|
286
241
|
|
|
@@ -303,123 +258,44 @@ spawn_agents_on_csv({
|
|
|
303
258
|
instruction: buildPlanningInstruction(sessionFolder, phaseDir, {
|
|
304
259
|
contextMd, indexJson, specRef, docIndex, designRef, gapsContext
|
|
305
260
|
}),
|
|
306
|
-
max_concurrency: 1, //
|
|
261
|
+
max_concurrency: 1, // Single planning agent
|
|
307
262
|
max_runtime_seconds: 900,
|
|
308
263
|
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"]
|
|
264
|
+
output_schema: { // required: id, status, findings
|
|
265
|
+
id: "string", status: "completed|failed", findings: "string", error: "string"
|
|
318
266
|
}
|
|
319
267
|
})
|
|
320
268
|
```
|
|
321
269
|
|
|
322
|
-
6. Merge results into master `tasks.csv`
|
|
323
|
-
7. Delete `wave-2.csv`
|
|
270
|
+
6. Merge `wave-2-results.csv` into master `tasks.csv`, delete `wave-2.csv`
|
|
324
271
|
|
|
325
272
|
**Planning agent responsibilities** (embedded in instruction):
|
|
326
|
-
- Decompose phase goal
|
|
327
|
-
-
|
|
328
|
-
-
|
|
329
|
-
|
|
330
|
-
- Every task has `convergence.criteria[]` with grep-verifiable conditions
|
|
331
|
-
- Every `action` has concrete values (never "align X with Y")
|
|
332
|
-
- Every `implementation` step has specific values
|
|
333
|
-
- Write `plan.json` to `{PHASE_DIR}/plan.json`
|
|
334
|
-
- Write `.task/TASK-{NNN}.json` files to `{PHASE_DIR}/.task/`
|
|
335
|
-
- If `--gaps`: create fix tasks from gap context, link to issues
|
|
336
|
-
- If `--collab`: pre-allocate ID ranges for parallel planners
|
|
273
|
+
- Decompose phase goal → TASK-001..N with dependencies grouped into execution waves
|
|
274
|
+
- Apply Deep Work Rules: `read_first[]` includes modified file + source of truth; `convergence.criteria[]` are grep-verifiable; all actions/steps have concrete values
|
|
275
|
+
- Write `plan.json` to `{PHASE_DIR}/plan.json` and `.task/TASK-{NNN}.json` to `{PHASE_DIR}/.task/`
|
|
276
|
+
- `--gaps`: create fix tasks from gap context, link to issues; `--collab`: pre-allocate ID ranges
|
|
337
277
|
|
|
338
278
|
### Phase 3: Plan Checking + Confirmation
|
|
339
279
|
|
|
340
280
|
**Objective**: Validate plan quality, revise if needed, present to user.
|
|
341
281
|
|
|
342
282
|
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 |
|
|
283
|
+
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.
|
|
355
284
|
|
|
356
285
|
2. **Revision loop** (max 3 rounds): If critical issues found, regenerate affected tasks.
|
|
357
286
|
|
|
358
287
|
3. **Export results**:
|
|
359
288
|
- 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
|
|
289
|
+
- Generate `context.md`: summary (phase, task count, wave count, complexity, exploration count), exploration findings per angle, plan overview (approach, task IDs, waves), next steps
|
|
372
290
|
|
|
373
|
-
|
|
374
|
-
{findings}
|
|
375
|
-
|
|
376
|
-
## Plan Overview
|
|
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
|
-
```
|
|
291
|
+
4. **Update index.json**: set `status: "planning"`, `plan: { task_ids, task_count, complexity, waves }`, `updated_at`
|
|
398
292
|
|
|
399
293
|
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.
|
|
294
|
+
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
295
|
|
|
409
296
|
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
|
-
```
|
|
297
|
+
Show phase name, task/wave counts, checker status, output file paths.
|
|
298
|
+
Next steps: `maestro-execute "{phase}"` (execute) or `maestro-plan "{phase}"` (re-plan).
|
|
423
299
|
|
|
424
300
|
### Shared Discovery Board Protocol
|
|
425
301
|
|
|
@@ -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
|
|