@vm0/cli 9.218.0 → 9.219.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/{agent-RNWS32PS.js → agent-6TGGHCAT.js} +4 -4
  2. package/{automation-BH3A6ZXJ.js → automation-UPVMYME3.js} +21 -11
  3. package/automation-UPVMYME3.js.map +1 -0
  4. package/{banking-ULTE7SAB.js → banking-K4E2GBY7.js} +2 -2
  5. package/{chat-CKB72QJB.js → chat-3JUQFSSY.js} +2 -2
  6. package/{chunk-LLCUG4UW.js → chunk-5AIMJ6O5.js} +2 -2
  7. package/{chunk-4KC5DNRL.js → chunk-7HZXC5CL.js} +24 -24
  8. package/{chunk-4KC5DNRL.js.map → chunk-7HZXC5CL.js.map} +1 -1
  9. package/{chunk-BEDSO3JA.js → chunk-APCV4ZUL.js} +2 -2
  10. package/{chunk-WXJN476B.js → chunk-CWBLSKVL.js} +46 -195
  11. package/chunk-CWBLSKVL.js.map +1 -0
  12. package/{chunk-FZCXTO3A.js → chunk-DF3WVSZY.js} +2 -2
  13. package/{chunk-KBXEJJAI.js → chunk-DLB4B2NY.js} +3 -3
  14. package/chunk-H63W4KQL.js +160 -0
  15. package/chunk-H63W4KQL.js.map +1 -0
  16. package/{chunk-G3LGQ2ZH.js → chunk-MY2ZR6YU.js} +8 -8
  17. package/{chunk-WM626DEN.js → chunk-NI3BDNLY.js} +9 -7
  18. package/{chunk-WM626DEN.js.map → chunk-NI3BDNLY.js.map} +1 -1
  19. package/{chunk-DCXHVS3G.js → chunk-VLGMCLXQ.js} +2 -2
  20. package/{chunk-P2JBAXKF.js → chunk-YY7SV2BZ.js} +53 -19
  21. package/chunk-YY7SV2BZ.js.map +1 -0
  22. package/clerk.generated-ERU55NQP.js +402 -0
  23. package/clerk.generated-ERU55NQP.js.map +1 -0
  24. package/{computer-use-AUL6VROX.js → computer-use-RFTIT5ZT.js} +2 -2
  25. package/{connector-UVUTT7U7.js → connector-6VGK6J4L.js} +3 -3
  26. package/{credit-AVQ3E2PT.js → credit-AFPBXBIU.js} +2 -2
  27. package/deel.generated-JIOY5DWR.js +244 -0
  28. package/deel.generated-JIOY5DWR.js.map +1 -0
  29. package/{developer-support-AGZEOAM5.js → developer-support-HATEQ7AD.js} +2 -2
  30. package/{doctor-47LF7WNU.js → doctor-IAOTOO4G.js} +5 -5
  31. package/dropbox.generated-ZZKEVL5X.js +140 -0
  32. package/dropbox.generated-ZZKEVL5X.js.map +1 -0
  33. package/{generate-47V6BFM5.js → generate-TXO7YLT3.js} +4 -4
  34. package/{github-4HBBN4XX.js → github-WAXJU2GY.js} +2 -2
  35. package/{goal-OEWQQNB4.js → goal-UIJNFLUD.js} +2 -2
  36. package/{host-PHP3KDWT.js → host-JN3SWFZN.js} +2 -2
  37. package/index.js +21 -19
  38. package/index.js.map +1 -1
  39. package/{logs-JIAHCLEH.js → logs-5LLAN46D.js} +14 -12
  40. package/{logs-JIAHCLEH.js.map → logs-5LLAN46D.js.map} +1 -1
  41. package/{maps-EVKSSNKD.js → maps-U6U7CVN4.js} +2 -2
  42. package/{model-2FNBUWIO.js → model-JQGMSCEW.js} +3 -3
  43. package/{model-provider-D4ACR7YF.js → model-provider-HPULHQCP.js} +3 -3
  44. package/{org-BMLDEYAR.js → org-P64YC3X4.js} +2 -2
  45. package/package.json +1 -1
  46. package/{phone-LBW44WZ7.js → phone-DQ642OPH.js} +2 -2
  47. package/{preference-SFBKADPE.js → preference-BYLQWJJH.js} +2 -2
  48. package/{resource-SLFUFT62.js → resource-HON6W7BP.js} +3 -3
  49. package/{schedule-XUGLVIVF.js → schedule-MTI5OP23.js} +2 -2
  50. package/schedule-MTI5OP23.js.map +1 -0
  51. package/{search-ERFAZY76.js → search-NDBJJPWS.js} +11 -9
  52. package/{search-ERFAZY76.js.map → search-NDBJJPWS.js.map} +1 -1
  53. package/{secret-AC6AP36O.js → secret-AC6UW4DJ.js} +3 -3
  54. package/sentry.generated-Y3V3MFG5.js +112 -0
  55. package/sentry.generated-Y3V3MFG5.js.map +1 -0
  56. package/{slack-KSW6LGUG.js → slack-S6KJLE6R.js} +2 -2
  57. package/strava.generated-FDURULCZ.js +76 -0
  58. package/strava.generated-FDURULCZ.js.map +1 -0
  59. package/{telegram-KHF2MCZL.js → telegram-SD6TEM2P.js} +2 -2
  60. package/{variable-5QIBE74B.js → variable-7O57XR74.js} +2 -2
  61. package/{web-P3EU7EUP.js → web-3MQWFUZU.js} +2 -2
  62. package/{whoami-OQJPTUBU.js → whoami-U6VBDTX5.js} +4 -4
  63. package/{workflow-LKAMIYML.js → workflow-GGH4WU2J.js} +26 -6
  64. package/workflow-GGH4WU2J.js.map +1 -0
  65. package/xero.generated-NPSQE6GC.js +164 -0
  66. package/xero.generated-NPSQE6GC.js.map +1 -0
  67. package/zero.js +32 -32
  68. package/automation-BH3A6ZXJ.js.map +0 -1
  69. package/chunk-P2JBAXKF.js.map +0 -1
  70. package/chunk-WXJN476B.js.map +0 -1
  71. package/clerk.generated-CUIJPEBA.js +0 -335
  72. package/clerk.generated-CUIJPEBA.js.map +0 -1
  73. package/deel.generated-U6UEJPXO.js +0 -189
  74. package/deel.generated-U6UEJPXO.js.map +0 -1
  75. package/dropbox.generated-SM45XNZI.js +0 -111
  76. package/dropbox.generated-SM45XNZI.js.map +0 -1
  77. package/schedule-XUGLVIVF.js.map +0 -1
  78. package/sentry.generated-TQZTJGQ4.js +0 -90
  79. package/sentry.generated-TQZTJGQ4.js.map +0 -1
  80. package/strava.generated-FK4SMYR7.js +0 -63
  81. package/strava.generated-FK4SMYR7.js.map +0 -1
  82. package/workflow-LKAMIYML.js.map +0 -1
  83. package/xero.generated-UVAXXS6Q.js +0 -129
  84. package/xero.generated-UVAXXS6Q.js.map +0 -1
  85. /package/{agent-RNWS32PS.js.map → agent-6TGGHCAT.js.map} +0 -0
  86. /package/{banking-ULTE7SAB.js.map → banking-K4E2GBY7.js.map} +0 -0
  87. /package/{chat-CKB72QJB.js.map → chat-3JUQFSSY.js.map} +0 -0
  88. /package/{chunk-LLCUG4UW.js.map → chunk-5AIMJ6O5.js.map} +0 -0
  89. /package/{chunk-BEDSO3JA.js.map → chunk-APCV4ZUL.js.map} +0 -0
  90. /package/{chunk-FZCXTO3A.js.map → chunk-DF3WVSZY.js.map} +0 -0
  91. /package/{chunk-KBXEJJAI.js.map → chunk-DLB4B2NY.js.map} +0 -0
  92. /package/{chunk-G3LGQ2ZH.js.map → chunk-MY2ZR6YU.js.map} +0 -0
  93. /package/{chunk-DCXHVS3G.js.map → chunk-VLGMCLXQ.js.map} +0 -0
  94. /package/{computer-use-AUL6VROX.js.map → computer-use-RFTIT5ZT.js.map} +0 -0
  95. /package/{connector-UVUTT7U7.js.map → connector-6VGK6J4L.js.map} +0 -0
  96. /package/{credit-AVQ3E2PT.js.map → credit-AFPBXBIU.js.map} +0 -0
  97. /package/{developer-support-AGZEOAM5.js.map → developer-support-HATEQ7AD.js.map} +0 -0
  98. /package/{doctor-47LF7WNU.js.map → doctor-IAOTOO4G.js.map} +0 -0
  99. /package/{generate-47V6BFM5.js.map → generate-TXO7YLT3.js.map} +0 -0
  100. /package/{github-4HBBN4XX.js.map → github-WAXJU2GY.js.map} +0 -0
  101. /package/{goal-OEWQQNB4.js.map → goal-UIJNFLUD.js.map} +0 -0
  102. /package/{host-PHP3KDWT.js.map → host-JN3SWFZN.js.map} +0 -0
  103. /package/{maps-EVKSSNKD.js.map → maps-U6U7CVN4.js.map} +0 -0
  104. /package/{model-2FNBUWIO.js.map → model-JQGMSCEW.js.map} +0 -0
  105. /package/{model-provider-D4ACR7YF.js.map → model-provider-HPULHQCP.js.map} +0 -0
  106. /package/{org-BMLDEYAR.js.map → org-P64YC3X4.js.map} +0 -0
  107. /package/{phone-LBW44WZ7.js.map → phone-DQ642OPH.js.map} +0 -0
  108. /package/{preference-SFBKADPE.js.map → preference-BYLQWJJH.js.map} +0 -0
  109. /package/{resource-SLFUFT62.js.map → resource-HON6W7BP.js.map} +0 -0
  110. /package/{secret-AC6AP36O.js.map → secret-AC6UW4DJ.js.map} +0 -0
  111. /package/{slack-KSW6LGUG.js.map → slack-S6KJLE6R.js.map} +0 -0
  112. /package/{telegram-KHF2MCZL.js.map → telegram-SD6TEM2P.js.map} +0 -0
  113. /package/{variable-5QIBE74B.js.map → variable-7O57XR74.js.map} +0 -0
  114. /package/{web-P3EU7EUP.js.map → web-3MQWFUZU.js.map} +0 -0
  115. /package/{whoami-OQJPTUBU.js.map → whoami-U6VBDTX5.js.map} +0 -0
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  MODEL_PROVIDER_TYPES
6
- } from "./chunk-P2JBAXKF.js";
6
+ } from "./chunk-YY7SV2BZ.js";
7
7
  import {
8
8
  init_esm_shims
9
9
  } from "./chunk-DIRAZ3YX.js";
@@ -40,4 +40,4 @@ export {
40
40
  formatModelProviderRoute,
41
41
  formatModelPolicyStatus
42
42
  };
43
- //# sourceMappingURL=chunk-FZCXTO3A.js.map
43
+ //# sourceMappingURL=chunk-DF3WVSZY.js.map
@@ -50,7 +50,7 @@ if (DSN) {
50
50
  Sentry.init({
51
51
  dsn: DSN,
52
52
  environment: process.env.SENTRY_ENVIRONMENT ?? "production",
53
- release: "9.218.0",
53
+ release: "9.219.1",
54
54
  sendDefaultPii: false,
55
55
  tracesSampleRate: 0,
56
56
  shutdownTimeout: 500,
@@ -69,7 +69,7 @@ if (DSN) {
69
69
  }
70
70
  });
71
71
  Sentry.setContext("cli", {
72
- version: "9.218.0",
72
+ version: "9.219.1",
73
73
  command: process.argv.slice(2).join(" ")
74
74
  });
75
75
  Sentry.setContext("runtime", {
@@ -146,4 +146,4 @@ async function configureGlobalProxyFromEnv() {
146
146
  export {
147
147
  configureGlobalProxyFromEnv
148
148
  };
149
- //# sourceMappingURL=chunk-KBXEJJAI.js.map
149
+ //# sourceMappingURL=chunk-DLB4B2NY.js.map
@@ -0,0 +1,160 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from "node:module";
3
+ const require = __createRequire(import.meta.url);
4
+ import {
5
+ init_esm_shims
6
+ } from "./chunk-DIRAZ3YX.js";
7
+
8
+ // src/lib/utils/time-parser.ts
9
+ init_esm_shims();
10
+ var ISO_8601_PATTERN = /^(\d{4})-(\d{2})-(\d{2})(?:[Tt](\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,9})?)?(?:[Zz]|[+-]\d{2}:?\d{2})?)?$/;
11
+ var DAYS_BY_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
12
+ var MAX_DATE_TIMESTAMP_MS = 864e13;
13
+ function parseTime(timeStr) {
14
+ const relativeMatch = timeStr.match(/^(\d+)([smhdw])$/);
15
+ if (relativeMatch) {
16
+ const value = Number(relativeMatch[1]);
17
+ const unit = relativeMatch[2];
18
+ const timestamp2 = parseRelativeTime(value, unit);
19
+ if (timestamp2 !== void 0) {
20
+ return timestamp2;
21
+ }
22
+ }
23
+ if (/^\d+$/.test(timeStr)) {
24
+ const rawTimestamp = Number(timeStr);
25
+ const timestamp2 = rawTimestamp < 1e10 ? rawTimestamp * 1e3 : rawTimestamp;
26
+ if (isValidTimestamp(timestamp2)) {
27
+ return timestamp2;
28
+ }
29
+ }
30
+ const timestamp = parseIsoTime(timeStr);
31
+ if (timestamp !== void 0) {
32
+ return timestamp;
33
+ }
34
+ throw new Error(
35
+ `Invalid time format: "${timeStr}". Supported formats: relative (5m, 2h, 1d), ISO 8601 (2024-01-15T10:30:00Z), Unix timestamp`
36
+ );
37
+ }
38
+ function parseIsoTime(timeStr) {
39
+ const match = ISO_8601_PATTERN.exec(timeStr);
40
+ if (!match) {
41
+ return void 0;
42
+ }
43
+ const year = Number(match[1]);
44
+ const month = Number(match[2]);
45
+ const day = Number(match[3]);
46
+ const hour = match[4] ? Number(match[4]) : 0;
47
+ const minute = match[5] ? Number(match[5]) : 0;
48
+ const second = match[6] ? Number(match[6]) : 0;
49
+ if (!Number.isInteger(year) || !Number.isInteger(month) || !Number.isInteger(day) || !Number.isInteger(hour) || !Number.isInteger(minute) || !Number.isInteger(second) || month < 1 || month > 12 || day < 1 || day > daysInMonth(year, month) || hour > 23 || minute > 59 || second > 59) {
50
+ return void 0;
51
+ }
52
+ const timestamp = new Date(timeStr).getTime();
53
+ return isValidTimestamp(timestamp) ? timestamp : void 0;
54
+ }
55
+ function daysInMonth(year, month) {
56
+ if (month === 2) {
57
+ return isLeapYear(year) ? 29 : 28;
58
+ }
59
+ return DAYS_BY_MONTH[month - 1] ?? 0;
60
+ }
61
+ function isLeapYear(year) {
62
+ return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
63
+ }
64
+ function parseRelativeTime(value, unit) {
65
+ if (!Number.isSafeInteger(value)) {
66
+ return void 0;
67
+ }
68
+ const now = Date.now();
69
+ const multipliers = {
70
+ s: 1e3,
71
+ // seconds
72
+ m: 60 * 1e3,
73
+ // minutes
74
+ h: 60 * 60 * 1e3,
75
+ // hours
76
+ d: 24 * 60 * 60 * 1e3,
77
+ // days
78
+ w: 7 * 24 * 60 * 60 * 1e3
79
+ // weeks
80
+ };
81
+ const multiplier = multipliers[unit];
82
+ if (!multiplier) {
83
+ throw new Error(`Unknown time unit: ${unit}`);
84
+ }
85
+ const timestamp = now - value * multiplier;
86
+ return isValidTimestamp(timestamp) ? timestamp : void 0;
87
+ }
88
+ function isValidTimestamp(timestamp) {
89
+ return Number.isSafeInteger(timestamp) && Math.abs(timestamp) <= MAX_DATE_TIMESTAMP_MS;
90
+ }
91
+
92
+ // src/lib/utils/log-pagination.ts
93
+ init_esm_shims();
94
+ function parsePositiveLogCount(value, optionName) {
95
+ const trimmed = value.trim();
96
+ if (!/^0*[1-9]\d*$/.test(trimmed)) {
97
+ throw new Error(`Option ${optionName} must be a positive integer`);
98
+ }
99
+ const count = Number(trimmed);
100
+ if (!Number.isSafeInteger(count)) {
101
+ throw new Error(`Option ${optionName} must be a positive integer`);
102
+ }
103
+ return count;
104
+ }
105
+ function parseBoundedLogCount(value, optionName, min, max) {
106
+ const trimmed = value.trim();
107
+ if (!/^\d+$/.test(trimmed)) {
108
+ throw new Error(`${optionName} must be between ${min} and ${max}`);
109
+ }
110
+ const count = Number(trimmed);
111
+ if (!Number.isSafeInteger(count) || count < min || count > max) {
112
+ throw new Error(`${optionName} must be between ${min} and ${max}`);
113
+ }
114
+ return count;
115
+ }
116
+ async function collectLogItems(options) {
117
+ const collected = [];
118
+ const seenCursors = /* @__PURE__ */ new Set();
119
+ let cursor;
120
+ while (true) {
121
+ const requestLimit = options.targetCount === "all" ? options.pageLimit : Math.min(options.pageLimit, options.targetCount - collected.length);
122
+ const page = await options.fetchPage({
123
+ sinceTime: options.sinceTime,
124
+ cursor,
125
+ limit: requestLimit,
126
+ order: options.order
127
+ });
128
+ collected.push(...page.items);
129
+ if (options.targetCount !== "all" && collected.length >= options.targetCount) {
130
+ break;
131
+ }
132
+ const nextCursor = page.nextCursor ?? null;
133
+ if (!page.hasMore || !nextCursor || seenCursors.has(nextCursor)) {
134
+ break;
135
+ }
136
+ seenCursors.add(nextCursor);
137
+ cursor = nextCursor;
138
+ }
139
+ const entries = options.targetCount === "all" ? collected : collected.slice(0, options.targetCount);
140
+ return options.order === "desc" ? entries.reverse() : entries;
141
+ }
142
+
143
+ // src/lib/utils/search-query.ts
144
+ init_esm_shims();
145
+ function parseSearchQuery(value, label) {
146
+ const trimmed = value.trim();
147
+ if (!trimmed) {
148
+ throw new Error(`${label} cannot be empty.`);
149
+ }
150
+ return trimmed;
151
+ }
152
+
153
+ export {
154
+ parseTime,
155
+ parsePositiveLogCount,
156
+ parseBoundedLogCount,
157
+ collectLogItems,
158
+ parseSearchQuery
159
+ };
160
+ //# sourceMappingURL=chunk-H63W4KQL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/utils/time-parser.ts","../src/lib/utils/log-pagination.ts","../src/lib/utils/search-query.ts"],"sourcesContent":["/**\n * Time parser utility for --since option\n *\n * Supports:\n * - Relative time: 5s, 10m, 2h, 1d, 1w (seconds, minutes, hours, days, weeks)\n * - Absolute time: ISO 8601 format (2024-01-15T10:30:00Z)\n * - Unix timestamp: 1705312200 or 1705312200000 (seconds or milliseconds)\n */\n\n/**\n * Parse a time string and return a Unix timestamp in milliseconds\n * @param timeStr - Time string to parse\n * @returns Unix timestamp in milliseconds\n * @throws Error if the time string is invalid\n */\nconst ISO_8601_PATTERN =\n /^(\\d{4})-(\\d{2})-(\\d{2})(?:[Tt](\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.\\d{1,9})?)?(?:[Zz]|[+-]\\d{2}:?\\d{2})?)?$/;\nconst DAYS_BY_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst MAX_DATE_TIMESTAMP_MS = 8_640_000_000_000_000;\n\nexport function parseTime(timeStr: string): number {\n // Try relative time first (e.g., \"5m\", \"2h\", \"1d\")\n const relativeMatch = timeStr.match(/^(\\d+)([smhdw])$/);\n if (relativeMatch) {\n const value = Number(relativeMatch[1]!);\n const unit = relativeMatch[2]!;\n const timestamp = parseRelativeTime(value, unit);\n if (timestamp !== undefined) {\n return timestamp;\n }\n }\n\n // Try Unix timestamp (seconds or milliseconds)\n if (/^\\d+$/.test(timeStr)) {\n const rawTimestamp = Number(timeStr);\n // If timestamp is less than year 2000 in seconds, assume it's already in ms\n // If it looks like seconds (< 10000000000), convert to ms\n const timestamp =\n rawTimestamp < 10000000000 ? rawTimestamp * 1000 : rawTimestamp;\n if (isValidTimestamp(timestamp)) {\n return timestamp;\n }\n }\n\n // Try ISO 8601 format\n const timestamp = parseIsoTime(timeStr);\n if (timestamp !== undefined) {\n return timestamp;\n }\n\n throw new Error(\n `Invalid time format: \"${timeStr}\". ` +\n `Supported formats: relative (5m, 2h, 1d), ISO 8601 (2024-01-15T10:30:00Z), Unix timestamp`,\n );\n}\n\nfunction parseIsoTime(timeStr: string): number | undefined {\n const match = ISO_8601_PATTERN.exec(timeStr);\n if (!match) {\n return undefined;\n }\n\n const year = Number(match[1]);\n const month = Number(match[2]);\n const day = Number(match[3]);\n const hour = match[4] ? Number(match[4]) : 0;\n const minute = match[5] ? Number(match[5]) : 0;\n const second = match[6] ? Number(match[6]) : 0;\n\n if (\n !Number.isInteger(year) ||\n !Number.isInteger(month) ||\n !Number.isInteger(day) ||\n !Number.isInteger(hour) ||\n !Number.isInteger(minute) ||\n !Number.isInteger(second) ||\n month < 1 ||\n month > 12 ||\n day < 1 ||\n day > daysInMonth(year, month) ||\n hour > 23 ||\n minute > 59 ||\n second > 59\n ) {\n return undefined;\n }\n\n const timestamp = new Date(timeStr).getTime();\n return isValidTimestamp(timestamp) ? timestamp : undefined;\n}\n\nfunction daysInMonth(year: number, month: number): number {\n if (month === 2) {\n return isLeapYear(year) ? 29 : 28;\n }\n return DAYS_BY_MONTH[month - 1] ?? 0;\n}\n\nfunction isLeapYear(year: number): boolean {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\n/**\n * Parse relative time and return Unix timestamp in milliseconds\n */\nfunction parseRelativeTime(value: number, unit: string): number | undefined {\n if (!Number.isSafeInteger(value)) {\n return undefined;\n }\n\n const now = Date.now();\n const multipliers: Record<string, number> = {\n s: 1000, // seconds\n m: 60 * 1000, // minutes\n h: 60 * 60 * 1000, // hours\n d: 24 * 60 * 60 * 1000, // days\n w: 7 * 24 * 60 * 60 * 1000, // weeks\n };\n\n const multiplier = multipliers[unit];\n if (!multiplier) {\n throw new Error(`Unknown time unit: ${unit}`);\n }\n\n const timestamp = now - value * multiplier;\n return isValidTimestamp(timestamp) ? timestamp : undefined;\n}\n\nfunction isValidTimestamp(timestamp: number): boolean {\n return (\n Number.isSafeInteger(timestamp) &&\n Math.abs(timestamp) <= MAX_DATE_TIMESTAMP_MS\n );\n}\n","type LogOrder = \"asc\" | \"desc\";\n\ninterface CursorLogPageRequest {\n readonly sinceTime?: number;\n readonly cursor?: string;\n readonly limit: number;\n readonly order: LogOrder;\n}\n\ninterface CursorLogPage<T> {\n readonly items: readonly T[];\n readonly hasMore: boolean;\n readonly nextCursor?: string | null;\n}\n\ninterface CollectLogItemsOptions<T> {\n readonly fetchPage: (\n request: CursorLogPageRequest,\n ) => Promise<CursorLogPage<T>>;\n readonly sinceTime?: number;\n readonly targetCount: number | \"all\";\n readonly order: LogOrder;\n readonly pageLimit: number;\n}\n\nexport function parsePositiveLogCount(\n value: string,\n optionName: string,\n): number {\n const trimmed = value.trim();\n if (!/^0*[1-9]\\d*$/.test(trimmed)) {\n throw new Error(`Option ${optionName} must be a positive integer`);\n }\n\n const count = Number(trimmed);\n if (!Number.isSafeInteger(count)) {\n throw new Error(`Option ${optionName} must be a positive integer`);\n }\n\n return count;\n}\n\nexport function parseBoundedLogCount(\n value: string,\n optionName: string,\n min: number,\n max: number,\n): number {\n const trimmed = value.trim();\n if (!/^\\d+$/.test(trimmed)) {\n throw new Error(`${optionName} must be between ${min} and ${max}`);\n }\n\n const count = Number(trimmed);\n if (!Number.isSafeInteger(count) || count < min || count > max) {\n throw new Error(`${optionName} must be between ${min} and ${max}`);\n }\n\n return count;\n}\n\nexport async function collectLogItems<T>(\n options: CollectLogItemsOptions<T>,\n): Promise<T[]> {\n const collected: T[] = [];\n const seenCursors = new Set<string>();\n let cursor: string | undefined;\n\n while (true) {\n const requestLimit =\n options.targetCount === \"all\"\n ? options.pageLimit\n : Math.min(options.pageLimit, options.targetCount - collected.length);\n\n const page = await options.fetchPage({\n sinceTime: options.sinceTime,\n cursor,\n limit: requestLimit,\n order: options.order,\n });\n\n collected.push(...page.items);\n\n if (\n options.targetCount !== \"all\" &&\n collected.length >= options.targetCount\n ) {\n break;\n }\n\n const nextCursor = page.nextCursor ?? null;\n if (!page.hasMore || !nextCursor || seenCursors.has(nextCursor)) {\n break;\n }\n\n seenCursors.add(nextCursor);\n cursor = nextCursor;\n }\n\n const entries =\n options.targetCount === \"all\"\n ? collected\n : collected.slice(0, options.targetCount);\n\n return options.order === \"desc\" ? entries.reverse() : entries;\n}\n","export function parseSearchQuery(value: string, label: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error(`${label} cannot be empty.`);\n }\n return trimmed;\n}\n"],"mappings":"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","names":["timestamp"]}
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  UNKNOWN_PERMISSION_GRANT
6
- } from "./chunk-P2JBAXKF.js";
6
+ } from "./chunk-YY7SV2BZ.js";
7
7
  import {
8
8
  init_esm_shims
9
9
  } from "./chunk-DIRAZ3YX.js";
@@ -150,7 +150,7 @@ var FIREWALL_PERMISSION_METADATA_LOADERS = Object.assign(/* @__PURE__ */ Object.
150
150
  return (await import("./clearbit.generated-Q2C5WCSZ.js"))["firewallPermissionMetadata"];
151
151
  },
152
152
  ["clerk"]: async () => {
153
- return (await import("./clerk.generated-CUIJPEBA.js"))["firewallPermissionMetadata"];
153
+ return (await import("./clerk.generated-ERU55NQP.js"))["firewallPermissionMetadata"];
154
154
  },
155
155
  ["clickup"]: async () => {
156
156
  return (await import("./clickup.generated-A54ZUSDN.js"))["firewallPermissionMetadata"];
@@ -189,7 +189,7 @@ var FIREWALL_PERMISSION_METADATA_LOADERS = Object.assign(/* @__PURE__ */ Object.
189
189
  return (await import("./db9.generated-HMEKBIK5.js"))["firewallPermissionMetadata"];
190
190
  },
191
191
  ["deel"]: async () => {
192
- return (await import("./deel.generated-U6UEJPXO.js"))["firewallPermissionMetadata"];
192
+ return (await import("./deel.generated-JIOY5DWR.js"))["firewallPermissionMetadata"];
193
193
  },
194
194
  ["deepseek"]: async () => {
195
195
  return (await import("./deepseek.generated-F5U5YCF4.js"))["firewallPermissionMetadata"];
@@ -225,7 +225,7 @@ var FIREWALL_PERMISSION_METADATA_LOADERS = Object.assign(/* @__PURE__ */ Object.
225
225
  return (await import("./drive9.generated-KVIHF5FJ.js"))["firewallPermissionMetadata"];
226
226
  },
227
227
  ["dropbox"]: async () => {
228
- return (await import("./dropbox.generated-SM45XNZI.js"))["firewallPermissionMetadata"];
228
+ return (await import("./dropbox.generated-ZZKEVL5X.js"))["firewallPermissionMetadata"];
229
229
  },
230
230
  ["dropbox-sign"]: async () => {
231
231
  return (await import("./dropbox-sign.generated-KGTXQ4VE.js"))["firewallPermissionMetadata"];
@@ -654,7 +654,7 @@ var FIREWALL_PERMISSION_METADATA_LOADERS = Object.assign(/* @__PURE__ */ Object.
654
654
  return (await import("./sendgrid.generated-ZMVGPUUW.js"))["firewallPermissionMetadata"];
655
655
  },
656
656
  ["sentry"]: async () => {
657
- return (await import("./sentry.generated-TQZTJGQ4.js"))["firewallPermissionMetadata"];
657
+ return (await import("./sentry.generated-Y3V3MFG5.js"))["firewallPermissionMetadata"];
658
658
  },
659
659
  ["serpapi"]: async () => {
660
660
  return (await import("./serpapi.generated-SLY4P6BG.js"))["firewallPermissionMetadata"];
@@ -705,7 +705,7 @@ var FIREWALL_PERMISSION_METADATA_LOADERS = Object.assign(/* @__PURE__ */ Object.
705
705
  return (await import("./strapi.generated-IDNY7T2O.js"))["firewallPermissionMetadata"];
706
706
  },
707
707
  ["strava"]: async () => {
708
- return (await import("./strava.generated-FK4SMYR7.js"))["firewallPermissionMetadata"];
708
+ return (await import("./strava.generated-FDURULCZ.js"))["firewallPermissionMetadata"];
709
709
  },
710
710
  ["streak"]: async () => {
711
711
  return (await import("./streak.generated-Z4GE5KE2.js"))["firewallPermissionMetadata"];
@@ -789,7 +789,7 @@ var FIREWALL_PERMISSION_METADATA_LOADERS = Object.assign(/* @__PURE__ */ Object.
789
789
  return (await import("./x.generated-HPR65YUK.js"))["firewallPermissionMetadata"];
790
790
  },
791
791
  ["xero"]: async () => {
792
- return (await import("./xero.generated-UVAXXS6Q.js"))["firewallPermissionMetadata"];
792
+ return (await import("./xero.generated-NPSQE6GC.js"))["firewallPermissionMetadata"];
793
793
  },
794
794
  ["youtube"]: async () => {
795
795
  return (await import("./youtube.generated-WVCRGH3X.js"))["firewallPermissionMetadata"];
@@ -3089,4 +3089,4 @@ export {
3089
3089
  resolveFirewallMetadataPolicies,
3090
3090
  permissionGrantsToFirewallPolicies
3091
3091
  };
3092
- //# sourceMappingURL=chunk-G3LGQ2ZH.js.map
3092
+ //# sourceMappingURL=chunk-MY2ZR6YU.js.map
@@ -1,19 +1,21 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
+ import {
5
+ parseBoundedLogCount,
6
+ parseSearchQuery,
7
+ parseTime
8
+ } from "./chunk-H63W4KQL.js";
4
9
  import {
5
10
  EventRenderer,
6
11
  EventStreamNormalizer,
7
12
  formatIsoTimestamp,
8
13
  isSupportedFramework,
9
- isUUID,
10
- parseBoundedLogCount,
11
- parseSearchQuery,
12
- parseTime
13
- } from "./chunk-WXJN476B.js";
14
+ isUUID
15
+ } from "./chunk-CWBLSKVL.js";
14
16
  import {
15
17
  searchZeroLogs
16
- } from "./chunk-P2JBAXKF.js";
18
+ } from "./chunk-YY7SV2BZ.js";
17
19
  import {
18
20
  withErrorHandler
19
21
  } from "./chunk-3F4RFLPX.js";
@@ -176,4 +178,4 @@ export {
176
178
  runLogsSearch,
177
179
  searchCommand
178
180
  };
179
- //# sourceMappingURL=chunk-WM626DEN.js.map
181
+ //# sourceMappingURL=chunk-NI3BDNLY.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/zero/logs/search.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n searchZeroLogs,\n type RunEvent,\n type LogsSearchResponse,\n} from \"../../../lib/api\";\nimport { parseTime } from \"../../../lib/utils/time-parser\";\nimport { formatIsoTimestamp } from \"../../../lib/utils/time-format\";\nimport { EventRenderer } from \"../../../lib/events/event-renderer\";\nimport { EventStreamNormalizer } from \"../../../lib/events/event-stream-normalizer\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { isUUID } from \"../../run/shared\";\nimport { parseBoundedLogCount } from \"../../../lib/utils/log-pagination\";\nimport { parseSearchQuery } from \"../../../lib/utils/search-query\";\nimport { isSupportedFramework } from \"@vm0/core/frameworks\";\n\nconst SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1000;\n\nexport interface LogsSearchCliOptions {\n afterContext?: string;\n beforeContext?: string;\n context?: string;\n agentId?: string;\n run?: string;\n since?: string;\n limit?: string;\n}\n\ninterface LogsSearchCommandOptions extends Omit<\n LogsSearchCliOptions,\n \"agentId\"\n> {\n agent?: string;\n}\n\nfunction supportedSearchFramework(\n framework: string | null | undefined,\n): string | undefined {\n const normalized = framework ?? undefined;\n return isSupportedFramework(normalized) ? normalized : undefined;\n}\n\nfunction renderSearchEvent(\n event: RunEvent,\n framework: string | null | undefined,\n renderer: EventRenderer,\n normalizer: EventStreamNormalizer,\n): void {\n const parsedEvents = normalizer.process(\n event.eventData,\n supportedSearchFramework(framework),\n new Date(event.createdAt),\n );\n for (const parsed of parsedEvents) {\n renderer.render(parsed);\n }\n}\n\nfunction flushSearchRenderer(\n renderer: EventRenderer,\n normalizer: EventStreamNormalizer,\n): void {\n for (const parsed of normalizer.flush()) {\n renderer.render(parsed);\n }\n renderer.flush();\n}\n\nfunction formatRunHeader(\n runId: string,\n agentName: string,\n timestamp: string,\n): string {\n const time = formatIsoTimestamp(timestamp);\n return `── Run ${runId} (${agentName}, ${time}) ──────────`;\n}\n\nfunction parseContextOptions(options: LogsSearchCliOptions): {\n before: number;\n after: number;\n} {\n const contextN =\n options.context !== undefined\n ? parseBoundedLogCount(options.context, \"--context\", 0, 10)\n : 0;\n const before =\n options.beforeContext !== undefined\n ? parseBoundedLogCount(options.beforeContext, \"--before-context\", 0, 10)\n : contextN;\n const after =\n options.afterContext !== undefined\n ? parseBoundedLogCount(options.afterContext, \"--after-context\", 0, 10)\n : contextN;\n\n return { before, after };\n}\n\nfunction parseLimit(value: string | undefined): number | undefined {\n if (value === undefined) return undefined;\n return parseBoundedLogCount(value, \"--limit\", 1, 50);\n}\n\nfunction renderResults(response: LogsSearchResponse): void {\n const grouped = new Map<\n string,\n { agentName: string; results: LogsSearchResponse[\"results\"] }\n >();\n for (const result of response.results) {\n const existing = grouped.get(result.runId);\n if (existing) {\n existing.results.push(result);\n } else {\n grouped.set(result.runId, {\n agentName: result.agentName,\n results: [result],\n });\n }\n }\n\n let isFirstGroup = true;\n for (const [runId, group] of grouped) {\n if (!isFirstGroup) {\n console.log();\n }\n isFirstGroup = false;\n\n const firstTimestamp = group.results[0]!.matchedEvent.createdAt;\n console.log(\n chalk.bold(formatRunHeader(runId, group.agentName, firstTimestamp)),\n );\n\n for (const result of group.results) {\n const renderer = new EventRenderer({\n showTimestamp: true,\n verbose: false,\n });\n const normalizer = new EventStreamNormalizer();\n\n for (const event of result.contextBefore) {\n renderSearchEvent(event, result.framework, renderer, normalizer);\n }\n renderSearchEvent(\n result.matchedEvent,\n result.framework,\n renderer,\n normalizer,\n );\n for (const event of result.contextAfter) {\n renderSearchEvent(event, result.framework, renderer, normalizer);\n }\n flushSearchRenderer(renderer, normalizer);\n }\n }\n\n if (response.hasMore) {\n console.log();\n console.log(\n chalk.dim(\n ` Showing first ${response.results.length} matches. Use --limit to see more.`,\n ),\n );\n }\n}\n\nexport async function runLogsSearch(\n keyword: string,\n options: LogsSearchCliOptions,\n): Promise<void> {\n const searchKeyword = parseSearchQuery(keyword, \"Keyword\");\n const { before, after } = parseContextOptions(options);\n\n if (options.agentId !== undefined && !isUUID(options.agentId)) {\n console.error(\n chalk.red(`✗ Invalid agent ID \"${options.agentId}\" — expected a UUID`),\n );\n console.error(chalk.dim(\" Run: zero logs list to find agent IDs\"));\n process.exit(1);\n }\n\n if (options.run !== undefined && !isUUID(options.run)) {\n console.error(\n chalk.red(`✗ Invalid run ID \"${options.run}\" — expected a UUID`),\n );\n console.error(chalk.dim(\" Run: zero logs list to find run IDs\"));\n process.exit(1);\n }\n\n const since =\n options.since !== undefined\n ? parseTime(options.since)\n : Date.now() - SEVEN_DAYS_MS;\n const limit = parseLimit(options.limit);\n\n const response = await searchZeroLogs({\n keyword: searchKeyword,\n agentId: options.agentId,\n runId: options.run,\n since,\n limit,\n before,\n after,\n });\n\n if (response.results.length === 0) {\n console.log(chalk.dim(\"No matches found\"));\n console.log(\n chalk.dim(\n \" Try a broader search with --since 30d or a different keyword\",\n ),\n );\n return;\n }\n\n renderResults(response);\n}\n\nexport const searchCommand = new Command()\n .name(\"search\")\n .description(\"Search agent events across runs\")\n .argument(\"<keyword>\", \"Search keyword\")\n .option(\"-A, --after-context <n>\", \"Show n events after each match\")\n .option(\"-B, --before-context <n>\", \"Show n events before each match\")\n .option(\"-C, --context <n>\", \"Show n events before and after each match\")\n .option(\"--agent <id>\", \"Filter by Zero agent ID\")\n .option(\"--run <id>\", \"Filter by specific run ID\")\n .option(\"--since <time>\", \"Search logs since (default: 7d)\")\n .option(\"--limit <n>\", \"Maximum number of matches (default: 20)\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero logs search \"error\"\n zero logs search \"timeout\" --agent 123e4567-e89b-12d3-a456-426614174000 -C 2\n zero logs search \"failed\" --since 30d --limit 50`,\n )\n .action(\n withErrorHandler(\n async (keyword: string, options: LogsSearchCommandOptions) => {\n const { agent, ...searchOptions } = options;\n await runLogsSearch(keyword, { ...searchOptions, agentId: agent });\n },\n ),\n );\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/commands/zero/logs/search.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n searchZeroLogs,\n type RunEvent,\n type LogsSearchResponse,\n} from \"../../../lib/api\";\nimport { parseTime } from \"../../../lib/utils/time-parser\";\nimport { formatIsoTimestamp } from \"../../../lib/utils/time-format\";\nimport { EventRenderer } from \"../../../lib/events/event-renderer\";\nimport { EventStreamNormalizer } from \"../../../lib/events/event-stream-normalizer\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { isUUID } from \"../../run/shared\";\nimport { parseBoundedLogCount } from \"../../../lib/utils/log-pagination\";\nimport { parseSearchQuery } from \"../../../lib/utils/search-query\";\nimport { isSupportedFramework } from \"@vm0/core/frameworks\";\n\nconst SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1000;\n\nexport interface LogsSearchCliOptions {\n afterContext?: string;\n beforeContext?: string;\n context?: string;\n agentId?: string;\n run?: string;\n since?: string;\n limit?: string;\n}\n\ninterface LogsSearchCommandOptions extends Omit<\n LogsSearchCliOptions,\n \"agentId\"\n> {\n agent?: string;\n}\n\nfunction supportedSearchFramework(\n framework: string | null | undefined,\n): string | undefined {\n const normalized = framework ?? undefined;\n return isSupportedFramework(normalized) ? normalized : undefined;\n}\n\nfunction renderSearchEvent(\n event: RunEvent,\n framework: string | null | undefined,\n renderer: EventRenderer,\n normalizer: EventStreamNormalizer,\n): void {\n const parsedEvents = normalizer.process(\n event.eventData,\n supportedSearchFramework(framework),\n new Date(event.createdAt),\n );\n for (const parsed of parsedEvents) {\n renderer.render(parsed);\n }\n}\n\nfunction flushSearchRenderer(\n renderer: EventRenderer,\n normalizer: EventStreamNormalizer,\n): void {\n for (const parsed of normalizer.flush()) {\n renderer.render(parsed);\n }\n renderer.flush();\n}\n\nfunction formatRunHeader(\n runId: string,\n agentName: string,\n timestamp: string,\n): string {\n const time = formatIsoTimestamp(timestamp);\n return `── Run ${runId} (${agentName}, ${time}) ──────────`;\n}\n\nfunction parseContextOptions(options: LogsSearchCliOptions): {\n before: number;\n after: number;\n} {\n const contextN =\n options.context !== undefined\n ? parseBoundedLogCount(options.context, \"--context\", 0, 10)\n : 0;\n const before =\n options.beforeContext !== undefined\n ? parseBoundedLogCount(options.beforeContext, \"--before-context\", 0, 10)\n : contextN;\n const after =\n options.afterContext !== undefined\n ? parseBoundedLogCount(options.afterContext, \"--after-context\", 0, 10)\n : contextN;\n\n return { before, after };\n}\n\nfunction parseLimit(value: string | undefined): number | undefined {\n if (value === undefined) return undefined;\n return parseBoundedLogCount(value, \"--limit\", 1, 50);\n}\n\nfunction renderResults(response: LogsSearchResponse): void {\n const grouped = new Map<\n string,\n { agentName: string; results: LogsSearchResponse[\"results\"] }\n >();\n for (const result of response.results) {\n const existing = grouped.get(result.runId);\n if (existing) {\n existing.results.push(result);\n } else {\n grouped.set(result.runId, {\n agentName: result.agentName,\n results: [result],\n });\n }\n }\n\n let isFirstGroup = true;\n for (const [runId, group] of grouped) {\n if (!isFirstGroup) {\n console.log();\n }\n isFirstGroup = false;\n\n const firstTimestamp = group.results[0]!.matchedEvent.createdAt;\n console.log(\n chalk.bold(formatRunHeader(runId, group.agentName, firstTimestamp)),\n );\n\n for (const result of group.results) {\n const renderer = new EventRenderer({\n showTimestamp: true,\n verbose: false,\n });\n const normalizer = new EventStreamNormalizer();\n\n for (const event of result.contextBefore) {\n renderSearchEvent(event, result.framework, renderer, normalizer);\n }\n renderSearchEvent(\n result.matchedEvent,\n result.framework,\n renderer,\n normalizer,\n );\n for (const event of result.contextAfter) {\n renderSearchEvent(event, result.framework, renderer, normalizer);\n }\n flushSearchRenderer(renderer, normalizer);\n }\n }\n\n if (response.hasMore) {\n console.log();\n console.log(\n chalk.dim(\n ` Showing first ${response.results.length} matches. Use --limit to see more.`,\n ),\n );\n }\n}\n\nexport async function runLogsSearch(\n keyword: string,\n options: LogsSearchCliOptions,\n): Promise<void> {\n const searchKeyword = parseSearchQuery(keyword, \"Keyword\");\n const { before, after } = parseContextOptions(options);\n\n if (options.agentId !== undefined && !isUUID(options.agentId)) {\n console.error(\n chalk.red(`✗ Invalid agent ID \"${options.agentId}\" — expected a UUID`),\n );\n console.error(chalk.dim(\" Run: zero logs list to find agent IDs\"));\n process.exit(1);\n }\n\n if (options.run !== undefined && !isUUID(options.run)) {\n console.error(\n chalk.red(`✗ Invalid run ID \"${options.run}\" — expected a UUID`),\n );\n console.error(chalk.dim(\" Run: zero logs list to find run IDs\"));\n process.exit(1);\n }\n\n const since =\n options.since !== undefined\n ? parseTime(options.since)\n : Date.now() - SEVEN_DAYS_MS;\n const limit = parseLimit(options.limit);\n\n const response = await searchZeroLogs({\n keyword: searchKeyword,\n agentId: options.agentId,\n runId: options.run,\n since,\n limit,\n before,\n after,\n });\n\n if (response.results.length === 0) {\n console.log(chalk.dim(\"No matches found\"));\n console.log(\n chalk.dim(\n \" Try a broader search with --since 30d or a different keyword\",\n ),\n );\n return;\n }\n\n renderResults(response);\n}\n\nexport const searchCommand = new Command()\n .name(\"search\")\n .description(\"Search agent events across runs\")\n .argument(\"<keyword>\", \"Search keyword\")\n .option(\"-A, --after-context <n>\", \"Show n events after each match\")\n .option(\"-B, --before-context <n>\", \"Show n events before each match\")\n .option(\"-C, --context <n>\", \"Show n events before and after each match\")\n .option(\"--agent <id>\", \"Filter by Zero agent ID\")\n .option(\"--run <id>\", \"Filter by specific run ID\")\n .option(\"--since <time>\", \"Search logs since (default: 7d)\")\n .option(\"--limit <n>\", \"Maximum number of matches (default: 20)\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero logs search \"error\"\n zero logs search \"timeout\" --agent 123e4567-e89b-12d3-a456-426614174000 -C 2\n zero logs search \"failed\" --since 30d --limit 50`,\n )\n .action(\n withErrorHandler(\n async (keyword: string, options: LogsSearchCommandOptions) => {\n const { agent, ...searchOptions } = options;\n await runLogsSearch(keyword, { ...searchOptions, agentId: agent });\n },\n ),\n );\n"],"mappings":"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","names":[]}
@@ -5,7 +5,7 @@ import {
5
5
  CONNECTOR_TYPES,
6
6
  CONNECTOR_TYPE_KEYS,
7
7
  connectorAuthMethodIdSchema
8
- } from "./chunk-P2JBAXKF.js";
8
+ } from "./chunk-YY7SV2BZ.js";
9
9
  import {
10
10
  init_esm_shims
11
11
  } from "./chunk-DIRAZ3YX.js";
@@ -181,4 +181,4 @@ export {
181
181
  hasRequiredConnectorAuthMethodScopes,
182
182
  getConnectorAuthMethodScopeDiff
183
183
  };
184
- //# sourceMappingURL=chunk-DCXHVS3G.js.map
184
+ //# sourceMappingURL=chunk-VLGMCLXQ.js.map
@@ -830,6 +830,16 @@ function getSecretsForAuthMethod(type, authMethod) {
830
830
  const method = authMethods[authMethod];
831
831
  return method?.secrets;
832
832
  }
833
+ var modelProviderSubscriptionUsageWindowSchema = external_exports.object({
834
+ usedPercent: external_exports.number().nullable(),
835
+ remainingPercent: external_exports.number().nullable(),
836
+ resetAt: external_exports.string().nullable(),
837
+ windowSeconds: external_exports.number().nullable()
838
+ });
839
+ var modelProviderSubscriptionUsageSchema = external_exports.object({
840
+ fiveHour: modelProviderSubscriptionUsageWindowSchema.nullable(),
841
+ weekly: modelProviderSubscriptionUsageWindowSchema.nullable()
842
+ });
833
843
  var modelProviderResponseSchema = external_exports.object({
834
844
  id: external_exports.uuid(),
835
845
  type: modelProviderTypeSchema,
@@ -844,10 +854,15 @@ var modelProviderResponseSchema = external_exports.object({
844
854
  selectedModel: external_exports.string().nullable(),
845
855
  createdAt: external_exports.string(),
846
856
  updatedAt: external_exports.string(),
847
- // ChatGPT-only metadata populated by the codex-oauth-token auth.json paste
848
- // flow. Other provider types omit these.
857
+ // OAuth account metadata populated by provider-specific connect flows. Other
858
+ // provider types omit these.
849
859
  workspaceName: external_exports.string().nullable().optional(),
850
860
  planType: external_exports.string().nullable().optional(),
861
+ // Subscription quota metadata. Providers omit these until an upstream source
862
+ // exposes the reset cadence or next reset timestamp.
863
+ subscriptionResetPeriod: external_exports.string().nullable().optional(),
864
+ subscriptionNextResetAt: external_exports.string().nullable().optional(),
865
+ subscriptionUsage: modelProviderSubscriptionUsageSchema.nullable().optional(),
851
866
  // OAuth refresh state. `needsReconnect` flips to true when the firewall's
852
867
  // refresh attempt fails (#11921 writes this on the model_providers row).
853
868
  // `lastRefreshErrorCode` carries the typed code from `ChatgptRefreshError`
@@ -24857,20 +24872,6 @@ async function getComposeByName(name) {
24857
24872
  }
24858
24873
  handleError(result, `Compose not found: ${name}`);
24859
24874
  }
24860
- var UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
24861
- async function resolveCompose(identifier) {
24862
- if (UUID_PATTERN.test(identifier)) {
24863
- try {
24864
- return await getComposeById(identifier);
24865
- } catch (error) {
24866
- if (error instanceof ApiRequestError && error.status === 404) {
24867
- return null;
24868
- }
24869
- throw error;
24870
- }
24871
- }
24872
- return getComposeByName(identifier);
24873
- }
24874
24875
  async function getComposeById(id) {
24875
24876
  const config = await getClientConfig();
24876
24877
  const client = initClient(composesByIdContract, config);
@@ -25541,6 +25542,7 @@ var zeroWorkflowEventTypeSchema = external_exports.enum([
25541
25542
  "github-label-applied",
25542
25543
  "google-calendar-event-created",
25543
25544
  "google-calendar-event-updated",
25545
+ "google-calendar-event-cancelled",
25544
25546
  "webhook-received"
25545
25547
  ]);
25546
25548
  var gmailTextMatchSchema = external_exports.object({
@@ -25609,6 +25611,11 @@ var googleCalendarEventUpdatedEventConfigSchema = external_exports.object({
25609
25611
  event: external_exports.literal("event_updated"),
25610
25612
  calendarId: external_exports.string().trim().min(1).max(1024).default("primary")
25611
25613
  }).strict();
25614
+ var googleCalendarEventCancelledEventConfigSchema = external_exports.object({
25615
+ provider: external_exports.literal("google-calendar"),
25616
+ event: external_exports.literal("event_cancelled"),
25617
+ calendarId: external_exports.string().trim().min(1).max(1024).default("primary")
25618
+ }).strict();
25612
25619
  var zeroWorkflowScheduleSchema = external_exports.discriminatedUnion("type", [
25613
25620
  external_exports.object({
25614
25621
  type: external_exports.literal("cron"),
@@ -25673,6 +25680,13 @@ var zeroWorkflowGoogleCalendarEventUpdatedTriggerSummarySchema = zeroWorkflowTri
25673
25680
  schedule: external_exports.null(),
25674
25681
  scheduleSummary: external_exports.null()
25675
25682
  });
25683
+ var zeroWorkflowGoogleCalendarEventCancelledTriggerSummarySchema = zeroWorkflowTriggerSummaryBaseSchema.extend({
25684
+ kind: external_exports.literal("event"),
25685
+ eventType: external_exports.literal("google-calendar-event-cancelled"),
25686
+ eventConfig: googleCalendarEventCancelledEventConfigSchema,
25687
+ schedule: external_exports.null(),
25688
+ scheduleSummary: external_exports.null()
25689
+ });
25676
25690
  var zeroWorkflowWebhookReceivedTriggerSummarySchema = zeroWorkflowTriggerSummaryBaseSchema.extend({
25677
25691
  kind: external_exports.literal("event"),
25678
25692
  eventType: external_exports.literal("webhook-received"),
@@ -25692,6 +25706,7 @@ var zeroWorkflowEventTriggerSummarySchema = external_exports.discriminatedUnion(
25692
25706
  zeroWorkflowGithubLabelAppliedTriggerSummarySchema,
25693
25707
  zeroWorkflowGoogleCalendarEventCreatedTriggerSummarySchema,
25694
25708
  zeroWorkflowGoogleCalendarEventUpdatedTriggerSummarySchema,
25709
+ zeroWorkflowGoogleCalendarEventCancelledTriggerSummarySchema,
25695
25710
  zeroWorkflowWebhookReceivedTriggerSummarySchema
25696
25711
  ]
25697
25712
  );
@@ -25751,13 +25766,21 @@ var chatThreadWorkflowGoogleCalendarEventUpdatedTriggerSchema = chatThreadWorkfl
25751
25766
  schedule: external_exports.null(),
25752
25767
  scheduleSummary: external_exports.null()
25753
25768
  });
25769
+ var chatThreadWorkflowGoogleCalendarEventCancelledTriggerSchema = chatThreadWorkflowTriggerBaseSchema.extend({
25770
+ kind: external_exports.literal("event"),
25771
+ eventType: external_exports.literal("google-calendar-event-cancelled"),
25772
+ eventConfig: googleCalendarEventCancelledEventConfigSchema,
25773
+ schedule: external_exports.null(),
25774
+ scheduleSummary: external_exports.null()
25775
+ });
25754
25776
  var chatThreadWorkflowTriggerSchema = external_exports.union([
25755
25777
  chatThreadWorkflowScheduleTriggerSchema,
25756
25778
  chatThreadWorkflowGmailNewMessageTriggerSchema,
25757
25779
  chatThreadWorkflowGmailLabelAppliedTriggerSchema,
25758
25780
  chatThreadWorkflowGithubLabelAppliedTriggerSchema,
25759
25781
  chatThreadWorkflowGoogleCalendarEventCreatedTriggerSchema,
25760
- chatThreadWorkflowGoogleCalendarEventUpdatedTriggerSchema
25782
+ chatThreadWorkflowGoogleCalendarEventUpdatedTriggerSchema,
25783
+ chatThreadWorkflowGoogleCalendarEventCancelledTriggerSchema
25761
25784
  ]);
25762
25785
  var zeroWorkflowScheduleTriggerCreateRequestSchema = external_exports.object({
25763
25786
  kind: external_exports.literal("schedule").optional(),
@@ -25804,6 +25827,16 @@ var zeroWorkflowGoogleCalendarEventUpdatedTriggerCreateRequestSchema = external_
25804
25827
  }),
25805
25828
  enabled: external_exports.boolean().optional()
25806
25829
  });
25830
+ var zeroWorkflowGoogleCalendarEventCancelledTriggerCreateRequestSchema = external_exports.object({
25831
+ kind: external_exports.literal("event"),
25832
+ eventType: external_exports.literal("google-calendar-event-cancelled"),
25833
+ eventConfig: googleCalendarEventCancelledEventConfigSchema.optional().default({
25834
+ provider: "google-calendar",
25835
+ event: "event_cancelled",
25836
+ calendarId: "primary"
25837
+ }),
25838
+ enabled: external_exports.boolean().optional()
25839
+ });
25807
25840
  var zeroWorkflowWebhookReceivedTriggerCreateRequestSchema = external_exports.object({
25808
25841
  kind: external_exports.literal("event"),
25809
25842
  eventType: external_exports.literal("webhook-received"),
@@ -25817,6 +25850,7 @@ var zeroWorkflowTriggerCreateRequestSchema = external_exports.union([
25817
25850
  zeroWorkflowGithubLabelAppliedTriggerCreateRequestSchema,
25818
25851
  zeroWorkflowGoogleCalendarEventCreatedTriggerCreateRequestSchema,
25819
25852
  zeroWorkflowGoogleCalendarEventUpdatedTriggerCreateRequestSchema,
25853
+ zeroWorkflowGoogleCalendarEventCancelledTriggerCreateRequestSchema,
25820
25854
  zeroWorkflowWebhookReceivedTriggerCreateRequestSchema
25821
25855
  ]);
25822
25856
  var zeroWorkflowScheduleTriggerUpdateRequestSchema = external_exports.object({
@@ -27659,6 +27693,7 @@ export {
27659
27693
  CONNECTOR_TYPES,
27660
27694
  CONNECTOR_TYPE_KEYS,
27661
27695
  connectorTypeSchema,
27696
+ connectorReconnectReasonSchema,
27662
27697
  guaranteedConnectorProvidedBindingNames,
27663
27698
  initContract,
27664
27699
  authHeadersSchema,
@@ -27678,7 +27713,6 @@ export {
27678
27713
  composeResponseSchema,
27679
27714
  composeListItemSchema,
27680
27715
  getComposeByName,
27681
- resolveCompose,
27682
27716
  getComposeById,
27683
27717
  getComposeVersion,
27684
27718
  createOrUpdateCompose,
@@ -27829,4 +27863,4 @@ export {
27829
27863
  completeHostedSite,
27830
27864
  getHostedSiteFiles
27831
27865
  };
27832
- //# sourceMappingURL=chunk-P2JBAXKF.js.map
27866
+ //# sourceMappingURL=chunk-YY7SV2BZ.js.map