@iowarp/clio-coder 0.3.9 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +92 -0
- package/NOTICE +33 -0
- package/README.md +121 -16
- package/dist/{acp-7LOELQFP.js → acp-ZILU3AUO.js} +19 -18
- package/dist/{agents-FIBG2SHA.js → agents-HYWGBGQR.js} +53 -39
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-OI4LIH2I.js → auth-N3QT7CBO.js} +24 -21
- package/dist/{builtins-AD25UL3C.js → builtins-UJLMOVOV.js} +6 -6
- package/dist/{chunk-I4HZDVNP.js → chunk-2LEAKD4C.js} +2 -3
- package/dist/{chunk-465CC7FK.js → chunk-2NM363SV.js} +60 -64
- package/dist/{chunk-4H6ULJ3H.js → chunk-2VG7KLYV.js} +1046 -1370
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/{chunk-NZU6YDNV.js → chunk-3I5NY75V.js} +5 -5
- package/dist/{chunk-47CMYGET.js → chunk-3QSOM6PA.js} +2 -2
- package/dist/chunk-42FMPA75.js +101 -0
- package/dist/{chunk-HAY4ZE2P.js → chunk-5PSMVOLM.js} +2 -2
- package/dist/{chunk-IHKBWSXF.js → chunk-5QIAJV2D.js} +3 -3
- package/dist/chunk-5YHDIDBP.js +97 -0
- package/dist/chunk-6CCS4G3W.js +1529 -0
- package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
- package/dist/{chunk-BVDVID7E.js → chunk-6FN3E6KX.js} +6 -6
- package/dist/{chunk-DG4M6ZUE.js → chunk-6HMJX2VU.js} +59 -59
- package/dist/{chunk-3MRC2YSQ.js → chunk-6I5ILFOF.js} +3 -2
- package/dist/chunk-6NJQITNH.js +1412 -0
- package/dist/chunk-6VC4OV3Z.js +365 -0
- package/dist/{chunk-LU7P4LHA.js → chunk-72GZI5EV.js} +2 -2
- package/dist/{chunk-5T7RBWN2.js → chunk-74YWRRU5.js} +9 -8
- package/dist/{chunk-VPTUJU4P.js → chunk-7EPLI7VL.js} +2 -2
- package/dist/{chunk-CA42X6KT.js → chunk-7OBGU7UB.js} +7 -7
- package/dist/{chunk-56KB5IJP.js → chunk-7PWAODYW.js} +3 -3
- package/dist/chunk-7RY5VZPH.js +573 -0
- package/dist/{chunk-OEDBCISO.js → chunk-ABLSQ6JX.js} +3 -3
- package/dist/{chunk-5HFBWUMU.js → chunk-AFKWHWXF.js} +13 -23
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-WXCJ7VME.js → chunk-AKB4GYDL.js} +7 -7
- package/dist/chunk-AP73CFDC.js +308 -0
- package/dist/{chunk-4LJX2PUC.js → chunk-BBTJOK6Y.js} +5 -5
- package/dist/{chunk-QQ7EKM72.js → chunk-BDPT6GTK.js} +13 -61
- package/dist/chunk-BJGUKIG4.js +302 -0
- package/dist/chunk-BMS5RKQY.js +27 -0
- package/dist/{chunk-TD7UE2L5.js → chunk-BTGG6BG2.js} +81 -40
- package/dist/chunk-BTK3SSSK.js +67 -0
- package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
- package/dist/chunk-BWW4HLO4.js +301 -0
- package/dist/{chunk-BNAZZHFG.js → chunk-BYP5D4HI.js} +1 -1
- package/dist/{chunk-HJB5IUKP.js → chunk-C537JADH.js} +18 -18
- package/dist/{chunk-774ILSRL.js → chunk-CDNVLKUX.js} +5 -4
- package/dist/{chunk-HPCTNZM2.js → chunk-CTJ4RNAA.js} +4 -4
- package/dist/{chunk-AEYBF3TB.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/chunk-D4CJV46V.js +462 -0
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-5PVQ4SRS.js → chunk-E67WX76H.js} +10 -126
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-EIMVLWB3.js +1842 -0
- package/dist/{chunk-AMKHQW3C.js → chunk-FEFIFZTL.js} +3 -3
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-3DUR4WUA.js → chunk-FYUN5KZ3.js} +25 -25
- package/dist/{chunk-MV3K5QF2.js → chunk-GCSMB2KY.js} +2 -2
- package/dist/chunk-GIZNH63R.js +40 -0
- package/dist/chunk-GPPB3JBE.js +688 -0
- package/dist/{chunk-B5XRQOLB.js → chunk-GVQJ5CCZ.js} +17 -11
- package/dist/chunk-HHV2GANA.js +88 -0
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-RKRLDWD3.js → chunk-HLW2MRKE.js} +1 -1
- package/dist/chunk-HRQMFLJP.js +75 -0
- package/dist/{chunk-AD7Y7STJ.js → chunk-HUAS7ITX.js} +107 -97
- package/dist/{chunk-O6I4CIEU.js → chunk-I66EAJFY.js} +6 -6
- package/dist/{chunk-S4COXYBG.js → chunk-IG7BCQBA.js} +129 -106
- package/dist/{chunk-N3PBVRTZ.js → chunk-IXJT6DCX.js} +9 -7
- package/dist/chunk-J4HBWF6Y.js +2635 -0
- package/dist/chunk-J5LZHVIT.js +284 -0
- package/dist/{chunk-GAYUJ7LE.js → chunk-JA5QWE4Z.js} +544 -227
- package/dist/{chunk-B5CSFE7B.js → chunk-JIEGK6UF.js} +6 -174
- package/dist/{chunk-VKBMFOYV.js → chunk-JZWT5J3Y.js} +23 -27
- package/dist/chunk-K6BF4U2H.js +1785 -0
- package/dist/{chunk-CGKSTWHD.js → chunk-K6BSR66V.js} +2 -1
- package/dist/{chunk-YSEHGPCT.js → chunk-MA3H6DM5.js} +6 -6
- package/dist/{chunk-EBOC7MT3.js → chunk-MOPSG2X7.js} +9 -9
- package/dist/{chunk-KV2AOLDF.js → chunk-MQXIVJ35.js} +18 -29
- package/dist/{chunk-P3JGPQFL.js → chunk-N5UK64DP.js} +4 -4
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/chunk-NEKRRTYW.js +56 -0
- package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-T3Z6VAAF.js → chunk-OJTRZGR3.js} +53 -92
- package/dist/{chunk-5DQRIYDZ.js → chunk-PBP4B7XR.js} +3 -3
- package/dist/{chunk-NQ6UCCOD.js → chunk-PJJ6MY27.js} +8 -8
- package/dist/chunk-PMZCIOCJ.js +25 -0
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-7C6RYZGQ.js → chunk-PVAMAVBB.js} +5 -4
- package/dist/chunk-QDC3K2U3.js +262 -0
- package/dist/{chunk-JEQQR47K.js → chunk-QKIFBZKT.js} +173 -14
- package/dist/{chunk-R7LNVMCS.js → chunk-QMXC4JB7.js} +70 -78
- package/dist/chunk-QSNYB6ZV.js +195 -0
- package/dist/chunk-QTFGO774.js +644 -0
- package/dist/{chunk-ODFEOB4F.js → chunk-R23Z6K6I.js} +27 -9
- package/dist/{chunk-3UUY7R3Z.js → chunk-R32CLGZ6.js} +14 -14
- package/dist/chunk-R346GLFC.js +31 -0
- package/dist/chunk-RKSR6VSF.js +132 -0
- package/dist/{chunk-N5XKWMDW.js → chunk-SCYB3HA4.js} +73 -27
- package/dist/{chunk-PZ4I4JE2.js → chunk-SINK3QR6.js} +135 -125
- package/dist/{chunk-5QKCQQ3E.js → chunk-SUW5DORT.js} +2 -2
- package/dist/chunk-T56WDKA5.js +183 -0
- package/dist/{chunk-ECUO3KDP.js → chunk-TD3PGPQA.js} +87 -26
- package/dist/{chunk-HKO36JWF.js → chunk-THYWACCR.js} +31 -3
- package/dist/{chunk-LXPJXFM5.js → chunk-TVH4ONAM.js} +18 -12
- package/dist/chunk-TVHHYFHE.js +255 -0
- package/dist/chunk-U2WB7TZS.js +271 -0
- package/dist/{chunk-NNNWO6F2.js → chunk-UAPGZHYC.js} +237 -33
- package/dist/{chunk-MIX5N5AC.js → chunk-UEDMSP56.js} +415 -160
- package/dist/{chunk-WIE7ZOSW.js → chunk-UXN6JT4W.js} +3 -3
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-MV2VUEJC.js → chunk-VEGN6WIQ.js} +2 -2
- package/dist/chunk-VKFQTNDV.js +66 -0
- package/dist/{chunk-FALJGAWU.js → chunk-VKRH2TCS.js} +2 -2
- package/dist/{chunk-A2NJGIB3.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-XK56QHLX.js → chunk-VPKWYKEY.js} +19 -5
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-EQ63NRB7.js → chunk-WNP7O5WZ.js} +3 -3
- package/dist/chunk-WR6U3OVP.js +45 -0
- package/dist/{chunk-TEO2TLVN.js → chunk-XKA2ICR3.js} +1051 -1196
- package/dist/{chunk-3V5AYSEQ.js → chunk-Y45G3AXC.js} +72 -65
- package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
- package/dist/chunk-YAKGTXEV.js +17 -0
- package/dist/{chunk-ZI647VB5.js → chunk-YPI3QQCF.js} +2 -2
- package/dist/{chunk-YW7UVM5V.js → chunk-ZAZB4JMW.js} +55 -11
- package/dist/{chunk-HCBCAYZU.js → chunk-ZJLUDYFY.js} +11 -11
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-IFBNV6H6.js → chunk-ZW55JB7N.js} +3 -3
- package/dist/cli/index.js +48 -37
- package/dist/clio-IT3G3VQH.js +25 -0
- package/dist/{code-nav-LMW275PA.js → code-nav-RK6S7F6E.js} +8 -8
- package/dist/codewiki/build-worker.js +1 -1
- package/dist/{compile-cache-CVJMMODC.js → compile-cache-OQAVB7Y5.js} +3 -5
- package/dist/{components-ZFA3SAER.js → components-UBWCQSRW.js} +6 -6
- package/dist/{config-RXS5T3JT.js → config-3QZRWZJF.js} +73 -61
- package/dist/configure-FL7Y3KJF.js +54 -0
- package/dist/{context-MVOORGMF.js → context-5HE7ODYK.js} +61 -49
- package/dist/{context-I3BTOTCS.js → context-KYQFRVDC.js} +11 -11
- package/dist/{context-PALKKQYL.js → context-XNHL75JV.js} +43 -28
- package/dist/{context-clear-N2WOYZ2K.js → context-clear-N545L53A.js} +60 -48
- package/dist/{context-working-set-MIEVECVZ.js → context-working-set-QHKXSV2F.js} +15 -13
- package/dist/{dispatch-runner-VVA4SRRH.js → dispatch-runner-RGIE5PCT.js} +109 -72
- package/dist/{docs-7LQ23DLM.js → docs-5NAF6AU7.js} +7 -13
- package/dist/doctor-ZGPEGHIP.js +772 -0
- package/dist/{eval-IJ5VEZDJ.js → eval-GXLL44RD.js} +106 -86
- package/dist/eval-inventory-HBWSWQOK.js +315 -0
- package/dist/{evidence-L5APPXNV.js → evidence-HWLBRH3Q.js} +209 -51
- package/dist/{evolve-RGNKFJ52.js → evolve-FTZBMNVW.js} +57 -45
- package/dist/{extensions-7WYWUX5A.js → extensions-VHRBEID7.js} +7 -7
- package/dist/{fleet-6CNVBZZP.js → fleet-CKZHJWZJ.js} +215 -114
- package/dist/{fleet-commands-L2SXSYEI.js → fleet-commands-EXDXBMV6.js} +13 -12
- package/dist/fleet-decisions-OTHB6KRL.js +157 -0
- package/dist/{fleet-graph-2J3OOIPO.js → fleet-graph-YTEZUCUT.js} +20 -17
- package/dist/fleet-inspect-SS6YMDCK.js +445 -0
- package/dist/{fleet-preflight-CZRJ4JP5.js → fleet-preflight-PBY4VYOM.js} +6 -9
- package/dist/{fleet-validate-C5RI6DP7.js → fleet-validate-KMEM5L3S.js} +25 -20
- package/dist/fleet-verify-QD5M7E7Q.js +178 -0
- package/dist/fleet-view-WAMJYNDT.js +94 -0
- package/dist/{init-VBN2ACVA.js → init-5XQRBOFV.js} +79 -66
- package/dist/install-NKNG7KD4.js +13 -0
- package/dist/interop-34TVO25M.js +116 -0
- package/dist/{library-JHGUMLY2.js → library-3QY6KF57.js} +25 -21
- package/dist/{memory-K4OQIYWG.js → memory-L4UTIIIW.js} +59 -47
- package/dist/{models-2NCZUWDD.js → models-ZVX3QOWE.js} +47 -37
- package/dist/{monitor-MMVTJABD.js → monitor-CEKVSYTS.js} +67 -57
- package/dist/{orchestrator-ZKBPCHW6.js → orchestrator-77BAP6BC.js} +7633 -7699
- package/dist/panes-7STHOAUJ.js +103 -0
- package/dist/panes-SHAUIRXY.js +60 -0
- package/dist/{paths-DBXMZMDU.js → paths-L7LGY6RN.js} +6 -6
- package/dist/{reset-DD5JGOY3.js → reset-EOLM7GVE.js} +15 -14
- package/dist/resources-74GKTLSF.js +115 -0
- package/dist/{run-QEGNX7FL.js → run-HBAUJNNZ.js} +139 -98
- package/dist/{share-JKD3BQMW.js → share-G3APVLVP.js} +25 -21
- package/dist/{skills-LMQIKDOZ.js → skills-35HHUKCR.js} +37 -27
- package/dist/{skills-eval-I7X2774U.js → skills-eval-QN4HSHDC.js} +80 -73
- package/dist/skills-inventory-J357J34F.js +129 -0
- package/dist/slash-commands-JZZCQA32.js +79 -0
- package/dist/{steer-CF5TDANS.js → steer-XAVHJM22.js} +4 -4
- package/dist/{support-I7LOJLIF.js → support-U7QOWY26.js} +7 -7
- package/dist/{targets-RUSR6B5Z.js → targets-DSM6CY3M.js} +67 -59
- package/dist/{terminal-lease-QYVORFR4.js → terminal-lease-JOPFUVEM.js} +15 -10
- package/dist/tools-MKNWVPBH.js +29 -0
- package/dist/{trace-ODOQIVIW.js → trace-ECQ7TIYZ.js} +194 -7
- package/dist/tui-primitives-K5PASC3O.js +17 -0
- package/dist/{uninstall-ZJF5H5ZN.js → uninstall-N34PCTGJ.js} +6 -8
- package/dist/{upgrade-XANW3FXB.js → upgrade-H7TOM7YL.js} +37 -62
- package/dist/{usage-4H7ZRXQT.js → usage-X52N3IDJ.js} +70 -59
- package/dist/{verifiers-UZXNBZEB.js → verifiers-EJTVVSMA.js} +174 -14
- package/dist/{verify-BVKWTNDL.js → verify-YJL6XET2.js} +12 -11
- package/dist/{web-fetch-2YHJ3KTG.js → web-fetch-MPIFL3LL.js} +3 -4
- package/dist/{wiki-generate-MY7WV2QI.js → wiki-generate-4NDZTQ4B.js} +86 -75
- package/dist/with-panes-OBOBFIIR.js +818 -0
- package/dist/worker/entry.js +131 -91
- package/docs/README.md +3 -2
- package/docs/acp.md +25 -4
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +2 -2
- package/docs/artifact-versions.md +4 -1
- package/docs/built-in-agents.md +40 -32
- package/docs/capacity-and-scheduling.md +43 -5
- package/docs/commands-and-modes.md +39 -4
- package/docs/config-knobs-audit.md +3 -0
- package/docs/configuration-and-targets.md +138 -167
- package/docs/context-engine.md +1 -1
- package/docs/development-pipeline.md +19 -0
- package/docs/dispatch-typed-intent.md +385 -0
- package/docs/documentation-coverage.md +2 -2
- package/docs/documentation-guide.md +1 -1
- package/docs/environment-variables.md +3 -1
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +1 -1
- package/docs/evidence-and-memory.md +2 -2
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +3 -1
- package/docs/extensions-and-sharing.md +25 -1
- package/docs/fleet-demo-runbook.md +6 -3
- package/docs/fleet-dispatch.md +30 -7
- package/docs/installation-and-lifecycle.md +16 -3
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +10 -1
- package/docs/observability.md +3 -3
- package/docs/proactive-memory.md +1 -1
- package/docs/prompt-envelope-and-tools.md +1 -1
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +164 -177
- package/docs/safety-model.md +2 -2
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +1 -1
- package/docs/skills-marketplace.md +1 -1
- package/docs/tool-usage.md +18 -8
- package/docs/trace-store.md +16 -11
- package/docs/troubleshooting.md +2 -2
- package/docs/tui-design.md +1 -1
- package/docs/worker-dispatch-mechanics.md +1 -1
- package/evals/README.md +5 -0
- package/evals/behavioral-corpus-grader.mjs +103 -0
- package/evals/behavioral-machinery-baseline.json +2276 -0
- package/evals/behavioral-machinery-driver.ts +250 -0
- package/evals/behavioral-machinery-support.ts +253 -0
- package/evals/behavioral-machinery.yaml +614 -0
- package/evals/behavioral-model-negative-control.yaml +68 -0
- package/evals/behavioral-model.yaml +216 -0
- package/evals/fixtures/behavioral-facts.txt +3 -0
- package/evals/fixtures/behavioral-main.ts +7 -0
- package/evals/fixtures/decoy/note.txt +2 -0
- package/evals/fixtures/private/credentials.txt +1 -0
- package/evals/tracked-metrics-baseline.yaml +229 -0
- package/evals/tracked-metrics-grader.mjs +129 -0
- package/package.json +8 -16
- package/skills/README.md +6 -6
- package/skills/coding/ast-grep/SKILL.md +8 -2
- package/skills/coding/coding-standards/SKILL.md +8 -2
- package/skills/coding/prototype/SKILL.md +8 -2
- package/skills/coding/tdd/SKILL.md +8 -2
- package/skills/context/context-handoff/SKILL.md +12 -3
- package/skills/context/context-handoff/evals.md +3 -3
- package/skills/context/context-prime/SKILL.md +8 -2
- package/skills/context/context-prime/evals.md +2 -2
- package/skills/git/file-ticket/SKILL.md +9 -4
- package/skills/git/file-ticket/evals.md +2 -2
- package/skills/git/fix-issue/SKILL.md +12 -5
- package/skills/git/fix-issue/evals.md +4 -4
- package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
- package/skills/git/resolve-merge-conflicts/evals.md +2 -2
- package/skills/git/ship/SKILL.md +9 -3
- package/skills/git/ship/evals.md +4 -4
- package/skills/git/worktree-create/SKILL.md +7 -2
- package/skills/git/worktree-create/evals.md +6 -6
- package/skills/git/worktree-merge/SKILL.md +7 -2
- package/skills/git/worktree-merge/evals.md +6 -6
- package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
- package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
- package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
- package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
- package/skills/meta/credentials/SKILL.md +9 -2
- package/skills/meta/find-skills/SKILL.md +8 -2
- package/skills/meta/herdr/SKILL.md +8 -2
- package/skills/meta/skill-craft/SKILL.md +21 -4
- package/skills/planning/architecture/SKILL.md +9 -3
- package/skills/planning/backlog/SKILL.md +8 -2
- package/skills/planning/prd/SKILL.md +8 -2
- package/skills/planning/product-intent/SKILL.md +8 -2
- package/skills/planning/tech-spec/SKILL.md +9 -3
- package/skills/registry.yaml +66 -66
- package/skills/research/arxiv-literature/SKILL.md +8 -2
- package/skills/research/experiment-protocol/SKILL.md +9 -2
- package/skills/research/scientific-debugging/SKILL.md +9 -2
- package/skills/research/scientific-debugging/evals.md +2 -2
- package/skills/research/scientific-modernization/SKILL.md +9 -2
- package/skills/skill-marketplace.json +257 -38
- package/skills/workflow/cut-it/SKILL.md +10 -2
- package/skills/workflow/design-council/SKILL.md +11 -2
- package/skills/workflow/grill-me/SKILL.md +8 -2
- package/skills/workflow/workflow-distiller/SKILL.md +8 -2
- package/src/cli/acp.ts +8 -4
- package/src/cli/argv.ts +25 -0
- package/src/cli/auth.ts +2 -2
- package/src/cli/bootstrap-generate.ts +5 -5
- package/src/cli/clio.ts +6 -1
- package/src/cli/config-inspect.ts +3 -3
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure.ts +50 -48
- package/src/cli/default-target.ts +1 -1
- package/src/cli/docs.ts +6 -6
- package/src/cli/doctor-naming.ts +323 -0
- package/src/cli/doctor-panes.ts +156 -0
- package/src/cli/doctor-toolchain.ts +78 -0
- package/src/cli/doctor.ts +34 -1
- package/src/cli/eval-inventory.ts +436 -0
- package/src/cli/eval.ts +13 -0
- package/src/cli/evidence-detail.ts +88 -0
- package/src/cli/evidence-inventory.ts +183 -0
- package/src/cli/evidence.ts +30 -5
- package/src/cli/fleet-decisions.ts +69 -0
- package/src/cli/fleet-inspect.ts +334 -0
- package/src/cli/fleet-preflight.ts +1 -1
- package/src/cli/fleet-verify.ts +133 -0
- package/src/cli/fleet-view.ts +827 -0
- package/src/cli/fleet.ts +154 -40
- package/src/cli/index.ts +14 -2
- package/src/cli/interop-inspect.ts +128 -0
- package/src/cli/interop.ts +34 -0
- package/src/cli/models.ts +3 -3
- package/src/cli/modes/print.ts +1 -1
- package/src/cli/panes.ts +35 -0
- package/src/cli/reset.ts +6 -3
- package/src/cli/run.ts +67 -13
- package/src/cli/share.ts +1 -1
- package/src/cli/skills-eval.ts +11 -11
- package/src/cli/skills-inventory.ts +185 -0
- package/src/cli/skills.ts +16 -13
- package/src/cli/targets.ts +23 -24
- package/src/cli/tools.ts +321 -0
- package/src/cli/trace-inspect.ts +252 -0
- package/src/cli/trace.ts +64 -2
- package/src/cli/uninstall.ts +2 -2
- package/src/cli/upgrade.ts +29 -34
- package/src/cli/usage.ts +2 -2
- package/src/cli/validate-model.ts +1 -1
- package/src/cli/verifiers-inspect.ts +347 -0
- package/src/cli/verifiers.ts +9 -0
- package/src/cli/wiki-generate.ts +5 -5
- package/src/core/bash-exec.ts +1 -1
- package/src/core/boot-trace.ts +3 -3
- package/src/core/bus-events.ts +4 -0
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1070 -845
- package/src/core/defaults.ts +342 -463
- package/src/core/domain-loader.ts +6 -4
- package/src/core/event-bus.ts +1 -1
- package/src/core/file-references.ts +78 -88
- package/src/core/git-commit-attribution.ts +3 -9
- package/src/core/guardrails.ts +24 -4
- package/src/core/naming-compat.ts +45 -0
- package/src/core/naming-events.ts +62 -0
- package/src/core/recent-models.ts +1 -7
- package/src/core/residency-protection.ts +4 -8
- package/src/core/resolve-config-value.ts +1 -1
- package/src/core/response-model-id.ts +0 -14
- package/src/core/response-schema.ts +44 -4
- package/src/core/session-routing.ts +84 -74
- package/src/core/skill-activation.ts +18 -0
- package/src/core/termination.ts +4 -4
- package/src/core/theme-token-hex.ts +43 -0
- package/src/core/timers.ts +2 -12
- package/src/core/tool-names.ts +2 -1
- package/src/core/xdg.ts +1 -1
- package/src/domains/agents/catalog.ts +2 -12
- package/src/domains/agents/extension.ts +3 -3
- package/src/domains/agents/fleets/build-review.md +0 -3
- package/src/domains/agents/fleets/build-test.md +0 -3
- package/src/domains/agents/registry.ts +7 -7
- package/src/domains/agents/result-contract-filesystem.ts +32 -0
- package/src/domains/agents/result-contract.ts +165 -36
- package/src/domains/agents/spec.ts +0 -11
- package/src/domains/config/classify.ts +37 -46
- package/src/domains/config/extension.ts +5 -5
- package/src/domains/config/keybindings.ts +48 -47
- package/src/domains/config/watcher.ts +1 -1
- package/src/domains/context/codewiki/indexer.ts +1 -1
- package/src/domains/context/extension.ts +3 -3
- package/src/domains/context/prompt-context.ts +1 -1
- package/src/domains/context/wiki/assemble.ts +2 -2
- package/src/domains/context/working-set/replay/metrics.ts +0 -4
- package/src/domains/context/working-set/replay/report.ts +1 -1
- package/src/domains/context/working-set/replay/synthetic.ts +2 -2
- package/src/domains/dispatch/active-route-planner.ts +2 -2
- package/src/domains/dispatch/admission-error.ts +9 -0
- package/src/domains/dispatch/admission.ts +22 -21
- package/src/domains/dispatch/agent-candidates.ts +1 -1
- package/src/domains/dispatch/agent-ledger-store.ts +1 -1
- package/src/domains/dispatch/agent-ledger.ts +1 -1
- package/src/domains/dispatch/assignment.ts +5 -5
- package/src/domains/dispatch/capacity-lease.ts +23 -6
- package/src/domains/dispatch/code-step.ts +1 -1
- package/src/domains/dispatch/contract.ts +2 -2
- package/src/domains/dispatch/council-topology.ts +398 -0
- package/src/domains/dispatch/extension.ts +287 -111
- package/src/domains/dispatch/fleet-node-prompt.ts +62 -0
- package/src/domains/dispatch/fleet-plan.ts +7 -2
- package/src/domains/dispatch/fleet-preflight.ts +8 -17
- package/src/domains/dispatch/fleet-run.ts +59 -3
- package/src/domains/dispatch/gate-decisions.ts +36 -15
- package/src/domains/dispatch/gate-role-prompts.ts +9 -0
- package/src/domains/dispatch/gate-topology.ts +289 -0
- package/src/domains/dispatch/index.ts +19 -0
- package/src/domains/dispatch/intent-compatibility.ts +330 -0
- package/src/domains/dispatch/intent.ts +85 -1
- package/src/domains/dispatch/joint-route-resolver.ts +1 -1
- package/src/domains/dispatch/path-scope.ts +0 -61
- package/src/domains/dispatch/placement.ts +2 -2
- package/src/domains/dispatch/receipt-findings.ts +1 -1
- package/src/domains/dispatch/receipt-integrity.ts +20 -8
- package/src/domains/dispatch/reservation-store.ts +24 -27
- package/src/domains/dispatch/route-decision.ts +1 -1
- package/src/domains/dispatch/route-history.ts +1 -1
- package/src/domains/dispatch/route-policy.ts +1 -1
- package/src/domains/dispatch/route-readiness.ts +0 -28
- package/src/domains/dispatch/run-event-journal-bridge.ts +149 -0
- package/src/domains/dispatch/run-event-journal.ts +599 -0
- package/src/domains/dispatch/state.ts +45 -1
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +2 -19
- package/src/domains/dispatch/types.ts +16 -3
- package/src/domains/dispatch/validation.ts +33 -8
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +5 -4
- package/src/domains/eval/compare/compare.ts +3 -16
- package/src/domains/eval/compare/thresholds.ts +0 -8
- package/src/domains/eval/execution-provenance.ts +1 -1
- package/src/domains/eval/inventory.ts +113 -0
- package/src/domains/eval/metrics/token-stream.ts +0 -7
- package/src/domains/eval/report.ts +1 -1
- package/src/domains/eval/runner.ts +1 -1
- package/src/domains/eval/runners/clio-run.ts +7 -6
- package/src/domains/eval/runners/external-command.ts +4 -3
- package/src/domains/eval/schema/artifact.ts +1 -1
- package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
- package/src/domains/eval/schema/behavioral.ts +7 -6
- package/src/domains/eval/schema/execution-envelope.ts +4 -2
- package/src/domains/eval/schema/naming.ts +10 -0
- package/src/domains/eval/schema/serving.ts +31 -0
- package/src/domains/eval/schema/suite.ts +2 -2
- package/src/domains/eval/schema/validate.ts +9 -5
- package/src/domains/eval/schema/verdict.ts +4 -2
- package/src/domains/eval/store.ts +12 -2
- package/src/domains/eval/suites/run.ts +12 -6
- package/src/domains/eval/types.ts +1 -1
- package/src/domains/eval/workspaces/git.ts +1 -1
- package/src/domains/eval/workspaces/temp-copy.ts +1 -1
- package/src/domains/evidence/build.ts +13 -5
- package/src/domains/evidence/store.ts +6 -0
- package/src/domains/interop/consent.ts +7 -7
- package/src/domains/interop/extension.ts +1 -1
- package/src/domains/lifecycle/doctor.ts +27 -21
- package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
- package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
- package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
- package/src/domains/lifecycle/migrations/index.ts +20 -1
- package/src/domains/lifecycle/naming-history.ts +153 -0
- package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
- package/src/domains/lifecycle/naming-resources.ts +261 -0
- package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
- package/src/domains/lifecycle/naming-yazi.ts +81 -0
- package/src/domains/lifecycle/upgrade-notice.ts +1 -1
- package/src/domains/memory/index.ts +0 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- package/src/domains/memory/task-memory-policy.ts +6 -10
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/index.ts +7 -0
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/memory-intervention.ts +33 -21
- package/src/domains/middleware/runtime.ts +2 -2
- package/src/domains/mux/contract.ts +566 -0
- package/src/domains/mux/detect.ts +182 -0
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +53 -0
- package/src/domains/mux/index.ts +116 -0
- package/src/domains/mux/manifest.ts +6 -0
- package/src/domains/mux/operations.ts +192 -0
- package/src/domains/mux/pane-registry.ts +90 -0
- package/src/domains/mux/protocol.ts +62 -0
- package/src/domains/mux/socket-client.ts +964 -0
- package/src/domains/mux/types.ts +265 -0
- package/src/domains/mux/viewer-command.ts +59 -0
- package/src/domains/mux/yazi/assets/init.lua +2 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/LICENSE +21 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/README.md +78 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/main.lua +255 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/types.lua +12 -0
- package/src/domains/mux/yazi/assets/yazi.toml +17 -0
- package/src/domains/mux/yazi/event-stream.ts +182 -0
- package/src/domains/mux/yazi/profile.ts +299 -0
- package/src/domains/mux/yazi/session.ts +251 -0
- package/src/domains/mux/yazi/theme.ts +30 -0
- package/src/domains/observability/cost.ts +21 -0
- package/src/domains/observability/extension.ts +1 -1
- package/src/domains/observability/index.ts +2 -0
- package/src/domains/observability/out-of-turn-usage.ts +2 -2
- package/src/domains/observability/projection.ts +1 -1
- package/src/domains/observability/trace-store.ts +63 -11
- package/src/domains/prompts/compiler.ts +2 -2
- package/src/domains/prompts/extension.ts +3 -3
- package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
- package/src/domains/prompts/fragments/operating/skills.md +25 -18
- package/src/domains/providers/endpoint-capacity.ts +154 -22
- package/src/domains/providers/endpoint-slots-store.ts +189 -0
- package/src/domains/providers/extension.ts +25 -8
- package/src/domains/providers/index.ts +22 -0
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +46 -2
- package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
- package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
- package/src/domains/providers/plugins.ts +1 -1
- package/src/domains/providers/resolver.ts +1 -1
- package/src/domains/providers/runtimes/boot-manifest.ts +1 -0
- package/src/domains/providers/runtimes/builtins.ts +2 -0
- package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
- package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
- package/src/domains/providers/runtimes/common/probe-helpers.ts +2 -2
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
- package/src/domains/providers/runtimes/protocol/litellm.ts +285 -0
- package/src/domains/providers/support.ts +1 -0
- package/src/domains/providers/target-model-cache.ts +124 -0
- package/src/domains/providers/types/knowledge-base.ts +13 -0
- package/src/domains/providers/types/local-model-quirks.ts +2 -2
- package/src/domains/providers/types/target-descriptor.ts +3 -3
- package/src/domains/resources/extension.ts +1 -1
- package/src/domains/resources/index.ts +3 -0
- package/src/domains/resources/library.ts +6 -6
- package/src/domains/resources/prompts/loader.ts +1 -1
- package/src/domains/resources/skills/content-hash.ts +7 -6
- package/src/domains/resources/skills/evals.ts +1 -1
- package/src/domains/resources/skills/install.ts +36 -12
- package/src/domains/resources/skills/loader.ts +72 -13
- package/src/domains/resources/skills/marketplace.ts +21 -2
- package/src/domains/resources/skills/promotion.ts +214 -0
- package/src/domains/safety/action-classifier.ts +6 -0
- package/src/domains/safety/audit.ts +2 -2
- package/src/domains/safety/finish-contract.ts +2 -1
- package/src/domains/safety/run-effects.ts +1 -1
- package/src/domains/scheduling/extension.ts +4 -4
- package/src/domains/session/archive-readers.ts +9 -1
- package/src/domains/session/compaction/branch-summary.ts +4 -0
- package/src/domains/session/compaction/compact.ts +1 -1
- package/src/domains/session/compaction/tokens.ts +4 -0
- package/src/domains/session/context-accounting.ts +1 -1
- package/src/domains/session/decision-board.ts +1 -1
- package/src/domains/session/extension.ts +1 -1
- package/src/domains/session/handoff.ts +2 -2
- package/src/domains/session/prompt-manifest.ts +0 -5
- package/src/domains/session/protected-artifact-journal.ts +12 -6
- package/src/domains/session/retry.ts +1 -1
- package/src/domains/share/archive.ts +85 -36
- package/src/domains/toolchain/archive.ts +175 -0
- package/src/domains/toolchain/contract.ts +28 -0
- package/src/domains/toolchain/extension.ts +47 -0
- package/src/domains/toolchain/index.ts +39 -0
- package/src/domains/toolchain/install.ts +327 -0
- package/src/domains/toolchain/manifest.ts +8 -0
- package/src/domains/toolchain/paths.ts +34 -0
- package/src/domains/toolchain/registry.ts +265 -0
- package/src/domains/toolchain/remove.ts +218 -0
- package/src/domains/toolchain/resolve.ts +182 -0
- package/src/domains/toolchain/types.ts +113 -0
- package/src/domains/toolchain/version.ts +88 -0
- package/src/engine/acp/adapter.ts +3 -3
- package/src/engine/acp/event-mapper.ts +3 -3
- package/src/engine/acp/server.ts +440 -96
- package/src/engine/acp/tool-mediator.ts +2 -2
- package/src/engine/acp/types.ts +20 -2
- package/src/engine/alcf-oauth.ts +5 -5
- package/src/engine/antigravity/subprocess-runtime.ts +2 -2
- package/src/engine/api-registry.ts +1 -1
- package/src/engine/apis/llamacpp-residency.ts +1 -19
- package/src/engine/apis/lmstudio.ts +1 -6
- package/src/engine/apis/ollama-native.ts +3 -3
- package/src/engine/apis/openai-completions.ts +2 -2
- package/src/engine/apis/residency.ts +3 -9
- package/src/engine/claude/sdk-module.ts +87 -0
- package/src/engine/claude/sdk-runtime.ts +25 -17
- package/src/engine/claude/subprocess-runtime.ts +1 -1
- package/src/engine/claude/tool-safety.ts +4 -4
- package/src/engine/loop-guard.ts +0 -5
- package/src/engine/session.ts +14 -7
- package/src/engine/tui-primitives.ts +21 -0
- package/src/engine/tui.ts +1 -0
- package/src/engine/worker-events.ts +6 -6
- package/src/engine/worker-runtime.ts +16 -26
- package/src/entry/boot-options.ts +2 -0
- package/src/entry/orchestrator.ts +207 -90
- package/src/entry/panes-activation.ts +31 -0
- package/src/entry/with-panes.ts +20 -0
- package/src/interactive/application-controller.ts +21 -21
- package/src/interactive/bus-notices.ts +2 -2
- package/src/interactive/chat-loop.ts +8 -8
- package/src/interactive/chat-panel.ts +1 -1
- package/src/interactive/clio-editor.ts +105 -1
- package/src/interactive/context-activity.ts +8 -6
- package/src/interactive/context-meter.ts +3 -6
- package/src/interactive/context-overlay.ts +2 -1
- package/src/interactive/cost-overlay.ts +3 -1
- package/src/interactive/council-grid.ts +3 -5
- package/src/interactive/council.ts +11 -0
- package/src/interactive/dispatch-board.ts +56 -49
- package/src/interactive/editor-bash.ts +21 -0
- package/src/interactive/editor-steer.ts +9 -4
- package/src/interactive/editor-submit.ts +24 -18
- package/src/interactive/external-editor.ts +1 -1
- package/src/interactive/file-reference-completion.ts +360 -0
- package/src/interactive/footer/dashboard.ts +15 -17
- package/src/interactive/footer/notifications.ts +14 -8
- package/src/interactive/footer/widgets.ts +2 -44
- package/src/interactive/interactive-application.ts +229 -62
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +9 -2
- package/src/interactive/interactive-presentation.ts +21 -16
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +99 -23
- package/src/interactive/interactive-subscriptions.ts +1 -1
- package/src/interactive/interactive-tickers.ts +1 -1
- package/src/interactive/keybinding-manager.ts +4 -4
- package/src/interactive/layout.ts +1 -1
- package/src/interactive/memory-overlay.ts +3 -2
- package/src/interactive/modal-marker.ts +151 -0
- package/src/interactive/mutation-preview.ts +1 -1
- package/src/interactive/mux-bridge.ts +214 -0
- package/src/interactive/overlay-frame.ts +62 -14
- package/src/interactive/overlay-general-openers.ts +7 -2
- package/src/interactive/overlay-key-routing.ts +21 -10
- package/src/interactive/overlay-lifecycle.ts +20 -4
- package/src/interactive/overlay-model-selectors.ts +43 -6
- package/src/interactive/overlay-permission-lifecycle.ts +90 -22
- package/src/interactive/overlay-transitions.ts +18 -4
- package/src/interactive/overlays/agents.ts +3 -2
- package/src/interactive/overlays/ask-user.ts +161 -41
- package/src/interactive/overlays/auth-dialog.ts +1 -0
- package/src/interactive/overlays/context-reset.ts +29 -4
- package/src/interactive/overlays/cwd-fallback.ts +29 -4
- package/src/interactive/overlays/decisions.ts +15 -13
- package/src/interactive/overlays/extensions.ts +1 -0
- package/src/interactive/overlays/fleet-run-approval.ts +4 -3
- package/src/interactive/overlays/handoff-review.ts +3 -2
- package/src/interactive/overlays/help-reference.ts +2 -0
- package/src/interactive/overlays/interop.ts +2 -1
- package/src/interactive/overlays/library-install-confirm.ts +2 -1
- package/src/interactive/overlays/library-tabs.ts +28 -0
- package/src/interactive/overlays/list-overlay.ts +10 -1
- package/src/interactive/overlays/message-picker.ts +2 -1
- package/src/interactive/overlays/model-scope.ts +86 -0
- package/src/interactive/overlays/model-selector.ts +40 -31
- package/src/interactive/overlays/prompts.ts +11 -4
- package/src/interactive/overlays/session-selector.ts +3 -2
- package/src/interactive/overlays/settings-sections.ts +30 -0
- package/src/interactive/overlays/settings.ts +849 -268
- package/src/interactive/overlays/side-question.ts +3 -2
- package/src/interactive/overlays/skills-hub.ts +11 -19
- package/src/interactive/overlays/tree-selector.ts +3 -2
- package/src/interactive/pane-policy.ts +46 -0
- package/src/interactive/panes-runtime.ts +318 -0
- package/src/interactive/permission-overlay.ts +2 -2
- package/src/interactive/renderers/compaction-summary.ts +29 -0
- package/src/interactive/renderers/retry-status.ts +12 -4
- package/src/interactive/renderers/tool-execution.ts +4 -4
- package/src/interactive/renderers/worker-entry.ts +122 -14
- package/src/interactive/session-transcript.ts +3 -3
- package/src/interactive/slash-autocomplete.ts +454 -165
- package/src/interactive/slash-commands.ts +521 -189
- package/src/interactive/slash-spec.ts +160 -17
- package/src/interactive/status/controller.ts +2 -2
- package/src/interactive/stream-pacing-policy.ts +1 -1
- package/src/interactive/tasks-overlay.ts +21 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/theme/tokens.ts +3 -14
- package/src/interactive/turn-context.ts +58 -13
- package/src/interactive/turn-persistence.ts +2 -2
- package/src/interactive/turn-prewarm.ts +2 -2
- package/src/interactive/turn-runtime.ts +8 -8
- package/src/interactive/turn-state.ts +1 -1
- package/src/interactive/view/artifacts.ts +120 -9
- package/src/interactive/view/view-overlay.ts +14 -10
- package/src/interactive/watch-pane.ts +180 -0
- package/src/interactive/welcome-dashboard.ts +15 -15
- package/src/interactive/worker-progress.ts +11 -5
- package/src/interactive/worker-receipts.ts +20 -2
- package/src/interactive/worker-stream.ts +6 -4
- package/src/interactive/yazi-bridge.ts +451 -0
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/bootstrap.ts +26 -2
- package/src/tools/builtin-tool-catalog.ts +16 -1
- package/src/tools/compete-worktrees.ts +108 -17
- package/src/tools/context/index.ts +15 -1
- package/src/tools/core-bootstrap.ts +2 -1
- package/src/tools/dispatch-admission.ts +18 -5
- package/src/tools/dispatch-arguments.ts +21 -21
- package/src/tools/dispatch-plan.ts +0 -11
- package/src/tools/dispatch-run-events.ts +145 -28
- package/src/tools/dispatch-runner.ts +40 -13
- package/src/tools/dispatch-types.ts +15 -3
- package/src/tools/dispatch.ts +2 -2
- package/src/tools/executables.ts +17 -14
- package/src/tools/find.ts +1 -6
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observation.ts +54 -4
- package/src/tools/observers.ts +0 -33
- package/src/tools/panes-surface.ts +38 -0
- package/src/tools/panes.ts +112 -0
- package/src/tools/policy.ts +10 -1
- package/src/tools/presentation.ts +1 -0
- package/src/tools/task-worktree.ts +28 -7
- package/src/tools/verify/authoring.ts +3 -6
- package/src/tools/verify/frontend.ts +1 -1
- package/src/tools/web-fetch.ts +1 -1
- package/src/worker/entry.ts +4 -3
- package/src/worker/protocol.ts +16 -14
- package/src/worker/spec-contract.ts +2 -2
- package/src/worker/stdin-demux.ts +2 -2
- package/dist/chunk-D73KXYPF.js +0 -37
- package/dist/chunk-MLOK6ZOS.js +0 -2888
- package/dist/chunk-PNY46YEY.js +0 -1581
- package/dist/chunk-XDOQXGFO.js +0 -515
- package/dist/chunk-YKOFT37S.js +0 -279
- package/dist/clio-LT5V7SSZ.js +0 -26
- package/dist/configure-2WYWSCSD.js +0 -49
- package/dist/doctor-TWBWFK5V.js +0 -165
- package/src/engine/apis/degraded-inference.ts +0 -95
- /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
- /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cpSync,
|
|
3
|
+
existsSync,
|
|
4
|
+
mkdirSync,
|
|
5
|
+
readdirSync,
|
|
6
|
+
readFileSync,
|
|
7
|
+
renameSync,
|
|
8
|
+
rmSync,
|
|
9
|
+
statSync,
|
|
10
|
+
writeFileSync,
|
|
11
|
+
} from "node:fs";
|
|
12
|
+
import path from "node:path";
|
|
13
|
+
|
|
14
|
+
import { parse as parseYaml } from "yaml";
|
|
15
|
+
import { resolvePackageRoot } from "../../core/package-root.js";
|
|
16
|
+
import { fsyncDirectory } from "../../core/safe-resource-write.js";
|
|
17
|
+
import { resolveClioDirs } from "../../core/xdg.js";
|
|
18
|
+
import { normalizedSkillHash, stripProvenanceFrontmatter } from "../resources/skills/content-hash.js";
|
|
19
|
+
|
|
20
|
+
const LEGACY_SKILL_NAMES = [
|
|
21
|
+
["clio-dev", "clio-coder-dev"],
|
|
22
|
+
["clio-test", "clio-coder-test"],
|
|
23
|
+
] as const;
|
|
24
|
+
|
|
25
|
+
export type NamingResourceStatus = "absent" | "canonical-present" | "modified" | "renamable" | "renamed";
|
|
26
|
+
|
|
27
|
+
export interface NamingResourceReport {
|
|
28
|
+
kind: "skill";
|
|
29
|
+
legacyPath: string;
|
|
30
|
+
canonicalPath: string;
|
|
31
|
+
status: NamingResourceStatus;
|
|
32
|
+
detail: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface NamingResourceOptions {
|
|
36
|
+
cwd?: string;
|
|
37
|
+
configDir?: string;
|
|
38
|
+
packageRoot?: string;
|
|
39
|
+
fix?: boolean;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function canonicalizeNamingText(text: string): string {
|
|
43
|
+
return text
|
|
44
|
+
.replaceAll("clio-dev", "clio-coder-dev")
|
|
45
|
+
.replaceAll("clio-test", "clio-coder-test")
|
|
46
|
+
.replace(/^clio:/gmu, "clio-coder:")
|
|
47
|
+
.replace(/^(\s*source:\s*)clio\s*$/gmu, "$1clio-coder");
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function installedHash(raw: string): string | null {
|
|
51
|
+
const match = raw.match(/^\s*installed-hash:\s*["']?([0-9a-f]{64})["']?\s*$/mu);
|
|
52
|
+
return match?.[1] ?? null;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function regularFiles(root: string, current = root): string[] {
|
|
56
|
+
const out: string[] = [];
|
|
57
|
+
for (const entry of readdirSync(current, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {
|
|
58
|
+
const full = path.join(current, entry.name);
|
|
59
|
+
if (entry.isDirectory()) out.push(...regularFiles(root, full));
|
|
60
|
+
else if (entry.isFile()) out.push(path.relative(root, full));
|
|
61
|
+
else return [];
|
|
62
|
+
}
|
|
63
|
+
return out;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function provesUnmodifiedShippedCopy(legacyDir: string, canonicalBundleDir: string): boolean {
|
|
67
|
+
let legacyFiles: string[];
|
|
68
|
+
let canonicalFiles: string[];
|
|
69
|
+
try {
|
|
70
|
+
legacyFiles = regularFiles(legacyDir);
|
|
71
|
+
canonicalFiles = regularFiles(canonicalBundleDir);
|
|
72
|
+
} catch {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
if (legacyFiles.length === 0 || legacyFiles.join("\0") !== canonicalFiles.join("\0")) return false;
|
|
76
|
+
for (const relative of legacyFiles) {
|
|
77
|
+
const legacyRaw = readFileSync(path.join(legacyDir, relative), "utf8");
|
|
78
|
+
const canonicalRaw = readFileSync(path.join(canonicalBundleDir, relative), "utf8");
|
|
79
|
+
if (relative === "SKILL.md") {
|
|
80
|
+
const recordedHash = installedHash(legacyRaw);
|
|
81
|
+
if (recordedHash === null || recordedHash !== normalizedSkillHash(legacyRaw)) return false;
|
|
82
|
+
if (canonicalizeNamingText(stripProvenanceFrontmatter(legacyRaw)) !== stripProvenanceFrontmatter(canonicalRaw))
|
|
83
|
+
return false;
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
if (canonicalizeNamingText(legacyRaw) !== canonicalRaw) return false;
|
|
87
|
+
}
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function rewriteStagedCopy(stage: string, canonicalBundleDir: string): void {
|
|
92
|
+
const canonicalSkillHash = normalizedSkillHash(readFileSync(path.join(canonicalBundleDir, "SKILL.md"), "utf8"));
|
|
93
|
+
for (const relative of regularFiles(stage)) {
|
|
94
|
+
const file = path.join(stage, relative);
|
|
95
|
+
let next = canonicalizeNamingText(readFileSync(file, "utf8"));
|
|
96
|
+
if (relative === "SKILL.md") {
|
|
97
|
+
next = next.replace(/^(\s*installed-hash:\s*).+$/mu, `$1"${canonicalSkillHash}"`);
|
|
98
|
+
}
|
|
99
|
+
writeFileSync(file, next, "utf8");
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
let resourceSwapSequence = 0;
|
|
104
|
+
|
|
105
|
+
function migrateProvenSkill(legacyDir: string, canonicalDir: string, canonicalBundleDir: string): void {
|
|
106
|
+
const suffix = `${process.pid}-${++resourceSwapSequence}`;
|
|
107
|
+
const stage = `${canonicalDir}.clio-coder-naming-stage-${suffix}`;
|
|
108
|
+
const backup = `${legacyDir}.clio-coder-naming-backup-${suffix}`;
|
|
109
|
+
mkdirSync(path.dirname(canonicalDir), { recursive: true });
|
|
110
|
+
cpSync(legacyDir, stage, { recursive: true });
|
|
111
|
+
try {
|
|
112
|
+
rewriteStagedCopy(stage, canonicalBundleDir);
|
|
113
|
+
renameSync(legacyDir, backup);
|
|
114
|
+
try {
|
|
115
|
+
renameSync(stage, canonicalDir);
|
|
116
|
+
} catch (error) {
|
|
117
|
+
renameSync(backup, legacyDir);
|
|
118
|
+
throw error;
|
|
119
|
+
}
|
|
120
|
+
rmSync(backup, { recursive: true, force: true });
|
|
121
|
+
fsyncDirectory(path.dirname(canonicalDir));
|
|
122
|
+
} catch (error) {
|
|
123
|
+
rmSync(stage, { recursive: true, force: true });
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function existingDirectory(candidate: string): boolean {
|
|
129
|
+
try {
|
|
130
|
+
return statSync(candidate).isDirectory();
|
|
131
|
+
} catch {
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/** Inspect only the selected user root and current project; never scan arbitrary repositories. */
|
|
137
|
+
export function inspectInstalledNamingResources(options: NamingResourceOptions = {}): NamingResourceReport[] {
|
|
138
|
+
const cwd = options.cwd ?? process.cwd();
|
|
139
|
+
const configDir = options.configDir ?? resolveClioDirs().config;
|
|
140
|
+
const packageRoot = options.packageRoot ?? resolvePackageRoot();
|
|
141
|
+
const roots = [path.join(configDir, "skills"), path.join(cwd, ".clio-coder", "skills")];
|
|
142
|
+
const reports: NamingResourceReport[] = [];
|
|
143
|
+
for (const root of roots) {
|
|
144
|
+
for (const [legacyName, canonicalName] of LEGACY_SKILL_NAMES) {
|
|
145
|
+
const legacyPath = path.join(root, legacyName);
|
|
146
|
+
const canonicalPath = path.join(root, canonicalName);
|
|
147
|
+
if (!existingDirectory(legacyPath)) {
|
|
148
|
+
reports.push({ kind: "skill", legacyPath, canonicalPath, status: "absent", detail: "legacy skill absent" });
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
if (existsSync(canonicalPath)) {
|
|
152
|
+
reports.push({
|
|
153
|
+
kind: "skill",
|
|
154
|
+
legacyPath,
|
|
155
|
+
canonicalPath,
|
|
156
|
+
status: "canonical-present",
|
|
157
|
+
detail: "canonical skill already exists; legacy copy left untouched",
|
|
158
|
+
});
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
const canonicalBundleDir = path.join(packageRoot, "skills", "meta", canonicalName);
|
|
162
|
+
if (!existingDirectory(canonicalBundleDir) || !provesUnmodifiedShippedCopy(legacyPath, canonicalBundleDir)) {
|
|
163
|
+
reports.push({
|
|
164
|
+
kind: "skill",
|
|
165
|
+
legacyPath,
|
|
166
|
+
canonicalPath,
|
|
167
|
+
status: "modified",
|
|
168
|
+
detail: "frontmatter/provenance/hash do not prove an unmodified shipped copy; left untouched",
|
|
169
|
+
});
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
if (options.fix) migrateProvenSkill(legacyPath, canonicalPath, canonicalBundleDir);
|
|
173
|
+
reports.push({
|
|
174
|
+
kind: "skill",
|
|
175
|
+
legacyPath,
|
|
176
|
+
canonicalPath,
|
|
177
|
+
status: options.fix ? "renamed" : "renamable",
|
|
178
|
+
detail: options.fix
|
|
179
|
+
? "proven unmodified shipped copy renamed and canonicalized"
|
|
180
|
+
: "proven unmodified shipped copy can be renamed by doctor --fix",
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return reports;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export interface ModelOverlayNamingInspection {
|
|
188
|
+
path: string;
|
|
189
|
+
legacyFile: boolean;
|
|
190
|
+
legacyMetadataKeys: number;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export interface SkillMetadataNamingInspection {
|
|
194
|
+
path: string;
|
|
195
|
+
legacyMetadataKey: boolean;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
function collectSkillFiles(root: string, current = root): string[] {
|
|
199
|
+
if (!existingDirectory(current)) return [];
|
|
200
|
+
const out: string[] = [];
|
|
201
|
+
for (const entry of readdirSync(current, { withFileTypes: true })) {
|
|
202
|
+
const full = path.join(current, entry.name);
|
|
203
|
+
if (entry.isDirectory()) out.push(...collectSkillFiles(root, full));
|
|
204
|
+
else if (entry.isFile() && entry.name === "SKILL.md") out.push(full);
|
|
205
|
+
}
|
|
206
|
+
return out;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/** Read-only inventory of released skill metadata keys in selected Clio Coder roots. */
|
|
210
|
+
export function inspectSkillMetadataNaming(
|
|
211
|
+
options: Pick<NamingResourceOptions, "cwd" | "configDir"> = {},
|
|
212
|
+
): SkillMetadataNamingInspection[] {
|
|
213
|
+
const cwd = options.cwd ?? process.cwd();
|
|
214
|
+
const configDir = options.configDir ?? resolveClioDirs().config;
|
|
215
|
+
const roots = [path.join(configDir, "skills"), path.join(cwd, ".clio-coder", "skills")];
|
|
216
|
+
return roots.flatMap((root) =>
|
|
217
|
+
collectSkillFiles(root).map((file) => ({
|
|
218
|
+
path: file,
|
|
219
|
+
legacyMetadataKey: /^clio:\s*(?:#.*)?$/mu.test(readFileSync(file, "utf8")),
|
|
220
|
+
})),
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
function countLegacyModelMetadata(value: unknown): number {
|
|
225
|
+
if (Array.isArray(value)) return value.reduce((count, entry) => count + countLegacyModelMetadata(entry), 0);
|
|
226
|
+
if (typeof value !== "object" || value === null) return 0;
|
|
227
|
+
const record = value as Record<string, unknown>;
|
|
228
|
+
return (
|
|
229
|
+
(Object.hasOwn(record, "clio") ? 1 : 0) +
|
|
230
|
+
Object.values(record).reduce<number>((count, entry) => count + countLegacyModelMetadata(entry), 0)
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/** Read-only overlay inventory. User catalog files are never silently rewritten. */
|
|
235
|
+
export function inspectModelOverlayNaming(
|
|
236
|
+
options: Pick<NamingResourceOptions, "cwd" | "configDir"> = {},
|
|
237
|
+
): ModelOverlayNamingInspection[] {
|
|
238
|
+
const cwd = options.cwd ?? process.cwd();
|
|
239
|
+
const configDir = options.configDir ?? resolveClioDirs().config;
|
|
240
|
+
const roots = [path.join(configDir, "model-catalog.d"), path.join(cwd, ".clio-coder", "model-catalog.d")];
|
|
241
|
+
const inspections: ModelOverlayNamingInspection[] = [];
|
|
242
|
+
for (const root of roots) {
|
|
243
|
+
if (!existingDirectory(root)) continue;
|
|
244
|
+
for (const entry of readdirSync(root, { withFileTypes: true })) {
|
|
245
|
+
if (!entry.isFile() || (!entry.name.endsWith(".yaml") && !entry.name.endsWith(".yml"))) continue;
|
|
246
|
+
const file = path.join(root, entry.name);
|
|
247
|
+
let legacyMetadataKeys = 0;
|
|
248
|
+
try {
|
|
249
|
+
legacyMetadataKeys = countLegacyModelMetadata(parseYaml(readFileSync(file, "utf8")));
|
|
250
|
+
} catch {
|
|
251
|
+
// The catalog loader owns the parse diagnostic; naming still reports the filename.
|
|
252
|
+
}
|
|
253
|
+
inspections.push({
|
|
254
|
+
path: file,
|
|
255
|
+
legacyFile: entry.name === "clio-local-coding-targets.yaml",
|
|
256
|
+
legacyMetadataKeys,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return inspections;
|
|
261
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync, renameSync, rmSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
|
|
4
|
+
import { fsyncDirectory } from "../../core/safe-resource-write.js";
|
|
5
|
+
import { resolveClioDirs } from "../../core/xdg.js";
|
|
6
|
+
import { findPinnedTool } from "../toolchain/registry.js";
|
|
7
|
+
|
|
8
|
+
export const LEGACY_TOOL_MARKER = "clio-install.json";
|
|
9
|
+
export const CANONICAL_TOOL_MARKER = "clio-coder-install.json";
|
|
10
|
+
|
|
11
|
+
interface ValidToolMarker {
|
|
12
|
+
id: string;
|
|
13
|
+
version: string;
|
|
14
|
+
sha256: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type ToolMarkerNamingStatus =
|
|
18
|
+
| "renamable"
|
|
19
|
+
| "renamed"
|
|
20
|
+
| "invalid-legacy"
|
|
21
|
+
| "canonical-conflict"
|
|
22
|
+
| "agreeing-duplicate"
|
|
23
|
+
| "duplicate-removed";
|
|
24
|
+
|
|
25
|
+
export interface ToolMarkerNamingReport {
|
|
26
|
+
tool: string;
|
|
27
|
+
version: string;
|
|
28
|
+
legacyPath: string;
|
|
29
|
+
canonicalPath: string;
|
|
30
|
+
status: ToolMarkerNamingStatus;
|
|
31
|
+
detail: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface ToolMarkerNamingOptions {
|
|
35
|
+
dataDir?: string;
|
|
36
|
+
fix?: boolean;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function childDirectories(root: string): string[] {
|
|
40
|
+
try {
|
|
41
|
+
return readdirSync(root, { withFileTypes: true })
|
|
42
|
+
.filter((entry) => entry.isDirectory() && !entry.name.startsWith("."))
|
|
43
|
+
.map((entry) => entry.name)
|
|
44
|
+
.sort((left, right) => left.localeCompare(right));
|
|
45
|
+
} catch {
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function readValidMarker(path: string, tool: string, version: string): ValidToolMarker | null {
|
|
51
|
+
try {
|
|
52
|
+
const value: unknown = JSON.parse(readFileSync(path, "utf8"));
|
|
53
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return null;
|
|
54
|
+
const marker = value as Record<string, unknown>;
|
|
55
|
+
if (marker.id !== tool || marker.version !== version) return null;
|
|
56
|
+
if (typeof marker.sha256 !== "string" || !/^[0-9a-f]{64}$/u.test(marker.sha256)) return null;
|
|
57
|
+
return { id: tool, version, sha256: marker.sha256 };
|
|
58
|
+
} catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function sameFacts(left: ValidToolMarker, right: ValidToolMarker): boolean {
|
|
64
|
+
return left.id === right.id && left.version === right.version && left.sha256 === right.sha256;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Inspect or migrate released tool markers only below known tool/version
|
|
69
|
+
* directories in the selected Clio Coder data root. Unknown tool roots and
|
|
70
|
+
* symlinks are never traversed.
|
|
71
|
+
*/
|
|
72
|
+
export function inspectToolMarkerNaming(options: ToolMarkerNamingOptions = {}): ToolMarkerNamingReport[] {
|
|
73
|
+
const toolsRoot = join(options.dataDir ?? resolveClioDirs().data, "tools");
|
|
74
|
+
const reports: ToolMarkerNamingReport[] = [];
|
|
75
|
+
for (const tool of childDirectories(toolsRoot)) {
|
|
76
|
+
if (findPinnedTool(tool) === null) continue;
|
|
77
|
+
for (const version of childDirectories(join(toolsRoot, tool))) {
|
|
78
|
+
const dir = join(toolsRoot, tool, version);
|
|
79
|
+
const legacyPath = join(dir, LEGACY_TOOL_MARKER);
|
|
80
|
+
if (!existsSync(legacyPath)) continue;
|
|
81
|
+
const canonicalPath = join(dir, CANONICAL_TOOL_MARKER);
|
|
82
|
+
const legacy = readValidMarker(legacyPath, tool, version);
|
|
83
|
+
if (legacy === null) {
|
|
84
|
+
reports.push({
|
|
85
|
+
tool,
|
|
86
|
+
version,
|
|
87
|
+
legacyPath,
|
|
88
|
+
canonicalPath,
|
|
89
|
+
status: "invalid-legacy",
|
|
90
|
+
detail: "legacy marker does not match its known tool/version path and checksum shape; left untouched",
|
|
91
|
+
});
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (!existsSync(canonicalPath)) {
|
|
95
|
+
if (options.fix) {
|
|
96
|
+
renameSync(legacyPath, canonicalPath);
|
|
97
|
+
fsyncDirectory(dir);
|
|
98
|
+
}
|
|
99
|
+
reports.push({
|
|
100
|
+
tool,
|
|
101
|
+
version,
|
|
102
|
+
legacyPath,
|
|
103
|
+
canonicalPath,
|
|
104
|
+
status: options.fix ? "renamed" : "renamable",
|
|
105
|
+
detail: options.fix ? "validated legacy marker renamed atomically" : "validated legacy marker can be renamed",
|
|
106
|
+
});
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
const canonical = readValidMarker(canonicalPath, tool, version);
|
|
110
|
+
if (canonical === null || !sameFacts(legacy, canonical)) {
|
|
111
|
+
reports.push({
|
|
112
|
+
tool,
|
|
113
|
+
version,
|
|
114
|
+
legacyPath,
|
|
115
|
+
canonicalPath,
|
|
116
|
+
status: "canonical-conflict",
|
|
117
|
+
detail:
|
|
118
|
+
"canonical and legacy marker facts disagree or canonical is invalid; canonical wins and legacy is left untouched",
|
|
119
|
+
});
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
if (options.fix) {
|
|
123
|
+
rmSync(legacyPath);
|
|
124
|
+
fsyncDirectory(dir);
|
|
125
|
+
}
|
|
126
|
+
reports.push({
|
|
127
|
+
tool,
|
|
128
|
+
version,
|
|
129
|
+
legacyPath,
|
|
130
|
+
canonicalPath,
|
|
131
|
+
status: options.fix ? "duplicate-removed" : "agreeing-duplicate",
|
|
132
|
+
detail: options.fix
|
|
133
|
+
? "validated agreeing legacy duplicate removed; canonical marker kept"
|
|
134
|
+
: "canonical and legacy facts agree; legacy duplicate can be removed",
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return reports;
|
|
139
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { readFileSync, statSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
|
|
4
|
+
import { resolveClioDirs } from "../../core/xdg.js";
|
|
5
|
+
import { ensureYaziProfile, resetYaziProfile, yaziProfileDir } from "../mux/yazi/profile.js";
|
|
6
|
+
import { resolveToolBinary } from "../toolchain/resolve.js";
|
|
7
|
+
|
|
8
|
+
export interface YaziNamingInspection {
|
|
9
|
+
profileDir: string;
|
|
10
|
+
present: boolean;
|
|
11
|
+
legacyEvents: number;
|
|
12
|
+
legacyEnvironmentNames: number;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface YaziNamingRegenerationReport extends YaziNamingInspection {
|
|
16
|
+
status: "absent" | "canonical" | "regenerated" | "removed-unresolved" | "regeneration-failed";
|
|
17
|
+
detail: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface YaziNamingOptions {
|
|
21
|
+
cacheDir?: string;
|
|
22
|
+
yaziPath?: string | null;
|
|
23
|
+
yaPath?: string | null;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function occurrences(text: string, pattern: RegExp): number {
|
|
27
|
+
return [...text.matchAll(pattern)].length;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** Inspect only the generated keymap below the selected Clio Coder cache root. */
|
|
31
|
+
export function inspectYaziNaming(cacheDir: string = resolveClioDirs().cache): YaziNamingInspection {
|
|
32
|
+
const profileDir = yaziProfileDir(cacheDir);
|
|
33
|
+
const present = statSync(profileDir, { throwIfNoEntry: false })?.isDirectory() === true;
|
|
34
|
+
let keymap = "";
|
|
35
|
+
try {
|
|
36
|
+
keymap = readFileSync(join(profileDir, "keymap.toml"), "utf8");
|
|
37
|
+
} catch {
|
|
38
|
+
// Missing or unreadable generated material is handled as disposable cache.
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
profileDir,
|
|
42
|
+
present,
|
|
43
|
+
legacyEvents: occurrences(keymap, /(?<!clio-coder-)clio-pick/gmu),
|
|
44
|
+
legacyEnvironmentNames: occurrences(keymap, /\$CLIO_YAZI_PICK_TOKEN\b/gmu),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Replace the disposable managed profile from current inputs. Resolution is
|
|
50
|
+
* performed before removal so the report can state why a profile could not be
|
|
51
|
+
* rebuilt, while deletion remains confined to `<cache>/yazi/profile`.
|
|
52
|
+
*/
|
|
53
|
+
export function regenerateYaziNamingProfile(options: YaziNamingOptions = {}): YaziNamingRegenerationReport {
|
|
54
|
+
const cacheDir = options.cacheDir ?? resolveClioDirs().cache;
|
|
55
|
+
const before = inspectYaziNaming(cacheDir);
|
|
56
|
+
if (!before.present) {
|
|
57
|
+
return { ...before, status: "absent", detail: "managed Yazi profile is absent; next open writes canonical names" };
|
|
58
|
+
}
|
|
59
|
+
if (before.legacyEvents === 0 && before.legacyEnvironmentNames === 0) {
|
|
60
|
+
return { ...before, status: "canonical", detail: "managed Yazi profile already uses canonical names" };
|
|
61
|
+
}
|
|
62
|
+
const yaziPath = options.yaziPath === undefined ? resolveToolBinary("yazi").binaryPath : options.yaziPath;
|
|
63
|
+
const yaPath = options.yaPath === undefined ? resolveToolBinary("ya").binaryPath : options.yaPath;
|
|
64
|
+
resetYaziProfile(before.profileDir);
|
|
65
|
+
if (!yaziPath || !yaPath) {
|
|
66
|
+
return {
|
|
67
|
+
...before,
|
|
68
|
+
status: "removed-unresolved",
|
|
69
|
+
detail: "legacy managed profile removed; Yazi/ya is unresolved, so the next managed open will regenerate it",
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
const profile = ensureYaziProfile({ yaziPath, yaPath, profileDir: before.profileDir });
|
|
73
|
+
if (!profile) {
|
|
74
|
+
return {
|
|
75
|
+
...before,
|
|
76
|
+
status: "regeneration-failed",
|
|
77
|
+
detail: "legacy managed profile removed, but current Yazi rejected the regenerated profile",
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
return { ...before, status: "regenerated", detail: "managed Yazi profile regenerated with canonical names" };
|
|
81
|
+
}
|
|
@@ -27,7 +27,7 @@ const KEYBOARD_FACING_CHANGES: Readonly<Record<string, string>> = Object.freeze(
|
|
|
27
27
|
*/
|
|
28
28
|
export function describeUpgradeNotice(transition: UpgradeTransition): string {
|
|
29
29
|
const changes = KEYBOARD_FACING_CHANGES[transition.to];
|
|
30
|
-
const head = `clio: upgraded ${transition.from} → ${transition.to}.`;
|
|
30
|
+
const head = `clio-coder: upgraded ${transition.from} → ${transition.to}.`;
|
|
31
31
|
const tail = `Full notes: CHANGELOG.md, section ${transition.to}.`;
|
|
32
32
|
return changes === undefined
|
|
33
33
|
? `${head} What changed is in CHANGELOG.md, section ${transition.to}.`
|
|
@@ -11,7 +11,8 @@ import {
|
|
|
11
11
|
} from "./task-bank.js";
|
|
12
12
|
|
|
13
13
|
export const TASK_MEMORY_HANDOFF_VERSION = 2;
|
|
14
|
-
export const TASK_MEMORY_HANDOFF_LANGUAGE = "clio-task-memory";
|
|
14
|
+
export const TASK_MEMORY_HANDOFF_LANGUAGE = "clio-coder-task-memory";
|
|
15
|
+
const LEGACY_TASK_MEMORY_HANDOFF_LANGUAGE = "clio-task-memory";
|
|
15
16
|
const HANDOFF_MAX_BYTES = 1_000_000;
|
|
16
17
|
|
|
17
18
|
export interface TaskMemoryHandoffEntry {
|
|
@@ -134,8 +135,10 @@ export function renderTaskMemoryHandoffSource(
|
|
|
134
135
|
|
|
135
136
|
export function parseTaskMemoryHandoffSnapshot(text: string): TaskMemoryHandoffSnapshot | null {
|
|
136
137
|
if (typeof text !== "string" || text.length === 0 || text.length > HANDOFF_MAX_BYTES) return null;
|
|
137
|
-
const
|
|
138
|
-
|
|
138
|
+
const languages = [TASK_MEMORY_HANDOFF_LANGUAGE, LEGACY_TASK_MEMORY_HANDOFF_LANGUAGE]
|
|
139
|
+
.map((language) => language.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&"))
|
|
140
|
+
.join("|");
|
|
141
|
+
const match = new RegExp(`(?:^|\\n)\\x60{3}(?:${languages})\\r?\\n([^\\r\\n]+)\\r?\\n\\x60{3}(?:$|\\n)`, "u").exec(
|
|
139
142
|
text,
|
|
140
143
|
);
|
|
141
144
|
if (match?.[1] === undefined) return null;
|
|
@@ -17,15 +17,7 @@ export const TASK_MEMORY_POLICY_MAX_OPERATIONS = 8;
|
|
|
17
17
|
* test pins the pair. Two numbers for one setting means any path that misses
|
|
18
18
|
* the settings object silently gets the one nobody chose.
|
|
19
19
|
*/
|
|
20
|
-
export const TASK_MEMORY_POLICY_DEFAULT_TIMEOUT_MS =
|
|
21
|
-
/**
|
|
22
|
-
* The envelope itself needs a few hundred tokens. The rest is headroom for a
|
|
23
|
-
* model that reasons despite thinking being requested off: measured preambles on
|
|
24
|
-
* a 9B local route ran past 1,800 tokens before the first `<operations>` byte,
|
|
25
|
-
* and a budget that runs out mid-thought yields an empty response, no bank
|
|
26
|
-
* writes, and no way for the operator to tell that from a deliberate silence.
|
|
27
|
-
*/
|
|
28
|
-
export const TASK_MEMORY_POLICY_MODEL_MAX_OUTPUT_TOKENS = 4_000;
|
|
20
|
+
export const TASK_MEMORY_POLICY_DEFAULT_TIMEOUT_MS = 60_000;
|
|
29
21
|
|
|
30
22
|
export interface TaskMemoryTrajectoryStep {
|
|
31
23
|
step: number;
|
|
@@ -142,6 +134,8 @@ export type TaskMemoryPolicyReason =
|
|
|
142
134
|
| "no_consumer"
|
|
143
135
|
/** A step was already in flight, so this boundary's triggers stayed pending. */
|
|
144
136
|
| "step_in_flight"
|
|
137
|
+
/** Consecutive model deadlines degraded this session to the free rules tier. */
|
|
138
|
+
| "llm_timeout_backoff"
|
|
145
139
|
/** Rules tier: the turn ended with no repeated failure worth reporting. */
|
|
146
140
|
| "no_repeated_failure"
|
|
147
141
|
/** Rules tier: compaction reactivation found no knowledge entries to restore. */
|
|
@@ -171,6 +165,8 @@ export interface TaskMemoryPolicyInput {
|
|
|
171
165
|
trajectory: ReadonlyArray<TaskMemoryTrajectoryStep>;
|
|
172
166
|
deterministicTrigger: boolean;
|
|
173
167
|
maxTokens: number;
|
|
168
|
+
/** Capability-derived completion budget; defaults to the visible reminder budget. */
|
|
169
|
+
modelMaxTokens?: number;
|
|
174
170
|
timeoutMs?: number;
|
|
175
171
|
/** Phase one still applies; phase two is suppressed when another memory reminder already won this boundary. */
|
|
176
172
|
suppressIntervention?: boolean;
|
|
@@ -297,7 +293,7 @@ export async function runTaskMemoryPolicy(
|
|
|
297
293
|
const completion = client.complete({
|
|
298
294
|
systemPrompt: MEMORY_INTERVENTION_SYSTEM_PROMPT,
|
|
299
295
|
userPrompt,
|
|
300
|
-
maxTokens:
|
|
296
|
+
maxTokens: positiveInteger(input.modelMaxTokens, input.maxTokens),
|
|
301
297
|
signal: controller.signal,
|
|
302
298
|
});
|
|
303
299
|
const timeout = new Promise<typeof timeoutMarker>((resolve) => {
|
|
@@ -74,6 +74,13 @@ export {
|
|
|
74
74
|
spawnSyncCommandRunner,
|
|
75
75
|
} from "./hooks-io.js";
|
|
76
76
|
export { MiddlewareManifest } from "./manifest.js";
|
|
77
|
+
export {
|
|
78
|
+
createMarketplaceOfferRegistration,
|
|
79
|
+
MARKETPLACE_OFFER_REGISTRATION_ID,
|
|
80
|
+
type MarketplaceOfferDeps,
|
|
81
|
+
marketplaceAutoInstallReminder,
|
|
82
|
+
marketplaceOfferReminder,
|
|
83
|
+
} from "./marketplace-offer.js";
|
|
77
84
|
export {
|
|
78
85
|
createMemoryInterventionRegistration,
|
|
79
86
|
MEMORY_INTERVENTION_DEFAULT_MAX_TOKENS,
|