@iowarp/clio-coder 0.4.2 → 0.4.4

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 (523) hide show
  1. package/CHANGELOG.md +98 -0
  2. package/CONTRIBUTING.md +86 -19
  3. package/README.md +35 -6
  4. package/dist/{acp-TMDQZDIG.js → acp-WNAYYF4F.js} +12 -13
  5. package/dist/{agents-5N5NG3XG.js → agents-3OKXHLOI.js} +60 -57
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-Z5CCBXKQ.js → auth-VKNNMGPU.js} +21 -19
  8. package/dist/{builtins-K6TNDT24.js → builtins-WGALA46I.js} +9 -4
  9. package/dist/{chunk-XE3PCIXH.js → chunk-23L32XTI.js} +12 -9
  10. package/dist/{chunk-I64IFBLB.js → chunk-25QBEXRS.js} +18 -11
  11. package/dist/{chunk-CDNVLKUX.js → chunk-26QSH3EJ.js} +13 -7
  12. package/dist/{chunk-QQLGQY2A.js → chunk-2ASED4PZ.js} +22 -22
  13. package/dist/{chunk-MCEPRMZW.js → chunk-2CU2H6KE.js} +2 -2
  14. package/dist/chunk-2DSOYNFC.js +108 -0
  15. package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
  16. package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
  17. package/dist/{chunk-O3YUNJZ2.js → chunk-2ZSONWVL.js} +82 -25
  18. package/dist/{chunk-2NHR3NAY.js → chunk-36CT5VVL.js} +331 -42
  19. package/dist/{chunk-2X4RYJTJ.js → chunk-3GY4F45V.js} +3 -3
  20. package/dist/{chunk-ZW55JB7N.js → chunk-3ODX73FK.js} +4 -6
  21. package/dist/{chunk-PBP4B7XR.js → chunk-3UNOLWNZ.js} +3 -3
  22. package/dist/{chunk-4JDLP6ZS.js → chunk-3UUXNFEX.js} +14 -10
  23. package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
  24. package/dist/{chunk-ZW4HH5JJ.js → chunk-4M6Z5QVF.js} +6 -6
  25. package/dist/{chunk-K6BSR66V.js → chunk-4NSRCOYP.js} +4 -1
  26. package/dist/{chunk-M2DAX4F6.js → chunk-4WR7VSYB.js} +2 -2
  27. package/dist/{chunk-FSP7CMNU.js → chunk-54X7T7DK.js} +61 -6
  28. package/dist/{chunk-54ODD65L.js → chunk-5636DCO5.js} +4 -4
  29. package/dist/chunk-57XXR6DR.js +3763 -0
  30. package/dist/{chunk-3KIPBMUA.js → chunk-5ICU3EUH.js} +2 -2
  31. package/dist/{chunk-77QIVUZB.js → chunk-5MEZN6CB.js} +4 -4
  32. package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
  33. package/dist/{chunk-YJISEZKC.js → chunk-5TUB6SLS.js} +6 -6
  34. package/dist/{chunk-IMXMHHMQ.js → chunk-6OSVSQL5.js} +341 -57
  35. package/dist/{chunk-Q4XWMHX6.js → chunk-6PAZTBPA.js} +14 -2
  36. package/dist/{chunk-FVDGR2ZL.js → chunk-6Q3CYFD3.js} +112 -39
  37. package/dist/{chunk-IDNA72AH.js → chunk-6QOTUPRG.js} +155 -36
  38. package/dist/{chunk-X7IARSHT.js → chunk-6UINWWS6.js} +16 -10
  39. package/dist/{chunk-CYZW7JHJ.js → chunk-72YIHOZQ.js} +9 -9
  40. package/dist/{chunk-IKSLQ4XV.js → chunk-75W7L2E2.js} +752 -861
  41. package/dist/{chunk-CRFOIAX3.js → chunk-7UGL4MB5.js} +6 -6
  42. package/dist/{chunk-HIICAHCJ.js → chunk-AUPNRN7C.js} +2 -2
  43. package/dist/{chunk-7BHIY2MW.js → chunk-BJVFZO5U.js} +8 -50
  44. package/dist/{chunk-B74PXLU7.js → chunk-CUSRQKPU.js} +65 -3
  45. package/dist/chunk-DQOVN6KV.js +386 -0
  46. package/dist/{chunk-E7GT7O5N.js → chunk-DT3LWJOB.js} +7 -4
  47. package/dist/chunk-DXKJURES.js +671 -0
  48. package/dist/{chunk-JBCS7CRR.js → chunk-EL24TAU4.js} +10 -10
  49. package/dist/{chunk-TPEQIQIE.js → chunk-ELWDPP3Y.js} +8 -8
  50. package/dist/{chunk-NDINPTJ4.js → chunk-ELZVTCGV.js} +5 -4
  51. package/dist/chunk-EXLD33WO.js +381 -0
  52. package/dist/chunk-FEAXX7B6.js +101 -0
  53. package/dist/{chunk-RLYRBIYQ.js → chunk-FFUPXJC4.js} +90 -331
  54. package/dist/{chunk-5PFYMY2V.js → chunk-FTMGRKEF.js} +2 -2
  55. package/dist/{chunk-34BHNEE3.js → chunk-GHS5EBTQ.js} +58 -7
  56. package/dist/{chunk-DYHAXKHD.js → chunk-GWZNEVM2.js} +12 -8
  57. package/dist/chunk-GX5WYQO4.js +59 -0
  58. package/dist/chunk-GYV6VZOC.js +26 -0
  59. package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
  60. package/dist/chunk-I2DWJ4GM.js +390 -0
  61. package/dist/{chunk-TXOTCRLG.js → chunk-I5FWO7L5.js} +5 -5
  62. package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
  63. package/dist/{chunk-XQRY4DTA.js → chunk-IGLP3ODT.js} +10 -10
  64. package/dist/chunk-IRXAATOX.js +539 -0
  65. package/dist/chunk-IXIY2H4R.js +44 -0
  66. package/dist/{chunk-SSEYRH53.js → chunk-IZXGRF7P.js} +92 -147
  67. package/dist/{chunk-5TSRNF4G.js → chunk-JCI2ROMZ.js} +164 -6
  68. package/dist/{chunk-JWJGP5DQ.js → chunk-JEIYHLOR.js} +7 -7
  69. package/dist/{chunk-F2I26BDK.js → chunk-JQLNNIKT.js} +4 -4
  70. package/dist/{chunk-BYMNWQ7O.js → chunk-JSD46VO2.js} +315 -63
  71. package/dist/{chunk-AK5XEFVZ.js → chunk-JT2RFCC5.js} +64 -14
  72. package/dist/{chunk-MCMZMDAC.js → chunk-K6T2ZAMZ.js} +168 -6
  73. package/dist/{chunk-PGF63K6I.js → chunk-KFV5L5SK.js} +73 -4
  74. package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
  75. package/dist/{chunk-PJX3WQUQ.js → chunk-LLXSDWXS.js} +3 -3
  76. package/dist/{chunk-DZAW46HP.js → chunk-LTIKRKFL.js} +3 -3
  77. package/dist/{chunk-DZEK6CJN.js → chunk-N56KALIC.js} +21 -21
  78. package/dist/{chunk-B7HM5Z7T.js → chunk-NAI6ZFCY.js} +9 -5
  79. package/dist/{chunk-I66ZTYNP.js → chunk-NRO2BJRH.js} +2656 -2213
  80. package/dist/{chunk-ZGNYYXQ6.js → chunk-NXIMQY5W.js} +3 -3
  81. package/dist/{chunk-IKOZFYBN.js → chunk-NXYCB2VD.js} +149 -106
  82. package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
  83. package/dist/{chunk-462T4EGZ.js → chunk-O5CVSAG5.js} +2 -2
  84. package/dist/chunk-ODGTEFFI.js +50 -0
  85. package/dist/{chunk-3F7VUY77.js → chunk-OEJSLEPW.js} +2 -2
  86. package/dist/{chunk-KKOJXO6R.js → chunk-OMQNJVKW.js} +4 -2
  87. package/dist/{chunk-5KW52TEP.js → chunk-Q4WO54TA.js} +132 -77
  88. package/dist/{chunk-W6NIE6OW.js → chunk-QUFRYSWI.js} +13 -7
  89. package/dist/{chunk-42FMPA75.js → chunk-QZWQA4DE.js} +2 -2
  90. package/dist/chunk-R6Q67RJH.js +134 -0
  91. package/dist/{chunk-W4YEMFBX.js → chunk-RAY4OVGZ.js} +3 -3
  92. package/dist/{chunk-ZNT2M6TG.js → chunk-RQCKCSRL.js} +17 -17
  93. package/dist/{chunk-LJID3DYZ.js → chunk-RXTN6AKH.js} +3 -3
  94. package/dist/{chunk-P75RZCJW.js → chunk-RZDWV63N.js} +3 -3
  95. package/dist/{chunk-UH632ZYL.js → chunk-S6PYF2XF.js} +2 -2
  96. package/dist/{chunk-HJWWJ6IL.js → chunk-TOIVGRUX.js} +17 -5
  97. package/dist/{chunk-HLAFFSEK.js → chunk-TQAHXW6Y.js} +2 -2
  98. package/dist/{chunk-JIEGK6UF.js → chunk-U6TMQNSI.js} +48 -4
  99. package/dist/{chunk-2HFQNRV3.js → chunk-UEPWCCTY.js} +12 -12
  100. package/dist/chunk-UOIZ7DA4.js +41 -0
  101. package/dist/{chunk-UH347SHR.js → chunk-USR47QNF.js} +11 -11
  102. package/dist/{chunk-AZ4WMN4W.js → chunk-V6HJFQZE.js} +2 -2
  103. package/dist/chunk-V76WTFTW.js +318 -0
  104. package/dist/{chunk-NMJXSHBJ.js → chunk-W54I7H25.js} +2 -2
  105. package/dist/{chunk-KPXDY6QF.js → chunk-XRZT5WY5.js} +2 -2
  106. package/dist/{chunk-UBRFI4HS.js → chunk-XULDXHTN.js} +142 -50
  107. package/dist/chunk-XXYSBZIQ.js +283 -0
  108. package/dist/{chunk-HKMD33FO.js → chunk-Y55JBDO5.js} +405 -122
  109. package/dist/{chunk-XOXV5GKE.js → chunk-YD5GIKET.js} +17 -8
  110. package/dist/{chunk-XGDPUNND.js → chunk-YECAMM3D.js} +2 -2
  111. package/dist/{chunk-BO7Y52RY.js → chunk-YNFKXPEC.js} +7 -7
  112. package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
  113. package/dist/{chunk-M2WXEHER.js → chunk-ZA4VCIGV.js} +2 -2
  114. package/dist/cli/index.js +42 -40
  115. package/dist/{clio-7VB377CC.js → clio-QLICPCF5.js} +7 -7
  116. package/dist/{code-nav-YVLCYA7V.js → code-nav-IJR2DBPR.js} +9 -9
  117. package/dist/{components-UBWCQSRW.js → components-2TGAI2RC.js} +5 -6
  118. package/dist/{config-4HVOS65E.js → config-IUA6OYNS.js} +88 -81
  119. package/dist/{configure-PIWO7B24.js → configure-VEPX4NMX.js} +26 -25
  120. package/dist/{context-KQYIWPWT.js → context-2DKHWH2T.js} +60 -45
  121. package/dist/{context-IYEHL3WQ.js → context-4MPR7WKB.js} +78 -69
  122. package/dist/{context-N6ZE3LGJ.js → context-BOYF5EJM.js} +15 -11
  123. package/dist/{context-clear-G4OGZJDS.js → context-clear-S4ZJCQUX.js} +73 -65
  124. package/dist/context-map-COB37XXN.js +505 -0
  125. package/dist/{context-working-set-BWLF6LJP.js → context-working-set-3I3FYX6Y.js} +18 -17
  126. package/dist/detail-A7JAVSIG.js +98 -0
  127. package/dist/{dispatch-runner-2QQAITS3.js → dispatch-runner-RJ5I2F2O.js} +99 -75
  128. package/dist/{docs-PD3EXDKU.js → docs-SPOV3BAN.js} +3 -5
  129. package/dist/{doctor-LHBD36VU.js → doctor-DKICC2SN.js} +71 -48
  130. package/dist/{eval-C45FYRJ6.js → eval-OQOQUDHK.js} +308 -146
  131. package/dist/{eval-inventory-6DEJPLBF.js → eval-inventory-Y6QRFOH5.js} +4 -4
  132. package/dist/{evidence-6SHONYAF.js → evidence-4DQ25GUQ.js} +79 -175
  133. package/dist/evidence-4F5USFKH.js +208 -0
  134. package/dist/{evolve-KRKMV72X.js → evolve-GSS52E5J.js} +71 -67
  135. package/dist/{extensions-KPZ2UHBB.js → extensions-G7MFLYHT.js} +8 -9
  136. package/dist/{fleet-IVTCKDHT.js → fleet-Q37YHHAQ.js} +126 -118
  137. package/dist/{fleet-commands-EDWL3IT7.js → fleet-commands-G7E4N7SM.js} +16 -13
  138. package/dist/{fleet-decisions-YP3YEFGK.js → fleet-decisions-O7M6QBA2.js} +9 -8
  139. package/dist/{fleet-graph-ZFWKHY2M.js → fleet-graph-TOUBW6OW.js} +21 -20
  140. package/dist/{fleet-inspect-FVUNCBML.js → fleet-inspect-SW33JJNI.js} +65 -60
  141. package/dist/{fleet-preflight-UN5XED4R.js → fleet-preflight-CV2655TW.js} +4 -5
  142. package/dist/{fleet-validate-XOWC4HSX.js → fleet-validate-KESZX2YH.js} +25 -24
  143. package/dist/{fleet-verify-UN3SODEL.js → fleet-verify-UQPMTVE3.js} +66 -61
  144. package/dist/{fleet-view-TWHJKCN6.js → fleet-view-MN2VG4MR.js} +65 -60
  145. package/dist/{init-T2QORQ3Y.js → init-PXEXQSBF.js} +90 -82
  146. package/dist/{interop-IN5I2A66.js → interop-ZG5T62U3.js} +12 -13
  147. package/dist/inventory-C26CFDRR.js +101 -0
  148. package/dist/{library-LSCATDLZ.js → library-B2W4N74O.js} +29 -29
  149. package/dist/{memory-HYOKAGGJ.js → memory-YCANYS5A.js} +73 -69
  150. package/dist/{models-2GPMFYCM.js → models-GERTU3YI.js} +51 -47
  151. package/dist/{monitor-E4ASVUJH.js → monitor-CPNIUULB.js} +74 -67
  152. package/dist/{orchestrator-DDMPR3PY.js → orchestrator-J4BSH4WQ.js} +1288 -1606
  153. package/dist/{panes-E3RUXOW5.js → panes-BOHAEGYC.js} +4 -4
  154. package/dist/{panes-IXKLOKA2.js → panes-NXSLDQZ2.js} +10 -11
  155. package/dist/{paths-L7LGY6RN.js → paths-VSUWNC22.js} +6 -7
  156. package/dist/reset-TNWTB5LU.js +343 -0
  157. package/dist/{resources-OTRSN34L.js → resources-4PXNMD5G.js} +29 -22
  158. package/dist/{run-5DEYH5QK.js → run-D6XJ34CN.js} +132 -132
  159. package/dist/{share-IHWTLO3M.js → share-2NWMJJEE.js} +27 -27
  160. package/dist/{skills-IYMXMKW4.js → skills-KR7WON5G.js} +40 -33
  161. package/dist/{skills-eval-DROHSJAR.js → skills-eval-O2ZNOLDS.js} +81 -77
  162. package/dist/{skills-inventory-D7X4L4ZX.js → skills-inventory-ZZOUBK7O.js} +23 -22
  163. package/dist/{slash-commands-QBM7UZ3B.js → slash-commands-ZXPJD64J.js} +47 -37
  164. package/dist/{steer-Z5DO23FJ.js → steer-XA25PSCS.js} +4 -4
  165. package/dist/{support-U7QOWY26.js → support-7EMVWYG2.js} +6 -6
  166. package/dist/{targets-P2FUC4IL.js → targets-OMH2XCSN.js} +50 -49
  167. package/dist/tasks-IPAGMEIX.js +36 -0
  168. package/dist/{terminal-lease-YREJ3JX2.js → terminal-lease-C2J3JYRE.js} +4 -4
  169. package/dist/{tools-5B7RO6MV.js → tools-EFFEAIDP.js} +8 -9
  170. package/dist/{trace-YMGMUM6A.js → trace-FXMXUZUF.js} +7 -7
  171. package/dist/uninstall-HALS6BLF.js +407 -0
  172. package/dist/upgrade-MS72RJEP.js +306 -0
  173. package/dist/{usage-ME5MPXGX.js → usage-NHG6MCJM.js} +162 -108
  174. package/dist/{verifiers-BVZ7IWOO.js → verifiers-7AUNVXDY.js} +155 -22
  175. package/dist/{verify-5K7ZKQFC.js → verify-FWYGPKMR.js} +14 -12
  176. package/dist/{web-fetch-MPARV2K7.js → web-fetch-V4FKSDAV.js} +4 -4
  177. package/dist/{wiki-generate-F5W5QTYY.js → wiki-generate-743CIGJW.js} +99 -90
  178. package/dist/{with-panes-BYOJCLAM.js → with-panes-BDQEWBRT.js} +10 -10
  179. package/dist/worker/entry.js +72 -68
  180. package/docs/README.md +3 -2
  181. package/docs/architecture/acp.md +17 -0
  182. package/docs/architecture/artifact-placement.md +1 -0
  183. package/docs/architecture/artifact-versions.md +2 -2
  184. package/docs/architecture/context-engine.md +4 -0
  185. package/docs/architecture/dispatch-typed-intent.md +1 -1
  186. package/docs/architecture/evidence-and-memory.md +1 -1
  187. package/docs/architecture/middleware-and-components.md +1 -1
  188. package/docs/architecture/model-catalog.md +21 -10
  189. package/docs/architecture/observability.md +19 -2
  190. package/docs/architecture/prompt-envelope-and-tools.md +17 -5
  191. package/docs/architecture/provider-adapter-cookbook.md +63 -0
  192. package/docs/architecture/safety-model.md +25 -22
  193. package/docs/architecture/tui-design.md +1 -1
  194. package/docs/guide/built-in-agents.md +25 -11
  195. package/docs/guide/commands-and-modes.md +18 -3
  196. package/docs/guide/configuration-and-targets.md +100 -10
  197. package/docs/guide/configuration-reference.md +17 -7
  198. package/docs/guide/environment-variables.md +4 -2
  199. package/docs/guide/installation-and-lifecycle.md +37 -4
  200. package/docs/guide/proactive-memory.md +66 -55
  201. package/docs/guide/skills-marketplace.md +18 -0
  202. package/docs/guide/tool-usage.md +78 -3
  203. package/docs/history/config-knobs-audit.md +2 -2
  204. package/docs/process/development-pipeline.md +40 -2
  205. package/docs/process/eval-runner.md +67 -3
  206. package/docs/process/git-commit-provenance.md +15 -0
  207. package/docs/process/release-cut-checklist.md +207 -0
  208. package/docs/process/scientific-validation.md +18 -17
  209. package/evals/behavioral-machinery-support.ts +1 -0
  210. package/evals/behavioral-machinery.yaml +1 -1
  211. package/evals/behavioral-model.yaml +3 -2
  212. package/package.json +2 -2
  213. package/skills/README.md +7 -5
  214. package/skills/coding/ast-grep/SKILL.md +101 -30
  215. package/skills/coding/ast-grep/evals.md +26 -0
  216. package/skills/coding/coding-standards/SKILL.md +47 -2
  217. package/skills/coding/coding-standards/evals.md +23 -0
  218. package/skills/coding/prototype/SKILL.md +87 -28
  219. package/skills/coding/prototype/evals.md +19 -0
  220. package/skills/coding/tdd/SKILL.md +80 -53
  221. package/skills/coding/tdd/evals.md +20 -0
  222. package/skills/context/context-handoff/SKILL.md +43 -2
  223. package/skills/context/context-handoff/evals.md +44 -0
  224. package/skills/context/context-prime/SKILL.md +45 -15
  225. package/skills/context/context-prime/evals.md +45 -0
  226. package/skills/git/branch-closeout/SKILL.md +132 -0
  227. package/skills/git/branch-closeout/evals.md +133 -0
  228. package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
  229. package/skills/git/file-ticket/SKILL.md +77 -63
  230. package/skills/git/file-ticket/assets/issue-template.md +22 -0
  231. package/skills/git/file-ticket/evals.md +31 -26
  232. package/skills/git/file-ticket/references/issue-discovery.md +49 -0
  233. package/skills/git/fix-issue/SKILL.md +87 -64
  234. package/skills/git/fix-issue/evals.md +35 -31
  235. package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
  236. package/skills/git/resolve-merge-conflicts/SKILL.md +100 -51
  237. package/skills/git/resolve-merge-conflicts/evals.md +52 -25
  238. package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
  239. package/skills/git/ship/SKILL.md +103 -67
  240. package/skills/git/ship/assets/pr-template.md +21 -0
  241. package/skills/git/ship/evals.md +44 -28
  242. package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
  243. package/skills/git/worktree-create/SKILL.md +80 -50
  244. package/skills/git/worktree-create/evals.md +40 -33
  245. package/skills/git/worktree-create/references/worktree-setup.md +62 -66
  246. package/skills/git/worktree-merge/SKILL.md +112 -65
  247. package/skills/git/worktree-merge/evals.md +42 -34
  248. package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
  249. package/skills/planning/archify/SKILL.md +196 -0
  250. package/skills/planning/archify/evals.md +65 -0
  251. package/skills/planning/architecture/SKILL.md +61 -12
  252. package/skills/planning/architecture/evals.md +65 -0
  253. package/skills/planning/backlog/SKILL.md +130 -14
  254. package/skills/planning/backlog/evals.md +142 -0
  255. package/skills/planning/prd/SKILL.md +47 -6
  256. package/skills/planning/prd/evals.md +54 -0
  257. package/skills/planning/product-intent/SKILL.md +57 -2
  258. package/skills/planning/product-intent/evals.md +70 -0
  259. package/skills/planning/tech-spec/SKILL.md +53 -2
  260. package/skills/planning/tech-spec/evals.md +73 -0
  261. package/skills/registry.yaml +58 -50
  262. package/skills/remote.yaml +13 -0
  263. package/skills/research/arxiv-literature/SKILL.md +76 -18
  264. package/skills/research/arxiv-literature/evals.md +50 -0
  265. package/skills/research/experiment-protocol/SKILL.md +20 -1
  266. package/skills/research/experiment-protocol/evals.md +23 -0
  267. package/skills/research/scientific-debugging/SKILL.md +24 -1
  268. package/skills/research/scientific-debugging/evals.md +18 -0
  269. package/skills/research/scientific-modernization/SKILL.md +26 -1
  270. package/skills/research/scientific-modernization/evals.md +27 -0
  271. package/skills/skill-marketplace.json +63 -28
  272. package/skills/workflow/cut-it/SKILL.md +64 -5
  273. package/skills/workflow/cut-it/evals.md +101 -0
  274. package/skills/workflow/design-council/SKILL.md +112 -27
  275. package/skills/workflow/design-council/evals.md +161 -0
  276. package/skills/workflow/grill-me/SKILL.md +85 -10
  277. package/skills/workflow/grill-me/evals.md +153 -0
  278. package/skills/workflow/workflow-distiller/SKILL.md +76 -17
  279. package/skills/workflow/workflow-distiller/evals.md +118 -0
  280. package/src/cli/args.ts +0 -8
  281. package/src/cli/configure-interop.ts +105 -13
  282. package/src/cli/configure-oauth.ts +57 -0
  283. package/src/cli/configure-onboarding.ts +980 -0
  284. package/src/cli/configure-target.ts +594 -0
  285. package/src/cli/configure.ts +1084 -529
  286. package/src/cli/context-map.ts +114 -0
  287. package/src/cli/context.ts +4 -0
  288. package/src/cli/doctor-state-size.ts +1 -12
  289. package/src/cli/doctor-validation-contract.ts +28 -0
  290. package/src/cli/doctor.ts +5 -0
  291. package/src/cli/evidence-detail.ts +1 -75
  292. package/src/cli/evidence-inventory.ts +1 -167
  293. package/src/cli/index.ts +3 -0
  294. package/src/cli/lifecycle-presenter.ts +436 -0
  295. package/src/cli/models.ts +10 -2
  296. package/src/cli/modes/print.ts +5 -1
  297. package/src/cli/reset.ts +228 -106
  298. package/src/cli/run.ts +7 -4
  299. package/src/cli/select.ts +664 -0
  300. package/src/cli/skills.ts +9 -2
  301. package/src/cli/targets.ts +3 -0
  302. package/src/cli/tasks.ts +84 -0
  303. package/src/cli/uninstall.ts +233 -165
  304. package/src/cli/upgrade.ts +210 -150
  305. package/src/cli/usage.ts +92 -27
  306. package/src/cli/validate-model.ts +3 -3
  307. package/src/cli/verifiers.ts +147 -1
  308. package/src/cli/wiki-generate.ts +1 -0
  309. package/src/core/commit-attribution.ts +41 -1
  310. package/src/core/config.ts +56 -0
  311. package/src/core/external-diagnostic.ts +44 -0
  312. package/src/core/gateway-routing.ts +157 -0
  313. package/src/core/git-commit-attribution.ts +46 -3
  314. package/src/core/run-overrides.ts +0 -5
  315. package/src/core/safe-exec.ts +17 -2
  316. package/src/core/skill-activation.ts +92 -2
  317. package/src/core/tool-names.ts +5 -2
  318. package/src/domains/agents/builtins/architect.md +1 -1
  319. package/src/domains/agents/builtins/coder.md +1 -1
  320. package/src/domains/agents/builtins/documenter.md +1 -1
  321. package/src/domains/agents/builtins/git-master.md +1 -1
  322. package/src/domains/agents/builtins/provenance.md +7 -7
  323. package/src/domains/agents/builtins/tester.md +1 -1
  324. package/src/domains/agents/builtins/verifier.md +2 -2
  325. package/src/domains/agents/builtins/wiki-writer.md +4 -3
  326. package/src/domains/agents/builtins/world-knowledge.md +31 -0
  327. package/src/domains/agents/catalog.ts +1 -1
  328. package/src/domains/agents/result-contract.ts +70 -0
  329. package/src/domains/context/extension.ts +31 -7
  330. package/src/domains/context/refresh.ts +3 -0
  331. package/src/domains/context/wiki/frontmatter.ts +5 -2
  332. package/src/domains/context/wiki/generate.ts +6 -0
  333. package/src/domains/context/wiki/map-seed.ts +589 -0
  334. package/src/domains/context/wiki/plan.ts +2 -2
  335. package/src/domains/context/wiki/prompts.ts +43 -0
  336. package/src/domains/dispatch/active-route-planner.ts +4 -0
  337. package/src/domains/dispatch/admission.ts +29 -0
  338. package/src/domains/dispatch/agent-candidates.ts +10 -0
  339. package/src/domains/dispatch/budget-envelope.ts +86 -1
  340. package/src/domains/dispatch/capability-match.ts +1 -0
  341. package/src/domains/dispatch/capacity-lease.ts +17 -0
  342. package/src/domains/dispatch/code-step.ts +11 -4
  343. package/src/domains/dispatch/contract.ts +42 -8
  344. package/src/domains/dispatch/execution-scheduler.ts +2 -0
  345. package/src/domains/dispatch/extension.ts +184 -56
  346. package/src/domains/dispatch/fleet-commit-attribution.ts +5 -0
  347. package/src/domains/dispatch/fleet-run.ts +1 -0
  348. package/src/domains/dispatch/host-verification.ts +114 -13
  349. package/src/domains/dispatch/intent.ts +28 -18
  350. package/src/domains/dispatch/orphan-recovery.ts +2 -0
  351. package/src/domains/dispatch/receipt-integrity.ts +4 -0
  352. package/src/domains/dispatch/reservation-store.ts +5 -3
  353. package/src/domains/dispatch/state.ts +15 -2
  354. package/src/domains/dispatch/types.ts +20 -2
  355. package/src/domains/dispatch/worker-model-metadata.ts +38 -0
  356. package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
  357. package/src/domains/eval/metrics/token-stream.ts +201 -31
  358. package/src/domains/eval/metrics/tracked.ts +40 -4
  359. package/src/domains/eval/runners/clio-run.ts +17 -11
  360. package/src/domains/eval/runners/context-index.ts +2 -7
  361. package/src/domains/eval/runners/context-init.ts +3 -6
  362. package/src/domains/eval/runners/external-command.ts +29 -11
  363. package/src/domains/eval/schema/suite.ts +28 -0
  364. package/src/domains/eval/schema/verdict.ts +2 -2
  365. package/src/domains/eval/suites/resolve.ts +13 -1
  366. package/src/domains/eval/suites/run.ts +24 -3
  367. package/src/domains/evidence/build.ts +102 -15
  368. package/src/domains/evidence/detail.ts +69 -0
  369. package/src/domains/evidence/eval.ts +13 -1
  370. package/src/domains/evidence/finish-contract-map.ts +5 -1
  371. package/src/domains/evidence/inventory.ts +167 -0
  372. package/src/domains/evidence/store.ts +16 -0
  373. package/src/domains/evidence/types.ts +12 -0
  374. package/src/domains/extensions/resources.ts +7 -0
  375. package/src/domains/interop/registry.ts +6 -2
  376. package/src/domains/interop/types.ts +4 -0
  377. package/src/domains/lifecycle/migrations/index.ts +4 -0
  378. package/src/domains/memory/task-memory-policy.ts +70 -26
  379. package/src/domains/memory/task-memory-telemetry.ts +1 -0
  380. package/src/domains/middleware/index.ts +0 -1
  381. package/src/domains/middleware/marketplace-offer.ts +22 -35
  382. package/src/domains/middleware/memory-intervention.ts +127 -32
  383. package/src/domains/middleware/memory-step-endpoint.ts +3 -2
  384. package/src/domains/middleware/runtime.ts +7 -3
  385. package/src/domains/middleware/skills-reminder.ts +31 -2
  386. package/src/domains/mux/detect.ts +3 -6
  387. package/src/domains/observability/accountability.ts +15 -1
  388. package/src/domains/observability/compaction-usage.ts +118 -0
  389. package/src/domains/observability/contract.ts +52 -7
  390. package/src/domains/observability/cost.ts +1 -1
  391. package/src/domains/observability/evidence-index.ts +10 -0
  392. package/src/domains/observability/extension.ts +15 -6
  393. package/src/domains/observability/out-of-turn-usage.ts +52 -21
  394. package/src/domains/observability/projection.ts +394 -45
  395. package/src/{interactive → domains/observability}/worker-progress.ts +3 -3
  396. package/src/domains/prompts/fragments/operating/contract.md +2 -0
  397. package/src/domains/prompts/fragments/wiki/page.md +8 -0
  398. package/src/domains/providers/contract.ts +4 -1
  399. package/src/domains/providers/extension.ts +40 -9
  400. package/src/domains/providers/model-capabilities.ts +9 -0
  401. package/src/domains/providers/model-discovery.ts +3 -4
  402. package/src/domains/providers/model-runtime-capabilities.ts +15 -5
  403. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +48 -26
  404. package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
  405. package/src/domains/providers/runtimes/claude/claude-code.ts +9 -0
  406. package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
  407. package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
  408. package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
  409. package/src/domains/providers/support.ts +11 -5
  410. package/src/domains/providers/target-model-cache.ts +25 -2
  411. package/src/domains/providers/types/capability-flags.ts +2 -0
  412. package/src/domains/providers/types/runtime-descriptor.ts +20 -1
  413. package/src/domains/providers/types/target-descriptor.ts +19 -0
  414. package/src/domains/resources/index.ts +3 -0
  415. package/src/domains/resources/skills/install.ts +72 -7
  416. package/src/domains/resources/skills/loader.ts +7 -0
  417. package/src/domains/resources/skills/marketplace.ts +63 -11
  418. package/src/domains/safety/action-classifier.ts +7 -0
  419. package/src/domains/safety/autonomy.ts +15 -0
  420. package/src/domains/safety/default-path-policy.ts +2 -0
  421. package/src/domains/safety/finish-contract-registration.ts +29 -14
  422. package/src/domains/safety/finish-contract.ts +252 -40
  423. package/src/domains/safety/index.ts +21 -1
  424. package/src/domains/safety/path-policy.ts +1 -1
  425. package/src/domains/safety/policy-engine.ts +60 -17
  426. package/src/domains/safety/protected-artifacts.ts +191 -88
  427. package/src/domains/safety/rigor.ts +53 -39
  428. package/src/domains/safety/run-effects.ts +2 -22
  429. package/src/domains/safety/skill-authority.ts +55 -0
  430. package/src/domains/safety/validation-contract.ts +388 -0
  431. package/src/domains/session/archive-readers.ts +10 -1
  432. package/src/domains/session/compaction/compact.ts +72 -22
  433. package/src/domains/session/decision-board.ts +101 -2
  434. package/src/domains/session/entries.ts +50 -7
  435. package/src/domains/session/extension.ts +4 -4
  436. package/src/domains/session/handoff.ts +2 -1
  437. package/src/domains/session/manager.ts +2 -3
  438. package/src/domains/session/task-board.ts +14 -1
  439. package/src/domains/session/tree/fork.ts +1 -2
  440. package/src/domains/session/tree/navigator.ts +1 -1
  441. package/src/domains/session/usage.ts +3 -3
  442. package/src/domains/user-tasks/acceptance.ts +56 -0
  443. package/src/domains/user-tasks/active-acceptance.ts +40 -0
  444. package/src/domains/user-tasks/store.ts +34 -3
  445. package/src/engine/acp/adapter.ts +24 -6
  446. package/src/engine/acp/server.ts +21 -4
  447. package/src/engine/acp/transport.ts +53 -8
  448. package/src/engine/acp/types.ts +4 -0
  449. package/src/engine/agent.ts +13 -3
  450. package/src/engine/ai.ts +26 -8
  451. package/src/engine/antigravity/subprocess-runtime.ts +386 -120
  452. package/src/engine/api-registry.ts +3 -0
  453. package/src/engine/apis/ollama-native.ts +15 -0
  454. package/src/engine/apis/openai-completions.ts +117 -14
  455. package/src/engine/claude/subprocess-runtime.ts +107 -60
  456. package/src/engine/external-subprocess.ts +122 -6
  457. package/src/entry/background-model-metadata.ts +18 -0
  458. package/src/entry/compaction-prompt.ts +57 -0
  459. package/src/entry/orchestrator.ts +416 -218
  460. package/src/entry/task-memory-lifecycle.ts +35 -0
  461. package/src/interactive/chat-loop-messages.ts +13 -4
  462. package/src/interactive/chat-loop.ts +65 -2
  463. package/src/interactive/chat-renderer.ts +1 -0
  464. package/src/interactive/cost-overlay.ts +26 -2
  465. package/src/interactive/dispatch-board.ts +46 -717
  466. package/src/interactive/fleet-run-preview.ts +2 -1
  467. package/src/interactive/interactive-application.ts +3 -2
  468. package/src/interactive/interactive-presentation.ts +55 -12
  469. package/src/interactive/interactive-slash-runtime.ts +4 -2
  470. package/src/interactive/oracle.ts +5 -2
  471. package/src/interactive/overlays/fleet-run-approval.ts +3 -2
  472. package/src/interactive/overlays/message-picker.ts +2 -2
  473. package/src/interactive/overlays/settings.ts +2 -2
  474. package/src/interactive/overlays/tree-selector.ts +2 -2
  475. package/src/interactive/renderers/branch-summary.ts +1 -1
  476. package/src/interactive/renderers/worker-entry.ts +32 -0
  477. package/src/interactive/slash-autocomplete.ts +4 -6
  478. package/src/interactive/slash-commands.ts +49 -45
  479. package/src/interactive/slash-spec.ts +28 -0
  480. package/src/interactive/theme/labels.ts +19 -13
  481. package/src/interactive/turn-context.ts +9 -5
  482. package/src/interactive/turn-recovery.ts +8 -0
  483. package/src/interactive/turn-runtime.ts +27 -11
  484. package/src/interactive/turn-state.ts +7 -0
  485. package/src/interactive/view/artifacts.ts +2 -0
  486. package/src/interactive/worker-receipts.ts +1 -0
  487. package/src/interactive/worker-stream.ts +13 -4
  488. package/src/tools/bootstrap.ts +4 -0
  489. package/src/tools/builtin-tool-catalog.ts +31 -0
  490. package/src/tools/compete-worktrees.ts +7 -1
  491. package/src/tools/context/index.ts +30 -9
  492. package/src/tools/core-bootstrap.ts +16 -0
  493. package/src/tools/decide.ts +136 -0
  494. package/src/tools/dispatch-admission.ts +21 -0
  495. package/src/tools/dispatch-arguments.ts +1 -0
  496. package/src/tools/dispatch-event-text.ts +10 -0
  497. package/src/tools/dispatch-plan.ts +6 -2
  498. package/src/tools/dispatch-runner.ts +27 -1
  499. package/src/tools/dispatch-types.ts +6 -0
  500. package/src/tools/evidence.ts +96 -0
  501. package/src/tools/limitation.ts +76 -0
  502. package/src/tools/policy.ts +9 -0
  503. package/src/tools/presentation.ts +3 -0
  504. package/src/tools/registry.ts +11 -5
  505. package/src/tools/result-shaping.ts +17 -5
  506. package/src/tools/task-worktree.ts +13 -3
  507. package/src/tools/tasks.ts +10 -1
  508. package/src/tools/verify/authoring.ts +170 -83
  509. package/src/tools/verify/catalog.ts +122 -5
  510. package/src/tools/verify/index.ts +2 -1
  511. package/src/tools/verify/numeric.ts +298 -0
  512. package/src/tools/verify/perf.ts +143 -0
  513. package/src/tools/verify/scripts.ts +229 -2
  514. package/src/tools/worker-evidence.ts +3 -1
  515. package/src/worker/spec-contract.ts +4 -0
  516. package/dist/chunk-2Z2IKEXI.js +0 -1554
  517. package/dist/chunk-RVG5JXAL.js +0 -41
  518. package/dist/chunk-T56WDKA5.js +0 -183
  519. package/dist/chunk-VN3SHNBN.js +0 -313
  520. package/dist/chunk-VPKWYKEY.js +0 -169
  521. package/dist/reset-OAQP3W4O.js +0 -230
  522. package/dist/uninstall-N34PCTGJ.js +0 -331
  523. package/dist/upgrade-PXK3S2YM.js +0 -325
@@ -156,6 +156,7 @@ function sameProbeIdentity(previous: TargetDescriptor, next: TargetDescriptor):
156
156
 
157
157
  export interface ProbeMerge {
158
158
  discoveredModels: string[];
159
+ discoveredModelLabels: Readonly<Record<string, string>>;
159
160
  discoveredModelsSource: "probe" | "cache" | "runtime" | "none";
160
161
  discoveredModelStates: NonNullable<TargetStatus["discoveredModelStates"]> | null;
161
162
  probeCapabilities: NonNullable<TargetStatus["probeCapabilities"]> | null;
@@ -179,6 +180,7 @@ function mergeProbeResult(
179
180
  probe: ProbeResult | null,
180
181
  previous: TargetStatus | undefined,
181
182
  cachedModels: ReadonlyArray<string> = [],
183
+ cachedModelLabels: Readonly<Record<string, string>> = {},
182
184
  ): ProbeMerge {
183
185
  const probeSucceeded = probe?.ok ?? false;
184
186
  const preservePrevious = !probeSucceeded && previous !== undefined && sameProbeIdentity(previous.target, target);
@@ -201,8 +203,14 @@ function mergeProbeResult(
201
203
  [],
202
204
  );
203
205
  const discoveredModelStates = probe?.modelStates ?? (preservePrevious ? previous.discoveredModelStates : null) ?? null;
206
+ const discoveredModelLabels =
207
+ probe?.modelLabels ??
208
+ (preservePrevious ? previous.discoveredModelLabels : undefined) ??
209
+ (cachedModels.length > 0 ? cachedModelLabels : undefined) ??
210
+ {};
204
211
  const merge: ProbeMerge = {
205
212
  discoveredModels,
213
+ discoveredModelLabels,
206
214
  discoveredModelsSource: discoveredModelsSource(probe, preservePrevious, previous, cachedModels, desc),
207
215
  discoveredModelStates,
208
216
  probeCapabilities,
@@ -225,14 +233,16 @@ function mergeProbeResult(
225
233
  * there is no live evidence either way.
226
234
  */
227
235
  function unservedDefaultModelReason(
228
- desc: Pick<RuntimeDescriptor, "id">,
236
+ desc: Pick<RuntimeDescriptor, "id" | "externalAgentLoop">,
229
237
  target: Pick<TargetDescriptor, "defaultModel">,
230
238
  merge: Pick<ProbeMerge, "discoveredModels" | "discoveredModelsSource" | "discoveredModelStates">,
231
239
  ): string | null {
232
240
  const model = target.defaultModel;
233
241
  if (!model) return null;
234
242
  if (merge.discoveredModelsSource !== "probe" || merge.discoveredModels.length === 0) return null;
235
- if (listKnownModelsForRuntime(desc.id).length > 0) return null;
243
+ if (listKnownModelsForRuntime(desc.id).length > 0 && desc.externalAgentLoop?.modelCatalog !== "live-authoritative") {
244
+ return null;
245
+ }
236
246
  if (merge.discoveredModels.includes(model)) return null;
237
247
  // LM Studio lists a loaded model under its instance id and keeps the model
238
248
  // key in the state map; the request path resolves either.
@@ -258,14 +268,22 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
258
268
  return readSettings();
259
269
  }
260
270
 
261
- async function buildProbeContextForTarget(target: TargetDescriptor, desc: RuntimeDescriptor): Promise<ProbeContext> {
271
+ async function buildProbeContextForTarget(
272
+ target: TargetDescriptor,
273
+ desc: RuntimeDescriptor,
274
+ signal?: AbortSignal,
275
+ ): Promise<ProbeContext> {
262
276
  const probeCtx: ProbeContext = {
263
277
  credentialsPresent: credentialsPresent(),
264
278
  httpTimeoutMs: DEFAULT_PROBE_TIMEOUT_MS,
279
+ ...(signal ? { signal } : {}),
265
280
  };
266
281
  if (!targetRequiresAuth(target, desc)) return probeCtx;
267
282
  try {
268
- const resolution = await authStore.resolveForTarget(resolveAuthTarget(target, desc), { includeFallback: false });
283
+ const resolution = await authStore.resolveForTarget(resolveAuthTarget(target, desc), {
284
+ includeFallback: false,
285
+ ...(signal ? { signal } : {}),
286
+ });
269
287
  if (resolution.apiKey) probeCtx.authToken = resolution.apiKey;
270
288
  } catch {
271
289
  // Authenticated probes should still return a runtime-specific missing-auth error.
@@ -325,8 +343,9 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
325
343
  return out;
326
344
  }
327
345
  const availability = availabilityFor(desc, target, authStatusFor);
328
- const cachedModels = readTargetModelSnapshot(target)?.models ?? [];
329
- const merge = mergeProbeResult(desc, target, probe, previous, cachedModels);
346
+ const cachedSnapshot = readTargetModelSnapshot(target);
347
+ const cachedModels = cachedSnapshot?.models ?? [];
348
+ const merge = mergeProbeResult(desc, target, probe, previous, cachedModels, cachedSnapshot?.modelLabels ?? {});
330
349
  const { capabilities, contextWindowProvenance } = capabilitiesFor(desc, target, merge, kb);
331
350
  const healthy = probe !== null ? probe.ok : null;
332
351
  const unservedDefault = probe?.ok ? unservedDefaultModelReason(desc, target, merge) : null;
@@ -353,6 +372,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
353
372
  probeModelCapabilities: merge.probeModelCapabilities,
354
373
  probeModelId: merge.probeModelId,
355
374
  discoveredModels: merge.discoveredModels,
375
+ discoveredModelLabels: merge.discoveredModelLabels,
356
376
  discoveredModelsSource: merge.discoveredModelsSource,
357
377
  discoveredModelStates: merge.discoveredModelStates,
358
378
  };
@@ -364,8 +384,9 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
364
384
  async function probeTargetInternal(
365
385
  target: TargetDescriptor,
366
386
  live: boolean,
367
- options?: { reasoning?: boolean },
387
+ options?: { reasoning?: boolean; signal?: AbortSignal },
368
388
  ): Promise<TargetStatus> {
389
+ options?.signal?.throwIfAborted();
369
390
  const previous = statuses.get(target.id);
370
391
  const desc = registry.get(target.runtime);
371
392
  if (!desc) {
@@ -379,13 +400,15 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
379
400
  statuses.set(target.id, status);
380
401
  return status;
381
402
  }
382
- const probeCtx = await buildProbeContextForTarget(target, desc);
403
+ const probeCtx = await buildProbeContextForTarget(target, desc, options?.signal);
404
+ options?.signal?.throwIfAborted();
383
405
  let probeResult: ProbeResult;
384
406
  try {
385
407
  probeResult = await desc.probe(target, probeCtx);
386
408
  } catch (err) {
387
409
  probeResult = { ok: false, error: err instanceof Error ? err.message : String(err) };
388
410
  }
411
+ options?.signal?.throwIfAborted();
389
412
  if (probeResult.ok && typeof desc.probeModels === "function" && !probeResult.models) {
390
413
  try {
391
414
  const ids = await desc.probeModels(target, probeCtx);
@@ -394,6 +417,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
394
417
  // model discovery is best-effort; keep probe as-is.
395
418
  }
396
419
  }
420
+ options?.signal?.throwIfAborted();
397
421
  if (probeResult.ok && options?.reasoning !== false && typeof desc.probeReasoning === "function") {
398
422
  const settings = readConfig();
399
423
  const orchestratorTarget = settings.chat.target === target.id ? settings.chat.model : null;
@@ -401,6 +425,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
401
425
  if (candidateModelId) {
402
426
  try {
403
427
  const result = await desc.probeReasoning(target, candidateModelId, probeCtx);
428
+ options?.signal?.throwIfAborted();
404
429
  reasoningCache.set(reasoningCacheKey(target.id, candidateModelId), result.reasoning);
405
430
  const capabilityModelId = probeResult.capabilityModelId ?? null;
406
431
  if (capabilityModelId === null || capabilityModelId === candidateModelId) {
@@ -422,10 +447,16 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
422
447
  }
423
448
  }
424
449
  }
450
+ // A cancelled role preparation must not publish failed/stale target state.
451
+ options?.signal?.throwIfAborted();
425
452
  const status = buildStatus(target, desc, probeResult, previous);
426
453
  statuses.set(target.id, status);
427
454
  if (probeResult.ok && probeResult.models !== undefined) {
428
- recordTargetModelSnapshot(target, probeResult.models);
455
+ recordTargetModelSnapshot(
456
+ target,
457
+ probeResult.models,
458
+ probeResult.modelLabels ? { modelLabels: probeResult.modelLabels } : {},
459
+ );
429
460
  }
430
461
  // Durable so the next process resolves this endpoint's real slot count
431
462
  // instead of the conservative default. Fire and forget: the probe's answer
@@ -14,6 +14,7 @@ export interface ModelCapabilityPatchTarget {
14
14
  contextWindow?: number;
15
15
  maxTokens?: number;
16
16
  reasoning?: boolean;
17
+ clioCoder?: Record<string, unknown>;
17
18
  }
18
19
 
19
20
  /**
@@ -30,6 +31,14 @@ export function applyModelCapabilityPatch<T extends ModelCapabilityPatchTarget>(
30
31
  if (typeof caps.contextWindow === "number") model.contextWindow = caps.contextWindow;
31
32
  if (typeof caps.maxTokens === "number") model.maxTokens = caps.maxTokens;
32
33
  if (typeof caps.reasoning === "boolean") model.reasoning = caps.reasoning;
34
+ // Refresh the probe-only control hint together with the capability snapshot.
35
+ // Missing metadata after a later probe must not retain an earlier route claim.
36
+ if (model.clioCoder || caps.thinkingControlRuntime !== undefined) {
37
+ const metadata = { ...model.clioCoder };
38
+ delete metadata.thinkingControlRuntime;
39
+ if (caps.thinkingControlRuntime !== undefined) metadata.thinkingControlRuntime = caps.thinkingControlRuntime;
40
+ model.clioCoder = metadata;
41
+ }
33
42
  return model;
34
43
  }
35
44
 
@@ -6,6 +6,7 @@ export type ProviderModelSource = "configured" | "live" | "catalog" | "default";
6
6
 
7
7
  export interface ProviderModelCandidate {
8
8
  id: string;
9
+ label?: string;
9
10
  source: ProviderModelSource;
10
11
  loadState?: string;
11
12
  loadStateDetail?: string;
@@ -75,10 +76,7 @@ export function modelResidencyForStatus(status: DiscoveryStatus | null | undefin
75
76
  }
76
77
 
77
78
  export function hasLiveModelCatalog(status: TargetStatus): boolean {
78
- if (status.discoveredModelsSource === "probe" || status.discoveredModelsSource === "cache") return true;
79
- // Unit-test and plugin mocks from before `discoveredModelsSource` still use
80
- // `discoveredModels` to mean "this came from discovery".
81
- return status.discoveredModelsSource === undefined && status.discoveredModels.length > 0;
79
+ return status.discoveredModelsSource === "probe" || status.discoveredModelsSource === "cache";
82
80
  }
83
81
 
84
82
  /**
@@ -100,6 +98,7 @@ export function modelCandidatesForStatus(status: TargetStatus): ProviderModelCan
100
98
  const state = status.discoveredModelStates?.[trimmed];
101
99
  out.push({
102
100
  id: trimmed,
101
+ ...(status.discoveredModelLabels?.[trimmed] ? { label: status.discoveredModelLabels[trimmed] } : {}),
103
102
  source,
104
103
  ...(state ? { loadState: state.state } : {}),
105
104
  ...(state?.detail ? { loadStateDetail: state.detail } : {}),
@@ -131,6 +131,7 @@ interface ClioRuntimeMetadata {
131
131
  lifecycle?: "user-managed" | "clio-coder-managed";
132
132
  gateway?: boolean;
133
133
  family?: string;
134
+ thinkingControlRuntime?: CapabilityFlags["thinkingControlRuntime"];
134
135
  quirks?: LocalModelQuirks;
135
136
  };
136
137
  /** Released in-memory metadata name accepted at plugin/runtime read boundaries. */
@@ -140,6 +141,7 @@ interface ClioRuntimeMetadata {
140
141
  lifecycle?: "user-managed" | "clio-coder-managed";
141
142
  gateway?: boolean;
142
143
  family?: string;
144
+ thinkingControlRuntime?: CapabilityFlags["thinkingControlRuntime"];
143
145
  quirks?: LocalModelQuirks;
144
146
  };
145
147
  compat?: {
@@ -381,9 +383,10 @@ export function effectiveThinkingLevel(
381
383
  const fallback = available[0] ?? "off";
382
384
  if (!configured) return fallback;
383
385
  if (available.includes(configured)) return configured;
384
- // Catalog effort maps intentionally stop at xhigh; `max` must clamp to that
385
- // supported ceiling instead of falling through to the generic low fallback.
386
- if (configured === "max" && available.includes("xhigh")) return "xhigh";
386
+ // A family with xhigh but no high keeps the released high alias at its
387
+ // supported ceiling; neither high nor max may fall through to low.
388
+ if ((configured === "max" || (configured === "high" && !available.includes("high"))) && available.includes("xhigh"))
389
+ return "xhigh";
387
390
  if ((configured === "high" || configured === "xhigh" || configured === "max") && available.includes("high")) {
388
391
  return "high";
389
392
  }
@@ -553,7 +556,7 @@ function resolveThinkingCapability(
553
556
  */
554
557
  const REASONING_EFFORT_ONLY_RUNTIMES: ReadonlySet<string> = new Set(["lmstudio"]);
555
558
 
556
- /** `none` is LM Studio's documented off value; on-off models have no finer dial than `low`. */
559
+ /** `none` is the observed LM Studio HTTP off value; on-off models have no finer dial than `low`. */
557
560
  function onOffReasoningEffort(thinkingActive: boolean): string {
558
561
  return thinkingActive ? "low" : "none";
559
562
  }
@@ -647,7 +650,12 @@ export function resolveModelRuntimeCapabilities(
647
650
  family,
648
651
  capabilities: input.capabilities,
649
652
  thinking,
650
- request: resolveRequestCapability(thinking, parser, input.runtimeId, quirks),
653
+ request: resolveRequestCapability(
654
+ thinking,
655
+ parser,
656
+ input.runtimeId === "litellm" ? (input.capabilities.thinkingControlRuntime ?? input.runtimeId) : input.runtimeId,
657
+ quirks,
658
+ ),
651
659
  response: {
652
660
  parser,
653
661
  stripTokenizerSentinels: true,
@@ -735,6 +743,7 @@ function thinkingFormatFromModelApi(api: Api): CapabilityFlags["thinkingFormat"]
735
743
 
736
744
  function capabilitiesFromModel(model: Model<Api> & ClioRuntimeMetadata): CapabilityFlags {
737
745
  const format = model.compat?.thinkingFormat ?? thinkingFormatFromModelApi(model.api);
746
+ const controlRuntime = (model.clioCoder ?? model.clio)?.thinkingControlRuntime;
738
747
  const caps: CapabilityFlags = {
739
748
  chat: true,
740
749
  tools: true,
@@ -746,6 +755,7 @@ function capabilitiesFromModel(model: Model<Api> & ClioRuntimeMetadata): Capabil
746
755
  fim: false,
747
756
  contextWindow: model.contextWindow,
748
757
  maxTokens: model.maxTokens,
758
+ ...(controlRuntime ? { thinkingControlRuntime: controlRuntime } : {}),
749
759
  };
750
760
  if (
751
761
  format === "qwen-chat-template" ||
@@ -561,8 +561,12 @@
561
561
  guidance: |
562
562
  Ornith 1.5's Qwen3.5 chat template exposes thinking as on or off
563
563
  through enable_thinking; intermediate levels coerce to on. LM Studio
564
- reads the same switch from reasoning_effort (none or low), which Clio
565
- sends for on-off models on that runtime.
564
+ 2026-09-03 exposed a split vocabulary on this exact Q4_K_M: native
565
+ discovery advertised {off,on}, while its OpenAI-compatible request
566
+ validator rejected literal `on` and accepted only effort-level values.
567
+ `low` ran only after a warning and fallback to on, so Clio now omits an
568
+ active override for this default-on model and sends `reasoning_effort:
569
+ none` only when disabling it.
566
570
  serving: "Ornith-1.5-35B-A3B follows the 1.0 card: 262K context, qwen3 reasoning parsing, qwen3_coder tool parsing, sampler temperature=0.6, top_p=0.95, top_k=20."
567
571
 
568
572
  - family: qwen3.6-27b
@@ -696,7 +700,7 @@
696
700
  "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."
697
701
  runtimePreference:
698
702
  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)."
699
- 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."
703
+ 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. The upstream template defaults to thinking on/xhigh; an LM Studio deployment may configure another default. reasoning_effort:'none' explicitly disables it. Through LiteLLM, this control also requires allowed_openai_params:['reasoning_effort']; Clio selects the LM Studio spelling only when every deployment of that alias explicitly declares model_info.runtime: lm-studio."
700
704
  lmstudioNative: "Clio's LM Studio runtime uses the OpenAI-compatible HTTP chat adapter with native REST model discovery and residency management."
701
705
  llamaCpp:
702
706
  ctxSize: 131072
@@ -718,7 +722,6 @@
718
722
  effortByLevel:
719
723
  low: low
720
724
  medium: medium
721
- high: xhigh
722
725
  xhigh: xhigh
723
726
  guidance: |
724
727
  Official Qwen3.8-27B chat template (chat_template.jinja) validates
@@ -726,19 +729,32 @@
726
729
  fatal jinja exception (hard 500, not a graceful fallback) on anything
727
730
  else, including minimal/high/max. The 27B card gives no /think or
728
731
  /no_think soft switch for this model; unlike Qwen3, that idiom has no
729
- effect here. Off must go through chat_template_kwargs.enable_thinking:
730
- false, never through reasoning_effort. preserve_thinking should stay
732
+ effect here. The template defaults to xhigh with thinking enabled.
733
+ The picker offers off/low/medium/xhigh; released high and max choices
734
+ normalize to xhigh rather than reaching the strict template unchanged.
735
+ Template-level off uses chat_template_kwargs.enable_thinking:false.
736
+ preserve_thinking should stay
731
737
  on for an agentic harness (the template's own recommendation for
732
738
  agent scenarios; improves KV cache reuse). llama.cpp's own
733
739
  reasoning_effort:"none" also disables reasoning at the server layer
734
740
  and is a separate mechanism from the template's enable_thinking flag;
735
- both were verified independently on llama.cpp and on LM Studio's HTTP
736
- port.
741
+ the none sentinel is consumed before strict template effort validation.
742
+ LM Studio's HTTP port also accepts none. A 2026-09-05 same-route
743
+ LiteLLM probe showed none and the template flag alone still reasoned
744
+ because the generic OpenAI route filtered the effort parameter. Adding
745
+ allowed_openai_params:["reasoning_effort"] produced zero reasoning
746
+ twice; an allowed low control still reasoned. Clio forwards only an
747
+ effort resolved from the model/runtime contract, and never infers the
748
+ upstream control runtime from a host name, port, or model alias.
737
749
 
738
750
  Thinking off is verified for this family, and no floor is imposed on
739
- it. JetBrains report that Qwen3.8 without reasoning gets stuck in a
751
+ it. The official card and template were rechecked at revision
752
+ 1d4bf0f2ff6012fd82039f2fa52739d0dd7c60c0:
753
+ https://huggingface.co/Qwen/Qwen3.8-27B/blob/1d4bf0f2ff6012fd82039f2fa52739d0dd7c60c0/chat_template.jinja
754
+ JetBrains report that Qwen3.8 without reasoning gets stuck in a
740
755
  loop repeating the same tool call indefinitely under Junie. Clio's
741
- shipped default is orchestrator.thinkingLevel: off, which on llama.cpp
756
+ shipped default is chat.thinkingLevel: off, an explicit Clio preference
757
+ rather than the vendor's template default. On llama.cpp it
742
758
  sends chat_template_kwargs.enable_thinking:false and on LM Studio's
743
759
  OpenAI-compatible port sends reasoning_effort:"none". Clio 0.3.8 ran
744
760
  that configuration on both runtimes (llama.cpp build b226-2115b73d8 on
@@ -746,8 +762,12 @@
746
762
  2026-08-29 and 2026-08-30: an interactive build-and-resume session, a
747
763
  three-worker fleet step, and a ten-task eval suite totalling 116 model
748
764
  calls, none of which repeated a tool call into a loop. The catalog
749
- therefore imposes no thinking floor and coerces no level for this
750
- family. If a future build or quantization regresses into the loop
765
+ therefore imposes no thinking floor for this family. A provisional 2026-09-03 LM Studio A/B on the heavily quantized
766
+ `qwen3.8-27b-gsq-rco` alias corroborated the switch: four thinking-off
767
+ scenarios reported zero reasoning tokens and no repeated-tool loop,
768
+ versus visible reasoning at the active level. The host had LM Link
769
+ enabled, so this records behavior only—not hardware throughput or a
770
+ controlled quality claim. If a future build or quantization regresses into the loop
751
771
  JetBrains describe, the guards that catch it are Clio's own, not a
752
772
  catalog setting: the tool-prose-loop detector
753
773
  (src/interactive/tool-prose-loop.ts), which is armed on the
@@ -1695,15 +1715,16 @@
1695
1715
  card's dial is reasoning strength with levels low, medium, high, and
1696
1716
  xhigh, set through the system prompt as "Reasoning strength: <value>",
1697
1717
  and the router passes it as chat_template_kwargs.reasoning_strength
1698
- pinned to xhigh. There is no off level on that scale, and no
1699
- ThinkingMechanism in this engine emits that key:
1700
- resolveRequestCapability populates chat_template_kwargs only with
1701
- enable_thinking or, on the harmony path, reasoning_effort. Encoding this
1702
- family as on-off would put a flag on the wire that this template does
1703
- not read while the TUI showed a working off/on dial, which is the
1704
- failure qwopus3.5-9b-v3 above was reclassified to stop. A real dial for
1705
- this family needs a per-family kwarg key in the engine, not a catalog
1706
- edit.
1718
+ pinned to xhigh. There is no off level on that scale, so the family
1719
+ stays always-on: encoding it as on-off would put an enable_thinking
1720
+ flag on the wire that this template does not read while the TUI showed
1721
+ a working off/on dial, which is the failure qwopus3.5-9b-v3 above was
1722
+ reclassified to stop. The strength dial itself is driven per request:
1723
+ thinking.chatTemplateKwargs.byLevel below maps Clio's thinking level to
1724
+ chat_template_kwargs.reasoning_strength on llama.cpp, and LM Studio,
1725
+ which drops chat_template_kwargs, reports that kwarg as undeliverable
1726
+ instead of sending it. No per-level output has been measured yet, so
1727
+ the always-on classification above stands until one is.
1707
1728
 
1708
1729
  Sampler provenance: temperature 1.0, top_p 0.95 and top_k 64 are the
1709
1730
  card's Best Practices values and the router preset uses the same three.
@@ -1723,7 +1744,7 @@
1723
1744
  gpuTiers:
1724
1745
  "32gb": "Agent-role target on a 32 GB card: UD-Q4_K_XL weights, q8_0 KV at ctx=131072, parallel=1, with the Q8_0 perception encoder and the DFlash drafter both resident."
1725
1746
  runtimePreference:
1726
- llamaCpp: "OpenAI-compatible chat completions with --jinja. Set the reasoning budget at launch with --chat-template-kwargs {\"reasoning_strength\": \"...\"}; there is no per-request field Clio can send for it."
1747
+ llamaCpp: "OpenAI-compatible chat completions with --jinja. Clio drives the reasoning budget per request through chat_template_kwargs.reasoning_strength, mapped from the thinking level by thinking.chatTemplateKwargs.byLevel; a --chat-template-kwargs launch value is only the server default for requests that send none."
1727
1748
  openaiCompat: "Use when a gateway fronts the same llama.cpp chat-completions surface. Expect a reasoning trace on every response whatever the configured thinking level says."
1728
1749
  llamaCpp:
1729
1750
  ctxSize: 131072
@@ -1742,7 +1763,7 @@
1742
1763
  mechanism: always-on
1743
1764
  chatTemplateKwargs:
1744
1765
  byLevel:
1745
- # Card: reasoning strength low|medium|high|xhigh (scratchpad/catalog/models/unsloth-Muse-Glimmer-30B.md:35). The per-family kwarg key the note above asked for.
1766
+ # Card: reasoning strength low|medium|high|xhigh (scratchpad/catalog/models/unsloth-Muse-Glimmer-30B.md:35). The per-family kwarg key the note above describes.
1746
1767
  key: reasoning_strength
1747
1768
  values:
1748
1769
  low: low
@@ -1754,9 +1775,10 @@
1754
1775
  guidance: |
1755
1776
  Muse Glimmer reasons on every turn and its strength scale has no off
1756
1777
  level, so Clio shows the dial as forced and budgets for a reasoning
1757
- preamble ahead of every answer. Change the amount of thinking at the
1758
- server, with the reasoning_strength chat-template kwarg; a per-request
1759
- thinking level cannot reach this model.
1778
+ preamble ahead of every answer. The thinking level still sets how much
1779
+ it thinks: on llama.cpp Clio sends reasoning_strength (low, medium,
1780
+ high, xhigh) as a chat-template kwarg per request. LM Studio drops that
1781
+ kwarg, so there the strength stays at the server's own default.
1760
1782
  serving: "Meta Superintelligence Lab Muse-Glimmer-30B, a dense 29.6B causal transformer with a ~1.8B ViT-G/14 perception encoder, interleaved local and global attention with a 2048 sliding window, and a DFlash block-diffusion drafter that proposes 16 tokens per forward pass. Card context length is 131072. Input is text plus image; the mini router additionally tags video, which the card does not claim, so the catalog follows the card."
1761
1783
 
1762
1784
  # ThinkingCap is a brevity finetune of Qwen3.6-27B and not the base model, so it