@iowarp/clio-coder 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (581) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +116 -16
  3. package/dist/{acp-G5WJBNCT.js → acp-ZILU3AUO.js} +14 -14
  4. package/dist/{agents-FMV2Q5G4.js → agents-HYWGBGQR.js} +40 -29
  5. package/dist/assets/codewiki.json +1 -1
  6. package/dist/{auth-3IDSJEIK.js → auth-N3QT7CBO.js} +21 -19
  7. package/dist/{builtins-XCZWXSC7.js → builtins-UJLMOVOV.js} +6 -6
  8. package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
  9. package/dist/{chunk-3BT2XMV4.js → chunk-2NM363SV.js} +50 -57
  10. package/dist/{chunk-J4W7KFM7.js → chunk-2VG7KLYV.js} +24 -279
  11. package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
  12. package/dist/{chunk-K5C3NCBD.js → chunk-3I5NY75V.js} +5 -5
  13. package/dist/{chunk-VAZSBTKF.js → chunk-3QSOM6PA.js} +2 -2
  14. package/dist/{chunk-TZ3SGWZZ.js → chunk-5QIAJV2D.js} +2 -2
  15. package/dist/{chunk-OQBA45DZ.js → chunk-5YHDIDBP.js} +2 -2
  16. package/dist/{chunk-NHLBIGRH.js → chunk-6CCS4G3W.js} +40 -17
  17. package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
  18. package/dist/{chunk-LDQ2ZF2M.js → chunk-6FN3E6KX.js} +5 -5
  19. package/dist/{chunk-X3YGUTOB.js → chunk-6HMJX2VU.js} +59 -59
  20. package/dist/{chunk-VEO4AP2K.js → chunk-6I5ILFOF.js} +3 -2
  21. package/dist/{chunk-B7OBL7PK.js → chunk-6NJQITNH.js} +18 -11
  22. package/dist/{chunk-IQ7KR472.js → chunk-6VC4OV3Z.js} +6 -3
  23. package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
  24. package/dist/{chunk-AB44T6BB.js → chunk-74YWRRU5.js} +8 -7
  25. package/dist/{chunk-SJ5ZKQ4S.js → chunk-7EPLI7VL.js} +2 -2
  26. package/dist/{chunk-HWHKMHUA.js → chunk-7OBGU7UB.js} +3 -3
  27. package/dist/{chunk-2OQE55CK.js → chunk-7PWAODYW.js} +2 -2
  28. package/dist/{chunk-IBEBSCYA.js → chunk-7RY5VZPH.js} +42 -33
  29. package/dist/{chunk-LQ3DZAMX.js → chunk-ABLSQ6JX.js} +2 -2
  30. package/dist/{chunk-QLFS5GO2.js → chunk-AFKWHWXF.js} +12 -22
  31. package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
  32. package/dist/{chunk-O6TL7WWY.js → chunk-AKB4GYDL.js} +4 -4
  33. package/dist/chunk-AP73CFDC.js +308 -0
  34. package/dist/{chunk-JDG2WCRO.js → chunk-BBTJOK6Y.js} +5 -5
  35. package/dist/{chunk-SP2RXXYO.js → chunk-BDPT6GTK.js} +10 -10
  36. package/dist/{chunk-NQQH3YT7.js → chunk-BJGUKIG4.js} +3 -3
  37. package/dist/{chunk-O4XIVISU.js → chunk-BTGG6BG2.js} +79 -38
  38. package/dist/chunk-BTK3SSSK.js +67 -0
  39. package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
  40. package/dist/chunk-BWW4HLO4.js +301 -0
  41. package/dist/{chunk-I5VEOC6I.js → chunk-C537JADH.js} +10 -10
  42. package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
  43. package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
  44. package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
  45. package/dist/chunk-D7E7WCDF.js +27 -0
  46. package/dist/{chunk-WZR7K7ZX.js → chunk-E67WX76H.js} +6 -6
  47. package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
  48. package/dist/chunk-EIMVLWB3.js +1842 -0
  49. package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
  50. package/dist/{chunk-MLKNTWH2.js → chunk-FYUN5KZ3.js} +21 -21
  51. package/dist/{chunk-YJX4SHTD.js → chunk-GIZNH63R.js} +1 -1
  52. package/dist/{chunk-X75E3D2N.js → chunk-GPPB3JBE.js} +18 -16
  53. package/dist/{chunk-GR5G2PVF.js → chunk-GVQJ5CCZ.js} +15 -10
  54. package/dist/chunk-HJWWJ6IL.js +184 -0
  55. package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
  56. package/dist/{chunk-VYMXRQI6.js → chunk-HUAS7ITX.js} +89 -93
  57. package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
  58. package/dist/{chunk-DYJP44XW.js → chunk-IG7BCQBA.js} +1 -1
  59. package/dist/{chunk-32KWKNSF.js → chunk-IXJT6DCX.js} +3 -3
  60. package/dist/{chunk-C2LTL2W6.js → chunk-J4HBWF6Y.js} +360 -172
  61. package/dist/chunk-J5LZHVIT.js +284 -0
  62. package/dist/{chunk-QLL7ILRG.js → chunk-JA5QWE4Z.js} +510 -202
  63. package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
  64. package/dist/{chunk-36EJLSQQ.js → chunk-JZWT5J3Y.js} +4 -4
  65. package/dist/{chunk-HZHHCK24.js → chunk-K6BF4U2H.js} +476 -322
  66. package/dist/{chunk-Z2RR6MAK.js → chunk-MA3H6DM5.js} +6 -6
  67. package/dist/{chunk-CODPRO7Q.js → chunk-MOPSG2X7.js} +6 -6
  68. package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
  69. package/dist/{chunk-YDFRH54B.js → chunk-N5UK64DP.js} +4 -4
  70. package/dist/chunk-NDDGJUXD.js +81 -0
  71. package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
  72. package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
  73. package/dist/{chunk-W5VSYASO.js → chunk-OJTRZGR3.js} +46 -87
  74. package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
  75. package/dist/{chunk-3URVFKWK.js → chunk-PJJ6MY27.js} +5 -5
  76. package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
  77. package/dist/{chunk-GKF55TAZ.js → chunk-PVAMAVBB.js} +3 -2
  78. package/dist/{chunk-6DB53AJS.js → chunk-QKIFBZKT.js} +7 -7
  79. package/dist/{chunk-HJJTYUHX.js → chunk-QMXC4JB7.js} +20 -20
  80. package/dist/chunk-QTFGO774.js +644 -0
  81. package/dist/{chunk-CY6FY24N.js → chunk-R23Z6K6I.js} +2 -2
  82. package/dist/{chunk-ULC6OTWO.js → chunk-R32CLGZ6.js} +13 -13
  83. package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
  84. package/dist/{chunk-F4CKPOEQ.js → chunk-SCYB3HA4.js} +72 -26
  85. package/dist/{chunk-LY4S7GJC.js → chunk-SINK3QR6.js} +18 -16
  86. package/dist/{chunk-U77AMWDL.js → chunk-TD3PGPQA.js} +43 -22
  87. package/dist/{chunk-QBJA7R7N.js → chunk-THYWACCR.js} +2 -2
  88. package/dist/{chunk-QREDIESB.js → chunk-TVH4ONAM.js} +14 -8
  89. package/dist/chunk-U2WB7TZS.js +271 -0
  90. package/dist/{chunk-KFZI4NIL.js → chunk-UAPGZHYC.js} +145 -31
  91. package/dist/{chunk-DQITNCXG.js → chunk-UEDMSP56.js} +29 -14
  92. package/dist/{chunk-3XML7CDN.js → chunk-UXN6JT4W.js} +2 -2
  93. package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
  94. package/dist/{chunk-BPKCPIL7.js → chunk-VEGN6WIQ.js} +2 -2
  95. package/dist/chunk-VKFQTNDV.js +66 -0
  96. package/dist/{chunk-7MCTRUCE.js → chunk-VKRH2TCS.js} +2 -2
  97. package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
  98. package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
  99. package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
  100. package/dist/{chunk-SUCTJL45.js → chunk-WR6U3OVP.js} +3 -3
  101. package/dist/{chunk-BUMFYQFY.js → chunk-XKA2ICR3.js} +124 -113
  102. package/dist/{chunk-UXMFQ54G.js → chunk-Y45G3AXC.js} +39 -39
  103. package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
  104. package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
  105. package/dist/{chunk-V5DHCITQ.js → chunk-ZAZB4JMW.js} +23 -12
  106. package/dist/{chunk-Z4TXYIEG.js → chunk-ZJLUDYFY.js} +9 -9
  107. package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
  108. package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
  109. package/dist/cli/index.js +36 -36
  110. package/dist/{clio-2JXHBBY5.js → clio-IT3G3VQH.js} +12 -13
  111. package/dist/{code-nav-3YYRMYNF.js → code-nav-RK6S7F6E.js} +5 -5
  112. package/dist/codewiki/build-worker.js +1 -1
  113. package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
  114. package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
  115. package/dist/{config-QZPCMYSO.js → config-3QZRWZJF.js} +53 -49
  116. package/dist/{configure-TEGEBYCA.js → configure-FL7Y3KJF.js} +25 -22
  117. package/dist/{context-E6H5RNMC.js → context-5HE7ODYK.js} +47 -43
  118. package/dist/{context-AV7OEZ4D.js → context-KYQFRVDC.js} +11 -11
  119. package/dist/{context-GSXUE4CT.js → context-XNHL75JV.js} +32 -19
  120. package/dist/{context-clear-SHIBYK6T.js → context-clear-N545L53A.js} +47 -43
  121. package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-QHKXSV2F.js} +10 -9
  122. package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-RGIE5PCT.js} +56 -47
  123. package/dist/{docs-23KQS3XK.js → docs-5NAF6AU7.js} +5 -11
  124. package/dist/doctor-ZGPEGHIP.js +772 -0
  125. package/dist/{eval-TFBYQH4H.js → eval-GXLL44RD.js} +63 -45
  126. package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-HBWSWQOK.js} +7 -8
  127. package/dist/{evidence-ERGESKGN.js → evidence-HWLBRH3Q.js} +44 -40
  128. package/dist/{evolve-VDXTSYCJ.js → evolve-FTZBMNVW.js} +43 -39
  129. package/dist/{extensions-7BGBHN57.js → extensions-VHRBEID7.js} +4 -4
  130. package/dist/{fleet-2RRVDF2V.js → fleet-CKZHJWZJ.js} +86 -73
  131. package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EXDXBMV6.js} +10 -9
  132. package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-OTHB6KRL.js} +5 -5
  133. package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-YTEZUCUT.js} +13 -11
  134. package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-SS6YMDCK.js} +44 -41
  135. package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-PBY4VYOM.js} +5 -9
  136. package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-KMEM5L3S.js} +16 -13
  137. package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-QD5M7E7Q.js} +42 -39
  138. package/dist/{fleet-view-ZCON35AG.js → fleet-view-WAMJYNDT.js} +44 -52
  139. package/dist/{init-DN2WWLFE.js → init-5XQRBOFV.js} +63 -58
  140. package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
  141. package/dist/{interop-OZBKXAYL.js → interop-34TVO25M.js} +13 -11
  142. package/dist/{library-YWZG7IMW.js → library-3QY6KF57.js} +17 -14
  143. package/dist/{memory-I4C4HMLW.js → memory-L4UTIIIW.js} +45 -41
  144. package/dist/{models-CEYXJBO6.js → models-ZVX3QOWE.js} +39 -31
  145. package/dist/{monitor-NZ6GCI3P.js → monitor-CEKVSYTS.js} +50 -46
  146. package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-77BAP6BC.js} +1807 -1039
  147. package/dist/{panes-KY6W3V2E.js → panes-7STHOAUJ.js} +4 -4
  148. package/dist/{panes-HMABYVO4.js → panes-SHAUIRXY.js} +10 -8
  149. package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
  150. package/dist/{reset-DQ6FGCSH.js → reset-EOLM7GVE.js} +7 -8
  151. package/dist/{resources-BB3MVJMD.js → resources-74GKTLSF.js} +17 -13
  152. package/dist/{run-H2GQDUER.js → run-HBAUJNNZ.js} +86 -76
  153. package/dist/{share-GTJN6A5O.js → share-G3APVLVP.js} +17 -14
  154. package/dist/{skills-L55TEW6R.js → skills-35HHUKCR.js} +19 -16
  155. package/dist/{skills-eval-XVXPH2JI.js → skills-eval-QN4HSHDC.js} +55 -57
  156. package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-J357J34F.js} +15 -12
  157. package/dist/{slash-commands-ZSGASKJC.js → slash-commands-JZZCQA32.js} +31 -29
  158. package/dist/{steer-RZGSCY4R.js → steer-XAVHJM22.js} +3 -3
  159. package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
  160. package/dist/{targets-NCPZ644J.js → targets-DSM6CY3M.js} +59 -53
  161. package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-JOPFUVEM.js} +14 -9
  162. package/dist/{tools-DAF3DI3C.js → tools-MKNWVPBH.js} +10 -8
  163. package/dist/{trace-FYVW2MQA.js → trace-ECQ7TIYZ.js} +48 -3
  164. package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
  165. package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
  166. package/dist/{upgrade-3XPP6OQL.js → upgrade-H7TOM7YL.js} +35 -62
  167. package/dist/{usage-3NLHGTU2.js → usage-X52N3IDJ.js} +51 -48
  168. package/dist/{verifiers-SSQONKRT.js → verifiers-EJTVVSMA.js} +10 -9
  169. package/dist/{verify-3U6J7FZI.js → verify-YJL6XET2.js} +9 -8
  170. package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPIFL3LL.js} +1 -2
  171. package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-4NDZTQ4B.js} +66 -63
  172. package/dist/{with-panes-MKB46MPQ.js → with-panes-OBOBFIIR.js} +62 -26
  173. package/dist/worker/entry.js +57 -52
  174. package/docs/acp.md +1 -1
  175. package/docs/built-in-agents.md +40 -32
  176. package/docs/commands-and-modes.md +9 -3
  177. package/docs/config-knobs-audit.md +3 -0
  178. package/docs/configuration-and-targets.md +105 -164
  179. package/docs/environment-variables.md +2 -1
  180. package/docs/exit-codes-and-output.md +2 -0
  181. package/docs/fleet-demo-runbook.md +6 -3
  182. package/docs/fleet-dispatch.md +8 -6
  183. package/docs/installation-and-lifecycle.md +1 -1
  184. package/docs/release-cut-checklist.md +164 -177
  185. package/docs/trace-store.md +15 -10
  186. package/docs/troubleshooting.md +1 -1
  187. package/evals/README.md +5 -0
  188. package/evals/behavioral-corpus-grader.mjs +103 -0
  189. package/evals/behavioral-machinery-baseline.json +2276 -0
  190. package/evals/behavioral-machinery-driver.ts +250 -0
  191. package/evals/behavioral-machinery-support.ts +253 -0
  192. package/evals/behavioral-machinery.yaml +614 -0
  193. package/evals/behavioral-model-negative-control.yaml +68 -0
  194. package/evals/behavioral-model.yaml +216 -0
  195. package/evals/fixtures/behavioral-facts.txt +3 -0
  196. package/evals/fixtures/behavioral-main.ts +7 -0
  197. package/evals/fixtures/decoy/note.txt +2 -0
  198. package/evals/fixtures/private/credentials.txt +1 -0
  199. package/evals/tracked-metrics-baseline.yaml +229 -0
  200. package/evals/tracked-metrics-grader.mjs +129 -0
  201. package/package.json +5 -15
  202. package/skills/README.md +6 -6
  203. package/skills/coding/ast-grep/SKILL.md +8 -2
  204. package/skills/coding/coding-standards/SKILL.md +8 -2
  205. package/skills/coding/prototype/SKILL.md +8 -2
  206. package/skills/coding/tdd/SKILL.md +8 -2
  207. package/skills/context/context-handoff/SKILL.md +12 -3
  208. package/skills/context/context-handoff/evals.md +3 -3
  209. package/skills/context/context-prime/SKILL.md +8 -2
  210. package/skills/context/context-prime/evals.md +2 -2
  211. package/skills/git/file-ticket/SKILL.md +9 -4
  212. package/skills/git/file-ticket/evals.md +2 -2
  213. package/skills/git/fix-issue/SKILL.md +12 -5
  214. package/skills/git/fix-issue/evals.md +4 -4
  215. package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
  216. package/skills/git/resolve-merge-conflicts/evals.md +2 -2
  217. package/skills/git/ship/SKILL.md +9 -3
  218. package/skills/git/ship/evals.md +4 -4
  219. package/skills/git/worktree-create/SKILL.md +7 -2
  220. package/skills/git/worktree-create/evals.md +6 -6
  221. package/skills/git/worktree-merge/SKILL.md +7 -2
  222. package/skills/git/worktree-merge/evals.md +6 -6
  223. package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
  224. package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
  225. package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
  226. package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
  227. package/skills/meta/credentials/SKILL.md +9 -2
  228. package/skills/meta/find-skills/SKILL.md +8 -2
  229. package/skills/meta/herdr/SKILL.md +8 -2
  230. package/skills/meta/skill-craft/SKILL.md +21 -4
  231. package/skills/planning/architecture/SKILL.md +9 -3
  232. package/skills/planning/backlog/SKILL.md +8 -2
  233. package/skills/planning/prd/SKILL.md +8 -2
  234. package/skills/planning/product-intent/SKILL.md +8 -2
  235. package/skills/planning/tech-spec/SKILL.md +9 -3
  236. package/skills/registry.yaml +66 -66
  237. package/skills/research/arxiv-literature/SKILL.md +8 -2
  238. package/skills/research/experiment-protocol/SKILL.md +9 -2
  239. package/skills/research/scientific-debugging/SKILL.md +9 -2
  240. package/skills/research/scientific-debugging/evals.md +2 -2
  241. package/skills/research/scientific-modernization/SKILL.md +9 -2
  242. package/skills/skill-marketplace.json +257 -38
  243. package/skills/workflow/cut-it/SKILL.md +10 -2
  244. package/skills/workflow/design-council/SKILL.md +11 -2
  245. package/skills/workflow/grill-me/SKILL.md +8 -2
  246. package/skills/workflow/workflow-distiller/SKILL.md +8 -2
  247. package/src/cli/acp.ts +2 -2
  248. package/src/cli/auth.ts +2 -2
  249. package/src/cli/bootstrap-generate.ts +5 -5
  250. package/src/cli/clio.ts +6 -1
  251. package/src/cli/config-inspect.ts +3 -3
  252. package/src/cli/configure-interop.ts +1 -1
  253. package/src/cli/configure.ts +27 -27
  254. package/src/cli/default-target.ts +1 -1
  255. package/src/cli/docs.ts +6 -6
  256. package/src/cli/doctor-naming.ts +323 -0
  257. package/src/cli/doctor-panes.ts +46 -14
  258. package/src/cli/doctor-toolchain.ts +29 -8
  259. package/src/cli/doctor.ts +15 -1
  260. package/src/cli/eval-inventory.ts +8 -8
  261. package/src/cli/evidence-detail.ts +1 -1
  262. package/src/cli/evidence-inventory.ts +1 -1
  263. package/src/cli/fleet-decisions.ts +1 -1
  264. package/src/cli/fleet-inspect.ts +1 -1
  265. package/src/cli/fleet-preflight.ts +1 -1
  266. package/src/cli/fleet-verify.ts +1 -1
  267. package/src/cli/fleet-view.ts +40 -23
  268. package/src/cli/fleet.ts +8 -5
  269. package/src/cli/interop-inspect.ts +2 -2
  270. package/src/cli/models.ts +3 -3
  271. package/src/cli/modes/print.ts +1 -1
  272. package/src/cli/reset.ts +1 -1
  273. package/src/cli/run.ts +11 -15
  274. package/src/cli/share.ts +1 -1
  275. package/src/cli/skills-eval.ts +11 -11
  276. package/src/cli/targets.ts +23 -24
  277. package/src/cli/trace-inspect.ts +1 -1
  278. package/src/cli/trace.ts +41 -0
  279. package/src/cli/uninstall.ts +2 -2
  280. package/src/cli/upgrade.ts +29 -34
  281. package/src/cli/usage.ts +2 -2
  282. package/src/cli/validate-model.ts +1 -1
  283. package/src/cli/verifiers-inspect.ts +1 -1
  284. package/src/cli/wiki-generate.ts +5 -5
  285. package/src/core/bash-exec.ts +1 -1
  286. package/src/core/boot-trace.ts +3 -3
  287. package/src/core/bus-trace.ts +2 -2
  288. package/src/core/compile-cache.ts +1 -1
  289. package/src/core/config.ts +1062 -886
  290. package/src/core/defaults.ts +321 -528
  291. package/src/core/domain-loader.ts +6 -4
  292. package/src/core/event-bus.ts +1 -1
  293. package/src/core/file-references.ts +78 -88
  294. package/src/core/git-commit-attribution.ts +3 -9
  295. package/src/core/guardrails.ts +24 -4
  296. package/src/core/naming-compat.ts +45 -0
  297. package/src/core/naming-events.ts +62 -0
  298. package/src/core/recent-models.ts +1 -7
  299. package/src/core/residency-protection.ts +4 -8
  300. package/src/core/resolve-config-value.ts +1 -1
  301. package/src/core/response-model-id.ts +0 -14
  302. package/src/core/session-routing.ts +84 -74
  303. package/src/core/skill-activation.ts +18 -0
  304. package/src/core/termination.ts +4 -4
  305. package/src/core/timers.ts +2 -12
  306. package/src/domains/agents/catalog.ts +2 -12
  307. package/src/domains/agents/extension.ts +3 -3
  308. package/src/domains/agents/registry.ts +7 -7
  309. package/src/domains/agents/result-contract.ts +1 -1
  310. package/src/domains/agents/spec.ts +0 -11
  311. package/src/domains/config/classify.ts +35 -47
  312. package/src/domains/config/extension.ts +5 -5
  313. package/src/domains/config/keybindings.ts +48 -47
  314. package/src/domains/config/watcher.ts +1 -1
  315. package/src/domains/context/codewiki/indexer.ts +1 -1
  316. package/src/domains/context/extension.ts +3 -3
  317. package/src/domains/context/prompt-context.ts +1 -1
  318. package/src/domains/context/wiki/assemble.ts +2 -2
  319. package/src/domains/context/working-set/replay/metrics.ts +0 -4
  320. package/src/domains/context/working-set/replay/report.ts +1 -1
  321. package/src/domains/context/working-set/replay/synthetic.ts +2 -2
  322. package/src/domains/dispatch/active-route-planner.ts +2 -2
  323. package/src/domains/dispatch/agent-candidates.ts +1 -1
  324. package/src/domains/dispatch/agent-ledger-store.ts +1 -1
  325. package/src/domains/dispatch/agent-ledger.ts +1 -1
  326. package/src/domains/dispatch/assignment.ts +5 -5
  327. package/src/domains/dispatch/capacity-lease.ts +2 -5
  328. package/src/domains/dispatch/code-step.ts +1 -1
  329. package/src/domains/dispatch/contract.ts +2 -2
  330. package/src/domains/dispatch/extension.ts +65 -61
  331. package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
  332. package/src/domains/dispatch/fleet-preflight.ts +8 -17
  333. package/src/domains/dispatch/fleet-run.ts +0 -7
  334. package/src/domains/dispatch/gate-decisions.ts +25 -14
  335. package/src/domains/dispatch/joint-route-resolver.ts +1 -1
  336. package/src/domains/dispatch/path-scope.ts +0 -61
  337. package/src/domains/dispatch/placement.ts +2 -2
  338. package/src/domains/dispatch/receipt-findings.ts +1 -1
  339. package/src/domains/dispatch/receipt-integrity.ts +20 -8
  340. package/src/domains/dispatch/reservation-store.ts +0 -23
  341. package/src/domains/dispatch/route-decision.ts +1 -1
  342. package/src/domains/dispatch/route-history.ts +1 -1
  343. package/src/domains/dispatch/route-policy.ts +1 -1
  344. package/src/domains/dispatch/route-readiness.ts +0 -28
  345. package/src/domains/dispatch/run-event-journal.ts +6 -5
  346. package/src/domains/dispatch/tool-stats.ts +1 -1
  347. package/src/domains/dispatch/transport.ts +2 -19
  348. package/src/domains/dispatch/types.ts +3 -3
  349. package/src/domains/dispatch/worker-protocol.ts +2 -2
  350. package/src/domains/eval/artifacts/store.ts +5 -4
  351. package/src/domains/eval/compare/thresholds.ts +0 -8
  352. package/src/domains/eval/execution-provenance.ts +1 -1
  353. package/src/domains/eval/metrics/token-stream.ts +0 -7
  354. package/src/domains/eval/report.ts +1 -1
  355. package/src/domains/eval/runner.ts +1 -1
  356. package/src/domains/eval/runners/clio-run.ts +7 -6
  357. package/src/domains/eval/runners/external-command.ts +4 -3
  358. package/src/domains/eval/schema/artifact.ts +1 -1
  359. package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
  360. package/src/domains/eval/schema/behavioral.ts +7 -6
  361. package/src/domains/eval/schema/execution-envelope.ts +4 -2
  362. package/src/domains/eval/schema/naming.ts +10 -0
  363. package/src/domains/eval/schema/suite.ts +2 -2
  364. package/src/domains/eval/schema/validate.ts +9 -5
  365. package/src/domains/eval/schema/verdict.ts +4 -2
  366. package/src/domains/eval/store.ts +12 -2
  367. package/src/domains/eval/suites/run.ts +12 -6
  368. package/src/domains/eval/types.ts +1 -1
  369. package/src/domains/eval/workspaces/git.ts +1 -1
  370. package/src/domains/eval/workspaces/temp-copy.ts +1 -1
  371. package/src/domains/evidence/build.ts +13 -5
  372. package/src/domains/interop/consent.ts +7 -7
  373. package/src/domains/interop/extension.ts +1 -1
  374. package/src/domains/lifecycle/doctor.ts +27 -21
  375. package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
  376. package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
  377. package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
  378. package/src/domains/lifecycle/migrations/index.ts +20 -1
  379. package/src/domains/lifecycle/naming-history.ts +153 -0
  380. package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
  381. package/src/domains/lifecycle/naming-resources.ts +261 -0
  382. package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
  383. package/src/domains/lifecycle/naming-yazi.ts +81 -0
  384. package/src/domains/lifecycle/upgrade-notice.ts +1 -1
  385. package/src/domains/memory/task-memory-handoff.ts +6 -3
  386. package/src/domains/middleware/index.ts +7 -0
  387. package/src/domains/middleware/marketplace-offer.ts +339 -0
  388. package/src/domains/middleware/runtime.ts +2 -2
  389. package/src/domains/mux/contract.ts +157 -25
  390. package/src/domains/mux/detect.ts +29 -5
  391. package/src/domains/mux/dock-controller.ts +365 -0
  392. package/src/domains/mux/extension.ts +7 -1
  393. package/src/domains/mux/index.ts +20 -0
  394. package/src/domains/mux/operations.ts +28 -0
  395. package/src/domains/mux/protocol.ts +19 -6
  396. package/src/domains/mux/socket-client.ts +167 -19
  397. package/src/domains/mux/types.ts +49 -6
  398. package/src/domains/mux/yazi/event-stream.ts +6 -4
  399. package/src/domains/mux/yazi/profile.ts +1 -1
  400. package/src/domains/mux/yazi/session.ts +26 -3
  401. package/src/domains/observability/extension.ts +1 -1
  402. package/src/domains/observability/out-of-turn-usage.ts +2 -2
  403. package/src/domains/observability/projection.ts +1 -1
  404. package/src/domains/observability/trace-store.ts +22 -12
  405. package/src/domains/prompts/compiler.ts +2 -2
  406. package/src/domains/prompts/extension.ts +3 -3
  407. package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
  408. package/src/domains/prompts/fragments/operating/skills.md +25 -18
  409. package/src/domains/providers/extension.ts +5 -5
  410. package/src/domains/providers/knowledge-base-path.ts +1 -1
  411. package/src/domains/providers/model-runtime-capabilities.ts +14 -2
  412. package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
  413. package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
  414. package/src/domains/providers/plugins.ts +1 -1
  415. package/src/domains/providers/resolver.ts +1 -1
  416. package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
  417. package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
  418. package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
  419. package/src/domains/providers/runtimes/common/probe-helpers.ts +2 -2
  420. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  421. package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
  422. package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
  423. package/src/domains/providers/types/knowledge-base.ts +13 -0
  424. package/src/domains/providers/types/local-model-quirks.ts +2 -2
  425. package/src/domains/providers/types/target-descriptor.ts +3 -3
  426. package/src/domains/resources/extension.ts +1 -1
  427. package/src/domains/resources/library.ts +6 -6
  428. package/src/domains/resources/prompts/loader.ts +1 -1
  429. package/src/domains/resources/skills/content-hash.ts +7 -6
  430. package/src/domains/resources/skills/evals.ts +1 -1
  431. package/src/domains/resources/skills/install.ts +36 -12
  432. package/src/domains/resources/skills/loader.ts +39 -13
  433. package/src/domains/resources/skills/marketplace.ts +21 -2
  434. package/src/domains/resources/skills/promotion.ts +214 -0
  435. package/src/domains/safety/audit.ts +2 -2
  436. package/src/domains/safety/finish-contract.ts +2 -1
  437. package/src/domains/safety/run-effects.ts +1 -1
  438. package/src/domains/scheduling/extension.ts +4 -4
  439. package/src/domains/session/archive-readers.ts +9 -1
  440. package/src/domains/session/compaction/branch-summary.ts +4 -0
  441. package/src/domains/session/compaction/compact.ts +1 -1
  442. package/src/domains/session/compaction/tokens.ts +4 -0
  443. package/src/domains/session/context-accounting.ts +1 -1
  444. package/src/domains/session/decision-board.ts +1 -1
  445. package/src/domains/session/extension.ts +1 -1
  446. package/src/domains/session/handoff.ts +2 -2
  447. package/src/domains/session/prompt-manifest.ts +0 -5
  448. package/src/domains/session/protected-artifact-journal.ts +12 -6
  449. package/src/domains/session/retry.ts +1 -1
  450. package/src/domains/share/archive.ts +85 -36
  451. package/src/domains/toolchain/install.ts +1 -1
  452. package/src/engine/acp/adapter.ts +3 -3
  453. package/src/engine/acp/event-mapper.ts +3 -3
  454. package/src/engine/acp/server.ts +27 -26
  455. package/src/engine/acp/tool-mediator.ts +2 -2
  456. package/src/engine/acp/types.ts +1 -1
  457. package/src/engine/alcf-oauth.ts +5 -5
  458. package/src/engine/antigravity/subprocess-runtime.ts +2 -2
  459. package/src/engine/api-registry.ts +1 -1
  460. package/src/engine/apis/llamacpp-residency.ts +1 -19
  461. package/src/engine/apis/lmstudio.ts +1 -6
  462. package/src/engine/apis/ollama-native.ts +3 -3
  463. package/src/engine/apis/openai-completions.ts +2 -2
  464. package/src/engine/apis/residency.ts +3 -9
  465. package/src/engine/claude/sdk-module.ts +1 -12
  466. package/src/engine/claude/sdk-runtime.ts +6 -6
  467. package/src/engine/claude/subprocess-runtime.ts +1 -1
  468. package/src/engine/claude/tool-safety.ts +4 -4
  469. package/src/engine/loop-guard.ts +0 -5
  470. package/src/engine/session.ts +14 -7
  471. package/src/engine/tui-primitives.ts +1 -1
  472. package/src/engine/worker-events.ts +6 -6
  473. package/src/engine/worker-runtime.ts +14 -13
  474. package/src/entry/orchestrator.ts +107 -88
  475. package/src/interactive/application-controller.ts +21 -21
  476. package/src/interactive/bus-notices.ts +2 -2
  477. package/src/interactive/chat-loop.ts +8 -8
  478. package/src/interactive/chat-panel.ts +1 -1
  479. package/src/interactive/clio-editor.ts +105 -1
  480. package/src/interactive/context-activity.ts +8 -6
  481. package/src/interactive/context-meter.ts +3 -6
  482. package/src/interactive/context-overlay.ts +1 -1
  483. package/src/interactive/cost-overlay.ts +1 -1
  484. package/src/interactive/council-grid.ts +2 -2
  485. package/src/interactive/dispatch-board.ts +30 -33
  486. package/src/interactive/editor-bash.ts +21 -0
  487. package/src/interactive/editor-steer.ts +9 -4
  488. package/src/interactive/editor-submit.ts +24 -18
  489. package/src/interactive/external-editor.ts +1 -1
  490. package/src/interactive/file-reference-completion.ts +360 -0
  491. package/src/interactive/footer/dashboard.ts +15 -17
  492. package/src/interactive/footer/notifications.ts +14 -8
  493. package/src/interactive/footer/widgets.ts +2 -44
  494. package/src/interactive/interactive-application.ts +79 -59
  495. package/src/interactive/interactive-event-projection.ts +1 -1
  496. package/src/interactive/interactive-input-runtime.ts +2 -2
  497. package/src/interactive/interactive-presentation.ts +21 -16
  498. package/src/interactive/interactive-shell.ts +2 -2
  499. package/src/interactive/interactive-slash-runtime.ts +63 -17
  500. package/src/interactive/interactive-subscriptions.ts +1 -1
  501. package/src/interactive/interactive-tickers.ts +1 -1
  502. package/src/interactive/keybinding-manager.ts +4 -4
  503. package/src/interactive/layout.ts +1 -1
  504. package/src/interactive/memory-overlay.ts +2 -2
  505. package/src/interactive/modal-marker.ts +2 -21
  506. package/src/interactive/mutation-preview.ts +1 -1
  507. package/src/interactive/overlay-frame.ts +4 -12
  508. package/src/interactive/overlay-general-openers.ts +6 -2
  509. package/src/interactive/overlay-key-routing.ts +7 -7
  510. package/src/interactive/overlay-lifecycle.ts +1 -1
  511. package/src/interactive/overlay-model-selectors.ts +3 -3
  512. package/src/interactive/overlays/agents.ts +2 -2
  513. package/src/interactive/overlays/ask-user.ts +25 -11
  514. package/src/interactive/overlays/context-reset.ts +28 -4
  515. package/src/interactive/overlays/cwd-fallback.ts +28 -4
  516. package/src/interactive/overlays/decisions.ts +4 -2
  517. package/src/interactive/overlays/fleet-run-approval.ts +3 -3
  518. package/src/interactive/overlays/handoff-review.ts +2 -2
  519. package/src/interactive/overlays/interop.ts +1 -1
  520. package/src/interactive/overlays/library-install-confirm.ts +1 -1
  521. package/src/interactive/overlays/message-picker.ts +1 -1
  522. package/src/interactive/overlays/model-selector.ts +39 -31
  523. package/src/interactive/overlays/prompts.ts +10 -4
  524. package/src/interactive/overlays/session-selector.ts +2 -2
  525. package/src/interactive/overlays/settings.ts +339 -293
  526. package/src/interactive/overlays/side-question.ts +2 -2
  527. package/src/interactive/overlays/skills-hub.ts +8 -8
  528. package/src/interactive/overlays/tree-selector.ts +2 -2
  529. package/src/interactive/panes-runtime.ts +36 -10
  530. package/src/interactive/permission-overlay.ts +2 -2
  531. package/src/interactive/renderers/retry-status.ts +12 -4
  532. package/src/interactive/renderers/tool-execution.ts +4 -4
  533. package/src/interactive/session-transcript.ts +3 -3
  534. package/src/interactive/slash-autocomplete.ts +454 -165
  535. package/src/interactive/slash-commands.ts +279 -183
  536. package/src/interactive/slash-spec.ts +160 -17
  537. package/src/interactive/status/controller.ts +2 -2
  538. package/src/interactive/stream-pacing-policy.ts +1 -1
  539. package/src/interactive/tasks-overlay.ts +20 -13
  540. package/src/interactive/terminal-lease.ts +6 -7
  541. package/src/interactive/turn-context.ts +11 -11
  542. package/src/interactive/turn-persistence.ts +2 -2
  543. package/src/interactive/turn-prewarm.ts +2 -2
  544. package/src/interactive/turn-runtime.ts +8 -8
  545. package/src/interactive/turn-state.ts +1 -1
  546. package/src/interactive/view/artifacts.ts +12 -9
  547. package/src/interactive/view/view-overlay.ts +13 -10
  548. package/src/interactive/watch-pane.ts +38 -10
  549. package/src/interactive/welcome-dashboard.ts +15 -15
  550. package/src/interactive/worker-progress.ts +4 -4
  551. package/src/interactive/worker-receipts.ts +1 -1
  552. package/src/interactive/worker-stream.ts +1 -4
  553. package/src/interactive/yazi-bridge.ts +12 -5
  554. package/src/tools/ask-user.ts +3 -3
  555. package/src/tools/bash.ts +1 -1
  556. package/src/tools/builtin-tool-catalog.ts +1 -1
  557. package/src/tools/compete-worktrees.ts +27 -17
  558. package/src/tools/context/index.ts +15 -1
  559. package/src/tools/dispatch-admission.ts +4 -2
  560. package/src/tools/dispatch-arguments.ts +1 -1
  561. package/src/tools/dispatch-plan.ts +0 -11
  562. package/src/tools/dispatch-run-events.ts +12 -10
  563. package/src/tools/dispatch-runner.ts +11 -6
  564. package/src/tools/dispatch.ts +1 -1
  565. package/src/tools/find.ts +1 -6
  566. package/src/tools/monitor.ts +4 -4
  567. package/src/tools/observers.ts +0 -33
  568. package/src/tools/task-worktree.ts +28 -7
  569. package/src/tools/verify/authoring.ts +3 -6
  570. package/src/tools/verify/frontend.ts +1 -1
  571. package/src/tools/web-fetch.ts +1 -1
  572. package/src/worker/entry.ts +4 -3
  573. package/src/worker/protocol.ts +16 -14
  574. package/src/worker/spec-contract.ts +2 -2
  575. package/src/worker/stdin-demux.ts +2 -2
  576. package/dist/chunk-GXNLGKAB.js +0 -571
  577. package/dist/chunk-VFA6GDY5.js +0 -1625
  578. package/dist/doctor-QOA5FNY5.js +0 -313
  579. package/src/engine/apis/degraded-inference.ts +0 -95
  580. /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
  581. /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
@@ -0,0 +1,261 @@
1
+ import {
2
+ cpSync,
3
+ existsSync,
4
+ mkdirSync,
5
+ readdirSync,
6
+ readFileSync,
7
+ renameSync,
8
+ rmSync,
9
+ statSync,
10
+ writeFileSync,
11
+ } from "node:fs";
12
+ import path from "node:path";
13
+
14
+ import { parse as parseYaml } from "yaml";
15
+ import { resolvePackageRoot } from "../../core/package-root.js";
16
+ import { fsyncDirectory } from "../../core/safe-resource-write.js";
17
+ import { resolveClioDirs } from "../../core/xdg.js";
18
+ import { normalizedSkillHash, stripProvenanceFrontmatter } from "../resources/skills/content-hash.js";
19
+
20
+ const LEGACY_SKILL_NAMES = [
21
+ ["clio-dev", "clio-coder-dev"],
22
+ ["clio-test", "clio-coder-test"],
23
+ ] as const;
24
+
25
+ export type NamingResourceStatus = "absent" | "canonical-present" | "modified" | "renamable" | "renamed";
26
+
27
+ export interface NamingResourceReport {
28
+ kind: "skill";
29
+ legacyPath: string;
30
+ canonicalPath: string;
31
+ status: NamingResourceStatus;
32
+ detail: string;
33
+ }
34
+
35
+ export interface NamingResourceOptions {
36
+ cwd?: string;
37
+ configDir?: string;
38
+ packageRoot?: string;
39
+ fix?: boolean;
40
+ }
41
+
42
+ function canonicalizeNamingText(text: string): string {
43
+ return text
44
+ .replaceAll("clio-dev", "clio-coder-dev")
45
+ .replaceAll("clio-test", "clio-coder-test")
46
+ .replace(/^clio:/gmu, "clio-coder:")
47
+ .replace(/^(\s*source:\s*)clio\s*$/gmu, "$1clio-coder");
48
+ }
49
+
50
+ function installedHash(raw: string): string | null {
51
+ const match = raw.match(/^\s*installed-hash:\s*["']?([0-9a-f]{64})["']?\s*$/mu);
52
+ return match?.[1] ?? null;
53
+ }
54
+
55
+ function regularFiles(root: string, current = root): string[] {
56
+ const out: string[] = [];
57
+ for (const entry of readdirSync(current, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {
58
+ const full = path.join(current, entry.name);
59
+ if (entry.isDirectory()) out.push(...regularFiles(root, full));
60
+ else if (entry.isFile()) out.push(path.relative(root, full));
61
+ else return [];
62
+ }
63
+ return out;
64
+ }
65
+
66
+ function provesUnmodifiedShippedCopy(legacyDir: string, canonicalBundleDir: string): boolean {
67
+ let legacyFiles: string[];
68
+ let canonicalFiles: string[];
69
+ try {
70
+ legacyFiles = regularFiles(legacyDir);
71
+ canonicalFiles = regularFiles(canonicalBundleDir);
72
+ } catch {
73
+ return false;
74
+ }
75
+ if (legacyFiles.length === 0 || legacyFiles.join("\0") !== canonicalFiles.join("\0")) return false;
76
+ for (const relative of legacyFiles) {
77
+ const legacyRaw = readFileSync(path.join(legacyDir, relative), "utf8");
78
+ const canonicalRaw = readFileSync(path.join(canonicalBundleDir, relative), "utf8");
79
+ if (relative === "SKILL.md") {
80
+ const recordedHash = installedHash(legacyRaw);
81
+ if (recordedHash === null || recordedHash !== normalizedSkillHash(legacyRaw)) return false;
82
+ if (canonicalizeNamingText(stripProvenanceFrontmatter(legacyRaw)) !== stripProvenanceFrontmatter(canonicalRaw))
83
+ return false;
84
+ continue;
85
+ }
86
+ if (canonicalizeNamingText(legacyRaw) !== canonicalRaw) return false;
87
+ }
88
+ return true;
89
+ }
90
+
91
+ function rewriteStagedCopy(stage: string, canonicalBundleDir: string): void {
92
+ const canonicalSkillHash = normalizedSkillHash(readFileSync(path.join(canonicalBundleDir, "SKILL.md"), "utf8"));
93
+ for (const relative of regularFiles(stage)) {
94
+ const file = path.join(stage, relative);
95
+ let next = canonicalizeNamingText(readFileSync(file, "utf8"));
96
+ if (relative === "SKILL.md") {
97
+ next = next.replace(/^(\s*installed-hash:\s*).+$/mu, `$1"${canonicalSkillHash}"`);
98
+ }
99
+ writeFileSync(file, next, "utf8");
100
+ }
101
+ }
102
+
103
+ let resourceSwapSequence = 0;
104
+
105
+ function migrateProvenSkill(legacyDir: string, canonicalDir: string, canonicalBundleDir: string): void {
106
+ const suffix = `${process.pid}-${++resourceSwapSequence}`;
107
+ const stage = `${canonicalDir}.clio-coder-naming-stage-${suffix}`;
108
+ const backup = `${legacyDir}.clio-coder-naming-backup-${suffix}`;
109
+ mkdirSync(path.dirname(canonicalDir), { recursive: true });
110
+ cpSync(legacyDir, stage, { recursive: true });
111
+ try {
112
+ rewriteStagedCopy(stage, canonicalBundleDir);
113
+ renameSync(legacyDir, backup);
114
+ try {
115
+ renameSync(stage, canonicalDir);
116
+ } catch (error) {
117
+ renameSync(backup, legacyDir);
118
+ throw error;
119
+ }
120
+ rmSync(backup, { recursive: true, force: true });
121
+ fsyncDirectory(path.dirname(canonicalDir));
122
+ } catch (error) {
123
+ rmSync(stage, { recursive: true, force: true });
124
+ throw error;
125
+ }
126
+ }
127
+
128
+ function existingDirectory(candidate: string): boolean {
129
+ try {
130
+ return statSync(candidate).isDirectory();
131
+ } catch {
132
+ return false;
133
+ }
134
+ }
135
+
136
+ /** Inspect only the selected user root and current project; never scan arbitrary repositories. */
137
+ export function inspectInstalledNamingResources(options: NamingResourceOptions = {}): NamingResourceReport[] {
138
+ const cwd = options.cwd ?? process.cwd();
139
+ const configDir = options.configDir ?? resolveClioDirs().config;
140
+ const packageRoot = options.packageRoot ?? resolvePackageRoot();
141
+ const roots = [path.join(configDir, "skills"), path.join(cwd, ".clio-coder", "skills")];
142
+ const reports: NamingResourceReport[] = [];
143
+ for (const root of roots) {
144
+ for (const [legacyName, canonicalName] of LEGACY_SKILL_NAMES) {
145
+ const legacyPath = path.join(root, legacyName);
146
+ const canonicalPath = path.join(root, canonicalName);
147
+ if (!existingDirectory(legacyPath)) {
148
+ reports.push({ kind: "skill", legacyPath, canonicalPath, status: "absent", detail: "legacy skill absent" });
149
+ continue;
150
+ }
151
+ if (existsSync(canonicalPath)) {
152
+ reports.push({
153
+ kind: "skill",
154
+ legacyPath,
155
+ canonicalPath,
156
+ status: "canonical-present",
157
+ detail: "canonical skill already exists; legacy copy left untouched",
158
+ });
159
+ continue;
160
+ }
161
+ const canonicalBundleDir = path.join(packageRoot, "skills", "meta", canonicalName);
162
+ if (!existingDirectory(canonicalBundleDir) || !provesUnmodifiedShippedCopy(legacyPath, canonicalBundleDir)) {
163
+ reports.push({
164
+ kind: "skill",
165
+ legacyPath,
166
+ canonicalPath,
167
+ status: "modified",
168
+ detail: "frontmatter/provenance/hash do not prove an unmodified shipped copy; left untouched",
169
+ });
170
+ continue;
171
+ }
172
+ if (options.fix) migrateProvenSkill(legacyPath, canonicalPath, canonicalBundleDir);
173
+ reports.push({
174
+ kind: "skill",
175
+ legacyPath,
176
+ canonicalPath,
177
+ status: options.fix ? "renamed" : "renamable",
178
+ detail: options.fix
179
+ ? "proven unmodified shipped copy renamed and canonicalized"
180
+ : "proven unmodified shipped copy can be renamed by doctor --fix",
181
+ });
182
+ }
183
+ }
184
+ return reports;
185
+ }
186
+
187
+ export interface ModelOverlayNamingInspection {
188
+ path: string;
189
+ legacyFile: boolean;
190
+ legacyMetadataKeys: number;
191
+ }
192
+
193
+ export interface SkillMetadataNamingInspection {
194
+ path: string;
195
+ legacyMetadataKey: boolean;
196
+ }
197
+
198
+ function collectSkillFiles(root: string, current = root): string[] {
199
+ if (!existingDirectory(current)) return [];
200
+ const out: string[] = [];
201
+ for (const entry of readdirSync(current, { withFileTypes: true })) {
202
+ const full = path.join(current, entry.name);
203
+ if (entry.isDirectory()) out.push(...collectSkillFiles(root, full));
204
+ else if (entry.isFile() && entry.name === "SKILL.md") out.push(full);
205
+ }
206
+ return out;
207
+ }
208
+
209
+ /** Read-only inventory of released skill metadata keys in selected Clio Coder roots. */
210
+ export function inspectSkillMetadataNaming(
211
+ options: Pick<NamingResourceOptions, "cwd" | "configDir"> = {},
212
+ ): SkillMetadataNamingInspection[] {
213
+ const cwd = options.cwd ?? process.cwd();
214
+ const configDir = options.configDir ?? resolveClioDirs().config;
215
+ const roots = [path.join(configDir, "skills"), path.join(cwd, ".clio-coder", "skills")];
216
+ return roots.flatMap((root) =>
217
+ collectSkillFiles(root).map((file) => ({
218
+ path: file,
219
+ legacyMetadataKey: /^clio:\s*(?:#.*)?$/mu.test(readFileSync(file, "utf8")),
220
+ })),
221
+ );
222
+ }
223
+
224
+ function countLegacyModelMetadata(value: unknown): number {
225
+ if (Array.isArray(value)) return value.reduce((count, entry) => count + countLegacyModelMetadata(entry), 0);
226
+ if (typeof value !== "object" || value === null) return 0;
227
+ const record = value as Record<string, unknown>;
228
+ return (
229
+ (Object.hasOwn(record, "clio") ? 1 : 0) +
230
+ Object.values(record).reduce<number>((count, entry) => count + countLegacyModelMetadata(entry), 0)
231
+ );
232
+ }
233
+
234
+ /** Read-only overlay inventory. User catalog files are never silently rewritten. */
235
+ export function inspectModelOverlayNaming(
236
+ options: Pick<NamingResourceOptions, "cwd" | "configDir"> = {},
237
+ ): ModelOverlayNamingInspection[] {
238
+ const cwd = options.cwd ?? process.cwd();
239
+ const configDir = options.configDir ?? resolveClioDirs().config;
240
+ const roots = [path.join(configDir, "model-catalog.d"), path.join(cwd, ".clio-coder", "model-catalog.d")];
241
+ const inspections: ModelOverlayNamingInspection[] = [];
242
+ for (const root of roots) {
243
+ if (!existingDirectory(root)) continue;
244
+ for (const entry of readdirSync(root, { withFileTypes: true })) {
245
+ if (!entry.isFile() || (!entry.name.endsWith(".yaml") && !entry.name.endsWith(".yml"))) continue;
246
+ const file = path.join(root, entry.name);
247
+ let legacyMetadataKeys = 0;
248
+ try {
249
+ legacyMetadataKeys = countLegacyModelMetadata(parseYaml(readFileSync(file, "utf8")));
250
+ } catch {
251
+ // The catalog loader owns the parse diagnostic; naming still reports the filename.
252
+ }
253
+ inspections.push({
254
+ path: file,
255
+ legacyFile: entry.name === "clio-local-coding-targets.yaml",
256
+ legacyMetadataKeys,
257
+ });
258
+ }
259
+ }
260
+ return inspections;
261
+ }
@@ -0,0 +1,139 @@
1
+ import { existsSync, readdirSync, readFileSync, renameSync, rmSync } from "node:fs";
2
+ import { join } from "node:path";
3
+
4
+ import { fsyncDirectory } from "../../core/safe-resource-write.js";
5
+ import { resolveClioDirs } from "../../core/xdg.js";
6
+ import { findPinnedTool } from "../toolchain/registry.js";
7
+
8
+ export const LEGACY_TOOL_MARKER = "clio-install.json";
9
+ export const CANONICAL_TOOL_MARKER = "clio-coder-install.json";
10
+
11
+ interface ValidToolMarker {
12
+ id: string;
13
+ version: string;
14
+ sha256: string;
15
+ }
16
+
17
+ export type ToolMarkerNamingStatus =
18
+ | "renamable"
19
+ | "renamed"
20
+ | "invalid-legacy"
21
+ | "canonical-conflict"
22
+ | "agreeing-duplicate"
23
+ | "duplicate-removed";
24
+
25
+ export interface ToolMarkerNamingReport {
26
+ tool: string;
27
+ version: string;
28
+ legacyPath: string;
29
+ canonicalPath: string;
30
+ status: ToolMarkerNamingStatus;
31
+ detail: string;
32
+ }
33
+
34
+ export interface ToolMarkerNamingOptions {
35
+ dataDir?: string;
36
+ fix?: boolean;
37
+ }
38
+
39
+ function childDirectories(root: string): string[] {
40
+ try {
41
+ return readdirSync(root, { withFileTypes: true })
42
+ .filter((entry) => entry.isDirectory() && !entry.name.startsWith("."))
43
+ .map((entry) => entry.name)
44
+ .sort((left, right) => left.localeCompare(right));
45
+ } catch {
46
+ return [];
47
+ }
48
+ }
49
+
50
+ function readValidMarker(path: string, tool: string, version: string): ValidToolMarker | null {
51
+ try {
52
+ const value: unknown = JSON.parse(readFileSync(path, "utf8"));
53
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return null;
54
+ const marker = value as Record<string, unknown>;
55
+ if (marker.id !== tool || marker.version !== version) return null;
56
+ if (typeof marker.sha256 !== "string" || !/^[0-9a-f]{64}$/u.test(marker.sha256)) return null;
57
+ return { id: tool, version, sha256: marker.sha256 };
58
+ } catch {
59
+ return null;
60
+ }
61
+ }
62
+
63
+ function sameFacts(left: ValidToolMarker, right: ValidToolMarker): boolean {
64
+ return left.id === right.id && left.version === right.version && left.sha256 === right.sha256;
65
+ }
66
+
67
+ /**
68
+ * Inspect or migrate released tool markers only below known tool/version
69
+ * directories in the selected Clio Coder data root. Unknown tool roots and
70
+ * symlinks are never traversed.
71
+ */
72
+ export function inspectToolMarkerNaming(options: ToolMarkerNamingOptions = {}): ToolMarkerNamingReport[] {
73
+ const toolsRoot = join(options.dataDir ?? resolveClioDirs().data, "tools");
74
+ const reports: ToolMarkerNamingReport[] = [];
75
+ for (const tool of childDirectories(toolsRoot)) {
76
+ if (findPinnedTool(tool) === null) continue;
77
+ for (const version of childDirectories(join(toolsRoot, tool))) {
78
+ const dir = join(toolsRoot, tool, version);
79
+ const legacyPath = join(dir, LEGACY_TOOL_MARKER);
80
+ if (!existsSync(legacyPath)) continue;
81
+ const canonicalPath = join(dir, CANONICAL_TOOL_MARKER);
82
+ const legacy = readValidMarker(legacyPath, tool, version);
83
+ if (legacy === null) {
84
+ reports.push({
85
+ tool,
86
+ version,
87
+ legacyPath,
88
+ canonicalPath,
89
+ status: "invalid-legacy",
90
+ detail: "legacy marker does not match its known tool/version path and checksum shape; left untouched",
91
+ });
92
+ continue;
93
+ }
94
+ if (!existsSync(canonicalPath)) {
95
+ if (options.fix) {
96
+ renameSync(legacyPath, canonicalPath);
97
+ fsyncDirectory(dir);
98
+ }
99
+ reports.push({
100
+ tool,
101
+ version,
102
+ legacyPath,
103
+ canonicalPath,
104
+ status: options.fix ? "renamed" : "renamable",
105
+ detail: options.fix ? "validated legacy marker renamed atomically" : "validated legacy marker can be renamed",
106
+ });
107
+ continue;
108
+ }
109
+ const canonical = readValidMarker(canonicalPath, tool, version);
110
+ if (canonical === null || !sameFacts(legacy, canonical)) {
111
+ reports.push({
112
+ tool,
113
+ version,
114
+ legacyPath,
115
+ canonicalPath,
116
+ status: "canonical-conflict",
117
+ detail:
118
+ "canonical and legacy marker facts disagree or canonical is invalid; canonical wins and legacy is left untouched",
119
+ });
120
+ continue;
121
+ }
122
+ if (options.fix) {
123
+ rmSync(legacyPath);
124
+ fsyncDirectory(dir);
125
+ }
126
+ reports.push({
127
+ tool,
128
+ version,
129
+ legacyPath,
130
+ canonicalPath,
131
+ status: options.fix ? "duplicate-removed" : "agreeing-duplicate",
132
+ detail: options.fix
133
+ ? "validated agreeing legacy duplicate removed; canonical marker kept"
134
+ : "canonical and legacy facts agree; legacy duplicate can be removed",
135
+ });
136
+ }
137
+ }
138
+ return reports;
139
+ }
@@ -0,0 +1,81 @@
1
+ import { readFileSync, statSync } from "node:fs";
2
+ import { join } from "node:path";
3
+
4
+ import { resolveClioDirs } from "../../core/xdg.js";
5
+ import { ensureYaziProfile, resetYaziProfile, yaziProfileDir } from "../mux/yazi/profile.js";
6
+ import { resolveToolBinary } from "../toolchain/resolve.js";
7
+
8
+ export interface YaziNamingInspection {
9
+ profileDir: string;
10
+ present: boolean;
11
+ legacyEvents: number;
12
+ legacyEnvironmentNames: number;
13
+ }
14
+
15
+ export interface YaziNamingRegenerationReport extends YaziNamingInspection {
16
+ status: "absent" | "canonical" | "regenerated" | "removed-unresolved" | "regeneration-failed";
17
+ detail: string;
18
+ }
19
+
20
+ export interface YaziNamingOptions {
21
+ cacheDir?: string;
22
+ yaziPath?: string | null;
23
+ yaPath?: string | null;
24
+ }
25
+
26
+ function occurrences(text: string, pattern: RegExp): number {
27
+ return [...text.matchAll(pattern)].length;
28
+ }
29
+
30
+ /** Inspect only the generated keymap below the selected Clio Coder cache root. */
31
+ export function inspectYaziNaming(cacheDir: string = resolveClioDirs().cache): YaziNamingInspection {
32
+ const profileDir = yaziProfileDir(cacheDir);
33
+ const present = statSync(profileDir, { throwIfNoEntry: false })?.isDirectory() === true;
34
+ let keymap = "";
35
+ try {
36
+ keymap = readFileSync(join(profileDir, "keymap.toml"), "utf8");
37
+ } catch {
38
+ // Missing or unreadable generated material is handled as disposable cache.
39
+ }
40
+ return {
41
+ profileDir,
42
+ present,
43
+ legacyEvents: occurrences(keymap, /(?<!clio-coder-)clio-pick/gmu),
44
+ legacyEnvironmentNames: occurrences(keymap, /\$CLIO_YAZI_PICK_TOKEN\b/gmu),
45
+ };
46
+ }
47
+
48
+ /**
49
+ * Replace the disposable managed profile from current inputs. Resolution is
50
+ * performed before removal so the report can state why a profile could not be
51
+ * rebuilt, while deletion remains confined to `<cache>/yazi/profile`.
52
+ */
53
+ export function regenerateYaziNamingProfile(options: YaziNamingOptions = {}): YaziNamingRegenerationReport {
54
+ const cacheDir = options.cacheDir ?? resolveClioDirs().cache;
55
+ const before = inspectYaziNaming(cacheDir);
56
+ if (!before.present) {
57
+ return { ...before, status: "absent", detail: "managed Yazi profile is absent; next open writes canonical names" };
58
+ }
59
+ if (before.legacyEvents === 0 && before.legacyEnvironmentNames === 0) {
60
+ return { ...before, status: "canonical", detail: "managed Yazi profile already uses canonical names" };
61
+ }
62
+ const yaziPath = options.yaziPath === undefined ? resolveToolBinary("yazi").binaryPath : options.yaziPath;
63
+ const yaPath = options.yaPath === undefined ? resolveToolBinary("ya").binaryPath : options.yaPath;
64
+ resetYaziProfile(before.profileDir);
65
+ if (!yaziPath || !yaPath) {
66
+ return {
67
+ ...before,
68
+ status: "removed-unresolved",
69
+ detail: "legacy managed profile removed; Yazi/ya is unresolved, so the next managed open will regenerate it",
70
+ };
71
+ }
72
+ const profile = ensureYaziProfile({ yaziPath, yaPath, profileDir: before.profileDir });
73
+ if (!profile) {
74
+ return {
75
+ ...before,
76
+ status: "regeneration-failed",
77
+ detail: "legacy managed profile removed, but current Yazi rejected the regenerated profile",
78
+ };
79
+ }
80
+ return { ...before, status: "regenerated", detail: "managed Yazi profile regenerated with canonical names" };
81
+ }
@@ -27,7 +27,7 @@ const KEYBOARD_FACING_CHANGES: Readonly<Record<string, string>> = Object.freeze(
27
27
  */
28
28
  export function describeUpgradeNotice(transition: UpgradeTransition): string {
29
29
  const changes = KEYBOARD_FACING_CHANGES[transition.to];
30
- const head = `clio: upgraded ${transition.from} → ${transition.to}.`;
30
+ const head = `clio-coder: upgraded ${transition.from} → ${transition.to}.`;
31
31
  const tail = `Full notes: CHANGELOG.md, section ${transition.to}.`;
32
32
  return changes === undefined
33
33
  ? `${head} What changed is in CHANGELOG.md, section ${transition.to}.`
@@ -11,7 +11,8 @@ import {
11
11
  } from "./task-bank.js";
12
12
 
13
13
  export const TASK_MEMORY_HANDOFF_VERSION = 2;
14
- export const TASK_MEMORY_HANDOFF_LANGUAGE = "clio-task-memory";
14
+ export const TASK_MEMORY_HANDOFF_LANGUAGE = "clio-coder-task-memory";
15
+ const LEGACY_TASK_MEMORY_HANDOFF_LANGUAGE = "clio-task-memory";
15
16
  const HANDOFF_MAX_BYTES = 1_000_000;
16
17
 
17
18
  export interface TaskMemoryHandoffEntry {
@@ -134,8 +135,10 @@ export function renderTaskMemoryHandoffSource(
134
135
 
135
136
  export function parseTaskMemoryHandoffSnapshot(text: string): TaskMemoryHandoffSnapshot | null {
136
137
  if (typeof text !== "string" || text.length === 0 || text.length > HANDOFF_MAX_BYTES) return null;
137
- const escapedLanguage = TASK_MEMORY_HANDOFF_LANGUAGE.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&");
138
- const match = new RegExp(`(?:^|\\n)\\x60{3}${escapedLanguage}\\r?\\n([^\\r\\n]+)\\r?\\n\\x60{3}(?:$|\\n)`, "u").exec(
138
+ const languages = [TASK_MEMORY_HANDOFF_LANGUAGE, LEGACY_TASK_MEMORY_HANDOFF_LANGUAGE]
139
+ .map((language) => language.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&"))
140
+ .join("|");
141
+ const match = new RegExp(`(?:^|\\n)\\x60{3}(?:${languages})\\r?\\n([^\\r\\n]+)\\r?\\n\\x60{3}(?:$|\\n)`, "u").exec(
139
142
  text,
140
143
  );
141
144
  if (match?.[1] === undefined) return null;
@@ -74,6 +74,13 @@ export {
74
74
  spawnSyncCommandRunner,
75
75
  } from "./hooks-io.js";
76
76
  export { MiddlewareManifest } from "./manifest.js";
77
+ export {
78
+ createMarketplaceOfferRegistration,
79
+ MARKETPLACE_OFFER_REGISTRATION_ID,
80
+ type MarketplaceOfferDeps,
81
+ marketplaceAutoInstallReminder,
82
+ marketplaceOfferReminder,
83
+ } from "./marketplace-offer.js";
77
84
  export {
78
85
  createMemoryInterventionRegistration,
79
86
  MEMORY_INTERVENTION_DEFAULT_MAX_TOKENS,