@iowarp/clio-coder 0.3.4 → 0.3.7
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/CHANGELOG.md +65 -2
- package/CONTRIBUTING.md +6 -6
- package/README.md +16 -5
- package/dist/{acp-S5R4RR5B.js → acp-SK4MD6MM.js} +11 -11
- package/dist/{agents-P6DMMVZY.js → agents-2FN2K6ME.js} +33 -26
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-2XCZLPKS.js → auth-QIYZWM5I.js} +15 -15
- package/dist/{chunk-EKMEHE4H.js → chunk-33YXPOE3.js} +2 -3
- package/dist/{chunk-VAWWTKDP.js → chunk-3HAPLH5M.js} +11 -11
- package/dist/{chunk-YCWGATWI.js → chunk-465YSENW.js} +3 -3
- package/dist/{chunk-4OC57DA6.js → chunk-4DGYLA73.js} +53 -2
- package/dist/{chunk-UZHIZC5S.js → chunk-4DWFMQDR.js} +61 -76
- package/dist/{chunk-ZWMF7253.js → chunk-5C3AQNDW.js} +328 -9
- package/dist/{chunk-22NAGB7X.js → chunk-5C77SEEY.js} +5 -94
- package/dist/{chunk-WPQLXFOZ.js → chunk-5FR74PWO.js} +3 -2
- package/dist/{chunk-35MKKU5R.js → chunk-5UJ6ECTS.js} +18 -10
- package/dist/{chunk-BRXQQJFP.js → chunk-6M7VS3J3.js} +571 -50
- package/dist/{chunk-QQK64KLB.js → chunk-6TUKSZVF.js} +141 -23
- package/dist/{chunk-N4CZJQRK.js → chunk-AB4XIIVB.js} +8 -6
- package/dist/{chunk-KRPY7NTG.js → chunk-BMWK7ZIZ.js} +14 -20
- package/dist/{chunk-4BPJXDWC.js → chunk-C4JBQ5SR.js} +30 -14
- package/dist/{chunk-ZYKPLLNQ.js → chunk-CEYBNUGC.js} +821 -83
- package/dist/{chunk-VEZEGCGW.js → chunk-D4MDIG46.js} +20 -18
- package/dist/chunk-DJNLUABN.js +843 -0
- package/dist/{chunk-BP4OYD6A.js → chunk-DMD2AGVS.js} +21 -2
- package/dist/{chunk-KOHPCX4K.js → chunk-DOOEX22V.js} +2 -2
- package/dist/chunk-DQA7QLMD.js +123 -0
- package/dist/chunk-DR52UMZW.js +21 -0
- package/dist/{chunk-3HZ5RWN2.js → chunk-EBEFWSGL.js} +9 -7
- package/dist/{chunk-EDRHSCIE.js → chunk-EELBMBT6.js} +128 -13
- package/dist/{chunk-HV5X7OR2.js → chunk-EOOQZZDE.js} +16 -14
- package/dist/{chunk-WR67VIZY.js → chunk-FOT2FX5J.js} +63 -5
- package/dist/{chunk-BPGS2WCQ.js → chunk-GEYXPTRF.js} +2 -1
- package/dist/{chunk-FYYLNIL5.js → chunk-GH5622CP.js} +2 -2
- package/dist/{chunk-BEY543CS.js → chunk-GOXNB3AO.js} +5 -2
- package/dist/chunk-GWS3VEIW.js +195 -0
- package/dist/{chunk-G4BMMOKF.js → chunk-HVDIIIQW.js} +2 -2
- package/dist/chunk-HWUFFB6L.js +83 -0
- package/dist/{chunk-X6COSD2O.js → chunk-J7PIKKWC.js} +8 -436
- package/dist/{chunk-NILBFAPG.js → chunk-JNXPYBB4.js} +2 -2
- package/dist/{chunk-4VP4KH3K.js → chunk-JRIO5UD2.js} +4 -4
- package/dist/{chunk-K6WL7QZT.js → chunk-JTSEDYVQ.js} +7 -7
- package/dist/{chunk-QKMUKYO7.js → chunk-KCMKRQX4.js} +236 -84
- package/dist/chunk-KZ2H5X4G.js +1026 -0
- package/dist/{chunk-A2GZF7DC.js → chunk-LADCF22A.js} +13 -13
- package/dist/chunk-LCGCVYZ4.js +57 -0
- package/dist/chunk-M4AKACEO.js +382 -0
- package/dist/{chunk-POHLU5DW.js → chunk-M6L6IDJG.js} +3 -3
- package/dist/{chunk-4JUF2NNX.js → chunk-MXI6J5JF.js} +7 -7
- package/dist/{chunk-X4RCMKVQ.js → chunk-NDINPTJ4.js} +2 -2
- package/dist/{chunk-TTNYS3EA.js → chunk-OB5HIGJY.js} +1 -1
- package/dist/{chunk-7RXG6QRZ.js → chunk-OBMAI2DP.js} +61 -840
- package/dist/{chunk-5M54SPOL.js → chunk-ODFEOB4F.js} +161 -5
- package/dist/chunk-PD3MESLB.js +242 -0
- package/dist/{chunk-ED4KHGC3.js → chunk-PPAMZ32Z.js} +9 -2
- package/dist/{chunk-VMNQ6OZA.js → chunk-QCTRSGHQ.js} +963 -786
- package/dist/chunk-RVG5JXAL.js +41 -0
- package/dist/{chunk-RD5U66HV.js → chunk-SROCI7ZU.js} +7 -7
- package/dist/{chunk-MFFY33HR.js → chunk-THKY7CD7.js} +466 -205
- package/dist/{chunk-34475P3I.js → chunk-TSHXZTOQ.js} +5 -4
- package/dist/{chunk-PCZJO5TI.js → chunk-UFQ3F4FW.js} +13 -178
- package/dist/{chunk-AD2SYQYC.js → chunk-UHXRNZ2J.js} +121 -3
- package/dist/chunk-UND3GU2L.js +103 -0
- package/dist/{chunk-QQL5RT5M.js → chunk-UUANF5CR.js} +2323 -2114
- package/dist/{chunk-VJWL6YS5.js → chunk-UUVG37B4.js} +2 -2
- package/dist/chunk-UVDSQ6LW.js +472 -0
- package/dist/{chunk-QWU7ZBO7.js → chunk-VQNODYQ4.js} +215 -56
- package/dist/chunk-VREKEFLL.js +37 -0
- package/dist/{chunk-2TZWSW76.js → chunk-WHGPSPT5.js} +2 -2
- package/dist/{chunk-TW3WDMVS.js → chunk-WHJYKASB.js} +2 -2
- package/dist/{chunk-MEQ45TQ4.js → chunk-WJHBC77E.js} +21 -7
- package/dist/{chunk-HXG4IURW.js → chunk-X2KV5FXT.js} +2 -2
- package/dist/{chunk-YHZX5GEU.js → chunk-XAKHZX5N.js} +2 -2
- package/dist/{chunk-2LZI5CAG.js → chunk-XEGB6BCN.js} +228 -36
- package/dist/{chunk-E25LMLRW.js → chunk-YD734TPH.js} +2 -2
- package/dist/{verifiers-4UUM6TEE.js → chunk-YTYFXUI3.js} +121 -372
- package/dist/{chunk-3JLKSKD7.js → chunk-ZGH7FGS5.js} +17 -7
- package/dist/{chunk-VSNATDE6.js → chunk-ZZMN5OM4.js} +2 -2
- package/dist/cli/index.js +34 -32
- package/dist/{clio-J5JIOIDS.js → clio-WBVQEBKO.js} +7 -7
- package/dist/{code-nav-AXCXSBHX.js → code-nav-FGGFIE7L.js} +7 -7
- package/dist/codewiki/build-worker.js +4 -4
- package/dist/{components-KELWS457.js → components-F7OEATSO.js} +5 -5
- package/dist/{config-OEBMIN2U.js → config-TRBL3RCF.js} +48 -41
- package/dist/{configure-PUQOSIXQ.js → configure-OLCVPHNM.js} +17 -17
- package/dist/{context-URSXPBCK.js → context-MJIJ6GOX.js} +12 -12
- package/dist/{context-EKDCKUUZ.js → context-WFPKQSM6.js} +26 -9
- package/dist/{context-MGSE4Z2T.js → context-XEWE3MOJ.js} +44 -37
- package/dist/{context-clear-KDAJRNUK.js → context-clear-KNOS2JPB.js} +44 -37
- package/dist/{context-index-BZ4UYMTC.js → context-index-SSR5ECNE.js} +3 -3
- package/dist/{context-working-set-SBKMPPI2.js → context-working-set-EUXAZI6N.js} +14 -13
- package/dist/{dispatch-runner-MSWN72NK.js → dispatch-runner-B7MTOVKL.js} +321 -60
- package/dist/{docs-2C2LTVT2.js → docs-FLJTIDSE.js} +5 -5
- package/dist/{doctor-7BSE27PJ.js → doctor-RN4YKO2X.js} +15 -15
- package/dist/{eval-IZGDOO4H.js → eval-RUBJVSNQ.js} +52 -236
- package/dist/{evidence-SR7WXB5B.js → evidence-JZNBUOQZ.js} +39 -33
- package/dist/{evolve-K7VE2CBX.js → evolve-FJVC4KKI.js} +39 -33
- package/dist/{extensions-QVDOHDGJ.js → extensions-IQL36S7K.js} +5 -5
- package/dist/{fleet-7XMJNQNF.js → fleet-BDKYJFCP.js} +243 -370
- package/dist/fleet-commands-ZFIWZSB3.js +70 -0
- package/dist/fleet-graph-Y6HPXIVF.js +125 -0
- package/dist/fleet-new-RDVJLHHH.js +48 -0
- package/dist/{fleet-preflight-AQNAH644.js → fleet-preflight-BHSNPBMH.js} +2 -2
- package/dist/fleet-validate-BIYREGIK.js +79 -0
- package/dist/{init-JGNPAYXT.js → init-LQUB5COQ.js} +57 -48
- package/dist/library-NJAHIGG4.js +217 -0
- package/dist/memory-OG6HOYKM.js +472 -0
- package/dist/{models-ZMMLFJNN.js → models-5ZG5XY7J.js} +23 -22
- package/dist/{monitor-2F3T5KHP.js → monitor-TJ7AMTGB.js} +69 -35
- package/dist/{orchestrator-ORHT43JB.js → orchestrator-WZYB54DM.js} +4868 -1189
- package/dist/{paths-UXLN5YYZ.js → paths-XUC7GS6E.js} +5 -5
- package/dist/{reset-NXGTYNUO.js → reset-PXQT45IY.js} +8 -8
- package/dist/{run-RF4WJGMT.js → run-FQ74YF62.js} +82 -62
- package/dist/{share-UT3W6E4M.js → share-FW7SVCL3.js} +34 -10
- package/dist/{skills-PSACKC5Q.js → skills-7E7IRB3R.js} +25 -9
- package/dist/{skills-eval-WJSI55RZ.js → skills-eval-LI75W6OK.js} +43 -35
- package/dist/{targets-PIIRAOYS.js → targets-4CIFKCTW.js} +27 -24
- package/dist/{terminal-lease-ULWXWNVY.js → terminal-lease-WUZY7ZV5.js} +5 -4
- package/dist/{uninstall-FZCQCDKC.js → uninstall-7FV7IP4E.js} +5 -5
- package/dist/{upgrade-346TZ6AV.js → upgrade-K2HVIVMQ.js} +21 -20
- package/dist/{usage-6KKXR32N.js → usage-GTZELZQX.js} +159 -59
- package/dist/verifiers-RLAHT27O.js +336 -0
- package/dist/{verify-X5HDROLA.js → verify-BX3BRKH5.js} +7 -6
- package/dist/{wiki-generate-7STOCIFZ.js → wiki-generate-ASIFASCN.js} +58 -48
- package/dist/worker/entry.js +98 -84
- package/dist/{workspace-G4ZWUIPR.js → workspace-ZJ6BFM3Q.js} +4 -4
- package/docs/README.md +4 -3
- package/docs/acp.md +1 -1
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +2 -2
- package/docs/artifact-placement.md +1 -2
- package/docs/artifact-versions.md +10 -6
- package/docs/built-in-agents.md +26 -2
- package/docs/capacity-and-scheduling.md +1 -1
- package/docs/commands-and-modes.md +90 -8
- package/docs/configuration-and-targets.md +90 -2
- package/docs/context-engine.md +4 -2
- package/docs/context-working-set.md +4 -4
- package/docs/development-pipeline.md +1 -1
- package/docs/dispatch-architecture-rationale.md +1 -1
- package/docs/documentation-coverage.md +4 -4
- package/docs/documentation-guide.md +4 -4
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +4 -45
- package/docs/evidence-and-memory.md +70 -10
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +4 -1
- package/docs/extensions-and-sharing.md +6 -2
- package/docs/fleet-demo-runbook.md +2 -2
- package/docs/fleet-dispatch.md +224 -11
- package/docs/git-commit-provenance.md +2 -2
- package/docs/glossary.md +1 -1
- package/docs/installation-and-lifecycle.md +2 -2
- package/docs/middleware-and-components.md +20 -2
- package/docs/model-catalog.md +1 -1
- package/docs/observability.md +55 -8
- package/docs/proactive-memory.md +26 -16
- package/docs/prompt-envelope-and-tools.md +4 -2
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +83 -65
- package/docs/resource-library.md +59 -0
- package/docs/safety-model.md +29 -7
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +37 -1
- package/docs/skills-marketplace.md +16 -3
- package/docs/tool-usage.md +14 -7
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +1 -1
- package/docs/tui-design.md +38 -4
- package/docs/worker-dispatch-mechanics.md +3 -3
- package/package.json +7 -4
- package/src/cli/agents.ts +2 -3
- package/src/cli/argv.ts +14 -1
- package/src/cli/fleet-commands.ts +37 -0
- package/src/cli/fleet-graph.ts +102 -0
- package/src/cli/fleet-new.ts +36 -0
- package/src/cli/fleet-preflight.ts +121 -0
- package/src/cli/fleet-validate.ts +30 -0
- package/src/cli/fleet.ts +188 -335
- package/src/cli/index.ts +4 -2
- package/src/cli/library.ts +190 -0
- package/src/cli/memory.ts +272 -10
- package/src/cli/modes/json-stream.ts +2 -2
- package/src/cli/modes/print.ts +12 -1
- package/src/cli/run.ts +22 -2
- package/src/cli/share.ts +13 -1
- package/src/cli/targets.ts +12 -3
- package/src/cli/usage.ts +160 -20
- package/src/core/bus-events.ts +7 -0
- package/src/core/commit-attribution.ts +4 -4
- package/src/core/config.ts +130 -0
- package/src/core/defaults.ts +81 -0
- package/src/core/response-model-id.ts +134 -0
- package/src/core/toml.ts +62 -0
- package/src/core/workspace-files.ts +0 -1
- package/src/domains/agents/builtins/architect.md +2 -1
- package/src/domains/agents/builtins/oracle.md +33 -0
- package/src/domains/agents/catalog.ts +18 -5
- package/src/domains/agents/fleet-contract.ts +278 -16
- package/src/domains/agents/index.ts +14 -0
- package/src/domains/agents/recipe.ts +54 -14
- package/src/domains/agents/result-contract.ts +242 -5
- package/src/domains/config/classify.ts +4 -0
- package/src/domains/context/bootstrap.ts +36 -27
- package/src/domains/context/project-metadata.ts +19 -63
- package/src/domains/context/prompt-context.ts +8 -0
- package/src/domains/context/working-set/policies/index.ts +3 -4
- package/src/domains/dispatch/active-route-planner.ts +14 -0
- package/src/domains/dispatch/backoff.ts +2 -1
- package/src/domains/dispatch/budget-envelope.ts +396 -0
- package/src/domains/dispatch/capability-match.ts +1 -0
- package/src/domains/dispatch/checkout-writer-lease.ts +175 -0
- package/src/domains/dispatch/contract.ts +36 -0
- package/src/domains/dispatch/delegation-plan.ts +167 -0
- package/src/domains/dispatch/execution-plan.ts +76 -5
- package/src/domains/dispatch/execution-role.ts +3 -1
- package/src/domains/dispatch/execution-scheduler.ts +183 -67
- package/src/domains/dispatch/extension.ts +339 -36
- package/src/domains/dispatch/fleet-gate.ts +14 -0
- package/src/domains/dispatch/fleet-plan.ts +63 -3
- package/src/domains/dispatch/fleet-run.ts +737 -0
- package/src/domains/dispatch/gate-role-prompts.ts +9 -0
- package/src/domains/dispatch/host-verification.ts +178 -0
- package/src/domains/dispatch/index.ts +38 -0
- package/src/domains/dispatch/intent.ts +159 -0
- package/src/domains/dispatch/orphan-recovery.ts +1 -0
- package/src/domains/dispatch/receipt-integrity.ts +12 -4
- package/src/domains/dispatch/state.ts +37 -3
- package/src/domains/dispatch/types.ts +61 -9
- package/src/domains/dispatch/validation.ts +80 -6
- package/src/domains/dispatch/worker-spawn.ts +14 -3
- package/src/domains/eval/metrics/evidence.ts +0 -116
- package/src/domains/eval/metrics/invariants.ts +1 -1
- package/src/domains/eval/runners/clio-run.ts +1 -10
- package/src/domains/eval/runners/external-command.ts +2 -29
- package/src/domains/eval/schema/suite.ts +0 -7
- package/src/domains/eval/suites/run.ts +1 -7
- package/src/domains/evidence/trust-status.ts +10 -1
- package/src/domains/memory/index.ts +22 -0
- package/src/domains/memory/operations.ts +58 -1
- package/src/domains/memory/promotion.ts +281 -0
- package/src/domains/memory/prompt-section.ts +25 -5
- package/src/domains/memory/proposal.ts +51 -7
- package/src/domains/memory/task-bank.ts +3 -2
- package/src/domains/memory/task-memory-handoff.ts +181 -24
- package/src/domains/memory/task-memory-policy.ts +3 -1
- package/src/domains/memory/types.ts +37 -0
- package/src/domains/memory/validate.ts +178 -0
- package/src/domains/middleware/index.ts +15 -0
- package/src/domains/middleware/memory-intervention.ts +35 -25
- package/src/domains/middleware/runtime.ts +6 -0
- package/src/domains/middleware/skills-reminder.ts +19 -4
- package/src/domains/middleware/stalled-turn.ts +43 -1
- package/src/domains/middleware/types.ts +10 -0
- package/src/domains/middleware/watchdog.ts +281 -0
- package/src/domains/observability/contract.ts +9 -2
- package/src/domains/observability/cost.ts +31 -4
- package/src/domains/observability/extension.ts +2 -2
- package/src/domains/observability/index.ts +10 -0
- package/src/domains/observability/out-of-turn-usage.ts +223 -0
- package/src/domains/providers/index.ts +3 -0
- package/src/domains/providers/model-discovery.ts +9 -0
- package/src/domains/providers/runtime-resolution.ts +38 -1
- package/src/domains/providers/runtimes/common/probe-helpers.ts +97 -16
- package/src/domains/providers/types/context-window-slots.ts +18 -0
- package/src/domains/providers/types/runtime-descriptor.ts +3 -1
- package/src/domains/resources/index.ts +20 -0
- package/src/domains/resources/library.ts +326 -0
- package/src/domains/resources/skills/marketplace.ts +37 -12
- package/src/domains/safety/call-target.ts +211 -14
- package/src/domains/safety/decision-presentation.ts +268 -0
- package/src/domains/safety/redaction.ts +73 -0
- package/src/domains/session/context-ledger.ts +10 -1
- package/src/domains/session/decision-board.ts +4 -0
- package/src/domains/session/entries.ts +3 -0
- package/src/domains/session/handoff.ts +629 -0
- package/src/domains/session/history.ts +68 -19
- package/src/domains/session/usage.ts +24 -7
- package/src/domains/share/archive.ts +67 -2
- package/src/engine/acp/event-mapper.ts +7 -0
- package/src/engine/acp/server.ts +29 -2
- package/src/engine/apis/lmstudio.ts +25 -4
- package/src/engine/apis/openai-completions.ts +147 -22
- package/src/engine/claude/sdk-runtime.ts +8 -2
- package/src/engine/claude/tool-safety.ts +13 -0
- package/src/engine/loop-guard.ts +27 -3
- package/src/engine/worker-events.ts +4 -3
- package/src/engine/worker-runtime.ts +59 -54
- package/src/entry/orchestrator.ts +55 -1
- package/src/interactive/bus-notices.ts +26 -0
- package/src/interactive/chat-loop-messages.ts +22 -0
- package/src/interactive/chat-loop.ts +248 -1
- package/src/interactive/chat-renderer.ts +41 -3
- package/src/interactive/clio-editor.ts +44 -7
- package/src/interactive/context-overlay.ts +43 -5
- package/src/interactive/cost-overlay.ts +70 -11
- package/src/interactive/council-dispatch.ts +30 -0
- package/src/interactive/council-grid.ts +213 -0
- package/src/interactive/council.ts +99 -0
- package/src/interactive/dispatch-board.ts +471 -50
- package/src/interactive/fleet-run-preview.ts +307 -0
- package/src/interactive/footer/notifications.ts +219 -0
- package/src/interactive/footer/widgets.ts +13 -0
- package/src/interactive/handoff-round.ts +56 -0
- package/src/interactive/interactive-application.ts +49 -2
- package/src/interactive/interactive-event-projection.ts +9 -1
- package/src/interactive/interactive-input-runtime.ts +11 -1
- package/src/interactive/interactive-presentation.ts +11 -1
- package/src/interactive/interactive-slash-runtime.ts +52 -2
- package/src/interactive/interactive-subscriptions.ts +14 -2
- package/src/interactive/memory-overlay.ts +89 -4
- package/src/interactive/oracle.ts +179 -0
- package/src/interactive/overlay-ask-user-lifecycle.ts +7 -1
- package/src/interactive/overlay-frame.ts +5 -2
- package/src/interactive/overlay-general-openers.ts +230 -2
- package/src/interactive/overlay-key-routing.ts +58 -2
- package/src/interactive/overlay-lifecycle.ts +52 -5
- package/src/interactive/overlay-permission-lifecycle.ts +33 -8
- package/src/interactive/overlay-resource-openers.ts +11 -3
- package/src/interactive/overlay-session-lifecycle.ts +234 -2
- package/src/interactive/overlay-transitions.ts +11 -0
- package/src/interactive/overlays/ask-user.ts +74 -30
- package/src/interactive/overlays/decisions.ts +3 -1
- package/src/interactive/overlays/fleet-run-approval.ts +208 -0
- package/src/interactive/overlays/handoff-review.ts +185 -0
- package/src/interactive/overlays/library-install-confirm.ts +151 -0
- package/src/interactive/overlays/list-overlay.ts +168 -2
- package/src/interactive/overlays/settings.ts +101 -4
- package/src/interactive/overlays/side-question.ts +139 -0
- package/src/interactive/overlays/skills-hub.ts +401 -15
- package/src/interactive/permission-hint.ts +35 -0
- package/src/interactive/permission-overlay.ts +95 -45
- package/src/interactive/renderers/tool-execution.ts +19 -49
- package/src/interactive/session-last-turn.ts +8 -1
- package/src/interactive/session-usage-reseed.ts +36 -10
- package/src/interactive/side-question.ts +171 -0
- package/src/interactive/slash-commands.ts +434 -7
- package/src/interactive/slash-spec.ts +19 -6
- package/src/interactive/status/summary.ts +5 -0
- package/src/interactive/status/types.ts +5 -0
- package/src/interactive/terminal-lease.ts +1 -0
- package/src/interactive/theme/tokens.ts +30 -0
- package/src/interactive/turn-context.ts +96 -23
- package/src/interactive/turn-middleware.ts +16 -1
- package/src/interactive/turn-runtime.ts +37 -8
- package/src/interactive/turn-state.ts +3 -0
- package/src/interactive/watchdog-run.ts +75 -0
- package/src/interactive/worker-progress.ts +440 -0
- package/src/interactive/worker-share.ts +56 -1
- package/src/interactive/worker-stream.ts +58 -110
- package/src/tools/agent-tools.ts +28 -3
- package/src/tools/ask-user.ts +21 -1
- package/src/tools/bootstrap.ts +3 -0
- package/src/tools/compete-worktrees.ts +13 -79
- package/src/tools/context/index.ts +2 -2
- package/src/tools/dispatch-admission.ts +242 -8
- package/src/tools/dispatch-arguments.ts +65 -1
- package/src/tools/dispatch-event-text.ts +19 -0
- package/src/tools/dispatch-plan.ts +136 -6
- package/src/tools/dispatch-runner.ts +319 -13
- package/src/tools/dispatch-types.ts +20 -1
- package/src/tools/dispatch.ts +96 -3
- package/src/tools/monitor.ts +31 -0
- package/src/tools/profiles.ts +18 -4
- package/src/tools/registry.ts +15 -5
- package/src/tools/result-disposition.ts +156 -0
- package/src/tools/result-shaping.ts +59 -1
- package/src/tools/task-worktree.ts +238 -0
- package/src/tools/verify/authoring.ts +116 -55
- package/src/tools/verify/scripts.ts +62 -0
- package/src/tools/worker-evidence.ts +21 -1
- package/src/worker/spec-contract.ts +44 -3
- package/dist/chunk-EFADSJET.js +0 -18
- package/dist/chunk-HC4CLZ2Y.js +0 -68
- package/dist/memory-4ALKDJ4Q.js +0 -246
- package/src/domains/eval/metrics/chaos-stream.ts +0 -93
|
@@ -2,140 +2,144 @@ import { createRequire as __clioCreateRequire } from "node:module"; const requir
|
|
|
2
2
|
import {
|
|
3
3
|
SchedulingDomainModule,
|
|
4
4
|
createPromptsDomainModule
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-EBEFWSGL.js";
|
|
6
6
|
import {
|
|
7
|
-
AgentsDomainModule,
|
|
8
7
|
SafetyDomainModule
|
|
9
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-J7PIKKWC.js";
|
|
10
9
|
import {
|
|
11
10
|
LifecycleDomainModule
|
|
12
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-JTSEDYVQ.js";
|
|
13
12
|
import {
|
|
14
13
|
ensureClioState
|
|
15
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-3HAPLH5M.js";
|
|
16
15
|
import {
|
|
17
16
|
ConfigDomainModule,
|
|
18
17
|
loadDomains
|
|
19
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-BMWK7ZIZ.js";
|
|
20
19
|
import {
|
|
21
20
|
ObservabilityDomainModule
|
|
22
|
-
} from "./chunk-
|
|
23
|
-
import "./chunk-
|
|
21
|
+
} from "./chunk-5UJ6ECTS.js";
|
|
22
|
+
import "./chunk-GWS3VEIW.js";
|
|
24
23
|
import "./chunk-HFSBBKSQ.js";
|
|
25
|
-
import "./chunk-
|
|
24
|
+
import "./chunk-YD734TPH.js";
|
|
26
25
|
import {
|
|
27
26
|
ContextDomainModule
|
|
28
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-4DWFMQDR.js";
|
|
28
|
+
import "./chunk-LCGCVYZ4.js";
|
|
29
29
|
import "./chunk-5WIGXA4T.js";
|
|
30
|
-
import "./chunk-
|
|
30
|
+
import "./chunk-6M7VS3J3.js";
|
|
31
31
|
import {
|
|
32
32
|
DispatchDomainModule,
|
|
33
|
-
WRITE_BOUNDARY_VIOLATION_REASON,
|
|
34
33
|
capacityDrain,
|
|
35
|
-
|
|
36
|
-
compileFleetExecutionPlan,
|
|
37
|
-
createWriteBoundaryEnforcer,
|
|
38
|
-
decideReviewGate,
|
|
39
|
-
executePlan,
|
|
40
|
-
executionPlanAncestors,
|
|
41
|
-
materializePendingGateDecision,
|
|
34
|
+
executeFleetRun,
|
|
42
35
|
openLedger,
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
setCapacityDraining
|
|
46
|
-
|
|
47
|
-
writeCodeStepRecord
|
|
48
|
-
} from "./chunk-QQL5RT5M.js";
|
|
36
|
+
planFleetResume,
|
|
37
|
+
readFleetRun,
|
|
38
|
+
setCapacityDraining
|
|
39
|
+
} from "./chunk-UUANF5CR.js";
|
|
49
40
|
import {
|
|
50
41
|
SessionDomainModule
|
|
51
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-6TUKSZVF.js";
|
|
52
43
|
import {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
listFleetContracts,
|
|
57
|
-
loadFleetCommands,
|
|
58
|
-
loadFleetContract,
|
|
59
|
-
renderFleetPrompt
|
|
60
|
-
} from "./chunk-QKMUKYO7.js";
|
|
44
|
+
WRITE_BOUNDARY_VIOLATION_REASON,
|
|
45
|
+
preflightWriteBoundaries
|
|
46
|
+
} from "./chunk-KZ2H5X4G.js";
|
|
61
47
|
import {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
import "./chunk-
|
|
48
|
+
compileFleetExecutionPlan
|
|
49
|
+
} from "./chunk-M4AKACEO.js";
|
|
50
|
+
import "./chunk-RVG5JXAL.js";
|
|
51
|
+
import "./chunk-ZGH7FGS5.js";
|
|
52
|
+
import "./chunk-TSHXZTOQ.js";
|
|
67
53
|
import "./chunk-TXOTCRLG.js";
|
|
68
|
-
import "./chunk-
|
|
69
|
-
import "./chunk-
|
|
54
|
+
import "./chunk-HVDIIIQW.js";
|
|
55
|
+
import "./chunk-NDINPTJ4.js";
|
|
70
56
|
import "./chunk-MVVUPGPW.js";
|
|
71
57
|
import {
|
|
72
58
|
ResourcesDomainModule
|
|
73
|
-
} from "./chunk-
|
|
74
|
-
import
|
|
59
|
+
} from "./chunk-THKY7CD7.js";
|
|
60
|
+
import {
|
|
61
|
+
AgentsDomainModule
|
|
62
|
+
} from "./chunk-UVDSQ6LW.js";
|
|
63
|
+
import "./chunk-DR52UMZW.js";
|
|
64
|
+
import "./chunk-C4JBQ5SR.js";
|
|
75
65
|
import "./chunk-2SFS6XQE.js";
|
|
76
66
|
import "./chunk-ZWLZP4ZT.js";
|
|
77
67
|
import "./chunk-W6GROXXM.js";
|
|
68
|
+
import {
|
|
69
|
+
FLEET_COMMANDS_REMEDY,
|
|
70
|
+
FLEET_COMMANDS_REPO_PATH,
|
|
71
|
+
FleetCommandRegistryMissingError,
|
|
72
|
+
listFleetContracts,
|
|
73
|
+
loadFleetCommands,
|
|
74
|
+
loadFleetContract,
|
|
75
|
+
renderFleetPrompt
|
|
76
|
+
} from "./chunk-KCMKRQX4.js";
|
|
78
77
|
import {
|
|
79
78
|
MiddlewareDomainModule
|
|
80
|
-
} from "./chunk-
|
|
79
|
+
} from "./chunk-XEGB6BCN.js";
|
|
81
80
|
import "./chunk-IR4CFBFN.js";
|
|
82
81
|
import "./chunk-UOV2BYIW.js";
|
|
83
|
-
import "./chunk-
|
|
84
|
-
import "./chunk-ZYKPLLNQ.js";
|
|
85
|
-
import "./chunk-WPQLXFOZ.js";
|
|
82
|
+
import "./chunk-WHGPSPT5.js";
|
|
86
83
|
import {
|
|
87
|
-
|
|
88
|
-
|
|
84
|
+
formatBudgetPolicy,
|
|
85
|
+
formatBudgetReasons,
|
|
86
|
+
formatBudgetRequest,
|
|
87
|
+
formatEffectiveBudget
|
|
88
|
+
} from "./chunk-CEYBNUGC.js";
|
|
89
|
+
import "./chunk-5FR74PWO.js";
|
|
90
|
+
import "./chunk-OBMAI2DP.js";
|
|
91
|
+
import "./chunk-5C77SEEY.js";
|
|
89
92
|
import {
|
|
90
93
|
agentRoleFactsResolver,
|
|
91
|
-
gateRouteCorrelation,
|
|
92
94
|
requestExecutionRole,
|
|
93
95
|
withAttemptRole
|
|
94
|
-
} from "./chunk-
|
|
95
|
-
import "./chunk-AOCYTWAV.js";
|
|
96
|
-
import "./chunk-MV3K5QF2.js";
|
|
96
|
+
} from "./chunk-UND3GU2L.js";
|
|
97
97
|
import "./chunk-CMZWFGD2.js";
|
|
98
98
|
import "./chunk-I4HZDVNP.js";
|
|
99
|
-
import "./chunk-
|
|
100
|
-
import "./chunk-UL3WSD3F.js";
|
|
99
|
+
import "./chunk-GH5622CP.js";
|
|
101
100
|
import "./chunk-VG7TBQIY.js";
|
|
102
101
|
import "./chunk-OQE5J4C6.js";
|
|
103
|
-
import "./chunk-
|
|
104
|
-
import "./chunk-
|
|
105
|
-
import "./chunk-
|
|
102
|
+
import "./chunk-GOXNB3AO.js";
|
|
103
|
+
import "./chunk-HWUFFB6L.js";
|
|
104
|
+
import "./chunk-DJNLUABN.js";
|
|
105
|
+
import "./chunk-AOCYTWAV.js";
|
|
106
|
+
import "./chunk-MV3K5QF2.js";
|
|
107
|
+
import "./chunk-UL3WSD3F.js";
|
|
108
|
+
import "./chunk-ODFEOB4F.js";
|
|
106
109
|
import "./chunk-OZNBF4L3.js";
|
|
107
110
|
import "./chunk-4BJ5BYCE.js";
|
|
111
|
+
import "./chunk-ECH6PKUQ.js";
|
|
108
112
|
import "./chunk-6XLNIQDB.js";
|
|
109
113
|
import "./chunk-5B2AEOW5.js";
|
|
110
114
|
import "./chunk-CGKSTWHD.js";
|
|
111
|
-
import "./chunk-
|
|
112
|
-
import "./chunk-
|
|
113
|
-
import "./chunk-
|
|
115
|
+
import "./chunk-M6L6IDJG.js";
|
|
116
|
+
import "./chunk-XAKHZX5N.js";
|
|
117
|
+
import "./chunk-UUVG37B4.js";
|
|
114
118
|
import "./chunk-LBMZMYH2.js";
|
|
115
|
-
import "./chunk-
|
|
119
|
+
import "./chunk-33YXPOE3.js";
|
|
116
120
|
import "./chunk-XPLRXC72.js";
|
|
117
|
-
import "./chunk-
|
|
118
|
-
import "./chunk-
|
|
121
|
+
import "./chunk-SROCI7ZU.js";
|
|
122
|
+
import "./chunk-DOOEX22V.js";
|
|
119
123
|
import {
|
|
120
124
|
ProvidersDomainModule
|
|
121
|
-
} from "./chunk-
|
|
125
|
+
} from "./chunk-VQNODYQ4.js";
|
|
122
126
|
import "./chunk-CFGTUFWB.js";
|
|
123
|
-
import "./chunk-
|
|
124
|
-
import "./chunk-4OC57DA6.js";
|
|
125
|
-
import "./chunk-LL4KHSZI.js";
|
|
126
|
-
import "./chunk-4VP4KH3K.js";
|
|
127
|
-
import {
|
|
128
|
-
attributeCommitMessage
|
|
129
|
-
} from "./chunk-VEZEGCGW.js";
|
|
130
|
-
import "./chunk-FQ4SKYE4.js";
|
|
131
|
-
import "./chunk-IKCO5N3L.js";
|
|
132
|
-
import "./chunk-3I7MS7N2.js";
|
|
127
|
+
import "./chunk-JRIO5UD2.js";
|
|
133
128
|
import "./chunk-IHXBNWMM.js";
|
|
134
|
-
import "./chunk-
|
|
129
|
+
import "./chunk-GEYXPTRF.js";
|
|
130
|
+
import {
|
|
131
|
+
readSettings
|
|
132
|
+
} from "./chunk-UHXRNZ2J.js";
|
|
133
|
+
import "./chunk-4DGYLA73.js";
|
|
134
|
+
import "./chunk-LL4KHSZI.js";
|
|
135
135
|
import "./chunk-SST6Z5JA.js";
|
|
136
136
|
import "./chunk-FO5ZOVUY.js";
|
|
137
137
|
import "./chunk-R346GLFC.js";
|
|
138
|
+
import "./chunk-D4MDIG46.js";
|
|
139
|
+
import "./chunk-FQ4SKYE4.js";
|
|
138
140
|
import "./chunk-4ZG3XFUR.js";
|
|
141
|
+
import "./chunk-IKCO5N3L.js";
|
|
142
|
+
import "./chunk-3I7MS7N2.js";
|
|
139
143
|
import "./chunk-FCSXB6T2.js";
|
|
140
144
|
import "./chunk-APJ265NV.js";
|
|
141
145
|
import "./chunk-YXLYO42X.js";
|
|
@@ -144,9 +148,9 @@ import {
|
|
|
144
148
|
} from "./chunk-BNAZZHFG.js";
|
|
145
149
|
import "./chunk-6EJMN2Y3.js";
|
|
146
150
|
import "./chunk-WEPFGWHJ.js";
|
|
147
|
-
import "./chunk-
|
|
151
|
+
import "./chunk-X2KV5FXT.js";
|
|
148
152
|
import "./chunk-ZGVHUX3M.js";
|
|
149
|
-
import "./chunk-
|
|
153
|
+
import "./chunk-OB5HIGJY.js";
|
|
150
154
|
import "./chunk-JVCV3ICN.js";
|
|
151
155
|
import "./chunk-7CR24IG7.js";
|
|
152
156
|
import "./chunk-IWHMRKLL.js";
|
|
@@ -159,48 +163,18 @@ init_esm_shims();
|
|
|
159
163
|
import { randomBytes } from "node:crypto";
|
|
160
164
|
import { readFileSync } from "node:fs";
|
|
161
165
|
import { join } from "node:path";
|
|
162
|
-
|
|
163
|
-
// src/domains/dispatch/fleet-commit-attribution.ts
|
|
164
|
-
init_esm_shims();
|
|
165
|
-
function deriveFleetCommitAttribution(input) {
|
|
166
|
-
const byId = new Map(input.plan.steps.map((step) => [step.id, step]));
|
|
167
|
-
let materiallyAuthored = false;
|
|
168
|
-
let receipt;
|
|
169
|
-
for (const candidate of input.step.commitFrom ?? []) {
|
|
170
|
-
const source = byId.get(candidate);
|
|
171
|
-
const result = input.priorResults.get(candidate);
|
|
172
|
-
if (source?.kind !== "agent" || source.scope !== "workspace" || result?.succeeded !== true || result.integrityValid !== true) {
|
|
173
|
-
continue;
|
|
174
|
-
}
|
|
175
|
-
materiallyAuthored = true;
|
|
176
|
-
if (/^[0-9a-f]{64}$/u.test(result.receiptDigest)) {
|
|
177
|
-
receipt = {
|
|
178
|
-
version: RUN_RECEIPT_INTEGRITY_VERSION,
|
|
179
|
-
algorithm: RUN_RECEIPT_INTEGRITY_ALGORITHM,
|
|
180
|
-
digest: result.receiptDigest,
|
|
181
|
-
integrityValid: true,
|
|
182
|
-
directlyRelevant: true
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
break;
|
|
186
|
-
}
|
|
187
|
-
return {
|
|
188
|
-
materiallyAssisted: materiallyAuthored,
|
|
189
|
-
materiallyAuthored,
|
|
190
|
-
validationSucceeded: input.validationFresh,
|
|
191
|
-
independentReviewPassed: input.independentReviewFresh,
|
|
192
|
-
...receipt === void 0 ? {} : { receipt }
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// src/cli/fleet.ts
|
|
197
166
|
var HELP = `clio-coder fleet <subcommand>
|
|
198
167
|
|
|
199
168
|
Repo-owned fleet contracts and the dispatch status surface.
|
|
200
169
|
|
|
201
170
|
Subcommands:
|
|
202
171
|
list list .clio-coder/fleets/*.md contracts with validation status
|
|
172
|
+
new <name> --from <builtin> copy build-review, build-test, or sdlc into this repository
|
|
173
|
+
validate <name> [--json] run the fleet execution preflight without side effects
|
|
174
|
+
graph <name> [--json] print compiled waves, loops, scopes, and write boundaries
|
|
175
|
+
commands init draft a commented command registry from declared project entries
|
|
203
176
|
run <name> [--var k=v ...] preflight and execute a fleet contract
|
|
177
|
+
[--resume <runId>] replay a completed prefix from a prior run of the same plan
|
|
204
178
|
[--json] emit step receipts as JSON
|
|
205
179
|
status [--json] show running, retrying, and total dispatch state
|
|
206
180
|
drain [--json] deny new execution starts for up to one hour
|
|
@@ -218,6 +192,11 @@ function fail(message) {
|
|
|
218
192
|
`);
|
|
219
193
|
return 2;
|
|
220
194
|
}
|
|
195
|
+
function refuse(message) {
|
|
196
|
+
process.stderr.write(`clio-coder fleet: ${message}
|
|
197
|
+
`);
|
|
198
|
+
return 1;
|
|
199
|
+
}
|
|
221
200
|
function parseVars(args) {
|
|
222
201
|
const vars = {};
|
|
223
202
|
const rest = [];
|
|
@@ -240,28 +219,15 @@ function parseVars(args) {
|
|
|
240
219
|
}
|
|
241
220
|
return { vars, rest };
|
|
242
221
|
}
|
|
243
|
-
function fleetGateCorrelation(subject, decider) {
|
|
244
|
-
const facts = (receipt) => ({
|
|
245
|
-
agentId: receipt.agentId,
|
|
246
|
-
targetId: receipt.targetId,
|
|
247
|
-
wireModelId: receipt.wireModelId,
|
|
248
|
-
runtimeId: receipt.runtimeId,
|
|
249
|
-
nodeId: receipt.node?.id ?? "local"
|
|
250
|
-
});
|
|
251
|
-
const { agent, target, modelFamily, runtime, node, independent } = gateRouteCorrelation(
|
|
252
|
-
facts(subject),
|
|
253
|
-
facts(decider)
|
|
254
|
-
);
|
|
255
|
-
return { agent, target, modelFamily, runtime, node, independent };
|
|
256
|
-
}
|
|
257
|
-
var NO_WORKER_RESERVATION = "fleet-no-worker-reservation";
|
|
258
222
|
function newFleetRootId() {
|
|
259
223
|
return `fleet-${randomBytes(6).toString("hex")}`;
|
|
260
224
|
}
|
|
261
225
|
function renderStep(step) {
|
|
262
226
|
if (step.kind === "code") return `code:${step.command}[${step.scope}]`;
|
|
263
227
|
if (step.kind === "agent") return `${step.agent}[${step.scope}]`;
|
|
264
|
-
|
|
228
|
+
if (step.kind === "gate") return `gate:${step.path}[${step.run}]`;
|
|
229
|
+
if (step.kind === "plan") return `plan:${step.agent}[${step.roster.join(",")}; max ${step.maxTasks}]`;
|
|
230
|
+
const check = step.check.kind === "code" ? `code:${step.check.command}` : step.check.kind === "gate" ? `gate:${step.check.gate}` : step.check.agent;
|
|
265
231
|
return `loop:${step.id}(${check} -> ${step.repair.agent} x${step.maxAttempts})`;
|
|
266
232
|
}
|
|
267
233
|
function listingLine(entry, state, detail) {
|
|
@@ -302,7 +268,11 @@ function contractAgents(contract) {
|
|
|
302
268
|
const agents = [];
|
|
303
269
|
for (const step of contract.steps) {
|
|
304
270
|
if (step.kind === "agent") agents.push({ id: step.id, agent: step.agent, scope: step.scope });
|
|
305
|
-
else if (step.kind === "
|
|
271
|
+
else if (step.kind === "gate") agents.push({ id: step.id, agent: step.agent, scope: "workspace" });
|
|
272
|
+
else if (step.kind === "plan") {
|
|
273
|
+
agents.push({ id: step.id, agent: step.agent, scope: step.scope });
|
|
274
|
+
for (const agent of step.roster) agents.push({ id: `${step.id}.roster`, agent, scope: "readonly" });
|
|
275
|
+
} else if (step.kind === "loop") {
|
|
306
276
|
if (step.check.kind === "agent") {
|
|
307
277
|
agents.push({ id: `${step.id}.check`, agent: step.check.agent, scope: step.check.scope });
|
|
308
278
|
}
|
|
@@ -312,6 +282,28 @@ function contractAgents(contract) {
|
|
|
312
282
|
return agents;
|
|
313
283
|
}
|
|
314
284
|
function preflightFleet(contract, deps) {
|
|
285
|
+
const targets = new Set(deps.settings.targets.map((target) => target.id));
|
|
286
|
+
const profiles = new Set(Object.keys(deps.settings.workers?.profiles ?? {}));
|
|
287
|
+
const checkRoute = (id, route) => {
|
|
288
|
+
if (route.target !== void 0 && !targets.has(route.target))
|
|
289
|
+
return `unknown target '${route.target}' at step '${id}'`;
|
|
290
|
+
if (route.profile !== void 0 && !profiles.has(route.profile))
|
|
291
|
+
return `unknown profile '${route.profile}' at step '${id}'`;
|
|
292
|
+
return null;
|
|
293
|
+
};
|
|
294
|
+
for (const step of contract.steps) {
|
|
295
|
+
if (step.kind === "agent" || step.kind === "gate" || step.kind === "plan") {
|
|
296
|
+
const error2 = checkRoute(step.id, step);
|
|
297
|
+
if (error2 !== null) return error2;
|
|
298
|
+
}
|
|
299
|
+
if (step.kind !== "loop") continue;
|
|
300
|
+
if (step.check.kind === "agent") {
|
|
301
|
+
const error2 = checkRoute(`${step.id}.check`, step.check);
|
|
302
|
+
if (error2 !== null) return error2;
|
|
303
|
+
}
|
|
304
|
+
const error = checkRoute(`${step.id}.repair`, step.repair);
|
|
305
|
+
if (error !== null) return error;
|
|
306
|
+
}
|
|
315
307
|
for (const step of contractAgents(contract)) {
|
|
316
308
|
if (!deps.agents.get(step.agent)) {
|
|
317
309
|
return `unknown agent '${step.agent}' (step '${step.id}' must name a recipe from 'clio-coder agents')`;
|
|
@@ -339,8 +331,12 @@ async function runFleet(args) {
|
|
|
339
331
|
const { vars, rest, error } = parseVars(args);
|
|
340
332
|
if (error !== void 0) return fail(error);
|
|
341
333
|
const json = rest.includes("--json");
|
|
334
|
+
const resumeIndex = rest.indexOf("--resume");
|
|
335
|
+
const resumeId = resumeIndex === -1 ? void 0 : rest[resumeIndex + 1];
|
|
336
|
+
if (resumeIndex !== -1 && (resumeId === void 0 || resumeId.startsWith("-")))
|
|
337
|
+
return fail("--resume requires a run id");
|
|
342
338
|
const name = rest.find((arg) => !arg.startsWith("-"));
|
|
343
|
-
if (!name) return fail("usage: clio-coder fleet run <name> [--var key=value ...] [--json]");
|
|
339
|
+
if (!name) return fail("usage: clio-coder fleet run <name> [--var key=value ...] [--resume <runId>] [--json]");
|
|
344
340
|
let contract;
|
|
345
341
|
let prompt;
|
|
346
342
|
let commands;
|
|
@@ -383,13 +379,17 @@ async function runFleet(args) {
|
|
|
383
379
|
return fail("required domains unavailable (dispatch/agents/safety)");
|
|
384
380
|
}
|
|
385
381
|
const roleFacts = agentRoleFactsResolver((id) => agents.getSpec(id));
|
|
386
|
-
const preflightError = preflightFleet(contract, {
|
|
382
|
+
const preflightError = preflightFleet(contract, {
|
|
383
|
+
agents,
|
|
384
|
+
safety,
|
|
385
|
+
scheduling,
|
|
386
|
+
settings: config?.get() ?? readSettings()
|
|
387
|
+
});
|
|
387
388
|
if (preflightError !== null) {
|
|
388
389
|
await loaded.stop();
|
|
389
390
|
return fail(`preflight failed: ${preflightError}`);
|
|
390
391
|
}
|
|
391
392
|
const fleetRootId = newFleetRootId();
|
|
392
|
-
let planOutcome;
|
|
393
393
|
let plan;
|
|
394
394
|
try {
|
|
395
395
|
plan = compileFleetExecutionPlan({
|
|
@@ -408,9 +408,7 @@ async function runFleet(args) {
|
|
|
408
408
|
return {
|
|
409
409
|
requestedAuthority: spec.capabilityClass,
|
|
410
410
|
approvedAuthority: spec.capabilityClass,
|
|
411
|
-
|
|
412
|
-
// postcondition is the gate result contract, not its recipe's.
|
|
413
|
-
expectedResultContract: context.gateRole === "reviewer" ? "verifier-report" : spec.resultContract.kind,
|
|
411
|
+
expectedResultContract: context.planRole === true ? "delegation-plan" : context.gateAuthorRole === true ? "artifact-report" : context.gateRole === "reviewer" ? "verifier-report" : spec.resultContract.kind,
|
|
414
412
|
executionRole: withAttemptRole(requestRole, context.attempt)
|
|
415
413
|
};
|
|
416
414
|
}
|
|
@@ -425,233 +423,96 @@ async function runFleet(args) {
|
|
|
425
423
|
await loaded.stop();
|
|
426
424
|
return fail(`preflight failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
427
425
|
}
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
426
|
+
let resume;
|
|
427
|
+
if (resumeId !== void 0) {
|
|
428
|
+
const record = readFleetRun(resumeId);
|
|
429
|
+
if (record === null) {
|
|
430
|
+
await loaded.stop();
|
|
431
|
+
return refuse(`resume run '${resumeId}' was not found in the durable fleet ledger`);
|
|
432
|
+
}
|
|
433
|
+
const planned = planFleetResume(record, plan, contract, vars);
|
|
434
|
+
if (!planned.ok) {
|
|
435
|
+
if (planned.reason === "fleet-name") {
|
|
436
|
+
await loaded.stop();
|
|
437
|
+
return refuse(`resume run '${resumeId}' belongs to fleet '${planned.priorFleet}', not '${planned.currentFleet}'`);
|
|
438
|
+
}
|
|
439
|
+
if (planned.reason === "vars") {
|
|
440
|
+
await loaded.stop();
|
|
441
|
+
return refuse(`resume run '${resumeId}' used different --var values`);
|
|
442
|
+
}
|
|
443
|
+
process.stderr.write(
|
|
444
|
+
`clio-coder fleet: resume plan hash differs: prior=${planned.priorHash} current=${planned.currentHash}
|
|
445
|
+
`
|
|
446
|
+
);
|
|
447
|
+
for (const entry of planned.diff) {
|
|
448
|
+
process.stderr.write(` step ${entry.index + 1}: ${entry.priorId} -> ${entry.currentId}
|
|
449
|
+
`);
|
|
450
|
+
process.stderr.write(` prior: ${JSON.stringify(entry.prior)}
|
|
436
451
|
`);
|
|
452
|
+
process.stderr.write(` current: ${JSON.stringify(entry.current)}
|
|
453
|
+
`);
|
|
454
|
+
}
|
|
455
|
+
await loaded.stop();
|
|
456
|
+
return 1;
|
|
437
457
|
}
|
|
438
|
-
|
|
458
|
+
resume = { record, replayed: planned.replayed };
|
|
459
|
+
}
|
|
439
460
|
process.stderr.write(
|
|
440
461
|
`fleet ${contract.name}: root=${fleetRootId} plan=${plan.hash} steps=${plan.steps.length} loops=${plan.loops.length}
|
|
441
462
|
`
|
|
442
463
|
);
|
|
443
|
-
|
|
444
|
-
const receiptsByStep = /* @__PURE__ */ new Map();
|
|
445
|
-
const planStep = (stepId) => plan.steps.find((entry) => entry.id === stepId);
|
|
446
|
-
const attributionEnabled = config?.get().attribution.gitCommits ?? true;
|
|
447
|
-
let validationFresh = false;
|
|
448
|
-
let independentReviewFresh = false;
|
|
449
|
-
const commitMessageFor = (step, priorResults) => {
|
|
450
|
-
for (const candidate of step.commitFrom ?? []) {
|
|
451
|
-
const source = planStep(candidate);
|
|
452
|
-
const result = priorResults.get(candidate);
|
|
453
|
-
if (source === void 0 || source.kind !== "agent" || result === void 0) continue;
|
|
454
|
-
const resultContract = agents.getSpec(source.agentId)?.resultContract ?? null;
|
|
455
|
-
if (resultContract === null) continue;
|
|
456
|
-
const authored = resultContractAuthorship(resultContract, result.output);
|
|
457
|
-
if (authored.commitMessage !== null) return authored.commitMessage;
|
|
458
|
-
if (authored.summary !== null) return `clio(${fleetRootId}): ${authored.summary}`;
|
|
459
|
-
}
|
|
460
|
-
return `clio(${fleetRootId}): ${contract.name} ${step.id}`;
|
|
461
|
-
};
|
|
464
|
+
let outcome;
|
|
462
465
|
try {
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
const reservation = dispatch.reservations?.prepare({
|
|
480
|
-
topology: "parallel",
|
|
481
|
-
tasks: admissions.map((admission) => ({
|
|
482
|
-
memberId: admission.step.id,
|
|
483
|
-
wave: plan.waves.findIndex((wave) => wave.includes(admission.step.id)),
|
|
484
|
-
resolution: dispatch.preview?.({
|
|
485
|
-
agentId: admission.step.agentId,
|
|
486
|
-
executionRole: admission.step.executionRole,
|
|
487
|
-
task: admission.step.task
|
|
488
|
-
})
|
|
489
|
-
}))
|
|
490
|
-
});
|
|
491
|
-
if (!reservation) throw new Error("fleet whole-plan reservation is unavailable");
|
|
492
|
-
return { ownerId: reservation.ownerId };
|
|
493
|
-
},
|
|
494
|
-
async run(step, handoffs, reservation, ledger) {
|
|
495
|
-
const attempt = step.loop?.role === "repair" ? step.loop.attempt : 0;
|
|
496
|
-
const request = {
|
|
497
|
-
agentId: step.agentId,
|
|
498
|
-
executionRole: step.executionRole,
|
|
499
|
-
task: step.task,
|
|
500
|
-
predecessorHandoffs: handoffs,
|
|
501
|
-
requestOrigin: "user",
|
|
502
|
-
lineage: { parentRunId: fleetRootId, rootRunId: fleetRootId, attempt, depth: 1 },
|
|
503
|
-
reservation,
|
|
504
|
-
...ledger !== void 0 ? { ledger } : {},
|
|
505
|
-
...step.loop?.role === "check" ? {
|
|
506
|
-
gate: {
|
|
507
|
-
role: "reviewer",
|
|
508
|
-
group: `${fleetRootId}:${step.loop.loopId}`,
|
|
509
|
-
cycle: step.loop.attempt,
|
|
510
|
-
subjects: handoffs.map((handoff) => ({
|
|
511
|
-
runId: handoff.terminalRunId,
|
|
512
|
-
digest: handoff.receiptDigest
|
|
513
|
-
}))
|
|
514
|
-
}
|
|
515
|
-
} : {},
|
|
516
|
-
...step.scope === "readonly" ? { autonomy: "read-only" } : {}
|
|
517
|
-
};
|
|
518
|
-
const handle = await dispatch.dispatch(request);
|
|
519
|
-
void (async () => {
|
|
520
|
-
for await (const _event of handle.events) {
|
|
521
|
-
}
|
|
522
|
-
})().catch(() => {
|
|
523
|
-
});
|
|
524
|
-
return {
|
|
525
|
-
assignmentId: handle.runId,
|
|
526
|
-
result: handle.finalPromise.then((receipt) => {
|
|
527
|
-
if (step.scope === "workspace") {
|
|
528
|
-
validationFresh = false;
|
|
529
|
-
independentReviewFresh = false;
|
|
530
|
-
}
|
|
531
|
-
receipts.push(receipt);
|
|
532
|
-
receiptsByStep.set(step.id, receipt);
|
|
533
|
-
const envelope = dispatch.getRun(receipt.runId);
|
|
534
|
-
const integrityValid = envelope !== null && verifyReceiptIntegrity(receipt, envelope).ok;
|
|
535
|
-
const succeeded = receipt.exitCode === 0 && (receipt.outcome === void 0 || receipt.outcome === "succeeded");
|
|
536
|
-
if (json) process.stdout.write(`${JSON.stringify(receipt)}
|
|
537
|
-
`);
|
|
538
|
-
else
|
|
539
|
-
process.stdout.write(
|
|
540
|
-
`step ${step.id} ${step.agentId}: ${succeeded ? "succeeded" : "failed"} assignment=${handle.runId} terminal-run=${receipt.runId} cost=$${receipt.costUsd.toFixed(4)}
|
|
466
|
+
outcome = await executeFleetRun({
|
|
467
|
+
plan,
|
|
468
|
+
contractName: contract.name,
|
|
469
|
+
commands,
|
|
470
|
+
workspaceRoot: process.cwd(),
|
|
471
|
+
fleetRootId,
|
|
472
|
+
dispatch,
|
|
473
|
+
agents: { getSpec: (agentId) => agents.getSpec(agentId) },
|
|
474
|
+
attributionEnabled: config?.get().attribution.gitCommits ?? true,
|
|
475
|
+
vars,
|
|
476
|
+
...resume !== void 0 ? { resume } : {},
|
|
477
|
+
onStepSettled(step) {
|
|
478
|
+
if (step.replayed === true && step.result !== void 0) {
|
|
479
|
+
if (json)
|
|
480
|
+
process.stdout.write(
|
|
481
|
+
`${JSON.stringify({ stepId: step.stepId, status: "replayed", receipt: { runId: step.result.terminalRunId, digest: step.result.receiptDigest } })}
|
|
541
482
|
`
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
succeeded,
|
|
550
|
-
integrityValid
|
|
551
|
-
};
|
|
552
|
-
})
|
|
553
|
-
};
|
|
554
|
-
},
|
|
555
|
-
async runCode(step, _handoffs, signal, priorResults) {
|
|
556
|
-
const command = commands?.commands.get(step.commandId);
|
|
557
|
-
if (command === void 0) throw new Error(`fleet code step '${step.id}' has no registered command`);
|
|
558
|
-
const isCommit = step.commitFrom !== void 0;
|
|
559
|
-
const evidence = isCommit ? deriveFleetCommitAttribution({
|
|
560
|
-
plan,
|
|
561
|
-
step,
|
|
562
|
-
priorResults,
|
|
563
|
-
validationFresh,
|
|
564
|
-
independentReviewFresh
|
|
565
|
-
}) : null;
|
|
566
|
-
if (!isCommit && step.scope === "workspace" && step.verification !== true) {
|
|
567
|
-
validationFresh = false;
|
|
568
|
-
independentReviewFresh = false;
|
|
483
|
+
);
|
|
484
|
+
else
|
|
485
|
+
process.stdout.write(
|
|
486
|
+
`step ${step.stepId}: replayed terminal-run=${step.result.terminalRunId} receipt=${step.result.receiptDigest}
|
|
487
|
+
`
|
|
488
|
+
);
|
|
489
|
+
return;
|
|
569
490
|
}
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
stepId: step.id,
|
|
573
|
-
command,
|
|
574
|
-
workspaceRoot: process.cwd(),
|
|
575
|
-
artifactDir: codeStepDir(fleetRootId),
|
|
576
|
-
signal,
|
|
577
|
-
...isCommit && evidence !== null && originalMessage !== null ? {
|
|
578
|
-
substitutions: {
|
|
579
|
-
commitMessage: attributeCommitMessage(originalMessage, evidence, attributionEnabled)
|
|
580
|
-
},
|
|
581
|
-
requireWorkspaceChanges: true,
|
|
582
|
-
commitAttribution: { enabled: attributionEnabled, evidence }
|
|
583
|
-
} : {}
|
|
584
|
-
});
|
|
585
|
-
if (step.verification === true) validationFresh = outcome.report.passed;
|
|
586
|
-
const recordPath = await writeCodeStepRecord(fleetRootId, outcome.record);
|
|
587
|
-
if (json) process.stdout.write(`${JSON.stringify({ codeStep: outcome.record })}
|
|
491
|
+
if (step.receipt !== void 0) {
|
|
492
|
+
if (json) process.stdout.write(`${JSON.stringify(step.receipt)}
|
|
588
493
|
`);
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
494
|
+
else
|
|
495
|
+
process.stdout.write(
|
|
496
|
+
`step ${step.stepId} ${step.agentId}: ${step.succeeded ? "succeeded" : "failed"}${step.failureReason !== void 0 ? ` reason=${step.failureReason}` : ""} assignment=${step.assignmentId} terminal-run=${step.terminalRunId} cost=$${step.costUsd.toFixed(4)}
|
|
592
497
|
`
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
stepId: step.id,
|
|
596
|
-
assignmentId: outcome.record.runId,
|
|
597
|
-
terminalRunId: outcome.record.runId,
|
|
598
|
-
receiptDigest: outcome.record.reportDigest,
|
|
599
|
-
output: outcome.output,
|
|
600
|
-
succeeded: outcome.report.passed,
|
|
601
|
-
// The runner authored this report itself, so its provenance is
|
|
602
|
-
// valid by construction; only the command's verdict can be red.
|
|
603
|
-
integrityValid: true
|
|
604
|
-
};
|
|
605
|
-
},
|
|
606
|
-
async decideLoop({ loop, step, attempt, terminalAttempt, result }) {
|
|
607
|
-
const decider = receiptsByStep.get(step.id);
|
|
608
|
-
const ancestors = executionPlanAncestors(plan, step.id);
|
|
609
|
-
let subject;
|
|
610
|
-
for (const [stepId, receipt] of receiptsByStep) {
|
|
611
|
-
if (ancestors.has(stepId)) subject = receipt;
|
|
498
|
+
);
|
|
499
|
+
return;
|
|
612
500
|
}
|
|
613
|
-
if (
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
}
|
|
620
|
-
const correlation = fleetGateCorrelation(subject, decider);
|
|
621
|
-
const decided = decideReviewGate({
|
|
622
|
-
group: `${fleetRootId}:${loop.id}`,
|
|
623
|
-
cycle: attempt,
|
|
624
|
-
terminalCycle: terminalAttempt,
|
|
625
|
-
subjects: [{ runId: subject.runId, digest: subject.integrity.digest }],
|
|
626
|
-
decider: { runId: decider.runId, digest: decider.integrity.digest },
|
|
627
|
-
correlation,
|
|
628
|
-
output: result.output
|
|
629
|
-
});
|
|
630
|
-
independentReviewFresh = decided.verdict === "pass" && correlation.independent;
|
|
631
|
-
const staged = stagePendingGateDecision(decided.draft);
|
|
632
|
-
const { path: decisionPath } = materializePendingGateDecision(staged);
|
|
633
|
-
if (!json) {
|
|
634
|
-
process.stdout.write(
|
|
635
|
-
`loop ${loop.id} cycle ${attempt}: ${decided.draft.outcome}${decided.draft.detail === void 0 ? "" : ` (${decided.draft.detail})`} decision=${decisionPath}
|
|
501
|
+
if (step.codeStep !== void 0) {
|
|
502
|
+
if (json) process.stdout.write(`${JSON.stringify({ codeStep: step.codeStep })}
|
|
503
|
+
`);
|
|
504
|
+
else
|
|
505
|
+
process.stdout.write(
|
|
506
|
+
`step ${step.stepId} code:${step.commandId}: ${step.succeeded ? "passed" : "failed"} exit=${step.codeStep.exitCode} ${step.codeStep.durationMs}ms record=${step.recordPath}
|
|
636
507
|
`
|
|
637
|
-
|
|
508
|
+
);
|
|
638
509
|
}
|
|
639
|
-
return {
|
|
640
|
-
resolved: decided.verdict === "pass",
|
|
641
|
-
findings: decided.findings,
|
|
642
|
-
needsDecision: decided.needsDecision
|
|
643
|
-
};
|
|
644
|
-
},
|
|
645
|
-
beginWriteBoundary: (window, stepIds) => boundaryEnforcer.begin(window, stepIds),
|
|
646
|
-
verifyWriteBoundary: (window, stepIds) => boundaryEnforcer.verify(window, stepIds),
|
|
647
|
-
cancel: (assignmentId) => dispatch.abort(assignmentId),
|
|
648
|
-
release: (ownerId) => {
|
|
649
|
-
if (ownerId === NO_WORKER_RESERVATION) return;
|
|
650
|
-
dispatch.reservations?.rollbackUnconsumed(ownerId);
|
|
651
510
|
},
|
|
652
|
-
|
|
653
|
-
if (
|
|
654
|
-
|
|
511
|
+
onNotice(text, kind) {
|
|
512
|
+
if (kind === "write-boundary") process.stderr.write(`${text}
|
|
513
|
+
`);
|
|
514
|
+
else if (kind === "gate" && !json) process.stdout.write(`${text}
|
|
515
|
+
`);
|
|
655
516
|
}
|
|
656
517
|
});
|
|
657
518
|
} catch (err) {
|
|
@@ -661,53 +522,45 @@ async function runFleet(args) {
|
|
|
661
522
|
}
|
|
662
523
|
await dispatch.drain();
|
|
663
524
|
await loaded.stop();
|
|
664
|
-
const required = plan.steps.filter((step) => step.loop === void 0 && !planOutcome.unneeded.includes(step.id));
|
|
665
|
-
const failedLoops = planOutcome.loops.filter((loop) => !loop.resolved);
|
|
666
|
-
const succeededSteps = required.filter((step) => planOutcome.results.get(step.id)?.succeeded === true).length;
|
|
667
|
-
const resolvedLoops = planOutcome.loops.length - failedLoops.length;
|
|
668
525
|
if (json) {
|
|
669
526
|
process.stdout.write(
|
|
670
527
|
`${JSON.stringify({
|
|
671
528
|
fleet: contract.name,
|
|
672
529
|
rootId: fleetRootId,
|
|
673
530
|
planHash: plan.hash,
|
|
674
|
-
loops:
|
|
675
|
-
revalidated:
|
|
676
|
-
unneeded:
|
|
677
|
-
skipped:
|
|
678
|
-
needsDecision:
|
|
679
|
-
writeBoundaries:
|
|
531
|
+
loops: outcome.result.loops,
|
|
532
|
+
revalidated: outcome.result.revalidated,
|
|
533
|
+
unneeded: outcome.result.unneeded,
|
|
534
|
+
skipped: outcome.result.skipped,
|
|
535
|
+
needsDecision: outcome.result.needsDecision,
|
|
536
|
+
writeBoundaries: outcome.result.writeBoundaries
|
|
680
537
|
})}
|
|
681
538
|
`
|
|
682
539
|
);
|
|
683
540
|
} else {
|
|
684
|
-
const spentUsd = receipts.reduce((sum, receipt) => sum + receipt.costUsd, 0);
|
|
685
541
|
process.stdout.write(
|
|
686
|
-
`fleet ${contract.name}: ${
|
|
542
|
+
`fleet ${contract.name}: ${outcome.succeededStepCount}/${outcome.requiredStepCount} steps succeeded, ${outcome.resolvedLoopCount}/${outcome.result.loops.length} loops resolved, total cost $${outcome.totalCostUsd.toFixed(4)}
|
|
687
543
|
`
|
|
688
544
|
);
|
|
689
|
-
for (const loop of
|
|
545
|
+
for (const loop of outcome.result.loops)
|
|
690
546
|
process.stdout.write(
|
|
691
547
|
` loop ${loop.loopId}: ${loop.reason} after ${loop.attempts} verification(s) and ${loop.repairs} repair(s)
|
|
692
548
|
`
|
|
693
549
|
);
|
|
694
|
-
|
|
695
|
-
if (planOutcome.revalidated.length > 0) {
|
|
550
|
+
if (outcome.result.revalidated.length > 0)
|
|
696
551
|
process.stdout.write(
|
|
697
|
-
` staleness: re-ran ${
|
|
552
|
+
` staleness: re-ran ${outcome.result.revalidated.join(", ")} because a workspace step landed after the last green
|
|
698
553
|
`
|
|
699
554
|
);
|
|
700
|
-
}
|
|
701
|
-
for (const message of planOutcome.needsDecision) process.stdout.write(` needs operator decision: ${message}
|
|
555
|
+
for (const message of outcome.result.needsDecision) process.stdout.write(` needs operator decision: ${message}
|
|
702
556
|
`);
|
|
703
|
-
for (const boundary of
|
|
557
|
+
for (const boundary of outcome.result.writeBoundaries) {
|
|
704
558
|
if (!boundary.violated) continue;
|
|
705
559
|
process.stdout.write(` write boundary ${boundary.window}: ${boundary.detail ?? WRITE_BOUNDARY_VIOLATION_REASON}
|
|
706
560
|
`);
|
|
707
561
|
}
|
|
708
562
|
}
|
|
709
|
-
|
|
710
|
-
return cleanRun ? 0 : 1;
|
|
563
|
+
return outcome.cleanRun ? 0 : 1;
|
|
711
564
|
}
|
|
712
565
|
function isProcessAlive(pid) {
|
|
713
566
|
if (pid === null || !Number.isFinite(pid) || pid <= 0) return false;
|
|
@@ -757,6 +610,7 @@ function statusSnapshot() {
|
|
|
757
610
|
return {
|
|
758
611
|
runId: row.id,
|
|
759
612
|
agentId: row.agentId,
|
|
613
|
+
budget: row.budget ?? null,
|
|
760
614
|
runtimeKind: row.runtimeKind,
|
|
761
615
|
outcomePhase: row.status,
|
|
762
616
|
heartbeat: rowHeartbeat(row),
|
|
@@ -814,6 +668,17 @@ function runStatus(args) {
|
|
|
814
668
|
` ${row.runId} ${row.agentId} node=${row.node} ${row.heartbeat} attempt=${lineage.attempt} depth=${lineage.depth} ${Math.round(row.elapsedMs / 1e3)}s $${row.costUsd.toFixed(4)}
|
|
815
669
|
`
|
|
816
670
|
);
|
|
671
|
+
const budget = row.budget;
|
|
672
|
+
if (budget !== null) {
|
|
673
|
+
process.stdout.write(` recipe policy: ${formatBudgetPolicy(budget)}
|
|
674
|
+
`);
|
|
675
|
+
process.stdout.write(` requested envelope: ${formatBudgetRequest(budget)}
|
|
676
|
+
`);
|
|
677
|
+
process.stdout.write(` effective envelope: ${formatEffectiveBudget(budget)}
|
|
678
|
+
`);
|
|
679
|
+
process.stdout.write(` clamp or escalation reason: ${formatBudgetReasons(budget)}
|
|
680
|
+
`);
|
|
681
|
+
}
|
|
817
682
|
}
|
|
818
683
|
}
|
|
819
684
|
if (snapshot.retrying.length === 0) {
|
|
@@ -865,6 +730,14 @@ async function runFleetCommand(args) {
|
|
|
865
730
|
switch (sub) {
|
|
866
731
|
case "list":
|
|
867
732
|
return runList(args.slice(1));
|
|
733
|
+
case "new":
|
|
734
|
+
return (await import("./fleet-new-RDVJLHHH.js")).runFleetNew(args.slice(1));
|
|
735
|
+
case "validate":
|
|
736
|
+
return (await import("./fleet-validate-BIYREGIK.js")).runFleetValidate(args.slice(1));
|
|
737
|
+
case "graph":
|
|
738
|
+
return (await import("./fleet-graph-Y6HPXIVF.js")).runFleetGraph(args.slice(1));
|
|
739
|
+
case "commands":
|
|
740
|
+
return (await import("./fleet-commands-ZFIWZSB3.js")).runFleetCommands(args.slice(1));
|
|
868
741
|
case "run":
|
|
869
742
|
return runFleet(args.slice(1));
|
|
870
743
|
case "status":
|
|
@@ -884,4 +757,4 @@ export {
|
|
|
884
757
|
runFleetCommand,
|
|
885
758
|
statusSnapshot
|
|
886
759
|
};
|
|
887
|
-
//# sourceMappingURL=fleet-
|
|
760
|
+
//# sourceMappingURL=fleet-BDKYJFCP.js.map
|