vercel 58.9.5 → 58.11.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 (85) hide show
  1. package/dist/chunks/{add-W4XR5GYX.js → add-I4TVSKCW.js} +2 -2
  2. package/dist/chunks/{add-5KFK4EFH.js → add-IFQ74XHE.js} +6 -6
  3. package/dist/chunks/{add-NMYLVDBN.js → add-LLXXGWJZ.js} +2 -2
  4. package/dist/chunks/{build-BCMSG7TU.js → build-6DPTFQKH.js} +2 -2
  5. package/dist/chunks/{chunk-3MELKK7A.js → chunk-2XR3IS42.js} +80 -38
  6. package/dist/chunks/{chunk-AZCZV4XI.js → chunk-57E3RXRP.js} +1 -1
  7. package/dist/chunks/{chunk-IBIZT5M4.js → chunk-6FUU7WW5.js} +47 -6
  8. package/dist/chunks/{chunk-4GUI4FQR.js → chunk-74IYXJ5O.js} +10 -518
  9. package/dist/chunks/{chunk-MAZ2BUBX.js → chunk-A7HDIKC2.js} +2 -2
  10. package/dist/chunks/chunk-BTKWXOXK.js +61 -0
  11. package/dist/chunks/{chunk-MGCBTAA7.js → chunk-COTEMB2F.js} +1 -1
  12. package/dist/chunks/{chunk-UDHYVIJL.js → chunk-D7MYUPY7.js} +4 -4
  13. package/dist/chunks/{chunk-7RUZPHW7.js → chunk-DJUIGD6C.js} +1 -1
  14. package/dist/chunks/{chunk-N5YCPDWG.js → chunk-EA6MVNDR.js} +1 -1
  15. package/dist/chunks/{chunk-2SEBBSKD.js → chunk-EN2JH6AK.js} +1 -1
  16. package/dist/chunks/{chunk-BZGIBXY6.js → chunk-EPETZ7OW.js} +1 -1
  17. package/dist/chunks/{chunk-6SXIT6Q3.js → chunk-EVB35IJS.js} +2 -2
  18. package/dist/chunks/{chunk-6WWATEWK.js → chunk-FKZAFG4D.js} +1 -1
  19. package/dist/chunks/{chunk-U4LWFSR4.js → chunk-FYXFZ4CY.js} +1 -1
  20. package/dist/chunks/chunk-IM56DJEQ.js +559 -0
  21. package/dist/chunks/{chunk-KUZCVMVA.js → chunk-J2WXMIAP.js} +4 -3
  22. package/dist/chunks/{chunk-ELJ56NBY.js → chunk-JDNWPNLS.js} +173 -173
  23. package/dist/chunks/{chunk-5MERQE7H.js → chunk-LM5S2YN4.js} +1 -1
  24. package/dist/chunks/{chunk-TNKTZDOL.js → chunk-MX5JRP6N.js} +1 -1
  25. package/dist/chunks/{chunk-PTZ6X4P4.js → chunk-OXJFXZV2.js} +1 -1
  26. package/dist/chunks/{chunk-NDOZRKTB.js → chunk-UEBYWLPO.js} +1 -1
  27. package/dist/chunks/{chunk-DQDAQYQI.js → chunk-YJCZFVWJ.js} +1 -1
  28. package/dist/chunks/{chunk-2J7BL7IF.js → chunk-YP35CTKZ.js} +2 -2
  29. package/dist/chunks/{chunk-GBXTATOJ.js → chunk-Z3FO2ZSH.js} +158 -3
  30. package/dist/chunks/{clear-54WX3NA2.js → clear-NA74WCNT.js} +2 -2
  31. package/dist/chunks/{compile-vercel-config-LSW4TWGX.js → compile-vercel-config-BD4UGPKJ.js} +1 -1
  32. package/dist/chunks/{config-WXQTPQW7.js → config-WYUTVPPF.js} +2 -2
  33. package/dist/chunks/{delete-OGP3RVWM.js → delete-NFNYQ7LC.js} +2 -2
  34. package/dist/chunks/{delete-HQMI44SG.js → delete-RZ2SVQK6.js} +2 -2
  35. package/dist/chunks/{disable-HC266OB7.js → disable-DZ7DCWEI.js} +2 -2
  36. package/dist/chunks/{discard-3RFIPLXY.js → discard-VZ5QNL7B.js} +2 -2
  37. package/dist/chunks/{edit-TZOCRGG6.js → edit-ABJN6BMR.js} +2 -2
  38. package/dist/chunks/{edit-NXPQFWM6.js → edit-RIY7SWIR.js} +3 -3
  39. package/dist/chunks/{enable-OGFRN4CG.js → enable-JWPKENHY.js} +2 -2
  40. package/dist/chunks/{export-AEESZFZX.js → export-6IDA3TWA.js} +2 -2
  41. package/dist/chunks/{image-EIAO7LVN.js → image-DM4ZNQOL.js} +3 -3
  42. package/dist/chunks/{import-builders-KCQLA2YR.js → import-builders-6NCPTR6R.js} +2 -2
  43. package/dist/chunks/{inspect-MGIECVLH.js → inspect-6WYHE6JX.js} +2 -2
  44. package/dist/chunks/{inspect-RUGPLO7A.js → inspect-KUAM7UKQ.js} +2 -2
  45. package/dist/chunks/{inspect-EM34BOTE.js → inspect-NLWTMJHW.js} +3 -3
  46. package/dist/chunks/{inspect-TTHC6L7Q.js → inspect-Z6VNNFFK.js} +2 -2
  47. package/dist/chunks/{inspect-HHSDXTII.js → inspect-ZKZG7MCO.js} +2 -2
  48. package/dist/chunks/{list-A74MGEOB.js → list-2PB3N6FM.js} +2 -2
  49. package/dist/chunks/{list-EOG3TYBE.js → list-GPQI2LGO.js} +1 -1
  50. package/dist/chunks/{list-GQDUIRBU.js → list-ZUFB2CIS.js} +3 -3
  51. package/dist/chunks/{login-L4EWZOGH.js → login-GTZWDE5T.js} +2 -2
  52. package/dist/chunks/{ls-VBFBWSWD.js → ls-AG5UBKCR.js} +3 -3
  53. package/dist/chunks/{ls-F6WCPVB7.js → ls-ETUPWWLP.js} +2 -2
  54. package/dist/chunks/{ls-D5ESYWG5.js → ls-HCVYO3FF.js} +2 -2
  55. package/dist/chunks/{ls-OWHNAGNT.js → ls-YMQ6E7MZ.js} +2 -2
  56. package/dist/chunks/{ls-OJGSWVWO.js → ls-Z2XKIHA5.js} +2 -2
  57. package/dist/chunks/{open-FHER5QV2.js → open-4XQWNZQD.js} +2 -2
  58. package/dist/chunks/{permissions-JSXC7BRD.js → permissions-BJBEONBS.js} +4 -4
  59. package/dist/chunks/{publish-CM6ZGWIE.js → publish-TVZGIZRP.js} +2 -2
  60. package/dist/chunks/{push-5NYG7HIR.js → push-EJZHZC4Z.js} +2 -2
  61. package/dist/chunks/{query-5GQLF2BR.js → query-HXMR364K.js} +1 -1
  62. package/dist/chunks/{reorder-5GCNY75W.js → reorder-VE2PRU24.js} +2 -2
  63. package/dist/chunks/{reply-B2XCK5XR.js → reply-4YEXMUWH.js} +2 -2
  64. package/dist/chunks/{resolve-YQP5C2QY.js → resolve-GZ4KXDU6.js} +2 -2
  65. package/dist/chunks/{restore-VHX4JV5J.js → restore-ZY3IJ4S3.js} +2 -2
  66. package/dist/chunks/{rm-QVVQDCDX.js → rm-IE23BM6V.js} +3 -3
  67. package/dist/chunks/{rm-VDFSX3LH.js → rm-QS5PIVAO.js} +2 -2
  68. package/dist/chunks/{rm-OILUGCTW.js → rm-Y6OROWNK.js} +2 -2
  69. package/dist/chunks/{rm-AUUT2YIT.js → rm-YIVI23NT.js} +2 -2
  70. package/dist/chunks/{rule-inspect-LKTUPW4B.js → rule-inspect-6NXF565C.js} +3 -3
  71. package/dist/chunks/{rules-J5JM5VFQ.js → rules-QOZAWHUO.js} +6 -6
  72. package/dist/chunks/{schema-OIKSCLDU.js → schema-YJDZ6EOC.js} +1 -1
  73. package/dist/chunks/{tags-AMTMNRLQ.js → tags-67LC7TV4.js} +2 -2
  74. package/dist/chunks/{update-AFL3GHKB.js → update-YNL7VIL7.js} +6 -6
  75. package/dist/commands/build/index.js +15 -11
  76. package/dist/commands/deploy/index.js +347 -49
  77. package/dist/commands/dev/index.js +39 -13
  78. package/dist/commands/env/index.js +4 -4
  79. package/dist/commands/link/index.js +6 -6
  80. package/dist/commands/list/index.js +2 -2
  81. package/dist/commands-bulk.js +1018 -294
  82. package/dist/index.js +33 -43
  83. package/dist/version.mjs +1 -1
  84. package/package.json +17 -17
  85. package/dist/chunks/chunk-I2XE3GMB.js +0 -21
@@ -37,7 +37,7 @@ import {
37
37
  runInteractiveEditLoop,
38
38
  stripQuotes,
39
39
  validateActionFlags
40
- } from "./chunks/chunk-AZCZV4XI.js";
40
+ } from "./chunks/chunk-57E3RXRP.js";
41
41
  import {
42
42
  getRouteVersions
43
43
  } from "./chunks/chunk-AHU7WNL2.js";
@@ -57,7 +57,7 @@ import {
57
57
  requireProjectContext,
58
58
  validateRequiredArguments,
59
59
  withGlobalFlags as withGlobalFlags2
60
- } from "./chunks/chunk-BZGIBXY6.js";
60
+ } from "./chunks/chunk-EPETZ7OW.js";
61
61
  import {
62
62
  canPrompt
63
63
  } from "./chunks/chunk-2473DUBR.js";
@@ -96,7 +96,6 @@ import {
96
96
  isLinkedToPrBuild,
97
97
  listAvailableVersions,
98
98
  listInstalledVersions,
99
- login,
100
99
  parsePrTarget,
101
100
  require_tar_fs,
102
101
  resolveOpenApiTagForProjectsCli,
@@ -104,12 +103,12 @@ import {
104
103
  setAutoUpdate,
105
104
  setPinnedVersion,
106
105
  tryOpenApiFallback
107
- } from "./chunks/chunk-4GUI4FQR.js";
106
+ } from "./chunks/chunk-74IYXJ5O.js";
108
107
  import "./chunks/chunk-FGDKMNEN.js";
109
108
  import {
110
109
  getUpdateCommand,
111
110
  isGlobal
112
- } from "./chunks/chunk-NDOZRKTB.js";
111
+ } from "./chunks/chunk-UEBYWLPO.js";
113
112
  import {
114
113
  Now,
115
114
  addDomain,
@@ -130,17 +129,19 @@ import {
130
129
  require_cjs,
131
130
  require_jsonlines,
132
131
  setupDomain
133
- } from "./chunks/chunk-3MELKK7A.js";
132
+ } from "./chunks/chunk-2XR3IS42.js";
134
133
  import {
135
134
  require_format
136
135
  } from "./chunks/chunk-PRWJUY5U.js";
137
- import "./chunks/chunk-I2XE3GMB.js";
136
+ import {
137
+ login
138
+ } from "./chunks/chunk-IM56DJEQ.js";
138
139
  import {
139
140
  persistAuthConfig,
140
141
  readLocalConfig,
141
142
  sleep,
142
143
  writeToConfigFile
143
- } from "./chunks/chunk-MAZ2BUBX.js";
144
+ } from "./chunks/chunk-A7HDIKC2.js";
144
145
  import {
145
146
  getGlobalPathConfig
146
147
  } from "./chunks/chunk-JKQWQA2T.js";
@@ -158,7 +159,9 @@ import {
158
159
  import {
159
160
  formatTable
160
161
  } from "./chunks/chunk-JLWQWYKO.js";
161
- import "./chunks/chunk-RQ7H43CJ.js";
162
+ import {
163
+ truncateEnd
164
+ } from "./chunks/chunk-RQ7H43CJ.js";
162
165
  import "./chunks/chunk-XBN2O34P.js";
163
166
  import {
164
167
  getPaginationOpts,
@@ -170,7 +173,7 @@ import {
170
173
  import {
171
174
  formatEnvironment,
172
175
  validateLsArgs
173
- } from "./chunks/chunk-TNKTZDOL.js";
176
+ } from "./chunks/chunk-MX5JRP6N.js";
174
177
  import {
175
178
  validateJsonOutput
176
179
  } from "./chunks/chunk-KXDWXXJH.js";
@@ -233,6 +236,7 @@ import {
233
236
  categoriesSubcommand,
234
237
  certsCommand,
235
238
  checkSubcommand,
239
+ checkSubcommand2,
236
240
  checksAddFlags,
237
241
  checksRemoveFlags,
238
242
  checksSubcommand,
@@ -376,6 +380,7 @@ import {
376
380
  publishSubcommand,
377
381
  pullSubcommand,
378
382
  purgeSubcommand,
383
+ putImageSubcommand,
379
384
  putSubcommand,
380
385
  redeployCommand,
381
386
  redirectsCommand,
@@ -430,6 +435,7 @@ import {
430
435
  sdkKeysRemoveSubcommand,
431
436
  sdkKeysSubcommand,
432
437
  searchSubcommand,
438
+ securityCommand,
433
439
  segmentsCreateSubcommand,
434
440
  segmentsInspectSubcommand,
435
441
  segmentsListSubcommand,
@@ -486,7 +492,7 @@ import {
486
492
  webAnalyticsSubcommand,
487
493
  webhooksCommand,
488
494
  whoamiCommand
489
- } from "./chunks/chunk-GBXTATOJ.js";
495
+ } from "./chunks/chunk-Z3FO2ZSH.js";
490
496
  import {
491
497
  addSubcommand as addSubcommand12,
492
498
  buildSubcommand,
@@ -572,11 +578,11 @@ import {
572
578
  dump,
573
579
  load,
574
580
  main
575
- } from "./chunks/chunk-UDHYVIJL.js";
581
+ } from "./chunks/chunk-D7MYUPY7.js";
576
582
  import {
577
583
  require_semver
578
584
  } from "./chunks/chunk-IB5L4LKZ.js";
579
- import "./chunks/chunk-5MERQE7H.js";
585
+ import "./chunks/chunk-LM5S2YN4.js";
580
586
  import {
581
587
  require_execa
582
588
  } from "./chunks/chunk-R6IGDGX3.js";
@@ -591,10 +597,10 @@ import {
591
597
  } from "./chunks/chunk-VXYGCOKL.js";
592
598
  import {
593
599
  ensureLink
594
- } from "./chunks/chunk-KUZCVMVA.js";
595
- import "./chunks/chunk-6SXIT6Q3.js";
596
- import "./chunks/chunk-MGCBTAA7.js";
597
- import "./chunks/chunk-2SEBBSKD.js";
600
+ } from "./chunks/chunk-J2WXMIAP.js";
601
+ import "./chunks/chunk-EVB35IJS.js";
602
+ import "./chunks/chunk-COTEMB2F.js";
603
+ import "./chunks/chunk-EN2JH6AK.js";
598
604
  import {
599
605
  help
600
606
  } from "./chunks/chunk-ZX2FSPWV.js";
@@ -653,7 +659,7 @@ import {
653
659
  selectOrg,
654
660
  toHost,
655
661
  ua_default
656
- } from "./chunks/chunk-IBIZT5M4.js";
662
+ } from "./chunks/chunk-6FUU7WW5.js";
657
663
  import {
658
664
  TelemetryClient
659
665
  } from "./chunks/chunk-ECCWJHC6.js";
@@ -2155,7 +2161,7 @@ async function activity(client) {
2155
2161
  return 0;
2156
2162
  }
2157
2163
  telemetry2.trackCliSubcommandLs(subcommandOriginal);
2158
- const listFn = (await import("./chunks/list-EOG3TYBE.js")).default;
2164
+ const listFn = (await import("./chunks/list-GPQI2LGO.js")).default;
2159
2165
  return listFn(client, telemetry2);
2160
2166
  }
2161
2167
  }
@@ -4844,6 +4850,7 @@ async function writeConfigFile(path3, content, mode) {
4844
4850
 
4845
4851
  // src/util/ai-gateway/coding-agents/gateway.ts
4846
4852
  var GATEWAY_CODING_AGENT_BASE_URL = "https://ai-gateway.vercel.sh/coding-agent/v1";
4853
+ var GATEWAY_CURSOR_BASE_URL = "https://ai-gateway.vercel.sh/cursor/v1";
4847
4854
  var GATEWAY_CODEX_BASE_URL = "https://ai-gateway.vercel.sh/codex/v1";
4848
4855
  var GATEWAY_CLAUDE_CODE_BASE_URL = "https://ai-gateway.vercel.sh/claude-code";
4849
4856
  var GATEWAY_API_KEY_ENV = "AI_GATEWAY_API_KEY";
@@ -5081,7 +5088,6 @@ import { join as join4 } from "path";
5081
5088
  var cline = {
5082
5089
  id: "cline",
5083
5090
  displayName: "Cline",
5084
- experimental: true,
5085
5091
  async detect(home) {
5086
5092
  return pathExists(join4(home, ".cline"));
5087
5093
  },
@@ -5410,7 +5416,6 @@ import { join as join7 } from "path";
5410
5416
  var cursor = {
5411
5417
  id: "cursor",
5412
5418
  displayName: "Cursor",
5413
- experimental: true,
5414
5419
  async detect(home) {
5415
5420
  return pathExists(join7(home, ".cursor"));
5416
5421
  },
@@ -5424,7 +5429,7 @@ var cursor = {
5424
5429
  notes: [
5425
5430
  "Cursor keeps its API-key settings in the app itself, so finish the setup there:",
5426
5431
  "1. Open Cursor \u2192 Settings (Cmd+Shift+J) \u2192 Models.",
5427
- `2. Under OpenAI API Key: paste your gateway key, then enable "Override OpenAI Base URL" and set it to ${ctx.baseUrlOverride ?? GATEWAY_CODING_AGENT_BASE_URL}`,
5432
+ `2. Under OpenAI API Key: paste your gateway key, then enable "Override OpenAI Base URL" and set it to ${ctx.baseUrlOverride ?? GATEWAY_CURSOR_BASE_URL}`,
5428
5433
  '3. Copy the key from a new terminal without echoing it: printf %s "$AI_GATEWAY_API_KEY" | pbcopy',
5429
5434
  '4. Use "Add model" to add gateway model ids you want in the picker (e.g. anthropic/claude-fable-5, openai/gpt-5.6-sol).',
5430
5435
  "While the override is on, Cursor's built-in non-OpenAI models stop working \u2014 use gateway model ids for everything, or toggle the override off to go back.",
@@ -5444,7 +5449,6 @@ function asObject(value) {
5444
5449
  var hermes = {
5445
5450
  id: "hermes",
5446
5451
  displayName: "Hermes",
5447
- experimental: true,
5448
5452
  async detect(home) {
5449
5453
  return pathExists(join8(home, ".hermes"));
5450
5454
  },
@@ -5499,7 +5503,6 @@ function kiloConfigDir(home) {
5499
5503
  var kilo = {
5500
5504
  id: "kilo",
5501
5505
  displayName: "Kilo Code",
5502
- experimental: true,
5503
5506
  async detect(home) {
5504
5507
  return pathExists(kiloConfigDir(home));
5505
5508
  },
@@ -5549,7 +5552,6 @@ var STARTER_MODELS = [
5549
5552
  var openclaw = {
5550
5553
  id: "openclaw",
5551
5554
  displayName: "OpenClaw",
5552
- experimental: true,
5553
5555
  async detect(home) {
5554
5556
  return pathExists(join10(home, ".openclaw"));
5555
5557
  },
@@ -5755,6 +5757,8 @@ ${import_chalk17.default.dim(
5755
5757
  " Detected agents are pre-selected \xB7"
5756
5758
  )}${CHECKBOX_INSTRUCTIONS}`,
5757
5759
  instructions: false,
5760
+ loop: false,
5761
+ pageSize: Math.max(choices.length, 7),
5758
5762
  choices
5759
5763
  });
5760
5764
  const selected = picked.map((id) => getAgentById(id)).filter((a) => Boolean(a));
@@ -9001,17 +9005,17 @@ ${extra}` : helpOutput);
9001
9005
  switch (subcommand) {
9002
9006
  case "inspect": {
9003
9007
  telemetry2.trackCliSubcommandInspect(subcommandOriginal);
9004
- const inspectFn = (await import("./chunks/inspect-HHSDXTII.js")).default;
9008
+ const inspectFn = (await import("./chunks/inspect-ZKZG7MCO.js")).default;
9005
9009
  return inspectFn(client, rawSubcommandArgs);
9006
9010
  }
9007
9011
  case "rules": {
9008
9012
  telemetry2.trackCliSubcommandRules(args[0] ?? "ls");
9009
- const rulesFn = (await import("./chunks/rules-J5JM5VFQ.js")).default;
9013
+ const rulesFn = (await import("./chunks/rules-QOZAWHUO.js")).default;
9010
9014
  return rulesFn(client, rawSubcommandArgs);
9011
9015
  }
9012
9016
  default: {
9013
9017
  telemetry2.trackCliSubcommandLs(subcommandOriginal);
9014
- const listFn = (await import("./chunks/list-A74MGEOB.js")).default;
9018
+ const listFn = (await import("./chunks/list-2PB3N6FM.js")).default;
9015
9019
  return listFn(client, telemetry2);
9016
9020
  }
9017
9021
  }
@@ -9995,8 +9999,8 @@ var BisectTelemetryClient = class extends TelemetryClient {
9995
9999
  });
9996
10000
  }
9997
10001
  }
9998
- trackCliFlagOpen(open16) {
9999
- if (open16) {
10002
+ trackCliFlagOpen(open17) {
10003
+ if (open17) {
10000
10004
  this.trackCliFlag("open");
10001
10005
  }
10002
10006
  }
@@ -10492,10 +10496,10 @@ async function list9(client, argv, auth) {
10492
10496
  const tablePrint = table(
10493
10497
  [
10494
10498
  headers.map((header) => import_chalk34.default.dim(header)),
10495
- ...list22.blobs.map((blob9) => {
10496
- urls.push(blob9.url);
10497
- const uploadedAt = (0, import_ms5.default)(Date.now() - new Date(blob9.uploadedAt).getTime());
10498
- return [uploadedAt, String(blob9.size), blob9.pathname, blob9.url];
10499
+ ...list22.blobs.map((blob10) => {
10500
+ urls.push(blob10.url);
10501
+ const uploadedAt = (0, import_ms5.default)(Date.now() - new Date(blob10.uploadedAt).getTime());
10502
+ return [uploadedAt, String(blob10.size), blob10.pathname, blob10.url];
10499
10503
  })
10500
10504
  ],
10501
10505
  { hsep: 5 }
@@ -10715,6 +10719,12 @@ var BlobTelemetryClient = class extends TelemetryClient {
10715
10719
  value: actual
10716
10720
  });
10717
10721
  }
10722
+ trackCliSubcommandPutImage(actual) {
10723
+ this.trackCliSubcommand({
10724
+ subcommand: "put-image",
10725
+ value: actual
10726
+ });
10727
+ }
10718
10728
  trackCliSubcommandSignedToken(actual) {
10719
10729
  this.trackCliSubcommand({
10720
10730
  subcommand: "signed-token",
@@ -11005,8 +11015,231 @@ async function put2(client, argv, auth) {
11005
11015
  return 0;
11006
11016
  }
11007
11017
 
11008
- // src/commands/blob/get.ts
11018
+ // src/commands/blob/put-image.ts
11009
11019
  import * as blob3 from "@vercel/blob";
11020
+ var import_error_utils2 = __toESM(require_dist(), 1);
11021
+ import { statSync as statSync2 } from "fs";
11022
+ import { open as open4 } from "fs/promises";
11023
+
11024
+ // src/util/telemetry/commands/blob/put-image.ts
11025
+ var BlobPutImageTelemetryClient = class extends TelemetryClient {
11026
+ trackCliArgumentPathToFileOrUrl(pathToFileOrUrl) {
11027
+ if (pathToFileOrUrl) {
11028
+ this.trackCliArgument({
11029
+ arg: "pathToFileOrUrl",
11030
+ value: this.redactedValue
11031
+ });
11032
+ }
11033
+ }
11034
+ trackCliOptionAccess(value) {
11035
+ if (value) {
11036
+ this.trackCliOption({
11037
+ option: "access",
11038
+ value
11039
+ });
11040
+ }
11041
+ }
11042
+ trackCliOptionWidth(width) {
11043
+ if (width !== void 0) {
11044
+ this.trackCliOption({
11045
+ option: "width",
11046
+ value: String(width)
11047
+ });
11048
+ }
11049
+ }
11050
+ trackCliOptionQuality(quality) {
11051
+ if (quality !== void 0) {
11052
+ this.trackCliOption({
11053
+ option: "quality",
11054
+ value: String(quality)
11055
+ });
11056
+ }
11057
+ }
11058
+ trackCliOptionFormat(format3) {
11059
+ if (format3) {
11060
+ this.trackCliOption({
11061
+ option: "format",
11062
+ value: format3
11063
+ });
11064
+ }
11065
+ }
11066
+ trackCliOptionPathname(pathname) {
11067
+ if (pathname) {
11068
+ this.trackCliOption({
11069
+ option: "pathname",
11070
+ value: this.redactedValue
11071
+ });
11072
+ }
11073
+ }
11074
+ trackCliFlagAddRandomSuffix(addRandomSuffix) {
11075
+ if (addRandomSuffix) {
11076
+ this.trackCliFlag("add-random-suffix");
11077
+ }
11078
+ }
11079
+ trackCliFlagAllowOverwrite(allowOverwrite) {
11080
+ if (allowOverwrite) {
11081
+ this.trackCliFlag("allow-overwrite");
11082
+ }
11083
+ }
11084
+ trackCliOptionCacheControlMaxAge(cacheControlMaxAge) {
11085
+ if (cacheControlMaxAge) {
11086
+ this.trackCliOption({
11087
+ option: "cache-control-max-age",
11088
+ value: String(cacheControlMaxAge)
11089
+ });
11090
+ }
11091
+ }
11092
+ trackCliFlagJson(json) {
11093
+ if (json) {
11094
+ this.trackCliFlag("json");
11095
+ }
11096
+ }
11097
+ };
11098
+
11099
+ // src/commands/blob/put-image.ts
11100
+ async function putImage2(client, argv, auth) {
11101
+ const telemetryClient = new BlobPutImageTelemetryClient({
11102
+ opts: {
11103
+ store: client.telemetryEventStore
11104
+ }
11105
+ });
11106
+ const flagsSpecification = getFlagsSpecification(putImageSubcommand.options);
11107
+ let parsedArgs;
11108
+ try {
11109
+ parsedArgs = parseArguments(argv, flagsSpecification);
11110
+ } catch (err) {
11111
+ printError(err);
11112
+ return 1;
11113
+ }
11114
+ const {
11115
+ flags,
11116
+ args: [source]
11117
+ } = parsedArgs;
11118
+ const {
11119
+ "--access": accessFlag,
11120
+ "--width": width,
11121
+ "--quality": quality,
11122
+ "--format": formatFlag,
11123
+ "--pathname": pathnameFlag,
11124
+ "--add-random-suffix": addRandomSuffix,
11125
+ "--allow-overwrite": allowOverwrite,
11126
+ "--cache-control-max-age": cacheControlMaxAge,
11127
+ "--json": asJson
11128
+ } = flags;
11129
+ if (!source) {
11130
+ output_manager_default.error(
11131
+ `Missing required argument. Usage: ${getCommandName(
11132
+ "blob put-image <file-or-url> --pathname <pathname> --width <pixels> --access <public|private>"
11133
+ )}`
11134
+ );
11135
+ return 1;
11136
+ }
11137
+ const isUrl = /^https?:\/\//i.test(source);
11138
+ const access4 = parseAccessFlag(accessFlag);
11139
+ if (!access4) {
11140
+ return 1;
11141
+ }
11142
+ const optimizeImage = {
11143
+ width,
11144
+ quality,
11145
+ format: formatFlag
11146
+ };
11147
+ const format3 = optimizeImage.format;
11148
+ if (!pathnameFlag) {
11149
+ output_manager_default.error(
11150
+ "Missing required --pathname flag. Set the pathname to store the optimized image at in the Blob store."
11151
+ );
11152
+ return 1;
11153
+ }
11154
+ const pathname = pathnameFlag;
11155
+ telemetryClient.trackCliArgumentPathToFileOrUrl(source);
11156
+ telemetryClient.trackCliOptionAccess(accessFlag);
11157
+ telemetryClient.trackCliOptionWidth(width);
11158
+ telemetryClient.trackCliOptionQuality(quality);
11159
+ telemetryClient.trackCliOptionFormat(formatFlag);
11160
+ telemetryClient.trackCliOptionPathname(pathnameFlag);
11161
+ telemetryClient.trackCliFlagAddRandomSuffix(addRandomSuffix);
11162
+ telemetryClient.trackCliFlagAllowOverwrite(allowOverwrite);
11163
+ telemetryClient.trackCliOptionCacheControlMaxAge(cacheControlMaxAge);
11164
+ telemetryClient.trackCliFlagJson(asJson);
11165
+ if (!auth.success || auth.kind !== "oidc") {
11166
+ output_manager_default.error(
11167
+ `Image optimization requires OIDC credentials. Pass --oidc-token and --store-id, or set the VERCEL_OIDC_TOKEN and BLOB_STORE_ID environment variables (available in .env.local after ${getCommandName("env pull")}).`
11168
+ );
11169
+ return 1;
11170
+ }
11171
+ const commonOptions = {
11172
+ ...blobOpts(auth),
11173
+ access: access4,
11174
+ optimizeImage,
11175
+ addRandomSuffix: addRandomSuffix ?? false,
11176
+ allowOverwrite: allowOverwrite ?? false,
11177
+ cacheControlMaxAge
11178
+ };
11179
+ let result;
11180
+ try {
11181
+ output_manager_default.debug("Optimizing and uploading image");
11182
+ output_manager_default.spinner("Optimizing and uploading image");
11183
+ if (isUrl) {
11184
+ result = await blob3.putImage(pathname, new URL(source), commonOptions);
11185
+ } else {
11186
+ let putBody;
11187
+ try {
11188
+ const stats = statSync2(source);
11189
+ if (!stats.isFile()) {
11190
+ output_manager_default.stopSpinner();
11191
+ output_manager_default.error("Path to optimize is not a file");
11192
+ return 1;
11193
+ }
11194
+ const file = await open4(source, "r");
11195
+ putBody = file.createReadStream();
11196
+ } catch (err) {
11197
+ output_manager_default.stopSpinner();
11198
+ output_manager_default.debug(`Error reading file: ${err}`);
11199
+ if ((0, import_error_utils2.isErrnoException)(err)) {
11200
+ output_manager_default.error(`File doesn't exist at '${source}'`);
11201
+ return 1;
11202
+ }
11203
+ output_manager_default.error("Error while reading file");
11204
+ return 1;
11205
+ }
11206
+ result = await blob3.putImage(pathname, putBody, commonOptions);
11207
+ }
11208
+ } catch (err) {
11209
+ output_manager_default.stopSpinner();
11210
+ printError(err);
11211
+ return 1;
11212
+ }
11213
+ output_manager_default.stopSpinner();
11214
+ const storedMimeType = result.contentType.split(";")[0].trim().toLowerCase();
11215
+ if (format3 && storedMimeType !== `image/${format3}`) {
11216
+ output_manager_default.warn(
11217
+ `The image was not converted to ${format3}: it was stored unchanged as ${storedMimeType}. This usually means the optimized output would have been larger than the source image. Try a lower --quality.`
11218
+ );
11219
+ }
11220
+ if (asJson) {
11221
+ client.stdout.write(
11222
+ `${JSON.stringify(
11223
+ {
11224
+ url: result.url,
11225
+ downloadUrl: result.downloadUrl,
11226
+ pathname: result.pathname,
11227
+ contentType: result.contentType
11228
+ },
11229
+ null,
11230
+ 2
11231
+ )}
11232
+ `
11233
+ );
11234
+ } else {
11235
+ client.stdout.write(`${result.url}
11236
+ `);
11237
+ }
11238
+ return 0;
11239
+ }
11240
+
11241
+ // src/commands/blob/get.ts
11242
+ import * as blob4 from "@vercel/blob";
11010
11243
 
11011
11244
  // src/util/telemetry/commands/blob/get.ts
11012
11245
  var BlobGetTelemetryClient = class extends TelemetryClient {
@@ -11090,7 +11323,7 @@ async function get2(client, argv, auth) {
11090
11323
  if (outputPath) {
11091
11324
  output_manager_default.spinner("Downloading blob");
11092
11325
  }
11093
- const result = await blob3.get(urlOrPathname, {
11326
+ const result = await blob4.get(urlOrPathname, {
11094
11327
  ...blobOpts(auth),
11095
11328
  access: access4,
11096
11329
  ifNoneMatch
@@ -11123,7 +11356,7 @@ async function get2(client, argv, auth) {
11123
11356
  }
11124
11357
 
11125
11358
  // src/commands/blob/del.ts
11126
- import * as blob4 from "@vercel/blob";
11359
+ import * as blob5 from "@vercel/blob";
11127
11360
 
11128
11361
  // src/util/telemetry/commands/blob/del.ts
11129
11362
  var BlobDelTelemetryClient = class extends TelemetryClient {
@@ -11173,7 +11406,7 @@ async function del2(client, argv, auth) {
11173
11406
  try {
11174
11407
  output_manager_default.debug("Deleting blob");
11175
11408
  output_manager_default.spinner("Deleting blob");
11176
- await blob4.del(args, { ...blobOpts(auth), ifMatch });
11409
+ await blob5.del(args, { ...blobOpts(auth), ifMatch });
11177
11410
  } catch (err) {
11178
11411
  output_manager_default.error(`Error deleting blob: ${err}`);
11179
11412
  return 1;
@@ -11184,7 +11417,7 @@ async function del2(client, argv, auth) {
11184
11417
  }
11185
11418
 
11186
11419
  // src/commands/blob/copy.ts
11187
- import * as blob5 from "@vercel/blob";
11420
+ import * as blob6 from "@vercel/blob";
11188
11421
 
11189
11422
  // src/util/telemetry/commands/blob/copy.ts
11190
11423
  var BlobCopyTelemetryClient = class extends TelemetryClient {
@@ -11290,7 +11523,7 @@ async function copy2(client, argv, auth) {
11290
11523
  try {
11291
11524
  output_manager_default.debug("Copying blob");
11292
11525
  output_manager_default.spinner("Copying blob");
11293
- result = await blob5.copy(fromUrl, toPathname, {
11526
+ result = await blob6.copy(fromUrl, toPathname, {
11294
11527
  ...blobOpts(auth),
11295
11528
  access: access4,
11296
11529
  addRandomSuffix: addRandomSuffix ?? false,
@@ -12199,7 +12432,7 @@ function formatCount2(count2) {
12199
12432
  }
12200
12433
 
12201
12434
  // src/commands/blob/store-empty.ts
12202
- import * as blob6 from "@vercel/blob";
12435
+ import * as blob7 from "@vercel/blob";
12203
12436
 
12204
12437
  // src/util/telemetry/commands/blob/store-empty.ts
12205
12438
  var BlobEmptyStoreTelemetryClient = class extends TelemetryClient {
@@ -12252,7 +12485,7 @@ async function emptyStore(client, argv, auth) {
12252
12485
  method: "GET",
12253
12486
  accountId
12254
12487
  }),
12255
- blob6.list({ ...blobOpts(auth), limit: 1 })
12488
+ blob7.list({ ...blobOpts(auth), limit: 1 })
12256
12489
  ]
12257
12490
  );
12258
12491
  const { name } = storeResponse.store;
@@ -12292,7 +12525,7 @@ async function emptyStore(client, argv, auth) {
12292
12525
  let hasMore = true;
12293
12526
  while (hasMore) {
12294
12527
  output_manager_default.spinner(`Deleting blobs... (${totalDeleted} deleted)`);
12295
- const listResult = await blob6.list({
12528
+ const listResult = await blob7.list({
12296
12529
  ...blobOpts(auth),
12297
12530
  limit: 1e3
12298
12531
  });
@@ -12301,7 +12534,7 @@ async function emptyStore(client, argv, auth) {
12301
12534
  break;
12302
12535
  }
12303
12536
  const urls = listResult.blobs.map((b) => b.url);
12304
- await blob6.del(urls, { ...blobOpts(auth) });
12537
+ await blob7.del(urls, { ...blobOpts(auth) });
12305
12538
  totalDeleted += urls.length;
12306
12539
  }
12307
12540
  output_manager_default.stopSpinner();
@@ -12314,7 +12547,7 @@ async function emptyStore(client, argv, auth) {
12314
12547
  }
12315
12548
 
12316
12549
  // src/commands/blob/presign.ts
12317
- import * as blob7 from "@vercel/blob";
12550
+ import * as blob8 from "@vercel/blob";
12318
12551
 
12319
12552
  // src/util/blob/validity.ts
12320
12553
  var import_ms7 = __toESM(require_ms(), 1);
@@ -12501,7 +12734,7 @@ async function presign(client, argv, auth) {
12501
12734
  const signedToken2 = delegationTokenFlag && clientSigningTokenFlag ? {
12502
12735
  delegationToken: delegationTokenFlag,
12503
12736
  clientSigningToken: clientSigningTokenFlag
12504
- } : await blob7.issueSignedToken({
12737
+ } : await blob8.issueSignedToken({
12505
12738
  ...blobOpts(auth),
12506
12739
  pathname,
12507
12740
  operations: [operation],
@@ -12511,7 +12744,7 @@ async function presign(client, argv, auth) {
12511
12744
  maximumSizeInBytes
12512
12745
  } : {}
12513
12746
  });
12514
- const presigned = await blob7.presignUrl(
12747
+ const presigned = await blob8.presignUrl(
12515
12748
  {
12516
12749
  delegationToken: signedToken2.delegationToken,
12517
12750
  clientSigningToken: signedToken2.clientSigningToken
@@ -12548,7 +12781,7 @@ async function presign(client, argv, auth) {
12548
12781
  }
12549
12782
 
12550
12783
  // src/commands/blob/signed-token.ts
12551
- import * as blob8 from "@vercel/blob";
12784
+ import * as blob9 from "@vercel/blob";
12552
12785
  function formatSignedToken(result) {
12553
12786
  return `delegationToken=${result.delegationToken}
12554
12787
  clientSigningToken=${result.clientSigningToken}
@@ -12604,7 +12837,7 @@ async function signedToken(client, argv, auth) {
12604
12837
  try {
12605
12838
  output_manager_default.debug("Issuing signed token");
12606
12839
  output_manager_default.spinner("Issuing signed token");
12607
- const result = await blob8.issueSignedToken({
12840
+ const result = await blob9.issueSignedToken({
12608
12841
  ...blobOpts(auth),
12609
12842
  pathname,
12610
12843
  operations,
@@ -12630,6 +12863,7 @@ async function signedToken(client, argv, auth) {
12630
12863
  var COMMAND_CONFIG13 = {
12631
12864
  list: getCommandAliases(listSubcommand23),
12632
12865
  put: getCommandAliases(putSubcommand),
12866
+ "put-image": getCommandAliases(putImageSubcommand),
12633
12867
  get: getCommandAliases(getSubcommand3),
12634
12868
  del: getCommandAliases(delSubcommand),
12635
12869
  copy: getCommandAliases(copySubcommand),
@@ -12702,6 +12936,18 @@ async function main3(client) {
12702
12936
  return 1;
12703
12937
  }
12704
12938
  return put2(client, args, token2);
12939
+ case "put-image":
12940
+ if (needHelp) {
12941
+ telemetry2.trackCliFlagHelp("blob", subcommandOriginal);
12942
+ printHelp(putImageSubcommand);
12943
+ return 2;
12944
+ }
12945
+ telemetry2.trackCliSubcommandPutImage(subcommandOriginal);
12946
+ if (!token2.success) {
12947
+ printError(token2.error);
12948
+ return 1;
12949
+ }
12950
+ return putImage2(client, args, token2);
12705
12951
  case "get":
12706
12952
  if (needHelp) {
12707
12953
  telemetry2.trackCliFlagHelp("blob", subcommandOriginal);
@@ -12826,7 +13072,7 @@ async function createPurchase(client, item) {
12826
13072
 
12827
13073
  // src/util/buy/handle-purchase-error.ts
12828
13074
  var import_open2 = __toESM(require_open(), 1);
12829
- var import_error_utils2 = __toESM(require_dist(), 1);
13075
+ var import_error_utils3 = __toESM(require_dist(), 1);
12830
13076
 
12831
13077
  // src/util/billing-url.ts
12832
13078
  var getTeamBillingUrl = (teamSlug) => `https://vercel.com/${teamSlug}/~/settings/billing`;
@@ -12916,7 +13162,7 @@ function handlePurchaseError(err, teamSlug, opts) {
12916
13162
  output_manager_default.error(
12917
13163
  "An unexpected error occurred while completing your purchase. Please try again later."
12918
13164
  );
12919
- output_manager_default.debug(`Server response: ${(0, import_error_utils2.errorToString)(err)}`);
13165
+ output_manager_default.debug(`Server response: ${(0, import_error_utils3.errorToString)(err)}`);
12920
13166
  return 1;
12921
13167
  }
12922
13168
 
@@ -13047,7 +13293,7 @@ var import_chalk42 = __toESM(require_source(), 1);
13047
13293
  var import_chalk41 = __toESM(require_source(), 1);
13048
13294
 
13049
13295
  // src/util/buy/handle-custom-environment-purchase-error.ts
13050
- var import_error_utils3 = __toESM(require_dist(), 1);
13296
+ var import_error_utils4 = __toESM(require_dist(), 1);
13051
13297
  function handleCustomEnvironmentPurchaseError(err) {
13052
13298
  if (isAPIError(err)) {
13053
13299
  if (err.code === "upgrade_required") {
@@ -13085,7 +13331,7 @@ function handleCustomEnvironmentPurchaseError(err) {
13085
13331
  output_manager_default.error(
13086
13332
  "An error occurred while updating custom environment capacity. Please try again later."
13087
13333
  );
13088
- output_manager_default.debug(`Server response: ${(0, import_error_utils3.errorToString)(err)}`);
13334
+ output_manager_default.debug(`Server response: ${(0, import_error_utils4.errorToString)(err)}`);
13089
13335
  return 1;
13090
13336
  }
13091
13337
 
@@ -13404,7 +13650,7 @@ async function pro(client, argv) {
13404
13650
  // src/commands/domains/buy.ts
13405
13651
  var import_chalk44 = __toESM(require_source(), 1);
13406
13652
  var import_tldts3 = __toESM(require_cjs(), 1);
13407
- var import_error_utils4 = __toESM(require_dist(), 1);
13653
+ var import_error_utils5 = __toESM(require_dist(), 1);
13408
13654
 
13409
13655
  // src/util/telemetry/commands/domains/buy.ts
13410
13656
  var DomainsBuyTelemetryClient = class extends TelemetryClient {
@@ -13586,7 +13832,7 @@ async function buy(client, argv) {
13586
13832
  output_manager_default.error(
13587
13833
  "An unexpected error occurred while purchasing your domain. Please try again later."
13588
13834
  );
13589
- output_manager_default.debug(`Server response: ${(0, import_error_utils4.errorToString)(err)}`);
13835
+ output_manager_default.debug(`Server response: ${(0, import_error_utils5.errorToString)(err)}`);
13590
13836
  return 1;
13591
13837
  }
13592
13838
  output_manager_default.stopSpinner();
@@ -14377,43 +14623,43 @@ async function comments(client) {
14377
14623
  if (handleHelp(inspectSubcommand4))
14378
14624
  return 0;
14379
14625
  telemetry2.trackCliSubcommandInspect(subcommandOriginal);
14380
- return (await import("./chunks/inspect-EM34BOTE.js")).default(client, telemetry2);
14626
+ return (await import("./chunks/inspect-NLWTMJHW.js")).default(client, telemetry2);
14381
14627
  }
14382
14628
  case "open": {
14383
14629
  if (handleHelp(openSubcommand))
14384
14630
  return 0;
14385
14631
  telemetry2.trackCliSubcommandOpen(subcommandOriginal);
14386
- return (await import("./chunks/open-FHER5QV2.js")).default(client, telemetry2);
14632
+ return (await import("./chunks/open-4XQWNZQD.js")).default(client, telemetry2);
14387
14633
  }
14388
14634
  case "reply": {
14389
14635
  if (handleHelp(replySubcommand))
14390
14636
  return 0;
14391
14637
  telemetry2.trackCliSubcommandReply(subcommandOriginal);
14392
- return (await import("./chunks/reply-B2XCK5XR.js")).default(client, telemetry2);
14638
+ return (await import("./chunks/reply-4YEXMUWH.js")).default(client, telemetry2);
14393
14639
  }
14394
14640
  case "resolve": {
14395
14641
  if (handleHelp(resolveSubcommand))
14396
14642
  return 0;
14397
14643
  telemetry2.trackCliSubcommandResolve(subcommandOriginal);
14398
- return (await import("./chunks/resolve-YQP5C2QY.js")).default(client, telemetry2, true);
14644
+ return (await import("./chunks/resolve-GZ4KXDU6.js")).default(client, telemetry2, true);
14399
14645
  }
14400
14646
  case "reopen": {
14401
14647
  if (handleHelp(reopenSubcommand))
14402
14648
  return 0;
14403
14649
  telemetry2.trackCliSubcommandReopen(subcommandOriginal);
14404
- return (await import("./chunks/resolve-YQP5C2QY.js")).default(client, telemetry2, false);
14650
+ return (await import("./chunks/resolve-GZ4KXDU6.js")).default(client, telemetry2, false);
14405
14651
  }
14406
14652
  case "edit": {
14407
14653
  if (handleHelp(editSubcommand))
14408
14654
  return 0;
14409
14655
  telemetry2.trackCliSubcommandEdit(subcommandOriginal);
14410
- return (await import("./chunks/edit-TZOCRGG6.js")).default(client, telemetry2);
14656
+ return (await import("./chunks/edit-ABJN6BMR.js")).default(client, telemetry2);
14411
14657
  }
14412
14658
  case "delete": {
14413
14659
  if (handleHelp(deleteSubcommand))
14414
14660
  return 0;
14415
14661
  telemetry2.trackCliSubcommandDelete(subcommandOriginal);
14416
- return (await import("./chunks/delete-OGP3RVWM.js")).default(client, telemetry2);
14662
+ return (await import("./chunks/delete-NFNYQ7LC.js")).default(client, telemetry2);
14417
14663
  }
14418
14664
  default: {
14419
14665
  if (needHelp) {
@@ -14429,7 +14675,7 @@ async function comments(client) {
14429
14675
  }
14430
14676
  telemetry2.trackCliSubcommandList(subcommandOriginal);
14431
14677
  const defaultInvocation = subcommandOriginal === "default";
14432
- return (await import("./chunks/list-GQDUIRBU.js")).default(
14678
+ return (await import("./chunks/list-ZUFB2CIS.js")).default(
14433
14679
  client,
14434
14680
  telemetry2,
14435
14681
  defaultInvocation
@@ -14438,6 +14684,26 @@ async function comments(client) {
14438
14684
  }
14439
14685
  }
14440
14686
 
14687
+ // src/util/connex/service-telemetry-value.ts
14688
+ function serviceTelemetryValue(value) {
14689
+ const trimmed = value.trim();
14690
+ if (!trimmed) {
14691
+ return null;
14692
+ }
14693
+ const withoutScheme = trimmed.replace(/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//, "");
14694
+ const authority = withoutScheme.split(/[/?#]/, 1)[0];
14695
+ const atIndex = authority.lastIndexOf("@");
14696
+ const hostPort = atIndex === -1 ? authority : authority.slice(atIndex + 1);
14697
+ let host;
14698
+ if (hostPort.startsWith("[")) {
14699
+ const end = hostPort.indexOf("]");
14700
+ host = end === -1 ? hostPort : hostPort.slice(0, end + 1);
14701
+ } else {
14702
+ host = hostPort.split(":", 1)[0];
14703
+ }
14704
+ return host ? host.toLowerCase() : null;
14705
+ }
14706
+
14441
14707
  // src/util/connex/validate-hex.ts
14442
14708
  var HEX_COLOR_REGEX = /^#[0-9a-fA-F]{6}$/;
14443
14709
  function isValidHexColor(value) {
@@ -14526,6 +14792,50 @@ var ConnexTelemetryClient = class extends TelemetryClient {
14526
14792
  });
14527
14793
  }
14528
14794
  }
14795
+ trackCliArgumentService(v) {
14796
+ if (v) {
14797
+ const value = serviceTelemetryValue(v);
14798
+ this.trackCliArgument({
14799
+ arg: "service",
14800
+ value: value ?? this.redactedValue
14801
+ });
14802
+ }
14803
+ }
14804
+ trackCliOptionName(v) {
14805
+ if (v) {
14806
+ this.trackCliOption({
14807
+ option: "name",
14808
+ // User-authored connector name can carry team/product names, hence redact.
14809
+ value: this.redactedValue
14810
+ });
14811
+ }
14812
+ }
14813
+ trackCliOptionSubject(v) {
14814
+ if (v) {
14815
+ this.trackCliOption({
14816
+ option: "subject",
14817
+ // Closed enum. Emit raw when valid so the `user` vs `app` token split
14818
+ // is visible; redact anything else
14819
+ value: v === "user" || v === "app" ? v : this.redactedValue
14820
+ });
14821
+ }
14822
+ }
14823
+ trackCliOptionInstallationId(v) {
14824
+ if (v) {
14825
+ this.trackCliOption({
14826
+ option: "installation-id",
14827
+ value: this.redactedValue
14828
+ });
14829
+ }
14830
+ }
14831
+ trackCliOptionScopes(v) {
14832
+ if (v) {
14833
+ this.trackCliOption({
14834
+ option: "scopes",
14835
+ value: this.redactedValue
14836
+ });
14837
+ }
14838
+ }
14529
14839
  trackCliOptionIcon(v) {
14530
14840
  if (v) {
14531
14841
  this.trackCliOption({
@@ -17681,7 +17991,7 @@ async function connex(client) {
17681
17991
  );
17682
17992
  }
17683
17993
  if (!subcommand && needHelp) {
17684
- telemetry2.trackCliFlagHelp("connex");
17994
+ telemetry2.trackCliFlagHelp("connect");
17685
17995
  output_manager_default.print(
17686
17996
  help(connexCommand, {
17687
17997
  columns: client.stderr.columns
@@ -17693,7 +18003,7 @@ async function connex(client) {
17693
18003
  switch (subcommand) {
17694
18004
  case "create": {
17695
18005
  if (needHelp) {
17696
- telemetry2.trackCliFlagHelp("connex", subcommandOriginal);
18006
+ telemetry2.trackCliFlagHelp("connect", subcommandOriginal);
17697
18007
  const printed = await printCreateDynamicHelp(
17698
18008
  client,
17699
18009
  findHelpServiceArg(subArgs),
@@ -17711,6 +18021,8 @@ async function connex(client) {
17711
18021
  normalizeCreateDataArgs(subArgs),
17712
18022
  createFlagsSpec
17713
18023
  );
18024
+ telemetry2.trackCliArgumentService(createParsedArgs.args[0]);
18025
+ telemetry2.trackCliOptionName(createParsedArgs.flags["--name"]);
17714
18026
  telemetry2.trackCliOptionIcon(createParsedArgs.flags["--icon"]);
17715
18027
  telemetry2.trackCliOptionBackgroundColor(
17716
18028
  createParsedArgs.flags["--background-color"]
@@ -17744,6 +18056,7 @@ async function connex(client) {
17744
18056
  telemetry2.trackCliOptionTriggerEnvironment(
17745
18057
  createParsedArgs.flags["--trigger-environment"]
17746
18058
  );
18059
+ telemetry2.trackCliOptionFormat(createParsedArgs.flags["--format"]);
17747
18060
  return await create2(
17748
18061
  client,
17749
18062
  createParsedArgs.args,
@@ -17752,7 +18065,7 @@ async function connex(client) {
17752
18065
  }
17753
18066
  case "update": {
17754
18067
  if (needHelp) {
17755
- telemetry2.trackCliFlagHelp("connex", subcommandOriginal);
18068
+ telemetry2.trackCliFlagHelp("connect", subcommandOriginal);
17756
18069
  printHelp(updateSubcommand);
17757
18070
  return 0;
17758
18071
  }
@@ -17776,7 +18089,7 @@ async function connex(client) {
17776
18089
  }
17777
18090
  case "list": {
17778
18091
  if (needHelp) {
17779
- telemetry2.trackCliFlagHelp("connex", subcommandOriginal);
18092
+ telemetry2.trackCliFlagHelp("connect", subcommandOriginal);
17780
18093
  printHelp(listSubcommand7);
17781
18094
  return 0;
17782
18095
  }
@@ -17796,18 +18109,26 @@ async function connex(client) {
17796
18109
  }
17797
18110
  case "token": {
17798
18111
  if (needHelp) {
17799
- telemetry2.trackCliFlagHelp("connex", subcommandOriginal);
18112
+ telemetry2.trackCliFlagHelp("connect", subcommandOriginal);
17800
18113
  printHelp(tokenSubcommand);
17801
18114
  return 0;
17802
18115
  }
17803
18116
  telemetry2.trackCliSubcommandToken(subcommandOriginal);
17804
18117
  const tokenFlagsSpec = getFlagsSpecification(tokenSubcommand.options);
17805
18118
  const tokenParsedArgs = parseArguments(subArgs, tokenFlagsSpec);
18119
+ telemetry2.trackCliArgumentId(tokenParsedArgs.args[0]);
18120
+ telemetry2.trackCliOptionSubject(tokenParsedArgs.flags["--subject"]);
18121
+ telemetry2.trackCliOptionInstallationId(
18122
+ tokenParsedArgs.flags["--installation-id"]
18123
+ );
18124
+ telemetry2.trackCliOptionScopes(tokenParsedArgs.flags["--scopes"]);
18125
+ telemetry2.trackCliFlagYes(tokenParsedArgs.flags["--yes"]);
18126
+ telemetry2.trackCliOptionFormat(tokenParsedArgs.flags["--format"]);
17806
18127
  return await token(client, tokenParsedArgs.args, tokenParsedArgs.flags);
17807
18128
  }
17808
18129
  case "attach": {
17809
18130
  if (needHelp) {
17810
- telemetry2.trackCliFlagHelp("connex", subcommandOriginal);
18131
+ telemetry2.trackCliFlagHelp("connect", subcommandOriginal);
17811
18132
  printHelp(attachSubcommand);
17812
18133
  return 0;
17813
18134
  }
@@ -17839,7 +18160,7 @@ async function connex(client) {
17839
18160
  }
17840
18161
  case "detach": {
17841
18162
  if (needHelp) {
17842
- telemetry2.trackCliFlagHelp("connex", subcommandOriginal);
18163
+ telemetry2.trackCliFlagHelp("connect", subcommandOriginal);
17843
18164
  printHelp(detachSubcommand);
17844
18165
  return 0;
17845
18166
  }
@@ -17858,7 +18179,7 @@ async function connex(client) {
17858
18179
  }
17859
18180
  case "remove": {
17860
18181
  if (needHelp) {
17861
- telemetry2.trackCliFlagHelp("connex", subcommandOriginal);
18182
+ telemetry2.trackCliFlagHelp("connect", subcommandOriginal);
17862
18183
  printHelp(removeSubcommand4);
17863
18184
  return 0;
17864
18185
  }
@@ -17879,7 +18200,7 @@ async function connex(client) {
17879
18200
  }
17880
18201
  case "revoke-tokens": {
17881
18202
  if (needHelp) {
17882
- telemetry2.trackCliFlagHelp("connex", subcommandOriginal);
18203
+ telemetry2.trackCliFlagHelp("connect", subcommandOriginal);
17883
18204
  printHelp(revokeTokensSubcommand);
17884
18205
  return 0;
17885
18206
  }
@@ -17910,7 +18231,7 @@ async function connex(client) {
17910
18231
  }
17911
18232
  case "open": {
17912
18233
  if (needHelp) {
17913
- telemetry2.trackCliFlagHelp("connex", subcommandOriginal);
18234
+ telemetry2.trackCliFlagHelp("connect", subcommandOriginal);
17914
18235
  printHelp(openSubcommand2);
17915
18236
  return 0;
17916
18237
  }
@@ -17997,7 +18318,7 @@ var ContractTelemetryClient = class extends TelemetryClient {
17997
18318
  };
17998
18319
 
17999
18320
  // src/commands/contract/index.ts
18000
- var import_error_utils5 = __toESM(require_dist(), 1);
18321
+ var import_error_utils6 = __toESM(require_dist(), 1);
18001
18322
 
18002
18323
  // src/util/billing/format.ts
18003
18324
  function formatCurrency(amount) {
@@ -18049,7 +18370,7 @@ async function contract(client) {
18049
18370
  contextName = scope.contextName;
18050
18371
  teamId = scope.team?.id;
18051
18372
  } catch (err) {
18052
- if ((0, import_error_utils5.isErrnoException)(err) && (err.code === "NOT_AUTHORIZED" || err.code === "TEAM_DELETED")) {
18373
+ if ((0, import_error_utils6.isErrnoException)(err) && (err.code === "NOT_AUTHORIZED" || err.code === "TEAM_DELETED")) {
18053
18374
  error(err.message);
18054
18375
  return 1;
18055
18376
  }
@@ -18174,7 +18495,7 @@ async function contract(client) {
18174
18495
  var import_chalk56 = __toESM(require_source(), 1);
18175
18496
 
18176
18497
  // src/util/certs/create-cert-from-file.ts
18177
- var import_error_utils6 = __toESM(require_dist(), 1);
18498
+ var import_error_utils7 = __toESM(require_dist(), 1);
18178
18499
  import { readFileSync } from "fs";
18179
18500
  import { resolve as resolve6 } from "path";
18180
18501
  async function createCertFromFile(client, keyPath, certPath, caPath) {
@@ -18193,7 +18514,7 @@ async function createCertFromFile(client, keyPath, certPath, caPath) {
18193
18514
  });
18194
18515
  return certificate;
18195
18516
  } catch (err) {
18196
- if ((0, import_error_utils6.isErrnoException)(err) && err.code === "ENOENT") {
18517
+ if ((0, import_error_utils7.isErrnoException)(err) && err.code === "ENOENT") {
18197
18518
  return new Error(`The specified file "${err.path}" doesn't exist.`);
18198
18519
  }
18199
18520
  if (isAPIError(err) && err.status < 500) {
@@ -19648,7 +19969,7 @@ var CurlTelemetryClient = class extends TelemetryClient {
19648
19969
 
19649
19970
  // src/commands/curl/shared.ts
19650
19971
  var import_chalk66 = __toESM(require_source(), 1);
19651
- var import_error_utils7 = __toESM(require_dist(), 1);
19972
+ var import_error_utils8 = __toESM(require_dist(), 1);
19652
19973
 
19653
19974
  // src/commands/curl/bypass-token.ts
19654
19975
  var import_chalk65 = __toESM(require_source(), 1);
@@ -20178,7 +20499,7 @@ async function getDeploymentUrlAndToken(client, commandName, path3, options) {
20178
20499
  try {
20179
20500
  scope = await getScope(client);
20180
20501
  } catch (err) {
20181
- if ((0, import_error_utils7.isErrnoException)(err) && (err.code === "NOT_AUTHORIZED" || err.code === "TEAM_DELETED")) {
20502
+ if ((0, import_error_utils8.isErrnoException)(err) && (err.code === "NOT_AUTHORIZED" || err.code === "TEAM_DELETED")) {
20182
20503
  output_manager_default.error(err.message);
20183
20504
  return 1;
20184
20505
  }
@@ -20233,7 +20554,7 @@ async function getDeploymentUrlAndToken(client, commandName, path3, options) {
20233
20554
  autoConfirm
20234
20555
  });
20235
20556
  } catch (err) {
20236
- if ((0, import_error_utils7.isErrnoException)(err) && err.code === "NOT_AUTHORIZED") {
20557
+ if ((0, import_error_utils8.isErrnoException)(err) && err.code === "NOT_AUTHORIZED") {
20237
20558
  output_manager_default.error(err.message);
20238
20559
  return 1;
20239
20560
  }
@@ -20286,7 +20607,7 @@ async function getDeploymentUrlAndToken(client, commandName, path3, options) {
20286
20607
  }
20287
20608
 
20288
20609
  // src/commands/curl/trace.ts
20289
- var import_error_utils8 = __toESM(require_dist(), 1);
20610
+ var import_error_utils9 = __toESM(require_dist(), 1);
20290
20611
  import { spawn } from "child_process";
20291
20612
  import { tmpdir } from "os";
20292
20613
  import { join as join15 } from "path";
@@ -20531,7 +20852,7 @@ async function trace2(client, { fullUrl, link: link2, curlFlags, json, yes, tele
20531
20852
  userId = client.authConfig.userId ?? (await getUser(client)).id;
20532
20853
  } catch (err) {
20533
20854
  output_manager_default.error(
20534
- `Failed to resolve user for trace session: ${(0, import_error_utils8.errorToString)(err)}`
20855
+ `Failed to resolve user for trace session: ${(0, import_error_utils9.errorToString)(err)}`
20535
20856
  );
20536
20857
  return 1;
20537
20858
  }
@@ -22714,7 +23035,7 @@ var DomainsAddTelemetryClient = class extends TelemetryClient {
22714
23035
  };
22715
23036
 
22716
23037
  // src/commands/domains/add.ts
22717
- var import_error_utils9 = __toESM(require_dist(), 1);
23038
+ var import_error_utils10 = __toESM(require_dist(), 1);
22718
23039
  var VERCEL_DOMAINS_DASHBOARD = "https://vercel.com/dashboard/domains";
22719
23040
  function nextCommandsForDomainsAddFailure(client, domainName, projectName, err) {
22720
23041
  const next = [
@@ -22902,7 +23223,7 @@ async function add5(client, argv) {
22902
23223
  if (code2 === "not_domain_owner" || status4 === 403 && msg.includes("not authorized")) {
22903
23224
  reason = "domain_not_owned";
22904
23225
  }
22905
- let message = (0, import_error_utils9.errorToString)(error);
23226
+ let message = (0, import_error_utils10.errorToString)(error);
22906
23227
  if (reason === "domain_not_owned" || code2 === "invalid_domain" || msg.includes("not authorized to use")) {
22907
23228
  message += " domains add is for domains you already own or control via DNS. If you have not purchased the domain yet, the user must run 'domains buy' interactively (agents must not purchase) or buy in the dashboard; use 'domains transfer-in' to move an existing registration to Vercel.";
22908
23229
  }
@@ -22932,7 +23253,7 @@ async function add5(client, argv) {
22932
23253
  {
22933
23254
  status: "error",
22934
23255
  reason: "invalid_domain",
22935
- message: (0, import_error_utils9.errorToString)(addResult)
23256
+ message: (0, import_error_utils10.errorToString)(addResult)
22936
23257
  },
22937
23258
  1
22938
23259
  );
@@ -22947,7 +23268,7 @@ async function add5(client, argv) {
22947
23268
  {
22948
23269
  status: "error",
22949
23270
  reason: "domain_already_exists",
22950
- message: (0, import_error_utils9.errorToString)(addResult)
23271
+ message: (0, import_error_utils10.errorToString)(addResult)
22951
23272
  },
22952
23273
  1
22953
23274
  );
@@ -23038,7 +23359,7 @@ async function add5(client, argv) {
23038
23359
  {
23039
23360
  status: "error",
23040
23361
  reason: "domain_remove_failed",
23041
- message: (0, import_error_utils9.errorToString)(removeResponse)
23362
+ message: (0, import_error_utils10.errorToString)(removeResponse)
23042
23363
  },
23043
23364
  1
23044
23365
  );
@@ -23064,7 +23385,7 @@ async function add5(client, argv) {
23064
23385
  if (code2 === "not_domain_owner" || status4 === 403 && msg.includes("not authorized")) {
23065
23386
  reason = "domain_not_owned";
23066
23387
  }
23067
- let message = (0, import_error_utils9.errorToString)(aliasTarget);
23388
+ let message = (0, import_error_utils10.errorToString)(aliasTarget);
23068
23389
  if (reason === "domain_not_owned" || code2 === "invalid_domain" || msg.includes("not authorized to use")) {
23069
23390
  message += " domains add is for domains you already own or control via DNS. If you have not purchased the domain yet, the user must run 'domains buy' interactively (agents must not purchase) or buy in the dashboard; use 'domains transfer-in' to move an existing registration to Vercel.";
23070
23391
  }
@@ -45033,7 +45354,7 @@ async function guess(client, exampleList, name) {
45033
45354
  }
45034
45355
 
45035
45356
  // src/commands/init/index.ts
45036
- var import_error_utils10 = __toESM(require_dist(), 1);
45357
+ var import_error_utils11 = __toESM(require_dist(), 1);
45037
45358
 
45038
45359
  // src/util/telemetry/commands/init/index.ts
45039
45360
  var InitTelemetryClient = class extends TelemetryClient {
@@ -45094,7 +45415,7 @@ async function main19(client) {
45094
45415
  return await init(client, parsedArgs.flags, args, telemetry2);
45095
45416
  } catch (err) {
45096
45417
  output_manager_default.prettyError(err);
45097
- if ((0, import_error_utils10.isError)(err) && typeof err.stack === "string") {
45418
+ if ((0, import_error_utils11.isError)(err) && typeof err.stack === "string") {
45098
45419
  output_manager_default.debug(err.stack);
45099
45420
  }
45100
45421
  return 1;
@@ -45102,7 +45423,7 @@ async function main19(client) {
45102
45423
  }
45103
45424
 
45104
45425
  // src/commands/inspect/index.ts
45105
- var import_error_utils11 = __toESM(require_dist(), 1);
45426
+ var import_error_utils12 = __toESM(require_dist(), 1);
45106
45427
  var import_chalk166 = __toESM(require_source(), 1);
45107
45428
  var import_ms18 = __toESM(require_ms(), 1);
45108
45429
  var import_title3 = __toESM(require_lib2(), 1);
@@ -45524,7 +45845,7 @@ async function inspect6(client) {
45524
45845
  try {
45525
45846
  ({ contextName } = await getScope(client));
45526
45847
  } catch (err) {
45527
- if ((0, import_error_utils11.isErrnoException)(err) && (err.code === "NOT_AUTHORIZED" || err.code === "TEAM_DELETED")) {
45848
+ if ((0, import_error_utils12.isErrnoException)(err) && (err.code === "NOT_AUTHORIZED" || err.code === "TEAM_DELETED")) {
45528
45849
  error(err.message);
45529
45850
  return 1;
45530
45851
  }
@@ -45751,7 +46072,7 @@ function exitCode(state) {
45751
46072
  // src/commands/integration/add-auto-provision.ts
45752
46073
  var import_chalk171 = __toESM(require_source(), 1);
45753
46074
  var import_execa2 = __toESM(require_execa(), 1);
45754
- var import_error_utils12 = __toESM(require_dist(), 1);
46075
+ var import_error_utils13 = __toESM(require_dist(), 1);
45755
46076
  var import_open12 = __toESM(require_open(), 1);
45756
46077
 
45757
46078
  // src/util/integration/auto-provision-resource.ts
@@ -47442,10 +47763,10 @@ Example: vercel ${commandName} ${integration.slug}/${integration.products[0].slu
47442
47763
  "marketplace_checkout_provisioning_failed",
47443
47764
  {
47444
47765
  ...baseProps,
47445
- error_message: (0, import_error_utils12.errorToString)(error)
47766
+ error_message: (0, import_error_utils13.errorToString)(error)
47446
47767
  }
47447
47768
  );
47448
- output_manager_default.error((0, import_error_utils12.errorToString)(error));
47769
+ output_manager_default.error((0, import_error_utils13.errorToString)(error));
47449
47770
  return 1;
47450
47771
  }
47451
47772
  output_manager_default.stopSpinner();
@@ -51975,14 +52296,14 @@ async function main21(client) {
51975
52296
  }
51976
52297
 
51977
52298
  // src/commands/logout/index.ts
51978
- var import_error_utils14 = __toESM(require_dist(), 1);
52299
+ var import_error_utils15 = __toESM(require_dist(), 1);
51979
52300
 
51980
52301
  // src/util/telemetry/commands/logout/index.ts
51981
52302
  var LogoutTelemetryClient = class extends TelemetryClient {
51982
52303
  };
51983
52304
 
51984
52305
  // src/commands/logout/future.ts
51985
- var import_error_utils13 = __toESM(require_dist(), 1);
52306
+ var import_error_utils14 = __toESM(require_dist(), 1);
51986
52307
  async function logout(client) {
51987
52308
  const { authConfig } = client;
51988
52309
  if (!authConfig.token) {
@@ -52015,7 +52336,7 @@ async function logout(client) {
52015
52336
  return 0;
52016
52337
  }
52017
52338
  } catch (err) {
52018
- output_manager_default.debug((0, import_error_utils13.errorToString)(err));
52339
+ output_manager_default.debug((0, import_error_utils14.errorToString)(err));
52019
52340
  output_manager_default.error("Failed during logout");
52020
52341
  }
52021
52342
  return 1;
@@ -52079,7 +52400,7 @@ async function logout2(client) {
52079
52400
  }
52080
52401
  output_manager_default.debug("Configuration has been deleted");
52081
52402
  } catch (err) {
52082
- output_manager_default.debug((0, import_error_utils14.errorToString)(err));
52403
+ output_manager_default.debug((0, import_error_utils15.errorToString)(err));
52083
52404
  exitCode2 = 1;
52084
52405
  }
52085
52406
  if (exitCode2 === 0) {
@@ -52091,7 +52412,7 @@ async function logout2(client) {
52091
52412
  }
52092
52413
 
52093
52414
  // src/commands/logs/index.ts
52094
- var import_error_utils15 = __toESM(require_dist(), 1);
52415
+ var import_error_utils16 = __toESM(require_dist(), 1);
52095
52416
  var import_chalk191 = __toESM(require_source(), 1);
52096
52417
  var import_format26 = __toESM(require_format(), 1);
52097
52418
 
@@ -52838,7 +53159,7 @@ async function logs(client) {
52838
53159
  try {
52839
53160
  ({ contextName } = await getScope(client));
52840
53161
  } catch (err) {
52841
- if ((0, import_error_utils15.isErrnoException)(err) && (err.code === "NOT_AUTHORIZED" || err.code === "TEAM_DELETED")) {
53162
+ if ((0, import_error_utils16.isErrnoException)(err) && (err.code === "NOT_AUTHORIZED" || err.code === "TEAM_DELETED")) {
52842
53163
  output_manager_default.error(err.message);
52843
53164
  return 1;
52844
53165
  }
@@ -53841,7 +54162,7 @@ async function metrics(client) {
53841
54162
  return 0;
53842
54163
  }
53843
54164
  telemetry2.trackCliSubcommandSchema(subcommandOriginal);
53844
- const schemaFn = (await import("./chunks/schema-OIKSCLDU.js")).default;
54165
+ const schemaFn = (await import("./chunks/schema-YJDZ6EOC.js")).default;
53845
54166
  return schemaFn(client, telemetry2);
53846
54167
  }
53847
54168
  default: {
@@ -53854,7 +54175,7 @@ async function metrics(client) {
53854
54175
  output_manager_default.print(help(metricsCommand, { columns: client.stderr.columns }));
53855
54176
  return 2;
53856
54177
  }
53857
- const queryFn = (await import("./chunks/query-5GQLF2BR.js")).default;
54178
+ const queryFn = (await import("./chunks/query-HXMR364K.js")).default;
53858
54179
  return queryFn(client, telemetry2);
53859
54180
  }
53860
54181
  }
@@ -58303,7 +58624,7 @@ async function main24(client) {
58303
58624
 
58304
58625
  // src/commands/promote/index.ts
58305
58626
  var import_ms27 = __toESM(require_ms(), 1);
58306
- var import_error_utils16 = __toESM(require_dist(), 1);
58627
+ var import_error_utils17 = __toESM(require_dist(), 1);
58307
58628
 
58308
58629
  // src/commands/promote/request-promote.ts
58309
58630
  var import_chalk212 = __toESM(require_source(), 1);
@@ -58748,7 +59069,7 @@ var promote_default = async (client) => {
58748
59069
  yes
58749
59070
  });
58750
59071
  } catch (err) {
58751
- if ((0, import_error_utils16.isErrnoException)(err)) {
59072
+ if ((0, import_error_utils17.isErrnoException)(err)) {
58752
59073
  if (err.code === "ERR_CANCELED") {
58753
59074
  return 0;
58754
59075
  }
@@ -58825,7 +59146,7 @@ async function getDeploymentByIdOrURL({
58825
59146
  }
58826
59147
 
58827
59148
  // src/commands/redeploy/index.ts
58828
- var import_error_utils17 = __toESM(require_dist(), 1);
59149
+ var import_error_utils18 = __toESM(require_dist(), 1);
58829
59150
 
58830
59151
  // src/util/telemetry/commands/redeploy/index.ts
58831
59152
  var RedeployTelemetryClient = class extends TelemetryClient {
@@ -59042,7 +59363,7 @@ async function redeploy(client) {
59042
59363
  );
59043
59364
  } catch (err) {
59044
59365
  output_manager_default.prettyError(err);
59045
- if ((0, import_error_utils17.isErrnoException)(err) && err.code === "ERR_INVALID_TEAM") {
59366
+ if ((0, import_error_utils18.isErrnoException)(err) && err.code === "ERR_INVALID_TEAM") {
59046
59367
  output_manager_default.error(
59047
59368
  `Use ${import_chalk214.default.bold("vc switch")} to change your current team`
59048
59369
  );
@@ -59747,7 +60068,7 @@ import { readFileSync as readFileSync4 } from "fs";
59747
60068
  import { basename as basename3 } from "path";
59748
60069
 
59749
60070
  // src/commands/redirects/validate-redirects.ts
59750
- import { statSync as statSync2 } from "fs";
60071
+ import { statSync as statSync3 } from "fs";
59751
60072
  var MAX_FILE_SIZE = 50 * 1024 * 1024;
59752
60073
  var ALLOWED_EXTENSIONS = [".csv", ".json"];
59753
60074
  var MAX_REDIRECTS = 1e6;
@@ -59757,7 +60078,7 @@ function validateUploadFile(filePath, options = {}) {
59757
60078
  const maxSize = options.maxFileSize ?? MAX_FILE_SIZE;
59758
60079
  const allowedExts = options.allowedExtensions ?? ALLOWED_EXTENSIONS;
59759
60080
  try {
59760
- const stats = statSync2(filePath);
60081
+ const stats = statSync3(filePath);
59761
60082
  if (!stats.isFile()) {
59762
60083
  return { valid: false, error: `Path "${filePath}" is not a file` };
59763
60084
  }
@@ -61360,7 +61681,7 @@ function deploymentsAndProjects(deployments, projects2, conjunction = "and") {
61360
61681
  }
61361
61682
 
61362
61683
  // src/commands/rollback/index.ts
61363
- var import_error_utils18 = __toESM(require_dist(), 1);
61684
+ var import_error_utils19 = __toESM(require_dist(), 1);
61364
61685
  var import_ms32 = __toESM(require_ms(), 1);
61365
61686
 
61366
61687
  // src/commands/rollback/request-rollback.ts
@@ -61641,7 +61962,7 @@ var rollback_default = async (client) => {
61641
61962
  timeout
61642
61963
  });
61643
61964
  } catch (err) {
61644
- if ((0, import_error_utils18.isErrnoException)(err)) {
61965
+ if ((0, import_error_utils19.isErrnoException)(err)) {
61645
61966
  if (err.code === "ERR_CANCELED") {
61646
61967
  return 0;
61647
61968
  }
@@ -64556,7 +64877,7 @@ async function main26(client) {
64556
64877
  return 2;
64557
64878
  }
64558
64879
  telemetry2.trackCliSubcommandEdit(subcommandOriginal);
64559
- return (await import("./chunks/edit-NXPQFWM6.js")).default(client, args);
64880
+ return (await import("./chunks/edit-RIY7SWIR.js")).default(client, args);
64560
64881
  case "delete":
64561
64882
  if (needHelp) {
64562
64883
  telemetry2.trackCliFlagHelp("routes", subcommandOriginal);
@@ -64564,7 +64885,7 @@ async function main26(client) {
64564
64885
  return 2;
64565
64886
  }
64566
64887
  telemetry2.trackCliSubcommandDelete(subcommandOriginal);
64567
- return (await import("./chunks/delete-HQMI44SG.js")).default(client, args);
64888
+ return (await import("./chunks/delete-RZ2SVQK6.js")).default(client, args);
64568
64889
  case "enable":
64569
64890
  if (needHelp) {
64570
64891
  telemetry2.trackCliFlagHelp("routes", subcommandOriginal);
@@ -64572,7 +64893,7 @@ async function main26(client) {
64572
64893
  return 2;
64573
64894
  }
64574
64895
  telemetry2.trackCliSubcommandEnable(subcommandOriginal);
64575
- return (await import("./chunks/enable-OGFRN4CG.js")).default(client, args);
64896
+ return (await import("./chunks/enable-JWPKENHY.js")).default(client, args);
64576
64897
  case "disable":
64577
64898
  if (needHelp) {
64578
64899
  telemetry2.trackCliFlagHelp("routes", subcommandOriginal);
@@ -64580,7 +64901,7 @@ async function main26(client) {
64580
64901
  return 2;
64581
64902
  }
64582
64903
  telemetry2.trackCliSubcommandDisable(subcommandOriginal);
64583
- return (await import("./chunks/disable-HC266OB7.js")).default(client, args);
64904
+ return (await import("./chunks/disable-DZ7DCWEI.js")).default(client, args);
64584
64905
  case "reorder":
64585
64906
  if (needHelp) {
64586
64907
  telemetry2.trackCliFlagHelp("routes", subcommandOriginal);
@@ -64588,7 +64909,7 @@ async function main26(client) {
64588
64909
  return 2;
64589
64910
  }
64590
64911
  telemetry2.trackCliSubcommandReorder(subcommandOriginal);
64591
- return (await import("./chunks/reorder-5GCNY75W.js")).default(client, args);
64912
+ return (await import("./chunks/reorder-VE2PRU24.js")).default(client, args);
64592
64913
  case "export":
64593
64914
  if (needHelp) {
64594
64915
  telemetry2.trackCliFlagHelp("routes", subcommandOriginal);
@@ -64596,7 +64917,7 @@ async function main26(client) {
64596
64917
  return 2;
64597
64918
  }
64598
64919
  telemetry2.trackCliSubcommandExport(subcommandOriginal);
64599
- return (await import("./chunks/export-AEESZFZX.js")).default(client, args);
64920
+ return (await import("./chunks/export-6IDA3TWA.js")).default(client, args);
64600
64921
  case "publish":
64601
64922
  if (needHelp) {
64602
64923
  telemetry2.trackCliFlagHelp("routes", subcommandOriginal);
@@ -64604,7 +64925,7 @@ async function main26(client) {
64604
64925
  return 2;
64605
64926
  }
64606
64927
  telemetry2.trackCliSubcommandPublish(subcommandOriginal);
64607
- return (await import("./chunks/publish-CM6ZGWIE.js")).default(client, args);
64928
+ return (await import("./chunks/publish-TVZGIZRP.js")).default(client, args);
64608
64929
  case "restore":
64609
64930
  if (needHelp) {
64610
64931
  telemetry2.trackCliFlagHelp("routes", subcommandOriginal);
@@ -64612,7 +64933,7 @@ async function main26(client) {
64612
64933
  return 2;
64613
64934
  }
64614
64935
  telemetry2.trackCliSubcommandRestore(subcommandOriginal);
64615
- return (await import("./chunks/restore-VHX4JV5J.js")).default(client, args);
64936
+ return (await import("./chunks/restore-ZY3IJ4S3.js")).default(client, args);
64616
64937
  case "discard-staging":
64617
64938
  if (needHelp) {
64618
64939
  telemetry2.trackCliFlagHelp("routes", subcommandOriginal);
@@ -64620,7 +64941,7 @@ async function main26(client) {
64620
64941
  return 2;
64621
64942
  }
64622
64943
  telemetry2.trackCliSubcommandDiscardStaging(subcommandOriginal);
64623
- return (await import("./chunks/discard-3RFIPLXY.js")).default(client, args);
64944
+ return (await import("./chunks/discard-VZ5QNL7B.js")).default(client, args);
64624
64945
  default:
64625
64946
  output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG45));
64626
64947
  output_manager_default.print(help(routesCommand, { columns: client.stderr.columns }));
@@ -64690,8 +65011,398 @@ async function sandbox(client) {
64690
65011
  }
64691
65012
  }
64692
65013
 
64693
- // src/commands/skills/index.ts
65014
+ // src/util/telemetry/commands/security/index.ts
65015
+ var SecurityTelemetryClient = class extends TelemetryClient {
65016
+ trackCliSubcommandCheck(actual) {
65017
+ this.trackCliSubcommand({
65018
+ subcommand: "check",
65019
+ value: actual
65020
+ });
65021
+ }
65022
+ };
65023
+
65024
+ // src/commands/security/check.ts
64694
65025
  var import_chalk229 = __toESM(require_source(), 1);
65026
+
65027
+ // src/util/telemetry/commands/security/check.ts
65028
+ var SecurityCheckTelemetryClient = class extends TelemetryClient {
65029
+ trackCliArgumentCheck(checks2) {
65030
+ if (checks2.length > 0) {
65031
+ this.trackCliArgument({
65032
+ arg: "check",
65033
+ value: checks2.join(",")
65034
+ });
65035
+ }
65036
+ }
65037
+ trackCliFlagFindings(findings) {
65038
+ if (findings) {
65039
+ this.trackCliFlag("findings");
65040
+ }
65041
+ }
65042
+ trackCliOptionLimit(limit) {
65043
+ if (limit !== void 0) {
65044
+ this.trackCliOption({
65045
+ option: "limit",
65046
+ value: String(limit)
65047
+ });
65048
+ }
65049
+ }
65050
+ trackCliOptionFormat(format3) {
65051
+ if (format3) {
65052
+ this.trackCliOption({
65053
+ option: "format",
65054
+ value: format3
65055
+ });
65056
+ }
65057
+ }
65058
+ trackCliFlagJson(json) {
65059
+ if (json) {
65060
+ this.trackCliFlag("json");
65061
+ }
65062
+ }
65063
+ };
65064
+
65065
+ // src/commands/security/catalog.ts
65066
+ var SECURITY_CHECKS = [
65067
+ {
65068
+ slug: "members-no-mfa",
65069
+ description: "Team members without multi-factor authentication",
65070
+ risk: "high"
65071
+ },
65072
+ {
65073
+ slug: "members-too-many-owners",
65074
+ description: "Team owners to review",
65075
+ risk: "high"
65076
+ },
65077
+ {
65078
+ slug: "pats-no-expiration",
65079
+ description: "PATs that never expire",
65080
+ risk: "high"
65081
+ },
65082
+ {
65083
+ slug: "env-vars-creds-instead-of-oidc",
65084
+ description: "Long-lived credentials where OIDC is available",
65085
+ risk: "high"
65086
+ },
65087
+ {
65088
+ slug: "depl-no-git-fork-protection",
65089
+ description: "Projects without Git fork deploy prevention",
65090
+ risk: "high"
65091
+ },
65092
+ {
65093
+ slug: "proj-no-preview-depl-protection",
65094
+ description: "Projects without preview deployment protection",
65095
+ risk: "high"
65096
+ },
65097
+ {
65098
+ slug: "env-vars-non-sensitive",
65099
+ description: "Environment variables not marked Sensitive",
65100
+ risk: "medium"
65101
+ },
65102
+ {
65103
+ slug: "env-vars-non-sensitive-stale",
65104
+ description: "Environment variables older than 90 days",
65105
+ risk: "medium"
65106
+ },
65107
+ {
65108
+ slug: "env-vars-exposed-web-app-fwk",
65109
+ description: "Environment variables exposed via web application framework",
65110
+ risk: "medium"
65111
+ }
65112
+ ];
65113
+ function isKnownCheck(slug) {
65114
+ return SECURITY_CHECKS.some((check3) => check3.slug === slug);
65115
+ }
65116
+
65117
+ // src/commands/security/check.ts
65118
+ async function check2(client, argv) {
65119
+ const telemetry2 = new SecurityCheckTelemetryClient({
65120
+ opts: {
65121
+ store: client.telemetryEventStore
65122
+ }
65123
+ });
65124
+ let parsedArgs;
65125
+ const flagsSpecification = getFlagsSpecification(checkSubcommand2.options);
65126
+ try {
65127
+ parsedArgs = parseArguments(argv, flagsSpecification);
65128
+ } catch (error) {
65129
+ printError(error);
65130
+ return 1;
65131
+ }
65132
+ const { args: checks2, flags: opts } = parsedArgs;
65133
+ const unknown = checks2.filter((slug) => !isKnownCheck(slug));
65134
+ if (unknown.length > 0) {
65135
+ const message = `Unknown check${unknown.length === 1 ? "" : "s"}: ${unknown.join(", ")}. Valid slugs: ${SECURITY_CHECKS.map((check3) => check3.slug).join(", ")}`;
65136
+ outputAgentError(client, {
65137
+ status: "error",
65138
+ reason: AGENT_REASON.INVALID_ARGUMENTS,
65139
+ message,
65140
+ next: [
65141
+ {
65142
+ command: buildCommandWithGlobalFlags(
65143
+ client.argv,
65144
+ "security check <slug>"
65145
+ ),
65146
+ when: "Re-run with a valid check slug (replace placeholder)"
65147
+ },
65148
+ {
65149
+ command: buildCommandWithGlobalFlags(
65150
+ client.argv,
65151
+ "security check --help"
65152
+ ),
65153
+ when: "See all flags and examples"
65154
+ }
65155
+ ]
65156
+ });
65157
+ output_manager_default.error(
65158
+ `Unknown check${unknown.length === 1 ? "" : "s"}: ${unknown.join(", ")}. Valid slugs:
65159
+ ${SECURITY_CHECKS.map((check3) => check3.slug).join("\n ")}`
65160
+ );
65161
+ return 1;
65162
+ }
65163
+ const limit = opts["--limit"];
65164
+ if (limit !== void 0 && (!Number.isInteger(limit) || limit < 1)) {
65165
+ outputAgentError(client, {
65166
+ status: "error",
65167
+ reason: AGENT_REASON.INVALID_ARGUMENTS,
65168
+ message: "`--limit` must be a positive integer.",
65169
+ next: [
65170
+ {
65171
+ command: buildCommandWithGlobalFlags(
65172
+ client.argv,
65173
+ "security check --limit <N>"
65174
+ ),
65175
+ when: "Re-run with a positive integer (replace placeholder)"
65176
+ }
65177
+ ]
65178
+ });
65179
+ output_manager_default.error("`--limit` must be a positive integer.");
65180
+ return 1;
65181
+ }
65182
+ const formatResult = validateJsonOutput(opts);
65183
+ if (!formatResult.valid) {
65184
+ output_manager_default.error(formatResult.error);
65185
+ return 1;
65186
+ }
65187
+ const asJson = formatResult.jsonOutput || client.nonInteractive;
65188
+ telemetry2.trackCliArgumentCheck(checks2);
65189
+ telemetry2.trackCliOptionFormat(opts["--format"]);
65190
+ telemetry2.trackCliFlagFindings(opts["--findings"]);
65191
+ telemetry2.trackCliOptionLimit(limit);
65192
+ telemetry2.trackCliOptionProject(opts["--project"]);
65193
+ telemetry2.trackCliFlagJson(opts["--json"]);
65194
+ const { team, contextName } = await getScope(client);
65195
+ if (!team) {
65196
+ outputAgentError(client, {
65197
+ status: "error",
65198
+ reason: AGENT_REASON.MISSING_SCOPE,
65199
+ message: "Security checks require a team scope. Run `vercel switch` to select a team.",
65200
+ next: [
65201
+ {
65202
+ command: buildCommandWithGlobalFlags(client.argv, "whoami"),
65203
+ when: "See current user and team"
65204
+ },
65205
+ {
65206
+ command: buildCommandWithGlobalFlags(client.argv, "teams switch"),
65207
+ when: "Switch to a team"
65208
+ }
65209
+ ]
65210
+ });
65211
+ output_manager_default.error(
65212
+ `Security checks require a team scope. Run ${getCommandName("switch")} to select a team.`
65213
+ );
65214
+ return 1;
65215
+ }
65216
+ const params = new URLSearchParams({
65217
+ teamId: team.id,
65218
+ maxSamples: String(limit ?? 100)
65219
+ });
65220
+ for (const slug of checks2) {
65221
+ params.append("facets", slug);
65222
+ }
65223
+ const project = opts["--project"];
65224
+ if (project) {
65225
+ params.set("projectIdOrName", project);
65226
+ }
65227
+ const dashStamp = stamp_default();
65228
+ output_manager_default.spinner(
65229
+ checks2.length > 0 ? "Computing security checks\u2026" : "Computing security report\u2026"
65230
+ );
65231
+ let data;
65232
+ try {
65233
+ data = await client.fetch(
65234
+ `/dashboard/security-dashboard?${params}`
65235
+ );
65236
+ } catch (error) {
65237
+ output_manager_default.stopSpinner();
65238
+ const status4 = isAPIError(error) ? error.status : void 0;
65239
+ outputAgentError(client, {
65240
+ status: "error",
65241
+ reason: status4 === 401 || status4 === 403 ? "not_authorized" : status4 === 429 ? "rate_limited" : AGENT_REASON.API_ERROR,
65242
+ message: isAPIError(error) && error.serverMessage || "The security report request failed.",
65243
+ next: [
65244
+ {
65245
+ command: buildCommandWithGlobalFlags(client.argv, "whoami"),
65246
+ when: "Verify the authenticated user and team"
65247
+ }
65248
+ ]
65249
+ });
65250
+ printError(error);
65251
+ return 1;
65252
+ }
65253
+ output_manager_default.stopSpinner();
65254
+ if (asJson) {
65255
+ client.stdout.write(`${JSON.stringify(data, null, 2)}
65256
+ `);
65257
+ return 0;
65258
+ }
65259
+ const rows = SECURITY_CHECKS.filter(
65260
+ (check3) => checks2.length === 0 || checks2.includes(check3.slug)
65261
+ ).map((check3) => ({ check: check3, posture: data.report[check3.slug] }));
65262
+ const counts = { failing: 0, passing: 0, muted: 0, unavailable: 0 };
65263
+ for (const { posture } of rows) {
65264
+ counts[statusOf(posture)]++;
65265
+ }
65266
+ const summary = [
65267
+ `${rows.length} ${rows.length === 1 ? "check" : "checks"}`,
65268
+ counts.failing > 0 && import_chalk229.default.red(`${counts.failing} failing`),
65269
+ counts.muted > 0 && import_chalk229.default.yellow(`${counts.muted} muted`),
65270
+ counts.unavailable > 0 && import_chalk229.default.gray(`${counts.unavailable} unavailable`),
65271
+ counts.passing > 0 && import_chalk229.default.green(`${counts.passing} passing`)
65272
+ ].filter(Boolean).join(" \xB7 ");
65273
+ output_manager_default.log(
65274
+ `${summary} under ${import_chalk229.default.bold(contextName)} ${import_chalk229.default.gray(dashStamp())}`
65275
+ );
65276
+ output_manager_default.print(formatSummaryTable(rows).replace(/^(.*)/gm, " $1"));
65277
+ output_manager_default.print("\n");
65278
+ const showFindings = Boolean(opts["--findings"]) || checks2.length > 0;
65279
+ if (showFindings) {
65280
+ for (const { check: check3, posture } of rows) {
65281
+ printFindings(check3.slug, posture, data.mutes);
65282
+ }
65283
+ } else if (counts.failing > 0) {
65284
+ output_manager_default.log("Run with --findings to list individual findings.");
65285
+ }
65286
+ return 0;
65287
+ }
65288
+ function statusOf(posture) {
65289
+ if (!posture)
65290
+ return "unavailable";
65291
+ if (posture.unavailableReason === "muted")
65292
+ return "muted";
65293
+ if (posture.unavailable)
65294
+ return "unavailable";
65295
+ return posture.violationsCount > 0 ? "failing" : "passing";
65296
+ }
65297
+ function statusLabel(posture) {
65298
+ const status4 = statusOf(posture);
65299
+ if (status4 === "unavailable" && posture?.unavailableReason) {
65300
+ return posture.unavailableReason === "insufficient-permissions" ? import_chalk229.default.gray("no access") : import_chalk229.default.gray("error");
65301
+ }
65302
+ return {
65303
+ failing: import_chalk229.default.red("failing"),
65304
+ passing: import_chalk229.default.green("passing"),
65305
+ muted: import_chalk229.default.yellow("muted"),
65306
+ unavailable: import_chalk229.default.gray("unavailable")
65307
+ }[status4];
65308
+ }
65309
+ function violationsLabel(posture) {
65310
+ if (!posture || posture.unavailable)
65311
+ return import_chalk229.default.gray("\u2013");
65312
+ return posture.truncated ? `${posture.violationsCount}+` : String(posture.violationsCount);
65313
+ }
65314
+ function formatSummaryTable(rows) {
65315
+ return formatTable(
65316
+ ["Check", "Risk", "Status", "Violations", "Muted", "Description"],
65317
+ ["l", "l", "l", "r", "r", "l"],
65318
+ [
65319
+ {
65320
+ rows: rows.map(({ check: check3, posture }) => [
65321
+ import_chalk229.default.bold(check3.slug),
65322
+ check3.risk === "high" ? import_chalk229.default.red("high") : import_chalk229.default.yellow("medium"),
65323
+ statusLabel(posture),
65324
+ violationsLabel(posture),
65325
+ posture?.mutedCount ? String(posture.mutedCount) : import_chalk229.default.gray("\u2013"),
65326
+ import_chalk229.default.gray(truncateEnd(check3.description, 60))
65327
+ ])
65328
+ }
65329
+ ]
65330
+ );
65331
+ }
65332
+ function flattenSamples(samples) {
65333
+ return samples.flatMap(
65334
+ (sample) => sample.samples ? sample.samples.map((sub) => `${sample.label} / ${sub.label}`) : [sample.label]
65335
+ );
65336
+ }
65337
+ function printFindings(slug, posture, mutes) {
65338
+ const findings = posture && !posture.unavailable ? flattenSamples(posture.samples) : [];
65339
+ const mutedFindings = (mutes ?? []).filter((mute) => mute.facet === slug && mute.entityId).map((mute) => {
65340
+ const label = mute.labelSnapshot?.label ?? mute.entityId ?? "";
65341
+ const group = mute.labelSnapshot?.groupLabel;
65342
+ return group ? `${group} / ${label}` : label;
65343
+ });
65344
+ if (findings.length === 0 && mutedFindings.length === 0) {
65345
+ return;
65346
+ }
65347
+ output_manager_default.print(`
65348
+ ${import_chalk229.default.bold(slug)}
65349
+ `);
65350
+ for (const finding of findings) {
65351
+ output_manager_default.print(` ${finding}
65352
+ `);
65353
+ }
65354
+ for (const finding of mutedFindings.sort()) {
65355
+ output_manager_default.print(` ${import_chalk229.default.dim(`${finding} (muted)`)}
65356
+ `);
65357
+ }
65358
+ if (posture && posture.violationsCount > findings.length) {
65359
+ output_manager_default.print(
65360
+ ` ${import_chalk229.default.gray(`Showing ${findings.length} of ${posture.violationsCount}${posture.truncated ? "+" : ""} findings (raise with --limit)`)}
65361
+ `
65362
+ );
65363
+ }
65364
+ }
65365
+
65366
+ // src/commands/security/index.ts
65367
+ var COMMAND_CONFIG46 = {
65368
+ check: ["check"]
65369
+ };
65370
+ async function security(client) {
65371
+ let parsedArgs;
65372
+ const flagsSpecification = getFlagsSpecification(securityCommand.options);
65373
+ try {
65374
+ parsedArgs = parseArguments(client.argv.slice(2), flagsSpecification, {
65375
+ permissive: true
65376
+ });
65377
+ } catch (error) {
65378
+ printError(error);
65379
+ return 1;
65380
+ }
65381
+ const telemetry2 = new SecurityTelemetryClient({
65382
+ opts: {
65383
+ store: client.telemetryEventStore
65384
+ }
65385
+ });
65386
+ const { args, subcommandOriginal } = getSubcommand5(
65387
+ parsedArgs.args.slice(1),
65388
+ COMMAND_CONFIG46
65389
+ );
65390
+ if (parsedArgs.flags["--help"]) {
65391
+ telemetry2.trackCliFlagHelp("security", subcommandOriginal);
65392
+ output_manager_default.print(
65393
+ help(checkSubcommand2, {
65394
+ parent: securityCommand,
65395
+ columns: client.stderr.columns
65396
+ })
65397
+ );
65398
+ return 2;
65399
+ }
65400
+ telemetry2.trackCliSubcommandCheck(subcommandOriginal);
65401
+ return check2(client, args);
65402
+ }
65403
+
65404
+ // src/commands/skills/index.ts
65405
+ var import_chalk230 = __toESM(require_source(), 1);
64695
65406
  var import_frameworks3 = __toESM(require_frameworks(), 1);
64696
65407
  var import_fs_detectors = __toESM(require_dist3(), 1);
64697
65408
  import { access as access3, readFile as readFile9 } from "fs/promises";
@@ -64904,7 +65615,7 @@ async function autoDetect(client, cwd, asJson, yes) {
64904
65615
  "Could not detect a framework or notable dependencies in this directory."
64905
65616
  );
64906
65617
  output_manager_default.log(
64907
- `Try searching directly: ${import_chalk229.default.cyan("vercel skills <query>")}`
65618
+ `Try searching directly: ${import_chalk230.default.cyan("vercel skills <query>")}`
64908
65619
  );
64909
65620
  return 0;
64910
65621
  }
@@ -64916,7 +65627,7 @@ async function autoDetect(client, cwd, asJson, yes) {
64916
65627
  if (deps.length > 0)
64917
65628
  detectedParts.push(deps.join(", "));
64918
65629
  output_manager_default.stopSpinner();
64919
- output_manager_default.log(`Detected: ${import_chalk229.default.bold(detectedParts.join(" + "))}`);
65630
+ output_manager_default.log(`Detected: ${import_chalk230.default.bold(detectedParts.join(" + "))}`);
64920
65631
  output_manager_default.spinner("Searching for relevant skills...");
64921
65632
  const queries = [];
64922
65633
  if (framework) {
@@ -64982,7 +65693,7 @@ async function autoDetect(client, cwd, asJson, yes) {
64982
65693
  return exitCode2;
64983
65694
  const installable = displayedResults.map((s, i) => ({ ...s, installed: installedChecks[i] })).filter((s) => !s.installed);
64984
65695
  if (installable.length === 0) {
64985
- output_manager_default.log(import_chalk229.default.green("All recommended skills are already installed."));
65696
+ output_manager_default.log(import_chalk230.default.green("All recommended skills are already installed."));
64986
65697
  return 0;
64987
65698
  }
64988
65699
  let toInstall;
@@ -64997,7 +65708,7 @@ async function autoDetect(client, cwd, asJson, yes) {
64997
65708
  const selected = await client.input.checkbox({
64998
65709
  message: "Select skills to install",
64999
65710
  choices: installable.map((s) => ({
65000
- name: `${s.skillId} ${import_chalk229.default.gray(`(${s.source})`)}`,
65711
+ name: `${s.skillId} ${import_chalk230.default.gray(`(${s.source})`)}`,
65001
65712
  value: s,
65002
65713
  checked: true
65003
65714
  }))
@@ -65053,7 +65764,7 @@ async function displayResults(client, results, asJson, context, cwd) {
65053
65764
  if (results.length === 0) {
65054
65765
  output_manager_default.log("No skills found.");
65055
65766
  output_manager_default.log(
65056
- `Try searching directly: ${import_chalk229.default.cyan("vercel skills <query>")}`
65767
+ `Try searching directly: ${import_chalk230.default.cyan("vercel skills <query>")}`
65057
65768
  );
65058
65769
  return empty;
65059
65770
  }
@@ -65073,12 +65784,12 @@ async function displayResults(client, results, asJson, context, cwd) {
65073
65784
  return { exitCode: 0, results, installedChecks };
65074
65785
  }
65075
65786
  const tableData = [
65076
- ["Skill", "Installs", "Source", ""].map((h) => import_chalk229.default.bold(import_chalk229.default.cyan(h))),
65787
+ ["Skill", "Installs", "Source", ""].map((h) => import_chalk230.default.bold(import_chalk230.default.cyan(h))),
65077
65788
  ...results.map((s, i) => [
65078
65789
  s.skillId,
65079
65790
  formatInstalls(s.installs),
65080
- import_chalk229.default.gray(s.source),
65081
- installedChecks[i] ? import_chalk229.default.green("installed") : ""
65791
+ import_chalk230.default.gray(s.source),
65792
+ installedChecks[i] ? import_chalk230.default.green("installed") : ""
65082
65793
  ])
65083
65794
  ];
65084
65795
  output_manager_default.log(`
@@ -65097,16 +65808,16 @@ function runCommand(cmd2, args) {
65097
65808
 
65098
65809
  // src/commands/target/list.ts
65099
65810
  var import_ms35 = __toESM(require_ms(), 1);
65100
- var import_chalk230 = __toESM(require_source(), 1);
65811
+ var import_chalk231 = __toESM(require_source(), 1);
65101
65812
  function formatBranchMatcher(branchMatcher) {
65102
65813
  if (branchMatcher?.type === "equals") {
65103
65814
  return branchMatcher.pattern;
65104
65815
  } else if (branchMatcher?.type === "startsWith") {
65105
- return `${branchMatcher.pattern}${import_chalk230.default.dim("*")}`;
65816
+ return `${branchMatcher.pattern}${import_chalk231.default.dim("*")}`;
65106
65817
  } else if (branchMatcher?.type === "endsWith") {
65107
- return `${import_chalk230.default.dim("*")}${branchMatcher.pattern}`;
65818
+ return `${import_chalk231.default.dim("*")}${branchMatcher.pattern}`;
65108
65819
  }
65109
- return import_chalk230.default.dim("No branch configuration");
65820
+ return import_chalk231.default.dim("No branch configuration");
65110
65821
  }
65111
65822
  var TYPE_MAP = {
65112
65823
  production: "Production",
@@ -65115,8 +65826,8 @@ var TYPE_MAP = {
65115
65826
  };
65116
65827
  var BRANCH_TRACKING_MAP = {
65117
65828
  production: (project) => project.link?.productionBranch ?? "main",
65118
- preview: (_, env) => env.slug === "preview" ? import_chalk230.default.dim("All unassigned git branches") : formatBranchMatcher(env.branchMatcher),
65119
- development: () => import_chalk230.default.dim("Accessible via CLI")
65829
+ preview: (_, env) => env.slug === "preview" ? import_chalk231.default.dim("All unassigned git branches") : formatBranchMatcher(env.branchMatcher),
65830
+ development: () => import_chalk231.default.dim("Accessible via CLI")
65120
65831
  };
65121
65832
  async function list19(client, argv) {
65122
65833
  const { cwd } = client;
@@ -65189,12 +65900,12 @@ async function list19(client, argv) {
65189
65900
  `);
65190
65901
  } else {
65191
65902
  output_manager_default.log(
65192
- `${result.length} Environment${result.length === 1 ? "" : "s"} found under ${projectSlugLink} ${import_chalk230.default.gray(`[${elapsed2}]`)}`
65903
+ `${result.length} Environment${result.length === 1 ? "" : "s"} found under ${projectSlugLink} ${import_chalk231.default.gray(`[${elapsed2}]`)}`
65193
65904
  );
65194
65905
  const tablePrint = table(
65195
65906
  [
65196
65907
  ["Target Name", "Branch Tracking", "Type", "Updated"].map(
65197
- (header) => import_chalk230.default.bold(import_chalk230.default.cyan(header))
65908
+ (header) => import_chalk231.default.bold(import_chalk231.default.cyan(header))
65198
65909
  ),
65199
65910
  ...result.flatMap((target) => {
65200
65911
  return [
@@ -65202,7 +65913,7 @@ async function list19(client, argv) {
65202
65913
  formatEnvironment(link2.org.slug, link2.project.name, target),
65203
65914
  BRANCH_TRACKING_MAP[target.type](link2.project, target),
65204
65915
  TYPE_MAP[target.type],
65205
- import_chalk230.default.gray(
65916
+ import_chalk231.default.gray(
65206
65917
  target.updatedAt > 0 ? (0, import_ms35.default)(Date.now() - target.updatedAt) : "-"
65207
65918
  )
65208
65919
  ]
@@ -65262,7 +65973,7 @@ var TargetTelemetryClient = class extends TelemetryClient {
65262
65973
  };
65263
65974
 
65264
65975
  // src/commands/target/index.ts
65265
- var COMMAND_CONFIG46 = {
65976
+ var COMMAND_CONFIG47 = {
65266
65977
  ls: getCommandAliases(listSubcommand18)
65267
65978
  };
65268
65979
  async function main27(client) {
@@ -65307,14 +66018,14 @@ async function main27(client) {
65307
66018
  telemetry2.trackCliSubcommandList(subcommand);
65308
66019
  return await list19(client, args);
65309
66020
  default:
65310
- output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG46));
66021
+ output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG47));
65311
66022
  output_manager_default.print(help(targetCommand, { columns: client.stderr.columns }));
65312
66023
  return 2;
65313
66024
  }
65314
66025
  }
65315
66026
 
65316
66027
  // src/commands/teams/list.ts
65317
- var import_chalk231 = __toESM(require_source(), 1);
66028
+ var import_chalk232 = __toESM(require_source(), 1);
65318
66029
 
65319
66030
  // src/util/telemetry/commands/teams/list.ts
65320
66031
  var TeamsListTelemetryClient = class extends TelemetryClient {
@@ -65474,7 +66185,7 @@ async function list20(client, argv) {
65474
66185
  client.stdout.write("\n");
65475
66186
  const teamTable = table(
65476
66187
  [
65477
- ["id", "Team name"].map((str) => (0, import_chalk231.gray)(str)),
66188
+ ["id", "Team name"].map((str) => (0, import_chalk232.gray)(str)),
65478
66189
  ...teamList.map((team) => [team.value, team.name])
65479
66190
  ],
65480
66191
  { hsep: 5 }
@@ -65502,10 +66213,10 @@ async function list20(client, argv) {
65502
66213
  }
65503
66214
 
65504
66215
  // src/commands/teams/add.ts
65505
- var import_chalk233 = __toESM(require_source(), 1);
66216
+ var import_chalk234 = __toESM(require_source(), 1);
65506
66217
 
65507
66218
  // src/commands/teams/invite.ts
65508
- var import_chalk232 = __toESM(require_source(), 1);
66219
+ var import_chalk233 = __toESM(require_source(), 1);
65509
66220
 
65510
66221
  // src/util/input/regexes.ts
65511
66222
  var email = /.+@.+\..+$/;
@@ -65523,7 +66234,7 @@ async function inviteUserToTeam(client, teamId, email2) {
65523
66234
  }
65524
66235
 
65525
66236
  // src/commands/teams/invite.ts
65526
- var import_error_utils19 = __toESM(require_dist(), 1);
66237
+ var import_error_utils20 = __toESM(require_dist(), 1);
65527
66238
 
65528
66239
  // src/util/telemetry/commands/teams/invite.ts
65529
66240
  var TeamsInviteTelemetryClient = class extends TelemetryClient {
@@ -65644,7 +66355,7 @@ Please select a team scope using ${getCommandName(
65644
66355
  return 1;
65645
66356
  }
65646
66357
  output_manager_default.log(
65647
- introMsg || `Inviting team members to ${import_chalk232.default.bold(currentTeam.name)}`
66358
+ introMsg || `Inviting team members to ${import_chalk233.default.bold(currentTeam.name)}`
65648
66359
  );
65649
66360
  telemetry2.trackCliArgumentEmail(emails);
65650
66361
  if (emails.length > 0) {
@@ -65687,10 +66398,10 @@ Please select a team scope using ${getCommandName(
65687
66398
  throw err;
65688
66399
  }
65689
66400
  output_manager_default.log(
65690
- `${import_chalk232.default.cyan(chars_default.tick)} ${email3}${userInfo2 ? ` (${userInfo2})` : ""} ${elapsed2()}`
66401
+ `${import_chalk233.default.cyan(chars_default.tick)} ${email3}${userInfo2 ? ` (${userInfo2})` : ""} ${elapsed2()}`
65691
66402
  );
65692
66403
  } else {
65693
- output_manager_default.log(`${import_chalk232.default.red(`\u2716 ${email3}`)} ${import_chalk232.default.gray("[invalid]")}`);
66404
+ output_manager_default.log(`${import_chalk233.default.red(`\u2716 ${email3}`)} ${import_chalk233.default.gray("[invalid]")}`);
65694
66405
  }
65695
66406
  }
65696
66407
  return 0;
@@ -65707,7 +66418,7 @@ Please select a team scope using ${getCommandName(
65707
66418
  validate: validateEmail
65708
66419
  });
65709
66420
  } catch (err) {
65710
- if (!(0, import_error_utils19.isError)(err) || err.message !== "USER_ABORT") {
66421
+ if (!(0, import_error_utils20.isError)(err) || err.message !== "USER_ABORT") {
65711
66422
  throw err;
65712
66423
  }
65713
66424
  }
@@ -65723,24 +66434,24 @@ Please select a team scope using ${getCommandName(
65723
66434
  );
65724
66435
  email2 = `${email2}${username ? ` (${username})` : ""} ${elapsed2()}`;
65725
66436
  emails.push(email2);
65726
- output_manager_default.log(`${import_chalk232.default.cyan(chars_default.tick)} ${sentEmailPrefix}${email2}`);
66437
+ output_manager_default.log(`${import_chalk233.default.cyan(chars_default.tick)} ${sentEmailPrefix}${email2}`);
65727
66438
  if (hasError) {
65728
66439
  hasError = false;
65729
66440
  process.stderr.write(eraseLines(emails.length + 2));
65730
66441
  output_manager_default.log(
65731
- introMsg || `Inviting team members to ${import_chalk232.default.bold(currentTeam.name)}`
66442
+ introMsg || `Inviting team members to ${import_chalk233.default.bold(currentTeam.name)}`
65732
66443
  );
65733
66444
  for (const email3 of emails) {
65734
- output_manager_default.log(`${import_chalk232.default.cyan(chars_default.tick)} ${inviteUserPrefix}${email3}`);
66445
+ output_manager_default.log(`${import_chalk233.default.cyan(chars_default.tick)} ${inviteUserPrefix}${email3}`);
65735
66446
  }
65736
66447
  }
65737
66448
  } catch (err) {
65738
66449
  output_manager_default.stopSpinner();
65739
66450
  process.stderr.write(eraseLines(emails.length + 2));
65740
- output_manager_default.error((0, import_error_utils19.errorToString)(err));
66451
+ output_manager_default.error((0, import_error_utils20.errorToString)(err));
65741
66452
  hasError = true;
65742
66453
  for (const email3 of emails) {
65743
- output_manager_default.log(`${import_chalk232.default.cyan(chars_default.tick)} ${sentEmailPrefix}${email3}`);
66454
+ output_manager_default.log(`${import_chalk233.default.cyan(chars_default.tick)} ${sentEmailPrefix}${email3}`);
65744
66455
  }
65745
66456
  }
65746
66457
  }
@@ -65753,7 +66464,7 @@ Please select a team scope using ${getCommandName(
65753
66464
  } else {
65754
66465
  output_manager_default.success(`Invited ${n} teammate${n > 1 ? "s" : ""}`);
65755
66466
  for (const email3 of emails) {
65756
- output_manager_default.log(`${import_chalk232.default.cyan(chars_default.tick)} ${inviteUserPrefix}${email3}`);
66467
+ output_manager_default.log(`${import_chalk233.default.cyan(chars_default.tick)} ${inviteUserPrefix}${email3}`);
65757
66468
  }
65758
66469
  }
65759
66470
  return 0;
@@ -65790,10 +66501,10 @@ async function patchTeam(client, teamId, payload) {
65790
66501
  }
65791
66502
 
65792
66503
  // src/commands/teams/add.ts
65793
- var import_error_utils20 = __toESM(require_dist(), 1);
66504
+ var import_error_utils21 = __toESM(require_dist(), 1);
65794
66505
  var validateSlug = (value) => /^[a-z]+[a-z0-9_-]*$/.test(value);
65795
66506
  var validateName = (value) => /^[ a-zA-Z0-9_-]+$/.test(value);
65796
- var teamUrlPrefix = "Team URL".padEnd(14) + import_chalk233.default.gray("vercel.com/");
66507
+ var teamUrlPrefix = "Team URL".padEnd(14) + import_chalk234.default.gray("vercel.com/");
65797
66508
  var teamNamePrefix = "Team Name".padEnd(14);
65798
66509
  var CREATE_TEAM_TIMEOUT_MS = 3e4;
65799
66510
  var TIMEOUT_HINT = "The request took too long and was cancelled. The team URL may already be taken, or the server may be slow. Try a different slug (e.g. your-company-name) or try again later. Run with `--debug` to see where the request is getting stuck.";
@@ -65824,8 +66535,8 @@ function createTeamWithTimeout(client, slug) {
65824
66535
  ]);
65825
66536
  }
65826
66537
  function formatCreateTeamError(err, slug) {
65827
- const isAbort = (0, import_error_utils20.isError)(err) && err.name === "AbortError";
65828
- const isTimeoutMsg = (0, import_error_utils20.isError)(err) && err.message === "Request timed out.";
66538
+ const isAbort = (0, import_error_utils21.isError)(err) && err.name === "AbortError";
66539
+ const isTimeoutMsg = (0, import_error_utils21.isError)(err) && err.message === "Request timed out.";
65829
66540
  if (isAbort || isTimeoutMsg) {
65830
66541
  return TIMEOUT_HINT;
65831
66542
  }
@@ -65844,16 +66555,16 @@ function formatCreateTeamError(err, slug) {
65844
66555
  }
65845
66556
  if (isAPIError(err) && err.status === 400) {
65846
66557
  const msg = (err.serverMessage || err.message || "").toLowerCase();
65847
- const slugHint = msg.includes("slug") || msg.includes("cannot be used") ? `That team URL (${import_chalk233.default.cyan(`vercel.com/${slug}`)}) is not available. It may already be taken. ` : "";
66558
+ const slugHint = msg.includes("slug") || msg.includes("cannot be used") ? `That team URL (${import_chalk234.default.cyan(`vercel.com/${slug}`)}) is not available. It may already be taken. ` : "";
65848
66559
  const paymentHint = msg.includes("payment") ? "A payment method is required to create a team. " : "";
65849
66560
  const prefix = slugHint || paymentHint;
65850
66561
  return prefix ? `${prefix}${prefix.trim() ? "\n" : ""}${err.serverMessage || err.message}` : err.serverMessage || err.message;
65851
66562
  }
65852
- return (0, import_error_utils20.errorToString)(err);
66563
+ return (0, import_error_utils21.errorToString)(err);
65853
66564
  }
65854
66565
  function formatCreateTeamErrorPlain(err, slug) {
65855
- const isAbort = (0, import_error_utils20.isError)(err) && err.name === "AbortError";
65856
- const isTimeoutMsg = (0, import_error_utils20.isError)(err) && err.message === "Request timed out.";
66566
+ const isAbort = (0, import_error_utils21.isError)(err) && err.name === "AbortError";
66567
+ const isTimeoutMsg = (0, import_error_utils21.isError)(err) && err.message === "Request timed out.";
65857
66568
  if (isAbort || isTimeoutMsg) {
65858
66569
  return TIMEOUT_HINT;
65859
66570
  }
@@ -65867,7 +66578,7 @@ function formatCreateTeamErrorPlain(err, slug) {
65867
66578
  const prefix = slugHint || paymentHint;
65868
66579
  return prefix ? `${prefix}${prefix.trim() ? "\n" : ""}${err.serverMessage || err.message}` : err.serverMessage || err.message;
65869
66580
  }
65870
- return (0, import_error_utils20.errorToString)(err);
66581
+ return (0, import_error_utils21.errorToString)(err);
65871
66582
  }
65872
66583
  var VERCEL_ACCOUNT_BILLING_URL = "https://vercel.com/account/billing";
65873
66584
  function createTeamErrorReason(err) {
@@ -65880,7 +66591,7 @@ function createTeamErrorReason(err) {
65880
66591
  }
65881
66592
  if (isAPIError(err) && err.status === 429)
65882
66593
  return "rate_limited";
65883
- if ((0, import_error_utils20.isError)(err) && (err.name === "AbortError" || err.message === "Request timed out.")) {
66594
+ if ((0, import_error_utils21.isError)(err) && (err.name === "AbortError" || err.message === "Request timed out.")) {
65884
66595
  return "timeout";
65885
66596
  }
65886
66597
  return "team_creation_failed";
@@ -66027,19 +66738,19 @@ async function add12(client, argv = []) {
66027
66738
  {
66028
66739
  status: "error",
66029
66740
  reason: "team_update_failed",
66030
- message: (0, import_error_utils20.errorToString)(err)
66741
+ message: (0, import_error_utils21.errorToString)(err)
66031
66742
  },
66032
66743
  1
66033
66744
  );
66034
66745
  }
66035
- output_manager_default.error((0, import_error_utils20.errorToString)(err));
66746
+ output_manager_default.error((0, import_error_utils21.errorToString)(err));
66036
66747
  return 1;
66037
66748
  }
66038
66749
  output_manager_default.stopSpinner();
66039
66750
  client.config.currentTeam = team2.id;
66040
66751
  writeToConfigFile(client.config);
66041
66752
  output_manager_default.success(
66042
- `Team ${import_chalk233.default.bold(team2.name)} (${import_chalk233.default.cyan(`vercel.com/${slug2}`)}) created.`
66753
+ `Team ${import_chalk234.default.bold(team2.name)} (${import_chalk234.default.cyan(`vercel.com/${slug2}`)}) created.`
66043
66754
  );
66044
66755
  return 0;
66045
66756
  }
@@ -66047,7 +66758,7 @@ async function add12(client, argv = []) {
66047
66758
  let team;
66048
66759
  let elapsed2;
66049
66760
  output_manager_default.log(
66050
- `Pick a team identifier for its URL (e.g.: ${import_chalk233.default.cyan(
66761
+ `Pick a team identifier for its URL (e.g.: ${import_chalk234.default.cyan(
66051
66762
  "`vercel.com/acme`"
66052
66763
  )})`
66053
66764
  );
@@ -66059,7 +66770,7 @@ async function add12(client, argv = []) {
66059
66770
  default: slug
66060
66771
  });
66061
66772
  } catch (err) {
66062
- if ((0, import_error_utils20.isError)(err) && err.message === "USER_ABORT") {
66773
+ if ((0, import_error_utils21.isError)(err) && err.message === "USER_ABORT") {
66063
66774
  output_manager_default.log("Canceled");
66064
66775
  return 0;
66065
66776
  }
@@ -66079,7 +66790,7 @@ async function add12(client, argv = []) {
66079
66790
  output_manager_default.stopSpinner();
66080
66791
  process.stdout.write(eraseLines(2));
66081
66792
  output_manager_default.success(`Team created ${elapsed2()}`);
66082
- output_manager_default.log(`${import_chalk233.default.cyan(`${chars_default.tick} `) + teamUrlPrefix + slug}
66793
+ output_manager_default.log(`${import_chalk234.default.cyan(`${chars_default.tick} `) + teamUrlPrefix + slug}
66083
66794
  `);
66084
66795
  output_manager_default.log("Pick a display name for your team");
66085
66796
  let name = nameFlag?.trim();
@@ -66090,7 +66801,7 @@ async function add12(client, argv = []) {
66090
66801
  default: name
66091
66802
  });
66092
66803
  } catch (err) {
66093
- if ((0, import_error_utils20.isError)(err) && err.message === "USER_ABORT") {
66804
+ if ((0, import_error_utils21.isError)(err) && err.message === "USER_ABORT") {
66094
66805
  output_manager_default.log("No name specified");
66095
66806
  return 2;
66096
66807
  }
@@ -66103,7 +66814,7 @@ async function add12(client, argv = []) {
66103
66814
  process.stdout.write(eraseLines(2));
66104
66815
  team = Object.assign(team, res);
66105
66816
  output_manager_default.success(`Team name saved ${elapsed2()}`);
66106
- output_manager_default.log(`${import_chalk233.default.cyan(`${chars_default.tick} `) + teamNamePrefix + team.name}
66817
+ output_manager_default.log(`${import_chalk234.default.cyan(`${chars_default.tick} `) + teamNamePrefix + team.name}
66107
66818
  `);
66108
66819
  output_manager_default.spinner("Saving");
66109
66820
  client.config.currentTeam = team.id;
@@ -66119,7 +66830,7 @@ async function add12(client, argv = []) {
66119
66830
  }
66120
66831
 
66121
66832
  // src/commands/teams/switch.ts
66122
- var import_chalk234 = __toESM(require_source(), 1);
66833
+ var import_chalk235 = __toESM(require_source(), 1);
66123
66834
 
66124
66835
  // src/util/telemetry/commands/teams/switch.ts
66125
66836
  var TeamsSwitchTelemetryClient = class extends TelemetryClient {
@@ -66237,7 +66948,7 @@ async function change(client, argv) {
66237
66948
  let title6 = `${team.name} (${team.slug})`;
66238
66949
  const selected = team.id === currentTeam?.id;
66239
66950
  if (selected) {
66240
- title6 += ` ${import_chalk234.default.bold("(current)")}`;
66951
+ title6 += ` ${import_chalk235.default.bold("(current)")}`;
66241
66952
  }
66242
66953
  if (team.limited) {
66243
66954
  title6 += ` ${emoji("locked")}`;
@@ -66249,7 +66960,7 @@ async function change(client, argv) {
66249
66960
  selected
66250
66961
  };
66251
66962
  });
66252
- let suffix = personalScopeSelected ? ` ${import_chalk234.default.bold("(current)")}` : "";
66963
+ let suffix = personalScopeSelected ? ` ${import_chalk235.default.bold("(current)")}` : "";
66253
66964
  if (user.limited) {
66254
66965
  suffix += ` ${emoji("locked")}`;
66255
66966
  }
@@ -66339,7 +67050,7 @@ async function change(client, argv) {
66339
67050
  }
66340
67051
  updateCurrentTeam(config);
66341
67052
  output_manager_default.success(
66342
- `Your account (${import_chalk234.default.bold(user.username)}) is now active!`
67053
+ `Your account (${import_chalk235.default.bold(user.username)}) is now active!`
66343
67054
  );
66344
67055
  await warnIfStaleLinkExists(client, user.id);
66345
67056
  return 0;
@@ -66363,7 +67074,7 @@ async function change(client, argv) {
66363
67074
  );
66364
67075
  }
66365
67076
  output_manager_default.error(
66366
- `You do not have permission to access scope ${import_chalk234.default.bold(desiredSlug)}.`
67077
+ `You do not have permission to access scope ${import_chalk235.default.bold(desiredSlug)}.`
66367
67078
  );
66368
67079
  return 1;
66369
67080
  }
@@ -66381,7 +67092,7 @@ async function change(client, argv) {
66381
67092
  }
66382
67093
  updateCurrentTeam(config, newTeam);
66383
67094
  output_manager_default.success(
66384
- `The team ${import_chalk234.default.bold(newTeam.name)} (${newTeam.slug}) is now active!`
67095
+ `The team ${import_chalk235.default.bold(newTeam.name)} (${newTeam.slug}) is now active!`
66385
67096
  );
66386
67097
  await warnIfStaleLinkExists(client, newTeam.id);
66387
67098
  return 0;
@@ -66571,7 +67282,7 @@ async function request(client, argv) {
66571
67282
  }
66572
67283
 
66573
67284
  // src/commands/teams/members.ts
66574
- var import_chalk235 = __toESM(require_source(), 1);
67285
+ var import_chalk236 = __toESM(require_source(), 1);
66575
67286
  async function members2(client, argv) {
66576
67287
  let parsedArgs;
66577
67288
  const flagsSpecification = getFlagsSpecification(membersSubcommand2.options);
@@ -66634,7 +67345,7 @@ async function members2(client, argv) {
66634
67345
  return 0;
66635
67346
  }
66636
67347
  const rows = [
66637
- ["uid", "Identity", "Role"].map((str) => (0, import_chalk235.gray)(str)),
67348
+ ["uid", "Identity", "Role"].map((str) => (0, import_chalk236.gray)(str)),
66638
67349
  ...members3.map((member) => [
66639
67350
  member.uid,
66640
67351
  member.username || member.email || "",
@@ -66652,7 +67363,7 @@ async function members2(client, argv) {
66652
67363
  }
66653
67364
 
66654
67365
  // src/commands/teams/sso.ts
66655
- var import_chalk236 = __toESM(require_source(), 1);
67366
+ var import_chalk237 = __toESM(require_source(), 1);
66656
67367
  async function sso(client, argv) {
66657
67368
  let parsedArgs;
66658
67369
  const flagsSpecification = getFlagsSpecification(ssoSubcommand.options);
@@ -66687,14 +67398,14 @@ async function sso(client, argv) {
66687
67398
  `);
66688
67399
  return 0;
66689
67400
  }
66690
- output_manager_default.log(`${import_chalk236.default.bold("Team")} ${full.name} (${import_chalk236.default.cyan(full.slug)})`);
67401
+ output_manager_default.log(`${import_chalk237.default.bold("Team")} ${full.name} (${import_chalk237.default.cyan(full.slug)})`);
66691
67402
  if (full.saml) {
66692
67403
  output_manager_default.log(
66693
- `${import_chalk236.default.cyan("SAML enforced:")} ${String(full.saml.enforced)}`
67404
+ `${import_chalk237.default.cyan("SAML enforced:")} ${String(full.saml.enforced)}`
66694
67405
  );
66695
67406
  if (full.saml.connection?.state) {
66696
67407
  output_manager_default.log(
66697
- `${import_chalk236.default.cyan("Connection state:")} ${full.saml.connection.state}`
67408
+ `${import_chalk237.default.cyan("Connection state:")} ${full.saml.connection.state}`
66698
67409
  );
66699
67410
  }
66700
67411
  } else {
@@ -66773,7 +67484,7 @@ var TeamsTelemetryClient = class extends TelemetryClient {
66773
67484
  };
66774
67485
 
66775
67486
  // src/commands/teams/index.ts
66776
- var COMMAND_CONFIG47 = {
67487
+ var COMMAND_CONFIG48 = {
66777
67488
  list: ["ls", "list"],
66778
67489
  switch: ["switch", "change"],
66779
67490
  add: ["create", "add"],
@@ -66814,7 +67525,7 @@ async function teams(client) {
66814
67525
  }
66815
67526
  const { subcommand, args, subcommandOriginal } = getSubcommand5(
66816
67527
  parsedArgs.args.slice(1),
66817
- COMMAND_CONFIG47
67528
+ COMMAND_CONFIG48
66818
67529
  );
66819
67530
  const needHelp = parsedArgs.flags["--help"];
66820
67531
  if (!subcommand && needHelp) {
@@ -66910,7 +67621,7 @@ async function teams(client) {
66910
67621
  }
66911
67622
 
66912
67623
  // src/commands/tokens/ls.ts
66913
- var import_chalk237 = __toESM(require_source(), 1);
67624
+ var import_chalk238 = __toESM(require_source(), 1);
66914
67625
  async function ls8(client, argv) {
66915
67626
  let parsedArgs;
66916
67627
  const flagsSpecification = getFlagsSpecification(listSubcommand20.options);
@@ -66951,7 +67662,7 @@ async function ls8(client, argv) {
66951
67662
  return 0;
66952
67663
  }
66953
67664
  const rows = [
66954
- ["id", "name", "type", "active"].map((h) => (0, import_chalk237.gray)(h)),
67665
+ ["id", "name", "type", "active"].map((h) => (0, import_chalk238.gray)(h)),
66955
67666
  ...tokens.map((t) => [
66956
67667
  t.id ?? "",
66957
67668
  t.name ?? "",
@@ -67246,7 +67957,7 @@ var TokensTelemetryClient = class extends TelemetryClient {
67246
67957
  };
67247
67958
 
67248
67959
  // src/commands/tokens/index.ts
67249
- var COMMAND_CONFIG48 = {
67960
+ var COMMAND_CONFIG49 = {
67250
67961
  add: ["add", "create"],
67251
67962
  remove: ["rm", "remove", "delete"],
67252
67963
  ls: ["ls", "list"]
@@ -67269,7 +67980,7 @@ async function main28(client) {
67269
67980
  });
67270
67981
  const { subcommand, args, subcommandOriginal } = getSubcommand5(
67271
67982
  parsedArgs.args.slice(1),
67272
- COMMAND_CONFIG48
67983
+ COMMAND_CONFIG49
67273
67984
  );
67274
67985
  const needHelp = parsedArgs.flags["--help"];
67275
67986
  if (!subcommand && needHelp) {
@@ -67309,16 +68020,16 @@ async function main28(client) {
67309
68020
  }
67310
68021
 
67311
68022
  // src/commands/telemetry/status.ts
67312
- var import_chalk238 = __toESM(require_source(), 1);
68023
+ var import_chalk239 = __toESM(require_source(), 1);
67313
68024
  async function status2(client) {
67314
68025
  const enabled = client.config.telemetry?.enabled !== false;
67315
- const status4 = enabled ? import_chalk238.default.green("Enabled") : import_chalk238.default.red("Disabled");
68026
+ const status4 = enabled ? import_chalk239.default.green("Enabled") : import_chalk239.default.red("Disabled");
67316
68027
  output_manager_default.print("\n");
67317
- output_manager_default.log(`${import_chalk238.default.bold("Telemetry status")}: ${status4}
68028
+ output_manager_default.log(`${import_chalk239.default.bold("Telemetry status")}: ${status4}
67318
68029
  `);
67319
68030
  const learnMoreMessage = `
67320
68031
 
67321
- Learn more: ${import_chalk238.default.cyan("https://vercel.com/docs/cli/about-telemetry")}`;
68032
+ Learn more: ${import_chalk239.default.cyan("https://vercel.com/docs/cli/about-telemetry")}`;
67322
68033
  if (enabled) {
67323
68034
  output_manager_default.log(`You have opted in to Vercel CLI telemetry${learnMoreMessage}`);
67324
68035
  } else {
@@ -67412,8 +68123,8 @@ var TelemetryTelemetryClient = class extends TelemetryClient {
67412
68123
  };
67413
68124
 
67414
68125
  // src/commands/telemetry/index.ts
67415
- var import_chalk239 = __toESM(require_source(), 1);
67416
- var COMMAND_CONFIG49 = {
68126
+ var import_chalk240 = __toESM(require_source(), 1);
68127
+ var COMMAND_CONFIG50 = {
67417
68128
  status: getCommandAliases(statusSubcommand4),
67418
68129
  enable: getCommandAliases(enableSubcommand4),
67419
68130
  disable: getCommandAliases(disableSubcommand4),
@@ -67435,7 +68146,7 @@ async function telemetry(client) {
67435
68146
  }
67436
68147
  const { subcommand, args, subcommandOriginal } = getSubcommand5(
67437
68148
  parsedArguments.args.slice(1),
67438
- COMMAND_CONFIG49
68149
+ COMMAND_CONFIG50
67439
68150
  );
67440
68151
  const needHelp = parsedArguments.flags["--help"];
67441
68152
  function printHelp(command) {
@@ -67480,7 +68191,7 @@ async function telemetry(client) {
67480
68191
  default: {
67481
68192
  const errorMessage2 = parsedArguments.args.length !== 2 ? "Invalid number of arguments" : "Invalid subcommand";
67482
68193
  output_manager_default.print(
67483
- `${import_chalk239.default.red("Error")}: ${errorMessage2}. See help instructions for usage:
68194
+ `${import_chalk240.default.red("Error")}: ${errorMessage2}. See help instructions for usage:
67484
68195
  `
67485
68196
  );
67486
68197
  output_manager_default.print(help(telemetryCommand, { columns: client.stderr.columns }));
@@ -67512,8 +68223,8 @@ var TracesTelemetryClient = class extends TelemetryClient {
67512
68223
  });
67513
68224
  }
67514
68225
  }
67515
- trackCliFlagOpen(open16) {
67516
- if (open16) {
68226
+ trackCliFlagOpen(open17) {
68227
+ if (open17) {
67517
68228
  this.trackCliFlag("open");
67518
68229
  }
67519
68230
  }
@@ -68166,7 +68877,7 @@ async function get3(client, telemetry2) {
68166
68877
  }
68167
68878
 
68168
68879
  // src/commands/traces/index.ts
68169
- var COMMAND_CONFIG50 = {
68880
+ var COMMAND_CONFIG51 = {
68170
68881
  get: getCommandAliases(getSubcommand2),
68171
68882
  create: getCommandAliases(createSubcommand5)
68172
68883
  };
@@ -68192,7 +68903,7 @@ async function traces(client) {
68192
68903
  }
68193
68904
  const { subcommand, subcommandOriginal } = getSubcommand5(
68194
68905
  parsedArgs.args.slice(1),
68195
- COMMAND_CONFIG50
68906
+ COMMAND_CONFIG51
68196
68907
  );
68197
68908
  if (parsedArgs.flags["--help"]) {
68198
68909
  telemetry2.trackCliFlagHelp("traces", subcommandOriginal);
@@ -68347,7 +69058,7 @@ async function upgrade(client) {
68347
69058
  }
68348
69059
 
68349
69060
  // src/commands/version/index.ts
68350
- var import_chalk242 = __toESM(require_source(), 1);
69061
+ var import_chalk243 = __toESM(require_source(), 1);
68351
69062
 
68352
69063
  // src/commands/version/status.ts
68353
69064
  async function status3(client) {
@@ -68400,7 +69111,7 @@ async function status3(client) {
68400
69111
  }
68401
69112
 
68402
69113
  // src/commands/version/list.ts
68403
- var import_chalk240 = __toESM(require_source(), 1);
69114
+ var import_chalk241 = __toESM(require_source(), 1);
68404
69115
  var DEFAULT_COUNT = 20;
68405
69116
  async function list21() {
68406
69117
  output_manager_default.spinner("Fetching available versions\u2026", 0);
@@ -68423,23 +69134,23 @@ async function list21() {
68423
69134
  for (const version2 of shown) {
68424
69135
  const current = version2 === pkg_default.version;
68425
69136
  output_manager_default.print(
68426
- current ? `${import_chalk240.default.cyan(version2)} ${import_chalk240.default.dim("(current)")}
69137
+ current ? `${import_chalk241.default.cyan(version2)} ${import_chalk241.default.dim("(current)")}
68427
69138
  ` : `${version2}
68428
69139
  `
68429
69140
  );
68430
69141
  }
68431
69142
  if (versions2.length > shown.length) {
68432
- output_manager_default.print(import_chalk240.default.dim(`\u2026 and ${versions2.length - shown.length} more
69143
+ output_manager_default.print(import_chalk241.default.dim(`\u2026 and ${versions2.length - shown.length} more
68433
69144
  `));
68434
69145
  }
68435
69146
  return 0;
68436
69147
  }
68437
69148
 
68438
69149
  // src/commands/version/installed.ts
68439
- var import_chalk241 = __toESM(require_source(), 1);
69150
+ var import_chalk242 = __toESM(require_source(), 1);
68440
69151
  async function installed() {
68441
69152
  if (!await isCurlInstall()) {
68442
- output_manager_default.print(`${pkg_default.version} ${import_chalk241.default.dim("(current)")}
69153
+ output_manager_default.print(`${pkg_default.version} ${import_chalk242.default.dim("(current)")}
68443
69154
  `);
68444
69155
  output_manager_default.log(
68445
69156
  `This CLI is managed by a package manager, so only the current version is available. The recommended way to manage CLI versions is the installer: ${CURL_INSTALL_COMMAND}`
@@ -68463,7 +69174,7 @@ async function installed() {
68463
69174
  if (version2 === pinned)
68464
69175
  labels.push("pinned");
68465
69176
  output_manager_default.print(
68466
- active ? `${import_chalk241.default.cyan(version2)} ${import_chalk241.default.dim(`(${labels.join(", ")})`)}
69177
+ active ? `${import_chalk242.default.cyan(version2)} ${import_chalk242.default.dim(`(${labels.join(", ")})`)}
68467
69178
  ` : `${version2}
68468
69179
  `
68469
69180
  );
@@ -68641,7 +69352,7 @@ var VersionTelemetryClient = class extends TelemetryClient {
68641
69352
  };
68642
69353
 
68643
69354
  // src/commands/version/index.ts
68644
- var COMMAND_CONFIG51 = {
69355
+ var COMMAND_CONFIG52 = {
68645
69356
  list: getCommandAliases(listSubcommand22),
68646
69357
  installed: getCommandAliases(installedSubcommand),
68647
69358
  use: getCommandAliases(useSubcommand),
@@ -68664,7 +69375,7 @@ async function version(client) {
68664
69375
  }
68665
69376
  const { subcommand, args, subcommandOriginal } = getSubcommand5(
68666
69377
  parsedArguments.args.slice(1),
68667
- COMMAND_CONFIG51
69378
+ COMMAND_CONFIG52
68668
69379
  );
68669
69380
  const needHelp = parsedArguments.flags["--help"];
68670
69381
  function printHelp(command) {
@@ -68724,7 +69435,7 @@ async function version(client) {
68724
69435
  default: {
68725
69436
  if (parsedArguments.args.length > 1) {
68726
69437
  output_manager_default.print(
68727
- `${import_chalk242.default.red("Error")}: Invalid subcommand. See help instructions for usage:
69438
+ `${import_chalk243.default.red("Error")}: Invalid subcommand. See help instructions for usage:
68728
69439
  `
68729
69440
  );
68730
69441
  output_manager_default.print(help(versionCommand, { columns: client.stderr.columns }));
@@ -68736,7 +69447,7 @@ async function version(client) {
68736
69447
  }
68737
69448
 
68738
69449
  // src/commands/usage/index.ts
68739
- var import_chalk246 = __toESM(require_source(), 1);
69450
+ var import_chalk247 = __toESM(require_source(), 1);
68740
69451
  var import_jsonlines = __toESM(require_jsonlines(), 1);
68741
69452
 
68742
69453
  // src/util/telemetry/commands/usage/index.ts
@@ -68781,7 +69492,7 @@ var UsageTelemetryClient = class extends TelemetryClient {
68781
69492
  };
68782
69493
 
68783
69494
  // src/commands/usage/index.ts
68784
- var import_error_utils21 = __toESM(require_dist(), 1);
69495
+ var import_error_utils22 = __toESM(require_dist(), 1);
68785
69496
 
68786
69497
  // src/util/billing/period-utils.ts
68787
69498
  import { DateTime } from "luxon";
@@ -68890,19 +69601,19 @@ function isValidGroupByDimension(value) {
68890
69601
  }
68891
69602
 
68892
69603
  // src/commands/usage/output-aggregated.ts
68893
- var import_chalk243 = __toESM(require_source(), 1);
69604
+ var import_chalk244 = __toESM(require_source(), 1);
68894
69605
  function outputAggregated({ data, startTime }) {
68895
69606
  const { print, log } = output_manager_default;
68896
69607
  log(
68897
- `Usage for ${import_chalk243.default.bold(data.contextName)} ${elapsed(Date.now() - startTime)}`
69608
+ `Usage for ${import_chalk244.default.bold(data.contextName)} ${elapsed(Date.now() - startTime)}`
68898
69609
  );
68899
69610
  log("");
68900
69611
  const periodSuffix = data.usingDefaults ? " (current month)" : "";
68901
69612
  log(
68902
- `${import_chalk243.default.gray("Period:")} ${data.fromDisplay} to ${data.toDisplay}${periodSuffix}`
69613
+ `${import_chalk244.default.gray("Period:")} ${data.fromDisplay} to ${data.toDisplay}${periodSuffix}`
68903
69614
  );
68904
- log(`${import_chalk243.default.gray("Charges processed:")} ${data.chargeCount}`);
68905
- log(`${import_chalk243.default.gray("Pricing unit:")} ${data.pricingUnit}`);
69615
+ log(`${import_chalk244.default.gray("Charges processed:")} ${data.chargeCount}`);
69616
+ log(`${import_chalk244.default.gray("Pricing unit:")} ${data.pricingUnit}`);
68906
69617
  log("");
68907
69618
  const sortedServices = [...data.services.entries()].sort(
68908
69619
  (a, b) => b[1].billedCost - a[1].billedCost
@@ -68920,15 +69631,15 @@ function outputAggregated({ data, startTime }) {
68920
69631
  formatCurrency(svc.billedCost)
68921
69632
  ]);
68922
69633
  rows.push([
68923
- import_chalk243.default.bold("Total"),
68924
- import_chalk243.default.bold(
69634
+ import_chalk244.default.bold("Total"),
69635
+ import_chalk244.default.bold(
68925
69636
  formatQuantity(data.grandTotals.pricingQuantity, data.pricingUnit)
68926
69637
  ),
68927
- import_chalk243.default.bold(formatCurrency(data.grandTotals.effectiveCost)),
68928
- import_chalk243.default.bold(formatCurrency(data.grandTotals.billedCost))
69638
+ import_chalk244.default.bold(formatCurrency(data.grandTotals.effectiveCost)),
69639
+ import_chalk244.default.bold(formatCurrency(data.grandTotals.billedCost))
68929
69640
  ]);
68930
69641
  const tablePrint = table(
68931
- [headers.map((h) => import_chalk243.default.bold(import_chalk243.default.cyan(h))), ...rows],
69642
+ [headers.map((h) => import_chalk244.default.bold(import_chalk244.default.cyan(h))), ...rows],
68932
69643
  { hsep: 4, align: ["l", "r", "r", "r"] }
68933
69644
  ).replace(/^/gm, " ");
68934
69645
  print(`
@@ -68936,12 +69647,12 @@ ${tablePrint}
68936
69647
 
68937
69648
  `);
68938
69649
  log(
68939
- `${import_chalk243.default.gray("Amount due:")} ${import_chalk243.default.bold(formatCurrency(data.grandTotals.billedCost))}`
69650
+ `${import_chalk244.default.gray("Amount due:")} ${import_chalk244.default.bold(formatCurrency(data.grandTotals.billedCost))}`
68940
69651
  );
68941
69652
  }
68942
69653
 
68943
69654
  // src/commands/usage/output-breakdown.ts
68944
- var import_chalk244 = __toESM(require_source(), 1);
69655
+ var import_chalk245 = __toESM(require_source(), 1);
68945
69656
  function getPeriodLabel(period) {
68946
69657
  switch (period) {
68947
69658
  case "daily":
@@ -68962,15 +69673,15 @@ function outputBreakdown({
68962
69673
  const { print, log } = output_manager_default;
68963
69674
  const periodLabel = getPeriodLabel(breakdownPeriod);
68964
69675
  log(
68965
- `${periodLabel} Usage for ${import_chalk244.default.bold(data.contextName)} ${elapsed(Date.now() - startTime)}`
69676
+ `${periodLabel} Usage for ${import_chalk245.default.bold(data.contextName)} ${elapsed(Date.now() - startTime)}`
68966
69677
  );
68967
69678
  log("");
68968
69679
  const periodSuffix = data.usingDefaults ? " (current month)" : "";
68969
69680
  log(
68970
- `${import_chalk244.default.gray("Period:")} ${data.fromDisplay} to ${data.toDisplay}${periodSuffix}`
69681
+ `${import_chalk245.default.gray("Period:")} ${data.fromDisplay} to ${data.toDisplay}${periodSuffix}`
68971
69682
  );
68972
- log(`${import_chalk244.default.gray("Charges processed:")} ${data.chargeCount}`);
68973
- log(`${import_chalk244.default.gray("Pricing unit:")} ${data.pricingUnit}`);
69683
+ log(`${import_chalk245.default.gray("Charges processed:")} ${data.chargeCount}`);
69684
+ log(`${import_chalk245.default.gray("Pricing unit:")} ${data.pricingUnit}`);
68974
69685
  log("");
68975
69686
  const sortedServices = [...data.services.entries()].sort(
68976
69687
  (a, b) => b[1].billedCost - a[1].billedCost
@@ -68987,7 +69698,7 @@ function outputBreakdown({
68987
69698
  (a, b) => b[1].billedCost - a[1].billedCost
68988
69699
  );
68989
69700
  log(
68990
- `${import_chalk244.default.bold(import_chalk244.default.cyan(periodKey))} (Total: ${formatQuantity(periodData.totalPricingQuantity, data.pricingUnit)}, ${formatCurrency(periodData.totalBilledCost)})`
69701
+ `${import_chalk245.default.bold(import_chalk245.default.cyan(periodKey))} (Total: ${formatQuantity(periodData.totalPricingQuantity, data.pricingUnit)}, ${formatCurrency(periodData.totalBilledCost)})`
68991
69702
  );
68992
69703
  const headers = ["Service", quantityHeader, "Billed Cost"];
68993
69704
  const rows = sortedPeriodServices.map(([name, svc]) => [
@@ -68996,7 +69707,7 @@ function outputBreakdown({
68996
69707
  formatCurrency(svc.billedCost)
68997
69708
  ]);
68998
69709
  const tablePrint = table(
68999
- [headers.map((h) => import_chalk244.default.bold(import_chalk244.default.gray(h))), ...rows],
69710
+ [headers.map((h) => import_chalk245.default.bold(import_chalk245.default.gray(h))), ...rows],
69000
69711
  { hsep: 4, align: ["l", "r", "r"] }
69001
69712
  ).replace(/^/gm, " ");
69002
69713
  print(`${tablePrint}
@@ -69005,7 +69716,7 @@ function outputBreakdown({
69005
69716
  }
69006
69717
 
69007
69718
  // src/commands/usage/output-group-by.ts
69008
- var import_chalk245 = __toESM(require_source(), 1);
69719
+ var import_chalk246 = __toESM(require_source(), 1);
69009
69720
  function getDimensionLabel(dimension) {
69010
69721
  switch (dimension) {
69011
69722
  case "project":
@@ -69024,15 +69735,15 @@ function outputGroupBy({
69024
69735
  const { print, log } = output_manager_default;
69025
69736
  const dimensionLabel = getDimensionLabel(groupByDimension);
69026
69737
  log(
69027
- `Usage by ${dimensionLabel} for ${import_chalk245.default.bold(data.contextName)} ${elapsed(Date.now() - startTime)}`
69738
+ `Usage by ${dimensionLabel} for ${import_chalk246.default.bold(data.contextName)} ${elapsed(Date.now() - startTime)}`
69028
69739
  );
69029
69740
  log("");
69030
69741
  const periodSuffix = data.usingDefaults ? " (current month)" : "";
69031
69742
  log(
69032
- `${import_chalk245.default.gray("Period:")} ${data.fromDisplay} to ${data.toDisplay}${periodSuffix}`
69743
+ `${import_chalk246.default.gray("Period:")} ${data.fromDisplay} to ${data.toDisplay}${periodSuffix}`
69033
69744
  );
69034
- log(`${import_chalk245.default.gray("Charges processed:")} ${data.chargeCount}`);
69035
- log(`${import_chalk245.default.gray("Pricing unit:")} ${data.pricingUnit}`);
69745
+ log(`${import_chalk246.default.gray("Charges processed:")} ${data.chargeCount}`);
69746
+ log(`${import_chalk246.default.gray("Pricing unit:")} ${data.pricingUnit}`);
69036
69747
  log("");
69037
69748
  const sortedGroups = [...data.groupByUsage.entries()].sort(
69038
69749
  (a, b) => b[1].totalBilledCost - a[1].totalBilledCost
@@ -69044,7 +69755,7 @@ function outputGroupBy({
69044
69755
  const quantityHeader = data.pricingUnit === "USD" ? "Usage (USD)" : data.pricingUnit;
69045
69756
  for (const [groupName, groupData] of sortedGroups) {
69046
69757
  log(
69047
- `${import_chalk245.default.bold(import_chalk245.default.cyan(groupName))} (Total: ${formatQuantity(groupData.totalPricingQuantity, data.pricingUnit)}, ${formatCurrency(groupData.totalBilledCost)})`
69758
+ `${import_chalk246.default.bold(import_chalk246.default.cyan(groupName))} (Total: ${formatQuantity(groupData.totalPricingQuantity, data.pricingUnit)}, ${formatCurrency(groupData.totalBilledCost)})`
69048
69759
  );
69049
69760
  const sortedServices = [...groupData.services.entries()].sort(
69050
69761
  (a, b) => b[1].billedCost - a[1].billedCost
@@ -69056,7 +69767,7 @@ function outputGroupBy({
69056
69767
  formatCurrency(svc.billedCost)
69057
69768
  ]);
69058
69769
  const tablePrint = table(
69059
- [headers.map((h) => import_chalk245.default.bold(import_chalk245.default.gray(h))), ...rows],
69770
+ [headers.map((h) => import_chalk246.default.bold(import_chalk246.default.gray(h))), ...rows],
69060
69771
  { hsep: 4, align: ["l", "r", "r"] }
69061
69772
  ).replace(/^/gm, " ");
69062
69773
  print(`${tablePrint}
@@ -69064,7 +69775,7 @@ function outputGroupBy({
69064
69775
  }
69065
69776
  log("");
69066
69777
  log(
69067
- `${import_chalk245.default.gray("Amount due:")} ${import_chalk245.default.bold(formatCurrency(data.grandTotals.billedCost))}`
69778
+ `${import_chalk246.default.gray("Amount due:")} ${import_chalk246.default.bold(formatCurrency(data.grandTotals.billedCost))}`
69068
69779
  );
69069
69780
  }
69070
69781
 
@@ -69253,7 +69964,7 @@ async function usage(client) {
69253
69964
  contextName = scope.contextName;
69254
69965
  teamId = scope.team?.id;
69255
69966
  } catch (err) {
69256
- if ((0, import_error_utils21.isErrnoException)(err) && (err.code === "NOT_AUTHORIZED" || err.code === "TEAM_DELETED")) {
69967
+ if ((0, import_error_utils22.isErrnoException)(err) && (err.code === "NOT_AUTHORIZED" || err.code === "TEAM_DELETED")) {
69257
69968
  error(err.message);
69258
69969
  return 1;
69259
69970
  }
@@ -69261,7 +69972,7 @@ async function usage(client) {
69261
69972
  }
69262
69973
  const start = Date.now();
69263
69974
  if (!asJson) {
69264
- spinner(`Fetching usage data for ${import_chalk246.default.bold(contextName)}`);
69975
+ spinner(`Fetching usage data for ${import_chalk247.default.bold(contextName)}`);
69265
69976
  }
69266
69977
  debug(`Fetching charges from ${fromDate} to ${toDate}`);
69267
69978
  const query = new URLSearchParams({
@@ -69605,7 +70316,7 @@ var VcrTelemetryClient = class extends TelemetryClient {
69605
70316
  };
69606
70317
 
69607
70318
  // src/commands/vcr/index.ts
69608
- var COMMAND_CONFIG52 = {
70319
+ var COMMAND_CONFIG53 = {
69609
70320
  ls: getCommandAliases(listSubcommand21),
69610
70321
  inspect: getCommandAliases(inspectSubcommand10),
69611
70322
  add: getCommandAliases(addSubcommand12),
@@ -69636,7 +70347,7 @@ async function vcr(client) {
69636
70347
  }
69637
70348
  const { subcommand, args, subcommandOriginal } = getSubcommand5(
69638
70349
  parsedArgs.args.slice(1),
69639
- COMMAND_CONFIG52
70350
+ COMMAND_CONFIG53
69640
70351
  );
69641
70352
  const needHelp = parsedArgs.flags["--help"];
69642
70353
  function printHelp(command) {
@@ -69751,39 +70462,39 @@ async function vcr(client) {
69751
70462
  switch (subcommand) {
69752
70463
  case "ls":
69753
70464
  telemetry2.trackCliSubcommandLs(subcommandOriginal);
69754
- return (await import("./chunks/ls-D5ESYWG5.js")).default(client, args, telemetry2);
70465
+ return (await import("./chunks/ls-HCVYO3FF.js")).default(client, args, telemetry2);
69755
70466
  case "inspect":
69756
70467
  telemetry2.trackCliSubcommandInspect(subcommandOriginal);
69757
- return (await import("./chunks/inspect-TTHC6L7Q.js")).default(client, args, telemetry2);
70468
+ return (await import("./chunks/inspect-Z6VNNFFK.js")).default(client, args, telemetry2);
69758
70469
  case "add":
69759
70470
  telemetry2.trackCliSubcommandAdd(subcommandOriginal);
69760
- return (await import("./chunks/add-NMYLVDBN.js")).default(client, args, telemetry2);
70471
+ return (await import("./chunks/add-LLXXGWJZ.js")).default(client, args, telemetry2);
69761
70472
  case "config":
69762
70473
  telemetry2.trackCliSubcommandConfig(subcommandOriginal);
69763
- return (await import("./chunks/config-WXQTPQW7.js")).default(client, args, telemetry2);
70474
+ return (await import("./chunks/config-WYUTVPPF.js")).default(client, args, telemetry2);
69764
70475
  case "rm":
69765
70476
  telemetry2.trackCliSubcommandRm(subcommandOriginal);
69766
- return (await import("./chunks/rm-OILUGCTW.js")).default(client, args, telemetry2);
70477
+ return (await import("./chunks/rm-Y6OROWNK.js")).default(client, args, telemetry2);
69767
70478
  case "login":
69768
70479
  telemetry2.trackCliSubcommandLogin(subcommandOriginal);
69769
- return (await import("./chunks/login-L4EWZOGH.js")).default(client, args, telemetry2);
70480
+ return (await import("./chunks/login-GTZWDE5T.js")).default(client, args, telemetry2);
69770
70481
  case "build":
69771
70482
  telemetry2.trackCliSubcommandBuild(subcommandOriginal);
69772
- return (await import("./chunks/build-BCMSG7TU.js")).default(client, telemetry2);
70483
+ return (await import("./chunks/build-6DPTFQKH.js")).default(client, telemetry2);
69773
70484
  case "push":
69774
70485
  telemetry2.trackCliSubcommandPush(subcommandOriginal);
69775
- return (await import("./chunks/push-5NYG7HIR.js")).default(client, telemetry2);
70486
+ return (await import("./chunks/push-EJZHZC4Z.js")).default(client, telemetry2);
69776
70487
  case "tag":
69777
70488
  telemetry2.trackCliSubcommandTag(subcommandOriginal);
69778
- return (await import("./chunks/tags-AMTMNRLQ.js")).default(client, args, telemetry2);
70489
+ return (await import("./chunks/tags-67LC7TV4.js")).default(client, args, telemetry2);
69779
70490
  case "image":
69780
70491
  telemetry2.trackCliSubcommandImage(subcommandOriginal);
69781
- return (await import("./chunks/image-EIAO7LVN.js")).default(client, args, telemetry2);
70492
+ return (await import("./chunks/image-DM4ZNQOL.js")).default(client, args, telemetry2);
69782
70493
  case "permissions":
69783
70494
  telemetry2.trackCliSubcommandPermissions(subcommandOriginal);
69784
- return (await import("./chunks/permissions-JSXC7BRD.js")).default(client, args, telemetry2);
70495
+ return (await import("./chunks/permissions-BJBEONBS.js")).default(client, args, telemetry2);
69785
70496
  default:
69786
- output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG52));
70497
+ output_manager_default.error(getInvalidSubcommand(COMMAND_CONFIG53));
69787
70498
  output_manager_default.print(help(vcrCommand, { columns: client.stderr.columns }));
69788
70499
  return 2;
69789
70500
  }
@@ -69791,7 +70502,7 @@ async function vcr(client) {
69791
70502
 
69792
70503
  // src/commands/webhooks/ls.ts
69793
70504
  var import_ms36 = __toESM(require_ms(), 1);
69794
- var import_chalk247 = __toESM(require_source(), 1);
70505
+ var import_chalk248 = __toESM(require_source(), 1);
69795
70506
  var import_pluralize16 = __toESM(require_pluralize(), 1);
69796
70507
 
69797
70508
  // src/util/webhooks/get-webhooks.ts
@@ -69855,7 +70566,7 @@ async function ls9(client, argv) {
69855
70566
  const { contextName } = await getScope(client);
69856
70567
  const lsStamp = stamp_default();
69857
70568
  if (!client.nonInteractive) {
69858
- output_manager_default.spinner(`Fetching Webhooks under ${import_chalk247.default.bold(contextName)}`);
70569
+ output_manager_default.spinner(`Fetching Webhooks under ${import_chalk248.default.bold(contextName)}`);
69859
70570
  }
69860
70571
  const { webhooks } = await getWebhooks(client);
69861
70572
  if (asJson) {
@@ -69883,9 +70594,9 @@ async function ls9(client, argv) {
69883
70594
  `);
69884
70595
  } else {
69885
70596
  output_manager_default.log(
69886
- `${(0, import_pluralize16.default)("Webhook", webhooks.length, true)} found under ${import_chalk247.default.bold(
70597
+ `${(0, import_pluralize16.default)("Webhook", webhooks.length, true)} found under ${import_chalk248.default.bold(
69887
70598
  contextName
69888
- )} ${import_chalk247.default.gray(lsStamp())}`
70599
+ )} ${import_chalk248.default.gray(lsStamp())}`
69889
70600
  );
69890
70601
  if (webhooks.length > 0) {
69891
70602
  output_manager_default.print(
@@ -69901,7 +70612,7 @@ function formatWebhooksTable(webhooks) {
69901
70612
  const rows = webhooks.map((webhook) => {
69902
70613
  const age = webhook.createdAt ? (0, import_ms36.default)(current - webhook.createdAt) : "-";
69903
70614
  const eventsDisplay = webhook.events.length > 2 ? `${webhook.events.slice(0, 2).join(", ")} +${webhook.events.length - 2}` : webhook.events.join(", ");
69904
- return [webhook.id, webhook.url, eventsDisplay, import_chalk247.default.gray(age)];
70615
+ return [webhook.id, webhook.url, eventsDisplay, import_chalk248.default.gray(age)];
69905
70616
  });
69906
70617
  return formatTable(
69907
70618
  ["ID", "URL", "Events", "Age"],
@@ -69911,7 +70622,7 @@ function formatWebhooksTable(webhooks) {
69911
70622
  }
69912
70623
 
69913
70624
  // src/commands/webhooks/get.ts
69914
- var import_chalk248 = __toESM(require_source(), 1);
70625
+ var import_chalk249 = __toESM(require_source(), 1);
69915
70626
 
69916
70627
  // src/util/webhooks/get-webhook.ts
69917
70628
  async function getWebhook(client, webhookId) {
@@ -69992,7 +70703,7 @@ async function get4(client, argv) {
69992
70703
  const asJson = formatResult.jsonOutput || client.nonInteractive;
69993
70704
  if (args.length !== 1) {
69994
70705
  output_manager_default.error(
69995
- `Invalid number of arguments. Usage: ${import_chalk248.default.cyan(
70706
+ `Invalid number of arguments. Usage: ${import_chalk249.default.cyan(
69996
70707
  `${getCommandName("webhooks get <id>")}`
69997
70708
  )}`
69998
70709
  );
@@ -70002,7 +70713,7 @@ async function get4(client, argv) {
70002
70713
  const { contextName } = await getScope(client);
70003
70714
  if (!client.nonInteractive) {
70004
70715
  output_manager_default.spinner(
70005
- `Fetching Webhook ${webhookId} under ${import_chalk248.default.bold(contextName)}`
70716
+ `Fetching Webhook ${webhookId} under ${import_chalk249.default.bold(contextName)}`
70006
70717
  );
70007
70718
  }
70008
70719
  let webhook;
@@ -70046,33 +70757,33 @@ async function get4(client, argv) {
70046
70757
  `);
70047
70758
  } else {
70048
70759
  output_manager_default.log(
70049
- `Webhook ${webhookId} found under ${import_chalk248.default.bold(contextName)} ${import_chalk248.default.gray(
70760
+ `Webhook ${webhookId} found under ${import_chalk249.default.bold(contextName)} ${import_chalk249.default.gray(
70050
70761
  getStamp()
70051
70762
  )}`
70052
70763
  );
70053
70764
  output_manager_default.print("\n");
70054
- output_manager_default.print(import_chalk248.default.bold(" General\n\n"));
70055
- output_manager_default.print(` ${import_chalk248.default.cyan("ID")} ${webhook.id}
70765
+ output_manager_default.print(import_chalk249.default.bold(" General\n\n"));
70766
+ output_manager_default.print(` ${import_chalk249.default.cyan("ID")} ${webhook.id}
70056
70767
  `);
70057
- output_manager_default.print(` ${import_chalk248.default.cyan("URL")} ${webhook.url}
70768
+ output_manager_default.print(` ${import_chalk249.default.cyan("URL")} ${webhook.url}
70058
70769
  `);
70059
70770
  output_manager_default.print(
70060
- ` ${import_chalk248.default.cyan("Created At")} ${formatDate(webhook.createdAt)}
70771
+ ` ${import_chalk249.default.cyan("Created At")} ${formatDate(webhook.createdAt)}
70061
70772
  `
70062
70773
  );
70063
70774
  output_manager_default.print(
70064
- ` ${import_chalk248.default.cyan("Updated At")} ${formatDate(webhook.updatedAt)}
70775
+ ` ${import_chalk249.default.cyan("Updated At")} ${formatDate(webhook.updatedAt)}
70065
70776
  `
70066
70777
  );
70067
70778
  output_manager_default.print("\n");
70068
- output_manager_default.print(import_chalk248.default.bold(" Events\n\n"));
70779
+ output_manager_default.print(import_chalk249.default.bold(" Events\n\n"));
70069
70780
  for (const event of webhook.events) {
70070
70781
  output_manager_default.print(` - ${event}
70071
70782
  `);
70072
70783
  }
70073
70784
  if (webhook.projectIds && webhook.projectIds.length > 0) {
70074
70785
  output_manager_default.print("\n");
70075
- output_manager_default.print(import_chalk248.default.bold(" Projects\n\n"));
70786
+ output_manager_default.print(import_chalk249.default.bold(" Projects\n\n"));
70076
70787
  if (webhook.projectsMetadata && webhook.projectsMetadata.length > 0) {
70077
70788
  for (const project of webhook.projectsMetadata) {
70078
70789
  output_manager_default.print(` - ${project.name} (${project.id})
@@ -70091,7 +70802,7 @@ async function get4(client, argv) {
70091
70802
  }
70092
70803
 
70093
70804
  // src/commands/webhooks/create.ts
70094
- var import_chalk249 = __toESM(require_source(), 1);
70805
+ var import_chalk250 = __toESM(require_source(), 1);
70095
70806
 
70096
70807
  // src/util/webhooks/create-webhook.ts
70097
70808
  async function createWebhook(client, payload) {
@@ -70311,7 +71022,7 @@ async function create5(client, argv) {
70311
71022
  const { contextName } = await getScope(client);
70312
71023
  const createStamp = stamp_default();
70313
71024
  if (!client.nonInteractive) {
70314
- output_manager_default.spinner(`Creating webhook under ${import_chalk249.default.bold(contextName)}`);
71025
+ output_manager_default.spinner(`Creating webhook under ${import_chalk250.default.bold(contextName)}`);
70315
71026
  }
70316
71027
  try {
70317
71028
  const webhook = await createWebhook(client, {
@@ -70344,27 +71055,27 @@ async function create5(client, argv) {
70344
71055
  }
70345
71056
  output_manager_default.stopSpinner();
70346
71057
  output_manager_default.success(
70347
- `Webhook created: ${import_chalk249.default.bold(webhook.id)} ${createStamp()}`
71058
+ `Webhook created: ${import_chalk250.default.bold(webhook.id)} ${createStamp()}`
70348
71059
  );
70349
71060
  output_manager_default.print("\n");
70350
- output_manager_default.print(import_chalk249.default.bold(" Webhook Details\n\n"));
70351
- output_manager_default.print(` ${import_chalk249.default.cyan("ID".padEnd(10))}${webhook.id}
71061
+ output_manager_default.print(import_chalk250.default.bold(" Webhook Details\n\n"));
71062
+ output_manager_default.print(` ${import_chalk250.default.cyan("ID".padEnd(10))}${webhook.id}
70352
71063
  `);
70353
- output_manager_default.print(` ${import_chalk249.default.cyan("URL".padEnd(10))}${webhook.url}
71064
+ output_manager_default.print(` ${import_chalk250.default.cyan("URL".padEnd(10))}${webhook.url}
70354
71065
  `);
70355
71066
  output_manager_default.print(
70356
- ` ${import_chalk249.default.cyan("Events".padEnd(10))}${webhook.events.join(", ")}
71067
+ ` ${import_chalk250.default.cyan("Events".padEnd(10))}${webhook.events.join(", ")}
70357
71068
  `
70358
71069
  );
70359
71070
  if (webhook.projectIds && webhook.projectIds.length > 0) {
70360
71071
  output_manager_default.print(
70361
- ` ${import_chalk249.default.cyan("Projects".padEnd(10))}${webhook.projectIds.join(", ")}
71072
+ ` ${import_chalk250.default.cyan("Projects".padEnd(10))}${webhook.projectIds.join(", ")}
70362
71073
  `
70363
71074
  );
70364
71075
  }
70365
71076
  output_manager_default.print("\n");
70366
71077
  output_manager_default.warn(
70367
- `Save this secret - it will not be shown again: ${import_chalk249.default.bold(webhook.secret)}`
71078
+ `Save this secret - it will not be shown again: ${import_chalk250.default.bold(webhook.secret)}`
70368
71079
  );
70369
71080
  output_manager_default.print("\n");
70370
71081
  return 0;
@@ -70422,7 +71133,7 @@ function buildCreateCommandWithEventPlaceholder(fullArgv, url) {
70422
71133
  }
70423
71134
 
70424
71135
  // src/commands/webhooks/rm.ts
70425
- var import_chalk250 = __toESM(require_source(), 1);
71136
+ var import_chalk251 = __toESM(require_source(), 1);
70426
71137
 
70427
71138
  // src/util/webhooks/delete-webhook.ts
70428
71139
  async function deleteWebhook(client, webhookId) {
@@ -70517,7 +71228,7 @@ async function rm10(client, argv) {
70517
71228
  const { contextName } = await getScope(client);
70518
71229
  if (args.length !== 1) {
70519
71230
  output_manager_default.error(
70520
- `Invalid number of arguments. Usage: ${import_chalk250.default.cyan(
71231
+ `Invalid number of arguments. Usage: ${import_chalk251.default.cyan(
70521
71232
  `${getCommandName("webhooks rm <id>")}`
70522
71233
  )}`
70523
71234
  );
@@ -70568,7 +71279,7 @@ async function rm10(client, argv) {
70568
71279
  }
70569
71280
  const removeStamp = stamp_default();
70570
71281
  if (!client.nonInteractive) {
70571
- output_manager_default.spinner(`Removing webhook under ${import_chalk250.default.bold(contextName)}`);
71282
+ output_manager_default.spinner(`Removing webhook under ${import_chalk251.default.bold(contextName)}`);
70572
71283
  }
70573
71284
  try {
70574
71285
  await deleteWebhook(client, webhookId);
@@ -70588,7 +71299,7 @@ async function rm10(client, argv) {
70588
71299
  );
70589
71300
  return 0;
70590
71301
  }
70591
- output_manager_default.success(`Webhook ${import_chalk250.default.bold(webhookId)} removed ${removeStamp()}`);
71302
+ output_manager_default.success(`Webhook ${import_chalk251.default.bold(webhookId)} removed ${removeStamp()}`);
70592
71303
  return 0;
70593
71304
  } catch (err) {
70594
71305
  output_manager_default.stopSpinner();
@@ -70648,7 +71359,7 @@ var WebhooksTelemetryClient = class extends TelemetryClient {
70648
71359
  };
70649
71360
 
70650
71361
  // src/commands/webhooks/index.ts
70651
- var COMMAND_CONFIG53 = {
71362
+ var COMMAND_CONFIG54 = {
70652
71363
  create: ["create", "add"],
70653
71364
  get: ["get", "inspect"],
70654
71365
  ls: ["ls", "list"],
@@ -70672,7 +71383,7 @@ async function main29(client) {
70672
71383
  });
70673
71384
  const { subcommand, args, subcommandOriginal } = getSubcommand5(
70674
71385
  parsedArgs.args.slice(1),
70675
- COMMAND_CONFIG53
71386
+ COMMAND_CONFIG54
70676
71387
  );
70677
71388
  const needHelp = parsedArgs.flags["--help"];
70678
71389
  if (!subcommand && needHelp) {
@@ -70719,7 +71430,7 @@ async function main29(client) {
70719
71430
  }
70720
71431
 
70721
71432
  // src/commands/whoami/index.ts
70722
- var import_chalk251 = __toESM(require_source(), 1);
71433
+ var import_chalk252 = __toESM(require_source(), 1);
70723
71434
 
70724
71435
  // src/util/telemetry/commands/whoami/index.ts
70725
71436
  var WhoamiTelemetryClient = class extends TelemetryClient {
@@ -70752,6 +71463,18 @@ async function whoami(client) {
70752
71463
  }
70753
71464
  const asJson = formatResult.jsonOutput;
70754
71465
  telemetry2.trackCliOptionFormat(parsedArgs.flags["--format"]);
71466
+ if (!client.authConfig.token) {
71467
+ if (asJson) {
71468
+ client.stdout.write(`${JSON.stringify({ loggedIn: false }, null, 2)}
71469
+ `);
71470
+ } else {
71471
+ output_manager_default.log("Logged out.");
71472
+ output_manager_default.log(
71473
+ `Run ${getCommandName("deploy")} to deploy without an account and claim it later. Alternatively you can login with ${getCommandName("login")}.`
71474
+ );
71475
+ }
71476
+ return 1;
71477
+ }
70755
71478
  const scope = await getScope(client, { resolveLocalScope: true });
70756
71479
  const { user, team, app, globalTeam } = scope;
70757
71480
  const hasLocalOverride = !scope.explicitScopeProvided && ((team?.id ?? null) !== (globalTeam?.id ?? null) || // `team` being null while a local project linked to personal scope
@@ -70776,21 +71499,21 @@ async function whoami(client) {
70776
71499
  client.stdout.write(`${JSON.stringify(jsonOutput, null, 2)}
70777
71500
  `);
70778
71501
  } else if (client.stdout.isTTY) {
70779
- output_manager_default.log(`Logged in as ${import_chalk251.default.bold(formatUsername(scope))}`);
71502
+ output_manager_default.log(`Logged in as ${import_chalk252.default.bold(formatUsername(scope))}`);
70780
71503
  if (team) {
70781
71504
  output_manager_default.log(
70782
- `Active team: ${import_chalk251.default.bold(team.slug)}${team.name && team.name !== team.slug ? ` (${team.name})` : ""}`
71505
+ `Active team: ${import_chalk252.default.bold(team.slug)}${team.name && team.name !== team.slug ? ` (${team.name})` : ""}`
70783
71506
  );
70784
71507
  } else {
70785
- output_manager_default.log(`Active team: ${import_chalk251.default.bold("Personal Account")}`);
71508
+ output_manager_default.log(`Active team: ${import_chalk252.default.bold("Personal Account")}`);
70786
71509
  }
70787
71510
  if (hasLocalOverride) {
70788
71511
  const globalLabel = globalTeam ? globalTeam.slug : "Personal Account";
70789
71512
  const localLabel = team ? team.slug : "Personal Account";
70790
71513
  output_manager_default.log(
70791
- `${import_chalk251.default.yellow("Local override:")} scope is set to ${import_chalk251.default.bold(
71514
+ `${import_chalk252.default.yellow("Local override:")} scope is set to ${import_chalk252.default.bold(
70792
71515
  localLabel
70793
- )} by the linked project in this directory (globally selected: ${import_chalk251.default.bold(
71516
+ )} by the linked project in this directory (globally selected: ${import_chalk252.default.bold(
70794
71517
  globalLabel
70795
71518
  )}).`
70796
71519
  );
@@ -70859,6 +71582,7 @@ export {
70859
71582
  rollingRelease,
70860
71583
  main26 as routes,
70861
71584
  sandbox,
71585
+ security,
70862
71586
  skills,
70863
71587
  main27 as target,
70864
71588
  teams,