@vm0/cli 9.220.9 → 9.221.2

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 (81) hide show
  1. package/{agent-MN7TVQST.js → agent-GX5GKB66.js} +4 -4
  2. package/{automation-2GINU5ZY.js → automation-2L6ZWOVS.js} +5 -5
  3. package/{banking-54WV3SJC.js → banking-JH4Z6VXP.js} +2 -2
  4. package/{chat-LV6COSGX.js → chat-U72VMG3L.js} +2 -2
  5. package/{chunk-KDBL2O2V.js → chunk-72TANY43.js} +35 -4
  6. package/{chunk-KDBL2O2V.js.map → chunk-72TANY43.js.map} +1 -1
  7. package/{chunk-CYWWF36Q.js → chunk-BEIQHUJ4.js} +227 -5
  8. package/chunk-BEIQHUJ4.js.map +1 -0
  9. package/{chunk-5ALOKBOR.js → chunk-GHWQV7LJ.js} +3 -3
  10. package/{chunk-EN6FCNGQ.js → chunk-NLWBKD2Z.js} +2 -2
  11. package/{chunk-6EQBRH43.js → chunk-OSQMUZWJ.js} +3 -3
  12. package/{chunk-Y32HZVJW.js → chunk-R43UJWLZ.js} +2 -2
  13. package/{chunk-NX2HMZVA.js → chunk-RNAKPBX4.js} +2 -2
  14. package/{chunk-5I74ILYT.js → chunk-XXGIE5L3.js} +2 -2
  15. package/{chunk-UHSBXPLG.js → chunk-XXNSCIKG.js} +2 -2
  16. package/{computer-use-YNLJDQ3C.js → computer-use-SMN2CXH7.js} +312 -5
  17. package/computer-use-SMN2CXH7.js.map +1 -0
  18. package/{connector-6MFNUJ5L.js → connector-6564W6HR.js} +3 -3
  19. package/{credit-J4CRCB4Y.js → credit-VDBXCSHA.js} +2 -2
  20. package/{developer-support-4YBC7BAA.js → developer-support-G37VTHPN.js} +2 -2
  21. package/{doctor-U7SFOJI7.js → doctor-3DZPMAYZ.js} +5 -5
  22. package/{generate-IKHJCXTJ.js → generate-5MUNQQDV.js} +3 -3
  23. package/{github-ULVPVA5M.js → github-R7HNMXEM.js} +2 -2
  24. package/{goal-BD5KSJEN.js → goal-BKUINRVP.js} +2 -2
  25. package/{host-ZCKYHEIV.js → host-2UXXELVG.js} +2 -2
  26. package/index.js +13 -13
  27. package/{logs-5NVFYF6V.js → logs-754BKZIP.js} +6 -6
  28. package/{maps-P3XXE5D7.js → maps-4DGIQPSF.js} +2 -2
  29. package/{model-NNNGUP53.js → model-USDV5ZAL.js} +3 -3
  30. package/{model-provider-WWVZBYBD.js → model-provider-C65DGDDG.js} +3 -3
  31. package/{org-EOESJ7XH.js → org-JTZYNVT3.js} +2 -2
  32. package/package.json +1 -1
  33. package/{phone-KES3CEYN.js → phone-343RPK5X.js} +2 -2
  34. package/{preference-LB33W7XC.js → preference-TW6EKL7O.js} +2 -2
  35. package/{resource-CGDPLKRR.js → resource-KYZTWKTZ.js} +2 -2
  36. package/{search-2PCUPIRS.js → search-DI4A5TUK.js} +6 -6
  37. package/{secret-GEKBQVSF.js → secret-ZAGJQFL4.js} +3 -3
  38. package/{slack-7G7IJW2R.js → slack-BKELT5TI.js} +2 -2
  39. package/{telegram-ELSOL2CE.js → telegram-R3ZA64B5.js} +2 -2
  40. package/{variable-JLAQJ3K2.js → variable-CRFFNQFU.js} +2 -2
  41. package/{web-GN2DFNDT.js → web-57P4IO3D.js} +2 -2
  42. package/{whoami-X4RI5OMA.js → whoami-ZLWH6B4Y.js} +4 -4
  43. package/{workflow-O6NL67RE.js → workflow-DA3W75DO.js} +2 -2
  44. package/zero.js +31 -31
  45. package/chunk-CYWWF36Q.js.map +0 -1
  46. package/computer-use-YNLJDQ3C.js.map +0 -1
  47. /package/{agent-MN7TVQST.js.map → agent-GX5GKB66.js.map} +0 -0
  48. /package/{automation-2GINU5ZY.js.map → automation-2L6ZWOVS.js.map} +0 -0
  49. /package/{banking-54WV3SJC.js.map → banking-JH4Z6VXP.js.map} +0 -0
  50. /package/{chat-LV6COSGX.js.map → chat-U72VMG3L.js.map} +0 -0
  51. /package/{chunk-5ALOKBOR.js.map → chunk-GHWQV7LJ.js.map} +0 -0
  52. /package/{chunk-EN6FCNGQ.js.map → chunk-NLWBKD2Z.js.map} +0 -0
  53. /package/{chunk-6EQBRH43.js.map → chunk-OSQMUZWJ.js.map} +0 -0
  54. /package/{chunk-Y32HZVJW.js.map → chunk-R43UJWLZ.js.map} +0 -0
  55. /package/{chunk-NX2HMZVA.js.map → chunk-RNAKPBX4.js.map} +0 -0
  56. /package/{chunk-5I74ILYT.js.map → chunk-XXGIE5L3.js.map} +0 -0
  57. /package/{chunk-UHSBXPLG.js.map → chunk-XXNSCIKG.js.map} +0 -0
  58. /package/{connector-6MFNUJ5L.js.map → connector-6564W6HR.js.map} +0 -0
  59. /package/{credit-J4CRCB4Y.js.map → credit-VDBXCSHA.js.map} +0 -0
  60. /package/{developer-support-4YBC7BAA.js.map → developer-support-G37VTHPN.js.map} +0 -0
  61. /package/{doctor-U7SFOJI7.js.map → doctor-3DZPMAYZ.js.map} +0 -0
  62. /package/{generate-IKHJCXTJ.js.map → generate-5MUNQQDV.js.map} +0 -0
  63. /package/{github-ULVPVA5M.js.map → github-R7HNMXEM.js.map} +0 -0
  64. /package/{goal-BD5KSJEN.js.map → goal-BKUINRVP.js.map} +0 -0
  65. /package/{host-ZCKYHEIV.js.map → host-2UXXELVG.js.map} +0 -0
  66. /package/{logs-5NVFYF6V.js.map → logs-754BKZIP.js.map} +0 -0
  67. /package/{maps-P3XXE5D7.js.map → maps-4DGIQPSF.js.map} +0 -0
  68. /package/{model-NNNGUP53.js.map → model-USDV5ZAL.js.map} +0 -0
  69. /package/{model-provider-WWVZBYBD.js.map → model-provider-C65DGDDG.js.map} +0 -0
  70. /package/{org-EOESJ7XH.js.map → org-JTZYNVT3.js.map} +0 -0
  71. /package/{phone-KES3CEYN.js.map → phone-343RPK5X.js.map} +0 -0
  72. /package/{preference-LB33W7XC.js.map → preference-TW6EKL7O.js.map} +0 -0
  73. /package/{resource-CGDPLKRR.js.map → resource-KYZTWKTZ.js.map} +0 -0
  74. /package/{search-2PCUPIRS.js.map → search-DI4A5TUK.js.map} +0 -0
  75. /package/{secret-GEKBQVSF.js.map → secret-ZAGJQFL4.js.map} +0 -0
  76. /package/{slack-7G7IJW2R.js.map → slack-BKELT5TI.js.map} +0 -0
  77. /package/{telegram-ELSOL2CE.js.map → telegram-R3ZA64B5.js.map} +0 -0
  78. /package/{variable-JLAQJ3K2.js.map → variable-CRFFNQFU.js.map} +0 -0
  79. /package/{web-GN2DFNDT.js.map → web-57P4IO3D.js.map} +0 -0
  80. /package/{whoami-X4RI5OMA.js.map → whoami-ZLWH6B4Y.js.map} +0 -0
  81. /package/{workflow-O6NL67RE.js.map → workflow-DA3W75DO.js.map} +0 -0
@@ -12,10 +12,10 @@ import {
12
12
  formatIsoTimestamp,
13
13
  isSupportedFramework,
14
14
  isUUID
15
- } from "./chunk-KDBL2O2V.js";
15
+ } from "./chunk-72TANY43.js";
16
16
  import {
17
17
  searchZeroLogs
18
- } from "./chunk-CYWWF36Q.js";
18
+ } from "./chunk-BEIQHUJ4.js";
19
19
  import {
20
20
  withErrorHandler
21
21
  } from "./chunk-3F4RFLPX.js";
@@ -178,4 +178,4 @@ export {
178
178
  runLogsSearch,
179
179
  searchCommand
180
180
  };
181
- //# sourceMappingURL=chunk-5ALOKBOR.js.map
181
+ //# sourceMappingURL=chunk-GHWQV7LJ.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
  UNKNOWN_PERMISSION_GRANT
6
- } from "./chunk-CYWWF36Q.js";
6
+ } from "./chunk-BEIQHUJ4.js";
7
7
  import {
8
8
  init_esm_shims
9
9
  } from "./chunk-DIRAZ3YX.js";
@@ -3089,4 +3089,4 @@ export {
3089
3089
  resolveFirewallMetadataPolicies,
3090
3090
  permissionGrantsToFirewallPolicies
3091
3091
  };
3092
- //# sourceMappingURL=chunk-EN6FCNGQ.js.map
3092
+ //# sourceMappingURL=chunk-NLWBKD2Z.js.map
@@ -50,7 +50,7 @@ if (DSN) {
50
50
  Sentry.init({
51
51
  dsn: DSN,
52
52
  environment: process.env.SENTRY_ENVIRONMENT ?? "production",
53
- release: "9.220.9",
53
+ release: "9.221.2",
54
54
  sendDefaultPii: false,
55
55
  tracesSampleRate: 0,
56
56
  shutdownTimeout: 500,
@@ -69,7 +69,7 @@ if (DSN) {
69
69
  }
70
70
  });
71
71
  Sentry.setContext("cli", {
72
- version: "9.220.9",
72
+ version: "9.221.2",
73
73
  command: process.argv.slice(2).join(" ")
74
74
  });
75
75
  Sentry.setContext("runtime", {
@@ -146,4 +146,4 @@ async function configureGlobalProxyFromEnv() {
146
146
  export {
147
147
  configureGlobalProxyFromEnv
148
148
  };
149
- //# sourceMappingURL=chunk-6EQBRH43.js.map
149
+ //# sourceMappingURL=chunk-OSQMUZWJ.js.map
@@ -4,7 +4,7 @@ const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  loadFirewallPermissionMetadata,
6
6
  resolveFirewallMetadataPolicies
7
- } from "./chunk-EN6FCNGQ.js";
7
+ } from "./chunk-NLWBKD2Z.js";
8
8
  import {
9
9
  source_default
10
10
  } from "./chunk-JUTUEPIR.js";
@@ -87,4 +87,4 @@ export {
87
87
  policyIcon,
88
88
  loadConnectorPermissionInfos
89
89
  };
90
- //# sourceMappingURL=chunk-Y32HZVJW.js.map
90
+ //# sourceMappingURL=chunk-R43UJWLZ.js.map
@@ -8,7 +8,7 @@ import {
8
8
  parseSegment,
9
9
  splitPathSegments,
10
10
  validateBaseUrl
11
- } from "./chunk-CYWWF36Q.js";
11
+ } from "./chunk-BEIQHUJ4.js";
12
12
  import {
13
13
  init_esm_shims
14
14
  } from "./chunk-DIRAZ3YX.js";
@@ -609,4 +609,4 @@ export {
609
609
  matchFirewallBaseUrl,
610
610
  findMatchingRoutingPermissions
611
611
  };
612
- //# sourceMappingURL=chunk-NX2HMZVA.js.map
612
+ //# sourceMappingURL=chunk-RNAKPBX4.js.map
@@ -5,7 +5,7 @@ import {
5
5
  CONNECTOR_TYPES,
6
6
  CONNECTOR_TYPE_KEYS,
7
7
  connectorAuthMethodIdSchema
8
- } from "./chunk-CYWWF36Q.js";
8
+ } from "./chunk-BEIQHUJ4.js";
9
9
  import {
10
10
  init_esm_shims
11
11
  } from "./chunk-DIRAZ3YX.js";
@@ -181,4 +181,4 @@ export {
181
181
  hasRequiredConnectorAuthMethodScopes,
182
182
  getConnectorAuthMethodScopeDiff
183
183
  };
184
- //# sourceMappingURL=chunk-5I74ILYT.js.map
184
+ //# sourceMappingURL=chunk-XXGIE5L3.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-CYWWF36Q.js";
6
+ } from "./chunk-BEIQHUJ4.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-UHSBXPLG.js.map
43
+ //# sourceMappingURL=chunk-XXNSCIKG.js.map
@@ -2,11 +2,14 @@
2
2
  import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
+ COMPUTER_USE_FILESYSTEM_PLUGIN,
6
+ createComputerUsePluginCommand,
5
7
  createComputerUseReadCommand,
6
8
  createComputerUseWriteCommand,
9
+ fetchComputerUsePluginContent,
7
10
  fetchComputerUseScreenshot,
8
11
  getComputerUseCommand
9
- } from "./chunk-CYWWF36Q.js";
12
+ } from "./chunk-BEIQHUJ4.js";
10
13
  import {
11
14
  ApiRequestError,
12
15
  withErrorHandler
@@ -25,6 +28,7 @@ init_esm_shims();
25
28
  import { mkdir, writeFile } from "fs/promises";
26
29
  import { join } from "path";
27
30
  var COMPUTER_USE_OUTPUT_DIR = "/tmp/vm0/computer-use";
31
+ var COMPUTER_USE_PLUGIN_OUTPUT_DIR = `${COMPUTER_USE_OUTPUT_DIR}/plugins`;
28
32
  var DATA_URL_PATTERN = /^data:([^;,]+);base64,(.*)$/s;
29
33
  var COMPUTER_USE_REQUIRED_CAPABILITY_MESSAGE = "Missing required capability: computer-use:write";
30
34
  var COMPUTER_USE_AUTHORIZATION_REQUIRED_ERROR = "COMPUTER_USE_AUTHORIZATION_REQUIRED";
@@ -277,7 +281,83 @@ async function commandOutputText(command) {
277
281
  }
278
282
  return await formatComputerUseResultForConsole(command.result, command.id);
279
283
  }
280
- async function waitForCommand(commandId, timeoutSeconds) {
284
+ function pluginContentPointerType(value) {
285
+ if (!isRecord(value)) {
286
+ return null;
287
+ }
288
+ const type = value.type;
289
+ return type === "s3" || type === "expired" ? type : null;
290
+ }
291
+ function pluginContentFileName(value) {
292
+ if (!isRecord(value) || typeof value.fileName !== "string") {
293
+ return "plugin-content.bin";
294
+ }
295
+ return sanitizeFilenamePart(value.fileName, "plugin-content.bin");
296
+ }
297
+ async function writePluginContent(commandId, result) {
298
+ const downloaded = await fetchComputerUsePluginContent(commandId);
299
+ const pointerFileName = pluginContentFileName(result.pluginContent);
300
+ const directoryName = sanitizeFilenamePart(commandId, "command");
301
+ const outputPath = join(
302
+ COMPUTER_USE_PLUGIN_OUTPUT_DIR,
303
+ directoryName,
304
+ sanitizeFilenamePart(
305
+ downloaded.fileName || pointerFileName,
306
+ pointerFileName
307
+ )
308
+ );
309
+ await mkdir(join(COMPUTER_USE_PLUGIN_OUTPUT_DIR, directoryName), {
310
+ recursive: true
311
+ });
312
+ await writeFile(outputPath, downloaded.buffer);
313
+ return outputPath;
314
+ }
315
+ function formatHumanValue(value) {
316
+ if (typeof value === "string") {
317
+ return value;
318
+ }
319
+ if (typeof value === "number" || typeof value === "boolean") {
320
+ return String(value);
321
+ }
322
+ if (Array.isArray(value)) {
323
+ return value.map(formatHumanValue).join("\n");
324
+ }
325
+ if (value === null || value === void 0) {
326
+ return "";
327
+ }
328
+ return JSON.stringify(value, null, 2);
329
+ }
330
+ async function pluginCommandOutputText(command) {
331
+ const result = command.result;
332
+ if (!result) {
333
+ return "";
334
+ }
335
+ const content = stringField(result, "content");
336
+ if (content) {
337
+ return content;
338
+ }
339
+ const pluginContentType = pluginContentPointerType(result.pluginContent);
340
+ if (pluginContentType === "s3") {
341
+ const outputPath = await writePluginContent(command.id, result);
342
+ const sizeBytes = typeof result.sizeBytes === "number" ? ` (${result.sizeBytes} bytes)` : "";
343
+ return `Saved plugin content${sizeBytes}: ${outputPath}`;
344
+ }
345
+ if (pluginContentType === "expired") {
346
+ return "Plugin content expired.";
347
+ }
348
+ const lines = [];
349
+ for (const [key, value] of Object.entries(result)) {
350
+ if (key === "pluginContent") {
351
+ continue;
352
+ }
353
+ const formatted = formatHumanValue(value);
354
+ if (formatted) {
355
+ lines.push(`${key}: ${formatted}`);
356
+ }
357
+ }
358
+ return lines.join("\n");
359
+ }
360
+ async function waitForCommand(commandId, timeoutSeconds, formatter = commandOutputText) {
281
361
  const deadline = Date.now() + timeoutSeconds * 1e3;
282
362
  while (Date.now() <= deadline) {
283
363
  const command = await getComputerUseCommand(commandId);
@@ -296,7 +376,7 @@ async function waitForCommand(commandId, timeoutSeconds) {
296
376
  command.error ? `${command.error.code}: ${command.error.message}` : "Computer-use command failed"
297
377
  );
298
378
  }
299
- const text = await commandOutputText(command);
379
+ const text = await formatter(command);
300
380
  if (text) {
301
381
  console.log(text);
302
382
  }
@@ -330,9 +410,53 @@ async function runWriteCommand(kind, options, payload) {
330
410
  throwComputerUseAuthorizationGuidanceError(error);
331
411
  }
332
412
  }
413
+ function parseArgumentsJson(value) {
414
+ if (!value) {
415
+ return {};
416
+ }
417
+ const parsed = JSON.parse(value);
418
+ if (!isRecord(parsed)) {
419
+ throw new Error("arguments-json must be a JSON object");
420
+ }
421
+ return parsed;
422
+ }
423
+ function withArgumentsJson(options, fallback) {
424
+ return options.argumentsJson ? parseArgumentsJson(options.argumentsJson) : fallback;
425
+ }
426
+ function parseOptionalPositiveInteger(value, label) {
427
+ if (value === void 0) {
428
+ return void 0;
429
+ }
430
+ return parsePositiveInteger(value, label);
431
+ }
432
+ async function runFilesystemPluginCommand(tool, options, args) {
433
+ const timeoutSeconds = parseTimeoutSeconds(options.timeout);
434
+ const body = {
435
+ plugin: COMPUTER_USE_FILESYSTEM_PLUGIN,
436
+ tool,
437
+ arguments: args,
438
+ timeoutMs: timeoutSeconds * 1e3
439
+ };
440
+ try {
441
+ const created = await createComputerUsePluginCommand(body);
442
+ await waitForCommand(
443
+ created.commandId,
444
+ timeoutSeconds,
445
+ pluginCommandOutputText
446
+ );
447
+ } catch (error) {
448
+ throwComputerUseAuthorizationGuidanceError(error);
449
+ }
450
+ }
333
451
  function addTargetOptions(command) {
334
452
  return command.option("--timeout <seconds>", "Maximum time to wait", "30");
335
453
  }
454
+ function addPluginOptions(command) {
455
+ return addTargetOptions(command).option(
456
+ "--arguments-json <json>",
457
+ "Raw tool arguments object for advanced cases"
458
+ );
459
+ }
336
460
  function appOption(command) {
337
461
  return command.requiredOption(
338
462
  "--app <bundleId>",
@@ -467,9 +591,192 @@ var openAppCommand = appOption(
467
591
  )
468
592
  )
469
593
  );
470
- var zeroComputerUseCommand = new Command().name("computer-use").description("Desktop app computer use through Zero CLI").addHelpText("after", COMPUTER_USE_HELP_TEXT).addCommand(listAppsCommand).addCommand(getAppStateCommand).addCommand(clickCommand).addCommand(scrollCommand).addCommand(setValueCommand).addCommand(typeTextCommand).addCommand(pressKeyCommand).addCommand(performActionCommand).addCommand(openAppCommand);
594
+ var filesystemListAllowedDirectoriesCommand = addPluginOptions(
595
+ new Command().name("list_allowed_directories").description("List directories enabled in Zero Desktop").action(
596
+ withErrorHandler(async (options) => {
597
+ await runFilesystemPluginCommand(
598
+ "list_allowed_directories",
599
+ options,
600
+ withArgumentsJson(options, {})
601
+ );
602
+ })
603
+ )
604
+ );
605
+ var filesystemReadTextFileCommand = addPluginOptions(
606
+ new Command().name("read_text_file").description("Read a text file").requiredOption("--path <path>", "File path").option("--head <lines>", "Read the first N lines").option("--tail <lines>", "Read the last N lines").action(
607
+ withErrorHandler(async (options) => {
608
+ await runFilesystemPluginCommand(
609
+ "read_text_file",
610
+ options,
611
+ withArgumentsJson(options, {
612
+ path: options.path,
613
+ ...options.head ? { head: parseOptionalPositiveInteger(options.head, "head") } : {},
614
+ ...options.tail ? { tail: parseOptionalPositiveInteger(options.tail, "tail") } : {}
615
+ })
616
+ );
617
+ })
618
+ )
619
+ );
620
+ var filesystemReadMediaFileCommand = addPluginOptions(
621
+ new Command().name("read_media_file").description("Read an image or audio file").requiredOption("--path <path>", "File path").action(
622
+ withErrorHandler(async (options) => {
623
+ await runFilesystemPluginCommand(
624
+ "read_media_file",
625
+ options,
626
+ withArgumentsJson(options, { path: options.path })
627
+ );
628
+ })
629
+ )
630
+ );
631
+ var filesystemReadMultipleFilesCommand = addPluginOptions(
632
+ new Command().name("read_multiple_files").description("Read multiple text files").requiredOption("--path <path...>", "File paths").action(
633
+ withErrorHandler(async (options) => {
634
+ await runFilesystemPluginCommand(
635
+ "read_multiple_files",
636
+ options,
637
+ withArgumentsJson(options, { paths: options.path })
638
+ );
639
+ })
640
+ )
641
+ );
642
+ var filesystemWriteFileCommand = addPluginOptions(
643
+ new Command().name("write_file").description("Write a file").requiredOption("--path <path>", "File path").requiredOption("--content <text>", "File content").action(
644
+ withErrorHandler(async (options) => {
645
+ await runFilesystemPluginCommand(
646
+ "write_file",
647
+ options,
648
+ withArgumentsJson(options, {
649
+ path: options.path,
650
+ content: options.content
651
+ })
652
+ );
653
+ })
654
+ )
655
+ );
656
+ var filesystemEditFileCommand = addPluginOptions(
657
+ new Command().name("edit_file").description("Edit a file").requiredOption("--path <path>", "File path").option("--old-text <text>", "Text to replace").option("--new-text <text>", "Replacement text").option("--dry-run", "Preview changes without writing").action(
658
+ withErrorHandler(async (options) => {
659
+ if (!options.argumentsJson && (!options.oldText || options.newText === void 0)) {
660
+ throw new Error(
661
+ "edit_file requires --old-text and --new-text, or --arguments-json"
662
+ );
663
+ }
664
+ await runFilesystemPluginCommand(
665
+ "edit_file",
666
+ options,
667
+ withArgumentsJson(options, {
668
+ path: options.path,
669
+ edits: [
670
+ {
671
+ oldText: options.oldText,
672
+ newText: options.newText
673
+ }
674
+ ],
675
+ dryRun: options.dryRun === true
676
+ })
677
+ );
678
+ })
679
+ )
680
+ );
681
+ var filesystemCreateDirectoryCommand = addPluginOptions(
682
+ new Command().name("create_directory").description("Create a directory").requiredOption("--path <path>", "Directory path").action(
683
+ withErrorHandler(async (options) => {
684
+ await runFilesystemPluginCommand(
685
+ "create_directory",
686
+ options,
687
+ withArgumentsJson(options, { path: options.path })
688
+ );
689
+ })
690
+ )
691
+ );
692
+ var filesystemListDirectoryCommand = addPluginOptions(
693
+ new Command().name("list_directory").description("List directory entries").requiredOption("--path <path>", "Directory path").action(
694
+ withErrorHandler(async (options) => {
695
+ await runFilesystemPluginCommand(
696
+ "list_directory",
697
+ options,
698
+ withArgumentsJson(options, { path: options.path })
699
+ );
700
+ })
701
+ )
702
+ );
703
+ var filesystemListDirectoryWithSizesCommand = addPluginOptions(
704
+ new Command().name("list_directory_with_sizes").description("List directory entries with sizes").requiredOption("--path <path>", "Directory path").option("--sort-by <field>", "Sort by name or size", "name").action(
705
+ withErrorHandler(
706
+ async (options) => {
707
+ await runFilesystemPluginCommand(
708
+ "list_directory_with_sizes",
709
+ options,
710
+ withArgumentsJson(options, {
711
+ path: options.path,
712
+ sortBy: options.sortBy ?? "name"
713
+ })
714
+ );
715
+ }
716
+ )
717
+ )
718
+ );
719
+ var filesystemDirectoryTreeCommand = addPluginOptions(
720
+ new Command().name("directory_tree").description("Return a directory tree").requiredOption("--path <path>", "Directory path").option("--exclude-pattern <pattern...>", "Patterns to exclude").action(
721
+ withErrorHandler(async (options) => {
722
+ await runFilesystemPluginCommand(
723
+ "directory_tree",
724
+ options,
725
+ withArgumentsJson(options, {
726
+ path: options.path,
727
+ ...options.excludePattern ? { excludePatterns: options.excludePattern } : {}
728
+ })
729
+ );
730
+ })
731
+ )
732
+ );
733
+ var filesystemMoveFileCommand = addPluginOptions(
734
+ new Command().name("move_file").description("Move or rename a file").requiredOption("--source <path>", "Source path").requiredOption("--destination <path>", "Destination path").action(
735
+ withErrorHandler(async (options) => {
736
+ await runFilesystemPluginCommand(
737
+ "move_file",
738
+ options,
739
+ withArgumentsJson(options, {
740
+ source: options.source,
741
+ destination: options.destination
742
+ })
743
+ );
744
+ })
745
+ )
746
+ );
747
+ var filesystemSearchFilesCommand = addPluginOptions(
748
+ new Command().name("search_files").description("Search files by name").requiredOption("--path <path>", "Directory path").requiredOption("--pattern <pattern>", "Search pattern").option("--exclude-pattern <pattern...>", "Patterns to exclude").action(
749
+ withErrorHandler(async (options) => {
750
+ await runFilesystemPluginCommand(
751
+ "search_files",
752
+ options,
753
+ withArgumentsJson(options, {
754
+ path: options.path,
755
+ pattern: options.pattern,
756
+ ...options.excludePattern ? { excludePatterns: options.excludePattern } : {}
757
+ })
758
+ );
759
+ })
760
+ )
761
+ );
762
+ var filesystemGetFileInfoCommand = addPluginOptions(
763
+ new Command().name("get_file_info").description("Get file metadata").requiredOption("--path <path>", "File or directory path").action(
764
+ withErrorHandler(async (options) => {
765
+ await runFilesystemPluginCommand(
766
+ "get_file_info",
767
+ options,
768
+ withArgumentsJson(options, { path: options.path })
769
+ );
770
+ })
771
+ )
772
+ );
773
+ var filesystemPluginCommand = new Command().name("filesystem").description("Use the Zero Desktop filesystem plugin").addCommand(filesystemListAllowedDirectoriesCommand).addCommand(filesystemReadTextFileCommand).addCommand(filesystemReadMediaFileCommand).addCommand(filesystemReadMultipleFilesCommand).addCommand(filesystemWriteFileCommand).addCommand(filesystemEditFileCommand).addCommand(filesystemCreateDirectoryCommand).addCommand(filesystemListDirectoryCommand).addCommand(filesystemListDirectoryWithSizesCommand).addCommand(filesystemDirectoryTreeCommand).addCommand(filesystemMoveFileCommand).addCommand(filesystemSearchFilesCommand).addCommand(filesystemGetFileInfoCommand);
774
+ var pluginCommand = addTargetOptions(
775
+ new Command().name("plugin").description("Use Desktop Computer Use plugins").addCommand(filesystemPluginCommand)
776
+ );
777
+ var zeroComputerUseCommand = new Command().name("computer-use").description("Desktop app computer use through Zero CLI").addHelpText("after", COMPUTER_USE_HELP_TEXT).addCommand(listAppsCommand).addCommand(getAppStateCommand).addCommand(clickCommand).addCommand(scrollCommand).addCommand(setValueCommand).addCommand(typeTextCommand).addCommand(pressKeyCommand).addCommand(performActionCommand).addCommand(openAppCommand).addCommand(pluginCommand);
471
778
  export {
472
779
  formatComputerUseResultForConsole,
473
780
  zeroComputerUseCommand
474
781
  };
475
- //# sourceMappingURL=computer-use-YNLJDQ3C.js.map
782
+ //# sourceMappingURL=computer-use-SMN2CXH7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/zero/computer-use/index.ts"],"sourcesContent":["import { mkdir, writeFile } from \"node:fs/promises\";\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 type ComputerUseFilesystemTool,\n type ComputerUsePluginCallBody,\n} from \"@vm0/api-contracts/contracts/zero-computer-use-plugins\";\nimport {\n ApiRequestError,\n createComputerUsePluginCommand,\n createComputerUseReadCommand,\n createComputerUseWriteCommand,\n fetchComputerUsePluginContent,\n fetchComputerUseScreenshot,\n getComputerUseCommand,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command/with-error-handler\";\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 COMPUTER_USE_OUTPUT_DIR = \"/tmp/vm0/computer-use\";\nconst COMPUTER_USE_PLUGIN_OUTPUT_DIR = `${COMPUTER_USE_OUTPUT_DIR}/plugins`;\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 COMPUTER_USE_OUTPUT_DIR,\n `${appName}-${snapshotId}.${extensionForMimeType(mimeType)}`,\n );\n\n await mkdir(COMPUTER_USE_OUTPUT_DIR, { recursive: true });\n await writeFile(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 COMPUTER_USE_OUTPUT_DIR,\n `${appName}-${snapshotId}.${extensionForMimeType(mimeType)}`,\n );\n\n await mkdir(COMPUTER_USE_OUTPUT_DIR, { recursive: true });\n await writeFile(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 COMPUTER_USE_OUTPUT_DIR,\n `${appName}-${snapshotId}.appState.txt`,\n );\n\n await mkdir(COMPUTER_USE_OUTPUT_DIR, { recursive: true });\n await writeFile(outputPath, appState, \"utf8\");\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 COMPUTER_USE_PLUGIN_OUTPUT_DIR,\n directoryName,\n sanitizeFilenamePart(\n downloaded.fileName || pointerFileName,\n pointerFileName,\n ),\n );\n await mkdir(join(COMPUTER_USE_PLUGIN_OUTPUT_DIR, directoryName), {\n recursive: true,\n });\n await writeFile(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(1_000);\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 pluginCommand = addTargetOptions(\n new Command()\n .name(\"plugin\")\n .description(\"Use Desktop Computer Use plugins\")\n .addCommand(filesystemPluginCommand),\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"],"mappings":"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","names":[]}
@@ -13,7 +13,7 @@ import {
13
13
  getConnectorAuthMethodScopeDiff,
14
14
  getConnectorEnvBindingEntries,
15
15
  hasRequiredConnectorAuthMethodScopes
16
- } from "./chunk-5I74ILYT.js";
16
+ } from "./chunk-XXGIE5L3.js";
17
17
  import "./chunk-LTDQISD7.js";
18
18
  import {
19
19
  CONNECTOR_TYPES,
@@ -29,7 +29,7 @@ import {
29
29
  listZeroConnectors,
30
30
  listZeroCustomConnectors,
31
31
  searchZeroConnectors
32
- } from "./chunk-CYWWF36Q.js";
32
+ } from "./chunk-BEIQHUJ4.js";
33
33
  import {
34
34
  withErrorHandler
35
35
  } from "./chunk-3F4RFLPX.js";
@@ -845,4 +845,4 @@ var zeroConnectorCommand = new Command().name("connector").description("Check th
845
845
  export {
846
846
  zeroConnectorCommand
847
847
  };
848
- //# sourceMappingURL=connector-6MFNUJ5L.js.map
848
+ //# sourceMappingURL=connector-6564W6HR.js.map
@@ -8,7 +8,7 @@ import "./chunk-LTDQISD7.js";
8
8
  import {
9
9
  createZeroCreditCheckout,
10
10
  getZeroOrgMembers
11
- } from "./chunk-CYWWF36Q.js";
11
+ } from "./chunk-BEIQHUJ4.js";
12
12
  import {
13
13
  withErrorHandler
14
14
  } from "./chunk-3F4RFLPX.js";
@@ -87,4 +87,4 @@ var zeroCreditCommand = new Command().name("credit").description("Create a Strip
87
87
  export {
88
88
  zeroCreditCommand
89
89
  };
90
- //# sourceMappingURL=credit-J4CRCB4Y.js.map
90
+ //# sourceMappingURL=credit-VDBXCSHA.js.map