@iowarp/clio-coder 0.4.0 → 0.4.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 +131 -0
- package/CONTRIBUTING.md +59 -36
- package/README.md +407 -375
- package/SECURITY.md +2 -1
- package/dist/{acp-G5WJBNCT.js → acp-TMDQZDIG.js} +14 -14
- package/dist/{agents-FMV2Q5G4.js → agents-5N5NG3XG.js} +45 -34
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-3IDSJEIK.js → auth-Z5CCBXKQ.js} +22 -21
- package/dist/{builtins-XCZWXSC7.js → builtins-K6TNDT24.js} +6 -6
- package/dist/{chunk-GR5G2PVF.js → chunk-2HFQNRV3.js} +15 -10
- package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
- package/dist/{chunk-HJJTYUHX.js → chunk-2NHR3NAY.js} +168 -1406
- package/dist/chunk-2X4RYJTJ.js +39 -0
- package/dist/{chunk-UXMFQ54G.js → chunk-2Z2IKEXI.js} +39 -43
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/chunk-34BHNEE3.js +1846 -0
- package/dist/{chunk-YJX4SHTD.js → chunk-35MSIRKH.js} +9 -4
- package/dist/chunk-3EBYEESD.js +314 -0
- package/dist/{chunk-CTJ4RNAA.js → chunk-3F7VUY77.js} +2 -2
- package/dist/chunk-3KIPBMUA.js +308 -0
- package/dist/chunk-3M6DQK6S.js +362 -0
- package/dist/{chunk-BPKCPIL7.js → chunk-462T4EGZ.js} +3 -3
- package/dist/{chunk-QLFS5GO2.js → chunk-4JDLP6ZS.js} +44 -37
- package/dist/{chunk-LDQ2ZF2M.js → chunk-4O6MANBS.js} +6 -6
- package/dist/{chunk-O6TL7WWY.js → chunk-54ODD65L.js} +6 -6
- package/dist/{chunk-JDG2WCRO.js → chunk-5KW52TEP.js} +5 -5
- package/dist/{chunk-NHLBIGRH.js → chunk-5PFYMY2V.js} +41 -18
- package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
- package/dist/chunk-77QIVUZB.js +1334 -0
- package/dist/{chunk-HWHKMHUA.js → chunk-7BHIY2MW.js} +9 -15
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-VAZSBTKF.js → chunk-AZ4WMN4W.js} +2 -2
- package/dist/{chunk-B7OBL7PK.js → chunk-B74PXLU7.js} +21 -11
- package/dist/{chunk-CY6FY24N.js → chunk-B7HM5Z7T.js} +15 -15
- package/dist/{chunk-ULC6OTWO.js → chunk-BO7Y52RY.js} +88 -27
- package/dist/chunk-BTK3SSSK.js +67 -0
- package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
- package/dist/{chunk-DQITNCXG.js → chunk-BYMNWQ7O.js} +149 -159
- package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
- package/dist/{chunk-Z4TXYIEG.js → chunk-CRFOIAX3.js} +10 -10
- package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/{chunk-3BT2XMV4.js → chunk-CYZW7JHJ.js} +53 -60
- package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-X3YGUTOB.js → chunk-DYHAXKHD.js} +90 -62
- package/dist/{chunk-QBJA7R7N.js → chunk-DZAW46HP.js} +3 -3
- package/dist/{chunk-MLKNTWH2.js → chunk-DZEK6CJN.js} +22 -22
- package/dist/{chunk-K5C3NCBD.js → chunk-E7GT7O5N.js} +5 -5
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-F2I26BDK.js +66 -0
- package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-32KWKNSF.js → chunk-FVDGR2ZL.js} +4 -4
- package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
- package/dist/{chunk-SJ5ZKQ4S.js → chunk-HIICAHCJ.js} +2 -2
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-WZR7K7ZX.js → chunk-HKMD33FO.js} +32 -83
- package/dist/chunk-HLAFFSEK.js +360 -0
- package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
- package/dist/{chunk-KFZI4NIL.js → chunk-I64IFBLB.js} +152 -31
- package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
- package/dist/{chunk-BUMFYQFY.js → chunk-I66ZTYNP.js} +543 -267
- package/dist/{chunk-2OQE55CK.js → chunk-I7XBWTYH.js} +2 -2
- package/dist/{chunk-GKF55TAZ.js → chunk-IDNA72AH.js} +104 -3
- package/dist/{chunk-GCSMB2KY.js → chunk-IKOZFYBN.js} +1 -1
- package/dist/{chunk-J4W7KFM7.js → chunk-IKSLQ4XV.js} +5439 -3475
- package/dist/{chunk-6DB53AJS.js → chunk-IMXMHHMQ.js} +171 -30
- package/dist/{chunk-AB44T6BB.js → chunk-JBCS7CRR.js} +8 -7
- package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
- package/dist/{chunk-SP2RXXYO.js → chunk-JWJGP5DQ.js} +10 -10
- package/dist/{chunk-HZHHCK24.js → chunk-KKOJXO6R.js} +527 -325
- package/dist/chunk-KPXDY6QF.js +47 -0
- package/dist/{chunk-LQ3DZAMX.js → chunk-LJID3DYZ.js} +8 -2
- package/dist/{chunk-7MCTRUCE.js → chunk-M2DAX4F6.js} +2 -2
- package/dist/{chunk-VEO4AP2K.js → chunk-M2WXEHER.js} +4 -3
- package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
- package/dist/{chunk-YDFRH54B.js → chunk-MCMZMDAC.js} +4 -4
- package/dist/{chunk-J5Q24KAG.js → chunk-MNJGS2IN.js} +5 -6
- package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
- package/dist/chunk-NMJXSHBJ.js +283 -0
- package/dist/{chunk-VYMXRQI6.js → chunk-O3YUNJZ2.js} +88 -100
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-Z2RR6MAK.js → chunk-P75RZCJW.js} +28 -6
- package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
- package/dist/{chunk-DYJP44XW.js → chunk-PGF63K6I.js} +2 -2
- package/dist/chunk-PJX3WQUQ.js +42 -0
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-2JDWVJND.js → chunk-Q4XWMHX6.js} +5 -7
- package/dist/{chunk-W5VSYASO.js → chunk-QQLGQY2A.js} +46 -87
- package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
- package/dist/{chunk-C2LTL2W6.js → chunk-RLYRBIYQ.js} +463 -180
- package/dist/{chunk-4ZG3XFUR.js → chunk-S66XZJOF.js} +14 -23
- package/dist/{chunk-I5VEOC6I.js → chunk-SSEYRH53.js} +13 -14
- package/dist/chunk-SZAA6XDG.js +30 -0
- package/dist/{chunk-CODPRO7Q.js → chunk-TPEQIQIE.js} +7 -7
- package/dist/{chunk-QLL7ILRG.js → chunk-UBRFI4HS.js} +1151 -614
- package/dist/{chunk-O4XIVISU.js → chunk-UH347SHR.js} +227 -47
- package/dist/{chunk-OQBA45DZ.js → chunk-UH632ZYL.js} +2 -2
- package/dist/chunk-UXCU4E3T.js +303 -0
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-IQ7KR472.js → chunk-VIA6RFQZ.js} +8 -13
- package/dist/{chunk-V5DHCITQ.js → chunk-VKPAQYEB.js} +49 -19
- package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-3XML7CDN.js → chunk-W4YEMFBX.js} +3 -3
- package/dist/{chunk-U77AMWDL.js → chunk-W6NIE6OW.js} +44 -23
- package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
- package/dist/{chunk-QREDIESB.js → chunk-X7IARSHT.js} +15 -9
- package/dist/{chunk-3URVFKWK.js → chunk-XE3PCIXH.js} +5 -5
- package/dist/{chunk-FEFIFZTL.js → chunk-XGDPUNND.js} +2 -2
- package/dist/{chunk-F4CKPOEQ.js → chunk-XOXV5GKE.js} +119 -38
- package/dist/chunk-XQRY4DTA.js +657 -0
- package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
- package/dist/{chunk-NQQH3YT7.js → chunk-YJISEZKC.js} +3 -3
- package/dist/{chunk-X75E3D2N.js → chunk-ZGNYYXQ6.js} +18 -16
- package/dist/{chunk-LY4S7GJC.js → chunk-ZNT2M6TG.js} +20 -18
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-IBEBSCYA.js → chunk-ZW4HH5JJ.js} +43 -34
- package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
- package/dist/cli/index.js +38 -37
- package/dist/{clio-2JXHBBY5.js → clio-7VB377CC.js} +12 -13
- package/dist/{code-nav-3YYRMYNF.js → code-nav-YVLCYA7V.js} +86 -18
- package/dist/codewiki/build-worker.js +1 -1
- package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
- package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
- package/dist/{config-QZPCMYSO.js → config-4HVOS65E.js} +112 -63
- package/dist/{configure-TEGEBYCA.js → configure-PIWO7B24.js} +25 -22
- package/dist/{context-E6H5RNMC.js → context-IYEHL3WQ.js} +53 -47
- package/dist/{context-GSXUE4CT.js → context-KQYIWPWT.js} +68 -42
- package/dist/{context-AV7OEZ4D.js → context-N6ZE3LGJ.js} +11 -11
- package/dist/{context-clear-SHIBYK6T.js → context-clear-G4OGZJDS.js} +53 -47
- package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-BWLF6LJP.js} +12 -11
- package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-2QQAITS3.js} +67 -58
- package/dist/{docs-23KQS3XK.js → docs-PD3EXDKU.js} +20 -25
- package/dist/doctor-LHBD36VU.js +773 -0
- package/dist/{eval-TFBYQH4H.js → eval-C45FYRJ6.js} +68 -49
- package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-6DEJPLBF.js} +7 -8
- package/dist/{evidence-ERGESKGN.js → evidence-6SHONYAF.js} +50 -44
- package/dist/{evolve-VDXTSYCJ.js → evolve-KRKMV72X.js} +49 -43
- package/dist/{extensions-7BGBHN57.js → extensions-KPZ2UHBB.js} +8 -6
- package/dist/{fleet-2RRVDF2V.js → fleet-IVTCKDHT.js} +93 -79
- package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EDWL3IT7.js} +10 -9
- package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-YP3YEFGK.js} +6 -6
- package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-ZFWKHY2M.js} +19 -15
- package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-FVUNCBML.js} +50 -45
- package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-UN5XED4R.js} +5 -9
- package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-XOWC4HSX.js} +22 -17
- package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-UN3SODEL.js} +48 -43
- package/dist/fleet-view-TWHJKCN6.js +96 -0
- package/dist/{init-DN2WWLFE.js → init-T2QORQ3Y.js} +72 -66
- package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
- package/dist/{interop-OZBKXAYL.js → interop-IN5I2A66.js} +13 -11
- package/dist/{library-YWZG7IMW.js → library-LSCATDLZ.js} +23 -18
- package/dist/{memory-I4C4HMLW.js → memory-HYOKAGGJ.js} +51 -45
- package/dist/{models-CEYXJBO6.js → models-2GPMFYCM.js} +42 -33
- package/dist/{monitor-NZ6GCI3P.js → monitor-E4ASVUJH.js} +56 -50
- package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-DDMPR3PY.js} +2676 -1507
- package/dist/{panes-KY6W3V2E.js → panes-E3RUXOW5.js} +5 -5
- package/dist/panes-IXKLOKA2.js +75 -0
- package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
- package/dist/{reset-DQ6FGCSH.js → reset-OAQP3W4O.js} +7 -8
- package/dist/{resources-BB3MVJMD.js → resources-OTRSN34L.js} +23 -17
- package/dist/{run-H2GQDUER.js → run-5DEYH5QK.js} +95 -84
- package/dist/{share-GTJN6A5O.js → share-IHWTLO3M.js} +26 -19
- package/dist/{skills-L55TEW6R.js → skills-IYMXMKW4.js} +25 -20
- package/dist/{skills-eval-XVXPH2JI.js → skills-eval-DROHSJAR.js} +63 -65
- package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-D7X4L4ZX.js} +21 -16
- package/dist/{slash-commands-ZSGASKJC.js → slash-commands-QBM7UZ3B.js} +38 -33
- package/dist/{steer-RZGSCY4R.js → steer-Z5DO23FJ.js} +3 -3
- package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
- package/dist/{targets-NCPZ644J.js → targets-P2FUC4IL.js} +64 -61
- package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-YREJ3JX2.js} +15 -10
- package/dist/{tools-DAF3DI3C.js → tools-5B7RO6MV.js} +10 -8
- package/dist/{trace-FYVW2MQA.js → trace-YMGMUM6A.js} +101 -8
- package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
- package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
- package/dist/{upgrade-3XPP6OQL.js → upgrade-PXK3S2YM.js} +36 -61
- package/dist/{usage-3NLHGTU2.js → usage-ME5MPXGX.js} +58 -53
- package/dist/{verifiers-SSQONKRT.js → verifiers-BVZ7IWOO.js} +10 -9
- package/dist/{verify-3U6J7FZI.js → verify-5K7ZKQFC.js} +9 -8
- package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPARV2K7.js} +2 -3
- package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-F5W5QTYY.js} +74 -70
- package/dist/{with-panes-MKB46MPQ.js → with-panes-BYOJCLAM.js} +78 -246
- package/dist/worker/entry.js +83 -63
- package/docs/README.md +176 -81
- package/docs/{acp.md → architecture/acp.md} +36 -20
- package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
- package/docs/{architecture.md → architecture/architecture.md} +43 -22
- package/docs/{artifact-placement.md → architecture/artifact-placement.md} +26 -23
- package/docs/architecture/artifact-versions.md +90 -0
- package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
- package/docs/{context-engine.md → architecture/context-engine.md} +25 -25
- package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
- package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
- package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
- package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
- package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
- package/docs/{model-catalog.md → architecture/model-catalog.md} +40 -17
- package/docs/{observability.md → architecture/observability.md} +26 -13
- package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
- package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +55 -20
- package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +35 -24
- package/docs/{safety-model.md → architecture/safety-model.md} +20 -15
- package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
- package/docs/architecture/time-conventions.md +125 -0
- package/docs/{trace-store.md → architecture/trace-store.md} +26 -13
- package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
- package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
- package/docs/{built-in-agents.md → guide/built-in-agents.md} +70 -46
- package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +73 -62
- package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -444
- package/docs/guide/configuration-reference.md +1158 -0
- package/docs/{environment-variables.md → guide/environment-variables.md} +31 -27
- package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +8 -3
- package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
- package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +47 -49
- package/docs/{glossary.md → guide/glossary.md} +14 -11
- package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +45 -14
- package/docs/guide/panes-and-files.md +290 -0
- package/docs/{proactive-memory.md → guide/proactive-memory.md} +79 -66
- package/docs/{resource-library.md → guide/resource-library.md} +13 -4
- package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +7 -3
- package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
- package/docs/{troubleshooting.md → guide/troubleshooting.md} +10 -5
- package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +13 -10
- package/docs/history/release-cut-checklist.md +207 -0
- package/docs/{development-pipeline.md → process/development-pipeline.md} +24 -26
- package/docs/process/documentation-coverage.md +100 -0
- package/docs/process/documentation-guide.md +187 -0
- package/docs/{eval-runner.md → process/eval-runner.md} +41 -50
- package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
- package/docs/{evolution.md → process/evolution.md} +2 -2
- package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +17 -10
- package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
- package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
- package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
- package/evals/README.md +5 -0
- package/evals/behavioral-corpus-grader.mjs +103 -0
- package/evals/behavioral-machinery-baseline.json +2276 -0
- package/evals/behavioral-machinery-driver.ts +250 -0
- package/evals/behavioral-machinery-support.ts +253 -0
- package/evals/behavioral-machinery.yaml +614 -0
- package/evals/behavioral-model-negative-control.yaml +68 -0
- package/evals/behavioral-model.yaml +216 -0
- package/evals/fixtures/behavioral-facts.txt +3 -0
- package/evals/fixtures/behavioral-main.ts +7 -0
- package/evals/fixtures/decoy/note.txt +2 -0
- package/evals/fixtures/private/credentials.txt +1 -0
- package/evals/tracked-metrics-baseline.yaml +229 -0
- package/evals/tracked-metrics-grader.mjs +129 -0
- package/package.json +13 -21
- package/skills/README.md +51 -42
- package/skills/coding/ast-grep/SKILL.md +9 -3
- package/skills/coding/coding-standards/SKILL.md +9 -3
- package/skills/coding/prototype/SKILL.md +9 -3
- package/skills/coding/tdd/SKILL.md +9 -3
- package/skills/context/context-handoff/SKILL.md +13 -4
- package/skills/context/context-handoff/evals.md +3 -3
- package/skills/context/context-prime/SKILL.md +9 -3
- package/skills/context/context-prime/evals.md +2 -2
- package/skills/git/file-ticket/SKILL.md +10 -5
- package/skills/git/file-ticket/evals.md +2 -2
- package/skills/git/fix-issue/SKILL.md +12 -5
- package/skills/git/fix-issue/evals.md +4 -4
- package/skills/git/resolve-merge-conflicts/SKILL.md +9 -3
- package/skills/git/resolve-merge-conflicts/evals.md +2 -2
- package/skills/git/ship/SKILL.md +10 -4
- package/skills/git/ship/evals.md +4 -4
- package/skills/git/worktree-create/SKILL.md +8 -3
- package/skills/git/worktree-create/evals.md +6 -6
- package/skills/git/worktree-merge/SKILL.md +8 -3
- package/skills/git/worktree-merge/evals.md +6 -6
- package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +22 -12
- package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +5 -4
- package/skills/meta/clio-coder-test/SKILL.md +146 -0
- package/skills/meta/{clio-test → clio-coder-test}/evals.md +10 -5
- package/skills/meta/clio-coder-test/references/harness.md +102 -0
- package/skills/meta/clio-coder-test/references/test-map.md +96 -0
- package/skills/meta/credentials/SKILL.md +10 -3
- package/skills/meta/find-skills/SKILL.md +9 -3
- package/skills/meta/herdr/SKILL.md +9 -3
- package/skills/meta/skill-craft/SKILL.md +39 -16
- package/skills/planning/architecture/SKILL.md +9 -3
- package/skills/planning/backlog/SKILL.md +9 -3
- package/skills/planning/prd/SKILL.md +9 -3
- package/skills/planning/product-intent/SKILL.md +9 -3
- package/skills/planning/tech-spec/SKILL.md +9 -3
- package/skills/registry.yaml +66 -66
- package/skills/research/arxiv-literature/SKILL.md +9 -3
- package/skills/research/experiment-protocol/SKILL.md +10 -3
- package/skills/research/scientific-debugging/SKILL.md +10 -3
- package/skills/research/scientific-debugging/evals.md +2 -2
- package/skills/research/scientific-modernization/SKILL.md +10 -3
- package/skills/skill-marketplace.json +285 -66
- package/skills/workflow/cut-it/SKILL.md +11 -3
- package/skills/workflow/design-council/SKILL.md +12 -3
- package/skills/workflow/grill-me/SKILL.md +9 -3
- package/skills/workflow/workflow-distiller/SKILL.md +9 -3
- package/src/cli/acp.ts +2 -2
- package/src/cli/args.ts +2 -2
- package/src/cli/auth.ts +2 -2
- package/src/cli/bootstrap-generate.ts +6 -6
- package/src/cli/clio.ts +6 -1
- package/src/cli/config-inspect.ts +68 -15
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure.ts +27 -31
- package/src/cli/default-target.ts +1 -1
- package/src/cli/docs.ts +28 -20
- package/src/cli/doctor-naming.ts +323 -0
- package/src/cli/doctor-panes.ts +46 -14
- package/src/cli/doctor-toolchain.ts +31 -10
- package/src/cli/doctor.ts +15 -1
- package/src/cli/eval-inventory.ts +8 -8
- package/src/cli/eval.ts +1 -2
- package/src/cli/evidence-detail.ts +1 -1
- package/src/cli/evidence-inventory.ts +1 -1
- package/src/cli/extensions.ts +2 -1
- package/src/cli/fleet-decisions.ts +1 -1
- package/src/cli/fleet-inspect.ts +1 -1
- package/src/cli/fleet-preflight.ts +1 -1
- package/src/cli/fleet-verify.ts +1 -1
- package/src/cli/fleet-view.ts +40 -23
- package/src/cli/fleet.ts +9 -6
- package/src/cli/index.ts +2 -1
- package/src/cli/internal-dispatch.ts +3 -4
- package/src/cli/interop-inspect.ts +2 -2
- package/src/cli/models.ts +3 -3
- package/src/cli/modes/print.ts +1 -1
- package/src/cli/panes.ts +19 -5
- package/src/cli/reset.ts +1 -1
- package/src/cli/run.ts +13 -17
- package/src/cli/share.ts +6 -2
- package/src/cli/skills-eval.ts +14 -14
- package/src/cli/targets.ts +25 -30
- package/src/cli/trace-inspect.ts +1 -1
- package/src/cli/trace.ts +96 -4
- package/src/cli/uninstall.ts +2 -2
- package/src/cli/upgrade.ts +29 -34
- package/src/cli/usage.ts +2 -2
- package/src/cli/validate-model.ts +1 -1
- package/src/cli/verifiers-inspect.ts +1 -1
- package/src/cli/wiki-generate.ts +6 -6
- package/src/core/artifact-paths.ts +1 -1
- package/src/core/bash-exec.ts +132 -87
- package/src/core/boot-trace.ts +3 -3
- package/src/core/bus-events.ts +51 -6
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1066 -886
- package/src/core/defaults.ts +326 -530
- package/src/core/dispatch-outcome.ts +16 -0
- package/src/core/domain-loader.ts +6 -4
- package/src/core/event-bus.ts +1 -1
- package/src/core/file-references.ts +78 -88
- package/src/core/git-commit-attribution.ts +3 -9
- package/src/core/guardrails.ts +33 -52
- package/src/core/naming-compat.ts +45 -0
- package/src/core/naming-events.ts +62 -0
- package/src/core/prompt-hint.ts +9 -0
- package/src/core/recent-models.ts +1 -7
- package/src/core/residency-protection.ts +4 -8
- package/src/core/resolve-config-value.ts +1 -1
- package/src/core/response-model-id.ts +0 -14
- package/src/core/session-routing.ts +84 -74
- package/src/core/skill-activation.ts +18 -0
- package/src/core/termination.ts +4 -4
- package/src/core/timers.ts +2 -12
- package/src/domains/agents/builtins/architect.md +2 -3
- package/src/domains/agents/builtins/coder.md +3 -2
- package/src/domains/agents/builtins/debugger.md +2 -2
- package/src/domains/agents/builtins/documenter.md +2 -2
- package/src/domains/agents/builtins/git-master.md +1 -1
- package/src/domains/agents/builtins/oracle.md +1 -1
- 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 +2 -2
- package/src/domains/agents/builtins/verifier.md +2 -2
- package/src/domains/agents/builtins/wiki-writer.md +1 -1
- package/src/domains/agents/catalog.ts +14 -26
- package/src/domains/agents/contract.ts +2 -0
- package/src/domains/agents/extension.ts +26 -4
- package/src/domains/agents/registry.ts +7 -7
- package/src/domains/agents/result-contract.ts +1 -1
- package/src/domains/agents/spec.ts +0 -11
- package/src/domains/config/classify.ts +35 -47
- package/src/domains/config/extension.ts +5 -5
- package/src/domains/config/keybindings.ts +56 -47
- package/src/domains/config/watcher.ts +1 -1
- package/src/domains/context/codewiki/indexer.ts +1 -1
- package/src/domains/context/extension.ts +3 -6
- package/src/domains/context/prompt-context.ts +1 -1
- package/src/domains/context/wiki/assemble.ts +2 -2
- package/src/domains/context/working-set/path-index.ts +1 -0
- package/src/domains/context/working-set/replay/metrics.ts +0 -4
- package/src/domains/context/working-set/replay/report.ts +1 -1
- package/src/domains/context/working-set/replay/synthetic.ts +2 -2
- package/src/domains/dispatch/active-route-planner.ts +2 -2
- package/src/domains/dispatch/agent-candidates.ts +1 -1
- package/src/domains/dispatch/agent-ledger-store.ts +1 -1
- package/src/domains/dispatch/agent-ledger.ts +1 -1
- package/src/domains/dispatch/assignment.ts +5 -5
- package/src/domains/dispatch/capability-match.ts +10 -0
- package/src/domains/dispatch/capacity-lease.ts +2 -5
- package/src/domains/dispatch/code-step.ts +1 -1
- package/src/domains/dispatch/contract.ts +2 -2
- package/src/domains/dispatch/extension.ts +169 -82
- package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
- package/src/domains/dispatch/fleet-preflight.ts +8 -17
- package/src/domains/dispatch/fleet-run.ts +0 -7
- package/src/domains/dispatch/gate-decisions.ts +25 -14
- package/src/domains/dispatch/host-verification.ts +435 -39
- package/src/domains/dispatch/intent-requirements.ts +10 -0
- package/src/domains/dispatch/intent.ts +18 -1
- package/src/domains/dispatch/joint-route-resolver.ts +1 -1
- package/src/domains/dispatch/path-scope.ts +220 -70
- package/src/domains/dispatch/placement.ts +2 -2
- package/src/domains/dispatch/receipt-findings.ts +1 -1
- package/src/domains/dispatch/receipt-integrity.ts +20 -8
- package/src/domains/dispatch/reservation-store.ts +0 -23
- package/src/domains/dispatch/route-decision.ts +1 -1
- package/src/domains/dispatch/route-history.ts +1 -1
- package/src/domains/dispatch/route-policy.ts +1 -1
- package/src/domains/dispatch/route-readiness.ts +0 -28
- package/src/domains/dispatch/run-event-journal.ts +9 -19
- package/src/domains/dispatch/state.ts +2 -3
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +47 -40
- package/src/domains/dispatch/types.ts +58 -6
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +10 -4
- package/src/domains/eval/compare/thresholds.ts +0 -8
- package/src/domains/eval/execution-provenance.ts +1 -1
- package/src/domains/eval/metrics/token-stream.ts +0 -7
- package/src/domains/eval/report.ts +1 -1
- package/src/domains/eval/runner.ts +1 -1
- package/src/domains/eval/runners/clio-run.ts +7 -6
- package/src/domains/eval/runners/external-command.ts +4 -3
- package/src/domains/eval/schema/artifact.ts +1 -1
- package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
- package/src/domains/eval/schema/behavioral.ts +7 -6
- package/src/domains/eval/schema/execution-envelope.ts +4 -2
- package/src/domains/eval/schema/naming.ts +10 -0
- package/src/domains/eval/schema/suite.ts +2 -2
- package/src/domains/eval/schema/validate.ts +9 -5
- package/src/domains/eval/schema/verdict.ts +4 -2
- package/src/domains/eval/store.ts +20 -3
- package/src/domains/eval/suites/run.ts +12 -6
- package/src/domains/eval/types.ts +1 -1
- package/src/domains/eval/workspaces/git.ts +1 -1
- package/src/domains/eval/workspaces/temp-copy.ts +1 -1
- package/src/domains/evidence/build.ts +13 -5
- package/src/domains/evidence/trust-status.ts +10 -1
- package/src/domains/extensions/contract.ts +15 -1
- package/src/domains/extensions/discovery.ts +238 -41
- package/src/domains/extensions/extension.ts +105 -6
- package/src/domains/extensions/index.ts +24 -0
- package/src/domains/extensions/integrity.ts +189 -0
- package/src/domains/extensions/manager.ts +17 -1
- package/src/domains/extensions/resource-path.ts +27 -0
- package/src/domains/extensions/resources.ts +18 -38
- package/src/domains/extensions/snapshot-store.ts +39 -0
- package/src/domains/extensions/snapshot.ts +180 -0
- package/src/domains/extensions/state.ts +385 -57
- package/src/domains/extensions/types.ts +118 -1
- package/src/domains/interop/consent.ts +7 -7
- package/src/domains/interop/extension.ts +1 -1
- package/src/domains/lifecycle/doctor.ts +27 -21
- package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
- package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
- package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
- package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
- package/src/domains/lifecycle/migrations/index.ts +22 -1
- package/src/domains/lifecycle/naming-history.ts +153 -0
- package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
- package/src/domains/lifecycle/naming-resources.ts +276 -0
- package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
- package/src/domains/lifecycle/naming-yazi.ts +86 -0
- package/src/domains/lifecycle/upgrade-notice.ts +1 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- package/src/domains/middleware/contract.ts +26 -0
- package/src/domains/middleware/extension.ts +24 -24
- package/src/domains/middleware/hook-receipts.ts +27 -4
- package/src/domains/middleware/hooks-io.ts +65 -32
- package/src/domains/middleware/hooks.ts +64 -0
- package/src/domains/middleware/index.ts +35 -4
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/registrations.ts +326 -0
- package/src/domains/middleware/runtime.ts +30 -2
- package/src/domains/middleware/snapshot.ts +20 -7
- package/src/domains/mux/contract.ts +195 -25
- package/src/domains/mux/detect.ts +23 -6
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +7 -1
- package/src/domains/mux/index.ts +21 -1
- package/src/domains/mux/operations.ts +72 -5
- package/src/domains/mux/protocol.ts +19 -6
- package/src/domains/mux/socket-client.ts +167 -19
- package/src/domains/mux/types.ts +49 -6
- package/src/domains/mux/yazi/assets/yazi.toml +2 -2
- package/src/domains/mux/yazi/event-stream.ts +6 -4
- package/src/domains/mux/yazi/profile.ts +1 -1
- package/src/domains/mux/yazi/session.ts +79 -7
- package/src/domains/mux/yazi/theme.ts +117 -17
- package/src/domains/observability/contract.ts +10 -11
- package/src/domains/observability/extension.ts +12 -4
- package/src/domains/observability/out-of-turn-usage.ts +2 -2
- package/src/domains/observability/projection.ts +15 -91
- package/src/domains/observability/trace-store.ts +65 -19
- package/src/domains/prompts/compiler.ts +75 -55
- package/src/domains/prompts/contract.ts +15 -3
- package/src/domains/prompts/extension.ts +100 -12
- package/src/domains/prompts/fragments/identity/clio-worker.md +2 -4
- package/src/domains/prompts/fragments/identity/clio.md +6 -12
- package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
- package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
- package/src/domains/prompts/fragments/operating/contract.md +7 -15
- package/src/domains/prompts/fragments/operating/delegation.md +32 -34
- package/src/domains/prompts/fragments/operating/skills.md +11 -18
- package/src/domains/prompts/fragments/operating/worker.md +1 -8
- package/src/domains/providers/extension.ts +5 -5
- package/src/domains/providers/index.ts +1 -1
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +99 -23
- package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
- package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +671 -106
- package/src/domains/providers/plugins.ts +1 -1
- package/src/domains/providers/resolver.ts +1 -1
- package/src/domains/providers/runtime-resolution.ts +31 -0
- package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
- package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
- package/src/domains/providers/runtimes/common/probe-helpers.ts +9 -4
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
- package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
- package/src/domains/providers/types/cost-provenance.ts +19 -0
- package/src/domains/providers/types/knowledge-base.ts +13 -0
- package/src/domains/providers/types/local-model-quirks.ts +87 -39
- package/src/domains/providers/types/target-descriptor.ts +3 -3
- package/src/domains/resources/extension.ts +1 -1
- package/src/domains/resources/library.ts +6 -6
- package/src/domains/resources/prompts/loader.ts +1 -1
- package/src/domains/resources/skills/content-hash.ts +7 -6
- package/src/domains/resources/skills/evals.ts +1 -1
- package/src/domains/resources/skills/install.ts +36 -12
- package/src/domains/resources/skills/loader.ts +41 -18
- package/src/domains/resources/skills/marketplace.ts +21 -2
- package/src/domains/resources/skills/promotion.ts +214 -0
- package/src/domains/safety/audit.ts +2 -2
- package/src/domains/safety/call-target.ts +1 -1
- package/src/domains/safety/finish-contract.ts +2 -1
- package/src/domains/safety/loop-detector.ts +7 -4
- package/src/domains/safety/run-effects.ts +1 -1
- package/src/domains/scheduling/extension.ts +4 -4
- package/src/domains/session/archive-readers.ts +9 -1
- package/src/domains/session/compaction/branch-summary.ts +4 -0
- package/src/domains/session/compaction/compact.ts +1 -1
- package/src/domains/session/compaction/tokens.ts +4 -0
- package/src/domains/session/context-accounting.ts +1 -1
- package/src/domains/session/decision-board.ts +1 -1
- package/src/domains/session/extension.ts +1 -1
- package/src/domains/session/handoff.ts +2 -2
- package/src/domains/session/prompt-manifest.ts +0 -5
- package/src/domains/session/protected-artifact-journal.ts +12 -6
- package/src/domains/session/retry.ts +1 -1
- package/src/domains/session/task-board.ts +10 -9
- package/src/domains/share/archive.ts +249 -43
- package/src/domains/toolchain/install.ts +1 -1
- package/src/engine/acp/adapter.ts +3 -3
- package/src/engine/acp/event-mapper.ts +3 -3
- package/src/engine/acp/server.ts +89 -35
- package/src/engine/acp/tool-mediator.ts +2 -2
- package/src/engine/acp/types.ts +1 -1
- package/src/engine/alcf-oauth.ts +5 -5
- package/src/engine/antigravity/subprocess-runtime.ts +2 -2
- package/src/engine/api-registry.ts +1 -1
- package/src/engine/apis/llamacpp-residency.ts +4 -23
- package/src/engine/apis/lmstudio.ts +4 -9
- package/src/engine/apis/ollama-native.ts +9 -9
- package/src/engine/apis/openai-completions.ts +30 -27
- package/src/engine/apis/output-budget.ts +8 -18
- package/src/engine/apis/residency.ts +10 -35
- package/src/engine/claude/sdk-module.ts +1 -12
- package/src/engine/claude/sdk-runtime.ts +6 -6
- package/src/engine/claude/subprocess-runtime.ts +1 -1
- package/src/engine/claude/tool-safety.ts +4 -4
- package/src/engine/gemma-channel-filter.ts +19 -0
- package/src/engine/loop-guard.ts +92 -17
- package/src/engine/session.ts +14 -7
- package/src/engine/tui-primitives.ts +1 -1
- package/src/engine/worker-events.ts +6 -6
- package/src/engine/worker-runtime.ts +54 -24
- package/src/engine/worker-tools.ts +3 -1
- package/src/entry/extension-hook-sources.ts +28 -0
- package/src/entry/extension-reload.ts +309 -0
- package/src/entry/orchestrator.ts +163 -120
- package/src/interactive/application-controller.ts +23 -22
- package/src/interactive/bus-notices.ts +10 -3
- package/src/interactive/chat-loop-messages.ts +3 -13
- package/src/interactive/chat-loop.ts +18 -9
- package/src/interactive/chat-panel.ts +37 -14
- package/src/interactive/chat-renderer.ts +71 -7
- package/src/interactive/clio-editor.ts +105 -1
- package/src/interactive/context-activity.ts +8 -6
- package/src/interactive/context-meter.ts +3 -6
- package/src/interactive/context-overlay.ts +1 -1
- package/src/interactive/cost-overlay.ts +1 -1
- package/src/interactive/council-grid.ts +2 -2
- package/src/interactive/dispatch-board.ts +36 -44
- package/src/interactive/editor-bash.ts +21 -0
- package/src/interactive/editor-steer.ts +9 -4
- package/src/interactive/editor-submit.ts +24 -18
- package/src/interactive/external-editor.ts +1 -1
- package/src/interactive/file-reference-completion.ts +360 -0
- package/src/interactive/footer/dashboard.ts +15 -17
- package/src/interactive/footer/notifications.ts +14 -8
- package/src/interactive/footer/widgets.ts +15 -44
- package/src/interactive/interactive-application.ts +116 -61
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +6 -2
- package/src/interactive/interactive-presentation.ts +22 -17
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +65 -17
- package/src/interactive/interactive-subscriptions.ts +1 -1
- package/src/interactive/interactive-tickers.ts +1 -1
- package/src/interactive/keybinding-manager.ts +4 -4
- package/src/interactive/layout.ts +1 -1
- package/src/interactive/memory-overlay.ts +2 -2
- package/src/interactive/modal-marker.ts +2 -21
- package/src/interactive/mutation-preview.ts +1 -1
- package/src/interactive/overlay-frame.ts +4 -12
- package/src/interactive/overlay-general-openers.ts +6 -2
- package/src/interactive/overlay-key-routing.ts +7 -7
- package/src/interactive/overlay-lifecycle.ts +1 -1
- package/src/interactive/overlay-model-selectors.ts +3 -3
- package/src/interactive/overlays/agents.ts +2 -2
- package/src/interactive/overlays/ask-user.ts +25 -11
- package/src/interactive/overlays/context-reset.ts +28 -4
- package/src/interactive/overlays/cwd-fallback.ts +28 -4
- package/src/interactive/overlays/decisions.ts +4 -2
- package/src/interactive/overlays/extensions.ts +9 -1
- package/src/interactive/overlays/fleet-run-approval.ts +3 -3
- package/src/interactive/overlays/handoff-review.ts +2 -2
- package/src/interactive/overlays/help-reference.ts +13 -0
- package/src/interactive/overlays/interop.ts +1 -1
- package/src/interactive/overlays/library-install-confirm.ts +1 -1
- package/src/interactive/overlays/message-picker.ts +1 -1
- package/src/interactive/overlays/model-selector.ts +39 -31
- package/src/interactive/overlays/prompts.ts +10 -4
- package/src/interactive/overlays/session-selector.ts +2 -2
- package/src/interactive/overlays/settings.ts +360 -303
- package/src/interactive/overlays/side-question.ts +2 -2
- package/src/interactive/overlays/skills-hub.ts +8 -8
- package/src/interactive/overlays/tree-selector.ts +2 -2
- package/src/interactive/panes-runtime.ts +145 -43
- package/src/interactive/permission-overlay.ts +2 -2
- package/src/interactive/prompt-cache-identity.ts +88 -0
- package/src/interactive/renderers/retry-status.ts +12 -4
- package/src/interactive/renderers/tool-execution.ts +4 -4
- package/src/interactive/session-transcript.ts +3 -3
- package/src/interactive/slash-autocomplete.ts +454 -165
- package/src/interactive/slash-commands.ts +401 -190
- package/src/interactive/slash-spec.ts +160 -17
- package/src/interactive/status/controller.ts +2 -2
- package/src/interactive/stream-pacing-policy.ts +1 -24
- package/src/interactive/tasks-overlay.ts +20 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/turn-context.ts +41 -26
- package/src/interactive/turn-persistence.ts +2 -2
- package/src/interactive/turn-prewarm.ts +2 -2
- package/src/interactive/turn-runtime.ts +8 -8
- package/src/interactive/turn-state.ts +1 -1
- package/src/interactive/view/artifacts.ts +12 -9
- package/src/interactive/view/view-overlay.ts +13 -10
- package/src/interactive/watch-pane.ts +38 -10
- package/src/interactive/welcome-dashboard.ts +15 -15
- package/src/interactive/worker-progress.ts +4 -4
- package/src/interactive/worker-receipts.ts +1 -1
- package/src/interactive/worker-stream.ts +1 -4
- package/src/interactive/yazi-bridge.ts +72 -11
- package/src/tools/agent-tools.ts +30 -1
- package/src/tools/artifact.ts +2 -2
- package/src/tools/ask-user.ts +6 -6
- package/src/tools/bash.ts +2 -2
- package/src/tools/bootstrap.ts +4 -0
- package/src/tools/builtin-tool-catalog.ts +52 -22
- package/src/tools/codewiki/code-nav-surface.ts +6 -0
- package/src/tools/codewiki/code-nav.ts +99 -13
- package/src/tools/compete-worktrees.ts +27 -17
- package/src/tools/context/docs-engine.ts +20 -7
- package/src/tools/context/index.ts +44 -13
- package/src/tools/core-bootstrap.ts +28 -6
- package/src/tools/credential-present.ts +1 -2
- package/src/tools/dispatch-admission.ts +4 -2
- package/src/tools/dispatch-arguments.ts +6 -2
- package/src/tools/dispatch-plan.ts +48 -15
- package/src/tools/dispatch-run-events.ts +13 -11
- package/src/tools/dispatch-runner.ts +11 -6
- package/src/tools/dispatch-schema.ts +338 -0
- package/src/tools/dispatch-types.ts +3 -0
- package/src/tools/dispatch.ts +9 -254
- package/src/tools/find.ts +1 -6
- package/src/tools/ledger.ts +3 -5
- package/src/tools/monitor-surface.ts +5 -13
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observation.ts +4 -5
- package/src/tools/observers.ts +0 -33
- package/src/tools/panes-surface.ts +4 -11
- package/src/tools/panes.ts +4 -2
- package/src/tools/policy.ts +15 -2
- package/src/tools/read.ts +5 -6
- package/src/tools/registry.ts +30 -7
- package/src/tools/result-shaping.ts +18 -14
- package/src/tools/steer-surface.ts +1 -1
- package/src/tools/task-worktree.ts +28 -7
- package/src/tools/tasks.ts +1 -1
- package/src/tools/truncate.ts +6 -5
- package/src/tools/verify/authoring.ts +3 -6
- package/src/tools/verify/frontend.ts +1 -1
- package/src/tools/verify/surface.ts +6 -12
- package/src/tools/web-fetch-surface.ts +1 -3
- package/src/tools/web-fetch.ts +1 -1
- package/src/worker/entry.ts +4 -3
- package/src/worker/protocol.ts +16 -14
- package/src/worker/spec-contract.ts +2 -2
- package/src/worker/stdin-demux.ts +2 -2
- package/dist/chunk-36EJLSQQ.js +0 -814
- package/dist/chunk-GXNLGKAB.js +0 -571
- package/dist/chunk-K7VKOLQQ.js +0 -15
- package/dist/chunk-PMZCIOCJ.js +0 -25
- package/dist/chunk-SUCTJL45.js +0 -45
- package/dist/chunk-SUW5DORT.js +0 -819
- package/dist/chunk-TZ3SGWZZ.js +0 -48
- package/dist/chunk-UOV2BYIW.js +0 -107
- package/dist/chunk-VFA6GDY5.js +0 -1625
- package/dist/doctor-QOA5FNY5.js +0 -313
- package/dist/fleet-view-ZCON35AG.js +0 -102
- package/dist/panes-HMABYVO4.js +0 -58
- package/docs/artifact-versions.md +0 -67
- package/docs/documentation-coverage.md +0 -46
- package/docs/documentation-guide.md +0 -167
- package/docs/release-cut-checklist.md +0 -193
- package/docs/time-conventions.md +0 -101
- package/skills/meta/clio-test/SKILL.md +0 -133
- package/skills/meta/clio-test/references/harness.md +0 -126
- package/skills/meta/clio-test/references/test-map.md +0 -69
- package/src/engine/apis/degraded-inference.ts +0 -95
|
@@ -77,6 +77,7 @@ import type { PromptsContract } from "../prompts/contract.js";
|
|
|
77
77
|
import { type EffectivePricing, resolveEffectivePricing } from "../providers/catalog.js";
|
|
78
78
|
import {
|
|
79
79
|
type CapabilityFlags,
|
|
80
|
+
canonicalEndpointKey,
|
|
80
81
|
canonicalizeWireModelId,
|
|
81
82
|
type EndpointCapacity,
|
|
82
83
|
endpointCapacityFor,
|
|
@@ -181,7 +182,12 @@ import {
|
|
|
181
182
|
type HeartbeatStatus,
|
|
182
183
|
heartbeatMonotonicAt,
|
|
183
184
|
} from "./heartbeat.js";
|
|
184
|
-
import {
|
|
185
|
+
import {
|
|
186
|
+
type BatchVerificationGate,
|
|
187
|
+
createBatchVerificationGate,
|
|
188
|
+
hostVerificationRejection,
|
|
189
|
+
runHostVerification,
|
|
190
|
+
} from "./host-verification.js";
|
|
185
191
|
import { renderDispatchIntentRequirements } from "./intent-requirements.js";
|
|
186
192
|
import { adaptJointRouteInput } from "./joint-route-adapter.js";
|
|
187
193
|
import {
|
|
@@ -201,6 +207,8 @@ import {
|
|
|
201
207
|
type DispatchPathScope,
|
|
202
208
|
declaredScopeReplacementDiagnostic,
|
|
203
209
|
declaredScopeReplacementNotice,
|
|
210
|
+
inferredScopeParentTokenDiagnostic,
|
|
211
|
+
inferredScopeParentTokenNotice,
|
|
204
212
|
resolveDispatchPathScope,
|
|
205
213
|
} from "./path-scope.js";
|
|
206
214
|
import { deriveEnvelopePhaseDurations, deriveRunPhaseDurations, recordRunTimingBestEffort } from "./phase-timing.js";
|
|
@@ -456,8 +464,8 @@ function calculateUsageCostUsd(meter: RunTokenMeter, pricing: EffectivePricing["
|
|
|
456
464
|
* admit a route before settings are resolved, and it defers to the one place
|
|
457
465
|
* that owns the default rather than restating the number here.
|
|
458
466
|
*/
|
|
459
|
-
|
|
460
|
-
return settings?.
|
|
467
|
+
function admissionMaxOutputTokens(settings: EffectiveSettings): number {
|
|
468
|
+
return settings?.chat.maxOutputTokens ?? DEFAULT_SETTINGS.chat.maxOutputTokens;
|
|
461
469
|
}
|
|
462
470
|
|
|
463
471
|
function conservativeRouteAdmissionEstimateUsd(pricing: EffectivePricing, maxOutputTokens: number): number {
|
|
@@ -509,7 +517,7 @@ function eventContainsFirstModelToken(event: Record<string, unknown>): boolean {
|
|
|
509
517
|
}
|
|
510
518
|
|
|
511
519
|
function eventStartsTool(event: Record<string, unknown>): boolean {
|
|
512
|
-
return event.type === "tool_execution_start" || event.type === "
|
|
520
|
+
return event.type === "tool_execution_start" || event.type === "clio_coder_tool_start";
|
|
513
521
|
}
|
|
514
522
|
|
|
515
523
|
function finitePositive(value: unknown): number | undefined {
|
|
@@ -686,7 +694,7 @@ async function awaitEventDrain(drained: Promise<void>, graceMs = DISPATCH_DRAIN_
|
|
|
686
694
|
function reportDispatchDiagnostic(scope: string, error: unknown): void {
|
|
687
695
|
const message = error instanceof Error ? error.message : String(error);
|
|
688
696
|
try {
|
|
689
|
-
process.stderr.write(`[clio:dispatch] ${scope}: ${message}\n`);
|
|
697
|
+
process.stderr.write(`[clio-coder:dispatch] ${scope}: ${message}\n`);
|
|
690
698
|
} catch {
|
|
691
699
|
// stderr itself is best-effort
|
|
692
700
|
}
|
|
@@ -892,7 +900,7 @@ export interface WorkspaceRootFacts {
|
|
|
892
900
|
* claimed `npm test` then "validated" in 4ms. None of that is a model failure.
|
|
893
901
|
* The harness knows the cwd exactly and was sending it nowhere.
|
|
894
902
|
*/
|
|
895
|
-
|
|
903
|
+
function readWorkspaceRootFacts(
|
|
896
904
|
cwd: string,
|
|
897
905
|
readEntries: (dir: string) => Dirent[] = readDirentsSafely,
|
|
898
906
|
): WorkspaceRootFacts {
|
|
@@ -922,7 +930,7 @@ function readDirentsSafely(dir: string): Dirent[] {
|
|
|
922
930
|
* projection of CLIO-CODER.md: a read-only scout that cannot afford the handbook read
|
|
923
931
|
* still needs its first shell call to land in the right place.
|
|
924
932
|
*/
|
|
925
|
-
|
|
933
|
+
function renderWorkerWorkspaceContext(workspace: WorkspaceRootFacts): string {
|
|
926
934
|
const lines = ["# Workspace", `Root: ${workspace.root}`, "Your process starts here; relative paths resolve from it."];
|
|
927
935
|
if (workspace.entries.length > 0) {
|
|
928
936
|
lines.push(`Top level: ${workspace.entries.join(", ")}${workspace.truncated ? ", …" : ""}`);
|
|
@@ -975,7 +983,7 @@ function renderPipelineInput(input: PipelineInput): PipelineInputRender {
|
|
|
975
983
|
* the command actually printed rather than a summary of it. Like pipeline
|
|
976
984
|
* input, this is data and is never presented as instructions.
|
|
977
985
|
*/
|
|
978
|
-
|
|
986
|
+
function renderPredecessorHandoffs(handoffs: ReadonlyArray<ExecutionHandoff>): WorkerPromptMessage | null {
|
|
979
987
|
if (handoffs.length === 0) return null;
|
|
980
988
|
const body = [
|
|
981
989
|
"Outputs from this step's declared predecessors, in dependency order.",
|
|
@@ -1105,7 +1113,7 @@ export interface WorkerDynamicContext {
|
|
|
1105
1113
|
* the projected "Verification expectations" body (verification-class runs
|
|
1106
1114
|
* only); when off, output is byte-identical to the historical renderer.
|
|
1107
1115
|
*/
|
|
1108
|
-
|
|
1116
|
+
function renderWorkerProjectContext(
|
|
1109
1117
|
project: ProjectStructuredContext,
|
|
1110
1118
|
options: { includeVerification?: boolean } = {},
|
|
1111
1119
|
): string {
|
|
@@ -1147,7 +1155,7 @@ function workerProjectContextIncludesVerification(body: string): boolean {
|
|
|
1147
1155
|
return body.includes("\nVerification expectations:\n");
|
|
1148
1156
|
}
|
|
1149
1157
|
|
|
1150
|
-
|
|
1158
|
+
function buildDynamicPromptMessages(
|
|
1151
1159
|
req: DispatchRequest,
|
|
1152
1160
|
dynamicContext: WorkerDynamicContext = {},
|
|
1153
1161
|
): WorkerPromptMessage[] {
|
|
@@ -1355,7 +1363,7 @@ interface DispatchLifecycleStage {
|
|
|
1355
1363
|
interface AcpDelegationLifecycleStage {
|
|
1356
1364
|
admission: DispatchAdmissionStage;
|
|
1357
1365
|
pathScope: DispatchPathScope;
|
|
1358
|
-
agentConfig: ReturnType<ConfigContract["get"]>["
|
|
1366
|
+
agentConfig: ReturnType<ConfigContract["get"]>["integrations"]["externalAgents"]["entries"][number];
|
|
1359
1367
|
cwd: string;
|
|
1360
1368
|
systemPrompt: string;
|
|
1361
1369
|
dynamicPromptMessages: ReadonlyArray<WorkerPromptMessage>;
|
|
@@ -1603,11 +1611,7 @@ function assertPostRuntimeToolCompatibility(
|
|
|
1603
1611
|
}
|
|
1604
1612
|
|
|
1605
1613
|
function workerToolCallHardCap(settings: EffectiveSettings): number {
|
|
1606
|
-
|
|
1607
|
-
const parsedEnvCap = rawEnvCap && /^[1-9]\d*$/.test(rawEnvCap) ? Number(rawEnvCap) : Number.NaN;
|
|
1608
|
-
return Number.isSafeInteger(parsedEnvCap)
|
|
1609
|
-
? parsedEnvCap
|
|
1610
|
-
: (settings?.guardrails.workerToolCallCap ?? GUARDRAIL_DEFAULTS.workerToolCallCap);
|
|
1614
|
+
return settings?.fleet.limits.toolCallsPerRun ?? GUARDRAIL_DEFAULTS.workerToolCallCap;
|
|
1611
1615
|
}
|
|
1612
1616
|
|
|
1613
1617
|
function resolveEffectiveWorkerBudget(input: {
|
|
@@ -1735,15 +1739,15 @@ function acpRuntimeLimitations(): string[] {
|
|
|
1735
1739
|
}
|
|
1736
1740
|
|
|
1737
1741
|
function readWorkerTargets(settings: ReturnType<ConfigContract["get"]> | undefined): WorkerTargets {
|
|
1738
|
-
const workerDefault = settings?.
|
|
1742
|
+
const workerDefault = settings?.fleet?.default
|
|
1739
1743
|
? {
|
|
1740
|
-
target: settings.
|
|
1741
|
-
model: settings.
|
|
1742
|
-
thinkingLevel: (settings.
|
|
1744
|
+
target: settings.fleet.default.target ?? null,
|
|
1745
|
+
model: settings.fleet.default.model ?? null,
|
|
1746
|
+
thinkingLevel: (settings.fleet.default.thinkingLevel ?? "off") as ThinkingLevel,
|
|
1743
1747
|
}
|
|
1744
1748
|
: null;
|
|
1745
1749
|
const workerProfiles: WorkerProfileMap = {};
|
|
1746
|
-
for (const [name, profile] of Object.entries(settings?.
|
|
1750
|
+
for (const [name, profile] of Object.entries(settings?.fleet?.profiles ?? {})) {
|
|
1747
1751
|
workerProfiles[name] = {
|
|
1748
1752
|
target: profile.target ?? null,
|
|
1749
1753
|
model: profile.model ?? null,
|
|
@@ -1751,7 +1755,7 @@ function readWorkerTargets(settings: ReturnType<ConfigContract["get"]> | undefin
|
|
|
1751
1755
|
};
|
|
1752
1756
|
}
|
|
1753
1757
|
const agentBindings: WorkerAgentBindingMap = {};
|
|
1754
|
-
for (const [agentId, profileName] of Object.entries(settings?.
|
|
1758
|
+
for (const [agentId, profileName] of Object.entries(settings?.fleet?.agentProfiles ?? {})) {
|
|
1755
1759
|
const id = agentId.trim();
|
|
1756
1760
|
const profile = profileName.trim();
|
|
1757
1761
|
if (id.length > 0 && profile.length > 0) agentBindings[id] = profile;
|
|
@@ -1928,17 +1932,17 @@ function buildDispatchWorkerSpec(input: DispatchWorkerSpecInput, config?: Config
|
|
|
1928
1932
|
if (input.req.trustProjectCompatRoots !== undefined) {
|
|
1929
1933
|
spec.trustProjectCompatRoots = input.req.trustProjectCompatRoots;
|
|
1930
1934
|
} else if (settings) {
|
|
1931
|
-
spec.trustProjectCompatRoots = settings.
|
|
1935
|
+
spec.trustProjectCompatRoots = settings.integrations.projectResources.trustProjectImports === true;
|
|
1932
1936
|
}
|
|
1933
|
-
spec.gitCommitAttribution = settings?.
|
|
1937
|
+
spec.gitCommitAttribution = settings?.integrations.git.commitAttribution ?? true;
|
|
1934
1938
|
// Non-stall posture (Symphony §10.5): a dispatched worker has no operator
|
|
1935
1939
|
// to answer a permission prompt by default, so the resolution policy ships
|
|
1936
1940
|
// with the spec and the worker enforces it within bounded time. Under the
|
|
1937
1941
|
// escalate posture the configured timeout/fallback bounds ride along so the
|
|
1938
1942
|
// worker still cannot hang when no operator resolves the ask.
|
|
1939
|
-
spec.onPermission = settings?.
|
|
1943
|
+
spec.onPermission = settings?.fleet.permissions.mode ?? "deny";
|
|
1940
1944
|
if (spec.onPermission === "escalate") {
|
|
1941
|
-
const escalation = settings?.
|
|
1945
|
+
const escalation = settings?.fleet.permissions.escalation;
|
|
1942
1946
|
if (escalation) spec.escalation = { timeoutMs: escalation.timeoutMs, fallback: escalation.fallback };
|
|
1943
1947
|
}
|
|
1944
1948
|
assertRuntimeCanHonorWorkerPermissionMode(input.target.runtime, spec.onPermission);
|
|
@@ -2032,7 +2036,7 @@ function autonomyEnforcementForAcpDelegation(
|
|
|
2032
2036
|
dangerousBypass: true,
|
|
2033
2037
|
};
|
|
2034
2038
|
}
|
|
2035
|
-
// clio-policy applies the exact autonomy mapping to every permission
|
|
2039
|
+
// clio-coder-policy applies the exact autonomy mapping to every permission
|
|
2036
2040
|
// request. deny-all is stricter than every autonomy level, but is still a
|
|
2037
2041
|
// Clio-mediated upper bound rather than an external approximation.
|
|
2038
2042
|
return { grade: "mediated", autonomy, ...authorityEvidence, externalMode: toolGovernance };
|
|
@@ -2426,7 +2430,7 @@ export function createDispatchBundle(
|
|
|
2426
2430
|
const heartbeatIntervalMs = options?.heartbeatIntervalMs ?? DEFAULT_HEARTBEAT_INTERVAL_MS;
|
|
2427
2431
|
const getResilienceCooldownMs = (): number => {
|
|
2428
2432
|
if (options?.resilienceCooldownMs !== undefined) return options.resilienceCooldownMs;
|
|
2429
|
-
const settingsVal = getEffectiveSettings()?.
|
|
2433
|
+
const settingsVal = getEffectiveSettings()?.fleet?.retry.routeCooldownMs;
|
|
2430
2434
|
if (settingsVal !== undefined && settingsVal >= 0) return settingsVal;
|
|
2431
2435
|
return DEFAULT_RESILIENCE_COOLDOWN_MS;
|
|
2432
2436
|
};
|
|
@@ -2500,6 +2504,29 @@ export function createDispatchBundle(
|
|
|
2500
2504
|
return Object.fromEntries(Object.entries(configuredEndpointCapacities()).map(([key, value]) => [key, value.limit]));
|
|
2501
2505
|
}
|
|
2502
2506
|
|
|
2507
|
+
/**
|
|
2508
|
+
* Endpoints still bound by the blind one-slot default have never been
|
|
2509
|
+
* probed by any process, or their record expired. A fresh home carried that
|
|
2510
|
+
* bound into its first batch and refused two tasks on a server running
|
|
2511
|
+
* four, until the operator happened to run `targets --probe`. Probe each
|
|
2512
|
+
* such endpoint once per process, in the background and without the
|
|
2513
|
+
* inference-based reasoning check: the slot count is a header read, and the
|
|
2514
|
+
* model's first dispatch call is seconds away at the earliest. The probe
|
|
2515
|
+
* lands in the provider statuses and the durable slot store, which is where
|
|
2516
|
+
* admission already looks.
|
|
2517
|
+
*/
|
|
2518
|
+
const probedDefaultBoundEndpoints = new Set<string>();
|
|
2519
|
+
function probeEndpointsAtDefaultBound(): void {
|
|
2520
|
+
const capacities = configuredEndpointCapacities();
|
|
2521
|
+
for (const target of getEffectiveSettings()?.targets ?? []) {
|
|
2522
|
+
const key = canonicalEndpointKey(target);
|
|
2523
|
+
if (key === null || capacities[key]?.source !== "local-native-default") continue;
|
|
2524
|
+
if (probedDefaultBoundEndpoints.has(key)) continue;
|
|
2525
|
+
probedDefaultBoundEndpoints.add(key);
|
|
2526
|
+
void providers.probeTarget(target.id, { reasoning: false }).catch(() => undefined);
|
|
2527
|
+
}
|
|
2528
|
+
}
|
|
2529
|
+
|
|
2503
2530
|
function endpointCapacityForTarget(targetId: string): EndpointCapacity | null {
|
|
2504
2531
|
const status = providers.list().find((entry) => entry.target.id === targetId);
|
|
2505
2532
|
const target = status?.target ?? providers.getTarget(targetId);
|
|
@@ -2598,7 +2625,7 @@ export function createDispatchBundle(
|
|
|
2598
2625
|
}
|
|
2599
2626
|
|
|
2600
2627
|
function configuredGlobalCapacity(settings: EffectiveSettings): number {
|
|
2601
|
-
const configured = settings?.
|
|
2628
|
+
const configured = settings?.fleet.concurrency;
|
|
2602
2629
|
return scheduling.maxWorkers?.() ?? (configured === "auto" || configured === undefined ? 4 : Math.max(1, configured));
|
|
2603
2630
|
}
|
|
2604
2631
|
|
|
@@ -2724,7 +2751,7 @@ export function createDispatchBundle(
|
|
|
2724
2751
|
const finalizedCosts: Array<{ usd: number; provenance: import("../providers/index.js").CostProvenance }> = [];
|
|
2725
2752
|
|
|
2726
2753
|
function workersMaxRetries(settings: EffectiveSettings = getEffectiveSettings()): number {
|
|
2727
|
-
const value = settings?.
|
|
2754
|
+
const value = settings?.fleet?.retry.maxRetries;
|
|
2728
2755
|
return typeof value === "number" && Number.isInteger(value) && value >= 0 ? value : 2;
|
|
2729
2756
|
}
|
|
2730
2757
|
|
|
@@ -3369,6 +3396,23 @@ export function createDispatchBundle(
|
|
|
3369
3396
|
agentId: req.agentId,
|
|
3370
3397
|
});
|
|
3371
3398
|
}
|
|
3399
|
+
// A reinterpreted "../" token is the one legacy-mode scope fact that earns
|
|
3400
|
+
// the channel: it fires only where the dispatch used to fail outright, so
|
|
3401
|
+
// it cannot warn on the ordinary intent-less dispatch the comment above
|
|
3402
|
+
// keeps quiet. Anchoring is reported alongside dropping because it is the
|
|
3403
|
+
// half that adds to scope, putting a path in working context that the
|
|
3404
|
+
// prose never literally spelled.
|
|
3405
|
+
const parentTokenDiagnostic = inferredScopeParentTokenDiagnostic(pathScope);
|
|
3406
|
+
if (parentTokenDiagnostic !== null) {
|
|
3407
|
+
reportDispatchDiagnostic("inferred scope parent tokens", new Error(parentTokenDiagnostic));
|
|
3408
|
+
}
|
|
3409
|
+
const parentTokenNotice = inferredScopeParentTokenNotice(pathScope);
|
|
3410
|
+
if (parentTokenNotice !== null) {
|
|
3411
|
+
context.bus.emit(BusChannels.DispatchScopeNotice, {
|
|
3412
|
+
...parentTokenNotice,
|
|
3413
|
+
agentId: req.agentId,
|
|
3414
|
+
});
|
|
3415
|
+
}
|
|
3372
3416
|
}
|
|
3373
3417
|
|
|
3374
3418
|
async function resolveLifecycle(req: DispatchRequest, settings: EffectiveSettings): Promise<DispatchLifecycleStage> {
|
|
@@ -3402,6 +3446,7 @@ export function createDispatchBundle(
|
|
|
3402
3446
|
autoSelected: req.agentSelection?.mode === "auto",
|
|
3403
3447
|
resultContractKind: spec.resultContract.kind,
|
|
3404
3448
|
specs: agents.listSpecs(),
|
|
3449
|
+
intent: req.intent ?? null,
|
|
3405
3450
|
});
|
|
3406
3451
|
if (capabilityMismatch?.verdict === "refuse") throw new Error(capabilityMismatch.detail);
|
|
3407
3452
|
const pathScope = resolveDispatchPathScope(req);
|
|
@@ -3418,11 +3463,11 @@ export function createDispatchBundle(
|
|
|
3418
3463
|
providers,
|
|
3419
3464
|
);
|
|
3420
3465
|
enforceCapabilityGate(target.target.id, target.modelCapabilities, req.requiredCapabilities);
|
|
3421
|
-
assertRuntimeCanHonorWorkerPermissionMode(target.runtime, settings?.
|
|
3466
|
+
assertRuntimeCanHonorWorkerPermissionMode(target.runtime, settings?.fleet.permissions.mode ?? "deny");
|
|
3422
3467
|
assertWorkerBudgetEnforceable(target.runtime, spec.budget !== null || req.budget !== undefined);
|
|
3423
3468
|
|
|
3424
3469
|
const cwd = req.cwd ?? process.cwd();
|
|
3425
|
-
const sessionAutonomy = settings?.autonomy ?? "auto-edit";
|
|
3470
|
+
const sessionAutonomy = settings?.safety.autonomy ?? "auto-edit";
|
|
3426
3471
|
const effectiveAutonomy = clampWorkerAutonomy(sessionAutonomy, req.autonomy);
|
|
3427
3472
|
const effectiveTools = withLedgerToolNarrowing(
|
|
3428
3473
|
effectiveToolNames(admission.allowedTools, target, pathScope.writeBoundaries.length > 0, deniedToolNames(req)),
|
|
@@ -3434,18 +3479,17 @@ export function createDispatchBundle(
|
|
|
3434
3479
|
allowedTools: effectiveTools,
|
|
3435
3480
|
};
|
|
3436
3481
|
const personaBody = workerPersonaBody(req, recipe, effectiveTools);
|
|
3482
|
+
const hasCanonicalContext = effectiveTools.includes(ToolNames.Context);
|
|
3483
|
+
const hasBoundSkills =
|
|
3484
|
+
hasCanonicalContext && recipe.skills !== undefined && recipe.skills.length > 0 && req.noSkills !== true;
|
|
3437
3485
|
const compiledWorkerPrompt = await prompts.compileWorkerPrompt({
|
|
3438
3486
|
autonomy: effectiveAutonomy,
|
|
3439
3487
|
providerSupportsTools: target.runtime.kind === "subprocess" ? null : targetToolCapability(target),
|
|
3440
3488
|
toolNames: effectiveTools,
|
|
3441
|
-
toolPromptHints: toolPromptHintsForNames(effectiveTools),
|
|
3442
|
-
hasCanonicalContext
|
|
3443
|
-
hasBoundSkills
|
|
3444
|
-
|
|
3445
|
-
recipe.skills !== undefined &&
|
|
3446
|
-
recipe.skills.length > 0 &&
|
|
3447
|
-
req.noSkills !== true,
|
|
3448
|
-
onPermission: settings?.workers.onPermission ?? "deny",
|
|
3489
|
+
toolPromptHints: toolPromptHintsForNames(effectiveTools, hasBoundSkills ? "bound-worker" : "worker"),
|
|
3490
|
+
hasCanonicalContext,
|
|
3491
|
+
hasBoundSkills,
|
|
3492
|
+
onPermission: settings?.fleet.permissions.mode ?? "deny",
|
|
3449
3493
|
persona: {
|
|
3450
3494
|
id: `persona.${recipe.id}`,
|
|
3451
3495
|
relPath: recipe.filepath,
|
|
@@ -3473,7 +3517,7 @@ export function createDispatchBundle(
|
|
|
3473
3517
|
capabilityClass: spec.capabilityClass,
|
|
3474
3518
|
projectContextTier: tier,
|
|
3475
3519
|
autonomy: effectiveAutonomy,
|
|
3476
|
-
onPermission: settings?.
|
|
3520
|
+
onPermission: settings?.fleet.permissions.mode ?? "deny",
|
|
3477
3521
|
project,
|
|
3478
3522
|
workspace: readWorkspaceRootFacts(cwd),
|
|
3479
3523
|
});
|
|
@@ -3493,7 +3537,7 @@ export function createDispatchBundle(
|
|
|
3493
3537
|
// Match chat-loop's LOCAL_API_KEY_FALLBACK so dispatch-spawned workers can
|
|
3494
3538
|
// reach openai-compat local endpoints (LM Studio, llama.cpp) without
|
|
3495
3539
|
// requiring the user to invent a credential.
|
|
3496
|
-
const apiKey = auth?.apiKey ?? (auth === null ? "clio-local-target" : undefined);
|
|
3540
|
+
const apiKey = auth?.apiKey ?? (auth === null ? "clio-coder-local-target" : undefined);
|
|
3497
3541
|
const runtimeKind: RunKind = target.runtime.kind;
|
|
3498
3542
|
const limitations = runtimeLimitations(runtimeKind, target.runtime.id);
|
|
3499
3543
|
return {
|
|
@@ -3548,16 +3592,16 @@ export function createDispatchBundle(
|
|
|
3548
3592
|
}
|
|
3549
3593
|
}
|
|
3550
3594
|
if (!settings) throw new Error("dispatch: effective settings required for ACP delegation");
|
|
3551
|
-
const configured = settings.
|
|
3595
|
+
const configured = settings.integrations.externalAgents.entries.find((entry) => entry.id === agentId);
|
|
3552
3596
|
if (!configured) throw new Error(`dispatch: ACP delegation agent '${agentId}' not configured`);
|
|
3553
|
-
const toolGovernance = configured.toolGovernance ?? "clio-policy";
|
|
3597
|
+
const toolGovernance = configured.toolGovernance ?? "clio-coder-policy";
|
|
3554
3598
|
if (options?.autonomyOverride === true && toolGovernance === "agent-managed") {
|
|
3555
3599
|
throw new Error(
|
|
3556
|
-
`dispatch: ACP delegation agent '${agentId}' uses toolGovernance='agent-managed', which cannot enforce an explicit one-run autonomy override; choose clio-policy or deny-all governance, or omit --autonomy`,
|
|
3600
|
+
`dispatch: ACP delegation agent '${agentId}' uses toolGovernance='agent-managed', which cannot enforce an explicit one-run autonomy override; choose clio-coder-policy or deny-all governance, or omit --autonomy`,
|
|
3557
3601
|
);
|
|
3558
3602
|
}
|
|
3559
3603
|
const admission = resolveDelegationAdmissionStage(req, safety);
|
|
3560
|
-
const sessionAutonomy = settings.autonomy ?? "auto-edit";
|
|
3604
|
+
const sessionAutonomy = settings.safety.autonomy ?? "auto-edit";
|
|
3561
3605
|
const autonomy = clampWorkerAutonomy(sessionAutonomy, req.autonomy);
|
|
3562
3606
|
if (toolGovernance === "agent-managed" && autonomy !== sessionAutonomy) {
|
|
3563
3607
|
throw new Error(
|
|
@@ -3755,15 +3799,15 @@ export function createDispatchBundle(
|
|
|
3755
3799
|
if (eventContainsFirstModelToken(event)) markObservedPhase("firstModelTokenAt");
|
|
3756
3800
|
if (eventStartsTool(event)) markObservedPhase("firstToolAt");
|
|
3757
3801
|
}
|
|
3758
|
-
if (event.type === "
|
|
3802
|
+
if (event.type === "clio_coder_tool_start" && event.payload && typeof event.payload.tool === "string") {
|
|
3759
3803
|
recordToolStart(inFlightTools, event.payload);
|
|
3760
3804
|
}
|
|
3761
3805
|
// ACP is an external protocol peer, never an authority for Clio's
|
|
3762
3806
|
// deterministic terminal taxonomy. Ignore even syntactically valid
|
|
3763
3807
|
// assertions; only a future coordinator-side classifier may set one.
|
|
3764
|
-
if (event.type === "
|
|
3808
|
+
if (event.type === "clio_coder_run_outcome" && !reportedSpoofedOutcome) {
|
|
3765
3809
|
reportedSpoofedOutcome = true;
|
|
3766
|
-
reportDispatchDiagnostic("ACP outcome event", new Error("ignored untrusted
|
|
3810
|
+
reportDispatchDiagnostic("ACP outcome event", new Error("ignored untrusted clio_coder_run_outcome assertion"));
|
|
3767
3811
|
}
|
|
3768
3812
|
if (isRecord(event)) {
|
|
3769
3813
|
const finishEntry = appendDispatchFinishContractEntry(finishContractEntries, event);
|
|
@@ -3794,7 +3838,7 @@ export function createDispatchBundle(
|
|
|
3794
3838
|
if (message !== null) failureMessage = message;
|
|
3795
3839
|
}
|
|
3796
3840
|
}
|
|
3797
|
-
if (event.type === "
|
|
3841
|
+
if (event.type === "clio_coder_permission_resolved" && event.payload && typeof event.payload.tool === "string") {
|
|
3798
3842
|
const requestId =
|
|
3799
3843
|
typeof event.payload.requestId === "string" ? event.payload.requestId : `delegation-permission-${Date.now()}`;
|
|
3800
3844
|
const origin = runIdForPermissionAudit !== null ? `delegation:${runIdForPermissionAudit}` : "delegation:unknown";
|
|
@@ -3820,7 +3864,7 @@ export function createDispatchBundle(
|
|
|
3820
3864
|
...(runIdForPermissionAudit !== null ? { requestedBy: runIdForPermissionAudit } : {}),
|
|
3821
3865
|
});
|
|
3822
3866
|
}
|
|
3823
|
-
if (event.type === "
|
|
3867
|
+
if (event.type === "clio_coder_tool_finish" && event.payload && typeof event.payload.tool === "string") {
|
|
3824
3868
|
recordToolCompletion(inFlightTools, event.payload);
|
|
3825
3869
|
recordToolFinish(toolStats, event.payload);
|
|
3826
3870
|
if (event.payload.decision === "allowed") safetyDecisionCounts.allowed += 1;
|
|
@@ -4022,7 +4066,7 @@ export function createDispatchBundle(
|
|
|
4022
4066
|
const finalFailureMessage = result.failureMessage ?? failureMessage;
|
|
4023
4067
|
const finalToolStats = snapshotToolStats(toolStats);
|
|
4024
4068
|
const unfinished = snapshotUnfinishedTools(inFlightTools);
|
|
4025
|
-
const toolGovernance = lifecycle.agentConfig.toolGovernance ?? "clio-policy";
|
|
4069
|
+
const toolGovernance = lifecycle.agentConfig.toolGovernance ?? "clio-coder-policy";
|
|
4026
4070
|
return {
|
|
4027
4071
|
runId: envelope.id,
|
|
4028
4072
|
agentId: req.agentId,
|
|
@@ -4075,7 +4119,7 @@ export function createDispatchBundle(
|
|
|
4075
4119
|
dynamicHash: lifecycle.dynamicHash,
|
|
4076
4120
|
promptSignature: lifecycle.promptSignature,
|
|
4077
4121
|
toolSignature: lifecycle.toolSignature,
|
|
4078
|
-
|
|
4122
|
+
clioCoderVersion: readClioVersion(),
|
|
4079
4123
|
piMonoVersion: readPiMonoVersion(),
|
|
4080
4124
|
platform: process.platform,
|
|
4081
4125
|
nodeVersion: process.version,
|
|
@@ -4089,7 +4133,7 @@ export function createDispatchBundle(
|
|
|
4089
4133
|
quality: createRunReceiptQuality({ runtimeEnforceable: false, enforcementPassed: null, resultContract: null }),
|
|
4090
4134
|
autonomyEnforcement: autonomyEnforcementForAcpDelegation(
|
|
4091
4135
|
lifecycle.autonomy,
|
|
4092
|
-
lifecycle.agentConfig.toolGovernance ?? "clio-policy",
|
|
4136
|
+
lifecycle.agentConfig.toolGovernance ?? "clio-coder-policy",
|
|
4093
4137
|
lifecycle.sessionAutonomy,
|
|
4094
4138
|
req.autonomy,
|
|
4095
4139
|
),
|
|
@@ -4119,7 +4163,7 @@ export function createDispatchBundle(
|
|
|
4119
4163
|
toolCallsRequested: result.delegation.toolCallsRequested,
|
|
4120
4164
|
toolCallsApproved: result.delegation.toolCallsApproved,
|
|
4121
4165
|
toolCallsDenied: result.delegation.toolCallsDenied,
|
|
4122
|
-
toolGovernance: lifecycle.agentConfig.toolGovernance ?? "clio-policy",
|
|
4166
|
+
toolGovernance: lifecycle.agentConfig.toolGovernance ?? "clio-coder-policy",
|
|
4123
4167
|
toolCallLog: acp.toolCallLog(),
|
|
4124
4168
|
},
|
|
4125
4169
|
sessionId: result.delegation.acpSessionId,
|
|
@@ -4345,6 +4389,7 @@ export function createDispatchBundle(
|
|
|
4345
4389
|
async function dispatchAttempt(
|
|
4346
4390
|
req: DispatchRequest,
|
|
4347
4391
|
observer?: DispatchAdmissionObserver,
|
|
4392
|
+
settlement?: BatchVerificationGate,
|
|
4348
4393
|
): Promise<{
|
|
4349
4394
|
runId: string;
|
|
4350
4395
|
events: AsyncIterableIterator<unknown>;
|
|
@@ -4354,7 +4399,7 @@ export function createDispatchBundle(
|
|
|
4354
4399
|
const requestedAt = new Date(now()).toISOString();
|
|
4355
4400
|
const timing: RunPhaseMarks = { requestedAt, decisionStartedAt: requestedAt };
|
|
4356
4401
|
const settings = getEffectiveSettings();
|
|
4357
|
-
const isAcpAgent = settings?.
|
|
4402
|
+
const isAcpAgent = settings?.integrations.externalAgents?.entries?.some((entry) => entry.id === req.agentId) ?? false;
|
|
4358
4403
|
if (isAcpAgent && !req.delegationAgentId) {
|
|
4359
4404
|
req.delegationAgentId = req.agentId;
|
|
4360
4405
|
}
|
|
@@ -4374,7 +4419,7 @@ export function createDispatchBundle(
|
|
|
4374
4419
|
const recipe = agents.get(req.agentId);
|
|
4375
4420
|
const activation = consumeActiveRouteApproval({
|
|
4376
4421
|
request: req,
|
|
4377
|
-
settings: settings?.
|
|
4422
|
+
settings: settings?.fleet.adaptiveRouting,
|
|
4378
4423
|
capabilityClass: recipe === null ? null : normalizeAgentSpec(recipe).capabilityClass,
|
|
4379
4424
|
failover: failoverModeFor(req),
|
|
4380
4425
|
requestedAt,
|
|
@@ -4440,10 +4485,12 @@ export function createDispatchBundle(
|
|
|
4440
4485
|
}
|
|
4441
4486
|
rebindReservationSlot(req, "local", null, UNKNOWN_PRICING_ADMISSION_ESTIMATE_USD, settings);
|
|
4442
4487
|
routeObservation = observeShadowRoute(req, undefined, settings);
|
|
4443
|
-
|
|
4444
|
-
|
|
4445
|
-
|
|
4446
|
-
|
|
4488
|
+
const delegated = await dispatchAcpDelegation(req, settings, timing, routeObservation.decision, observer);
|
|
4489
|
+
// An ACP member never runs host verification, so it can only ever leave
|
|
4490
|
+
// the barrier. It still edits the checkout, so the barrier has to wait
|
|
4491
|
+
// for it; dispatch() releases it when its finalPromise settles.
|
|
4492
|
+
settlement?.live(delegated.runId);
|
|
4493
|
+
return attachRouteObservation({ ...delegated, effectiveRequest: req });
|
|
4447
4494
|
}
|
|
4448
4495
|
|
|
4449
4496
|
req = routeAroundCoolingTarget(req, settings) ?? req;
|
|
@@ -4668,7 +4715,7 @@ export function createDispatchBundle(
|
|
|
4668
4715
|
context.bus.emit(BusChannels.DispatchProgress, {
|
|
4669
4716
|
runId,
|
|
4670
4717
|
agentId: req.agentId,
|
|
4671
|
-
event: { type: "
|
|
4718
|
+
event: { type: "clio_coder_write_record_downgraded", payload: downgrade },
|
|
4672
4719
|
});
|
|
4673
4720
|
},
|
|
4674
4721
|
});
|
|
@@ -4722,8 +4769,8 @@ export function createDispatchBundle(
|
|
|
4722
4769
|
policySource?: string;
|
|
4723
4770
|
reason?: string;
|
|
4724
4771
|
skillActivation?: unknown;
|
|
4725
|
-
// Worker permission-escalation fields (
|
|
4726
|
-
//
|
|
4772
|
+
// Worker permission-escalation fields (clio_coder_permission_escalated /
|
|
4773
|
+
// clio_coder_permission_resolved escalate path).
|
|
4727
4774
|
requestId?: string;
|
|
4728
4775
|
summary?: string;
|
|
4729
4776
|
target?: string;
|
|
@@ -4736,12 +4783,12 @@ export function createDispatchBundle(
|
|
|
4736
4783
|
if (eventContainsFirstModelToken(event)) markObservedPhase("firstModelTokenAt");
|
|
4737
4784
|
if (eventStartsTool(event)) markObservedPhase("firstToolAt");
|
|
4738
4785
|
}
|
|
4739
|
-
if (event.type === "
|
|
4786
|
+
if (event.type === "clio_coder_tool_start" && event.payload && typeof event.payload.tool === "string") {
|
|
4740
4787
|
recordToolStart(inFlightTools, event.payload);
|
|
4741
4788
|
}
|
|
4742
|
-
if (event.type === "
|
|
4789
|
+
if (event.type === "clio_coder_steer_received") acknowledgeSteer(event.payload?.sequence);
|
|
4743
4790
|
if (
|
|
4744
|
-
event.type === "
|
|
4791
|
+
event.type === "clio_coder_run_outcome" &&
|
|
4745
4792
|
isRunOutcomeCode(event.payload?.outcomeCode) &&
|
|
4746
4793
|
event.payload.outcomeCode !== "worker_final_output_missing" &&
|
|
4747
4794
|
event.payload.outcomeCode !== "host_verification_rejected"
|
|
@@ -4764,7 +4811,11 @@ export function createDispatchBundle(
|
|
|
4764
4811
|
}
|
|
4765
4812
|
recordWorkerRunEffect(runEffects, event);
|
|
4766
4813
|
}
|
|
4767
|
-
if (
|
|
4814
|
+
if (
|
|
4815
|
+
event.type === "clio_coder_permission_escalated" &&
|
|
4816
|
+
event.payload &&
|
|
4817
|
+
typeof event.payload.requestId === "string"
|
|
4818
|
+
) {
|
|
4768
4819
|
escalationCounts.requested += 1;
|
|
4769
4820
|
const ctx = isRecord(event.payload.decision) ? event.payload.decision : null;
|
|
4770
4821
|
const classification = ctx !== null && isRecord(ctx.classification) ? ctx.classification : null;
|
|
@@ -4825,7 +4876,7 @@ export function createDispatchBundle(
|
|
|
4825
4876
|
if (message !== null) failureMessage = message;
|
|
4826
4877
|
}
|
|
4827
4878
|
}
|
|
4828
|
-
if (event.type === "
|
|
4879
|
+
if (event.type === "clio_coder_permission_resolved" && event.payload && typeof event.payload.tool === "string") {
|
|
4829
4880
|
// Escalation resolutions already have a request event. Policy
|
|
4830
4881
|
// deny/fail is non-stalling, so dispatch mints the adjacent pair.
|
|
4831
4882
|
const source = event.payload.source;
|
|
@@ -4878,7 +4929,7 @@ export function createDispatchBundle(
|
|
|
4878
4929
|
...(runIdForPermissionAudit !== null ? { requestedBy: runIdForPermissionAudit } : {}),
|
|
4879
4930
|
});
|
|
4880
4931
|
}
|
|
4881
|
-
if (event.type === "
|
|
4932
|
+
if (event.type === "clio_coder_tool_finish" && event.payload && typeof event.payload.tool === "string") {
|
|
4882
4933
|
recordToolCompletion(inFlightTools, event.payload);
|
|
4883
4934
|
recordToolFinish(toolStats, event.payload);
|
|
4884
4935
|
if (isSkillActivation(event.payload.skillActivation)) {
|
|
@@ -5237,7 +5288,7 @@ export function createDispatchBundle(
|
|
|
5237
5288
|
dynamicHash: lifecycle.dynamicHash,
|
|
5238
5289
|
promptSignature: lifecycle.promptSignature,
|
|
5239
5290
|
toolSignature: lifecycle.toolSignature,
|
|
5240
|
-
|
|
5291
|
+
clioCoderVersion: readClioVersion(),
|
|
5241
5292
|
piMonoVersion: readPiMonoVersion(),
|
|
5242
5293
|
platform: process.platform,
|
|
5243
5294
|
nodeVersion: process.version,
|
|
@@ -5262,7 +5313,7 @@ export function createDispatchBundle(
|
|
|
5262
5313
|
...(skillActivations.length > 0 ? { skillActivations: [...skillActivations] } : {}),
|
|
5263
5314
|
autonomyEnforcement: autonomyEnforcementForWorkerSpec(
|
|
5264
5315
|
spec,
|
|
5265
|
-
lifecycle.settings?.autonomy ?? "auto-edit",
|
|
5316
|
+
lifecycle.settings?.safety.autonomy ?? "auto-edit",
|
|
5266
5317
|
req.autonomy,
|
|
5267
5318
|
),
|
|
5268
5319
|
safety: {
|
|
@@ -5364,6 +5415,14 @@ export function createDispatchBundle(
|
|
|
5364
5415
|
return { assessment, rigor };
|
|
5365
5416
|
};
|
|
5366
5417
|
|
|
5418
|
+
// The worker is spawned and its ledger row exists, so from here it can
|
|
5419
|
+
// write and the batch barrier has to wait for it. Registered after the
|
|
5420
|
+
// try/catch at 4939-5068, which aborts the worker and releases the lease on
|
|
5421
|
+
// failure, so a run that never reaches the barrier is never made live.
|
|
5422
|
+
// Paired with the abandon in dispatch(), which fires the moment
|
|
5423
|
+
// finalPromise settles.
|
|
5424
|
+
settlement?.live(envelope.id);
|
|
5425
|
+
|
|
5367
5426
|
const finalPromise = (async (): Promise<RunReceipt> => {
|
|
5368
5427
|
try {
|
|
5369
5428
|
const result = await workerDone;
|
|
@@ -5488,12 +5547,21 @@ export function createDispatchBundle(
|
|
|
5488
5547
|
finalDetail = WORKER_FINAL_OUTPUT_MISSING_DETAIL;
|
|
5489
5548
|
failureMessage = finalDetail;
|
|
5490
5549
|
}
|
|
5491
|
-
const
|
|
5550
|
+
const hostVerificationInput = {
|
|
5492
5551
|
runId: envelope.id,
|
|
5493
5552
|
request: req,
|
|
5494
5553
|
workerSuccessful: finalOutcome === "succeeded",
|
|
5495
|
-
onDiagnostic: (error) =>
|
|
5496
|
-
|
|
5554
|
+
onDiagnostic: (error: unknown) =>
|
|
5555
|
+
reportDispatchDiagnostic(`write host verification memo for ${envelope.id}`, error),
|
|
5556
|
+
};
|
|
5557
|
+
// This await is the batch barrier. It already sits before
|
|
5558
|
+
// buildReceiptDraft below, which is why batch settlement needs no
|
|
5559
|
+
// receipt restructuring: every member parks here with its outcome
|
|
5560
|
+
// resolved and nothing sealed.
|
|
5561
|
+
const hostVerification =
|
|
5562
|
+
settlement === undefined
|
|
5563
|
+
? await runHostVerification(hostVerificationInput)
|
|
5564
|
+
: await settlement.arrive(hostVerificationInput);
|
|
5497
5565
|
const hostRejection = hostVerificationRejection(hostVerification);
|
|
5498
5566
|
if (hostRejection !== null && finalOutcome === "succeeded") {
|
|
5499
5567
|
finalOutcome = "failed";
|
|
@@ -5686,6 +5754,7 @@ export function createDispatchBundle(
|
|
|
5686
5754
|
async function dispatch(
|
|
5687
5755
|
req: DispatchRequest,
|
|
5688
5756
|
observer?: DispatchAdmissionObserver,
|
|
5757
|
+
settlement?: BatchVerificationGate,
|
|
5689
5758
|
): Promise<{
|
|
5690
5759
|
runId: string;
|
|
5691
5760
|
events: AsyncIterableIterator<unknown>;
|
|
@@ -5733,7 +5802,7 @@ export function createDispatchBundle(
|
|
|
5733
5802
|
}
|
|
5734
5803
|
let handle: Awaited<ReturnType<typeof dispatchAttempt>>;
|
|
5735
5804
|
try {
|
|
5736
|
-
handle = await dispatchAttempt(prepared, observer);
|
|
5805
|
+
handle = await dispatchAttempt(prepared, observer, settlement);
|
|
5737
5806
|
} catch (error) {
|
|
5738
5807
|
writerLease?.release();
|
|
5739
5808
|
if (createdWorktree !== undefined) {
|
|
@@ -5748,6 +5817,14 @@ export function createDispatchBundle(
|
|
|
5748
5817
|
}
|
|
5749
5818
|
throw error;
|
|
5750
5819
|
}
|
|
5820
|
+
// A finalization that throws before the barrier, and an ACP handle that
|
|
5821
|
+
// never reaches it at all, must not park their siblings forever. A member
|
|
5822
|
+
// that already arrived is parked and abandon() is a no-op for it, so this
|
|
5823
|
+
// fires harmlessly on the normal path.
|
|
5824
|
+
if (settlement !== undefined) {
|
|
5825
|
+
const release = (): void => settlement.abandon(handle.runId);
|
|
5826
|
+
handle.finalPromise.then(release, release);
|
|
5827
|
+
}
|
|
5751
5828
|
// Requests carrying lineage are internal attempts (retry or nested
|
|
5752
5829
|
// orchestration) and retain the per-attempt handle contract.
|
|
5753
5830
|
if (req.lineage) return { ...handle, finalPromise: handle.finalPromise.finally(() => writerLease?.release()) };
|
|
@@ -5775,7 +5852,7 @@ export function createDispatchBundle(
|
|
|
5775
5852
|
req: DispatchRequest,
|
|
5776
5853
|
settings: EffectiveSettings = getEffectiveSettings(),
|
|
5777
5854
|
): DispatchPlanTaskResolution {
|
|
5778
|
-
const isAcpAgent = settings?.
|
|
5855
|
+
const isAcpAgent = settings?.integrations.externalAgents?.entries?.some((entry) => entry.id === req.agentId) ?? false;
|
|
5779
5856
|
if (isAcpAgent && !req.delegationAgentId) req = { ...req, delegationAgentId: req.agentId };
|
|
5780
5857
|
const validation = routeValidationProjection(req, true);
|
|
5781
5858
|
const validated = validateJobSpec(validation.jobSpec);
|
|
@@ -5851,7 +5928,7 @@ export function createDispatchBundle(
|
|
|
5851
5928
|
req,
|
|
5852
5929
|
);
|
|
5853
5930
|
assertPostRuntimeToolCompatibility(req.agentId, agentSpec, effectiveTools, target);
|
|
5854
|
-
assertRuntimeCanHonorWorkerPermissionMode(target.runtime, settings?.
|
|
5931
|
+
assertRuntimeCanHonorWorkerPermissionMode(target.runtime, settings?.fleet.permissions.mode ?? "deny");
|
|
5855
5932
|
assertWorkerBudgetEnforceable(target.runtime, agentSpec.budget !== null || req.budget !== undefined);
|
|
5856
5933
|
assertResponseSchemaEnforceable(target.runtime, target.modelCapabilities, req.responseSchema, effectiveTools.length);
|
|
5857
5934
|
assertWriteRootsEnforceable(target.runtime, pathScope.writeBoundaries);
|
|
@@ -5913,7 +5990,7 @@ export function createDispatchBundle(
|
|
|
5913
5990
|
specs,
|
|
5914
5991
|
request: req,
|
|
5915
5992
|
mode,
|
|
5916
|
-
activeAgentRoles: settings?.
|
|
5993
|
+
activeAgentRoles: settings?.fleet.adaptiveRouting.agentRoles ?? [],
|
|
5917
5994
|
...(agentIntent === undefined ? {} : { intentOverride: agentIntent }),
|
|
5918
5995
|
});
|
|
5919
5996
|
const settingsFingerprint = computeSettingsFingerprint(settings ?? null);
|
|
@@ -6008,7 +6085,7 @@ export function createDispatchBundle(
|
|
|
6008
6085
|
const recipe = agents.get(req.agentId);
|
|
6009
6086
|
return planActiveRoute({
|
|
6010
6087
|
request: req,
|
|
6011
|
-
settings: settings?.
|
|
6088
|
+
settings: settings?.fleet.adaptiveRouting,
|
|
6012
6089
|
capabilityClass: recipe === null ? null : normalizeAgentSpec(recipe).capabilityClass,
|
|
6013
6090
|
failover: failoverModeFor(req),
|
|
6014
6091
|
fixed,
|
|
@@ -6121,10 +6198,19 @@ export function createDispatchBundle(
|
|
|
6121
6198
|
finalPromise: Promise<ReadonlyArray<RunReceipt>>;
|
|
6122
6199
|
}> {
|
|
6123
6200
|
if (reqs.length === 0) throw new Error("dispatch: batch requires at least one request");
|
|
6201
|
+
// Two or more concurrent workers share one checkout, so a declared check
|
|
6202
|
+
// run while a sibling is still editing judges a tree neither worker
|
|
6203
|
+
// authored. The barrier only exists when there is both something to verify
|
|
6204
|
+
// and something that could race it; a one-request batch and a batch with no
|
|
6205
|
+
// declared check keep today's per-run path exactly.
|
|
6206
|
+
const settlement =
|
|
6207
|
+
reqs.length > 1 && reqs.some((req) => (req.resolvedVerification?.length ?? 0) > 0)
|
|
6208
|
+
? createBatchVerificationGate()
|
|
6209
|
+
: undefined;
|
|
6124
6210
|
const handles: Array<Awaited<ReturnType<typeof dispatch>> & { agentId: string }> = [];
|
|
6125
6211
|
try {
|
|
6126
6212
|
for (const req of reqs) {
|
|
6127
|
-
const handle = await dispatch(req);
|
|
6213
|
+
const handle = await dispatch(req, undefined, settlement);
|
|
6128
6214
|
handles.push({ ...handle, agentId: req.agentId });
|
|
6129
6215
|
}
|
|
6130
6216
|
} catch (err) {
|
|
@@ -6219,7 +6305,7 @@ export function createDispatchBundle(
|
|
|
6219
6305
|
costProvenance: "unknown",
|
|
6220
6306
|
compiledPromptHash: null,
|
|
6221
6307
|
staticCompositionHash: null,
|
|
6222
|
-
|
|
6308
|
+
clioCoderVersion: readClioVersion(),
|
|
6223
6309
|
piMonoVersion: readPiMonoVersion(),
|
|
6224
6310
|
platform: process.platform,
|
|
6225
6311
|
nodeVersion: process.version,
|
|
@@ -6343,6 +6429,7 @@ export function createDispatchBundle(
|
|
|
6343
6429
|
// Reconciliation is best-effort; a failure never blocks startup.
|
|
6344
6430
|
}
|
|
6345
6431
|
startHeartbeatWatchdog();
|
|
6432
|
+
probeEndpointsAtDefaultBound();
|
|
6346
6433
|
},
|
|
6347
6434
|
async stop() {
|
|
6348
6435
|
// Shutdown is process-local. The durable machine-wide drain belongs to
|