@vercel/cli-support 65.3.1 → 65.5.0-snapshot-13615777d933

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 (324) hide show
  1. package/README.md +23 -1
  2. package/dist/chunks/add-6UOKR26K.js +8 -0
  3. package/dist/chunks/add-GULZ6EGJ.js +8 -0
  4. package/dist/chunks/add-RPAOJH5O.js +8 -0
  5. package/dist/chunks/build-MLAKPRSC.js +7 -0
  6. package/dist/chunks/{chunk-ADLBLGT3.js → chunk-26QK3I2S.js} +1 -1
  7. package/dist/chunks/chunk-2BKALEOP.js +7 -0
  8. package/dist/chunks/chunk-2FHZYQPY.js +7 -0
  9. package/dist/chunks/{chunk-6KVHNQW4.js → chunk-2QIJEHNE.js} +1 -1
  10. package/dist/chunks/{chunk-3JGBBS6V.js → chunk-36NK2Z3C.js} +1 -1
  11. package/dist/chunks/{chunk-D6REP5QQ.js → chunk-3E364MJE.js} +1 -1
  12. package/dist/chunks/{chunk-IGDG5CWT.js → chunk-3H36RI7C.js} +1 -1
  13. package/dist/chunks/{chunk-D2BZMGHP.js → chunk-3NG2EYQ5.js} +1 -1
  14. package/dist/chunks/{chunk-WCWP4GBR.js → chunk-4G7ZQONX.js} +1 -1
  15. package/dist/chunks/{chunk-7BGKE3JW.js → chunk-4HJGSSSZ.js} +1 -1
  16. package/dist/chunks/{chunk-BBKEP7RO.js → chunk-55H6G46X.js} +1 -1
  17. package/dist/chunks/chunk-5CZNUB7Y.js +7 -0
  18. package/dist/chunks/{chunk-URPEIX6M.js → chunk-5EMSOR2P.js} +1 -1
  19. package/dist/chunks/{chunk-OCQPXOTX.js → chunk-5K426HWC.js} +1 -1
  20. package/dist/chunks/{chunk-773GOZIR.js → chunk-5SIC5273.js} +1 -1
  21. package/dist/chunks/chunk-5WYPJ2T5.js +25 -0
  22. package/dist/chunks/{chunk-F2SWJEYV.js → chunk-6IATT2ID.js} +2 -2
  23. package/dist/chunks/{chunk-S5IWVPYT.js → chunk-6WMO5G45.js} +3 -3
  24. package/dist/chunks/{chunk-6OVX3PWM.js → chunk-75JI2SZX.js} +1 -1
  25. package/dist/chunks/{chunk-LRYGNQ6C.js → chunk-7G4PQR6J.js} +1 -1
  26. package/dist/chunks/chunk-7SAEZ4NC.js +7 -0
  27. package/dist/chunks/{chunk-22FDWPWY.js → chunk-7VTPAXDC.js} +1 -1
  28. package/dist/chunks/chunk-A2UZ2O7H.js +7 -0
  29. package/dist/chunks/{chunk-3LIKVGFT.js → chunk-A3RU52F4.js} +1 -1
  30. package/dist/chunks/{chunk-FDNYYENK.js → chunk-AIRQFG5A.js} +1 -1
  31. package/dist/chunks/{chunk-76SVVWPH.js → chunk-AOC6XXOO.js} +1 -1
  32. package/dist/chunks/chunk-ARQMFBV4.js +11 -0
  33. package/dist/chunks/{chunk-NQWGRKF4.js → chunk-AUY363W7.js} +1 -1
  34. package/dist/chunks/chunk-BGWS5R5R.js +9 -0
  35. package/dist/chunks/chunk-C6IITJ5S.js +7 -0
  36. package/dist/chunks/{chunk-LKLH6DZP.js → chunk-CLVEFWEX.js} +1 -1
  37. package/dist/chunks/{chunk-2WYYGGEO.js → chunk-CU2FTX57.js} +1 -1
  38. package/dist/chunks/{chunk-VMMMBWD3.js → chunk-CWO4HMKU.js} +1 -1
  39. package/dist/chunks/{chunk-CEMPU323.js → chunk-CZINAGH6.js} +1 -1
  40. package/dist/chunks/{chunk-TZFDVQ72.js → chunk-DAUAVRFC.js} +1 -1
  41. package/dist/chunks/{chunk-GA277JFB.js → chunk-DPM33VFZ.js} +1 -1
  42. package/dist/chunks/{chunk-Q5ODLDCU.js → chunk-DSY2S2YT.js} +1 -1
  43. package/dist/chunks/{chunk-XP3FT56R.js → chunk-DWOJP4ST.js} +3 -3
  44. package/dist/chunks/chunk-ED3VA7D4.js +7 -0
  45. package/dist/chunks/{chunk-GG5RME4X.js → chunk-EE2FTI3R.js} +1 -1
  46. package/dist/chunks/{chunk-SXOSF4O6.js → chunk-EFEQQXRU.js} +1 -1
  47. package/dist/chunks/{chunk-IUXSJWL3.js → chunk-EPO7P734.js} +1 -1
  48. package/dist/chunks/{chunk-X4762EE4.js → chunk-EQT2VHL2.js} +1 -1
  49. package/dist/chunks/chunk-ETEVOJQJ.js +8 -0
  50. package/dist/chunks/chunk-EWP5WICJ.js +10 -0
  51. package/dist/chunks/chunk-F22QLVTX.js +7 -0
  52. package/dist/chunks/{chunk-COM5YCHF.js → chunk-FAEC4BER.js} +1 -1
  53. package/dist/chunks/{chunk-LSQREJXO.js → chunk-FAELJM4F.js} +1 -1
  54. package/dist/chunks/{chunk-NTZ5WWYV.js → chunk-FNA4MIOH.js} +1 -1
  55. package/dist/chunks/{chunk-OWOWPOIE.js → chunk-GFD6UAAO.js} +2 -2
  56. package/dist/chunks/{chunk-DUT4U5YY.js → chunk-GP55VEOQ.js} +1 -1
  57. package/dist/chunks/chunk-GVPVWHFK.js +7 -0
  58. package/dist/chunks/chunk-HMWDOAWO.js +7 -0
  59. package/dist/chunks/{chunk-7L2K4OKM.js → chunk-HVDGNAPM.js} +1 -1
  60. package/dist/chunks/{chunk-7Y46LB43.js → chunk-I2WEQWCA.js} +1 -1
  61. package/dist/chunks/{chunk-ULHNMQ7C.js → chunk-IC3THLYP.js} +1 -1
  62. package/dist/chunks/{chunk-IQKGQ2Y2.js → chunk-J6L5MDTX.js} +1 -1
  63. package/dist/chunks/{chunk-OMCGXRSA.js → chunk-JCGEXU7T.js} +3 -3
  64. package/dist/chunks/{chunk-Y6AGOERS.js → chunk-JGMJP4T3.js} +1 -1
  65. package/dist/chunks/{chunk-YK7XLFU2.js → chunk-JHNLBVO2.js} +1 -1
  66. package/dist/chunks/{chunk-OQCMRU3J.js → chunk-JMLKK7RL.js} +2 -2
  67. package/dist/chunks/chunk-JSAY52FE.js +7 -0
  68. package/dist/chunks/{chunk-YN3C5BL5.js → chunk-JWUXHL35.js} +1 -1
  69. package/dist/chunks/{chunk-XXXRTHTP.js → chunk-JXAEI2GJ.js} +1 -1
  70. package/dist/chunks/{chunk-QMCHGGDX.js → chunk-KHADRPBJ.js} +1 -1
  71. package/dist/chunks/{chunk-43GBAKL2.js → chunk-KWKEBKUR.js} +1 -1
  72. package/dist/chunks/chunk-KY7LDQRX.js +7 -0
  73. package/dist/chunks/{chunk-NEFDNROD.js → chunk-L4XLDN6T.js} +1 -1
  74. package/dist/chunks/chunk-LFOWP74R.js +7 -0
  75. package/dist/chunks/{chunk-VQSLPYAF.js → chunk-LOO42IMZ.js} +1 -1
  76. package/dist/chunks/{chunk-2U7DJZSQ.js → chunk-LT5UZRMK.js} +1 -1
  77. package/dist/chunks/{chunk-FUX6LKNP.js → chunk-LUX4PBJL.js} +1 -1
  78. package/dist/chunks/chunk-M7LUSXMG.js +7 -0
  79. package/dist/chunks/{chunk-ANMDN3EG.js → chunk-MFW6IJIK.js} +1 -1
  80. package/dist/chunks/{chunk-OQPXJCMK.js → chunk-MLGQ233X.js} +1 -1
  81. package/dist/chunks/chunk-MY4MONOH.js +7 -0
  82. package/dist/chunks/{chunk-ZH6KHD55.js → chunk-MZQEDXOH.js} +2 -2
  83. package/dist/chunks/chunk-N5CXIFE2.js +7 -0
  84. package/dist/chunks/{chunk-XZV4BFM5.js → chunk-NM44RWS6.js} +1 -1
  85. package/dist/chunks/chunk-NVNE3W7S.js +8 -0
  86. package/dist/chunks/chunk-NZPGWZLV.js +9 -0
  87. package/dist/chunks/chunk-O7COT3YB.js +7 -0
  88. package/dist/chunks/{chunk-3KKFLKQG.js → chunk-ODAV7Z2H.js} +1 -1
  89. package/dist/chunks/{chunk-HCRD3JFL.js → chunk-OKNDHNH6.js} +1 -1
  90. package/dist/chunks/{chunk-LCHECISY.js → chunk-OQX4YVGU.js} +1 -1
  91. package/dist/chunks/chunk-ORJBK5FT.js +9 -0
  92. package/dist/chunks/chunk-OTYF3ZZW.js +7 -0
  93. package/dist/chunks/{chunk-FGFLTLEA.js → chunk-P6ZTEDX2.js} +1 -1
  94. package/dist/chunks/{chunk-7Z3WUAO5.js → chunk-PHHZ6J7Q.js} +1 -1
  95. package/dist/chunks/{chunk-E6CO6TUM.js → chunk-PRFIFS3Q.js} +1 -1
  96. package/dist/chunks/{chunk-OGPENBY2.js → chunk-QDPYU6KS.js} +1 -1
  97. package/dist/chunks/{chunk-JLEJB6KM.js → chunk-QHM6OK76.js} +1 -1
  98. package/dist/chunks/chunk-QNL22LAW.js +7 -0
  99. package/dist/chunks/{chunk-IVSC7ZFJ.js → chunk-QUSEBFDO.js} +1 -1
  100. package/dist/chunks/{chunk-2ACMWVTB.js → chunk-R3BEQTZZ.js} +1 -1
  101. package/dist/chunks/{chunk-BUJITHGZ.js → chunk-RCUDI7OF.js} +1 -1
  102. package/dist/chunks/{chunk-IKQTP764.js → chunk-RMW2FDXS.js} +1 -1
  103. package/dist/chunks/{chunk-KRPY5FHJ.js → chunk-RQVIMYKN.js} +1 -1
  104. package/dist/chunks/chunk-RWPQOJTT.js +22 -0
  105. package/dist/chunks/{chunk-BL3HBRF6.js → chunk-SDOPVIKJ.js} +1 -1
  106. package/dist/chunks/{chunk-3XW7N4W3.js → chunk-SKSOCUDZ.js} +1 -1
  107. package/dist/chunks/chunk-SLDWAIO3.js +18 -0
  108. package/dist/chunks/{chunk-XB4SKARZ.js → chunk-SW3JRXUW.js} +1 -1
  109. package/dist/chunks/{chunk-6ISAISGD.js → chunk-TGOGYSBO.js} +1 -1
  110. package/dist/chunks/chunk-TZT3VYZ3.js +7 -0
  111. package/dist/chunks/{chunk-3ADDGPEN.js → chunk-UJQ6PBRF.js} +1 -1
  112. package/dist/chunks/chunk-UWMPVTXG.js +7 -0
  113. package/dist/chunks/{chunk-R6BEOVTU.js → chunk-VAWZZK3Y.js} +1 -1
  114. package/dist/chunks/{chunk-KNLGWGUE.js → chunk-VLYVVC3P.js} +11 -11
  115. package/dist/chunks/{chunk-G4T7VBGN.js → chunk-VQ755MPP.js} +1 -1
  116. package/dist/chunks/{chunk-QB7F3UAP.js → chunk-VUQWLLNI.js} +1 -1
  117. package/dist/chunks/chunk-VWHIWUGJ.js +7 -0
  118. package/dist/chunks/chunk-WDUHDLUA.js +14 -0
  119. package/dist/chunks/chunk-WICRM2JL.js +7 -0
  120. package/dist/chunks/{chunk-TKBORMUF.js → chunk-WKZ6JSGZ.js} +1 -1
  121. package/dist/chunks/{chunk-RRREFECI.js → chunk-WSVYZKI6.js} +1 -1
  122. package/dist/chunks/{chunk-UJSW56GS.js → chunk-XAU3KTPX.js} +1 -1
  123. package/dist/chunks/chunk-XCKUJZUG.js +10 -0
  124. package/dist/chunks/{chunk-DGYHWXD2.js → chunk-XE24Y6NM.js} +3 -3
  125. package/dist/chunks/{chunk-RW3X523R.js → chunk-XSQVCDSD.js} +1 -1
  126. package/dist/chunks/{chunk-KW6GSQXV.js → chunk-XTKGBVSF.js} +1 -1
  127. package/dist/chunks/{chunk-SKYDLHEZ.js → chunk-YALEYPMP.js} +1 -1
  128. package/dist/chunks/chunk-YCJHUYBJ.js +19 -0
  129. package/dist/chunks/{chunk-TO5PJDEN.js → chunk-YIRSRF6D.js} +1 -1
  130. package/dist/chunks/chunk-YQDOADMG.js +10 -0
  131. package/dist/chunks/{chunk-PFPJLIFF.js → chunk-YT3QAZQF.js} +1 -1
  132. package/dist/chunks/chunk-ZQUVDDPB.js +7 -0
  133. package/dist/chunks/{chunk-WBF36MYT.js → chunk-ZUNQHI5Y.js} +1 -1
  134. package/dist/chunks/{chunk-S4SJ7GIZ.js → chunk-ZUYPTLVO.js} +1 -1
  135. package/dist/chunks/clear-UZWOOGOH.js +8 -0
  136. package/dist/chunks/compile-vercel-config-2RQDL3RD.js +7 -0
  137. package/dist/chunks/config-C76IGJ6B.js +8 -0
  138. package/dist/chunks/config-RMJWRS7O.js +7 -0
  139. package/dist/chunks/config-validator.mjs +1 -1
  140. package/dist/chunks/{connect-git-provider-FS5Q2HO4.js → connect-git-provider-IQ7N2NPY.js} +1 -1
  141. package/dist/chunks/{constants-ICJL2EO5.js → constants-JAB7MRSK.js} +1 -1
  142. package/dist/chunks/delete-2WBR5JQW.js +9 -0
  143. package/dist/chunks/delete-OKOBDL7Z.js +10 -0
  144. package/dist/chunks/{detect-projects-OD4JEAW2.js → detect-projects-XPB3R7VS.js} +1 -1
  145. package/dist/chunks/detect-services-DRHV22O5.js +7 -0
  146. package/dist/chunks/disable-DFEABU2Z.js +7 -0
  147. package/dist/chunks/discard-KGBEMNFT.js +14 -0
  148. package/dist/chunks/edit-5XIRLUKG.js +9 -0
  149. package/dist/chunks/edit-PJIDMKUS.js +8 -0
  150. package/dist/chunks/enable-UDWDPFOI.js +7 -0
  151. package/dist/chunks/{exec-OZSY46V6.js → exec-PX4GTZNE.js} +1 -1
  152. package/dist/chunks/{export-MHSH7QCX.js → export-W75EA6EQ.js} +1 -1
  153. package/dist/chunks/future-PHSAEQIE.js +7 -0
  154. package/dist/chunks/generate-cert-for-deploy-C67VL5Z6.js +7 -0
  155. package/dist/chunks/image-U5CV2PRP.js +7 -0
  156. package/dist/chunks/import-builders-PHIIX7HW.js +7 -0
  157. package/dist/chunks/inspect-AU3MX7E2.js +13 -0
  158. package/dist/chunks/{inspect-IAWVHJXQ.js → inspect-DQQI3PM7.js} +1 -1
  159. package/dist/chunks/inspect-LJK7I6RZ.js +9 -0
  160. package/dist/chunks/{inspect-DI434TAM.js → inspect-RNWLPR7I.js} +1 -1
  161. package/dist/chunks/{inspect-A7WJQQZO.js → inspect-WHPWW4BI.js} +1 -1
  162. package/dist/chunks/list-JV26NNYL.js +16 -0
  163. package/dist/chunks/{list-INRPH25K.js → list-QNRFVMMQ.js} +1 -1
  164. package/dist/chunks/list-YF4FXWUZ.js +12 -0
  165. package/dist/chunks/login-A4KNOUNA.js +9 -0
  166. package/dist/chunks/login-COGE7JQU.js +7 -0
  167. package/dist/chunks/logs-KMQATUYR.js +7 -0
  168. package/dist/chunks/{ls-LIGIBVAT.js → ls-DTFLHFOW.js} +1 -1
  169. package/dist/chunks/{ls-MCQ2NS65.js → ls-FOKMPVIB.js} +1 -1
  170. package/dist/chunks/ls-HMYU2ZGA.js +11 -0
  171. package/dist/chunks/{ls-S5E2NQMI.js → ls-IHF33MQP.js} +1 -1
  172. package/dist/chunks/{ls-VXH4QYF5.js → ls-QD54I4S7.js} +1 -1
  173. package/dist/chunks/{ls-V2ZSIVO3.js → ls-RNRMYD3V.js} +1 -1
  174. package/dist/chunks/ls-ZQLCDIQJ.js +8 -0
  175. package/dist/chunks/mutate-RMIFQOF6.js +9 -0
  176. package/dist/chunks/notifications-BFBNV2HY.js +7 -0
  177. package/dist/chunks/open-L6HEXHAI.js +7 -0
  178. package/dist/chunks/openapi-6JKCOR7K.js +7 -0
  179. package/dist/chunks/permissions-UYGTYRKA.js +7 -0
  180. package/dist/chunks/{plugin-offer-Z6FCPQFD.js → plugin-offer-NBHRXMNR.js} +1 -1
  181. package/dist/chunks/prompt-missing-credentials-2IYIF2JI.js +7 -0
  182. package/dist/chunks/publish-T2VSTPG4.js +15 -0
  183. package/dist/chunks/pull-4GL47Z2S.js +7 -0
  184. package/dist/chunks/purchase-domain-if-available-BHFBD3LW.js +7 -0
  185. package/dist/chunks/push-CQPIDVTL.js +7 -0
  186. package/dist/chunks/{query-JGPO7TNY.js → query-HN45ORIB.js} +3 -3
  187. package/dist/chunks/reauthenticate-FTHGAWK3.js +7 -0
  188. package/dist/chunks/reorder-7BD5JZKQ.js +10 -0
  189. package/dist/chunks/reply-2INQJ5KM.js +9 -0
  190. package/dist/chunks/resolve-DHAJC3I7.js +12 -0
  191. package/dist/chunks/resolve-agent-team-KGYPHN5F.js +7 -0
  192. package/dist/chunks/restore-OQKNWEFQ.js +16 -0
  193. package/dist/chunks/rm-CTP4UZH7.js +8 -0
  194. package/dist/chunks/rm-GFHEXQQW.js +8 -0
  195. package/dist/chunks/rm-OG3OXA6H.js +8 -0
  196. package/dist/chunks/rm-PFZYHXEN.js +8 -0
  197. package/dist/chunks/rm-XAW3WJ3I.js +8 -0
  198. package/dist/chunks/{routes-P6LKQCWH.js → routes-XKEWEA3P.js} +1 -1
  199. package/dist/chunks/rule-inspect-MKQE5IVJ.js +8 -0
  200. package/dist/chunks/{schema-BEUO7G52.js → schema-TFN5PSYE.js} +2 -2
  201. package/dist/chunks/schema-XFER2RCF.js +14 -0
  202. package/dist/chunks/select-org-PFTR6HQZ.js +7 -0
  203. package/dist/chunks/set-KWOZNGRL.js +7 -0
  204. package/dist/chunks/setup-and-link-BRYK42L7.js +7 -0
  205. package/dist/chunks/{skills-4J2NC2QI.js → skills-2MOFBKIE.js} +2 -2
  206. package/dist/chunks/tags-BHZUQTOQ.js +7 -0
  207. package/dist/chunks/{types-SK6J2HFE.js → types-IWO5QLAV.js} +1 -1
  208. package/dist/chunks/{update-25CKNOY5.js → update-LP7ZZUFZ.js} +1 -1
  209. package/dist/commands/build/index.js +2 -2
  210. package/dist/commands/deploy/index.js +8 -8
  211. package/dist/commands/dev/index.js +6 -6
  212. package/dist/commands/env/index.js +3 -3
  213. package/dist/commands/link/index.js +2 -2
  214. package/dist/commands/list/index.js +1 -1
  215. package/dist/commands/project/index.js +10 -10
  216. package/dist/commands-account.js +24 -24
  217. package/dist/commands-ai.js +17 -17
  218. package/dist/commands-blob.js +9 -9
  219. package/dist/commands-core.js +26 -26
  220. package/dist/commands-deployments.js +3 -3
  221. package/dist/commands-flags.js +32 -32
  222. package/dist/commands-integrations.js +103 -88
  223. package/dist/commands-observability.js +7 -7
  224. package/dist/commands-routing.js +29 -29
  225. package/dist/help.js +1 -1
  226. package/dist/index.js +8 -6
  227. package/dist/internal-build.js +2 -2
  228. package/dist/native-download.js +7 -0
  229. package/dist/package.json +61 -61
  230. package/dist/root-help-commands.mjs +1 -1
  231. package/dist/vc.js +306 -140
  232. package/dist/version.mjs +1 -1
  233. package/package.json +55 -54
  234. package/dist/chunks/add-5YZQTIQM.js +0 -8
  235. package/dist/chunks/add-A524QQ2H.js +0 -8
  236. package/dist/chunks/add-V4JMUHKO.js +0 -8
  237. package/dist/chunks/build-K2PVDJZ4.js +0 -7
  238. package/dist/chunks/chunk-2H3SB5RP.js +0 -9
  239. package/dist/chunks/chunk-2PKEEQ5W.js +0 -25
  240. package/dist/chunks/chunk-3AYYFYZG.js +0 -7
  241. package/dist/chunks/chunk-4UGHFESV.js +0 -8
  242. package/dist/chunks/chunk-5IASAERQ.js +0 -7
  243. package/dist/chunks/chunk-6VH56CX2.js +0 -19
  244. package/dist/chunks/chunk-76KGQU2G.js +0 -7
  245. package/dist/chunks/chunk-7HV7O6DM.js +0 -7
  246. package/dist/chunks/chunk-ABZEMNDR.js +0 -7
  247. package/dist/chunks/chunk-APZULWJC.js +0 -8
  248. package/dist/chunks/chunk-AWMQGOS2.js +0 -7
  249. package/dist/chunks/chunk-B4UE4LVE.js +0 -7
  250. package/dist/chunks/chunk-B4YYOSPY.js +0 -7
  251. package/dist/chunks/chunk-E2SADN6I.js +0 -7
  252. package/dist/chunks/chunk-GVTXA6HG.js +0 -7
  253. package/dist/chunks/chunk-GYVJIIYL.js +0 -7
  254. package/dist/chunks/chunk-IA3MXJRC.js +0 -8
  255. package/dist/chunks/chunk-IEPW2YRH.js +0 -7
  256. package/dist/chunks/chunk-KH6565YH.js +0 -8
  257. package/dist/chunks/chunk-L4NSF346.js +0 -22
  258. package/dist/chunks/chunk-LJBUJ23M.js +0 -7
  259. package/dist/chunks/chunk-LT3UK4K6.js +0 -10
  260. package/dist/chunks/chunk-LUBUI5GF.js +0 -7
  261. package/dist/chunks/chunk-OKEBIUKZ.js +0 -7
  262. package/dist/chunks/chunk-PFNYWWLI.js +0 -7
  263. package/dist/chunks/chunk-QZX7VG2V.js +0 -9
  264. package/dist/chunks/chunk-RUXO73ON.js +0 -7
  265. package/dist/chunks/chunk-SLI2O5X7.js +0 -63
  266. package/dist/chunks/chunk-TPNOSQZ3.js +0 -15
  267. package/dist/chunks/chunk-UKQMYTWW.js +0 -9
  268. package/dist/chunks/chunk-UNEGQPD3.js +0 -7
  269. package/dist/chunks/chunk-V7BEC3E4.js +0 -10
  270. package/dist/chunks/chunk-VOCZ34ON.js +0 -7
  271. package/dist/chunks/chunk-WGXKX24Q.js +0 -7
  272. package/dist/chunks/chunk-YHQ7PPXP.js +0 -7
  273. package/dist/chunks/clear-ZS4KQ7OT.js +0 -8
  274. package/dist/chunks/compile-vercel-config-3IYM2CHC.js +0 -7
  275. package/dist/chunks/config-N2SBVW4T.js +0 -8
  276. package/dist/chunks/config-ZFIC7N4D.js +0 -7
  277. package/dist/chunks/delete-2ZE2NVHI.js +0 -10
  278. package/dist/chunks/delete-AL57HZDQ.js +0 -9
  279. package/dist/chunks/detect-services-MOXTX5XG.js +0 -7
  280. package/dist/chunks/disable-MKI3BKNH.js +0 -7
  281. package/dist/chunks/discard-SI4H7ST3.js +0 -14
  282. package/dist/chunks/edit-DNWH6SPE.js +0 -8
  283. package/dist/chunks/edit-WYNWDFUJ.js +0 -9
  284. package/dist/chunks/enable-J6MMYPYF.js +0 -7
  285. package/dist/chunks/future-FFOGTKMF.js +0 -7
  286. package/dist/chunks/generate-cert-for-deploy-YZKNGAEQ.js +0 -7
  287. package/dist/chunks/image-7METSS6F.js +0 -7
  288. package/dist/chunks/import-builders-GM2SERWV.js +0 -7
  289. package/dist/chunks/inspect-H2Q7XOWN.js +0 -13
  290. package/dist/chunks/inspect-H5JC2XKI.js +0 -9
  291. package/dist/chunks/list-ELEUTZWJ.js +0 -12
  292. package/dist/chunks/list-WWU734RK.js +0 -16
  293. package/dist/chunks/login-R5NQRPQC.js +0 -7
  294. package/dist/chunks/login-ZF2TLCQB.js +0 -9
  295. package/dist/chunks/logs-UD7FEXZ7.js +0 -7
  296. package/dist/chunks/ls-5ZEAKKPQ.js +0 -8
  297. package/dist/chunks/ls-IXRLAJ4L.js +0 -11
  298. package/dist/chunks/mutate-OQWOKLIW.js +0 -9
  299. package/dist/chunks/notifications-KFZ333V5.js +0 -7
  300. package/dist/chunks/open-HH6K7ZRC.js +0 -7
  301. package/dist/chunks/openapi-JGYEFJJV.js +0 -7
  302. package/dist/chunks/permissions-ZSHKMXBZ.js +0 -7
  303. package/dist/chunks/prompt-missing-credentials-KOA7C4QC.js +0 -7
  304. package/dist/chunks/publish-FPNQ2US4.js +0 -15
  305. package/dist/chunks/pull-7OGOIKB3.js +0 -7
  306. package/dist/chunks/purchase-domain-if-available-F4LKHVBD.js +0 -7
  307. package/dist/chunks/push-NY3SIK2C.js +0 -7
  308. package/dist/chunks/reauthenticate-OZRQFR66.js +0 -7
  309. package/dist/chunks/reorder-4J2STFUS.js +0 -10
  310. package/dist/chunks/reply-EO4NTTPW.js +0 -9
  311. package/dist/chunks/resolve-RPHHRPNM.js +0 -12
  312. package/dist/chunks/resolve-agent-team-KX77HEAF.js +0 -7
  313. package/dist/chunks/restore-TEA6TSVK.js +0 -16
  314. package/dist/chunks/rm-BPILSPUI.js +0 -8
  315. package/dist/chunks/rm-F6XVUDBM.js +0 -8
  316. package/dist/chunks/rm-JCPXV2FN.js +0 -8
  317. package/dist/chunks/rm-LPQRGX7N.js +0 -8
  318. package/dist/chunks/rm-WHUGT6TE.js +0 -8
  319. package/dist/chunks/rule-inspect-BOETGPFO.js +0 -8
  320. package/dist/chunks/schema-YOEAK4VX.js +0 -14
  321. package/dist/chunks/select-org-OMLGQEKK.js +0 -7
  322. package/dist/chunks/set-5XY27S7R.js +0 -7
  323. package/dist/chunks/setup-and-link-A7M3QT52.js +0 -7
  324. package/dist/chunks/tags-ZXZQEXOV.js +0 -7
@@ -1 +1 @@
1
- export const rootHelpCommands = [{"names":["deploy"],"description":"Deploy your project to Vercel","basic":true,"default":true},{"names":["activity"],"description":"List user activity events","basic":false,"default":false},{"names":["agent"],"description":"Generate an AGENTS.md file with Vercel deployment best practices","basic":false,"default":false},{"names":["agent-runs"],"description":"Inspect Agent Runs observability data","basic":false,"default":false},{"names":["ai-gateway"],"description":"Manage AI Gateway resources","basic":false,"default":false},{"names":["alerts"],"description":"List alert groups or inspect a group","basic":false,"default":false},{"names":["alias"],"description":"Interact with deployment aliases","basic":false,"default":false},{"names":["api"],"description":"Make authenticated HTTP requests to the Vercel API","basic":false,"default":false},{"names":["bisect"],"description":"Bisect the current project interactively or via an automated test script","basic":false,"default":false},{"names":["blob"],"description":"Interact with Vercel Blob","basic":false,"default":false},{"names":["budgets"],"description":"Show and manage Spend Management for on-demand charges after included credit [beta]","basic":false,"default":false},{"names":["build"],"description":"Build the project","basic":true,"default":false},{"names":["buy"],"description":"Purchase Vercel products for your team","basic":false,"default":false},{"names":["cache"],"description":"Manage cache for a Project","basic":true,"default":false},{"names":["certs"],"description":"Interact with SSL certificates","basic":false,"default":false},{"names":["changelog"],"description":"Show the latest Vercel product updates","basic":false,"default":false},{"names":["ci"],"description":"Inspect Vercel CI and rerun runs","basic":false,"default":false},{"names":["comments"],"description":"Review and act on Vercel Toolbar comments from the command line","basic":false,"default":false},{"names":["connect"],"description":"Manage connectors","basic":false,"default":false},{"names":["contract"],"description":"Show contract information for all billing periods","basic":false,"default":false},{"names":["crons"],"description":"Manage cron jobs for a project [beta]","basic":false,"default":false},{"names":["curl"],"description":"Make curl requests to Vercel deployments with automatic protection bypass","basic":false,"default":false},{"names":["daemons"],"description":"Manage daemons for a project [beta]","basic":false,"default":false},{"names":["deploy-hooks"],"description":"Manage deploy hooks for Git-triggered builds","basic":false,"default":false},{"names":["dev"],"description":"Starts the `vercel dev` server","basic":true,"default":false},{"names":["dns"],"description":"Interact with DNS entries for a project","basic":false,"default":false},{"names":["domains"],"description":"Manage domains","basic":false,"default":false},{"names":["drains"],"description":"Manage drains for logs, traces, and analytics","basic":false,"default":false},{"names":["env"],"description":"Interact with Environment Variables for a Project","basic":true,"default":false},{"names":["environments"],"description":"Manage custom environments for a Project","basic":false,"default":false},{"names":["feedback"],"description":"Send bugs, friction, and feature requests to the Vercel team","basic":false,"default":false},{"names":["firewall"],"description":"Manage your project's firewall rules, IP blocks, and system bypass configuration","basic":false,"default":false},{"names":["flags"],"description":"Manage feature flags for a Vercel project","basic":false,"default":false},{"names":["git"],"description":"Manage your Git repository connection to the current Project","basic":true,"default":false},{"names":["global-config"],"description":"Manage Global Config stores (dashboard API parity)","basic":false,"default":false},{"names":["health"],"description":"Show the current Vercel platform status and recent incidents","basic":false,"default":false},{"names":["help"],"description":"Show help for a command","basic":true,"default":false},{"names":["httpstat"],"description":"Execute httpstat with automatic deployment URL and protection bypass to visualize HTTP timing statistics","basic":false,"default":false},{"names":["init"],"description":"Initialize example Vercel Projects","basic":true,"default":false},{"names":["inspect"],"description":"Show information about a deployment","basic":true,"default":false},{"names":["install"],"description":"Install an integration from the marketplace (alias for `integration add`)","basic":true,"default":false},{"names":["integration"],"description":"Manage marketplace integrations","basic":true,"default":false},{"names":["kms"],"description":"Manage KMS issuers, signing keys, and project grants [beta]","basic":false,"default":false},{"names":["link"],"description":"Link a local directory to a Vercel project","basic":true,"default":false},{"names":["list"],"description":"List deployments","basic":true,"default":false},{"names":["login"],"description":"Sign in to your Vercel account","basic":true,"default":false},{"names":["logout"],"description":"Sign out the currently authenticated user","basic":true,"default":false},{"names":["logs"],"description":"Display logs","basic":false,"default":false},{"names":["mcp"],"description":"Set up MCP agents and configuration for Vercel integration","basic":false,"default":false},{"names":["metrics"],"description":"Query observability metrics for your Vercel project or team","basic":false,"default":false},{"names":["microfrontends"],"description":"Manage microfrontends groups that compose multiple projects into one cohesive application","basic":false,"default":false},{"names":["monitors"],"description":"Create, inspect, list, update, and delete monitors and manage their notification destinations","basic":false,"default":false},{"names":["open"],"description":"Opens the current project in the Vercel Dashboard","basic":true,"default":false},{"names":["organizations"],"description":"Manage Vercel organizations","basic":false,"default":false},{"names":["pricing"],"description":"Show Hobby, Pro, and Enterprise features from the public Vercel pricing table","basic":false,"default":false},{"names":["project"],"description":"Manage your Vercel projects","basic":false,"default":false},{"names":["promote"],"description":"Promote an existing Deployment to current","basic":true,"default":false},{"names":["pull"],"description":"Pull Environment Variables and project settings into .vercel","basic":true,"default":false},{"names":["redeploy"],"description":"Rebuild and deploy a previous deployment","basic":true,"default":false},{"names":["redirects"],"description":"Manage redirects for a project","basic":false,"default":false},{"names":["remove"],"description":"Delete deployment(s) by project name or deployment ID","basic":false,"default":false},{"names":["rollback"],"description":"Quickly revert back to a previous deployment","basic":true,"default":false},{"names":["rolling-release"],"description":"Rolling releases gradually shift traffic to a new deployment in stages, allowing you to monitor for errors before serving all traffic","basic":false,"default":false},{"names":["routes"],"description":"Manage routing rules for a project","basic":false,"default":false},{"names":["sandbox"],"description":"Interact with Vercel Sandbox","basic":false,"default":false},{"names":["schedules"],"description":"Manage schedules for the current project [beta]","basic":false,"default":false},{"names":["security"],"description":"Inspect the security posture of the current team","basic":false,"default":false},{"names":["setup"],"description":"Set up your machine for Vercel: install the Vercel plugin for Claude Code, Codex, and OpenCode and connect local coding agents to the AI Gateway","basic":false,"default":false},{"names":["signup"],"description":"Create a Vercel account and sign in","basic":true,"default":false},{"names":["skills"],"description":"Discover agent skills relevant to your project","basic":false,"default":false},{"names":["storage"],"description":"Create, connect, and manage storage resources (Blob, Global Config, Marketplace, and 1P) for your Projects","basic":false,"default":false},{"names":["switch"],"description":"Switch to a different team","basic":true,"default":false},{"names":["teams"],"description":"Manage Teams under your Vercel account","basic":false,"default":false},{"names":["telemetry"],"description":"Allows you to enable or disable telemetry collection","basic":false,"default":false},{"names":["token-pass"],"description":"Set up a coding agent with Vercel Token Pass","basic":false,"default":false},{"names":["tokens"],"description":"Manage your personal Vercel authentication tokens","basic":false,"default":false},{"names":["traces"],"description":"Fetch project traces and search spans across a Vercel team","basic":false,"default":false},{"names":["upgrade"],"description":"Upgrade the current global or native Vercel CLI installation","basic":false,"default":false},{"names":["usage"],"description":"Show billing usage and costs for the current billing cycle or a custom date range","basic":false,"default":false},{"names":["vcr"],"description":"Manage Vercel Container Registry repositories and images (see `vcr image`)","basic":false,"default":false},{"names":["version"],"description":"Manages the installed Vercel CLI version","basic":false,"default":false},{"names":["webhooks"],"description":"Manage webhooks","basic":false,"default":false},{"names":["whoami"],"description":"Shows the username of the currently logged in user","basic":false,"default":false}];
1
+ export const rootHelpCommands = [{"names":["deploy"],"description":"Deploy your project to Vercel","group":"Deploy and Develop","default":true},{"names":["activity"],"description":"List user activity events","group":"Operations and Security","default":false},{"names":["agent"],"description":"Generate Vercel deployment guidance in AGENTS.md","group":"CLI and Integrations","default":false},{"names":["agent-runs"],"description":"Inspect Agent Runs observability data","group":"Operations and Security","default":false},{"names":["ai-gateway"],"description":"Manage AI Gateway resources","group":"Data and Compute","default":false},{"names":["alerts"],"description":"List alert groups or inspect a group","group":"Operations and Security","default":false},{"names":["alias"],"description":"Interact with deployment aliases","group":"Domains and Traffic","default":false},{"names":["api"],"description":"Make authenticated HTTP requests to the Vercel API","group":"CLI and Integrations","default":false},{"names":["bisect"],"description":"Bisect the current project interactively or via an automated test script","group":"Deploy and Develop","default":false},{"names":["blob"],"description":"Interact with Vercel Blob","group":"Data and Compute","default":false},{"names":["budgets"],"description":"Manage spending beyond included credit [beta]","group":"Account and Billing","default":false},{"names":["build"],"description":"Build the project","group":"Deploy and Develop","default":false},{"names":["buy"],"description":"Purchase Vercel products for your team","group":"Account and Billing","default":false},{"names":["cache"],"description":"Manage cache for a Project","group":"Projects and Configuration","default":false},{"names":["certs"],"description":"Interact with SSL certificates","group":"Domains and Traffic","default":false},{"names":["changelog"],"description":"Show the latest Vercel product updates","group":"CLI and Integrations","default":false},{"names":["ci"],"description":"Inspect Vercel CI and rerun runs","group":"Deploy and Develop","default":false},{"names":["comments"],"description":"Review and act on Vercel Toolbar comments from the command line","group":"Operations and Security","default":false},{"names":["connect"],"description":"Manage connectors","group":"CLI and Integrations","default":false},{"names":["contract"],"description":"Show contract information for all billing periods","group":"Account and Billing","default":false},{"names":["crons"],"description":"Manage cron jobs for a project [beta]","group":"Data and Compute","default":false},{"names":["curl"],"description":"Request deployments with protection bypass","group":"Deploy and Develop","default":false},{"names":["daemons"],"description":"Manage daemons for a project [beta]","group":"Data and Compute","default":false},{"names":["deploy-hooks"],"description":"Manage deploy hooks for Git-triggered builds","group":"Projects and Configuration","default":false},{"names":["dev"],"description":"Starts the `vercel dev` server","group":"Deploy and Develop","default":false},{"names":["dns"],"description":"Manage DNS records for your domains","group":"Domains and Traffic","default":false},{"names":["domains"],"description":"Manage domains","group":"Domains and Traffic","default":false},{"names":["drains"],"description":"Manage drains for logs, traces, analytics, and speed insights","group":"Operations and Security","default":false},{"names":["env"],"description":"Interact with Environment Variables for a Project","group":"Projects and Configuration","default":false},{"names":["environments"],"description":"Manage custom environments for a Project","group":"Projects and Configuration","default":false},{"names":["feedback"],"description":"Send bugs, friction, and feature requests to the Vercel team","group":"CLI and Integrations","default":false},{"names":["firewall"],"description":"Manage firewall rules and bypass settings","group":"Operations and Security","default":false},{"names":["flags"],"description":"Manage feature flags for a Vercel project","group":"Projects and Configuration","default":false},{"names":["git"],"description":"Manage your Git repository connection to the current Project","group":"Projects and Configuration","default":false},{"names":["global-config"],"description":"Manage Global Config stores (dashboard API parity)","group":"Data and Compute","default":false},{"names":["health"],"description":"Show the current Vercel platform status and recent incidents","group":"Operations and Security","default":false},{"names":["help"],"description":"Show help for a command","group":"CLI and Integrations","default":false},{"names":["httpstat"],"description":"Show deployment HTTP timing","group":"Deploy and Develop","default":false},{"names":["init"],"description":"Initialize example Vercel Projects","group":"Deploy and Develop","default":false},{"names":["inspect"],"description":"Show information about a deployment","group":"Deploy and Develop","default":false},{"names":["install"],"description":"Install a marketplace integration","group":"CLI and Integrations","default":false},{"names":["integration"],"description":"Manage marketplace integrations","group":"CLI and Integrations","default":false},{"names":["kms"],"description":"Manage KMS issuers, signing keys, and project grants [beta]","group":"Operations and Security","default":false},{"names":["link"],"description":"Link a local directory to a Vercel project","group":"Projects and Configuration","default":false},{"names":["list"],"description":"List deployments","group":"Deploy and Develop","default":false},{"names":["login"],"description":"Sign in to your Vercel account","group":"Account and Billing","default":false},{"names":["logout"],"description":"Sign out the currently authenticated user","group":"Account and Billing","default":false},{"names":["logs"],"description":"Display logs","group":"Operations and Security","default":false},{"names":["mcp"],"description":"Set up MCP agents for Vercel","group":"CLI and Integrations","default":false},{"names":["metrics"],"description":"Query observability metrics for your Vercel project or team","group":"Operations and Security","default":false},{"names":["microfrontends"],"description":"Manage microfrontends groups","group":"Projects and Configuration","default":false},{"names":["monitors"],"description":"Add, inspect, list, update, and remove monitors, and manage their notification destinations","group":"Operations and Security","default":false},{"names":["open"],"description":"Opens the current project in the Vercel Dashboard","group":"Projects and Configuration","default":false},{"names":["organizations"],"description":"Manage Vercel organizations","group":"Account and Billing","default":false},{"names":["pricing"],"description":"Compare public plan features","group":"Account and Billing","default":false},{"names":["project"],"description":"Manage your Vercel projects","group":"Projects and Configuration","default":false},{"names":["promote"],"description":"Promote an existing Deployment to current","group":"Deploy and Develop","default":false},{"names":["pull"],"description":"Pull Environment Variables and project settings into .vercel","group":"Projects and Configuration","default":false},{"names":["redeploy"],"description":"Rebuild and deploy a previous deployment","group":"Deploy and Develop","default":false},{"names":["redirects"],"description":"Manage redirects for a project","group":"Domains and Traffic","default":false},{"names":["remove"],"description":"Delete deployment(s) by project name or deployment ID","group":"Deploy and Develop","default":false},{"names":["rollback"],"description":"Roll back to a previous deployment","group":"Deploy and Develop","default":false},{"names":["rolling-release"],"description":"Shift deployment traffic in stages","group":"Deploy and Develop","default":false},{"names":["routes"],"description":"Manage routing rules for a project","group":"Domains and Traffic","default":false},{"names":["sandbox"],"description":"Interact with Vercel Sandbox","group":"Data and Compute","default":false},{"names":["schedules"],"description":"Manage schedules for the current project [beta]","group":"Data and Compute","default":false},{"names":["security"],"description":"Inspect the security posture of the current team","group":"Operations and Security","default":false},{"names":["setup"],"description":"Set up coding agents for Vercel","group":"CLI and Integrations","default":false},{"names":["signup"],"description":"Create a Vercel account and sign in","group":"Account and Billing","default":false},{"names":["skills"],"description":"Discover agent skills relevant to your project","group":"CLI and Integrations","default":false},{"names":["storage"],"description":"Manage project storage resources","group":"Data and Compute","default":false},{"names":["switch"],"description":"Switch to a different team","group":"Account and Billing","default":false},{"names":["teams"],"description":"Manage Teams under your Vercel account","group":"Account and Billing","default":false},{"names":["telemetry"],"description":"Allows you to enable or disable telemetry collection","group":"CLI and Integrations","default":false},{"names":["token-pass"],"description":"Set up a coding agent with Vercel Token Pass","group":"CLI and Integrations","default":false},{"names":["tokens"],"description":"Manage your personal Vercel authentication tokens","group":"Account and Billing","default":false},{"names":["traces"],"description":"Inspect project traces and search spans across a Vercel team","group":"Operations and Security","default":false},{"names":["upgrade"],"description":"Upgrade the current global or native Vercel CLI installation","group":"CLI and Integrations","default":false},{"names":["usage"],"description":"Show billing usage and costs","group":"Account and Billing","default":false},{"names":["vcr"],"description":"Manage Vercel Container Registry repositories and images (see `vcr image`)","group":"Data and Compute","default":false},{"names":["version"],"description":"Manages the installed Vercel CLI version","group":"CLI and Integrations","default":false},{"names":["webhooks"],"description":"Manage webhooks","group":"Operations and Security","default":false},{"names":["whoami"],"description":"Shows the username of the currently logged in user","group":"Account and Billing","default":false}];
package/dist/vc.js CHANGED
@@ -4,23 +4,57 @@
4
4
  // https://nodejs.org/api/module.html#moduleenablecompilecachecachedir
5
5
  // enableCompileCache was added in Node.js 22.8.0, so we need to handle older versions.
6
6
  const entryAt = performance.now();
7
+ Reflect.set(globalThis, Symbol.for('vercel.cli.entry-at'), entryAt);
8
+ const startupTimings = process.env.VERCEL_TELEMETRY_DISABLED
9
+ ? undefined
10
+ : {
11
+ marks: [
12
+ {
13
+ phase: 'compile_cache',
14
+ timestamp: Number(process.hrtime.bigint() / BigInt(1000)),
15
+ },
16
+ ],
17
+ };
18
+ Reflect.set(
19
+ globalThis,
20
+ Symbol.for('vercel.cli.startup-timings'),
21
+ startupTimings
22
+ );
23
+ function markStartup(phase) {
24
+ startupTimings?.marks.push({
25
+ phase,
26
+ timestamp: Number(process.hrtime.bigint() / BigInt(1000)),
27
+ });
28
+ }
7
29
  try {
8
30
  const { enableCompileCache } = await import('node:module');
9
31
  if (enableCompileCache) {
10
32
  enableCompileCache();
11
33
  }
12
34
  } catch {}
35
+ markStartup('launcher');
13
36
 
14
- // Spawn the installed native binary for explicit opt-ins, macOS machines, or
15
- // internal automatic enrollment. Explicit opt-outs always override defaults.
37
+ // Run the one package this platform maps to: the native binary on macOS and
38
+ // Linux x64/arm64 (downloaded once into the CLI cache when the install skipped
39
+ // it), @vercel/cli-support everywhere else. This package's own JS CLI
40
+ // (./index.js) is only a fallback, recorded in telemetry.
16
41
  import { spawnSync } from 'node:child_process';
17
- import { existsSync, statSync, writeFileSync } from 'node:fs';
18
- import { dirname, join, resolve } from 'node:path';
42
+ import {
43
+ accessSync,
44
+ constants as fsConstants,
45
+ existsSync,
46
+ mkdirSync,
47
+ readFileSync,
48
+ statSync,
49
+ writeFileSync,
50
+ } from 'node:fs';
51
+ import { dirname, join, resolve, sep } from 'node:path';
19
52
  import { fileURLToPath, pathToFileURL } from 'node:url';
20
53
 
21
54
  const __dirname = dirname(fileURLToPath(import.meta.url));
22
55
 
23
- // Keep in sync with packages/vc-native/scripts/platforms.mjs.
56
+ // Keep in sync with packages/vc-native/scripts/platforms.mjs. Windows runs
57
+ // only the Node CLI until its native binaries are signed.
24
58
  const NATIVE_TARGETS = [
25
59
  'darwin-arm64',
26
60
  'darwin-x64',
@@ -28,8 +62,6 @@ const NATIVE_TARGETS = [
28
62
  'linux-arm64-musl',
29
63
  'linux-x64',
30
64
  'linux-x64-musl',
31
- 'win32-arm64',
32
- 'win32-x64',
33
65
  ];
34
66
 
35
67
  // musl's `ldd` names itself. npm and pnpm skip the other libc's package via
@@ -40,103 +72,169 @@ function isMusl() {
40
72
  return `${ldd.stdout ?? ''}${ldd.stderr ?? ''}`.includes('musl');
41
73
  }
42
74
 
43
- function nativeTarget() {
75
+ function platformTarget() {
44
76
  const target = `${process.platform}-${process.arch}`;
45
77
  return process.platform === 'linux' && isMusl() ? `${target}-musl` : target;
46
78
  }
47
79
 
48
- function resolveNative() {
49
- // Already running inside the native binary — never trampoline again.
50
- if (process.env.VERCEL_VC_NATIVE === '1') return null;
51
- const pkgName = `@vercel/vc-native-${nativeTarget()}`;
52
- const binName = process.platform === 'win32' ? 'vercel.exe' : 'vercel';
53
- // Walk up from this install's own tree looking for a sibling native
54
- // package. `require.resolve()` is not used because it falls back to
55
- // NODE_PATH and the global folders even when `paths` is given.
80
+ // Walk up from this install's own tree. `require.resolve()` is not used
81
+ // because it falls back to NODE_PATH and the global folders even when `paths`
82
+ // is given.
83
+ function findPackage(name) {
56
84
  let dir = __dirname;
57
85
  while (true) {
58
- const pkgDir = join(dir, 'node_modules', pkgName);
59
- if (existsSync(join(pkgDir, 'package.json'))) {
60
- const a = join(pkgDir, 'bin', binName);
61
- if (existsSync(a)) return a;
62
- const b = join(pkgDir, binName);
63
- if (existsSync(b)) return b;
64
- }
86
+ const pkgDir = join(dir, 'node_modules', name);
87
+ if (existsSync(join(pkgDir, 'package.json'))) return pkgDir;
65
88
  const parent = dirname(dir);
66
89
  if (parent === dir) return null;
67
90
  dir = parent;
68
91
  }
69
92
  }
70
93
 
71
- function nativeUnavailableMessage() {
72
- const target = nativeTarget();
73
- if (NATIVE_TARGETS.includes(target)) {
74
- return (
75
- `The native Vercel CLI package @vercel/vc-native-${target} is not installed. ` +
76
- 'Reinstall vercel without omitting optional dependencies (for example, npm i -g vercel@latest).'
77
- );
94
+ // The package this platform maps to: a native target or `cli-support`.
95
+ function mappedTarget() {
96
+ const target = platformTarget();
97
+ return NATIVE_TARGETS.includes(target) ? target : 'cli-support';
98
+ }
99
+
100
+ function resolveTarget() {
101
+ const target = mappedTarget();
102
+ if (target === 'cli-support') {
103
+ const pkgDir = findPackage('@vercel/cli-support');
104
+ const entry = pkgDir && join(pkgDir, 'dist', 'index.js');
105
+ return {
106
+ target: 'cli-support',
107
+ entry: entry && existsSync(entry) && entry,
108
+ };
78
109
  }
79
- return (
80
- `Vercel CLI does not provide a native binary for ${target}. ` +
81
- 'Install the JavaScript CLI instead (for example, npm i -g @vercel/cli-support).'
82
- );
110
+ const pkgDir = findPackage(`@vercel/vc-native-${target}`);
111
+ const bin =
112
+ pkgDir &&
113
+ [join(pkgDir, 'bin', 'vercel'), join(pkgDir, 'vercel')].find(existsSync);
114
+ return { target, bin };
83
115
  }
84
116
 
85
- // Operating systems without a native package get the same version's JS CLI
86
- // from @vercel/cli-support. Like resolveNative(), only search this install's
87
- // tree.
88
- function resolveCliSupport() {
89
- let dir = __dirname;
90
- while (true) {
91
- const entry = join(
92
- dir,
93
- 'node_modules',
94
- '@vercel',
95
- 'cli-support',
96
- 'dist',
97
- 'index.js'
98
- );
99
- if (existsSync(entry)) return entry;
100
- const parent = dirname(dir);
101
- if (parent === dir) return null;
102
- dir = parent;
117
+ // The package this launcher belongs to: `vercel` or `@vercel/cli-support`.
118
+ let ownPackage;
119
+ function readOwnPackage() {
120
+ if (ownPackage === undefined) {
121
+ try {
122
+ ownPackage = JSON.parse(
123
+ readFileSync(join(__dirname, '..', 'package.json'))
124
+ );
125
+ } catch {
126
+ ownPackage = null;
127
+ }
103
128
  }
129
+ return ownPackage;
130
+ }
131
+
132
+ // This file also ships in @vercel/cli-support, which is its own JS CLI.
133
+ function isCliSupport() {
134
+ return readOwnPackage()?.name === '@vercel/cli-support';
104
135
  }
105
136
 
106
- async function importJsCli() {
137
+ // Flags that make stdout a JSON document, so stderr must stay quiet.
138
+ function wantsJsonOutput(argv) {
139
+ const formatIndex = argv.indexOf('--format');
140
+ return (
141
+ argv.some(arg => arg === '--json' || arg === '--format=json') ||
142
+ (formatIndex !== -1 && argv[formatIndex + 1] === 'json')
143
+ );
144
+ }
145
+
146
+ // When the native package is missing (an install that skipped optional
147
+ // dependencies, or one made before npm had the package), download the binary
148
+ // for this exact version into the CLI cache, once. Each version has its own
149
+ // directory, so a binary is written once and never replaced.
150
+ const DOWNLOAD_RETRY_AFTER_MS = 24 * 60 * 60 * 1000;
151
+
152
+ async function nativeCacheDir(target) {
153
+ const version = readOwnPackage()?.version;
154
+ if (
155
+ typeof version !== 'string' ||
156
+ !/^\d+\.\d+\.\d+(?:-[\w.-]+)?(?:\+[\w.-]+)?$/.test(version)
157
+ ) {
158
+ return null;
159
+ }
107
160
  try {
108
- return await import('./index.js');
109
- } catch (error) {
110
- const cliSupport =
111
- process.env.VERCEL_VC_NATIVE !== '1' &&
112
- error?.code === 'ERR_MODULE_NOT_FOUND' &&
113
- resolveCliSupport();
114
- if (!cliSupport) throw error;
115
- return import(pathToFileURL(cliSupport).href);
161
+ const config = await import('@vercel/cli-config/paths');
162
+ return {
163
+ version,
164
+ dir: join(config.getCachePath(), 'native', version, target),
165
+ };
166
+ } catch {
167
+ return null;
116
168
  }
117
169
  }
118
170
 
119
- // Read `--global-config`/`-Q` without loading the full CLI arg parser.
120
- function globalConfigDirFromArgv() {
121
- const argv = process.argv.slice(2);
122
- for (let i = 0; i < argv.length; i++) {
123
- const arg = argv[i];
124
- if (arg === '--global-config' || arg === '-Q') {
125
- return argv[i + 1];
171
+ async function fetchNativeBinary(target) {
172
+ // Only an installed package uses the download. A repository checkout
173
+ // (packages/cli/dist/vc.js) runs its own JS CLI, so local changes and tests
174
+ // never run a published binary instead.
175
+ if (!__dirname.split(sep).includes('node_modules')) {
176
+ return { reason: 'target_missing' };
177
+ }
178
+ const cache = await nativeCacheDir(target);
179
+ if (!cache) return { reason: 'target_missing' };
180
+ const bin = join(cache.dir, 'vercel');
181
+ if (existsSync(bin)) return { bin, source: 'cache' };
182
+
183
+ // Tests only: never reach the real registry.
184
+ if (process.env.__VERCEL_NATIVE_DOWNLOAD === '0') {
185
+ return { reason: 'target_missing' };
186
+ }
187
+ // Without a writable cache the binary has nowhere to go and a failure can't
188
+ // be recorded, so every run would try and warn again. Use the JS CLI quietly.
189
+ try {
190
+ mkdirSync(cache.dir, { recursive: true });
191
+ accessSync(cache.dir, fsConstants.W_OK);
192
+ } catch {
193
+ return { reason: 'target_missing' };
194
+ }
195
+ const failedStamp = join(cache.dir, 'download-failed');
196
+ try {
197
+ if (Date.now() - statSync(failedStamp).mtimeMs < DOWNLOAD_RETRY_AFTER_MS) {
198
+ return { reason: 'download_failed' };
126
199
  }
127
- if (arg.startsWith('--global-config=')) {
128
- return arg.slice('--global-config='.length);
200
+ } catch {}
201
+
202
+ const quiet = wantsJsonOutput(process.argv.slice(2));
203
+ try {
204
+ const { downloadNativeBinary } = await import('./native-download.js');
205
+ return {
206
+ bin: await downloadNativeBinary({
207
+ target,
208
+ version: cache.version,
209
+ directory: cache.dir,
210
+ log: quiet ? undefined : line => console.error(line),
211
+ }),
212
+ source: 'download',
213
+ };
214
+ } catch (error) {
215
+ try {
216
+ writeFileSync(failedStamp, '');
217
+ } catch {}
218
+ if (!quiet) {
219
+ const detail =
220
+ error?.name === 'NativeDownloadError'
221
+ ? error.detail
222
+ : 'unexpected error';
223
+ console.error(
224
+ `! Couldn't download the Vercel CLI binary (${detail}), so Node.js is running this command. The CLI tries again in 24 hours.`
225
+ );
129
226
  }
227
+ return { reason: 'download_failed' };
130
228
  }
131
- return undefined;
132
229
  }
133
230
 
134
- // Any failure to read config counts as "not opted in".
135
- async function isNativeBinaryOptedIn() {
231
+ // The native binary is the default, but this release still honors an explicit
232
+ // opt-out: VERCEL_CLI_USE_NATIVE_BINARY, then a persisted `useNativeBinary`
233
+ // preference. Any failure to read config counts as no preference.
234
+ async function isNativeBinaryOptedOut() {
136
235
  const envOverride = process.env.VERCEL_CLI_USE_NATIVE_BINARY;
137
- if (envOverride === '1' || envOverride === 'true') return true;
138
- if (envOverride === '0' || envOverride === 'false') return false;
139
-
236
+ if (envOverride === '0' || envOverride === 'false') return true;
237
+ if (envOverride === '1' || envOverride === 'true') return false;
140
238
  try {
141
239
  // Zod-free subpath to avoid loading zod + schemas on this hot path.
142
240
  const config = await import('@vercel/cli-config/paths');
@@ -144,56 +242,109 @@ async function isNativeBinaryOptedIn() {
144
242
  const configDir = argDir
145
243
  ? resolve(process.cwd(), argDir)
146
244
  : config.getGlobalPathConfig();
147
- const configPath = config.getConfigFilePath(configDir);
148
- const preference = config.readGlobalConfigFlag(
149
- configPath,
150
- 'useNativeBinary'
151
- );
152
- if (typeof preference === 'boolean') return preference;
153
- // All macOS machines are opted in unless they explicitly opt out above.
154
- if (process.platform === 'darwin') return true;
155
245
  return (
156
- config.readGlobalConfigFlag(configPath, 'nativeBinaryAutoOptIn') === true
246
+ config.readGlobalConfigFlag(
247
+ config.getConfigFilePath(configDir),
248
+ 'useNativeBinary'
249
+ ) === false
157
250
  );
158
251
  } catch {
159
252
  return false;
160
253
  }
161
254
  }
162
255
 
163
- // Keep the opt-out escape hatch in Node even when the native binary cannot
164
- // start. The full CLI parser still validates the command and its arguments.
165
- const disableBinary = process.argv.slice(2).includes('--disable-binary');
166
- const nativeBin = resolveNative();
167
- const bin = disableBinary ? null : nativeBin;
256
+ // When the OS cannot start the binary at all, no command code has run, so
257
+ // Node.js can safely run the command instead.
258
+ const NATIVE_SPAWN_FALLBACK_CODES = ['ENOENT', 'EACCES', 'ENOEXEC'];
168
259
 
169
- // Internal worker arguments intentionally trampoline too. The packaged native
170
- // binary sets VERCEL_VC_NATIVE=1 in pkg.js and re-enters this file, where
171
- // resolveNative() returns null and the worker branch below handles the request.
172
- if (bin && (await isNativeBinaryOptedIn())) {
173
- process.env.VERCEL_VC_NATIVE = '1';
174
- // Do not fall through to JS on spawn/loader failures — surface them so
175
- // native binary issues (e.g. glibc mismatch) are visible.
176
- const r = spawnSync(bin, process.argv.slice(2), {
177
- stdio: 'inherit',
178
- windowsHide: true,
179
- env: {
180
- ...process.env,
181
- // Upgrades belong to the vercel package, not its native runtime dependency.
182
- // Always replace an inherited value with this launcher's own entrypoint.
183
- VERCEL_CLI_PACKAGE_ENTRYPOINT: fileURLToPath(import.meta.url),
184
- VERCEL_CLI_PACKAGE_EXECUTABLE: bin,
185
- },
186
- });
187
- if (r.error) {
188
- console.error(r.error.message);
189
- process.exit(1);
260
+ // Read by src/index.ts and reported in telemetry. Inside the native binary,
261
+ // pkg.js sets it to `native` before re-entering this file with
262
+ // VERCEL_VC_NATIVE=1.
263
+ const LAUNCH = Symbol.for('vercel.cli.launch');
264
+ let launch;
265
+ let cliSupportEntry;
266
+ if (process.env.VERCEL_VC_NATIVE === '1') {
267
+ if (globalThis[LAUNCH]?.runtime !== 'native') {
268
+ // Not the native binary: a process it spawned (a build script, a dev
269
+ // command) inherited VERCEL_VC_NATIVE=1 and ran this package's JS CLI.
270
+ launch = {
271
+ runtime: 'dist',
272
+ target: mappedTarget(),
273
+ reason: 'inherited_native_env',
274
+ };
275
+ globalThis[LAUNCH] = launch;
190
276
  }
191
- if (r.signal) {
192
- try {
193
- process.kill(process.pid, r.signal);
194
- } catch {}
277
+ } else {
278
+ const resolved = resolveTarget();
279
+ let optedOut = false;
280
+ let missingReason = 'target_missing';
281
+ if (resolved.bin) {
282
+ optedOut = await isNativeBinaryOptedOut();
283
+ } else if (resolved.target !== 'cli-support' && !isCliSupport()) {
284
+ // Never download for an opted-out user or for @vercel/cli-support (the
285
+ // build container runs it on Linux).
286
+ optedOut = await isNativeBinaryOptedOut();
287
+ if (!optedOut) {
288
+ const fetched = await fetchNativeBinary(resolved.target);
289
+ resolved.bin = fetched.bin;
290
+ resolved.source = fetched.source;
291
+ missingReason = fetched.reason ?? missingReason;
292
+ }
195
293
  }
196
- process.exit(r.status ?? 1);
294
+ if (optedOut) {
295
+ launch = { runtime: 'dist', target: resolved.target, reason: 'opt_out' };
296
+ } else if (resolved.bin) {
297
+ // Internal worker arguments intentionally trampoline too. The packaged
298
+ // native binary sets VERCEL_VC_NATIVE=1 in pkg.js and re-enters this file,
299
+ // where the worker branch below handles the request.
300
+ const r = spawnSync(resolved.bin, process.argv.slice(2), {
301
+ stdio: 'inherit',
302
+ windowsHide: true,
303
+ env: {
304
+ ...process.env,
305
+ VERCEL_VC_NATIVE: '1',
306
+ // Upgrades belong to the vercel package, not its native runtime
307
+ // dependency. Always replace an inherited value with this launcher's
308
+ // own entrypoint.
309
+ VERCEL_CLI_PACKAGE_ENTRYPOINT: fileURLToPath(import.meta.url),
310
+ VERCEL_CLI_PACKAGE_EXECUTABLE: resolved.bin,
311
+ // Reported in telemetry. pkg.js reads it and removes it, so the
312
+ // binary's child processes don't inherit it.
313
+ ...(resolved.source && {
314
+ __VERCEL_CLI_NATIVE_SOURCE: resolved.source,
315
+ }),
316
+ },
317
+ });
318
+ // Never fall back on an exit status: a loader failure (e.g. glibc
319
+ // mismatch) and a command's own failure are indistinguishable, and
320
+ // retrying a command in Node.js could repeat remote mutations.
321
+ if (!(r.error && NATIVE_SPAWN_FALLBACK_CODES.includes(r.error.code))) {
322
+ if (r.error) {
323
+ console.error(r.error.message);
324
+ process.exit(1);
325
+ }
326
+ if (r.signal) {
327
+ try {
328
+ process.kill(process.pid, r.signal);
329
+ } catch {}
330
+ }
331
+ process.exit(r.status ?? 1);
332
+ }
333
+ console.error(
334
+ `! The native Vercel CLI binary could not start (${r.error.code}), so Node.js is running this command.`
335
+ );
336
+ launch = { runtime: 'dist', target: resolved.target, reason: r.error.code };
337
+ } else if (resolved.entry || isCliSupport()) {
338
+ launch = { runtime: 'cli-support' };
339
+ } else {
340
+ launch = {
341
+ runtime: 'dist',
342
+ target: resolved.target,
343
+ reason: missingReason,
344
+ };
345
+ }
346
+ globalThis[LAUNCH] = launch;
347
+ cliSupportEntry = resolved.entry;
197
348
  }
198
349
 
199
350
  if (process.argv[2] === '--internal-build-worker') {
@@ -216,6 +367,10 @@ if (process.argv[2] === '--internal-build-worker') {
216
367
  ),
217
368
  { report }
218
369
  );
370
+ // A prewarmed worker idles until its request arrives; start startup
371
+ // telemetry from the handoff instead of process entry.
372
+ Reflect.set(globalThis, Symbol.for('vercel.cli.entry-at'), performance.now());
373
+ startupTimings?.marks.splice(0);
219
374
  globalThis[Symbol.for('vercel.cli.fatal-error-handler')] = error =>
220
375
  handoff.error(error);
221
376
 
@@ -239,28 +394,37 @@ if (process.argv[2] === '--internal-build-worker') {
239
394
  process.exit(process.exitCode ?? 0);
240
395
  }
241
396
 
242
- // Linux and Windows on anything but x64/arm64 have no native binary, and will
243
- // lose the JS CLI from `vercel` itself in a future release.
397
+ // Read `--global-config`/`-Q` without loading the full CLI arg parser.
398
+ function globalConfigDirFromArgv() {
399
+ const argv = process.argv.slice(2);
400
+ for (let i = 0; i < argv.length; i++) {
401
+ const arg = argv[i];
402
+ if (arg === '--global-config' || arg === '-Q') {
403
+ return argv[i + 1];
404
+ }
405
+ if (arg.startsWith('--global-config=')) {
406
+ return arg.slice('--global-config='.length);
407
+ }
408
+ }
409
+ return undefined;
410
+ }
411
+
412
+ // Linux on anything but x64/arm64 has no native binary, and will lose the JS
413
+ // CLI from `vercel` itself in a future release.
244
414
  async function warnDeprecatedArch() {
245
415
  if (
246
- !['linux', 'win32'].includes(process.platform) ||
416
+ process.platform !== 'linux' ||
247
417
  ['x64', 'arm64'].includes(process.arch) ||
248
418
  process.env.VERCEL_VC_NATIVE === '1'
249
419
  ) {
250
420
  return;
251
421
  }
252
422
  const argv = process.argv.slice(2);
253
- const formatIndex = argv.indexOf('--format');
254
423
  if (
255
424
  argv.some(arg =>
256
- [
257
- '--non-interactive',
258
- '--non-interactive=true',
259
- '--json',
260
- '--format=json',
261
- ].includes(arg)
425
+ ['--non-interactive', '--non-interactive=true'].includes(arg)
262
426
  ) ||
263
- (formatIndex !== -1 && argv[formatIndex + 1] === 'json')
427
+ wantsJsonOutput(argv)
264
428
  ) {
265
429
  return;
266
430
  }
@@ -278,14 +442,8 @@ async function warnDeprecatedArch() {
278
442
  } catch {}
279
443
  const target = `${process.platform}-${process.arch}`;
280
444
  console.error(
281
- `! Support for ${target} will be removed from the vercel package in a future release. ` +
282
- 'npm i -g @vercel/cli-support will keep working.'
445
+ `! Support for ${target} will be removed from the vercel package in a future release.`
283
446
  );
284
- if (target === 'win32-ia32') {
285
- console.error(
286
- ' If this is a 64-bit PC, install 64-bit Node.js and reinstall vercel instead.'
287
- );
288
- }
289
447
  if (stamp) {
290
448
  try {
291
449
  writeFileSync(stamp, '');
@@ -337,17 +495,25 @@ if (
337
495
  }
338
496
  }
339
497
 
498
+ markStartup('dependencies');
340
499
  try {
341
- await importJsCli();
500
+ await (cliSupportEntry
501
+ ? import(pathToFileURL(cliSupportEntry).href)
502
+ : import('./index.js'));
342
503
  } catch (error) {
343
- // Without a native binary the JS CLI is the only option; if its
344
- // dependencies are not installed either, name the missing package.
504
+ // The mapped package is missing and this package's own JS CLI cannot load
505
+ // either, so name the package to install.
345
506
  if (
346
- !nativeBin &&
347
- process.env.VERCEL_VC_NATIVE !== '1' &&
507
+ launch?.reason === 'target_missing' &&
348
508
  error?.code === 'ERR_MODULE_NOT_FOUND'
349
509
  ) {
350
- console.error(`Error: ${nativeUnavailableMessage()}`);
510
+ const pkg =
511
+ launch.target === 'cli-support'
512
+ ? '@vercel/cli-support'
513
+ : `@vercel/vc-native-${launch.target}`;
514
+ console.error(
515
+ `Error: ${pkg} is not installed. Reinstall vercel without omitting optional dependencies (for example, npm i -g vercel@latest).`
516
+ );
351
517
  console.error(error.message);
352
518
  process.exit(1);
353
519
  }
package/dist/version.mjs CHANGED
@@ -1,2 +1,2 @@
1
- export const version = "65.3.1";
1
+ export const version = "65.5.0-snapshot-13615777d933";
2
2
  export const buildLabel = "";