@iowarp/clio-coder 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (751) hide show
  1. package/CHANGELOG.md +131 -0
  2. package/CONTRIBUTING.md +59 -36
  3. package/README.md +407 -375
  4. package/SECURITY.md +2 -1
  5. package/dist/{acp-G5WJBNCT.js → acp-TMDQZDIG.js} +14 -14
  6. package/dist/{agents-FMV2Q5G4.js → agents-5N5NG3XG.js} +45 -34
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/{auth-3IDSJEIK.js → auth-Z5CCBXKQ.js} +22 -21
  9. package/dist/{builtins-XCZWXSC7.js → builtins-K6TNDT24.js} +6 -6
  10. package/dist/{chunk-GR5G2PVF.js → chunk-2HFQNRV3.js} +15 -10
  11. package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
  12. package/dist/{chunk-HJJTYUHX.js → chunk-2NHR3NAY.js} +168 -1406
  13. package/dist/chunk-2X4RYJTJ.js +39 -0
  14. package/dist/{chunk-UXMFQ54G.js → chunk-2Z2IKEXI.js} +39 -43
  15. package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
  16. package/dist/chunk-34BHNEE3.js +1846 -0
  17. package/dist/{chunk-YJX4SHTD.js → chunk-35MSIRKH.js} +9 -4
  18. package/dist/chunk-3EBYEESD.js +314 -0
  19. package/dist/{chunk-CTJ4RNAA.js → chunk-3F7VUY77.js} +2 -2
  20. package/dist/chunk-3KIPBMUA.js +308 -0
  21. package/dist/chunk-3M6DQK6S.js +362 -0
  22. package/dist/{chunk-BPKCPIL7.js → chunk-462T4EGZ.js} +3 -3
  23. package/dist/{chunk-QLFS5GO2.js → chunk-4JDLP6ZS.js} +44 -37
  24. package/dist/{chunk-LDQ2ZF2M.js → chunk-4O6MANBS.js} +6 -6
  25. package/dist/{chunk-O6TL7WWY.js → chunk-54ODD65L.js} +6 -6
  26. package/dist/{chunk-JDG2WCRO.js → chunk-5KW52TEP.js} +5 -5
  27. package/dist/{chunk-NHLBIGRH.js → chunk-5PFYMY2V.js} +41 -18
  28. package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
  29. package/dist/chunk-77QIVUZB.js +1334 -0
  30. package/dist/{chunk-HWHKMHUA.js → chunk-7BHIY2MW.js} +9 -15
  31. package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
  32. package/dist/{chunk-VAZSBTKF.js → chunk-AZ4WMN4W.js} +2 -2
  33. package/dist/{chunk-B7OBL7PK.js → chunk-B74PXLU7.js} +21 -11
  34. package/dist/{chunk-CY6FY24N.js → chunk-B7HM5Z7T.js} +15 -15
  35. package/dist/{chunk-ULC6OTWO.js → chunk-BO7Y52RY.js} +88 -27
  36. package/dist/chunk-BTK3SSSK.js +67 -0
  37. package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
  38. package/dist/{chunk-DQITNCXG.js → chunk-BYMNWQ7O.js} +149 -159
  39. package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
  40. package/dist/{chunk-Z4TXYIEG.js → chunk-CRFOIAX3.js} +10 -10
  41. package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
  42. package/dist/{chunk-3BT2XMV4.js → chunk-CYZW7JHJ.js} +53 -60
  43. package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
  44. package/dist/chunk-D7E7WCDF.js +27 -0
  45. package/dist/{chunk-X3YGUTOB.js → chunk-DYHAXKHD.js} +90 -62
  46. package/dist/{chunk-QBJA7R7N.js → chunk-DZAW46HP.js} +3 -3
  47. package/dist/{chunk-MLKNTWH2.js → chunk-DZEK6CJN.js} +22 -22
  48. package/dist/{chunk-K5C3NCBD.js → chunk-E7GT7O5N.js} +5 -5
  49. package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
  50. package/dist/chunk-F2I26BDK.js +66 -0
  51. package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
  52. package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
  53. package/dist/{chunk-32KWKNSF.js → chunk-FVDGR2ZL.js} +4 -4
  54. package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
  55. package/dist/{chunk-SJ5ZKQ4S.js → chunk-HIICAHCJ.js} +2 -2
  56. package/dist/chunk-HJWWJ6IL.js +184 -0
  57. package/dist/{chunk-WZR7K7ZX.js → chunk-HKMD33FO.js} +32 -83
  58. package/dist/chunk-HLAFFSEK.js +360 -0
  59. package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
  60. package/dist/{chunk-KFZI4NIL.js → chunk-I64IFBLB.js} +152 -31
  61. package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
  62. package/dist/{chunk-BUMFYQFY.js → chunk-I66ZTYNP.js} +543 -267
  63. package/dist/{chunk-2OQE55CK.js → chunk-I7XBWTYH.js} +2 -2
  64. package/dist/{chunk-GKF55TAZ.js → chunk-IDNA72AH.js} +104 -3
  65. package/dist/{chunk-GCSMB2KY.js → chunk-IKOZFYBN.js} +1 -1
  66. package/dist/{chunk-J4W7KFM7.js → chunk-IKSLQ4XV.js} +5439 -3475
  67. package/dist/{chunk-6DB53AJS.js → chunk-IMXMHHMQ.js} +171 -30
  68. package/dist/{chunk-AB44T6BB.js → chunk-JBCS7CRR.js} +8 -7
  69. package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
  70. package/dist/{chunk-SP2RXXYO.js → chunk-JWJGP5DQ.js} +10 -10
  71. package/dist/{chunk-HZHHCK24.js → chunk-KKOJXO6R.js} +527 -325
  72. package/dist/chunk-KPXDY6QF.js +47 -0
  73. package/dist/{chunk-LQ3DZAMX.js → chunk-LJID3DYZ.js} +8 -2
  74. package/dist/{chunk-7MCTRUCE.js → chunk-M2DAX4F6.js} +2 -2
  75. package/dist/{chunk-VEO4AP2K.js → chunk-M2WXEHER.js} +4 -3
  76. package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
  77. package/dist/{chunk-YDFRH54B.js → chunk-MCMZMDAC.js} +4 -4
  78. package/dist/{chunk-J5Q24KAG.js → chunk-MNJGS2IN.js} +5 -6
  79. package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
  80. package/dist/chunk-NDDGJUXD.js +81 -0
  81. package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
  82. package/dist/chunk-NMJXSHBJ.js +283 -0
  83. package/dist/{chunk-VYMXRQI6.js → chunk-O3YUNJZ2.js} +88 -100
  84. package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
  85. package/dist/{chunk-Z2RR6MAK.js → chunk-P75RZCJW.js} +28 -6
  86. package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
  87. package/dist/{chunk-DYJP44XW.js → chunk-PGF63K6I.js} +2 -2
  88. package/dist/chunk-PJX3WQUQ.js +42 -0
  89. package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
  90. package/dist/{chunk-2JDWVJND.js → chunk-Q4XWMHX6.js} +5 -7
  91. package/dist/{chunk-W5VSYASO.js → chunk-QQLGQY2A.js} +46 -87
  92. package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
  93. package/dist/{chunk-C2LTL2W6.js → chunk-RLYRBIYQ.js} +463 -180
  94. package/dist/{chunk-4ZG3XFUR.js → chunk-S66XZJOF.js} +14 -23
  95. package/dist/{chunk-I5VEOC6I.js → chunk-SSEYRH53.js} +13 -14
  96. package/dist/chunk-SZAA6XDG.js +30 -0
  97. package/dist/{chunk-CODPRO7Q.js → chunk-TPEQIQIE.js} +7 -7
  98. package/dist/{chunk-QLL7ILRG.js → chunk-UBRFI4HS.js} +1151 -614
  99. package/dist/{chunk-O4XIVISU.js → chunk-UH347SHR.js} +227 -47
  100. package/dist/{chunk-OQBA45DZ.js → chunk-UH632ZYL.js} +2 -2
  101. package/dist/chunk-UXCU4E3T.js +303 -0
  102. package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
  103. package/dist/{chunk-IQ7KR472.js → chunk-VIA6RFQZ.js} +8 -13
  104. package/dist/{chunk-V5DHCITQ.js → chunk-VKPAQYEB.js} +49 -19
  105. package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
  106. package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
  107. package/dist/{chunk-3XML7CDN.js → chunk-W4YEMFBX.js} +3 -3
  108. package/dist/{chunk-U77AMWDL.js → chunk-W6NIE6OW.js} +44 -23
  109. package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
  110. package/dist/{chunk-QREDIESB.js → chunk-X7IARSHT.js} +15 -9
  111. package/dist/{chunk-3URVFKWK.js → chunk-XE3PCIXH.js} +5 -5
  112. package/dist/{chunk-FEFIFZTL.js → chunk-XGDPUNND.js} +2 -2
  113. package/dist/{chunk-F4CKPOEQ.js → chunk-XOXV5GKE.js} +119 -38
  114. package/dist/chunk-XQRY4DTA.js +657 -0
  115. package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
  116. package/dist/{chunk-NQQH3YT7.js → chunk-YJISEZKC.js} +3 -3
  117. package/dist/{chunk-X75E3D2N.js → chunk-ZGNYYXQ6.js} +18 -16
  118. package/dist/{chunk-LY4S7GJC.js → chunk-ZNT2M6TG.js} +20 -18
  119. package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
  120. package/dist/{chunk-IBEBSCYA.js → chunk-ZW4HH5JJ.js} +43 -34
  121. package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
  122. package/dist/cli/index.js +38 -37
  123. package/dist/{clio-2JXHBBY5.js → clio-7VB377CC.js} +12 -13
  124. package/dist/{code-nav-3YYRMYNF.js → code-nav-YVLCYA7V.js} +86 -18
  125. package/dist/codewiki/build-worker.js +1 -1
  126. package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
  127. package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
  128. package/dist/{config-QZPCMYSO.js → config-4HVOS65E.js} +112 -63
  129. package/dist/{configure-TEGEBYCA.js → configure-PIWO7B24.js} +25 -22
  130. package/dist/{context-E6H5RNMC.js → context-IYEHL3WQ.js} +53 -47
  131. package/dist/{context-GSXUE4CT.js → context-KQYIWPWT.js} +68 -42
  132. package/dist/{context-AV7OEZ4D.js → context-N6ZE3LGJ.js} +11 -11
  133. package/dist/{context-clear-SHIBYK6T.js → context-clear-G4OGZJDS.js} +53 -47
  134. package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-BWLF6LJP.js} +12 -11
  135. package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-2QQAITS3.js} +67 -58
  136. package/dist/{docs-23KQS3XK.js → docs-PD3EXDKU.js} +20 -25
  137. package/dist/doctor-LHBD36VU.js +773 -0
  138. package/dist/{eval-TFBYQH4H.js → eval-C45FYRJ6.js} +68 -49
  139. package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-6DEJPLBF.js} +7 -8
  140. package/dist/{evidence-ERGESKGN.js → evidence-6SHONYAF.js} +50 -44
  141. package/dist/{evolve-VDXTSYCJ.js → evolve-KRKMV72X.js} +49 -43
  142. package/dist/{extensions-7BGBHN57.js → extensions-KPZ2UHBB.js} +8 -6
  143. package/dist/{fleet-2RRVDF2V.js → fleet-IVTCKDHT.js} +93 -79
  144. package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EDWL3IT7.js} +10 -9
  145. package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-YP3YEFGK.js} +6 -6
  146. package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-ZFWKHY2M.js} +19 -15
  147. package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-FVUNCBML.js} +50 -45
  148. package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-UN5XED4R.js} +5 -9
  149. package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-XOWC4HSX.js} +22 -17
  150. package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-UN3SODEL.js} +48 -43
  151. package/dist/fleet-view-TWHJKCN6.js +96 -0
  152. package/dist/{init-DN2WWLFE.js → init-T2QORQ3Y.js} +72 -66
  153. package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
  154. package/dist/{interop-OZBKXAYL.js → interop-IN5I2A66.js} +13 -11
  155. package/dist/{library-YWZG7IMW.js → library-LSCATDLZ.js} +23 -18
  156. package/dist/{memory-I4C4HMLW.js → memory-HYOKAGGJ.js} +51 -45
  157. package/dist/{models-CEYXJBO6.js → models-2GPMFYCM.js} +42 -33
  158. package/dist/{monitor-NZ6GCI3P.js → monitor-E4ASVUJH.js} +56 -50
  159. package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-DDMPR3PY.js} +2676 -1507
  160. package/dist/{panes-KY6W3V2E.js → panes-E3RUXOW5.js} +5 -5
  161. package/dist/panes-IXKLOKA2.js +75 -0
  162. package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
  163. package/dist/{reset-DQ6FGCSH.js → reset-OAQP3W4O.js} +7 -8
  164. package/dist/{resources-BB3MVJMD.js → resources-OTRSN34L.js} +23 -17
  165. package/dist/{run-H2GQDUER.js → run-5DEYH5QK.js} +95 -84
  166. package/dist/{share-GTJN6A5O.js → share-IHWTLO3M.js} +26 -19
  167. package/dist/{skills-L55TEW6R.js → skills-IYMXMKW4.js} +25 -20
  168. package/dist/{skills-eval-XVXPH2JI.js → skills-eval-DROHSJAR.js} +63 -65
  169. package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-D7X4L4ZX.js} +21 -16
  170. package/dist/{slash-commands-ZSGASKJC.js → slash-commands-QBM7UZ3B.js} +38 -33
  171. package/dist/{steer-RZGSCY4R.js → steer-Z5DO23FJ.js} +3 -3
  172. package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
  173. package/dist/{targets-NCPZ644J.js → targets-P2FUC4IL.js} +64 -61
  174. package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-YREJ3JX2.js} +15 -10
  175. package/dist/{tools-DAF3DI3C.js → tools-5B7RO6MV.js} +10 -8
  176. package/dist/{trace-FYVW2MQA.js → trace-YMGMUM6A.js} +101 -8
  177. package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
  178. package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
  179. package/dist/{upgrade-3XPP6OQL.js → upgrade-PXK3S2YM.js} +36 -61
  180. package/dist/{usage-3NLHGTU2.js → usage-ME5MPXGX.js} +58 -53
  181. package/dist/{verifiers-SSQONKRT.js → verifiers-BVZ7IWOO.js} +10 -9
  182. package/dist/{verify-3U6J7FZI.js → verify-5K7ZKQFC.js} +9 -8
  183. package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPARV2K7.js} +2 -3
  184. package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-F5W5QTYY.js} +74 -70
  185. package/dist/{with-panes-MKB46MPQ.js → with-panes-BYOJCLAM.js} +78 -246
  186. package/dist/worker/entry.js +83 -63
  187. package/docs/README.md +176 -81
  188. package/docs/{acp.md → architecture/acp.md} +36 -20
  189. package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
  190. package/docs/{architecture.md → architecture/architecture.md} +43 -22
  191. package/docs/{artifact-placement.md → architecture/artifact-placement.md} +26 -23
  192. package/docs/architecture/artifact-versions.md +90 -0
  193. package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
  194. package/docs/{context-engine.md → architecture/context-engine.md} +25 -25
  195. package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
  196. package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
  197. package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
  198. package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
  199. package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
  200. package/docs/{model-catalog.md → architecture/model-catalog.md} +40 -17
  201. package/docs/{observability.md → architecture/observability.md} +26 -13
  202. package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
  203. package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +55 -20
  204. package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +35 -24
  205. package/docs/{safety-model.md → architecture/safety-model.md} +20 -15
  206. package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
  207. package/docs/architecture/time-conventions.md +125 -0
  208. package/docs/{trace-store.md → architecture/trace-store.md} +26 -13
  209. package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
  210. package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
  211. package/docs/{built-in-agents.md → guide/built-in-agents.md} +70 -46
  212. package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +73 -62
  213. package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -444
  214. package/docs/guide/configuration-reference.md +1158 -0
  215. package/docs/{environment-variables.md → guide/environment-variables.md} +31 -27
  216. package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +8 -3
  217. package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
  218. package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +47 -49
  219. package/docs/{glossary.md → guide/glossary.md} +14 -11
  220. package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +45 -14
  221. package/docs/guide/panes-and-files.md +290 -0
  222. package/docs/{proactive-memory.md → guide/proactive-memory.md} +79 -66
  223. package/docs/{resource-library.md → guide/resource-library.md} +13 -4
  224. package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +7 -3
  225. package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
  226. package/docs/{troubleshooting.md → guide/troubleshooting.md} +10 -5
  227. package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +13 -10
  228. package/docs/history/release-cut-checklist.md +207 -0
  229. package/docs/{development-pipeline.md → process/development-pipeline.md} +24 -26
  230. package/docs/process/documentation-coverage.md +100 -0
  231. package/docs/process/documentation-guide.md +187 -0
  232. package/docs/{eval-runner.md → process/eval-runner.md} +41 -50
  233. package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
  234. package/docs/{evolution.md → process/evolution.md} +2 -2
  235. package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +17 -10
  236. package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
  237. package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
  238. package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
  239. package/evals/README.md +5 -0
  240. package/evals/behavioral-corpus-grader.mjs +103 -0
  241. package/evals/behavioral-machinery-baseline.json +2276 -0
  242. package/evals/behavioral-machinery-driver.ts +250 -0
  243. package/evals/behavioral-machinery-support.ts +253 -0
  244. package/evals/behavioral-machinery.yaml +614 -0
  245. package/evals/behavioral-model-negative-control.yaml +68 -0
  246. package/evals/behavioral-model.yaml +216 -0
  247. package/evals/fixtures/behavioral-facts.txt +3 -0
  248. package/evals/fixtures/behavioral-main.ts +7 -0
  249. package/evals/fixtures/decoy/note.txt +2 -0
  250. package/evals/fixtures/private/credentials.txt +1 -0
  251. package/evals/tracked-metrics-baseline.yaml +229 -0
  252. package/evals/tracked-metrics-grader.mjs +129 -0
  253. package/package.json +13 -21
  254. package/skills/README.md +51 -42
  255. package/skills/coding/ast-grep/SKILL.md +9 -3
  256. package/skills/coding/coding-standards/SKILL.md +9 -3
  257. package/skills/coding/prototype/SKILL.md +9 -3
  258. package/skills/coding/tdd/SKILL.md +9 -3
  259. package/skills/context/context-handoff/SKILL.md +13 -4
  260. package/skills/context/context-handoff/evals.md +3 -3
  261. package/skills/context/context-prime/SKILL.md +9 -3
  262. package/skills/context/context-prime/evals.md +2 -2
  263. package/skills/git/file-ticket/SKILL.md +10 -5
  264. package/skills/git/file-ticket/evals.md +2 -2
  265. package/skills/git/fix-issue/SKILL.md +12 -5
  266. package/skills/git/fix-issue/evals.md +4 -4
  267. package/skills/git/resolve-merge-conflicts/SKILL.md +9 -3
  268. package/skills/git/resolve-merge-conflicts/evals.md +2 -2
  269. package/skills/git/ship/SKILL.md +10 -4
  270. package/skills/git/ship/evals.md +4 -4
  271. package/skills/git/worktree-create/SKILL.md +8 -3
  272. package/skills/git/worktree-create/evals.md +6 -6
  273. package/skills/git/worktree-merge/SKILL.md +8 -3
  274. package/skills/git/worktree-merge/evals.md +6 -6
  275. package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +22 -12
  276. package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +5 -4
  277. package/skills/meta/clio-coder-test/SKILL.md +146 -0
  278. package/skills/meta/{clio-test → clio-coder-test}/evals.md +10 -5
  279. package/skills/meta/clio-coder-test/references/harness.md +102 -0
  280. package/skills/meta/clio-coder-test/references/test-map.md +96 -0
  281. package/skills/meta/credentials/SKILL.md +10 -3
  282. package/skills/meta/find-skills/SKILL.md +9 -3
  283. package/skills/meta/herdr/SKILL.md +9 -3
  284. package/skills/meta/skill-craft/SKILL.md +39 -16
  285. package/skills/planning/architecture/SKILL.md +9 -3
  286. package/skills/planning/backlog/SKILL.md +9 -3
  287. package/skills/planning/prd/SKILL.md +9 -3
  288. package/skills/planning/product-intent/SKILL.md +9 -3
  289. package/skills/planning/tech-spec/SKILL.md +9 -3
  290. package/skills/registry.yaml +66 -66
  291. package/skills/research/arxiv-literature/SKILL.md +9 -3
  292. package/skills/research/experiment-protocol/SKILL.md +10 -3
  293. package/skills/research/scientific-debugging/SKILL.md +10 -3
  294. package/skills/research/scientific-debugging/evals.md +2 -2
  295. package/skills/research/scientific-modernization/SKILL.md +10 -3
  296. package/skills/skill-marketplace.json +285 -66
  297. package/skills/workflow/cut-it/SKILL.md +11 -3
  298. package/skills/workflow/design-council/SKILL.md +12 -3
  299. package/skills/workflow/grill-me/SKILL.md +9 -3
  300. package/skills/workflow/workflow-distiller/SKILL.md +9 -3
  301. package/src/cli/acp.ts +2 -2
  302. package/src/cli/args.ts +2 -2
  303. package/src/cli/auth.ts +2 -2
  304. package/src/cli/bootstrap-generate.ts +6 -6
  305. package/src/cli/clio.ts +6 -1
  306. package/src/cli/config-inspect.ts +68 -15
  307. package/src/cli/configure-interop.ts +1 -1
  308. package/src/cli/configure.ts +27 -31
  309. package/src/cli/default-target.ts +1 -1
  310. package/src/cli/docs.ts +28 -20
  311. package/src/cli/doctor-naming.ts +323 -0
  312. package/src/cli/doctor-panes.ts +46 -14
  313. package/src/cli/doctor-toolchain.ts +31 -10
  314. package/src/cli/doctor.ts +15 -1
  315. package/src/cli/eval-inventory.ts +8 -8
  316. package/src/cli/eval.ts +1 -2
  317. package/src/cli/evidence-detail.ts +1 -1
  318. package/src/cli/evidence-inventory.ts +1 -1
  319. package/src/cli/extensions.ts +2 -1
  320. package/src/cli/fleet-decisions.ts +1 -1
  321. package/src/cli/fleet-inspect.ts +1 -1
  322. package/src/cli/fleet-preflight.ts +1 -1
  323. package/src/cli/fleet-verify.ts +1 -1
  324. package/src/cli/fleet-view.ts +40 -23
  325. package/src/cli/fleet.ts +9 -6
  326. package/src/cli/index.ts +2 -1
  327. package/src/cli/internal-dispatch.ts +3 -4
  328. package/src/cli/interop-inspect.ts +2 -2
  329. package/src/cli/models.ts +3 -3
  330. package/src/cli/modes/print.ts +1 -1
  331. package/src/cli/panes.ts +19 -5
  332. package/src/cli/reset.ts +1 -1
  333. package/src/cli/run.ts +13 -17
  334. package/src/cli/share.ts +6 -2
  335. package/src/cli/skills-eval.ts +14 -14
  336. package/src/cli/targets.ts +25 -30
  337. package/src/cli/trace-inspect.ts +1 -1
  338. package/src/cli/trace.ts +96 -4
  339. package/src/cli/uninstall.ts +2 -2
  340. package/src/cli/upgrade.ts +29 -34
  341. package/src/cli/usage.ts +2 -2
  342. package/src/cli/validate-model.ts +1 -1
  343. package/src/cli/verifiers-inspect.ts +1 -1
  344. package/src/cli/wiki-generate.ts +6 -6
  345. package/src/core/artifact-paths.ts +1 -1
  346. package/src/core/bash-exec.ts +132 -87
  347. package/src/core/boot-trace.ts +3 -3
  348. package/src/core/bus-events.ts +51 -6
  349. package/src/core/bus-trace.ts +2 -2
  350. package/src/core/compile-cache.ts +1 -1
  351. package/src/core/config.ts +1066 -886
  352. package/src/core/defaults.ts +326 -530
  353. package/src/core/dispatch-outcome.ts +16 -0
  354. package/src/core/domain-loader.ts +6 -4
  355. package/src/core/event-bus.ts +1 -1
  356. package/src/core/file-references.ts +78 -88
  357. package/src/core/git-commit-attribution.ts +3 -9
  358. package/src/core/guardrails.ts +33 -52
  359. package/src/core/naming-compat.ts +45 -0
  360. package/src/core/naming-events.ts +62 -0
  361. package/src/core/prompt-hint.ts +9 -0
  362. package/src/core/recent-models.ts +1 -7
  363. package/src/core/residency-protection.ts +4 -8
  364. package/src/core/resolve-config-value.ts +1 -1
  365. package/src/core/response-model-id.ts +0 -14
  366. package/src/core/session-routing.ts +84 -74
  367. package/src/core/skill-activation.ts +18 -0
  368. package/src/core/termination.ts +4 -4
  369. package/src/core/timers.ts +2 -12
  370. package/src/domains/agents/builtins/architect.md +2 -3
  371. package/src/domains/agents/builtins/coder.md +3 -2
  372. package/src/domains/agents/builtins/debugger.md +2 -2
  373. package/src/domains/agents/builtins/documenter.md +2 -2
  374. package/src/domains/agents/builtins/git-master.md +1 -1
  375. package/src/domains/agents/builtins/oracle.md +1 -1
  376. package/src/domains/agents/builtins/provenance.md +1 -1
  377. package/src/domains/agents/builtins/researcher.md +1 -1
  378. package/src/domains/agents/builtins/scout.md +1 -1
  379. package/src/domains/agents/builtins/tester.md +2 -2
  380. package/src/domains/agents/builtins/verifier.md +2 -2
  381. package/src/domains/agents/builtins/wiki-writer.md +1 -1
  382. package/src/domains/agents/catalog.ts +14 -26
  383. package/src/domains/agents/contract.ts +2 -0
  384. package/src/domains/agents/extension.ts +26 -4
  385. package/src/domains/agents/registry.ts +7 -7
  386. package/src/domains/agents/result-contract.ts +1 -1
  387. package/src/domains/agents/spec.ts +0 -11
  388. package/src/domains/config/classify.ts +35 -47
  389. package/src/domains/config/extension.ts +5 -5
  390. package/src/domains/config/keybindings.ts +56 -47
  391. package/src/domains/config/watcher.ts +1 -1
  392. package/src/domains/context/codewiki/indexer.ts +1 -1
  393. package/src/domains/context/extension.ts +3 -6
  394. package/src/domains/context/prompt-context.ts +1 -1
  395. package/src/domains/context/wiki/assemble.ts +2 -2
  396. package/src/domains/context/working-set/path-index.ts +1 -0
  397. package/src/domains/context/working-set/replay/metrics.ts +0 -4
  398. package/src/domains/context/working-set/replay/report.ts +1 -1
  399. package/src/domains/context/working-set/replay/synthetic.ts +2 -2
  400. package/src/domains/dispatch/active-route-planner.ts +2 -2
  401. package/src/domains/dispatch/agent-candidates.ts +1 -1
  402. package/src/domains/dispatch/agent-ledger-store.ts +1 -1
  403. package/src/domains/dispatch/agent-ledger.ts +1 -1
  404. package/src/domains/dispatch/assignment.ts +5 -5
  405. package/src/domains/dispatch/capability-match.ts +10 -0
  406. package/src/domains/dispatch/capacity-lease.ts +2 -5
  407. package/src/domains/dispatch/code-step.ts +1 -1
  408. package/src/domains/dispatch/contract.ts +2 -2
  409. package/src/domains/dispatch/extension.ts +169 -82
  410. package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
  411. package/src/domains/dispatch/fleet-preflight.ts +8 -17
  412. package/src/domains/dispatch/fleet-run.ts +0 -7
  413. package/src/domains/dispatch/gate-decisions.ts +25 -14
  414. package/src/domains/dispatch/host-verification.ts +435 -39
  415. package/src/domains/dispatch/intent-requirements.ts +10 -0
  416. package/src/domains/dispatch/intent.ts +18 -1
  417. package/src/domains/dispatch/joint-route-resolver.ts +1 -1
  418. package/src/domains/dispatch/path-scope.ts +220 -70
  419. package/src/domains/dispatch/placement.ts +2 -2
  420. package/src/domains/dispatch/receipt-findings.ts +1 -1
  421. package/src/domains/dispatch/receipt-integrity.ts +20 -8
  422. package/src/domains/dispatch/reservation-store.ts +0 -23
  423. package/src/domains/dispatch/route-decision.ts +1 -1
  424. package/src/domains/dispatch/route-history.ts +1 -1
  425. package/src/domains/dispatch/route-policy.ts +1 -1
  426. package/src/domains/dispatch/route-readiness.ts +0 -28
  427. package/src/domains/dispatch/run-event-journal.ts +9 -19
  428. package/src/domains/dispatch/state.ts +2 -3
  429. package/src/domains/dispatch/tool-stats.ts +1 -1
  430. package/src/domains/dispatch/transport.ts +47 -40
  431. package/src/domains/dispatch/types.ts +58 -6
  432. package/src/domains/dispatch/worker-protocol.ts +2 -2
  433. package/src/domains/eval/artifacts/store.ts +10 -4
  434. package/src/domains/eval/compare/thresholds.ts +0 -8
  435. package/src/domains/eval/execution-provenance.ts +1 -1
  436. package/src/domains/eval/metrics/token-stream.ts +0 -7
  437. package/src/domains/eval/report.ts +1 -1
  438. package/src/domains/eval/runner.ts +1 -1
  439. package/src/domains/eval/runners/clio-run.ts +7 -6
  440. package/src/domains/eval/runners/external-command.ts +4 -3
  441. package/src/domains/eval/schema/artifact.ts +1 -1
  442. package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
  443. package/src/domains/eval/schema/behavioral.ts +7 -6
  444. package/src/domains/eval/schema/execution-envelope.ts +4 -2
  445. package/src/domains/eval/schema/naming.ts +10 -0
  446. package/src/domains/eval/schema/suite.ts +2 -2
  447. package/src/domains/eval/schema/validate.ts +9 -5
  448. package/src/domains/eval/schema/verdict.ts +4 -2
  449. package/src/domains/eval/store.ts +20 -3
  450. package/src/domains/eval/suites/run.ts +12 -6
  451. package/src/domains/eval/types.ts +1 -1
  452. package/src/domains/eval/workspaces/git.ts +1 -1
  453. package/src/domains/eval/workspaces/temp-copy.ts +1 -1
  454. package/src/domains/evidence/build.ts +13 -5
  455. package/src/domains/evidence/trust-status.ts +10 -1
  456. package/src/domains/extensions/contract.ts +15 -1
  457. package/src/domains/extensions/discovery.ts +238 -41
  458. package/src/domains/extensions/extension.ts +105 -6
  459. package/src/domains/extensions/index.ts +24 -0
  460. package/src/domains/extensions/integrity.ts +189 -0
  461. package/src/domains/extensions/manager.ts +17 -1
  462. package/src/domains/extensions/resource-path.ts +27 -0
  463. package/src/domains/extensions/resources.ts +18 -38
  464. package/src/domains/extensions/snapshot-store.ts +39 -0
  465. package/src/domains/extensions/snapshot.ts +180 -0
  466. package/src/domains/extensions/state.ts +385 -57
  467. package/src/domains/extensions/types.ts +118 -1
  468. package/src/domains/interop/consent.ts +7 -7
  469. package/src/domains/interop/extension.ts +1 -1
  470. package/src/domains/lifecycle/doctor.ts +27 -21
  471. package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
  472. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
  473. package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
  474. package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
  475. package/src/domains/lifecycle/migrations/index.ts +22 -1
  476. package/src/domains/lifecycle/naming-history.ts +153 -0
  477. package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
  478. package/src/domains/lifecycle/naming-resources.ts +276 -0
  479. package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
  480. package/src/domains/lifecycle/naming-yazi.ts +86 -0
  481. package/src/domains/lifecycle/upgrade-notice.ts +1 -1
  482. package/src/domains/memory/task-memory-handoff.ts +6 -3
  483. package/src/domains/middleware/contract.ts +26 -0
  484. package/src/domains/middleware/extension.ts +24 -24
  485. package/src/domains/middleware/hook-receipts.ts +27 -4
  486. package/src/domains/middleware/hooks-io.ts +65 -32
  487. package/src/domains/middleware/hooks.ts +64 -0
  488. package/src/domains/middleware/index.ts +35 -4
  489. package/src/domains/middleware/marketplace-offer.ts +339 -0
  490. package/src/domains/middleware/registrations.ts +326 -0
  491. package/src/domains/middleware/runtime.ts +30 -2
  492. package/src/domains/middleware/snapshot.ts +20 -7
  493. package/src/domains/mux/contract.ts +195 -25
  494. package/src/domains/mux/detect.ts +23 -6
  495. package/src/domains/mux/dock-controller.ts +365 -0
  496. package/src/domains/mux/extension.ts +7 -1
  497. package/src/domains/mux/index.ts +21 -1
  498. package/src/domains/mux/operations.ts +72 -5
  499. package/src/domains/mux/protocol.ts +19 -6
  500. package/src/domains/mux/socket-client.ts +167 -19
  501. package/src/domains/mux/types.ts +49 -6
  502. package/src/domains/mux/yazi/assets/yazi.toml +2 -2
  503. package/src/domains/mux/yazi/event-stream.ts +6 -4
  504. package/src/domains/mux/yazi/profile.ts +1 -1
  505. package/src/domains/mux/yazi/session.ts +79 -7
  506. package/src/domains/mux/yazi/theme.ts +117 -17
  507. package/src/domains/observability/contract.ts +10 -11
  508. package/src/domains/observability/extension.ts +12 -4
  509. package/src/domains/observability/out-of-turn-usage.ts +2 -2
  510. package/src/domains/observability/projection.ts +15 -91
  511. package/src/domains/observability/trace-store.ts +65 -19
  512. package/src/domains/prompts/compiler.ts +75 -55
  513. package/src/domains/prompts/contract.ts +15 -3
  514. package/src/domains/prompts/extension.ts +100 -12
  515. package/src/domains/prompts/fragments/identity/clio-worker.md +2 -4
  516. package/src/domains/prompts/fragments/identity/clio.md +6 -12
  517. package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
  518. package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
  519. package/src/domains/prompts/fragments/operating/contract.md +7 -15
  520. package/src/domains/prompts/fragments/operating/delegation.md +32 -34
  521. package/src/domains/prompts/fragments/operating/skills.md +11 -18
  522. package/src/domains/prompts/fragments/operating/worker.md +1 -8
  523. package/src/domains/providers/extension.ts +5 -5
  524. package/src/domains/providers/index.ts +1 -1
  525. package/src/domains/providers/knowledge-base-path.ts +1 -1
  526. package/src/domains/providers/model-runtime-capabilities.ts +99 -23
  527. package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
  528. package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +671 -106
  529. package/src/domains/providers/plugins.ts +1 -1
  530. package/src/domains/providers/resolver.ts +1 -1
  531. package/src/domains/providers/runtime-resolution.ts +31 -0
  532. package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
  533. package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
  534. package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
  535. package/src/domains/providers/runtimes/common/probe-helpers.ts +9 -4
  536. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  537. package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
  538. package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
  539. package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
  540. package/src/domains/providers/types/cost-provenance.ts +19 -0
  541. package/src/domains/providers/types/knowledge-base.ts +13 -0
  542. package/src/domains/providers/types/local-model-quirks.ts +87 -39
  543. package/src/domains/providers/types/target-descriptor.ts +3 -3
  544. package/src/domains/resources/extension.ts +1 -1
  545. package/src/domains/resources/library.ts +6 -6
  546. package/src/domains/resources/prompts/loader.ts +1 -1
  547. package/src/domains/resources/skills/content-hash.ts +7 -6
  548. package/src/domains/resources/skills/evals.ts +1 -1
  549. package/src/domains/resources/skills/install.ts +36 -12
  550. package/src/domains/resources/skills/loader.ts +41 -18
  551. package/src/domains/resources/skills/marketplace.ts +21 -2
  552. package/src/domains/resources/skills/promotion.ts +214 -0
  553. package/src/domains/safety/audit.ts +2 -2
  554. package/src/domains/safety/call-target.ts +1 -1
  555. package/src/domains/safety/finish-contract.ts +2 -1
  556. package/src/domains/safety/loop-detector.ts +7 -4
  557. package/src/domains/safety/run-effects.ts +1 -1
  558. package/src/domains/scheduling/extension.ts +4 -4
  559. package/src/domains/session/archive-readers.ts +9 -1
  560. package/src/domains/session/compaction/branch-summary.ts +4 -0
  561. package/src/domains/session/compaction/compact.ts +1 -1
  562. package/src/domains/session/compaction/tokens.ts +4 -0
  563. package/src/domains/session/context-accounting.ts +1 -1
  564. package/src/domains/session/decision-board.ts +1 -1
  565. package/src/domains/session/extension.ts +1 -1
  566. package/src/domains/session/handoff.ts +2 -2
  567. package/src/domains/session/prompt-manifest.ts +0 -5
  568. package/src/domains/session/protected-artifact-journal.ts +12 -6
  569. package/src/domains/session/retry.ts +1 -1
  570. package/src/domains/session/task-board.ts +10 -9
  571. package/src/domains/share/archive.ts +249 -43
  572. package/src/domains/toolchain/install.ts +1 -1
  573. package/src/engine/acp/adapter.ts +3 -3
  574. package/src/engine/acp/event-mapper.ts +3 -3
  575. package/src/engine/acp/server.ts +89 -35
  576. package/src/engine/acp/tool-mediator.ts +2 -2
  577. package/src/engine/acp/types.ts +1 -1
  578. package/src/engine/alcf-oauth.ts +5 -5
  579. package/src/engine/antigravity/subprocess-runtime.ts +2 -2
  580. package/src/engine/api-registry.ts +1 -1
  581. package/src/engine/apis/llamacpp-residency.ts +4 -23
  582. package/src/engine/apis/lmstudio.ts +4 -9
  583. package/src/engine/apis/ollama-native.ts +9 -9
  584. package/src/engine/apis/openai-completions.ts +30 -27
  585. package/src/engine/apis/output-budget.ts +8 -18
  586. package/src/engine/apis/residency.ts +10 -35
  587. package/src/engine/claude/sdk-module.ts +1 -12
  588. package/src/engine/claude/sdk-runtime.ts +6 -6
  589. package/src/engine/claude/subprocess-runtime.ts +1 -1
  590. package/src/engine/claude/tool-safety.ts +4 -4
  591. package/src/engine/gemma-channel-filter.ts +19 -0
  592. package/src/engine/loop-guard.ts +92 -17
  593. package/src/engine/session.ts +14 -7
  594. package/src/engine/tui-primitives.ts +1 -1
  595. package/src/engine/worker-events.ts +6 -6
  596. package/src/engine/worker-runtime.ts +54 -24
  597. package/src/engine/worker-tools.ts +3 -1
  598. package/src/entry/extension-hook-sources.ts +28 -0
  599. package/src/entry/extension-reload.ts +309 -0
  600. package/src/entry/orchestrator.ts +163 -120
  601. package/src/interactive/application-controller.ts +23 -22
  602. package/src/interactive/bus-notices.ts +10 -3
  603. package/src/interactive/chat-loop-messages.ts +3 -13
  604. package/src/interactive/chat-loop.ts +18 -9
  605. package/src/interactive/chat-panel.ts +37 -14
  606. package/src/interactive/chat-renderer.ts +71 -7
  607. package/src/interactive/clio-editor.ts +105 -1
  608. package/src/interactive/context-activity.ts +8 -6
  609. package/src/interactive/context-meter.ts +3 -6
  610. package/src/interactive/context-overlay.ts +1 -1
  611. package/src/interactive/cost-overlay.ts +1 -1
  612. package/src/interactive/council-grid.ts +2 -2
  613. package/src/interactive/dispatch-board.ts +36 -44
  614. package/src/interactive/editor-bash.ts +21 -0
  615. package/src/interactive/editor-steer.ts +9 -4
  616. package/src/interactive/editor-submit.ts +24 -18
  617. package/src/interactive/external-editor.ts +1 -1
  618. package/src/interactive/file-reference-completion.ts +360 -0
  619. package/src/interactive/footer/dashboard.ts +15 -17
  620. package/src/interactive/footer/notifications.ts +14 -8
  621. package/src/interactive/footer/widgets.ts +15 -44
  622. package/src/interactive/interactive-application.ts +116 -61
  623. package/src/interactive/interactive-event-projection.ts +1 -1
  624. package/src/interactive/interactive-input-runtime.ts +6 -2
  625. package/src/interactive/interactive-presentation.ts +22 -17
  626. package/src/interactive/interactive-shell.ts +2 -2
  627. package/src/interactive/interactive-slash-runtime.ts +65 -17
  628. package/src/interactive/interactive-subscriptions.ts +1 -1
  629. package/src/interactive/interactive-tickers.ts +1 -1
  630. package/src/interactive/keybinding-manager.ts +4 -4
  631. package/src/interactive/layout.ts +1 -1
  632. package/src/interactive/memory-overlay.ts +2 -2
  633. package/src/interactive/modal-marker.ts +2 -21
  634. package/src/interactive/mutation-preview.ts +1 -1
  635. package/src/interactive/overlay-frame.ts +4 -12
  636. package/src/interactive/overlay-general-openers.ts +6 -2
  637. package/src/interactive/overlay-key-routing.ts +7 -7
  638. package/src/interactive/overlay-lifecycle.ts +1 -1
  639. package/src/interactive/overlay-model-selectors.ts +3 -3
  640. package/src/interactive/overlays/agents.ts +2 -2
  641. package/src/interactive/overlays/ask-user.ts +25 -11
  642. package/src/interactive/overlays/context-reset.ts +28 -4
  643. package/src/interactive/overlays/cwd-fallback.ts +28 -4
  644. package/src/interactive/overlays/decisions.ts +4 -2
  645. package/src/interactive/overlays/extensions.ts +9 -1
  646. package/src/interactive/overlays/fleet-run-approval.ts +3 -3
  647. package/src/interactive/overlays/handoff-review.ts +2 -2
  648. package/src/interactive/overlays/help-reference.ts +13 -0
  649. package/src/interactive/overlays/interop.ts +1 -1
  650. package/src/interactive/overlays/library-install-confirm.ts +1 -1
  651. package/src/interactive/overlays/message-picker.ts +1 -1
  652. package/src/interactive/overlays/model-selector.ts +39 -31
  653. package/src/interactive/overlays/prompts.ts +10 -4
  654. package/src/interactive/overlays/session-selector.ts +2 -2
  655. package/src/interactive/overlays/settings.ts +360 -303
  656. package/src/interactive/overlays/side-question.ts +2 -2
  657. package/src/interactive/overlays/skills-hub.ts +8 -8
  658. package/src/interactive/overlays/tree-selector.ts +2 -2
  659. package/src/interactive/panes-runtime.ts +145 -43
  660. package/src/interactive/permission-overlay.ts +2 -2
  661. package/src/interactive/prompt-cache-identity.ts +88 -0
  662. package/src/interactive/renderers/retry-status.ts +12 -4
  663. package/src/interactive/renderers/tool-execution.ts +4 -4
  664. package/src/interactive/session-transcript.ts +3 -3
  665. package/src/interactive/slash-autocomplete.ts +454 -165
  666. package/src/interactive/slash-commands.ts +401 -190
  667. package/src/interactive/slash-spec.ts +160 -17
  668. package/src/interactive/status/controller.ts +2 -2
  669. package/src/interactive/stream-pacing-policy.ts +1 -24
  670. package/src/interactive/tasks-overlay.ts +20 -13
  671. package/src/interactive/terminal-lease.ts +6 -7
  672. package/src/interactive/turn-context.ts +41 -26
  673. package/src/interactive/turn-persistence.ts +2 -2
  674. package/src/interactive/turn-prewarm.ts +2 -2
  675. package/src/interactive/turn-runtime.ts +8 -8
  676. package/src/interactive/turn-state.ts +1 -1
  677. package/src/interactive/view/artifacts.ts +12 -9
  678. package/src/interactive/view/view-overlay.ts +13 -10
  679. package/src/interactive/watch-pane.ts +38 -10
  680. package/src/interactive/welcome-dashboard.ts +15 -15
  681. package/src/interactive/worker-progress.ts +4 -4
  682. package/src/interactive/worker-receipts.ts +1 -1
  683. package/src/interactive/worker-stream.ts +1 -4
  684. package/src/interactive/yazi-bridge.ts +72 -11
  685. package/src/tools/agent-tools.ts +30 -1
  686. package/src/tools/artifact.ts +2 -2
  687. package/src/tools/ask-user.ts +6 -6
  688. package/src/tools/bash.ts +2 -2
  689. package/src/tools/bootstrap.ts +4 -0
  690. package/src/tools/builtin-tool-catalog.ts +52 -22
  691. package/src/tools/codewiki/code-nav-surface.ts +6 -0
  692. package/src/tools/codewiki/code-nav.ts +99 -13
  693. package/src/tools/compete-worktrees.ts +27 -17
  694. package/src/tools/context/docs-engine.ts +20 -7
  695. package/src/tools/context/index.ts +44 -13
  696. package/src/tools/core-bootstrap.ts +28 -6
  697. package/src/tools/credential-present.ts +1 -2
  698. package/src/tools/dispatch-admission.ts +4 -2
  699. package/src/tools/dispatch-arguments.ts +6 -2
  700. package/src/tools/dispatch-plan.ts +48 -15
  701. package/src/tools/dispatch-run-events.ts +13 -11
  702. package/src/tools/dispatch-runner.ts +11 -6
  703. package/src/tools/dispatch-schema.ts +338 -0
  704. package/src/tools/dispatch-types.ts +3 -0
  705. package/src/tools/dispatch.ts +9 -254
  706. package/src/tools/find.ts +1 -6
  707. package/src/tools/ledger.ts +3 -5
  708. package/src/tools/monitor-surface.ts +5 -13
  709. package/src/tools/monitor.ts +4 -4
  710. package/src/tools/observation.ts +4 -5
  711. package/src/tools/observers.ts +0 -33
  712. package/src/tools/panes-surface.ts +4 -11
  713. package/src/tools/panes.ts +4 -2
  714. package/src/tools/policy.ts +15 -2
  715. package/src/tools/read.ts +5 -6
  716. package/src/tools/registry.ts +30 -7
  717. package/src/tools/result-shaping.ts +18 -14
  718. package/src/tools/steer-surface.ts +1 -1
  719. package/src/tools/task-worktree.ts +28 -7
  720. package/src/tools/tasks.ts +1 -1
  721. package/src/tools/truncate.ts +6 -5
  722. package/src/tools/verify/authoring.ts +3 -6
  723. package/src/tools/verify/frontend.ts +1 -1
  724. package/src/tools/verify/surface.ts +6 -12
  725. package/src/tools/web-fetch-surface.ts +1 -3
  726. package/src/tools/web-fetch.ts +1 -1
  727. package/src/worker/entry.ts +4 -3
  728. package/src/worker/protocol.ts +16 -14
  729. package/src/worker/spec-contract.ts +2 -2
  730. package/src/worker/stdin-demux.ts +2 -2
  731. package/dist/chunk-36EJLSQQ.js +0 -814
  732. package/dist/chunk-GXNLGKAB.js +0 -571
  733. package/dist/chunk-K7VKOLQQ.js +0 -15
  734. package/dist/chunk-PMZCIOCJ.js +0 -25
  735. package/dist/chunk-SUCTJL45.js +0 -45
  736. package/dist/chunk-SUW5DORT.js +0 -819
  737. package/dist/chunk-TZ3SGWZZ.js +0 -48
  738. package/dist/chunk-UOV2BYIW.js +0 -107
  739. package/dist/chunk-VFA6GDY5.js +0 -1625
  740. package/dist/doctor-QOA5FNY5.js +0 -313
  741. package/dist/fleet-view-ZCON35AG.js +0 -102
  742. package/dist/panes-HMABYVO4.js +0 -58
  743. package/docs/artifact-versions.md +0 -67
  744. package/docs/documentation-coverage.md +0 -46
  745. package/docs/documentation-guide.md +0 -167
  746. package/docs/release-cut-checklist.md +0 -193
  747. package/docs/time-conventions.md +0 -101
  748. package/skills/meta/clio-test/SKILL.md +0 -133
  749. package/skills/meta/clio-test/references/harness.md +0 -126
  750. package/skills/meta/clio-test/references/test-map.md +0 -69
  751. package/src/engine/apis/degraded-inference.ts +0 -95
@@ -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();
@@ -273,6 +273,34 @@ function appendThinkingDiagnostics(
273
273
  diagnostics.push(diagnostic(severity, `thinking-${thinking.noticeKind}`, thinking.notice));
274
274
  }
275
275
 
276
+ const CHAT_TEMPLATE_KWARGS_UNDELIVERABLE = "chat-template-kwargs-undeliverable";
277
+
278
+ /**
279
+ * One warning when the family declares chat-template kwargs the runtime
280
+ * cannot carry (#268). LM Studio ignores `chat_template_kwargs` for every
281
+ * family measured, so a Nemotron 3.5 target on that runtime runs without the
282
+ * `force_nonempty_content` its card asks for; the operator sees that once per
283
+ * target and model rather than finding the key silently missing from the wire.
284
+ */
285
+ function appendChatTemplateKwargsDiagnostics(
286
+ diagnostics: RuntimeResolutionDiagnostic[],
287
+ resolved: ResolvedModelRuntimeCapabilities,
288
+ ): void {
289
+ const undeliverable = resolved.request.undeliverableChatTemplateKwargs;
290
+ if (!undeliverable || undeliverable.keys.length === 0) return;
291
+ const keys = undeliverable.keys.join(", ");
292
+ const declared = undeliverable.declaredUnsupported
293
+ ? "its family entry marks them unsupported there"
294
+ : "its family entry does not say so";
295
+ diagnostics.push(
296
+ diagnostic(
297
+ "warning",
298
+ CHAT_TEMPLATE_KWARGS_UNDELIVERABLE,
299
+ `chat-template kwargs ${keys} cannot reach ${resolved.runtimeId}, which ignores chat_template_kwargs; ${resolved.modelId} runs without them and ${declared}`,
300
+ ),
301
+ );
302
+ }
303
+
276
304
  function nonNegativeFiniteNumber(value: unknown): number | undefined {
277
305
  return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : undefined;
278
306
  }
@@ -447,6 +475,7 @@ export function resolveRuntimeTarget(
447
475
  const decisions = capabilityDecisions(runtime, capabilities);
448
476
  appendCapabilityDiagnostics(diagnostics, input, capabilities, decisions, targetId);
449
477
  appendThinkingDiagnostics(diagnostics, modelRuntime, requestedThinkingLevel);
478
+ appendChatTemplateKwargsDiagnostics(diagnostics, modelRuntime);
450
479
 
451
480
  if (hasError(diagnostics)) return { ok: false, diagnostics };
452
481
 
@@ -493,6 +522,7 @@ function withoutStaleRuntimeDiagnostics(
493
522
  ): RuntimeResolutionDiagnostic[] {
494
523
  return diagnostics.filter((entry) => {
495
524
  if (entry.code.startsWith("thinking-")) return false;
525
+ if (entry.code === CHAT_TEMPLATE_KWARGS_UNDELIVERABLE) return false;
496
526
  if (entry.code === "output-budget-unknown" && decisions.maxTokens > 0) return false;
497
527
  if (entry.code === "tools-unsupported" && decisions.tools) return false;
498
528
  return true;
@@ -545,6 +575,7 @@ export function refineRuntimeTargetWithModelHints(
545
575
  const decisions = capabilityDecisions(target.runtime, capabilities);
546
576
  const diagnostics = withoutStaleRuntimeDiagnostics(target.diagnostics, decisions);
547
577
  appendThinkingDiagnostics(diagnostics, modelRuntime, target.requestedThinkingLevel);
578
+ appendChatTemplateKwargsDiagnostics(diagnostics, modelRuntime);
548
579
  return {
549
580
  ...target,
550
581
  capabilities,
@@ -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);
@@ -374,6 +374,8 @@ export interface LlamaCppStatusEnrichment {
374
374
  modelId?: string;
375
375
  serverFlags?: LlamaCppServerFlags;
376
376
  notes?: string[];
377
+ /** The router's own load state for the selected model, when it reports one. */
378
+ loadState?: ProbeModelStatus["state"];
377
379
  }
378
380
 
379
381
  function argsFromStatus(status: unknown): string[] {
@@ -423,7 +425,7 @@ function booleanFlag(args: ReadonlyArray<string>, ...flags: ReadonlyArray<string
423
425
  return undefined;
424
426
  }
425
427
 
426
- export function parseLlamaCppServerFlags(args: ReadonlyArray<string>): LlamaCppServerFlags {
428
+ function parseLlamaCppServerFlags(args: ReadonlyArray<string>): LlamaCppServerFlags {
427
429
  const flags: LlamaCppServerFlags = {};
428
430
  const ctxSize = numberFlag(args, "--ctx-size", "-c");
429
431
  if (ctxSize !== undefined) flags.contextSize = ctxSize;
@@ -490,8 +492,11 @@ export async function probeLlamaCppModelStatus(
490
492
  const entries = await probeOpenAIModelEntries(base, ctx);
491
493
  const selected = selectedModelEntry(entries, target);
492
494
  if (!selected) return {};
495
+ const loadState = modelStateFromOpenAIModelEntry({ id: selected.id, status: selected.status })?.state;
496
+ const withState = (enrichment: LlamaCppStatusEnrichment): LlamaCppStatusEnrichment =>
497
+ loadState === undefined ? enrichment : { ...enrichment, loadState };
493
498
  const args = argsFromStatus(selected.status);
494
- if (args.length === 0) return { notes: statusNotes(selected.id, selected.status) };
499
+ if (args.length === 0) return withState({ notes: statusNotes(selected.id, selected.status) });
495
500
  const flags = parseLlamaCppServerFlags(args);
496
501
  const caps: Partial<CapabilityFlags> = {};
497
502
  const window = llamaCppRequestContextWindow(flags);
@@ -512,7 +517,7 @@ export async function probeLlamaCppModelStatus(
512
517
  );
513
518
  }
514
519
  if (notes.length > 0) enrichment.notes = notes;
515
- return enrichment;
520
+ return withState(enrichment);
516
521
  }
517
522
 
518
523
  /**
@@ -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
  }
@@ -56,7 +56,15 @@ const llamacppRuntime: RuntimeDescriptor = {
56
56
  const health = await (ctx.signal ? probeHttp({ ...healthOpts, signal: ctx.signal }) : probeHttp(healthOpts));
57
57
  if (!health.ok) return health;
58
58
  const status = await probeLlamaCppModelStatus(base, target, ctx);
59
- const props = await probeLlamaCppProps(base, ctx, status.modelId ?? target.defaultModel);
59
+ // A router answers /props?model=<id> by loading that model, and with
60
+ // --models-max 1 that evicts whatever is resident: every probe of a
61
+ // fleet target's default model unloaded the chat model, so the next turn
62
+ // prefilled from zero (11,601 tokens, cache_n 0, on the round-3 resume
63
+ // run on mini). The router's model list already carries the worker's
64
+ // flags (--parallel, --ctx-size) for an unloaded model, so the worker is
65
+ // asked only when it is resident.
66
+ const resident = status.loadState === undefined || status.loadState === "loaded";
67
+ const props = await probeLlamaCppProps(base, ctx, resident ? (status.modelId ?? target.defaultModel) : undefined);
60
68
  const catalog = await probeOpenAIModelCatalog(base, ctx);
61
69
  const result: ProbeResult = { ok: true };
62
70
  if (catalog.models.length > 0) result.models = catalog.models;
@@ -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",
@@ -5,3 +5,22 @@ export type CostProvenance = "known" | "known_free" | "estimated" | "unknown";
5
5
  export function normalizeCostProvenance(value: CostProvenance | undefined): CostProvenance {
6
6
  return value ?? "unknown";
7
7
  }
8
+
9
+ const COST_PROVENANCE_VALUES: ReadonlySet<string> = new Set<CostProvenance>([
10
+ "known",
11
+ "known_free",
12
+ "estimated",
13
+ "unknown",
14
+ ]);
15
+
16
+ /**
17
+ * Validate an unvalidated wire value (a dispatch bus payload crossing a
18
+ * worker process boundary, never runtime-checked against this closed set
19
+ * before) against the four real provenance values. An unrecognized value
20
+ * keeps `fallback` rather than being accepted as-is, matching how the
21
+ * observability projection's run summary already treated this field; the
22
+ * interactive dispatch board previously accepted any truthy string here.
23
+ */
24
+ export function resolveCostProvenance(value: unknown, fallback: CostProvenance): CostProvenance {
25
+ return typeof value === "string" && COST_PROVENANCE_VALUES.has(value) ? (value as CostProvenance) : fallback;
26
+ }
@@ -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
  }
@@ -2,8 +2,8 @@
2
2
  * Engine-visible quirks extracted from a knowledge-base entry. The catalog YAML
3
3
  * keeps free-form `quirks` (gpu tiers, runtime preferences, serving notes), so
4
4
  * `KnowledgeBaseEntry.quirks` stays `Record<string, unknown>`. This module
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.
5
+ * narrows the slice the engine consumes (per-mode sampling and thinking)
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
@@ -13,19 +13,7 @@
13
13
  */
14
14
 
15
15
  import type { ThinkingBudgetByLevel, ThinkingEffortByLevel } from "../thinking-control-policy.js";
16
-
17
- export const KV_CACHE_QUANTS = ["f32", "f16", "q8_0", "q4_0", "q4_1", "iq4_nl", "q5_0", "q5_1"] as const;
18
-
19
- export type KvCacheQuant = (typeof KV_CACHE_QUANTS)[number];
20
-
21
- export interface KvCacheQuirks {
22
- /** Quantization type for the key cache. `false` disables quantization (full precision). */
23
- kQuant?: KvCacheQuant | false;
24
- /** Quantization type for the value cache. Requires flash attention to take effect. */
25
- vQuant?: KvCacheQuant | false;
26
- /** Force fp16 KV cache regardless of K/V quant settings. */
27
- useFp16?: boolean;
28
- }
16
+ import { type ThinkingLevel, VALID_THINKING_LEVELS } from "./capability-flags.js";
29
17
 
30
18
  export interface SamplingProfile {
31
19
  temperature?: number;
@@ -36,7 +24,6 @@ export interface SamplingProfile {
36
24
  repeatPenalty?: number;
37
25
  presencePenalty?: number;
38
26
  frequencyPenalty?: number;
39
- maxTokens?: number;
40
27
  }
41
28
 
42
29
  export interface SamplingQuirks {
@@ -59,6 +46,20 @@ export interface SamplingQuirks {
59
46
  */
60
47
  export type ThinkingMechanism = "effort-levels" | "budget-tokens" | "on-off" | "always-on" | "none";
61
48
 
49
+ export type ChatTemplateKwargValue = string | number | boolean;
50
+
51
+ export interface ChatTemplateKwargsByLevel {
52
+ key: string;
53
+ values: Partial<Record<ThinkingLevel, string | number>>;
54
+ lmstudio?: "unsupported" | string;
55
+ }
56
+
57
+ export interface ChatTemplateKwargsQuirks {
58
+ static?: Record<string, ChatTemplateKwargValue>;
59
+ byLevel?: ChatTemplateKwargsByLevel;
60
+ lmstudio?: "unsupported" | string | Record<string, string>;
61
+ }
62
+
62
63
  export interface ThinkingQuirks {
63
64
  mechanism: ThinkingMechanism;
64
65
  /** Token budget for budget-tokens mechanism, keyed by Clio's thinking level. */
@@ -67,24 +68,19 @@ export interface ThinkingQuirks {
67
68
  effortByLevel?: ThinkingEffortByLevel;
68
69
  /** 2-5 line free-text guidance rendered into the Runtime prompt block. */
69
70
  guidance?: string;
71
+ chatTemplateKwargs?: ChatTemplateKwargsQuirks;
70
72
  }
71
73
 
72
74
  export interface LocalModelQuirks {
73
- kvCache?: KvCacheQuirks;
74
75
  sampling?: SamplingQuirks;
75
76
  thinking?: ThinkingQuirks;
77
+ chatTemplateKwargs?: ChatTemplateKwargsQuirks;
76
78
  }
77
79
 
78
80
  function isRecord(value: unknown): value is Record<string, unknown> {
79
81
  return value !== null && typeof value === "object" && !Array.isArray(value);
80
82
  }
81
83
 
82
- function asKvCacheQuant(value: unknown): KvCacheQuant | false | undefined {
83
- if (value === false) return false;
84
- if (typeof value !== "string") return undefined;
85
- return (KV_CACHE_QUANTS as ReadonlyArray<string>).includes(value) ? (value as KvCacheQuant) : undefined;
86
- }
87
-
88
84
  function asPositive(value: unknown): number | undefined {
89
85
  return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : undefined;
90
86
  }
@@ -98,17 +94,6 @@ function asPenalty(value: unknown): number | undefined {
98
94
  return typeof value === "number" && Number.isFinite(value) ? value : undefined;
99
95
  }
100
96
 
101
- function extractKvCache(raw: unknown): KvCacheQuirks | undefined {
102
- if (!isRecord(raw)) return undefined;
103
- const out: KvCacheQuirks = {};
104
- const k = asKvCacheQuant(raw.kQuant);
105
- if (k !== undefined) out.kQuant = k;
106
- const v = asKvCacheQuant(raw.vQuant);
107
- if (v !== undefined) out.vQuant = v;
108
- if (typeof raw.useFp16 === "boolean") out.useFp16 = raw.useFp16;
109
- return Object.keys(out).length > 0 ? out : undefined;
110
- }
111
-
112
97
  function extractSamplingProfile(raw: unknown): SamplingProfile | undefined {
113
98
  if (!isRecord(raw)) return undefined;
114
99
  const out: SamplingProfile = {};
@@ -129,8 +114,6 @@ function extractSamplingProfile(raw: unknown): SamplingProfile | undefined {
129
114
  if (pp !== undefined) out.presencePenalty = pp;
130
115
  const fp = asPenalty(raw.frequencyPenalty);
131
116
  if (fp !== undefined) out.frequencyPenalty = fp;
132
- const maxTokens = asInteger(raw.maxTokens);
133
- if (maxTokens !== undefined) out.maxTokens = maxTokens;
134
117
  return Object.keys(out).length > 0 ? out : undefined;
135
118
  }
136
119
 
@@ -185,6 +168,66 @@ function extractEffortByLevel(raw: unknown): ThinkingQuirks["effortByLevel"] | u
185
168
  return Object.keys(out).length > 0 ? out : undefined;
186
169
  }
187
170
 
171
+ function extractChatTemplateKwargs(raw: unknown): ChatTemplateKwargsQuirks | undefined {
172
+ if (!isRecord(raw)) return undefined;
173
+ const out: ChatTemplateKwargsQuirks = {};
174
+
175
+ if (isRecord(raw.static)) {
176
+ const staticMap: Record<string, ChatTemplateKwargValue> = {};
177
+ for (const [k, v] of Object.entries(raw.static)) {
178
+ if (typeof v === "boolean") {
179
+ staticMap[k] = v;
180
+ } else if (typeof v === "number" && Number.isFinite(v)) {
181
+ staticMap[k] = v;
182
+ } else if (typeof v === "string" && v.length > 0) {
183
+ staticMap[k] = v;
184
+ }
185
+ }
186
+ if (Object.keys(staticMap).length > 0) out.static = staticMap;
187
+ }
188
+
189
+ if (isRecord(raw.byLevel)) {
190
+ const byLevelRaw = raw.byLevel;
191
+ if (typeof byLevelRaw.key === "string" && byLevelRaw.key.trim().length > 0 && isRecord(byLevelRaw.values)) {
192
+ const values: Partial<Record<ThinkingLevel, string | number>> = {};
193
+ for (const level of VALID_THINKING_LEVELS) {
194
+ const val = byLevelRaw.values[level];
195
+ if (typeof val === "string" && val.length > 0) {
196
+ values[level] = val;
197
+ } else if (typeof val === "number" && Number.isFinite(val)) {
198
+ values[level] = val;
199
+ }
200
+ }
201
+ if (Object.keys(values).length > 0) {
202
+ const byLevel: ChatTemplateKwargsByLevel = {
203
+ key: byLevelRaw.key.trim(),
204
+ values,
205
+ };
206
+ if (typeof byLevelRaw.lmstudio === "string" && byLevelRaw.lmstudio.trim().length > 0) {
207
+ byLevel.lmstudio = byLevelRaw.lmstudio.trim();
208
+ }
209
+ out.byLevel = byLevel;
210
+ }
211
+ }
212
+ }
213
+
214
+ if (typeof raw.lmstudio === "string" && raw.lmstudio.trim().length > 0) {
215
+ out.lmstudio = raw.lmstudio.trim();
216
+ } else if (isRecord(raw.lmstudio)) {
217
+ const lmstudioMap: Record<string, string> = {};
218
+ for (const [k, v] of Object.entries(raw.lmstudio)) {
219
+ if (typeof v === "string" && v.trim().length > 0) {
220
+ lmstudioMap[k] = v.trim();
221
+ }
222
+ }
223
+ if (Object.keys(lmstudioMap).length > 0) {
224
+ out.lmstudio = lmstudioMap;
225
+ }
226
+ }
227
+
228
+ return Object.keys(out).length > 0 ? out : undefined;
229
+ }
230
+
188
231
  function extractThinkingQuirks(raw: unknown): ThinkingQuirks | undefined {
189
232
  if (!isRecord(raw)) return undefined;
190
233
  const mechanism = asThinkingMechanism(raw.mechanism);
@@ -195,22 +238,27 @@ function extractThinkingQuirks(raw: unknown): ThinkingQuirks | undefined {
195
238
  const effortByLevel = extractEffortByLevel(raw.effortByLevel);
196
239
  if (effortByLevel) out.effortByLevel = effortByLevel;
197
240
  if (typeof raw.guidance === "string" && raw.guidance.length > 0) out.guidance = raw.guidance;
241
+ const chatTemplateKwargs = extractChatTemplateKwargs(raw.chatTemplateKwargs);
242
+ if (chatTemplateKwargs) out.chatTemplateKwargs = chatTemplateKwargs;
198
243
  return out;
199
244
  }
200
245
 
201
246
  /**
202
247
  * Pull the engine-visible quirks slice out of a free-form catalog quirks
203
248
  * record. Returns `undefined` when nothing engine-relevant is configured so
204
- * `model.clio.quirks` only gets attached when it carries information.
249
+ * `model.clioCoder.quirks` only gets attached when it carries information.
205
250
  */
206
251
  export function extractLocalModelQuirks(raw: unknown): LocalModelQuirks | undefined {
207
252
  if (!isRecord(raw)) return undefined;
208
253
  const out: LocalModelQuirks = {};
209
- const kvCache = extractKvCache(raw.kvCache);
210
- if (kvCache) out.kvCache = kvCache;
211
254
  const sampling = extractSampling(raw.sampling);
212
255
  if (sampling) out.sampling = sampling;
213
256
  const thinking = extractThinkingQuirks(raw.thinking);
214
257
  if (thinking) out.thinking = thinking;
258
+ const chatTemplateKwargs =
259
+ extractChatTemplateKwargs(raw.chatTemplateKwargs) ??
260
+ extractChatTemplateKwargs(isRecord(raw.thinking) ? raw.thinking.chatTemplateKwargs : undefined) ??
261
+ extractChatTemplateKwargs(isRecord(raw.request) ? raw.request.chatTemplateKwargs : undefined);
262
+ if (chatTemplateKwargs) out.chatTemplateKwargs = chatTemplateKwargs;
215
263
  return Object.keys(out).length > 0 ? out : undefined;
216
264
  }
@@ -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;