@vm0/cli 9.241.6 → 9.241.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 (96) hide show
  1. package/{agent-HPPEYDSH.js → agent-GCB6KIVM.js} +5 -5
  2. package/{banking-IBS6B5UZ.js → banking-7ZHMYNY3.js} +3 -3
  3. package/{chat-2SVEFSLA.js → chat-3MPFZX2H.js} +4 -4
  4. package/{chunk-DB6PVT7C.js → chunk-74K2DHPM.js} +204 -188
  5. package/chunk-74K2DHPM.js.map +1 -0
  6. package/{chunk-ROSENSQ2.js → chunk-AMJAGFT7.js} +2 -2
  7. package/{chunk-23RODAOV.js → chunk-GGSXTOLM.js} +4 -4
  8. package/{chunk-VACABCPP.js → chunk-GND62LDP.js} +3 -3
  9. package/{chunk-2ZA5KNAG.js → chunk-HCSK2SC7.js} +2 -2
  10. package/{chunk-ZIQ4L34C.js → chunk-KNATFPLD.js} +337 -303
  11. package/chunk-KNATFPLD.js.map +1 -0
  12. package/{chunk-BYBGLFHQ.js → chunk-KYKDHMRW.js} +2 -2
  13. package/{chunk-NWTSZA2A.js → chunk-MG65P5SV.js} +4 -4
  14. package/{chunk-45KH4JE2.js → chunk-W6OJY7IX.js} +2 -2
  15. package/{chunk-JY5YIVIE.js → chunk-ZLWWY6LH.js} +2 -2
  16. package/{computer-use-C45D3FSA.js → computer-use-BD7QLU5Z.js} +4 -4
  17. package/computer-use-BD7QLU5Z.js.map +1 -0
  18. package/{connector-VUTYO53V.js → connector-T2LTMZ6Q.js} +5 -5
  19. package/{credit-WE5352F5.js → credit-DX6NIRUV.js} +4 -4
  20. package/{developer-support-SZIHHRF6.js → developer-support-SP56NSTB.js} +3 -3
  21. package/{doctor-MAZFTFTF.js → doctor-32RBQ2VC.js} +5 -5
  22. package/{generate-M5B3MIB7.js → generate-HFXHRZRA.js} +4 -4
  23. package/{github-22VLS2YV.js → github-QJ42LNUG.js} +3 -3
  24. package/{goal-TLKZJLMF.js → goal-XYHZLRA2.js} +3 -3
  25. package/{host-YS4PI5HB.js → host-ULVM7XLM.js} +3 -3
  26. package/index.js +12 -12
  27. package/{logs-XFCAXCU5.js → logs-NNNCGXPE.js} +5 -5
  28. package/{mail-42SH33XO.js → mail-YONA4DQI.js} +6 -6
  29. package/{mail-42SH33XO.js.map → mail-YONA4DQI.js.map} +1 -1
  30. package/{maps-YRAWBXWM.js → maps-2W6ALLHT.js} +3 -3
  31. package/{memory-GQUFHYXI.js → memory-XRUIDTIV.js} +3 -3
  32. package/{model-36HPMI4P.js → model-ELBPMGL4.js} +4 -4
  33. package/{model-provider-3HUV63XL.js → model-provider-OH23775G.js} +4 -4
  34. package/{org-DN7LVEJA.js → org-LDTBCSFG.js} +3 -3
  35. package/package.json +1 -1
  36. package/{phone-U4NCGPL6.js → phone-TDR66WMI.js} +3 -3
  37. package/{preference-72RK65NM.js → preference-GXRMWCAX.js} +3 -3
  38. package/{relationship-ILKTUM2O.js → relationship-2MRA6LEY.js} +3 -3
  39. package/{resource-HADVVJNJ.js → resource-P6VHQL27.js} +3 -3
  40. package/{scrape-DOYITCMV.js → scrape-O4S5ACVS.js} +3 -3
  41. package/{search-5XI3UZQV.js → search-KRBPB3Y2.js} +5 -5
  42. package/{secret-H42C5M3U.js → secret-MLMXT45G.js} +3 -3
  43. package/{slack-B23IZJBU.js → slack-5WOEG5Y2.js} +3 -3
  44. package/{teams-WWGRDM7Y.js → teams-3UB7KFWZ.js} +3 -3
  45. package/{telegram-Y2CZS5PN.js → telegram-RDXCA44O.js} +3 -3
  46. package/{variable-T2YNPIHY.js → variable-6WZ3JDYV.js} +3 -3
  47. package/{video-PTPDQBBW.js → video-ZHQAWCKQ.js} +2 -2
  48. package/{web-6LTQ2L35.js → web-GTXX2MVX.js} +3 -3
  49. package/{web-search-4T7Z3WG3.js → web-search-YUVFXIAT.js} +3 -3
  50. package/{whoami-HYA6S75A.js → whoami-KGJ37MWP.js} +5 -5
  51. package/{workflow-QH3OTTYL.js → workflow-GQFEGC5L.js} +3 -3
  52. package/zero.js +37 -37
  53. package/chunk-DB6PVT7C.js.map +0 -1
  54. package/chunk-ZIQ4L34C.js.map +0 -1
  55. package/computer-use-C45D3FSA.js.map +0 -1
  56. /package/{agent-HPPEYDSH.js.map → agent-GCB6KIVM.js.map} +0 -0
  57. /package/{banking-IBS6B5UZ.js.map → banking-7ZHMYNY3.js.map} +0 -0
  58. /package/{chat-2SVEFSLA.js.map → chat-3MPFZX2H.js.map} +0 -0
  59. /package/{chunk-ROSENSQ2.js.map → chunk-AMJAGFT7.js.map} +0 -0
  60. /package/{chunk-23RODAOV.js.map → chunk-GGSXTOLM.js.map} +0 -0
  61. /package/{chunk-VACABCPP.js.map → chunk-GND62LDP.js.map} +0 -0
  62. /package/{chunk-2ZA5KNAG.js.map → chunk-HCSK2SC7.js.map} +0 -0
  63. /package/{chunk-BYBGLFHQ.js.map → chunk-KYKDHMRW.js.map} +0 -0
  64. /package/{chunk-NWTSZA2A.js.map → chunk-MG65P5SV.js.map} +0 -0
  65. /package/{chunk-45KH4JE2.js.map → chunk-W6OJY7IX.js.map} +0 -0
  66. /package/{chunk-JY5YIVIE.js.map → chunk-ZLWWY6LH.js.map} +0 -0
  67. /package/{connector-VUTYO53V.js.map → connector-T2LTMZ6Q.js.map} +0 -0
  68. /package/{credit-WE5352F5.js.map → credit-DX6NIRUV.js.map} +0 -0
  69. /package/{developer-support-SZIHHRF6.js.map → developer-support-SP56NSTB.js.map} +0 -0
  70. /package/{doctor-MAZFTFTF.js.map → doctor-32RBQ2VC.js.map} +0 -0
  71. /package/{generate-M5B3MIB7.js.map → generate-HFXHRZRA.js.map} +0 -0
  72. /package/{github-22VLS2YV.js.map → github-QJ42LNUG.js.map} +0 -0
  73. /package/{goal-TLKZJLMF.js.map → goal-XYHZLRA2.js.map} +0 -0
  74. /package/{host-YS4PI5HB.js.map → host-ULVM7XLM.js.map} +0 -0
  75. /package/{logs-XFCAXCU5.js.map → logs-NNNCGXPE.js.map} +0 -0
  76. /package/{maps-YRAWBXWM.js.map → maps-2W6ALLHT.js.map} +0 -0
  77. /package/{memory-GQUFHYXI.js.map → memory-XRUIDTIV.js.map} +0 -0
  78. /package/{model-36HPMI4P.js.map → model-ELBPMGL4.js.map} +0 -0
  79. /package/{model-provider-3HUV63XL.js.map → model-provider-OH23775G.js.map} +0 -0
  80. /package/{org-DN7LVEJA.js.map → org-LDTBCSFG.js.map} +0 -0
  81. /package/{phone-U4NCGPL6.js.map → phone-TDR66WMI.js.map} +0 -0
  82. /package/{preference-72RK65NM.js.map → preference-GXRMWCAX.js.map} +0 -0
  83. /package/{relationship-ILKTUM2O.js.map → relationship-2MRA6LEY.js.map} +0 -0
  84. /package/{resource-HADVVJNJ.js.map → resource-P6VHQL27.js.map} +0 -0
  85. /package/{scrape-DOYITCMV.js.map → scrape-O4S5ACVS.js.map} +0 -0
  86. /package/{search-5XI3UZQV.js.map → search-KRBPB3Y2.js.map} +0 -0
  87. /package/{secret-H42C5M3U.js.map → secret-MLMXT45G.js.map} +0 -0
  88. /package/{slack-B23IZJBU.js.map → slack-5WOEG5Y2.js.map} +0 -0
  89. /package/{teams-WWGRDM7Y.js.map → teams-3UB7KFWZ.js.map} +0 -0
  90. /package/{telegram-Y2CZS5PN.js.map → telegram-RDXCA44O.js.map} +0 -0
  91. /package/{variable-T2YNPIHY.js.map → variable-6WZ3JDYV.js.map} +0 -0
  92. /package/{video-PTPDQBBW.js.map → video-ZHQAWCKQ.js.map} +0 -0
  93. /package/{web-6LTQ2L35.js.map → web-GTXX2MVX.js.map} +0 -0
  94. /package/{web-search-4T7Z3WG3.js.map → web-search-YUVFXIAT.js.map} +0 -0
  95. /package/{whoami-HYA6S75A.js.map → whoami-KGJ37MWP.js.map} +0 -0
  96. /package/{workflow-QH3OTTYL.js.map → workflow-GQFEGC5L.js.map} +0 -0
@@ -4,7 +4,7 @@ const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  getZeroAgent,
6
6
  getZeroAgentUserConnectors
7
- } from "./chunk-ZIQ4L34C.js";
7
+ } from "./chunk-KNATFPLD.js";
8
8
  import {
9
9
  init_esm_shims
10
10
  } from "./chunk-DIRAZ3YX.js";
@@ -265,4 +265,4 @@ export {
265
265
  resolveManualGrantAuthMethod,
266
266
  resolveAgentContext
267
267
  };
268
- //# sourceMappingURL=chunk-BYBGLFHQ.js.map
268
+ //# sourceMappingURL=chunk-KYKDHMRW.js.map
@@ -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-2ZA5KNAG.js";
6
+ } from "./chunk-HCSK2SC7.js";
7
7
  import {
8
8
  getZeroConnectorCatalogPermissions
9
- } from "./chunk-ZIQ4L34C.js";
9
+ } from "./chunk-KNATFPLD.js";
10
10
  import {
11
11
  source_default
12
- } from "./chunk-ROSENSQ2.js";
12
+ } from "./chunk-AMJAGFT7.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-NWTSZA2A.js.map
92
+ //# sourceMappingURL=chunk-MG65P5SV.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-ROSENSQ2.js";
6
+ } from "./chunk-AMJAGFT7.js";
7
7
  import {
8
8
  init_esm_shims
9
9
  } from "./chunk-DIRAZ3YX.js";
@@ -35,4 +35,4 @@ export {
35
35
  toPlatformUrl,
36
36
  getPlatformOrigin
37
37
  };
38
- //# sourceMappingURL=chunk-45KH4JE2.js.map
38
+ //# sourceMappingURL=chunk-W6OJY7IX.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
  MODEL_PROVIDER_TYPES
6
- } from "./chunk-ROSENSQ2.js";
6
+ } from "./chunk-AMJAGFT7.js";
7
7
  import {
8
8
  init_esm_shims
9
9
  } from "./chunk-DIRAZ3YX.js";
@@ -40,4 +40,4 @@ export {
40
40
  formatModelProviderRoute,
41
41
  formatModelPolicyStatus
42
42
  };
43
- //# sourceMappingURL=chunk-JY5YIVIE.js.map
43
+ //# sourceMappingURL=chunk-ZLWWY6LH.js.map
@@ -12,11 +12,11 @@ import {
12
12
  fetchComputerUseScreenshot,
13
13
  getComputerUseCommand,
14
14
  listComputerUseHosts
15
- } from "./chunk-ZIQ4L34C.js";
15
+ } from "./chunk-KNATFPLD.js";
16
16
  import {
17
17
  ApiRequestError,
18
18
  withErrorHandler
19
- } from "./chunk-ROSENSQ2.js";
19
+ } from "./chunk-AMJAGFT7.js";
20
20
  import "./chunk-LRHXR7JT.js";
21
21
  import {
22
22
  Command
@@ -470,7 +470,7 @@ async function waitForCommand(commandId, timeoutSeconds, formatter = commandOutp
470
470
  if (process.stdout.isTTY) {
471
471
  process.stdout.write(".");
472
472
  }
473
- await sleep(1e3);
473
+ await sleep(500);
474
474
  continue;
475
475
  }
476
476
  if (process.stdout.isTTY) {
@@ -969,4 +969,4 @@ export {
969
969
  formatComputerUseResultForConsole,
970
970
  zeroComputerUseCommand
971
971
  };
972
- //# sourceMappingURL=computer-use-C45D3FSA.js.map
972
+ //# sourceMappingURL=computer-use-BD7QLU5Z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/zero/computer-use/index.ts","../src/commands/zero/computer-use/output-artifacts.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { Command } from \"commander\";\nimport type {\n ComputerUseCommandResponse,\n ComputerUseReadCommandKind,\n ComputerUseWriteCommandKind,\n} from \"@vm0/api-contracts/contracts/zero-computer-use\";\nimport {\n COMPUTER_USE_FILESYSTEM_PLUGIN,\n COMPUTER_USE_MCP_LIST_TOOLS,\n COMPUTER_USE_MCP_PLUGIN,\n type ComputerUseMcpPluginCallBody,\n type ComputerUseFilesystemTool,\n type ComputerUsePluginCallBody,\n} from \"@vm0/api-contracts/contracts/zero-computer-use-plugins\";\nimport {\n ApiRequestError,\n createComputerUsePluginCommand,\n listComputerUseHosts,\n createComputerUseReadCommand,\n createComputerUseWriteCommand,\n fetchComputerUsePluginContent,\n fetchComputerUseScreenshot,\n getComputerUseCommand,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command/with-error-handler\";\nimport {\n computerUseOutputDir,\n writeComputerUseArtifact,\n} from \"./output-artifacts\";\n\ninterface ComputerUseCommandOptions {\n readonly timeout?: string;\n}\n\ninterface ComputerUseAppOptions extends ComputerUseCommandOptions {\n readonly app: string;\n}\n\ninterface ComputerUseClickOptions extends ComputerUseAppOptions {\n readonly snapshotId?: string;\n readonly element?: string;\n readonly elementIndex?: string;\n readonly x?: string;\n readonly y?: string;\n readonly button?: \"left\" | \"right\" | \"middle\";\n readonly clickCount?: string;\n}\n\ninterface ComputerUseScrollOptions extends ComputerUseAppOptions {\n readonly snapshotId?: string;\n readonly element?: string;\n readonly elementIndex?: string;\n readonly direction: \"up\" | \"down\" | \"left\" | \"right\";\n readonly pages?: string;\n}\n\ninterface ComputerUseSetValueOptions extends ComputerUseAppOptions {\n readonly snapshotId?: string;\n readonly element?: string;\n readonly elementIndex?: string;\n readonly value: string;\n}\n\ninterface ComputerUsePerformActionOptions extends ComputerUseAppOptions {\n readonly snapshotId?: string;\n readonly element?: string;\n readonly elementIndex?: string;\n readonly action: string;\n}\n\ninterface ComputerUseTypeTextOptions extends ComputerUseAppOptions {\n readonly snapshotId?: string;\n readonly text: string;\n}\n\ninterface ComputerUsePressKeyOptions extends ComputerUseAppOptions {\n readonly snapshotId?: string;\n readonly key: string;\n}\n\ninterface ComputerUsePluginOptions extends ComputerUseCommandOptions {\n readonly argumentsJson?: string;\n}\n\ninterface FilesystemPathOptions extends ComputerUsePluginOptions {\n readonly path: string;\n}\n\ninterface FilesystemReadTextOptions extends FilesystemPathOptions {\n readonly head?: string;\n readonly tail?: string;\n}\n\ninterface FilesystemReadMultipleFilesOptions extends ComputerUsePluginOptions {\n readonly path: readonly string[];\n}\n\ninterface FilesystemWriteFileOptions extends FilesystemPathOptions {\n readonly content: string;\n}\n\ninterface FilesystemEditFileOptions extends FilesystemPathOptions {\n readonly oldText?: string;\n readonly newText?: string;\n readonly dryRun?: boolean;\n}\n\ninterface FilesystemListDirectoryWithSizesOptions extends FilesystemPathOptions {\n readonly sortBy?: \"name\" | \"size\";\n}\n\ninterface FilesystemDirectoryTreeOptions extends FilesystemPathOptions {\n readonly excludePattern?: readonly string[];\n}\n\ninterface FilesystemMoveFileOptions extends ComputerUsePluginOptions {\n readonly source: string;\n readonly destination: string;\n}\n\ninterface FilesystemSearchFilesOptions extends FilesystemPathOptions {\n readonly pattern: string;\n readonly excludePattern?: readonly string[];\n}\n\nconst DATA_URL_PATTERN = /^data:([^;,]+);base64,(.*)$/s;\nconst COMPUTER_USE_REQUIRED_CAPABILITY_MESSAGE =\n \"Missing required capability: computer-use:write\";\nconst COMPUTER_USE_AUTHORIZATION_REQUIRED_ERROR =\n \"COMPUTER_USE_AUTHORIZATION_REQUIRED\";\nconst COMPUTER_USE_HELP_TEXT = `\nWorkflow:\n 1. Start the Zero Desktop app and make sure Computer Use is online.\n 2. Run \"zero computer-use list-apps\" to find the target app's bundleId.\n --app accepts a bundle id only (e.g. com.google.Chrome); the name is for\n display. Apps listed without a bundleId cannot be targeted.\n 3. Run \"zero computer-use get-app-state --app <bundleId>\" to get a screenshot,\n snapshotId, visible element indexes, and accessibility state.\n 4. Prefer element actions with --snapshot-id and --element-index. Use --x/--y\n only when the target is visible in the returned screenshot but has no useful\n accessibility element.\n 5. Read the JSON result. Screenshot and App State data are saved under\n /tmp/vm0/computer-use and replaced with local file paths in CLI output.\n Files are named from app and snapshotId; rerunning the same snapshot\n overwrites the same files.\n\nNotes:\n Write commands are sent to the connected Desktop host. Coordinate fallbacks use\n screenshot coordinates from get-app-state; pass the matching --snapshot-id when\n acting on a prior snapshot.\n type-text sends literal keyboard input to the target app's current focus. It\n first verifies the focused element is editable and fails with\n element_not_editable when it is not (for example a focused table or list), so\n click into a text field before typing. Use set-value when you need\n deterministic accessibility value assignment.\n press-key accepts xdotool-style names such as shift+semicolon, Control_L+J,\n ctrl+alt+n, and BackSpace, plus existing macOS-style forms such as Command+L.\n type-text and press-key accept the same --snapshot-id as the element actions:\n pass it to deliver keyboard input to that snapshot's window. Without it, the\n most relevant window for the app is picked, which is ambiguous for multi-window\n apps.\n\nExamples:\n List available apps:\n zero computer-use list-apps\n\n Inspect Safari state:\n zero computer-use get-app-state --app com.apple.Safari\n\n Click element index 7 from snapshot desktop_abc:\n zero computer-use click --app com.apple.Safari --snapshot-id desktop_abc --element-index 7\n\n Click screenshot coordinate (320, 240) from snapshot desktop_abc:\n zero computer-use click --app com.apple.Safari --snapshot-id desktop_abc --x 320 --y 240\n\n Type text into the snapshot desktop_abc window in Safari:\n zero computer-use type-text --app com.apple.Safari --snapshot-id desktop_abc --text \"Hello\"\n\n Press a keyboard shortcut in the snapshot desktop_abc window:\n zero computer-use press-key --app com.apple.Safari --snapshot-id desktop_abc --key shift+semicolon\n\n Open an app without activating the current foreground app:\n zero computer-use open-app --app com.culturedcode.ThingsMac`;\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction throwComputerUseAuthorizationGuidanceError(error: unknown): never {\n if (\n error instanceof ApiRequestError &&\n error.status === 403 &&\n error.code === \"FORBIDDEN\" &&\n error.message === COMPUTER_USE_REQUIRED_CAPABILITY_MESSAGE\n ) {\n throw new ApiRequestError(\n \"Computer Use authorization required\",\n COMPUTER_USE_AUTHORIZATION_REQUIRED_ERROR,\n 403,\n );\n }\n\n throw error;\n}\n\nfunction parseTimeoutSeconds(value: string | undefined): number {\n if (!value) return 30;\n const seconds = Number.parseInt(value, 10);\n if (!Number.isFinite(seconds) || seconds <= 0) {\n throw new Error(\"Timeout must be a positive number of seconds\");\n }\n return seconds;\n}\n\nfunction parseOptionalNonNegativeInteger(\n value: string | undefined,\n label: string,\n): number | undefined {\n if (value === undefined) return undefined;\n const parsed = Number.parseInt(value, 10);\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new Error(`${label} must be a non-negative integer`);\n }\n return parsed;\n}\n\nfunction parsePositiveInteger(\n value: string | undefined,\n label: string,\n): number {\n if (value === undefined) {\n throw new Error(`${label} is required`);\n }\n const parsed = Number.parseInt(value, 10);\n if (!Number.isFinite(parsed) || parsed <= 0) {\n throw new Error(`${label} must be a positive integer`);\n }\n return parsed;\n}\n\nfunction parsePositiveNumber(\n value: string | undefined,\n label: string,\n): number | undefined {\n if (value === undefined) return undefined;\n const parsed = Number.parseFloat(value);\n if (!Number.isFinite(parsed) || parsed <= 0) {\n throw new Error(`${label} must be a positive number`);\n }\n return parsed;\n}\n\nfunction parseMouseButton(\n value: string | undefined,\n): \"left\" | \"right\" | \"middle\" {\n if (value === \"left\" || value === \"right\" || value === \"middle\") {\n return value;\n }\n throw new Error(\"button must be left, right, or middle\");\n}\n\nfunction elementTargetPayload(options: {\n readonly element?: string;\n readonly elementIndex?: string;\n}): { readonly elementId?: string; readonly elementIndex?: number } {\n const elementIndex = parseOptionalNonNegativeInteger(\n options.elementIndex,\n \"element-index\",\n );\n if (!options.element && elementIndex === undefined) {\n throw new Error(\"element or element-index is required\");\n }\n return {\n ...(options.element ? { elementId: options.element } : {}),\n ...(elementIndex !== undefined ? { elementIndex } : {}),\n };\n}\n\nfunction sanitizeFilenamePart(value: unknown, fallback: string): string {\n if (typeof value !== \"string\") {\n return fallback;\n }\n const sanitized = value\n .trim()\n .replace(/[^A-Za-z0-9._-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, 80);\n return sanitized.length > 0 ? sanitized : fallback;\n}\n\nfunction extensionForMimeType(mimeType: string): string {\n if (mimeType === \"image/png\") {\n return \"png\";\n }\n if (mimeType === \"image/jpeg\") {\n return \"jpg\";\n }\n if (mimeType === \"image/webp\") {\n return \"webp\";\n }\n const suffix = mimeType.startsWith(\"image/\") ? mimeType.slice(6) : \"bin\";\n return sanitizeFilenamePart(suffix, \"bin\").toLowerCase();\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\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\nasync function writeScreenshotDataUrl(\n result: Record<string, unknown>,\n dataUrl: string,\n): Promise<string | null> {\n const match = DATA_URL_PATTERN.exec(dataUrl);\n if (!match) {\n return null;\n }\n\n const mimeType = match[1] ?? \"\";\n if (!mimeType.startsWith(\"image/\")) {\n throw new Error(`Unsupported screenshot MIME type: ${mimeType}`);\n }\n\n const base64Data = match[2] ?? \"\";\n const appName = sanitizeFilenamePart(result.app, \"app\");\n const snapshotId = sanitizeFilenamePart(result.snapshotId, \"snapshot\");\n const outputPath = join(\n computerUseOutputDir(),\n `${appName}-${snapshotId}.${extensionForMimeType(mimeType)}`,\n );\n\n await writeComputerUseArtifact(outputPath, Buffer.from(base64Data, \"base64\"));\n return outputPath;\n}\n\nfunction screenshotPointerType(value: unknown): \"s3\" | \"expired\" | null {\n if (typeof value !== \"object\" || value === null) {\n return null;\n }\n const type = (value as { readonly type?: unknown }).type;\n return type === \"s3\" || type === \"expired\" ? type : null;\n}\n\nasync function writeScreenshotBytes(\n result: Record<string, unknown>,\n buffer: Buffer,\n mimeType: string,\n): Promise<string> {\n const appName = sanitizeFilenamePart(result.app, \"app\");\n const snapshotId = sanitizeFilenamePart(result.snapshotId, \"snapshot\");\n const outputPath = join(\n computerUseOutputDir(),\n `${appName}-${snapshotId}.${extensionForMimeType(mimeType)}`,\n );\n\n await writeComputerUseArtifact(outputPath, buffer);\n return outputPath;\n}\n\nasync function writeAppStateText(\n result: Record<string, unknown>,\n appState: string,\n): Promise<string> {\n const appName = sanitizeFilenamePart(result.app, \"app\");\n const snapshotId = sanitizeFilenamePart(result.snapshotId, \"snapshot\");\n const outputPath = join(\n computerUseOutputDir(),\n `${appName}-${snapshotId}.appState.txt`,\n );\n\n await writeComputerUseArtifact(outputPath, appState);\n return outputPath;\n}\n\nfunction compactActionResult(\n action: Record<string, unknown>,\n): Record<string, unknown> {\n const compact: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(action)) {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n compact[key] = value;\n }\n }\n return compact;\n}\n\nexport async function formatComputerUseResultForConsole(\n result: Record<string, unknown>,\n commandId: string,\n): Promise<string> {\n const printable: Record<string, unknown> = { status: \"succeeded\" };\n const apps = result.apps;\n if (Array.isArray(apps)) {\n printable.apps = apps;\n }\n const snapshotId = stringField(result, \"snapshotId\");\n if (snapshotId) {\n printable.snapshotId = snapshotId;\n }\n const appState = stringField(result, \"appState\");\n if (appState) {\n printable.appState = await writeAppStateText(result, appState);\n }\n const screenshot = result.screenshot;\n if (typeof screenshot === \"string\") {\n const screenshotPath = await writeScreenshotDataUrl(result, screenshot);\n printable.screenshot = screenshotPath ?? screenshot;\n } else {\n const pointerType = screenshotPointerType(screenshot);\n if (pointerType === \"s3\") {\n const { buffer, mimeType } = await fetchComputerUseScreenshot(commandId);\n printable.screenshot = await writeScreenshotBytes(\n result,\n buffer,\n mimeType,\n );\n } else if (pointerType === \"expired\") {\n printable.screenshot = \"[screenshot expired]\";\n }\n }\n const action = result.action;\n if (isRecord(action)) {\n printable.action = compactActionResult(action);\n }\n return JSON.stringify(printable, null, 2);\n}\n\nasync function commandOutputText(\n command: ComputerUseCommandResponse,\n): Promise<string> {\n if (!command.result) {\n return \"\";\n }\n return await formatComputerUseResultForConsole(command.result, command.id);\n}\n\nfunction pluginContentPointerType(value: unknown): \"s3\" | \"expired\" | null {\n if (!isRecord(value)) {\n return null;\n }\n const type = value.type;\n return type === \"s3\" || type === \"expired\" ? type : null;\n}\n\nfunction pluginContentFileName(value: unknown): string {\n if (!isRecord(value) || typeof value.fileName !== \"string\") {\n return \"plugin-content.bin\";\n }\n return sanitizeFilenamePart(value.fileName, \"plugin-content.bin\");\n}\n\nasync function writePluginContent(\n commandId: string,\n result: Record<string, unknown>,\n): Promise<string> {\n const downloaded = await fetchComputerUsePluginContent(commandId);\n const pointerFileName = pluginContentFileName(result.pluginContent);\n const directoryName = sanitizeFilenamePart(commandId, \"command\");\n const outputPath = join(\n computerUseOutputDir(),\n \"plugins\",\n directoryName,\n sanitizeFilenamePart(\n downloaded.fileName || pointerFileName,\n pointerFileName,\n ),\n );\n await writeComputerUseArtifact(outputPath, downloaded.buffer);\n return outputPath;\n}\n\nfunction formatHumanValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (Array.isArray(value)) {\n return value.map(formatHumanValue).join(\"\\n\");\n }\n if (value === null || value === undefined) {\n return \"\";\n }\n return JSON.stringify(value, null, 2);\n}\n\nasync function pluginCommandOutputText(\n command: ComputerUseCommandResponse,\n): Promise<string> {\n const result = command.result;\n if (!result) {\n return \"\";\n }\n const content = stringField(result, \"content\");\n if (content) {\n return content;\n }\n\n const pluginContentType = pluginContentPointerType(result.pluginContent);\n if (pluginContentType === \"s3\") {\n const outputPath = await writePluginContent(command.id, result);\n const sizeBytes =\n typeof result.sizeBytes === \"number\"\n ? ` (${result.sizeBytes} bytes)`\n : \"\";\n return `Saved plugin content${sizeBytes}: ${outputPath}`;\n }\n if (pluginContentType === \"expired\") {\n return \"Plugin content expired.\";\n }\n\n const lines: string[] = [];\n for (const [key, value] of Object.entries(result)) {\n if (key === \"pluginContent\") {\n continue;\n }\n const formatted = formatHumanValue(value);\n if (formatted) {\n lines.push(`${key}: ${formatted}`);\n }\n }\n return lines.join(\"\\n\");\n}\n\nasync function waitForCommand(\n commandId: string,\n timeoutSeconds: number,\n formatter: (\n command: ComputerUseCommandResponse,\n ) => Promise<string> = commandOutputText,\n): Promise<void> {\n const deadline = Date.now() + timeoutSeconds * 1000;\n while (Date.now() <= deadline) {\n const command = await getComputerUseCommand(commandId);\n if (command.status === \"queued\" || command.status === \"running\") {\n if (process.stdout.isTTY) {\n process.stdout.write(\".\");\n }\n await sleep(500);\n continue;\n }\n\n if (process.stdout.isTTY) {\n process.stdout.write(\"\\n\");\n }\n\n if (command.status === \"failed\") {\n throw new Error(\n command.error\n ? `${command.error.code}: ${command.error.message}`\n : \"Computer-use command failed\",\n );\n }\n\n const text = await formatter(command);\n if (text) {\n console.log(text);\n }\n return;\n }\n\n throw new Error(`Computer-use command timed out: ${commandId}`);\n}\n\nasync function runReadCommand(\n kind: ComputerUseReadCommandKind,\n options: ComputerUseCommandOptions,\n payload: { readonly app?: string } = {},\n): Promise<void> {\n const timeoutSeconds = parseTimeoutSeconds(options.timeout);\n try {\n const created = await createComputerUseReadCommand({\n kind,\n timeoutMs: timeoutSeconds * 1000,\n ...payload,\n });\n await waitForCommand(created.commandId, timeoutSeconds);\n } catch (error) {\n throwComputerUseAuthorizationGuidanceError(error);\n }\n}\n\nasync function runWriteCommand(\n kind: ComputerUseWriteCommandKind,\n options: ComputerUseCommandOptions,\n payload: {\n readonly app: string;\n readonly snapshotId?: string;\n readonly elementId?: string;\n readonly elementIndex?: number;\n readonly x?: number;\n readonly y?: number;\n readonly button?: \"left\" | \"right\" | \"middle\";\n readonly clickCount?: number;\n readonly direction?: \"up\" | \"down\" | \"left\" | \"right\";\n readonly pages?: number;\n readonly value?: string;\n readonly text?: string;\n readonly key?: string;\n readonly action?: string;\n },\n): Promise<void> {\n const timeoutSeconds = parseTimeoutSeconds(options.timeout);\n try {\n const created = await createComputerUseWriteCommand({\n kind,\n timeoutMs: timeoutSeconds * 1000,\n ...payload,\n });\n await waitForCommand(created.commandId, timeoutSeconds);\n } catch (error) {\n throwComputerUseAuthorizationGuidanceError(error);\n }\n}\n\nfunction parseArgumentsJson(\n value: string | undefined,\n): Record<string, unknown> {\n if (!value) {\n return {};\n }\n const parsed: unknown = JSON.parse(value);\n if (!isRecord(parsed)) {\n throw new Error(\"arguments-json must be a JSON object\");\n }\n return parsed;\n}\n\nfunction withArgumentsJson(\n options: ComputerUsePluginOptions,\n fallback: Record<string, unknown>,\n): Record<string, unknown> {\n return options.argumentsJson\n ? parseArgumentsJson(options.argumentsJson)\n : fallback;\n}\n\nfunction parseOptionalPositiveInteger(\n value: string | undefined,\n label: string,\n): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n return parsePositiveInteger(value, label);\n}\n\nasync function runFilesystemPluginCommand(\n tool: ComputerUseFilesystemTool,\n options: ComputerUsePluginOptions,\n args: Record<string, unknown>,\n): Promise<void> {\n const timeoutSeconds = parseTimeoutSeconds(options.timeout);\n const body: ComputerUsePluginCallBody = {\n plugin: COMPUTER_USE_FILESYSTEM_PLUGIN,\n tool,\n arguments: args,\n timeoutMs: timeoutSeconds * 1000,\n };\n try {\n const created = await createComputerUsePluginCommand(body);\n await waitForCommand(\n created.commandId,\n timeoutSeconds,\n pluginCommandOutputText,\n );\n } catch (error) {\n throwComputerUseAuthorizationGuidanceError(error);\n }\n}\n\nfunction addTargetOptions(command: Command): Command {\n return command.option(\"--timeout <seconds>\", \"Maximum time to wait\", \"30\");\n}\n\nfunction addPluginOptions(command: Command): Command {\n return addTargetOptions(command).option(\n \"--arguments-json <json>\",\n \"Raw tool arguments object for advanced cases\",\n );\n}\n\nfunction appOption(command: Command): Command {\n return command.requiredOption(\n \"--app <bundleId>\",\n \"Target app bundle id (e.g. com.google.Chrome); run list-apps to find it\",\n );\n}\n\nconst listAppsCommand = addTargetOptions(\n new Command()\n .name(\"list-apps\")\n .description(\"List apps available to the Desktop Computer Use host\")\n .action(\n withErrorHandler(async (options: ComputerUseCommandOptions) => {\n await runReadCommand(\"apps.list\", options);\n }),\n ),\n);\n\nconst getAppStateCommand = appOption(\n addTargetOptions(\n new Command()\n .name(\"get-app-state\")\n .description(\n \"Get screenshot and accessibility state without activating an app\",\n )\n .action(\n withErrorHandler(async (options: ComputerUseAppOptions) => {\n await runReadCommand(\"app.state\", options, { app: options.app });\n }),\n ),\n ),\n);\n\nconst clickCommand = appOption(\n addTargetOptions(\n new Command()\n .name(\"click\")\n .description(\n \"Click an accessibility element or background screenshot coordinate\",\n )\n .option(\"--snapshot-id <id>\", \"Snapshot id returned by get-app-state\")\n .option(\"--element <id>\", \"Element id from get-app-state\")\n .option(\"--element-index <index>\", \"Element index from get-app-state\")\n .option(\"--x <points>\", \"Screenshot x coordinate fallback\")\n .option(\"--y <points>\", \"Screenshot y coordinate fallback\")\n .option(\"--button <button>\", \"Mouse button\", \"left\")\n .option(\"--click-count <count>\", \"Number of clicks\", \"1\")\n .action(\n withErrorHandler(async (options: ComputerUseClickOptions) => {\n const x = parseOptionalNonNegativeInteger(options.x, \"x\");\n const y = parseOptionalNonNegativeInteger(options.y, \"y\");\n const elementIndex = parseOptionalNonNegativeInteger(\n options.elementIndex,\n \"element-index\",\n );\n await runWriteCommand(\"element.click\", options, {\n app: options.app,\n ...(options.snapshotId ? { snapshotId: options.snapshotId } : {}),\n ...(options.element ? { elementId: options.element } : {}),\n ...(elementIndex !== undefined ? { elementIndex } : {}),\n ...(x !== undefined ? { x } : {}),\n ...(y !== undefined ? { y } : {}),\n button: parseMouseButton(options.button),\n clickCount: parsePositiveInteger(options.clickCount, \"click-count\"),\n });\n }),\n ),\n ),\n);\n\nconst scrollCommand = appOption(\n addTargetOptions(\n new Command()\n .name(\"scroll\")\n .description(\"Scroll an accessibility element\")\n .option(\"--snapshot-id <id>\", \"Snapshot id returned by get-app-state\")\n .option(\"--element <id>\", \"Element id from get-app-state\")\n .option(\"--element-index <index>\", \"Element index from get-app-state\")\n .requiredOption(\n \"--direction <direction>\",\n \"Scroll direction: up, down, left, or right\",\n )\n .option(\"--pages <count>\", \"Number of pages to scroll\", \"1\")\n .action(\n withErrorHandler(async (options: ComputerUseScrollOptions) => {\n await runWriteCommand(\"element.scroll\", options, {\n app: options.app,\n ...(options.snapshotId ? { snapshotId: options.snapshotId } : {}),\n ...elementTargetPayload(options),\n direction: options.direction,\n pages: parsePositiveNumber(options.pages, \"pages\"),\n });\n }),\n ),\n ),\n);\n\nconst setValueCommand = appOption(\n addTargetOptions(\n new Command()\n .name(\"set-value\")\n .description(\"Set the value of a settable accessibility element\")\n .option(\"--snapshot-id <id>\", \"Snapshot id returned by get-app-state\")\n .option(\"--element <id>\", \"Element id from get-app-state\")\n .option(\"--element-index <index>\", \"Element index from get-app-state\")\n .requiredOption(\"--value <text>\", \"Value to assign\")\n .action(\n withErrorHandler(async (options: ComputerUseSetValueOptions) => {\n await runWriteCommand(\"element.set_value\", options, {\n app: options.app,\n ...(options.snapshotId ? { snapshotId: options.snapshotId } : {}),\n ...elementTargetPayload(options),\n value: options.value,\n });\n }),\n ),\n ),\n);\n\nconst typeTextCommand = appOption(\n addTargetOptions(\n new Command()\n .name(\"type-text\")\n .description(\"Type literal keyboard input into the target app\")\n .option(\"--snapshot-id <id>\", \"Snapshot id returned by get-app-state\")\n .requiredOption(\"--text <text>\", \"Text to type\")\n .action(\n withErrorHandler(async (options: ComputerUseTypeTextOptions) => {\n await runWriteCommand(\"keyboard.type_text\", options, {\n app: options.app,\n ...(options.snapshotId ? { snapshotId: options.snapshotId } : {}),\n text: options.text,\n });\n }),\n ),\n ),\n);\n\nconst pressKeyCommand = appOption(\n addTargetOptions(\n new Command()\n .name(\"press-key\")\n .description(\"Send a background key or key combination to the target app\")\n .option(\"--snapshot-id <id>\", \"Snapshot id returned by get-app-state\")\n .requiredOption(\n \"--key <key>\",\n \"Key or xdotool-style combination, for example Command+K, shift+semicolon, or Control_L+J\",\n )\n .action(\n withErrorHandler(async (options: ComputerUsePressKeyOptions) => {\n await runWriteCommand(\"keyboard.press_key\", options, {\n app: options.app,\n ...(options.snapshotId ? { snapshotId: options.snapshotId } : {}),\n key: options.key,\n });\n }),\n ),\n ),\n);\n\nconst performActionCommand = appOption(\n addTargetOptions(\n new Command()\n .name(\"perform-action\")\n .description(\"Invoke a secondary accessibility action\")\n .option(\"--snapshot-id <id>\", \"Snapshot id returned by get-app-state\")\n .option(\"--element <id>\", \"Element id from get-app-state\")\n .option(\"--element-index <index>\", \"Element index from get-app-state\")\n .requiredOption(\"--action <name>\", \"Accessibility action name\")\n .action(\n withErrorHandler(async (options: ComputerUsePerformActionOptions) => {\n await runWriteCommand(\"element.perform_action\", options, {\n app: options.app,\n ...(options.snapshotId ? { snapshotId: options.snapshotId } : {}),\n ...elementTargetPayload(options),\n action: options.action,\n });\n }),\n ),\n ),\n);\n\nconst openAppCommand = appOption(\n addTargetOptions(\n new Command()\n .name(\"open-app\")\n .description(\"Open an app on the Desktop host without activating it\")\n .action(\n withErrorHandler(async (options: ComputerUseAppOptions) => {\n await runWriteCommand(\"app.open\", options, { app: options.app });\n }),\n ),\n ),\n);\n\nconst filesystemListAllowedDirectoriesCommand = addPluginOptions(\n new Command()\n .name(\"list_allowed_directories\")\n .description(\"List directories enabled in Zero Desktop\")\n .action(\n withErrorHandler(async (options: ComputerUsePluginOptions) => {\n await runFilesystemPluginCommand(\n \"list_allowed_directories\",\n options,\n withArgumentsJson(options, {}),\n );\n }),\n ),\n);\n\nconst filesystemReadTextFileCommand = addPluginOptions(\n new Command()\n .name(\"read_text_file\")\n .description(\"Read a text file\")\n .requiredOption(\"--path <path>\", \"File path\")\n .option(\"--head <lines>\", \"Read the first N lines\")\n .option(\"--tail <lines>\", \"Read the last N lines\")\n .action(\n withErrorHandler(async (options: FilesystemReadTextOptions) => {\n await runFilesystemPluginCommand(\n \"read_text_file\",\n options,\n withArgumentsJson(options, {\n path: options.path,\n ...(options.head\n ? { head: parseOptionalPositiveInteger(options.head, \"head\") }\n : {}),\n ...(options.tail\n ? { tail: parseOptionalPositiveInteger(options.tail, \"tail\") }\n : {}),\n }),\n );\n }),\n ),\n);\n\nconst filesystemReadMediaFileCommand = addPluginOptions(\n new Command()\n .name(\"read_media_file\")\n .description(\"Read an image or audio file\")\n .requiredOption(\"--path <path>\", \"File path\")\n .action(\n withErrorHandler(async (options: FilesystemPathOptions) => {\n await runFilesystemPluginCommand(\n \"read_media_file\",\n options,\n withArgumentsJson(options, { path: options.path }),\n );\n }),\n ),\n);\n\nconst filesystemReadMultipleFilesCommand = addPluginOptions(\n new Command()\n .name(\"read_multiple_files\")\n .description(\"Read multiple text files\")\n .requiredOption(\"--path <path...>\", \"File paths\")\n .action(\n withErrorHandler(async (options: FilesystemReadMultipleFilesOptions) => {\n await runFilesystemPluginCommand(\n \"read_multiple_files\",\n options,\n withArgumentsJson(options, { paths: options.path }),\n );\n }),\n ),\n);\n\nconst filesystemWriteFileCommand = addPluginOptions(\n new Command()\n .name(\"write_file\")\n .description(\"Write a file\")\n .requiredOption(\"--path <path>\", \"File path\")\n .requiredOption(\"--content <text>\", \"File content\")\n .action(\n withErrorHandler(async (options: FilesystemWriteFileOptions) => {\n await runFilesystemPluginCommand(\n \"write_file\",\n options,\n withArgumentsJson(options, {\n path: options.path,\n content: options.content,\n }),\n );\n }),\n ),\n);\n\nconst filesystemEditFileCommand = addPluginOptions(\n new Command()\n .name(\"edit_file\")\n .description(\"Edit a file\")\n .requiredOption(\"--path <path>\", \"File path\")\n .option(\"--old-text <text>\", \"Text to replace\")\n .option(\"--new-text <text>\", \"Replacement text\")\n .option(\"--dry-run\", \"Preview changes without writing\")\n .action(\n withErrorHandler(async (options: FilesystemEditFileOptions) => {\n if (\n !options.argumentsJson &&\n (!options.oldText || options.newText === undefined)\n ) {\n throw new Error(\n \"edit_file requires --old-text and --new-text, or --arguments-json\",\n );\n }\n await runFilesystemPluginCommand(\n \"edit_file\",\n options,\n withArgumentsJson(options, {\n path: options.path,\n edits: [\n {\n oldText: options.oldText,\n newText: options.newText,\n },\n ],\n dryRun: options.dryRun === true,\n }),\n );\n }),\n ),\n);\n\nconst filesystemCreateDirectoryCommand = addPluginOptions(\n new Command()\n .name(\"create_directory\")\n .description(\"Create a directory\")\n .requiredOption(\"--path <path>\", \"Directory path\")\n .action(\n withErrorHandler(async (options: FilesystemPathOptions) => {\n await runFilesystemPluginCommand(\n \"create_directory\",\n options,\n withArgumentsJson(options, { path: options.path }),\n );\n }),\n ),\n);\n\nconst filesystemListDirectoryCommand = addPluginOptions(\n new Command()\n .name(\"list_directory\")\n .description(\"List directory entries\")\n .requiredOption(\"--path <path>\", \"Directory path\")\n .action(\n withErrorHandler(async (options: FilesystemPathOptions) => {\n await runFilesystemPluginCommand(\n \"list_directory\",\n options,\n withArgumentsJson(options, { path: options.path }),\n );\n }),\n ),\n);\n\nconst filesystemListDirectoryWithSizesCommand = addPluginOptions(\n new Command()\n .name(\"list_directory_with_sizes\")\n .description(\"List directory entries with sizes\")\n .requiredOption(\"--path <path>\", \"Directory path\")\n .option(\"--sort-by <field>\", \"Sort by name or size\", \"name\")\n .action(\n withErrorHandler(\n async (options: FilesystemListDirectoryWithSizesOptions) => {\n await runFilesystemPluginCommand(\n \"list_directory_with_sizes\",\n options,\n withArgumentsJson(options, {\n path: options.path,\n sortBy: options.sortBy ?? \"name\",\n }),\n );\n },\n ),\n ),\n);\n\nconst filesystemDirectoryTreeCommand = addPluginOptions(\n new Command()\n .name(\"directory_tree\")\n .description(\"Return a directory tree\")\n .requiredOption(\"--path <path>\", \"Directory path\")\n .option(\"--exclude-pattern <pattern...>\", \"Patterns to exclude\")\n .action(\n withErrorHandler(async (options: FilesystemDirectoryTreeOptions) => {\n await runFilesystemPluginCommand(\n \"directory_tree\",\n options,\n withArgumentsJson(options, {\n path: options.path,\n ...(options.excludePattern\n ? { excludePatterns: options.excludePattern }\n : {}),\n }),\n );\n }),\n ),\n);\n\nconst filesystemMoveFileCommand = addPluginOptions(\n new Command()\n .name(\"move_file\")\n .description(\"Move or rename a file\")\n .requiredOption(\"--source <path>\", \"Source path\")\n .requiredOption(\"--destination <path>\", \"Destination path\")\n .action(\n withErrorHandler(async (options: FilesystemMoveFileOptions) => {\n await runFilesystemPluginCommand(\n \"move_file\",\n options,\n withArgumentsJson(options, {\n source: options.source,\n destination: options.destination,\n }),\n );\n }),\n ),\n);\n\nconst filesystemSearchFilesCommand = addPluginOptions(\n new Command()\n .name(\"search_files\")\n .description(\"Search files by name\")\n .requiredOption(\"--path <path>\", \"Directory path\")\n .requiredOption(\"--pattern <pattern>\", \"Search pattern\")\n .option(\"--exclude-pattern <pattern...>\", \"Patterns to exclude\")\n .action(\n withErrorHandler(async (options: FilesystemSearchFilesOptions) => {\n await runFilesystemPluginCommand(\n \"search_files\",\n options,\n withArgumentsJson(options, {\n path: options.path,\n pattern: options.pattern,\n ...(options.excludePattern\n ? { excludePatterns: options.excludePattern }\n : {}),\n }),\n );\n }),\n ),\n);\n\nconst filesystemGetFileInfoCommand = addPluginOptions(\n new Command()\n .name(\"get_file_info\")\n .description(\"Get file metadata\")\n .requiredOption(\"--path <path>\", \"File or directory path\")\n .action(\n withErrorHandler(async (options: FilesystemPathOptions) => {\n await runFilesystemPluginCommand(\n \"get_file_info\",\n options,\n withArgumentsJson(options, { path: options.path }),\n );\n }),\n ),\n);\n\nconst filesystemPluginCommand = new Command()\n .name(\"filesystem\")\n .description(\"Use the Zero Desktop filesystem plugin\")\n .addCommand(filesystemListAllowedDirectoriesCommand)\n .addCommand(filesystemReadTextFileCommand)\n .addCommand(filesystemReadMediaFileCommand)\n .addCommand(filesystemReadMultipleFilesCommand)\n .addCommand(filesystemWriteFileCommand)\n .addCommand(filesystemEditFileCommand)\n .addCommand(filesystemCreateDirectoryCommand)\n .addCommand(filesystemListDirectoryCommand)\n .addCommand(filesystemListDirectoryWithSizesCommand)\n .addCommand(filesystemDirectoryTreeCommand)\n .addCommand(filesystemMoveFileCommand)\n .addCommand(filesystemSearchFilesCommand)\n .addCommand(filesystemGetFileInfoCommand);\n\nconst MCP_SERVER_CAPABILITY_PREFIX = `plugin.${COMPUTER_USE_MCP_PLUGIN}.`;\n\ninterface ComputerUseMcpCallOptions extends ComputerUseCommandOptions {\n readonly args?: string;\n readonly argsFile?: string;\n}\n\nfunction parseMcpToolArguments(\n options: ComputerUseMcpCallOptions,\n): Record<string, unknown> {\n if (options.args && options.argsFile) {\n throw new Error(\"Pass either --args or --args-file, not both\");\n }\n if (options.argsFile) {\n return parseArgumentsJson(readFileSync(options.argsFile, \"utf8\"));\n }\n return parseArgumentsJson(options.args);\n}\n\nasync function runMcpPluginCommand(\n server: string,\n tool: string,\n options: ComputerUseCommandOptions,\n args: Record<string, unknown>,\n): Promise<void> {\n const timeoutSeconds = parseTimeoutSeconds(options.timeout);\n const body: ComputerUseMcpPluginCallBody = {\n plugin: COMPUTER_USE_MCP_PLUGIN,\n server,\n tool,\n arguments: args,\n timeoutMs: timeoutSeconds * 1000,\n };\n try {\n const created = await createComputerUsePluginCommand(body);\n await waitForCommand(\n created.commandId,\n timeoutSeconds,\n pluginCommandOutputText,\n );\n } catch (error) {\n throwComputerUseAuthorizationGuidanceError(error);\n }\n}\n\nasync function printMcpServers(): Promise<void> {\n const hosts = await listComputerUseHosts().catch((error: unknown) => {\n throwComputerUseAuthorizationGuidanceError(error);\n });\n const lines: string[] = [];\n for (const host of hosts) {\n const servers = host.supportedCapabilities\n .filter((capability) => {\n return capability.startsWith(MCP_SERVER_CAPABILITY_PREFIX);\n })\n .map((capability) => {\n return capability.slice(MCP_SERVER_CAPABILITY_PREFIX.length);\n });\n if (servers.length === 0) {\n continue;\n }\n lines.push(`${host.displayName} (${host.status}): ${servers.join(\", \")}`);\n }\n if (lines.length === 0) {\n console.log(\n \"No MCP servers are running on any linked host. Configure and enable them in the Zero Desktop app's Developer Tools section.\",\n );\n return;\n }\n console.log(lines.join(\"\\n\"));\n}\n\nconst mcpListCommand = new Command()\n .name(\"list\")\n .description(\n \"List MCP servers on linked hosts, or a server's tools and schemas\",\n )\n .argument(\"[server]\", \"MCP server name; omit to list available servers\")\n .action(\n withErrorHandler(\n async (\n server: string | undefined,\n _options: Record<string, never>,\n command: Command,\n ) => {\n if (!server) {\n await printMcpServers();\n return;\n }\n await runMcpPluginCommand(\n server,\n COMPUTER_USE_MCP_LIST_TOOLS,\n command.optsWithGlobals<ComputerUseCommandOptions>(),\n {},\n );\n },\n ),\n );\n\nconst mcpCallCommand = new Command()\n .name(\"call\")\n .description(\"Call a tool on a configured MCP server\")\n .argument(\"<server>\", \"MCP server name (see: plugin mcp list)\")\n .argument(\"<tool>\", \"Tool name (see: plugin mcp list <server>)\")\n .option(\"--args <json>\", \"Tool arguments as a JSON object\")\n .option(\"--args-file <path>\", \"Read tool arguments JSON from a file\")\n .action(\n withErrorHandler(\n async (\n server: string,\n tool: string,\n options: ComputerUseMcpCallOptions,\n command: Command,\n ) => {\n await runMcpPluginCommand(\n server,\n tool,\n command.optsWithGlobals<ComputerUseCommandOptions>(),\n parseMcpToolArguments(options),\n );\n },\n ),\n );\n\nconst mcpPluginCommand = new Command()\n .name(\"mcp\")\n .description(\"Use custom MCP servers configured in the Zero Desktop app\")\n .addCommand(mcpListCommand)\n .addCommand(mcpCallCommand);\n\nconst pluginCommand = addTargetOptions(\n new Command()\n .name(\"plugin\")\n .description(\"Use Desktop Computer Use plugins\")\n .addCommand(filesystemPluginCommand)\n .addCommand(mcpPluginCommand),\n);\n\nexport const zeroComputerUseCommand = new Command()\n .name(\"computer-use\")\n .description(\"Desktop app computer use through Zero CLI\")\n .addHelpText(\"after\", COMPUTER_USE_HELP_TEXT)\n .addCommand(listAppsCommand)\n .addCommand(getAppStateCommand)\n .addCommand(clickCommand)\n .addCommand(scrollCommand)\n .addCommand(setValueCommand)\n .addCommand(typeTextCommand)\n .addCommand(pressKeyCommand)\n .addCommand(performActionCommand)\n .addCommand(openAppCommand)\n .addCommand(pluginCommand);\n","import { randomUUID } from \"node:crypto\";\nimport type { Dirent } from \"node:fs\";\nimport {\n chmod,\n lstat,\n mkdir,\n readdir,\n rename,\n rm,\n writeFile,\n} from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\n\nconst COMPUTER_USE_OUTPUT_DIR_MODE = 0o700;\nconst COMPUTER_USE_OUTPUT_FILE_MODE = 0o600;\nconst COMPUTER_USE_OUTPUT_TTL_MS = 24 * 60 * 60 * 1000;\nconst DEFAULT_COMPUTER_USE_OUTPUT_DIR = path.join(\n tmpdir(),\n \"vm0\",\n \"computer-use\",\n);\n\nexport function computerUseOutputDir(): string {\n const configured = process.env.VM0_COMPUTER_OUTPUT_DIR?.trim();\n return configured && configured.length > 0\n ? configured\n : DEFAULT_COMPUTER_USE_OUTPUT_DIR;\n}\n\nasync function ensurePrivateDirectory(directory: string): Promise<void> {\n await mkdir(directory, {\n recursive: true,\n mode: COMPUTER_USE_OUTPUT_DIR_MODE,\n });\n const stats = await lstat(directory);\n if (!stats.isDirectory() || stats.isSymbolicLink()) {\n throw new Error(\n `Computer-use output path is not a directory: ${directory}`,\n );\n }\n await chmod(directory, COMPUTER_USE_OUTPUT_DIR_MODE);\n}\n\nasync function removeStaleEntries(\n directory: string,\n cutoffMs: number,\n): Promise<void> {\n let entries: Dirent[];\n try {\n entries = await readdir(directory, { withFileTypes: true });\n } catch (error) {\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return;\n }\n throw error;\n }\n\n for (const entry of entries) {\n const entryPath = path.join(directory, entry.name);\n const stats = await lstat(entryPath).catch(() => {\n return null;\n });\n if (!stats) {\n continue;\n }\n if (entry.isDirectory() && !stats.isSymbolicLink()) {\n await removeStaleEntries(entryPath, cutoffMs);\n continue;\n }\n if (stats.mtimeMs < cutoffMs) {\n await rm(entryPath, { force: true, recursive: entry.isDirectory() });\n }\n }\n}\n\nasync function prepareComputerUseOutputDir(): Promise<string> {\n const outputDir = computerUseOutputDir();\n await ensurePrivateDirectory(outputDir);\n await removeStaleEntries(outputDir, Date.now() - COMPUTER_USE_OUTPUT_TTL_MS);\n return outputDir;\n}\n\nasync function ensureOutputPathDirectory(outputPath: string): Promise<void> {\n const outputDir = await prepareComputerUseOutputDir();\n const directory = path.dirname(outputPath);\n const relative = path.relative(outputDir, directory);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n throw new Error(`Computer-use artifact path escapes output directory`);\n }\n\n let current = outputDir;\n for (const part of relative.split(path.sep).filter(Boolean)) {\n current = path.join(current, part);\n await ensurePrivateDirectory(current);\n }\n}\n\nexport async function writeComputerUseArtifact(\n outputPath: string,\n data: string | Buffer,\n): Promise<void> {\n await ensureOutputPathDirectory(outputPath);\n const tempPath = path.join(\n path.dirname(outputPath),\n `.${path.basename(outputPath)}.${process.pid.toString()}.${randomUUID()}.tmp`,\n );\n let moved = false;\n try {\n await writeFile(tempPath, data, {\n flag: \"wx\",\n mode: COMPUTER_USE_OUTPUT_FILE_MODE,\n });\n await chmod(tempPath, COMPUTER_USE_OUTPUT_FILE_MODE);\n await rename(tempPath, outputPath);\n moved = true;\n await chmod(outputPath, COMPUTER_USE_OUTPUT_FILE_MODE);\n } finally {\n if (!moved) {\n await rm(tempPath, { force: true });\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -7,10 +7,10 @@ import {
7
7
  resolveAgentContext,
8
8
  resolveManualGrantAuthMethod,
9
9
  searchPublicConnectorCatalog
10
- } from "./chunk-BYBGLFHQ.js";
10
+ } from "./chunk-KYKDHMRW.js";
11
11
  import {
12
12
  getPlatformOrigin
13
- } from "./chunk-45KH4JE2.js";
13
+ } from "./chunk-W6OJY7IX.js";
14
14
  import {
15
15
  connectZeroConnectorManualGrant,
16
16
  customConnectorProposalSchema,
@@ -19,12 +19,12 @@ import {
19
19
  getZeroCustomConnector,
20
20
  listZeroConnectorCatalogStatus,
21
21
  listZeroCustomConnectors
22
- } from "./chunk-ZIQ4L34C.js";
22
+ } from "./chunk-KNATFPLD.js";
23
23
  import "./chunk-LTDQISD7.js";
24
24
  import {
25
25
  source_default,
26
26
  withErrorHandler
27
- } from "./chunk-ROSENSQ2.js";
27
+ } from "./chunk-AMJAGFT7.js";
28
28
  import "./chunk-LRHXR7JT.js";
29
29
  import {
30
30
  Command
@@ -556,4 +556,4 @@ var zeroConnectorCommand = new Command().name("connector").description("Check th
556
556
  export {
557
557
  zeroConnectorCommand
558
558
  };
559
- //# sourceMappingURL=connector-VUTYO53V.js.map
559
+ //# sourceMappingURL=connector-T2LTMZ6Q.js.map
@@ -3,17 +3,17 @@ import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  getPlatformOrigin
6
- } from "./chunk-45KH4JE2.js";
6
+ } from "./chunk-W6OJY7IX.js";
7
7
  import {
8
8
  createZeroCreditCheckout,
9
9
  getZeroBillingStatus,
10
10
  getZeroOrgMembers
11
- } from "./chunk-ZIQ4L34C.js";
11
+ } from "./chunk-KNATFPLD.js";
12
12
  import "./chunk-LTDQISD7.js";
13
13
  import {
14
14
  source_default,
15
15
  withErrorHandler
16
- } from "./chunk-ROSENSQ2.js";
16
+ } from "./chunk-AMJAGFT7.js";
17
17
  import {
18
18
  decodeZeroTokenPayload
19
19
  } from "./chunk-LRHXR7JT.js";
@@ -125,4 +125,4 @@ var zeroCreditCommand = new Command().name("credit").description("View credit ba
125
125
  export {
126
126
  zeroCreditCommand
127
127
  };
128
- //# sourceMappingURL=credit-WE5352F5.js.map
128
+ //# sourceMappingURL=credit-DX6NIRUV.js.map
@@ -4,11 +4,11 @@ const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  requestDeveloperSupportConsent,
6
6
  submitDeveloperSupport
7
- } from "./chunk-ZIQ4L34C.js";
7
+ } from "./chunk-KNATFPLD.js";
8
8
  import "./chunk-LTDQISD7.js";
9
9
  import {
10
10
  withErrorHandler
11
- } from "./chunk-ROSENSQ2.js";
11
+ } from "./chunk-AMJAGFT7.js";
12
12
  import "./chunk-LRHXR7JT.js";
13
13
  import {
14
14
  Command
@@ -60,4 +60,4 @@ Notes:
60
60
  export {
61
61
  zeroDeveloperSupportCommand
62
62
  };
63
- //# sourceMappingURL=developer-support-SZIHHRF6.js.map
63
+ //# sourceMappingURL=developer-support-SP56NSTB.js.map
@@ -3,11 +3,11 @@ import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  findFirewallMetadataPermission
6
- } from "./chunk-2ZA5KNAG.js";
6
+ } from "./chunk-HCSK2SC7.js";
7
7
  import {
8
8
  getPlatformOrigin,
9
9
  toPlatformUrl
10
- } from "./chunk-45KH4JE2.js";
10
+ } from "./chunk-W6OJY7IX.js";
11
11
  import {
12
12
  UNKNOWN_PERMISSION_GRANT,
13
13
  createComputerUseAuthorizationRequest,
@@ -20,14 +20,14 @@ import {
20
20
  getZeroOrg,
21
21
  getZeroOrgMembers,
22
22
  hasUnsafeFirewallPath
23
- } from "./chunk-ZIQ4L34C.js";
23
+ } from "./chunk-KNATFPLD.js";
24
24
  import "./chunk-LTDQISD7.js";
25
25
  import {
26
26
  ApiRequestError,
27
27
  getApiUrl,
28
28
  source_default,
29
29
  withErrorHandler
30
- } from "./chunk-ROSENSQ2.js";
30
+ } from "./chunk-AMJAGFT7.js";
31
31
  import "./chunk-LRHXR7JT.js";
32
32
  import {
33
33
  Command,
@@ -1191,4 +1191,4 @@ Notes:
1191
1191
  export {
1192
1192
  zeroDoctorCommand
1193
1193
  };
1194
- //# sourceMappingURL=doctor-MAZFTFTF.js.map
1194
+ //# sourceMappingURL=doctor-32RBQ2VC.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
  getPlatformOrigin
6
- } from "./chunk-45KH4JE2.js";
6
+ } from "./chunk-W6OJY7IX.js";
7
7
  import {
8
8
  buildPresentationRunbookInstructionLines,
9
9
  findDesignSystem,
@@ -25,7 +25,7 @@ import {
25
25
  getZeroAgentUserConnectors,
26
26
  listZeroConnectorCatalog,
27
27
  listZeroConnectorCatalogStatus
28
- } from "./chunk-ZIQ4L34C.js";
28
+ } from "./chunk-KNATFPLD.js";
29
29
  import "./chunk-LTDQISD7.js";
30
30
  import {
31
31
  generateWebImage,
@@ -33,7 +33,7 @@ import {
33
33
  generateWebVoice,
34
34
  source_default,
35
35
  withErrorHandler
36
- } from "./chunk-ROSENSQ2.js";
36
+ } from "./chunk-AMJAGFT7.js";
37
37
  import "./chunk-LRHXR7JT.js";
38
38
  import {
39
39
  Command,
@@ -2696,4 +2696,4 @@ var generateCommand = new Command().name("generate").description(
2696
2696
  export {
2697
2697
  generateCommand
2698
2698
  };
2699
- //# sourceMappingURL=generate-M5B3MIB7.js.map
2699
+ //# sourceMappingURL=generate-HFXHRZRA.js.map
@@ -5,11 +5,11 @@ import {
5
5
  completeGithubFileUpload,
6
6
  downloadGithubFile,
7
7
  initGithubFileUpload
8
- } from "./chunk-ZIQ4L34C.js";
8
+ } from "./chunk-KNATFPLD.js";
9
9
  import "./chunk-LTDQISD7.js";
10
10
  import {
11
11
  withErrorHandler
12
- } from "./chunk-ROSENSQ2.js";
12
+ } from "./chunk-AMJAGFT7.js";
13
13
  import "./chunk-LRHXR7JT.js";
14
14
  import {
15
15
  Command
@@ -200,4 +200,4 @@ Examples:
200
200
  export {
201
201
  zeroGithubCommand
202
202
  };
203
- //# sourceMappingURL=github-22VLS2YV.js.map
203
+ //# sourceMappingURL=github-QJ42LNUG.js.map
@@ -10,11 +10,11 @@ import {
10
10
  getGoal,
11
11
  pauseGoal,
12
12
  resumeGoal
13
- } from "./chunk-ZIQ4L34C.js";
13
+ } from "./chunk-KNATFPLD.js";
14
14
  import "./chunk-LTDQISD7.js";
15
15
  import {
16
16
  withErrorHandler
17
- } from "./chunk-ROSENSQ2.js";
17
+ } from "./chunk-AMJAGFT7.js";
18
18
  import "./chunk-LRHXR7JT.js";
19
19
  import {
20
20
  Command
@@ -77,4 +77,4 @@ var zeroGoalCommand = new Command().name("goal").description("Manage the current
77
77
  export {
78
78
  zeroGoalCommand
79
79
  };
80
- //# sourceMappingURL=goal-TLKZJLMF.js.map
80
+ //# sourceMappingURL=goal-XYHZLRA2.js.map
@@ -11,12 +11,12 @@ import {
11
11
  getHostedSiteFiles,
12
12
  hostedArtifactKindSchema,
13
13
  prepareHostedSite
14
- } from "./chunk-ZIQ4L34C.js";
14
+ } from "./chunk-KNATFPLD.js";
15
15
  import "./chunk-LTDQISD7.js";
16
16
  import {
17
17
  source_default,
18
18
  withErrorHandler
19
- } from "./chunk-ROSENSQ2.js";
19
+ } from "./chunk-AMJAGFT7.js";
20
20
  import "./chunk-LRHXR7JT.js";
21
21
  import {
22
22
  Command
@@ -548,4 +548,4 @@ Notes:
548
548
  export {
549
549
  zeroHostCommand
550
550
  };
551
- //# sourceMappingURL=host-YS4PI5HB.js.map
551
+ //# sourceMappingURL=host-ULVM7XLM.js.map
package/index.js CHANGED
@@ -36,7 +36,7 @@ import {
36
36
  renderRunCreated,
37
37
  require_dist,
38
38
  showNextSteps
39
- } from "./chunk-DB6PVT7C.js";
39
+ } from "./chunk-74K2DHPM.js";
40
40
  import {
41
41
  Kn,
42
42
  uo
@@ -74,7 +74,7 @@ import {
74
74
  prepareStorage,
75
75
  searchLogs,
76
76
  volumeConfigSchema
77
- } from "./chunk-ZIQ4L34C.js";
77
+ } from "./chunk-KNATFPLD.js";
78
78
  import "./chunk-LTDQISD7.js";
79
79
  import {
80
80
  ApiRequestError,
@@ -88,10 +88,10 @@ import {
88
88
  saveConfig,
89
89
  source_default,
90
90
  withErrorHandler
91
- } from "./chunk-ROSENSQ2.js";
91
+ } from "./chunk-AMJAGFT7.js";
92
92
  import {
93
93
  configureGlobalProxyFromEnv
94
- } from "./chunk-VACABCPP.js";
94
+ } from "./chunk-GND62LDP.js";
95
95
  import "./chunk-LRHXR7JT.js";
96
96
  import {
97
97
  Command,
@@ -429,7 +429,7 @@ function getConfigPath() {
429
429
  return join(os.homedir(), ".vm0", "config.json");
430
430
  }
431
431
  var infoCommand = new Command().name("info").description("Display environment and debug information").action(async () => {
432
- console.log(source_default.bold(`VM0 CLI v${"9.241.6"}`));
432
+ console.log(source_default.bold(`VM0 CLI v${"9.241.7"}`));
433
433
  console.log();
434
434
  const config = await loadConfig();
435
435
  const hasEnvToken = !!process.env.VM0_TOKEN;
@@ -1132,7 +1132,7 @@ var composeCommand = new Command().name("compose").description("Create or update
1132
1132
  options.autoUpdate = false;
1133
1133
  }
1134
1134
  if (options.autoUpdate !== false) {
1135
- await startSilentUpgrade("9.241.6");
1135
+ await startSilentUpgrade("9.241.7");
1136
1136
  }
1137
1137
  try {
1138
1138
  const { config, agentName, agent, basePath } = await loadAndValidateConfig(resolvedConfigFile);
@@ -1229,7 +1229,7 @@ var mainRunCommand = new Command().name("run").description("Run an agent").argum
1229
1229
  withErrorHandler(
1230
1230
  async (identifier, prompt, options) => {
1231
1231
  if (options.autoUpdate !== false) {
1232
- await startSilentUpgrade("9.241.6");
1232
+ await startSilentUpgrade("9.241.7");
1233
1233
  }
1234
1234
  const { name, version } = parseIdentifier(identifier);
1235
1235
  let composeId;
@@ -3094,13 +3094,13 @@ var upgradeCommand = new Command().name("upgrade").description("Upgrade vm0 CLI
3094
3094
  if (latestVersion === null) {
3095
3095
  throw new Error("Could not check for updates. Please try again later.");
3096
3096
  }
3097
- if (latestVersion === "9.241.6") {
3098
- console.log(source_default.green(`\u2713 Already up to date (${"9.241.6"})`));
3097
+ if (latestVersion === "9.241.7") {
3098
+ console.log(source_default.green(`\u2713 Already up to date (${"9.241.7"})`));
3099
3099
  return;
3100
3100
  }
3101
3101
  console.log(
3102
3102
  source_default.yellow(
3103
- `Current version: ${"9.241.6"} -> Latest version: ${latestVersion}`
3103
+ `Current version: ${"9.241.7"} -> Latest version: ${latestVersion}`
3104
3104
  )
3105
3105
  );
3106
3106
  console.log();
@@ -3127,7 +3127,7 @@ var upgradeCommand = new Command().name("upgrade").description("Upgrade vm0 CLI
3127
3127
  const success = await performUpgrade(packageManager);
3128
3128
  if (success) {
3129
3129
  console.log(
3130
- source_default.green(`\u2713 Upgraded from ${"9.241.6"} to ${latestVersion}`)
3130
+ source_default.green(`\u2713 Upgraded from ${"9.241.7"} to ${latestVersion}`)
3131
3131
  );
3132
3132
  return;
3133
3133
  }
@@ -3194,7 +3194,7 @@ var whoamiCommand = new Command().name("whoami").description("Show current ident
3194
3194
 
3195
3195
  // src/index.ts
3196
3196
  var program = new Command();
3197
- program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.241.6");
3197
+ program.name("vm0").description("VM0 CLI - Build and run agents with natural language").version("9.241.7");
3198
3198
  program.addCommand(authCommand);
3199
3199
  program.addCommand(infoCommand);
3200
3200
  program.addCommand(composeCommand);
@@ -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-23RODAOV.js";
6
+ } from "./chunk-GGSXTOLM.js";
7
7
  import {
8
8
  EventRenderer,
9
9
  EventStreamNormalizer,
@@ -14,17 +14,17 @@ import {
14
14
  parseBoundedLogCount,
15
15
  parsePositiveLogCount,
16
16
  parseTime
17
- } from "./chunk-DB6PVT7C.js";
17
+ } from "./chunk-74K2DHPM.js";
18
18
  import "./chunk-DO6BPJ4N.js";
19
19
  import {
20
20
  getZeroRunAgentEvents,
21
21
  listZeroLogs
22
- } from "./chunk-ZIQ4L34C.js";
22
+ } from "./chunk-KNATFPLD.js";
23
23
  import "./chunk-LTDQISD7.js";
24
24
  import {
25
25
  source_default,
26
26
  withErrorHandler
27
- } from "./chunk-ROSENSQ2.js";
27
+ } from "./chunk-AMJAGFT7.js";
28
28
  import "./chunk-LRHXR7JT.js";
29
29
  import {
30
30
  Command
@@ -270,4 +270,4 @@ Examples:
270
270
  export {
271
271
  zeroLogsCommand
272
272
  };
273
- //# sourceMappingURL=logs-XFCAXCU5.js.map
273
+ //# sourceMappingURL=logs-NNNCGXPE.js.map
@@ -4,19 +4,19 @@ const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  findConnectorStatusItem,
6
6
  resolveAgentContext
7
- } from "./chunk-BYBGLFHQ.js";
7
+ } from "./chunk-KYKDHMRW.js";
8
8
  import {
9
9
  getPlatformOrigin
10
- } from "./chunk-45KH4JE2.js";
10
+ } from "./chunk-W6OJY7IX.js";
11
11
  import {
12
12
  createZeroMailDraft,
13
13
  listZeroConnectorCatalogStatus
14
- } from "./chunk-ZIQ4L34C.js";
14
+ } from "./chunk-KNATFPLD.js";
15
15
  import "./chunk-LTDQISD7.js";
16
16
  import {
17
17
  source_default,
18
18
  withErrorHandler
19
- } from "./chunk-ROSENSQ2.js";
19
+ } from "./chunk-AMJAGFT7.js";
20
20
  import "./chunk-LRHXR7JT.js";
21
21
  import {
22
22
  Command
@@ -187,7 +187,7 @@ Notes:
187
187
  });
188
188
  console.log(source_default.green("\u2713 Mail draft card created"));
189
189
  console.log(source_default.dim(` Sender: ${result.mailDraft.from}`));
190
- console.log(source_default.dim(` Message: ${result.messageId}`));
190
+ console.log(source_default.dim(` Draft: ${result.mailDraftId}`));
191
191
  console.log(
192
192
  source_default.dim(
193
193
  " The card is already visible in chat; do not repeat the draft in your response"
@@ -201,4 +201,4 @@ var zeroMailCommand = new Command().name("mail").description("Review and send ma
201
201
  export {
202
202
  zeroMailCommand
203
203
  };
204
- //# sourceMappingURL=mail-42SH33XO.js.map
204
+ //# sourceMappingURL=mail-YONA4DQI.js.map