@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
|
@@ -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;
|
|
@@ -66,20 +66,9 @@ export type ClaudeAgentSdkLoader = () => Promise<ClaudeAgentSdkModule>;
|
|
|
66
66
|
// runtime `import()`.
|
|
67
67
|
const realLoader: ClaudeAgentSdkLoader = async () => await import("@anthropic-ai/claude-agent-sdk");
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
const loader: ClaudeAgentSdkLoader = realLoader;
|
|
70
70
|
let cached: ClaudeAgentSdkModule | null = null;
|
|
71
71
|
|
|
72
|
-
/**
|
|
73
|
-
* Swap the import used by {@link loadClaudeAgentSdk}. The absence of a 224MB
|
|
74
|
-
* optional package cannot be staged inside a normal test process, so the
|
|
75
|
-
* contract test intercepts the import here; passing `null` restores the real
|
|
76
|
-
* one and clears the cache.
|
|
77
|
-
*/
|
|
78
|
-
export function setClaudeAgentSdkLoader(next: ClaudeAgentSdkLoader | null): void {
|
|
79
|
-
loader = next ?? realLoader;
|
|
80
|
-
cached = null;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
72
|
/**
|
|
84
73
|
* Resolve the SDK, or fail with {@link ClaudeAgentSdkUnavailableError}. A load
|
|
85
74
|
* error that is not a resolution failure (a broken install, a throwing module
|
|
@@ -53,11 +53,11 @@ async function* oneSdkUserMessage(message: SDKUserMessage): AsyncIterable<SDKUse
|
|
|
53
53
|
yield message;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
function claudeSdkPermissionModeForAutonomy(_level: AutonomyLevel | undefined): PermissionMode {
|
|
57
57
|
return "default";
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
function claudeSdkToolsForAutonomy(_level: AutonomyLevel | undefined): NonNullable<Options["tools"]> {
|
|
61
61
|
return DEFAULT_CLAUDE_TOOLS;
|
|
62
62
|
}
|
|
63
63
|
|
|
@@ -314,7 +314,7 @@ export interface ClaudeWorkerBudgetGate {
|
|
|
314
314
|
}
|
|
315
315
|
|
|
316
316
|
/** Canonical call counter shared by the SDK's PreToolUse/canUseTool mediation seam. */
|
|
317
|
-
|
|
317
|
+
function createClaudeWorkerBudgetGate(
|
|
318
318
|
budget: WorkerBudget,
|
|
319
319
|
onBoundary: () => void,
|
|
320
320
|
onHardCap: () => void,
|
|
@@ -438,7 +438,7 @@ function decideToolUse(
|
|
|
438
438
|
}
|
|
439
439
|
|
|
440
440
|
/** Share one logical permission decision across the SDK hook/callback pair. */
|
|
441
|
-
|
|
441
|
+
function decideClaudeSdkToolUseOnce(
|
|
442
442
|
handled: Map<string, ClaudeToolPermissionDecision>,
|
|
443
443
|
toolUseID: string | undefined,
|
|
444
444
|
decide: () => ClaudeToolPermissionDecision,
|
|
@@ -536,7 +536,7 @@ export function startClaudeSdkWorkerRun(input: WorkerRunInput, emit: WorkerEvent
|
|
|
536
536
|
() => {},
|
|
537
537
|
() => {
|
|
538
538
|
budgetFailure = true;
|
|
539
|
-
emit({ type: "
|
|
539
|
+
emit({ type: "clio_coder_run_outcome", payload: { outcomeCode: "worker_tool_call_cap_exhausted" } });
|
|
540
540
|
abort();
|
|
541
541
|
},
|
|
542
542
|
resolveDeliveryTools(allowedToolSet, input.product),
|
|
@@ -563,7 +563,7 @@ export function startClaudeSdkWorkerRun(input: WorkerRunInput, emit: WorkerEvent
|
|
|
563
563
|
if (hookInput.hook_event_name !== "PostToolBatch" || !budgetGate?.phaseReached()) return { continue: true };
|
|
564
564
|
if (input.budget?.synthesis === false) {
|
|
565
565
|
budgetFailure = true;
|
|
566
|
-
emit({ type: "
|
|
566
|
+
emit({ type: "clio_coder_run_outcome", payload: { outcomeCode: "worker_tool_call_cap_exhausted" } });
|
|
567
567
|
return { continue: false, stopReason: `worker agent budget reached (${input.budget.toolCalls})` };
|
|
568
568
|
}
|
|
569
569
|
return {
|
|
@@ -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"][] = [
|
|
@@ -9,18 +9,18 @@ import type { RunOutcomeCode } from "../domains/dispatch/types.js";
|
|
|
9
9
|
import type { ToolFinishEvent, ToolStartEvent } from "../tools/agent-tools.js";
|
|
10
10
|
|
|
11
11
|
export interface ClioToolStartEvent {
|
|
12
|
-
type: "
|
|
12
|
+
type: "clio_coder_tool_start";
|
|
13
13
|
payload: ToolStartEvent;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
export interface ClioToolFinishEvent {
|
|
17
|
-
type: "
|
|
17
|
+
type: "clio_coder_tool_finish";
|
|
18
18
|
payload: ToolFinishEvent;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
/** Emitted when the worker's non-stall policy resolves a permission-requiring tool call. */
|
|
22
22
|
export interface ClioPermissionResolvedEvent {
|
|
23
|
-
type: "
|
|
23
|
+
type: "clio_coder_permission_resolved";
|
|
24
24
|
payload: {
|
|
25
25
|
tool: string;
|
|
26
26
|
actionClass: string;
|
|
@@ -47,7 +47,7 @@ export interface ClioPermissionResolvedEvent {
|
|
|
47
47
|
* on stdin (or the timeout fallback) resolves it.
|
|
48
48
|
*/
|
|
49
49
|
export interface ClioPermissionEscalatedEvent {
|
|
50
|
-
type: "
|
|
50
|
+
type: "clio_coder_permission_escalated";
|
|
51
51
|
payload: {
|
|
52
52
|
requestId: string;
|
|
53
53
|
tool: string;
|
|
@@ -78,7 +78,7 @@ export interface ClioPermissionEscalatedEvent {
|
|
|
78
78
|
* is the delivery ack for operator surfaces.
|
|
79
79
|
*/
|
|
80
80
|
export interface ClioSteerReceivedEvent {
|
|
81
|
-
type: "
|
|
81
|
+
type: "clio_coder_steer_received";
|
|
82
82
|
payload: {
|
|
83
83
|
chars: number;
|
|
84
84
|
/** Exact parent-side steering provenance entry this acceptance closes. */
|
|
@@ -88,7 +88,7 @@ export interface ClioSteerReceivedEvent {
|
|
|
88
88
|
|
|
89
89
|
/** Machine-readable terminal classification, emitted where the condition is known. */
|
|
90
90
|
export interface ClioRunOutcomeEvent {
|
|
91
|
-
type: "
|
|
91
|
+
type: "clio_coder_run_outcome";
|
|
92
92
|
payload: { outcomeCode: RunOutcomeCode };
|
|
93
93
|
}
|
|
94
94
|
|
|
@@ -13,6 +13,7 @@ import path from "node:path";
|
|
|
13
13
|
import { validateSettingsFile } from "../core/config.js";
|
|
14
14
|
import {
|
|
15
15
|
configureGuardrails,
|
|
16
|
+
guardrailValuesFromSettings,
|
|
16
17
|
isWorkerToolCallCapExceededReason,
|
|
17
18
|
isWorkerToolCallCapSynthesisReason,
|
|
18
19
|
} from "../core/guardrails.js";
|
|
@@ -376,11 +377,11 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
376
377
|
// non-throwing read: a worker must not abort over a settings issue the parent
|
|
377
378
|
// already surfaced.
|
|
378
379
|
const workerSettings = validateSettingsFile().settings;
|
|
379
|
-
setGlobalDefaultMaxOutputTokens(workerSettings.
|
|
380
|
+
setGlobalDefaultMaxOutputTokens(workerSettings.chat.maxOutputTokens);
|
|
380
381
|
// Same mirroring for guardrail policy: the worker's loop-guard cap and tool
|
|
381
382
|
// byte caps resolve settings-first, so the fresh process needs the section
|
|
382
383
|
// installed before any registry or tool construction reads it.
|
|
383
|
-
configureGuardrails(workerSettings
|
|
384
|
+
configureGuardrails(guardrailValuesFromSettings(workerSettings));
|
|
384
385
|
const fauxModel = registerFauxFromEnv();
|
|
385
386
|
// Workers are bounded runs against an admission-verified recipe surface.
|
|
386
387
|
// They have no operator to widen a missing tool, so the active surface is
|
|
@@ -548,17 +549,17 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
548
549
|
);
|
|
549
550
|
const telemetry: ToolTelemetry = {
|
|
550
551
|
onStart(event) {
|
|
551
|
-
emit({ type: "
|
|
552
|
+
emit({ type: "clio_coder_tool_start", payload: event });
|
|
552
553
|
},
|
|
553
554
|
onFinish(event) {
|
|
554
|
-
emit({ type: "
|
|
555
|
+
emit({ type: "clio_coder_tool_finish", payload: event });
|
|
555
556
|
if (event.outcome !== "blocked" || typeof event.reason !== "string") return;
|
|
556
557
|
// Lifetime-cap lockout: record the bound (the run must not seal as an
|
|
557
558
|
// ordinary success) but do not abort. The loop guard has flipped the
|
|
558
559
|
// synthesis tool lock, so the next model round runs text-only and the
|
|
559
560
|
// synthesized answer still reaches message_end and the receipt.
|
|
560
561
|
if (isWorkerToolCallCapSynthesisReason(event.reason)) {
|
|
561
|
-
emit({ type: "
|
|
562
|
+
emit({ type: "clio_coder_run_outcome", payload: { outcomeCode: "worker_tool_call_cap_exhausted" } });
|
|
562
563
|
if (workerBoundFailure === null) {
|
|
563
564
|
workerBoundFailure = event.reason;
|
|
564
565
|
process.stderr.write(`[worker] ${event.reason}\n`);
|
|
@@ -571,7 +572,7 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
571
572
|
// receipt diagnostic.
|
|
572
573
|
if (isWorkerToolCallCapExceededReason(event.reason) || isLoopGuardSynthesisBackstopReason(event.reason)) {
|
|
573
574
|
emit({
|
|
574
|
-
type: "
|
|
575
|
+
type: "clio_coder_run_outcome",
|
|
575
576
|
payload: {
|
|
576
577
|
outcomeCode: isLoopGuardSynthesisBackstopReason(event.reason)
|
|
577
578
|
? "loop_guard_tools_disabled_exhausted"
|
|
@@ -717,7 +718,7 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
717
718
|
for (const message of repair) agent.followUp(message as unknown as AgentMessage);
|
|
718
719
|
} else if (workerBoundFailure === null) {
|
|
719
720
|
workerBoundFailure = `result contract failed after ${RESULT_CONTRACT_REPAIR_LIMIT} bounded repair rounds: ${violation}`;
|
|
720
|
-
emit({ type: "
|
|
721
|
+
emit({ type: "clio_coder_run_outcome", payload: { outcomeCode: "result_contract_exhausted" } });
|
|
721
722
|
process.stderr.write(`[worker] ${workerBoundFailure}\n`);
|
|
722
723
|
}
|
|
723
724
|
}
|
|
@@ -802,7 +803,7 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
802
803
|
answeredEscalations.set(active.callKey, { decision, requestId });
|
|
803
804
|
if (decision === "approve") {
|
|
804
805
|
emit({
|
|
805
|
-
type: "
|
|
806
|
+
type: "clio_coder_permission_resolved",
|
|
806
807
|
payload: {
|
|
807
808
|
tool: active.tool,
|
|
808
809
|
actionClass: active.actionClass,
|
|
@@ -831,7 +832,7 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
831
832
|
? `permission required for ${active.tool} (${active.actionClass}); ${denialContext} and workers fallback=fail ends this run`
|
|
832
833
|
: `permission denied by ${source === "timeout" ? "escalation timeout fallback" : "operator"}: ${active.tool} requires ${active.actionClass} confirmation`;
|
|
833
834
|
emit({
|
|
834
|
-
type: "
|
|
835
|
+
type: "clio_coder_permission_resolved",
|
|
835
836
|
payload: {
|
|
836
837
|
tool: active.tool,
|
|
837
838
|
actionClass: active.actionClass,
|
|
@@ -857,7 +858,7 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
857
858
|
const active = activeEscalation;
|
|
858
859
|
if (!active) return;
|
|
859
860
|
emit({
|
|
860
|
-
type: "
|
|
861
|
+
type: "clio_coder_permission_resolved",
|
|
861
862
|
payload: {
|
|
862
863
|
tool: active.tool,
|
|
863
864
|
actionClass: active.actionClass,
|
|
@@ -882,7 +883,7 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
882
883
|
? `operator approved an identical ${call.tool} call earlier in this run (request ${remembered.requestId}); the answer stands without a new prompt`
|
|
883
884
|
: `permission denied by operator: an identical ${call.tool} call was already denied earlier in this run (request ${remembered.requestId}); the answer stands, so do not repeat this call`;
|
|
884
885
|
emit({
|
|
885
|
-
type: "
|
|
886
|
+
type: "clio_coder_permission_resolved",
|
|
886
887
|
payload: {
|
|
887
888
|
tool: call.tool,
|
|
888
889
|
actionClass,
|
|
@@ -916,7 +917,7 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
916
917
|
// as type-and-size summaries, and the args stay inside the worker.
|
|
917
918
|
const target = describeCallTarget(call.tool, call.args);
|
|
918
919
|
emit({
|
|
919
|
-
type: "
|
|
920
|
+
type: "clio_coder_permission_escalated",
|
|
920
921
|
payload: {
|
|
921
922
|
requestId,
|
|
922
923
|
tool: call.tool,
|
|
@@ -937,7 +938,7 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
937
938
|
}
|
|
938
939
|
const reason = onPermission === "fail" ? failReason(call.tool, actionClass) : denyReason(call.tool, actionClass);
|
|
939
940
|
emit({
|
|
940
|
-
type: "
|
|
941
|
+
type: "clio_coder_permission_resolved",
|
|
941
942
|
payload: {
|
|
942
943
|
tool: call.tool,
|
|
943
944
|
actionClass,
|