@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
|
@@ -27,7 +27,7 @@ interface MediatorInput {
|
|
|
27
27
|
toolGovernance: DelegationToolGovernance;
|
|
28
28
|
/**
|
|
29
29
|
* Session autonomy level (sd-01 §2.5). Applied after the safety net under
|
|
30
|
-
* clio-policy governance; `ask` dispositions resolve as non-stall denials
|
|
30
|
+
* clio-coder-policy governance; `ask` dispositions resolve as non-stall denials
|
|
31
31
|
* because a delegation has no operator to answer a prompt.
|
|
32
32
|
*/
|
|
33
33
|
autonomy?: AutonomyLevel;
|
|
@@ -579,7 +579,7 @@ export class AcpToolMediator {
|
|
|
579
579
|
let safetyDecision: SafetyDecision | undefined;
|
|
580
580
|
|
|
581
581
|
if (mapped.validationError !== undefined) {
|
|
582
|
-
if (this.input.toolGovernance === "clio-policy") {
|
|
582
|
+
if (this.input.toolGovernance === "clio-coder-policy") {
|
|
583
583
|
const invalidSafetyDecisions = mapped.evaluations.map((evaluation) =>
|
|
584
584
|
this.input.safety.evaluate({ tool: evaluation.tool, args: evaluation.args }),
|
|
585
585
|
);
|
package/src/engine/acp/types.ts
CHANGED
|
@@ -7,6 +7,13 @@ import type { AgentMessage } from "../types.js";
|
|
|
7
7
|
*/
|
|
8
8
|
export const ACP_USAGE_META_KEY = "clio-coder/usage";
|
|
9
9
|
export const ACP_SESSION_META_KEY = "clio-coder/session";
|
|
10
|
+
/**
|
|
11
|
+
* Per-frame agent attribution on `session/update`. It names which agent
|
|
12
|
+
* produced the frame so a client can label a message, reasoning item, or tool
|
|
13
|
+
* call instead of attributing every frame to the product. Purely additive: a
|
|
14
|
+
* client that does not read it sees exactly the frames it saw before.
|
|
15
|
+
*/
|
|
16
|
+
export const ACP_AGENT_META_KEY = "clio-coder/agent";
|
|
10
17
|
|
|
11
18
|
/**
|
|
12
19
|
* Wire bounds for one prompt turn (CONTRACT C001 §3). A client renders every
|
|
@@ -27,7 +34,7 @@ export const ACP_MAX_CHUNK_BYTES = 16384;
|
|
|
27
34
|
* Upper bound on a `toolCallId` this server puts on the wire, in UTF-8 bytes
|
|
28
35
|
* (CONTRACT C001 §3). Identity is one call per id in both directions: an engine
|
|
29
36
|
* id over this bound, missing, or already claimed by another call this turn
|
|
30
|
-
* travels under a `clio-tool-<n>` alias, and an engine id starting a second call
|
|
37
|
+
* travels under a `clio-coder-tool-<n>` alias, and an engine id starting a second call
|
|
31
38
|
* mints a fresh alias rather than reusing the first call's wire id. A permission
|
|
32
39
|
* request binds only to an id the client already received a `tool_call` for and
|
|
33
40
|
* has not yet seen finish; nothing is minted on that path.
|
|
@@ -87,11 +94,20 @@ export interface AcpImplementationInfo {
|
|
|
87
94
|
version?: string;
|
|
88
95
|
}
|
|
89
96
|
|
|
97
|
+
export interface AcpAuthMethod {
|
|
98
|
+
id: string;
|
|
99
|
+
name: string;
|
|
100
|
+
description?: string;
|
|
101
|
+
type: "agent" | "terminal";
|
|
102
|
+
args?: string[];
|
|
103
|
+
env?: Record<string, string>;
|
|
104
|
+
}
|
|
105
|
+
|
|
90
106
|
export interface AcpInitializeResponse {
|
|
91
107
|
protocolVersion?: number;
|
|
92
108
|
agentCapabilities?: Record<string, unknown>;
|
|
93
109
|
agentInfo?: AcpImplementationInfo;
|
|
94
|
-
authMethods?:
|
|
110
|
+
authMethods?: AcpAuthMethod[];
|
|
95
111
|
}
|
|
96
112
|
|
|
97
113
|
export interface AcpSessionInfo {
|
|
@@ -141,6 +157,8 @@ export interface AcpToolCallUpdate {
|
|
|
141
157
|
export interface AcpSessionUpdateParams {
|
|
142
158
|
sessionId?: string;
|
|
143
159
|
update?: Record<string, unknown>;
|
|
160
|
+
/** Namespaced extension slot; carries replay and agent-attribution metadata. */
|
|
161
|
+
_meta?: Record<string, unknown>;
|
|
144
162
|
}
|
|
145
163
|
|
|
146
164
|
export type AcpPermissionOptionKind = "allow_once" | "allow_always" | "reject_once" | "reject_always" | string;
|
package/src/engine/alcf-oauth.ts
CHANGED
|
@@ -40,7 +40,7 @@ function randomState(): string {
|
|
|
40
40
|
return base64Url(bytes);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
function buildAuthorizeUrl(params: { challenge: string; state: string }): string {
|
|
44
44
|
const query = new URLSearchParams({
|
|
45
45
|
client_id: AUTH_CLIENT_ID,
|
|
46
46
|
response_type: "code",
|
|
@@ -55,7 +55,7 @@ export function buildAuthorizeUrl(params: { challenge: string; state: string }):
|
|
|
55
55
|
return `${AUTHORIZE_URL}?${query.toString()}`;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
function parseAuthorizationInput(input: string): string {
|
|
59
59
|
const value = input.trim();
|
|
60
60
|
if (!value) return "";
|
|
61
61
|
try {
|
|
@@ -89,7 +89,7 @@ function isRecord(value: unknown): value is Record<string, unknown> {
|
|
|
89
89
|
return typeof value === "object" && value !== null;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
function selectGatewayGrant(payload: GlobusTokenResponse): GlobusTokenGrant {
|
|
93
93
|
const grants: GlobusTokenGrant[] = [payload, ...(Array.isArray(payload.other_tokens) ? payload.other_tokens : [])];
|
|
94
94
|
const byResourceServer = grants.find((grant) => grant.resource_server === GATEWAY_CLIENT_ID);
|
|
95
95
|
if (byResourceServer) return byResourceServer;
|
|
@@ -103,7 +103,7 @@ export function selectGatewayGrant(payload: GlobusTokenResponse): GlobusTokenGra
|
|
|
103
103
|
);
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
function grantToCredentials(grant: GlobusTokenGrant, previousRefresh?: string): OAuthCredentials {
|
|
107
107
|
const access = grant.access_token;
|
|
108
108
|
if (typeof access !== "string" || access.length === 0) {
|
|
109
109
|
throw new Error("Globus token response is missing an access token for the ALCF gateway.");
|
|
@@ -172,7 +172,7 @@ async function refreshGatewayToken(refreshToken: string, signal: AbortSignal): P
|
|
|
172
172
|
return grantToCredentials(selectGatewayGrant(payload), refreshToken);
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
|
|
175
|
+
async function loginAlcf(callbacks: OAuthLoginCallbacks): Promise<OAuthCredentials> {
|
|
176
176
|
const { verifier, challenge } = await generatePkce();
|
|
177
177
|
const url = buildAuthorizeUrl({ challenge, state: randomState() });
|
|
178
178
|
callbacks.onAuth({
|
|
@@ -63,7 +63,7 @@ export function antigravitySubprocessConfigForAutonomy(
|
|
|
63
63
|
return { extraArgs: [], dangerousBypass: false, externalMode: "agy-settings-default" };
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
function buildAntigravityPrompt(input: WorkerRunInput): string {
|
|
67
67
|
const parts: string[] = [];
|
|
68
68
|
const systemPrompt = input.systemPrompt.trim();
|
|
69
69
|
if (systemPrompt.length > 0) parts.push(systemPrompt);
|
|
@@ -75,7 +75,7 @@ export function buildAntigravityPrompt(input: WorkerRunInput): string {
|
|
|
75
75
|
return parts.join("\n\n");
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
function buildAgyArgs(input: WorkerRunInput): string[] {
|
|
79
79
|
assertToolProfileEnforceable(input.toolProfile, "antigravity-code");
|
|
80
80
|
const permission = antigravitySubprocessConfigForAutonomy(input.autonomy);
|
|
81
81
|
const args = ["--print", ...permission.extraArgs];
|
|
@@ -78,7 +78,7 @@ function unregisterEngineApiProviders(sourceId: string): void {
|
|
|
78
78
|
compatUniverse?.unregisterApiProviders(sourceId);
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
function getEngineApiProvider(api: Api): EngineRegisteredApiProvider | undefined {
|
|
82
82
|
return registry.get(api)?.provider;
|
|
83
83
|
}
|
|
84
84
|
|
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
type ResidencyAdapter,
|
|
6
6
|
ResidencyPreconditionError,
|
|
7
7
|
reconcileResidency,
|
|
8
|
-
resetResidencyState,
|
|
9
8
|
residencyManaged,
|
|
10
9
|
residentTagProtected,
|
|
11
10
|
} from "./residency.js";
|
|
@@ -72,11 +71,6 @@ interface LlamaCppRouterProps {
|
|
|
72
71
|
maxInstances?: number;
|
|
73
72
|
}
|
|
74
73
|
|
|
75
|
-
/** Test-only: clear the reconciler's TTL cache and Clio-loaded registry. */
|
|
76
|
-
export function resetLlamaCppResidencyState(): void {
|
|
77
|
-
resetResidencyState();
|
|
78
|
-
}
|
|
79
|
-
|
|
80
74
|
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
81
75
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
82
76
|
}
|
|
@@ -107,19 +101,7 @@ function residentModel(model: LlamaCppRouterModel): boolean {
|
|
|
107
101
|
return isResidentState(model.state);
|
|
108
102
|
}
|
|
109
103
|
|
|
110
|
-
|
|
111
|
-
export function parseLlamaCppResidentModels(payload: unknown): LlamaCppResidentModel[] {
|
|
112
|
-
return parseRouterModels(payload)
|
|
113
|
-
.filter(residentModel)
|
|
114
|
-
.map((entry) => ({ id: entry.id, tags: entry.tags }));
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/** Extract resident (loaded or loading) model ids from a /v1/models payload. */
|
|
118
|
-
export function parseLlamaCppResident(payload: unknown): string[] {
|
|
119
|
-
return parseLlamaCppResidentModels(payload).map((entry) => entry.id);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
export function parseLlamaCppRouterProps(payload: unknown): LlamaCppRouterProps {
|
|
104
|
+
function parseLlamaCppRouterProps(payload: unknown): LlamaCppRouterProps {
|
|
123
105
|
if (!isRecord(payload)) return {};
|
|
124
106
|
const maxInstances = payload.max_instances;
|
|
125
107
|
return typeof maxInstances === "number" && Number.isFinite(maxInstances) && maxInstances > 0
|
|
@@ -19,7 +19,7 @@ interface LmStudioModelMetadata {
|
|
|
19
19
|
clio?: {
|
|
20
20
|
targetId: string;
|
|
21
21
|
runtimeId: string;
|
|
22
|
-
lifecycle?: "user-managed" | "clio-managed";
|
|
22
|
+
lifecycle?: "user-managed" | "clio-coder-managed";
|
|
23
23
|
lmstudio?: TargetDescriptor["lmstudio"];
|
|
24
24
|
lmstudioDefaultModel?: string;
|
|
25
25
|
};
|
|
@@ -145,11 +145,6 @@ function emitResidencyNoticeOnce(key: string, notice: Parameters<typeof emitResi
|
|
|
145
145
|
emitResidencyNotice(notice);
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
/** Test seam: forget which residency facts were announced. */
|
|
149
|
-
export function resetAnnouncedResidencyFacts(): void {
|
|
150
|
-
announcedResidencyFacts.clear();
|
|
151
|
-
}
|
|
152
|
-
|
|
153
148
|
export async function ensureLmStudioResidency(
|
|
154
149
|
model: Model<"openai-completions">,
|
|
155
150
|
options: { apiKey?: string; signal?: AbortSignal } = {},
|
|
@@ -47,7 +47,7 @@ interface ClioRuntimeMetadata {
|
|
|
47
47
|
targetId: string;
|
|
48
48
|
runtimeId: string;
|
|
49
49
|
/** Present only when settings set the target lifecycle explicitly. */
|
|
50
|
-
lifecycle?: "user-managed" | "clio-managed";
|
|
50
|
+
lifecycle?: "user-managed" | "clio-coder-managed";
|
|
51
51
|
gateway?: boolean;
|
|
52
52
|
family?: string;
|
|
53
53
|
quirks?: LocalModelQuirks;
|
|
@@ -159,7 +159,7 @@ function userToOllama(content: string | (TextContent | ImageContent)[]): OllamaM
|
|
|
159
159
|
return out;
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
|
|
162
|
+
function assistantToOllama(content: AssistantMessage["content"]): OllamaMessage {
|
|
163
163
|
const textParts: string[] = [];
|
|
164
164
|
const toolCalls: OllamaToolCall[] = [];
|
|
165
165
|
const thinkingParts: string[] = [];
|
|
@@ -270,7 +270,7 @@ function ollamaEvictClient(baseUrl: string, headers?: Record<string, string>): O
|
|
|
270
270
|
* Map an Ollama `/api/ps` response to the runtime-agnostic resident shape,
|
|
271
271
|
* preserving the GPU/total footprint when the server reports it.
|
|
272
272
|
*/
|
|
273
|
-
|
|
273
|
+
async function listResidentOllamaModels(client: OllamaEvictClient): Promise<ResidentModelInfo[]> {
|
|
274
274
|
const resident = await client.ps();
|
|
275
275
|
return resident.models.map((entry) => {
|
|
276
276
|
const primary = entry.model || entry.name;
|
|
@@ -64,7 +64,7 @@ interface ClioRuntimeMetadata {
|
|
|
64
64
|
targetId: string;
|
|
65
65
|
runtimeId: string;
|
|
66
66
|
/** Present only when settings set the target lifecycle explicitly. */
|
|
67
|
-
lifecycle?: "user-managed" | "clio-managed";
|
|
67
|
+
lifecycle?: "user-managed" | "clio-coder-managed";
|
|
68
68
|
gateway?: boolean;
|
|
69
69
|
quirks?: LocalModelQuirks;
|
|
70
70
|
chatTemplateKwargsUnsupported?: boolean;
|
|
@@ -679,7 +679,7 @@ function hasReportedReasoningUsage(usage: Usage): boolean {
|
|
|
679
679
|
* upstream already reported reasoning usage, because ACP consumers accept all
|
|
680
680
|
* three field spellings for cross-agent compatibility.
|
|
681
681
|
*/
|
|
682
|
-
|
|
682
|
+
function applyOpenAICompatReasoningEstimate(message: AssistantMessage): void {
|
|
683
683
|
if (hasReportedReasoningUsage(message.usage)) return;
|
|
684
684
|
const estimated = estimateReasoningTokens(message.content);
|
|
685
685
|
const reportedOutput = message.usage.output;
|
|
@@ -130,7 +130,7 @@ export function residentTagProtected(tags: ReadonlyArray<string> | undefined): b
|
|
|
130
130
|
const clioLoaded = new Map<string, Set<string>>();
|
|
131
131
|
|
|
132
132
|
/** Record that Clio loaded `modelId` on the target identified by `targetKey`. */
|
|
133
|
-
|
|
133
|
+
function markClioLoaded(targetKey: string, modelId: string): void {
|
|
134
134
|
let set = clioLoaded.get(targetKey);
|
|
135
135
|
if (!set) {
|
|
136
136
|
set = new Set();
|
|
@@ -156,12 +156,6 @@ function isClioLoaded(targetKey: string, entry: ResidentModelInfo): boolean {
|
|
|
156
156
|
export const RECONCILE_TTL_MS = 60_000;
|
|
157
157
|
const reconcileCache = new Map<string, { modelId: string; decision: "reconcile" | "observe"; at: number }>();
|
|
158
158
|
|
|
159
|
-
/** Test-only: clear the cross-call Clio-loaded registry and TTL cache. */
|
|
160
|
-
export function resetResidencyState(): void {
|
|
161
|
-
clioLoaded.clear();
|
|
162
|
-
reconcileCache.clear();
|
|
163
|
-
}
|
|
164
|
-
|
|
165
159
|
// --- residency decision (pure) ----------------------------------------------
|
|
166
160
|
|
|
167
161
|
/**
|
|
@@ -301,7 +295,7 @@ function evictionNotice(facts: ResidencyFacts, entry: ResidentClassified): Resid
|
|
|
301
295
|
* tiers, eviction order, and every notice case directly testable without a
|
|
302
296
|
* server.
|
|
303
297
|
*/
|
|
304
|
-
|
|
298
|
+
function decideResidency(facts: ResidencyFacts): ResidencyPlan {
|
|
305
299
|
const notices: ResidencyNotice[] = [];
|
|
306
300
|
const keepResident = facts.resident.some((entry) => residentMatchesKeep(entry, facts.keepModelId));
|
|
307
301
|
const others = facts.resident.filter((entry) => !residentMatchesKeep(entry, facts.keepModelId));
|
|
@@ -801,7 +795,7 @@ export function residencyManaged(env: NodeJS.ProcessEnv = process.env): boolean
|
|
|
801
795
|
* only sets the metadata field when settings carry an explicit value.
|
|
802
796
|
*/
|
|
803
797
|
export function residencyManagedFor(
|
|
804
|
-
lifecycle: "user-managed" | "clio-managed" | undefined,
|
|
798
|
+
lifecycle: "user-managed" | "clio-coder-managed" | undefined,
|
|
805
799
|
env: NodeJS.ProcessEnv = process.env,
|
|
806
800
|
): boolean {
|
|
807
801
|
if (lifecycle === "user-managed") return false;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy loader for the optional `@anthropic-ai/claude-agent-sdk` package.
|
|
3
|
+
*
|
|
4
|
+
* The SDK's platform package ships a 224MB proprietary binary, so it lives in
|
|
5
|
+
* `optionalDependencies` and a default install skips it under
|
|
6
|
+
* `npm install --omit=optional`. Nothing may import it at module scope: boot,
|
|
7
|
+
* `doctor`, and every non-Claude runtime have to work on an install that never
|
|
8
|
+
* fetched it. The one value the runtime needs (`query`) is reached through the
|
|
9
|
+
* dynamic import below, at the moment a `claude-sdk` run actually starts, and a
|
|
10
|
+
* missing package surfaces as a typed error naming the package and the install
|
|
11
|
+
* command instead of an ESM resolution stack.
|
|
12
|
+
*/
|
|
13
|
+
import type { query } from "@anthropic-ai/claude-agent-sdk";
|
|
14
|
+
|
|
15
|
+
/** The optional package this module resolves. */
|
|
16
|
+
export const CLAUDE_AGENT_SDK_PACKAGE = "@anthropic-ai/claude-agent-sdk";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Version the checkout pins in `optionalDependencies`. A contract test keeps
|
|
20
|
+
* the two in step so the install command quoted in the diagnostic never drifts
|
|
21
|
+
* from the version the runtime was built against.
|
|
22
|
+
*/
|
|
23
|
+
export const CLAUDE_AGENT_SDK_VERSION = "0.3.186";
|
|
24
|
+
|
|
25
|
+
/** Exact command an operator can paste to make the Claude SDK runtime usable. */
|
|
26
|
+
export const CLAUDE_AGENT_SDK_INSTALL_COMMAND = `npm install ${CLAUDE_AGENT_SDK_PACKAGE}@${CLAUDE_AGENT_SDK_VERSION}`;
|
|
27
|
+
|
|
28
|
+
/** The slice of the SDK surface the worker runtime calls. */
|
|
29
|
+
export interface ClaudeAgentSdkModule {
|
|
30
|
+
query: typeof query;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** Thrown when a `claude-sdk` run starts on an install that omitted the optional package. */
|
|
34
|
+
export class ClaudeAgentSdkUnavailableError extends Error {
|
|
35
|
+
readonly code = "CLAUDE_AGENT_SDK_UNAVAILABLE";
|
|
36
|
+
readonly packageName = CLAUDE_AGENT_SDK_PACKAGE;
|
|
37
|
+
readonly installCommand = CLAUDE_AGENT_SDK_INSTALL_COMMAND;
|
|
38
|
+
|
|
39
|
+
constructor(cause?: unknown) {
|
|
40
|
+
super(
|
|
41
|
+
`The claude-sdk runtime needs the optional package ${CLAUDE_AGENT_SDK_PACKAGE}, which is not installed. ` +
|
|
42
|
+
`Install it with \`${CLAUDE_AGENT_SDK_INSTALL_COMMAND}\` (or reinstall clio-coder without \`--omit=optional\`), ` +
|
|
43
|
+
`then select the target again. Every other runtime works without it.`,
|
|
44
|
+
cause === undefined ? undefined : { cause },
|
|
45
|
+
);
|
|
46
|
+
this.name = "ClaudeAgentSdkUnavailableError";
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** Resolution failures that mean "the package is not on disk" rather than "the package is broken". */
|
|
51
|
+
const MISSING_MODULE_CODES: ReadonlySet<string> = new Set([
|
|
52
|
+
"ERR_MODULE_NOT_FOUND",
|
|
53
|
+
"MODULE_NOT_FOUND",
|
|
54
|
+
"ERR_PACKAGE_PATH_NOT_EXPORTED",
|
|
55
|
+
]);
|
|
56
|
+
|
|
57
|
+
function isMissingModuleError(error: unknown): boolean {
|
|
58
|
+
const code = (error as { code?: unknown } | null)?.code;
|
|
59
|
+
return typeof code === "string" && MISSING_MODULE_CODES.has(code);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export type ClaudeAgentSdkLoader = () => Promise<ClaudeAgentSdkModule>;
|
|
63
|
+
|
|
64
|
+
// The literal specifier is what keeps the SDK's types available here; the tsup
|
|
65
|
+
// `external` entry keeps esbuild from bundling it and leaves this as a real
|
|
66
|
+
// runtime `import()`.
|
|
67
|
+
const realLoader: ClaudeAgentSdkLoader = async () => await import("@anthropic-ai/claude-agent-sdk");
|
|
68
|
+
|
|
69
|
+
const loader: ClaudeAgentSdkLoader = realLoader;
|
|
70
|
+
let cached: ClaudeAgentSdkModule | null = null;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Resolve the SDK, or fail with {@link ClaudeAgentSdkUnavailableError}. A load
|
|
74
|
+
* error that is not a resolution failure (a broken install, a throwing module
|
|
75
|
+
* top level) propagates unchanged, so a real fault is never mislabeled as an
|
|
76
|
+
* absent package.
|
|
77
|
+
*/
|
|
78
|
+
export async function loadClaudeAgentSdk(): Promise<ClaudeAgentSdkModule> {
|
|
79
|
+
if (cached) return cached;
|
|
80
|
+
try {
|
|
81
|
+
cached = await loader();
|
|
82
|
+
return cached;
|
|
83
|
+
} catch (error) {
|
|
84
|
+
if (isMissingModuleError(error)) throw new ClaudeAgentSdkUnavailableError(error);
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
// Types only. `@anthropic-ai/claude-agent-sdk` is an optional dependency, so
|
|
2
|
+
// nothing here may reach it at module scope; the one value this runtime calls
|
|
3
|
+
// (`query`) comes from the lazy loader in ./sdk-module.js at run time.
|
|
4
|
+
import type {
|
|
5
|
+
CanUseTool,
|
|
6
|
+
EffortLevel,
|
|
7
|
+
HookCallback,
|
|
8
|
+
Options,
|
|
9
|
+
PermissionMode,
|
|
10
|
+
PermissionResult,
|
|
8
11
|
query,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
SDKMessage,
|
|
13
|
+
SDKResultMessage,
|
|
14
|
+
SDKUserMessage,
|
|
15
|
+
ThinkingConfig,
|
|
13
16
|
} from "@anthropic-ai/claude-agent-sdk";
|
|
14
17
|
|
|
15
18
|
import { readClioVersion } from "../../core/package-root.js";
|
|
@@ -19,6 +22,7 @@ import { isReserveAdmittedTool, resolveDeliveryTools } from "../loop-guard.js";
|
|
|
19
22
|
import type { AgentEvent, AgentMessage, Usage } from "../types.js";
|
|
20
23
|
import type { WorkerEventEmit, WorkerRunHandle, WorkerRunInput, WorkerRunResult } from "../worker-runtime.js";
|
|
21
24
|
import { createWorkerSafety } from "../worker-tools.js";
|
|
25
|
+
import { loadClaudeAgentSdk } from "./sdk-module.js";
|
|
22
26
|
import { isClaudeCodeSessionId } from "./session-id.js";
|
|
23
27
|
import {
|
|
24
28
|
type ClaudeToolPermissionDecision,
|
|
@@ -49,11 +53,11 @@ async function* oneSdkUserMessage(message: SDKUserMessage): AsyncIterable<SDKUse
|
|
|
49
53
|
yield message;
|
|
50
54
|
}
|
|
51
55
|
|
|
52
|
-
|
|
56
|
+
function claudeSdkPermissionModeForAutonomy(_level: AutonomyLevel | undefined): PermissionMode {
|
|
53
57
|
return "default";
|
|
54
58
|
}
|
|
55
59
|
|
|
56
|
-
|
|
60
|
+
function claudeSdkToolsForAutonomy(_level: AutonomyLevel | undefined): NonNullable<Options["tools"]> {
|
|
57
61
|
return DEFAULT_CLAUDE_TOOLS;
|
|
58
62
|
}
|
|
59
63
|
|
|
@@ -310,7 +314,7 @@ export interface ClaudeWorkerBudgetGate {
|
|
|
310
314
|
}
|
|
311
315
|
|
|
312
316
|
/** Canonical call counter shared by the SDK's PreToolUse/canUseTool mediation seam. */
|
|
313
|
-
|
|
317
|
+
function createClaudeWorkerBudgetGate(
|
|
314
318
|
budget: WorkerBudget,
|
|
315
319
|
onBoundary: () => void,
|
|
316
320
|
onHardCap: () => void,
|
|
@@ -434,7 +438,7 @@ function decideToolUse(
|
|
|
434
438
|
}
|
|
435
439
|
|
|
436
440
|
/** Share one logical permission decision across the SDK hook/callback pair. */
|
|
437
|
-
|
|
441
|
+
function decideClaudeSdkToolUseOnce(
|
|
438
442
|
handled: Map<string, ClaudeToolPermissionDecision>,
|
|
439
443
|
toolUseID: string | undefined,
|
|
440
444
|
decide: () => ClaudeToolPermissionDecision,
|
|
@@ -532,7 +536,7 @@ export function startClaudeSdkWorkerRun(input: WorkerRunInput, emit: WorkerEvent
|
|
|
532
536
|
() => {},
|
|
533
537
|
() => {
|
|
534
538
|
budgetFailure = true;
|
|
535
|
-
emit({ type: "
|
|
539
|
+
emit({ type: "clio_coder_run_outcome", payload: { outcomeCode: "worker_tool_call_cap_exhausted" } });
|
|
536
540
|
abort();
|
|
537
541
|
},
|
|
538
542
|
resolveDeliveryTools(allowedToolSet, input.product),
|
|
@@ -559,7 +563,7 @@ export function startClaudeSdkWorkerRun(input: WorkerRunInput, emit: WorkerEvent
|
|
|
559
563
|
if (hookInput.hook_event_name !== "PostToolBatch" || !budgetGate?.phaseReached()) return { continue: true };
|
|
560
564
|
if (input.budget?.synthesis === false) {
|
|
561
565
|
budgetFailure = true;
|
|
562
|
-
emit({ type: "
|
|
566
|
+
emit({ type: "clio_coder_run_outcome", payload: { outcomeCode: "worker_tool_call_cap_exhausted" } });
|
|
563
567
|
return { continue: false, stopReason: `worker agent budget reached (${input.budget.toolCalls})` };
|
|
564
568
|
}
|
|
565
569
|
return {
|
|
@@ -607,6 +611,10 @@ export function startClaudeSdkWorkerRun(input: WorkerRunInput, emit: WorkerEvent
|
|
|
607
611
|
|
|
608
612
|
emit({ type: "agent_start" } as AgentEvent);
|
|
609
613
|
try {
|
|
614
|
+
// First touch of the optional SDK. An install that omitted it fails
|
|
615
|
+
// here with a typed diagnostic naming the package and the install
|
|
616
|
+
// command, and lands in the catch below as an ordinary run failure.
|
|
617
|
+
const { query } = await loadClaudeAgentSdk();
|
|
610
618
|
queryHandle = query({ prompt: buildClaudeSdkPrompt(input), options });
|
|
611
619
|
for await (const sdkMessage of queryHandle) {
|
|
612
620
|
if (sdkMessage.type === "system" && (sdkMessage as { subtype?: string }).subtype === "init") {
|
|
@@ -54,7 +54,7 @@ function buildClaudeCodePrompt(input: WorkerRunInput): string {
|
|
|
54
54
|
return parts.join("\n\n");
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
function buildClaudeCodeArgs(input: WorkerRunInput): string[] {
|
|
58
58
|
assertToolProfileEnforceable(input.toolProfile, "claude-code");
|
|
59
59
|
const permission = claudeSubprocessPermissionConfigForAutonomy(input.autonomy);
|
|
60
60
|
const args = [
|
|
@@ -227,7 +227,7 @@ function budgetDenial(
|
|
|
227
227
|
};
|
|
228
228
|
}
|
|
229
229
|
|
|
230
|
-
|
|
230
|
+
function evaluateClaudeToolPermission(input: EvaluateClaudeToolPermissionInput): ClaudeToolPermissionDecision {
|
|
231
231
|
const mapped = mapClaudeToolCall(input.toolName, input.input, input.cwd);
|
|
232
232
|
const call: ClassifierCall = { tool: mapped.clioToolName, args: mapped.args };
|
|
233
233
|
const attempt = input.budgetGate?.attempt(mapped.clioToolName);
|
|
@@ -346,7 +346,7 @@ function emitToolFinish(
|
|
|
346
346
|
const finalReasonCode = reasonCode ?? decision.policy?.reasonCode;
|
|
347
347
|
if (finalReasonCode !== undefined) event.reasonCode = finalReasonCode;
|
|
348
348
|
if (decision.policy?.policySource !== undefined) event.policySource = decision.policy.policySource;
|
|
349
|
-
emit({ type: "
|
|
349
|
+
emit({ type: "clio_coder_tool_finish", payload: event });
|
|
350
350
|
}
|
|
351
351
|
|
|
352
352
|
export function emitClaudeToolPermissionDecision(input: EmitClaudeToolPermissionInput): ClaudeToolPermissionDecision {
|
|
@@ -366,7 +366,7 @@ export function emitClaudeToolPermissionDecision(input: EmitClaudeToolPermission
|
|
|
366
366
|
startedAt,
|
|
367
367
|
...(action !== null ? { action } : {}),
|
|
368
368
|
};
|
|
369
|
-
input.emit({ type: "
|
|
369
|
+
input.emit({ type: "clio_coder_tool_start", payload: start });
|
|
370
370
|
if (decision.kind === "allow") {
|
|
371
371
|
emitToolFinish(
|
|
372
372
|
input.emit,
|
|
@@ -383,7 +383,7 @@ export function emitClaudeToolPermissionDecision(input: EmitClaudeToolPermission
|
|
|
383
383
|
if (decision.permissionRequired) {
|
|
384
384
|
const mode = input.onPermission ?? "deny";
|
|
385
385
|
input.emit({
|
|
386
|
-
type: "
|
|
386
|
+
type: "clio_coder_permission_resolved",
|
|
387
387
|
payload: {
|
|
388
388
|
tool: decision.mapped.clioToolName,
|
|
389
389
|
actionClass: decision.decision.classification.actionClass,
|
package/src/engine/loop-guard.ts
CHANGED
|
@@ -352,11 +352,6 @@ export function isLoopGuardSynthesisBackstopReason(reason: string): boolean {
|
|
|
352
352
|
return /^loop guard: tool calls stayed disabled and .+ was called again instead of answering/.test(reason);
|
|
353
353
|
}
|
|
354
354
|
|
|
355
|
-
/** Worker lifetime tool-call cap: env > settings guardrails > default. */
|
|
356
|
-
export function readWorkerToolCallCap(env: NodeJS.ProcessEnv = process.env): number {
|
|
357
|
-
return resolveGuardrail("workerToolCallCap", env);
|
|
358
|
-
}
|
|
359
|
-
|
|
360
355
|
/** Soft/hard per-turn tool-call budget for the interactive orchestrator. */
|
|
361
356
|
export interface OrchTurnToolCallBudget {
|
|
362
357
|
/** Distinct calls in a turn that trigger the re-plan nudge. */
|
package/src/engine/session.ts
CHANGED
|
@@ -39,6 +39,7 @@ import {
|
|
|
39
39
|
} from "node:fs";
|
|
40
40
|
import { dirname, join, resolve } from "node:path";
|
|
41
41
|
import { StringDecoder } from "node:string_decoder";
|
|
42
|
+
import { normalizeClioCoderEventTree } from "../core/naming-events.js";
|
|
42
43
|
import { readClioVersion, readPiMonoVersion } from "../core/package-root.js";
|
|
43
44
|
import { assertSafeId } from "../core/safe-id.js";
|
|
44
45
|
import { fsyncDirectory, safeResourceWrite } from "../core/safe-resource-write.js";
|
|
@@ -52,7 +53,7 @@ export interface ClioSessionMeta {
|
|
|
52
53
|
endedAt: string | null;
|
|
53
54
|
model: string | null;
|
|
54
55
|
target: string | null;
|
|
55
|
-
|
|
56
|
+
clioCoderVersion: string;
|
|
56
57
|
piMonoVersion: string;
|
|
57
58
|
platform: string;
|
|
58
59
|
nodeVersion: string;
|
|
@@ -181,7 +182,7 @@ function defaultSessionJsonlWarning(warning: SessionJsonlWarning): void {
|
|
|
181
182
|
if (reportedSessionJsonlWarnings.has(key)) return;
|
|
182
183
|
if (reportedSessionJsonlWarnings.size >= REPORTED_SESSION_JSONL_WARNING_LIMIT) reportedSessionJsonlWarnings.clear();
|
|
183
184
|
reportedSessionJsonlWarnings.add(key);
|
|
184
|
-
process.stderr.write(`[clio:session] ${warning.path}:${warning.line}: ${warning.message}\n`);
|
|
185
|
+
process.stderr.write(`[clio-coder:session] ${warning.path}:${warning.line}: ${warning.message}\n`);
|
|
185
186
|
}
|
|
186
187
|
|
|
187
188
|
function serializeJsonl(entries: ReadonlyArray<unknown>): string {
|
|
@@ -201,7 +202,7 @@ function serializeJsonl(entries: ReadonlyArray<unknown>): string {
|
|
|
201
202
|
* A crash or interruption before the rename leaves the original target
|
|
202
203
|
* untouched; when no target exists yet, recovery readers can promote the tmp.
|
|
203
204
|
*/
|
|
204
|
-
|
|
205
|
+
function writeJsonlFileAtomic(
|
|
205
206
|
targetPath: string,
|
|
206
207
|
entries: ReadonlyArray<unknown>,
|
|
207
208
|
options: SessionJsonlWriteOptions = {},
|
|
@@ -246,7 +247,7 @@ function parseSessionJsonlLine(
|
|
|
246
247
|
): void {
|
|
247
248
|
if (line.trim().length === 0) return;
|
|
248
249
|
try {
|
|
249
|
-
entries.push(JSON.parse(line) as unknown);
|
|
250
|
+
entries.push(normalizeClioCoderEventTree(JSON.parse(line) as unknown));
|
|
250
251
|
} catch (error) {
|
|
251
252
|
const message = error instanceof Error ? error.message : String(error);
|
|
252
253
|
warn({ path: readPath, line: lineNumber, message: `invalid JSON skipped: ${message}` });
|
|
@@ -319,7 +320,7 @@ function readExactAt(fd: number, buffer: Buffer, position: number, length: numbe
|
|
|
319
320
|
* Behaviour matches `readSessionFileEntries` line-for-line over the tail it
|
|
320
321
|
* returns: same `parseSessionJsonlLine` (torn-tail tolerant), same warning sink.
|
|
321
322
|
*/
|
|
322
|
-
|
|
323
|
+
function readSessionFileTailEntries(
|
|
323
324
|
path: string,
|
|
324
325
|
maxEntries: number,
|
|
325
326
|
options: SessionJsonlReadOptions & { chunkBytes?: number } = {},
|
|
@@ -461,7 +462,7 @@ function buildMeta(input: { cwd: string; model?: string | null; target?: string
|
|
|
461
462
|
endedAt: null,
|
|
462
463
|
model: input.model ?? null,
|
|
463
464
|
target: input.target ?? null,
|
|
464
|
-
|
|
465
|
+
clioCoderVersion: readClioVersion(),
|
|
465
466
|
piMonoVersion: readPiMonoVersion(),
|
|
466
467
|
platform: process.platform,
|
|
467
468
|
nodeVersion: process.version,
|
|
@@ -471,7 +472,13 @@ function buildMeta(input: { cwd: string; model?: string | null; target?: string
|
|
|
471
472
|
|
|
472
473
|
function readMetaFile(path: string): ClioSessionMeta {
|
|
473
474
|
const raw = readFileSync(path, "utf8");
|
|
474
|
-
|
|
475
|
+
const parsed = JSON.parse(raw) as Record<string, unknown>;
|
|
476
|
+
const clioCoderVersion = parsed.clioCoderVersion ?? parsed.clioVersion;
|
|
477
|
+
if (typeof clioCoderVersion !== "string" || clioCoderVersion.length === 0) {
|
|
478
|
+
throw new Error(`session metadata has no Clio Coder version: ${path}`);
|
|
479
|
+
}
|
|
480
|
+
const { clioVersion: _legacyVersion, ...canonical } = parsed;
|
|
481
|
+
return { ...canonical, clioCoderVersion } as unknown as ClioSessionMeta;
|
|
475
482
|
}
|
|
476
483
|
|
|
477
484
|
const TURN_KINDS: readonly ClioTurnRecord["kind"][] = [
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The terminal-engine primitives a non-interactive surface needs, kept in a
|
|
3
|
+
* module of its own rather than behind ./tui.js.
|
|
4
|
+
*
|
|
5
|
+
* ./tui.js is the interactive layer's barrel: it carries the instrumented
|
|
6
|
+
* renderer and SelectList, and every consumer of it also pulls the interactive
|
|
7
|
+
* theme. A CLI command that only measures text and paints an alternate screen
|
|
8
|
+
* needs none of that, and reaching it through the barrel is not free. An edge
|
|
9
|
+
* from outside src/interactive/ to ./tui.js, static or dynamic, gives that
|
|
10
|
+
* module a reachability set the theme modules do not share, so the bundler
|
|
11
|
+
* peels it into a chunk of its own. That chunk lands in the Stage 0 instant
|
|
12
|
+
* shell closure, which tests/contracts/instant-shell-import-graph.test.ts holds
|
|
13
|
+
* to six chunks. Everything re-exported here is a pass-through to the external
|
|
14
|
+
* terminal engine, which is not bundled and so adds no chunk at all.
|
|
15
|
+
*
|
|
16
|
+
* The engine-boundary rule (rule1 in tests/boundaries/check-boundaries.ts) keeps
|
|
17
|
+
* terminal-engine value imports inside src/engine/, which is why this seam lives
|
|
18
|
+
* here and not in src/cli/.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
export { ProcessTerminal, TuiAltScreen, truncateToWidth, visibleWidth, wrapTextWithAnsi } from "@earendil-works/pi-tui";
|