@iowarp/clio-coder 0.3.0 → 0.3.2
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 +123 -2
- package/CONTRIBUTING.md +23 -23
- package/README.md +295 -627
- package/dist/acp-BIYHVZIM.js +128 -0
- package/dist/{agents-Q4MYPMUW.js → agents-YT6SSRIT.js} +52 -27
- package/dist/assets/codewiki.json +1 -0
- package/dist/assets/grammars/notices/@vscode__tree-sitter-wasm/LICENSE +21 -0
- package/dist/assets/grammars/notices/@vscode__tree-sitter-wasm/cgmanifest.json +16 -0
- package/dist/assets/grammars/notices/tree-sitter-wasms/LICENSE +24 -0
- package/dist/assets/grammars/tree-sitter-c-sharp.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-c.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-cpp.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-go.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-java.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-javascript.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-python.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-ruby.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-rust.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-tsx.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-typescript.wasm +0 -0
- package/dist/assets/grammars/tree-sitter.wasm +0 -0
- package/dist/{auth-O6HYIJ6J.js → auth-5TWEIYDN.js} +30 -15
- package/dist/chunk-2EHAIA3X.js +481 -0
- package/dist/{chunk-ME6DNWIU.js → chunk-2IR2NMPA.js} +12 -4
- package/dist/chunk-2SFS6XQE.js +122 -0
- package/dist/{chunk-KKKPTZLM.js → chunk-2STGEDFV.js} +8 -1
- package/dist/chunk-2VTFPG5O.js +48 -0
- package/dist/chunk-3I7MS7N2.js +40 -0
- package/dist/chunk-3R73A4XB.js +69 -0
- package/dist/{chunk-JPOWPFCU.js → chunk-3ZXDFGR5.js} +52 -23
- package/dist/chunk-4BJ5BYCE.js +61 -0
- package/dist/{chunk-26BZQOAD.js → chunk-4BPJXDWC.js} +161 -260
- package/dist/chunk-4KLWL3UC.js +18 -0
- package/dist/{chunk-5LDRNKX2.js → chunk-4VP4KH3K.js} +161 -262
- package/dist/chunk-4ZG3XFUR.js +77 -0
- package/dist/chunk-5B2AEOW5.js +5407 -0
- package/dist/chunk-5TSRNF4G.js +510 -0
- package/dist/{chunk-WD6AJM35.js → chunk-5UUP6MWO.js} +48 -69
- package/dist/{chunk-X3BR7HWV.js → chunk-5WIGXA4T.js} +7 -1
- package/dist/chunk-65DEGPJ6.js +52 -0
- package/dist/chunk-6EJMN2Y3.js +17 -0
- package/dist/chunk-6EJV5X2W.js +16405 -0
- package/dist/chunk-6N5PTWMY.js +136 -0
- package/dist/chunk-6XLNIQDB.js +27 -0
- package/dist/{chunk-XNISANGE.js → chunk-77VKQEHF.js} +171 -74
- package/dist/chunk-7CR24IG7.js +242 -0
- package/dist/{chunk-UWIJNAOB.js → chunk-7EYHLWU7.js} +907 -638
- package/dist/chunk-7MNJORFF.js +22 -0
- package/dist/{chunk-JWHCJDCI.js → chunk-A3CYT5EX.js} +257 -79
- package/dist/chunk-AGYYIBLL.js +1069 -0
- package/dist/chunk-AO4RKG4M.js +277 -0
- package/dist/chunk-APJ265NV.js +7410 -0
- package/dist/chunk-ARBGF5F7.js +174 -0
- package/dist/{chunk-TFSSEXL6.js → chunk-BMEMKKIT.js} +14 -4
- package/dist/{chunk-X3NE4WVW.js → chunk-BNAZZHFG.js} +7 -1
- package/dist/chunk-CBCAPZAA.js +229 -0
- package/dist/{chunk-QV47YRF4.js → chunk-CGKSTWHD.js} +7 -1
- package/dist/chunk-CMZWFGD2.js +352 -0
- package/dist/chunk-ECH6PKUQ.js +39 -0
- package/dist/{chunk-67MTHP2E.js → chunk-ED4KHGC3.js} +13 -5
- package/dist/chunk-EKMEHE4H.js +340 -0
- package/dist/{chunk-O4EJEDHO.js → chunk-EPVUXGXG.js} +50 -35
- package/dist/chunk-FCSXB6T2.js +338 -0
- package/dist/chunk-FJ3H4MN5.js +48 -0
- package/dist/chunk-FQ4SKYE4.js +29 -0
- package/dist/chunk-G2DE3C7R.js +644 -0
- package/dist/chunk-G4BMMOKF.js +182 -0
- package/dist/{chunk-7BHLZB3A.js → chunk-GGXXDWE4.js} +190 -1218
- package/dist/chunk-HC4CLZ2Y.js +68 -0
- package/dist/{chunk-E3NYWENM.js → chunk-HFSBBKSQ.js} +55 -61
- package/dist/chunk-HKIYEGME.js +30 -0
- package/dist/chunk-I4HZDVNP.js +73 -0
- package/dist/chunk-IGLFWIYI.js +161 -0
- package/dist/chunk-IHXBNWMM.js +137 -0
- package/dist/chunk-IKCO5N3L.js +162 -0
- package/dist/chunk-IR4CFBFN.js +56 -0
- package/dist/{chunk-DXQNI4PC.js → chunk-IWHMRKLL.js} +8 -1
- package/dist/{chunk-VOO7NYPP.js → chunk-J5HN4RYU.js} +27 -9
- package/dist/{chunk-4UQA7NCT.js → chunk-J5Q24KAG.js} +7 -2
- package/dist/{chunk-KBR4MZZR.js → chunk-JVCV3ICN.js} +7 -1
- package/dist/chunk-KJ5LWLOE.js +1077 -0
- package/dist/chunk-LBMZMYH2.js +285 -0
- package/dist/{chunk-3DANZDGR.js → chunk-LBNRH5WM.js} +100 -161
- package/dist/{chunk-TKHQ4DGZ.js → chunk-LZSJBIVT.js} +7358 -7414
- package/dist/{chunk-UGYAX5YI.js → chunk-M6SHUN7Q.js} +13 -8
- package/dist/chunk-MAW544W2.js +1882 -0
- package/dist/chunk-MBS4V7ZP.js +217 -0
- package/dist/{chunk-2J63S4SF.js → chunk-MFFY33HR.js} +167 -140
- package/dist/chunk-MNA4JGU4.js +255 -0
- package/dist/chunk-MQSRRFWA.js +3428 -0
- package/dist/{chunk-RQDWMVRB.js → chunk-MVVUPGPW.js} +138 -137
- package/dist/chunk-OAO4GE4M.js +619 -0
- package/dist/chunk-OHHN2SO4.js +5135 -0
- package/dist/chunk-OKGUZO2U.js +34 -0
- package/dist/{chunk-BBUH4VAA.js → chunk-OOJYHWRB.js} +60 -361
- package/dist/{chunk-D5YD55AR.js → chunk-OQ33BKR3.js} +12 -1
- package/dist/chunk-OQE5J4C6.js +73 -0
- package/dist/{chunk-AMFR5YA3.js → chunk-ORBHGJC5.js} +26 -12
- package/dist/chunk-POHLU5DW.js +1186 -0
- package/dist/chunk-QKMUKYO7.js +4961 -0
- package/dist/{chunk-7RBKDI66.js → chunk-QTYWRVRA.js} +104 -12
- package/dist/{chunk-5N2FG33Q.js → chunk-R346GLFC.js} +7 -1
- package/dist/chunk-SRF2PJNW.js +184 -0
- package/dist/chunk-SST6Z5JA.js +80 -0
- package/dist/{chunk-XV4ZJ6ZM.js → chunk-STBPMHSX.js} +473 -1194
- package/dist/{chunk-HBU5MTAM.js → chunk-SVNXH4L2.js} +7 -1
- package/dist/chunk-T6YILFSB.js +80 -0
- package/dist/chunk-TXOTCRLG.js +15 -0
- package/dist/chunk-TZTZS7QK.js +227 -0
- package/dist/chunk-UOV2BYIW.js +107 -0
- package/dist/{chunk-527KG6XR.js → chunk-V4RXGQ5Q.js} +72 -185
- package/dist/chunk-VAKQQHWR.js +434 -0
- package/dist/chunk-VG7TBQIY.js +128 -0
- package/dist/chunk-VJWL6YS5.js +244 -0
- package/dist/chunk-WEH5XRJQ.js +32 -0
- package/dist/{chunk-VPAWTYLY.js → chunk-WEPFGWHJ.js} +7 -1
- package/dist/chunk-WMSVI4G2.js +2095 -0
- package/dist/chunk-WVO7V2QY.js +797 -0
- package/dist/chunk-X4RCMKVQ.js +641 -0
- package/dist/chunk-X75S7HFS.js +374 -0
- package/dist/chunk-XN3L4EYL.js +46 -0
- package/dist/{chunk-HMYNFFY4.js → chunk-XPLRXC72.js} +7 -2
- package/dist/{chunk-PIDUD6M2.js → chunk-YCWGATWI.js} +12 -5
- package/dist/chunk-YHZX5GEU.js +193 -0
- package/dist/chunk-YXLYO42X.js +91 -0
- package/dist/{chunk-UHTSULZS.js → chunk-ZDOOVTXZ.js} +38 -73
- package/dist/chunk-ZI647VB5.js +37 -0
- package/dist/{chunk-CLJ5HLUD.js → chunk-ZWLZP4ZT.js} +25 -6
- package/dist/cli/index.js +70 -56
- package/dist/clio-4LY5K2AC.js +25 -0
- package/dist/code-nav-7AX6FYE6.js +600 -0
- package/dist/codewiki/build-worker.js +66 -0
- package/dist/compile-cache-CVJMMODC.js +18 -0
- package/dist/{components-JVHMUBEB.js → components-KELWS457.js} +31 -9
- package/dist/{config-ZFCDBMDC.js → config-GTLUW2PR.js} +104 -56
- package/dist/configure-R6A64DHX.js +42 -0
- package/dist/context-5VKGUVJJ.js +866 -0
- package/dist/{context-CDXTP2MP.js → context-JFZEJ7W5.js} +21 -13
- package/dist/{context-E3KIFVXI.js → context-RW5HC47S.js} +77 -36
- package/dist/{context-clear-3F4PLXOS.js → context-clear-6ZHBAZZT.js} +64 -30
- package/dist/{context-index-Q7YSYTR3.js → context-index-BZ4UYMTC.js} +36 -24
- package/dist/dispatch-runner-VKBRCWQC.js +1997 -0
- package/dist/{docs-YIETIWZI.js → docs-2C2LTVT2.js} +32 -13
- package/dist/doctor-KI767GSN.js +87 -0
- package/dist/{eval-B3KZZESM.js → eval-XSSNATB4.js} +93 -27
- package/dist/{evidence-V67CHM35.js → evidence-UA6AWDQQ.js} +55 -27
- package/dist/{evolve-YDZSUQYA.js → evolve-QNTFGV6Z.js} +59 -26
- package/dist/{extensions-SRG7XCAH.js → extensions-QVDOHDGJ.js} +23 -8
- package/dist/{fleet-CA2CRTVG.js → fleet-Q7UOMUSG.js} +173 -56
- package/dist/fleet-preflight-DDN536IT.js +26 -0
- package/dist/{init-2OZDJE2D.js → init-WBB65ZHQ.js} +79 -34
- package/dist/{memory-3PIQQAKX.js → memory-MD3O64RI.js} +57 -28
- package/dist/{models-DY35XI7Y.js → models-BZU34YWD.js} +49 -24
- package/dist/monitor-MEQA5C3I.js +661 -0
- package/dist/{chunk-PS4PFJQP.js → orchestrator-CGFKEP27.js} +22837 -18564
- package/dist/{paths-5OMXW7Z4.js → paths-UXLN5YYZ.js} +17 -6
- package/dist/preload-P6DGH2PZ.js +13 -0
- package/dist/{reset-PIFYNOS3.js → reset-L2FQEE3E.js} +25 -13
- package/dist/{run-3VSPP24F.js → run-IV4Q6RLN.js} +115 -63
- package/dist/{share-D36RQCXM.js → share-S5BZQC5I.js} +23 -10
- package/dist/{skills-F2MRLELY.js → skills-LQEKRDTN.js} +42 -15
- package/dist/{skills-eval-E2ZTW4PL.js → skills-eval-3DC4HEWS.js} +90 -45
- package/dist/steer-GGWFUJUD.js +77 -0
- package/dist/{targets-DZMEZAH4.js → targets-C4SSGQOB.js} +78 -60
- package/dist/terminal-lease-IT5JW2NR.js +395 -0
- package/dist/{trace-7NYCUI2J.js → trace-PNCASAXC.js} +48 -17
- package/dist/tree-sitter-HGKH6LG4.js +4673 -0
- package/dist/{uninstall-AD3JWHBB.js → uninstall-FZCQCDKC.js} +19 -8
- package/dist/{upgrade-WYYBKGDY.js → upgrade-7TT7SQ3G.js} +66 -24
- package/dist/{usage-ULIDAGFF.js → usage-GV4PKT3M.js} +71 -32
- package/dist/verify-G6V4D2G7.js +716 -0
- package/dist/version-KGEG7EPO.js +21 -0
- package/dist/web-fetch-2YHJ3KTG.js +638 -0
- package/dist/{wiki-generate-PKFIX6OB.js → wiki-generate-DQF6Z66B.js} +98 -48
- package/dist/worker/entry.js +297 -54
- package/dist/workspace-G4ZWUIPR.js +22 -0
- package/docs/README.md +29 -21
- package/docs/acp.md +191 -16
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +157 -7
- package/docs/artifact-placement.md +101 -0
- package/docs/artifact-versions.md +1 -1
- package/docs/built-in-agents.md +4 -2
- package/docs/capacity-and-scheduling.md +1 -1
- package/docs/commands-and-modes.md +224 -97
- package/docs/config-knobs-audit.md +1 -3
- package/docs/configuration-and-targets.md +236 -38
- package/docs/context-engine.md +34 -7
- package/docs/development-pipeline.md +102 -0
- package/docs/dispatch-architecture-rationale.md +1 -1
- package/docs/documentation-coverage.md +4 -4
- package/docs/documentation-guide.md +3 -3
- package/docs/environment-variables.md +15 -6
- package/docs/eval-runner.md +3 -3
- package/docs/evals-internal.md +2 -2
- package/docs/evidence-and-memory.md +10 -2
- package/docs/evolution.md +2 -2
- package/docs/exit-codes-and-output.md +15 -9
- package/docs/extensions-and-sharing.md +25 -18
- package/docs/fleet-demo-runbook.md +22 -23
- package/docs/fleet-dispatch.md +117 -16
- package/docs/git-commit-provenance.md +120 -0
- package/docs/glossary.md +107 -15
- package/docs/installation-and-lifecycle.md +75 -17
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +46 -15
- package/docs/observability.md +8 -5
- package/docs/performance-methodology.md +491 -0
- package/docs/pi-boundary.md +72 -0
- package/docs/proactive-memory.md +14 -14
- package/docs/prompt-envelope-and-tools.md +25 -4
- package/docs/provider-adapter-cookbook.md +57 -4
- package/docs/release-cut-checklist.md +129 -111
- package/docs/safety-model.md +28 -8
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +55 -12
- package/docs/skills-marketplace.md +12 -8
- package/docs/time-conventions.md +101 -0
- package/docs/tool-usage.md +6 -5
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +10 -7
- package/docs/tui-design.md +121 -28
- package/docs/worker-dispatch-mechanics.md +3 -3
- package/package.json +33 -36
- package/skills/README.md +5 -6
- package/skills/coding/ast-grep/SKILL.md +136 -0
- package/skills/coding/ast-grep/evals.md +56 -0
- package/skills/coding/ast-grep/references/rule_reference.md +297 -0
- package/skills/coding/coding-standards/SKILL.md +113 -0
- package/skills/coding/coding-standards/evals.md +34 -0
- package/skills/coding/prototype/SKILL.md +86 -0
- package/skills/coding/prototype/evals.md +42 -0
- package/skills/coding/prototype/references/LOGIC.md +67 -0
- package/skills/coding/prototype/references/UI.md +112 -0
- package/skills/coding/tdd/SKILL.md +101 -0
- package/skills/coding/tdd/evals.md +41 -0
- package/skills/coding/tdd/references/mocking.md +59 -0
- package/skills/coding/tdd/references/tests.md +77 -0
- package/skills/context/context-handoff/SKILL.md +126 -0
- package/skills/context/context-handoff/evals.md +57 -0
- package/skills/context/context-handoff/scripts/new-handoff.sh +26 -0
- package/skills/context/context-prime/SKILL.md +95 -0
- package/skills/context/context-prime/evals.md +54 -0
- package/skills/git/file-ticket/SKILL.md +107 -0
- package/skills/git/file-ticket/evals.md +54 -0
- package/skills/git/fix-issue/SKILL.md +106 -0
- package/skills/git/fix-issue/evals.md +71 -0
- package/skills/git/ship/SKILL.md +92 -0
- package/skills/git/ship/evals.md +72 -0
- package/skills/meta/clio-dev/SKILL.md +91 -0
- package/skills/meta/clio-dev/evals.md +45 -0
- package/skills/meta/clio-test/SKILL.md +130 -0
- package/skills/meta/clio-test/evals.md +43 -0
- package/skills/meta/clio-test/references/harness.md +97 -0
- package/skills/meta/clio-test/references/test-map.md +59 -0
- package/skills/meta/credentials/SKILL.md +125 -0
- package/skills/meta/credentials/evals.md +104 -0
- package/skills/meta/find-skills/SKILL.md +72 -0
- package/skills/meta/find-skills/evals.md +47 -0
- package/skills/meta/herdr/SKILL.md +127 -0
- package/skills/meta/herdr/evals.md +38 -0
- package/skills/meta/skill-craft/SKILL.md +102 -0
- package/skills/meta/skill-craft/evals.md +41 -0
- package/skills/planning/architecture/SKILL.md +129 -0
- package/skills/planning/architecture/evals.md +36 -0
- package/skills/planning/backlog/SKILL.md +90 -0
- package/skills/planning/backlog/evals.md +43 -0
- package/skills/planning/prd/SKILL.md +82 -0
- package/skills/planning/prd/evals.md +49 -0
- package/skills/planning/product-intent/SKILL.md +112 -0
- package/skills/planning/product-intent/evals.md +36 -0
- package/skills/planning/tech-spec/SKILL.md +115 -0
- package/skills/planning/tech-spec/evals.md +47 -0
- package/skills/registry.yaml +136 -0
- package/skills/research/arxiv-literature/SKILL.md +104 -0
- package/skills/research/arxiv-literature/evals.md +58 -0
- package/skills/research/experiment-protocol/SKILL.md +122 -0
- package/skills/research/experiment-protocol/evals.md +91 -0
- package/skills/research/scientific-debugging/SKILL.md +119 -0
- package/skills/research/scientific-debugging/evals.md +138 -0
- package/skills/research/scientific-modernization/SKILL.md +138 -0
- package/skills/research/scientific-modernization/evals.md +84 -0
- package/skills/skill-marketplace.json +12 -20
- package/skills/workflow/design-council/SKILL.md +139 -0
- package/skills/workflow/design-council/evals.md +97 -0
- package/skills/workflow/grill-me/SKILL.md +186 -0
- package/skills/workflow/grill-me/evals.md +78 -0
- package/skills/workflow/workflow-distiller/SKILL.md +136 -0
- package/skills/workflow/workflow-distiller/evals.md +107 -0
- package/src/cli/acp.ts +115 -0
- package/src/cli/agents.ts +60 -0
- package/src/cli/args.ts +280 -0
- package/src/cli/argv.ts +170 -0
- package/src/cli/ask.ts +34 -0
- package/src/cli/auth.ts +468 -0
- package/src/cli/bootstrap-generate.ts +498 -0
- package/src/cli/clio.ts +96 -0
- package/src/cli/components.ts +195 -0
- package/src/cli/config-inspect.ts +336 -0
- package/src/cli/config.ts +72 -0
- package/src/cli/configure-interop.ts +67 -0
- package/src/cli/configure-layout.ts +172 -0
- package/src/cli/configure.ts +1525 -0
- package/src/cli/context-clear.ts +76 -0
- package/src/cli/context-index.ts +100 -0
- package/src/cli/context.ts +321 -0
- package/src/cli/default-target.ts +55 -0
- package/src/cli/docs.ts +346 -0
- package/src/cli/doctor.ts +54 -0
- package/src/cli/eval.ts +315 -0
- package/src/cli/evidence.ts +225 -0
- package/src/cli/evolve.ts +219 -0
- package/src/cli/extensions.ts +214 -0
- package/src/cli/fleet.ts +868 -0
- package/src/cli/index.ts +338 -0
- package/src/cli/init.ts +219 -0
- package/src/cli/initial-message.ts +47 -0
- package/src/cli/internal-dispatch.ts +55 -0
- package/src/cli/memory.ts +182 -0
- package/src/cli/models.ts +257 -0
- package/src/cli/modes/json-stream.ts +121 -0
- package/src/cli/modes/jsonl.ts +9 -0
- package/src/cli/modes/print.ts +604 -0
- package/src/cli/oauth-manual-input.ts +72 -0
- package/src/cli/oauth-select.ts +36 -0
- package/src/cli/output-guard.ts +48 -0
- package/src/cli/paths.ts +44 -0
- package/src/cli/provider-target.ts +113 -0
- package/src/cli/removal.ts +72 -0
- package/src/cli/reset.ts +253 -0
- package/src/cli/run.ts +497 -0
- package/src/cli/share.ts +243 -0
- package/src/cli/shared.ts +60 -0
- package/src/cli/skills-eval.ts +1240 -0
- package/src/cli/skills.ts +485 -0
- package/src/cli/steer-channel.ts +86 -0
- package/src/cli/targets.ts +1154 -0
- package/src/cli/text-layout.ts +112 -0
- package/src/cli/trace.ts +322 -0
- package/src/cli/uninstall.ts +405 -0
- package/src/cli/upgrade.ts +286 -0
- package/src/cli/usage.ts +876 -0
- package/src/cli/validate-model.ts +28 -0
- package/src/cli/version.ts +7 -0
- package/src/cli/wiki-generate.ts +510 -0
- package/src/core/agent-environment.ts +7 -0
- package/src/core/artifact-paths.ts +43 -0
- package/src/core/bash-exec.ts +313 -0
- package/src/core/boot-trace.ts +42 -0
- package/src/core/bus-events.ts +744 -0
- package/src/core/bus-trace.ts +53 -0
- package/src/core/c-header-language.ts +265 -0
- package/src/core/clio-repo.ts +78 -0
- package/src/core/commit-attribution.ts +157 -0
- package/src/core/compile-cache.ts +159 -0
- package/src/core/config.ts +1722 -0
- package/src/core/context-floor.ts +33 -0
- package/src/core/defaults.ts +659 -0
- package/src/core/domain-loader.ts +177 -0
- package/src/core/event-bus.ts +94 -0
- package/src/core/file-references.ts +282 -0
- package/src/core/git-commit-attribution.ts +362 -0
- package/src/core/guardrails.ts +185 -0
- package/src/core/headless-permission.ts +21 -0
- package/src/core/incomplete-installation.ts +45 -0
- package/src/core/init.ts +223 -0
- package/src/core/json-payload.ts +58 -0
- package/src/core/package-root.ts +54 -0
- package/src/core/path-canonical.ts +37 -0
- package/src/core/process-identity.ts +41 -0
- package/src/core/recent-models.ts +91 -0
- package/src/core/residency-protection.ts +56 -0
- package/src/core/resolve-config-value.ts +88 -0
- package/src/core/response-schema.ts +279 -0
- package/src/core/run-overrides.ts +77 -0
- package/src/core/safe-exec.ts +205 -0
- package/src/core/safe-id.ts +37 -0
- package/src/core/safe-resource-write.ts +162 -0
- package/src/core/session-routing.ts +339 -0
- package/src/core/settings-layers.ts +354 -0
- package/src/core/shared-bus.ts +8 -0
- package/src/core/shell-quote.ts +26 -0
- package/src/core/skill-activation.ts +190 -0
- package/src/core/startup-timer.ts +37 -0
- package/src/core/state-file-lock.ts +219 -0
- package/src/core/termination.ts +275 -0
- package/src/core/timers.ts +38 -0
- package/src/core/tool-names.ts +65 -0
- package/src/core/verification-scripts.ts +13 -0
- package/src/core/workspace-files.ts +492 -0
- package/src/core/xdg.ts +177 -0
- package/src/domains/agents/builtins/architect.md +4 -4
- package/src/domains/agents/builtins/coder.md +3 -2
- package/src/domains/agents/builtins/debugger.md +1 -1
- package/src/domains/agents/builtins/documenter.md +1 -1
- package/src/domains/agents/builtins/git-master.md +3 -3
- package/src/domains/agents/builtins/provenance.md +1 -1
- package/src/domains/agents/builtins/researcher.md +1 -1
- package/src/domains/agents/builtins/scout.md +1 -1
- package/src/domains/agents/builtins/tester.md +1 -1
- package/src/domains/agents/builtins/verifier.md +1 -1
- package/src/domains/agents/builtins/wiki-writer.md +1 -1
- package/src/domains/agents/catalog.ts +172 -0
- package/src/domains/agents/contract.ts +16 -0
- package/src/domains/agents/extension.ts +110 -0
- package/src/domains/agents/fleet-commands.ts +154 -0
- package/src/domains/agents/fleet-contract.ts +797 -0
- package/src/domains/agents/frontmatter.ts +40 -0
- package/src/domains/agents/index.ts +102 -0
- package/src/domains/agents/manifest.ts +6 -0
- package/src/domains/agents/recipe-schema.ts +202 -0
- package/src/domains/agents/recipe.ts +125 -0
- package/src/domains/agents/registry.ts +111 -0
- package/src/domains/agents/result-contract.ts +1265 -0
- package/src/domains/agents/spec.ts +371 -0
- package/src/domains/agents/write-boundary.ts +109 -0
- package/src/domains/components/diff.ts +99 -0
- package/src/domains/components/hash.ts +21 -0
- package/src/domains/components/index.ts +3 -0
- package/src/domains/components/scan.ts +304 -0
- package/src/domains/components/snapshot.ts +108 -0
- package/src/domains/components/types.ts +82 -0
- package/src/domains/config/agent-namespace.ts +13 -0
- package/src/domains/config/classify.ts +106 -0
- package/src/domains/config/contract.ts +22 -0
- package/src/domains/config/extension.ts +142 -0
- package/src/domains/config/index.ts +23 -0
- package/src/domains/config/keybindings.ts +200 -0
- package/src/domains/config/manifest.ts +6 -0
- package/src/domains/config/watcher.ts +41 -0
- package/src/domains/context/adoption.ts +880 -0
- package/src/domains/context/bootstrap-prompt.ts +273 -0
- package/src/domains/context/bootstrap.ts +1502 -0
- package/src/domains/context/clear.ts +91 -0
- package/src/domains/context/clio-md.ts +429 -0
- package/src/domains/context/codewiki/artifact.ts +400 -0
- package/src/domains/context/codewiki/build-worker-protocol.ts +24 -0
- package/src/domains/context/codewiki/build-worker.ts +54 -0
- package/src/domains/context/codewiki/cmake.ts +356 -0
- package/src/domains/context/codewiki/cooperative.ts +46 -0
- package/src/domains/context/codewiki/coordinator.ts +182 -0
- package/src/domains/context/codewiki/digest.ts +135 -0
- package/src/domains/context/codewiki/grammar-assets.ts +33 -0
- package/src/domains/context/codewiki/indexer.ts +1529 -0
- package/src/domains/context/codewiki/paths.ts +67 -0
- package/src/domains/context/codewiki/schema.ts +80 -0
- package/src/domains/context/codewiki/tree-sitter.ts +771 -0
- package/src/domains/context/contract.ts +68 -0
- package/src/domains/context/excluded-dirs.ts +1 -0
- package/src/domains/context/extension.ts +358 -0
- package/src/domains/context/fingerprint.ts +198 -0
- package/src/domains/context/index.ts +154 -0
- package/src/domains/context/init-options.ts +69 -0
- package/src/domains/context/manifest.ts +6 -0
- package/src/domains/context/operator-profile.ts +157 -0
- package/src/domains/context/project-metadata.ts +529 -0
- package/src/domains/context/project-rules.ts +227 -0
- package/src/domains/context/prompt-context.ts +61 -0
- package/src/domains/context/refresh.ts +178 -0
- package/src/domains/context/runtime.ts +17 -0
- package/src/domains/context/sibling-files.ts +10 -0
- package/src/domains/context/state.ts +237 -0
- package/src/domains/context/wiki/assemble.ts +303 -0
- package/src/domains/context/wiki/frontmatter.ts +210 -0
- package/src/domains/context/wiki/generate.ts +595 -0
- package/src/domains/context/wiki/layout.ts +111 -0
- package/src/domains/context/wiki/meta.ts +221 -0
- package/src/domains/context/wiki/plan-store.ts +217 -0
- package/src/domains/context/wiki/plan.ts +250 -0
- package/src/domains/context/wiki/prompts.ts +283 -0
- package/src/domains/context/wiki/staleness.ts +198 -0
- package/src/domains/dispatch/active-route-planner.ts +168 -0
- package/src/domains/dispatch/admission-queue.ts +150 -0
- package/src/domains/dispatch/admission.ts +334 -0
- package/src/domains/dispatch/agent-candidates.ts +307 -0
- package/src/domains/dispatch/agent-ledger-hub.ts +71 -0
- package/src/domains/dispatch/agent-ledger-store.ts +257 -0
- package/src/domains/dispatch/agent-ledger.ts +212 -0
- package/src/domains/dispatch/agent-plan-adapter.ts +85 -0
- package/src/domains/dispatch/assignment-events.ts +132 -0
- package/src/domains/dispatch/assignment-reconcile.ts +76 -0
- package/src/domains/dispatch/assignment-store.ts +162 -0
- package/src/domains/dispatch/assignment.ts +278 -0
- package/src/domains/dispatch/backoff.ts +59 -0
- package/src/domains/dispatch/batch-store.ts +134 -0
- package/src/domains/dispatch/batch-tracker.ts +66 -0
- package/src/domains/dispatch/capability-match.ts +155 -0
- package/src/domains/dispatch/capacity-lease.ts +413 -0
- package/src/domains/dispatch/code-step-store.ts +52 -0
- package/src/domains/dispatch/code-step.ts +387 -0
- package/src/domains/dispatch/contract.ts +278 -0
- package/src/domains/dispatch/dedup.ts +133 -0
- package/src/domains/dispatch/event-pump.ts +251 -0
- package/src/domains/dispatch/execution-handoff.ts +29 -0
- package/src/domains/dispatch/execution-plan.ts +328 -0
- package/src/domains/dispatch/execution-role.ts +277 -0
- package/src/domains/dispatch/execution-scheduler.ts +583 -0
- package/src/domains/dispatch/extension.ts +6006 -0
- package/src/domains/dispatch/failure-classification.ts +147 -0
- package/src/domains/dispatch/fleet-commit-attribution.ts +56 -0
- package/src/domains/dispatch/fleet-plan.ts +225 -0
- package/src/domains/dispatch/fleet-preflight.ts +394 -0
- package/src/domains/dispatch/gate-decisions.ts +1040 -0
- package/src/domains/dispatch/gate-role-prompts.ts +58 -0
- package/src/domains/dispatch/heartbeat.ts +27 -0
- package/src/domains/dispatch/index.ts +137 -0
- package/src/domains/dispatch/joint-route-adapter.ts +114 -0
- package/src/domains/dispatch/joint-route-resolver.ts +283 -0
- package/src/domains/dispatch/manifest.ts +6 -0
- package/src/domains/dispatch/orphan-recovery.ts +266 -0
- package/src/domains/dispatch/outcome.ts +109 -0
- package/src/domains/dispatch/phase-timing.ts +47 -0
- package/src/domains/dispatch/placement.ts +202 -0
- package/src/domains/dispatch/receipt-findings.ts +255 -0
- package/src/domains/dispatch/receipt-integrity.ts +383 -0
- package/src/domains/dispatch/recovery-candidates.ts +74 -0
- package/src/domains/dispatch/reproducibility.ts +48 -0
- package/src/domains/dispatch/reservation-store.ts +501 -0
- package/src/domains/dispatch/route-approval.ts +177 -0
- package/src/domains/dispatch/route-candidates.ts +57 -0
- package/src/domains/dispatch/route-decision.ts +1079 -0
- package/src/domains/dispatch/route-facts.ts +187 -0
- package/src/domains/dispatch/route-history.ts +238 -0
- package/src/domains/dispatch/route-observer.ts +488 -0
- package/src/domains/dispatch/route-policy.ts +327 -0
- package/src/domains/dispatch/route-quality.ts +256 -0
- package/src/domains/dispatch/route-readiness.ts +120 -0
- package/src/domains/dispatch/routing-intent.ts +287 -0
- package/src/domains/dispatch/run-identity.ts +56 -0
- package/src/domains/dispatch/scout-transition.ts +130 -0
- package/src/domains/dispatch/state.ts +302 -0
- package/src/domains/dispatch/tool-stats.ts +132 -0
- package/src/domains/dispatch/transport.ts +210 -0
- package/src/domains/dispatch/types.ts +799 -0
- package/src/domains/dispatch/validation-grounding.ts +154 -0
- package/src/domains/dispatch/validation.ts +721 -0
- package/src/domains/dispatch/worker-protocol.ts +275 -0
- package/src/domains/dispatch/worker-spawn.ts +585 -0
- package/src/domains/dispatch/write-boundary-enforcer.ts +97 -0
- package/src/domains/dispatch/write-boundary.ts +426 -0
- package/src/domains/eval/artifacts/redact.ts +42 -0
- package/src/domains/eval/artifacts/store.ts +173 -0
- package/src/domains/eval/compare/compare.ts +33 -0
- package/src/domains/eval/compare/gates.ts +66 -0
- package/src/domains/eval/compare/thresholds.ts +92 -0
- package/src/domains/eval/harness-metrics.ts +62 -0
- package/src/domains/eval/index.ts +66 -0
- package/src/domains/eval/metrics/chaos-stream.ts +93 -0
- package/src/domains/eval/metrics/context.ts +34 -0
- package/src/domains/eval/metrics/coverage.ts +21 -0
- package/src/domains/eval/metrics/evidence.ts +182 -0
- package/src/domains/eval/metrics/fleet-loop-stream.ts +196 -0
- package/src/domains/eval/metrics/invariants.ts +736 -0
- package/src/domains/eval/metrics/latency.ts +4 -0
- package/src/domains/eval/metrics/token-stream.ts +139 -0
- package/src/domains/eval/metrics/tokens.ts +51 -0
- package/src/domains/eval/metrics/tool-calls.ts +7 -0
- package/src/domains/eval/proactive-memory.ts +279 -0
- package/src/domains/eval/provenance.ts +35 -0
- package/src/domains/eval/report.ts +234 -0
- package/src/domains/eval/reports/json.ts +5 -0
- package/src/domains/eval/reports/junit.ts +23 -0
- package/src/domains/eval/reports/markdown.ts +20 -0
- package/src/domains/eval/reports/swe-jsonl.ts +16 -0
- package/src/domains/eval/reports/text.ts +25 -0
- package/src/domains/eval/run-compare.ts +274 -0
- package/src/domains/eval/runner.ts +244 -0
- package/src/domains/eval/runners/clio-run.ts +148 -0
- package/src/domains/eval/runners/context-index.ts +56 -0
- package/src/domains/eval/runners/context-init.ts +203 -0
- package/src/domains/eval/runners/external-command.ts +350 -0
- package/src/domains/eval/runtime-paths.ts +171 -0
- package/src/domains/eval/schema/artifact.ts +75 -0
- package/src/domains/eval/schema/suite.ts +235 -0
- package/src/domains/eval/schema/validate.ts +339 -0
- package/src/domains/eval/store.ts +392 -0
- package/src/domains/eval/suites/load.ts +74 -0
- package/src/domains/eval/suites/matrix.ts +19 -0
- package/src/domains/eval/suites/resolve.ts +44 -0
- package/src/domains/eval/suites/run.ts +325 -0
- package/src/domains/eval/task-file.ts +186 -0
- package/src/domains/eval/types.ts +140 -0
- package/src/domains/eval/verifiers/command.ts +27 -0
- package/src/domains/eval/verifiers/file-exists.ts +6 -0
- package/src/domains/eval/verifiers/patch.ts +22 -0
- package/src/domains/eval/workspaces/git.ts +41 -0
- package/src/domains/eval/workspaces/local.ts +17 -0
- package/src/domains/eval/workspaces/temp-copy.ts +29 -0
- package/src/domains/evidence/build.ts +1754 -0
- package/src/domains/evidence/eval.ts +605 -0
- package/src/domains/evidence/failure-attribution.ts +54 -0
- package/src/domains/evidence/finish-contract-map.ts +42 -0
- package/src/domains/evidence/index.ts +55 -0
- package/src/domains/evidence/provenance.ts +200 -0
- package/src/domains/evidence/redact.ts +81 -0
- package/src/domains/evidence/store.ts +291 -0
- package/src/domains/evidence/types.ts +325 -0
- package/src/domains/evolution/SELF_EDIT_GATE.md +91 -0
- package/src/domains/evolution/index.ts +26 -0
- package/src/domains/evolution/manifest.ts +154 -0
- package/src/domains/evolution/validate.ts +304 -0
- package/src/domains/extensions/contract.ts +22 -0
- package/src/domains/extensions/discovery.ts +193 -0
- package/src/domains/extensions/extension.ts +46 -0
- package/src/domains/extensions/index.ts +34 -0
- package/src/domains/extensions/manager.ts +30 -0
- package/src/domains/extensions/manifest.ts +6 -0
- package/src/domains/extensions/resources.ts +38 -0
- package/src/domains/extensions/state.ts +224 -0
- package/src/domains/extensions/types.ts +83 -0
- package/src/domains/interop/consent.ts +185 -0
- package/src/domains/interop/contract.ts +29 -0
- package/src/domains/interop/detect.ts +173 -0
- package/src/domains/interop/extension.ts +59 -0
- package/src/domains/interop/index.ts +34 -0
- package/src/domains/interop/manifest.ts +6 -0
- package/src/domains/interop/registry.ts +139 -0
- package/src/domains/interop/state.ts +92 -0
- package/src/domains/interop/types.ts +109 -0
- package/src/domains/lifecycle/contract.ts +11 -0
- package/src/domains/lifecycle/doctor.ts +536 -0
- package/src/domains/lifecycle/extension.ts +23 -0
- package/src/domains/lifecycle/index.ts +21 -0
- package/src/domains/lifecycle/install-method.ts +51 -0
- package/src/domains/lifecycle/manifest.ts +6 -0
- package/src/domains/lifecycle/migrations/2026-08-18-lmstudio-runtime-id.ts +52 -0
- package/src/domains/lifecycle/migrations/index.ts +114 -0
- package/src/domains/lifecycle/state.ts +93 -0
- package/src/domains/lifecycle/upgrade-notice.ts +35 -0
- package/src/domains/lifecycle/version.ts +35 -0
- package/src/domains/memory/index.ts +128 -0
- package/src/domains/memory/operations.ts +143 -0
- package/src/domains/memory/prompt-section.ts +86 -0
- package/src/domains/memory/proposal.ts +180 -0
- package/src/domains/memory/store.ts +163 -0
- package/src/domains/memory/task-bank.ts +229 -0
- package/src/domains/memory/task-memory-handoff.ts +222 -0
- package/src/domains/memory/task-memory-policy.ts +602 -0
- package/src/domains/memory/task-memory-status.ts +58 -0
- package/src/domains/memory/task-memory-telemetry.ts +346 -0
- package/src/domains/memory/task-memory-trace.ts +89 -0
- package/src/domains/memory/types.ts +74 -0
- package/src/domains/memory/validate.ts +297 -0
- package/src/domains/middleware/budget.ts +216 -0
- package/src/domains/middleware/contract.ts +35 -0
- package/src/domains/middleware/dispatch-nudge.ts +469 -0
- package/src/domains/middleware/extension.ts +129 -0
- package/src/domains/middleware/hook-receipts.ts +70 -0
- package/src/domains/middleware/hooks-io.ts +186 -0
- package/src/domains/middleware/hooks.ts +432 -0
- package/src/domains/middleware/index.ts +154 -0
- package/src/domains/middleware/manifest.ts +6 -0
- package/src/domains/middleware/memory-intervention.ts +701 -0
- package/src/domains/middleware/rules.ts +42 -0
- package/src/domains/middleware/runtime.ts +333 -0
- package/src/domains/middleware/skills-reminder.ts +202 -0
- package/src/domains/middleware/snapshot.ts +71 -0
- package/src/domains/middleware/stalled-turn.ts +71 -0
- package/src/domains/middleware/task-board-reminder.ts +87 -0
- package/src/domains/middleware/task-nudge.ts +77 -0
- package/src/domains/middleware/tool-choice-control.ts +42 -0
- package/src/domains/middleware/types.ts +131 -0
- package/src/domains/middleware/validate.ts +329 -0
- package/src/domains/observability/accountability.ts +67 -0
- package/src/domains/observability/contract.ts +168 -0
- package/src/domains/observability/cost.ts +206 -0
- package/src/domains/observability/evidence-index.ts +123 -0
- package/src/domains/observability/extension.ts +281 -0
- package/src/domains/observability/index.ts +78 -0
- package/src/domains/observability/manifest.ts +10 -0
- package/src/domains/observability/metrics.ts +37 -0
- package/src/domains/observability/projection.ts +477 -0
- package/src/domains/observability/telemetry.ts +89 -0
- package/src/domains/observability/trace-store.ts +1454 -0
- package/src/domains/prompts/compiler.ts +614 -0
- package/src/domains/prompts/contract.ts +46 -0
- package/src/domains/prompts/extension.ts +336 -0
- package/src/domains/prompts/fragment-loader.ts +138 -0
- package/src/domains/prompts/fragments/identity/clio.md +5 -6
- package/src/domains/prompts/fragments/identity/docs-routing.md +10 -0
- package/src/domains/prompts/fragments/identity/self-awareness.md +19 -0
- package/src/domains/prompts/fragments/operating/contract.md +4 -41
- package/src/domains/prompts/fragments/operating/delegation.md +42 -0
- package/src/domains/prompts/fragments/operating/skills.md +26 -0
- package/src/domains/prompts/fragments/operating/worker.md +16 -0
- package/src/domains/prompts/fragments/safety/auto-edit.md +5 -5
- package/src/domains/prompts/fragments/safety/full-auto.md +3 -3
- package/src/domains/prompts/fragments/safety/read-only.md +4 -4
- package/src/domains/prompts/fragments/safety/suggest.md +2 -2
- package/src/domains/prompts/fragments/wiki/page.md +10 -0
- package/src/domains/prompts/fragments/wiki/plan.md +10 -0
- package/src/domains/prompts/hash.ts +73 -0
- package/src/domains/prompts/index.ts +32 -0
- package/src/domains/prompts/manifest.ts +8 -0
- package/src/domains/prompts/memory-intervention.ts +57 -0
- package/src/domains/prompts/preload.ts +82 -0
- package/src/domains/providers/auth/api-key.ts +47 -0
- package/src/domains/providers/auth/backend-file.ts +79 -0
- package/src/domains/providers/auth/backend-memory.ts +72 -0
- package/src/domains/providers/auth/boot-status.ts +65 -0
- package/src/domains/providers/auth/index.ts +37 -0
- package/src/domains/providers/auth/oauth.ts +37 -0
- package/src/domains/providers/auth/storage.ts +726 -0
- package/src/domains/providers/capabilities.ts +58 -0
- package/src/domains/providers/catalog.ts +162 -0
- package/src/domains/providers/contract.ts +162 -0
- package/src/domains/providers/credentials.ts +20 -0
- package/src/domains/providers/eligibility.ts +24 -0
- package/src/domains/providers/errors.ts +64 -0
- package/src/domains/providers/extension.ts +548 -0
- package/src/domains/providers/index.ts +142 -0
- package/src/domains/providers/knowledge-base-path.ts +102 -0
- package/src/domains/providers/manifest.ts +6 -0
- package/src/domains/providers/model-capabilities.ts +136 -0
- package/src/domains/providers/model-discovery.ts +144 -0
- package/src/domains/providers/model-family.ts +32 -0
- package/src/domains/providers/model-runtime-capabilities.ts +723 -0
- package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +120 -37
- package/src/domains/providers/plugins.ts +61 -0
- package/src/domains/providers/probe/fingerprint.ts +64 -0
- package/src/domains/providers/probe/http.ts +114 -0
- package/src/domains/providers/probe/reasoning.ts +111 -0
- package/src/domains/providers/registry.ts +187 -0
- package/src/domains/providers/resolver.ts +156 -0
- package/src/domains/providers/runtime-resolution.ts +720 -0
- package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +90 -0
- package/src/domains/providers/runtimes/boot-manifest.ts +55 -0
- package/src/domains/providers/runtimes/builtins.ts +78 -0
- package/src/domains/providers/runtimes/claude/claude-code.ts +38 -0
- package/src/domains/providers/runtimes/claude/claude-sdk.ts +38 -0
- package/src/domains/providers/runtimes/claude/common.ts +55 -0
- package/src/domains/providers/runtimes/cloud/alcf.ts +171 -0
- package/src/domains/providers/runtimes/cloud/anthropic-max.ts +71 -0
- package/src/domains/providers/runtimes/cloud/anthropic.ts +43 -0
- package/src/domains/providers/runtimes/cloud/bedrock.ts +35 -0
- package/src/domains/providers/runtimes/cloud/deepseek.ts +50 -0
- package/src/domains/providers/runtimes/cloud/google.ts +41 -0
- package/src/domains/providers/runtimes/cloud/groq.ts +46 -0
- package/src/domains/providers/runtimes/cloud/mistral.ts +46 -0
- package/src/domains/providers/runtimes/cloud/openai-codex.ts +49 -0
- package/src/domains/providers/runtimes/cloud/openai.ts +46 -0
- package/src/domains/providers/runtimes/cloud/openrouter.ts +111 -0
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +423 -0
- package/src/domains/providers/runtimes/common/local-synth.ts +164 -0
- package/src/domains/providers/runtimes/common/probe-helpers.ts +474 -0
- package/src/domains/providers/runtimes/local-native/lemonade-anthropic.ts +27 -0
- package/src/domains/providers/runtimes/local-native/lemonade-openai.ts +26 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-anthropic.ts +88 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +207 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +180 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +126 -0
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +98 -0
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +241 -0
- package/src/domains/providers/runtimes/local-native/ollama-native.ts +117 -0
- package/src/domains/providers/runtimes/local-native/sglang.ts +26 -0
- package/src/domains/providers/runtimes/local-native/vllm.ts +27 -0
- package/src/domains/providers/runtimes/protocol/anthropic-compat.ts +104 -0
- package/src/domains/providers/runtimes/protocol/anthropic-messages.ts +28 -0
- package/src/domains/providers/runtimes/protocol/bedrock.ts +26 -0
- package/src/domains/providers/runtimes/protocol/google.ts +27 -0
- package/src/domains/providers/runtimes/protocol/openai-compat.ts +145 -0
- package/src/domains/providers/support.ts +241 -0
- package/src/domains/providers/thinking-control-policy.ts +85 -0
- package/src/domains/providers/types/capability-flags.ts +114 -0
- package/src/domains/providers/types/cost-provenance.ts +7 -0
- package/src/domains/providers/types/inference.ts +41 -0
- package/src/domains/providers/types/knowledge-base.ts +156 -0
- package/src/domains/providers/types/local-model-quirks.ts +216 -0
- package/src/domains/providers/types/runtime-descriptor.ts +181 -0
- package/src/domains/providers/types/target-descriptor.ts +60 -0
- package/src/domains/resources/collision.ts +92 -0
- package/src/domains/resources/common-loader.ts +140 -0
- package/src/domains/resources/contract.ts +24 -0
- package/src/domains/resources/extension.ts +59 -0
- package/src/domains/resources/index.ts +74 -0
- package/src/domains/resources/loader.ts +85 -0
- package/src/domains/resources/manifest.ts +6 -0
- package/src/domains/resources/prompts/loader.ts +246 -0
- package/src/domains/resources/prompts/substitute.ts +1 -0
- package/src/domains/resources/skills/content-hash.ts +107 -0
- package/src/domains/resources/skills/evals.ts +175 -0
- package/src/domains/resources/skills/install.ts +427 -0
- package/src/domains/resources/skills/loader.ts +985 -0
- package/src/domains/resources/skills/marketplace.ts +301 -0
- package/src/domains/resources/skills/provenance-pin.ts +115 -0
- package/src/domains/safety/action-classifier.ts +270 -0
- package/src/domains/safety/approval-axis.ts +23 -0
- package/src/domains/safety/audit.ts +493 -0
- package/src/domains/safety/autonomy.ts +174 -0
- package/src/domains/safety/call-target.ts +59 -0
- package/src/domains/safety/contract.ts +65 -0
- package/src/domains/safety/damage-control.ts +44 -0
- package/src/domains/safety/default-path-policy.ts +117 -0
- package/src/domains/safety/extension.ts +383 -0
- package/src/domains/safety/finish-contract-registration.ts +128 -0
- package/src/domains/safety/finish-contract.ts +554 -0
- package/src/domains/safety/index.ts +44 -0
- package/src/domains/safety/loop-detector.ts +143 -0
- package/src/domains/safety/manifest.ts +6 -0
- package/src/domains/safety/path-policy.ts +164 -0
- package/src/domains/safety/policy-engine.ts +994 -0
- package/src/domains/safety/project-policy.ts +391 -0
- package/src/domains/safety/protected-artifacts-registration.ts +189 -0
- package/src/domains/safety/protected-artifacts.ts +993 -0
- package/src/domains/safety/rejection-feedback.ts +102 -0
- package/src/domains/safety/rigor.ts +72 -0
- package/src/domains/safety/rule-compiler.ts +48 -0
- package/src/domains/safety/rule-pack-loader.ts +92 -0
- package/src/domains/safety/run-effects.ts +197 -0
- package/src/domains/safety/scope.ts +61 -0
- package/src/domains/scheduling/budget.ts +35 -0
- package/src/domains/scheduling/cluster.ts +175 -0
- package/src/domains/scheduling/contract.ts +30 -0
- package/src/domains/scheduling/extension.ts +91 -0
- package/src/domains/scheduling/index.ts +12 -0
- package/src/domains/scheduling/manifest.ts +6 -0
- package/src/domains/session/archive-readers.ts +208 -0
- package/src/domains/session/checkpoint.ts +38 -0
- package/src/domains/session/compaction/auto.ts +89 -0
- package/src/domains/session/compaction/branch-summary.ts +187 -0
- package/src/domains/session/compaction/compact.ts +493 -0
- package/src/domains/session/compaction/cut-point.ts +172 -0
- package/src/domains/session/compaction/defaults.ts +34 -0
- package/src/domains/session/compaction/mask-observations.ts +265 -0
- package/src/domains/session/compaction/session-entries.ts +18 -0
- package/src/domains/session/compaction/tokens.ts +148 -0
- package/src/domains/session/context-accounting.ts +583 -0
- package/src/domains/session/context-ledger.ts +362 -0
- package/src/domains/session/contract.ts +159 -0
- package/src/domains/session/cwd-fallback.ts +65 -0
- package/src/domains/session/decision-board.ts +190 -0
- package/src/domains/session/entries.ts +572 -0
- package/src/domains/session/extension.ts +403 -0
- package/src/domains/session/history.ts +172 -0
- package/src/domains/session/index.ts +84 -0
- package/src/domains/session/manager.ts +128 -0
- package/src/domains/session/manifest.ts +6 -0
- package/src/domains/session/migrations/index.ts +27 -0
- package/src/domains/session/prompt-manifest.ts +173 -0
- package/src/domains/session/protected-artifact-journal.ts +241 -0
- package/src/domains/session/protected-artifacts.ts +90 -0
- package/src/domains/session/retry.ts +230 -0
- package/src/domains/session/session-artifacts.ts +107 -0
- package/src/domains/session/task-board.ts +569 -0
- package/src/domains/session/tree/active-path.ts +137 -0
- package/src/domains/session/tree/fork.ts +159 -0
- package/src/domains/session/tree/manager.ts +128 -0
- package/src/domains/session/tree/navigator.ts +177 -0
- package/src/domains/session/tree/preview.ts +259 -0
- package/src/domains/session/usage.ts +148 -0
- package/src/domains/session/workspace/git-probe.ts +167 -0
- package/src/domains/session/workspace/index.ts +4 -0
- package/src/domains/session/workspace/project-type.ts +217 -0
- package/src/domains/session/workspace/snapshot.ts +74 -0
- package/src/domains/share/archive.ts +684 -0
- package/src/domains/share/contract.ts +9 -0
- package/src/domains/share/extension.ts +26 -0
- package/src/domains/share/index.ts +28 -0
- package/src/domains/share/manifest.ts +6 -0
- package/src/domains/user-tasks/store.ts +297 -0
- package/src/engine/acp/adapter.ts +397 -0
- package/src/engine/acp/errors.ts +128 -0
- package/src/engine/acp/event-mapper.ts +154 -0
- package/src/engine/acp/server.ts +2238 -0
- package/src/engine/acp/tool-mediator.ts +686 -0
- package/src/engine/acp/transport.ts +775 -0
- package/src/engine/acp/types.ts +196 -0
- package/src/engine/agent.ts +29 -0
- package/src/engine/ai.ts +207 -0
- package/src/engine/alcf-oauth.ts +205 -0
- package/src/engine/antigravity/subprocess-runtime.ts +205 -0
- package/src/engine/api-registry.ts +223 -0
- package/src/engine/apis/degraded-inference.ts +95 -0
- package/src/engine/apis/index.ts +16 -0
- package/src/engine/apis/llamacpp-residency.ts +292 -0
- package/src/engine/apis/lmstudio-residency.ts +76 -0
- package/src/engine/apis/lmstudio.ts +243 -0
- package/src/engine/apis/ollama-native.ts +528 -0
- package/src/engine/apis/openai-completions.ts +795 -0
- package/src/engine/apis/output-budget.ts +99 -0
- package/src/engine/apis/residency-lock.ts +29 -0
- package/src/engine/apis/residency.ts +776 -0
- package/src/engine/apis/resident-models.ts +42 -0
- package/src/engine/apis/sampling-overrides.ts +38 -0
- package/src/engine/apis/types.ts +16 -0
- package/src/engine/claude/sdk-runtime.ts +685 -0
- package/src/engine/claude/session-id.ts +5 -0
- package/src/engine/claude/subprocess-runtime.ts +316 -0
- package/src/engine/claude/tool-safety.ts +400 -0
- package/src/engine/env-api-keys.ts +98 -0
- package/src/engine/external-subprocess.ts +23 -0
- package/src/engine/gemma-channel-filter.ts +223 -0
- package/src/engine/harmony-response.ts +165 -0
- package/src/engine/instrumented-tui.ts +192 -0
- package/src/engine/loop-guard.ts +1127 -0
- package/src/engine/messages.ts +14 -0
- package/src/engine/models.ts +42 -0
- package/src/engine/oauth.ts +196 -0
- package/src/engine/pi-mono-names.ts +13 -0
- package/src/engine/prompt-templates.ts +1 -0
- package/src/engine/provider-payload.ts +272 -0
- package/src/engine/select-list.ts +53 -0
- package/src/engine/session.ts +834 -0
- package/src/engine/strip-tokenizer-sentinels.ts +125 -0
- package/src/engine/truncate.ts +9 -0
- package/src/engine/tui.ts +111 -0
- package/src/engine/types.ts +63 -0
- package/src/engine/worker-events.ts +100 -0
- package/src/engine/worker-runtime-capabilities.ts +5 -0
- package/src/engine/worker-runtime.ts +1022 -0
- package/src/engine/worker-tools.ts +208 -0
- package/src/entry/boot-options.ts +50 -0
- package/src/entry/orchestrator.ts +2011 -0
- package/src/interactive/application-controller.ts +433 -0
- package/src/interactive/bus-notices.ts +265 -0
- package/src/interactive/chat-loop-messages.ts +626 -0
- package/src/interactive/chat-loop-policy.ts +18 -0
- package/src/interactive/chat-loop.ts +1090 -0
- package/src/interactive/chat-panel.ts +1820 -0
- package/src/interactive/chat-renderer.ts +1228 -0
- package/src/interactive/clio-editor.ts +161 -0
- package/src/interactive/command-fallbacks.ts +23 -0
- package/src/interactive/command-output.ts +85 -0
- package/src/interactive/context-activity.ts +203 -0
- package/src/interactive/context-meter.ts +223 -0
- package/src/interactive/context-overlay.ts +246 -0
- package/src/interactive/cost-overlay.ts +279 -0
- package/src/interactive/dispatch-board.ts +1319 -0
- package/src/interactive/dispatch-steering.ts +86 -0
- package/src/interactive/editor-bash.ts +46 -0
- package/src/interactive/editor-steer.ts +51 -0
- package/src/interactive/editor-submit.ts +507 -0
- package/src/interactive/export-html/ansi-to-html.ts +161 -0
- package/src/interactive/export-html/index.ts +51 -0
- package/src/interactive/export-html/template.ts +45 -0
- package/src/interactive/export-html/tool-renderer.ts +54 -0
- package/src/interactive/external-editor.ts +67 -0
- package/src/interactive/follow-up-queue-panel.ts +75 -0
- package/src/interactive/footer/dashboard.ts +538 -0
- package/src/interactive/footer/notifications.ts +275 -0
- package/src/interactive/footer/widgets.ts +1264 -0
- package/src/interactive/footer-panel.ts +187 -0
- package/src/interactive/format-time.ts +97 -0
- package/src/interactive/index.ts +11 -0
- package/src/interactive/interactive-application.ts +939 -0
- package/src/interactive/interactive-event-projection.ts +385 -0
- package/src/interactive/interactive-input-runtime.ts +307 -0
- package/src/interactive/interactive-presentation.ts +584 -0
- package/src/interactive/interactive-shell.ts +388 -0
- package/src/interactive/interactive-slash-runtime.ts +554 -0
- package/src/interactive/interactive-subscriptions.ts +111 -0
- package/src/interactive/interactive-tickers.ts +183 -0
- package/src/interactive/keybinding-manager.ts +496 -0
- package/src/interactive/layout.ts +57 -0
- package/src/interactive/leader-key.ts +143 -0
- package/src/interactive/loop-guard-interrupt.ts +101 -0
- package/src/interactive/memory-overlay.ts +280 -0
- package/src/interactive/overlay-ask-user-lifecycle.ts +110 -0
- package/src/interactive/overlay-auth-lifecycle.ts +308 -0
- package/src/interactive/overlay-frame.ts +502 -0
- package/src/interactive/overlay-general-openers.ts +274 -0
- package/src/interactive/overlay-key-routing.ts +216 -0
- package/src/interactive/overlay-lifecycle.ts +426 -0
- package/src/interactive/overlay-model-selectors.ts +127 -0
- package/src/interactive/overlay-permission-lifecycle.ts +345 -0
- package/src/interactive/overlay-resource-openers.ts +112 -0
- package/src/interactive/overlay-session-lifecycle.ts +327 -0
- package/src/interactive/overlay-transitions.ts +57 -0
- package/src/interactive/overlays/agents.ts +69 -0
- package/src/interactive/overlays/ask-user.ts +921 -0
- package/src/interactive/overlays/auth-dialog.ts +221 -0
- package/src/interactive/overlays/context-reset.ts +108 -0
- package/src/interactive/overlays/cwd-fallback.ts +141 -0
- package/src/interactive/overlays/decisions.ts +300 -0
- package/src/interactive/overlays/extensions.ts +54 -0
- package/src/interactive/overlays/help-reference.ts +145 -0
- package/src/interactive/overlays/interop.ts +139 -0
- package/src/interactive/overlays/keybinding-detail.ts +90 -0
- package/src/interactive/overlays/list-overlay.ts +606 -0
- package/src/interactive/overlays/message-picker.ts +155 -0
- package/src/interactive/overlays/model-selector.ts +1109 -0
- package/src/interactive/overlays/prompts.ts +72 -0
- package/src/interactive/overlays/session-selector-search.ts +31 -0
- package/src/interactive/overlays/session-selector.ts +284 -0
- package/src/interactive/overlays/settings.ts +3451 -0
- package/src/interactive/overlays/skills-hub.ts +237 -0
- package/src/interactive/overlays/tree-selector.ts +422 -0
- package/src/interactive/permission-overlay.ts +170 -0
- package/src/interactive/render-trace.ts +534 -0
- package/src/interactive/renderers/branch-summary.ts +86 -0
- package/src/interactive/renderers/code-ink.ts +420 -0
- package/src/interactive/renderers/compaction-summary.ts +112 -0
- package/src/interactive/renderers/diff.ts +137 -0
- package/src/interactive/renderers/mermaid.ts +53 -0
- package/src/interactive/renderers/notice.ts +28 -0
- package/src/interactive/renderers/retry-status.ts +31 -0
- package/src/interactive/renderers/structured.ts +89 -0
- package/src/interactive/renderers/tool-execution.ts +1357 -0
- package/src/interactive/renderers/worker-entry.ts +280 -0
- package/src/interactive/session-last-turn.ts +186 -0
- package/src/interactive/session-switch-settlement.ts +10 -0
- package/src/interactive/session-transcript.ts +105 -0
- package/src/interactive/session-usage-reseed.ts +74 -0
- package/src/interactive/slash-autocomplete.ts +256 -0
- package/src/interactive/slash-commands.ts +1407 -0
- package/src/interactive/slash-spec.ts +424 -0
- package/src/interactive/status/controller.ts +260 -0
- package/src/interactive/status/index.ts +23 -0
- package/src/interactive/status/state-machine.ts +530 -0
- package/src/interactive/status/summary.ts +170 -0
- package/src/interactive/status/types.ts +121 -0
- package/src/interactive/status/verbs.ts +163 -0
- package/src/interactive/status/watchdog.ts +24 -0
- package/src/interactive/stdout-backpressure.ts +99 -0
- package/src/interactive/stream-pacer.ts +530 -0
- package/src/interactive/stream-pacing-policy.ts +66 -0
- package/src/interactive/tasks-overlay.ts +540 -0
- package/src/interactive/terminal-lease.ts +485 -0
- package/src/interactive/theme/components.ts +55 -0
- package/src/interactive/theme/glyphs.ts +70 -0
- package/src/interactive/theme/index.ts +15 -0
- package/src/interactive/theme/labels.ts +88 -0
- package/src/interactive/theme/rules.ts +138 -0
- package/src/interactive/theme/segments.ts +88 -0
- package/src/interactive/theme/tokens.ts +121 -0
- package/src/interactive/thinking-level-policy.ts +6 -0
- package/src/interactive/tool-prose-loop.ts +122 -0
- package/src/interactive/tool-prose-registration.ts +48 -0
- package/src/interactive/turn-context.ts +855 -0
- package/src/interactive/turn-middleware.ts +283 -0
- package/src/interactive/turn-persistence.ts +458 -0
- package/src/interactive/turn-queues.ts +181 -0
- package/src/interactive/turn-recovery.ts +323 -0
- package/src/interactive/turn-runtime.ts +869 -0
- package/src/interactive/turn-state.ts +133 -0
- package/src/interactive/view/artifacts.ts +1452 -0
- package/src/interactive/view/view-overlay.ts +735 -0
- package/src/interactive/welcome-dashboard.ts +537 -0
- package/src/interactive/worker-receipts.ts +143 -0
- package/src/interactive/worker-replay.ts +111 -0
- package/src/interactive/worker-share.ts +100 -0
- package/src/interactive/worker-stream.ts +446 -0
- package/src/interactive/workspace-facts.ts +141 -0
- package/src/tools/agent-tools.ts +402 -0
- package/src/tools/artifact.ts +103 -0
- package/src/tools/ask-user.ts +666 -0
- package/src/tools/bash.ts +204 -0
- package/src/tools/bootstrap.ts +77 -0
- package/src/tools/builtin-tool-catalog.ts +265 -0
- package/src/tools/codewiki/code-nav-surface.ts +29 -0
- package/src/tools/codewiki/code-nav.ts +549 -0
- package/src/tools/codewiki/shared.ts +118 -0
- package/src/tools/compete-worktrees.ts +898 -0
- package/src/tools/context/docs-engine.ts +630 -0
- package/src/tools/context/index.ts +514 -0
- package/src/tools/context/surface.ts +19 -0
- package/src/tools/core-bootstrap.ts +168 -0
- package/src/tools/credential-present.ts +151 -0
- package/src/tools/dispatch-admission.ts +533 -0
- package/src/tools/dispatch-arguments.ts +228 -0
- package/src/tools/dispatch-background.ts +54 -0
- package/src/tools/dispatch-event-text.ts +6 -0
- package/src/tools/dispatch-plan.ts +746 -0
- package/src/tools/dispatch-run-events.ts +238 -0
- package/src/tools/dispatch-runner.ts +2370 -0
- package/src/tools/dispatch-scout-admission.ts +295 -0
- package/src/tools/dispatch-scout.ts +461 -0
- package/src/tools/dispatch-types.ts +77 -0
- package/src/tools/dispatch.ts +244 -0
- package/src/tools/edit-diff.ts +534 -0
- package/src/tools/edit.ts +128 -0
- package/src/tools/executables.ts +22 -0
- package/src/tools/file-mutation-queue.ts +35 -0
- package/src/tools/find.ts +294 -0
- package/src/tools/grep.ts +495 -0
- package/src/tools/ignore-policy.ts +169 -0
- package/src/tools/lazy-tool.ts +60 -0
- package/src/tools/ledger.ts +206 -0
- package/src/tools/ls.ts +110 -0
- package/src/tools/monitor-surface.ts +36 -0
- package/src/tools/monitor.ts +767 -0
- package/src/tools/network-policy.ts +29 -0
- package/src/tools/observation.ts +421 -0
- package/src/tools/observers.ts +99 -0
- package/src/tools/path-utils.ts +79 -0
- package/src/tools/policy.ts +154 -0
- package/src/tools/profiles.ts +108 -0
- package/src/tools/read.ts +173 -0
- package/src/tools/registry.ts +1169 -0
- package/src/tools/result-shaping.ts +204 -0
- package/src/tools/safe-exec.ts +128 -0
- package/src/tools/spawn-hygiene.ts +182 -0
- package/src/tools/steer-surface.ts +17 -0
- package/src/tools/steer.ts +77 -0
- package/src/tools/tasks.ts +265 -0
- package/src/tools/truncate-utf8.ts +17 -0
- package/src/tools/truncate.ts +43 -0
- package/src/tools/verify/frontend.ts +687 -0
- package/src/tools/verify/index.ts +31 -0
- package/src/tools/verify/scripts.ts +108 -0
- package/src/tools/verify/surface.ts +46 -0
- package/src/tools/web-fetch-surface.ts +23 -0
- package/src/tools/web-fetch.ts +759 -0
- package/src/tools/worker-evidence.ts +215 -0
- package/src/tools/write.ts +57 -0
- package/src/utils/exif-orientation.ts +192 -0
- package/src/utils/git.ts +24 -0
- package/src/utils/image-resize.ts +148 -0
- package/src/utils/photon.ts +103 -0
- package/src/worker/control-lane.ts +22 -0
- package/src/worker/entry.ts +294 -0
- package/src/worker/event-projection.ts +56 -0
- package/src/worker/heartbeat.ts +24 -0
- package/src/worker/ledger-mirror.ts +95 -0
- package/src/worker/ndjson.ts +40 -0
- package/src/worker/protocol.ts +529 -0
- package/src/worker/resource-facts.ts +79 -0
- package/src/worker/runtime-registry.ts +12 -0
- package/src/worker/spec-contract.ts +675 -0
- package/src/worker/stdin-demux.ts +316 -0
- package/dist/acp-UMLFVA3F.js +0 -92
- package/dist/chunk-262G75JS.js +0 -35
- package/dist/chunk-6CWDTGUC.js +0 -20
- package/dist/chunk-BYEU76JP.js +0 -899
- package/dist/chunk-GNGDQYDU.js +0 -34688
- package/dist/chunk-GOTUR54M.js +0 -9
- package/dist/chunk-NI4DEJMC.js +0 -88
- package/dist/chunk-TPOCL34A.js +0 -2876
- package/dist/chunk-UU3R62TT.js +0 -128
- package/dist/clio-KIQ5SNDS.js +0 -53
- package/dist/configure-G4E3A2PG.js +0 -27
- package/dist/doctor-M5HJJZOL.js +0 -61
- package/dist/domains/agents/builtins/architect.md +0 -33
- package/dist/domains/agents/builtins/coder.md +0 -31
- package/dist/domains/agents/builtins/context-bootstrap.md +0 -38
- package/dist/domains/agents/builtins/debugger.md +0 -30
- package/dist/domains/agents/builtins/documenter.md +0 -31
- package/dist/domains/agents/builtins/git-master.md +0 -30
- package/dist/domains/agents/builtins/provenance.md +0 -30
- package/dist/domains/agents/builtins/researcher.md +0 -71
- package/dist/domains/agents/builtins/scout.md +0 -42
- package/dist/domains/agents/builtins/tester.md +0 -31
- package/dist/domains/agents/builtins/verifier.md +0 -30
- package/dist/domains/agents/builtins/wiki-writer.md +0 -41
- package/dist/fleet-preflight-CLIAX7YR.js +0 -21
- package/dist/preload-KZVHET2B.js +0 -11
- package/dist/version-ROZ6CZKH.js +0 -16
- package/docs/html/agents_blueprint.html +0 -936
- package/docs/html/alcf_blueprint.html +0 -324
- package/docs/html/architecture_blueprint.html +0 -850
- package/docs/html/commands_blueprint.html +0 -794
- package/docs/html/config_knobs_audit_blueprint.html +0 -178
- package/docs/html/configuration_blueprint.html +0 -1080
- package/docs/html/context_blueprint.html +0 -603
- package/docs/html/documentation_blueprint.html +0 -832
- package/docs/html/environment_blueprint.html +0 -404
- package/docs/html/eval_blueprint.html +0 -743
- package/docs/html/evals_internal_blueprint.html +0 -190
- package/docs/html/evolution_blueprint.html +0 -674
- package/docs/html/extensions_blueprint.html +0 -2065
- package/docs/html/fleet_dispatch_blueprint.html +0 -286
- package/docs/html/index.html +0 -919
- package/docs/html/lifecycle_blueprint.html +0 -723
- package/docs/html/memory_blueprint.html +0 -699
- package/docs/html/middleware_blueprint.html +0 -664
- package/docs/html/models_blueprint.html +0 -2366
- package/docs/html/observability_blueprint.html +0 -683
- package/docs/html/provider_adapter_blueprint.html +0 -245
- package/docs/html/safety_blueprint.html +0 -1386
- package/docs/html/shared.css +0 -571
- package/docs/html/shared.js +0 -143
- package/docs/html/skills_blueprint.html +0 -671
- package/docs/html/soak_blueprint.html +0 -182
- package/docs/html/tool_usage_blueprint.html +0 -350
- package/docs/html/tools_blueprint.html +0 -2249
- package/docs/html/trace_blueprint.html +0 -235
- package/docs/html/tui_design_blueprint.html +0 -314
- package/docs/html/validation_blueprint.html +0 -961
- package/docs/html/worker_dispatch_blueprint.html +0 -231
- package/skills/git/commit-crafting/SKILL.md +0 -79
- package/skills/git/commit-crafting/evals.md +0 -92
- package/skills/git/create-pr/SKILL.md +0 -116
- package/skills/git/create-pr/evals.md +0 -114
- package/skills/git/investigate-issue/SKILL.md +0 -139
- package/skills/git/investigate-issue/evals.md +0 -94
- package/skills/git/review-changes/SKILL.md +0 -103
- package/skills/git/review-changes/evals.md +0 -85
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-process switch for the RETRIEVE plane, the only builtin plane that
|
|
3
|
+
* leaves the machine.
|
|
4
|
+
*
|
|
5
|
+
* There is no per-run tool allowlist on the main-agent path: a headless
|
|
6
|
+
* `clio-coder run` gets whatever `registerAllTools` registered, and the registry
|
|
7
|
+
* answers an unregistered name with a `not_visible` verdict. So the existing
|
|
8
|
+
* lever for "this run has no network" is registration itself, the same lever
|
|
9
|
+
* that already keeps `ask_user` out of headless and worker registries. This
|
|
10
|
+
* module carries the switch that lever reads.
|
|
11
|
+
*
|
|
12
|
+
* The channel is an environment variable because the process that needs the
|
|
13
|
+
* policy is a child: the skill-eval harness spawns `clio-coder run` for each arm,
|
|
14
|
+
* and any worker those runs dispatch is a grandchild. Env inherits down the
|
|
15
|
+
* whole tree, so one setting at spawn time covers every registry built below
|
|
16
|
+
* it (`src/tools/bootstrap.ts`, `src/engine/worker-tools.ts`) without a flag
|
|
17
|
+
* threaded through four call layers.
|
|
18
|
+
*
|
|
19
|
+
* What this does not cover: a runtime that executes its own tool surface
|
|
20
|
+
* outside Clio's mediation (an external CLI subprocess) never consults this
|
|
21
|
+
* registry, so its network access is its own to answer for.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/** Set to "1" to strip network tools from every registry built in this process. */
|
|
25
|
+
export const NO_NETWORK_TOOLS_ENV = "CLIO_CODER_NO_NETWORK_TOOLS";
|
|
26
|
+
|
|
27
|
+
export function networkToolsDisabled(env: NodeJS.ProcessEnv = process.env): boolean {
|
|
28
|
+
return env[NO_NETWORK_TOOLS_ENV] === "1";
|
|
29
|
+
}
|
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
import { GUARDRAIL_DEFAULTS, GUARDRAIL_ENV_VARS, resolveGuardrail } from "../core/guardrails.js";
|
|
2
|
+
import type { ToolInvokeOptions, ToolResult } from "./registry.js";
|
|
3
|
+
import { offloadPointer, writeToolOffload } from "./result-shaping.js";
|
|
4
|
+
import { formatSize } from "./truncate.js";
|
|
5
|
+
import { byteLength } from "./truncate-utf8.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Shared observation envelope for the OBSERVE plane (read, grep, find, ls,
|
|
9
|
+
* code_nav, context). One result layer owns what every one of those tools
|
|
10
|
+
* used to hand-roll separately:
|
|
11
|
+
*
|
|
12
|
+
* - offload-on-truncation: any truncated observation spills its FULL
|
|
13
|
+
* rendering to the per-session scratch file and reports the path, so no
|
|
14
|
+
* collected match/path/line is ever unrecoverable;
|
|
15
|
+
* - exactly one notice line in one format, with an exact continuation call
|
|
16
|
+
* (`next: limit=200`), never prose;
|
|
17
|
+
* - a valid-JSON guarantee for format:"json" tools: an oversize payload is
|
|
18
|
+
* replaced by a parseable stub instead of being cut mid-document;
|
|
19
|
+
* - the per-turn observation budget (one pool per sessionId:turnId across
|
|
20
|
+
* all six tools) that used to live in read.ts and covered only read;
|
|
21
|
+
* - one details schema (`details.observation`) for the TUI ledger, session
|
|
22
|
+
* turns, and observers.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
export type ObservationUnit = "lines" | "matches" | "paths" | "entries" | "results" | "sections";
|
|
26
|
+
export type ObservationFormat = "text" | "json";
|
|
27
|
+
|
|
28
|
+
export interface ObservationBudgetDetails {
|
|
29
|
+
limitBytes: number;
|
|
30
|
+
usedBeforeBytes: number;
|
|
31
|
+
exhausted: boolean;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface Observation {
|
|
35
|
+
tool: string;
|
|
36
|
+
unit: ObservationUnit;
|
|
37
|
+
shownCount: number;
|
|
38
|
+
/** null = unknown (search killed early at the limit); rendered as "N+". */
|
|
39
|
+
totalCount: number | null;
|
|
40
|
+
shownBytes: number;
|
|
41
|
+
totalBytes: number;
|
|
42
|
+
truncated: boolean;
|
|
43
|
+
format: ObservationFormat;
|
|
44
|
+
/** Exact continuation call fragment, e.g. `limit=200` or `offset=451`. */
|
|
45
|
+
next?: string;
|
|
46
|
+
offloadPath?: string;
|
|
47
|
+
budget?: ObservationBudgetDetails;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Per-tool self-caps, the single source the bootstrap metadata table derives
|
|
51
|
+
// its policy caps from (policy cap = self cap + OBSERVATION_POLICY_SLACK so a
|
|
52
|
+
// tool's own notice survives the registry backstop instead of being cut again).
|
|
53
|
+
export const OBSERVATION_POLICY_SLACK_BYTES = 2 * 1024;
|
|
54
|
+
export const OBSERVE_SELF_CAPS = {
|
|
55
|
+
grepContent: 16 * 1024,
|
|
56
|
+
grepFilesCount: 8 * 1024,
|
|
57
|
+
find: 8 * 1024,
|
|
58
|
+
ls: 8 * 1024,
|
|
59
|
+
codeNav: 16 * 1024,
|
|
60
|
+
contextDocs: 16 * 1024,
|
|
61
|
+
contextSkills: 50 * 1024,
|
|
62
|
+
contextWorkspace: 50 * 1024,
|
|
63
|
+
} as const;
|
|
64
|
+
|
|
65
|
+
// Per-turn observation budget pool. One pool per sessionId:turnId shared by
|
|
66
|
+
// every OBSERVE tool; LRU-pruned so abandoned turns cannot grow the map.
|
|
67
|
+
// Value, settings key, and env override live in core/guardrails.ts.
|
|
68
|
+
export const DEFAULT_OBSERVATION_TURN_BUDGET_BYTES = GUARDRAIL_DEFAULTS.observationTurnBudgetBytes;
|
|
69
|
+
export const OBSERVATION_TURN_BUDGET_ENV = GUARDRAIL_ENV_VARS.observationTurnBudgetBytes;
|
|
70
|
+
const MIN_BUDGET_SLICE_BYTES = 1024;
|
|
71
|
+
const BUDGET_TRACK_LIMIT = 256;
|
|
72
|
+
|
|
73
|
+
interface TurnBudgetState {
|
|
74
|
+
usedBytes: number;
|
|
75
|
+
lastSeenAt: number;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const turnBudgets = new Map<string, TurnBudgetState>();
|
|
79
|
+
|
|
80
|
+
export interface ObservationReservation {
|
|
81
|
+
/** null when the invocation carries no turn id (no budget tracking). */
|
|
82
|
+
key: string | null;
|
|
83
|
+
limitBytes: number;
|
|
84
|
+
usedBeforeBytes: number;
|
|
85
|
+
selfCapBytes: number;
|
|
86
|
+
/** Effective byte cap for this call: min(self cap, remaining budget). */
|
|
87
|
+
callCapBytes: number;
|
|
88
|
+
/** True when the pool reduced this call's cap below the self cap. */
|
|
89
|
+
limited: boolean;
|
|
90
|
+
exhausted: boolean;
|
|
91
|
+
/**
|
|
92
|
+
* True once the call has charged its full cap to the pool up front (async
|
|
93
|
+
* tools, via commitObservationReservation) so concurrent siblings see it.
|
|
94
|
+
*/
|
|
95
|
+
committed: boolean;
|
|
96
|
+
/** True once the charge has been reconciled or refunded exactly once. */
|
|
97
|
+
settled: boolean;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// A `next` continuation is a compact call fragment (`limit=200`, `offset=451`).
|
|
101
|
+
// A tool that folds an input argument into it (`mode=path query=<arg>`) can grow
|
|
102
|
+
// it without bound when the argument is huge, and the JSON cap stub echoes it
|
|
103
|
+
// verbatim — turning a "result exceeded 16KB" placeholder into a 256KB payload.
|
|
104
|
+
// Bound the fragment so the stub, the notice line, and the observation envelope
|
|
105
|
+
// stay small; the offloaded full result is where the untruncated data lives.
|
|
106
|
+
const MAX_CONTINUATION_CHARS = 200;
|
|
107
|
+
|
|
108
|
+
function boundContinuation(next: string | undefined): string | undefined {
|
|
109
|
+
if (next === undefined || next.length <= MAX_CONTINUATION_CHARS) return next;
|
|
110
|
+
return `${Array.from(next).slice(0, MAX_CONTINUATION_CHARS).join("")}…`;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function observationTurnBudgetLimit(env: NodeJS.ProcessEnv = process.env): number {
|
|
114
|
+
return Math.max(MIN_BUDGET_SLICE_BYTES, resolveGuardrail("observationTurnBudgetBytes", env));
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function budgetKey(options: ToolInvokeOptions | undefined): string | null {
|
|
118
|
+
const turnId = options?.turnId?.trim();
|
|
119
|
+
if (!turnId) return null;
|
|
120
|
+
const sessionId = options?.sessionId?.trim() || "no-session";
|
|
121
|
+
return `${sessionId}:${turnId}`;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function pruneBudgetMap(): void {
|
|
125
|
+
while (turnBudgets.size > BUDGET_TRACK_LIMIT) {
|
|
126
|
+
let oldestKey: string | null = null;
|
|
127
|
+
let oldestSeen = Number.POSITIVE_INFINITY;
|
|
128
|
+
for (const [key, state] of turnBudgets) {
|
|
129
|
+
if (state.lastSeenAt >= oldestSeen) continue;
|
|
130
|
+
oldestKey = key;
|
|
131
|
+
oldestSeen = state.lastSeenAt;
|
|
132
|
+
}
|
|
133
|
+
if (oldestKey === null) break;
|
|
134
|
+
turnBudgets.delete(oldestKey);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Reserve this call's slice of the turn pool. Call before doing the work so
|
|
140
|
+
* an exhausted pool short-circuits via `observationBudgetExhausted` instead
|
|
141
|
+
* of paying for a search whose output cannot be returned.
|
|
142
|
+
*/
|
|
143
|
+
export function reserveObservation(selfCapBytes: number, options?: ToolInvokeOptions): ObservationReservation {
|
|
144
|
+
const key = budgetKey(options);
|
|
145
|
+
if (key === null) {
|
|
146
|
+
return {
|
|
147
|
+
key,
|
|
148
|
+
limitBytes: observationTurnBudgetLimit(),
|
|
149
|
+
usedBeforeBytes: 0,
|
|
150
|
+
selfCapBytes,
|
|
151
|
+
callCapBytes: selfCapBytes,
|
|
152
|
+
limited: false,
|
|
153
|
+
exhausted: false,
|
|
154
|
+
committed: false,
|
|
155
|
+
settled: false,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
const limitBytes = observationTurnBudgetLimit();
|
|
159
|
+
const state = turnBudgets.get(key) ?? { usedBytes: 0, lastSeenAt: Date.now() };
|
|
160
|
+
state.lastSeenAt = Date.now();
|
|
161
|
+
turnBudgets.set(key, state);
|
|
162
|
+
pruneBudgetMap();
|
|
163
|
+
const remaining = Math.max(0, limitBytes - state.usedBytes);
|
|
164
|
+
if (remaining < MIN_BUDGET_SLICE_BYTES) {
|
|
165
|
+
return {
|
|
166
|
+
key,
|
|
167
|
+
limitBytes,
|
|
168
|
+
usedBeforeBytes: state.usedBytes,
|
|
169
|
+
selfCapBytes,
|
|
170
|
+
callCapBytes: 0,
|
|
171
|
+
limited: true,
|
|
172
|
+
exhausted: true,
|
|
173
|
+
committed: false,
|
|
174
|
+
settled: false,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
const callCapBytes = Math.min(selfCapBytes, remaining);
|
|
178
|
+
return {
|
|
179
|
+
key,
|
|
180
|
+
limitBytes,
|
|
181
|
+
usedBeforeBytes: state.usedBytes,
|
|
182
|
+
selfCapBytes,
|
|
183
|
+
callCapBytes,
|
|
184
|
+
limited: callCapBytes < selfCapBytes,
|
|
185
|
+
exhausted: false,
|
|
186
|
+
committed: false,
|
|
187
|
+
settled: false,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Charge this call's full cap to the shared pool up front so concurrent OBSERVE
|
|
193
|
+
* siblings that reserve during an async call's in-flight window see the running
|
|
194
|
+
* spend instead of an empty pool. finalizeObservation reconciles the charge down
|
|
195
|
+
* to the bytes actually returned; releaseObservation refunds it on an error
|
|
196
|
+
* path. Only tools that await between reserving and finalizing need this;
|
|
197
|
+
* synchronous tools settle within one microtask and charge at finalize.
|
|
198
|
+
*/
|
|
199
|
+
export function commitObservationReservation(reservation: ObservationReservation): void {
|
|
200
|
+
if (reservation.key === null || reservation.committed || reservation.settled) return;
|
|
201
|
+
if (reservation.callCapBytes <= 0) return;
|
|
202
|
+
reservation.committed = true;
|
|
203
|
+
const state = turnBudgets.get(reservation.key) ?? {
|
|
204
|
+
usedBytes: reservation.usedBeforeBytes,
|
|
205
|
+
lastSeenAt: Date.now(),
|
|
206
|
+
};
|
|
207
|
+
state.usedBytes += reservation.callCapBytes;
|
|
208
|
+
state.lastSeenAt = Date.now();
|
|
209
|
+
turnBudgets.set(reservation.key, state);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Refund a committed reservation whose call bailed out before finalizing (an
|
|
214
|
+
* error return between commit and finalize). A no-op once the call has settled
|
|
215
|
+
* through finalizeObservation/observationBudgetExhausted, so a tool can call it
|
|
216
|
+
* unconditionally from a finally block.
|
|
217
|
+
*/
|
|
218
|
+
export function releaseObservation(reservation: ObservationReservation): void {
|
|
219
|
+
if (reservation.key === null || reservation.settled) return;
|
|
220
|
+
reservation.settled = true;
|
|
221
|
+
if (!reservation.committed) return;
|
|
222
|
+
const state = turnBudgets.get(reservation.key);
|
|
223
|
+
if (state === undefined) return;
|
|
224
|
+
state.usedBytes = Math.max(0, state.usedBytes - reservation.callCapBytes);
|
|
225
|
+
state.lastSeenAt = Date.now();
|
|
226
|
+
turnBudgets.set(reservation.key, state);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
function recordSpentBytes(reservation: ObservationReservation, bytes: number): void {
|
|
230
|
+
if (reservation.key === null || reservation.settled) return;
|
|
231
|
+
reservation.settled = true;
|
|
232
|
+
// A committed call already charged its full cap to the pool at reserve time
|
|
233
|
+
// so concurrent siblings could see it; reconcile that down (or up) to the
|
|
234
|
+
// bytes actually returned. An uncommitted (synchronous) call charges its
|
|
235
|
+
// spend now, having touched the pool nowhere else.
|
|
236
|
+
const committedBytes = reservation.committed ? reservation.callCapBytes : 0;
|
|
237
|
+
const state = turnBudgets.get(reservation.key) ?? {
|
|
238
|
+
usedBytes: reservation.usedBeforeBytes + committedBytes,
|
|
239
|
+
lastSeenAt: Date.now(),
|
|
240
|
+
};
|
|
241
|
+
state.usedBytes = Math.max(0, state.usedBytes + bytes - committedBytes);
|
|
242
|
+
state.lastSeenAt = Date.now();
|
|
243
|
+
turnBudgets.set(reservation.key, state);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
function budgetDetails(reservation: ObservationReservation): ObservationBudgetDetails | null {
|
|
247
|
+
if (reservation.key === null) return null;
|
|
248
|
+
return {
|
|
249
|
+
limitBytes: reservation.limitBytes,
|
|
250
|
+
usedBeforeBytes: reservation.usedBeforeBytes,
|
|
251
|
+
exhausted: reservation.exhausted,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Structured result for a call that found the turn pool already spent.
|
|
257
|
+
* `subject` names what the call was about (a path, a pattern); `hint` names
|
|
258
|
+
* the narrowing arguments the tool supports.
|
|
259
|
+
*/
|
|
260
|
+
export function observationBudgetExhausted(input: {
|
|
261
|
+
tool: string;
|
|
262
|
+
unit: ObservationUnit;
|
|
263
|
+
reservation: ObservationReservation;
|
|
264
|
+
subject: string;
|
|
265
|
+
hint: string;
|
|
266
|
+
}): ToolResult {
|
|
267
|
+
const { tool, unit, reservation, subject, hint } = input;
|
|
268
|
+
const output = `[observation budget exhausted for this turn before ${tool} ${subject}: ${formatSize(
|
|
269
|
+
reservation.usedBeforeBytes,
|
|
270
|
+
)} already returned of ${formatSize(reservation.limitBytes)}. ${hint}]`;
|
|
271
|
+
const shownBytes = byteLength(output);
|
|
272
|
+
recordSpentBytes(reservation, shownBytes);
|
|
273
|
+
const budget = budgetDetails(reservation);
|
|
274
|
+
const observation: Observation = {
|
|
275
|
+
tool,
|
|
276
|
+
unit,
|
|
277
|
+
shownCount: 0,
|
|
278
|
+
totalCount: null,
|
|
279
|
+
shownBytes,
|
|
280
|
+
// The notice message is the whole rendering here (the search never ran), so
|
|
281
|
+
// the full size is the message itself; keep totalBytes >= shownBytes.
|
|
282
|
+
totalBytes: shownBytes,
|
|
283
|
+
truncated: true,
|
|
284
|
+
format: "text",
|
|
285
|
+
...(budget !== null ? { budget } : {}),
|
|
286
|
+
};
|
|
287
|
+
return { kind: "ok", output, details: { observation } };
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
export interface ObservationInput {
|
|
291
|
+
tool: string;
|
|
292
|
+
unit: ObservationUnit;
|
|
293
|
+
format?: ObservationFormat;
|
|
294
|
+
/** Shown body: item-limited and byte-capped by the tool, no notice yet. */
|
|
295
|
+
output: string;
|
|
296
|
+
/**
|
|
297
|
+
* Complete rendering, the offload source when truncated. Omit when the
|
|
298
|
+
* shown body already covers everything, or when the source is directly
|
|
299
|
+
* re-addressable (read continues via offset into the original file).
|
|
300
|
+
*/
|
|
301
|
+
fullOutput?: string;
|
|
302
|
+
shownCount: number;
|
|
303
|
+
totalCount: number | null;
|
|
304
|
+
/** Bytes of the complete rendering; defaults to fullOutput/output size. */
|
|
305
|
+
totalBytes?: number;
|
|
306
|
+
truncated: boolean;
|
|
307
|
+
next?: string;
|
|
308
|
+
/**
|
|
309
|
+
* Suppress the appended notice when the body already carries its own
|
|
310
|
+
* explanation (read's oversized-line edge). The observation details still
|
|
311
|
+
* record the truncation; "exactly one notice line" stays true.
|
|
312
|
+
*/
|
|
313
|
+
omitNotice?: boolean;
|
|
314
|
+
/** Extra details merged beside `observation` (the skill-activation contract). */
|
|
315
|
+
details?: Record<string, unknown>;
|
|
316
|
+
reservation: ObservationReservation;
|
|
317
|
+
options?: ToolInvokeOptions;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
function noticeLine(
|
|
321
|
+
input: ObservationInput,
|
|
322
|
+
bodyBytes: number,
|
|
323
|
+
totalBytes: number,
|
|
324
|
+
offloadPath: string | null,
|
|
325
|
+
next: string | undefined,
|
|
326
|
+
): string {
|
|
327
|
+
const totalSegment = input.totalCount === null ? `${input.shownCount}+` : String(input.totalCount);
|
|
328
|
+
const parts = [
|
|
329
|
+
`${input.tool}: ${input.shownCount}/${totalSegment} ${input.unit} shown (${formatSize(bodyBytes)} of ${formatSize(totalBytes)})`,
|
|
330
|
+
];
|
|
331
|
+
if (offloadPath !== null) parts.push(offloadPointer(offloadPath));
|
|
332
|
+
if (next !== undefined && next.length > 0) parts.push(`next: ${next}`);
|
|
333
|
+
return `[${parts.join(" | ")}]`;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
function limitedBudgetNote(reservation: ObservationReservation): string {
|
|
337
|
+
return `[Per-turn observation budget: ${formatSize(reservation.usedBeforeBytes)} already returned of ${formatSize(
|
|
338
|
+
reservation.limitBytes,
|
|
339
|
+
)} before this call. Use narrower arguments or continue in a follow-up turn for more content.]`;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Budget directive carried inside the JSON cap stub when the shared pool (not
|
|
344
|
+
* the tool's self cap) bounded this call. Retrying cannot succeed: every
|
|
345
|
+
* further call this turn gets an equal or smaller cap, so the only productive
|
|
346
|
+
* moves are answering from gathered content or continuing next turn. Without
|
|
347
|
+
* this the stub reads as a transient size error and invites a retry spiral.
|
|
348
|
+
*/
|
|
349
|
+
function jsonStubBudgetNote(reservation: ObservationReservation): string {
|
|
350
|
+
return (
|
|
351
|
+
`per-turn observation budget nearly exhausted: ${formatSize(reservation.usedBeforeBytes)} of ` +
|
|
352
|
+
`${formatSize(reservation.limitBytes)} already returned this turn. Do not retry this call; answer from ` +
|
|
353
|
+
"what you have gathered, or continue in a follow-up turn."
|
|
354
|
+
);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* Close out an observation: offload the full rendering when truncated, append
|
|
359
|
+
* exactly one notice line (text) or substitute the parseable stub (json), and
|
|
360
|
+
* charge the turn pool. Untruncated results get no notice.
|
|
361
|
+
*/
|
|
362
|
+
export function finalizeObservation(input: ObservationInput): ToolResult {
|
|
363
|
+
const format = input.format ?? "text";
|
|
364
|
+
let output = input.output;
|
|
365
|
+
let truncated = input.truncated;
|
|
366
|
+
let shownCount = input.shownCount;
|
|
367
|
+
let offloadPath: string | null = null;
|
|
368
|
+
const bodyBytes = byteLength(output);
|
|
369
|
+
const totalBytes = input.totalBytes ?? byteLength(input.fullOutput ?? input.output);
|
|
370
|
+
const next = boundContinuation(input.next);
|
|
371
|
+
|
|
372
|
+
if (format === "json" && bodyBytes > input.reservation.callCapBytes) {
|
|
373
|
+
// A JSON payload must parse or be replaced whole; never cut mid-document.
|
|
374
|
+
// The stub shows nothing of the payload, so the envelope must say so
|
|
375
|
+
// (shownCount 0), and when the shared pool bounded the call, the stub
|
|
376
|
+
// carries the budget directive instead of a continuation that can never
|
|
377
|
+
// fit this turn.
|
|
378
|
+
truncated = true;
|
|
379
|
+
shownCount = 0;
|
|
380
|
+
offloadPath = writeToolOffload(input.fullOutput ?? output, input.options);
|
|
381
|
+
const poolBound = input.reservation.limited;
|
|
382
|
+
output = JSON.stringify({
|
|
383
|
+
error: `result exceeded ${formatSize(input.reservation.callCapBytes)}`,
|
|
384
|
+
...(poolBound ? { budget: jsonStubBudgetNote(input.reservation) } : {}),
|
|
385
|
+
...(offloadPath !== null ? { offloadPath } : {}),
|
|
386
|
+
...(!poolBound && next !== undefined && next.length > 0 ? { next } : {}),
|
|
387
|
+
});
|
|
388
|
+
} else if (truncated && input.fullOutput !== undefined) {
|
|
389
|
+
offloadPath = writeToolOffload(input.fullOutput, input.options);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
if (format === "text") {
|
|
393
|
+
if (truncated && input.omitNotice !== true)
|
|
394
|
+
output += `\n\n${noticeLine(input, bodyBytes, totalBytes, offloadPath, next)}`;
|
|
395
|
+
if (input.reservation.limited && !input.reservation.exhausted) {
|
|
396
|
+
output += `\n\n${limitedBudgetNote(input.reservation)}`;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
const shownBytes = byteLength(output);
|
|
401
|
+
recordSpentBytes(input.reservation, shownBytes);
|
|
402
|
+
const budget = budgetDetails(input.reservation);
|
|
403
|
+
const observation: Observation = {
|
|
404
|
+
tool: input.tool,
|
|
405
|
+
unit: input.unit,
|
|
406
|
+
shownCount,
|
|
407
|
+
totalCount: input.totalCount,
|
|
408
|
+
shownBytes,
|
|
409
|
+
// shownBytes counts the appended notice/limited-budget lines; totalBytes
|
|
410
|
+
// measured only the pre-notice rendering (and equals it when a count-limited
|
|
411
|
+
// tool like ls offloads nothing). Floor the full-rendering size at the bytes
|
|
412
|
+
// actually returned so the envelope invariant totalBytes >= shownBytes holds.
|
|
413
|
+
totalBytes: Math.max(totalBytes, shownBytes),
|
|
414
|
+
truncated,
|
|
415
|
+
format,
|
|
416
|
+
...(next !== undefined && next.length > 0 ? { next } : {}),
|
|
417
|
+
...(offloadPath !== null ? { offloadPath } : {}),
|
|
418
|
+
...(budget !== null ? { budget } : {}),
|
|
419
|
+
};
|
|
420
|
+
return { kind: "ok", output, details: { ...(input.details ?? {}), observation } };
|
|
421
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Observer registrations for the after_tool hook.
|
|
3
|
+
*
|
|
4
|
+
* Replace the registry's former side-channel callbacks (`onSkillActivation`,
|
|
5
|
+
* `onFileMutation` in RegistryDeps): the composition root creates these with
|
|
6
|
+
* the sinks it owns (session ledger, codewiki) and registers them on the
|
|
7
|
+
* middleware contract. Observers emit no effects; their sinks are best-effort
|
|
8
|
+
* and a sink failure never changes tool execution.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { type SkillActivation, skillActivationFromToolDetails } from "../core/skill-activation.js";
|
|
12
|
+
import { ToolNames } from "../core/tool-names.js";
|
|
13
|
+
import type { MiddlewareEffect, MiddlewareHookRegistration } from "../domains/middleware/index.js";
|
|
14
|
+
import { toolMutationPaths } from "../domains/safety/protected-artifacts.js";
|
|
15
|
+
|
|
16
|
+
export const SKILL_ACTIVATION_OBSERVER_ID = "observer.skill-activation";
|
|
17
|
+
export const FILE_MUTATION_OBSERVER_ID = "observer.file-mutation";
|
|
18
|
+
|
|
19
|
+
const NO_EFFECTS: ReadonlyArray<MiddlewareEffect> = [];
|
|
20
|
+
|
|
21
|
+
/** Records successful context(scope=skills) activations into the caller's ledger. */
|
|
22
|
+
export function createSkillActivationObserver(sink: (activation: SkillActivation) => void): MiddlewareHookRegistration {
|
|
23
|
+
return {
|
|
24
|
+
id: SKILL_ACTIVATION_OBSERVER_ID,
|
|
25
|
+
description: "records successful skill activations for the session ledger",
|
|
26
|
+
hooks: ["after_tool"],
|
|
27
|
+
toolNames: [ToolNames.Context],
|
|
28
|
+
evaluate(input) {
|
|
29
|
+
if (input.metadata?.resultKind !== "ok") return NO_EFFECTS;
|
|
30
|
+
const activation = skillActivationFromToolDetails(input.toolResultDetails, input.turnId);
|
|
31
|
+
if (!activation) return NO_EFFECTS;
|
|
32
|
+
try {
|
|
33
|
+
sink(activation);
|
|
34
|
+
} catch {
|
|
35
|
+
// Activation writes are audit metadata; the tool already succeeded.
|
|
36
|
+
}
|
|
37
|
+
return NO_EFFECTS;
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface FileMutationEvent {
|
|
43
|
+
paths: ReadonlyArray<string>;
|
|
44
|
+
toolName: string;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Defers file-mutation sinks off the after_tool hot path and coalesces rapid
|
|
49
|
+
* events into one best-effort batch. Lifecycle-owned sinks that must drain at
|
|
50
|
+
* shutdown should admit work synchronously instead of using this convenience.
|
|
51
|
+
*/
|
|
52
|
+
export function coalescePathSink(sink: (paths: string[]) => void): (event: FileMutationEvent) => void {
|
|
53
|
+
const pending = new Set<string>();
|
|
54
|
+
let flushScheduled = false;
|
|
55
|
+
|
|
56
|
+
const scheduleFlush = (): void => {
|
|
57
|
+
if (flushScheduled) return;
|
|
58
|
+
flushScheduled = true;
|
|
59
|
+
setImmediate(() => {
|
|
60
|
+
flushScheduled = false;
|
|
61
|
+
if (pending.size === 0) return;
|
|
62
|
+
const paths = [...pending];
|
|
63
|
+
pending.clear();
|
|
64
|
+
try {
|
|
65
|
+
sink(paths);
|
|
66
|
+
} catch {
|
|
67
|
+
// Incremental indexing is best-effort and must not change tool execution.
|
|
68
|
+
}
|
|
69
|
+
if (pending.size > 0) scheduleFlush();
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
return (event) => {
|
|
74
|
+
if (event.paths.length === 0) return;
|
|
75
|
+
for (const path of event.paths) pending.add(path);
|
|
76
|
+
scheduleFlush();
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Notifies the caller after a successful file-mutating tool, for incremental indexing. */
|
|
81
|
+
export function createFileMutationObserver(sink: (event: FileMutationEvent) => void): MiddlewareHookRegistration {
|
|
82
|
+
return {
|
|
83
|
+
id: FILE_MUTATION_OBSERVER_ID,
|
|
84
|
+
description: "reports successful file mutations for incremental codewiki refresh",
|
|
85
|
+
hooks: ["after_tool"],
|
|
86
|
+
evaluate(input) {
|
|
87
|
+
if (input.metadata?.resultKind !== "ok") return NO_EFFECTS;
|
|
88
|
+
const toolName = input.toolName ?? "";
|
|
89
|
+
const paths = toolMutationPaths(toolName, input.toolArgs !== undefined ? { ...input.toolArgs } : undefined);
|
|
90
|
+
if (paths.length === 0) return NO_EFFECTS;
|
|
91
|
+
try {
|
|
92
|
+
sink({ paths, toolName });
|
|
93
|
+
} catch {
|
|
94
|
+
// Incremental indexing is best-effort and must not change tool execution.
|
|
95
|
+
}
|
|
96
|
+
return NO_EFFECTS;
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { accessSync, constants } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { isAbsolute, resolve as resolvePath, sep } from "node:path";
|
|
4
|
+
import { canonicalizeExistingPath } from "../core/path-canonical.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Render a path with forward slashes for a tool's observation.
|
|
8
|
+
*
|
|
9
|
+
* Tool output is read by the model and matched against patterns the model
|
|
10
|
+
* writes, so it must not change shape with the host's separator. This is
|
|
11
|
+
* presentation only: it never touches a path used to reach the filesystem.
|
|
12
|
+
*/
|
|
13
|
+
export function toPosixPath(value: string): string {
|
|
14
|
+
return value.split(sep).join("/");
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const UNICODE_SPACES = /[\u00A0\u2000-\u200A\u202F\u205F\u3000]/g;
|
|
18
|
+
const NARROW_NO_BREAK_SPACE = "\u202F";
|
|
19
|
+
|
|
20
|
+
function normalizeUnicodeSpaces(value: string): string {
|
|
21
|
+
return value.replace(UNICODE_SPACES, " ");
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function fileExists(filePath: string): boolean {
|
|
25
|
+
try {
|
|
26
|
+
accessSync(filePath, constants.F_OK);
|
|
27
|
+
return true;
|
|
28
|
+
} catch {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function normalizeAtPrefix(filePath: string): string {
|
|
34
|
+
return filePath.startsWith("@") ? filePath.slice(1) : filePath;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function tryMacOSScreenshotPath(filePath: string): string {
|
|
38
|
+
return filePath.replace(/ (AM|PM)\./gi, `${NARROW_NO_BREAK_SPACE}$1.`);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function tryNfdVariant(filePath: string): string {
|
|
42
|
+
return filePath.normalize("NFD");
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function tryCurlyQuoteVariant(filePath: string): string {
|
|
46
|
+
return filePath.replace(/'/g, "\u2019");
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function expandPath(filePath: string): string {
|
|
50
|
+
const normalized = normalizeUnicodeSpaces(normalizeAtPrefix(filePath));
|
|
51
|
+
if (normalized === "~") return homedir();
|
|
52
|
+
if (normalized.startsWith("~/")) return homedir() + normalized.slice(1);
|
|
53
|
+
return normalized;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function resolveToCwd(filePath: string, cwd: string = process.cwd()): string {
|
|
57
|
+
const expanded = expandPath(filePath);
|
|
58
|
+
const resolved = isAbsolute(expanded) ? resolvePath(expanded) : resolvePath(cwd, expanded);
|
|
59
|
+
return canonicalizeExistingPath(resolved);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function resolveReadPath(filePath: string, cwd: string = process.cwd()): string {
|
|
63
|
+
const resolved = resolveToCwd(filePath, cwd);
|
|
64
|
+
if (fileExists(resolved)) return resolved;
|
|
65
|
+
|
|
66
|
+
const amPmVariant = tryMacOSScreenshotPath(resolved);
|
|
67
|
+
if (amPmVariant !== resolved && fileExists(amPmVariant)) return amPmVariant;
|
|
68
|
+
|
|
69
|
+
const nfdVariant = tryNfdVariant(resolved);
|
|
70
|
+
if (nfdVariant !== resolved && fileExists(nfdVariant)) return nfdVariant;
|
|
71
|
+
|
|
72
|
+
const curlyVariant = tryCurlyQuoteVariant(resolved);
|
|
73
|
+
if (curlyVariant !== resolved && fileExists(curlyVariant)) return curlyVariant;
|
|
74
|
+
|
|
75
|
+
const nfdCurlyVariant = tryCurlyQuoteVariant(nfdVariant);
|
|
76
|
+
if (nfdCurlyVariant !== resolved && fileExists(nfdCurlyVariant)) return nfdCurlyVariant;
|
|
77
|
+
|
|
78
|
+
return resolved;
|
|
79
|
+
}
|