@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
@@ -1,26 +1,33 @@
1
1
  ---
2
2
  id: operating.skills
3
3
  version: 1
4
- budgetTokens: 260
4
+ budgetTokens: 340
5
5
  description: Coordinator skill suggestion discipline; rendered only when context is on the surface
6
6
  ---
7
7
 
8
8
  # Skills
9
9
 
10
- Skills package proven workflows. Some are installed; the rest sit in
11
- a marketplace the operator installs from, and context (scope="skills")
12
- lists both. Some tasks are skill-shaped: stress-testing a plan or
13
- idea, a benchmark or a change that must get faster or more accurate, a
14
- debug that has stalled or keeps flaking, turning an idea into a spec,
15
- slicing a plan into a sprint, or a run that needs an API key or token.
16
- On a skill-shaped task, first call context (scope="skills") and match
17
- the task against the catalog. Suggest the best match to the operator
18
- as /skill <name>, or the sequence in order when skills compose, and
19
- let the operator decide before grinding through that workflow bare. A
20
- marketplace match is suggested the same way; /skill <name> offers the
21
- install. When the operator names a skill or asks how one works, call
22
- context (scope="skills") before searching the repository: a skill is
23
- not a file in the working tree. Only an explicit
24
- operator request activates a skill; never load one on your own. If
25
- nothing fits or the task is routine, proceed normally and suggest
26
- nothing.
10
+ Skills package proven workflows. Some are installed; the rest sit in a
11
+ marketplace the operator installs from, and context (scope="skills") is
12
+ the one authoritative listing of both never guess the inventory or
13
+ search the repository for a skill file. The catalog spans git delivery
14
+ (filing, fixing, and shipping issues), planning (intent, PRD, backlog,
15
+ architecture, sprint slicing), coding practice (TDD, standards,
16
+ prototyping), context priming and handoff, research workflows, and
17
+ plan-stress-testing debates. When a task lands in one of those shapes,
18
+ call context (scope="skills") first and match it against the catalog.
19
+ Suggest the best match to the operator as /skill <name> — the sequence
20
+ in order when skills compose and let the operator decide before
21
+ grinding through that workflow bare; a marketplace match is suggested
22
+ the same way, and /skill <name> offers the install. When the operator
23
+ names a skill or asks how one works, answer from that same listing.
24
+ When a [Marketplace] reminder names an uninstalled skill for the
25
+ current request, first check the installed side with context
26
+ (scope="skills"); only if nothing installed serves and the named skill
27
+ truly fits, put the install question to the operator with ask_user
28
+ using exactly the four options the reminder states, then continue the
29
+ task in the same turn. The harness performs any consented install;
30
+ never install a skill yourself, and never offer one no reminder named.
31
+ Only an explicit operator request activates a skill; never load one on
32
+ your own. If nothing fits or the task is routine, proceed normally and
33
+ suggest nothing.
@@ -88,7 +88,7 @@ function positiveWindow(value: unknown): number | undefined {
88
88
  * `n_ctx: 0` still discovers the window it did publish, instead of silently
89
89
  * falling back to the runtime descriptor's placeholder.
90
90
  */
91
- export function capabilitiesFor(
91
+ function capabilitiesFor(
92
92
  desc: RuntimeDescriptor,
93
93
  target: TargetDescriptor,
94
94
  probe: ProbeMerge,
@@ -173,7 +173,7 @@ export interface ProbeMerge {
173
173
  * `cache`, while health and availability (decided by the caller from `probe`)
174
174
  * reflect the failure. Only a successful probe replaces the catalog.
175
175
  */
176
- export function mergeProbeResult(
176
+ function mergeProbeResult(
177
177
  desc: RuntimeDescriptor,
178
178
  target: TargetDescriptor,
179
179
  probe: ProbeResult | null,
@@ -224,7 +224,7 @@ export function mergeProbeResult(
224
224
  * Returns the reason when the default is not served, null when it is or when
225
225
  * there is no live evidence either way.
226
226
  */
227
- export function unservedDefaultModelReason(
227
+ function unservedDefaultModelReason(
228
228
  desc: Pick<RuntimeDescriptor, "id">,
229
229
  target: Pick<TargetDescriptor, "defaultModel">,
230
230
  merge: Pick<ProbeMerge, "discoveredModels" | "discoveredModelsSource" | "discoveredModelStates">,
@@ -396,7 +396,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
396
396
  }
397
397
  if (probeResult.ok && options?.reasoning !== false && typeof desc.probeReasoning === "function") {
398
398
  const settings = readConfig();
399
- const orchestratorTarget = settings.orchestrator.target === target.id ? settings.orchestrator.model : null;
399
+ const orchestratorTarget = settings.chat.target === target.id ? settings.chat.model : null;
400
400
  const candidateModelId = orchestratorTarget ?? target.defaultModel ?? null;
401
401
  if (candidateModelId) {
402
402
  try {
@@ -482,7 +482,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
482
482
  registerClioOAuthProviders();
483
483
  registerBuiltinRuntimes(registry);
484
484
  const settings = readConfig();
485
- setGlobalDefaultMaxOutputTokens(settings.defaults.maxTokens);
485
+ setGlobalDefaultMaxOutputTokens(settings.chat.maxOutputTokens);
486
486
  await loadPluginRuntimes(registry, settings);
487
487
  await probeAll();
488
488
  const config = context.getContract<ConfigContract>("config");
@@ -72,7 +72,7 @@ function envOverlayDirs(): string[] {
72
72
  .filter((entry) => entry.length > 0);
73
73
  }
74
74
 
75
- export function resolveProviderModelCatalogDirs(
75
+ function resolveProviderModelCatalogDirs(
76
76
  importMetaUrl: string,
77
77
  options: { cwd?: string } = {},
78
78
  ): ProviderModelCatalogDirs {
@@ -1,3 +1,4 @@
1
+ import { warnLegacyNaming } from "../../core/naming-compat.js";
1
2
  import type { Api, Model } from "../../engine/types.js";
2
3
  import { getCatalogModelForRuntime } from "./catalog.js";
3
4
  import type { ProvidersContract, TargetStatus } from "./contract.js";
@@ -111,10 +112,19 @@ function capabilityHints(input: {
111
112
  }
112
113
 
113
114
  interface ClioRuntimeMetadata {
115
+ clioCoder?: {
116
+ targetId?: string;
117
+ runtimeId?: string;
118
+ lifecycle?: "user-managed" | "clio-coder-managed";
119
+ gateway?: boolean;
120
+ family?: string;
121
+ quirks?: LocalModelQuirks;
122
+ };
123
+ /** Released in-memory metadata name accepted at plugin/runtime read boundaries. */
114
124
  clio?: {
115
125
  targetId?: string;
116
126
  runtimeId?: string;
117
- lifecycle?: "user-managed" | "clio-managed";
127
+ lifecycle?: "user-managed" | "clio-coder-managed";
118
128
  gateway?: boolean;
119
129
  family?: string;
120
130
  quirks?: LocalModelQuirks;
@@ -691,7 +701,9 @@ export function resolveModelRuntimeCapabilitiesForModel<TApi extends Api>(
691
701
  model: Model<TApi>,
692
702
  configuredThinkingLevel?: ThinkingLevel,
693
703
  ): ResolvedModelRuntimeCapabilities {
694
- const metadata = (model as Model<TApi> & ClioRuntimeMetadata).clio;
704
+ const runtimeModel = model as Model<TApi> & ClioRuntimeMetadata;
705
+ if (runtimeModel.clio !== undefined) warnLegacyNaming("model.clio", "model.clioCoder");
706
+ const metadata = runtimeModel.clioCoder ?? runtimeModel.clio;
695
707
  const caps = capabilitiesFromModel(model as Model<Api> & ClioRuntimeMetadata);
696
708
  return resolveModelRuntimeCapabilities({
697
709
  targetId: metadata?.targetId ?? null,
@@ -1,7 +1,7 @@
1
1
  # ALCF (Argonne) inference-gateway model knowledge base.
2
2
  #
3
3
  # GPT-OSS models served through ALCF are already covered by the existing
4
- # openai-gpt-oss family in local-models/clio-local-coding-targets.yaml.
4
+ # openai-gpt-oss family in local-models/clio-coder-local-coding-targets.yaml.
5
5
 
6
6
  - family: meta-llama-4-maverick
7
7
  matchPatterns:
@@ -308,7 +308,7 @@
308
308
  measuredUnder:
309
309
  hardware: unknown
310
310
  runtime: lmstudio
311
- build: "unknown; the host was the operator's `dynamo` LM Studio machine, whose bundled build string was not recorded on this date"
311
+ build: "unknown; the host was a Windows LM Studio machine whose bundled build string was not recorded on this date"
312
312
  llamaCpp: "unknown; the measurement went through LM Studio's OpenAI-compatible port, which does not expose the underlying server argv"
313
313
  date: "2026-08-08"
314
314
  source: "commit b3db3b82 (fix(providers): thinking off reaches the wire for models that reason by default)"
@@ -884,12 +884,12 @@
884
884
  measuredUnder:
885
885
  hardware: unknown
886
886
  runtime: "lmstudio and its OpenAI-compatible port for the reasoning findings; an unrecorded llama.cpp host for the presence-penalty finding"
887
- build: "unknown for both dates; the operator's `dynamo` host is a Windows LM Studio machine whose bundled build string was first recorded on 2026-08-29 as llama.cpp-win-x86_64-nvidia-cuda12-avx2, which is three weeks after the reasoning measurement and cannot be backdated to it"
887
+ build: "unknown for both dates; the Windows LM Studio measurement host's bundled build string was first recorded on 2026-08-29 as llama.cpp-win-x86_64-nvidia-cuda12-avx2, which is three weeks after the reasoning measurement and cannot be backdated to it"
888
888
  llamaCpp: "unknown; the reasoning measurement went through LM Studio's HTTP port, which does not expose the underlying server argv, and no argv survives for the dispatch that produced the presence-penalty value"
889
889
  date: "2026-08-08 (reasoning_effort and enable_thinking), 2026-07-06 (presence penalty)"
890
890
  source: "commits b3db3b82 and f7d76bf4"
891
891
  note: |
892
- Three numbers here are measurements. On 2026-08-08 on `dynamo` this
892
+ Three numbers here are measurements. On 2026-08-08 on that host this
893
893
  model spent 98 of 103 completion tokens reasoning on "what is 17+25"
894
894
  with no thinking field set; chat_template_kwargs enable_thinking was
895
895
  inert, re-checked with unique prompts to rule out prompt-cache hits;
@@ -1268,7 +1268,7 @@
1268
1268
  maxTokens: 32768
1269
1269
  quirks:
1270
1270
  measuredUnder:
1271
- hardware: "unknown; the host was the operator's `dynamo` LM Studio machine"
1271
+ hardware: "unknown; the host was a Windows LM Studio machine"
1272
1272
  runtime: "lmstudio, SDK 1.5.0 and its OpenAI-compatible port"
1273
1273
  build: "unknown; LM Studio's bundled llama.cpp build string was not recorded on this date"
1274
1274
  llamaCpp: "unknown; the measurement went through LM Studio, which does not expose the underlying server argv"
@@ -4,7 +4,7 @@
4
4
  * 1. `~/.config/clio-coder/runtimes/`: any `.js` file whose default export is a valid
5
5
  * RuntimeDescriptor. Resolved from `clioConfigDir()` so CLIO_CODER_HOME /
6
6
  * CLIO_CODER_CONFIG_DIR overrides flow through.
7
- * 2. npm packages listed under `settings.runtimePlugins` (optional field).
7
+ * 2. npm packages listed under `settings.integrations.runtimePlugins`.
8
8
  * Each package must export a `clioRuntimes: RuntimeDescriptor[]` array.
9
9
  *
10
10
  * Missing directories, import failures, and descriptor conflicts are logged
@@ -117,7 +117,7 @@ function buildResult(
117
117
  *
118
118
  * Trailing `:low`/`:medium`/`:high`/`:xhigh`/`:minimal`/`:off` is parsed off
119
119
  * before matching and surfaced on the returned ref so callers can apply it
120
- * to settings.orchestrator.thinkingLevel.
120
+ * to settings.chat.thinkingLevel.
121
121
  */
122
122
  export function resolveModelReference(rawPattern: string, providers: ProvidersContract): ResolveModelResult {
123
123
  const trimmed = rawPattern.trim();
@@ -35,13 +35,13 @@ const KNOWN_MODELS: string[] = [
35
35
 
36
36
  type AlcfCluster = string;
37
37
 
38
- export function clusterFromUrl(url: string | undefined): AlcfCluster | null {
38
+ function clusterFromUrl(url: string | undefined): AlcfCluster | null {
39
39
  if (!url) return null;
40
40
  const match = /\/resource_server\/([^/]+)\//.exec(url);
41
41
  return match ? (match[1] ?? null) : null;
42
42
  }
43
43
 
44
- export function frameworkForCluster(cluster: AlcfCluster): string {
44
+ function frameworkForCluster(cluster: AlcfCluster): string {
45
45
  return cluster === "metis" ? "api" : "vllm";
46
46
  }
47
47
 
@@ -59,7 +59,7 @@ export function catalogModels(payload: CatalogPayload, cluster: string, framewor
59
59
  return models.map((model) => String(model).trim()).filter((model) => model.length > 0);
60
60
  }
61
61
 
62
- export function runningModels(payload: JobsPayload): string[] {
62
+ function runningModels(payload: JobsPayload): string[] {
63
63
  const out: string[] = [];
64
64
  for (const job of payload.running ?? []) {
65
65
  for (const raw of String(job.Models ?? "").split(",")) {
@@ -162,7 +162,7 @@ const alcfRuntime: RuntimeDescriptor = {
162
162
  provider: "alcf",
163
163
  baseUrlForTarget: withAsIs,
164
164
  });
165
- const meta = (model as Model<Api> & { clio?: { chatTemplateKwargsUnsupported?: boolean } }).clio;
165
+ const meta = (model as Model<Api> & { clioCoder?: { chatTemplateKwargsUnsupported?: boolean } }).clioCoder;
166
166
  if (meta) meta.chatTemplateKwargsUnsupported = true;
167
167
  return model;
168
168
  },
@@ -169,7 +169,7 @@ function reasoningOptions(capabilities: unknown): string[] | undefined {
169
169
  return options.length > 0 ? options : undefined;
170
170
  }
171
171
 
172
- export function parseLmStudioV1Models(data: unknown): LmStudioModelInfo[] | null {
172
+ function parseLmStudioV1Models(data: unknown): LmStudioModelInfo[] | null {
173
173
  if (!isRecord(data) || !Array.isArray(data.models)) return null;
174
174
  const models: LmStudioModelInfo[] = [];
175
175
  for (const raw of data.models) {
@@ -285,10 +285,6 @@ export function resolveLmStudioInstance(
285
285
  return { requestedId, wireModelId: requestedId, peerTargets: [], state: "unknown" };
286
286
  }
287
287
 
288
- export function resetLmStudioHostCatalogs(): void {
289
- catalogsByHost.clear();
290
- }
291
-
292
288
  export function lmStudioReasoningLevels(options: ReadonlyArray<string> | undefined): ThinkingLevel[] {
293
289
  if (!options || options.length === 0) return [...THINKING_LEVELS];
294
290
  if (options.includes("on") && !options.includes("low") && !options.includes("medium") && !options.includes("high")) {
@@ -7,10 +7,10 @@ import { extractLocalModelQuirks, type LocalModelQuirks } from "../../types/loca
7
7
  import type { RuntimeApiFamily } from "../../types/runtime-descriptor.js";
8
8
  import type { TargetDescriptor } from "../../types/target-descriptor.js";
9
9
 
10
- export type LocalModelLifecycle = "user-managed" | "clio-managed";
10
+ export type LocalModelLifecycle = "user-managed" | "clio-coder-managed";
11
11
 
12
12
  export interface ClioLocalModelMetadata {
13
- clio?: {
13
+ clioCoder?: {
14
14
  targetId: string;
15
15
  runtimeId: string;
16
16
  /**
@@ -101,7 +101,7 @@ export function synthLocalModel(input: LocalSynthesisInput): Model<Api> {
101
101
  },
102
102
  contextWindow: caps.contextWindow,
103
103
  maxTokens: caps.maxTokens,
104
- clio: {
104
+ clioCoder: {
105
105
  targetId: target.id,
106
106
  runtimeId: target.runtime,
107
107
  ...(target.lifecycle ? { lifecycle: target.lifecycle } : {}),
@@ -357,7 +357,7 @@ export interface LlamaCppRequestContextWindow {
357
357
  * 25% (issue #187). With `--kv-unified` every slot shares one sequence and
358
358
  * the total is the window.
359
359
  */
360
- export function llamaCppRequestContextWindow(flags: LlamaCppServerFlags): LlamaCppRequestContextWindow | undefined {
360
+ function llamaCppRequestContextWindow(flags: LlamaCppServerFlags): LlamaCppRequestContextWindow | undefined {
361
361
  const total = positiveNumber(flags.contextSize);
362
362
  if (total === undefined) return undefined;
363
363
  const parallel = positiveNumber(flags.parallel);
@@ -423,7 +423,7 @@ function booleanFlag(args: ReadonlyArray<string>, ...flags: ReadonlyArray<string
423
423
  return undefined;
424
424
  }
425
425
 
426
- export function parseLlamaCppServerFlags(args: ReadonlyArray<string>): LlamaCppServerFlags {
426
+ function parseLlamaCppServerFlags(args: ReadonlyArray<string>): LlamaCppServerFlags {
427
427
  const flags: LlamaCppServerFlags = {};
428
428
  const ctxSize = numberFlag(args, "--ctx-size", "-c");
429
429
  if (ctxSize !== undefined) flags.contextSize = ctxSize;
@@ -100,7 +100,7 @@ async function* streamSse(body: ReadableStream<Uint8Array>): AsyncGenerator<Comp
100
100
  }
101
101
  } finally {
102
102
  if (droppedFrames > 0) {
103
- process.stderr.write(`[clio:llamacpp] dropped ${droppedFrames} malformed stream frame(s)\n`);
103
+ process.stderr.write(`[clio-coder:llamacpp] dropped ${droppedFrames} malformed stream frame(s)\n`);
104
104
  }
105
105
  reader.releaseLock();
106
106
  }
@@ -13,7 +13,6 @@ import {
13
13
  listLmStudioModels,
14
14
  lmStudioReasoningLevels,
15
15
  loadedContextLength,
16
- parseLmStudioV1Models,
17
16
  resolveLmStudioInstance,
18
17
  } from "../common/lmstudio-http.js";
19
18
  import { synthLocalModel, withV1 } from "../common/local-synth.js";
@@ -181,12 +180,6 @@ function probeFromCatalog(catalog: LmStudioCatalog, target: TargetDescriptor): P
181
180
  return result;
182
181
  }
183
182
 
184
- export function probeResultFromV1Models(data: unknown, target: TargetDescriptor, latencyMs?: number): ProbeResult {
185
- const models = parseLmStudioV1Models(data);
186
- if (!models) return { ok: false, error: "LM Studio /api/v1/models response has no models array" };
187
- return probeFromCatalog({ ok: true, models, tier: "0.4+", ...(latencyMs !== undefined ? { latencyMs } : {}) }, target);
188
- }
189
-
190
183
  const lmstudioRuntime: RuntimeDescriptor = {
191
184
  id: "lmstudio",
192
185
  aliases: ["lmstudio-native"],
@@ -224,13 +217,13 @@ const lmstudioRuntime: RuntimeDescriptor = {
224
217
  });
225
218
  const metadata = (
226
219
  model as Model<Api> & {
227
- clio?: {
220
+ clioCoder?: {
228
221
  chatTemplateKwargsUnsupported?: boolean;
229
222
  lmstudioReasoningOptions?: ReadonlyArray<string>;
230
223
  lmstudioDefaultModel?: string;
231
224
  };
232
225
  }
233
- ).clio;
226
+ ).clioCoder;
234
227
  if (metadata) {
235
228
  metadata.chatTemplateKwargsUnsupported = true;
236
229
  if (target.defaultModel) metadata.lmstudioDefaultModel = target.defaultModel;
@@ -14,10 +14,6 @@
14
14
  * publishes the real numbers on `/v1/model/info` instead, which is what this
15
15
  * probe reads.
16
16
  *
17
- * Second, routed-deployment attribution. Which physical model answered is a
18
- * per-response fact behind an alias, and LiteLLM returns it in `x-litellm-*`
19
- * response headers. See {@link routedDeploymentFromHeaders}.
20
- *
21
17
  * Structured output is the one property worth stating explicitly, because
22
18
  * getting it wrong is silent. `src/core/response-schema.ts` deliberately keys
23
19
  * the schema dialect on runtime id and not on api family, since a generic
@@ -110,7 +106,7 @@ function boolean(value: unknown): boolean | undefined {
110
106
  * so the caller can tell "the gateway says this model has no vision" apart from
111
107
  * "the gateway did not say", and merge accordingly.
112
108
  */
113
- export function capabilitiesFromLiteLLMModelInfo(info: Record<string, unknown>): Partial<CapabilityFlags> {
109
+ function capabilitiesFromLiteLLMModelInfo(info: Record<string, unknown>): Partial<CapabilityFlags> {
114
110
  const caps: Partial<CapabilityFlags> = {};
115
111
  const contextWindow = positiveInteger(info.max_input_tokens) ?? positiveInteger(info.max_tokens);
116
112
  if (contextWindow !== undefined) caps.contextWindow = contextWindow;
@@ -200,92 +196,6 @@ async function fetchCatalog(base: string, ctx: ProbeContext, headers: Record<str
200
196
  return { models, modelCapabilities: {}, modelStates: {}, deployments: {} };
201
197
  }
202
198
 
203
- /**
204
- * The routed deployment LiteLLM reports for one response.
205
- *
206
- * Behind an alias the physical model is a per-request fact: a fallback, a
207
- * context-window promotion, or an ordinary load-balancing choice all change it
208
- * without changing what the client asked for. Reporting the alias back as the
209
- * model is how a gateway hides an outage, and it is exactly what an operator
210
- * needs to see. LiteLLM answers in headers on every completion.
211
- */
212
- export interface RoutedDeployment {
213
- /** The alias the client asked for, e.g. `code`. */
214
- group?: string;
215
- /** The physical model that answered, e.g. `openai/katcoder2.5-35b-moe`. */
216
- model?: string;
217
- /** The upstream that served it. */
218
- apiBase?: string;
219
- /** Stable id of the specific deployment inside the group. */
220
- deploymentId?: string;
221
- /** Non-zero when the request did not reach its first-choice deployment. */
222
- attemptedFallbacks?: number;
223
- attemptedRetries?: number;
224
- }
225
-
226
- function headerValue(headers: { get(name: string): string | null }, name: string): string | undefined {
227
- const raw = headers.get(name)?.trim();
228
- return raw && raw.length > 0 ? raw : undefined;
229
- }
230
-
231
- function headerInteger(headers: { get(name: string): string | null }, name: string): number | undefined {
232
- const raw = headerValue(headers, name);
233
- if (raw === undefined) return undefined;
234
- const parsed = Number.parseInt(raw, 10);
235
- return Number.isFinite(parsed) ? parsed : undefined;
236
- }
237
-
238
- /**
239
- * Extract the routed deployment from a LiteLLM response, or null when the
240
- * headers are absent. Absent is the normal answer for every non-LiteLLM target,
241
- * so callers treat null as "no attribution available" rather than an error.
242
- */
243
- export function routedDeploymentFromHeaders(headers: { get(name: string): string | null }): RoutedDeployment | null {
244
- const routed: RoutedDeployment = {};
245
- const group = headerValue(headers, "x-litellm-model-group");
246
- if (group !== undefined) routed.group = group;
247
- const model = headerValue(headers, "x-litellm-model-name");
248
- if (model !== undefined) routed.model = model;
249
- const apiBase = headerValue(headers, "x-litellm-model-api-base");
250
- if (apiBase !== undefined) routed.apiBase = apiBase;
251
- const deploymentId = headerValue(headers, "x-litellm-model-id");
252
- if (deploymentId !== undefined) routed.deploymentId = deploymentId;
253
- const fallbacks = headerInteger(headers, "x-litellm-attempted-fallbacks");
254
- if (fallbacks !== undefined) routed.attemptedFallbacks = fallbacks;
255
- const retries = headerInteger(headers, "x-litellm-attempted-retries");
256
- if (retries !== undefined) routed.attemptedRetries = retries;
257
- return Object.keys(routed).length > 0 ? routed : null;
258
- }
259
-
260
- /**
261
- * One-line attribution for a routed response.
262
- *
263
- * A request that fell back says so. `code -> openai/qwen3.8-27b-dense @
264
- * mini.tail78f300.ts.net:8080 (fallback)` is the whole point of the runtime:
265
- * the operator asked for the coder, the coder was asleep, and something else
266
- * answered.
267
- */
268
- export function formatRoutedDeployment(routed: RoutedDeployment): string {
269
- const parts: string[] = [];
270
- if (routed.group && routed.model && routed.group !== routed.model) {
271
- parts.push(`${routed.group} -> ${routed.model}`);
272
- } else if (routed.model ?? routed.group) {
273
- parts.push((routed.model ?? routed.group) as string);
274
- }
275
- if (routed.apiBase) {
276
- let host = routed.apiBase;
277
- try {
278
- host = new URL(routed.apiBase).host;
279
- } catch {
280
- // A non-URL api_base is displayed verbatim.
281
- }
282
- parts.push(`@ ${host}`);
283
- }
284
- if ((routed.attemptedFallbacks ?? 0) > 0) parts.push("(fallback)");
285
- else if ((routed.attemptedRetries ?? 0) > 0) parts.push("(retried)");
286
- return parts.join(" ");
287
- }
288
-
289
199
  const litellmRuntime: RuntimeDescriptor = {
290
200
  id: "litellm",
291
201
  displayName: "LiteLLM gateway",
@@ -2,6 +2,7 @@ import { readdirSync, readFileSync, statSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { parse as parseYaml } from "yaml";
4
4
 
5
+ import { warnLegacyNaming } from "../../../core/naming-compat.js";
5
6
  import type { CapabilityFlags } from "./capability-flags.js";
6
7
 
7
8
  export interface KnowledgeBaseEntry {
@@ -9,6 +10,8 @@ export interface KnowledgeBaseEntry {
9
10
  matchPatterns: ReadonlyArray<string>;
10
11
  capabilities: Partial<CapabilityFlags>;
11
12
  quirks?: Record<string, unknown>;
13
+ /** Product-owned catalog metadata, normalized from either YAML spelling. */
14
+ clioCoder?: Record<string, unknown>;
12
15
  }
13
16
 
14
17
  export type MatchKind = "family" | "alias";
@@ -152,5 +155,15 @@ function normalizeEntry(raw: unknown, file: string): KnowledgeBaseEntry {
152
155
  }
153
156
  entry.quirks = candidate.quirks as Record<string, unknown>;
154
157
  }
158
+ const canonicalMetadata = candidate["clio-coder"];
159
+ const legacyMetadata = candidate.clio;
160
+ if (legacyMetadata !== undefined) warnLegacyNaming("clio: model metadata", "clio-coder: model metadata");
161
+ const metadata = canonicalMetadata ?? legacyMetadata;
162
+ if (metadata !== undefined) {
163
+ if (typeof metadata !== "object" || metadata === null || Array.isArray(metadata)) {
164
+ throw new Error(`knowledge base file ${file}: entry '${family}' clio-coder metadata must be an object`);
165
+ }
166
+ entry.clioCoder = metadata as Record<string, unknown>;
167
+ }
155
168
  return entry;
156
169
  }
@@ -3,7 +3,7 @@
3
3
  * keeps free-form `quirks` (gpu tiers, runtime preferences, serving notes), so
4
4
  * `KnowledgeBaseEntry.quirks` stays `Record<string, unknown>`. This module
5
5
  * narrows the slice the engine consumes (KV cache layout, per-mode sampling)
6
- * into a typed shape that flows through `model.clio.quirks` at synth time.
6
+ * into a typed shape that flows through `model.clioCoder.quirks` at synth time.
7
7
  *
8
8
  * Field naming follows the Hugging Face / model-card terminology so the YAML
9
9
  * can be authored against the source-of-truth card. The OpenAI adapter
@@ -201,7 +201,7 @@ function extractThinkingQuirks(raw: unknown): ThinkingQuirks | undefined {
201
201
  /**
202
202
  * Pull the engine-visible quirks slice out of a free-form catalog quirks
203
203
  * record. Returns `undefined` when nothing engine-relevant is configured so
204
- * `model.clio.quirks` only gets attached when it carries information.
204
+ * `model.clioCoder.quirks` only gets attached when it carries information.
205
205
  */
206
206
  export function extractLocalModelQuirks(raw: unknown): LocalModelQuirks | undefined {
207
207
  if (!isRecord(raw)) return undefined;
@@ -14,9 +14,9 @@ export interface TargetPricing {
14
14
  cacheWrite?: number;
15
15
  }
16
16
 
17
- // "clio-managed" is a settings.yaml enum value, not an artifact name; it stays
18
- // unrenamed by rebrand decision so existing `lifecycle:` lines keep working.
19
- export type TargetLifecycle = "user-managed" | "clio-managed";
17
+ // Canonical persisted lifecycle name. Readers temporarily normalize the
18
+ // released `clio-managed` spelling at the settings boundary.
19
+ export type TargetLifecycle = "user-managed" | "clio-coder-managed";
20
20
 
21
21
  export interface LmStudioLoadSettings {
22
22
  contextLength?: number;
@@ -12,7 +12,7 @@ export function createResourcesBundle(
12
12
  ...(options.cwd !== undefined ? { cwd: options.cwd } : {}),
13
13
  ...(options.reservedPromptNames !== undefined ? { reservedPromptNames: options.reservedPromptNames } : {}),
14
14
  skills: () => ({
15
- ...skillOptions(config()?.get().skills.trustProjectCompatRoots === true, options),
15
+ ...skillOptions(config()?.get().integrations.projectResources.trustProjectImports === true, options),
16
16
  }),
17
17
  });
18
18
  const extension: DomainExtension = {
@@ -37,7 +37,7 @@ function isRecord(value: unknown): value is Record<string, unknown> {
37
37
  }
38
38
 
39
39
  function catalogPath(): string {
40
- const configured = readSettings().library.catalog;
40
+ const configured = readSettings().integrations.library.catalog;
41
41
  return path.resolve(configured ?? path.join(clioConfigDir(), "library.yaml"));
42
42
  }
43
43
 
@@ -283,17 +283,17 @@ export function installLibraryPlan(plan: LibraryInstallPlan): void {
283
283
  }
284
284
 
285
285
  function confirmedRemote(): string {
286
- const settings = readSettings().library;
286
+ const settings = readSettings().integrations.library;
287
287
  if (!settings.remote || settings.remote !== settings.confirmedRemote) throw new Error("library_remote_unconfirmed");
288
288
  return settings.remote;
289
289
  }
290
290
 
291
291
  export function confirmLibraryRemote(url: string): void {
292
- const current = readSettings().library.remote;
292
+ const current = readSettings().integrations.library.remote;
293
293
  if (current !== null && current !== url) throw new Error("library_remote_mismatch");
294
294
  updateSettings((settings) => {
295
- if (settings.library.remote === null) settings.library.remote = url;
296
- settings.library.confirmedRemote = url;
295
+ if (settings.integrations.library.remote === null) settings.integrations.library.remote = url;
296
+ settings.integrations.library.confirmedRemote = url;
297
297
  });
298
298
  }
299
299
 
@@ -307,7 +307,7 @@ export async function syncLibrary(
307
307
  direction: "sync" | "push",
308
308
  runner: LibraryCommandRunner = runCommandVector,
309
309
  ): Promise<void> {
310
- const settings = readSettings().library;
310
+ const settings = readSettings().integrations.library;
311
311
  if (!settings.sync) throw new Error("library_sync_disabled");
312
312
  const remote = confirmedRemote();
313
313
  const cwd = path.dirname(catalogPath());
@@ -393,7 +393,7 @@ export function expandPromptTemplateInput(input: string, templates: PromptTempla
393
393
  };
394
394
  }
395
395
  if (!template.trusted) {
396
- const message = `prompt template ${template.name} comes from an untrusted project root; set skills.trustProjectCompatRoots to use it`;
396
+ const message = `prompt template ${template.name} comes from an untrusted project root; set integrations.projectResources.trustProjectImports to use it`;
397
397
  return {
398
398
  expanded: false,
399
399
  text: input,
@@ -2,7 +2,8 @@ import { createHash } from "node:crypto";
2
2
 
3
3
  /**
4
4
  * Frontmatter keys owned by the install lifecycle, recognized both at the top
5
- * level (legacy flat form) and nested under the reserved `clio:` block.
5
+ * level (legacy flat form) and nested under the reserved `clio-coder:` or
6
+ * released `clio:` block.
6
7
  * Stripped before hashing so upstream and installed copies compare on
7
8
  * content, not on when or how a copy was installed. Registry identity
8
9
  * (`registry-id`, `registry-url`) is deliberately NOT here: it names which
@@ -64,7 +65,7 @@ export function frontmatterRegion(rawText: string): FrontmatterRegion | null {
64
65
  export function stripProvenanceLines(lines: ReadonlyArray<string>): string[] {
65
66
  const kept: string[] = [];
66
67
  let dropIndent: number | null = null;
67
- let inClioBlock = false;
68
+ let inProductBlock = false;
68
69
  for (const line of lines) {
69
70
  const indent = line.length - line.trimStart().length;
70
71
  if (dropIndent !== null && line.trim().length > 0 && indent > dropIndent) continue;
@@ -72,19 +73,19 @@ export function stripProvenanceLines(lines: ReadonlyArray<string>): string[] {
72
73
  const keyMatch = line.match(/^([ \t]*)([A-Za-z][A-Za-z0-9-]*):/);
73
74
  const key = keyMatch?.[2];
74
75
  if (key !== undefined) {
75
- if (indent === 0) inClioBlock = key === "clio";
76
- if (PROVENANCE_KEYS.has(key) && (indent === 0 || inClioBlock)) {
76
+ if (indent === 0) inProductBlock = key === "clio-coder" || key === "clio";
77
+ if (PROVENANCE_KEYS.has(key) && (indent === 0 || inProductBlock)) {
77
78
  dropIndent = indent;
78
79
  continue;
79
80
  }
80
81
  }
81
82
  kept.push(line);
82
83
  }
83
- // A `clio:` mapping whose children were all lifecycle keys is now empty;
84
+ // A product mapping whose children were all lifecycle keys is now empty;
84
85
  // keep it and a source that never had the block reads as drifted from its
85
86
  // own installed copy. Drop the dangling key line.
86
87
  return kept.filter((line, index) => {
87
- if (!/^clio:\s*$/.test(line)) return true;
88
+ if (!/^(?:clio-coder|clio):\s*$/.test(line)) return true;
88
89
  for (let next = index + 1; next < kept.length; next += 1) {
89
90
  const candidate = kept[next] as string;
90
91
  if (candidate.trim().length === 0) continue;