@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,328 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import type { ResultContract } from "../agents/result-contract.js";
|
|
3
|
+
import type { AgentAutomationAuthority } from "../agents/spec.js";
|
|
4
|
+
import type { ExecutionRole } from "./execution-role.js";
|
|
5
|
+
|
|
6
|
+
export type ExecutionPlanTopology = "parallel" | "sequential" | "pipeline" | "review" | "compete" | "fleet";
|
|
7
|
+
export type ExecutionPlanScope = "readonly" | "workspace";
|
|
8
|
+
export type ExecutionPlanFailurePolicy = "stop" | "continue";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Membership of one statically unrolled bounded loop.
|
|
12
|
+
*
|
|
13
|
+
* A loop in a fleet contract compiles to `maxAttempts` conditional check nodes
|
|
14
|
+
* and `maxAttempts - 1` conditional repair nodes. Unrolling rather than
|
|
15
|
+
* interpreting keeps the plan a deterministic hashed DAG whose waves are
|
|
16
|
+
* computed once and whose every attempt owns a separate receipt; the only
|
|
17
|
+
* runtime decision is whether a declared node is still needed.
|
|
18
|
+
*/
|
|
19
|
+
export interface ExecutionPlanLoopMembership {
|
|
20
|
+
loopId: string;
|
|
21
|
+
role: "check" | "repair";
|
|
22
|
+
/** 1-based attempt ordinal within the loop. */
|
|
23
|
+
attempt: number;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Declared loop, sealed in the plan hash beside the nodes it unrolled to. */
|
|
27
|
+
export interface ExecutionPlanLoop {
|
|
28
|
+
id: string;
|
|
29
|
+
/** What decides continuation: a command's exit code or a gate agent's verdict. */
|
|
30
|
+
checkKind: "code" | "agent";
|
|
31
|
+
maxAttempts: number;
|
|
32
|
+
/** Unrolled check node ids, attempt order. */
|
|
33
|
+
checkStepIds: ReadonlyArray<string>;
|
|
34
|
+
/** Unrolled repair node ids, attempt order; one shorter than the checks. */
|
|
35
|
+
repairStepIds: ReadonlyArray<string>;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** A plan node a model executes. Authority, role, and route are all its own. */
|
|
39
|
+
export interface ExecutionPlanAgentStep {
|
|
40
|
+
kind: "agent";
|
|
41
|
+
id: string;
|
|
42
|
+
agentId: string;
|
|
43
|
+
executionRole: ExecutionRole;
|
|
44
|
+
scope: ExecutionPlanScope;
|
|
45
|
+
expectedResultContract: ResultContract["kind"];
|
|
46
|
+
requestedAuthority: AgentAutomationAuthority;
|
|
47
|
+
/** Required explicit grant; null means the plan is an approval request and cannot execute. */
|
|
48
|
+
approvedAuthority: AgentAutomationAuthority | null;
|
|
49
|
+
dependencies: ReadonlyArray<string>;
|
|
50
|
+
task: string;
|
|
51
|
+
/** Set on nodes a bounded loop unrolled to. */
|
|
52
|
+
loop?: ExecutionPlanLoopMembership;
|
|
53
|
+
/**
|
|
54
|
+
* Declared write boundary, sealed in the plan hash. An empty array is the
|
|
55
|
+
* checkable claim "this step changes nothing"; `undefined` is a plan whose
|
|
56
|
+
* contract declares no boundary at all and is therefore not enforced.
|
|
57
|
+
*/
|
|
58
|
+
writes?: ReadonlyArray<string>;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* A plan node code executes. It names a repo-registered command id and carries
|
|
63
|
+
* no execution role, no authority grant, and no route: it is a subprocess, not
|
|
64
|
+
* a model run, so it never consumes a worker capacity lease and never reaches
|
|
65
|
+
* route history or the routing quality reducer.
|
|
66
|
+
*/
|
|
67
|
+
export interface ExecutionPlanCodeStep {
|
|
68
|
+
kind: "code";
|
|
69
|
+
id: string;
|
|
70
|
+
commandId: string;
|
|
71
|
+
scope: ExecutionPlanScope;
|
|
72
|
+
dependencies: ReadonlyArray<string>;
|
|
73
|
+
loop?: ExecutionPlanLoopMembership;
|
|
74
|
+
/**
|
|
75
|
+
* This node's green result measures the workspace at the moment it ran. Any
|
|
76
|
+
* later step that can change the workspace makes that result stale, and the
|
|
77
|
+
* scheduler re-runs the node before a dependent may treat it as verified.
|
|
78
|
+
*/
|
|
79
|
+
verification?: boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Commit node. Candidate step ids, most recent first; the message is the
|
|
82
|
+
* first candidate that ran and authored one. A commit and a verification
|
|
83
|
+
* both leave the tree they act on unchanged, so neither invalidates a green.
|
|
84
|
+
*/
|
|
85
|
+
commitFrom?: ReadonlyArray<string>;
|
|
86
|
+
/** Declared write boundary; see `ExecutionPlanAgentStep.writes`. */
|
|
87
|
+
writes?: ReadonlyArray<string>;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export type ExecutionPlanStep = ExecutionPlanAgentStep | ExecutionPlanCodeStep;
|
|
91
|
+
|
|
92
|
+
/** Agent steps may omit the discriminant; it normalizes to "agent". */
|
|
93
|
+
export type ExecutionPlanStepInput =
|
|
94
|
+
| (Omit<ExecutionPlanAgentStep, "kind"> & { kind?: "agent" })
|
|
95
|
+
| ExecutionPlanCodeStep;
|
|
96
|
+
|
|
97
|
+
export interface ExecutionPlan {
|
|
98
|
+
/**
|
|
99
|
+
* v4 adds bounded loops, verification staleness, and commit nodes; v3 added
|
|
100
|
+
* the step-kind discriminant and v2 plans were agent-only. A reader that
|
|
101
|
+
* does not understand loop membership would treat every unrolled node as
|
|
102
|
+
* unconditional and run every declared attempt, so the version is a refusal
|
|
103
|
+
* point rather than an optional field.
|
|
104
|
+
*/
|
|
105
|
+
version: 4;
|
|
106
|
+
topology: ExecutionPlanTopology;
|
|
107
|
+
rootTask: string;
|
|
108
|
+
maxWorkers: number;
|
|
109
|
+
onFailure: ExecutionPlanFailurePolicy;
|
|
110
|
+
steps: ReadonlyArray<ExecutionPlanStep>;
|
|
111
|
+
loops: ReadonlyArray<ExecutionPlanLoop>;
|
|
112
|
+
waves: ReadonlyArray<ReadonlyArray<string>>;
|
|
113
|
+
hash: string;
|
|
114
|
+
}
|
|
115
|
+
export type ExecutionPlanInput = Omit<ExecutionPlan, "version" | "waves" | "hash" | "steps" | "loops"> & {
|
|
116
|
+
steps: ReadonlyArray<ExecutionPlanStepInput>;
|
|
117
|
+
loops?: ReadonlyArray<ExecutionPlanLoop>;
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
export function isCodeStep(step: ExecutionPlanStep): step is ExecutionPlanCodeStep {
|
|
121
|
+
return step.kind === "code";
|
|
122
|
+
}
|
|
123
|
+
export function isAgentStep(step: ExecutionPlanStep): step is ExecutionPlanAgentStep {
|
|
124
|
+
return step.kind === "agent";
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Narrow a plan to agent steps, refusing one that carries a code node. Callers
|
|
129
|
+
* that model every step as a route (Scout continuation, the dispatch tool's
|
|
130
|
+
* resolved plan artifact) use this so a code step can never be silently
|
|
131
|
+
* projected into a route it does not have.
|
|
132
|
+
*/
|
|
133
|
+
export function requireAgentSteps(steps: ReadonlyArray<ExecutionPlanStep>): ExecutionPlanAgentStep[] {
|
|
134
|
+
return steps.map((step) => {
|
|
135
|
+
if (step.kind === "code") throw new Error(`execution plan: step '${step.id}' is a code step and has no route`);
|
|
136
|
+
return step;
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function canonicalSteps(steps: ReadonlyArray<ExecutionPlanStepInput>): ExecutionPlanStep[] {
|
|
141
|
+
return steps.map((step) =>
|
|
142
|
+
step.kind === "code"
|
|
143
|
+
? { ...step, kind: "code" as const, dependencies: [...step.dependencies].sort() }
|
|
144
|
+
: { ...step, kind: "agent" as const, dependencies: [...step.dependencies].sort() },
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export function executionPlanWaves(
|
|
149
|
+
steps: ReadonlyArray<{ id: string; dependencies: ReadonlyArray<string>; kind?: "agent" | "code" }>,
|
|
150
|
+
maxWorkers: number,
|
|
151
|
+
): string[][] {
|
|
152
|
+
if (!Number.isInteger(maxWorkers) || maxWorkers < 1)
|
|
153
|
+
throw new Error("execution plan: maxWorkers must be a positive integer");
|
|
154
|
+
if (steps.length === 0) throw new Error("execution plan: plan must contain at least one step");
|
|
155
|
+
const ids = new Set<string>();
|
|
156
|
+
for (const step of steps) {
|
|
157
|
+
if (step.id.trim().length === 0) throw new Error("execution plan: step id must be non-empty");
|
|
158
|
+
if (ids.has(step.id)) throw new Error(`execution plan: duplicate step id '${step.id}'`);
|
|
159
|
+
ids.add(step.id);
|
|
160
|
+
}
|
|
161
|
+
for (const step of steps)
|
|
162
|
+
for (const dependency of step.dependencies) {
|
|
163
|
+
if (!ids.has(dependency))
|
|
164
|
+
throw new Error(`execution plan: step '${step.id}' has missing dependency '${dependency}'`);
|
|
165
|
+
if (dependency === step.id) throw new Error(`execution plan: cycle includes '${step.id}'`);
|
|
166
|
+
}
|
|
167
|
+
const remaining = new Set(steps.map((step) => step.id));
|
|
168
|
+
const completed = new Set<string>();
|
|
169
|
+
const waves: string[][] = [];
|
|
170
|
+
while (remaining.size > 0) {
|
|
171
|
+
const ready = steps.filter((step) => remaining.has(step.id) && step.dependencies.every((id) => completed.has(id)));
|
|
172
|
+
if (ready.length === 0) throw new Error("execution plan: dependency cycle detected");
|
|
173
|
+
// maxWorkers bounds concurrent model runs. Code steps hold no worker
|
|
174
|
+
// capacity lease, so they ride the first chunk of their ready set without
|
|
175
|
+
// displacing an agent step or forcing an extra wave.
|
|
176
|
+
const codeReady = ready.filter((step) => step.kind === "code").map((step) => step.id);
|
|
177
|
+
const agentReady = ready.filter((step) => step.kind !== "code").map((step) => step.id);
|
|
178
|
+
const chunks: string[][] = [];
|
|
179
|
+
for (let offset = 0; offset < agentReady.length; offset += maxWorkers) {
|
|
180
|
+
chunks.push(agentReady.slice(offset, offset + maxWorkers));
|
|
181
|
+
}
|
|
182
|
+
if (chunks.length === 0) chunks.push([]);
|
|
183
|
+
chunks[0] = [...codeReady, ...(chunks[0] ?? [])];
|
|
184
|
+
for (const wave of chunks) {
|
|
185
|
+
waves.push(wave);
|
|
186
|
+
for (const id of wave) {
|
|
187
|
+
remaining.delete(id);
|
|
188
|
+
completed.add(id);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return waves;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/** Reject a loop whose declared membership does not match the compiled nodes. */
|
|
196
|
+
function checkLoops(steps: ReadonlyArray<ExecutionPlanStep>, loops: ReadonlyArray<ExecutionPlanLoop>): void {
|
|
197
|
+
const byId = new Map(steps.map((step) => [step.id, step]));
|
|
198
|
+
const seen = new Set<string>();
|
|
199
|
+
for (const loop of loops) {
|
|
200
|
+
if (seen.has(loop.id)) throw new Error(`execution plan: duplicate loop id '${loop.id}'`);
|
|
201
|
+
seen.add(loop.id);
|
|
202
|
+
if (!Number.isInteger(loop.maxAttempts) || loop.maxAttempts < 1) {
|
|
203
|
+
throw new Error(`execution plan: loop '${loop.id}' must declare a positive attempt bound`);
|
|
204
|
+
}
|
|
205
|
+
if (loop.checkStepIds.length !== loop.maxAttempts || loop.repairStepIds.length !== loop.maxAttempts - 1) {
|
|
206
|
+
throw new Error(`execution plan: loop '${loop.id}' membership does not match its bound of ${loop.maxAttempts}`);
|
|
207
|
+
}
|
|
208
|
+
for (const id of [...loop.checkStepIds, ...loop.repairStepIds]) {
|
|
209
|
+
const step = byId.get(id);
|
|
210
|
+
if (step === undefined) throw new Error(`execution plan: loop '${loop.id}' names unknown step '${id}'`);
|
|
211
|
+
if (step.loop?.loopId !== loop.id) {
|
|
212
|
+
throw new Error(`execution plan: step '${id}' is not a member of loop '${loop.id}'`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
for (const step of steps) {
|
|
217
|
+
if (step.loop !== undefined && !seen.has(step.loop.loopId)) {
|
|
218
|
+
throw new Error(`execution plan: step '${step.id}' belongs to undeclared loop '${step.loop.loopId}'`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Whether a wave's declared boundaries can be enforced honestly.
|
|
225
|
+
*
|
|
226
|
+
* Every step in a wave shares one checkout, and Clio gives a fleet step no
|
|
227
|
+
* private worktree, so a path that changed while two steps ran cannot be
|
|
228
|
+
* attributed to one of them. Two rules follow, and both are refusals at compile
|
|
229
|
+
* time rather than surprises at enforcement time:
|
|
230
|
+
*
|
|
231
|
+
* - A wave is enforced or it is not. One step with an undeclared boundary
|
|
232
|
+
* beside a step that declared one means every change is potentially the
|
|
233
|
+
* undeclared step's, which silently disables enforcement for its neighbour.
|
|
234
|
+
* - At most one step per wave may declare a non-empty allowlist. Disjoint
|
|
235
|
+
* allowlists do not help: nothing proves that the change inside B's paths
|
|
236
|
+
* was written by B rather than by A, so a second writer would let A write
|
|
237
|
+
* anywhere B is allowed. Readonly steps may still run alongside the writer;
|
|
238
|
+
* they claim nothing, so nothing is attributed to them alone.
|
|
239
|
+
*/
|
|
240
|
+
function checkWriteBoundaryWaves(
|
|
241
|
+
steps: ReadonlyArray<ExecutionPlanStep>,
|
|
242
|
+
waves: ReadonlyArray<ReadonlyArray<string>>,
|
|
243
|
+
): void {
|
|
244
|
+
const byId = new Map(steps.map((step) => [step.id, step]));
|
|
245
|
+
for (const [index, wave] of waves.entries()) {
|
|
246
|
+
const members = wave.flatMap((id) => {
|
|
247
|
+
const step = byId.get(id);
|
|
248
|
+
return step === undefined ? [] : [step];
|
|
249
|
+
});
|
|
250
|
+
const declared = members.filter((step) => step.writes !== undefined);
|
|
251
|
+
if (declared.length === 0) continue;
|
|
252
|
+
const undeclared = members.filter((step) => step.writes === undefined);
|
|
253
|
+
if (undeclared.length > 0) {
|
|
254
|
+
throw new Error(
|
|
255
|
+
`execution plan: wave ${index} mixes boundary-enforced steps (${declared
|
|
256
|
+
.map((step) => step.id)
|
|
257
|
+
.join(", ")}) with steps that declare no boundary (${undeclared
|
|
258
|
+
.map((step) => step.id)
|
|
259
|
+
.join(", ")}); they share one checkout, so the undeclared step's writes cannot be told from a violation`,
|
|
260
|
+
);
|
|
261
|
+
}
|
|
262
|
+
const writers = declared.filter((step) => (step.writes?.length ?? 0) > 0);
|
|
263
|
+
if (writers.length > 1) {
|
|
264
|
+
throw new Error(
|
|
265
|
+
`execution plan: wave ${index} schedules ${writers.length} steps that may write (${writers
|
|
266
|
+
.map((step) => step.id)
|
|
267
|
+
.join(
|
|
268
|
+
", ",
|
|
269
|
+
)}); a write boundary is verified by diffing one shared checkout, so concurrent writers cannot be attributed. Order them with dependencies or lower maxWorkers`,
|
|
270
|
+
);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
export function compileExecutionPlan(input: ExecutionPlanInput): ExecutionPlan {
|
|
276
|
+
const steps = canonicalSteps(input.steps);
|
|
277
|
+
const loops = (input.loops ?? []).map((loop) => ({
|
|
278
|
+
...loop,
|
|
279
|
+
checkStepIds: [...loop.checkStepIds],
|
|
280
|
+
repairStepIds: [...loop.repairStepIds],
|
|
281
|
+
}));
|
|
282
|
+
checkLoops(steps, loops);
|
|
283
|
+
const waves = executionPlanWaves(steps, input.maxWorkers);
|
|
284
|
+
checkWriteBoundaryWaves(steps, waves);
|
|
285
|
+
const canonical = {
|
|
286
|
+
version: 4 as const,
|
|
287
|
+
topology: input.topology,
|
|
288
|
+
rootTask: input.rootTask,
|
|
289
|
+
maxWorkers: input.maxWorkers,
|
|
290
|
+
onFailure: input.onFailure,
|
|
291
|
+
steps,
|
|
292
|
+
loops,
|
|
293
|
+
waves,
|
|
294
|
+
};
|
|
295
|
+
return { ...canonical, hash: createHash("sha256").update(JSON.stringify(canonical)).digest("hex") };
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/** Transitive dependency closure of one plan step. */
|
|
299
|
+
export function executionPlanAncestors(plan: ExecutionPlan, stepId: string): ReadonlySet<string> {
|
|
300
|
+
const byId = new Map(plan.steps.map((step) => [step.id, step]));
|
|
301
|
+
const ancestors = new Set<string>();
|
|
302
|
+
const pending = [...(byId.get(stepId)?.dependencies ?? [])];
|
|
303
|
+
while (pending.length > 0) {
|
|
304
|
+
const next = pending.pop();
|
|
305
|
+
if (next === undefined || ancestors.has(next)) continue;
|
|
306
|
+
ancestors.add(next);
|
|
307
|
+
pending.push(...(byId.get(next)?.dependencies ?? []));
|
|
308
|
+
}
|
|
309
|
+
return ancestors;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/** A linear step declares no dependencies; the compiler chains them by position. */
|
|
313
|
+
export type ExecutionPlanLinearStepInput =
|
|
314
|
+
| (Omit<ExecutionPlanAgentStep, "kind" | "dependencies"> & { kind?: "agent" })
|
|
315
|
+
| Omit<ExecutionPlanCodeStep, "dependencies">;
|
|
316
|
+
|
|
317
|
+
export function compileLinearExecutionPlan(
|
|
318
|
+
input: Omit<ExecutionPlanInput, "steps"> & { steps: ReadonlyArray<ExecutionPlanLinearStepInput> },
|
|
319
|
+
): ExecutionPlan {
|
|
320
|
+
const parallel = input.topology === "parallel" || input.topology === "compete";
|
|
321
|
+
return compileExecutionPlan({
|
|
322
|
+
...input,
|
|
323
|
+
steps: input.steps.map((step, index): ExecutionPlanStepInput => {
|
|
324
|
+
const dependencies = parallel || index === 0 ? [] : [input.steps[index - 1]?.id ?? ""];
|
|
325
|
+
return step.kind === "code" ? { ...step, dependencies } : { ...step, dependencies };
|
|
326
|
+
}),
|
|
327
|
+
});
|
|
328
|
+
}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic execution roles and the gate-route policy that depends on them.
|
|
3
|
+
*
|
|
4
|
+
* A route identity is not just a tuple of agent, target, model, runtime, and
|
|
5
|
+
* node. The same Coder on the same target is a different statistical population
|
|
6
|
+
* depending on what it was asked to do: producing work, reviewing someone
|
|
7
|
+
* else's work, judging between candidates, or recovering from a failed attempt.
|
|
8
|
+
* Mixing those samples makes every estimator lie, so the role is a required,
|
|
9
|
+
* typed part of the request, the envelope, the receipt, the route candidate, and
|
|
10
|
+
* the route-history key rather than something inferred at scoring time.
|
|
11
|
+
*
|
|
12
|
+
* This module is pure. It owns the role vocabulary, the derivation rules, the
|
|
13
|
+
* gate decider defaults, and the correlation/independence policy. No I/O, no
|
|
14
|
+
* clock, no engine state.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import type { ResultContract } from "../agents/result-contract.js";
|
|
18
|
+
import type { AgentCapabilityClass } from "../agents/spec.js";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The one execution-role union.
|
|
22
|
+
*
|
|
23
|
+
* `builder` produces the work under review. `reviewer` and `judge` are gate
|
|
24
|
+
* deciders. `researcher` is read-only reconnaissance. `verifier` is a direct
|
|
25
|
+
* typed-validation run outside a gate. `recovery` is any attempt after the
|
|
26
|
+
* first: a retry is not an independent observation of the route, so it never
|
|
27
|
+
* trains ordinary builder quality.
|
|
28
|
+
*/
|
|
29
|
+
export type ExecutionRole = "builder" | "reviewer" | "judge" | "researcher" | "verifier" | "recovery";
|
|
30
|
+
|
|
31
|
+
export const EXECUTION_ROLES: ReadonlyArray<ExecutionRole> = [
|
|
32
|
+
"builder",
|
|
33
|
+
"reviewer",
|
|
34
|
+
"judge",
|
|
35
|
+
"researcher",
|
|
36
|
+
"verifier",
|
|
37
|
+
"recovery",
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
export function isExecutionRole(value: unknown): value is ExecutionRole {
|
|
41
|
+
return typeof value === "string" && (EXECUTION_ROLES as ReadonlyArray<string>).includes(value);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Position inside a review or compete topology. This is where a run sits in the
|
|
46
|
+
* gate graph, which is a different question from what execution role its route
|
|
47
|
+
* statistics belong to: every compete candidate occupies a distinct `candidate`
|
|
48
|
+
* position but they are all ordinary `builder` routes.
|
|
49
|
+
*/
|
|
50
|
+
export type GateTopologyRole = "builder" | "reviewer" | "candidate" | "judge";
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Facts the role is derived from. `capabilityClass` and `resultContractKind`
|
|
54
|
+
* both come from the strict Slice 2 recipe schema, so a role can never be read
|
|
55
|
+
* off free-form prose or a display-only field.
|
|
56
|
+
*/
|
|
57
|
+
export interface ExecutionRoleInput {
|
|
58
|
+
/** Zero-based lineage attempt; anything past the first is recovery work. */
|
|
59
|
+
attempt: number;
|
|
60
|
+
/** Review/compete topology position, which overrides the recipe default. */
|
|
61
|
+
gateRole?: GateTopologyRole;
|
|
62
|
+
capabilityClass: AgentCapabilityClass;
|
|
63
|
+
/** Declared typed postcondition, or null for a recipe that declares none. */
|
|
64
|
+
resultContractKind: ResultContract["kind"] | null;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Derive the one role this run's statistics belong to.
|
|
69
|
+
*
|
|
70
|
+
* Order matters and encodes the policy:
|
|
71
|
+
*
|
|
72
|
+
* 1. A retry or failover attempt is recovery evidence regardless of what it
|
|
73
|
+
* was originally doing. Recovery runs start from a poisoned context, so
|
|
74
|
+
* folding them back into the builder population would understate a route
|
|
75
|
+
* that only ever fails on the first try.
|
|
76
|
+
* 2. Topology overrides the recipe. A Coder placed in the reviewer slot is
|
|
77
|
+
* reviewer evidence, and a compete candidate is a builder no matter which
|
|
78
|
+
* candidate ordinal it holds.
|
|
79
|
+
* 3. Outside a gate, the recipe's own typed contract decides. A declared
|
|
80
|
+
* `verifier-report` is the only contract that makes a direct run a
|
|
81
|
+
* verifier; a Debugger's `debugger-report` deliberately does not, because
|
|
82
|
+
* Slice 2 forbids it from masquerading as a gate verdict.
|
|
83
|
+
* 4. A read-only recipe with no verifier contract is reconnaissance.
|
|
84
|
+
*/
|
|
85
|
+
export function deriveExecutionRole(input: ExecutionRoleInput): ExecutionRole {
|
|
86
|
+
if (input.attempt > 0) return "recovery";
|
|
87
|
+
if (input.gateRole === "reviewer") return "reviewer";
|
|
88
|
+
if (input.gateRole === "judge") return "judge";
|
|
89
|
+
if (input.gateRole === "builder" || input.gateRole === "candidate") return "builder";
|
|
90
|
+
if (input.resultContractKind === "verifier-report") return "verifier";
|
|
91
|
+
if (input.capabilityClass === "read-only") return "researcher";
|
|
92
|
+
return "builder";
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** The strict recipe facts a request needs to derive its role, and nothing else. */
|
|
96
|
+
export type AgentRoleFacts = Pick<ExecutionRoleInput, "capabilityClass" | "resultContractKind">;
|
|
97
|
+
|
|
98
|
+
/** Resolves the strict recipe facts for an agent id, or null when it is unknown. */
|
|
99
|
+
export type AgentRoleFactsResolver = (agentId: string) => AgentRoleFacts | null;
|
|
100
|
+
|
|
101
|
+
/** Project an agent spec lookup into the two fields role derivation reads. */
|
|
102
|
+
export function agentRoleFactsResolver(
|
|
103
|
+
getSpec: (agentId: string) => { capabilityClass: AgentCapabilityClass; resultContract: ResultContract } | null,
|
|
104
|
+
): AgentRoleFactsResolver {
|
|
105
|
+
return (agentId) => {
|
|
106
|
+
const spec = getSpec(agentId);
|
|
107
|
+
return spec === null ? null : { capabilityClass: spec.capabilityClass, resultContractKind: spec.resultContract.kind };
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Derive the role for one request at construction time.
|
|
113
|
+
*
|
|
114
|
+
* A gate position alone determines the role, so a topology never needs the
|
|
115
|
+
* recipe. Outside a gate, an unresolvable agent falls back to `builder`: that is
|
|
116
|
+
* the population with no special standing, so an unknown recipe can never claim
|
|
117
|
+
* verifier or researcher evidence it has not proven. Admission still rejects the
|
|
118
|
+
* unknown agent on its own terms.
|
|
119
|
+
*/
|
|
120
|
+
export function requestExecutionRole(input: {
|
|
121
|
+
agentId: string;
|
|
122
|
+
gateRole?: GateTopologyRole;
|
|
123
|
+
resolveFacts?: AgentRoleFactsResolver;
|
|
124
|
+
}): ExecutionRole {
|
|
125
|
+
const facts = input.resolveFacts?.(input.agentId) ?? null;
|
|
126
|
+
return deriveExecutionRole({
|
|
127
|
+
attempt: 0,
|
|
128
|
+
...(input.gateRole !== undefined ? { gateRole: input.gateRole } : {}),
|
|
129
|
+
capabilityClass: facts?.capabilityClass ?? "workspace-edit",
|
|
130
|
+
resultContractKind: facts?.resultContractKind ?? null,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Apply the recovery rule to an already-derived request role.
|
|
136
|
+
*
|
|
137
|
+
* The request carries the role its first attempt would run under; only the
|
|
138
|
+
* dispatch lifecycle knows which attempt actually launched. Keeping the rule
|
|
139
|
+
* here means the lifecycle transports the role rather than re-deriving it, so
|
|
140
|
+
* there is exactly one definition of what counts as recovery.
|
|
141
|
+
*/
|
|
142
|
+
export function withAttemptRole(requestRole: ExecutionRole, attempt: number): ExecutionRole {
|
|
143
|
+
return attempt > 0 ? "recovery" : requestRole;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* The builtin quality agent every gate decider defaults to.
|
|
148
|
+
*
|
|
149
|
+
* Defaulting a reviewer or judge to the builder agent makes the gate a
|
|
150
|
+
* self-review: the same recipe, the same prompt surface, and usually the same
|
|
151
|
+
* model family grading its own output. That verdict is correlated by
|
|
152
|
+
* construction and Slice 1 already refuses to treat it as a quality label, so
|
|
153
|
+
* the default has to be an agent whose entire contract is independent typed
|
|
154
|
+
* validation.
|
|
155
|
+
*/
|
|
156
|
+
export const DEFAULT_GATE_DECIDER_AGENT_ID = "verifier";
|
|
157
|
+
|
|
158
|
+
/** Resolve a gate decider without ever falling back to the subject builder. */
|
|
159
|
+
export function gateDeciderAgentId(requested: string | undefined): string {
|
|
160
|
+
const trimmed = requested?.trim() ?? "";
|
|
161
|
+
return trimmed.length > 0 ? trimmed : DEFAULT_GATE_DECIDER_AGENT_ID;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Whether a run's own recipe result contract is its postcondition.
|
|
166
|
+
*
|
|
167
|
+
* A gate decider answers the coordinator's question, not its recipe's. A judge
|
|
168
|
+
* returns a winner, which no recipe contract can express, and a reviewer answers
|
|
169
|
+
* whatever contract the gate asks for regardless of which agent was pinned into
|
|
170
|
+
* the slot. The gate validates that answer and fails closed on a malformed one,
|
|
171
|
+
* so also enforcing an inapplicable recipe postcondition would fail the run
|
|
172
|
+
* before its verdict could be read.
|
|
173
|
+
*/
|
|
174
|
+
export function appliesRecipeResultContract(gateRole: GateTopologyRole | undefined): boolean {
|
|
175
|
+
return gateRole !== "reviewer" && gateRole !== "judge";
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/** The route dimensions a gate correlation is measured across. */
|
|
179
|
+
export interface RouteCorrelationFacts {
|
|
180
|
+
agentId: string;
|
|
181
|
+
targetId: string;
|
|
182
|
+
wireModelId: string;
|
|
183
|
+
runtimeId: string;
|
|
184
|
+
nodeId: string;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/** Project a trusted run envelope into the bounded gate-correlation identity. */
|
|
188
|
+
export function routeCorrelationFactsForRun(run: {
|
|
189
|
+
agentId: string;
|
|
190
|
+
targetId: string;
|
|
191
|
+
wireModelId: string;
|
|
192
|
+
runtimeId: string;
|
|
193
|
+
node?: { id: string } | null;
|
|
194
|
+
}): RouteCorrelationFacts {
|
|
195
|
+
return {
|
|
196
|
+
agentId: run.agentId,
|
|
197
|
+
targetId: run.targetId,
|
|
198
|
+
wireModelId: run.wireModelId,
|
|
199
|
+
runtimeId: run.runtimeId,
|
|
200
|
+
nodeId: run.node?.id ?? "local",
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
export interface GateRouteCorrelation {
|
|
205
|
+
agent: boolean;
|
|
206
|
+
target: boolean;
|
|
207
|
+
modelFamily: boolean;
|
|
208
|
+
runtime: boolean;
|
|
209
|
+
node: boolean;
|
|
210
|
+
/**
|
|
211
|
+
* True when the decider is not a proxy for its subject. A shared target,
|
|
212
|
+
* runtime, or node is an operational fact about a small fleet; a shared agent
|
|
213
|
+
* or model family is a shared failure mode, and only those two can make a
|
|
214
|
+
* verdict self-confirming.
|
|
215
|
+
*/
|
|
216
|
+
independent: boolean;
|
|
217
|
+
/** Correlated dimension names, sorted, for artifacts and explanations. */
|
|
218
|
+
dimensions: string[];
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Provider model ids commonly append a dated snapshot. The stable family is the
|
|
223
|
+
* part before that suffix; an unfamiliar id remains its own exact identity.
|
|
224
|
+
*/
|
|
225
|
+
export function modelFamily(model: string): string {
|
|
226
|
+
return model
|
|
227
|
+
.trim()
|
|
228
|
+
.toLowerCase()
|
|
229
|
+
.replace(/[-_:]?\d{4}[-_]?\d{2}[-_]?\d{2}$/u, "");
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
export function gateRouteCorrelation(
|
|
233
|
+
subject: RouteCorrelationFacts,
|
|
234
|
+
decider: RouteCorrelationFacts,
|
|
235
|
+
): GateRouteCorrelation {
|
|
236
|
+
const agent = subject.agentId === decider.agentId;
|
|
237
|
+
const target = subject.targetId === decider.targetId;
|
|
238
|
+
const sameModelFamily = modelFamily(subject.wireModelId) === modelFamily(decider.wireModelId);
|
|
239
|
+
const runtime = subject.runtimeId === decider.runtimeId;
|
|
240
|
+
const node = subject.nodeId === decider.nodeId;
|
|
241
|
+
const dimensions = [
|
|
242
|
+
...(agent ? ["agent"] : []),
|
|
243
|
+
...(target ? ["target"] : []),
|
|
244
|
+
...(sameModelFamily ? ["model-family"] : []),
|
|
245
|
+
...(runtime ? ["runtime"] : []),
|
|
246
|
+
...(node ? ["node"] : []),
|
|
247
|
+
].sort();
|
|
248
|
+
return {
|
|
249
|
+
agent,
|
|
250
|
+
target,
|
|
251
|
+
modelFamily: sameModelFamily,
|
|
252
|
+
runtime,
|
|
253
|
+
node,
|
|
254
|
+
independent: !agent && !sameModelFamily,
|
|
255
|
+
dimensions,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Deterministic soft preference for an independent decider route.
|
|
261
|
+
*
|
|
262
|
+
* Independence is a tie-break, never a filter. The caller has already applied
|
|
263
|
+
* every hard constraint and quality floor and passes only the survivors, so this
|
|
264
|
+
* function cannot resurrect a rejected route: it returns one of its inputs or
|
|
265
|
+
* nothing. When no eligible route is independent it returns the caller's first
|
|
266
|
+
* preference unchanged, because a single-target fleet must still be able to run
|
|
267
|
+
* its gate. The correlation is reported separately rather than hidden.
|
|
268
|
+
*/
|
|
269
|
+
export function preferIndependentRoute<T>(
|
|
270
|
+
eligible: ReadonlyArray<T>,
|
|
271
|
+
subject: RouteCorrelationFacts,
|
|
272
|
+
factsOf: (candidate: T) => RouteCorrelationFacts,
|
|
273
|
+
): T | null {
|
|
274
|
+
if (eligible.length === 0) return null;
|
|
275
|
+
const independent = eligible.find((candidate) => gateRouteCorrelation(subject, factsOf(candidate)).independent);
|
|
276
|
+
return independent ?? eligible[0] ?? null;
|
|
277
|
+
}
|