@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
|
@@ -2,6 +2,7 @@ import { readdirSync, readFileSync, statSync } from "node:fs";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { parse as parseYaml } from "yaml";
|
|
4
4
|
|
|
5
|
+
import { warnLegacyNaming } from "../../../core/naming-compat.js";
|
|
5
6
|
import type { CapabilityFlags } from "./capability-flags.js";
|
|
6
7
|
|
|
7
8
|
export interface KnowledgeBaseEntry {
|
|
@@ -9,6 +10,8 @@ export interface KnowledgeBaseEntry {
|
|
|
9
10
|
matchPatterns: ReadonlyArray<string>;
|
|
10
11
|
capabilities: Partial<CapabilityFlags>;
|
|
11
12
|
quirks?: Record<string, unknown>;
|
|
13
|
+
/** Product-owned catalog metadata, normalized from either YAML spelling. */
|
|
14
|
+
clioCoder?: Record<string, unknown>;
|
|
12
15
|
}
|
|
13
16
|
|
|
14
17
|
export type MatchKind = "family" | "alias";
|
|
@@ -152,5 +155,15 @@ function normalizeEntry(raw: unknown, file: string): KnowledgeBaseEntry {
|
|
|
152
155
|
}
|
|
153
156
|
entry.quirks = candidate.quirks as Record<string, unknown>;
|
|
154
157
|
}
|
|
158
|
+
const canonicalMetadata = candidate["clio-coder"];
|
|
159
|
+
const legacyMetadata = candidate.clio;
|
|
160
|
+
if (legacyMetadata !== undefined) warnLegacyNaming("clio: model metadata", "clio-coder: model metadata");
|
|
161
|
+
const metadata = canonicalMetadata ?? legacyMetadata;
|
|
162
|
+
if (metadata !== undefined) {
|
|
163
|
+
if (typeof metadata !== "object" || metadata === null || Array.isArray(metadata)) {
|
|
164
|
+
throw new Error(`knowledge base file ${file}: entry '${family}' clio-coder metadata must be an object`);
|
|
165
|
+
}
|
|
166
|
+
entry.clioCoder = metadata as Record<string, unknown>;
|
|
167
|
+
}
|
|
155
168
|
return entry;
|
|
156
169
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* keeps free-form `quirks` (gpu tiers, runtime preferences, serving notes), so
|
|
4
4
|
* `KnowledgeBaseEntry.quirks` stays `Record<string, unknown>`. This module
|
|
5
5
|
* narrows the slice the engine consumes (KV cache layout, per-mode sampling)
|
|
6
|
-
* into a typed shape that flows through `model.
|
|
6
|
+
* into a typed shape that flows through `model.clioCoder.quirks` at synth time.
|
|
7
7
|
*
|
|
8
8
|
* Field naming follows the Hugging Face / model-card terminology so the YAML
|
|
9
9
|
* can be authored against the source-of-truth card. The OpenAI adapter
|
|
@@ -201,7 +201,7 @@ function extractThinkingQuirks(raw: unknown): ThinkingQuirks | undefined {
|
|
|
201
201
|
/**
|
|
202
202
|
* Pull the engine-visible quirks slice out of a free-form catalog quirks
|
|
203
203
|
* record. Returns `undefined` when nothing engine-relevant is configured so
|
|
204
|
-
* `model.
|
|
204
|
+
* `model.clioCoder.quirks` only gets attached when it carries information.
|
|
205
205
|
*/
|
|
206
206
|
export function extractLocalModelQuirks(raw: unknown): LocalModelQuirks | undefined {
|
|
207
207
|
if (!isRecord(raw)) return undefined;
|
|
@@ -14,9 +14,9 @@ export interface TargetPricing {
|
|
|
14
14
|
cacheWrite?: number;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
export type TargetLifecycle = "user-managed" | "clio-managed";
|
|
17
|
+
// Canonical persisted lifecycle name. Readers temporarily normalize the
|
|
18
|
+
// released `clio-managed` spelling at the settings boundary.
|
|
19
|
+
export type TargetLifecycle = "user-managed" | "clio-coder-managed";
|
|
20
20
|
|
|
21
21
|
export interface LmStudioLoadSettings {
|
|
22
22
|
contextLength?: number;
|
|
@@ -12,7 +12,7 @@ export function createResourcesBundle(
|
|
|
12
12
|
...(options.cwd !== undefined ? { cwd: options.cwd } : {}),
|
|
13
13
|
...(options.reservedPromptNames !== undefined ? { reservedPromptNames: options.reservedPromptNames } : {}),
|
|
14
14
|
skills: () => ({
|
|
15
|
-
...skillOptions(config()?.get().
|
|
15
|
+
...skillOptions(config()?.get().integrations.projectResources.trustProjectImports === true, options),
|
|
16
16
|
}),
|
|
17
17
|
});
|
|
18
18
|
const extension: DomainExtension = {
|
|
@@ -68,11 +68,14 @@ export {
|
|
|
68
68
|
parsePendingSkillRequests,
|
|
69
69
|
parseSkillCommand,
|
|
70
70
|
type Skill,
|
|
71
|
+
type SkillCatalogInvalidReason,
|
|
72
|
+
type SkillCatalogValidity,
|
|
71
73
|
type SkillExpansion,
|
|
72
74
|
type SkillList,
|
|
73
75
|
type SkillProvenance,
|
|
74
76
|
type SkillRoot,
|
|
75
77
|
type SkillSource,
|
|
78
|
+
skillCatalogValidity,
|
|
76
79
|
} from "./skills/loader.js";
|
|
77
80
|
export {
|
|
78
81
|
type DiscoverMarketplaceOptions,
|
|
@@ -37,7 +37,7 @@ function isRecord(value: unknown): value is Record<string, unknown> {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
function catalogPath(): string {
|
|
40
|
-
const configured = readSettings().library.catalog;
|
|
40
|
+
const configured = readSettings().integrations.library.catalog;
|
|
41
41
|
return path.resolve(configured ?? path.join(clioConfigDir(), "library.yaml"));
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -283,17 +283,17 @@ export function installLibraryPlan(plan: LibraryInstallPlan): void {
|
|
|
283
283
|
}
|
|
284
284
|
|
|
285
285
|
function confirmedRemote(): string {
|
|
286
|
-
const settings = readSettings().library;
|
|
286
|
+
const settings = readSettings().integrations.library;
|
|
287
287
|
if (!settings.remote || settings.remote !== settings.confirmedRemote) throw new Error("library_remote_unconfirmed");
|
|
288
288
|
return settings.remote;
|
|
289
289
|
}
|
|
290
290
|
|
|
291
291
|
export function confirmLibraryRemote(url: string): void {
|
|
292
|
-
const current = readSettings().library.remote;
|
|
292
|
+
const current = readSettings().integrations.library.remote;
|
|
293
293
|
if (current !== null && current !== url) throw new Error("library_remote_mismatch");
|
|
294
294
|
updateSettings((settings) => {
|
|
295
|
-
if (settings.library.remote === null) settings.library.remote = url;
|
|
296
|
-
settings.library.confirmedRemote = url;
|
|
295
|
+
if (settings.integrations.library.remote === null) settings.integrations.library.remote = url;
|
|
296
|
+
settings.integrations.library.confirmedRemote = url;
|
|
297
297
|
});
|
|
298
298
|
}
|
|
299
299
|
|
|
@@ -307,7 +307,7 @@ export async function syncLibrary(
|
|
|
307
307
|
direction: "sync" | "push",
|
|
308
308
|
runner: LibraryCommandRunner = runCommandVector,
|
|
309
309
|
): Promise<void> {
|
|
310
|
-
const settings = readSettings().library;
|
|
310
|
+
const settings = readSettings().integrations.library;
|
|
311
311
|
if (!settings.sync) throw new Error("library_sync_disabled");
|
|
312
312
|
const remote = confirmedRemote();
|
|
313
313
|
const cwd = path.dirname(catalogPath());
|
|
@@ -393,7 +393,7 @@ export function expandPromptTemplateInput(input: string, templates: PromptTempla
|
|
|
393
393
|
};
|
|
394
394
|
}
|
|
395
395
|
if (!template.trusted) {
|
|
396
|
-
const message = `prompt template ${template.name} comes from an untrusted project root; set
|
|
396
|
+
const message = `prompt template ${template.name} comes from an untrusted project root; set integrations.projectResources.trustProjectImports to use it`;
|
|
397
397
|
return {
|
|
398
398
|
expanded: false,
|
|
399
399
|
text: input,
|
|
@@ -2,7 +2,8 @@ import { createHash } from "node:crypto";
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Frontmatter keys owned by the install lifecycle, recognized both at the top
|
|
5
|
-
* level (legacy flat form) and nested under the reserved `clio:`
|
|
5
|
+
* level (legacy flat form) and nested under the reserved `clio-coder:` or
|
|
6
|
+
* released `clio:` block.
|
|
6
7
|
* Stripped before hashing so upstream and installed copies compare on
|
|
7
8
|
* content, not on when or how a copy was installed. Registry identity
|
|
8
9
|
* (`registry-id`, `registry-url`) is deliberately NOT here: it names which
|
|
@@ -64,7 +65,7 @@ export function frontmatterRegion(rawText: string): FrontmatterRegion | null {
|
|
|
64
65
|
export function stripProvenanceLines(lines: ReadonlyArray<string>): string[] {
|
|
65
66
|
const kept: string[] = [];
|
|
66
67
|
let dropIndent: number | null = null;
|
|
67
|
-
let
|
|
68
|
+
let inProductBlock = false;
|
|
68
69
|
for (const line of lines) {
|
|
69
70
|
const indent = line.length - line.trimStart().length;
|
|
70
71
|
if (dropIndent !== null && line.trim().length > 0 && indent > dropIndent) continue;
|
|
@@ -72,19 +73,19 @@ export function stripProvenanceLines(lines: ReadonlyArray<string>): string[] {
|
|
|
72
73
|
const keyMatch = line.match(/^([ \t]*)([A-Za-z][A-Za-z0-9-]*):/);
|
|
73
74
|
const key = keyMatch?.[2];
|
|
74
75
|
if (key !== undefined) {
|
|
75
|
-
if (indent === 0)
|
|
76
|
-
if (PROVENANCE_KEYS.has(key) && (indent === 0 ||
|
|
76
|
+
if (indent === 0) inProductBlock = key === "clio-coder" || key === "clio";
|
|
77
|
+
if (PROVENANCE_KEYS.has(key) && (indent === 0 || inProductBlock)) {
|
|
77
78
|
dropIndent = indent;
|
|
78
79
|
continue;
|
|
79
80
|
}
|
|
80
81
|
}
|
|
81
82
|
kept.push(line);
|
|
82
83
|
}
|
|
83
|
-
// A
|
|
84
|
+
// A product mapping whose children were all lifecycle keys is now empty;
|
|
84
85
|
// keep it and a source that never had the block reads as drifted from its
|
|
85
86
|
// own installed copy. Drop the dangling key line.
|
|
86
87
|
return kept.filter((line, index) => {
|
|
87
|
-
if (!/^clio:\s*$/.test(line)) return true;
|
|
88
|
+
if (!/^(?:clio-coder|clio):\s*$/.test(line)) return true;
|
|
88
89
|
for (let next = index + 1; next < kept.length; next += 1) {
|
|
89
90
|
const candidate = kept[next] as string;
|
|
90
91
|
if (candidate.trim().length === 0) continue;
|
|
@@ -29,7 +29,7 @@ export interface SkillEvalParseResult {
|
|
|
29
29
|
|
|
30
30
|
// Tolerates ASCII dash/colon and the en/em dashes older evals.md files used.
|
|
31
31
|
// The canonical prefix is S ("## S1 - title"); discipline skills use other
|
|
32
|
-
// letters (clio-dev's D1), so any single capital letter is accepted.
|
|
32
|
+
// letters (clio-coder-dev's D1), so any single capital letter is accepted.
|
|
33
33
|
const SCENARIO_HEADING = /^##\s+([A-Z])(\d+)\s*[-:–—]\s*(.+?)\s*$/;
|
|
34
34
|
|
|
35
35
|
export function parseSkillEvals(markdown: string): SkillEvalParseResult {
|
|
@@ -140,14 +140,33 @@ interface ProvenanceFields {
|
|
|
140
140
|
installedBy?: "worker";
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
+
function canonicalizeProductMetadataBlock(lines: ReadonlyArray<string>): string[] {
|
|
144
|
+
const hasCanonical = lines.some((line) => /^clio-coder:/.test(line));
|
|
145
|
+
const canonical: string[] = [];
|
|
146
|
+
let dropLegacyChildren = false;
|
|
147
|
+
for (const line of lines) {
|
|
148
|
+
if (/^clio:/.test(line)) {
|
|
149
|
+
dropLegacyChildren = hasCanonical;
|
|
150
|
+
if (!hasCanonical) canonical.push(line.replace(/^clio:/, "clio-coder:"));
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
if (dropLegacyChildren) {
|
|
154
|
+
if (line.trim().length === 0 || /^[ \t]/.test(line)) continue;
|
|
155
|
+
dropLegacyChildren = false;
|
|
156
|
+
}
|
|
157
|
+
canonical.push(line);
|
|
158
|
+
}
|
|
159
|
+
return canonical;
|
|
160
|
+
}
|
|
161
|
+
|
|
143
162
|
/**
|
|
144
163
|
* Replace install-lifecycle frontmatter with the recorded fields, written
|
|
145
|
-
* nested under the reserved `clio:` block (merged into an existing block-style
|
|
146
|
-
* `clio:` mapping when the skill carries one). Registry identity lines
|
|
164
|
+
* nested under the reserved `clio-coder:` block (merged into an existing block-style
|
|
165
|
+
* `clio-coder:` mapping when the skill carries one). Registry identity lines
|
|
147
166
|
* (`registry-id`, `registry-url`) are content, not lifecycle, so they survive
|
|
148
167
|
* the install and keep pinned drift checks working on the installed copy.
|
|
149
168
|
*
|
|
150
|
-
* A flow-style `clio: {...}` value cannot take appended block lines, so that
|
|
169
|
+
* A flow-style `clio-coder: {...}` value cannot take appended block lines, so that
|
|
151
170
|
* rare shape falls back to the legacy flat stamps, which the hash and loader
|
|
152
171
|
* still understand.
|
|
153
172
|
*/
|
|
@@ -166,21 +185,24 @@ function injectProvenanceFrontmatter(rawText: string, fields: ProvenanceFields):
|
|
|
166
185
|
"audit: unknown",
|
|
167
186
|
...(fields.installedBy ? [`installed-by: ${yamlQuote(fields.installedBy)}`] : []),
|
|
168
187
|
];
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
|
|
188
|
+
const canonicalKept = canonicalizeProductMetadataBlock(kept);
|
|
189
|
+
const clioIndex = canonicalKept.findIndex((line) => /^clio-coder:/.test(line));
|
|
190
|
+
if (clioIndex >= 0 && !/^clio-coder:\s*$/.test(canonicalKept[clioIndex] as string)) {
|
|
191
|
+
return `${region.head}${[...canonicalKept, ...stamps].join("\n")}${region.tail}`;
|
|
172
192
|
}
|
|
173
193
|
const nested = stamps.map((line) => ` ${line}`);
|
|
174
194
|
if (clioIndex < 0) {
|
|
175
|
-
return `${region.head}${[...
|
|
195
|
+
return `${region.head}${[...canonicalKept, "clio-coder:", ...nested].join("\n")}${region.tail}`;
|
|
176
196
|
}
|
|
177
197
|
let blockEnd = clioIndex + 1;
|
|
178
|
-
while (blockEnd <
|
|
179
|
-
const line =
|
|
198
|
+
while (blockEnd < canonicalKept.length) {
|
|
199
|
+
const line = canonicalKept[blockEnd] as string;
|
|
180
200
|
if (line.trim().length > 0 && !/^[ \t]/.test(line)) break;
|
|
181
201
|
blockEnd += 1;
|
|
182
202
|
}
|
|
183
|
-
return `${region.head}${[...
|
|
203
|
+
return `${region.head}${[...canonicalKept.slice(0, blockEnd), ...nested, ...canonicalKept.slice(blockEnd)].join(
|
|
204
|
+
"\n",
|
|
205
|
+
)}${region.tail}`;
|
|
184
206
|
}
|
|
185
207
|
|
|
186
208
|
function resolveSkillDir(target: string): string {
|
|
@@ -205,7 +227,7 @@ function fetchSource(spec: SkillSourceSpec): FetchedSource {
|
|
|
205
227
|
if (spec.kind === "local") {
|
|
206
228
|
return { skillDir: resolveSkillDir(spec.path), cleanup: () => {} };
|
|
207
229
|
}
|
|
208
|
-
const tmp = mkdtempSync(path.join(tmpdir(), "clio-skill-"));
|
|
230
|
+
const tmp = mkdtempSync(path.join(tmpdir(), "clio-coder-skill-"));
|
|
209
231
|
const cleanup = (): void => rmSync(tmp, { recursive: true, force: true });
|
|
210
232
|
try {
|
|
211
233
|
execFileSync("git", ["clone", "--depth", "1", "--branch", spec.branch, spec.cloneUrl, tmp], {
|
|
@@ -358,7 +380,9 @@ export function installSkillFromSource(input: InstallSkillInput): InstallSkillRe
|
|
|
358
380
|
function managedSkills(cwd: string, configDir?: string): Skill[] {
|
|
359
381
|
const list = loadSkills({ cwd, ...(configDir ? { configDir } : {}) });
|
|
360
382
|
// Only Clio-managed roots are update targets; compat roots belong to other harnesses.
|
|
361
|
-
return list.items.filter(
|
|
383
|
+
return list.items.filter(
|
|
384
|
+
(skill) => skill.source === "clio-coder" && (skill.scope === "user" || skill.scope === "project"),
|
|
385
|
+
);
|
|
362
386
|
}
|
|
363
387
|
|
|
364
388
|
function updateOne(skill: Skill, force: boolean): SkillUpdateReport {
|
|
@@ -2,6 +2,7 @@ import { createHash } from "node:crypto";
|
|
|
2
2
|
import { type Dirent, existsSync, readdirSync, readFileSync, realpathSync } from "node:fs";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
import path from "node:path";
|
|
5
|
+
import { warnLegacyNaming } from "../../../core/naming-compat.js";
|
|
5
6
|
import type { PendingSkillRequest } from "../../../core/skill-activation.js";
|
|
6
7
|
import { type ToolName, ToolNames } from "../../../core/tool-names.js";
|
|
7
8
|
import { clioConfigDir } from "../../../core/xdg.js";
|
|
@@ -47,7 +48,7 @@ const CORE_FRONTMATTER_KEYS = new Set([
|
|
|
47
48
|
* only encodes collision precedence tiers shared across resource kinds.
|
|
48
49
|
*/
|
|
49
50
|
export type SkillSource =
|
|
50
|
-
| "clio"
|
|
51
|
+
| "clio-coder"
|
|
51
52
|
| "agents"
|
|
52
53
|
| "claude"
|
|
53
54
|
| "codex"
|
|
@@ -216,9 +217,20 @@ function defaultPrecedenceForScope(scope: ResourceScope): number {
|
|
|
216
217
|
* this gate with skills: both substitute another agent's project file into
|
|
217
218
|
* Clio's context, so one opt-in covers both.
|
|
218
219
|
*/
|
|
220
|
+
let warnedLegacyProjectTrustEnv = false;
|
|
221
|
+
|
|
219
222
|
export function projectCompatTrusted(explicit?: boolean): boolean {
|
|
220
223
|
if (explicit === true) return true;
|
|
221
|
-
|
|
224
|
+
if (process.env.CLIO_CODER_TRUST_PROJECT_RESOURCES === "1") return true;
|
|
225
|
+
if (process.env.CLIO_CODER_TRUST_PROJECT_SKILLS !== "1") return false;
|
|
226
|
+
if (!warnedLegacyProjectTrustEnv) {
|
|
227
|
+
warnedLegacyProjectTrustEnv = true;
|
|
228
|
+
process.emitWarning("CLIO_CODER_TRUST_PROJECT_SKILLS is deprecated; use CLIO_CODER_TRUST_PROJECT_RESOURCES instead", {
|
|
229
|
+
code: "CLIO_CODER_DEPRECATED_ENV",
|
|
230
|
+
type: "DeprecationWarning",
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
return true;
|
|
222
234
|
}
|
|
223
235
|
|
|
224
236
|
/**
|
|
@@ -268,7 +280,7 @@ export function defaultSkillRoots(input: LoadSkillsInput = {}): SkillRoot[] {
|
|
|
268
280
|
roots.push({
|
|
269
281
|
path: path.join(configDir, "skills"),
|
|
270
282
|
scope: "user",
|
|
271
|
-
source: "clio",
|
|
283
|
+
source: "clio-coder",
|
|
272
284
|
origin: "config",
|
|
273
285
|
precedence: SKILL_PRECEDENCE.user,
|
|
274
286
|
trusted: true,
|
|
@@ -292,7 +304,7 @@ export function defaultSkillRoots(input: LoadSkillsInput = {}): SkillRoot[] {
|
|
|
292
304
|
roots.push({
|
|
293
305
|
path: path.join(cwd, ".clio-coder", "skills"),
|
|
294
306
|
scope: "project",
|
|
295
|
-
source: "clio",
|
|
307
|
+
source: "clio-coder",
|
|
296
308
|
origin: "project",
|
|
297
309
|
precedence: SKILL_PRECEDENCE.project,
|
|
298
310
|
trusted: true,
|
|
@@ -445,24 +457,36 @@ function extractMetadata(frontmatter: Record<string, unknown>): Record<string, u
|
|
|
445
457
|
const metadata: Record<string, unknown> = {};
|
|
446
458
|
for (const [key, value] of Object.entries(frontmatter)) {
|
|
447
459
|
if (CORE_FRONTMATTER_KEYS.has(key)) continue;
|
|
460
|
+
if (key === "clio-coder") {
|
|
461
|
+
metadata.clioCoder = value;
|
|
462
|
+
continue;
|
|
463
|
+
}
|
|
464
|
+
if (key === "clio") {
|
|
465
|
+
warnLegacyNaming("clio: skill metadata", "clio-coder: skill metadata");
|
|
466
|
+
if (!("clio-coder" in frontmatter)) metadata.clioCoder = value;
|
|
467
|
+
continue;
|
|
468
|
+
}
|
|
448
469
|
metadata[key] = value;
|
|
449
470
|
}
|
|
450
471
|
return metadata;
|
|
451
472
|
}
|
|
452
473
|
|
|
453
474
|
function extractProvenance(frontmatter: Record<string, unknown>): SkillProvenance | undefined {
|
|
454
|
-
// Provenance lives nested under the reserved `clio:` block; the flat
|
|
475
|
+
// Provenance lives nested under the reserved `clio-coder:` block; the flat
|
|
455
476
|
// top-level keys remain readable for already-installed copies stamped
|
|
456
477
|
// before the nested form existed.
|
|
457
|
-
const
|
|
458
|
-
const
|
|
459
|
-
|
|
460
|
-
|
|
478
|
+
const canonicalRaw = frontmatter["clio-coder"];
|
|
479
|
+
const legacyRaw = frontmatter.clio;
|
|
480
|
+
if (legacyRaw !== undefined) warnLegacyNaming("clio: skill metadata", "clio-coder: skill metadata");
|
|
481
|
+
const clioCoderRaw = canonicalRaw ?? legacyRaw;
|
|
482
|
+
const clioCoder =
|
|
483
|
+
clioCoderRaw !== null && typeof clioCoderRaw === "object" && !Array.isArray(clioCoderRaw)
|
|
484
|
+
? (clioCoderRaw as Record<string, unknown>)
|
|
461
485
|
: undefined;
|
|
462
486
|
const field = (...keys: string[]): string | null => {
|
|
463
487
|
for (const key of keys) {
|
|
464
|
-
if (
|
|
465
|
-
const nested = stringField(
|
|
488
|
+
if (clioCoder) {
|
|
489
|
+
const nested = stringField(clioCoder, key);
|
|
466
490
|
if (nested !== null) return nested;
|
|
467
491
|
}
|
|
468
492
|
}
|
|
@@ -621,7 +645,9 @@ function loadSkillFile(
|
|
|
621
645
|
|
|
622
646
|
const pathSubject = validationSubject(filePath);
|
|
623
647
|
const frontmatterName = stringField(parsed.frontmatter, "name");
|
|
624
|
-
const
|
|
648
|
+
const rawName = frontmatterName ?? pathSubject;
|
|
649
|
+
const name = rawName === "clio-dev" ? "clio-coder-dev" : rawName === "clio-test" ? "clio-coder-test" : rawName;
|
|
650
|
+
if (name !== rawName) warnLegacyNaming(rawName, name);
|
|
625
651
|
const description = stringField(parsed.frontmatter, "description");
|
|
626
652
|
|
|
627
653
|
for (const message of validateDescription(description)) diagnostics.push({ type: "warning", message, path: filePath });
|
|
@@ -658,7 +684,7 @@ function loadSkillFile(
|
|
|
658
684
|
disableModelInvocation: booleanField(parsed.frontmatter, "disable-model-invocation"),
|
|
659
685
|
...(allowedTools ? { allowedTools } : {}),
|
|
660
686
|
...(disallowedTools ? { disallowedTools } : {}),
|
|
661
|
-
source: root.source ?? "clio",
|
|
687
|
+
source: root.source ?? "clio-coder",
|
|
662
688
|
scope,
|
|
663
689
|
hash: sha256(raw),
|
|
664
690
|
normalizedHash: normalizedSkillHash(raw),
|
|
@@ -893,6 +919,39 @@ export function modelVisibleSkills(skills: ReadonlyArray<Skill>): Skill[] {
|
|
|
893
919
|
return skills.filter((skill) => skill.trusted && !skill.disableModelInvocation);
|
|
894
920
|
}
|
|
895
921
|
|
|
922
|
+
/** Why a loaded skill catalog is not valid. Ordered by which failure to report first. */
|
|
923
|
+
export type SkillCatalogInvalidReason = "load-error" | "collision" | "unloadable-file" | "no-skills";
|
|
924
|
+
|
|
925
|
+
export interface SkillCatalogValidity {
|
|
926
|
+
ok: boolean;
|
|
927
|
+
reason: SkillCatalogInvalidReason | null;
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
/**
|
|
931
|
+
* The rule `clio-coder skills validate` applies, in one place.
|
|
932
|
+
*
|
|
933
|
+
* A scanned file that produced no loaded skill is malformed, and a collision
|
|
934
|
+
* drops a skill: both make the catalog invalid, as does any hard error. Benign
|
|
935
|
+
* warnings (name/path mismatch, name format, description length) attach to a
|
|
936
|
+
* file that still loaded, so their path is among the loaded skills and they do
|
|
937
|
+
* not fail validation.
|
|
938
|
+
*
|
|
939
|
+
* Lives here rather than in the CLI because two callers now need the same
|
|
940
|
+
* answer, and a verdict that drifts between the terminal and a GUI is worse
|
|
941
|
+
* than no verdict at all.
|
|
942
|
+
*/
|
|
943
|
+
export function skillCatalogValidity(list: SkillList): SkillCatalogValidity {
|
|
944
|
+
if (list.diagnostics.some((diag) => diag.type === "error")) return { ok: false, reason: "load-error" };
|
|
945
|
+
if (list.diagnostics.some((diag) => diag.type === "collision")) return { ok: false, reason: "collision" };
|
|
946
|
+
const loadedPaths = new Set(list.items.map((skill) => skill.filePath));
|
|
947
|
+
const unloadable = list.diagnostics.some(
|
|
948
|
+
(diag) => diag.type === "warning" && diag.path !== undefined && !loadedPaths.has(diag.path),
|
|
949
|
+
);
|
|
950
|
+
if (unloadable) return { ok: false, reason: "unloadable-file" };
|
|
951
|
+
if (list.items.length === 0) return { ok: false, reason: "no-skills" };
|
|
952
|
+
return { ok: true, reason: null };
|
|
953
|
+
}
|
|
954
|
+
|
|
896
955
|
export function parseSkillCommand(input: string): { name: string; args: string } | null {
|
|
897
956
|
const trimmed = input.trim();
|
|
898
957
|
if (!trimmed.startsWith("/skill ")) return null;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
import { warnLegacyNaming } from "../../../core/naming-compat.js";
|
|
3
4
|
import { resolvePackageRoot } from "../../../core/package-root.js";
|
|
4
5
|
import { clioConfigDir } from "../../../core/xdg.js";
|
|
5
6
|
import {
|
|
@@ -55,6 +56,8 @@ export interface MarketplaceSkill {
|
|
|
55
56
|
audit?: "pass" | "warn" | "fail" | "unknown";
|
|
56
57
|
/** Catalog grouping ("git", "research", ...); absent in a flat catalog. */
|
|
57
58
|
category?: string;
|
|
59
|
+
/** Trigger phrases from the skill's frontmatter, for local promotion matching. */
|
|
60
|
+
triggers?: string[];
|
|
58
61
|
origin: MarketplaceSkillOrigin;
|
|
59
62
|
requires?: LibraryRequirementRef[];
|
|
60
63
|
}
|
|
@@ -131,6 +134,16 @@ function optionalString(value: unknown): string | undefined {
|
|
|
131
134
|
return typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
|
|
132
135
|
}
|
|
133
136
|
|
|
137
|
+
/** Non-empty trimmed trigger phrases, or undefined when the field is absent or unusable. */
|
|
138
|
+
function optionalTriggerList(value: unknown): string[] | undefined {
|
|
139
|
+
if (!Array.isArray(value)) return undefined;
|
|
140
|
+
const triggers = value
|
|
141
|
+
.filter((entry): entry is string => typeof entry === "string")
|
|
142
|
+
.map((entry) => entry.trim())
|
|
143
|
+
.filter((entry) => entry.length > 0);
|
|
144
|
+
return triggers.length > 0 ? triggers : undefined;
|
|
145
|
+
}
|
|
146
|
+
|
|
134
147
|
function indexAudit(value: unknown): MarketplaceSkill["audit"] {
|
|
135
148
|
return value === "pass" || value === "warn" || value === "fail" || value === "unknown" ? value : undefined;
|
|
136
149
|
}
|
|
@@ -151,6 +164,7 @@ function parseMarketplaceIndex(indexPath: string, diagnostics: string[] = []): M
|
|
|
151
164
|
const version = optionalString(record.version);
|
|
152
165
|
const audit = indexAudit(record.audit);
|
|
153
166
|
const category = optionalString(record.category);
|
|
167
|
+
const triggers = optionalTriggerList(record.triggers);
|
|
154
168
|
if (record.kind !== undefined && !["skill", "agent", "prompt", "fleet"].includes(String(record.kind))) {
|
|
155
169
|
diagnostics.push(`skill marketplace index entry has unsupported kind: ${skill.name}`);
|
|
156
170
|
return [];
|
|
@@ -176,6 +190,7 @@ function parseMarketplaceIndex(indexPath: string, diagnostics: string[] = []): M
|
|
|
176
190
|
...(version ? { version } : {}),
|
|
177
191
|
...(audit ? { audit } : {}),
|
|
178
192
|
...(category ? { category } : {}),
|
|
193
|
+
...(triggers ? { triggers } : {}),
|
|
179
194
|
...(requires ? { requires } : {}),
|
|
180
195
|
origin: "index" as const,
|
|
181
196
|
},
|
|
@@ -242,6 +257,7 @@ function catalogCategory(catalogDir: string, baseDir: string): string | undefine
|
|
|
242
257
|
function catalogEntry(skill: Skill, catalogDir: string): MarketplaceSkill {
|
|
243
258
|
const version = typeof skill.metadata.version === "string" ? skill.metadata.version : undefined;
|
|
244
259
|
const category = catalogCategory(catalogDir, skill.baseDir);
|
|
260
|
+
const triggers = optionalTriggerList(skill.metadata.triggers);
|
|
245
261
|
return {
|
|
246
262
|
name: skill.name,
|
|
247
263
|
description: skill.description,
|
|
@@ -249,6 +265,7 @@ function catalogEntry(skill: Skill, catalogDir: string): MarketplaceSkill {
|
|
|
249
265
|
...(version ? { version } : {}),
|
|
250
266
|
...(skill.provenance?.audit ? { audit: skill.provenance.audit } : {}),
|
|
251
267
|
...(category ? { category } : {}),
|
|
268
|
+
...(triggers ? { triggers } : {}),
|
|
252
269
|
origin: "catalog",
|
|
253
270
|
kind: "skill",
|
|
254
271
|
};
|
|
@@ -311,7 +328,9 @@ export function getMarketplaceSkills(options: DiscoverMarketplaceOptions = {}):
|
|
|
311
328
|
* an existing install always requires an explicit `force: true`.
|
|
312
329
|
*/
|
|
313
330
|
export function installSkill(input: InstallSkillInput): InstallSkillResult {
|
|
314
|
-
const
|
|
331
|
+
const requested = input.source.trim();
|
|
332
|
+
const source = requested === "clio-dev" ? "clio-coder-dev" : requested === "clio-test" ? "clio-coder-test" : requested;
|
|
333
|
+
if (source !== requested) warnLegacyNaming(requested, source);
|
|
315
334
|
const spec = parseSkillSourceSpec(source);
|
|
316
335
|
if (spec?.kind === "local" && isSkillName(source) && !existsSync(spec.path)) {
|
|
317
336
|
const skill = getMarketplaceSkills({ ...(input.cwd ? { cwd: input.cwd } : {}) }).find(
|
|
@@ -322,5 +341,5 @@ export function installSkill(input: InstallSkillInput): InstallSkillResult {
|
|
|
322
341
|
}
|
|
323
342
|
return installSkillFromSource({ ...input, source: skill.sourceUrl });
|
|
324
343
|
}
|
|
325
|
-
return installSkillFromSource(input);
|
|
344
|
+
return installSkillFromSource({ ...input, source });
|
|
326
345
|
}
|