@vm0/cli 9.222.10 → 9.222.12
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-T7M7TEPS.js → agent-XNVQRMKI.js} +4 -4
- package/automation-7MAK66QT.js +31 -0
- package/automation-7MAK66QT.js.map +1 -0
- package/{banking-FNJZFPXK.js → banking-QBTNNOCQ.js} +2 -2
- package/{chat-6NJ4VVNA.js → chat-ELAJKQXT.js} +2 -2
- package/{chunk-IJBKOTQR.js → chunk-7ZJOZZXZ.js} +2 -2
- package/{chunk-PAZFEW6A.js → chunk-F774K6TY.js} +2 -2
- package/{chunk-STCMWCQB.js → chunk-JOOQB7W3.js} +2 -2
- package/{chunk-LRXQIJYA.js → chunk-KBDCWC3F.js} +20 -393
- package/chunk-KBDCWC3F.js.map +1 -0
- package/{chunk-EQLMBGHF.js → chunk-LOEUF572.js} +3 -3
- package/{chunk-UFH34RCB.js → chunk-QYSUVI4Z.js} +7 -9
- package/{chunk-UFH34RCB.js.map → chunk-QYSUVI4Z.js.map} +1 -1
- package/{chunk-FJFAPB3B.js → chunk-SBLYEOJF.js} +480 -47
- package/chunk-SBLYEOJF.js.map +1 -0
- package/{chunk-ZQR57JPN.js → chunk-VTG6TDYL.js} +2 -2
- package/{chunk-ZTIA2B55.js → chunk-Y4YHS5UO.js} +2 -2
- package/{computer-use-PNFYU4P6.js → computer-use-XXPDTJSQ.js} +2 -2
- package/{connector-5QNIIQYE.js → connector-PWDJ3R6G.js} +2 -2
- package/{credit-N4VWEZQD.js → credit-MYBUWRHP.js} +2 -2
- package/{developer-support-6YAKUD6P.js → developer-support-65OQ2RK4.js} +2 -2
- package/{doctor-APGXQWMY.js → doctor-2U4HK4AX.js} +5 -5
- package/{generate-DJTSGM7S.js → generate-UEDRCAKX.js} +2 -2
- package/{github-WJX4QT2H.js → github-R6JKL74U.js} +2 -2
- package/{goal-NITAYB5U.js → goal-BG47S2RP.js} +2 -2
- package/{host-2UZGVQ3F.js → host-2VS2KOZQ.js} +2 -2
- package/index.js +18 -20
- package/index.js.map +1 -1
- package/{logs-7BZRPSMW.js → logs-P4ECN3YI.js} +11 -13
- package/{logs-7BZRPSMW.js.map → logs-P4ECN3YI.js.map} +1 -1
- package/{maps-K5NX2KAB.js → maps-ZBULOEZW.js} +2 -2
- package/{model-HSKVRTFU.js → model-BFHGQJ5U.js} +3 -3
- package/{model-provider-JL4VLJRT.js → model-provider-OUSOKSWW.js} +3 -3
- package/{org-DIC435XZ.js → org-RI2EYUW7.js} +2 -2
- package/package.json +1 -1
- package/{phone-R6FRR5SW.js → phone-SNLGLD3J.js} +2 -2
- package/{preference-2Y47RK7E.js → preference-XDSQRZWM.js} +2 -2
- package/{resource-PNK3R6OE.js → resource-BA4FQCNQ.js} +2 -2
- package/schedule-OSHL7HWT.js +33 -0
- package/schedule-OSHL7HWT.js.map +1 -0
- package/{search-DAC3VR2E.js → search-FMA3IDHQ.js} +8 -10
- package/{search-DAC3VR2E.js.map → search-FMA3IDHQ.js.map} +1 -1
- package/{secret-JNDL44GI.js → secret-NFJQKUPS.js} +3 -3
- package/{slack-46YY7OG4.js → slack-JPM5WVX6.js} +2 -2
- package/{telegram-KOLEDEVQ.js → telegram-BNX4UZTT.js} +2 -2
- package/{variable-WKYVSOGW.js → variable-IAIPAH3T.js} +2 -2
- package/{web-UMLXHPQM.js → web-3TJGHZNA.js} +2 -2
- package/{whoami-UJTFVSQG.js → whoami-OVIXXMRR.js} +4 -4
- package/{workflow-FG4M2QL6.js → workflow-WWMTJDLF.js} +62 -7
- package/workflow-WWMTJDLF.js.map +1 -0
- package/zero.js +36 -37
- package/zero.js.map +1 -1
- package/automation-ODWI55XR.js +0 -501
- package/automation-ODWI55XR.js.map +0 -1
- package/chunk-FJFAPB3B.js.map +0 -1
- package/chunk-H63W4KQL.js +0 -160
- package/chunk-H63W4KQL.js.map +0 -1
- package/chunk-HQFETCZ6.js +0 -71
- package/chunk-HQFETCZ6.js.map +0 -1
- package/chunk-LRXQIJYA.js.map +0 -1
- package/schedule-MTI5OP23.js +0 -31
- package/schedule-MTI5OP23.js.map +0 -1
- package/workflow-FG4M2QL6.js.map +0 -1
- /package/{agent-T7M7TEPS.js.map → agent-XNVQRMKI.js.map} +0 -0
- /package/{banking-FNJZFPXK.js.map → banking-QBTNNOCQ.js.map} +0 -0
- /package/{chat-6NJ4VVNA.js.map → chat-ELAJKQXT.js.map} +0 -0
- /package/{chunk-IJBKOTQR.js.map → chunk-7ZJOZZXZ.js.map} +0 -0
- /package/{chunk-PAZFEW6A.js.map → chunk-F774K6TY.js.map} +0 -0
- /package/{chunk-STCMWCQB.js.map → chunk-JOOQB7W3.js.map} +0 -0
- /package/{chunk-EQLMBGHF.js.map → chunk-LOEUF572.js.map} +0 -0
- /package/{chunk-ZQR57JPN.js.map → chunk-VTG6TDYL.js.map} +0 -0
- /package/{chunk-ZTIA2B55.js.map → chunk-Y4YHS5UO.js.map} +0 -0
- /package/{computer-use-PNFYU4P6.js.map → computer-use-XXPDTJSQ.js.map} +0 -0
- /package/{connector-5QNIIQYE.js.map → connector-PWDJ3R6G.js.map} +0 -0
- /package/{credit-N4VWEZQD.js.map → credit-MYBUWRHP.js.map} +0 -0
- /package/{developer-support-6YAKUD6P.js.map → developer-support-65OQ2RK4.js.map} +0 -0
- /package/{doctor-APGXQWMY.js.map → doctor-2U4HK4AX.js.map} +0 -0
- /package/{generate-DJTSGM7S.js.map → generate-UEDRCAKX.js.map} +0 -0
- /package/{github-WJX4QT2H.js.map → github-R6JKL74U.js.map} +0 -0
- /package/{goal-NITAYB5U.js.map → goal-BG47S2RP.js.map} +0 -0
- /package/{host-2UZGVQ3F.js.map → host-2VS2KOZQ.js.map} +0 -0
- /package/{maps-K5NX2KAB.js.map → maps-ZBULOEZW.js.map} +0 -0
- /package/{model-HSKVRTFU.js.map → model-BFHGQJ5U.js.map} +0 -0
- /package/{model-provider-JL4VLJRT.js.map → model-provider-OUSOKSWW.js.map} +0 -0
- /package/{org-DIC435XZ.js.map → org-RI2EYUW7.js.map} +0 -0
- /package/{phone-R6FRR5SW.js.map → phone-SNLGLD3J.js.map} +0 -0
- /package/{preference-2Y47RK7E.js.map → preference-XDSQRZWM.js.map} +0 -0
- /package/{resource-PNK3R6OE.js.map → resource-BA4FQCNQ.js.map} +0 -0
- /package/{secret-JNDL44GI.js.map → secret-NFJQKUPS.js.map} +0 -0
- /package/{slack-46YY7OG4.js.map → slack-JPM5WVX6.js.map} +0 -0
- /package/{telegram-KOLEDEVQ.js.map → telegram-BNX4UZTT.js.map} +0 -0
- /package/{variable-WKYVSOGW.js.map → variable-IAIPAH3T.js.map} +0 -0
- /package/{web-UMLXHPQM.js.map → web-3TJGHZNA.js.map} +0 -0
- /package/{whoami-UJTFVSQG.js.map → whoami-OVIXXMRR.js.map} +0 -0
|
@@ -3,28 +3,26 @@ import { createRequire as __createRequire } from "node:module";
|
|
|
3
3
|
const require = __createRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
searchCommand
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import {
|
|
8
|
-
collectLogItems,
|
|
9
|
-
parseBoundedLogCount,
|
|
10
|
-
parsePositiveLogCount,
|
|
11
|
-
parseTime
|
|
12
|
-
} from "./chunk-H63W4KQL.js";
|
|
6
|
+
} from "./chunk-QYSUVI4Z.js";
|
|
13
7
|
import {
|
|
14
8
|
EventRenderer,
|
|
15
9
|
EventStreamNormalizer,
|
|
10
|
+
collectLogItems,
|
|
16
11
|
formatIsoTimestamp,
|
|
17
12
|
isSupportedFramework,
|
|
18
|
-
isUUID
|
|
19
|
-
|
|
13
|
+
isUUID,
|
|
14
|
+
parseBoundedLogCount,
|
|
15
|
+
parsePositiveLogCount,
|
|
16
|
+
parseTime
|
|
17
|
+
} from "./chunk-SBLYEOJF.js";
|
|
20
18
|
import "./chunk-I23JUVHS.js";
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-F774K6TY.js";
|
|
20
|
+
import "./chunk-Y4YHS5UO.js";
|
|
23
21
|
import "./chunk-LTDQISD7.js";
|
|
24
22
|
import {
|
|
25
23
|
getZeroRunAgentEvents,
|
|
26
24
|
listZeroLogs
|
|
27
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-KBDCWC3F.js";
|
|
28
26
|
import {
|
|
29
27
|
withErrorHandler
|
|
30
28
|
} from "./chunk-3F4RFLPX.js";
|
|
@@ -276,4 +274,4 @@ Examples:
|
|
|
276
274
|
export {
|
|
277
275
|
zeroLogsCommand
|
|
278
276
|
};
|
|
279
|
-
//# sourceMappingURL=logs-
|
|
277
|
+
//# sourceMappingURL=logs-P4ECN3YI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/zero/logs/index.ts","../src/commands/zero/logs/list.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroRunAgentEvents, type RunEvent } from \"../../../lib/api\";\nimport { parseTime } from \"../../../lib/utils/time-parser\";\nimport { EventStreamNormalizer } from \"../../../lib/events/event-stream-normalizer\";\nimport { EventRenderer } from \"../../../lib/events/event-renderer\";\nimport {\n collectLogItems,\n parsePositiveLogCount,\n} from \"../../../lib/utils/log-pagination\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { isUUID } from \"../../run/shared\";\nimport { listCommand } from \"./list\";\nimport { searchCommand } from \"./search\";\nimport { isSupportedFramework } from \"@vm0/core/frameworks\";\n\nconst PAGE_LIMIT = 100;\n\ninterface AgentEventWithFramework {\n readonly event: RunEvent;\n readonly framework?: string;\n readonly useDefaultFramework: boolean;\n}\n\nfunction supportedLogFramework(\n framework: string | undefined,\n): string | undefined {\n return isSupportedFramework(framework) ? framework : undefined;\n}\n\nfunction hasLogFramework(framework: string | null | undefined): boolean {\n return framework !== undefined && framework !== null;\n}\n\nfunction renderAgentEvent(\n event: RunEvent,\n renderer: EventRenderer,\n normalizer: EventStreamNormalizer,\n framework: string | undefined,\n): void {\n const parsedEvents = normalizer.process(\n event.eventData,\n framework,\n new Date(event.createdAt),\n );\n for (const parsed of parsedEvents) {\n renderer.render(parsed);\n }\n}\n\nasync function showAgentEvents(\n runId: string,\n options: {\n since?: number;\n targetCount: number | \"all\";\n order: \"asc\" | \"desc\";\n },\n): Promise<void> {\n const events = await collectLogItems<AgentEventWithFramework>({\n fetchPage: async (request) => {\n const response = await getZeroRunAgentEvents(runId, request);\n const responseFramework: string | null | undefined = response.framework;\n return {\n items: response.events.map((event) => {\n const framework = supportedLogFramework(\n responseFramework ?? undefined,\n );\n return {\n event,\n ...(framework ? { framework } : {}),\n useDefaultFramework: !hasLogFramework(responseFramework),\n };\n }),\n hasMore: response.hasMore,\n nextCursor: response.nextCursor,\n };\n },\n sinceTime: options.since,\n targetCount: options.targetCount,\n order: options.order,\n pageLimit: PAGE_LIMIT,\n });\n\n if (events.length === 0) {\n console.log(chalk.yellow(\"No agent events found for this run\"));\n return;\n }\n\n const renderer = new EventRenderer({\n showTimestamp: true,\n verbose: true,\n });\n const framework = events.find((item) => {\n return item.framework !== undefined;\n })?.framework;\n const normalizer = new EventStreamNormalizer();\n\n for (const item of events) {\n renderAgentEvent(\n item.event,\n renderer,\n normalizer,\n item.framework ?? (item.useDefaultFramework ? framework : undefined),\n );\n }\n for (const parsed of normalizer.flush()) {\n renderer.render(parsed);\n }\n renderer.flush();\n}\n\nexport const zeroLogsCommand = new Command()\n .name(\"logs\")\n .description(\"View and search agent run logs\")\n .argument(\"[runId]\", \"Run ID to view agent events for\")\n .addCommand(listCommand)\n .addCommand(searchCommand)\n .option(\n \"--since <time>\",\n \"Show logs since timestamp (e.g., 5m, 2h, 1d, 2024-01-15T10:30:00Z)\",\n )\n .option(\"--tail <n>\", \"Show last N entries (default: 5)\")\n .option(\"--head <n>\", \"Show first N entries\")\n .option(\"--all\", \"Fetch all log entries\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero logs list\n zero logs <runId>\n zero logs <runId> --tail 10\n zero logs <runId> --all\n zero logs search \"error\"`,\n )\n .action(\n withErrorHandler(\n async (\n runId: string | undefined,\n options: {\n since?: string;\n tail?: string;\n head?: string;\n all?: boolean;\n },\n ) => {\n if (!runId) {\n zeroLogsCommand.help();\n return;\n }\n\n if (!isUUID(runId)) {\n console.error(\n chalk.red(`✗ Invalid run ID \"${runId}\" — 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 countModes = [\n options.tail !== undefined,\n options.head !== undefined,\n options.all === true,\n ].filter(Boolean).length;\n if (countModes > 1) {\n throw new Error(\n \"Options --tail, --head, and --all are mutually exclusive\",\n );\n }\n\n let since: number | undefined;\n if (options.since !== undefined) {\n since = parseTime(options.since);\n }\n\n const isAll = options.all === true;\n const isHead = options.head !== undefined;\n const isTail = options.tail !== undefined;\n\n let targetCount: number | \"all\";\n if (isAll) {\n targetCount = \"all\";\n } else if (isHead) {\n targetCount = parsePositiveLogCount(options.head!, \"--head\");\n } else if (isTail) {\n targetCount = parsePositiveLogCount(options.tail!, \"--tail\");\n } else {\n targetCount = 5;\n }\n\n const order: \"asc\" | \"desc\" = isHead ? \"asc\" : \"desc\";\n\n await showAgentEvents(runId, { since, targetCount, order });\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroLogs } from \"../../../lib/api\";\nimport { parseTime } from \"../../../lib/utils/time-parser\";\nimport { formatIsoTimestamp } from \"../../../lib/utils/time-format\";\nimport { parseBoundedLogCount } from \"../../../lib/utils/log-pagination\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { isUUID } from \"../../run/shared\";\n\nfunction formatStatus(status: string): string {\n switch (status) {\n case \"completed\":\n return chalk.green(status);\n case \"failed\":\n case \"timeout\":\n return chalk.red(status);\n case \"running\":\n case \"pending\":\n case \"queued\":\n return chalk.yellow(status);\n case \"cancelled\":\n return chalk.dim(status);\n default:\n return status;\n }\n}\n\nfunction formatTime(iso: string): string {\n return formatIsoTimestamp(iso);\n}\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List agent run logs\")\n .option(\"--agent <id>\", \"Filter by Zero agent ID\")\n .option(\n \"--status <status>\",\n \"Filter by status (queued|pending|running|completed|failed|timeout|cancelled)\",\n )\n .option(\n \"--since <time>\",\n \"Filter runs created since (e.g., 5m, 2h, 1d, 2024-01-15T10:30:00Z)\",\n )\n .option(\"--limit <n>\", \"Maximum number of results (default: 20)\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero logs list\n zero logs list --agent 123e4567-e89b-12d3-a456-426614174000\n zero logs list --status completed --limit 10\n zero logs list --since 1h\n zero logs list --since 1d --status completed`,\n )\n .action(\n withErrorHandler(\n async (options: {\n agent?: string;\n status?: string;\n since?: string;\n limit?: string;\n }) => {\n const limit =\n options.limit !== undefined\n ? parseBoundedLogCount(options.limit, \"--limit\", 1, 100)\n : undefined;\n const since =\n options.since !== undefined ? parseTime(options.since) : undefined;\n if (options.agent !== undefined && !isUUID(options.agent)) {\n console.error(\n chalk.red(\n `✗ Invalid agent ID \"${options.agent}\" — expected a UUID`,\n ),\n );\n console.error(\n chalk.dim(\" Run: zero logs list to find agent IDs\"),\n );\n process.exit(1);\n }\n\n const result = await listZeroLogs({\n agentId: options.agent,\n status: options.status,\n since,\n limit,\n });\n\n if (result.data.length === 0) {\n console.log(chalk.dim(\"No logs found\"));\n return;\n }\n\n const nameCol = Math.max(\n 5,\n ...result.data.map((r) => {\n return (r.displayName || r.agentId || \"-\").length;\n }),\n );\n const statusCol = Math.max(\n 6,\n ...result.data.map((r) => {\n return r.status.length;\n }),\n );\n\n const header = [\n \"RUN ID\".padEnd(38),\n \"AGENT\".padEnd(nameCol),\n \"STATUS\".padEnd(statusCol),\n \"CREATED\",\n ].join(\" \");\n console.log(chalk.dim(header));\n\n for (const entry of result.data) {\n const runId = entry.id;\n const name = entry.displayName || entry.agentId || \"-\";\n const row = [\n runId.padEnd(38),\n name.padEnd(nameCol),\n formatStatus(entry.status).padEnd(statusCol),\n formatTime(entry.createdAt),\n ].join(\" \");\n console.log(row);\n }\n\n if (result.pagination.hasMore) {\n console.log();\n console.log(\n chalk.dim(\n ` Showing ${result.data.length} of more results. Use --limit to adjust.`,\n ),\n );\n }\n },\n ),\n );\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;ACAA;AASA,SAAS,aAAa,QAAwB;AAC5C,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO,eAAM,MAAM,MAAM;AAAA,IAC3B,KAAK;AAAA,IACL,KAAK;AACH,aAAO,eAAM,IAAI,MAAM;AAAA,IACzB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,eAAM,OAAO,MAAM;AAAA,IAC5B,KAAK;AACH,aAAO,eAAM,IAAI,MAAM;AAAA,IACzB;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,WAAW,KAAqB;AACvC,SAAO,mBAAmB,GAAG;AAC/B;AAEO,IAAM,cAAc,IAAI,QAAQ,EACpC,KAAK,MAAM,EACX,MAAM,IAAI,EACV,YAAY,qBAAqB,EACjC,OAAO,gBAAgB,yBAAyB,EAChD;AAAA,EACC;AAAA,EACA;AACF,EACC;AAAA,EACC;AAAA,EACA;AACF,EACC,OAAO,eAAe,yCAAyC,EAC/D;AAAA,EACC;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOF,EACC;AAAA,EACC;AAAA,IACE,OAAO,YAKD;AACJ,YAAM,QACJ,QAAQ,UAAU,SACd,qBAAqB,QAAQ,OAAO,WAAW,GAAG,GAAG,IACrD;AACN,YAAM,QACJ,QAAQ,UAAU,SAAY,UAAU,QAAQ,KAAK,IAAI;AAC3D,UAAI,QAAQ,UAAU,UAAa,CAAC,OAAO,QAAQ,KAAK,GAAG;AACzD,gBAAQ;AAAA,UACN,eAAM;AAAA,YACJ,4BAAuB,QAAQ,KAAK;AAAA,UACtC;AAAA,QACF;AACA,gBAAQ;AAAA,UACN,eAAM,IAAI,4CAA4C;AAAA,QACxD;AACA,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAEA,YAAM,SAAS,MAAM,aAAa;AAAA,QAChC,SAAS,QAAQ;AAAA,QACjB,QAAQ,QAAQ;AAAA,QAChB;AAAA,QACA;AAAA,MACF,CAAC;AAED,UAAI,OAAO,KAAK,WAAW,GAAG;AAC5B,gBAAQ,IAAI,eAAM,IAAI,eAAe,CAAC;AACtC;AAAA,MACF;AAEA,YAAM,UAAU,KAAK;AAAA,QACnB;AAAA,QACA,GAAG,OAAO,KAAK,IAAI,CAAC,MAAM;AACxB,kBAAQ,EAAE,eAAe,EAAE,WAAW,KAAK;AAAA,QAC7C,CAAC;AAAA,MACH;AACA,YAAM,YAAY,KAAK;AAAA,QACrB;AAAA,QACA,GAAG,OAAO,KAAK,IAAI,CAAC,MAAM;AACxB,iBAAO,EAAE,OAAO;AAAA,QAClB,CAAC;AAAA,MACH;AAEA,YAAM,SAAS;AAAA,QACb,SAAS,OAAO,EAAE;AAAA,QAClB,QAAQ,OAAO,OAAO;AAAA,QACtB,SAAS,OAAO,SAAS;AAAA,QACzB;AAAA,MACF,EAAE,KAAK,IAAI;AACX,cAAQ,IAAI,eAAM,IAAI,MAAM,CAAC;AAE7B,iBAAW,SAAS,OAAO,MAAM;AAC/B,cAAM,QAAQ,MAAM;AACpB,cAAM,OAAO,MAAM,eAAe,MAAM,WAAW;AACnD,cAAM,MAAM;AAAA,UACV,MAAM,OAAO,EAAE;AAAA,UACf,KAAK,OAAO,OAAO;AAAA,UACnB,aAAa,MAAM,MAAM,EAAE,OAAO,SAAS;AAAA,UAC3C,WAAW,MAAM,SAAS;AAAA,QAC5B,EAAE,KAAK,IAAI;AACX,gBAAQ,IAAI,GAAG;AAAA,MACjB;AAEA,UAAI,OAAO,WAAW,SAAS;AAC7B,gBAAQ,IAAI;AACZ,gBAAQ;AAAA,UACN,eAAM;AAAA,YACJ,aAAa,OAAO,KAAK,MAAM;AAAA,UACjC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ADxHF,IAAM,aAAa;AAQnB,SAAS,sBACP,WACoB;AACpB,SAAO,qBAAqB,SAAS,IAAI,YAAY;AACvD;AAEA,SAAS,gBAAgB,WAA+C;AACtE,SAAO,cAAc,UAAa,cAAc;AAClD;AAEA,SAAS,iBACP,OACA,UACA,YACA,WACM;AACN,QAAM,eAAe,WAAW;AAAA,IAC9B,MAAM;AAAA,IACN;AAAA,IACA,IAAI,KAAK,MAAM,SAAS;AAAA,EAC1B;AACA,aAAW,UAAU,cAAc;AACjC,aAAS,OAAO,MAAM;AAAA,EACxB;AACF;AAEA,eAAe,gBACb,OACA,SAKe;AACf,QAAM,SAAS,MAAM,gBAAyC;AAAA,IAC5D,WAAW,OAAO,YAAY;AAC5B,YAAM,WAAW,MAAM,sBAAsB,OAAO,OAAO;AAC3D,YAAM,oBAA+C,SAAS;AAC9D,aAAO;AAAA,QACL,OAAO,SAAS,OAAO,IAAI,CAAC,UAAU;AACpC,gBAAMA,aAAY;AAAA,YAChB,qBAAqB;AAAA,UACvB;AACA,iBAAO;AAAA,YACL;AAAA,YACA,GAAIA,aAAY,EAAE,WAAAA,WAAU,IAAI,CAAC;AAAA,YACjC,qBAAqB,CAAC,gBAAgB,iBAAiB;AAAA,UACzD;AAAA,QACF,CAAC;AAAA,QACD,SAAS,SAAS;AAAA,QAClB,YAAY,SAAS;AAAA,MACvB;AAAA,IACF;AAAA,IACA,WAAW,QAAQ;AAAA,IACnB,aAAa,QAAQ;AAAA,IACrB,OAAO,QAAQ;AAAA,IACf,WAAW;AAAA,EACb,CAAC;AAED,MAAI,OAAO,WAAW,GAAG;AACvB,YAAQ,IAAI,eAAM,OAAO,oCAAoC,CAAC;AAC9D;AAAA,EACF;AAEA,QAAM,WAAW,IAAI,cAAc;AAAA,IACjC,eAAe;AAAA,IACf,SAAS;AAAA,EACX,CAAC;AACD,QAAM,YAAY,OAAO,KAAK,CAAC,SAAS;AACtC,WAAO,KAAK,cAAc;AAAA,EAC5B,CAAC,GAAG;AACJ,QAAM,aAAa,IAAI,sBAAsB;AAE7C,aAAW,QAAQ,QAAQ;AACzB;AAAA,MACE,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA,KAAK,cAAc,KAAK,sBAAsB,YAAY;AAAA,IAC5D;AAAA,EACF;AACA,aAAW,UAAU,WAAW,MAAM,GAAG;AACvC,aAAS,OAAO,MAAM;AAAA,EACxB;AACA,WAAS,MAAM;AACjB;AAEO,IAAM,kBAAkB,IAAI,QAAQ,EACxC,KAAK,MAAM,EACX,YAAY,gCAAgC,EAC5C,SAAS,WAAW,iCAAiC,EACrD,WAAW,WAAW,EACtB,WAAW,aAAa,EACxB;AAAA,EACC;AAAA,EACA;AACF,EACC,OAAO,cAAc,kCAAkC,EACvD,OAAO,cAAc,sBAAsB,EAC3C,OAAO,SAAS,uBAAuB,EACvC;AAAA,EACC;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOF,EACC;AAAA,EACC;AAAA,IACE,OACE,OACA,YAMG;AACH,UAAI,CAAC,OAAO;AACV,wBAAgB,KAAK;AACrB;AAAA,MACF;AAEA,UAAI,CAAC,OAAO,KAAK,GAAG;AAClB,gBAAQ;AAAA,UACN,eAAM,IAAI,0BAAqB,KAAK,0BAAqB;AAAA,QAC3D;AACA,gBAAQ,MAAM,eAAM,IAAI,0CAA0C,CAAC;AACnE,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAEA,YAAM,aAAa;AAAA,QACjB,QAAQ,SAAS;AAAA,QACjB,QAAQ,SAAS;AAAA,QACjB,QAAQ,QAAQ;AAAA,MAClB,EAAE,OAAO,OAAO,EAAE;AAClB,UAAI,aAAa,GAAG;AAClB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,UAAI;AACJ,UAAI,QAAQ,UAAU,QAAW;AAC/B,gBAAQ,UAAU,QAAQ,KAAK;AAAA,MACjC;AAEA,YAAM,QAAQ,QAAQ,QAAQ;AAC9B,YAAM,SAAS,QAAQ,SAAS;AAChC,YAAM,SAAS,QAAQ,SAAS;AAEhC,UAAI;AACJ,UAAI,OAAO;AACT,sBAAc;AAAA,MAChB,WAAW,QAAQ;AACjB,sBAAc,sBAAsB,QAAQ,MAAO,QAAQ;AAAA,MAC7D,WAAW,QAAQ;AACjB,sBAAc,sBAAsB,QAAQ,MAAO,QAAQ;AAAA,MAC7D,OAAO;AACL,sBAAc;AAAA,MAChB;AAEA,YAAM,QAAwB,SAAS,QAAQ;AAE/C,YAAM,gBAAgB,OAAO,EAAE,OAAO,aAAa,MAAM,CAAC;AAAA,IAC5D;AAAA,EACF;AACF;","names":["framework"]}
|
|
1
|
+
{"version":3,"sources":["../src/commands/zero/logs/index.ts","../src/commands/zero/logs/list.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroRunAgentEvents, type RunEvent } from \"../../../lib/api\";\nimport { parseTime } from \"../../../lib/utils/time-parser\";\nimport { EventStreamNormalizer } from \"../../../lib/events/event-stream-normalizer\";\nimport { EventRenderer } from \"../../../lib/events/event-renderer\";\nimport {\n collectLogItems,\n parsePositiveLogCount,\n} from \"../../../lib/utils/log-pagination\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { isUUID } from \"../../run/shared\";\nimport { listCommand } from \"./list\";\nimport { searchCommand } from \"./search\";\nimport { isSupportedFramework } from \"@vm0/core/frameworks\";\n\nconst PAGE_LIMIT = 100;\n\ninterface AgentEventWithFramework {\n readonly event: RunEvent;\n readonly framework?: string;\n readonly useDefaultFramework: boolean;\n}\n\nfunction supportedLogFramework(\n framework: string | undefined,\n): string | undefined {\n return isSupportedFramework(framework) ? framework : undefined;\n}\n\nfunction hasLogFramework(framework: string | null | undefined): boolean {\n return framework !== undefined && framework !== null;\n}\n\nfunction renderAgentEvent(\n event: RunEvent,\n renderer: EventRenderer,\n normalizer: EventStreamNormalizer,\n framework: string | undefined,\n): void {\n const parsedEvents = normalizer.process(\n event.eventData,\n framework,\n new Date(event.createdAt),\n );\n for (const parsed of parsedEvents) {\n renderer.render(parsed);\n }\n}\n\nasync function showAgentEvents(\n runId: string,\n options: {\n since?: number;\n targetCount: number | \"all\";\n order: \"asc\" | \"desc\";\n },\n): Promise<void> {\n const events = await collectLogItems<AgentEventWithFramework>({\n fetchPage: async (request) => {\n const response = await getZeroRunAgentEvents(runId, request);\n const responseFramework: string | null | undefined = response.framework;\n return {\n items: response.events.map((event) => {\n const framework = supportedLogFramework(\n responseFramework ?? undefined,\n );\n return {\n event,\n ...(framework ? { framework } : {}),\n useDefaultFramework: !hasLogFramework(responseFramework),\n };\n }),\n hasMore: response.hasMore,\n nextCursor: response.nextCursor,\n };\n },\n sinceTime: options.since,\n targetCount: options.targetCount,\n order: options.order,\n pageLimit: PAGE_LIMIT,\n });\n\n if (events.length === 0) {\n console.log(chalk.yellow(\"No agent events found for this run\"));\n return;\n }\n\n const renderer = new EventRenderer({\n showTimestamp: true,\n verbose: true,\n });\n const framework = events.find((item) => {\n return item.framework !== undefined;\n })?.framework;\n const normalizer = new EventStreamNormalizer();\n\n for (const item of events) {\n renderAgentEvent(\n item.event,\n renderer,\n normalizer,\n item.framework ?? (item.useDefaultFramework ? framework : undefined),\n );\n }\n for (const parsed of normalizer.flush()) {\n renderer.render(parsed);\n }\n renderer.flush();\n}\n\nexport const zeroLogsCommand = new Command()\n .name(\"logs\")\n .description(\"View and search agent run logs\")\n .argument(\"[runId]\", \"Run ID to view agent events for\")\n .addCommand(listCommand)\n .addCommand(searchCommand)\n .option(\n \"--since <time>\",\n \"Show logs since timestamp (e.g., 5m, 2h, 1d, 2024-01-15T10:30:00Z)\",\n )\n .option(\"--tail <n>\", \"Show last N entries (default: 5)\")\n .option(\"--head <n>\", \"Show first N entries\")\n .option(\"--all\", \"Fetch all log entries\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero logs list\n zero logs <runId>\n zero logs <runId> --tail 10\n zero logs <runId> --all\n zero logs search \"error\"`,\n )\n .action(\n withErrorHandler(\n async (\n runId: string | undefined,\n options: {\n since?: string;\n tail?: string;\n head?: string;\n all?: boolean;\n },\n ) => {\n if (!runId) {\n zeroLogsCommand.help();\n return;\n }\n\n if (!isUUID(runId)) {\n console.error(\n chalk.red(`✗ Invalid run ID \"${runId}\" — 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 countModes = [\n options.tail !== undefined,\n options.head !== undefined,\n options.all === true,\n ].filter(Boolean).length;\n if (countModes > 1) {\n throw new Error(\n \"Options --tail, --head, and --all are mutually exclusive\",\n );\n }\n\n let since: number | undefined;\n if (options.since !== undefined) {\n since = parseTime(options.since);\n }\n\n const isAll = options.all === true;\n const isHead = options.head !== undefined;\n const isTail = options.tail !== undefined;\n\n let targetCount: number | \"all\";\n if (isAll) {\n targetCount = \"all\";\n } else if (isHead) {\n targetCount = parsePositiveLogCount(options.head!, \"--head\");\n } else if (isTail) {\n targetCount = parsePositiveLogCount(options.tail!, \"--tail\");\n } else {\n targetCount = 5;\n }\n\n const order: \"asc\" | \"desc\" = isHead ? \"asc\" : \"desc\";\n\n await showAgentEvents(runId, { since, targetCount, order });\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroLogs } from \"../../../lib/api\";\nimport { parseTime } from \"../../../lib/utils/time-parser\";\nimport { formatIsoTimestamp } from \"../../../lib/utils/time-format\";\nimport { parseBoundedLogCount } from \"../../../lib/utils/log-pagination\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { isUUID } from \"../../run/shared\";\n\nfunction formatStatus(status: string): string {\n switch (status) {\n case \"completed\":\n return chalk.green(status);\n case \"failed\":\n case \"timeout\":\n return chalk.red(status);\n case \"running\":\n case \"pending\":\n case \"queued\":\n return chalk.yellow(status);\n case \"cancelled\":\n return chalk.dim(status);\n default:\n return status;\n }\n}\n\nfunction formatTime(iso: string): string {\n return formatIsoTimestamp(iso);\n}\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List agent run logs\")\n .option(\"--agent <id>\", \"Filter by Zero agent ID\")\n .option(\n \"--status <status>\",\n \"Filter by status (queued|pending|running|completed|failed|timeout|cancelled)\",\n )\n .option(\n \"--since <time>\",\n \"Filter runs created since (e.g., 5m, 2h, 1d, 2024-01-15T10:30:00Z)\",\n )\n .option(\"--limit <n>\", \"Maximum number of results (default: 20)\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero logs list\n zero logs list --agent 123e4567-e89b-12d3-a456-426614174000\n zero logs list --status completed --limit 10\n zero logs list --since 1h\n zero logs list --since 1d --status completed`,\n )\n .action(\n withErrorHandler(\n async (options: {\n agent?: string;\n status?: string;\n since?: string;\n limit?: string;\n }) => {\n const limit =\n options.limit !== undefined\n ? parseBoundedLogCount(options.limit, \"--limit\", 1, 100)\n : undefined;\n const since =\n options.since !== undefined ? parseTime(options.since) : undefined;\n if (options.agent !== undefined && !isUUID(options.agent)) {\n console.error(\n chalk.red(\n `✗ Invalid agent ID \"${options.agent}\" — expected a UUID`,\n ),\n );\n console.error(\n chalk.dim(\" Run: zero logs list to find agent IDs\"),\n );\n process.exit(1);\n }\n\n const result = await listZeroLogs({\n agentId: options.agent,\n status: options.status,\n since,\n limit,\n });\n\n if (result.data.length === 0) {\n console.log(chalk.dim(\"No logs found\"));\n return;\n }\n\n const nameCol = Math.max(\n 5,\n ...result.data.map((r) => {\n return (r.displayName || r.agentId || \"-\").length;\n }),\n );\n const statusCol = Math.max(\n 6,\n ...result.data.map((r) => {\n return r.status.length;\n }),\n );\n\n const header = [\n \"RUN ID\".padEnd(38),\n \"AGENT\".padEnd(nameCol),\n \"STATUS\".padEnd(statusCol),\n \"CREATED\",\n ].join(\" \");\n console.log(chalk.dim(header));\n\n for (const entry of result.data) {\n const runId = entry.id;\n const name = entry.displayName || entry.agentId || \"-\";\n const row = [\n runId.padEnd(38),\n name.padEnd(nameCol),\n formatStatus(entry.status).padEnd(statusCol),\n formatTime(entry.createdAt),\n ].join(\" \");\n console.log(row);\n }\n\n if (result.pagination.hasMore) {\n console.log();\n console.log(\n chalk.dim(\n ` Showing ${result.data.length} of more results. Use --limit to adjust.`,\n ),\n );\n }\n },\n ),\n );\n"],"mappings":"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","names":["framework"]}
|
|
@@ -4,7 +4,7 @@ const require = __createRequire(import.meta.url);
|
|
|
4
4
|
import "./chunk-LTDQISD7.js";
|
|
5
5
|
import {
|
|
6
6
|
callZeroMaps
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-KBDCWC3F.js";
|
|
8
8
|
import {
|
|
9
9
|
withErrorHandler
|
|
10
10
|
} from "./chunk-3F4RFLPX.js";
|
|
@@ -484,4 +484,4 @@ Notes:
|
|
|
484
484
|
export {
|
|
485
485
|
zeroMapsCommand
|
|
486
486
|
};
|
|
487
|
-
//# sourceMappingURL=maps-
|
|
487
|
+
//# sourceMappingURL=maps-ZBULOEZW.js.map
|
|
@@ -5,12 +5,12 @@ import {
|
|
|
5
5
|
formatModelPolicyStatus,
|
|
6
6
|
formatModelProviderRoute,
|
|
7
7
|
getModelProviderRouteKind
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-VTG6TDYL.js";
|
|
9
9
|
import "./chunk-LTDQISD7.js";
|
|
10
10
|
import {
|
|
11
11
|
getVm0ModelPriceTier,
|
|
12
12
|
listZeroModelPolicies
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-KBDCWC3F.js";
|
|
14
14
|
import {
|
|
15
15
|
withErrorHandler
|
|
16
16
|
} from "./chunk-3F4RFLPX.js";
|
|
@@ -90,4 +90,4 @@ export {
|
|
|
90
90
|
switchCommand,
|
|
91
91
|
zeroModelCommand
|
|
92
92
|
};
|
|
93
|
-
//# sourceMappingURL=model-
|
|
93
|
+
//# sourceMappingURL=model-BFHGQJ5U.js.map
|
|
@@ -5,11 +5,11 @@ import {
|
|
|
5
5
|
formatModelPolicyStatus,
|
|
6
6
|
getModelProviderRouteKind,
|
|
7
7
|
getModelProviderTypeLabel
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-VTG6TDYL.js";
|
|
9
9
|
import "./chunk-LTDQISD7.js";
|
|
10
10
|
import {
|
|
11
11
|
listZeroModelPolicies
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-KBDCWC3F.js";
|
|
13
13
|
import {
|
|
14
14
|
withErrorHandler
|
|
15
15
|
} from "./chunk-3F4RFLPX.js";
|
|
@@ -74,4 +74,4 @@ export {
|
|
|
74
74
|
setCommand,
|
|
75
75
|
zeroModelProviderCommand
|
|
76
76
|
};
|
|
77
|
-
//# sourceMappingURL=model-provider-
|
|
77
|
+
//# sourceMappingURL=model-provider-OUSOKSWW.js.map
|
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
switchZeroOrg,
|
|
34
34
|
updateZeroOrg,
|
|
35
35
|
upsertZeroOrgModelProvider
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-KBDCWC3F.js";
|
|
37
37
|
import {
|
|
38
38
|
ApiRequestError,
|
|
39
39
|
getActiveOrg,
|
|
@@ -919,4 +919,4 @@ var zeroOrgCommand = new Command().name("org").description("Manage organization
|
|
|
919
919
|
export {
|
|
920
920
|
zeroOrgCommand
|
|
921
921
|
};
|
|
922
|
-
//# sourceMappingURL=org-
|
|
922
|
+
//# sourceMappingURL=org-RI2EYUW7.js.map
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
downloadPhoneFile,
|
|
8
8
|
initPhoneFileUpload,
|
|
9
9
|
sendPhoneMessage
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-KBDCWC3F.js";
|
|
11
11
|
import {
|
|
12
12
|
withErrorHandler
|
|
13
13
|
} from "./chunk-3F4RFLPX.js";
|
|
@@ -201,4 +201,4 @@ Examples:
|
|
|
201
201
|
export {
|
|
202
202
|
zeroPhoneCommand
|
|
203
203
|
};
|
|
204
|
-
//# sourceMappingURL=phone-
|
|
204
|
+
//# sourceMappingURL=phone-SNLGLD3J.js.map
|
|
@@ -9,7 +9,7 @@ import "./chunk-LTDQISD7.js";
|
|
|
9
9
|
import {
|
|
10
10
|
getZeroUserPreferences,
|
|
11
11
|
updateZeroUserPreferences
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-KBDCWC3F.js";
|
|
13
13
|
import {
|
|
14
14
|
withErrorHandler
|
|
15
15
|
} from "./chunk-3F4RFLPX.js";
|
|
@@ -107,4 +107,4 @@ var zeroPreferenceCommand = new Command().name("preference").description("View o
|
|
|
107
107
|
export {
|
|
108
108
|
zeroPreferenceCommand
|
|
109
109
|
};
|
|
110
|
-
//# sourceMappingURL=preference-
|
|
110
|
+
//# sourceMappingURL=preference-XDSQRZWM.js.map
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
import "./chunk-LTDQISD7.js";
|
|
17
17
|
import {
|
|
18
18
|
getRegistryResourceDownload
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-KBDCWC3F.js";
|
|
20
20
|
import {
|
|
21
21
|
withErrorHandler
|
|
22
22
|
} from "./chunk-3F4RFLPX.js";
|
|
@@ -138,4 +138,4 @@ export {
|
|
|
138
138
|
findRegistryResourceForPull,
|
|
139
139
|
zeroResourceCommand
|
|
140
140
|
};
|
|
141
|
-
//# sourceMappingURL=resource-
|
|
141
|
+
//# sourceMappingURL=resource-BA4FQCNQ.js.map
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __createRequire } from "node:module";
|
|
3
|
+
const require = __createRequire(import.meta.url);
|
|
4
|
+
import {
|
|
5
|
+
source_default
|
|
6
|
+
} from "./chunk-JUTUEPIR.js";
|
|
7
|
+
import {
|
|
8
|
+
Command
|
|
9
|
+
} from "./chunk-B3W2RUBP.js";
|
|
10
|
+
import {
|
|
11
|
+
init_esm_shims
|
|
12
|
+
} from "./chunk-DIRAZ3YX.js";
|
|
13
|
+
|
|
14
|
+
// src/commands/zero/schedule.ts
|
|
15
|
+
init_esm_shims();
|
|
16
|
+
var RENAME_NOTICE = [
|
|
17
|
+
"The schedule commands were removed: scheduled tasks are workflow triggers now.",
|
|
18
|
+
"",
|
|
19
|
+
`Manage them with ${source_default.cyan("zero workflow")}, for example:`,
|
|
20
|
+
` ${source_default.cyan('zero workflow trigger add <workflow> cron --expr "0 9 * * *"')}`,
|
|
21
|
+
` ${source_default.cyan("zero workflow trigger list")}`,
|
|
22
|
+
` ${source_default.cyan("zero workflow --help")}`
|
|
23
|
+
].join("\n");
|
|
24
|
+
var zeroScheduleCommand = new Command("schedule").description(
|
|
25
|
+
"(removed: use `zero workflow`) Schedules are workflow triggers now"
|
|
26
|
+
).helpOption(false).allowUnknownOption(true).allowExcessArguments(true).argument("[args...]").action(() => {
|
|
27
|
+
console.error(RENAME_NOTICE);
|
|
28
|
+
process.exitCode = 1;
|
|
29
|
+
});
|
|
30
|
+
export {
|
|
31
|
+
zeroScheduleCommand
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=schedule-OSHL7HWT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/zero/schedule.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport chalk from \"chalk\";\n\n// The schedule command tree was removed in #17307 and its Automations\n// successor was removed with the workflow migration (#19959 / #20100):\n// scheduled tasks are workflow triggers now. This stub keeps\n// `zero schedule ...` from failing with an opaque unknown-command error and\n// points at the replacement instead.\nconst RENAME_NOTICE = [\n \"The schedule commands were removed: scheduled tasks are workflow triggers now.\",\n \"\",\n `Manage them with ${chalk.cyan(\"zero workflow\")}, for example:`,\n ` ${chalk.cyan('zero workflow trigger add <workflow> cron --expr \"0 9 * * *\"')}`,\n ` ${chalk.cyan(\"zero workflow trigger list\")}`,\n ` ${chalk.cyan(\"zero workflow --help\")}`,\n].join(\"\\n\");\n\nexport const zeroScheduleCommand = new Command(\"schedule\")\n .description(\n \"(removed: use `zero workflow`) Schedules are workflow triggers now\",\n )\n .helpOption(false)\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .argument(\"[args...]\")\n .action(() => {\n console.error(RENAME_NOTICE);\n process.exitCode = 1;\n });\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAQA,IAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,EACA,oBAAoB,eAAM,KAAK,eAAe,CAAC;AAAA,EAC/C,KAAK,eAAM,KAAK,8DAA8D,CAAC;AAAA,EAC/E,KAAK,eAAM,KAAK,4BAA4B,CAAC;AAAA,EAC7C,KAAK,eAAM,KAAK,sBAAsB,CAAC;AACzC,EAAE,KAAK,IAAI;AAEJ,IAAM,sBAAsB,IAAI,QAAQ,UAAU,EACtD;AAAA,EACC;AACF,EACC,WAAW,KAAK,EAChB,mBAAmB,IAAI,EACvB,qBAAqB,IAAI,EACzB,SAAS,WAAW,EACpB,OAAO,MAAM;AACZ,UAAQ,MAAM,aAAa;AAC3B,UAAQ,WAAW;AACrB,CAAC;","names":[]}
|
|
@@ -3,23 +3,21 @@ import { createRequire as __createRequire } from "node:module";
|
|
|
3
3
|
const require = __createRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
runLogsSearch
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QYSUVI4Z.js";
|
|
7
7
|
import {
|
|
8
|
+
formatIsoTimestamp,
|
|
9
|
+
isUUID,
|
|
8
10
|
parseBoundedLogCount,
|
|
9
11
|
parseSearchQuery,
|
|
10
12
|
parseTime
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import {
|
|
13
|
-
formatIsoTimestamp,
|
|
14
|
-
isUUID
|
|
15
|
-
} from "./chunk-FJFAPB3B.js";
|
|
13
|
+
} from "./chunk-SBLYEOJF.js";
|
|
16
14
|
import "./chunk-I23JUVHS.js";
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-F774K6TY.js";
|
|
16
|
+
import "./chunk-Y4YHS5UO.js";
|
|
19
17
|
import "./chunk-LTDQISD7.js";
|
|
20
18
|
import {
|
|
21
19
|
searchZeroChat
|
|
22
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-KBDCWC3F.js";
|
|
23
21
|
import {
|
|
24
22
|
withErrorHandler
|
|
25
23
|
} from "./chunk-3F4RFLPX.js";
|
|
@@ -203,4 +201,4 @@ export {
|
|
|
203
201
|
buildSlackRecipe,
|
|
204
202
|
zeroSearchCommand
|
|
205
203
|
};
|
|
206
|
-
//# sourceMappingURL=search-
|
|
204
|
+
//# sourceMappingURL=search-FMA3IDHQ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/zero/search/index.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { runLogsSearch, type LogsSearchCliOptions } from \"../logs/search\";\nimport { searchZeroChat } from \"../../../lib/api\";\nimport type {\n ChatSearchMessage,\n ChatSearchResponse,\n} from \"@vm0/api-contracts/contracts/chat-threads\";\nimport { parseTime } from \"../../../lib/utils/time-parser\";\nimport { formatIsoTimestamp } from \"../../../lib/utils/time-format\";\nimport { parseBoundedLogCount } from \"../../../lib/utils/log-pagination\";\nimport { parseSearchQuery } from \"../../../lib/utils/search-query\";\nimport { isUUID } from \"../../run/shared\";\n\nconst SUPPORTED_SOURCES = [\"logs\", \"chat\", \"slack\"] as const;\ntype Source = (typeof SUPPORTED_SOURCES)[number];\n\nconst SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1000;\n\nexport const SEARCH_EXPLAINER = `\nAvailable sources:\n logs full agent event stream (tool calls, tokens, system events) from agent runs\n chat user/assistant text messages as shown in the web chat UI\n slack returns a recipe for calling the Slack API directly; requires the Slack connector\n\nUsage: zero search <query> --source <logs|chat|slack> [flags]\nRun 'zero search --help' for all flags.`;\n\nexport function buildSlackRecipe(query: string): string {\n const encoded = encodeURIComponent(query);\n return `The \\`slack\\` source does not call Slack from this CLI. Run the\nfollowing inside an agent sandbox that has $SLACK_TOKEN available:\n\n curl -H \"Authorization: Bearer $SLACK_TOKEN\" \\\\\n \"https://slack.com/api/search.messages?query=${encoded}\"\n\nIf you don't have $SLACK_TOKEN, check the connector status:\n zero connector status slack\n\nTo verify the token and network policy end-to-end:\n zero doctor check-connector --env-name SLACK_TOKEN\n\nSlack API docs: https://api.slack.com/methods/search.messages\n\nNote: CLI-local flags (--limit, --since, -A/-B/-C) are ignored for the\nslack source. Pass equivalents to Slack's API via count= / highlight=\nquery parameters instead.`;\n}\n\ninterface SearchOptions {\n source: string[];\n agent?: string;\n run?: string;\n since?: string;\n limit?: string;\n afterContext?: string;\n beforeContext?: string;\n context?: string;\n}\n\nfunction collectSource(value: string, previous: string[]): string[] {\n return [...previous, value];\n}\n\nfunction parseContextOptions(options: SearchOptions): {\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\nasync function runLogsSource(\n query: string,\n options: SearchOptions,\n): Promise<void> {\n const logsOptions: LogsSearchCliOptions = {\n afterContext: options.afterContext,\n beforeContext: options.beforeContext,\n context: options.context,\n agentId: options.agent,\n run: options.run,\n since: options.since,\n limit: options.limit,\n };\n await runLogsSearch(query, logsOptions);\n}\n\nfunction formatTimestamp(iso: string): string {\n return formatIsoTimestamp(iso);\n}\n\nfunction renderChatMessage(msg: ChatSearchMessage, isMatch: boolean): void {\n const marker = isMatch ? chalk.yellow(\"▸\") : chalk.dim(\"·\");\n const header = `${marker} ${chalk.dim(msg.role)} ${chalk.dim(formatTimestamp(msg.createdAt))}`;\n console.log(header);\n console.log(isMatch ? msg.content : chalk.dim(msg.content));\n}\n\nfunction renderChatResults(response: ChatSearchResponse): void {\n let isFirst = true;\n for (const result of response.results) {\n if (!isFirst) console.log();\n isFirst = false;\n\n console.log(\n chalk.bold(\n `── Thread ${result.chatThreadId} (${result.agentName}) ──────────`,\n ),\n );\n for (const msg of result.contextBefore) {\n renderChatMessage(msg, false);\n }\n renderChatMessage(result.matchedMessage, true);\n for (const msg of result.contextAfter) {\n renderChatMessage(msg, false);\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\nasync function runChatSource(\n query: string,\n options: SearchOptions,\n): Promise<void> {\n if (options.run !== undefined) {\n throw new Error(\"--run is not supported with --source chat\");\n }\n if (options.agent !== undefined && !isUUID(options.agent)) {\n console.error(\n chalk.red(`✗ Invalid agent ID \"${options.agent}\" — expected a UUID`),\n );\n console.error(chalk.dim(\" Run: zero logs list to find agent IDs\"));\n process.exit(1);\n }\n\n const { before, after } = parseContextOptions(options);\n const limit = parseLimit(options.limit);\n const since =\n options.since !== undefined\n ? parseTime(options.since)\n : Date.now() - SEVEN_DAYS_MS;\n\n const response = await searchZeroChat({\n keyword: query,\n agentId: options.agent,\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 renderChatResults(response);\n}\n\nasync function runSlackSource(\n query: string,\n _options: SearchOptions,\n): Promise<void> {\n console.log(buildSlackRecipe(query));\n}\n\nexport const zeroSearchCommand = new Command()\n .name(\"search\")\n .description(\"Search logs, chat, or get a recipe for external sources\")\n .argument(\"<query>\", \"Search query\")\n .option(\n \"--source <type>\",\n \"Source to search: logs | chat | slack (pass once)\",\n collectSource,\n [] as string[],\n )\n .option(\"--agent <id>\", \"Filter by Zero agent ID\")\n .option(\"--run <id>\", \"Filter by run ID\")\n .option(\"--since <time>\", \"Time window (e.g., 7d, 2h)\")\n .option(\"--limit <n>\", \"Maximum number of matches\")\n .option(\"-A, --after-context <n>\", \"Show n items after each match\")\n .option(\"-B, --before-context <n>\", \"Show n items before each match\")\n .option(\"-C, --context <n>\", \"Show n items before and after each match\")\n .addHelpText(\"after\", SEARCH_EXPLAINER)\n .action(\n withErrorHandler(async (query: string, options: SearchOptions) => {\n const searchQuery = parseSearchQuery(query, \"Query\");\n const sources = options.source;\n\n if (sources.length === 0) {\n console.log(SEARCH_EXPLAINER);\n return;\n }\n\n if (sources.length > 1) {\n throw new Error(\"Only one --source is allowed.\");\n }\n\n const source = sources[0]!;\n if (!SUPPORTED_SOURCES.includes(source as Source)) {\n throw new Error(\n `Unknown --source \"${source}\". Expected one of: ${SUPPORTED_SOURCES.join(\", \")}`,\n );\n }\n\n switch (source as Source) {\n case \"logs\":\n await runLogsSource(searchQuery, options);\n return;\n case \"chat\":\n await runChatSource(searchQuery, options);\n return;\n case \"slack\":\n await runSlackSource(searchQuery, options);\n return;\n }\n }),\n );\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/commands/zero/search/index.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { runLogsSearch, type LogsSearchCliOptions } from \"../logs/search\";\nimport { searchZeroChat } from \"../../../lib/api\";\nimport type {\n ChatSearchMessage,\n ChatSearchResponse,\n} from \"@vm0/api-contracts/contracts/chat-threads\";\nimport { parseTime } from \"../../../lib/utils/time-parser\";\nimport { formatIsoTimestamp } from \"../../../lib/utils/time-format\";\nimport { parseBoundedLogCount } from \"../../../lib/utils/log-pagination\";\nimport { parseSearchQuery } from \"../../../lib/utils/search-query\";\nimport { isUUID } from \"../../run/shared\";\n\nconst SUPPORTED_SOURCES = [\"logs\", \"chat\", \"slack\"] as const;\ntype Source = (typeof SUPPORTED_SOURCES)[number];\n\nconst SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1000;\n\nexport const SEARCH_EXPLAINER = `\nAvailable sources:\n logs full agent event stream (tool calls, tokens, system events) from agent runs\n chat user/assistant text messages as shown in the web chat UI\n slack returns a recipe for calling the Slack API directly; requires the Slack connector\n\nUsage: zero search <query> --source <logs|chat|slack> [flags]\nRun 'zero search --help' for all flags.`;\n\nexport function buildSlackRecipe(query: string): string {\n const encoded = encodeURIComponent(query);\n return `The \\`slack\\` source does not call Slack from this CLI. Run the\nfollowing inside an agent sandbox that has $SLACK_TOKEN available:\n\n curl -H \"Authorization: Bearer $SLACK_TOKEN\" \\\\\n \"https://slack.com/api/search.messages?query=${encoded}\"\n\nIf you don't have $SLACK_TOKEN, check the connector status:\n zero connector status slack\n\nTo verify the token and network policy end-to-end:\n zero doctor check-connector --env-name SLACK_TOKEN\n\nSlack API docs: https://api.slack.com/methods/search.messages\n\nNote: CLI-local flags (--limit, --since, -A/-B/-C) are ignored for the\nslack source. Pass equivalents to Slack's API via count= / highlight=\nquery parameters instead.`;\n}\n\ninterface SearchOptions {\n source: string[];\n agent?: string;\n run?: string;\n since?: string;\n limit?: string;\n afterContext?: string;\n beforeContext?: string;\n context?: string;\n}\n\nfunction collectSource(value: string, previous: string[]): string[] {\n return [...previous, value];\n}\n\nfunction parseContextOptions(options: SearchOptions): {\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\nasync function runLogsSource(\n query: string,\n options: SearchOptions,\n): Promise<void> {\n const logsOptions: LogsSearchCliOptions = {\n afterContext: options.afterContext,\n beforeContext: options.beforeContext,\n context: options.context,\n agentId: options.agent,\n run: options.run,\n since: options.since,\n limit: options.limit,\n };\n await runLogsSearch(query, logsOptions);\n}\n\nfunction formatTimestamp(iso: string): string {\n return formatIsoTimestamp(iso);\n}\n\nfunction renderChatMessage(msg: ChatSearchMessage, isMatch: boolean): void {\n const marker = isMatch ? chalk.yellow(\"▸\") : chalk.dim(\"·\");\n const header = `${marker} ${chalk.dim(msg.role)} ${chalk.dim(formatTimestamp(msg.createdAt))}`;\n console.log(header);\n console.log(isMatch ? msg.content : chalk.dim(msg.content));\n}\n\nfunction renderChatResults(response: ChatSearchResponse): void {\n let isFirst = true;\n for (const result of response.results) {\n if (!isFirst) console.log();\n isFirst = false;\n\n console.log(\n chalk.bold(\n `── Thread ${result.chatThreadId} (${result.agentName}) ──────────`,\n ),\n );\n for (const msg of result.contextBefore) {\n renderChatMessage(msg, false);\n }\n renderChatMessage(result.matchedMessage, true);\n for (const msg of result.contextAfter) {\n renderChatMessage(msg, false);\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\nasync function runChatSource(\n query: string,\n options: SearchOptions,\n): Promise<void> {\n if (options.run !== undefined) {\n throw new Error(\"--run is not supported with --source chat\");\n }\n if (options.agent !== undefined && !isUUID(options.agent)) {\n console.error(\n chalk.red(`✗ Invalid agent ID \"${options.agent}\" — expected a UUID`),\n );\n console.error(chalk.dim(\" Run: zero logs list to find agent IDs\"));\n process.exit(1);\n }\n\n const { before, after } = parseContextOptions(options);\n const limit = parseLimit(options.limit);\n const since =\n options.since !== undefined\n ? parseTime(options.since)\n : Date.now() - SEVEN_DAYS_MS;\n\n const response = await searchZeroChat({\n keyword: query,\n agentId: options.agent,\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 renderChatResults(response);\n}\n\nasync function runSlackSource(\n query: string,\n _options: SearchOptions,\n): Promise<void> {\n console.log(buildSlackRecipe(query));\n}\n\nexport const zeroSearchCommand = new Command()\n .name(\"search\")\n .description(\"Search logs, chat, or get a recipe for external sources\")\n .argument(\"<query>\", \"Search query\")\n .option(\n \"--source <type>\",\n \"Source to search: logs | chat | slack (pass once)\",\n collectSource,\n [] as string[],\n )\n .option(\"--agent <id>\", \"Filter by Zero agent ID\")\n .option(\"--run <id>\", \"Filter by run ID\")\n .option(\"--since <time>\", \"Time window (e.g., 7d, 2h)\")\n .option(\"--limit <n>\", \"Maximum number of matches\")\n .option(\"-A, --after-context <n>\", \"Show n items after each match\")\n .option(\"-B, --before-context <n>\", \"Show n items before each match\")\n .option(\"-C, --context <n>\", \"Show n items before and after each match\")\n .addHelpText(\"after\", SEARCH_EXPLAINER)\n .action(\n withErrorHandler(async (query: string, options: SearchOptions) => {\n const searchQuery = parseSearchQuery(query, \"Query\");\n const sources = options.source;\n\n if (sources.length === 0) {\n console.log(SEARCH_EXPLAINER);\n return;\n }\n\n if (sources.length > 1) {\n throw new Error(\"Only one --source is allowed.\");\n }\n\n const source = sources[0]!;\n if (!SUPPORTED_SOURCES.includes(source as Source)) {\n throw new Error(\n `Unknown --source \"${source}\". Expected one of: ${SUPPORTED_SOURCES.join(\", \")}`,\n );\n }\n\n switch (source as Source) {\n case \"logs\":\n await runLogsSource(searchQuery, options);\n return;\n case \"chat\":\n await runChatSource(searchQuery, options);\n return;\n case \"slack\":\n await runSlackSource(searchQuery, options);\n return;\n }\n }),\n );\n"],"mappings":"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","names":[]}
|
|
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from "node:module";
|
|
|
3
3
|
const require = __createRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
getConnectorStoredSecretDisplayInfo
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-Y4YHS5UO.js";
|
|
7
7
|
import {
|
|
8
8
|
isInteractive,
|
|
9
9
|
promptConfirm,
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
deleteZeroSecret,
|
|
15
15
|
listZeroSecrets,
|
|
16
16
|
setZeroSecret
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-KBDCWC3F.js";
|
|
18
18
|
import {
|
|
19
19
|
withErrorHandler
|
|
20
20
|
} from "./chunk-3F4RFLPX.js";
|
|
@@ -160,4 +160,4 @@ var zeroSecretCommand = new Command().name("secret").description("Read or write
|
|
|
160
160
|
export {
|
|
161
161
|
zeroSecretCommand
|
|
162
162
|
};
|
|
163
|
-
//# sourceMappingURL=secret-
|
|
163
|
+
//# sourceMappingURL=secret-NFJQKUPS.js.map
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
downloadSlackFile,
|
|
8
8
|
initSlackFileUpload,
|
|
9
9
|
sendSlackMessage
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-KBDCWC3F.js";
|
|
11
11
|
import {
|
|
12
12
|
withErrorHandler
|
|
13
13
|
} from "./chunk-3F4RFLPX.js";
|
|
@@ -220,4 +220,4 @@ Examples:
|
|
|
220
220
|
export {
|
|
221
221
|
zeroSlackCommand
|
|
222
222
|
};
|
|
223
|
-
//# sourceMappingURL=slack-
|
|
223
|
+
//# sourceMappingURL=slack-JPM5WVX6.js.map
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
initTelegramFileUpload,
|
|
9
9
|
listTelegramBots,
|
|
10
10
|
sendTelegramMessage
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-KBDCWC3F.js";
|
|
12
12
|
import {
|
|
13
13
|
withErrorHandler
|
|
14
14
|
} from "./chunk-3F4RFLPX.js";
|
|
@@ -335,4 +335,4 @@ Examples:
|
|
|
335
335
|
export {
|
|
336
336
|
zeroTelegramCommand
|
|
337
337
|
};
|
|
338
|
-
//# sourceMappingURL=telegram-
|
|
338
|
+
//# sourceMappingURL=telegram-BNX4UZTT.js.map
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
deleteZeroVariable,
|
|
11
11
|
listZeroVariables,
|
|
12
12
|
setZeroVariable
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-KBDCWC3F.js";
|
|
14
14
|
import {
|
|
15
15
|
withErrorHandler
|
|
16
16
|
} from "./chunk-3F4RFLPX.js";
|
|
@@ -117,4 +117,4 @@ var zeroVariableCommand = new Command().name("variable").description("Read or wr
|
|
|
117
117
|
export {
|
|
118
118
|
zeroVariableCommand
|
|
119
119
|
};
|
|
120
|
-
//# sourceMappingURL=variable-
|
|
120
|
+
//# sourceMappingURL=variable-IAIPAH3T.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { createRequire as __createRequire } from "node:module";
|
|
3
3
|
const require = __createRequire(import.meta.url);
|
|
4
4
|
import "./chunk-LTDQISD7.js";
|
|
5
|
-
import "./chunk-
|
|
5
|
+
import "./chunk-KBDCWC3F.js";
|
|
6
6
|
import {
|
|
7
7
|
downloadWebFile,
|
|
8
8
|
uploadWebFile,
|
|
@@ -106,4 +106,4 @@ Examples:
|
|
|
106
106
|
export {
|
|
107
107
|
zeroWebCommand
|
|
108
108
|
};
|
|
109
|
-
//# sourceMappingURL=web-
|
|
109
|
+
//# sourceMappingURL=web-3TJGHZNA.js.map
|
|
@@ -4,16 +4,16 @@ const require = __createRequire(import.meta.url);
|
|
|
4
4
|
import {
|
|
5
5
|
loadConnectorPermissionInfos,
|
|
6
6
|
policyIcon
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-JOOQB7W3.js";
|
|
8
8
|
import {
|
|
9
9
|
permissionGrantsToFirewallPolicies
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-7ZJOZZXZ.js";
|
|
11
11
|
import "./chunk-LTDQISD7.js";
|
|
12
12
|
import {
|
|
13
13
|
getZeroAgentUserConnectors,
|
|
14
14
|
listZeroConnectors,
|
|
15
15
|
listZeroUserPermissionGrants
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-KBDCWC3F.js";
|
|
17
17
|
import {
|
|
18
18
|
getActiveOrg,
|
|
19
19
|
getApiUrl,
|
|
@@ -192,4 +192,4 @@ Notes:
|
|
|
192
192
|
export {
|
|
193
193
|
zeroWhoamiCommand
|
|
194
194
|
};
|
|
195
|
-
//# sourceMappingURL=whoami-
|
|
195
|
+
//# sourceMappingURL=whoami-OVIXXMRR.js.map
|
|
@@ -1,11 +1,6 @@
|
|
|
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
|
-
formatDurationSeconds,
|
|
6
|
-
formatRelativeTime,
|
|
7
|
-
parseDurationSeconds
|
|
8
|
-
} from "./chunk-HQFETCZ6.js";
|
|
9
4
|
import {
|
|
10
5
|
isInteractive,
|
|
11
6
|
promptConfirm
|
|
@@ -25,7 +20,7 @@ import {
|
|
|
25
20
|
listWorkflows,
|
|
26
21
|
updateWorkflow,
|
|
27
22
|
updateWorkflowTrigger
|
|
28
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-KBDCWC3F.js";
|
|
29
24
|
import {
|
|
30
25
|
withErrorHandler
|
|
31
26
|
} from "./chunk-3F4RFLPX.js";
|
|
@@ -452,8 +447,68 @@ Examples:
|
|
|
452
447
|
// src/commands/zero/workflow/trigger/index.ts
|
|
453
448
|
init_esm_shims();
|
|
454
449
|
|
|
450
|
+
// src/commands/zero/shared/duration.ts
|
|
451
|
+
init_esm_shims();
|
|
452
|
+
var DURATION_PATTERN = /^(\d+)([smhd])$/;
|
|
453
|
+
var UNIT_SECONDS = {
|
|
454
|
+
s: 1,
|
|
455
|
+
m: 60,
|
|
456
|
+
h: 60 * 60,
|
|
457
|
+
d: 24 * 60 * 60
|
|
458
|
+
};
|
|
459
|
+
function parseDurationSeconds(input) {
|
|
460
|
+
const match = input.match(DURATION_PATTERN);
|
|
461
|
+
if (!match) {
|
|
462
|
+
throw new Error(
|
|
463
|
+
`Invalid duration: "${input}". Use <number><unit> with unit s, m, h, or d (e.g. 90s, 15m, 1h)`
|
|
464
|
+
);
|
|
465
|
+
}
|
|
466
|
+
const value = parseInt(match[1], 10);
|
|
467
|
+
if (value <= 0) {
|
|
468
|
+
throw new Error(`Invalid duration: "${input}". Must be greater than zero`);
|
|
469
|
+
}
|
|
470
|
+
return value * UNIT_SECONDS[match[2]];
|
|
471
|
+
}
|
|
472
|
+
function formatDurationSeconds(seconds) {
|
|
473
|
+
for (const [unit, size] of [
|
|
474
|
+
["d", UNIT_SECONDS.d],
|
|
475
|
+
["h", UNIT_SECONDS.h],
|
|
476
|
+
["m", UNIT_SECONDS.m]
|
|
477
|
+
]) {
|
|
478
|
+
if (seconds % size === 0 && seconds >= size) {
|
|
479
|
+
return `${seconds / size}${unit}`;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
return `${seconds}s`;
|
|
483
|
+
}
|
|
484
|
+
|
|
455
485
|
// src/commands/zero/workflow/trigger/display.ts
|
|
456
486
|
init_esm_shims();
|
|
487
|
+
|
|
488
|
+
// src/lib/domain/schedule-utils.ts
|
|
489
|
+
init_esm_shims();
|
|
490
|
+
function formatRelativeTime(dateStr) {
|
|
491
|
+
if (!dateStr) return "-";
|
|
492
|
+
const date = new Date(dateStr);
|
|
493
|
+
const now = /* @__PURE__ */ new Date();
|
|
494
|
+
const diffMs = date.getTime() - now.getTime();
|
|
495
|
+
const diffAbs = Math.abs(diffMs);
|
|
496
|
+
const minutes = Math.floor(diffAbs / (1e3 * 60));
|
|
497
|
+
const hours = Math.floor(diffAbs / (1e3 * 60 * 60));
|
|
498
|
+
const days = Math.floor(diffAbs / (1e3 * 60 * 60 * 24));
|
|
499
|
+
const isPast = diffMs < 0;
|
|
500
|
+
if (days > 0) {
|
|
501
|
+
return isPast ? `${days}d ago` : `in ${days}d`;
|
|
502
|
+
} else if (hours > 0) {
|
|
503
|
+
return isPast ? `${hours}h ago` : `in ${hours}h`;
|
|
504
|
+
} else if (minutes > 0) {
|
|
505
|
+
return isPast ? `${minutes}m ago` : `in ${minutes}m`;
|
|
506
|
+
} else {
|
|
507
|
+
return isPast ? "just now" : "soon";
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
// src/commands/zero/workflow/trigger/display.ts
|
|
457
512
|
var GMAIL_TEXT_FIELDS = [
|
|
458
513
|
"from",
|
|
459
514
|
"subject",
|
|
@@ -1524,4 +1579,4 @@ Examples:
|
|
|
1524
1579
|
export {
|
|
1525
1580
|
zeroWorkflowCommand
|
|
1526
1581
|
};
|
|
1527
|
-
//# sourceMappingURL=workflow-
|
|
1582
|
+
//# sourceMappingURL=workflow-WWMTJDLF.js.map
|