@iowarp/clio-coder 0.4.0 → 0.4.2
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 +131 -0
- package/CONTRIBUTING.md +59 -36
- package/README.md +407 -375
- package/SECURITY.md +2 -1
- package/dist/{acp-G5WJBNCT.js → acp-TMDQZDIG.js} +14 -14
- package/dist/{agents-FMV2Q5G4.js → agents-5N5NG3XG.js} +45 -34
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-3IDSJEIK.js → auth-Z5CCBXKQ.js} +22 -21
- package/dist/{builtins-XCZWXSC7.js → builtins-K6TNDT24.js} +6 -6
- package/dist/{chunk-GR5G2PVF.js → chunk-2HFQNRV3.js} +15 -10
- package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
- package/dist/{chunk-HJJTYUHX.js → chunk-2NHR3NAY.js} +168 -1406
- package/dist/chunk-2X4RYJTJ.js +39 -0
- package/dist/{chunk-UXMFQ54G.js → chunk-2Z2IKEXI.js} +39 -43
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/chunk-34BHNEE3.js +1846 -0
- package/dist/{chunk-YJX4SHTD.js → chunk-35MSIRKH.js} +9 -4
- package/dist/chunk-3EBYEESD.js +314 -0
- package/dist/{chunk-CTJ4RNAA.js → chunk-3F7VUY77.js} +2 -2
- package/dist/chunk-3KIPBMUA.js +308 -0
- package/dist/chunk-3M6DQK6S.js +362 -0
- package/dist/{chunk-BPKCPIL7.js → chunk-462T4EGZ.js} +3 -3
- package/dist/{chunk-QLFS5GO2.js → chunk-4JDLP6ZS.js} +44 -37
- package/dist/{chunk-LDQ2ZF2M.js → chunk-4O6MANBS.js} +6 -6
- package/dist/{chunk-O6TL7WWY.js → chunk-54ODD65L.js} +6 -6
- package/dist/{chunk-JDG2WCRO.js → chunk-5KW52TEP.js} +5 -5
- package/dist/{chunk-NHLBIGRH.js → chunk-5PFYMY2V.js} +41 -18
- package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
- package/dist/chunk-77QIVUZB.js +1334 -0
- package/dist/{chunk-HWHKMHUA.js → chunk-7BHIY2MW.js} +9 -15
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-VAZSBTKF.js → chunk-AZ4WMN4W.js} +2 -2
- package/dist/{chunk-B7OBL7PK.js → chunk-B74PXLU7.js} +21 -11
- package/dist/{chunk-CY6FY24N.js → chunk-B7HM5Z7T.js} +15 -15
- package/dist/{chunk-ULC6OTWO.js → chunk-BO7Y52RY.js} +88 -27
- package/dist/chunk-BTK3SSSK.js +67 -0
- package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
- package/dist/{chunk-DQITNCXG.js → chunk-BYMNWQ7O.js} +149 -159
- package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
- package/dist/{chunk-Z4TXYIEG.js → chunk-CRFOIAX3.js} +10 -10
- package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/{chunk-3BT2XMV4.js → chunk-CYZW7JHJ.js} +53 -60
- package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-X3YGUTOB.js → chunk-DYHAXKHD.js} +90 -62
- package/dist/{chunk-QBJA7R7N.js → chunk-DZAW46HP.js} +3 -3
- package/dist/{chunk-MLKNTWH2.js → chunk-DZEK6CJN.js} +22 -22
- package/dist/{chunk-K5C3NCBD.js → chunk-E7GT7O5N.js} +5 -5
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-F2I26BDK.js +66 -0
- package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-32KWKNSF.js → chunk-FVDGR2ZL.js} +4 -4
- package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
- package/dist/{chunk-SJ5ZKQ4S.js → chunk-HIICAHCJ.js} +2 -2
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-WZR7K7ZX.js → chunk-HKMD33FO.js} +32 -83
- package/dist/chunk-HLAFFSEK.js +360 -0
- package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
- package/dist/{chunk-KFZI4NIL.js → chunk-I64IFBLB.js} +152 -31
- package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
- package/dist/{chunk-BUMFYQFY.js → chunk-I66ZTYNP.js} +543 -267
- package/dist/{chunk-2OQE55CK.js → chunk-I7XBWTYH.js} +2 -2
- package/dist/{chunk-GKF55TAZ.js → chunk-IDNA72AH.js} +104 -3
- package/dist/{chunk-GCSMB2KY.js → chunk-IKOZFYBN.js} +1 -1
- package/dist/{chunk-J4W7KFM7.js → chunk-IKSLQ4XV.js} +5439 -3475
- package/dist/{chunk-6DB53AJS.js → chunk-IMXMHHMQ.js} +171 -30
- package/dist/{chunk-AB44T6BB.js → chunk-JBCS7CRR.js} +8 -7
- package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
- package/dist/{chunk-SP2RXXYO.js → chunk-JWJGP5DQ.js} +10 -10
- package/dist/{chunk-HZHHCK24.js → chunk-KKOJXO6R.js} +527 -325
- package/dist/chunk-KPXDY6QF.js +47 -0
- package/dist/{chunk-LQ3DZAMX.js → chunk-LJID3DYZ.js} +8 -2
- package/dist/{chunk-7MCTRUCE.js → chunk-M2DAX4F6.js} +2 -2
- package/dist/{chunk-VEO4AP2K.js → chunk-M2WXEHER.js} +4 -3
- package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
- package/dist/{chunk-YDFRH54B.js → chunk-MCMZMDAC.js} +4 -4
- package/dist/{chunk-J5Q24KAG.js → chunk-MNJGS2IN.js} +5 -6
- package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
- package/dist/chunk-NMJXSHBJ.js +283 -0
- package/dist/{chunk-VYMXRQI6.js → chunk-O3YUNJZ2.js} +88 -100
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-Z2RR6MAK.js → chunk-P75RZCJW.js} +28 -6
- package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
- package/dist/{chunk-DYJP44XW.js → chunk-PGF63K6I.js} +2 -2
- package/dist/chunk-PJX3WQUQ.js +42 -0
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-2JDWVJND.js → chunk-Q4XWMHX6.js} +5 -7
- package/dist/{chunk-W5VSYASO.js → chunk-QQLGQY2A.js} +46 -87
- package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
- package/dist/{chunk-C2LTL2W6.js → chunk-RLYRBIYQ.js} +463 -180
- package/dist/{chunk-4ZG3XFUR.js → chunk-S66XZJOF.js} +14 -23
- package/dist/{chunk-I5VEOC6I.js → chunk-SSEYRH53.js} +13 -14
- package/dist/chunk-SZAA6XDG.js +30 -0
- package/dist/{chunk-CODPRO7Q.js → chunk-TPEQIQIE.js} +7 -7
- package/dist/{chunk-QLL7ILRG.js → chunk-UBRFI4HS.js} +1151 -614
- package/dist/{chunk-O4XIVISU.js → chunk-UH347SHR.js} +227 -47
- package/dist/{chunk-OQBA45DZ.js → chunk-UH632ZYL.js} +2 -2
- package/dist/chunk-UXCU4E3T.js +303 -0
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-IQ7KR472.js → chunk-VIA6RFQZ.js} +8 -13
- package/dist/{chunk-V5DHCITQ.js → chunk-VKPAQYEB.js} +49 -19
- package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-3XML7CDN.js → chunk-W4YEMFBX.js} +3 -3
- package/dist/{chunk-U77AMWDL.js → chunk-W6NIE6OW.js} +44 -23
- package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
- package/dist/{chunk-QREDIESB.js → chunk-X7IARSHT.js} +15 -9
- package/dist/{chunk-3URVFKWK.js → chunk-XE3PCIXH.js} +5 -5
- package/dist/{chunk-FEFIFZTL.js → chunk-XGDPUNND.js} +2 -2
- package/dist/{chunk-F4CKPOEQ.js → chunk-XOXV5GKE.js} +119 -38
- package/dist/chunk-XQRY4DTA.js +657 -0
- package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
- package/dist/{chunk-NQQH3YT7.js → chunk-YJISEZKC.js} +3 -3
- package/dist/{chunk-X75E3D2N.js → chunk-ZGNYYXQ6.js} +18 -16
- package/dist/{chunk-LY4S7GJC.js → chunk-ZNT2M6TG.js} +20 -18
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-IBEBSCYA.js → chunk-ZW4HH5JJ.js} +43 -34
- package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
- package/dist/cli/index.js +38 -37
- package/dist/{clio-2JXHBBY5.js → clio-7VB377CC.js} +12 -13
- package/dist/{code-nav-3YYRMYNF.js → code-nav-YVLCYA7V.js} +86 -18
- package/dist/codewiki/build-worker.js +1 -1
- package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
- package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
- package/dist/{config-QZPCMYSO.js → config-4HVOS65E.js} +112 -63
- package/dist/{configure-TEGEBYCA.js → configure-PIWO7B24.js} +25 -22
- package/dist/{context-E6H5RNMC.js → context-IYEHL3WQ.js} +53 -47
- package/dist/{context-GSXUE4CT.js → context-KQYIWPWT.js} +68 -42
- package/dist/{context-AV7OEZ4D.js → context-N6ZE3LGJ.js} +11 -11
- package/dist/{context-clear-SHIBYK6T.js → context-clear-G4OGZJDS.js} +53 -47
- package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-BWLF6LJP.js} +12 -11
- package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-2QQAITS3.js} +67 -58
- package/dist/{docs-23KQS3XK.js → docs-PD3EXDKU.js} +20 -25
- package/dist/doctor-LHBD36VU.js +773 -0
- package/dist/{eval-TFBYQH4H.js → eval-C45FYRJ6.js} +68 -49
- package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-6DEJPLBF.js} +7 -8
- package/dist/{evidence-ERGESKGN.js → evidence-6SHONYAF.js} +50 -44
- package/dist/{evolve-VDXTSYCJ.js → evolve-KRKMV72X.js} +49 -43
- package/dist/{extensions-7BGBHN57.js → extensions-KPZ2UHBB.js} +8 -6
- package/dist/{fleet-2RRVDF2V.js → fleet-IVTCKDHT.js} +93 -79
- package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EDWL3IT7.js} +10 -9
- package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-YP3YEFGK.js} +6 -6
- package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-ZFWKHY2M.js} +19 -15
- package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-FVUNCBML.js} +50 -45
- package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-UN5XED4R.js} +5 -9
- package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-XOWC4HSX.js} +22 -17
- package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-UN3SODEL.js} +48 -43
- package/dist/fleet-view-TWHJKCN6.js +96 -0
- package/dist/{init-DN2WWLFE.js → init-T2QORQ3Y.js} +72 -66
- package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
- package/dist/{interop-OZBKXAYL.js → interop-IN5I2A66.js} +13 -11
- package/dist/{library-YWZG7IMW.js → library-LSCATDLZ.js} +23 -18
- package/dist/{memory-I4C4HMLW.js → memory-HYOKAGGJ.js} +51 -45
- package/dist/{models-CEYXJBO6.js → models-2GPMFYCM.js} +42 -33
- package/dist/{monitor-NZ6GCI3P.js → monitor-E4ASVUJH.js} +56 -50
- package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-DDMPR3PY.js} +2676 -1507
- package/dist/{panes-KY6W3V2E.js → panes-E3RUXOW5.js} +5 -5
- package/dist/panes-IXKLOKA2.js +75 -0
- package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
- package/dist/{reset-DQ6FGCSH.js → reset-OAQP3W4O.js} +7 -8
- package/dist/{resources-BB3MVJMD.js → resources-OTRSN34L.js} +23 -17
- package/dist/{run-H2GQDUER.js → run-5DEYH5QK.js} +95 -84
- package/dist/{share-GTJN6A5O.js → share-IHWTLO3M.js} +26 -19
- package/dist/{skills-L55TEW6R.js → skills-IYMXMKW4.js} +25 -20
- package/dist/{skills-eval-XVXPH2JI.js → skills-eval-DROHSJAR.js} +63 -65
- package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-D7X4L4ZX.js} +21 -16
- package/dist/{slash-commands-ZSGASKJC.js → slash-commands-QBM7UZ3B.js} +38 -33
- package/dist/{steer-RZGSCY4R.js → steer-Z5DO23FJ.js} +3 -3
- package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
- package/dist/{targets-NCPZ644J.js → targets-P2FUC4IL.js} +64 -61
- package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-YREJ3JX2.js} +15 -10
- package/dist/{tools-DAF3DI3C.js → tools-5B7RO6MV.js} +10 -8
- package/dist/{trace-FYVW2MQA.js → trace-YMGMUM6A.js} +101 -8
- package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
- package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
- package/dist/{upgrade-3XPP6OQL.js → upgrade-PXK3S2YM.js} +36 -61
- package/dist/{usage-3NLHGTU2.js → usage-ME5MPXGX.js} +58 -53
- package/dist/{verifiers-SSQONKRT.js → verifiers-BVZ7IWOO.js} +10 -9
- package/dist/{verify-3U6J7FZI.js → verify-5K7ZKQFC.js} +9 -8
- package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPARV2K7.js} +2 -3
- package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-F5W5QTYY.js} +74 -70
- package/dist/{with-panes-MKB46MPQ.js → with-panes-BYOJCLAM.js} +78 -246
- package/dist/worker/entry.js +83 -63
- package/docs/README.md +176 -81
- package/docs/{acp.md → architecture/acp.md} +36 -20
- package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
- package/docs/{architecture.md → architecture/architecture.md} +43 -22
- package/docs/{artifact-placement.md → architecture/artifact-placement.md} +26 -23
- package/docs/architecture/artifact-versions.md +90 -0
- package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
- package/docs/{context-engine.md → architecture/context-engine.md} +25 -25
- package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
- package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
- package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
- package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
- package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
- package/docs/{model-catalog.md → architecture/model-catalog.md} +40 -17
- package/docs/{observability.md → architecture/observability.md} +26 -13
- package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
- package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +55 -20
- package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +35 -24
- package/docs/{safety-model.md → architecture/safety-model.md} +20 -15
- package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
- package/docs/architecture/time-conventions.md +125 -0
- package/docs/{trace-store.md → architecture/trace-store.md} +26 -13
- package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
- package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
- package/docs/{built-in-agents.md → guide/built-in-agents.md} +70 -46
- package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +73 -62
- package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -444
- package/docs/guide/configuration-reference.md +1158 -0
- package/docs/{environment-variables.md → guide/environment-variables.md} +31 -27
- package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +8 -3
- package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
- package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +47 -49
- package/docs/{glossary.md → guide/glossary.md} +14 -11
- package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +45 -14
- package/docs/guide/panes-and-files.md +290 -0
- package/docs/{proactive-memory.md → guide/proactive-memory.md} +79 -66
- package/docs/{resource-library.md → guide/resource-library.md} +13 -4
- package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +7 -3
- package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
- package/docs/{troubleshooting.md → guide/troubleshooting.md} +10 -5
- package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +13 -10
- package/docs/history/release-cut-checklist.md +207 -0
- package/docs/{development-pipeline.md → process/development-pipeline.md} +24 -26
- package/docs/process/documentation-coverage.md +100 -0
- package/docs/process/documentation-guide.md +187 -0
- package/docs/{eval-runner.md → process/eval-runner.md} +41 -50
- package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
- package/docs/{evolution.md → process/evolution.md} +2 -2
- package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +17 -10
- package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
- package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
- package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
- 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 +13 -21
- package/skills/README.md +51 -42
- package/skills/coding/ast-grep/SKILL.md +9 -3
- package/skills/coding/coding-standards/SKILL.md +9 -3
- package/skills/coding/prototype/SKILL.md +9 -3
- package/skills/coding/tdd/SKILL.md +9 -3
- package/skills/context/context-handoff/SKILL.md +13 -4
- package/skills/context/context-handoff/evals.md +3 -3
- package/skills/context/context-prime/SKILL.md +9 -3
- package/skills/context/context-prime/evals.md +2 -2
- package/skills/git/file-ticket/SKILL.md +10 -5
- 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 +9 -3
- package/skills/git/resolve-merge-conflicts/evals.md +2 -2
- package/skills/git/ship/SKILL.md +10 -4
- package/skills/git/ship/evals.md +4 -4
- package/skills/git/worktree-create/SKILL.md +8 -3
- package/skills/git/worktree-create/evals.md +6 -6
- package/skills/git/worktree-merge/SKILL.md +8 -3
- package/skills/git/worktree-merge/evals.md +6 -6
- package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +22 -12
- package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +5 -4
- package/skills/meta/clio-coder-test/SKILL.md +146 -0
- package/skills/meta/{clio-test → clio-coder-test}/evals.md +10 -5
- package/skills/meta/clio-coder-test/references/harness.md +102 -0
- package/skills/meta/clio-coder-test/references/test-map.md +96 -0
- package/skills/meta/credentials/SKILL.md +10 -3
- package/skills/meta/find-skills/SKILL.md +9 -3
- package/skills/meta/herdr/SKILL.md +9 -3
- package/skills/meta/skill-craft/SKILL.md +39 -16
- package/skills/planning/architecture/SKILL.md +9 -3
- package/skills/planning/backlog/SKILL.md +9 -3
- package/skills/planning/prd/SKILL.md +9 -3
- package/skills/planning/product-intent/SKILL.md +9 -3
- package/skills/planning/tech-spec/SKILL.md +9 -3
- package/skills/registry.yaml +66 -66
- package/skills/research/arxiv-literature/SKILL.md +9 -3
- package/skills/research/experiment-protocol/SKILL.md +10 -3
- package/skills/research/scientific-debugging/SKILL.md +10 -3
- package/skills/research/scientific-debugging/evals.md +2 -2
- package/skills/research/scientific-modernization/SKILL.md +10 -3
- package/skills/skill-marketplace.json +285 -66
- package/skills/workflow/cut-it/SKILL.md +11 -3
- package/skills/workflow/design-council/SKILL.md +12 -3
- package/skills/workflow/grill-me/SKILL.md +9 -3
- package/skills/workflow/workflow-distiller/SKILL.md +9 -3
- package/src/cli/acp.ts +2 -2
- package/src/cli/args.ts +2 -2
- package/src/cli/auth.ts +2 -2
- package/src/cli/bootstrap-generate.ts +6 -6
- package/src/cli/clio.ts +6 -1
- package/src/cli/config-inspect.ts +68 -15
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure.ts +27 -31
- package/src/cli/default-target.ts +1 -1
- package/src/cli/docs.ts +28 -20
- package/src/cli/doctor-naming.ts +323 -0
- package/src/cli/doctor-panes.ts +46 -14
- package/src/cli/doctor-toolchain.ts +31 -10
- package/src/cli/doctor.ts +15 -1
- package/src/cli/eval-inventory.ts +8 -8
- package/src/cli/eval.ts +1 -2
- package/src/cli/evidence-detail.ts +1 -1
- package/src/cli/evidence-inventory.ts +1 -1
- package/src/cli/extensions.ts +2 -1
- package/src/cli/fleet-decisions.ts +1 -1
- package/src/cli/fleet-inspect.ts +1 -1
- package/src/cli/fleet-preflight.ts +1 -1
- package/src/cli/fleet-verify.ts +1 -1
- package/src/cli/fleet-view.ts +40 -23
- package/src/cli/fleet.ts +9 -6
- package/src/cli/index.ts +2 -1
- package/src/cli/internal-dispatch.ts +3 -4
- package/src/cli/interop-inspect.ts +2 -2
- package/src/cli/models.ts +3 -3
- package/src/cli/modes/print.ts +1 -1
- package/src/cli/panes.ts +19 -5
- package/src/cli/reset.ts +1 -1
- package/src/cli/run.ts +13 -17
- package/src/cli/share.ts +6 -2
- package/src/cli/skills-eval.ts +14 -14
- package/src/cli/targets.ts +25 -30
- package/src/cli/trace-inspect.ts +1 -1
- package/src/cli/trace.ts +96 -4
- package/src/cli/uninstall.ts +2 -2
- package/src/cli/upgrade.ts +29 -34
- package/src/cli/usage.ts +2 -2
- package/src/cli/validate-model.ts +1 -1
- package/src/cli/verifiers-inspect.ts +1 -1
- package/src/cli/wiki-generate.ts +6 -6
- package/src/core/artifact-paths.ts +1 -1
- package/src/core/bash-exec.ts +132 -87
- package/src/core/boot-trace.ts +3 -3
- package/src/core/bus-events.ts +51 -6
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1066 -886
- package/src/core/defaults.ts +326 -530
- package/src/core/dispatch-outcome.ts +16 -0
- 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 +33 -52
- package/src/core/naming-compat.ts +45 -0
- package/src/core/naming-events.ts +62 -0
- package/src/core/prompt-hint.ts +9 -0
- package/src/core/recent-models.ts +1 -7
- package/src/core/residency-protection.ts +4 -8
- package/src/core/resolve-config-value.ts +1 -1
- package/src/core/response-model-id.ts +0 -14
- package/src/core/session-routing.ts +84 -74
- package/src/core/skill-activation.ts +18 -0
- package/src/core/termination.ts +4 -4
- package/src/core/timers.ts +2 -12
- package/src/domains/agents/builtins/architect.md +2 -3
- package/src/domains/agents/builtins/coder.md +3 -2
- package/src/domains/agents/builtins/debugger.md +2 -2
- package/src/domains/agents/builtins/documenter.md +2 -2
- package/src/domains/agents/builtins/git-master.md +1 -1
- package/src/domains/agents/builtins/oracle.md +1 -1
- package/src/domains/agents/builtins/provenance.md +1 -1
- package/src/domains/agents/builtins/researcher.md +1 -1
- package/src/domains/agents/builtins/scout.md +1 -1
- package/src/domains/agents/builtins/tester.md +2 -2
- package/src/domains/agents/builtins/verifier.md +2 -2
- package/src/domains/agents/builtins/wiki-writer.md +1 -1
- package/src/domains/agents/catalog.ts +14 -26
- package/src/domains/agents/contract.ts +2 -0
- package/src/domains/agents/extension.ts +26 -4
- package/src/domains/agents/registry.ts +7 -7
- package/src/domains/agents/result-contract.ts +1 -1
- package/src/domains/agents/spec.ts +0 -11
- package/src/domains/config/classify.ts +35 -47
- package/src/domains/config/extension.ts +5 -5
- package/src/domains/config/keybindings.ts +56 -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 -6
- package/src/domains/context/prompt-context.ts +1 -1
- package/src/domains/context/wiki/assemble.ts +2 -2
- package/src/domains/context/working-set/path-index.ts +1 -0
- package/src/domains/context/working-set/replay/metrics.ts +0 -4
- package/src/domains/context/working-set/replay/report.ts +1 -1
- package/src/domains/context/working-set/replay/synthetic.ts +2 -2
- package/src/domains/dispatch/active-route-planner.ts +2 -2
- package/src/domains/dispatch/agent-candidates.ts +1 -1
- package/src/domains/dispatch/agent-ledger-store.ts +1 -1
- package/src/domains/dispatch/agent-ledger.ts +1 -1
- package/src/domains/dispatch/assignment.ts +5 -5
- package/src/domains/dispatch/capability-match.ts +10 -0
- package/src/domains/dispatch/capacity-lease.ts +2 -5
- package/src/domains/dispatch/code-step.ts +1 -1
- package/src/domains/dispatch/contract.ts +2 -2
- package/src/domains/dispatch/extension.ts +169 -82
- package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
- package/src/domains/dispatch/fleet-preflight.ts +8 -17
- package/src/domains/dispatch/fleet-run.ts +0 -7
- package/src/domains/dispatch/gate-decisions.ts +25 -14
- package/src/domains/dispatch/host-verification.ts +435 -39
- package/src/domains/dispatch/intent-requirements.ts +10 -0
- package/src/domains/dispatch/intent.ts +18 -1
- package/src/domains/dispatch/joint-route-resolver.ts +1 -1
- package/src/domains/dispatch/path-scope.ts +220 -70
- package/src/domains/dispatch/placement.ts +2 -2
- package/src/domains/dispatch/receipt-findings.ts +1 -1
- package/src/domains/dispatch/receipt-integrity.ts +20 -8
- package/src/domains/dispatch/reservation-store.ts +0 -23
- package/src/domains/dispatch/route-decision.ts +1 -1
- package/src/domains/dispatch/route-history.ts +1 -1
- package/src/domains/dispatch/route-policy.ts +1 -1
- package/src/domains/dispatch/route-readiness.ts +0 -28
- package/src/domains/dispatch/run-event-journal.ts +9 -19
- package/src/domains/dispatch/state.ts +2 -3
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +47 -40
- package/src/domains/dispatch/types.ts +58 -6
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +10 -4
- package/src/domains/eval/compare/thresholds.ts +0 -8
- package/src/domains/eval/execution-provenance.ts +1 -1
- package/src/domains/eval/metrics/token-stream.ts +0 -7
- package/src/domains/eval/report.ts +1 -1
- package/src/domains/eval/runner.ts +1 -1
- package/src/domains/eval/runners/clio-run.ts +7 -6
- package/src/domains/eval/runners/external-command.ts +4 -3
- package/src/domains/eval/schema/artifact.ts +1 -1
- package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
- package/src/domains/eval/schema/behavioral.ts +7 -6
- package/src/domains/eval/schema/execution-envelope.ts +4 -2
- package/src/domains/eval/schema/naming.ts +10 -0
- package/src/domains/eval/schema/suite.ts +2 -2
- package/src/domains/eval/schema/validate.ts +9 -5
- package/src/domains/eval/schema/verdict.ts +4 -2
- package/src/domains/eval/store.ts +20 -3
- 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/trust-status.ts +10 -1
- package/src/domains/extensions/contract.ts +15 -1
- package/src/domains/extensions/discovery.ts +238 -41
- package/src/domains/extensions/extension.ts +105 -6
- package/src/domains/extensions/index.ts +24 -0
- package/src/domains/extensions/integrity.ts +189 -0
- package/src/domains/extensions/manager.ts +17 -1
- package/src/domains/extensions/resource-path.ts +27 -0
- package/src/domains/extensions/resources.ts +18 -38
- package/src/domains/extensions/snapshot-store.ts +39 -0
- package/src/domains/extensions/snapshot.ts +180 -0
- package/src/domains/extensions/state.ts +385 -57
- package/src/domains/extensions/types.ts +118 -1
- 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-extension-install-digests.ts +27 -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 +22 -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 +276 -0
- package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
- package/src/domains/lifecycle/naming-yazi.ts +86 -0
- package/src/domains/lifecycle/upgrade-notice.ts +1 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- package/src/domains/middleware/contract.ts +26 -0
- package/src/domains/middleware/extension.ts +24 -24
- package/src/domains/middleware/hook-receipts.ts +27 -4
- package/src/domains/middleware/hooks-io.ts +65 -32
- package/src/domains/middleware/hooks.ts +64 -0
- package/src/domains/middleware/index.ts +35 -4
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/registrations.ts +326 -0
- package/src/domains/middleware/runtime.ts +30 -2
- package/src/domains/middleware/snapshot.ts +20 -7
- package/src/domains/mux/contract.ts +195 -25
- package/src/domains/mux/detect.ts +23 -6
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +7 -1
- package/src/domains/mux/index.ts +21 -1
- package/src/domains/mux/operations.ts +72 -5
- package/src/domains/mux/protocol.ts +19 -6
- package/src/domains/mux/socket-client.ts +167 -19
- package/src/domains/mux/types.ts +49 -6
- package/src/domains/mux/yazi/assets/yazi.toml +2 -2
- package/src/domains/mux/yazi/event-stream.ts +6 -4
- package/src/domains/mux/yazi/profile.ts +1 -1
- package/src/domains/mux/yazi/session.ts +79 -7
- package/src/domains/mux/yazi/theme.ts +117 -17
- package/src/domains/observability/contract.ts +10 -11
- package/src/domains/observability/extension.ts +12 -4
- package/src/domains/observability/out-of-turn-usage.ts +2 -2
- package/src/domains/observability/projection.ts +15 -91
- package/src/domains/observability/trace-store.ts +65 -19
- package/src/domains/prompts/compiler.ts +75 -55
- package/src/domains/prompts/contract.ts +15 -3
- package/src/domains/prompts/extension.ts +100 -12
- package/src/domains/prompts/fragments/identity/clio-worker.md +2 -4
- package/src/domains/prompts/fragments/identity/clio.md +6 -12
- package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
- package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
- package/src/domains/prompts/fragments/operating/contract.md +7 -15
- package/src/domains/prompts/fragments/operating/delegation.md +32 -34
- package/src/domains/prompts/fragments/operating/skills.md +11 -18
- package/src/domains/prompts/fragments/operating/worker.md +1 -8
- package/src/domains/providers/extension.ts +5 -5
- package/src/domains/providers/index.ts +1 -1
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +99 -23
- 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} +671 -106
- package/src/domains/providers/plugins.ts +1 -1
- package/src/domains/providers/resolver.ts +1 -1
- package/src/domains/providers/runtime-resolution.ts +31 -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 +9 -4
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
- package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
- package/src/domains/providers/types/cost-provenance.ts +19 -0
- package/src/domains/providers/types/knowledge-base.ts +13 -0
- package/src/domains/providers/types/local-model-quirks.ts +87 -39
- package/src/domains/providers/types/target-descriptor.ts +3 -3
- package/src/domains/resources/extension.ts +1 -1
- package/src/domains/resources/library.ts +6 -6
- package/src/domains/resources/prompts/loader.ts +1 -1
- package/src/domains/resources/skills/content-hash.ts +7 -6
- package/src/domains/resources/skills/evals.ts +1 -1
- package/src/domains/resources/skills/install.ts +36 -12
- package/src/domains/resources/skills/loader.ts +41 -18
- package/src/domains/resources/skills/marketplace.ts +21 -2
- package/src/domains/resources/skills/promotion.ts +214 -0
- package/src/domains/safety/audit.ts +2 -2
- package/src/domains/safety/call-target.ts +1 -1
- package/src/domains/safety/finish-contract.ts +2 -1
- package/src/domains/safety/loop-detector.ts +7 -4
- 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/session/task-board.ts +10 -9
- package/src/domains/share/archive.ts +249 -43
- package/src/domains/toolchain/install.ts +1 -1
- package/src/engine/acp/adapter.ts +3 -3
- package/src/engine/acp/event-mapper.ts +3 -3
- package/src/engine/acp/server.ts +89 -35
- package/src/engine/acp/tool-mediator.ts +2 -2
- package/src/engine/acp/types.ts +1 -1
- package/src/engine/alcf-oauth.ts +5 -5
- package/src/engine/antigravity/subprocess-runtime.ts +2 -2
- package/src/engine/api-registry.ts +1 -1
- package/src/engine/apis/llamacpp-residency.ts +4 -23
- package/src/engine/apis/lmstudio.ts +4 -9
- package/src/engine/apis/ollama-native.ts +9 -9
- package/src/engine/apis/openai-completions.ts +30 -27
- package/src/engine/apis/output-budget.ts +8 -18
- package/src/engine/apis/residency.ts +10 -35
- package/src/engine/claude/sdk-module.ts +1 -12
- package/src/engine/claude/sdk-runtime.ts +6 -6
- package/src/engine/claude/subprocess-runtime.ts +1 -1
- package/src/engine/claude/tool-safety.ts +4 -4
- package/src/engine/gemma-channel-filter.ts +19 -0
- package/src/engine/loop-guard.ts +92 -17
- package/src/engine/session.ts +14 -7
- package/src/engine/tui-primitives.ts +1 -1
- package/src/engine/worker-events.ts +6 -6
- package/src/engine/worker-runtime.ts +54 -24
- package/src/engine/worker-tools.ts +3 -1
- package/src/entry/extension-hook-sources.ts +28 -0
- package/src/entry/extension-reload.ts +309 -0
- package/src/entry/orchestrator.ts +163 -120
- package/src/interactive/application-controller.ts +23 -22
- package/src/interactive/bus-notices.ts +10 -3
- package/src/interactive/chat-loop-messages.ts +3 -13
- package/src/interactive/chat-loop.ts +18 -9
- package/src/interactive/chat-panel.ts +37 -14
- package/src/interactive/chat-renderer.ts +71 -7
- package/src/interactive/clio-editor.ts +105 -1
- package/src/interactive/context-activity.ts +8 -6
- package/src/interactive/context-meter.ts +3 -6
- package/src/interactive/context-overlay.ts +1 -1
- package/src/interactive/cost-overlay.ts +1 -1
- package/src/interactive/council-grid.ts +2 -2
- package/src/interactive/dispatch-board.ts +36 -44
- 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 +15 -44
- package/src/interactive/interactive-application.ts +116 -61
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +6 -2
- package/src/interactive/interactive-presentation.ts +22 -17
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +65 -17
- package/src/interactive/interactive-subscriptions.ts +1 -1
- package/src/interactive/interactive-tickers.ts +1 -1
- package/src/interactive/keybinding-manager.ts +4 -4
- package/src/interactive/layout.ts +1 -1
- package/src/interactive/memory-overlay.ts +2 -2
- package/src/interactive/modal-marker.ts +2 -21
- package/src/interactive/mutation-preview.ts +1 -1
- package/src/interactive/overlay-frame.ts +4 -12
- package/src/interactive/overlay-general-openers.ts +6 -2
- package/src/interactive/overlay-key-routing.ts +7 -7
- package/src/interactive/overlay-lifecycle.ts +1 -1
- package/src/interactive/overlay-model-selectors.ts +3 -3
- package/src/interactive/overlays/agents.ts +2 -2
- package/src/interactive/overlays/ask-user.ts +25 -11
- package/src/interactive/overlays/context-reset.ts +28 -4
- package/src/interactive/overlays/cwd-fallback.ts +28 -4
- package/src/interactive/overlays/decisions.ts +4 -2
- package/src/interactive/overlays/extensions.ts +9 -1
- package/src/interactive/overlays/fleet-run-approval.ts +3 -3
- package/src/interactive/overlays/handoff-review.ts +2 -2
- package/src/interactive/overlays/help-reference.ts +13 -0
- package/src/interactive/overlays/interop.ts +1 -1
- package/src/interactive/overlays/library-install-confirm.ts +1 -1
- package/src/interactive/overlays/message-picker.ts +1 -1
- package/src/interactive/overlays/model-selector.ts +39 -31
- package/src/interactive/overlays/prompts.ts +10 -4
- package/src/interactive/overlays/session-selector.ts +2 -2
- package/src/interactive/overlays/settings.ts +360 -303
- package/src/interactive/overlays/side-question.ts +2 -2
- package/src/interactive/overlays/skills-hub.ts +8 -8
- package/src/interactive/overlays/tree-selector.ts +2 -2
- package/src/interactive/panes-runtime.ts +145 -43
- package/src/interactive/permission-overlay.ts +2 -2
- package/src/interactive/prompt-cache-identity.ts +88 -0
- package/src/interactive/renderers/retry-status.ts +12 -4
- package/src/interactive/renderers/tool-execution.ts +4 -4
- package/src/interactive/session-transcript.ts +3 -3
- package/src/interactive/slash-autocomplete.ts +454 -165
- package/src/interactive/slash-commands.ts +401 -190
- package/src/interactive/slash-spec.ts +160 -17
- package/src/interactive/status/controller.ts +2 -2
- package/src/interactive/stream-pacing-policy.ts +1 -24
- package/src/interactive/tasks-overlay.ts +20 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/turn-context.ts +41 -26
- package/src/interactive/turn-persistence.ts +2 -2
- package/src/interactive/turn-prewarm.ts +2 -2
- package/src/interactive/turn-runtime.ts +8 -8
- package/src/interactive/turn-state.ts +1 -1
- package/src/interactive/view/artifacts.ts +12 -9
- package/src/interactive/view/view-overlay.ts +13 -10
- package/src/interactive/watch-pane.ts +38 -10
- package/src/interactive/welcome-dashboard.ts +15 -15
- package/src/interactive/worker-progress.ts +4 -4
- package/src/interactive/worker-receipts.ts +1 -1
- package/src/interactive/worker-stream.ts +1 -4
- package/src/interactive/yazi-bridge.ts +72 -11
- package/src/tools/agent-tools.ts +30 -1
- package/src/tools/artifact.ts +2 -2
- package/src/tools/ask-user.ts +6 -6
- package/src/tools/bash.ts +2 -2
- package/src/tools/bootstrap.ts +4 -0
- package/src/tools/builtin-tool-catalog.ts +52 -22
- package/src/tools/codewiki/code-nav-surface.ts +6 -0
- package/src/tools/codewiki/code-nav.ts +99 -13
- package/src/tools/compete-worktrees.ts +27 -17
- package/src/tools/context/docs-engine.ts +20 -7
- package/src/tools/context/index.ts +44 -13
- package/src/tools/core-bootstrap.ts +28 -6
- package/src/tools/credential-present.ts +1 -2
- package/src/tools/dispatch-admission.ts +4 -2
- package/src/tools/dispatch-arguments.ts +6 -2
- package/src/tools/dispatch-plan.ts +48 -15
- package/src/tools/dispatch-run-events.ts +13 -11
- package/src/tools/dispatch-runner.ts +11 -6
- package/src/tools/dispatch-schema.ts +338 -0
- package/src/tools/dispatch-types.ts +3 -0
- package/src/tools/dispatch.ts +9 -254
- package/src/tools/find.ts +1 -6
- package/src/tools/ledger.ts +3 -5
- package/src/tools/monitor-surface.ts +5 -13
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observation.ts +4 -5
- package/src/tools/observers.ts +0 -33
- package/src/tools/panes-surface.ts +4 -11
- package/src/tools/panes.ts +4 -2
- package/src/tools/policy.ts +15 -2
- package/src/tools/read.ts +5 -6
- package/src/tools/registry.ts +30 -7
- package/src/tools/result-shaping.ts +18 -14
- package/src/tools/steer-surface.ts +1 -1
- package/src/tools/task-worktree.ts +28 -7
- package/src/tools/tasks.ts +1 -1
- package/src/tools/truncate.ts +6 -5
- package/src/tools/verify/authoring.ts +3 -6
- package/src/tools/verify/frontend.ts +1 -1
- package/src/tools/verify/surface.ts +6 -12
- package/src/tools/web-fetch-surface.ts +1 -3
- 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-36EJLSQQ.js +0 -814
- package/dist/chunk-GXNLGKAB.js +0 -571
- package/dist/chunk-K7VKOLQQ.js +0 -15
- package/dist/chunk-PMZCIOCJ.js +0 -25
- package/dist/chunk-SUCTJL45.js +0 -45
- package/dist/chunk-SUW5DORT.js +0 -819
- package/dist/chunk-TZ3SGWZZ.js +0 -48
- package/dist/chunk-UOV2BYIW.js +0 -107
- package/dist/chunk-VFA6GDY5.js +0 -1625
- package/dist/doctor-QOA5FNY5.js +0 -313
- package/dist/fleet-view-ZCON35AG.js +0 -102
- package/dist/panes-HMABYVO4.js +0 -58
- package/docs/artifact-versions.md +0 -67
- package/docs/documentation-coverage.md +0 -46
- package/docs/documentation-guide.md +0 -167
- package/docs/release-cut-checklist.md +0 -193
- package/docs/time-conventions.md +0 -101
- package/skills/meta/clio-test/SKILL.md +0 -133
- package/skills/meta/clio-test/references/harness.md +0 -126
- package/skills/meta/clio-test/references/test-map.md +0 -69
- package/src/engine/apis/degraded-inference.ts +0 -95
|
@@ -27,6 +27,19 @@ export interface ExtensionDiagnostic {
|
|
|
27
27
|
path?: string;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
export interface ExtensionProvenance {
|
|
31
|
+
id: string;
|
|
32
|
+
scope: ExtensionScope;
|
|
33
|
+
/** Path recorded in install state, when known. */
|
|
34
|
+
sourcePath?: string;
|
|
35
|
+
/** Canonical filesystem identity of the installed package root. */
|
|
36
|
+
canonicalRoot: string;
|
|
37
|
+
/** SHA-256 of the manifest bytes covered by the installed-tree digest. */
|
|
38
|
+
manifestDigest: string;
|
|
39
|
+
/** Installed-tree digest recorded at install and reverified on this load. */
|
|
40
|
+
contentDigest: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
30
43
|
export interface InstalledExtension {
|
|
31
44
|
id: string;
|
|
32
45
|
name: string;
|
|
@@ -36,14 +49,28 @@ export interface InstalledExtension {
|
|
|
36
49
|
rootPath: string;
|
|
37
50
|
manifestPath: string;
|
|
38
51
|
enabled: boolean;
|
|
52
|
+
/** Whether the complete manifest and declared resource tree are valid. */
|
|
53
|
+
valid: boolean;
|
|
39
54
|
/** Whether this package admits the running Clio version. */
|
|
40
55
|
compatible: boolean;
|
|
41
56
|
effective: boolean;
|
|
57
|
+
/** The single admission decision for extension-owned resources and hooks. */
|
|
58
|
+
loadable: boolean;
|
|
59
|
+
/** Present exactly when the installed tree and manifest bytes were reverified. */
|
|
60
|
+
provenance?: ExtensionProvenance;
|
|
61
|
+
/** Digest observed while checking installed content on this load. */
|
|
62
|
+
observedContentDigest?: string;
|
|
42
63
|
resources: ExtensionManifestResources;
|
|
43
64
|
overriddenBy?: ExtensionScope;
|
|
44
65
|
diagnostics: ExtensionDiagnostic[];
|
|
45
66
|
}
|
|
46
67
|
|
|
68
|
+
export type LoadableExtension = InstalledExtension & { loadable: true; provenance: ExtensionProvenance };
|
|
69
|
+
|
|
70
|
+
export function isLoadableExtension(entry: InstalledExtension): entry is LoadableExtension {
|
|
71
|
+
return entry.loadable && entry.provenance !== undefined;
|
|
72
|
+
}
|
|
73
|
+
|
|
47
74
|
export interface ExtensionCandidate {
|
|
48
75
|
path: string;
|
|
49
76
|
manifestPath?: string;
|
|
@@ -58,8 +85,88 @@ export interface ExtensionResourceRoot {
|
|
|
58
85
|
path: string;
|
|
59
86
|
rootPath: string;
|
|
60
87
|
source: string;
|
|
88
|
+
provenance: ExtensionProvenance;
|
|
89
|
+
/** Zero denotes an ephemeral, uncommitted projection. */
|
|
90
|
+
generation: number;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export interface ExtensionHookSource {
|
|
94
|
+
provenance: ExtensionProvenance;
|
|
95
|
+
/** SHA-256 of the captured hooks.yaml bytes. */
|
|
96
|
+
declarationsDigest: string;
|
|
97
|
+
/** Parsed captured YAML, or an empty list when parsing failed. */
|
|
98
|
+
declarations: unknown;
|
|
99
|
+
parseError?: string;
|
|
61
100
|
}
|
|
62
101
|
|
|
102
|
+
export interface ExtensionSnapshotDiagnostics {
|
|
103
|
+
entries: ReadonlyArray<ExtensionDiagnostic & { extensionId?: string }>;
|
|
104
|
+
truncated: number;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export interface ExtensionSnapshot {
|
|
108
|
+
version: 1;
|
|
109
|
+
generation: number;
|
|
110
|
+
cwd: string;
|
|
111
|
+
builtAt: string;
|
|
112
|
+
/** Content identity; generation, timestamp, and diagnostic text are excluded. */
|
|
113
|
+
digest: string;
|
|
114
|
+
packages: ReadonlyArray<InstalledExtension>;
|
|
115
|
+
resourceRoots: Readonly<Record<ExtensionResourceKind, ReadonlyArray<ExtensionResourceRoot>>>;
|
|
116
|
+
hookSources: ReadonlyArray<ExtensionHookSource>;
|
|
117
|
+
diagnostics: ExtensionSnapshotDiagnostics;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export type ExtensionReloadRejectionReason = "build-failed" | "reentrant" | "stale" | "workspace-changed";
|
|
121
|
+
|
|
122
|
+
export interface ExtensionReloadRejection {
|
|
123
|
+
status: "rejected";
|
|
124
|
+
reason: ExtensionReloadRejectionReason;
|
|
125
|
+
/** Generation that remains committed. */
|
|
126
|
+
generation: number;
|
|
127
|
+
diagnostics: ExtensionSnapshotDiagnostics;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* A fully built and validated generation that has not been published. The
|
|
132
|
+
* bundle holds at most one candidate at a time. `publish` is one reference
|
|
133
|
+
* assignment that never validates, refuses, throws, or calls out; the caller
|
|
134
|
+
* checks `current()` on the same stack immediately before it. `discard`
|
|
135
|
+
* releases the candidate without any visible change.
|
|
136
|
+
*/
|
|
137
|
+
export interface ExtensionReloadCandidate {
|
|
138
|
+
generation: number;
|
|
139
|
+
previousGeneration: number;
|
|
140
|
+
snapshot: ExtensionSnapshot;
|
|
141
|
+
/** False when the candidate digest equals the committed digest. */
|
|
142
|
+
changed: boolean;
|
|
143
|
+
added: ReadonlyArray<string>;
|
|
144
|
+
removed: ReadonlyArray<string>;
|
|
145
|
+
modified: ReadonlyArray<string>;
|
|
146
|
+
/** True while this is the in-flight candidate and the committed snapshot it was diffed against is still live. */
|
|
147
|
+
current(): boolean;
|
|
148
|
+
publish(): void;
|
|
149
|
+
discard(): void;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export type ExtensionReloadPrepareResult =
|
|
153
|
+
| { status: "prepared"; candidate: ExtensionReloadCandidate }
|
|
154
|
+
| ExtensionReloadRejection;
|
|
155
|
+
|
|
156
|
+
export interface ExtensionReloadCommitted {
|
|
157
|
+
status: "committed";
|
|
158
|
+
generation: number;
|
|
159
|
+
previousGeneration: number;
|
|
160
|
+
changed: boolean;
|
|
161
|
+
digest: string;
|
|
162
|
+
added: ReadonlyArray<string>;
|
|
163
|
+
removed: ReadonlyArray<string>;
|
|
164
|
+
modified: ReadonlyArray<string>;
|
|
165
|
+
diagnostics: ExtensionSnapshotDiagnostics;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export type ExtensionReloadResult = ExtensionReloadCommitted | ExtensionReloadRejection;
|
|
169
|
+
|
|
63
170
|
export interface ExtensionListOptions {
|
|
64
171
|
scope?: ExtensionScope;
|
|
65
172
|
cwd?: string;
|
|
@@ -72,17 +179,27 @@ export interface ExtensionInstallOptions extends ExtensionListOptions {
|
|
|
72
179
|
|
|
73
180
|
export interface ExtensionInstallResult {
|
|
74
181
|
extension?: InstalledExtension;
|
|
182
|
+
recovery?: { stateBackup?: string; packageBackup?: string };
|
|
75
183
|
diagnostics: ExtensionDiagnostic[];
|
|
76
184
|
}
|
|
77
185
|
|
|
78
186
|
export interface ExtensionMutationResult {
|
|
79
187
|
extension?: InstalledExtension;
|
|
80
188
|
removed?: { id: string; scope: ExtensionScope; path: string };
|
|
189
|
+
recovery?: { stateBackup?: string; packageBackup?: string };
|
|
81
190
|
diagnostics: ExtensionDiagnostic[];
|
|
82
191
|
}
|
|
83
192
|
|
|
193
|
+
export interface ExtensionStateUpgradeReport {
|
|
194
|
+
scope: ExtensionScope;
|
|
195
|
+
statePath: string;
|
|
196
|
+
backupPath?: string;
|
|
197
|
+
upgraded: string[];
|
|
198
|
+
refused: Array<{ id: string; reason: string }>;
|
|
199
|
+
}
|
|
200
|
+
|
|
84
201
|
export interface ExtensionState {
|
|
85
202
|
version: 1;
|
|
86
203
|
disabled: string[];
|
|
87
|
-
installed: Record<string, { installedAt: string; source?: string }>;
|
|
204
|
+
installed: Record<string, { installedAt: string; source?: string; contentDigest?: string }>;
|
|
88
205
|
}
|
|
@@ -24,7 +24,7 @@ export const INHERITED_PROJECT_CONTEXT = "none";
|
|
|
24
24
|
/** The delegation entry a given agent kind would be wired as. */
|
|
25
25
|
export function delegationEntryForKind(
|
|
26
26
|
kind: InteropAgentKind,
|
|
27
|
-
defaults: ClioSettings["
|
|
27
|
+
defaults: ClioSettings["integrations"]["externalAgents"]["defaults"],
|
|
28
28
|
): DelegationAgentConfig {
|
|
29
29
|
const recipe = kind.acp;
|
|
30
30
|
if (recipe === undefined) throw new Error(`interop kind ${kind.id} has no ACP recipe`);
|
|
@@ -35,7 +35,7 @@ export function delegationEntryForKind(
|
|
|
35
35
|
connectTimeoutMs: defaults.connectTimeoutMs,
|
|
36
36
|
turnTimeoutMs: defaults.turnTimeoutMs,
|
|
37
37
|
permissionTimeoutMs: defaults.permissionTimeoutMs,
|
|
38
|
-
toolGovernance: "clio-policy",
|
|
38
|
+
toolGovernance: "clio-coder-policy",
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
41
|
|
|
@@ -45,7 +45,7 @@ export function delegationEntryForKind(
|
|
|
45
45
|
* declined agent whose binary or version moved comes back as a fresh proposal.
|
|
46
46
|
*/
|
|
47
47
|
export function interopProposals(report: InteropReport, settings: ClioSettings): ReadonlyArray<InteropProposal> {
|
|
48
|
-
const configured = new Set(settings.
|
|
48
|
+
const configured = new Set(settings.integrations.externalAgents.entries.map((agent) => agent.id));
|
|
49
49
|
const proposals: InteropProposal[] = [];
|
|
50
50
|
for (const record of report.agents) {
|
|
51
51
|
const kind = interopAgentKind(record.kind);
|
|
@@ -57,7 +57,7 @@ export function interopProposals(report: InteropReport, settings: ClioSettings):
|
|
|
57
57
|
kind: kind.id,
|
|
58
58
|
label: kind.label,
|
|
59
59
|
fingerprint: record.fingerprint,
|
|
60
|
-
entry: delegationEntryForKind(kind, settings.
|
|
60
|
+
entry: delegationEntryForKind(kind, settings.integrations.externalAgents.defaults),
|
|
61
61
|
needsNetworkInstall: record.adapter !== "present",
|
|
62
62
|
});
|
|
63
63
|
}
|
|
@@ -149,7 +149,7 @@ export function interopBootHint(report: InteropReport, settings: ClioSettings):
|
|
|
149
149
|
(record) => ({ ...record, hintedFingerprint: record.fingerprint }),
|
|
150
150
|
);
|
|
151
151
|
const names = fresh.map((proposal) => proposal.entry.id).join(", ");
|
|
152
|
-
return `clio: ${names} detected on PATH and not configured. Run /interop to review.`;
|
|
152
|
+
return `clio-coder: ${names} detected on PATH and not configured. Run /interop to review.`;
|
|
153
153
|
}
|
|
154
154
|
|
|
155
155
|
/**
|
|
@@ -167,8 +167,8 @@ export function acceptInteropAgents(ids: ReadonlyArray<InteropAgentId>, report:
|
|
|
167
167
|
const wired: string[] = [];
|
|
168
168
|
updateSettings((settings) => {
|
|
169
169
|
for (const proposal of proposals) {
|
|
170
|
-
if (settings.
|
|
171
|
-
settings.
|
|
170
|
+
if (settings.integrations.externalAgents.entries.some((agent) => agent.id === proposal.entry.id)) continue;
|
|
171
|
+
settings.integrations.externalAgents.entries.push({ ...proposal.entry, args: [...proposal.entry.args] });
|
|
172
172
|
wired.push(proposal.entry.id);
|
|
173
173
|
}
|
|
174
174
|
});
|
|
@@ -39,7 +39,7 @@ export function createInteropBundle(_context: DomainContext): DomainBundle<Inter
|
|
|
39
39
|
// from the proposals, which read the file, and not yet in the configured
|
|
40
40
|
// list, which read the snapshot, so it was in neither until a reopen.
|
|
41
41
|
configured() {
|
|
42
|
-
return readSettings().
|
|
42
|
+
return readSettings().integrations.externalAgents.entries;
|
|
43
43
|
},
|
|
44
44
|
accept(ids) {
|
|
45
45
|
const result = acceptInteropAgents(ids, detected ?? readInteropReport() ?? EMPTY_REPORT);
|
|
@@ -491,7 +491,7 @@ export async function runDoctorFleetChecks(projectRoot: string = process.cwd()):
|
|
|
491
491
|
}
|
|
492
492
|
const nodes = settings.fleet?.nodes ?? [];
|
|
493
493
|
if (nodes.length === 0) return [];
|
|
494
|
-
const {
|
|
494
|
+
const { runFleetNodePreflight } = await import("../dispatch/fleet-preflight.js");
|
|
495
495
|
// Endpoint facts are per node. Every configured target is probed from every
|
|
496
496
|
// node, because a `localhost` URL names a different machine on each one and
|
|
497
497
|
// an orchestrator-side probe would describe none of them.
|
|
@@ -502,12 +502,6 @@ export async function runDoctorFleetChecks(projectRoot: string = process.cwd()):
|
|
|
502
502
|
...(target.defaultModel !== undefined ? { wireModelId: target.defaultModel } : {}),
|
|
503
503
|
}));
|
|
504
504
|
const records = await Promise.all(nodes.map((node) => runFleetNodePreflight(node, projectRoot, { targets })));
|
|
505
|
-
try {
|
|
506
|
-
recordFleetPreflight(records);
|
|
507
|
-
} catch {
|
|
508
|
-
// The findings below still tell the operator what happened; a store
|
|
509
|
-
// write failure just means placement will keep denying these nodes.
|
|
510
|
-
}
|
|
511
505
|
return records.map((record) => ({
|
|
512
506
|
ok: true,
|
|
513
507
|
level: record.ok ? "ok" : "warn",
|
|
@@ -533,14 +527,26 @@ export async function runDoctorInteropChecks(projectRoot: string = process.cwd()
|
|
|
533
527
|
} catch {
|
|
534
528
|
return [];
|
|
535
529
|
}
|
|
536
|
-
const
|
|
530
|
+
const configDir = resolveClioDirs().config;
|
|
531
|
+
// Extension discovery resolves through the ensuring config accessor. With no
|
|
532
|
+
// config root there cannot be user Clio extensions or skills to inspect, so
|
|
533
|
+
// keep the broken partial home untouched and retain the binary checks below.
|
|
534
|
+
const skills = existsSync(configDir) ? loadSkills({ cwd: projectRoot, configDir }) : { items: [], diagnostics: [] };
|
|
537
535
|
const foreign = skills.items.filter((skill) => FOREIGN_SKILL_SOURCES.has(skill.source));
|
|
538
|
-
const report = await detectInteropAgents(
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
536
|
+
const report = await detectInteropAgents(
|
|
537
|
+
{
|
|
538
|
+
cwd: projectRoot,
|
|
539
|
+
// Version probes use the shared command runner, which prepares managed Git
|
|
540
|
+
// hooks before spawning. Doctor promises observation only, so PATH presence
|
|
541
|
+
// is the strongest safe fact here.
|
|
542
|
+
probeVersion: false,
|
|
543
|
+
skillSources: skills.items.map((skill) => skill.source),
|
|
544
|
+
},
|
|
545
|
+
// Reading the prior report resolves through the ensuring state accessor.
|
|
546
|
+
// Existing decisions are irrelevant to doctor's presence-only projection.
|
|
547
|
+
[],
|
|
548
|
+
);
|
|
549
|
+
const configured = new Set(settings.integrations.externalAgents.entries.map((agent) => agent.id));
|
|
544
550
|
const findings: DoctorFinding[] = report.agents.map((agent) => {
|
|
545
551
|
const kind = interopAgentKind(agent.kind);
|
|
546
552
|
const status = configured.has(agent.kind)
|
|
@@ -557,7 +563,7 @@ export async function runDoctorInteropChecks(projectRoot: string = process.cwd()
|
|
|
557
563
|
: "";
|
|
558
564
|
return { ok: true, level: "ok", name: `interop ${agent.kind}`, detail: `${head} (${status})${where}` };
|
|
559
565
|
});
|
|
560
|
-
for (const agent of settings.
|
|
566
|
+
for (const agent of settings.integrations.externalAgents.entries) {
|
|
561
567
|
if (resolveOnPath([agent.command]).presence === "present") continue;
|
|
562
568
|
findings.push({
|
|
563
569
|
ok: true,
|
|
@@ -618,14 +624,14 @@ function configuredModelRoles(
|
|
|
618
624
|
): ConfiguredModelRole[] {
|
|
619
625
|
const roles: ConfiguredModelRole[] = [];
|
|
620
626
|
if (target.defaultModel) roles.push({ role: "defaultModel", model: target.defaultModel });
|
|
621
|
-
if (settings.
|
|
622
|
-
roles.push({ role: "orchestrator.model", model: settings.
|
|
627
|
+
if (settings.chat.target === target.id && settings.chat.model) {
|
|
628
|
+
roles.push({ role: "orchestrator.model", model: settings.chat.model });
|
|
623
629
|
}
|
|
624
|
-
if (settings.
|
|
625
|
-
roles.push({ role: "background.model", model: settings.
|
|
630
|
+
if (settings.context.memory.target === target.id && settings.context.memory.model) {
|
|
631
|
+
roles.push({ role: "background.model", model: settings.context.memory.model });
|
|
626
632
|
}
|
|
627
|
-
if (settings.
|
|
628
|
-
roles.push({ role: "workers.default.model", model: settings.
|
|
633
|
+
if (settings.fleet.default.target === target.id && settings.fleet.default.model) {
|
|
634
|
+
roles.push({ role: "workers.default.model", model: settings.fleet.default.model });
|
|
629
635
|
}
|
|
630
636
|
return roles;
|
|
631
637
|
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
|
|
4
|
+
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
|
|
5
|
+
import { settingsPath, withSettingsLock } from "../../../core/config.js";
|
|
6
|
+
import { safeResourceWrite } from "../../../core/safe-resource-write.js";
|
|
7
|
+
import { type MutableNamingStateReport, migrateMutableNamingState } from "../naming-mutable-state.js";
|
|
8
|
+
import { inspectInstalledNamingResources, type NamingResourceReport } from "../naming-resources.js";
|
|
9
|
+
import { inspectToolMarkerNaming, type ToolMarkerNamingReport } from "../naming-tool-markers.js";
|
|
10
|
+
import { regenerateYaziNamingProfile, type YaziNamingRegenerationReport } from "../naming-yazi.js";
|
|
11
|
+
import type { Migration } from "./index.js";
|
|
12
|
+
|
|
13
|
+
export const CLIO_CODER_NAMING_MIGRATION_ID = "2026-09-01-clio-coder-naming";
|
|
14
|
+
export const CLIO_CODER_NAMING_SETTINGS_BACKUP_SUFFIX = ".pre-clio-coder-naming.bak";
|
|
15
|
+
|
|
16
|
+
export interface NamingSettingsTransform {
|
|
17
|
+
document: Record<string, unknown>;
|
|
18
|
+
replacements: string[];
|
|
19
|
+
conflicts: string[];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface NamingSettingsFileReport {
|
|
23
|
+
path: string;
|
|
24
|
+
changed: boolean;
|
|
25
|
+
backupPath: string | null;
|
|
26
|
+
replacements: string[];
|
|
27
|
+
conflicts: string[];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface ClioCoderNamingMigrationReport {
|
|
31
|
+
migrationId: typeof CLIO_CODER_NAMING_MIGRATION_ID;
|
|
32
|
+
version: 1;
|
|
33
|
+
settings: NamingSettingsFileReport[];
|
|
34
|
+
toolMarkers: ToolMarkerNamingReport[];
|
|
35
|
+
resources: NamingResourceReport[];
|
|
36
|
+
yazi: YaziNamingRegenerationReport[];
|
|
37
|
+
mutableState: MutableNamingStateReport[];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function isPlainObject(value: unknown): value is Record<string, unknown> {
|
|
41
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function visitNamingValues(value: unknown, path: string, replacements: string[], conflicts: string[]): void {
|
|
45
|
+
if (Array.isArray(value)) {
|
|
46
|
+
for (const [index, entry] of value.entries()) visitNamingValues(entry, `${path}[${index}]`, replacements, conflicts);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (!isPlainObject(value)) return;
|
|
50
|
+
|
|
51
|
+
for (const [key, entry] of Object.entries(value)) {
|
|
52
|
+
const entryPath = path ? `${path}.${key}` : key;
|
|
53
|
+
if (key === "lifecycle" && entry === "clio-managed") {
|
|
54
|
+
value[key] = "clio-coder-managed";
|
|
55
|
+
replacements.push(`${entryPath}: clio-managed -> clio-coder-managed`);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (key === "toolGovernance" && entry === "clio-policy") {
|
|
59
|
+
value[key] = "clio-coder-policy";
|
|
60
|
+
replacements.push(`${entryPath}: clio-policy -> clio-coder-policy`);
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (key === "keybindings" && isPlainObject(entry)) {
|
|
64
|
+
for (const legacyKey of Object.keys(entry).filter((name) => name.startsWith("clio."))) {
|
|
65
|
+
const canonicalKey = `clio-coder.${legacyKey.slice("clio.".length)}`;
|
|
66
|
+
const legacyPath = `${entryPath}.${legacyKey}`;
|
|
67
|
+
if (Object.hasOwn(entry, canonicalKey)) {
|
|
68
|
+
delete entry[legacyKey];
|
|
69
|
+
conflicts.push(`${legacyPath}: discarded because canonical ${entryPath}.${canonicalKey} wins`);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
entry[canonicalKey] = entry[legacyKey];
|
|
73
|
+
delete entry[legacyKey];
|
|
74
|
+
replacements.push(`${legacyPath} -> ${entryPath}.${canonicalKey}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
visitNamingValues(entry, entryPath, replacements, conflicts);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** Pure deterministic settings transform shared by upgrade and doctor --fix. */
|
|
82
|
+
export function transformNamingSettingsDocument(raw: unknown): NamingSettingsTransform {
|
|
83
|
+
if (!isPlainObject(raw)) throw new Error("Clio Coder naming migration expected a YAML map at the document root");
|
|
84
|
+
const document = structuredClone(raw);
|
|
85
|
+
const replacements: string[] = [];
|
|
86
|
+
const conflicts: string[] = [];
|
|
87
|
+
visitNamingValues(document, "", replacements, conflicts);
|
|
88
|
+
return { document, replacements, conflicts };
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Rewrite one settings file atomically when it contains deterministic released
|
|
93
|
+
* aliases. The caller owns any cross-process lock needed for the selected file.
|
|
94
|
+
*/
|
|
95
|
+
export function migrateNamingSettingsFile(path: string): NamingSettingsFileReport {
|
|
96
|
+
if (!existsSync(path)) return { path, changed: false, backupPath: null, replacements: [], conflicts: [] };
|
|
97
|
+
let parsed: unknown;
|
|
98
|
+
try {
|
|
99
|
+
parsed = parseYaml(readFileSync(path, "utf8"));
|
|
100
|
+
} catch (error) {
|
|
101
|
+
throw new Error(
|
|
102
|
+
`Clio Coder naming migration could not read and parse ${path}: ${error instanceof Error ? error.message : String(error)}`,
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
const transformed = transformNamingSettingsDocument(parsed);
|
|
106
|
+
const changed = transformed.replacements.length > 0 || transformed.conflicts.length > 0;
|
|
107
|
+
if (!changed) {
|
|
108
|
+
return {
|
|
109
|
+
path,
|
|
110
|
+
changed: false,
|
|
111
|
+
backupPath: null,
|
|
112
|
+
replacements: transformed.replacements,
|
|
113
|
+
conflicts: transformed.conflicts,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
const backupPath = `${path}${CLIO_CODER_NAMING_SETTINGS_BACKUP_SUFFIX}`;
|
|
117
|
+
safeResourceWrite(path, stringifyYaml(transformed.document), {
|
|
118
|
+
encoding: "utf8",
|
|
119
|
+
mode: 0o644,
|
|
120
|
+
backup: { path: backupPath },
|
|
121
|
+
});
|
|
122
|
+
return {
|
|
123
|
+
path,
|
|
124
|
+
changed: true,
|
|
125
|
+
backupPath,
|
|
126
|
+
replacements: transformed.replacements,
|
|
127
|
+
conflicts: transformed.conflicts,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function namingMigrationReportPath(stateDir: string): string {
|
|
132
|
+
return join(stateDir, "migration-reports", `${CLIO_CODER_NAMING_MIGRATION_ID}.json`);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const migration: Migration = {
|
|
136
|
+
id: CLIO_CODER_NAMING_MIGRATION_ID,
|
|
137
|
+
async up(stateDir: string): Promise<void> {
|
|
138
|
+
const settings: NamingSettingsFileReport[] = [];
|
|
139
|
+
withSettingsLock(() => settings.push(migrateNamingSettingsFile(settingsPath())));
|
|
140
|
+
const report: ClioCoderNamingMigrationReport = {
|
|
141
|
+
migrationId: CLIO_CODER_NAMING_MIGRATION_ID,
|
|
142
|
+
version: 1,
|
|
143
|
+
settings,
|
|
144
|
+
toolMarkers: inspectToolMarkerNaming({ fix: true }),
|
|
145
|
+
resources: inspectInstalledNamingResources({ fix: true }),
|
|
146
|
+
yazi: [regenerateYaziNamingProfile()],
|
|
147
|
+
mutableState: migrateMutableNamingState(stateDir),
|
|
148
|
+
};
|
|
149
|
+
const target = namingMigrationReportPath(stateDir);
|
|
150
|
+
mkdirSync(join(stateDir, "migration-reports"), { recursive: true });
|
|
151
|
+
safeResourceWrite(target, `${JSON.stringify(report, null, 2)}\n`, { encoding: "utf8", mode: 0o644 });
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
export default migration;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { mkdirSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { safeResourceWrite } from "../../../core/safe-resource-write.js";
|
|
4
|
+
import { upgradeLegacyExtensionInstallState } from "../../extensions/state.js";
|
|
5
|
+
import type { Migration } from "./index.js";
|
|
6
|
+
|
|
7
|
+
export const EXTENSION_INSTALL_DIGESTS_MIGRATION_ID = "2026-09-01-extension-install-digests";
|
|
8
|
+
|
|
9
|
+
function migrateExtensionInstallDigests(stateDir: string, cwd = process.cwd()): void {
|
|
10
|
+
const scopes = upgradeLegacyExtensionInstallState(cwd);
|
|
11
|
+
const reportDir = join(stateDir, "migration-reports");
|
|
12
|
+
mkdirSync(reportDir, { recursive: true });
|
|
13
|
+
safeResourceWrite(
|
|
14
|
+
join(reportDir, `${EXTENSION_INSTALL_DIGESTS_MIGRATION_ID}.json`),
|
|
15
|
+
`${JSON.stringify({ migration: EXTENSION_INSTALL_DIGESTS_MIGRATION_ID, scopes }, null, 2)}\n`,
|
|
16
|
+
{ encoding: "utf8", mode: 0o644 },
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const migration: Migration = {
|
|
21
|
+
id: EXTENSION_INSTALL_DIGESTS_MIGRATION_ID,
|
|
22
|
+
async up(stateDir: string): Promise<void> {
|
|
23
|
+
migrateExtensionInstallDigests(stateDir);
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export default migration;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
|
|
3
|
+
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
|
|
4
|
+
import { settingsPath, withSettingsLock } from "../../../core/config.js";
|
|
5
|
+
import { safeResourceWrite } from "../../../core/safe-resource-write.js";
|
|
6
|
+
import type { Migration } from "./index.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* `panes.agents` and `panes.keepFailed` are retired, and the schema refuses
|
|
10
|
+
* them by name rather than ignoring them. That refusal is right for a file
|
|
11
|
+
* written today and wrong as an upgrade experience: an operator whose settings
|
|
12
|
+
* predate 0.4.0 did nothing but keep a key two releases honored, and the first
|
|
13
|
+
* thing the new version would do is refuse to start.
|
|
14
|
+
*
|
|
15
|
+
* This is the sanctioned exception the settings lock exists for. It cannot go
|
|
16
|
+
* through `readSettings` or `updateSettings`, because those run the strict
|
|
17
|
+
* validator that rejects exactly the keys being removed, so it reads and writes
|
|
18
|
+
* the raw document under the same lock every other writer takes.
|
|
19
|
+
*/
|
|
20
|
+
const RETIRED_PANE_KEYS = ["agents", "keepFailed"] as const;
|
|
21
|
+
|
|
22
|
+
function isPlainObject(value: unknown): value is Record<string, unknown> {
|
|
23
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const migration: Migration = {
|
|
27
|
+
id: "2026-09-01-retire-panes-knobs",
|
|
28
|
+
async up(): Promise<void> {
|
|
29
|
+
withSettingsLock(() => {
|
|
30
|
+
const path = settingsPath();
|
|
31
|
+
if (!existsSync(path)) return;
|
|
32
|
+
let parsed: unknown;
|
|
33
|
+
try {
|
|
34
|
+
parsed = parseYaml(readFileSync(path, "utf8"));
|
|
35
|
+
} catch {
|
|
36
|
+
// A document this cannot parse is one it must not rewrite: writing a
|
|
37
|
+
// re-serialized guess over an operator's malformed or transiently
|
|
38
|
+
// unreadable file would destroy the original they still have to fix.
|
|
39
|
+
// The strict reader already names the syntax error on the next boot.
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (!isPlainObject(parsed)) return;
|
|
43
|
+
const panes = parsed.panes;
|
|
44
|
+
if (!isPlainObject(panes)) return;
|
|
45
|
+
const present = RETIRED_PANE_KEYS.filter((key) => key in panes);
|
|
46
|
+
// Rewriting is not free: the document is re-serialized from the parse, so
|
|
47
|
+
// comments and formatting the operator wrote do not survive. A file that
|
|
48
|
+
// never named these keys must therefore never be touched.
|
|
49
|
+
if (present.length === 0) return;
|
|
50
|
+
for (const key of present) delete panes[key];
|
|
51
|
+
// A `panes` map that held nothing but the retired knobs is left naming no
|
|
52
|
+
// setting at all, so it goes with them rather than staying as `panes: {}`.
|
|
53
|
+
if (Object.keys(panes).length === 0) delete parsed.panes;
|
|
54
|
+
safeResourceWrite(path, stringifyYaml(parsed), { encoding: "utf8", mode: 0o644 });
|
|
55
|
+
});
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export default migration;
|