vercel 54.14.0 → 54.14.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 (61) hide show
  1. package/dist/chunks/{add-PVEKZBHH.js → add-INSQH24S.js} +7 -7
  2. package/dist/chunks/{chunk-FPRA7U2P.js → chunk-467YGYFK.js} +1 -1
  3. package/dist/chunks/{chunk-6K3WJDFA.js → chunk-4WQGP4Z4.js} +9 -9
  4. package/dist/chunks/{chunk-V4GROAUJ.js → chunk-5QKYBWW2.js} +4 -7
  5. package/dist/chunks/chunk-64IF634X.js +18 -0
  6. package/dist/chunks/{chunk-V2WFM23D.js → chunk-74VEZPM6.js} +1 -1
  7. package/dist/chunks/{chunk-5SYDEK2N.js → chunk-D7MGZH35.js} +1 -1
  8. package/dist/chunks/{chunk-Y76J3TGD.js → chunk-DAKMPPIS.js} +1 -1
  9. package/dist/chunks/{chunk-KJ5O7JQQ.js → chunk-F4WXNECT.js} +27 -60
  10. package/dist/chunks/{chunk-RWJORLQP.js → chunk-F6SCQ6XU.js} +58 -16
  11. package/dist/chunks/{chunk-7CJZCFLW.js → chunk-FKNOCLZU.js} +2 -2
  12. package/dist/chunks/{chunk-CO5D46AG.js → chunk-GGP5R3FU.js} +18 -38
  13. package/dist/chunks/{chunk-J5273CSE.js → chunk-HIYWSGI7.js} +19 -10
  14. package/dist/chunks/{chunk-TH555JND.js → chunk-J4LCBXF2.js} +14 -41
  15. package/dist/chunks/{chunk-ABOX5TXU.js → chunk-L7U3Z7E4.js} +3 -3
  16. package/dist/chunks/{chunk-7OZWGXPA.js → chunk-MKB32SJZ.js} +2 -2
  17. package/dist/chunks/{chunk-4KAFHBYE.js → chunk-NMGGBH7K.js} +1 -1
  18. package/dist/chunks/{chunk-C3VH3X5Y.js → chunk-P2AMQX7F.js} +3 -3
  19. package/dist/chunks/{chunk-6D6CSOSK.js → chunk-P6VIXOWO.js} +84 -60
  20. package/dist/chunks/{chunk-PV533MBH.js → chunk-PMUUPCDL.js} +1 -1
  21. package/dist/chunks/{chunk-S4VHXL2Y.js → chunk-TVBXGFEL.js} +1 -1
  22. package/dist/chunks/{chunk-G7QWUIGS.js → chunk-UEFCAT3N.js} +2 -2
  23. package/dist/chunks/{chunk-OEM7RB3X.js → chunk-UJ3ZCBUA.js} +1 -1
  24. package/dist/chunks/{chunk-VNUNCNPE.js → chunk-UPI3OHBK.js} +1 -1
  25. package/dist/chunks/chunk-VXYGCOKL.js +28 -0
  26. package/dist/chunks/{chunk-5UCWXYNH.js → chunk-XLLAD5DR.js} +87 -45
  27. package/dist/chunks/{chunk-Z7KOKD2G.js → chunk-YQPAAXUU.js} +1 -1
  28. package/dist/chunks/{chunk-B6C7NMT3.js → chunk-Z2MBXYZZ.js} +1 -1
  29. package/dist/chunks/{chunk-DAASB6YQ.js → chunk-ZRJQY3VK.js} +22 -2
  30. package/dist/chunks/{compile-vercel-config-MD37D2F7.js → compile-vercel-config-VPPGDFKL.js} +3 -3
  31. package/dist/chunks/{delete-6EMDCXSA.js → delete-O3EHQHYD.js} +8 -6
  32. package/dist/chunks/{disable-FLJ27NHG.js → disable-GJDQC34I.js} +8 -6
  33. package/dist/chunks/{discard-KEIII6RM.js → discard-UZT23XN2.js} +8 -6
  34. package/dist/chunks/{edit-DOL2ZJPG.js → edit-PEQIROSE.js} +10 -8
  35. package/dist/chunks/{enable-PZWZIETT.js → enable-ACNEAJ5S.js} +8 -6
  36. package/dist/chunks/{export-2PFHAELC.js → export-ZICIQKHJ.js} +4 -4
  37. package/dist/chunks/{inspect-WPWOZJ2K.js → inspect-PUFF7LND.js} +6 -6
  38. package/dist/chunks/{list-4R5DCLTB.js → list-FWUV4NO4.js} +5 -5
  39. package/dist/chunks/{list-ZT7QK2H7.js → list-L2UFHHQ7.js} +7 -7
  40. package/dist/chunks/{ls-4JTXQXMQ.js → ls-6HVFGIQS.js} +7 -7
  41. package/dist/chunks/{publish-JV4J3SOA.js → publish-HKTAQMYG.js} +8 -6
  42. package/dist/chunks/{query-N22EYSZZ.js → query-VQ5HDMFO.js} +97 -41
  43. package/dist/chunks/{reorder-TG53BKW4.js → reorder-CVMW6VL7.js} +8 -6
  44. package/dist/chunks/{restore-U7O4VESA.js → restore-32NXH4EH.js} +8 -6
  45. package/dist/chunks/{rm-XA4LYZXI.js → rm-7TPDWMJZ.js} +7 -7
  46. package/dist/chunks/{routes-EAMQVFU2.js → routes-YEU33SON.js} +2 -2
  47. package/dist/chunks/{rule-inspect-HC745CYT.js → rule-inspect-PQORU3SU.js} +7 -7
  48. package/dist/chunks/{rules-RMN72YHN.js → rules-VIITOYFN.js} +6 -6
  49. package/dist/chunks/{schema-CZVKUXM6.js → schema-AECGMSF5.js} +6 -6
  50. package/dist/chunks/{stamp-ENIXDCRO.js → stamp-AA7R3MZS.js} +3 -1
  51. package/dist/chunks/{update-PU3WLIA7.js → update-J4QCT3GS.js} +7 -7
  52. package/dist/commands/build/index.js +16 -14
  53. package/dist/commands/deploy/index.js +22 -163
  54. package/dist/commands/dev/index.js +13 -14
  55. package/dist/commands/env/index.js +153 -92
  56. package/dist/commands/link/index.js +11 -11
  57. package/dist/commands/list/index.js +10 -8
  58. package/dist/commands-bulk.js +222 -85
  59. package/dist/index.js +18 -18
  60. package/dist/version.mjs +1 -1
  61. package/package.json +16 -16
@@ -8,23 +8,22 @@ import {
8
8
  TelemetryClient,
9
9
  require_dist as require_dist2,
10
10
  require_graceful_fs
11
- } from "./chunk-J5273CSE.js";
11
+ } from "./chunk-HIYWSGI7.js";
12
12
  import {
13
13
  buildCommandWithYes,
14
14
  getPreservedArgsForEnvPull,
15
15
  outputActionRequired,
16
16
  outputAgentError
17
17
  } from "./chunk-NHGCQRK5.js";
18
- import {
19
- require_ms,
20
- stamp_default
21
- } from "./chunk-CO5D46AG.js";
22
18
  import {
23
19
  require_end_of_stream,
24
20
  require_lib as require_lib2,
25
21
  require_once,
26
22
  require_wrappy
27
23
  } from "./chunk-N2T234LO.js";
24
+ import {
25
+ require_ms
26
+ } from "./chunk-GGP5R3FU.js";
28
27
  import {
29
28
  forceOption,
30
29
  formatOption,
@@ -37409,7 +37408,7 @@ var require_package = __commonJS({
37409
37408
  "../client/package.json"(exports, module) {
37410
37409
  module.exports = {
37411
37410
  name: "@vercel/client",
37412
- version: "17.5.15",
37411
+ version: "17.5.16",
37413
37412
  main: "dist/index.js",
37414
37413
  typings: "dist/index.d.ts",
37415
37414
  homepage: "https://vercel.com",
@@ -54729,9 +54728,10 @@ function getGitConfigPath(opts) {
54729
54728
 
54730
54729
  // src/util/output/print-aligned-label.ts
54731
54730
  var import_chalk6 = __toESM(require_source(), 1);
54732
- var ALIGNED_LABEL_WIDTH = 12;
54731
+ var ALIGNED_LABEL_WIDTH = 16;
54733
54732
  function printAlignedLabel(label, value, options = {}) {
54734
- const prefix = options.gutter ? `${options.gutter} ` : " ";
54733
+ const gutter = options.gutter === "\u2713" ? import_chalk6.default.green("\u2713") : options.gutter;
54734
+ const prefix = gutter ? `${gutter} ` : " ";
54735
54735
  output_manager_default.print(
54736
54736
  `${prefix}${import_chalk6.default.bold(label.padEnd(ALIGNED_LABEL_WIDTH))}${import_chalk6.default.bold(value)}
54737
54737
  `
@@ -54829,7 +54829,8 @@ async function linkRepoProject(client, cwd, {
54829
54829
  await (0, import_fs_extra3.outputJSON)(repoLink.repoConfigPath, repoConfig, { spaces: 2 });
54830
54830
  await writeReadme(repoLink.rootPath);
54831
54831
  await addToGitIgnore(repoLink.rootPath);
54832
- printAlignedLabel("Linked", `${orgSlug}/${project.name}`);
54832
+ output_manager_default.print("\n");
54833
+ printAlignedLabel("Linked", `${orgSlug}/${project.name}`, { gutter: "\u2713" });
54833
54834
  return {
54834
54835
  repoConfig,
54835
54836
  repoConfigPath: repoLink.repoConfigPath,
@@ -55036,7 +55037,8 @@ async function ensureRepoLink(client, cwd, { yes, overwrite }) {
55036
55037
  await addToGitIgnore(rootPath);
55037
55038
  printAlignedLabel(
55038
55039
  "Linked",
55039
- `${(0, import_pluralize.default)("Project", result.projects.length, true)} under ${result.orgSlug}`
55040
+ `${(0, import_pluralize.default)("Project", result.projects.length, true)} under ${result.orgSlug}`,
55041
+ { gutter: "\u2713" }
55040
55042
  );
55041
55043
  }
55042
55044
  return {
@@ -55088,7 +55090,8 @@ async function addRepoLink(client, cwd, { yes }) {
55088
55090
  await (0, import_fs_extra3.outputJSON)(repoConfigPath, updatedConfig, { spaces: 2 });
55089
55091
  printAlignedLabel(
55090
55092
  "Added",
55091
- `${(0, import_pluralize.default)("Project", result.projects.length, true)} under ${result.orgSlug}`
55093
+ `${(0, import_pluralize.default)("Project", result.projects.length, true)} under ${result.orgSlug}`,
55094
+ { gutter: "\u2713" }
55092
55095
  );
55093
55096
  return {
55094
55097
  repoConfig: updatedConfig,
@@ -55288,12 +55291,12 @@ function buildDeltaString(oldEnv, newEnv) {
55288
55291
  deltaString += import_chalk9.default.green(addDeltaSection("+", changed, true));
55289
55292
  deltaString += import_chalk9.default.green(addDeltaSection("+", added));
55290
55293
  deltaString += import_chalk9.default.red(addDeltaSection("-", removed));
55291
- return deltaString ? import_chalk9.default.gray("Changes:\n") + deltaString + "\n" : deltaString;
55294
+ return deltaString ? import_chalk9.default.gray(" Changes:\n") + deltaString + "\n" : deltaString;
55292
55295
  }
55293
55296
  function addDeltaSection(prefix, arr, changed = false) {
55294
55297
  if (arr.length === 0)
55295
55298
  return "";
55296
- return arr.sort().map((item) => `${prefix} ${item}${changed ? " (Updated)" : ""}`).join("\n") + "\n";
55299
+ return arr.sort().map((item) => ` ${prefix} ${item}${changed ? " (Updated)" : ""}`).join("\n") + "\n";
55297
55300
  }
55298
55301
 
55299
55302
  // src/commands/env/pull.ts
@@ -55408,7 +55411,7 @@ var listSubcommand = {
55408
55411
  var addSubcommand = {
55409
55412
  name: "add",
55410
55413
  aliases: [],
55411
- description: "Add an Environment Variable (see examples below)",
55414
+ description: "Add an Environment Variable",
55412
55415
  arguments: [
55413
55416
  {
55414
55417
  name: "name",
@@ -55426,21 +55429,21 @@ var addSubcommand = {
55426
55429
  options: [
55427
55430
  {
55428
55431
  name: "sensitive",
55429
- description: "Force the Environment Variable to be sensitive, even when adding to Development (will fail server-side)",
55432
+ description: "Store the value as sensitive for Production or Preview",
55430
55433
  shorthand: null,
55431
55434
  type: Boolean,
55432
55435
  deprecated: false
55433
55436
  },
55434
55437
  {
55435
55438
  name: "no-sensitive",
55436
- description: "Opt out of the sensitive default on Production and Preview; value remains readable later",
55439
+ description: "Store the value as non-sensitive when policy allows",
55437
55440
  shorthand: null,
55438
55441
  type: Boolean,
55439
55442
  deprecated: false
55440
55443
  },
55441
55444
  {
55442
55445
  ...forceOption,
55443
- description: "Force overwrites when a command would normally fail",
55446
+ description: "Overwrite an existing variable for the same target",
55444
55447
  shorthand: null
55445
55448
  },
55446
55449
  {
@@ -55449,14 +55452,14 @@ var addSubcommand = {
55449
55452
  },
55450
55453
  {
55451
55454
  name: "guidance",
55452
- description: "Receive command suggestions once command is complete",
55455
+ description: "Show command suggestions after completion",
55453
55456
  shorthand: null,
55454
55457
  type: Boolean,
55455
55458
  deprecated: false
55456
55459
  },
55457
55460
  {
55458
55461
  name: "value",
55459
- description: "Value for the variable (non-interactive). Otherwise use stdin or you will be prompted.",
55462
+ description: "Set the variable value for non-interactive use; otherwise use stdin or the prompt",
55460
55463
  shorthand: null,
55461
55464
  type: String,
55462
55465
  argument: "VALUE",
@@ -55502,8 +55505,8 @@ var addSubcommand = {
55502
55505
  ]
55503
55506
  },
55504
55507
  {
55505
- name: "Add with value as argument (non-interactive)",
55506
- value: `${packageName} env add API_TOKEN production --value "secret" --yes`
55508
+ name: "Add with --value for non-interactive use",
55509
+ value: `${packageName} env add API_TOKEN production --value "<value>" --yes`
55507
55510
  }
55508
55511
  ]
55509
55512
  };
@@ -55801,7 +55804,10 @@ var promptedAtSchema = z.codec(
55801
55804
  );
55802
55805
  var agentPreferencesSchema = z.object({
55803
55806
  pluginDeclined: z.boolean().optional(),
55804
- lastPromptedAt: promptedAtSchema.optional()
55807
+ pluginAutoUpdate: z.boolean().optional(),
55808
+ lastPromptedAt: promptedAtSchema.optional(),
55809
+ lastPluginAutoUpdateAttemptedAt: promptedAtSchema.optional(),
55810
+ lastPluginAutoUpdateAttemptedKey: z.string().optional()
55805
55811
  });
55806
55812
  async function fileExists(filePath) {
55807
55813
  try {
@@ -55932,10 +55938,19 @@ function isSameDay(left, right) {
55932
55938
  function wasPromptedToday(prefs) {
55933
55939
  return prefs.lastPromptedAt ? isSameDay(prefs.lastPromptedAt, /* @__PURE__ */ new Date()) : false;
55934
55940
  }
55941
+ function wasPluginAutoUpdateAttemptedToday(prefs, attemptKey) {
55942
+ return prefs.lastPluginAutoUpdateAttemptedKey === attemptKey && !!prefs.lastPluginAutoUpdateAttemptedAt && isSameDay(prefs.lastPluginAutoUpdateAttemptedAt, /* @__PURE__ */ new Date());
55943
+ }
55935
55944
  async function markPromptedToday(client, prefs) {
55936
55945
  prefs.lastPromptedAt = /* @__PURE__ */ new Date();
55937
55946
  await writePrefs(client, prefs);
55938
55947
  }
55948
+ function markPluginAutoUpdateAttempted(prefs, attemptKey) {
55949
+ if (!attemptKey)
55950
+ return;
55951
+ prefs.lastPluginAutoUpdateAttemptedAt = /* @__PURE__ */ new Date();
55952
+ prefs.lastPluginAutoUpdateAttemptedKey = attemptKey;
55953
+ }
55939
55954
  async function runCommand(command, args) {
55940
55955
  return await new Promise((resolve5) => {
55941
55956
  const child = spawn(command, args, { stdio: "pipe" });
@@ -56064,31 +56079,44 @@ function buildClaudePluginMigrationPlan(status) {
56064
56079
  function hasClaudeMigrationActions(plan) {
56065
56080
  return plan.installOfficial || plan.updateOfficial || plan.removeLegacy || plan.removeLegacyMarketplace;
56066
56081
  }
56082
+ function getClaudeAutoUpdateAttemptKey(status, plan) {
56083
+ return [
56084
+ status.state,
56085
+ status.legacy?.version ?? "none",
56086
+ status.official?.version ?? "none",
56087
+ status.latestVersion ?? "unknown",
56088
+ plan.installOfficial ? "install" : "",
56089
+ plan.updateOfficial ? "update" : "",
56090
+ plan.removeLegacy ? "remove-legacy" : "",
56091
+ plan.removeLegacyMarketplace ? "remove-marketplace" : ""
56092
+ ].join(":");
56093
+ }
56067
56094
  function buildClaudePromptCopy(status, plan) {
56068
56095
  if (plan.installOfficial && status.state === "none") {
56069
56096
  return {
56070
- message: "",
56071
- confirm: "Working with Vercel is easier with the Vercel Plugin for Claude Code. Would you like to install it?"
56097
+ message: "Vercel Plugin for Claude Code is not installed.",
56098
+ confirm: "Would you like to install it now?"
56072
56099
  };
56073
56100
  }
56074
56101
  if (plan.installOfficial && status.state === "legacy-only") {
56075
56102
  return {
56076
- message: "",
56077
- confirm: "Working with Vercel is easier with the latest Vercel Plugin for Claude Code. Would you like to update it?"
56103
+ message: "Update available for Vercel Plugin for Claude Code (legacy -> official).",
56104
+ confirm: "Would you like to update now?"
56078
56105
  };
56079
56106
  }
56080
56107
  if (status.state === "both" && plan.removeLegacy) {
56081
56108
  return {
56082
- message: "",
56083
- confirm: "Working with Vercel is easier with the latest Vercel Plugin for Claude Code. Would you like to update it?"
56109
+ message: "Vercel Plugin for Claude Code has a legacy install to clean up.",
56110
+ confirm: "Would you like to update now?"
56084
56111
  };
56085
56112
  }
56086
56113
  if (plan.updateOfficial) {
56087
- const fromVersion = status.official?.version ?? "your current version";
56088
- const toVersion = status.latestVersion ?? "the latest version";
56114
+ const fromVersion = status.official?.version;
56115
+ const toVersion = status.latestVersion;
56116
+ const versionRange = fromVersion && toVersion ? ` (v${fromVersion} -> v${toVersion})` : "";
56089
56117
  return {
56090
- message: "",
56091
- confirm: `Working with Vercel is easier with the latest Vercel Plugin for Claude Code. Would you like to update from ${fromVersion} to ${toVersion}?`
56118
+ message: `Update available for Vercel Plugin for Claude Code${versionRange}.`,
56119
+ confirm: "Would you like to update now?"
56092
56120
  };
56093
56121
  }
56094
56122
  return {
@@ -56226,11 +56254,12 @@ async function autoInstallVercelPlugin(client, options) {
56226
56254
  try {
56227
56255
  const prefs = await readPrefs(client);
56228
56256
  const applyMode = options?.mode === "apply";
56229
- if (!prefs.pluginDeclined || applyMode) {
56257
+ if (!prefs.pluginDeclined || prefs.pluginAutoUpdate || applyMode) {
56230
56258
  const targets = await getPluginTargets(client.agentName, client.cwd);
56231
56259
  const uninstalledTargets = [];
56232
56260
  const claudeStatus = targets.includes("claude-code") ? await getClaudePluginStatus() : void 0;
56233
56261
  const claudePlan = claudeStatus ? buildClaudePluginMigrationPlan(claudeStatus) : void 0;
56262
+ const claudeAutoUpdateAttemptKey = claudeStatus && claudePlan ? getClaudeAutoUpdateAttemptKey(claudeStatus, claudePlan) : void 0;
56234
56263
  for (const target of targets) {
56235
56264
  if (target === "claude-code") {
56236
56265
  if (claudePlan && hasClaudeMigrationActions(claudePlan)) {
@@ -56243,11 +56272,22 @@ async function autoInstallVercelPlugin(client, options) {
56243
56272
  }
56244
56273
  }
56245
56274
  if (uninstalledTargets.length > 0) {
56275
+ if (prefs.pluginAutoUpdate) {
56276
+ if (claudeAutoUpdateAttemptKey && wasPluginAutoUpdateAttemptedToday(prefs, claudeAutoUpdateAttemptKey)) {
56277
+ return;
56278
+ }
56279
+ prefs.pluginDeclined = false;
56280
+ markPluginAutoUpdateAttempted(prefs, claudeAutoUpdateAttemptKey);
56281
+ await writePrefs(client, prefs);
56282
+ await applyPluginActions(uninstalledTargets, claudePlan);
56283
+ return;
56284
+ }
56246
56285
  if (!applyMode && wasPromptedToday(prefs)) {
56247
56286
  return;
56248
56287
  }
56249
56288
  if (applyMode) {
56250
56289
  prefs.pluginDeclined = false;
56290
+ prefs.pluginAutoUpdate = true;
56251
56291
  await writePrefs(client, prefs);
56252
56292
  await applyPluginActions(uninstalledTargets, claudePlan);
56253
56293
  return;
@@ -56267,10 +56307,12 @@ async function autoInstallVercelPlugin(client, options) {
56267
56307
  await markPromptedToday(client, prefs);
56268
56308
  if (accepted) {
56269
56309
  prefs.pluginDeclined = false;
56310
+ prefs.pluginAutoUpdate = true;
56270
56311
  await writePrefs(client, prefs);
56271
56312
  await applyPluginActions(uninstalledTargets, claudePlan);
56272
56313
  } else {
56273
56314
  prefs.pluginDeclined = true;
56315
+ prefs.pluginAutoUpdate = false;
56274
56316
  await writePrefs(client, prefs);
56275
56317
  }
56276
56318
  }
@@ -56865,13 +56907,12 @@ async function envPullCommandLogic(client, filename, skipConfirmation, environme
56865
56907
  const projectSlugLink = formatProject(link.org.slug, link.project.name);
56866
56908
  const downloadMessage = gitBranch ? `Downloading \`${import_chalk13.default.cyan(
56867
56909
  environment
56868
- )}\` Environment Variables for ${projectSlugLink} and any overrides for branch ${import_chalk13.default.cyan(
56910
+ )}\` environment variables for ${projectSlugLink} and any overrides for branch ${import_chalk13.default.cyan(
56869
56911
  gitBranch
56870
56912
  )}` : `Downloading \`${import_chalk13.default.cyan(
56871
56913
  environment
56872
- )}\` Environment Variables for ${projectSlugLink}`;
56914
+ )}\` environment variables for ${projectSlugLink}`;
56873
56915
  output_manager_default.log(downloadMessage);
56874
- const pullStamp = stamp_default();
56875
56916
  output_manager_default.spinner("Downloading");
56876
56917
  const pullId = deploymentId || link.project.id;
56877
56918
  const pullResult = await pullEnvRecordsForEnvPull(client, pullId, source, {
@@ -56900,12 +56941,11 @@ async function envPullCommandLogic(client, filename, skipConfirmation, environme
56900
56941
  const rootPath = link.repoRoot ?? cwd;
56901
56942
  isGitIgnoreUpdated = await addToGitIgnore(rootPath, ".env*");
56902
56943
  }
56903
- output_manager_default.print(
56904
- `${prependEmoji(
56905
- `${exists ? "Updated" : "Created"} ${import_chalk13.default.bold(filename)} file ${isGitIgnoreUpdated ? "and added it to .gitignore" : ""} ${import_chalk13.default.gray(pullStamp())}`,
56906
- emoji("success")
56907
- )}
56908
- `
56944
+ output_manager_default.print("\n");
56945
+ printAlignedLabel(
56946
+ exists ? "Updated" : "Created",
56947
+ `${filename} file${isGitIgnoreUpdated ? " and added it to .gitignore" : ""}`,
56948
+ { gutter: "\u2713" }
56909
56949
  );
56910
56950
  }
56911
56951
  async function pullEnvRecordsForEnvPull(client, pullId, source, options) {
@@ -58140,7 +58180,7 @@ async function writeReadme(path) {
58140
58180
  VERCEL_DIR_README_CONTENT
58141
58181
  );
58142
58182
  }
58143
- async function linkFolderToProject(client, path, projectLink, projectName, orgSlug, successEmoji = "link", autoConfirm = false, pullEnv = true) {
58183
+ async function linkFolderToProject(client, path, projectLink, projectName, orgSlug, successEmoji = "link", autoConfirm = false, pullEnv = true, resultLabel = "Linked") {
58144
58184
  if (await hasProjectLink(client, projectLink, path)) {
58145
58185
  return;
58146
58186
  }
@@ -58161,15 +58201,17 @@ async function linkFolderToProject(client, path, projectLink, projectName, orgSl
58161
58201
  );
58162
58202
  await writeReadme(path);
58163
58203
  await addToGitIgnore(path);
58164
- printAlignedLabel("Linked", `${orgSlug}/${projectName}`);
58204
+ output_manager_default.print("\n");
58205
+ printAlignedLabel(resultLabel, `${orgSlug}/${projectName}`, { gutter: "\u2713" });
58165
58206
  if (!pullEnv) {
58166
58207
  return;
58167
58208
  }
58168
58209
  if (!client.stdin.isTTY || client.nonInteractive) {
58169
58210
  return;
58170
58211
  }
58212
+ output_manager_default.print("\n");
58171
58213
  const pullEnvConfirmed = autoConfirm || await client.input.confirm(
58172
- "Would you like to pull environment variables now?",
58214
+ "Pull development environment variables into .env.local?",
58173
58215
  true
58174
58216
  );
58175
58217
  if (pullEnvConfirmed) {
@@ -11,7 +11,7 @@ import {
11
11
  getTeamById,
12
12
  getUser,
13
13
  getVercelDirectory
14
- } from "./chunk-5UCWXYNH.js";
14
+ } from "./chunk-XLLAD5DR.js";
15
15
  import {
16
16
  TeamDeleted
17
17
  } from "./chunk-LN6B7ZI3.js";
@@ -13,7 +13,7 @@ import {
13
13
 
14
14
  // src/commands/metrics/output.ts
15
15
  function getRollupColumnName(metric, aggregation) {
16
- return `${metric.replace(/\./g, "_")}_${aggregation}`;
16
+ return `${metric}_${aggregation}`.replace(/[./]/g, "_");
17
17
  }
18
18
  function formatQueryJson(query, response) {
19
19
  return JSON.stringify(
@@ -82,9 +82,9 @@ var metricsCommand = {
82
82
  {
83
83
  name: "filter",
84
84
  shorthand: "f",
85
- type: String,
85
+ type: [String],
86
86
  deprecated: false,
87
- description: "OData filter expression",
87
+ description: "OData filter expression (repeatable, ANDed together)",
88
88
  argument: "EXPR"
89
89
  },
90
90
  {
@@ -111,6 +111,14 @@ var metricsCommand = {
111
111
  description: "Time bucket size: 5m, 15m, 1h, 1d (default: auto)",
112
112
  argument: "SIZE"
113
113
  },
114
+ {
115
+ name: "bucket-timezone",
116
+ shorthand: null,
117
+ type: String,
118
+ deprecated: false,
119
+ description: "IANA timezone for calendar bucket alignment only; does not shift --since/--until or output timestamps (e.g., Europe/Paris)",
120
+ argument: "ZONE"
121
+ },
114
122
  {
115
123
  ...projectOption,
116
124
  shorthand: "p"
@@ -145,6 +153,14 @@ var metricsCommand = {
145
153
  name: "Core Web Vitals (LCP) by route",
146
154
  value: `${packageName} metrics vercel.speed_insights_metric.lcp -a p75 --group-by route --since 7d`
147
155
  },
156
+ {
157
+ name: "Daily pageviews with a Paris-aligned bucket",
158
+ value: `${packageName} metrics vercel.analytics_pageview.count --since 2026-05-28 --until 2026-05-29 --granularity 1d --bucket-timezone Europe/Paris`
159
+ },
160
+ {
161
+ name: "Visitors time series from the top 5 countries",
162
+ value: `${packageName} metrics vercel.analytics_pageview.count -a unique/visitor_id --group-by country --since 1d --granularity 1h --limit 5`
163
+ },
148
164
  {
149
165
  name: "List available metrics",
150
166
  value: `${packageName} metrics schema`
@@ -153,6 +169,10 @@ var metricsCommand = {
153
169
  name: "Function executions matching a path pattern",
154
170
  value: `${packageName} metrics vercel.function_invocation.count -f "contains(request_path, '/api')" --group-by route --since 1h`
155
171
  },
172
+ {
173
+ name: "Function executions matching multiple filters",
174
+ value: `${packageName} metrics vercel.function_invocation.count -f "http_status ge 500" -f "contains(request_path, '/api')" --since 1h`
175
+ },
156
176
  {
157
177
  name: "Show schema for a metric prefix",
158
178
  value: `${packageName} metrics schema vercel.request`
@@ -11,11 +11,11 @@ import {
11
11
  findSourceVercelConfigFile,
12
12
  getVercelConfigPath,
13
13
  normalizeConfig
14
- } from "./chunk-5UCWXYNH.js";
15
- import "./chunk-J5273CSE.js";
14
+ } from "./chunk-XLLAD5DR.js";
15
+ import "./chunk-HIYWSGI7.js";
16
16
  import "./chunk-NHGCQRK5.js";
17
- import "./chunk-CO5D46AG.js";
18
17
  import "./chunk-N2T234LO.js";
18
+ import "./chunk-GGP5R3FU.js";
19
19
  import "./chunk-6IQZVQV6.js";
20
20
  import "./chunk-LN6B7ZI3.js";
21
21
  import "./chunk-P4QNYOFB.js";
@@ -15,23 +15,25 @@ import {
15
15
  parseSubcommandArgs,
16
16
  resolveRoutes,
17
17
  withGlobalFlags
18
- } from "./chunk-G7QWUIGS.js";
18
+ } from "./chunk-UEFCAT3N.js";
19
19
  import {
20
20
  deleteSubcommand
21
21
  } from "./chunk-WFRHKZFI.js";
22
+ import {
23
+ stamp_default
24
+ } from "./chunk-64IF634X.js";
25
+ import "./chunk-VXYGCOKL.js";
22
26
  import {
23
27
  AGENT_REASON,
24
28
  AGENT_STATUS
25
29
  } from "./chunk-LJ5WXXG6.js";
26
- import "./chunk-5UCWXYNH.js";
27
- import "./chunk-J5273CSE.js";
30
+ import "./chunk-XLLAD5DR.js";
31
+ import "./chunk-HIYWSGI7.js";
28
32
  import {
29
33
  outputAgentError
30
34
  } from "./chunk-NHGCQRK5.js";
31
- import {
32
- stamp_default
33
- } from "./chunk-CO5D46AG.js";
34
35
  import "./chunk-N2T234LO.js";
36
+ import "./chunk-GGP5R3FU.js";
35
37
  import "./chunk-6IQZVQV6.js";
36
38
  import {
37
39
  getCommandName
@@ -17,20 +17,22 @@ import {
17
17
  parseSubcommandArgs,
18
18
  resolveRoute,
19
19
  withGlobalFlags
20
- } from "./chunk-G7QWUIGS.js";
20
+ } from "./chunk-UEFCAT3N.js";
21
21
  import {
22
22
  disableSubcommand
23
23
  } from "./chunk-WFRHKZFI.js";
24
+ import {
25
+ stamp_default
26
+ } from "./chunk-64IF634X.js";
27
+ import "./chunk-VXYGCOKL.js";
24
28
  import "./chunk-LJ5WXXG6.js";
25
- import "./chunk-5UCWXYNH.js";
26
- import "./chunk-J5273CSE.js";
29
+ import "./chunk-XLLAD5DR.js";
30
+ import "./chunk-HIYWSGI7.js";
27
31
  import {
28
32
  outputAgentError
29
33
  } from "./chunk-NHGCQRK5.js";
30
- import {
31
- stamp_default
32
- } from "./chunk-CO5D46AG.js";
33
34
  import "./chunk-N2T234LO.js";
35
+ import "./chunk-GGP5R3FU.js";
34
36
  import "./chunk-6IQZVQV6.js";
35
37
  import {
36
38
  getCommandName
@@ -17,20 +17,22 @@ import {
17
17
  parseSubcommandArgs,
18
18
  printDiffSummary,
19
19
  withGlobalFlags
20
- } from "./chunk-G7QWUIGS.js";
20
+ } from "./chunk-UEFCAT3N.js";
21
21
  import {
22
22
  discardSubcommand
23
23
  } from "./chunk-WFRHKZFI.js";
24
+ import {
25
+ stamp_default
26
+ } from "./chunk-64IF634X.js";
27
+ import "./chunk-VXYGCOKL.js";
24
28
  import "./chunk-LJ5WXXG6.js";
25
- import "./chunk-5UCWXYNH.js";
26
- import "./chunk-J5273CSE.js";
29
+ import "./chunk-XLLAD5DR.js";
30
+ import "./chunk-HIYWSGI7.js";
27
31
  import {
28
32
  outputAgentError
29
33
  } from "./chunk-NHGCQRK5.js";
30
- import {
31
- stamp_default
32
- } from "./chunk-CO5D46AG.js";
33
34
  import "./chunk-N2T234LO.js";
35
+ import "./chunk-GGP5R3FU.js";
34
36
  import "./chunk-6IQZVQV6.js";
35
37
  import {
36
38
  getCommandName
@@ -19,7 +19,7 @@ import {
19
19
  printRouteConfig,
20
20
  routingRuleToCurrentRoute,
21
21
  runInteractiveEditLoop
22
- } from "./chunk-S4VHXL2Y.js";
22
+ } from "./chunk-TVBXGFEL.js";
23
23
  import {
24
24
  getRouteVersions
25
25
  } from "./chunk-AHU7WNL2.js";
@@ -31,20 +31,22 @@ import {
31
31
  resolveRoute,
32
32
  shellQuoteRouteIdentifierForSuggestion,
33
33
  withGlobalFlags
34
- } from "./chunk-G7QWUIGS.js";
34
+ } from "./chunk-UEFCAT3N.js";
35
35
  import {
36
36
  editSubcommand
37
37
  } from "./chunk-WFRHKZFI.js";
38
+ import {
39
+ stamp_default
40
+ } from "./chunk-64IF634X.js";
41
+ import "./chunk-VXYGCOKL.js";
38
42
  import "./chunk-LJ5WXXG6.js";
39
- import "./chunk-5UCWXYNH.js";
40
- import "./chunk-J5273CSE.js";
43
+ import "./chunk-XLLAD5DR.js";
44
+ import "./chunk-HIYWSGI7.js";
41
45
  import {
42
46
  outputAgentError
43
47
  } from "./chunk-NHGCQRK5.js";
44
- import {
45
- stamp_default
46
- } from "./chunk-CO5D46AG.js";
47
48
  import "./chunk-N2T234LO.js";
49
+ import "./chunk-GGP5R3FU.js";
48
50
  import "./chunk-6IQZVQV6.js";
49
51
  import {
50
52
  getCommandName
@@ -74,7 +76,7 @@ async function edit(client, argv) {
74
76
  const { args, flags } = parsed;
75
77
  const skipConfirmation = flags["--yes"];
76
78
  const identifier = args[0];
77
- const { RoutesEditTelemetryClient } = await import("./routes-EAMQVFU2.js");
79
+ const { RoutesEditTelemetryClient } = await import("./routes-YEU33SON.js");
78
80
  const telemetry = new RoutesEditTelemetryClient({
79
81
  opts: { store: client.telemetryEventStore }
80
82
  });
@@ -17,20 +17,22 @@ import {
17
17
  parseSubcommandArgs,
18
18
  resolveRoute,
19
19
  withGlobalFlags
20
- } from "./chunk-G7QWUIGS.js";
20
+ } from "./chunk-UEFCAT3N.js";
21
21
  import {
22
22
  enableSubcommand
23
23
  } from "./chunk-WFRHKZFI.js";
24
+ import {
25
+ stamp_default
26
+ } from "./chunk-64IF634X.js";
27
+ import "./chunk-VXYGCOKL.js";
24
28
  import "./chunk-LJ5WXXG6.js";
25
- import "./chunk-5UCWXYNH.js";
26
- import "./chunk-J5273CSE.js";
29
+ import "./chunk-XLLAD5DR.js";
30
+ import "./chunk-HIYWSGI7.js";
27
31
  import {
28
32
  outputAgentError
29
33
  } from "./chunk-NHGCQRK5.js";
30
- import {
31
- stamp_default
32
- } from "./chunk-CO5D46AG.js";
33
34
  import "./chunk-N2T234LO.js";
35
+ import "./chunk-GGP5R3FU.js";
34
36
  import "./chunk-6IQZVQV6.js";
35
37
  import {
36
38
  getCommandName
@@ -9,18 +9,18 @@ import {
9
9
  getRoutes,
10
10
  parseSubcommandArgs,
11
11
  withGlobalFlags
12
- } from "./chunk-G7QWUIGS.js";
12
+ } from "./chunk-UEFCAT3N.js";
13
13
  import {
14
14
  exportSubcommand
15
15
  } from "./chunk-WFRHKZFI.js";
16
16
  import "./chunk-LJ5WXXG6.js";
17
- import "./chunk-5UCWXYNH.js";
18
- import "./chunk-J5273CSE.js";
17
+ import "./chunk-XLLAD5DR.js";
18
+ import "./chunk-HIYWSGI7.js";
19
19
  import {
20
20
  outputAgentError
21
21
  } from "./chunk-NHGCQRK5.js";
22
- import "./chunk-CO5D46AG.js";
23
22
  import "./chunk-N2T234LO.js";
23
+ import "./chunk-GGP5R3FU.js";
24
24
  import "./chunk-6IQZVQV6.js";
25
25
  import {
26
26
  getCommandName
@@ -6,12 +6,12 @@ const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __dirname_(__filename);
7
7
  import {
8
8
  emitAlertsScopeError
9
- } from "./chunk-ABOX5TXU.js";
9
+ } from "./chunk-L7U3Z7E4.js";
10
10
  import {
11
11
  handleValidationError,
12
12
  outputError,
13
13
  validateAllProjectMutualExclusivity
14
- } from "./chunk-5SYDEK2N.js";
14
+ } from "./chunk-D7MGZH35.js";
15
15
  import {
16
16
  validateJsonOutput
17
17
  } from "./chunk-XPKWKPWA.js";
@@ -24,18 +24,18 @@ import {
24
24
  } from "./chunk-LJ5WXXG6.js";
25
25
  import {
26
26
  getScope
27
- } from "./chunk-Z7KOKD2G.js";
27
+ } from "./chunk-YQPAAXUU.js";
28
28
  import {
29
29
  getLinkedProject,
30
30
  getProjectByNameOrId
31
- } from "./chunk-5UCWXYNH.js";
32
- import "./chunk-J5273CSE.js";
31
+ } from "./chunk-XLLAD5DR.js";
32
+ import "./chunk-HIYWSGI7.js";
33
33
  import {
34
34
  buildCommandWithGlobalFlags,
35
35
  outputAgentError
36
36
  } from "./chunk-NHGCQRK5.js";
37
- import "./chunk-CO5D46AG.js";
38
37
  import "./chunk-N2T234LO.js";
38
+ import "./chunk-GGP5R3FU.js";
39
39
  import {
40
40
  getFlagsSpecification,
41
41
  parseArguments,