@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
|
@@ -15,6 +15,7 @@ import type { CostProvenance, RuntimeTargetSnapshot } from "../providers/index.j
|
|
|
15
15
|
import type { RunToolBudgetEnvelope } from "./budget-envelope.js";
|
|
16
16
|
import type { ExecutionRole, GateTopologyRole } from "./execution-role.js";
|
|
17
17
|
import type { DispatchIntent } from "./intent.js";
|
|
18
|
+
import type { DispatchPathScopeProvenance } from "./path-scope.js";
|
|
18
19
|
import type { RouteDecisionV1 } from "./route-decision.js";
|
|
19
20
|
import type { RoutingIntent } from "./routing-intent.js";
|
|
20
21
|
|
|
@@ -125,12 +126,16 @@ export interface RunPersonaOverride {
|
|
|
125
126
|
|
|
126
127
|
/**
|
|
127
128
|
* Effective project-context decision for a run, recorded on every receipt so
|
|
128
|
-
* evidence can prove what a worker saw without rehashing. `tier
|
|
129
|
-
*
|
|
130
|
-
* pre-provenance receipt where the
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
* (
|
|
129
|
+
* evidence can prove what a worker saw without rehashing. `tier` is the
|
|
130
|
+
* recipe's CLIO-CODER.md handbook policy and is written explicitly: `none`
|
|
131
|
+
* distinguishes "policy said none" from a pre-provenance receipt where the
|
|
132
|
+
* whole block is absent. `chars` and `contentHash` describe every structured
|
|
133
|
+
* message that was actually sent, whatever the tier, and `sections` names
|
|
134
|
+
* them: `workspace-root` (sent under both tiers, so a none-tier run still
|
|
135
|
+
* records characters), `clio-md` (bounded only), and
|
|
136
|
+
* `verification-expectations` (bounded only, never for ACP delegation). A
|
|
137
|
+
* none-tier block naming only `workspace-root` is a consistent record; the
|
|
138
|
+
* trust adapter treats any other none-tier content as contradictory.
|
|
134
139
|
*/
|
|
135
140
|
export interface RunProjectContextProvenance {
|
|
136
141
|
tier: "none" | "bounded";
|
|
@@ -321,7 +326,7 @@ export interface RunPhaseDurations {
|
|
|
321
326
|
* bumping one without the other is a compile error.
|
|
322
327
|
*/
|
|
323
328
|
export interface RunReceiptIntegrity {
|
|
324
|
-
version:
|
|
329
|
+
version: 20;
|
|
325
330
|
algorithm: "sha256";
|
|
326
331
|
digest: string;
|
|
327
332
|
}
|
|
@@ -714,6 +719,8 @@ export interface RunReceipt {
|
|
|
714
719
|
task: string;
|
|
715
720
|
/** Normalized dispatch intent admitted before worker execution. */
|
|
716
721
|
intent?: DispatchIntent;
|
|
722
|
+
/** Resolved policy-bearing paths with field source and confidence, without source prose. */
|
|
723
|
+
pathScope?: DispatchPathScopeProvenance;
|
|
717
724
|
/** Integrity-sealed recipe policy, invocation request, effective phase, and admission reasons. */
|
|
718
725
|
budget?: RunToolBudgetEnvelope;
|
|
719
726
|
/** Proof of briefing content without copying its prose into the receipt. */
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
import path from "node:path";
|
|
9
9
|
import { THINKING_LEVELS, type ThinkingLevel } from "../../core/defaults.js";
|
|
10
|
+
import { asDirectoryPathBoundary, resolvePathBoundary } from "../../core/path-boundary.js";
|
|
10
11
|
import { cloneValidatedResponseSchema } from "../../core/response-schema.js";
|
|
11
12
|
import { isToolProfileName, type ToolProfileName } from "../../tools/profiles.js";
|
|
12
13
|
import type { AgentProduct } from "../agents/spec.js";
|
|
@@ -482,8 +483,8 @@ export function validateJobSpec(spec: unknown): Validated {
|
|
|
482
483
|
}
|
|
483
484
|
if (isDispatchIntent(spec.intent) && spec.intent.writeRoots.length > 0 && Array.isArray(spec.writeRoots)) {
|
|
484
485
|
const jobCwd = typeof spec.cwd === "string" && spec.cwd.length > 0 ? spec.cwd : process.cwd();
|
|
485
|
-
const legacy = [...new Set(spec.writeRoots.map((root) =>
|
|
486
|
-
const declared = [...new Set(spec.intent.writeRoots.map((root) =>
|
|
486
|
+
const legacy = [...new Set(spec.writeRoots.map((root) => resolvePathBoundary(jobCwd, String(root))))].sort();
|
|
487
|
+
const declared = [...new Set(spec.intent.writeRoots.map((root) => resolvePathBoundary(jobCwd, root)))].sort();
|
|
487
488
|
if (JSON.stringify(legacy) !== JSON.stringify(declared)) errors.push("intent_write_roots_contradiction");
|
|
488
489
|
}
|
|
489
490
|
|
|
@@ -597,7 +598,9 @@ export function validateJobSpec(spec: unknown): Validated {
|
|
|
597
598
|
: undefined;
|
|
598
599
|
if (effectiveWriteRoots !== undefined) {
|
|
599
600
|
const jobCwd = typeof spec.cwd === "string" && spec.cwd.length > 0 ? spec.cwd : process.cwd();
|
|
600
|
-
out.writeRoots =
|
|
601
|
+
out.writeRoots = isDispatchIntent(spec.intent)
|
|
602
|
+
? effectiveWriteRoots.map((root) => resolvePathBoundary(jobCwd, String(root)))
|
|
603
|
+
: effectiveWriteRoots.map((root) => asDirectoryPathBoundary(path.resolve(jobCwd, String(root))));
|
|
601
604
|
}
|
|
602
605
|
if (typeof spec.requestOrigin === "string" && VALID_REQUEST_ORIGINS.has(spec.requestOrigin)) {
|
|
603
606
|
out.requestOrigin = spec.requestOrigin as DispatchRequestOrigin;
|
|
@@ -26,10 +26,12 @@
|
|
|
26
26
|
|
|
27
27
|
import { type ChildProcess, spawn } from "node:child_process";
|
|
28
28
|
import { join } from "node:path";
|
|
29
|
+
import { performance } from "node:perf_hooks";
|
|
29
30
|
import { withClioAgentEnvironment } from "../../core/agent-environment.js";
|
|
30
31
|
import { enableClioCompileCache, workerCompileCacheEnvironment } from "../../core/compile-cache.js";
|
|
31
32
|
import { resolvePackageRoot } from "../../core/package-root.js";
|
|
32
33
|
import type { WorkerSpec } from "../../worker/spec-contract.js";
|
|
34
|
+
import type { HeartbeatStamp } from "./heartbeat.js";
|
|
33
35
|
import {
|
|
34
36
|
type AgentLedgerBody,
|
|
35
37
|
type ApprovedWorkerIdentity,
|
|
@@ -71,7 +73,7 @@ export interface SpawnedWorker {
|
|
|
71
73
|
promise: Promise<SpawnedWorkerResult>;
|
|
72
74
|
events: AsyncIterableIterator<unknown>;
|
|
73
75
|
abort(): void;
|
|
74
|
-
heartbeatAt:
|
|
76
|
+
heartbeatAt: HeartbeatStamp;
|
|
75
77
|
/**
|
|
76
78
|
* Write one JSON line to the worker's open stdin (the same line protocol
|
|
77
79
|
* that carried the spec). Returns false when the worker has exited, its
|
|
@@ -134,15 +136,14 @@ export interface WorkerProcessOptions {
|
|
|
134
136
|
/** How long bulk output may precede the announce before the peer is refused. */
|
|
135
137
|
attestationGraceMs?: number;
|
|
136
138
|
/**
|
|
137
|
-
*
|
|
138
|
-
* a wall-clock instant
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
* two wall-clock reads taken either side of an interval orders them backward
|
|
142
|
-
* on any host that resyncs its clock in between. A test injects the steppable
|
|
143
|
-
* clock from tests/harness/clock.ts here and asserts on that instead.
|
|
139
|
+
* Wall clock behind the heartbeat anchor, defaulting to `Date.now`. The
|
|
140
|
+
* anchor stays a wall-clock instant because the ledger and evidence record
|
|
141
|
+
* serialize the derived heartbeat as ISO-8601 for an operator to read. This
|
|
142
|
+
* clock is read once; later heartbeat instants add a monotonic span to it.
|
|
144
143
|
*/
|
|
145
144
|
now?: () => number;
|
|
145
|
+
/** Monotonic clock used for heartbeat spans, defaulting to `performance.now`. */
|
|
146
|
+
monotonicNow?: () => number;
|
|
146
147
|
}
|
|
147
148
|
|
|
148
149
|
/**
|
|
@@ -192,6 +193,7 @@ export function spawnWorkerProcess(
|
|
|
192
193
|
const shutdownGraceMs = opts?.shutdownGraceMs ?? DEFAULT_SHUTDOWN_GRACE_MS;
|
|
193
194
|
const attestationGraceMs = opts?.attestationGraceMs ?? DEFAULT_ATTESTATION_GRACE_MS;
|
|
194
195
|
const now = opts?.now ?? Date.now;
|
|
196
|
+
const monotonicNow = opts?.monotonicNow ?? (() => performance.now());
|
|
195
197
|
const approved = opts?.approvedIdentity ?? approvedIdentityForSpec(spec);
|
|
196
198
|
|
|
197
199
|
const child: ChildProcess = spawn(command, [...args], {
|
|
@@ -204,7 +206,19 @@ export function spawnWorkerProcess(
|
|
|
204
206
|
});
|
|
205
207
|
const pid = child.pid ?? null;
|
|
206
208
|
|
|
207
|
-
|
|
209
|
+
// One wall anchor plus a monotonic span keeps the persisted/display instant
|
|
210
|
+
// readable without ever asking a later wall-clock read how much time passed.
|
|
211
|
+
const heartbeatWallAnchor = now();
|
|
212
|
+
const heartbeatMonotonicAnchor = monotonicNow();
|
|
213
|
+
const heartbeatAt: HeartbeatStamp = {
|
|
214
|
+
current: heartbeatWallAnchor,
|
|
215
|
+
monotonic: heartbeatMonotonicAnchor,
|
|
216
|
+
};
|
|
217
|
+
const stampHeartbeat = (): void => {
|
|
218
|
+
const stamp = monotonicNow();
|
|
219
|
+
heartbeatAt.monotonic = stamp;
|
|
220
|
+
heartbeatAt.current = heartbeatWallAnchor + (stamp - heartbeatMonotonicAnchor);
|
|
221
|
+
};
|
|
208
222
|
|
|
209
223
|
const queue = createBoundedEventQueue();
|
|
210
224
|
const waiters: Array<(r: IteratorResult<unknown>) => void> = [];
|
|
@@ -233,7 +247,7 @@ export function spawnWorkerProcess(
|
|
|
233
247
|
}
|
|
234
248
|
|
|
235
249
|
function push(value: unknown): void {
|
|
236
|
-
|
|
250
|
+
stampHeartbeat();
|
|
237
251
|
const w = waiters.shift();
|
|
238
252
|
if (w) {
|
|
239
253
|
w({ value, done: false });
|
|
@@ -378,7 +392,7 @@ export function spawnWorkerProcess(
|
|
|
378
392
|
if (!announceAccepted) failAttestation(`Invalid worker attestation: ${frame.reason}`);
|
|
379
393
|
return;
|
|
380
394
|
}
|
|
381
|
-
|
|
395
|
+
stampHeartbeat();
|
|
382
396
|
if (frame.value.kind === "announce") {
|
|
383
397
|
if (announceAccepted || announceFailed) return;
|
|
384
398
|
const verdict = verifyWorkerAttestation(frame.value.attestation, approved);
|
|
@@ -8,6 +8,11 @@
|
|
|
8
8
|
* a path that changed cannot be pinned on one of them, and the plan compiler
|
|
9
9
|
* has already refused the case where more than one of them was allowed to
|
|
10
10
|
* write. Every step in a violating window fails, and the verdict says why.
|
|
11
|
+
*
|
|
12
|
+
* The window also carries what its runs recorded writing, which is what keeps
|
|
13
|
+
* the checkout diff from being read as authorship. A change nobody in the
|
|
14
|
+
* window recorded belongs to whoever else has the checkout open, and the
|
|
15
|
+
* verdict reports it without touching it.
|
|
11
16
|
*/
|
|
12
17
|
|
|
13
18
|
import { existsSync } from "node:fs";
|
|
@@ -16,9 +21,12 @@ import type { ExecutionPlan } from "./execution-plan.js";
|
|
|
16
21
|
import type { ExecutionWriteBoundaryOutcome } from "./execution-scheduler.js";
|
|
17
22
|
import {
|
|
18
23
|
assertWriteBoundaryInsideRoot,
|
|
24
|
+
assertWriteBoundaryVisibleToGit,
|
|
19
25
|
captureWorkspaceSnapshot,
|
|
20
26
|
enforceWriteBoundary,
|
|
21
27
|
type WorkspaceSnapshot,
|
|
28
|
+
type WriteBoundaryAttribution,
|
|
29
|
+
type WriteBoundaryAttributionDowngrade,
|
|
22
30
|
type WriteBoundaryVerdict,
|
|
23
31
|
writeWriteBoundaryVerdict,
|
|
24
32
|
} from "./write-boundary.js";
|
|
@@ -30,6 +38,15 @@ export interface WriteBoundaryEnforcerInput {
|
|
|
30
38
|
rootId: string;
|
|
31
39
|
/** Declared allowlist for a step, or undefined when it declares no boundary. */
|
|
32
40
|
boundaryFor(stepId: string): ReadonlyArray<string> | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* What the step's own run recorded writing, or null when the step has no
|
|
43
|
+
* closed write record: a code step running a registered command, a runtime
|
|
44
|
+
* that publishes no tool telemetry, a run whose telemetry had holes, or a run
|
|
45
|
+
* that shelled out or spawned a worker and could have written a path no
|
|
46
|
+
* argument names. Absent entirely means the caller offers no record at all,
|
|
47
|
+
* and every change outside the declaration is blamed on the window.
|
|
48
|
+
*/
|
|
49
|
+
recordedWritesFor?(stepId: string): ReadonlyArray<string> | WriteBoundaryAttribution | null;
|
|
33
50
|
/** Called once per closed window with the sealed verdict and where it landed. */
|
|
34
51
|
onVerdict?(verdict: WriteBoundaryVerdict, path: string): void;
|
|
35
52
|
}
|
|
@@ -54,6 +71,9 @@ export function preflightWriteBoundaries(plan: ExecutionPlan, root: string): voi
|
|
|
54
71
|
);
|
|
55
72
|
}
|
|
56
73
|
for (const step of declared) assertWriteBoundaryInsideRoot(root, step.writes ?? []);
|
|
74
|
+
// One question over the whole plan: an entry is refused for being invisible
|
|
75
|
+
// to git whichever step declared it, and the diagnostic names the path.
|
|
76
|
+
assertWriteBoundaryVisibleToGit(root, [...new Set(declared.flatMap((step) => [...(step.writes ?? [])]))]);
|
|
57
77
|
}
|
|
58
78
|
|
|
59
79
|
export function createWriteBoundaryEnforcer(input: WriteBoundaryEnforcerInput): WriteBoundaryEnforcer {
|
|
@@ -63,10 +83,50 @@ export function createWriteBoundaryEnforcer(input: WriteBoundaryEnforcerInput):
|
|
|
63
83
|
for (const stepId of stepIds) for (const entry of input.boundaryFor(stepId) ?? []) allow.add(entry);
|
|
64
84
|
return [...allow].sort();
|
|
65
85
|
};
|
|
86
|
+
/**
|
|
87
|
+
* The window's write witness. One step without a record makes the whole
|
|
88
|
+
* window's record incomplete: the steps share a checkout, so a change no
|
|
89
|
+
* other step wrote could still be the unobserved one's.
|
|
90
|
+
*/
|
|
91
|
+
const attributionFor = (stepIds: ReadonlyArray<string>): WriteBoundaryAttribution | undefined => {
|
|
92
|
+
const recordedWritesFor = input.recordedWritesFor;
|
|
93
|
+
if (recordedWritesFor === undefined) return undefined;
|
|
94
|
+
const recorded = new Set<string>();
|
|
95
|
+
const downgrades: WriteBoundaryAttributionDowngrade[] = [];
|
|
96
|
+
let complete = true;
|
|
97
|
+
for (const stepId of stepIds) {
|
|
98
|
+
const observed = recordedWritesFor(stepId);
|
|
99
|
+
if (observed === null) {
|
|
100
|
+
complete = false;
|
|
101
|
+
downgrades.push({
|
|
102
|
+
reason: "write_record_unavailable",
|
|
103
|
+
tool: null,
|
|
104
|
+
toolCallId: null,
|
|
105
|
+
runId: null,
|
|
106
|
+
stepId,
|
|
107
|
+
});
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (!("recorded" in observed)) {
|
|
111
|
+
for (const target of observed) recorded.add(target);
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
for (const target of observed.recorded) recorded.add(target);
|
|
115
|
+
if (!observed.complete) complete = false;
|
|
116
|
+
for (const downgrade of observed.downgrades ?? []) {
|
|
117
|
+
downgrades.push({ ...downgrade, stepId: downgrade.stepId ?? stepId });
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return { recorded: [...recorded].sort(), complete, downgrades };
|
|
121
|
+
};
|
|
66
122
|
return {
|
|
67
123
|
begin(window, stepIds) {
|
|
68
124
|
const allow = allowFor(stepIds);
|
|
69
125
|
assertWriteBoundaryInsideRoot(input.root, allow);
|
|
126
|
+
// Also checked whole-plan at preflight. Repeated here because a
|
|
127
|
+
// delegation plan splices steps into a running fleet, and their
|
|
128
|
+
// declarations reach this function without ever passing preflight.
|
|
129
|
+
assertWriteBoundaryVisibleToGit(input.root, allow);
|
|
70
130
|
open.set(window, { snapshot: captureWorkspaceSnapshot(input.root), allow });
|
|
71
131
|
},
|
|
72
132
|
async verify(window, stepIds) {
|
|
@@ -75,11 +135,13 @@ export function createWriteBoundaryEnforcer(input: WriteBoundaryEnforcerInput):
|
|
|
75
135
|
throw new Error(`write boundary: window '${window}' was verified without a snapshot`);
|
|
76
136
|
}
|
|
77
137
|
open.delete(window);
|
|
138
|
+
const attribution = attributionFor(stepIds);
|
|
78
139
|
const verdict = enforceWriteBoundary({
|
|
79
140
|
snapshot: pending.snapshot,
|
|
80
141
|
window,
|
|
81
142
|
stepIds,
|
|
82
143
|
allow: pending.allow,
|
|
144
|
+
...(attribution === undefined ? {} : { attribution }),
|
|
83
145
|
});
|
|
84
146
|
const path = writeWriteBoundaryVerdict(input.rootId, verdict);
|
|
85
147
|
input.onVerdict?.(verdict, path);
|