@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.
- package/{agent-RNWS32PS.js → agent-6TGGHCAT.js} +4 -4
- package/{automation-BH3A6ZXJ.js → automation-UPVMYME3.js} +21 -11
- package/automation-UPVMYME3.js.map +1 -0
- package/{banking-ULTE7SAB.js → banking-K4E2GBY7.js} +2 -2
- package/{chat-CKB72QJB.js → chat-3JUQFSSY.js} +2 -2
- package/{chunk-LLCUG4UW.js → chunk-5AIMJ6O5.js} +2 -2
- package/{chunk-4KC5DNRL.js → chunk-7HZXC5CL.js} +24 -24
- package/{chunk-4KC5DNRL.js.map → chunk-7HZXC5CL.js.map} +1 -1
- package/{chunk-BEDSO3JA.js → chunk-APCV4ZUL.js} +2 -2
- package/{chunk-WXJN476B.js → chunk-CWBLSKVL.js} +46 -195
- package/chunk-CWBLSKVL.js.map +1 -0
- package/{chunk-FZCXTO3A.js → chunk-DF3WVSZY.js} +2 -2
- package/{chunk-KBXEJJAI.js → chunk-DLB4B2NY.js} +3 -3
- package/chunk-H63W4KQL.js +160 -0
- package/chunk-H63W4KQL.js.map +1 -0
- package/{chunk-G3LGQ2ZH.js → chunk-MY2ZR6YU.js} +8 -8
- package/{chunk-WM626DEN.js → chunk-NI3BDNLY.js} +9 -7
- package/{chunk-WM626DEN.js.map → chunk-NI3BDNLY.js.map} +1 -1
- package/{chunk-DCXHVS3G.js → chunk-VLGMCLXQ.js} +2 -2
- package/{chunk-P2JBAXKF.js → chunk-YY7SV2BZ.js} +53 -19
- package/chunk-YY7SV2BZ.js.map +1 -0
- package/clerk.generated-ERU55NQP.js +402 -0
- package/clerk.generated-ERU55NQP.js.map +1 -0
- package/{computer-use-AUL6VROX.js → computer-use-RFTIT5ZT.js} +2 -2
- package/{connector-UVUTT7U7.js → connector-6VGK6J4L.js} +3 -3
- package/{credit-AVQ3E2PT.js → credit-AFPBXBIU.js} +2 -2
- package/deel.generated-JIOY5DWR.js +244 -0
- package/deel.generated-JIOY5DWR.js.map +1 -0
- package/{developer-support-AGZEOAM5.js → developer-support-HATEQ7AD.js} +2 -2
- package/{doctor-47LF7WNU.js → doctor-IAOTOO4G.js} +5 -5
- package/dropbox.generated-ZZKEVL5X.js +140 -0
- package/dropbox.generated-ZZKEVL5X.js.map +1 -0
- package/{generate-47V6BFM5.js → generate-TXO7YLT3.js} +4 -4
- package/{github-4HBBN4XX.js → github-WAXJU2GY.js} +2 -2
- package/{goal-OEWQQNB4.js → goal-UIJNFLUD.js} +2 -2
- package/{host-PHP3KDWT.js → host-JN3SWFZN.js} +2 -2
- package/index.js +21 -19
- package/index.js.map +1 -1
- package/{logs-JIAHCLEH.js → logs-5LLAN46D.js} +14 -12
- package/{logs-JIAHCLEH.js.map → logs-5LLAN46D.js.map} +1 -1
- package/{maps-EVKSSNKD.js → maps-U6U7CVN4.js} +2 -2
- package/{model-2FNBUWIO.js → model-JQGMSCEW.js} +3 -3
- package/{model-provider-D4ACR7YF.js → model-provider-HPULHQCP.js} +3 -3
- package/{org-BMLDEYAR.js → org-P64YC3X4.js} +2 -2
- package/package.json +1 -1
- package/{phone-LBW44WZ7.js → phone-DQ642OPH.js} +2 -2
- package/{preference-SFBKADPE.js → preference-BYLQWJJH.js} +2 -2
- package/{resource-SLFUFT62.js → resource-HON6W7BP.js} +3 -3
- package/{schedule-XUGLVIVF.js → schedule-MTI5OP23.js} +2 -2
- package/schedule-MTI5OP23.js.map +1 -0
- package/{search-ERFAZY76.js → search-NDBJJPWS.js} +11 -9
- package/{search-ERFAZY76.js.map → search-NDBJJPWS.js.map} +1 -1
- package/{secret-AC6AP36O.js → secret-AC6UW4DJ.js} +3 -3
- package/sentry.generated-Y3V3MFG5.js +112 -0
- package/sentry.generated-Y3V3MFG5.js.map +1 -0
- package/{slack-KSW6LGUG.js → slack-S6KJLE6R.js} +2 -2
- package/strava.generated-FDURULCZ.js +76 -0
- package/strava.generated-FDURULCZ.js.map +1 -0
- package/{telegram-KHF2MCZL.js → telegram-SD6TEM2P.js} +2 -2
- package/{variable-5QIBE74B.js → variable-7O57XR74.js} +2 -2
- package/{web-P3EU7EUP.js → web-3MQWFUZU.js} +2 -2
- package/{whoami-OQJPTUBU.js → whoami-U6VBDTX5.js} +4 -4
- package/{workflow-LKAMIYML.js → workflow-GGH4WU2J.js} +26 -6
- package/workflow-GGH4WU2J.js.map +1 -0
- package/xero.generated-NPSQE6GC.js +164 -0
- package/xero.generated-NPSQE6GC.js.map +1 -0
- package/zero.js +32 -32
- package/automation-BH3A6ZXJ.js.map +0 -1
- package/chunk-P2JBAXKF.js.map +0 -1
- package/chunk-WXJN476B.js.map +0 -1
- package/clerk.generated-CUIJPEBA.js +0 -335
- package/clerk.generated-CUIJPEBA.js.map +0 -1
- package/deel.generated-U6UEJPXO.js +0 -189
- package/deel.generated-U6UEJPXO.js.map +0 -1
- package/dropbox.generated-SM45XNZI.js +0 -111
- package/dropbox.generated-SM45XNZI.js.map +0 -1
- package/schedule-XUGLVIVF.js.map +0 -1
- package/sentry.generated-TQZTJGQ4.js +0 -90
- package/sentry.generated-TQZTJGQ4.js.map +0 -1
- package/strava.generated-FK4SMYR7.js +0 -63
- package/strava.generated-FK4SMYR7.js.map +0 -1
- package/workflow-LKAMIYML.js.map +0 -1
- package/xero.generated-UVAXXS6Q.js +0 -129
- package/xero.generated-UVAXXS6Q.js.map +0 -1
- /package/{agent-RNWS32PS.js.map → agent-6TGGHCAT.js.map} +0 -0
- /package/{banking-ULTE7SAB.js.map → banking-K4E2GBY7.js.map} +0 -0
- /package/{chat-CKB72QJB.js.map → chat-3JUQFSSY.js.map} +0 -0
- /package/{chunk-LLCUG4UW.js.map → chunk-5AIMJ6O5.js.map} +0 -0
- /package/{chunk-BEDSO3JA.js.map → chunk-APCV4ZUL.js.map} +0 -0
- /package/{chunk-FZCXTO3A.js.map → chunk-DF3WVSZY.js.map} +0 -0
- /package/{chunk-KBXEJJAI.js.map → chunk-DLB4B2NY.js.map} +0 -0
- /package/{chunk-G3LGQ2ZH.js.map → chunk-MY2ZR6YU.js.map} +0 -0
- /package/{chunk-DCXHVS3G.js.map → chunk-VLGMCLXQ.js.map} +0 -0
- /package/{computer-use-AUL6VROX.js.map → computer-use-RFTIT5ZT.js.map} +0 -0
- /package/{connector-UVUTT7U7.js.map → connector-6VGK6J4L.js.map} +0 -0
- /package/{credit-AVQ3E2PT.js.map → credit-AFPBXBIU.js.map} +0 -0
- /package/{developer-support-AGZEOAM5.js.map → developer-support-HATEQ7AD.js.map} +0 -0
- /package/{doctor-47LF7WNU.js.map → doctor-IAOTOO4G.js.map} +0 -0
- /package/{generate-47V6BFM5.js.map → generate-TXO7YLT3.js.map} +0 -0
- /package/{github-4HBBN4XX.js.map → github-WAXJU2GY.js.map} +0 -0
- /package/{goal-OEWQQNB4.js.map → goal-UIJNFLUD.js.map} +0 -0
- /package/{host-PHP3KDWT.js.map → host-JN3SWFZN.js.map} +0 -0
- /package/{maps-EVKSSNKD.js.map → maps-U6U7CVN4.js.map} +0 -0
- /package/{model-2FNBUWIO.js.map → model-JQGMSCEW.js.map} +0 -0
- /package/{model-provider-D4ACR7YF.js.map → model-provider-HPULHQCP.js.map} +0 -0
- /package/{org-BMLDEYAR.js.map → org-P64YC3X4.js.map} +0 -0
- /package/{phone-LBW44WZ7.js.map → phone-DQ642OPH.js.map} +0 -0
- /package/{preference-SFBKADPE.js.map → preference-BYLQWJJH.js.map} +0 -0
- /package/{resource-SLFUFT62.js.map → resource-HON6W7BP.js.map} +0 -0
- /package/{secret-AC6AP36O.js.map → secret-AC6UW4DJ.js.map} +0 -0
- /package/{slack-KSW6LGUG.js.map → slack-S6KJLE6R.js.map} +0 -0
- /package/{telegram-KHF2MCZL.js.map → telegram-SD6TEM2P.js.map} +0 -0
- /package/{variable-5QIBE74B.js.map → variable-7O57XR74.js.map} +0 -0
- /package/{web-P3EU7EUP.js.map → web-3MQWFUZU.js.map} +0 -0
- /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-
|
|
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-
|
|
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.
|
|
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.
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
-
//
|
|
848
|
-
//
|
|
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-
|
|
27866
|
+
//# sourceMappingURL=chunk-YY7SV2BZ.js.map
|