@iowarp/clio-coder 0.3.1 → 0.3.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 (595) hide show
  1. package/CHANGELOG.md +90 -2
  2. package/CONTRIBUTING.md +23 -23
  3. package/README.md +284 -613
  4. package/dist/{acp-FPR54DGL.js → acp-BIYHVZIM.js} +43 -53
  5. package/dist/{agents-OGPIHPJH.js → agents-YT6SSRIT.js} +43 -26
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-IC3K6NIZ.js → auth-5TWEIYDN.js} +20 -12
  8. package/dist/{chunk-PV4JUBVJ.js → chunk-2EHAIA3X.js} +40 -21
  9. package/dist/{chunk-IS3ONKU3.js → chunk-2IR2NMPA.js} +6 -4
  10. package/dist/chunk-2SFS6XQE.js +122 -0
  11. package/dist/chunk-2VTFPG5O.js +48 -0
  12. package/dist/{chunk-MAR7Y6HW.js → chunk-3ZXDFGR5.js} +23 -16
  13. package/dist/chunk-4BJ5BYCE.js +61 -0
  14. package/dist/{chunk-474KN5II.js → chunk-4BPJXDWC.js} +111 -181
  15. package/dist/chunk-4KLWL3UC.js +18 -0
  16. package/dist/chunk-4VP4KH3K.js +962 -0
  17. package/dist/chunk-4ZG3XFUR.js +77 -0
  18. package/dist/chunk-5B2AEOW5.js +5407 -0
  19. package/dist/{chunk-K2ITRMHZ.js → chunk-5TSRNF4G.js} +6 -138
  20. package/dist/{chunk-OLBBMFRD.js → chunk-5UUP6MWO.js} +24 -62
  21. package/dist/chunk-65DEGPJ6.js +52 -0
  22. package/dist/chunk-6EJMN2Y3.js +17 -0
  23. package/dist/chunk-6EJV5X2W.js +16405 -0
  24. package/dist/chunk-6N5PTWMY.js +136 -0
  25. package/dist/chunk-6XLNIQDB.js +27 -0
  26. package/dist/{chunk-TEKV33Q5.js → chunk-77VKQEHF.js} +65 -33
  27. package/dist/chunk-7CR24IG7.js +242 -0
  28. package/dist/{chunk-M5T5VO65.js → chunk-7EYHLWU7.js} +837 -635
  29. package/dist/chunk-7MNJORFF.js +22 -0
  30. package/dist/{chunk-KY56HMHH.js → chunk-A3CYT5EX.js} +125 -31
  31. package/dist/chunk-AGYYIBLL.js +1069 -0
  32. package/dist/chunk-AO4RKG4M.js +277 -0
  33. package/dist/{chunk-GB6QRBXN.js → chunk-APJ265NV.js} +54 -1187
  34. package/dist/chunk-ARBGF5F7.js +174 -0
  35. package/dist/{chunk-673JJUWJ.js → chunk-BMEMKKIT.js} +2 -2
  36. package/dist/chunk-CBCAPZAA.js +229 -0
  37. package/dist/chunk-CMZWFGD2.js +352 -0
  38. package/dist/chunk-ECH6PKUQ.js +39 -0
  39. package/dist/chunk-ED4KHGC3.js +143 -0
  40. package/dist/chunk-EKMEHE4H.js +340 -0
  41. package/dist/{chunk-RPTR2H26.js → chunk-EPVUXGXG.js} +21 -15
  42. package/dist/chunk-FCSXB6T2.js +338 -0
  43. package/dist/chunk-FJ3H4MN5.js +48 -0
  44. package/dist/chunk-FQ4SKYE4.js +29 -0
  45. package/dist/chunk-G2DE3C7R.js +644 -0
  46. package/dist/chunk-G4BMMOKF.js +182 -0
  47. package/dist/{chunk-ZPY3JZ5E.js → chunk-GGXXDWE4.js} +183 -1233
  48. package/dist/chunk-HC4CLZ2Y.js +68 -0
  49. package/dist/{chunk-LU4TK2PR.js → chunk-HFSBBKSQ.js} +5 -56
  50. package/dist/{chunk-PIUMUEMV.js → chunk-HKIYEGME.js} +10 -6
  51. package/dist/chunk-I4HZDVNP.js +73 -0
  52. package/dist/{chunk-4QKXUHSR.js → chunk-IGLFWIYI.js} +70 -20
  53. package/dist/chunk-IKCO5N3L.js +162 -0
  54. package/dist/chunk-IR4CFBFN.js +56 -0
  55. package/dist/{chunk-PFEFKVGL.js → chunk-J5HN4RYU.js} +13 -11
  56. package/dist/{chunk-R5KLMSBV.js → chunk-J5Q24KAG.js} +2 -2
  57. package/dist/{chunk-K5XEMXTI.js → chunk-JVCV3ICN.js} +1 -1
  58. package/dist/chunk-KJ5LWLOE.js +1077 -0
  59. package/dist/chunk-LBMZMYH2.js +285 -0
  60. package/dist/{chunk-G34LV2PF.js → chunk-LBNRH5WM.js} +84 -170
  61. package/dist/{chunk-H6F6BYOH.js → chunk-LZSJBIVT.js} +7003 -7434
  62. package/dist/{chunk-HQQID6OA.js → chunk-M6SHUN7Q.js} +5 -5
  63. package/dist/chunk-MAW544W2.js +1882 -0
  64. package/dist/chunk-MBS4V7ZP.js +217 -0
  65. package/dist/{chunk-FST4FYJB.js → chunk-MFFY33HR.js} +99 -140
  66. package/dist/chunk-MNA4JGU4.js +255 -0
  67. package/dist/chunk-MQSRRFWA.js +3428 -0
  68. package/dist/{chunk-BSU2YIWB.js → chunk-MVVUPGPW.js} +131 -136
  69. package/dist/chunk-OAO4GE4M.js +619 -0
  70. package/dist/chunk-OHHN2SO4.js +5135 -0
  71. package/dist/chunk-OKGUZO2U.js +34 -0
  72. package/dist/{chunk-GAEBEQVI.js → chunk-OOJYHWRB.js} +32 -346
  73. package/dist/{chunk-Q5WJOSJ7.js → chunk-OQ33BKR3.js} +2 -1
  74. package/dist/chunk-OQE5J4C6.js +73 -0
  75. package/dist/{chunk-KKNLWXI6.js → chunk-ORBHGJC5.js} +8 -8
  76. package/dist/chunk-POHLU5DW.js +1186 -0
  77. package/dist/chunk-QKMUKYO7.js +4961 -0
  78. package/dist/{chunk-ASND7OZK.js → chunk-QTYWRVRA.js} +13 -13
  79. package/dist/{chunk-EYOKLTMF.js → chunk-SRF2PJNW.js} +17 -3
  80. package/dist/chunk-SST6Z5JA.js +80 -0
  81. package/dist/chunk-STBPMHSX.js +2456 -0
  82. package/dist/chunk-T6YILFSB.js +80 -0
  83. package/dist/chunk-TZTZS7QK.js +227 -0
  84. package/dist/chunk-UOV2BYIW.js +107 -0
  85. package/dist/{chunk-Q3RUPKEJ.js → chunk-V4RXGQ5Q.js} +58 -189
  86. package/dist/chunk-VAKQQHWR.js +434 -0
  87. package/dist/chunk-VG7TBQIY.js +128 -0
  88. package/dist/chunk-VJWL6YS5.js +244 -0
  89. package/dist/chunk-WEH5XRJQ.js +32 -0
  90. package/dist/chunk-WMSVI4G2.js +2095 -0
  91. package/dist/chunk-WVO7V2QY.js +797 -0
  92. package/dist/chunk-X4RCMKVQ.js +641 -0
  93. package/dist/chunk-X75S7HFS.js +374 -0
  94. package/dist/chunk-XN3L4EYL.js +46 -0
  95. package/dist/{chunk-RDLVBZEO.js → chunk-YCWGATWI.js} +6 -4
  96. package/dist/chunk-YHZX5GEU.js +193 -0
  97. package/dist/chunk-YXLYO42X.js +91 -0
  98. package/dist/{chunk-NMOX6HFD.js → chunk-ZDOOVTXZ.js} +29 -77
  99. package/dist/chunk-ZI647VB5.js +37 -0
  100. package/dist/{chunk-C4PTHK7P.js → chunk-ZWLZP4ZT.js} +5 -5
  101. package/dist/cli/index.js +62 -54
  102. package/dist/clio-4LY5K2AC.js +25 -0
  103. package/dist/code-nav-7AX6FYE6.js +600 -0
  104. package/dist/codewiki/build-worker.js +66 -0
  105. package/dist/compile-cache-CVJMMODC.js +18 -0
  106. package/dist/{components-DMAOEKFB.js → components-KELWS457.js} +11 -6
  107. package/dist/{config-IRUQ7SE4.js → config-GTLUW2PR.js} +92 -55
  108. package/dist/configure-R6A64DHX.js +42 -0
  109. package/dist/context-5VKGUVJJ.js +866 -0
  110. package/dist/{context-3KWFLHJG.js → context-JFZEJ7W5.js} +15 -13
  111. package/dist/{context-5RADCKTR.js → context-RW5HC47S.js} +71 -35
  112. package/dist/{context-clear-7TSNPAAI.js → context-clear-6ZHBAZZT.js} +54 -28
  113. package/dist/{context-index-W4RLWOQH.js → context-index-BZ4UYMTC.js} +30 -24
  114. package/dist/dispatch-runner-VKBRCWQC.js +1997 -0
  115. package/dist/{docs-5AWSPS37.js → docs-2C2LTVT2.js} +23 -10
  116. package/dist/{doctor-UC5NAJYQ.js → doctor-KI767GSN.js} +27 -17
  117. package/dist/{eval-U6TJHRLX.js → eval-XSSNATB4.js} +29 -16
  118. package/dist/{evidence-YEGUW4L3.js → evidence-UA6AWDQQ.js} +46 -26
  119. package/dist/{evolve-TXARCTPG.js → evolve-QNTFGV6Z.js} +45 -25
  120. package/dist/{extensions-OZFJ3A3G.js → extensions-QVDOHDGJ.js} +16 -7
  121. package/dist/{fleet-6G3DHNYE.js → fleet-Q7UOMUSG.js} +163 -54
  122. package/dist/{fleet-preflight-DSNT37JK.js → fleet-preflight-DDN536IT.js} +7 -4
  123. package/dist/{init-KZ5QTF6M.js → init-WBB65ZHQ.js} +69 -32
  124. package/dist/{memory-73ESV5YC.js → memory-MD3O64RI.js} +48 -27
  125. package/dist/{models-A4PVNWJK.js → models-BZU34YWD.js} +39 -25
  126. package/dist/monitor-MEQA5C3I.js +661 -0
  127. package/dist/{chunk-FCIH3BIZ.js → orchestrator-CGFKEP27.js} +11832 -8687
  128. package/dist/{paths-C4H6IV77.js → paths-UXLN5YYZ.js} +10 -5
  129. package/dist/{preload-6WVMHX3A.js → preload-P6DGH2PZ.js} +2 -2
  130. package/dist/{reset-BGW6OGMV.js → reset-L2FQEE3E.js} +16 -10
  131. package/dist/{run-YTPEYQOH.js → run-IV4Q6RLN.js} +101 -61
  132. package/dist/{share-YIFFV4NQ.js → share-S5BZQC5I.js} +15 -8
  133. package/dist/{skills-2V6RA3OQ.js → skills-LQEKRDTN.js} +34 -14
  134. package/dist/{skills-eval-S2TVJO4F.js → skills-eval-3DC4HEWS.js} +70 -34
  135. package/dist/steer-GGWFUJUD.js +77 -0
  136. package/dist/{targets-TYXLPB23.js → targets-C4SSGQOB.js} +43 -27
  137. package/dist/terminal-lease-IT5JW2NR.js +395 -0
  138. package/dist/{trace-GGOJ6Q6Z.js → trace-PNCASAXC.js} +41 -16
  139. package/dist/{chunk-N6F52NLF.js → tree-sitter-HGKH6LG4.js} +28 -2306
  140. package/dist/{uninstall-LLLT4F4W.js → uninstall-FZCQCDKC.js} +10 -5
  141. package/dist/{upgrade-33G2LMM5.js → upgrade-7TT7SQ3G.js} +45 -25
  142. package/dist/{usage-ZAFSXKKG.js → usage-GV4PKT3M.js} +62 -31
  143. package/dist/verify-G6V4D2G7.js +716 -0
  144. package/dist/web-fetch-2YHJ3KTG.js +638 -0
  145. package/dist/{wiki-generate-NUQCVOQ3.js → wiki-generate-DQF6Z66B.js} +74 -34
  146. package/dist/worker/entry.js +221 -36
  147. package/dist/workspace-G4ZWUIPR.js +22 -0
  148. package/docs/README.md +22 -17
  149. package/docs/acp.md +168 -16
  150. package/docs/alcf-provider.md +1 -1
  151. package/docs/architecture.md +136 -7
  152. package/docs/artifact-versions.md +1 -1
  153. package/docs/built-in-agents.md +1 -1
  154. package/docs/capacity-and-scheduling.md +1 -1
  155. package/docs/commands-and-modes.md +114 -71
  156. package/docs/config-knobs-audit.md +1 -3
  157. package/docs/configuration-and-targets.md +174 -46
  158. package/docs/context-engine.md +29 -6
  159. package/docs/development-pipeline.md +26 -1
  160. package/docs/dispatch-architecture-rationale.md +1 -1
  161. package/docs/documentation-coverage.md +2 -2
  162. package/docs/documentation-guide.md +1 -1
  163. package/docs/environment-variables.md +13 -5
  164. package/docs/eval-runner.md +1 -1
  165. package/docs/evals-internal.md +1 -1
  166. package/docs/evidence-and-memory.md +6 -2
  167. package/docs/evolution.md +2 -2
  168. package/docs/exit-codes-and-output.md +15 -9
  169. package/docs/extensions-and-sharing.md +9 -9
  170. package/docs/fleet-dispatch.md +7 -5
  171. package/docs/git-commit-provenance.md +120 -0
  172. package/docs/glossary.md +1 -1
  173. package/docs/installation-and-lifecycle.md +34 -27
  174. package/docs/middleware-and-components.md +1 -1
  175. package/docs/model-catalog.md +45 -14
  176. package/docs/observability.md +8 -5
  177. package/docs/performance-methodology.md +491 -0
  178. package/docs/pi-boundary.md +72 -0
  179. package/docs/proactive-memory.md +3 -3
  180. package/docs/prompt-envelope-and-tools.md +24 -3
  181. package/docs/provider-adapter-cookbook.md +57 -4
  182. package/docs/release-cut-checklist.md +129 -115
  183. package/docs/safety-model.md +9 -5
  184. package/docs/scientific-validation.md +3 -3
  185. package/docs/session-lifecycle.md +55 -12
  186. package/docs/skills-marketplace.md +12 -8
  187. package/docs/time-conventions.md +1 -1
  188. package/docs/tool-usage.md +3 -3
  189. package/docs/trace-store.md +1 -1
  190. package/docs/troubleshooting.md +10 -7
  191. package/docs/tui-design.md +47 -10
  192. package/docs/worker-dispatch-mechanics.md +1 -1
  193. package/package.json +19 -22
  194. package/skills/coding/ast-grep/SKILL.md +136 -0
  195. package/skills/coding/ast-grep/evals.md +56 -0
  196. package/skills/coding/ast-grep/references/rule_reference.md +297 -0
  197. package/skills/coding/coding-standards/SKILL.md +113 -0
  198. package/skills/coding/coding-standards/evals.md +34 -0
  199. package/skills/coding/prototype/SKILL.md +86 -0
  200. package/skills/coding/prototype/evals.md +42 -0
  201. package/skills/coding/prototype/references/LOGIC.md +67 -0
  202. package/skills/coding/prototype/references/UI.md +112 -0
  203. package/skills/coding/tdd/SKILL.md +101 -0
  204. package/skills/coding/tdd/evals.md +41 -0
  205. package/skills/coding/tdd/references/mocking.md +59 -0
  206. package/skills/coding/tdd/references/tests.md +77 -0
  207. package/skills/context/context-handoff/SKILL.md +126 -0
  208. package/skills/context/context-handoff/evals.md +57 -0
  209. package/skills/context/context-handoff/scripts/new-handoff.sh +26 -0
  210. package/skills/context/context-prime/SKILL.md +95 -0
  211. package/skills/context/context-prime/evals.md +54 -0
  212. package/skills/meta/clio-dev/SKILL.md +91 -0
  213. package/skills/meta/clio-dev/evals.md +45 -0
  214. package/skills/meta/clio-test/SKILL.md +130 -0
  215. package/skills/meta/clio-test/evals.md +43 -0
  216. package/skills/meta/clio-test/references/harness.md +97 -0
  217. package/skills/meta/clio-test/references/test-map.md +59 -0
  218. package/skills/meta/credentials/SKILL.md +125 -0
  219. package/skills/meta/credentials/evals.md +104 -0
  220. package/skills/meta/find-skills/SKILL.md +72 -0
  221. package/skills/meta/find-skills/evals.md +47 -0
  222. package/skills/meta/herdr/SKILL.md +127 -0
  223. package/skills/meta/herdr/evals.md +38 -0
  224. package/skills/meta/skill-craft/SKILL.md +102 -0
  225. package/skills/meta/skill-craft/evals.md +41 -0
  226. package/skills/planning/architecture/SKILL.md +129 -0
  227. package/skills/planning/architecture/evals.md +36 -0
  228. package/skills/planning/backlog/SKILL.md +90 -0
  229. package/skills/planning/backlog/evals.md +43 -0
  230. package/skills/planning/prd/SKILL.md +82 -0
  231. package/skills/planning/prd/evals.md +49 -0
  232. package/skills/planning/product-intent/SKILL.md +112 -0
  233. package/skills/planning/product-intent/evals.md +36 -0
  234. package/skills/planning/tech-spec/SKILL.md +115 -0
  235. package/skills/planning/tech-spec/evals.md +47 -0
  236. package/skills/registry.yaml +136 -0
  237. package/skills/research/arxiv-literature/SKILL.md +104 -0
  238. package/skills/research/arxiv-literature/evals.md +58 -0
  239. package/skills/research/experiment-protocol/SKILL.md +122 -0
  240. package/skills/research/experiment-protocol/evals.md +91 -0
  241. package/skills/research/scientific-debugging/SKILL.md +119 -0
  242. package/skills/research/scientific-debugging/evals.md +138 -0
  243. package/skills/research/scientific-modernization/SKILL.md +138 -0
  244. package/skills/research/scientific-modernization/evals.md +84 -0
  245. package/skills/workflow/design-council/SKILL.md +139 -0
  246. package/skills/workflow/design-council/evals.md +97 -0
  247. package/skills/workflow/grill-me/SKILL.md +186 -0
  248. package/skills/workflow/grill-me/evals.md +78 -0
  249. package/skills/workflow/workflow-distiller/SKILL.md +136 -0
  250. package/skills/workflow/workflow-distiller/evals.md +107 -0
  251. package/src/cli/acp.ts +31 -4
  252. package/src/cli/clio.ts +68 -6
  253. package/src/cli/config-inspect.ts +28 -22
  254. package/src/cli/configure.ts +47 -9
  255. package/src/cli/context-clear.ts +2 -2
  256. package/src/cli/context-index.ts +21 -23
  257. package/src/cli/context.ts +13 -8
  258. package/src/cli/default-target.ts +9 -17
  259. package/src/cli/docs.ts +11 -5
  260. package/src/cli/evidence.ts +4 -1
  261. package/src/cli/extensions.ts +10 -1
  262. package/src/cli/fleet.ts +47 -6
  263. package/src/cli/index.ts +55 -26
  264. package/src/cli/memory.ts +3 -1
  265. package/src/cli/models.ts +1 -1
  266. package/src/cli/modes/json-stream.ts +37 -1
  267. package/src/cli/modes/print.ts +24 -9
  268. package/src/cli/run.ts +2 -2
  269. package/src/cli/skills-eval.ts +23 -8
  270. package/src/cli/skills.ts +19 -4
  271. package/src/cli/targets.ts +4 -0
  272. package/src/cli/text-layout.ts +15 -5
  273. package/src/cli/trace.ts +62 -14
  274. package/src/cli/upgrade.ts +18 -2
  275. package/src/cli/usage.ts +10 -3
  276. package/src/cli/wiki-generate.ts +2 -1
  277. package/src/core/agent-environment.ts +7 -0
  278. package/src/core/bash-exec.ts +72 -1
  279. package/src/core/boot-trace.ts +9 -4
  280. package/src/core/bus-events.ts +20 -4
  281. package/src/core/commit-attribution.ts +157 -0
  282. package/src/core/compile-cache.ts +159 -0
  283. package/src/core/config.ts +131 -2
  284. package/src/core/defaults.ts +39 -5
  285. package/src/core/domain-loader.ts +12 -5
  286. package/src/core/git-commit-attribution.ts +362 -0
  287. package/src/core/incomplete-installation.ts +45 -0
  288. package/src/core/response-schema.ts +1 -1
  289. package/src/core/safe-exec.ts +13 -1
  290. package/src/core/settings-layers.ts +155 -21
  291. package/src/core/skill-activation.ts +1 -1
  292. package/src/core/startup-timer.ts +3 -3
  293. package/src/core/state-file-lock.ts +13 -1
  294. package/src/core/termination.ts +78 -5
  295. package/src/domains/config/classify.ts +15 -3
  296. package/src/domains/config/extension.ts +19 -13
  297. package/src/domains/config/index.ts +10 -0
  298. package/src/domains/config/keybindings.ts +42 -6
  299. package/src/domains/context/bootstrap-prompt.ts +1 -1
  300. package/src/domains/context/bootstrap.ts +111 -18
  301. package/src/domains/context/clear.ts +16 -11
  302. package/src/domains/context/clio-md.ts +111 -9
  303. package/src/domains/context/codewiki/artifact.ts +400 -0
  304. package/src/domains/context/codewiki/build-worker-protocol.ts +24 -0
  305. package/src/domains/context/codewiki/build-worker.ts +54 -0
  306. package/src/domains/context/codewiki/coordinator.ts +182 -0
  307. package/src/domains/context/codewiki/indexer.ts +59 -144
  308. package/src/domains/context/codewiki/paths.ts +67 -0
  309. package/src/domains/context/codewiki/schema.ts +80 -0
  310. package/src/domains/context/codewiki/tree-sitter.ts +1 -1
  311. package/src/domains/context/contract.ts +11 -5
  312. package/src/domains/context/extension.ts +94 -143
  313. package/src/domains/context/fingerprint.ts +3 -1
  314. package/src/domains/context/index.ts +12 -22
  315. package/src/domains/context/project-metadata.ts +19 -0
  316. package/src/domains/context/prompt-context.ts +9 -10
  317. package/src/domains/context/refresh.ts +29 -21
  318. package/src/domains/context/runtime.ts +17 -0
  319. package/src/domains/context/wiki/generate.ts +39 -34
  320. package/src/domains/context/wiki/plan.ts +1 -1
  321. package/src/domains/context/wiki/prompts.ts +21 -8
  322. package/src/domains/dispatch/code-step.ts +20 -1
  323. package/src/domains/dispatch/extension.ts +158 -21
  324. package/src/domains/dispatch/failure-classification.ts +6 -0
  325. package/src/domains/dispatch/fleet-commit-attribution.ts +56 -0
  326. package/src/domains/dispatch/orphan-recovery.ts +50 -8
  327. package/src/domains/dispatch/receipt-integrity.ts +5 -0
  328. package/src/domains/dispatch/state.ts +31 -6
  329. package/src/domains/dispatch/transport.ts +2 -1
  330. package/src/domains/dispatch/types.ts +14 -0
  331. package/src/domains/dispatch/worker-spawn.ts +21 -2
  332. package/src/domains/eval/metrics/context.ts +1 -1
  333. package/src/domains/eval/types.ts +0 -1
  334. package/src/domains/evidence/build.ts +41 -1
  335. package/src/domains/lifecycle/migrations/2026-08-18-lmstudio-runtime-id.ts +52 -0
  336. package/src/domains/lifecycle/migrations/index.ts +24 -4
  337. package/src/domains/middleware/hooks-io.ts +12 -0
  338. package/src/domains/middleware/skills-reminder.ts +30 -15
  339. package/src/domains/prompts/compiler.ts +142 -84
  340. package/src/domains/prompts/contract.ts +18 -2
  341. package/src/domains/prompts/extension.ts +39 -7
  342. package/src/domains/prompts/fragment-loader.ts +0 -1
  343. package/src/domains/prompts/fragments/identity/clio.md +2 -4
  344. package/src/domains/prompts/fragments/identity/docs-routing.md +10 -0
  345. package/src/domains/prompts/fragments/identity/self-awareness.md +1 -45
  346. package/src/domains/prompts/fragments/operating/contract.md +4 -50
  347. package/src/domains/prompts/fragments/operating/delegation.md +42 -0
  348. package/src/domains/prompts/fragments/operating/skills.md +26 -0
  349. package/src/domains/prompts/fragments/operating/worker.md +16 -0
  350. package/src/domains/prompts/fragments/safety/auto-edit.md +5 -5
  351. package/src/domains/prompts/fragments/safety/full-auto.md +3 -3
  352. package/src/domains/prompts/fragments/safety/read-only.md +4 -4
  353. package/src/domains/prompts/fragments/safety/suggest.md +2 -2
  354. package/src/domains/prompts/fragments/wiki/page.md +10 -0
  355. package/src/domains/prompts/fragments/wiki/plan.md +10 -0
  356. package/src/domains/prompts/preload.ts +3 -3
  357. package/src/domains/providers/auth/api-key.ts +1 -1
  358. package/src/domains/providers/auth/backend-file.ts +20 -10
  359. package/src/domains/providers/auth/backend-memory.ts +59 -4
  360. package/src/domains/providers/auth/boot-status.ts +65 -0
  361. package/src/domains/providers/auth/oauth.ts +2 -1
  362. package/src/domains/providers/auth/storage.ts +97 -38
  363. package/src/domains/providers/capabilities.ts +12 -4
  364. package/src/domains/providers/contract.ts +15 -4
  365. package/src/domains/providers/extension.ts +18 -6
  366. package/src/domains/providers/model-runtime-capabilities.ts +15 -4
  367. package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +118 -35
  368. package/src/domains/providers/plugins.ts +5 -3
  369. package/src/domains/providers/probe/fingerprint.ts +25 -5
  370. package/src/domains/providers/registry.ts +31 -10
  371. package/src/domains/providers/runtimes/boot-manifest.ts +55 -0
  372. package/src/domains/providers/runtimes/builtins.ts +2 -2
  373. package/src/domains/providers/runtimes/common/lmstudio-http.ts +423 -0
  374. package/src/domains/providers/runtimes/common/local-synth.ts +6 -7
  375. package/src/domains/providers/runtimes/local-native/lmstudio.ts +241 -0
  376. package/src/domains/providers/support.ts +6 -3
  377. package/src/domains/providers/types/local-model-quirks.ts +7 -9
  378. package/src/domains/providers/types/runtime-descriptor.ts +12 -1
  379. package/src/domains/providers/types/target-descriptor.ts +22 -0
  380. package/src/domains/resources/contract.ts +0 -1
  381. package/src/domains/resources/extension.ts +1 -3
  382. package/src/domains/resources/loader.ts +3 -4
  383. package/src/domains/resources/prompts/loader.ts +16 -2
  384. package/src/domains/resources/prompts/substitute.ts +1 -65
  385. package/src/domains/resources/skills/content-hash.ts +2 -0
  386. package/src/domains/resources/skills/install.ts +17 -0
  387. package/src/domains/resources/skills/loader.ts +17 -10
  388. package/src/domains/resources/skills/marketplace.ts +55 -9
  389. package/src/domains/safety/action-classifier.ts +4 -2
  390. package/src/domains/safety/audit.ts +8 -2
  391. package/src/domains/safety/extension.ts +1 -1
  392. package/src/domains/session/compaction/branch-summary.ts +3 -2
  393. package/src/domains/session/compaction/cut-point.ts +2 -1
  394. package/src/domains/session/compaction/tokens.ts +2 -1
  395. package/src/domains/session/context-ledger.ts +14 -0
  396. package/src/domains/session/contract.ts +15 -0
  397. package/src/domains/session/decision-board.ts +190 -0
  398. package/src/domains/session/entries.ts +66 -3
  399. package/src/domains/session/extension.ts +93 -12
  400. package/src/domains/session/retry.ts +10 -18
  401. package/src/domains/session/session-artifacts.ts +107 -0
  402. package/src/domains/session/task-board.ts +207 -13
  403. package/src/domains/session/tree/active-path.ts +44 -5
  404. package/src/domains/session/tree/fork.ts +26 -27
  405. package/src/domains/session/tree/preview.ts +2 -2
  406. package/src/domains/session/workspace/git-probe.ts +17 -11
  407. package/src/domains/user-tasks/store.ts +297 -0
  408. package/src/engine/acp/errors.ts +96 -0
  409. package/src/engine/acp/server.ts +1728 -146
  410. package/src/engine/acp/transport.ts +135 -14
  411. package/src/engine/acp/types.ts +26 -0
  412. package/src/engine/agent.ts +3 -3
  413. package/src/engine/ai.ts +32 -27
  414. package/src/engine/alcf-oauth.ts +26 -19
  415. package/src/engine/api-registry.ts +223 -0
  416. package/src/engine/apis/index.ts +3 -7
  417. package/src/engine/apis/llamacpp-residency.ts +49 -9
  418. package/src/engine/apis/lmstudio-residency.ts +5 -21
  419. package/src/engine/apis/lmstudio.ts +243 -0
  420. package/src/engine/apis/ollama-native.ts +24 -3
  421. package/src/engine/apis/openai-completions.ts +170 -91
  422. package/src/engine/apis/residency.ts +139 -3
  423. package/src/engine/apis/types.ts +16 -0
  424. package/src/engine/env-api-keys.ts +98 -0
  425. package/src/engine/gemma-channel-filter.ts +223 -0
  426. package/src/engine/instrumented-tui.ts +192 -0
  427. package/src/engine/messages.ts +14 -0
  428. package/src/engine/models.ts +42 -0
  429. package/src/engine/oauth.ts +16 -12
  430. package/src/engine/prompt-templates.ts +1 -0
  431. package/src/engine/provider-payload.ts +16 -59
  432. package/src/engine/strip-tokenizer-sentinels.ts +1 -1
  433. package/src/engine/truncate.ts +9 -0
  434. package/src/engine/tui.ts +17 -9
  435. package/src/engine/types.ts +3 -6
  436. package/src/engine/worker-runtime-capabilities.ts +5 -0
  437. package/src/engine/worker-runtime.ts +1 -1
  438. package/src/engine/worker-tools.ts +9 -4
  439. package/src/entry/boot-options.ts +50 -0
  440. package/src/entry/orchestrator.ts +288 -150
  441. package/src/interactive/application-controller.ts +89 -2
  442. package/src/interactive/chat-loop.ts +266 -41
  443. package/src/interactive/chat-panel.ts +173 -47
  444. package/src/interactive/chat-renderer.ts +262 -72
  445. package/src/interactive/clio-editor.ts +3 -8
  446. package/src/interactive/command-fallbacks.ts +2 -2
  447. package/src/interactive/context-overlay.ts +27 -1
  448. package/src/interactive/editor-submit.ts +228 -24
  449. package/src/interactive/export-html/ansi-to-html.ts +161 -0
  450. package/src/interactive/export-html/index.ts +51 -0
  451. package/src/interactive/export-html/template.ts +45 -0
  452. package/src/interactive/export-html/tool-renderer.ts +54 -0
  453. package/src/interactive/footer/dashboard.ts +4 -0
  454. package/src/interactive/footer/notifications.ts +1 -1
  455. package/src/interactive/footer/widgets.ts +20 -2
  456. package/src/interactive/footer-panel.ts +2 -2
  457. package/src/interactive/format-time.ts +14 -2
  458. package/src/interactive/interactive-application.ts +201 -17
  459. package/src/interactive/interactive-event-projection.ts +6 -1
  460. package/src/interactive/interactive-input-runtime.ts +50 -4
  461. package/src/interactive/interactive-presentation.ts +151 -19
  462. package/src/interactive/interactive-shell.ts +268 -14
  463. package/src/interactive/interactive-slash-runtime.ts +176 -114
  464. package/src/interactive/interactive-tickers.ts +38 -7
  465. package/src/interactive/keybinding-manager.ts +1 -1
  466. package/src/interactive/layout.ts +40 -3
  467. package/src/interactive/overlay-frame.ts +1 -1
  468. package/src/interactive/overlay-general-openers.ts +58 -1
  469. package/src/interactive/overlay-key-routing.ts +3 -0
  470. package/src/interactive/overlay-lifecycle.ts +13 -0
  471. package/src/interactive/overlay-permission-lifecycle.ts +2 -1
  472. package/src/interactive/overlay-session-lifecycle.ts +69 -12
  473. package/src/interactive/overlays/decisions.ts +300 -0
  474. package/src/interactive/overlays/help-reference.ts +15 -10
  475. package/src/interactive/overlays/model-selector.ts +34 -16
  476. package/src/interactive/overlays/session-selector.ts +18 -0
  477. package/src/interactive/overlays/settings.ts +105 -17
  478. package/src/interactive/overlays/skills-hub.ts +4 -4
  479. package/src/interactive/overlays/tree-selector.ts +41 -6
  480. package/src/interactive/render-trace.ts +499 -90
  481. package/src/interactive/renderers/compaction-summary.ts +2 -2
  482. package/src/interactive/renderers/diff.ts +115 -104
  483. package/src/interactive/renderers/mermaid.ts +53 -0
  484. package/src/interactive/renderers/tool-execution.ts +386 -133
  485. package/src/interactive/renderers/worker-entry.ts +20 -4
  486. package/src/interactive/session-switch-settlement.ts +10 -0
  487. package/src/interactive/slash-autocomplete.ts +6 -114
  488. package/src/interactive/slash-commands.ts +135 -47
  489. package/src/interactive/slash-spec.ts +9 -38
  490. package/src/interactive/status/controller.ts +5 -1
  491. package/src/interactive/stdout-backpressure.ts +99 -0
  492. package/src/interactive/stream-pacer.ts +530 -0
  493. package/src/interactive/stream-pacing-policy.ts +66 -0
  494. package/src/interactive/tasks-overlay.ts +368 -14
  495. package/src/interactive/terminal-lease.ts +485 -0
  496. package/src/interactive/theme/tokens.ts +1 -1
  497. package/src/interactive/turn-context.ts +4 -3
  498. package/src/interactive/turn-persistence.ts +30 -13
  499. package/src/interactive/turn-queues.ts +12 -0
  500. package/src/interactive/turn-recovery.ts +25 -8
  501. package/src/interactive/turn-runtime.ts +79 -12
  502. package/src/interactive/turn-state.ts +10 -0
  503. package/src/interactive/view/artifacts.ts +114 -4
  504. package/src/interactive/view/view-overlay.ts +3 -0
  505. package/src/interactive/welcome-dashboard.ts +17 -16
  506. package/src/interactive/worker-receipts.ts +52 -3
  507. package/src/interactive/worker-stream.ts +5 -1
  508. package/src/tools/agent-tools.ts +23 -3
  509. package/src/tools/artifact.ts +2 -2
  510. package/src/tools/ask-user.ts +23 -13
  511. package/src/tools/bash.ts +30 -2
  512. package/src/tools/bootstrap.ts +34 -431
  513. package/src/tools/builtin-tool-catalog.ts +265 -0
  514. package/src/tools/codewiki/code-nav-surface.ts +29 -0
  515. package/src/tools/codewiki/code-nav.ts +8 -22
  516. package/src/tools/codewiki/shared.ts +41 -38
  517. package/src/tools/context/docs-engine.ts +14 -3
  518. package/src/tools/context/index.ts +107 -28
  519. package/src/tools/context/surface.ts +19 -0
  520. package/src/tools/core-bootstrap.ts +168 -0
  521. package/src/tools/credential-present.ts +5 -5
  522. package/src/tools/dispatch-admission.ts +533 -0
  523. package/src/tools/dispatch-background.ts +54 -0
  524. package/src/tools/dispatch-event-text.ts +6 -0
  525. package/src/tools/dispatch-plan.ts +9 -4
  526. package/src/tools/dispatch-run-events.ts +238 -0
  527. package/src/tools/dispatch-runner.ts +2370 -0
  528. package/src/tools/dispatch-scout-admission.ts +295 -0
  529. package/src/tools/dispatch-types.ts +77 -0
  530. package/src/tools/dispatch.ts +67 -3161
  531. package/src/tools/find.ts +4 -2
  532. package/src/tools/grep.ts +2 -2
  533. package/src/tools/lazy-tool.ts +60 -0
  534. package/src/tools/ledger.ts +3 -3
  535. package/src/tools/monitor-surface.ts +36 -0
  536. package/src/tools/monitor.ts +2 -32
  537. package/src/tools/observers.ts +2 -2
  538. package/src/tools/registry.ts +39 -27
  539. package/src/tools/safe-exec.ts +2 -2
  540. package/src/tools/steer-surface.ts +17 -0
  541. package/src/tools/steer.ts +2 -13
  542. package/src/tools/tasks.ts +108 -11
  543. package/src/tools/truncate.ts +25 -184
  544. package/src/tools/verify/frontend.ts +3 -1
  545. package/src/tools/verify/index.ts +3 -38
  546. package/src/tools/verify/surface.ts +46 -0
  547. package/src/tools/web-fetch-surface.ts +23 -0
  548. package/src/tools/web-fetch.ts +2 -20
  549. package/src/tools/write.ts +7 -2
  550. package/src/worker/entry.ts +39 -2
  551. package/src/worker/spec-contract.ts +26 -5
  552. package/dist/chunk-7SS2CTV2.js +0 -61361
  553. package/dist/chunk-DKGKUHFA.js +0 -924
  554. package/dist/chunk-GEP36Y4X.js +0 -12796
  555. package/dist/chunk-XYWBQRDM.js +0 -137
  556. package/dist/clio-BZVGEUFJ.js +0 -58
  557. package/dist/configure-S7S6F6CL.js +0 -32
  558. package/docs/html/agents_blueprint.html +0 -936
  559. package/docs/html/alcf_blueprint.html +0 -324
  560. package/docs/html/architecture_blueprint.html +0 -850
  561. package/docs/html/commands_blueprint.html +0 -939
  562. package/docs/html/config_knobs_audit_blueprint.html +0 -178
  563. package/docs/html/configuration_blueprint.html +0 -1080
  564. package/docs/html/context_blueprint.html +0 -603
  565. package/docs/html/documentation_blueprint.html +0 -832
  566. package/docs/html/environment_blueprint.html +0 -404
  567. package/docs/html/eval_blueprint.html +0 -743
  568. package/docs/html/evals_internal_blueprint.html +0 -190
  569. package/docs/html/evolution_blueprint.html +0 -674
  570. package/docs/html/extensions_blueprint.html +0 -2065
  571. package/docs/html/fleet_dispatch_blueprint.html +0 -286
  572. package/docs/html/index.html +0 -919
  573. package/docs/html/lifecycle_blueprint.html +0 -723
  574. package/docs/html/memory_blueprint.html +0 -699
  575. package/docs/html/middleware_blueprint.html +0 -664
  576. package/docs/html/models_blueprint.html +0 -2366
  577. package/docs/html/observability_blueprint.html +0 -683
  578. package/docs/html/provider_adapter_blueprint.html +0 -245
  579. package/docs/html/safety_blueprint.html +0 -1386
  580. package/docs/html/shared.css +0 -571
  581. package/docs/html/shared.js +0 -143
  582. package/docs/html/skills_blueprint.html +0 -671
  583. package/docs/html/soak_blueprint.html +0 -182
  584. package/docs/html/tool_usage_blueprint.html +0 -350
  585. package/docs/html/tools_blueprint.html +0 -2249
  586. package/docs/html/trace_blueprint.html +0 -235
  587. package/docs/html/tui_design_blueprint.html +0 -374
  588. package/docs/html/validation_blueprint.html +0 -961
  589. package/docs/html/worker_dispatch_blueprint.html +0 -231
  590. package/src/core/release.ts +0 -2
  591. package/src/domains/providers/runtimes/common/lmstudio-logger.ts +0 -32
  592. package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +0 -491
  593. package/src/engine/apis/lmstudio-native.ts +0 -1438
  594. package/src/engine/apis/thinking-replay.ts +0 -11
  595. package/src/tools/string-enum.ts +0 -15
@@ -1,6 +1,7 @@
1
1
  # Sources:
2
2
  # https://huggingface.co/Qwen/Qwen3.6-35B-A3B
3
3
  # https://huggingface.co/Qwen/Qwen3.6-27B
4
+ # https://huggingface.co/Qwen/Qwen3.8-27B
4
5
  # https://huggingface.co/google/gemma-4-26B-A4B
5
6
  # https://huggingface.co/LilaRest/gemma-4-31B-it-NVFP4-turbo
6
7
  # https://huggingface.co/Jackrong/Gemopus-4-31B-it-GGUF
@@ -17,13 +18,12 @@
17
18
  #
18
19
  # Thinking semantics for these local families: the chain-of-thought is emitted
19
20
  # by the model's chat template (Qwen-style <think> blocks, Gemma 4 thinking
20
- # template, Nemotron reasoning template). LM Studio's SDK and llama.cpp's
21
- # OpenAI-compatible surface do not expose a reliable "no thinking" flag, so
22
- # Clio cannot disable template-driven reasoning at the API layer. With
23
- # `--thinking off` Clio simply does not request reasoning; if the model emits
24
- # it anyway, the chain-of-thought is captured into a ThinkingContent block,
25
- # counted as reasoning tokens (separate from output tokens) on the receipt
26
- # and TUI footer, and surfaced to the user truthfully rather than hidden.
21
+ # template, Nemotron reasoning template). LM Studio's OpenAI-compatible HTTP
22
+ # surface uses reasoning_effort as its sole thinking control; llama.cpp support
23
+ # depends on the active template and reasoning parser. If a model emits thought
24
+ # despite the requested level, Clio captures it in a ThinkingContent block,
25
+ # counts it separately on receipts and the TUI footer, and surfaces it rather
26
+ # than hiding what the server returned.
27
27
  - family: openai-gpt-oss
28
28
  matchPatterns:
29
29
  - openai/gpt-oss
@@ -164,8 +164,8 @@
164
164
  "24gb": "Use a 4-bit quant with reduced load context for evaluation. Prefer the 32GB tier for sustained Clio writes."
165
165
  "32gb": "Primary strong local model for multimodal main-agent work. Keep openai-compat available for tool-call fallback."
166
166
  runtimePreference:
167
- lmstudioNative: "Use only when the target's server lifecycle is Clio-managed or the model is already loaded at the requested context."
168
- openaiCompat: "Preferred fallback for LM Studio gateway tool-call extraction."
167
+ lmstudio: "Use LM Studio per-model load settings unless this target carries explicit lmstudio.load overrides."
168
+ openaiCompat: "Use for a generic gateway that fronts the same OpenAI-compatible chat surface."
169
169
  llamaCpp: "OpenAI-compatible chat completions with --jinja."
170
170
  llamaCpp:
171
171
  ctxSize: 819200
@@ -184,7 +184,7 @@
184
184
  Reasoning is template-driven; thinking blocks emit through the qwen
185
185
  chat template. Preserve thinking across coding-task turns when the
186
186
  chain matters; otherwise let the budget cap output growth.
187
- serving: "Use qwen3_coder tool parsing when served through OpenAI-compatible HTTP. LM Studio native uses SDK rawTools, but openai-compat remains the fallback for template-specific tool extraction issues."
187
+ serving: "Use qwen3_coder tool parsing when served through OpenAI-compatible HTTP. LM Studio uses the same OpenAI-compatible tool surface."
188
188
 
189
189
  - family: qwen3.6-35b-a3b
190
190
  matchPatterns:
@@ -224,7 +224,7 @@
224
224
  gpuTiers:
225
225
  "32gb": "Main-agent candidate on 32GB targets when Nemotron Omni is unavailable or tool behavior is better for text-only work."
226
226
  runtimePreference:
227
- lmstudioNative: "Usable for text and vision when loaded in LM Studio. Keep openai-compat available for tool fallback."
227
+ lmstudio: "Usable for text and vision through LM Studio's OpenAI-compatible chat surface."
228
228
  openaiCompat: "Preferred local gateway path for tool-call stress tests."
229
229
  llamaCpp: "OpenAI-compatible chat completions with --jinja. Local llama.cpp profile emits reasoning_content without a separate --reasoning flag."
230
230
  llamaCpp:
@@ -346,7 +346,7 @@
346
346
  gpuTiers:
347
347
  "32gb": "Fits at f16 KV with parallel=1 and ctx=262144 (Q4_K_XL weights ~19.5 GB plus ~32 GB KV)."
348
348
  runtimePreference:
349
- lmstudioNative: "Primary path; standard <think> tagging works correctly with the SDK classifier."
349
+ lmstudio: "Primary LM Studio path through OpenAI-compatible chat and native REST model management."
350
350
  openaiCompat: "Verified parity for tool calls; reasoning_content surfaces and completion_tokens_details.reasoning_tokens is reported."
351
351
  thinking:
352
352
  mechanism: budget-tokens
@@ -360,6 +360,91 @@
360
360
  turns when the workflow is iterative; the budget caps runaway chains.
361
361
  serving: "Official Qwen card recommends max output 32768 tokens for standard queries (81920 only for math/code competitions). Coding sampler is the precise variant; preserve thinking blocks across turns for iterative workflows."
362
362
 
363
+ - family: qwen3.8-27b
364
+ matchPatterns:
365
+ - qwen3.8-27b
366
+ - qwen3_8-27b
367
+ - qwen3-8-27b
368
+ capabilities:
369
+ chat: true
370
+ tools: true
371
+ toolCallFormat: qwen
372
+ reasoning: true
373
+ thinkingFormat: qwen-chat-template
374
+ structuredOutputs: json-schema
375
+ vision: true
376
+ audio: false
377
+ embeddings: false
378
+ rerank: false
379
+ fim: false
380
+ contextWindow: 262144
381
+ maxTokens: 131072
382
+ quirks:
383
+ kvCache:
384
+ kQuant: q8_0
385
+ vQuant: q8_0
386
+ sampling:
387
+ thinking:
388
+ temperature: 1.0
389
+ topP: 0.95
390
+ topK: 20
391
+ minP: 0.0
392
+ presencePenalty: 0.0
393
+ repetitionPenalty: 1.0
394
+ maxTokens: 32768
395
+ instruct:
396
+ temperature: 0.7
397
+ topP: 0.80
398
+ topK: 20
399
+ minP: 0.0
400
+ presencePenalty: 1.5
401
+ repetitionPenalty: 1.0
402
+ maxTokens: 32768
403
+ gpuTiers:
404
+ "24gb-rocm": "24 GB ROCm class: IQ4_NL uses about 17.3 GB and UD-Q4_K_XL uses about 19.5 GB. Serve ctx=131072 with q8_0/q8_0 KV, parallel=2, and draft-mtp speculative decoding."
405
+ "32gb-cuda": "32 GB CUDA class: Q6_K uses about 23.8 GB. Serve ctx=131072 with parallel=4 because the full 262144-token context is VRAM-bound."
406
+ "128gb-unified-vulkan": "128 GB unified-memory Vulkan class: IQ4_NL uses about 17.3 GB and fits ctx=262144 with parallel=4. Vulkan backends show much slower prefill than ROCm/CUDA on this family; prefer ROCm where available."
407
+ runtimePreference:
408
+ llamaCpp: "Primary verified path. OpenAI-compatible chat completions with --jinja, --reasoning on, --reasoning-effort medium as server defaults; reasoning_content and tool_calls both confirmed to parse correctly. A request can override to off with chat_template_kwargs.enable_thinking:false, or to a different active level with reasoning_effort in {low, medium, xhigh} (never minimal/high/max on the wire; the stock template raises a fatal jinja exception on those and Clio's landed capability resolver already clamps to this set)."
409
+ lmstudioOpenaiCompat: "Clio sends reasoning_effort over LM Studio's OpenAI-compatible HTTP port and omits chat_template_kwargs because LM Studio does not use that field for this model. With no override, LM Studio defaults this model to thinking off, unlike raw llama.cpp's template default of thinking on/xhigh. reasoning_effort:'none' explicitly disables it."
410
+ lmstudioNative: "Clio's LM Studio runtime uses the OpenAI-compatible HTTP chat adapter with native REST model discovery and residency management."
411
+ llamaCpp:
412
+ ctxSize: 131072
413
+ cacheTypeK: q8_0
414
+ cacheTypeV: q8_0
415
+ flashAttn: true
416
+ nGpuLayers: 99
417
+ parallel: 2
418
+ batchSize: 1024
419
+ ubatchSize: 256
420
+ mmproj: true
421
+ reasoning: "on"
422
+ reasoningEffort: medium
423
+ specType: draft-mtp
424
+ specDraftNMax: 1
425
+ thinking:
426
+ mechanism: effort-levels
427
+ effortByLevel:
428
+ low: low
429
+ medium: medium
430
+ high: xhigh
431
+ xhigh: xhigh
432
+ guidance: |
433
+ Official Qwen3.8-27B chat template (chat_template.jinja) validates
434
+ reasoning_effort against exactly {xhigh, medium, low} and raises a
435
+ fatal jinja exception (hard 500, not a graceful fallback) on anything
436
+ else, including minimal/high/max. The 27B card gives no /think or
437
+ /no_think soft switch for this model; unlike Qwen3, that idiom has no
438
+ effect here. Off must go through chat_template_kwargs.enable_thinking:
439
+ false, never through reasoning_effort. preserve_thinking should stay
440
+ on for an agentic harness (the template's own recommendation for
441
+ agent scenarios; improves KV cache reuse). llama.cpp's own
442
+ reasoning_effort:"none" also disables reasoning at the server layer
443
+ and is a separate mechanism from the template's enable_thinking flag;
444
+ both were verified independently on llama.cpp and on LM Studio's HTTP
445
+ port.
446
+ serving: "Qwen3.8-27B (unsloth/Qwen3.8-27B-GGUF), hybrid qwen3_5 architecture: 3 linear-attention (Gated DeltaNet) layers per 1 full-attention layer, so only 16 of 64 layers hold a conventional KV cache. Native ctx 262144, extensible to 1M via YaRN (out of scope for the hardware classes above; leave rope at default). Tool calls use an XML <tool_call><function=...> form in the stock template; llama.cpp's qwen3_coder parser converts this to standard tool_calls JSON, verified live on ROCm, CUDA, and Vulkan backends. Only messages[0] may be a system message and only system/user/assistant/tool roles are accepted; a second system message or a developer role raises a template error."
447
+
363
448
  - family: gemma-4-31b-it-nvfp4-turbo
364
449
  matchPatterns:
365
450
  - gemma-4-31b-it-nvfp4-turbo
@@ -404,25 +489,23 @@
404
489
  leakageNote: |
405
490
  LM Studio's gemma4 chat template emits chain-of-thought as plain text
406
491
  bracketed by literal '<|channel>thought\n' and '<channel|>' markers
407
- rather than reasoningType=reasoning fragments. Clio's lmstudio-native
408
- adapter buffers and re-classifies these regions into ThinkingContent
409
- so the markers do not leak into the visible TUI text and reasoning
410
- tokens are accounted via the chars/4 estimator.
492
+ rather than structured reasoning fragments. The OpenAI-compatible path
493
+ currently exposes those markers as the server streams them; filtering
494
+ this family remains a follow-up.
411
495
  gpuTiers:
412
496
  "48gb": "Fits at f16 KV when parallel=1 and ctx=122880; drop to q8_0 KV at parallel=4."
413
497
  "80gb": "Comfortable at f16 KV with parallel=1 and ctx=122880."
414
498
  runtimePreference:
415
- lmstudioNative: "Verified path. Pin parallel=1 in the LM Studio per-model preset to give a single agent the full 122880 context."
416
- openaiCompat: "Fallback path; the openai-compat surface does not expose the channel-marker classifier so visible text shows the raw markers."
499
+ lmstudio: "Pin parallel=1 in the LM Studio per-model preset to give a single agent the full 122880 context."
500
+ openaiCompat: "LM Studio chat uses this surface; visible text may contain the raw channel markers."
417
501
  thinking:
418
502
  mechanism: on-off
419
503
  guidance: |
420
504
  Gemma 4 chat template exposes thinking only as on or off; intermediate
421
505
  levels coerce to on. NVFP4 quantization can corrupt JSON tool-call
422
506
  output under aggressive sampling, so the instruct profile pins
423
- temperature at 0.7. The lmstudio-native adapter re-classifies the
424
- channel-marker thought region into ThinkingContent so markers do not
425
- leak into visible text.
507
+ temperature at 0.7. LM Studio's OpenAI-compatible stream currently
508
+ exposes channel markers when the server does not classify them.
426
509
  serving: "LilaRest publishes no per-model sampler; values inherit the gemma family default per the official Google Gemma 4 31B card. KV cache budget at f16, ctx=122880 is roughly 57 GB on top of ~21 GB of NVFP4 weights."
427
510
 
428
511
  # The qat/UD-Q4_K_XL/MTP build is the long-context llama.cpp gemma profile and is a
@@ -547,15 +630,15 @@
547
630
  "48gb": "Fits at f16 KV with parallel=1; q8_0 KV recommended at parallel=4."
548
631
  "80gb": "Comfortable at f16 KV with parallel=1 and ctx=122880."
549
632
  runtimePreference:
550
- lmstudioNative: "Verified path. Channel-marker handler in clio's adapter recovers reasoning tokens that the SDK classifier drops."
633
+ lmstudio: "LM Studio's OpenAI-compatible stream may expose this family's channel markers as visible text."
551
634
  openaiCompat: "Fallback; reasoning_content is absent from the openai-compat reasoning probe for this family."
552
635
  thinking:
553
636
  mechanism: always-on
554
637
  guidance: |
555
638
  Distilled traces emit unconditionally. The thinking level setting is
556
639
  ignored at the API surface; chain-of-thought arrives whether or not
557
- Clio asks for it. Reasoning tokens are accounted via the channel-marker
558
- re-classifier in lmstudio-native.
640
+ Clio asks for it. Channel-marker filtering remains a follow-up for the
641
+ OpenAI-compatible LM Studio path.
559
642
  serving: "Distilled from Claude 4.6 Opus reasoning traces onto Google Gemma 4 31B; sampler matches the gemopus card values."
560
643
 
561
644
  - family: qwopus3.6-27b-v1-preview
@@ -598,7 +681,7 @@
598
681
  gpuTiers:
599
682
  "32gb": "Fits at f16 KV with parallel=1 and ctx=262144 thanks to the Q4_K_M weights (~16.5 GB)."
600
683
  runtimePreference:
601
- lmstudioNative: "Primary path; thinking is emitted via standard <think> tags so the SDK classifier accounts reasoning correctly."
684
+ lmstudio: "Primary LM Studio path; thinking is read from the OpenAI-compatible reasoning stream."
602
685
  openaiCompat: "Verified for tool-call extraction parity; reasoning_content surfaces."
603
686
  thinking:
604
687
  mechanism: budget-tokens
@@ -730,7 +813,7 @@
730
813
  maxTokens: 32768
731
814
  runtimePreference:
732
815
  llamaCpp: "A local llama.cpp router serves it with --jinja and enable_thinking false; coder sampler temperature 0.2, top_p 0.9, top_k 20."
733
- lmstudioNative: "Dense 27B Coder-MTP; the creator's template ships thinking-off, and no per-request field re-enables it."
816
+ lmstudio: "Dense 27B Coder-MTP; configure MTP in LM Studio's per-model load settings."
734
817
  thinking:
735
818
  mechanism: none
736
819
  guidance: |
@@ -812,8 +895,8 @@
812
895
  gpuTiers:
813
896
  "32gb": "Main-agent candidate for 32 GB and larger local systems when Gemma behavior is preferred."
814
897
  runtimePreference:
815
- lmstudioNative: "Use for already-loaded LM Studio sessions and multimodal checks."
816
- openaiCompat: "Preferred fallback when SDK rawTools do not match the template."
898
+ lmstudio: "Use for already-loaded LM Studio sessions and multimodal checks."
899
+ openaiCompat: "LM Studio chat uses this OpenAI-compatible surface."
817
900
  llamaCpp: "OpenAI-compatible chat completions with --jinja, --reasoning on, and the matching mmproj."
818
901
  llamaCpp:
819
902
  ctxSize: 262144
@@ -862,8 +945,8 @@
862
945
  gpuTiers:
863
946
  "32gb": "Preferred local worker model when a text-only worker is enough."
864
947
  runtimePreference:
865
- lmstudioNative: "Use when LM Studio SDK tool extraction is verified for the loaded template."
866
- openaiCompat: "Preferred fallback for LM Studio gateway tool calls."
948
+ lmstudio: "Use when LM Studio's OpenAI-compatible tool extraction is verified for the loaded template."
949
+ openaiCompat: "Use for a generic gateway that fronts the same OpenAI-compatible chat surface."
867
950
  anthropicCompat: "Do not select for the current llama.cpp target profile; /v1/messages returned 404 while /v1/models and OpenAI-compatible chat worked."
868
951
  llamaCpp: "OpenAI-compatible chat completions with --jinja. Recommended local profile disables thinking in chat_template_kwargs."
869
952
  llamaCpp:
@@ -922,8 +1005,8 @@
922
1005
  gpuTiers:
923
1006
  "32gb": "Distilled Opus-style reasoning at Qwen3.5 35B A3B scale. Use as a strong local main agent when GPU room is available."
924
1007
  runtimePreference:
925
- lmstudioNative: "Verified usable on LM Studio when loaded with the Qwen-style preset."
926
- openaiCompat: "Preferred fallback when SDK rawTools yield empty arguments for the distilled template."
1008
+ lmstudio: "Verified usable on LM Studio when loaded with the Qwen-style preset."
1009
+ openaiCompat: "LM Studio chat uses this OpenAI-compatible surface."
927
1010
  llamaCpp: "OpenAI-compatible chat completions with --jinja. Match qwen3 reasoning parser flags upstream."
928
1011
  thinking:
929
1012
  mechanism: budget-tokens
@@ -973,8 +1056,8 @@
973
1056
  gpuTiers:
974
1057
  "16gb": "Use this as the local 16GB emulation target. It keeps the output cap below the 32GB-class MoE defaults."
975
1058
  runtimePreference:
976
- lmstudioNative: "Primary local laptop path. Verified through LM Studio /api/v1/models with 262144 loaded context, flash attention, GPU KV offload, and trained_for_tool_use."
977
- openaiCompat: "Verified through the LM Studio gateway for read and artifact tool calls; use when the native SDK produces thinking-only length stops or malformed tools."
1059
+ lmstudio: "Primary local laptop path. Verified through LM Studio /api/v1/models with 262144 loaded context, flash attention, GPU KV offload, and trained_for_tool_use."
1060
+ openaiCompat: "LM Studio chat uses this surface for reasoning and tool calls."
978
1061
  anthropicCompat: "LM Studio's Anthropic Messages surface streams simple text with the server root URL as baseUrl; keep as a protocol fallback until tool and reasoning behavior are proven."
979
1062
  thinking:
980
1063
  # Measured 2026-08-11 against LM Studio on this exact model: baseline 56
@@ -990,4 +1073,4 @@
990
1073
  Clio shows the level as forced. Output cap is tighter than the
991
1074
  32GB-class MoE families because this is the 16GB emulation target;
992
1075
  budget for a reasoning preamble ahead of every answer.
993
- serving: "LM Studio reports trained_for_tool_use for the local qwopus3.5-9b-v3 target. Native model override successfully switched residency to granite-4.0-h-350m through the SDK."
1076
+ serving: "LM Studio reports trained_for_tool_use for the local qwopus3.5-9b-v3 target. Configure residency through LM Studio or explicit lmstudio.load settings."
@@ -15,6 +15,7 @@
15
15
  import { join } from "node:path";
16
16
 
17
17
  import { clioConfigDir } from "../../core/xdg.js";
18
+ import { activateExternalPluginApiBridge } from "../../engine/api-registry.js";
18
19
  import type { RuntimeRegistry } from "./registry.js";
19
20
 
20
21
  interface PluginSettings {
@@ -35,8 +36,9 @@ export async function loadPluginRuntimes(
35
36
  const loaded: string[] = [];
36
37
 
37
38
  const pluginDir = join(clioConfigDir(), "runtimes");
39
+ const packages = extractPluginPackages(settings);
38
40
  try {
39
- const ids = await registry.loadFromDir(pluginDir);
41
+ const ids = await registry.loadFromDir(pluginDir, activateExternalPluginApiBridge);
40
42
  loaded.push(...ids);
41
43
  } catch (err) {
42
44
  process.stderr.write(
@@ -44,9 +46,9 @@ export async function loadPluginRuntimes(
44
46
  );
45
47
  }
46
48
 
47
- for (const packageName of extractPluginPackages(settings)) {
49
+ for (const packageName of packages) {
48
50
  try {
49
- const ids = await registry.loadFromPackage(packageName);
51
+ const ids = await registry.loadFromPackage(packageName, activateExternalPluginApiBridge);
50
52
  loaded.push(...ids);
51
53
  } catch (err) {
52
54
  process.stderr.write(
@@ -1,5 +1,5 @@
1
1
  export interface NativeRuntimeFingerprint {
2
- runtimeId: "lmstudio-native" | "ollama-native";
2
+ runtimeId: "lmstudio" | "ollama-native";
3
3
  displayName: string;
4
4
  }
5
5
 
@@ -23,11 +23,31 @@ async function fetchWithTimeout(url: string, timeoutMs: number): Promise<Respons
23
23
  * resident-model lifecycle.
24
24
  */
25
25
  export async function fingerprintNativeRuntime(baseUrl: string): Promise<NativeRuntimeFingerprint | null> {
26
- const trimmed = baseUrl.endsWith("/") ? baseUrl.slice(0, -1) : baseUrl;
27
- const lmStudioV1 = await fetchWithTimeout(`${trimmed}/api/v1/models`, 750);
28
- if (lmStudioV1?.ok) return { runtimeId: "lmstudio-native", displayName: "LM Studio" };
26
+ const normalized = baseUrl.replace(/^ws:/u, "http:").replace(/^wss:/u, "https:");
27
+ const trimmed = normalized.endsWith("/") ? normalized.slice(0, -1) : normalized;
28
+ const greeting = await fetchWithTimeout(`${trimmed}/lmstudio-greeting`, 750);
29
+ if (greeting?.ok) {
30
+ try {
31
+ const data = (await greeting.json()) as { lmstudio?: unknown };
32
+ if (data.lmstudio === true) return { runtimeId: "lmstudio", displayName: "LM Studio" };
33
+ } catch {
34
+ // The exact JSON body is the fingerprint.
35
+ }
36
+ }
29
37
  const lmStudioV0 = await fetchWithTimeout(`${trimmed}/api/v0/models`, 750);
30
- if (lmStudioV0?.ok) return { runtimeId: "lmstudio-native", displayName: "LM Studio" };
38
+ if (lmStudioV0?.ok) {
39
+ try {
40
+ const data = (await lmStudioV0.json()) as { data?: unknown };
41
+ if (
42
+ Array.isArray(data.data) &&
43
+ data.data.some((entry) => typeof entry === "object" && entry !== null && "compatibility_type" in entry)
44
+ ) {
45
+ return { runtimeId: "lmstudio", displayName: "LM Studio" };
46
+ }
47
+ } catch {
48
+ // A malformed v0 body is not an LM Studio fingerprint.
49
+ }
50
+ }
31
51
  const ollama = await fetchWithTimeout(`${trimmed}/api/version`, 750);
32
52
  if (ollama?.ok) {
33
53
  try {
@@ -11,30 +11,36 @@ export interface RuntimeRegistry {
11
11
  register(desc: RuntimeDescriptor): void;
12
12
  get(id: string): RuntimeDescriptor | null;
13
13
  list(): ReadonlyArray<RuntimeDescriptor>;
14
- loadFromDir(dir: string): Promise<ReadonlyArray<string>>;
15
- loadFromPackage(packageName: string): Promise<ReadonlyArray<string>>;
14
+ loadFromDir(dir: string, beforeImport?: () => Promise<void>): Promise<ReadonlyArray<string>>;
15
+ loadFromPackage(packageName: string, beforeImport?: () => Promise<void>): Promise<ReadonlyArray<string>>;
16
16
  clear(): void;
17
17
  }
18
18
 
19
19
  export function createRuntimeRegistry(): RuntimeRegistry {
20
20
  const byId = new Map<string, RuntimeDescriptor>();
21
+ const canonical = new Set<string>();
21
22
 
22
23
  const register = (desc: RuntimeDescriptor): void => {
23
- if (byId.has(desc.id)) {
24
- throw new Error(`runtime id '${desc.id}' already registered`);
24
+ const ids = [desc.id, ...(desc.aliases ?? [])];
25
+ const conflict = ids.find((id) => byId.has(id));
26
+ if (conflict) {
27
+ throw new Error(`runtime id '${conflict}' already registered`);
25
28
  }
26
- byId.set(desc.id, desc);
29
+ for (const id of ids) byId.set(id, desc);
30
+ canonical.add(desc.id);
27
31
  };
28
32
 
29
33
  const get = (id: string): RuntimeDescriptor | null => byId.get(id) ?? null;
30
34
 
31
- const list = (): ReadonlyArray<RuntimeDescriptor> => Array.from(byId.values());
35
+ const list = (): ReadonlyArray<RuntimeDescriptor> =>
36
+ Array.from(canonical, (id) => byId.get(id)).filter((entry): entry is RuntimeDescriptor => entry !== undefined);
32
37
 
33
38
  const clear = (): void => {
34
39
  byId.clear();
40
+ canonical.clear();
35
41
  };
36
42
 
37
- const loadFromDir = async (dir: string): Promise<ReadonlyArray<string>> => {
43
+ const loadFromDir = async (dir: string, beforeImport?: () => Promise<void>): Promise<ReadonlyArray<string>> => {
38
44
  let entries: string[];
39
45
  try {
40
46
  const stat = statSync(dir);
@@ -47,7 +53,7 @@ export function createRuntimeRegistry(): RuntimeRegistry {
47
53
  for (const name of entries) {
48
54
  if (!name.endsWith(".js")) continue;
49
55
  const full = join(dir, name);
50
- const desc = await importDescriptor(full, pathToFileURL(full).href);
56
+ const desc = await importDescriptor(full, pathToFileURL(full).href, beforeImport);
51
57
  if (desc === null) continue;
52
58
  try {
53
59
  register(desc);
@@ -59,9 +65,13 @@ export function createRuntimeRegistry(): RuntimeRegistry {
59
65
  return loaded;
60
66
  };
61
67
 
62
- const loadFromPackage = async (packageName: string): Promise<ReadonlyArray<string>> => {
68
+ const loadFromPackage = async (
69
+ packageName: string,
70
+ beforeImport?: () => Promise<void>,
71
+ ): Promise<ReadonlyArray<string>> => {
63
72
  let mod: unknown;
64
73
  try {
74
+ await beforeImport?.();
65
75
  mod = await import(packageName);
66
76
  } catch (err) {
67
77
  process.stderr.write(`[providers] runtime package ${packageName} failed to import: ${describeError(err)}\n`);
@@ -101,9 +111,14 @@ export function getRuntimeRegistry(): RuntimeRegistry {
101
111
  return singleton;
102
112
  }
103
113
 
104
- async function importDescriptor(file: string, href: string): Promise<RuntimeDescriptor | null> {
114
+ async function importDescriptor(
115
+ file: string,
116
+ href: string,
117
+ beforeImport?: () => Promise<void>,
118
+ ): Promise<RuntimeDescriptor | null> {
105
119
  let mod: unknown;
106
120
  try {
121
+ await beforeImport?.();
107
122
  mod = await import(href);
108
123
  } catch (err) {
109
124
  process.stderr.write(`[providers] runtime plugin ${file} failed to import: ${describeError(err)}\n`);
@@ -130,6 +145,12 @@ function validateRuntimeDescriptor(value: unknown): RuntimeDescriptorValidation
130
145
  if (typeof v.id !== "string" || v.id.trim().length === 0) {
131
146
  return { ok: false, reason: "id must be a non-empty string" };
132
147
  }
148
+ if (
149
+ v.aliases !== undefined &&
150
+ (!Array.isArray(v.aliases) || v.aliases.some((alias) => typeof alias !== "string" || alias.trim().length === 0))
151
+ ) {
152
+ return { ok: false, reason: "aliases must be non-empty strings when present" };
153
+ }
133
154
  if (typeof v.displayName !== "string" || v.displayName.trim().length === 0) {
134
155
  return { ok: false, reason: "displayName must be a non-empty string" };
135
156
  }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Boot-only runtime metadata used before the providers domain is hydrated.
3
+ *
4
+ * Keep this module data-only. Importing full runtime descriptors here pulls
5
+ * every probe, provider adapter, and completion implementation in front of the
6
+ * first interactive frame. `builtin-runtime-boot-manifest.test.ts` compares
7
+ * this projection with the canonical descriptors so the cheap copy cannot
8
+ * silently drift.
9
+ */
10
+
11
+ import type { RuntimeAuth, RuntimeKind, RuntimeTier } from "../types/runtime-descriptor.js";
12
+
13
+ export interface RuntimeBootMetadata {
14
+ id: string;
15
+ aliases?: ReadonlyArray<string>;
16
+ kind: RuntimeKind;
17
+ tier?: RuntimeTier;
18
+ auth: RuntimeAuth;
19
+ credentialsEnvVar?: string;
20
+ oauthProviderId?: string;
21
+ }
22
+
23
+ export const BUILTIN_RUNTIME_BOOT_MANIFEST: ReadonlyArray<RuntimeBootMetadata> = [
24
+ { id: "alcf", kind: "http", tier: "cloud", auth: "oauth" },
25
+ { id: "anthropic", kind: "http", tier: "cloud", auth: "api-key", credentialsEnvVar: "ANTHROPIC_API_KEY" },
26
+ { id: "anthropic-max", kind: "http", tier: "cloud", auth: "oauth", oauthProviderId: "anthropic" },
27
+ { id: "bedrock", kind: "http", tier: "cloud", auth: "aws-sdk" },
28
+ { id: "deepseek", kind: "http", tier: "cloud", auth: "api-key", credentialsEnvVar: "DEEPSEEK_API_KEY" },
29
+ { id: "google", kind: "http", tier: "cloud", auth: "api-key", credentialsEnvVar: "GOOGLE_API_KEY" },
30
+ { id: "groq", kind: "http", tier: "cloud", auth: "api-key", credentialsEnvVar: "GROQ_API_KEY" },
31
+ { id: "mistral", kind: "http", tier: "cloud", auth: "api-key", credentialsEnvVar: "MISTRAL_API_KEY" },
32
+ { id: "openai", kind: "http", tier: "cloud", auth: "api-key", credentialsEnvVar: "OPENAI_API_KEY" },
33
+ { id: "openai-codex", kind: "http", tier: "cloud", auth: "oauth" },
34
+ { id: "openrouter", kind: "http", tier: "cloud", auth: "api-key", credentialsEnvVar: "OPENROUTER_API_KEY" },
35
+ { id: "lemonade-anthropic", kind: "http", tier: "local-native", auth: "api-key" },
36
+ { id: "lemonade", kind: "http", tier: "local-native", auth: "api-key" },
37
+ { id: "llamacpp", kind: "http", tier: "local-native", auth: "api-key" },
38
+ { id: "llamacpp-anthropic", kind: "http", tier: "local-native", auth: "api-key" },
39
+ { id: "llamacpp-completion", kind: "http", tier: "local-native", auth: "api-key" },
40
+ { id: "llamacpp-embed", kind: "http", tier: "local-native", auth: "api-key" },
41
+ { id: "llamacpp-rerank", kind: "http", tier: "local-native", auth: "api-key" },
42
+ { id: "lmstudio", aliases: ["lmstudio-native"], kind: "http", tier: "local-native", auth: "api-key" },
43
+ { id: "ollama-native", kind: "http", tier: "local-native", auth: "none" },
44
+ { id: "anthropic-compat", kind: "http", tier: "protocol", auth: "api-key" },
45
+ { id: "openai-compat", kind: "http", tier: "protocol", auth: "api-key" },
46
+ { id: "sglang", kind: "http", tier: "local-native", auth: "api-key" },
47
+ { id: "vllm", kind: "http", tier: "local-native", auth: "api-key" },
48
+ { id: "claude-code", kind: "subprocess", tier: "subscription", auth: "claude-cli" },
49
+ { id: "claude-sdk", kind: "sdk", tier: "subscription", auth: "claude-cli" },
50
+ { id: "antigravity-code", kind: "subprocess", tier: "subscription", auth: "none" },
51
+ ];
52
+
53
+ export function findBuiltinRuntimeBootMetadata(id: string): RuntimeBootMetadata | null {
54
+ return BUILTIN_RUNTIME_BOOT_MANIFEST.find((runtime) => runtime.id === id || runtime.aliases?.includes(id)) ?? null;
55
+ }
@@ -31,7 +31,7 @@ import llamacppAnthropic from "./local-native/llamacpp-anthropic.js";
31
31
  import llamacppCompletion from "./local-native/llamacpp-completion.js";
32
32
  import llamacppEmbed from "./local-native/llamacpp-embed.js";
33
33
  import llamacppRerank from "./local-native/llamacpp-rerank.js";
34
- import lmstudioNative from "./local-native/lmstudio-native.js";
34
+ import lmstudio from "./local-native/lmstudio.js";
35
35
  import ollamaNative from "./local-native/ollama-native.js";
36
36
  import sglang from "./local-native/sglang.js";
37
37
  import vllm from "./local-native/vllm.js";
@@ -57,7 +57,7 @@ const BUILTIN_RUNTIMES: ReadonlyArray<RuntimeDescriptor> = [
57
57
  llamacppCompletion,
58
58
  llamacppEmbed,
59
59
  llamacppRerank,
60
- lmstudioNative,
60
+ lmstudio,
61
61
  ollamaNative,
62
62
  anthropicCompat,
63
63
  openaiCompat,