@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,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The durable half of a worker block.
|
|
3
|
+
*
|
|
4
|
+
* A `/run`, a `/delegate`, or a model-driven dispatch draws its block from live
|
|
5
|
+
* bus events, which a resumed session no longer has. What it does still have is
|
|
6
|
+
* two things it wrote at the time: a `workerRun` session entry naming the run,
|
|
7
|
+
* and the sealed receipt under `receipts/<runId>.json` holding the answer. This
|
|
8
|
+
* module is the bridge in both directions. It projects a live entry state onto
|
|
9
|
+
* the session entry going out, and rebuilds the same {@link WorkerEntryState}
|
|
10
|
+
* from entries plus receipts coming back, so replay hands the renderer the
|
|
11
|
+
* exact object the reducer would have.
|
|
12
|
+
*
|
|
13
|
+
* Streamed prose never crosses either way. The receipt is the terminal truth
|
|
14
|
+
* for a worker's answer, so persisting the live tail would only add a second,
|
|
15
|
+
* staler copy of it to the session file.
|
|
16
|
+
*
|
|
17
|
+
* Pure: the receipt reader is a parameter, so nothing here touches disk.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import type { SessionEntryInput, WorkerRunEntry } from "../domains/session/index.js";
|
|
21
|
+
import {
|
|
22
|
+
boundSettledText,
|
|
23
|
+
type WorkerAttempt,
|
|
24
|
+
type WorkerEntryState,
|
|
25
|
+
type WorkerReceiptReader,
|
|
26
|
+
workerReceiptSummary,
|
|
27
|
+
workerTargetLabel,
|
|
28
|
+
} from "./worker-stream.js";
|
|
29
|
+
|
|
30
|
+
/** The `workerRun` entry a live block is worth, minus the fields the ledger stamps. */
|
|
31
|
+
export type WorkerRunEntryInput = Extract<SessionEntryInput, { kind: "workerRun" }>;
|
|
32
|
+
|
|
33
|
+
/** The same entry minus its parent pointer, which only the session owner can resolve. */
|
|
34
|
+
export type WorkerRunEntryFields = Omit<WorkerRunEntryInput, "parentTurnId">;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* One attempt's durable identity, read off the live block at the moment it
|
|
38
|
+
* starts. Called on every DispatchStarted for a transcript-bound run, so a
|
|
39
|
+
* failover writes a second entry under the same assignment rather than
|
|
40
|
+
* amending the first: the attempt trail is history, and history is
|
|
41
|
+
* append-only. The scalars are copied here; the runtime object is shared, and
|
|
42
|
+
* safely so, because the reducer replaces it on failover rather than mutating
|
|
43
|
+
* it.
|
|
44
|
+
*/
|
|
45
|
+
export function workerRunEntryFields(state: WorkerEntryState): WorkerRunEntryFields {
|
|
46
|
+
const { assignmentId, runId, origin, agentId, runtime, parentToolCallId } = state;
|
|
47
|
+
return {
|
|
48
|
+
kind: "workerRun",
|
|
49
|
+
assignmentId,
|
|
50
|
+
runId,
|
|
51
|
+
origin,
|
|
52
|
+
agentId,
|
|
53
|
+
runtime,
|
|
54
|
+
...(parentToolCallId !== undefined ? { parentToolCallId } : {}),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Rebuild one block per assignment from the entries that recorded it.
|
|
60
|
+
*
|
|
61
|
+
* Attempts fold the way they did live: the entries of one assignment become one
|
|
62
|
+
* block whose header names the last attempt and whose rail carries an `↻` line
|
|
63
|
+
* for each earlier one, so a resumed failover reads as the single run it was.
|
|
64
|
+
* The body and footer come from the last attempt's receipt, which is the
|
|
65
|
+
* attempt that actually produced an answer, through the same projection the
|
|
66
|
+
* live fold uses to settle a block.
|
|
67
|
+
*
|
|
68
|
+
* The returned map is keyed by assignment. Tool names are not reconstructed:
|
|
69
|
+
* they were live telemetry, the receipt seals a call count rather than a list,
|
|
70
|
+
* and inventing names from anything else would put a worker's arguments one
|
|
71
|
+
* inference away from the transcript.
|
|
72
|
+
*/
|
|
73
|
+
export function workerEntriesFromRunEntries(
|
|
74
|
+
entries: ReadonlyArray<WorkerRunEntry>,
|
|
75
|
+
readReceipt: WorkerReceiptReader,
|
|
76
|
+
): Map<string, WorkerEntryState> {
|
|
77
|
+
const byAssignment = new Map<string, WorkerRunEntry[]>();
|
|
78
|
+
for (const entry of entries) {
|
|
79
|
+
const attempts = byAssignment.get(entry.assignmentId);
|
|
80
|
+
if (attempts === undefined) byAssignment.set(entry.assignmentId, [entry]);
|
|
81
|
+
else attempts.push(entry);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const states = new Map<string, WorkerEntryState>();
|
|
85
|
+
for (const [assignmentId, attempts] of byAssignment) {
|
|
86
|
+
const last = attempts[attempts.length - 1];
|
|
87
|
+
if (last === undefined) continue;
|
|
88
|
+
const facts = readReceipt(last.runId);
|
|
89
|
+
const bounded = boundSettledText(facts?.text ?? "");
|
|
90
|
+
const trail: WorkerAttempt[] = attempts.map((attempt) => ({
|
|
91
|
+
runId: attempt.runId,
|
|
92
|
+
targetLabel: workerTargetLabel(attempt.runtime),
|
|
93
|
+
...(attempt.runId === last.runId && facts !== null ? { outcome: facts.outcome } : {}),
|
|
94
|
+
}));
|
|
95
|
+
states.set(assignmentId, {
|
|
96
|
+
assignmentId,
|
|
97
|
+
runId: last.runId,
|
|
98
|
+
origin: last.origin,
|
|
99
|
+
agentId: last.agentId,
|
|
100
|
+
runtime: last.runtime,
|
|
101
|
+
text: bounded.text,
|
|
102
|
+
droppedLines: bounded.dropped,
|
|
103
|
+
tools: [],
|
|
104
|
+
attempts: trail,
|
|
105
|
+
pending: false,
|
|
106
|
+
receipt: workerReceiptSummary(facts),
|
|
107
|
+
...(last.parentToolCallId !== undefined ? { parentToolCallId: last.parentToolCallId } : {}),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return states;
|
|
111
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sharing a worker's answer with the main agent.
|
|
3
|
+
*
|
|
4
|
+
* A `/run` or `/delegate` result reaches the operator's screen and stops there:
|
|
5
|
+
* the main agent is not told about it, which is what makes a side run a side
|
|
6
|
+
* run. `--share` and `/share` are the two ways an operator crosses that line on
|
|
7
|
+
* purpose, and this module owns what crosses. It picks the run and shapes the
|
|
8
|
+
* note; the caller owns the path the note takes into the session, which is the
|
|
9
|
+
* ordinary user-turn path so replay and compaction treat it as operator text.
|
|
10
|
+
*
|
|
11
|
+
* Pure: no I/O, no bus, no session.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { WORKER_OUTPUT_MAX_BYTES } from "../domains/dispatch/event-pump.js";
|
|
15
|
+
import { truncateUtf8 } from "../tools/truncate-utf8.js";
|
|
16
|
+
import { type WorkerEntryState, workerAskedByModel } from "./worker-stream.js";
|
|
17
|
+
|
|
18
|
+
/** Terminal facts of one finished run, from a receipt or from a settled block. */
|
|
19
|
+
export interface WorkerShareFacts {
|
|
20
|
+
agentId: string;
|
|
21
|
+
runId: string;
|
|
22
|
+
outcome: string;
|
|
23
|
+
text: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Bound on shared worker prose. It is the receipt's own output bound, so a
|
|
28
|
+
* note carries exactly what the receipt sealed and the model is never handed
|
|
29
|
+
* more of a worker's answer than the worker's answer.
|
|
30
|
+
*/
|
|
31
|
+
export const WORKER_SHARE_MAX_BYTES = WORKER_OUTPUT_MAX_BYTES;
|
|
32
|
+
|
|
33
|
+
const SHARE_TRUNCATION_MARKER = "\n[worker output truncated]";
|
|
34
|
+
|
|
35
|
+
/** The word the note reports; `succeeded` reads as `ok` everywhere else in the UI. */
|
|
36
|
+
function outcomeWord(outcome: string): string {
|
|
37
|
+
return outcome === "succeeded" ? "ok" : outcome;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** The prefix every shared note starts with; docs, tests, and the honesty rail pin it. */
|
|
41
|
+
export const WORKER_SHARE_NOTE_PREFIX = "[worker result]";
|
|
42
|
+
|
|
43
|
+
/** The origin the header names, so a model with a compacted context still sees who put the note there. */
|
|
44
|
+
export const WORKER_SHARE_ORIGIN = "shared by the operator";
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The operator note a shared run becomes:
|
|
48
|
+
*
|
|
49
|
+
* [worker result] coder · run 2mkas6s · ok · shared by the operator
|
|
50
|
+
* <bounded output text>
|
|
51
|
+
*
|
|
52
|
+
* The header names the worker so the main agent can tell a shared answer from
|
|
53
|
+
* the operator's own words, and names the operator as the origin so a model
|
|
54
|
+
* that never dispatched the run does not read the note as an unattributed tool
|
|
55
|
+
* result (#73). Returns null when there is nothing to share: a run that
|
|
56
|
+
* produced no text is not worth a turn.
|
|
57
|
+
*/
|
|
58
|
+
export function formatWorkerShareNote(facts: WorkerShareFacts): string | null {
|
|
59
|
+
const text = facts.text.trim();
|
|
60
|
+
if (text.length === 0) return null;
|
|
61
|
+
const header = `${WORKER_SHARE_NOTE_PREFIX} ${facts.agentId} · run ${facts.runId} · ${outcomeWord(facts.outcome)} · ${WORKER_SHARE_ORIGIN}`;
|
|
62
|
+
return `${header}\n${truncateUtf8(text, WORKER_SHARE_MAX_BYTES, SHARE_TRUNCATION_MARKER)}`;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Whether operator text is a shared worker note. The header is the first line,
|
|
67
|
+
* so the chat loop can tell the honesty rail a worker result entered the turn
|
|
68
|
+
* by the operator's hand rather than by a dispatch call.
|
|
69
|
+
*/
|
|
70
|
+
export function isWorkerShareNote(text: string): boolean {
|
|
71
|
+
return text.trimStart().startsWith(`${WORKER_SHARE_NOTE_PREFIX} `);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Terminal facts of a settled worker block, or null while it is still running. */
|
|
75
|
+
export function workerShareFactsFromEntry(entry: WorkerEntryState): WorkerShareFacts | null {
|
|
76
|
+
if (entry.pending || entry.receipt === undefined) return null;
|
|
77
|
+
return { agentId: entry.agentId, runId: entry.runId, outcome: entry.receipt.outcome, text: entry.text };
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Which run `/share` means. A named id matches either the logical assignment or
|
|
82
|
+
* any attempt of it, so an operator can name the run id a failover left behind
|
|
83
|
+
* and still get the block they watched. Without an id it is the most recent
|
|
84
|
+
* settled run the operator started themselves: a run the model asked for
|
|
85
|
+
* already reached the model through its tool result, so defaulting to one would
|
|
86
|
+
* share something the model has, and hide the run the operator was looking at.
|
|
87
|
+
*/
|
|
88
|
+
export function selectWorkerRunToShare(entries: ReadonlyArray<WorkerEntryState>, id?: string): WorkerEntryState | null {
|
|
89
|
+
const wanted = id?.trim();
|
|
90
|
+
for (let index = entries.length - 1; index >= 0; index -= 1) {
|
|
91
|
+
const entry = entries[index];
|
|
92
|
+
if (entry === undefined || entry.pending || entry.receipt === undefined) continue;
|
|
93
|
+
if (wanted === undefined || wanted.length === 0) {
|
|
94
|
+
if (!workerAskedByModel(entry)) return entry;
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (entry.assignmentId === wanted || entry.attempts.some((attempt) => attempt.runId === wanted)) return entry;
|
|
98
|
+
}
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker transcript state machine.
|
|
3
|
+
*
|
|
4
|
+
* One entry per logical assignment, folded from the dispatch lifecycle events
|
|
5
|
+
* the domain already publishes: DispatchStarted opens it, DispatchProgress
|
|
6
|
+
* streams into it, DispatchCompleted/DispatchFailed seal it, RunAborted marks
|
|
7
|
+
* a cancel that no terminal event followed. Nothing here reads disk, subscribes
|
|
8
|
+
* to a bus, or renders; the chat panel owns presentation and the wiring owns
|
|
9
|
+
* I/O, so every sequence below is testable as a pure fold.
|
|
10
|
+
*
|
|
11
|
+
* Three rules the fold enforces rather than documents:
|
|
12
|
+
*
|
|
13
|
+
* - Tool *names* only. Names come exclusively from the `clio_*` telemetry
|
|
14
|
+
* events, never from `tool_execution_start`, whose `args` carry the call's
|
|
15
|
+
* literal arguments. A worker's arguments are its own business and must not
|
|
16
|
+
* cross into the operator's transcript, which is the same rule the dispatch
|
|
17
|
+
* board follows.
|
|
18
|
+
* - Attempts fold into one entry. A failover publishes a second
|
|
19
|
+
* DispatchStarted under the same `assignmentId`, so it appends an attempt
|
|
20
|
+
* and keeps streaming into the block the operator is already reading
|
|
21
|
+
* instead of opening a second one. The retry itself is admitted as an
|
|
22
|
+
* internal-origin request, so origin gates only the first attempt: the
|
|
23
|
+
* assignment's origin is what the block carries.
|
|
24
|
+
* - Only the current attempt can move the block. A late progress, terminal,
|
|
25
|
+
* or abort event addressed to a superseded attempt is dropped, and a
|
|
26
|
+
* settled block takes no more progress, so a slow event from an old run
|
|
27
|
+
* can neither rewrite nor re-settle the attempt that replaced it.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import type {
|
|
31
|
+
DispatchCompletedPayload,
|
|
32
|
+
DispatchFailedPayload,
|
|
33
|
+
DispatchProgressPayload,
|
|
34
|
+
DispatchStartedPayload,
|
|
35
|
+
RunAbortedPayload,
|
|
36
|
+
} from "../core/bus-events.js";
|
|
37
|
+
import { durableAssistantTextFromEvent, WORKER_OUTPUT_MAX_BYTES } from "../domains/dispatch/event-pump.js";
|
|
38
|
+
import type { RunKind } from "../domains/dispatch/types.js";
|
|
39
|
+
import type { WorkerRunOrigin, WorkerRunRuntime, WorkerRunRuntimeKind } from "../domains/session/index.js";
|
|
40
|
+
import { truncateUtf8 } from "../tools/truncate-utf8.js";
|
|
41
|
+
|
|
42
|
+
export interface WorkerAttempt {
|
|
43
|
+
runId: string;
|
|
44
|
+
targetLabel: string;
|
|
45
|
+
outcome?: string;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export type WorkerResultContract = "pass" | "fail" | "not-reached" | "unmeasured";
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Terminal facts a worker block reports. Sealed by the receipt when it can be
|
|
52
|
+
* read, carried by the terminal event otherwise. Every unit is optional and
|
|
53
|
+
* rendered only when known: an ACP peer reports no tokens of its own, and a
|
|
54
|
+
* block that says it spent zero would be claiming something no receipt sealed.
|
|
55
|
+
*/
|
|
56
|
+
export interface WorkerReceiptSummary {
|
|
57
|
+
outcome: string;
|
|
58
|
+
outcomeCode?: string;
|
|
59
|
+
exitCode?: number;
|
|
60
|
+
failureMessage?: string;
|
|
61
|
+
tokenCount?: number;
|
|
62
|
+
durationMs?: number;
|
|
63
|
+
toolCalls?: number;
|
|
64
|
+
contract?: WorkerResultContract;
|
|
65
|
+
/** From an abort marker rather than a sealed terminal event; a later DispatchCompleted/DispatchFailed replaces it. */
|
|
66
|
+
provisional?: boolean;
|
|
67
|
+
/** The run is over, but no receipt could be read for it, and the ledger row could not explain why either. */
|
|
68
|
+
receiptUnavailable?: boolean;
|
|
69
|
+
/** Replay only: the ledger row for this run has no `endedAt` yet, so the run is still going in another process. */
|
|
70
|
+
stillRunning?: boolean;
|
|
71
|
+
/** Replay only: no receipt exists because the ledger closed this row early (`closeAbandonedRows`); the row's own explanation, verbatim. */
|
|
72
|
+
abandonedDetail?: string;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** A receipt's projection: the summary plus the answer it sealed. */
|
|
76
|
+
export interface WorkerReceiptFacts extends WorkerReceiptSummary {
|
|
77
|
+
text?: string;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Reads `receipts/<runId>.json` and projects it; null when it is absent or unreadable. */
|
|
81
|
+
export type WorkerReceiptReader = (runId: string) => WorkerReceiptFacts | null;
|
|
82
|
+
|
|
83
|
+
export interface WorkerEntryState {
|
|
84
|
+
assignmentId: string;
|
|
85
|
+
/** Current attempt's run id. */
|
|
86
|
+
runId: string;
|
|
87
|
+
/** The assignment's origin. Internal runs never open an entry, so it is never "internal". */
|
|
88
|
+
origin: WorkerRunOrigin;
|
|
89
|
+
agentId: string;
|
|
90
|
+
/** Runtime family plus route, as the session entry records it; the header names it. */
|
|
91
|
+
runtime: WorkerRunRuntime;
|
|
92
|
+
/** Bounded worker prose: the live tail while running, the sealed answer once settled. */
|
|
93
|
+
text: string;
|
|
94
|
+
/** Lines the bound dropped from `text`; renders the `/view dispatch:` tail. */
|
|
95
|
+
droppedLines: number;
|
|
96
|
+
/** Distinct tool names in first-use order, bounded. */
|
|
97
|
+
tools: string[];
|
|
98
|
+
/** Every attempt of this assignment, oldest first. */
|
|
99
|
+
attempts: WorkerAttempt[];
|
|
100
|
+
pending: boolean;
|
|
101
|
+
receipt?: WorkerReceiptSummary;
|
|
102
|
+
/** Agent origin: the tool call whose execution spawned this run. */
|
|
103
|
+
parentToolCallId?: string;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Whether the model asked for this run. The parent tool call is the ground
|
|
108
|
+
* truth: a scout successor an operator approved is admitted as user origin but
|
|
109
|
+
* spawned by a dispatch call, and a compete judge carries no origin at all, so
|
|
110
|
+
* origin alone would draw both as the operator's own work and let bare /share
|
|
111
|
+
* hand the model a run it already has. Any run under a tool call is the
|
|
112
|
+
* model's; the origin label decides only for a run with none.
|
|
113
|
+
*/
|
|
114
|
+
export function workerAskedByModel(state: Pick<WorkerEntryState, "origin" | "parentToolCallId">): boolean {
|
|
115
|
+
return state.parentToolCallId !== undefined || state.origin === "agent";
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export type WorkerStreamChange =
|
|
119
|
+
| { kind: "created"; entry: WorkerEntryState }
|
|
120
|
+
| { kind: "updated"; entry: WorkerEntryState };
|
|
121
|
+
|
|
122
|
+
export interface WorkerStreamOptions {
|
|
123
|
+
/**
|
|
124
|
+
* Sealed terminal facts for a finished run. The receipt is the terminal
|
|
125
|
+
* truth; the bus payload is only the fallback for when it cannot be read.
|
|
126
|
+
*/
|
|
127
|
+
readReceipt?: WorkerReceiptReader;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export interface WorkerStream {
|
|
131
|
+
started(payload: DispatchStartedPayload): WorkerStreamChange | null;
|
|
132
|
+
progress(payload: DispatchProgressPayload): WorkerStreamChange | null;
|
|
133
|
+
completed(payload: DispatchCompletedPayload): WorkerStreamChange | null;
|
|
134
|
+
failed(payload: DispatchFailedPayload): WorkerStreamChange | null;
|
|
135
|
+
aborted(payload: RunAbortedPayload): WorkerStreamChange | null;
|
|
136
|
+
get(assignmentId: string): WorkerEntryState | undefined;
|
|
137
|
+
/**
|
|
138
|
+
* Forget every assignment. Called with the transcript's own reset, so a
|
|
139
|
+
* session change clears the routing table and the visible blocks together:
|
|
140
|
+
* a late event for a run of the old session then finds no entry, rather than
|
|
141
|
+
* repainting an old block into the new transcript.
|
|
142
|
+
*/
|
|
143
|
+
reset(): void;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Lines of worker prose kept while a run is live. The tail is what a streaming
|
|
148
|
+
* answer is about, so the head is what gets dropped; once the run settles the
|
|
149
|
+
* body is replaced by the receipt-sealed answer and anchors at the head, which
|
|
150
|
+
* is the same rule the thinking block already follows.
|
|
151
|
+
*/
|
|
152
|
+
export const WORKER_LIVE_TAIL_LINES = 40;
|
|
153
|
+
|
|
154
|
+
/** Distinct tool names carried on an entry. The receipt's call count carries the total. */
|
|
155
|
+
export const WORKER_TOOL_NAME_LIMIT = 8;
|
|
156
|
+
|
|
157
|
+
const WORKER_TEXT_TRUNCATION_MARKER = "";
|
|
158
|
+
|
|
159
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
160
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
function nonEmptyString(value: unknown): string | undefined {
|
|
164
|
+
return typeof value === "string" && value.trim().length > 0 ? value : undefined;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function finiteNumber(value: unknown): number | undefined {
|
|
168
|
+
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export function workerRuntimeKind(
|
|
172
|
+
runtimeKind: RunKind | undefined,
|
|
173
|
+
runtimeId: string | undefined,
|
|
174
|
+
): WorkerRunRuntimeKind {
|
|
175
|
+
if (runtimeKind === "acp-delegation") return "acp";
|
|
176
|
+
if (runtimeId === "claude-code") return "claude-code";
|
|
177
|
+
if (runtimeId === "claude-sdk") return "claude-sdk";
|
|
178
|
+
return "clio";
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
function runtimeIdentity(payload: DispatchStartedPayload): WorkerRunRuntime {
|
|
182
|
+
const kind = workerRuntimeKind(payload.runtimeKind, payload.runtimeId);
|
|
183
|
+
if (kind === "acp") {
|
|
184
|
+
const peerId = nonEmptyString(payload.agentId);
|
|
185
|
+
return { kind, ...(peerId !== undefined ? { peerId } : {}) };
|
|
186
|
+
}
|
|
187
|
+
const targetId = nonEmptyString(payload.targetId);
|
|
188
|
+
const wireModelId = nonEmptyString(payload.wireModelId);
|
|
189
|
+
return {
|
|
190
|
+
kind,
|
|
191
|
+
...(targetId !== undefined ? { targetId } : {}),
|
|
192
|
+
...(wireModelId !== undefined ? { wireModelId } : {}),
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/** Short route label for an attempt line: the model that ran it, or the peer that did. */
|
|
197
|
+
export function workerTargetLabel(runtime: WorkerRunRuntime): string {
|
|
198
|
+
if (runtime.kind === "acp") return runtime.peerId ?? "acp";
|
|
199
|
+
if (runtime.targetId !== undefined && runtime.wireModelId !== undefined) {
|
|
200
|
+
return `${runtime.targetId}/${runtime.wireModelId}`;
|
|
201
|
+
}
|
|
202
|
+
return runtime.targetId ?? runtime.wireModelId ?? "unknown";
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Incremental assistant prose carried by one worker event.
|
|
207
|
+
*
|
|
208
|
+
* Native workers slim `message_update` down to `assistantMessageEvent.delta`
|
|
209
|
+
* before it crosses the NDJSON seam (src/worker/event-projection.ts); the ACP
|
|
210
|
+
* mapper emits a top-level `text_delta` carrying `text`. Both spellings are
|
|
211
|
+
* read here so ACP peers need no separate UI path.
|
|
212
|
+
*/
|
|
213
|
+
function textDelta(event: unknown): string {
|
|
214
|
+
if (!isRecord(event)) return "";
|
|
215
|
+
if (event.type === "message_update") {
|
|
216
|
+
const assistantEvent = isRecord(event.assistantMessageEvent) ? event.assistantMessageEvent : null;
|
|
217
|
+
if (assistantEvent?.type !== "text_delta") return "";
|
|
218
|
+
return typeof assistantEvent.delta === "string" ? assistantEvent.delta : "";
|
|
219
|
+
}
|
|
220
|
+
if (event.type !== "text_delta") return "";
|
|
221
|
+
if (typeof event.delta === "string") return event.delta;
|
|
222
|
+
return typeof event.text === "string" ? event.text : "";
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/** Tool name from Clio's own telemetry. Never from `tool_execution_*`, whose args are the call's arguments. */
|
|
226
|
+
function toolName(event: unknown): string | undefined {
|
|
227
|
+
if (!isRecord(event)) return undefined;
|
|
228
|
+
if (event.type !== "clio_tool_start" && event.type !== "clio_tool_finish") return undefined;
|
|
229
|
+
const payload = isRecord(event.payload) ? event.payload : null;
|
|
230
|
+
return nonEmptyString(payload?.tool);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
function lineCount(text: string): number {
|
|
234
|
+
if (text.length === 0) return 0;
|
|
235
|
+
let lines = 1;
|
|
236
|
+
for (let index = 0; index < text.length; index += 1) {
|
|
237
|
+
if (text[index] === "\n") lines += 1;
|
|
238
|
+
}
|
|
239
|
+
return lines;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/** Keep the newest `WORKER_LIVE_TAIL_LINES` lines; report what that cost. */
|
|
243
|
+
function boundLiveText(text: string): { text: string; dropped: number } {
|
|
244
|
+
const lines = text.split("\n");
|
|
245
|
+
if (lines.length <= WORKER_LIVE_TAIL_LINES) return { text, dropped: 0 };
|
|
246
|
+
const dropped = lines.length - WORKER_LIVE_TAIL_LINES;
|
|
247
|
+
return { text: lines.slice(dropped).join("\n"), dropped };
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/** Head-anchored byte bound for a settled answer, matching the receipt's own bound. */
|
|
251
|
+
export function boundSettledText(text: string): { text: string; dropped: number } {
|
|
252
|
+
const bounded = truncateUtf8(text, WORKER_OUTPUT_MAX_BYTES, WORKER_TEXT_TRUNCATION_MARKER);
|
|
253
|
+
if (bounded === text) return { text, dropped: 0 };
|
|
254
|
+
return { text: bounded, dropped: Math.max(0, lineCount(text) - lineCount(bounded)) };
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Terminal facts a lifecycle payload can supply on its own. Used only when the
|
|
259
|
+
* sealed receipt is unreadable, so the block still reports an honest outcome
|
|
260
|
+
* instead of hanging on a spinner.
|
|
261
|
+
*/
|
|
262
|
+
function terminalFacts(payload: DispatchCompletedPayload | DispatchFailedPayload): WorkerReceiptFacts {
|
|
263
|
+
const detail = nonEmptyString(payload.outcomeDetail);
|
|
264
|
+
const tokenCount = finiteNumber(payload.tokenCount);
|
|
265
|
+
const durationMs = finiteNumber(payload.durationMs);
|
|
266
|
+
const exitCode = finiteNumber(payload.exitCode);
|
|
267
|
+
return {
|
|
268
|
+
outcome: payload.outcome,
|
|
269
|
+
...(payload.outcomeCode !== null && payload.outcomeCode !== undefined ? { outcomeCode: payload.outcomeCode } : {}),
|
|
270
|
+
...(detail !== undefined ? { failureMessage: detail } : {}),
|
|
271
|
+
...(exitCode !== undefined ? { exitCode } : {}),
|
|
272
|
+
...(tokenCount !== undefined ? { tokenCount } : {}),
|
|
273
|
+
...(durationMs !== undefined ? { durationMs } : {}),
|
|
274
|
+
...(payload.toolActivity ? { toolCalls: payload.toolActivity.calls } : {}),
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* The one projection from receipt facts to the summary a block's footer
|
|
280
|
+
* reports, shared by live settlement and by replay so both draw the same
|
|
281
|
+
* numbers from the same bytes. Null is a run whose receipt is gone (an expired
|
|
282
|
+
* state dir, a session copied without its receipts): the run is over and the
|
|
283
|
+
* transcript says so, even when it cannot say how.
|
|
284
|
+
*/
|
|
285
|
+
export function workerReceiptSummary(facts: WorkerReceiptFacts | null): WorkerReceiptSummary {
|
|
286
|
+
if (facts === null) return { outcome: "unknown", receiptUnavailable: true };
|
|
287
|
+
const { text: _text, ...summary } = facts;
|
|
288
|
+
return summary;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
export function createWorkerStream(options: WorkerStreamOptions = {}): WorkerStream {
|
|
292
|
+
const byAssignment = new Map<string, WorkerEntryState>();
|
|
293
|
+
/** Highest attempt number seen per assignment; a DispatchStarted at or below it is a duplicate or a straggler. */
|
|
294
|
+
const attemptByAssignment = new Map<string, number>();
|
|
295
|
+
/** Every attempt run id to its assignment, so progress and terminal events find their entry. */
|
|
296
|
+
const assignmentByRun = new Map<string, string>();
|
|
297
|
+
/** Durable answer text observed live, per attempt; the receipt wins when it is readable. */
|
|
298
|
+
const durableTextByRun = new Map<string, string>();
|
|
299
|
+
|
|
300
|
+
/** The entry a run id addresses, and only while that run is the entry's current attempt. */
|
|
301
|
+
const currentEntryForRun = (runId: unknown): WorkerEntryState | undefined => {
|
|
302
|
+
const id = nonEmptyString(runId);
|
|
303
|
+
if (id === undefined) return undefined;
|
|
304
|
+
const assignmentId = assignmentByRun.get(id);
|
|
305
|
+
const entry = assignmentId === undefined ? undefined : byAssignment.get(assignmentId);
|
|
306
|
+
return entry?.runId === id ? entry : undefined;
|
|
307
|
+
};
|
|
308
|
+
|
|
309
|
+
const settle = (entry: WorkerEntryState, payloadFacts: WorkerReceiptFacts): WorkerStreamChange => {
|
|
310
|
+
const facts = options.readReceipt?.(entry.runId) ?? { ...payloadFacts, receiptUnavailable: true };
|
|
311
|
+
entry.receipt = workerReceiptSummary(facts);
|
|
312
|
+
entry.pending = false;
|
|
313
|
+
const attempt = entry.attempts[entry.attempts.length - 1];
|
|
314
|
+
if (attempt !== undefined) attempt.outcome = facts.outcome;
|
|
315
|
+
// Terminal truth is the sealed answer. A run whose receipt could not be
|
|
316
|
+
// read keeps whatever durable text its own stream produced, and a run that
|
|
317
|
+
// produced none keeps the live tail rather than blanking the block.
|
|
318
|
+
const settled = nonEmptyString(facts.text) ?? nonEmptyString(durableTextByRun.get(entry.runId));
|
|
319
|
+
if (settled !== undefined) {
|
|
320
|
+
const bounded = boundSettledText(settled);
|
|
321
|
+
entry.text = bounded.text;
|
|
322
|
+
entry.droppedLines = bounded.dropped;
|
|
323
|
+
}
|
|
324
|
+
return { kind: "updated", entry };
|
|
325
|
+
};
|
|
326
|
+
|
|
327
|
+
return {
|
|
328
|
+
started(payload): WorkerStreamChange | null {
|
|
329
|
+
const runId = nonEmptyString(payload.runId);
|
|
330
|
+
const assignmentId = nonEmptyString(payload.assignmentId) ?? runId;
|
|
331
|
+
if (runId === undefined || assignmentId === undefined) return null;
|
|
332
|
+
const runtime = runtimeIdentity(payload);
|
|
333
|
+
const existing = byAssignment.get(assignmentId);
|
|
334
|
+
if (existing !== undefined) {
|
|
335
|
+
if (payload.attempt <= (attemptByAssignment.get(assignmentId) ?? -1)) return null;
|
|
336
|
+
// A later attempt of work the operator is already watching. The block
|
|
337
|
+
// keeps its identity, gains a rail line, and streams again. Its origin
|
|
338
|
+
// is the assignment's, not the retry request's.
|
|
339
|
+
attemptByAssignment.set(assignmentId, payload.attempt);
|
|
340
|
+
existing.runId = runId;
|
|
341
|
+
existing.runtime = runtime;
|
|
342
|
+
existing.pending = true;
|
|
343
|
+
delete existing.receipt;
|
|
344
|
+
existing.attempts.push({ runId, targetLabel: workerTargetLabel(runtime) });
|
|
345
|
+
assignmentByRun.set(runId, assignmentId);
|
|
346
|
+
return { kind: "updated", entry: existing };
|
|
347
|
+
}
|
|
348
|
+
if (payload.requestOrigin !== "user" && payload.requestOrigin !== "agent") return null;
|
|
349
|
+
attemptByAssignment.set(assignmentId, payload.attempt);
|
|
350
|
+
const entry: WorkerEntryState = {
|
|
351
|
+
assignmentId,
|
|
352
|
+
runId,
|
|
353
|
+
origin: payload.requestOrigin,
|
|
354
|
+
agentId: payload.agentId,
|
|
355
|
+
runtime,
|
|
356
|
+
text: "",
|
|
357
|
+
droppedLines: 0,
|
|
358
|
+
tools: [],
|
|
359
|
+
attempts: [{ runId, targetLabel: workerTargetLabel(runtime) }],
|
|
360
|
+
pending: true,
|
|
361
|
+
...(payload.parentToolCallId !== undefined ? { parentToolCallId: payload.parentToolCallId } : {}),
|
|
362
|
+
};
|
|
363
|
+
byAssignment.set(assignmentId, entry);
|
|
364
|
+
assignmentByRun.set(runId, assignmentId);
|
|
365
|
+
return { kind: "created", entry };
|
|
366
|
+
},
|
|
367
|
+
|
|
368
|
+
progress(payload): WorkerStreamChange | null {
|
|
369
|
+
const entry = currentEntryForRun(payload.runId);
|
|
370
|
+
if (entry === undefined || !entry.pending) return null;
|
|
371
|
+
const event = payload.event;
|
|
372
|
+
let changed = false;
|
|
373
|
+
|
|
374
|
+
const delta = textDelta(event);
|
|
375
|
+
if (delta.length > 0) {
|
|
376
|
+
const bounded = boundLiveText(entry.text + delta);
|
|
377
|
+
entry.text = bounded.text;
|
|
378
|
+
entry.droppedLines += bounded.dropped;
|
|
379
|
+
changed = true;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// A durable message_end is the answer as the receipt will seal it. An
|
|
383
|
+
// ACP peer that streamed no deltas reaches the transcript only here.
|
|
384
|
+
const durable = durableAssistantTextFromEvent(event);
|
|
385
|
+
if (durable.trim().length > 0) {
|
|
386
|
+
durableTextByRun.set(entry.runId, durable);
|
|
387
|
+
if (delta.length === 0 && entry.text.trim().length === 0) {
|
|
388
|
+
const bounded = boundLiveText(durable);
|
|
389
|
+
entry.text = bounded.text;
|
|
390
|
+
entry.droppedLines += bounded.dropped;
|
|
391
|
+
}
|
|
392
|
+
changed = true;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
const tool = toolName(event);
|
|
396
|
+
if (tool !== undefined && !entry.tools.includes(tool) && entry.tools.length < WORKER_TOOL_NAME_LIMIT) {
|
|
397
|
+
entry.tools.push(tool);
|
|
398
|
+
changed = true;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
return changed ? { kind: "updated", entry } : null;
|
|
402
|
+
},
|
|
403
|
+
|
|
404
|
+
completed(payload): WorkerStreamChange | null {
|
|
405
|
+
const entry = currentEntryForRun(payload.runId);
|
|
406
|
+
if (entry === undefined) return null;
|
|
407
|
+
return settle(entry, terminalFacts(payload));
|
|
408
|
+
},
|
|
409
|
+
|
|
410
|
+
failed(payload): WorkerStreamChange | null {
|
|
411
|
+
const entry = currentEntryForRun(payload.runId);
|
|
412
|
+
if (entry === undefined) return null;
|
|
413
|
+
return settle(entry, terminalFacts(payload));
|
|
414
|
+
},
|
|
415
|
+
|
|
416
|
+
aborted(payload): WorkerStreamChange | null {
|
|
417
|
+
const entry = currentEntryForRun(payload.runId);
|
|
418
|
+
// A cancelled stream or a loop-guard stop names no dispatched run; only
|
|
419
|
+
// an abort that hits a live worker of ours settles anything.
|
|
420
|
+
if (entry === undefined || !entry.pending) return null;
|
|
421
|
+
const durationMs = finiteNumber(payload.elapsedMs);
|
|
422
|
+
const failureMessage = nonEmptyString(payload.reason);
|
|
423
|
+
entry.pending = false;
|
|
424
|
+
entry.receipt = {
|
|
425
|
+
outcome: "canceled",
|
|
426
|
+
...(durationMs !== undefined ? { durationMs } : {}),
|
|
427
|
+
...(failureMessage !== undefined ? { failureMessage } : {}),
|
|
428
|
+
provisional: true,
|
|
429
|
+
};
|
|
430
|
+
const attempt = entry.attempts[entry.attempts.length - 1];
|
|
431
|
+
if (attempt !== undefined) attempt.outcome = "canceled";
|
|
432
|
+
return { kind: "updated", entry };
|
|
433
|
+
},
|
|
434
|
+
|
|
435
|
+
get(assignmentId): WorkerEntryState | undefined {
|
|
436
|
+
return byAssignment.get(assignmentId);
|
|
437
|
+
},
|
|
438
|
+
|
|
439
|
+
reset(): void {
|
|
440
|
+
byAssignment.clear();
|
|
441
|
+
attemptByAssignment.clear();
|
|
442
|
+
assignmentByRun.clear();
|
|
443
|
+
durableTextByRun.clear();
|
|
444
|
+
},
|
|
445
|
+
};
|
|
446
|
+
}
|