@iowarp/clio-coder 0.4.1 → 0.4.3

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 (604) hide show
  1. package/CHANGELOG.md +127 -0
  2. package/CONTRIBUTING.md +142 -52
  3. package/README.md +434 -473
  4. package/SECURITY.md +2 -1
  5. package/dist/{acp-ZILU3AUO.js → acp-H2NGRPWO.js} +12 -12
  6. package/dist/{agents-HYWGBGQR.js → agents-TL5LLUQP.js} +56 -55
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/{auth-N3QT7CBO.js → auth-E5SW4HMS.js} +23 -21
  9. package/dist/builtins-IA7V7FUC.js +22 -0
  10. package/dist/{chunk-7RY5VZPH.js → chunk-2APPQIER.js} +8 -8
  11. package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
  12. package/dist/{chunk-JA5QWE4Z.js → chunk-2UG5F4C5.js} +1973 -1664
  13. package/dist/{chunk-5YHDIDBP.js → chunk-2UH2KFUP.js} +2 -2
  14. package/dist/{chunk-CTJ4RNAA.js → chunk-2VIKGWFZ.js} +2 -2
  15. package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
  16. package/dist/{chunk-GIZNH63R.js → chunk-35MSIRKH.js} +9 -4
  17. package/dist/chunk-3EBYEESD.js +314 -0
  18. package/dist/{chunk-J5LZHVIT.js → chunk-3M6DQK6S.js} +113 -35
  19. package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
  20. package/dist/{chunk-6FN3E6KX.js → chunk-4O6MANBS.js} +2 -2
  21. package/dist/chunk-4UVU7BJ5.js +39 -0
  22. package/dist/{chunk-VKRH2TCS.js → chunk-4WR7VSYB.js} +2 -2
  23. package/dist/{chunk-BBTJOK6Y.js → chunk-54CBCGIR.js} +5 -5
  24. package/dist/{chunk-AP73CFDC.js → chunk-5ICU3EUH.js} +2 -2
  25. package/dist/chunk-5MEZN6CB.js +1334 -0
  26. package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
  27. package/dist/{chunk-ABLSQ6JX.js → chunk-64I3JVYM.js} +8 -2
  28. package/dist/{chunk-AFKWHWXF.js → chunk-6PTFB5VS.js} +39 -22
  29. package/dist/{chunk-VN3SHNBN.js → chunk-7DICMOS6.js} +2 -2
  30. package/dist/chunk-7DRAWPTZ.js +360 -0
  31. package/dist/chunk-7E7I3WLS.js +3762 -0
  32. package/dist/{chunk-BJGUKIG4.js → chunk-7ZYNNDKC.js} +7 -7
  33. package/dist/{chunk-XKA2ICR3.js → chunk-AF4YM7Z4.js} +652 -252
  34. package/dist/{chunk-GVQJ5CCZ.js → chunk-AX2THNSA.js} +12 -12
  35. package/dist/{chunk-IG7BCQBA.js → chunk-B4OAX3SI.js} +65 -3
  36. package/dist/{chunk-TD3PGPQA.js → chunk-B4VEBZKF.js} +3 -3
  37. package/dist/{chunk-74YWRRU5.js → chunk-BEPZRGGU.js} +10 -10
  38. package/dist/{chunk-FEFIFZTL.js → chunk-CE5AX47J.js} +2 -2
  39. package/dist/{chunk-UAPGZHYC.js → chunk-DWUOQKRU.js} +25 -11
  40. package/dist/{chunk-THYWACCR.js → chunk-E3TPLWFX.js} +3 -3
  41. package/dist/{chunk-7EPLI7VL.js → chunk-EKCHAPYA.js} +2 -2
  42. package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
  43. package/dist/{chunk-PJJ6MY27.js → chunk-F5JHEYZM.js} +7 -7
  44. package/dist/{chunk-6CCS4G3W.js → chunk-FTMGRKEF.js} +3 -3
  45. package/dist/{chunk-SINK3QR6.js → chunk-G76U63X4.js} +17 -17
  46. package/dist/{chunk-EIMVLWB3.js → chunk-GHS5EBTQ.js} +64 -9
  47. package/dist/{chunk-QMXC4JB7.js → chunk-GI7YYQ3F.js} +187 -1419
  48. package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
  49. package/dist/{chunk-6HMJX2VU.js → chunk-GWZNEVM2.js} +44 -12
  50. package/dist/chunk-GYV6VZOC.js +26 -0
  51. package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
  52. package/dist/{chunk-UXN6JT4W.js → chunk-HEQY7ZFI.js} +3 -3
  53. package/dist/{chunk-7PWAODYW.js → chunk-I7XBWTYH.js} +2 -2
  54. package/dist/{chunk-GCSMB2KY.js → chunk-I7ZPNEJM.js} +145 -102
  55. package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
  56. package/dist/{chunk-QTFGO774.js → chunk-IGLP3ODT.js} +29 -16
  57. package/dist/chunk-IJNZMHLA.js +101 -0
  58. package/dist/{chunk-BDPT6GTK.js → chunk-INY6HTFL.js} +7 -7
  59. package/dist/{chunk-PBP4B7XR.js → chunk-IUE3Y34X.js} +2 -2
  60. package/dist/{chunk-6NJQITNH.js → chunk-IWT4SF4R.js} +6 -3
  61. package/dist/{chunk-R23Z6K6I.js → chunk-JDAY6FIL.js} +19 -19
  62. package/dist/chunk-JEQ3XTHC.js +42 -0
  63. package/dist/{chunk-FSP7CMNU.js → chunk-JGRC33J2.js} +50 -4
  64. package/dist/{chunk-TVH4ONAM.js → chunk-JKKCYP3C.js} +10 -10
  65. package/dist/{chunk-HJWWJ6IL.js → chunk-JSC3U7TI.js} +16 -4
  66. package/dist/{chunk-C537JADH.js → chunk-KK4JZPBQ.js} +19 -141
  67. package/dist/{chunk-K6BF4U2H.js → chunk-KKOJXO6R.js} +62 -14
  68. package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
  69. package/dist/{chunk-6DWBAZ5U.js → chunk-L47TF46W.js} +5 -7
  70. package/dist/{chunk-HUAS7ITX.js → chunk-LDJG7DW3.js} +91 -42
  71. package/dist/{chunk-CDNVLKUX.js → chunk-LLDJM5XK.js} +13 -7
  72. package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
  73. package/dist/{chunk-Y4CAGMM6.js → chunk-MNJGS2IN.js} +5 -6
  74. package/dist/{chunk-VKFQTNDV.js → chunk-MUW2BDDH.js} +4 -4
  75. package/dist/{chunk-E67WX76H.js → chunk-MWUZBSAQ.js} +104 -152
  76. package/dist/{chunk-OJTRZGR3.js → chunk-N2Z7HLVY.js} +21 -21
  77. package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
  78. package/dist/{chunk-FYUN5KZ3.js → chunk-NIQJ66N4.js} +21 -21
  79. package/dist/{chunk-U2WB7TZS.js → chunk-NMJXSHBJ.js} +97 -85
  80. package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
  81. package/dist/{chunk-VEGN6WIQ.js → chunk-O5CVSAG5.js} +3 -3
  82. package/dist/{chunk-MOPSG2X7.js → chunk-OML5D5V5.js} +8 -8
  83. package/dist/{chunk-2VG7KLYV.js → chunk-PAJQJ7BS.js} +5816 -3255
  84. package/dist/{chunk-ZW55JB7N.js → chunk-PUVDKJ2Y.js} +2 -2
  85. package/dist/{chunk-BTGG6BG2.js → chunk-QWGDJJYJ.js} +158 -19
  86. package/dist/chunk-R6Q67RJH.js +134 -0
  87. package/dist/{chunk-ZJLUDYFY.js → chunk-RRNP2ANY.js} +6 -6
  88. package/dist/{chunk-PVAMAVBB.js → chunk-RSJ25QSL.js} +102 -2
  89. package/dist/{chunk-NLFAQR7Z.js → chunk-S66XZJOF.js} +3 -23
  90. package/dist/chunk-SKHCAU7K.js +385 -0
  91. package/dist/chunk-SZAA6XDG.js +30 -0
  92. package/dist/{chunk-J4HBWF6Y.js → chunk-TM6LQDI3.js} +131 -28
  93. package/dist/chunk-UOIZ7DA4.js +41 -0
  94. package/dist/{chunk-MA3H6DM5.js → chunk-UPZU6GE4.js} +25 -3
  95. package/dist/{chunk-BWW4HLO4.js → chunk-UXCU4E3T.js} +8 -6
  96. package/dist/{chunk-N5UK64DP.js → chunk-V2ANDPVT.js} +4 -4
  97. package/dist/{chunk-AK5XEFVZ.js → chunk-VA5FNYMT.js} +26 -13
  98. package/dist/{chunk-6VC4OV3Z.js → chunk-VIA6RFQZ.js} +3 -11
  99. package/dist/{chunk-ZAZB4JMW.js → chunk-VKPAQYEB.js} +27 -8
  100. package/dist/{chunk-QKIFBZKT.js → chunk-VW6DOEDG.js} +497 -81
  101. package/dist/{chunk-SCYB3HA4.js → chunk-W6RRQCPQ.js} +63 -19
  102. package/dist/{chunk-2NM363SV.js → chunk-WBKFA554.js} +10 -10
  103. package/dist/{chunk-R32CLGZ6.js → chunk-WCXUNS7U.js} +82 -21
  104. package/dist/{chunk-GPPB3JBE.js → chunk-WRBAGUNF.js} +3 -3
  105. package/dist/{chunk-IXJT6DCX.js → chunk-XIVNBFZS.js} +85 -30
  106. package/dist/{chunk-UEDMSP56.js → chunk-XPWWI35G.js} +417 -201
  107. package/dist/chunk-XRZT5WY5.js +47 -0
  108. package/dist/{chunk-3QSOM6PA.js → chunk-Y3CBHOR6.js} +2 -2
  109. package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
  110. package/dist/{chunk-AKB4GYDL.js → chunk-YQWYVTMC.js} +5 -5
  111. package/dist/{chunk-6I5ILFOF.js → chunk-ZA4VCIGV.js} +3 -3
  112. package/dist/{chunk-7OBGU7UB.js → chunk-ZDN3Y73Y.js} +12 -18
  113. package/dist/{chunk-3I5NY75V.js → chunk-ZWPRK62N.js} +8 -5
  114. package/dist/cli/index.js +41 -39
  115. package/dist/{clio-IT3G3VQH.js → clio-CMMK4KRR.js} +9 -9
  116. package/dist/{code-nav-RK6S7F6E.js → code-nav-MDZNQS33.js} +89 -21
  117. package/dist/{components-UBWCQSRW.js → components-UCUQ4QXW.js} +4 -4
  118. package/dist/{config-3QZRWZJF.js → config-SVM5P5YI.js} +131 -84
  119. package/dist/{configure-FL7Y3KJF.js → configure-LE3IK2TJ.js} +28 -26
  120. package/dist/{context-5HE7ODYK.js → context-2OHRKS42.js} +69 -64
  121. package/dist/{context-KYQFRVDC.js → context-E3VC7RX5.js} +15 -11
  122. package/dist/{context-XNHL75JV.js → context-VNCR7KAG.js} +93 -65
  123. package/dist/{context-clear-N545L53A.js → context-clear-BW4O37TG.js} +64 -60
  124. package/dist/context-map-COB37XXN.js +505 -0
  125. package/dist/{context-working-set-QHKXSV2F.js → context-working-set-VDS25HXZ.js} +19 -18
  126. package/dist/{dispatch-runner-RGIE5PCT.js → dispatch-runner-5AHT53RF.js} +93 -82
  127. package/dist/{docs-5NAF6AU7.js → docs-PD3EXDKU.js} +21 -20
  128. package/dist/{doctor-ZGPEGHIP.js → doctor-WNNVO6FY.js} +48 -47
  129. package/dist/{eval-GXLL44RD.js → eval-7G7SGAYO.js} +287 -115
  130. package/dist/{eval-inventory-HBWSWQOK.js → eval-inventory-Y6QRFOH5.js} +4 -4
  131. package/dist/{evidence-HWLBRH3Q.js → evidence-VD6736FQ.js} +67 -64
  132. package/dist/{evolve-FTZBMNVW.js → evolve-AL3NGVRL.js} +65 -62
  133. package/dist/{extensions-VHRBEID7.js → extensions-MOVJ32NM.js} +9 -7
  134. package/dist/{fleet-CKZHJWZJ.js → fleet-QZHUMAGI.js} +114 -111
  135. package/dist/{fleet-commands-EXDXBMV6.js → fleet-commands-BAYT5FJZ.js} +10 -10
  136. package/dist/{fleet-decisions-OTHB6KRL.js → fleet-decisions-IREVMRU4.js} +7 -6
  137. package/dist/{fleet-graph-YTEZUCUT.js → fleet-graph-YCTT3HTI.js} +22 -19
  138. package/dist/{fleet-inspect-SS6YMDCK.js → fleet-inspect-QVJTDAVB.js} +58 -55
  139. package/dist/{fleet-preflight-PBY4VYOM.js → fleet-preflight-25QAFPK4.js} +4 -4
  140. package/dist/{fleet-validate-KMEM5L3S.js → fleet-validate-5O57AAJ7.js} +26 -23
  141. package/dist/{fleet-verify-QD5M7E7Q.js → fleet-verify-CPH2W2T6.js} +59 -56
  142. package/dist/{fleet-view-WAMJYNDT.js → fleet-view-SWBR3VGQ.js} +58 -55
  143. package/dist/{init-5XQRBOFV.js → init-J477LKZH.js} +82 -79
  144. package/dist/{interop-34TVO25M.js → interop-3FCM6XLG.js} +11 -11
  145. package/dist/{library-3QY6KF57.js → library-QUQEIUG6.js} +30 -27
  146. package/dist/{memory-L4UTIIIW.js → memory-SGGSEP65.js} +67 -64
  147. package/dist/{models-ZVX3QOWE.js → models-HEKUAXXK.js} +53 -46
  148. package/dist/{monitor-CEKVSYTS.js → monitor-HKU57TYQ.js} +63 -60
  149. package/dist/{orchestrator-77BAP6BC.js → orchestrator-VDFAEFAI.js} +1831 -1057
  150. package/dist/{panes-7STHOAUJ.js → panes-DN2SSFOH.js} +5 -5
  151. package/dist/{panes-SHAUIRXY.js → panes-TALGNPZT.js} +29 -14
  152. package/dist/{paths-L7LGY6RN.js → paths-NBMFAIEZ.js} +5 -5
  153. package/dist/reset-EAJFFJVB.js +344 -0
  154. package/dist/{resources-74GKTLSF.js → resources-OVKSEFVE.js} +29 -20
  155. package/dist/{run-HBAUJNNZ.js → run-7DP7ZF2J.js} +120 -115
  156. package/dist/{share-G3APVLVP.js → share-WML67FT3.js} +32 -27
  157. package/dist/{skills-35HHUKCR.js → skills-SG662R2K.js} +41 -31
  158. package/dist/{skills-eval-QN4HSHDC.js → skills-eval-VVZEUU46.js} +78 -77
  159. package/dist/{skills-inventory-J357J34F.js → skills-inventory-I2E23GET.js} +23 -20
  160. package/dist/{slash-commands-JZZCQA32.js → slash-commands-S7MBJDQK.js} +40 -36
  161. package/dist/{steer-XAVHJM22.js → steer-2LQOMCPB.js} +3 -3
  162. package/dist/{support-U7QOWY26.js → support-CC2UJBJ6.js} +6 -6
  163. package/dist/{targets-DSM6CY3M.js → targets-4QC3HIEW.js} +54 -54
  164. package/dist/{terminal-lease-JOPFUVEM.js → terminal-lease-TUHIJ6Y2.js} +5 -5
  165. package/dist/{tools-MKNWVPBH.js → tools-TFGJICCU.js} +10 -10
  166. package/dist/{trace-ECQ7TIYZ.js → trace-FXMXUZUF.js} +55 -7
  167. package/dist/uninstall-5PEVOE5B.js +408 -0
  168. package/dist/upgrade-M4WXY6KN.js +303 -0
  169. package/dist/{usage-X52N3IDJ.js → usage-N7ZNVLEM.js} +151 -104
  170. package/dist/{verifiers-EJTVVSMA.js → verifiers-DJTP4XX6.js} +15 -15
  171. package/dist/{verify-YJL6XET2.js → verify-RWE4PPEK.js} +9 -9
  172. package/dist/{web-fetch-MPIFL3LL.js → web-fetch-MPARV2K7.js} +2 -2
  173. package/dist/{wiki-generate-4NDZTQ4B.js → wiki-generate-C7IQOXSP.js} +89 -86
  174. package/dist/{with-panes-OBOBFIIR.js → with-panes-4GCGSL7J.js} +53 -257
  175. package/dist/worker/entry.js +90 -74
  176. package/docs/README.md +176 -81
  177. package/docs/{acp.md → architecture/acp.md} +36 -20
  178. package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
  179. package/docs/{architecture.md → architecture/architecture.md} +43 -22
  180. package/docs/{artifact-placement.md → architecture/artifact-placement.md} +27 -23
  181. package/docs/architecture/artifact-versions.md +90 -0
  182. package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
  183. package/docs/{context-engine.md → architecture/context-engine.md} +29 -25
  184. package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
  185. package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
  186. package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
  187. package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
  188. package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
  189. package/docs/{model-catalog.md → architecture/model-catalog.md} +61 -27
  190. package/docs/{observability.md → architecture/observability.md} +38 -14
  191. package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
  192. package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +57 -20
  193. package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +99 -25
  194. package/docs/{safety-model.md → architecture/safety-model.md} +35 -20
  195. package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
  196. package/docs/architecture/time-conventions.md +125 -0
  197. package/docs/{trace-store.md → architecture/trace-store.md} +13 -5
  198. package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
  199. package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
  200. package/docs/{built-in-agents.md → guide/built-in-agents.md} +65 -35
  201. package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +66 -61
  202. package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -297
  203. package/docs/guide/configuration-reference.md +1163 -0
  204. package/docs/{environment-variables.md → guide/environment-variables.md} +33 -28
  205. package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +6 -3
  206. package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
  207. package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +39 -43
  208. package/docs/{glossary.md → guide/glossary.md} +14 -11
  209. package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +81 -17
  210. package/docs/guide/panes-and-files.md +290 -0
  211. package/docs/{proactive-memory.md → guide/proactive-memory.md} +131 -107
  212. package/docs/{resource-library.md → guide/resource-library.md} +13 -4
  213. package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +25 -3
  214. package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
  215. package/docs/{troubleshooting.md → guide/troubleshooting.md} +9 -4
  216. package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +11 -11
  217. package/docs/{release-cut-checklist.md → history/release-cut-checklist.md} +29 -2
  218. package/docs/process/development-pipeline.md +152 -0
  219. package/docs/process/documentation-coverage.md +100 -0
  220. package/docs/process/documentation-guide.md +187 -0
  221. package/docs/{eval-runner.md → process/eval-runner.md} +108 -53
  222. package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
  223. package/docs/{evolution.md → process/evolution.md} +2 -2
  224. package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +11 -7
  225. package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
  226. package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
  227. package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
  228. package/evals/README.md +2 -2
  229. package/evals/behavioral-model.yaml +3 -2
  230. package/package.json +10 -8
  231. package/skills/README.md +52 -41
  232. package/skills/coding/ast-grep/SKILL.md +102 -31
  233. package/skills/coding/ast-grep/evals.md +26 -0
  234. package/skills/coding/coding-standards/SKILL.md +41 -6
  235. package/skills/coding/coding-standards/evals.md +23 -0
  236. package/skills/coding/prototype/SKILL.md +88 -29
  237. package/skills/coding/prototype/evals.md +19 -0
  238. package/skills/coding/tdd/SKILL.md +81 -54
  239. package/skills/coding/tdd/evals.md +20 -0
  240. package/skills/context/context-handoff/SKILL.md +44 -3
  241. package/skills/context/context-handoff/evals.md +44 -0
  242. package/skills/context/context-prime/SKILL.md +46 -16
  243. package/skills/context/context-prime/evals.md +45 -0
  244. package/skills/git/branch-closeout/SKILL.md +132 -0
  245. package/skills/git/branch-closeout/evals.md +133 -0
  246. package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
  247. package/skills/git/file-ticket/SKILL.md +78 -64
  248. package/skills/git/file-ticket/assets/issue-template.md +22 -0
  249. package/skills/git/file-ticket/evals.md +31 -26
  250. package/skills/git/file-ticket/references/issue-discovery.md +49 -0
  251. package/skills/git/fix-issue/SKILL.md +88 -65
  252. package/skills/git/fix-issue/evals.md +35 -31
  253. package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
  254. package/skills/git/resolve-merge-conflicts/SKILL.md +101 -52
  255. package/skills/git/resolve-merge-conflicts/evals.md +52 -25
  256. package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
  257. package/skills/git/ship/SKILL.md +103 -67
  258. package/skills/git/ship/assets/pr-template.md +21 -0
  259. package/skills/git/ship/evals.md +44 -28
  260. package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
  261. package/skills/git/worktree-create/SKILL.md +80 -50
  262. package/skills/git/worktree-create/evals.md +40 -33
  263. package/skills/git/worktree-create/references/worktree-setup.md +62 -66
  264. package/skills/git/worktree-merge/SKILL.md +112 -65
  265. package/skills/git/worktree-merge/evals.md +42 -34
  266. package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
  267. package/skills/meta/clio-coder-dev/SKILL.md +9 -5
  268. package/skills/meta/clio-coder-dev/evals.md +3 -2
  269. package/skills/meta/clio-coder-test/SKILL.md +102 -95
  270. package/skills/meta/clio-coder-test/evals.md +9 -4
  271. package/skills/meta/clio-coder-test/references/harness.md +100 -124
  272. package/skills/meta/clio-coder-test/references/test-map.md +77 -50
  273. package/skills/meta/credentials/SKILL.md +2 -2
  274. package/skills/meta/find-skills/SKILL.md +2 -2
  275. package/skills/meta/herdr/SKILL.md +2 -2
  276. package/skills/meta/skill-craft/SKILL.md +22 -16
  277. package/skills/planning/archify/SKILL.md +196 -0
  278. package/skills/planning/archify/evals.md +65 -0
  279. package/skills/planning/architecture/SKILL.md +62 -13
  280. package/skills/planning/architecture/evals.md +65 -0
  281. package/skills/planning/backlog/SKILL.md +131 -15
  282. package/skills/planning/backlog/evals.md +142 -0
  283. package/skills/planning/prd/SKILL.md +47 -7
  284. package/skills/planning/prd/evals.md +54 -0
  285. package/skills/planning/product-intent/SKILL.md +58 -3
  286. package/skills/planning/product-intent/evals.md +70 -0
  287. package/skills/planning/tech-spec/SKILL.md +54 -3
  288. package/skills/planning/tech-spec/evals.md +73 -0
  289. package/skills/registry.yaml +70 -62
  290. package/skills/remote.yaml +13 -0
  291. package/skills/research/arxiv-literature/SKILL.md +77 -19
  292. package/skills/research/arxiv-literature/evals.md +50 -0
  293. package/skills/research/experiment-protocol/SKILL.md +21 -2
  294. package/skills/research/experiment-protocol/evals.md +23 -0
  295. package/skills/research/scientific-debugging/SKILL.md +24 -2
  296. package/skills/research/scientific-debugging/evals.md +18 -0
  297. package/skills/research/scientific-modernization/SKILL.md +27 -2
  298. package/skills/research/scientific-modernization/evals.md +27 -0
  299. package/skills/skill-marketplace.json +97 -62
  300. package/skills/workflow/cut-it/SKILL.md +66 -6
  301. package/skills/workflow/cut-it/evals.md +101 -0
  302. package/skills/workflow/design-council/SKILL.md +118 -28
  303. package/skills/workflow/design-council/evals.md +161 -0
  304. package/skills/workflow/grill-me/SKILL.md +87 -11
  305. package/skills/workflow/grill-me/evals.md +153 -0
  306. package/skills/workflow/workflow-distiller/SKILL.md +77 -18
  307. package/skills/workflow/workflow-distiller/evals.md +118 -0
  308. package/src/cli/args.ts +2 -2
  309. package/src/cli/bootstrap-generate.ts +1 -1
  310. package/src/cli/config-inspect.ts +65 -12
  311. package/src/cli/configure-interop.ts +105 -13
  312. package/src/cli/configure-oauth.ts +57 -0
  313. package/src/cli/configure-onboarding.ts +980 -0
  314. package/src/cli/configure-target.ts +594 -0
  315. package/src/cli/configure.ts +1082 -532
  316. package/src/cli/context-map.ts +114 -0
  317. package/src/cli/context.ts +4 -0
  318. package/src/cli/docs.ts +22 -14
  319. package/src/cli/doctor-naming.ts +5 -5
  320. package/src/cli/doctor-toolchain.ts +3 -3
  321. package/src/cli/eval.ts +1 -2
  322. package/src/cli/extensions.ts +2 -1
  323. package/src/cli/fleet.ts +1 -1
  324. package/src/cli/index.ts +3 -1
  325. package/src/cli/internal-dispatch.ts +3 -4
  326. package/src/cli/lifecycle-presenter.ts +436 -0
  327. package/src/cli/models.ts +10 -2
  328. package/src/cli/modes/print.ts +5 -1
  329. package/src/cli/panes.ts +19 -5
  330. package/src/cli/reset.ts +228 -106
  331. package/src/cli/run.ts +9 -4
  332. package/src/cli/select.ts +664 -0
  333. package/src/cli/share.ts +5 -1
  334. package/src/cli/skills-eval.ts +3 -3
  335. package/src/cli/skills.ts +9 -2
  336. package/src/cli/targets.ts +5 -6
  337. package/src/cli/trace.ts +55 -4
  338. package/src/cli/uninstall.ts +233 -165
  339. package/src/cli/upgrade.ts +204 -149
  340. package/src/cli/usage.ts +86 -27
  341. package/src/cli/validate-model.ts +3 -3
  342. package/src/cli/wiki-generate.ts +1 -1
  343. package/src/core/artifact-paths.ts +1 -1
  344. package/src/core/bash-exec.ts +131 -86
  345. package/src/core/bus-events.ts +51 -6
  346. package/src/core/config.ts +61 -1
  347. package/src/core/defaults.ts +7 -4
  348. package/src/core/dispatch-outcome.ts +16 -0
  349. package/src/core/external-diagnostic.ts +44 -0
  350. package/src/core/gateway-routing.ts +157 -0
  351. package/src/core/guardrails.ts +10 -49
  352. package/src/core/prompt-hint.ts +9 -0
  353. package/src/core/safe-exec.ts +17 -2
  354. package/src/core/skill-activation.ts +89 -2
  355. package/src/domains/agents/builtins/architect.md +2 -3
  356. package/src/domains/agents/builtins/coder.md +3 -2
  357. package/src/domains/agents/builtins/debugger.md +2 -2
  358. package/src/domains/agents/builtins/documenter.md +2 -2
  359. package/src/domains/agents/builtins/git-master.md +1 -1
  360. package/src/domains/agents/builtins/oracle.md +1 -1
  361. package/src/domains/agents/builtins/provenance.md +1 -1
  362. package/src/domains/agents/builtins/researcher.md +1 -1
  363. package/src/domains/agents/builtins/scout.md +1 -1
  364. package/src/domains/agents/builtins/tester.md +2 -2
  365. package/src/domains/agents/builtins/verifier.md +2 -2
  366. package/src/domains/agents/builtins/wiki-writer.md +1 -1
  367. package/src/domains/agents/builtins/world-knowledge.md +31 -0
  368. package/src/domains/agents/catalog.ts +13 -15
  369. package/src/domains/agents/contract.ts +2 -0
  370. package/src/domains/agents/extension.ts +23 -1
  371. package/src/domains/agents/result-contract.ts +70 -0
  372. package/src/domains/config/keybindings.ts +8 -0
  373. package/src/domains/context/extension.ts +0 -3
  374. package/src/domains/context/wiki/map-seed.ts +589 -0
  375. package/src/domains/context/wiki/plan.ts +2 -2
  376. package/src/domains/context/working-set/path-index.ts +1 -0
  377. package/src/domains/dispatch/admission.ts +29 -0
  378. package/src/domains/dispatch/agent-candidates.ts +10 -0
  379. package/src/domains/dispatch/budget-envelope.ts +86 -1
  380. package/src/domains/dispatch/capability-match.ts +11 -0
  381. package/src/domains/dispatch/capacity-lease.ts +17 -0
  382. package/src/domains/dispatch/contract.ts +11 -1
  383. package/src/domains/dispatch/extension.ts +237 -49
  384. package/src/domains/dispatch/host-verification.ts +435 -39
  385. package/src/domains/dispatch/intent-requirements.ts +10 -0
  386. package/src/domains/dispatch/intent.ts +18 -1
  387. package/src/domains/dispatch/path-scope.ts +235 -24
  388. package/src/domains/dispatch/run-event-journal.ts +4 -15
  389. package/src/domains/dispatch/state.ts +2 -3
  390. package/src/domains/dispatch/transport.ts +45 -21
  391. package/src/domains/dispatch/types.ts +58 -3
  392. package/src/domains/dispatch/worker-model-metadata.ts +38 -0
  393. package/src/domains/eval/artifacts/store.ts +5 -0
  394. package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
  395. package/src/domains/eval/metrics/token-stream.ts +201 -31
  396. package/src/domains/eval/metrics/tracked.ts +40 -4
  397. package/src/domains/eval/runners/clio-run.ts +5 -2
  398. package/src/domains/eval/schema/suite.ts +28 -0
  399. package/src/domains/eval/schema/verdict.ts +2 -2
  400. package/src/domains/eval/store.ts +8 -1
  401. package/src/domains/eval/suites/resolve.ts +13 -1
  402. package/src/domains/eval/suites/run.ts +24 -3
  403. package/src/domains/evidence/trust-status.ts +10 -1
  404. package/src/domains/extensions/contract.ts +15 -1
  405. package/src/domains/extensions/discovery.ts +238 -41
  406. package/src/domains/extensions/extension.ts +105 -6
  407. package/src/domains/extensions/index.ts +24 -0
  408. package/src/domains/extensions/integrity.ts +189 -0
  409. package/src/domains/extensions/manager.ts +17 -1
  410. package/src/domains/extensions/resource-path.ts +27 -0
  411. package/src/domains/extensions/resources.ts +18 -38
  412. package/src/domains/extensions/snapshot-store.ts +39 -0
  413. package/src/domains/extensions/snapshot.ts +180 -0
  414. package/src/domains/extensions/state.ts +385 -57
  415. package/src/domains/extensions/types.ts +118 -1
  416. package/src/domains/interop/registry.ts +6 -2
  417. package/src/domains/interop/types.ts +4 -0
  418. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
  419. package/src/domains/lifecycle/migrations/index.ts +6 -0
  420. package/src/domains/lifecycle/naming-resources.ts +19 -4
  421. package/src/domains/lifecycle/naming-yazi.ts +10 -5
  422. package/src/domains/memory/task-memory-policy.ts +70 -26
  423. package/src/domains/memory/task-memory-telemetry.ts +1 -0
  424. package/src/domains/middleware/contract.ts +26 -0
  425. package/src/domains/middleware/extension.ts +24 -24
  426. package/src/domains/middleware/hook-receipts.ts +27 -4
  427. package/src/domains/middleware/hooks-io.ts +65 -32
  428. package/src/domains/middleware/hooks.ts +64 -0
  429. package/src/domains/middleware/index.ts +28 -5
  430. package/src/domains/middleware/marketplace-offer.ts +3 -35
  431. package/src/domains/middleware/memory-intervention.ts +127 -32
  432. package/src/domains/middleware/memory-step-endpoint.ts +3 -2
  433. package/src/domains/middleware/registrations.ts +326 -0
  434. package/src/domains/middleware/runtime.ts +28 -0
  435. package/src/domains/middleware/skills-reminder.ts +31 -2
  436. package/src/domains/middleware/snapshot.ts +20 -7
  437. package/src/domains/mux/contract.ts +38 -0
  438. package/src/domains/mux/detect.ts +6 -13
  439. package/src/domains/mux/index.ts +1 -1
  440. package/src/domains/mux/operations.ts +44 -5
  441. package/src/domains/mux/yazi/assets/yazi.toml +2 -2
  442. package/src/domains/mux/yazi/session.ts +53 -4
  443. package/src/domains/mux/yazi/theme.ts +117 -17
  444. package/src/domains/observability/compaction-usage.ts +118 -0
  445. package/src/domains/observability/contract.ts +10 -11
  446. package/src/domains/observability/cost.ts +1 -1
  447. package/src/domains/observability/extension.ts +17 -4
  448. package/src/domains/observability/out-of-turn-usage.ts +52 -21
  449. package/src/domains/observability/projection.ts +14 -90
  450. package/src/domains/observability/trace-store.ts +43 -7
  451. package/src/domains/prompts/compiler.ts +73 -53
  452. package/src/domains/prompts/contract.ts +15 -3
  453. package/src/domains/prompts/extension.ts +97 -9
  454. package/src/domains/prompts/fragments/identity/clio-worker.md +1 -3
  455. package/src/domains/prompts/fragments/identity/clio.md +6 -12
  456. package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
  457. package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
  458. package/src/domains/prompts/fragments/operating/contract.md +7 -15
  459. package/src/domains/prompts/fragments/operating/delegation.md +32 -34
  460. package/src/domains/prompts/fragments/operating/skills.md +10 -24
  461. package/src/domains/prompts/fragments/operating/worker.md +1 -8
  462. package/src/domains/providers/contract.ts +4 -1
  463. package/src/domains/providers/extension.ts +40 -9
  464. package/src/domains/providers/index.ts +1 -1
  465. package/src/domains/providers/model-capabilities.ts +9 -0
  466. package/src/domains/providers/model-discovery.ts +2 -0
  467. package/src/domains/providers/model-runtime-capabilities.ts +99 -25
  468. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +699 -114
  469. package/src/domains/providers/runtime-resolution.ts +31 -0
  470. package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
  471. package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
  472. package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
  473. package/src/domains/providers/runtimes/common/probe-helpers.ts +7 -2
  474. package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
  475. package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
  476. package/src/domains/providers/support.ts +11 -5
  477. package/src/domains/providers/target-model-cache.ts +25 -2
  478. package/src/domains/providers/types/capability-flags.ts +2 -0
  479. package/src/domains/providers/types/cost-provenance.ts +19 -0
  480. package/src/domains/providers/types/local-model-quirks.ts +85 -37
  481. package/src/domains/providers/types/runtime-descriptor.ts +20 -1
  482. package/src/domains/providers/types/target-descriptor.ts +19 -0
  483. package/src/domains/resources/index.ts +3 -0
  484. package/src/domains/resources/skills/install.ts +72 -7
  485. package/src/domains/resources/skills/loader.ts +23 -19
  486. package/src/domains/resources/skills/marketplace.ts +63 -11
  487. package/src/domains/safety/autonomy.ts +15 -0
  488. package/src/domains/safety/call-target.ts +1 -1
  489. package/src/domains/safety/index.ts +1 -0
  490. package/src/domains/safety/loop-detector.ts +7 -4
  491. package/src/domains/safety/path-policy.ts +1 -1
  492. package/src/domains/safety/policy-engine.ts +34 -11
  493. package/src/domains/safety/protected-artifacts.ts +191 -88
  494. package/src/domains/safety/run-effects.ts +2 -22
  495. package/src/domains/safety/skill-authority.ts +55 -0
  496. package/src/domains/session/compaction/compact.ts +72 -22
  497. package/src/domains/session/entries.ts +6 -0
  498. package/src/domains/session/task-board.ts +10 -9
  499. package/src/domains/session/usage.ts +3 -3
  500. package/src/domains/share/archive.ts +164 -7
  501. package/src/engine/acp/server.ts +62 -9
  502. package/src/engine/agent.ts +13 -3
  503. package/src/engine/ai.ts +26 -8
  504. package/src/engine/antigravity/subprocess-runtime.ts +386 -120
  505. package/src/engine/api-registry.ts +3 -0
  506. package/src/engine/apis/llamacpp-residency.ts +3 -4
  507. package/src/engine/apis/lmstudio.ts +3 -3
  508. package/src/engine/apis/ollama-native.ts +6 -6
  509. package/src/engine/apis/openai-completions.ts +145 -39
  510. package/src/engine/apis/output-budget.ts +8 -18
  511. package/src/engine/apis/residency.ts +8 -27
  512. package/src/engine/external-subprocess.ts +114 -6
  513. package/src/engine/gemma-channel-filter.ts +19 -0
  514. package/src/engine/loop-guard.ts +92 -12
  515. package/src/engine/worker-runtime.ts +40 -11
  516. package/src/engine/worker-tools.ts +3 -1
  517. package/src/entry/background-model-metadata.ts +18 -0
  518. package/src/entry/compaction-prompt.ts +57 -0
  519. package/src/entry/extension-hook-sources.ts +28 -0
  520. package/src/entry/extension-reload.ts +309 -0
  521. package/src/entry/orchestrator.ts +464 -251
  522. package/src/entry/task-memory-lifecycle.ts +35 -0
  523. package/src/interactive/application-controller.ts +2 -1
  524. package/src/interactive/bus-notices.ts +8 -1
  525. package/src/interactive/chat-loop-messages.ts +16 -17
  526. package/src/interactive/chat-loop.ts +75 -3
  527. package/src/interactive/chat-panel.ts +36 -13
  528. package/src/interactive/chat-renderer.ts +72 -7
  529. package/src/interactive/cost-overlay.ts +26 -2
  530. package/src/interactive/dispatch-board.ts +6 -11
  531. package/src/interactive/footer/widgets.ts +13 -0
  532. package/src/interactive/interactive-application.ts +39 -4
  533. package/src/interactive/interactive-input-runtime.ts +4 -0
  534. package/src/interactive/interactive-presentation.ts +2 -2
  535. package/src/interactive/interactive-slash-runtime.ts +4 -1
  536. package/src/interactive/overlays/extensions.ts +9 -1
  537. package/src/interactive/overlays/help-reference.ts +13 -0
  538. package/src/interactive/overlays/settings.ts +27 -16
  539. package/src/interactive/panes-runtime.ts +111 -35
  540. package/src/interactive/prompt-cache-identity.ts +88 -0
  541. package/src/interactive/renderers/worker-entry.ts +32 -0
  542. package/src/interactive/slash-commands.ts +153 -20
  543. package/src/interactive/stream-pacing-policy.ts +0 -23
  544. package/src/interactive/theme/labels.ts +19 -13
  545. package/src/interactive/turn-context.ts +39 -20
  546. package/src/interactive/turn-recovery.ts +8 -0
  547. package/src/interactive/turn-runtime.ts +27 -11
  548. package/src/interactive/turn-state.ts +7 -0
  549. package/src/interactive/worker-receipts.ts +1 -0
  550. package/src/interactive/worker-stream.ts +6 -1
  551. package/src/interactive/yazi-bridge.ts +60 -6
  552. package/src/tools/agent-tools.ts +30 -1
  553. package/src/tools/artifact.ts +2 -2
  554. package/src/tools/ask-user.ts +3 -3
  555. package/src/tools/bash.ts +1 -1
  556. package/src/tools/bootstrap.ts +4 -0
  557. package/src/tools/builtin-tool-catalog.ts +52 -22
  558. package/src/tools/codewiki/code-nav-surface.ts +6 -0
  559. package/src/tools/codewiki/code-nav.ts +99 -13
  560. package/src/tools/context/docs-engine.ts +20 -7
  561. package/src/tools/context/index.ts +59 -21
  562. package/src/tools/core-bootstrap.ts +28 -6
  563. package/src/tools/credential-present.ts +1 -2
  564. package/src/tools/dispatch-arguments.ts +6 -1
  565. package/src/tools/dispatch-event-text.ts +10 -0
  566. package/src/tools/dispatch-plan.ts +49 -4
  567. package/src/tools/dispatch-run-events.ts +1 -1
  568. package/src/tools/dispatch-runner.ts +12 -0
  569. package/src/tools/dispatch-schema.ts +338 -0
  570. package/src/tools/dispatch-types.ts +3 -0
  571. package/src/tools/dispatch.ts +9 -254
  572. package/src/tools/ledger.ts +3 -5
  573. package/src/tools/monitor-surface.ts +5 -13
  574. package/src/tools/observation.ts +4 -5
  575. package/src/tools/panes-surface.ts +4 -11
  576. package/src/tools/panes.ts +4 -2
  577. package/src/tools/policy.ts +15 -2
  578. package/src/tools/read.ts +5 -6
  579. package/src/tools/registry.ts +41 -12
  580. package/src/tools/result-shaping.ts +18 -14
  581. package/src/tools/steer-surface.ts +1 -1
  582. package/src/tools/tasks.ts +1 -1
  583. package/src/tools/truncate.ts +6 -5
  584. package/src/tools/verify/surface.ts +6 -12
  585. package/src/tools/web-fetch-surface.ts +1 -3
  586. package/src/tools/worker-evidence.ts +3 -1
  587. package/src/worker/spec-contract.ts +4 -0
  588. package/dist/builtins-UJLMOVOV.js +0 -17
  589. package/dist/chunk-5QIAJV2D.js +0 -48
  590. package/dist/chunk-JZWT5J3Y.js +0 -814
  591. package/dist/chunk-K7VKOLQQ.js +0 -15
  592. package/dist/chunk-PMZCIOCJ.js +0 -25
  593. package/dist/chunk-SUW5DORT.js +0 -819
  594. package/dist/chunk-UOV2BYIW.js +0 -107
  595. package/dist/chunk-WR6U3OVP.js +0 -45
  596. package/dist/chunk-Y45G3AXC.js +0 -1558
  597. package/dist/reset-EOLM7GVE.js +0 -230
  598. package/dist/uninstall-N34PCTGJ.js +0 -331
  599. package/dist/upgrade-H7TOM7YL.js +0 -323
  600. package/docs/artifact-versions.md +0 -67
  601. package/docs/development-pipeline.md +0 -121
  602. package/docs/documentation-coverage.md +0 -46
  603. package/docs/documentation-guide.md +0 -167
  604. package/docs/time-conventions.md +0 -101
@@ -3,65 +3,62 @@ import {
3
3
  createSentinelStripper,
4
4
  stripTokenizerSentinels
5
5
  } from "./chunk-CFGTUFWB.js";
6
- import {
7
- credentialsPresent
8
- } from "./chunk-72GZI5EV.js";
9
6
  import {
10
7
  ceilChars,
11
8
  estimateAgentMessageTokens,
12
9
  toolSchemaChars
13
- } from "./chunk-CWVRRIEI.js";
14
- import {
15
- getSharedBus
16
- } from "./chunk-PMZVFWSR.js";
10
+ } from "./chunk-NZMNUPZZ.js";
17
11
  import {
18
- BusChannels
19
- } from "./chunk-HLW2MRKE.js";
12
+ credentialsPresent
13
+ } from "./chunk-2JH2WHGE.js";
20
14
  import {
21
15
  readSettings
22
- } from "./chunk-EIMVLWB3.js";
16
+ } from "./chunk-GHS5EBTQ.js";
23
17
  import {
24
18
  warnLegacyNaming
25
19
  } from "./chunk-D7E7WCDF.js";
26
20
  import {
27
- sleep
28
- } from "./chunk-EBY63B7G.js";
21
+ getSharedBus
22
+ } from "./chunk-PMZVFWSR.js";
23
+ import {
24
+ BusChannels
25
+ } from "./chunk-F4EKGO4N.js";
29
26
  import {
30
27
  CLIO_CONTEXT_WINDOW_WARN_BELOW,
31
28
  CLIO_MIN_CONTEXT_WINDOW,
32
29
  CLIO_MIN_MAX_OUTPUT_TOKENS,
30
+ EMPTY_CAPABILITIES,
31
+ VALID_THINKING_LEVELS,
32
+ availableThinkingLevels,
33
33
  extractLocalModelQuirks,
34
+ inferLocalModelFamily,
35
+ isHarmonyModelId,
34
36
  listLmStudioModels,
35
37
  lmStudioReasoningEffort,
36
38
  lmStudioRootUrl,
37
39
  registerBuiltinRuntimes,
38
40
  requestLmStudioJson,
39
41
  resolveLmStudioInstance
40
- } from "./chunk-QKIFBZKT.js";
42
+ } from "./chunk-VW6DOEDG.js";
43
+ import {
44
+ sleep
45
+ } from "./chunk-EBY63B7G.js";
41
46
  import {
42
47
  listKnownModelsForRuntime
43
- } from "./chunk-CDNVLKUX.js";
48
+ } from "./chunk-LLDJM5XK.js";
44
49
  import {
45
50
  authNotRequiredStatus,
46
51
  openAuthStorage,
47
52
  registerClioOAuthProviders,
48
53
  resolveAuthTarget,
49
54
  targetRequiresAuth
50
- } from "./chunk-WNP7O5WZ.js";
55
+ } from "./chunk-ID64D7PE.js";
51
56
  import {
52
57
  withStateFileLock
53
58
  } from "./chunk-IKCO5N3L.js";
54
59
  import {
55
60
  require_dist
56
61
  } from "./chunk-APJ265NV.js";
57
- import {
58
- clioCacheDir,
59
- clioConfigDir,
60
- clioStateDir,
61
- clioStatePath,
62
- resolveClioDirs,
63
- stateRootRemoved
64
- } from "./chunk-BYP5D4HI.js";
65
62
  import {
66
63
  safeResourceWrite
67
64
  } from "./chunk-WEPFGWHJ.js";
@@ -70,17 +67,24 @@ import {
70
67
  } from "./chunk-NUGM5KR6.js";
71
68
  import {
72
69
  capabilitiesFromCatalogModel,
73
- catalogThinkingLevelsForRuntime,
74
70
  getCatalogModelForRuntime,
75
71
  mergeCapabilities,
76
72
  resolveCostProvenance
77
- } from "./chunk-O42A54GG.js";
73
+ } from "./chunk-5OIVVPHF.js";
78
74
  import {
79
75
  activateExternalPluginApiBridge,
80
76
  calculateEngineCost,
81
77
  ensurePiAiRegistered,
82
78
  registerEngineApiProvider
83
- } from "./chunk-VXMFAE2W.js";
79
+ } from "./chunk-YPC6ZR5L.js";
80
+ import {
81
+ clioCacheDir,
82
+ clioConfigDir,
83
+ clioStateDir,
84
+ clioStatePath,
85
+ resolveClioDirs,
86
+ stateRootRemoved
87
+ } from "./chunk-BYP5D4HI.js";
84
88
  import {
85
89
  __toESM,
86
90
  init_esm_shims
@@ -430,7 +434,7 @@ function evictionNotice(facts, entry) {
430
434
  facts,
431
435
  "swap",
432
436
  "warning",
433
- `swapping resident '${entry.modelId}' for requested '${facts.keepModelId}' on '${facts.targetId}' (Clio did not load it; recorded transition instead of a silent unload; set CLIO_CODER_RESIDENCY=observe or lifecycle: user-managed to forbid swaps).`,
437
+ `swapping resident '${entry.modelId}' for requested '${facts.keepModelId}' on '${facts.targetId}' (Clio did not load it; recorded transition instead of a silent unload; set lifecycle: user-managed to forbid swaps).`,
434
438
  {
435
439
  ...entry.sizeVramBytes !== void 0 ? { freedVramBytes: entry.sizeVramBytes } : {},
436
440
  swappedOut: entry.modelId
@@ -733,16 +737,8 @@ async function reconcileResidency(adapter) {
733
737
  }
734
738
  return plan;
735
739
  }
736
- function residencyManaged(env = process.env) {
737
- const opt = (env.CLIO_CODER_RESIDENCY ?? "").trim().toLowerCase();
738
- if (opt === "observe" || opt === "off" || opt === "0" || opt === "false" || opt === "user" || opt === "user-managed") {
739
- return false;
740
- }
741
- return true;
742
- }
743
- function residencyManagedFor(lifecycle, env = process.env) {
744
- if (lifecycle === "user-managed") return false;
745
- return residencyManaged(env);
740
+ function residencyManagedFor(lifecycle) {
741
+ return lifecycle !== "user-managed";
746
742
  }
747
743
 
748
744
  // src/core/run-overrides.ts
@@ -790,97 +786,6 @@ async function withRunOverrides(overrides, fn) {
790
786
  }
791
787
  }
792
788
 
793
- // src/domains/providers/types/capability-flags.ts
794
- init_esm_shims();
795
-
796
- // src/domains/providers/model-family.ts
797
- init_esm_shims();
798
- function normalizeModelIdForFamily(modelId) {
799
- return (modelId ?? "").trim().toLowerCase().replace(/_/g, "-");
800
- }
801
- function isHarmonyModelId(modelId) {
802
- return normalizeModelIdForFamily(modelId).includes("gpt-oss");
803
- }
804
- function inferLocalModelFamily(modelId) {
805
- const normalized = normalizeModelIdForFamily(modelId);
806
- if (normalized.length === 0) return "unknown";
807
- if (normalized.includes("gpt-oss")) return "openai-gpt-oss";
808
- if (normalized.includes("nemotron-cascade-2") || normalized.includes("nemotron-cascade2")) {
809
- return "nemotron-cascade-2";
810
- }
811
- if (normalized.includes("nemotron-3-nano-omni") || normalized.includes("nemotron-nano-omni")) {
812
- return "nemotron-3-nano-omni";
813
- }
814
- if (normalized.includes("qwen3")) return "qwen3";
815
- if (normalized.includes("gemma-4") || normalized.includes("gemma4") || normalized.includes("gemopus")) {
816
- return "gemma-4";
817
- }
818
- return "unknown";
819
- }
820
-
821
- // src/domains/providers/types/capability-flags.ts
822
- var EMPTY_CAPABILITIES = {
823
- chat: false,
824
- tools: false,
825
- reasoning: false,
826
- vision: false,
827
- audio: false,
828
- embeddings: false,
829
- rerank: false,
830
- fim: false,
831
- contextWindow: 0,
832
- maxTokens: 0
833
- };
834
- var VALID_THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
835
- var THINKING_LEVELS_WITHOUT_XHIGH = ["off", "minimal", "low", "medium", "high"];
836
- var THINKING_LEVELS_OPENAI_5_1_MINI = ["off", "minimal", "low", "medium", "high"];
837
- var THINKING_LEVELS_OPENAI_5_2_PLUS = [
838
- "off",
839
- "minimal",
840
- "low",
841
- "medium",
842
- "high",
843
- "xhigh"
844
- ];
845
- var THINKING_LEVELS_OPENAI_5_6 = [...THINKING_LEVELS_OPENAI_5_2_PLUS, "max"];
846
- var THINKING_LEVELS_HARMONY = ["low", "medium", "high"];
847
- function normalizeModelId(modelId) {
848
- if (!modelId) return void 0;
849
- const trimmed = modelId.trim();
850
- if (trimmed.length === 0) return void 0;
851
- return trimmed.includes("/") ? trimmed.split("/").pop() ?? trimmed : trimmed;
852
- }
853
- function availableOpenAICodexThinkingLevels(modelId) {
854
- const normalized = normalizeModelId(modelId);
855
- if (!normalized) return VALID_THINKING_LEVELS;
856
- if (normalized === "gpt-5.1-codex-mini") return THINKING_LEVELS_OPENAI_5_1_MINI;
857
- if (normalized.startsWith("gpt-5.2") || normalized.startsWith("gpt-5.3") || normalized.startsWith("gpt-5.4") || normalized.startsWith("gpt-5.5")) {
858
- return THINKING_LEVELS_OPENAI_5_2_PLUS;
859
- }
860
- if (normalized.startsWith("gpt-5.6")) {
861
- return THINKING_LEVELS_OPENAI_5_6;
862
- }
863
- return THINKING_LEVELS_WITHOUT_XHIGH;
864
- }
865
- function availableThinkingLevels(caps, options) {
866
- if (!caps.reasoning) return ["off"];
867
- if (caps.thinkingFormat === "harmony" || isHarmonyModelId(options?.modelId)) {
868
- return THINKING_LEVELS_HARMONY;
869
- }
870
- const catalogLevels = options?.runtimeId && options.modelId ? catalogThinkingLevelsForRuntime(options.runtimeId, options.modelId) : void 0;
871
- if (catalogLevels) {
872
- if (!catalogLevels.includes("xhigh")) return catalogLevels.filter((level) => level !== "max");
873
- return catalogLevels;
874
- }
875
- if (caps.thinkingFormat === "openai-codex" || options?.runtimeId === "openai-codex") {
876
- return availableOpenAICodexThinkingLevels(options?.modelId);
877
- }
878
- if (caps.thinkingFormat === "anthropic-extended") {
879
- return THINKING_LEVELS_WITHOUT_XHIGH;
880
- }
881
- return THINKING_LEVELS_WITHOUT_XHIGH;
882
- }
883
-
884
789
  // src/domains/providers/model-capabilities.ts
885
790
  init_esm_shims();
886
791
  function normalizedModelId(wireModelId) {
@@ -892,6 +797,12 @@ function applyModelCapabilityPatch(model, caps) {
892
797
  if (typeof caps.contextWindow === "number") model.contextWindow = caps.contextWindow;
893
798
  if (typeof caps.maxTokens === "number") model.maxTokens = caps.maxTokens;
894
799
  if (typeof caps.reasoning === "boolean") model.reasoning = caps.reasoning;
800
+ if (model.clioCoder || caps.thinkingControlRuntime !== void 0) {
801
+ const metadata2 = { ...model.clioCoder };
802
+ delete metadata2.thinkingControlRuntime;
803
+ if (caps.thinkingControlRuntime !== void 0) metadata2.thinkingControlRuntime = caps.thinkingControlRuntime;
804
+ model.clioCoder = metadata2;
805
+ }
895
806
  return model;
896
807
  }
897
808
  function applyReasoningResolution(caps, kbHit, detectedReasoning) {
@@ -1140,14 +1051,15 @@ function supportedBudgetLevels(baseLevels, quirks) {
1140
1051
  function supportedEffortLevels(baseLevels, quirks, harmony) {
1141
1052
  if (harmony) return HARMONY_LEVELS;
1142
1053
  const efforts = quirks?.thinking?.effortByLevel;
1143
- if (!efforts) return baseLevels;
1054
+ const byLevelValues = (quirks?.chatTemplateKwargs ?? quirks?.thinking?.chatTemplateKwargs)?.byLevel?.values;
1055
+ if (!efforts && !byLevelValues) return baseLevels;
1144
1056
  const out = [];
1145
1057
  if (baseLevels.includes("off")) out.push("off");
1146
- if (efforts.minimal !== void 0) out.push("minimal");
1147
- if (efforts.low !== void 0) out.push("low");
1148
- if (efforts.medium !== void 0) out.push("medium");
1149
- if (efforts.high !== void 0) out.push("high");
1150
- if (efforts.xhigh !== void 0) out.push("xhigh");
1058
+ if (efforts?.minimal !== void 0 || byLevelValues?.minimal !== void 0) out.push("minimal");
1059
+ if (efforts?.low !== void 0 || byLevelValues?.low !== void 0) out.push("low");
1060
+ if (efforts?.medium !== void 0 || byLevelValues?.medium !== void 0) out.push("medium");
1061
+ if (efforts?.high !== void 0 || byLevelValues?.high !== void 0) out.push("high");
1062
+ if (efforts?.xhigh !== void 0 || byLevelValues?.xhigh !== void 0) out.push("xhigh");
1151
1063
  return out.length > 0 ? out : baseLevels;
1152
1064
  }
1153
1065
  function restrictThinkingLevelsByMechanism(levels, mechanism, quirks, options) {
@@ -1162,7 +1074,8 @@ function effectiveThinkingLevel(configured, available) {
1162
1074
  const fallback = available[0] ?? "off";
1163
1075
  if (!configured) return fallback;
1164
1076
  if (available.includes(configured)) return configured;
1165
- if (configured === "max" && available.includes("xhigh")) return "xhigh";
1077
+ if ((configured === "max" || configured === "high" && !available.includes("high")) && available.includes("xhigh"))
1078
+ return "xhigh";
1166
1079
  if ((configured === "high" || configured === "xhigh" || configured === "max") && available.includes("high")) {
1167
1080
  return "high";
1168
1081
  }
@@ -1283,12 +1196,45 @@ function resolveThinkingCapability(input, quirks, parser) {
1283
1196
  budgetEnforcement
1284
1197
  };
1285
1198
  }
1286
- var REASONING_EFFORT_ON_OFF_RUNTIMES = /* @__PURE__ */ new Set(["lmstudio"]);
1199
+ var REASONING_EFFORT_ONLY_RUNTIMES = /* @__PURE__ */ new Set(["lmstudio"]);
1287
1200
  function onOffReasoningEffort(thinkingActive) {
1288
1201
  return thinkingActive ? "low" : "none";
1289
1202
  }
1290
- function resolveRequestCapability(thinking, parser, runtimeId) {
1203
+ function resolveFamilyChatTemplateKwargs(quirks, effectiveLevel, configuredLevel) {
1204
+ const block = quirks?.chatTemplateKwargs ?? quirks?.thinking?.chatTemplateKwargs;
1205
+ if (!block) return void 0;
1206
+ const out = {};
1207
+ if (block.static) {
1208
+ for (const [k, v] of Object.entries(block.static)) {
1209
+ out[k] = v;
1210
+ }
1211
+ }
1212
+ if (block.byLevel) {
1213
+ const byLevel = block.byLevel;
1214
+ const val = byLevel.values[effectiveLevel] ?? byLevel.values[configuredLevel];
1215
+ if (val !== void 0) {
1216
+ out[byLevel.key] = val;
1217
+ }
1218
+ }
1219
+ return Object.keys(out).length > 0 ? out : void 0;
1220
+ }
1221
+ function familyKwargsDeclaredUnsupported(quirks, runtimeId) {
1222
+ if (runtimeId !== "lmstudio") return false;
1223
+ const block = quirks?.chatTemplateKwargs ?? quirks?.thinking?.chatTemplateKwargs;
1224
+ return block?.lmstudio === "unsupported" || block?.byLevel?.lmstudio === "unsupported";
1225
+ }
1226
+ function resolveRequestCapability(thinking, parser, runtimeId, quirks) {
1291
1227
  const request = { budgetEnforcement: thinking.budgetEnforcement };
1228
+ const effortOnly = REASONING_EFFORT_ONLY_RUNTIMES.has(runtimeId);
1229
+ const familyKwargs = resolveFamilyChatTemplateKwargs(quirks, thinking.effectiveLevel, thinking.configuredLevel);
1230
+ if (familyKwargs && effortOnly) {
1231
+ request.undeliverableChatTemplateKwargs = {
1232
+ keys: Object.keys(familyKwargs),
1233
+ declaredUnsupported: familyKwargsDeclaredUnsupported(quirks, runtimeId)
1234
+ };
1235
+ } else if (familyKwargs) {
1236
+ request.chatTemplateKwargs = { ...familyKwargs };
1237
+ }
1292
1238
  if (thinking.mechanism === "effort-levels" && thinking.effort) {
1293
1239
  request.reasoningEffort = thinking.effort;
1294
1240
  }
@@ -1299,15 +1245,16 @@ function resolveRequestCapability(thinking, parser, runtimeId) {
1299
1245
  request.budgetTokens = thinking.budgetTokens;
1300
1246
  }
1301
1247
  if (thinking.mechanism === "on-off" && thinking.chatTemplateKwargs) {
1302
- request.chatTemplateKwargs = { ...thinking.chatTemplateKwargs };
1303
- if (REASONING_EFFORT_ON_OFF_RUNTIMES.has(runtimeId)) {
1304
- request.reasoningEffort = onOffReasoningEffort(thinking.thinkingActive);
1305
- }
1248
+ request.chatTemplateKwargs = { ...request.chatTemplateKwargs ?? {}, ...thinking.chatTemplateKwargs };
1306
1249
  }
1307
1250
  if (parser === "harmony" && thinking.effort) {
1308
1251
  request.reasoningEffort = thinking.effort;
1309
1252
  request.chatTemplateKwargs = { ...request.chatTemplateKwargs ?? {}, reasoning_effort: thinking.effort };
1310
1253
  }
1254
+ if (effortOnly && thinking.mechanism !== "none" && thinking.mechanism !== "always-on") {
1255
+ if (!thinking.thinkingActive) request.reasoningEffort = onOffReasoningEffort(false);
1256
+ else if (thinking.mechanism === "on-off") request.reasoningEffort = onOffReasoningEffort(true);
1257
+ }
1311
1258
  return request;
1312
1259
  }
1313
1260
  function resolveModelRuntimeCapabilities(input) {
@@ -1323,7 +1270,12 @@ function resolveModelRuntimeCapabilities(input) {
1323
1270
  family,
1324
1271
  capabilities: input.capabilities,
1325
1272
  thinking,
1326
- request: resolveRequestCapability(thinking, parser, input.runtimeId),
1273
+ request: resolveRequestCapability(
1274
+ thinking,
1275
+ parser,
1276
+ input.runtimeId === "litellm" ? input.capabilities.thinkingControlRuntime ?? input.runtimeId : input.runtimeId,
1277
+ quirks
1278
+ ),
1327
1279
  response: {
1328
1280
  parser,
1329
1281
  stripTokenizerSentinels: true
@@ -1389,6 +1341,7 @@ function thinkingFormatFromModelApi(api) {
1389
1341
  }
1390
1342
  function capabilitiesFromModel(model) {
1391
1343
  const format = model.compat?.thinkingFormat ?? thinkingFormatFromModelApi(model.api);
1344
+ const controlRuntime = (model.clioCoder ?? model.clio)?.thinkingControlRuntime;
1392
1345
  const caps = {
1393
1346
  chat: true,
1394
1347
  tools: true,
@@ -1399,7 +1352,8 @@ function capabilitiesFromModel(model) {
1399
1352
  rerank: false,
1400
1353
  fim: false,
1401
1354
  contextWindow: model.contextWindow,
1402
- maxTokens: model.maxTokens
1355
+ maxTokens: model.maxTokens,
1356
+ ...controlRuntime ? { thinkingControlRuntime: controlRuntime } : {}
1403
1357
  };
1404
1358
  if (format === "qwen-chat-template" || format === "openrouter" || format === "zai" || format === "anthropic-extended" || format === "deepseek-r1" || format === "openai-codex" || format === "harmony") {
1405
1359
  caps.thinkingFormat = format;
@@ -1471,6 +1425,21 @@ function normalizedModels(models) {
1471
1425
  }
1472
1426
  return out;
1473
1427
  }
1428
+ function normalizedLabels(models, labels) {
1429
+ if (typeof labels !== "object" || labels === null || Array.isArray(labels)) return void 0;
1430
+ const source = labels;
1431
+ const out = {};
1432
+ for (const id of models) {
1433
+ const label = source[id];
1434
+ if (typeof label !== "string") continue;
1435
+ const trimmed = label.trim();
1436
+ if (trimmed.length === 0 || trimmed.length > TARGET_MODEL_CACHE_MAX_MODEL_ID_CHARS || /[\r\n\0]/u.test(trimmed)) {
1437
+ continue;
1438
+ }
1439
+ out[id] = trimmed;
1440
+ }
1441
+ return Object.keys(out).length > 0 ? out : void 0;
1442
+ }
1474
1443
  function parseSnapshot(value) {
1475
1444
  if (typeof value !== "object" || value === null || Array.isArray(value)) return null;
1476
1445
  const row = value;
@@ -1482,7 +1451,7 @@ function parseSnapshot(value) {
1482
1451
  if (typeof row.observedAt !== "string" || !Number.isFinite(Date.parse(row.observedAt))) return null;
1483
1452
  const models = normalizedModels(row.models);
1484
1453
  if (models.length !== row.models.length) return null;
1485
- return {
1454
+ const snapshot = {
1486
1455
  version: TARGET_MODEL_CACHE_VERSION,
1487
1456
  targetId: row.targetId,
1488
1457
  runtimeId: row.runtimeId,
@@ -1490,6 +1459,9 @@ function parseSnapshot(value) {
1490
1459
  models,
1491
1460
  observedAt: row.observedAt
1492
1461
  };
1462
+ const modelLabels = normalizedLabels(models, row.modelLabels);
1463
+ if (modelLabels !== void 0) snapshot.modelLabels = modelLabels;
1464
+ return snapshot;
1493
1465
  }
1494
1466
  function readTargetModelSnapshot(target, options = {}) {
1495
1467
  const path = targetModelSnapshotPath(target.id, options.cacheDir);
@@ -1518,6 +1490,8 @@ function recordTargetModelSnapshot(target, models, options = {}) {
1518
1490
  models: normalizedModels(models),
1519
1491
  observedAt: new Date(options.nowMs ?? Date.now()).toISOString()
1520
1492
  };
1493
+ const modelLabels = normalizedLabels(snapshot.models, options.modelLabels);
1494
+ if (modelLabels !== void 0) snapshot.modelLabels = modelLabels;
1521
1495
  try {
1522
1496
  safeResourceWrite(targetModelSnapshotPath(target.id, options.cacheDir), `${JSON.stringify(snapshot, null, 2)}
1523
1497
  `, {
@@ -1591,6 +1565,7 @@ function modelCandidatesForStatus(status) {
1591
1565
  const state = status.discoveredModelStates?.[trimmed];
1592
1566
  out.push({
1593
1567
  id: trimmed,
1568
+ ...status.discoveredModelLabels?.[trimmed] ? { label: status.discoveredModelLabels[trimmed] } : {},
1594
1569
  source,
1595
1570
  ...state ? { loadState: state.state } : {},
1596
1571
  ...state?.detail ? { loadStateDetail: state.detail } : {}
@@ -1821,6 +1796,20 @@ function appendThinkingDiagnostics(diagnostics, resolved, requested) {
1821
1796
  const severity = thinking.noticeKind === "unsupported" || thinking.noticeKind === "always-on" || thinking.noticeKind === "ignored-on-off" ? "warning" : "info";
1822
1797
  diagnostics.push(diagnostic(severity, `thinking-${thinking.noticeKind}`, thinking.notice));
1823
1798
  }
1799
+ var CHAT_TEMPLATE_KWARGS_UNDELIVERABLE = "chat-template-kwargs-undeliverable";
1800
+ function appendChatTemplateKwargsDiagnostics(diagnostics, resolved) {
1801
+ const undeliverable = resolved.request.undeliverableChatTemplateKwargs;
1802
+ if (!undeliverable || undeliverable.keys.length === 0) return;
1803
+ const keys = undeliverable.keys.join(", ");
1804
+ const declared = undeliverable.declaredUnsupported ? "its family entry marks them unsupported there" : "its family entry does not say so";
1805
+ diagnostics.push(
1806
+ diagnostic(
1807
+ "warning",
1808
+ CHAT_TEMPLATE_KWARGS_UNDELIVERABLE,
1809
+ `chat-template kwargs ${keys} cannot reach ${resolved.runtimeId}, which ignores chat_template_kwargs; ${resolved.modelId} runs without them and ${declared}`
1810
+ )
1811
+ );
1812
+ }
1824
1813
  function nonNegativeFiniteNumber(value) {
1825
1814
  return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : void 0;
1826
1815
  }
@@ -1948,6 +1937,7 @@ function resolveRuntimeTarget(providers, input) {
1948
1937
  const decisions = capabilityDecisions(runtime, capabilities);
1949
1938
  appendCapabilityDiagnostics(diagnostics, input, capabilities, decisions, targetId);
1950
1939
  appendThinkingDiagnostics(diagnostics, modelRuntime, requestedThinkingLevel);
1940
+ appendChatTemplateKwargsDiagnostics(diagnostics, modelRuntime);
1951
1941
  if (hasError(diagnostics)) return { ok: false, diagnostics };
1952
1942
  const resolved = {
1953
1943
  targetId: target.id,
@@ -1987,6 +1977,7 @@ function modelHintPatch(target, model) {
1987
1977
  function withoutStaleRuntimeDiagnostics(diagnostics, decisions) {
1988
1978
  return diagnostics.filter((entry) => {
1989
1979
  if (entry.code.startsWith("thinking-")) return false;
1980
+ if (entry.code === CHAT_TEMPLATE_KWARGS_UNDELIVERABLE) return false;
1990
1981
  if (entry.code === "output-budget-unknown" && decisions.maxTokens > 0) return false;
1991
1982
  if (entry.code === "tools-unsupported" && decisions.tools) return false;
1992
1983
  return true;
@@ -2025,6 +2016,7 @@ function refineRuntimeTargetWithModelHints(target, model, knowledgeBase) {
2025
2016
  const decisions = capabilityDecisions(target.runtime, capabilities);
2026
2017
  const diagnostics = withoutStaleRuntimeDiagnostics(target.diagnostics, decisions);
2027
2018
  appendThinkingDiagnostics(diagnostics, modelRuntime, target.requestedThinkingLevel);
2019
+ appendChatTemplateKwargsDiagnostics(diagnostics, modelRuntime);
2028
2020
  return {
2029
2021
  ...target,
2030
2022
  capabilities,
@@ -2152,6 +2144,15 @@ init_esm_shims();
2152
2144
  function normalizeCostProvenance(value) {
2153
2145
  return value ?? "unknown";
2154
2146
  }
2147
+ var COST_PROVENANCE_VALUES = /* @__PURE__ */ new Set([
2148
+ "known",
2149
+ "known_free",
2150
+ "estimated",
2151
+ "unknown"
2152
+ ]);
2153
+ function resolveCostProvenance2(value, fallback) {
2154
+ return typeof value === "string" && COST_PROVENANCE_VALUES.has(value) ? value : fallback;
2155
+ }
2155
2156
 
2156
2157
  // src/domains/providers/index.ts
2157
2158
  init_esm_shims();
@@ -2185,6 +2186,9 @@ function residencyTargetKey(runtimeId, baseUrl) {
2185
2186
  // src/engine/gemma-channel-filter.ts
2186
2187
  init_esm_shims();
2187
2188
  import { createAssistantMessageEventStream } from "@earendil-works/pi-ai";
2189
+ function usesGemmaChannelMarkers(modelId) {
2190
+ return inferLocalModelFamily(modelId) === "gemma-4";
2191
+ }
2188
2192
  var THOUGHT_START = /<\|channel>[^\n]*\n/;
2189
2193
  var BARE_THOUGHT_START = /^\s*(?:thought|own[- ]?(?:thought|think))\s*\n/i;
2190
2194
  var BARE_THOUGHT_ONLY = /^\s*(?:thought|own[- ]?(?:thought|think))\s*$/i;
@@ -2384,7 +2388,6 @@ var globalDefaultMaxOutputTokens = 0;
2384
2388
  function setGlobalDefaultMaxOutputTokens(value) {
2385
2389
  globalDefaultMaxOutputTokens = Number.isFinite(value) && value > 0 ? Math.floor(value) : 0;
2386
2390
  }
2387
- var LOCAL_TOOL_TURN_MAX_OUTPUT_TOKENS = CLIO_MIN_MAX_OUTPUT_TOKENS;
2388
2391
  function resolveReservedOutputTokens(maxOutputTokens) {
2389
2392
  const limit = typeof maxOutputTokens === "number" && Number.isFinite(maxOutputTokens) && maxOutputTokens > 0 ? maxOutputTokens : DEFAULT_MAX_OUTPUT_TOKENS;
2390
2393
  return Math.min(limit, DEFAULT_MAX_OUTPUT_TOKENS);
@@ -2403,7 +2406,7 @@ function remainingContextMaxTokens(model, context, options, limits) {
2403
2406
  const contextWindow = Math.min(configuredContextWindow, loadedContextWindow);
2404
2407
  const budget = Number.isFinite(contextWindow) ? Math.max(1, contextWindow - inputTokens - safety) : Number.POSITIVE_INFINITY;
2405
2408
  const modelLimit = model.maxTokens > 0 ? model.maxTokens : Number.POSITIVE_INFINITY;
2406
- const defaultLimit = limits?.maxOutputTokens !== void 0 && limits.maxOutputTokens > 0 ? limits.maxOutputTokens : globalDefaultMaxOutputTokens > 0 ? globalDefaultMaxOutputTokens : modelLimit;
2409
+ const defaultLimit = limits?.maxOutputTokens !== void 0 && limits.maxOutputTokens > 0 ? limits.maxOutputTokens : globalDefaultMaxOutputTokens > 0 ? globalDefaultMaxOutputTokens : model.maxTokens > 0 ? modelLimit : DEFAULT_MAX_OUTPUT_TOKENS;
2407
2410
  const requested = options?.maxTokens ?? defaultLimit;
2408
2411
  const resolved = Math.min(requested, modelLimit, budget);
2409
2412
  return Number.isFinite(resolved) ? resolved : DEFAULT_MAX_OUTPUT_TOKENS;
@@ -2441,15 +2444,15 @@ function mergeSamplingOverride(profile, override = runSamplingOverrides()) {
2441
2444
  // src/engine/apis/ollama-native.ts
2442
2445
  var REASONING_CHARS_PER_TOKEN = 4;
2443
2446
  function clioQuirks(model) {
2444
- return model.clio?.quirks;
2447
+ return model.clioCoder?.quirks;
2445
2448
  }
2446
2449
  function ollamaTargetId(model) {
2447
- return model.clio?.targetId ?? model.provider;
2450
+ return model.clioCoder?.targetId ?? model.provider;
2448
2451
  }
2449
2452
  async function reconcileOllamaResidency(model, headers) {
2450
2453
  const baseUrl = model.baseUrl;
2451
2454
  if (!baseUrl) return;
2452
- const metadata2 = model.clio;
2455
+ const metadata2 = model.clioCoder;
2453
2456
  const adapter = {
2454
2457
  targetKey: residencyTargetKey("ollama-native", baseUrl),
2455
2458
  targetId: ollamaTargetId(model),
@@ -2681,7 +2684,7 @@ function runStream(model, context, options, thinkingLevel) {
2681
2684
  let doneReason;
2682
2685
  const sentinelStripper = createSentinelStripper();
2683
2686
  const resolved = resolveModelRuntimeCapabilitiesForModel(model, thinkingLevel);
2684
- const channelFilter = resolved.family === "gemma-4" ? createGemmaChannelFilter() : null;
2687
+ const channelFilter = usesGemmaChannelMarkers(resolved.modelId) ? createGemmaChannelFilter() : null;
2685
2688
  const closeActiveThinking = () => {
2686
2689
  if (!activeThinking) return;
2687
2690
  stream.push({
@@ -2828,6 +2831,115 @@ import {
2828
2831
  } from "@earendil-works/pi-ai";
2829
2832
  import { openAICompletionsApi } from "@earendil-works/pi-ai/api/openai-completions.lazy";
2830
2833
 
2834
+ // src/core/gateway-routing.ts
2835
+ init_esm_shims();
2836
+ function liteLLMRouteFailureMessage(errorMessage, targetId, modelId) {
2837
+ const providerMessage = errorMessage?.trim() || "LiteLLM request failed.";
2838
+ const advice = `LiteLLM route '${modelId}' on target '${targetId}' failed. Clio did not retry or substitute another model; select a different route with /model, then resend.`;
2839
+ return providerMessage.includes(advice) ? providerMessage : `${providerMessage}
2840
+
2841
+ ${advice}`;
2842
+ }
2843
+ function nonEmptyString(value) {
2844
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
2845
+ }
2846
+ function nonnegativeNumber(value) {
2847
+ if (typeof value === "number" && Number.isFinite(value) && value >= 0) return value;
2848
+ if (typeof value !== "string" || value.trim().length === 0) return void 0;
2849
+ const parsed = Number(value);
2850
+ return Number.isFinite(parsed) && parsed >= 0 ? parsed : void 0;
2851
+ }
2852
+ function nonnegativeInteger(value) {
2853
+ const parsed = nonnegativeNumber(value);
2854
+ return parsed === void 0 ? void 0 : Math.floor(parsed);
2855
+ }
2856
+ function apiBaseHost(value) {
2857
+ const raw = nonEmptyString(value);
2858
+ if (raw === void 0) return void 0;
2859
+ try {
2860
+ return new URL(raw).host || void 0;
2861
+ } catch {
2862
+ return void 0;
2863
+ }
2864
+ }
2865
+ function storedApiBaseHost(value) {
2866
+ const raw = nonEmptyString(value);
2867
+ if (raw === void 0) return void 0;
2868
+ try {
2869
+ return new URL(raw.includes("://") ? raw : `http://${raw}`).host || void 0;
2870
+ } catch {
2871
+ return void 0;
2872
+ }
2873
+ }
2874
+ function liteLLMGatewayRoutingFromHeaders(headers) {
2875
+ const callId = nonEmptyString(headers.get("x-litellm-call-id"));
2876
+ const modelGroup = nonEmptyString(headers.get("x-litellm-model-group"));
2877
+ const modelName = nonEmptyString(headers.get("x-litellm-model-name"));
2878
+ const host = apiBaseHost(headers.get("x-litellm-model-api-base"));
2879
+ const deploymentId = nonEmptyString(headers.get("x-litellm-model-id"));
2880
+ const attemptedFallbacks = nonnegativeInteger(headers.get("x-litellm-attempted-fallbacks"));
2881
+ const attemptedRetries = nonnegativeInteger(headers.get("x-litellm-attempted-retries"));
2882
+ const overheadMs = nonnegativeNumber(headers.get("x-litellm-overhead-duration-ms"));
2883
+ const responseDurationMs = nonnegativeNumber(headers.get("x-litellm-response-duration-ms"));
2884
+ const version = nonEmptyString(headers.get("x-litellm-version"));
2885
+ const observation = {
2886
+ gateway: "litellm",
2887
+ ...callId !== void 0 ? { callId } : {},
2888
+ ...modelGroup !== void 0 ? { modelGroup } : {},
2889
+ ...modelName !== void 0 ? { modelName } : {},
2890
+ ...host !== void 0 ? { apiBaseHost: host } : {},
2891
+ ...deploymentId !== void 0 ? { deploymentId } : {},
2892
+ ...attemptedFallbacks !== void 0 ? { attemptedFallbacks } : {},
2893
+ ...attemptedRetries !== void 0 ? { attemptedRetries } : {},
2894
+ ...overheadMs !== void 0 ? { overheadMs } : {},
2895
+ ...responseDurationMs !== void 0 ? { responseDurationMs } : {},
2896
+ ...version !== void 0 ? { version } : {}
2897
+ };
2898
+ return Object.keys(observation).length > 1 ? observation : null;
2899
+ }
2900
+ function gatewayRoutingObservationFromRecord(record) {
2901
+ const value = record.gatewayRouting;
2902
+ if (value === null || typeof value !== "object" || Array.isArray(value)) return null;
2903
+ const raw = value;
2904
+ if (raw.gateway !== "litellm") return null;
2905
+ const callId = nonEmptyString(raw.callId);
2906
+ const modelGroup = nonEmptyString(raw.modelGroup);
2907
+ const modelName = nonEmptyString(raw.modelName);
2908
+ const host = storedApiBaseHost(raw.apiBaseHost);
2909
+ const deploymentId = nonEmptyString(raw.deploymentId);
2910
+ const attemptedFallbacks = nonnegativeInteger(raw.attemptedFallbacks);
2911
+ const attemptedRetries = nonnegativeInteger(raw.attemptedRetries);
2912
+ const overheadMs = nonnegativeNumber(raw.overheadMs);
2913
+ const responseDurationMs = nonnegativeNumber(raw.responseDurationMs);
2914
+ const version = nonEmptyString(raw.version);
2915
+ const observation = {
2916
+ gateway: "litellm",
2917
+ ...callId !== void 0 ? { callId } : {},
2918
+ ...modelGroup !== void 0 ? { modelGroup } : {},
2919
+ ...modelName !== void 0 ? { modelName } : {},
2920
+ ...host !== void 0 ? { apiBaseHost: host } : {},
2921
+ ...deploymentId !== void 0 ? { deploymentId } : {},
2922
+ ...attemptedFallbacks !== void 0 ? { attemptedFallbacks } : {},
2923
+ ...attemptedRetries !== void 0 ? { attemptedRetries } : {},
2924
+ ...overheadMs !== void 0 ? { overheadMs } : {},
2925
+ ...responseDurationMs !== void 0 ? { responseDurationMs } : {},
2926
+ ...version !== void 0 ? { version } : {}
2927
+ };
2928
+ return Object.keys(observation).length > 1 ? observation : null;
2929
+ }
2930
+ function gatewayRoutingObservationLabel(observation) {
2931
+ const route = [observation.modelGroup, observation.modelName].filter(Boolean).join("->");
2932
+ const destination = [route, observation.apiBaseHost ? `@${observation.apiBaseHost}` : ""].filter(Boolean).join("");
2933
+ const parts = [
2934
+ "gateway=litellm",
2935
+ ...destination ? [`route=${destination}`] : [],
2936
+ ...observation.attemptedFallbacks !== void 0 ? [`fallbacks=${observation.attemptedFallbacks}`] : [],
2937
+ ...observation.attemptedRetries !== void 0 ? [`retries=${observation.attemptedRetries}`] : [],
2938
+ ...observation.overheadMs !== void 0 ? [`overhead_ms=${observation.overheadMs}`] : []
2939
+ ];
2940
+ return parts.join(" ");
2941
+ }
2942
+
2831
2943
  // src/engine/harmony-response.ts
2832
2944
  init_esm_shims();
2833
2945
  var START = "<|start|>";
@@ -3113,7 +3225,7 @@ async function ensureLlamaCppResidency(input) {
3113
3225
  targetId: input.targetId,
3114
3226
  runtimeId: input.runtimeId,
3115
3227
  keepModelId: input.keepModelId,
3116
- managed: input.managed ?? residencyManaged(),
3228
+ managed: input.managed ?? true,
3117
3229
  strategy: "router",
3118
3230
  listResident: async () => {
3119
3231
  const models = await fetchRouterModels(input, fetchImpl);
@@ -3193,7 +3305,7 @@ function responseInstanceId(data) {
3193
3305
  return typeof id === "string" && id.trim().length > 0 ? id.trim() : void 0;
3194
3306
  }
3195
3307
  function metadata(model) {
3196
- return model.clio;
3308
+ return model.clioCoder;
3197
3309
  }
3198
3310
  function targetForModel(model) {
3199
3311
  const info = metadata(model);
@@ -3390,10 +3502,10 @@ async function ensureLmStudioResidency(model, options = {}) {
3390
3502
  var piOpenAICompletions = openAICompletionsApi();
3391
3503
  var REASONING_CHARS_PER_TOKEN2 = 4;
3392
3504
  function chatTemplateKwargsUnsupported(model) {
3393
- return model.clio?.chatTemplateKwargsUnsupported === true;
3505
+ return model.clioCoder?.chatTemplateKwargsUnsupported === true;
3394
3506
  }
3395
3507
  function clioQuirks2(model) {
3396
- return model.clio?.quirks;
3508
+ return model.clioCoder?.quirks;
3397
3509
  }
3398
3510
  function pickSamplingProfile2(quirks, thinkingActive) {
3399
3511
  const sampling = quirks?.sampling;
@@ -3424,7 +3536,7 @@ function backendCompletionTimings(value, source) {
3424
3536
  };
3425
3537
  }
3426
3538
  function backendTimingsSourceForModel(model) {
3427
- const metadata2 = model.clio;
3539
+ const metadata2 = model.clioCoder;
3428
3540
  if (model.provider === "llamacpp" && metadata2?.runtimeId === "llamacpp") return "llamacpp-timings";
3429
3541
  if (model.provider === "lmstudio" && metadata2?.runtimeId === "lmstudio") return "lmstudio-timings";
3430
3542
  return null;
@@ -3475,7 +3587,10 @@ function observeResponseModelIdBytes(chunk, capture, flush = false) {
3475
3587
  }
3476
3588
  if (captureCanStopEarly(capture) || flush) capture.decoder = null;
3477
3589
  }
3478
- function captureResponseModelId(response, capture) {
3590
+ function captureResponseModelId(response, capture, model) {
3591
+ if (runtimeMetadata(model)?.runtimeId === "litellm") {
3592
+ capture.gatewayRouting = liteLLMGatewayRoutingFromHeaders(response.headers);
3593
+ }
3479
3594
  if (!response.body || !response.headers.get("content-type")?.toLowerCase().includes("text/event-stream")) {
3480
3595
  return response;
3481
3596
  }
@@ -3505,13 +3620,14 @@ function withResponseModelIdCapture(model, options, sourceFactory) {
3505
3620
  modelIdDone: false,
3506
3621
  backendTimings: null,
3507
3622
  backendTimingsSource: backendTimingsSourceForModel(model),
3623
+ gatewayRouting: null,
3508
3624
  buffer: "",
3509
3625
  decoder: new TextDecoder()
3510
3626
  };
3511
3627
  const fetchImpl = options.fetch ?? ((input, init) => globalThis.fetch(input, init));
3512
3628
  const capturedOptions = {
3513
3629
  ...options,
3514
- fetch: async (input, init) => captureResponseModelId(await fetchImpl(input, init), capture)
3630
+ fetch: async (input, init) => captureResponseModelId(await fetchImpl(input, init), capture, model)
3515
3631
  };
3516
3632
  const source = sourceFactory(capturedOptions);
3517
3633
  const annotated = createAssistantMessageEventStream3();
@@ -3521,9 +3637,11 @@ function withResponseModelIdCapture(model, options, sourceFactory) {
3521
3637
  const observation = capture.observed ? capture.reportedModelId === null ? { state: "not-reported" } : { state: "reported", reportedModelId: capture.reportedModelId } : { state: "not-observed" };
3522
3638
  if (event.type === "done") {
3523
3639
  event.message.responseModelIdObservation = observation;
3640
+ if (capture.gatewayRouting !== null) event.message.gatewayRouting = capture.gatewayRouting;
3524
3641
  if (capture.backendTimings !== null) event.message.backendTimings = capture.backendTimings;
3525
3642
  } else if (event.type === "error") {
3526
3643
  event.error.responseModelIdObservation = observation;
3644
+ if (capture.gatewayRouting !== null) event.error.gatewayRouting = capture.gatewayRouting;
3527
3645
  if (capture.backendTimings !== null) event.error.backendTimings = capture.backendTimings;
3528
3646
  }
3529
3647
  annotated.push(event);
@@ -3536,6 +3654,26 @@ function withResponseModelIdCapture(model, options, sourceFactory) {
3536
3654
  })();
3537
3655
  return annotated;
3538
3656
  }
3657
+ function withLiteLLMRouteFailureAdvice(model, source) {
3658
+ const metadata2 = runtimeMetadata(model);
3659
+ if (metadata2?.runtimeId !== "litellm") return source;
3660
+ const advised = createAssistantMessageEventStream3();
3661
+ (async () => {
3662
+ try {
3663
+ for await (const event of source) {
3664
+ if (event.type === "error") {
3665
+ event.error.errorMessage = liteLLMRouteFailureMessage(event.error.errorMessage, metadata2.targetId, model.id);
3666
+ }
3667
+ advised.push(event);
3668
+ }
3669
+ advised.end();
3670
+ } catch (err) {
3671
+ const message = err instanceof Error ? err.message : String(err);
3672
+ throw new Error(liteLLMRouteFailureMessage(message, metadata2.targetId, model.id));
3673
+ }
3674
+ })();
3675
+ return advised;
3676
+ }
3539
3677
  function samplingParamsFromProfile(profile) {
3540
3678
  return {
3541
3679
  ...profile.topP !== void 0 ? { top_p: profile.topP } : {},
@@ -3602,12 +3740,31 @@ function withStrippedPartial(event) {
3602
3740
  return { ...event, partial: stripThinkingFromMessage(event.partial) };
3603
3741
  }
3604
3742
  function applyThinkingPayload(payload, applied, resolved, model) {
3605
- if (applied.mechanism === "none") return stripThinkingRequestFields(payload);
3606
- if (applied.mechanism === "always-on") return payload;
3743
+ if (applied.mechanism === "none") {
3744
+ const next2 = stripThinkingRequestFields(payload);
3745
+ if (resolved.request.chatTemplateKwargs && !chatTemplateKwargsUnsupported(model)) {
3746
+ const existing = isPlainRecord(next2.chat_template_kwargs) ? next2.chat_template_kwargs : {};
3747
+ next2.chat_template_kwargs = { ...existing, ...resolved.request.chatTemplateKwargs };
3748
+ }
3749
+ return next2;
3750
+ }
3751
+ if (applied.mechanism === "always-on") {
3752
+ if (resolved.request.chatTemplateKwargs && !chatTemplateKwargsUnsupported(model)) {
3753
+ const next2 = { ...payload };
3754
+ const existing = isPlainRecord(next2.chat_template_kwargs) ? next2.chat_template_kwargs : {};
3755
+ next2.chat_template_kwargs = { ...existing, ...resolved.request.chatTemplateKwargs };
3756
+ return next2;
3757
+ }
3758
+ return payload;
3759
+ }
3607
3760
  const next = { ...payload };
3608
3761
  if (resolved.request.reasoningEffort && (next.reasoning_effort === void 0 || resolved.response.parser === "harmony")) {
3609
3762
  next.reasoning_effort = resolved.request.reasoningEffort;
3610
3763
  }
3764
+ if (resolved.runtimeId === "litellm" && resolved.request.reasoningEffort && next.reasoning_effort === resolved.request.reasoningEffort) {
3765
+ const allowed = Array.isArray(next.allowed_openai_params) ? next.allowed_openai_params : [];
3766
+ next.allowed_openai_params = [.../* @__PURE__ */ new Set([...allowed, "reasoning_effort"])];
3767
+ }
3611
3768
  if (resolved.request.chatTemplateKwargs && !chatTemplateKwargsUnsupported(model)) {
3612
3769
  const existing = isPlainRecord(next.chat_template_kwargs) ? next.chat_template_kwargs : {};
3613
3770
  next.chat_template_kwargs = { ...existing, ...resolved.request.chatTemplateKwargs };
@@ -3629,13 +3786,13 @@ function applyLmStudioPayload(payload, model, resolved) {
3629
3786
  if (request?.ttlSeconds !== void 0) next.ttl = request.ttlSeconds;
3630
3787
  if (request?.draftModel !== void 0) next.draft_model = request.draftModel;
3631
3788
  if (resolved.thinking.mechanism === "none" || resolved.thinking.mechanism === "always-on") return next;
3632
- const resolvedEffort = resolved.request.reasoningEffort ?? lmStudioReasoningEffort(resolved.thinking.effectiveLevel, runtimeMetadata(model)?.lmstudioReasoningOptions);
3789
+ const resolvedEffort = runtimeMetadata(model)?.lmstudioReasoningOptions ? lmStudioReasoningEffort(resolved.thinking.effectiveLevel, runtimeMetadata(model)?.lmstudioReasoningOptions) : resolved.request.reasoningEffort ?? lmStudioReasoningEffort(resolved.thinking.effectiveLevel);
3633
3790
  switch (request?.reasoning) {
3634
3791
  case "off":
3635
- next.reasoning_effort = "none";
3792
+ next.reasoning_effort = lmStudioReasoningEffort("off", runtimeMetadata(model)?.lmstudioReasoningOptions);
3636
3793
  break;
3637
3794
  case "on":
3638
- next.reasoning_effort = "low";
3795
+ next.reasoning_effort = lmStudioReasoningEffort("low", runtimeMetadata(model)?.lmstudioReasoningOptions);
3639
3796
  break;
3640
3797
  case "low":
3641
3798
  case "medium":
@@ -3734,16 +3891,39 @@ function thinkingLevelFromSimple2(options) {
3734
3891
  return reasoning;
3735
3892
  }
3736
3893
  function withRemainingContextBudget(model, context, options) {
3737
- const metadata2 = runtimeMetadata(model);
3738
- const localToolOutputLimit = options?.maxTokens === void 0 && (context.tools?.length ?? 0) > 0 && (model.provider === "llamacpp" || metadata2?.runtimeId === "llamacpp") ? LOCAL_TOOL_TURN_MAX_OUTPUT_TOKENS : void 0;
3739
3894
  return {
3740
3895
  ...options ?? {},
3741
- maxTokens: remainingContextMaxTokens(
3742
- model,
3743
- context,
3744
- options,
3745
- localToolOutputLimit === void 0 ? void 0 : { maxOutputTokens: localToolOutputLimit }
3746
- )
3896
+ maxTokens: remainingContextMaxTokens(model, context, options)
3897
+ };
3898
+ }
3899
+ function hasHeader(headers, name) {
3900
+ if (!headers) return false;
3901
+ const wanted = name.toLowerCase();
3902
+ return Object.keys(headers).some((key) => key.toLowerCase() === wanted);
3903
+ }
3904
+ function withLiteLLMRequestOptions(model, options) {
3905
+ const metadata2 = runtimeMetadata(model);
3906
+ if (metadata2?.runtimeId !== "litellm") return options;
3907
+ const request = metadata2.litellm?.request;
3908
+ const modelHeaders = model.headers;
3909
+ const optionHeaders = options.headers;
3910
+ const headers = { ...options.headers ?? {} };
3911
+ const setDefault = (name, value) => {
3912
+ if (value === void 0 || hasHeader(modelHeaders, name) || hasHeader(optionHeaders, name)) return;
3913
+ headers[name] = value;
3914
+ };
3915
+ setDefault("x-litellm-tags", ["clio-coder", ...request?.tags ?? []].join(","));
3916
+ if (request?.sendSessionId !== false) setDefault("x-litellm-session-id", options.sessionId);
3917
+ setDefault("x-litellm-timeout", request?.timeoutSeconds?.toString());
3918
+ setDefault("x-litellm-stream-timeout", request?.streamTimeoutSeconds?.toString());
3919
+ setDefault("x-litellm-num-retries", request?.numRetries?.toString());
3920
+ return {
3921
+ ...options,
3922
+ headers,
3923
+ // Never hide duplicate attempts inside the OpenAI SDK beneath Clio's
3924
+ // operator-visible failure. The gateway may still be configured to retry,
3925
+ // but physical-routing deployments should keep that policy at zero too.
3926
+ maxRetries: options.maxRetries ?? 0
3747
3927
  };
3748
3928
  }
3749
3929
  function requiredToolArguments(tool) {
@@ -3757,7 +3937,7 @@ function hasEmptyArguments(args) {
3757
3937
  return Object.keys(args).length === 0;
3758
3938
  }
3759
3939
  function runtimeMetadata(model) {
3760
- return model.clio;
3940
+ return model.clioCoder;
3761
3941
  }
3762
3942
  function emptyErrorMessage(model, message) {
3763
3943
  return {
@@ -4014,24 +4194,31 @@ var openAICompletionsApiProvider = {
4014
4194
  const resolved = resolvedCapabilitiesForModel(model, defaultLevel);
4015
4195
  const effectiveContext = stripsThinking(resolved) ? stripThinkingFromContext(context) : context;
4016
4196
  const withSamplers = withSamplingOverrides(model, options, resolved);
4197
+ const withGatewayOptions = withLiteLLMRequestOptions(
4198
+ model,
4199
+ withRemainingContextBudget(model, effectiveContext, withSamplers)
4200
+ );
4017
4201
  return guardMalformedToolCalls(
4018
4202
  withReasoningTokenEstimate(
4019
4203
  stripSentinelsFromStream(
4020
4204
  stripNeverReasoningFromStream(
4021
4205
  filterGemmaChannelStream(
4022
- withResponseModelIdCapture(
4206
+ withLiteLLMRouteFailureAdvice(
4023
4207
  model,
4024
- withRemainingContextBudget(model, effectiveContext, withSamplers),
4025
- (capturedOptions) => withLocalResidency(
4208
+ withResponseModelIdCapture(
4026
4209
  model,
4027
- {
4028
- ...options?.apiKey !== void 0 ? { apiKey: options.apiKey } : {},
4029
- ...options?.signal !== void 0 ? { signal: options.signal } : {}
4030
- },
4031
- (requestModel) => piOpenAICompletions.stream(requestModel, effectiveContext, capturedOptions)
4210
+ withGatewayOptions,
4211
+ (capturedOptions) => withLocalResidency(
4212
+ model,
4213
+ {
4214
+ ...options?.apiKey !== void 0 ? { apiKey: options.apiKey } : {},
4215
+ ...options?.signal !== void 0 ? { signal: options.signal } : {}
4216
+ },
4217
+ (requestModel) => piOpenAICompletions.stream(requestModel, effectiveContext, capturedOptions)
4218
+ )
4032
4219
  )
4033
4220
  ),
4034
- resolved.family === "gemma-4"
4221
+ usesGemmaChannelMarkers(resolved.modelId)
4035
4222
  ),
4036
4223
  resolved
4037
4224
  ),
@@ -4046,24 +4233,31 @@ var openAICompletionsApiProvider = {
4046
4233
  const resolved = resolvedCapabilitiesForModel(model, thinkingLevelFromSimple2(options));
4047
4234
  const effectiveContext = stripsThinking(resolved) ? stripThinkingFromContext(context) : context;
4048
4235
  const withSamplers = withSamplingOverrides(model, options, resolved);
4236
+ const withGatewayOptions = withLiteLLMRequestOptions(
4237
+ model,
4238
+ withRemainingContextBudget(model, effectiveContext, withSamplers)
4239
+ );
4049
4240
  return guardMalformedToolCalls(
4050
4241
  withReasoningTokenEstimate(
4051
4242
  stripSentinelsFromStream(
4052
4243
  stripNeverReasoningFromStream(
4053
4244
  filterGemmaChannelStream(
4054
- withResponseModelIdCapture(
4245
+ withLiteLLMRouteFailureAdvice(
4055
4246
  model,
4056
- withRemainingContextBudget(model, effectiveContext, withSamplers),
4057
- (capturedOptions) => withLocalResidency(
4247
+ withResponseModelIdCapture(
4058
4248
  model,
4059
- {
4060
- ...options?.apiKey !== void 0 ? { apiKey: options.apiKey } : {},
4061
- ...options?.signal !== void 0 ? { signal: options.signal } : {}
4062
- },
4063
- (requestModel) => piOpenAICompletions.streamSimple(requestModel, effectiveContext, capturedOptions)
4249
+ withGatewayOptions,
4250
+ (capturedOptions) => withLocalResidency(
4251
+ model,
4252
+ {
4253
+ ...options?.apiKey !== void 0 ? { apiKey: options.apiKey } : {},
4254
+ ...options?.signal !== void 0 ? { signal: options.signal } : {}
4255
+ },
4256
+ (requestModel) => piOpenAICompletions.streamSimple(requestModel, effectiveContext, capturedOptions)
4257
+ )
4064
4258
  )
4065
4259
  ),
4066
- resolved.family === "gemma-4"
4260
+ usesGemmaChannelMarkers(resolved.modelId)
4067
4261
  ),
4068
4262
  resolved
4069
4263
  ),
@@ -4400,7 +4594,7 @@ function discoveredModelsSource(probe, preservePreviousProbe, previous, cachedMo
4400
4594
  function sameProbeIdentity(previous, next) {
4401
4595
  return previous.id === next.id && previous.runtime === next.runtime && (previous.url ?? "") === (next.url ?? "") && (previous.defaultModel ?? "") === (next.defaultModel ?? "");
4402
4596
  }
4403
- function mergeProbeResult(desc, target, probe, previous, cachedModels = []) {
4597
+ function mergeProbeResult(desc, target, probe, previous, cachedModels = [], cachedModelLabels = {}) {
4404
4598
  const probeSucceeded = probe?.ok ?? false;
4405
4599
  const preservePrevious = !probeSucceeded && previous !== void 0 && sameProbeIdentity(previous.target, target);
4406
4600
  const probeCapabilities = probe?.discoveredCapabilities ?? (preservePrevious ? previous.probeCapabilities : null) ?? null;
@@ -4412,8 +4606,10 @@ function mergeProbeResult(desc, target, probe, previous, cachedModels = []) {
4412
4606
  probe?.models ?? (preservePrevious ? previous.discoveredModels : void 0) ?? (cachedModels.length > 0 ? cachedModels : void 0) ?? desc.knownModels ?? []
4413
4607
  );
4414
4608
  const discoveredModelStates = probe?.modelStates ?? (preservePrevious ? previous.discoveredModelStates : null) ?? null;
4609
+ const discoveredModelLabels = probe?.modelLabels ?? (preservePrevious ? previous.discoveredModelLabels : void 0) ?? (cachedModels.length > 0 ? cachedModelLabels : void 0) ?? {};
4415
4610
  const merge = {
4416
4611
  discoveredModels,
4612
+ discoveredModelLabels,
4417
4613
  discoveredModelsSource: discoveredModelsSource(probe, preservePrevious, previous, cachedModels, desc),
4418
4614
  discoveredModelStates,
4419
4615
  probeCapabilities,
@@ -4428,7 +4624,9 @@ function unservedDefaultModelReason(desc, target, merge) {
4428
4624
  const model = target.defaultModel;
4429
4625
  if (!model) return null;
4430
4626
  if (merge.discoveredModelsSource !== "probe" || merge.discoveredModels.length === 0) return null;
4431
- if (listKnownModelsForRuntime(desc.id).length > 0) return null;
4627
+ if (listKnownModelsForRuntime(desc.id).length > 0 && desc.externalAgentLoop?.modelCatalog !== "live-authoritative") {
4628
+ return null;
4629
+ }
4432
4630
  if (merge.discoveredModels.includes(model)) return null;
4433
4631
  if (merge.discoveredModelStates && model in merge.discoveredModelStates) return null;
4434
4632
  return `default model '${model}' is not advertised by the target`;
@@ -4448,14 +4646,18 @@ function createProvidersBundle(context) {
4448
4646
  if (config) return config.get();
4449
4647
  return readSettings();
4450
4648
  }
4451
- async function buildProbeContextForTarget(target, desc) {
4649
+ async function buildProbeContextForTarget(target, desc, signal) {
4452
4650
  const probeCtx = {
4453
4651
  credentialsPresent: credentialsPresent(),
4454
- httpTimeoutMs: DEFAULT_PROBE_TIMEOUT_MS
4652
+ httpTimeoutMs: DEFAULT_PROBE_TIMEOUT_MS,
4653
+ ...signal ? { signal } : {}
4455
4654
  };
4456
4655
  if (!targetRequiresAuth(target, desc)) return probeCtx;
4457
4656
  try {
4458
- const resolution = await authStore.resolveForTarget(resolveAuthTarget(target, desc), { includeFallback: false });
4657
+ const resolution = await authStore.resolveForTarget(resolveAuthTarget(target, desc), {
4658
+ includeFallback: false,
4659
+ ...signal ? { signal } : {}
4660
+ });
4459
4661
  if (resolution.apiKey) probeCtx.authToken = resolution.apiKey;
4460
4662
  } catch {
4461
4663
  }
@@ -4507,8 +4709,9 @@ function createProvidersBundle(context) {
4507
4709
  return out2;
4508
4710
  }
4509
4711
  const availability = availabilityFor(desc, target, authStatusFor);
4510
- const cachedModels = readTargetModelSnapshot(target)?.models ?? [];
4511
- const merge = mergeProbeResult(desc, target, probe, previous, cachedModels);
4712
+ const cachedSnapshot = readTargetModelSnapshot(target);
4713
+ const cachedModels = cachedSnapshot?.models ?? [];
4714
+ const merge = mergeProbeResult(desc, target, probe, previous, cachedModels, cachedSnapshot?.modelLabels ?? {});
4512
4715
  const { capabilities, contextWindowProvenance } = capabilitiesFor(desc, target, merge, kb);
4513
4716
  const healthy = probe !== null ? probe.ok : null;
4514
4717
  const unservedDefault = probe?.ok ? unservedDefaultModelReason(desc, target, merge) : null;
@@ -4532,6 +4735,7 @@ function createProvidersBundle(context) {
4532
4735
  probeModelCapabilities: merge.probeModelCapabilities,
4533
4736
  probeModelId: merge.probeModelId,
4534
4737
  discoveredModels: merge.discoveredModels,
4738
+ discoveredModelLabels: merge.discoveredModelLabels,
4535
4739
  discoveredModelsSource: merge.discoveredModelsSource,
4536
4740
  discoveredModelStates: merge.discoveredModelStates
4537
4741
  };
@@ -4540,6 +4744,7 @@ function createProvidersBundle(context) {
4540
4744
  return out;
4541
4745
  }
4542
4746
  async function probeTargetInternal(target, live, options) {
4747
+ options?.signal?.throwIfAborted();
4543
4748
  const previous = statuses.get(target.id);
4544
4749
  const desc = registry.get(target.runtime);
4545
4750
  if (!desc) {
@@ -4553,13 +4758,15 @@ function createProvidersBundle(context) {
4553
4758
  statuses.set(target.id, status2);
4554
4759
  return status2;
4555
4760
  }
4556
- const probeCtx = await buildProbeContextForTarget(target, desc);
4761
+ const probeCtx = await buildProbeContextForTarget(target, desc, options?.signal);
4762
+ options?.signal?.throwIfAborted();
4557
4763
  let probeResult;
4558
4764
  try {
4559
4765
  probeResult = await desc.probe(target, probeCtx);
4560
4766
  } catch (err) {
4561
4767
  probeResult = { ok: false, error: err instanceof Error ? err.message : String(err) };
4562
4768
  }
4769
+ options?.signal?.throwIfAborted();
4563
4770
  if (probeResult.ok && typeof desc.probeModels === "function" && !probeResult.models) {
4564
4771
  try {
4565
4772
  const ids = await desc.probeModels(target, probeCtx);
@@ -4567,6 +4774,7 @@ function createProvidersBundle(context) {
4567
4774
  } catch {
4568
4775
  }
4569
4776
  }
4777
+ options?.signal?.throwIfAborted();
4570
4778
  if (probeResult.ok && options?.reasoning !== false && typeof desc.probeReasoning === "function") {
4571
4779
  const settings = readConfig();
4572
4780
  const orchestratorTarget = settings.chat.target === target.id ? settings.chat.model : null;
@@ -4574,6 +4782,7 @@ function createProvidersBundle(context) {
4574
4782
  if (candidateModelId) {
4575
4783
  try {
4576
4784
  const result = await desc.probeReasoning(target, candidateModelId, probeCtx);
4785
+ options?.signal?.throwIfAborted();
4577
4786
  reasoningCache.set(reasoningCacheKey(target.id, candidateModelId), result.reasoning);
4578
4787
  const capabilityModelId = probeResult.capabilityModelId ?? null;
4579
4788
  if (capabilityModelId === null || capabilityModelId === candidateModelId) {
@@ -4594,10 +4803,15 @@ function createProvidersBundle(context) {
4594
4803
  }
4595
4804
  }
4596
4805
  }
4806
+ options?.signal?.throwIfAborted();
4597
4807
  const status = buildStatus(target, desc, probeResult, previous);
4598
4808
  statuses.set(target.id, status);
4599
4809
  if (probeResult.ok && probeResult.models !== void 0) {
4600
- recordTargetModelSnapshot(target, probeResult.models);
4810
+ recordTargetModelSnapshot(
4811
+ target,
4812
+ probeResult.models,
4813
+ probeResult.modelLabels ? { modelLabels: probeResult.modelLabels } : {}
4814
+ );
4601
4815
  }
4602
4816
  void recordEndpointSlotsFromStatus(status);
4603
4817
  context.bus.emit(BusChannels.ProviderHealth, { id: target.id, status });
@@ -4783,8 +4997,8 @@ export {
4783
4997
  setResidencyNoticeSink,
4784
4998
  setProtectedModelsProvider,
4785
4999
  withRunOverrides,
4786
- EMPTY_CAPABILITIES,
4787
- VALID_THINKING_LEVELS,
5000
+ gatewayRoutingObservationFromRecord,
5001
+ gatewayRoutingObservationLabel,
4788
5002
  applyModelCapabilityPatch,
4789
5003
  probeCapabilitiesForModel,
4790
5004
  resolveModelCapabilities,
@@ -4802,6 +5016,7 @@ export {
4802
5016
  isOrchestratorEligibleRuntime,
4803
5017
  isDispatchEligibleRuntime,
4804
5018
  modelResidencyForStatus,
5019
+ hasLiveModelCatalog,
4805
5020
  modelCandidatesForStatus,
4806
5021
  modelIdsForStatus,
4807
5022
  canonicalizeWireModelId,
@@ -4813,6 +5028,7 @@ export {
4813
5028
  runtimeResolutionWarnings,
4814
5029
  runtimeResolutionWarningsBesideThinkingNotice,
4815
5030
  normalizeCostProvenance,
5031
+ resolveCostProvenance2 as resolveCostProvenance,
4816
5032
  ProvidersDomainModule
4817
5033
  };
4818
- //# sourceMappingURL=chunk-UEDMSP56.js.map
5034
+ //# sourceMappingURL=chunk-XPWWI35G.js.map