maestro-flow 0.3.14 → 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-composer.md +354 -0
- 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-player.md +404 -0
- 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/.claude/skills/skill-iter-tune/SKILL.md +382 -0
- package/.claude/skills/skill-iter-tune/phases/01-setup.md +144 -0
- package/.claude/skills/skill-iter-tune/phases/02-execute.md +292 -0
- package/.claude/skills/skill-iter-tune/phases/03-evaluate.md +312 -0
- package/.claude/skills/skill-iter-tune/phases/04-improve.md +186 -0
- package/.claude/skills/skill-iter-tune/phases/05-report.md +166 -0
- package/.claude/skills/skill-iter-tune/specs/evaluation-criteria.md +63 -0
- package/.claude/skills/skill-iter-tune/templates/eval-prompt.md +134 -0
- package/.claude/skills/skill-iter-tune/templates/execute-prompt.md +97 -0
- package/.claude/skills/workflow-skill-designer/SKILL.md +496 -0
- package/.claude/skills/workflow-skill-designer/phases/01-requirements-analysis.md +356 -0
- package/.claude/skills/workflow-skill-designer/phases/02-orchestrator-design.md +444 -0
- package/.claude/skills/workflow-skill-designer/phases/03-phase-design.md +458 -0
- package/.claude/skills/workflow-skill-designer/phases/04-validation.md +471 -0
- 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 +213 -0
- 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 +323 -0
- 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/templates/workflows/specs/node-catalog.md +170 -0
- package/templates/workflows/specs/template-schema.md +157 -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
|
@@ -8,23 +8,11 @@ Autonomous CLI coordinator for Codex. Classifies intent, selects command chain,
|
|
|
8
8
|
|
|
9
9
|
## Step 1: Parse Arguments
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const resumeMode = /\b(-c|--continue)\b/.test(args);
|
|
15
|
-
const dryRun = /\b--dry-run\b/.test(args);
|
|
16
|
-
const forcedChain = args.match(/--chain\s+(\S+)/)?.[1] || null;
|
|
17
|
-
const cliTool = args.match(/--tool\s+(\S+)/)?.[1] || 'codex';
|
|
18
|
-
const intent = args
|
|
19
|
-
.replace(/\b(-y|--yes|-c|--continue|--dry-run)\b/g, '')
|
|
20
|
-
.replace(/--(chain|tool)\s+\S+/g, '')
|
|
21
|
-
.trim();
|
|
22
|
-
```
|
|
11
|
+
Extract from `$ARGUMENTS`:
|
|
12
|
+
- Flags: `-y`/`--yes` (autoYes), `-c`/`--continue` (resumeMode), `--dry-run`, `--chain <name>`, `--tool <name>` (default: codex)
|
|
13
|
+
- `intent` = remaining text after flag removal
|
|
23
14
|
|
|
24
|
-
**If resumeMode:**
|
|
25
|
-
1. Find latest `status.json` in `.workflow/.maestro-coordinate/`
|
|
26
|
-
2. Load state → set `current_step` to first non-completed step
|
|
27
|
-
3. Jump to **Step 6**
|
|
15
|
+
**If resumeMode:** Load latest `.workflow/.maestro-coordinate/*/status.json`, set `current_step` to first non-completed step, jump to **Step 6**.
|
|
28
16
|
|
|
29
17
|
---
|
|
30
18
|
|
|
@@ -34,23 +22,7 @@ const intent = args
|
|
|
34
22
|
test -f .workflow/state.json && echo "exists" || echo "missing"
|
|
35
23
|
```
|
|
36
24
|
|
|
37
|
-
**If exists:** Read `.workflow/state.json` + `.workflow/roadmap.md` + current phase `index.json`:
|
|
38
|
-
|
|
39
|
-
```javascript
|
|
40
|
-
const projectState = {
|
|
41
|
-
initialized: true,
|
|
42
|
-
current_milestone: /* from state.json */,
|
|
43
|
-
latest_artifact: /* last artifact in artifacts[] */,
|
|
44
|
-
milestone_progress: '...', // derived from artifact registry
|
|
45
|
-
phase_artifacts: { brainstorm: false, analysis: false, context: false, plan: false, verification: false, uat: false },
|
|
46
|
-
execution: { tasks_completed: 0, tasks_total: 0 },
|
|
47
|
-
verification_status: 'pending',
|
|
48
|
-
review_verdict: null, // PASS|WARN|BLOCK|null
|
|
49
|
-
uat_status: 'pending',
|
|
50
|
-
phases_total: 0, phases_completed: 0,
|
|
51
|
-
has_blockers: false, accumulated_context: null
|
|
52
|
-
};
|
|
53
|
-
```
|
|
25
|
+
**If exists:** Read `.workflow/state.json` + `.workflow/roadmap.md` + current phase `index.json`. Derive `projectState`: current_milestone, latest_artifact, milestone_progress, phase_artifacts (brainstorm/analysis/context/plan/verification/uat flags), execution (tasks_completed/total), verification_status, review_verdict (PASS|WARN|BLOCK|null), uat_status, phases_total/completed, has_blockers, accumulated_context.
|
|
54
26
|
|
|
55
27
|
**If missing:** `projectState = { initialized: false }`. If intent also empty → **Error E001**.
|
|
56
28
|
|
|
@@ -62,18 +34,7 @@ const projectState = {
|
|
|
62
34
|
|
|
63
35
|
If `forcedChain` is set, validate and jump to **3c**.
|
|
64
36
|
|
|
65
|
-
|
|
66
|
-
const exactMatch = {
|
|
67
|
-
'continue': 'state_continue', 'next': 'state_continue', 'go': 'state_continue',
|
|
68
|
-
'继续': 'state_continue', '下一步': 'state_continue',
|
|
69
|
-
'status': 'status', '状态': 'status', 'dashboard': 'status',
|
|
70
|
-
};
|
|
71
|
-
const normalized = intent.toLowerCase().trim();
|
|
72
|
-
if (exactMatch[normalized]) {
|
|
73
|
-
taskType = exactMatch[normalized];
|
|
74
|
-
// → skip to 3c
|
|
75
|
-
}
|
|
76
|
-
```
|
|
37
|
+
Exact-match keywords: `continue`/`next`/`go`/`继续`/`下一步` → `state_continue`; `status`/`状态`/`dashboard` → `status`. If matched, skip to **3c**.
|
|
77
38
|
|
|
78
39
|
### 3a-2: Structured intent extraction (LLM-native)
|
|
79
40
|
|
|
@@ -94,91 +55,48 @@ Instead of regex, extract a structured intent tuple using LLM semantic understan
|
|
|
94
55
|
|
|
95
56
|
### 3a-3: Route via action × object matrix
|
|
96
57
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
'explore': { 'issue': 'issue_discover', 'feature': 'brainstorm', 'ui': 'ui_design', '_default': 'brainstorm' },
|
|
113
|
-
'plan': { 'issue': 'issue_plan', 'spec': 'spec_generate', '_default': 'plan' },
|
|
114
|
-
'execute': { 'issue': 'issue_execute', '_default': 'execute' },
|
|
115
|
-
'verify': { '_default': 'verify' },
|
|
116
|
-
'review': { '_default': 'review' },
|
|
117
|
-
'test': { '_default': 'test' },
|
|
118
|
-
'debug': { '_default': 'debug' },
|
|
119
|
-
'refactor': { '_default': 'refactor' },
|
|
120
|
-
'manage': { 'issue': 'issue', 'milestone': 'milestone_audit', 'phase': 'milestone_close', 'memory': 'memory', 'doc': 'sync', 'codebase': 'codebase_refresh', '_default': 'status' },
|
|
121
|
-
'transition':{ 'phase': 'milestone_close', 'milestone': 'milestone_complete', '_default': 'milestone_close' },
|
|
122
|
-
'continue': { '_default': 'state_continue' },
|
|
123
|
-
'sync': { '_default': 'sync' },
|
|
124
|
-
'learn': { '_default': 'learn' },
|
|
125
|
-
'retrospect':{ '_default': 'retrospective' },
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
const actionMap = matrix[action] || matrix['fix'];
|
|
129
|
-
return actionMap[object] || actionMap['_default'] || 'quick';
|
|
130
|
-
}
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
Compute clarity (3=action+object+scope, 2=action+object, 1=action only, 0=empty).
|
|
58
|
+
Route via `action × object` matrix. If `issue_id` present → issue pipeline directly.
|
|
59
|
+
|
|
60
|
+
| action | object-specific overrides | default |
|
|
61
|
+
|--------|--------------------------|---------|
|
|
62
|
+
| fix | bug/code/perf/security→debug, issue→issue | debug |
|
|
63
|
+
| create | feature→quick, issue→issue, test→test_gen, spec→spec_generate, ui→ui_design, config→init, phase→roadmap | quick |
|
|
64
|
+
| analyze | bug/code→analyze, issue→issue_analyze, codebase→spec_map | analyze |
|
|
65
|
+
| explore | issue→issue_discover, feature/ui→brainstorm/ui_design | brainstorm |
|
|
66
|
+
| plan | issue→issue_plan, spec→spec_generate | plan |
|
|
67
|
+
| execute | issue→issue_execute | execute |
|
|
68
|
+
| manage | issue→issue, milestone→milestone_audit, phase→milestone_close, memory/doc/codebase→memory/sync/codebase_refresh | status |
|
|
69
|
+
| transition | phase→milestone_close, milestone→milestone_complete | milestone_close |
|
|
70
|
+
| verify, review, test, debug, refactor, continue, sync, learn, retrospect | — | self-named |
|
|
71
|
+
|
|
72
|
+
Clarity scoring: 3=action+object+scope, 2=action+object, 1=action only, 0=empty.
|
|
134
73
|
If clarity < 2 and not autoYes: clarify via AskUserQuestion (max 2 rounds).
|
|
135
74
|
|
|
136
75
|
### 3b: State-based routing (task_type == `state_continue`)
|
|
137
76
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
if (ps === 'verifying') {
|
|
162
|
-
if (s.verification_status === 'passed') {
|
|
163
|
-
if (!s.review_verdict) return { chain: 'review', steps: [{ cmd: 'quality-review', args: '{phase}' }] };
|
|
164
|
-
if (s.uat_status === 'pending') return { chain: 'test', steps: [{ cmd: 'quality-test', args: '{phase}' }] };
|
|
165
|
-
if (s.uat_status === 'passed') return { chain: 'milestone-close', steps: [{ cmd: 'maestro-milestone-audit' }, { cmd: 'maestro-milestone-complete' }] };
|
|
166
|
-
return { chain: 'debug', steps: [{ cmd: 'quality-debug', args: '--from-uat {phase}' }] };
|
|
167
|
-
}
|
|
168
|
-
return { chain: 'quality-loop-partial', steps: [{ cmd: 'maestro-plan', args: '{phase} --gaps' }, { cmd: 'maestro-execute', args: '{phase}' }, { cmd: 'maestro-verify', args: '{phase}' }] };
|
|
169
|
-
}
|
|
170
|
-
if (ps === 'testing') {
|
|
171
|
-
if (s.uat_status === 'passed') return { chain: 'milestone-close', steps: [{ cmd: 'maestro-milestone-audit' }, { cmd: 'maestro-milestone-complete' }] };
|
|
172
|
-
return { chain: 'debug', steps: [{ cmd: 'quality-debug', args: '--from-uat {phase}' }] };
|
|
173
|
-
}
|
|
174
|
-
if (ps === 'completed') {
|
|
175
|
-
if (s.phases_completed >= s.phases_total) return { chain: 'milestone-close', steps: [{ cmd: 'maestro-milestone-audit' }, { cmd: 'maestro-milestone-complete' }] };
|
|
176
|
-
return { chain: 'milestone-close', steps: [{ cmd: 'maestro-milestone-audit' }, { cmd: 'maestro-milestone-complete' }] };
|
|
177
|
-
}
|
|
178
|
-
if (ps === 'blocked') return { chain: 'debug', steps: [{ cmd: 'quality-debug' }] };
|
|
179
|
-
return { chain: 'status', steps: [{ cmd: 'manage-status' }] };
|
|
180
|
-
}
|
|
181
|
-
```
|
|
77
|
+
Returns `{ chain, steps }`. Steps are inline (unlike maestro.codex which uses chainMap lookup).
|
|
78
|
+
|
|
79
|
+
| Condition | Chain | Steps |
|
|
80
|
+
|-----------|-------|-------|
|
|
81
|
+
| Not initialized | `init` | maestro-init |
|
|
82
|
+
| No phases, no roadmap, has context | `next-milestone` | maestro-roadmap |
|
|
83
|
+
| No phases | `brainstorm-driven` | brainstorm → plan → execute → verify |
|
|
84
|
+
| pending + has context | `plan` | maestro-plan |
|
|
85
|
+
| pending, no context | `analyze` | maestro-analyze |
|
|
86
|
+
| exploring/planning + has plan | `execute-verify` | execute → verify |
|
|
87
|
+
| exploring/planning, no plan | `plan` | maestro-plan |
|
|
88
|
+
| executing, all tasks done | `verify` | maestro-verify |
|
|
89
|
+
| executing, tasks remain | `execute` | maestro-execute |
|
|
90
|
+
| verifying, passed + no review | `review` | quality-review |
|
|
91
|
+
| verifying, passed + UAT pending | `test` | quality-test |
|
|
92
|
+
| verifying, passed + UAT passed | `milestone-close` | audit → complete |
|
|
93
|
+
| verifying, passed + UAT failed | `debug` | quality-debug |
|
|
94
|
+
| verifying, not passed | `quality-loop-partial` | plan --gaps → execute → verify |
|
|
95
|
+
| testing, UAT passed | `milestone-close` | audit → complete |
|
|
96
|
+
| testing, UAT not passed | `debug` | quality-debug |
|
|
97
|
+
| completed | `milestone-close` | audit → complete |
|
|
98
|
+
| blocked | `debug` | quality-debug |
|
|
99
|
+
| fallback | `status` | manage-status |
|
|
182
100
|
|
|
183
101
|
### 3c: Intent-based chain map
|
|
184
102
|
|
|
@@ -211,8 +129,8 @@ const chainMap = {
|
|
|
211
129
|
'spec_add': [{ cmd: 'spec-add', args: '"{description}"' }],
|
|
212
130
|
'spec_load': [{ cmd: 'spec-load', args: '"{description}"' }],
|
|
213
131
|
'spec_map': [{ cmd: 'manage-codebase-rebuild' }],
|
|
214
|
-
'
|
|
215
|
-
'
|
|
132
|
+
'knowhow_capture': [{ cmd: 'manage-knowhow-capture', args: '"{description}"' }],
|
|
133
|
+
'knowhow': [{ cmd: 'manage-knowhow', args: '"{description}"' }],
|
|
216
134
|
'issue': [{ cmd: 'manage-issue', args: '"{description}"' }],
|
|
217
135
|
'issue_discover': [{ cmd: 'manage-issue-discover', args: '"{description}"' }],
|
|
218
136
|
'issue_analyze': [{ cmd: 'maestro-analyze', args: '--gaps "{description}"' }],
|
|
@@ -253,23 +171,8 @@ const taskToChain = {
|
|
|
253
171
|
|
|
254
172
|
### 3d: Resolve phase number and issue ID
|
|
255
173
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
// From structured extraction
|
|
259
|
-
if (intentAnalysis.phase_ref) return intentAnalysis.phase_ref;
|
|
260
|
-
// Fallback regex
|
|
261
|
-
const m = intent.match(/phase\s*(\d+)|^(\d+)$/);
|
|
262
|
-
if (m) return m[1] || m[2];
|
|
263
|
-
// With scratch-based architecture, commands default to milestone-wide when no phase specified
|
|
264
|
-
return null;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
function resolveIssueId() {
|
|
268
|
-
if (intentAnalysis.issue_id) return intentAnalysis.issue_id;
|
|
269
|
-
const m = intent.match(/ISS-[\w]+-\d+/i);
|
|
270
|
-
return m ? m[0] : null;
|
|
271
|
-
}
|
|
272
|
-
```
|
|
174
|
+
**Phase**: from structured extraction → fallback regex (`phase N` or bare number) → null (milestone-wide default).
|
|
175
|
+
**Issue ID**: from structured extraction → regex match `ISS-*-NNN`.
|
|
273
176
|
|
|
274
177
|
When executing issue chains, replace `{issue_id}` in step args with the resolved issue ID.
|
|
275
178
|
|
|
@@ -291,28 +194,11 @@ MAESTRO-COORDINATE: {chain_name} (dry run)
|
|
|
291
194
|
|
|
292
195
|
## Step 5: Setup Session
|
|
293
196
|
|
|
294
|
-
|
|
295
|
-
const sessionId = `coord-${new Date().toISOString().replace(/[-:T]/g, '').slice(0, 15)}`;
|
|
296
|
-
const sessionDir = `.workflow/.maestro-coordinate/${sessionId}`;
|
|
297
|
-
Bash(`mkdir -p "${sessionDir}"`);
|
|
298
|
-
|
|
299
|
-
const state = {
|
|
300
|
-
session_id: sessionId, status: 'running',
|
|
301
|
-
created_at: new Date().toISOString(),
|
|
302
|
-
intent, task_type: taskType, chain_name: chainName,
|
|
303
|
-
tool: cliTool, auto_mode: autoYes, phase: resolvedPhase,
|
|
304
|
-
current_step: 0,
|
|
305
|
-
gemini_session_id: null,
|
|
306
|
-
step_analyses: [],
|
|
307
|
-
steps: chain.map((s, i) => ({
|
|
308
|
-
index: i, skill: s.cmd, args: s.args || '',
|
|
309
|
-
status: 'pending', exec_id: null, analysis: null
|
|
310
|
-
}))
|
|
311
|
-
};
|
|
312
|
-
Write(`${sessionDir}/status.json`, JSON.stringify(state, null, 2));
|
|
197
|
+
Create session directory `.workflow/.maestro-coordinate/coord-{timestamp}/`.
|
|
313
198
|
|
|
314
|
-
|
|
315
|
-
|
|
199
|
+
Initialize `status.json` with: session_id, intent, task_type, chain_name, tool, auto_mode, phase, current_step=0, gemini_session_id=null, step_analyses=[], steps[] (each: index, skill, args, status=pending, exec_id=null, analysis=null).
|
|
200
|
+
|
|
201
|
+
Build context: `{ resolved_phase, user_intent, issue_id, spec_session_id: null }`.
|
|
316
202
|
|
|
317
203
|
---
|
|
318
204
|
|
|
@@ -320,233 +206,62 @@ const context = { resolved_phase: resolvedPhase, user_intent: intent, issue_id:
|
|
|
320
206
|
|
|
321
207
|
### 6a: Assemble args
|
|
322
208
|
|
|
323
|
-
|
|
324
|
-
const AUTO_FLAG_MAP = {
|
|
325
|
-
'maestro-analyze': '-y', 'maestro-brainstorm': '-y', 'maestro-ui-design': '-y',
|
|
326
|
-
'maestro-plan': '--auto', 'maestro-spec-generate': '-y', 'quality-test': '--auto-fix',
|
|
327
|
-
'quality-retrospective': '--auto-yes',
|
|
328
|
-
};
|
|
329
|
-
|
|
330
|
-
function assembleArgs(step) {
|
|
331
|
-
let a = (step.args || '')
|
|
332
|
-
.replace(/\{phase\}/g, context.resolved_phase || '') // empty = milestone-wide default
|
|
333
|
-
.replace(/\{description\}/g, context.user_intent || '')
|
|
334
|
-
.replace(/\{issue_id\}/g, context.issue_id || '')
|
|
335
|
-
.replace(/\{spec_session_id\}/g, context.spec_session_id || '')
|
|
336
|
-
.replace(/\{scratch_dir\}/g, context.scratch_dir || '');
|
|
337
|
-
if (state.auto_mode) {
|
|
338
|
-
const flag = AUTO_FLAG_MAP[step.cmd];
|
|
339
|
-
if (flag && !a.includes(flag)) a = a ? `${a} ${flag}` : flag;
|
|
340
|
-
}
|
|
341
|
-
return a.trim();
|
|
342
|
-
}
|
|
343
|
-
```
|
|
209
|
+
Replace template placeholders (`{phase}`, `{description}`, `{issue_id}`, `{spec_session_id}`, `{scratch_dir}`) from context. Inject auto-flags if auto_mode: analyze/brainstorm/ui-design/spec-generate → `-y`, plan → `--auto`, quality-test → `--auto-fix`, quality-retrospective → `--auto-yes`.
|
|
344
210
|
|
|
345
211
|
### 6b: Build prompt from template
|
|
346
212
|
|
|
347
|
-
Read `~/.maestro/templates/cli/prompts/coordinate-step.txt`, fill placeholders
|
|
348
|
-
If previous step has analysis hints, inject them as `{{ANALYSIS_HINTS}}`.
|
|
349
|
-
|
|
350
|
-
```javascript
|
|
351
|
-
function escapeForShell(str) { return "'" + str.replace(/'/g, "'\\''") + "'"; }
|
|
352
|
-
|
|
353
|
-
const assembledArgs = assembleArgs(step);
|
|
354
|
-
const template = Read('~/.maestro/templates/cli/prompts/coordinate-step.txt');
|
|
355
|
-
|
|
356
|
-
// Build analysis hints from previous step's gemini evaluation
|
|
357
|
-
let analysisHints = '';
|
|
358
|
-
const prevAnalysis = (state.step_analyses || []).find(a => a.step_index === state.current_step - 1);
|
|
359
|
-
if (prevAnalysis?.next_step_hints) {
|
|
360
|
-
const h = prevAnalysis.next_step_hints;
|
|
361
|
-
const parts = [];
|
|
362
|
-
if (h.prompt_additions) parts.push(h.prompt_additions);
|
|
363
|
-
if (h.cautions?.length) parts.push('Cautions: ' + h.cautions.join('; '));
|
|
364
|
-
if (h.context_to_carry) parts.push('Context from prior step: ' + h.context_to_carry);
|
|
365
|
-
if (parts.length) analysisHints = parts.join('\n');
|
|
366
|
-
}
|
|
213
|
+
Read `~/.maestro/templates/cli/prompts/coordinate-step.txt`, fill placeholders: `{{COMMAND}}`, `{{ARGS}}`, `{{STEP_N}}`, `{{AUTO_DIRECTIVE}}`, `{{CHAIN_NAME}}`, `{{ANALYSIS_HINTS}}`.
|
|
367
214
|
|
|
368
|
-
|
|
369
|
-
.replace('{{COMMAND}}', `/${step.cmd}`)
|
|
370
|
-
.replace('{{ARGS}}', assembledArgs)
|
|
371
|
-
.replace('{{STEP_N}}', `${state.current_step + 1}/${state.steps.length}`)
|
|
372
|
-
.replace('{{AUTO_DIRECTIVE}}', state.auto_mode ? 'Auto-confirm all prompts. No interactive questions.' : '')
|
|
373
|
-
.replace('{{CHAIN_NAME}}', state.chain_name)
|
|
374
|
-
.replace('{{ANALYSIS_HINTS}}', analysisHints);
|
|
375
|
-
```
|
|
215
|
+
Analysis hints assembled from previous step's gemini evaluation: prompt_additions, cautions, context_to_carry.
|
|
376
216
|
|
|
377
217
|
### 6c: Launch via codex delegate
|
|
378
218
|
|
|
379
|
-
|
|
380
|
-
------------------------------------------------------------
|
|
381
|
-
STEP {i+1}/{total}: {step.cmd} | Tool: {cliTool}
|
|
382
|
-
------------------------------------------------------------
|
|
383
|
-
```
|
|
219
|
+
Display step header. Mark step as running, persist state. Execute:
|
|
384
220
|
|
|
385
|
-
```
|
|
386
|
-
|
|
387
|
-
state.steps[state.current_step].started_at = new Date().toISOString();
|
|
388
|
-
Write(`${sessionDir}/status.json`, JSON.stringify(state, null, 2));
|
|
389
|
-
|
|
390
|
-
Bash({
|
|
391
|
-
command: `codex delegate ${escapeForShell(prompt)} --to ${state.tool} --mode write`,
|
|
392
|
-
run_in_background: true, timeout: 600000
|
|
393
|
-
});
|
|
394
|
-
// ■ STOP — wait for hook callback
|
|
221
|
+
```bash
|
|
222
|
+
codex delegate '<prompt>' --to {tool} --mode write
|
|
395
223
|
```
|
|
396
224
|
|
|
225
|
+
Run in background (timeout 600s). **STOP** -- wait for callback.
|
|
226
|
+
|
|
397
227
|
---
|
|
398
228
|
|
|
399
229
|
## Step 7: Post-Step Callback
|
|
400
230
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
step.exec_id = /* from callback */;
|
|
408
|
-
step.completed_at = new Date().toISOString();
|
|
409
|
-
|
|
410
|
-
// Context propagation
|
|
411
|
-
const phaseMatch = output.match(/PHASE:\s*(\d+)/m);
|
|
412
|
-
if (phaseMatch) context.resolved_phase = phaseMatch[1];
|
|
413
|
-
const specMatch = output.match(/SPEC-[\w-]+/);
|
|
414
|
-
if (specMatch) context.spec_session_id = specMatch[0];
|
|
415
|
-
const scratchMatch = output.match(/scratch_dir:\s*(.+)/m);
|
|
416
|
-
if (scratchMatch) context.scratch_dir = scratchMatch[1].trim();
|
|
417
|
-
|
|
418
|
-
// Success/failure
|
|
419
|
-
const failed = /^STATUS:\s*FAILURE/m.test(output);
|
|
420
|
-
if (!failed) {
|
|
421
|
-
step.status = 'completed';
|
|
422
|
-
} else if (state.auto_mode) {
|
|
423
|
-
if (!step.retried) { step.retried = true; /* re-execute Step 6c */ return; }
|
|
424
|
-
step.status = 'skipped';
|
|
425
|
-
} else {
|
|
426
|
-
// AskUserQuestion: Retry / Skip / Abort
|
|
427
|
-
// On Abort: state.status = 'aborted', save, exit
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
// Save output for analysis
|
|
431
|
-
Write(`${sessionDir}/step-${stepIdx + 1}-output.txt`, output);
|
|
432
|
-
Write(`${sessionDir}/status.json`, JSON.stringify(state, null, 2));
|
|
433
|
-
|
|
434
|
-
// → Step 7b: Gemini analysis (skip if step failed/skipped or single-step chain)
|
|
435
|
-
if (step.status === 'completed' && state.steps.length > 1) {
|
|
436
|
-
// → Step 7b
|
|
437
|
-
} else {
|
|
438
|
-
// Skip analysis, advance directly
|
|
439
|
-
state.current_step = stepIdx + 1;
|
|
440
|
-
Write(`${sessionDir}/status.json`, JSON.stringify(state, null, 2));
|
|
441
|
-
if (state.current_step < state.steps.length) { /* → Step 6 */ }
|
|
442
|
-
else { /* → Step 8 */ }
|
|
443
|
-
}
|
|
444
|
-
```
|
|
231
|
+
On callback:
|
|
232
|
+
1. Capture exec_id from stderr `[CODEX_EXEC_ID=xxx]`
|
|
233
|
+
2. **Context propagation**: extract `PHASE:`, `SPEC-*`, `scratch_dir:` from output
|
|
234
|
+
3. **Success/failure**: if failed + auto_mode → retry once then skip; if failed + interactive → ask Retry/Skip/Abort
|
|
235
|
+
4. Save output to `step-{N}-output.txt`, persist state
|
|
236
|
+
5. If completed + multi-step chain → **Step 7b** (gemini analysis); otherwise advance to next step or **Step 8**
|
|
445
237
|
|
|
446
238
|
---
|
|
447
239
|
|
|
448
240
|
## Step 7b: Analyze Step Output (via gemini)
|
|
449
241
|
|
|
450
|
-
After each step
|
|
242
|
+
After each completed step, delegate to gemini for quality evaluation. Prompt includes: step command/args, last 200 lines of output, prior step analyses, next step info.
|
|
451
243
|
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
const nextStep = stepIdx < state.steps.length - 1 ? state.steps[stepIdx + 1] : null;
|
|
457
|
-
|
|
458
|
-
// Build analysis prompt
|
|
459
|
-
const priorAnalyses = (state.step_analyses || [])
|
|
460
|
-
.map(a => `- Step ${a.step_index + 1} (${a.cmd}): score=${a.quality_score}, issues=${a.issues?.length || 0}`)
|
|
461
|
-
.join('\n');
|
|
462
|
-
|
|
463
|
-
const analysisPrompt = `PURPOSE: Evaluate execution quality of coordinate step "${step.cmd}" (${stepIdx + 1}/${state.steps.length}) and generate optimization hints for the next step.
|
|
464
|
-
CHAIN: ${state.chain_name} | Intent: ${state.intent}
|
|
465
|
-
COMMAND: /${step.cmd} ${step.args || ''}
|
|
466
|
-
STEP OUTPUT (last 200 lines):
|
|
467
|
-
${output.split('\n').slice(-200).join('\n')}
|
|
468
|
-
${priorAnalyses ? `PRIOR STEP ANALYSES:\n${priorAnalyses}` : ''}
|
|
469
|
-
${nextStep ? `NEXT STEP: /${nextStep.cmd} ${nextStep.args || ''}` : 'NEXT STEP: None (last step)'}
|
|
470
|
-
EXPECTED OUTPUT (strict JSON):
|
|
471
|
-
{
|
|
472
|
-
"quality_score": <0-100>,
|
|
473
|
-
"execution_assessment": { "success": <bool>, "completeness": "<full|partial|minimal>", "key_outputs": [], "missing_outputs": [] },
|
|
474
|
-
"issues": [{ "severity": "critical|high|medium|low", "description": "" }],
|
|
475
|
-
"next_step_hints": {
|
|
476
|
-
"prompt_additions": "<extra context or constraints to inject into next step prompt>",
|
|
477
|
-
"cautions": ["<things next step should watch out for>"],
|
|
478
|
-
"context_to_carry": "<key facts from this step's output that next step needs>"
|
|
479
|
-
},
|
|
480
|
-
"step_summary": ""
|
|
481
|
-
}`;
|
|
482
|
-
|
|
483
|
-
let delegateCmd = `codex delegate ${escapeForShell(analysisPrompt)} --to gemini --mode analysis --rule analysis-review-code-quality`;
|
|
484
|
-
if (state.gemini_session_id) delegateCmd += ` --resume ${state.gemini_session_id}`;
|
|
485
|
-
Bash({ command: delegateCmd, run_in_background: true, timeout: 300000 });
|
|
486
|
-
// ■ STOP — wait for hook callback
|
|
244
|
+
Expected JSON response: `{ quality_score, execution_assessment: { success, completeness, key_outputs, missing_outputs }, issues: [{ severity, description }], next_step_hints: { prompt_additions, cautions, context_to_carry }, step_summary }`.
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
codex delegate '<analysis_prompt>' --to gemini --mode analysis --rule analysis-review-code-quality [--resume {gemini_session_id}]
|
|
487
248
|
```
|
|
488
249
|
|
|
489
|
-
|
|
250
|
+
Run in background (timeout 300s). **STOP** -- wait for callback.
|
|
490
251
|
|
|
491
|
-
|
|
492
|
-
const analysisResult = /* parsed JSON from callback output */;
|
|
493
|
-
|
|
494
|
-
// Capture gemini session ID for resume chain
|
|
495
|
-
state.gemini_session_id = /* from callback stderr [CODEX_EXEC_ID=xxx] */;
|
|
496
|
-
|
|
497
|
-
// Store analysis
|
|
498
|
-
if (!state.step_analyses) state.step_analyses = [];
|
|
499
|
-
state.step_analyses.push({
|
|
500
|
-
step_index: stepIdx, cmd: step.cmd,
|
|
501
|
-
quality_score: analysisResult.quality_score,
|
|
502
|
-
issues: analysisResult.issues,
|
|
503
|
-
next_step_hints: analysisResult.next_step_hints,
|
|
504
|
-
summary: analysisResult.step_summary
|
|
505
|
-
});
|
|
506
|
-
step.analysis = {
|
|
507
|
-
quality_score: analysisResult.quality_score,
|
|
508
|
-
issue_count: (analysisResult.issues || []).length
|
|
509
|
-
};
|
|
510
|
-
Write(`${sessionDir}/step-${stepIdx + 1}-analysis.json`, JSON.stringify(analysisResult, null, 2));
|
|
252
|
+
### Step 7c: Post-Analyze Callback
|
|
511
253
|
|
|
512
|
-
|
|
513
|
-
state.current_step = stepIdx + 1;
|
|
514
|
-
Write(`${sessionDir}/status.json`, JSON.stringify(state, null, 2));
|
|
254
|
+
Capture gemini session ID for resume chain. Store analysis result (quality_score, issues, next_step_hints, summary) in `step_analyses[]` and per-step `analysis` field. Write `step-{N}-analysis.json`.
|
|
515
255
|
|
|
516
|
-
|
|
517
|
-
// → Back to Step 6
|
|
518
|
-
} else {
|
|
519
|
-
// → Step 8
|
|
520
|
-
}
|
|
521
|
-
```
|
|
256
|
+
Advance `current_step`. If more steps remain → back to **Step 6**; otherwise → **Step 8**.
|
|
522
257
|
|
|
523
258
|
---
|
|
524
259
|
|
|
525
260
|
## Step 8: Completion Report
|
|
526
261
|
|
|
527
|
-
|
|
528
|
-
const done = state.steps.filter(s => s.status === 'completed').length;
|
|
529
|
-
state.status = state.steps.some(s => s.status === 'failed') ? 'completed_with_errors' : 'completed';
|
|
530
|
-
state.completed_at = new Date().toISOString();
|
|
531
|
-
Write(`${sessionDir}/status.json`, JSON.stringify(state, null, 2));
|
|
532
|
-
```
|
|
262
|
+
Finalize state: status = `completed` or `completed_with_errors`, persist `status.json`.
|
|
533
263
|
|
|
534
|
-
|
|
535
|
-
============================================================
|
|
536
|
-
MAESTRO-COORDINATE COMPLETE
|
|
537
|
-
============================================================
|
|
538
|
-
Session: {session_id}
|
|
539
|
-
Chain: {chain_name} ({done}/{total})
|
|
540
|
-
Tool: {cliTool}
|
|
541
|
-
|
|
542
|
-
Steps:
|
|
543
|
-
[✓] 1. maestro-plan — completed (quality: 85/100)
|
|
544
|
-
[✓] 2. maestro-execute — completed (quality: 78/100)
|
|
545
|
-
|
|
546
|
-
Avg Quality: {avg_score}/100
|
|
547
|
-
Next: $Maestro-coordinate --continue
|
|
548
|
-
============================================================
|
|
549
|
-
```
|
|
264
|
+
Display completion banner: session, chain, tool, per-step status with quality scores, average quality score, resume command.
|
|
550
265
|
|
|
551
266
|
---
|
|
552
267
|
|
|
@@ -6,20 +6,9 @@ Chain-graph coordinator via `maestro coordinate` CLI endpoint. Loads a chain gra
|
|
|
6
6
|
|
|
7
7
|
### Step 1: Parse Arguments
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const autoYes = /\b(-y|--yes)\b/.test(args);
|
|
13
|
-
const resumeMode = /\b(-c|--continue)\b/.test(args);
|
|
14
|
-
const resumeId = args.match(/(?:-c|--continue)\s+(\S+)/)?.[1] || null;
|
|
15
|
-
const forcedChain = args.match(/--chain\s+(\S+)/)?.[1] || null;
|
|
16
|
-
const cliTool = args.match(/--tool\s+(\S+)/)?.[1] || 'claude';
|
|
17
|
-
const intent = args
|
|
18
|
-
.replace(/\b(-y|--yes|--list|-c|--continue)\b/g, '')
|
|
19
|
-
.replace(/(?:-c|--continue)\s+\S+/g, '')
|
|
20
|
-
.replace(/--(chain|tool)\s+\S+/g, '')
|
|
21
|
-
.trim();
|
|
22
|
-
```
|
|
9
|
+
Extract from `$ARGUMENTS`:
|
|
10
|
+
- Flags: `--list`, `-y`/`--yes`, `-c`/`--continue [id]`, `--chain <name>`, `--tool <name>` (default: claude)
|
|
11
|
+
- `intent` = remaining text after flag removal
|
|
23
12
|
|
|
24
13
|
---
|
|
25
14
|
|
|
@@ -37,72 +26,34 @@ Exit after display.
|
|
|
37
26
|
|
|
38
27
|
#### 3a: New session (step mode)
|
|
39
28
|
|
|
40
|
-
Build command dynamically — only include flags when values are present:
|
|
41
|
-
|
|
42
29
|
```bash
|
|
43
30
|
maestro coordinate start "{intent}" --tool {cliTool} [--chain {forcedChain}] [-y]
|
|
44
31
|
```
|
|
45
32
|
|
|
46
|
-
|
|
47
|
-
- Append `-y` only if `autoYes` is true
|
|
48
|
-
|
|
49
|
-
Outputs JSON to stdout:
|
|
50
|
-
|
|
51
|
-
```json
|
|
52
|
-
{
|
|
53
|
-
"session_id": "coord-1711612800-a1b2",
|
|
54
|
-
"status": "step_paused",
|
|
55
|
-
"graph_id": "full-lifecycle",
|
|
56
|
-
"current_node": "plan",
|
|
57
|
-
"steps_completed": 1,
|
|
58
|
-
"last_step": { "node_id": "plan", "outcome": "success", "summary": "..." },
|
|
59
|
-
"history": [...]
|
|
60
|
-
}
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
Capture `session_id` from output.
|
|
33
|
+
Include `--chain` and `-y` only when set. Returns JSON with `session_id`, `status`, `graph_id`, `current_node`, `last_step`, `history`.
|
|
64
34
|
|
|
65
35
|
#### 3b: Resume existing session
|
|
66
36
|
|
|
67
|
-
Use `coordinate next` for step_paused sessions:
|
|
68
|
-
|
|
69
37
|
```bash
|
|
70
38
|
maestro coordinate next {resumeId}
|
|
71
39
|
```
|
|
72
40
|
|
|
73
|
-
If
|
|
74
|
-
|
|
75
|
-
Same JSON output format.
|
|
41
|
+
If bare `-c` (no ID), omit session ID to resume latest step_paused session. Same JSON output format.
|
|
76
42
|
|
|
77
43
|
---
|
|
78
44
|
|
|
79
45
|
### Step 4: Step Loop
|
|
80
46
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
maestro coordinate next {session_id}
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
After each call:
|
|
88
|
-
- Parse JSON output
|
|
89
|
-
- Log step result: `[Step N] /{cmd} — {outcome} — {summary}`
|
|
90
|
-
- If `status === "step_paused"` → continue loop
|
|
91
|
-
- If `status === "completed"` → **Step 5**
|
|
92
|
-
- If `status === "failed"` → **Step 5**
|
|
47
|
+
Loop `maestro coordinate next {session_id}` while `status === "step_paused"`. Log each step: `[Step N] /{cmd} — {outcome} — {summary}`. Exit loop on `completed` or `failed` → **Step 5**.
|
|
93
48
|
|
|
94
49
|
The walker handles internally:
|
|
95
|
-
- Prompt assembly
|
|
50
|
+
- Prompt assembly (command nodes via `coordinate-step` template, decision nodes inline)
|
|
96
51
|
- CLI execution via `maestro delegate --to {tool} --mode {write|analysis}`
|
|
97
|
-
- Decision
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
-
|
|
102
|
-
- State persistence to `.workflow/.maestro-coordinate/{session_id}/`
|
|
103
|
-
- **Channel telemetry**: every walker event is published to a file/SQLite broker under `~/.maestro/data/async/`, keyed by `session_id`. External observers tail it via `maestro coordinate watch {sessionId} [--follow]` without affecting the stdout JSON protocol.
|
|
104
|
-
|
|
105
|
-
> **Step-mode latency note**: in step mode, an LLM-driven decision fires a real CLI spawn inside the `next` process. This is synchronous and can take several seconds. The outer step loop should not impose tight per-step deadlines. Static `expr` decisions remain instant.
|
|
52
|
+
- Decision auto-resolution: `expr` (static, instant) or `llm` (CLI spawn, expects `DECISION: <target>\nREASONING: <text>`). Expr fallback to LLM when no matching/default edge.
|
|
53
|
+
- max_visits loop prevention, state persistence to `.workflow/.maestro-coordinate/{session_id}/`
|
|
54
|
+
- Channel telemetry published to `~/.maestro/data/async/` broker, observable via `maestro coordinate watch`
|
|
55
|
+
|
|
56
|
+
> **Step-mode latency note**: LLM-driven decisions fire synchronous CLI spawns (several seconds). Do not impose tight per-step deadlines. Static `expr` decisions remain instant.
|
|
106
57
|
|
|
107
58
|
---
|
|
108
59
|
|