@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,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abbreviate a wire model id for chips and dashboards without amputating a
|
|
3
|
+
* version suffix. Whole dash-separated parts are kept while the joined result
|
|
4
|
+
* stays within 18 characters, so `claude-sonnet-5` and `claude-opus-4-8`
|
|
5
|
+
* survive intact and `qwen3-coder-30b-a3b-instruct` collapses to
|
|
6
|
+
* `qwen3-coder-30b`. A single part longer than 18 characters is hard-clipped.
|
|
7
|
+
*/
|
|
8
|
+
export function abbreviateModelId(modelId: string | null | undefined): string {
|
|
9
|
+
const base = (modelId ?? "").trim().split("/").filter(Boolean).pop() ?? "";
|
|
10
|
+
if (base.length === 0) return "model";
|
|
11
|
+
const parts = base.split("-").filter((part) => part.length > 0);
|
|
12
|
+
if (parts.length <= 1) return base.length > 18 ? base.slice(0, 18) : base;
|
|
13
|
+
const kept: string[] = [];
|
|
14
|
+
for (const part of parts) {
|
|
15
|
+
const next = [...kept, part].join("-");
|
|
16
|
+
if (kept.length > 0 && next.length > 18) break;
|
|
17
|
+
kept.push(part);
|
|
18
|
+
}
|
|
19
|
+
const joined = kept.join("-");
|
|
20
|
+
return joined.length > 18 ? joined.slice(0, 18) : joined;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface TargetLabelOptions {
|
|
24
|
+
/** Separator between the target id and the model. The narrow rail omits the spaces. */
|
|
25
|
+
separator?: string;
|
|
26
|
+
/** Off for surfaces with room for the whole wire id. */
|
|
27
|
+
abbreviate?: boolean;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* The chat target as one label, with one spelling for the state where there
|
|
32
|
+
* isn't one.
|
|
33
|
+
*
|
|
34
|
+
* Five surfaces answered the same question five different ways: the banner read
|
|
35
|
+
* `not configured/not configured`, the editor rail `no model`, the footer
|
|
36
|
+
* `none · none`, the settings overlay `(unset)`, and the providers overlay
|
|
37
|
+
* `(no model)`. A user comparing them is checking whether Clio knows what it is
|
|
38
|
+
* talking to, and four spellings read as four states.
|
|
39
|
+
*
|
|
40
|
+
* A target with no model and a model with no target are distinct from having
|
|
41
|
+
* neither, so each says which half is missing rather than collapsing to the
|
|
42
|
+
* same phrase. The settings overlay keeps `(unset)`, which labels an empty
|
|
43
|
+
* editable field rather than reporting status.
|
|
44
|
+
*/
|
|
45
|
+
export function formatTargetLabel(
|
|
46
|
+
targetId: string | null | undefined,
|
|
47
|
+
modelId: string | null | undefined,
|
|
48
|
+
options: TargetLabelOptions = {},
|
|
49
|
+
): string {
|
|
50
|
+
const target = (targetId ?? "").trim();
|
|
51
|
+
const model = (modelId ?? "").trim();
|
|
52
|
+
if (target.length === 0 && model.length === 0) return "not configured";
|
|
53
|
+
const shown = options.abbreviate === false ? model : abbreviateModelId(model);
|
|
54
|
+
if (target.length === 0) return `no target · ${shown}`;
|
|
55
|
+
if (model.length === 0) return `${target} · no model`;
|
|
56
|
+
return `${target}${options.separator ?? " · "}${shown}`;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Compact duration used everywhere the TUI shows elapsed time (footer chips,
|
|
61
|
+
* dispatch cards, task island rows): sub-second in ms, sub-minute in seconds
|
|
62
|
+
* with one decimal under 10s, then `XmYs`.
|
|
63
|
+
*/
|
|
64
|
+
export function formatCompactMs(value: number): string {
|
|
65
|
+
const ms = Math.max(0, Math.round(value));
|
|
66
|
+
if (ms < 1000) return `${ms}ms`;
|
|
67
|
+
const seconds = ms / 1000;
|
|
68
|
+
return seconds < 60
|
|
69
|
+
? `${seconds.toFixed(seconds >= 10 ? 0 : 1)}s`
|
|
70
|
+
: `${Math.floor(seconds / 60)}m${Math.round(seconds % 60)}s`;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Context-window fill percentage with one shared unknown grammar. A window
|
|
75
|
+
* that has not been measured yet renders `?%` everywhere (compact footer,
|
|
76
|
+
* expanded quadrant, segmented bar, /context-view overlay): a placeholder for
|
|
77
|
+
* a number that has not arrived, never a value.
|
|
78
|
+
*/
|
|
79
|
+
export function formatContextPercent(percent: number | null | undefined): string {
|
|
80
|
+
return typeof percent === "number" && Number.isFinite(percent) ? `${percent.toFixed(1)}%` : "?%";
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export function collapseHomePath(path: string): string {
|
|
84
|
+
const home = process.env.HOME;
|
|
85
|
+
if (!home || home.length === 0) return path;
|
|
86
|
+
if (path === home) return "~";
|
|
87
|
+
return path.startsWith(`${home}/`) ? `~/${path.slice(home.length + 1)}` : path;
|
|
88
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { truncateToWidth, visibleWidth } from "../../engine/tui.js";
|
|
2
|
+
import { GLYPH } from "./glyphs.js";
|
|
3
|
+
import type { ClioTheme, ClioToken } from "./tokens.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Pad or clip a styled string to exactly `width` visible columns.
|
|
7
|
+
*
|
|
8
|
+
* `truncateToWidth(…, pad = true)` already returns a string of exactly `width`
|
|
9
|
+
* columns on both its paths: it appends the shortfall on the fits path and pads
|
|
10
|
+
* through its own finalizer on the cut path. Measuring the result again to
|
|
11
|
+
* compute a repeat count that is always zero cost ~24 µs per line whenever the
|
|
12
|
+
* string missed pi-tui's width cache, which is every footer line that carries a
|
|
13
|
+
* spinner frame or an elapsed time.
|
|
14
|
+
*/
|
|
15
|
+
export function padAnsi(text: string, width: number, ellipsis = ""): string {
|
|
16
|
+
return truncateToWidth(text, Math.max(0, width), ellipsis, true);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Join `units` onto `prefix` with the ` · ` separator, fitting the result to
|
|
21
|
+
* `maxWidth` without cutting a unit mid-glyph. A unit that would overflow is
|
|
22
|
+
* dropped whole, along with every later unit, and the line closes with one
|
|
23
|
+
* space plus a dim ellipsis. Two columns are reserved for that marker while
|
|
24
|
+
* placing every unit except the last. When even the first unit cannot fit,
|
|
25
|
+
* `prefix + first unit` is hard-truncated with an ellipsis so a one-unit line
|
|
26
|
+
* still marks its cut. Width accounting is ANSI-aware via visibleWidth.
|
|
27
|
+
*/
|
|
28
|
+
export function fitUnits(theme: ClioTheme, prefix: string, units: readonly string[], maxWidth: number): string {
|
|
29
|
+
const sep = " · ";
|
|
30
|
+
let line = prefix;
|
|
31
|
+
for (let index = 0; index < units.length; index += 1) {
|
|
32
|
+
const candidate = index === 0 ? `${line}${units[index]}` : `${line}${sep}${units[index]}`;
|
|
33
|
+
// Reserve two columns for the ` …` marker unless this is the last unit.
|
|
34
|
+
const reserve = index < units.length - 1 ? 2 : 0;
|
|
35
|
+
if (visibleWidth(candidate) + reserve > maxWidth) {
|
|
36
|
+
if (index === 0) return truncateToWidth(candidate, Math.max(0, maxWidth), "…", false);
|
|
37
|
+
return `${line} ${theme.fg("dim", "…")}`;
|
|
38
|
+
}
|
|
39
|
+
line = candidate;
|
|
40
|
+
}
|
|
41
|
+
return line;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface RuleOptions {
|
|
45
|
+
left?: string;
|
|
46
|
+
leftToken?: ClioToken;
|
|
47
|
+
right?: string;
|
|
48
|
+
fillToken?: ClioToken;
|
|
49
|
+
rightToken?: ClioToken;
|
|
50
|
+
rightRaw?: boolean;
|
|
51
|
+
rightTail?: string;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function rule(theme: ClioTheme, width: number, options: RuleOptions = {}): string {
|
|
55
|
+
const safeWidth = Math.max(0, width);
|
|
56
|
+
if (safeWidth === 0) return "";
|
|
57
|
+
// A left label starts flush at column 0, with a single trailing space before
|
|
58
|
+
// the fill. There is no leading space, so labeled rules align with the frame.
|
|
59
|
+
const left = options.left ? `${theme.style(options.leftToken ?? "accent", options.left, { bold: true })} ` : "";
|
|
60
|
+
const rightBody = options.rightRaw ? options.right : theme.fg(options.rightToken ?? "muted", options.right ?? "");
|
|
61
|
+
const right = options.right ? ` ${rightBody} ${options.rightTail ?? ""}` : "";
|
|
62
|
+
const labelsWidth = visibleWidth(left) + visibleWidth(right);
|
|
63
|
+
if (labelsWidth >= safeWidth) return truncateToWidth(`${left}${right}`.trim(), safeWidth, "", true);
|
|
64
|
+
const fill = theme.style(options.fillToken ?? "frame", "─".repeat(safeWidth - labelsWidth), {
|
|
65
|
+
bold: options.fillToken === "frameStrong",
|
|
66
|
+
});
|
|
67
|
+
return `${left}${fill}${right}`;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface FrameOptions {
|
|
71
|
+
/**
|
|
72
|
+
* Dim right-hand metadata placed just before the closing corner with one
|
|
73
|
+
* space on each side. The dispatch cards pass a run's elapsed time here.
|
|
74
|
+
*/
|
|
75
|
+
rightMeta?: string;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* The one framed-island recipe for every in-flow block: the welcome dashboard,
|
|
80
|
+
* the task island, the steering queue, and the dispatch cards.
|
|
81
|
+
*
|
|
82
|
+
* ```
|
|
83
|
+
* ┌─ Title ──────────────────── meta ─┐
|
|
84
|
+
* │ body line │
|
|
85
|
+
* └───────────────────────────────────┘
|
|
86
|
+
* ```
|
|
87
|
+
*
|
|
88
|
+
* Corners and fills carry the `frame` token. A plain `title` is drawn bold in
|
|
89
|
+
* the `title` token with exactly one space on each side. A title that already
|
|
90
|
+
* carries its own styling, such as the welcome header's composite of a brand
|
|
91
|
+
* glyph and a dim version, is placed verbatim so its escape sequences are never
|
|
92
|
+
* re-wrapped. The optional `rightMeta` renders dim before the closing corner.
|
|
93
|
+
*/
|
|
94
|
+
export function frame(
|
|
95
|
+
theme: ClioTheme,
|
|
96
|
+
title: string,
|
|
97
|
+
lines: readonly string[],
|
|
98
|
+
width: number,
|
|
99
|
+
opts: FrameOptions = {},
|
|
100
|
+
): string[] {
|
|
101
|
+
const safeWidth = Math.max(4, width);
|
|
102
|
+
const contentWidth = Math.max(0, safeWidth - 4);
|
|
103
|
+
const frameFg = (text: string): string => theme.fg("frame", text);
|
|
104
|
+
|
|
105
|
+
const hasTitle = title.length > 0;
|
|
106
|
+
// A title that already carries escape sequences is a pre-styled composite
|
|
107
|
+
// (the welcome header's brand glyph and dim version); place it verbatim. A
|
|
108
|
+
// plain title is styled here as bold in the `title` token.
|
|
109
|
+
const styledTitle = !hasTitle ? "" : title.includes("\u001b") ? title : theme.style("title", title, { bold: true });
|
|
110
|
+
const titleWidth = visibleWidth(title);
|
|
111
|
+
|
|
112
|
+
const meta = opts.rightMeta ?? "";
|
|
113
|
+
const hasMeta = meta.length > 0;
|
|
114
|
+
const metaWidth = hasMeta ? visibleWidth(meta) : 0;
|
|
115
|
+
|
|
116
|
+
// `┌─`, plus ` Title ` when titled, on the left; `┐`, or ` meta ─┐` when a
|
|
117
|
+
// right meta is present, on the right. The fill is whatever keeps the total
|
|
118
|
+
// width exact.
|
|
119
|
+
const leftVisible = 2 + (hasTitle ? titleWidth + 2 : 0);
|
|
120
|
+
const rightVisible = hasMeta ? metaWidth + 4 : 1;
|
|
121
|
+
const fillWidth = Math.max(0, safeWidth - leftVisible - rightVisible);
|
|
122
|
+
|
|
123
|
+
const leftStr = hasTitle ? `${frameFg("┌─")} ${styledTitle} ` : frameFg("┌─");
|
|
124
|
+
const rightStr = hasMeta ? ` ${theme.fg("dim", meta)} ${frameFg("─┐")}` : frameFg("┐");
|
|
125
|
+
const top = `${leftStr}${frameFg("─".repeat(fillWidth))}${rightStr}`;
|
|
126
|
+
|
|
127
|
+
const body = lines.map((line) => `${frameFg("│")} ${padAnsi(line, contentWidth)} ${frameFg("│")}`);
|
|
128
|
+
const bottom = `${frameFg("└")}${frameFg("─".repeat(safeWidth - 2))}${frameFg("┘")}`;
|
|
129
|
+
return [top, ...body, bottom];
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* A full-width run of the inner-divider glyph in the `frame` token, drawn
|
|
134
|
+
* between rows inside an island. Callers pass the island's inner content width.
|
|
135
|
+
*/
|
|
136
|
+
export function innerDivider(theme: ClioTheme, width: number): string {
|
|
137
|
+
return theme.fg("frame", GLYPH.innerDivider.repeat(Math.max(0, width)));
|
|
138
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { GLYPH } from "./glyphs.js";
|
|
2
|
+
import type { ClioTheme, ClioToken } from "./tokens.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Presentational primitives for the welcome/footer dashboards. These keep raw
|
|
6
|
+
* ANSI inside the theme module: every colored separator, chip, and section tag
|
|
7
|
+
* is produced here so interactive render code only ever composes already-styled
|
|
8
|
+
* strings. Helpers are pure and width-agnostic; callers fit/truncate with the
|
|
9
|
+
* engine helpers after composition.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
function present(parts: ReadonlyArray<string | null | undefined>): string[] {
|
|
13
|
+
return parts.filter((part): part is string => typeof part === "string" && part.length > 0);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* The Clio logotype: the `>C_` wordmark composed from the tokens the system
|
|
18
|
+
* already assigns to its three characters. `>` and `_` are terminal
|
|
19
|
+
* scaffolding and render dim; `C` is Clio and renders bold accent. GLYPH.brand
|
|
20
|
+
* keeps the plain string for width math and ANSI-stripping tests, and the
|
|
21
|
+
* welcome header and dashboard header stay the only surfaces that paint it.
|
|
22
|
+
*/
|
|
23
|
+
export function brandMark(theme: ClioTheme): string {
|
|
24
|
+
const prompt = GLYPH.brand.slice(0, 1);
|
|
25
|
+
const initial = GLYPH.brand.slice(1, 2);
|
|
26
|
+
const cursor = GLYPH.brand.slice(2, 3);
|
|
27
|
+
return `${theme.fg("dim", prompt)}${theme.style("accent", initial, { bold: true })}${theme.fg("dim", cursor)}`;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** Dim middot used to separate chips inside a single section. */
|
|
31
|
+
export function dotSep(theme: ClioTheme): string {
|
|
32
|
+
return theme.fg("dim", " · ");
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Frame-colored vertical bar used to separate sections on one row. */
|
|
36
|
+
export function barSep(theme: ClioTheme): string {
|
|
37
|
+
return theme.fg("frame", " │ ");
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* A bold, color-tagged section label (PERCEIVE / target / …). Pad to align a
|
|
42
|
+
* column of tags; padding inherits the tag color but stays invisible.
|
|
43
|
+
*/
|
|
44
|
+
export function sectionTag(theme: ClioTheme, token: ClioToken, label: string, pad = 0): string {
|
|
45
|
+
const text = pad > 0 ? label.padEnd(pad) : label;
|
|
46
|
+
return theme.style(token, text, { bold: true });
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* A screen or overlay title (section 2.4 level 2): bold in the `title` token.
|
|
51
|
+
*
|
|
52
|
+
* The settings lane header, the settings breadcrumb, and the dispatch card
|
|
53
|
+
* title each open-coded `theme.style("title", text, { bold: true })`, so the
|
|
54
|
+
* one rule for what a title looks like lived in as many places as there were
|
|
55
|
+
* titles. `rules.ts:frame` applies the same treatment to an unstyled title it
|
|
56
|
+
* is handed, which is why an island does not call this.
|
|
57
|
+
*/
|
|
58
|
+
export function screenTitle(theme: ClioTheme, label: string): string {
|
|
59
|
+
return theme.style("title", label, { bold: true });
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* A list-group header (section 2.4 level 4): `── running (1)` in dim.
|
|
64
|
+
*
|
|
65
|
+
* The leading double dash is a structural rule literal, not a status glyph.
|
|
66
|
+
* Fleet Runs kept a private copy and the generic list overlay inlined the same
|
|
67
|
+
* string, so a change to the group vocabulary had to be made twice and was not.
|
|
68
|
+
*/
|
|
69
|
+
export function listGroupHeader(theme: ClioTheme, label: string): string {
|
|
70
|
+
return theme.fg("dim", `── ${label}`);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** A single colored chip. */
|
|
74
|
+
export function chip(theme: ClioTheme, token: ClioToken, text: string): string {
|
|
75
|
+
return theme.fg(token, text);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** A key=value chip: a dim key glued to a colored value (e.g. `git main`). */
|
|
79
|
+
/** Subtle keybinding affordance, e.g. `⌃U dashboard`. */
|
|
80
|
+
/** Join chips within a section with a dim middot, dropping empties. */
|
|
81
|
+
export function joinChips(theme: ClioTheme, parts: ReadonlyArray<string | null | undefined>): string {
|
|
82
|
+
return present(parts).join(dotSep(theme));
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/** Join sections on one row with a frame bar, dropping empties. */
|
|
86
|
+
export function joinSections(theme: ClioTheme, parts: ReadonlyArray<string | null | undefined>): string {
|
|
87
|
+
return present(parts).join(barSep(theme));
|
|
88
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
export type ClioToken =
|
|
2
|
+
| "accent"
|
|
3
|
+
| "accentDeep"
|
|
4
|
+
| "action"
|
|
5
|
+
| "success"
|
|
6
|
+
| "warning"
|
|
7
|
+
| "error"
|
|
8
|
+
| "info"
|
|
9
|
+
| "reason"
|
|
10
|
+
| "dim"
|
|
11
|
+
| "muted"
|
|
12
|
+
| "title"
|
|
13
|
+
| "frame"
|
|
14
|
+
| "frameStrong";
|
|
15
|
+
|
|
16
|
+
interface TokenColor {
|
|
17
|
+
rgb: readonly [number, number, number];
|
|
18
|
+
xterm: number;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const TOKENS: Record<ClioToken, TokenColor> = {
|
|
22
|
+
accent: { rgb: [70, 229, 208], xterm: 80 },
|
|
23
|
+
accentDeep: { rgb: [31, 183, 166], xterm: 44 },
|
|
24
|
+
// Second brand color: neon orange. The token name teaches the rule: orange
|
|
25
|
+
// means Clio is acting. It fires only for Clio's signature actions
|
|
26
|
+
// (dispatching, queued and running fleet work, steering) and for the border
|
|
27
|
+
// of a prompt that has taken the keyboard and is waiting on a decision, never
|
|
28
|
+
// as decoration, and never a metric, at most one orange element per region of
|
|
29
|
+
// the screen. warning stays the soft amber for actual warnings.
|
|
30
|
+
action: { rgb: [255, 126, 41], xterm: 208 },
|
|
31
|
+
success: { rgb: [87, 227, 137], xterm: 114 },
|
|
32
|
+
warning: { rgb: [255, 180, 84], xterm: 221 },
|
|
33
|
+
error: { rgb: [255, 92, 102], xterm: 203 },
|
|
34
|
+
info: { rgb: [91, 168, 255], xterm: 75 },
|
|
35
|
+
reason: { rgb: [157, 140, 255], xterm: 141 },
|
|
36
|
+
dim: { rgb: [106, 122, 133], xterm: 59 },
|
|
37
|
+
muted: { rgb: [138, 153, 164], xterm: 102 },
|
|
38
|
+
title: { rgb: [70, 229, 208], xterm: 80 },
|
|
39
|
+
frame: { rgb: [47, 93, 90], xterm: 23 },
|
|
40
|
+
frameStrong: { rgb: [42, 171, 158], xterm: 37 },
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export const SGR_RESET = "\u001b[0m";
|
|
44
|
+
export const SGR_DIM = "\u001b[2m";
|
|
45
|
+
|
|
46
|
+
export interface PaintMods {
|
|
47
|
+
fg?: ClioToken;
|
|
48
|
+
bg?: ClioToken;
|
|
49
|
+
bold?: boolean;
|
|
50
|
+
italic?: boolean;
|
|
51
|
+
underline?: boolean;
|
|
52
|
+
dim?: boolean;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface ClioTheme {
|
|
56
|
+
readonly truecolor: boolean;
|
|
57
|
+
paint(text: string, mods: PaintMods): string;
|
|
58
|
+
fg(token: ClioToken, text: string): string;
|
|
59
|
+
bg(token: ClioToken, text: string): string;
|
|
60
|
+
style(token: ClioToken, text: string, mods?: Omit<PaintMods, "fg">): string;
|
|
61
|
+
fgSequence(token: ClioToken): string;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The NO_COLOR convention: set and non-empty means emit no color, whatever the
|
|
66
|
+
* value is. Clio was ignoring it entirely. A session launched with NO_COLOR=1
|
|
67
|
+
* still wrote 961 non-reset SGR sequences in its first three seconds, most of
|
|
68
|
+
* them 24-bit foregrounds, which is exactly what the variable exists to stop.
|
|
69
|
+
*
|
|
70
|
+
* Only color is dropped. Bold, dim, italic, and underline carry structure
|
|
71
|
+
* rather than color and are what a monochrome terminal has left to read the
|
|
72
|
+
* interface with, so they stay.
|
|
73
|
+
*/
|
|
74
|
+
function colorDisabled(env: NodeJS.ProcessEnv = process.env): boolean {
|
|
75
|
+
const raw = env.NO_COLOR;
|
|
76
|
+
return typeof raw === "string" && raw.length > 0;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function detectTruecolor(env: NodeJS.ProcessEnv = process.env): boolean {
|
|
80
|
+
const colorTerm = (env.COLORTERM ?? "").toLowerCase();
|
|
81
|
+
if (colorTerm.includes("truecolor") || colorTerm.includes("24bit")) return true;
|
|
82
|
+
const term = (env.TERM ?? "").toLowerCase();
|
|
83
|
+
return term.includes("truecolor") || term.includes("24bit");
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function fgCode(color: TokenColor, truecolor: boolean): string {
|
|
87
|
+
return truecolor ? `38;2;${color.rgb[0]};${color.rgb[1]};${color.rgb[2]}` : `38;5;${color.xterm}`;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function bgCode(color: TokenColor, truecolor: boolean): string {
|
|
91
|
+
return truecolor ? `48;2;${color.rgb[0]};${color.rgb[1]};${color.rgb[2]}` : `48;5;${color.xterm}`;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export function fgSequence(token: ClioToken, truecolor: boolean = detectTruecolor()): string {
|
|
95
|
+
if (colorDisabled()) return "";
|
|
96
|
+
return `\u001b[${fgCode(TOKENS[token], truecolor)}m`;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export function createClioTheme(options: { truecolor?: boolean; color?: boolean } = {}): ClioTheme {
|
|
100
|
+
const truecolor = options.truecolor ?? detectTruecolor();
|
|
101
|
+
const color = options.color ?? !colorDisabled();
|
|
102
|
+
const paint = (text: string, mods: PaintMods): string => {
|
|
103
|
+
const codes: string[] = [];
|
|
104
|
+
if (mods.bold) codes.push("1");
|
|
105
|
+
if (mods.dim) codes.push("2");
|
|
106
|
+
if (mods.italic) codes.push("3");
|
|
107
|
+
if (mods.underline) codes.push("4");
|
|
108
|
+
if (color && mods.fg) codes.push(fgCode(TOKENS[mods.fg], truecolor));
|
|
109
|
+
if (color && mods.bg) codes.push(bgCode(TOKENS[mods.bg], truecolor));
|
|
110
|
+
if (codes.length === 0) return text;
|
|
111
|
+
return `\u001b[${codes.join(";")}m${text}${SGR_RESET}`;
|
|
112
|
+
};
|
|
113
|
+
return {
|
|
114
|
+
truecolor,
|
|
115
|
+
paint,
|
|
116
|
+
fg: (token, text) => paint(text, { fg: token }),
|
|
117
|
+
bg: (token, text) => paint(text, { bg: token }),
|
|
118
|
+
style: (token, text, mods = {}) => paint(text, { ...mods, fg: token }),
|
|
119
|
+
fgSequence: (token) => (color ? `\u001b[${fgCode(TOKENS[token], truecolor)}m` : ""),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { escapeRegExp } from "../tools/ignore-policy.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Whether a runtime's models are prone to narrating tool calls as prose instead
|
|
5
|
+
* of emitting them.
|
|
6
|
+
*
|
|
7
|
+
* Keyed on the local-native tier rather than a list of server names. The
|
|
8
|
+
* behavior belongs to open-weight models served locally, not to the two servers
|
|
9
|
+
* that happened to be tested first: the same model narrating through llama.cpp
|
|
10
|
+
* narrates through Ollama, vLLM, and SGLang, and a name list left those runs
|
|
11
|
+
* with no cutoff at all. Hosted runtimes are unaffected either way.
|
|
12
|
+
*/
|
|
13
|
+
export function runtimeNarratesToolCalls(runtimeTier: string | undefined): boolean {
|
|
14
|
+
return runtimeTier === "local-native";
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface ToolProseLoopInput {
|
|
18
|
+
text: string;
|
|
19
|
+
activeToolNames: ReadonlyArray<string>;
|
|
20
|
+
hasStructuredToolCall?: boolean;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export type ToolProseLoopAssessment =
|
|
24
|
+
| { kind: "ok" }
|
|
25
|
+
| {
|
|
26
|
+
kind: "loop";
|
|
27
|
+
reason: string;
|
|
28
|
+
matchCount: number;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const MIN_TOOL_PROSE_CHARS = 1200;
|
|
32
|
+
const TOOL_PROSE_REPEAT_THRESHOLD = 4;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Characters of new text between assessments.
|
|
36
|
+
*
|
|
37
|
+
* The assessment lower-cases and collapses the whole accumulated answer, then
|
|
38
|
+
* runs three regexes per active tool plus a generic one over it. Running that
|
|
39
|
+
* on every streamed delta makes the cost quadratic in answer length: measured
|
|
40
|
+
* on a 6942-character answer arriving as 1157 deltas, it spent 178ms of
|
|
41
|
+
* synchronous time in the streaming hot path, and the last hundred deltas cost
|
|
42
|
+
* roughly twice what the first hundred did. That time is taken from the same
|
|
43
|
+
* event loop the render timer waits on.
|
|
44
|
+
*
|
|
45
|
+
* A narration loop needs four repetitions of a whole sentence to trip the
|
|
46
|
+
* threshold, and the detector does not even look below 1200 characters, so
|
|
47
|
+
* sampling every half-kilobyte cannot miss one. It bounds the work to a handful
|
|
48
|
+
* of scans per answer instead of one per token.
|
|
49
|
+
*/
|
|
50
|
+
const TOOL_PROSE_ASSESS_STRIDE_CHARS = 512;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* True when enough new text has accumulated to be worth re-scanning.
|
|
54
|
+
* `lastAssessedChars` is 0 before the first assessment of a run.
|
|
55
|
+
*/
|
|
56
|
+
export function shouldAssessToolProse(textLength: number, lastAssessedChars: number): boolean {
|
|
57
|
+
if (textLength < MIN_TOOL_PROSE_CHARS) return false;
|
|
58
|
+
return textLength - lastAssessedChars >= TOOL_PROSE_ASSESS_STRIDE_CHARS;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function count(pattern: RegExp, text: string): number {
|
|
62
|
+
let matches = 0;
|
|
63
|
+
pattern.lastIndex = 0;
|
|
64
|
+
while (pattern.exec(text)) matches += 1;
|
|
65
|
+
return matches;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function toolPattern(toolName: string): string {
|
|
69
|
+
const escaped = escapeRegExp(toolName.trim().toLowerCase());
|
|
70
|
+
return escaped.replace(/[_-]+/g, "[ _-]+");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function normalizedToolNames(names: ReadonlyArray<string>): string[] {
|
|
74
|
+
const out: string[] = [];
|
|
75
|
+
const seen = new Set<string>();
|
|
76
|
+
for (const raw of names) {
|
|
77
|
+
const name = raw.trim().toLowerCase();
|
|
78
|
+
if (name.length === 0 || seen.has(name)) continue;
|
|
79
|
+
seen.add(name);
|
|
80
|
+
out.push(name);
|
|
81
|
+
}
|
|
82
|
+
return out;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function assessToolProseLoop(input: ToolProseLoopInput): ToolProseLoopAssessment {
|
|
86
|
+
if (input.hasStructuredToolCall === true) return { kind: "ok" };
|
|
87
|
+
if (input.text.length < MIN_TOOL_PROSE_CHARS) return { kind: "ok" };
|
|
88
|
+
const tools = normalizedToolNames(input.activeToolNames);
|
|
89
|
+
if (tools.length === 0) return { kind: "ok" };
|
|
90
|
+
|
|
91
|
+
const text = input.text.toLowerCase().replace(/\s+/g, " ");
|
|
92
|
+
let maxToolMatches = 0;
|
|
93
|
+
let matchedTool = "";
|
|
94
|
+
|
|
95
|
+
for (const toolName of tools) {
|
|
96
|
+
const name = toolPattern(toolName);
|
|
97
|
+
const patterns = [
|
|
98
|
+
new RegExp(`\\b(?:execute|call|make|use)\\s+the\\s+${name}\\s+tool\\s+call\\b`, "g"),
|
|
99
|
+
new RegExp(`\\b(?:execute|call|use)\\s+the\\s+${name}\\s+tool\\b`, "g"),
|
|
100
|
+
new RegExp(`\\b${name}\\s+tool\\s+call\\b`, "g"),
|
|
101
|
+
];
|
|
102
|
+
const matches = patterns.reduce((sum, pattern) => sum + count(pattern, text), 0);
|
|
103
|
+
if (matches > maxToolMatches) {
|
|
104
|
+
maxToolMatches = matches;
|
|
105
|
+
matchedTool = toolName;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const genericMatches = count(
|
|
110
|
+
/\b(?:i(?:'|’)ll|i will|i(?:'|’)m going to|i am going to)\s+(?:now\s+)?(?:execute|call|make|use)\s+the\s+[a-z0-9_-]+\s+(?:tool\s+)?call\b/g,
|
|
111
|
+
text,
|
|
112
|
+
);
|
|
113
|
+
const matchCount = Math.max(maxToolMatches, genericMatches);
|
|
114
|
+
if (matchCount < TOOL_PROSE_REPEAT_THRESHOLD) return { kind: "ok" };
|
|
115
|
+
|
|
116
|
+
const target = matchedTool.length > 0 ? ` for '${matchedTool}'` : "";
|
|
117
|
+
return {
|
|
118
|
+
kind: "loop",
|
|
119
|
+
matchCount,
|
|
120
|
+
reason: `local model repeated tool-call narration${target} ${matchCount} times without emitting a structured tool call`,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool-prose loop assessor, packaged as a turn_end hook registration.
|
|
3
|
+
*
|
|
4
|
+
* The decision of record for local models that narrate tool calls instead of
|
|
5
|
+
* making them: when the final assistant text of a turn repeats tool-call
|
|
6
|
+
* narration without a structured tool call, this registration emits an
|
|
7
|
+
* `inject_reminder` with `hard-block` severity. The chat-loop's generic
|
|
8
|
+
* effect application interrupts the turn (unless its streaming cutoff already
|
|
9
|
+
* aborted it mid-delta) and flushes the reminder into the next model request
|
|
10
|
+
* as recovery guidance.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type { MiddlewareEffect, MiddlewareHookInput, MiddlewareHookRegistration } from "../domains/middleware/index.js";
|
|
14
|
+
import { assessToolProseLoop, runtimeNarratesToolCalls } from "./tool-prose-loop.js";
|
|
15
|
+
|
|
16
|
+
export const TOOL_PROSE_REGISTRATION_ID = "assessor.tool-prose-loop";
|
|
17
|
+
|
|
18
|
+
export function createToolProseRegistration(): MiddlewareHookRegistration {
|
|
19
|
+
return {
|
|
20
|
+
id: TOOL_PROSE_REGISTRATION_ID,
|
|
21
|
+
description: "interrupt local model turns that narrate tool calls instead of emitting structured tool calls",
|
|
22
|
+
hooks: ["turn_end"],
|
|
23
|
+
evaluate(input: MiddlewareHookInput): ReadonlyArray<MiddlewareEffect> {
|
|
24
|
+
if (input.hook !== "turn_end") return [];
|
|
25
|
+
const runtimeTier = typeof input.metadata?.runtimeTier === "string" ? input.metadata.runtimeTier : undefined;
|
|
26
|
+
if (!runtimeNarratesToolCalls(runtimeTier)) return [];
|
|
27
|
+
const text = input.text ?? "";
|
|
28
|
+
if (text.length === 0) return [];
|
|
29
|
+
const activeToolNames =
|
|
30
|
+
typeof input.metadata?.activeToolNames === "string"
|
|
31
|
+
? input.metadata.activeToolNames.split(",").filter((name) => name.length > 0)
|
|
32
|
+
: [];
|
|
33
|
+
const assessment = assessToolProseLoop({
|
|
34
|
+
text,
|
|
35
|
+
activeToolNames,
|
|
36
|
+
hasStructuredToolCall: input.metadata?.hasStructuredToolCall === true,
|
|
37
|
+
});
|
|
38
|
+
if (assessment.kind !== "loop") return [];
|
|
39
|
+
return [
|
|
40
|
+
{
|
|
41
|
+
kind: "inject_reminder",
|
|
42
|
+
message: `[Clio Coder] aborted local model turn: ${assessment.reason}.`,
|
|
43
|
+
severity: "hard-block",
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|