@iowarp/clio-coder 0.3.7 → 0.3.9
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 +80 -0
- package/README.md +13 -4
- package/dist/{acp-SK4MD6MM.js → acp-7LOELQFP.js} +13 -13
- package/dist/{agents-2FN2K6ME.js → agents-FIBG2SHA.js} +41 -37
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-QIYZWM5I.js → auth-OI4LIH2I.js} +31 -24
- package/dist/builtins-AD25UL3C.js +17 -0
- package/dist/{chunk-5FR74PWO.js → chunk-2JDWVJND.js} +2 -2
- package/dist/chunk-3DPEIQKN.js +113 -0
- package/dist/{chunk-EOOQZZDE.js → chunk-3DUR4WUA.js} +19 -19
- package/dist/{chunk-WHJYKASB.js → chunk-3MRC2YSQ.js} +2 -2
- package/dist/{chunk-EBEFWSGL.js → chunk-3UUY7R3Z.js} +14 -10
- package/dist/{chunk-LADCF22A.js → chunk-3V5AYSEQ.js} +113 -54
- package/dist/{chunk-BMWK7ZIZ.js → chunk-465CC7FK.js} +16 -13
- package/dist/{chunk-5WIGXA4T.js → chunk-47CMYGET.js} +111 -4
- package/dist/{chunk-CEYBNUGC.js → chunk-4H6ULJ3H.js} +378 -36
- package/dist/{chunk-YTYFXUI3.js → chunk-4LJX2PUC.js} +9 -9
- package/dist/{chunk-DOOEX22V.js → chunk-56KB5IJP.js} +5 -5
- package/dist/{chunk-SPULKLCF.js → chunk-5DQRIYDZ.js} +2 -2
- package/dist/{chunk-TSHXZTOQ.js → chunk-5HFBWUMU.js} +23 -11
- package/dist/{chunk-5UJ6ECTS.js → chunk-5PVQ4SRS.js} +80 -8
- package/dist/{chunk-ZWLZP4ZT.js → chunk-5QKCQQ3E.js} +359 -17
- package/dist/{chunk-6M7VS3J3.js → chunk-5T7RBWN2.js} +111 -5
- package/dist/chunk-774ILSRL.js +172 -0
- package/dist/chunk-7C6RYZGQ.js +391 -0
- package/dist/{chunk-GH5622CP.js → chunk-A2NJGIB3.js} +2 -2
- package/dist/{chunk-C4JBQ5SR.js → chunk-AD7Y7STJ.js} +6 -6
- package/dist/{chunk-GEYXPTRF.js → chunk-AEYBF3TB.js} +33 -12
- package/dist/{chunk-2SFS6XQE.js → chunk-AMKHQW3C.js} +3 -2
- package/dist/{chunk-D4MDIG46.js → chunk-B5CSFE7B.js} +7 -7
- package/dist/{chunk-MXI6J5JF.js → chunk-B5XRQOLB.js} +10 -10
- package/dist/{chunk-X2KV5FXT.js → chunk-BVDVID7E.js} +2 -2
- package/dist/{chunk-JNXPYBB4.js → chunk-CA42X6KT.js} +3 -3
- package/dist/{chunk-VREKEFLL.js → chunk-D73KXYPF.js} +3 -3
- package/dist/{chunk-JTSEDYVQ.js → chunk-DG4M6ZUE.js} +7 -7
- package/dist/{chunk-DQA7QLMD.js → chunk-EBOC7MT3.js} +10 -25
- package/dist/{chunk-KZ2H5X4G.js → chunk-ECUO3KDP.js} +129 -14
- package/dist/{chunk-JRIO5UD2.js → chunk-EQ63NRB7.js} +5 -5
- package/dist/{chunk-YD734TPH.js → chunk-FALJGAWU.js} +2 -2
- package/dist/{chunk-GWS3VEIW.js → chunk-FWDFM5ZU.js} +24 -3
- package/dist/{chunk-XEGB6BCN.js → chunk-GAYUJ7LE.js} +68 -14
- package/dist/{chunk-UND3GU2L.js → chunk-H7IXIC72.js} +2 -2
- package/dist/{chunk-IR4CFBFN.js → chunk-HAY4ZE2P.js} +12 -12
- package/dist/{chunk-UVDSQ6LW.js → chunk-HCBCAYZU.js} +74 -147
- package/dist/{chunk-4DWFMQDR.js → chunk-HJB5IUKP.js} +89 -145
- package/dist/{chunk-M4AKACEO.js → chunk-HKO36JWF.js} +33 -5
- package/dist/{chunk-KCMKRQX4.js → chunk-HPCTNZM2.js} +45 -82
- package/dist/{chunk-465YSENW.js → chunk-IFBNV6H6.js} +3 -3
- package/dist/{chunk-FJ3H4MN5.js → chunk-IHKBWSXF.js} +2 -2
- package/dist/chunk-JEQQR47K.js +3025 -0
- package/dist/{chunk-FO5ZOVUY.js → chunk-KV2AOLDF.js} +27 -7
- package/dist/chunk-LU7P4LHA.js +33 -0
- package/dist/{chunk-6TUKSZVF.js → chunk-LXPJXFM5.js} +11 -11
- package/dist/{chunk-VQNODYQ4.js → chunk-MIX5N5AC.js} +488 -3668
- package/dist/chunk-MLOK6ZOS.js +2888 -0
- package/dist/{chunk-ZZMN5OM4.js → chunk-MV2VUEJC.js} +2 -2
- package/dist/{chunk-MVVUPGPW.js → chunk-MXHC5QYU.js} +6 -6
- package/dist/{chunk-OBMAI2DP.js → chunk-N3PBVRTZ.js} +12 -388
- package/dist/{chunk-WJHBC77E.js → chunk-N5XKWMDW.js} +17 -7
- package/dist/{chunk-5C3AQNDW.js → chunk-NNNWO6F2.js} +124 -36
- package/dist/{chunk-UFQ3F4FW.js → chunk-NQ6UCCOD.js} +4 -4
- package/dist/chunk-NUGM5KR6.js +165 -0
- package/dist/{chunk-DMD2AGVS.js → chunk-NZU6YDNV.js} +20 -18
- package/dist/{chunk-WHGPSPT5.js → chunk-O6I4CIEU.js} +151 -13
- package/dist/{chunk-XN3L4EYL.js → chunk-OEDBCISO.js} +2 -2
- package/dist/{chunk-PD3MESLB.js → chunk-P3JGPQFL.js} +4 -4
- package/dist/{chunk-UHXRNZ2J.js → chunk-PNY46YEY.js} +23 -6
- package/dist/{chunk-THKY7CD7.js → chunk-PZ4I4JE2.js} +134 -29
- package/dist/{chunk-SROCI7ZU.js → chunk-QQ7EKM72.js} +5 -5
- package/dist/{chunk-QCTRSGHQ.js → chunk-R7LNVMCS.js} +91 -53
- package/dist/{chunk-GOXNB3AO.js → chunk-RAPCMZL4.js} +75 -4
- package/dist/chunk-RKKLTLYB.js +45 -0
- package/dist/{chunk-OB5HIGJY.js → chunk-RKRLDWD3.js} +4 -1
- package/dist/{chunk-DJNLUABN.js → chunk-S4COXYBG.js} +588 -32
- package/dist/{chunk-3HAPLH5M.js → chunk-T3Z6VAAF.js} +172 -11
- package/dist/{chunk-FOT2FX5J.js → chunk-TD7UE2L5.js} +12 -10
- package/dist/{chunk-UUANF5CR.js → chunk-TEO2TLVN.js} +856 -967
- package/dist/{chunk-FCSXB6T2.js → chunk-UOSL25KY.js} +14 -2
- package/dist/{chunk-EELBMBT6.js → chunk-VKBMFOYV.js} +74 -15
- package/dist/chunk-VO2LKSTM.js +165 -0
- package/dist/{chunk-5C77SEEY.js → chunk-VPTUJU4P.js} +3 -3
- package/dist/{chunk-WEH5XRJQ.js → chunk-WIE7ZOSW.js} +2 -2
- package/dist/{chunk-J7PIKKWC.js → chunk-WXCJ7VME.js} +8 -8
- package/dist/{chunk-4DGYLA73.js → chunk-XDOQXGFO.js} +22 -7
- package/dist/{chunk-PPAMZ32Z.js → chunk-XK56QHLX.js} +6 -1
- package/dist/{chunk-AB4XIIVB.js → chunk-YKOFT37S.js} +6 -6
- package/dist/chunk-YSEHGPCT.js +127 -0
- package/dist/{chunk-HFSBBKSQ.js → chunk-YW7UVM5V.js} +138 -3
- package/dist/cli/index.js +32 -32
- package/dist/{clio-WBVQEBKO.js → clio-LT5V7SSZ.js} +9 -9
- package/dist/{code-nav-FGGFIE7L.js → code-nav-LMW275PA.js} +5 -5
- package/dist/codewiki/build-worker.js +4 -4
- package/dist/{components-F7OEATSO.js → components-ZFA3SAER.js} +8 -8
- package/dist/{config-TRBL3RCF.js → config-RXS5T3JT.js} +98 -65
- package/dist/{configure-OLCVPHNM.js → configure-2WYWSCSD.js} +26 -22
- package/dist/{context-MJIJ6GOX.js → context-I3BTOTCS.js} +12 -12
- package/dist/{context-XEWE3MOJ.js → context-MVOORGMF.js} +54 -47
- package/dist/{context-WFPKQSM6.js → context-PALKKQYL.js} +28 -28
- package/dist/{context-clear-KNOS2JPB.js → context-clear-N2WOYZ2K.js} +53 -46
- package/dist/{context-index-SSR5ECNE.js → context-index-HNG3MOME.js} +6 -6
- package/dist/{context-working-set-EUXAZI6N.js → context-working-set-MIEVECVZ.js} +17 -18
- package/dist/{dispatch-runner-B7MTOVKL.js → dispatch-runner-VVA4SRRH.js} +90 -61
- package/dist/{docs-FLJTIDSE.js → docs-7LQ23DLM.js} +8 -8
- package/dist/doctor-TWBWFK5V.js +165 -0
- package/dist/eval-IJ5VEZDJ.js +4483 -0
- package/dist/{evidence-JZNBUOQZ.js → evidence-L5APPXNV.js} +68 -61
- package/dist/{evolve-FJVC4KKI.js → evolve-RGNKFJ52.js} +47 -40
- package/dist/{extensions-IQL36S7K.js → extensions-7WYWUX5A.js} +13 -7
- package/dist/{fleet-BDKYJFCP.js → fleet-6CNVBZZP.js} +113 -76
- package/dist/{fleet-commands-ZFIWZSB3.js → fleet-commands-L2SXSYEI.js} +10 -10
- package/dist/{fleet-graph-Y6HPXIVF.js → fleet-graph-2J3OOIPO.js} +17 -15
- package/dist/{fleet-preflight-BHSNPBMH.js → fleet-preflight-CZRJ4JP5.js} +5 -6
- package/dist/{fleet-validate-BIYREGIK.js → fleet-validate-C5RI6DP7.js} +20 -19
- package/dist/{init-LQUB5COQ.js → init-VBN2ACVA.js} +70 -63
- package/dist/{library-NJAHIGG4.js → library-JHGUMLY2.js} +22 -20
- package/dist/{memory-OG6HOYKM.js → memory-K4OQIYWG.js} +49 -42
- package/dist/{models-5ZG5XY7J.js → models-2NCZUWDD.js} +35 -29
- package/dist/{monitor-TJ7AMTGB.js → monitor-MMVTJABD.js} +64 -45
- package/dist/{orchestrator-WZYB54DM.js → orchestrator-ZKBPCHW6.js} +1971 -520
- package/dist/{paths-XUC7GS6E.js → paths-DBXMZMDU.js} +5 -5
- package/dist/registry-LG64LTF4.js +11 -0
- package/dist/{reset-PXQT45IY.js → reset-DD5JGOY3.js} +11 -11
- package/dist/{run-FQ74YF62.js → run-QEGNX7FL.js} +89 -83
- package/dist/{share-FW7SVCL3.js → share-JKD3BQMW.js} +20 -18
- package/dist/{skills-7E7IRB3R.js → skills-LMQIKDOZ.js} +23 -21
- package/dist/{skills-eval-LI75W6OK.js → skills-eval-I7X2774U.js} +59 -52
- package/dist/{steer-GGWFUJUD.js → steer-CF5TDANS.js} +3 -3
- package/dist/support-I7LOJLIF.js +38 -0
- package/dist/{targets-4CIFKCTW.js → targets-RUSR6B5Z.js} +77 -42
- package/dist/{terminal-lease-WUZY7ZV5.js → terminal-lease-QYVORFR4.js} +6 -4
- package/dist/{trace-PNCASAXC.js → trace-ODOQIVIW.js} +61 -6
- package/dist/{uninstall-7FV7IP4E.js → uninstall-ZJF5H5ZN.js} +8 -8
- package/dist/{upgrade-K2HVIVMQ.js → upgrade-XANW3FXB.js} +29 -26
- package/dist/{usage-GTZELZQX.js → usage-4H7ZRXQT.js} +110 -61
- package/dist/{verifiers-RLAHT27O.js → verifiers-UZXNBZEB.js} +13 -13
- package/dist/{verify-BX3BRKH5.js → verify-BVKWTNDL.js} +9 -9
- package/dist/{wiki-generate-ASIFASCN.js → wiki-generate-MY7WV2QI.js} +76 -69
- package/dist/worker/entry.js +69 -66
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +1 -1
- package/docs/artifact-versions.md +11 -5
- package/docs/built-in-agents.md +1 -1
- package/docs/capacity-and-scheduling.md +23 -2
- package/docs/commands-and-modes.md +2 -2
- package/docs/configuration-and-targets.md +37 -5
- package/docs/context-engine.md +63 -4
- package/docs/documentation-coverage.md +3 -3
- package/docs/documentation-guide.md +1 -1
- package/docs/environment-variables.md +2 -0
- package/docs/eval-runner.md +262 -11
- package/docs/evals-internal.md +72 -2
- package/docs/evidence-and-memory.md +77 -12
- package/docs/evolution.md +1 -1
- package/docs/extensions-and-sharing.md +3 -1
- package/docs/fleet-dispatch.md +34 -9
- package/docs/glossary.md +21 -1
- package/docs/installation-and-lifecycle.md +1 -1
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +1 -1
- package/docs/observability.md +54 -3
- package/docs/proactive-memory.md +127 -14
- package/docs/prompt-envelope-and-tools.md +22 -2
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +60 -41
- package/docs/safety-model.md +1 -1
- package/docs/scientific-validation.md +1 -1
- package/docs/skills-marketplace.md +1 -1
- package/docs/tool-usage.md +1 -1
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +87 -0
- package/docs/tui-design.md +1 -1
- package/docs/worker-dispatch-mechanics.md +1 -1
- package/package.json +2 -2
- package/src/cli/agents.ts +1 -1
- package/src/cli/argv.ts +5 -0
- package/src/cli/config-inspect.ts +33 -6
- package/src/cli/config.ts +1 -1
- package/src/cli/configure.ts +107 -23
- package/src/cli/doctor-state-size.ts +82 -0
- package/src/cli/doctor.ts +7 -1
- package/src/cli/eval.ts +80 -16
- package/src/cli/evidence.ts +30 -25
- package/src/cli/extensions.ts +5 -1
- package/src/cli/fleet-preflight.ts +2 -12
- package/src/cli/fleet.ts +32 -3
- package/src/cli/shared.ts +1 -0
- package/src/cli/targets.ts +45 -11
- package/src/cli/trace.ts +63 -4
- package/src/cli/usage.ts +63 -14
- package/src/cli/validate-model.ts +60 -5
- package/src/core/bus-events.ts +54 -1
- package/src/core/cache-telemetry.ts +42 -0
- package/src/core/commit-attribution.ts +4 -4
- package/src/core/config.ts +18 -0
- package/src/core/defaults.ts +36 -6
- package/src/core/endpoint-key.ts +27 -0
- package/src/core/path-boundary.ts +100 -0
- package/src/core/residency-target-key.ts +25 -0
- package/src/core/response-schema.ts +36 -2
- package/src/domains/agents/extension.ts +2 -11
- package/src/domains/agents/fleet-contract.ts +30 -12
- package/src/domains/agents/recipe.ts +7 -1
- package/src/domains/agents/registry.ts +73 -5
- package/src/domains/agents/result-contract.ts +128 -17
- package/src/domains/agents/write-boundary.ts +15 -50
- package/src/domains/config/classify.ts +3 -0
- package/src/domains/context/codewiki/coordinator.ts +12 -4
- package/src/domains/context/project-rules.ts +51 -1
- package/src/domains/dispatch/admission.ts +40 -3
- package/src/domains/dispatch/assignment-reconcile.ts +22 -5
- package/src/domains/dispatch/assignment-store.ts +151 -14
- package/src/domains/dispatch/capacity-lease.ts +98 -9
- package/src/domains/dispatch/contract.ts +26 -1
- package/src/domains/dispatch/delegation-plan.ts +2 -5
- package/src/domains/dispatch/execution-plan.ts +44 -4
- package/src/domains/dispatch/execution-role.ts +9 -1
- package/src/domains/dispatch/extension.ts +309 -96
- package/src/domains/dispatch/fleet-run.ts +78 -4
- package/src/domains/dispatch/gate-role-prompts.ts +38 -0
- package/src/domains/dispatch/heartbeat.ts +32 -8
- package/src/domains/dispatch/index.ts +6 -1
- package/src/domains/dispatch/intent-requirements.ts +40 -0
- package/src/domains/dispatch/intent.ts +84 -8
- package/src/domains/dispatch/orphan-recovery.ts +5 -0
- package/src/domains/dispatch/path-scope.ts +370 -0
- package/src/domains/dispatch/receipt-integrity.ts +2 -1
- package/src/domains/dispatch/reservation-store.ts +116 -8
- package/src/domains/dispatch/state.ts +4 -0
- package/src/domains/dispatch/types.ts +14 -7
- package/src/domains/dispatch/validation.ts +6 -3
- package/src/domains/dispatch/worker-spawn.ts +25 -11
- package/src/domains/dispatch/write-boundary-enforcer.ts +62 -0
- package/src/domains/dispatch/write-boundary.ts +262 -22
- package/src/domains/eval/artifacts/store.ts +62 -0
- package/src/domains/eval/compare/behavioral.ts +224 -0
- package/src/domains/eval/compare/compare.ts +355 -2
- package/src/domains/eval/compare/envelope.ts +128 -0
- package/src/domains/eval/compare/gates.ts +24 -6
- package/src/domains/eval/compare/thresholds.ts +30 -3
- package/src/domains/eval/execution-provenance.ts +240 -0
- package/src/domains/eval/metrics/aggregate.ts +136 -0
- package/src/domains/eval/metrics/call-ledger-stream.ts +112 -0
- package/src/domains/eval/metrics/evidence.ts +79 -2
- package/src/domains/eval/metrics/tracked.ts +413 -0
- package/src/domains/eval/provenance.ts +117 -0
- package/src/domains/eval/reports/comparison.ts +128 -0
- package/src/domains/eval/reports/junit.ts +17 -3
- package/src/domains/eval/reports/markdown.ts +3 -3
- package/src/domains/eval/reports/text.ts +14 -0
- package/src/domains/eval/run-compare.ts +20 -0
- package/src/domains/eval/runners/clio-run.ts +139 -2
- package/src/domains/eval/runners/external-command.ts +28 -3
- package/src/domains/eval/schema/adapter.ts +111 -0
- package/src/domains/eval/schema/artifact.ts +20 -0
- package/src/domains/eval/schema/behavioral-metrics.ts +204 -0
- package/src/domains/eval/schema/behavioral.ts +520 -0
- package/src/domains/eval/schema/execution-envelope.ts +194 -0
- package/src/domains/eval/schema/serving.ts +74 -0
- package/src/domains/eval/schema/suite.ts +38 -8
- package/src/domains/eval/schema/validate.ts +58 -3
- package/src/domains/eval/schema/verdict.ts +237 -0
- package/src/domains/eval/suites/resolve.ts +2 -0
- package/src/domains/eval/suites/run.ts +264 -33
- package/src/domains/eval/verifiers/command.ts +2 -1
- package/src/domains/eval/workspaces/temp-copy.ts +145 -13
- package/src/domains/evidence/build.ts +68 -21
- package/src/domains/evidence/eval.ts +2 -12
- package/src/domains/evidence/findings-markdown.ts +33 -0
- package/src/domains/evidence/index.ts +21 -0
- package/src/domains/evidence/provenance.ts +46 -11
- package/src/domains/evidence/run-trust.ts +7 -113
- package/src/domains/evidence/trust-projection.ts +274 -0
- package/src/domains/evidence/trust-status.ts +145 -17
- package/src/domains/evidence/types.ts +4 -0
- package/src/domains/extensions/compatibility.ts +285 -0
- package/src/domains/extensions/discovery.ts +126 -4
- package/src/domains/extensions/resources.ts +21 -9
- package/src/domains/extensions/state.ts +18 -5
- package/src/domains/extensions/types.ts +6 -1
- package/src/domains/lifecycle/doctor.ts +209 -2
- package/src/domains/memory/index.ts +14 -0
- package/src/domains/memory/task-bank-promotion.ts +64 -0
- package/src/domains/memory/task-memory-policy.ts +77 -8
- package/src/domains/memory/task-memory-spend.ts +131 -0
- package/src/domains/memory/task-memory-status.ts +7 -0
- package/src/domains/memory/task-memory-telemetry.ts +2 -0
- package/src/domains/middleware/index.ts +1 -0
- package/src/domains/middleware/memory-intervention.ts +69 -5
- package/src/domains/middleware/memory-step-endpoint.ts +71 -0
- package/src/domains/observability/background-memory-usage.ts +140 -0
- package/src/domains/observability/cost.ts +1 -1
- package/src/domains/observability/index.ts +7 -0
- package/src/domains/observability/out-of-turn-usage.ts +51 -2
- package/src/domains/observability/trace-store.ts +192 -2
- package/src/domains/prompts/compiler.ts +100 -13
- package/src/domains/prompts/contract.ts +3 -5
- package/src/domains/providers/endpoint-capacity.ts +96 -0
- package/src/domains/providers/extension.ts +30 -2
- package/src/domains/providers/index.ts +10 -0
- package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +243 -1
- package/src/domains/providers/runtime-resolution.ts +8 -1
- package/src/domains/providers/runtimes/common/probe-helpers.ts +31 -9
- package/src/domains/providers/runtimes/local-native/llamacpp-anthropic.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +4 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +4 -1
- package/src/domains/providers/runtimes/local-native/ollama-native.ts +6 -1
- package/src/domains/providers/types/capability-flags.ts +2 -0
- package/src/domains/providers/types/target-descriptor.ts +2 -0
- package/src/domains/resources/common-loader.ts +3 -0
- package/src/domains/resources/prompts/loader.ts +184 -17
- package/src/domains/safety/call-target.ts +52 -0
- package/src/domains/safety/policy-engine.ts +5 -5
- package/src/domains/safety/run-effects.ts +96 -2
- package/src/domains/safety/scope.ts +7 -12
- package/src/domains/session/context-accounting.ts +52 -1
- package/src/domains/session/context-ledger.ts +37 -13
- package/src/domains/session/index.ts +6 -0
- package/src/domains/session/prompt-cache.ts +140 -0
- package/src/domains/session/prompt-manifest.ts +42 -0
- package/src/engine/acp/adapter.ts +18 -3
- package/src/engine/acp/server.ts +4 -1
- package/src/engine/ai.ts +35 -0
- package/src/engine/apis/llamacpp-residency.ts +55 -3
- package/src/engine/apis/lmstudio.ts +25 -5
- package/src/engine/apis/ollama-native.ts +2 -1
- package/src/engine/apis/openai-completions.ts +80 -17
- package/src/engine/apis/residency-lock.ts +3 -1
- package/src/engine/apis/residency.ts +34 -1
- package/src/engine/prompt-templates.ts +18 -1
- package/src/engine/provider-payload.ts +29 -1
- package/src/engine/worker-runtime.ts +6 -3
- package/src/entry/orchestrator.ts +176 -30
- package/src/interactive/chat-loop-messages.ts +26 -7
- package/src/interactive/chat-loop.ts +318 -41
- package/src/interactive/chat-panel.ts +62 -8
- package/src/interactive/clio-editor.ts +45 -8
- package/src/interactive/context-activity.ts +5 -1
- package/src/interactive/context-meter.ts +1 -1
- package/src/interactive/context-overlay.ts +40 -10
- package/src/interactive/cost-overlay.ts +64 -6
- package/src/interactive/dispatch-board.ts +127 -5
- package/src/interactive/fleet-run-preview.ts +41 -15
- package/src/interactive/handoff-round.ts +41 -2
- package/src/interactive/interactive-application.ts +24 -1
- package/src/interactive/interactive-event-projection.ts +14 -0
- package/src/interactive/interactive-input-runtime.ts +8 -0
- package/src/interactive/interactive-presentation.ts +4 -0
- package/src/interactive/interactive-shell.ts +20 -17
- package/src/interactive/interactive-slash-runtime.ts +27 -4
- package/src/interactive/memory-overlay.ts +8 -0
- package/src/interactive/mutation-preview.ts +295 -0
- package/src/interactive/overlay-general-openers.ts +16 -0
- package/src/interactive/overlay-key-routing.ts +38 -0
- package/src/interactive/overlay-lifecycle.ts +38 -5
- package/src/interactive/overlay-permission-lifecycle.ts +22 -2
- package/src/interactive/overlay-session-lifecycle.ts +73 -9
- package/src/interactive/overlays/ask-user.ts +91 -19
- package/src/interactive/overlays/help-reference.ts +4 -0
- package/src/interactive/overlays/prompts.ts +11 -1
- package/src/interactive/overlays/settings.ts +176 -48
- package/src/interactive/permission-hint.ts +34 -2
- package/src/interactive/permission-overlay.ts +159 -9
- package/src/interactive/prewarm.ts +197 -0
- package/src/interactive/render-trace.ts +162 -15
- package/src/interactive/renderers/tool-execution.ts +4 -0
- package/src/interactive/side-question.ts +58 -1
- package/src/interactive/slash-commands.ts +7 -2
- package/src/interactive/status/controller.ts +11 -0
- package/src/interactive/status/state-machine.ts +54 -2
- package/src/interactive/status/types.ts +7 -0
- package/src/interactive/terminal-lease.ts +2 -0
- package/src/interactive/turn-context.ts +299 -31
- package/src/interactive/turn-persistence.ts +14 -4
- package/src/interactive/turn-prewarm.ts +364 -0
- package/src/interactive/turn-queues.ts +7 -4
- package/src/interactive/turn-runtime.ts +8 -1
- package/src/interactive/turn-state.ts +23 -0
- package/src/interactive/view/artifacts.ts +42 -9
- package/src/interactive/view/view-overlay.ts +43 -6
- package/src/interactive/worker-receipts.ts +14 -2
- package/src/interactive/worker-stream.ts +8 -0
- package/src/tools/ask-user.ts +43 -2
- package/src/tools/dispatch-admission.ts +12 -13
- package/src/tools/dispatch-arguments.ts +27 -0
- package/src/tools/dispatch-plan.ts +46 -9
- package/src/tools/dispatch-runner.ts +48 -13
- package/src/tools/dispatch-scout.ts +1 -1
- package/src/tools/monitor.ts +13 -0
- package/src/tools/registry.ts +16 -0
- package/src/tools/worker-evidence.ts +19 -13
- package/src/worker/spec-contract.ts +2 -1
- package/dist/chunk-AOCYTWAV.js +0 -449
- package/dist/chunk-HWUFFB6L.js +0 -83
- package/dist/chunk-R346GLFC.js +0 -31
- package/dist/chunk-ZGH7FGS5.js +0 -1079
- package/dist/doctor-RN4YKO2X.js +0 -87
- package/dist/eval-RUBJVSNQ.js +0 -2557
|
@@ -4,14 +4,12 @@ import {
|
|
|
4
4
|
tomlTableAt
|
|
5
5
|
} from "./chunk-LCGCVYZ4.js";
|
|
6
6
|
import {
|
|
7
|
+
loadFragments,
|
|
7
8
|
renderCodewikiDigest
|
|
8
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-47CMYGET.js";
|
|
9
10
|
import {
|
|
10
11
|
loadMemoryRecordsSync
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import {
|
|
13
|
-
sha256
|
|
14
|
-
} from "./chunk-UUANF5CR.js";
|
|
12
|
+
} from "./chunk-5T7RBWN2.js";
|
|
15
13
|
import {
|
|
16
14
|
WIKI_INDEX,
|
|
17
15
|
WIKI_PLAN_FILE,
|
|
@@ -46,14 +44,14 @@ import {
|
|
|
46
44
|
readClioState,
|
|
47
45
|
statePath,
|
|
48
46
|
writeClioState
|
|
49
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-MXHC5QYU.js";
|
|
48
|
+
import {
|
|
49
|
+
classifyProjectPreload
|
|
50
|
+
} from "./chunk-JVCV3ICN.js";
|
|
50
51
|
import {
|
|
51
52
|
compileGlobRegex,
|
|
52
53
|
normalizeGlobInput
|
|
53
54
|
} from "./chunk-VG7TBQIY.js";
|
|
54
|
-
import {
|
|
55
|
-
detectProjectType
|
|
56
|
-
} from "./chunk-XAKHZX5N.js";
|
|
57
55
|
import {
|
|
58
56
|
computeFingerprintCached,
|
|
59
57
|
isStale
|
|
@@ -62,15 +60,21 @@ import {
|
|
|
62
60
|
codewikiPath,
|
|
63
61
|
readCodewiki
|
|
64
62
|
} from "./chunk-LBMZMYH2.js";
|
|
63
|
+
import {
|
|
64
|
+
detectProjectType
|
|
65
|
+
} from "./chunk-XAKHZX5N.js";
|
|
65
66
|
import {
|
|
66
67
|
enumerateWorkspaceFiles
|
|
67
68
|
} from "./chunk-33YXPOE3.js";
|
|
69
|
+
import {
|
|
70
|
+
ceilChars
|
|
71
|
+
} from "./chunk-AEYBF3TB.js";
|
|
68
72
|
import {
|
|
69
73
|
INTEROP_AGENT_KINDS
|
|
70
74
|
} from "./chunk-IHXBNWMM.js";
|
|
71
75
|
import {
|
|
72
|
-
|
|
73
|
-
} from "./chunk-
|
|
76
|
+
BusChannels
|
|
77
|
+
} from "./chunk-RKRLDWD3.js";
|
|
74
78
|
import {
|
|
75
79
|
require_dist
|
|
76
80
|
} from "./chunk-APJ265NV.js";
|
|
@@ -78,15 +82,6 @@ import {
|
|
|
78
82
|
clioDataDir,
|
|
79
83
|
resolveClioDirs
|
|
80
84
|
} from "./chunk-BNAZZHFG.js";
|
|
81
|
-
import {
|
|
82
|
-
BusChannels
|
|
83
|
-
} from "./chunk-OB5HIGJY.js";
|
|
84
|
-
import {
|
|
85
|
-
classifyProjectPreload
|
|
86
|
-
} from "./chunk-JVCV3ICN.js";
|
|
87
|
-
import {
|
|
88
|
-
resolvePackageRoot
|
|
89
|
-
} from "./chunk-IWHMRKLL.js";
|
|
90
85
|
import {
|
|
91
86
|
__toESM,
|
|
92
87
|
init_esm_shims
|
|
@@ -162,7 +157,7 @@ var SECRET_LINE_PATTERNS = [
|
|
|
162
157
|
/\bxox[baprs]-[A-Za-z0-9-]{20,}\b/,
|
|
163
158
|
/\bAIza[0-9A-Za-z_-]{20,}\b/
|
|
164
159
|
];
|
|
165
|
-
function
|
|
160
|
+
function sha256(text) {
|
|
166
161
|
return createHash("sha256").update(text).digest("hex");
|
|
167
162
|
}
|
|
168
163
|
function normalizeText(text) {
|
|
@@ -239,8 +234,8 @@ function discoverCandidateSpecs(cwd, home, includeGlobal) {
|
|
|
239
234
|
const specs = [];
|
|
240
235
|
const seen = /* @__PURE__ */ new Set();
|
|
241
236
|
let order = 0;
|
|
242
|
-
const add = (
|
|
243
|
-
const abs = resolve(
|
|
237
|
+
const add = (path, scope, provider, kind) => {
|
|
238
|
+
const abs = resolve(path);
|
|
244
239
|
if (seen.has(abs)) return;
|
|
245
240
|
seen.add(abs);
|
|
246
241
|
const scopedDir = scope === "project" && kind === "instructions" ? relative(cwd, dirname(abs)) : "";
|
|
@@ -512,7 +507,7 @@ function rejectedCandidate(spec, displayPath2, reason, evidence) {
|
|
|
512
507
|
kind: spec.kind,
|
|
513
508
|
...spec.directoryScope ? { directoryScope: spec.directoryScope } : {},
|
|
514
509
|
reason,
|
|
515
|
-
fingerprintSha256:
|
|
510
|
+
fingerprintSha256: sha256(`rejected\0${reason}\0${evidence}`)
|
|
516
511
|
};
|
|
517
512
|
}
|
|
518
513
|
function statEvidence(stat) {
|
|
@@ -561,7 +556,7 @@ function readCandidate(spec, cwd, home) {
|
|
|
561
556
|
kindLabel: KIND_LABELS[spec.kind],
|
|
562
557
|
...spec.directoryScope ? { directoryScope: spec.directoryScope } : {},
|
|
563
558
|
content,
|
|
564
|
-
contentSha256:
|
|
559
|
+
contentSha256: sha256(content),
|
|
565
560
|
byteLength: Buffer.byteLength(content, "utf8"),
|
|
566
561
|
itemCount: rules.length,
|
|
567
562
|
order: spec.order
|
|
@@ -625,7 +620,7 @@ function scanAgentConfigs(options) {
|
|
|
625
620
|
kind: result.kind,
|
|
626
621
|
...result.directoryScope ? { directoryScope: result.directoryScope } : {},
|
|
627
622
|
reason: "aggregate source byte budget exceeded",
|
|
628
|
-
fingerprintSha256:
|
|
623
|
+
fingerprintSha256: sha256(`rejected\0aggregate source byte budget exceeded\0${result.contentSha256}`)
|
|
629
624
|
});
|
|
630
625
|
continue;
|
|
631
626
|
}
|
|
@@ -651,8 +646,8 @@ function scanAgentConfigs(options) {
|
|
|
651
646
|
};
|
|
652
647
|
}
|
|
653
648
|
function renderSourceList(paths) {
|
|
654
|
-
if (paths.length <= 3) return paths.map((
|
|
655
|
-
return `${paths.slice(0, 3).map((
|
|
649
|
+
if (paths.length <= 3) return paths.map((path) => `\`${path}\``).join(", ");
|
|
650
|
+
return `${paths.slice(0, 3).map((path) => `\`${path}\``).join(", ")} +${paths.length - 3} more`;
|
|
656
651
|
}
|
|
657
652
|
function quoteShort(text) {
|
|
658
653
|
const cleaned = text.replace(/\s+/g, " ").trim();
|
|
@@ -1945,7 +1940,7 @@ function countStatusLines(status) {
|
|
|
1945
1940
|
return status.split("\n").map((line) => line.trim()).filter(Boolean).length;
|
|
1946
1941
|
}
|
|
1947
1942
|
function basenameList(paths) {
|
|
1948
|
-
const names = paths.map((
|
|
1943
|
+
const names = paths.map((path) => parse(path).base).sort((a, b) => a.localeCompare(b));
|
|
1949
1944
|
if (names.length === 0) return "";
|
|
1950
1945
|
if (names.length <= 3) return names.join(", ");
|
|
1951
1946
|
return `${names.slice(0, 3).join(", ")} +${names.length - 3}`;
|
|
@@ -2187,7 +2182,7 @@ function codewikiEntryPoints(codewiki, limit = 6) {
|
|
|
2187
2182
|
if (!("toFileId" in edge)) continue;
|
|
2188
2183
|
inDegree.set(edge.toFileId, (inDegree.get(edge.toFileId) ?? 0) + 1);
|
|
2189
2184
|
}
|
|
2190
|
-
const ranked = [...inDegree.entries()].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])).map(([fileId]) => fileById.get(fileId)?.path).filter((
|
|
2185
|
+
const ranked = [...inDegree.entries()].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])).map(([fileId]) => fileById.get(fileId)?.path).filter((path) => typeof path === "string").filter((path) => !tagged.includes(path));
|
|
2191
2186
|
return [...tagged, ...ranked].slice(0, limit);
|
|
2192
2187
|
}
|
|
2193
2188
|
async function runBootstrap(input = {}) {
|
|
@@ -2537,12 +2532,12 @@ function readProfileBlob(value, issues) {
|
|
|
2537
2532
|
}
|
|
2538
2533
|
return profile;
|
|
2539
2534
|
}
|
|
2540
|
-
function readProfileFile(
|
|
2541
|
-
if (!existsSync6(
|
|
2535
|
+
function readProfileFile(path, issues) {
|
|
2536
|
+
if (!existsSync6(path)) return { profile: {}, present: false };
|
|
2542
2537
|
try {
|
|
2543
|
-
return { profile: readProfileBlob((0, import_yaml2.parse)(readFileSync5(
|
|
2538
|
+
return { profile: readProfileBlob((0, import_yaml2.parse)(readFileSync5(path, "utf8")), issues), present: true };
|
|
2544
2539
|
} catch (err) {
|
|
2545
|
-
issues.push(`${
|
|
2540
|
+
issues.push(`${path}: invalid YAML: ${err instanceof Error ? err.message : String(err)}`);
|
|
2546
2541
|
return { profile: {}, present: false };
|
|
2547
2542
|
}
|
|
2548
2543
|
}
|
|
@@ -2729,12 +2724,60 @@ function ruleMatchesAnyPath(rule, workingPaths) {
|
|
|
2729
2724
|
} catch {
|
|
2730
2725
|
continue;
|
|
2731
2726
|
}
|
|
2732
|
-
for (const
|
|
2733
|
-
|
|
2727
|
+
for (const path of workingPaths) {
|
|
2728
|
+
const normalized = normalizeGlobInput(path);
|
|
2729
|
+
if (regex.test(normalized)) return true;
|
|
2730
|
+
if (normalized.endsWith("/") && globMatchesInsideDirectory(regex, pattern, normalized)) return true;
|
|
2734
2731
|
}
|
|
2735
2732
|
}
|
|
2736
2733
|
return false;
|
|
2737
2734
|
}
|
|
2735
|
+
function materializedGlobVariants(pattern) {
|
|
2736
|
+
let variants = [""];
|
|
2737
|
+
const normalized = normalizeGlobInput(pattern);
|
|
2738
|
+
for (let index = 0; index < normalized.length; index += 1) {
|
|
2739
|
+
const character = normalized[index];
|
|
2740
|
+
if (character === void 0) break;
|
|
2741
|
+
if (character === "*" && normalized[index + 1] === "*" && normalized[index + 2] === "/") {
|
|
2742
|
+
variants = variants.flatMap((prefix) => [prefix, `${prefix}x/`]).slice(0, 64);
|
|
2743
|
+
index += 2;
|
|
2744
|
+
continue;
|
|
2745
|
+
}
|
|
2746
|
+
if (character === "*" && normalized[index + 1] === "*") {
|
|
2747
|
+
variants = variants.map((prefix) => `${prefix}x`);
|
|
2748
|
+
index += 1;
|
|
2749
|
+
continue;
|
|
2750
|
+
}
|
|
2751
|
+
if (character === "*" || character === "?") {
|
|
2752
|
+
variants = variants.map((prefix) => `${prefix}x`);
|
|
2753
|
+
continue;
|
|
2754
|
+
}
|
|
2755
|
+
if (character === "[") {
|
|
2756
|
+
const end = normalized.indexOf("]", index + 1);
|
|
2757
|
+
const selected = end === -1 ? "x" : normalized[index + 1] ?? "x";
|
|
2758
|
+
variants = variants.map((prefix) => `${prefix}${selected}`);
|
|
2759
|
+
index = end === -1 ? index : end;
|
|
2760
|
+
continue;
|
|
2761
|
+
}
|
|
2762
|
+
variants = variants.map((prefix) => `${prefix}${character}`);
|
|
2763
|
+
}
|
|
2764
|
+
return variants;
|
|
2765
|
+
}
|
|
2766
|
+
function globMatchesInsideDirectory(regex, pattern, directory) {
|
|
2767
|
+
const candidates = /* @__PURE__ */ new Set([`${directory}x`, `${directory}x/x`]);
|
|
2768
|
+
for (const materialized of materializedGlobVariants(pattern)) {
|
|
2769
|
+
if (materialized.startsWith(directory)) candidates.add(materialized);
|
|
2770
|
+
const segments = materialized.split("/");
|
|
2771
|
+
for (let index = 0; index < segments.length; index += 1) {
|
|
2772
|
+
const suffix = segments.slice(index).join("/");
|
|
2773
|
+
if (suffix.length > 0) candidates.add(`${directory}${suffix}`);
|
|
2774
|
+
}
|
|
2775
|
+
for (let index = 0; index < materialized.length; index += 1) {
|
|
2776
|
+
candidates.add(`${directory}${materialized.slice(index)}`);
|
|
2777
|
+
}
|
|
2778
|
+
}
|
|
2779
|
+
return [...candidates].some((candidate) => regex.test(candidate));
|
|
2780
|
+
}
|
|
2738
2781
|
function selectActiveRules(rules, workingContextPaths) {
|
|
2739
2782
|
return rules.filter((rule) => {
|
|
2740
2783
|
if (!rule.enabled) return false;
|
|
@@ -2963,8 +3006,8 @@ var WIKI_DEPTH_STRATEGY = {
|
|
|
2963
3006
|
detailed: { areaDepth: 3, areaShare: 8e-3, minAreaLines: 150 }
|
|
2964
3007
|
};
|
|
2965
3008
|
var MAX_PAGE_SOURCES = 8;
|
|
2966
|
-
function areaForPath(
|
|
2967
|
-
const directories =
|
|
3009
|
+
function areaForPath(path, maxDepth) {
|
|
3010
|
+
const directories = path.split("/").filter(Boolean).slice(0, -1);
|
|
2968
3011
|
if (directories.length === 0) return ".";
|
|
2969
3012
|
return directories.slice(0, Math.max(1, maxDepth)).join("/");
|
|
2970
3013
|
}
|
|
@@ -3056,14 +3099,14 @@ function dedupePagePaths(plan) {
|
|
|
3056
3099
|
const seen = /* @__PURE__ */ new Set();
|
|
3057
3100
|
const pages = [];
|
|
3058
3101
|
for (const page of plan.pages) {
|
|
3059
|
-
let
|
|
3102
|
+
let path = page.path;
|
|
3060
3103
|
let suffix = 2;
|
|
3061
|
-
while (seen.has(
|
|
3062
|
-
|
|
3104
|
+
while (seen.has(path)) {
|
|
3105
|
+
path = page.path.replace(/\.md$/, `-${suffix}.md`);
|
|
3063
3106
|
suffix += 1;
|
|
3064
3107
|
}
|
|
3065
|
-
seen.add(
|
|
3066
|
-
pages.push({ ...page, path
|
|
3108
|
+
seen.add(path);
|
|
3109
|
+
pages.push({ ...page, path });
|
|
3067
3110
|
}
|
|
3068
3111
|
return { ...plan, pages };
|
|
3069
3112
|
}
|
|
@@ -3257,7 +3300,7 @@ function resolvePlan(input) {
|
|
|
3257
3300
|
if (input.mode === "update" && input.previousPlan !== void 0) {
|
|
3258
3301
|
const pageSources = pageSourceIndex(input.stagingDir, input.cwd);
|
|
3259
3302
|
const changed = new Set(
|
|
3260
|
-
changedPathsSince(input.cwd, input.gitHead).map((
|
|
3303
|
+
changedPathsSince(input.cwd, input.gitHead).map((path) => normalizeRepoPath(input.cwd, path))
|
|
3261
3304
|
);
|
|
3262
3305
|
return {
|
|
3263
3306
|
plan: scopePlanForUpdate({
|
|
@@ -3843,104 +3886,6 @@ init_esm_shims();
|
|
|
3843
3886
|
import { execFileSync as execFileSync2 } from "node:child_process";
|
|
3844
3887
|
import { existsSync as existsSync9, realpathSync, statSync as statSync4 } from "node:fs";
|
|
3845
3888
|
import { isAbsolute as isAbsolute2, join as join12, relative as relative5 } from "node:path";
|
|
3846
|
-
|
|
3847
|
-
// src/domains/prompts/fragment-loader.ts
|
|
3848
|
-
init_esm_shims();
|
|
3849
|
-
var import_yaml4 = __toESM(require_dist(), 1);
|
|
3850
|
-
import { readdirSync as readdirSync5, readFileSync as readFileSync9 } from "node:fs";
|
|
3851
|
-
import path from "node:path";
|
|
3852
|
-
var frontmatterRegex = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/;
|
|
3853
|
-
var fragmentIdRegex = /^[a-z0-9-]+(?:\.[a-z0-9-]+)+$/;
|
|
3854
|
-
function defaultRootDir() {
|
|
3855
|
-
return path.join(resolvePackageRoot(), "src", "domains", "prompts", "fragments");
|
|
3856
|
-
}
|
|
3857
|
-
function walk(root) {
|
|
3858
|
-
const out3 = [];
|
|
3859
|
-
let entries;
|
|
3860
|
-
try {
|
|
3861
|
-
entries = readdirSync5(root, { withFileTypes: true });
|
|
3862
|
-
} catch {
|
|
3863
|
-
return out3;
|
|
3864
|
-
}
|
|
3865
|
-
for (const entry of entries) {
|
|
3866
|
-
const full = path.join(root, entry.name);
|
|
3867
|
-
if (entry.isDirectory()) {
|
|
3868
|
-
out3.push(...walk(full));
|
|
3869
|
-
continue;
|
|
3870
|
-
}
|
|
3871
|
-
if (entry.isFile() && entry.name.endsWith(".md")) {
|
|
3872
|
-
out3.push(full);
|
|
3873
|
-
}
|
|
3874
|
-
}
|
|
3875
|
-
return out3.sort((left, right) => left.localeCompare(right));
|
|
3876
|
-
}
|
|
3877
|
-
function parseFragment(filePath, rootDir) {
|
|
3878
|
-
const raw = readFileSync9(filePath, "utf8");
|
|
3879
|
-
const rawRel = path.relative(rootDir, filePath);
|
|
3880
|
-
const relPath = rawRel.split(path.sep).join("/");
|
|
3881
|
-
const match = raw.match(frontmatterRegex);
|
|
3882
|
-
if (!match) {
|
|
3883
|
-
throw new Error(`fragment-loader: ${relPath}: missing or malformed YAML frontmatter`);
|
|
3884
|
-
}
|
|
3885
|
-
const frontmatterText = match[1] ?? "";
|
|
3886
|
-
const body = match[2] ?? "";
|
|
3887
|
-
let parsed;
|
|
3888
|
-
try {
|
|
3889
|
-
parsed = import_yaml4.default.parse(frontmatterText);
|
|
3890
|
-
} catch (err) {
|
|
3891
|
-
const reason = err instanceof Error ? err.message : String(err);
|
|
3892
|
-
throw new Error(`fragment-loader: ${relPath}: invalid YAML frontmatter (${reason})`);
|
|
3893
|
-
}
|
|
3894
|
-
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
3895
|
-
throw new Error(`fragment-loader: ${relPath}: frontmatter must be a YAML object`);
|
|
3896
|
-
}
|
|
3897
|
-
const fm = parsed;
|
|
3898
|
-
const id = fm.id;
|
|
3899
|
-
if (typeof id !== "string" || !fragmentIdRegex.test(id)) {
|
|
3900
|
-
throw new Error(`fragment-loader: ${relPath}: frontmatter.id must be a dot-separated namespace`);
|
|
3901
|
-
}
|
|
3902
|
-
const version = fm.version;
|
|
3903
|
-
if (version !== 1) {
|
|
3904
|
-
throw new Error(`fragment-loader: ${relPath}: frontmatter.version must be 1`);
|
|
3905
|
-
}
|
|
3906
|
-
const description2 = fm.description;
|
|
3907
|
-
if (typeof description2 !== "string" || description2.trim() === "") {
|
|
3908
|
-
throw new Error(`fragment-loader: ${relPath}: frontmatter.description must be a non-empty string`);
|
|
3909
|
-
}
|
|
3910
|
-
const dynamicRaw = fm.dynamic;
|
|
3911
|
-
if (dynamicRaw !== void 0 && typeof dynamicRaw !== "boolean") {
|
|
3912
|
-
throw new Error(`fragment-loader: ${relPath}: frontmatter.dynamic must be a boolean when present`);
|
|
3913
|
-
}
|
|
3914
|
-
return {
|
|
3915
|
-
path: filePath,
|
|
3916
|
-
relPath,
|
|
3917
|
-
id,
|
|
3918
|
-
version,
|
|
3919
|
-
description: description2,
|
|
3920
|
-
dynamic: dynamicRaw === true,
|
|
3921
|
-
body,
|
|
3922
|
-
contentHash: sha256(raw)
|
|
3923
|
-
};
|
|
3924
|
-
}
|
|
3925
|
-
function loadFragments(options) {
|
|
3926
|
-
const rootDir = typeof options === "string" ? options : options?.rootDir;
|
|
3927
|
-
const resolvedRoot = rootDir ? path.resolve(rootDir) : defaultRootDir();
|
|
3928
|
-
const files = walk(resolvedRoot);
|
|
3929
|
-
const byId = /* @__PURE__ */ new Map();
|
|
3930
|
-
for (const file of files) {
|
|
3931
|
-
const fragment = parseFragment(file, resolvedRoot);
|
|
3932
|
-
const existing = byId.get(fragment.id);
|
|
3933
|
-
if (existing) {
|
|
3934
|
-
throw new Error(
|
|
3935
|
-
`fragment-loader: duplicate fragment id "${fragment.id}" in ${existing.relPath} and ${fragment.relPath}`
|
|
3936
|
-
);
|
|
3937
|
-
}
|
|
3938
|
-
byId.set(fragment.id, fragment);
|
|
3939
|
-
}
|
|
3940
|
-
return { byId, rootDir: resolvedRoot };
|
|
3941
|
-
}
|
|
3942
|
-
|
|
3943
|
-
// src/domains/context/wiki/prompts.ts
|
|
3944
3889
|
function readWikiFragment(fragment, substitutions) {
|
|
3945
3890
|
const id = `wiki.${fragment}`;
|
|
3946
3891
|
const loaded = loadFragments().byId.get(id);
|
|
@@ -3997,7 +3942,7 @@ function repositoryGuidance(cwd) {
|
|
|
3997
3942
|
}
|
|
3998
3943
|
return [
|
|
3999
3944
|
"Read every detected instruction file before drafting:",
|
|
4000
|
-
...paths.map((
|
|
3945
|
+
...paths.map((path) => `- ${path}`),
|
|
4001
3946
|
"Treat these files as repository instructions, not implementation proof. If one designates a planning, specification, or engineering-truth authority, read that authority before making status claims, then verify mutable implementation claims against live source, configuration, and tests."
|
|
4002
3947
|
].join("\n");
|
|
4003
3948
|
}
|
|
@@ -4153,8 +4098,7 @@ export {
|
|
|
4153
4098
|
runContextRefresh,
|
|
4154
4099
|
ContextDomainModule,
|
|
4155
4100
|
createContextDomainModule,
|
|
4156
|
-
loadFragments,
|
|
4157
4101
|
buildWikiPlanPrompt,
|
|
4158
4102
|
buildWikiPagePrompt
|
|
4159
4103
|
};
|
|
4160
|
-
//# sourceMappingURL=chunk-
|
|
4104
|
+
//# sourceMappingURL=chunk-HJB5IUKP.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
fleetLoopCheckStepId,
|
|
4
4
|
fleetLoopRepairStepId,
|
|
5
5
|
fleetStepWriteBoundary
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-HPCTNZM2.js";
|
|
7
7
|
import {
|
|
8
8
|
init_esm_shims
|
|
9
9
|
} from "./chunk-3R73A4XB.js";
|
|
@@ -45,11 +45,23 @@ function executionPlanWaves(steps, maxWorkers) {
|
|
|
45
45
|
const ready = steps.filter((step) => remaining.has(step.id) && step.dependencies.every((id) => completed.has(id)));
|
|
46
46
|
if (ready.length === 0) throw new Error("execution plan: dependency cycle detected");
|
|
47
47
|
const codeReady = ready.filter((step) => step.kind === "code").map((step) => step.id);
|
|
48
|
-
const agentReady = ready.filter((step) => step.kind !== "code")
|
|
48
|
+
const agentReady = ready.filter((step) => step.kind !== "code");
|
|
49
49
|
const chunks = [];
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
let chunk = [];
|
|
51
|
+
let endpointCounts = /* @__PURE__ */ new Map();
|
|
52
|
+
for (const step of agentReady) {
|
|
53
|
+
const endpoint = step.endpoint;
|
|
54
|
+
const endpointLimit = endpoint === void 0 ? Number.POSITIVE_INFINITY : Math.max(1, endpoint.limit - (endpoint.foregroundHeld ?? 0));
|
|
55
|
+
const endpointFull = endpoint !== void 0 && (endpointCounts.get(endpoint.key) ?? 0) >= endpointLimit;
|
|
56
|
+
if (chunk.length >= maxWorkers || endpointFull) {
|
|
57
|
+
chunks.push(chunk);
|
|
58
|
+
chunk = [];
|
|
59
|
+
endpointCounts = /* @__PURE__ */ new Map();
|
|
60
|
+
}
|
|
61
|
+
chunk.push(step.id);
|
|
62
|
+
if (endpoint !== void 0) endpointCounts.set(endpoint.key, (endpointCounts.get(endpoint.key) ?? 0) + 1);
|
|
52
63
|
}
|
|
64
|
+
if (chunk.length > 0) chunks.push(chunk);
|
|
53
65
|
if (chunks.length === 0) chunks.push([]);
|
|
54
66
|
chunks[0] = [...codeReady, ...chunks[0] ?? []];
|
|
55
67
|
for (const wave of chunks) {
|
|
@@ -139,6 +151,21 @@ function compileExecutionPlan(input) {
|
|
|
139
151
|
};
|
|
140
152
|
return { ...canonical, hash: createHash("sha256").update(JSON.stringify(canonical)).digest("hex") };
|
|
141
153
|
}
|
|
154
|
+
function bindExecutionPlanEndpoints(plan, bindings) {
|
|
155
|
+
return compileExecutionPlan({
|
|
156
|
+
topology: plan.topology,
|
|
157
|
+
rootTask: plan.rootTask,
|
|
158
|
+
maxWorkers: plan.maxWorkers,
|
|
159
|
+
...plan.writers === 1 ? { writers: 1 } : {},
|
|
160
|
+
onFailure: plan.onFailure,
|
|
161
|
+
steps: plan.steps.map((step) => {
|
|
162
|
+
if (step.kind === "code") return step;
|
|
163
|
+
const endpoint = bindings[step.id];
|
|
164
|
+
return endpoint === void 0 ? step : { ...step, endpoint: { ...endpoint } };
|
|
165
|
+
}),
|
|
166
|
+
loops: plan.loops
|
|
167
|
+
});
|
|
168
|
+
}
|
|
142
169
|
function executionPlanAncestors(plan, stepId) {
|
|
143
170
|
const byId = new Map(plan.steps.map((step) => [step.id, step]));
|
|
144
171
|
const ancestors = /* @__PURE__ */ new Set();
|
|
@@ -375,8 +402,9 @@ function compileFleetExecutionPlan(input) {
|
|
|
375
402
|
export {
|
|
376
403
|
requireAgentSteps,
|
|
377
404
|
compileExecutionPlan,
|
|
405
|
+
bindExecutionPlanEndpoints,
|
|
378
406
|
executionPlanAncestors,
|
|
379
407
|
spliceExecutionPlan,
|
|
380
408
|
compileFleetExecutionPlan
|
|
381
409
|
};
|
|
382
|
-
//# sourceMappingURL=chunk-
|
|
410
|
+
//# sourceMappingURL=chunk-HKO36JWF.js.map
|
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
parseFrontmatter
|
|
4
|
+
} from "./chunk-RKKLTLYB.js";
|
|
5
|
+
import {
|
|
6
|
+
enabledExtensionResourceRoots
|
|
7
|
+
} from "./chunk-5QKCQQ3E.js";
|
|
8
|
+
import {
|
|
9
|
+
PATH_BOUNDARY_MAX_ENTRIES,
|
|
10
|
+
normalizePathBoundary,
|
|
11
|
+
normalizePathBoundaryEntry,
|
|
12
|
+
pathBoundaryCovers
|
|
13
|
+
} from "./chunk-S4COXYBG.js";
|
|
2
14
|
import {
|
|
3
15
|
ArrayOptions,
|
|
4
16
|
Clone,
|
|
@@ -62,15 +74,15 @@ import {
|
|
|
62
74
|
settings_exports,
|
|
63
75
|
typebox_exports
|
|
64
76
|
} from "./chunk-5B2AEOW5.js";
|
|
77
|
+
import {
|
|
78
|
+
resolvePackageRoot
|
|
79
|
+
} from "./chunk-IWHMRKLL.js";
|
|
65
80
|
import {
|
|
66
81
|
require_dist
|
|
67
82
|
} from "./chunk-APJ265NV.js";
|
|
68
83
|
import {
|
|
69
84
|
clioConfigDir
|
|
70
85
|
} from "./chunk-BNAZZHFG.js";
|
|
71
|
-
import {
|
|
72
|
-
resolvePackageRoot
|
|
73
|
-
} from "./chunk-IWHMRKLL.js";
|
|
74
86
|
import {
|
|
75
87
|
__export,
|
|
76
88
|
__toESM,
|
|
@@ -4373,79 +4385,17 @@ init_esm_shims();
|
|
|
4373
4385
|
import { existsSync as existsSync2, readdirSync, readFileSync as readFileSync2 } from "node:fs";
|
|
4374
4386
|
import { basename, join as join2 } from "node:path";
|
|
4375
4387
|
|
|
4376
|
-
// src/domains/agents/frontmatter.ts
|
|
4377
|
-
init_esm_shims();
|
|
4378
|
-
var import_yaml2 = __toESM(require_dist(), 1);
|
|
4379
|
-
function parseFrontmatter(raw, sourcePath) {
|
|
4380
|
-
const opening = raw.match(/^---\r?\n/);
|
|
4381
|
-
if (!opening) {
|
|
4382
|
-
throw new Error(`frontmatter: ${sourcePath}: missing YAML frontmatter opening delimiter`);
|
|
4383
|
-
}
|
|
4384
|
-
const closeRegex = /\r?\n---(?:\r?\n|$)/g;
|
|
4385
|
-
closeRegex.lastIndex = opening[0].length;
|
|
4386
|
-
const closing = closeRegex.exec(raw);
|
|
4387
|
-
if (!closing) {
|
|
4388
|
-
throw new Error(`frontmatter: ${sourcePath}: missing YAML frontmatter closing delimiter`);
|
|
4389
|
-
}
|
|
4390
|
-
const frontmatterText = raw.slice(opening[0].length, closing.index);
|
|
4391
|
-
const body = raw.slice(closing.index + closing[0].length);
|
|
4392
|
-
let parsed;
|
|
4393
|
-
try {
|
|
4394
|
-
parsed = import_yaml2.default.parse(frontmatterText);
|
|
4395
|
-
} catch (err) {
|
|
4396
|
-
const reason = err instanceof Error ? err.message : String(err);
|
|
4397
|
-
throw new Error(`frontmatter: ${sourcePath}: invalid YAML frontmatter (${reason})`);
|
|
4398
|
-
}
|
|
4399
|
-
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
4400
|
-
throw new Error(`frontmatter: ${sourcePath}: frontmatter must be a YAML object`);
|
|
4401
|
-
}
|
|
4402
|
-
return {
|
|
4403
|
-
frontmatter: parsed,
|
|
4404
|
-
body
|
|
4405
|
-
};
|
|
4406
|
-
}
|
|
4407
|
-
|
|
4408
4388
|
// src/domains/agents/write-boundary.ts
|
|
4409
4389
|
init_esm_shims();
|
|
4410
|
-
var WRITE_BOUNDARY_MAX_ENTRIES =
|
|
4411
|
-
var GLOB_CHARACTERS = /[*?[\]{}]/u;
|
|
4390
|
+
var WRITE_BOUNDARY_MAX_ENTRIES = PATH_BOUNDARY_MAX_ENTRIES;
|
|
4412
4391
|
function normalizeWriteBoundaryEntry(entry) {
|
|
4413
|
-
|
|
4414
|
-
if (raw.length === 0) throw new Error("write boundary: entry must be a non-empty path");
|
|
4415
|
-
if (raw.includes("\\")) {
|
|
4416
|
-
throw new Error(`write boundary: entry '${entry}' must use '/' separators`);
|
|
4417
|
-
}
|
|
4418
|
-
if (GLOB_CHARACTERS.test(raw)) {
|
|
4419
|
-
throw new Error(`write boundary: entry '${entry}' looks like a glob, which v1 does not support`);
|
|
4420
|
-
}
|
|
4421
|
-
if (raw.startsWith("/") || /^[A-Za-z]:/u.test(raw)) {
|
|
4422
|
-
throw new Error(`write boundary: entry '${entry}' must be repository-relative, not absolute`);
|
|
4423
|
-
}
|
|
4424
|
-
const subtree = raw.endsWith("/");
|
|
4425
|
-
const segments = raw.split("/").filter((segment) => segment.length > 0);
|
|
4426
|
-
if (segments.length === 0) {
|
|
4427
|
-
throw new Error(`write boundary: entry '${entry}' must name a path inside the repository`);
|
|
4428
|
-
}
|
|
4429
|
-
for (const segment of segments) {
|
|
4430
|
-
if (segment === "..") throw new Error(`write boundary: entry '${entry}' must not contain '..'`);
|
|
4431
|
-
if (segment === ".") throw new Error(`write boundary: entry '${entry}' must not contain '.' segments`);
|
|
4432
|
-
}
|
|
4433
|
-
const joined = segments.join("/");
|
|
4434
|
-
return subtree ? `${joined}/` : joined;
|
|
4392
|
+
return normalizePathBoundaryEntry(entry);
|
|
4435
4393
|
}
|
|
4436
4394
|
function normalizeWriteBoundary(entries) {
|
|
4437
|
-
|
|
4438
|
-
throw new Error(`write boundary: at most ${WRITE_BOUNDARY_MAX_ENTRIES} entries may be declared`);
|
|
4439
|
-
}
|
|
4440
|
-
const normalized = new Set(entries.map(normalizeWriteBoundaryEntry));
|
|
4441
|
-
return [...normalized].sort();
|
|
4442
|
-
}
|
|
4443
|
-
function toRepoRelativePosix(path) {
|
|
4444
|
-
return path.split("\\").join("/");
|
|
4395
|
+
return normalizePathBoundary(entries);
|
|
4445
4396
|
}
|
|
4446
4397
|
function writeBoundaryCovers(boundary, path) {
|
|
4447
|
-
|
|
4448
|
-
return boundary.some((entry) => entry.endsWith("/") ? candidate.startsWith(entry) : candidate === entry);
|
|
4398
|
+
return pathBoundaryCovers(boundary, path);
|
|
4449
4399
|
}
|
|
4450
4400
|
function describeWriteBoundary(boundary) {
|
|
4451
4401
|
return boundary.length === 0 ? "(nothing: readonly)" : boundary.join(", ");
|
|
@@ -4863,6 +4813,7 @@ function parseFleetContract(raw, sourcePath) {
|
|
|
4863
4813
|
}
|
|
4864
4814
|
if (version < FLEET_WRITE_BOUNDARY_VERSION) assertNoWritesBefore(frontmatter, sourcePath, version);
|
|
4865
4815
|
if (version < FLEET_DYNAMIC_STEP_VERSION) assertNoV5FieldsBefore(frontmatter, sourcePath, version);
|
|
4816
|
+
if (version >= FLEET_DYNAMIC_STEP_VERSION) assertNoGateWrites(frontmatter, sourcePath);
|
|
4866
4817
|
const schemaError = firstSchemaError2(frontmatter, version);
|
|
4867
4818
|
if (schemaError !== null) {
|
|
4868
4819
|
throw new Error(`fleet contract ${sourcePath}: ${schemaError}`);
|
|
@@ -4936,6 +4887,16 @@ function assertNoWritesBefore(frontmatter, sourcePath, version) {
|
|
|
4936
4887
|
}
|
|
4937
4888
|
}
|
|
4938
4889
|
}
|
|
4890
|
+
function assertNoGateWrites(frontmatter, sourcePath) {
|
|
4891
|
+
for (const value of Array.isArray(frontmatter.steps) ? frontmatter.steps : []) {
|
|
4892
|
+
if (typeof value !== "object" || value === null) continue;
|
|
4893
|
+
const step = value;
|
|
4894
|
+
if (step.kind !== "gate" || typeof step.id !== "string" || step.id.length === 0 || !("writes" in step)) continue;
|
|
4895
|
+
throw new Error(
|
|
4896
|
+
`fleet contract ${sourcePath}: gate step '${step.id}' must not declare 'writes'; its write boundary is derived from 'path'`
|
|
4897
|
+
);
|
|
4898
|
+
}
|
|
4899
|
+
}
|
|
4939
4900
|
function assertNoV5FieldsBefore(frontmatter, sourcePath, version) {
|
|
4940
4901
|
const forbidden = ["target", "profile"];
|
|
4941
4902
|
if ("writers" in frontmatter) {
|
|
@@ -5006,13 +4967,19 @@ function validateFleetCommands(contract, registry) {
|
|
|
5006
4967
|
function builtinFleetsDir() {
|
|
5007
4968
|
return join2(resolvePackageRoot(), "src", "domains", "agents", "fleets");
|
|
5008
4969
|
}
|
|
4970
|
+
function fleetSources(cwd) {
|
|
4971
|
+
return [
|
|
4972
|
+
{ dir: builtinFleetsDir(), source: "builtin" },
|
|
4973
|
+
...enabledExtensionResourceRoots("fleets", cwd).sort((left, right) => left.source.localeCompare(right.source)).map((root) => ({ dir: root.path, source: "extension" })),
|
|
4974
|
+
{ dir: join2(clioConfigDir(), "fleets"), source: "user" },
|
|
4975
|
+
{ dir: fleetsDir(cwd), source: "project" }
|
|
4976
|
+
];
|
|
4977
|
+
}
|
|
5009
4978
|
function fleetContractPath(cwd, name) {
|
|
5010
|
-
const
|
|
5011
|
-
|
|
5012
|
-
|
|
5013
|
-
|
|
5014
|
-
const builtinPath = join2(builtinFleetsDir(), `${name}.md`);
|
|
5015
|
-
if (existsSync2(builtinPath)) return { path: builtinPath, source: "builtin" };
|
|
4979
|
+
for (const source of [...fleetSources(cwd)].reverse()) {
|
|
4980
|
+
const candidate = join2(source.dir, `${name}.md`);
|
|
4981
|
+
if (existsSync2(candidate)) return { path: candidate, source: source.source };
|
|
4982
|
+
}
|
|
5016
4983
|
return null;
|
|
5017
4984
|
}
|
|
5018
4985
|
function loadFleetContract(cwd, name) {
|
|
@@ -5041,11 +5008,7 @@ function listFleetContracts(cwd) {
|
|
|
5041
5008
|
registryError = err instanceof Error ? err.message : String(err);
|
|
5042
5009
|
}
|
|
5043
5010
|
const listings = /* @__PURE__ */ new Map();
|
|
5044
|
-
const sources =
|
|
5045
|
-
{ dir: builtinFleetsDir(), source: "builtin" },
|
|
5046
|
-
{ dir: join2(clioConfigDir(), "fleets"), source: "user" },
|
|
5047
|
-
{ dir: fleetsDir(cwd), source: "project" }
|
|
5048
|
-
];
|
|
5011
|
+
const sources = fleetSources(cwd);
|
|
5049
5012
|
for (const { dir, source } of sources) {
|
|
5050
5013
|
for (const file of listDirectory(dir)) {
|
|
5051
5014
|
const path = join2(dir, file);
|
|
@@ -5090,9 +5053,9 @@ function renderFleetPrompt(body, vars) {
|
|
|
5090
5053
|
}
|
|
5091
5054
|
|
|
5092
5055
|
export {
|
|
5093
|
-
parseFrontmatter,
|
|
5094
5056
|
FLEET_COMMAND_BASE_ENV,
|
|
5095
5057
|
loadFleetCommands,
|
|
5058
|
+
normalizeWriteBoundaryEntry,
|
|
5096
5059
|
normalizeWriteBoundary,
|
|
5097
5060
|
writeBoundaryCovers,
|
|
5098
5061
|
describeWriteBoundary,
|
|
@@ -5110,4 +5073,4 @@ export {
|
|
|
5110
5073
|
listFleetContracts,
|
|
5111
5074
|
renderFleetPrompt
|
|
5112
5075
|
};
|
|
5113
|
-
//# sourceMappingURL=chunk-
|
|
5076
|
+
//# sourceMappingURL=chunk-HPCTNZM2.js.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
printError
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-XK56QHLX.js";
|
|
5
5
|
import {
|
|
6
6
|
source_default
|
|
7
7
|
} from "./chunk-5TSRNF4G.js";
|
|
8
8
|
import {
|
|
9
9
|
authStoragePath
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-EQ63NRB7.js";
|
|
11
11
|
import {
|
|
12
12
|
init_esm_shims
|
|
13
13
|
} from "./chunk-3R73A4XB.js";
|
|
@@ -35,4 +35,4 @@ export {
|
|
|
35
35
|
printPlaintextCredentialWarning,
|
|
36
36
|
credentialWriteFailed
|
|
37
37
|
};
|
|
38
|
-
//# sourceMappingURL=chunk-
|
|
38
|
+
//# sourceMappingURL=chunk-IFBNV6H6.js.map
|