@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
@@ -1,12 +1,16 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
3
  THINKING_LEVELS
4
- } from "./chunk-BWW4HLO4.js";
4
+ } from "./chunk-UXCU4E3T.js";
5
5
  import {
6
+ runCommandVector
7
+ } from "./chunk-JSC3U7TI.js";
8
+ import {
9
+ catalogThinkingLevelsForRuntime,
6
10
  listCatalogModelsForRuntime,
7
11
  mergeCapabilities,
8
12
  synthesizeCatalogBackedModel
9
- } from "./chunk-O42A54GG.js";
13
+ } from "./chunk-5OIVVPHF.js";
10
14
  import {
11
15
  init_esm_shims
12
16
  } from "./chunk-3R73A4XB.js";
@@ -16,47 +20,243 @@ init_esm_shims();
16
20
 
17
21
  // src/domains/providers/runtimes/antigravity/antigravity-code.ts
18
22
  init_esm_shims();
19
- var ANTIGRAVITY_AUTH_NOTICE = "Uses your existing Antigravity (`agy`) login. Clio stores no Antigravity credentials. agy runs its own agent harness as a subprocess; Clio maps autonomy levels onto its CLI flags but cannot mediate individual agy tool calls.";
23
+
24
+ // src/core/external-diagnostic.ts
25
+ init_esm_shims();
26
+ var REDACTED = "[redacted]";
27
+ function redactExternalDiagnostic(input) {
28
+ return input.replace(/\b(?:authorization|proxy-authorization)\s*:\s*[^\r\n]+/giu, `Authorization: ${REDACTED}`).replace(/\b(?:set-cookie|cookie)\s*:\s*[^\r\n]+/giu, `Cookie: ${REDACTED}`).replace(/\bbearer\s+[A-Za-z0-9._~+/-]+=*/giu, `Bearer ${REDACTED}`).replace(
29
+ /\b(?:api[_-]?key|access[_-]?token|refresh[_-]?token|token|secret|password)\s*[:=]\s*[^\s,;]+/giu,
30
+ (match) => {
31
+ const separator = match.includes(":") ? ":" : "=";
32
+ return `${match.slice(0, match.indexOf(separator)).trim()}${separator}${REDACTED}`;
33
+ }
34
+ ).replace(/\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/gu, REDACTED).replace(
35
+ /(?:~|\/[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)*)\/\.(?:gemini\/antigravity-cli|antigravitycli)(?:\/[^\s]*)?/gu,
36
+ "[redacted credential path]"
37
+ ).replace(/https?:\/\/[^\s"'<>]+/giu, (url2) => {
38
+ try {
39
+ const parsed = new URL(url2);
40
+ if (/(?:auth|oauth|login|signin|callback)/iu.test(parsed.pathname)) return "[redacted authorization URL]";
41
+ parsed.username = "";
42
+ parsed.password = "";
43
+ parsed.search = "";
44
+ parsed.hash = "";
45
+ return parsed.toString();
46
+ } catch {
47
+ return REDACTED;
48
+ }
49
+ });
50
+ }
51
+ function boundedExternalDiagnostic(input, maxBytes = 8192) {
52
+ const redacted = redactExternalDiagnostic(input).trim();
53
+ const bytes = Buffer.from(redacted, "utf8");
54
+ if (bytes.byteLength <= maxBytes) return redacted;
55
+ return `${bytes.subarray(0, Math.max(0, maxBytes - 32)).toString("utf8")}
56
+ [diagnostic truncated]`;
57
+ }
58
+
59
+ // src/domains/providers/runtimes/antigravity/antigravity-code.ts
60
+ var ANTIGRAVITY_AUTH_NOTICE = "Experimental local delegation through your installed Antigravity (`agy`) CLI. Clio neither signs in nor stores or inspects Antigravity credentials. Run `agy` yourself and complete sign-in before probing this target.";
20
61
  var ANTIGRAVITY_MODELS = [
21
- "Gemini 3.5 Flash (High)",
22
- "Gemini 3.5 Flash (Medium)",
23
- "Gemini 3.5 Flash (Low)",
24
- "Gemini 3.1 Pro (High)",
25
- "Gemini 3.1 Pro (Low)",
26
- "Claude Sonnet 4.6 (Thinking)",
27
- "Claude Opus 4.6 (Thinking)",
28
- "GPT-OSS 120B (Medium)"
62
+ "gemini-3.8-flash-high",
63
+ "gemini-3.8-flash-medium",
64
+ "gemini-3.8-flash-low",
65
+ "gemini-3.1-pro-high",
66
+ "gemini-3.1-pro-low"
29
67
  ];
30
68
  var antigravityCapabilities = {
31
69
  chat: true,
32
- tools: true,
33
- toolCallFormat: "openai",
34
- reasoning: true,
35
- vision: true,
70
+ tools: false,
71
+ reasoning: false,
72
+ vision: false,
36
73
  audio: false,
37
74
  embeddings: false,
38
75
  rerank: false,
39
76
  fim: false,
40
- contextWindow: 1e6,
41
- maxTokens: 8192
77
+ contextWindow: 0,
78
+ maxTokens: 0
79
+ };
80
+ var ANTIGRAVITY_MAX_CATALOG_BYTES = 1024 * 1024;
81
+ var ANTIGRAVITY_MAX_DISCOVERED_MODELS = 4096;
82
+ var MAX_MODEL_ID_CHARS = 1024;
83
+ var MAX_MODEL_LABEL_CHARS = 1024;
84
+ var AntigravityCatalogError = class extends Error {
85
+ kind;
86
+ constructor(kind, message) {
87
+ super(message);
88
+ this.name = "AntigravityCatalogError";
89
+ this.kind = kind;
90
+ }
42
91
  };
92
+ function record(value) {
93
+ return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
94
+ }
95
+ function parseAntigravityModelCatalogDetails(output) {
96
+ let decoded;
97
+ try {
98
+ decoded = JSON.parse(output);
99
+ } catch {
100
+ throw new AntigravityCatalogError(
101
+ "unsupported-feature",
102
+ "agy returned an unreadable model catalog; update the Antigravity CLI and retry"
103
+ );
104
+ }
105
+ const envelope = record(decoded);
106
+ const command = record(envelope?.command);
107
+ const data = record(command?.data);
108
+ if (envelope?.status !== "SUCCESS") {
109
+ const detail = boundedExternalDiagnostic(
110
+ typeof envelope?.error === "string" ? envelope.error : typeof command?.error === "string" ? command.error : "agy could not list models"
111
+ );
112
+ const kind = classifyAntigravityDiagnostic(detail);
113
+ throw new AntigravityCatalogError(kind, antigravityProbeMessage(kind, detail));
114
+ }
115
+ if (command?.name !== "models" || !Array.isArray(data?.models)) {
116
+ throw new AntigravityCatalogError(
117
+ "unsupported-feature",
118
+ "agy returned an unsupported model catalog; update the Antigravity CLI and retry"
119
+ );
120
+ }
121
+ if (data.models.length === 0) {
122
+ throw new AntigravityCatalogError(
123
+ "catalog-unavailable",
124
+ "agy returned no available models; run `agy` locally and verify the signed-in account has model access"
125
+ );
126
+ }
127
+ if (data.models.length > ANTIGRAVITY_MAX_DISCOVERED_MODELS) {
128
+ throw new AntigravityCatalogError(
129
+ "catalog-unavailable",
130
+ `agy returned more than ${ANTIGRAVITY_MAX_DISCOVERED_MODELS} models; the authoritative catalog was refused rather than truncated`
131
+ );
132
+ }
133
+ const models = [];
134
+ const labels = {};
135
+ const seen = /* @__PURE__ */ new Set();
136
+ for (const value of data.models) {
137
+ const model = record(value);
138
+ const id = typeof model?.id === "string" ? model.id.trim() : "";
139
+ const label = typeof model?.label === "string" ? model.label.trim() : "";
140
+ if (id.length === 0 || id.length > MAX_MODEL_ID_CHARS || /[\r\n\0]/u.test(id)) {
141
+ throw new AntigravityCatalogError("catalog-unavailable", "agy returned an invalid model identifier");
142
+ }
143
+ if (label.length === 0 || label.length > MAX_MODEL_LABEL_CHARS || /[\r\n\0]/u.test(label)) {
144
+ throw new AntigravityCatalogError("catalog-unavailable", `agy returned an invalid label for model '${id}'`);
145
+ }
146
+ if (seen.has(id)) {
147
+ if (labels[id] !== label) {
148
+ throw new AntigravityCatalogError(
149
+ "catalog-unavailable",
150
+ `agy returned conflicting labels for duplicate model '${id}'`
151
+ );
152
+ }
153
+ continue;
154
+ }
155
+ seen.add(id);
156
+ models.push(id);
157
+ labels[id] = label;
158
+ }
159
+ return { models, labels };
160
+ }
161
+ function classifyAntigravityDiagnostic(detail) {
162
+ if (/(?:enoent|not found|cannot find|could not start|spawn .*agy)/iu.test(detail)) return "missing";
163
+ if (/(?:sign[ -]?in|log[ -]?in|unauthori[sz]ed|authenticat|credential|account.*required)/iu.test(detail)) {
164
+ return "authentication";
165
+ }
166
+ if (/(?:unknown|unsupported|unrecognized|invalid) (?:option|argument|command)|output-format|models command/iu.test(detail)) {
167
+ return "unsupported-feature";
168
+ }
169
+ return "generic";
170
+ }
171
+ function antigravityProbeMessage(kind, detail) {
172
+ const safeDetail = boundedExternalDiagnostic(detail || "no diagnostic was provided");
173
+ switch (kind) {
174
+ case "missing":
175
+ return "Antigravity CLI is not installed or `agy` is not on PATH";
176
+ case "authentication":
177
+ return `Antigravity sign-in is required; run \`agy\` yourself and complete sign-in (${safeDetail})`;
178
+ case "unsupported-feature":
179
+ return `the installed Antigravity CLI does not expose the required structured model catalog; update \`agy\` (${safeDetail})`;
180
+ case "catalog-unavailable":
181
+ return safeDetail;
182
+ case "cancelled":
183
+ return "Antigravity model discovery was cancelled";
184
+ default:
185
+ return `Antigravity model discovery failed: ${safeDetail}`;
186
+ }
187
+ }
188
+ async function probeAntigravityModelCatalog(ctx, runner = runCommandVector) {
189
+ const result = await runner("agy", ["--output-format", "json", "models"], {
190
+ cwd: process.cwd(),
191
+ workspaceRoot: process.cwd(),
192
+ timeoutMs: Math.max(1, ctx.httpTimeoutMs),
193
+ maxOutputBytes: ANTIGRAVITY_MAX_CATALOG_BYTES,
194
+ ...ctx.signal ? { signal: ctx.signal } : {}
195
+ });
196
+ if (result.aborted || result.timedOut) {
197
+ return {
198
+ ok: false,
199
+ latencyMs: result.durationMs,
200
+ failureKind: "cancelled",
201
+ error: antigravityProbeMessage("cancelled", "")
202
+ };
203
+ }
204
+ if (result.outputCapped) {
205
+ return {
206
+ ok: false,
207
+ latencyMs: result.durationMs,
208
+ failureKind: "catalog-unavailable",
209
+ error: `agy model catalog exceeded ${ANTIGRAVITY_MAX_CATALOG_BYTES} bytes`
210
+ };
211
+ }
212
+ if (result.exitCode !== 0) {
213
+ const detail = boundedExternalDiagnostic(result.stderr || result.stdout || `agy exited ${String(result.exitCode)}`);
214
+ const kind = classifyAntigravityDiagnostic(detail);
215
+ return { ok: false, latencyMs: result.durationMs, failureKind: kind, error: antigravityProbeMessage(kind, detail) };
216
+ }
217
+ try {
218
+ const catalog = parseAntigravityModelCatalogDetails(result.stdout);
219
+ return {
220
+ ok: true,
221
+ latencyMs: result.durationMs,
222
+ models: catalog.models,
223
+ modelLabels: catalog.labels
224
+ };
225
+ } catch (cause) {
226
+ const kind = cause instanceof AntigravityCatalogError ? cause.kind : "generic";
227
+ const detail = cause instanceof Error ? cause.message : String(cause);
228
+ return { ok: false, latencyMs: result.durationMs, failureKind: kind, error: boundedExternalDiagnostic(detail) };
229
+ }
230
+ }
43
231
  var antigravityCodeRuntime = {
44
232
  id: "antigravity-code",
45
- displayName: "Antigravity CLI",
233
+ displayName: "Antigravity CLI \u2014 experimental local delegation",
46
234
  kind: "subprocess",
47
235
  tier: "subscription",
48
- // Reuses the existing `google-generative-ai` api family: the worker branches
49
- // to its own runner before any pi-ai inference, so this only needs to be a
50
- // valid, google-backed family. The runner is selected by runtime id, and the
51
- // plain-text parser is named by `outputParser`.
52
- apiFamily: "google-generative-ai",
236
+ apiFamily: "external-agent-subprocess",
53
237
  auth: "none",
54
238
  authNotice: ANTIGRAVITY_AUTH_NOTICE,
55
239
  knownModels: [...ANTIGRAVITY_MODELS],
56
240
  binaryName: "agy",
57
- headlessCommand: "agy --print",
58
- outputParser: "antigravity-print-text",
241
+ headlessCommand: "agy --input-format stream-json --output-format stream-json",
242
+ outputParser: "antigravity-stream-json",
59
243
  defaultCapabilities: antigravityCapabilities,
244
+ externalAgentLoop: {
245
+ tools: "externally-governed-unobserved",
246
+ network: "externally-governed-unobserved",
247
+ budget: "external-one-shot",
248
+ generatingRetry: "forbidden",
249
+ modelCatalog: "live-authoritative"
250
+ },
251
+ async probe(_target, ctx) {
252
+ try {
253
+ return await probeAntigravityModelCatalog(ctx);
254
+ } catch (cause) {
255
+ const detail = boundedExternalDiagnostic(cause instanceof Error ? cause.message : String(cause));
256
+ const kind = classifyAntigravityDiagnostic(detail);
257
+ return { ok: false, failureKind: kind, error: antigravityProbeMessage(kind, detail) };
258
+ }
259
+ },
60
260
  synthesizeModel(target, wireModelId, kb) {
61
261
  return synthesizeCatalogBackedModel({
62
262
  target,
@@ -64,9 +264,9 @@ var antigravityCodeRuntime = {
64
264
  kb,
65
265
  defaultCapabilities: antigravityCapabilities,
66
266
  runtimeId: "antigravity-code",
67
- api: "google-generative-ai",
68
- provider: "google",
69
- defaultBaseUrl: "antigravity://local"
267
+ api: "external-agent-subprocess",
268
+ provider: "antigravity",
269
+ defaultBaseUrl: "external-agent://antigravity/local"
70
270
  });
71
271
  }
72
272
  };
@@ -257,15 +457,102 @@ init_esm_shims();
257
457
 
258
458
  // src/domains/providers/types/local-model-quirks.ts
259
459
  init_esm_shims();
260
- var KV_CACHE_QUANTS = ["f32", "f16", "q8_0", "q4_0", "q4_1", "iq4_nl", "q5_0", "q5_1"];
460
+
461
+ // src/domains/providers/types/capability-flags.ts
462
+ init_esm_shims();
463
+
464
+ // src/domains/providers/model-family.ts
465
+ init_esm_shims();
466
+ function normalizeModelIdForFamily(modelId) {
467
+ return (modelId ?? "").trim().toLowerCase().replace(/_/g, "-");
468
+ }
469
+ function isHarmonyModelId(modelId) {
470
+ return normalizeModelIdForFamily(modelId).includes("gpt-oss");
471
+ }
472
+ function inferLocalModelFamily(modelId) {
473
+ const normalized = normalizeModelIdForFamily(modelId);
474
+ if (normalized.length === 0) return "unknown";
475
+ if (normalized.includes("gpt-oss")) return "openai-gpt-oss";
476
+ if (normalized.includes("nemotron-cascade-2") || normalized.includes("nemotron-cascade2")) {
477
+ return "nemotron-cascade-2";
478
+ }
479
+ if (normalized.includes("nemotron-3-nano-omni") || normalized.includes("nemotron-nano-omni")) {
480
+ return "nemotron-3-nano-omni";
481
+ }
482
+ if (normalized.includes("qwen3")) return "qwen3";
483
+ if (normalized.includes("gemma-4") || normalized.includes("gemma4") || normalized.includes("gemopus")) {
484
+ return "gemma-4";
485
+ }
486
+ return "unknown";
487
+ }
488
+
489
+ // src/domains/providers/types/capability-flags.ts
490
+ var EMPTY_CAPABILITIES = {
491
+ chat: false,
492
+ tools: false,
493
+ reasoning: false,
494
+ vision: false,
495
+ audio: false,
496
+ embeddings: false,
497
+ rerank: false,
498
+ fim: false,
499
+ contextWindow: 0,
500
+ maxTokens: 0
501
+ };
502
+ var VALID_THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
503
+ var THINKING_LEVELS_WITHOUT_XHIGH = ["off", "minimal", "low", "medium", "high"];
504
+ var THINKING_LEVELS_OPENAI_5_1_MINI = ["off", "minimal", "low", "medium", "high"];
505
+ var THINKING_LEVELS_OPENAI_5_2_PLUS = [
506
+ "off",
507
+ "minimal",
508
+ "low",
509
+ "medium",
510
+ "high",
511
+ "xhigh"
512
+ ];
513
+ var THINKING_LEVELS_OPENAI_5_6 = [...THINKING_LEVELS_OPENAI_5_2_PLUS, "max"];
514
+ var THINKING_LEVELS_HARMONY = ["low", "medium", "high"];
515
+ function normalizeModelId(modelId) {
516
+ if (!modelId) return void 0;
517
+ const trimmed = modelId.trim();
518
+ if (trimmed.length === 0) return void 0;
519
+ return trimmed.includes("/") ? trimmed.split("/").pop() ?? trimmed : trimmed;
520
+ }
521
+ function availableOpenAICodexThinkingLevels(modelId) {
522
+ const normalized = normalizeModelId(modelId);
523
+ if (!normalized) return VALID_THINKING_LEVELS;
524
+ if (normalized === "gpt-5.1-codex-mini") return THINKING_LEVELS_OPENAI_5_1_MINI;
525
+ if (normalized.startsWith("gpt-5.2") || normalized.startsWith("gpt-5.3") || normalized.startsWith("gpt-5.4") || normalized.startsWith("gpt-5.5")) {
526
+ return THINKING_LEVELS_OPENAI_5_2_PLUS;
527
+ }
528
+ if (normalized.startsWith("gpt-5.6")) {
529
+ return THINKING_LEVELS_OPENAI_5_6;
530
+ }
531
+ return THINKING_LEVELS_WITHOUT_XHIGH;
532
+ }
533
+ function availableThinkingLevels(caps, options) {
534
+ if (!caps.reasoning) return ["off"];
535
+ if (caps.thinkingFormat === "harmony" || isHarmonyModelId(options?.modelId)) {
536
+ return THINKING_LEVELS_HARMONY;
537
+ }
538
+ const catalogLevels = options?.runtimeId && options.modelId ? catalogThinkingLevelsForRuntime(options.runtimeId, options.modelId) : void 0;
539
+ if (catalogLevels) {
540
+ if (!catalogLevels.includes("xhigh")) return catalogLevels.filter((level) => level !== "max");
541
+ return catalogLevels;
542
+ }
543
+ if (caps.thinkingFormat === "openai-codex" || options?.runtimeId === "openai-codex") {
544
+ return availableOpenAICodexThinkingLevels(options?.modelId);
545
+ }
546
+ if (caps.thinkingFormat === "anthropic-extended") {
547
+ return THINKING_LEVELS_WITHOUT_XHIGH;
548
+ }
549
+ return THINKING_LEVELS_WITHOUT_XHIGH;
550
+ }
551
+
552
+ // src/domains/providers/types/local-model-quirks.ts
261
553
  function isRecord(value) {
262
554
  return value !== null && typeof value === "object" && !Array.isArray(value);
263
555
  }
264
- function asKvCacheQuant(value) {
265
- if (value === false) return false;
266
- if (typeof value !== "string") return void 0;
267
- return KV_CACHE_QUANTS.includes(value) ? value : void 0;
268
- }
269
556
  function asPositive(value) {
270
557
  return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : void 0;
271
558
  }
@@ -276,16 +563,6 @@ function asInteger(value) {
276
563
  function asPenalty(value) {
277
564
  return typeof value === "number" && Number.isFinite(value) ? value : void 0;
278
565
  }
279
- function extractKvCache(raw) {
280
- if (!isRecord(raw)) return void 0;
281
- const out = {};
282
- const k = asKvCacheQuant(raw.kQuant);
283
- if (k !== void 0) out.kQuant = k;
284
- const v = asKvCacheQuant(raw.vQuant);
285
- if (v !== void 0) out.vQuant = v;
286
- if (typeof raw.useFp16 === "boolean") out.useFp16 = raw.useFp16;
287
- return Object.keys(out).length > 0 ? out : void 0;
288
- }
289
566
  function extractSamplingProfile(raw) {
290
567
  if (!isRecord(raw)) return void 0;
291
568
  const out = {};
@@ -303,8 +580,6 @@ function extractSamplingProfile(raw) {
303
580
  if (pp !== void 0) out.presencePenalty = pp;
304
581
  const fp = asPenalty(raw.frequencyPenalty);
305
582
  if (fp !== void 0) out.frequencyPenalty = fp;
306
- const maxTokens = asInteger(raw.maxTokens);
307
- if (maxTokens !== void 0) out.maxTokens = maxTokens;
308
583
  return Object.keys(out).length > 0 ? out : void 0;
309
584
  }
310
585
  function extractSampling(raw) {
@@ -353,6 +628,61 @@ function extractEffortByLevel(raw) {
353
628
  if (typeof raw.xhigh === "string" && raw.xhigh.length > 0) out.xhigh = raw.xhigh;
354
629
  return Object.keys(out).length > 0 ? out : void 0;
355
630
  }
631
+ function extractChatTemplateKwargs(raw) {
632
+ if (!isRecord(raw)) return void 0;
633
+ const out = {};
634
+ if (isRecord(raw.static)) {
635
+ const staticMap = {};
636
+ for (const [k, v] of Object.entries(raw.static)) {
637
+ if (typeof v === "boolean") {
638
+ staticMap[k] = v;
639
+ } else if (typeof v === "number" && Number.isFinite(v)) {
640
+ staticMap[k] = v;
641
+ } else if (typeof v === "string" && v.length > 0) {
642
+ staticMap[k] = v;
643
+ }
644
+ }
645
+ if (Object.keys(staticMap).length > 0) out.static = staticMap;
646
+ }
647
+ if (isRecord(raw.byLevel)) {
648
+ const byLevelRaw = raw.byLevel;
649
+ if (typeof byLevelRaw.key === "string" && byLevelRaw.key.trim().length > 0 && isRecord(byLevelRaw.values)) {
650
+ const values = {};
651
+ for (const level of VALID_THINKING_LEVELS) {
652
+ const val = byLevelRaw.values[level];
653
+ if (typeof val === "string" && val.length > 0) {
654
+ values[level] = val;
655
+ } else if (typeof val === "number" && Number.isFinite(val)) {
656
+ values[level] = val;
657
+ }
658
+ }
659
+ if (Object.keys(values).length > 0) {
660
+ const byLevel = {
661
+ key: byLevelRaw.key.trim(),
662
+ values
663
+ };
664
+ if (typeof byLevelRaw.lmstudio === "string" && byLevelRaw.lmstudio.trim().length > 0) {
665
+ byLevel.lmstudio = byLevelRaw.lmstudio.trim();
666
+ }
667
+ out.byLevel = byLevel;
668
+ }
669
+ }
670
+ }
671
+ if (typeof raw.lmstudio === "string" && raw.lmstudio.trim().length > 0) {
672
+ out.lmstudio = raw.lmstudio.trim();
673
+ } else if (isRecord(raw.lmstudio)) {
674
+ const lmstudioMap = {};
675
+ for (const [k, v] of Object.entries(raw.lmstudio)) {
676
+ if (typeof v === "string" && v.trim().length > 0) {
677
+ lmstudioMap[k] = v.trim();
678
+ }
679
+ }
680
+ if (Object.keys(lmstudioMap).length > 0) {
681
+ out.lmstudio = lmstudioMap;
682
+ }
683
+ }
684
+ return Object.keys(out).length > 0 ? out : void 0;
685
+ }
356
686
  function extractThinkingQuirks(raw) {
357
687
  if (!isRecord(raw)) return void 0;
358
688
  const mechanism = asThinkingMechanism(raw.mechanism);
@@ -363,17 +693,19 @@ function extractThinkingQuirks(raw) {
363
693
  const effortByLevel = extractEffortByLevel(raw.effortByLevel);
364
694
  if (effortByLevel) out.effortByLevel = effortByLevel;
365
695
  if (typeof raw.guidance === "string" && raw.guidance.length > 0) out.guidance = raw.guidance;
696
+ const chatTemplateKwargs = extractChatTemplateKwargs(raw.chatTemplateKwargs);
697
+ if (chatTemplateKwargs) out.chatTemplateKwargs = chatTemplateKwargs;
366
698
  return out;
367
699
  }
368
700
  function extractLocalModelQuirks(raw) {
369
701
  if (!isRecord(raw)) return void 0;
370
702
  const out = {};
371
- const kvCache = extractKvCache(raw.kvCache);
372
- if (kvCache) out.kvCache = kvCache;
373
703
  const sampling = extractSampling(raw.sampling);
374
704
  if (sampling) out.sampling = sampling;
375
705
  const thinking = extractThinkingQuirks(raw.thinking);
376
706
  if (thinking) out.thinking = thinking;
707
+ const chatTemplateKwargs = extractChatTemplateKwargs(raw.chatTemplateKwargs) ?? extractChatTemplateKwargs(isRecord(raw.thinking) ? raw.thinking.chatTemplateKwargs : void 0) ?? extractChatTemplateKwargs(isRecord(raw.request) ? raw.request.chatTemplateKwargs : void 0);
708
+ if (chatTemplateKwargs) out.chatTemplateKwargs = chatTemplateKwargs;
377
709
  return Object.keys(out).length > 0 ? out : void 0;
378
710
  }
379
711
 
@@ -444,7 +776,8 @@ function synthLocalModel(input) {
444
776
  ...target.gateway === true ? { gateway: true } : {},
445
777
  ...kb?.entry.family ? { family: kb.entry.family } : {},
446
778
  ...quirks ? { quirks } : {},
447
- ...target.lmstudio ? { lmstudio: target.lmstudio } : {}
779
+ ...target.lmstudio ? { lmstudio: target.lmstudio } : {},
780
+ ...target.litellm ? { litellm: target.litellm } : {}
448
781
  }
449
782
  };
450
783
  if (headers) model.headers = headers;
@@ -617,41 +950,41 @@ function isRecord2(value) {
617
950
  function positiveNumber(value) {
618
951
  return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : void 0;
619
952
  }
620
- function firstPositiveNumber(record, keys) {
953
+ function firstPositiveNumber(record2, keys) {
621
954
  for (const key of keys) {
622
- const value = positiveNumber(record[key]);
955
+ const value = positiveNumber(record2[key]);
623
956
  if (value !== void 0) return value;
624
957
  }
625
958
  return void 0;
626
959
  }
627
- function capabilityListFlag(record, name) {
628
- const list = record.capabilities;
960
+ function capabilityListFlag(record2, name) {
961
+ const list = record2.capabilities;
629
962
  if (!Array.isArray(list)) return void 0;
630
963
  return list.some((entry) => entry === name) ? true : void 0;
631
964
  }
632
- function booleanFromAny(record, keys) {
965
+ function booleanFromAny(record2, keys) {
633
966
  for (const key of keys) {
634
- const value = record[key];
967
+ const value = record2[key];
635
968
  if (typeof value === "boolean") return value;
636
969
  }
637
970
  return void 0;
638
971
  }
639
- function nestedRecord(record, key) {
640
- const value = record[key];
972
+ function nestedRecord(record2, key) {
973
+ const value = record2[key];
641
974
  return isRecord2(value) ? value : null;
642
975
  }
643
- function firstString(record, keys) {
644
- if (!record) return void 0;
976
+ function firstString(record2, keys) {
977
+ if (!record2) return void 0;
645
978
  for (const key of keys) {
646
- const value = record[key];
979
+ const value = record2[key];
647
980
  if (typeof value === "string" && value.trim().length > 0) return value.trim();
648
981
  }
649
982
  return void 0;
650
983
  }
651
- function firstBoolean(record, keys) {
652
- if (!record) return void 0;
984
+ function firstBoolean(record2, keys) {
985
+ if (!record2) return void 0;
653
986
  for (const key of keys) {
654
- const value = record[key];
987
+ const value = record2[key];
655
988
  if (typeof value === "boolean") return value;
656
989
  }
657
990
  return void 0;
@@ -855,8 +1188,10 @@ async function probeLlamaCppModelStatus(base, target, ctx) {
855
1188
  const entries = await probeOpenAIModelEntries(base, ctx);
856
1189
  const selected = selectedModelEntry(entries, target);
857
1190
  if (!selected) return {};
1191
+ const loadState = modelStateFromOpenAIModelEntry({ id: selected.id, status: selected.status })?.state;
1192
+ const withState = (enrichment2) => loadState === void 0 ? enrichment2 : { ...enrichment2, loadState };
858
1193
  const args = argsFromStatus(selected.status);
859
- if (args.length === 0) return { notes: statusNotes(selected.id, selected.status) };
1194
+ if (args.length === 0) return withState({ notes: statusNotes(selected.id, selected.status) });
860
1195
  const flags = parseLlamaCppServerFlags(args);
861
1196
  const caps = {};
862
1197
  const window = llamaCppRequestContextWindow(flags);
@@ -877,7 +1212,7 @@ async function probeLlamaCppModelStatus(base, target, ctx) {
877
1212
  );
878
1213
  }
879
1214
  if (notes.length > 0) enrichment.notes = notes;
880
- return enrichment;
1215
+ return withState(enrichment);
881
1216
  }
882
1217
  async function detectModelMismatch(base, target, ctx) {
883
1218
  const expected = target.defaultModel?.trim();
@@ -1797,7 +2132,8 @@ var llamacppRuntime = {
1797
2132
  const health = await (ctx.signal ? probeHttp({ ...healthOpts, signal: ctx.signal }) : probeHttp(healthOpts));
1798
2133
  if (!health.ok) return health;
1799
2134
  const status = await probeLlamaCppModelStatus(base, target, ctx);
1800
- const props = await probeLlamaCppProps(base, ctx, status.modelId ?? target.defaultModel);
2135
+ const resident = status.loadState === void 0 || status.loadState === "loaded";
2136
+ const props = await probeLlamaCppProps(base, ctx, resident ? status.modelId ?? target.defaultModel : void 0);
1801
2137
  const catalog = await probeOpenAIModelCatalog(base, ctx);
1802
2138
  const result = { ok: true };
1803
2139
  if (catalog.models.length > 0) result.models = catalog.models;
@@ -2542,8 +2878,8 @@ function lmStudioReasoningLevels(options) {
2542
2878
  return [...new Set(levels)];
2543
2879
  }
2544
2880
  function lmStudioReasoningEffort(level, options) {
2881
+ if (options?.includes("on") && options.includes("off")) return level === "off" ? "none" : void 0;
2545
2882
  if (level === "off") return "none";
2546
- if (options?.includes("on") && !options.includes("medium") && !options.includes("high")) return "low";
2547
2883
  if (level === "medium" && options?.includes("medium") !== false) return "medium";
2548
2884
  if ((level === "high" || level === "xhigh" || level === "max") && options?.includes("high") !== false) return "high";
2549
2885
  return "low";
@@ -2982,7 +3318,7 @@ var defaultCapabilities25 = {
2982
3318
  embeddings: false,
2983
3319
  rerank: false,
2984
3320
  fim: false,
2985
- structuredOutputs: "json-schema",
3321
+ structuredOutputs: "none",
2986
3322
  contextWindow: CLIO_MIN_CONTEXT_WINDOW,
2987
3323
  maxTokens: CLIO_MIN_MAX_OUTPUT_TOKENS
2988
3324
  };
@@ -3007,6 +3343,8 @@ function boolean(value) {
3007
3343
  }
3008
3344
  function capabilitiesFromLiteLLMModelInfo(info) {
3009
3345
  const caps = {};
3346
+ if (info.runtime === "lm-studio") caps.thinkingControlRuntime = "lmstudio";
3347
+ else if (info.runtime === "llama.cpp") caps.thinkingControlRuntime = "llamacpp";
3010
3348
  const contextWindow = positiveInteger(info.max_input_tokens) ?? positiveInteger(info.max_tokens);
3011
3349
  if (contextWindow !== void 0) caps.contextWindow = contextWindow;
3012
3350
  const maxTokens = positiveInteger(info.max_output_tokens);
@@ -3028,36 +3366,96 @@ function capabilitiesFromLiteLLMModelInfo(info) {
3028
3366
  caps.rerank = true;
3029
3367
  }
3030
3368
  if (info.mode === "chat") caps.chat = true;
3031
- if (boolean(info.supports_response_schema) === true) caps.structuredOutputs = "json-schema";
3369
+ const responseSchema = boolean(info.supports_response_schema);
3370
+ if (responseSchema !== void 0) caps.structuredOutputs = responseSchema ? "json-schema" : "none";
3032
3371
  return caps;
3033
3372
  }
3034
- var EMPTY_CATALOG = { models: [], modelCapabilities: {}, modelStates: {}, deployments: {} };
3373
+ var BOOLEAN_CAPABILITIES = [
3374
+ "chat",
3375
+ "tools",
3376
+ "reasoning",
3377
+ "vision",
3378
+ "audio",
3379
+ "embeddings",
3380
+ "rerank",
3381
+ "fim"
3382
+ ];
3383
+ function aggregateLiteLLMCapabilities(rows) {
3384
+ if (rows.length === 0) return {};
3385
+ const aggregate = {};
3386
+ for (const key of ["contextWindow", "maxTokens"]) {
3387
+ const values = rows.map((row) => row[key]);
3388
+ if (values.every((value) => typeof value === "number")) {
3389
+ aggregate[key] = Math.min(...values);
3390
+ }
3391
+ }
3392
+ for (const key of BOOLEAN_CAPABILITIES) {
3393
+ const values = rows.map((row) => row[key]);
3394
+ if (values.some((value) => value === false)) aggregate[key] = false;
3395
+ else if (values.every((value) => value === true)) aggregate[key] = true;
3396
+ }
3397
+ const controlRuntime = rows[0]?.thinkingControlRuntime;
3398
+ if (controlRuntime !== void 0 && rows.every((row) => row.thinkingControlRuntime === controlRuntime)) {
3399
+ aggregate.thinkingControlRuntime = controlRuntime;
3400
+ }
3401
+ const structuredOutputs = rows.map((row) => row.structuredOutputs);
3402
+ if (structuredOutputs.some((value) => value === "none")) aggregate.structuredOutputs = "none";
3403
+ else if (structuredOutputs.every((value) => value === "json-schema")) aggregate.structuredOutputs = "json-schema";
3404
+ return aggregate;
3405
+ }
3406
+ var EMPTY_CATALOG = {
3407
+ models: [],
3408
+ modelCapabilities: {},
3409
+ modelStates: {},
3410
+ deployments: {},
3411
+ authFailed: false
3412
+ };
3413
+ function isAuthError(leg) {
3414
+ return !leg.ok && /^HTTP 40[13]\b/u.test(leg.error ?? "");
3415
+ }
3035
3416
  async function fetchCatalog(base, ctx, headers) {
3036
3417
  const detailOpts = { url: `${base}/v1/model/info`, timeoutMs: ctx.httpTimeoutMs, headers };
3037
3418
  const detail = await (ctx.signal ? probeJson({ ...detailOpts, signal: ctx.signal }) : probeJson(detailOpts));
3038
3419
  if (detail.ok && Array.isArray(detail.data?.data)) {
3039
- const catalog = { models: [], modelCapabilities: {}, modelStates: {}, deployments: {} };
3420
+ const catalog = {
3421
+ models: [],
3422
+ modelCapabilities: {},
3423
+ modelStates: {},
3424
+ deployments: {},
3425
+ authFailed: false
3426
+ };
3427
+ const capabilityRows = {};
3040
3428
  for (const row of detail.data.data) {
3041
3429
  if (typeof row?.model_name !== "string" || row.model_name.length === 0) continue;
3042
3430
  const alias = row.model_name;
3043
- if (catalog.deployments[alias] !== void 0) continue;
3044
- catalog.models.push(alias);
3431
+ if (catalog.deployments[alias] === void 0) {
3432
+ catalog.models.push(alias);
3433
+ catalog.deployments[alias] = [];
3434
+ capabilityRows[alias] = [];
3435
+ }
3045
3436
  const caps = row.model_info ? capabilitiesFromLiteLLMModelInfo(row.model_info) : {};
3046
- if (Object.keys(caps).length > 0) catalog.modelCapabilities[alias] = caps;
3437
+ capabilityRows[alias]?.push(caps);
3047
3438
  const upstream = row.litellm_params?.model;
3048
3439
  const apiBase = row.litellm_params?.api_base;
3049
- catalog.deployments[alias] = {
3440
+ catalog.deployments[alias]?.push({
3050
3441
  model: typeof upstream === "string" ? upstream : alias,
3051
3442
  ...typeof apiBase === "string" ? { apiBase } : {}
3052
- };
3443
+ });
3444
+ }
3445
+ for (const alias of catalog.models) {
3446
+ const caps = aggregateLiteLLMCapabilities(capabilityRows[alias] ?? []);
3447
+ if (Object.keys(caps).length > 0) catalog.modelCapabilities[alias] = caps;
3053
3448
  }
3054
3449
  if (catalog.models.length > 0) return catalog;
3055
3450
  }
3451
+ const detailAuthFailed = isAuthError(detail);
3056
3452
  const listOpts = { url: `${base}/v1/models`, timeoutMs: ctx.httpTimeoutMs, headers };
3057
3453
  const list = await (ctx.signal ? probeJson({ ...listOpts, signal: ctx.signal }) : probeJson(listOpts));
3058
- if (!list.ok || !Array.isArray(list.data?.data)) return EMPTY_CATALOG;
3454
+ if (!list.ok || !Array.isArray(list.data?.data)) {
3455
+ return { ...EMPTY_CATALOG, authFailed: detailAuthFailed || isAuthError(list) };
3456
+ }
3059
3457
  const models = list.data.data.map((row) => typeof row?.id === "string" ? row.id : null).filter((id) => id !== null && id.length > 0);
3060
- return { models, modelCapabilities: {}, modelStates: {}, deployments: {} };
3458
+ return { models, modelCapabilities: {}, modelStates: {}, deployments: {}, authFailed: false };
3061
3459
  }
3062
3460
  var litellmRuntime = {
3063
3461
  id: "litellm",
@@ -3078,8 +3476,9 @@ var litellmRuntime = {
3078
3476
  if (catalog.models.length === 0) {
3079
3477
  const result2 = {
3080
3478
  ok: false,
3081
- error: "gateway is live but served no model catalog; check the target's API key"
3479
+ error: catalog.authFailed ? "gateway rejected the key" : "gateway is live but served no model catalog; check the target's API key"
3082
3480
  };
3481
+ if (catalog.authFailed) result2.authFailed = true;
3083
3482
  if (live.latencyMs !== void 0) result2.latencyMs = live.latencyMs;
3084
3483
  return result2;
3085
3484
  }
@@ -3099,7 +3498,18 @@ var litellmRuntime = {
3099
3498
  if (configured && !catalog.models.includes(configured)) {
3100
3499
  notes.push(`configured model '${configured}' is not in the gateway catalog`);
3101
3500
  }
3102
- const routed = Object.entries(catalog.deployments).map(([alias, deployment]) => `${alias}=${deployment.model}`).sort();
3501
+ const routeEntries = Object.entries(catalog.deployments);
3502
+ const physical = routeEntries.filter(([alias, deployments]) => {
3503
+ const slash = alias.indexOf("/");
3504
+ if (slash <= 0 || deployments.length !== 1) return false;
3505
+ const upstream = deployments[0]?.model.replace(/^openai\//u, "");
3506
+ return upstream === alias.slice(slash + 1);
3507
+ });
3508
+ if (physical.length > 0) notes.push(`physical routes: ${physical.length} node/model names map one-to-one`);
3509
+ const routed = routeEntries.filter(([alias]) => !physical.some(([physicalAlias]) => physicalAlias === alias)).map(([alias, deployments]) => {
3510
+ const models = [...new Set(deployments.map((deployment) => deployment.model))];
3511
+ return `${alias}=${models.join("|")}`;
3512
+ }).sort();
3103
3513
  if (routed.length > 0) notes.push(`routes: ${routed.join(", ")}`);
3104
3514
  if (notes.length > 0) result.notes = notes;
3105
3515
  return result;
@@ -3167,9 +3577,14 @@ function registerBuiltinRuntimes(registry) {
3167
3577
  }
3168
3578
 
3169
3579
  export {
3580
+ isHarmonyModelId,
3581
+ inferLocalModelFamily,
3170
3582
  CLIO_MIN_CONTEXT_WINDOW,
3171
3583
  CLIO_MIN_MAX_OUTPUT_TOKENS,
3172
3584
  CLIO_CONTEXT_WINDOW_WARN_BELOW,
3585
+ EMPTY_CAPABILITIES,
3586
+ VALID_THINKING_LEVELS,
3587
+ availableThinkingLevels,
3173
3588
  extractLocalModelQuirks,
3174
3589
  lmStudioRootUrl,
3175
3590
  requestLmStudioJson,
@@ -3177,8 +3592,9 @@ export {
3177
3592
  lmStudioReasoningEffort,
3178
3593
  listLmStudioModels,
3179
3594
  greetLmStudio,
3595
+ boundedExternalDiagnostic,
3180
3596
  formatContextWindowSlots,
3181
3597
  BUILTIN_RUNTIMES,
3182
3598
  registerBuiltinRuntimes
3183
3599
  };
3184
- //# sourceMappingURL=chunk-QKIFBZKT.js.map
3600
+ //# sourceMappingURL=chunk-VW6DOEDG.js.map