vercel 53.0.1 → 53.1.1

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 (52) hide show
  1. package/dist/chunks/{add-S3BUT3KQ.js → add-UAZIKU22.js} +4 -4
  2. package/dist/chunks/{chunk-57OG3NFC.js → chunk-3LRN4Q7G.js} +4 -1
  3. package/dist/chunks/{chunk-RKBCXTHK.js → chunk-3P3YBOCQ.js} +1 -1
  4. package/dist/chunks/{chunk-NUDNH7KK.js → chunk-5B27ZNJB.js} +5 -5
  5. package/dist/chunks/{chunk-BQOJ2BDS.js → chunk-5GMV7WTU.js} +5 -5
  6. package/dist/chunks/{chunk-D2KD42ZV.js → chunk-AES77UB7.js} +6 -4
  7. package/dist/chunks/{chunk-WTXYVRTW.js → chunk-BAAZFRLH.js} +2 -2
  8. package/dist/chunks/{chunk-6DECDOGX.js → chunk-C7FXVPAA.js} +1 -1
  9. package/dist/chunks/{chunk-VLWTUL5F.js → chunk-EYQEF55O.js} +1 -1
  10. package/dist/chunks/{chunk-CLLHWKQN.js → chunk-GDOCMDCB.js} +1 -1
  11. package/dist/chunks/{chunk-IWGJIRFK.js → chunk-JDKASMB2.js} +2 -2
  12. package/dist/chunks/{chunk-L3UAXRIV.js → chunk-JPVQD2PJ.js} +1 -1
  13. package/dist/chunks/{chunk-WZZBS2SZ.js → chunk-KFFW6MSL.js} +1 -1
  14. package/dist/chunks/{chunk-WR7S7PWN.js → chunk-KOCX7HWE.js} +6 -6
  15. package/dist/chunks/{chunk-IFPIVLCE.js → chunk-LDFOVKJS.js} +80 -84
  16. package/dist/chunks/{chunk-7KSQOBO6.js → chunk-NFAQ5Q3Z.js} +1 -1
  17. package/dist/chunks/{chunk-PD5HCBBY.js → chunk-SPXTKMOV.js} +9 -4
  18. package/dist/chunks/{chunk-IC6EDRCI.js → chunk-T2DVW5BM.js} +2 -2
  19. package/dist/chunks/{chunk-LOS2AA5C.js → chunk-VQSAZO3U.js} +3 -3
  20. package/dist/chunks/{chunk-2RFTQMCH.js → chunk-WMD7Y6HT.js} +1 -1
  21. package/dist/chunks/{chunk-BNAHPSLB.js → chunk-WS4HI35O.js} +1 -1
  22. package/dist/chunks/{chunk-W7MR5OK3.js → chunk-YIK5Y7MI.js} +2 -2
  23. package/dist/chunks/{compile-vercel-config-PJN7DW4H.js → compile-vercel-config-BUURMPDD.js} +1 -1
  24. package/dist/chunks/{delete-TBPSIJ2Y.js → delete-GBLJYO3T.js} +2 -2
  25. package/dist/chunks/{disable-6K46H3LF.js → disable-QFE5TGWG.js} +2 -2
  26. package/dist/chunks/{discard-7MMLSQCH.js → discard-IPPO7M2N.js} +2 -2
  27. package/dist/chunks/{edit-OM7SMKFO.js → edit-KQD3MEZA.js} +3 -3
  28. package/dist/chunks/{enable-EA7VELBO.js → enable-JBL4DMGJ.js} +2 -2
  29. package/dist/chunks/{export-EDEVEIPT.js → export-KLWZUAYD.js} +2 -2
  30. package/dist/chunks/{inspect-AUTVRW5N.js → inspect-TWW2XBDE.js} +3 -3
  31. package/dist/chunks/{list-ZA6FTW2G.js → list-UM77B7WK.js} +3 -3
  32. package/dist/chunks/{list-7A7YF7LJ.js → list-WJGLZ5ES.js} +2 -2
  33. package/dist/chunks/{ls-57JSYP5Q.js → ls-WVHDFPT3.js} +4 -4
  34. package/dist/chunks/{publish-XRQG6WAA.js → publish-45SAIZE4.js} +2 -2
  35. package/dist/chunks/{query-JWXCJWZG.js → query-VH2TS6IS.js} +2 -2
  36. package/dist/chunks/{reorder-5GYXEH5H.js → reorder-NYENR2XY.js} +2 -2
  37. package/dist/chunks/{restore-LYPACI5W.js → restore-H2VIG7KZ.js} +2 -2
  38. package/dist/chunks/{rm-XNGCDU4C.js → rm-RQEP4KMK.js} +4 -4
  39. package/dist/chunks/{rule-inspect-3WNGN6TA.js → rule-inspect-GR3RMO2J.js} +4 -4
  40. package/dist/chunks/{rules-R5LVTCSA.js → rules-EOBQZE3T.js} +6 -6
  41. package/dist/chunks/{schema-Q7VADI6C.js → schema-OOGMY2SS.js} +2 -2
  42. package/dist/chunks/{update-HQI4PQCH.js → update-VLOWX7UQ.js} +4 -4
  43. package/dist/commands/build/index.js +24 -15
  44. package/dist/commands/deploy/index.js +14 -14
  45. package/dist/commands/dev/index.js +10 -13
  46. package/dist/commands/env/index.js +17 -29
  47. package/dist/commands/link/index.js +8 -9
  48. package/dist/commands/list/index.js +4 -4
  49. package/dist/commands-bulk.js +38 -38
  50. package/dist/index.js +10 -11
  51. package/dist/version.mjs +1 -1
  52. package/package.json +13 -13
@@ -9,8 +9,8 @@ import {
9
9
  handleRulesApiError,
10
10
  parseRulesFlagsAndScope,
11
11
  rulesCollectionPath
12
- } from "./chunk-6DECDOGX.js";
13
- import "./chunk-W7MR5OK3.js";
12
+ } from "./chunk-C7FXVPAA.js";
13
+ import "./chunk-YIK5Y7MI.js";
14
14
  import "./chunk-HTOH3MSD.js";
15
15
  import {
16
16
  validateJsonOutput
@@ -18,11 +18,11 @@ import {
18
18
  import {
19
19
  rulesAddSubcommand
20
20
  } from "./chunk-P3H4MP5H.js";
21
- import "./chunk-VLWTUL5F.js";
21
+ import "./chunk-EYQEF55O.js";
22
22
  import {
23
23
  AGENT_REASON
24
24
  } from "./chunk-E3NE4SKN.js";
25
- import "./chunk-PD5HCBBY.js";
25
+ import "./chunk-SPXTKMOV.js";
26
26
  import "./chunk-4Z7KJQGN.js";
27
27
  import {
28
28
  buildCommandWithGlobalFlags,
@@ -226,13 +226,16 @@ function buildDescriptionLine(command, options) {
226
226
  return `${wrappingText}${NEWLINE}`;
227
227
  }
228
228
  function buildHelpOutput(command, options) {
229
+ const filteredGlobalOptions = command.disabledGlobalOptions ? globalCommandOptions.filter(
230
+ (opt) => !command.disabledGlobalOptions?.includes(opt.name)
231
+ ) : globalCommandOptions;
229
232
  const outputArray = [
230
233
  "",
231
234
  buildCommandSynopsisLine(command, options.parent),
232
235
  buildDescriptionLine(command, options),
233
236
  buildSubcommandLines(command.subcommands, options),
234
237
  buildCommandOptionLines(command.options, options, "Options"),
235
- buildCommandOptionLines(globalCommandOptions, options, "Global Options"),
238
+ buildCommandOptionLines(filteredGlobalOptions, options, "Global Options"),
236
239
  buildCommandExampleLines(command),
237
240
  ""
238
241
  ];
@@ -6,7 +6,7 @@ const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __dirname_(__filename);
7
7
  import {
8
8
  STANDARD_ENVIRONMENTS
9
- } from "./chunk-PD5HCBBY.js";
9
+ } from "./chunk-SPXTKMOV.js";
10
10
  import {
11
11
  getCommandName,
12
12
  require_lib
@@ -6,24 +6,24 @@ const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __dirname_(__filename);
7
7
  import {
8
8
  writeProjectSettings
9
- } from "./chunk-L3UAXRIV.js";
9
+ } from "./chunk-JPVQD2PJ.js";
10
10
  import {
11
11
  ensureLink
12
- } from "./chunk-IC6EDRCI.js";
12
+ } from "./chunk-T2DVW5BM.js";
13
13
  import {
14
14
  autoInstallVercelPlugin,
15
15
  pullCommand
16
- } from "./chunk-IFPIVLCE.js";
16
+ } from "./chunk-LDFOVKJS.js";
17
17
  import {
18
18
  help
19
- } from "./chunk-57OG3NFC.js";
19
+ } from "./chunk-3LRN4Q7G.js";
20
20
  import {
21
21
  VERCEL_DIR,
22
22
  VERCEL_DIR_PROJECT,
23
23
  envPullCommandLogic,
24
24
  humanizePath,
25
25
  parseTarget
26
- } from "./chunk-PD5HCBBY.js";
26
+ } from "./chunk-SPXTKMOV.js";
27
27
  import {
28
28
  TelemetryClient
29
29
  } from "./chunk-4Z7KJQGN.js";
@@ -6,21 +6,21 @@ const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __dirname_(__filename);
7
7
  import {
8
8
  getUpdateCommand
9
- } from "./chunk-7KSQOBO6.js";
9
+ } from "./chunk-NFAQ5Q3Z.js";
10
10
  import {
11
11
  login
12
- } from "./chunk-LOS2AA5C.js";
12
+ } from "./chunk-VQSAZO3U.js";
13
13
  import {
14
14
  apiCommand,
15
15
  listSubcommand2 as listSubcommand,
16
16
  loginCommand
17
- } from "./chunk-D2KD42ZV.js";
17
+ } from "./chunk-AES77UB7.js";
18
18
  import {
19
19
  help
20
- } from "./chunk-57OG3NFC.js";
20
+ } from "./chunk-3LRN4Q7G.js";
21
21
  import {
22
22
  global_path_default
23
- } from "./chunk-PD5HCBBY.js";
23
+ } from "./chunk-SPXTKMOV.js";
24
24
  import {
25
25
  TelemetryClient
26
26
  } from "./chunk-4Z7KJQGN.js";
@@ -25,10 +25,10 @@ import {
25
25
  import {
26
26
  buildCommand,
27
27
  pullCommand
28
- } from "./chunk-IFPIVLCE.js";
28
+ } from "./chunk-LDFOVKJS.js";
29
29
  import {
30
30
  envCommand
31
- } from "./chunk-PD5HCBBY.js";
31
+ } from "./chunk-SPXTKMOV.js";
32
32
  import {
33
33
  confirmOption,
34
34
  forceOption,
@@ -4853,7 +4853,8 @@ var loginCommand = {
4853
4853
  name: "Sign in to your Vercel account.",
4854
4854
  value: `${packageName} login`
4855
4855
  }
4856
- ]
4856
+ ],
4857
+ disabledGlobalOptions: ["token"]
4857
4858
  };
4858
4859
 
4859
4860
  // src/commands/logout/command.ts
@@ -6900,7 +6901,8 @@ var switchSubcommand = {
6900
6901
  name: "Switch to a team. If your team's url is 'vercel.com/name', then 'name' is the slug. If the slug is omitted, you can choose interactively",
6901
6902
  value: `${packageName} teams switch <slug>`
6902
6903
  }
6903
- ]
6904
+ ],
6905
+ disabledGlobalOptions: ["token"]
6904
6906
  };
6905
6907
  var inviteSubcommand = {
6906
6908
  name: "invite",
@@ -6,7 +6,7 @@ const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __dirname_(__filename);
7
7
  import {
8
8
  getLocalPathConfig
9
- } from "./chunk-WZZBS2SZ.js";
9
+ } from "./chunk-KFFW6MSL.js";
10
10
  import {
11
11
  table
12
12
  } from "./chunk-ABDTA3V2.js";
@@ -37,7 +37,7 @@ import {
37
37
  selectAndParseRemoteUrl,
38
38
  selectOrg,
39
39
  writeServicesConfig
40
- } from "./chunk-PD5HCBBY.js";
40
+ } from "./chunk-SPXTKMOV.js";
41
41
  import {
42
42
  printError
43
43
  } from "./chunk-JNOMOD7R.js";
@@ -6,7 +6,7 @@ const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __dirname_(__filename);
7
7
  import {
8
8
  resolveAlertsScope
9
- } from "./chunk-W7MR5OK3.js";
9
+ } from "./chunk-YIK5Y7MI.js";
10
10
  import {
11
11
  handleValidationError,
12
12
  outputError,
@@ -11,7 +11,7 @@ import {
11
11
  getTeamById,
12
12
  getUser,
13
13
  getVercelDirectory
14
- } from "./chunk-PD5HCBBY.js";
14
+ } from "./chunk-SPXTKMOV.js";
15
15
  import {
16
16
  TeamDeleted
17
17
  } from "./chunk-XZ7CVBQ4.js";
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-E3NE4SKN.js";
11
11
  import {
12
12
  getLinkedProject
13
- } from "./chunk-PD5HCBBY.js";
13
+ } from "./chunk-SPXTKMOV.js";
14
14
  import {
15
15
  buildCommandWithYes,
16
16
  outputAgentError
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-IB5L4LKZ.js";
10
10
  import {
11
11
  require_execa
12
- } from "./chunk-2RFTQMCH.js";
12
+ } from "./chunk-WMD7Y6HT.js";
13
13
  import {
14
14
  VERCEL_DIR,
15
15
  readJSONFile,
@@ -18,7 +18,7 @@ import {
18
18
  require_lib,
19
19
  require_minimatch,
20
20
  require_pluralize
21
- } from "./chunk-PD5HCBBY.js";
21
+ } from "./chunk-SPXTKMOV.js";
22
22
  import {
23
23
  CantParseJSONFile,
24
24
  cmd,
@@ -8,7 +8,7 @@ import {
8
8
  VERCEL_DIR,
9
9
  VERCEL_DIR_PROJECT,
10
10
  require_lib
11
- } from "./chunk-PD5HCBBY.js";
11
+ } from "./chunk-SPXTKMOV.js";
12
12
  import {
13
13
  require_dist
14
14
  } from "./chunk-ZQKJVHXY.js";
@@ -7,7 +7,7 @@ const __dirname = __dirname_(__filename);
7
7
  import {
8
8
  VERCEL_DIR,
9
9
  isVercelTomlEnabled
10
- } from "./chunk-PD5HCBBY.js";
10
+ } from "./chunk-SPXTKMOV.js";
11
11
  import {
12
12
  getArgs
13
13
  } from "./chunk-JNOMOD7R.js";
@@ -9,7 +9,7 @@ import {
9
9
  printIndications,
10
10
  require_dist as require_dist2,
11
11
  sleep
12
- } from "./chunk-LOS2AA5C.js";
12
+ } from "./chunk-VQSAZO3U.js";
13
13
  import {
14
14
  suggestNextCommands
15
15
  } from "./chunk-LOS7HHU3.js";
@@ -19,23 +19,23 @@ import {
19
19
  } from "./chunk-MSJX3VKI.js";
20
20
  import {
21
21
  CommandTimeout
22
- } from "./chunk-D2KD42ZV.js";
22
+ } from "./chunk-AES77UB7.js";
23
23
  import {
24
24
  getScope
25
- } from "./chunk-VLWTUL5F.js";
25
+ } from "./chunk-EYQEF55O.js";
26
26
  import {
27
27
  ua_default
28
28
  } from "./chunk-JCLLQ23G.js";
29
29
  import {
30
30
  showPluginTipIfNeeded
31
- } from "./chunk-IFPIVLCE.js";
31
+ } from "./chunk-LDFOVKJS.js";
32
32
  import {
33
33
  getProjectByNameOrId,
34
34
  param,
35
35
  require_dist as require_dist3,
36
36
  require_lib3 as require_lib,
37
37
  require_pluralize
38
- } from "./chunk-PD5HCBBY.js";
38
+ } from "./chunk-SPXTKMOV.js";
39
39
  import {
40
40
  require_ms,
41
41
  stamp_default
@@ -4531,7 +4531,7 @@ async function processDeployment({
4531
4531
  var FunctionsSizeLimitError = class extends Error {
4532
4532
  constructor() {
4533
4533
  super(...arguments);
4534
- this.link = "https://vercel.com/docs/errors/FUNCTIONS_BETA";
4534
+ this.link = "https://vercel.com/docs/functions/runtimes/python#extended-size-limits-with-functions-beta";
4535
4535
  }
4536
4536
  };
4537
4537
  function handleErrorSolvableWithFunctionsBeta(error) {
@@ -4,13 +4,10 @@ import { dirname as __dirname_ } from 'node:path';
4
4
  const require = __createRequire(import.meta.url);
5
5
  const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __dirname_(__filename);
7
- import {
8
- AGENT_ACTION
9
- } from "./chunk-E3NE4SKN.js";
10
7
  import {
11
8
  getEnvTargetPlaceholder,
12
9
  global_path_default
13
- } from "./chunk-PD5HCBBY.js";
10
+ } from "./chunk-SPXTKMOV.js";
14
11
  import {
15
12
  yesOption
16
13
  } from "./chunk-JNOMOD7R.js";
@@ -113,6 +110,9 @@ function getPluginTargetForAgent(agentName) {
113
110
  if (!agentName) {
114
111
  return void 0;
115
112
  }
113
+ if (agentName === KNOWN_AGENTS.CLAUDE || agentName.startsWith("claude-code") || agentName === KNOWN_AGENTS.COWORK) {
114
+ return "claude-code";
115
+ }
116
116
  return AGENT_TO_TARGET[agentName];
117
117
  }
118
118
  async function fileExists(filePath) {
@@ -169,7 +169,7 @@ async function getPluginTargets(agentName) {
169
169
  async function readClaudeInstalledPluginsFromRegistry() {
170
170
  try {
171
171
  const raw = await readFile(
172
- join(homedir(), ".claude", "plugins", "installed_plugins.json"),
172
+ getClaudeInstalledPluginsRegistryPath(),
173
173
  "utf-8"
174
174
  );
175
175
  const data = JSON.parse(raw);
@@ -193,6 +193,40 @@ async function readClaudeInstalledPluginsFromRegistry() {
193
193
  return [];
194
194
  }
195
195
  }
196
+ function getClaudeInstalledPluginsRegistryPath() {
197
+ return join(homedir(), ".claude", "plugins", "installed_plugins.json");
198
+ }
199
+ async function markStaleClaudePluginInstalls(plugins) {
200
+ return Promise.all(
201
+ plugins.map(async (plugin) => {
202
+ if (plugin.installPath && !await fileExists(plugin.installPath)) {
203
+ return { ...plugin, stale: true };
204
+ }
205
+ return plugin;
206
+ })
207
+ );
208
+ }
209
+ async function removeClaudePluginFromRegistry(pluginId) {
210
+ try {
211
+ const registryPath = getClaudeInstalledPluginsRegistryPath();
212
+ const raw = await readFile(registryPath, "utf-8");
213
+ const data = JSON.parse(raw);
214
+ if (!data.plugins || !(pluginId in data.plugins)) {
215
+ return false;
216
+ }
217
+ delete data.plugins[pluginId];
218
+ await writeFile(
219
+ registryPath,
220
+ `${JSON.stringify(data, null, 2)}
221
+ `,
222
+ "utf-8"
223
+ );
224
+ return true;
225
+ } catch (err) {
226
+ output_manager_default.debug(`Failed to remove Claude plugin registry entry: ${err}`);
227
+ return false;
228
+ }
229
+ }
196
230
  async function isPluginInstalledForTarget(target) {
197
231
  if (target === "claude-code") {
198
232
  const status = await getClaudePluginStatus();
@@ -241,7 +275,7 @@ async function getClaudeInstalledPlugins() {
241
275
  try {
242
276
  const parsed = JSON.parse(result.stdout);
243
277
  if (Array.isArray(parsed)) {
244
- return parsed;
278
+ return markStaleClaudePluginInstalls(parsed);
245
279
  }
246
280
  } catch (err) {
247
281
  output_manager_default.debug(`Failed to parse Claude plugin list JSON: ${err}`);
@@ -251,7 +285,9 @@ async function getClaudeInstalledPlugins() {
251
285
  `Failed to run 'claude plugins list --json': ${result.stderr}`
252
286
  );
253
287
  }
254
- return readClaudeInstalledPluginsFromRegistry();
288
+ return markStaleClaudePluginInstalls(
289
+ await readClaudeInstalledPluginsFromRegistry()
290
+ );
255
291
  }
256
292
  async function fetchLatestVercelPluginVersion() {
257
293
  try {
@@ -374,60 +410,6 @@ function buildClaudePromptCopy(status, plan) {
374
410
  confirm: "Apply the Vercel plugin changes for Claude Code?"
375
411
  };
376
412
  }
377
- function buildClaudeActionRequiredMessage(status, plan) {
378
- if (status.state === "legacy-only") {
379
- return `Working with Vercel is easier with the latest Vercel Plugin for Claude Code. It will run:
380
- 1. claude plugins install ${CLAUDE_OFFICIAL_PLUGIN_ID}
381
- 2. claude plugins uninstall ${CLAUDE_LEGACY_PLUGIN_ID}
382
- Would you like me to update it?`;
383
- }
384
- if (status.state === "both" || plan.removeLegacy) {
385
- return `Working with Vercel is easier with the latest Vercel Plugin for Claude Code. It will run:
386
- 1. claude plugins uninstall ${CLAUDE_LEGACY_PLUGIN_ID}
387
- Would you like me to update it?`;
388
- }
389
- if (plan.updateOfficial) {
390
- return `Working with Vercel is easier with the latest Vercel Plugin for Claude Code. It will run:
391
- 1. claude plugins update ${CLAUDE_OFFICIAL_PLUGIN_ID}
392
- Would you like me to update it?`;
393
- }
394
- return `Working with Vercel is easier with the Vercel Plugin for Claude Code. It will run:
395
- 1. claude plugins install ${CLAUDE_OFFICIAL_PLUGIN_ID}
396
- Would you like me to install it?`;
397
- }
398
- function buildClaudeActionRequiredLabel(status, plan) {
399
- if (status.state === "legacy-only" || status.state === "both" || plan.removeLegacy || plan.updateOfficial) {
400
- return "Update it";
401
- }
402
- return "Install it";
403
- }
404
- function getClaudeActionRequiredCommand(status, plan) {
405
- if (plan.installOfficial && status.state === "none") {
406
- return `claude plugins install ${CLAUDE_OFFICIAL_PLUGIN_ID}`;
407
- }
408
- if (status.state === "both" && plan.removeLegacy) {
409
- return `claude plugins uninstall ${CLAUDE_LEGACY_PLUGIN_ID}`;
410
- }
411
- if (plan.updateOfficial && status.state === "official-only") {
412
- return `claude plugins update ${CLAUDE_OFFICIAL_PLUGIN_ID}`;
413
- }
414
- return `claude plugins install ${CLAUDE_OFFICIAL_PLUGIN_ID}`;
415
- }
416
- function getClaudeActionRequiredNextSteps(status, plan) {
417
- const next = [
418
- {
419
- command: getClaudeActionRequiredCommand(status, plan),
420
- when: buildClaudeActionRequiredLabel(status, plan)
421
- }
422
- ];
423
- if (status.state === "legacy-only" && plan.removeLegacy) {
424
- next.push({
425
- command: `claude plugins uninstall ${CLAUDE_LEGACY_PLUGIN_ID}`,
426
- when: "Remove the old plugin after the update"
427
- });
428
- }
429
- return next;
430
- }
431
413
  async function runClaudeCommand(spinnerMessage, successMessage, failureMessage, args, options) {
432
414
  output_manager_default.spinner(spinnerMessage);
433
415
  const result = await runCommand("claude", args);
@@ -445,7 +427,43 @@ ${result.stderr || result.stdout}`
445
427
  );
446
428
  return false;
447
429
  }
430
+ async function removeStaleLegacyClaudePlugin(removeMarketplace) {
431
+ output_manager_default.spinner("Removing the stale legacy Vercel Claude plugin...");
432
+ const removedRegistryEntry = await removeClaudePluginFromRegistry(
433
+ CLAUDE_LEGACY_PLUGIN_ID
434
+ );
435
+ output_manager_default.stopSpinner();
436
+ if (!removedRegistryEntry) {
437
+ output_manager_default.warn(
438
+ "Could not remove the stale legacy Vercel Claude plugin registry entry."
439
+ );
440
+ return false;
441
+ }
442
+ output_manager_default.success("Removed the stale legacy Vercel Claude plugin");
443
+ if (removeMarketplace) {
444
+ const removedMarketplace = await runClaudeCommand(
445
+ "Removing the legacy Vercel marketplace...",
446
+ "Removed the legacy Vercel marketplace",
447
+ "Removed the stale legacy Vercel plugin, but could not remove the legacy marketplace.",
448
+ ["plugins", "marketplace", "remove", "vercel"],
449
+ { quietSuccess: true }
450
+ );
451
+ if (!removedMarketplace) {
452
+ output_manager_default.log("Cleanup command: claude plugins marketplace remove vercel");
453
+ }
454
+ }
455
+ return true;
456
+ }
448
457
  async function runClaudeMigration(plan) {
458
+ let removedStaleLegacy = false;
459
+ if (plan.removeLegacy) {
460
+ const statusBeforeInstall = await getClaudePluginStatus();
461
+ if (statusBeforeInstall.legacy?.stale) {
462
+ removedStaleLegacy = await removeStaleLegacyClaudePlugin(
463
+ plan.removeLegacyMarketplace
464
+ );
465
+ }
466
+ }
449
467
  if (plan.installOfficial) {
450
468
  const installed = await runClaudeCommand(
451
469
  "Installing the official Vercel Claude plugin...",
@@ -486,7 +504,7 @@ async function runClaudeMigration(plan) {
486
504
  return;
487
505
  }
488
506
  }
489
- if (plan.removeLegacyMarketplace) {
507
+ if (plan.removeLegacyMarketplace && !removedStaleLegacy) {
490
508
  const finalStatus = await getClaudePluginStatus();
491
509
  if (!finalStatus.legacy) {
492
510
  const removedMarketplace = await runClaudeCommand(
@@ -556,28 +574,6 @@ async function autoInstallVercelPlugin(client, options) {
556
574
  confirmMessage = claudePrompt.confirm;
557
575
  }
558
576
  if (client.isAgent && !client.stdin.isTTY) {
559
- const actionRequiredMessage = uninstalledTargets.includes("claude-code") && claudeStatus && claudePlan ? buildClaudeActionRequiredMessage(claudeStatus, claudePlan) : promptMessages.join(" ");
560
- const next = uninstalledTargets.includes("claude-code") && claudeStatus && claudePlan ? getClaudeActionRequiredNextSteps(claudeStatus, claudePlan) : [
561
- {
562
- command: `claude plugins install ${CLAUDE_OFFICIAL_PLUGIN_ID}`,
563
- when: "Install it"
564
- }
565
- ];
566
- client.stdout.write(
567
- `${JSON.stringify(
568
- {
569
- status: "action_required",
570
- reason: "plugin_install",
571
- action: AGENT_ACTION.CONFIRMATION_REQUIRED,
572
- message: actionRequiredMessage,
573
- userActionRequired: true,
574
- next
575
- },
576
- null,
577
- 2
578
- )}
579
- `
580
- );
581
577
  await markPromptedToday(prefs);
582
578
  return;
583
579
  }
@@ -6,7 +6,7 @@ const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __dirname_(__filename);
7
7
  import {
8
8
  require_lib
9
- } from "./chunk-PD5HCBBY.js";
9
+ } from "./chunk-SPXTKMOV.js";
10
10
  import {
11
11
  packageName
12
12
  } from "./chunk-XZ7CVBQ4.js";
@@ -24588,6 +24588,7 @@ var require_detect_services = __commonJS({
24588
24588
  hostRewrites: [],
24589
24589
  rewrites: [],
24590
24590
  defaults: [],
24591
+ fallbacks: [],
24591
24592
  crons: [],
24592
24593
  workers: []
24593
24594
  };
@@ -24737,6 +24738,7 @@ var require_detect_services = __commonJS({
24737
24738
  const hostRewrites = [];
24738
24739
  const rewrites = [];
24739
24740
  const defaults = [];
24741
+ const fallbacks = [];
24740
24742
  const crons = [];
24741
24743
  const workers = [];
24742
24744
  const sortedWebServices = services.filter(
@@ -24773,13 +24775,12 @@ var require_detect_services = __commonJS({
24773
24775
  }
24774
24776
  if ((0, import_utils4.isStaticBuild)(service)) {
24775
24777
  if (routePrefix === "/") {
24776
- defaults.push({ handle: "filesystem" });
24777
- defaults.push({
24778
+ fallbacks.push({
24778
24779
  src: (0, import_routing_utils2.scopeRouteSourceToOwnership)("/(.*)", ownershipGuard),
24779
24780
  dest: "/index.html"
24780
24781
  });
24781
24782
  } else {
24782
- rewrites.push({
24783
+ fallbacks.push({
24783
24784
  src: (0, import_routing_utils2.scopeRouteSourceToOwnership)(
24784
24785
  `^/${normalizedPrefix}(?:/.*)?$`,
24785
24786
  ownershipGuard
@@ -24817,7 +24818,7 @@ var require_detect_services = __commonJS({
24817
24818
  check: true
24818
24819
  });
24819
24820
  }
24820
- return { hostRewrites, rewrites, defaults, crons, workers };
24821
+ return { hostRewrites, rewrites, defaults, fallbacks, crons, workers };
24821
24822
  }
24822
24823
  function escapeRegex(str) {
24823
24824
  return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
@@ -25093,6 +25094,7 @@ var require_get_services_builders = __commonJS({
25093
25094
  warnings: [],
25094
25095
  hostRewriteRoutes: null,
25095
25096
  defaultRoutes: null,
25097
+ fallbackRoutes: null,
25096
25098
  redirectRoutes: null,
25097
25099
  rewriteRoutes: null,
25098
25100
  errorRoutes: null
@@ -25114,6 +25116,7 @@ var require_get_services_builders = __commonJS({
25114
25116
  warnings: warningResponses,
25115
25117
  hostRewriteRoutes: null,
25116
25118
  defaultRoutes: null,
25119
+ fallbackRoutes: null,
25117
25120
  redirectRoutes: null,
25118
25121
  rewriteRoutes: null,
25119
25122
  errorRoutes: null
@@ -25131,6 +25134,7 @@ var require_get_services_builders = __commonJS({
25131
25134
  warnings: warningResponses,
25132
25135
  hostRewriteRoutes: null,
25133
25136
  defaultRoutes: null,
25137
+ fallbackRoutes: null,
25134
25138
  redirectRoutes: null,
25135
25139
  rewriteRoutes: null,
25136
25140
  errorRoutes: null
@@ -25143,6 +25147,7 @@ var require_get_services_builders = __commonJS({
25143
25147
  warnings: warningResponses,
25144
25148
  hostRewriteRoutes: result.routes.hostRewrites.length > 0 ? result.routes.hostRewrites : null,
25145
25149
  defaultRoutes: result.routes.defaults.length > 0 ? result.routes.defaults : null,
25150
+ fallbackRoutes: result.routes.fallbacks.length > 0 ? result.routes.fallbacks : null,
25146
25151
  redirectRoutes: [],
25147
25152
  rewriteRoutes: result.routes.rewrites.length > 0 || result.routes.workers.length > 0 || result.routes.crons.length > 0 ? [
25148
25153
  ...result.routes.rewrites,
@@ -6,12 +6,12 @@ const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __dirname_(__filename);
7
7
  import {
8
8
  setupAndLink
9
- } from "./chunk-WTXYVRTW.js";
9
+ } from "./chunk-BAAZFRLH.js";
10
10
  import {
11
11
  getLinkedProject,
12
12
  param,
13
13
  resolveProjectCwd
14
- } from "./chunk-PD5HCBBY.js";
14
+ } from "./chunk-SPXTKMOV.js";
15
15
  import {
16
16
  buildCommandWithYes,
17
17
  outputActionRequired
@@ -12,10 +12,10 @@ import {
12
12
  } from "./chunk-JCLLQ23G.js";
13
13
  import {
14
14
  getLocalPathConfig
15
- } from "./chunk-WZZBS2SZ.js";
15
+ } from "./chunk-KFFW6MSL.js";
16
16
  import {
17
17
  autoInstallVercelPlugin
18
- } from "./chunk-IFPIVLCE.js";
18
+ } from "./chunk-LDFOVKJS.js";
19
19
  import {
20
20
  DEFAULT_VERCEL_CONFIG_FILENAME,
21
21
  VERCEL_CONFIG_EXTENSIONS,
@@ -41,7 +41,7 @@ import {
41
41
  useKeypress,
42
42
  usePrefix,
43
43
  useState
44
- } from "./chunk-PD5HCBBY.js";
44
+ } from "./chunk-SPXTKMOV.js";
45
45
  import {
46
46
  require_load_json_file,
47
47
  require_write_json_file
@@ -7,7 +7,7 @@ const __dirname = __dirname_(__filename);
7
7
  import {
8
8
  require_end_of_stream,
9
9
  require_once
10
- } from "./chunk-PD5HCBBY.js";
10
+ } from "./chunk-SPXTKMOV.js";
11
11
  import {
12
12
  require_signal_exit
13
13
  } from "./chunk-ZQKJVHXY.js";
@@ -7,7 +7,7 @@ const __dirname = __dirname_(__filename);
7
7
  import {
8
8
  formatCondition,
9
9
  formatTransform
10
- } from "./chunk-CLLHWKQN.js";
10
+ } from "./chunk-GDOCMDCB.js";
11
11
  import {
12
12
  output_manager_default
13
13
  } from "./chunk-ZQKJVHXY.js";
@@ -9,14 +9,14 @@ import {
9
9
  } from "./chunk-HTOH3MSD.js";
10
10
  import {
11
11
  getScope
12
- } from "./chunk-VLWTUL5F.js";
12
+ } from "./chunk-EYQEF55O.js";
13
13
  import {
14
14
  AGENT_REASON
15
15
  } from "./chunk-E3NE4SKN.js";
16
16
  import {
17
17
  getLinkedProject,
18
18
  getProjectByNameOrId
19
- } from "./chunk-PD5HCBBY.js";
19
+ } from "./chunk-SPXTKMOV.js";
20
20
  import {
21
21
  buildCommandWithGlobalFlags,
22
22
  outputAgentError