@swmansion/argent 0.32.1-next.8 → 0.33.0

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 (45) 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 +530 -438
  11. package/dist/client.d.ts +5 -0
  12. package/dist/client.js +60 -9
  13. package/dist/installer.mjs +372 -202
  14. package/dist/mcp-server.mjs +156 -20
  15. package/dist/tool-args.generated.d.ts +87 -51
  16. package/dist/tool-server.cjs +39520 -34927
  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 +4 -4
  31. package/skills/argent-create-e2e/references/reliability-and-recovery.md +3 -3
  32. package/skills/argent-device-interact/SKILL.md +3 -2
  33. package/skills/argent-device-interact/references/chromium.md +1 -1
  34. package/skills/argent-device-interact/references/harmonyos.md +1 -1
  35. package/skills/argent-ios-simulator-setup/SKILL.md +1 -1
  36. package/skills/argent-macos-app-interact/SKILL.md +44 -0
  37. package/skills/argent-macos-app-interact/references/e2e.md +6 -0
  38. package/skills/argent-qa-e2e/SKILL.md +1 -1
  39. package/skills/argent-react-native-app-workflow/SKILL.md +2 -0
  40. package/skills/argent-react-native-optimization/SKILL.md +2 -3
  41. package/skills/argent-react-native-profiler/SKILL.md +8 -8
  42. package/skills/argent-screenshot-diff/SKILL.md +1 -1
  43. package/skills/argent-test-ui-flow/SKILL.md +1 -1
  44. package/skills/argent-tv-interact/SKILL.md +4 -4
  45. 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,11 @@ 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. On by default; turn it off with `argent disable macos-apps`.",
7809
+ defaultEnabled: true
7805
7810
  }
7806
7811
  ];
7807
7812
  function getFlagDefinition(name, registry = FLAG_REGISTRY) {
@@ -9025,6 +9030,8 @@ var FAILURE_CODES = {
9025
9030
  CLI_RUN_ARGS_JSON_INVALID: "CLI_RUN_ARGS_JSON_INVALID",
9026
9031
  CLI_RUN_INPUT_VALIDATION_FAILED: "CLI_RUN_INPUT_VALIDATION_FAILED",
9027
9032
  CLI_RUN_TOOL_CALL_FAILED: "CLI_RUN_TOOL_CALL_FAILED",
9033
+ // The result carried the tool-server's `failure` field.
9034
+ CLI_RUN_TOOL_RESULT_FAILED: "CLI_RUN_TOOL_RESULT_FAILED",
9028
9035
  CLI_RUN_SAVE_IMAGE_FAILED: "CLI_RUN_SAVE_IMAGE_FAILED",
9029
9036
  TOOL_CAPABILITY_UNSUPPORTED_OPERATION: "TOOL_CAPABILITY_UNSUPPORTED_OPERATION",
9030
9037
  TOOL_PLATFORM_NOT_IMPLEMENTED: "TOOL_PLATFORM_NOT_IMPLEMENTED",
@@ -9040,6 +9047,7 @@ var FAILURE_CODES = {
9040
9047
  INSTALL_MODE_FLAG_CONFLICT: "INSTALL_MODE_FLAG_CONFLICT",
9041
9048
  INSTALL_FROM_TAR_PACKAGE_FAILED: "INSTALL_FROM_TAR_PACKAGE_FAILED",
9042
9049
  INSTALL_INIT_TRIGGERED_UPDATE_FAILED: "INSTALL_INIT_TRIGGERED_UPDATE_FAILED",
9050
+ INSTALL_SKILLS_FAILED: "INSTALL_SKILLS_FAILED",
9043
9051
  INSTALL_SKILLS_REFRESH_FAILED: "INSTALL_SKILLS_REFRESH_FAILED",
9044
9052
  INSTALL_UNCLASSIFIED_FAILED: "INSTALL_UNCLASSIFIED_FAILED",
9045
9053
  UPDATE_INSTALLED_VERSION_DETECT_FAILED: "UPDATE_INSTALLED_VERSION_DETECT_FAILED",
@@ -9236,6 +9244,8 @@ var FAILURE_CODES = {
9236
9244
  REACT_PROFILER_START_FAILED: "REACT_PROFILER_START_FAILED",
9237
9245
  REACT_PROFILER_START_VERIFY_FAILED: "REACT_PROFILER_START_VERIFY_FAILED",
9238
9246
  REACT_PROFILER_SESSION_TORN_DOWN: "REACT_PROFILER_SESSION_TORN_DOWN",
9247
+ REACT_PROFILER_SESSION_TAKEN_OVER: "REACT_PROFILER_SESSION_TAKEN_OVER",
9248
+ REACT_PROFILER_STOP_IN_PROGRESS: "REACT_PROFILER_STOP_IN_PROGRESS",
9239
9249
  REACT_PROFILER_HOOK_ERROR: "REACT_PROFILER_HOOK_ERROR",
9240
9250
  REACT_PROFILER_ANALYZE_NO_DATA: "REACT_PROFILER_ANALYZE_NO_DATA",
9241
9251
  NATIVE_PROFILER_FACTORY_OPTIONS_MISSING: "NATIVE_PROFILER_FACTORY_OPTIONS_MISSING",
@@ -9314,6 +9324,32 @@ var FAILURE_CODES = {
9314
9324
  CHROMIUM_ELECTRON_SPAWN_FAILED: "CHROMIUM_ELECTRON_SPAWN_FAILED",
9315
9325
  CHROMIUM_ELECTRON_CDP_TIMEOUT: "CHROMIUM_ELECTRON_CDP_TIMEOUT",
9316
9326
  CHROMIUM_ELECTRON_EXITED_BEFORE_READY: "CHROMIUM_ELECTRON_EXITED_BEFORE_READY",
9327
+ /**
9328
+ * Native Mac apps (the `macos-apps` flag)
9329
+ * @see [macos-app.ts](../../tool-server/src/blueprints/macos-app.ts)
9330
+ */
9331
+ MACOS_APP_UNSUPPORTED_HOST: "MACOS_APP_UNSUPPORTED_HOST",
9332
+ MACOS_APP_PATH_INVALID: "MACOS_APP_PATH_INVALID",
9333
+ MACOS_APP_BUNDLE_INVALID: "MACOS_APP_BUNDLE_INVALID",
9334
+ MACOS_APP_NOT_FOUND: "MACOS_APP_NOT_FOUND",
9335
+ MACOS_APP_HARDENED_RUNTIME: "MACOS_APP_HARDENED_RUNTIME",
9336
+ MACOS_APP_LIBRARY_MISSING: "MACOS_APP_LIBRARY_MISSING",
9337
+ MACOS_APP_LIBRARY_STAGE_FAILED: "MACOS_APP_LIBRARY_STAGE_FAILED",
9338
+ MACOS_APP_ALREADY_RUNNING: "MACOS_APP_ALREADY_RUNNING",
9339
+ MACOS_APP_SPAWN_FAILED: "MACOS_APP_SPAWN_FAILED",
9340
+ MACOS_APP_EXITED_BEFORE_READY: "MACOS_APP_EXITED_BEFORE_READY",
9341
+ MACOS_APP_HANDSHAKE_TIMEOUT: "MACOS_APP_HANDSHAKE_TIMEOUT",
9342
+ MACOS_APP_HANDSHAKE_INVALID: "MACOS_APP_HANDSHAKE_INVALID",
9343
+ MACOS_APP_NOT_RUNNING: "MACOS_APP_NOT_RUNNING",
9344
+ MACOS_APP_NOT_CONNECTED: "MACOS_APP_NOT_CONNECTED",
9345
+ MACOS_APP_CONNECTION_LOST: "MACOS_APP_CONNECTION_LOST",
9346
+ MACOS_APP_CONNECTION_CLOSED: "MACOS_APP_CONNECTION_CLOSED",
9347
+ MACOS_APP_RPC_TIMEOUT: "MACOS_APP_RPC_TIMEOUT",
9348
+ MACOS_APP_RPC_ERROR: "MACOS_APP_RPC_ERROR",
9349
+ MACOS_APP_TERMINATE_FAILED: "MACOS_APP_TERMINATE_FAILED",
9350
+ MACOS_APP_BUNDLE_ID_MISMATCH: "MACOS_APP_BUNDLE_ID_MISMATCH",
9351
+ MACOS_APP_OPEN_URL_FAILED: "MACOS_APP_OPEN_URL_FAILED",
9352
+ MACOS_APP_FILE_ACCESS_FAILED: "MACOS_APP_FILE_ACCESS_FAILED",
9317
9353
  KEYBOARD_KEY_UNSUPPORTED: "KEYBOARD_KEY_UNSUPPORTED",
9318
9354
  KEYBOARD_CHARACTER_UNSUPPORTED: "KEYBOARD_CHARACTER_UNSUPPORTED",
9319
9355
  KEYBOARD_TEXT_AND_KEY_COMBINED: "KEYBOARD_TEXT_AND_KEY_COMBINED",
@@ -10397,7 +10433,8 @@ async function consumeToolStream(name, body, onProgress, signal) {
10397
10433
  final = {
10398
10434
  data: msg.data,
10399
10435
  note: msg.note,
10400
- ...msg.profiling === true ? { profiling: true } : {}
10436
+ ...msg.profiling === true ? { profiling: true } : {},
10437
+ ...typeof msg.failure === "string" ? { failure: msg.failure } : {}
10401
10438
  };
10402
10439
  } else if (msg.event === "error") {
10403
10440
  throw new ToolInvocationError(msg.error ?? "tool invocation failed", {
@@ -10449,7 +10486,8 @@ async function consumeToolStream(name, body, onProgress, signal) {
10449
10486
  return {
10450
10487
  data: final.data,
10451
10488
  note: final.note,
10452
- ...final.profiling ? { profiling: true } : {}
10489
+ ...final.profiling ? { profiling: true } : {},
10490
+ ...final.failure !== void 0 ? { failure: final.failure } : {}
10453
10491
  };
10454
10492
  }
10455
10493
  function errorBodyMessage(body) {
@@ -10614,6 +10652,7 @@ function createToolsClient(options = {}) {
10614
10652
  }
10615
10653
  const shadowWarning = await e2eShadowWarningFor(name, args);
10616
10654
  const baselineDirs = [];
10655
+ let unwrittenBaselines = [];
10617
10656
  if (meta?.fileInputs?.length) {
10618
10657
  if (remote) assertRequiredPresent(meta, finalArgs);
10619
10658
  finalArgs = await prepareFileInputs(meta.fileInputs, finalArgs ?? {}, {
@@ -10627,8 +10666,9 @@ function createToolsClient(options = {}) {
10627
10666
  signal: opts?.signal
10628
10667
  });
10629
10668
  }
10630
- const settle = async (data) => {
10631
- const applied = await applyClientFileDirectives(data, { allowedDirs: baselineDirs });
10669
+ const settle = async (data2) => {
10670
+ const applied = await applyClientFileDirectives(data2, { allowedDirs: baselineDirs });
10671
+ unwrittenBaselines = applied.failed.map((f) => f.path);
10632
10672
  for (const { path: file, error } of applied.failed) {
10633
10673
  diagnose(`The baseline ${file} was not written on this client: ${error}`);
10634
10674
  }
@@ -10645,6 +10685,7 @@ function createToolsClient(options = {}) {
10645
10685
  }
10646
10686
  return { ...result, warning: shadowWarning };
10647
10687
  };
10688
+ const unwrittenFailure = () => unwrittenBaselines.length > 0 ? `Baselines not written on this client: ${unwrittenBaselines.join(", ")}` : void 0;
10648
10689
  const stream = opts?.onProgress !== void 0 || carriesMembers(finalArgs);
10649
10690
  const sentOnce = carriesUpload(finalArgs);
10650
10691
  const forwarded = remote ? await forwardedSecrets(finalArgs) : void 0;
@@ -10708,11 +10749,14 @@ function createToolsClient(options = {}) {
10708
10749
  }),
10709
10750
  opts?.signal
10710
10751
  );
10752
+ const data2 = await settle(streamed.data);
10753
+ const failure2 = streamed.failure ?? unwrittenFailure();
10711
10754
  return {
10712
- data: await settle(streamed.data),
10755
+ data: data2,
10713
10756
  note: streamed.note,
10714
10757
  outputHint: meta?.outputHint,
10715
- ...streamed.profiling ? { profiling: true } : {}
10758
+ ...streamed.profiling ? { profiling: true } : {},
10759
+ ...failure2 !== void 0 ? { failure: failure2 } : {}
10716
10760
  };
10717
10761
  }
10718
10762
  let json;
@@ -10748,11 +10792,14 @@ function createToolsClient(options = {}) {
10748
10792
  });
10749
10793
  }
10750
10794
  opts?.signal?.throwIfAborted();
10795
+ const data = await settle(json.data);
10796
+ const failure = (typeof json.failure === "string" ? json.failure : void 0) ?? unwrittenFailure();
10751
10797
  return {
10752
- data: await settle(json.data),
10798
+ data,
10753
10799
  note: json.note,
10754
10800
  outputHint: meta?.outputHint,
10755
- ...json.profiling === true ? { profiling: true } : {}
10801
+ ...json.profiling === true ? { profiling: true } : {},
10802
+ ...failure !== void 0 ? { failure } : {}
10756
10803
  };
10757
10804
  }
10758
10805
  return { fetchTools, fetchTool, callTool, baseUrl };
@@ -11162,7 +11209,11 @@ function createArgentClient() {
11162
11209
  signal: options?.signal
11163
11210
  });
11164
11211
  options?.signal?.throwIfAborted();
11165
- return { data: result, note: response.note };
11212
+ return {
11213
+ data: result,
11214
+ note: response.note,
11215
+ ...response.failure !== void 0 ? { failure: response.failure } : {}
11216
+ };
11166
11217
  } catch (err) {
11167
11218
  if (err instanceof ToolInvocationError) {
11168
11219
  throw new ArgentToolError(err.message, {