@iowarp/clio-coder 0.4.0 → 0.4.1
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 +39 -0
- package/README.md +116 -16
- package/dist/{acp-G5WJBNCT.js → acp-ZILU3AUO.js} +14 -14
- package/dist/{agents-FMV2Q5G4.js → agents-HYWGBGQR.js} +40 -29
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-3IDSJEIK.js → auth-N3QT7CBO.js} +21 -19
- package/dist/{builtins-XCZWXSC7.js → builtins-UJLMOVOV.js} +6 -6
- package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
- package/dist/{chunk-3BT2XMV4.js → chunk-2NM363SV.js} +50 -57
- package/dist/{chunk-J4W7KFM7.js → chunk-2VG7KLYV.js} +24 -279
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/{chunk-K5C3NCBD.js → chunk-3I5NY75V.js} +5 -5
- package/dist/{chunk-VAZSBTKF.js → chunk-3QSOM6PA.js} +2 -2
- package/dist/{chunk-TZ3SGWZZ.js → chunk-5QIAJV2D.js} +2 -2
- package/dist/{chunk-OQBA45DZ.js → chunk-5YHDIDBP.js} +2 -2
- package/dist/{chunk-NHLBIGRH.js → chunk-6CCS4G3W.js} +40 -17
- package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
- package/dist/{chunk-LDQ2ZF2M.js → chunk-6FN3E6KX.js} +5 -5
- package/dist/{chunk-X3YGUTOB.js → chunk-6HMJX2VU.js} +59 -59
- package/dist/{chunk-VEO4AP2K.js → chunk-6I5ILFOF.js} +3 -2
- package/dist/{chunk-B7OBL7PK.js → chunk-6NJQITNH.js} +18 -11
- package/dist/{chunk-IQ7KR472.js → chunk-6VC4OV3Z.js} +6 -3
- package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
- package/dist/{chunk-AB44T6BB.js → chunk-74YWRRU5.js} +8 -7
- package/dist/{chunk-SJ5ZKQ4S.js → chunk-7EPLI7VL.js} +2 -2
- package/dist/{chunk-HWHKMHUA.js → chunk-7OBGU7UB.js} +3 -3
- package/dist/{chunk-2OQE55CK.js → chunk-7PWAODYW.js} +2 -2
- package/dist/{chunk-IBEBSCYA.js → chunk-7RY5VZPH.js} +42 -33
- package/dist/{chunk-LQ3DZAMX.js → chunk-ABLSQ6JX.js} +2 -2
- package/dist/{chunk-QLFS5GO2.js → chunk-AFKWHWXF.js} +12 -22
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-O6TL7WWY.js → chunk-AKB4GYDL.js} +4 -4
- package/dist/chunk-AP73CFDC.js +308 -0
- package/dist/{chunk-JDG2WCRO.js → chunk-BBTJOK6Y.js} +5 -5
- package/dist/{chunk-SP2RXXYO.js → chunk-BDPT6GTK.js} +10 -10
- package/dist/{chunk-NQQH3YT7.js → chunk-BJGUKIG4.js} +3 -3
- package/dist/{chunk-O4XIVISU.js → chunk-BTGG6BG2.js} +79 -38
- package/dist/chunk-BTK3SSSK.js +67 -0
- package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
- package/dist/chunk-BWW4HLO4.js +301 -0
- package/dist/{chunk-I5VEOC6I.js → chunk-C537JADH.js} +10 -10
- package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
- package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-WZR7K7ZX.js → chunk-E67WX76H.js} +6 -6
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-EIMVLWB3.js +1842 -0
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-MLKNTWH2.js → chunk-FYUN5KZ3.js} +21 -21
- package/dist/{chunk-YJX4SHTD.js → chunk-GIZNH63R.js} +1 -1
- package/dist/{chunk-X75E3D2N.js → chunk-GPPB3JBE.js} +18 -16
- package/dist/{chunk-GR5G2PVF.js → chunk-GVQJ5CCZ.js} +15 -10
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
- package/dist/{chunk-VYMXRQI6.js → chunk-HUAS7ITX.js} +89 -93
- package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
- package/dist/{chunk-DYJP44XW.js → chunk-IG7BCQBA.js} +1 -1
- package/dist/{chunk-32KWKNSF.js → chunk-IXJT6DCX.js} +3 -3
- package/dist/{chunk-C2LTL2W6.js → chunk-J4HBWF6Y.js} +360 -172
- package/dist/chunk-J5LZHVIT.js +284 -0
- package/dist/{chunk-QLL7ILRG.js → chunk-JA5QWE4Z.js} +510 -202
- package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
- package/dist/{chunk-36EJLSQQ.js → chunk-JZWT5J3Y.js} +4 -4
- package/dist/{chunk-HZHHCK24.js → chunk-K6BF4U2H.js} +476 -322
- package/dist/{chunk-Z2RR6MAK.js → chunk-MA3H6DM5.js} +6 -6
- package/dist/{chunk-CODPRO7Q.js → chunk-MOPSG2X7.js} +6 -6
- package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
- package/dist/{chunk-YDFRH54B.js → chunk-N5UK64DP.js} +4 -4
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-W5VSYASO.js → chunk-OJTRZGR3.js} +46 -87
- package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
- package/dist/{chunk-3URVFKWK.js → chunk-PJJ6MY27.js} +5 -5
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-GKF55TAZ.js → chunk-PVAMAVBB.js} +3 -2
- package/dist/{chunk-6DB53AJS.js → chunk-QKIFBZKT.js} +7 -7
- package/dist/{chunk-HJJTYUHX.js → chunk-QMXC4JB7.js} +20 -20
- package/dist/chunk-QTFGO774.js +644 -0
- package/dist/{chunk-CY6FY24N.js → chunk-R23Z6K6I.js} +2 -2
- package/dist/{chunk-ULC6OTWO.js → chunk-R32CLGZ6.js} +13 -13
- package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
- package/dist/{chunk-F4CKPOEQ.js → chunk-SCYB3HA4.js} +72 -26
- package/dist/{chunk-LY4S7GJC.js → chunk-SINK3QR6.js} +18 -16
- package/dist/{chunk-U77AMWDL.js → chunk-TD3PGPQA.js} +43 -22
- package/dist/{chunk-QBJA7R7N.js → chunk-THYWACCR.js} +2 -2
- package/dist/{chunk-QREDIESB.js → chunk-TVH4ONAM.js} +14 -8
- package/dist/chunk-U2WB7TZS.js +271 -0
- package/dist/{chunk-KFZI4NIL.js → chunk-UAPGZHYC.js} +145 -31
- package/dist/{chunk-DQITNCXG.js → chunk-UEDMSP56.js} +29 -14
- package/dist/{chunk-3XML7CDN.js → chunk-UXN6JT4W.js} +2 -2
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-BPKCPIL7.js → chunk-VEGN6WIQ.js} +2 -2
- package/dist/chunk-VKFQTNDV.js +66 -0
- package/dist/{chunk-7MCTRUCE.js → chunk-VKRH2TCS.js} +2 -2
- package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
- package/dist/{chunk-SUCTJL45.js → chunk-WR6U3OVP.js} +3 -3
- package/dist/{chunk-BUMFYQFY.js → chunk-XKA2ICR3.js} +124 -113
- package/dist/{chunk-UXMFQ54G.js → chunk-Y45G3AXC.js} +39 -39
- package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
- package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
- package/dist/{chunk-V5DHCITQ.js → chunk-ZAZB4JMW.js} +23 -12
- package/dist/{chunk-Z4TXYIEG.js → chunk-ZJLUDYFY.js} +9 -9
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
- package/dist/cli/index.js +36 -36
- package/dist/{clio-2JXHBBY5.js → clio-IT3G3VQH.js} +12 -13
- package/dist/{code-nav-3YYRMYNF.js → code-nav-RK6S7F6E.js} +5 -5
- 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-3QZRWZJF.js} +53 -49
- package/dist/{configure-TEGEBYCA.js → configure-FL7Y3KJF.js} +25 -22
- package/dist/{context-E6H5RNMC.js → context-5HE7ODYK.js} +47 -43
- package/dist/{context-AV7OEZ4D.js → context-KYQFRVDC.js} +11 -11
- package/dist/{context-GSXUE4CT.js → context-XNHL75JV.js} +32 -19
- package/dist/{context-clear-SHIBYK6T.js → context-clear-N545L53A.js} +47 -43
- package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-QHKXSV2F.js} +10 -9
- package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-RGIE5PCT.js} +56 -47
- package/dist/{docs-23KQS3XK.js → docs-5NAF6AU7.js} +5 -11
- package/dist/doctor-ZGPEGHIP.js +772 -0
- package/dist/{eval-TFBYQH4H.js → eval-GXLL44RD.js} +63 -45
- package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-HBWSWQOK.js} +7 -8
- package/dist/{evidence-ERGESKGN.js → evidence-HWLBRH3Q.js} +44 -40
- package/dist/{evolve-VDXTSYCJ.js → evolve-FTZBMNVW.js} +43 -39
- package/dist/{extensions-7BGBHN57.js → extensions-VHRBEID7.js} +4 -4
- package/dist/{fleet-2RRVDF2V.js → fleet-CKZHJWZJ.js} +86 -73
- package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EXDXBMV6.js} +10 -9
- package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-OTHB6KRL.js} +5 -5
- package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-YTEZUCUT.js} +13 -11
- package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-SS6YMDCK.js} +44 -41
- package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-PBY4VYOM.js} +5 -9
- package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-KMEM5L3S.js} +16 -13
- package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-QD5M7E7Q.js} +42 -39
- package/dist/{fleet-view-ZCON35AG.js → fleet-view-WAMJYNDT.js} +44 -52
- package/dist/{init-DN2WWLFE.js → init-5XQRBOFV.js} +63 -58
- package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
- package/dist/{interop-OZBKXAYL.js → interop-34TVO25M.js} +13 -11
- package/dist/{library-YWZG7IMW.js → library-3QY6KF57.js} +17 -14
- package/dist/{memory-I4C4HMLW.js → memory-L4UTIIIW.js} +45 -41
- package/dist/{models-CEYXJBO6.js → models-ZVX3QOWE.js} +39 -31
- package/dist/{monitor-NZ6GCI3P.js → monitor-CEKVSYTS.js} +50 -46
- package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-77BAP6BC.js} +1807 -1039
- package/dist/{panes-KY6W3V2E.js → panes-7STHOAUJ.js} +4 -4
- package/dist/{panes-HMABYVO4.js → panes-SHAUIRXY.js} +10 -8
- package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
- package/dist/{reset-DQ6FGCSH.js → reset-EOLM7GVE.js} +7 -8
- package/dist/{resources-BB3MVJMD.js → resources-74GKTLSF.js} +17 -13
- package/dist/{run-H2GQDUER.js → run-HBAUJNNZ.js} +86 -76
- package/dist/{share-GTJN6A5O.js → share-G3APVLVP.js} +17 -14
- package/dist/{skills-L55TEW6R.js → skills-35HHUKCR.js} +19 -16
- package/dist/{skills-eval-XVXPH2JI.js → skills-eval-QN4HSHDC.js} +55 -57
- package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-J357J34F.js} +15 -12
- package/dist/{slash-commands-ZSGASKJC.js → slash-commands-JZZCQA32.js} +31 -29
- package/dist/{steer-RZGSCY4R.js → steer-XAVHJM22.js} +3 -3
- package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
- package/dist/{targets-NCPZ644J.js → targets-DSM6CY3M.js} +59 -53
- package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-JOPFUVEM.js} +14 -9
- package/dist/{tools-DAF3DI3C.js → tools-MKNWVPBH.js} +10 -8
- package/dist/{trace-FYVW2MQA.js → trace-ECQ7TIYZ.js} +48 -3
- 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-H7TOM7YL.js} +35 -62
- package/dist/{usage-3NLHGTU2.js → usage-X52N3IDJ.js} +51 -48
- package/dist/{verifiers-SSQONKRT.js → verifiers-EJTVVSMA.js} +10 -9
- package/dist/{verify-3U6J7FZI.js → verify-YJL6XET2.js} +9 -8
- package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPIFL3LL.js} +1 -2
- package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-4NDZTQ4B.js} +66 -63
- package/dist/{with-panes-MKB46MPQ.js → with-panes-OBOBFIIR.js} +62 -26
- package/dist/worker/entry.js +57 -52
- package/docs/acp.md +1 -1
- package/docs/built-in-agents.md +40 -32
- package/docs/commands-and-modes.md +9 -3
- package/docs/config-knobs-audit.md +3 -0
- package/docs/configuration-and-targets.md +105 -164
- package/docs/environment-variables.md +2 -1
- package/docs/exit-codes-and-output.md +2 -0
- package/docs/fleet-demo-runbook.md +6 -3
- package/docs/fleet-dispatch.md +8 -6
- package/docs/installation-and-lifecycle.md +1 -1
- package/docs/release-cut-checklist.md +164 -177
- package/docs/trace-store.md +15 -10
- package/docs/troubleshooting.md +1 -1
- 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 +5 -15
- package/skills/README.md +6 -6
- package/skills/coding/ast-grep/SKILL.md +8 -2
- package/skills/coding/coding-standards/SKILL.md +8 -2
- package/skills/coding/prototype/SKILL.md +8 -2
- package/skills/coding/tdd/SKILL.md +8 -2
- package/skills/context/context-handoff/SKILL.md +12 -3
- package/skills/context/context-handoff/evals.md +3 -3
- package/skills/context/context-prime/SKILL.md +8 -2
- package/skills/context/context-prime/evals.md +2 -2
- package/skills/git/file-ticket/SKILL.md +9 -4
- 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 +8 -2
- package/skills/git/resolve-merge-conflicts/evals.md +2 -2
- package/skills/git/ship/SKILL.md +9 -3
- package/skills/git/ship/evals.md +4 -4
- package/skills/git/worktree-create/SKILL.md +7 -2
- package/skills/git/worktree-create/evals.md +6 -6
- package/skills/git/worktree-merge/SKILL.md +7 -2
- package/skills/git/worktree-merge/evals.md +6 -6
- package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
- package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
- package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
- package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
- package/skills/meta/credentials/SKILL.md +9 -2
- package/skills/meta/find-skills/SKILL.md +8 -2
- package/skills/meta/herdr/SKILL.md +8 -2
- package/skills/meta/skill-craft/SKILL.md +21 -4
- package/skills/planning/architecture/SKILL.md +9 -3
- package/skills/planning/backlog/SKILL.md +8 -2
- package/skills/planning/prd/SKILL.md +8 -2
- package/skills/planning/product-intent/SKILL.md +8 -2
- package/skills/planning/tech-spec/SKILL.md +9 -3
- package/skills/registry.yaml +66 -66
- package/skills/research/arxiv-literature/SKILL.md +8 -2
- package/skills/research/experiment-protocol/SKILL.md +9 -2
- package/skills/research/scientific-debugging/SKILL.md +9 -2
- package/skills/research/scientific-debugging/evals.md +2 -2
- package/skills/research/scientific-modernization/SKILL.md +9 -2
- package/skills/skill-marketplace.json +257 -38
- package/skills/workflow/cut-it/SKILL.md +10 -2
- package/skills/workflow/design-council/SKILL.md +11 -2
- package/skills/workflow/grill-me/SKILL.md +8 -2
- package/skills/workflow/workflow-distiller/SKILL.md +8 -2
- package/src/cli/acp.ts +2 -2
- package/src/cli/auth.ts +2 -2
- package/src/cli/bootstrap-generate.ts +5 -5
- package/src/cli/clio.ts +6 -1
- package/src/cli/config-inspect.ts +3 -3
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure.ts +27 -27
- package/src/cli/default-target.ts +1 -1
- package/src/cli/docs.ts +6 -6
- package/src/cli/doctor-naming.ts +323 -0
- package/src/cli/doctor-panes.ts +46 -14
- package/src/cli/doctor-toolchain.ts +29 -8
- package/src/cli/doctor.ts +15 -1
- package/src/cli/eval-inventory.ts +8 -8
- package/src/cli/evidence-detail.ts +1 -1
- package/src/cli/evidence-inventory.ts +1 -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 +8 -5
- 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/reset.ts +1 -1
- package/src/cli/run.ts +11 -15
- package/src/cli/share.ts +1 -1
- package/src/cli/skills-eval.ts +11 -11
- package/src/cli/targets.ts +23 -24
- package/src/cli/trace-inspect.ts +1 -1
- package/src/cli/trace.ts +41 -0
- 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 +5 -5
- package/src/core/bash-exec.ts +1 -1
- package/src/core/boot-trace.ts +3 -3
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1062 -886
- package/src/core/defaults.ts +321 -528
- 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 +24 -4
- package/src/core/naming-compat.ts +45 -0
- package/src/core/naming-events.ts +62 -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/catalog.ts +2 -12
- package/src/domains/agents/extension.ts +3 -3
- 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 +48 -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 -3
- package/src/domains/context/prompt-context.ts +1 -1
- package/src/domains/context/wiki/assemble.ts +2 -2
- 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/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 +65 -61
- 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/joint-route-resolver.ts +1 -1
- package/src/domains/dispatch/path-scope.ts +0 -61
- 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 +6 -5
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +2 -19
- package/src/domains/dispatch/types.ts +3 -3
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +5 -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 +12 -2
- 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/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-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 +20 -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 +261 -0
- package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
- package/src/domains/lifecycle/naming-yazi.ts +81 -0
- package/src/domains/lifecycle/upgrade-notice.ts +1 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- package/src/domains/middleware/index.ts +7 -0
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/runtime.ts +2 -2
- package/src/domains/mux/contract.ts +157 -25
- package/src/domains/mux/detect.ts +29 -5
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +7 -1
- package/src/domains/mux/index.ts +20 -0
- package/src/domains/mux/operations.ts +28 -0
- 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/event-stream.ts +6 -4
- package/src/domains/mux/yazi/profile.ts +1 -1
- package/src/domains/mux/yazi/session.ts +26 -3
- package/src/domains/observability/extension.ts +1 -1
- package/src/domains/observability/out-of-turn-usage.ts +2 -2
- package/src/domains/observability/projection.ts +1 -1
- package/src/domains/observability/trace-store.ts +22 -12
- package/src/domains/prompts/compiler.ts +2 -2
- package/src/domains/prompts/extension.ts +3 -3
- package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
- package/src/domains/prompts/fragments/operating/skills.md +25 -18
- package/src/domains/providers/extension.ts +5 -5
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +14 -2
- 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} +4 -4
- package/src/domains/providers/plugins.ts +1 -1
- package/src/domains/providers/resolver.ts +1 -1
- 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 +2 -2
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -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/knowledge-base.ts +13 -0
- package/src/domains/providers/types/local-model-quirks.ts +2 -2
- 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 +39 -13
- 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/finish-contract.ts +2 -1
- 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/share/archive.ts +85 -36
- 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 +27 -26
- 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 +1 -19
- package/src/engine/apis/lmstudio.ts +1 -6
- package/src/engine/apis/ollama-native.ts +3 -3
- package/src/engine/apis/openai-completions.ts +2 -2
- package/src/engine/apis/residency.ts +3 -9
- 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/loop-guard.ts +0 -5
- 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 +14 -13
- package/src/entry/orchestrator.ts +107 -88
- package/src/interactive/application-controller.ts +21 -21
- package/src/interactive/bus-notices.ts +2 -2
- package/src/interactive/chat-loop.ts +8 -8
- package/src/interactive/chat-panel.ts +1 -1
- 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 +30 -33
- 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 +2 -44
- package/src/interactive/interactive-application.ts +79 -59
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +2 -2
- package/src/interactive/interactive-presentation.ts +21 -16
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +63 -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/fleet-run-approval.ts +3 -3
- package/src/interactive/overlays/handoff-review.ts +2 -2
- 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 +339 -293
- 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 +36 -10
- package/src/interactive/permission-overlay.ts +2 -2
- 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 +279 -183
- package/src/interactive/slash-spec.ts +160 -17
- package/src/interactive/status/controller.ts +2 -2
- package/src/interactive/stream-pacing-policy.ts +1 -1
- package/src/interactive/tasks-overlay.ts +20 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/turn-context.ts +11 -11
- 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 +12 -5
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/builtin-tool-catalog.ts +1 -1
- package/src/tools/compete-worktrees.ts +27 -17
- package/src/tools/context/index.ts +15 -1
- package/src/tools/dispatch-admission.ts +4 -2
- package/src/tools/dispatch-arguments.ts +1 -1
- package/src/tools/dispatch-plan.ts +0 -11
- package/src/tools/dispatch-run-events.ts +12 -10
- package/src/tools/dispatch-runner.ts +11 -6
- package/src/tools/dispatch.ts +1 -1
- package/src/tools/find.ts +1 -6
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observers.ts +0 -33
- package/src/tools/task-worktree.ts +28 -7
- package/src/tools/verify/authoring.ts +3 -6
- package/src/tools/verify/frontend.ts +1 -1
- 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-GXNLGKAB.js +0 -571
- package/dist/chunk-VFA6GDY5.js +0 -1625
- package/dist/doctor-QOA5FNY5.js +0 -313
- package/src/engine/apis/degraded-inference.ts +0 -95
- /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
- /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
|
@@ -456,8 +456,8 @@ function calculateUsageCostUsd(meter: RunTokenMeter, pricing: EffectivePricing["
|
|
|
456
456
|
* admit a route before settings are resolved, and it defers to the one place
|
|
457
457
|
* that owns the default rather than restating the number here.
|
|
458
458
|
*/
|
|
459
|
-
|
|
460
|
-
return settings?.
|
|
459
|
+
function admissionMaxOutputTokens(settings: EffectiveSettings): number {
|
|
460
|
+
return settings?.chat.maxOutputTokens ?? DEFAULT_SETTINGS.chat.maxOutputTokens;
|
|
461
461
|
}
|
|
462
462
|
|
|
463
463
|
function conservativeRouteAdmissionEstimateUsd(pricing: EffectivePricing, maxOutputTokens: number): number {
|
|
@@ -509,7 +509,7 @@ function eventContainsFirstModelToken(event: Record<string, unknown>): boolean {
|
|
|
509
509
|
}
|
|
510
510
|
|
|
511
511
|
function eventStartsTool(event: Record<string, unknown>): boolean {
|
|
512
|
-
return event.type === "tool_execution_start" || event.type === "
|
|
512
|
+
return event.type === "tool_execution_start" || event.type === "clio_coder_tool_start";
|
|
513
513
|
}
|
|
514
514
|
|
|
515
515
|
function finitePositive(value: unknown): number | undefined {
|
|
@@ -686,7 +686,7 @@ async function awaitEventDrain(drained: Promise<void>, graceMs = DISPATCH_DRAIN_
|
|
|
686
686
|
function reportDispatchDiagnostic(scope: string, error: unknown): void {
|
|
687
687
|
const message = error instanceof Error ? error.message : String(error);
|
|
688
688
|
try {
|
|
689
|
-
process.stderr.write(`[clio:dispatch] ${scope}: ${message}\n`);
|
|
689
|
+
process.stderr.write(`[clio-coder:dispatch] ${scope}: ${message}\n`);
|
|
690
690
|
} catch {
|
|
691
691
|
// stderr itself is best-effort
|
|
692
692
|
}
|
|
@@ -892,7 +892,7 @@ export interface WorkspaceRootFacts {
|
|
|
892
892
|
* claimed `npm test` then "validated" in 4ms. None of that is a model failure.
|
|
893
893
|
* The harness knows the cwd exactly and was sending it nowhere.
|
|
894
894
|
*/
|
|
895
|
-
|
|
895
|
+
function readWorkspaceRootFacts(
|
|
896
896
|
cwd: string,
|
|
897
897
|
readEntries: (dir: string) => Dirent[] = readDirentsSafely,
|
|
898
898
|
): WorkspaceRootFacts {
|
|
@@ -922,7 +922,7 @@ function readDirentsSafely(dir: string): Dirent[] {
|
|
|
922
922
|
* projection of CLIO-CODER.md: a read-only scout that cannot afford the handbook read
|
|
923
923
|
* still needs its first shell call to land in the right place.
|
|
924
924
|
*/
|
|
925
|
-
|
|
925
|
+
function renderWorkerWorkspaceContext(workspace: WorkspaceRootFacts): string {
|
|
926
926
|
const lines = ["# Workspace", `Root: ${workspace.root}`, "Your process starts here; relative paths resolve from it."];
|
|
927
927
|
if (workspace.entries.length > 0) {
|
|
928
928
|
lines.push(`Top level: ${workspace.entries.join(", ")}${workspace.truncated ? ", …" : ""}`);
|
|
@@ -975,7 +975,7 @@ function renderPipelineInput(input: PipelineInput): PipelineInputRender {
|
|
|
975
975
|
* the command actually printed rather than a summary of it. Like pipeline
|
|
976
976
|
* input, this is data and is never presented as instructions.
|
|
977
977
|
*/
|
|
978
|
-
|
|
978
|
+
function renderPredecessorHandoffs(handoffs: ReadonlyArray<ExecutionHandoff>): WorkerPromptMessage | null {
|
|
979
979
|
if (handoffs.length === 0) return null;
|
|
980
980
|
const body = [
|
|
981
981
|
"Outputs from this step's declared predecessors, in dependency order.",
|
|
@@ -1105,7 +1105,7 @@ export interface WorkerDynamicContext {
|
|
|
1105
1105
|
* the projected "Verification expectations" body (verification-class runs
|
|
1106
1106
|
* only); when off, output is byte-identical to the historical renderer.
|
|
1107
1107
|
*/
|
|
1108
|
-
|
|
1108
|
+
function renderWorkerProjectContext(
|
|
1109
1109
|
project: ProjectStructuredContext,
|
|
1110
1110
|
options: { includeVerification?: boolean } = {},
|
|
1111
1111
|
): string {
|
|
@@ -1147,7 +1147,7 @@ function workerProjectContextIncludesVerification(body: string): boolean {
|
|
|
1147
1147
|
return body.includes("\nVerification expectations:\n");
|
|
1148
1148
|
}
|
|
1149
1149
|
|
|
1150
|
-
|
|
1150
|
+
function buildDynamicPromptMessages(
|
|
1151
1151
|
req: DispatchRequest,
|
|
1152
1152
|
dynamicContext: WorkerDynamicContext = {},
|
|
1153
1153
|
): WorkerPromptMessage[] {
|
|
@@ -1355,7 +1355,7 @@ interface DispatchLifecycleStage {
|
|
|
1355
1355
|
interface AcpDelegationLifecycleStage {
|
|
1356
1356
|
admission: DispatchAdmissionStage;
|
|
1357
1357
|
pathScope: DispatchPathScope;
|
|
1358
|
-
agentConfig: ReturnType<ConfigContract["get"]>["
|
|
1358
|
+
agentConfig: ReturnType<ConfigContract["get"]>["integrations"]["externalAgents"]["entries"][number];
|
|
1359
1359
|
cwd: string;
|
|
1360
1360
|
systemPrompt: string;
|
|
1361
1361
|
dynamicPromptMessages: ReadonlyArray<WorkerPromptMessage>;
|
|
@@ -1607,7 +1607,7 @@ function workerToolCallHardCap(settings: EffectiveSettings): number {
|
|
|
1607
1607
|
const parsedEnvCap = rawEnvCap && /^[1-9]\d*$/.test(rawEnvCap) ? Number(rawEnvCap) : Number.NaN;
|
|
1608
1608
|
return Number.isSafeInteger(parsedEnvCap)
|
|
1609
1609
|
? parsedEnvCap
|
|
1610
|
-
: (settings?.
|
|
1610
|
+
: (settings?.fleet.limits.toolCallsPerRun ?? GUARDRAIL_DEFAULTS.workerToolCallCap);
|
|
1611
1611
|
}
|
|
1612
1612
|
|
|
1613
1613
|
function resolveEffectiveWorkerBudget(input: {
|
|
@@ -1735,15 +1735,15 @@ function acpRuntimeLimitations(): string[] {
|
|
|
1735
1735
|
}
|
|
1736
1736
|
|
|
1737
1737
|
function readWorkerTargets(settings: ReturnType<ConfigContract["get"]> | undefined): WorkerTargets {
|
|
1738
|
-
const workerDefault = settings?.
|
|
1738
|
+
const workerDefault = settings?.fleet?.default
|
|
1739
1739
|
? {
|
|
1740
|
-
target: settings.
|
|
1741
|
-
model: settings.
|
|
1742
|
-
thinkingLevel: (settings.
|
|
1740
|
+
target: settings.fleet.default.target ?? null,
|
|
1741
|
+
model: settings.fleet.default.model ?? null,
|
|
1742
|
+
thinkingLevel: (settings.fleet.default.thinkingLevel ?? "off") as ThinkingLevel,
|
|
1743
1743
|
}
|
|
1744
1744
|
: null;
|
|
1745
1745
|
const workerProfiles: WorkerProfileMap = {};
|
|
1746
|
-
for (const [name, profile] of Object.entries(settings?.
|
|
1746
|
+
for (const [name, profile] of Object.entries(settings?.fleet?.profiles ?? {})) {
|
|
1747
1747
|
workerProfiles[name] = {
|
|
1748
1748
|
target: profile.target ?? null,
|
|
1749
1749
|
model: profile.model ?? null,
|
|
@@ -1751,7 +1751,7 @@ function readWorkerTargets(settings: ReturnType<ConfigContract["get"]> | undefin
|
|
|
1751
1751
|
};
|
|
1752
1752
|
}
|
|
1753
1753
|
const agentBindings: WorkerAgentBindingMap = {};
|
|
1754
|
-
for (const [agentId, profileName] of Object.entries(settings?.
|
|
1754
|
+
for (const [agentId, profileName] of Object.entries(settings?.fleet?.agentProfiles ?? {})) {
|
|
1755
1755
|
const id = agentId.trim();
|
|
1756
1756
|
const profile = profileName.trim();
|
|
1757
1757
|
if (id.length > 0 && profile.length > 0) agentBindings[id] = profile;
|
|
@@ -1928,17 +1928,17 @@ function buildDispatchWorkerSpec(input: DispatchWorkerSpecInput, config?: Config
|
|
|
1928
1928
|
if (input.req.trustProjectCompatRoots !== undefined) {
|
|
1929
1929
|
spec.trustProjectCompatRoots = input.req.trustProjectCompatRoots;
|
|
1930
1930
|
} else if (settings) {
|
|
1931
|
-
spec.trustProjectCompatRoots = settings.
|
|
1931
|
+
spec.trustProjectCompatRoots = settings.integrations.projectResources.trustProjectImports === true;
|
|
1932
1932
|
}
|
|
1933
|
-
spec.gitCommitAttribution = settings?.
|
|
1933
|
+
spec.gitCommitAttribution = settings?.integrations.git.commitAttribution ?? true;
|
|
1934
1934
|
// Non-stall posture (Symphony §10.5): a dispatched worker has no operator
|
|
1935
1935
|
// to answer a permission prompt by default, so the resolution policy ships
|
|
1936
1936
|
// with the spec and the worker enforces it within bounded time. Under the
|
|
1937
1937
|
// escalate posture the configured timeout/fallback bounds ride along so the
|
|
1938
1938
|
// worker still cannot hang when no operator resolves the ask.
|
|
1939
|
-
spec.onPermission = settings?.
|
|
1939
|
+
spec.onPermission = settings?.fleet.permissions.mode ?? "deny";
|
|
1940
1940
|
if (spec.onPermission === "escalate") {
|
|
1941
|
-
const escalation = settings?.
|
|
1941
|
+
const escalation = settings?.fleet.permissions.escalation;
|
|
1942
1942
|
if (escalation) spec.escalation = { timeoutMs: escalation.timeoutMs, fallback: escalation.fallback };
|
|
1943
1943
|
}
|
|
1944
1944
|
assertRuntimeCanHonorWorkerPermissionMode(input.target.runtime, spec.onPermission);
|
|
@@ -2032,7 +2032,7 @@ function autonomyEnforcementForAcpDelegation(
|
|
|
2032
2032
|
dangerousBypass: true,
|
|
2033
2033
|
};
|
|
2034
2034
|
}
|
|
2035
|
-
// clio-policy applies the exact autonomy mapping to every permission
|
|
2035
|
+
// clio-coder-policy applies the exact autonomy mapping to every permission
|
|
2036
2036
|
// request. deny-all is stricter than every autonomy level, but is still a
|
|
2037
2037
|
// Clio-mediated upper bound rather than an external approximation.
|
|
2038
2038
|
return { grade: "mediated", autonomy, ...authorityEvidence, externalMode: toolGovernance };
|
|
@@ -2426,7 +2426,7 @@ export function createDispatchBundle(
|
|
|
2426
2426
|
const heartbeatIntervalMs = options?.heartbeatIntervalMs ?? DEFAULT_HEARTBEAT_INTERVAL_MS;
|
|
2427
2427
|
const getResilienceCooldownMs = (): number => {
|
|
2428
2428
|
if (options?.resilienceCooldownMs !== undefined) return options.resilienceCooldownMs;
|
|
2429
|
-
const settingsVal = getEffectiveSettings()?.
|
|
2429
|
+
const settingsVal = getEffectiveSettings()?.fleet?.retry.routeCooldownMs;
|
|
2430
2430
|
if (settingsVal !== undefined && settingsVal >= 0) return settingsVal;
|
|
2431
2431
|
return DEFAULT_RESILIENCE_COOLDOWN_MS;
|
|
2432
2432
|
};
|
|
@@ -2598,7 +2598,7 @@ export function createDispatchBundle(
|
|
|
2598
2598
|
}
|
|
2599
2599
|
|
|
2600
2600
|
function configuredGlobalCapacity(settings: EffectiveSettings): number {
|
|
2601
|
-
const configured = settings?.
|
|
2601
|
+
const configured = settings?.fleet.concurrency;
|
|
2602
2602
|
return scheduling.maxWorkers?.() ?? (configured === "auto" || configured === undefined ? 4 : Math.max(1, configured));
|
|
2603
2603
|
}
|
|
2604
2604
|
|
|
@@ -2724,7 +2724,7 @@ export function createDispatchBundle(
|
|
|
2724
2724
|
const finalizedCosts: Array<{ usd: number; provenance: import("../providers/index.js").CostProvenance }> = [];
|
|
2725
2725
|
|
|
2726
2726
|
function workersMaxRetries(settings: EffectiveSettings = getEffectiveSettings()): number {
|
|
2727
|
-
const value = settings?.
|
|
2727
|
+
const value = settings?.fleet?.retry.maxRetries;
|
|
2728
2728
|
return typeof value === "number" && Number.isInteger(value) && value >= 0 ? value : 2;
|
|
2729
2729
|
}
|
|
2730
2730
|
|
|
@@ -3418,11 +3418,11 @@ export function createDispatchBundle(
|
|
|
3418
3418
|
providers,
|
|
3419
3419
|
);
|
|
3420
3420
|
enforceCapabilityGate(target.target.id, target.modelCapabilities, req.requiredCapabilities);
|
|
3421
|
-
assertRuntimeCanHonorWorkerPermissionMode(target.runtime, settings?.
|
|
3421
|
+
assertRuntimeCanHonorWorkerPermissionMode(target.runtime, settings?.fleet.permissions.mode ?? "deny");
|
|
3422
3422
|
assertWorkerBudgetEnforceable(target.runtime, spec.budget !== null || req.budget !== undefined);
|
|
3423
3423
|
|
|
3424
3424
|
const cwd = req.cwd ?? process.cwd();
|
|
3425
|
-
const sessionAutonomy = settings?.autonomy ?? "auto-edit";
|
|
3425
|
+
const sessionAutonomy = settings?.safety.autonomy ?? "auto-edit";
|
|
3426
3426
|
const effectiveAutonomy = clampWorkerAutonomy(sessionAutonomy, req.autonomy);
|
|
3427
3427
|
const effectiveTools = withLedgerToolNarrowing(
|
|
3428
3428
|
effectiveToolNames(admission.allowedTools, target, pathScope.writeBoundaries.length > 0, deniedToolNames(req)),
|
|
@@ -3445,7 +3445,7 @@ export function createDispatchBundle(
|
|
|
3445
3445
|
recipe.skills !== undefined &&
|
|
3446
3446
|
recipe.skills.length > 0 &&
|
|
3447
3447
|
req.noSkills !== true,
|
|
3448
|
-
onPermission: settings?.
|
|
3448
|
+
onPermission: settings?.fleet.permissions.mode ?? "deny",
|
|
3449
3449
|
persona: {
|
|
3450
3450
|
id: `persona.${recipe.id}`,
|
|
3451
3451
|
relPath: recipe.filepath,
|
|
@@ -3473,7 +3473,7 @@ export function createDispatchBundle(
|
|
|
3473
3473
|
capabilityClass: spec.capabilityClass,
|
|
3474
3474
|
projectContextTier: tier,
|
|
3475
3475
|
autonomy: effectiveAutonomy,
|
|
3476
|
-
onPermission: settings?.
|
|
3476
|
+
onPermission: settings?.fleet.permissions.mode ?? "deny",
|
|
3477
3477
|
project,
|
|
3478
3478
|
workspace: readWorkspaceRootFacts(cwd),
|
|
3479
3479
|
});
|
|
@@ -3493,7 +3493,7 @@ export function createDispatchBundle(
|
|
|
3493
3493
|
// Match chat-loop's LOCAL_API_KEY_FALLBACK so dispatch-spawned workers can
|
|
3494
3494
|
// reach openai-compat local endpoints (LM Studio, llama.cpp) without
|
|
3495
3495
|
// requiring the user to invent a credential.
|
|
3496
|
-
const apiKey = auth?.apiKey ?? (auth === null ? "clio-local-target" : undefined);
|
|
3496
|
+
const apiKey = auth?.apiKey ?? (auth === null ? "clio-coder-local-target" : undefined);
|
|
3497
3497
|
const runtimeKind: RunKind = target.runtime.kind;
|
|
3498
3498
|
const limitations = runtimeLimitations(runtimeKind, target.runtime.id);
|
|
3499
3499
|
return {
|
|
@@ -3548,16 +3548,16 @@ export function createDispatchBundle(
|
|
|
3548
3548
|
}
|
|
3549
3549
|
}
|
|
3550
3550
|
if (!settings) throw new Error("dispatch: effective settings required for ACP delegation");
|
|
3551
|
-
const configured = settings.
|
|
3551
|
+
const configured = settings.integrations.externalAgents.entries.find((entry) => entry.id === agentId);
|
|
3552
3552
|
if (!configured) throw new Error(`dispatch: ACP delegation agent '${agentId}' not configured`);
|
|
3553
|
-
const toolGovernance = configured.toolGovernance ?? "clio-policy";
|
|
3553
|
+
const toolGovernance = configured.toolGovernance ?? "clio-coder-policy";
|
|
3554
3554
|
if (options?.autonomyOverride === true && toolGovernance === "agent-managed") {
|
|
3555
3555
|
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`,
|
|
3556
|
+
`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
3557
|
);
|
|
3558
3558
|
}
|
|
3559
3559
|
const admission = resolveDelegationAdmissionStage(req, safety);
|
|
3560
|
-
const sessionAutonomy = settings.autonomy ?? "auto-edit";
|
|
3560
|
+
const sessionAutonomy = settings.safety.autonomy ?? "auto-edit";
|
|
3561
3561
|
const autonomy = clampWorkerAutonomy(sessionAutonomy, req.autonomy);
|
|
3562
3562
|
if (toolGovernance === "agent-managed" && autonomy !== sessionAutonomy) {
|
|
3563
3563
|
throw new Error(
|
|
@@ -3755,15 +3755,15 @@ export function createDispatchBundle(
|
|
|
3755
3755
|
if (eventContainsFirstModelToken(event)) markObservedPhase("firstModelTokenAt");
|
|
3756
3756
|
if (eventStartsTool(event)) markObservedPhase("firstToolAt");
|
|
3757
3757
|
}
|
|
3758
|
-
if (event.type === "
|
|
3758
|
+
if (event.type === "clio_coder_tool_start" && event.payload && typeof event.payload.tool === "string") {
|
|
3759
3759
|
recordToolStart(inFlightTools, event.payload);
|
|
3760
3760
|
}
|
|
3761
3761
|
// ACP is an external protocol peer, never an authority for Clio's
|
|
3762
3762
|
// deterministic terminal taxonomy. Ignore even syntactically valid
|
|
3763
3763
|
// assertions; only a future coordinator-side classifier may set one.
|
|
3764
|
-
if (event.type === "
|
|
3764
|
+
if (event.type === "clio_coder_run_outcome" && !reportedSpoofedOutcome) {
|
|
3765
3765
|
reportedSpoofedOutcome = true;
|
|
3766
|
-
reportDispatchDiagnostic("ACP outcome event", new Error("ignored untrusted
|
|
3766
|
+
reportDispatchDiagnostic("ACP outcome event", new Error("ignored untrusted clio_coder_run_outcome assertion"));
|
|
3767
3767
|
}
|
|
3768
3768
|
if (isRecord(event)) {
|
|
3769
3769
|
const finishEntry = appendDispatchFinishContractEntry(finishContractEntries, event);
|
|
@@ -3794,7 +3794,7 @@ export function createDispatchBundle(
|
|
|
3794
3794
|
if (message !== null) failureMessage = message;
|
|
3795
3795
|
}
|
|
3796
3796
|
}
|
|
3797
|
-
if (event.type === "
|
|
3797
|
+
if (event.type === "clio_coder_permission_resolved" && event.payload && typeof event.payload.tool === "string") {
|
|
3798
3798
|
const requestId =
|
|
3799
3799
|
typeof event.payload.requestId === "string" ? event.payload.requestId : `delegation-permission-${Date.now()}`;
|
|
3800
3800
|
const origin = runIdForPermissionAudit !== null ? `delegation:${runIdForPermissionAudit}` : "delegation:unknown";
|
|
@@ -3820,7 +3820,7 @@ export function createDispatchBundle(
|
|
|
3820
3820
|
...(runIdForPermissionAudit !== null ? { requestedBy: runIdForPermissionAudit } : {}),
|
|
3821
3821
|
});
|
|
3822
3822
|
}
|
|
3823
|
-
if (event.type === "
|
|
3823
|
+
if (event.type === "clio_coder_tool_finish" && event.payload && typeof event.payload.tool === "string") {
|
|
3824
3824
|
recordToolCompletion(inFlightTools, event.payload);
|
|
3825
3825
|
recordToolFinish(toolStats, event.payload);
|
|
3826
3826
|
if (event.payload.decision === "allowed") safetyDecisionCounts.allowed += 1;
|
|
@@ -4022,7 +4022,7 @@ export function createDispatchBundle(
|
|
|
4022
4022
|
const finalFailureMessage = result.failureMessage ?? failureMessage;
|
|
4023
4023
|
const finalToolStats = snapshotToolStats(toolStats);
|
|
4024
4024
|
const unfinished = snapshotUnfinishedTools(inFlightTools);
|
|
4025
|
-
const toolGovernance = lifecycle.agentConfig.toolGovernance ?? "clio-policy";
|
|
4025
|
+
const toolGovernance = lifecycle.agentConfig.toolGovernance ?? "clio-coder-policy";
|
|
4026
4026
|
return {
|
|
4027
4027
|
runId: envelope.id,
|
|
4028
4028
|
agentId: req.agentId,
|
|
@@ -4075,7 +4075,7 @@ export function createDispatchBundle(
|
|
|
4075
4075
|
dynamicHash: lifecycle.dynamicHash,
|
|
4076
4076
|
promptSignature: lifecycle.promptSignature,
|
|
4077
4077
|
toolSignature: lifecycle.toolSignature,
|
|
4078
|
-
|
|
4078
|
+
clioCoderVersion: readClioVersion(),
|
|
4079
4079
|
piMonoVersion: readPiMonoVersion(),
|
|
4080
4080
|
platform: process.platform,
|
|
4081
4081
|
nodeVersion: process.version,
|
|
@@ -4089,7 +4089,7 @@ export function createDispatchBundle(
|
|
|
4089
4089
|
quality: createRunReceiptQuality({ runtimeEnforceable: false, enforcementPassed: null, resultContract: null }),
|
|
4090
4090
|
autonomyEnforcement: autonomyEnforcementForAcpDelegation(
|
|
4091
4091
|
lifecycle.autonomy,
|
|
4092
|
-
lifecycle.agentConfig.toolGovernance ?? "clio-policy",
|
|
4092
|
+
lifecycle.agentConfig.toolGovernance ?? "clio-coder-policy",
|
|
4093
4093
|
lifecycle.sessionAutonomy,
|
|
4094
4094
|
req.autonomy,
|
|
4095
4095
|
),
|
|
@@ -4119,7 +4119,7 @@ export function createDispatchBundle(
|
|
|
4119
4119
|
toolCallsRequested: result.delegation.toolCallsRequested,
|
|
4120
4120
|
toolCallsApproved: result.delegation.toolCallsApproved,
|
|
4121
4121
|
toolCallsDenied: result.delegation.toolCallsDenied,
|
|
4122
|
-
toolGovernance: lifecycle.agentConfig.toolGovernance ?? "clio-policy",
|
|
4122
|
+
toolGovernance: lifecycle.agentConfig.toolGovernance ?? "clio-coder-policy",
|
|
4123
4123
|
toolCallLog: acp.toolCallLog(),
|
|
4124
4124
|
},
|
|
4125
4125
|
sessionId: result.delegation.acpSessionId,
|
|
@@ -4354,7 +4354,7 @@ export function createDispatchBundle(
|
|
|
4354
4354
|
const requestedAt = new Date(now()).toISOString();
|
|
4355
4355
|
const timing: RunPhaseMarks = { requestedAt, decisionStartedAt: requestedAt };
|
|
4356
4356
|
const settings = getEffectiveSettings();
|
|
4357
|
-
const isAcpAgent = settings?.
|
|
4357
|
+
const isAcpAgent = settings?.integrations.externalAgents?.entries?.some((entry) => entry.id === req.agentId) ?? false;
|
|
4358
4358
|
if (isAcpAgent && !req.delegationAgentId) {
|
|
4359
4359
|
req.delegationAgentId = req.agentId;
|
|
4360
4360
|
}
|
|
@@ -4374,7 +4374,7 @@ export function createDispatchBundle(
|
|
|
4374
4374
|
const recipe = agents.get(req.agentId);
|
|
4375
4375
|
const activation = consumeActiveRouteApproval({
|
|
4376
4376
|
request: req,
|
|
4377
|
-
settings: settings?.
|
|
4377
|
+
settings: settings?.fleet.adaptiveRouting,
|
|
4378
4378
|
capabilityClass: recipe === null ? null : normalizeAgentSpec(recipe).capabilityClass,
|
|
4379
4379
|
failover: failoverModeFor(req),
|
|
4380
4380
|
requestedAt,
|
|
@@ -4668,7 +4668,7 @@ export function createDispatchBundle(
|
|
|
4668
4668
|
context.bus.emit(BusChannels.DispatchProgress, {
|
|
4669
4669
|
runId,
|
|
4670
4670
|
agentId: req.agentId,
|
|
4671
|
-
event: { type: "
|
|
4671
|
+
event: { type: "clio_coder_write_record_downgraded", payload: downgrade },
|
|
4672
4672
|
});
|
|
4673
4673
|
},
|
|
4674
4674
|
});
|
|
@@ -4722,8 +4722,8 @@ export function createDispatchBundle(
|
|
|
4722
4722
|
policySource?: string;
|
|
4723
4723
|
reason?: string;
|
|
4724
4724
|
skillActivation?: unknown;
|
|
4725
|
-
// Worker permission-escalation fields (
|
|
4726
|
-
//
|
|
4725
|
+
// Worker permission-escalation fields (clio_coder_permission_escalated /
|
|
4726
|
+
// clio_coder_permission_resolved escalate path).
|
|
4727
4727
|
requestId?: string;
|
|
4728
4728
|
summary?: string;
|
|
4729
4729
|
target?: string;
|
|
@@ -4736,12 +4736,12 @@ export function createDispatchBundle(
|
|
|
4736
4736
|
if (eventContainsFirstModelToken(event)) markObservedPhase("firstModelTokenAt");
|
|
4737
4737
|
if (eventStartsTool(event)) markObservedPhase("firstToolAt");
|
|
4738
4738
|
}
|
|
4739
|
-
if (event.type === "
|
|
4739
|
+
if (event.type === "clio_coder_tool_start" && event.payload && typeof event.payload.tool === "string") {
|
|
4740
4740
|
recordToolStart(inFlightTools, event.payload);
|
|
4741
4741
|
}
|
|
4742
|
-
if (event.type === "
|
|
4742
|
+
if (event.type === "clio_coder_steer_received") acknowledgeSteer(event.payload?.sequence);
|
|
4743
4743
|
if (
|
|
4744
|
-
event.type === "
|
|
4744
|
+
event.type === "clio_coder_run_outcome" &&
|
|
4745
4745
|
isRunOutcomeCode(event.payload?.outcomeCode) &&
|
|
4746
4746
|
event.payload.outcomeCode !== "worker_final_output_missing" &&
|
|
4747
4747
|
event.payload.outcomeCode !== "host_verification_rejected"
|
|
@@ -4764,7 +4764,11 @@ export function createDispatchBundle(
|
|
|
4764
4764
|
}
|
|
4765
4765
|
recordWorkerRunEffect(runEffects, event);
|
|
4766
4766
|
}
|
|
4767
|
-
if (
|
|
4767
|
+
if (
|
|
4768
|
+
event.type === "clio_coder_permission_escalated" &&
|
|
4769
|
+
event.payload &&
|
|
4770
|
+
typeof event.payload.requestId === "string"
|
|
4771
|
+
) {
|
|
4768
4772
|
escalationCounts.requested += 1;
|
|
4769
4773
|
const ctx = isRecord(event.payload.decision) ? event.payload.decision : null;
|
|
4770
4774
|
const classification = ctx !== null && isRecord(ctx.classification) ? ctx.classification : null;
|
|
@@ -4825,7 +4829,7 @@ export function createDispatchBundle(
|
|
|
4825
4829
|
if (message !== null) failureMessage = message;
|
|
4826
4830
|
}
|
|
4827
4831
|
}
|
|
4828
|
-
if (event.type === "
|
|
4832
|
+
if (event.type === "clio_coder_permission_resolved" && event.payload && typeof event.payload.tool === "string") {
|
|
4829
4833
|
// Escalation resolutions already have a request event. Policy
|
|
4830
4834
|
// deny/fail is non-stalling, so dispatch mints the adjacent pair.
|
|
4831
4835
|
const source = event.payload.source;
|
|
@@ -4878,7 +4882,7 @@ export function createDispatchBundle(
|
|
|
4878
4882
|
...(runIdForPermissionAudit !== null ? { requestedBy: runIdForPermissionAudit } : {}),
|
|
4879
4883
|
});
|
|
4880
4884
|
}
|
|
4881
|
-
if (event.type === "
|
|
4885
|
+
if (event.type === "clio_coder_tool_finish" && event.payload && typeof event.payload.tool === "string") {
|
|
4882
4886
|
recordToolCompletion(inFlightTools, event.payload);
|
|
4883
4887
|
recordToolFinish(toolStats, event.payload);
|
|
4884
4888
|
if (isSkillActivation(event.payload.skillActivation)) {
|
|
@@ -5237,7 +5241,7 @@ export function createDispatchBundle(
|
|
|
5237
5241
|
dynamicHash: lifecycle.dynamicHash,
|
|
5238
5242
|
promptSignature: lifecycle.promptSignature,
|
|
5239
5243
|
toolSignature: lifecycle.toolSignature,
|
|
5240
|
-
|
|
5244
|
+
clioCoderVersion: readClioVersion(),
|
|
5241
5245
|
piMonoVersion: readPiMonoVersion(),
|
|
5242
5246
|
platform: process.platform,
|
|
5243
5247
|
nodeVersion: process.version,
|
|
@@ -5262,7 +5266,7 @@ export function createDispatchBundle(
|
|
|
5262
5266
|
...(skillActivations.length > 0 ? { skillActivations: [...skillActivations] } : {}),
|
|
5263
5267
|
autonomyEnforcement: autonomyEnforcementForWorkerSpec(
|
|
5264
5268
|
spec,
|
|
5265
|
-
lifecycle.settings?.autonomy ?? "auto-edit",
|
|
5269
|
+
lifecycle.settings?.safety.autonomy ?? "auto-edit",
|
|
5266
5270
|
req.autonomy,
|
|
5267
5271
|
),
|
|
5268
5272
|
safety: {
|
|
@@ -5775,7 +5779,7 @@ export function createDispatchBundle(
|
|
|
5775
5779
|
req: DispatchRequest,
|
|
5776
5780
|
settings: EffectiveSettings = getEffectiveSettings(),
|
|
5777
5781
|
): DispatchPlanTaskResolution {
|
|
5778
|
-
const isAcpAgent = settings?.
|
|
5782
|
+
const isAcpAgent = settings?.integrations.externalAgents?.entries?.some((entry) => entry.id === req.agentId) ?? false;
|
|
5779
5783
|
if (isAcpAgent && !req.delegationAgentId) req = { ...req, delegationAgentId: req.agentId };
|
|
5780
5784
|
const validation = routeValidationProjection(req, true);
|
|
5781
5785
|
const validated = validateJobSpec(validation.jobSpec);
|
|
@@ -5851,7 +5855,7 @@ export function createDispatchBundle(
|
|
|
5851
5855
|
req,
|
|
5852
5856
|
);
|
|
5853
5857
|
assertPostRuntimeToolCompatibility(req.agentId, agentSpec, effectiveTools, target);
|
|
5854
|
-
assertRuntimeCanHonorWorkerPermissionMode(target.runtime, settings?.
|
|
5858
|
+
assertRuntimeCanHonorWorkerPermissionMode(target.runtime, settings?.fleet.permissions.mode ?? "deny");
|
|
5855
5859
|
assertWorkerBudgetEnforceable(target.runtime, agentSpec.budget !== null || req.budget !== undefined);
|
|
5856
5860
|
assertResponseSchemaEnforceable(target.runtime, target.modelCapabilities, req.responseSchema, effectiveTools.length);
|
|
5857
5861
|
assertWriteRootsEnforceable(target.runtime, pathScope.writeBoundaries);
|
|
@@ -5913,7 +5917,7 @@ export function createDispatchBundle(
|
|
|
5913
5917
|
specs,
|
|
5914
5918
|
request: req,
|
|
5915
5919
|
mode,
|
|
5916
|
-
activeAgentRoles: settings?.
|
|
5920
|
+
activeAgentRoles: settings?.fleet.adaptiveRouting.agentRoles ?? [],
|
|
5917
5921
|
...(agentIntent === undefined ? {} : { intentOverride: agentIntent }),
|
|
5918
5922
|
});
|
|
5919
5923
|
const settingsFingerprint = computeSettingsFingerprint(settings ?? null);
|
|
@@ -6008,7 +6012,7 @@ export function createDispatchBundle(
|
|
|
6008
6012
|
const recipe = agents.get(req.agentId);
|
|
6009
6013
|
return planActiveRoute({
|
|
6010
6014
|
request: req,
|
|
6011
|
-
settings: settings?.
|
|
6015
|
+
settings: settings?.fleet.adaptiveRouting,
|
|
6012
6016
|
capabilityClass: recipe === null ? null : normalizeAgentSpec(recipe).capabilityClass,
|
|
6013
6017
|
failover: failoverModeFor(req),
|
|
6014
6018
|
fixed,
|
|
@@ -6219,7 +6223,7 @@ export function createDispatchBundle(
|
|
|
6219
6223
|
costProvenance: "unknown",
|
|
6220
6224
|
compiledPromptHash: null,
|
|
6221
6225
|
staticCompositionHash: null,
|
|
6222
|
-
|
|
6226
|
+
clioCoderVersion: readClioVersion(),
|
|
6223
6227
|
piMonoVersion: readPiMonoVersion(),
|
|
6224
6228
|
platform: process.platform,
|
|
6225
6229
|
nodeVersion: process.version,
|
|
@@ -40,7 +40,7 @@ import { type ResultContract, resultContractShape } from "../agents/result-contr
|
|
|
40
40
|
* its recipe keeps sole authority over the shape. Every other kind is fully
|
|
41
41
|
* determined by its kind and can be quoted exactly.
|
|
42
42
|
*/
|
|
43
|
-
|
|
43
|
+
function fleetNodeAnswerDirective(kind: ResultContract["kind"]): string | null {
|
|
44
44
|
if (kind === "architect-plan") return null;
|
|
45
45
|
return [
|
|
46
46
|
`Your result contract for this step is \`${kind}\`.`,
|
|
@@ -18,7 +18,6 @@ import { performance } from "node:perf_hooks";
|
|
|
18
18
|
import { readClioVersion } from "../../core/package-root.js";
|
|
19
19
|
import { shellQuote } from "../../core/shell-quote.js";
|
|
20
20
|
import { clioStateDir } from "../../core/xdg.js";
|
|
21
|
-
import { atomicWrite } from "../../engine/session.js";
|
|
22
21
|
import {
|
|
23
22
|
evaluateRouteFacts,
|
|
24
23
|
type FactState,
|
|
@@ -92,16 +91,6 @@ export function readFleetPreflightRecords(): FleetPreflightRecord[] {
|
|
|
92
91
|
}
|
|
93
92
|
}
|
|
94
93
|
|
|
95
|
-
/** Upsert records keyed by (nodeId, projectRoot). */
|
|
96
|
-
export function recordFleetPreflight(records: ReadonlyArray<FleetPreflightRecord>): void {
|
|
97
|
-
const existing = readFleetPreflightRecords();
|
|
98
|
-
const merged = new Map<string, FleetPreflightRecord>();
|
|
99
|
-
for (const record of existing) merged.set(`${record.nodeId}\0${record.projectRoot}`, record);
|
|
100
|
-
for (const record of records) merged.set(`${record.nodeId}\0${record.projectRoot}`, record);
|
|
101
|
-
const file: FleetPreflightStoreFile = { version: 2, records: [...merged.values()] };
|
|
102
|
-
atomicWrite(storePath(), JSON.stringify(file, null, 2));
|
|
103
|
-
}
|
|
104
|
-
|
|
105
94
|
export interface FleetPreflightVerdict {
|
|
106
95
|
ok: boolean;
|
|
107
96
|
reason: string | null;
|
|
@@ -164,7 +153,8 @@ export function routeFactVerdict(
|
|
|
164
153
|
return evaluateRouteFacts(targets, resources, requirement, options);
|
|
165
154
|
}
|
|
166
155
|
|
|
167
|
-
const PREFLIGHT_MARKER = "clio-preflight/1";
|
|
156
|
+
const PREFLIGHT_MARKER = "clio-coder-preflight/1";
|
|
157
|
+
const LEGACY_PREFLIGHT_MARKER = "clio-preflight/1";
|
|
168
158
|
const DEFAULT_PREFLIGHT_TIMEOUT_MS = 20_000;
|
|
169
159
|
|
|
170
160
|
/**
|
|
@@ -187,8 +177,8 @@ function buildPreflightScript(
|
|
|
187
177
|
const cliBase = entry.endsWith(" worker") ? entry.slice(0, -" worker".length) : null;
|
|
188
178
|
const versionProbe =
|
|
189
179
|
cliBase !== null
|
|
190
|
-
? `v=$(${cliBase} --version 2>/dev/null | head -n 1); if [ -n "$v" ]; then echo "
|
|
191
|
-
: `echo
|
|
180
|
+
? `v=$(${cliBase} --version 2>/dev/null | head -n 1); if [ -n "$v" ]; then echo "clioCoder=$v"; else echo clioCoder=missing; fi`
|
|
181
|
+
: `echo clioCoder=custom-entry`;
|
|
192
182
|
const lines = [
|
|
193
183
|
`echo ${shellQuote(PREFLIGHT_MARKER)}`,
|
|
194
184
|
`if cd ${shellQuote(projectRoot)} 2>/dev/null; then echo cwd=ok; else echo cwd=missing; fi`,
|
|
@@ -342,7 +332,7 @@ export async function runFleetNodePreflight(
|
|
|
342
332
|
// Probe latency is durable eligibility evidence compared across nodes and
|
|
343
333
|
// across passes, so it is measured on the monotonic clock.
|
|
344
334
|
const probeDurationMs = Math.round(performance.now() - probeStartedAt);
|
|
345
|
-
if (!result.stdout.includes(PREFLIGHT_MARKER)) {
|
|
335
|
+
if (!result.stdout.includes(PREFLIGHT_MARKER) && !result.stdout.includes(LEGACY_PREFLIGHT_MARKER)) {
|
|
346
336
|
const stderr = result.stderr.trim().split("\n").slice(-1)[0] ?? "";
|
|
347
337
|
record.detail = `unreachable (ssh exit ${result.code}${stderr.length > 0 ? `: ${stderr}` : ""})`;
|
|
348
338
|
return record;
|
|
@@ -364,8 +354,9 @@ export async function runFleetNodePreflight(
|
|
|
364
354
|
};
|
|
365
355
|
checks.pathParity = lines.includes("cwd=ok");
|
|
366
356
|
checks.stateDirWritable = lines.includes("state=ok");
|
|
367
|
-
const
|
|
368
|
-
const
|
|
357
|
+
const clioCoderLine = lines.find((line) => line.startsWith("clioCoder="));
|
|
358
|
+
const legacyClioLine = lines.find((line) => line.startsWith("clio="));
|
|
359
|
+
const clioValue = clioCoderLine?.slice("clioCoder=".length) ?? legacyClioLine?.slice("clio=".length) ?? "missing";
|
|
369
360
|
if (clioValue === "custom-entry") {
|
|
370
361
|
// A custom clioCoderEntry that is not `<cli> worker` cannot be version-probed;
|
|
371
362
|
// the operator vouches for it. Presence is asserted, match is assumed.
|
|
@@ -204,12 +204,6 @@ export interface FleetRunOutcome {
|
|
|
204
204
|
planHash: string;
|
|
205
205
|
result: ExecutionPlanResult;
|
|
206
206
|
receipts: ReadonlyArray<RunReceipt>;
|
|
207
|
-
/**
|
|
208
|
-
* The bare sum of every receipt's `costUsd`, which adds unpriced zeros to
|
|
209
|
-
* priced dollars and so cannot be rendered on its own. Retained for the
|
|
210
|
-
* interactive fleet overlay, which still reads it. Render `totalCost`.
|
|
211
|
-
*/
|
|
212
|
-
totalCostUsd: number;
|
|
213
207
|
/**
|
|
214
208
|
* The fold that keeps unpriced calls distinguishable from priced ones, so a
|
|
215
209
|
* run whose every receipt came back `unknown` renders as not measured rather
|
|
@@ -862,7 +856,6 @@ export async function executeFleetRun(input: ExecuteFleetRunInput): Promise<Flee
|
|
|
862
856
|
planHash: input.plan.hash,
|
|
863
857
|
result,
|
|
864
858
|
receipts,
|
|
865
|
-
totalCostUsd: receipts.reduce((sum, receipt) => sum + receipt.costUsd, 0),
|
|
866
859
|
totalCost: aggregateCostAmounts(
|
|
867
860
|
receipts.map((receipt) => ({ usd: receipt.costUsd, provenance: receipt.costProvenance })),
|
|
868
861
|
),
|
|
@@ -380,7 +380,8 @@ function semanticError(value: unknown): string | null {
|
|
|
380
380
|
value.winner.index < 1 ||
|
|
381
381
|
!isSubjectRef(value.winner.subject) ||
|
|
382
382
|
typeof value.winner.branch !== "string" ||
|
|
383
|
-
value.winner.branch !== `clio/compete/${value.group}/${value.winner.index}`
|
|
383
|
+
(value.winner.branch !== `clio-coder/compete/${value.group}/${value.winner.index}` &&
|
|
384
|
+
value.winner.branch !== `clio/compete/${value.group}/${value.winner.index}`)
|
|
384
385
|
) {
|
|
385
386
|
return "gate decision winner invalid";
|
|
386
387
|
}
|
|
@@ -433,9 +434,12 @@ function pendingDecisionPath(id: string, stateDir = clioStateDir()): string {
|
|
|
433
434
|
return join(pendingDecisionsDirectory(stateDir), `${id}.json`);
|
|
434
435
|
}
|
|
435
436
|
|
|
436
|
-
function decisionPayload(
|
|
437
|
+
function decisionPayload(
|
|
438
|
+
decision: Omit<GateDecisionArtifact, "integrity">,
|
|
439
|
+
legacyNaming = false,
|
|
440
|
+
): Record<string, unknown> {
|
|
437
441
|
return {
|
|
438
|
-
contract: "clio.gateDecision.integrity",
|
|
442
|
+
contract: legacyNaming ? "clio.gateDecision.integrity" : "clio-coder.gateDecision.integrity",
|
|
439
443
|
version: decision.version,
|
|
440
444
|
id: decision.id,
|
|
441
445
|
group: decision.group,
|
|
@@ -467,9 +471,9 @@ function decisionPayload(decision: Omit<GateDecisionArtifact, "integrity">): Rec
|
|
|
467
471
|
};
|
|
468
472
|
}
|
|
469
473
|
|
|
470
|
-
function decisionDigest(decision: Omit<GateDecisionArtifact, "integrity"
|
|
474
|
+
function decisionDigest(decision: Omit<GateDecisionArtifact, "integrity">, legacyNaming = false): string {
|
|
471
475
|
return createHash("sha256")
|
|
472
|
-
.update(JSON.stringify(decisionPayload(decision)), "utf8")
|
|
476
|
+
.update(JSON.stringify(decisionPayload(decision, legacyNaming)), "utf8")
|
|
473
477
|
.digest("hex");
|
|
474
478
|
}
|
|
475
479
|
|
|
@@ -502,7 +506,9 @@ export function verifyGateDecisionArtifact(artifact: GateDecisionArtifact): Gate
|
|
|
502
506
|
const invalid = semanticError(artifact);
|
|
503
507
|
if (invalid !== null) return { ok: false, reason: invalid };
|
|
504
508
|
if (!/^[0-9a-f]{64}$/.test(artifact.integrity.digest)) return { ok: false, reason: "gate decision integrity invalid" };
|
|
505
|
-
|
|
509
|
+
const withoutIntegrity = artifactWithoutIntegrity(artifact);
|
|
510
|
+
return decisionDigest(withoutIntegrity) === artifact.integrity.digest ||
|
|
511
|
+
decisionDigest(withoutIntegrity, true) === artifact.integrity.digest
|
|
506
512
|
? { ok: true }
|
|
507
513
|
: { ok: false, reason: "gate decision integrity mismatch" };
|
|
508
514
|
}
|
|
@@ -597,10 +603,13 @@ function cloneGateDecisionArtifact(artifact: GateDecisionArtifact): GateDecision
|
|
|
597
603
|
};
|
|
598
604
|
}
|
|
599
605
|
|
|
600
|
-
function pendingRecordPayload(
|
|
606
|
+
function pendingRecordPayload(
|
|
607
|
+
record: PendingGateRecordWithoutIntegrity,
|
|
608
|
+
legacyNaming = false,
|
|
609
|
+
): Record<string, unknown> {
|
|
601
610
|
if (record.kind === "output") {
|
|
602
611
|
return {
|
|
603
|
-
contract: "clio.gateDecision.pending",
|
|
612
|
+
contract: legacyNaming ? "clio.gateDecision.pending" : "clio-coder.gateDecision.pending",
|
|
604
613
|
version: record.version,
|
|
605
614
|
kind: record.kind,
|
|
606
615
|
id: record.id,
|
|
@@ -617,12 +626,12 @@ function pendingRecordPayload(record: PendingGateRecordWithoutIntegrity): Record
|
|
|
617
626
|
}
|
|
618
627
|
const decisionWithoutIntegrity = artifactWithoutIntegrity(record.decision);
|
|
619
628
|
return {
|
|
620
|
-
contract: "clio.gateDecision.pending",
|
|
629
|
+
contract: legacyNaming ? "clio.gateDecision.pending" : "clio-coder.gateDecision.pending",
|
|
621
630
|
version: record.version,
|
|
622
631
|
kind: record.kind,
|
|
623
632
|
id: record.id,
|
|
624
633
|
decision: {
|
|
625
|
-
...decisionPayload(decisionWithoutIntegrity),
|
|
634
|
+
...decisionPayload(decisionWithoutIntegrity, legacyNaming),
|
|
626
635
|
integrity: { ...record.decision.integrity },
|
|
627
636
|
},
|
|
628
637
|
...(record.finalOutput !== undefined ? { finalOutput: record.finalOutput } : {}),
|
|
@@ -631,9 +640,9 @@ function pendingRecordPayload(record: PendingGateRecordWithoutIntegrity): Record
|
|
|
631
640
|
};
|
|
632
641
|
}
|
|
633
642
|
|
|
634
|
-
function pendingRecordDigest(record: PendingGateRecordWithoutIntegrity): string {
|
|
643
|
+
function pendingRecordDigest(record: PendingGateRecordWithoutIntegrity, legacyNaming = false): string {
|
|
635
644
|
return createHash("sha256")
|
|
636
|
-
.update(JSON.stringify(pendingRecordPayload(record)), "utf8")
|
|
645
|
+
.update(JSON.stringify(pendingRecordPayload(record, legacyNaming)), "utf8")
|
|
637
646
|
.digest("hex");
|
|
638
647
|
}
|
|
639
648
|
|
|
@@ -721,10 +730,12 @@ function pendingSemanticError(value: unknown): string | null {
|
|
|
721
730
|
}
|
|
722
731
|
|
|
723
732
|
/** Verify both the pending envelope and its nested final artifact, when resolved. */
|
|
724
|
-
|
|
733
|
+
function verifyPendingGateDecisionRecord(record: PendingGateDecisionRecord): GateDecisionVerification {
|
|
725
734
|
const invalid = pendingSemanticError(record);
|
|
726
735
|
if (invalid !== null) return { ok: false, reason: invalid };
|
|
727
|
-
|
|
736
|
+
const withoutIntegrity = pendingRecordWithoutIntegrity(record);
|
|
737
|
+
return pendingRecordDigest(withoutIntegrity) === record.integrity.digest ||
|
|
738
|
+
pendingRecordDigest(withoutIntegrity, true) === record.integrity.digest
|
|
728
739
|
? { ok: true }
|
|
729
740
|
: { ok: false, reason: "pending gate decision integrity mismatch" };
|
|
730
741
|
}
|