@vercel/cli-support 65.3.1 → 65.4.0

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 (257) hide show
  1. package/README.md +1 -1
  2. package/dist/chunks/add-7NS6HIWC.js +8 -0
  3. package/dist/chunks/add-NMYFDVXW.js +8 -0
  4. package/dist/chunks/add-PMJ5BECU.js +8 -0
  5. package/dist/chunks/build-BCY6HQJG.js +7 -0
  6. package/dist/chunks/{chunk-SKYDLHEZ.js → chunk-2K3ISCQ6.js} +1 -1
  7. package/dist/chunks/{chunk-BL3HBRF6.js → chunk-2TUVL6WE.js} +1 -1
  8. package/dist/chunks/{chunk-22FDWPWY.js → chunk-363SJ4TN.js} +1 -1
  9. package/dist/chunks/chunk-462YCCJZ.js +7 -0
  10. package/dist/chunks/{chunk-KNLGWGUE.js → chunk-4N6LMERQ.js} +6 -6
  11. package/dist/chunks/chunk-527GBU3K.js +7 -0
  12. package/dist/chunks/chunk-5IWFRZQT.js +10 -0
  13. package/dist/chunks/chunk-5KUUMQ3M.js +7 -0
  14. package/dist/chunks/{chunk-IVSC7ZFJ.js → chunk-5V53NA6C.js} +1 -1
  15. package/dist/chunks/chunk-6I6QJHCY.js +7 -0
  16. package/dist/chunks/chunk-6TXEVQA4.js +7 -0
  17. package/dist/chunks/{chunk-2PKEEQ5W.js → chunk-6YXIWZ3X.js} +1 -1
  18. package/dist/chunks/{chunk-7HV7O6DM.js → chunk-7E3WREH5.js} +1 -1
  19. package/dist/chunks/{chunk-Y6AGOERS.js → chunk-7L5QUDUR.js} +1 -1
  20. package/dist/chunks/{chunk-X4762EE4.js → chunk-7QAGSRCU.js} +1 -1
  21. package/dist/chunks/{chunk-NTZ5WWYV.js → chunk-7R6TRRG5.js} +1 -1
  22. package/dist/chunks/{chunk-WCWP4GBR.js → chunk-AYUUSAB7.js} +1 -1
  23. package/dist/chunks/chunk-BVGGTBYE.js +7 -0
  24. package/dist/chunks/{chunk-YN3C5BL5.js → chunk-C7FQMC6D.js} +1 -1
  25. package/dist/chunks/{chunk-2U7DJZSQ.js → chunk-CBVKB3DT.js} +1 -1
  26. package/dist/chunks/{chunk-FDNYYENK.js → chunk-CC6FLKIP.js} +1 -1
  27. package/dist/chunks/chunk-CR3NBTHV.js +7 -0
  28. package/dist/chunks/{chunk-BBKEP7RO.js → chunk-CWM2F235.js} +1 -1
  29. package/dist/chunks/{chunk-IUXSJWL3.js → chunk-DKJL2KV7.js} +1 -1
  30. package/dist/chunks/{chunk-2ACMWVTB.js → chunk-DQ2SVW4R.js} +1 -1
  31. package/dist/chunks/{chunk-SLI2O5X7.js → chunk-EAXMWCOL.js} +2 -2
  32. package/dist/chunks/{chunk-LRYGNQ6C.js → chunk-ECEDD646.js} +1 -1
  33. package/dist/chunks/{chunk-IGDG5CWT.js → chunk-EEUJLJEJ.js} +1 -1
  34. package/dist/chunks/{chunk-VQSLPYAF.js → chunk-EGNR2DEI.js} +1 -1
  35. package/dist/chunks/chunk-EISD3RG7.js +11 -0
  36. package/dist/chunks/{chunk-GVTXA6HG.js → chunk-EKZTFGDX.js} +1 -1
  37. package/dist/chunks/{chunk-CEMPU323.js → chunk-EU2GBIPC.js} +1 -1
  38. package/dist/chunks/{chunk-3ADDGPEN.js → chunk-F6EBOT64.js} +1 -1
  39. package/dist/chunks/chunk-FHU2O7ZJ.js +8 -0
  40. package/dist/chunks/{chunk-KH6565YH.js → chunk-FLHO75XC.js} +1 -1
  41. package/dist/chunks/chunk-FSPPKNKN.js +7 -0
  42. package/dist/chunks/{chunk-43GBAKL2.js → chunk-GCZVIDNG.js} +1 -1
  43. package/dist/chunks/{chunk-G4T7VBGN.js → chunk-HSFKISDH.js} +1 -1
  44. package/dist/chunks/{chunk-OQCMRU3J.js → chunk-HTXDC7E2.js} +2 -2
  45. package/dist/chunks/{chunk-76SVVWPH.js → chunk-IOZ3I765.js} +1 -1
  46. package/dist/chunks/{chunk-UKQMYTWW.js → chunk-JLE7K4SY.js} +1 -1
  47. package/dist/chunks/{chunk-3JGBBS6V.js → chunk-JP33AIDQ.js} +1 -1
  48. package/dist/chunks/{chunk-ULHNMQ7C.js → chunk-JRPNHWA3.js} +1 -1
  49. package/dist/chunks/{chunk-D2BZMGHP.js → chunk-JUSR7V2L.js} +1 -1
  50. package/dist/chunks/{chunk-XB4SKARZ.js → chunk-JWCEHQQF.js} +1 -1
  51. package/dist/chunks/chunk-K5U47EVH.js +7 -0
  52. package/dist/chunks/{chunk-VOCZ34ON.js → chunk-KCKYPLIH.js} +1 -1
  53. package/dist/chunks/{chunk-2WYYGGEO.js → chunk-KGBIRIFF.js} +1 -1
  54. package/dist/chunks/{chunk-RRREFECI.js → chunk-KJA2GKPT.js} +1 -1
  55. package/dist/chunks/{chunk-S5IWVPYT.js → chunk-KPQLUGFI.js} +1 -1
  56. package/dist/chunks/{chunk-S4SJ7GIZ.js → chunk-KQCFC2JL.js} +1 -1
  57. package/dist/chunks/{chunk-XXXRTHTP.js → chunk-KQCROPL3.js} +1 -1
  58. package/dist/chunks/{chunk-3KKFLKQG.js → chunk-KY335KWI.js} +1 -1
  59. package/dist/chunks/{chunk-OWOWPOIE.js → chunk-L3JYCXVB.js} +1 -1
  60. package/dist/chunks/chunk-LFOWP74R.js +7 -0
  61. package/dist/chunks/{chunk-PFNYWWLI.js → chunk-LOBA3E72.js} +1 -1
  62. package/dist/chunks/{chunk-XZV4BFM5.js → chunk-LQVSU5HR.js} +1 -1
  63. package/dist/chunks/{chunk-2H3SB5RP.js → chunk-LW4N3CW6.js} +1 -1
  64. package/dist/chunks/{chunk-6ISAISGD.js → chunk-M2NXKZKX.js} +1 -1
  65. package/dist/chunks/{chunk-F2SWJEYV.js → chunk-MBEKRUTQ.js} +1 -1
  66. package/dist/chunks/{chunk-UJSW56GS.js → chunk-N2FLYCCO.js} +1 -1
  67. package/dist/chunks/{chunk-ZH6KHD55.js → chunk-N6JBQMOF.js} +2 -2
  68. package/dist/chunks/{chunk-OCQPXOTX.js → chunk-NAX6IARA.js} +1 -1
  69. package/dist/chunks/{chunk-4UGHFESV.js → chunk-NGKO2OOU.js} +1 -1
  70. package/dist/chunks/chunk-NW7WWUCQ.js +9 -0
  71. package/dist/chunks/chunk-O4WNSKQR.js +15 -0
  72. package/dist/chunks/{chunk-7Z3WUAO5.js → chunk-O72YDZKD.js} +1 -1
  73. package/dist/chunks/{chunk-LKLH6DZP.js → chunk-OHEOYFBU.js} +1 -1
  74. package/dist/chunks/{chunk-LJBUJ23M.js → chunk-OZCQTXI4.js} +1 -1
  75. package/dist/chunks/{chunk-LCHECISY.js → chunk-Q4KTAQB3.js} +1 -1
  76. package/dist/chunks/{chunk-TZFDVQ72.js → chunk-QIVX6SCR.js} +1 -1
  77. package/dist/chunks/{chunk-7Y46LB43.js → chunk-QVHXFHBV.js} +1 -1
  78. package/dist/chunks/chunk-QVXS234E.js +7 -0
  79. package/dist/chunks/{chunk-SXOSF4O6.js → chunk-QVZAAMGQ.js} +1 -1
  80. package/dist/chunks/chunk-R2BUF6Z7.js +7 -0
  81. package/dist/chunks/{chunk-OGPENBY2.js → chunk-R2XHJDAP.js} +1 -1
  82. package/dist/chunks/{chunk-E6CO6TUM.js → chunk-RMZTB2IU.js} +1 -1
  83. package/dist/chunks/{chunk-LT3UK4K6.js → chunk-SLGUYM42.js} +1 -1
  84. package/dist/chunks/{chunk-7BGKE3JW.js → chunk-SYFG2RM6.js} +1 -1
  85. package/dist/chunks/chunk-T6243EDS.js +7 -0
  86. package/dist/chunks/chunk-TAISZMA2.js +7 -0
  87. package/dist/chunks/{chunk-TO5PJDEN.js → chunk-TEYREL44.js} +1 -1
  88. package/dist/chunks/{chunk-6KVHNQW4.js → chunk-TIPQQ4TG.js} +1 -1
  89. package/dist/chunks/{chunk-DUT4U5YY.js → chunk-U2OBPULW.js} +1 -1
  90. package/dist/chunks/{chunk-OQPXJCMK.js → chunk-UGNIIDHR.js} +1 -1
  91. package/dist/chunks/{chunk-NQWGRKF4.js → chunk-UHBMX3OK.js} +1 -1
  92. package/dist/chunks/{chunk-QMCHGGDX.js → chunk-VNIKIQVE.js} +1 -1
  93. package/dist/chunks/{chunk-DGYHWXD2.js → chunk-WDXW6A4H.js} +2 -2
  94. package/dist/chunks/{chunk-L4NSF346.js → chunk-WEH6XC4Y.js} +1 -1
  95. package/dist/chunks/{chunk-TKBORMUF.js → chunk-WKZ6JSGZ.js} +1 -1
  96. package/dist/chunks/{chunk-WGXKX24Q.js → chunk-WVHCBDTB.js} +1 -1
  97. package/dist/chunks/{chunk-COM5YCHF.js → chunk-XC46OAAT.js} +1 -1
  98. package/dist/chunks/{chunk-WBF36MYT.js → chunk-XVDRGWXM.js} +1 -1
  99. package/dist/chunks/{chunk-IKQTP764.js → chunk-Y5ZMKL7E.js} +1 -1
  100. package/dist/chunks/{chunk-NEFDNROD.js → chunk-YEZJNXQX.js} +1 -1
  101. package/dist/chunks/{chunk-VMMMBWD3.js → chunk-YHULP2KK.js} +1 -1
  102. package/dist/chunks/{chunk-OMCGXRSA.js → chunk-YMZ6WBKB.js} +2 -2
  103. package/dist/chunks/{chunk-URPEIX6M.js → chunk-ZN6CQWVP.js} +1 -1
  104. package/dist/chunks/{chunk-YK7XLFU2.js → chunk-ZQBSAMFL.js} +1 -1
  105. package/dist/chunks/clear-FKVWDCVA.js +8 -0
  106. package/dist/chunks/{compile-vercel-config-3IYM2CHC.js → compile-vercel-config-GWAJE44R.js} +1 -1
  107. package/dist/chunks/config-5WVLG5SE.js +8 -0
  108. package/dist/chunks/{config-ZFIC7N4D.js → config-RMOHN5YT.js} +1 -1
  109. package/dist/chunks/config-validator.mjs +1 -1
  110. package/dist/chunks/{constants-ICJL2EO5.js → constants-JAB7MRSK.js} +1 -1
  111. package/dist/chunks/delete-5WMB4WFR.js +9 -0
  112. package/dist/chunks/delete-EM4JZPFA.js +10 -0
  113. package/dist/chunks/{detect-services-MOXTX5XG.js → detect-services-BSJGB4RM.js} +1 -1
  114. package/dist/chunks/disable-QOM7UHQC.js +7 -0
  115. package/dist/chunks/discard-L5ZH7P5B.js +14 -0
  116. package/dist/chunks/edit-F3VJGCG2.js +9 -0
  117. package/dist/chunks/edit-TM7YCWBU.js +8 -0
  118. package/dist/chunks/enable-72C3QX34.js +7 -0
  119. package/dist/chunks/{export-MHSH7QCX.js → export-EPLYZF2Q.js} +1 -1
  120. package/dist/chunks/{future-FFOGTKMF.js → future-V77DRMQG.js} +1 -1
  121. package/dist/chunks/generate-cert-for-deploy-Y3YHBMPU.js +7 -0
  122. package/dist/chunks/{image-7METSS6F.js → image-CVXEXU5R.js} +1 -1
  123. package/dist/chunks/{import-builders-GM2SERWV.js → import-builders-PGRKJOOE.js} +1 -1
  124. package/dist/chunks/inspect-BTRNXRJT.js +9 -0
  125. package/dist/chunks/{inspect-IAWVHJXQ.js → inspect-CZ7WXYE5.js} +1 -1
  126. package/dist/chunks/inspect-FGDVWAQP.js +13 -0
  127. package/dist/chunks/{inspect-A7WJQQZO.js → inspect-HFDGZNWC.js} +1 -1
  128. package/dist/chunks/{inspect-DI434TAM.js → inspect-T2AIREYK.js} +1 -1
  129. package/dist/chunks/list-CKRRHAOE.js +12 -0
  130. package/dist/chunks/{list-WWU734RK.js → list-FLREMGJR.js} +1 -1
  131. package/dist/chunks/{list-INRPH25K.js → list-ON4YTQRN.js} +1 -1
  132. package/dist/chunks/login-55LJ5ZA6.js +9 -0
  133. package/dist/chunks/{login-R5NQRPQC.js → login-DQRZSD4Z.js} +1 -1
  134. package/dist/chunks/logs-2HQXWOHM.js +7 -0
  135. package/dist/chunks/{ls-S5E2NQMI.js → ls-2HUJHVLA.js} +1 -1
  136. package/dist/chunks/{ls-V2ZSIVO3.js → ls-3DVM5HLK.js} +1 -1
  137. package/dist/chunks/ls-4B3QYHCI.js +8 -0
  138. package/dist/chunks/{ls-MCQ2NS65.js → ls-A7K4XDQB.js} +1 -1
  139. package/dist/chunks/{ls-LIGIBVAT.js → ls-FK5XEJEU.js} +1 -1
  140. package/dist/chunks/{ls-VXH4QYF5.js → ls-QGUKJJY5.js} +1 -1
  141. package/dist/chunks/ls-VTKHPDWS.js +11 -0
  142. package/dist/chunks/mutate-7ADZBCZM.js +9 -0
  143. package/dist/chunks/{notifications-KFZ333V5.js → notifications-XZJXE2K4.js} +1 -1
  144. package/dist/chunks/open-EE5IZQD7.js +7 -0
  145. package/dist/chunks/{openapi-JGYEFJJV.js → openapi-QBX62ZXC.js} +1 -1
  146. package/dist/chunks/{permissions-ZSHKMXBZ.js → permissions-VYJ4LL5R.js} +1 -1
  147. package/dist/chunks/{plugin-offer-Z6FCPQFD.js → plugin-offer-TEGYA3TA.js} +1 -1
  148. package/dist/chunks/{prompt-missing-credentials-KOA7C4QC.js → prompt-missing-credentials-VP6OVCFM.js} +1 -1
  149. package/dist/chunks/publish-2HEK5UMJ.js +15 -0
  150. package/dist/chunks/pull-WRTTSY7J.js +7 -0
  151. package/dist/chunks/purchase-domain-if-available-6S3NLTUI.js +7 -0
  152. package/dist/chunks/push-L3QRGGLC.js +7 -0
  153. package/dist/chunks/{query-JGPO7TNY.js → query-FXXLX6UB.js} +3 -3
  154. package/dist/chunks/{reauthenticate-OZRQFR66.js → reauthenticate-IXQDC4UZ.js} +1 -1
  155. package/dist/chunks/reorder-B4OXSYCI.js +10 -0
  156. package/dist/chunks/reply-F637K6XH.js +9 -0
  157. package/dist/chunks/resolve-E3F6NYQZ.js +12 -0
  158. package/dist/chunks/{resolve-agent-team-KX77HEAF.js → resolve-agent-team-EIPCH766.js} +1 -1
  159. package/dist/chunks/restore-Q25KRZPH.js +16 -0
  160. package/dist/chunks/rm-FWD2NUGX.js +8 -0
  161. package/dist/chunks/rm-JMQ4QKCC.js +8 -0
  162. package/dist/chunks/rm-PPG7P3GN.js +8 -0
  163. package/dist/chunks/rm-SH3DYKNS.js +8 -0
  164. package/dist/chunks/rm-UEBLKFVC.js +8 -0
  165. package/dist/chunks/{routes-P6LKQCWH.js → routes-PKTWMDWQ.js} +1 -1
  166. package/dist/chunks/rule-inspect-LKQA5I4V.js +8 -0
  167. package/dist/chunks/{schema-YOEAK4VX.js → schema-FBV42W7N.js} +1 -1
  168. package/dist/chunks/{schema-BEUO7G52.js → schema-ZWE5MNMG.js} +1 -1
  169. package/dist/chunks/{select-org-OMLGQEKK.js → select-org-WMB752Z6.js} +1 -1
  170. package/dist/chunks/set-UTYIPOLC.js +7 -0
  171. package/dist/chunks/setup-and-link-ZLY5XQW5.js +7 -0
  172. package/dist/chunks/{skills-4J2NC2QI.js → skills-RKIGVVNM.js} +2 -2
  173. package/dist/chunks/{tags-ZXZQEXOV.js → tags-UCLZ5UMX.js} +1 -1
  174. package/dist/chunks/{types-SK6J2HFE.js → types-YM7TMHXW.js} +1 -1
  175. package/dist/chunks/{update-25CKNOY5.js → update-BGDQ5TXO.js} +1 -1
  176. package/dist/commands/build/index.js +1 -1
  177. package/dist/commands/deploy/index.js +4 -4
  178. package/dist/commands/dev/index.js +4 -4
  179. package/dist/commands/env/index.js +1 -1
  180. package/dist/commands/link/index.js +1 -1
  181. package/dist/commands/list/index.js +1 -1
  182. package/dist/commands/project/index.js +8 -8
  183. package/dist/commands-account.js +8 -8
  184. package/dist/commands-ai.js +12 -12
  185. package/dist/commands-blob.js +8 -8
  186. package/dist/commands-core.js +11 -11
  187. package/dist/commands-deployments.js +1 -1
  188. package/dist/commands-flags.js +6 -6
  189. package/dist/commands-integrations.js +16 -16
  190. package/dist/commands-observability.js +5 -5
  191. package/dist/commands-routing.js +18 -18
  192. package/dist/help.js +1 -1
  193. package/dist/index.js +5 -3
  194. package/dist/internal-build.js +1 -1
  195. package/dist/package.json +60 -61
  196. package/dist/root-help-commands.mjs +1 -1
  197. package/dist/vc.js +148 -137
  198. package/dist/version.mjs +1 -1
  199. package/package.json +54 -54
  200. package/dist/chunks/add-5YZQTIQM.js +0 -8
  201. package/dist/chunks/add-A524QQ2H.js +0 -8
  202. package/dist/chunks/add-V4JMUHKO.js +0 -8
  203. package/dist/chunks/build-K2PVDJZ4.js +0 -7
  204. package/dist/chunks/chunk-3AYYFYZG.js +0 -7
  205. package/dist/chunks/chunk-5IASAERQ.js +0 -7
  206. package/dist/chunks/chunk-76KGQU2G.js +0 -7
  207. package/dist/chunks/chunk-ABZEMNDR.js +0 -7
  208. package/dist/chunks/chunk-APZULWJC.js +0 -8
  209. package/dist/chunks/chunk-AWMQGOS2.js +0 -7
  210. package/dist/chunks/chunk-B4UE4LVE.js +0 -7
  211. package/dist/chunks/chunk-B4YYOSPY.js +0 -7
  212. package/dist/chunks/chunk-E2SADN6I.js +0 -7
  213. package/dist/chunks/chunk-IA3MXJRC.js +0 -8
  214. package/dist/chunks/chunk-IEPW2YRH.js +0 -7
  215. package/dist/chunks/chunk-LUBUI5GF.js +0 -7
  216. package/dist/chunks/chunk-OKEBIUKZ.js +0 -7
  217. package/dist/chunks/chunk-QZX7VG2V.js +0 -9
  218. package/dist/chunks/chunk-RUXO73ON.js +0 -7
  219. package/dist/chunks/chunk-TPNOSQZ3.js +0 -15
  220. package/dist/chunks/chunk-UNEGQPD3.js +0 -7
  221. package/dist/chunks/chunk-V7BEC3E4.js +0 -10
  222. package/dist/chunks/chunk-YHQ7PPXP.js +0 -7
  223. package/dist/chunks/clear-ZS4KQ7OT.js +0 -8
  224. package/dist/chunks/config-N2SBVW4T.js +0 -8
  225. package/dist/chunks/delete-2ZE2NVHI.js +0 -10
  226. package/dist/chunks/delete-AL57HZDQ.js +0 -9
  227. package/dist/chunks/disable-MKI3BKNH.js +0 -7
  228. package/dist/chunks/discard-SI4H7ST3.js +0 -14
  229. package/dist/chunks/edit-DNWH6SPE.js +0 -8
  230. package/dist/chunks/edit-WYNWDFUJ.js +0 -9
  231. package/dist/chunks/enable-J6MMYPYF.js +0 -7
  232. package/dist/chunks/generate-cert-for-deploy-YZKNGAEQ.js +0 -7
  233. package/dist/chunks/inspect-H2Q7XOWN.js +0 -13
  234. package/dist/chunks/inspect-H5JC2XKI.js +0 -9
  235. package/dist/chunks/list-ELEUTZWJ.js +0 -12
  236. package/dist/chunks/login-ZF2TLCQB.js +0 -9
  237. package/dist/chunks/logs-UD7FEXZ7.js +0 -7
  238. package/dist/chunks/ls-5ZEAKKPQ.js +0 -8
  239. package/dist/chunks/ls-IXRLAJ4L.js +0 -11
  240. package/dist/chunks/mutate-OQWOKLIW.js +0 -9
  241. package/dist/chunks/open-HH6K7ZRC.js +0 -7
  242. package/dist/chunks/publish-FPNQ2US4.js +0 -15
  243. package/dist/chunks/pull-7OGOIKB3.js +0 -7
  244. package/dist/chunks/purchase-domain-if-available-F4LKHVBD.js +0 -7
  245. package/dist/chunks/push-NY3SIK2C.js +0 -7
  246. package/dist/chunks/reorder-4J2STFUS.js +0 -10
  247. package/dist/chunks/reply-EO4NTTPW.js +0 -9
  248. package/dist/chunks/resolve-RPHHRPNM.js +0 -12
  249. package/dist/chunks/restore-TEA6TSVK.js +0 -16
  250. package/dist/chunks/rm-BPILSPUI.js +0 -8
  251. package/dist/chunks/rm-F6XVUDBM.js +0 -8
  252. package/dist/chunks/rm-JCPXV2FN.js +0 -8
  253. package/dist/chunks/rm-LPQRGX7N.js +0 -8
  254. package/dist/chunks/rm-WHUGT6TE.js +0 -8
  255. package/dist/chunks/rule-inspect-BOETGPFO.js +0 -8
  256. package/dist/chunks/set-5XY27S7R.js +0 -7
  257. package/dist/chunks/setup-and-link-A7M3QT52.js +0 -7
@@ -4,16 +4,16 @@ import { dirname as __dirname_ } from 'node:path';
4
4
  const require = __createRequire(import.meta.url);
5
5
  const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __dirname_(__filename);
7
- import{GATEWAY_ANTHROPIC_BASE_URL,GATEWAY_API_KEY_ENV,GATEWAY_CODING_AGENT_BASE_URL,GATEWAY_CURSOR_BASE_URL,GATEWAY_DEFAULT_MODEL,KEY_PLACEHOLDER,MANAGED_BLOCK_END,MANAGED_BLOCK_START,backupFile,claudeCode,codex,ensureMode,isFile,isSymlink,maskSecret,mergeJson,mergeJsonc,mergeToml,parseJsonObjectOrNull,pathExists,readFileOrNull,resolveGatewayBaseUrl,setupCodexPlugin,setupVercelPlugin,upsertManagedBlock,writeConfigFile}from"./chunks/chunk-PFPJLIFF.js";import{selectOrg}from"./chunks/chunk-Y6AGOERS.js";import{dump,load}from"./chunks/chunk-V6Y6UK6B.js";import{init_main,parse as parse2}from"./chunks/chunk-J24BABG4.js";import{init_dist,parse,stringify}from"./chunks/chunk-U4Z2MMOF.js";import{require_async_sema}from"./chunks/chunk-NZ2TFADV.js";import{CHECKBOX_INSTRUCTIONS}from"./chunks/chunk-OFDTADPQ.js";import{tokensAfterCommand}from"./chunks/chunk-V7BEC3E4.js";import"./chunks/chunk-2EYYB6YN.js";import{amountMatchesPrice,buy,canPromptForCharge,chargeFailureReason,deleteCertById,formatAmountArg,formatTerm,formatUsd,getDomains,getTeamMemberByIdentifier,getTeamMembersByIds,isDomainExternal,parseAmount,printChargeRecovery,refuseUnnamedTeam,removeAliasById,reportChargeFailure,reportPriceChanged,reportUnknownOutcome,reportUsageError,teamMemberLabel,writeChargeAction}from"./chunks/chunk-6KVHNQW4.js";import{addDomain,getDomainByName,require_cjs}from"./chunks/chunk-DUT4U5YY.js";import{getDomainPrice,getDomainStatus,getOrderOutcome,pollForOrder}from"./chunks/chunk-76SVVWPH.js";import{external_exports}from"./chunks/chunk-2NABMKFV.js";import{getAliases}from"./chunks/chunk-SKYDLHEZ.js";import{require_execa}from"./chunks/chunk-BUJITHGZ.js";import{InvalidNextError,getPaginationOpts}from"./chunks/chunk-C6GY2G73.js";import{formatDate,formatDateWithoutTime}from"./chunks/chunk-HRR57QNP.js";import{formatTable}from"./chunks/chunk-LSQREJXO.js";import{stamp_default}from"./chunks/chunk-A2RZZQEP.js";import"./chunks/chunk-Q7D7RGXM.js";import"./chunks/chunk-FBYA6LLM.js";import{readOnOffOption}from"./chunks/chunk-IKQTP764.js";import{canPrompt}from"./chunks/chunk-IQ7FPAI4.js";import"./chunks/chunk-GD7AV7BO.js";import{getCommandFlags}from"./chunks/chunk-XGTKHQTT.js";import{DEFAULT_LIST_LIMIT,PaginationError,fetchAllPages,parseListLimit,printNextPageCommand,printNextPageHint}from"./chunks/chunk-QMCHGGDX.js";import"./chunks/chunk-PFD7LETF.js";import{getInvalidSubcommand}from"./chunks/chunk-TG2RCYTH.js";import{getSubcommand}from"./chunks/chunk-ETV3C2CV.js";import{validateLsArgs}from"./chunks/chunk-KW6GSQXV.js";import"./chunks/chunk-SCV7XEEO.js";import{addSubcommand,aiGatewayCommand,apiKeysSubcommand,autoRenewSubcommand,budgetsDefaultsListSubcommand,budgetsDefaultsRemoveSubcommand,budgetsDefaultsSetSubcommand,budgetsDefaultsSubcommand,budgetsInspectSubcommand,budgetsListSubcommand,budgetsRemoveSubcommand,budgetsSetSubcommand,budgetsSubcommand,buySubcommand,checkSubcommand,codingAgentsSubcommand,createSubcommand,domainsCommand,getCommandAliases,inspectSubcommand2 as inspectSubcommand,inspectSubcommand3 as inspectSubcommand2,leaderboardAppsSubcommand,leaderboardLabsSubcommand,leaderboardModelsSubcommand,leaderboardProvidersSubcommand,leaderboardSubcommand,listSubcommand2 as listSubcommand,listSubcommand4 as listSubcommand2,modelsEndpointsSubcommand,modelsListSubcommand,modelsSubcommand,moveSubcommand,priceSubcommand,removeSubcommand,removeSubcommand3 as removeSubcommand2,renewSubcommand,rulesAddSubcommand,rulesEditSubcommand,rulesListSubcommand,rulesRemoveSubcommand,rulesSubcommand,searchSubcommand,setupSubcommand,transferInSubcommand,verifySubcommand,virtualModelsCreateSubcommand,virtualModelsEditSubcommand,virtualModelsInspectSubcommand,virtualModelsListSubcommand,virtualModelsRemoveSubcommand,virtualModelsRestoreSubcommand,virtualModelsSubcommand}from"./chunks/chunk-TPNOSQZ3.js";import"./chunks/chunk-LUBUI5GF.js";import"./chunks/chunk-GVTXA6HG.js";import"./chunks/chunk-5IASAERQ.js";import{gatewaySubcommand,pluginSubcommand,setupCommand,skillsSubcommand}from"./chunks/chunk-WGXKX24Q.js";import"./chunks/chunk-E2SADN6I.js";import"./chunks/chunk-ABZEMNDR.js";import"./chunks/chunk-3AYYFYZG.js";import"./chunks/chunk-76KGQU2G.js";import"./chunks/chunk-UNEGQPD3.js";import"./chunks/chunk-YHQ7PPXP.js";import"./chunks/chunk-NQWGRKF4.js";import"./chunks/chunk-IGDG5CWT.js";import"./chunks/chunk-QZX7VG2V.js";import"./chunks/chunk-3ADDGPEN.js";import"./chunks/chunk-B4YYOSPY.js";import"./chunks/chunk-PFNYWWLI.js";import"./chunks/chunk-NTZ5WWYV.js";import"./chunks/chunk-JALVF3C2.js";import"./chunks/chunk-LJBUJ23M.js";import"./chunks/chunk-OKEBIUKZ.js";import{help}from"./chunks/chunk-KH6565YH.js";import{table}from"./chunks/chunk-773GOZIR.js";import{printError}from"./chunks/chunk-G4T7VBGN.js";import"./chunks/chunk-67GZ5REA.js";import"./chunks/chunk-BS32OUOC.js";import{param}from"./chunks/chunk-3G3FQYMW.js";import{TelemetryClient}from"./chunks/chunk-2PKEEQ5W.js";import"./chunks/chunk-PUKYAALC.js";import{getContextName,getScope}from"./chunks/chunk-B4UE4LVE.js";import{require_ms}from"./chunks/chunk-MXTC4ZAQ.js";import"./chunks/chunk-NWGBDBZI.js";import{getTeams}from"./chunks/chunk-FGFLTLEA.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS,buildCommandWithGlobalFlags,getExitCodeForReason,openUrlInBrowserCommand,outputActionRequired,outputAgentError,outputAgentSuccess,shouldEmitNonInteractiveCommandError,withGlobalFlags}from"./chunks/chunk-DGYHWXD2.js";import"./chunks/chunk-IUXSJWL3.js";import{getLinkedProject,getProjectByNameOrId,getUser,require_pluralize}from"./chunks/chunk-KNLGWGUE.js";import{ALIGNED_LABEL_WIDTH,printAlignedLabel}from"./chunks/chunk-ADLBLGT3.js";import"./chunks/chunk-BBKEP7RO.js";import"./chunks/chunk-4NTBYNFR.js";import{parseArguments}from"./chunks/chunk-VOCZ34ON.js";import{getTeamByIdOrSlug,quoteArg}from"./chunks/chunk-F53OKXYI.js";import{getFlagsSpecification,stripSensitiveAuthArgs,validateJsonOutput,warnDeprecatedSubcommand}from"./chunks/chunk-AWMQGOS2.js";import"./chunks/chunk-FUX6LKNP.js";import"./chunks/chunk-OPORM35X.js";import"./chunks/chunk-4SAVH3H7.js";import{APIError,DomainAlreadyExists,DomainChargeOutcomeUnknown,DomainExternal,DomainMoveConflict,DomainNotAvailable,DomainNotFound,DomainNotVerified,DomainPaymentError,DomainPermissionDenied,DomainRemovalConflict,InvalidDomain,InvalidMoveDestination,ProjectNotFound,UnexpectedDomainTransferError,UnsupportedTLD,code,isAPIError}from"./chunks/chunk-6VH56CX2.js";import{getCommandName,getCommandNamePlain,packageName}from"./chunks/chunk-JESNVRVR.js";import{chars_default,output_manager_default}from"./chunks/chunk-XP3FT56R.js";import"./chunks/chunk-BLUPZPAS.js";import{require_dist}from"./chunks/chunk-RM3ZDRYE.js";import"./chunks/chunk-OO572JUC.js";import"./chunks/chunk-D3AHZ5LI.js";import"./chunks/chunk-2GHZGOWT.js";import"./chunks/chunk-YHPPP3SF.js";import{require_source}from"./chunks/chunk-NB2WLB3J.js";import"./chunks/chunk-ISWW3DKF.js";import"./chunks/chunk-BRQUZ5NC.js";import{__toESM}from"./chunks/chunk-BZENIQ7N.js";var import_chalk=__toESM(require_source(),1);var MAX_PAGE_SIZE=100,MAX_SEARCH_QUERY_CHARS=256;async function listApiKeysPage(client,opts={}){let query=new URLSearchParams({purpose:"ai-gateway"});opts.limit!==void 0&&query.set("limit",String(opts.limit)),opts.next&&query.set("until",opts.next),opts.search&&query.set("search",opts.search);let{apiKeys:apiKeys2,pagination}=await client.fetch(`/v1/api-keys?${query.toString()}`,{method:"GET"});return{items:apiKeys2??[],next:pagination?.next??null}}async function listAllApiKeys(client,opts={}){return fetchAllPages(next=>listApiKeysPage(client,{...opts,limit:MAX_PAGE_SIZE,next}))}async function getApiKey(client,apiKeyId){let{apiKey}=await client.fetch(`/v1/api-keys/${encodeURIComponent(apiKeyId)}`,{method:"GET"});return apiKey}async function updateApiKeyQuota(client,apiKeyId,input){return client.fetch(`/v1/api-keys/${encodeURIComponent(apiKeyId)}/quota`,{method:"PATCH",body:input})}function describeApiKeyLookupError(identifier,resolved){switch(resolved.error){case"ambiguous":return`Multiple API keys named "${identifier}" (${resolved.count}). Use the key id instead.`;case"incomplete":return`Could not search every API key for "${identifier}": ${resolved.message} Use the key id instead.`;default:return`API key not found: ${identifier}`}}async function findApiKeyByIdOrName(client,identifier){try{let apiKey=await getApiKey(client,identifier);if(apiKey&&apiKey.purpose==="ai-gateway")return{apiKey}}catch{}let search2=identifier.length<=MAX_SEARCH_QUERY_CHARS?identifier:void 0,keys;try{keys=await listAllApiKeys(client,{search:search2})}catch(err){if(err instanceof PaginationError)return{error:"incomplete",message:err.message};throw err}let matches=keys.filter(key=>key.name===identifier);return matches.length===1?{apiKey:matches[0]}:matches.length>1?{error:"ambiguous",count:matches.length}:{error:"not_found"}}async function deleteApiKey(client,apiKeyId){await client.fetch(`/v1/api-keys/${encodeURIComponent(apiKeyId)}`,{method:"DELETE"})}async function createApiKey(client,payload){return await client.fetch("/v1/api-keys",{method:"POST",body:{purpose:"ai-gateway",...payload}})}var AiGatewayApiKeysCreateTelemetryClient=class extends TelemetryClient{trackCliOptionName(name){name&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionBudget(budget){budget!==void 0&&this.trackCliOption({option:"budget",value:this.redactedValue})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionRefreshPeriod(refreshPeriod){refreshPeriod&&this.trackCliOption({option:"refresh-period",value:refreshPeriod})}trackCliFlagIncludeByok(includeByok){includeByok&&this.trackCliFlag("include-byok")}trackCliOptionAlertThresholds(alertThresholds){alertThresholds&&this.trackCliOption({option:"alert-thresholds",value:alertThresholds})}trackCliOptionExpiration(expiration){expiration&&this.trackCliOption({option:"expiration",value:expiration})}trackCliFlagZdrExempt(zdrExempt){zdrExempt&&this.trackCliFlag("zdr-exempt")}trackCliFlagTokenPass(tokenPass2){tokenPass2&&this.trackCliFlag("token-pass")}trackCliFlagBypassAllSettings(bypassAllSettings){bypassAllSettings&&this.trackCliFlag("bypass-all-settings")}};var VALID_REFRESH_PERIODS=["daily","weekly","monthly","none"];function isValidRefreshPeriod(period){return VALID_REFRESH_PERIODS.includes(period)}var VALID_ALERT_THRESHOLDS=[50,75,100];function parseAlertThresholds(input){let values=[],tokens=input.split(",").map(token=>token.trim()).filter(token=>token.length>0);for(let token of tokens){let num=Number(token);if(!Number.isInteger(num)||!VALID_ALERT_THRESHOLDS.includes(num))return{valid:!1,invalid:token};values.includes(num)||values.push(num)}return{valid:!0,values}}function buildQuota(opts){let effectiveRefresh=opts.refreshPeriod&&opts.refreshPeriod!=="none"?opts.refreshPeriod:void 0,hasAlertThresholds=opts.alertThresholds!==void 0&&opts.alertThresholds.length>0;if(!(opts.budget===void 0&&!effectiveRefresh&&!opts.includeByok&&!hasAlertThresholds))return{...opts.budget!==void 0&&{limitAmount:opts.budget},...effectiveRefresh&&{refreshPeriod:effectiveRefresh},...opts.includeByok&&{includeByokInQuota:!0},...hasAlertThresholds&&{alertThresholds:opts.alertThresholds}}}var EXPIRY_PRESETS=[{label:"7 days",value:"7d"},{label:"30 days",value:"30d"},{label:"60 days",value:"60d"},{label:"90 days",value:"90d"},{label:"1 year",value:"1y"}],DEFAULT_EXPIRY_PRESET="30d",VALID_EXPIRY_VALUES=[...EXPIRY_PRESETS.map(p=>p.value),"none"];function isValidExpiry(value){return VALID_EXPIRY_VALUES.includes(value)}var DAY_MS=864e5;function presetToExpiresAt(value,now=Date.now()){switch(value){case"7d":return now+7*DAY_MS;case"30d":return now+30*DAY_MS;case"60d":return now+60*DAY_MS;case"90d":return now+90*DAY_MS;case"1y":{let date=new Date(now);return date.setFullYear(date.getFullYear()+1),date.getTime()}default:return}}async function create(client,argv){let telemetry=new AiGatewayApiKeysCreateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(createSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts}=parsedArgs,name=opts["--name"],budgetFlag=opts["--budget"],limitFlag=opts["--limit"],refreshPeriod=opts["--refresh-period"],includeByok=opts["--include-byok"],alertThresholdsInput=opts["--alert-thresholds"],expiration=opts["--expiration"],zdrExempt=opts["--zdr-exempt"],bypassAll=opts["--bypass-all-settings"],tokenPass2=opts["--token-pass"];if(telemetry.trackCliOptionName(name),telemetry.trackCliOptionBudget(budgetFlag),telemetry.trackCliOptionLimit(limitFlag),telemetry.trackCliOptionRefreshPeriod(refreshPeriod),telemetry.trackCliFlagIncludeByok(includeByok),telemetry.trackCliOptionAlertThresholds(alertThresholdsInput),telemetry.trackCliOptionExpiration(expiration),telemetry.trackCliFlagZdrExempt(zdrExempt),telemetry.trackCliFlagBypassAllSettings(bypassAll),telemetry.trackCliFlagTokenPass(tokenPass2),tokenPass2&&(zdrExempt||bypassAll)){let message="Cannot combine --token-pass with --zdr-exempt or --bypass-all-settings. Remove the exemption flags to create a Token Pass key.";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --token-pass")}]},2),output_manager_default.error(message),2}if(budgetFlag!==void 0&&limitFlag!==void 0){let message="Pass only one of --limit or --budget. (--budget is deprecated; use --limit.)";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_BUDGET,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --limit 500")}]},2),output_manager_default.error(message),2}budgetFlag!==void 0&&output_manager_default.warn("`--budget` is deprecated, please use `--limit` instead");let budget=limitFlag??budgetFlag;if(budget!==void 0&&budget<1){let message="Budget must be a positive number in dollars (minimum 1).";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_BUDGET,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --limit 500")}]},2),output_manager_default.error(message),2}if(refreshPeriod&&!isValidRefreshPeriod(refreshPeriod)){let message=`Invalid refresh period "${refreshPeriod}". Must be one of: ${VALID_REFRESH_PERIODS.join(", ")}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_REFRESH_PERIOD,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --refresh-period monthly")}]},2),output_manager_default.error(message),2}let alertThresholds;if(alertThresholdsInput!==void 0){let result=parseAlertThresholds(alertThresholdsInput);if(!result.valid){let message=`Invalid alert threshold "${result.invalid}". Must be a comma-separated subset of: ${VALID_ALERT_THRESHOLDS.join(", ")}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ALERT_THRESHOLDS,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --alert-thresholds 50,75,100")}]},2),output_manager_default.error(message),2}alertThresholds=result.values}if(expiration!==void 0&&!isValidExpiry(expiration)){let message=`Invalid expiration "${expiration}". Must be one of: ${VALID_EXPIRY_VALUES.join(", ")}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_EXPIRATION,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --expiration 90d")}]},2),output_manager_default.error(message),2}let expiresAt=expiration!==void 0?presetToExpiresAt(expiration):void 0,aiGatewayQuota=buildQuota({budget,refreshPeriod,includeByok,alertThresholds});if(!await client.resolveCurrentTeam()){if(!client.stdin.isTTY)return output_manager_default.error("No team selected. Use `vercel --scope <team-slug> ai-gateway api-keys create` or run `vercel switch` first."),1;let org=await selectOrg(client,"Which team should own this API key?");org.type==="team"&&(client.config.currentTeam=org.id)}let createStamp=stamp_default();output_manager_default.spinner("Creating API key");let metadata={...tokenPass2&&{tokenPass:!0},...zdrExempt&&{zdr:{enableNonZdrModels:!0}},...bypassAll&&{bypassAll:!0}};try{let result=await createApiKey(client,{name,aiGatewayQuota,...expiresAt!==void 0&&{expiresAt},...Object.keys(metadata).length>0&&{metadata}});return output_manager_default.stopSpinner(),client.stdout.write(`${result.apiKeyString}
7
+ import{GATEWAY_ANTHROPIC_BASE_URL,GATEWAY_API_KEY_ENV,GATEWAY_CODING_AGENT_BASE_URL,GATEWAY_CURSOR_BASE_URL,GATEWAY_DEFAULT_MODEL,KEY_PLACEHOLDER,MANAGED_BLOCK_END,MANAGED_BLOCK_START,backupFile,claudeCode,codex,ensureMode,isFile,isSymlink,maskSecret,mergeJson,mergeJsonc,mergeToml,parseJsonObjectOrNull,pathExists,readFileOrNull,resolveGatewayBaseUrl,setupCodexPlugin,setupVercelPlugin,upsertManagedBlock,writeConfigFile}from"./chunks/chunk-PFPJLIFF.js";import{selectOrg}from"./chunks/chunk-7L5QUDUR.js";import{dump,load}from"./chunks/chunk-V6Y6UK6B.js";import{init_main,parse as parse2}from"./chunks/chunk-J24BABG4.js";import{init_dist,parse,stringify}from"./chunks/chunk-U4Z2MMOF.js";import{require_async_sema}from"./chunks/chunk-NZ2TFADV.js";import{CHECKBOX_INSTRUCTIONS}from"./chunks/chunk-OFDTADPQ.js";import{tokensAfterCommand}from"./chunks/chunk-5IWFRZQT.js";import"./chunks/chunk-2EYYB6YN.js";import{amountMatchesPrice,buy,canPromptForCharge,chargeFailureReason,deleteCertById,formatAmountArg,formatTerm,formatUsd,getDomains,getTeamMemberByIdentifier,getTeamMembersByIds,isDomainExternal,parseAmount,printChargeRecovery,refuseUnnamedTeam,removeAliasById,reportChargeFailure,reportPriceChanged,reportUnknownOutcome,reportUsageError,teamMemberLabel,writeChargeAction}from"./chunks/chunk-TIPQQ4TG.js";import{addDomain,getDomainByName,require_cjs}from"./chunks/chunk-U2OBPULW.js";import{getDomainPrice,getDomainStatus,getOrderOutcome,pollForOrder}from"./chunks/chunk-IOZ3I765.js";import{external_exports}from"./chunks/chunk-2NABMKFV.js";import{getAliases}from"./chunks/chunk-2K3ISCQ6.js";import{require_execa}from"./chunks/chunk-BUJITHGZ.js";import{InvalidNextError,getPaginationOpts}from"./chunks/chunk-C6GY2G73.js";import{formatDate,formatDateWithoutTime}from"./chunks/chunk-HRR57QNP.js";import{formatTable}from"./chunks/chunk-LSQREJXO.js";import{stamp_default}from"./chunks/chunk-A2RZZQEP.js";import"./chunks/chunk-Q7D7RGXM.js";import"./chunks/chunk-FBYA6LLM.js";import{readOnOffOption}from"./chunks/chunk-Y5ZMKL7E.js";import{canPrompt}from"./chunks/chunk-IQ7FPAI4.js";import"./chunks/chunk-GD7AV7BO.js";import{getCommandFlags}from"./chunks/chunk-XGTKHQTT.js";import{DEFAULT_LIST_LIMIT,PaginationError,fetchAllPages,parseListLimit,printNextPageCommand,printNextPageHint}from"./chunks/chunk-VNIKIQVE.js";import"./chunks/chunk-PFD7LETF.js";import{getInvalidSubcommand}from"./chunks/chunk-TG2RCYTH.js";import{getRenamedOption,renameOptionInArgs,reportRenamedOptionError,withWarnings}from"./chunks/chunk-T6243EDS.js";import{getSubcommand}from"./chunks/chunk-ETV3C2CV.js";import{validateLsArgs}from"./chunks/chunk-KW6GSQXV.js";import{getTeams}from"./chunks/chunk-FGFLTLEA.js";import"./chunks/chunk-SCV7XEEO.js";import{addSubcommand,aiGatewayCommand,apiKeysSubcommand,autoRenewSubcommand,budgetsDefaultsListSubcommand,budgetsDefaultsRemoveSubcommand,budgetsDefaultsSetSubcommand,budgetsDefaultsSubcommand,budgetsInspectSubcommand,budgetsListSubcommand,budgetsRemoveSubcommand,budgetsSetSubcommand,budgetsSubcommand,buySubcommand,checkSubcommand,codingAgentsSubcommand,createSubcommand,domainsCommand,getCommandAliases,inspectSubcommand2 as inspectSubcommand,inspectSubcommand3 as inspectSubcommand2,leaderboardAppsSubcommand,leaderboardLabsSubcommand,leaderboardModelsSubcommand,leaderboardProvidersSubcommand,leaderboardSubcommand,listSubcommand2 as listSubcommand,listSubcommand4 as listSubcommand2,modelsEndpointsSubcommand,modelsListSubcommand,modelsSubcommand,moveSubcommand,priceSubcommand,removeSubcommand,removeSubcommand3 as removeSubcommand2,renewSubcommand,rulesAddSubcommand,rulesEditSubcommand,rulesListSubcommand,rulesRemoveSubcommand,rulesSubcommand,searchSubcommand,setupSubcommand,transferInSubcommand,verifySubcommand,virtualModelsCreateSubcommand,virtualModelsEditSubcommand,virtualModelsInspectSubcommand,virtualModelsListSubcommand,virtualModelsRemoveSubcommand,virtualModelsRestoreSubcommand,virtualModelsSubcommand}from"./chunks/chunk-O4WNSKQR.js";import"./chunks/chunk-6I6QJHCY.js";import"./chunks/chunk-EKZTFGDX.js";import"./chunks/chunk-462YCCJZ.js";import{gatewaySubcommand,pluginSubcommand,setupCommand,skillsSubcommand}from"./chunks/chunk-WVHCBDTB.js";import"./chunks/chunk-TAISZMA2.js";import"./chunks/chunk-527GBU3K.js";import"./chunks/chunk-CR3NBTHV.js";import"./chunks/chunk-BVGGTBYE.js";import"./chunks/chunk-6TXEVQA4.js";import"./chunks/chunk-5KUUMQ3M.js";import"./chunks/chunk-UHBMX3OK.js";import"./chunks/chunk-EEUJLJEJ.js";import"./chunks/chunk-NW7WWUCQ.js";import"./chunks/chunk-F6EBOT64.js";import"./chunks/chunk-LFOWP74R.js";import"./chunks/chunk-LOBA3E72.js";import"./chunks/chunk-7R6TRRG5.js";import"./chunks/chunk-JALVF3C2.js";import"./chunks/chunk-OZCQTXI4.js";import"./chunks/chunk-FSPPKNKN.js";import{help}from"./chunks/chunk-FLHO75XC.js";import{table}from"./chunks/chunk-773GOZIR.js";import{printError}from"./chunks/chunk-HSFKISDH.js";import"./chunks/chunk-67GZ5REA.js";import"./chunks/chunk-BS32OUOC.js";import{param}from"./chunks/chunk-3G3FQYMW.js";import{TelemetryClient}from"./chunks/chunk-6YXIWZ3X.js";import"./chunks/chunk-PUKYAALC.js";import{getContextName,getScope}from"./chunks/chunk-K5U47EVH.js";import{require_ms}from"./chunks/chunk-MXTC4ZAQ.js";import"./chunks/chunk-NWGBDBZI.js";import{AGENT_ACTION,AGENT_REASON,AGENT_STATUS,buildCommandWithGlobalFlags,getExitCodeForReason,openUrlInBrowserCommand,outputActionRequired,outputAgentError,outputAgentSuccess,shouldEmitNonInteractiveCommandError,withGlobalFlags}from"./chunks/chunk-WDXW6A4H.js";import"./chunks/chunk-DKJL2KV7.js";import{getLinkedProject,getProjectByNameOrId,getUser,require_pluralize}from"./chunks/chunk-4N6LMERQ.js";import{ALIGNED_LABEL_WIDTH,printAlignedLabel}from"./chunks/chunk-ADLBLGT3.js";import"./chunks/chunk-CWM2F235.js";import"./chunks/chunk-4NTBYNFR.js";import{parseArguments,parseWithShortFlag}from"./chunks/chunk-KCKYPLIH.js";import{getTeamByIdOrSlug,quoteArg}from"./chunks/chunk-F53OKXYI.js";import{getFlagsSpecification,stripSensitiveAuthArgs,validateJsonOutput,wantsMachineReadableOutput,warnDeprecatedSubcommand}from"./chunks/chunk-QVXS234E.js";import"./chunks/chunk-FUX6LKNP.js";import"./chunks/chunk-OPORM35X.js";import"./chunks/chunk-4SAVH3H7.js";import{APIError,DomainAlreadyExists,DomainChargeOutcomeUnknown,DomainExternal,DomainMoveConflict,DomainNotAvailable,DomainNotFound,DomainNotVerified,DomainPaymentError,DomainPermissionDenied,DomainRemovalConflict,InvalidDomain,InvalidMoveDestination,ProjectNotFound,UnexpectedDomainTransferError,UnsupportedTLD,code,isAPIError}from"./chunks/chunk-6VH56CX2.js";import{getCommandName,getCommandNamePlain,packageName}from"./chunks/chunk-JESNVRVR.js";import{chars_default,output_manager_default}from"./chunks/chunk-XP3FT56R.js";import"./chunks/chunk-BLUPZPAS.js";import{require_dist}from"./chunks/chunk-RM3ZDRYE.js";import"./chunks/chunk-OO572JUC.js";import"./chunks/chunk-D3AHZ5LI.js";import"./chunks/chunk-2GHZGOWT.js";import"./chunks/chunk-YHPPP3SF.js";import{require_source}from"./chunks/chunk-NB2WLB3J.js";import"./chunks/chunk-ISWW3DKF.js";import"./chunks/chunk-BRQUZ5NC.js";import{__toESM}from"./chunks/chunk-BZENIQ7N.js";var import_chalk=__toESM(require_source(),1);var MAX_PAGE_SIZE=100,MAX_SEARCH_QUERY_CHARS=256;async function listApiKeysPage(client,opts={}){let query=new URLSearchParams({purpose:"ai-gateway"});opts.limit!==void 0&&query.set("limit",String(opts.limit)),opts.next&&query.set("until",opts.next),opts.search&&query.set("search",opts.search);let{apiKeys:apiKeys2,pagination}=await client.fetch(`/v1/api-keys?${query.toString()}`,{method:"GET"});return{items:apiKeys2??[],next:pagination?.next??null}}async function listAllApiKeys(client,opts={}){return fetchAllPages(next=>listApiKeysPage(client,{...opts,limit:MAX_PAGE_SIZE,next}))}async function getApiKey(client,apiKeyId){let{apiKey}=await client.fetch(`/v1/api-keys/${encodeURIComponent(apiKeyId)}`,{method:"GET"});return apiKey}async function updateApiKeyQuota(client,apiKeyId,input){return client.fetch(`/v1/api-keys/${encodeURIComponent(apiKeyId)}/quota`,{method:"PATCH",body:input})}function describeApiKeyLookupError(identifier,resolved){switch(resolved.error){case"ambiguous":return`Multiple API keys named "${identifier}" (${resolved.count}). Use the key id instead.`;case"incomplete":return`Could not search every API key for "${identifier}": ${resolved.message} Use the key id instead.`;default:return`API key not found: ${identifier}`}}async function findApiKeyByIdOrName(client,identifier){try{let apiKey=await getApiKey(client,identifier);if(apiKey&&apiKey.purpose==="ai-gateway")return{apiKey}}catch{}let search2=identifier.length<=MAX_SEARCH_QUERY_CHARS?identifier:void 0,keys;try{keys=await listAllApiKeys(client,{search:search2})}catch(err){if(err instanceof PaginationError)return{error:"incomplete",message:err.message};throw err}let matches=keys.filter(key=>key.name===identifier);return matches.length===1?{apiKey:matches[0]}:matches.length>1?{error:"ambiguous",count:matches.length}:{error:"not_found"}}async function deleteApiKey(client,apiKeyId){await client.fetch(`/v1/api-keys/${encodeURIComponent(apiKeyId)}`,{method:"DELETE"})}async function createApiKey(client,payload){return await client.fetch("/v1/api-keys",{method:"POST",body:{purpose:"ai-gateway",...payload}})}var AiGatewayApiKeysCreateTelemetryClient=class extends TelemetryClient{trackCliOptionName(name){name&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliOptionAmount(amount){amount!==void 0&&this.trackCliOption({option:"amount",value:this.redactedValue})}trackCliOptionBudget(budget){budget!==void 0&&this.trackCliOption({option:"budget",value:this.redactedValue})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionRefreshPeriod(refreshPeriod){refreshPeriod&&this.trackCliOption({option:"refresh-period",value:refreshPeriod})}trackCliFlagIncludeByok(includeByok){includeByok&&this.trackCliFlag("include-byok")}trackCliOptionAlertThresholds(alertThresholds){alertThresholds&&this.trackCliOption({option:"alert-thresholds",value:alertThresholds})}trackCliOptionExpiration(expiration){expiration&&this.trackCliOption({option:"expiration",value:expiration})}trackCliFlagZdrExempt(zdrExempt){zdrExempt&&this.trackCliFlag("zdr-exempt")}trackCliFlagTokenPass(tokenPass2){tokenPass2&&this.trackCliFlag("token-pass")}trackCliFlagBypassAllSettings(bypassAllSettings){bypassAllSettings&&this.trackCliFlag("bypass-all-settings")}};var VALID_REFRESH_PERIODS=["daily","weekly","monthly","none"];function isValidRefreshPeriod(period){return VALID_REFRESH_PERIODS.includes(period)}var VALID_ALERT_THRESHOLDS=[50,75,100];function parseAlertThresholds(input){let values=[],tokens=input.split(",").map(token=>token.trim()).filter(token=>token.length>0);for(let token of tokens){let num=Number(token);if(!Number.isInteger(num)||!VALID_ALERT_THRESHOLDS.includes(num))return{valid:!1,invalid:token};values.includes(num)||values.push(num)}return{valid:!0,values}}function buildQuota(opts){let effectiveRefresh=opts.refreshPeriod&&opts.refreshPeriod!=="none"?opts.refreshPeriod:void 0,hasAlertThresholds=opts.alertThresholds!==void 0&&opts.alertThresholds.length>0;if(!(opts.budget===void 0&&!effectiveRefresh&&!opts.includeByok&&!hasAlertThresholds))return{...opts.budget!==void 0&&{limitAmount:opts.budget},...effectiveRefresh&&{refreshPeriod:effectiveRefresh},...opts.includeByok&&{includeByokInQuota:!0},...hasAlertThresholds&&{alertThresholds:opts.alertThresholds}}}var EXPIRY_PRESETS=[{label:"7 days",value:"7d"},{label:"30 days",value:"30d"},{label:"60 days",value:"60d"},{label:"90 days",value:"90d"},{label:"1 year",value:"1y"}],DEFAULT_EXPIRY_PRESET="30d",VALID_EXPIRY_VALUES=[...EXPIRY_PRESETS.map(p=>p.value),"none"];function isValidExpiry(value){return VALID_EXPIRY_VALUES.includes(value)}var DAY_MS=864e5;function presetToExpiresAt(value,now=Date.now()){switch(value){case"7d":return now+7*DAY_MS;case"30d":return now+30*DAY_MS;case"60d":return now+60*DAY_MS;case"90d":return now+90*DAY_MS;case"1y":{let date=new Date(now);return date.setFullYear(date.getFullYear()+1),date.getTime()}default:return}}async function create(client,argv){let telemetry=new AiGatewayApiKeysCreateTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(createSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts}=parsedArgs,name=opts["--name"],amountFlag=opts["--amount"],budgetFlag=opts["--budget"],limitFlag=opts["--limit"],refreshPeriod=opts["--refresh-period"],includeByok=opts["--include-byok"],alertThresholdsInput=opts["--alert-thresholds"],expiration=opts["--expiration"],zdrExempt=opts["--zdr-exempt"],bypassAll=opts["--bypass-all-settings"],tokenPass2=opts["--token-pass"];if(telemetry.trackCliOptionName(name),telemetry.trackCliOptionAmount(amountFlag),telemetry.trackCliOptionBudget(budgetFlag),telemetry.trackCliOptionLimit(limitFlag),telemetry.trackCliOptionRefreshPeriod(refreshPeriod),telemetry.trackCliFlagIncludeByok(includeByok),telemetry.trackCliOptionAlertThresholds(alertThresholdsInput),telemetry.trackCliOptionExpiration(expiration),telemetry.trackCliFlagZdrExempt(zdrExempt),telemetry.trackCliFlagBypassAllSettings(bypassAll),telemetry.trackCliFlagTokenPass(tokenPass2),tokenPass2&&(zdrExempt||bypassAll)){let message="Cannot combine --token-pass with --zdr-exempt or --bypass-all-settings. Remove the exemption flags to create a Token Pass key.";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --token-pass")}]},2),output_manager_default.error(message),2}if(budgetFlag!==void 0&&limitFlag!==void 0){let message="Pass only one of --limit or --budget. (Both are deprecated; use --amount.)";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_BUDGET,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --amount 500")}]},2),output_manager_default.error(message),2}let amount=getRenamedOption(opts,"--amount",budgetFlag!==void 0?"--budget":"--limit");if("error"in amount)return reportRenamedOptionError(client,amount.error);let budget=amount.value;if(budget!==void 0&&budget<1){let message="Budget must be a positive number in dollars (minimum 1).";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_BUDGET,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --amount 500")}]},2),output_manager_default.error(message),2}if(refreshPeriod&&!isValidRefreshPeriod(refreshPeriod)){let message=`Invalid refresh period "${refreshPeriod}". Must be one of: ${VALID_REFRESH_PERIODS.join(", ")}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_REFRESH_PERIOD,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --refresh-period monthly")}]},2),output_manager_default.error(message),2}let alertThresholds;if(alertThresholdsInput!==void 0){let result=parseAlertThresholds(alertThresholdsInput);if(!result.valid){let message=`Invalid alert threshold "${result.invalid}". Must be a comma-separated subset of: ${VALID_ALERT_THRESHOLDS.join(", ")}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ALERT_THRESHOLDS,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --alert-thresholds 50,75,100")}]},2),output_manager_default.error(message),2}alertThresholds=result.values}if(expiration!==void 0&&!isValidExpiry(expiration)){let message=`Invalid expiration "${expiration}". Must be one of: ${VALID_EXPIRY_VALUES.join(", ")}.`;return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_EXPIRATION,message,next:[{command:getCommandNamePlain("ai-gateway api-keys create --expiration 90d")}]},2),output_manager_default.error(message),2}let expiresAt=expiration!==void 0?presetToExpiresAt(expiration):void 0,aiGatewayQuota=buildQuota({budget,refreshPeriod,includeByok,alertThresholds});if(!await client.resolveCurrentTeam()){if(!client.stdin.isTTY)return output_manager_default.error("No team selected. Use `vercel --scope <team-slug> ai-gateway api-keys create` or run `vercel switch` first."),1;let org=await selectOrg(client,"Which team should own this API key?");org.type==="team"&&(client.config.currentTeam=org.id)}let createStamp=stamp_default();output_manager_default.spinner("Creating API key");let metadata={...tokenPass2&&{tokenPass:!0},...zdrExempt&&{zdr:{enableNonZdrModels:!0}},...bypassAll&&{bypassAll:!0}};try{let result=await createApiKey(client,{name,aiGatewayQuota,...expiresAt!==void 0&&{expiresAt},...Object.keys(metadata).length>0&&{metadata}});return output_manager_default.stopSpinner(),client.stdout.write(`${result.apiKeyString}
8
8
  `),output_manager_default.success(`API key ${import_chalk.default.bold(result.apiKey.name)} (${result.apiKey.id}) created ${createStamp()}`),output_manager_default.log(budget!==void 0?`Spend on this key also counts toward any user and team budgets. List them with ${getCommandName("ai-gateway budgets list")}.`:`No key budget set. Spend still counts toward any API key default, user, and team budgets. List them with ${getCommandName("ai-gateway budgets list")}.`),client.isAgent&&output_manager_default.log(`Prefer OIDC over long-lived API keys: code on Vercel can authenticate to AI Gateway with VERCEL_OIDC_TOKEN, and local development can get one with ${getCommandName("link")} and ${getCommandName("env pull")}. Revoke this key with ${getCommandName(`ai-gateway api-keys revoke ${result.apiKey.id} --yes`)} if you don't need it.`),0}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}}var import_chalk2=__toESM(require_source(),1);var import_async_sema=__toESM(require_async_sema(),1);var DIRECTORY_KEY_SORTS=["createdAt:desc","createdAt:asc","lastActiveAt:desc","lastActiveAt:asc","name:asc","name:desc","expiresAt:asc","expiresAt:desc"],DIRECTORY_KEY_STATES=["active","expired","deleted","purged","any"],MAX_DIRECTORY_RESOLVE_IDS=100,FETCH_OPTS={retry:{retries:0},bailOn429:!0},DIRECTORY_KILL_SWITCH="VERCEL_AI_GATEWAY_DIRECTORY";function isDirectoryEnabledByEnv(env=process.env){let value=env[DIRECTORY_KILL_SWITCH]?.trim().toLowerCase();return value!=="0"&&value!=="false"}async function listDirectoryKeysPage(client,opts={}){let query=new URLSearchParams,search2=opts.search?.trim();search2&&query.set("search",search2),opts.createdBy&&query.set("createdBy",opts.createdBy),opts.accessPolicyId&&query.set("accessPolicyId",opts.accessPolicyId),opts.state&&query.set("state",opts.state),opts.sort&&query.set("sort",opts.sort),opts.cursor&&query.set("cursor",opts.cursor),opts.limit!==void 0&&query.set("limit",String(opts.limit));let qs=query.toString(),page=await client.fetch(`/ai-gateway/directory/keys${qs?`?${qs}`:""}`,{method:"GET",...FETCH_OPTS});return{items:page.data??[],next:page.cursor??null}}function chunk(items,size){let chunks=[];for(let i=0;i<items.length;i+=size)chunks.push(items.slice(i,i+size));return chunks}var BATCH_CONCURRENCY=4;async function mapConcurrent(items,fn){let sema=new import_async_sema.default(BATCH_CONCURRENCY);return Promise.all(items.map(async item=>{await sema.acquire();try{return await fn(item)}finally{sema.release()}}))}async function resolveDirectoryIdentities(client,input){let keyChunks=chunk([...new Set(input.keyIds??[])],MAX_DIRECTORY_RESOLVE_IDS),userChunks=chunk([...new Set(input.userIds??[])],MAX_DIRECTORY_RESOLVE_IDS),requests=Math.max(keyChunks.length,userChunks.length),bodies=Array.from({length:requests},(_,i)=>{let body={};return keyChunks[i]?.length&&(body.keyIds=keyChunks[i]),userChunks[i]?.length&&(body.userIds=userChunks[i]),body}),pages=await mapConcurrent(bodies,body=>client.fetch("/ai-gateway/directory/identities/resolve",{method:"POST",body,...FETCH_OPTS})),keys=new Map,users=new Map;return pages.forEach((res,i)=>{for(let key of res.data?.keys??[])keys.set(key.keyId,key);if(Array.isArray(res.data?.users))for(let user of res.data.users)users?.set(user.uid,user);else bodies[i].userIds&&(users=null)}),{keys,users}}async function resolveDirectoryKeyQuotas(client,keyIds){let pages=await mapConcurrent(chunk([...new Set(keyIds)],MAX_DIRECTORY_RESOLVE_IDS),ids=>client.fetch("/ai-gateway/directory/keys/quotas",{method:"POST",body:{keyIds:ids},...FETCH_OPTS})),quotas=new Map;for(let res of pages)for(let quota of res.data?.quotas??[])quotas.set(quota.apiKeyId,quota);return quotas}function isDirectoryUnavailable(err){return isAPIError(err)&&(err.status===429||err.status>=500)}function isDirectoryCursor(cursor2){try{let parsed=JSON.parse(Buffer.from(cursor2,"base64url").toString());return typeof parsed=="object"&&parsed!==null&&parsed.v===1&&typeof parsed.fp=="string"&&Array.isArray(parsed.sa)}catch{return!1}}function toApiKey(key,quota){let apiKey={id:key.keyId,name:key.name,partialKey:key.suffix??"",teamId:key.teamId,purpose:"ai-gateway",projectId:key.projectId??null,expiresAt:key.expiresAt??null,activeAt:key.lastActiveAt??key.createdAt,createdAt:key.createdAt,createdBy:key.createdBy??"",leakedAt:key.leakedAt??null,leakedUrl:null,createdByAppId:key.attribution?.createdByAppId??null};if(quota){let{apiKeyId:_apiKeyId,...rest}=quota;apiKey.quota=rest}return apiKey}async function ensureTeam(client){if(await client.resolveCurrentTeam())return!0;if(client.nonInteractive||client.isAgent||!client.stdin.isTTY)return output_manager_default.error("No team selected. Use `vercel --scope <team-slug> ai-gateway \u2026` or run `vercel switch` first."),!1;let org=await selectOrg(client,"Which team?");return org.type==="team"?(client.config.currentTeam=org.id,!0):(output_manager_default.error("AI Gateway resources are managed per team. Switch to a team scope and try again."),!1)}var AiGatewayApiKeysListTelemetryClient=class extends TelemetryClient{trackCliOptionQuery(query){query&&this.trackCliOption({option:"query",value:this.redactedValue})}trackCliOptionSearch(search2){search2&&this.trackCliOption({option:"search",value:this.redactedValue})}trackCliOptionCreator(creator){creator&&this.trackCliOption({option:"creator",value:creator==="me"?"me":this.redactedValue})}trackCliOptionState(state){state&&this.trackCliOption({option:"state",value:state})}trackCliOptionSort(sort){sort&&this.trackCliOption({option:"sort",value:sort})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function renderResource(client,{asJson,spinnerText,fetch,toJSON,isEmpty,emptyMessage:emptyMessage2,header,renderTable:renderTable2,notFoundMessage,next}){let lsStamp=stamp_default(),json=asJson||client.nonInteractive;client.nonInteractive||output_manager_default.spinner(spinnerText);let data;try{data=await fetch()}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.status===404&&notFoundMessage?notFoundMessage:err.message),1;if(err instanceof PaginationError)return output_manager_default.error(err.message),1;throw err}if(output_manager_default.stopSpinner(),json)return client.stdout.write(`${JSON.stringify(toJSON(data),null,2)}
9
9
  `),0;if(isEmpty(data)){let nextCursor=next?.(data)??null;return nextCursor?(output_manager_default.log("No results on this page."),printNextPageHint(client,nextCursor),0):(output_manager_default.log(emptyMessage2),0)}return output_manager_default.log(`${header(data)} ${lsStamp()}`),client.stdout.write(renderTable2(data)),next&&printNextPageHint(client,next(data)),0}var BUDGET_SCOPE_TYPES=["team","project","user","api-key"];function parseBudgetScope(args,opts={}){let[scopeArg,...rest]=args;if(!scopeArg)return{error:`Expected a scope. Specify ${BUDGET_SCOPE_TYPES.join(" or ")}.`};if(!BUDGET_SCOPE_TYPES.includes(scopeArg))return{error:`Unknown scope "${scopeArg}". Expected one of: ${BUDGET_SCOPE_TYPES.join(", ")}.`};if(scopeArg==="team")return opts.isDefault?{error:"The team scope does not support --default. Set the team budget directly."}:rest.length>0?{error:`The team scope does not take a name (got "${rest[0]}").`}:{scope:{scopeType:"team"}};let[name,...extra]=rest;if(opts.isDefault)return name?{error:`The ${scopeArg} scope takes either a name or --default, not both.`}:{scope:{scopeType:scopeArg,isDefault:!0}};if(!name){let required={project:"a project name or id",user:"a user email, username, or id","api-key":"an API key name or id"}[scopeArg];return{error:`The ${scopeArg} scope requires ${required}. Pass --default for the per-${scopeArg} default budget.`}}return extra.length>0?{error:`Unexpected argument "${extra[0]}".`}:{scope:{scopeType:scopeArg,name}}}var PERIOD_PHRASE={daily:"a day",weekly:"a week",monthly:"a month",none:"total"};function formatBudgetCap(limitAmount,refreshPeriod){return`$${limitAmount} ${PERIOD_PHRASE[refreshPeriod]}`}async function listBudgets(client,scopeType){let query=scopeType?`?scopeType=${scopeType}`:"",{budgets:budgets2}=await client.fetch(`/ai-gateway/budgets/list${query}`,{method:"GET"});return budgets2??[]}async function listBudgetsPage(client,opts){let query=new URLSearchParams;opts.scopeType&&query.set("scopeType",opts.scopeType),query.set("limit",String(opts.limit)),opts.next&&query.set("cursor",opts.next),opts.includeDefaultCovered!==void 0&&query.set("includeDefaultCovered",String(opts.includeDefaultCovered));let{budgets:budgets2,nextCursor,defaultCoveredCounts}=await client.fetch(`/ai-gateway/budgets/list?${query.toString()}`,{method:"GET"});return{items:budgets2??[],next:nextCursor??null,defaultCoveredCounts:defaultCoveredCounts??{}}}async function setBudget(client,input){return client.fetch("/ai-gateway/budgets",{method:"PUT",body:input})}async function removeBudget(client,scopeType,opts={}){let params=new URLSearchParams({scopeType});opts.projectId&&params.set("projectId",opts.projectId),opts.userId&&params.set("userId",opts.userId),await client.fetch(`/ai-gateway/budgets?${params.toString()}`,{method:"DELETE"})}var BUDGET_DEFAULT_SCOPE_TYPES=["project","api-key","user"],BUDGET_DEFAULT_COVERED={project:"Projects","api-key":"API keys",user:"Team members"},BUDGET_DEFAULT_APPLIES_TO={project:"every project without its own budget","api-key":"every API key without its own budget",user:"every team member without their own budget"};function parseBudgetDefaultScope(args){let[scopeArg,...rest]=args;return scopeArg?BUDGET_DEFAULT_SCOPE_TYPES.includes(scopeArg)?rest.length>0?{error:`Unexpected argument "${rest[0]}".`}:{scopeType:scopeArg}:{error:`Unknown scope "${scopeArg}". Expected one of: ${BUDGET_DEFAULT_SCOPE_TYPES.join(", ")}.`}:{error:`Expected a scope. Specify ${BUDGET_DEFAULT_SCOPE_TYPES.join(" or ")}.`}}async function listScopeBudgetDefaults(client){let{defaults}=await client.fetch("/ai-gateway/budgets/defaults/list",{method:"GET"});return defaults??[]}async function upsertScopeBudgetDefault(client,input){return client.fetch("/ai-gateway/budgets/defaults",{method:"PUT",body:input})}async function deleteScopeBudgetDefault(client,scopeType){let params=new URLSearchParams({scopeType});await client.fetch(`/ai-gateway/budgets/defaults?${params.toString()}`,{method:"DELETE"})}var STATE_FLAG_VALUES=DIRECTORY_KEY_STATES.filter(s=>s!=="purged"),SORT_FIELDS=["createdAt","lastActiveAt","name","expiresAt"],DEFAULT_STATE="active",DEFAULT_SORT="lastActiveAt:desc";async function list(client,argv){let telemetry=new AiGatewayApiKeysListTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(listSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts}=parsedArgs,queryFlag=opts["--query"],searchFlag=opts["--search"],search2=queryFlag??searchFlag,creator=opts["--creator"],stateFlag=opts["--state"],sortFlag=opts["--sort"],limitFlag=opts["--limit"],next=opts["--next"];telemetry.trackCliOptionQuery(queryFlag),telemetry.trackCliOptionSearch(searchFlag),telemetry.trackCliOptionCreator(creator),telemetry.trackCliOptionState(stateFlag),telemetry.trackCliOptionSort(sortFlag),telemetry.trackCliOptionLimit(limitFlag),telemetry.trackCliOptionNext(next),telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;if(queryFlag!==void 0&&searchFlag!==void 0&&queryFlag!==searchFlag)return usageError(client,"Pass only one of --query or --search.");if(search2!==void 0&&search2.trim().length===0)return usageError(client,"The --query option requires some text.");if(search2&&search2.length>MAX_SEARCH_QUERY_CHARS)return usageError(client,`The --query option must be at most ${MAX_SEARCH_QUERY_CHARS} characters.`);if(stateFlag!==void 0&&!STATE_FLAG_VALUES.includes(stateFlag))return usageError(client,`The --state option must be one of: ${STATE_FLAG_VALUES.join(", ")}.`);let sort=sortFlag===void 0?void 0:parseSortFlag(sortFlag);if(sortFlag!==void 0&&!sort)return usageError(client,`The --sort option must be one of ${SORT_FIELDS.join(", ")}, optionally followed by :asc or :desc.`);if(creator!==void 0&&creator.trim().length===0)return usageError(client,"The --creator option requires a team member.");let limit;try{limit=parseListLimit(limitFlag)}catch(err){return output_manager_default.error(err.message),1}if(!await ensureTeam(client))return 1;let keyDefault;if(!formatResult.jsonOutput)try{keyDefault=(await listScopeBudgetDefaults(client)).find(d=>d.scopeType==="api-key"&&d.active!==!1)}catch{}let directoryOnly=creator!==void 0||stateFlag!==void 0||sortFlag!==void 0||next!==void 0&&isDirectoryCursor(next),legacyOnly=!isDirectoryEnabledByEnv()||next!==void 0&&!isDirectoryCursor(next);if(directoryOnly&&legacyOnly){let message;return isDirectoryEnabledByEnv()?message="The --next cursor does not belong to this query. Rerun without --next to start from the first page.":next!==void 0&&isDirectoryCursor(next)?message=`The --next cursor came from the AI Gateway key directory, which ${DIRECTORY_KILL_SWITCH} disables in this environment. Rerun without --next to start from the first page.`:message=`The --creator, --state, and --sort options need the AI Gateway key directory, which ${DIRECTORY_KILL_SWITCH} disables in this environment.`,usageError(client,message)}let createdBy;if(creator!==void 0)try{createdBy=await resolveCreator(client,creator.trim())}catch(err){if(err instanceof UnknownCreatorError)return usageError(client,err.message);if(isAPIError(err))return output_manager_default.error(`Could not look up team member "${creator}": ${err.message}`),1;throw err}let legacyPage=async()=>({...await listApiKeysPage(client,{limit,next,search:search2}),metadataKnown:!0}),fetch=async()=>{if(legacyOnly)return legacyPage();try{return await fetchDirectoryPage(client,{search:search2,createdBy,state:stateFlag??DEFAULT_STATE,sort:sort??DEFAULT_SORT,cursor:next,limit})}catch(err){if(!isDirectoryUnavailable(err))throw err;if(output_manager_default.debug(`AI Gateway key directory unavailable: ${err instanceof Error?err.message:String(err)}`),directoryOnly)throw new DirectoryUnavailableError;return legacyPage()}};try{return await renderResource(client,{asJson:formatResult.jsonOutput,spinnerText:"Fetching API keys",fetch,toJSON:page=>({apiKeys:page.items,pagination:{next:page.next}}),isEmpty:page=>page.items.length===0,emptyMessage:emptyMessage({next,search:search2,creator,stateFlag}),header:()=>"API keys",renderTable:page=>printApiKeysTable(page.items,keyDefault,page.metadataKnown),next:page=>page.next})}catch(err){if(err instanceof DirectoryUnavailableError)return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.API_ERROR,message:err.message,next:[{command:getCommandNamePlain("ai-gateway api-keys list")}]},1),output_manager_default.error(err.message),1;throw err}}var DirectoryUnavailableError=class extends Error{constructor(){super("The AI Gateway key directory is temporarily unavailable, so --creator, --state, --sort, and directory cursors cannot be served. Retry shortly, or list without those options."),this.name="DirectoryUnavailableError"}};function usageError(client,message){return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message,next:[{command:getCommandNamePlain("ai-gateway api-keys list")}]},2),output_manager_default.error(message),2}function parseSortFlag(value){if(DIRECTORY_KEY_SORTS.includes(value))return value;if(SORT_FIELDS.includes(value))return`${value}:${value==="name"?"asc":"desc"}`}var UnknownCreatorError=class extends Error{constructor(identifier){super(`No team member matches "${identifier}".`),this.name="UnknownCreatorError"}};async function resolveCreator(client,identifier){if(identifier==="me")return(await getUser(client)).id;let member=await getTeamMemberByIdentifier(client,client.config.currentTeam,identifier);if(member)return member.uid;if(identifier.includes("@"))throw new UnknownCreatorError(identifier);return output_manager_default.debug(`No team member matches "${identifier}"; using it as a user id.`),identifier}async function fetchDirectoryPage(client,opts){let page=await listDirectoryKeysPage(client,opts),liveIds=page.items.filter(key=>key.state==="active").map(key=>key.keyId),quotas=new Map;if(liveIds.length>0)try{quotas=await resolveDirectoryKeyQuotas(client,liveIds)}catch(err){output_manager_default.debug(`Skipping AI Gateway key budgets in list output: ${err instanceof Error?err.message:String(err)}`)}return{items:page.items.map(key=>toApiKey(key,quotas.get(key.keyId))),next:page.next,metadataKnown:!1}}function emptyMessage({next,search:search2,creator,stateFlag}){return next?"No more API keys.":search2||creator||stateFlag?"No API keys match these filters.":`No API keys found. Create one with ${getCommandName("ai-gateway api-keys create")}.`}function printApiKeysTable(apiKeys2,keyDefault,metadataKnown){return`${table([["id","name","key","token pass","budget","spend","refresh","created"].map(header=>import_chalk2.default.gray(header)),...apiKeys2.map(apiKey=>[apiKey.id,apiKey.name||import_chalk2.default.gray("\u2013"),apiKey.partialKey?`\u2026${apiKey.partialKey}`:import_chalk2.default.gray("\u2013"),metadataKnown?apiKey.metadata?.tokenPass?"yes":"no":import_chalk2.default.gray("\u2013"),apiKey.quota?`$${apiKey.quota.limitAmount}`:keyDefault?`$${keyDefault.limitAmount} ${import_chalk2.default.gray("(default)")}`:import_chalk2.default.gray("\u2013"),apiKey.quota?`$${apiKey.quota.currentSpend}`:import_chalk2.default.gray("\u2013"),apiKey.quota?.refreshPeriod??keyDefault?.refreshPeriod??import_chalk2.default.gray("\u2013"),apiKey.createdAt?new Date(apiKey.createdAt).toLocaleDateString():import_chalk2.default.gray("\u2013")])],{align:["l","l","l","l","l","l","l","l"],hsep:4}).replace(/^/gm," ")}
10
10
 
11
11
  `}var import_chalk3=__toESM(require_source(),1);var AiGatewayApiKeysInspectTelemetryClient=class extends TelemetryClient{trackCliArgumentId(id){id&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function inspect(client,argv){let telemetry=new AiGatewayApiKeysInspectTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(inspectSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,[id]=args;telemetry.trackCliArgumentId(id),telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;if(!id)return output_manager_default.error(`${getCommandName("ai-gateway api-keys inspect <id>")} expects an API key id.`),2;if(!await ensureTeam(client))return 1;let keyDefault;if(!formatResult.jsonOutput)try{keyDefault=(await listScopeBudgetDefaults(client)).find(d=>d.scopeType==="api-key"&&d.active!==!1)}catch{}return renderResource(client,{asJson:formatResult.jsonOutput,spinnerText:"Fetching API key",fetch:()=>getApiKey(client,id),toJSON:apiKey=>({apiKey}),isEmpty:()=>!1,emptyMessage:"",header:apiKey=>`API key ${import_chalk3.default.bold(apiKey.name||apiKey.id)}`,renderTable:apiKey=>printApiKeyDetails(apiKey,keyDefault)})}function dim(value){return import_chalk3.default.gray(value)}function yesNo(value){return value?"yes":"no"}function printApiKeyDetails(apiKey,keyDefault){let rows=[["id",apiKey.id],["name",apiKey.name||dim("\u2013")],["key",apiKey.partialKey?`\u2026${apiKey.partialKey}`:dim("\u2013")],["token pass",yesNo(apiKey.metadata?.tokenPass??!1)],["purpose",apiKey.purpose],["project",apiKey.projectId??dim("all projects")],["created",apiKey.createdAt?new Date(apiKey.createdAt).toLocaleString():dim("\u2013")],["last used",apiKey.activeAt?new Date(apiKey.activeAt).toLocaleString():dim("never")],["expires",apiKey.expiresAt?new Date(apiKey.expiresAt).toLocaleString():dim("never")],["created by",apiKey.createdBy||dim("\u2013")]];apiKey.metadata?.zdr?.enableNonZdrModels&&rows.push(["zdr exempt","yes"]),apiKey.metadata?.bypassAll&&rows.push(["bypass all settings","yes"]);let quota=apiKey.quota;return quota?rows.push(["budget",`$${quota.limitAmount}`],["spend",`$${quota.currentSpend}`],["byok spend",`$${quota.currentByokSpend}`],["include byok",yesNo(quota.includeByokInQuota)],["refresh",quota.refreshPeriod],["alerts",quota.alertThresholds&&quota.alertThresholds.length>0?quota.alertThresholds.map(threshold=>`${threshold}%`).join(", "):dim("none")],["active",yesNo(quota.active)]):keyDefault?rows.push(["budget",`${formatBudgetCap(keyDefault.limitAmount,keyDefault.refreshPeriod)} ${dim("(default)")}`]):rows.push(["budget",dim("none")]),`${table(rows.map(([label,value])=>[dim(label),value]),{align:["l","l"],hsep:4}).replace(/^/gm," ")}
12
12
 
13
13
  `}var import_chalk4=__toESM(require_source(),1);var AiGatewayApiKeysRemoveTelemetryClient=class extends TelemetryClient{trackCliArgumentId(id){id&&this.trackCliArgument({arg:"id",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function remove(client,argv){let telemetry=new AiGatewayApiKeysRemoveTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(removeSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,[id]=args,yes=opts["--yes"];telemetry.trackCliArgumentId(id),telemetry.trackCliFlagYes(yes),telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagJson(opts["--json"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;if(!id)return output_manager_default.error(`${getCommandName("ai-gateway api-keys revoke <id>")} expects an API key id.`),2;if(!await ensureTeam(client))return 1;if(!yes){if(!client.stdin.isTTY)return output_manager_default.error("To revoke in non-interactive mode, re-run with --yes."),1;if(!await client.input.confirm(`Revoke API key ${import_chalk4.default.bold(id)}?`,!1))return output_manager_default.log("Canceled"),0}let removeStamp=stamp_default();output_manager_default.spinner("Revoking API key");try{return await deleteApiKey(client,id),output_manager_default.stopSpinner(),asJson?client.stdout.write(`${JSON.stringify({id,removed:!0},null,2)}
14
- `):output_manager_default.success(`API key ${import_chalk4.default.bold(id)} revoked ${removeStamp()}`),0}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)&&err.status===404)return output_manager_default.error(`API key "${id}" not found.`),1;if(isAPIError(err))return output_manager_default.error(err.message),1;throw err}}var AiGatewayApiKeysTelemetryClient=class extends TelemetryClient{trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandRevoke(actual){this.trackCliSubcommand({subcommand:"revoke",value:actual})}};var COMMAND_CONFIG={create:getCommandAliases(createSubcommand),list:getCommandAliases(listSubcommand),inspect:getCommandAliases(inspectSubcommand),revoke:getCommandAliases(removeSubcommand)};async function apiKeys(client){let telemetry=new AiGatewayApiKeysTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(apiKeysSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let subArgs=parsedArgs.args.slice(2),{subcommand,args,subcommandOriginal}=getSubcommand(subArgs,COMMAND_CONFIG),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("ai-gateway api-keys",subcommand),output_manager_default.print(help(apiKeysSubcommand,{columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{parent:apiKeysSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"create":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway api-keys",subcommandOriginal),printHelp(createSubcommand),0):(telemetry.trackCliSubcommandCreate(subcommandOriginal),create(client,args));case"list":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway api-keys",subcommandOriginal),printHelp(listSubcommand),0):(telemetry.trackCliSubcommandList(subcommandOriginal),list(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway api-keys",subcommandOriginal),printHelp(inspectSubcommand),0):(telemetry.trackCliSubcommandInspect(subcommandOriginal),inspect(client,args));case"revoke":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway api-keys",subcommandOriginal),printHelp(removeSubcommand),0):(telemetry.trackCliSubcommandRevoke(subcommandOriginal),subcommandOriginal!=="revoke"&&warnDeprecatedSubcommand(client,`ai-gateway api-keys ${subcommandOriginal}`,"ai-gateway api-keys revoke"),remove(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG)),output_manager_default.print(help(apiKeysSubcommand,{columns:client.stderr.columns})),2}}async function setScopeDefault(client,opts){output_manager_default.spinner("Setting budget default\u2026");try{let budgetDefault=await upsertScopeBudgetDefault(client,{scopeType:opts.scopeType,limitAmount:opts.limit,...opts.refreshPeriod?{refreshPeriod:opts.refreshPeriod}:{}});return output_manager_default.stopSpinner(),opts.asJson?client.stdout.write(`${JSON.stringify(budgetDefault,null,2)}
14
+ `):output_manager_default.success(`API key ${import_chalk4.default.bold(id)} revoked ${removeStamp()}`),0}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err)&&err.status===404)return output_manager_default.error(`API key "${id}" not found.`),1;if(isAPIError(err))return output_manager_default.error(err.message),1;throw err}}var AiGatewayApiKeysTelemetryClient=class extends TelemetryClient{trackCliSubcommandCreate(actual){this.trackCliSubcommand({subcommand:"create",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandRevoke(actual){this.trackCliSubcommand({subcommand:"revoke",value:actual})}};var COMMAND_CONFIG={create:getCommandAliases(createSubcommand),list:getCommandAliases(listSubcommand),inspect:getCommandAliases(inspectSubcommand),revoke:getCommandAliases(removeSubcommand)};async function apiKeys(client){let telemetry=new AiGatewayApiKeysTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(apiKeysSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let subArgs=parsedArgs.args.slice(2),{subcommand,args,subcommandOriginal}=getSubcommand(subArgs,COMMAND_CONFIG),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("ai-gateway api-keys",subcommand),output_manager_default.print(help(apiKeysSubcommand,{columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{parent:apiKeysSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"create":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway api-keys",subcommandOriginal),printHelp(createSubcommand),0):(telemetry.trackCliSubcommandCreate(subcommandOriginal),create(client,args));case"list":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway api-keys",subcommandOriginal),printHelp(listSubcommand),0):(telemetry.trackCliSubcommandList(subcommandOriginal),list(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway api-keys",subcommandOriginal),printHelp(inspectSubcommand),0):(telemetry.trackCliSubcommandInspect(subcommandOriginal),inspect(client,args));case"revoke":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway api-keys",subcommandOriginal),printHelp(removeSubcommand),0):(telemetry.trackCliSubcommandRevoke(subcommandOriginal),subcommandOriginal!=="revoke"&&warnDeprecatedSubcommand(client,`ai-gateway api-keys ${subcommandOriginal}`,"ai-gateway api-keys revoke"),remove(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG)),output_manager_default.print(help(apiKeysSubcommand,{columns:client.stderr.columns})),2}}async function setScopeDefault(client,opts){output_manager_default.spinner("Setting budget default\u2026");try{let budgetDefault=await upsertScopeBudgetDefault(client,{scopeType:opts.scopeType,limitAmount:opts.limit,...opts.refreshPeriod?{refreshPeriod:opts.refreshPeriod}:{}});return output_manager_default.stopSpinner(),opts.asJson?client.stdout.write(`${JSON.stringify(withWarnings(budgetDefault,opts.warnings??[]),null,2)}
15
15
  `):(printAlignedLabel("Set default",opts.scopeType,{gutter:"\u2713"}),printAlignedLabel("Limit",`$${budgetDefault.limitAmount}`),printAlignedLabel("Refresh",budgetDefault.refreshPeriod),printAlignedLabel("Applies to",`${BUDGET_DEFAULT_APPLIES_TO[opts.scopeType]}, including existing ones`)),0}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}}async function removeScopeDefault(client,scopeType,{yes,asJson}){if(!yes&&(client.nonInteractive||!client.stdin.isTTY))return output_manager_default.error("To remove in non-interactive mode, re-run with --yes."),1;if(await listScopeBudgetDefaults(client).then(defaults=>defaults.find(d=>d.scopeType===scopeType&&d.active!==!1)??null).catch(()=>{})===null)return output_manager_default.error(`No ${scopeType} budget default set. Set one with ${getCommandName(`ai-gateway budgets set ${scopeType} --default`)}.`),1;if(!yes){let affected=BUDGET_DEFAULT_COVERED[scopeType];if(!await client.input.confirm(`Remove the ${scopeType} budget default? ${affected} without their own budget will have no default cap.`,!1))return output_manager_default.log("Canceled"),0}output_manager_default.spinner("Removing budget default\u2026");try{return await deleteScopeBudgetDefault(client,scopeType),output_manager_default.stopSpinner(),asJson?client.stdout.write(`${JSON.stringify({scopeType,removed:!0},null,2)}
16
- `):printAlignedLabel("Removed",`${scopeType} default`,{gutter:"\u2713"}),0}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}}var AiGatewayBudgetsSetTelemetryClient=class extends TelemetryClient{trackCliArgumentScope(scope){scope&&this.trackCliArgument({arg:"scope",value:scope})}trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionRefreshPeriod(refreshPeriod){refreshPeriod&&this.trackCliOption({option:"refresh-period",value:refreshPeriod})}trackCliFlagDefault(defaultValue){defaultValue&&this.trackCliFlag("default")}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var REFRESH_PERIODS=["daily","weekly","monthly","none"];async function set(client,argv){let telemetry=new AiGatewayBudgetsSetTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(budgetsSetSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,limit=opts["--limit"],refreshPeriod=opts["--refresh-period"],isDefault=opts["--default"];telemetry.trackCliArgumentScope(args[0]),telemetry.trackCliArgumentName(args[1]),telemetry.trackCliOptionLimit(limit),telemetry.trackCliOptionRefreshPeriod(refreshPeriod),telemetry.trackCliFlagDefault(isDefault),telemetry.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,scopeResult=parseBudgetScope(args,{isDefault});if("error"in scopeResult)return output_manager_default.error(scopeResult.error),2;let{scope}=scopeResult;if(limit===void 0||Number.isNaN(limit)||limit<1)return output_manager_default.error("The --limit flag is required and must be at least 1."),2;if(refreshPeriod!==void 0&&!REFRESH_PERIODS.includes(refreshPeriod))return output_manager_default.error(`The --refresh-period flag must be one of: ${REFRESH_PERIODS.join(", ")}.`),2;if(!await ensureTeam(client))return 1;if(scope.isDefault)return await setScopeDefault(client,{scopeType:scope.scopeType,limit,refreshPeriod,asJson});let projectId,userId,apiKeyId,scopeLabel="team";if(scope.scopeType==="api-key"){let resolved=await findApiKeyByIdOrName(client,scope.name);if("error"in resolved)return output_manager_default.error(describeApiKeyLookupError(scope.name,resolved)),1;apiKeyId=resolved.apiKey.id,scopeLabel=`api key ${resolved.apiKey.name||apiKeyId}`}else if(scope.scopeType==="project"){let resolved=await getProjectByNameOrId(client,scope.name);if(resolved instanceof ProjectNotFound)return output_manager_default.error(`Project not found: ${scope.name}`),1;projectId=resolved.id,scopeLabel=`project ${scope.name}`}else if(scope.scopeType==="user"){let member=await getTeamMemberByIdentifier(client,client.config.currentTeam,scope.name);if(!member)return output_manager_default.error(`Team member not found: ${scope.name}`),1;userId=member.uid,scopeLabel=`user ${teamMemberLabel(member)}`}output_manager_default.spinner("Setting budget\u2026");try{let budget=scope.scopeType==="api-key"?(await updateApiKeyQuota(client,apiKeyId,{limitAmount:limit,...refreshPeriod?{refreshPeriod}:{},active:!0,archived:!1})).quota:await setBudget(client,{scopeType:scope.scopeType,...projectId?{projectId}:{},...userId?{userId}:{},limitAmount:limit,...refreshPeriod?{refreshPeriod}:{}});return output_manager_default.stopSpinner(),asJson?client.stdout.write(`${JSON.stringify(budget,null,2)}
16
+ `):printAlignedLabel("Removed",`${scopeType} default`,{gutter:"\u2713"}),0}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}}var AiGatewayBudgetsSetTelemetryClient=class extends TelemetryClient{trackCliArgumentScope(scope){scope&&this.trackCliArgument({arg:"scope",value:scope})}trackCliArgumentName(name){name&&this.trackCliArgument({arg:"name",value:this.redactedValue})}trackCliOptionAmount(amount){amount!==void 0&&this.trackCliOption({option:"amount",value:this.redactedValue})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionRefreshPeriod(refreshPeriod){refreshPeriod&&this.trackCliOption({option:"refresh-period",value:refreshPeriod})}trackCliFlagDefault(defaultValue){defaultValue&&this.trackCliFlag("default")}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var REFRESH_PERIODS=["daily","weekly","monthly","none"];async function set(client,argv){let telemetry=new AiGatewayBudgetsSetTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(budgetsSetSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,refreshPeriod=opts["--refresh-period"],isDefault=opts["--default"];telemetry.trackCliArgumentScope(args[0]),telemetry.trackCliArgumentName(args[1]),telemetry.trackCliOptionAmount(opts["--amount"]),telemetry.trackCliOptionLimit(opts["--limit"]),telemetry.trackCliOptionRefreshPeriod(refreshPeriod),telemetry.trackCliFlagDefault(isDefault),telemetry.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,amount=getRenamedOption(opts,"--amount","--limit",{json:asJson});if("error"in amount)return reportRenamedOptionError(client,amount.error,{json:asJson});let limit=amount.value,scopeResult=parseBudgetScope(args,{isDefault});if("error"in scopeResult)return output_manager_default.error(scopeResult.error),2;let{scope}=scopeResult;if(limit===void 0||Number.isNaN(limit)||limit<1)return output_manager_default.error("The --amount flag is required and must be at least 1."),2;if(refreshPeriod!==void 0&&!REFRESH_PERIODS.includes(refreshPeriod))return output_manager_default.error(`The --refresh-period flag must be one of: ${REFRESH_PERIODS.join(", ")}.`),2;if(!await ensureTeam(client))return 1;if(scope.isDefault)return await setScopeDefault(client,{scopeType:scope.scopeType,limit,refreshPeriod,asJson,warnings:[amount.warning]});let projectId,userId,apiKeyId,scopeLabel="team";if(scope.scopeType==="api-key"){let resolved=await findApiKeyByIdOrName(client,scope.name);if("error"in resolved)return output_manager_default.error(describeApiKeyLookupError(scope.name,resolved)),1;apiKeyId=resolved.apiKey.id,scopeLabel=`api key ${resolved.apiKey.name||apiKeyId}`}else if(scope.scopeType==="project"){let resolved=await getProjectByNameOrId(client,scope.name);if(resolved instanceof ProjectNotFound)return output_manager_default.error(`Project not found: ${scope.name}`),1;projectId=resolved.id,scopeLabel=`project ${scope.name}`}else if(scope.scopeType==="user"){let member=await getTeamMemberByIdentifier(client,client.config.currentTeam,scope.name);if(!member)return output_manager_default.error(`Team member not found: ${scope.name}`),1;userId=member.uid,scopeLabel=`user ${teamMemberLabel(member)}`}output_manager_default.spinner("Setting budget\u2026");try{let budget=scope.scopeType==="api-key"?(await updateApiKeyQuota(client,apiKeyId,{limitAmount:limit,...refreshPeriod?{refreshPeriod}:{},active:!0,archived:!1})).quota:await setBudget(client,{scopeType:scope.scopeType,...projectId?{projectId}:{},...userId?{userId}:{},limitAmount:limit,...refreshPeriod?{refreshPeriod}:{}});return output_manager_default.stopSpinner(),asJson?client.stdout.write(`${JSON.stringify(withWarnings(budget,[amount.warning]),null,2)}
17
17
  `):(printAlignedLabel("Set budget",scopeLabel,{gutter:"\u2713"}),printAlignedLabel("Limit",`$${budget.limitAmount}`),printAlignedLabel("Refresh",budget.refreshPeriod)),0}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}}var import_chalk5=__toESM(require_source(),1),import_async_sema2=__toESM(require_async_sema(),1);var AiGatewayBudgetsListTelemetryClient=class extends TelemetryClient{trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliOptionScopeType(scopeType){scopeType&&this.trackCliOption({option:"scope-type",value:scopeType})}trackCliFlagDefaults(defaults){defaults&&this.trackCliFlag("defaults")}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function list2(client,argv){let telemetry=new AiGatewayBudgetsListTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(budgetsListSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts}=parsedArgs,scopeType=opts["--scope-type"],showDefaults=opts["--defaults"],limitFlag=opts["--limit"],next=opts["--next"];telemetry.trackCliOptionLimit(limitFlag),telemetry.trackCliOptionNext(next),telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliOptionScopeType(scopeType),telemetry.trackCliFlagDefaults(showDefaults);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;if(scopeType!==void 0&&!BUDGET_SCOPE_TYPES.includes(scopeType))return output_manager_default.error(`The --scope-type flag must be one of: ${BUDGET_SCOPE_TYPES.join(", ")}.`),2;let scopeFilter=scopeType;if(showDefaults&&scopeFilter==="team")return output_manager_default.error("The team scope does not support --default. Drop --defaults to list the team budget."),1;if(showDefaults&&(limitFlag!==void 0||next!==void 0))return output_manager_default.error("The --limit and --next options do not apply to --defaults, which lists every default in one page."),1;let limit;try{limit=parseListLimit(limitFlag)}catch(err){return output_manager_default.error(err.message),1}if(!await ensureTeam(client))return 1;if(showDefaults)return await listDefaults(client,{scopeType:scopeFilter,asJson});output_manager_default.spinner("Fetching budgets\u2026");let page,defaults;try{[page,defaults]=await Promise.all([listBudgetsPage(client,{scopeType:scopeFilter,limit,next,includeDefaultCovered:!1}),asJson||next?[]:listScopeBudgetDefaults(client).catch(err=>(output_manager_default.debug(`Skipping budget defaults in list output: ${err instanceof Error?err.message:String(err)}`),[]))])}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}let configured=page.items,counts=page.defaultCoveredCounts;if(asJson)return output_manager_default.stopSpinner(),client.stdout.write(`${JSON.stringify({budgets:configured,pagination:{next:page.next},defaultCoveredCounts:counts},null,2)}
18
18
  `),0;if(configured.length===0)return output_manager_default.stopSpinner(),next?(output_manager_default.log("No more budgets."),0):(output_manager_default.log(scopeType?`No ${scopeType} budgets found. Set one with ${getCommandName("ai-gateway budgets set")}.`:`No budgets found. Set one with ${getCommandName("ai-gateway budgets set")}.`),printDefaultsSection(defaults,counts,scopeFilter),printNextPageHint(client,page.next),0);let names=await resolveScopeNames(client,configured);return output_manager_default.stopSpinner(),printDefaultsSection(defaults,counts,scopeFilter),output_manager_default.log("Custom budgets"),client.stdout.write(printBudgetsTable(configured,names)),printNextPageHint(client,page.next),0}var KEY_LOOKUP_BY_ID_MAX=DEFAULT_LIST_LIMIT,KEY_LOOKUP_CONCURRENCY=5,KEY_ROSTER_PAGE_SIZE=100,KEY_ROSTER_MAX_PAGES=1e3,DIRECTORY_SKIPPED={keys:new Map,users:null};async function resolveDirectoryLabels(client,input){if(!isDirectoryEnabledByEnv()||input.keyIds.length===0&&input.userIds.length===0)return DIRECTORY_SKIPPED;try{return await resolveDirectoryIdentities(client,input)}catch(err){return output_manager_default.debug(`Skipping AI Gateway key directory labels: ${err instanceof Error?err.message:String(err)}`),DIRECTORY_SKIPPED}}async function resolveApiKeyNames(client,ids,{directoryAnswered=!1}={}){let names=new Map;if(ids.length===0)return names;if(directoryAnswered&&(ids=ids.slice(0,KEY_LOOKUP_BY_ID_MAX)),ids.length<=KEY_LOOKUP_BY_ID_MAX){let sema=new import_async_sema2.default(KEY_LOOKUP_CONCURRENCY);return await Promise.all(ids.map(async id=>{await sema.acquire();try{let key=await getApiKey(client,id).catch(()=>null);key?.name&&names.set(id,key.name)}finally{sema.release()}})),names}let wanted=new Set(ids),seen=new Set,next;try{for(let pages=0;pages<KEY_ROSTER_MAX_PAGES;pages++){let page=await listApiKeysPage(client,{limit:KEY_ROSTER_PAGE_SIZE,next});for(let key of page.items)wanted.delete(key.id)&&key.name&&names.set(key.id,key.name);if(!page.next||wanted.size===0||seen.has(page.next))break;seen.add(page.next),next=page.next}}catch{}return names}async function resolveScopeNames(client,configured){let ids=scopeType=>[...new Set(configured.filter(b=>b.scopeType===scopeType).map(b=>b.scopeId))],userIds=ids("user").map(id=>id.replace(/^usr_/,"")),unnamedKeyIds=[...new Set(configured.filter(b=>b.scopeType==="api-key"&&!b.name).map(b=>b.scopeId))],directory=await resolveDirectoryLabels(client,{keyIds:unnamedKeyIds,userIds}),directoryAnswered=directory!==DIRECTORY_SKIPPED,apiKeyNames=new Map;for(let[id,key]of directory.keys)key.name&&apiKeyNames.set(id,key.name);let members=new Map;for(let[uid,label]of directory.users??[])members.set(uid,{uid,username:label.username,name:label.name});let leftoverKeyIds=unnamedKeyIds.filter(id=>!apiKeyNames.has(id)),leftoverUserIds=directory.users===null?userIds:userIds.filter(uid=>!members.has(uid)),[legacyKeyNames,legacyMembers,projects,teams]=await Promise.all([resolveApiKeyNames(client,leftoverKeyIds,{directoryAnswered}),leftoverUserIds.length?getTeamMembersByIds(client,client.config.currentTeam,leftoverUserIds).catch(()=>new Map):new Map,Promise.all(ids("project").map(async id=>{let project=await getProjectByNameOrId(client,id).catch(()=>null),name=project&&!(project instanceof ProjectNotFound)?project.name:void 0;return[id,name||id]})),Promise.all(ids("team").map(async id=>{let team=await getTeamByIdOrSlug(client,id).catch(()=>null);return[id,team?.slug||team?.name||id]}))]),projectNames=new Map(projects),teamNames=new Map(teams);for(let[id,name]of legacyKeyNames)apiKeyNames.set(id,name);for(let[uid,member]of legacyMembers)members.set(uid,member);return configured.map(budget=>{switch(budget.scopeType){case"team":return teamNames.get(budget.scopeId)||budget.scopeId;case"project":return projectNames.get(budget.scopeId)||budget.scopeId;case"user":{let member=members.get(budget.scopeId.replace(/^usr_/,""));return member?teamMemberLabel(member):budget.scopeId}default:return budget.name||apiKeyNames.get(budget.scopeId)||budget.scopeId}})}function defaultRows(defaults,counts,filter){return BUDGET_DEFAULT_SCOPE_TYPES.flatMap(scopeType=>{if(filter&&scopeType!==filter)return[];let row=defaults.find(d=>d.scopeType===scopeType&&d.active!==!1);if(!row)return[];let applied=counts[scopeType]??0,covered=BUDGET_DEFAULT_COVERED[scopeType],noun=applied===1?covered.toLowerCase().replace(/s$/,""):covered.toLowerCase();return[[scopeType,`$${row.limitAmount}`,row.refreshPeriod,`${applied} ${noun}`]]})}async function listDefaults(client,{scopeType,asJson}){output_manager_default.spinner("Fetching budget defaults\u2026");let counts,defaults;try{[counts,defaults]=await Promise.all([asJson?{}:fetchDefaultCoveredCounts(client,scopeType),listScopeBudgetDefaults(client)])}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}output_manager_default.stopSpinner();let policyRows=defaults.filter(d=>BUDGET_DEFAULT_SCOPE_TYPES.includes(d.scopeType)&&(scopeType===void 0||d.scopeType===scopeType));if(asJson)return client.stdout.write(`${JSON.stringify({defaults:policyRows},null,2)}
19
19
  `),0;let rows=defaultRows(defaults,counts,scopeType);return rows.length===0?(output_manager_default.log(scopeType?`No ${scopeType} budget default set. Set one with ${getCommandName(`ai-gateway budgets set ${scopeType} --default`)}.`:`No budget defaults set. Set one with ${getCommandName("ai-gateway budgets set <scope> --default")}.`),0):(output_manager_default.log("Budget defaults"),client.stdout.write(`${table([["default","limit","refresh","applied to"].map(header=>import_chalk5.default.gray(header)),...rows],{align:["l","r","l","l"],hsep:4}).replace(/^/gm," ")}
@@ -26,7 +26,7 @@ import{GATEWAY_ANTHROPIC_BASE_URL,GATEWAY_API_KEY_ENV,GATEWAY_CODING_AGENT_BASE_
26
26
  `);else{let removedValue=scope.scopeType==="team"?"team budget":`budget for ${targetName}`;printAlignedLabel("Removed",removedValue,{gutter:"\u2713"}),fallbackDefault&&printAlignedLabel("Falls back to",`${scope.scopeType} default (${formatBudgetCap(fallbackDefault.limitAmount,fallbackDefault.refreshPeriod)})`)}return 0}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}}var import_chalk7=__toESM(require_source(),1);var AiGatewayBudgetsDefaultsListTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}};async function list3(client,argv){let telemetry=new AiGatewayBudgetsDefaultsListTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(budgetsDefaultsListSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts}=parsedArgs;telemetry.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;if(!await ensureTeam(client))return 1;output_manager_default.spinner("Fetching budget defaults\u2026");let defaults;try{defaults=await listScopeBudgetDefaults(client)}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}output_manager_default.stopSpinner();let shown=defaults.filter(d=>BUDGET_DEFAULT_SCOPE_TYPES.includes(d.scopeType));return asJson?(client.stdout.write(`${JSON.stringify({defaults:shown},null,2)}
27
27
  `),0):shown.length===0?(output_manager_default.log(`No budget defaults set. Set one with ${getCommandName("ai-gateway budgets set <scope> --default")}.`),0):(output_manager_default.log("Budget defaults"),client.stdout.write(printDefaultsTable(shown)),0)}function printDefaultsTable(defaults){return`${table([["scope","limit","refresh"].map(header=>import_chalk7.default.gray(header)),...defaults.map(d=>[d.scopeType,`$${d.limitAmount}`,d.refreshPeriod])],{align:["l","r","l"],hsep:4}).replace(/^/gm," ")}
28
28
 
29
- `}var AiGatewayBudgetsDefaultsSetTelemetryClient=class extends TelemetryClient{trackCliArgumentScope(scope){scope&&this.trackCliArgument({arg:"scope",value:scope})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionRefreshPeriod(refreshPeriod){refreshPeriod&&this.trackCliOption({option:"refresh-period",value:refreshPeriod})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}};var REFRESH_PERIODS2=["daily","weekly","monthly","none"];async function set2(client,argv){let telemetry=new AiGatewayBudgetsDefaultsSetTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(budgetsDefaultsSetSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,limit=opts["--limit"],refreshPeriod=opts["--refresh-period"];telemetry.trackCliArgumentScope(args[0]),telemetry.trackCliOptionLimit(limit),telemetry.trackCliOptionRefreshPeriod(refreshPeriod),telemetry.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,scopeResult=parseBudgetDefaultScope(args);if("error"in scopeResult)return output_manager_default.error(scopeResult.error),2;let{scopeType}=scopeResult;return limit===void 0||Number.isNaN(limit)||limit<1?(output_manager_default.error("The --limit flag is required and must be at least 1."),2):refreshPeriod!==void 0&&!REFRESH_PERIODS2.includes(refreshPeriod)?(output_manager_default.error(`The --refresh-period flag must be one of: ${REFRESH_PERIODS2.join(", ")}.`),2):await ensureTeam(client)?await setScopeDefault(client,{scopeType,limit,refreshPeriod,asJson}):1}var AiGatewayBudgetsDefaultsRemoveTelemetryClient=class extends TelemetryClient{trackCliArgumentScope(scope){scope&&this.trackCliArgument({arg:"scope",value:scope})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}};async function remove3(client,argv){let telemetry=new AiGatewayBudgetsDefaultsRemoveTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(budgetsDefaultsRemoveSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,yes=opts["--yes"];telemetry.trackCliArgumentScope(args[0]),telemetry.trackCliFlagYes(yes),telemetry.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,scopeResult=parseBudgetDefaultScope(args);if("error"in scopeResult)return output_manager_default.error(scopeResult.error),2;let{scopeType}=scopeResult;return await ensureTeam(client)?await removeScopeDefault(client,scopeType,{yes,asJson}):1}var AiGatewayBudgetsDefaultsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandSet(actual){this.trackCliSubcommand({subcommand:"set",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}};var COMMAND_CONFIG2={list:getCommandAliases(budgetsDefaultsListSubcommand),set:getCommandAliases(budgetsDefaultsSetSubcommand),remove:getCommandAliases(budgetsDefaultsRemoveSubcommand)};async function budgetsDefaults(client){let telemetry=new AiGatewayBudgetsDefaultsTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(budgetsDefaultsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let subArgs=parsedArgs.args.slice(3),{subcommand,args,subcommandOriginal}=getSubcommand(subArgs,COMMAND_CONFIG2),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("ai-gateway budgets defaults",subcommandOriginal),output_manager_default.print(help(budgetsDefaultsSubcommand,{columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{parent:budgetsDefaultsSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"list":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway budgets defaults",subcommandOriginal),printHelp(budgetsDefaultsListSubcommand),0):(telemetry.trackCliSubcommandList(subcommandOriginal),list3(client,args));case"set":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway budgets defaults",subcommandOriginal),printHelp(budgetsDefaultsSetSubcommand),0):(telemetry.trackCliSubcommandSet(subcommandOriginal),set2(client,args));case"remove":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway budgets defaults",subcommandOriginal),printHelp(budgetsDefaultsRemoveSubcommand),0):(telemetry.trackCliSubcommandRemove(subcommandOriginal),subcommandOriginal==="delete"&&warnDeprecatedSubcommand(client,"ai-gateway budgets defaults delete","ai-gateway budgets defaults remove"),remove3(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG2)),output_manager_default.print(help(budgetsDefaultsSubcommand,{columns:client.stderr.columns})),2}}var AiGatewayBudgetsTelemetryClient=class extends TelemetryClient{trackCliSubcommandSet(actual){this.trackCliSubcommand({subcommand:"set",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandDefaults(actual){this.trackCliSubcommand({subcommand:"defaults",value:actual})}};var COMMAND_CONFIG3={set:getCommandAliases(budgetsSetSubcommand),list:getCommandAliases(budgetsListSubcommand),inspect:getCommandAliases(budgetsInspectSubcommand),remove:getCommandAliases(budgetsRemoveSubcommand),defaults:getCommandAliases(budgetsDefaultsSubcommand)};async function budgets(client){let telemetry=new AiGatewayBudgetsTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(budgetsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let subArgs=parsedArgs.args.slice(2),{subcommand,args,subcommandOriginal}=getSubcommand(subArgs,COMMAND_CONFIG3),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("ai-gateway budgets",subcommandOriginal),output_manager_default.print(help(budgetsSubcommand,{columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{parent:budgetsSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"set":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway budgets",subcommandOriginal),printHelp(budgetsSetSubcommand),0):(telemetry.trackCliSubcommandSet(subcommandOriginal),set(client,args));case"list":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway budgets",subcommandOriginal),printHelp(budgetsListSubcommand),0):(telemetry.trackCliSubcommandList(subcommandOriginal),list2(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway budgets",subcommandOriginal),printHelp(budgetsInspectSubcommand),0):(telemetry.trackCliSubcommandInspect(subcommandOriginal),inspect2(client,args));case"remove":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway budgets",subcommandOriginal),printHelp(budgetsRemoveSubcommand),0):(telemetry.trackCliSubcommandRemove(subcommandOriginal),subcommandOriginal==="delete"&&warnDeprecatedSubcommand(client,"ai-gateway budgets delete","ai-gateway budgets remove"),remove2(client,args));case"defaults":return telemetry.trackCliSubcommandDefaults(subcommandOriginal),needHelp||output_manager_default.warn(`The ${getCommandName("ai-gateway budgets defaults")} command group is deprecated. Use \`--default\` with \`budgets set\`, \`budgets inspect\`, or \`budgets remove\` (e.g. ${getCommandName("ai-gateway budgets set user --default --limit 50")}), or ${getCommandName("ai-gateway budgets ls --defaults")}.`),budgetsDefaults(client);default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG3)),output_manager_default.print(help(budgetsSubcommand,{columns:client.stderr.columns})),2}}var import_chalk8=__toESM(require_source(),1);async function createRule(client,input){return client.fetch("/ai-gateway/rules",{method:"POST",body:input})}async function listRulesPage(client,opts={}){let query=new URLSearchParams;opts.limit!==void 0&&query.set("limit",String(opts.limit)),opts.next&&query.set("cursor",opts.next),opts.includeDisabled&&query.set("includeDisabled","true");let qs=query.toString(),{rules:rules2,nextCursor}=await client.fetch(`/ai-gateway/rules${qs?`?${qs}`:""}`,{method:"GET"});return{items:rules2??[],next:nextCursor??null}}async function updateRule(client,input){return client.fetch("/ai-gateway/rules",{method:"PATCH",body:input})}async function deleteRule(client,ruleId){await client.fetch(`/ai-gateway/rules?ruleId=${encodeURIComponent(ruleId)}`,{method:"DELETE"})}var AiGatewayRulesAddTelemetryClient=class extends TelemetryClient{trackCliOptionType(type){type&&this.trackCliOption({option:"type",value:type})}trackCliOptionSource(source){source&&this.trackCliOption({option:"source",value:this.redactedValue})}trackCliOptionDestination(destination){destination&&this.trackCliOption({option:"destination",value:this.redactedValue})}trackCliOptionReason(reason){reason&&this.trackCliOption({option:"reason",value:this.redactedValue})}trackCliOptionDescription(description){description&&this.trackCliOption({option:"description",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var RULE_TYPES=["rewrite","deny"];async function add(client,argv){let telemetry=new AiGatewayRulesAddTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(rulesAddSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts}=parsedArgs,type=opts["--type"],source=opts["--source"],destination=opts["--destination"],reason=opts["--reason"],description=opts["--description"];telemetry.trackCliOptionType(type),telemetry.trackCliOptionSource(source),telemetry.trackCliOptionDestination(destination),telemetry.trackCliOptionReason(reason),telemetry.trackCliOptionDescription(description),telemetry.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;if(!type||!RULE_TYPES.includes(type))return output_manager_default.error(`The --type flag is required and must be one of: ${RULE_TYPES.join(", ")}.`),2;if(!source)return output_manager_default.error("The --source flag is required (the model the rule matches)."),2;if(type==="rewrite"&&!destination)return output_manager_default.error("A rewrite rule requires --destination (the model to route to)."),2;if(type==="deny"&&destination)return output_manager_default.error("A deny rule cannot set --destination."),1;let action;if(type==="rewrite"&&destination?action={rewriteModel:destination,...reason?{reason}:{}}:reason&&(action={reason}),!await ensureTeam(client))return 1;let addStamp=stamp_default();output_manager_default.spinner("Adding routing rule");try{let rule=await createRule(client,{type,match:{model:source},...action?{action}:{},...description?{description}:{}});return output_manager_default.stopSpinner(),asJson?client.stdout.write(`${JSON.stringify(rule,null,2)}
29
+ `}var AiGatewayBudgetsDefaultsSetTelemetryClient=class extends TelemetryClient{trackCliArgumentScope(scope){scope&&this.trackCliArgument({arg:"scope",value:scope})}trackCliOptionAmount(amount){amount!==void 0&&this.trackCliOption({option:"amount",value:this.redactedValue})}trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:this.redactedValue})}trackCliOptionRefreshPeriod(refreshPeriod){refreshPeriod&&this.trackCliOption({option:"refresh-period",value:refreshPeriod})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}};var REFRESH_PERIODS2=["daily","weekly","monthly","none"];async function set2(client,argv){let telemetry=new AiGatewayBudgetsDefaultsSetTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(budgetsDefaultsSetSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,refreshPeriod=opts["--refresh-period"];telemetry.trackCliArgumentScope(args[0]),telemetry.trackCliOptionAmount(opts["--amount"]),telemetry.trackCliOptionLimit(opts["--limit"]),telemetry.trackCliOptionRefreshPeriod(refreshPeriod),telemetry.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,amount=getRenamedOption(opts,"--amount","--limit",{json:asJson});if("error"in amount)return reportRenamedOptionError(client,amount.error,{json:asJson});let limit=amount.value,scopeResult=parseBudgetDefaultScope(args);if("error"in scopeResult)return output_manager_default.error(scopeResult.error),2;let{scopeType}=scopeResult;return limit===void 0||Number.isNaN(limit)||limit<1?(output_manager_default.error("The --amount flag is required and must be at least 1."),2):refreshPeriod!==void 0&&!REFRESH_PERIODS2.includes(refreshPeriod)?(output_manager_default.error(`The --refresh-period flag must be one of: ${REFRESH_PERIODS2.join(", ")}.`),2):await ensureTeam(client)?await setScopeDefault(client,{scopeType,limit,refreshPeriod,asJson,warnings:[amount.warning]}):1}var AiGatewayBudgetsDefaultsRemoveTelemetryClient=class extends TelemetryClient{trackCliArgumentScope(scope){scope&&this.trackCliArgument({arg:"scope",value:scope})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}};async function remove3(client,argv){let telemetry=new AiGatewayBudgetsDefaultsRemoveTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(budgetsDefaultsRemoveSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs,yes=opts["--yes"];telemetry.trackCliArgumentScope(args[0]),telemetry.trackCliFlagYes(yes),telemetry.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput,scopeResult=parseBudgetDefaultScope(args);if("error"in scopeResult)return output_manager_default.error(scopeResult.error),2;let{scopeType}=scopeResult;return await ensureTeam(client)?await removeScopeDefault(client,scopeType,{yes,asJson}):1}var AiGatewayBudgetsDefaultsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandSet(actual){this.trackCliSubcommand({subcommand:"set",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}};var COMMAND_CONFIG2={list:getCommandAliases(budgetsDefaultsListSubcommand),set:getCommandAliases(budgetsDefaultsSetSubcommand),remove:getCommandAliases(budgetsDefaultsRemoveSubcommand)};async function budgetsDefaults(client){let telemetry=new AiGatewayBudgetsDefaultsTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(budgetsDefaultsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let subArgs=parsedArgs.args.slice(3),{subcommand,args,subcommandOriginal}=getSubcommand(subArgs,COMMAND_CONFIG2),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("ai-gateway budgets defaults",subcommandOriginal),output_manager_default.print(help(budgetsDefaultsSubcommand,{columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{parent:budgetsDefaultsSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"list":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway budgets defaults",subcommandOriginal),printHelp(budgetsDefaultsListSubcommand),0):(telemetry.trackCliSubcommandList(subcommandOriginal),list3(client,args));case"set":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway budgets defaults",subcommandOriginal),printHelp(budgetsDefaultsSetSubcommand),0):(telemetry.trackCliSubcommandSet(subcommandOriginal),set2(client,args));case"remove":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway budgets defaults",subcommandOriginal),printHelp(budgetsDefaultsRemoveSubcommand),0):(telemetry.trackCliSubcommandRemove(subcommandOriginal),subcommandOriginal==="delete"&&warnDeprecatedSubcommand(client,"ai-gateway budgets defaults delete","ai-gateway budgets defaults remove"),remove3(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG2)),output_manager_default.print(help(budgetsDefaultsSubcommand,{columns:client.stderr.columns})),2}}var AiGatewayBudgetsTelemetryClient=class extends TelemetryClient{trackCliSubcommandSet(actual){this.trackCliSubcommand({subcommand:"set",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandDefaults(actual){this.trackCliSubcommand({subcommand:"defaults",value:actual})}};var COMMAND_CONFIG3={set:getCommandAliases(budgetsSetSubcommand),list:getCommandAliases(budgetsListSubcommand),inspect:getCommandAliases(budgetsInspectSubcommand),remove:getCommandAliases(budgetsRemoveSubcommand),defaults:getCommandAliases(budgetsDefaultsSubcommand)};async function budgets(client){let telemetry=new AiGatewayBudgetsTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(budgetsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let subArgs=parsedArgs.args.slice(2),{subcommand,args,subcommandOriginal}=getSubcommand(subArgs,COMMAND_CONFIG3),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("ai-gateway budgets",subcommandOriginal),output_manager_default.print(help(budgetsSubcommand,{columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{parent:budgetsSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"set":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway budgets",subcommandOriginal),printHelp(budgetsSetSubcommand),0):(telemetry.trackCliSubcommandSet(subcommandOriginal),set(client,args));case"list":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway budgets",subcommandOriginal),printHelp(budgetsListSubcommand),0):(telemetry.trackCliSubcommandList(subcommandOriginal),list2(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway budgets",subcommandOriginal),printHelp(budgetsInspectSubcommand),0):(telemetry.trackCliSubcommandInspect(subcommandOriginal),inspect2(client,args));case"remove":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway budgets",subcommandOriginal),printHelp(budgetsRemoveSubcommand),0):(telemetry.trackCliSubcommandRemove(subcommandOriginal),subcommandOriginal==="delete"&&warnDeprecatedSubcommand(client,"ai-gateway budgets delete","ai-gateway budgets remove"),remove2(client,args));case"defaults":return telemetry.trackCliSubcommandDefaults(subcommandOriginal),needHelp||output_manager_default.warn(`The ${getCommandName("ai-gateway budgets defaults")} command group is deprecated. Use \`--default\` with \`budgets set\`, \`budgets inspect\`, or \`budgets remove\` (e.g. ${getCommandName("ai-gateway budgets set user --default --amount 50")}), or ${getCommandName("ai-gateway budgets ls --defaults")}.`),budgetsDefaults(client);default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG3)),output_manager_default.print(help(budgetsSubcommand,{columns:client.stderr.columns})),2}}var import_chalk8=__toESM(require_source(),1);async function createRule(client,input){return client.fetch("/ai-gateway/rules",{method:"POST",body:input})}async function listRulesPage(client,opts={}){let query=new URLSearchParams;opts.limit!==void 0&&query.set("limit",String(opts.limit)),opts.next&&query.set("cursor",opts.next),opts.includeDisabled&&query.set("includeDisabled","true");let qs=query.toString(),{rules:rules2,nextCursor}=await client.fetch(`/ai-gateway/rules${qs?`?${qs}`:""}`,{method:"GET"});return{items:rules2??[],next:nextCursor??null}}async function updateRule(client,input){return client.fetch("/ai-gateway/rules",{method:"PATCH",body:input})}async function deleteRule(client,ruleId){await client.fetch(`/ai-gateway/rules?ruleId=${encodeURIComponent(ruleId)}`,{method:"DELETE"})}var AiGatewayRulesAddTelemetryClient=class extends TelemetryClient{trackCliOptionType(type){type&&this.trackCliOption({option:"type",value:type})}trackCliOptionSource(source){source&&this.trackCliOption({option:"source",value:this.redactedValue})}trackCliOptionDestination(destination){destination&&this.trackCliOption({option:"destination",value:this.redactedValue})}trackCliOptionReason(reason){reason&&this.trackCliOption({option:"reason",value:this.redactedValue})}trackCliOptionDescription(description){description&&this.trackCliOption({option:"description",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};var RULE_TYPES=["rewrite","deny"];async function add(client,argv){let telemetry=new AiGatewayRulesAddTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(rulesAddSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts}=parsedArgs,type=opts["--type"],source=opts["--source"],destination=opts["--destination"],reason=opts["--reason"],description=opts["--description"];telemetry.trackCliOptionType(type),telemetry.trackCliOptionSource(source),telemetry.trackCliOptionDestination(destination),telemetry.trackCliOptionReason(reason),telemetry.trackCliOptionDescription(description),telemetry.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let asJson=formatResult.jsonOutput;if(!type||!RULE_TYPES.includes(type))return output_manager_default.error(`The --type flag is required and must be one of: ${RULE_TYPES.join(", ")}.`),2;if(!source)return output_manager_default.error("The --source flag is required (the model the rule matches)."),2;if(type==="rewrite"&&!destination)return output_manager_default.error("A rewrite rule requires --destination (the model to route to)."),2;if(type==="deny"&&destination)return output_manager_default.error("A deny rule cannot set --destination."),1;let action;if(type==="rewrite"&&destination?action={rewriteModel:destination,...reason?{reason}:{}}:reason&&(action={reason}),!await ensureTeam(client))return 1;let addStamp=stamp_default();output_manager_default.spinner("Adding routing rule");try{let rule=await createRule(client,{type,match:{model:source},...action?{action}:{},...description?{description}:{}});return output_manager_default.stopSpinner(),asJson?client.stdout.write(`${JSON.stringify(rule,null,2)}
30
30
  `):(client.stdout.write(`${rule.ruleId}
31
31
  `),output_manager_default.success(`Routing rule ${import_chalk8.default.bold(rule.ruleId)} added ${addStamp()}`)),0}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),1;throw err}}var import_chalk9=__toESM(require_source(),1);var AiGatewayRulesListTelemetryClient=class extends TelemetryClient{trackCliOptionLimit(limit){limit!==void 0&&this.trackCliOption({option:"limit",value:String(limit)})}trackCliOptionNext(next){next&&this.trackCliOption({option:"next",value:this.redactedValue})}trackCliFlagIncludeDisabled(includeDisabled){includeDisabled&&this.trackCliFlag("include-disabled")}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function list4(client,argv){let telemetry=new AiGatewayRulesListTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(rulesListSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts}=parsedArgs,includeDisabled=opts["--include-disabled"],limitFlag=opts["--limit"],next=opts["--next"];telemetry.trackCliFlagIncludeDisabled(includeDisabled),telemetry.trackCliOptionLimit(limitFlag),telemetry.trackCliOptionNext(next),telemetry.trackCliOptionFormat(opts["--format"]);let formatResult=validateJsonOutput(opts);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;let limit;try{limit=parseListLimit(limitFlag)}catch(err){return output_manager_default.error(err.message),1}return await ensureTeam(client)?renderResource(client,{asJson:formatResult.jsonOutput,spinnerText:"Fetching routing rules",fetch:()=>listRulesPage(client,{limit,next,includeDisabled:!!includeDisabled}),toJSON:page=>({rules:page.items,pagination:{next:page.next}}),isEmpty:page=>page.items.length===0,emptyMessage:next?"No more rules.":`No routing rules found. Add one with ${getCommandName("ai-gateway rules add")}.`,header:()=>"Routing rules",renderTable:page=>printRulesTable(page.items),next:page=>page.next}):1}function printRulesTable(rules2){return`${table([["id","type","model","action","enabled"].map(header=>import_chalk9.default.gray(header)),...rules2.map(rule=>[rule.ruleId,rule.type,rule.match?.model??import_chalk9.default.gray("\u2013"),rule.type==="rewrite"?`\u2192 ${rule.action?.rewriteModel??import_chalk9.default.gray("\u2013")}`:import_chalk9.default.gray("deny"),rule.enabled===!1?import_chalk9.default.gray("no"):"yes"])],{align:["l","l","l","l","l"],hsep:4}).replace(/^/gm," ")}
32
32
 
@@ -100,7 +100,7 @@ ${sections.join(`
100
100
  `),{exitCode:0,outcome:"agent_prompt"}):(client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:"keychain_error",message:"The `--apply prompt` mode needs the key in the macOS Keychain, but storing it failed, so no prompt was produced.",skipped,warnings:args.warnings},null,2)}
101
101
  `),{exitCode:1,outcome:"failed"});let results=await applyPlan(finalPlan,{backup});return client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.OK,reason:"coding_agents_configured",message:`Configured ${results.length} ${results.length===1?"file":"files"} across ${selected.length} ${selected.length===1?"agent":"agents"} to use the AI Gateway.`,apiKey:key,configured:results.map(r=>({agent:r.owners.join(", "),file:r.path,action:r.action,backup:r.backupPath})),migrated:migrated.results,skipped,warnings:args.warnings,notes:finalPlan.notes.flatMap(n=>n.notes.map(line=>`${n.displayName}: ${line}`))},null,2)}
102
102
  `),{exitCode:0,outcome:"configured"}}function migrationSkips(errors){return errors.map(error=>({target:error.agentId,reason:"session_migration_failed",message:error.message}))}function writeJson(client,value){client.stdout.write(`${JSON.stringify(value,null,2)}
103
- `)}var DEFAULT_LEADERBOARD_BASE="https://vercel.com";var LEADERBOARD_MODALITIES=["all","text","image","video"],LEADERBOARD_METRICS=["requests","tokens","spend","imageCount","videoCount"];function leaderboardBase(){return process.env.VERCEL_LEADERBOARD_URL??DEFAULT_LEADERBOARD_BASE}function buildUrl(query,format){let params=new URLSearchParams;return params.set("dataset",query.dataset),query.modality&&params.set("modality",query.modality),params.set("format",format),`${leaderboardBase()}/api/ai/leaderboard-export?${params.toString()}`}async function fetchLeaderboard(client,query,opts={}){return client.fetch(buildUrl(query,"json"),{method:"GET",teamOptional:!0,...opts})}async function fetchLeaderboardCsv(client,query){return(await client.fetch(buildUrl(query,"csv"),{method:"GET",teamOptional:!0,json:!1})).text()}function latestDate(rows){let max;for(let row of rows)(max===void 0||row.date>max)&&(max=row.date);return max}function availableDates(rows){return Array.from(new Set(rows.map(r=>r.date))).sort((a,b)=>a<b?1:a>b?-1:0)}function filterTimeseries(rows,options){let day=options.date??latestDate(rows);return rows.filter(row=>row.metric===options.metric&&row.date===day).sort((a,b)=>b.share_percent-a.share_percent)}var TOP_MODELS_LIMIT=10,TOP_MODELS_METRIC="spend",TOP_MODELS_MODALITY="text",MIN_USABLE_MODELS=3,DEFAULT_TIMEOUT_MS=2e3,OTHER_ROW_NAME="other";function normalizeName(name){return name.trim().toLowerCase()}function resolveTopModels(rows,catalog,limit=TOP_MODELS_LIMIT){let idByName=new Map;for(let model of catalog){if(!model.name||!model.id)continue;let key=normalizeName(model.name);idByName.has(key)?idByName.get(key)!==model.id&&idByName.set(key,null):idByName.set(key,model.id)}let nameById=new Map(catalog.map(model=>[model.id,model.name])),ranked=filterTimeseries(rows,{metric:TOP_MODELS_METRIC}),resolved=[],seen=new Set;for(let row of ranked){if(resolved.length>=limit)break;if(normalizeName(row.name)===OTHER_ROW_NAME)continue;let id=row.slug??idByName.get(normalizeName(row.name))??void 0;!id||seen.has(id)||(seen.add(id),resolved.push({id,name:nameById.get(id)??row.name}))}return resolved}function withTimeout(run2,ms2){let controller=new AbortController;return new Promise((resolvePromise,reject)=>{let timer=setTimeout(()=>{controller.abort(),reject(new Error(`timed out after ${ms2}ms`))},ms2);timer.unref?.(),run2(controller.signal).then(resolvePromise,reject).finally(()=>clearTimeout(timer))})}async function fetchTopModels(client,opts={}){let{limit=TOP_MODELS_LIMIT,timeoutMs=DEFAULT_TIMEOUT_MS}=opts;try{let fetchOpts={retry:{retries:0},bailOn429:!0},[leaderboard2,catalog]=await withTimeout(signal=>Promise.all([fetchLeaderboard(client,{dataset:"models",modality:TOP_MODELS_MODALITY},{signal,...fetchOpts}),listModels(client,{signal,...fetchOpts})]),timeoutMs),models3=resolveTopModels(leaderboard2.rows??[],catalog,limit);return models3.length<MIN_USABLE_MODELS?(output_manager_default.debug(`Leaderboard returned only ${models3.length} usable models; using the built-in list.`),null):models3}catch(err){return output_manager_default.debug(`Could not fetch the model leaderboard, using the built-in list: ${err.message}`),null}}var AiGatewayCodingAgentsSetupTelemetryClient=class extends TelemetryClient{trackCliOptionAgent(agents){if(agents&&agents.length)for(let agent of agents)this.trackCliOption({option:"agent",value:agent})}trackCliFlagAll(all){all&&this.trackCliFlag("all")}trackCliFlagTokenPass(tokenPass2){tokenPass2&&this.trackCliFlag("token-pass")}trackCliOptionKey(key){key&&this.trackCliOption({option:"key",value:this.redactedValue})}trackCliOptionBudget(budget){budget!==void 0&&this.trackCliOption({option:"budget",value:this.redactedValue})}trackCliOptionRefreshPeriod(refreshPeriod){refreshPeriod&&this.trackCliOption({option:"refresh-period",value:refreshPeriod})}trackCliFlagIncludeByok(includeByok){includeByok&&this.trackCliFlag("include-byok")}trackCliOptionExpiration(expiration){expiration&&this.trackCliOption({option:"expiration",value:expiration})}trackCliOptionName(name){name&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliFlagReconfigure(reconfigure){reconfigure&&this.trackCliFlag("reconfigure")}trackCliFlagDryRun(dryRun){dryRun&&this.trackCliFlag("dry-run")}trackCliFlagNoBackup(noBackup){noBackup&&this.trackCliFlag("no-backup")}trackCliFlagNoSessionMigration(noSessionMigration){noSessionMigration&&this.trackCliFlag("no-session-migration")}trackCliFlagNoKeychain(noKeychain){noKeychain&&this.trackCliFlag("no-keychain")}trackCliOptionAgentConfig(agentConfig){agentConfig&&agentConfig.length&&this.trackCliOption({option:"agent-config",value:this.redactedValue})}trackCliOptionShellRc(shellRc){shellRc&&this.trackCliOption({option:"shell-rc",value:this.redactedValue})}trackCliOptionApply(apply){apply&&this.trackCliOption({option:"apply",value:apply})}trackCliOptionBaseUrl(baseUrl){baseUrl&&this.trackCliOption({option:"base-url",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function codingAgentsSetup(client,argv){return(await setupCodingAgents(client,argv)).exitCode}async function setupCodingAgents(client,argv){let telemetry=new AiGatewayCodingAgentsSetupTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(setupSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),{exitCode:2,outcome:"failed"}}let{flags:opts}=parsedArgs,agentFlags=opts["--agent"],all=opts["--all"],providedKey=opts["--key"],tokenPass2=opts["--token-pass"];if(tokenPass2&&parsedArgs.args.length>0){let message="Token Pass setup does not accept positional arguments. Run `vercel token-pass --help` for usage.";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message},2),output_manager_default.error(message),{exitCode:2,outcome:"failed"}}let budget=opts["--budget"],refreshPeriod=opts["--refresh-period"],includeByok=opts["--include-byok"],expiration=opts["--expiration"],name=opts["--name"],reconfigure=!!(opts["--reconfigure"]||tokenPass2&&!providedKey),dryRun=opts["--dry-run"],noBackup=opts["--no-backup"],noSessionMigration=opts["--no-session-migration"],noKeychain=opts["--no-keychain"],agentConfig=opts["--agent-config"],shellRcOverride=opts["--shell-rc"],applyMode=opts["--apply"],baseUrl=opts["--base-url"],yes=opts["--yes"];telemetry.trackCliOptionAgent(agentFlags),telemetry.trackCliFlagAll(all),telemetry.trackCliOptionKey(providedKey),telemetry.trackCliFlagTokenPass(tokenPass2),telemetry.trackCliOptionBudget(budget),telemetry.trackCliOptionRefreshPeriod(refreshPeriod),telemetry.trackCliFlagIncludeByok(includeByok),telemetry.trackCliOptionExpiration(expiration),telemetry.trackCliOptionName(name),telemetry.trackCliFlagReconfigure(opts["--reconfigure"]),telemetry.trackCliFlagDryRun(dryRun),telemetry.trackCliFlagNoBackup(noBackup),telemetry.trackCliFlagNoSessionMigration(noSessionMigration),telemetry.trackCliFlagNoKeychain(noKeychain),telemetry.trackCliOptionAgentConfig(agentConfig),telemetry.trackCliOptionShellRc(shellRcOverride),telemetry.trackCliOptionApply(applyMode),telemetry.trackCliOptionBaseUrl(baseUrl),telemetry.trackCliFlagYes(yes);let machine=shouldEmitNonInteractiveCommandError(client),canPrompt2=!!client.stdin.isTTY&&!machine,home=homedir(),wantKeychain=!noKeychain&&isKeychainAvailable();if(budget!==void 0&&(!Number.isFinite(budget)||budget<1))return failValidation(client,machine,AGENT_REASON.INVALID_BUDGET,"Budget must be a positive number in dollars (minimum 1).");if(refreshPeriod&&!isValidRefreshPeriod(refreshPeriod))return failValidation(client,machine,AGENT_REASON.INVALID_REFRESH_PERIOD,`Invalid refresh period "${refreshPeriod}". Must be one of: ${VALID_REFRESH_PERIODS.join(", ")}.`);if(expiration&&!isValidExpiry(expiration))return failValidation(client,machine,AGENT_REASON.INVALID_EXPIRATION,`Invalid expiration "${expiration}". Must be one of: ${VALID_EXPIRY_VALUES.join(", ")}.`);if(applyMode!==void 0&&applyMode!=="edit"&&applyMode!=="prompt")return failValidation(client,machine,AGENT_REASON.INVALID_ARGUMENTS,`Invalid --apply "${applyMode}". Must be "edit" or "prompt".`);if(baseUrl!==void 0&&!isValidBaseUrl(baseUrl))return failValidation(client,machine,AGENT_REASON.INVALID_ARGUMENTS,`Invalid --base-url "${baseUrl}". Must be an http(s) URL.`);let flagExpiresAt=expiration&&expiration!=="none"?presetToExpiresAt(expiration):void 0;tokenPass2&&providedKey&&printWarning("Using an existing key; make sure it was created with --token-pass or Token Pass models will not use your pass.");let overrides={};for(let pair of agentConfig??[]){let eq=pair.indexOf("="),id=eq>0?pair.slice(0,eq).trim().toLowerCase():"",path=eq>0?pair.slice(eq+1).trim():"";if(!id||!path)return failValidation(client,machine,AGENT_REASON.INVALID_ARGUMENTS,`Invalid --agent-config "${pair}". Use <agent>=<path>, e.g. claude-code=/path/settings.json.`);if(!getAgentById(id))return failValidation(client,machine,AGENT_REASON.INVALID_ARGUMENTS,`Unknown agent "${id}" in --agent-config.`);overrides[id]=resolve2(path)}dryRun&&!machine&&printStatus(`${import_chalk23.default.bold("Dry run")}: previewing changes only. No files will be written and no API key will be created.`);let topModelsPromise=(agentFlags?.length?agentFlags.some(id=>getAgentById(id.toLowerCase())?.needsTopModels):!0)?fetchTopModels(client):Promise.resolve(null),selection=await resolveAgents({client,agentFlags,all,tokenPass:tokenPass2,canPrompt:canPrompt2,yes:!!yes,home});if("error"in selection)return machine&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:selection.reason,message:selection.error}),output_manager_default.error(selection.error),{exitCode:tokenPass2?2:1,outcome:"failed"};let{selected,guidance,unsupported}=selection;for(let note of guidance)printWarning(note);for(let id of Object.keys(overrides))if(!selected.some(a=>a.id===id))return failValidation(client,machine,AGENT_REASON.INVALID_ARGUMENTS,`--agent-config set for "${id}", which isn't selected. Add --agent ${id} (or --all).`);let agents=selected,gatewayModels;if(selected.some(a=>a.needsModelCatalogue))try{gatewayModels=await listModels(client)}catch(err){output_manager_default.debug(`Could not fetch the gateway model catalogue: ${err.message}`)}let agentWarnings=await collectAgentWarnings(selected,{home,overrides}),machineWarnings=agentWarnings.map(e=>({agent:e.agent.id,code:e.warning.code,message:formatWarningMessage(e.warning)})),consentSkipped=[],previewKey=providedKey??KEY_PLACEHOLDER;if(agentWarnings.length>0){let explicit=!!(agentFlags&&agentFlags.length>0||all);if(canPrompt2&&!yes&&!dryRun){let declined=await promptAgentConsent(client,agentWarnings);if(declined.size>0){agents=agents.filter(a=>!declined.has(a.id));for(let agent of selected)declined.has(agent.id)&&printStatus(`Skipped ${agent.displayName} \u2014 its configuration was left untouched.`);if(agents.length===0)return printStatus("Nothing to configure. No files were changed."),{exitCode:0,outcome:"canceled"}}}else if(explicit||canPrompt2&&!yes&&dryRun){for(let{warning:warning2}of agentWarnings)printAgentWarning(warning2);output_manager_default.print(`
103
+ `)}var DEFAULT_LEADERBOARD_BASE="https://vercel.com";var LEADERBOARD_MODALITIES=["all","text","image","video"],LEADERBOARD_METRICS=["requests","tokens","spend","imageCount","videoCount"];function leaderboardBase(){return process.env.VERCEL_LEADERBOARD_URL??DEFAULT_LEADERBOARD_BASE}function buildUrl(query,format){let params=new URLSearchParams;return params.set("dataset",query.dataset),query.modality&&params.set("modality",query.modality),params.set("format",format),`${leaderboardBase()}/api/ai/leaderboard-export?${params.toString()}`}async function fetchLeaderboard(client,query,opts={}){return client.fetch(buildUrl(query,"json"),{method:"GET",teamOptional:!0,...opts})}async function fetchLeaderboardCsv(client,query){return(await client.fetch(buildUrl(query,"csv"),{method:"GET",teamOptional:!0,json:!1})).text()}function latestDate(rows){let max;for(let row of rows)(max===void 0||row.date>max)&&(max=row.date);return max}function availableDates(rows){return Array.from(new Set(rows.map(r=>r.date))).sort((a,b)=>a<b?1:a>b?-1:0)}function filterTimeseries(rows,options){let day=options.date??latestDate(rows);return rows.filter(row=>row.metric===options.metric&&row.date===day).sort((a,b)=>b.share_percent-a.share_percent)}var TOP_MODELS_LIMIT=10,TOP_MODELS_METRIC="spend",TOP_MODELS_MODALITY="text",MIN_USABLE_MODELS=3,DEFAULT_TIMEOUT_MS=2e3,OTHER_ROW_NAME="other";function normalizeName(name){return name.trim().toLowerCase()}function resolveTopModels(rows,catalog,limit=TOP_MODELS_LIMIT){let idByName=new Map;for(let model of catalog){if(!model.name||!model.id)continue;let key=normalizeName(model.name);idByName.has(key)?idByName.get(key)!==model.id&&idByName.set(key,null):idByName.set(key,model.id)}let nameById=new Map(catalog.map(model=>[model.id,model.name])),ranked=filterTimeseries(rows,{metric:TOP_MODELS_METRIC}),resolved=[],seen=new Set;for(let row of ranked){if(resolved.length>=limit)break;if(normalizeName(row.name)===OTHER_ROW_NAME)continue;let id=row.slug??idByName.get(normalizeName(row.name))??void 0;!id||seen.has(id)||(seen.add(id),resolved.push({id,name:nameById.get(id)??row.name}))}return resolved}function withTimeout(run2,ms2){let controller=new AbortController;return new Promise((resolvePromise,reject)=>{let timer=setTimeout(()=>{controller.abort(),reject(new Error(`timed out after ${ms2}ms`))},ms2);timer.unref?.(),run2(controller.signal).then(resolvePromise,reject).finally(()=>clearTimeout(timer))})}async function fetchTopModels(client,opts={}){let{limit=TOP_MODELS_LIMIT,timeoutMs=DEFAULT_TIMEOUT_MS}=opts;try{let fetchOpts={retry:{retries:0},bailOn429:!0},[leaderboard2,catalog]=await withTimeout(signal=>Promise.all([fetchLeaderboard(client,{dataset:"models",modality:TOP_MODELS_MODALITY},{signal,...fetchOpts}),listModels(client,{signal,...fetchOpts})]),timeoutMs),models3=resolveTopModels(leaderboard2.rows??[],catalog,limit);return models3.length<MIN_USABLE_MODELS?(output_manager_default.debug(`Leaderboard returned only ${models3.length} usable models; using the built-in list.`),null):models3}catch(err){return output_manager_default.debug(`Could not fetch the model leaderboard, using the built-in list: ${err.message}`),null}}var AiGatewayCodingAgentsSetupTelemetryClient=class extends TelemetryClient{trackCliOptionAgent(agents){if(agents&&agents.length)for(let agent of agents)this.trackCliOption({option:"agent",value:agent})}trackCliFlagAll(all){all&&this.trackCliFlag("all")}trackCliFlagTokenPass(tokenPass2){tokenPass2&&this.trackCliFlag("token-pass")}trackCliOptionKey(key){key&&this.trackCliOption({option:"key",value:this.redactedValue})}trackCliOptionAmount(amount){amount!==void 0&&this.trackCliOption({option:"amount",value:this.redactedValue})}trackCliOptionBudget(budget){budget!==void 0&&this.trackCliOption({option:"budget",value:this.redactedValue})}trackCliOptionRefreshPeriod(refreshPeriod){refreshPeriod&&this.trackCliOption({option:"refresh-period",value:refreshPeriod})}trackCliFlagIncludeByok(includeByok){includeByok&&this.trackCliFlag("include-byok")}trackCliOptionExpiration(expiration){expiration&&this.trackCliOption({option:"expiration",value:expiration})}trackCliOptionName(name){name&&this.trackCliOption({option:"name",value:this.redactedValue})}trackCliFlagReconfigure(reconfigure){reconfigure&&this.trackCliFlag("reconfigure")}trackCliFlagDryRun(dryRun){dryRun&&this.trackCliFlag("dry-run")}trackCliFlagNoBackup(noBackup){noBackup&&this.trackCliFlag("no-backup")}trackCliFlagNoSessionMigration(noSessionMigration){noSessionMigration&&this.trackCliFlag("no-session-migration")}trackCliFlagNoKeychain(noKeychain){noKeychain&&this.trackCliFlag("no-keychain")}trackCliOptionAgentConfig(agentConfig){agentConfig&&agentConfig.length&&this.trackCliOption({option:"agent-config",value:this.redactedValue})}trackCliOptionShellRc(shellRc){shellRc&&this.trackCliOption({option:"shell-rc",value:this.redactedValue})}trackCliOptionApply(apply){apply&&this.trackCliOption({option:"apply",value:apply})}trackCliOptionBaseUrl(baseUrl){baseUrl&&this.trackCliOption({option:"base-url",value:this.redactedValue})}trackCliFlagYes(yes){yes&&this.trackCliFlag("yes")}};async function codingAgentsSetup(client,argv){return(await setupCodingAgents(client,argv)).exitCode}async function setupCodingAgents(client,argv){let telemetry=new AiGatewayCodingAgentsSetupTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(setupSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),{exitCode:2,outcome:"failed"}}let{flags:opts}=parsedArgs,agentFlags=opts["--agent"],all=opts["--all"],providedKey=opts["--key"],tokenPass2=opts["--token-pass"];if(tokenPass2&&parsedArgs.args.length>0){let message="Token Pass setup does not accept positional arguments. Run `vercel token-pass --help` for usage.";return outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:AGENT_REASON.INVALID_ARGUMENTS,message},2),output_manager_default.error(message),{exitCode:2,outcome:"failed"}}let amount=getRenamedOption(opts,"--amount","--budget");if("error"in amount)return reportRenamedOptionError(client,amount.error),{exitCode:2,outcome:"failed"};let budget=amount.value,refreshPeriod=opts["--refresh-period"],includeByok=opts["--include-byok"],expiration=opts["--expiration"],name=opts["--name"],reconfigure=!!(opts["--reconfigure"]||tokenPass2&&!providedKey),dryRun=opts["--dry-run"],noBackup=opts["--no-backup"],noSessionMigration=opts["--no-session-migration"],noKeychain=opts["--no-keychain"],agentConfig=opts["--agent-config"],shellRcOverride=opts["--shell-rc"],applyMode=opts["--apply"],baseUrl=opts["--base-url"],yes=opts["--yes"];telemetry.trackCliOptionAgent(agentFlags),telemetry.trackCliFlagAll(all),telemetry.trackCliOptionKey(providedKey),telemetry.trackCliFlagTokenPass(tokenPass2),telemetry.trackCliOptionAmount(opts["--amount"]),telemetry.trackCliOptionBudget(opts["--budget"]),telemetry.trackCliOptionRefreshPeriod(refreshPeriod),telemetry.trackCliFlagIncludeByok(includeByok),telemetry.trackCliOptionExpiration(expiration),telemetry.trackCliOptionName(name),telemetry.trackCliFlagReconfigure(opts["--reconfigure"]),telemetry.trackCliFlagDryRun(dryRun),telemetry.trackCliFlagNoBackup(noBackup),telemetry.trackCliFlagNoSessionMigration(noSessionMigration),telemetry.trackCliFlagNoKeychain(noKeychain),telemetry.trackCliOptionAgentConfig(agentConfig),telemetry.trackCliOptionShellRc(shellRcOverride),telemetry.trackCliOptionApply(applyMode),telemetry.trackCliOptionBaseUrl(baseUrl),telemetry.trackCliFlagYes(yes);let machine=shouldEmitNonInteractiveCommandError(client),canPrompt2=!!client.stdin.isTTY&&!machine,home=homedir(),wantKeychain=!noKeychain&&isKeychainAvailable();if(budget!==void 0&&(!Number.isFinite(budget)||budget<1))return failValidation(client,machine,AGENT_REASON.INVALID_BUDGET,"Budget must be a positive number in dollars (minimum 1).");if(refreshPeriod&&!isValidRefreshPeriod(refreshPeriod))return failValidation(client,machine,AGENT_REASON.INVALID_REFRESH_PERIOD,`Invalid refresh period "${refreshPeriod}". Must be one of: ${VALID_REFRESH_PERIODS.join(", ")}.`);if(expiration&&!isValidExpiry(expiration))return failValidation(client,machine,AGENT_REASON.INVALID_EXPIRATION,`Invalid expiration "${expiration}". Must be one of: ${VALID_EXPIRY_VALUES.join(", ")}.`);if(applyMode!==void 0&&applyMode!=="edit"&&applyMode!=="prompt")return failValidation(client,machine,AGENT_REASON.INVALID_ARGUMENTS,`Invalid --apply "${applyMode}". Must be "edit" or "prompt".`);if(baseUrl!==void 0&&!isValidBaseUrl(baseUrl))return failValidation(client,machine,AGENT_REASON.INVALID_ARGUMENTS,`Invalid --base-url "${baseUrl}". Must be an http(s) URL.`);let flagExpiresAt=expiration&&expiration!=="none"?presetToExpiresAt(expiration):void 0;tokenPass2&&providedKey&&printWarning("Using an existing key; make sure it was created with --token-pass or Token Pass models will not use your pass.");let overrides={};for(let pair of agentConfig??[]){let eq=pair.indexOf("="),id=eq>0?pair.slice(0,eq).trim().toLowerCase():"",path=eq>0?pair.slice(eq+1).trim():"";if(!id||!path)return failValidation(client,machine,AGENT_REASON.INVALID_ARGUMENTS,`Invalid --agent-config "${pair}". Use <agent>=<path>, e.g. claude-code=/path/settings.json.`);if(!getAgentById(id))return failValidation(client,machine,AGENT_REASON.INVALID_ARGUMENTS,`Unknown agent "${id}" in --agent-config.`);overrides[id]=resolve2(path)}dryRun&&!machine&&printStatus(`${import_chalk23.default.bold("Dry run")}: previewing changes only. No files will be written and no API key will be created.`);let topModelsPromise=(agentFlags?.length?agentFlags.some(id=>getAgentById(id.toLowerCase())?.needsTopModels):!0)?fetchTopModels(client):Promise.resolve(null),selection=await resolveAgents({client,agentFlags,all,tokenPass:tokenPass2,canPrompt:canPrompt2,yes:!!yes,home});if("error"in selection)return machine&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason:selection.reason,message:selection.error}),output_manager_default.error(selection.error),{exitCode:tokenPass2?2:1,outcome:"failed"};let{selected,guidance,unsupported}=selection;for(let note of guidance)printWarning(note);for(let id of Object.keys(overrides))if(!selected.some(a=>a.id===id))return failValidation(client,machine,AGENT_REASON.INVALID_ARGUMENTS,`--agent-config set for "${id}", which isn't selected. Add --agent ${id} (or --all).`);let agents=selected,gatewayModels;if(selected.some(a=>a.needsModelCatalogue))try{gatewayModels=await listModels(client)}catch(err){output_manager_default.debug(`Could not fetch the gateway model catalogue: ${err.message}`)}let agentWarnings=await collectAgentWarnings(selected,{home,overrides}),machineWarnings=agentWarnings.map(e=>({agent:e.agent.id,code:e.warning.code,message:formatWarningMessage(e.warning)})),consentSkipped=[],previewKey=providedKey??KEY_PLACEHOLDER;if(agentWarnings.length>0){let explicit=!!(agentFlags&&agentFlags.length>0||all);if(canPrompt2&&!yes&&!dryRun){let declined=await promptAgentConsent(client,agentWarnings);if(declined.size>0){agents=agents.filter(a=>!declined.has(a.id));for(let agent of selected)declined.has(agent.id)&&printStatus(`Skipped ${agent.displayName} \u2014 its configuration was left untouched.`);if(agents.length===0)return printStatus("Nothing to configure. No files were changed."),{exitCode:0,outcome:"canceled"}}}else if(explicit||canPrompt2&&!yes&&dryRun){for(let{warning:warning2}of agentWarnings)printAgentWarning(warning2);output_manager_default.print(`
104
104
  `)}else{for(let[agent,warnings]of groupWarningsByAgent(agentWarnings)){let message=`${warnings.map(formatWarningMessage).join(" ")} Pass --agent ${agent.id} to configure it anyway.`;consentSkipped.push({target:agent.id,reason:AGENT_REASON.REQUIRES_CONSENT,message}),printWarning(message)}if(agents=agents.filter(a=>!consentSkipped.some(s=>s.target===a.id)),agents.length===0&&!dryRun)return failConsent(client,machine,machineWarnings,consentSkipped)}}let sessionMigrations=[];if(!noSessionMigration){try{sessionMigrations=await planSessionMigrations(agents,{home})}catch(error){return failValidation(client,machine,"session_migration_failed",`${error instanceof Error?error.message:String(error)}. No configuration was changed. Pass --no-session-migration to leave existing sessions untouched and continue.`)}if(sessionMigrations.length>0&&canPrompt2&&!yes&&!dryRun){let count2=sessionMigrations.reduce((total,migration)=>total+migration.itemCount,0),agentNames=[...new Set(sessionMigrations.map(migration=>migration.agent))].join(" and ");await client.input.confirm(count2===1?`Copy your existing ${agentNames} Desktop session so it stays visible after switching to the AI Gateway? The original will be left unchanged.`:`Copy your ${count2} existing ${agentNames} Desktop sessions so they stay visible after switching to the AI Gateway? The originals will be left unchanged.`,!0)||(sessionMigrations=[],printStatus(`Skipped ${agentNames} Desktop session migration. Your existing sessions were left unchanged.`))}}let willCreate=!providedKey,unrecoverableKey=!1,existingKey=providedKey,keyName=name,keyBudget=budget,keyRefresh=refreshPeriod,keyExpiresAt=flagExpiresAt,topModels=await topModelsPromise??void 0,preflightPlan=await buildSetupPlan(agents,{apiKey:previewKey,tokenPass:tokenPass2,home,useKeychain:wantKeychain,overrides,shellRcOverride,baseUrlOverride:baseUrl,topModels,gatewayModels},sessionMigrations),preflightSessionOnly=!providedKey&&!reconfigure&&preflightPlan.changes.every(change=>change.status==="unchanged")&&preflightPlan.migrations.length>0;if(applyMode==="prompt"&&!wantKeychain&&!preflightSessionOnly)return failValidation(client,machine,AGENT_REASON.INVALID_ARGUMENTS,"The `--apply prompt` mode needs the macOS Keychain so the prompt never contains your plaintext key. Run on macOS without --no-keychain, or use `--apply edit`.");if(willCreate&&!preflightSessionOnly&&agents.length>0&&(!dryRun||canPrompt2)){let promptCreate=canPrompt2&&!yes,wired=await configsPointAtGateway(agents,{apiKey:KEY_PLACEHOLDER,home,overrides,shellRcOverride,baseUrlOverride:baseUrl});if(promptCreate&&!tokenPass2){let pasted=await promptExistingKey(client,wired?"existing":"create");pasted&&(existingKey=pasted,previewKey=pasted,willCreate=!1)}else if(wired&&!reconfigure){let stored=await recoverStoredKey({home,shellRcOverride});stored?(existingKey=stored,previewKey=stored,willCreate=!1):machine||(unrecoverableKey=!0)}if(willCreate&&!unrecoverableKey){if(await ensureTeam2(client,{machine,canPrompt:canPrompt2,yes:!!yes,tokenPass:tokenPass2}))return{exitCode:1,outcome:"failed"};if(promptCreate&&keyName===void 0&&(keyName=await promptKeyName(client,tokenPass2)),promptCreate){if(keyBudget===void 0&&keyRefresh===void 0){let quota=await promptQuota(client);keyBudget=quota.budget,keyRefresh=quota.refreshPeriod}keyExpiresAt===void 0&&!expiration&&(keyExpiresAt=await promptExpiry(client))}}}let useKeychain=wantKeychain;if(!preflightSessionOnly&&wantKeychain&&canPrompt2&&!yes&&(useKeychain=await promptKeychain(client)),canPrompt2&&!yes){let missing=agents.filter(a=>!overrides[a.id]&&!existsSync2(dirname5(a.configPath({apiKey:"",home}))));if(missing.length>0&&await client.input.confirm("Some agents weren't found at their default locations. Set custom config paths?",!1))for(let agent of missing){let resolved=agent.configPath({apiKey:"",home}),picked=(await client.input.text({message:`${agent.displayName} config path?`,default:resolved})).trim();picked&&resolve2(picked)!==resolved&&(overrides[agent.id]=resolve2(picked))}}let previewPlan=await buildSetupPlan(agents,{apiKey:previewKey,tokenPass:tokenPass2,home,useKeychain,overrides,shellRcOverride,baseUrlOverride:baseUrl,topModels,gatewayModels},sessionMigrations);if(baseUrl&&!machine){let target=baseUrl.trim();previewPlan.changes.some(c=>c.next?.includes(target))||previewPlan.envExports.some(e=>e.value.includes(target))||previewPlan.notes.some(n=>n.notes.some(l=>l.includes(target)))||printWarning("--base-url has no effect for the selected agents.")}let changed=previewPlan.changes.filter(c=>c.status==="create"||c.status==="update"),errored=previewPlan.changes.filter(c=>c.status==="error"),noConfigChanges=changed.length===0&&errored.length===0,alreadyConfigured=noConfigChanges&&previewPlan.migrations.length===0,sessionOnly=!existingKey&&!reconfigure&&noConfigChanges&&previewPlan.migrations.length>0,keyOptions=resolveKeyOptions({name:keyName,tokenPass:tokenPass2,budget:keyBudget,refreshPeriod:keyRefresh,includeByok,expiresAt:keyExpiresAt});if(machine)return runMachine({client,selected:agents,tokenPass:tokenPass2,unsupported,warnings:machineWarnings,consentSkipped,previewPlan,dryRun:!!dryRun,backup:!noBackup,keySource:existingKey?{key:existingKey,created:!1}:null,createKey:()=>createKey(client,keyOptions),useKeychain,overrides,shellRcOverride,baseUrlOverride:baseUrl,topModels,home,alreadyConfigured,gatewayModels,reconfigure:!!reconfigure&&agents.length>0,promptMode:applyMode==="prompt"});if(unrecoverableKey&&changed.length>0)return printStatus("The selected agents already use the AI Gateway and the stored key could not be read, so nothing was written. Re-run with `--key <key>` to refresh them, or `--reconfigure` to create a new key."),{exitCode:0,outcome:"skipped"};if(alreadyConfigured){let skippedSome=agents.length<selected.length;if(dryRun&&agents.length===0&&consentSkipped.length>0)return printStatus(`All selected agents need explicit consent (see the warnings above) \u2014 a real run would fail. Pass ${consentSkipped.map(s=>`--agent ${s.target}`).join(" ")} (or --all) to consent. No files would be changed.`),{exitCode:0,outcome:"dry_run"};if(!dryRun&&useKeychain&&existingKey)return applyMode!=="prompt"&&await enforcePlanModes(previewPlan),storeKeyInKeychain(existingKey)?(printStatus(agents.length===0?"The existing configuration already uses the AI Gateway; updated the macOS Keychain with the provided key.":`${skippedSome?"The remaining":"All selected"} agents are already configured; updated the macOS Keychain with the provided key.`),printKey(existingKey,{keychain:!0}),{exitCode:0,outcome:"configured"}):(output_manager_default.error("Failed to update the key in the macOS Keychain. Re-run with --no-keychain to write it to the config files instead."),{exitCode:1,outcome:"failed"});let doReconfigure=!!reconfigure&&agents.length>0;if(!doReconfigure&&agents.length>0&&canPrompt2&&!yes&&!dryRun&&(doReconfigure=await client.input.confirm("These agents are already configured for the AI Gateway. Reconfigure them?",!1)),!doReconfigure)return!dryRun&&applyMode!=="prompt"&&await enforcePlanModes(previewPlan),printStatus(agents.length===0?"Every selected agent needs explicit consent (see the warnings above); the existing configuration already uses the AI Gateway.":`${skippedSome?"The remaining":"All selected"} agents are already configured for the AI Gateway.`),existingKey&&printKey(existingKey),{exitCode:0,outcome:"already_configured"}}if(printResolvedState({selected:agents,willCreate,name:keyOptions.name,budget:keyBudget,refreshPeriod:keyRefresh,expiresAt:keyExpiresAt,keychain:wantKeychain?useKeychain:void 0,preserveKey:sessionOnly}),printPlan(previewPlan,previewKey,{backup:!noBackup}),dryRun)return printStatus(`Dry run: no files written. Re-run without ${import_chalk23.default.bold("--dry-run")} to apply.`),{exitCode:0,outcome:"dry_run"};let agentConfigChanged=changed.filter(c=>c.format!=="shell");if(agentConfigChanged.length===0&&errored.length>0&&previewPlan.migrations.length===0)return output_manager_default.error("Couldn't write any agent configurations. Fix the files above, then re-run."),{exitCode:1,outcome:"failed"};let applyAction=applyMode==="prompt"?"copy":"apply";if(applyMode===void 0&&(changed.length>0||previewPlan.migrations.length>0)&&canPrompt2&&!yes){if(useKeychain){let choice=await client.input.select({message:"Apply these changes?",choices:[{name:"Yes, write the files now",value:"apply"},{name:"Copy a prompt for my agent",value:"copy"},{name:"Cancel",value:"cancel"}],default:"apply"});if(choice==="cancel")return printStatus("Aborted. No files were changed."),{exitCode:0,outcome:"canceled"};applyAction=choice}else if(!await client.input.confirm("Apply these changes?",!0))return printStatus("Aborted. No files were changed."),{exitCode:0,outcome:"canceled"}}if(sessionOnly){if(applyAction==="copy"&&previewPlan.migrations.length>0){let promptText=buildAgentPrompt(previewPlan,KEY_PLACEHOLDER);return emitAgentPrompt(client,promptText,applyMode==="prompt","migration"),{exitCode:0,outcome:"agent_prompt"}}dryRun||await enforcePlanModes(previewPlan);let migrated2=await applySessionMigrations(previewPlan);return printSessionMigrationReceipt(migrated2,!0),migrated2.errors.length>0?{exitCode:1,outcome:"failed"}:{exitCode:0,outcome:"configured"}}if(applyAction==="copy"&&!useKeychain)return failValidation(client,machine,AGENT_REASON.INVALID_ARGUMENTS,"The `--apply prompt` mode needs the macOS Keychain so the prompt never contains your plaintext key. Run on macOS without --no-keychain, or use `--apply edit`.");let migrated=applyAction==="apply"?await applySessionMigrations(previewPlan):{results:[],errors:[]};if(migrated.errors.length>0)return printSessionMigrationReceipt(migrated),output_manager_default.error("Session migration did not complete, so no agent configuration was changed. Rerun the command to retry, or pass --no-session-migration to set up without copying sessions."),{exitCode:1,outcome:"failed"};if(migrated.results.length>0&&printSessionMigrationReceipt(migrated,!0),applyAction==="apply"&&agentConfigChanged.length===0&&errored.length>0)return output_manager_default.error("Copied the eligible sessions, but couldn't write any agent configurations. Fix the files above, then re-run."),{exitCode:1,outcome:"failed"};let keySource;try{keySource=existingKey?{key:existingKey,created:!1}:{key:await createKey(client,keyOptions),created:!0}}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),{exitCode:1,outcome:"failed"};throw err}if(useKeychain&&!storeKeyInKeychain(keySource.key)){if(applyAction==="copy")return output_manager_default.error("Failed to store the key in the macOS Keychain, so a prompt would expose your plaintext key. Re-run and choose Apply, or pass --no-keychain to write the key to the config files."),{exitCode:1,outcome:"failed"};printWarning("Failed to store the key in the macOS Keychain; writing it to the config files instead."),useKeychain=!1}let applyPlanResult=await buildSetupPlan(agents,{apiKey:keySource.key,tokenPass:tokenPass2,home,useKeychain,overrides,shellRcOverride,baseUrlOverride:baseUrl,topModels,gatewayModels},sessionMigrations);if(applyAction==="copy"){let promptText=buildAgentPrompt(applyPlanResult,keySource.key);return emitAgentPrompt(client,promptText,applyMode==="prompt","setup"),printKey(keySource.key,{keychain:!0,created:keySource.created}),{exitCode:0,outcome:"agent_prompt"}}let results=await applyPlan(applyPlanResult,{backup:!noBackup});if(results.length===0&&keySource.created&&(output_manager_default.print(`
105
105
  `),printAlignedLabel("Rotated","AI Gateway API key"),printKeyRow(keySource.key,{keychain:useKeychain,created:keySource.created}),output_manager_default.print(import_chalk23.default.dim(` No config files changed.
106
106
  `))),results.length>0){let failed=new Set(errored.flatMap(c=>c.owners)),connected=selected.map(a=>a.displayName).filter(name2=>!failed.has(name2));output_manager_default.print(`
@@ -108,16 +108,16 @@ ${sections.join(`
108
108
  `),migrated.errors.length>0?{exitCode:1,outcome:"failed"}:{exitCode:0,outcome:"configured"}}function printSessionMigrationReceipt(migration,gutter=!1){gutter&&output_manager_default.print(`
109
109
  `);for(let result of migration.results)printAlignedLabel("Sessions",`Copied ${result.copied} ${result.copied===1?"session":"sessions"} for ${result.agent}; originals unchanged`,gutter?{gutter:"\u2713"}:void 0),gutter=!1;for(let error of migration.errors)printWarning(`Could not migrate ${error.agent} sessions: ${error.message}. Original sessions were left unchanged.`)}function emitAgentPrompt(client,prompt,writeToStdout,subject){let copied=copyToClipboard(prompt);writeToStdout?(printStatus(`Generated the ${subject} prompt${copied?" (also copied to clipboard)":""}.`),client.stdout.write(`${prompt}
110
110
  `)):copied?printStatus(`Prompt copied. Paste it into your coding agent for the ${subject}.`):(printStatus("Could not access the clipboard. Prompt printed below:"),client.stdout.write(`${prompt}
111
- `))}function buildConsentCommand(argv,consentFlags){let args=stripSensitiveAuthArgs(argv.slice(2)),redacted=[];for(let i=0;i<args.length;i++){let arg=args[i];if(arg==="--key"){redacted.push(arg,"<key>"),i+1<args.length&&!args[i+1].startsWith("-")&&i++;continue}if(arg.startsWith("--key=")){redacted.push("--key=<key>");continue}redacted.push(arg)}return`${packageName} ${redacted.join(" ")} ${consentFlags}`.trim()}function failConsent(client,machine,warnings,skipped){let consentFlags=skipped.map(s=>`--agent ${s.target}`).join(" "),message=`All selected agents need explicit consent to configure. Pass ${consentFlags} (or --all) to consent, or run interactively without --yes.`;return machine?client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:AGENT_REASON.REQUIRES_CONSENT,message,warnings,skipped,next:[{command:buildConsentCommand(client.argv,consentFlags)}]},null,2)}
111
+ `))}function buildConsentCommand(argv,consentFlags){let args=stripSensitiveAuthArgs(argv.slice(2)),redacted=[];for(let i=0;i<args.length;i++){let arg=args[i];if(arg==="--key"){redacted.push(arg,"<key>"),i+1<args.length&&!args[i+1].startsWith("-")&&i++;continue}if(arg.startsWith("--key=")){redacted.push("--key=<key>");continue}redacted.push(arg)}return`${packageName} ${redacted.join(" ")} ${consentFlags}`.trim()}function failConsent(client,machine,warnings,skipped){let consentFlags=skipped.map(s=>`--agent ${s.target}`).join(" "),message=`All selected agents need explicit consent to configure. Pass ${consentFlags} (or --all) to consent, or run interactively without --yes.`;return machine?client.stdout.write(`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:AGENT_REASON.REQUIRES_CONSENT,message,warnings,skipped,next:[{command:buildConsentCommand(renameOptionInArgs(client.argv,"--budget","--amount"),consentFlags)}]},null,2)}
112
112
  `):output_manager_default.error(message),{exitCode:1,outcome:"failed"}}function isValidBaseUrl(value){try{let{protocol}=new URL(value);return protocol==="http:"||protocol==="https:"}catch{return!1}}function failValidation(client,machine,reason,message){return machine&&outputAgentError(client,{status:AGENT_STATUS.ERROR,reason,message}),output_manager_default.error(message),{exitCode:1,outcome:"failed"}}var AiGatewayCodingAgentsTelemetryClient=class extends TelemetryClient{trackCliSubcommandSetup(actual){this.trackCliSubcommand({subcommand:"setup",value:actual})}};var COMMAND_CONFIG6={setup:getCommandAliases(setupSubcommand)};async function codingAgents(client){let telemetry=new AiGatewayCodingAgentsTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(codingAgentsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let subArgs=parsedArgs.args.slice(2),{subcommand,args,subcommandOriginal}=getSubcommand(subArgs,COMMAND_CONFIG6),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("ai-gateway coding-agents",subcommand),output_manager_default.print(help(codingAgentsSubcommand,{columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{parent:codingAgentsSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"setup":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway coding-agents",subcommandOriginal),printHelp(setupSubcommand),0):(telemetry.trackCliSubcommandSetup(subcommandOriginal),codingAgentsSetup(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG6)),output_manager_default.print(help(codingAgentsSubcommand,{columns:client.stderr.columns})),2}}var import_chalk24=__toESM(require_source(),1);var AiGatewayModelsListTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}trackCliFlagVirtual(virtual){virtual&&this.trackCliFlag("virtual")}trackCliFlagNoVirtual(noVirtual){noVirtual&&this.trackCliFlag("no-virtual")}};async function list6(client,argv){let telemetry=new AiGatewayModelsListTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(modelsListSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts}=parsedArgs;telemetry.trackCliOptionFormat(opts["--format"]),telemetry.trackCliFlagVirtual(opts["--virtual"]),telemetry.trackCliFlagNoVirtual(opts["--no-virtual"]);let onlyVirtual=!!opts["--virtual"],hideVirtual=!!opts["--no-virtual"];if(onlyVirtual&&hideVirtual)return output_manager_default.error("Pass only one of --virtual and --no-virtual."),2;let formatResult=validateJsonOutput(opts);return formatResult.valid?renderResource(client,{asJson:formatResult.jsonOutput,spinnerText:"Fetching models",fetch:()=>fetchModels(client,{onlyVirtual,hideVirtual}),toJSON:models3=>({models:models3}),isEmpty:models3=>models3.length===0,emptyMessage:onlyVirtual?"No virtual models found.":"No models found.",header:()=>"Models",renderTable:printModelsTable}):(output_manager_default.error(formatResult.error),2)}async function fetchModels(client,filter){let fetchVirtual=(filter.hideVirtual?void 0:await client.resolveCurrentTeam({ask:filter.onlyVirtual}))&&!filter.hideVirtual?filter.onlyVirtual?listVirtualModels(client):listVirtualModels(client).catch(()=>[]):Promise.resolve([]),[catalog,virtualModels2]=await Promise.all([filter.onlyVirtual?Promise.resolve([]):listModels(client),fetchVirtual]);return[...filter.hideVirtual?catalog.filter(model=>!model.id.startsWith("vmc/")):catalog.filter(model=>!virtualModels2.some(vmc=>`vmc/${vmc.virtualModelSlug}`===model.id)),...virtualModels2.map(vmc=>({id:`vmc/${vmc.virtualModelSlug}`,object:"model",owned_by:"you",name:vmc.displayName??vmc.virtualModelSlug,type:"virtual"}))]}function printModelsTable(models3){return`${table([["id","name","owner","type"].map(header=>import_chalk24.default.gray(header)),...models3.map(model=>[model.id,model.name??import_chalk24.default.gray("\u2013"),model.owned_by??import_chalk24.default.gray("\u2013"),model.type??import_chalk24.default.gray("\u2013")])],{align:["l","l","l","l"],hsep:4}).replace(/^/gm," ")}
113
113
 
114
114
  `}var import_chalk25=__toESM(require_source(),1);var AiGatewayModelsEndpointsTelemetryClient=class extends TelemetryClient{trackCliArgumentModel(model){model&&this.trackCliArgument({arg:"model",value:this.redactedValue})}trackCliOptionFormat(format){format&&this.trackCliOption({option:"format",value:format})}trackCliFlagJson(json){json&&this.trackCliFlag("json")}};async function endpoints(client,argv){let telemetry=new AiGatewayModelsEndpointsTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(modelsEndpointsSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{flags:opts,args}=parsedArgs,model=args[0];if(telemetry.trackCliArgumentModel(model),telemetry.trackCliOptionFormat(opts["--format"]),!model)return output_manager_default.error(`Specify a model. Run ${getCommandName("ai-gateway models ls")} to see available models.`),2;let formatResult=validateJsonOutput(opts);return formatResult.valid?renderResource(client,{asJson:formatResult.jsonOutput,spinnerText:`Fetching endpoints for ${model}`,fetch:()=>listModelEndpoints(client,model),toJSON:data=>data,isEmpty:data=>(data?.endpoints??[]).length===0,emptyMessage:`No endpoints found for ${model}.`,header:data=>`Endpoints for ${data.id}`,renderTable:data=>printEndpointsTable(data.endpoints??[])}):(output_manager_default.error(formatResult.error),2)}var dash=()=>import_chalk25.default.gray("\u2013"),positive=value=>value!=null&&Number(value)>0,count=value=>value!=null&&value>0?String(value):dash();function inputPrice(p){if(positive(p?.prompt))return p?.prompt;if(positive(p?.image))return`${p?.image}/img`;let perSec=p?.video_duration_pricing?.map(v=>v.cost_per_second).filter(positive).sort((a,b)=>Number(a)-Number(b))[0];return perSec?`${perSec}/s`:positive(p?.speech_input_character_cost)?`${p?.speech_input_character_cost}/char`:positive(p?.request)?`${p?.request}/req`:dash()}function outputPrice(p){return positive(p?.completion)?p?.completion:positive(p?.image_output)?`${p?.image_output}/img`:dash()}function printEndpointsTable(list7){return`${table([["provider","context","input","output","p50 ttft","uptime"].map(header=>import_chalk25.default.gray(header)),...list7.map(e=>[e.provider_name,count(e.context_length),inputPrice(e.pricing),outputPrice(e.pricing),e.latency_last_1h?.p50!=null?`${Math.round(e.latency_last_1h.p50)}ms`:dash(),e.uptime_last_1h!=null?`${e.uptime_last_1h.toFixed(1)}%`:dash()])],{align:["l","r","r","r","r","r"],hsep:3}).replace(/^/gm," ")}
115
115
 
116
- `}var AiGatewayModelsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandEndpoints(actual){this.trackCliSubcommand({subcommand:"endpoints",value:actual})}};var COMMAND_CONFIG7={list:getCommandAliases(modelsListSubcommand),endpoints:getCommandAliases(modelsEndpointsSubcommand)};async function models(client){let telemetry=new AiGatewayModelsTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(modelsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let subArgs=parsedArgs.args.slice(2),{subcommand,args,subcommandOriginal}=getSubcommand(subArgs,COMMAND_CONFIG7),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("ai-gateway models",subcommandOriginal),output_manager_default.print(help(modelsSubcommand,{columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{parent:modelsSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"list":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway models",subcommandOriginal),printHelp(modelsListSubcommand),0):(telemetry.trackCliSubcommandList(subcommandOriginal),list6(client,args));case"endpoints":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway models",subcommandOriginal),printHelp(modelsEndpointsSubcommand),0):(telemetry.trackCliSubcommandEndpoints(subcommandOriginal),endpoints(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG7)),output_manager_default.print(help(modelsSubcommand,{columns:client.stderr.columns})),2}}var import_chalk26=__toESM(require_source(),1);import{writeFile}from"node:fs/promises";var dash2=()=>import_chalk26.default.gray("\u2013");function resolveFormat(client,flags){let raw=flags["--format"],out=flags["--out"];if(raw!==void 0){let format=raw.toLowerCase();return format!=="table"&&format!=="json"&&format!=="csv"?{error:`Invalid format: "${raw}". Valid formats: table, json, csv`}:format==="table"&&out!==void 0?{error:"Cannot write the table view to a file. Use --format json or --format csv with --out."}:{format}}return out!==void 0?{format:"json"}:{format:!!client.stdout.isTTY&&!client.nonInteractive?"table":"json"}}function parseEnum(value,allowed,label){if(value===void 0)return{value:void 0};let normalized=value.toLowerCase(),match=allowed.find(member=>member.toLowerCase()===normalized);return match===void 0?{error:`Invalid ${label}: "${value}". Valid values: ${allowed.join(", ")}`}:{value:match}}async function fetchWithSpinner(fetch,spinnerText){output_manager_default.spinner(spinnerText);try{let data=await fetch();return output_manager_default.stopSpinner(),{data}}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),{exitCode:1};throw err}}async function writeToFile(client,out,content,label){let writeStamp=stamp_default();try{await writeFile(out,content)}catch(err){return output_manager_default.error(`Failed to write ${out}: ${err instanceof Error?err.message:String(err)}`),1}return output_manager_default.log(`Wrote ${label} to ${import_chalk26.default.bold(out)} ${writeStamp()}`),0}async function runTimeseriesLeaderboard(client,flags,telemetry,config){telemetry.trackCliOptionModality(flags["--modality"]),telemetry.trackCliOptionMetric(flags["--metric"]),telemetry.trackCliOptionDate(flags["--date"]),telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliOptionOut(flags["--out"]);let formatResult=resolveFormat(client,flags);if("error"in formatResult)return output_manager_default.error(formatResult.error),1;let{format}=formatResult,modalityResult=parseEnum(flags["--modality"],LEADERBOARD_MODALITIES,"modality");if("error"in modalityResult)return output_manager_default.error(modalityResult.error),1;let metricResult=parseEnum(flags["--metric"],LEADERBOARD_METRICS,"metric");if("error"in metricResult)return output_manager_default.error(metricResult.error),1;let modality=modalityResult.value,metric=metricResult.value;format==="table"&&canPrompt(client)&&(modality===void 0&&(modality=await client.input.select({message:"Modality",choices:LEADERBOARD_MODALITIES.map(value=>({name:value,value})),default:"all"})),metric===void 0&&(metric=await client.input.select({message:"Metric",choices:LEADERBOARD_METRICS.map(value=>({name:value,value})),default:"requests"})));let resolvedModality=modality??"all",resolvedMetric=metric??"requests";if(format==="csv"){let result2=await fetchWithSpinner(()=>fetchLeaderboardCsv(client,{dataset:config.dataset,modality:resolvedModality}),`Fetching ${config.label}`);return"exitCode"in result2?result2.exitCode:flags["--out"]!==void 0?writeToFile(client,flags["--out"],result2.data,config.label):(client.stdout.write(result2.data),0)}let result=await fetchWithSpinner(()=>fetchLeaderboard(client,{dataset:config.dataset,modality:resolvedModality}),`Fetching ${config.label}`);if("exitCode"in result)return result.exitCode;let data=result.data;if(format==="json"){let content=`${JSON.stringify(data,null,2)}
117
- `;return flags["--out"]!==void 0?writeToFile(client,flags["--out"],content,config.label):(client.stdout.write(content),0)}return renderTimeseriesTable(client,data,{metric:resolvedMetric,modality:resolvedModality,date:flags["--date"],entityLabel:config.entityLabel,label:config.label})}function renderTimeseriesTable(client,data,options){let rows=data.rows??[];if(options.date!==void 0&&!rows.some(r=>r.date===options.date)){let dates=availableDates(rows);return output_manager_default.error(`No data for ${options.date}.${dates.length?` Available dates: ${dates.slice(0,5).join(", ")}${dates.length>5?", \u2026":""}`:""}`),1}let filtered=filterTimeseries(rows,{metric:options.metric,date:options.date});if(filtered.length===0)return output_manager_default.log(`No ${options.label} data for ${options.metric}.`),0;let day=options.date??latestDate(rows);return output_manager_default.log(`${options.label} \xB7 ${import_chalk26.default.bold(options.metric)} \xB7 ${options.modality} \xB7 ${day}`),client.stdout.write(`${table([["#",options.entityLabel,"share"].map(header=>import_chalk26.default.gray(header)),...filtered.map((row,index)=>[String(index+1),row.name,`${row.share_percent.toFixed(2)}%`])],{align:["r","l","r"],hsep:3}).replace(/^/gm," ")}
118
- `),printLicense(),0}async function runRankedLeaderboard(client,flags,telemetry,config){telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliOptionOut(flags["--out"]);let formatResult=resolveFormat(client,flags);if("error"in formatResult)return output_manager_default.error(formatResult.error),1;let{format}=formatResult;if(format==="csv"){let result2=await fetchWithSpinner(()=>fetchLeaderboardCsv(client,{dataset:config.dataset}),`Fetching ${config.label}`);return"exitCode"in result2?result2.exitCode:flags["--out"]!==void 0?writeToFile(client,flags["--out"],result2.data,config.label):(client.stdout.write(result2.data),0)}let result=await fetchWithSpinner(()=>fetchLeaderboard(client,{dataset:config.dataset}),`Fetching ${config.label}`);if("exitCode"in result)return result.exitCode;let data=result.data;if(format==="json"){let content=`${JSON.stringify(data,null,2)}
119
- `;return flags["--out"]!==void 0?writeToFile(client,flags["--out"],content,config.label):(client.stdout.write(content),0)}return renderRankedTable(client,data,config.label)}function renderRankedTable(client,data,label){let rows=data.rows??[];if(rows.length===0)return output_manager_default.log(`No ${label} data.`),0;let lsStamp=stamp_default(),rankedBy=rows[0]?.ranked_by;return output_manager_default.log(`${label}${rankedBy?` \xB7 ${import_chalk26.default.bold(rankedBy)}`:""} ${lsStamp()}`),client.stdout.write(`${table([["#","name","description"].map(header=>import_chalk26.default.gray(header)),...rows.map(row=>[String(row.rank),row.name,row.description?row.description:dash2()])],{align:["r","l","l"],hsep:3}).replace(/^/gm," ")}
120
- `),printLicense(),0}function printLicense(){output_manager_default.log(import_chalk26.default.gray("Source: AI Gateway Leaderboard data, licensed under CC BY 4.0."))}async function runLeaderboardSubcommand(client,argv,subcommand,variant){let parsedArgs,flagsSpecification=getFlagsSpecification(subcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let flags=parsedArgs.flags;return variant.kind==="timeseries"?runTimeseriesLeaderboard(client,flags,variant.telemetry,{dataset:variant.dataset,entityLabel:variant.entityLabel,label:variant.label}):runRankedLeaderboard(client,flags,variant.telemetry,{dataset:variant.dataset,label:variant.label})}var AiGatewayLeaderboardModelsTelemetryClient=class extends TelemetryClient{trackCliOptionModality(value){value&&this.trackCliOption({option:"modality",value})}trackCliOptionMetric(value){value&&this.trackCliOption({option:"metric",value})}trackCliOptionDate(value){value&&this.trackCliOption({option:"date",value})}trackCliOptionFormat(value){value&&this.trackCliOption({option:"format",value})}trackCliOptionOut(value){value&&this.trackCliOption({option:"out",value:this.redactedValue})}};async function models2(client,argv){return runLeaderboardSubcommand(client,argv,leaderboardModelsSubcommand,{kind:"timeseries",telemetry:new AiGatewayLeaderboardModelsTelemetryClient({opts:{store:client.telemetryEventStore}}),dataset:"models",entityLabel:"model",label:"Top models"})}var AiGatewayLeaderboardLabsTelemetryClient=class extends TelemetryClient{trackCliOptionModality(value){value&&this.trackCliOption({option:"modality",value})}trackCliOptionMetric(value){value&&this.trackCliOption({option:"metric",value})}trackCliOptionDate(value){value&&this.trackCliOption({option:"date",value})}trackCliOptionFormat(value){value&&this.trackCliOption({option:"format",value})}trackCliOptionOut(value){value&&this.trackCliOption({option:"out",value:this.redactedValue})}};async function labs(client,argv){return runLeaderboardSubcommand(client,argv,leaderboardLabsSubcommand,{kind:"timeseries",telemetry:new AiGatewayLeaderboardLabsTelemetryClient({opts:{store:client.telemetryEventStore}}),dataset:"labs",entityLabel:"lab",label:"Top labs"})}var AiGatewayLeaderboardAppsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(value){value&&this.trackCliOption({option:"format",value})}trackCliOptionOut(value){value&&this.trackCliOption({option:"out",value:this.redactedValue})}};async function apps(client,argv){return runLeaderboardSubcommand(client,argv,leaderboardAppsSubcommand,{kind:"ranked",telemetry:new AiGatewayLeaderboardAppsTelemetryClient({opts:{store:client.telemetryEventStore}}),dataset:"apps",label:"Top apps"})}var AiGatewayLeaderboardProvidersTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(value){value&&this.trackCliOption({option:"format",value})}trackCliOptionOut(value){value&&this.trackCliOption({option:"out",value:this.redactedValue})}};async function providers(client,argv){return runLeaderboardSubcommand(client,argv,leaderboardProvidersSubcommand,{kind:"ranked",telemetry:new AiGatewayLeaderboardProvidersTelemetryClient({opts:{store:client.telemetryEventStore}}),dataset:"providers",label:"Top providers"})}var AiGatewayLeaderboardTelemetryClient=class extends TelemetryClient{trackCliSubcommandModels(actual){this.trackCliSubcommand({subcommand:"models",value:actual})}trackCliSubcommandLabs(actual){this.trackCliSubcommand({subcommand:"labs",value:actual})}trackCliSubcommandApps(actual){this.trackCliSubcommand({subcommand:"apps",value:actual})}trackCliSubcommandProviders(actual){this.trackCliSubcommand({subcommand:"providers",value:actual})}};var COMMAND_CONFIG8={models:getCommandAliases(leaderboardModelsSubcommand),labs:getCommandAliases(leaderboardLabsSubcommand),apps:getCommandAliases(leaderboardAppsSubcommand),providers:getCommandAliases(leaderboardProvidersSubcommand)};async function leaderboard(client){let telemetry=new AiGatewayLeaderboardTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(leaderboardSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let subArgs=parsedArgs.args.slice(2),{subcommand,args,subcommandOriginal}=getSubcommand(subArgs,COMMAND_CONFIG8),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),output_manager_default.print(help(leaderboardSubcommand,{columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{parent:leaderboardSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"models":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardModelsSubcommand),0):(telemetry.trackCliSubcommandModels(subcommandOriginal),models2(client,args));case"labs":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardLabsSubcommand),0):(telemetry.trackCliSubcommandLabs(subcommandOriginal),labs(client,args));case"apps":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardAppsSubcommand),0):(telemetry.trackCliSubcommandApps(subcommandOriginal),apps(client,args));case"providers":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardProvidersSubcommand),0):(telemetry.trackCliSubcommandProviders(subcommandOriginal),providers(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG8)),output_manager_default.print(help(leaderboardSubcommand,{columns:client.stderr.columns})),2}}var AiGatewayTelemetryClient=class extends TelemetryClient{trackCliSubcommandApiKeys(actual){this.trackCliSubcommand({subcommand:"api-keys",value:actual})}trackCliSubcommandBudgets(actual){this.trackCliSubcommand({subcommand:"budgets",value:actual})}trackCliSubcommandRules(actual){this.trackCliSubcommand({subcommand:"rules",value:actual})}trackCliSubcommandVirtualModels(actual){this.trackCliSubcommand({subcommand:"virtual-models",value:actual})}trackCliSubcommandCodingAgents(actual){this.trackCliSubcommand({subcommand:"coding-agents",value:actual})}trackCliSubcommandSetup(actual){this.trackCliSubcommand({subcommand:"setup",value:actual})}trackCliSubcommandModels(actual){this.trackCliSubcommand({subcommand:"models",value:actual})}trackCliSubcommandLeaderboard(actual){this.trackCliSubcommand({subcommand:"leaderboard",value:actual})}};var COMMAND_CONFIG9={"api-keys":getCommandAliases(apiKeysSubcommand),budgets:getCommandAliases(budgetsSubcommand),rules:getCommandAliases(rulesSubcommand),"virtual-models":getCommandAliases(virtualModelsSubcommand),"coding-agents":getCommandAliases(codingAgentsSubcommand),setup:getCommandAliases(setupSubcommand),models:getCommandAliases(modelsSubcommand),leaderboard:getCommandAliases(leaderboardSubcommand)};async function main(client){let parsedArgs,flagsSpecification=getFlagsSpecification(aiGatewayCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new AiGatewayTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand(parsedArgs.args.slice(1),COMMAND_CONFIG9),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("ai-gateway"),output_manager_default.print(help(aiGatewayCommand,{columns:client.stderr.columns})),0;switch(subcommand){case"api-keys":return telemetry.trackCliSubcommandApiKeys(subcommandOriginal),apiKeys(client);case"budgets":return telemetry.trackCliSubcommandBudgets(subcommandOriginal),budgets(client);case"rules":return telemetry.trackCliSubcommandRules(subcommandOriginal),rules(client);case"virtual-models":return telemetry.trackCliSubcommandVirtualModels(subcommandOriginal),virtualModels(client);case"coding-agents":return telemetry.trackCliSubcommandCodingAgents(subcommandOriginal),codingAgents(client);case"setup":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway",subcommandOriginal),output_manager_default.print(help(setupSubcommand,{parent:aiGatewayCommand,columns:client.stderr.columns})),0):(telemetry.trackCliSubcommandSetup(subcommandOriginal),codingAgentsSetup(client,args));case"models":return telemetry.trackCliSubcommandModels(subcommandOriginal),models(client);case"leaderboard":return telemetry.trackCliSubcommandLeaderboard(subcommandOriginal),leaderboard(client);default:return needHelp?(telemetry.trackCliFlagHelp("ai-gateway",subcommandOriginal),output_manager_default.print(help(aiGatewayCommand,{columns:client.stderr.columns})),0):(output_manager_default.error("Please specify a subcommand. Run `vercel ai-gateway --help` for usage information."),2)}}var import_chalk29=__toESM(require_source(),1);function isPublicSuffix(domainName){return domainName.endsWith(".vercel.app")||domainName.endsWith(".now.sh")}var import_tldts=__toESM(require_cjs(),1);function isRootDomain(domainName){let parsedDomain=(0,import_tldts.parse)(domainName),{domain:rootDomain,subdomain}=parsedDomain;return!!(!subdomain&&rootDomain)}async function getDomainConfig(client,domainName){try{return await client.fetch(`/v6/domains/${domainName}/config`)}catch(err){if(isAPIError(err)&&err.status<500)return err;throw err}}var import_chalk27=__toESM(require_source(),1);async function addDomainToProject(client,projectNameOrId,domain){output_manager_default.spinner(`Adding domain ${domain} to project ${import_chalk27.default.bold(projectNameOrId)}`);try{let aliasTarget=(await client.fetch(`/projects/${encodeURIComponent(projectNameOrId)}/alias`,{method:"POST",body:JSON.stringify({target:"PRODUCTION",domain})})).find(aliasTarget2=>aliasTarget2.domain===domain);return aliasTarget||new Error(`Adding domain '${domain}' to project '${projectNameOrId}' did not return a matching alias in the API response. The domain may already be on another project\u2014try 'vercel domains add ${domain} ${projectNameOrId} --force' after removing it there, or run 'vercel domains inspect ${domain}'.`)}catch(err){if(isAPIError(err)&&err.status<500)return err;throw err}}function getProjectDomain(client,projectIdOrName,domainName,options={}){return fetchProjectDomain(client,`/v9/projects/${encodeURIComponent(projectIdOrName)}/domains/${encodeURIComponent(domainName)}`,options)}function getProjectDomainByName(client,domainName,options={}){return fetchProjectDomain(client,`/project-domains/${encodeURIComponent(domainName)}`,options)}function verifyProjectDomain(client,projectIdOrName,domainName,options={}){return fetchProjectDomain(client,`/v9/projects/${encodeURIComponent(projectIdOrName)}/domains/${encodeURIComponent(domainName)}/verify`,{...options,method:"POST"})}async function fetchProjectDomain(client,url,init){try{return await client.fetch(url,init)}catch(err){if(isAPIError(err)&&err.status<500)return err;throw err}}var import_chalk28=__toESM(require_source(),1);async function removeDomainFromProject(client,projectNameOrId,domain){output_manager_default.spinner(`Removing domain ${domain} from project ${import_chalk28.default.bold(projectNameOrId)}`);try{return await client.fetch(`/projects/${encodeURIComponent(projectNameOrId)}/alias?domain=${encodeURIComponent(domain)}`,{method:"DELETE"})}catch(err){if(isAPIError(err)&&err.status<500)return err;throw err}}var DomainsAddTelemetryClient=class extends TelemetryClient{trackCliFlagForce(force){force&&this.trackCliFlag("force")}trackCliArgumentDomain(domainName){domainName&&this.trackCliArgument({arg:"domain",value:this.redactedValue})}trackCliArgumentProject(projectName){projectName&&this.trackCliArgument({arg:"project",value:this.redactedValue})}};var import_error_utils=__toESM(require_dist(),1);var VERCEL_DOMAINS_DASHBOARD="https://vercel.com/dashboard/domains";function nextCommandsForDomainsAddFailure(client,domainName,projectName,err){let next=[{command:withGlobalFlags(client,`domains inspect ${domainName}`),when:"to inspect domain configuration and ownership"}],apiErr=err,code2=typeof apiErr.code=="string"?apiErr.code:"",msg=err.message.toLowerCase(),status=isAPIError(err)?err.status:void 0,looksLikeOwnershipOrPurchaseIssue=code2==="not_domain_owner"||code2==="invalid_domain"||code2==="domain_not_found"||status===403&&(msg.includes("not authorized")||msg.includes("forbidden"))||msg.includes("not verified")||msg.includes("do not own")||msg.includes("not the owner"),aliasConflict=code2==="ALIAS_DOMAIN_EXIST"||status===409||msg.includes("already assigned")||msg.includes("already in use");return(looksLikeOwnershipOrPurchaseIssue||aliasConflict)&&(next.push({command:withGlobalFlags(client,`domains buy ${domainName}`),when:"to buy the domain; it returns the price and needed details, and charges nothing until a person approves the price"}),next.push({command:withGlobalFlags(client,"domains transfer-in"),when:"to transfer a domain you already own from another registrar into Vercel"}),next.push({command:openUrlInBrowserCommand(VERCEL_DOMAINS_DASHBOARD),when:"to open the Domains dashboard in your browser"})),aliasConflict&&!looksLikeOwnershipOrPurchaseIssue&&projectName&&next.push({command:withGlobalFlags(client,`domains add ${domainName} ${projectName} --force`),when:"to force move from another project (only if API returns project id\u2014otherwise remove domain from the other project first)"}),next}function nextCommandsForDomainsAddSuccess(client,domainName,projectName){return projectName?[{command:withGlobalFlags(client,`domains verify ${domainName}`),when:"to check DNS configuration and see the records you need to set"},{command:withGlobalFlags(client,`domains inspect ${domainName}`),when:"to inspect domain configuration and ownership"}]:[{command:withGlobalFlags(client,`domains add ${domainName} <project>`),when:"to attach this domain to a project"},{command:withGlobalFlags(client,`domains inspect ${domainName}`),when:"to inspect domain configuration and ownership"}]}async function printDomainConfiguration(client,domainName){if(isPublicSuffix(domainName))return output_manager_default.log("The domain will automatically get assigned to your latest production deployment."),0;let domainConfig=await getDomainConfig(client,domainName);return!(domainConfig instanceof Error)&&domainConfig.misconfigured?output_manager_default.warn(`This domain is not configured properly. Run ${getCommandName(`domains verify ${domainName}`)} to see how to configure it.`):output_manager_default.log("The domain will automatically get assigned to your latest production deployment."),0}async function add2(client,argv){let telemetry=new DomainsAddTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let{args,flags:opts}=parsedArgs,force=opts["--force"];telemetry.trackCliFlagForce(force);let contextName=await getContextName(client,{resolveLocalScope:!0});if(args.length<1||args.length>2){if(client.nonInteractive){let cmd=withGlobalFlags(client,"domains add <domain> [project]");outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`Run: ${cmd}`,next:[{command:cmd,when:"to add a domain to your team, or pass a project name to assign it to a project"}]},2)}return output_manager_default.error(`${getCommandName("domains add <domain> [project]")} expects one or two arguments.`),2}let domainName=String(args[0]),projectName=args.length===2?String(args[1]):void 0;if(telemetry.trackCliArgumentDomain(domainName),telemetry.trackCliArgumentProject(args[1]),!projectName){if(!isPublicSuffix(domainName)&&!isRootDomain(domainName)){let cmd=withGlobalFlags(client,`domains add ${domainName} <project>`),message=`Only apex domains can be added without a project. To add the subdomain ${domainName}, pass a project: ${cmd}`;return client.nonInteractive&&outputActionRequired(client,{status:"action_required",reason:"project_required_for_subdomain",action:"add_with_project",message,next:[{command:cmd,when:"to add this subdomain to a specific project"}]},1),output_manager_default.error(message),1}let addStamp2=stamp_default(),addResult;try{addResult=await addDomain(client,domainName,contextName)}catch(err){let error=err instanceof Error?err:new Error(String(err));if(client.nonInteractive){let status=isAPIError(error)?error.status:void 0,apiErr=error,code2=typeof apiErr.code=="string"?apiErr.code:"",msg=error.message.toLowerCase(),reason=status===403?"forbidden":status===404?"not_found":status===409||msg.includes("already")?"alias_conflict":"domain_add_failed";(code2==="not_domain_owner"||status===403&&msg.includes("not authorized"))&&(reason="domain_not_owned");let message=(0,import_error_utils.errorToString)(error);(reason==="domain_not_owned"||code2==="invalid_domain"||msg.includes("not authorized to use"))&&(message+=" domains add is for domains you already own or control via DNS. If you have not purchased the domain yet, run 'domains buy' to get its price, and buy it only after the user approves that price; use 'domains transfer-in' to move an existing registration to Vercel."),outputAgentError(client,{status:"error",reason,message,next:nextCommandsForDomainsAddFailure(client,domainName,"",error)},1)}return output_manager_default.prettyError(error),1}return addResult instanceof InvalidDomain?(client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_domain",message:(0,import_error_utils.errorToString)(addResult)},1),output_manager_default.prettyError(addResult),1):addResult instanceof DomainAlreadyExists?(client.nonInteractive&&outputAgentError(client,{status:"error",reason:"domain_already_exists",message:(0,import_error_utils.errorToString)(addResult)},1),output_manager_default.prettyError(addResult),1):(client.nonInteractive&&outputAgentSuccess(client,{status:"success",reason:"domain_added",message:`Domain ${domainName} added to ${contextName}.`,next:nextCommandsForDomainsAddSuccess(client,domainName)},0),output_manager_default.success(`Domain ${import_chalk29.default.bold(domainName)} added to ${import_chalk29.default.bold(contextName)}. ${addStamp2()}`),0)}let addStamp=stamp_default(),removedPreviousAssignment=!1,aliasTarget=await addDomainToProject(client,projectName,domainName);if(aliasTarget instanceof Error){if(aliasTarget instanceof APIError&&aliasTarget.code==="ALIAS_DOMAIN_EXIST"){let conflictProject=aliasTarget.project,alreadyOnRequestedProject=!!(conflictProject&&(conflictProject.id===projectName||conflictProject.name===projectName));if(alreadyOnRequestedProject||(alreadyOnRequestedProject=!(await getProjectDomain(client,projectName,domainName)instanceof Error)),alreadyOnRequestedProject)return client.nonInteractive&&outputAgentSuccess(client,{status:"success",reason:"domain_already_assigned",message:`Domain ${domainName} is already assigned to project ${projectName}.`,next:nextCommandsForDomainsAddSuccess(client,domainName,projectName)},0),output_manager_default.log(`Domain ${import_chalk29.default.bold(domainName)} is already assigned to project ${import_chalk29.default.bold(projectName)}. ${addStamp()}`),printDomainConfiguration(client,domainName);if(force){let currentProjectId=conflictProject?.id;if(!currentProjectId){let currentProjectDomain=await getProjectDomainByName(client,domainName);currentProjectDomain instanceof Error||(currentProjectId=currentProjectDomain.projectId)}if(currentProjectId){let removeResponse=await removeDomainFromProject(client,currentProjectId,domainName);if(removeResponse instanceof Error)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"domain_remove_failed",message:(0,import_error_utils.errorToString)(removeResponse)},1),output_manager_default.prettyError(removeResponse),1;removedPreviousAssignment=!0;try{aliasTarget=await addDomainToProject(client,projectName,domainName)}catch(error){aliasTarget=error instanceof Error?error:new Error((0,import_error_utils.errorToString)(error))}}}}if(aliasTarget instanceof Error){let partialReassignmentHint=removedPreviousAssignment?"Removed the previous project assignment, but could not confirm the destination assignment. Inspect the current assignment before retrying.":void 0;if(client.nonInteractive){let status=isAPIError(aliasTarget)?aliasTarget.status:void 0,apiErr=aliasTarget,code2=typeof apiErr.code=="string"?apiErr.code:"",msg=aliasTarget.message.toLowerCase(),reason=status===403?"forbidden":status===404?"not_found":status===409||msg.includes("already")?"alias_conflict":"domain_add_failed";(code2==="not_domain_owner"||status===403&&msg.includes("not authorized"))&&(reason="domain_not_owned");let message=(0,import_error_utils.errorToString)(aliasTarget);(reason==="domain_not_owned"||code2==="invalid_domain"||msg.includes("not authorized to use"))&&(message+=" domains add is for domains you already own or control via DNS. If you have not purchased the domain yet, run 'domains buy' to get its price, and buy it only after the user approves that price; use 'domains transfer-in' to move an existing registration to Vercel."),outputAgentError(client,{status:"error",reason,message,...partialReassignmentHint?{hint:partialReassignmentHint}:{},next:removedPreviousAssignment?[{command:withGlobalFlags(client,`domains inspect ${quoteArg(domainName)}`),when:"inspect the current assignment before retrying"}]:nextCommandsForDomainsAddFailure(client,domainName,projectName,aliasTarget)},1)}return output_manager_default.prettyError(aliasTarget),partialReassignmentHint&&output_manager_default.log(partialReassignmentHint),1}}return client.nonInteractive&&outputAgentSuccess(client,{status:"success",reason:"domain_added",message:`Domain ${domainName} added to project ${projectName}.`,next:nextCommandsForDomainsAddSuccess(client,domainName,projectName)},0),output_manager_default.success(`Domain ${import_chalk29.default.bold(domainName)} added to project ${import_chalk29.default.bold(projectName)}. ${addStamp()}`),printDomainConfiguration(client,domainName)}var import_chalk30=__toESM(require_source(),1);async function check(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(checkSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags}=parsedArgs,domains=args,hasMultipleInputDomains=domains.length>1,formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;if(domains.length===0)return output_manager_default.error("Missing domain name. Usage: `vercel domains check <domain>`"),2;if(domains.length>50)return output_manager_default.error("Too many domains. You can check up to 50 domains per request."),1;let invalidDomains=domains.filter(domain=>!isRootDomain(domain));if(invalidDomains.length>0)return output_manager_default.error(`Invalid domain name(s): ${invalidDomains.map(domain=>param(domain)).join(", ")}. Run ${getCommandName("domains --help")}`),1;try{let results=domains.length===1?[{domain:domains[0],available:(await getDomainStatus(client,domains[0])).available}]:(await client.fetch("/v1/registrar/domains/availability",{method:"POST",body:{domains}})).results;if(formatResult.jsonOutput)return!hasMultipleInputDomains&&results.length===1?client.stdout.write(`${JSON.stringify({domain:results[0].domain,available:!!results[0].available},null,2)}
116
+ `}var AiGatewayModelsTelemetryClient=class extends TelemetryClient{trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandEndpoints(actual){this.trackCliSubcommand({subcommand:"endpoints",value:actual})}};var COMMAND_CONFIG7={list:getCommandAliases(modelsListSubcommand),endpoints:getCommandAliases(modelsEndpointsSubcommand)};async function models(client){let telemetry=new AiGatewayModelsTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(modelsSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let subArgs=parsedArgs.args.slice(2),{subcommand,args,subcommandOriginal}=getSubcommand(subArgs,COMMAND_CONFIG7),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("ai-gateway models",subcommandOriginal),output_manager_default.print(help(modelsSubcommand,{columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{parent:modelsSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"list":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway models",subcommandOriginal),printHelp(modelsListSubcommand),0):(telemetry.trackCliSubcommandList(subcommandOriginal),list6(client,args));case"endpoints":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway models",subcommandOriginal),printHelp(modelsEndpointsSubcommand),0):(telemetry.trackCliSubcommandEndpoints(subcommandOriginal),endpoints(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG7)),output_manager_default.print(help(modelsSubcommand,{columns:client.stderr.columns})),2}}var import_chalk26=__toESM(require_source(),1);import{writeFile}from"node:fs/promises";var dash2=()=>import_chalk26.default.gray("\u2013");function outputPathFlag(flags){return flags["--output"]??flags["--out"]}function warnOutsideJsonResult(flags,format,warning2){warning2&&(format!=="json"||outputPathFlag(flags)!==void 0)&&output_manager_default.warning(warning2.message)}function resolveFormat(client,flags){let raw=flags["--format"],out=outputPathFlag(flags);if(raw!==void 0){let format=raw.toLowerCase();return format!=="table"&&format!=="json"&&format!=="csv"?{error:`Invalid format: "${raw}". Valid formats: table, json, csv`}:format==="table"&&out!==void 0?{error:"Cannot write the table view to a file. Use --format json or --format csv with --output."}:{format}}return out!==void 0?{format:"json"}:{format:!!client.stdout.isTTY&&!client.nonInteractive?"table":"json"}}function parseEnum(value,allowed,label){if(value===void 0)return{value:void 0};let normalized=value.toLowerCase(),match=allowed.find(member=>member.toLowerCase()===normalized);return match===void 0?{error:`Invalid ${label}: "${value}". Valid values: ${allowed.join(", ")}`}:{value:match}}async function fetchWithSpinner(fetch,spinnerText){output_manager_default.spinner(spinnerText);try{let data=await fetch();return output_manager_default.stopSpinner(),{data}}catch(err){if(output_manager_default.stopSpinner(),isAPIError(err))return output_manager_default.error(err.message),{exitCode:1};throw err}}async function writeToFile(client,out,content,label){let writeStamp=stamp_default();try{await writeFile(out,content)}catch(err){return output_manager_default.error(`Failed to write ${out}: ${err instanceof Error?err.message:String(err)}`),1}return output_manager_default.log(`Wrote ${label} to ${import_chalk26.default.bold(out)} ${writeStamp()}`),0}async function runTimeseriesLeaderboard(client,flags,telemetry,config){telemetry.trackCliOptionModality(flags["--modality"]),telemetry.trackCliOptionMetric(flags["--metric"]),telemetry.trackCliOptionDate(flags["--date"]),telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliOptionOutput(flags["--output"]),telemetry.trackCliOptionOut(flags["--out"]);let formatResult=resolveFormat(client,flags);if("error"in formatResult)return output_manager_default.error(formatResult.error),1;let{format}=formatResult;warnOutsideJsonResult(flags,format,config.warning);let modalityResult=parseEnum(flags["--modality"],LEADERBOARD_MODALITIES,"modality");if("error"in modalityResult)return output_manager_default.error(modalityResult.error),1;let metricResult=parseEnum(flags["--metric"],LEADERBOARD_METRICS,"metric");if("error"in metricResult)return output_manager_default.error(metricResult.error),1;let modality=modalityResult.value,metric=metricResult.value;format==="table"&&canPrompt(client)&&(modality===void 0&&(modality=await client.input.select({message:"Modality",choices:LEADERBOARD_MODALITIES.map(value=>({name:value,value})),default:"all"})),metric===void 0&&(metric=await client.input.select({message:"Metric",choices:LEADERBOARD_METRICS.map(value=>({name:value,value})),default:"requests"})));let resolvedModality=modality??"all",resolvedMetric=metric??"requests";if(format==="csv"){let result2=await fetchWithSpinner(()=>fetchLeaderboardCsv(client,{dataset:config.dataset,modality:resolvedModality}),`Fetching ${config.label}`);if("exitCode"in result2)return result2.exitCode;let outputFile=outputPathFlag(flags);return outputFile!==void 0?writeToFile(client,outputFile,result2.data,config.label):(client.stdout.write(result2.data),0)}let result=await fetchWithSpinner(()=>fetchLeaderboard(client,{dataset:config.dataset,modality:resolvedModality}),`Fetching ${config.label}`);if("exitCode"in result)return result.exitCode;let data=result.data;if(format==="json"){let outputFile=outputPathFlag(flags),content=`${JSON.stringify(outputFile===void 0?withWarnings(data,[config.warning]):data,null,2)}
117
+ `;return outputFile!==void 0?writeToFile(client,outputFile,content,config.label):(client.stdout.write(content),0)}return renderTimeseriesTable(client,data,{metric:resolvedMetric,modality:resolvedModality,date:flags["--date"],entityLabel:config.entityLabel,label:config.label})}function renderTimeseriesTable(client,data,options){let rows=data.rows??[];if(options.date!==void 0&&!rows.some(r=>r.date===options.date)){let dates=availableDates(rows);return output_manager_default.error(`No data for ${options.date}.${dates.length?` Available dates: ${dates.slice(0,5).join(", ")}${dates.length>5?", \u2026":""}`:""}`),1}let filtered=filterTimeseries(rows,{metric:options.metric,date:options.date});if(filtered.length===0)return output_manager_default.log(`No ${options.label} data for ${options.metric}.`),0;let day=options.date??latestDate(rows);return output_manager_default.log(`${options.label} \xB7 ${import_chalk26.default.bold(options.metric)} \xB7 ${options.modality} \xB7 ${day}`),client.stdout.write(`${table([["#",options.entityLabel,"share"].map(header=>import_chalk26.default.gray(header)),...filtered.map((row,index)=>[String(index+1),row.name,`${row.share_percent.toFixed(2)}%`])],{align:["r","l","r"],hsep:3}).replace(/^/gm," ")}
118
+ `),printLicense(),0}async function runRankedLeaderboard(client,flags,telemetry,config){telemetry.trackCliOptionFormat(flags["--format"]),telemetry.trackCliOptionOutput(flags["--output"]),telemetry.trackCliOptionOut(flags["--out"]);let formatResult=resolveFormat(client,flags);if("error"in formatResult)return output_manager_default.error(formatResult.error),1;let{format}=formatResult;if(warnOutsideJsonResult(flags,format,config.warning),format==="csv"){let result2=await fetchWithSpinner(()=>fetchLeaderboardCsv(client,{dataset:config.dataset}),`Fetching ${config.label}`);if("exitCode"in result2)return result2.exitCode;let outputFile=outputPathFlag(flags);return outputFile!==void 0?writeToFile(client,outputFile,result2.data,config.label):(client.stdout.write(result2.data),0)}let result=await fetchWithSpinner(()=>fetchLeaderboard(client,{dataset:config.dataset}),`Fetching ${config.label}`);if("exitCode"in result)return result.exitCode;let data=result.data;if(format==="json"){let outputFile=outputPathFlag(flags),content=`${JSON.stringify(outputFile===void 0?withWarnings(data,[config.warning]):data,null,2)}
119
+ `;return outputFile!==void 0?writeToFile(client,outputFile,content,config.label):(client.stdout.write(content),0)}return renderRankedTable(client,data,config.label)}function renderRankedTable(client,data,label){let rows=data.rows??[];if(rows.length===0)return output_manager_default.log(`No ${label} data.`),0;let lsStamp=stamp_default(),rankedBy=rows[0]?.ranked_by;return output_manager_default.log(`${label}${rankedBy?` \xB7 ${import_chalk26.default.bold(rankedBy)}`:""} ${lsStamp()}`),client.stdout.write(`${table([["#","name","description"].map(header=>import_chalk26.default.gray(header)),...rows.map(row=>[String(row.rank),row.name,row.description?row.description:dash2()])],{align:["r","l","l"],hsep:3}).replace(/^/gm," ")}
120
+ `),printLicense(),0}function printLicense(){output_manager_default.log(import_chalk26.default.gray("Source: AI Gateway Leaderboard data, licensed under CC BY 4.0."))}async function runLeaderboardSubcommand(client,argv,subcommand,variant){let parsedArgs,flagsSpecification=getFlagsSpecification(subcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let flags=parsedArgs.flags,json=wantsMachineReadableOutput(void 0,client.argv),resolvedFlags=flags["--out"]!==void 0&&flags["--output"]!==void 0&&parseWithShortFlag(argv,flagsSpecification,"-o",String)["--output"]===void 0?{...flags,"--output":void 0,"--out":parseWithShortFlag(argv,flagsSpecification,"-o","--out")["--out"]}:flags,outputPath=getRenamedOption({"--output":resolvedFlags["--output"],"--out":resolvedFlags["--out"]},"--output","--out",{json:!0});return"error"in outputPath?reportRenamedOptionError(client,outputPath.error,{json}):variant.kind==="timeseries"?runTimeseriesLeaderboard(client,resolvedFlags,variant.telemetry,{dataset:variant.dataset,entityLabel:variant.entityLabel,label:variant.label,warning:outputPath.warning}):runRankedLeaderboard(client,resolvedFlags,variant.telemetry,{dataset:variant.dataset,label:variant.label,warning:outputPath.warning})}var AiGatewayLeaderboardModelsTelemetryClient=class extends TelemetryClient{trackCliOptionModality(value){value&&this.trackCliOption({option:"modality",value})}trackCliOptionMetric(value){value&&this.trackCliOption({option:"metric",value})}trackCliOptionDate(value){value&&this.trackCliOption({option:"date",value})}trackCliOptionFormat(value){value&&this.trackCliOption({option:"format",value})}trackCliOptionOutput(value){value&&this.trackCliOption({option:"output",value:this.redactedValue})}trackCliOptionOut(value){value&&this.trackCliOption({option:"out",value:this.redactedValue})}};async function models2(client,argv){return runLeaderboardSubcommand(client,argv,leaderboardModelsSubcommand,{kind:"timeseries",telemetry:new AiGatewayLeaderboardModelsTelemetryClient({opts:{store:client.telemetryEventStore}}),dataset:"models",entityLabel:"model",label:"Top models"})}var AiGatewayLeaderboardLabsTelemetryClient=class extends TelemetryClient{trackCliOptionModality(value){value&&this.trackCliOption({option:"modality",value})}trackCliOptionMetric(value){value&&this.trackCliOption({option:"metric",value})}trackCliOptionDate(value){value&&this.trackCliOption({option:"date",value})}trackCliOptionFormat(value){value&&this.trackCliOption({option:"format",value})}trackCliOptionOutput(value){value&&this.trackCliOption({option:"output",value:this.redactedValue})}trackCliOptionOut(value){value&&this.trackCliOption({option:"out",value:this.redactedValue})}};async function labs(client,argv){return runLeaderboardSubcommand(client,argv,leaderboardLabsSubcommand,{kind:"timeseries",telemetry:new AiGatewayLeaderboardLabsTelemetryClient({opts:{store:client.telemetryEventStore}}),dataset:"labs",entityLabel:"lab",label:"Top labs"})}var AiGatewayLeaderboardAppsTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(value){value&&this.trackCliOption({option:"format",value})}trackCliOptionOutput(value){value&&this.trackCliOption({option:"output",value:this.redactedValue})}trackCliOptionOut(value){value&&this.trackCliOption({option:"out",value:this.redactedValue})}};async function apps(client,argv){return runLeaderboardSubcommand(client,argv,leaderboardAppsSubcommand,{kind:"ranked",telemetry:new AiGatewayLeaderboardAppsTelemetryClient({opts:{store:client.telemetryEventStore}}),dataset:"apps",label:"Top apps"})}var AiGatewayLeaderboardProvidersTelemetryClient=class extends TelemetryClient{trackCliOptionFormat(value){value&&this.trackCliOption({option:"format",value})}trackCliOptionOutput(value){value&&this.trackCliOption({option:"output",value:this.redactedValue})}trackCliOptionOut(value){value&&this.trackCliOption({option:"out",value:this.redactedValue})}};async function providers(client,argv){return runLeaderboardSubcommand(client,argv,leaderboardProvidersSubcommand,{kind:"ranked",telemetry:new AiGatewayLeaderboardProvidersTelemetryClient({opts:{store:client.telemetryEventStore}}),dataset:"providers",label:"Top providers"})}var AiGatewayLeaderboardTelemetryClient=class extends TelemetryClient{trackCliSubcommandModels(actual){this.trackCliSubcommand({subcommand:"models",value:actual})}trackCliSubcommandLabs(actual){this.trackCliSubcommand({subcommand:"labs",value:actual})}trackCliSubcommandApps(actual){this.trackCliSubcommand({subcommand:"apps",value:actual})}trackCliSubcommandProviders(actual){this.trackCliSubcommand({subcommand:"providers",value:actual})}};var COMMAND_CONFIG8={models:getCommandAliases(leaderboardModelsSubcommand),labs:getCommandAliases(leaderboardLabsSubcommand),apps:getCommandAliases(leaderboardAppsSubcommand),providers:getCommandAliases(leaderboardProvidersSubcommand)};async function leaderboard(client){let telemetry=new AiGatewayLeaderboardTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(leaderboardSubcommand.options),parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(err){return printError(err),2}let subArgs=parsedArgs.args.slice(2),{subcommand,args,subcommandOriginal}=getSubcommand(subArgs,COMMAND_CONFIG8),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),output_manager_default.print(help(leaderboardSubcommand,{columns:client.stderr.columns})),0;function printHelp(command){output_manager_default.print(help(command,{parent:leaderboardSubcommand,columns:client.stderr.columns}))}switch(subcommand){case"models":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardModelsSubcommand),0):(telemetry.trackCliSubcommandModels(subcommandOriginal),models2(client,args));case"labs":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardLabsSubcommand),0):(telemetry.trackCliSubcommandLabs(subcommandOriginal),labs(client,args));case"apps":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardAppsSubcommand),0):(telemetry.trackCliSubcommandApps(subcommandOriginal),apps(client,args));case"providers":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway leaderboard",subcommandOriginal),printHelp(leaderboardProvidersSubcommand),0):(telemetry.trackCliSubcommandProviders(subcommandOriginal),providers(client,args));default:return output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG8)),output_manager_default.print(help(leaderboardSubcommand,{columns:client.stderr.columns})),2}}var AiGatewayTelemetryClient=class extends TelemetryClient{trackCliSubcommandApiKeys(actual){this.trackCliSubcommand({subcommand:"api-keys",value:actual})}trackCliSubcommandBudgets(actual){this.trackCliSubcommand({subcommand:"budgets",value:actual})}trackCliSubcommandRules(actual){this.trackCliSubcommand({subcommand:"rules",value:actual})}trackCliSubcommandVirtualModels(actual){this.trackCliSubcommand({subcommand:"virtual-models",value:actual})}trackCliSubcommandCodingAgents(actual){this.trackCliSubcommand({subcommand:"coding-agents",value:actual})}trackCliSubcommandSetup(actual){this.trackCliSubcommand({subcommand:"setup",value:actual})}trackCliSubcommandModels(actual){this.trackCliSubcommand({subcommand:"models",value:actual})}trackCliSubcommandLeaderboard(actual){this.trackCliSubcommand({subcommand:"leaderboard",value:actual})}};var COMMAND_CONFIG9={"api-keys":getCommandAliases(apiKeysSubcommand),budgets:getCommandAliases(budgetsSubcommand),rules:getCommandAliases(rulesSubcommand),"virtual-models":getCommandAliases(virtualModelsSubcommand),"coding-agents":getCommandAliases(codingAgentsSubcommand),setup:getCommandAliases(setupSubcommand),models:getCommandAliases(modelsSubcommand),leaderboard:getCommandAliases(leaderboardSubcommand)};async function main(client){let parsedArgs,flagsSpecification=getFlagsSpecification(aiGatewayCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error),2}let telemetry=new AiGatewayTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand(parsedArgs.args.slice(1),COMMAND_CONFIG9),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("ai-gateway"),output_manager_default.print(help(aiGatewayCommand,{columns:client.stderr.columns})),0;switch(subcommand){case"api-keys":return telemetry.trackCliSubcommandApiKeys(subcommandOriginal),apiKeys(client);case"budgets":return telemetry.trackCliSubcommandBudgets(subcommandOriginal),budgets(client);case"rules":return telemetry.trackCliSubcommandRules(subcommandOriginal),rules(client);case"virtual-models":return telemetry.trackCliSubcommandVirtualModels(subcommandOriginal),virtualModels(client);case"coding-agents":return telemetry.trackCliSubcommandCodingAgents(subcommandOriginal),codingAgents(client);case"setup":return needHelp?(telemetry.trackCliFlagHelp("ai-gateway",subcommandOriginal),output_manager_default.print(help(setupSubcommand,{parent:aiGatewayCommand,columns:client.stderr.columns})),0):(telemetry.trackCliSubcommandSetup(subcommandOriginal),codingAgentsSetup(client,args));case"models":return telemetry.trackCliSubcommandModels(subcommandOriginal),models(client);case"leaderboard":return telemetry.trackCliSubcommandLeaderboard(subcommandOriginal),leaderboard(client);default:return needHelp?(telemetry.trackCliFlagHelp("ai-gateway",subcommandOriginal),output_manager_default.print(help(aiGatewayCommand,{columns:client.stderr.columns})),0):(output_manager_default.error("Please specify a subcommand. Run `vercel ai-gateway --help` for usage information."),2)}}var import_chalk29=__toESM(require_source(),1);function isPublicSuffix(domainName){return domainName.endsWith(".vercel.app")||domainName.endsWith(".now.sh")}var import_tldts=__toESM(require_cjs(),1);function isRootDomain(domainName){let parsedDomain=(0,import_tldts.parse)(domainName),{domain:rootDomain,subdomain}=parsedDomain;return!!(!subdomain&&rootDomain)}async function getDomainConfig(client,domainName){try{return await client.fetch(`/v6/domains/${domainName}/config`)}catch(err){if(isAPIError(err)&&err.status<500)return err;throw err}}var import_chalk27=__toESM(require_source(),1);async function addDomainToProject(client,projectNameOrId,domain){output_manager_default.spinner(`Adding domain ${domain} to project ${import_chalk27.default.bold(projectNameOrId)}`);try{let aliasTarget=(await client.fetch(`/projects/${encodeURIComponent(projectNameOrId)}/alias`,{method:"POST",body:JSON.stringify({target:"PRODUCTION",domain})})).find(aliasTarget2=>aliasTarget2.domain===domain);return aliasTarget||new Error(`Adding domain '${domain}' to project '${projectNameOrId}' did not return a matching alias in the API response. The domain may already be on another project\u2014try 'vercel domains add ${domain} ${projectNameOrId} --force' after removing it there, or run 'vercel domains inspect ${domain}'.`)}catch(err){if(isAPIError(err)&&err.status<500)return err;throw err}}function getProjectDomain(client,projectIdOrName,domainName,options={}){return fetchProjectDomain(client,`/v9/projects/${encodeURIComponent(projectIdOrName)}/domains/${encodeURIComponent(domainName)}`,options)}function getProjectDomainByName(client,domainName,options={}){return fetchProjectDomain(client,`/project-domains/${encodeURIComponent(domainName)}`,options)}function verifyProjectDomain(client,projectIdOrName,domainName,options={}){return fetchProjectDomain(client,`/v9/projects/${encodeURIComponent(projectIdOrName)}/domains/${encodeURIComponent(domainName)}/verify`,{...options,method:"POST"})}async function fetchProjectDomain(client,url,init){try{return await client.fetch(url,init)}catch(err){if(isAPIError(err)&&err.status<500)return err;throw err}}var import_chalk28=__toESM(require_source(),1);async function removeDomainFromProject(client,projectNameOrId,domain){output_manager_default.spinner(`Removing domain ${domain} from project ${import_chalk28.default.bold(projectNameOrId)}`);try{return await client.fetch(`/projects/${encodeURIComponent(projectNameOrId)}/alias?domain=${encodeURIComponent(domain)}`,{method:"DELETE"})}catch(err){if(isAPIError(err)&&err.status<500)return err;throw err}}var DomainsAddTelemetryClient=class extends TelemetryClient{trackCliFlagForce(force){force&&this.trackCliFlag("force")}trackCliArgumentDomain(domainName){domainName&&this.trackCliArgument({arg:"domain",value:this.redactedValue})}trackCliArgumentProject(projectName){projectName&&this.trackCliArgument({arg:"project",value:this.redactedValue})}};var import_error_utils=__toESM(require_dist(),1);var VERCEL_DOMAINS_DASHBOARD="https://vercel.com/dashboard/domains";function nextCommandsForDomainsAddFailure(client,domainName,projectName,err){let next=[{command:withGlobalFlags(client,`domains inspect ${domainName}`),when:"to inspect domain configuration and ownership"}],apiErr=err,code2=typeof apiErr.code=="string"?apiErr.code:"",msg=err.message.toLowerCase(),status=isAPIError(err)?err.status:void 0,looksLikeOwnershipOrPurchaseIssue=code2==="not_domain_owner"||code2==="invalid_domain"||code2==="domain_not_found"||status===403&&(msg.includes("not authorized")||msg.includes("forbidden"))||msg.includes("not verified")||msg.includes("do not own")||msg.includes("not the owner"),aliasConflict=code2==="ALIAS_DOMAIN_EXIST"||status===409||msg.includes("already assigned")||msg.includes("already in use");return(looksLikeOwnershipOrPurchaseIssue||aliasConflict)&&(next.push({command:withGlobalFlags(client,`domains buy ${domainName}`),when:"to buy the domain; it returns the price and needed details, and charges nothing until a person approves the price"}),next.push({command:withGlobalFlags(client,"domains transfer-in"),when:"to transfer a domain you already own from another registrar into Vercel"}),next.push({command:openUrlInBrowserCommand(VERCEL_DOMAINS_DASHBOARD),when:"to open the Domains dashboard in your browser"})),aliasConflict&&!looksLikeOwnershipOrPurchaseIssue&&projectName&&next.push({command:withGlobalFlags(client,`domains add ${domainName} ${projectName} --force`),when:"to force move from another project (only if API returns project id\u2014otherwise remove domain from the other project first)"}),next}function nextCommandsForDomainsAddSuccess(client,domainName,projectName){return projectName?[{command:withGlobalFlags(client,`domains verify ${domainName}`),when:"to check DNS configuration and see the records you need to set"},{command:withGlobalFlags(client,`domains inspect ${domainName}`),when:"to inspect domain configuration and ownership"}]:[{command:withGlobalFlags(client,`domains add ${domainName} <project>`),when:"to attach this domain to a project"},{command:withGlobalFlags(client,`domains inspect ${domainName}`),when:"to inspect domain configuration and ownership"}]}async function printDomainConfiguration(client,domainName){if(isPublicSuffix(domainName))return output_manager_default.log("The domain will automatically get assigned to your latest production deployment."),0;let domainConfig=await getDomainConfig(client,domainName);return!(domainConfig instanceof Error)&&domainConfig.misconfigured?output_manager_default.warn(`This domain is not configured properly. Run ${getCommandName(`domains verify ${domainName}`)} to see how to configure it.`):output_manager_default.log("The domain will automatically get assigned to your latest production deployment."),0}async function add2(client,argv){let telemetry=new DomainsAddTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(addSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_arguments",message:error instanceof Error?error.message:String(error)},2),printError(error),2}let{args,flags:opts}=parsedArgs,force=opts["--force"];telemetry.trackCliFlagForce(force);let contextName=await getContextName(client,{resolveLocalScope:!0});if(args.length<1||args.length>2){if(client.nonInteractive){let cmd=withGlobalFlags(client,"domains add <domain> [project]");outputActionRequired(client,{status:"action_required",reason:"missing_arguments",action:"missing_arguments",message:`Run: ${cmd}`,next:[{command:cmd,when:"to add a domain to your team, or pass a project name to assign it to a project"}]},2)}return output_manager_default.error(`${getCommandName("domains add <domain> [project]")} expects one or two arguments.`),2}let domainName=String(args[0]),projectName=args.length===2?String(args[1]):void 0;if(telemetry.trackCliArgumentDomain(domainName),telemetry.trackCliArgumentProject(args[1]),!projectName){if(!isPublicSuffix(domainName)&&!isRootDomain(domainName)){let cmd=withGlobalFlags(client,`domains add ${domainName} <project>`),message=`Only apex domains can be added without a project. To add the subdomain ${domainName}, pass a project: ${cmd}`;return client.nonInteractive&&outputActionRequired(client,{status:"action_required",reason:"project_required_for_subdomain",action:"add_with_project",message,next:[{command:cmd,when:"to add this subdomain to a specific project"}]},1),output_manager_default.error(message),1}let addStamp2=stamp_default(),addResult;try{addResult=await addDomain(client,domainName,contextName)}catch(err){let error=err instanceof Error?err:new Error(String(err));if(client.nonInteractive){let status=isAPIError(error)?error.status:void 0,apiErr=error,code2=typeof apiErr.code=="string"?apiErr.code:"",msg=error.message.toLowerCase(),reason=status===403?"forbidden":status===404?"not_found":status===409||msg.includes("already")?"alias_conflict":"domain_add_failed";(code2==="not_domain_owner"||status===403&&msg.includes("not authorized"))&&(reason="domain_not_owned");let message=(0,import_error_utils.errorToString)(error);(reason==="domain_not_owned"||code2==="invalid_domain"||msg.includes("not authorized to use"))&&(message+=" domains add is for domains you already own or control via DNS. If you have not purchased the domain yet, run 'domains buy' to get its price, and buy it only after the user approves that price; use 'domains transfer-in' to move an existing registration to Vercel."),outputAgentError(client,{status:"error",reason,message,next:nextCommandsForDomainsAddFailure(client,domainName,"",error)},1)}return output_manager_default.prettyError(error),1}return addResult instanceof InvalidDomain?(client.nonInteractive&&outputAgentError(client,{status:"error",reason:"invalid_domain",message:(0,import_error_utils.errorToString)(addResult)},1),output_manager_default.prettyError(addResult),1):addResult instanceof DomainAlreadyExists?(client.nonInteractive&&outputAgentError(client,{status:"error",reason:"domain_already_exists",message:(0,import_error_utils.errorToString)(addResult)},1),output_manager_default.prettyError(addResult),1):(client.nonInteractive&&outputAgentSuccess(client,{status:"success",reason:"domain_added",message:`Domain ${domainName} added to ${contextName}.`,next:nextCommandsForDomainsAddSuccess(client,domainName)},0),output_manager_default.success(`Domain ${import_chalk29.default.bold(domainName)} added to ${import_chalk29.default.bold(contextName)}. ${addStamp2()}`),0)}let addStamp=stamp_default(),removedPreviousAssignment=!1,aliasTarget=await addDomainToProject(client,projectName,domainName);if(aliasTarget instanceof Error){if(aliasTarget instanceof APIError&&aliasTarget.code==="ALIAS_DOMAIN_EXIST"){let conflictProject=aliasTarget.project,alreadyOnRequestedProject=!!(conflictProject&&(conflictProject.id===projectName||conflictProject.name===projectName));if(alreadyOnRequestedProject||(alreadyOnRequestedProject=!(await getProjectDomain(client,projectName,domainName)instanceof Error)),alreadyOnRequestedProject)return client.nonInteractive&&outputAgentSuccess(client,{status:"success",reason:"domain_already_assigned",message:`Domain ${domainName} is already assigned to project ${projectName}.`,next:nextCommandsForDomainsAddSuccess(client,domainName,projectName)},0),output_manager_default.log(`Domain ${import_chalk29.default.bold(domainName)} is already assigned to project ${import_chalk29.default.bold(projectName)}. ${addStamp()}`),printDomainConfiguration(client,domainName);if(force){let currentProjectId=conflictProject?.id;if(!currentProjectId){let currentProjectDomain=await getProjectDomainByName(client,domainName);currentProjectDomain instanceof Error||(currentProjectId=currentProjectDomain.projectId)}if(currentProjectId){let removeResponse=await removeDomainFromProject(client,currentProjectId,domainName);if(removeResponse instanceof Error)return client.nonInteractive&&outputAgentError(client,{status:"error",reason:"domain_remove_failed",message:(0,import_error_utils.errorToString)(removeResponse)},1),output_manager_default.prettyError(removeResponse),1;removedPreviousAssignment=!0;try{aliasTarget=await addDomainToProject(client,projectName,domainName)}catch(error){aliasTarget=error instanceof Error?error:new Error((0,import_error_utils.errorToString)(error))}}}}if(aliasTarget instanceof Error){let partialReassignmentHint=removedPreviousAssignment?"Removed the previous project assignment, but could not confirm the destination assignment. Inspect the current assignment before retrying.":void 0;if(client.nonInteractive){let status=isAPIError(aliasTarget)?aliasTarget.status:void 0,apiErr=aliasTarget,code2=typeof apiErr.code=="string"?apiErr.code:"",msg=aliasTarget.message.toLowerCase(),reason=status===403?"forbidden":status===404?"not_found":status===409||msg.includes("already")?"alias_conflict":"domain_add_failed";(code2==="not_domain_owner"||status===403&&msg.includes("not authorized"))&&(reason="domain_not_owned");let message=(0,import_error_utils.errorToString)(aliasTarget);(reason==="domain_not_owned"||code2==="invalid_domain"||msg.includes("not authorized to use"))&&(message+=" domains add is for domains you already own or control via DNS. If you have not purchased the domain yet, run 'domains buy' to get its price, and buy it only after the user approves that price; use 'domains transfer-in' to move an existing registration to Vercel."),outputAgentError(client,{status:"error",reason,message,...partialReassignmentHint?{hint:partialReassignmentHint}:{},next:removedPreviousAssignment?[{command:withGlobalFlags(client,`domains inspect ${quoteArg(domainName)}`),when:"inspect the current assignment before retrying"}]:nextCommandsForDomainsAddFailure(client,domainName,projectName,aliasTarget)},1)}return output_manager_default.prettyError(aliasTarget),partialReassignmentHint&&output_manager_default.log(partialReassignmentHint),1}}return client.nonInteractive&&outputAgentSuccess(client,{status:"success",reason:"domain_added",message:`Domain ${domainName} added to project ${projectName}.`,next:nextCommandsForDomainsAddSuccess(client,domainName,projectName)},0),output_manager_default.success(`Domain ${import_chalk29.default.bold(domainName)} added to project ${import_chalk29.default.bold(projectName)}. ${addStamp()}`),printDomainConfiguration(client,domainName)}var import_chalk30=__toESM(require_source(),1);async function check(client,argv){let parsedArgs,flagsSpecification=getFlagsSpecification(checkSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags}=parsedArgs,domains=args,hasMultipleInputDomains=domains.length>1,formatResult=validateJsonOutput(flags);if(!formatResult.valid)return output_manager_default.error(formatResult.error),2;if(domains.length===0)return output_manager_default.error("Missing domain name. Usage: `vercel domains check <domain>`"),2;if(domains.length>50)return output_manager_default.error("Too many domains. You can check up to 50 domains per request."),1;let invalidDomains=domains.filter(domain=>!isRootDomain(domain));if(invalidDomains.length>0)return output_manager_default.error(`Invalid domain name(s): ${invalidDomains.map(domain=>param(domain)).join(", ")}. Run ${getCommandName("domains --help")}`),1;try{let results=domains.length===1?[{domain:domains[0],available:(await getDomainStatus(client,domains[0])).available}]:(await client.fetch("/v1/registrar/domains/availability",{method:"POST",body:{domains}})).results;if(formatResult.jsonOutput)return!hasMultipleInputDomains&&results.length===1?client.stdout.write(`${JSON.stringify({domain:results[0].domain,available:!!results[0].available},null,2)}
121
121
  `):client.stdout.write(`${JSON.stringify({results:results.map(result=>({domain:result.domain,available:!!result.available}))},null,2)}
122
122
  `),0;for(let result of results)output_manager_default.log(`The domain ${param(result.domain)} is ${import_chalk30.default.underline(result.available?"available":"unavailable")}.`);return 0}catch(error){if(isAPIError(error)){let message=error.serverMessage||`API error (${error.status})`;return formatResult.jsonOutput?client.stdout.write(`${JSON.stringify({error:error.code||"api_error",message},null,2)}
123
123
  `):output_manager_default.error(message),1}return printError(error),1}}var import_chalk31=__toESM(require_source(),1);async function transferInDomain(client,name,authCode,expectedPrice,years){let{team}=await getScope(client),teamParam=team?`?teamId=${team.slug}`:"";try{let{orderId}=await client.fetch(`/v1/registrar/domains/${name}/transfer${teamParam}`,{body:{authCode,autoRenew:!0,years,expectedPrice,contactInformation:{firstName:"Vercel",lastName:"Whois",email:"domains@registrar.vercel.com",phone:"+14153985463",address1:"100 First Street, Suite 2400",city:"San Fransisco",state:"CA",zip:"94105",country:"US",companyName:"Vercel Inc."}},method:"POST"}),order=await pollForOrder(client,orderId);return order===null?new UnexpectedDomainTransferError(name):order.status==="completed"&&order.domains.find(domain2=>domain2.domainName===name)?.status==="completed"?{ok:!0}:order.error?.code==="payment-failed"?new DomainPaymentError:new UnexpectedDomainTransferError(name)}catch(err){if(isAPIError(err)){if(err.code==="invalid_name")return new InvalidDomain(name);if(err.code==="tld_not_supported")return new UnsupportedTLD(name);if(err.code==="domain_not_available")return new DomainNotAvailable(name)}throw err}}async function getAuthCode(client,code2){return isValidAuthCode(code2)?code2:client.input.text({message:"- Transfer auth code: ",validate:isValidAuthCode})}function isValidAuthCode(code2){return!!(code2&&code2.length>0)}var DomainsTransferInTelemetryClient=class extends TelemetryClient{trackCliOptionCode(code2){code2&&this.trackCliOption({option:"code",value:this.redactedValue})}trackCliArgumentDomain(domainName){domainName&&this.trackCliArgument({arg:"domain",value:this.redactedValue})}};async function transferIn(client,argv){let telemetry=new DomainsTransferInTelemetryClient({opts:{store:client.telemetryEventStore}}),parsedArgs,flagsSpecification=getFlagsSpecification(transferInSubcommand.options);try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return printError(error),2}let{args,flags:opts}=parsedArgs;telemetry.trackCliOptionCode(opts["--code"]);let[domainName]=args;if(!domainName)return output_manager_default.error(`Missing domain name. Run ${getCommandName("domains --help")}`),2;if(telemetry.trackCliArgumentDomain(domainName),!isRootDomain(domainName))return output_manager_default.error(`Invalid domain name ${param(domainName)}. Run ${getCommandName("domains --help")}`),1;let availableStamp=stamp_default(),domainPrice=await getDomainPrice(client,domainName);if(domainPrice instanceof Error)return output_manager_default.prettyError(domainPrice),1;let{transferPrice,years}=domainPrice;if(transferPrice===null)return output_manager_default.error(`The domain ${param(domainName)} is not transferable.`),1;let contextName=await getContextName(client);output_manager_default.log(`The domain ${param(domainName)} is ${import_chalk31.default.underline("available")} to transfer under ${import_chalk31.default.bold(contextName)}! ${availableStamp()}`);let authCode=await getAuthCode(client,opts["--code"]);if(!await client.input.confirm(`Transfer now with 1yr renewal for ${import_chalk31.default.bold(`$${transferPrice}`)}?`,!1))return 0;let transferStamp=stamp_default();output_manager_default.spinner(`Initiating transfer for domain ${domainName}`);let transferInResult=await transferInDomain(client,domainName,authCode,transferPrice,years);return transferInResult instanceof InvalidDomain?(output_manager_default.error(`The domain ${transferInResult.meta.domain} is not valid.`),1):transferInResult instanceof DomainNotAvailable?(output_manager_default.error(`The domain "${transferInResult.meta.domain}" is not transferable.`),1):transferInResult instanceof UnsupportedTLD?(output_manager_default.error(`The TLD for domain name ${transferInResult.meta.domain} is not supported.`),1):transferInResult instanceof DomainPaymentError?(output_manager_default.error("Your card was declined."),1):transferInResult instanceof UnexpectedDomainTransferError?(output_manager_default.error("An unexpected error happened while initiating the transfer."),1):(output_manager_default.success(`Domain ${param(domainName)} transfer started ${transferStamp()}`),output_manager_default.print(` To finalize the transfer, we are waiting for approval from your current registrar.
@@ -189,7 +189,7 @@ ${indent(nameservers.join(`
189
189
  `).map(line=>` ${line}`).join(`
190
190
  `)}function renderStructuredOutput(diagnosis){let{facts}=diagnosis,{config}=facts,dnsMethods=getDnsMethods(diagnosis),domainConnectMethod=dnsMethods.find(method=>method.kind==="domain-connect"),domainConnect=domainConnectMethod?.kind==="domain-connect"?domainConnectMethod.configuration:null,canRecommendDns=diagnosis.configurationStatus!=="scope-resolution-required"&&diagnosis.configurationStatus!=="project-attachment-recommended"&&facts.ownership!=="platform-managed",payload={status:diagnosis.ok?AGENT_STATUS.OK:AGENT_STATUS.ACTION_REQUIRED,...diagnosis.details,...diagnosis.next.length?{next:diagnosis.next}:{},...domainConnect?{domainConnect}:{},domain:facts.domainName,domainStatus:diagnosis.status,configurationStatus:diagnosis.configurationStatus,ok:diagnosis.ok,issues:diagnosis.issues,misconfigured:config.misconfigured,configuredBy:config.configuredBy,serviceType:config.serviceType,ipStatus:config.ipStatus??null,dnssecEnabled:config.dnssecEnabled??null,acceptedChallenges:config.acceptedChallenges??[],current:{nameservers:config.nameservers??[],cnames:config.cnames??[],aValues:config.aValues??[]},recommended:{ipv4:canRecommendDns?config.recommendedIPv4??[]:[],cname:canRecommendDns?config.recommendedCNAME??[]:[],records:diagnosis.recommendedDnsRecords,nameservers:getRecommendedNameservers(dnsMethods)},conflicts:diagnosis.steps.flatMap(step=>step.kind==="remove-conflict"?[step.conflict]:[]),domainOwnership:facts.ownership,project:serializeProject(facts.project)};return`${JSON.stringify(payload,null,2)}
191
191
  `}function renderStructuredError(error){return`${JSON.stringify({status:AGENT_STATUS.ERROR,reason:error.reason,error:error.code,message:error.message,...error.next?.length?{next:error.next}:{}},null,2)}
192
- `}function getDnsMethods(diagnosis){let step=diagnosis.steps.find(candidate=>candidate.kind==="configure-dns");return step?.kind==="configure-dns"?step.methods:[]}function getRecommendedNameservers(methods){let method=methods.find(candidate=>candidate.kind==="nameservers");return method?.kind==="nameservers"?method.nameservers:[]}function serializeProject(project){return project.kind==="none"?null:project.kind==="attached"?{idOrName:project.label,attached:!0,verified:project.domain.verified,verification:project.domain.verification??[],verificationError:project.verificationError?{code:project.verificationError.code||"verification_failed",message:project.verificationError.serverMessage||project.verificationError.message}:null}:{idOrName:project.idOrName,attached:!1}}async function verify(client,argv){let telemetry=new DomainsVerifyTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(verifySubcommand.options),parsedArgs;try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return writeCommandError(client,getOutputMode(client,!1),{reason:AGENT_REASON.INVALID_ARGUMENTS,code:"invalid_arguments",message:errorMessage(error),next:[{command:buildCommandWithGlobalFlags(client.argv,"domains verify --help"),when:"See valid arguments and flags"}]})}let{args,flags}=parsedArgs,[domainName]=args;if(!domainName||args.length!==1)return writeCommandError(client,getOutputMode(client,!1),{reason:AGENT_REASON.MISSING_ARGUMENTS,code:"missing_arguments",message:"A single domain is required.",next:[{command:buildCommandWithGlobalFlags(client.argv,"domains verify <domain>"),when:"Replace <domain> with the domain to check"}],humanMessage:`${getCommandName("domains verify <domain>")} expects one argument`});let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return writeCommandError(client,getOutputMode(client,!1),{reason:AGENT_REASON.INVALID_ARGUMENTS,code:"invalid_arguments",message:formatResult.error,next:[{command:buildCommandWithGlobalFlags(client.argv,`domains verify ${shellQuoteCommandArg(domainName)} --json`),when:"Retry with the supported JSON format"}]});telemetry.trackCliArgumentDomain(domainName),telemetry.trackCliOptionProject(flags["--project"]),telemetry.trackCliFlagStrict(flags["--strict"]),telemetry.trackCliOptionFormat(flags["--format"]);let options={domainName,project:flags["--project"],strict:!!flags["--strict"],outputMode:getOutputMode(client,formatResult.jsonOutput)};try{return await run(client,options)}catch(error){return output_manager_default.stopSpinner(),isStructuredOutput(options.outputMode)?writeCommandError(client,options.outputMode,{reason:AGENT_REASON.API_ERROR,code:"api_error",message:errorMessage(error),next:[{command:buildVerifyCommand(client,options),when:"Retry the domain check"}]}):(output_manager_default.prettyError(error),1)}}async function run(client,options){let elapsed=stamp_default();options.outputMode==="human"&&output_manager_default.spinner(`Checking DNS configuration for ${options.domainName}`);let acquisition=await acquireVerificationFacts(client,options);if(output_manager_default.stopSpinner(),!acquisition.ok)return writeCommandError(client,options.outputMode,commandErrorForAcquisition(client,options,acquisition.error));let diagnosis=diagnoseDomain(acquisition.facts,buildDiagnosisCommands(client,options));return isStructuredOutput(options.outputMode)?client.stdout.write(renderStructuredOutput(diagnosis)):writeHumanOutput(renderHumanOutput(diagnosis,elapsed())),diagnosis.exitCode}function getOutputMode(client,jsonOutput){return jsonOutput?"json":shouldEmitNonInteractiveCommandError(client)?"non-interactive":"human"}function isStructuredOutput(mode){return mode!=="human"}function buildDiagnosisCommands(client,options){return{teamsList:buildTeamsListCommand(client),verify:scopeOverride=>buildVerifyCommand(client,options,scopeOverride),attachProject:projectIdOrName=>{let projectArgument=projectIdOrName==="<project>"?projectIdOrName:shellQuoteCommandArg(projectIdOrName);return buildCommandWithGlobalFlags(client.argv,`domains add ${shellQuoteCommandArg(options.domainName)} ${projectArgument}`)},openUrl:openUrlInBrowserCommand}}function commandErrorForAcquisition(client,options,error){let next=error.kind==="permission-denied"?[{command:buildTeamsListCommand(client),when:"List teams to find the scope that owns the project"},{command:buildVerifyCommand(client,options,"<team>"),when:"Replace <team> with the owning team and retry"}]:[{command:error.kind==="invalid-domain"?buildCommandWithGlobalFlags(client.argv,"domains verify <domain>"):buildVerifyCommand(client,options),when:error.kind==="invalid-domain"?"Replace <domain> with a valid domain name":"Retry the domain check"}];return{reason:reasonForAcquisitionError(error),code:error.code,message:error.message,next}}function reasonForAcquisitionError(error){return error.kind==="invalid-domain"?AGENT_REASON.INVALID_DOMAIN:error.kind==="permission-denied"?AGENT_REASON.PERMISSION_DENIED:error.kind==="timeout"?"timeout":error.kind==="unexpected-dns-response"?"unexpected_dns_response":AGENT_REASON.API_ERROR}function buildVerifyCommand(client,options,scopeOverride){let parts=["domains","verify",shellQuoteCommandArg(options.domainName)];return options.project&&parts.push("--project",shellQuoteCommandArg(options.project)),options.strict&&parts.push("--strict"),options.outputMode==="json"&&parts.push("--json"),scopeOverride&&parts.push("--scope",scopeOverride),buildCommandWithGlobalFlags(client.argv,parts.join(" "),packageName,scopeOverride?{excludeFlags:["--scope","--team","-S","-T"]}:void 0)}function buildTeamsListCommand(client){return buildCommandWithGlobalFlags(client.argv,"teams ls",packageName,{excludeFlags:["--scope","--team","-S","-T"]})}function shellQuoteCommandArg(value){return/^[a-zA-Z0-9_./:@%+,=-]+$/.test(value)?value:`"${value.replace(/(["\\$`])/g,"\\$1")}"`}function writeCommandError(client,outputMode,error){return output_manager_default.stopSpinner(),isStructuredOutput(outputMode)?client.stdout.write(renderStructuredError(error)):output_manager_default.error(error.humanMessage??error.message),getExitCodeForReason(error.reason)}function writeHumanOutput(result){result.lead.kind==="success"?output_manager_default.success(result.lead.message):output_manager_default.log(result.lead.message);for(let section of result.sections)output_manager_default.print(section)}function errorMessage(error){return error instanceof Error?error.message:String(error)}var DomainsTelemetryClient=class extends TelemetryClient{trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandMove(actual){this.trackCliSubcommand({subcommand:"move",value:actual})}trackCliSubcommandBuy(actual){this.trackCliSubcommand({subcommand:"buy",value:actual})}trackCliSubcommandCheck(actual){this.trackCliSubcommand({subcommand:"check",value:actual})}trackCliSubcommandPrice(actual){this.trackCliSubcommand({subcommand:"price",value:actual})}trackCliSubcommandSearch(actual){this.trackCliSubcommand({subcommand:"search",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandTransferIn(actual){this.trackCliSubcommand({subcommand:"transfer-in",value:actual})}trackCliSubcommandRenew(actual){this.trackCliSubcommand({subcommand:"renew",value:actual})}trackCliSubcommandAutoRenew(actual){this.trackCliSubcommand({subcommand:"auto-renew",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandVerify(actual){this.trackCliSubcommand({subcommand:"verify",value:actual})}};var COMMAND_CONFIG10={add:["add"],buy:["buy"],check:["check"],inspect:["inspect"],ls:["ls","list"],move:["move"],price:["price"],search:["search"],rm:["rm","remove"],transferIn:["transfer-in"],renew:["renew"],autoRenew:["auto-renew"],verify:["verify"]};async function main2(client){let parsedArgs,flagsSpecification=getFlagsSpecification(domainsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error,client),2}let telemetry=new DomainsTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand(parsedArgs.args.slice(1),COMMAND_CONFIG10),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("domains"),output_manager_default.print(help(domainsCommand,{columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{parent:domainsCommand,columns:client.stderr.columns})),0}switch(subcommand){case"add":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(addSubcommand)):(telemetry.trackCliSubcommandAdd(subcommandOriginal),add2(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(inspectSubcommand2)):(telemetry.trackCliSubcommandInspect(subcommandOriginal),inspect4(client,args));case"move":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(moveSubcommand)):(telemetry.trackCliSubcommandMove(subcommandOriginal),move(client,args));case"buy":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(buySubcommand)):(telemetry.trackCliSubcommandBuy(subcommandOriginal),buy(client,args));case"check":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(checkSubcommand)):(telemetry.trackCliSubcommandCheck(subcommandOriginal),check(client,args));case"price":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(priceSubcommand)):(telemetry.trackCliSubcommandPrice(subcommandOriginal),price(client,args));case"search":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(searchSubcommand)):(telemetry.trackCliSubcommandSearch(subcommandOriginal),search(client,args));case"rm":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(removeSubcommand2)):(telemetry.trackCliSubcommandRemove(subcommandOriginal),rm(client,args));case"transferIn":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(transferInSubcommand)):(telemetry.trackCliSubcommandTransferIn(subcommandOriginal),transferIn(client,args));case"renew":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(renewSubcommand)):(telemetry.trackCliSubcommandRenew(subcommandOriginal),renew(client,args));case"autoRenew":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(autoRenewSubcommand)):(telemetry.trackCliSubcommandAutoRenew(subcommandOriginal),autoRenew(client,args));case"verify":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(verifySubcommand)):(telemetry.trackCliSubcommandVerify(subcommandOriginal),verify(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(listSubcommand2)):(telemetry.trackCliSubcommandList(subcommandOriginal),ls(client,args))}}var import_chalk41=__toESM(require_source(),1);import{homedir as homedir2}from"node:os";var import_execa=__toESM(require_execa(),1);init_main();import{isAbsolute as isAbsolute6,join as join29}from"node:path";var PLUGIN_SOURCE="github:vercel/vercel-plugin",PLUGIN_ID="vercel-plugin";async function openCodeMajorVersion(){try{let{stdout}=await(0,import_execa.default)("opencode",["--version"],{stdin:"ignore",timeout:1e4}),match=/(\d+)\.\d+\.\d+/.exec(stdout);return match?Number(match[1]):void 0}catch{return}}function selectsPlugin(selector){return selector==="*"||(selector.endsWith(".*")?PLUGIN_ID.startsWith(selector.slice(0,-1)):selector===PLUGIN_ID)}async function pluginConfigState(home){let xdg=process.env.XDG_CONFIG_HOME,dir=process.env.OPENCODE_CONFIG_DIR||join29(xdg&&isAbsolute6(xdg)?xdg:join29(home,".config"),"opencode"),state={status:"missing"};for(let file of["opencode.json","opencode.jsonc"]){let path=join29(dir,file),text=await readFileOrNull(path);if(!text)continue;let errors=[],config=parse2(text,errors,{allowTrailingComma:!0});if(errors.length>0||!Array.isArray(config?.plugins))continue;let plugins=config.plugins;for(let entry2 of plugins){if(typeof entry2=="string"&&entry2.startsWith("-")){state.status!=="missing"&&selectsPlugin(entry2.slice(1))&&(state={status:"disabled",rule:entry2,file:path});continue}let target=typeof entry2=="string"?entry2:entry2?.package;(target===PLUGIN_SOURCE||state.status!=="missing"&&target&&selectsPlugin(target))&&(state={status:"enabled"})}}return state}async function setupOpenCodePlugin(client,opts){let majorVersion=await openCodeMajorVersion();if(majorVersion===void 0)return{status:"not_detected",message:"OpenCode was not detected on this machine."};if(majorVersion<2)return{status:"unsupported",message:"The Vercel plugin needs OpenCode 2. Upgrade OpenCode, then re-run `vercel setup plugin --agent opencode`."};let state=await pluginConfigState(opts.home);if(state.status==="disabled")return{status:"disabled",message:`The Vercel plugin is disabled by "${state.rule}" in ${state.file}. Remove that entry or add "${PLUGIN_ID}" after it to enable the plugin.`};if(state.status==="enabled")return{status:"up_to_date",message:"Vercel plugin for OpenCode is installed."};if(opts.dryRun)return{status:"dry_run",action:"install",message:"Setup would install the Vercel plugin for OpenCode."};if(!opts.yes){if(!opts.canPrompt)return{status:"confirmation_required",message:"Re-run with --yes to install the Vercel plugin for OpenCode."};if(printAlignedLabel("Plugin",`Vercel for OpenCode (${PLUGIN_SOURCE})`),!await client.input.confirm("Install this plugin?",!0))return{status:"declined",message:"Skipped the Vercel plugin for OpenCode."}}output_manager_default.spinner("Installing the Vercel plugin for OpenCode\u2026");try{await(0,import_execa.default)("opencode",["plugin","add",PLUGIN_SOURCE],{stdin:"ignore",timeout:12e4})}catch{return{status:"failed",message:`Failed to install the Vercel plugin for OpenCode. Run \`opencode plugin add ${PLUGIN_SOURCE}\` to finish setup.`}}finally{output_manager_default.stopSpinner()}return{status:"installed",message:"Installed the Vercel plugin for OpenCode. Restart OpenCode, then run /mcps to sign in to the Vercel MCP server."}}var SetupTelemetryClient=class extends TelemetryClient{trackCliSubcommandPlugin(actual){this.trackCliSubcommand({subcommand:"plugin",value:actual})}trackCliSubcommandGateway(actual){this.trackCliSubcommand({subcommand:"gateway",value:actual})}trackCliSubcommandSkills(actual){this.trackCliSubcommand({subcommand:"skills",value:actual})}trackCliOptionAgent(agents){for(let agent of agents??[])this.trackCliOption({option:"agent",value:agent})}trackCliFlagPlugin(v){v&&this.trackCliFlag("plugin")}trackCliFlagGateway(v){v&&this.trackCliFlag("gateway")}trackCliFlagDryRun(v){v&&this.trackCliFlag("dry-run")}trackCliFlagAll(v){v&&this.trackCliFlag("all")}trackCliOptionKey(v){v!==void 0&&this.trackCliOption({option:"key",value:this.redactedValue})}trackCliFlagReconfigure(v){v&&this.trackCliFlag("reconfigure")}trackCliFlagNoSessionMigration(v){v&&this.trackCliFlag("no-session-migration")}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}};var COMMAND_CONFIG11={plugin:getCommandAliases(pluginSubcommand),gateway:getCommandAliases(gatewaySubcommand),skills:getCommandAliases(skillsSubcommand)},STEP_LABELS={plugin:"Vercel plugin",gateway:"AI Gateway"};async function setup(client){let machine=shouldEmitNonInteractiveCommandError(client),telemetry=new SetupTelemetryClient({opts:{store:client.telemetryEventStore}}),routingArgs;try{routingArgs=parseArguments(client.argv.slice(2),getFlagsSpecification(setupCommand.options),{permissive:!0})}catch(error){return printError(error),2}let{subcommand,subcommandOriginal}=getSubcommand(routingArgs.args.slice(1),COMMAND_CONFIG11);if(subcommand==="skills"){if(routingArgs.flags["--help"])return telemetry.trackCliFlagHelp("setup",subcommandOriginal),output_manager_default.print(help(skillsSubcommand,{parent:setupCommand,columns:client.stderr.columns})),0;telemetry.trackCliSubcommandSkills(subcommandOriginal);let{default:setupSkills}=await import("./chunks/skills-4J2NC2QI.js");return setupSkills(client)}let stepSubcommand=subcommand==="plugin"||subcommand==="gateway"?subcommand:void 0,command=stepSubcommand==="plugin"?pluginSubcommand:stepSubcommand==="gateway"?gatewaySubcommand:setupCommand,parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),getFlagsSpecification(command.options))}catch(error){return machine&&writeSetupError(client,AGENT_REASON.INVALID_ARGUMENTS,`Invalid setup arguments. Run vercel setup${stepSubcommand?` ${stepSubcommand}`:""} --help for usage.`),printError(error),2}let flags=parsedArgs.flags;if(flags["--help"])return telemetry.trackCliFlagHelp("setup",stepSubcommand?subcommandOriginal:void 0),output_manager_default.print(help(command,{parent:stepSubcommand?setupCommand:void 0,columns:client.stderr.columns})),0;if(parsedArgs.args.length>(stepSubcommand?2:1)){let message="The setup command does not accept positional arguments. Use vercel setup plugin, gateway, or skills to run one step.";return machine&&writeSetupError(client,AGENT_REASON.INVALID_ARGUMENTS,message),output_manager_default.fatal(message),2}flags["--plugin"]&&warnDeprecatedSubcommand(client,"setup --plugin","setup plugin"),flags["--gateway"]&&warnDeprecatedSubcommand(client,"setup --gateway","setup gateway");let onlyPlugin=stepSubcommand==="plugin"||!!flags["--plugin"],onlyGateway=stepSubcommand==="gateway"||!!flags["--gateway"],dryRun=flags["--dry-run"],yes=flags["--yes"],agents=flags["--agent"]?[...new Set(flags["--agent"].map(agent=>agent.toLowerCase()))]:void 0;if(agents?.some(agent=>!getAgentById(agent)||onlyPlugin&&!onlyGateway&&!["claude-code","codex","opencode"].includes(agent))){let message=onlyPlugin&&!onlyGateway?"Plugin setup supports --agent claude-code, --agent codex, and --agent opencode.":"Unknown coding agent. Run vercel ai-gateway setup --help for supported agents.";return machine&&writeSetupError(client,AGENT_REASON.INVALID_ARGUMENTS,message),output_manager_default.fatal(message),2}stepSubcommand==="plugin"?telemetry.trackCliSubcommandPlugin(subcommandOriginal):stepSubcommand==="gateway"&&telemetry.trackCliSubcommandGateway(subcommandOriginal),telemetry.trackCliOptionAgent(agents),telemetry.trackCliFlagPlugin(flags["--plugin"]),telemetry.trackCliFlagGateway(flags["--gateway"]),telemetry.trackCliFlagDryRun(dryRun),telemetry.trackCliFlagYes(yes),telemetry.trackCliFlagAll(flags["--all"]),telemetry.trackCliOptionKey(flags["--key"]),telemetry.trackCliFlagReconfigure(flags["--reconfigure"]),telemetry.trackCliFlagNoSessionMigration(flags["--no-session-migration"]);let steps=[];(onlyPlugin||!onlyGateway)&&steps.push("plugin"),(onlyGateway||!onlyPlugin)&&steps.push("gateway");let canPrompt2=!!client.stdin.isTTY&&!machine,home=homedir2(),outcomes=new Map;try{for(let step of steps){output_manager_default.print(`
192
+ `}function getDnsMethods(diagnosis){let step=diagnosis.steps.find(candidate=>candidate.kind==="configure-dns");return step?.kind==="configure-dns"?step.methods:[]}function getRecommendedNameservers(methods){let method=methods.find(candidate=>candidate.kind==="nameservers");return method?.kind==="nameservers"?method.nameservers:[]}function serializeProject(project){return project.kind==="none"?null:project.kind==="attached"?{idOrName:project.label,attached:!0,verified:project.domain.verified,verification:project.domain.verification??[],verificationError:project.verificationError?{code:project.verificationError.code||"verification_failed",message:project.verificationError.serverMessage||project.verificationError.message}:null}:{idOrName:project.idOrName,attached:!1}}async function verify(client,argv){let telemetry=new DomainsVerifyTelemetryClient({opts:{store:client.telemetryEventStore}}),flagsSpecification=getFlagsSpecification(verifySubcommand.options),parsedArgs;try{parsedArgs=parseArguments(argv,flagsSpecification)}catch(error){return writeCommandError(client,getOutputMode(client,!1),{reason:AGENT_REASON.INVALID_ARGUMENTS,code:"invalid_arguments",message:errorMessage(error),next:[{command:buildCommandWithGlobalFlags(client.argv,"domains verify --help"),when:"See valid arguments and flags"}]})}let{args,flags}=parsedArgs,[domainName]=args;if(!domainName||args.length!==1)return writeCommandError(client,getOutputMode(client,!1),{reason:AGENT_REASON.MISSING_ARGUMENTS,code:"missing_arguments",message:"A single domain is required.",next:[{command:buildCommandWithGlobalFlags(client.argv,"domains verify <domain>"),when:"Replace <domain> with the domain to check"}],humanMessage:`${getCommandName("domains verify <domain>")} expects one argument`});let formatResult=validateJsonOutput(flags);if(!formatResult.valid)return writeCommandError(client,getOutputMode(client,!1),{reason:AGENT_REASON.INVALID_ARGUMENTS,code:"invalid_arguments",message:formatResult.error,next:[{command:buildCommandWithGlobalFlags(client.argv,`domains verify ${shellQuoteCommandArg(domainName)} --json`),when:"Retry with the supported JSON format"}]});telemetry.trackCliArgumentDomain(domainName),telemetry.trackCliOptionProject(flags["--project"]),telemetry.trackCliFlagStrict(flags["--strict"]),telemetry.trackCliOptionFormat(flags["--format"]);let options={domainName,project:flags["--project"],strict:!!flags["--strict"],outputMode:getOutputMode(client,formatResult.jsonOutput)};try{return await run(client,options)}catch(error){return output_manager_default.stopSpinner(),isStructuredOutput(options.outputMode)?writeCommandError(client,options.outputMode,{reason:AGENT_REASON.API_ERROR,code:"api_error",message:errorMessage(error),next:[{command:buildVerifyCommand(client,options),when:"Retry the domain check"}]}):(output_manager_default.prettyError(error),1)}}async function run(client,options){let elapsed=stamp_default();options.outputMode==="human"&&output_manager_default.spinner(`Checking DNS configuration for ${options.domainName}`);let acquisition=await acquireVerificationFacts(client,options);if(output_manager_default.stopSpinner(),!acquisition.ok)return writeCommandError(client,options.outputMode,commandErrorForAcquisition(client,options,acquisition.error));let diagnosis=diagnoseDomain(acquisition.facts,buildDiagnosisCommands(client,options));return isStructuredOutput(options.outputMode)?client.stdout.write(renderStructuredOutput(diagnosis)):writeHumanOutput(renderHumanOutput(diagnosis,elapsed())),diagnosis.exitCode}function getOutputMode(client,jsonOutput){return jsonOutput?"json":shouldEmitNonInteractiveCommandError(client)?"non-interactive":"human"}function isStructuredOutput(mode){return mode!=="human"}function buildDiagnosisCommands(client,options){return{teamsList:buildTeamsListCommand(client),verify:scopeOverride=>buildVerifyCommand(client,options,scopeOverride),attachProject:projectIdOrName=>{let projectArgument=projectIdOrName==="<project>"?projectIdOrName:shellQuoteCommandArg(projectIdOrName);return buildCommandWithGlobalFlags(client.argv,`domains add ${shellQuoteCommandArg(options.domainName)} ${projectArgument}`)},openUrl:openUrlInBrowserCommand}}function commandErrorForAcquisition(client,options,error){let next=error.kind==="permission-denied"?[{command:buildTeamsListCommand(client),when:"List teams to find the scope that owns the project"},{command:buildVerifyCommand(client,options,"<team>"),when:"Replace <team> with the owning team and retry"}]:[{command:error.kind==="invalid-domain"?buildCommandWithGlobalFlags(client.argv,"domains verify <domain>"):buildVerifyCommand(client,options),when:error.kind==="invalid-domain"?"Replace <domain> with a valid domain name":"Retry the domain check"}];return{reason:reasonForAcquisitionError(error),code:error.code,message:error.message,next}}function reasonForAcquisitionError(error){return error.kind==="invalid-domain"?AGENT_REASON.INVALID_DOMAIN:error.kind==="permission-denied"?AGENT_REASON.PERMISSION_DENIED:error.kind==="timeout"?"timeout":error.kind==="unexpected-dns-response"?"unexpected_dns_response":AGENT_REASON.API_ERROR}function buildVerifyCommand(client,options,scopeOverride){let parts=["domains","verify",shellQuoteCommandArg(options.domainName)];return options.project&&parts.push("--project",shellQuoteCommandArg(options.project)),options.strict&&parts.push("--strict"),options.outputMode==="json"&&parts.push("--json"),scopeOverride&&parts.push("--scope",scopeOverride),buildCommandWithGlobalFlags(client.argv,parts.join(" "),packageName,scopeOverride?{excludeFlags:["--scope","--team","-S","-T"]}:void 0)}function buildTeamsListCommand(client){return buildCommandWithGlobalFlags(client.argv,"teams ls",packageName,{excludeFlags:["--scope","--team","-S","-T"]})}function shellQuoteCommandArg(value){return/^[a-zA-Z0-9_./:@%+,=-]+$/.test(value)?value:`"${value.replace(/(["\\$`])/g,"\\$1")}"`}function writeCommandError(client,outputMode,error){return output_manager_default.stopSpinner(),isStructuredOutput(outputMode)?client.stdout.write(renderStructuredError(error)):output_manager_default.error(error.humanMessage??error.message),getExitCodeForReason(error.reason)}function writeHumanOutput(result){result.lead.kind==="success"?output_manager_default.success(result.lead.message):output_manager_default.log(result.lead.message);for(let section of result.sections)output_manager_default.print(section)}function errorMessage(error){return error instanceof Error?error.message:String(error)}var DomainsTelemetryClient=class extends TelemetryClient{trackCliSubcommandAdd(actual){this.trackCliSubcommand({subcommand:"add",value:actual})}trackCliSubcommandInspect(actual){this.trackCliSubcommand({subcommand:"inspect",value:actual})}trackCliSubcommandMove(actual){this.trackCliSubcommand({subcommand:"move",value:actual})}trackCliSubcommandBuy(actual){this.trackCliSubcommand({subcommand:"buy",value:actual})}trackCliSubcommandCheck(actual){this.trackCliSubcommand({subcommand:"check",value:actual})}trackCliSubcommandPrice(actual){this.trackCliSubcommand({subcommand:"price",value:actual})}trackCliSubcommandSearch(actual){this.trackCliSubcommand({subcommand:"search",value:actual})}trackCliSubcommandRemove(actual){this.trackCliSubcommand({subcommand:"remove",value:actual})}trackCliSubcommandTransferIn(actual){this.trackCliSubcommand({subcommand:"transfer-in",value:actual})}trackCliSubcommandRenew(actual){this.trackCliSubcommand({subcommand:"renew",value:actual})}trackCliSubcommandAutoRenew(actual){this.trackCliSubcommand({subcommand:"auto-renew",value:actual})}trackCliSubcommandList(actual){this.trackCliSubcommand({subcommand:"list",value:actual})}trackCliSubcommandVerify(actual){this.trackCliSubcommand({subcommand:"verify",value:actual})}};var COMMAND_CONFIG10={add:["add"],buy:["buy"],check:["check"],inspect:["inspect"],ls:["ls","list"],move:["move"],price:["price"],search:["search"],rm:["rm","remove"],transferIn:["transfer-in"],renew:["renew"],autoRenew:["auto-renew"],verify:["verify"]};async function main2(client){let parsedArgs,flagsSpecification=getFlagsSpecification(domainsCommand.options);try{parsedArgs=parseArguments(client.argv.slice(2),flagsSpecification,{permissive:!0})}catch(error){return printError(error,client),2}let telemetry=new DomainsTelemetryClient({opts:{store:client.telemetryEventStore}}),{subcommand,args,subcommandOriginal}=getSubcommand(parsedArgs.args.slice(1),COMMAND_CONFIG10),needHelp=parsedArgs.flags["--help"];if(!subcommand&&needHelp)return telemetry.trackCliFlagHelp("domains"),output_manager_default.print(help(domainsCommand,{columns:client.stderr.columns})),0;function printHelp(command){return output_manager_default.print(help(command,{parent:domainsCommand,columns:client.stderr.columns})),0}switch(subcommand){case"add":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(addSubcommand)):(telemetry.trackCliSubcommandAdd(subcommandOriginal),add2(client,args));case"inspect":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(inspectSubcommand2)):(telemetry.trackCliSubcommandInspect(subcommandOriginal),inspect4(client,args));case"move":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(moveSubcommand)):(telemetry.trackCliSubcommandMove(subcommandOriginal),move(client,args));case"buy":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(buySubcommand)):(telemetry.trackCliSubcommandBuy(subcommandOriginal),buy(client,args));case"check":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(checkSubcommand)):(telemetry.trackCliSubcommandCheck(subcommandOriginal),check(client,args));case"price":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(priceSubcommand)):(telemetry.trackCliSubcommandPrice(subcommandOriginal),price(client,args));case"search":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(searchSubcommand)):(telemetry.trackCliSubcommandSearch(subcommandOriginal),search(client,args));case"rm":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(removeSubcommand2)):(telemetry.trackCliSubcommandRemove(subcommandOriginal),rm(client,args));case"transferIn":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(transferInSubcommand)):(telemetry.trackCliSubcommandTransferIn(subcommandOriginal),transferIn(client,args));case"renew":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(renewSubcommand)):(telemetry.trackCliSubcommandRenew(subcommandOriginal),renew(client,args));case"autoRenew":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(autoRenewSubcommand)):(telemetry.trackCliSubcommandAutoRenew(subcommandOriginal),autoRenew(client,args));case"verify":return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(verifySubcommand)):(telemetry.trackCliSubcommandVerify(subcommandOriginal),verify(client,args));default:return needHelp?(telemetry.trackCliFlagHelp("domains",subcommandOriginal),printHelp(listSubcommand2)):(telemetry.trackCliSubcommandList(subcommandOriginal),ls(client,args))}}var import_chalk41=__toESM(require_source(),1);import{homedir as homedir2}from"node:os";var import_execa=__toESM(require_execa(),1);init_main();import{isAbsolute as isAbsolute6,join as join29}from"node:path";var PLUGIN_SOURCE="github:vercel/vercel-plugin",PLUGIN_ID="vercel-plugin";async function openCodeMajorVersion(){try{let{stdout}=await(0,import_execa.default)("opencode",["--version"],{stdin:"ignore",timeout:1e4}),match=/(\d+)\.\d+\.\d+/.exec(stdout);return match?Number(match[1]):void 0}catch{return}}function selectsPlugin(selector){return selector==="*"||(selector.endsWith(".*")?PLUGIN_ID.startsWith(selector.slice(0,-1)):selector===PLUGIN_ID)}async function pluginConfigState(home){let xdg=process.env.XDG_CONFIG_HOME,dir=process.env.OPENCODE_CONFIG_DIR||join29(xdg&&isAbsolute6(xdg)?xdg:join29(home,".config"),"opencode"),state={status:"missing"};for(let file of["opencode.json","opencode.jsonc"]){let path=join29(dir,file),text=await readFileOrNull(path);if(!text)continue;let errors=[],config=parse2(text,errors,{allowTrailingComma:!0});if(errors.length>0||!Array.isArray(config?.plugins))continue;let plugins=config.plugins;for(let entry2 of plugins){if(typeof entry2=="string"&&entry2.startsWith("-")){state.status!=="missing"&&selectsPlugin(entry2.slice(1))&&(state={status:"disabled",rule:entry2,file:path});continue}let target=typeof entry2=="string"?entry2:entry2?.package;(target===PLUGIN_SOURCE||state.status!=="missing"&&target&&selectsPlugin(target))&&(state={status:"enabled"})}}return state}async function setupOpenCodePlugin(client,opts){let majorVersion=await openCodeMajorVersion();if(majorVersion===void 0)return{status:"not_detected",message:"OpenCode was not detected on this machine."};if(majorVersion<2)return{status:"unsupported",message:"The Vercel plugin needs OpenCode 2. Upgrade OpenCode, then re-run `vercel setup plugin --agent opencode`."};let state=await pluginConfigState(opts.home);if(state.status==="disabled")return{status:"disabled",message:`The Vercel plugin is disabled by "${state.rule}" in ${state.file}. Remove that entry or add "${PLUGIN_ID}" after it to enable the plugin.`};if(state.status==="enabled")return{status:"up_to_date",message:"Vercel plugin for OpenCode is installed."};if(opts.dryRun)return{status:"dry_run",action:"install",message:"Setup would install the Vercel plugin for OpenCode."};if(!opts.yes){if(!opts.canPrompt)return{status:"confirmation_required",message:"Re-run with --yes to install the Vercel plugin for OpenCode."};if(printAlignedLabel("Plugin",`Vercel for OpenCode (${PLUGIN_SOURCE})`),!await client.input.confirm("Install this plugin?",!0))return{status:"declined",message:"Skipped the Vercel plugin for OpenCode."}}output_manager_default.spinner("Installing the Vercel plugin for OpenCode\u2026");try{await(0,import_execa.default)("opencode",["plugin","add",PLUGIN_SOURCE],{stdin:"ignore",timeout:12e4})}catch{return{status:"failed",message:`Failed to install the Vercel plugin for OpenCode. Run \`opencode plugin add ${PLUGIN_SOURCE}\` to finish setup.`}}finally{output_manager_default.stopSpinner()}return{status:"installed",message:"Installed the Vercel plugin for OpenCode. Restart OpenCode, then run /mcps to sign in to the Vercel MCP server."}}var SetupTelemetryClient=class extends TelemetryClient{trackCliSubcommandPlugin(actual){this.trackCliSubcommand({subcommand:"plugin",value:actual})}trackCliSubcommandGateway(actual){this.trackCliSubcommand({subcommand:"gateway",value:actual})}trackCliSubcommandSkills(actual){this.trackCliSubcommand({subcommand:"skills",value:actual})}trackCliOptionAgent(agents){for(let agent of agents??[])this.trackCliOption({option:"agent",value:agent})}trackCliFlagPlugin(v){v&&this.trackCliFlag("plugin")}trackCliFlagGateway(v){v&&this.trackCliFlag("gateway")}trackCliFlagDryRun(v){v&&this.trackCliFlag("dry-run")}trackCliFlagAll(v){v&&this.trackCliFlag("all")}trackCliOptionKey(v){v!==void 0&&this.trackCliOption({option:"key",value:this.redactedValue})}trackCliFlagReconfigure(v){v&&this.trackCliFlag("reconfigure")}trackCliFlagNoSessionMigration(v){v&&this.trackCliFlag("no-session-migration")}trackCliFlagYes(v){v&&this.trackCliFlag("yes")}};var COMMAND_CONFIG11={plugin:getCommandAliases(pluginSubcommand),gateway:getCommandAliases(gatewaySubcommand),skills:getCommandAliases(skillsSubcommand)},STEP_LABELS={plugin:"Vercel plugin",gateway:"AI Gateway"};async function setup(client){let machine=shouldEmitNonInteractiveCommandError(client),telemetry=new SetupTelemetryClient({opts:{store:client.telemetryEventStore}}),routingArgs;try{routingArgs=parseArguments(client.argv.slice(2),getFlagsSpecification(setupCommand.options),{permissive:!0})}catch(error){return printError(error),2}let{subcommand,subcommandOriginal}=getSubcommand(routingArgs.args.slice(1),COMMAND_CONFIG11);if(subcommand==="skills"){if(routingArgs.flags["--help"])return telemetry.trackCliFlagHelp("setup",subcommandOriginal),output_manager_default.print(help(skillsSubcommand,{parent:setupCommand,columns:client.stderr.columns})),0;telemetry.trackCliSubcommandSkills(subcommandOriginal);let{default:setupSkills}=await import("./chunks/skills-RKIGVVNM.js");return setupSkills(client)}let stepSubcommand=subcommand==="plugin"||subcommand==="gateway"?subcommand:void 0,command=stepSubcommand==="plugin"?pluginSubcommand:stepSubcommand==="gateway"?gatewaySubcommand:setupCommand,parsedArgs;try{parsedArgs=parseArguments(client.argv.slice(2),getFlagsSpecification(command.options))}catch(error){return machine&&writeSetupError(client,AGENT_REASON.INVALID_ARGUMENTS,`Invalid setup arguments. Run vercel setup${stepSubcommand?` ${stepSubcommand}`:""} --help for usage.`),printError(error),2}let flags=parsedArgs.flags;if(flags["--help"])return telemetry.trackCliFlagHelp("setup",stepSubcommand?subcommandOriginal:void 0),output_manager_default.print(help(command,{parent:stepSubcommand?setupCommand:void 0,columns:client.stderr.columns})),0;if(parsedArgs.args.length>(stepSubcommand?2:1)){let message="The setup command does not accept positional arguments. Use vercel setup plugin, gateway, or skills to run one step.";return machine&&writeSetupError(client,AGENT_REASON.INVALID_ARGUMENTS,message),output_manager_default.fatal(message),2}flags["--plugin"]&&warnDeprecatedSubcommand(client,"setup --plugin","setup plugin"),flags["--gateway"]&&warnDeprecatedSubcommand(client,"setup --gateway","setup gateway");let onlyPlugin=stepSubcommand==="plugin"||!!flags["--plugin"],onlyGateway=stepSubcommand==="gateway"||!!flags["--gateway"],dryRun=flags["--dry-run"],yes=flags["--yes"],agents=flags["--agent"]?[...new Set(flags["--agent"].map(agent=>agent.toLowerCase()))]:void 0;if(agents?.some(agent=>!getAgentById(agent)||onlyPlugin&&!onlyGateway&&!["claude-code","codex","opencode"].includes(agent))){let message=onlyPlugin&&!onlyGateway?"Plugin setup supports --agent claude-code, --agent codex, and --agent opencode.":"Unknown coding agent. Run vercel ai-gateway setup --help for supported agents.";return machine&&writeSetupError(client,AGENT_REASON.INVALID_ARGUMENTS,message),output_manager_default.fatal(message),2}stepSubcommand==="plugin"?telemetry.trackCliSubcommandPlugin(subcommandOriginal):stepSubcommand==="gateway"&&telemetry.trackCliSubcommandGateway(subcommandOriginal),telemetry.trackCliOptionAgent(agents),telemetry.trackCliFlagPlugin(flags["--plugin"]),telemetry.trackCliFlagGateway(flags["--gateway"]),telemetry.trackCliFlagDryRun(dryRun),telemetry.trackCliFlagYes(yes),telemetry.trackCliFlagAll(flags["--all"]),telemetry.trackCliOptionKey(flags["--key"]),telemetry.trackCliFlagReconfigure(flags["--reconfigure"]),telemetry.trackCliFlagNoSessionMigration(flags["--no-session-migration"]);let steps=[];(onlyPlugin||!onlyGateway)&&steps.push("plugin"),(onlyGateway||!onlyPlugin)&&steps.push("gateway");let canPrompt2=!!client.stdin.isTTY&&!machine,home=homedir2(),outcomes=new Map;try{for(let step of steps){output_manager_default.print(`
193
193
  ${import_chalk41.default.bold(` ${STEP_LABELS[step]}`)}
194
194
  `);let outcome=step==="plugin"?await runPluginStep(client,{yes:!!yes,dryRun:!!dryRun,canPrompt:canPrompt2,home,machine,onlyStep:steps.length===1,agents}):await runGatewayStep(client,{yes:!!yes,dryRun:!!dryRun,agents,all:!!flags["--all"],key:flags["--key"],reconfigure:!!flags["--reconfigure"],noSessionMigration:!!flags["--no-session-migration"]});if(outcomes.set(step,outcome),machine&&!outcome.ok)break}}catch(error){return output_manager_default.stopSpinner(),machine&&writeSetupError(client,"setup_failed","Failed to complete setup."),printError(error),1}let failed=[...outcomes.values()].some(o=>!o.ok),complete=[...outcomes.values()].every(o=>o.complete),gutter=failed?import_chalk41.default.red("\u2717"):complete?import_chalk41.default.green("\u2713"):" ",heading=complete?dryRun?"Dry run complete":"Setup complete":"Setup incomplete";output_manager_default.print(`
195
195
  ${gutter} ${import_chalk41.default.bold(heading)}