@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,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renderer for a worker's transcript block: the attributed stream a `/run`,
|
|
3
|
+
* `/delegate`, or model-driven dispatch produces.
|
|
4
|
+
*
|
|
5
|
+
* One shape serves every runtime. A local Clio worker, a Claude subprocess, and
|
|
6
|
+
* a delegated ACP peer differ only in what the header can name about their
|
|
7
|
+
* route, so the body, the tool line, and the receipt footer are identical and
|
|
8
|
+
* an operator learns one grammar. The origin glyph is the only thing that says
|
|
9
|
+
* who asked, which is the same rule the board and the footer chip follow.
|
|
10
|
+
*
|
|
11
|
+
* ◇ coder · node-a/example-coder-model · run 2mkas6s
|
|
12
|
+
* │ Hello! I'm the coder worker.
|
|
13
|
+
* │ ⚙ read · artifact
|
|
14
|
+
* └ ✓ ok · 4.8k tok · 9.6s · contract pass
|
|
15
|
+
*
|
|
16
|
+
* Folded (the default for a run the model asked for) is one row shaped like a tool subline,
|
|
17
|
+
* so a fan-out of five scouts costs five rows until the operator opens one:
|
|
18
|
+
*
|
|
19
|
+
* ◆ scout · node-b/example-scout-model · run 3nc18jo ✓ · 41s (Ctrl+O)
|
|
20
|
+
*
|
|
21
|
+
* Pure: no I/O, no module-level mutable state beyond the shared theme handle.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { truncateToWidth, visibleWidth, wrapTextWithAnsi } from "../../engine/tui.js";
|
|
25
|
+
import { formatFooterTokens } from "../footer-panel.js";
|
|
26
|
+
import { type ClioToken, clioTheme, fitUnits, formatCompactMs, GLYPH } from "../theme/index.js";
|
|
27
|
+
import { type WorkerEntryState, type WorkerReceiptSummary, workerAskedByModel } from "../worker-stream.js";
|
|
28
|
+
|
|
29
|
+
const theme = clioTheme();
|
|
30
|
+
const dim = (text: string): string => theme.fg("dim", text);
|
|
31
|
+
|
|
32
|
+
const RAIL = "│ ";
|
|
33
|
+
const RAIL_WIDTH = 2;
|
|
34
|
+
const FOOTER = "└ ";
|
|
35
|
+
const ATTEMPT = "↻ ";
|
|
36
|
+
const SEPARATOR = " · ";
|
|
37
|
+
|
|
38
|
+
/** Rows of worker prose an expanded block shows before it defers to `/view`. */
|
|
39
|
+
const BODY_LINE_LIMIT = 80;
|
|
40
|
+
|
|
41
|
+
export interface WorkerEntryRenderOptions {
|
|
42
|
+
/** Collapsed to the header line plus outcome. Default for a run the model asked for. */
|
|
43
|
+
folded: boolean;
|
|
44
|
+
/** Key hint appended to a folded header, e.g. "Ctrl+O". Omitted when unknown. */
|
|
45
|
+
expandKey?: string | undefined;
|
|
46
|
+
/** Render the full body without the line cap; `/export` sets this. */
|
|
47
|
+
unbounded?: boolean;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function originGlyph(entry: WorkerEntryState): string {
|
|
51
|
+
return workerAskedByModel(entry) ? theme.fg("action", GLYPH.workerAgent) : theme.fg("accent", GLYPH.workerHuman);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The header's units after the glyph: who ran, where, and which run. A Clio or
|
|
56
|
+
* Claude worker names its target and model; an ACP peer runs behind someone
|
|
57
|
+
* else's process and can only name the protocol it was reached through, so it
|
|
58
|
+
* carries that on the agent instead of a route.
|
|
59
|
+
*/
|
|
60
|
+
function identityUnits(entry: WorkerEntryState): string[] {
|
|
61
|
+
const { kind, targetId, wireModelId } = entry.runtime;
|
|
62
|
+
const route =
|
|
63
|
+
targetId !== undefined && wireModelId !== undefined ? `${targetId}/${wireModelId}` : (targetId ?? wireModelId);
|
|
64
|
+
return [
|
|
65
|
+
theme.fg("muted", kind === "acp" ? `${entry.agentId} (acp)` : entry.agentId),
|
|
66
|
+
...(kind !== "acp" && route !== undefined ? [dim(route)] : []),
|
|
67
|
+
dim(`run ${entry.runId}`),
|
|
68
|
+
];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Whole header units, closing on a dim ellipsis rather than cutting a unit mid-word. */
|
|
72
|
+
function headerLine(entry: WorkerEntryState, width: number): string {
|
|
73
|
+
return fitUnits(theme, `${originGlyph(entry)} `, identityUnits(entry), width);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Outcome glyph, with the word on the footer. The folded row uses the glyph
|
|
78
|
+
* alone, as a tool subline does, so a list of cards reads like a list of calls.
|
|
79
|
+
* Abandoned names itself rather than falling through to its `stalled`
|
|
80
|
+
* outcome code, so it reads as a ledger-side finding instead of the ordinary
|
|
81
|
+
* heartbeat-timeout `stalled` a sealed receipt reports.
|
|
82
|
+
*/
|
|
83
|
+
function outcomeUnit(receipt: WorkerReceiptSummary, word: boolean): string {
|
|
84
|
+
if (receipt.outcome === "succeeded") return theme.fg("success", word ? `${GLYPH.ok} ok` : GLYPH.ok);
|
|
85
|
+
if (receipt.outcome === "canceled") return theme.fg("dim", `${GLYPH.cancelled} canceled`);
|
|
86
|
+
if (receipt.abandonedDetail !== undefined) return theme.fg("error", word ? `${GLYPH.error} abandoned` : GLYPH.error);
|
|
87
|
+
return theme.fg("error", `${GLYPH.error} ${receipt.outcomeCode ?? receipt.outcome}`);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** A block with no settled receipt yet: a spinner-free, honest "running". */
|
|
91
|
+
function pendingUnit(entry: WorkerEntryState): string {
|
|
92
|
+
return theme.fg(
|
|
93
|
+
"action",
|
|
94
|
+
entry.attempts.length > 1 ? `${GLYPH.running} attempt ${entry.attempts.length}` : `${GLYPH.running} running`,
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Whether a block should render as still going rather than settled: live,
|
|
100
|
+
* never yet received a receipt (`entry.receipt === undefined`), or replayed
|
|
101
|
+
* from a `runs.json` row with no `endedAt` (`stillRunning`) because its
|
|
102
|
+
* process is still executing in another instance of Clio.
|
|
103
|
+
*/
|
|
104
|
+
function isPending(entry: WorkerEntryState): boolean {
|
|
105
|
+
return entry.receipt === undefined || entry.receipt.stillRunning === true;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Receipt facts as footer units. A unit is dropped when unknown rather than
|
|
110
|
+
* rendered as zero: an ACP peer reports no tokens at all, so its footer names
|
|
111
|
+
* the tool calls it mediated instead of claiming it spent nothing.
|
|
112
|
+
*/
|
|
113
|
+
function footerUnits(receipt: WorkerReceiptSummary): string[] {
|
|
114
|
+
const units = [outcomeUnit(receipt, true)];
|
|
115
|
+
if (receipt.exitCode !== undefined && receipt.exitCode !== 0) {
|
|
116
|
+
units.push(theme.fg("error", `exit=${receipt.exitCode}`));
|
|
117
|
+
}
|
|
118
|
+
if (receipt.tokenCount !== undefined && receipt.tokenCount > 0) {
|
|
119
|
+
units.push(dim(`${formatFooterTokens(receipt.tokenCount)} tok`));
|
|
120
|
+
} else if (receipt.toolCalls !== undefined && receipt.toolCalls > 0) {
|
|
121
|
+
units.push(dim(`${receipt.toolCalls} tool call${receipt.toolCalls === 1 ? "" : "s"}`));
|
|
122
|
+
}
|
|
123
|
+
if (receipt.durationMs !== undefined) units.push(dim(formatCompactMs(receipt.durationMs)));
|
|
124
|
+
if (receipt.contract !== undefined) units.push(dim(`contract ${receipt.contract}`));
|
|
125
|
+
if (receipt.abandonedDetail !== undefined) units.push(theme.fg("warning", receipt.abandonedDetail));
|
|
126
|
+
else if (receipt.receiptUnavailable === true) units.push(theme.fg("warning", "receipt unavailable"));
|
|
127
|
+
return units;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/** Wrap one annotation onto the rail, prefixed on its first row and hanging under it after. */
|
|
131
|
+
function railLines(text: string, token: ClioToken, width: number): string[] {
|
|
132
|
+
const contentWidth = Math.max(1, width - RAIL_WIDTH);
|
|
133
|
+
return wrapTextWithAnsi(text, contentWidth).map((row) => `${dim(RAIL)}${theme.fg(token, row)}`);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/** A worker's terminal answer when it is one JSON object, as a structured result contract asks for. */
|
|
137
|
+
function structuredAnswer(text: string): Record<string, unknown> | null {
|
|
138
|
+
const trimmed = text.trim();
|
|
139
|
+
if (!trimmed.startsWith("{") || !trimmed.endsWith("}")) return null;
|
|
140
|
+
try {
|
|
141
|
+
const parsed: unknown = JSON.parse(trimmed);
|
|
142
|
+
return typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)
|
|
143
|
+
? (parsed as Record<string, unknown>)
|
|
144
|
+
: null;
|
|
145
|
+
} catch {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const isStringArray = (value: unknown): value is string[] =>
|
|
151
|
+
Array.isArray(value) && value.every((entry) => typeof entry === "string");
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* A mutation report as prose: the paths it changed, each validation with its
|
|
155
|
+
* verdict and evidence, then the summary and commit line. Null when the object
|
|
156
|
+
* is not that shape.
|
|
157
|
+
*/
|
|
158
|
+
function mutationReportLines(value: Record<string, unknown>): string[] | null {
|
|
159
|
+
if (!isStringArray(value.mutatedPaths) || !Array.isArray(value.validations)) return null;
|
|
160
|
+
const lines: string[] = [];
|
|
161
|
+
lines.push(value.mutatedPaths.length === 0 ? "changed nothing" : `changed ${value.mutatedPaths.join(", ")}`);
|
|
162
|
+
for (const validation of value.validations) {
|
|
163
|
+
if (typeof validation !== "object" || validation === null) continue;
|
|
164
|
+
const check = validation as Record<string, unknown>;
|
|
165
|
+
const name = typeof check.name === "string" ? check.name : "validation";
|
|
166
|
+
const glyph = check.passed === true ? GLYPH.ok : check.passed === false ? GLYPH.error : GLYPH.queued;
|
|
167
|
+
const evidence =
|
|
168
|
+
typeof check.evidence === "string" && check.evidence.trim().length > 0 ? `: ${check.evidence.trim()}` : "";
|
|
169
|
+
lines.push(`${glyph} ${name}${evidence}`);
|
|
170
|
+
}
|
|
171
|
+
if (typeof value.summary === "string" && value.summary.trim().length > 0) lines.push(value.summary.trim());
|
|
172
|
+
if (typeof value.commitMessage === "string" && value.commitMessage.trim().length > 0) {
|
|
173
|
+
lines.push(`commit: ${value.commitMessage.trim()}`);
|
|
174
|
+
}
|
|
175
|
+
return lines;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* The body's source lines. A structured answer (a result-contract JSON object)
|
|
180
|
+
* never reaches the rail raw: a mutation report reads as prose, and any other
|
|
181
|
+
* object is pretty-printed so its keys line up instead of wrapping mid-string.
|
|
182
|
+
* Truncated text is not one object and passes through as the prose it is.
|
|
183
|
+
*/
|
|
184
|
+
function bodySourceLines(entry: WorkerEntryState): string[] {
|
|
185
|
+
const structured = entry.droppedLines === 0 ? structuredAnswer(entry.text) : null;
|
|
186
|
+
if (structured === null) return entry.text.split("\n");
|
|
187
|
+
return mutationReportLines(structured) ?? JSON.stringify(structured, null, 2).split("\n");
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function bodyLines(entry: WorkerEntryState, width: number, unbounded: boolean): string[] {
|
|
191
|
+
// A worker that produced no prose (a pure tool run, a run that failed before
|
|
192
|
+
// its first token) gets no rail at all rather than one blank rail row.
|
|
193
|
+
if (entry.text.length === 0) return [];
|
|
194
|
+
const contentWidth = Math.max(1, width - RAIL_WIDTH);
|
|
195
|
+
const source = bodySourceLines(entry);
|
|
196
|
+
const capped = unbounded || source.length <= BODY_LINE_LIMIT ? source : source.slice(0, BODY_LINE_LIMIT);
|
|
197
|
+
const hiddenLines = entry.droppedLines + (source.length - capped.length);
|
|
198
|
+
const out: string[] = [];
|
|
199
|
+
for (const line of capped) {
|
|
200
|
+
for (const wrapped of wrapTextWithAnsi(line, contentWidth)) out.push(`${dim(RAIL)}${wrapped}`);
|
|
201
|
+
}
|
|
202
|
+
if (hiddenLines > 0) {
|
|
203
|
+
const tail = `${GLYPH.ellipsis} ${hiddenLines} more line${hiddenLines === 1 ? "" : "s"}, /view dispatch:${entry.runId}`;
|
|
204
|
+
out.push(`${dim(RAIL)}${dim(fitUnits(theme, "", [tail], contentWidth))}`);
|
|
205
|
+
}
|
|
206
|
+
return out;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/** Tool names only, coalesced onto one line. Arguments never cross into the transcript. */
|
|
210
|
+
function toolLine(entry: WorkerEntryState, width: number): string | null {
|
|
211
|
+
if (entry.tools.length === 0) return null;
|
|
212
|
+
const contentWidth = Math.max(1, width - RAIL_WIDTH);
|
|
213
|
+
return `${dim(RAIL)}${theme.fg("muted", fitUnits(theme, `${GLYPH.phaseTool} `, entry.tools, contentWidth))}`;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/** One rail line per failover, naming the attempt and the route it moved to. */
|
|
217
|
+
function attemptLines(entry: WorkerEntryState, width: number): string[] {
|
|
218
|
+
return entry.attempts.flatMap((attempt, index) =>
|
|
219
|
+
index === 0
|
|
220
|
+
? []
|
|
221
|
+
: railLines(`${ATTEMPT}failed over → attempt ${index + 1} on ${attempt.targetLabel}`, "warning", width),
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* The failure's first line, on the rail above the footer. The footer stays one
|
|
227
|
+
* line of facts; the reason is prose and wraps like prose, so a long message
|
|
228
|
+
* cannot make the receipt line heavier than the answer above it.
|
|
229
|
+
*/
|
|
230
|
+
function failureLines(entry: WorkerEntryState, width: number): string[] {
|
|
231
|
+
const message = entry.receipt?.failureMessage;
|
|
232
|
+
if (message === undefined) return [];
|
|
233
|
+
const first = (message.split("\n", 1)[0] ?? "").trim();
|
|
234
|
+
return first.length === 0 ? [] : railLines(`${GLYPH.error} ${first}`, "error", width);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/** The receipt line, whole units only; a unit that would not fit is dropped behind a dim ellipsis. */
|
|
238
|
+
function footerLine(entry: WorkerEntryState, width: number): string {
|
|
239
|
+
const units = isPending(entry) || entry.receipt === undefined ? [pendingUnit(entry)] : footerUnits(entry.receipt);
|
|
240
|
+
return fitUnits(theme, dim(FOOTER), units, width);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Folded row: everything the operator needs to decide whether to open it, on
|
|
245
|
+
* one line, shaped like a tool subline. Identity outranks elapsed: when the row
|
|
246
|
+
* is too narrow for both, the elapsed unit goes first, and the identity is then
|
|
247
|
+
* cut where the room ends rather than by whole units, because a partial route
|
|
248
|
+
* still tells two scouts apart and a bare agent id may not. The expand hint
|
|
249
|
+
* renders only when the caller resolved a key binding for it, so a rebound or
|
|
250
|
+
* unbound key never advertises a wrong chord.
|
|
251
|
+
*/
|
|
252
|
+
function foldedLine(entry: WorkerEntryState, width: number, expandKey: string | undefined): string {
|
|
253
|
+
const identity = `${originGlyph(entry)} ${identityUnits(entry).join(dim(SEPARATOR))}`;
|
|
254
|
+
const status =
|
|
255
|
+
isPending(entry) || entry.receipt === undefined ? pendingUnit(entry) : outcomeUnit(entry.receipt, false);
|
|
256
|
+
const elapsed =
|
|
257
|
+
entry.receipt?.durationMs === undefined ? "" : dim(`${SEPARATOR}${formatCompactMs(entry.receipt.durationMs)}`);
|
|
258
|
+
const hint = expandKey === undefined || expandKey.length === 0 ? "" : dim(` (${expandKey})`);
|
|
259
|
+
const full = ` ${status}${elapsed}${hint}`;
|
|
260
|
+
const tail = visibleWidth(identity) + visibleWidth(full) <= width ? full : ` ${status}${hint}`;
|
|
261
|
+
return `${truncateToWidth(identity, Math.max(1, width - visibleWidth(tail)), GLYPH.ellipsis, false)}${tail}`;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
export function renderWorkerEntryLines(
|
|
265
|
+
entry: WorkerEntryState,
|
|
266
|
+
width: number,
|
|
267
|
+
options: WorkerEntryRenderOptions,
|
|
268
|
+
): string[] {
|
|
269
|
+
const safeWidth = Math.max(1, Math.floor(width));
|
|
270
|
+
if (options.folded) return [foldedLine(entry, safeWidth, options.expandKey)];
|
|
271
|
+
const tools = toolLine(entry, safeWidth);
|
|
272
|
+
return [
|
|
273
|
+
headerLine(entry, safeWidth),
|
|
274
|
+
...bodyLines(entry, safeWidth, options.unbounded === true),
|
|
275
|
+
...attemptLines(entry, safeWidth),
|
|
276
|
+
...(tools === null ? [] : [tools]),
|
|
277
|
+
...failureLines(entry, safeWidth),
|
|
278
|
+
footerLine(entry, safeWidth),
|
|
279
|
+
];
|
|
280
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rebuild the footer's last-turn line from the newest turn on the active branch.
|
|
3
|
+
*
|
|
4
|
+
* The line is a live accumulator: it describes whatever turn this process last
|
|
5
|
+
* ran. current.jsonl is append-only, so after a `/tree` switch that turn can sit
|
|
6
|
+
* on a branch the reader just left, and the line kept describing it while the Σ
|
|
7
|
+
* total and `/cost` beside it had already been rescoped by the usage reseed. One
|
|
8
|
+
* footer, two branches, no way to tell which line belonged to which.
|
|
9
|
+
*
|
|
10
|
+
* The fold reads the same lineage the reseed does, through
|
|
11
|
+
* `filterEntriesToActivePath`, and reports only what the ledger recorded:
|
|
12
|
+
* provider usage, the persisted stop reason, the tool result rows the turn
|
|
13
|
+
* produced, and the wall time between the user message that opened the turn and
|
|
14
|
+
* the last row it wrote. Fields the ledger does not carry are left at their
|
|
15
|
+
* neutral value rather than reconstructed: the watchdog peak is zero, and
|
|
16
|
+
* reasoning tokens appear only when a provider reported them, never estimated
|
|
17
|
+
* back off replayed thinking text.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { rawDurationMs } from "../core/timers.js";
|
|
21
|
+
import { extractReasoningTokens } from "../domains/session/context-accounting.js";
|
|
22
|
+
import type { MessageEntry, SessionEntry, SessionUsageDefaults } from "../domains/session/index.js";
|
|
23
|
+
import { filterEntriesToActivePath } from "../domains/session/tree/active-path.js";
|
|
24
|
+
import type { TurnStopReason, TurnSummary } from "./status/index.js";
|
|
25
|
+
|
|
26
|
+
function payloadRecord(value: unknown): Record<string, unknown> | null {
|
|
27
|
+
return value && typeof value === "object" && !Array.isArray(value) ? (value as Record<string, unknown>) : null;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function positiveNumber(value: unknown): number {
|
|
31
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : 0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function nonEmptyString(source: Record<string, unknown>, ...keys: string[]): string | null {
|
|
35
|
+
for (const key of keys) {
|
|
36
|
+
const value = source[key];
|
|
37
|
+
if (typeof value === "string" && value.trim().length > 0) return value;
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function stopReasonOf(value: unknown): TurnStopReason | null {
|
|
43
|
+
switch (value) {
|
|
44
|
+
case "stop":
|
|
45
|
+
case "length":
|
|
46
|
+
case "toolUse":
|
|
47
|
+
case "error":
|
|
48
|
+
case "aborted":
|
|
49
|
+
case "cancelled":
|
|
50
|
+
return value;
|
|
51
|
+
default:
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function millisBetween(startIso: string, endIso: string): number {
|
|
57
|
+
const start = Date.parse(startIso);
|
|
58
|
+
const end = Date.parse(endIso);
|
|
59
|
+
if (!Number.isFinite(start) || !Number.isFinite(end)) return 0;
|
|
60
|
+
return Math.max(0, rawDurationMs(start, end));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** The message rows of the newest turn on the branch, plus the target it ran under. */
|
|
64
|
+
interface BranchTurn {
|
|
65
|
+
rows: MessageEntry[];
|
|
66
|
+
startedAt: string;
|
|
67
|
+
targetId: string | null;
|
|
68
|
+
modelId: string | null;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Everything after the last user message on the active path. That is the same
|
|
73
|
+
* window the live summary folds: one submit, the assistant calls it took, and
|
|
74
|
+
* the tool rows between them.
|
|
75
|
+
*/
|
|
76
|
+
function newestTurnOnBranch(entries: ReadonlyArray<SessionEntry>, defaults: SessionUsageDefaults): BranchTurn | null {
|
|
77
|
+
let target = defaults.target ?? null;
|
|
78
|
+
let model = defaults.model ?? null;
|
|
79
|
+
let turn: BranchTurn | null = null;
|
|
80
|
+
for (const entry of entries) {
|
|
81
|
+
if (entry.kind === "modelChange") {
|
|
82
|
+
const change = entry as { target?: unknown; provider?: unknown; modelId?: unknown };
|
|
83
|
+
if (typeof change.target === "string" && change.target.length > 0) target = change.target;
|
|
84
|
+
else if (typeof change.provider === "string" && change.provider.length > 0) target = change.provider;
|
|
85
|
+
if (typeof change.modelId === "string" && change.modelId.length > 0) model = change.modelId;
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
if (entry.kind !== "message") continue;
|
|
89
|
+
if (entry.role === "user") {
|
|
90
|
+
turn = { rows: [], startedAt: entry.timestamp, targetId: target, modelId: model };
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (entry.role !== "assistant" && entry.role !== "tool_call" && entry.role !== "tool_result") continue;
|
|
94
|
+
// A ledger whose first rows predate any user message (an imported or
|
|
95
|
+
// repaired session) still has a turn to report; it just starts where the
|
|
96
|
+
// assistant does.
|
|
97
|
+
if (!turn) turn = { rows: [], startedAt: entry.timestamp, targetId: target, modelId: model };
|
|
98
|
+
if (entry.role === "assistant") {
|
|
99
|
+
turn.targetId = target;
|
|
100
|
+
turn.modelId = model;
|
|
101
|
+
}
|
|
102
|
+
turn.rows.push(entry);
|
|
103
|
+
}
|
|
104
|
+
return turn;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* The newest turn on the active path, in the shape the footer's last-turn line
|
|
109
|
+
* renders. Null when the branch holds no assistant reply, which is the honest
|
|
110
|
+
* answer for a leaf whose turn never produced one.
|
|
111
|
+
*
|
|
112
|
+
* `activeLeafTurnId` pins the branch, exactly as it does for the usage reseed.
|
|
113
|
+
* Omitted, the fold follows the newest message's ancestry.
|
|
114
|
+
*/
|
|
115
|
+
export function lastTurnSummaryFromLedger(
|
|
116
|
+
entries: ReadonlyArray<SessionEntry>,
|
|
117
|
+
defaults: SessionUsageDefaults = {},
|
|
118
|
+
activeLeafTurnId?: string | null,
|
|
119
|
+
): TurnSummary | null {
|
|
120
|
+
const scoped = filterEntriesToActivePath(entries, activeLeafTurnId ?? undefined);
|
|
121
|
+
const turn = newestTurnOnBranch(scoped, defaults);
|
|
122
|
+
if (!turn || turn.rows.length === 0) return null;
|
|
123
|
+
|
|
124
|
+
let sawAssistant = false;
|
|
125
|
+
let stopReason: TurnStopReason = "stop";
|
|
126
|
+
let inputTokens = 0;
|
|
127
|
+
let outputTokens = 0;
|
|
128
|
+
let cacheReadTokens = 0;
|
|
129
|
+
let cacheWriteTokens = 0;
|
|
130
|
+
let reasoningTokens = 0;
|
|
131
|
+
let sawReasoning = false;
|
|
132
|
+
let toolCount = 0;
|
|
133
|
+
let toolErrorCount = 0;
|
|
134
|
+
let targetId = turn.targetId;
|
|
135
|
+
let modelId = turn.modelId;
|
|
136
|
+
|
|
137
|
+
for (const row of turn.rows) {
|
|
138
|
+
const record = payloadRecord(row.payload);
|
|
139
|
+
// The live tally counts a tool by its result, so a call still in flight
|
|
140
|
+
// when the branch was left contributes nothing here either.
|
|
141
|
+
if (row.role === "tool_result") {
|
|
142
|
+
toolCount += 1;
|
|
143
|
+
if (record?.isError === true || record?.error === true) toolErrorCount += 1;
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
if (row.role !== "assistant" || !record) continue;
|
|
147
|
+
sawAssistant = true;
|
|
148
|
+
const reason = stopReasonOf(record.stopReason);
|
|
149
|
+
if (reason && reason !== "stop") stopReason = reason;
|
|
150
|
+
targetId = targetId ?? nonEmptyString(record, "provider", "api");
|
|
151
|
+
modelId = modelId ?? nonEmptyString(record, "responseModel", "model");
|
|
152
|
+
const usage = payloadRecord(record.usage);
|
|
153
|
+
if (!usage) continue;
|
|
154
|
+
inputTokens += positiveNumber(usage.input);
|
|
155
|
+
outputTokens += positiveNumber(usage.output);
|
|
156
|
+
cacheReadTokens += positiveNumber(usage.cacheRead);
|
|
157
|
+
cacheWriteTokens += positiveNumber(usage.cacheWrite);
|
|
158
|
+
const reasoning = extractReasoningTokens(usage);
|
|
159
|
+
if (reasoning !== null) {
|
|
160
|
+
reasoningTokens += reasoning;
|
|
161
|
+
sawReasoning = true;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (!sawAssistant) return null;
|
|
165
|
+
|
|
166
|
+
const lastRow = turn.rows[turn.rows.length - 1];
|
|
167
|
+
const summary: TurnSummary = {
|
|
168
|
+
elapsedMs: lastRow ? millisBetween(turn.startedAt, lastRow.timestamp) : 0,
|
|
169
|
+
modelId: modelId ?? "unknown",
|
|
170
|
+
targetId: targetId ?? "unknown",
|
|
171
|
+
inputTokens,
|
|
172
|
+
outputTokens,
|
|
173
|
+
cacheReadTokens,
|
|
174
|
+
cacheWriteTokens,
|
|
175
|
+
toolCount,
|
|
176
|
+
toolErrorCount,
|
|
177
|
+
stopReason,
|
|
178
|
+
watchdogPeak: 0,
|
|
179
|
+
truncated: false,
|
|
180
|
+
};
|
|
181
|
+
if (sawReasoning) {
|
|
182
|
+
summary.reasoningTokens = reasoningTokens;
|
|
183
|
+
summary.reasoningTokenProvenance = "provider";
|
|
184
|
+
}
|
|
185
|
+
return summary;
|
|
186
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ChatLoop } from "./chat-loop.js";
|
|
2
|
+
|
|
3
|
+
type SessionSwitchChat = Pick<ChatLoop, "cancel" | "isStreaming" | "whenSettled">;
|
|
4
|
+
|
|
5
|
+
/** Settle an active turn before its owning session writer can be replaced. */
|
|
6
|
+
export function settleChatBeforeSessionSwitch(chat: SessionSwitchChat): Promise<void> | null {
|
|
7
|
+
if (!chat.isStreaming()) return null;
|
|
8
|
+
chat.cancel();
|
|
9
|
+
return chat.whenSettled();
|
|
10
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { ClioSettings } from "../core/config.js";
|
|
2
|
+
import { collectSessionEntries } from "../domains/session/compaction/session-entries.js";
|
|
3
|
+
import type { SessionContract, SessionEntry } from "../domains/session/index.js";
|
|
4
|
+
import { openSession, sessionPaths } from "../engine/session.js";
|
|
5
|
+
import type { ChatLoop } from "./chat-loop.js";
|
|
6
|
+
import { buildReplayAgentMessagesFromTurns } from "./chat-renderer.js";
|
|
7
|
+
|
|
8
|
+
type SessionOwner = Pick<SessionContract, "create" | "current">;
|
|
9
|
+
type SessionChat = Pick<ChatLoop, "resetForSession">;
|
|
10
|
+
type RoutingSettings = Pick<ClioSettings, "orchestrator">;
|
|
11
|
+
|
|
12
|
+
export interface SessionTranscriptDeps {
|
|
13
|
+
session?: SessionOwner;
|
|
14
|
+
getSessionId?: () => string | null;
|
|
15
|
+
getSettings?: () => Readonly<RoutingSettings>;
|
|
16
|
+
readSessionEntries?: () => ReadonlyArray<SessionEntry>;
|
|
17
|
+
chat: SessionChat;
|
|
18
|
+
refreshStatus: () => void;
|
|
19
|
+
getCwd?: () => string;
|
|
20
|
+
readStructuredEntries?: (sessionId: string) => SessionEntry[];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface SessionTranscript {
|
|
24
|
+
ensureSessionForLocalEntry(): void;
|
|
25
|
+
readStructuredEntries(sessionId: string): SessionEntry[];
|
|
26
|
+
refreshChatContextFromSession(leafTurnId: string | null): void;
|
|
27
|
+
recordSubmittedTurn(): void;
|
|
28
|
+
liveSessionTurns(): number | null;
|
|
29
|
+
syncSessionCounter(): void;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function readStructuredEntriesFromDisk(sessionId: string): SessionEntry[] {
|
|
33
|
+
const reader = openSession(sessionId);
|
|
34
|
+
return collectSessionEntries(reader.turns(), sessionPaths(reader.meta()).current);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Owns the active session's projected turn count and transcript replay bridge.
|
|
39
|
+
* The optional readers keep construction independent of a session directory;
|
|
40
|
+
* disk access occurs only when a caller explicitly asks to read an id.
|
|
41
|
+
*/
|
|
42
|
+
export function createSessionTranscript(deps: SessionTranscriptDeps): SessionTranscript {
|
|
43
|
+
let sessionCounter = {
|
|
44
|
+
id: deps.session?.current()?.id ?? deps.getSessionId?.() ?? null,
|
|
45
|
+
baseTurns: deps.session?.current()?.messageCount ?? 0,
|
|
46
|
+
submittedTurns: 0,
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const syncSessionCounter = (): void => {
|
|
50
|
+
const meta = deps.session?.current();
|
|
51
|
+
const id = meta?.id ?? deps.getSessionId?.() ?? null;
|
|
52
|
+
if (id === sessionCounter.id) return;
|
|
53
|
+
const baseTurns = meta?.messageCount ?? 0;
|
|
54
|
+
const previousProjected = sessionCounter.baseTurns + sessionCounter.submittedTurns;
|
|
55
|
+
const carryPending = sessionCounter.id === null ? Math.max(0, previousProjected - baseTurns) : 0;
|
|
56
|
+
sessionCounter = { id, baseTurns, submittedTurns: carryPending };
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const recordSubmittedTurn = (): void => {
|
|
60
|
+
syncSessionCounter();
|
|
61
|
+
sessionCounter = { ...sessionCounter, submittedTurns: sessionCounter.submittedTurns + 1 };
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const liveSessionTurns = (): number | null => {
|
|
65
|
+
syncSessionCounter();
|
|
66
|
+
const metaTurns = deps.session?.current()?.messageCount;
|
|
67
|
+
const projected = sessionCounter.baseTurns + sessionCounter.submittedTurns;
|
|
68
|
+
return typeof metaTurns === "number" ? Math.max(metaTurns, projected) : projected > 0 ? projected : null;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const ensureSessionForLocalEntry = (): void => {
|
|
72
|
+
if (!deps.session || deps.session.current()) return;
|
|
73
|
+
const settings = deps.getSettings?.();
|
|
74
|
+
const input: { cwd: string; target?: string; model?: string } = {
|
|
75
|
+
cwd: deps.getCwd?.() ?? process.cwd(),
|
|
76
|
+
};
|
|
77
|
+
if (settings?.orchestrator.target) input.target = settings.orchestrator.target;
|
|
78
|
+
if (settings?.orchestrator.model) input.model = settings.orchestrator.model;
|
|
79
|
+
deps.session.create(input);
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const readStructuredEntries = (sessionId: string): SessionEntry[] =>
|
|
83
|
+
(deps.readStructuredEntries ?? readStructuredEntriesFromDisk)(sessionId);
|
|
84
|
+
|
|
85
|
+
const refreshChatContextFromSession = (leafTurnId: string | null): void => {
|
|
86
|
+
if (!deps.readSessionEntries) return;
|
|
87
|
+
const turns = deps.readSessionEntries();
|
|
88
|
+
deps.chat.resetForSession(
|
|
89
|
+
leafTurnId,
|
|
90
|
+
buildReplayAgentMessagesFromTurns(turns, {
|
|
91
|
+
...(leafTurnId ? { activeLeafTurnId: leafTurnId } : {}),
|
|
92
|
+
}),
|
|
93
|
+
);
|
|
94
|
+
deps.refreshStatus();
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
return {
|
|
98
|
+
ensureSessionForLocalEntry,
|
|
99
|
+
readStructuredEntries,
|
|
100
|
+
refreshChatContextFromSession,
|
|
101
|
+
recordSubmittedTurn,
|
|
102
|
+
liveSessionTurns,
|
|
103
|
+
syncSessionCounter,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rebuild the running usage totals from a session's own ledger.
|
|
3
|
+
*
|
|
4
|
+
* The `/cost` overlay and the footer both render one process-lifetime
|
|
5
|
+
* accumulator, and only `startNewSession` ever reset it. Resuming did not, so a
|
|
6
|
+
* resumed session showed the *previous* session's numbers under the resumed
|
|
7
|
+
* session's id: one process, two sessions, byte-identical totals relabelled.
|
|
8
|
+
* That is misattribution rather than an undercount, and a process that resumed
|
|
9
|
+
* and sent nothing reported zero for a session holding tens of thousands of
|
|
10
|
+
* tokens on disk.
|
|
11
|
+
*
|
|
12
|
+
* The fold itself is `ledgerUsageCalls` in the session domain, which owns the
|
|
13
|
+
* ledger and serves `clio-coder usage report` from the same function. This module is
|
|
14
|
+
* only the sink wiring between that fold and the observability projection.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { ledgerUsageCalls, type SessionEntry, type SessionUsageDefaults } from "../domains/session/index.js";
|
|
18
|
+
import { filterEntriesToActivePath } from "../domains/session/tree/active-path.js";
|
|
19
|
+
|
|
20
|
+
/** The slice of ObservabilityContract a reseed needs. */
|
|
21
|
+
export interface SessionUsageSink {
|
|
22
|
+
resetSession(): void;
|
|
23
|
+
recordTokens(
|
|
24
|
+
providerId: string,
|
|
25
|
+
modelId: string,
|
|
26
|
+
tokens: number,
|
|
27
|
+
costUsd?: number,
|
|
28
|
+
breakdown?: {
|
|
29
|
+
input: number;
|
|
30
|
+
output: number;
|
|
31
|
+
cacheRead: number;
|
|
32
|
+
cacheWrite: number;
|
|
33
|
+
reasoningTokens: number;
|
|
34
|
+
totalTokens: number;
|
|
35
|
+
apiCalls?: number;
|
|
36
|
+
},
|
|
37
|
+
costProvenance?: never,
|
|
38
|
+
): void;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Clear the running totals and replay the supplied session's recorded calls
|
|
43
|
+
* into them. Safe to call with an empty ledger: the totals reset to zero, which
|
|
44
|
+
* is the honest answer for a session that has spent nothing.
|
|
45
|
+
*
|
|
46
|
+
* `activeLeafTurnId` scopes the fold to one branch, through the same
|
|
47
|
+
* `filterEntriesToActivePath` the transcript replays through. current.jsonl is
|
|
48
|
+
* append-only, so after a `/tree` switch the abandoned sibling turns are still
|
|
49
|
+
* in the file: the transcript stopped showing them and `/cost` and the footer Σ
|
|
50
|
+
* kept counting them, which put a session total on screen for turns the reader
|
|
51
|
+
* had just been told were not on this branch. Omitted, the fold follows the
|
|
52
|
+
* newest message's ancestry, the same fallback an offline read of the transcript
|
|
53
|
+
* takes; a ledger with no branch in it folds whole either way.
|
|
54
|
+
*/
|
|
55
|
+
export function reseedSessionUsageFromLedger(
|
|
56
|
+
sink: SessionUsageSink,
|
|
57
|
+
entries: ReadonlyArray<SessionEntry>,
|
|
58
|
+
defaults: SessionUsageDefaults = {},
|
|
59
|
+
activeLeafTurnId?: string | null,
|
|
60
|
+
): void {
|
|
61
|
+
sink.resetSession();
|
|
62
|
+
const scoped = filterEntriesToActivePath(entries, activeLeafTurnId ?? undefined);
|
|
63
|
+
for (const call of ledgerUsageCalls(scoped, defaults)) {
|
|
64
|
+
sink.recordTokens(call.providerId, call.modelId, call.totalTokens, call.costUsd, {
|
|
65
|
+
input: call.input,
|
|
66
|
+
output: call.output,
|
|
67
|
+
cacheRead: call.cacheRead,
|
|
68
|
+
cacheWrite: call.cacheWrite,
|
|
69
|
+
reasoningTokens: call.reasoningTokens,
|
|
70
|
+
totalTokens: call.totalTokens,
|
|
71
|
+
apiCalls: call.apiCalls ?? 1,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|