@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,52 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
|
|
3
|
+
import { readSettings, settingsPath, updateSettings } from "../../../core/config.js";
|
|
4
|
+
import { authStoragePath } from "../../providers/auth/backend-file.js";
|
|
5
|
+
import { openAuthStorage } from "../../providers/auth/index.js";
|
|
6
|
+
import type { Migration } from "./index.js";
|
|
7
|
+
|
|
8
|
+
function normalizeLmStudioUrl(url: string | undefined): string | undefined {
|
|
9
|
+
if (!url) return url;
|
|
10
|
+
if (url.startsWith("ws://")) return `http://${url.slice("ws://".length)}`;
|
|
11
|
+
if (url.startsWith("wss://")) return `https://${url.slice("wss://".length)}`;
|
|
12
|
+
return url;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const migration: Migration = {
|
|
16
|
+
id: "2026-08-18-lmstudio-runtime-id",
|
|
17
|
+
async up(): Promise<void> {
|
|
18
|
+
let keepLegacyCredential = false;
|
|
19
|
+
if (existsSync(settingsPath())) {
|
|
20
|
+
const current = readSettings();
|
|
21
|
+
keepLegacyCredential = current.targets.some((target) => target.auth?.apiKeyRef === "lmstudio-native");
|
|
22
|
+
const needsSettingsRewrite = current.targets.some(
|
|
23
|
+
(target) =>
|
|
24
|
+
target.runtime === "lmstudio-native" ||
|
|
25
|
+
((target.runtime === "lmstudio" || target.runtime === "lmstudio-native") &&
|
|
26
|
+
normalizeLmStudioUrl(target.url) !== target.url),
|
|
27
|
+
);
|
|
28
|
+
if (needsSettingsRewrite) {
|
|
29
|
+
updateSettings((settings) => {
|
|
30
|
+
for (const target of settings.targets) {
|
|
31
|
+
if (target.runtime !== "lmstudio-native" && target.runtime !== "lmstudio") continue;
|
|
32
|
+
target.runtime = "lmstudio";
|
|
33
|
+
const url = normalizeLmStudioUrl(target.url);
|
|
34
|
+
if (url !== undefined) target.url = url;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (!existsSync(authStoragePath())) return;
|
|
40
|
+
// Only reach for the rename when a legacy credential is actually stored.
|
|
41
|
+
// Most homes this migration runs on never held one, and asking the store
|
|
42
|
+
// to rename nothing is work that can only fail: it takes the credentials
|
|
43
|
+
// lock and, before this guard existed, refused outright on a file the
|
|
44
|
+
// parser could not fully read, which failed every later `clio-coder
|
|
45
|
+
// upgrade` on that machine.
|
|
46
|
+
const storage = openAuthStorage();
|
|
47
|
+
if (!storage.hasStored("lmstudio-native")) return;
|
|
48
|
+
storage.renameProvider("lmstudio-native", "lmstudio", { keepSource: keepLegacyCredential });
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export default migration;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clio Coder state migration runner.
|
|
3
|
+
*
|
|
4
|
+
* A migration is a versioned state-shape change keyed by a stable id of the
|
|
5
|
+
* form `YYYY-MM-DD-<slug>`. The registry is a static, ordered list compiled
|
|
6
|
+
* into the bundle so the runtime never scans the filesystem for migration
|
|
7
|
+
* files. To add a migration, author `YYYY-MM-DD-<slug>.ts` with a default
|
|
8
|
+
* export matching the `Migration` contract and register it below.
|
|
9
|
+
*
|
|
10
|
+
* Applied migration ids are persisted to `<stateDir>/migrations.json`. A
|
|
11
|
+
* migration whose id already appears in that manifest is skipped. `up()` is
|
|
12
|
+
* invoked at most once per Clio Coder state tree for a given id.
|
|
13
|
+
*
|
|
14
|
+
* The registry ships empty pre-launch. Requirements for future migrations:
|
|
15
|
+
*
|
|
16
|
+
* 1. A migration that writes settings.yaml must hold the settings
|
|
17
|
+
* single-writer lock (`withSettingsLock` in core/config.ts) around its
|
|
18
|
+
* read-rewrite-write so it can never race `updateSettings`, and should
|
|
19
|
+
* land the write through the atomic rename writer
|
|
20
|
+
* (core/safe-resource-write.ts) so readers never see a partial file.
|
|
21
|
+
* 2. Migrations are authored against the shapes the code has on the day they
|
|
22
|
+
* are needed, never against stale pre-release shapes.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
26
|
+
import { join } from "node:path";
|
|
27
|
+
|
|
28
|
+
import lmStudioRuntimeId from "./2026-08-18-lmstudio-runtime-id.js";
|
|
29
|
+
|
|
30
|
+
export interface Migration {
|
|
31
|
+
id: string;
|
|
32
|
+
up(stateDir: string): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface MigrationManifest {
|
|
36
|
+
applied: string[];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface MigrationRunResult {
|
|
40
|
+
/** ids newly applied on this invocation (in order). */
|
|
41
|
+
applied: string[];
|
|
42
|
+
/** every id recorded in the manifest after this invocation. */
|
|
43
|
+
allApplied: string[];
|
|
44
|
+
/** full migration inventory ordered by id. */
|
|
45
|
+
available: string[];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const REGISTRY: ReadonlyArray<Migration> = Object.freeze([lmStudioRuntimeId]);
|
|
49
|
+
|
|
50
|
+
export function listMigrations(): ReadonlyArray<Migration> {
|
|
51
|
+
return REGISTRY;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function manifestPath(stateDir: string): string {
|
|
55
|
+
return join(stateDir, "migrations.json");
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function readManifest(path: string): MigrationManifest {
|
|
59
|
+
if (!existsSync(path)) return { applied: [] };
|
|
60
|
+
try {
|
|
61
|
+
const raw = readFileSync(path, "utf8");
|
|
62
|
+
const parsed = JSON.parse(raw) as unknown;
|
|
63
|
+
if (parsed && typeof parsed === "object" && Array.isArray((parsed as { applied?: unknown }).applied)) {
|
|
64
|
+
const ids = (parsed as { applied: unknown[] }).applied.filter((v): v is string => typeof v === "string");
|
|
65
|
+
return { applied: ids };
|
|
66
|
+
}
|
|
67
|
+
} catch {
|
|
68
|
+
// fall through; treat unreadable manifest as empty
|
|
69
|
+
}
|
|
70
|
+
return { applied: [] };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function writeManifest(path: string, manifest: MigrationManifest): void {
|
|
74
|
+
writeFileSync(path, `${JSON.stringify(manifest, null, 2)}\n`, { encoding: "utf8", mode: 0o644 });
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Apply every registered migration this state tree has not recorded yet.
|
|
79
|
+
*
|
|
80
|
+
* `migrations` defaults to the compiled registry and exists so the ordering
|
|
81
|
+
* guarantee below can be exercised against a failing migration; production
|
|
82
|
+
* callers pass one argument.
|
|
83
|
+
*/
|
|
84
|
+
export async function runPending(
|
|
85
|
+
stateDir: string,
|
|
86
|
+
migrations: ReadonlyArray<Migration> = REGISTRY,
|
|
87
|
+
): Promise<MigrationRunResult> {
|
|
88
|
+
mkdirSync(stateDir, { recursive: true });
|
|
89
|
+
const path = manifestPath(stateDir);
|
|
90
|
+
const manifest = readManifest(path);
|
|
91
|
+
const applied = new Set(manifest.applied);
|
|
92
|
+
const newlyApplied: string[] = [];
|
|
93
|
+
// The manifest is written after each `up()` rather than once at the end. A
|
|
94
|
+
// throw from a later migration used to discard the record of the earlier ones
|
|
95
|
+
// that had already succeeded, so they re-ran on the next upgrade against a
|
|
96
|
+
// tree they had already changed. That breaks the at-most-once guarantee this
|
|
97
|
+
// module's contract states.
|
|
98
|
+
for (const m of migrations) {
|
|
99
|
+
if (applied.has(m.id)) continue;
|
|
100
|
+
await m.up(stateDir);
|
|
101
|
+
applied.add(m.id);
|
|
102
|
+
newlyApplied.push(m.id);
|
|
103
|
+
writeManifest(path, { applied: [...applied] });
|
|
104
|
+
}
|
|
105
|
+
const allApplied = [...applied];
|
|
106
|
+
// Nothing pending still rewrites the manifest, so a home whose file was
|
|
107
|
+
// missing or unparseable gains a well-formed one.
|
|
108
|
+
writeManifest(path, { applied: allApplied });
|
|
109
|
+
return {
|
|
110
|
+
applied: newlyApplied,
|
|
111
|
+
allApplied,
|
|
112
|
+
available: migrations.map((m) => m.id),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { initializeClioHome } from "../../core/init.js";
|
|
4
|
+
import { clioStatePath } from "../../core/xdg.js";
|
|
5
|
+
|
|
6
|
+
export interface StateInfo {
|
|
7
|
+
version: string;
|
|
8
|
+
/** Absent when this record was rebuilt over a state root whose install time was gone. */
|
|
9
|
+
installedAt?: string;
|
|
10
|
+
upgradedAt?: string;
|
|
11
|
+
/** When the record itself was rebuilt. Never the same claim as an install. */
|
|
12
|
+
repairedAt?: string;
|
|
13
|
+
/** The version on record before the most recent version change. */
|
|
14
|
+
upgradedFrom?: string;
|
|
15
|
+
/** The version whose upgrade notice has already been shown once. */
|
|
16
|
+
noticedVersion?: string;
|
|
17
|
+
platform: string;
|
|
18
|
+
nodeVersion: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface UpgradeTransition {
|
|
22
|
+
from: string;
|
|
23
|
+
to: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface StateInfoRead {
|
|
27
|
+
info: StateInfo | null;
|
|
28
|
+
/**
|
|
29
|
+
* Why the metadata could not be read, or null when it is absent or fine.
|
|
30
|
+
* Absent and unreadable are different problems with different remedies, and
|
|
31
|
+
* collapsing both to null had `clio-coder doctor` report "state metadata missing"
|
|
32
|
+
* for an install.json that was present and merely mode 000, then send the
|
|
33
|
+
* user to a `--fix` that dies on EACCES.
|
|
34
|
+
*/
|
|
35
|
+
problem: string | null;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function readStateInfoResult(): StateInfoRead {
|
|
39
|
+
const path = join(clioStatePath(), "install.json");
|
|
40
|
+
try {
|
|
41
|
+
return { info: JSON.parse(readFileSync(path, "utf8")) as StateInfo, problem: null };
|
|
42
|
+
} catch (error) {
|
|
43
|
+
// `existsSync` cannot carry this distinction: it answers false for a
|
|
44
|
+
// genuinely absent file and for one sitting behind a directory the process
|
|
45
|
+
// may not traverse. Only ENOENT means the metadata was never written.
|
|
46
|
+
const code = typeof error === "object" && error !== null && "code" in error ? String(error.code) : "";
|
|
47
|
+
if (code === "ENOENT") return { info: null, problem: null };
|
|
48
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
49
|
+
return { info: null, problem: `${path} could not be read: ${message}` };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function readStateInfo(): StateInfo | null {
|
|
54
|
+
return readStateInfoResult().info;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function ensureClioState(): StateInfo {
|
|
58
|
+
initializeClioHome();
|
|
59
|
+
const info = readStateInfo();
|
|
60
|
+
if (!info) throw new Error("state metadata was not written by initializeClioHome()");
|
|
61
|
+
return info;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The version transition the operator has not been told about yet, or null.
|
|
66
|
+
* `initializeClioHome` refreshes `install.json` silently on every boot, so by
|
|
67
|
+
* the time anything can speak the record already says the current version;
|
|
68
|
+
* `upgradedFrom` is what remembers where it came from. Claiming the notice
|
|
69
|
+
* stamps `noticedVersion`, so it is shown once per version and never again.
|
|
70
|
+
* A record without an `upgradedFrom`, or one already noticed, yields null and
|
|
71
|
+
* writes nothing.
|
|
72
|
+
*/
|
|
73
|
+
export function takeUpgradeNotice(): UpgradeTransition | null {
|
|
74
|
+
const path = join(clioStatePath(), "install.json");
|
|
75
|
+
let raw: Record<string, unknown>;
|
|
76
|
+
try {
|
|
77
|
+
const parsed: unknown = JSON.parse(readFileSync(path, "utf8"));
|
|
78
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) return null;
|
|
79
|
+
raw = parsed as Record<string, unknown>;
|
|
80
|
+
} catch {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
const { version, upgradedFrom, noticedVersion } = raw;
|
|
84
|
+
if (typeof version !== "string" || typeof upgradedFrom !== "string") return null;
|
|
85
|
+
if (upgradedFrom === version || noticedVersion === version) return null;
|
|
86
|
+
try {
|
|
87
|
+
writeFileSync(path, `${JSON.stringify({ ...raw, noticedVersion: version }, null, 2)}\n`, "utf8");
|
|
88
|
+
} catch {
|
|
89
|
+
// A record that cannot be rewritten still gets its notice; it will repeat
|
|
90
|
+
// on the next boot, which is the lesser wrong against staying silent.
|
|
91
|
+
}
|
|
92
|
+
return { from: upgradedFrom, to: version };
|
|
93
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one line the first interactive launch after an upgrade says.
|
|
3
|
+
*
|
|
4
|
+
* `install.json` is refreshed silently on every boot, so without this the
|
|
5
|
+
* operator who installed 0.3.0 and ran `npm install -g` again would never be
|
|
6
|
+
* told the version moved or that anything at the keyboard changed. This is one
|
|
7
|
+
* sentence per release, for changes an interactive operator meets by typing
|
|
8
|
+
* (a command that now opens elsewhere, a skill that no longer answers), and a
|
|
9
|
+
* pointer to the shipped CHANGELOG for the rest. It is not a release-notes
|
|
10
|
+
* system: a release without a keyboard-facing change gets no entry and the
|
|
11
|
+
* generic line.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import type { UpgradeTransition } from "./state.js";
|
|
15
|
+
|
|
16
|
+
const KEYBOARD_FACING_CHANGES: Readonly<Record<string, string>> = Object.freeze({
|
|
17
|
+
"0.3.1":
|
|
18
|
+
"/targets, /fleet, and /scoped-models now open inside /settings; " +
|
|
19
|
+
"the commit-crafting, create-pr, investigate-issue, and review-changes skills are retired in favour of file-ticket, fix-issue, and ship; " +
|
|
20
|
+
"artifact defaults write under .clio-coder/artifacts/.",
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Word choice is load-bearing: the footer classifies a plain string by its
|
|
25
|
+
* text, and "changed" is what makes this a sticky, dismissable notice rather
|
|
26
|
+
* than one that fades in twelve seconds while the operator is still reading.
|
|
27
|
+
*/
|
|
28
|
+
export function describeUpgradeNotice(transition: UpgradeTransition): string {
|
|
29
|
+
const changes = KEYBOARD_FACING_CHANGES[transition.to];
|
|
30
|
+
const head = `clio: upgraded ${transition.from} → ${transition.to}.`;
|
|
31
|
+
const tail = `Full notes: CHANGELOG.md, section ${transition.to}.`;
|
|
32
|
+
return changes === undefined
|
|
33
|
+
? `${head} What changed is in CHANGELOG.md, section ${transition.to}.`
|
|
34
|
+
: `${head} What changed at the keyboard: ${changes} ${tail}`;
|
|
35
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { resolvePackageRoot } from "../../core/package-root.js";
|
|
4
|
+
import { PI_MONO_PACKAGES } from "../../engine/pi-mono-names.js";
|
|
5
|
+
|
|
6
|
+
interface PackageJsonShape {
|
|
7
|
+
version?: string;
|
|
8
|
+
dependencies?: Record<string, string>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
let cached: VersionInfo | null = null;
|
|
12
|
+
|
|
13
|
+
export interface VersionInfo {
|
|
14
|
+
clio: string;
|
|
15
|
+
node: string;
|
|
16
|
+
platform: string;
|
|
17
|
+
piAgentCore: string | null;
|
|
18
|
+
piAi: string | null;
|
|
19
|
+
piTui: string | null;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function getVersionInfo(): VersionInfo {
|
|
23
|
+
if (cached) return cached;
|
|
24
|
+
const root = resolvePackageRoot();
|
|
25
|
+
const pkg = JSON.parse(readFileSync(join(root, "package.json"), "utf8")) as PackageJsonShape;
|
|
26
|
+
cached = {
|
|
27
|
+
clio: pkg.version ?? "0.0.0",
|
|
28
|
+
node: process.version,
|
|
29
|
+
platform: `${process.platform}-${process.arch}`,
|
|
30
|
+
piAgentCore: pkg.dependencies?.[PI_MONO_PACKAGES.agentCore] ?? null,
|
|
31
|
+
piAi: pkg.dependencies?.[PI_MONO_PACKAGES.ai] ?? null,
|
|
32
|
+
piTui: pkg.dependencies?.[PI_MONO_PACKAGES.tui] ?? null,
|
|
33
|
+
};
|
|
34
|
+
return cached;
|
|
35
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
export {
|
|
2
|
+
approveMemoryRecord,
|
|
3
|
+
canonicalMemoryRepositoryIdentity,
|
|
4
|
+
estimateMemoryTokens,
|
|
5
|
+
pruneStaleMemory,
|
|
6
|
+
rejectMemoryRecord,
|
|
7
|
+
selectApprovedMemory,
|
|
8
|
+
} from "./operations.js";
|
|
9
|
+
export {
|
|
10
|
+
buildMemoryPromptSection,
|
|
11
|
+
MEMORY_PROMPT_DEFAULT_MAX_ITEMS,
|
|
12
|
+
MEMORY_PROMPT_DEFAULT_SCOPES,
|
|
13
|
+
MEMORY_PROMPT_DEFAULT_TOKEN_BUDGET,
|
|
14
|
+
type MemoryPromptOptions,
|
|
15
|
+
renderMemoryPromptSection,
|
|
16
|
+
selectMemoryForPrompt,
|
|
17
|
+
} from "./prompt-section.js";
|
|
18
|
+
export {
|
|
19
|
+
memoryIdFromEvidence,
|
|
20
|
+
memoryRecordFromEvidence,
|
|
21
|
+
proposeMemoryFromEvidence,
|
|
22
|
+
} from "./proposal.js";
|
|
23
|
+
export {
|
|
24
|
+
loadMemoryRecords,
|
|
25
|
+
loadMemoryRecordsSync,
|
|
26
|
+
MEMORY_STALE_APPROVED_DAYS,
|
|
27
|
+
MEMORY_STALE_UNAPPROVED_DAYS,
|
|
28
|
+
MEMORY_STORE_MAX_RECORDS,
|
|
29
|
+
memoryRoot,
|
|
30
|
+
memoryStatus,
|
|
31
|
+
memoryStorePath,
|
|
32
|
+
sortMemoryRecords,
|
|
33
|
+
writeMemoryRecords,
|
|
34
|
+
} from "./store.js";
|
|
35
|
+
export {
|
|
36
|
+
type SaveTaskMemoryOptions,
|
|
37
|
+
TASK_MEMORY_CONTENT_MAX_CHARS,
|
|
38
|
+
TASK_MEMORY_DEFAULT_KNOWLEDGE_CAP,
|
|
39
|
+
TASK_MEMORY_DEFAULT_PROCEDURAL_CAP,
|
|
40
|
+
TASK_MEMORY_VERSION,
|
|
41
|
+
TaskMemoryBank,
|
|
42
|
+
type TaskMemoryBankOptions,
|
|
43
|
+
type TaskMemoryClass,
|
|
44
|
+
type TaskMemoryEntry,
|
|
45
|
+
type TaskMemoryRenderableClass,
|
|
46
|
+
type TaskMemorySnapshot,
|
|
47
|
+
} from "./task-bank.js";
|
|
48
|
+
export {
|
|
49
|
+
parseTaskMemoryHandoffSnapshot,
|
|
50
|
+
readNewestTaskMemoryHandoff,
|
|
51
|
+
renderTaskMemoryHandoffSnapshot,
|
|
52
|
+
renderTaskMemoryHandoffSource,
|
|
53
|
+
seedTaskMemoryBank,
|
|
54
|
+
seedTaskMemoryFromNewestHandoff,
|
|
55
|
+
TASK_MEMORY_HANDOFF_LANGUAGE,
|
|
56
|
+
TASK_MEMORY_HANDOFF_VERSION,
|
|
57
|
+
type TaskMemoryHandoffArtifact,
|
|
58
|
+
type TaskMemoryHandoffEntry,
|
|
59
|
+
type TaskMemoryHandoffOffer,
|
|
60
|
+
type TaskMemoryHandoffSeedOutcome,
|
|
61
|
+
type TaskMemoryHandoffSeedResult,
|
|
62
|
+
type TaskMemoryHandoffSnapshot,
|
|
63
|
+
taskMemoryHandoffSeedOffer,
|
|
64
|
+
taskMemoryHandoffSnapshot,
|
|
65
|
+
} from "./task-memory-handoff.js";
|
|
66
|
+
export {
|
|
67
|
+
parseTaskMemoryPolicyResponse,
|
|
68
|
+
runTaskMemoryPolicy,
|
|
69
|
+
TASK_MEMORY_POLICY_DEFAULT_TIMEOUT_MS,
|
|
70
|
+
TASK_MEMORY_POLICY_MAX_OPERATIONS,
|
|
71
|
+
TASK_MEMORY_POLICY_MODEL_MAX_OUTPUT_TOKENS,
|
|
72
|
+
type TaskMemoryEnvelope,
|
|
73
|
+
type TaskMemoryModelClient,
|
|
74
|
+
type TaskMemoryModelRequest,
|
|
75
|
+
type TaskMemoryModelResponse,
|
|
76
|
+
type TaskMemoryPolicyDecision,
|
|
77
|
+
type TaskMemoryPolicyInput,
|
|
78
|
+
type TaskMemoryPolicyReason,
|
|
79
|
+
type TaskMemoryPolicyResult,
|
|
80
|
+
type TaskMemoryTrajectoryStep,
|
|
81
|
+
} from "./task-memory-policy.js";
|
|
82
|
+
export {
|
|
83
|
+
describeTaskMemoryActivity,
|
|
84
|
+
type TaskMemoryActivityEvent,
|
|
85
|
+
type TaskMemoryOperatorStatus,
|
|
86
|
+
type TaskMemoryTier,
|
|
87
|
+
taskMemoryBankSize,
|
|
88
|
+
} from "./task-memory-status.js";
|
|
89
|
+
export {
|
|
90
|
+
type CreateTaskMemoryTelemetrySinkOptions,
|
|
91
|
+
createTaskMemoryTelemetrySink,
|
|
92
|
+
parseTaskMemoryTelemetryRecord,
|
|
93
|
+
TASK_MEMORY_TELEMETRY_FILE,
|
|
94
|
+
TASK_MEMORY_TELEMETRY_MAX_BYTES,
|
|
95
|
+
TASK_MEMORY_TELEMETRY_VERSION,
|
|
96
|
+
type TaskMemoryBankDelta,
|
|
97
|
+
type TaskMemoryClassDelta,
|
|
98
|
+
type TaskMemoryTelemetryDecision,
|
|
99
|
+
type TaskMemoryTelemetryRecord,
|
|
100
|
+
type TaskMemoryTelemetrySink,
|
|
101
|
+
type TaskMemoryTelemetryStep,
|
|
102
|
+
type TaskMemoryTelemetryTier,
|
|
103
|
+
type TaskMemoryTelemetryTrigger,
|
|
104
|
+
type TaskMemoryTokenCost,
|
|
105
|
+
taskMemoryBankDelta,
|
|
106
|
+
taskMemoryTelemetryRecord,
|
|
107
|
+
} from "./task-memory-telemetry.js";
|
|
108
|
+
export {
|
|
109
|
+
createTaskMemoryTrace,
|
|
110
|
+
type TaskMemoryTrace,
|
|
111
|
+
type TaskMemoryTraceRow,
|
|
112
|
+
taskMemoryTracePath,
|
|
113
|
+
} from "./task-memory-trace.js";
|
|
114
|
+
export type {
|
|
115
|
+
MemoryProposalResult,
|
|
116
|
+
MemoryPruneResult,
|
|
117
|
+
MemoryRecord,
|
|
118
|
+
MemoryRecordValidationResult,
|
|
119
|
+
MemoryRepositoryIdentity,
|
|
120
|
+
MemoryRetrievalOptions,
|
|
121
|
+
MemoryScope,
|
|
122
|
+
MemoryStatus,
|
|
123
|
+
MemoryStoreFile,
|
|
124
|
+
MemoryStoreValidationResult,
|
|
125
|
+
MemoryValidationIssue,
|
|
126
|
+
} from "./types.js";
|
|
127
|
+
export { MEMORY_SCOPES, MEMORY_VERSION } from "./types.js";
|
|
128
|
+
export { validateMemoryRecord, validateMemoryStore } from "./validate.js";
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { isAbsolute } from "node:path";
|
|
2
|
+
import { canonicalizeExistingPath } from "../../core/path-canonical.js";
|
|
3
|
+
import { ceilChars } from "../session/context-accounting.js";
|
|
4
|
+
import { pruneStaleMemoryRecords, sortMemoryRecords, updateMemoryRecord } from "./store.js";
|
|
5
|
+
import type { MemoryRecord, MemoryRepositoryIdentity, MemoryRetrievalOptions } from "./types.js";
|
|
6
|
+
|
|
7
|
+
export async function approveMemoryRecord(
|
|
8
|
+
dataDir: string,
|
|
9
|
+
memoryId: string,
|
|
10
|
+
now: Date = new Date(),
|
|
11
|
+
): Promise<MemoryRecord> {
|
|
12
|
+
return updateMemoryRecord(dataDir, memoryId, (record) => approveRecord(record, now));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export async function rejectMemoryRecord(
|
|
16
|
+
dataDir: string,
|
|
17
|
+
memoryId: string,
|
|
18
|
+
now: Date = new Date(),
|
|
19
|
+
): Promise<MemoryRecord> {
|
|
20
|
+
return updateMemoryRecord(dataDir, memoryId, (record) => rejectRecord(record, now));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export async function pruneStaleMemory(dataDir: string, now: Date = new Date()): Promise<MemoryRecord[]> {
|
|
24
|
+
return pruneStaleMemoryRecords(dataDir, now);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function selectApprovedMemory(
|
|
28
|
+
records: ReadonlyArray<MemoryRecord>,
|
|
29
|
+
options: MemoryRetrievalOptions,
|
|
30
|
+
): MemoryRecord[] {
|
|
31
|
+
if (options.tokenBudget <= 0) return [];
|
|
32
|
+
const allowedScopes = options.scopes === undefined ? null : new Set(options.scopes);
|
|
33
|
+
const activeRepository = canonicalActiveRepository(options.activeRepository);
|
|
34
|
+
const candidates = sortMemoryRecords(records)
|
|
35
|
+
.filter((record) => record.approved)
|
|
36
|
+
.filter((record) => record.evidenceRefs.length > 0)
|
|
37
|
+
.filter((record) => record.regressions === undefined || record.regressions.length === 0)
|
|
38
|
+
.filter((record) => allowedScopes === null || allowedScopes.has(record.scope))
|
|
39
|
+
.filter((record) => repositoryApplies(record, activeRepository))
|
|
40
|
+
.sort(compareRetrievalPriority);
|
|
41
|
+
const selected: MemoryRecord[] = [];
|
|
42
|
+
let spent = 0;
|
|
43
|
+
for (const record of candidates) {
|
|
44
|
+
const cost = estimateMemoryTokens(record);
|
|
45
|
+
if (spent + cost > options.tokenBudget) continue;
|
|
46
|
+
selected.push(record);
|
|
47
|
+
spent += cost;
|
|
48
|
+
}
|
|
49
|
+
return selected;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export function estimateMemoryTokens(record: MemoryRecord): number {
|
|
53
|
+
const text = [
|
|
54
|
+
record.scope,
|
|
55
|
+
record.key,
|
|
56
|
+
record.lesson,
|
|
57
|
+
...(record.repository === undefined ? [] : [record.repository.kind, record.repository.key]),
|
|
58
|
+
...record.evidenceRefs,
|
|
59
|
+
...record.appliesWhen,
|
|
60
|
+
...record.avoidWhen,
|
|
61
|
+
...(record.regressions ?? []),
|
|
62
|
+
].join("\n");
|
|
63
|
+
return Math.max(1, ceilChars(text.length));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function cloneRecord(record: MemoryRecord): MemoryRecord {
|
|
67
|
+
const next: MemoryRecord = {
|
|
68
|
+
id: record.id,
|
|
69
|
+
scope: record.scope,
|
|
70
|
+
key: record.key,
|
|
71
|
+
lesson: record.lesson,
|
|
72
|
+
evidenceRefs: [...record.evidenceRefs],
|
|
73
|
+
appliesWhen: [...record.appliesWhen],
|
|
74
|
+
avoidWhen: [...record.avoidWhen],
|
|
75
|
+
confidence: record.confidence,
|
|
76
|
+
createdAt: record.createdAt,
|
|
77
|
+
approved: record.approved,
|
|
78
|
+
};
|
|
79
|
+
if (record.lastVerifiedAt !== undefined) next.lastVerifiedAt = record.lastVerifiedAt;
|
|
80
|
+
if (record.regressions !== undefined) next.regressions = [...record.regressions];
|
|
81
|
+
if (record.rejectedAt !== undefined) next.rejectedAt = record.rejectedAt;
|
|
82
|
+
if (record.repository !== undefined) next.repository = { ...record.repository };
|
|
83
|
+
return next;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Build the path identity expected by memory selection. The input must be an
|
|
88
|
+
* absolute active repository root. Existing symlinks are resolved; non-Git
|
|
89
|
+
* directories are valid identities too. Missing/moved paths stay distinct
|
|
90
|
+
* from their former location and therefore fail closed against old records.
|
|
91
|
+
*/
|
|
92
|
+
export function canonicalMemoryRepositoryIdentity(repositoryPath: string): MemoryRepositoryIdentity | null {
|
|
93
|
+
if (!isUsableAbsoluteRepositoryPath(repositoryPath)) return null;
|
|
94
|
+
const key = canonicalizeExistingPath(repositoryPath);
|
|
95
|
+
if (!isUsableAbsoluteRepositoryPath(key)) return null;
|
|
96
|
+
return { kind: "canonical-path", key };
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function canonicalActiveRepository(
|
|
100
|
+
identity: MemoryRepositoryIdentity | null | undefined,
|
|
101
|
+
): MemoryRepositoryIdentity | null {
|
|
102
|
+
if (identity === null || identity === undefined || identity.kind !== "canonical-path") return null;
|
|
103
|
+
const canonical = canonicalMemoryRepositoryIdentity(identity.key);
|
|
104
|
+
if (canonical === null || canonical.key !== identity.key) return null;
|
|
105
|
+
return canonical;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function repositoryApplies(record: MemoryRecord, activeRepository: MemoryRepositoryIdentity | null): boolean {
|
|
109
|
+
if (record.scope !== "repo") return true;
|
|
110
|
+
if (activeRepository === null) return false;
|
|
111
|
+
|
|
112
|
+
// The structured field is the only applicability mechanism: a repo-scoped
|
|
113
|
+
// record without it never enters any repository prompt.
|
|
114
|
+
if (record.repository === undefined) return false;
|
|
115
|
+
return record.repository.kind === activeRepository.kind && record.repository.key === activeRepository.key;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function isUsableAbsoluteRepositoryPath(value: string): boolean {
|
|
119
|
+
return value.length > 0 && !/[\0\r\n]/u.test(value) && isAbsolute(value);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function approveRecord(record: MemoryRecord, now: Date): MemoryRecord {
|
|
123
|
+
const next = cloneRecord(record);
|
|
124
|
+
next.approved = true;
|
|
125
|
+
next.lastVerifiedAt = now.toISOString();
|
|
126
|
+
Reflect.deleteProperty(next, "rejectedAt");
|
|
127
|
+
return next;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function rejectRecord(record: MemoryRecord, now: Date): MemoryRecord {
|
|
131
|
+
const next = cloneRecord(record);
|
|
132
|
+
next.approved = false;
|
|
133
|
+
next.rejectedAt = now.toISOString();
|
|
134
|
+
return next;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function compareRetrievalPriority(left: MemoryRecord, right: MemoryRecord): number {
|
|
138
|
+
const leftVerified = left.lastVerifiedAt ?? left.createdAt;
|
|
139
|
+
const rightVerified = right.lastVerifiedAt ?? right.createdAt;
|
|
140
|
+
const byVerified = rightVerified.localeCompare(leftVerified);
|
|
141
|
+
if (byVerified !== 0) return byVerified;
|
|
142
|
+
return left.id.localeCompare(right.id);
|
|
143
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { estimateMemoryTokens, selectApprovedMemory } from "./operations.js";
|
|
2
|
+
import type { MemoryRecord, MemoryRepositoryIdentity, MemoryScope } from "./types.js";
|
|
3
|
+
|
|
4
|
+
export const MEMORY_PROMPT_DEFAULT_TOKEN_BUDGET = 400;
|
|
5
|
+
export const MEMORY_PROMPT_DEFAULT_MAX_ITEMS = 5;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Default scopes considered for chat-loop memory injection. We deliberately
|
|
9
|
+
* keep this conservative: `global` records are generally relevant and `repo`
|
|
10
|
+
* records are considered only when they exactly match the active repository
|
|
11
|
+
* identity. `language`, `runtime`, `agent`, `task-family`, and `hpc-domain`
|
|
12
|
+
* need richer context that the chat-loop does not have at submit-time. Future
|
|
13
|
+
* slices can broaden this list per call site.
|
|
14
|
+
*/
|
|
15
|
+
export const MEMORY_PROMPT_DEFAULT_SCOPES: ReadonlyArray<MemoryScope> = ["global", "repo"];
|
|
16
|
+
|
|
17
|
+
export interface MemoryPromptOptions {
|
|
18
|
+
scopes?: ReadonlyArray<MemoryScope>;
|
|
19
|
+
tokenBudget?: number;
|
|
20
|
+
maxItems?: number;
|
|
21
|
+
/** Missing or unknown identity leaves global memory eligible but excludes repo memory. */
|
|
22
|
+
activeRepository?: MemoryRepositoryIdentity | null;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Filter approved, non-regressed, evidence-linked memory and cap by scope,
|
|
27
|
+
* deterministic token budget, repository identity, and item count. Stable
|
|
28
|
+
* ordering is guaranteed by `selectApprovedMemory`'s inner sort and the fixed
|
|
29
|
+
* scope list. Repository identities match on exact canonical keys only.
|
|
30
|
+
*/
|
|
31
|
+
export function selectMemoryForPrompt(
|
|
32
|
+
records: ReadonlyArray<MemoryRecord>,
|
|
33
|
+
options: MemoryPromptOptions = {},
|
|
34
|
+
): MemoryRecord[] {
|
|
35
|
+
const scopes = options.scopes ?? MEMORY_PROMPT_DEFAULT_SCOPES;
|
|
36
|
+
const tokenBudget = options.tokenBudget ?? MEMORY_PROMPT_DEFAULT_TOKEN_BUDGET;
|
|
37
|
+
const maxItems = options.maxItems ?? MEMORY_PROMPT_DEFAULT_MAX_ITEMS;
|
|
38
|
+
if (tokenBudget <= 0 || maxItems <= 0) return [];
|
|
39
|
+
const selected = selectApprovedMemory(records, {
|
|
40
|
+
scopes,
|
|
41
|
+
tokenBudget,
|
|
42
|
+
activeRepository: options.activeRepository ?? null,
|
|
43
|
+
});
|
|
44
|
+
return selected.slice(0, maxItems);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Render a compact, deterministic memory section for prompt injection. Every
|
|
49
|
+
* line cites evidence ids so the model can reason about provenance. Returns
|
|
50
|
+
* the empty string when no records apply, so callers can treat the section as
|
|
51
|
+
* absent.
|
|
52
|
+
*/
|
|
53
|
+
export function renderMemoryPromptSection(records: ReadonlyArray<MemoryRecord>): string {
|
|
54
|
+
if (records.length === 0) return "";
|
|
55
|
+
const lines: string[] = [
|
|
56
|
+
"# Memory",
|
|
57
|
+
"",
|
|
58
|
+
"Approved long-term memory records that may apply. Each lesson is gated by human approval and cited evidence; do not extrapolate beyond the cited findings.",
|
|
59
|
+
"",
|
|
60
|
+
];
|
|
61
|
+
for (const record of records) {
|
|
62
|
+
const lesson = record.lesson.replace(/\s+/g, " ").trim();
|
|
63
|
+
const evidence = record.evidenceRefs.join(", ");
|
|
64
|
+
lines.push(`- [${record.id}] (${renderApplicability(record)}) ${lesson} Evidence: ${evidence}.`);
|
|
65
|
+
}
|
|
66
|
+
return lines.join("\n");
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function renderApplicability(record: MemoryRecord): string {
|
|
70
|
+
if (record.scope !== "repo") return `scope=${record.scope}`;
|
|
71
|
+
if (record.repository !== undefined) {
|
|
72
|
+
return `scope=repo, repository=${JSON.stringify(`${record.repository.kind}:${record.repository.key}`)}`;
|
|
73
|
+
}
|
|
74
|
+
return "scope=repo, repository=unknown";
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** Convenience for callers that want a single end-to-end build step. */
|
|
78
|
+
export function buildMemoryPromptSection(
|
|
79
|
+
records: ReadonlyArray<MemoryRecord>,
|
|
80
|
+
options: MemoryPromptOptions = {},
|
|
81
|
+
): { section: string; records: MemoryRecord[]; tokens: number } {
|
|
82
|
+
const selected = selectMemoryForPrompt(records, options);
|
|
83
|
+
const section = renderMemoryPromptSection(selected);
|
|
84
|
+
const tokens = selected.reduce((acc, record) => acc + estimateMemoryTokens(record), 0);
|
|
85
|
+
return { section, records: selected, tokens };
|
|
86
|
+
}
|