@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
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
artifactDefaultPath,
|
|
4
|
+
extractCommandCdTargets,
|
|
5
|
+
extractCommandWriteTargets
|
|
6
|
+
} from "./chunk-MV3K5QF2.js";
|
|
7
|
+
import {
|
|
8
|
+
canonicalizeExistingPath
|
|
9
|
+
} from "./chunk-ECH6PKUQ.js";
|
|
10
|
+
import {
|
|
11
|
+
ToolNames,
|
|
12
|
+
isBuiltinToolName
|
|
13
|
+
} from "./chunk-CGKSTWHD.js";
|
|
5
14
|
import {
|
|
6
15
|
init_esm_shims
|
|
7
16
|
} from "./chunk-3R73A4XB.js";
|
|
@@ -34,10 +43,425 @@ function parseJsonObjectPayload(text) {
|
|
|
34
43
|
return { ok: false, reason: parsedSomething ? "not-object" : "not-json" };
|
|
35
44
|
}
|
|
36
45
|
|
|
37
|
-
// src/domains/agents/
|
|
46
|
+
// src/domains/agents/spec.ts
|
|
38
47
|
init_esm_shims();
|
|
39
48
|
import { createHash } from "node:crypto";
|
|
49
|
+
|
|
50
|
+
// src/domains/safety/action-classifier.ts
|
|
51
|
+
init_esm_shims();
|
|
40
52
|
import path from "node:path";
|
|
53
|
+
var GIT_DESTRUCTIVE_PATTERNS = [
|
|
54
|
+
{ name: "git-push-force-long", re: /\bgit\s+push\s+--force\b/i },
|
|
55
|
+
{ name: "git-push-force-short", re: /\bgit\s+push\s+-f\b/i },
|
|
56
|
+
{ name: "git-reset-hard", re: /\bgit\s+reset\s+--hard\b/i },
|
|
57
|
+
{ name: "git-clean-fd", re: /\bgit\s+clean\s+-fd?\b/i },
|
|
58
|
+
{ name: "git-checkout-dot", re: /\bgit\s+checkout\s+--\s+\./i },
|
|
59
|
+
{ name: "git-branch-D", re: /\bgit\s+branch\s+-D\b/i },
|
|
60
|
+
{ name: "git-restore-source", re: /\bgit\s+restore\s+--source\b/i }
|
|
61
|
+
];
|
|
62
|
+
var SYSTEM_MODIFY_PATTERNS = [
|
|
63
|
+
{ name: "sudo-or-doas", re: /\b(sudo|doas)\b/i },
|
|
64
|
+
// allow rm -rf /tmp/... and /var/tmp/... but flag everything else rooted at /
|
|
65
|
+
{ name: "rm-rf-root", re: /\brm\s+-rf?\s+\/(?!(tmp|var\/tmp)(?:\/|\s|$))/i },
|
|
66
|
+
{ name: "apt-install", re: /\bapt(-get)?\s+(install|remove|purge)/i },
|
|
67
|
+
{ name: "brew-install", re: /\bbrew\s+(install|uninstall|reinstall)/i },
|
|
68
|
+
{ name: "npm-install-global", re: /\bnpm\s+install\s+-g\b/i },
|
|
69
|
+
{ name: "pip-install", re: /\bpip\s+install\b/i },
|
|
70
|
+
{ name: "systemctl", re: /\bsystemctl\s+/i },
|
|
71
|
+
{ name: "chmod-root", re: /\bchmod\s+[0-7]{3,4}\s+\//i },
|
|
72
|
+
{ name: "chown", re: /\bchown\s+/i }
|
|
73
|
+
];
|
|
74
|
+
var SYSTEM_WRITE_ROOT_PREFIXES = ["/etc", "/usr", "/var", "/bin", "/sbin", "/run"];
|
|
75
|
+
var SYSTEM_WRITE_EXEMPT_PREFIXES = ["/var/tmp", "/var/folders"];
|
|
76
|
+
function isUnderPrefix(abs, prefix) {
|
|
77
|
+
return abs === prefix || abs.startsWith(`${prefix}/`);
|
|
78
|
+
}
|
|
79
|
+
function baseClassify(tool) {
|
|
80
|
+
switch (tool) {
|
|
81
|
+
case ToolNames.Read:
|
|
82
|
+
case ToolNames.Grep:
|
|
83
|
+
case ToolNames.Find:
|
|
84
|
+
case ToolNames.Ls:
|
|
85
|
+
case ToolNames.WebFetch:
|
|
86
|
+
case ToolNames.Git:
|
|
87
|
+
case ToolNames.CodeNav:
|
|
88
|
+
case ToolNames.Context:
|
|
89
|
+
case ToolNames.Monitor:
|
|
90
|
+
case ToolNames.AskUser:
|
|
91
|
+
case ToolNames.CredentialPresent:
|
|
92
|
+
// tasks pick mutates only Clio-owned session-ledger and project-local
|
|
93
|
+
// .clio-coder runtime state, never source-workspace files. By intentional
|
|
94
|
+
// policy it stays read class and ungated; the tool itself still requires
|
|
95
|
+
// a durable operator task id before it can mutate either store.
|
|
96
|
+
case ToolNames.Tasks:
|
|
97
|
+
// ledger posts a typed contribution to a coordination board and reads a
|
|
98
|
+
// local mirror. Neither touches the workspace, so it is never gated
|
|
99
|
+
// behind a confirmation.
|
|
100
|
+
case ToolNames.Ledger:
|
|
101
|
+
return "read";
|
|
102
|
+
case ToolNames.Write:
|
|
103
|
+
case ToolNames.Edit:
|
|
104
|
+
case ToolNames.Artifact:
|
|
105
|
+
return "write";
|
|
106
|
+
case ToolNames.Bash:
|
|
107
|
+
case ToolNames.Verify:
|
|
108
|
+
return "execute";
|
|
109
|
+
case ToolNames.Dispatch:
|
|
110
|
+
case ToolNames.Steer:
|
|
111
|
+
return "dispatch";
|
|
112
|
+
default:
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function scanStringOf(args) {
|
|
117
|
+
if (!args) return "";
|
|
118
|
+
const parts = [];
|
|
119
|
+
for (const value of Object.values(args)) {
|
|
120
|
+
if (value == null) continue;
|
|
121
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
122
|
+
parts.push(String(value));
|
|
123
|
+
} else {
|
|
124
|
+
try {
|
|
125
|
+
parts.push(JSON.stringify(value));
|
|
126
|
+
} catch {
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return parts.join(" ");
|
|
131
|
+
}
|
|
132
|
+
function matchFirst(patterns, haystack) {
|
|
133
|
+
for (const p of patterns) {
|
|
134
|
+
if (p.re.test(haystack)) return p;
|
|
135
|
+
}
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
function resolveCandidate(p, baseCwd) {
|
|
139
|
+
if (p.startsWith("~")) return p;
|
|
140
|
+
const base = canonicalizeExistingPath(path.resolve(baseCwd ?? process.cwd()));
|
|
141
|
+
const resolved = path.isAbsolute(p) ? path.resolve(p) : path.resolve(base, p);
|
|
142
|
+
return canonicalizeExistingPath(resolved);
|
|
143
|
+
}
|
|
144
|
+
function isInsideCwd(abs) {
|
|
145
|
+
const cwd = canonicalizeExistingPath(path.resolve(process.cwd()));
|
|
146
|
+
const candidate = canonicalizeExistingPath(abs);
|
|
147
|
+
const rel = path.relative(cwd, candidate);
|
|
148
|
+
return rel === "" || !rel.startsWith("..") && !path.isAbsolute(rel);
|
|
149
|
+
}
|
|
150
|
+
function writePathClass(pathArg, baseCwd) {
|
|
151
|
+
if (pathArg.startsWith("~")) {
|
|
152
|
+
return { cls: "system_modify", reason: `write-path-home-escape: ${pathArg}` };
|
|
153
|
+
}
|
|
154
|
+
const abs = resolveCandidate(pathArg, baseCwd);
|
|
155
|
+
const exempt = SYSTEM_WRITE_EXEMPT_PREFIXES.some((prefix) => isUnderPrefix(abs, prefix));
|
|
156
|
+
if (!exempt) {
|
|
157
|
+
for (const prefix of SYSTEM_WRITE_ROOT_PREFIXES) {
|
|
158
|
+
if (isUnderPrefix(abs, prefix)) {
|
|
159
|
+
return { cls: "system_modify", reason: `write-path-system-root: ${prefix}` };
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (!isInsideCwd(abs)) {
|
|
164
|
+
return { cls: "system_modify", reason: `write-path-outside-cwd: ${abs}` };
|
|
165
|
+
}
|
|
166
|
+
return { cls: "write" };
|
|
167
|
+
}
|
|
168
|
+
function extractWritePath(tool, args) {
|
|
169
|
+
const candidate = args?.path ?? args?.file_path ?? args?.filePath;
|
|
170
|
+
if (typeof candidate === "string" && candidate.length > 0) return candidate;
|
|
171
|
+
return tool === ToolNames.Artifact ? artifactDefaultPath(args?.kind) : null;
|
|
172
|
+
}
|
|
173
|
+
function classify(call) {
|
|
174
|
+
const base = baseClassify(call.tool);
|
|
175
|
+
if (base === null) {
|
|
176
|
+
return { actionClass: "unknown", reasons: [`unknown tool: ${call.tool}`] };
|
|
177
|
+
}
|
|
178
|
+
const reasons = [];
|
|
179
|
+
if (call.tool === ToolNames.Bash) {
|
|
180
|
+
const scan = scanStringOf(call.args);
|
|
181
|
+
const gitHit = matchFirst(GIT_DESTRUCTIVE_PATTERNS, scan);
|
|
182
|
+
if (gitHit) {
|
|
183
|
+
return { actionClass: "git_destructive", reasons: [`pattern:${gitHit.name}`] };
|
|
184
|
+
}
|
|
185
|
+
const sysHit = matchFirst(SYSTEM_MODIFY_PATTERNS, scan);
|
|
186
|
+
if (sysHit) {
|
|
187
|
+
return { actionClass: "system_modify", reasons: [`pattern:${sysHit.name}`] };
|
|
188
|
+
}
|
|
189
|
+
const command = typeof call.args?.command === "string" ? call.args.command : null;
|
|
190
|
+
const argCwd = typeof call.args?.cwd === "string" && call.args.cwd.length > 0 ? call.args.cwd : void 0;
|
|
191
|
+
if (command !== null) {
|
|
192
|
+
const targetReasons = [];
|
|
193
|
+
for (const target of extractCommandWriteTargets(command)) {
|
|
194
|
+
const decision = writePathClass(target, argCwd);
|
|
195
|
+
if (decision.cls === "system_modify") {
|
|
196
|
+
targetReasons.push(decision.reason ?? `bash-write-target: ${target}`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
for (const target of extractCommandCdTargets(command)) {
|
|
200
|
+
if (target.startsWith("~")) {
|
|
201
|
+
targetReasons.push(`bash-cd-home-escape: ${target}`);
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
const abs = resolveCandidate(target, argCwd);
|
|
205
|
+
if (!isInsideCwd(abs)) {
|
|
206
|
+
targetReasons.push(`bash-cd-outside-workspace: ${abs}`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (targetReasons.length > 0) {
|
|
210
|
+
return { actionClass: "system_modify", reasons: targetReasons };
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return { actionClass: "execute", reasons };
|
|
214
|
+
}
|
|
215
|
+
if (base === "write") {
|
|
216
|
+
const pathArg = extractWritePath(call.tool, call.args);
|
|
217
|
+
if (pathArg) {
|
|
218
|
+
const decision = writePathClass(pathArg);
|
|
219
|
+
if (decision.cls === "system_modify") {
|
|
220
|
+
return { actionClass: "system_modify", reasons: decision.reason ? [decision.reason] : [] };
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return { actionClass: "write", reasons };
|
|
224
|
+
}
|
|
225
|
+
return { actionClass: base, reasons };
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// src/domains/agents/spec.ts
|
|
229
|
+
var AGENT_AUTOMATION_AUTHORITIES = ["read-only", "verification", "artifact-write", "workspace-edit"];
|
|
230
|
+
var AGENT_PRODUCTS = ["orientation"];
|
|
231
|
+
var AGENT_CATEGORIES = [
|
|
232
|
+
"explore",
|
|
233
|
+
"plan",
|
|
234
|
+
"research",
|
|
235
|
+
"implement",
|
|
236
|
+
"quality",
|
|
237
|
+
"science",
|
|
238
|
+
"evolution",
|
|
239
|
+
"operations",
|
|
240
|
+
"internal"
|
|
241
|
+
];
|
|
242
|
+
var AGENT_CAPABILITY_CLASSES = [
|
|
243
|
+
"read-only",
|
|
244
|
+
"artifact-write",
|
|
245
|
+
"workspace-edit",
|
|
246
|
+
"verification",
|
|
247
|
+
"orchestration",
|
|
248
|
+
"internal"
|
|
249
|
+
];
|
|
250
|
+
var AGENT_LATENCY_CLASSES = ["fast", "balanced", "deep"];
|
|
251
|
+
var AGENT_AUDIENCES = ["base", "shadow", "custom", "internal"];
|
|
252
|
+
var AGENT_PROJECT_CONTEXT_TIERS = ["none", "bounded"];
|
|
253
|
+
function includes(values, value) {
|
|
254
|
+
return typeof value === "string" && values.includes(value);
|
|
255
|
+
}
|
|
256
|
+
function isAgentCategory(value) {
|
|
257
|
+
return includes(AGENT_CATEGORIES, value);
|
|
258
|
+
}
|
|
259
|
+
function isAgentCapabilityClass(value) {
|
|
260
|
+
return includes(AGENT_CAPABILITY_CLASSES, value);
|
|
261
|
+
}
|
|
262
|
+
function isAgentLatencyClass(value) {
|
|
263
|
+
return includes(AGENT_LATENCY_CLASSES, value);
|
|
264
|
+
}
|
|
265
|
+
function isAgentAudience(value) {
|
|
266
|
+
return includes(AGENT_AUDIENCES, value);
|
|
267
|
+
}
|
|
268
|
+
function isAgentProjectContextTier(value) {
|
|
269
|
+
return includes(AGENT_PROJECT_CONTEXT_TIERS, value);
|
|
270
|
+
}
|
|
271
|
+
function isAgentProduct(value) {
|
|
272
|
+
return includes(AGENT_PRODUCTS, value);
|
|
273
|
+
}
|
|
274
|
+
function actionClassesForTools(tools) {
|
|
275
|
+
const actions = /* @__PURE__ */ new Set();
|
|
276
|
+
for (const tool of tools) actions.add(classify({ tool }).actionClass);
|
|
277
|
+
return actions;
|
|
278
|
+
}
|
|
279
|
+
function normalizeTools(recipe) {
|
|
280
|
+
const seen = /* @__PURE__ */ new Set();
|
|
281
|
+
const tools = [];
|
|
282
|
+
for (const tool of recipe.tools) {
|
|
283
|
+
if (typeof tool !== "string" || tool.trim().length === 0) {
|
|
284
|
+
throw new Error(`agent recipe '${recipe.id}' declares an invalid tool name`);
|
|
285
|
+
}
|
|
286
|
+
if (seen.has(tool)) continue;
|
|
287
|
+
seen.add(tool);
|
|
288
|
+
tools.push(isBuiltinToolName(tool) ? tool : tool);
|
|
289
|
+
}
|
|
290
|
+
return tools;
|
|
291
|
+
}
|
|
292
|
+
function asToolName(tool) {
|
|
293
|
+
return isBuiltinToolName(tool) ? tool : tool;
|
|
294
|
+
}
|
|
295
|
+
function normalizeToolRequirements(recipe, tools) {
|
|
296
|
+
if (!recipe.toolRequirements) {
|
|
297
|
+
throw new Error(`agent recipe '${recipe.id}' must declare tools.required and tools.optional`);
|
|
298
|
+
}
|
|
299
|
+
const declared = new Set(tools);
|
|
300
|
+
const required = recipe.toolRequirements.required.map((requirement, index) => {
|
|
301
|
+
if (typeof requirement === "string") return asToolName(requirement);
|
|
302
|
+
if (!Array.isArray(requirement.anyOf) || requirement.anyOf.length === 0) {
|
|
303
|
+
throw new Error(`agent recipe '${recipe.id}' tools.required[${index}].anyOf must be non-empty`);
|
|
304
|
+
}
|
|
305
|
+
return { anyOf: requirement.anyOf.map(asToolName) };
|
|
306
|
+
});
|
|
307
|
+
const optional = recipe.toolRequirements.optional.map(asToolName);
|
|
308
|
+
const mentioned = required.flatMap(
|
|
309
|
+
(requirement) => typeof requirement === "string" ? [requirement] : requirement.anyOf
|
|
310
|
+
);
|
|
311
|
+
for (const tool of [...mentioned, ...optional]) {
|
|
312
|
+
if (!declared.has(tool)) throw new Error(`agent recipe '${recipe.id}' requirement '${tool}' is not declared`);
|
|
313
|
+
}
|
|
314
|
+
if ((/* @__PURE__ */ new Set([...mentioned, ...optional])).size !== mentioned.length + optional.length) {
|
|
315
|
+
throw new Error(`agent recipe '${recipe.id}' contains duplicate tool requirements`);
|
|
316
|
+
}
|
|
317
|
+
if ((/* @__PURE__ */ new Set([...mentioned, ...optional])).size !== tools.length) {
|
|
318
|
+
throw new Error(`agent recipe '${recipe.id}' has declared tools without required/optional semantics`);
|
|
319
|
+
}
|
|
320
|
+
return { required, optional };
|
|
321
|
+
}
|
|
322
|
+
function resolveAgentToolCompatibility(spec, effectiveTools, options) {
|
|
323
|
+
const available = new Set(effectiveTools);
|
|
324
|
+
const missingRequired = [];
|
|
325
|
+
for (const requirement of spec.toolRequirements.required) {
|
|
326
|
+
if (typeof requirement === "string") {
|
|
327
|
+
if (!available.has(requirement)) missingRequired.push(requirement);
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
330
|
+
if (!requirement.anyOf.some((tool) => available.has(tool))) {
|
|
331
|
+
missingRequired.push(`anyOf(${requirement.anyOf.join("|")})`);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
if (available.has(ToolNames.Dispatch) && !options.mediatesDispatch) {
|
|
335
|
+
missingRequired.push("dispatch(runtime mediation unavailable)");
|
|
336
|
+
}
|
|
337
|
+
return {
|
|
338
|
+
compatible: missingRequired.length === 0,
|
|
339
|
+
missingRequired,
|
|
340
|
+
lostOptional: spec.toolRequirements.optional.filter((tool) => !available.has(tool))
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
function normalizeAgentSpec(recipe) {
|
|
344
|
+
const tools = normalizeTools(recipe);
|
|
345
|
+
const toolRequirements = normalizeToolRequirements(recipe, tools);
|
|
346
|
+
return {
|
|
347
|
+
version: recipe.version,
|
|
348
|
+
id: recipe.id,
|
|
349
|
+
name: recipe.name,
|
|
350
|
+
description: recipe.description,
|
|
351
|
+
source: recipe.source,
|
|
352
|
+
filepath: recipe.filepath,
|
|
353
|
+
tools,
|
|
354
|
+
toolRequirements,
|
|
355
|
+
category: recipe.category,
|
|
356
|
+
capabilityClass: recipe.capabilityClass,
|
|
357
|
+
latencyClass: recipe.latencyClass,
|
|
358
|
+
projectContextTier: recipe.projectContextTier,
|
|
359
|
+
audience: recipe.audience,
|
|
360
|
+
tags: recipe.tags,
|
|
361
|
+
skills: recipe.skills,
|
|
362
|
+
resultContract: recipe.resultContract,
|
|
363
|
+
...recipe.product !== void 0 ? { product: recipe.product } : {},
|
|
364
|
+
budget: recipe.budget,
|
|
365
|
+
body: recipe.body
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
function agentSpecFingerprint(spec) {
|
|
369
|
+
const requirement = (entry) => typeof entry === "string" ? entry : `anyOf(${[...entry.anyOf].sort().join("|")})`;
|
|
370
|
+
const payload = JSON.stringify({
|
|
371
|
+
id: spec.id,
|
|
372
|
+
tools: [...spec.tools].sort(),
|
|
373
|
+
required: spec.toolRequirements.required.map(requirement).sort(),
|
|
374
|
+
optional: [...spec.toolRequirements.optional].sort(),
|
|
375
|
+
capabilityClass: spec.capabilityClass,
|
|
376
|
+
latencyClass: spec.latencyClass,
|
|
377
|
+
projectContextTier: spec.projectContextTier,
|
|
378
|
+
audience: spec.audience,
|
|
379
|
+
skills: [...spec.skills].sort(),
|
|
380
|
+
resultContract: spec.resultContract,
|
|
381
|
+
budget: spec.budget,
|
|
382
|
+
body: createHash("sha256").update(spec.body, "utf8").digest("hex")
|
|
383
|
+
});
|
|
384
|
+
return createHash("sha256").update(payload, "utf8").digest("hex");
|
|
385
|
+
}
|
|
386
|
+
function isUserVisibleAgent(spec) {
|
|
387
|
+
return spec.audience === "base" || spec.audience === "custom";
|
|
388
|
+
}
|
|
389
|
+
function isShadowAgent(spec) {
|
|
390
|
+
return spec.audience === "shadow" || spec.audience === "internal";
|
|
391
|
+
}
|
|
392
|
+
function agentSpecPolicyErrors(spec) {
|
|
393
|
+
const errors = [];
|
|
394
|
+
const actions = actionClassesForTools(spec.tools);
|
|
395
|
+
const requiredGroups = spec.toolRequirements.required.map(
|
|
396
|
+
(requirement) => typeof requirement === "string" ? [requirement] : requirement.anyOf
|
|
397
|
+
);
|
|
398
|
+
const requiresTool = (tool) => requiredGroups.some((group) => group.length > 0 && group.every((candidate) => candidate === tool));
|
|
399
|
+
const requiresMutation = requiredGroups.some(
|
|
400
|
+
(group) => group.length > 0 && group.every((tool) => tool === ToolNames.Write || tool === ToolNames.Edit)
|
|
401
|
+
);
|
|
402
|
+
if (spec.capabilityClass === "workspace-edit" && (!requiresTool(ToolNames.Read) || !requiresMutation)) {
|
|
403
|
+
errors.push(`workspace-edit agent '${spec.id}' must require read and write|edit`);
|
|
404
|
+
}
|
|
405
|
+
if (spec.capabilityClass === "verification" && !requiresTool(ToolNames.Verify)) {
|
|
406
|
+
errors.push(`verification agent '${spec.id}' must require verify`);
|
|
407
|
+
}
|
|
408
|
+
if (spec.capabilityClass === "artifact-write" && !requiresTool(ToolNames.Artifact)) {
|
|
409
|
+
errors.push(`artifact-write agent '${spec.id}' must require artifact`);
|
|
410
|
+
}
|
|
411
|
+
if (spec.skills.length > 0 && !requiresTool(ToolNames.Context)) {
|
|
412
|
+
errors.push(`agent '${spec.id}' must require context for bound skills`);
|
|
413
|
+
}
|
|
414
|
+
if (spec.capabilityClass === "orchestration" && spec.tools.includes(ToolNames.Dispatch) && !requiresTool(ToolNames.Dispatch)) {
|
|
415
|
+
errors.push(`orchestration agent '${spec.id}' must require dispatch when it is declared`);
|
|
416
|
+
}
|
|
417
|
+
const toolList = spec.tools.join(", ");
|
|
418
|
+
if (spec.capabilityClass === "read-only") {
|
|
419
|
+
for (const action of actions) {
|
|
420
|
+
if (action !== "read") errors.push(`read-only agent '${spec.id}' requests ${action} tools (${toolList})`);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
if (spec.capabilityClass === "artifact-write") {
|
|
424
|
+
for (const tool of spec.tools) {
|
|
425
|
+
const action = classify({ tool }).actionClass;
|
|
426
|
+
if (action === "execute" || action === "dispatch" || action === "system_modify" || action === "git_destructive") {
|
|
427
|
+
errors.push(`artifact-write agent '${spec.id}' requests ${action} tool '${tool}'`);
|
|
428
|
+
}
|
|
429
|
+
if (action === "write" && tool !== ToolNames.Artifact) {
|
|
430
|
+
errors.push(`artifact-write agent '${spec.id}' can only write terminal artifacts; got '${tool}'`);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
if (spec.capabilityClass === "verification") {
|
|
435
|
+
for (const tool of spec.tools) {
|
|
436
|
+
const action = classify({ tool }).actionClass;
|
|
437
|
+
if (action === "write" || action === "dispatch" || action === "system_modify" || action === "git_destructive") {
|
|
438
|
+
errors.push(`verification agent '${spec.id}' must not request ${action} tool '${tool}'`);
|
|
439
|
+
}
|
|
440
|
+
if (tool === ToolNames.Bash)
|
|
441
|
+
errors.push(`verification agent '${spec.id}' must use typed validation tools, not bash`);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
if (spec.capabilityClass !== "orchestration" && spec.tools.includes(ToolNames.Dispatch)) {
|
|
445
|
+
errors.push(`agent '${spec.id}' exposes dispatch without orchestration capability`);
|
|
446
|
+
}
|
|
447
|
+
if (spec.tools.includes(ToolNames.AskUser)) {
|
|
448
|
+
errors.push(`agent '${spec.id}' exposes ask_user, which is only available to the orchestrator`);
|
|
449
|
+
}
|
|
450
|
+
if (spec.skills.length > 0 && !spec.tools.includes(ToolNames.Context)) {
|
|
451
|
+
errors.push(`agent '${spec.id}' declares skills but does not expose context`);
|
|
452
|
+
}
|
|
453
|
+
return errors;
|
|
454
|
+
}
|
|
455
|
+
function assertAgentSpecPolicy(spec) {
|
|
456
|
+
const errors = agentSpecPolicyErrors(spec);
|
|
457
|
+
if (errors.length > 0) throw new Error(`agent policy violation:
|
|
458
|
+
${errors.map((error) => `- ${error}`).join("\n")}`);
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
// src/domains/agents/result-contract.ts
|
|
462
|
+
init_esm_shims();
|
|
463
|
+
import { createHash as createHash2 } from "node:crypto";
|
|
464
|
+
import path2 from "node:path";
|
|
41
465
|
function parseDelegationPlanResult(output) {
|
|
42
466
|
const parsed = parseJson(output);
|
|
43
467
|
if (!parsed.ok || !hasOnlyKeys(parsed.value, ["tasks"]) || !Array.isArray(parsed.value.tasks) || parsed.value.tasks.length === 0)
|
|
@@ -59,6 +483,30 @@ function parseDelegationPlanResult(output) {
|
|
|
59
483
|
}
|
|
60
484
|
return { tasks };
|
|
61
485
|
}
|
|
486
|
+
var COUNCIL_BALLOT_VERDICT_MAX_BYTES = 64;
|
|
487
|
+
var COUNCIL_BALLOT_SHAPE = '{"verdict":"yes","text":"the answer and the evidence behind it"}';
|
|
488
|
+
function parseCouncilBallot(output) {
|
|
489
|
+
const parsed = parseJson(output);
|
|
490
|
+
if (!parsed.ok) return null;
|
|
491
|
+
const value = parsed.value;
|
|
492
|
+
if (!hasOnlyKeys(value, ["verdict", "text"]) || !string(value.verdict) || !string(value.text)) return null;
|
|
493
|
+
const verdict = value.verdict.trim();
|
|
494
|
+
if (verdict.includes("\n") || Buffer.byteLength(verdict, "utf8") > COUNCIL_BALLOT_VERDICT_MAX_BYTES) return null;
|
|
495
|
+
return { verdict, text: value.text.trim() };
|
|
496
|
+
}
|
|
497
|
+
function validateCouncilBallot(contract, output) {
|
|
498
|
+
const parsed = parseJson(output);
|
|
499
|
+
if (!parsed.ok) return failure(contract, "unmeasured", parsed.reason);
|
|
500
|
+
const ballot = parseCouncilBallot(output);
|
|
501
|
+
if (ballot === null) {
|
|
502
|
+
return failure(
|
|
503
|
+
contract,
|
|
504
|
+
"unmeasured",
|
|
505
|
+
`A council ballot must carry only verdict and text, both non-empty strings, with verdict a single line of at most ${COUNCIL_BALLOT_VERDICT_MAX_BYTES} bytes so the tally can match it against the other members`
|
|
506
|
+
);
|
|
507
|
+
}
|
|
508
|
+
return success(contract, "unmeasured", ballot);
|
|
509
|
+
}
|
|
62
510
|
function parseCouncilReport(output) {
|
|
63
511
|
if (output === null) return null;
|
|
64
512
|
const parsed = parseJsonObjectPayload(output);
|
|
@@ -131,7 +579,7 @@ function canonical(value) {
|
|
|
131
579
|
throw new Error(`result contract cannot digest ${typeof value}`);
|
|
132
580
|
}
|
|
133
581
|
function digest(value) {
|
|
134
|
-
return
|
|
582
|
+
return createHash2("sha256").update(canonical(value), "utf8").digest("hex");
|
|
135
583
|
}
|
|
136
584
|
function resultContractDigest(contract) {
|
|
137
585
|
return digest(contract);
|
|
@@ -335,10 +783,10 @@ function parseChecks(value) {
|
|
|
335
783
|
return checks;
|
|
336
784
|
}
|
|
337
785
|
function validateScoutCitation(input, citation) {
|
|
338
|
-
const cwd =
|
|
339
|
-
const citedPath =
|
|
340
|
-
const relative =
|
|
341
|
-
if (relative === "" || relative.startsWith(`..${
|
|
786
|
+
const cwd = path2.resolve(input.cwd);
|
|
787
|
+
const citedPath = path2.resolve(cwd, citation.path);
|
|
788
|
+
const relative = path2.relative(cwd, citedPath);
|
|
789
|
+
if (relative === "" || relative.startsWith(`..${path2.sep}`) || relative === ".." || path2.isAbsolute(relative)) {
|
|
342
790
|
return { ok: false, reason: `Scout citation path escapes the workspace: ${citation.path}` };
|
|
343
791
|
}
|
|
344
792
|
const content = input.filesystem.readFile(citedPath);
|
|
@@ -359,7 +807,7 @@ function validateScoutCitation(input, citation) {
|
|
|
359
807
|
}
|
|
360
808
|
return {
|
|
361
809
|
ok: true,
|
|
362
|
-
evidence: { ...citation, contentDigest:
|
|
810
|
+
evidence: { ...citation, contentDigest: createHash2("sha256").update(content, "utf8").digest("hex") }
|
|
363
811
|
};
|
|
364
812
|
}
|
|
365
813
|
function validateScoutCitations(input, citations) {
|
|
@@ -534,7 +982,7 @@ function validateResearch(contract, output, networkAllowed) {
|
|
|
534
982
|
}
|
|
535
983
|
function describeWriteSet(effects, cwd) {
|
|
536
984
|
if (effects.mutatedPaths.size === 0) return "this run wrote nothing";
|
|
537
|
-
const written = [...effects.mutatedPaths].map((target) =>
|
|
985
|
+
const written = [...effects.mutatedPaths].map((target) => path2.relative(cwd, target) || target).sort().slice(0, MUTATION_WRITE_SET_REASON_LIMIT);
|
|
538
986
|
const more = effects.mutatedPaths.size - written.length;
|
|
539
987
|
return `this run wrote ${written.join(", ")}${more > 0 ? ` (+${more} more)` : ""}`;
|
|
540
988
|
}
|
|
@@ -565,10 +1013,10 @@ function validateMutation(contract, input) {
|
|
|
565
1013
|
const reportedFailure = !validations.every((check) => check.passed);
|
|
566
1014
|
const effects = input.observedRunEffects;
|
|
567
1015
|
if (effects === void 0) return success(contract, reportedFailure ? "fail" : "pass", value);
|
|
568
|
-
const cwd =
|
|
1016
|
+
const cwd = path2.resolve(input.cwd);
|
|
569
1017
|
let unverifiedMutation = false;
|
|
570
1018
|
for (const reported of value.mutatedPaths) {
|
|
571
|
-
const target =
|
|
1019
|
+
const target = path2.resolve(cwd, reported);
|
|
572
1020
|
if (effects.mutatedPaths.has(target)) continue;
|
|
573
1021
|
if (effects.failedMutationPaths.has(target)) {
|
|
574
1022
|
return failure(
|
|
@@ -607,14 +1055,14 @@ function validateProvenance(contract, output) {
|
|
|
607
1055
|
return success(contract, "unmeasured", value);
|
|
608
1056
|
}
|
|
609
1057
|
function validateArchitect(contract, input) {
|
|
610
|
-
const artifactPath =
|
|
1058
|
+
const artifactPath = path2.resolve(input.cwd, contract.path);
|
|
611
1059
|
const content = input.filesystem.readFile(artifactPath);
|
|
612
1060
|
if (content === null || content.trim().length === 0) {
|
|
613
1061
|
return failure(contract, "unmeasured", `required plan artifact is missing or empty: ${contract.path}`);
|
|
614
1062
|
}
|
|
615
1063
|
return success(contract, "unmeasured", {
|
|
616
1064
|
path: contract.path,
|
|
617
|
-
artifactDigest:
|
|
1065
|
+
artifactDigest: createHash2("sha256").update(content, "utf8").digest("hex")
|
|
618
1066
|
});
|
|
619
1067
|
}
|
|
620
1068
|
function parseScoutResult(output) {
|
|
@@ -647,6 +1095,8 @@ function validateResultContract(input) {
|
|
|
647
1095
|
const report = parseCouncilReport(input.output);
|
|
648
1096
|
return report === null ? failure(input.contract, "fail", "council-report is malformed") : success(input.contract, "unmeasured", { council: report });
|
|
649
1097
|
}
|
|
1098
|
+
case "council-ballot":
|
|
1099
|
+
return validateCouncilBallot(input.contract, input.output);
|
|
650
1100
|
case "debugger-report":
|
|
651
1101
|
return validateDebugger(input.contract, input.output);
|
|
652
1102
|
case "research-report":
|
|
@@ -719,6 +1169,8 @@ function resultContractShape(contract) {
|
|
|
719
1169
|
return '{"verdict":"pass","checks":[{"name":"npm run typecheck","passed":true,"evidence":"exit 0"}]}';
|
|
720
1170
|
case "council-report":
|
|
721
1171
|
return '{"members":[{"label":"alpha","runId":"run-1","round":1,"answer":"..."}],"synthesis":{"kind":"none"}}';
|
|
1172
|
+
case "council-ballot":
|
|
1173
|
+
return COUNCIL_BALLOT_SHAPE;
|
|
722
1174
|
case "debugger-report":
|
|
723
1175
|
return '{"diagnosis":"...","reproduction":"reproduced","evidence":["..."]}';
|
|
724
1176
|
case "research-report":
|
|
@@ -789,7 +1241,22 @@ function resultContractRepairMessages(input, origin) {
|
|
|
789
1241
|
}
|
|
790
1242
|
];
|
|
791
1243
|
}
|
|
792
|
-
|
|
1244
|
+
var RECIPE_DECLARABLE_KINDS = [
|
|
1245
|
+
"scout-report",
|
|
1246
|
+
"verifier-report",
|
|
1247
|
+
"council-report",
|
|
1248
|
+
"debugger-report",
|
|
1249
|
+
"research-report",
|
|
1250
|
+
"mutation-report",
|
|
1251
|
+
"provenance-report",
|
|
1252
|
+
"oracle-report",
|
|
1253
|
+
"external-delegation",
|
|
1254
|
+
"artifact-report",
|
|
1255
|
+
"context-handbook",
|
|
1256
|
+
"delegation-plan"
|
|
1257
|
+
];
|
|
1258
|
+
var COORDINATOR_AUTHORED_KINDS = ["council-ballot"];
|
|
1259
|
+
function parseContract(value, sourcePath, kinds) {
|
|
793
1260
|
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
794
1261
|
throw new Error(`agent recipe: ${sourcePath}: resultContract must be an object`);
|
|
795
1262
|
}
|
|
@@ -801,33 +1268,113 @@ function parseResultContract(value, sourcePath) {
|
|
|
801
1268
|
if (!only("kind", "path") || !string(record.path)) {
|
|
802
1269
|
throw new Error(`agent recipe: ${sourcePath}: architect-plan requires only non-empty path`);
|
|
803
1270
|
}
|
|
804
|
-
if (
|
|
1271
|
+
if (path2.isAbsolute(record.path) || record.path.split(/[\\/]/u).includes("..")) {
|
|
805
1272
|
throw new Error(`agent recipe: ${sourcePath}: architect-plan path must be workspace-relative`);
|
|
806
1273
|
}
|
|
807
1274
|
return { kind: "architect-plan", path: record.path };
|
|
808
1275
|
}
|
|
809
|
-
const kinds = [
|
|
810
|
-
"scout-report",
|
|
811
|
-
"verifier-report",
|
|
812
|
-
"council-report",
|
|
813
|
-
"debugger-report",
|
|
814
|
-
"research-report",
|
|
815
|
-
"mutation-report",
|
|
816
|
-
"provenance-report",
|
|
817
|
-
"oracle-report",
|
|
818
|
-
"external-delegation",
|
|
819
|
-
"artifact-report",
|
|
820
|
-
"context-handbook",
|
|
821
|
-
"delegation-plan"
|
|
822
|
-
];
|
|
823
1276
|
if (!kinds.includes(record.kind) || !only("kind")) {
|
|
824
1277
|
throw new Error(`agent recipe: ${sourcePath}: resultContract.kind is unsupported or has unknown keys`);
|
|
825
1278
|
}
|
|
826
1279
|
return { kind: record.kind };
|
|
827
1280
|
}
|
|
1281
|
+
function parseResultContract(value, sourcePath) {
|
|
1282
|
+
return parseContract(value, sourcePath, RECIPE_DECLARABLE_KINDS);
|
|
1283
|
+
}
|
|
1284
|
+
function parseWorkerResultContract(value, sourcePath) {
|
|
1285
|
+
return parseContract(value, sourcePath, [...RECIPE_DECLARABLE_KINDS, ...COORDINATOR_AUTHORED_KINDS]);
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1288
|
+
// src/core/path-boundary.ts
|
|
1289
|
+
init_esm_shims();
|
|
1290
|
+
import path3 from "node:path";
|
|
1291
|
+
var PATH_BOUNDARY_MAX_ENTRIES = 32;
|
|
1292
|
+
var PathBoundaryError = class extends Error {
|
|
1293
|
+
code;
|
|
1294
|
+
constructor(code, message) {
|
|
1295
|
+
super(message);
|
|
1296
|
+
this.name = "PathBoundaryError";
|
|
1297
|
+
this.code = code;
|
|
1298
|
+
}
|
|
1299
|
+
};
|
|
1300
|
+
var GLOB_CHARACTERS = /[*?[\]{}]/u;
|
|
1301
|
+
function normalizePathBoundaryEntry(entry) {
|
|
1302
|
+
const raw = entry.trim();
|
|
1303
|
+
if (raw.length === 0) throw new PathBoundaryError("empty", "write boundary: entry must be a non-empty path");
|
|
1304
|
+
if (raw.includes("\\")) {
|
|
1305
|
+
throw new PathBoundaryError("separator", `write boundary: entry '${entry}' must use '/' separators`);
|
|
1306
|
+
}
|
|
1307
|
+
if (GLOB_CHARACTERS.test(raw)) {
|
|
1308
|
+
throw new PathBoundaryError("glob", `write boundary: entry '${entry}' looks like a glob, which v1 does not support`);
|
|
1309
|
+
}
|
|
1310
|
+
if (raw.startsWith("/") || /^[A-Za-z]:/u.test(raw)) {
|
|
1311
|
+
throw new PathBoundaryError("absolute", `write boundary: entry '${entry}' must be repository-relative, not absolute`);
|
|
1312
|
+
}
|
|
1313
|
+
const subtree = raw.endsWith("/");
|
|
1314
|
+
const segments = raw.split("/").filter((segment) => segment.length > 0);
|
|
1315
|
+
if (segments.length === 0) {
|
|
1316
|
+
throw new PathBoundaryError("empty", `write boundary: entry '${entry}' must name a path inside the repository`);
|
|
1317
|
+
}
|
|
1318
|
+
for (const segment of segments) {
|
|
1319
|
+
if (segment === "..") {
|
|
1320
|
+
throw new PathBoundaryError("parent", `write boundary: entry '${entry}' must not contain '..'`);
|
|
1321
|
+
}
|
|
1322
|
+
if (segment === ".") {
|
|
1323
|
+
throw new PathBoundaryError("dot", `write boundary: entry '${entry}' must not contain '.' segments`);
|
|
1324
|
+
}
|
|
1325
|
+
}
|
|
1326
|
+
const joined = segments.join("/");
|
|
1327
|
+
return subtree ? `${joined}/` : joined;
|
|
1328
|
+
}
|
|
1329
|
+
function normalizePathBoundary(entries) {
|
|
1330
|
+
if (entries.length > PATH_BOUNDARY_MAX_ENTRIES) {
|
|
1331
|
+
throw new Error(`write boundary: at most ${PATH_BOUNDARY_MAX_ENTRIES} entries may be declared`);
|
|
1332
|
+
}
|
|
1333
|
+
return [...new Set(entries.map(normalizePathBoundaryEntry))].sort();
|
|
1334
|
+
}
|
|
1335
|
+
function toPosixBoundaryPath(value) {
|
|
1336
|
+
return value.split("\\").join("/");
|
|
1337
|
+
}
|
|
1338
|
+
function isDirectoryPathBoundary(entry) {
|
|
1339
|
+
return toPosixBoundaryPath(entry).endsWith("/");
|
|
1340
|
+
}
|
|
1341
|
+
function asDirectoryPathBoundary(entry) {
|
|
1342
|
+
const normalized = toPosixBoundaryPath(entry);
|
|
1343
|
+
return normalized.endsWith("/") ? normalized : `${normalized}/`;
|
|
1344
|
+
}
|
|
1345
|
+
function resolvePathBoundary(cwd, entry) {
|
|
1346
|
+
const directory = isDirectoryPathBoundary(entry);
|
|
1347
|
+
const withoutMarker = directory ? entry.slice(0, -1) : entry;
|
|
1348
|
+
const resolved = toPosixBoundaryPath(path3.resolve(cwd, withoutMarker));
|
|
1349
|
+
return directory ? asDirectoryPathBoundary(resolved) : resolved;
|
|
1350
|
+
}
|
|
1351
|
+
function pathBoundaryEntryCovers(outer, inner) {
|
|
1352
|
+
const normalizedOuter = toPosixBoundaryPath(outer);
|
|
1353
|
+
const normalizedInner = toPosixBoundaryPath(inner);
|
|
1354
|
+
return normalizedOuter.endsWith("/") ? normalizedInner.startsWith(normalizedOuter) : !normalizedInner.endsWith("/") && normalizedInner === normalizedOuter;
|
|
1355
|
+
}
|
|
1356
|
+
function pathBoundaryCovers(boundary, candidate) {
|
|
1357
|
+
return boundary.some((entry) => pathBoundaryEntryCovers(entry, candidate));
|
|
1358
|
+
}
|
|
828
1359
|
|
|
829
1360
|
export {
|
|
830
1361
|
parseJsonObjectPayload,
|
|
1362
|
+
classify,
|
|
1363
|
+
AGENT_AUTOMATION_AUTHORITIES,
|
|
1364
|
+
isAgentCategory,
|
|
1365
|
+
isAgentCapabilityClass,
|
|
1366
|
+
isAgentLatencyClass,
|
|
1367
|
+
isAgentAudience,
|
|
1368
|
+
isAgentProjectContextTier,
|
|
1369
|
+
isAgentProduct,
|
|
1370
|
+
resolveAgentToolCompatibility,
|
|
1371
|
+
normalizeAgentSpec,
|
|
1372
|
+
agentSpecFingerprint,
|
|
1373
|
+
isUserVisibleAgent,
|
|
1374
|
+
isShadowAgent,
|
|
1375
|
+
assertAgentSpecPolicy,
|
|
1376
|
+
COUNCIL_BALLOT_VERDICT_MAX_BYTES,
|
|
1377
|
+
COUNCIL_BALLOT_SHAPE,
|
|
831
1378
|
parseCouncilReport,
|
|
832
1379
|
resultContractSourceId,
|
|
833
1380
|
parseVerifierResult,
|
|
@@ -838,6 +1385,15 @@ export {
|
|
|
838
1385
|
validateRecipeResult,
|
|
839
1386
|
RESULT_CONTRACT_REPAIR_LIMIT,
|
|
840
1387
|
resultContractRepairMessages,
|
|
841
|
-
parseResultContract
|
|
1388
|
+
parseResultContract,
|
|
1389
|
+
parseWorkerResultContract,
|
|
1390
|
+
PATH_BOUNDARY_MAX_ENTRIES,
|
|
1391
|
+
PathBoundaryError,
|
|
1392
|
+
normalizePathBoundaryEntry,
|
|
1393
|
+
normalizePathBoundary,
|
|
1394
|
+
asDirectoryPathBoundary,
|
|
1395
|
+
resolvePathBoundary,
|
|
1396
|
+
pathBoundaryEntryCovers,
|
|
1397
|
+
pathBoundaryCovers
|
|
842
1398
|
};
|
|
843
|
-
//# sourceMappingURL=chunk-
|
|
1399
|
+
//# sourceMappingURL=chunk-S4COXYBG.js.map
|