@swmansion/argent 0.32.1-next.1 → 0.32.1-next.10

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.
package/dist/cli-cmds.mjs CHANGED
@@ -10550,15 +10550,21 @@ var FAILURE_CODES = {
10550
10550
  ANDROID_LAUNCH_AM_START_FAILED: "ANDROID_LAUNCH_AM_START_FAILED",
10551
10551
  ANDROID_OPEN_URL_FAILED: "ANDROID_OPEN_URL_FAILED",
10552
10552
  ANDROID_REINSTALL_INSTALL_FAILED: "ANDROID_REINSTALL_INSTALL_FAILED",
10553
+ ANDROID_REINSTALL_UNINSTALL_FAILED: "ANDROID_REINSTALL_UNINSTALL_FAILED",
10553
10554
  ANDROID_RESTART_FAILED: "ANDROID_RESTART_FAILED",
10554
10555
  ANDROID_SETTINGS_PERMISSION_FAILED: "ANDROID_SETTINGS_PERMISSION_FAILED",
10555
10556
  IOS_LAUNCH_SIMCTL_FAILED: "IOS_LAUNCH_SIMCTL_FAILED",
10556
10557
  IOS_OPEN_URL_FAILED: "IOS_OPEN_URL_FAILED",
10557
10558
  IOS_REINSTALL_INSTALL_FAILED: "IOS_REINSTALL_INSTALL_FAILED",
10559
+ IOS_REINSTALL_UNINSTALL_FAILED: "IOS_REINSTALL_UNINSTALL_FAILED",
10558
10560
  IOS_RESTART_LAUNCH_FAILED: "IOS_RESTART_LAUNCH_FAILED",
10561
+ IOS_RESTART_TERMINATE_FAILED: "IOS_RESTART_TERMINATE_FAILED",
10562
+ IOS_TERMINATE_APP_FAILED: "IOS_TERMINATE_APP_FAILED",
10559
10563
  IOS_SETTINGS_PERMISSION_FAILED: "IOS_SETTINGS_PERMISSION_FAILED",
10560
10564
  IOS_SHAKE_FAILED: "IOS_SHAKE_FAILED",
10561
10565
  ANDROID_SHAKE_FAILED: "ANDROID_SHAKE_FAILED",
10566
+ STOP_METRO_PORT_PROBE_FAILED: "STOP_METRO_PORT_PROBE_FAILED",
10567
+ STOP_METRO_SIGNAL_FAILED: "STOP_METRO_SIGNAL_FAILED",
10562
10568
  // The hinge of a foldable iOS simulator: the server refused the request on a
10563
10569
  // foldable (a bad angle, a hinge that would not move) vs. nothing to fold —
10564
10570
  // a device that is not foldable, no hinge route, a remote simulator.
@@ -10704,10 +10710,13 @@ var FAILURE_CODES = {
10704
10710
  FLOW_NAME_INVALID: "FLOW_NAME_INVALID",
10705
10711
  FLOW_NO_ACTIVE_RECORDING: "FLOW_NO_ACTIVE_RECORDING",
10706
10712
  FLOW_FILE_INVALID: "FLOW_FILE_INVALID",
10713
+ FLOW_FILE_NEWER_VERSION: "FLOW_FILE_NEWER_VERSION",
10707
10714
  FLOW_FILE_WRITE_FAILED: "FLOW_FILE_WRITE_FAILED",
10708
10715
  FLOW_ENTRY_UNRECOGNIZED: "FLOW_ENTRY_UNRECOGNIZED",
10709
10716
  FLOW_E2E_HAS_PREREQUISITE: "FLOW_E2E_HAS_PREREQUISITE",
10710
10717
  FLOW_DEVICE_RESOLUTION: "FLOW_DEVICE_RESOLUTION",
10718
+ // The target does not satisfy the test's `requires:` block; a directory run skips it.
10719
+ FLOW_REQUIREMENTS_UNMET: "FLOW_REQUIREMENTS_UNMET",
10711
10720
  PROFILER_QUERY_MODE_INVALID: "PROFILER_QUERY_MODE_INVALID",
10712
10721
  PROFILER_QUERY_REQUIRED_PARAM_MISSING: "PROFILER_QUERY_REQUIRED_PARAM_MISSING",
10713
10722
  PROFILER_DATA_NOT_LOADED: "PROFILER_DATA_NOT_LOADED",
@@ -10726,6 +10735,7 @@ var FAILURE_CODES = {
10726
10735
  CHROMIUM_STORAGE_EVAL_FAILED: "CHROMIUM_STORAGE_EVAL_FAILED",
10727
10736
  CHROMIUM_TAB_NOT_FOUND: "CHROMIUM_TAB_NOT_FOUND",
10728
10737
  CHROMIUM_TAB_OPEN_FAILED: "CHROMIUM_TAB_OPEN_FAILED",
10738
+ CHROMIUM_NAVIGATE_FAILED: "CHROMIUM_NAVIGATE_FAILED",
10729
10739
  CHROMIUM_DESCRIBE_FAILED: "CHROMIUM_DESCRIBE_FAILED",
10730
10740
  CHROMIUM_ELECTRON_APP_PATH_INVALID: "CHROMIUM_ELECTRON_APP_PATH_INVALID",
10731
10741
  CHROMIUM_ELECTRON_SPAWN_FAILED: "CHROMIUM_ELECTRON_SPAWN_FAILED",
@@ -10742,6 +10752,8 @@ var FAILURE_CODES = {
10742
10752
  SCREENSHOT_DIFF_INPUT_INVALID: "SCREENSHOT_DIFF_INPUT_INVALID",
10743
10753
  BOOT_DEVICE_TARGET_SELECTION_INVALID: "BOOT_DEVICE_TARGET_SELECTION_INVALID",
10744
10754
  BOOT_IOS_UNSUPPORTED_HOST: "BOOT_IOS_UNSUPPORTED_HOST",
10755
+ BOOT_IOS_SIMCTL_LIST_TIMEOUT: "BOOT_IOS_SIMCTL_LIST_TIMEOUT",
10756
+ BOOT_IOS_SIMCTL_TIMEOUT: "BOOT_IOS_SIMCTL_TIMEOUT",
10745
10757
  BOOT_ANDROID_NO_AVDS: "BOOT_ANDROID_NO_AVDS",
10746
10758
  BOOT_ANDROID_AVD_NOT_FOUND: "BOOT_ANDROID_AVD_NOT_FOUND",
10747
10759
  BOOT_ANDROID_ADB_UNAVAILABLE: "BOOT_ANDROID_ADB_UNAVAILABLE",
@@ -35809,7 +35821,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
35809
35821
  var SESSION_ID2 = randomUUID5();
35810
35822
  function readCliVersion() {
35811
35823
  if (true) {
35812
- return "0.32.1-next.0";
35824
+ return "0.32.1-next.10";
35813
35825
  }
35814
35826
  return "0.0.0";
35815
35827
  }
@@ -37150,8 +37162,9 @@ contain only letters, numbers, "_", or "-" \u2014 the same charset a name must
37150
37162
  match. A test is standalone when its first non-\`echo\`/\`script\` step is \`launch\`.
37151
37163
  Other tests are fragments and use the device's current state. Exception: a fragment whose first step \`run:\`s a chromium standalone
37152
37164
  test boots that test's app before step 1 \u2014 when that launch is unambiguously
37153
- chromium (a lone \`{ chromium: ... }\` target, or --platform chromium); a
37154
- multi-platform launch auto-detects a device instead. Pass --device to attach to
37165
+ chromium (a lone \`{ chromium: ... }\` target, --platform chromium, or a
37166
+ \`requires:\` block that allows only chromium); a multi-platform launch
37167
+ auto-detects a device instead. Pass --device to attach to
37155
37168
  a running instance.
37156
37169
 
37157
37170
  A directory run prints only the steps that need attention (each failure, each
@@ -37164,6 +37177,12 @@ file, or a device it cannot resolve. A transport failure, a rejection the server
37164
37177
  does not mark as validation, or a reply that is not a report stops the batch and
37165
37178
  counts the remaining tests skipped.
37166
37179
 
37180
+ A test can declare a \`requires:\` block (platform, runtimeKind) that names the
37181
+ targets it supports. A directory run skips each test whose requirements the
37182
+ target does not meet, so the same directory runs on each platform without a
37183
+ separate list of tests. A single-test run fails instead. A directory run where
37184
+ no test ran exits 2.
37185
+
37167
37186
  The CLI sends a run to its tool-server: the local one that starts
37168
37187
  automatically, or the one that \`argent link\` or ARGENT_TOOLS_URL names. Over
37169
37188
  a link, the CLI uploads these files and writes the new baselines that the run
@@ -37346,7 +37365,8 @@ function renderFailedSteps(report) {
37346
37365
  return lines;
37347
37366
  }
37348
37367
  function renderBatchSummary(counts, durationMs) {
37349
- return `${counts.failed === 0 ? "PASS" : "FAIL"} \u2014 ${counts.total} e2e test${counts.total === 1 ? "" : "s"}: ${counts.passed} passed, ${counts.failed} failed, ${counts.skipped} skipped${durationSuffix(durationMs)}`;
37368
+ const verdict = counts.failed > 0 ? "FAIL" : counts.passed === 0 ? "NONE RAN" : "PASS";
37369
+ return `${verdict} \u2014 ${counts.total} e2e test${counts.total === 1 ? "" : "s"}: ${counts.passed} passed, ${counts.failed} failed, ${counts.skipped} skipped${durationSuffix(durationMs)}`;
37350
37370
  }
37351
37371
  function summarizeFailure(report) {
37352
37372
  let n3 = 0;
@@ -37732,8 +37752,12 @@ function rejectionVerdict(code) {
37732
37752
  case FAILURE_CODES.FLOW_ENTRY_UNRECOGNIZED:
37733
37753
  case FAILURE_CODES.FLOW_E2E_HAS_PREREQUISITE:
37734
37754
  return "not run (invalid e2e test)";
37755
+ case FAILURE_CODES.FLOW_FILE_NEWER_VERSION:
37756
+ return "not run (needs a newer Argent)";
37735
37757
  case FAILURE_CODES.FLOW_DEVICE_RESOLUTION:
37736
37758
  return "not run (no device resolved)";
37759
+ case FAILURE_CODES.FLOW_REQUIREMENTS_UNMET:
37760
+ return "not run (requires not met)";
37737
37761
  case FAILURE_CODES.FILE_INPUT_UPLOAD_FAILED:
37738
37762
  return "not run (upload failed)";
37739
37763
  default:
@@ -37810,6 +37834,14 @@ async function runFlowDirectory(dir, args, projectRoot, options) {
37810
37834
  const err = unreachableErr ?? thrown;
37811
37835
  const message = err instanceof Error ? err.message : String(err);
37812
37836
  const toolErr = err instanceof ToolInvocationError ? err : void 0;
37837
+ if (toolErr?.errorCode === FAILURE_CODES.FLOW_REQUIREMENTS_UNMET) {
37838
+ const reason = message.replace(/^\[Tool:[^\]]+\] /, "");
37839
+ results.push({ path: rel, status: "skip", reason });
37840
+ if (!args.json)
37841
+ console.log(` ${STATUS_GLYPH.skip} skipped (requires not met)
37842
+ ${reason}`);
37843
+ continue;
37844
+ }
37813
37845
  const rejectedThisFlowOnly = toolErr?.errorKind === "validation";
37814
37846
  const verdict = unreachableErr ? UNREACHABLE_VERDICT : rejectedThisFlowOnly ? rejectionVerdict(toolErr?.errorCode) : "did not finish (run error)";
37815
37847
  if (!args.json) console.log(` ${STATUS_GLYPH.error} ${verdict}`);
@@ -37860,11 +37892,18 @@ async function runFlowDirectory(dir, args, projectRoot, options) {
37860
37892
  skipped: results.filter((r2) => r2.status === "skip").length
37861
37893
  };
37862
37894
  const durationMs = Date.now() - batchStartedAt;
37895
+ const noneRan = counts.passed === 0 && counts.failed === 0;
37863
37896
  if (args.json) {
37864
37897
  console.log(
37865
37898
  JSON.stringify(
37866
37899
  // `flows` is the deprecated spelling of `e2eTests`.
37867
- { ok: counts.failed === 0, ...counts, durationMs, e2eTests: results, flows: results },
37900
+ {
37901
+ ok: counts.failed === 0 && !noneRan,
37902
+ ...counts,
37903
+ durationMs,
37904
+ e2eTests: results,
37905
+ flows: results
37906
+ },
37868
37907
  null,
37869
37908
  2
37870
37909
  )
@@ -37873,8 +37912,9 @@ async function runFlowDirectory(dir, args, projectRoot, options) {
37873
37912
  for (const line of renderFailedFlows(failures)) console.log(line);
37874
37913
  console.log(`
37875
37914
  ${renderBatchSummary(counts, durationMs)}`);
37915
+ if (noneRan) console.error(`No e2e test in ${dir} ran on the selected target.`);
37876
37916
  }
37877
- return exitAfterFlush(unreachable ? 2 : counts.failed === 0 ? 0 : 1);
37917
+ return exitAfterFlush(unreachable || noneRan ? 2 : counts.failed === 0 ? 0 : 1);
37878
37918
  }
37879
37919
  async function e2e(argv, options) {
37880
37920
  const [sub, ...rest] = argv;
package/dist/client.js CHANGED
@@ -9123,15 +9123,21 @@ var FAILURE_CODES = {
9123
9123
  ANDROID_LAUNCH_AM_START_FAILED: "ANDROID_LAUNCH_AM_START_FAILED",
9124
9124
  ANDROID_OPEN_URL_FAILED: "ANDROID_OPEN_URL_FAILED",
9125
9125
  ANDROID_REINSTALL_INSTALL_FAILED: "ANDROID_REINSTALL_INSTALL_FAILED",
9126
+ ANDROID_REINSTALL_UNINSTALL_FAILED: "ANDROID_REINSTALL_UNINSTALL_FAILED",
9126
9127
  ANDROID_RESTART_FAILED: "ANDROID_RESTART_FAILED",
9127
9128
  ANDROID_SETTINGS_PERMISSION_FAILED: "ANDROID_SETTINGS_PERMISSION_FAILED",
9128
9129
  IOS_LAUNCH_SIMCTL_FAILED: "IOS_LAUNCH_SIMCTL_FAILED",
9129
9130
  IOS_OPEN_URL_FAILED: "IOS_OPEN_URL_FAILED",
9130
9131
  IOS_REINSTALL_INSTALL_FAILED: "IOS_REINSTALL_INSTALL_FAILED",
9132
+ IOS_REINSTALL_UNINSTALL_FAILED: "IOS_REINSTALL_UNINSTALL_FAILED",
9131
9133
  IOS_RESTART_LAUNCH_FAILED: "IOS_RESTART_LAUNCH_FAILED",
9134
+ IOS_RESTART_TERMINATE_FAILED: "IOS_RESTART_TERMINATE_FAILED",
9135
+ IOS_TERMINATE_APP_FAILED: "IOS_TERMINATE_APP_FAILED",
9132
9136
  IOS_SETTINGS_PERMISSION_FAILED: "IOS_SETTINGS_PERMISSION_FAILED",
9133
9137
  IOS_SHAKE_FAILED: "IOS_SHAKE_FAILED",
9134
9138
  ANDROID_SHAKE_FAILED: "ANDROID_SHAKE_FAILED",
9139
+ STOP_METRO_PORT_PROBE_FAILED: "STOP_METRO_PORT_PROBE_FAILED",
9140
+ STOP_METRO_SIGNAL_FAILED: "STOP_METRO_SIGNAL_FAILED",
9135
9141
  // The hinge of a foldable iOS simulator: the server refused the request on a
9136
9142
  // foldable (a bad angle, a hinge that would not move) vs. nothing to fold —
9137
9143
  // a device that is not foldable, no hinge route, a remote simulator.
@@ -9277,10 +9283,13 @@ var FAILURE_CODES = {
9277
9283
  FLOW_NAME_INVALID: "FLOW_NAME_INVALID",
9278
9284
  FLOW_NO_ACTIVE_RECORDING: "FLOW_NO_ACTIVE_RECORDING",
9279
9285
  FLOW_FILE_INVALID: "FLOW_FILE_INVALID",
9286
+ FLOW_FILE_NEWER_VERSION: "FLOW_FILE_NEWER_VERSION",
9280
9287
  FLOW_FILE_WRITE_FAILED: "FLOW_FILE_WRITE_FAILED",
9281
9288
  FLOW_ENTRY_UNRECOGNIZED: "FLOW_ENTRY_UNRECOGNIZED",
9282
9289
  FLOW_E2E_HAS_PREREQUISITE: "FLOW_E2E_HAS_PREREQUISITE",
9283
9290
  FLOW_DEVICE_RESOLUTION: "FLOW_DEVICE_RESOLUTION",
9291
+ // The target does not satisfy the test's `requires:` block; a directory run skips it.
9292
+ FLOW_REQUIREMENTS_UNMET: "FLOW_REQUIREMENTS_UNMET",
9284
9293
  PROFILER_QUERY_MODE_INVALID: "PROFILER_QUERY_MODE_INVALID",
9285
9294
  PROFILER_QUERY_REQUIRED_PARAM_MISSING: "PROFILER_QUERY_REQUIRED_PARAM_MISSING",
9286
9295
  PROFILER_DATA_NOT_LOADED: "PROFILER_DATA_NOT_LOADED",
@@ -9299,6 +9308,7 @@ var FAILURE_CODES = {
9299
9308
  CHROMIUM_STORAGE_EVAL_FAILED: "CHROMIUM_STORAGE_EVAL_FAILED",
9300
9309
  CHROMIUM_TAB_NOT_FOUND: "CHROMIUM_TAB_NOT_FOUND",
9301
9310
  CHROMIUM_TAB_OPEN_FAILED: "CHROMIUM_TAB_OPEN_FAILED",
9311
+ CHROMIUM_NAVIGATE_FAILED: "CHROMIUM_NAVIGATE_FAILED",
9302
9312
  CHROMIUM_DESCRIBE_FAILED: "CHROMIUM_DESCRIBE_FAILED",
9303
9313
  CHROMIUM_ELECTRON_APP_PATH_INVALID: "CHROMIUM_ELECTRON_APP_PATH_INVALID",
9304
9314
  CHROMIUM_ELECTRON_SPAWN_FAILED: "CHROMIUM_ELECTRON_SPAWN_FAILED",
@@ -9315,6 +9325,8 @@ var FAILURE_CODES = {
9315
9325
  SCREENSHOT_DIFF_INPUT_INVALID: "SCREENSHOT_DIFF_INPUT_INVALID",
9316
9326
  BOOT_DEVICE_TARGET_SELECTION_INVALID: "BOOT_DEVICE_TARGET_SELECTION_INVALID",
9317
9327
  BOOT_IOS_UNSUPPORTED_HOST: "BOOT_IOS_UNSUPPORTED_HOST",
9328
+ BOOT_IOS_SIMCTL_LIST_TIMEOUT: "BOOT_IOS_SIMCTL_LIST_TIMEOUT",
9329
+ BOOT_IOS_SIMCTL_TIMEOUT: "BOOT_IOS_SIMCTL_TIMEOUT",
9318
9330
  BOOT_ANDROID_NO_AVDS: "BOOT_ANDROID_NO_AVDS",
9319
9331
  BOOT_ANDROID_AVD_NOT_FOUND: "BOOT_ANDROID_AVD_NOT_FOUND",
9320
9332
  BOOT_ANDROID_ADB_UNAVAILABLE: "BOOT_ANDROID_ADB_UNAVAILABLE",
@@ -15887,15 +15887,21 @@ var FAILURE_CODES = {
15887
15887
  ANDROID_LAUNCH_AM_START_FAILED: "ANDROID_LAUNCH_AM_START_FAILED",
15888
15888
  ANDROID_OPEN_URL_FAILED: "ANDROID_OPEN_URL_FAILED",
15889
15889
  ANDROID_REINSTALL_INSTALL_FAILED: "ANDROID_REINSTALL_INSTALL_FAILED",
15890
+ ANDROID_REINSTALL_UNINSTALL_FAILED: "ANDROID_REINSTALL_UNINSTALL_FAILED",
15890
15891
  ANDROID_RESTART_FAILED: "ANDROID_RESTART_FAILED",
15891
15892
  ANDROID_SETTINGS_PERMISSION_FAILED: "ANDROID_SETTINGS_PERMISSION_FAILED",
15892
15893
  IOS_LAUNCH_SIMCTL_FAILED: "IOS_LAUNCH_SIMCTL_FAILED",
15893
15894
  IOS_OPEN_URL_FAILED: "IOS_OPEN_URL_FAILED",
15894
15895
  IOS_REINSTALL_INSTALL_FAILED: "IOS_REINSTALL_INSTALL_FAILED",
15896
+ IOS_REINSTALL_UNINSTALL_FAILED: "IOS_REINSTALL_UNINSTALL_FAILED",
15895
15897
  IOS_RESTART_LAUNCH_FAILED: "IOS_RESTART_LAUNCH_FAILED",
15898
+ IOS_RESTART_TERMINATE_FAILED: "IOS_RESTART_TERMINATE_FAILED",
15899
+ IOS_TERMINATE_APP_FAILED: "IOS_TERMINATE_APP_FAILED",
15896
15900
  IOS_SETTINGS_PERMISSION_FAILED: "IOS_SETTINGS_PERMISSION_FAILED",
15897
15901
  IOS_SHAKE_FAILED: "IOS_SHAKE_FAILED",
15898
15902
  ANDROID_SHAKE_FAILED: "ANDROID_SHAKE_FAILED",
15903
+ STOP_METRO_PORT_PROBE_FAILED: "STOP_METRO_PORT_PROBE_FAILED",
15904
+ STOP_METRO_SIGNAL_FAILED: "STOP_METRO_SIGNAL_FAILED",
15899
15905
  // The hinge of a foldable iOS simulator: the server refused the request on a
15900
15906
  // foldable (a bad angle, a hinge that would not move) vs. nothing to fold —
15901
15907
  // a device that is not foldable, no hinge route, a remote simulator.
@@ -16041,10 +16047,13 @@ var FAILURE_CODES = {
16041
16047
  FLOW_NAME_INVALID: "FLOW_NAME_INVALID",
16042
16048
  FLOW_NO_ACTIVE_RECORDING: "FLOW_NO_ACTIVE_RECORDING",
16043
16049
  FLOW_FILE_INVALID: "FLOW_FILE_INVALID",
16050
+ FLOW_FILE_NEWER_VERSION: "FLOW_FILE_NEWER_VERSION",
16044
16051
  FLOW_FILE_WRITE_FAILED: "FLOW_FILE_WRITE_FAILED",
16045
16052
  FLOW_ENTRY_UNRECOGNIZED: "FLOW_ENTRY_UNRECOGNIZED",
16046
16053
  FLOW_E2E_HAS_PREREQUISITE: "FLOW_E2E_HAS_PREREQUISITE",
16047
16054
  FLOW_DEVICE_RESOLUTION: "FLOW_DEVICE_RESOLUTION",
16055
+ // The target does not satisfy the test's `requires:` block; a directory run skips it.
16056
+ FLOW_REQUIREMENTS_UNMET: "FLOW_REQUIREMENTS_UNMET",
16048
16057
  PROFILER_QUERY_MODE_INVALID: "PROFILER_QUERY_MODE_INVALID",
16049
16058
  PROFILER_QUERY_REQUIRED_PARAM_MISSING: "PROFILER_QUERY_REQUIRED_PARAM_MISSING",
16050
16059
  PROFILER_DATA_NOT_LOADED: "PROFILER_DATA_NOT_LOADED",
@@ -16063,6 +16072,7 @@ var FAILURE_CODES = {
16063
16072
  CHROMIUM_STORAGE_EVAL_FAILED: "CHROMIUM_STORAGE_EVAL_FAILED",
16064
16073
  CHROMIUM_TAB_NOT_FOUND: "CHROMIUM_TAB_NOT_FOUND",
16065
16074
  CHROMIUM_TAB_OPEN_FAILED: "CHROMIUM_TAB_OPEN_FAILED",
16075
+ CHROMIUM_NAVIGATE_FAILED: "CHROMIUM_NAVIGATE_FAILED",
16066
16076
  CHROMIUM_DESCRIBE_FAILED: "CHROMIUM_DESCRIBE_FAILED",
16067
16077
  CHROMIUM_ELECTRON_APP_PATH_INVALID: "CHROMIUM_ELECTRON_APP_PATH_INVALID",
16068
16078
  CHROMIUM_ELECTRON_SPAWN_FAILED: "CHROMIUM_ELECTRON_SPAWN_FAILED",
@@ -16079,6 +16089,8 @@ var FAILURE_CODES = {
16079
16089
  SCREENSHOT_DIFF_INPUT_INVALID: "SCREENSHOT_DIFF_INPUT_INVALID",
16080
16090
  BOOT_DEVICE_TARGET_SELECTION_INVALID: "BOOT_DEVICE_TARGET_SELECTION_INVALID",
16081
16091
  BOOT_IOS_UNSUPPORTED_HOST: "BOOT_IOS_UNSUPPORTED_HOST",
16092
+ BOOT_IOS_SIMCTL_LIST_TIMEOUT: "BOOT_IOS_SIMCTL_LIST_TIMEOUT",
16093
+ BOOT_IOS_SIMCTL_TIMEOUT: "BOOT_IOS_SIMCTL_TIMEOUT",
16082
16094
  BOOT_ANDROID_NO_AVDS: "BOOT_ANDROID_NO_AVDS",
16083
16095
  BOOT_ANDROID_AVD_NOT_FOUND: "BOOT_ANDROID_AVD_NOT_FOUND",
16084
16096
  BOOT_ANDROID_ADB_UNAVAILABLE: "BOOT_ANDROID_ADB_UNAVAILABLE",
@@ -16934,7 +16946,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
16934
16946
  var SESSION_ID = randomUUID4();
16935
16947
  function readCliVersion() {
16936
16948
  if (true) {
16937
- return "0.32.1-next.0";
16949
+ return "0.32.1-next.10";
16938
16950
  }
16939
16951
  return "0.0.0";
16940
16952
  }
@@ -25833,15 +25833,21 @@ var FAILURE_CODES = {
25833
25833
  ANDROID_LAUNCH_AM_START_FAILED: "ANDROID_LAUNCH_AM_START_FAILED",
25834
25834
  ANDROID_OPEN_URL_FAILED: "ANDROID_OPEN_URL_FAILED",
25835
25835
  ANDROID_REINSTALL_INSTALL_FAILED: "ANDROID_REINSTALL_INSTALL_FAILED",
25836
+ ANDROID_REINSTALL_UNINSTALL_FAILED: "ANDROID_REINSTALL_UNINSTALL_FAILED",
25836
25837
  ANDROID_RESTART_FAILED: "ANDROID_RESTART_FAILED",
25837
25838
  ANDROID_SETTINGS_PERMISSION_FAILED: "ANDROID_SETTINGS_PERMISSION_FAILED",
25838
25839
  IOS_LAUNCH_SIMCTL_FAILED: "IOS_LAUNCH_SIMCTL_FAILED",
25839
25840
  IOS_OPEN_URL_FAILED: "IOS_OPEN_URL_FAILED",
25840
25841
  IOS_REINSTALL_INSTALL_FAILED: "IOS_REINSTALL_INSTALL_FAILED",
25842
+ IOS_REINSTALL_UNINSTALL_FAILED: "IOS_REINSTALL_UNINSTALL_FAILED",
25841
25843
  IOS_RESTART_LAUNCH_FAILED: "IOS_RESTART_LAUNCH_FAILED",
25844
+ IOS_RESTART_TERMINATE_FAILED: "IOS_RESTART_TERMINATE_FAILED",
25845
+ IOS_TERMINATE_APP_FAILED: "IOS_TERMINATE_APP_FAILED",
25842
25846
  IOS_SETTINGS_PERMISSION_FAILED: "IOS_SETTINGS_PERMISSION_FAILED",
25843
25847
  IOS_SHAKE_FAILED: "IOS_SHAKE_FAILED",
25844
25848
  ANDROID_SHAKE_FAILED: "ANDROID_SHAKE_FAILED",
25849
+ STOP_METRO_PORT_PROBE_FAILED: "STOP_METRO_PORT_PROBE_FAILED",
25850
+ STOP_METRO_SIGNAL_FAILED: "STOP_METRO_SIGNAL_FAILED",
25845
25851
  // The hinge of a foldable iOS simulator: the server refused the request on a
25846
25852
  // foldable (a bad angle, a hinge that would not move) vs. nothing to fold —
25847
25853
  // a device that is not foldable, no hinge route, a remote simulator.
@@ -25987,10 +25993,13 @@ var FAILURE_CODES = {
25987
25993
  FLOW_NAME_INVALID: "FLOW_NAME_INVALID",
25988
25994
  FLOW_NO_ACTIVE_RECORDING: "FLOW_NO_ACTIVE_RECORDING",
25989
25995
  FLOW_FILE_INVALID: "FLOW_FILE_INVALID",
25996
+ FLOW_FILE_NEWER_VERSION: "FLOW_FILE_NEWER_VERSION",
25990
25997
  FLOW_FILE_WRITE_FAILED: "FLOW_FILE_WRITE_FAILED",
25991
25998
  FLOW_ENTRY_UNRECOGNIZED: "FLOW_ENTRY_UNRECOGNIZED",
25992
25999
  FLOW_E2E_HAS_PREREQUISITE: "FLOW_E2E_HAS_PREREQUISITE",
25993
26000
  FLOW_DEVICE_RESOLUTION: "FLOW_DEVICE_RESOLUTION",
26001
+ // The target does not satisfy the test's `requires:` block; a directory run skips it.
26002
+ FLOW_REQUIREMENTS_UNMET: "FLOW_REQUIREMENTS_UNMET",
25994
26003
  PROFILER_QUERY_MODE_INVALID: "PROFILER_QUERY_MODE_INVALID",
25995
26004
  PROFILER_QUERY_REQUIRED_PARAM_MISSING: "PROFILER_QUERY_REQUIRED_PARAM_MISSING",
25996
26005
  PROFILER_DATA_NOT_LOADED: "PROFILER_DATA_NOT_LOADED",
@@ -26009,6 +26018,7 @@ var FAILURE_CODES = {
26009
26018
  CHROMIUM_STORAGE_EVAL_FAILED: "CHROMIUM_STORAGE_EVAL_FAILED",
26010
26019
  CHROMIUM_TAB_NOT_FOUND: "CHROMIUM_TAB_NOT_FOUND",
26011
26020
  CHROMIUM_TAB_OPEN_FAILED: "CHROMIUM_TAB_OPEN_FAILED",
26021
+ CHROMIUM_NAVIGATE_FAILED: "CHROMIUM_NAVIGATE_FAILED",
26012
26022
  CHROMIUM_DESCRIBE_FAILED: "CHROMIUM_DESCRIBE_FAILED",
26013
26023
  CHROMIUM_ELECTRON_APP_PATH_INVALID: "CHROMIUM_ELECTRON_APP_PATH_INVALID",
26014
26024
  CHROMIUM_ELECTRON_SPAWN_FAILED: "CHROMIUM_ELECTRON_SPAWN_FAILED",
@@ -26025,6 +26035,8 @@ var FAILURE_CODES = {
26025
26035
  SCREENSHOT_DIFF_INPUT_INVALID: "SCREENSHOT_DIFF_INPUT_INVALID",
26026
26036
  BOOT_DEVICE_TARGET_SELECTION_INVALID: "BOOT_DEVICE_TARGET_SELECTION_INVALID",
26027
26037
  BOOT_IOS_UNSUPPORTED_HOST: "BOOT_IOS_UNSUPPORTED_HOST",
26038
+ BOOT_IOS_SIMCTL_LIST_TIMEOUT: "BOOT_IOS_SIMCTL_LIST_TIMEOUT",
26039
+ BOOT_IOS_SIMCTL_TIMEOUT: "BOOT_IOS_SIMCTL_TIMEOUT",
26028
26040
  BOOT_ANDROID_NO_AVDS: "BOOT_ANDROID_NO_AVDS",
26029
26041
  BOOT_ANDROID_AVD_NOT_FOUND: "BOOT_ANDROID_AVD_NOT_FOUND",
26030
26042
  BOOT_ANDROID_ADB_UNAVAILABLE: "BOOT_ANDROID_ADB_UNAVAILABLE",
@@ -10,7 +10,7 @@ export interface ArgentToolArgs {
10
10
  minStableMs?: number;
11
11
  };
12
12
  "await-ui-element": {
13
- /** Target device id from `list-devices` (iOS UDID, Android serial, Vega serial, HarmonyOS id, or Chromium id; not Apple TV, whose tree it cannot read). */
13
+ /** Target device id from `list-devices` (iOS UDID, Android serial, Vega serial, HarmonyOS id, or Chromium id). */
14
14
  udid: string;
15
15
  /** What to wait for. `exists`: the selector matches an element anywhere in the tree. `visible`: it matches one with a non-zero on-screen frame. `hidden`: it matches nothing, or only a zero-area element (e.g. a spinner that went away). `text`: the first visible match in reading order (topmost, then leftmost; the first match overall if none is visible) contains expectedText, or equals it with textMatch `equals`. Only that match is checked, so if a loose selector hits several elements, narrow it to the one holding the text. */
16
16
  condition: "exists" | "visible" | "hidden" | "text";
@@ -231,9 +231,9 @@ export interface ArgentToolArgs {
231
231
  e2e_test_file?: string;
232
232
  /** Absolute path to an e2e test .yaml on the client. */
233
233
  e2e_test_path?: string;
234
- /** Device id to run against (iOS UDID, Android/Vega serial, Chromium id), as list-devices reports it. Auto-detected when omitted, but only when exactly one booted device matches; with several booted the run fails and lists them, so pass this explicitly whenever more than one device is up. */
234
+ /** Device id to run against (iOS UDID, Android/Vega serial, Chromium id), as list-devices reports it. Auto-detected when omitted, but only when exactly one booted device matches (optionally narrowed by `platform` and the e2e test's `requires:` block); with several booted the run fails and lists them, so pass this explicitly whenever more than one device is up. */
235
235
  device?: string;
236
- /** Restrict auto-detection to this platform when several devices are booted. `ios` selects local simulators only; `ios-remote` selects a remote one. `chromium` with no `device` also makes the runner boot an Electron instance for a standalone e2e test from its `launch` step's chromium value and tear it down after the run, with no fallback to auto-detection (a single-key `launch: { chromium: … }` map does this on its own; a fragment, or a launch map without a `chromium` key, is still auto-detected). That value must be an Electron app path on the tool-server host: the bare-string `launch:` the recorder writes holds a bundle id, which fails the run with `Electron boot: path does not exist`, so first edit it to `{ chromium: <app path> }`. */
236
+ /** Restrict auto-detection to this platform when several devices are booted. `ios` selects local simulators only; `ios-remote` selects a remote one. `chromium` with no `device` also makes the runner boot an Electron instance for a standalone e2e test from its `launch` step's chromium value and tear it down after the run, with no fallback to auto-detection (a single-key `launch: { chromium: … }` map, or a `requires:` block that allows only chromium, does this on its own; a fragment, or a launch map without a `chromium` key, is still auto-detected). That value must be an Electron app path on the tool-server host: the bare-string `launch:` the recorder writes holds a bundle id, which fails the run with `Electron boot: path does not exist`, so first edit it to `{ chromium: <app path> }`. */
237
237
  platform?: "ios" | "android" | "chromium" | "vega" | "ios-remote";
238
238
  /** Write/refresh screenshot baselines for `snapshot` steps instead of diffing against them, also in the e2e tests that tool: e2e-execute steps run, unless such a step sets updateBaselines itself. Over a link, the client writes the new baselines when the run ends. */
239
239
  updateBaselines?: boolean;
@@ -271,6 +271,11 @@ export interface ArgentToolArgs {
271
271
  project_root: string;
272
272
  /** Fragments only: the app/device state assumed on entry (e.g. "Settings app open on General page"). Omit it for a standalone e2e test. restart-app has no chromium support, so a chromium e2e test records as a fragment; add the `launch: { chromium: <app path> }` line to the YAML afterward, deleting the executionPrerequisite line if you passed one, since an e2e test that starts with a launch must not declare it. */
273
273
  executionPrerequisite?: string;
274
+ /** The e2e test's `requires:` block: the targets it supports, ANDed. `platform` is one platform or a list (`ios` also covers a remote simulator); `runtimeKind` is `tv` or `mobile`. Omit it for a test that runs on any target. */
275
+ requires?: {
276
+ platform?: "ios" | "android" | "chromium" | "vega" | Array<"ios" | "android" | "chromium" | "vega">;
277
+ runtimeKind?: "mobile" | "tv";
278
+ };
274
279
  };
275
280
  fill: {
276
281
  /** Target device id from `list-devices`. */
@@ -428,7 +433,7 @@ export interface ArgentToolArgs {
428
433
  bundleId: string;
429
434
  /** Android-only: fully-qualified Activity name (e.g. `.MainActivity` or `com.example/com.example.MainActivity`). If omitted, the app's default launcher activity is used. */
430
435
  activity?: string;
431
- /** Apple simulators and physical iPhones: arguments passed to the app process at launch, e.g. `["-FeatureFlag", "YES"]` to override UserDefaults. A running app is relaunched to apply them. */
436
+ /** Apple simulators and physical iPhones: arguments passed to the app process at launch, e.g. `["-FeatureFlag", "YES"]` to override UserDefaults. A running app is relaunched to apply them. The call fails, launching nothing, if terminating it does not finish within 15s on a local iOS simulator, or fails for a reason other than the app not running on a remote one. */
432
437
  launchArgs?: Array<string>;
433
438
  };
434
439
  "list-devices": Record<string, never>;