@vm0/cli 9.238.3 → 9.238.4
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-CTMIX4TA.js → agent-DY657IHK.js} +6 -8
- package/{agent-CTMIX4TA.js.map → agent-DY657IHK.js.map} +1 -1
- package/{banking-7EIKU7WX.js → banking-WZ5ZXNHW.js} +4 -6
- package/{banking-7EIKU7WX.js.map → banking-WZ5ZXNHW.js.map} +1 -1
- package/{chat-5MN7N3LD.js → chat-ORHRUMSC.js} +5 -7
- package/{chat-5MN7N3LD.js.map → chat-ORHRUMSC.js.map} +1 -1
- package/{chunk-3SZJPIMX.js → chunk-6TXV6T6G.js} +2 -2
- package/{chunk-65ZW3GHG.js → chunk-APIZB5CD.js} +5 -7
- package/{chunk-65ZW3GHG.js.map → chunk-APIZB5CD.js.map} +1 -1
- package/{chunk-22VWTDX6.js → chunk-CYF7PHDS.js} +2830 -1325
- package/chunk-CYF7PHDS.js.map +1 -0
- package/{chunk-WPUM3KGN.js → chunk-EH4MVCB3.js} +2 -2
- package/{chunk-ADBNTM34.js → chunk-GA7UX3FL.js} +1408 -32
- package/chunk-GA7UX3FL.js.map +1 -0
- package/{chunk-NAFRQSTL.js → chunk-JH5O3APS.js} +3 -3
- package/{chunk-4ODVSQ6H.js → chunk-MZTSDUUX.js} +2 -2
- package/{chunk-XX3HVOWG.js → chunk-XVW5RA46.js} +18 -1015
- package/chunk-XVW5RA46.js.map +1 -0
- package/{chunk-3LJFZEZ5.js → chunk-Z4SU5SW5.js} +251 -199
- package/chunk-Z4SU5SW5.js.map +1 -0
- package/{chunk-3SWR53IF.js → chunk-ZRG2A3OV.js} +4 -4
- package/{computer-use-JW6NHZFY.js → computer-use-NKBLGFEQ.js} +3 -4
- package/{computer-use-JW6NHZFY.js.map → computer-use-NKBLGFEQ.js.map} +1 -1
- package/{connector-II52GGER.js → connector-7AIQZYTK.js} +5 -7
- package/{connector-II52GGER.js.map → connector-7AIQZYTK.js.map} +1 -1
- package/{credit-SDMLLER2.js → credit-TIOONK33.js} +5 -7
- package/{credit-SDMLLER2.js.map → credit-TIOONK33.js.map} +1 -1
- package/{developer-support-7OGYYIJ2.js → developer-support-IM7P3PNY.js} +3 -4
- package/{developer-support-7OGYYIJ2.js.map → developer-support-IM7P3PNY.js.map} +1 -1
- package/{doctor-UJIIOA33.js → doctor-UG5O6IF2.js} +32 -18
- package/doctor-UG5O6IF2.js.map +1 -0
- package/{generate-DPGQKZTH.js → generate-FFZOGVVZ.js} +5 -7
- package/{generate-DPGQKZTH.js.map → generate-FFZOGVVZ.js.map} +1 -1
- package/{github-DA62AJIQ.js → github-B4A2NYZE.js} +3 -4
- package/{github-DA62AJIQ.js.map → github-B4A2NYZE.js.map} +1 -1
- package/{goal-WWM7OYBQ.js → goal-MQVOVTDO.js} +3 -4
- package/{goal-WWM7OYBQ.js.map → goal-MQVOVTDO.js.map} +1 -1
- package/google-contacts.generated-FL6Z7MTD.js +16 -0
- package/google-contacts.generated-FL6Z7MTD.js.map +1 -0
- package/google-contacts.generated-Q67YBTPW.js +16 -0
- package/google-contacts.generated-Q67YBTPW.js.map +1 -0
- package/google-forms.generated-AOKO24AB.js +16 -0
- package/google-forms.generated-AOKO24AB.js.map +1 -0
- package/google-forms.generated-KDCHIV43.js +16 -0
- package/google-forms.generated-KDCHIV43.js.map +1 -0
- package/{host-YMKJGV6R.js → host-OP2HJH6Y.js} +4 -6
- package/{host-YMKJGV6R.js.map → host-OP2HJH6Y.js.map} +1 -1
- package/index.js +14 -17
- package/index.js.map +1 -1
- package/{logs-FKXVE6QD.js → logs-CA6HKKD7.js} +7 -10
- package/{logs-FKXVE6QD.js.map → logs-CA6HKKD7.js.map} +1 -1
- package/{maps-MWMFHA72.js → maps-IR4XLNKS.js} +4 -6
- package/{maps-MWMFHA72.js.map → maps-IR4XLNKS.js.map} +1 -1
- package/{memory-KAGWT3GE.js → memory-KRW4WNNT.js} +4 -6
- package/{memory-KAGWT3GE.js.map → memory-KRW4WNNT.js.map} +1 -1
- package/{model-67UDE3IM.js → model-N4ZX7CTX.js} +6 -8
- package/{model-67UDE3IM.js.map → model-N4ZX7CTX.js.map} +1 -1
- package/{model-provider-YGNGMT6S.js → model-provider-U4P563EL.js} +5 -7
- package/{model-provider-YGNGMT6S.js.map → model-provider-U4P563EL.js.map} +1 -1
- package/{org-L52CQ6HJ.js → org-IESFCHFN.js} +10 -12
- package/{org-L52CQ6HJ.js.map → org-IESFCHFN.js.map} +1 -1
- package/package.json +1 -1
- package/{phone-VYQKHTRX.js → phone-EBV43OF4.js} +4 -6
- package/{phone-VYQKHTRX.js.map → phone-EBV43OF4.js.map} +1 -1
- package/{preference-7ULJO7RD.js → preference-ZBNLMRLI.js} +4 -6
- package/{preference-7ULJO7RD.js.map → preference-ZBNLMRLI.js.map} +1 -1
- package/{relationship-TNCKBWUW.js → relationship-TP2F7LLQ.js} +4 -6
- package/{relationship-TNCKBWUW.js.map → relationship-TP2F7LLQ.js.map} +1 -1
- package/{resource-V4AXTBFL.js → resource-OTHN2AGX.js} +4 -6
- package/{resource-V4AXTBFL.js.map → resource-OTHN2AGX.js.map} +1 -1
- package/{search-ABCFRK5K.js → search-4JZ5XQIQ.js} +7 -10
- package/{search-ABCFRK5K.js.map → search-4JZ5XQIQ.js.map} +1 -1
- package/{secret-6C53IEKW.js → secret-73Y3IETU.js} +12 -26
- package/secret-73Y3IETU.js.map +1 -0
- package/{slack-H4OQPL4A.js → slack-5NXJ5HF5.js} +4 -6
- package/{slack-H4OQPL4A.js.map → slack-5NXJ5HF5.js.map} +1 -1
- package/{teams-RLQBP3SK.js → teams-DXT4NI2S.js} +4 -6
- package/{teams-RLQBP3SK.js.map → teams-DXT4NI2S.js.map} +1 -1
- package/{telegram-TKQOVOWL.js → telegram-DRWWXQNJ.js} +4 -6
- package/{telegram-TKQOVOWL.js.map → telegram-DRWWXQNJ.js.map} +1 -1
- package/{variable-5PRGXPQX.js → variable-LP5GN2VJ.js} +4 -6
- package/{variable-5PRGXPQX.js.map → variable-LP5GN2VJ.js.map} +1 -1
- package/{video-CVM7TXWW.js → video-TNA6D37U.js} +2 -3
- package/{video-CVM7TXWW.js.map → video-TNA6D37U.js.map} +1 -1
- package/{web-E3KRU54R.js → web-KNGVOG6B.js} +3 -4
- package/{web-E3KRU54R.js.map → web-KNGVOG6B.js.map} +1 -1
- package/{whoami-7JOZNZEZ.js → whoami-O7ZRGGC7.js} +6 -8
- package/{whoami-7JOZNZEZ.js.map → whoami-O7ZRGGC7.js.map} +1 -1
- package/{workflow-RAR37LR4.js → workflow-FYC7N3RU.js} +5 -7
- package/workflow-FYC7N3RU.js.map +1 -0
- package/zero.js +34 -51
- package/zero.js.map +1 -1
- package/automation-7MAK66QT.js +0 -31
- package/automation-7MAK66QT.js.map +0 -1
- package/chunk-22VWTDX6.js.map +0 -1
- package/chunk-3LJFZEZ5.js.map +0 -1
- package/chunk-ADBNTM34.js.map +0 -1
- package/chunk-JUTUEPIR.js +0 -512
- package/chunk-JUTUEPIR.js.map +0 -1
- package/chunk-NBAZLPV3.js +0 -1301
- package/chunk-NBAZLPV3.js.map +0 -1
- package/chunk-XX3HVOWG.js.map +0 -1
- package/doctor-UJIIOA33.js.map +0 -1
- package/schedule-OSHL7HWT.js +0 -33
- package/schedule-OSHL7HWT.js.map +0 -1
- package/secret-6C53IEKW.js.map +0 -1
- package/workflow-RAR37LR4.js.map +0 -1
- /package/{chunk-3SZJPIMX.js.map → chunk-6TXV6T6G.js.map} +0 -0
- /package/{chunk-WPUM3KGN.js.map → chunk-EH4MVCB3.js.map} +0 -0
- /package/{chunk-NAFRQSTL.js.map → chunk-JH5O3APS.js.map} +0 -0
- /package/{chunk-4ODVSQ6H.js.map → chunk-MZTSDUUX.js.map} +0 -0
- /package/{chunk-3SWR53IF.js.map → chunk-ZRG2A3OV.js.map} +0 -0
|
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from "node:module";
|
|
|
3
3
|
const require = __createRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
searchCommand
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-APIZB5CD.js";
|
|
7
7
|
import {
|
|
8
8
|
EventRenderer,
|
|
9
9
|
EventStreamNormalizer,
|
|
@@ -14,21 +14,18 @@ import {
|
|
|
14
14
|
parseBoundedLogCount,
|
|
15
15
|
parsePositiveLogCount,
|
|
16
16
|
parseTime
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-Z4SU5SW5.js";
|
|
18
18
|
import "./chunk-GU4IPLKQ.js";
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-ADBNTM34.js";
|
|
19
|
+
import "./chunk-GA7UX3FL.js";
|
|
21
20
|
import {
|
|
22
21
|
getZeroRunAgentEvents,
|
|
23
22
|
listZeroLogs
|
|
24
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-XVW5RA46.js";
|
|
25
24
|
import "./chunk-LTDQISD7.js";
|
|
26
25
|
import {
|
|
26
|
+
source_default,
|
|
27
27
|
withErrorHandler
|
|
28
|
-
} from "./chunk-
|
|
29
|
-
import {
|
|
30
|
-
source_default
|
|
31
|
-
} from "./chunk-JUTUEPIR.js";
|
|
28
|
+
} from "./chunk-CYF7PHDS.js";
|
|
32
29
|
import "./chunk-LRHXR7JT.js";
|
|
33
30
|
import {
|
|
34
31
|
Command
|
|
@@ -274,4 +271,4 @@ Examples:
|
|
|
274
271
|
export {
|
|
275
272
|
zeroLogsCommand
|
|
276
273
|
};
|
|
277
|
-
//# sourceMappingURL=logs-
|
|
274
|
+
//# sourceMappingURL=logs-CA6HKKD7.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":"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","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"]}
|
|
@@ -3,14 +3,12 @@ import { createRequire as __createRequire } from "node:module";
|
|
|
3
3
|
const require = __createRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
callZeroMaps
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-XVW5RA46.js";
|
|
7
7
|
import "./chunk-LTDQISD7.js";
|
|
8
8
|
import {
|
|
9
|
+
source_default,
|
|
9
10
|
withErrorHandler
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import {
|
|
12
|
-
source_default
|
|
13
|
-
} from "./chunk-JUTUEPIR.js";
|
|
11
|
+
} from "./chunk-CYF7PHDS.js";
|
|
14
12
|
import "./chunk-LRHXR7JT.js";
|
|
15
13
|
import {
|
|
16
14
|
Command,
|
|
@@ -484,4 +482,4 @@ Notes:
|
|
|
484
482
|
export {
|
|
485
483
|
zeroMapsCommand
|
|
486
484
|
};
|
|
487
|
-
//# sourceMappingURL=maps-
|
|
485
|
+
//# sourceMappingURL=maps-IR4XLNKS.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/zero/maps/index.ts"],"sourcesContent":["import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\nimport chalk from \"chalk\";\nimport { callZeroMaps, type ZeroMapsResponse } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nconst TRAVEL_MODES = [\"driving\", \"walking\", \"bicycling\", \"transit\"] as const;\nconst PLACE_SEARCH_FIELDSETS = [\"pro\", \"enterprise\"] as const;\nconst PLACE_DETAIL_FIELDSETS = [\"essentials\", \"pro\", \"enterprise\"] as const;\nconst OSM_LAYERS = [\"roads\", \"buildings\", \"water\", \"parks\"] as const;\nconst OSM_STYLES = [\"standard\", \"guide\"] as const;\n\ntype TravelMode = (typeof TRAVEL_MODES)[number];\ntype PlaceSearchFieldset = (typeof PLACE_SEARCH_FIELDSETS)[number];\ntype PlaceDetailFieldset = (typeof PLACE_DETAIL_FIELDSETS)[number];\ntype OsmLayer = (typeof OSM_LAYERS)[number];\ntype OsmStyle = (typeof OSM_STYLES)[number];\n\ninterface JsonOption {\n json?: boolean;\n}\n\ninterface GeocodeOptions extends JsonOption {\n address: string;\n region?: string;\n}\n\ninterface ReverseGeocodeOptions extends JsonOption {\n lat: number;\n lng: number;\n}\n\ninterface DirectionsOptions extends JsonOption {\n origin: string;\n destination: string;\n mode: TravelMode;\n departureTime?: string;\n}\n\ninterface PlacesSearchOptions extends JsonOption {\n query: string;\n location?: string;\n radius?: number;\n limit: number;\n region?: string;\n fields: PlaceSearchFieldset;\n}\n\ninterface PlacesDetailsOptions extends JsonOption {\n placeId: string;\n fields: PlaceDetailFieldset;\n}\n\ninterface BBox {\n readonly west: number;\n readonly south: number;\n readonly east: number;\n readonly north: number;\n}\n\ninterface LatLng {\n readonly lat: number;\n readonly lng: number;\n}\n\ninterface OsmMarker extends LatLng {\n readonly label?: string;\n}\n\ninterface OsmAreaOptions extends JsonOption {\n bbox?: BBox;\n center?: LatLng;\n radius?: number;\n layers: readonly OsmLayer[];\n output?: string;\n}\n\ninterface OsmRenderOptions extends OsmAreaOptions {\n width: number;\n height: number;\n style: OsmStyle;\n title?: string;\n marker: readonly OsmMarker[];\n output: string;\n}\n\nfunction parseLatitude(value: string): number {\n const latitude = Number(value);\n if (!Number.isFinite(latitude) || latitude < -90 || latitude > 90) {\n throw new InvalidArgumentError(\"latitude must be a number from -90 to 90\");\n }\n return latitude;\n}\n\nfunction parseLongitude(value: string): number {\n const longitude = Number(value);\n if (!Number.isFinite(longitude) || longitude < -180 || longitude > 180) {\n throw new InvalidArgumentError(\n \"longitude must be a number from -180 to 180\",\n );\n }\n return longitude;\n}\n\nfunction parsePositiveInteger(value: string): number {\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed < 1) {\n throw new InvalidArgumentError(\"value must be a positive integer\");\n }\n return parsed;\n}\n\nfunction parseLimit(value: string): number {\n const limit = parsePositiveInteger(value);\n if (limit > 20) {\n throw new InvalidArgumentError(\"limit must be between 1 and 20\");\n }\n return limit;\n}\n\nfunction parseIntegerInRange(value: string, min: number, max: number): number {\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed < min || parsed > max) {\n throw new InvalidArgumentError(\n `value must be an integer from ${min} to ${max}`,\n );\n }\n return parsed;\n}\n\nfunction parseTravelMode(value: string): TravelMode {\n if (TRAVEL_MODES.includes(value as TravelMode)) {\n return value as TravelMode;\n }\n throw new InvalidArgumentError(\n `mode must be one of: ${TRAVEL_MODES.join(\", \")}`,\n );\n}\n\nfunction parsePlaceSearchFields(value: string): PlaceSearchFieldset {\n if (PLACE_SEARCH_FIELDSETS.includes(value as PlaceSearchFieldset)) {\n return value as PlaceSearchFieldset;\n }\n throw new InvalidArgumentError(\n `fields must be one of: ${PLACE_SEARCH_FIELDSETS.join(\", \")}`,\n );\n}\n\nfunction parsePlaceDetailFields(value: string): PlaceDetailFieldset {\n if (PLACE_DETAIL_FIELDSETS.includes(value as PlaceDetailFieldset)) {\n return value as PlaceDetailFieldset;\n }\n throw new InvalidArgumentError(\n `fields must be one of: ${PLACE_DETAIL_FIELDSETS.join(\", \")}`,\n );\n}\n\nfunction parseBBox(value: string): BBox {\n const parts = value.split(\",\").map((part) => {\n return part.trim();\n });\n if (parts.length !== 4) {\n throw new InvalidArgumentError(\"bbox must be west,south,east,north\");\n }\n const [westRaw, southRaw, eastRaw, northRaw] = parts;\n if (!westRaw || !southRaw || !eastRaw || !northRaw) {\n throw new InvalidArgumentError(\"bbox must be west,south,east,north\");\n }\n const bbox = {\n west: parseLongitude(westRaw),\n south: parseLatitude(southRaw),\n east: parseLongitude(eastRaw),\n north: parseLatitude(northRaw),\n };\n if (bbox.east <= bbox.west || bbox.north <= bbox.south) {\n throw new InvalidArgumentError(\n \"bbox east/north must be greater than west/south\",\n );\n }\n return bbox;\n}\n\nfunction parseLatLng(value: string): LatLng {\n const parts = value.split(\",\").map((part) => {\n return part.trim();\n });\n if (parts.length !== 2 || !parts[0] || !parts[1]) {\n throw new InvalidArgumentError(\"coordinates must be lat,lng\");\n }\n return {\n lat: parseLatitude(parts[0]),\n lng: parseLongitude(parts[1]),\n };\n}\n\nfunction parseOsmLayers(value: string): readonly OsmLayer[] {\n const layers = [\n ...new Set(\n value\n .split(\",\")\n .map((layer) => {\n return layer.trim();\n })\n .filter(Boolean),\n ),\n ];\n if (layers.length === 0) {\n throw new InvalidArgumentError(\"layers must include at least one value\");\n }\n const invalid = layers.find((layer) => {\n return !OSM_LAYERS.includes(layer as OsmLayer);\n });\n if (invalid) {\n throw new InvalidArgumentError(\n `layers must be drawn from: ${OSM_LAYERS.join(\", \")}`,\n );\n }\n return layers as readonly OsmLayer[];\n}\n\nfunction parseOsmStyle(value: string): OsmStyle {\n if (OSM_STYLES.includes(value as OsmStyle)) {\n return value as OsmStyle;\n }\n throw new InvalidArgumentError(\n `style must be one of: ${OSM_STYLES.join(\", \")}`,\n );\n}\n\nfunction parseOsmMarker(value: string): OsmMarker {\n const [latRaw, lngRaw, ...labelParts] = value.split(\",\");\n if (!latRaw?.trim() || !lngRaw?.trim()) {\n throw new InvalidArgumentError(\"marker must be lat,lng or lat,lng,label\");\n }\n const label = labelParts.join(\",\").trim();\n return {\n lat: parseLatitude(latRaw.trim()),\n lng: parseLongitude(lngRaw.trim()),\n ...(label ? { label } : {}),\n };\n}\n\nfunction collectOsmMarker(\n value: string,\n previous: readonly OsmMarker[],\n): readonly OsmMarker[] {\n return [...previous, parseOsmMarker(value)];\n}\n\nfunction osmAreaPayload(options: OsmAreaOptions): Record<string, unknown> {\n const hasBbox = options.bbox !== undefined;\n const hasCenterRadius =\n options.center !== undefined && options.radius !== undefined;\n if (hasBbox === hasCenterRadius) {\n throw new Error(\"Provide either --bbox or --center with --radius\");\n }\n return {\n ...(options.bbox ? { bbox: options.bbox } : {}),\n ...(options.center ? { center: options.center } : {}),\n ...(options.radius !== undefined ? { radiusMeters: options.radius } : {}),\n layers: options.layers,\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction resultRecord(response: ZeroMapsResponse): Record<string, unknown> {\n if (!isRecord(response.result)) {\n throw new Error(\"Zero Maps response did not include an object result\");\n }\n return response.result;\n}\n\nfunction stringField(\n value: Record<string, unknown>,\n key: string,\n): string | undefined {\n const field = value[key];\n return typeof field === \"string\" ? field : undefined;\n}\n\nfunction numberField(\n value: Record<string, unknown>,\n key: string,\n): number | undefined {\n const field = value[key];\n return typeof field === \"number\" ? field : undefined;\n}\n\nasync function writeOutputFile(\n outputPath: string,\n content: string | Buffer,\n): Promise<void> {\n await mkdir(dirname(outputPath), { recursive: true });\n await writeFile(outputPath, content);\n}\n\nasync function writeOsmGeoJson(\n outputPath: string,\n response: ZeroMapsResponse,\n): Promise<void> {\n const result = resultRecord(response);\n if (!(\"geojson\" in result)) {\n throw new Error(\"Zero Maps OSM download response did not include geojson\");\n }\n await writeOutputFile(\n outputPath,\n `${JSON.stringify(result.geojson, null, 2)}\\n`,\n );\n}\n\nasync function writeOsmPng(\n outputPath: string,\n response: ZeroMapsResponse,\n): Promise<void> {\n const result = resultRecord(response);\n const image = result.image;\n if (!isRecord(image) || typeof image.base64 !== \"string\") {\n throw new Error(\n \"Zero Maps OSM render response did not include a PNG image\",\n );\n }\n await writeOutputFile(outputPath, Buffer.from(image.base64, \"base64\"));\n}\n\nfunction renderMapsMetadata(response: ZeroMapsResponse): void {\n if (response.provider) {\n console.log(chalk.dim(` Provider: ${response.provider}`));\n }\n if (response.billingCategory) {\n console.log(chalk.dim(` Billing category: ${response.billingCategory}`));\n }\n if (response.billingQuantity !== undefined) {\n console.log(chalk.dim(` Billing quantity: ${response.billingQuantity}`));\n }\n if (response.creditsCharged !== undefined) {\n console.log(chalk.dim(` Credits charged: ${response.creditsCharged}`));\n }\n}\n\nfunction renderMapsResponse(label: string, response: ZeroMapsResponse): void {\n console.log(chalk.green(`✓ ${label}`));\n renderMapsMetadata(response);\n\n const result = response.result ?? response;\n console.log(JSON.stringify(result, null, 2));\n}\n\nfunction renderOsmFileResponse(\n label: string,\n response: ZeroMapsResponse,\n outputPath: string,\n): void {\n console.log(chalk.green(`✓ ${label}`));\n renderMapsMetadata(response);\n\n const result = isRecord(response.result) ? response.result : {};\n const featureCount = numberField(result, \"featureCount\");\n const attribution = stringField(result, \"attribution\");\n if (featureCount !== undefined) {\n console.log(chalk.dim(` Features: ${featureCount}`));\n }\n if (attribution) {\n console.log(chalk.dim(` Attribution: ${attribution}`));\n }\n console.log(chalk.dim(` Output: ${outputPath}`));\n}\n\nasync function runMapsRequest(\n label: string,\n endpoint:\n | \"geocode\"\n | \"reverse-geocode\"\n | \"directions\"\n | \"places/search\"\n | \"places/details\"\n | \"osm/download\"\n | \"osm/render\",\n payload: Record<string, unknown>,\n options: JsonOption,\n): Promise<void> {\n const response = await callZeroMaps(endpoint, payload);\n\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n\n renderMapsResponse(label, response);\n}\n\nconst geocodeCommand = new Command()\n .name(\"geocode\")\n .description(\"Convert an address into coordinates\")\n .requiredOption(\"--address <address>\", \"Address to geocode\")\n .option(\"--region <code>\", \"Optional region bias, such as US or CN\")\n .option(\"--json\", \"Print the raw maps response as JSON\")\n .action(\n withErrorHandler(async (options: GeocodeOptions) => {\n await runMapsRequest(\n \"Geocode completed\",\n \"geocode\",\n { address: options.address, region: options.region },\n options,\n );\n }),\n );\n\nconst reverseGeocodeCommand = new Command()\n .name(\"reverse-geocode\")\n .description(\"Convert coordinates into an address\")\n .requiredOption(\"--lat <number>\", \"Latitude\", parseLatitude)\n .requiredOption(\"--lng <number>\", \"Longitude\", parseLongitude)\n .option(\"--json\", \"Print the raw maps response as JSON\")\n .action(\n withErrorHandler(async (options: ReverseGeocodeOptions) => {\n await runMapsRequest(\n \"Reverse geocode completed\",\n \"reverse-geocode\",\n { lat: options.lat, lng: options.lng },\n options,\n );\n }),\n );\n\nconst directionsCommand = new Command()\n .name(\"directions\")\n .description(\"Get a route between two places\")\n .requiredOption(\n \"--origin <place>\",\n \"Origin address, coordinates, or place ID\",\n )\n .requiredOption(\n \"--destination <place>\",\n \"Destination address, coordinates, or place ID\",\n )\n .option(\n \"--mode <mode>\",\n \"Travel mode: driving, walking, bicycling, or transit\",\n parseTravelMode,\n \"driving\",\n )\n .option(\"--departure-time <time>\", \"ISO departure time or provider keyword\")\n .option(\"--json\", \"Print the raw maps response as JSON\")\n .action(\n withErrorHandler(async (options: DirectionsOptions) => {\n await runMapsRequest(\n \"Directions completed\",\n \"directions\",\n {\n origin: options.origin,\n destination: options.destination,\n mode: options.mode,\n departureTime: options.departureTime,\n },\n options,\n );\n }),\n );\n\nconst placesSearchCommand = new Command()\n .name(\"search\")\n .description(\"Search for places\")\n .requiredOption(\"--query <query>\", \"Place search query\")\n .option(\"--location <lat,lng>\", \"Optional location bias\")\n .option(\n \"--radius <meters>\",\n \"Optional search radius in meters\",\n parsePositiveInteger,\n )\n .option(\n \"--limit <n>\",\n \"Maximum places to return, from 1 to 20\",\n parseLimit,\n 5,\n )\n .option(\"--region <code>\", \"Optional region bias, such as US or CN\")\n .option(\n \"--fields <fields>\",\n \"Field set: pro or enterprise\",\n parsePlaceSearchFields,\n \"pro\",\n )\n .option(\"--json\", \"Print the raw maps response as JSON\")\n .action(\n withErrorHandler(async (options: PlacesSearchOptions) => {\n await runMapsRequest(\n \"Places search completed\",\n \"places/search\",\n {\n query: options.query,\n location: options.location,\n radius: options.radius,\n limit: options.limit,\n region: options.region,\n fields: options.fields,\n },\n options,\n );\n }),\n );\n\nconst placesDetailsCommand = new Command()\n .name(\"details\")\n .description(\"Get details for a place\")\n .requiredOption(\"--place-id <id>\", \"Provider place ID\")\n .option(\n \"--fields <fields>\",\n \"Field set: essentials, pro, or enterprise\",\n parsePlaceDetailFields,\n \"essentials\",\n )\n .option(\"--json\", \"Print the raw maps response as JSON\")\n .action(\n withErrorHandler(async (options: PlacesDetailsOptions) => {\n await runMapsRequest(\n \"Place details completed\",\n \"places/details\",\n { placeId: options.placeId, fields: options.fields },\n options,\n );\n }),\n );\n\nconst osmDownloadCommand = new Command()\n .name(\"download\")\n .description(\"Download OpenStreetMap vector features as GeoJSON\")\n .option(\n \"--bbox <west,south,east,north>\",\n \"Bounding box in WGS84 coordinates\",\n parseBBox,\n )\n .option(\n \"--center <lat,lng>\",\n \"Center point in WGS84 coordinates\",\n parseLatLng,\n )\n .option(\n \"--radius <meters>\",\n \"Radius in meters when using --center\",\n parsePositiveInteger,\n )\n .option(\n \"--layers <layers>\",\n \"Comma-separated layers: roads, buildings, water, parks\",\n parseOsmLayers,\n OSM_LAYERS,\n )\n .option(\"--output <path>\", \"Write GeoJSON to a file\")\n .option(\"--json\", \"Print the raw maps response as JSON\")\n .action(\n withErrorHandler(async (options: OsmAreaOptions) => {\n const response = await callZeroMaps(\n \"osm/download\",\n osmAreaPayload(options),\n );\n if (options.output) {\n await writeOsmGeoJson(options.output, response);\n }\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n if (options.output) {\n renderOsmFileResponse(\n \"OSM download completed\",\n response,\n options.output,\n );\n return;\n }\n renderMapsResponse(\"OSM download completed\", response);\n }),\n );\n\nconst osmRenderCommand = new Command()\n .name(\"render\")\n .description(\"Render OpenStreetMap vector features to PNG\")\n .option(\n \"--bbox <west,south,east,north>\",\n \"Bounding box in WGS84 coordinates\",\n parseBBox,\n )\n .option(\n \"--center <lat,lng>\",\n \"Center point in WGS84 coordinates\",\n parseLatLng,\n )\n .option(\n \"--radius <meters>\",\n \"Radius in meters when using --center\",\n parsePositiveInteger,\n )\n .option(\n \"--layers <layers>\",\n \"Comma-separated layers: roads, buildings, water, parks\",\n parseOsmLayers,\n OSM_LAYERS,\n )\n .option(\n \"--width <px>\",\n \"PNG width in pixels, from 320 to 2048\",\n (value) => {\n return parseIntegerInRange(value, 320, 2_048);\n },\n 1_536,\n )\n .option(\n \"--height <px>\",\n \"PNG height in pixels, from 240 to 2048\",\n (value) => {\n return parseIntegerInRange(value, 240, 2_048);\n },\n 1_024,\n )\n .option(\n \"--style <style>\",\n \"Render style: standard or guide\",\n parseOsmStyle,\n \"standard\",\n )\n .option(\"--title <text>\", \"Optional title drawn onto the PNG\")\n .option(\n \"--marker <lat,lng[,label]>\",\n \"Marker to draw; repeat for multiple markers\",\n collectOsmMarker,\n [],\n )\n .requiredOption(\"--output <path>\", \"Write PNG to a file\")\n .option(\"--json\", \"Print the raw maps response as JSON\")\n .action(\n withErrorHandler(async (options: OsmRenderOptions) => {\n const response = await callZeroMaps(\"osm/render\", {\n ...osmAreaPayload(options),\n width: options.width,\n height: options.height,\n style: options.style,\n title: options.title,\n markers: options.marker,\n });\n await writeOsmPng(options.output, response);\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n renderOsmFileResponse(\"OSM render completed\", response, options.output);\n }),\n );\n\nconst osmCommand = new Command()\n .name(\"osm\")\n .description(\"Download and render OpenStreetMap data\")\n .addCommand(osmDownloadCommand)\n .addCommand(osmRenderCommand);\n\nconst placesCommand = new Command()\n .name(\"places\")\n .description(\"Search places and fetch place details\")\n .addCommand(placesSearchCommand)\n .addCommand(placesDetailsCommand);\n\nexport const zeroMapsCommand = new Command()\n .name(\"maps\")\n .description(\"Use managed zero maps services\")\n .addCommand(geocodeCommand)\n .addCommand(reverseGeocodeCommand)\n .addCommand(directionsCommand)\n .addCommand(placesCommand)\n .addCommand(osmCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Geocode address: zero maps geocode --address \"1 Infinite Loop, Cupertino\" --json\n Get route: zero maps directions --origin \"SFO\" --destination \"Mountain View\" --mode driving --json\n Search places: zero maps places search --query \"coffee near Union Square SF\" --limit 5 --json\n Enterprise search: zero maps places search --query \"restaurants in SoMa\" --fields enterprise --json\n Place details: zero maps places details --place-id <id> --fields essentials --json\n Enterprise details: zero maps places details --place-id <id> --fields enterprise --json\n Download OSM data: zero maps osm download --bbox -122.43,37.76,-122.40,37.79 --output map.geojson\n Render OSM PNG: zero maps osm render --center 37.7749,-122.4194 --radius 1200 --output map.png\n\nNotes:\n - Authenticates via ZERO_TOKEN (requires maps:read capability) or a CLI token\n - Google Maps and OpenStreetMap calls and credit billing happen on the vm0 API server\n - Use --fields essentials for place details unless paid fields are required`,\n );\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/commands/zero/maps/index.ts"],"sourcesContent":["import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\nimport { Command, InvalidArgumentError } from \"commander\";\nimport chalk from \"chalk\";\nimport { callZeroMaps, type ZeroMapsResponse } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nconst TRAVEL_MODES = [\"driving\", \"walking\", \"bicycling\", \"transit\"] as const;\nconst PLACE_SEARCH_FIELDSETS = [\"pro\", \"enterprise\"] as const;\nconst PLACE_DETAIL_FIELDSETS = [\"essentials\", \"pro\", \"enterprise\"] as const;\nconst OSM_LAYERS = [\"roads\", \"buildings\", \"water\", \"parks\"] as const;\nconst OSM_STYLES = [\"standard\", \"guide\"] as const;\n\ntype TravelMode = (typeof TRAVEL_MODES)[number];\ntype PlaceSearchFieldset = (typeof PLACE_SEARCH_FIELDSETS)[number];\ntype PlaceDetailFieldset = (typeof PLACE_DETAIL_FIELDSETS)[number];\ntype OsmLayer = (typeof OSM_LAYERS)[number];\ntype OsmStyle = (typeof OSM_STYLES)[number];\n\ninterface JsonOption {\n json?: boolean;\n}\n\ninterface GeocodeOptions extends JsonOption {\n address: string;\n region?: string;\n}\n\ninterface ReverseGeocodeOptions extends JsonOption {\n lat: number;\n lng: number;\n}\n\ninterface DirectionsOptions extends JsonOption {\n origin: string;\n destination: string;\n mode: TravelMode;\n departureTime?: string;\n}\n\ninterface PlacesSearchOptions extends JsonOption {\n query: string;\n location?: string;\n radius?: number;\n limit: number;\n region?: string;\n fields: PlaceSearchFieldset;\n}\n\ninterface PlacesDetailsOptions extends JsonOption {\n placeId: string;\n fields: PlaceDetailFieldset;\n}\n\ninterface BBox {\n readonly west: number;\n readonly south: number;\n readonly east: number;\n readonly north: number;\n}\n\ninterface LatLng {\n readonly lat: number;\n readonly lng: number;\n}\n\ninterface OsmMarker extends LatLng {\n readonly label?: string;\n}\n\ninterface OsmAreaOptions extends JsonOption {\n bbox?: BBox;\n center?: LatLng;\n radius?: number;\n layers: readonly OsmLayer[];\n output?: string;\n}\n\ninterface OsmRenderOptions extends OsmAreaOptions {\n width: number;\n height: number;\n style: OsmStyle;\n title?: string;\n marker: readonly OsmMarker[];\n output: string;\n}\n\nfunction parseLatitude(value: string): number {\n const latitude = Number(value);\n if (!Number.isFinite(latitude) || latitude < -90 || latitude > 90) {\n throw new InvalidArgumentError(\"latitude must be a number from -90 to 90\");\n }\n return latitude;\n}\n\nfunction parseLongitude(value: string): number {\n const longitude = Number(value);\n if (!Number.isFinite(longitude) || longitude < -180 || longitude > 180) {\n throw new InvalidArgumentError(\n \"longitude must be a number from -180 to 180\",\n );\n }\n return longitude;\n}\n\nfunction parsePositiveInteger(value: string): number {\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed < 1) {\n throw new InvalidArgumentError(\"value must be a positive integer\");\n }\n return parsed;\n}\n\nfunction parseLimit(value: string): number {\n const limit = parsePositiveInteger(value);\n if (limit > 20) {\n throw new InvalidArgumentError(\"limit must be between 1 and 20\");\n }\n return limit;\n}\n\nfunction parseIntegerInRange(value: string, min: number, max: number): number {\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed < min || parsed > max) {\n throw new InvalidArgumentError(\n `value must be an integer from ${min} to ${max}`,\n );\n }\n return parsed;\n}\n\nfunction parseTravelMode(value: string): TravelMode {\n if (TRAVEL_MODES.includes(value as TravelMode)) {\n return value as TravelMode;\n }\n throw new InvalidArgumentError(\n `mode must be one of: ${TRAVEL_MODES.join(\", \")}`,\n );\n}\n\nfunction parsePlaceSearchFields(value: string): PlaceSearchFieldset {\n if (PLACE_SEARCH_FIELDSETS.includes(value as PlaceSearchFieldset)) {\n return value as PlaceSearchFieldset;\n }\n throw new InvalidArgumentError(\n `fields must be one of: ${PLACE_SEARCH_FIELDSETS.join(\", \")}`,\n );\n}\n\nfunction parsePlaceDetailFields(value: string): PlaceDetailFieldset {\n if (PLACE_DETAIL_FIELDSETS.includes(value as PlaceDetailFieldset)) {\n return value as PlaceDetailFieldset;\n }\n throw new InvalidArgumentError(\n `fields must be one of: ${PLACE_DETAIL_FIELDSETS.join(\", \")}`,\n );\n}\n\nfunction parseBBox(value: string): BBox {\n const parts = value.split(\",\").map((part) => {\n return part.trim();\n });\n if (parts.length !== 4) {\n throw new InvalidArgumentError(\"bbox must be west,south,east,north\");\n }\n const [westRaw, southRaw, eastRaw, northRaw] = parts;\n if (!westRaw || !southRaw || !eastRaw || !northRaw) {\n throw new InvalidArgumentError(\"bbox must be west,south,east,north\");\n }\n const bbox = {\n west: parseLongitude(westRaw),\n south: parseLatitude(southRaw),\n east: parseLongitude(eastRaw),\n north: parseLatitude(northRaw),\n };\n if (bbox.east <= bbox.west || bbox.north <= bbox.south) {\n throw new InvalidArgumentError(\n \"bbox east/north must be greater than west/south\",\n );\n }\n return bbox;\n}\n\nfunction parseLatLng(value: string): LatLng {\n const parts = value.split(\",\").map((part) => {\n return part.trim();\n });\n if (parts.length !== 2 || !parts[0] || !parts[1]) {\n throw new InvalidArgumentError(\"coordinates must be lat,lng\");\n }\n return {\n lat: parseLatitude(parts[0]),\n lng: parseLongitude(parts[1]),\n };\n}\n\nfunction parseOsmLayers(value: string): readonly OsmLayer[] {\n const layers = [\n ...new Set(\n value\n .split(\",\")\n .map((layer) => {\n return layer.trim();\n })\n .filter(Boolean),\n ),\n ];\n if (layers.length === 0) {\n throw new InvalidArgumentError(\"layers must include at least one value\");\n }\n const invalid = layers.find((layer) => {\n return !OSM_LAYERS.includes(layer as OsmLayer);\n });\n if (invalid) {\n throw new InvalidArgumentError(\n `layers must be drawn from: ${OSM_LAYERS.join(\", \")}`,\n );\n }\n return layers as readonly OsmLayer[];\n}\n\nfunction parseOsmStyle(value: string): OsmStyle {\n if (OSM_STYLES.includes(value as OsmStyle)) {\n return value as OsmStyle;\n }\n throw new InvalidArgumentError(\n `style must be one of: ${OSM_STYLES.join(\", \")}`,\n );\n}\n\nfunction parseOsmMarker(value: string): OsmMarker {\n const [latRaw, lngRaw, ...labelParts] = value.split(\",\");\n if (!latRaw?.trim() || !lngRaw?.trim()) {\n throw new InvalidArgumentError(\"marker must be lat,lng or lat,lng,label\");\n }\n const label = labelParts.join(\",\").trim();\n return {\n lat: parseLatitude(latRaw.trim()),\n lng: parseLongitude(lngRaw.trim()),\n ...(label ? { label } : {}),\n };\n}\n\nfunction collectOsmMarker(\n value: string,\n previous: readonly OsmMarker[],\n): readonly OsmMarker[] {\n return [...previous, parseOsmMarker(value)];\n}\n\nfunction osmAreaPayload(options: OsmAreaOptions): Record<string, unknown> {\n const hasBbox = options.bbox !== undefined;\n const hasCenterRadius =\n options.center !== undefined && options.radius !== undefined;\n if (hasBbox === hasCenterRadius) {\n throw new Error(\"Provide either --bbox or --center with --radius\");\n }\n return {\n ...(options.bbox ? { bbox: options.bbox } : {}),\n ...(options.center ? { center: options.center } : {}),\n ...(options.radius !== undefined ? { radiusMeters: options.radius } : {}),\n layers: options.layers,\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction resultRecord(response: ZeroMapsResponse): Record<string, unknown> {\n if (!isRecord(response.result)) {\n throw new Error(\"Zero Maps response did not include an object result\");\n }\n return response.result;\n}\n\nfunction stringField(\n value: Record<string, unknown>,\n key: string,\n): string | undefined {\n const field = value[key];\n return typeof field === \"string\" ? field : undefined;\n}\n\nfunction numberField(\n value: Record<string, unknown>,\n key: string,\n): number | undefined {\n const field = value[key];\n return typeof field === \"number\" ? field : undefined;\n}\n\nasync function writeOutputFile(\n outputPath: string,\n content: string | Buffer,\n): Promise<void> {\n await mkdir(dirname(outputPath), { recursive: true });\n await writeFile(outputPath, content);\n}\n\nasync function writeOsmGeoJson(\n outputPath: string,\n response: ZeroMapsResponse,\n): Promise<void> {\n const result = resultRecord(response);\n if (!(\"geojson\" in result)) {\n throw new Error(\"Zero Maps OSM download response did not include geojson\");\n }\n await writeOutputFile(\n outputPath,\n `${JSON.stringify(result.geojson, null, 2)}\\n`,\n );\n}\n\nasync function writeOsmPng(\n outputPath: string,\n response: ZeroMapsResponse,\n): Promise<void> {\n const result = resultRecord(response);\n const image = result.image;\n if (!isRecord(image) || typeof image.base64 !== \"string\") {\n throw new Error(\n \"Zero Maps OSM render response did not include a PNG image\",\n );\n }\n await writeOutputFile(outputPath, Buffer.from(image.base64, \"base64\"));\n}\n\nfunction renderMapsMetadata(response: ZeroMapsResponse): void {\n if (response.provider) {\n console.log(chalk.dim(` Provider: ${response.provider}`));\n }\n if (response.billingCategory) {\n console.log(chalk.dim(` Billing category: ${response.billingCategory}`));\n }\n if (response.billingQuantity !== undefined) {\n console.log(chalk.dim(` Billing quantity: ${response.billingQuantity}`));\n }\n if (response.creditsCharged !== undefined) {\n console.log(chalk.dim(` Credits charged: ${response.creditsCharged}`));\n }\n}\n\nfunction renderMapsResponse(label: string, response: ZeroMapsResponse): void {\n console.log(chalk.green(`✓ ${label}`));\n renderMapsMetadata(response);\n\n const result = response.result ?? response;\n console.log(JSON.stringify(result, null, 2));\n}\n\nfunction renderOsmFileResponse(\n label: string,\n response: ZeroMapsResponse,\n outputPath: string,\n): void {\n console.log(chalk.green(`✓ ${label}`));\n renderMapsMetadata(response);\n\n const result = isRecord(response.result) ? response.result : {};\n const featureCount = numberField(result, \"featureCount\");\n const attribution = stringField(result, \"attribution\");\n if (featureCount !== undefined) {\n console.log(chalk.dim(` Features: ${featureCount}`));\n }\n if (attribution) {\n console.log(chalk.dim(` Attribution: ${attribution}`));\n }\n console.log(chalk.dim(` Output: ${outputPath}`));\n}\n\nasync function runMapsRequest(\n label: string,\n endpoint:\n | \"geocode\"\n | \"reverse-geocode\"\n | \"directions\"\n | \"places/search\"\n | \"places/details\"\n | \"osm/download\"\n | \"osm/render\",\n payload: Record<string, unknown>,\n options: JsonOption,\n): Promise<void> {\n const response = await callZeroMaps(endpoint, payload);\n\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n\n renderMapsResponse(label, response);\n}\n\nconst geocodeCommand = new Command()\n .name(\"geocode\")\n .description(\"Convert an address into coordinates\")\n .requiredOption(\"--address <address>\", \"Address to geocode\")\n .option(\"--region <code>\", \"Optional region bias, such as US or CN\")\n .option(\"--json\", \"Print the raw maps response as JSON\")\n .action(\n withErrorHandler(async (options: GeocodeOptions) => {\n await runMapsRequest(\n \"Geocode completed\",\n \"geocode\",\n { address: options.address, region: options.region },\n options,\n );\n }),\n );\n\nconst reverseGeocodeCommand = new Command()\n .name(\"reverse-geocode\")\n .description(\"Convert coordinates into an address\")\n .requiredOption(\"--lat <number>\", \"Latitude\", parseLatitude)\n .requiredOption(\"--lng <number>\", \"Longitude\", parseLongitude)\n .option(\"--json\", \"Print the raw maps response as JSON\")\n .action(\n withErrorHandler(async (options: ReverseGeocodeOptions) => {\n await runMapsRequest(\n \"Reverse geocode completed\",\n \"reverse-geocode\",\n { lat: options.lat, lng: options.lng },\n options,\n );\n }),\n );\n\nconst directionsCommand = new Command()\n .name(\"directions\")\n .description(\"Get a route between two places\")\n .requiredOption(\n \"--origin <place>\",\n \"Origin address, coordinates, or place ID\",\n )\n .requiredOption(\n \"--destination <place>\",\n \"Destination address, coordinates, or place ID\",\n )\n .option(\n \"--mode <mode>\",\n \"Travel mode: driving, walking, bicycling, or transit\",\n parseTravelMode,\n \"driving\",\n )\n .option(\"--departure-time <time>\", \"ISO departure time or provider keyword\")\n .option(\"--json\", \"Print the raw maps response as JSON\")\n .action(\n withErrorHandler(async (options: DirectionsOptions) => {\n await runMapsRequest(\n \"Directions completed\",\n \"directions\",\n {\n origin: options.origin,\n destination: options.destination,\n mode: options.mode,\n departureTime: options.departureTime,\n },\n options,\n );\n }),\n );\n\nconst placesSearchCommand = new Command()\n .name(\"search\")\n .description(\"Search for places\")\n .requiredOption(\"--query <query>\", \"Place search query\")\n .option(\"--location <lat,lng>\", \"Optional location bias\")\n .option(\n \"--radius <meters>\",\n \"Optional search radius in meters\",\n parsePositiveInteger,\n )\n .option(\n \"--limit <n>\",\n \"Maximum places to return, from 1 to 20\",\n parseLimit,\n 5,\n )\n .option(\"--region <code>\", \"Optional region bias, such as US or CN\")\n .option(\n \"--fields <fields>\",\n \"Field set: pro or enterprise\",\n parsePlaceSearchFields,\n \"pro\",\n )\n .option(\"--json\", \"Print the raw maps response as JSON\")\n .action(\n withErrorHandler(async (options: PlacesSearchOptions) => {\n await runMapsRequest(\n \"Places search completed\",\n \"places/search\",\n {\n query: options.query,\n location: options.location,\n radius: options.radius,\n limit: options.limit,\n region: options.region,\n fields: options.fields,\n },\n options,\n );\n }),\n );\n\nconst placesDetailsCommand = new Command()\n .name(\"details\")\n .description(\"Get details for a place\")\n .requiredOption(\"--place-id <id>\", \"Provider place ID\")\n .option(\n \"--fields <fields>\",\n \"Field set: essentials, pro, or enterprise\",\n parsePlaceDetailFields,\n \"essentials\",\n )\n .option(\"--json\", \"Print the raw maps response as JSON\")\n .action(\n withErrorHandler(async (options: PlacesDetailsOptions) => {\n await runMapsRequest(\n \"Place details completed\",\n \"places/details\",\n { placeId: options.placeId, fields: options.fields },\n options,\n );\n }),\n );\n\nconst osmDownloadCommand = new Command()\n .name(\"download\")\n .description(\"Download OpenStreetMap vector features as GeoJSON\")\n .option(\n \"--bbox <west,south,east,north>\",\n \"Bounding box in WGS84 coordinates\",\n parseBBox,\n )\n .option(\n \"--center <lat,lng>\",\n \"Center point in WGS84 coordinates\",\n parseLatLng,\n )\n .option(\n \"--radius <meters>\",\n \"Radius in meters when using --center\",\n parsePositiveInteger,\n )\n .option(\n \"--layers <layers>\",\n \"Comma-separated layers: roads, buildings, water, parks\",\n parseOsmLayers,\n OSM_LAYERS,\n )\n .option(\"--output <path>\", \"Write GeoJSON to a file\")\n .option(\"--json\", \"Print the raw maps response as JSON\")\n .action(\n withErrorHandler(async (options: OsmAreaOptions) => {\n const response = await callZeroMaps(\n \"osm/download\",\n osmAreaPayload(options),\n );\n if (options.output) {\n await writeOsmGeoJson(options.output, response);\n }\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n if (options.output) {\n renderOsmFileResponse(\n \"OSM download completed\",\n response,\n options.output,\n );\n return;\n }\n renderMapsResponse(\"OSM download completed\", response);\n }),\n );\n\nconst osmRenderCommand = new Command()\n .name(\"render\")\n .description(\"Render OpenStreetMap vector features to PNG\")\n .option(\n \"--bbox <west,south,east,north>\",\n \"Bounding box in WGS84 coordinates\",\n parseBBox,\n )\n .option(\n \"--center <lat,lng>\",\n \"Center point in WGS84 coordinates\",\n parseLatLng,\n )\n .option(\n \"--radius <meters>\",\n \"Radius in meters when using --center\",\n parsePositiveInteger,\n )\n .option(\n \"--layers <layers>\",\n \"Comma-separated layers: roads, buildings, water, parks\",\n parseOsmLayers,\n OSM_LAYERS,\n )\n .option(\n \"--width <px>\",\n \"PNG width in pixels, from 320 to 2048\",\n (value) => {\n return parseIntegerInRange(value, 320, 2_048);\n },\n 1_536,\n )\n .option(\n \"--height <px>\",\n \"PNG height in pixels, from 240 to 2048\",\n (value) => {\n return parseIntegerInRange(value, 240, 2_048);\n },\n 1_024,\n )\n .option(\n \"--style <style>\",\n \"Render style: standard or guide\",\n parseOsmStyle,\n \"standard\",\n )\n .option(\"--title <text>\", \"Optional title drawn onto the PNG\")\n .option(\n \"--marker <lat,lng[,label]>\",\n \"Marker to draw; repeat for multiple markers\",\n collectOsmMarker,\n [],\n )\n .requiredOption(\"--output <path>\", \"Write PNG to a file\")\n .option(\"--json\", \"Print the raw maps response as JSON\")\n .action(\n withErrorHandler(async (options: OsmRenderOptions) => {\n const response = await callZeroMaps(\"osm/render\", {\n ...osmAreaPayload(options),\n width: options.width,\n height: options.height,\n style: options.style,\n title: options.title,\n markers: options.marker,\n });\n await writeOsmPng(options.output, response);\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n renderOsmFileResponse(\"OSM render completed\", response, options.output);\n }),\n );\n\nconst osmCommand = new Command()\n .name(\"osm\")\n .description(\"Download and render OpenStreetMap data\")\n .addCommand(osmDownloadCommand)\n .addCommand(osmRenderCommand);\n\nconst placesCommand = new Command()\n .name(\"places\")\n .description(\"Search places and fetch place details\")\n .addCommand(placesSearchCommand)\n .addCommand(placesDetailsCommand);\n\nexport const zeroMapsCommand = new Command()\n .name(\"maps\")\n .description(\"Use managed zero maps services\")\n .addCommand(geocodeCommand)\n .addCommand(reverseGeocodeCommand)\n .addCommand(directionsCommand)\n .addCommand(placesCommand)\n .addCommand(osmCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Geocode address: zero maps geocode --address \"1 Infinite Loop, Cupertino\" --json\n Get route: zero maps directions --origin \"SFO\" --destination \"Mountain View\" --mode driving --json\n Search places: zero maps places search --query \"coffee near Union Square SF\" --limit 5 --json\n Enterprise search: zero maps places search --query \"restaurants in SoMa\" --fields enterprise --json\n Place details: zero maps places details --place-id <id> --fields essentials --json\n Enterprise details: zero maps places details --place-id <id> --fields enterprise --json\n Download OSM data: zero maps osm download --bbox -122.43,37.76,-122.40,37.79 --output map.geojson\n Render OSM PNG: zero maps osm render --center 37.7749,-122.4194 --radius 1200 --output map.png\n\nNotes:\n - Authenticates via ZERO_TOKEN (requires maps:read capability) or a CLI token\n - Google Maps and OpenStreetMap calls and credit billing happen on the vm0 API server\n - Use --fields essentials for place details unless paid fields are required`,\n );\n"],"mappings":"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","names":[]}
|
|
@@ -13,14 +13,12 @@ import {
|
|
|
13
13
|
recallZeroMemory,
|
|
14
14
|
searchZeroMemory,
|
|
15
15
|
updateZeroMemory
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-XVW5RA46.js";
|
|
17
17
|
import "./chunk-LTDQISD7.js";
|
|
18
18
|
import {
|
|
19
|
+
source_default,
|
|
19
20
|
withErrorHandler
|
|
20
|
-
} from "./chunk-
|
|
21
|
-
import {
|
|
22
|
-
source_default
|
|
23
|
-
} from "./chunk-JUTUEPIR.js";
|
|
21
|
+
} from "./chunk-CYF7PHDS.js";
|
|
24
22
|
import "./chunk-LRHXR7JT.js";
|
|
25
23
|
import {
|
|
26
24
|
Command
|
|
@@ -637,4 +635,4 @@ var zeroMemoryCommand = new Command().name("memory").description("Manage, recall
|
|
|
637
635
|
export {
|
|
638
636
|
zeroMemoryCommand
|
|
639
637
|
};
|
|
640
|
-
//# sourceMappingURL=memory-
|
|
638
|
+
//# sourceMappingURL=memory-KRW4WNNT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/zero/memory/index.ts","../src/commands/zero/memory/context.ts","../src/commands/zero/memory/format.ts","../src/commands/zero/memory/lifecycle.ts","../src/commands/zero/memory/recall.ts","../src/commands/zero/memory/search.ts"],"sourcesContent":["import { Command } from \"commander\";\n\nimport { contextCommand } from \"./context\";\nimport {\n createCommand,\n documentsCommand,\n forgetCommand,\n forgetPromptCommand,\n forgottenCommand,\n historyCommand,\n listCommand,\n updateCommand,\n} from \"./lifecycle\";\nimport { recallCommand } from \"./recall\";\nimport { searchCommand } from \"./search\";\n\nexport const zeroMemoryCommand = new Command()\n .name(\"memory\")\n .description(\"Manage, recall, and search structured memory\")\n .addCommand(listCommand)\n .addCommand(createCommand)\n .addCommand(updateCommand)\n .addCommand(forgetCommand)\n .addCommand(forgetPromptCommand)\n .addCommand(historyCommand)\n .addCommand(documentsCommand)\n .addCommand(forgottenCommand)\n .addCommand(recallCommand)\n .addCommand(searchCommand)\n .addCommand(contextCommand);\n","import { Command } from \"commander\";\n\nimport { getZeroMemoryContext } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { printMemoryContext } from \"./format\";\n\ninterface ContextOptions {\n readonly json?: boolean;\n readonly limit?: string;\n readonly query?: string;\n}\n\nfunction parseLimit(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const parsed = Number(value);\n return Number.isInteger(parsed) ? parsed : undefined;\n}\n\nexport const contextCommand = new Command()\n .name(\"context\")\n .description(\"Print prompt-ready structured memory context\")\n .option(\"--query <query>\", \"Optional query to focus the context\")\n .option(\"--limit <limit>\", \"Maximum memories to include\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .addHelpText(\n \"after\",\n `\nExamples:\n General context: zero memory context\n Focus context: zero memory context --query \"security review\"\n Print JSON: zero memory context --query \"Acme\" --json\n\nNotes:\n - Uses the authenticated user's active organization\n - Requires relationship memory to be enabled for the organization\n - This command is read-only`,\n )\n .action(\n withErrorHandler(async (options: ContextOptions) => {\n const response = await getZeroMemoryContext({\n q: options.query,\n limit: parseLimit(options.limit),\n });\n\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n\n printMemoryContext(response);\n }),\n );\n","import chalk from \"chalk\";\nimport type {\n MemoryContextResponse,\n MemoryDocumentListResponse,\n MemoryForgetResponse,\n MemoryHistoryResponse,\n MemoryLifecycleMemory,\n MemoryListResponse,\n MemoryRecallItem,\n MemorySearchResponse,\n MemorySearchResult,\n MemoryTombstoneListResponse,\n} from \"@vm0/api-contracts/contracts/zero-memory\";\n\nfunction formatDate(value: string | null): string {\n if (!value) {\n return \"unknown\";\n }\n return new Intl.DateTimeFormat(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n }).format(new Date(value));\n}\n\nfunction formatKind(kind: MemoryRecallItem[\"kind\"]): string {\n switch (kind) {\n case \"key_fact\": {\n return \"key fact\";\n }\n case \"open_loop\": {\n return \"open loop\";\n }\n case \"preference\": {\n return \"preference\";\n }\n }\n}\n\nfunction sourceSummary(memory: MemoryRecallItem): string {\n const source = memory.sources[0];\n if (!source) {\n return \"no source\";\n }\n return `${source.provider}:${source.externalId} (${formatDate(source.occurredAt)})`;\n}\n\nexport function printMemoryRecall(memories: readonly MemoryRecallItem[]): void {\n if (memories.length === 0) {\n console.log(\"No memories found\");\n console.log(\n chalk.dim(\n ' Try a broader query, for example: zero memory recall \"pricing\"',\n ),\n );\n return;\n }\n\n console.log(chalk.green(`✓ Recalled ${memories.length} memories`));\n for (const memory of memories) {\n const entity = memory.relationship.entity.displayName;\n console.log(`- ${memory.text}`);\n console.log(\n chalk.dim(\n ` ${formatKind(memory.kind)} · ${entity} · confidence ${memory.confidence} · ${sourceSummary(memory)}`,\n ),\n );\n }\n}\n\nexport function printMemoryContext(response: MemoryContextResponse): void {\n if (response.context.length === 0) {\n console.log(\"No memory context found\");\n console.log(\n chalk.dim(' Try: zero memory context --query \"customer follow up\"'),\n );\n return;\n }\n\n console.log(response.context);\n}\n\nfunction compactText(value: string): string {\n const normalized = value.replace(/\\s+/g, \" \").trim();\n if (normalized.length <= 180) {\n return normalized;\n }\n return `${normalized.slice(0, 177)}...`;\n}\n\nfunction formatScore(score: number): string {\n return score.toFixed(2);\n}\n\nfunction printMemorySearchResult(result: MemorySearchResult): void {\n if (result.kind === \"memory\") {\n const memory = result.memory;\n const entity = memory.relationship.entity.displayName;\n console.log(`- ${memory.text}`);\n console.log(\n chalk.dim(\n ` memory · ${formatKind(memory.kind)} · ${entity} · score ${formatScore(result.score)} · ${sourceSummary(memory)}`,\n ),\n );\n return;\n }\n\n const title = result.title ?? result.externalId;\n const citationUrl = result.citation.url ? ` · ${result.citation.url}` : \"\";\n console.log(`- ${title}`);\n console.log(chalk.dim(` document · ${compactText(result.text)}`));\n console.log(\n chalk.dim(\n ` ${result.provider}:${result.externalId} · ${result.contextSpace.displayName} · score ${formatScore(result.score)}${citationUrl}`,\n ),\n );\n}\n\nexport function printMemorySearch(response: MemorySearchResponse): void {\n if (response.results.length === 0) {\n console.log(\"No memory or document results found\");\n console.log(\n chalk.dim(' Try: zero memory search \"security review\" --mode hybrid'),\n );\n return;\n }\n\n console.log(\n chalk.green(\n `✓ Found ${response.results.length} ${response.mode} memory results`,\n ),\n );\n for (const result of response.results) {\n printMemorySearchResult(result);\n }\n}\n\nfunction contextSpaceSummary(memory: MemoryLifecycleMemory): string {\n return memory.contextSpace\n ? `${memory.contextSpace.type}:${memory.contextSpace.key}`\n : \"no context space\";\n}\n\nfunction printLifecycleMemory(memory: MemoryLifecycleMemory): void {\n console.log(`- ${memory.text}`);\n console.log(\n chalk.dim(\n ` ${memory.kind} · ${memory.status} · confidence ${memory.confidence} · ${contextSpaceSummary(memory)} · ${memory.id}`,\n ),\n );\n}\n\nexport function printMemoryList(response: MemoryListResponse): void {\n if (response.memories.length === 0) {\n console.log(\"No lifecycle memories found\");\n console.log(\n chalk.dim(' Create one: zero memory create \"Remember this fact\"'),\n );\n return;\n }\n console.log(chalk.green(`✓ Found ${response.memories.length} memories`));\n for (const memory of response.memories) {\n printLifecycleMemory(memory);\n }\n}\n\nexport function printMemoryCreated(memory: MemoryLifecycleMemory): void {\n console.log(chalk.green(\"✓ Memory created\"));\n printLifecycleMemory(memory);\n console.log(chalk.dim(` History: zero memory history memory ${memory.id}`));\n}\n\nexport function printMemoryUpdated(memory: MemoryLifecycleMemory): void {\n console.log(chalk.green(\"✓ Memory updated\"));\n printLifecycleMemory(memory);\n console.log(chalk.dim(` History: zero memory history memory ${memory.id}`));\n}\n\nexport function printMemoryForget(response: MemoryForgetResponse): void {\n if (response.forgotten.length === 0) {\n console.log(\"No matching active memory or document found\");\n console.log(chalk.dim(' Try: zero memory search \"the thing to forget\"'));\n return;\n }\n console.log(\n chalk.green(`✓ Recorded ${response.forgotten.length} tombstones`),\n );\n for (const tombstone of response.forgotten) {\n console.log(\n `- ${tombstone.targetKind}: ${tombstone.targetTitle ?? tombstone.targetText ?? tombstone.fingerprint}`,\n );\n console.log(chalk.dim(` ${tombstone.fingerprint} · ${tombstone.id}`));\n }\n}\n\nexport function printMemoryHistory(response: MemoryHistoryResponse): void {\n if (response.history.length === 0) {\n console.log(\"No memory history found\");\n return;\n }\n console.log(chalk.green(`✓ Found ${response.history.length} versions`));\n for (const version of response.history) {\n console.log(\n `- v${version.version} ${version.operation ?? \"change\"} ${formatDate(\n version.createdAt,\n )}`,\n );\n console.log(\n chalk.dim(\n ` ${version.targetKind}:${version.targetId} · ${version.contentHash}`,\n ),\n );\n if (version.text ?? version.title) {\n console.log(\n chalk.dim(` ${compactText(version.text ?? version.title ?? \"\")}`),\n );\n }\n }\n}\n\nexport function printMemoryDocuments(\n response: MemoryDocumentListResponse,\n): void {\n if (response.documents.length === 0) {\n console.log(\"No memory documents found\");\n console.log(chalk.dim(\" Backfill GitHub or Notion memory sources first\"));\n return;\n }\n console.log(chalk.green(`✓ Found ${response.documents.length} documents`));\n for (const document of response.documents) {\n console.log(`- ${document.title ?? document.externalId}`);\n console.log(\n chalk.dim(\n ` ${document.provider}:${document.externalId} · ${document.status} · ${document.chunkCount} chunks · ${document.id}`,\n ),\n );\n }\n}\n\nexport function printMemoryForgotten(\n response: MemoryTombstoneListResponse,\n): void {\n if (response.forgotten.length === 0) {\n console.log(\"No forgotten memory records found\");\n return;\n }\n console.log(chalk.green(`✓ Found ${response.forgotten.length} tombstones`));\n for (const tombstone of response.forgotten) {\n console.log(\n `- ${tombstone.targetKind}: ${tombstone.targetTitle ?? tombstone.targetText ?? tombstone.fingerprint}`,\n );\n console.log(\n chalk.dim(` ${tombstone.fingerprint} · ${tombstone.createdAt}`),\n );\n }\n}\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport type {\n MemoryKind,\n MemorySourceProvider,\n} from \"@vm0/api-contracts/contracts/zero-memory\";\n\nimport {\n createZeroMemory,\n forgetZeroMemory,\n forgetZeroMemoryByPrompt,\n listZeroMemory,\n listZeroMemoryDocuments,\n listZeroMemoryForgotten,\n listZeroMemoryHistory,\n updateZeroMemory,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport {\n printMemoryCreated,\n printMemoryDocuments,\n printMemoryForget,\n printMemoryForgotten,\n printMemoryHistory,\n printMemoryList,\n printMemoryUpdated,\n} from \"./format\";\n\ninterface JsonOption {\n readonly json?: boolean;\n}\n\ninterface LimitOption {\n readonly limit?: string;\n}\n\ninterface ListOptions extends JsonOption, LimitOption {\n readonly status?: string;\n readonly kind?: string;\n}\n\ninterface CreateOptions extends JsonOption {\n readonly confidence?: string;\n readonly contextKey?: string;\n readonly contextName?: string;\n readonly contextType?: string;\n readonly entity?: string;\n readonly kind?: string;\n}\n\ninterface UpdateOptions extends JsonOption {\n readonly confidence?: string;\n readonly entity?: string;\n readonly kind?: string;\n readonly text?: string;\n}\n\ninterface ForgetOptions extends JsonOption {\n readonly reason?: string;\n readonly yes?: boolean;\n}\n\ninterface ForgetPromptOptions extends JsonOption, LimitOption {\n readonly provider?: string;\n readonly reason?: string;\n readonly target?: string;\n readonly yes?: boolean;\n}\n\ninterface DocumentsOptions extends JsonOption, LimitOption {\n readonly provider?: string;\n readonly status?: string;\n}\n\nconst MEMORY_KINDS = [\n \"key_fact\",\n \"preference\",\n \"open_loop\",\n \"role\",\n \"project\",\n \"communication_style\",\n \"recent_context\",\n] as const;\n\nconst CONTEXT_TYPES = [\n \"user\",\n \"org\",\n \"project\",\n \"repo\",\n \"customer\",\n \"agent\",\n \"workflow\",\n] as const;\n\nconst PROVIDERS = [\"gmail\", \"slack\", \"github\", \"notion\"] as const;\n\nfunction parseLimit(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const parsed = Number(value);\n return Number.isInteger(parsed) ? parsed : undefined;\n}\n\nfunction parseConfidence(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const parsed = Number(value);\n return Number.isInteger(parsed) ? parsed : undefined;\n}\n\nfunction parseMemoryKind(value: string | undefined): MemoryKind | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (\n MEMORY_KINDS.some((kind) => {\n return kind === value;\n })\n ) {\n return value as MemoryKind;\n }\n console.error(chalk.red(\"✗ Unsupported memory kind\"));\n console.error(chalk.dim(` Use one of: ${MEMORY_KINDS.join(\", \")}`));\n process.exit(1);\n}\n\nfunction parseProvider(\n value: string | undefined,\n): MemorySourceProvider | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (\n PROVIDERS.some((provider) => {\n return provider === value;\n })\n ) {\n return value as MemorySourceProvider;\n }\n console.error(chalk.red(\"✗ Unsupported memory provider\"));\n console.error(chalk.dim(` Use one of: ${PROVIDERS.join(\", \")}`));\n process.exit(1);\n}\n\nfunction parseContextSpace(options: CreateOptions) {\n if (!options.contextKey && !options.contextType && !options.contextName) {\n return undefined;\n }\n const type = options.contextType ?? \"user\";\n if (\n !CONTEXT_TYPES.some((contextType) => {\n return contextType === type;\n })\n ) {\n console.error(chalk.red(\"✗ Unsupported context space type\"));\n console.error(chalk.dim(` Use one of: ${CONTEXT_TYPES.join(\", \")}`));\n process.exit(1);\n }\n if (!options.contextKey || !options.contextName) {\n console.error(\n chalk.red(\"✗ --context-key and --context-name are required together\"),\n );\n console.error(\n chalk.dim(\n ' Example: zero memory create \"Fact\" --context-type repo --context-key github:vm0-ai/vm0 --context-name vm0-ai/vm0',\n ),\n );\n process.exit(1);\n }\n return {\n type: type as (typeof CONTEXT_TYPES)[number],\n key: options.contextKey,\n displayName: options.contextName,\n };\n}\n\nfunction requireYes(options: ForgetOptions | ForgetPromptOptions): void {\n if (options.yes) {\n return;\n }\n console.error(chalk.red(\"✗ --yes is required for forget operations\"));\n console.error(\n chalk.dim(\" This records tombstones and removes active search results\"),\n );\n process.exit(1);\n}\n\nexport const listCommand = new Command()\n .name(\"list\")\n .description(\"List lifecycle-aware structured memories\")\n .option(\"--status <status>\", \"Filter by active or archived\", \"active\")\n .option(\"--kind <kind>\", \"Filter by memory kind\")\n .option(\"--limit <limit>\", \"Maximum rows to return\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (options: ListOptions) => {\n const response = await listZeroMemory({\n status: options.status === \"archived\" ? \"archived\" : \"active\",\n kind: parseMemoryKind(options.kind),\n limit: parseLimit(options.limit),\n });\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n printMemoryList(response);\n }),\n );\n\nexport const createCommand = new Command()\n .name(\"create\")\n .description(\"Create a direct structured memory\")\n .argument(\"<text>\", \"Memory text\")\n .option(\"--kind <kind>\", \"Memory kind\", \"key_fact\")\n .option(\"--confidence <confidence>\", \"Confidence 0-100\")\n .option(\"--entity <name>\", \"Entity display name\")\n .option(\"--context-type <type>\", \"Context space type\")\n .option(\"--context-key <key>\", \"Context space key\")\n .option(\"--context-name <name>\", \"Context space display name\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (text: string, options: CreateOptions) => {\n const memory = await createZeroMemory({\n text,\n kind: parseMemoryKind(options.kind) ?? \"key_fact\",\n confidence: parseConfidence(options.confidence) ?? 90,\n contextSpace: parseContextSpace(options),\n entityDisplayName: options.entity,\n });\n if (options.json) {\n console.log(JSON.stringify({ memory }));\n return;\n }\n printMemoryCreated(memory);\n }),\n );\n\nexport const updateCommand = new Command()\n .name(\"update\")\n .description(\"Update a structured memory and create a new version\")\n .argument(\"<memory-id>\", \"Memory ID\")\n .option(\"--text <text>\", \"Replacement memory text\")\n .option(\"--kind <kind>\", \"Replacement memory kind\")\n .option(\"--confidence <confidence>\", \"Confidence 0-100\")\n .option(\"--entity <name>\", \"Entity display name\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (memoryId: string, options: UpdateOptions) => {\n const memory = await updateZeroMemory(memoryId, {\n text: options.text,\n kind: parseMemoryKind(options.kind),\n confidence: parseConfidence(options.confidence),\n entityDisplayName: options.entity,\n });\n if (options.json) {\n console.log(JSON.stringify({ memory }));\n return;\n }\n printMemoryUpdated(memory);\n }),\n );\n\nexport const forgetCommand = new Command()\n .name(\"forget\")\n .description(\"Forget one structured memory by ID\")\n .argument(\"<memory-id>\", \"Memory ID\")\n .option(\"--reason <reason>\", \"Reason to record in the tombstone\")\n .option(\"--yes\", \"Confirm the forget operation\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (memoryId: string, options: ForgetOptions) => {\n requireYes(options);\n const response = await forgetZeroMemory(memoryId, {\n reason: options.reason,\n });\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n printMemoryForget(response);\n }),\n );\n\nexport const forgetPromptCommand = new Command()\n .name(\"forget-prompt\")\n .description(\"Forget memories or documents matching a prompt\")\n .argument(\"<prompt>\", \"Forget prompt\")\n .option(\"--target <target>\", \"all, memories, or documents\", \"all\")\n .option(\"--provider <provider>\", \"Filter documents by provider\")\n .option(\"--limit <limit>\", \"Maximum matches to forget\")\n .option(\"--reason <reason>\", \"Reason to record in tombstones\")\n .option(\"--yes\", \"Confirm the forget operation\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (prompt: string, options: ForgetPromptOptions) => {\n requireYes(options);\n const targetKind =\n options.target === \"memories\" || options.target === \"documents\"\n ? options.target\n : \"all\";\n const response = await forgetZeroMemoryByPrompt({\n prompt,\n targetKind,\n provider: parseProvider(options.provider),\n limit: parseLimit(options.limit) ?? 5,\n reason: options.reason,\n });\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n printMemoryForget(response);\n }),\n );\n\nexport const historyCommand = new Command()\n .name(\"history\")\n .description(\"List memory, document, or profile version history\")\n .argument(\"<target-kind>\", \"memory, document, or profile\")\n .argument(\"<target-id>\", \"Target ID\")\n .option(\"--limit <limit>\", \"Maximum versions to return\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(\n async (\n targetKind: string,\n targetId: string,\n options: JsonOption & LimitOption,\n ) => {\n if (\n targetKind !== \"memory\" &&\n targetKind !== \"document\" &&\n targetKind !== \"profile\"\n ) {\n console.error(chalk.red(\"✗ Unsupported history target\"));\n console.error(chalk.dim(\" Use one of: memory, document, profile\"));\n process.exit(1);\n }\n const response = await listZeroMemoryHistory({\n targetKind,\n targetId,\n limit: parseLimit(options.limit),\n });\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n printMemoryHistory(response);\n },\n ),\n );\n\nexport const documentsCommand = new Command()\n .name(\"documents\")\n .description(\"List indexed memory documents\")\n .option(\"--status <status>\", \"active, archived, or deleted\", \"active\")\n .option(\"--provider <provider>\", \"Filter by provider\")\n .option(\"--limit <limit>\", \"Maximum rows to return\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (options: DocumentsOptions) => {\n const status =\n options.status === \"archived\" || options.status === \"deleted\"\n ? options.status\n : \"active\";\n const response = await listZeroMemoryDocuments({\n status,\n provider: parseProvider(options.provider),\n limit: parseLimit(options.limit),\n });\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n printMemoryDocuments(response);\n }),\n );\n\nexport const forgottenCommand = new Command()\n .name(\"forgotten\")\n .description(\"List forgotten memory tombstones\")\n .option(\"--limit <limit>\", \"Maximum rows to return\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (options: JsonOption & LimitOption) => {\n const response = await listZeroMemoryForgotten({\n limit: parseLimit(options.limit),\n });\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n printMemoryForgotten(response);\n }),\n );\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport type { MemoryRecallItemKind } from \"@vm0/api-contracts/contracts/zero-memory\";\n\nimport { recallZeroMemory } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { printMemoryRecall } from \"./format\";\n\ninterface RecallOptions {\n readonly json?: boolean;\n readonly kind?: string;\n readonly limit?: string;\n}\n\nconst MEMORY_KINDS = [\"key_fact\", \"preference\", \"open_loop\"] as const;\n\nfunction parseLimit(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const parsed = Number(value);\n return Number.isInteger(parsed) ? parsed : undefined;\n}\n\nfunction parseKind(\n value: string | undefined,\n): MemoryRecallItemKind | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (\n MEMORY_KINDS.some((kind) => {\n return kind === value;\n })\n ) {\n return value as MemoryRecallItemKind;\n }\n console.error(chalk.red(\"✗ Unsupported memory kind\"));\n console.error(chalk.dim(\" Use one of: key_fact, preference, open_loop\"));\n process.exit(1);\n}\n\nexport const recallCommand = new Command()\n .name(\"recall\")\n .description(\"Recall structured memory by query\")\n .argument(\"<query>\", \"Recall query\")\n .option(\"--kind <kind>\", \"Filter by key_fact, preference, or open_loop\")\n .option(\"--limit <limit>\", \"Maximum memories to return\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Recall memory: zero memory recall \"security review\"\n Filter kind: zero memory recall \"pricing\" --kind open_loop\n Print JSON: zero memory recall \"Acme\" --json\n\nNotes:\n - Uses the authenticated user's active organization\n - Requires relationship memory to be enabled for the organization\n - This command is read-only`,\n )\n .action(\n withErrorHandler(async (query: string, options: RecallOptions) => {\n const response = await recallZeroMemory({\n q: query,\n kind: parseKind(options.kind),\n limit: parseLimit(options.limit),\n });\n\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n\n printMemoryRecall(response.memories);\n }),\n );\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport type {\n MemorySearchMode,\n MemorySourceProvider,\n} from \"@vm0/api-contracts/contracts/zero-memory\";\n\nimport { searchZeroMemory } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { printMemorySearch } from \"./format\";\n\ninterface SearchOptions {\n readonly json?: boolean;\n readonly limit?: string;\n readonly mode?: string;\n readonly provider?: string;\n}\n\nconst MEMORY_SEARCH_MODES = [\"hybrid\", \"memories\", \"documents\"] as const;\nconst MEMORY_PROVIDERS = [\"gmail\", \"slack\", \"github\", \"notion\"] as const;\n\nfunction parseLimit(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const parsed = Number(value);\n return Number.isInteger(parsed) ? parsed : undefined;\n}\n\nfunction parseMode(value: string | undefined): MemorySearchMode | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (\n MEMORY_SEARCH_MODES.some((mode) => {\n return mode === value;\n })\n ) {\n return value as MemorySearchMode;\n }\n console.error(chalk.red(\"✗ Unsupported memory search mode\"));\n console.error(chalk.dim(\" Use one of: hybrid, memories, documents\"));\n process.exit(1);\n}\n\nfunction parseProvider(\n value: string | undefined,\n): MemorySourceProvider | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (\n MEMORY_PROVIDERS.some((provider) => {\n return provider === value;\n })\n ) {\n return value as MemorySourceProvider;\n }\n console.error(chalk.red(\"✗ Unsupported memory provider\"));\n console.error(chalk.dim(\" Use one of: gmail, slack, github, notion\"));\n process.exit(1);\n}\n\nexport const searchCommand = new Command()\n .name(\"search\")\n .description(\"Search structured memory and document chunks\")\n .argument(\"<query>\", \"Search query\")\n .option(\n \"--mode <mode>\",\n \"Search mode: hybrid, memories, or documents\",\n \"hybrid\",\n )\n .option(\"--provider <provider>\", \"Filter documents by source provider\")\n .option(\"--limit <limit>\", \"Maximum results to return\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Hybrid search: zero memory search \"security review\"\n Documents only: zero memory search \"retention policy\" --mode documents\n GitHub documents: zero memory search \"release plan\" --provider github\n Print JSON: zero memory search \"Acme\" --json\n\nNotes:\n - Uses the authenticated user's active organization\n - Requires relationship memory to be enabled for the organization\n - This command is read-only`,\n )\n .action(\n withErrorHandler(async (query: string, options: SearchOptions) => {\n const response = await searchZeroMemory({\n q: query,\n mode: parseMode(options.mode),\n provider: parseProvider(options.provider),\n limit: parseLimit(options.limit),\n });\n\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n\n printMemorySearch(response);\n }),\n );\n"],"mappings":"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","names":["parseLimit","MEMORY_KINDS","parseLimit","parseLimit","parseProvider"]}
|
|
1
|
+
{"version":3,"sources":["../src/commands/zero/memory/index.ts","../src/commands/zero/memory/context.ts","../src/commands/zero/memory/format.ts","../src/commands/zero/memory/lifecycle.ts","../src/commands/zero/memory/recall.ts","../src/commands/zero/memory/search.ts"],"sourcesContent":["import { Command } from \"commander\";\n\nimport { contextCommand } from \"./context\";\nimport {\n createCommand,\n documentsCommand,\n forgetCommand,\n forgetPromptCommand,\n forgottenCommand,\n historyCommand,\n listCommand,\n updateCommand,\n} from \"./lifecycle\";\nimport { recallCommand } from \"./recall\";\nimport { searchCommand } from \"./search\";\n\nexport const zeroMemoryCommand = new Command()\n .name(\"memory\")\n .description(\"Manage, recall, and search structured memory\")\n .addCommand(listCommand)\n .addCommand(createCommand)\n .addCommand(updateCommand)\n .addCommand(forgetCommand)\n .addCommand(forgetPromptCommand)\n .addCommand(historyCommand)\n .addCommand(documentsCommand)\n .addCommand(forgottenCommand)\n .addCommand(recallCommand)\n .addCommand(searchCommand)\n .addCommand(contextCommand);\n","import { Command } from \"commander\";\n\nimport { getZeroMemoryContext } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { printMemoryContext } from \"./format\";\n\ninterface ContextOptions {\n readonly json?: boolean;\n readonly limit?: string;\n readonly query?: string;\n}\n\nfunction parseLimit(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const parsed = Number(value);\n return Number.isInteger(parsed) ? parsed : undefined;\n}\n\nexport const contextCommand = new Command()\n .name(\"context\")\n .description(\"Print prompt-ready structured memory context\")\n .option(\"--query <query>\", \"Optional query to focus the context\")\n .option(\"--limit <limit>\", \"Maximum memories to include\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .addHelpText(\n \"after\",\n `\nExamples:\n General context: zero memory context\n Focus context: zero memory context --query \"security review\"\n Print JSON: zero memory context --query \"Acme\" --json\n\nNotes:\n - Uses the authenticated user's active organization\n - Requires relationship memory to be enabled for the organization\n - This command is read-only`,\n )\n .action(\n withErrorHandler(async (options: ContextOptions) => {\n const response = await getZeroMemoryContext({\n q: options.query,\n limit: parseLimit(options.limit),\n });\n\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n\n printMemoryContext(response);\n }),\n );\n","import chalk from \"chalk\";\nimport type {\n MemoryContextResponse,\n MemoryDocumentListResponse,\n MemoryForgetResponse,\n MemoryHistoryResponse,\n MemoryLifecycleMemory,\n MemoryListResponse,\n MemoryRecallItem,\n MemorySearchResponse,\n MemorySearchResult,\n MemoryTombstoneListResponse,\n} from \"@vm0/api-contracts/contracts/zero-memory\";\n\nfunction formatDate(value: string | null): string {\n if (!value) {\n return \"unknown\";\n }\n return new Intl.DateTimeFormat(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n }).format(new Date(value));\n}\n\nfunction formatKind(kind: MemoryRecallItem[\"kind\"]): string {\n switch (kind) {\n case \"key_fact\": {\n return \"key fact\";\n }\n case \"open_loop\": {\n return \"open loop\";\n }\n case \"preference\": {\n return \"preference\";\n }\n }\n}\n\nfunction sourceSummary(memory: MemoryRecallItem): string {\n const source = memory.sources[0];\n if (!source) {\n return \"no source\";\n }\n return `${source.provider}:${source.externalId} (${formatDate(source.occurredAt)})`;\n}\n\nexport function printMemoryRecall(memories: readonly MemoryRecallItem[]): void {\n if (memories.length === 0) {\n console.log(\"No memories found\");\n console.log(\n chalk.dim(\n ' Try a broader query, for example: zero memory recall \"pricing\"',\n ),\n );\n return;\n }\n\n console.log(chalk.green(`✓ Recalled ${memories.length} memories`));\n for (const memory of memories) {\n const entity = memory.relationship.entity.displayName;\n console.log(`- ${memory.text}`);\n console.log(\n chalk.dim(\n ` ${formatKind(memory.kind)} · ${entity} · confidence ${memory.confidence} · ${sourceSummary(memory)}`,\n ),\n );\n }\n}\n\nexport function printMemoryContext(response: MemoryContextResponse): void {\n if (response.context.length === 0) {\n console.log(\"No memory context found\");\n console.log(\n chalk.dim(' Try: zero memory context --query \"customer follow up\"'),\n );\n return;\n }\n\n console.log(response.context);\n}\n\nfunction compactText(value: string): string {\n const normalized = value.replace(/\\s+/g, \" \").trim();\n if (normalized.length <= 180) {\n return normalized;\n }\n return `${normalized.slice(0, 177)}...`;\n}\n\nfunction formatScore(score: number): string {\n return score.toFixed(2);\n}\n\nfunction printMemorySearchResult(result: MemorySearchResult): void {\n if (result.kind === \"memory\") {\n const memory = result.memory;\n const entity = memory.relationship.entity.displayName;\n console.log(`- ${memory.text}`);\n console.log(\n chalk.dim(\n ` memory · ${formatKind(memory.kind)} · ${entity} · score ${formatScore(result.score)} · ${sourceSummary(memory)}`,\n ),\n );\n return;\n }\n\n const title = result.title ?? result.externalId;\n const citationUrl = result.citation.url ? ` · ${result.citation.url}` : \"\";\n console.log(`- ${title}`);\n console.log(chalk.dim(` document · ${compactText(result.text)}`));\n console.log(\n chalk.dim(\n ` ${result.provider}:${result.externalId} · ${result.contextSpace.displayName} · score ${formatScore(result.score)}${citationUrl}`,\n ),\n );\n}\n\nexport function printMemorySearch(response: MemorySearchResponse): void {\n if (response.results.length === 0) {\n console.log(\"No memory or document results found\");\n console.log(\n chalk.dim(' Try: zero memory search \"security review\" --mode hybrid'),\n );\n return;\n }\n\n console.log(\n chalk.green(\n `✓ Found ${response.results.length} ${response.mode} memory results`,\n ),\n );\n for (const result of response.results) {\n printMemorySearchResult(result);\n }\n}\n\nfunction contextSpaceSummary(memory: MemoryLifecycleMemory): string {\n return memory.contextSpace\n ? `${memory.contextSpace.type}:${memory.contextSpace.key}`\n : \"no context space\";\n}\n\nfunction printLifecycleMemory(memory: MemoryLifecycleMemory): void {\n console.log(`- ${memory.text}`);\n console.log(\n chalk.dim(\n ` ${memory.kind} · ${memory.status} · confidence ${memory.confidence} · ${contextSpaceSummary(memory)} · ${memory.id}`,\n ),\n );\n}\n\nexport function printMemoryList(response: MemoryListResponse): void {\n if (response.memories.length === 0) {\n console.log(\"No lifecycle memories found\");\n console.log(\n chalk.dim(' Create one: zero memory create \"Remember this fact\"'),\n );\n return;\n }\n console.log(chalk.green(`✓ Found ${response.memories.length} memories`));\n for (const memory of response.memories) {\n printLifecycleMemory(memory);\n }\n}\n\nexport function printMemoryCreated(memory: MemoryLifecycleMemory): void {\n console.log(chalk.green(\"✓ Memory created\"));\n printLifecycleMemory(memory);\n console.log(chalk.dim(` History: zero memory history memory ${memory.id}`));\n}\n\nexport function printMemoryUpdated(memory: MemoryLifecycleMemory): void {\n console.log(chalk.green(\"✓ Memory updated\"));\n printLifecycleMemory(memory);\n console.log(chalk.dim(` History: zero memory history memory ${memory.id}`));\n}\n\nexport function printMemoryForget(response: MemoryForgetResponse): void {\n if (response.forgotten.length === 0) {\n console.log(\"No matching active memory or document found\");\n console.log(chalk.dim(' Try: zero memory search \"the thing to forget\"'));\n return;\n }\n console.log(\n chalk.green(`✓ Recorded ${response.forgotten.length} tombstones`),\n );\n for (const tombstone of response.forgotten) {\n console.log(\n `- ${tombstone.targetKind}: ${tombstone.targetTitle ?? tombstone.targetText ?? tombstone.fingerprint}`,\n );\n console.log(chalk.dim(` ${tombstone.fingerprint} · ${tombstone.id}`));\n }\n}\n\nexport function printMemoryHistory(response: MemoryHistoryResponse): void {\n if (response.history.length === 0) {\n console.log(\"No memory history found\");\n return;\n }\n console.log(chalk.green(`✓ Found ${response.history.length} versions`));\n for (const version of response.history) {\n console.log(\n `- v${version.version} ${version.operation ?? \"change\"} ${formatDate(\n version.createdAt,\n )}`,\n );\n console.log(\n chalk.dim(\n ` ${version.targetKind}:${version.targetId} · ${version.contentHash}`,\n ),\n );\n if (version.text ?? version.title) {\n console.log(\n chalk.dim(` ${compactText(version.text ?? version.title ?? \"\")}`),\n );\n }\n }\n}\n\nexport function printMemoryDocuments(\n response: MemoryDocumentListResponse,\n): void {\n if (response.documents.length === 0) {\n console.log(\"No memory documents found\");\n console.log(chalk.dim(\" Backfill GitHub or Notion memory sources first\"));\n return;\n }\n console.log(chalk.green(`✓ Found ${response.documents.length} documents`));\n for (const document of response.documents) {\n console.log(`- ${document.title ?? document.externalId}`);\n console.log(\n chalk.dim(\n ` ${document.provider}:${document.externalId} · ${document.status} · ${document.chunkCount} chunks · ${document.id}`,\n ),\n );\n }\n}\n\nexport function printMemoryForgotten(\n response: MemoryTombstoneListResponse,\n): void {\n if (response.forgotten.length === 0) {\n console.log(\"No forgotten memory records found\");\n return;\n }\n console.log(chalk.green(`✓ Found ${response.forgotten.length} tombstones`));\n for (const tombstone of response.forgotten) {\n console.log(\n `- ${tombstone.targetKind}: ${tombstone.targetTitle ?? tombstone.targetText ?? tombstone.fingerprint}`,\n );\n console.log(\n chalk.dim(` ${tombstone.fingerprint} · ${tombstone.createdAt}`),\n );\n }\n}\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport type {\n MemoryKind,\n MemorySourceProvider,\n} from \"@vm0/api-contracts/contracts/zero-memory\";\n\nimport {\n createZeroMemory,\n forgetZeroMemory,\n forgetZeroMemoryByPrompt,\n listZeroMemory,\n listZeroMemoryDocuments,\n listZeroMemoryForgotten,\n listZeroMemoryHistory,\n updateZeroMemory,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport {\n printMemoryCreated,\n printMemoryDocuments,\n printMemoryForget,\n printMemoryForgotten,\n printMemoryHistory,\n printMemoryList,\n printMemoryUpdated,\n} from \"./format\";\n\ninterface JsonOption {\n readonly json?: boolean;\n}\n\ninterface LimitOption {\n readonly limit?: string;\n}\n\ninterface ListOptions extends JsonOption, LimitOption {\n readonly status?: string;\n readonly kind?: string;\n}\n\ninterface CreateOptions extends JsonOption {\n readonly confidence?: string;\n readonly contextKey?: string;\n readonly contextName?: string;\n readonly contextType?: string;\n readonly entity?: string;\n readonly kind?: string;\n}\n\ninterface UpdateOptions extends JsonOption {\n readonly confidence?: string;\n readonly entity?: string;\n readonly kind?: string;\n readonly text?: string;\n}\n\ninterface ForgetOptions extends JsonOption {\n readonly reason?: string;\n readonly yes?: boolean;\n}\n\ninterface ForgetPromptOptions extends JsonOption, LimitOption {\n readonly provider?: string;\n readonly reason?: string;\n readonly target?: string;\n readonly yes?: boolean;\n}\n\ninterface DocumentsOptions extends JsonOption, LimitOption {\n readonly provider?: string;\n readonly status?: string;\n}\n\nconst MEMORY_KINDS = [\n \"key_fact\",\n \"preference\",\n \"open_loop\",\n \"role\",\n \"project\",\n \"communication_style\",\n \"recent_context\",\n] as const;\n\nconst CONTEXT_TYPES = [\n \"user\",\n \"org\",\n \"project\",\n \"repo\",\n \"customer\",\n \"agent\",\n \"workflow\",\n] as const;\n\nconst PROVIDERS = [\"gmail\", \"slack\", \"github\", \"notion\"] as const;\n\nfunction parseLimit(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const parsed = Number(value);\n return Number.isInteger(parsed) ? parsed : undefined;\n}\n\nfunction parseConfidence(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const parsed = Number(value);\n return Number.isInteger(parsed) ? parsed : undefined;\n}\n\nfunction parseMemoryKind(value: string | undefined): MemoryKind | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (\n MEMORY_KINDS.some((kind) => {\n return kind === value;\n })\n ) {\n return value as MemoryKind;\n }\n console.error(chalk.red(\"✗ Unsupported memory kind\"));\n console.error(chalk.dim(` Use one of: ${MEMORY_KINDS.join(\", \")}`));\n process.exit(1);\n}\n\nfunction parseProvider(\n value: string | undefined,\n): MemorySourceProvider | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (\n PROVIDERS.some((provider) => {\n return provider === value;\n })\n ) {\n return value as MemorySourceProvider;\n }\n console.error(chalk.red(\"✗ Unsupported memory provider\"));\n console.error(chalk.dim(` Use one of: ${PROVIDERS.join(\", \")}`));\n process.exit(1);\n}\n\nfunction parseContextSpace(options: CreateOptions) {\n if (!options.contextKey && !options.contextType && !options.contextName) {\n return undefined;\n }\n const type = options.contextType ?? \"user\";\n if (\n !CONTEXT_TYPES.some((contextType) => {\n return contextType === type;\n })\n ) {\n console.error(chalk.red(\"✗ Unsupported context space type\"));\n console.error(chalk.dim(` Use one of: ${CONTEXT_TYPES.join(\", \")}`));\n process.exit(1);\n }\n if (!options.contextKey || !options.contextName) {\n console.error(\n chalk.red(\"✗ --context-key and --context-name are required together\"),\n );\n console.error(\n chalk.dim(\n ' Example: zero memory create \"Fact\" --context-type repo --context-key github:vm0-ai/vm0 --context-name vm0-ai/vm0',\n ),\n );\n process.exit(1);\n }\n return {\n type: type as (typeof CONTEXT_TYPES)[number],\n key: options.contextKey,\n displayName: options.contextName,\n };\n}\n\nfunction requireYes(options: ForgetOptions | ForgetPromptOptions): void {\n if (options.yes) {\n return;\n }\n console.error(chalk.red(\"✗ --yes is required for forget operations\"));\n console.error(\n chalk.dim(\" This records tombstones and removes active search results\"),\n );\n process.exit(1);\n}\n\nexport const listCommand = new Command()\n .name(\"list\")\n .description(\"List lifecycle-aware structured memories\")\n .option(\"--status <status>\", \"Filter by active or archived\", \"active\")\n .option(\"--kind <kind>\", \"Filter by memory kind\")\n .option(\"--limit <limit>\", \"Maximum rows to return\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (options: ListOptions) => {\n const response = await listZeroMemory({\n status: options.status === \"archived\" ? \"archived\" : \"active\",\n kind: parseMemoryKind(options.kind),\n limit: parseLimit(options.limit),\n });\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n printMemoryList(response);\n }),\n );\n\nexport const createCommand = new Command()\n .name(\"create\")\n .description(\"Create a direct structured memory\")\n .argument(\"<text>\", \"Memory text\")\n .option(\"--kind <kind>\", \"Memory kind\", \"key_fact\")\n .option(\"--confidence <confidence>\", \"Confidence 0-100\")\n .option(\"--entity <name>\", \"Entity display name\")\n .option(\"--context-type <type>\", \"Context space type\")\n .option(\"--context-key <key>\", \"Context space key\")\n .option(\"--context-name <name>\", \"Context space display name\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (text: string, options: CreateOptions) => {\n const memory = await createZeroMemory({\n text,\n kind: parseMemoryKind(options.kind) ?? \"key_fact\",\n confidence: parseConfidence(options.confidence) ?? 90,\n contextSpace: parseContextSpace(options),\n entityDisplayName: options.entity,\n });\n if (options.json) {\n console.log(JSON.stringify({ memory }));\n return;\n }\n printMemoryCreated(memory);\n }),\n );\n\nexport const updateCommand = new Command()\n .name(\"update\")\n .description(\"Update a structured memory and create a new version\")\n .argument(\"<memory-id>\", \"Memory ID\")\n .option(\"--text <text>\", \"Replacement memory text\")\n .option(\"--kind <kind>\", \"Replacement memory kind\")\n .option(\"--confidence <confidence>\", \"Confidence 0-100\")\n .option(\"--entity <name>\", \"Entity display name\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (memoryId: string, options: UpdateOptions) => {\n const memory = await updateZeroMemory(memoryId, {\n text: options.text,\n kind: parseMemoryKind(options.kind),\n confidence: parseConfidence(options.confidence),\n entityDisplayName: options.entity,\n });\n if (options.json) {\n console.log(JSON.stringify({ memory }));\n return;\n }\n printMemoryUpdated(memory);\n }),\n );\n\nexport const forgetCommand = new Command()\n .name(\"forget\")\n .description(\"Forget one structured memory by ID\")\n .argument(\"<memory-id>\", \"Memory ID\")\n .option(\"--reason <reason>\", \"Reason to record in the tombstone\")\n .option(\"--yes\", \"Confirm the forget operation\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (memoryId: string, options: ForgetOptions) => {\n requireYes(options);\n const response = await forgetZeroMemory(memoryId, {\n reason: options.reason,\n });\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n printMemoryForget(response);\n }),\n );\n\nexport const forgetPromptCommand = new Command()\n .name(\"forget-prompt\")\n .description(\"Forget memories or documents matching a prompt\")\n .argument(\"<prompt>\", \"Forget prompt\")\n .option(\"--target <target>\", \"all, memories, or documents\", \"all\")\n .option(\"--provider <provider>\", \"Filter documents by provider\")\n .option(\"--limit <limit>\", \"Maximum matches to forget\")\n .option(\"--reason <reason>\", \"Reason to record in tombstones\")\n .option(\"--yes\", \"Confirm the forget operation\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (prompt: string, options: ForgetPromptOptions) => {\n requireYes(options);\n const targetKind =\n options.target === \"memories\" || options.target === \"documents\"\n ? options.target\n : \"all\";\n const response = await forgetZeroMemoryByPrompt({\n prompt,\n targetKind,\n provider: parseProvider(options.provider),\n limit: parseLimit(options.limit) ?? 5,\n reason: options.reason,\n });\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n printMemoryForget(response);\n }),\n );\n\nexport const historyCommand = new Command()\n .name(\"history\")\n .description(\"List memory, document, or profile version history\")\n .argument(\"<target-kind>\", \"memory, document, or profile\")\n .argument(\"<target-id>\", \"Target ID\")\n .option(\"--limit <limit>\", \"Maximum versions to return\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(\n async (\n targetKind: string,\n targetId: string,\n options: JsonOption & LimitOption,\n ) => {\n if (\n targetKind !== \"memory\" &&\n targetKind !== \"document\" &&\n targetKind !== \"profile\"\n ) {\n console.error(chalk.red(\"✗ Unsupported history target\"));\n console.error(chalk.dim(\" Use one of: memory, document, profile\"));\n process.exit(1);\n }\n const response = await listZeroMemoryHistory({\n targetKind,\n targetId,\n limit: parseLimit(options.limit),\n });\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n printMemoryHistory(response);\n },\n ),\n );\n\nexport const documentsCommand = new Command()\n .name(\"documents\")\n .description(\"List indexed memory documents\")\n .option(\"--status <status>\", \"active, archived, or deleted\", \"active\")\n .option(\"--provider <provider>\", \"Filter by provider\")\n .option(\"--limit <limit>\", \"Maximum rows to return\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (options: DocumentsOptions) => {\n const status =\n options.status === \"archived\" || options.status === \"deleted\"\n ? options.status\n : \"active\";\n const response = await listZeroMemoryDocuments({\n status,\n provider: parseProvider(options.provider),\n limit: parseLimit(options.limit),\n });\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n printMemoryDocuments(response);\n }),\n );\n\nexport const forgottenCommand = new Command()\n .name(\"forgotten\")\n .description(\"List forgotten memory tombstones\")\n .option(\"--limit <limit>\", \"Maximum rows to return\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (options: JsonOption & LimitOption) => {\n const response = await listZeroMemoryForgotten({\n limit: parseLimit(options.limit),\n });\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n printMemoryForgotten(response);\n }),\n );\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport type { MemoryRecallItemKind } from \"@vm0/api-contracts/contracts/zero-memory\";\n\nimport { recallZeroMemory } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { printMemoryRecall } from \"./format\";\n\ninterface RecallOptions {\n readonly json?: boolean;\n readonly kind?: string;\n readonly limit?: string;\n}\n\nconst MEMORY_KINDS = [\"key_fact\", \"preference\", \"open_loop\"] as const;\n\nfunction parseLimit(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const parsed = Number(value);\n return Number.isInteger(parsed) ? parsed : undefined;\n}\n\nfunction parseKind(\n value: string | undefined,\n): MemoryRecallItemKind | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (\n MEMORY_KINDS.some((kind) => {\n return kind === value;\n })\n ) {\n return value as MemoryRecallItemKind;\n }\n console.error(chalk.red(\"✗ Unsupported memory kind\"));\n console.error(chalk.dim(\" Use one of: key_fact, preference, open_loop\"));\n process.exit(1);\n}\n\nexport const recallCommand = new Command()\n .name(\"recall\")\n .description(\"Recall structured memory by query\")\n .argument(\"<query>\", \"Recall query\")\n .option(\"--kind <kind>\", \"Filter by key_fact, preference, or open_loop\")\n .option(\"--limit <limit>\", \"Maximum memories to return\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Recall memory: zero memory recall \"security review\"\n Filter kind: zero memory recall \"pricing\" --kind open_loop\n Print JSON: zero memory recall \"Acme\" --json\n\nNotes:\n - Uses the authenticated user's active organization\n - Requires relationship memory to be enabled for the organization\n - This command is read-only`,\n )\n .action(\n withErrorHandler(async (query: string, options: RecallOptions) => {\n const response = await recallZeroMemory({\n q: query,\n kind: parseKind(options.kind),\n limit: parseLimit(options.limit),\n });\n\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n\n printMemoryRecall(response.memories);\n }),\n );\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport type {\n MemorySearchMode,\n MemorySourceProvider,\n} from \"@vm0/api-contracts/contracts/zero-memory\";\n\nimport { searchZeroMemory } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { printMemorySearch } from \"./format\";\n\ninterface SearchOptions {\n readonly json?: boolean;\n readonly limit?: string;\n readonly mode?: string;\n readonly provider?: string;\n}\n\nconst MEMORY_SEARCH_MODES = [\"hybrid\", \"memories\", \"documents\"] as const;\nconst MEMORY_PROVIDERS = [\"gmail\", \"slack\", \"github\", \"notion\"] as const;\n\nfunction parseLimit(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const parsed = Number(value);\n return Number.isInteger(parsed) ? parsed : undefined;\n}\n\nfunction parseMode(value: string | undefined): MemorySearchMode | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (\n MEMORY_SEARCH_MODES.some((mode) => {\n return mode === value;\n })\n ) {\n return value as MemorySearchMode;\n }\n console.error(chalk.red(\"✗ Unsupported memory search mode\"));\n console.error(chalk.dim(\" Use one of: hybrid, memories, documents\"));\n process.exit(1);\n}\n\nfunction parseProvider(\n value: string | undefined,\n): MemorySourceProvider | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (\n MEMORY_PROVIDERS.some((provider) => {\n return provider === value;\n })\n ) {\n return value as MemorySourceProvider;\n }\n console.error(chalk.red(\"✗ Unsupported memory provider\"));\n console.error(chalk.dim(\" Use one of: gmail, slack, github, notion\"));\n process.exit(1);\n}\n\nexport const searchCommand = new Command()\n .name(\"search\")\n .description(\"Search structured memory and document chunks\")\n .argument(\"<query>\", \"Search query\")\n .option(\n \"--mode <mode>\",\n \"Search mode: hybrid, memories, or documents\",\n \"hybrid\",\n )\n .option(\"--provider <provider>\", \"Filter documents by source provider\")\n .option(\"--limit <limit>\", \"Maximum results to return\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Hybrid search: zero memory search \"security review\"\n Documents only: zero memory search \"retention policy\" --mode documents\n GitHub documents: zero memory search \"release plan\" --provider github\n Print JSON: zero memory search \"Acme\" --json\n\nNotes:\n - Uses the authenticated user's active organization\n - Requires relationship memory to be enabled for the organization\n - This command is read-only`,\n )\n .action(\n withErrorHandler(async (query: string, options: SearchOptions) => {\n const response = await searchZeroMemory({\n q: query,\n mode: parseMode(options.mode),\n provider: parseProvider(options.provider),\n limit: parseLimit(options.limit),\n });\n\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n\n printMemorySearch(response);\n }),\n );\n"],"mappings":"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","names":["parseLimit","MEMORY_KINDS","parseLimit","parseLimit","parseProvider"]}
|
|
@@ -5,18 +5,16 @@ import {
|
|
|
5
5
|
formatModelPolicyStatus,
|
|
6
6
|
formatModelProviderRoute,
|
|
7
7
|
getModelProviderRouteKind
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-6TXV6T6G.js";
|
|
9
9
|
import {
|
|
10
|
-
getVm0ModelPriceTier,
|
|
11
10
|
listZeroModelPolicies
|
|
12
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-XVW5RA46.js";
|
|
13
12
|
import "./chunk-LTDQISD7.js";
|
|
14
13
|
import {
|
|
14
|
+
getVm0ModelPriceTier,
|
|
15
|
+
source_default,
|
|
15
16
|
withErrorHandler
|
|
16
|
-
} from "./chunk-
|
|
17
|
-
import {
|
|
18
|
-
source_default
|
|
19
|
-
} from "./chunk-JUTUEPIR.js";
|
|
17
|
+
} from "./chunk-CYF7PHDS.js";
|
|
20
18
|
import "./chunk-LRHXR7JT.js";
|
|
21
19
|
import {
|
|
22
20
|
Command
|
|
@@ -90,4 +88,4 @@ export {
|
|
|
90
88
|
switchCommand,
|
|
91
89
|
zeroModelCommand
|
|
92
90
|
};
|
|
93
|
-
//# sourceMappingURL=model-
|
|
91
|
+
//# sourceMappingURL=model-N4ZX7CTX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/zero/model/index.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getVm0ModelPriceTier } from \"@vm0/api-contracts/contracts/model-providers\";\nimport { listZeroModelPolicies } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport {\n formatModelPolicyStatus,\n formatModelProviderRoute,\n getModelProviderRouteKind,\n} from \"../../../lib/domain/model-policy-display\";\n\nfunction formatPriceTier(tier: string | undefined): string {\n return tier ?? \"unknown\";\n}\n\nfunction getCurrentIntegration(): string | null {\n const prompt = process.env.VM0_APPEND_SYSTEM_PROMPT;\n if (!prompt) {\n return null;\n }\n\n const match = prompt.match(/You are currently running inside:\\s*([^\\n]+)/i);\n return match?.[1]?.trim().toLowerCase() ?? null;\n}\n\nexport function getModelSwitchGuidance(integration = getCurrentIntegration()) {\n const normalizedIntegration = integration?.toLowerCase();\n\n if (normalizedIntegration === \"web\") {\n return \"Switch models from the model selector next to the input box in the web chat.\";\n }\n\n if (normalizedIntegration === \"telegram\") {\n return \"Use /model in Telegram to switch models.\";\n }\n\n return \"Open https://app.vm0.ai and switch models from the model selector next to the input box.\";\n}\n\nconst listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List models allowed by the current organization\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroModelPolicies();\n\n if (result.policies.length === 0) {\n console.log(chalk.dim(\"No models are allowed for this organization\"));\n return;\n }\n\n console.log(chalk.bold(\"Allowed Models:\"));\n console.log();\n\n for (const policy of result.policies) {\n const defaultMarker = policy.isDefault ? chalk.dim(\" (default)\") : \"\";\n console.log(\n ` - ${policy.modelLabel} ${chalk.dim(`(${policy.model})`)}${defaultMarker}`,\n );\n console.log(` provider: ${formatModelProviderRoute(policy)}`);\n\n if (getModelProviderRouteKind(policy) === \"built-in\") {\n console.log(\n ` price tier: ${formatPriceTier(getVm0ModelPriceTier(policy.model))}`,\n );\n }\n\n const status = formatModelPolicyStatus(policy);\n if (status) {\n console.log(chalk.yellow(` status: ${status}`));\n }\n }\n\n console.log();\n console.log(\n chalk.dim(\n \"Use `zero model-provider set --help` to see how to switch each model between built-in and BYOK.\",\n ),\n );\n }),\n );\n\nexport const switchCommand = new Command()\n .name(\"switch\")\n .description(\"Show how to switch models in the current environment\")\n .action(() => {\n console.log(getModelSwitchGuidance());\n });\n\nexport const zeroModelCommand = new Command()\n .name(\"model\")\n .description(\"List available models and model-switching guidance\")\n .addCommand(listCommand)\n .addCommand(switchCommand);\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/commands/zero/model/index.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getVm0ModelPriceTier } from \"@vm0/api-contracts/contracts/model-providers\";\nimport { listZeroModelPolicies } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport {\n formatModelPolicyStatus,\n formatModelProviderRoute,\n getModelProviderRouteKind,\n} from \"../../../lib/domain/model-policy-display\";\n\nfunction formatPriceTier(tier: string | undefined): string {\n return tier ?? \"unknown\";\n}\n\nfunction getCurrentIntegration(): string | null {\n const prompt = process.env.VM0_APPEND_SYSTEM_PROMPT;\n if (!prompt) {\n return null;\n }\n\n const match = prompt.match(/You are currently running inside:\\s*([^\\n]+)/i);\n return match?.[1]?.trim().toLowerCase() ?? null;\n}\n\nexport function getModelSwitchGuidance(integration = getCurrentIntegration()) {\n const normalizedIntegration = integration?.toLowerCase();\n\n if (normalizedIntegration === \"web\") {\n return \"Switch models from the model selector next to the input box in the web chat.\";\n }\n\n if (normalizedIntegration === \"telegram\") {\n return \"Use /model in Telegram to switch models.\";\n }\n\n return \"Open https://app.vm0.ai and switch models from the model selector next to the input box.\";\n}\n\nconst listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List models allowed by the current organization\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroModelPolicies();\n\n if (result.policies.length === 0) {\n console.log(chalk.dim(\"No models are allowed for this organization\"));\n return;\n }\n\n console.log(chalk.bold(\"Allowed Models:\"));\n console.log();\n\n for (const policy of result.policies) {\n const defaultMarker = policy.isDefault ? chalk.dim(\" (default)\") : \"\";\n console.log(\n ` - ${policy.modelLabel} ${chalk.dim(`(${policy.model})`)}${defaultMarker}`,\n );\n console.log(` provider: ${formatModelProviderRoute(policy)}`);\n\n if (getModelProviderRouteKind(policy) === \"built-in\") {\n console.log(\n ` price tier: ${formatPriceTier(getVm0ModelPriceTier(policy.model))}`,\n );\n }\n\n const status = formatModelPolicyStatus(policy);\n if (status) {\n console.log(chalk.yellow(` status: ${status}`));\n }\n }\n\n console.log();\n console.log(\n chalk.dim(\n \"Use `zero model-provider set --help` to see how to switch each model between built-in and BYOK.\",\n ),\n );\n }),\n );\n\nexport const switchCommand = new Command()\n .name(\"switch\")\n .description(\"Show how to switch models in the current environment\")\n .action(() => {\n console.log(getModelSwitchGuidance());\n });\n\nexport const zeroModelCommand = new Command()\n .name(\"model\")\n .description(\"List available models and model-switching guidance\")\n .addCommand(listCommand)\n .addCommand(switchCommand);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAWA,SAAS,gBAAgB,MAAkC;AACzD,SAAO,QAAQ;AACjB;AAEA,SAAS,wBAAuC;AAC9C,QAAM,SAAS,QAAQ,IAAI;AAC3B,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,OAAO,MAAM,+CAA+C;AAC1E,SAAO,QAAQ,CAAC,GAAG,KAAK,EAAE,YAAY,KAAK;AAC7C;AAEO,SAAS,uBAAuB,cAAc,sBAAsB,GAAG;AAC5E,QAAM,wBAAwB,aAAa,YAAY;AAEvD,MAAI,0BAA0B,OAAO;AACnC,WAAO;AAAA,EACT;AAEA,MAAI,0BAA0B,YAAY;AACxC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,IAAM,cAAc,IAAI,QAAQ,EAC7B,KAAK,MAAM,EACX,MAAM,IAAI,EACV,YAAY,iDAAiD,EAC7D;AAAA,EACC,iBAAiB,YAAY;AAC3B,UAAM,SAAS,MAAM,sBAAsB;AAE3C,QAAI,OAAO,SAAS,WAAW,GAAG;AAChC,cAAQ,IAAI,eAAM,IAAI,6CAA6C,CAAC;AACpE;AAAA,IACF;AAEA,YAAQ,IAAI,eAAM,KAAK,iBAAiB,CAAC;AACzC,YAAQ,IAAI;AAEZ,eAAW,UAAU,OAAO,UAAU;AACpC,YAAM,gBAAgB,OAAO,YAAY,eAAM,IAAI,YAAY,IAAI;AACnE,cAAQ;AAAA,QACN,OAAO,OAAO,UAAU,IAAI,eAAM,IAAI,IAAI,OAAO,KAAK,GAAG,CAAC,GAAG,aAAa;AAAA,MAC5E;AACA,cAAQ,IAAI,iBAAiB,yBAAyB,MAAM,CAAC,EAAE;AAE/D,UAAI,0BAA0B,MAAM,MAAM,YAAY;AACpD,gBAAQ;AAAA,UACN,mBAAmB,gBAAgB,qBAAqB,OAAO,KAAK,CAAC,CAAC;AAAA,QACxE;AAAA,MACF;AAEA,YAAM,SAAS,wBAAwB,MAAM;AAC7C,UAAI,QAAQ;AACV,gBAAQ,IAAI,eAAM,OAAO,eAAe,MAAM,EAAE,CAAC;AAAA,MACnD;AAAA,IACF;AAEA,YAAQ,IAAI;AACZ,YAAQ;AAAA,MACN,eAAM;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEK,IAAM,gBAAgB,IAAI,QAAQ,EACtC,KAAK,QAAQ,EACb,YAAY,sDAAsD,EAClE,OAAO,MAAM;AACZ,UAAQ,IAAI,uBAAuB,CAAC;AACtC,CAAC;AAEI,IAAM,mBAAmB,IAAI,QAAQ,EACzC,KAAK,OAAO,EACZ,YAAY,oDAAoD,EAChE,WAAW,WAAW,EACtB,WAAW,aAAa;","names":[]}
|