@vm0/cli 9.219.0 → 9.220.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{agent-4SQZDYYN.js → agent-7NASKRN2.js} +4 -4
- package/{automation-WPG4IYVE.js → automation-DL2TSVCY.js} +21 -11
- package/automation-DL2TSVCY.js.map +1 -0
- package/{banking-S7GOP6WI.js → banking-7766P2VA.js} +2 -2
- package/{chat-6E34QZHI.js → chat-7Y3GRRQU.js} +2 -2
- package/{chunk-NUCGXUQW.js → chunk-2WLLGU5G.js} +2 -2
- package/{chunk-UQBJX5J5.js → chunk-BDVHHGRQ.js} +7 -7
- package/{chunk-O5WIIYWN.js → chunk-CYWNKBCJ.js} +2 -2
- package/{chunk-B33JIZI2.js → chunk-EIORAGIM.js} +3 -3
- package/chunk-H63W4KQL.js +160 -0
- package/chunk-H63W4KQL.js.map +1 -0
- package/{chunk-7DWLR3AY.js → chunk-IP5MKNYO.js} +9 -7
- package/{chunk-7DWLR3AY.js.map → chunk-IP5MKNYO.js.map} +1 -1
- package/{chunk-RYGMBENC.js → chunk-JJNOLW3F.js} +2 -2
- package/{chunk-Q47FRJVT.js → chunk-MES7TURQ.js} +51 -182
- package/chunk-MES7TURQ.js.map +1 -0
- package/{chunk-C3NCF7AC.js → chunk-PHLVIRTN.js} +56 -29
- package/chunk-PHLVIRTN.js.map +1 -0
- package/{chunk-PTXI3X6L.js → chunk-QCBHUHCP.js} +2 -2
- package/clerk.generated-ERU55NQP.js +402 -0
- package/clerk.generated-ERU55NQP.js.map +1 -0
- package/{computer-use-P5NZISFJ.js → computer-use-DFWKRS5C.js} +2 -2
- package/{connector-BF7GN5KJ.js → connector-XXMPNPPI.js} +3 -3
- package/{credit-MUMH2AFQ.js → credit-EXQA2ZKH.js} +2 -2
- package/{developer-support-YRODRFDP.js → developer-support-HV2KNBFK.js} +2 -2
- package/{doctor-SYQVWI4X.js → doctor-B3XKCTAQ.js} +5 -5
- package/dropbox.generated-ZZKEVL5X.js +140 -0
- package/dropbox.generated-ZZKEVL5X.js.map +1 -0
- package/{generate-SOTMY5L2.js → generate-76KZOWWD.js} +3 -3
- package/{github-M5QMAGUR.js → github-R33X2DZP.js} +2 -2
- package/{goal-UCWUNBDX.js → goal-6EHEH3W6.js} +2 -2
- package/{host-FBIUSQM5.js → host-QJVQWPTD.js} +2 -2
- package/index.js +20 -18
- package/index.js.map +1 -1
- package/{logs-2WS7C3NG.js → logs-TP25S725.js} +13 -11
- package/{logs-2WS7C3NG.js.map → logs-TP25S725.js.map} +1 -1
- package/{maps-F6HS3TX3.js → maps-GGAFUIRJ.js} +2 -2
- package/{model-WVSFDOUB.js → model-B3IPEBEY.js} +3 -3
- package/{model-provider-RW5KSE2A.js → model-provider-3AKAPHTA.js} +3 -3
- package/{org-HG7QC6H2.js → org-LCUQ4U3K.js} +2 -2
- package/package.json +1 -1
- package/{phone-Y53A3YR6.js → phone-3PZOGXP5.js} +2 -2
- package/{preference-PDDNKSID.js → preference-7BNRZYGT.js} +2 -2
- package/{resource-4RXH7SID.js → resource-FYGZW3VK.js} +2 -2
- package/{schedule-XUGLVIVF.js → schedule-MTI5OP23.js} +2 -2
- package/schedule-MTI5OP23.js.map +1 -0
- package/{search-NRX5C4BZ.js → search-G5335REW.js} +10 -8
- package/{search-NRX5C4BZ.js.map → search-G5335REW.js.map} +1 -1
- package/{secret-G6ZROM3S.js → secret-DPVN2UF2.js} +3 -3
- package/sentry.generated-Y3V3MFG5.js +112 -0
- package/sentry.generated-Y3V3MFG5.js.map +1 -0
- package/{slack-UE7PHE5Q.js → slack-T7G7IOD7.js} +2 -2
- package/strava.generated-FDURULCZ.js +76 -0
- package/strava.generated-FDURULCZ.js.map +1 -0
- package/{telegram-FMO5JNQL.js → telegram-AIUOTF4A.js} +2 -2
- package/{variable-3QU5KSPD.js → variable-UNXSGRUU.js} +2 -2
- package/{web-NUS7HONQ.js → web-NX3LRDTP.js} +2 -2
- package/{whoami-BVBVPCEX.js → whoami-W6ZRUGTN.js} +4 -4
- package/{workflow-KFXYP54E.js → workflow-F2YOTCAJ.js} +135 -95
- package/workflow-F2YOTCAJ.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-WPG4IYVE.js.map +0 -1
- package/chunk-C3NCF7AC.js.map +0 -1
- package/chunk-Q47FRJVT.js.map +0 -1
- package/clerk.generated-CUIJPEBA.js +0 -335
- package/clerk.generated-CUIJPEBA.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-KFXYP54E.js.map +0 -1
- package/xero.generated-UVAXXS6Q.js +0 -129
- package/xero.generated-UVAXXS6Q.js.map +0 -1
- /package/{agent-4SQZDYYN.js.map → agent-7NASKRN2.js.map} +0 -0
- /package/{banking-S7GOP6WI.js.map → banking-7766P2VA.js.map} +0 -0
- /package/{chat-6E34QZHI.js.map → chat-7Y3GRRQU.js.map} +0 -0
- /package/{chunk-NUCGXUQW.js.map → chunk-2WLLGU5G.js.map} +0 -0
- /package/{chunk-UQBJX5J5.js.map → chunk-BDVHHGRQ.js.map} +0 -0
- /package/{chunk-O5WIIYWN.js.map → chunk-CYWNKBCJ.js.map} +0 -0
- /package/{chunk-B33JIZI2.js.map → chunk-EIORAGIM.js.map} +0 -0
- /package/{chunk-RYGMBENC.js.map → chunk-JJNOLW3F.js.map} +0 -0
- /package/{chunk-PTXI3X6L.js.map → chunk-QCBHUHCP.js.map} +0 -0
- /package/{computer-use-P5NZISFJ.js.map → computer-use-DFWKRS5C.js.map} +0 -0
- /package/{connector-BF7GN5KJ.js.map → connector-XXMPNPPI.js.map} +0 -0
- /package/{credit-MUMH2AFQ.js.map → credit-EXQA2ZKH.js.map} +0 -0
- /package/{developer-support-YRODRFDP.js.map → developer-support-HV2KNBFK.js.map} +0 -0
- /package/{doctor-SYQVWI4X.js.map → doctor-B3XKCTAQ.js.map} +0 -0
- /package/{generate-SOTMY5L2.js.map → generate-76KZOWWD.js.map} +0 -0
- /package/{github-M5QMAGUR.js.map → github-R33X2DZP.js.map} +0 -0
- /package/{goal-UCWUNBDX.js.map → goal-6EHEH3W6.js.map} +0 -0
- /package/{host-FBIUSQM5.js.map → host-QJVQWPTD.js.map} +0 -0
- /package/{maps-F6HS3TX3.js.map → maps-GGAFUIRJ.js.map} +0 -0
- /package/{model-WVSFDOUB.js.map → model-B3IPEBEY.js.map} +0 -0
- /package/{model-provider-RW5KSE2A.js.map → model-provider-3AKAPHTA.js.map} +0 -0
- /package/{org-HG7QC6H2.js.map → org-LCUQ4U3K.js.map} +0 -0
- /package/{phone-Y53A3YR6.js.map → phone-3PZOGXP5.js.map} +0 -0
- /package/{preference-PDDNKSID.js.map → preference-7BNRZYGT.js.map} +0 -0
- /package/{resource-4RXH7SID.js.map → resource-FYGZW3VK.js.map} +0 -0
- /package/{secret-G6ZROM3S.js.map → secret-DPVN2UF2.js.map} +0 -0
- /package/{slack-UE7PHE5Q.js.map → slack-T7G7IOD7.js.map} +0 -0
- /package/{telegram-FMO5JNQL.js.map → telegram-AIUOTF4A.js.map} +0 -0
- /package/{variable-3QU5KSPD.js.map → variable-UNXSGRUU.js.map} +0 -0
- /package/{web-NUS7HONQ.js.map → web-NX3LRDTP.js.map} +0 -0
- /package/{whoami-BVBVPCEX.js.map → whoami-W6ZRUGTN.js.map} +0 -0
|
@@ -3,26 +3,28 @@ import { createRequire as __createRequire } from "node:module";
|
|
|
3
3
|
const require = __createRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
searchCommand
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-IP5MKNYO.js";
|
|
7
7
|
import {
|
|
8
|
-
EventRenderer,
|
|
9
|
-
EventStreamNormalizer,
|
|
10
8
|
collectLogItems,
|
|
11
|
-
formatIsoTimestamp,
|
|
12
|
-
isSupportedFramework,
|
|
13
|
-
isUUID,
|
|
14
9
|
parseBoundedLogCount,
|
|
15
10
|
parsePositiveLogCount,
|
|
16
11
|
parseTime
|
|
17
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-H63W4KQL.js";
|
|
13
|
+
import {
|
|
14
|
+
EventRenderer,
|
|
15
|
+
EventStreamNormalizer,
|
|
16
|
+
formatIsoTimestamp,
|
|
17
|
+
isSupportedFramework,
|
|
18
|
+
isUUID
|
|
19
|
+
} from "./chunk-MES7TURQ.js";
|
|
18
20
|
import "./chunk-7HZXC5CL.js";
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
21
|
+
import "./chunk-QCBHUHCP.js";
|
|
22
|
+
import "./chunk-CYWNKBCJ.js";
|
|
21
23
|
import "./chunk-LTDQISD7.js";
|
|
22
24
|
import {
|
|
23
25
|
getZeroRunAgentEvents,
|
|
24
26
|
listZeroLogs
|
|
25
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-PHLVIRTN.js";
|
|
26
28
|
import {
|
|
27
29
|
withErrorHandler
|
|
28
30
|
} from "./chunk-3F4RFLPX.js";
|
|
@@ -274,4 +276,4 @@ Examples:
|
|
|
274
276
|
export {
|
|
275
277
|
zeroLogsCommand
|
|
276
278
|
};
|
|
277
|
-
//# sourceMappingURL=logs-
|
|
279
|
+
//# sourceMappingURL=logs-TP25S725.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-PHLVIRTN.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-GGAFUIRJ.js.map
|
|
@@ -5,12 +5,12 @@ import {
|
|
|
5
5
|
formatModelPolicyStatus,
|
|
6
6
|
formatModelProviderRoute,
|
|
7
7
|
getModelProviderRouteKind
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-JJNOLW3F.js";
|
|
9
9
|
import "./chunk-LTDQISD7.js";
|
|
10
10
|
import {
|
|
11
11
|
getVm0ModelPriceTier,
|
|
12
12
|
listZeroModelPolicies
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-PHLVIRTN.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-B3IPEBEY.js.map
|
|
@@ -5,11 +5,11 @@ import {
|
|
|
5
5
|
formatModelPolicyStatus,
|
|
6
6
|
getModelProviderRouteKind,
|
|
7
7
|
getModelProviderTypeLabel
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-JJNOLW3F.js";
|
|
9
9
|
import "./chunk-LTDQISD7.js";
|
|
10
10
|
import {
|
|
11
11
|
listZeroModelPolicies
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-PHLVIRTN.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-3AKAPHTA.js.map
|
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
switchZeroOrg,
|
|
34
34
|
updateZeroOrg,
|
|
35
35
|
upsertZeroOrgModelProvider
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-PHLVIRTN.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-LCUQ4U3K.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-PHLVIRTN.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-3PZOGXP5.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-PHLVIRTN.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-7BNRZYGT.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-PHLVIRTN.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-FYGZW3VK.js.map
|
|
@@ -17,7 +17,7 @@ var RENAME_NOTICE = [
|
|
|
17
17
|
"The schedule commands were renamed: schedules are Automations now.",
|
|
18
18
|
"",
|
|
19
19
|
`Manage them with ${source_default.cyan("zero automation")}, for example:`,
|
|
20
|
-
` ${source_default.cyan('zero automation create
|
|
20
|
+
` ${source_default.cyan('zero automation create -n alerts --agent <agent-id> -p "<instruction>" --cron "0 9 * * *"')}`,
|
|
21
21
|
` ${source_default.cyan("zero automation list")}`,
|
|
22
22
|
` ${source_default.cyan("zero automation --help")}`
|
|
23
23
|
].join("\n");
|
|
@@ -28,4 +28,4 @@ var zeroScheduleCommand = new Command("schedule").description("(removed: use `ze
|
|
|
28
28
|
export {
|
|
29
29
|
zeroScheduleCommand
|
|
30
30
|
};
|
|
31
|
-
//# sourceMappingURL=schedule-
|
|
31
|
+
//# sourceMappingURL=schedule-MTI5OP23.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: schedules are Automations\n// now. This stub keeps `zero schedule ...` from failing with an opaque\n// unknown-command error and points at the replacement instead.\nconst RENAME_NOTICE = [\n \"The schedule commands were renamed: schedules are Automations now.\",\n \"\",\n `Manage them with ${chalk.cyan(\"zero automation\")}, for example:`,\n ` ${chalk.cyan('zero automation create -n alerts --agent <agent-id> -p \"<instruction>\" --cron \"0 9 * * *\"')}`,\n ` ${chalk.cyan(\"zero automation list\")}`,\n ` ${chalk.cyan(\"zero automation --help\")}`,\n].join(\"\\n\");\n\nexport const zeroScheduleCommand = new Command(\"schedule\")\n .description(\"(removed: use `zero automation`) Schedules are Automations now\")\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;AAMA,IAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,EACA,oBAAoB,eAAM,KAAK,iBAAiB,CAAC;AAAA,EACjD,KAAK,eAAM,KAAK,2FAA2F,CAAC;AAAA,EAC5G,KAAK,eAAM,KAAK,sBAAsB,CAAC;AAAA,EACvC,KAAK,eAAM,KAAK,wBAAwB,CAAC;AAC3C,EAAE,KAAK,IAAI;AAEJ,IAAM,sBAAsB,IAAI,QAAQ,UAAU,EACtD,YAAY,gEAAgE,EAC5E,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,21 +3,23 @@ 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-IP5MKNYO.js";
|
|
7
7
|
import {
|
|
8
|
-
formatIsoTimestamp,
|
|
9
|
-
isUUID,
|
|
10
8
|
parseBoundedLogCount,
|
|
11
9
|
parseSearchQuery,
|
|
12
10
|
parseTime
|
|
13
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-H63W4KQL.js";
|
|
12
|
+
import {
|
|
13
|
+
formatIsoTimestamp,
|
|
14
|
+
isUUID
|
|
15
|
+
} from "./chunk-MES7TURQ.js";
|
|
14
16
|
import "./chunk-7HZXC5CL.js";
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-QCBHUHCP.js";
|
|
18
|
+
import "./chunk-CYWNKBCJ.js";
|
|
17
19
|
import "./chunk-LTDQISD7.js";
|
|
18
20
|
import {
|
|
19
21
|
searchZeroChat
|
|
20
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-PHLVIRTN.js";
|
|
21
23
|
import {
|
|
22
24
|
withErrorHandler
|
|
23
25
|
} from "./chunk-3F4RFLPX.js";
|
|
@@ -201,4 +203,4 @@ export {
|
|
|
201
203
|
buildSlackRecipe,
|
|
202
204
|
zeroSearchCommand
|
|
203
205
|
};
|
|
204
|
-
//# sourceMappingURL=search-
|
|
206
|
+
//# sourceMappingURL=search-G5335REW.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-CYWNKBCJ.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-PHLVIRTN.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-DPVN2UF2.js.map
|
|
@@ -0,0 +1,112 @@
|
|
|
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
|
+
// ../../packages/connectors/src/firewall-metadata/permission-details/sentry.generated.ts
|
|
9
|
+
init_esm_shims();
|
|
10
|
+
var firewallPermissionMetadata = {
|
|
11
|
+
"type": "sentry",
|
|
12
|
+
"label": "Sentry",
|
|
13
|
+
"permissionCount": 22,
|
|
14
|
+
"permissions": [
|
|
15
|
+
{
|
|
16
|
+
"name": "alerts:read",
|
|
17
|
+
"description": "Read alert rules, detectors, monitors, workflows, and check-in status."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "alerts:write",
|
|
21
|
+
"description": "Create, update, or delete alert rules, detectors, monitors, and workflows."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "event:admin",
|
|
25
|
+
"description": "Administer Sentry issues, including deleting issues and external issue links."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "event:read",
|
|
29
|
+
"description": "Read Sentry issues, events, tags, hashes, short IDs, and replay viewer data."
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "event:write",
|
|
33
|
+
"description": "Update Sentry issues, run issue autofix actions, and create external issue links."
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "member:admin",
|
|
37
|
+
"description": "Administer organization members and SCIM users, including removals."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "member:invite",
|
|
41
|
+
"description": "Invite organization members and update pending member invitations."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "member:read",
|
|
45
|
+
"description": "Read organization member and SCIM user records."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name": "member:write",
|
|
49
|
+
"description": "Create and update organization members and SCIM users."
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"name": "org:admin",
|
|
53
|
+
"description": "Delete and administer organization-level resources such as dashboards, saved queries, notifications, external users, and Sentry apps."
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "org:ci",
|
|
57
|
+
"description": "Use CI and deployment workflows, including releases, deploys, and build artifacts."
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"name": "org:integrations",
|
|
61
|
+
"description": "Read and manage organization integrations and Sentry app installations."
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"name": "org:read",
|
|
65
|
+
"description": "Read organization metadata, dashboards, discoveries, projects, teams, replays, events, stats, and related resources."
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "org:write",
|
|
69
|
+
"description": "Create and update organization-level resources such as dashboards, saved queries, forwarding, teams, workflows, and Sentry apps."
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "project:admin",
|
|
73
|
+
"description": "Delete and administer project-level resources such as projects, keys, hooks, filters, monitors, releases, rules, and symbol sources."
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"name": "project:distribution",
|
|
77
|
+
"description": "Read project build distribution artifacts."
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"name": "project:read",
|
|
81
|
+
"description": "Read project settings, events, environments, releases, monitors, replays, rules, keys, teams, and user feedback."
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"name": "project:releases",
|
|
85
|
+
"description": "Read and manage Sentry releases, deploys, release files, commits, and debug symbol files."
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"name": "project:write",
|
|
89
|
+
"description": "Create and update project settings, events, environments, debug files, hooks, keys, monitors, ownership, rules, symbol sources, teams, and user feedback."
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"name": "team:admin",
|
|
93
|
+
"description": "Administer teams, SCIM groups, external teams, and team memberships."
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"name": "team:read",
|
|
97
|
+
"description": "Read teams, SCIM groups, and team memberships."
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"name": "team:write",
|
|
101
|
+
"description": "Create and update teams, SCIM groups, external teams, and team memberships."
|
|
102
|
+
}
|
|
103
|
+
],
|
|
104
|
+
"defaultPolicy": {
|
|
105
|
+
"permissionDefault": "allow",
|
|
106
|
+
"unknownPolicy": "allow"
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
export {
|
|
110
|
+
firewallPermissionMetadata
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=sentry.generated-Y3V3MFG5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../packages/connectors/src/firewall-metadata/permission-details/sentry.generated.ts"],"sourcesContent":["// Auto-generated by @vm0/firewalls-generator.\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate\n//\n// DO NOT EDIT THIS FILE MANUALLY.\nimport type { FirewallPermissionDetailMetadata } from \"../types\";\n\nexport const firewallPermissionMetadata = {\n \"type\": \"sentry\",\n \"label\": \"Sentry\",\n \"permissionCount\": 22,\n \"permissions\": [\n {\n \"name\": \"alerts:read\",\n \"description\": \"Read alert rules, detectors, monitors, workflows, and check-in status.\"\n },\n {\n \"name\": \"alerts:write\",\n \"description\": \"Create, update, or delete alert rules, detectors, monitors, and workflows.\"\n },\n {\n \"name\": \"event:admin\",\n \"description\": \"Administer Sentry issues, including deleting issues and external issue links.\"\n },\n {\n \"name\": \"event:read\",\n \"description\": \"Read Sentry issues, events, tags, hashes, short IDs, and replay viewer data.\"\n },\n {\n \"name\": \"event:write\",\n \"description\": \"Update Sentry issues, run issue autofix actions, and create external issue links.\"\n },\n {\n \"name\": \"member:admin\",\n \"description\": \"Administer organization members and SCIM users, including removals.\"\n },\n {\n \"name\": \"member:invite\",\n \"description\": \"Invite organization members and update pending member invitations.\"\n },\n {\n \"name\": \"member:read\",\n \"description\": \"Read organization member and SCIM user records.\"\n },\n {\n \"name\": \"member:write\",\n \"description\": \"Create and update organization members and SCIM users.\"\n },\n {\n \"name\": \"org:admin\",\n \"description\": \"Delete and administer organization-level resources such as dashboards, saved queries, notifications, external users, and Sentry apps.\"\n },\n {\n \"name\": \"org:ci\",\n \"description\": \"Use CI and deployment workflows, including releases, deploys, and build artifacts.\"\n },\n {\n \"name\": \"org:integrations\",\n \"description\": \"Read and manage organization integrations and Sentry app installations.\"\n },\n {\n \"name\": \"org:read\",\n \"description\": \"Read organization metadata, dashboards, discoveries, projects, teams, replays, events, stats, and related resources.\"\n },\n {\n \"name\": \"org:write\",\n \"description\": \"Create and update organization-level resources such as dashboards, saved queries, forwarding, teams, workflows, and Sentry apps.\"\n },\n {\n \"name\": \"project:admin\",\n \"description\": \"Delete and administer project-level resources such as projects, keys, hooks, filters, monitors, releases, rules, and symbol sources.\"\n },\n {\n \"name\": \"project:distribution\",\n \"description\": \"Read project build distribution artifacts.\"\n },\n {\n \"name\": \"project:read\",\n \"description\": \"Read project settings, events, environments, releases, monitors, replays, rules, keys, teams, and user feedback.\"\n },\n {\n \"name\": \"project:releases\",\n \"description\": \"Read and manage Sentry releases, deploys, release files, commits, and debug symbol files.\"\n },\n {\n \"name\": \"project:write\",\n \"description\": \"Create and update project settings, events, environments, debug files, hooks, keys, monitors, ownership, rules, symbol sources, teams, and user feedback.\"\n },\n {\n \"name\": \"team:admin\",\n \"description\": \"Administer teams, SCIM groups, external teams, and team memberships.\"\n },\n {\n \"name\": \"team:read\",\n \"description\": \"Read teams, SCIM groups, and team memberships.\"\n },\n {\n \"name\": \"team:write\",\n \"description\": \"Create and update teams, SCIM groups, external teams, and team memberships.\"\n }\n ],\n \"defaultPolicy\": {\n \"permissionDefault\": \"allow\",\n \"unknownPolicy\": \"allow\"\n }\n} as const satisfies FirewallPermissionDetailMetadata;\n"],"mappings":";;;;;;;;AAAA;AAMO,IAAM,6BAA6B;AAAA,EACxC,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,mBAAmB;AAAA,EACnB,eAAe;AAAA,IACb;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,qBAAqB;AAAA,IACrB,iBAAiB;AAAA,EACnB;AACF;","names":[]}
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
downloadSlackFile,
|
|
8
8
|
initSlackFileUpload,
|
|
9
9
|
sendSlackMessage
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-PHLVIRTN.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-T7G7IOD7.js.map
|
|
@@ -0,0 +1,76 @@
|
|
|
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
|
+
// ../../packages/connectors/src/firewall-metadata/permission-details/strava.generated.ts
|
|
9
|
+
init_esm_shims();
|
|
10
|
+
var firewallPermissionMetadata = {
|
|
11
|
+
"type": "strava",
|
|
12
|
+
"label": "Strava",
|
|
13
|
+
"permissionCount": 13,
|
|
14
|
+
"permissions": [
|
|
15
|
+
{
|
|
16
|
+
"name": "activities:read",
|
|
17
|
+
"description": "Read athlete activities, including activity details, streams, comments, kudos, laps, zones, and activity history. Privacy zone data and Only You activities require Strava activity:read_all."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "activities:write",
|
|
21
|
+
"description": "Create and update athlete activities."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "athlete_stats:read",
|
|
25
|
+
"description": "Read athlete activity statistics."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "clubs:read",
|
|
29
|
+
"description": "Read athlete club memberships and club activity, admin, and member information."
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "gear:read",
|
|
33
|
+
"description": "Read athlete gear details."
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "profile:read",
|
|
37
|
+
"description": "Read athlete profile and zone information. Restricted profile fields require Strava profile:read_all."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "profile:write",
|
|
41
|
+
"description": "Update athlete profile fields."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "routes:read",
|
|
45
|
+
"description": "Read athlete routes, route details, route exports, and route streams. Private routes require Strava read_all."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name": "segment_effort_streams:read",
|
|
49
|
+
"description": "Read segment effort streams that require Strava read_all."
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"name": "segment_efforts:read",
|
|
53
|
+
"description": "Read segment efforts and segment effort details."
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "segments:read",
|
|
57
|
+
"description": "Read segment exploration, starred segments, segment details, and segment streams. Private segments require Strava read_all."
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"name": "segments:write",
|
|
61
|
+
"description": "Star and unstar segments for the athlete."
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"name": "uploads:write",
|
|
65
|
+
"description": "Upload activities and read upload processing status."
|
|
66
|
+
}
|
|
67
|
+
],
|
|
68
|
+
"defaultPolicy": {
|
|
69
|
+
"permissionDefault": "allow",
|
|
70
|
+
"unknownPolicy": "allow"
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
export {
|
|
74
|
+
firewallPermissionMetadata
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=strava.generated-FDURULCZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../packages/connectors/src/firewall-metadata/permission-details/strava.generated.ts"],"sourcesContent":["// Auto-generated by @vm0/firewalls-generator.\n// Regenerate: cd turbo && pnpm -F @vm0/firewalls-generator generate\n//\n// DO NOT EDIT THIS FILE MANUALLY.\nimport type { FirewallPermissionDetailMetadata } from \"../types\";\n\nexport const firewallPermissionMetadata = {\n \"type\": \"strava\",\n \"label\": \"Strava\",\n \"permissionCount\": 13,\n \"permissions\": [\n {\n \"name\": \"activities:read\",\n \"description\": \"Read athlete activities, including activity details, streams, comments, kudos, laps, zones, and activity history. Privacy zone data and Only You activities require Strava activity:read_all.\"\n },\n {\n \"name\": \"activities:write\",\n \"description\": \"Create and update athlete activities.\"\n },\n {\n \"name\": \"athlete_stats:read\",\n \"description\": \"Read athlete activity statistics.\"\n },\n {\n \"name\": \"clubs:read\",\n \"description\": \"Read athlete club memberships and club activity, admin, and member information.\"\n },\n {\n \"name\": \"gear:read\",\n \"description\": \"Read athlete gear details.\"\n },\n {\n \"name\": \"profile:read\",\n \"description\": \"Read athlete profile and zone information. Restricted profile fields require Strava profile:read_all.\"\n },\n {\n \"name\": \"profile:write\",\n \"description\": \"Update athlete profile fields.\"\n },\n {\n \"name\": \"routes:read\",\n \"description\": \"Read athlete routes, route details, route exports, and route streams. Private routes require Strava read_all.\"\n },\n {\n \"name\": \"segment_effort_streams:read\",\n \"description\": \"Read segment effort streams that require Strava read_all.\"\n },\n {\n \"name\": \"segment_efforts:read\",\n \"description\": \"Read segment efforts and segment effort details.\"\n },\n {\n \"name\": \"segments:read\",\n \"description\": \"Read segment exploration, starred segments, segment details, and segment streams. Private segments require Strava read_all.\"\n },\n {\n \"name\": \"segments:write\",\n \"description\": \"Star and unstar segments for the athlete.\"\n },\n {\n \"name\": \"uploads:write\",\n \"description\": \"Upload activities and read upload processing status.\"\n }\n ],\n \"defaultPolicy\": {\n \"permissionDefault\": \"allow\",\n \"unknownPolicy\": \"allow\"\n }\n} as const satisfies FirewallPermissionDetailMetadata;\n"],"mappings":";;;;;;;;AAAA;AAMO,IAAM,6BAA6B;AAAA,EACxC,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,mBAAmB;AAAA,EACnB,eAAe;AAAA,IACb;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,qBAAqB;AAAA,IACrB,iBAAiB;AAAA,EACnB;AACF;","names":[]}
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
initTelegramFileUpload,
|
|
9
9
|
listTelegramBots,
|
|
10
10
|
sendTelegramMessage
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-PHLVIRTN.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-AIUOTF4A.js.map
|