@swmansion/argent 0.32.1-next.2 → 0.32.1-next.20

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 (46) hide show
  1. package/README.md +1 -1
  2. package/assets/manifest.json +2 -2
  3. package/bin/argent-android-devtools-0.4.0.apk +0 -0
  4. package/bin/darwin/argent-macos-helper +0 -0
  5. package/bin/darwin/ax-service +0 -0
  6. package/bin/darwin/tvos-ax-service +0 -0
  7. package/bin/darwin/tvos-hid-daemon +0 -0
  8. package/bin/network-inspector/network-inspector.jar +0 -0
  9. package/bin/tcp/ax-service +0 -0
  10. package/dist/cli-cmds.mjs +552 -440
  11. package/dist/client.d.ts +5 -0
  12. package/dist/client.js +71 -9
  13. package/dist/installer.mjs +384 -202
  14. package/dist/mcp-server.mjs +167 -20
  15. package/dist/tool-args.generated.d.ts +91 -50
  16. package/dist/tool-server.cjs +34732 -29334
  17. package/dylibs/libArgentInjectionBootstrap.dylib +0 -0
  18. package/dylibs/libKeyboardPatch.dylib +0 -0
  19. package/dylibs/libNativeDevtoolsIos.dylib +0 -0
  20. package/dylibs/macos/libArgentInjectionBootstrap.dylib +0 -0
  21. package/dylibs/macos/libNativeDevtoolsMacos.dylib +0 -0
  22. package/dylibs/tcp/libArgentInjectionBootstrap.dylib +0 -0
  23. package/dylibs/tcp/libKeyboardPatch.dylib +0 -0
  24. package/dylibs/tcp/libNativeDevtoolsIos.dylib +0 -0
  25. package/dylibs/tvos/libArgentInjectionBootstrap.dylib +0 -0
  26. package/dylibs/tvos/libKeyboardPatch.dylib +0 -0
  27. package/dylibs/tvos/libNativeDevtoolsIos.dylib +0 -0
  28. package/package.json +2 -2
  29. package/rules/argent.md +1 -1
  30. package/skills/argent-create-e2e/references/e2e-yaml.md +8 -4
  31. package/skills/argent-create-e2e/references/live-authoring.md +1 -0
  32. package/skills/argent-create-e2e/references/reliability-and-recovery.md +3 -3
  33. package/skills/argent-device-interact/SKILL.md +3 -2
  34. package/skills/argent-device-interact/references/chromium.md +1 -1
  35. package/skills/argent-device-interact/references/harmonyos.md +1 -1
  36. package/skills/argent-ios-simulator-setup/SKILL.md +1 -1
  37. package/skills/argent-macos-app-interact/SKILL.md +44 -0
  38. package/skills/argent-macos-app-interact/references/e2e.md +6 -0
  39. package/skills/argent-qa-e2e/SKILL.md +1 -1
  40. package/skills/argent-react-native-app-workflow/SKILL.md +2 -0
  41. package/skills/argent-react-native-optimization/SKILL.md +2 -3
  42. package/skills/argent-react-native-profiler/SKILL.md +8 -8
  43. package/skills/argent-screenshot-diff/SKILL.md +1 -1
  44. package/skills/argent-test-ui-flow/SKILL.md +1 -1
  45. package/skills/argent-tv-interact/SKILL.md +4 -4
  46. package/bin/argent-android-devtools-0.3.0.apk +0 -0
package/dist/client.d.ts CHANGED
@@ -12,6 +12,11 @@ export interface ArgentToolResult<T = unknown> {
12
12
  data: T;
13
13
  /** Optional advisory note the tool attached to the result. */
14
14
  note?: string;
15
+ /**
16
+ * Why the call did not do its job though it returned, such as an e2e test
17
+ * that does not pass. See the tool-server API reference for the list.
18
+ */
19
+ failure?: string;
15
20
  }
16
21
  /**
17
22
  * A node of the `ui-tree` result. A flag is set only when true; a field named in
package/dist/client.js CHANGED
@@ -7802,6 +7802,10 @@ var FLAG_REGISTRY = [
7802
7802
  name: "video-watermark",
7803
7803
  description: "Overlay the argent corner watermark on recorded screen videos. On by default; turn it off with `argent disable video-watermark`.",
7804
7804
  defaultEnabled: true
7805
+ },
7806
+ {
7807
+ name: "macos-apps",
7808
+ description: "Drive native Mac apps (AppKit, SwiftUI, react-native-macos) from inside the app. Adds the macos platform to list-devices and boot-device, and the file-panel and menu-bar tools. Off by default."
7805
7809
  }
7806
7810
  ];
7807
7811
  function getFlagDefinition(name, registry = FLAG_REGISTRY) {
@@ -9025,6 +9029,8 @@ var FAILURE_CODES = {
9025
9029
  CLI_RUN_ARGS_JSON_INVALID: "CLI_RUN_ARGS_JSON_INVALID",
9026
9030
  CLI_RUN_INPUT_VALIDATION_FAILED: "CLI_RUN_INPUT_VALIDATION_FAILED",
9027
9031
  CLI_RUN_TOOL_CALL_FAILED: "CLI_RUN_TOOL_CALL_FAILED",
9032
+ // The result carried the tool-server's `failure` field.
9033
+ CLI_RUN_TOOL_RESULT_FAILED: "CLI_RUN_TOOL_RESULT_FAILED",
9028
9034
  CLI_RUN_SAVE_IMAGE_FAILED: "CLI_RUN_SAVE_IMAGE_FAILED",
9029
9035
  TOOL_CAPABILITY_UNSUPPORTED_OPERATION: "TOOL_CAPABILITY_UNSUPPORTED_OPERATION",
9030
9036
  TOOL_PLATFORM_NOT_IMPLEMENTED: "TOOL_PLATFORM_NOT_IMPLEMENTED",
@@ -9040,6 +9046,7 @@ var FAILURE_CODES = {
9040
9046
  INSTALL_MODE_FLAG_CONFLICT: "INSTALL_MODE_FLAG_CONFLICT",
9041
9047
  INSTALL_FROM_TAR_PACKAGE_FAILED: "INSTALL_FROM_TAR_PACKAGE_FAILED",
9042
9048
  INSTALL_INIT_TRIGGERED_UPDATE_FAILED: "INSTALL_INIT_TRIGGERED_UPDATE_FAILED",
9049
+ INSTALL_SKILLS_FAILED: "INSTALL_SKILLS_FAILED",
9043
9050
  INSTALL_SKILLS_REFRESH_FAILED: "INSTALL_SKILLS_REFRESH_FAILED",
9044
9051
  INSTALL_UNCLASSIFIED_FAILED: "INSTALL_UNCLASSIFIED_FAILED",
9045
9052
  UPDATE_INSTALLED_VERSION_DETECT_FAILED: "UPDATE_INSTALLED_VERSION_DETECT_FAILED",
@@ -9123,15 +9130,21 @@ var FAILURE_CODES = {
9123
9130
  ANDROID_LAUNCH_AM_START_FAILED: "ANDROID_LAUNCH_AM_START_FAILED",
9124
9131
  ANDROID_OPEN_URL_FAILED: "ANDROID_OPEN_URL_FAILED",
9125
9132
  ANDROID_REINSTALL_INSTALL_FAILED: "ANDROID_REINSTALL_INSTALL_FAILED",
9133
+ ANDROID_REINSTALL_UNINSTALL_FAILED: "ANDROID_REINSTALL_UNINSTALL_FAILED",
9126
9134
  ANDROID_RESTART_FAILED: "ANDROID_RESTART_FAILED",
9127
9135
  ANDROID_SETTINGS_PERMISSION_FAILED: "ANDROID_SETTINGS_PERMISSION_FAILED",
9128
9136
  IOS_LAUNCH_SIMCTL_FAILED: "IOS_LAUNCH_SIMCTL_FAILED",
9129
9137
  IOS_OPEN_URL_FAILED: "IOS_OPEN_URL_FAILED",
9130
9138
  IOS_REINSTALL_INSTALL_FAILED: "IOS_REINSTALL_INSTALL_FAILED",
9139
+ IOS_REINSTALL_UNINSTALL_FAILED: "IOS_REINSTALL_UNINSTALL_FAILED",
9131
9140
  IOS_RESTART_LAUNCH_FAILED: "IOS_RESTART_LAUNCH_FAILED",
9141
+ IOS_RESTART_TERMINATE_FAILED: "IOS_RESTART_TERMINATE_FAILED",
9142
+ IOS_TERMINATE_APP_FAILED: "IOS_TERMINATE_APP_FAILED",
9132
9143
  IOS_SETTINGS_PERMISSION_FAILED: "IOS_SETTINGS_PERMISSION_FAILED",
9133
9144
  IOS_SHAKE_FAILED: "IOS_SHAKE_FAILED",
9134
9145
  ANDROID_SHAKE_FAILED: "ANDROID_SHAKE_FAILED",
9146
+ STOP_METRO_PORT_PROBE_FAILED: "STOP_METRO_PORT_PROBE_FAILED",
9147
+ STOP_METRO_SIGNAL_FAILED: "STOP_METRO_SIGNAL_FAILED",
9135
9148
  // The hinge of a foldable iOS simulator: the server refused the request on a
9136
9149
  // foldable (a bad angle, a hinge that would not move) vs. nothing to fold —
9137
9150
  // a device that is not foldable, no hinge route, a remote simulator.
@@ -9230,6 +9243,8 @@ var FAILURE_CODES = {
9230
9243
  REACT_PROFILER_START_FAILED: "REACT_PROFILER_START_FAILED",
9231
9244
  REACT_PROFILER_START_VERIFY_FAILED: "REACT_PROFILER_START_VERIFY_FAILED",
9232
9245
  REACT_PROFILER_SESSION_TORN_DOWN: "REACT_PROFILER_SESSION_TORN_DOWN",
9246
+ REACT_PROFILER_SESSION_TAKEN_OVER: "REACT_PROFILER_SESSION_TAKEN_OVER",
9247
+ REACT_PROFILER_STOP_IN_PROGRESS: "REACT_PROFILER_STOP_IN_PROGRESS",
9233
9248
  REACT_PROFILER_HOOK_ERROR: "REACT_PROFILER_HOOK_ERROR",
9234
9249
  REACT_PROFILER_ANALYZE_NO_DATA: "REACT_PROFILER_ANALYZE_NO_DATA",
9235
9250
  NATIVE_PROFILER_FACTORY_OPTIONS_MISSING: "NATIVE_PROFILER_FACTORY_OPTIONS_MISSING",
@@ -9277,10 +9292,13 @@ var FAILURE_CODES = {
9277
9292
  FLOW_NAME_INVALID: "FLOW_NAME_INVALID",
9278
9293
  FLOW_NO_ACTIVE_RECORDING: "FLOW_NO_ACTIVE_RECORDING",
9279
9294
  FLOW_FILE_INVALID: "FLOW_FILE_INVALID",
9295
+ FLOW_FILE_NEWER_VERSION: "FLOW_FILE_NEWER_VERSION",
9280
9296
  FLOW_FILE_WRITE_FAILED: "FLOW_FILE_WRITE_FAILED",
9281
9297
  FLOW_ENTRY_UNRECOGNIZED: "FLOW_ENTRY_UNRECOGNIZED",
9282
9298
  FLOW_E2E_HAS_PREREQUISITE: "FLOW_E2E_HAS_PREREQUISITE",
9283
9299
  FLOW_DEVICE_RESOLUTION: "FLOW_DEVICE_RESOLUTION",
9300
+ // The target does not satisfy the test's `requires:` block; a directory run skips it.
9301
+ FLOW_REQUIREMENTS_UNMET: "FLOW_REQUIREMENTS_UNMET",
9284
9302
  PROFILER_QUERY_MODE_INVALID: "PROFILER_QUERY_MODE_INVALID",
9285
9303
  PROFILER_QUERY_REQUIRED_PARAM_MISSING: "PROFILER_QUERY_REQUIRED_PARAM_MISSING",
9286
9304
  PROFILER_DATA_NOT_LOADED: "PROFILER_DATA_NOT_LOADED",
@@ -9299,11 +9317,38 @@ var FAILURE_CODES = {
9299
9317
  CHROMIUM_STORAGE_EVAL_FAILED: "CHROMIUM_STORAGE_EVAL_FAILED",
9300
9318
  CHROMIUM_TAB_NOT_FOUND: "CHROMIUM_TAB_NOT_FOUND",
9301
9319
  CHROMIUM_TAB_OPEN_FAILED: "CHROMIUM_TAB_OPEN_FAILED",
9320
+ CHROMIUM_NAVIGATE_FAILED: "CHROMIUM_NAVIGATE_FAILED",
9302
9321
  CHROMIUM_DESCRIBE_FAILED: "CHROMIUM_DESCRIBE_FAILED",
9303
9322
  CHROMIUM_ELECTRON_APP_PATH_INVALID: "CHROMIUM_ELECTRON_APP_PATH_INVALID",
9304
9323
  CHROMIUM_ELECTRON_SPAWN_FAILED: "CHROMIUM_ELECTRON_SPAWN_FAILED",
9305
9324
  CHROMIUM_ELECTRON_CDP_TIMEOUT: "CHROMIUM_ELECTRON_CDP_TIMEOUT",
9306
9325
  CHROMIUM_ELECTRON_EXITED_BEFORE_READY: "CHROMIUM_ELECTRON_EXITED_BEFORE_READY",
9326
+ /**
9327
+ * Native Mac apps (the `macos-apps` flag)
9328
+ * @see [macos-app.ts](../../tool-server/src/blueprints/macos-app.ts)
9329
+ */
9330
+ MACOS_APP_UNSUPPORTED_HOST: "MACOS_APP_UNSUPPORTED_HOST",
9331
+ MACOS_APP_PATH_INVALID: "MACOS_APP_PATH_INVALID",
9332
+ MACOS_APP_BUNDLE_INVALID: "MACOS_APP_BUNDLE_INVALID",
9333
+ MACOS_APP_NOT_FOUND: "MACOS_APP_NOT_FOUND",
9334
+ MACOS_APP_HARDENED_RUNTIME: "MACOS_APP_HARDENED_RUNTIME",
9335
+ MACOS_APP_LIBRARY_MISSING: "MACOS_APP_LIBRARY_MISSING",
9336
+ MACOS_APP_LIBRARY_STAGE_FAILED: "MACOS_APP_LIBRARY_STAGE_FAILED",
9337
+ MACOS_APP_ALREADY_RUNNING: "MACOS_APP_ALREADY_RUNNING",
9338
+ MACOS_APP_SPAWN_FAILED: "MACOS_APP_SPAWN_FAILED",
9339
+ MACOS_APP_EXITED_BEFORE_READY: "MACOS_APP_EXITED_BEFORE_READY",
9340
+ MACOS_APP_HANDSHAKE_TIMEOUT: "MACOS_APP_HANDSHAKE_TIMEOUT",
9341
+ MACOS_APP_HANDSHAKE_INVALID: "MACOS_APP_HANDSHAKE_INVALID",
9342
+ MACOS_APP_NOT_RUNNING: "MACOS_APP_NOT_RUNNING",
9343
+ MACOS_APP_NOT_CONNECTED: "MACOS_APP_NOT_CONNECTED",
9344
+ MACOS_APP_CONNECTION_LOST: "MACOS_APP_CONNECTION_LOST",
9345
+ MACOS_APP_CONNECTION_CLOSED: "MACOS_APP_CONNECTION_CLOSED",
9346
+ MACOS_APP_RPC_TIMEOUT: "MACOS_APP_RPC_TIMEOUT",
9347
+ MACOS_APP_RPC_ERROR: "MACOS_APP_RPC_ERROR",
9348
+ MACOS_APP_TERMINATE_FAILED: "MACOS_APP_TERMINATE_FAILED",
9349
+ MACOS_APP_BUNDLE_ID_MISMATCH: "MACOS_APP_BUNDLE_ID_MISMATCH",
9350
+ MACOS_APP_OPEN_URL_FAILED: "MACOS_APP_OPEN_URL_FAILED",
9351
+ MACOS_APP_FILE_ACCESS_FAILED: "MACOS_APP_FILE_ACCESS_FAILED",
9307
9352
  KEYBOARD_KEY_UNSUPPORTED: "KEYBOARD_KEY_UNSUPPORTED",
9308
9353
  KEYBOARD_CHARACTER_UNSUPPORTED: "KEYBOARD_CHARACTER_UNSUPPORTED",
9309
9354
  KEYBOARD_TEXT_AND_KEY_COMBINED: "KEYBOARD_TEXT_AND_KEY_COMBINED",
@@ -9315,6 +9360,8 @@ var FAILURE_CODES = {
9315
9360
  SCREENSHOT_DIFF_INPUT_INVALID: "SCREENSHOT_DIFF_INPUT_INVALID",
9316
9361
  BOOT_DEVICE_TARGET_SELECTION_INVALID: "BOOT_DEVICE_TARGET_SELECTION_INVALID",
9317
9362
  BOOT_IOS_UNSUPPORTED_HOST: "BOOT_IOS_UNSUPPORTED_HOST",
9363
+ BOOT_IOS_SIMCTL_LIST_TIMEOUT: "BOOT_IOS_SIMCTL_LIST_TIMEOUT",
9364
+ BOOT_IOS_SIMCTL_TIMEOUT: "BOOT_IOS_SIMCTL_TIMEOUT",
9318
9365
  BOOT_ANDROID_NO_AVDS: "BOOT_ANDROID_NO_AVDS",
9319
9366
  BOOT_ANDROID_AVD_NOT_FOUND: "BOOT_ANDROID_AVD_NOT_FOUND",
9320
9367
  BOOT_ANDROID_ADB_UNAVAILABLE: "BOOT_ANDROID_ADB_UNAVAILABLE",
@@ -10385,7 +10432,8 @@ async function consumeToolStream(name, body, onProgress, signal) {
10385
10432
  final = {
10386
10433
  data: msg.data,
10387
10434
  note: msg.note,
10388
- ...msg.profiling === true ? { profiling: true } : {}
10435
+ ...msg.profiling === true ? { profiling: true } : {},
10436
+ ...typeof msg.failure === "string" ? { failure: msg.failure } : {}
10389
10437
  };
10390
10438
  } else if (msg.event === "error") {
10391
10439
  throw new ToolInvocationError(msg.error ?? "tool invocation failed", {
@@ -10437,7 +10485,8 @@ async function consumeToolStream(name, body, onProgress, signal) {
10437
10485
  return {
10438
10486
  data: final.data,
10439
10487
  note: final.note,
10440
- ...final.profiling ? { profiling: true } : {}
10488
+ ...final.profiling ? { profiling: true } : {},
10489
+ ...final.failure !== void 0 ? { failure: final.failure } : {}
10441
10490
  };
10442
10491
  }
10443
10492
  function errorBodyMessage(body) {
@@ -10602,6 +10651,7 @@ function createToolsClient(options = {}) {
10602
10651
  }
10603
10652
  const shadowWarning = await e2eShadowWarningFor(name, args);
10604
10653
  const baselineDirs = [];
10654
+ let unwrittenBaselines = [];
10605
10655
  if (meta?.fileInputs?.length) {
10606
10656
  if (remote) assertRequiredPresent(meta, finalArgs);
10607
10657
  finalArgs = await prepareFileInputs(meta.fileInputs, finalArgs ?? {}, {
@@ -10615,8 +10665,9 @@ function createToolsClient(options = {}) {
10615
10665
  signal: opts?.signal
10616
10666
  });
10617
10667
  }
10618
- const settle = async (data) => {
10619
- const applied = await applyClientFileDirectives(data, { allowedDirs: baselineDirs });
10668
+ const settle = async (data2) => {
10669
+ const applied = await applyClientFileDirectives(data2, { allowedDirs: baselineDirs });
10670
+ unwrittenBaselines = applied.failed.map((f) => f.path);
10620
10671
  for (const { path: file, error } of applied.failed) {
10621
10672
  diagnose(`The baseline ${file} was not written on this client: ${error}`);
10622
10673
  }
@@ -10633,6 +10684,7 @@ function createToolsClient(options = {}) {
10633
10684
  }
10634
10685
  return { ...result, warning: shadowWarning };
10635
10686
  };
10687
+ const unwrittenFailure = () => unwrittenBaselines.length > 0 ? `Baselines not written on this client: ${unwrittenBaselines.join(", ")}` : void 0;
10636
10688
  const stream = opts?.onProgress !== void 0 || carriesMembers(finalArgs);
10637
10689
  const sentOnce = carriesUpload(finalArgs);
10638
10690
  const forwarded = remote ? await forwardedSecrets(finalArgs) : void 0;
@@ -10696,11 +10748,14 @@ function createToolsClient(options = {}) {
10696
10748
  }),
10697
10749
  opts?.signal
10698
10750
  );
10751
+ const data2 = await settle(streamed.data);
10752
+ const failure2 = streamed.failure ?? unwrittenFailure();
10699
10753
  return {
10700
- data: await settle(streamed.data),
10754
+ data: data2,
10701
10755
  note: streamed.note,
10702
10756
  outputHint: meta?.outputHint,
10703
- ...streamed.profiling ? { profiling: true } : {}
10757
+ ...streamed.profiling ? { profiling: true } : {},
10758
+ ...failure2 !== void 0 ? { failure: failure2 } : {}
10704
10759
  };
10705
10760
  }
10706
10761
  let json;
@@ -10736,11 +10791,14 @@ function createToolsClient(options = {}) {
10736
10791
  });
10737
10792
  }
10738
10793
  opts?.signal?.throwIfAborted();
10794
+ const data = await settle(json.data);
10795
+ const failure = (typeof json.failure === "string" ? json.failure : void 0) ?? unwrittenFailure();
10739
10796
  return {
10740
- data: await settle(json.data),
10797
+ data,
10741
10798
  note: json.note,
10742
10799
  outputHint: meta?.outputHint,
10743
- ...json.profiling === true ? { profiling: true } : {}
10800
+ ...json.profiling === true ? { profiling: true } : {},
10801
+ ...failure !== void 0 ? { failure } : {}
10744
10802
  };
10745
10803
  }
10746
10804
  return { fetchTools, fetchTool, callTool, baseUrl };
@@ -11150,7 +11208,11 @@ function createArgentClient() {
11150
11208
  signal: options?.signal
11151
11209
  });
11152
11210
  options?.signal?.throwIfAborted();
11153
- return { data: result, note: response.note };
11211
+ return {
11212
+ data: result,
11213
+ note: response.note,
11214
+ ...response.failure !== void 0 ? { failure: response.failure } : {}
11215
+ };
11154
11216
  } catch (err) {
11155
11217
  if (err instanceof ToolInvocationError) {
11156
11218
  throw new ArgentToolError(err.message, {