@iowarp/clio-coder 0.3.9 → 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 +92 -0
- package/NOTICE +33 -0
- package/README.md +121 -16
- package/dist/{acp-7LOELQFP.js → acp-ZILU3AUO.js} +19 -18
- package/dist/{agents-FIBG2SHA.js → agents-HYWGBGQR.js} +53 -39
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-OI4LIH2I.js → auth-N3QT7CBO.js} +24 -21
- package/dist/{builtins-AD25UL3C.js → builtins-UJLMOVOV.js} +6 -6
- package/dist/{chunk-I4HZDVNP.js → chunk-2LEAKD4C.js} +2 -3
- package/dist/{chunk-465CC7FK.js → chunk-2NM363SV.js} +60 -64
- package/dist/{chunk-4H6ULJ3H.js → chunk-2VG7KLYV.js} +1046 -1370
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/{chunk-NZU6YDNV.js → chunk-3I5NY75V.js} +5 -5
- package/dist/{chunk-47CMYGET.js → chunk-3QSOM6PA.js} +2 -2
- package/dist/chunk-42FMPA75.js +101 -0
- package/dist/{chunk-HAY4ZE2P.js → chunk-5PSMVOLM.js} +2 -2
- package/dist/{chunk-IHKBWSXF.js → chunk-5QIAJV2D.js} +3 -3
- package/dist/chunk-5YHDIDBP.js +97 -0
- package/dist/chunk-6CCS4G3W.js +1529 -0
- package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
- package/dist/{chunk-BVDVID7E.js → chunk-6FN3E6KX.js} +6 -6
- package/dist/{chunk-DG4M6ZUE.js → chunk-6HMJX2VU.js} +59 -59
- package/dist/{chunk-3MRC2YSQ.js → chunk-6I5ILFOF.js} +3 -2
- package/dist/chunk-6NJQITNH.js +1412 -0
- package/dist/chunk-6VC4OV3Z.js +365 -0
- package/dist/{chunk-LU7P4LHA.js → chunk-72GZI5EV.js} +2 -2
- package/dist/{chunk-5T7RBWN2.js → chunk-74YWRRU5.js} +9 -8
- package/dist/{chunk-VPTUJU4P.js → chunk-7EPLI7VL.js} +2 -2
- package/dist/{chunk-CA42X6KT.js → chunk-7OBGU7UB.js} +7 -7
- package/dist/{chunk-56KB5IJP.js → chunk-7PWAODYW.js} +3 -3
- package/dist/chunk-7RY5VZPH.js +573 -0
- package/dist/{chunk-OEDBCISO.js → chunk-ABLSQ6JX.js} +3 -3
- package/dist/{chunk-5HFBWUMU.js → chunk-AFKWHWXF.js} +13 -23
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-WXCJ7VME.js → chunk-AKB4GYDL.js} +7 -7
- package/dist/chunk-AP73CFDC.js +308 -0
- package/dist/{chunk-4LJX2PUC.js → chunk-BBTJOK6Y.js} +5 -5
- package/dist/{chunk-QQ7EKM72.js → chunk-BDPT6GTK.js} +13 -61
- package/dist/chunk-BJGUKIG4.js +302 -0
- package/dist/chunk-BMS5RKQY.js +27 -0
- package/dist/{chunk-TD7UE2L5.js → chunk-BTGG6BG2.js} +81 -40
- 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-BNAZZHFG.js → chunk-BYP5D4HI.js} +1 -1
- package/dist/{chunk-HJB5IUKP.js → chunk-C537JADH.js} +18 -18
- package/dist/{chunk-774ILSRL.js → chunk-CDNVLKUX.js} +5 -4
- package/dist/{chunk-HPCTNZM2.js → chunk-CTJ4RNAA.js} +4 -4
- package/dist/{chunk-AEYBF3TB.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/chunk-D4CJV46V.js +462 -0
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-5PVQ4SRS.js → chunk-E67WX76H.js} +10 -126
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-EIMVLWB3.js +1842 -0
- package/dist/{chunk-AMKHQW3C.js → chunk-FEFIFZTL.js} +3 -3
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-3DUR4WUA.js → chunk-FYUN5KZ3.js} +25 -25
- package/dist/{chunk-MV3K5QF2.js → chunk-GCSMB2KY.js} +2 -2
- package/dist/chunk-GIZNH63R.js +40 -0
- package/dist/chunk-GPPB3JBE.js +688 -0
- package/dist/{chunk-B5XRQOLB.js → chunk-GVQJ5CCZ.js} +17 -11
- package/dist/chunk-HHV2GANA.js +88 -0
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-RKRLDWD3.js → chunk-HLW2MRKE.js} +1 -1
- package/dist/chunk-HRQMFLJP.js +75 -0
- package/dist/{chunk-AD7Y7STJ.js → chunk-HUAS7ITX.js} +107 -97
- package/dist/{chunk-O6I4CIEU.js → chunk-I66EAJFY.js} +6 -6
- package/dist/{chunk-S4COXYBG.js → chunk-IG7BCQBA.js} +129 -106
- package/dist/{chunk-N3PBVRTZ.js → chunk-IXJT6DCX.js} +9 -7
- package/dist/chunk-J4HBWF6Y.js +2635 -0
- package/dist/chunk-J5LZHVIT.js +284 -0
- package/dist/{chunk-GAYUJ7LE.js → chunk-JA5QWE4Z.js} +544 -227
- package/dist/{chunk-B5CSFE7B.js → chunk-JIEGK6UF.js} +6 -174
- package/dist/{chunk-VKBMFOYV.js → chunk-JZWT5J3Y.js} +23 -27
- package/dist/chunk-K6BF4U2H.js +1785 -0
- package/dist/{chunk-CGKSTWHD.js → chunk-K6BSR66V.js} +2 -1
- package/dist/{chunk-YSEHGPCT.js → chunk-MA3H6DM5.js} +6 -6
- package/dist/{chunk-EBOC7MT3.js → chunk-MOPSG2X7.js} +9 -9
- package/dist/{chunk-KV2AOLDF.js → chunk-MQXIVJ35.js} +18 -29
- package/dist/{chunk-P3JGPQFL.js → chunk-N5UK64DP.js} +4 -4
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/chunk-NEKRRTYW.js +56 -0
- package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-T3Z6VAAF.js → chunk-OJTRZGR3.js} +53 -92
- package/dist/{chunk-5DQRIYDZ.js → chunk-PBP4B7XR.js} +3 -3
- package/dist/{chunk-NQ6UCCOD.js → chunk-PJJ6MY27.js} +8 -8
- package/dist/chunk-PMZCIOCJ.js +25 -0
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-7C6RYZGQ.js → chunk-PVAMAVBB.js} +5 -4
- package/dist/chunk-QDC3K2U3.js +262 -0
- package/dist/{chunk-JEQQR47K.js → chunk-QKIFBZKT.js} +173 -14
- package/dist/{chunk-R7LNVMCS.js → chunk-QMXC4JB7.js} +70 -78
- package/dist/chunk-QSNYB6ZV.js +195 -0
- package/dist/chunk-QTFGO774.js +644 -0
- package/dist/{chunk-ODFEOB4F.js → chunk-R23Z6K6I.js} +27 -9
- package/dist/{chunk-3UUY7R3Z.js → chunk-R32CLGZ6.js} +14 -14
- package/dist/chunk-R346GLFC.js +31 -0
- package/dist/chunk-RKSR6VSF.js +132 -0
- package/dist/{chunk-N5XKWMDW.js → chunk-SCYB3HA4.js} +73 -27
- package/dist/{chunk-PZ4I4JE2.js → chunk-SINK3QR6.js} +135 -125
- package/dist/{chunk-5QKCQQ3E.js → chunk-SUW5DORT.js} +2 -2
- package/dist/chunk-T56WDKA5.js +183 -0
- package/dist/{chunk-ECUO3KDP.js → chunk-TD3PGPQA.js} +87 -26
- package/dist/{chunk-HKO36JWF.js → chunk-THYWACCR.js} +31 -3
- package/dist/{chunk-LXPJXFM5.js → chunk-TVH4ONAM.js} +18 -12
- package/dist/chunk-TVHHYFHE.js +255 -0
- package/dist/chunk-U2WB7TZS.js +271 -0
- package/dist/{chunk-NNNWO6F2.js → chunk-UAPGZHYC.js} +237 -33
- package/dist/{chunk-MIX5N5AC.js → chunk-UEDMSP56.js} +415 -160
- package/dist/{chunk-WIE7ZOSW.js → chunk-UXN6JT4W.js} +3 -3
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-MV2VUEJC.js → chunk-VEGN6WIQ.js} +2 -2
- package/dist/chunk-VKFQTNDV.js +66 -0
- package/dist/{chunk-FALJGAWU.js → chunk-VKRH2TCS.js} +2 -2
- package/dist/{chunk-A2NJGIB3.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-XK56QHLX.js → chunk-VPKWYKEY.js} +19 -5
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-EQ63NRB7.js → chunk-WNP7O5WZ.js} +3 -3
- package/dist/chunk-WR6U3OVP.js +45 -0
- package/dist/{chunk-TEO2TLVN.js → chunk-XKA2ICR3.js} +1051 -1196
- package/dist/{chunk-3V5AYSEQ.js → chunk-Y45G3AXC.js} +72 -65
- package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
- package/dist/chunk-YAKGTXEV.js +17 -0
- package/dist/{chunk-ZI647VB5.js → chunk-YPI3QQCF.js} +2 -2
- package/dist/{chunk-YW7UVM5V.js → chunk-ZAZB4JMW.js} +55 -11
- package/dist/{chunk-HCBCAYZU.js → chunk-ZJLUDYFY.js} +11 -11
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-IFBNV6H6.js → chunk-ZW55JB7N.js} +3 -3
- package/dist/cli/index.js +48 -37
- package/dist/clio-IT3G3VQH.js +25 -0
- package/dist/{code-nav-LMW275PA.js → code-nav-RK6S7F6E.js} +8 -8
- package/dist/codewiki/build-worker.js +1 -1
- package/dist/{compile-cache-CVJMMODC.js → compile-cache-OQAVB7Y5.js} +3 -5
- package/dist/{components-ZFA3SAER.js → components-UBWCQSRW.js} +6 -6
- package/dist/{config-RXS5T3JT.js → config-3QZRWZJF.js} +73 -61
- package/dist/configure-FL7Y3KJF.js +54 -0
- package/dist/{context-MVOORGMF.js → context-5HE7ODYK.js} +61 -49
- package/dist/{context-I3BTOTCS.js → context-KYQFRVDC.js} +11 -11
- package/dist/{context-PALKKQYL.js → context-XNHL75JV.js} +43 -28
- package/dist/{context-clear-N2WOYZ2K.js → context-clear-N545L53A.js} +60 -48
- package/dist/{context-working-set-MIEVECVZ.js → context-working-set-QHKXSV2F.js} +15 -13
- package/dist/{dispatch-runner-VVA4SRRH.js → dispatch-runner-RGIE5PCT.js} +109 -72
- package/dist/{docs-7LQ23DLM.js → docs-5NAF6AU7.js} +7 -13
- package/dist/doctor-ZGPEGHIP.js +772 -0
- package/dist/{eval-IJ5VEZDJ.js → eval-GXLL44RD.js} +106 -86
- package/dist/eval-inventory-HBWSWQOK.js +315 -0
- package/dist/{evidence-L5APPXNV.js → evidence-HWLBRH3Q.js} +209 -51
- package/dist/{evolve-RGNKFJ52.js → evolve-FTZBMNVW.js} +57 -45
- package/dist/{extensions-7WYWUX5A.js → extensions-VHRBEID7.js} +7 -7
- package/dist/{fleet-6CNVBZZP.js → fleet-CKZHJWZJ.js} +215 -114
- package/dist/{fleet-commands-L2SXSYEI.js → fleet-commands-EXDXBMV6.js} +13 -12
- package/dist/fleet-decisions-OTHB6KRL.js +157 -0
- package/dist/{fleet-graph-2J3OOIPO.js → fleet-graph-YTEZUCUT.js} +20 -17
- package/dist/fleet-inspect-SS6YMDCK.js +445 -0
- package/dist/{fleet-preflight-CZRJ4JP5.js → fleet-preflight-PBY4VYOM.js} +6 -9
- package/dist/{fleet-validate-C5RI6DP7.js → fleet-validate-KMEM5L3S.js} +25 -20
- package/dist/fleet-verify-QD5M7E7Q.js +178 -0
- package/dist/fleet-view-WAMJYNDT.js +94 -0
- package/dist/{init-VBN2ACVA.js → init-5XQRBOFV.js} +79 -66
- package/dist/install-NKNG7KD4.js +13 -0
- package/dist/interop-34TVO25M.js +116 -0
- package/dist/{library-JHGUMLY2.js → library-3QY6KF57.js} +25 -21
- package/dist/{memory-K4OQIYWG.js → memory-L4UTIIIW.js} +59 -47
- package/dist/{models-2NCZUWDD.js → models-ZVX3QOWE.js} +47 -37
- package/dist/{monitor-MMVTJABD.js → monitor-CEKVSYTS.js} +67 -57
- package/dist/{orchestrator-ZKBPCHW6.js → orchestrator-77BAP6BC.js} +7633 -7699
- package/dist/panes-7STHOAUJ.js +103 -0
- package/dist/panes-SHAUIRXY.js +60 -0
- package/dist/{paths-DBXMZMDU.js → paths-L7LGY6RN.js} +6 -6
- package/dist/{reset-DD5JGOY3.js → reset-EOLM7GVE.js} +15 -14
- package/dist/resources-74GKTLSF.js +115 -0
- package/dist/{run-QEGNX7FL.js → run-HBAUJNNZ.js} +139 -98
- package/dist/{share-JKD3BQMW.js → share-G3APVLVP.js} +25 -21
- package/dist/{skills-LMQIKDOZ.js → skills-35HHUKCR.js} +37 -27
- package/dist/{skills-eval-I7X2774U.js → skills-eval-QN4HSHDC.js} +80 -73
- package/dist/skills-inventory-J357J34F.js +129 -0
- package/dist/slash-commands-JZZCQA32.js +79 -0
- package/dist/{steer-CF5TDANS.js → steer-XAVHJM22.js} +4 -4
- package/dist/{support-I7LOJLIF.js → support-U7QOWY26.js} +7 -7
- package/dist/{targets-RUSR6B5Z.js → targets-DSM6CY3M.js} +67 -59
- package/dist/{terminal-lease-QYVORFR4.js → terminal-lease-JOPFUVEM.js} +15 -10
- package/dist/tools-MKNWVPBH.js +29 -0
- package/dist/{trace-ODOQIVIW.js → trace-ECQ7TIYZ.js} +194 -7
- package/dist/tui-primitives-K5PASC3O.js +17 -0
- package/dist/{uninstall-ZJF5H5ZN.js → uninstall-N34PCTGJ.js} +6 -8
- package/dist/{upgrade-XANW3FXB.js → upgrade-H7TOM7YL.js} +37 -62
- package/dist/{usage-4H7ZRXQT.js → usage-X52N3IDJ.js} +70 -59
- package/dist/{verifiers-UZXNBZEB.js → verifiers-EJTVVSMA.js} +174 -14
- package/dist/{verify-BVKWTNDL.js → verify-YJL6XET2.js} +12 -11
- package/dist/{web-fetch-2YHJ3KTG.js → web-fetch-MPIFL3LL.js} +3 -4
- package/dist/{wiki-generate-MY7WV2QI.js → wiki-generate-4NDZTQ4B.js} +86 -75
- package/dist/with-panes-OBOBFIIR.js +818 -0
- package/dist/worker/entry.js +131 -91
- package/docs/README.md +3 -2
- package/docs/acp.md +25 -4
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +2 -2
- package/docs/artifact-versions.md +4 -1
- package/docs/built-in-agents.md +40 -32
- package/docs/capacity-and-scheduling.md +43 -5
- package/docs/commands-and-modes.md +39 -4
- package/docs/config-knobs-audit.md +3 -0
- package/docs/configuration-and-targets.md +138 -167
- package/docs/context-engine.md +1 -1
- package/docs/development-pipeline.md +19 -0
- package/docs/dispatch-typed-intent.md +385 -0
- package/docs/documentation-coverage.md +2 -2
- package/docs/documentation-guide.md +1 -1
- package/docs/environment-variables.md +3 -1
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +1 -1
- package/docs/evidence-and-memory.md +2 -2
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +3 -1
- package/docs/extensions-and-sharing.md +25 -1
- package/docs/fleet-demo-runbook.md +6 -3
- package/docs/fleet-dispatch.md +30 -7
- package/docs/installation-and-lifecycle.md +16 -3
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +10 -1
- package/docs/observability.md +3 -3
- package/docs/proactive-memory.md +1 -1
- package/docs/prompt-envelope-and-tools.md +1 -1
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +164 -177
- package/docs/safety-model.md +2 -2
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +1 -1
- package/docs/skills-marketplace.md +1 -1
- package/docs/tool-usage.md +18 -8
- package/docs/trace-store.md +16 -11
- package/docs/troubleshooting.md +2 -2
- package/docs/tui-design.md +1 -1
- package/docs/worker-dispatch-mechanics.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 +8 -16
- 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 +8 -4
- package/src/cli/argv.ts +25 -0
- 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 +50 -48
- 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 +156 -0
- package/src/cli/doctor-toolchain.ts +78 -0
- package/src/cli/doctor.ts +34 -1
- package/src/cli/eval-inventory.ts +436 -0
- package/src/cli/eval.ts +13 -0
- package/src/cli/evidence-detail.ts +88 -0
- package/src/cli/evidence-inventory.ts +183 -0
- package/src/cli/evidence.ts +30 -5
- package/src/cli/fleet-decisions.ts +69 -0
- package/src/cli/fleet-inspect.ts +334 -0
- package/src/cli/fleet-preflight.ts +1 -1
- package/src/cli/fleet-verify.ts +133 -0
- package/src/cli/fleet-view.ts +827 -0
- package/src/cli/fleet.ts +154 -40
- package/src/cli/index.ts +14 -2
- package/src/cli/interop-inspect.ts +128 -0
- package/src/cli/interop.ts +34 -0
- package/src/cli/models.ts +3 -3
- package/src/cli/modes/print.ts +1 -1
- package/src/cli/panes.ts +35 -0
- package/src/cli/reset.ts +6 -3
- package/src/cli/run.ts +67 -13
- package/src/cli/share.ts +1 -1
- package/src/cli/skills-eval.ts +11 -11
- package/src/cli/skills-inventory.ts +185 -0
- package/src/cli/skills.ts +16 -13
- package/src/cli/targets.ts +23 -24
- package/src/cli/tools.ts +321 -0
- package/src/cli/trace-inspect.ts +252 -0
- package/src/cli/trace.ts +64 -2
- 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 +347 -0
- package/src/cli/verifiers.ts +9 -0
- 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-events.ts +4 -0
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1070 -845
- package/src/core/defaults.ts +342 -463
- 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/response-schema.ts +44 -4
- 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/theme-token-hex.ts +43 -0
- package/src/core/timers.ts +2 -12
- package/src/core/tool-names.ts +2 -1
- package/src/core/xdg.ts +1 -1
- package/src/domains/agents/catalog.ts +2 -12
- package/src/domains/agents/extension.ts +3 -3
- package/src/domains/agents/fleets/build-review.md +0 -3
- package/src/domains/agents/fleets/build-test.md +0 -3
- package/src/domains/agents/registry.ts +7 -7
- package/src/domains/agents/result-contract-filesystem.ts +32 -0
- package/src/domains/agents/result-contract.ts +165 -36
- package/src/domains/agents/spec.ts +0 -11
- package/src/domains/config/classify.ts +37 -46
- 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/admission-error.ts +9 -0
- package/src/domains/dispatch/admission.ts +22 -21
- 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 +23 -6
- package/src/domains/dispatch/code-step.ts +1 -1
- package/src/domains/dispatch/contract.ts +2 -2
- package/src/domains/dispatch/council-topology.ts +398 -0
- package/src/domains/dispatch/extension.ts +287 -111
- package/src/domains/dispatch/fleet-node-prompt.ts +62 -0
- package/src/domains/dispatch/fleet-plan.ts +7 -2
- package/src/domains/dispatch/fleet-preflight.ts +8 -17
- package/src/domains/dispatch/fleet-run.ts +59 -3
- package/src/domains/dispatch/gate-decisions.ts +36 -15
- package/src/domains/dispatch/gate-role-prompts.ts +9 -0
- package/src/domains/dispatch/gate-topology.ts +289 -0
- package/src/domains/dispatch/index.ts +19 -0
- package/src/domains/dispatch/intent-compatibility.ts +330 -0
- package/src/domains/dispatch/intent.ts +85 -1
- 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 +24 -27
- 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-bridge.ts +149 -0
- package/src/domains/dispatch/run-event-journal.ts +599 -0
- package/src/domains/dispatch/state.ts +45 -1
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +2 -19
- package/src/domains/dispatch/types.ts +16 -3
- package/src/domains/dispatch/validation.ts +33 -8
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +5 -4
- package/src/domains/eval/compare/compare.ts +3 -16
- package/src/domains/eval/compare/thresholds.ts +0 -8
- package/src/domains/eval/execution-provenance.ts +1 -1
- package/src/domains/eval/inventory.ts +113 -0
- 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/serving.ts +31 -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/evidence/store.ts +6 -0
- 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/index.ts +0 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- package/src/domains/memory/task-memory-policy.ts +6 -10
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/index.ts +7 -0
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/memory-intervention.ts +33 -21
- package/src/domains/middleware/runtime.ts +2 -2
- package/src/domains/mux/contract.ts +566 -0
- package/src/domains/mux/detect.ts +182 -0
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +53 -0
- package/src/domains/mux/index.ts +116 -0
- package/src/domains/mux/manifest.ts +6 -0
- package/src/domains/mux/operations.ts +192 -0
- package/src/domains/mux/pane-registry.ts +90 -0
- package/src/domains/mux/protocol.ts +62 -0
- package/src/domains/mux/socket-client.ts +964 -0
- package/src/domains/mux/types.ts +265 -0
- package/src/domains/mux/viewer-command.ts +59 -0
- package/src/domains/mux/yazi/assets/init.lua +2 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/LICENSE +21 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/README.md +78 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/main.lua +255 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/types.lua +12 -0
- package/src/domains/mux/yazi/assets/yazi.toml +17 -0
- package/src/domains/mux/yazi/event-stream.ts +182 -0
- package/src/domains/mux/yazi/profile.ts +299 -0
- package/src/domains/mux/yazi/session.ts +251 -0
- package/src/domains/mux/yazi/theme.ts +30 -0
- package/src/domains/observability/cost.ts +21 -0
- package/src/domains/observability/extension.ts +1 -1
- package/src/domains/observability/index.ts +2 -0
- 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 +63 -11
- 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/endpoint-capacity.ts +154 -22
- package/src/domains/providers/endpoint-slots-store.ts +189 -0
- package/src/domains/providers/extension.ts +25 -8
- package/src/domains/providers/index.ts +22 -0
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +46 -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/boot-manifest.ts +1 -0
- package/src/domains/providers/runtimes/builtins.ts +2 -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 +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 +285 -0
- package/src/domains/providers/support.ts +1 -0
- package/src/domains/providers/target-model-cache.ts +124 -0
- 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/index.ts +3 -0
- 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 +72 -13
- package/src/domains/resources/skills/marketplace.ts +21 -2
- package/src/domains/resources/skills/promotion.ts +214 -0
- package/src/domains/safety/action-classifier.ts +6 -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/archive.ts +175 -0
- package/src/domains/toolchain/contract.ts +28 -0
- package/src/domains/toolchain/extension.ts +47 -0
- package/src/domains/toolchain/index.ts +39 -0
- package/src/domains/toolchain/install.ts +327 -0
- package/src/domains/toolchain/manifest.ts +8 -0
- package/src/domains/toolchain/paths.ts +34 -0
- package/src/domains/toolchain/registry.ts +265 -0
- package/src/domains/toolchain/remove.ts +218 -0
- package/src/domains/toolchain/resolve.ts +182 -0
- package/src/domains/toolchain/types.ts +113 -0
- package/src/domains/toolchain/version.ts +88 -0
- package/src/engine/acp/adapter.ts +3 -3
- package/src/engine/acp/event-mapper.ts +3 -3
- package/src/engine/acp/server.ts +440 -96
- package/src/engine/acp/tool-mediator.ts +2 -2
- package/src/engine/acp/types.ts +20 -2
- 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 +87 -0
- package/src/engine/claude/sdk-runtime.ts +25 -17
- 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 +21 -0
- package/src/engine/tui.ts +1 -0
- package/src/engine/worker-events.ts +6 -6
- package/src/engine/worker-runtime.ts +16 -26
- package/src/entry/boot-options.ts +2 -0
- package/src/entry/orchestrator.ts +207 -90
- package/src/entry/panes-activation.ts +31 -0
- package/src/entry/with-panes.ts +20 -0
- 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 +2 -1
- package/src/interactive/cost-overlay.ts +3 -1
- package/src/interactive/council-grid.ts +3 -5
- package/src/interactive/council.ts +11 -0
- package/src/interactive/dispatch-board.ts +56 -49
- 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 +229 -62
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +9 -2
- package/src/interactive/interactive-presentation.ts +21 -16
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +99 -23
- 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 +3 -2
- package/src/interactive/modal-marker.ts +151 -0
- package/src/interactive/mutation-preview.ts +1 -1
- package/src/interactive/mux-bridge.ts +214 -0
- package/src/interactive/overlay-frame.ts +62 -14
- package/src/interactive/overlay-general-openers.ts +7 -2
- package/src/interactive/overlay-key-routing.ts +21 -10
- package/src/interactive/overlay-lifecycle.ts +20 -4
- package/src/interactive/overlay-model-selectors.ts +43 -6
- package/src/interactive/overlay-permission-lifecycle.ts +90 -22
- package/src/interactive/overlay-transitions.ts +18 -4
- package/src/interactive/overlays/agents.ts +3 -2
- package/src/interactive/overlays/ask-user.ts +161 -41
- package/src/interactive/overlays/auth-dialog.ts +1 -0
- package/src/interactive/overlays/context-reset.ts +29 -4
- package/src/interactive/overlays/cwd-fallback.ts +29 -4
- package/src/interactive/overlays/decisions.ts +15 -13
- package/src/interactive/overlays/extensions.ts +1 -0
- package/src/interactive/overlays/fleet-run-approval.ts +4 -3
- package/src/interactive/overlays/handoff-review.ts +3 -2
- package/src/interactive/overlays/help-reference.ts +2 -0
- package/src/interactive/overlays/interop.ts +2 -1
- package/src/interactive/overlays/library-install-confirm.ts +2 -1
- package/src/interactive/overlays/library-tabs.ts +28 -0
- package/src/interactive/overlays/list-overlay.ts +10 -1
- package/src/interactive/overlays/message-picker.ts +2 -1
- package/src/interactive/overlays/model-scope.ts +86 -0
- package/src/interactive/overlays/model-selector.ts +40 -31
- package/src/interactive/overlays/prompts.ts +11 -4
- package/src/interactive/overlays/session-selector.ts +3 -2
- package/src/interactive/overlays/settings-sections.ts +30 -0
- package/src/interactive/overlays/settings.ts +849 -268
- package/src/interactive/overlays/side-question.ts +3 -2
- package/src/interactive/overlays/skills-hub.ts +11 -19
- package/src/interactive/overlays/tree-selector.ts +3 -2
- package/src/interactive/pane-policy.ts +46 -0
- package/src/interactive/panes-runtime.ts +318 -0
- package/src/interactive/permission-overlay.ts +2 -2
- package/src/interactive/renderers/compaction-summary.ts +29 -0
- package/src/interactive/renderers/retry-status.ts +12 -4
- package/src/interactive/renderers/tool-execution.ts +4 -4
- package/src/interactive/renderers/worker-entry.ts +122 -14
- package/src/interactive/session-transcript.ts +3 -3
- package/src/interactive/slash-autocomplete.ts +454 -165
- package/src/interactive/slash-commands.ts +521 -189
- 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 +21 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/theme/tokens.ts +3 -14
- package/src/interactive/turn-context.ts +58 -13
- 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 +120 -9
- package/src/interactive/view/view-overlay.ts +14 -10
- package/src/interactive/watch-pane.ts +180 -0
- package/src/interactive/welcome-dashboard.ts +15 -15
- package/src/interactive/worker-progress.ts +11 -5
- package/src/interactive/worker-receipts.ts +20 -2
- package/src/interactive/worker-stream.ts +6 -4
- package/src/interactive/yazi-bridge.ts +451 -0
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/bootstrap.ts +26 -2
- package/src/tools/builtin-tool-catalog.ts +16 -1
- package/src/tools/compete-worktrees.ts +108 -17
- package/src/tools/context/index.ts +15 -1
- package/src/tools/core-bootstrap.ts +2 -1
- package/src/tools/dispatch-admission.ts +18 -5
- package/src/tools/dispatch-arguments.ts +21 -21
- package/src/tools/dispatch-plan.ts +0 -11
- package/src/tools/dispatch-run-events.ts +145 -28
- package/src/tools/dispatch-runner.ts +40 -13
- package/src/tools/dispatch-types.ts +15 -3
- package/src/tools/dispatch.ts +2 -2
- package/src/tools/executables.ts +17 -14
- package/src/tools/find.ts +1 -6
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observation.ts +54 -4
- package/src/tools/observers.ts +0 -33
- package/src/tools/panes-surface.ts +38 -0
- package/src/tools/panes.ts +112 -0
- package/src/tools/policy.ts +10 -1
- package/src/tools/presentation.ts +1 -0
- 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-D73KXYPF.js +0 -37
- package/dist/chunk-MLOK6ZOS.js +0 -2888
- package/dist/chunk-PNY46YEY.js +0 -1581
- package/dist/chunk-XDOQXGFO.js +0 -515
- package/dist/chunk-YKOFT37S.js +0 -279
- package/dist/clio-LT5V7SSZ.js +0 -26
- package/dist/configure-2WYWSCSD.js +0 -49
- package/dist/doctor-TWBWFK5V.js +0 -165
- 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
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
* can resolve both against user overrides stored in `settings.yaml`.
|
|
5
5
|
*
|
|
6
6
|
* The `Keybindings` interface in pi-tui is extensible via declaration merging.
|
|
7
|
-
* Adding `clio.*` ids here makes them typed everywhere the manager is
|
|
8
|
-
* pass a wrong id to `matches("clio.typo", ...)` and the compiler
|
|
7
|
+
* Adding `clio-coder.*` ids here makes them typed everywhere the manager is
|
|
8
|
+
* used: pass a wrong id to `matches("clio-coder.typo", ...)` and the compiler
|
|
9
|
+
* complains.
|
|
9
10
|
*/
|
|
10
11
|
|
|
11
12
|
import type { KeybindingDefinitions } from "../../engine/tui.js";
|
|
@@ -18,28 +19,28 @@ import { TUI_KEYBINDINGS } from "../../engine/tui.js";
|
|
|
18
19
|
* live in `resolveCtrlCAction` and are not a simple keybinding.
|
|
19
20
|
*/
|
|
20
21
|
export interface ClioAppKeybindings {
|
|
21
|
-
"clio.thinking.cycle": true;
|
|
22
|
-
"clio.exit": true;
|
|
23
|
-
"clio.status.toggle": true;
|
|
24
|
-
"clio.session.tree": true;
|
|
25
|
-
"clio.dispatchBoard.toggle": true;
|
|
26
|
-
"clio.tasks.open": true;
|
|
27
|
-
"clio.decisions.open": true;
|
|
28
|
-
"clio.dispatch.background": true;
|
|
29
|
-
"clio.model.select": true;
|
|
30
|
-
"clio.model.cycleForward": true;
|
|
31
|
-
"clio.model.cycleBackward": true;
|
|
32
|
-
"clio.tool.expand": true;
|
|
33
|
-
"clio.tool.expandAll": true;
|
|
34
|
-
"clio.tool.liveOutput": true;
|
|
35
|
-
"clio.thinking.expand": true;
|
|
36
|
-
"clio.thinking.expandAll": true;
|
|
37
|
-
"clio.editor.external": true;
|
|
38
|
-
"clio.message.followUp": true;
|
|
39
|
-
"clio.message.interrupt": true;
|
|
40
|
-
"clio.message.dequeue": true;
|
|
41
|
-
"clio.notifications.dismiss": true;
|
|
42
|
-
"clio.leader": true;
|
|
22
|
+
"clio-coder.thinking.cycle": true;
|
|
23
|
+
"clio-coder.exit": true;
|
|
24
|
+
"clio-coder.status.toggle": true;
|
|
25
|
+
"clio-coder.session.tree": true;
|
|
26
|
+
"clio-coder.dispatchBoard.toggle": true;
|
|
27
|
+
"clio-coder.tasks.open": true;
|
|
28
|
+
"clio-coder.decisions.open": true;
|
|
29
|
+
"clio-coder.dispatch.background": true;
|
|
30
|
+
"clio-coder.model.select": true;
|
|
31
|
+
"clio-coder.model.cycleForward": true;
|
|
32
|
+
"clio-coder.model.cycleBackward": true;
|
|
33
|
+
"clio-coder.tool.expand": true;
|
|
34
|
+
"clio-coder.tool.expandAll": true;
|
|
35
|
+
"clio-coder.tool.liveOutput": true;
|
|
36
|
+
"clio-coder.thinking.expand": true;
|
|
37
|
+
"clio-coder.thinking.expandAll": true;
|
|
38
|
+
"clio-coder.editor.external": true;
|
|
39
|
+
"clio-coder.message.followUp": true;
|
|
40
|
+
"clio-coder.message.interrupt": true;
|
|
41
|
+
"clio-coder.message.dequeue": true;
|
|
42
|
+
"clio-coder.notifications.dismiss": true;
|
|
43
|
+
"clio-coder.leader": true;
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
export type ClioKeybinding = keyof ClioAppKeybindings;
|
|
@@ -47,7 +48,7 @@ export type ClioKeybinding = keyof ClioAppKeybindings;
|
|
|
47
48
|
/**
|
|
48
49
|
* Declaration merge: pi-tui's `Keybindings` interface is open so downstream
|
|
49
50
|
* packages register their action ids. After this block, `KeybindingsManager`
|
|
50
|
-
* returned from `createKeybindingManager` accepts `clio.*` ids with full
|
|
51
|
+
* returned from `createKeybindingManager` accepts `clio-coder.*` ids with full
|
|
51
52
|
* TypeScript checking.
|
|
52
53
|
*/
|
|
53
54
|
declare module "@earendil-works/pi-tui" {
|
|
@@ -69,37 +70,37 @@ declare module "@earendil-works/pi-tui" {
|
|
|
69
70
|
* net for user rebinds.
|
|
70
71
|
*/
|
|
71
72
|
export const CLIO_APP_KEYBINDINGS = {
|
|
72
|
-
"clio.thinking.cycle": {
|
|
73
|
+
"clio-coder.thinking.cycle": {
|
|
73
74
|
defaultKeys: "shift+tab",
|
|
74
75
|
description: "Cycle orchestrator thinking level",
|
|
75
76
|
},
|
|
76
|
-
"clio.exit": {
|
|
77
|
+
"clio-coder.exit": {
|
|
77
78
|
defaultKeys: "ctrl+d",
|
|
78
79
|
description: "Exit when the editor is empty",
|
|
79
80
|
},
|
|
80
|
-
"clio.status.toggle": {
|
|
81
|
+
"clio-coder.status.toggle": {
|
|
81
82
|
defaultKeys: "alt+u",
|
|
82
83
|
description: "Toggle the footer dashboard (compact / expanded)",
|
|
83
84
|
},
|
|
84
|
-
"clio.session.tree": {
|
|
85
|
+
"clio-coder.session.tree": {
|
|
85
86
|
defaultKeys: "alt+t",
|
|
86
87
|
description: "Open the /tree navigator",
|
|
87
88
|
},
|
|
88
|
-
"clio.dispatchBoard.toggle": {
|
|
89
|
+
"clio-coder.dispatchBoard.toggle": {
|
|
89
90
|
defaultKeys: "alt+w",
|
|
90
91
|
description: "Toggle the dispatch (workers) board overlay",
|
|
91
92
|
},
|
|
92
|
-
"clio.tasks.open": {
|
|
93
|
+
"clio-coder.tasks.open": {
|
|
93
94
|
// Approved application-boundary override of pi-tui editor word-back.
|
|
94
95
|
defaultKeys: "alt+b",
|
|
95
96
|
description: "Open the composite session and operator task board",
|
|
96
97
|
},
|
|
97
|
-
"clio.decisions.open": {
|
|
98
|
+
"clio-coder.decisions.open": {
|
|
98
99
|
// Approved application-boundary override of pi-tui editor word-delete.
|
|
99
100
|
defaultKeys: "alt+d",
|
|
100
101
|
description: "Open the settled interview decision board",
|
|
101
102
|
},
|
|
102
|
-
"clio.dispatch.background": {
|
|
103
|
+
"clio-coder.dispatch.background": {
|
|
103
104
|
// Ctrl+B alone is pi-tui's editor cursor-left, so the Claude Code chord
|
|
104
105
|
// cannot be the primary here. Alt+S ("send to background") keeps the app
|
|
105
106
|
// scheme and earns the Ctrl+G leader fallback, which only alt+<letter>
|
|
@@ -107,56 +108,56 @@ export const CLIO_APP_KEYBINDINGS = {
|
|
|
107
108
|
defaultKeys: ["alt+s", "ctrl+alt+b"],
|
|
108
109
|
description: "Send the running attached dispatch to the background as a detached batch",
|
|
109
110
|
},
|
|
110
|
-
"clio.model.select": {
|
|
111
|
+
"clio-coder.model.select": {
|
|
111
112
|
defaultKeys: "alt+l",
|
|
112
113
|
description: "Open the model + targets selector",
|
|
113
114
|
},
|
|
114
|
-
"clio.model.cycleForward": {
|
|
115
|
+
"clio-coder.model.cycleForward": {
|
|
115
116
|
defaultKeys: "alt+j",
|
|
116
117
|
description: "Cycle to next scoped model",
|
|
117
118
|
},
|
|
118
|
-
"clio.model.cycleBackward": {
|
|
119
|
+
"clio-coder.model.cycleBackward": {
|
|
119
120
|
defaultKeys: "alt+k",
|
|
120
121
|
description: "Cycle to previous scoped model",
|
|
121
122
|
},
|
|
122
|
-
"clio.tool.expand": {
|
|
123
|
+
"clio-coder.tool.expand": {
|
|
123
124
|
defaultKeys: "alt+o",
|
|
124
125
|
description:
|
|
125
126
|
"Fold or unfold the newest tool call or worker block between its one-line summary and full details, overriding the /output level for that block",
|
|
126
127
|
},
|
|
127
|
-
"clio.tool.expandAll": {
|
|
128
|
+
"clio-coder.tool.expandAll": {
|
|
128
129
|
// Alt+Shift+letter is commonly consumed by OS keyboard-layout switching.
|
|
129
130
|
// Keep it discoverable, but pair it with the legacy-safe Ctrl+Alt form.
|
|
130
131
|
defaultKeys: ["ctrl+alt+o", "alt+shift+o"],
|
|
131
132
|
description:
|
|
132
133
|
"Fold or unfold every tool call and worker block at once, overriding the /output level; changing /output clears the overrides",
|
|
133
134
|
},
|
|
134
|
-
"clio.tool.liveOutput": {
|
|
135
|
+
"clio-coder.tool.liveOutput": {
|
|
135
136
|
defaultKeys: "alt+p",
|
|
136
137
|
description: "Toggle streaming partial tool output in expanded tool bodies",
|
|
137
138
|
},
|
|
138
|
-
"clio.thinking.expand": {
|
|
139
|
+
"clio-coder.thinking.expand": {
|
|
139
140
|
defaultKeys: "alt+r",
|
|
140
141
|
description:
|
|
141
142
|
"Toggle the latest thinking block between hidden marker and full body (no effect while /output verbose pins it open)",
|
|
142
143
|
},
|
|
143
|
-
"clio.thinking.expandAll": {
|
|
144
|
+
"clio-coder.thinking.expandAll": {
|
|
144
145
|
// Ctrl+Alt+R is the fallback for terminals/OSes that do not forward
|
|
145
146
|
// Alt+Shift+R as a distinct key event.
|
|
146
147
|
defaultKeys: ["ctrl+alt+r", "alt+shift+r"],
|
|
147
148
|
description:
|
|
148
149
|
"Toggle all thinking blocks between hidden markers and full bodies, overriding the /output level; changing /output clears the overrides",
|
|
149
150
|
},
|
|
150
|
-
"clio.editor.external": {
|
|
151
|
+
"clio-coder.editor.external": {
|
|
151
152
|
defaultKeys: "alt+g",
|
|
152
153
|
description: "Open the current input in an external editor",
|
|
153
154
|
},
|
|
154
|
-
"clio.message.followUp": {
|
|
155
|
+
"clio-coder.message.followUp": {
|
|
155
156
|
defaultKeys: "alt+enter",
|
|
156
157
|
description:
|
|
157
158
|
"End of turn: queue the current input for delivery when the active run settles (Enter delivers it at the next slot, between tool batches)",
|
|
158
159
|
},
|
|
159
|
-
"clio.message.interrupt": {
|
|
160
|
+
"clio-coder.message.interrupt": {
|
|
160
161
|
// Alt+I keeps the app scheme and earns the Ctrl+G leader fallback. A
|
|
161
162
|
// Ctrl+Enter chord was rejected because legacy terminals send it as a
|
|
162
163
|
// plain Enter, which would turn every send into a cancel.
|
|
@@ -164,15 +165,15 @@ export const CLIO_APP_KEYBINDINGS = {
|
|
|
164
165
|
description:
|
|
165
166
|
"Interrupt: cancel the active run and deliver the current input now (refused while an attached dispatch runs or a permission ask is parked; the input then queues for the next slot)",
|
|
166
167
|
},
|
|
167
|
-
"clio.message.dequeue": {
|
|
168
|
+
"clio-coder.message.dequeue": {
|
|
168
169
|
defaultKeys: "alt+up",
|
|
169
170
|
description: "Restore queued steering and follow-up messages to the editor",
|
|
170
171
|
},
|
|
171
|
-
"clio.notifications.dismiss": {
|
|
172
|
+
"clio-coder.notifications.dismiss": {
|
|
172
173
|
defaultKeys: "alt+x",
|
|
173
174
|
description: "Dismiss footer notifications",
|
|
174
175
|
},
|
|
175
|
-
"clio.leader": {
|
|
176
|
+
"clio-coder.leader": {
|
|
176
177
|
defaultKeys: "ctrl+g",
|
|
177
178
|
description: "Start portable leader-key fallback for Alt shortcuts",
|
|
178
179
|
},
|
|
@@ -752,7 +752,7 @@ function mergeTreeSitterWithRegexImports(
|
|
|
752
752
|
};
|
|
753
753
|
}
|
|
754
754
|
|
|
755
|
-
|
|
755
|
+
function fallbackExtraction(language: CodewikiLanguage, relPath: string, text: string): LanguageExtraction {
|
|
756
756
|
return extractWithExtractors(fallbackExtractors, language, relPath, text);
|
|
757
757
|
}
|
|
758
758
|
|
|
@@ -146,15 +146,15 @@ function collectStartupHints(cwd: string, options: ContextBundleOptions = {}): s
|
|
|
146
146
|
projectType !== "unknown" &&
|
|
147
147
|
options.noContextFiles !== true
|
|
148
148
|
) {
|
|
149
|
-
hints.push("clio: No CLIO-CODER.md detected. Run /context init to explore the repo and bootstrap context.");
|
|
149
|
+
hints.push("clio-coder: No CLIO-CODER.md detected. Run /context init to explore the repo and bootstrap context.");
|
|
150
150
|
}
|
|
151
151
|
for (const issue of clio.errors) {
|
|
152
|
-
hints.push(`clio: malformed ${issue.path} ignored: ${issue.error}`);
|
|
152
|
+
hints.push(`clio-coder: malformed ${issue.path} ignored: ${issue.error}`);
|
|
153
153
|
}
|
|
154
154
|
const state = readClioState(cwd);
|
|
155
155
|
if (!state) return hints;
|
|
156
156
|
if (state.contextSources !== undefined && adoptionSourcesChanged(state.contextSources, { cwd })) {
|
|
157
|
-
hints.push("clio: Imported agent context changed. Run /context init --adopt to refresh.");
|
|
157
|
+
hints.push("clio-coder: Imported agent context changed. Run /context init --adopt to refresh.");
|
|
158
158
|
}
|
|
159
159
|
return hints;
|
|
160
160
|
}
|
|
@@ -32,7 +32,7 @@ export function renderPromptContext(cwd: string): ProjectPromptContext {
|
|
|
32
32
|
const clioMd: ParsedClioMd | null = loadedClioMd.value;
|
|
33
33
|
for (const file of loadedClioMd.files) pieces.push(renderProjectContextFragment(file.value, file.path));
|
|
34
34
|
for (const issue of loadedClioMd.errors) {
|
|
35
|
-
warnings.push(`clio: malformed ${issue.path} ignored: ${issue.error}`);
|
|
35
|
+
warnings.push(`clio-coder: malformed ${issue.path} ignored: ${issue.error}`);
|
|
36
36
|
}
|
|
37
37
|
// Said where the handbook would have been: a model that sees no project
|
|
38
38
|
// context spends its first tool call reading CLIO-CODER.md and gets
|
|
@@ -39,7 +39,7 @@ const SOURCE_CITATION =
|
|
|
39
39
|
const INTERNAL_LINK = /\[[^\]]*\]\((?![a-z][a-z\d+.-]*:|\/\/|#)([^)\s]+\.md)(?:#[^)\s]*)?\)/gi;
|
|
40
40
|
|
|
41
41
|
/** Marker line carrying a page's unrepaired references; regenerated every pass. */
|
|
42
|
-
const REPAIR_NOTE = /^<!-- clio:wiki .*-->$/gm;
|
|
42
|
+
const REPAIR_NOTE = /^<!-- (?:clio-coder|clio):wiki .*-->$/gm;
|
|
43
43
|
|
|
44
44
|
export interface WikiPageIssue {
|
|
45
45
|
page: string;
|
|
@@ -79,7 +79,7 @@ function renderRepairNote(issues: ReadonlyArray<WikiPageIssue>): string {
|
|
|
79
79
|
const parts: string[] = [];
|
|
80
80
|
if (links.length > 0) parts.push(`unresolved links: ${[...new Set(links)].join(", ")}`);
|
|
81
81
|
if (citations.length > 0) parts.push(`unresolved sources: ${[...new Set(citations)].join(", ")}`);
|
|
82
|
-
return parts.length === 0 ? "" : `\n<!-- clio:wiki ${parts.join("; ")} -->\n`;
|
|
82
|
+
return parts.length === 0 ? "" : `\n<!-- clio-coder:wiki ${parts.join("; ")} -->\n`;
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
/**
|
|
@@ -144,10 +144,6 @@ function measure(input: ReplayMeasurement): MeasuredTrace {
|
|
|
144
144
|
};
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
-
export function measureReplayTrace(input: ReplayMeasurement): ReplayMetrics {
|
|
148
|
-
return measure(input).metrics;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
147
|
function mean(values: ReadonlyArray<number>): number {
|
|
152
148
|
return values.length === 0 ? 0 : values.reduce((sum, value) => sum + value, 0) / values.length;
|
|
153
149
|
}
|
|
@@ -49,7 +49,7 @@ function metricObject(metrics: ReplayMetrics, turnsToFirstSummaryCount: number):
|
|
|
49
49
|
export function renderReplayJson(input: ReplayReportInput): string {
|
|
50
50
|
const filtered = Object.fromEntries(Object.entries(input.cascade.filtered).sort(([a], [b]) => a.localeCompare(b)));
|
|
51
51
|
const artifact = {
|
|
52
|
-
schema: "clio-context-replay-v2",
|
|
52
|
+
schema: "clio-coder-context-replay-v2",
|
|
53
53
|
config: {
|
|
54
54
|
policies: [...input.config.policies],
|
|
55
55
|
budgets: [...input.config.budgets],
|
|
@@ -93,7 +93,7 @@ export const SYNTHETIC_CORPORA: ReadonlyArray<SyntheticCorpusSpec> = [
|
|
|
93
93
|
},
|
|
94
94
|
];
|
|
95
95
|
|
|
96
|
-
|
|
96
|
+
function syntheticCorpus(id: string): SyntheticCorpusSpec | undefined {
|
|
97
97
|
return SYNTHETIC_CORPORA.find((spec) => spec.id === id);
|
|
98
98
|
}
|
|
99
99
|
|
|
@@ -258,7 +258,7 @@ function testOutput(files: ReadonlyArray<RepoFile>, failing: RepoFile | null): s
|
|
|
258
258
|
}
|
|
259
259
|
|
|
260
260
|
/** Generate one trace of the corpus. `index` selects the trace; the spec's seed and index fix every byte. */
|
|
261
|
-
|
|
261
|
+
function generateSyntheticTrace(spec: SyntheticCorpusSpec, index: number): Trace {
|
|
262
262
|
const rnd = mulberry32(spec.seed * 1000 + index);
|
|
263
263
|
const between = (low: number, high: number): number => low + Math.floor(rnd() * (high - low + 1));
|
|
264
264
|
const pick = <T>(items: ReadonlyArray<T>): T => items[Math.floor(rnd() * items.length)] as T;
|
|
@@ -80,8 +80,8 @@ function enabled(input: ActivationInputs): boolean {
|
|
|
80
80
|
input.settings !== undefined &&
|
|
81
81
|
posture !== "manual" &&
|
|
82
82
|
input.failover === "approved" &&
|
|
83
|
-
input.settings.
|
|
84
|
-
input.settings.
|
|
83
|
+
input.settings.postures.includes(posture as (typeof input.settings.postures)[number]) &&
|
|
84
|
+
input.settings.agentRoles.length > 0
|
|
85
85
|
);
|
|
86
86
|
}
|
|
87
87
|
return (
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** A queued assignment was intentionally canceled before it acquired capacity. */
|
|
2
|
+
export class AdmissionCanceledError extends Error {
|
|
3
|
+
readonly code = "admission_canceled" as const;
|
|
4
|
+
|
|
5
|
+
constructor(message = "dispatch: admission canceled before a capacity slot opened") {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "AdmissionCanceledError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -2,6 +2,7 @@ import { randomBytes } from "node:crypto";
|
|
|
2
2
|
import { endpointLabel } from "../providers/endpoint-capacity.js";
|
|
3
3
|
import type { ActionClass } from "../safety/action-classifier.js";
|
|
4
4
|
import type { ScopeSpec } from "../safety/scope.js";
|
|
5
|
+
import { AdmissionCanceledError } from "./admission-error.js";
|
|
5
6
|
import { createAdmissionQueue } from "./admission-queue.js";
|
|
6
7
|
import {
|
|
7
8
|
acquireCapacityLease,
|
|
@@ -131,7 +132,12 @@ function describeAdmissionFailure(input: {
|
|
|
131
132
|
holders === undefined
|
|
132
133
|
? "the supplied capacity snapshot does not attribute the occupied slots"
|
|
133
134
|
: describeEndpointCapacityHolders(holders);
|
|
134
|
-
|
|
135
|
+
const queued = input.queueDepth > 0 ? `, ${input.queueDepth} more queued` : "";
|
|
136
|
+
return [
|
|
137
|
+
`dispatch: admission timed out after ${Math.round(input.waitedMs)}ms waiting for an endpoint slot`,
|
|
138
|
+
` on '${endpointLabel(input.endpointKey)}' (${endpointActive}/${endpointLimit} slots${queued}): ${occupancy}.`,
|
|
139
|
+
" Wait for the running request to settle or dispatch this work again.",
|
|
140
|
+
].join("");
|
|
135
141
|
}
|
|
136
142
|
}
|
|
137
143
|
const nodeLimit = input.limits.nodes[input.nodeId];
|
|
@@ -202,14 +208,9 @@ export function createCapacityAdmissionController(options: {
|
|
|
202
208
|
admittedLease = request.value();
|
|
203
209
|
return true;
|
|
204
210
|
} catch (error) {
|
|
205
|
-
//
|
|
206
|
-
//
|
|
207
|
-
//
|
|
208
|
-
if (error instanceof Error && /endpoint '.*' capacity reached/u.test(error.message)) {
|
|
209
|
-
queue.fail(request.requestId, error);
|
|
210
|
-
return false;
|
|
211
|
-
}
|
|
212
|
-
// Node and global capacity can wait. Anything else fails the request.
|
|
211
|
+
// Saturation at any capacity dimension is transient and keeps its
|
|
212
|
+
// assignment in the one bounded admission queue. Unavailable capacity,
|
|
213
|
+
// draining, corrupt state, and every other error still fail immediately.
|
|
213
214
|
if (error instanceof Error && /capacity reached/.test(error.message)) return false;
|
|
214
215
|
queue.fail(request.requestId, error instanceof Error ? error : new Error(String(error)));
|
|
215
216
|
return false;
|
|
@@ -278,18 +279,18 @@ export function createCapacityAdmissionController(options: {
|
|
|
278
279
|
pumpNow();
|
|
279
280
|
const outcome = await outcomePromise;
|
|
280
281
|
if (outcome.state !== "admitted") {
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
);
|
|
282
|
+
const detail = describeAdmissionFailure({
|
|
283
|
+
state: outcome.state,
|
|
284
|
+
nodeId: input.nodeId,
|
|
285
|
+
...(input.endpointKey !== undefined ? { endpointKey: input.endpointKey } : {}),
|
|
286
|
+
waitedMs: now() - queuedAt,
|
|
287
|
+
overdueAtQueueMs: queuedAt - input.deadlineAt,
|
|
288
|
+
queueDepth: queue.size(),
|
|
289
|
+
limits: options.limits(),
|
|
290
|
+
usage: options.usage?.() ?? capacityLeaseUsage({ nowMs: now() }),
|
|
291
|
+
});
|
|
292
|
+
if (outcome.state === "canceled") throw new AdmissionCanceledError(detail);
|
|
293
|
+
throw new Error(detail);
|
|
293
294
|
}
|
|
294
295
|
const lease = acquired.get(input.assignmentId);
|
|
295
296
|
if (!lease) throw new Error("dispatch: admitted request has no capacity lease");
|
|
@@ -249,7 +249,7 @@ function candidateRejections(spec: AgentSpec, intent: AgentTaskIntent): string[]
|
|
|
249
249
|
}
|
|
250
250
|
|
|
251
251
|
/** Hard filters first; display-only category is deliberately never read. */
|
|
252
|
-
|
|
252
|
+
function evaluateAgentCandidates(specs: ReadonlyArray<AgentSpec>, intent: AgentTaskIntent): AgentCandidateSet {
|
|
253
253
|
if (specs.length > AGENT_CANDIDATE_LIMIT) {
|
|
254
254
|
throw new Error(
|
|
255
255
|
`dispatch routing configuration error: agent candidate overflow (${specs.length}/${AGENT_CANDIDATE_LIMIT})`,
|
|
@@ -251,7 +251,7 @@ export function agentLedgerContribution(id: string, runId: string): AgentLedgerC
|
|
|
251
251
|
.filter((entry) => entry.runId === runId)
|
|
252
252
|
.sort((left, right) => left.sequence - right.sequence);
|
|
253
253
|
const digest = createHash("sha256")
|
|
254
|
-
.update(`clio.agentLedger:${canonicalJson(mine)}`, "utf8")
|
|
254
|
+
.update(`clio-coder.agentLedger:${canonicalJson(mine)}`, "utf8")
|
|
255
255
|
.digest("hex");
|
|
256
256
|
return { posted: contribution.posted, refused: contribution.refused, digest };
|
|
257
257
|
}
|
|
@@ -124,7 +124,7 @@ export function corroboration(entries: ReadonlyArray<AgentLedgerEntry>): Corrobo
|
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
/** Entry ids targeted by a review that did not pass. */
|
|
127
|
-
|
|
127
|
+
function disputes(entries: ReadonlyArray<AgentLedgerEntry>): ReadonlySet<string> {
|
|
128
128
|
const disputed = new Set<string>();
|
|
129
129
|
for (const entry of entries) {
|
|
130
130
|
if (entry.body.kind === "review" && !entry.body.passed) disputed.add(entry.body.target);
|
|
@@ -44,9 +44,9 @@ export interface AssignmentPolicy {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
export interface RoutingActivationSnapshot {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
roles: ReadonlyArray<ActiveRoutingRole>;
|
|
48
|
+
postures: ReadonlyArray<ActiveRoutingPosture>;
|
|
49
|
+
agentRoles: ReadonlyArray<ActiveAgentRole>;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
/** Activation is explicit in both dimensions and never widens mutation authority. */
|
|
@@ -60,8 +60,8 @@ export function activeRoutingEnabled(input: {
|
|
|
60
60
|
if (input.posture === "manual" || input.failover !== "approved") return false;
|
|
61
61
|
if (input.capabilityClass !== "read-only" && input.capabilityClass !== "verification") return false;
|
|
62
62
|
return (
|
|
63
|
-
input.settings.
|
|
64
|
-
input.settings.
|
|
63
|
+
input.settings.roles.includes(input.role as ActiveRoutingRole) &&
|
|
64
|
+
input.settings.postures.includes(input.posture as ActiveRoutingPosture)
|
|
65
65
|
);
|
|
66
66
|
}
|
|
67
67
|
|
|
@@ -68,7 +68,7 @@ export interface LeaseOwnerProbe {
|
|
|
68
68
|
alive?(pid: number): boolean;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
function capacityStatePath(): string {
|
|
72
72
|
return join(clioStateDir(), "dispatch-admission.json");
|
|
73
73
|
}
|
|
74
74
|
/** The admission state file itself keys the one cross-process transaction lock. */
|
|
@@ -263,6 +263,26 @@ export function describeEndpointCapacityHolders(holders: EndpointCapacityHolders
|
|
|
263
263
|
return `${named} ${total === 1 ? "holds" : "hold"} ${total === 1 ? "the slot" : "the slots"}`;
|
|
264
264
|
}
|
|
265
265
|
|
|
266
|
+
/**
|
|
267
|
+
* The ways past a saturated inference endpoint, in the order an operator can
|
|
268
|
+
* act on them.
|
|
269
|
+
*
|
|
270
|
+
* `maxConcurrentRequests` is named because the conservative default of one slot
|
|
271
|
+
* is a guess about an unprobed server, and on a server started with
|
|
272
|
+
* `--parallel 4` it is simply wrong. Without that sentence the denial reads as
|
|
273
|
+
* a hardware limit and the operator has no reason to look for a setting.
|
|
274
|
+
*
|
|
275
|
+
* `rosterFloor` is the smallest same-wave width the caller's topology can have.
|
|
276
|
+
* A council runs its whole roster in one wave, so "dispatch fewer at once" is
|
|
277
|
+
* not a move it has; saying so keeps the remedy honest.
|
|
278
|
+
*/
|
|
279
|
+
export function endpointCapacityRemedy(input?: { rosterFloor?: number }): string {
|
|
280
|
+
const ways =
|
|
281
|
+
"set this target's maxConcurrentRequests to the slot count the server was started with, collect in-flight runs, or point workers at a second server";
|
|
282
|
+
if (input?.rosterFloor === undefined) return `reduce the same-wave worker count, ${ways}`;
|
|
283
|
+
return `a council runs its whole roster in one wave and cannot go below ${input.rosterFloor} members, so ${ways}`;
|
|
284
|
+
}
|
|
285
|
+
|
|
266
286
|
function assertCapacity(
|
|
267
287
|
file: CapacityStateFile,
|
|
268
288
|
nodeId: string,
|
|
@@ -299,7 +319,7 @@ function assertCapacity(
|
|
|
299
319
|
const used = holders.leases + holders.reservations + holders.foregroundStreams;
|
|
300
320
|
if (used >= endpointLimit)
|
|
301
321
|
throw new Error(
|
|
302
|
-
`dispatch: admission denied: endpoint '${endpointLabel(endpointKey)}' capacity reached (${used}/${endpointLimit} slots): ${describeEndpointCapacityHolders(holders)};
|
|
322
|
+
`dispatch: admission denied: endpoint '${endpointLabel(endpointKey)}' capacity reached (${used}/${endpointLimit} slots): ${describeEndpointCapacityHolders(holders)}; ${endpointCapacityRemedy()}`,
|
|
303
323
|
);
|
|
304
324
|
}
|
|
305
325
|
}
|
|
@@ -488,10 +508,7 @@ export function createNodeLeaseUsageReader(options: {
|
|
|
488
508
|
};
|
|
489
509
|
}
|
|
490
510
|
|
|
491
|
-
|
|
492
|
-
nowMs?: number;
|
|
493
|
-
probe?: LeaseOwnerProbe;
|
|
494
|
-
}): ReadonlyArray<CapacityLease> {
|
|
511
|
+
function listCapacityLeases(options?: { nowMs?: number; probe?: LeaseOwnerProbe }): ReadonlyArray<CapacityLease> {
|
|
495
512
|
return withStateFileLockSync(capacityStateLockPath(), () => {
|
|
496
513
|
const file = readCapacityStateUnsafe();
|
|
497
514
|
const before = file.leases.length;
|
|
@@ -145,7 +145,7 @@ function resolveCwd(command: FleetCommand, workspaceRoot: string): string {
|
|
|
145
145
|
}
|
|
146
146
|
|
|
147
147
|
/** Closed environment: the base allowlist plus whatever this command declared. */
|
|
148
|
-
|
|
148
|
+
function codeStepEnv(command: FleetCommand, source: NodeJS.ProcessEnv): NodeJS.ProcessEnv {
|
|
149
149
|
const names = [...FLEET_COMMAND_BASE_ENV, ...command.env];
|
|
150
150
|
const env: NodeJS.ProcessEnv = {};
|
|
151
151
|
for (const name of names) {
|
|
@@ -308,7 +308,7 @@ export interface DispatchContract {
|
|
|
308
308
|
* assignment id addresses its current attempt. The text is sent as a JSON
|
|
309
309
|
* line on the worker's open stdin and injected into its transcript at the
|
|
310
310
|
* next loop boundary; the worker acknowledges runtime acceptance with a
|
|
311
|
-
* `
|
|
311
|
+
* `clio_coder_steer_received` event. Throws with an operator-facing message when
|
|
312
312
|
* the run is unknown or inactive, when the runtime is a single-shot
|
|
313
313
|
* subprocess or ACP delegation, or when the worker's stdin is already gone.
|
|
314
314
|
*/
|
|
@@ -319,7 +319,7 @@ export interface DispatchContract {
|
|
|
319
319
|
* running native worker. A logical assignment id addresses its current attempt (onPermission="escalate"). Writes a
|
|
320
320
|
* `permission_decision` JSON line on the worker's open stdin; the worker
|
|
321
321
|
* releases or denies the parked tool call and acks with a
|
|
322
|
-
* `
|
|
322
|
+
* `clio_coder_permission_resolved` event. Human-only: no model-facing tool can
|
|
323
323
|
* reach this. Throws with an operator-facing message when the run is
|
|
324
324
|
* unknown or no longer active, when the run kind has no stdin channel
|
|
325
325
|
* (acp-delegation), or when the worker's stdin is already gone. Mirrors
|