@vm0/cli 9.244.5 → 9.244.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/{agent-NQVS6VCY.js → agent-2TIFNP32.js} +7 -7
  2. package/{banking-U5U2G6QH.js → banking-UR7XJI3L.js} +3 -3
  3. package/{chat-BGF7IB3O.js → chat-5N4C3FDV.js} +4 -4
  4. package/{chunk-UEGRDQR3.js → chunk-26BGLMA3.js} +4 -32
  5. package/chunk-26BGLMA3.js.map +1 -0
  6. package/{chunk-ZMTKJ4VW.js → chunk-5QJVQEHO.js} +69 -6
  7. package/chunk-5QJVQEHO.js.map +1 -0
  8. package/{chunk-SBH7L4UT.js → chunk-7KSTVBNN.js} +4 -4
  9. package/{chunk-624QMD56.js → chunk-BIJC6U3G.js} +2 -2
  10. package/{chunk-KS62N6VR.js → chunk-E32I3TNQ.js} +26 -129
  11. package/chunk-E32I3TNQ.js.map +1 -0
  12. package/{chunk-4V373IPM.js → chunk-JWDLLCI3.js} +2 -2
  13. package/{chunk-PBFD5MP4.js → chunk-M6GLCPCJ.js} +3 -3
  14. package/{chunk-VUUGKMER.js → chunk-NR6ANGRK.js} +41 -245
  15. package/chunk-NR6ANGRK.js.map +1 -0
  16. package/{chunk-NOUED6XP.js → chunk-QCG2H3VD.js} +2 -2
  17. package/{chunk-MKPBFN7W.js → chunk-STMJYQTH.js} +2 -2
  18. package/chunk-ZUSDQG2O.js +50 -0
  19. package/chunk-ZUSDQG2O.js.map +1 -0
  20. package/{computer-use-F4VFLO6X.js → computer-use-3WUKJYHK.js} +3 -3
  21. package/{connector-SWU3H7YL.js → connector-PDEOFNTE.js} +9 -21
  22. package/connector-PDEOFNTE.js.map +1 -0
  23. package/{credit-ZMXGA5CQ.js → credit-ET4RS32X.js} +4 -4
  24. package/{developer-support-IOTX3JWR.js → developer-support-3DJEJT2A.js} +3 -3
  25. package/{doctor-DTMFWDXL.js → doctor-F7OWYXXH.js} +3 -3
  26. package/{generate-IQUCOIYW.js → generate-4GKWSL6P.js} +4 -4
  27. package/{github-AJT3E56L.js → github-S5HFK2IC.js} +3 -3
  28. package/{goal-NCK5T57P.js → goal-ISJWIT2Q.js} +3 -3
  29. package/{host-BRKGWZLP.js → host-T52XQ2SZ.js} +4 -5
  30. package/{host-BRKGWZLP.js.map → host-T52XQ2SZ.js.map} +1 -1
  31. package/index.js +12 -2040
  32. package/index.js.map +1 -1
  33. package/{logs-WZVT4BS7.js → logs-D4IL5OLR.js} +8 -8
  34. package/{mail-QS4HABXH.js → mail-JXO3GW72.js} +5 -5
  35. package/{maps-3X6V34JQ.js → maps-T3YFBRLP.js} +3 -3
  36. package/{model-6ETRDASM.js → model-GJRTV6E5.js} +4 -4
  37. package/{model-provider-XEKOLWZY.js → model-provider-T4VN4HNU.js} +4 -4
  38. package/{org-DKGPME4L.js → org-GNNU77Y5.js} +3 -3
  39. package/package.json +1 -1
  40. package/{phone-6455TFON.js → phone-EQ4R2GBO.js} +3 -3
  41. package/{preference-2XMANS52.js → preference-3FHEQPKG.js} +3 -3
  42. package/{chunk-CK6ATTWW.js → resource-EOO2VATC.js} +133 -4
  43. package/resource-EOO2VATC.js.map +1 -0
  44. package/{scrape-CIP2FZED.js → scrape-TZCFJY6X.js} +3 -3
  45. package/{search-GCQ55FYS.js → search-RXP4DMUC.js} +7 -7
  46. package/{secret-NVLEVYXQ.js → secret-S4ZCVY2X.js} +3 -3
  47. package/{slack-EGYW76W2.js → slack-7YJFUJE6.js} +3 -3
  48. package/{teams-2D63XX2R.js → teams-45MMUROF.js} +3 -3
  49. package/{telegram-GQARG3MD.js → telegram-7ZCSI24W.js} +3 -3
  50. package/{variable-WMKLX7TF.js → variable-O33TDP4J.js} +3 -3
  51. package/{video-NAUNUYGP.js → video-D5LSABFJ.js} +2 -2
  52. package/{web-7U3YS3KP.js → web-JW7AH2UT.js} +3 -3
  53. package/{web-search-EIO3GVKH.js → web-search-MHFQFZS6.js} +3 -3
  54. package/{whoami-QZJAGTDW.js → whoami-5DJLOQUZ.js} +5 -5
  55. package/{workflow-RMJIYOUB.js → workflow-TXG3RBJR.js} +3 -3
  56. package/zero.js +35 -35
  57. package/chunk-CK6ATTWW.js.map +0 -1
  58. package/chunk-KS62N6VR.js.map +0 -1
  59. package/chunk-T6TZMDU6.js +0 -132
  60. package/chunk-T6TZMDU6.js.map +0 -1
  61. package/chunk-UEGRDQR3.js.map +0 -1
  62. package/chunk-VUUGKMER.js.map +0 -1
  63. package/chunk-ZMTKJ4VW.js.map +0 -1
  64. package/connector-SWU3H7YL.js.map +0 -1
  65. package/resource-MIFLTTK6.js +0 -143
  66. package/resource-MIFLTTK6.js.map +0 -1
  67. /package/{agent-NQVS6VCY.js.map → agent-2TIFNP32.js.map} +0 -0
  68. /package/{banking-U5U2G6QH.js.map → banking-UR7XJI3L.js.map} +0 -0
  69. /package/{chat-BGF7IB3O.js.map → chat-5N4C3FDV.js.map} +0 -0
  70. /package/{chunk-SBH7L4UT.js.map → chunk-7KSTVBNN.js.map} +0 -0
  71. /package/{chunk-624QMD56.js.map → chunk-BIJC6U3G.js.map} +0 -0
  72. /package/{chunk-4V373IPM.js.map → chunk-JWDLLCI3.js.map} +0 -0
  73. /package/{chunk-PBFD5MP4.js.map → chunk-M6GLCPCJ.js.map} +0 -0
  74. /package/{chunk-NOUED6XP.js.map → chunk-QCG2H3VD.js.map} +0 -0
  75. /package/{chunk-MKPBFN7W.js.map → chunk-STMJYQTH.js.map} +0 -0
  76. /package/{computer-use-F4VFLO6X.js.map → computer-use-3WUKJYHK.js.map} +0 -0
  77. /package/{credit-ZMXGA5CQ.js.map → credit-ET4RS32X.js.map} +0 -0
  78. /package/{developer-support-IOTX3JWR.js.map → developer-support-3DJEJT2A.js.map} +0 -0
  79. /package/{doctor-DTMFWDXL.js.map → doctor-F7OWYXXH.js.map} +0 -0
  80. /package/{generate-IQUCOIYW.js.map → generate-4GKWSL6P.js.map} +0 -0
  81. /package/{github-AJT3E56L.js.map → github-S5HFK2IC.js.map} +0 -0
  82. /package/{goal-NCK5T57P.js.map → goal-ISJWIT2Q.js.map} +0 -0
  83. /package/{logs-WZVT4BS7.js.map → logs-D4IL5OLR.js.map} +0 -0
  84. /package/{mail-QS4HABXH.js.map → mail-JXO3GW72.js.map} +0 -0
  85. /package/{maps-3X6V34JQ.js.map → maps-T3YFBRLP.js.map} +0 -0
  86. /package/{model-6ETRDASM.js.map → model-GJRTV6E5.js.map} +0 -0
  87. /package/{model-provider-XEKOLWZY.js.map → model-provider-T4VN4HNU.js.map} +0 -0
  88. /package/{org-DKGPME4L.js.map → org-GNNU77Y5.js.map} +0 -0
  89. /package/{phone-6455TFON.js.map → phone-EQ4R2GBO.js.map} +0 -0
  90. /package/{preference-2XMANS52.js.map → preference-3FHEQPKG.js.map} +0 -0
  91. /package/{scrape-CIP2FZED.js.map → scrape-TZCFJY6X.js.map} +0 -0
  92. /package/{search-GCQ55FYS.js.map → search-RXP4DMUC.js.map} +0 -0
  93. /package/{secret-NVLEVYXQ.js.map → secret-S4ZCVY2X.js.map} +0 -0
  94. /package/{slack-EGYW76W2.js.map → slack-7YJFUJE6.js.map} +0 -0
  95. /package/{teams-2D63XX2R.js.map → teams-45MMUROF.js.map} +0 -0
  96. /package/{telegram-GQARG3MD.js.map → telegram-7ZCSI24W.js.map} +0 -0
  97. /package/{variable-WMKLX7TF.js.map → variable-O33TDP4J.js.map} +0 -0
  98. /package/{video-NAUNUYGP.js.map → video-D5LSABFJ.js.map} +0 -0
  99. /package/{web-7U3YS3KP.js.map → web-JW7AH2UT.js.map} +0 -0
  100. /package/{web-search-EIO3GVKH.js.map → web-search-MHFQFZS6.js.map} +0 -0
  101. /package/{whoami-QZJAGTDW.js.map → whoami-5DJLOQUZ.js.map} +0 -0
  102. /package/{workflow-RMJIYOUB.js.map → workflow-TXG3RBJR.js.map} +0 -0
@@ -7,17 +7,15 @@ import {
7
7
  formatIsoTimestamp,
8
8
  isSupportedFramework,
9
9
  isUUID,
10
- parseBoundedLogCount,
11
- parseSearchQuery,
12
10
  parseTime
13
- } from "./chunk-KS62N6VR.js";
11
+ } from "./chunk-E32I3TNQ.js";
14
12
  import {
15
13
  searchZeroLogs
16
- } from "./chunk-VUUGKMER.js";
14
+ } from "./chunk-NR6ANGRK.js";
17
15
  import {
18
16
  source_default,
19
17
  withErrorHandler
20
- } from "./chunk-UEGRDQR3.js";
18
+ } from "./chunk-26BGLMA3.js";
21
19
  import {
22
20
  Command
23
21
  } from "./chunk-B3W2RUBP.js";
@@ -25,6 +23,67 @@ import {
25
23
  init_esm_shims
26
24
  } from "./chunk-DIRAZ3YX.js";
27
25
 
26
+ // src/lib/utils/log-pagination.ts
27
+ init_esm_shims();
28
+ function parsePositiveLogCount(value, optionName) {
29
+ const trimmed = value.trim();
30
+ if (!/^0*[1-9]\d*$/.test(trimmed)) {
31
+ throw new Error(`Option ${optionName} must be a positive integer`);
32
+ }
33
+ const count = Number(trimmed);
34
+ if (!Number.isSafeInteger(count)) {
35
+ throw new Error(`Option ${optionName} must be a positive integer`);
36
+ }
37
+ return count;
38
+ }
39
+ function parseBoundedLogCount(value, optionName, min, max) {
40
+ const trimmed = value.trim();
41
+ if (!/^\d+$/.test(trimmed)) {
42
+ throw new Error(`${optionName} must be between ${min} and ${max}`);
43
+ }
44
+ const count = Number(trimmed);
45
+ if (!Number.isSafeInteger(count) || count < min || count > max) {
46
+ throw new Error(`${optionName} must be between ${min} and ${max}`);
47
+ }
48
+ return count;
49
+ }
50
+ async function collectLogItems(options) {
51
+ const collected = [];
52
+ const seenCursors = /* @__PURE__ */ new Set();
53
+ let cursor;
54
+ while (true) {
55
+ const requestLimit = options.targetCount === "all" ? options.pageLimit : Math.min(options.pageLimit, options.targetCount - collected.length);
56
+ const page = await options.fetchPage({
57
+ sinceTime: options.sinceTime,
58
+ cursor,
59
+ limit: requestLimit,
60
+ order: options.order
61
+ });
62
+ collected.push(...page.items);
63
+ if (options.targetCount !== "all" && collected.length >= options.targetCount) {
64
+ break;
65
+ }
66
+ const nextCursor = page.nextCursor ?? null;
67
+ if (!page.hasMore || !nextCursor || seenCursors.has(nextCursor)) {
68
+ break;
69
+ }
70
+ seenCursors.add(nextCursor);
71
+ cursor = nextCursor;
72
+ }
73
+ const entries = options.targetCount === "all" ? collected : collected.slice(0, options.targetCount);
74
+ return options.order === "desc" ? entries.reverse() : entries;
75
+ }
76
+
77
+ // src/lib/utils/search-query.ts
78
+ init_esm_shims();
79
+ function parseSearchQuery(value, label) {
80
+ const trimmed = value.trim();
81
+ if (!trimmed) {
82
+ throw new Error(`${label} cannot be empty.`);
83
+ }
84
+ return trimmed;
85
+ }
86
+
28
87
  // src/commands/zero/logs/search.ts
29
88
  init_esm_shims();
30
89
  var SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1e3;
@@ -171,7 +230,11 @@ Examples:
171
230
  );
172
231
 
173
232
  export {
233
+ parsePositiveLogCount,
234
+ parseBoundedLogCount,
235
+ collectLogItems,
236
+ parseSearchQuery,
174
237
  runLogsSearch,
175
238
  searchCommand
176
239
  };
177
- //# sourceMappingURL=chunk-ZMTKJ4VW.js.map
240
+ //# sourceMappingURL=chunk-5QJVQEHO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/utils/log-pagination.ts","../src/lib/utils/search-query.ts","../src/commands/zero/logs/search.ts"],"sourcesContent":["type LogOrder = \"asc\" | \"desc\";\n\ninterface CursorLogPageRequest {\n readonly sinceTime?: number;\n readonly cursor?: string;\n readonly limit: number;\n readonly order: LogOrder;\n}\n\ninterface CursorLogPage<T> {\n readonly items: readonly T[];\n readonly hasMore: boolean;\n readonly nextCursor?: string | null;\n}\n\ninterface CollectLogItemsOptions<T> {\n readonly fetchPage: (\n request: CursorLogPageRequest,\n ) => Promise<CursorLogPage<T>>;\n readonly sinceTime?: number;\n readonly targetCount: number | \"all\";\n readonly order: LogOrder;\n readonly pageLimit: number;\n}\n\nexport function parsePositiveLogCount(\n value: string,\n optionName: string,\n): number {\n const trimmed = value.trim();\n if (!/^0*[1-9]\\d*$/.test(trimmed)) {\n throw new Error(`Option ${optionName} must be a positive integer`);\n }\n\n const count = Number(trimmed);\n if (!Number.isSafeInteger(count)) {\n throw new Error(`Option ${optionName} must be a positive integer`);\n }\n\n return count;\n}\n\nexport function parseBoundedLogCount(\n value: string,\n optionName: string,\n min: number,\n max: number,\n): number {\n const trimmed = value.trim();\n if (!/^\\d+$/.test(trimmed)) {\n throw new Error(`${optionName} must be between ${min} and ${max}`);\n }\n\n const count = Number(trimmed);\n if (!Number.isSafeInteger(count) || count < min || count > max) {\n throw new Error(`${optionName} must be between ${min} and ${max}`);\n }\n\n return count;\n}\n\nexport async function collectLogItems<T>(\n options: CollectLogItemsOptions<T>,\n): Promise<T[]> {\n const collected: T[] = [];\n const seenCursors = new Set<string>();\n let cursor: string | undefined;\n\n while (true) {\n const requestLimit =\n options.targetCount === \"all\"\n ? options.pageLimit\n : Math.min(options.pageLimit, options.targetCount - collected.length);\n\n const page = await options.fetchPage({\n sinceTime: options.sinceTime,\n cursor,\n limit: requestLimit,\n order: options.order,\n });\n\n collected.push(...page.items);\n\n if (\n options.targetCount !== \"all\" &&\n collected.length >= options.targetCount\n ) {\n break;\n }\n\n const nextCursor = page.nextCursor ?? null;\n if (!page.hasMore || !nextCursor || seenCursors.has(nextCursor)) {\n break;\n }\n\n seenCursors.add(nextCursor);\n cursor = nextCursor;\n }\n\n const entries =\n options.targetCount === \"all\"\n ? collected\n : collected.slice(0, options.targetCount);\n\n return options.order === \"desc\" ? entries.reverse() : entries;\n}\n","export function parseSearchQuery(value: string, label: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error(`${label} cannot be empty.`);\n }\n return trimmed;\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n searchZeroLogs,\n type RunEvent,\n type LogsSearchResponse,\n} from \"../../../lib/api\";\nimport { parseTime } from \"../../../lib/utils/time-parser\";\nimport { formatIsoTimestamp } from \"../../../lib/utils/time-format\";\nimport { EventRenderer } from \"../../../lib/events/event-renderer\";\nimport { EventStreamNormalizer } from \"../../../lib/events/event-stream-normalizer\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { isUUID } from \"../../run/shared\";\nimport { parseBoundedLogCount } from \"../../../lib/utils/log-pagination\";\nimport { parseSearchQuery } from \"../../../lib/utils/search-query\";\nimport { isSupportedFramework } from \"@vm0/core/frameworks\";\n\nconst SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1000;\n\nexport interface LogsSearchCliOptions {\n afterContext?: string;\n beforeContext?: string;\n context?: string;\n agentId?: string;\n run?: string;\n since?: string;\n limit?: string;\n}\n\ninterface LogsSearchCommandOptions extends Omit<\n LogsSearchCliOptions,\n \"agentId\"\n> {\n agent?: string;\n}\n\nfunction supportedSearchFramework(\n framework: string | null | undefined,\n): string | undefined {\n const normalized = framework ?? undefined;\n return isSupportedFramework(normalized) ? normalized : undefined;\n}\n\nfunction renderSearchEvent(\n event: RunEvent,\n framework: string | null | undefined,\n renderer: EventRenderer,\n normalizer: EventStreamNormalizer,\n): void {\n const parsedEvents = normalizer.process(\n event.eventData,\n supportedSearchFramework(framework),\n new Date(event.createdAt),\n );\n for (const parsed of parsedEvents) {\n renderer.render(parsed);\n }\n}\n\nfunction flushSearchRenderer(\n renderer: EventRenderer,\n normalizer: EventStreamNormalizer,\n): void {\n for (const parsed of normalizer.flush()) {\n renderer.render(parsed);\n }\n renderer.flush();\n}\n\nfunction formatRunHeader(\n runId: string,\n agentName: string,\n timestamp: string,\n): string {\n const time = formatIsoTimestamp(timestamp);\n return `── Run ${runId} (${agentName}, ${time}) ──────────`;\n}\n\nfunction parseContextOptions(options: LogsSearchCliOptions): {\n before: number;\n after: number;\n} {\n const contextN =\n options.context !== undefined\n ? parseBoundedLogCount(options.context, \"--context\", 0, 10)\n : 0;\n const before =\n options.beforeContext !== undefined\n ? parseBoundedLogCount(options.beforeContext, \"--before-context\", 0, 10)\n : contextN;\n const after =\n options.afterContext !== undefined\n ? parseBoundedLogCount(options.afterContext, \"--after-context\", 0, 10)\n : contextN;\n\n return { before, after };\n}\n\nfunction parseLimit(value: string | undefined): number | undefined {\n if (value === undefined) return undefined;\n return parseBoundedLogCount(value, \"--limit\", 1, 50);\n}\n\nfunction renderResults(response: LogsSearchResponse): void {\n const grouped = new Map<\n string,\n { agentName: string; results: LogsSearchResponse[\"results\"] }\n >();\n for (const result of response.results) {\n const existing = grouped.get(result.runId);\n if (existing) {\n existing.results.push(result);\n } else {\n grouped.set(result.runId, {\n agentName: result.agentName,\n results: [result],\n });\n }\n }\n\n let isFirstGroup = true;\n for (const [runId, group] of grouped) {\n if (!isFirstGroup) {\n console.log();\n }\n isFirstGroup = false;\n\n const firstTimestamp = group.results[0]!.matchedEvent.createdAt;\n console.log(\n chalk.bold(formatRunHeader(runId, group.agentName, firstTimestamp)),\n );\n\n for (const result of group.results) {\n const renderer = new EventRenderer({\n showTimestamp: true,\n verbose: false,\n });\n const normalizer = new EventStreamNormalizer();\n\n for (const event of result.contextBefore) {\n renderSearchEvent(event, result.framework, renderer, normalizer);\n }\n renderSearchEvent(\n result.matchedEvent,\n result.framework,\n renderer,\n normalizer,\n );\n for (const event of result.contextAfter) {\n renderSearchEvent(event, result.framework, renderer, normalizer);\n }\n flushSearchRenderer(renderer, normalizer);\n }\n }\n\n if (response.hasMore) {\n console.log();\n console.log(\n chalk.dim(\n ` Showing first ${response.results.length} matches. Use --limit to see more.`,\n ),\n );\n }\n}\n\nexport async function runLogsSearch(\n keyword: string,\n options: LogsSearchCliOptions,\n): Promise<void> {\n const searchKeyword = parseSearchQuery(keyword, \"Keyword\");\n const { before, after } = parseContextOptions(options);\n\n if (options.agentId !== undefined && !isUUID(options.agentId)) {\n console.error(\n chalk.red(`✗ Invalid agent ID \"${options.agentId}\" — expected a UUID`),\n );\n console.error(chalk.dim(\" Run: zero logs list to find agent IDs\"));\n process.exit(1);\n }\n\n if (options.run !== undefined && !isUUID(options.run)) {\n console.error(\n chalk.red(`✗ Invalid run ID \"${options.run}\" — expected a UUID`),\n );\n console.error(chalk.dim(\" Run: zero logs list to find run IDs\"));\n process.exit(1);\n }\n\n const since =\n options.since !== undefined\n ? parseTime(options.since)\n : Date.now() - SEVEN_DAYS_MS;\n const limit = parseLimit(options.limit);\n\n const response = await searchZeroLogs({\n keyword: searchKeyword,\n agentId: options.agentId,\n runId: options.run,\n since,\n limit,\n before,\n after,\n });\n\n if (response.results.length === 0) {\n console.log(chalk.dim(\"No matches found\"));\n console.log(\n chalk.dim(\n \" Try a broader search with --since 30d or a different keyword\",\n ),\n );\n return;\n }\n\n renderResults(response);\n}\n\nexport const searchCommand = new Command()\n .name(\"search\")\n .description(\"Search agent events across runs\")\n .argument(\"<keyword>\", \"Search keyword\")\n .option(\"-A, --after-context <n>\", \"Show n events after each match\")\n .option(\"-B, --before-context <n>\", \"Show n events before each match\")\n .option(\"-C, --context <n>\", \"Show n events before and after each match\")\n .option(\"--agent <id>\", \"Filter by Zero agent ID\")\n .option(\"--run <id>\", \"Filter by specific run ID\")\n .option(\"--since <time>\", \"Search logs since (default: 7d)\")\n .option(\"--limit <n>\", \"Maximum number of matches (default: 20)\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero logs search \"error\"\n zero logs search \"timeout\" --agent 123e4567-e89b-12d3-a456-426614174000 -C 2\n zero logs search \"failed\" --since 30d --limit 50`,\n )\n .action(\n withErrorHandler(\n async (keyword: string, options: LogsSearchCommandOptions) => {\n const { agent, ...searchOptions } = options;\n await runLogsSearch(keyword, { ...searchOptions, agentId: agent });\n },\n ),\n );\n"],"mappings":"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","names":[]}
@@ -3,13 +3,13 @@ import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  resolveFirewallMetadataPolicies
6
- } from "./chunk-MKPBFN7W.js";
6
+ } from "./chunk-STMJYQTH.js";
7
7
  import {
8
8
  getZeroConnectorCatalogPermissions
9
- } from "./chunk-VUUGKMER.js";
9
+ } from "./chunk-NR6ANGRK.js";
10
10
  import {
11
11
  source_default
12
- } from "./chunk-UEGRDQR3.js";
12
+ } from "./chunk-26BGLMA3.js";
13
13
  import {
14
14
  init_esm_shims
15
15
  } from "./chunk-DIRAZ3YX.js";
@@ -89,4 +89,4 @@ export {
89
89
  policyIcon,
90
90
  loadConnectorPermissionInfos
91
91
  };
92
- //# sourceMappingURL=chunk-SBH7L4UT.js.map
92
+ //# sourceMappingURL=chunk-7KSTVBNN.js.map
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  getApiUrl
6
- } from "./chunk-UEGRDQR3.js";
6
+ } from "./chunk-26BGLMA3.js";
7
7
  import {
8
8
  init_esm_shims
9
9
  } from "./chunk-DIRAZ3YX.js";
@@ -39,4 +39,4 @@ export {
39
39
  toPlatformUrl,
40
40
  getPlatformOrigin
41
41
  };
42
- //# sourceMappingURL=chunk-624QMD56.js.map
42
+ //# sourceMappingURL=chunk-BIJC6U3G.js.map
@@ -12,7 +12,7 @@ import {
12
12
  getEvents,
13
13
  runnerGroupSchema,
14
14
  zeroAgentVisibilitySchema
15
- } from "./chunk-VUUGKMER.js";
15
+ } from "./chunk-NR6ANGRK.js";
16
16
  import {
17
17
  apiErrorSchema,
18
18
  external_exports,
@@ -24,7 +24,7 @@ import {
24
24
  supportedRunModelSchema,
25
25
  upsertModelProviderRequestSchema,
26
26
  upsertModelProviderResponseSchema
27
- } from "./chunk-UEGRDQR3.js";
27
+ } from "./chunk-26BGLMA3.js";
28
28
  import {
29
29
  __commonJS,
30
30
  __require,
@@ -7832,14 +7832,6 @@ function getFrameworkDisplayName(framework) {
7832
7832
  assertSupportedFramework(framework);
7833
7833
  return FRAMEWORK_DISPLAY_NAMES[framework];
7834
7834
  }
7835
- var FRAMEWORK_INSTRUCTIONS_FILENAMES = {
7836
- "claude-code": "CLAUDE.md",
7837
- codex: "AGENTS.md"
7838
- };
7839
- function getInstructionsFilename(framework) {
7840
- const validated = getValidatedFramework(framework);
7841
- return FRAMEWORK_INSTRUCTIONS_FILENAMES[validated];
7842
- }
7843
7835
 
7844
7836
  // src/lib/events/event-stream-normalizer.ts
7845
7837
  init_esm_shims();
@@ -10917,10 +10909,10 @@ var presentationImageAssetSchema = external_exports.object({
10917
10909
  source: external_exports.enum(["unsplash", "pexels"]),
10918
10910
  sourceName: external_exports.enum(["Unsplash", "Pexels"]),
10919
10911
  sourceUrl: external_exports.url(),
10920
- // Credit link for the source, rendered by the deck templates as the
10921
- // "/ <sourceName>" hyperlink. Named `unsplashUrl` for backward compatibility
10922
- // with the presentation runbook packages that whitelist this field; it now
10923
- // carries the source link for whichever provider resolved the image.
10912
+ // Provider-neutral link rendered for the source in image attribution.
10913
+ sourceAttributionUrl: external_exports.url(),
10914
+ // Deprecated compatibility field for published presentation and website
10915
+ // packages. It carries the same value as `sourceAttributionUrl`.
10924
10916
  unsplashUrl: external_exports.url(),
10925
10917
  photographerName: external_exports.string().min(1),
10926
10918
  photographerUrl: external_exports.url(),
@@ -13921,6 +13913,11 @@ var googleCalendar = {
13921
13913
 
13922
13914
  // ../../packages/connectors/src/connectors/google-contacts.ts
13923
13915
  init_esm_shims();
13916
+
13917
+ // ../../packages/connectors/src/feature-switch-key.ts
13918
+ init_esm_shims();
13919
+
13920
+ // ../../packages/connectors/src/connectors/google-contacts.ts
13924
13921
  var googleContacts = {
13925
13922
  "google-contacts": {
13926
13923
  label: "Google Contacts",
@@ -31626,9 +31623,6 @@ init_esm_shims();
31626
31623
 
31627
31624
  // ../../packages/core/src/storage-names.ts
31628
31625
  init_esm_shims();
31629
- function getInstructionsStorageName(agentName) {
31630
- return `agent-instructions@${agentName}`;
31631
- }
31632
31626
 
31633
31627
  // ../../packages/core/src/github-url.ts
31634
31628
  init_esm_shims();
@@ -31859,11 +31853,6 @@ var FEATURE_SWITCHES = {
31859
31853
  enabled: false,
31860
31854
  enabledOrgIdHashes: STAFF_ORG_ID_HASHES
31861
31855
  },
31862
- ["agentDetailWorkflowsTab" /* AgentDetailWorkflowsTab */]: {
31863
- maintainer: "ethan@vm0.ai",
31864
- description: "Show the Workflows tab on agent detail pages, scoped to workflows visible for that agent.",
31865
- enabled: false
31866
- },
31867
31856
  ["testOauthConnector" /* TestOauthConnector */]: {
31868
31857
  maintainer: "liangyou@vm0.ai",
31869
31858
  description: "Enable the test-oauth connector, a synthetic OAuth 2.0 provider used only for automated tests. Off in prod.",
@@ -31895,11 +31884,6 @@ var FEATURE_SWITCHES = {
31895
31884
  enabled: false,
31896
31885
  enabledOrgIdHashes: STAFF_ORG_ID_HASHES
31897
31886
  },
31898
- ["codexFrameworkForMinimax" /* CodexFrameworkForMinimax */]: {
31899
- maintainer: "lancy@vm0.ai",
31900
- description: "Expose the experimental MiniMax Codex framework provider route for Responses API compatibility testing.",
31901
- enabled: false
31902
- },
31903
31887
  ["codexFastMode" /* CodexFastMode */]: {
31904
31888
  maintainer: "lancy@vm0.ai",
31905
31889
  description: "Enable Codex fast mode for ChatGPT subscription GPT 5.5 and GPT 5.6 web chat runs.",
@@ -31957,11 +31941,6 @@ var FEATURE_SWITCHES = {
31957
31941
  enabled: false,
31958
31942
  enabledOrgIdHashes: STAFF_ORG_ID_HASHES
31959
31943
  },
31960
- ["mobileUnreadChatThreadShortcuts" /* MobileUnreadChatThreadShortcuts */]: {
31961
- maintainer: "ethan@vm0.ai",
31962
- description: "Show unread chat thread shortcuts between the mobile agent chat composer and suggested prompt cards.",
31963
- enabled: false
31964
- },
31965
31944
  ["chatThreadUnifiedSearch" /* ChatThreadUnifiedSearch */]: {
31966
31945
  maintainer: "ethan@vm0.ai",
31967
31946
  description: "Show chat thread title results from the local event-driven thread cache in the command-shift-a conversation picker.",
@@ -32031,11 +32010,6 @@ var FEATURE_SWITCHES = {
32031
32010
  enabled: false,
32032
32011
  enabledOrgIdHashes: STAFF_ORG_ID_HASHES
32033
32012
  },
32034
- ["artifactPreviewImage" /* ArtifactPreviewImage */]: {
32035
- maintainer: "bingjie@vm0.ai",
32036
- description: "Render a static preview image (screenshot) for HTML/website artifacts on deploy so the artifacts grid shows an image instead of a live iframe.",
32037
- enabled: true
32038
- },
32039
32013
  ["websiteTemplateV2" /* WebsiteTemplateV2 */]: {
32040
32014
  maintainer: "bingjie@vm0.ai",
32041
32015
  description: "Generate websites from refreshed self-contained template packages. When off, website generation uses the existing package versions.",
@@ -32056,15 +32030,11 @@ var FEATURE_SWITCHES = {
32056
32030
  enabledOrgIdHashes: STAFF_ORG_ID_HASHES,
32057
32031
  userOverridable: false
32058
32032
  },
32059
- ["connectorActionCallback" /* ConnectorActionCallback */]: {
32060
- maintainer: "ethan@vm0.ai",
32061
- description: "Resume a web chat with a callback prompt after a connector or permission action succeeds.",
32062
- enabled: true
32063
- },
32064
32033
  ["zeroMail" /* ZeroMail */]: {
32065
- maintainer: "yuma@vm0.ai",
32034
+ maintainer: "ethan@vm0.ai",
32066
32035
  description: "Enable persistent Gmail and Outlook draft cards created through the Zero Mail CLI.",
32067
- enabled: false
32036
+ enabled: false,
32037
+ enabledOrgIdHashes: STAFF_ORG_ID_HASHES
32068
32038
  },
32069
32039
  ["composerConnectorPermissions" /* ComposerConnectorPermissions */]: {
32070
32040
  maintainer: "ming@vm0.ai",
@@ -33314,7 +33284,7 @@ function formatToolResult(toolUse, result, verbose) {
33314
33284
  const remaining = resultLines.length - previewCount;
33315
33285
  if (remaining > 0) {
33316
33286
  lines.push(
33317
- ` ${source_default.dim(`\u2026 +${remaining} ${pluralize(remaining, "line", "lines")} (vm0 logs <runId> to see all)`)}`
33287
+ ` ${source_default.dim(`\u2026 +${remaining} ${pluralize(remaining, "line", "lines")} (zero logs <runId> to see all)`)}`
33318
33288
  );
33319
33289
  }
33320
33290
  }
@@ -33378,7 +33348,7 @@ function formatReadContent(resultText, verbose) {
33378
33348
  const remaining = totalLines - previewCount;
33379
33349
  if (remaining > 0) {
33380
33350
  lines.push(
33381
- ` ${source_default.dim(`\u2026 +${remaining} ${pluralize(remaining, "line", "lines")} (vm0 logs <runId> to see all)`)}`
33351
+ ` ${source_default.dim(`\u2026 +${remaining} ${pluralize(remaining, "line", "lines")} (zero logs <runId> to see all)`)}`
33382
33352
  );
33383
33353
  }
33384
33354
  }
@@ -33403,7 +33373,7 @@ function formatWritePreview(input, verbose) {
33403
33373
  const remaining = totalLines - previewCount;
33404
33374
  if (remaining > 0) {
33405
33375
  lines.push(
33406
- ` ${source_default.dim(`\u2026 +${remaining} ${pluralize(remaining, "line", "lines")} (vm0 logs <runId> to see all)`)}`
33376
+ ` ${source_default.dim(`\u2026 +${remaining} ${pluralize(remaining, "line", "lines")} (zero logs <runId> to see all)`)}`
33407
33377
  );
33408
33378
  }
33409
33379
  }
@@ -33436,7 +33406,7 @@ function formatEditDiff(input, verbose) {
33436
33406
  const remainingOld = oldLines.length - previewLimit;
33437
33407
  if (remainingOld > 0) {
33438
33408
  lines.push(
33439
- ` ${source_default.dim(`\u2026 +${remainingOld} ${pluralize(remainingOld, "line", "lines")} (vm0 logs <runId> to see all)`)}`
33409
+ ` ${source_default.dim(`\u2026 +${remainingOld} ${pluralize(remainingOld, "line", "lines")} (zero logs <runId> to see all)`)}`
33440
33410
  );
33441
33411
  }
33442
33412
  for (let i = 0; i < showNew; i++) {
@@ -33445,7 +33415,7 @@ function formatEditDiff(input, verbose) {
33445
33415
  const remainingNew = newLines.length - previewLimit;
33446
33416
  if (remainingNew > 0) {
33447
33417
  lines.push(
33448
- ` ${source_default.dim(`\u2026 +${remainingNew} ${pluralize(remainingNew, "line", "lines")} (vm0 logs <runId> to see all)`)}`
33418
+ ` ${source_default.dim(`\u2026 +${remainingNew} ${pluralize(remainingNew, "line", "lines")} (zero logs <runId> to see all)`)}`
33449
33419
  );
33450
33420
  }
33451
33421
  }
@@ -33475,7 +33445,7 @@ function formatTodoList(input) {
33475
33445
  const remaining = todos.length - MAX_FORMATTED_TODOS;
33476
33446
  if (remaining > 0) {
33477
33447
  lines.push(
33478
- ` ${source_default.dim(`\u2026 +${remaining} ${pluralize(remaining, "task", "tasks")} (vm0 logs <runId> to see all)`)}`
33448
+ ` ${source_default.dim(`\u2026 +${remaining} ${pluralize(remaining, "task", "tasks")} (zero logs <runId> to see all)`)}`
33479
33449
  );
33480
33450
  }
33481
33451
  return lines;
@@ -33537,7 +33507,7 @@ var EventRenderer = class _EventRenderer {
33537
33507
  if (info.sandboxId) {
33538
33508
  console.log(` Sandbox: ${source_default.dim(info.sandboxId)}`);
33539
33509
  }
33540
- console.log(source_default.dim(` (use "vm0 logs ${info.runId}" to view logs)`));
33510
+ console.log(source_default.dim(` (use "zero logs ${info.runId}" to view logs)`));
33541
33511
  console.log();
33542
33512
  }
33543
33513
  /**
@@ -33636,9 +33606,7 @@ var EventRenderer = class _EventRenderer {
33636
33606
  } else {
33637
33607
  console.error(` Error: ${source_default.red(errorText)}`);
33638
33608
  }
33639
- console.error(
33640
- source_default.dim(` (use "vm0 logs ${runId} --system" to view system logs)`)
33641
- );
33609
+ console.error(source_default.dim(` (use "zero logs ${runId}" to view agent logs)`));
33642
33610
  }
33643
33611
  /**
33644
33612
  * Handle tool_use event - buffer it for later grouping with result (when buffered)
@@ -34125,9 +34093,7 @@ function renderTerminalRunResult(runId, run) {
34125
34093
  }
34126
34094
  if (run.status === "timeout") {
34127
34095
  console.error(source_default.red("\n\u2717 Run timed out"));
34128
- console.error(
34129
- source_default.dim(` (use "vm0 logs ${runId} --system" to view system logs)`)
34130
- );
34096
+ console.error(source_default.dim(` (use "zero logs ${runId}" to view logs)`));
34131
34097
  return { succeeded: false, runId };
34132
34098
  }
34133
34099
  console.error(source_default.yellow("\n\u2717 Run cancelled"));
@@ -34214,7 +34180,7 @@ function showNextSteps(result) {
34214
34180
  const { runId, sessionId, checkpointId } = result;
34215
34181
  console.log();
34216
34182
  console.log(" View agent logs:");
34217
- console.log(source_default.cyan(` vm0 logs ${runId}`));
34183
+ console.log(source_default.cyan(` zero logs ${runId}`));
34218
34184
  if (sessionId) {
34219
34185
  console.log(" Continue with session (latest conversation and artifact):");
34220
34186
  console.log(
@@ -34315,73 +34281,8 @@ function isValidTimestamp(timestamp) {
34315
34281
  return Number.isSafeInteger(timestamp) && Math.abs(timestamp) <= MAX_DATE_TIMESTAMP_MS;
34316
34282
  }
34317
34283
 
34318
- // src/lib/utils/log-pagination.ts
34319
- init_esm_shims();
34320
- function parsePositiveLogCount(value, optionName) {
34321
- const trimmed = value.trim();
34322
- if (!/^0*[1-9]\d*$/.test(trimmed)) {
34323
- throw new Error(`Option ${optionName} must be a positive integer`);
34324
- }
34325
- const count = Number(trimmed);
34326
- if (!Number.isSafeInteger(count)) {
34327
- throw new Error(`Option ${optionName} must be a positive integer`);
34328
- }
34329
- return count;
34330
- }
34331
- function parseBoundedLogCount(value, optionName, min, max) {
34332
- const trimmed = value.trim();
34333
- if (!/^\d+$/.test(trimmed)) {
34334
- throw new Error(`${optionName} must be between ${min} and ${max}`);
34335
- }
34336
- const count = Number(trimmed);
34337
- if (!Number.isSafeInteger(count) || count < min || count > max) {
34338
- throw new Error(`${optionName} must be between ${min} and ${max}`);
34339
- }
34340
- return count;
34341
- }
34342
- async function collectLogItems(options) {
34343
- const collected = [];
34344
- const seenCursors = /* @__PURE__ */ new Set();
34345
- let cursor2;
34346
- while (true) {
34347
- const requestLimit = options.targetCount === "all" ? options.pageLimit : Math.min(options.pageLimit, options.targetCount - collected.length);
34348
- const page = await options.fetchPage({
34349
- sinceTime: options.sinceTime,
34350
- cursor: cursor2,
34351
- limit: requestLimit,
34352
- order: options.order
34353
- });
34354
- collected.push(...page.items);
34355
- if (options.targetCount !== "all" && collected.length >= options.targetCount) {
34356
- break;
34357
- }
34358
- const nextCursor = page.nextCursor ?? null;
34359
- if (!page.hasMore || !nextCursor || seenCursors.has(nextCursor)) {
34360
- break;
34361
- }
34362
- seenCursors.add(nextCursor);
34363
- cursor2 = nextCursor;
34364
- }
34365
- const entries = options.targetCount === "all" ? collected : collected.slice(0, options.targetCount);
34366
- return options.order === "desc" ? entries.reverse() : entries;
34367
- }
34368
-
34369
- // src/lib/utils/search-query.ts
34370
- init_esm_shims();
34371
- function parseSearchQuery(value, label) {
34372
- const trimmed = value.trim();
34373
- if (!trimmed) {
34374
- throw new Error(`${label} cannot be empty.`);
34375
- }
34376
- return trimmed;
34377
- }
34378
-
34379
34284
  export {
34380
- require_dist,
34381
- extractAndGroupVariables,
34382
- getInstructionsStorageName,
34383
34285
  isSupportedFramework,
34384
- getInstructionsFilename,
34385
34286
  EventStreamNormalizer,
34386
34287
  formatIsoTimestamp,
34387
34288
  EventRenderer,
@@ -34398,10 +34299,6 @@ export {
34398
34299
  renderRunCreated,
34399
34300
  pollEvents,
34400
34301
  showNextSteps,
34401
- parseTime,
34402
- parsePositiveLogCount,
34403
- parseBoundedLogCount,
34404
- collectLogItems,
34405
- parseSearchQuery
34302
+ parseTime
34406
34303
  };
34407
- //# sourceMappingURL=chunk-KS62N6VR.js.map
34304
+ //# sourceMappingURL=chunk-E32I3TNQ.js.map