@depup/vercel 59.23.2-depup.0 → 62.2.0-depup.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 (260) hide show
  1. package/README.md +27 -8
  2. package/changes.json +87 -11
  3. package/dist/chunks/add-7HJR3HK7.js +8 -0
  4. package/dist/chunks/add-Q5OZFIRM.js +8 -0
  5. package/dist/chunks/add-VLVURKGS.js +8 -0
  6. package/dist/chunks/build-MR7MUWBQ.js +7 -0
  7. package/dist/chunks/chunk-23NBYS6R.js +36 -0
  8. package/dist/chunks/{chunk-YMVDWVMO.js → chunk-2RQFMCPJ.js} +1 -1
  9. package/dist/chunks/{chunk-IVWPQYIH.js → chunk-3R66O72V.js} +1 -1
  10. package/dist/chunks/{chunk-JGPECEYY.js → chunk-4HXRTNAK.js} +2 -2
  11. package/dist/chunks/chunk-5VWK73R6.js +10 -0
  12. package/dist/chunks/chunk-6JU3QZ3O.js +22 -0
  13. package/dist/chunks/{chunk-UXCTETFN.js → chunk-6NPXWN5F.js} +1 -1
  14. package/dist/chunks/{chunk-PS645CWM.js → chunk-743NGLUN.js} +1 -1
  15. package/dist/chunks/{chunk-WDVSYGZS.js → chunk-7ANQHBBE.js} +1 -1
  16. package/dist/chunks/chunk-7I23VXBQ.js +7 -0
  17. package/dist/chunks/{chunk-64NJHVA3.js → chunk-7IRKF3ZG.js} +6 -6
  18. package/dist/chunks/{chunk-NBVY237X.js → chunk-7JFK53D4.js} +1 -1
  19. package/dist/chunks/{chunk-FZH7RIRX.js → chunk-7POWBJDF.js} +7 -5
  20. package/dist/chunks/chunk-7T4CJ6MJ.js +9 -0
  21. package/dist/chunks/{chunk-SOQ5DE44.js → chunk-A752WDCH.js} +1 -1
  22. package/dist/chunks/{chunk-GTJ2OLYI.js → chunk-ACCZWEKL.js} +1 -1
  23. package/dist/chunks/chunk-ADDXKC3J.js +9 -0
  24. package/dist/chunks/{chunk-UUM2N6IG.js → chunk-AKPQWZIP.js} +4 -4
  25. package/dist/chunks/chunk-ALXWJ7XN.js +7 -0
  26. package/dist/chunks/chunk-B5PFD6Q3.js +7 -0
  27. package/dist/chunks/{chunk-WKZ6JSGZ.js → chunk-BKV35LVB.js} +1 -1
  28. package/dist/chunks/chunk-C3XFIO5L.js +7 -0
  29. package/dist/chunks/{chunk-GHULCYAR.js → chunk-C5KVTG2O.js} +1 -1
  30. package/dist/chunks/{chunk-QI3JSWD6.js → chunk-C6ITILVT.js} +2 -2
  31. package/dist/chunks/{chunk-KBKN7EI7.js → chunk-CQ3RAERR.js} +1 -1
  32. package/dist/chunks/chunk-CVX5X5RI.js +7 -0
  33. package/dist/chunks/chunk-D5VTBRWF.js +7 -0
  34. package/dist/chunks/{chunk-NYOQMU3P.js → chunk-DECIQZZQ.js} +4 -4
  35. package/dist/chunks/{chunk-E4X2DH4K.js → chunk-E4RLHRDF.js} +2 -2
  36. package/dist/chunks/chunk-EQHNA4BW.js +7 -0
  37. package/dist/chunks/{chunk-M6A7UH4U.js → chunk-GASSNHZG.js} +7 -7
  38. package/dist/chunks/{chunk-UGXNE4YE.js → chunk-HLVUEYOZ.js} +1 -1
  39. package/dist/chunks/chunk-HVROAV4B.js +9 -0
  40. package/dist/chunks/{chunk-4YVA7TSY.js → chunk-HYW4A5B3.js} +1 -1
  41. package/dist/chunks/{chunk-VIR3KDCQ.js → chunk-I46LFJJG.js} +1 -1
  42. package/dist/chunks/{chunk-ZXE4XYIV.js → chunk-ILFUNCJZ.js} +1 -1
  43. package/dist/chunks/{chunk-Z6LKARXP.js → chunk-ILXXXXVQ.js} +1 -1
  44. package/dist/chunks/chunk-J6OPPI3A.js +63 -0
  45. package/dist/chunks/{chunk-HOYHUMBD.js → chunk-JO3XBFR3.js} +1 -1
  46. package/dist/chunks/{chunk-MEAY2K5Z.js → chunk-JRU6AGXG.js} +1 -1
  47. package/dist/chunks/{chunk-6SA6SOHU.js → chunk-JSKSNCK2.js} +1 -1
  48. package/dist/chunks/{chunk-TJKM3345.js → chunk-K5WTLFS6.js} +1 -1
  49. package/dist/chunks/chunk-KG5BMLOI.js +7 -0
  50. package/dist/chunks/chunk-KOSM3DYE.js +7 -0
  51. package/dist/chunks/{chunk-7B5NNJ2P.js → chunk-KREBNPHL.js} +3 -3
  52. package/dist/chunks/{chunk-KXYR43H5.js → chunk-L46BHPRD.js} +1 -1
  53. package/dist/chunks/{chunk-T4AZ3U7O.js → chunk-LCWCTL6L.js} +1 -1
  54. package/dist/chunks/{chunk-GR3DLKYP.js → chunk-LCY4SULE.js} +1 -1
  55. package/dist/chunks/chunk-LHQUNL52.js +7 -0
  56. package/dist/chunks/chunk-M7ZGWERO.js +9 -0
  57. package/dist/chunks/{chunk-A5VLP25I.js → chunk-MCCL762Q.js} +1 -1
  58. package/dist/chunks/chunk-MK3CTSDV.js +24 -0
  59. package/dist/chunks/{chunk-RRQTVE2P.js → chunk-MKY5IBKK.js} +1 -1
  60. package/dist/chunks/{chunk-Z7PBDQNR.js → chunk-N4PVXHAJ.js} +4 -3
  61. package/dist/chunks/{chunk-UWZ5VIIQ.js → chunk-N5MNZPPJ.js} +1 -1
  62. package/dist/chunks/{chunk-6LE44WCK.js → chunk-N7XPPYQQ.js} +1 -1
  63. package/dist/chunks/{chunk-N3N5UHIL.js → chunk-NESZV33T.js} +1 -1
  64. package/dist/chunks/chunk-NRN65VUM.js +8 -0
  65. package/dist/chunks/{chunk-O7G3CZ42.js → chunk-NT67T6DL.js} +1 -1
  66. package/dist/chunks/chunk-NXTK7VKL.js +7 -0
  67. package/dist/chunks/chunk-PADCVJ7G.js +7 -0
  68. package/dist/chunks/{chunk-GGNZLN4R.js → chunk-PAI3WRPA.js} +1 -1
  69. package/dist/chunks/{chunk-GL2AUBAI.js → chunk-PTFKU33G.js} +1 -1
  70. package/dist/chunks/{chunk-JAJW3P42.js → chunk-PV5YI2ZZ.js} +1 -1
  71. package/dist/chunks/{chunk-WUZD4KBL.js → chunk-RFWCEREA.js} +1 -1
  72. package/dist/chunks/chunk-RINZXCDJ.js +19 -0
  73. package/dist/chunks/{chunk-EIXOJUNN.js → chunk-RVKOPGOI.js} +1 -1
  74. package/dist/chunks/{chunk-ZKYS7EAB.js → chunk-S2LBGLRE.js} +1 -1
  75. package/dist/chunks/{chunk-6OI6SRHZ.js → chunk-SDGWKUST.js} +1 -1
  76. package/dist/chunks/{chunk-V5DCSHYJ.js → chunk-SM5JI6QM.js} +1 -1
  77. package/dist/chunks/{chunk-QR7QPUFN.js → chunk-TKBORMUF.js} +1 -1
  78. package/dist/chunks/chunk-UOHVKN6N.js +8 -0
  79. package/dist/chunks/{chunk-73G2MHUX.js → chunk-UWO3M2L2.js} +1 -1
  80. package/dist/chunks/{chunk-ZKWM4JBE.js → chunk-VDOJERIW.js} +1 -1
  81. package/dist/chunks/chunk-VGXFOQ4P.js +8 -0
  82. package/dist/chunks/{chunk-ZDORSGCG.js → chunk-VTMLKJVQ.js} +1 -1
  83. package/dist/chunks/{chunk-2SLHYWMC.js → chunk-VZDY57PJ.js} +1 -1
  84. package/dist/chunks/chunk-W26LLGQV.js +7 -0
  85. package/dist/chunks/{chunk-EQ52F4LH.js → chunk-W7PVS44H.js} +1 -1
  86. package/dist/chunks/{chunk-6LE3FU2P.js → chunk-WN6OXK2F.js} +1 -1
  87. package/dist/chunks/{chunk-YGJO25LP.js → chunk-WOKSTB3F.js} +1 -1
  88. package/dist/chunks/{chunk-2HEC5TDU.js → chunk-WW3VUXRV.js} +1 -1
  89. package/dist/chunks/{chunk-J5X5YRBH.js → chunk-X47XV2WG.js} +1 -1
  90. package/dist/chunks/{chunk-4WSAOLBH.js → chunk-XQQGQ55A.js} +1 -1
  91. package/dist/chunks/chunk-ZQIUMXCI.js +7 -0
  92. package/dist/chunks/chunk-ZUYWATU5.js +27 -0
  93. package/dist/chunks/clear-PPE55RPM.js +8 -0
  94. package/dist/chunks/compile-vercel-config-2IC23CNT.js +7 -0
  95. package/dist/chunks/config-G2A6KPPM.js +8 -0
  96. package/dist/chunks/config-T3WHONFJ.js +7 -0
  97. package/dist/chunks/config-validator.mjs +1 -1
  98. package/dist/chunks/{connect-git-provider-P3SGOW6X.js → connect-git-provider-VYU65KTS.js} +1 -1
  99. package/dist/chunks/{constants-G4UYVLOF.js → constants-NCE2LWSS.js} +1 -1
  100. package/dist/chunks/delete-75SYJKNE.js +10 -0
  101. package/dist/chunks/delete-MHXN5KTO.js +9 -0
  102. package/dist/chunks/{detect-projects-WLAFT5HC.js → detect-projects-GJF4VXQI.js} +1 -1
  103. package/dist/chunks/detect-services-K3363KB7.js +7 -0
  104. package/dist/chunks/disable-OUYOHEWN.js +7 -0
  105. package/dist/chunks/discard-RXSHOY3J.js +14 -0
  106. package/dist/chunks/edit-Y7OL72ZK.js +9 -0
  107. package/dist/chunks/edit-Z5RCWPOX.js +8 -0
  108. package/dist/chunks/enable-HI2UH2NM.js +7 -0
  109. package/dist/chunks/{exec-YH5WUJ4C.js → exec-3RMS2X6B.js} +1 -1
  110. package/dist/chunks/{export-QCBAQNTT.js → export-CMP3APAJ.js} +1 -1
  111. package/dist/chunks/future-GS7ZLJ3N.js +7 -0
  112. package/dist/chunks/generate-cert-for-deploy-2HHUYGHU.js +7 -0
  113. package/dist/chunks/{image-DU7GJZR2.js → image-SQIUEBFK.js} +1 -1
  114. package/dist/chunks/import-builders-EUOOFPHW.js +7 -0
  115. package/dist/chunks/inspect-2SXPXNYH.js +13 -0
  116. package/dist/chunks/{inspect-IVJOEZC4.js → inspect-DYNTJMTQ.js} +1 -1
  117. package/dist/chunks/inspect-J3F3U3YF.js +9 -0
  118. package/dist/chunks/{inspect-EMWJLBAW.js → inspect-KYFVYFWX.js} +1 -1
  119. package/dist/chunks/{inspect-CPOFKE4X.js → inspect-V7HA2GZ5.js} +1 -1
  120. package/dist/chunks/{list-KYZNCXBM.js → list-TSDBEAVF.js} +1 -1
  121. package/dist/chunks/{list-ZE2VPPXI.js → list-X4MKKDJX.js} +1 -1
  122. package/dist/chunks/list-ZQSOWXRI.js +11 -0
  123. package/dist/chunks/login-5FMKHZVG.js +7 -0
  124. package/dist/chunks/login-YEDMPXUF.js +9 -0
  125. package/dist/chunks/logs-X2OIQXGW.js +7 -0
  126. package/dist/chunks/{ls-7O63WIES.js → ls-4W4KTJ6T.js} +1 -1
  127. package/dist/chunks/{ls-DU5QTKKA.js → ls-6EDJUUDW.js} +1 -1
  128. package/dist/chunks/{ls-P6LKMT33.js → ls-BMAVUMXU.js} +1 -1
  129. package/dist/chunks/{ls-AKGRKWHM.js → ls-HK45UWBD.js} +1 -1
  130. package/dist/chunks/ls-LAYBQVU2.js +8 -0
  131. package/dist/chunks/ls-SQ42O6O5.js +11 -0
  132. package/dist/chunks/ls-XIJ4CY2N.js +8 -0
  133. package/dist/chunks/mutate-6FCOCHSA.js +9 -0
  134. package/dist/chunks/notifications-JTK7ZOLC.js +7 -0
  135. package/dist/chunks/open-3G4R3VIN.js +7 -0
  136. package/dist/chunks/openapi-W365UPH2.js +7 -0
  137. package/dist/chunks/{permissions-AE5JO26V.js → permissions-IWUBXZBZ.js} +1 -1
  138. package/dist/chunks/prompt-missing-credentials-VDR5HVA2.js +7 -0
  139. package/dist/chunks/publish-5QKVU6YV.js +15 -0
  140. package/dist/chunks/pull-K4JQEP7N.js +7 -0
  141. package/dist/chunks/purchase-domain-if-available-Q7H2TGKR.js +7 -0
  142. package/dist/chunks/push-COILRLCW.js +7 -0
  143. package/dist/chunks/{query-PHAGR43V.js → query-ABPO2REN.js} +2 -2
  144. package/dist/chunks/{reauthenticate-O6C2AW3J.js → reauthenticate-3H5Q2ZWD.js} +1 -1
  145. package/dist/chunks/reorder-FBUQ5ET7.js +10 -0
  146. package/dist/chunks/reply-FR5VO7DA.js +9 -0
  147. package/dist/chunks/resolve-JI2ENFS6.js +12 -0
  148. package/dist/chunks/{resolve-deployment-framework-preset-XF3NJIDS.js → resolve-deployment-framework-preset-QEPJNWVF.js} +1 -1
  149. package/dist/chunks/restore-LYY4BSYJ.js +16 -0
  150. package/dist/chunks/rm-C2RWWMO3.js +8 -0
  151. package/dist/chunks/rm-CYYVIF2U.js +8 -0
  152. package/dist/chunks/rm-ETLZ75RJ.js +8 -0
  153. package/dist/chunks/rm-GHSQEFRG.js +8 -0
  154. package/dist/chunks/rm-KHO6RV55.js +8 -0
  155. package/dist/chunks/{routes-IPGKJ2E4.js → routes-FOCZWOGO.js} +1 -1
  156. package/dist/chunks/rule-inspect-MISYALLU.js +8 -0
  157. package/dist/chunks/{rules-6TZ6GSKT.js → rules-KAGL6MH3.js} +1 -1
  158. package/dist/chunks/schema-EKWTCBNR.js +14 -0
  159. package/dist/chunks/{schema-5CZLK6NI.js → schema-FZVKQRNB.js} +2 -2
  160. package/dist/chunks/{select-org-F2A5JJFH.js → select-org-37C26F7T.js} +1 -1
  161. package/dist/chunks/set-5D7C6HMZ.js +7 -0
  162. package/dist/chunks/setup-and-link-H4P3FZB3.js +7 -0
  163. package/dist/chunks/{tags-C3HWJLJ4.js → tags-DVGQQZNC.js} +1 -1
  164. package/dist/chunks/{types-H3B56MH6.js → types-UN5J66MI.js} +1 -1
  165. package/dist/chunks/{update-5HE4X45O.js → update-QY3ZME4T.js} +1 -1
  166. package/dist/chunks/vlt-builder-importer-W63QEXYX.js +11 -0
  167. package/dist/commands/build/index.js +1 -1
  168. package/dist/commands/deploy/index.js +9 -9
  169. package/dist/commands/dev/index.js +24 -21
  170. package/dist/commands/env/index.js +1 -1
  171. package/dist/commands/link/index.js +1 -1
  172. package/dist/commands/list/index.js +2 -2
  173. package/dist/commands-bulk.js +791 -704
  174. package/dist/help.js +1 -1
  175. package/dist/index.js +7 -6
  176. package/dist/internal-build-worker.js +10 -0
  177. package/dist/root-help-commands.mjs +1 -0
  178. package/dist/vc.js +110 -11
  179. package/dist/version.mjs +1 -1
  180. package/package.json +151 -73
  181. package/dist/chunks/add-JVSHQKWC.js +0 -8
  182. package/dist/chunks/add-UKFIETLE.js +0 -8
  183. package/dist/chunks/add-Z3CJT63N.js +0 -8
  184. package/dist/chunks/build-SMQYQX23.js +0 -7
  185. package/dist/chunks/chunk-32QBGZ2Z.js +0 -7
  186. package/dist/chunks/chunk-3QHJYVCY.js +0 -7
  187. package/dist/chunks/chunk-5YA32S6K.js +0 -7
  188. package/dist/chunks/chunk-65JYSI26.js +0 -7
  189. package/dist/chunks/chunk-66RYR2GI.js +0 -7
  190. package/dist/chunks/chunk-6C7LA5RA.js +0 -9
  191. package/dist/chunks/chunk-6PFC3KWQ.js +0 -7
  192. package/dist/chunks/chunk-ABSRS5KC.js +0 -9
  193. package/dist/chunks/chunk-AZ6NRDHG.js +0 -7
  194. package/dist/chunks/chunk-BX5KDMLT.js +0 -10
  195. package/dist/chunks/chunk-CVKB54WW.js +0 -7
  196. package/dist/chunks/chunk-DL665Q3Z.js +0 -7
  197. package/dist/chunks/chunk-EHTHHCNG.js +0 -130
  198. package/dist/chunks/chunk-EQP3SW72.js +0 -7
  199. package/dist/chunks/chunk-FB5TMOLQ.js +0 -7
  200. package/dist/chunks/chunk-GRDPI246.js +0 -29
  201. package/dist/chunks/chunk-J3U3L45Y.js +0 -7
  202. package/dist/chunks/chunk-KK4AJES5.js +0 -36
  203. package/dist/chunks/chunk-KUVMCIR4.js +0 -7
  204. package/dist/chunks/chunk-LKI6FRNM.js +0 -19
  205. package/dist/chunks/chunk-M5AV545M.js +0 -7
  206. package/dist/chunks/chunk-NZKBBY2A.js +0 -24
  207. package/dist/chunks/chunk-OAKO6LVS.js +0 -7
  208. package/dist/chunks/chunk-SFTXBTMI.js +0 -7
  209. package/dist/chunks/chunk-TBBU37TD.js +0 -9
  210. package/dist/chunks/chunk-TOGR3HUB.js +0 -8
  211. package/dist/chunks/chunk-V6IKQCOT.js +0 -8
  212. package/dist/chunks/chunk-WHYH7DVI.js +0 -20
  213. package/dist/chunks/chunk-X4X5RB2V.js +0 -7
  214. package/dist/chunks/clear-6IXTTZO6.js +0 -8
  215. package/dist/chunks/compile-vercel-config-ZFMPTU47.js +0 -7
  216. package/dist/chunks/config-HLVJQKP7.js +0 -7
  217. package/dist/chunks/config-XXHMPW46.js +0 -8
  218. package/dist/chunks/delete-52QKO73X.js +0 -10
  219. package/dist/chunks/delete-6VOUZDIR.js +0 -9
  220. package/dist/chunks/detect-services-YYT3LUUX.js +0 -7
  221. package/dist/chunks/disable-7FGR2S56.js +0 -7
  222. package/dist/chunks/discard-XKPTY3DC.js +0 -14
  223. package/dist/chunks/edit-A3HJCNPW.js +0 -8
  224. package/dist/chunks/edit-A7WGTO6K.js +0 -9
  225. package/dist/chunks/enable-NGKLGHJ2.js +0 -7
  226. package/dist/chunks/future-BB7OE645.js +0 -7
  227. package/dist/chunks/generate-cert-for-deploy-U7JF3HF3.js +0 -7
  228. package/dist/chunks/import-builders-IFZM44NL.js +0 -7
  229. package/dist/chunks/inspect-PHUMEO4A.js +0 -9
  230. package/dist/chunks/inspect-Q7OVSWFO.js +0 -13
  231. package/dist/chunks/list-G4JM2TYX.js +0 -11
  232. package/dist/chunks/login-AVVJFLSC.js +0 -9
  233. package/dist/chunks/login-RMAISH4F.js +0 -7
  234. package/dist/chunks/logs-3LTU2N25.js +0 -7
  235. package/dist/chunks/ls-4M2OBNG6.js +0 -8
  236. package/dist/chunks/ls-HWUYP3XY.js +0 -8
  237. package/dist/chunks/ls-Y4QR3I6O.js +0 -11
  238. package/dist/chunks/mutate-KOAALPIL.js +0 -9
  239. package/dist/chunks/notifications-3RDFNJSD.js +0 -7
  240. package/dist/chunks/open-VD4F6MAO.js +0 -7
  241. package/dist/chunks/openapi-DKMCRF2V.js +0 -7
  242. package/dist/chunks/prompt-missing-credentials-QY4MZDT6.js +0 -7
  243. package/dist/chunks/publish-YXVJXBQT.js +0 -15
  244. package/dist/chunks/pull-QLC2CV4J.js +0 -7
  245. package/dist/chunks/purchase-domain-if-available-74ZYVVBE.js +0 -7
  246. package/dist/chunks/push-TMPPU5NU.js +0 -7
  247. package/dist/chunks/reorder-OAJ3NXQQ.js +0 -10
  248. package/dist/chunks/reply-Q3JFRFA3.js +0 -9
  249. package/dist/chunks/resolve-XXJVOXNE.js +0 -12
  250. package/dist/chunks/restore-MO4B2EQV.js +0 -16
  251. package/dist/chunks/rm-63LFH6NA.js +0 -8
  252. package/dist/chunks/rm-F2XD2XKB.js +0 -8
  253. package/dist/chunks/rm-GMG2DZOV.js +0 -8
  254. package/dist/chunks/rm-P6KA5RSP.js +0 -8
  255. package/dist/chunks/rm-SZ4HWA4R.js +0 -8
  256. package/dist/chunks/rule-inspect-JKAXOBII.js +0 -8
  257. package/dist/chunks/schema-S2ZAREKF.js +0 -14
  258. package/dist/chunks/set-PIKLGKT6.js +0 -7
  259. package/dist/chunks/setup-and-link-O5QSQ5K2.js +0 -7
  260. package/dist/chunks/vlt-builder-importer-YVCYYRVV.js +0 -11
@@ -25,7 +25,7 @@ ${MANAGED_BLOCK_END}`,existing=current??"",start=existing.indexOf(MANAGED_BLOCK_
25
25
 
26
26
  `;return`${existing}${prefix}${block}
27
27
  `}async function publishNoClobber(temporary,destination){try{return await link(temporary,destination),!0}catch(error){if(error.code==="EEXIST")return!1;throw error}finally{await unlink(temporary).catch(()=>{})}}async function ensureMode(path,mode){try{await chmod(path,mode)}catch{}}async function backupFile(path,mode){let backupPath=`${path}.bak`;return mode===void 0?(await copyFile(path,backupPath),backupPath):(await ensureMode(backupPath,mode),await writeFile(backupPath,await readFile(path,"utf8"),{mode}),backupPath)}async function writeConfigFile(path,content,mode){await mkdir(dirname(path),{recursive:!0}),mode!==void 0&&await ensureMode(path,mode),await writeFile(path,content,mode===void 0?"utf8":{mode})}var GATEWAY_ANTHROPIC_BASE_URL="https://ai-gateway.vercel.sh",GATEWAY_CODING_AGENT_BASE_URL="https://ai-gateway.vercel.sh/coding-agent/v1",GATEWAY_CURSOR_BASE_URL="https://ai-gateway.vercel.sh/cursor/v1",GATEWAY_CODEX_BASE_URL="https://ai-gateway.vercel.sh/codex/v1",GATEWAY_CLAUDE_CODE_BASE_URL="https://ai-gateway.vercel.sh/claude-code",GATEWAY_API_KEY_ENV="AI_GATEWAY_API_KEY",GATEWAY_DEFAULT_MODEL="anthropic/claude-fable-5",KEY_PLACEHOLDER="__AI_GATEWAY_API_KEY__";function resolveGatewayBaseUrl(override,agentDefault){let trimmed=override?.trim();return trimmed||agentDefault}function maskSecret(secret){return secret&&(secret===KEY_PLACEHOLDER||secret.length<=8?"\u2022\u2022\u2022\u2022":`${secret.slice(0,4)}\u2022\u2022\u2022\u2022${secret.slice(-4)}`)}import{randomUUID}from"node:crypto";import*as fs from"node:fs/promises";import{dirname as dirname2,join}from"node:path";var MAX_RECORD_BYTES=1024*1024;function codeSpan(value){return`\`${value.replace(/[`\r\n]/g,"")}\``}var RECORD_PATTERN=/\.json$/;function claudeAppSupportRoot(home){return process.platform==="darwin"?join(home,"Library","Application Support"):process.platform==="win32"?process.env.APPDATA||join(home,"AppData","Roaming"):join(home,".config")}function toGatewayModelId(model){return model.includes("/")?model:`anthropic/${model}`}async function listSubdirectories(path){try{return(await fs.readdir(path,{withFileTypes:!0})).filter(e=>e.isDirectory()).map(e=>e.name)}catch{return[]}}async function findDestinationIdentity(root){let best=null;for(let account of await listSubdirectories(root))for(let org of await listSubdirectories(join(root,account))){let path=join(root,account,org);try{let stat3=await fs.stat(path);(!best||stat3.mtimeMs>best.mtime)&&(best={path,mtime:stat3.mtimeMs})}catch{}}return best?.path??null}async function readRecord(path){let stat3;try{stat3=await fs.stat(path)}catch{return null}if(!stat3.isFile()||stat3.size>MAX_RECORD_BYTES)return null;try{let raw=await fs.readFile(path,"utf8"),record=JSON.parse(raw);return typeof record!="object"||record===null||Array.isArray(record)?null:{record,bytes:stat3.size}}catch{return null}}async function writeRecordNoClobber(destination,contents){if(await pathExists(destination))return"skipped";await fs.mkdir(dirname2(destination),{recursive:!0});let temp=join(dirname2(destination),`.migrate-${randomUUID()}.tmp`);return await fs.writeFile(temp,contents,{mode:384}),await publishNoClobber(temp,destination)?"copied":"skipped"}async function planClaudeDesktopSessionMigration(home,appSupportRoot=claudeAppSupportRoot(home)){let subscriptionRoot=join(appSupportRoot,"Claude","claude-code-sessions"),gatewayRoot=join(appSupportRoot,"Claude-3p","claude-code-sessions"),destinationDir=await findDestinationIdentity(gatewayRoot);if(!destinationDir)return null;let copies=[],totalBytes=0;for(let account of await listSubdirectories(subscriptionRoot))for(let org of await listSubdirectories(join(subscriptionRoot,account))){let identityDir=join(subscriptionRoot,account,org),names;try{names=await fs.readdir(identityDir)}catch{continue}for(let name of names){if(!RECORD_PATTERN.test(name))continue;let source=join(identityDir,name),destination=join(destinationDir,name);if(await pathExists(destination))continue;let read=await readRecord(source);read&&(copies.push({source,destination,bytes:read.bytes}),totalBytes+=read.bytes)}}return copies.length===0?null:{label:"Claude Desktop sessions",itemCount:copies.length,totalBytes,sourceRoots:[subscriptionRoot],destinationRoots:[destinationDir],prompt:[`Copy the ${copies.length} Claude Desktop session record${copies.length===1?"":"s"} (per-session \`.json\` files) under ${codeSpan(subscriptionRoot)} into ${codeSpan(destinationDir)}, keeping each filename.`,"In each copy, rewrite the top-level `model` field to its AI Gateway id by prefixing `anthropic/` when the value has no provider prefix (e.g. `claude-opus-4-8` \u2192 `anthropic/claude-opus-4-8`); keep any suffix such as `[1m]` intact. Leave every other field unchanged.","Use atomic, no-clobber writes with mode 0600; skip records whose destination already exists. Never move, edit, delete, or overwrite an original record."],async apply(){let copied=0,skipped=0,errors=[];for(let copy of copies)try{let read=await readRecord(copy.source);if(!read){skipped+=1;continue}let record={...read.record};typeof record.model=="string"&&(record.model=toGatewayModelId(record.model)),await writeRecordNoClobber(copy.destination,`${JSON.stringify(record)}
28
- `)==="copied"?copied+=1:skipped+=1}catch(error){errors.push(`${copy.source}: ${error instanceof Error?error.message:String(error)}`)}return errors.length>0?{copied,skipped,errors}:{copied,skipped}}}}function claudeDir(home){let dir=process.env.CLAUDE_CONFIG_DIR;return dir&&dir.trim()?dir:join2(home,".claude")}var claudeCode={id:"claude-code",displayName:"Claude Code",sessionMigration:{plan:({home})=>planClaudeDesktopSessionMigration(home)},async detect(home){return pathExists(claudeDir(home))},configPath(ctx){return ctx.overrides?.["claude-code"]??join2(claudeDir(ctx.home),"settings.json")},buildPlan(ctx){let path=this.configPath(ctx),env={ANTHROPIC_BASE_URL:resolveGatewayBaseUrl(ctx.baseUrlOverride,GATEWAY_CLAUDE_CODE_BASE_URL),ANTHROPIC_API_KEY:"",CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY:"1"},envExports=[];return ctx.useKeychain?envExports.push({name:"ANTHROPIC_AUTH_TOKEN",value:ctx.apiKey}):env.ANTHROPIC_AUTH_TOKEN=ctx.apiKey,{fileChanges:[{path,label:"Claude Code settings",format:"json",...ctx.useKeychain?{}:{mode:384},transform:current=>mergeJson(current,{env})}],envExports,notes:[...ctx.useKeychain?["The Anthropic auth token is read from your shell environment (Keychain-backed).","Open a new terminal so ANTHROPIC_AUTH_TOKEN is loaded, then restart Claude Code."]:["Restart Claude Code to pick up the new settings."],"The Claude Desktop app switches providers in its own settings (Developer \u2192 Configure Third-Party Inference\u2026). After its first gateway launch, re-run this command to copy your existing desktop sessions over."]}}};var PREFS_FILE="agent-preferences.json",CLAUDE_LEGACY_PLUGIN_ID="vercel-plugin@vercel",CLAUDE_OFFICIAL_PLUGIN_ID="vercel@claude-plugins-official",VERCEL_PLUGIN_VERSION_URL="https://raw.githubusercontent.com/vercel/vercel-plugin/main/.claude-plugin/plugin.json",AGENT_TO_TARGET={[KNOWN_AGENTS.CLAUDE]:"claude-code",[KNOWN_AGENTS.COWORK]:"claude-code"};function getPluginTargetForAgent(agentName){if(agentName)return agentName===KNOWN_AGENTS.CLAUDE||agentName.startsWith("claude-code")||agentName===KNOWN_AGENTS.COWORK?"claude-code":AGENT_TO_TARGET[agentName]}var promptedAtSchema=z.codec(z.union([z.iso.date(),z.iso.datetime()]),z.date(),{decode:value=>new Date(value),encode:value=>value.toISOString()}),agentPreferencesSchema=z.object({pluginDeclined:z.boolean().optional(),pluginAutoUpdate:z.boolean().optional(),lastPromptedAt:promptedAtSchema.optional(),lastPluginAutoUpdateAttemptedAt:promptedAtSchema.optional(),lastPluginAutoUpdateAttemptedKey:z.string().optional()});async function fileExists(filePath){try{return await access2(filePath),!0}catch{return!1}}async function readPrefs(client){return await client.maybeReadConfig(PREFS_FILE,agentPreferencesSchema)??{}}async function writePrefs(client,prefs){try{await client.writeConfig(PREFS_FILE,agentPreferencesSchema,prefs)}catch{}}function encodeClaudeProjectDir(projectPath){return projectPath.replace(/[^A-Za-z0-9]/g,"-")}async function projectHasUsedClaudeCode(cwd){let home=homedir(),projectsDir=join3(home,".claude","projects"),dir=resolve(cwd);for(;dir!==home;){if(await fileExists(join3(projectsDir,encodeClaudeProjectDir(dir))))return!0;let parent=dirname3(dir);if(parent===dir)break;dir=parent}return!1}async function getPluginTargets(agentName,cwd){let targetForAgent=getPluginTargetForAgent(agentName);return targetForAgent?[targetForAgent]:agentName?[]:cwd&&await projectHasUsedClaudeCode(cwd)?["claude-code"]:[]}async function readClaudeInstalledPluginsFromRegistry(){try{let raw=await readFile3(getClaudeInstalledPluginsRegistryPath(),"utf-8"),plugins=JSON.parse(raw)?.plugins??{},entries=[];for(let[id,installs]of Object.entries(plugins))if(Array.isArray(installs))for(let install of installs)!install||typeof install!="object"||entries.push({id,...install,enabled:!0});return entries}catch{return[]}}function getClaudeInstalledPluginsRegistryPath(){return join3(homedir(),".claude","plugins","installed_plugins.json")}async function markStaleClaudePluginInstalls(plugins){return Promise.all(plugins.map(async plugin=>plugin.installPath&&!await fileExists(plugin.installPath)?{...plugin,stale:!0}:plugin))}async function removeClaudePluginFromRegistry(pluginId){try{let registryPath=getClaudeInstalledPluginsRegistryPath(),raw=await readFile3(registryPath,"utf-8"),data=JSON.parse(raw);return!data.plugins||!(pluginId in data.plugins)?!1:(delete data.plugins[pluginId],await writeFile3(registryPath,`${JSON.stringify(data,null,2)}
28
+ `)==="copied"?copied+=1:skipped+=1}catch(error){errors.push(`${copy.source}: ${error instanceof Error?error.message:String(error)}`)}return errors.length>0?{copied,skipped,errors}:{copied,skipped}}}}function claudeDir(home){let dir=process.env.CLAUDE_CONFIG_DIR;return dir&&dir.trim()?dir:join2(home,".claude")}var claudeCode={id:"claude-code",displayName:"Claude Code",sessionMigration:{plan:({home})=>planClaudeDesktopSessionMigration(home)},async detect(home){return pathExists(claudeDir(home))},configPath(ctx){return ctx.overrides?.["claude-code"]??join2(claudeDir(ctx.home),"settings.json")},buildPlan(ctx){let path=this.configPath(ctx),env={ANTHROPIC_BASE_URL:resolveGatewayBaseUrl(ctx.baseUrlOverride,GATEWAY_CLAUDE_CODE_BASE_URL),ANTHROPIC_API_KEY:"",CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY:"1",ENABLE_TOOL_SEARCH:"true"},envExports=[];return ctx.useKeychain?envExports.push({name:"ANTHROPIC_AUTH_TOKEN",value:ctx.apiKey}):env.ANTHROPIC_AUTH_TOKEN=ctx.apiKey,{fileChanges:[{path,label:"Claude Code settings",format:"json",...ctx.useKeychain?{}:{mode:384},transform:current=>mergeJson(current,{env})}],envExports,notes:[...ctx.useKeychain?["The Anthropic auth token is read from your shell environment (Keychain-backed).","Open a new terminal so ANTHROPIC_AUTH_TOKEN is loaded, then restart Claude Code."]:["Restart Claude Code to pick up the new settings."],"The Claude Desktop app switches providers in its own settings (Developer \u2192 Configure Third-Party Inference\u2026). After its first gateway launch, re-run this command to copy your existing desktop sessions over."]}}};var PREFS_FILE="agent-preferences.json",CLAUDE_LEGACY_PLUGIN_ID="vercel-plugin@vercel",CLAUDE_OFFICIAL_PLUGIN_ID="vercel@claude-plugins-official",VERCEL_PLUGIN_VERSION_URL="https://raw.githubusercontent.com/vercel/vercel-plugin/main/.claude-plugin/plugin.json",AGENT_TO_TARGET={[KNOWN_AGENTS.CLAUDE]:"claude-code",[KNOWN_AGENTS.COWORK]:"claude-code"};function getPluginTargetForAgent(agentName){if(agentName)return agentName===KNOWN_AGENTS.CLAUDE||agentName.startsWith("claude-code")||agentName===KNOWN_AGENTS.COWORK?"claude-code":AGENT_TO_TARGET[agentName]}var promptedAtSchema=z.codec(z.union([z.iso.date(),z.iso.datetime()]),z.date(),{decode:value=>new Date(value),encode:value=>value.toISOString()}),agentPreferencesSchema=z.object({pluginDeclined:z.boolean().optional(),pluginAutoUpdate:z.boolean().optional(),lastPromptedAt:promptedAtSchema.optional(),lastPluginAutoUpdateAttemptedAt:promptedAtSchema.optional(),lastPluginAutoUpdateAttemptedKey:z.string().optional()});async function fileExists(filePath){try{return await access2(filePath),!0}catch{return!1}}async function readPrefs(client){return await client.maybeReadConfig(PREFS_FILE,agentPreferencesSchema)??{}}async function writePrefs(client,prefs){try{await client.writeConfig(PREFS_FILE,agentPreferencesSchema,prefs)}catch{}}function encodeClaudeProjectDir(projectPath){return projectPath.replace(/[^A-Za-z0-9]/g,"-")}async function projectHasUsedClaudeCode(cwd){let home=homedir(),projectsDir=join3(home,".claude","projects"),dir=resolve(cwd);for(;dir!==home;){if(await fileExists(join3(projectsDir,encodeClaudeProjectDir(dir))))return!0;let parent=dirname3(dir);if(parent===dir)break;dir=parent}return!1}async function getPluginTargets(agentName,cwd){let targetForAgent=getPluginTargetForAgent(agentName);return targetForAgent?[targetForAgent]:agentName?[]:cwd&&await projectHasUsedClaudeCode(cwd)?["claude-code"]:[]}async function readClaudeInstalledPluginsFromRegistry(){try{let raw=await readFile3(getClaudeInstalledPluginsRegistryPath(),"utf-8"),plugins=JSON.parse(raw)?.plugins??{},entries=[];for(let[id,installs]of Object.entries(plugins))if(Array.isArray(installs))for(let install of installs)!install||typeof install!="object"||entries.push({id,...install,enabled:!0});return entries}catch{return[]}}function getClaudeInstalledPluginsRegistryPath(){return join3(homedir(),".claude","plugins","installed_plugins.json")}async function markStaleClaudePluginInstalls(plugins){return Promise.all(plugins.map(async plugin=>plugin.installPath&&!await fileExists(plugin.installPath)?{...plugin,stale:!0}:plugin))}async function removeClaudePluginFromRegistry(pluginId){try{let registryPath=getClaudeInstalledPluginsRegistryPath(),raw=await readFile3(registryPath,"utf-8"),data=JSON.parse(raw);return!data.plugins||!(pluginId in data.plugins)?!1:(delete data.plugins[pluginId],await writeFile3(registryPath,`${JSON.stringify(data,null,2)}
29
29
  `,"utf-8"),!0)}catch(err){return output_manager_default.debug(`Failed to remove Claude plugin registry entry: ${err}`),!1}}async function isPluginInstalledForTarget(target){return target==="claude-code"?(await getClaudePluginStatus()).state==="official-only":!1}async function confirm(client,message){return client.nonInteractive||!client.stdin.isTTY?!1:client.input.confirm(message,!0)}function isSameDay(left,right){return left.getFullYear()===right.getFullYear()&&left.getMonth()===right.getMonth()&&left.getDate()===right.getDate()}function wasPromptedToday(prefs){return prefs.lastPromptedAt?isSameDay(prefs.lastPromptedAt,new Date):!1}function wasPluginAutoUpdateAttemptedToday(prefs,attemptKey){return prefs.lastPluginAutoUpdateAttemptedKey===attemptKey&&!!prefs.lastPluginAutoUpdateAttemptedAt&&isSameDay(prefs.lastPluginAutoUpdateAttemptedAt,new Date)}async function markPromptedToday(client,prefs){prefs.lastPromptedAt=new Date,await writePrefs(client,prefs)}function markPluginAutoUpdateAttempted(prefs,attemptKey){attemptKey&&(prefs.lastPluginAutoUpdateAttemptedAt=new Date,prefs.lastPluginAutoUpdateAttemptedKey=attemptKey)}async function runCommand(command,args){return await new Promise(resolve2=>{let child=spawn(command,args,{stdio:"pipe"}),stdout="",stderr="";child.stdout.on("data",chunk=>{stdout+=chunk.toString()}),child.stderr.on("data",chunk=>{stderr+=chunk.toString()}),child.on("close",code=>{resolve2({exitCode:code??1,stdout,stderr})}),child.on("error",err=>{resolve2({exitCode:1,stdout,stderr:`${stderr}${String(err)}`})})})}async function getClaudeInstalledPlugins(){let result=await runCommand("claude",["plugins","list","--json"]);if(result.exitCode===0)try{let parsed=JSON.parse(result.stdout);if(Array.isArray(parsed))return markStaleClaudePluginInstalls(parsed)}catch(err){output_manager_default.debug(`Failed to parse Claude plugin list JSON: ${err}`)}else result.stderr.trim().length>0&&output_manager_default.debug(`Failed to run 'claude plugins list --json': ${result.stderr}`);return markStaleClaudePluginInstalls(await readClaudeInstalledPluginsFromRegistry())}async function fetchLatestVercelPluginVersion(){try{let response=await fetch(VERCEL_PLUGIN_VERSION_URL);if(!response.ok){output_manager_default.debug(`Failed to fetch latest Vercel plugin version: ${response.status}`);return}let manifest=await response.json();return typeof manifest.version=="string"?manifest.version:void 0}catch(err){output_manager_default.debug(`Failed to fetch latest Vercel plugin version: ${err}`);return}}function comparePluginVersions(a,b){if(!a&&!b)return 0;if(!a)return-1;if(!b)return 1;let parse2=value=>value.split(".").map(part=>Number.parseInt(part,10)||0),left=parse2(a),right=parse2(b),maxLength=Math.max(left.length,right.length);for(let i=0;i<maxLength;i++){let l=left[i]??0,r=right[i]??0;if(l>r)return 1;if(l<r)return-1}return 0}function buildClaudePluginStatus(installedPlugins,latestVersion){let legacy=installedPlugins.find(plugin=>plugin.id===CLAUDE_LEGACY_PLUGIN_ID),official=installedPlugins.find(plugin=>plugin.id===CLAUDE_OFFICIAL_PLUGIN_ID),state="none";return legacy&&official?state="both":legacy?state="legacy-only":official&&(state="official-only"),{state,legacy,official,latestVersion}}function buildClaudePluginMigrationPlan(status){let plan={installOfficial:!1,updateOfficial:!1,removeLegacy:!1,removeLegacyMarketplace:!1};switch(status.state){case"none":plan.installOfficial=!0;break;case"legacy-only":plan.installOfficial=!0,plan.removeLegacy=!0,plan.removeLegacyMarketplace=!0;break;case"both":plan.removeLegacy=!0,plan.removeLegacyMarketplace=!0;break;case"official-only":break}return status.official?.version&&status.latestVersion&&comparePluginVersions(status.official.version,status.latestVersion)<0&&(plan.updateOfficial=!0),plan}function hasClaudeMigrationActions(plan){return plan.installOfficial||plan.updateOfficial||plan.removeLegacy||plan.removeLegacyMarketplace}function getClaudeAutoUpdateAttemptKey(status,plan){return[status.state,status.legacy?.version??"none",status.official?.version??"none",status.latestVersion??"unknown",plan.installOfficial?"install":"",plan.updateOfficial?"update":"",plan.removeLegacy?"remove-legacy":"",plan.removeLegacyMarketplace?"remove-marketplace":""].join(":")}function buildClaudePromptCopy(status,plan){if(plan.installOfficial&&status.state==="none")return{message:"Vercel Plugin for Claude Code is not installed.",confirm:"Would you like to install it now?"};if(plan.installOfficial&&status.state==="legacy-only")return{message:"Update available for Vercel Plugin for Claude Code (legacy -> official).",confirm:"Would you like to update now?"};if(status.state==="both"&&plan.removeLegacy)return{message:"Vercel Plugin for Claude Code has a legacy install to clean up.",confirm:"Would you like to update now?"};if(plan.updateOfficial){let fromVersion=status.official?.version,toVersion=status.latestVersion;return{message:`Update available for Vercel Plugin for Claude Code${fromVersion&&toVersion?` (v${fromVersion} -> v${toVersion})`:""}.`,confirm:"Would you like to update now?"}}return{message:"The Vercel plugin needs attention in Claude Code before your agent harness is fully up to date.",confirm:"Apply the Vercel plugin changes for Claude Code?"}}async function runClaudeCommand(spinnerMessage,successMessage,failureMessage,args,options){output_manager_default.spinner(spinnerMessage);let result=await runCommand("claude",args);return output_manager_default.stopSpinner(),result.exitCode===0?(options?.quietSuccess||output_manager_default.success(successMessage),!0):(output_manager_default.warn(failureMessage),output_manager_default.debug(`Claude command failed: claude ${args.join(" ")}
30
30
  ${result.stderr||result.stdout}`),!1)}async function removeStaleLegacyClaudePlugin(removeMarketplace){output_manager_default.spinner("Removing the stale legacy Vercel Claude plugin...");let removedRegistryEntry=await removeClaudePluginFromRegistry(CLAUDE_LEGACY_PLUGIN_ID);if(output_manager_default.stopSpinner(),!removedRegistryEntry)return output_manager_default.warn("Could not remove the stale legacy Vercel Claude plugin registry entry."),{removedPlugin:!1,complete:!1};if(output_manager_default.success("Removed the stale legacy Vercel Claude plugin"),removeMarketplace){let removedMarketplace=await runClaudeCommand("Removing the legacy Vercel marketplace...","Removed the legacy Vercel marketplace","Removed the stale legacy Vercel plugin, but could not remove the legacy marketplace.",["plugins","marketplace","remove","vercel"],{quietSuccess:!0});return removedMarketplace||output_manager_default.log("Cleanup command: claude plugins marketplace remove vercel"),{removedPlugin:!0,complete:removedMarketplace}}return{removedPlugin:!0,complete:!0}}async function runClaudeMigration(plan){let removedStaleLegacy=!1,complete=!0;if(plan.removeLegacy&&(await getClaudePluginStatus()).legacy?.stale){let cleanup=await removeStaleLegacyClaudePlugin(plan.removeLegacyMarketplace);removedStaleLegacy=cleanup.removedPlugin,complete=cleanup.complete}if(plan.installOfficial){if(!await runClaudeCommand("Installing the official Vercel Claude plugin...","Updated the Vercel plugin","Failed to install the official Vercel Claude plugin.",["plugins","install",CLAUDE_OFFICIAL_PLUGIN_ID]))return!1}else if(plan.updateOfficial&&!await runClaudeCommand("Updating the official Vercel Claude plugin...","Updated the Vercel plugin","Failed to update the official Vercel Claude plugin.",["plugins","update",CLAUDE_OFFICIAL_PLUGIN_ID]))return!1;let statusAfterInstall=await getClaudePluginStatus();return statusAfterInstall.official?plan.removeLegacy&&statusAfterInstall.legacy&&!await runClaudeCommand("Removing the legacy Vercel Claude plugin...","Removed the legacy Vercel Claude plugin","Installed the official Vercel Claude plugin, but could not remove the legacy install.",["plugins","uninstall",CLAUDE_LEGACY_PLUGIN_ID],{quietSuccess:!0})?(output_manager_default.log(`Cleanup command: claude plugins uninstall ${CLAUDE_LEGACY_PLUGIN_ID}`),!1):plan.removeLegacyMarketplace&&!removedStaleLegacy&&!(await getClaudePluginStatus()).legacy&&!await runClaudeCommand("Removing the legacy Vercel marketplace...","Removed the legacy Vercel marketplace","Removed the legacy Vercel plugin, but could not remove the legacy marketplace.",["plugins","marketplace","remove","vercel"],{quietSuccess:!0})?(output_manager_default.log("Cleanup command: claude plugins marketplace remove vercel"),!1):complete:(output_manager_default.warn("Skipping Claude cleanup because the official Vercel plugin is not installed."),!1)}async function getClaudePluginStatus(){let[installedPlugins,latestVersion]=await Promise.all([getClaudeInstalledPlugins(),fetchLatestVercelPluginVersion()]);return buildClaudePluginStatus(installedPlugins,latestVersion)}async function applyPluginActions(targets,claudePlan){for(let target of targets)target==="claude-code"&&claudePlan?await runClaudeMigration(claudePlan):output_manager_default.debug(`Skipping unsupported plugin target: ${target}`)}function describeClaudePlan(plan){let actions=[];return plan.installOfficial&&actions.push("install the official plugin"),plan.updateOfficial&&actions.push("update the official plugin"),plan.removeLegacy&&actions.push("remove the legacy plugin"),plan.removeLegacyMarketplace&&actions.push("remove the legacy marketplace"),actions.join(", ")}async function setupVercelPlugin(client,opts){if(!await claudeCode.detect(opts.home))return{status:"not_detected",message:"Claude Code was not detected on this machine."};let status=await getClaudePluginStatus();if(status.official?.stale)return{status:"failed",message:"The installed Vercel plugin files are missing. Run `claude plugins uninstall vercel@claude-plugins-official`, then run `vercel setup --plugin --agent claude-code` to reinstall it."};let plan=buildClaudePluginMigrationPlan(status);if(!hasClaudeMigrationActions(plan))return{status:"up_to_date",message:`Vercel plugin for Claude Code is installed${status.official?.version?` (v${status.official.version})`:""}.`};let copy=buildClaudePromptCopy(status,plan);if(opts.dryRun)return{status:"dry_run",message:`${copy.message} Setup would ${describeClaudePlan(plan)}.`,action:plan.installOfficial?"install":"update"};let prefs=await readPrefs(client);if(!opts.yes){if(!opts.canPrompt)return{status:"confirmation_required",message:`${copy.message} Re-run with --yes to apply it.`};output_manager_default.print(` ${copy.message}
31
31
  `);let accepted=await client.input.confirm(copy.confirm,!0);if(await markPromptedToday(client,prefs),!accepted)return prefs.pluginDeclined=!0,prefs.pluginAutoUpdate=!1,await writePrefs(client,prefs),{status:"declined",message:"Skipped the Vercel plugin for Claude Code."}}prefs.pluginDeclined=!1,prefs.pluginAutoUpdate=!0,await writePrefs(client,prefs);let migrated=await runClaudeMigration(plan),after=await getClaudePluginStatus();if(!after.official)return{status:"failed",message:"Failed to install the Vercel plugin for Claude Code. Run `claude plugins install vercel@claude-plugins-official` to install it manually."};let remaining=buildClaudePluginMigrationPlan({...after,latestVersion:status.latestVersion});if(!migrated||after.official.stale||hasClaudeMigrationActions(remaining))return{status:"failed",message:"Failed to complete Vercel plugin setup for Claude Code. Re-run `vercel setup --plugin --agent claude-code --yes` to retry."};let version=after.official.version?` v${after.official.version}`:"";return{status:plan.installOfficial?"installed":"updated",message:`${plan.installOfficial?"Installed":"Updated"} the Vercel plugin for Claude Code${version}.`}}async function autoInstallVercelPlugin(client,options){try{let prefs=await readPrefs(client),applyMode=options?.mode==="apply";if(!prefs.pluginDeclined||prefs.pluginAutoUpdate||applyMode){let targets=await getPluginTargets(client.agentName,client.cwd),uninstalledTargets=[],claudeStatus=targets.includes("claude-code")?await getClaudePluginStatus():void 0,claudePlan=claudeStatus?buildClaudePluginMigrationPlan(claudeStatus):void 0,claudeAutoUpdateAttemptKey=claudeStatus&&claudePlan?getClaudeAutoUpdateAttemptKey(claudeStatus,claudePlan):void 0;for(let target of targets){if(target==="claude-code"){claudePlan&&hasClaudeMigrationActions(claudePlan)&&uninstalledTargets.push(target);continue}await isPluginInstalledForTarget(target)||uninstalledTargets.push(target)}if(uninstalledTargets.length>0){if(prefs.pluginAutoUpdate){if(claudeAutoUpdateAttemptKey&&wasPluginAutoUpdateAttemptedToday(prefs,claudeAutoUpdateAttemptKey))return;prefs.pluginDeclined=!1,markPluginAutoUpdateAttempted(prefs,claudeAutoUpdateAttemptKey),await writePrefs(client,prefs),await applyPluginActions(uninstalledTargets,claudePlan);return}if(!applyMode&&wasPromptedToday(prefs))return;if(applyMode){prefs.pluginDeclined=!1,prefs.pluginAutoUpdate=!0,await writePrefs(client,prefs),await applyPluginActions(uninstalledTargets,claudePlan);return}let promptMessages=[],confirmMessage="Install the Vercel plugin?";if(uninstalledTargets.includes("claude-code")&&claudeStatus&&claudePlan){let claudePrompt=buildClaudePromptCopy(claudeStatus,claudePlan);promptMessages.push(claudePrompt.message),confirmMessage=claudePrompt.confirm}let promptMessage=promptMessages.join(" ").trim();promptMessage&&output_manager_default.log(promptMessage);let accepted=await confirm(client,confirmMessage);await markPromptedToday(client,prefs),accepted?(prefs.pluginDeclined=!1,prefs.pluginAutoUpdate=!0,await writePrefs(client,prefs),await applyPluginActions(uninstalledTargets,claudePlan)):(prefs.pluginDeclined=!0,prefs.pluginAutoUpdate=!1,await writePrefs(client,prefs))}}}catch(err){output_manager_default.debug(`Auto-install agent tooling failed: ${err}`)}}export{pathExists,isFile,isSymlink,readFileOrNull,parseJsonObjectOrNull,mergeJson,mergeJsonc,mergeToml,MANAGED_BLOCK_START,MANAGED_BLOCK_END,upsertManagedBlock,publishNoClobber,ensureMode,backupFile,writeConfigFile,GATEWAY_ANTHROPIC_BASE_URL,GATEWAY_CODING_AGENT_BASE_URL,GATEWAY_CURSOR_BASE_URL,GATEWAY_CODEX_BASE_URL,GATEWAY_API_KEY_ENV,GATEWAY_DEFAULT_MODEL,KEY_PLACEHOLDER,resolveGatewayBaseUrl,maskSecret,claudeCode,setupVercelPlugin,autoInstallVercelPlugin};