@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,103 @@
|
|
|
1
|
+
import type { PathOrFileDescriptor } from "node:fs";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
|
|
6
|
+
const require = createRequire(import.meta.url);
|
|
7
|
+
const fs = require("node:fs") as typeof import("node:fs");
|
|
8
|
+
|
|
9
|
+
export type { PhotonImage as PhotonImageType } from "@silvia-odwyer/photon-node";
|
|
10
|
+
|
|
11
|
+
type ReadFileSync = typeof fs.readFileSync;
|
|
12
|
+
|
|
13
|
+
const WASM_FILENAME = "photon_rs_bg.wasm";
|
|
14
|
+
|
|
15
|
+
let photonModule: typeof import("@silvia-odwyer/photon-node") | null = null;
|
|
16
|
+
let loadPromise: Promise<typeof import("@silvia-odwyer/photon-node") | null> | null = null;
|
|
17
|
+
|
|
18
|
+
function pathOrNull(file: PathOrFileDescriptor): string | null {
|
|
19
|
+
if (typeof file === "string") return file;
|
|
20
|
+
if (file instanceof URL) return fileURLToPath(file);
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function getFallbackWasmPaths(): string[] {
|
|
25
|
+
const execDir = path.dirname(process.execPath);
|
|
26
|
+
return [
|
|
27
|
+
path.join(execDir, WASM_FILENAME),
|
|
28
|
+
path.join(execDir, "photon", WASM_FILENAME),
|
|
29
|
+
path.join(process.cwd(), WASM_FILENAME),
|
|
30
|
+
];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function patchPhotonWasmRead(): () => void {
|
|
34
|
+
const originalReadFileSync: ReadFileSync = fs.readFileSync.bind(fs);
|
|
35
|
+
const fallbackPaths = getFallbackWasmPaths();
|
|
36
|
+
const mutableFs = fs as { readFileSync: ReadFileSync };
|
|
37
|
+
|
|
38
|
+
const patchedReadFileSync: ReadFileSync = ((...args: Parameters<ReadFileSync>) => {
|
|
39
|
+
const [file, options] = args;
|
|
40
|
+
const resolvedPath = pathOrNull(file);
|
|
41
|
+
|
|
42
|
+
if (resolvedPath?.endsWith(WASM_FILENAME)) {
|
|
43
|
+
try {
|
|
44
|
+
return originalReadFileSync(...args);
|
|
45
|
+
} catch (error) {
|
|
46
|
+
const err = error as NodeJS.ErrnoException;
|
|
47
|
+
if (err?.code && err.code !== "ENOENT") throw error;
|
|
48
|
+
|
|
49
|
+
for (const fallbackPath of fallbackPaths) {
|
|
50
|
+
if (!fs.existsSync(fallbackPath)) continue;
|
|
51
|
+
if (options === undefined) return originalReadFileSync(fallbackPath);
|
|
52
|
+
return originalReadFileSync(fallbackPath, options);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return originalReadFileSync(...args);
|
|
60
|
+
}) as ReadFileSync;
|
|
61
|
+
|
|
62
|
+
try {
|
|
63
|
+
mutableFs.readFileSync = patchedReadFileSync;
|
|
64
|
+
} catch {
|
|
65
|
+
Object.defineProperty(fs, "readFileSync", {
|
|
66
|
+
value: patchedReadFileSync,
|
|
67
|
+
writable: true,
|
|
68
|
+
configurable: true,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return () => {
|
|
73
|
+
try {
|
|
74
|
+
mutableFs.readFileSync = originalReadFileSync;
|
|
75
|
+
} catch {
|
|
76
|
+
Object.defineProperty(fs, "readFileSync", {
|
|
77
|
+
value: originalReadFileSync,
|
|
78
|
+
writable: true,
|
|
79
|
+
configurable: true,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export async function loadPhoton(): Promise<typeof import("@silvia-odwyer/photon-node") | null> {
|
|
86
|
+
if (photonModule) return photonModule;
|
|
87
|
+
if (loadPromise) return loadPromise;
|
|
88
|
+
|
|
89
|
+
loadPromise = (async () => {
|
|
90
|
+
const restoreReadFileSync = patchPhotonWasmRead();
|
|
91
|
+
try {
|
|
92
|
+
photonModule = await import("@silvia-odwyer/photon-node");
|
|
93
|
+
return photonModule;
|
|
94
|
+
} catch {
|
|
95
|
+
photonModule = null;
|
|
96
|
+
return photonModule;
|
|
97
|
+
} finally {
|
|
98
|
+
restoreReadFileSync();
|
|
99
|
+
}
|
|
100
|
+
})();
|
|
101
|
+
|
|
102
|
+
return loadPromise;
|
|
103
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker-side control lane writer.
|
|
3
|
+
*
|
|
4
|
+
* Control frames go to stderr behind the lane marker, never to stdout. A run
|
|
5
|
+
* that floods stdout with tool output therefore cannot delay a heartbeat or a
|
|
6
|
+
* cancellation acknowledgement behind megabytes of queued bulk frames: the two
|
|
7
|
+
* lanes are separate pipes with separate kernel buffers.
|
|
8
|
+
*
|
|
9
|
+
* Writes are synchronous and best effort. A control frame that cannot be
|
|
10
|
+
* written is not worth aborting a run over, and the orchestrator already treats
|
|
11
|
+
* a missing heartbeat as a stall.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { encodeControlFrame, type WorkerControlFrame } from "./protocol.js";
|
|
15
|
+
|
|
16
|
+
export function emitControlFrame(frame: WorkerControlFrame): void {
|
|
17
|
+
try {
|
|
18
|
+
process.stderr.write(encodeControlFrame(frame));
|
|
19
|
+
} catch {
|
|
20
|
+
// The orchestrator's stall watchdog covers a wedged control lane.
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Worker subprocess entry point.
|
|
4
|
+
*
|
|
5
|
+
* Reads a WorkerSpec JSON document from stdin, re-hydrates the runtime
|
|
6
|
+
* descriptor from the runtime registry (TargetDescriptor is pure data;
|
|
7
|
+
* RuntimeDescriptor carries functions and cannot cross the stdin boundary),
|
|
8
|
+
* builds a WorkerRunInput, and dispatches to `startWorkerRun` from the engine
|
|
9
|
+
* boundary. Emits NDJSON events on stdout.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
// A fleet run puts N of these in the process table at once. Name the process
|
|
13
|
+
// before the spec arrives so an early failure is still identifiable; the agent
|
|
14
|
+
// id is appended once the spec is parsed.
|
|
15
|
+
process.title = "clio-coder-worker";
|
|
16
|
+
|
|
17
|
+
import { AI_AGENT_NAME } from "../core/agent-environment.js";
|
|
18
|
+
import { deleteInjectedCompileCacheFrom } from "../core/compile-cache.js";
|
|
19
|
+
import {
|
|
20
|
+
setGitCommitAttributionEnabled,
|
|
21
|
+
withManagedGitCommitAttributionEnvironment,
|
|
22
|
+
} from "../core/git-commit-attribution.js";
|
|
23
|
+
|
|
24
|
+
process.env.AI_AGENT = AI_AGENT_NAME;
|
|
25
|
+
|
|
26
|
+
// Consume the compile-cache pair the dispatcher injected for THIS entry's
|
|
27
|
+
// module graph. Node read NODE_COMPILE_CACHE at bootstrap, before any of this
|
|
28
|
+
// ran, so the worker's own cache stays enabled; deleting the pair here is what
|
|
29
|
+
// keeps it out of every child this process spawns: bash tool commands, hooks,
|
|
30
|
+
// and external runtime subprocesses (claude, antigravity) that would otherwise
|
|
31
|
+
// inherit the unfiltered environment and write into Clio's cache.
|
|
32
|
+
deleteInjectedCompileCacheFrom(process.env);
|
|
33
|
+
|
|
34
|
+
// Marks this process, and every child a worker's own bash tool spawns, as
|
|
35
|
+
// running inside a dispatched worker rather than the operator's interactive
|
|
36
|
+
// session. `installSkillFromSource` reads this to stamp skill provenance with
|
|
37
|
+
// who performed the install, so a skill a worker drops into a trusted root
|
|
38
|
+
// does not read as operator-installed. Set unconditionally at both local and
|
|
39
|
+
// remote launch, since neither transport otherwise leaves a uniform signal on
|
|
40
|
+
// the worker's own environment.
|
|
41
|
+
process.env.CLIO_CODER_WORKER_RUN = "1";
|
|
42
|
+
|
|
43
|
+
import { setProtectedModelsProvider, setResidencyNoticeSink } from "../engine/apis/residency.js";
|
|
44
|
+
import { startWorkerRun, type WorkerRunInput, workerProviderSupportsTools } from "../engine/worker-runtime.js";
|
|
45
|
+
import { attestedToolSignature } from "../engine/worker-tools.js";
|
|
46
|
+
import { emitControlFrame } from "./control-lane.js";
|
|
47
|
+
import { projectWorkerEventForStdout } from "./event-projection.js";
|
|
48
|
+
import { startWorkerHeartbeat } from "./heartbeat.js";
|
|
49
|
+
import { createWorkerAgentLedgerPort } from "./ledger-mirror.js";
|
|
50
|
+
import { drainStdout, emitEvent } from "./ndjson.js";
|
|
51
|
+
import { endpointIdentityHash, WORKER_PROTOCOL_VERSION, workerSpecDigest } from "./protocol.js";
|
|
52
|
+
import { observeHostIdentity, observeWorkerResourceFacts } from "./resource-facts.js";
|
|
53
|
+
import { resolveWorkerRuntime } from "./runtime-registry.js";
|
|
54
|
+
import { validateRehydratedWorkerRuntime, type WorkerSpec } from "./spec-contract.js";
|
|
55
|
+
import { createOrderedSteerHandler, createWorkerStdinDemux } from "./stdin-demux.js";
|
|
56
|
+
|
|
57
|
+
/** Bound between channel-close abort and forced exit for a hung run. */
|
|
58
|
+
const CHANNEL_CLOSE_EXIT_GRACE_MS = 5000;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The process group an abort must escalate against. A remote launch exports
|
|
62
|
+
* the group leader the login shell established, because `exec` preserves it
|
|
63
|
+
* across the shell replacement. A local launch is spawned detached, which
|
|
64
|
+
* makes this process its own group leader. Windows has no process groups and
|
|
65
|
+
* reports null rather than an id the orchestrator cannot signal.
|
|
66
|
+
*/
|
|
67
|
+
/**
|
|
68
|
+
* Operator-configured labels for this node. They ride the transport
|
|
69
|
+
* environment rather than the WorkerSpec because the node, not the request,
|
|
70
|
+
* is what they describe: the same spec dispatched to two nodes must attest two
|
|
71
|
+
* different label sets.
|
|
72
|
+
*/
|
|
73
|
+
function configuredNodeLabels(): string[] {
|
|
74
|
+
return (process.env.CLIO_CODER_WORKER_LABELS ?? "")
|
|
75
|
+
.split(",")
|
|
76
|
+
.map((label) => label.trim())
|
|
77
|
+
.filter((label) => label.length > 0);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function announcedProcessGroupId(): number | null {
|
|
81
|
+
const declared = Number.parseInt(process.env.CLIO_CODER_WORKER_PGID ?? "", 10);
|
|
82
|
+
if (Number.isSafeInteger(declared) && declared > 0) return declared;
|
|
83
|
+
return process.platform === "win32" ? null : process.pid;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Attest this process, this node, and the route identity it resolved, on the
|
|
88
|
+
* control lane, before any model call. The orchestrator compares every field
|
|
89
|
+
* against the plan it approved and kills a drifting peer instead of running it.
|
|
90
|
+
*/
|
|
91
|
+
function announceWorker(spec: WorkerSpec, input: WorkerRunInput): void {
|
|
92
|
+
emitControlFrame({
|
|
93
|
+
kind: "announce",
|
|
94
|
+
attestation: {
|
|
95
|
+
protocolVersion: WORKER_PROTOCOL_VERSION,
|
|
96
|
+
specVersion: spec.specVersion,
|
|
97
|
+
pid: process.pid,
|
|
98
|
+
processGroupId: announcedProcessGroupId(),
|
|
99
|
+
host: observeHostIdentity(),
|
|
100
|
+
settingsFingerprint: spec.settingsFingerprint,
|
|
101
|
+
specDigest: workerSpecDigest(spec),
|
|
102
|
+
runtimeId: spec.runtimeId,
|
|
103
|
+
targetId: spec.target.id,
|
|
104
|
+
endpointIdentityHash: endpointIdentityHash(spec.target.url),
|
|
105
|
+
wireModelId: spec.wireModelId,
|
|
106
|
+
toolSignature: attestedToolSignature({
|
|
107
|
+
allowedTools: spec.allowedTools,
|
|
108
|
+
toolsSupported: workerProviderSupportsTools(input),
|
|
109
|
+
...(spec.toolProfile !== undefined ? { toolProfile: spec.toolProfile } : {}),
|
|
110
|
+
agentId: spec.agentId,
|
|
111
|
+
task: spec.task,
|
|
112
|
+
}),
|
|
113
|
+
resources: observeWorkerResourceFacts(configuredNodeLabels()),
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
async function main(): Promise<number> {
|
|
119
|
+
// A worker has no TUI, so residency notices go to stderr (the parent
|
|
120
|
+
// captures it for diagnostics) instead of the shared bus, keeping headless
|
|
121
|
+
// reconciliation parity with the interactive path.
|
|
122
|
+
setResidencyNoticeSink((notice) => {
|
|
123
|
+
process.stderr.write(`[worker] residency ${notice.kind}: ${notice.message}\n`);
|
|
124
|
+
if (notice.kind === "will-not-fit") {
|
|
125
|
+
emitEvent({ type: "clio_run_outcome", payload: { outcomeCode: "vram_capacity_fit_failure" } });
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
const demux = createWorkerStdinDemux();
|
|
129
|
+
process.stdin.setEncoding("utf8");
|
|
130
|
+
process.stdin.on("data", (chunk: string) => demux.feed(chunk));
|
|
131
|
+
process.stdin.on("end", () => demux.eof());
|
|
132
|
+
process.stdin.on("error", () => demux.eof());
|
|
133
|
+
process.stdin.resume();
|
|
134
|
+
|
|
135
|
+
const spec = await demux.readSpec();
|
|
136
|
+
process.title = `clio-coder-worker:${spec.agentId}`;
|
|
137
|
+
const attributionEnabled = spec.gitCommitAttribution ?? true;
|
|
138
|
+
setGitCommitAttributionEnabled(attributionEnabled);
|
|
139
|
+
const attribution = withManagedGitCommitAttributionEnvironment(process.env, {
|
|
140
|
+
cwd: process.cwd(),
|
|
141
|
+
enabled: attributionEnabled,
|
|
142
|
+
});
|
|
143
|
+
for (const key of Object.keys(process.env)) {
|
|
144
|
+
if (!(key in attribution.env)) Reflect.deleteProperty(process.env, key);
|
|
145
|
+
}
|
|
146
|
+
Object.assign(process.env, attribution.env);
|
|
147
|
+
if (attribution.diagnostic !== null) {
|
|
148
|
+
process.stderr.write(`[worker] commit attribution: ${attribution.diagnostic}\n`);
|
|
149
|
+
}
|
|
150
|
+
// The worker has no settings view of its own; the dispatcher copied the
|
|
151
|
+
// operator's configured model ids onto the spec so this process protects
|
|
152
|
+
// the same residents as the orchestrator.
|
|
153
|
+
setProtectedModelsProvider(() => spec.protectedModels ?? []);
|
|
154
|
+
const stopHeartbeat = startWorkerHeartbeat();
|
|
155
|
+
|
|
156
|
+
const runtime = await resolveWorkerRuntime(spec.runtimeId);
|
|
157
|
+
if (!runtime) {
|
|
158
|
+
process.stderr.write(`[worker] runtime '${spec.runtimeId}' not registered\n`);
|
|
159
|
+
stopHeartbeat();
|
|
160
|
+
return 2;
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
validateRehydratedWorkerRuntime(spec, runtime);
|
|
164
|
+
} catch (err) {
|
|
165
|
+
process.stderr.write(`[worker] ${err instanceof Error ? err.message : String(err)}\n`);
|
|
166
|
+
stopHeartbeat();
|
|
167
|
+
return 2;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// The agent ledger is push-fed: the orchestrator replays the board on
|
|
171
|
+
// subscription and pushes each admitted entry after it, so the port answers
|
|
172
|
+
// a read from this local mirror instead of stalling a tool call on a round
|
|
173
|
+
// trip. A run with no ledger still gets a port, and it reads null.
|
|
174
|
+
const ledgerPort = createWorkerAgentLedgerPort({
|
|
175
|
+
...(spec.ledger !== undefined ? { ledger: spec.ledger } : {}),
|
|
176
|
+
emitControlFrame,
|
|
177
|
+
});
|
|
178
|
+
demux.onLedgerDelta((entries) => ledgerPort.acceptDelta(entries));
|
|
179
|
+
|
|
180
|
+
const input: WorkerRunInput = {
|
|
181
|
+
systemPrompt: spec.systemPrompt,
|
|
182
|
+
dynamicPromptMessages: spec.dynamicPromptMessages ?? [],
|
|
183
|
+
agentId: spec.agentId,
|
|
184
|
+
task: spec.task,
|
|
185
|
+
target: spec.target,
|
|
186
|
+
runtime,
|
|
187
|
+
wireModelId: spec.wireModelId,
|
|
188
|
+
allowedTools: spec.allowedTools,
|
|
189
|
+
budget: spec.budget,
|
|
190
|
+
...(spec.noSkills !== undefined ? { noSkills: spec.noSkills } : {}),
|
|
191
|
+
...(spec.skillPaths !== undefined ? { skillPaths: [...spec.skillPaths] } : {}),
|
|
192
|
+
...(spec.agentSkills !== undefined ? { agentSkills: [...spec.agentSkills] } : {}),
|
|
193
|
+
...(spec.trustProjectCompatRoots !== undefined ? { trustProjectCompatRoots: spec.trustProjectCompatRoots } : {}),
|
|
194
|
+
...(spec.onPermission !== undefined ? { onPermission: spec.onPermission } : {}),
|
|
195
|
+
...(spec.escalation !== undefined ? { escalation: spec.escalation } : {}),
|
|
196
|
+
...(spec.toolProfile !== undefined ? { toolProfile: spec.toolProfile } : {}),
|
|
197
|
+
...(spec.autonomy !== undefined ? { autonomy: spec.autonomy } : {}),
|
|
198
|
+
...(spec.writeRoots !== undefined ? { writeRoots: [...spec.writeRoots] } : {}),
|
|
199
|
+
...(spec.protectedArtifactState !== undefined
|
|
200
|
+
? {
|
|
201
|
+
protectedArtifactState: {
|
|
202
|
+
version: spec.protectedArtifactState.version,
|
|
203
|
+
artifacts: structuredClone(spec.protectedArtifactState.artifacts),
|
|
204
|
+
},
|
|
205
|
+
}
|
|
206
|
+
: {}),
|
|
207
|
+
...(spec.responseSchema !== undefined ? { responseSchema: spec.responseSchema } : {}),
|
|
208
|
+
...(spec.resultContract !== undefined ? { resultContract: spec.resultContract } : {}),
|
|
209
|
+
...(spec.product !== undefined ? { product: spec.product } : {}),
|
|
210
|
+
agentLedger: ledgerPort,
|
|
211
|
+
cwd: process.cwd(),
|
|
212
|
+
};
|
|
213
|
+
if (spec.modelCapabilities) input.modelCapabilities = spec.modelCapabilities;
|
|
214
|
+
if (spec.sessionId) input.sessionId = spec.sessionId;
|
|
215
|
+
if (spec.apiKey) input.apiKey = spec.apiKey;
|
|
216
|
+
if (spec.thinkingLevel) input.thinkingLevel = spec.thinkingLevel;
|
|
217
|
+
if (spec.runtimeResolution) input.runtimeResolution = spec.runtimeResolution;
|
|
218
|
+
if (spec.middlewareSnapshot) input.middlewareSnapshot = spec.middlewareSnapshot;
|
|
219
|
+
// Attest after the runtime is rehydrated and the run input is fully
|
|
220
|
+
// resolved, so the announced identity describes the run that is about to
|
|
221
|
+
// start, and strictly before startWorkerRun reaches a model.
|
|
222
|
+
announceWorker(spec, input);
|
|
223
|
+
// Slim streaming events before NDJSON serialization: pi's message_update
|
|
224
|
+
// carries the full cumulative message twice (top-level + assistantMessageEvent
|
|
225
|
+
// .partial), which reserializes quadratically on stdout. No worker-stdout
|
|
226
|
+
// consumer reads those cumulative snapshots (see event-projection.ts).
|
|
227
|
+
const handle = startWorkerRun(input, (event) => emitEvent(projectWorkerEventForStdout(event)));
|
|
228
|
+
// The demux buffers lines that landed before the runtime handle existed.
|
|
229
|
+
// Single-shot subprocesses expose no steer method, and an SDK query can race
|
|
230
|
+
// completion. The runtime emits the receipt-bearing clio_steer_received event
|
|
231
|
+
// only after it accepts the message; rejected input is diagnostic-only.
|
|
232
|
+
demux.onSteer(
|
|
233
|
+
createOrderedSteerHandler(
|
|
234
|
+
(text) => handle.steer?.(text) ?? false,
|
|
235
|
+
({ text, sequence }) => emitEvent({ type: "clio_steer_received", payload: { chars: text.trim().length, sequence } }),
|
|
236
|
+
(reason) => process.stderr.write(`[worker] dropped steer: ${reason}\n`),
|
|
237
|
+
),
|
|
238
|
+
);
|
|
239
|
+
// Permission-decision lines resolve a parked escalation. Unknown or
|
|
240
|
+
// duplicate requestIds return false and are dropped without crashing the
|
|
241
|
+
// worker; runtimes without an escalation loop simply have no handler.
|
|
242
|
+
demux.onPermissionDecision(({ requestId, decision }) => {
|
|
243
|
+
const resolved = handle.resolvePermission?.(requestId, decision) ?? false;
|
|
244
|
+
if (!resolved) {
|
|
245
|
+
process.stderr.write(`[worker] dropped permission_decision for unknown request '${requestId}'\n`);
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
// Parent monitor: the control channel closing after the spec means the
|
|
249
|
+
// dispatcher is gone (orchestrator exit, SSH channel drop). Abort the run
|
|
250
|
+
// and bound the exit so no worker is ever stranded on a remote node. The
|
|
251
|
+
// timer is unref'd: it cannot keep an otherwise-finished process alive,
|
|
252
|
+
// but it fires if a hung run is still holding the event loop.
|
|
253
|
+
demux.onChannelClose(() => {
|
|
254
|
+
process.stderr.write("[worker] control channel closed; aborting run\n");
|
|
255
|
+
emitControlFrame({ kind: "cancel_ack", at: Date.now() });
|
|
256
|
+
handle.abort();
|
|
257
|
+
const forceExit = setTimeout(() => process.exit(1), CHANNEL_CLOSE_EXIT_GRACE_MS);
|
|
258
|
+
forceExit.unref?.();
|
|
259
|
+
});
|
|
260
|
+
const onSignal = () => {
|
|
261
|
+
emitControlFrame({ kind: "cancel_ack", at: Date.now() });
|
|
262
|
+
handle.abort();
|
|
263
|
+
};
|
|
264
|
+
process.on("SIGINT", onSignal);
|
|
265
|
+
process.on("SIGTERM", onSignal);
|
|
266
|
+
try {
|
|
267
|
+
const result = await handle.promise;
|
|
268
|
+
return result.exitCode;
|
|
269
|
+
} finally {
|
|
270
|
+
stopHeartbeat();
|
|
271
|
+
process.off("SIGINT", onSignal);
|
|
272
|
+
process.off("SIGTERM", onSignal);
|
|
273
|
+
const dropped = demux.droppedLineCount();
|
|
274
|
+
if (dropped > 0) {
|
|
275
|
+
process.stderr.write(`[worker] dropped ${dropped} unrecognized stdin line(s) after the spec\n`);
|
|
276
|
+
}
|
|
277
|
+
// Best-effort dispose of any LMStudioClient instances cached by the
|
|
278
|
+
// engine so we close their WebSocket sessions cleanly before the worker
|
|
279
|
+
// process exits.
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
main().then(
|
|
284
|
+
async (code) => {
|
|
285
|
+
await drainStdout();
|
|
286
|
+
process.exit(code);
|
|
287
|
+
},
|
|
288
|
+
async (err) => {
|
|
289
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
290
|
+
process.stderr.write(`[worker] fatal: ${msg}\n`);
|
|
291
|
+
await drainStdout();
|
|
292
|
+
process.exit(2);
|
|
293
|
+
},
|
|
294
|
+
);
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker-only event projection applied just before an event is serialized to
|
|
3
|
+
* the worker subprocess NDJSON stdout channel.
|
|
4
|
+
*
|
|
5
|
+
* pi-agent-core's `message_update` event carries the full cumulative assistant
|
|
6
|
+
* message twice: once at the top level (`message: AgentMessage`) and once
|
|
7
|
+
* nested under `assistantMessageEvent.partial: AssistantMessage`. Only the
|
|
8
|
+
* event's `delta` is incremental. Because both cumulative snapshots are
|
|
9
|
+
* re-serialized on every streaming delta, a long worker response amplifies
|
|
10
|
+
* stdout quadratically. Measured against the current emitter: ~72x for a 1KB
|
|
11
|
+
* response, ~531x for 10KB, ~2570x for 100KB (matching the receipt
|
|
12
|
+
* 2runue8q1v7q postmortem, which recorded ~4.67M tokens and 133 tool calls on
|
|
13
|
+
* a canceled native worker run).
|
|
14
|
+
*
|
|
15
|
+
* No worker-stdout consumer reads either cumulative field:
|
|
16
|
+
* - the dispatch board reads only `assistantMessageEvent.type` to stamp the
|
|
17
|
+
* first-token latency (src/interactive/dispatch-board.ts),
|
|
18
|
+
* - the streamed answer and the finish contract are reconstructed from the
|
|
19
|
+
* last assistant `message_end` (src/tools/dispatch.ts,
|
|
20
|
+
* src/domains/dispatch/extension.ts), and
|
|
21
|
+
* - token accounting reads `message_end.message.usage`
|
|
22
|
+
* (src/domains/observability/projection.ts, dispatch-board.ts).
|
|
23
|
+
*
|
|
24
|
+
* The in-process orchestrator surfaces that DO render `assistantMessageEvent.partial`
|
|
25
|
+
* live (chat-loop, ACP server, status state machine) subscribe to their own
|
|
26
|
+
* in-process Agent and never cross this NDJSON seam, so slimming the worker
|
|
27
|
+
* stream leaves interactive streaming untouched. That is why the fix lives here
|
|
28
|
+
* at the worker stdout boundary rather than in the shared engine emit path.
|
|
29
|
+
*
|
|
30
|
+
* This projection drops the two per-delta cumulative snapshots and keeps the
|
|
31
|
+
* incremental `delta` plus the structural discriminants (`type`,
|
|
32
|
+
* `contentIndex`), collapsing worker stdout back to linear size while
|
|
33
|
+
* preserving every consumer contract. Every non-`message_update` event
|
|
34
|
+
* (including the load-bearing `message_end`/`agent_end` transcripts and every
|
|
35
|
+
* `clio_*` event) passes through byte-identical, so unknown-event passthrough
|
|
36
|
+
* and terminal reconstruction are unaffected.
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
import type { AgentEvent } from "../engine/types.js";
|
|
40
|
+
import type { ClioWorkerEvent } from "../engine/worker-events.js";
|
|
41
|
+
|
|
42
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
43
|
+
return typeof value === "object" && value !== null;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function projectWorkerEventForStdout(event: AgentEvent | ClioWorkerEvent): unknown {
|
|
47
|
+
if (!isRecord(event) || event.type !== "message_update") return event;
|
|
48
|
+
// Drop the top-level cumulative AgentMessage snapshot.
|
|
49
|
+
const { message: _message, assistantMessageEvent, ...rest } = event as Record<string, unknown>;
|
|
50
|
+
if (!isRecord(assistantMessageEvent)) return rest;
|
|
51
|
+
// Drop the nested cumulative AssistantMessage snapshot, keep the rest
|
|
52
|
+
// (`type`, `contentIndex`, `delta`, and any once-per-block fields such as
|
|
53
|
+
// `content`/`toolCall` that are not re-emitted per delta).
|
|
54
|
+
const { partial: _partial, ...slimAssistantMessageEvent } = assistantMessageEvent;
|
|
55
|
+
return { ...rest, assistantMessageEvent: slimAssistantMessageEvent };
|
|
56
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker-side heartbeat emitter.
|
|
3
|
+
*
|
|
4
|
+
* Beats ride the stderr control lane on a fixed interval so the orchestrator's
|
|
5
|
+
* watchdog registers activity even when the model is mid-thinking with no
|
|
6
|
+
* streaming output, and so a saturated bulk stdout queue can never starve them.
|
|
7
|
+
* An initial beat fires immediately, so short runs still register once before
|
|
8
|
+
* exit.
|
|
9
|
+
*
|
|
10
|
+
* The interval timer is `unref`'d: it must not keep the worker process alive
|
|
11
|
+
* past the agent run, and the returned stop fn is called from the worker
|
|
12
|
+
* entry once `handle.promise` resolves.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { emitControlFrame } from "./control-lane.js";
|
|
16
|
+
|
|
17
|
+
export function startWorkerHeartbeat(intervalMs = 1000): () => void {
|
|
18
|
+
// A beat carries no timestamp: arrival on the orchestrator's clock is the
|
|
19
|
+
// only instant liveness math may read.
|
|
20
|
+
emitControlFrame({ kind: "heartbeat" });
|
|
21
|
+
const id = setInterval(() => emitControlFrame({ kind: "heartbeat" }), intervalMs);
|
|
22
|
+
id.unref?.();
|
|
23
|
+
return () => clearInterval(id);
|
|
24
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker-side agent-ledger mirror and port.
|
|
3
|
+
*
|
|
4
|
+
* The mirror is the worker's whole view of the board. The orchestrator pushes
|
|
5
|
+
* `ledger_delta` frames down stdin and the mirror dedupes them by sequence, so
|
|
6
|
+
* a read answers locally with an explicit watermark instead of blocking a tool
|
|
7
|
+
* call on a round trip. A read is slightly stale and says so.
|
|
8
|
+
*
|
|
9
|
+
* The control lane is one-way, so a post cannot learn the orchestrator's
|
|
10
|
+
* verdict. The port therefore enforces the body bounds and the per-run post cap
|
|
11
|
+
* locally to give the model a synchronous typed refusal, while the orchestrator
|
|
12
|
+
* enforces the same rules authoritatively at append. Only what the orchestrator
|
|
13
|
+
* admitted is what a receipt counts.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import {
|
|
17
|
+
type AgentLedgerBody,
|
|
18
|
+
type AgentLedgerEntry,
|
|
19
|
+
type AgentLedgerPort,
|
|
20
|
+
parseAgentLedgerBody,
|
|
21
|
+
type WorkerControlFrame,
|
|
22
|
+
} from "./protocol.js";
|
|
23
|
+
|
|
24
|
+
/** Mirrors the orchestrator's per-run cap so a refusal is synchronous. */
|
|
25
|
+
export const WORKER_AGENT_LEDGER_POST_CAP = 20;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Refusal tokens shared with the orchestrator's append path, so a worker-local
|
|
29
|
+
* refusal and the authoritative one a receipt counts read the same.
|
|
30
|
+
*/
|
|
31
|
+
export type WorkerAgentLedgerRefusal = "invalid-body" | "per-run-cap" | "no-ledger";
|
|
32
|
+
|
|
33
|
+
export interface WorkerAgentLedgerMirror {
|
|
34
|
+
/** Merge one pushed batch, deduping by sequence. */
|
|
35
|
+
apply(entries: ReadonlyArray<AgentLedgerEntry>): void;
|
|
36
|
+
entries(): ReadonlyArray<AgentLedgerEntry>;
|
|
37
|
+
/** Highest sequence this mirror has seen. */
|
|
38
|
+
watermark(): number;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function createWorkerAgentLedgerMirror(): WorkerAgentLedgerMirror {
|
|
42
|
+
const bySequence = new Map<number, AgentLedgerEntry>();
|
|
43
|
+
let watermark = 0;
|
|
44
|
+
return {
|
|
45
|
+
apply(entries: ReadonlyArray<AgentLedgerEntry>): void {
|
|
46
|
+
for (const entry of entries) {
|
|
47
|
+
bySequence.set(entry.sequence, entry);
|
|
48
|
+
if (entry.sequence > watermark) watermark = entry.sequence;
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
entries(): ReadonlyArray<AgentLedgerEntry> {
|
|
52
|
+
return [...bySequence.values()].sort((left, right) => left.sequence - right.sequence);
|
|
53
|
+
},
|
|
54
|
+
watermark(): number {
|
|
55
|
+
return watermark;
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface WorkerAgentLedgerPortDeps {
|
|
61
|
+
/** The spec's ledger field. Absent when this run has no ledger at all. */
|
|
62
|
+
ledger?: { id: string; sequence: number };
|
|
63
|
+
emitControlFrame: (frame: WorkerControlFrame) => void;
|
|
64
|
+
/** Defaults to a private mirror; injectable so a caller can feed it deltas. */
|
|
65
|
+
mirror?: WorkerAgentLedgerMirror;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** The shared port plus the stdin-side entry point that feeds the mirror. */
|
|
69
|
+
export interface WorkerAgentLedgerPort extends AgentLedgerPort {
|
|
70
|
+
acceptDelta(entries: ReadonlyArray<AgentLedgerEntry>): void;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function createWorkerAgentLedgerPort(deps: WorkerAgentLedgerPortDeps): WorkerAgentLedgerPort {
|
|
74
|
+
const mirror = deps.mirror ?? createWorkerAgentLedgerMirror();
|
|
75
|
+
const { ledger, emitControlFrame } = deps;
|
|
76
|
+
let posted = 0;
|
|
77
|
+
return {
|
|
78
|
+
post(body: AgentLedgerBody): { ok: true } | { ok: false; reason: WorkerAgentLedgerRefusal } {
|
|
79
|
+
if (ledger === undefined) return { ok: false, reason: "no-ledger" };
|
|
80
|
+
const parsed = parseAgentLedgerBody(body);
|
|
81
|
+
if (!parsed.ok) return { ok: false, reason: "invalid-body" };
|
|
82
|
+
if (posted >= WORKER_AGENT_LEDGER_POST_CAP) return { ok: false, reason: "per-run-cap" };
|
|
83
|
+
posted += 1;
|
|
84
|
+
emitControlFrame({ kind: "ledger_post", body: parsed.body });
|
|
85
|
+
return { ok: true };
|
|
86
|
+
},
|
|
87
|
+
read(): { open: boolean; watermark: number; entries: ReadonlyArray<AgentLedgerEntry> } | null {
|
|
88
|
+
if (ledger === undefined) return null;
|
|
89
|
+
return { open: true, watermark: mirror.watermark(), entries: mirror.entries() };
|
|
90
|
+
},
|
|
91
|
+
acceptDelta(entries: ReadonlyArray<AgentLedgerEntry>): void {
|
|
92
|
+
mirror.apply(entries);
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NDJSON stdout emitter for the worker subprocess. One JSON object per line.
|
|
3
|
+
*
|
|
4
|
+
* Failures while serializing or writing go to stderr so a single bad event does
|
|
5
|
+
* not abort the run. The orchestrator consumes stdout line-by-line; stderr is a
|
|
6
|
+
* separate channel for operator diagnostics.
|
|
7
|
+
*/
|
|
8
|
+
export function emitEvent(event: unknown): void {
|
|
9
|
+
try {
|
|
10
|
+
process.stdout.write(`${JSON.stringify(event)}\n`);
|
|
11
|
+
} catch (err) {
|
|
12
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
13
|
+
process.stderr.write(`[worker] failed to emit event: ${msg}\n`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Resolve once every previously queued stdout line has been handed to the OS,
|
|
19
|
+
* or after timeoutMs when the pipe is wedged (reader gone). Write callbacks
|
|
20
|
+
* are FIFO, so an empty write's callback fires only after all buffered lines
|
|
21
|
+
* flushed. A large single NDJSON line (a big tool result) can still be
|
|
22
|
+
* buffered when the run settles; process.exit would truncate it mid-line.
|
|
23
|
+
*/
|
|
24
|
+
export function drainStdout(timeoutMs = 2000): Promise<void> {
|
|
25
|
+
return new Promise((resolve) => {
|
|
26
|
+
let done = false;
|
|
27
|
+
const finish = (): void => {
|
|
28
|
+
if (done) return;
|
|
29
|
+
done = true;
|
|
30
|
+
clearTimeout(timer);
|
|
31
|
+
resolve();
|
|
32
|
+
};
|
|
33
|
+
const timer = setTimeout(finish, timeoutMs);
|
|
34
|
+
try {
|
|
35
|
+
process.stdout.write("", finish);
|
|
36
|
+
} catch {
|
|
37
|
+
finish();
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|