@iowarp/clio-coder 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/README.md +116 -16
- package/dist/{acp-G5WJBNCT.js → acp-ZILU3AUO.js} +14 -14
- package/dist/{agents-FMV2Q5G4.js → agents-HYWGBGQR.js} +40 -29
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-3IDSJEIK.js → auth-N3QT7CBO.js} +21 -19
- package/dist/{builtins-XCZWXSC7.js → builtins-UJLMOVOV.js} +6 -6
- package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
- package/dist/{chunk-3BT2XMV4.js → chunk-2NM363SV.js} +50 -57
- package/dist/{chunk-J4W7KFM7.js → chunk-2VG7KLYV.js} +24 -279
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/{chunk-K5C3NCBD.js → chunk-3I5NY75V.js} +5 -5
- package/dist/{chunk-VAZSBTKF.js → chunk-3QSOM6PA.js} +2 -2
- package/dist/{chunk-TZ3SGWZZ.js → chunk-5QIAJV2D.js} +2 -2
- package/dist/{chunk-OQBA45DZ.js → chunk-5YHDIDBP.js} +2 -2
- package/dist/{chunk-NHLBIGRH.js → chunk-6CCS4G3W.js} +40 -17
- package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
- package/dist/{chunk-LDQ2ZF2M.js → chunk-6FN3E6KX.js} +5 -5
- package/dist/{chunk-X3YGUTOB.js → chunk-6HMJX2VU.js} +59 -59
- package/dist/{chunk-VEO4AP2K.js → chunk-6I5ILFOF.js} +3 -2
- package/dist/{chunk-B7OBL7PK.js → chunk-6NJQITNH.js} +18 -11
- package/dist/{chunk-IQ7KR472.js → chunk-6VC4OV3Z.js} +6 -3
- package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
- package/dist/{chunk-AB44T6BB.js → chunk-74YWRRU5.js} +8 -7
- package/dist/{chunk-SJ5ZKQ4S.js → chunk-7EPLI7VL.js} +2 -2
- package/dist/{chunk-HWHKMHUA.js → chunk-7OBGU7UB.js} +3 -3
- package/dist/{chunk-2OQE55CK.js → chunk-7PWAODYW.js} +2 -2
- package/dist/{chunk-IBEBSCYA.js → chunk-7RY5VZPH.js} +42 -33
- package/dist/{chunk-LQ3DZAMX.js → chunk-ABLSQ6JX.js} +2 -2
- package/dist/{chunk-QLFS5GO2.js → chunk-AFKWHWXF.js} +12 -22
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-O6TL7WWY.js → chunk-AKB4GYDL.js} +4 -4
- package/dist/chunk-AP73CFDC.js +308 -0
- package/dist/{chunk-JDG2WCRO.js → chunk-BBTJOK6Y.js} +5 -5
- package/dist/{chunk-SP2RXXYO.js → chunk-BDPT6GTK.js} +10 -10
- package/dist/{chunk-NQQH3YT7.js → chunk-BJGUKIG4.js} +3 -3
- package/dist/{chunk-O4XIVISU.js → chunk-BTGG6BG2.js} +79 -38
- package/dist/chunk-BTK3SSSK.js +67 -0
- package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
- package/dist/chunk-BWW4HLO4.js +301 -0
- package/dist/{chunk-I5VEOC6I.js → chunk-C537JADH.js} +10 -10
- package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
- package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-WZR7K7ZX.js → chunk-E67WX76H.js} +6 -6
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-EIMVLWB3.js +1842 -0
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-MLKNTWH2.js → chunk-FYUN5KZ3.js} +21 -21
- package/dist/{chunk-YJX4SHTD.js → chunk-GIZNH63R.js} +1 -1
- package/dist/{chunk-X75E3D2N.js → chunk-GPPB3JBE.js} +18 -16
- package/dist/{chunk-GR5G2PVF.js → chunk-GVQJ5CCZ.js} +15 -10
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
- package/dist/{chunk-VYMXRQI6.js → chunk-HUAS7ITX.js} +89 -93
- package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
- package/dist/{chunk-DYJP44XW.js → chunk-IG7BCQBA.js} +1 -1
- package/dist/{chunk-32KWKNSF.js → chunk-IXJT6DCX.js} +3 -3
- package/dist/{chunk-C2LTL2W6.js → chunk-J4HBWF6Y.js} +360 -172
- package/dist/chunk-J5LZHVIT.js +284 -0
- package/dist/{chunk-QLL7ILRG.js → chunk-JA5QWE4Z.js} +510 -202
- package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
- package/dist/{chunk-36EJLSQQ.js → chunk-JZWT5J3Y.js} +4 -4
- package/dist/{chunk-HZHHCK24.js → chunk-K6BF4U2H.js} +476 -322
- package/dist/{chunk-Z2RR6MAK.js → chunk-MA3H6DM5.js} +6 -6
- package/dist/{chunk-CODPRO7Q.js → chunk-MOPSG2X7.js} +6 -6
- package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
- package/dist/{chunk-YDFRH54B.js → chunk-N5UK64DP.js} +4 -4
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-W5VSYASO.js → chunk-OJTRZGR3.js} +46 -87
- package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
- package/dist/{chunk-3URVFKWK.js → chunk-PJJ6MY27.js} +5 -5
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-GKF55TAZ.js → chunk-PVAMAVBB.js} +3 -2
- package/dist/{chunk-6DB53AJS.js → chunk-QKIFBZKT.js} +7 -7
- package/dist/{chunk-HJJTYUHX.js → chunk-QMXC4JB7.js} +20 -20
- package/dist/chunk-QTFGO774.js +644 -0
- package/dist/{chunk-CY6FY24N.js → chunk-R23Z6K6I.js} +2 -2
- package/dist/{chunk-ULC6OTWO.js → chunk-R32CLGZ6.js} +13 -13
- package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
- package/dist/{chunk-F4CKPOEQ.js → chunk-SCYB3HA4.js} +72 -26
- package/dist/{chunk-LY4S7GJC.js → chunk-SINK3QR6.js} +18 -16
- package/dist/{chunk-U77AMWDL.js → chunk-TD3PGPQA.js} +43 -22
- package/dist/{chunk-QBJA7R7N.js → chunk-THYWACCR.js} +2 -2
- package/dist/{chunk-QREDIESB.js → chunk-TVH4ONAM.js} +14 -8
- package/dist/chunk-U2WB7TZS.js +271 -0
- package/dist/{chunk-KFZI4NIL.js → chunk-UAPGZHYC.js} +145 -31
- package/dist/{chunk-DQITNCXG.js → chunk-UEDMSP56.js} +29 -14
- package/dist/{chunk-3XML7CDN.js → chunk-UXN6JT4W.js} +2 -2
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-BPKCPIL7.js → chunk-VEGN6WIQ.js} +2 -2
- package/dist/chunk-VKFQTNDV.js +66 -0
- package/dist/{chunk-7MCTRUCE.js → chunk-VKRH2TCS.js} +2 -2
- package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
- package/dist/{chunk-SUCTJL45.js → chunk-WR6U3OVP.js} +3 -3
- package/dist/{chunk-BUMFYQFY.js → chunk-XKA2ICR3.js} +124 -113
- package/dist/{chunk-UXMFQ54G.js → chunk-Y45G3AXC.js} +39 -39
- package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
- package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
- package/dist/{chunk-V5DHCITQ.js → chunk-ZAZB4JMW.js} +23 -12
- package/dist/{chunk-Z4TXYIEG.js → chunk-ZJLUDYFY.js} +9 -9
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
- package/dist/cli/index.js +36 -36
- package/dist/{clio-2JXHBBY5.js → clio-IT3G3VQH.js} +12 -13
- package/dist/{code-nav-3YYRMYNF.js → code-nav-RK6S7F6E.js} +5 -5
- package/dist/codewiki/build-worker.js +1 -1
- package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
- package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
- package/dist/{config-QZPCMYSO.js → config-3QZRWZJF.js} +53 -49
- package/dist/{configure-TEGEBYCA.js → configure-FL7Y3KJF.js} +25 -22
- package/dist/{context-E6H5RNMC.js → context-5HE7ODYK.js} +47 -43
- package/dist/{context-AV7OEZ4D.js → context-KYQFRVDC.js} +11 -11
- package/dist/{context-GSXUE4CT.js → context-XNHL75JV.js} +32 -19
- package/dist/{context-clear-SHIBYK6T.js → context-clear-N545L53A.js} +47 -43
- package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-QHKXSV2F.js} +10 -9
- package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-RGIE5PCT.js} +56 -47
- package/dist/{docs-23KQS3XK.js → docs-5NAF6AU7.js} +5 -11
- package/dist/doctor-ZGPEGHIP.js +772 -0
- package/dist/{eval-TFBYQH4H.js → eval-GXLL44RD.js} +63 -45
- package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-HBWSWQOK.js} +7 -8
- package/dist/{evidence-ERGESKGN.js → evidence-HWLBRH3Q.js} +44 -40
- package/dist/{evolve-VDXTSYCJ.js → evolve-FTZBMNVW.js} +43 -39
- package/dist/{extensions-7BGBHN57.js → extensions-VHRBEID7.js} +4 -4
- package/dist/{fleet-2RRVDF2V.js → fleet-CKZHJWZJ.js} +86 -73
- package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EXDXBMV6.js} +10 -9
- package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-OTHB6KRL.js} +5 -5
- package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-YTEZUCUT.js} +13 -11
- package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-SS6YMDCK.js} +44 -41
- package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-PBY4VYOM.js} +5 -9
- package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-KMEM5L3S.js} +16 -13
- package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-QD5M7E7Q.js} +42 -39
- package/dist/{fleet-view-ZCON35AG.js → fleet-view-WAMJYNDT.js} +44 -52
- package/dist/{init-DN2WWLFE.js → init-5XQRBOFV.js} +63 -58
- package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
- package/dist/{interop-OZBKXAYL.js → interop-34TVO25M.js} +13 -11
- package/dist/{library-YWZG7IMW.js → library-3QY6KF57.js} +17 -14
- package/dist/{memory-I4C4HMLW.js → memory-L4UTIIIW.js} +45 -41
- package/dist/{models-CEYXJBO6.js → models-ZVX3QOWE.js} +39 -31
- package/dist/{monitor-NZ6GCI3P.js → monitor-CEKVSYTS.js} +50 -46
- package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-77BAP6BC.js} +1807 -1039
- package/dist/{panes-KY6W3V2E.js → panes-7STHOAUJ.js} +4 -4
- package/dist/{panes-HMABYVO4.js → panes-SHAUIRXY.js} +10 -8
- package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
- package/dist/{reset-DQ6FGCSH.js → reset-EOLM7GVE.js} +7 -8
- package/dist/{resources-BB3MVJMD.js → resources-74GKTLSF.js} +17 -13
- package/dist/{run-H2GQDUER.js → run-HBAUJNNZ.js} +86 -76
- package/dist/{share-GTJN6A5O.js → share-G3APVLVP.js} +17 -14
- package/dist/{skills-L55TEW6R.js → skills-35HHUKCR.js} +19 -16
- package/dist/{skills-eval-XVXPH2JI.js → skills-eval-QN4HSHDC.js} +55 -57
- package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-J357J34F.js} +15 -12
- package/dist/{slash-commands-ZSGASKJC.js → slash-commands-JZZCQA32.js} +31 -29
- package/dist/{steer-RZGSCY4R.js → steer-XAVHJM22.js} +3 -3
- package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
- package/dist/{targets-NCPZ644J.js → targets-DSM6CY3M.js} +59 -53
- package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-JOPFUVEM.js} +14 -9
- package/dist/{tools-DAF3DI3C.js → tools-MKNWVPBH.js} +10 -8
- package/dist/{trace-FYVW2MQA.js → trace-ECQ7TIYZ.js} +48 -3
- package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
- package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
- package/dist/{upgrade-3XPP6OQL.js → upgrade-H7TOM7YL.js} +35 -62
- package/dist/{usage-3NLHGTU2.js → usage-X52N3IDJ.js} +51 -48
- package/dist/{verifiers-SSQONKRT.js → verifiers-EJTVVSMA.js} +10 -9
- package/dist/{verify-3U6J7FZI.js → verify-YJL6XET2.js} +9 -8
- package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPIFL3LL.js} +1 -2
- package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-4NDZTQ4B.js} +66 -63
- package/dist/{with-panes-MKB46MPQ.js → with-panes-OBOBFIIR.js} +62 -26
- package/dist/worker/entry.js +57 -52
- package/docs/acp.md +1 -1
- package/docs/built-in-agents.md +40 -32
- package/docs/commands-and-modes.md +9 -3
- package/docs/config-knobs-audit.md +3 -0
- package/docs/configuration-and-targets.md +105 -164
- package/docs/environment-variables.md +2 -1
- package/docs/exit-codes-and-output.md +2 -0
- package/docs/fleet-demo-runbook.md +6 -3
- package/docs/fleet-dispatch.md +8 -6
- package/docs/installation-and-lifecycle.md +1 -1
- package/docs/release-cut-checklist.md +164 -177
- package/docs/trace-store.md +15 -10
- package/docs/troubleshooting.md +1 -1
- package/evals/README.md +5 -0
- package/evals/behavioral-corpus-grader.mjs +103 -0
- package/evals/behavioral-machinery-baseline.json +2276 -0
- package/evals/behavioral-machinery-driver.ts +250 -0
- package/evals/behavioral-machinery-support.ts +253 -0
- package/evals/behavioral-machinery.yaml +614 -0
- package/evals/behavioral-model-negative-control.yaml +68 -0
- package/evals/behavioral-model.yaml +216 -0
- package/evals/fixtures/behavioral-facts.txt +3 -0
- package/evals/fixtures/behavioral-main.ts +7 -0
- package/evals/fixtures/decoy/note.txt +2 -0
- package/evals/fixtures/private/credentials.txt +1 -0
- package/evals/tracked-metrics-baseline.yaml +229 -0
- package/evals/tracked-metrics-grader.mjs +129 -0
- package/package.json +5 -15
- package/skills/README.md +6 -6
- package/skills/coding/ast-grep/SKILL.md +8 -2
- package/skills/coding/coding-standards/SKILL.md +8 -2
- package/skills/coding/prototype/SKILL.md +8 -2
- package/skills/coding/tdd/SKILL.md +8 -2
- package/skills/context/context-handoff/SKILL.md +12 -3
- package/skills/context/context-handoff/evals.md +3 -3
- package/skills/context/context-prime/SKILL.md +8 -2
- package/skills/context/context-prime/evals.md +2 -2
- package/skills/git/file-ticket/SKILL.md +9 -4
- package/skills/git/file-ticket/evals.md +2 -2
- package/skills/git/fix-issue/SKILL.md +12 -5
- package/skills/git/fix-issue/evals.md +4 -4
- package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
- package/skills/git/resolve-merge-conflicts/evals.md +2 -2
- package/skills/git/ship/SKILL.md +9 -3
- package/skills/git/ship/evals.md +4 -4
- package/skills/git/worktree-create/SKILL.md +7 -2
- package/skills/git/worktree-create/evals.md +6 -6
- package/skills/git/worktree-merge/SKILL.md +7 -2
- package/skills/git/worktree-merge/evals.md +6 -6
- package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
- package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
- package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
- package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
- package/skills/meta/credentials/SKILL.md +9 -2
- package/skills/meta/find-skills/SKILL.md +8 -2
- package/skills/meta/herdr/SKILL.md +8 -2
- package/skills/meta/skill-craft/SKILL.md +21 -4
- package/skills/planning/architecture/SKILL.md +9 -3
- package/skills/planning/backlog/SKILL.md +8 -2
- package/skills/planning/prd/SKILL.md +8 -2
- package/skills/planning/product-intent/SKILL.md +8 -2
- package/skills/planning/tech-spec/SKILL.md +9 -3
- package/skills/registry.yaml +66 -66
- package/skills/research/arxiv-literature/SKILL.md +8 -2
- package/skills/research/experiment-protocol/SKILL.md +9 -2
- package/skills/research/scientific-debugging/SKILL.md +9 -2
- package/skills/research/scientific-debugging/evals.md +2 -2
- package/skills/research/scientific-modernization/SKILL.md +9 -2
- package/skills/skill-marketplace.json +257 -38
- package/skills/workflow/cut-it/SKILL.md +10 -2
- package/skills/workflow/design-council/SKILL.md +11 -2
- package/skills/workflow/grill-me/SKILL.md +8 -2
- package/skills/workflow/workflow-distiller/SKILL.md +8 -2
- package/src/cli/acp.ts +2 -2
- package/src/cli/auth.ts +2 -2
- package/src/cli/bootstrap-generate.ts +5 -5
- package/src/cli/clio.ts +6 -1
- package/src/cli/config-inspect.ts +3 -3
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure.ts +27 -27
- package/src/cli/default-target.ts +1 -1
- package/src/cli/docs.ts +6 -6
- package/src/cli/doctor-naming.ts +323 -0
- package/src/cli/doctor-panes.ts +46 -14
- package/src/cli/doctor-toolchain.ts +29 -8
- package/src/cli/doctor.ts +15 -1
- package/src/cli/eval-inventory.ts +8 -8
- package/src/cli/evidence-detail.ts +1 -1
- package/src/cli/evidence-inventory.ts +1 -1
- package/src/cli/fleet-decisions.ts +1 -1
- package/src/cli/fleet-inspect.ts +1 -1
- package/src/cli/fleet-preflight.ts +1 -1
- package/src/cli/fleet-verify.ts +1 -1
- package/src/cli/fleet-view.ts +40 -23
- package/src/cli/fleet.ts +8 -5
- package/src/cli/interop-inspect.ts +2 -2
- package/src/cli/models.ts +3 -3
- package/src/cli/modes/print.ts +1 -1
- package/src/cli/reset.ts +1 -1
- package/src/cli/run.ts +11 -15
- package/src/cli/share.ts +1 -1
- package/src/cli/skills-eval.ts +11 -11
- package/src/cli/targets.ts +23 -24
- package/src/cli/trace-inspect.ts +1 -1
- package/src/cli/trace.ts +41 -0
- package/src/cli/uninstall.ts +2 -2
- package/src/cli/upgrade.ts +29 -34
- package/src/cli/usage.ts +2 -2
- package/src/cli/validate-model.ts +1 -1
- package/src/cli/verifiers-inspect.ts +1 -1
- package/src/cli/wiki-generate.ts +5 -5
- package/src/core/bash-exec.ts +1 -1
- package/src/core/boot-trace.ts +3 -3
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1062 -886
- package/src/core/defaults.ts +321 -528
- package/src/core/domain-loader.ts +6 -4
- package/src/core/event-bus.ts +1 -1
- package/src/core/file-references.ts +78 -88
- package/src/core/git-commit-attribution.ts +3 -9
- package/src/core/guardrails.ts +24 -4
- package/src/core/naming-compat.ts +45 -0
- package/src/core/naming-events.ts +62 -0
- package/src/core/recent-models.ts +1 -7
- package/src/core/residency-protection.ts +4 -8
- package/src/core/resolve-config-value.ts +1 -1
- package/src/core/response-model-id.ts +0 -14
- package/src/core/session-routing.ts +84 -74
- package/src/core/skill-activation.ts +18 -0
- package/src/core/termination.ts +4 -4
- package/src/core/timers.ts +2 -12
- package/src/domains/agents/catalog.ts +2 -12
- package/src/domains/agents/extension.ts +3 -3
- package/src/domains/agents/registry.ts +7 -7
- package/src/domains/agents/result-contract.ts +1 -1
- package/src/domains/agents/spec.ts +0 -11
- package/src/domains/config/classify.ts +35 -47
- package/src/domains/config/extension.ts +5 -5
- package/src/domains/config/keybindings.ts +48 -47
- package/src/domains/config/watcher.ts +1 -1
- package/src/domains/context/codewiki/indexer.ts +1 -1
- package/src/domains/context/extension.ts +3 -3
- package/src/domains/context/prompt-context.ts +1 -1
- package/src/domains/context/wiki/assemble.ts +2 -2
- package/src/domains/context/working-set/replay/metrics.ts +0 -4
- package/src/domains/context/working-set/replay/report.ts +1 -1
- package/src/domains/context/working-set/replay/synthetic.ts +2 -2
- package/src/domains/dispatch/active-route-planner.ts +2 -2
- package/src/domains/dispatch/agent-candidates.ts +1 -1
- package/src/domains/dispatch/agent-ledger-store.ts +1 -1
- package/src/domains/dispatch/agent-ledger.ts +1 -1
- package/src/domains/dispatch/assignment.ts +5 -5
- package/src/domains/dispatch/capacity-lease.ts +2 -5
- package/src/domains/dispatch/code-step.ts +1 -1
- package/src/domains/dispatch/contract.ts +2 -2
- package/src/domains/dispatch/extension.ts +65 -61
- package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
- package/src/domains/dispatch/fleet-preflight.ts +8 -17
- package/src/domains/dispatch/fleet-run.ts +0 -7
- package/src/domains/dispatch/gate-decisions.ts +25 -14
- package/src/domains/dispatch/joint-route-resolver.ts +1 -1
- package/src/domains/dispatch/path-scope.ts +0 -61
- package/src/domains/dispatch/placement.ts +2 -2
- package/src/domains/dispatch/receipt-findings.ts +1 -1
- package/src/domains/dispatch/receipt-integrity.ts +20 -8
- package/src/domains/dispatch/reservation-store.ts +0 -23
- package/src/domains/dispatch/route-decision.ts +1 -1
- package/src/domains/dispatch/route-history.ts +1 -1
- package/src/domains/dispatch/route-policy.ts +1 -1
- package/src/domains/dispatch/route-readiness.ts +0 -28
- package/src/domains/dispatch/run-event-journal.ts +6 -5
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +2 -19
- package/src/domains/dispatch/types.ts +3 -3
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +5 -4
- package/src/domains/eval/compare/thresholds.ts +0 -8
- package/src/domains/eval/execution-provenance.ts +1 -1
- package/src/domains/eval/metrics/token-stream.ts +0 -7
- package/src/domains/eval/report.ts +1 -1
- package/src/domains/eval/runner.ts +1 -1
- package/src/domains/eval/runners/clio-run.ts +7 -6
- package/src/domains/eval/runners/external-command.ts +4 -3
- package/src/domains/eval/schema/artifact.ts +1 -1
- package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
- package/src/domains/eval/schema/behavioral.ts +7 -6
- package/src/domains/eval/schema/execution-envelope.ts +4 -2
- package/src/domains/eval/schema/naming.ts +10 -0
- package/src/domains/eval/schema/suite.ts +2 -2
- package/src/domains/eval/schema/validate.ts +9 -5
- package/src/domains/eval/schema/verdict.ts +4 -2
- package/src/domains/eval/store.ts +12 -2
- package/src/domains/eval/suites/run.ts +12 -6
- package/src/domains/eval/types.ts +1 -1
- package/src/domains/eval/workspaces/git.ts +1 -1
- package/src/domains/eval/workspaces/temp-copy.ts +1 -1
- package/src/domains/evidence/build.ts +13 -5
- package/src/domains/interop/consent.ts +7 -7
- package/src/domains/interop/extension.ts +1 -1
- package/src/domains/lifecycle/doctor.ts +27 -21
- package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
- package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
- package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
- package/src/domains/lifecycle/migrations/index.ts +20 -1
- package/src/domains/lifecycle/naming-history.ts +153 -0
- package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
- package/src/domains/lifecycle/naming-resources.ts +261 -0
- package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
- package/src/domains/lifecycle/naming-yazi.ts +81 -0
- package/src/domains/lifecycle/upgrade-notice.ts +1 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- package/src/domains/middleware/index.ts +7 -0
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/runtime.ts +2 -2
- package/src/domains/mux/contract.ts +157 -25
- package/src/domains/mux/detect.ts +29 -5
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +7 -1
- package/src/domains/mux/index.ts +20 -0
- package/src/domains/mux/operations.ts +28 -0
- package/src/domains/mux/protocol.ts +19 -6
- package/src/domains/mux/socket-client.ts +167 -19
- package/src/domains/mux/types.ts +49 -6
- package/src/domains/mux/yazi/event-stream.ts +6 -4
- package/src/domains/mux/yazi/profile.ts +1 -1
- package/src/domains/mux/yazi/session.ts +26 -3
- package/src/domains/observability/extension.ts +1 -1
- package/src/domains/observability/out-of-turn-usage.ts +2 -2
- package/src/domains/observability/projection.ts +1 -1
- package/src/domains/observability/trace-store.ts +22 -12
- package/src/domains/prompts/compiler.ts +2 -2
- package/src/domains/prompts/extension.ts +3 -3
- package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
- package/src/domains/prompts/fragments/operating/skills.md +25 -18
- package/src/domains/providers/extension.ts +5 -5
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +14 -2
- package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
- package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
- package/src/domains/providers/plugins.ts +1 -1
- package/src/domains/providers/resolver.ts +1 -1
- package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
- package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
- package/src/domains/providers/runtimes/common/probe-helpers.ts +2 -2
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
- package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
- package/src/domains/providers/types/knowledge-base.ts +13 -0
- package/src/domains/providers/types/local-model-quirks.ts +2 -2
- package/src/domains/providers/types/target-descriptor.ts +3 -3
- package/src/domains/resources/extension.ts +1 -1
- package/src/domains/resources/library.ts +6 -6
- package/src/domains/resources/prompts/loader.ts +1 -1
- package/src/domains/resources/skills/content-hash.ts +7 -6
- package/src/domains/resources/skills/evals.ts +1 -1
- package/src/domains/resources/skills/install.ts +36 -12
- package/src/domains/resources/skills/loader.ts +39 -13
- package/src/domains/resources/skills/marketplace.ts +21 -2
- package/src/domains/resources/skills/promotion.ts +214 -0
- package/src/domains/safety/audit.ts +2 -2
- package/src/domains/safety/finish-contract.ts +2 -1
- package/src/domains/safety/run-effects.ts +1 -1
- package/src/domains/scheduling/extension.ts +4 -4
- package/src/domains/session/archive-readers.ts +9 -1
- package/src/domains/session/compaction/branch-summary.ts +4 -0
- package/src/domains/session/compaction/compact.ts +1 -1
- package/src/domains/session/compaction/tokens.ts +4 -0
- package/src/domains/session/context-accounting.ts +1 -1
- package/src/domains/session/decision-board.ts +1 -1
- package/src/domains/session/extension.ts +1 -1
- package/src/domains/session/handoff.ts +2 -2
- package/src/domains/session/prompt-manifest.ts +0 -5
- package/src/domains/session/protected-artifact-journal.ts +12 -6
- package/src/domains/session/retry.ts +1 -1
- package/src/domains/share/archive.ts +85 -36
- package/src/domains/toolchain/install.ts +1 -1
- package/src/engine/acp/adapter.ts +3 -3
- package/src/engine/acp/event-mapper.ts +3 -3
- package/src/engine/acp/server.ts +27 -26
- package/src/engine/acp/tool-mediator.ts +2 -2
- package/src/engine/acp/types.ts +1 -1
- package/src/engine/alcf-oauth.ts +5 -5
- package/src/engine/antigravity/subprocess-runtime.ts +2 -2
- package/src/engine/api-registry.ts +1 -1
- package/src/engine/apis/llamacpp-residency.ts +1 -19
- package/src/engine/apis/lmstudio.ts +1 -6
- package/src/engine/apis/ollama-native.ts +3 -3
- package/src/engine/apis/openai-completions.ts +2 -2
- package/src/engine/apis/residency.ts +3 -9
- package/src/engine/claude/sdk-module.ts +1 -12
- package/src/engine/claude/sdk-runtime.ts +6 -6
- package/src/engine/claude/subprocess-runtime.ts +1 -1
- package/src/engine/claude/tool-safety.ts +4 -4
- package/src/engine/loop-guard.ts +0 -5
- package/src/engine/session.ts +14 -7
- package/src/engine/tui-primitives.ts +1 -1
- package/src/engine/worker-events.ts +6 -6
- package/src/engine/worker-runtime.ts +14 -13
- package/src/entry/orchestrator.ts +107 -88
- package/src/interactive/application-controller.ts +21 -21
- package/src/interactive/bus-notices.ts +2 -2
- package/src/interactive/chat-loop.ts +8 -8
- package/src/interactive/chat-panel.ts +1 -1
- package/src/interactive/clio-editor.ts +105 -1
- package/src/interactive/context-activity.ts +8 -6
- package/src/interactive/context-meter.ts +3 -6
- package/src/interactive/context-overlay.ts +1 -1
- package/src/interactive/cost-overlay.ts +1 -1
- package/src/interactive/council-grid.ts +2 -2
- package/src/interactive/dispatch-board.ts +30 -33
- package/src/interactive/editor-bash.ts +21 -0
- package/src/interactive/editor-steer.ts +9 -4
- package/src/interactive/editor-submit.ts +24 -18
- package/src/interactive/external-editor.ts +1 -1
- package/src/interactive/file-reference-completion.ts +360 -0
- package/src/interactive/footer/dashboard.ts +15 -17
- package/src/interactive/footer/notifications.ts +14 -8
- package/src/interactive/footer/widgets.ts +2 -44
- package/src/interactive/interactive-application.ts +79 -59
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +2 -2
- package/src/interactive/interactive-presentation.ts +21 -16
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +63 -17
- package/src/interactive/interactive-subscriptions.ts +1 -1
- package/src/interactive/interactive-tickers.ts +1 -1
- package/src/interactive/keybinding-manager.ts +4 -4
- package/src/interactive/layout.ts +1 -1
- package/src/interactive/memory-overlay.ts +2 -2
- package/src/interactive/modal-marker.ts +2 -21
- package/src/interactive/mutation-preview.ts +1 -1
- package/src/interactive/overlay-frame.ts +4 -12
- package/src/interactive/overlay-general-openers.ts +6 -2
- package/src/interactive/overlay-key-routing.ts +7 -7
- package/src/interactive/overlay-lifecycle.ts +1 -1
- package/src/interactive/overlay-model-selectors.ts +3 -3
- package/src/interactive/overlays/agents.ts +2 -2
- package/src/interactive/overlays/ask-user.ts +25 -11
- package/src/interactive/overlays/context-reset.ts +28 -4
- package/src/interactive/overlays/cwd-fallback.ts +28 -4
- package/src/interactive/overlays/decisions.ts +4 -2
- package/src/interactive/overlays/fleet-run-approval.ts +3 -3
- package/src/interactive/overlays/handoff-review.ts +2 -2
- package/src/interactive/overlays/interop.ts +1 -1
- package/src/interactive/overlays/library-install-confirm.ts +1 -1
- package/src/interactive/overlays/message-picker.ts +1 -1
- package/src/interactive/overlays/model-selector.ts +39 -31
- package/src/interactive/overlays/prompts.ts +10 -4
- package/src/interactive/overlays/session-selector.ts +2 -2
- package/src/interactive/overlays/settings.ts +339 -293
- package/src/interactive/overlays/side-question.ts +2 -2
- package/src/interactive/overlays/skills-hub.ts +8 -8
- package/src/interactive/overlays/tree-selector.ts +2 -2
- package/src/interactive/panes-runtime.ts +36 -10
- package/src/interactive/permission-overlay.ts +2 -2
- package/src/interactive/renderers/retry-status.ts +12 -4
- package/src/interactive/renderers/tool-execution.ts +4 -4
- package/src/interactive/session-transcript.ts +3 -3
- package/src/interactive/slash-autocomplete.ts +454 -165
- package/src/interactive/slash-commands.ts +279 -183
- package/src/interactive/slash-spec.ts +160 -17
- package/src/interactive/status/controller.ts +2 -2
- package/src/interactive/stream-pacing-policy.ts +1 -1
- package/src/interactive/tasks-overlay.ts +20 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/turn-context.ts +11 -11
- package/src/interactive/turn-persistence.ts +2 -2
- package/src/interactive/turn-prewarm.ts +2 -2
- package/src/interactive/turn-runtime.ts +8 -8
- package/src/interactive/turn-state.ts +1 -1
- package/src/interactive/view/artifacts.ts +12 -9
- package/src/interactive/view/view-overlay.ts +13 -10
- package/src/interactive/watch-pane.ts +38 -10
- package/src/interactive/welcome-dashboard.ts +15 -15
- package/src/interactive/worker-progress.ts +4 -4
- package/src/interactive/worker-receipts.ts +1 -1
- package/src/interactive/worker-stream.ts +1 -4
- package/src/interactive/yazi-bridge.ts +12 -5
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/builtin-tool-catalog.ts +1 -1
- package/src/tools/compete-worktrees.ts +27 -17
- package/src/tools/context/index.ts +15 -1
- package/src/tools/dispatch-admission.ts +4 -2
- package/src/tools/dispatch-arguments.ts +1 -1
- package/src/tools/dispatch-plan.ts +0 -11
- package/src/tools/dispatch-run-events.ts +12 -10
- package/src/tools/dispatch-runner.ts +11 -6
- package/src/tools/dispatch.ts +1 -1
- package/src/tools/find.ts +1 -6
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observers.ts +0 -33
- package/src/tools/task-worktree.ts +28 -7
- package/src/tools/verify/authoring.ts +3 -6
- package/src/tools/verify/frontend.ts +1 -1
- package/src/tools/web-fetch.ts +1 -1
- package/src/worker/entry.ts +4 -3
- package/src/worker/protocol.ts +16 -14
- package/src/worker/spec-contract.ts +2 -2
- package/src/worker/stdin-demux.ts +2 -2
- package/dist/chunk-GXNLGKAB.js +0 -571
- package/dist/chunk-VFA6GDY5.js +0 -1625
- package/dist/doctor-QOA5FNY5.js +0 -313
- package/src/engine/apis/degraded-inference.ts +0 -95
- /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
- /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
|
@@ -392,7 +392,7 @@ export function createSessionBundle(context: DomainContext): DomainBundle<Sessio
|
|
|
392
392
|
await performCheckpoint(state, "shutdown");
|
|
393
393
|
} catch (err) {
|
|
394
394
|
process.stderr.write(
|
|
395
|
-
`[clio:session] shutdown checkpoint failed: ${err instanceof Error ? err.message : String(err)}\n`,
|
|
395
|
+
`[clio-coder:session] shutdown checkpoint failed: ${err instanceof Error ? err.message : String(err)}\n`,
|
|
396
396
|
);
|
|
397
397
|
}
|
|
398
398
|
await closeCurrent("shutdown");
|
|
@@ -176,7 +176,7 @@ function isRecord(value: unknown): value is Record<string, unknown> {
|
|
|
176
176
|
* ceiling, so the returned string is never longer than the bound, and the cut
|
|
177
177
|
* lands on a whole code point rather than mid-sequence.
|
|
178
178
|
*/
|
|
179
|
-
|
|
179
|
+
function boundHandoffString(value: string): { text: string; truncated: boolean } {
|
|
180
180
|
const text = value.trim();
|
|
181
181
|
const bytes = Buffer.byteLength(text, "utf8");
|
|
182
182
|
if (bytes <= HANDOFF_MAX_STRING_BYTES) return { text, truncated: false };
|
|
@@ -343,7 +343,7 @@ export interface HandoffReadLedgerOptions {
|
|
|
343
343
|
* absolute form, which is what makes it fail the ledger check against paths
|
|
344
344
|
* recorded relative to the workspace root.
|
|
345
345
|
*/
|
|
346
|
-
|
|
346
|
+
function normalizeHandoffPath(value: string, cwd: string | null): string {
|
|
347
347
|
const trimmed = value.trim().replace(/[\\/]+$/u, "");
|
|
348
348
|
if (trimmed.length === 0) return "";
|
|
349
349
|
const absolute = isAbsolute(trimmed) ? normalize(trimmed) : cwd === null ? normalize(trimmed) : resolve(cwd, trimmed);
|
|
@@ -155,11 +155,6 @@ function isSessionPromptCompileRecord(value: unknown): value is SessionPromptCom
|
|
|
155
155
|
);
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
-
/** A record written before the field existed describes the 0.3.8 layout. */
|
|
159
|
-
export function promptManifestVersion(record: SessionPromptCompileRecord): number {
|
|
160
|
-
return record.version ?? 1;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
158
|
export function getPromptManifestFilePath(meta: SessionMeta, stateDir?: string): string {
|
|
164
159
|
const safeMeta = {
|
|
165
160
|
...meta,
|
|
@@ -63,9 +63,12 @@ function artifactPayload(artifact: ProtectedArtifact): Record<string, unknown> {
|
|
|
63
63
|
};
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
function recordPayload(
|
|
66
|
+
function recordPayload(
|
|
67
|
+
record: Omit<PendingProtectedArtifactRecord, "integrity">,
|
|
68
|
+
legacyNaming = false,
|
|
69
|
+
): Record<string, unknown> {
|
|
67
70
|
return {
|
|
68
|
-
contract: "clio.protectedArtifact.pending",
|
|
71
|
+
contract: legacyNaming ? "clio.protectedArtifact.pending" : "clio-coder.protectedArtifact.pending",
|
|
69
72
|
version: record.version,
|
|
70
73
|
id: record.id,
|
|
71
74
|
sessionId: record.sessionId,
|
|
@@ -81,9 +84,9 @@ function recordPayload(record: Omit<PendingProtectedArtifactRecord, "integrity">
|
|
|
81
84
|
};
|
|
82
85
|
}
|
|
83
86
|
|
|
84
|
-
function digest(record: Omit<PendingProtectedArtifactRecord, "integrity"
|
|
87
|
+
function digest(record: Omit<PendingProtectedArtifactRecord, "integrity">, legacyNaming = false): string {
|
|
85
88
|
return createHash("sha256")
|
|
86
|
-
.update(JSON.stringify(recordPayload(record)), "utf8")
|
|
89
|
+
.update(JSON.stringify(recordPayload(record, legacyNaming)), "utf8")
|
|
87
90
|
.digest("hex");
|
|
88
91
|
}
|
|
89
92
|
|
|
@@ -153,7 +156,10 @@ function parseRecord(value: unknown, sessionId: string): PendingProtectedArtifac
|
|
|
153
156
|
createdAt: value.createdAt,
|
|
154
157
|
integrity: { algorithm: "sha256", digest: value.integrity.digest },
|
|
155
158
|
};
|
|
156
|
-
|
|
159
|
+
const without = withoutIntegrity(parsed);
|
|
160
|
+
return digest(without) === parsed.integrity.digest || digest(without, true) === parsed.integrity.digest
|
|
161
|
+
? parsed
|
|
162
|
+
: null;
|
|
157
163
|
}
|
|
158
164
|
|
|
159
165
|
export function stagePendingProtectedArtifact(
|
|
@@ -190,7 +196,7 @@ export function clearPendingProtectedArtifact(handle: PendingProtectedArtifactHa
|
|
|
190
196
|
rmSync(handle.path, { force: true });
|
|
191
197
|
}
|
|
192
198
|
|
|
193
|
-
|
|
199
|
+
function readPendingProtectedArtifacts(sessionId: string): PendingProtectedArtifactReadResult {
|
|
194
200
|
const directory = journalDirectory(sessionId);
|
|
195
201
|
if (!existsSync(directory)) return { records: [], errors: [] };
|
|
196
202
|
const records: PendingProtectedArtifactHandle[] = [];
|
|
@@ -70,7 +70,7 @@ const MODEL_LOADING_MIN_DELAY_MS = 15000;
|
|
|
70
70
|
* True when the error says the target is loading the model, so the wait should
|
|
71
71
|
* be sized for disk and VRAM rather than for a provider backing off.
|
|
72
72
|
*/
|
|
73
|
-
|
|
73
|
+
function isModelLoadingErrorMessage(errorMessage: string | null | undefined): boolean {
|
|
74
74
|
if (!errorMessage || errorMessage.length === 0) return false;
|
|
75
75
|
return MODEL_LOADING_PATTERN.test(errorMessage);
|
|
76
76
|
}
|
|
@@ -2,7 +2,7 @@ import { createHash } from "node:crypto";
|
|
|
2
2
|
import { existsSync, lstatSync, readdirSync, readFileSync, realpathSync, type Stats, statSync } from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
|
|
5
|
-
import { type ClioSettings, readSettings, settingsPath, updateSettings } from "../../core/config.js";
|
|
5
|
+
import { type ClioSettings, readSettings, settingsPath, updateSettings, validateSettings } from "../../core/config.js";
|
|
6
6
|
import { DEFAULT_SETTINGS } from "../../core/defaults.js";
|
|
7
7
|
import { readClioVersion } from "../../core/package-root.js";
|
|
8
8
|
import {
|
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
parseAgentRecipeSchema,
|
|
19
19
|
parseFleetContract,
|
|
20
20
|
} from "../agents/index.js";
|
|
21
|
+
import { migrateSettingsV1Document } from "../lifecycle/migrations/2026-09-01-settings-v2.js";
|
|
21
22
|
|
|
22
23
|
export type ShareScope = "project" | "user";
|
|
23
24
|
export type ShareEntryType = "project-context" | "prompt" | "skill" | "agent" | "fleet" | "settings" | "extension";
|
|
@@ -43,14 +44,14 @@ export interface ShareArchiveManifestFile {
|
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
export interface ShareArchiveManifest {
|
|
46
|
-
format: "clio.share.v1";
|
|
47
|
-
|
|
47
|
+
format: "clio-coder.share.v1";
|
|
48
|
+
clioCoderVersion: string;
|
|
48
49
|
createdAt: string;
|
|
49
50
|
files: ShareArchiveManifestFile[];
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
export interface ClioShareArchive {
|
|
53
|
-
kind: "clio-share-archive";
|
|
54
|
+
kind: "clio-coder-share-archive";
|
|
54
55
|
formatVersion: 1;
|
|
55
56
|
manifest: ShareArchiveManifest;
|
|
56
57
|
files: ShareArchiveFile[];
|
|
@@ -194,17 +195,49 @@ function addTree(
|
|
|
194
195
|
|
|
195
196
|
function settingsFragment(settings: Readonly<ClioSettings>): Record<string, unknown> {
|
|
196
197
|
return {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
compaction: settings.compaction,
|
|
204
|
-
|
|
198
|
+
version: 2,
|
|
199
|
+
chat: {
|
|
200
|
+
modelPicker: { cycleSet: [...settings.chat.modelPicker.cycleSet] },
|
|
201
|
+
retry: structuredClone(settings.chat.retry),
|
|
202
|
+
},
|
|
203
|
+
fleet: { concurrency: settings.fleet.concurrency },
|
|
204
|
+
context: { compaction: structuredClone(settings.context.compaction) },
|
|
205
|
+
safety: {
|
|
206
|
+
autonomy: settings.safety.autonomy,
|
|
207
|
+
limits: { sessionCostUsd: settings.safety.limits.sessionCostUsd },
|
|
208
|
+
},
|
|
209
|
+
interface: structuredClone(settings.interface),
|
|
205
210
|
};
|
|
206
211
|
}
|
|
207
212
|
|
|
213
|
+
const SETTINGS_FRAGMENT_ROOTS = ["chat", "fleet", "context", "safety", "interface"] as const;
|
|
214
|
+
|
|
215
|
+
function normalizedSettingsFragment(parsed: unknown): Record<string, unknown> {
|
|
216
|
+
if (!isRecord(parsed)) throw new Error("settings fragment must be a YAML object");
|
|
217
|
+
let normalized = parsed;
|
|
218
|
+
if (parsed.version === undefined || parsed.version === 1) {
|
|
219
|
+
normalized = migrateSettingsV1Document(parsed).document;
|
|
220
|
+
} else if (parsed.version !== 2) {
|
|
221
|
+
throw new Error(`settings fragment version must be 1 or 2, got ${String(parsed.version)}`);
|
|
222
|
+
}
|
|
223
|
+
const validation = validateSettings(normalized);
|
|
224
|
+
if (validation.issues.length > 0) {
|
|
225
|
+
throw new Error(
|
|
226
|
+
`invalid settings fragment: ${validation.issues.map((issue) => `${issue.path}: ${issue.message}`).join("; ")}`,
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
return normalized;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
function mergeFragmentValue(current: unknown, fragment: unknown): unknown {
|
|
233
|
+
if (!isRecord(current) || !isRecord(fragment)) return structuredClone(fragment);
|
|
234
|
+
const merged: Record<string, unknown> = { ...current };
|
|
235
|
+
for (const [key, value] of Object.entries(fragment)) {
|
|
236
|
+
merged[key] = mergeFragmentValue(merged[key], value);
|
|
237
|
+
}
|
|
238
|
+
return merged;
|
|
239
|
+
}
|
|
240
|
+
|
|
208
241
|
function requestedScopes(scope: ShareExportOptions["scope"]): ShareScope[] {
|
|
209
242
|
if (scope === "both") return ["project", "user"];
|
|
210
243
|
return [scope ?? "project"];
|
|
@@ -314,11 +347,11 @@ export function createShareArchive(options: ShareExportOptions = {}): ClioShareA
|
|
|
314
347
|
|
|
315
348
|
const manifestFiles = files.map(({ data: _data, encoding: _encoding, ...entry }) => entry);
|
|
316
349
|
return {
|
|
317
|
-
kind: "clio-share-archive",
|
|
350
|
+
kind: "clio-coder-share-archive",
|
|
318
351
|
formatVersion: 1,
|
|
319
352
|
manifest: {
|
|
320
|
-
format: "clio.share.v1",
|
|
321
|
-
|
|
353
|
+
format: "clio-coder.share.v1",
|
|
354
|
+
clioCoderVersion: readClioVersion(),
|
|
322
355
|
createdAt: new Date().toISOString(),
|
|
323
356
|
files: manifestFiles,
|
|
324
357
|
},
|
|
@@ -337,13 +370,33 @@ function decodeArchiveFile(entry: ShareArchiveFile): Buffer {
|
|
|
337
370
|
}
|
|
338
371
|
|
|
339
372
|
function parseArchive(raw: unknown): ClioShareArchive {
|
|
340
|
-
if (
|
|
373
|
+
if (
|
|
374
|
+
!isRecord(raw) ||
|
|
375
|
+
(raw.kind !== "clio-coder-share-archive" && raw.kind !== "clio-share-archive") ||
|
|
376
|
+
raw.formatVersion !== 1 ||
|
|
377
|
+
!isRecord(raw.manifest)
|
|
378
|
+
) {
|
|
341
379
|
throw new Error("not a Clio share archive v1");
|
|
342
380
|
}
|
|
343
|
-
if (
|
|
381
|
+
if (
|
|
382
|
+
(raw.manifest.format !== "clio-coder.share.v1" && raw.manifest.format !== "clio.share.v1") ||
|
|
383
|
+
!Array.isArray(raw.files)
|
|
384
|
+
) {
|
|
344
385
|
throw new Error("share archive manifest is malformed");
|
|
345
386
|
}
|
|
346
|
-
const
|
|
387
|
+
const clioCoderVersion = raw.manifest.clioCoderVersion ?? raw.manifest.clioVersion;
|
|
388
|
+
if (typeof clioCoderVersion !== "string") throw new Error("share archive manifest is malformed");
|
|
389
|
+
const archive: ClioShareArchive = {
|
|
390
|
+
kind: "clio-coder-share-archive",
|
|
391
|
+
formatVersion: 1,
|
|
392
|
+
manifest: {
|
|
393
|
+
format: "clio-coder.share.v1",
|
|
394
|
+
clioCoderVersion,
|
|
395
|
+
createdAt: raw.manifest.createdAt as string,
|
|
396
|
+
files: raw.manifest.files as ShareArchiveManifestFile[],
|
|
397
|
+
},
|
|
398
|
+
files: raw.files as ShareArchiveFile[],
|
|
399
|
+
};
|
|
347
400
|
const allowedTypes = new Set<ShareEntryType>([
|
|
348
401
|
"project-context",
|
|
349
402
|
"prompt",
|
|
@@ -558,12 +611,12 @@ function preflightImportTargets(
|
|
|
558
611
|
function versionDiagnostics(archive: ClioShareArchive): ShareDiagnostic[] {
|
|
559
612
|
const current = readClioVersion();
|
|
560
613
|
const [curMajor, curMinor] = current.split(".");
|
|
561
|
-
const [arcMajor, arcMinor] = archive.manifest.
|
|
614
|
+
const [arcMajor, arcMinor] = archive.manifest.clioCoderVersion.split(".");
|
|
562
615
|
if (curMajor !== arcMajor || curMinor !== arcMinor) {
|
|
563
616
|
return [
|
|
564
617
|
{
|
|
565
618
|
type: "warning",
|
|
566
|
-
message: `archive was created by Clio ${archive.manifest.
|
|
619
|
+
message: `archive was created by Clio ${archive.manifest.clioCoderVersion}; current Clio is ${current}`,
|
|
567
620
|
},
|
|
568
621
|
];
|
|
569
622
|
}
|
|
@@ -571,12 +624,18 @@ function versionDiagnostics(archive: ClioShareArchive): ShareDiagnostic[] {
|
|
|
571
624
|
}
|
|
572
625
|
|
|
573
626
|
function settingsPlan(buffer: Buffer, options: ShareImportOptions): ShareDiagnostic[] {
|
|
574
|
-
|
|
575
|
-
|
|
627
|
+
let parsed: Record<string, unknown>;
|
|
628
|
+
try {
|
|
629
|
+
parsed = normalizedSettingsFragment(parseYaml(buffer.toString("utf8")) as unknown);
|
|
630
|
+
} catch (error) {
|
|
631
|
+
return [{ type: "error", message: error instanceof Error ? error.message : String(error) }];
|
|
632
|
+
}
|
|
576
633
|
const settingsTarget = settingsFilePath();
|
|
577
634
|
const current = settingsFragment(existsSync(settingsTarget) ? readSettings() : DEFAULT_SETTINGS);
|
|
578
635
|
const diagnostics: ShareDiagnostic[] = [];
|
|
579
|
-
for (const [key, value] of Object.entries(parsed))
|
|
636
|
+
for (const [key, value] of Object.entries(parsed).filter(([key]) =>
|
|
637
|
+
(SETTINGS_FRAGMENT_ROOTS as ReadonlyArray<string>).includes(key),
|
|
638
|
+
)) {
|
|
580
639
|
if (key in current && JSON.stringify(current[key]) !== JSON.stringify(value)) {
|
|
581
640
|
diagnostics.push({
|
|
582
641
|
type: "conflict",
|
|
@@ -664,25 +723,15 @@ export function planShareImport(filePath: string, options: ShareImportOptions =
|
|
|
664
723
|
}
|
|
665
724
|
|
|
666
725
|
function mergeSettingsFragment(buffer: Buffer): string {
|
|
667
|
-
const parsed = parseYaml(buffer.toString("utf8")) as unknown;
|
|
668
|
-
if (!isRecord(parsed)) throw new Error("settings fragment must be a YAML object");
|
|
726
|
+
const parsed = normalizedSettingsFragment(parseYaml(buffer.toString("utf8")) as unknown);
|
|
669
727
|
// Single-writer rule: the merge goes through updateSettings (lock + strict
|
|
670
728
|
// re-validation), so an invalid fragment throws here instead of landing on
|
|
671
729
|
// disk. No backup sidecar: settings.yaml is machine-owned and versioned by
|
|
672
730
|
// the importer's own plan/diagnostics flow.
|
|
673
731
|
updateSettings((settings) => {
|
|
674
732
|
const next = settings as unknown as Record<string, unknown>;
|
|
675
|
-
for (const key of
|
|
676
|
-
|
|
677
|
-
"scope",
|
|
678
|
-
"budget",
|
|
679
|
-
"theme",
|
|
680
|
-
"terminal",
|
|
681
|
-
"keybindings",
|
|
682
|
-
"compaction",
|
|
683
|
-
"retry",
|
|
684
|
-
] as const) {
|
|
685
|
-
if (key in parsed) next[key] = parsed[key];
|
|
733
|
+
for (const key of SETTINGS_FRAGMENT_ROOTS) {
|
|
734
|
+
if (key in parsed) next[key] = mergeFragmentValue(next[key], parsed[key]);
|
|
686
735
|
}
|
|
687
736
|
});
|
|
688
737
|
return settingsPath();
|
|
@@ -32,7 +32,7 @@ export interface AcpDelegationRunInput {
|
|
|
32
32
|
dynamicPromptMessages?: ReadonlyArray<{ body: string }>;
|
|
33
33
|
cwd: string;
|
|
34
34
|
safety: SafetyContract;
|
|
35
|
-
/** Session autonomy level applied by the mediator under clio-policy governance. */
|
|
35
|
+
/** Session autonomy level applied by the mediator under clio-coder-policy governance. */
|
|
36
36
|
autonomy?: AutonomyLevel;
|
|
37
37
|
signal?: AbortSignal;
|
|
38
38
|
clientVersion?: string;
|
|
@@ -223,11 +223,11 @@ export function startAcpDelegationRun(input: AcpDelegationRunInput): AcpDelegati
|
|
|
223
223
|
const mediator = new AcpToolMediator({
|
|
224
224
|
safety: input.safety,
|
|
225
225
|
cwd: input.cwd,
|
|
226
|
-
toolGovernance: input.agent.toolGovernance ?? "clio-policy",
|
|
226
|
+
toolGovernance: input.agent.toolGovernance ?? "clio-coder-policy",
|
|
227
227
|
...(input.autonomy !== undefined ? { autonomy: input.autonomy } : {}),
|
|
228
228
|
onPermissionResolved: (event) =>
|
|
229
229
|
emit({
|
|
230
|
-
type: "
|
|
230
|
+
type: "clio_coder_permission_resolved",
|
|
231
231
|
payload: event,
|
|
232
232
|
} as ClioWorkerEvent),
|
|
233
233
|
});
|
|
@@ -74,7 +74,7 @@ export class AcpEventMapper {
|
|
|
74
74
|
return this.mapToolUpdate(update as AcpToolCallUpdate);
|
|
75
75
|
}
|
|
76
76
|
if (kind === "plan") {
|
|
77
|
-
return [{ type: "
|
|
77
|
+
return [{ type: "clio_coder_plan_update", payload: update } as unknown as AgentEvent];
|
|
78
78
|
}
|
|
79
79
|
return [];
|
|
80
80
|
}
|
|
@@ -116,7 +116,7 @@ export class AcpEventMapper {
|
|
|
116
116
|
// operator surface. The descriptor composed from it here does.
|
|
117
117
|
const action = describeCallAction(update.kind ?? title, update.rawInput);
|
|
118
118
|
out.push({
|
|
119
|
-
type: "
|
|
119
|
+
type: "clio_coder_tool_start",
|
|
120
120
|
payload: {
|
|
121
121
|
tool: update.kind ?? title,
|
|
122
122
|
toolCallId,
|
|
@@ -145,7 +145,7 @@ export class AcpEventMapper {
|
|
|
145
145
|
isError,
|
|
146
146
|
} as unknown as AgentEvent);
|
|
147
147
|
out.push({
|
|
148
|
-
type: "
|
|
148
|
+
type: "clio_coder_tool_finish",
|
|
149
149
|
payload: {
|
|
150
150
|
tool: update.kind ?? title,
|
|
151
151
|
toolCallId,
|
package/src/engine/acp/server.ts
CHANGED
|
@@ -77,10 +77,10 @@ export interface AcpSafeSettingsSnapshot extends AcpRoutingSnapshot {
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
export type AcpSafeSettingsPatch = Partial<{
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
autonomy: AutonomyLevel;
|
|
80
|
+
"chat.target": string | null;
|
|
81
|
+
"chat.model": string | null;
|
|
82
|
+
"chat.thinkingLevel": AcpThinkingLevel;
|
|
83
|
+
"safety.autonomy": AutonomyLevel;
|
|
84
84
|
}>;
|
|
85
85
|
|
|
86
86
|
export interface AcpSettingsControl {
|
|
@@ -676,21 +676,26 @@ function eventTextDelta(event: AcpEventRecord): string {
|
|
|
676
676
|
}
|
|
677
677
|
|
|
678
678
|
/**
|
|
679
|
-
* The next unused `clio-tool-<n>`. The counter alone is not enough: an engine
|
|
680
|
-
* that names its own calls `clio-tool-1` would otherwise collide with an alias
|
|
679
|
+
* The next unused `clio-coder-tool-<n>`. The counter alone is not enough: an engine
|
|
680
|
+
* that names its own calls `clio-coder-tool-1` would otherwise collide with an alias
|
|
681
681
|
* this server minted, and two different calls sharing one wire id is the exact
|
|
682
682
|
* failure aliasing exists to prevent.
|
|
683
683
|
*/
|
|
684
684
|
function nextAliasToolCallId(active: ActivePrompt): string {
|
|
685
685
|
for (;;) {
|
|
686
686
|
active.toolCallSequence += 1;
|
|
687
|
-
const alias = `clio-tool-${active.toolCallSequence}`;
|
|
687
|
+
const alias = `clio-coder-tool-${active.toolCallSequence}`;
|
|
688
688
|
if (active.usedWireIds.has(alias)) continue;
|
|
689
689
|
active.usedWireIds.add(alias);
|
|
690
690
|
return alias;
|
|
691
691
|
}
|
|
692
692
|
}
|
|
693
693
|
|
|
694
|
+
function normalizeReleasedAliasToolCallId(engineId: string): string {
|
|
695
|
+
const legacy = /^clio-tool-([1-9]\d*)$/u.exec(engineId);
|
|
696
|
+
return legacy === null ? engineId : `clio-coder-tool-${legacy[1]}`;
|
|
697
|
+
}
|
|
698
|
+
|
|
694
699
|
/** Records `wireId` as the newest wire id this engine id speaks under. */
|
|
695
700
|
function pushWireId(active: ActivePrompt, engineId: string, wireId: string): string {
|
|
696
701
|
const existing = active.toolCallWireIds.get(engineId);
|
|
@@ -705,9 +710,10 @@ function pushWireId(active: ActivePrompt, engineId: string, wireId: string): str
|
|
|
705
710
|
* call travels under a per-prompt alias.
|
|
706
711
|
*/
|
|
707
712
|
function mintWireId(active: ActivePrompt, engineId: string): string {
|
|
708
|
-
const
|
|
709
|
-
|
|
710
|
-
|
|
713
|
+
const candidate = normalizeReleasedAliasToolCallId(engineId);
|
|
714
|
+
const usable = utf8Bytes(candidate) <= ACP_MAX_TOOL_CALL_ID_BYTES && !active.usedWireIds.has(candidate);
|
|
715
|
+
if (usable) active.usedWireIds.add(candidate);
|
|
716
|
+
return pushWireId(active, engineId, usable ? candidate : nextAliasToolCallId(active));
|
|
711
717
|
}
|
|
712
718
|
|
|
713
719
|
/**
|
|
@@ -975,14 +981,14 @@ function handleChatEvent(
|
|
|
975
981
|
if (last !== undefined) applyStopReason(active, last);
|
|
976
982
|
return;
|
|
977
983
|
}
|
|
978
|
-
// Clio lifecycle events (agent_start, retry_status,
|
|
984
|
+
// Clio lifecycle events (agent_start, retry_status, clio_coder_plan_update) have
|
|
979
985
|
// no ACP v1 SessionUpdate equivalent. The prompt turn is bounded by the
|
|
980
986
|
// session/prompt response, so emitting non-spec `progress` updates would
|
|
981
987
|
// break strict clients. They are intentionally dropped. The same protocol
|
|
982
988
|
// gap applies to routing advisories (external settings divergence, active
|
|
983
989
|
// target removed): ACP v1 has no agent-initiated advisory channel, so the
|
|
984
990
|
// orchestrator records those as `custom` session-ledger entries
|
|
985
|
-
// (customType "clio.routing-notice") instead of inventing update kinds.
|
|
991
|
+
// (customType "clio-coder.routing-notice") instead of inventing update kinds.
|
|
986
992
|
}
|
|
987
993
|
|
|
988
994
|
const ACP_MAX_SESSION_ID_BYTES = 128;
|
|
@@ -1259,12 +1265,7 @@ function sessionResultMeta(
|
|
|
1259
1265
|
};
|
|
1260
1266
|
}
|
|
1261
1267
|
|
|
1262
|
-
const ACP_SAFE_SETTINGS_KEYS = [
|
|
1263
|
-
"orchestrator.target",
|
|
1264
|
-
"orchestrator.model",
|
|
1265
|
-
"orchestrator.thinkingLevel",
|
|
1266
|
-
"autonomy",
|
|
1267
|
-
] as const;
|
|
1268
|
+
const ACP_SAFE_SETTINGS_KEYS = ["chat.target", "chat.model", "chat.thinkingLevel", "safety.autonomy"] as const;
|
|
1268
1269
|
const ACP_THINKING_LEVELS = new Set<AcpThinkingLevel>(["off", "minimal", "low", "medium", "high", "xhigh", "max"]);
|
|
1269
1270
|
const ACP_AUTONOMY_LEVELS = new Set<AutonomyLevel>(["read-only", "suggest", "auto-edit", "full-auto"]);
|
|
1270
1271
|
const ACP_MAX_TARGETS = 64;
|
|
@@ -1288,12 +1289,12 @@ function safeSettingsProjection(snapshot: AcpSafeSettingsSnapshot): Record<strin
|
|
|
1288
1289
|
const autonomy = ACP_AUTONOMY_LEVELS.has(snapshot.autonomy) ? snapshot.autonomy : DEFAULT_AUTONOMY_LEVEL;
|
|
1289
1290
|
return {
|
|
1290
1291
|
settings: {
|
|
1291
|
-
|
|
1292
|
+
chat: {
|
|
1292
1293
|
target: safeConfiguredIdentifier(snapshot.target, ACP_MAX_TARGET_ID_BYTES),
|
|
1293
1294
|
model: safeConfiguredIdentifier(snapshot.model, ACP_MAX_MODEL_ID_BYTES),
|
|
1294
1295
|
thinkingLevel,
|
|
1295
1296
|
},
|
|
1296
|
-
autonomy,
|
|
1297
|
+
safety: { autonomy },
|
|
1297
1298
|
},
|
|
1298
1299
|
editable: [...ACP_SAFE_SETTINGS_KEYS],
|
|
1299
1300
|
};
|
|
@@ -2318,7 +2319,7 @@ export async function serveClioAcpAgent(options: ClioAcpServerOptions): Promise<
|
|
|
2318
2319
|
throw new AcpRequestError(-32602, "patch contains an unknown setting", { code: "invalid_params" });
|
|
2319
2320
|
}
|
|
2320
2321
|
switch (key) {
|
|
2321
|
-
case "
|
|
2322
|
+
case "chat.target": {
|
|
2322
2323
|
if (value === null) {
|
|
2323
2324
|
patch[key] = null;
|
|
2324
2325
|
break;
|
|
@@ -2333,16 +2334,16 @@ export async function serveClioAcpAgent(options: ClioAcpServerOptions): Promise<
|
|
|
2333
2334
|
patch[key] = target;
|
|
2334
2335
|
break;
|
|
2335
2336
|
}
|
|
2336
|
-
case "
|
|
2337
|
+
case "chat.model":
|
|
2337
2338
|
patch[key] = value === null ? null : requireBoundedClientString(value, key, ACP_MAX_MODEL_ID_BYTES);
|
|
2338
2339
|
break;
|
|
2339
|
-
case "
|
|
2340
|
+
case "chat.thinkingLevel":
|
|
2340
2341
|
if (typeof value !== "string" || !ACP_THINKING_LEVELS.has(value as AcpThinkingLevel)) {
|
|
2341
2342
|
throw new AcpRequestError(-32602, "invalid thinking level", { code: "invalid_params" });
|
|
2342
2343
|
}
|
|
2343
2344
|
patch[key] = value as AcpThinkingLevel;
|
|
2344
2345
|
break;
|
|
2345
|
-
case "autonomy":
|
|
2346
|
+
case "safety.autonomy":
|
|
2346
2347
|
if (typeof value !== "string" || !ACP_AUTONOMY_LEVELS.has(value as AutonomyLevel)) {
|
|
2347
2348
|
throw new AcpRequestError(-32602, "invalid autonomy level", { code: "invalid_params" });
|
|
2348
2349
|
}
|
|
@@ -2351,8 +2352,8 @@ export async function serveClioAcpAgent(options: ClioAcpServerOptions): Promise<
|
|
|
2351
2352
|
}
|
|
2352
2353
|
}
|
|
2353
2354
|
const current = options.settings.read();
|
|
2354
|
-
const nextTarget = patch["
|
|
2355
|
-
const nextModel = patch["
|
|
2355
|
+
const nextTarget = patch["chat.target"] === undefined ? current.target : patch["chat.target"];
|
|
2356
|
+
const nextModel = patch["chat.model"] === undefined ? current.model : patch["chat.model"];
|
|
2356
2357
|
if (nextTarget === null && nextModel !== null) {
|
|
2357
2358
|
throw new AcpRequestError(-32602, "model requires a configured target", { code: "invalid_params" });
|
|
2358
2359
|
}
|
|
@@ -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
|
@@ -34,7 +34,7 @@ export const ACP_MAX_CHUNK_BYTES = 16384;
|
|
|
34
34
|
* Upper bound on a `toolCallId` this server puts on the wire, in UTF-8 bytes
|
|
35
35
|
* (CONTRACT C001 §3). Identity is one call per id in both directions: an engine
|
|
36
36
|
* id over this bound, missing, or already claimed by another call this turn
|
|
37
|
-
* 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
|
|
38
38
|
* mints a fresh alias rather than reusing the first call's wire id. A permission
|
|
39
39
|
* request binds only to an id the client already received a `tool_call` for and
|
|
40
40
|
* has not yet seen finish; nothing is minted on that path.
|
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
|