@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
|
@@ -95,7 +95,7 @@ export async function loadDomains(
|
|
|
95
95
|
// render the failure, so the structured line must land first.
|
|
96
96
|
const message = error instanceof Error ? error.message : String(error);
|
|
97
97
|
(options.diagnostic ?? ((text: string) => process.stderr.write(text)))(
|
|
98
|
-
`[clio:domain] load failed: ${name}: ${message}\n`,
|
|
98
|
+
`[clio-coder:domain] load failed: ${name}: ${message}\n`,
|
|
99
99
|
);
|
|
100
100
|
throw new DomainLoadError(name, error);
|
|
101
101
|
}
|
|
@@ -111,15 +111,17 @@ export async function loadDomains(
|
|
|
111
111
|
const t0 = debug ? process.hrtime.bigint() : 0n;
|
|
112
112
|
const completed = await runWithBudget(stopFn, budgetMs, (err) => {
|
|
113
113
|
const message = err instanceof Error ? err.message : String(err);
|
|
114
|
-
writeShutdownNotice(`[clio:domain-loader] ${name}.stop() failed: ${message}`);
|
|
114
|
+
writeShutdownNotice(`[clio-coder:domain-loader] ${name}.stop() failed: ${message}`);
|
|
115
115
|
if (debug && err instanceof Error && err.stack) process.stderr.write(`${err.stack}\n`);
|
|
116
116
|
});
|
|
117
117
|
if (!completed) {
|
|
118
|
-
writeShutdownNotice(`[clio:domain-loader] ${name}.stop() exceeded ${budgetMs}ms budget; abandoning`);
|
|
118
|
+
writeShutdownNotice(`[clio-coder:domain-loader] ${name}.stop() exceeded ${budgetMs}ms budget; abandoning`);
|
|
119
119
|
}
|
|
120
120
|
if (debug) {
|
|
121
121
|
const dt = Number(process.hrtime.bigint() - t0) / 1e6;
|
|
122
|
-
process.stderr.write(
|
|
122
|
+
process.stderr.write(
|
|
123
|
+
`[clio-coder:shutdown] domain.${name} ${dt.toFixed(1)}ms${completed ? "" : " (timed out)"}\n`,
|
|
124
|
+
);
|
|
123
125
|
}
|
|
124
126
|
}
|
|
125
127
|
};
|
package/src/core/event-bus.ts
CHANGED
|
@@ -40,7 +40,7 @@ type StoredListener = (payload: never) => void | Promise<void>;
|
|
|
40
40
|
|
|
41
41
|
function reportListenerError(channel: string, error: unknown): void {
|
|
42
42
|
const message = error instanceof Error ? (error.stack ?? error.message) : String(error);
|
|
43
|
-
console.error(`[clio:event-bus] Listener crashed on ${channel}: ${message}`);
|
|
43
|
+
console.error(`[clio-coder:event-bus] Listener crashed on ${channel}: ${message}`);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
export function createSafeEventBus(): SafeEventBus {
|
|
@@ -25,9 +25,70 @@ export interface FileReferenceOptions {
|
|
|
25
25
|
autoResizeImages?: boolean;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
const FILE_REF = /(^|\s)@(\S+)/g;
|
|
29
28
|
const DEFAULT_IMAGE_MAX_BASE64_BYTES = 4.5 * 1024 * 1024;
|
|
30
29
|
|
|
30
|
+
interface InlineFileReference {
|
|
31
|
+
start: number;
|
|
32
|
+
end: number;
|
|
33
|
+
raw: string;
|
|
34
|
+
fileArg: string;
|
|
35
|
+
quoted: boolean;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function decodeQuotedFileArg(input: string, start: number, quote: '"' | "'"): { value: string; end: number } | null {
|
|
39
|
+
let value = "";
|
|
40
|
+
let escaped = false;
|
|
41
|
+
for (let index = start; index < input.length; index += 1) {
|
|
42
|
+
const character = input[index] ?? "";
|
|
43
|
+
if (escaped) {
|
|
44
|
+
value += character;
|
|
45
|
+
escaped = false;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (character === "\\") {
|
|
49
|
+
escaped = true;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (character === quote) return { value, end: index + 1 };
|
|
53
|
+
value += character;
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** Scanner shared by sync and async expansion; quoted references may contain spaces. */
|
|
59
|
+
function inlineFileReferences(input: string): InlineFileReference[] {
|
|
60
|
+
const references: InlineFileReference[] = [];
|
|
61
|
+
for (let start = 0; start < input.length; start += 1) {
|
|
62
|
+
if (input[start] !== "@" || (start > 0 && !/\s/u.test(input[start - 1] ?? ""))) continue;
|
|
63
|
+
const next = input[start + 1];
|
|
64
|
+
if (next === '"' || next === "'") {
|
|
65
|
+
const decoded = decodeQuotedFileArg(input, start + 2, next);
|
|
66
|
+
if (!decoded || decoded.value.length === 0) continue;
|
|
67
|
+
references.push({
|
|
68
|
+
start,
|
|
69
|
+
end: decoded.end,
|
|
70
|
+
raw: input.slice(start, decoded.end),
|
|
71
|
+
fileArg: decoded.value,
|
|
72
|
+
quoted: true,
|
|
73
|
+
});
|
|
74
|
+
start = decoded.end - 1;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
let end = start + 1;
|
|
78
|
+
while (end < input.length && !/\s/u.test(input[end] ?? "")) end += 1;
|
|
79
|
+
if (end === start + 1) continue;
|
|
80
|
+
references.push({
|
|
81
|
+
start,
|
|
82
|
+
end,
|
|
83
|
+
raw: input.slice(start, end),
|
|
84
|
+
fileArg: input.slice(start + 1, end),
|
|
85
|
+
quoted: false,
|
|
86
|
+
});
|
|
87
|
+
start = end - 1;
|
|
88
|
+
}
|
|
89
|
+
return references;
|
|
90
|
+
}
|
|
91
|
+
|
|
31
92
|
function renderTextFile(filePath: string, content: string): string {
|
|
32
93
|
return `<file name="${filePath}">\n${content}\n</file>\n`;
|
|
33
94
|
}
|
|
@@ -64,42 +125,6 @@ function detectSupportedImageMimeType(bytes: Buffer): string | null {
|
|
|
64
125
|
return null;
|
|
65
126
|
}
|
|
66
127
|
|
|
67
|
-
function readFileReference(fileArg: string, options: FileReferenceOptions): FileReferenceResult {
|
|
68
|
-
const filePath = expandConfigPath(fileArg, options.cwd === undefined ? undefined : { cwd: options.cwd });
|
|
69
|
-
if (!existsSync(filePath)) {
|
|
70
|
-
if (options.missing === "leave") return result(`@${fileArg}`);
|
|
71
|
-
return result("", [{ type: "error", message: `file not found: ${filePath}`, path: filePath }]);
|
|
72
|
-
}
|
|
73
|
-
let stat: ReturnType<typeof statSync>;
|
|
74
|
-
try {
|
|
75
|
-
stat = statSync(filePath);
|
|
76
|
-
} catch (err) {
|
|
77
|
-
const reason = err instanceof Error ? err.message : String(err);
|
|
78
|
-
return result("", [{ type: "error", message: `file could not be stat'ed: ${reason}`, path: filePath }]);
|
|
79
|
-
}
|
|
80
|
-
if (!stat.isFile()) {
|
|
81
|
-
return result("", [{ type: "error", message: `not a file: ${filePath}`, path: filePath }]);
|
|
82
|
-
}
|
|
83
|
-
if (stat.size === 0) return result("", [], [], [filePath]);
|
|
84
|
-
try {
|
|
85
|
-
const bytes = readFileSync(filePath);
|
|
86
|
-
const imageMimeType = detectSupportedImageMimeType(bytes);
|
|
87
|
-
if (imageMimeType) {
|
|
88
|
-
if (options.includeImages !== true) return result(`@${fileArg}`);
|
|
89
|
-
return result(
|
|
90
|
-
renderImageFile(filePath),
|
|
91
|
-
[],
|
|
92
|
-
[{ type: "image", mimeType: imageMimeType, data: bytes.toString("base64") }],
|
|
93
|
-
[filePath],
|
|
94
|
-
);
|
|
95
|
-
}
|
|
96
|
-
return result(renderTextFile(filePath, bytes.toString("utf8")), [], [], [filePath]);
|
|
97
|
-
} catch (err) {
|
|
98
|
-
const reason = err instanceof Error ? err.message : String(err);
|
|
99
|
-
return result("", [{ type: "error", message: `file could not be read: ${reason}`, path: filePath }]);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
128
|
async function readFileReferenceAsync(fileArg: string, options: FileReferenceOptions): Promise<FileReferenceResult> {
|
|
104
129
|
const filePath = expandConfigPath(fileArg, options.cwd === undefined ? undefined : { cwd: options.cwd });
|
|
105
130
|
if (!existsSync(filePath)) {
|
|
@@ -191,39 +216,6 @@ function splitTrailingPunctuation(token: string): { fileArg: string; suffix: str
|
|
|
191
216
|
return { fileArg: candidate, suffix };
|
|
192
217
|
}
|
|
193
218
|
|
|
194
|
-
export function expandInlineFileReferences(input: string, options: FileReferenceOptions = {}): FileReferenceResult {
|
|
195
|
-
const diagnostics: FileReferenceDiagnostic[] = [];
|
|
196
|
-
const images: ImageContent[] = [];
|
|
197
|
-
const referencedPaths: string[] = [];
|
|
198
|
-
const text = input.replace(FILE_REF, (match: string, prefix: string, token: string) => {
|
|
199
|
-
const direct = readFileReference(token, {
|
|
200
|
-
...options,
|
|
201
|
-
missing: "leave",
|
|
202
|
-
includeImages: options.includeImages === true,
|
|
203
|
-
});
|
|
204
|
-
if (direct.text !== `@${token}`) {
|
|
205
|
-
diagnostics.push(...direct.diagnostics);
|
|
206
|
-
images.push(...direct.images);
|
|
207
|
-
referencedPaths.push(...direct.referencedPaths);
|
|
208
|
-
return `${prefix}${direct.text}`;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
const { fileArg, suffix } = splitTrailingPunctuation(token);
|
|
212
|
-
if (fileArg === token) return match;
|
|
213
|
-
const stripped = readFileReference(fileArg, {
|
|
214
|
-
...options,
|
|
215
|
-
missing: "leave",
|
|
216
|
-
includeImages: options.includeImages === true,
|
|
217
|
-
});
|
|
218
|
-
if (stripped.text === `@${fileArg}`) return match;
|
|
219
|
-
diagnostics.push(...stripped.diagnostics);
|
|
220
|
-
images.push(...stripped.images);
|
|
221
|
-
referencedPaths.push(...stripped.referencedPaths);
|
|
222
|
-
return `${prefix}${stripped.text}${suffix}`;
|
|
223
|
-
});
|
|
224
|
-
return { text, images, diagnostics, referencedPaths };
|
|
225
|
-
}
|
|
226
|
-
|
|
227
219
|
export async function expandInlineFileReferencesAsync(
|
|
228
220
|
input: string,
|
|
229
221
|
options: FileReferenceOptions = {},
|
|
@@ -233,31 +225,29 @@ export async function expandInlineFileReferencesAsync(
|
|
|
233
225
|
const referencedPaths: string[] = [];
|
|
234
226
|
let text = "";
|
|
235
227
|
let lastIndex = 0;
|
|
236
|
-
for (const
|
|
237
|
-
|
|
238
|
-
const full = match[0] ?? "";
|
|
239
|
-
const prefix = match[1] ?? "";
|
|
240
|
-
const token = match[2] ?? "";
|
|
241
|
-
text += input.slice(lastIndex, index);
|
|
228
|
+
for (const reference of inlineFileReferences(input)) {
|
|
229
|
+
text += input.slice(lastIndex, reference.start);
|
|
242
230
|
|
|
243
|
-
const direct = await readFileReferenceAsync(
|
|
231
|
+
const direct = await readFileReferenceAsync(reference.fileArg, {
|
|
244
232
|
...options,
|
|
245
233
|
missing: "leave",
|
|
246
234
|
includeImages: options.includeImages === true,
|
|
247
235
|
});
|
|
248
|
-
if (direct.text !== `@${
|
|
236
|
+
if (direct.text !== `@${reference.fileArg}`) {
|
|
249
237
|
diagnostics.push(...direct.diagnostics);
|
|
250
238
|
images.push(...direct.images);
|
|
251
239
|
referencedPaths.push(...direct.referencedPaths);
|
|
252
|
-
text +=
|
|
253
|
-
lastIndex =
|
|
240
|
+
text += direct.text;
|
|
241
|
+
lastIndex = reference.end;
|
|
254
242
|
continue;
|
|
255
243
|
}
|
|
256
244
|
|
|
257
|
-
const { fileArg, suffix } =
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
245
|
+
const { fileArg, suffix } = reference.quoted
|
|
246
|
+
? { fileArg: reference.fileArg, suffix: "" }
|
|
247
|
+
: splitTrailingPunctuation(reference.fileArg);
|
|
248
|
+
if (fileArg === reference.fileArg) {
|
|
249
|
+
text += reference.raw;
|
|
250
|
+
lastIndex = reference.end;
|
|
261
251
|
continue;
|
|
262
252
|
}
|
|
263
253
|
|
|
@@ -267,15 +257,15 @@ export async function expandInlineFileReferencesAsync(
|
|
|
267
257
|
includeImages: options.includeImages === true,
|
|
268
258
|
});
|
|
269
259
|
if (stripped.text === `@${fileArg}`) {
|
|
270
|
-
text +=
|
|
271
|
-
lastIndex =
|
|
260
|
+
text += reference.raw;
|
|
261
|
+
lastIndex = reference.end;
|
|
272
262
|
continue;
|
|
273
263
|
}
|
|
274
264
|
diagnostics.push(...stripped.diagnostics);
|
|
275
265
|
images.push(...stripped.images);
|
|
276
266
|
referencedPaths.push(...stripped.referencedPaths);
|
|
277
|
-
text += `${
|
|
278
|
-
lastIndex =
|
|
267
|
+
text += `${stripped.text}${suffix}`;
|
|
268
|
+
lastIndex = reference.end;
|
|
279
269
|
}
|
|
280
270
|
text += input.slice(lastIndex);
|
|
281
271
|
return { text, images, diagnostics, referencedPaths };
|
|
@@ -63,7 +63,7 @@ export interface ManagedCommitAttributionEnvironment {
|
|
|
63
63
|
export function reportCommitAttributionDiagnostic(diagnostic: string | null): void {
|
|
64
64
|
if (diagnostic === null || reportedDiagnostics.has(diagnostic)) return;
|
|
65
65
|
reportedDiagnostics.add(diagnostic);
|
|
66
|
-
process.stderr.write(`[clio:attribution] ${diagnostic}\n`);
|
|
66
|
+
process.stderr.write(`[clio-coder:attribution] ${diagnostic}\n`);
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
export function setGitCommitAttributionEnabled(enabled: boolean): void {
|
|
@@ -74,12 +74,6 @@ export function gitCommitAttributionEnabled(source: NodeJS.ProcessEnv = process.
|
|
|
74
74
|
return source[CLIO_GIT_COMMITS_ENABLED_ENV] !== "0";
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
/** Forget cached repository probes and the installed managed hooks directory. */
|
|
78
|
-
export function resetGitCommitAttributionCachesForTests(): void {
|
|
79
|
-
probeCache.clear();
|
|
80
|
-
installedHooksDirectory = null;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
77
|
function boundedDiagnostic(message: string): string {
|
|
84
78
|
const folded = message.replace(/\s+/gu, " ").trim();
|
|
85
79
|
return folded.length <= DIAGNOSTIC_MAX_CHARS ? folded : `${folded.slice(0, DIAGNOSTIC_MAX_CHARS - 3)}...`;
|
|
@@ -171,7 +165,7 @@ hook_name=$(basename "$0")
|
|
|
171
165
|
base_count=$${CONFIG_BASE_COUNT_ENV}
|
|
172
166
|
case "$base_count" in
|
|
173
167
|
'' | *[!0-9]*)
|
|
174
|
-
printf '%s\\n' '[clio:attribution] invalid managed hook environment' >&2
|
|
168
|
+
printf '%s\\n' '[clio-coder:attribution] invalid managed hook environment' >&2
|
|
175
169
|
exit 0
|
|
176
170
|
;;
|
|
177
171
|
0) unset GIT_CONFIG_COUNT ;;
|
|
@@ -241,7 +235,7 @@ has_trailer() {
|
|
|
241
235
|
append_trailer() {
|
|
242
236
|
if has_trailer "$1"; then return 0; fi
|
|
243
237
|
git interpret-trailers --in-place --if-exists=addIfDifferent --trailer "$1" "$message_file" ||
|
|
244
|
-
printf '%s\\n' '[clio:attribution] git interpret-trailers failed; commit left as written' >&2
|
|
238
|
+
printf '%s\\n' '[clio-coder:attribution] git interpret-trailers failed; commit left as written' >&2
|
|
245
239
|
}
|
|
246
240
|
|
|
247
241
|
if [ "$${ASSISTED_ENV}" = '1' ] || [ "$${AUTHORED_ENV}" = '1' ]; then
|
package/src/core/guardrails.ts
CHANGED
|
@@ -76,6 +76,30 @@ export const GUARDRAIL_ENV_VARS: Readonly<Record<keyof GuardrailValues, string>>
|
|
|
76
76
|
internalDispatchTimeoutMs: "CLIO_CODER_INTERNAL_DISPATCH_TIMEOUT_MS",
|
|
77
77
|
};
|
|
78
78
|
|
|
79
|
+
/** Project canonical v2 settings leaves onto the process-local guardrail registry. */
|
|
80
|
+
export function guardrailValuesFromSettings(settings: {
|
|
81
|
+
safety: {
|
|
82
|
+
limits: {
|
|
83
|
+
chatToolCallsPerTurn: number;
|
|
84
|
+
readBytesPerCall: number;
|
|
85
|
+
observationBytesPerTurn: number;
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
fleet: {
|
|
89
|
+
limits: { toolCallsPerRun: number; internalRunTimeoutMs: number };
|
|
90
|
+
history: { maxRuns: number };
|
|
91
|
+
};
|
|
92
|
+
}): GuardrailValues {
|
|
93
|
+
return {
|
|
94
|
+
turnToolCallBudget: settings.safety.limits.chatToolCallsPerTurn,
|
|
95
|
+
workerToolCallCap: settings.fleet.limits.toolCallsPerRun,
|
|
96
|
+
maxDispatchRuns: settings.fleet.history.maxRuns,
|
|
97
|
+
readMaxBytes: settings.safety.limits.readBytesPerCall,
|
|
98
|
+
observationTurnBudgetBytes: settings.safety.limits.observationBytesPerTurn,
|
|
99
|
+
internalDispatchTimeoutMs: settings.fleet.limits.internalRunTimeoutMs,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
79
103
|
/**
|
|
80
104
|
* Older env spellings that still read. `CLIO_CODER_MAX_RUNS` was the only
|
|
81
105
|
* guardrail whose variable was not the SCREAMING_SNAKE of its key, and CI
|
|
@@ -112,10 +136,6 @@ export function workerSynthesisReserveBlockReason(tool: string, remaining: numbe
|
|
|
112
136
|
);
|
|
113
137
|
}
|
|
114
138
|
|
|
115
|
-
export function isWorkerSynthesisReserveBlockReason(reason: string): boolean {
|
|
116
|
-
return /^workerToolCallReserve: only [1-9]\d* of [1-9]\d* tool calls remain/.test(reason);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
139
|
export function workerToolCallCapExceededReason(cap: number): string {
|
|
120
140
|
return `workerToolCallCap reached (${cap}); abort run`;
|
|
121
141
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Released naming aliases retained for the v0.5 and v0.6 compatibility window.
|
|
3
|
+
* Canonical writers must never call this helper; it exists only at read and
|
|
4
|
+
* protocol boundaries where an older Clio Coder installation can still be the
|
|
5
|
+
* producer.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const warned = new Set<string>();
|
|
9
|
+
|
|
10
|
+
export const LEGACY_NAMING_COMPATIBILITY_RETIREMENT = "v0.7.0";
|
|
11
|
+
|
|
12
|
+
/** Emit one deprecation diagnostic per legacy/canonical pair in this process. */
|
|
13
|
+
export function warnLegacyNaming(legacy: string, canonical: string): void {
|
|
14
|
+
const key = `${legacy}\0${canonical}`;
|
|
15
|
+
if (warned.has(key)) return;
|
|
16
|
+
warned.add(key);
|
|
17
|
+
process.emitWarning(
|
|
18
|
+
`'${legacy}' is a deprecated Clio Coder identifier; use '${canonical}'. ` +
|
|
19
|
+
`Legacy naming compatibility is scheduled for removal in ${LEGACY_NAMING_COMPATIBILITY_RETIREMENT}.`,
|
|
20
|
+
{ code: "CLIO_CODER_LEGACY_NAMING", type: "DeprecationWarning" },
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Prefer a canonical environment variable and temporarily fall back to its released alias. */
|
|
25
|
+
export function readNamingEnvironment(
|
|
26
|
+
environment: NodeJS.ProcessEnv,
|
|
27
|
+
canonical: string,
|
|
28
|
+
legacy: string,
|
|
29
|
+
): string | undefined {
|
|
30
|
+
const current = environment[canonical]?.trim();
|
|
31
|
+
if (current) return current;
|
|
32
|
+
const fallback = environment[legacy]?.trim();
|
|
33
|
+
if (!fallback) return undefined;
|
|
34
|
+
warnLegacyNaming(legacy, canonical);
|
|
35
|
+
return fallback;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Parent-to-child bridge used only during the two-minor compatibility window. */
|
|
39
|
+
export function namingCompatibilityEnvironment(
|
|
40
|
+
canonical: string,
|
|
41
|
+
legacy: string,
|
|
42
|
+
value: string,
|
|
43
|
+
): Record<string, string> {
|
|
44
|
+
return { [canonical]: value, [legacy]: value };
|
|
45
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
const CLIO_CODER_EVENT_SUFFIXES = new Set([
|
|
2
|
+
"permission_escalated",
|
|
3
|
+
"permission_resolved",
|
|
4
|
+
"plan_update",
|
|
5
|
+
"run_outcome",
|
|
6
|
+
"safety_decision",
|
|
7
|
+
"skill_activation",
|
|
8
|
+
"steer_received",
|
|
9
|
+
"tool_activity",
|
|
10
|
+
"tool_finish",
|
|
11
|
+
"tool_start",
|
|
12
|
+
"usage",
|
|
13
|
+
"verification",
|
|
14
|
+
"write_record_downgraded",
|
|
15
|
+
]);
|
|
16
|
+
|
|
17
|
+
/** Canonicalize one released snake-case event id without accepting arbitrary prefixes. */
|
|
18
|
+
export function normalizeClioCoderEventType(type: string): string {
|
|
19
|
+
if (!type.startsWith("clio_") || type.startsWith("clio_coder_")) return type;
|
|
20
|
+
const suffix = type.slice("clio_".length);
|
|
21
|
+
return CLIO_CODER_EVENT_SUFFIXES.has(suffix) ? `clio_coder_${suffix}` : type;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Clone one decoded event only when its top-level discriminator is legacy. */
|
|
25
|
+
export function normalizeClioCoderEventRecord(record: Record<string, unknown>): Record<string, unknown> {
|
|
26
|
+
if (typeof record.type !== "string") return record;
|
|
27
|
+
const type = normalizeClioCoderEventType(record.type);
|
|
28
|
+
return type === record.type ? record : { ...record, type };
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Normalize legacy event discriminators in an in-memory decoded history tree.
|
|
33
|
+
* This never writes the source session/eval/evidence file.
|
|
34
|
+
*/
|
|
35
|
+
export function normalizeClioCoderEventTree(value: unknown): unknown {
|
|
36
|
+
if (Array.isArray(value)) {
|
|
37
|
+
let changed = false;
|
|
38
|
+
const next = value.map((entry) => {
|
|
39
|
+
const normalized = normalizeClioCoderEventTree(entry);
|
|
40
|
+
if (normalized !== entry) changed = true;
|
|
41
|
+
return normalized;
|
|
42
|
+
});
|
|
43
|
+
return changed ? next : value;
|
|
44
|
+
}
|
|
45
|
+
if (typeof value !== "object" || value === null) return value;
|
|
46
|
+
const record = value as Record<string, unknown>;
|
|
47
|
+
let changed = false;
|
|
48
|
+
const next: Record<string, unknown> = {};
|
|
49
|
+
for (const [key, entry] of Object.entries(record)) {
|
|
50
|
+
const normalized = normalizeClioCoderEventTree(entry);
|
|
51
|
+
next[key] = normalized;
|
|
52
|
+
if (normalized !== entry) changed = true;
|
|
53
|
+
}
|
|
54
|
+
if (typeof record.type === "string") {
|
|
55
|
+
const type = normalizeClioCoderEventType(record.type);
|
|
56
|
+
if (type !== record.type) {
|
|
57
|
+
next.type = type;
|
|
58
|
+
changed = true;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return changed ? next : value;
|
|
62
|
+
}
|
|
@@ -14,7 +14,7 @@ import { join } from "node:path";
|
|
|
14
14
|
import { safeResourceWrite } from "./safe-resource-write.js";
|
|
15
15
|
import { clioStateDir, stateRootRemoved } from "./xdg.js";
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
function recentModelsPath(): string {
|
|
18
18
|
return join(clioStateDir(), "recent-models.json");
|
|
19
19
|
}
|
|
20
20
|
|
|
@@ -83,9 +83,3 @@ export function rememberRecentModel(ref: string, limit: number): string[] {
|
|
|
83
83
|
}
|
|
84
84
|
return next;
|
|
85
85
|
}
|
|
86
|
-
|
|
87
|
-
/** Test hook: clear the in-process cache after CLIO_* dir overrides change. */
|
|
88
|
-
export function resetRecentModelsCache(): void {
|
|
89
|
-
cache = null;
|
|
90
|
-
cachePath = null;
|
|
91
|
-
}
|
|
@@ -43,14 +43,10 @@ export function protectedResidencyModels(settings: ClioSettings): ProtectedModel
|
|
|
43
43
|
if (!trimmed || byId.has(trimmed)) return;
|
|
44
44
|
byId.set(trimmed, role);
|
|
45
45
|
};
|
|
46
|
-
add(settings.
|
|
47
|
-
add(settings.
|
|
48
|
-
add(settings.
|
|
49
|
-
for (const profile of Object.values(settings.
|
|
46
|
+
add(settings.chat.model, "chat");
|
|
47
|
+
add(settings.context.memory.model, "memory");
|
|
48
|
+
add(settings.fleet.default.model, "worker");
|
|
49
|
+
for (const profile of Object.values(settings.fleet.profiles ?? {})) add(profile.model, "worker");
|
|
50
50
|
for (const target of settings.targets) add(target.defaultModel, "target-default");
|
|
51
51
|
return [...byId].map(([modelId, role]) => ({ modelId, role }));
|
|
52
52
|
}
|
|
53
|
-
|
|
54
|
-
export function protectedResidencyModelIds(settings: ClioSettings): string[] {
|
|
55
|
-
return protectedResidencyModels(settings).map((ref) => ref.modelId);
|
|
56
|
-
}
|
|
@@ -50,7 +50,7 @@ function warnStaticCommand(config: string, options?: ResolveConfigValueOptions):
|
|
|
50
50
|
});
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
function expandConfigValue(value: string, options?: ResolveConfigValueOptions): string {
|
|
54
54
|
const sourceEnv = env(options);
|
|
55
55
|
return value.replace(/\$(\w+)|\$\{([^}]+)\}/g, (match, bare: string | undefined, braced: string | undefined) => {
|
|
56
56
|
const key = bare ?? braced;
|
|
@@ -101,20 +101,6 @@ export function responseModelIdObservationFromRecord(
|
|
|
101
101
|
return { state: "legacy-difference-only", differingModelId: nonEmptyString(record.responseModel) };
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
/** Human vocabulary shared by usage, footer, and receipt projections. */
|
|
105
|
-
export function responseModelIdObservationLabel(observation: ResponseModelIdObservation): string {
|
|
106
|
-
switch (observation.state) {
|
|
107
|
-
case "reported":
|
|
108
|
-
return "reported";
|
|
109
|
-
case "not-reported":
|
|
110
|
-
return "not reported";
|
|
111
|
-
case "not-observed":
|
|
112
|
-
return "not observed";
|
|
113
|
-
case "legacy-difference-only":
|
|
114
|
-
return "legacy difference-only";
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
104
|
/** Model id used for accounting without claiming more than the observation supports. */
|
|
119
105
|
export function attributedModelId(
|
|
120
106
|
observation: ResponseModelIdObservation,
|