vercel 56.5.0 → 57.0.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 (90) hide show
  1. package/dist/chunks/{add-6GRH6G2M.js → add-7M577U56.js} +6 -5
  2. package/dist/chunks/{add-KNK5E2YT.js → add-YRZTDNXX.js} +2 -2
  3. package/dist/chunks/{chunk-4MK452Y5.js → chunk-2EDWKVNP.js} +8 -8
  4. package/dist/chunks/{chunk-YS6EDZHB.js → chunk-2MJROFVC.js} +5 -1
  5. package/dist/chunks/{chunk-JQG5EDRD.js → chunk-3242RXCN.js} +1 -1
  6. package/dist/chunks/chunk-3PGXYIKC.js +147 -0
  7. package/dist/chunks/{chunk-3BHSS5E2.js → chunk-4PGF367U.js} +47 -210
  8. package/dist/chunks/{chunk-ARKHETJP.js → chunk-555WJSO5.js} +1 -1
  9. package/dist/chunks/chunk-5AJPMLDV.js +28 -0
  10. package/dist/chunks/{chunk-IBP2XAUH.js → chunk-A2TYQBX2.js} +17 -3
  11. package/dist/chunks/{chunk-V5P25P7F.js → chunk-A3NYPUKZ.js} +7 -12
  12. package/dist/chunks/{chunk-W346YNDN.js → chunk-DWMH5M4Q.js} +4 -1
  13. package/dist/chunks/{chunk-BM36UWE2.js → chunk-F5PQWDOC.js} +1 -1
  14. package/dist/chunks/{chunk-DOF6CJLL.js → chunk-F7X55TOY.js} +15 -839
  15. package/dist/chunks/chunk-FGDKMNEN.js +21 -0
  16. package/dist/chunks/{chunk-DI3HR3K6.js → chunk-GP5VCTEU.js} +1 -1
  17. package/dist/chunks/chunk-GZLPFESR.js +48 -0
  18. package/dist/chunks/{chunk-X43U65TH.js → chunk-HD7B425F.js} +2 -2
  19. package/dist/chunks/{chunk-CM3DLBDY.js → chunk-IOAZNR6Z.js} +1 -1
  20. package/dist/chunks/{chunk-STJJ3DFO.js → chunk-KCF6S3XF.js} +16 -1
  21. package/dist/chunks/{chunk-YTFJGKRG.js → chunk-LMHT3QR3.js} +1 -1
  22. package/dist/chunks/{chunk-SWEPOMSA.js → chunk-MAHINYBW.js} +4 -3
  23. package/dist/chunks/{chunk-G4MTGCZ5.js → chunk-MIFDRYTN.js} +1 -1
  24. package/dist/chunks/{chunk-PRYNIKBZ.js → chunk-NH43BFJ3.js} +1 -1
  25. package/dist/chunks/{chunk-Z7NPYIZ6.js → chunk-NM43FFV6.js} +0 -8
  26. package/dist/chunks/{chunk-PPEQUJ7T.js → chunk-NRNMT43R.js} +3 -3
  27. package/dist/chunks/chunk-OF2GNB42.js +53 -0
  28. package/dist/chunks/chunk-PRWJUY5U.js +848 -0
  29. package/dist/chunks/{chunk-F5OMERHI.js → chunk-QZD5DKUR.js} +10 -23
  30. package/dist/chunks/{chunk-26TEKOBZ.js → chunk-RAFH25WW.js} +8 -1
  31. package/dist/chunks/{chunk-GAOAGU5K.js → chunk-RYO6FJFB.js} +1 -1
  32. package/dist/chunks/{chunk-23U6FANO.js → chunk-T4NODP6Y.js} +11 -18
  33. package/dist/chunks/{chunk-TMK6RSYW.js → chunk-TBR2Q37Y.js} +1202 -947
  34. package/dist/chunks/chunk-V4RMJKQP.js +36 -0
  35. package/dist/chunks/{chunk-6RTK6BWX.js → chunk-YA3WQFLY.js} +1 -1
  36. package/dist/chunks/{chunk-EYICIM2K.js → chunk-YOZCJHLZ.js} +4 -4
  37. package/dist/chunks/{compile-vercel-config-IFET4E6H.js → compile-vercel-config-3OHO3TJA.js} +1 -1
  38. package/dist/chunks/config-validator.mjs +1 -1
  39. package/dist/chunks/{delete-X2MUMONI.js → delete-3DZOCWCC.js} +2 -2
  40. package/dist/chunks/{delete-PXB5WRH7.js → delete-VOSJLNEA.js} +2 -2
  41. package/dist/chunks/{disable-GBL3SHJL.js → disable-LQDEVRQF.js} +2 -2
  42. package/dist/chunks/{discard-XVVSRGDR.js → discard-RGV4JKXQ.js} +2 -2
  43. package/dist/chunks/{edit-EIHRP6XT.js → edit-SFIEOQ24.js} +3 -3
  44. package/dist/chunks/{edit-K5Y2BDJO.js → edit-UPZPI54L.js} +2 -2
  45. package/dist/chunks/{enable-W7AMJWKH.js → enable-6UVH35WC.js} +2 -2
  46. package/dist/chunks/{export-N3AZ2KOO.js → export-6CEG3CK7.js} +2 -2
  47. package/dist/chunks/{image-DRTGVPVJ.js → image-CQRCD2OE.js} +3 -3
  48. package/dist/chunks/{inspect-SLZLI6ZC.js → inspect-4ZAH3RFT.js} +3 -3
  49. package/dist/chunks/inspect-EXQBIAFF.js +587 -0
  50. package/dist/chunks/{inspect-AAIVWSJI.js → inspect-K5ZMQG7X.js} +2 -2
  51. package/dist/chunks/{inspect-DYXTX6P4.js → inspect-UM3LDRPV.js} +2 -2
  52. package/dist/chunks/{inspect-IPSAYR2C.js → inspect-ZFRY3X3H.js} +2 -2
  53. package/dist/chunks/{list-V7VTXVK4.js → list-4DRVM7Q4.js} +41 -54
  54. package/dist/chunks/{list-IF2YW73F.js → list-FJCBOCCA.js} +1 -1
  55. package/dist/chunks/{list-K2HLGUXV.js → list-KCUHD4OA.js} +3 -3
  56. package/dist/chunks/{login-7C6HQEOG.js → login-DFGYNU3K.js} +2 -2
  57. package/dist/chunks/{ls-QQQHOJBE.js → ls-34NCZKBE.js} +2 -2
  58. package/dist/chunks/{ls-NKECPPOR.js → ls-4QHHVXXD.js} +2 -2
  59. package/dist/chunks/{ls-2NU353QP.js → ls-CG6A7UXF.js} +2 -2
  60. package/dist/chunks/ls-RHEQ6YQB.js +188 -0
  61. package/dist/chunks/{open-2FAPZA6V.js → open-E3XADEMX.js} +2 -2
  62. package/dist/chunks/{publish-G7PB64LJ.js → publish-Z3AQRUCS.js} +2 -2
  63. package/dist/chunks/{query-D4QBT4WR.js → query-3EV66DO3.js} +8 -8
  64. package/dist/chunks/{reorder-3Z7YIPAX.js → reorder-VA5E5ZJT.js} +2 -2
  65. package/dist/chunks/{reply-7QQBXL5H.js → reply-SNSCNKAW.js} +2 -2
  66. package/dist/chunks/{resolve-UYKTDZEX.js → resolve-6ZX4RTXX.js} +2 -2
  67. package/dist/chunks/{restore-Q2DR7SMW.js → restore-NEHI5B5P.js} +2 -2
  68. package/dist/chunks/{rm-PCWMEHQ2.js → rm-22B22E47.js} +2 -2
  69. package/dist/chunks/{rm-O4M4GFSK.js → rm-E5ZVLAKO.js} +2 -2
  70. package/dist/chunks/{rm-OCLUTM57.js → rm-FR6KE744.js} +6 -5
  71. package/dist/chunks/rule-inspect-DMP2CKJQ.js +283 -0
  72. package/dist/chunks/{rules-LIH5FLPJ.js → rules-EYGXEI2Z.js} +7 -7
  73. package/dist/chunks/{schema-OFALTXXM.js → schema-2IIWOBSQ.js} +6 -4
  74. package/dist/chunks/{tags-P4HIAI6D.js → tags-ZDVYRHAY.js} +2 -2
  75. package/dist/chunks/{update-E3ZQAFBS.js → update-QH4DQMZV.js} +6 -5
  76. package/dist/commands/build/index.js +42 -10
  77. package/dist/commands/deploy/index.js +34 -24
  78. package/dist/commands/dev/index.js +10 -13
  79. package/dist/commands/env/index.js +8 -7
  80. package/dist/commands/link/index.js +8 -8
  81. package/dist/commands/list/index.js +2 -2
  82. package/dist/commands-bulk.js +1836 -1796
  83. package/dist/index.js +19 -20
  84. package/dist/vc.js +54 -18
  85. package/dist/version.mjs +1 -1
  86. package/package.json +38 -38
  87. package/dist/chunks/chunk-GNV7547O.js +0 -86
  88. package/dist/chunks/inspect-5YUAEI3L.js +0 -351
  89. package/dist/chunks/ls-RH6Y4XBS.js +0 -113
  90. package/dist/chunks/rule-inspect-XJ47UEG7.js +0 -141
@@ -4,9 +4,20 @@ import { dirname as __dirname_ } from 'node:path';
4
4
  const require = __createRequire(import.meta.url);
5
5
  const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __dirname_(__filename);
7
+ import {
8
+ getGroupStartedAt,
9
+ getGroupTitle,
10
+ getGroupType,
11
+ normalizeTimestamp,
12
+ renderAlertTable
13
+ } from "./chunk-3PGXYIKC.js";
7
14
  import {
8
15
  resolveAlertsScope
9
- } from "./chunk-23U6FANO.js";
16
+ } from "./chunk-T4NODP6Y.js";
17
+ import {
18
+ formatDate
19
+ } from "./chunk-GZLPFESR.js";
20
+ import "./chunk-A3NYPUKZ.js";
10
21
  import {
11
22
  handleValidationError,
12
23
  normalizeRepeatableStringFilters,
@@ -16,17 +27,20 @@ import {
16
27
  validateTimeBound,
17
28
  validateTimeOrder
18
29
  } from "./chunk-BUZRVER7.js";
30
+ import "./chunk-FGDKMNEN.js";
31
+ import "./chunk-PRWJUY5U.js";
32
+ import {
33
+ truncateEnd
34
+ } from "./chunk-OF2GNB42.js";
19
35
  import {
20
36
  validateJsonOutput
21
37
  } from "./chunk-XPKWKPWA.js";
22
38
  import {
23
39
  alertsCommand
24
- } from "./chunk-YS6EDZHB.js";
25
- import "./chunk-STJJ3DFO.js";
26
- import {
27
- table
28
- } from "./chunk-NZRWTCRM.js";
29
- import "./chunk-TMK6RSYW.js";
40
+ } from "./chunk-2MJROFVC.js";
41
+ import "./chunk-KCF6S3XF.js";
42
+ import "./chunk-NZRWTCRM.js";
43
+ import "./chunk-TBR2Q37Y.js";
30
44
  import "./chunk-ECCWJHC6.js";
31
45
  import {
32
46
  AGENT_REASON,
@@ -92,45 +106,17 @@ function getDefaultRange() {
92
106
  const from = new Date(to.getTime() - 24 * 60 * 60 * 1e3);
93
107
  return { from: from.toISOString(), to: to.toISOString() };
94
108
  }
95
- function getGroupTitle(group) {
96
- return group.ai?.title || "Alert group";
97
- }
98
- function parseDateInput(value) {
99
- if (value === void 0) {
100
- return void 0;
101
- }
102
- const epochMs = value < 1e12 ? value * 1e3 : value;
103
- const date = new Date(epochMs);
104
- return Number.isNaN(date.getTime()) ? void 0 : date;
105
- }
106
- function formatDateForDisplay(value) {
107
- const date = parseDateInput(value);
108
- if (!date) {
109
- return "-";
110
- }
111
- return date.toLocaleString("en-US", {
112
- year: "numeric",
113
- month: "short",
114
- day: "2-digit",
115
- hour: "2-digit",
116
- minute: "2-digit",
117
- second: "2-digit",
118
- hour12: false,
119
- timeZoneName: "short"
120
- });
121
- }
122
109
  function getStartedAt(group) {
123
- return formatDateForDisplay(getGroupStartedAt(group)?.getTime());
124
- }
125
- function getGroupStartedAt(group) {
126
- return parseDateInput(group.recordedStartedAt) || parseDateInput(group.alerts?.[0]?.startedAt);
110
+ return formatDate(getGroupStartedAt(group));
127
111
  }
128
112
  function getGroupResolvedAt(group) {
129
- const resolvedTimes = (group.alerts ?? []).map((alert) => parseDateInput(alert.resolvedAt)).filter((d) => Boolean(d)).map((d) => d.getTime());
113
+ const resolvedTimes = (group.alerts ?? []).map(
114
+ (alert) => normalizeTimestamp(alert.recordedResolvedAt ?? alert.resolvedAt)
115
+ ).filter((time) => time !== void 0);
130
116
  if (resolvedTimes.length > 0) {
131
- return new Date(Math.max(...resolvedTimes));
117
+ return Math.max(...resolvedTimes);
132
118
  }
133
- return getGroupStartedAt(group);
119
+ return void 0;
134
120
  }
135
121
  function getStatus(group) {
136
122
  const normalizedStatus = (group.status || "").toLowerCase();
@@ -140,8 +126,8 @@ function getStatus(group) {
140
126
  if (normalizedStatus === "resolved") {
141
127
  const startedAt = getGroupStartedAt(group);
142
128
  const resolvedAt = getGroupResolvedAt(group);
143
- if (startedAt && resolvedAt && resolvedAt.getTime() >= startedAt.getTime()) {
144
- return `resolved after ${(0, import_ms.default)(resolvedAt.getTime() - startedAt.getTime())}`;
129
+ if (startedAt && resolvedAt && resolvedAt >= startedAt) {
130
+ return `resolved after ${(0, import_ms.default)(resolvedAt - startedAt)}`;
145
131
  }
146
132
  return "resolved";
147
133
  }
@@ -152,7 +138,7 @@ function getResolvedAt(group) {
152
138
  if (normalizedStatus === "active") {
153
139
  return "active";
154
140
  }
155
- return formatDateForDisplay(getGroupResolvedAt(group)?.getTime());
141
+ return formatDate(getGroupResolvedAt(group));
156
142
  }
157
143
  function getAlertsCount(group) {
158
144
  return String(group.alerts?.length ?? 0);
@@ -192,18 +178,19 @@ function printGroups(groups) {
192
178
  ].map((h) => import_chalk.default.cyan(h));
193
179
  const rows = [
194
180
  headers,
195
- ...groups.map((group) => [
196
- import_chalk.default.bold(getGroupTitle(group)),
197
- import_chalk.default.dim(group.id || "-"),
198
- getStartedAt(group),
199
- group.type || "-",
200
- getStatus(group),
201
- getAlertsCount(group)
202
- ])
181
+ ...groups.map((group) => {
182
+ const row = [
183
+ import_chalk.default.bold(truncateEnd(getGroupTitle(group), 80)),
184
+ import_chalk.default.dim(group.id || "-"),
185
+ getStartedAt(group),
186
+ getGroupType(group)
187
+ ];
188
+ row.push(getStatus(group), getAlertsCount(group));
189
+ return row;
190
+ })
203
191
  ];
204
- const tableOutput = table(rows, { hsep: 3 }).split("\n").map((line) => line.trimEnd()).join("\n").replace(/^/gm, " ");
205
192
  output_manager_default.print(`
206
- ${tableOutput}
193
+ ${renderAlertTable(rows, 3)}
207
194
  `);
208
195
  }
209
196
  function printAiSections(groups) {
@@ -26,7 +26,7 @@ import {
26
26
  getLinkedProject,
27
27
  getProjectByNameOrId,
28
28
  getScope
29
- } from "./chunk-TMK6RSYW.js";
29
+ } from "./chunk-TBR2Q37Y.js";
30
30
  import "./chunk-ECCWJHC6.js";
31
31
  import "./chunk-UDWRZXIT.js";
32
32
  import {
@@ -6,13 +6,13 @@ const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __dirname_(__filename);
7
7
  import {
8
8
  renderThreadRow
9
- } from "./chunk-BM36UWE2.js";
9
+ } from "./chunk-F5PQWDOC.js";
10
10
  import {
11
11
  handleCommentsParseError,
12
12
  inferBranch,
13
13
  listThreads,
14
14
  resolveCommentsScope
15
- } from "./chunk-YTFJGKRG.js";
15
+ } from "./chunk-LMHT3QR3.js";
16
16
  import {
17
17
  handleValidationError,
18
18
  outputError,
@@ -26,7 +26,7 @@ import {
26
26
  } from "./chunk-FHEMFAHB.js";
27
27
  import {
28
28
  getScope
29
- } from "./chunk-TMK6RSYW.js";
29
+ } from "./chunk-TBR2Q37Y.js";
30
30
  import "./chunk-ECCWJHC6.js";
31
31
  import "./chunk-UDWRZXIT.js";
32
32
  import {
@@ -13,7 +13,7 @@ import {
13
13
  resolveVcrScope,
14
14
  validateVcrChoice,
15
15
  validateVcrJsonOutput
16
- } from "./chunk-DI3HR3K6.js";
16
+ } from "./chunk-GP5VCTEU.js";
17
17
  import {
18
18
  require_lib
19
19
  } from "./chunk-G75NFPIT.js";
@@ -29,7 +29,7 @@ import "./chunk-FYQPTH5C.js";
29
29
  import {
30
30
  require_execa
31
31
  } from "./chunk-R6IGDGX3.js";
32
- import "./chunk-TMK6RSYW.js";
32
+ import "./chunk-TBR2Q37Y.js";
33
33
  import "./chunk-ECCWJHC6.js";
34
34
  import {
35
35
  AGENT_REASON,
@@ -19,7 +19,7 @@ import {
19
19
  requireVcrRepository,
20
20
  resolveVcrScope,
21
21
  validateVcrJsonOutput
22
- } from "./chunk-DI3HR3K6.js";
22
+ } from "./chunk-GP5VCTEU.js";
23
23
  import {
24
24
  outputError,
25
25
  validateOptionalIntegerRange
@@ -31,7 +31,7 @@ import {
31
31
  import {
32
32
  table
33
33
  } from "./chunk-NZRWTCRM.js";
34
- import "./chunk-TMK6RSYW.js";
34
+ import "./chunk-TBR2Q37Y.js";
35
35
  import "./chunk-ECCWJHC6.js";
36
36
  import {
37
37
  AGENT_REASON,
@@ -15,7 +15,7 @@ import {
15
15
  handleVcrApiError,
16
16
  resolveVcrScope,
17
17
  validateVcrJsonOutput
18
- } from "./chunk-DI3HR3K6.js";
18
+ } from "./chunk-GP5VCTEU.js";
19
19
  import {
20
20
  outputError,
21
21
  validateOptionalIntegerRange
@@ -29,7 +29,7 @@ import "./chunk-FYQPTH5C.js";
29
29
  import {
30
30
  table
31
31
  } from "./chunk-NZRWTCRM.js";
32
- import "./chunk-TMK6RSYW.js";
32
+ import "./chunk-TBR2Q37Y.js";
33
33
  import "./chunk-ECCWJHC6.js";
34
34
  import {
35
35
  AGENT_REASON,
@@ -19,7 +19,7 @@ import {
19
19
  resolveVcrScope,
20
20
  validateVcrChoice,
21
21
  validateVcrJsonOutput
22
- } from "./chunk-DI3HR3K6.js";
22
+ } from "./chunk-GP5VCTEU.js";
23
23
  import {
24
24
  outputError,
25
25
  validateOptionalIntegerRange
@@ -33,7 +33,7 @@ import {
33
33
  import {
34
34
  table
35
35
  } from "./chunk-NZRWTCRM.js";
36
- import "./chunk-TMK6RSYW.js";
36
+ import "./chunk-TBR2Q37Y.js";
37
37
  import "./chunk-ECCWJHC6.js";
38
38
  import {
39
39
  AGENT_REASON,
@@ -0,0 +1,188 @@
1
+ import { createRequire as __createRequire } from 'node:module';
2
+ import { fileURLToPath as __fileURLToPath } from 'node:url';
3
+ import { dirname as __dirname_ } from 'node:path';
4
+ const require = __createRequire(import.meta.url);
5
+ const __filename = __fileURLToPath(import.meta.url);
6
+ const __dirname = __dirname_(__filename);
7
+ import {
8
+ formatCustomAlertMetric,
9
+ formatCustomAlertTrigger,
10
+ formatRuleScope,
11
+ isCustomAlertRule,
12
+ parseCustomAlertQuery,
13
+ renderAlertTable
14
+ } from "./chunk-3PGXYIKC.js";
15
+ import {
16
+ emitRulesArgParseError,
17
+ handleRulesApiError,
18
+ parseRulesFlagsAndScope,
19
+ rulesCollectionPath
20
+ } from "./chunk-MAHINYBW.js";
21
+ import "./chunk-T4NODP6Y.js";
22
+ import {
23
+ formatGranularity
24
+ } from "./chunk-5AJPMLDV.js";
25
+ import "./chunk-A3NYPUKZ.js";
26
+ import {
27
+ normalizeRepeatableStringFilters
28
+ } from "./chunk-BUZRVER7.js";
29
+ import "./chunk-FGDKMNEN.js";
30
+ import {
31
+ truncateEnd
32
+ } from "./chunk-OF2GNB42.js";
33
+ import {
34
+ validateJsonOutput
35
+ } from "./chunk-XPKWKPWA.js";
36
+ import {
37
+ rulesLsSubcommand
38
+ } from "./chunk-KCF6S3XF.js";
39
+ import "./chunk-NZRWTCRM.js";
40
+ import "./chunk-TBR2Q37Y.js";
41
+ import "./chunk-ECCWJHC6.js";
42
+ import {
43
+ AGENT_REASON,
44
+ outputAgentError
45
+ } from "./chunk-UDWRZXIT.js";
46
+ import {
47
+ parseArguments,
48
+ printError
49
+ } from "./chunk-SZXT3PDQ.js";
50
+ import {
51
+ getFlagsSpecification,
52
+ isAPIError
53
+ } from "./chunk-KSSNLCL4.js";
54
+ import "./chunk-P4QNYOFB.js";
55
+ import "./chunk-52QYYTM5.js";
56
+ import {
57
+ output_manager_default
58
+ } from "./chunk-OX7KI3LF.js";
59
+ import "./chunk-GGP5R3FU.js";
60
+ import {
61
+ require_source
62
+ } from "./chunk-S7KYDPEM.js";
63
+ import {
64
+ __toESM
65
+ } from "./chunk-TZ2YI2VH.js";
66
+
67
+ // src/commands/alerts/rules/ls.ts
68
+ var import_chalk = __toESM(require_source(), 1);
69
+ function getCustomAlertRuleDetails(rule) {
70
+ const customAlert = rule.customAlert;
71
+ if (!isCustomAlertRule(rule) || !customAlert) {
72
+ return "";
73
+ }
74
+ const metric = formatCustomAlertMetric(customAlert);
75
+ const trigger = formatCustomAlertTrigger(customAlert);
76
+ const min = typeof customAlert.minThreshold === "number" ? `min ${customAlert.minThreshold}` : void 0;
77
+ const granularity = formatGranularity(
78
+ parseCustomAlertQuery(customAlert.queryJsonString).granularity
79
+ );
80
+ const interval = granularity ? `every ${granularity}` : void 0;
81
+ return [metric, trigger, min, interval].filter(Boolean).join("; ");
82
+ }
83
+ function ruleMatchesTypes(rule, types) {
84
+ if (types.length === 0) {
85
+ return true;
86
+ }
87
+ return rule.alertTypes?.some((alertType) => types.includes(alertType.type)) || types.includes("custom_alert") && isCustomAlertRule(rule);
88
+ }
89
+ function getRuleScope(rule) {
90
+ return formatRuleScope(rule.projectId, {
91
+ projectIdMaxLength: 24,
92
+ filterMaxLength: 24
93
+ });
94
+ }
95
+ function printRules(rules) {
96
+ const showDetails = rules.some((rule) => getCustomAlertRuleDetails(rule));
97
+ const headers = [
98
+ "Name",
99
+ "Rule id",
100
+ "Scope",
101
+ ...showDetails ? ["Details"] : []
102
+ ].map((h) => import_chalk.default.cyan(h));
103
+ const rows = [
104
+ headers,
105
+ ...rules.map((rule) => {
106
+ const row = [
107
+ import_chalk.default.bold(truncateEnd(rule.name || "-", 44)),
108
+ import_chalk.default.dim(rule.id || "-"),
109
+ getRuleScope(rule)
110
+ ];
111
+ if (showDetails) {
112
+ row.push(truncateEnd(getCustomAlertRuleDetails(rule) || "-", 72));
113
+ }
114
+ return row;
115
+ })
116
+ ];
117
+ output_manager_default.print(`
118
+ ${renderAlertTable(rows, 2)}
119
+ `);
120
+ }
121
+ async function ls(client, argv) {
122
+ let parsedArgs;
123
+ try {
124
+ parsedArgs = parseArguments(
125
+ argv,
126
+ getFlagsSpecification(rulesLsSubcommand.options)
127
+ );
128
+ } catch (e) {
129
+ emitRulesArgParseError(client, e, "alerts rules ls --project <name-or-id>");
130
+ printError(e);
131
+ return 1;
132
+ }
133
+ const flags = parsedArgs.flags;
134
+ const fr = validateJsonOutput(flags);
135
+ if (!fr.valid) {
136
+ outputAgentError(
137
+ client,
138
+ {
139
+ status: "error",
140
+ reason: AGENT_REASON.INVALID_ARGUMENTS,
141
+ message: fr.error
142
+ },
143
+ 1
144
+ );
145
+ output_manager_default.error(fr.error);
146
+ return 1;
147
+ }
148
+ const scope = await parseRulesFlagsAndScope(
149
+ client,
150
+ {
151
+ "--project": flags["--project"],
152
+ "--all": flags["--all"]
153
+ },
154
+ fr.jsonOutput,
155
+ "alerts rules ls"
156
+ );
157
+ if (typeof scope === "number") {
158
+ return scope;
159
+ }
160
+ const path = rulesCollectionPath(scope);
161
+ output_manager_default.spinner("Fetching alert rules...");
162
+ try {
163
+ const rules = await client.fetch(path);
164
+ const types = normalizeRepeatableStringFilters(flags["--type"]);
165
+ const filteredRules = rules.filter((rule) => ruleMatchesTypes(rule, types));
166
+ if (fr.jsonOutput) {
167
+ client.stdout.write(
168
+ `${JSON.stringify({ rules: filteredRules }, null, 2)}
169
+ `
170
+ );
171
+ } else if (filteredRules.length === 0) {
172
+ output_manager_default.log("No alert rules found for this scope.");
173
+ } else {
174
+ printRules(filteredRules);
175
+ }
176
+ return 0;
177
+ } catch (err) {
178
+ if (isAPIError(err)) {
179
+ return handleRulesApiError(client, err, fr.jsonOutput);
180
+ }
181
+ throw err;
182
+ } finally {
183
+ output_manager_default.stopSpinner();
184
+ }
185
+ }
186
+ export {
187
+ ls as default
188
+ };
@@ -13,7 +13,7 @@ import {
13
13
  resolveCommentsScope,
14
14
  threadNotFoundMessage,
15
15
  toApiErrorParts
16
- } from "./chunk-YTFJGKRG.js";
16
+ } from "./chunk-LMHT3QR3.js";
17
17
  import {
18
18
  outputError
19
19
  } from "./chunk-BUZRVER7.js";
@@ -22,7 +22,7 @@ import {
22
22
  } from "./chunk-FHEMFAHB.js";
23
23
  import {
24
24
  require_open
25
- } from "./chunk-TMK6RSYW.js";
25
+ } from "./chunk-TBR2Q37Y.js";
26
26
  import "./chunk-ECCWJHC6.js";
27
27
  import "./chunk-UDWRZXIT.js";
28
28
  import {
@@ -17,7 +17,7 @@ import {
17
17
  printDiffSummary,
18
18
  requireProjectContext,
19
19
  withGlobalFlags
20
- } from "./chunk-ARKHETJP.js";
20
+ } from "./chunk-555WJSO5.js";
21
21
  import {
22
22
  publishSubcommand
23
23
  } from "./chunk-VZSZBD4V.js";
@@ -25,7 +25,7 @@ import {
25
25
  stamp_default
26
26
  } from "./chunk-64IF634X.js";
27
27
  import "./chunk-VXYGCOKL.js";
28
- import "./chunk-TMK6RSYW.js";
28
+ import "./chunk-TBR2Q37Y.js";
29
29
  import "./chunk-ECCWJHC6.js";
30
30
  import {
31
31
  outputAgentError
@@ -7,21 +7,24 @@ const __dirname = __dirname_(__filename);
7
7
  import {
8
8
  fetchMetricDetailOrExit,
9
9
  getDefaultAggregation
10
- } from "./chunk-6RTK6BWX.js";
10
+ } from "./chunk-YA3WQFLY.js";
11
11
  import {
12
12
  computeGranularity,
13
13
  formatText
14
- } from "./chunk-F5OMERHI.js";
14
+ } from "./chunk-QZD5DKUR.js";
15
15
  import {
16
16
  formatErrorJson,
17
17
  formatQueryJson,
18
18
  getRollupColumnName,
19
19
  handleApiError
20
- } from "./chunk-Z7NPYIZ6.js";
20
+ } from "./chunk-NM43FFV6.js";
21
+ import "./chunk-5AJPMLDV.js";
22
+ import "./chunk-A3NYPUKZ.js";
21
23
  import {
22
24
  resolveTimeRange,
23
25
  validateAllProjectMutualExclusivity
24
26
  } from "./chunk-BUZRVER7.js";
27
+ import "./chunk-OF2GNB42.js";
25
28
  import {
26
29
  validateJsonOutput
27
30
  } from "./chunk-XPKWKPWA.js";
@@ -34,7 +37,7 @@ import {
34
37
  getLinkedProject,
35
38
  getProjectByNameOrId,
36
39
  getScope
37
- } from "./chunk-TMK6RSYW.js";
40
+ } from "./chunk-TBR2Q37Y.js";
38
41
  import "./chunk-ECCWJHC6.js";
39
42
  import "./chunk-UDWRZXIT.js";
40
43
  import {
@@ -56,9 +59,6 @@ import "./chunk-S7KYDPEM.js";
56
59
  import "./chunk-TZ2YI2VH.js";
57
60
 
58
61
  // src/commands/metrics/validation.ts
59
- function validateMutualExclusivity(all, project) {
60
- return validateAllProjectMutualExclusivity(all, project);
61
- }
62
62
  function validateRequiredMetric(metric) {
63
63
  if (metric) {
64
64
  return { valid: true, value: metric };
@@ -253,7 +253,7 @@ async function query(client, telemetry) {
253
253
  return handleValidationError(requiredMetric, jsonOutput, client);
254
254
  }
255
255
  const metric = requiredMetric.value;
256
- const mutualResult = validateMutualExclusivity(all, project);
256
+ const mutualResult = validateAllProjectMutualExclusivity(all, project);
257
257
  if (!mutualResult.valid) {
258
258
  return handleValidationError(mutualResult, jsonOutput, client);
259
259
  }
@@ -16,7 +16,7 @@ import {
16
16
  resolveRoute,
17
17
  shellQuoteRouteIdentifierForSuggestion,
18
18
  withGlobalFlags
19
- } from "./chunk-ARKHETJP.js";
19
+ } from "./chunk-555WJSO5.js";
20
20
  import {
21
21
  reorderSubcommand
22
22
  } from "./chunk-VZSZBD4V.js";
@@ -24,7 +24,7 @@ import {
24
24
  stamp_default
25
25
  } from "./chunk-64IF634X.js";
26
26
  import "./chunk-VXYGCOKL.js";
27
- import "./chunk-TMK6RSYW.js";
27
+ import "./chunk-TBR2Q37Y.js";
28
28
  import "./chunk-ECCWJHC6.js";
29
29
  import {
30
30
  outputAgentError
@@ -16,7 +16,7 @@ import {
16
16
  resolveCommentsScope,
17
17
  threadNotFoundMessage,
18
18
  toApiErrorParts
19
- } from "./chunk-YTFJGKRG.js";
19
+ } from "./chunk-LMHT3QR3.js";
20
20
  import "./chunk-2473DUBR.js";
21
21
  import {
22
22
  outputError
@@ -27,7 +27,7 @@ import {
27
27
  import {
28
28
  replySubcommand
29
29
  } from "./chunk-FHEMFAHB.js";
30
- import "./chunk-TMK6RSYW.js";
30
+ import "./chunk-TBR2Q37Y.js";
31
31
  import "./chunk-ECCWJHC6.js";
32
32
  import "./chunk-UDWRZXIT.js";
33
33
  import {
@@ -14,7 +14,7 @@ import {
14
14
  threadNotFoundMessage,
15
15
  toApiErrorParts,
16
16
  updateThread
17
- } from "./chunk-YTFJGKRG.js";
17
+ } from "./chunk-LMHT3QR3.js";
18
18
  import {
19
19
  canPrompt
20
20
  } from "./chunk-2473DUBR.js";
@@ -28,7 +28,7 @@ import {
28
28
  reopenSubcommand,
29
29
  resolveSubcommand
30
30
  } from "./chunk-FHEMFAHB.js";
31
- import "./chunk-TMK6RSYW.js";
31
+ import "./chunk-TBR2Q37Y.js";
32
32
  import "./chunk-ECCWJHC6.js";
33
33
  import "./chunk-UDWRZXIT.js";
34
34
  import {
@@ -19,7 +19,7 @@ import {
19
19
  requireProjectContext,
20
20
  validateRequiredArguments,
21
21
  withGlobalFlags
22
- } from "./chunk-ARKHETJP.js";
22
+ } from "./chunk-555WJSO5.js";
23
23
  import {
24
24
  restoreSubcommand
25
25
  } from "./chunk-VZSZBD4V.js";
@@ -27,7 +27,7 @@ import {
27
27
  stamp_default
28
28
  } from "./chunk-64IF634X.js";
29
29
  import "./chunk-VXYGCOKL.js";
30
- import "./chunk-TMK6RSYW.js";
30
+ import "./chunk-TBR2Q37Y.js";
31
31
  import "./chunk-ECCWJHC6.js";
32
32
  import {
33
33
  outputAgentError
@@ -13,13 +13,13 @@ import {
13
13
  requireVcrRepositoryAndImageId,
14
14
  resolveVcrScope,
15
15
  validateVcrJsonOutput
16
- } from "./chunk-DI3HR3K6.js";
16
+ } from "./chunk-GP5VCTEU.js";
17
17
  import "./chunk-BUZRVER7.js";
18
18
  import "./chunk-XPKWKPWA.js";
19
19
  import {
20
20
  imageRmSubcommand
21
21
  } from "./chunk-FYQPTH5C.js";
22
- import "./chunk-TMK6RSYW.js";
22
+ import "./chunk-TBR2Q37Y.js";
23
23
  import "./chunk-ECCWJHC6.js";
24
24
  import {
25
25
  AGENT_REASON,
@@ -13,7 +13,7 @@ import {
13
13
  requireVcrRepository,
14
14
  resolveVcrScope,
15
15
  validateVcrJsonOutput
16
- } from "./chunk-DI3HR3K6.js";
16
+ } from "./chunk-GP5VCTEU.js";
17
17
  import "./chunk-BUZRVER7.js";
18
18
  import "./chunk-XPKWKPWA.js";
19
19
  import {
@@ -21,7 +21,7 @@ import {
21
21
  } from "./chunk-3VS4DTAU.js";
22
22
  import "./chunk-GIL3VAUR.js";
23
23
  import "./chunk-FYQPTH5C.js";
24
- import "./chunk-TMK6RSYW.js";
24
+ import "./chunk-TBR2Q37Y.js";
25
25
  import "./chunk-ECCWJHC6.js";
26
26
  import {
27
27
  AGENT_REASON,
@@ -9,16 +9,16 @@ import {
9
9
  handleRulesApiError,
10
10
  parseRulesFlagsAndScope,
11
11
  rulesItemPath
12
- } from "./chunk-SWEPOMSA.js";
13
- import "./chunk-23U6FANO.js";
12
+ } from "./chunk-MAHINYBW.js";
13
+ import "./chunk-T4NODP6Y.js";
14
14
  import "./chunk-BUZRVER7.js";
15
15
  import {
16
16
  validateJsonOutput
17
17
  } from "./chunk-XPKWKPWA.js";
18
18
  import {
19
19
  rulesRmSubcommand
20
- } from "./chunk-STJJ3DFO.js";
21
- import "./chunk-TMK6RSYW.js";
20
+ } from "./chunk-KCF6S3XF.js";
21
+ import "./chunk-TBR2Q37Y.js";
22
22
  import "./chunk-ECCWJHC6.js";
23
23
  import {
24
24
  AGENT_REASON,
@@ -112,7 +112,8 @@ async function rm(client, argv) {
112
112
  "--project": parsedArgs.flags["--project"],
113
113
  "--all": parsedArgs.flags["--all"]
114
114
  },
115
- fr.jsonOutput
115
+ fr.jsonOutput,
116
+ `alerts rules rm ${ruleId}`
116
117
  );
117
118
  if (typeof scope === "number") {
118
119
  return scope;