@swmansion/argent 0.30.2-next.5 → 0.30.2-next.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli-cmds.mjs CHANGED
@@ -35577,7 +35577,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
35577
35577
  var SESSION_ID2 = randomUUID5();
35578
35578
  function readCliVersion() {
35579
35579
  if (true) {
35580
- return "0.30.2-next.5";
35580
+ return "0.30.2-next.7";
35581
35581
  }
35582
35582
  return "0.0.0";
35583
35583
  }
@@ -16899,7 +16899,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
16899
16899
  var SESSION_ID = randomUUID4();
16900
16900
  function readCliVersion() {
16901
16901
  if (true) {
16902
- return "0.30.2-next.5";
16902
+ return "0.30.2-next.7";
16903
16903
  }
16904
16904
  return "0.0.0";
16905
16905
  }
@@ -28485,7 +28485,9 @@ var AUTO_SCREENSHOT_TOOLS = /* @__PURE__ */ new Set([
28485
28485
  "restart-app",
28486
28486
  "open-url",
28487
28487
  "describe",
28488
- "run-sequence"
28488
+ "run-sequence",
28489
+ // A wait is almost always followed by a look at the screen it waited for.
28490
+ "await-ui-element"
28489
28491
  ]);
28490
28492
  var AUTO_SCREENSHOT_DELAY_MS_BY_TOOL = {
28491
28493
  "launch-app": 3e3,
@@ -28506,7 +28508,10 @@ var AUTO_SCREENSHOT_DELAY_MS_BY_TOOL = {
28506
28508
  "fold": 1500,
28507
28509
  "keyboard": 300,
28508
28510
  "paste": 300,
28509
- "describe": 100
28511
+ "describe": 100,
28512
+ // The wait returns on the first match, often mid-transition; the cap must
28513
+ // leave `await-screen-idle` room to see two identical reads.
28514
+ "await-ui-element": 1500
28510
28515
  };
28511
28516
  var DEFAULT_DELAY_MS = 1400;
28512
28517
  function autoScreenshotEnabled(options) {
@@ -28528,7 +28533,8 @@ var AUTO_DESCRIBE_TOOLS = /* @__PURE__ */ new Set([
28528
28533
  "launch-app",
28529
28534
  "restart-app",
28530
28535
  "open-url",
28531
- "run-sequence"
28536
+ "run-sequence",
28537
+ "await-ui-element"
28532
28538
  ]);
28533
28539
  function autoDescribeEnabled(options) {
28534
28540
  return !isFlagEnabled("disable-auto-describe", options);
@@ -100944,7 +100944,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
100944
100944
  var SESSION_ID = (0, import_node_crypto3.randomUUID)();
100945
100945
  function readCliVersion() {
100946
100946
  if (true) {
100947
- return "0.30.2-next.5";
100947
+ return "0.30.2-next.7";
100948
100948
  }
100949
100949
  return "0.0.0";
100950
100950
  }
@@ -139501,7 +139501,7 @@ Returns { launched, bundleId, note? }. Fails if the app is not installed on the
139501
139501
  For Chromium, the app is already running behind a CDP port; this call simply refreshes the cached viewport and acknowledges the bundleId tag. To change the visible route, use \`open-url\`.
139502
139502
  On Vega (Fire TV), pass the interactive component app id from manifest.toml (e.g. com.example.app.main) as bundleId.
139503
139503
 
139504
- Common iOS bundle ids: com.apple.MobileSMS, com.apple.mobilesafari, com.apple.Preferences, com.apple.Maps, com.apple.camera, com.apple.Photos, com.apple.mobilemail, com.apple.mobilenotes, com.apple.MobileAddressBook
139504
+ Common iOS bundle ids: com.apple.MobileSMS, com.apple.mobilesafari, com.apple.Preferences, com.apple.Maps, com.apple.mobileslideshow (Photos), com.apple.MobileAddressBook
139505
139505
  Common Android packages: com.android.settings, com.android.chrome, com.google.android.apps.maps, com.google.android.gm, com.android.vending, com.google.android.dialer, com.google.android.apps.messaging`,
139506
139506
  alwaysLoad: true,
139507
139507
  searchHint: "open start app bundle id package simulator emulator chromium vega launch tvos apple tv fire tv",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@swmansion/argent",
3
- "version": "0.30.2-next.5",
3
+ "version": "0.30.2-next.7",
4
4
  "mcpName": "io.github.software-mansion/argent",
5
5
  "description": "MCP server for iOS Simulator and Android Emulator control",
6
6
  "license": "Apache-2.0",
package/rules/argent.md CHANGED
@@ -37,9 +37,9 @@ If argent is ABSENT, treat it as an expected state, not an error to retry. Do no
37
37
 
38
38
  <tapping_rule>
39
39
  <important>**Never** derive tap coordinates from screenshot pixels</important>
40
- Interaction tools (`gesture-tap`, `gesture-swipe`, `keyboard`, `button`, `launch-app`, `open-url`, `run-sequence`, …) return the screen **after** the action: a screenshot AND the accessibility element tree (`--- Elements after action (describe) ---`, the same format `describe` prints, with normalized 0–1 frames). Take tap coordinates from that tree: the centre of the element's frame (`x + width/2`, `y + height/2`). You do not need a separate discovery call before a tap when the last result already lists the target.
40
+ Interaction tools (`gesture-tap`, `gesture-swipe`, `keyboard`, `button`, `launch-app`, `open-url`, `run-sequence`, `await-ui-element`, …) return the screen **after** the action: a screenshot AND the accessibility element tree (`--- Elements after action (describe) ---`, the same format `describe` prints, with normalized 0–1 frames). Take tap coordinates from that tree: the centre of the element's frame (`x + width/2`, `y + height/2`). You do not need a separate discovery call before a tap when the last result already lists the target.
41
41
 
42
- Call a discovery tool yourself only when you have no fresh tree for the current screen: before the first action on a screen you have not touched yet, after waiting for something to load, or when the last tree did not list your target. Preferred tools are, in order:
42
+ Call a discovery tool yourself only when you have no fresh tree for the current screen: before the first action on a screen you have not touched yet, after waiting for something to load without `await-ui-element`, or when the last tree did not list your target. Preferred tools are, in order:
43
43
 
44
44
  - `describe` - native app-level components and safely targetable foreground apps (iOS and Android).
45
45
  - `native-describe-screen` - accessibility screen description via injected native devtools (iOS only)
@@ -36,7 +36,7 @@ Use `list-devices` to get a target id. Results are tagged with `platform` (`ios`
36
36
  { "udid": "<UDID>", "bundleId": "com.apple.MobileSMS" }
37
37
  ```
38
38
 
39
- Common IDs: `com.apple.MobileSMS` (Messages), `com.apple.mobilesafari` (Safari), `com.apple.Preferences` (Settings), `com.apple.Maps`, `com.apple.Photos`, `com.apple.mobilemail`, `com.apple.mobilenotes`, `com.apple.MobileAddressBook` (Contacts)
39
+ Common IDs: `com.apple.MobileSMS` (Messages), `com.apple.mobilesafari` (Safari), `com.apple.Preferences` (Settings), `com.apple.Maps`, `com.apple.mobileslideshow` (Photos), `com.apple.MobileAddressBook` (Contacts)
40
40
 
41
41
  ### open-url: by URL scheme
42
42
 
@@ -169,6 +169,8 @@ Values: `home`, `back`, `power`, `volumeUp`, `volumeDown`, `appSwitch`, `actionB
169
169
 
170
170
  One call does one action. `text` and `key` are mutually exclusive, and a call that carries both is rejected with nothing typed. To type and then submit, send two `keyboard` steps in one `run-sequence` (§ 8): `{ "text": "search query" }`, then `{ "key": "enter" }`. Two separate calls do the same work, but cost an extra round-trip.
171
171
 
172
+ **React Native: the first tap after typing may only close the keyboard.** Inside a scroll view with the default `keyboardShouldPersistTaps="never"`, React Native uses a tap outside the focused field to dismiss the keyboard and does not pass it on (with `"handled"` or `"always"` the tap reaches the button), so a button tapped right after typing may need a second tap; check the returned tree. When the field submits on return, `{ "key": "enter" }` avoids the extra tap.
173
+
172
174
  Special keys: `enter`, `escape`, `backspace`, `tab`, `space`, `arrow-up`, `arrow-down`, `arrow-left`, `arrow-right`, `f1`–`f12`. Optional: `"delayMs": 100` between keystrokes (default 50ms); applies to the iOS simulator and Chromium; it is ignored on Android phones/tablets (typed via `adb input text`, no per-key cadence), on Vega, and on TV targets.
173
175
 
174
176
  **Typing secrets.** To enter a credential without its plaintext ever entering your context, transcript, or logs, use a secret placeholder in `text` (works in `keyboard`, `paste`, `run-sequence` keyboard steps, and e2e `type` steps):
@@ -98,8 +98,7 @@ Steps:
98
98
  ```
99
99
  1. gesture-tap { x: 0.5, y: 0.7 } → trigger an action that fetches data
100
100
  2. screenshot → loading spinner is showing
101
- 3. await-ui-element { condition: hidden, selector: { text: "Loading" } } → block until the fetch finishes and the spinner disappears
102
- 4. describe / screenshot → verify the fetched content rendered
101
+ 3. await-ui-element { condition: hidden, selector: { text: "Loading" } } → block until the fetch finishes and the spinner disappears; its result carries the screenshot and element tree, so verify the fetched content rendered from it
103
102
  ```
104
103
 
105
104
  ---