@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,602 @@
|
|
|
1
|
+
import {
|
|
2
|
+
buildMemoryInterventionUserPrompt,
|
|
3
|
+
MEMORY_INTERVENTION_SYSTEM_PROMPT,
|
|
4
|
+
} from "../prompts/memory-intervention.js";
|
|
5
|
+
import { TASK_MEMORY_CONTENT_MAX_CHARS, type TaskMemoryBank, type TaskMemoryRenderableClass } from "./task-bank.js";
|
|
6
|
+
|
|
7
|
+
export const TASK_MEMORY_POLICY_MAX_OPERATIONS = 8;
|
|
8
|
+
/**
|
|
9
|
+
* Fallback deadline for a caller that supplies no timeout, which is the
|
|
10
|
+
* middleware constructed without settings and `runTaskMemoryPolicy` called
|
|
11
|
+
* directly.
|
|
12
|
+
*
|
|
13
|
+
* This must equal the settings default in `src/core/defaults.ts`; a contract
|
|
14
|
+
* test pins the pair. It read 20000 while the shipped default was 180000, and
|
|
15
|
+
* 20000 is the value measured to have produced 256 timeouts against a route
|
|
16
|
+
* whose completions have a 15s median and an 81s tail. Two numbers for one
|
|
17
|
+
* setting means any path that misses the settings object silently gets the one
|
|
18
|
+
* known to be wrong.
|
|
19
|
+
*/
|
|
20
|
+
export const TASK_MEMORY_POLICY_DEFAULT_TIMEOUT_MS = 180_000;
|
|
21
|
+
/**
|
|
22
|
+
* The envelope itself needs a few hundred tokens. The rest is headroom for a
|
|
23
|
+
* model that reasons despite thinking being requested off: measured preambles on
|
|
24
|
+
* a 9B local route ran past 1,800 tokens before the first `<operations>` byte,
|
|
25
|
+
* and a budget that runs out mid-thought yields an empty response, no bank
|
|
26
|
+
* writes, and no way for the operator to tell that from a deliberate silence.
|
|
27
|
+
*/
|
|
28
|
+
export const TASK_MEMORY_POLICY_MODEL_MAX_OUTPUT_TOKENS = 4_000;
|
|
29
|
+
|
|
30
|
+
export interface TaskMemoryTrajectoryStep {
|
|
31
|
+
step: number;
|
|
32
|
+
toolName: string;
|
|
33
|
+
fingerprint: string;
|
|
34
|
+
callDescription: string;
|
|
35
|
+
outcome: "ok" | "error";
|
|
36
|
+
resultDigest: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface TaskMemoryModelRequest {
|
|
40
|
+
systemPrompt: string;
|
|
41
|
+
userPrompt: string;
|
|
42
|
+
maxTokens: number;
|
|
43
|
+
signal: AbortSignal;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface TaskMemoryModelResponse {
|
|
47
|
+
text: string;
|
|
48
|
+
inputTokens?: number;
|
|
49
|
+
outputTokens?: number;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface TaskMemoryModelClient {
|
|
53
|
+
complete(input: TaskMemoryModelRequest): Promise<TaskMemoryModelResponse>;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export type TaskMemoryPolicyDecision = "silent" | "injected" | "gated" | "timeout" | "malformed";
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Why a step ended where it did.
|
|
60
|
+
*
|
|
61
|
+
* `decision` alone cannot be acted on. Six distinct situations resolve to a
|
|
62
|
+
* null reminder, and they call for opposite responses: a route that refused the
|
|
63
|
+
* connection needs the server started, a model that wrote `<no_intervention/>`
|
|
64
|
+
* needs nothing at all, and an answer whose every operation named an invented
|
|
65
|
+
* verb needs the prompt changed. A session that recorded four `silent` steps and
|
|
66
|
+
* zero bank writes was indistinguishable from a healthy quiet one, which is how
|
|
67
|
+
* a broken tier survived a whole session unnoticed.
|
|
68
|
+
*/
|
|
69
|
+
export type TaskMemoryPolicyReason =
|
|
70
|
+
/** A cited reminder reached the visible channel. */
|
|
71
|
+
| "intervened"
|
|
72
|
+
/** The model answered and chose `<no_intervention/>` or wrote no phase two. */
|
|
73
|
+
| "model_silent"
|
|
74
|
+
/** The reminder repeated the one already on screen. */
|
|
75
|
+
| "duplicate_reminder"
|
|
76
|
+
/** The rules tier already spoke for this boundary; phase one still applied. */
|
|
77
|
+
| "suppressed"
|
|
78
|
+
/** A spontaneous reminder cited no bank entry. */
|
|
79
|
+
| "uncited"
|
|
80
|
+
/** The reminder exceeded the token cap and was dropped rather than truncated. */
|
|
81
|
+
| "over_budget"
|
|
82
|
+
/** No envelope was found, or its operation list violated the grammar. */
|
|
83
|
+
| "unparseable"
|
|
84
|
+
/** Every operation named a verb the bank has no writer for. */
|
|
85
|
+
| "all_operations_invalid"
|
|
86
|
+
/** The request did not answer inside the policy timeout. */
|
|
87
|
+
| "deadline"
|
|
88
|
+
/** The model client threw: unreachable route, auth failure, malformed request. */
|
|
89
|
+
| "client_error"
|
|
90
|
+
/** No background role is configured, so the llm tier never ran. */
|
|
91
|
+
| "no_client"
|
|
92
|
+
/**
|
|
93
|
+
* Nothing in this process can consume a reminder, so no step was started. A
|
|
94
|
+
* headless run submits no further turn, and the step is detached from the
|
|
95
|
+
* boundary that triggered it, so the process exits before it can land.
|
|
96
|
+
*/
|
|
97
|
+
| "no_consumer"
|
|
98
|
+
/** A step was already in flight, so this boundary's triggers stayed pending. */
|
|
99
|
+
| "step_in_flight"
|
|
100
|
+
/** Rules tier: the turn ended with no repeated failure worth reporting. */
|
|
101
|
+
| "no_repeated_failure"
|
|
102
|
+
/** Rules tier: compaction reactivation found no knowledge entries to restore. */
|
|
103
|
+
| "bank_empty";
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* The model's own words for one step, handed to an observer before they are
|
|
107
|
+
* discarded. Content-bearing by construction, so the composition root only wires
|
|
108
|
+
* it when the operator asked for a trace.
|
|
109
|
+
*/
|
|
110
|
+
export interface TaskMemoryEnvelope {
|
|
111
|
+
systemPrompt: string;
|
|
112
|
+
userPrompt: string;
|
|
113
|
+
/** Raw completion text, or empty when the call threw or timed out. */
|
|
114
|
+
response: string;
|
|
115
|
+
decision: TaskMemoryPolicyDecision;
|
|
116
|
+
reason: TaskMemoryPolicyReason;
|
|
117
|
+
bankOperations: number;
|
|
118
|
+
droppedOperations: number;
|
|
119
|
+
reminder: string | null;
|
|
120
|
+
/** Client failure message, redacted of nothing because it never carries bank text. */
|
|
121
|
+
error: string | null;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export interface TaskMemoryPolicyInput {
|
|
125
|
+
task: string;
|
|
126
|
+
trajectory: ReadonlyArray<TaskMemoryTrajectoryStep>;
|
|
127
|
+
deterministicTrigger: boolean;
|
|
128
|
+
maxTokens: number;
|
|
129
|
+
timeoutMs?: number;
|
|
130
|
+
/** Phase one still applies; phase two is suppressed when another memory reminder already won this boundary. */
|
|
131
|
+
suppressIntervention?: boolean;
|
|
132
|
+
/** Last visible memory reminder, used to keep repeated model output silent. */
|
|
133
|
+
previousReminder?: string | null;
|
|
134
|
+
/** Opt-in raw-envelope observer. Absent unless an operator turned tracing on. */
|
|
135
|
+
onEnvelope?: (envelope: TaskMemoryEnvelope) => void;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export interface TaskMemoryPolicyResult {
|
|
139
|
+
decision: TaskMemoryPolicyDecision;
|
|
140
|
+
reason: TaskMemoryPolicyReason;
|
|
141
|
+
bankOperations: number;
|
|
142
|
+
/** Operations the bank refused. Nonzero with `bankOperations` at zero is a total loss. */
|
|
143
|
+
droppedOperations: number;
|
|
144
|
+
reminder: string | null;
|
|
145
|
+
inputTokens: number;
|
|
146
|
+
outputTokens: number;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
type TaskMemoryOperation =
|
|
150
|
+
| { op: "update_status"; content: string }
|
|
151
|
+
| { op: "save_knowledge"; content: string; id?: string }
|
|
152
|
+
| { op: "save_procedural"; content: string; id?: string }
|
|
153
|
+
| { op: "delete"; id: string };
|
|
154
|
+
|
|
155
|
+
interface ParsedMemoryStep {
|
|
156
|
+
operations: TaskMemoryOperation[];
|
|
157
|
+
context: string | null;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
interface ReadOperationsResult {
|
|
161
|
+
operations: TaskMemoryOperation[];
|
|
162
|
+
/** Entries named an op the bank has no verb for; kept only to detect a total loss. */
|
|
163
|
+
dropped: number;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const TASK_PROMPT_MAX_CHARS = 2_000;
|
|
167
|
+
const TRAJECTORY_PROMPT_MAX_CHARS = 4_000;
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Render the trajectory as JSON that parses, dropping whole steps to fit.
|
|
171
|
+
*
|
|
172
|
+
* Slicing the serialized string cut it mid-token, so a window at the documented
|
|
173
|
+
* per-field maxima reached the model as JSON ending in an unterminated string.
|
|
174
|
+
* That corrupts the only input the model reasons over, and it does so precisely
|
|
175
|
+
* on the busiest windows. The oldest steps go first: the newest are the ones a
|
|
176
|
+
* memory step is being asked about.
|
|
177
|
+
*/
|
|
178
|
+
function renderTrajectory(trajectory: TaskMemoryPolicyInput["trajectory"]): string {
|
|
179
|
+
let steps = [...trajectory];
|
|
180
|
+
let rendered = JSON.stringify(steps);
|
|
181
|
+
while (rendered.length > TRAJECTORY_PROMPT_MAX_CHARS && steps.length > 1) {
|
|
182
|
+
steps = steps.slice(1);
|
|
183
|
+
rendered = JSON.stringify(steps);
|
|
184
|
+
}
|
|
185
|
+
// A single step can still exceed the budget on its own. Truncating its fields
|
|
186
|
+
// keeps the envelope parseable where truncating the JSON would not.
|
|
187
|
+
if (rendered.length > TRAJECTORY_PROMPT_MAX_CHARS && steps.length === 1) {
|
|
188
|
+
const only = steps[0];
|
|
189
|
+
if (only !== undefined) {
|
|
190
|
+
const room = Math.max(0, TRAJECTORY_PROMPT_MAX_CHARS - JSON.stringify([{ ...only, resultDigest: "" }]).length);
|
|
191
|
+
rendered = JSON.stringify([{ ...only, resultDigest: only.resultDigest.slice(0, room) }]);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return rendered;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export async function runTaskMemoryPolicy(
|
|
198
|
+
bank: TaskMemoryBank,
|
|
199
|
+
client: TaskMemoryModelClient,
|
|
200
|
+
input: TaskMemoryPolicyInput,
|
|
201
|
+
): Promise<TaskMemoryPolicyResult> {
|
|
202
|
+
const controller = new AbortController();
|
|
203
|
+
const timeoutMs = positiveInteger(input.timeoutMs, TASK_MEMORY_POLICY_DEFAULT_TIMEOUT_MS);
|
|
204
|
+
const timeoutMarker = Symbol("task-memory-timeout");
|
|
205
|
+
let timer: NodeJS.Timeout | undefined;
|
|
206
|
+
let userPrompt = "";
|
|
207
|
+
let rawResponse = "";
|
|
208
|
+
let clientError: string | null = null;
|
|
209
|
+
// Every exit reports through here so the trace sees the same envelope the
|
|
210
|
+
// telemetry row summarizes, including the paths that used to throw away both.
|
|
211
|
+
const settle = (
|
|
212
|
+
decision: TaskMemoryPolicyDecision,
|
|
213
|
+
reason: TaskMemoryPolicyReason,
|
|
214
|
+
parts: Partial<Omit<TaskMemoryPolicyResult, "decision" | "reason">> = {},
|
|
215
|
+
): TaskMemoryPolicyResult => {
|
|
216
|
+
const result: TaskMemoryPolicyResult = {
|
|
217
|
+
decision,
|
|
218
|
+
reason,
|
|
219
|
+
bankOperations: parts.bankOperations ?? 0,
|
|
220
|
+
droppedOperations: parts.droppedOperations ?? 0,
|
|
221
|
+
reminder: parts.reminder ?? null,
|
|
222
|
+
inputTokens: parts.inputTokens ?? 0,
|
|
223
|
+
outputTokens: parts.outputTokens ?? 0,
|
|
224
|
+
};
|
|
225
|
+
try {
|
|
226
|
+
input.onEnvelope?.({
|
|
227
|
+
systemPrompt: MEMORY_INTERVENTION_SYSTEM_PROMPT,
|
|
228
|
+
userPrompt,
|
|
229
|
+
response: rawResponse,
|
|
230
|
+
decision,
|
|
231
|
+
reason,
|
|
232
|
+
bankOperations: result.bankOperations,
|
|
233
|
+
droppedOperations: result.droppedOperations,
|
|
234
|
+
reminder: result.reminder,
|
|
235
|
+
error: clientError,
|
|
236
|
+
});
|
|
237
|
+
} catch {
|
|
238
|
+
// A failing observer is an operator's diagnostic, never the policy's problem.
|
|
239
|
+
}
|
|
240
|
+
return result;
|
|
241
|
+
};
|
|
242
|
+
try {
|
|
243
|
+
userPrompt = buildMemoryInterventionUserPrompt({
|
|
244
|
+
task: input.task.slice(0, TASK_PROMPT_MAX_CHARS),
|
|
245
|
+
bank: bank.render(input.maxTokens),
|
|
246
|
+
trajectory: renderTrajectory(input.trajectory),
|
|
247
|
+
});
|
|
248
|
+
const completion = client.complete({
|
|
249
|
+
systemPrompt: MEMORY_INTERVENTION_SYSTEM_PROMPT,
|
|
250
|
+
userPrompt,
|
|
251
|
+
maxTokens: TASK_MEMORY_POLICY_MODEL_MAX_OUTPUT_TOKENS,
|
|
252
|
+
signal: controller.signal,
|
|
253
|
+
});
|
|
254
|
+
const timeout = new Promise<typeof timeoutMarker>((resolve) => {
|
|
255
|
+
timer = setTimeout(() => resolve(timeoutMarker), timeoutMs);
|
|
256
|
+
});
|
|
257
|
+
const response = await Promise.race([completion, timeout]);
|
|
258
|
+
if (response === timeoutMarker) {
|
|
259
|
+
controller.abort();
|
|
260
|
+
void completion.catch(() => undefined);
|
|
261
|
+
return settle("timeout", "deadline");
|
|
262
|
+
}
|
|
263
|
+
rawResponse = typeof response.text === "string" ? response.text : "";
|
|
264
|
+
const usage = {
|
|
265
|
+
inputTokens: nonNegativeInteger(response.inputTokens),
|
|
266
|
+
outputTokens: nonNegativeInteger(response.outputTokens),
|
|
267
|
+
};
|
|
268
|
+
const read = readPolicyStep(rawResponse);
|
|
269
|
+
if (!read.ok) return settle("malformed", read.reason, { ...usage, droppedOperations: read.dropped });
|
|
270
|
+
const operations = resolveOperations(bank, read.step.operations);
|
|
271
|
+
applyOperations(bank, operations);
|
|
272
|
+
// A model's operation is dropped either by the grammar, which does not know
|
|
273
|
+
// the verb, or by identity repair, which could not resolve a delete target.
|
|
274
|
+
// Both are model output the bank refused, so both belong in one count.
|
|
275
|
+
const counts = {
|
|
276
|
+
...usage,
|
|
277
|
+
bankOperations: operations.length,
|
|
278
|
+
droppedOperations: read.dropped + (read.step.operations.length - operations.length),
|
|
279
|
+
};
|
|
280
|
+
if (read.step.context === null) return settle("silent", "model_silent", counts);
|
|
281
|
+
// An over-budget reminder is a phase-two policy violation, not a parse
|
|
282
|
+
// failure. Truncating it would strip the citation that earns it a voice, so
|
|
283
|
+
// the reminder is suppressed while phase one stays applied.
|
|
284
|
+
const reminder = withMemoryPrefix(read.step.context, input.maxTokens);
|
|
285
|
+
if (reminder.length === 0) return settle("gated", "over_budget", counts);
|
|
286
|
+
if (input.suppressIntervention === true) return settle("silent", "suppressed", counts);
|
|
287
|
+
if (reminder === input.previousReminder) return settle("silent", "duplicate_reminder", counts);
|
|
288
|
+
const citedIds = citedRenderableEntryIds(bank, reminder);
|
|
289
|
+
if (!input.deterministicTrigger && citedIds.length === 0) return settle("gated", "uncited", counts);
|
|
290
|
+
bank.recordInjection(citedIds);
|
|
291
|
+
return settle("injected", "intervened", { ...counts, reminder });
|
|
292
|
+
} catch (error) {
|
|
293
|
+
clientError = errorMessage(error);
|
|
294
|
+
return settle("silent", "client_error");
|
|
295
|
+
} finally {
|
|
296
|
+
if (timer !== undefined) clearTimeout(timer);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
const OPERATIONS_OPEN = "<operations>";
|
|
301
|
+
const OPERATIONS_CLOSE = "</operations>";
|
|
302
|
+
const CONTEXT_OPEN = "<context_for_action>";
|
|
303
|
+
const CONTEXT_CLOSE = "</context_for_action>";
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Small local models rarely emit a byte-exact envelope: they wrap it in a
|
|
307
|
+
* markdown fence, prepend a reasoning block, or add a closing sentence. None of
|
|
308
|
+
* that changes what they decided, so the envelope is located rather than
|
|
309
|
+
* matched, and anything outside it is discarded.
|
|
310
|
+
*/
|
|
311
|
+
function cleanPolicyResponse(raw: string): string {
|
|
312
|
+
return (
|
|
313
|
+
raw
|
|
314
|
+
.replace(/<(think|thinking|reasoning|scratchpad)\b[^>]*>[\s\S]*?<\/\1\s*>/giu, " ")
|
|
315
|
+
// An unterminated reasoning block means the output budget ran out mid-thought;
|
|
316
|
+
// nothing after it is trustworthy, and nothing before it is an envelope.
|
|
317
|
+
.replace(/<(think|thinking|reasoning|scratchpad)\b[^>]*>[\s\S]*$/iu, " ")
|
|
318
|
+
.replace(/^[^\S\n]*```[^\n]*$/gmu, " ")
|
|
319
|
+
.trim()
|
|
320
|
+
);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Reminder text rides inside a `<system-reminder>` block on the next user turn.
|
|
325
|
+
* Tag-shaped output from the memory model must not be able to close that block
|
|
326
|
+
* early, so tag shapes are dropped while comparisons and arrows survive.
|
|
327
|
+
*/
|
|
328
|
+
function stripTagShapes(value: string): string {
|
|
329
|
+
return value.replace(/<\/?[a-zA-Z][^>]*>/gu, " ");
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Find where the operation list ends, by reading the JSON array rather than by
|
|
334
|
+
* searching for the close tag.
|
|
335
|
+
*
|
|
336
|
+
* An operation's content is free text, and a session working on the memory tier
|
|
337
|
+
* writes this envelope's own grammar into it. `indexOf` then finds a close tag
|
|
338
|
+
* that sits inside a JSON string and hands `JSON.parse` a truncated document, so
|
|
339
|
+
* a correct answer is discarded as unparseable. `lastIndexOf` fails the mirror
|
|
340
|
+
* case, where a reminder quotes the tag again after the list has closed. The
|
|
341
|
+
* array's own bracket depth is the only boundary that both cases agree on.
|
|
342
|
+
*
|
|
343
|
+
* Returns the index just past the array's closing bracket, or -1 when the text
|
|
344
|
+
* holds no balanced array.
|
|
345
|
+
*/
|
|
346
|
+
function operationsEndIndex(text: string, from: number): number {
|
|
347
|
+
let depth = 0;
|
|
348
|
+
let inString = false;
|
|
349
|
+
let escaped = false;
|
|
350
|
+
let started = false;
|
|
351
|
+
for (let index = from; index < text.length; index += 1) {
|
|
352
|
+
const char = text[index];
|
|
353
|
+
if (inString) {
|
|
354
|
+
if (escaped) escaped = false;
|
|
355
|
+
else if (char === "\\") escaped = true;
|
|
356
|
+
else if (char === '"') inString = false;
|
|
357
|
+
continue;
|
|
358
|
+
}
|
|
359
|
+
if (char === '"') {
|
|
360
|
+
inString = true;
|
|
361
|
+
continue;
|
|
362
|
+
}
|
|
363
|
+
if (char === "[" || char === "{") {
|
|
364
|
+
depth += 1;
|
|
365
|
+
started = true;
|
|
366
|
+
continue;
|
|
367
|
+
}
|
|
368
|
+
if (char === "]" || char === "}") {
|
|
369
|
+
depth -= 1;
|
|
370
|
+
if (depth < 0) return -1;
|
|
371
|
+
if (depth === 0 && started) return index + 1;
|
|
372
|
+
continue;
|
|
373
|
+
}
|
|
374
|
+
// Anything before the array opens that is not whitespace means the model
|
|
375
|
+
// wrote something other than an operation list.
|
|
376
|
+
if (!started && char !== undefined && char.trim().length > 0) return -1;
|
|
377
|
+
}
|
|
378
|
+
return -1;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
type ReadPolicyStepResult =
|
|
382
|
+
| { ok: true; step: ParsedMemoryStep; dropped: number }
|
|
383
|
+
| { ok: false; reason: "unparseable" | "all_operations_invalid"; dropped: number };
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* The rejecting variant of the parser. It separates "the model produced no
|
|
387
|
+
* envelope" from "the model produced an envelope whose every operation named a
|
|
388
|
+
* verb the bank does not have", because those two point at different fixes and
|
|
389
|
+
* the boolean form of this function could not tell them apart.
|
|
390
|
+
*/
|
|
391
|
+
function readPolicyStep(response: string): ReadPolicyStepResult {
|
|
392
|
+
const unparseable = { ok: false, reason: "unparseable", dropped: 0 } as const;
|
|
393
|
+
if (typeof response !== "string" || response.length === 0) return unparseable;
|
|
394
|
+
const text = cleanPolicyResponse(response);
|
|
395
|
+
const opensAt = text.indexOf(OPERATIONS_OPEN);
|
|
396
|
+
if (opensAt === -1) return unparseable;
|
|
397
|
+
const listAt = opensAt + OPERATIONS_OPEN.length;
|
|
398
|
+
const listEndsAt = operationsEndIndex(text, listAt);
|
|
399
|
+
if (listEndsAt === -1) return unparseable;
|
|
400
|
+
// The close tag is still required. A model that wrote no list at all never
|
|
401
|
+
// reaches here, and one that wrote a list but no close tag did not produce
|
|
402
|
+
// the envelope the prompt asks for.
|
|
403
|
+
const closesAt = text.indexOf(OPERATIONS_CLOSE, listEndsAt);
|
|
404
|
+
if (closesAt === -1) return unparseable;
|
|
405
|
+
let rawOperations: unknown;
|
|
406
|
+
try {
|
|
407
|
+
rawOperations = JSON.parse(text.slice(listAt, listEndsAt)) as unknown;
|
|
408
|
+
} catch {
|
|
409
|
+
return unparseable;
|
|
410
|
+
}
|
|
411
|
+
const read = readOperations(rawOperations);
|
|
412
|
+
if (read === null) return unparseable;
|
|
413
|
+
// Recovering nothing is not silence. A step whose every operation was invented
|
|
414
|
+
// stays malformed so the operator can see the model answered in a shape the
|
|
415
|
+
// bank could not use.
|
|
416
|
+
if (read.operations.length === 0 && read.dropped > 0) {
|
|
417
|
+
return { ok: false, reason: "all_operations_invalid", dropped: read.dropped };
|
|
418
|
+
}
|
|
419
|
+
return {
|
|
420
|
+
ok: true,
|
|
421
|
+
step: { operations: read.operations, context: readContext(text.slice(closesAt + OPERATIONS_CLOSE.length)) },
|
|
422
|
+
dropped: read.dropped,
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
export function parseTaskMemoryPolicyResponse(response: string): ParsedMemoryStep | null {
|
|
427
|
+
const read = readPolicyStep(response);
|
|
428
|
+
return read.ok ? read.step : null;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* Phase two after the operation list. Explicit silence, a missing decision, and
|
|
433
|
+
* an empty reminder all resolve to silence: the prompt's documented default is
|
|
434
|
+
* `<no_intervention/>`, so an incomplete envelope must never manufacture an
|
|
435
|
+
* intervention out of a model that simply stopped writing.
|
|
436
|
+
*/
|
|
437
|
+
function readContext(tail: string): string | null {
|
|
438
|
+
const contextAt = tail.indexOf(CONTEXT_OPEN);
|
|
439
|
+
const silenceAt = tail.search(/<no_intervention\s*\/?>/u);
|
|
440
|
+
if (contextAt === -1) return null;
|
|
441
|
+
if (silenceAt !== -1 && silenceAt < contextAt) return null;
|
|
442
|
+
const body = tail.slice(contextAt + CONTEXT_OPEN.length);
|
|
443
|
+
const closesAt = body.lastIndexOf(CONTEXT_CLOSE);
|
|
444
|
+
const context = stripTagShapes(closesAt === -1 ? body : body.slice(0, closesAt))
|
|
445
|
+
.replace(/\s+/gu, " ")
|
|
446
|
+
.trim();
|
|
447
|
+
return context.length === 0 ? null : context;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* Structural violations still reject the batch, because they say the model did
|
|
452
|
+
* not produce an operation list at all. An unrecognized `op` says only that one
|
|
453
|
+
* entry named a verb the bank does not have, and a small model handed a tool
|
|
454
|
+
* trajectory routinely borrows that trajectory's shape for exactly one entry.
|
|
455
|
+
* Dropping it costs one operation, which is the same trade `resolveOperations`
|
|
456
|
+
* already makes for an invented entry id.
|
|
457
|
+
*/
|
|
458
|
+
function readOperations(value: unknown): ReadOperationsResult | null {
|
|
459
|
+
if (!Array.isArray(value) || value.length > TASK_MEMORY_POLICY_MAX_OPERATIONS) return null;
|
|
460
|
+
const operations: TaskMemoryOperation[] = [];
|
|
461
|
+
let dropped = 0;
|
|
462
|
+
for (const raw of value) {
|
|
463
|
+
if (!isRecord(raw) || typeof raw.op !== "string") return null;
|
|
464
|
+
switch (raw.op) {
|
|
465
|
+
case "update_status": {
|
|
466
|
+
if (!hasExactKeys(raw, ["op", "content"])) return null;
|
|
467
|
+
const content = boundedContent(raw.content);
|
|
468
|
+
if (content === null) return null;
|
|
469
|
+
operations.push({ op: raw.op, content });
|
|
470
|
+
break;
|
|
471
|
+
}
|
|
472
|
+
case "save_knowledge":
|
|
473
|
+
case "save_procedural": {
|
|
474
|
+
if (!hasExactKeys(raw, raw.id === undefined ? ["op", "content"] : ["op", "content", "id"])) return null;
|
|
475
|
+
const content = boundedContent(raw.content);
|
|
476
|
+
if (content === null) return null;
|
|
477
|
+
if (raw.id !== undefined && !nonEmptyString(raw.id)) return null;
|
|
478
|
+
const operation: Extract<TaskMemoryOperation, { op: typeof raw.op }> = { op: raw.op, content };
|
|
479
|
+
if (typeof raw.id === "string") operation.id = raw.id;
|
|
480
|
+
operations.push(operation);
|
|
481
|
+
break;
|
|
482
|
+
}
|
|
483
|
+
case "delete":
|
|
484
|
+
if (!hasExactKeys(raw, ["op", "id"]) || !nonEmptyString(raw.id)) return null;
|
|
485
|
+
operations.push({ op: raw.op, id: raw.id });
|
|
486
|
+
break;
|
|
487
|
+
default:
|
|
488
|
+
dropped += 1;
|
|
489
|
+
break;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
return { operations, dropped };
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
/**
|
|
496
|
+
* Reconcile a model's operation list against the bank it actually has.
|
|
497
|
+
*
|
|
498
|
+
* Small local models routinely invent plausible-looking entry ids for content
|
|
499
|
+
* they mean to record for the first time. Rejecting the whole batch over one
|
|
500
|
+
* such id throws away the writes that were the point of the step, so an
|
|
501
|
+
* unresolvable save id is treated as a new entry and an unresolvable delete is
|
|
502
|
+
* dropped. Structural violations are still rejected wholesale, upstream in
|
|
503
|
+
* `readOperations`; this stage only repairs identity.
|
|
504
|
+
*/
|
|
505
|
+
function resolveOperations(
|
|
506
|
+
bank: TaskMemoryBank,
|
|
507
|
+
operations: ReadonlyArray<TaskMemoryOperation>,
|
|
508
|
+
): TaskMemoryOperation[] {
|
|
509
|
+
const snapshot = bank.snapshot();
|
|
510
|
+
const classes = new Map<string, "status" | TaskMemoryRenderableClass>();
|
|
511
|
+
if (snapshot.status !== null) classes.set(snapshot.status.id, "status");
|
|
512
|
+
for (const entry of snapshot.knowledge) classes.set(entry.id, "knowledge");
|
|
513
|
+
for (const entry of snapshot.procedural) classes.set(entry.id, "procedural");
|
|
514
|
+
const resolved: TaskMemoryOperation[] = [];
|
|
515
|
+
for (const operation of operations) {
|
|
516
|
+
switch (operation.op) {
|
|
517
|
+
case "update_status":
|
|
518
|
+
resolved.push(operation);
|
|
519
|
+
break;
|
|
520
|
+
case "save_knowledge":
|
|
521
|
+
case "save_procedural": {
|
|
522
|
+
const expected = operation.op === "save_knowledge" ? "knowledge" : "procedural";
|
|
523
|
+
if (operation.id !== undefined && classes.get(operation.id) === expected) {
|
|
524
|
+
resolved.push(operation);
|
|
525
|
+
break;
|
|
526
|
+
}
|
|
527
|
+
// An id naming nothing, or an entry in the other class, is not an
|
|
528
|
+
// update the bank can honor. The content still deserves a home.
|
|
529
|
+
resolved.push({ op: operation.op, content: operation.content });
|
|
530
|
+
break;
|
|
531
|
+
}
|
|
532
|
+
case "delete":
|
|
533
|
+
if (classes.delete(operation.id)) resolved.push(operation);
|
|
534
|
+
break;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
return resolved;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
function applyOperations(bank: TaskMemoryBank, operations: ReadonlyArray<TaskMemoryOperation>): void {
|
|
541
|
+
for (const operation of operations) {
|
|
542
|
+
switch (operation.op) {
|
|
543
|
+
case "update_status":
|
|
544
|
+
bank.updateStatus(operation.content);
|
|
545
|
+
break;
|
|
546
|
+
case "save_knowledge":
|
|
547
|
+
bank.saveKnowledge(operation.content, operation.id === undefined ? {} : { id: operation.id });
|
|
548
|
+
break;
|
|
549
|
+
case "save_procedural":
|
|
550
|
+
bank.saveProcedural(operation.content, operation.id === undefined ? {} : { id: operation.id });
|
|
551
|
+
break;
|
|
552
|
+
case "delete":
|
|
553
|
+
bank.deleteEntry(operation.id);
|
|
554
|
+
break;
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
function citedRenderableEntryIds(bank: TaskMemoryBank, reminder: string): string[] {
|
|
560
|
+
const snapshot = bank.snapshot();
|
|
561
|
+
return [...snapshot.knowledge, ...snapshot.procedural]
|
|
562
|
+
.map((entry) => entry.id)
|
|
563
|
+
.filter((id) => reminder.includes(`[${id}]`));
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
function withMemoryPrefix(content: string, maxTokens: number): string {
|
|
567
|
+
const prefixed = content.startsWith("Memory:") ? content : `Memory: ${content}`;
|
|
568
|
+
const maxChars = Math.max(0, maxTokens) * 4;
|
|
569
|
+
return prefixed.length <= maxChars ? prefixed : "";
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
function boundedContent(value: unknown): string | null {
|
|
573
|
+
if (typeof value !== "string") return null;
|
|
574
|
+
const normalized = value.replace(/\s+/gu, " ").trim();
|
|
575
|
+
return normalized.length > 0 && normalized.length <= TASK_MEMORY_CONTENT_MAX_CHARS ? normalized : null;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
579
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
function hasExactKeys(record: Record<string, unknown>, expected: ReadonlyArray<string>): boolean {
|
|
583
|
+
const keys = Object.keys(record).sort();
|
|
584
|
+
return keys.length === expected.length && [...expected].sort().every((key, index) => keys[index] === key);
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
function nonEmptyString(value: unknown): value is string {
|
|
588
|
+
return typeof value === "string" && value.trim().length > 0;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
function positiveInteger(value: number | undefined, fallback: number): number {
|
|
592
|
+
return value !== undefined && Number.isInteger(value) && value > 0 ? value : fallback;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
function nonNegativeInteger(value: number | undefined): number {
|
|
596
|
+
return value !== undefined && Number.isInteger(value) && value >= 0 ? value : 0;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
function errorMessage(error: unknown): string {
|
|
600
|
+
if (error instanceof Error) return error.message.length > 0 ? error.message : error.name;
|
|
601
|
+
return typeof error === "string" && error.length > 0 ? error : "an unknown client failure";
|
|
602
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { TaskMemorySnapshot } from "./task-bank.js";
|
|
2
|
+
import type { TaskMemoryPolicyDecision, TaskMemoryPolicyReason } from "./task-memory-policy.js";
|
|
3
|
+
import type {
|
|
4
|
+
TaskMemoryTelemetryDecision,
|
|
5
|
+
TaskMemoryTelemetryTier,
|
|
6
|
+
TaskMemoryTelemetryTrigger,
|
|
7
|
+
} from "./task-memory-telemetry.js";
|
|
8
|
+
|
|
9
|
+
export type TaskMemoryTier = "rules" | "llm";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* One completed memory step, projected for operator surfaces. It carries counts
|
|
13
|
+
* and outcomes only, matching the telemetry sink's content-free discipline, so
|
|
14
|
+
* it can be rendered without leaking bank or trajectory text into the TUI.
|
|
15
|
+
*/
|
|
16
|
+
export interface TaskMemoryActivityEvent {
|
|
17
|
+
at: string;
|
|
18
|
+
triggerReasons: ReadonlyArray<TaskMemoryTelemetryTrigger>;
|
|
19
|
+
tier: TaskMemoryTelemetryTier;
|
|
20
|
+
decision: TaskMemoryTelemetryDecision;
|
|
21
|
+
reason: TaskMemoryPolicyReason;
|
|
22
|
+
citedEntries: number;
|
|
23
|
+
bankWrites: number;
|
|
24
|
+
latencyMs: number;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Read-only projection shared by operator surfaces. */
|
|
28
|
+
export interface TaskMemoryOperatorStatus {
|
|
29
|
+
enabled: boolean;
|
|
30
|
+
tier: TaskMemoryTier;
|
|
31
|
+
size: number;
|
|
32
|
+
lastDecision: TaskMemoryPolicyDecision | null;
|
|
33
|
+
bank: TaskMemorySnapshot;
|
|
34
|
+
/** Newest-first bounded memory-step history; empty until a step completes. */
|
|
35
|
+
activity: ReadonlyArray<TaskMemoryActivityEvent>;
|
|
36
|
+
/** True while a detached background memory step is still running. */
|
|
37
|
+
stepInFlight: boolean;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Compact operator wording for one memory step, used by the TUI surfaces.
|
|
42
|
+
*
|
|
43
|
+
* The reason rides alongside the decision because `silent` on its own is the
|
|
44
|
+
* line an operator cannot act on: it reads the same whether the model declined
|
|
45
|
+
* to write, the route refused the connection, or the answer was unreadable.
|
|
46
|
+
* `intervened` is omitted, since `injected` already says it.
|
|
47
|
+
*/
|
|
48
|
+
export function describeTaskMemoryActivity(event: TaskMemoryActivityEvent): string {
|
|
49
|
+
const parts: string[] = [event.decision];
|
|
50
|
+
if (event.reason !== "intervened") parts.push(event.reason);
|
|
51
|
+
if (event.bankWrites > 0) parts.push(`${event.bankWrites}w`);
|
|
52
|
+
if (event.citedEntries > 0) parts.push(`${event.citedEntries} cited`);
|
|
53
|
+
return `${event.triggerReasons.join("+")} ${parts.join(" ")}`;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function taskMemoryBankSize(snapshot: TaskMemorySnapshot): number {
|
|
57
|
+
return (snapshot.status === null ? 0 : 1) + snapshot.knowledge.length + snapshot.procedural.length;
|
|
58
|
+
}
|