@swmansion/argent 0.22.2-next.0 → 0.22.2-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.
Files changed (35) hide show
  1. package/dist/cli-cmds.mjs +64 -21
  2. package/dist/installer.mjs +197 -7
  3. package/dist/mcp-server.mjs +92 -23
  4. package/dist/tool-server.cjs +1017 -236
  5. package/package.json +1 -1
  6. package/rules/argent.md +7 -7
  7. package/skills/argent-create-flow/references/flow-yaml.md +30 -3
  8. package/skills/argent-create-flow/references/live-authoring.md +14 -12
  9. package/skills/argent-create-flow/references/reliability-and-recovery.md +2 -2
  10. package/skills/argent-device-interact/SKILL.md +4 -2
  11. package/skills/argent-qa-flows/SKILL.md +1 -1
  12. package/bin/linux/resources/android/LICENSE.txt +0 -186
  13. package/bin/linux/resources/android/README.md +0 -11
  14. package/bin/linux/resources/android/arm64-v8a/libscreen-sharing-agent.so +0 -0
  15. package/bin/linux/resources/android/armeabi-v7a/libscreen-sharing-agent.so +0 -0
  16. package/bin/linux/resources/android/screen-sharing-agent.jar +0 -0
  17. package/bin/linux/resources/android/x86_64/libscreen-sharing-agent.so +0 -0
  18. package/bin/linux-arm64/resources/android/LICENSE.txt +0 -186
  19. package/bin/linux-arm64/resources/android/README.md +0 -11
  20. package/bin/linux-arm64/resources/android/arm64-v8a/libscreen-sharing-agent.so +0 -0
  21. package/bin/linux-arm64/resources/android/armeabi-v7a/libscreen-sharing-agent.so +0 -0
  22. package/bin/linux-arm64/resources/android/screen-sharing-agent.jar +0 -0
  23. package/bin/linux-arm64/resources/android/x86_64/libscreen-sharing-agent.so +0 -0
  24. package/bin/win32/resources/android/LICENSE.txt +0 -186
  25. package/bin/win32/resources/android/README.md +0 -11
  26. package/bin/win32/resources/android/arm64-v8a/libscreen-sharing-agent.so +0 -0
  27. package/bin/win32/resources/android/armeabi-v7a/libscreen-sharing-agent.so +0 -0
  28. package/bin/win32/resources/android/screen-sharing-agent.jar +0 -0
  29. package/bin/win32/resources/android/x86_64/libscreen-sharing-agent.so +0 -0
  30. /package/bin/{darwin/resources → resources}/android/LICENSE.txt +0 -0
  31. /package/bin/{darwin/resources → resources}/android/README.md +0 -0
  32. /package/bin/{darwin/resources → resources}/android/arm64-v8a/libscreen-sharing-agent.so +0 -0
  33. /package/bin/{darwin/resources → resources}/android/armeabi-v7a/libscreen-sharing-agent.so +0 -0
  34. /package/bin/{darwin/resources → resources}/android/screen-sharing-agent.jar +0 -0
  35. /package/bin/{darwin/resources → resources}/android/x86_64/libscreen-sharing-agent.so +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@swmansion/argent",
3
- "version": "0.22.2-next.0",
3
+ "version": "0.22.2-next.10",
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
@@ -36,8 +36,10 @@ If argent is ABSENT, treat it as an expected state, not an error to retry. Do no
36
36
  > </availability_check>
37
37
 
38
38
  <tapping_rule>
39
- <important>**Never** derive tap coordinates from a screenshot</important>
40
- Before **every** tap, you MUST call a discovery tool and extract coordinates from the result. This is not optional. Preferred tools are, in order:
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.
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:
41
43
 
42
44
  - `describe` - native app-level components and safely targetable foreground apps (iOS and Android).
43
45
  - `native-describe-screen` - accessibility screen description via injected native devtools (iOS only)
@@ -45,9 +47,7 @@ Before **every** tap, you MUST call a discovery tool and extract coordinates fro
45
47
 
46
48
  `native-user-interactable-view-at-point` / `native-view-at-point` are follow-up diagnostics once you already have a candidate point (iOS only).
47
49
 
48
- Whenever something changed YOU MUST first call `describe`, or another appropriate discovery tool so you do not hallucinate element positions. Do not guess coordinates if you can use discovery tool. Do not tap if you have not called a discovery tool in the current step. Screenshots alone are never sufficient for coordinates.
49
-
50
- If a **tap fails twice** at the same coordinates, **stop retrying**. Re-run the discovery tool.
50
+ If a **tap fails twice** at the same coordinates, **stop retrying** and re-run a discovery tool.
51
51
 
52
52
  If `describe` fails, **read the exact error before reacting**, follow the recovery guidance in `argent-device-interact` to choose the correct next action.
53
53
 
@@ -73,8 +73,8 @@ Decision order:
73
73
  - All simulator/emulator interactions go through argent MCP tools — never use `xcrun simctl`,
74
74
  raw `curl` to simulator ports, or the simulator-server binary directly.
75
75
  - Before calling any gesture tool for the first time, use ToolSearch to load its schema.
76
- - Interaction tools (`gesture-tap`, `gesture-swipe`, `gesture-pinch`, `gesture-rotate`, `gesture-custom`, `launch-app`, etc.) return a screenshot automatically.
77
- Call `screenshot` separately only for a baseline before any action or after a delay.
76
+ - Interaction tools (`gesture-tap`, `gesture-swipe`, `gesture-pinch`, `gesture-rotate`, `gesture-custom`, `launch-app`, etc.) return a screenshot and the element tree automatically.
77
+ Call `screenshot` or `describe` separately only for a baseline before any action or after a delay.
78
78
  - Always open apps with `launch-app` or `open-url` — never tap home screen icons.
79
79
  - If a task can require a saved flow, choose `argent-create-flow` or `argent-qa-flows` before the first launch or in-app action. Start the recorder before walking the path; recording is not retroactive.
80
80
  - Always use `run-sequence` when performing multiple sequential device actions where you don't need to observe the screen between steps. More in `argent-device-interact` skill.
@@ -103,7 +103,7 @@ Scopes can combine and nest, with at most six scope keys. Use strict selectors f
103
103
 
104
104
  ## Directives
105
105
 
106
- Directives stop the flow on failure and skip later steps. `flow-execute` documents their shapes. The available directives are `launch`, `tap`, `long-press`, `type`, `scroll-to`, `pinch`, `rotate`, `await`, `assert`, `wait`, `snapshot`, `run`, `when`, `echo`, and `tool`.
106
+ Directives stop the flow on failure and skip later steps. `flow-execute` documents their shapes. The available directives are `launch`, `tap`, `long-press`, `swipe`, `type`, `scroll-to`, `pinch`, `rotate`, `await`, `assert`, `wait`, `snapshot`, `run`, `when`, `echo`, and `tool`.
107
107
 
108
108
  Use the launch map for cross-platform flows. A bare launch applies everywhere and becomes an app path on Chromium. The map takes `native:`, `ios:`, `android:`, `vega:`, and `chromium:`. `native:` is one id shared by iOS, Android, and Vega, and a per-platform key overrides it for that platform. `chromium:` accepts a relative or absolute app path. A launch that declares no id for the run's platform is an error, not a cue to switch platforms. On iOS, a successful launch also pins later tree reads to that app until the next raw `tool:` step, so read [The runner tree is not the discovery tree](#the-runner-tree-is-not-the-discovery-tree) when a read describes the wrong screen.
109
109
 
@@ -116,9 +116,36 @@ An Android app that needs a non-launcher activity has no `launch:` form. Record
116
116
 
117
117
  In a `scroll-to` map, put the selector under `target:`. The map supports `up`, `down`, `left`, and `right` directions. The default is `down`; set it explicitly to reach a target above the viewport or along a horizontal carousel. If the target is already visible, the step is a safe no-op. `tap`, `type`, and `long-press` do not auto-scroll. Add `scroll-to` when the target can be off-screen. Use `within` for a nested scroller.
118
118
 
119
+ ### `swipe`
120
+
121
+ `swipe` is one semantic finger flick where the gesture itself is the action — dismiss a card, page a carousel, open a drawer, pull-to-refresh: `- swipe: left`, `- swipe: { from: Card, direction: left }`, `- swipe: { by: { y: -0.4 } }`.
122
+
123
+ **Never use `swipe` to scroll.** Whenever the goal is "bring X on screen so the next step can act on it", write `scroll-to: <X>` instead: it is goal-seeking (stops exactly when the target appears), momentum-free, and a no-op if the target is already visible.
124
+
125
+ **`direction` is the finger's travel** (the Maestro convention): `swipe: left` flings content leftward and reveals what is to the right, the opposite sense of `scroll-to`'s content direction. Declare exactly one travel:
126
+
127
+ - `direction` - Maestro-compatible screen geometry, with edge-gesture-safe start and end points.
128
+ - `by: { x?, y? }` - signed 0-1 screen fractions, one axis or both for a diagonal.
129
+ - `to: <target>` - an explicit endpoint, selector or point.
130
+
131
+ `from` anchors the start on a selector or `{ x, y }` point. Without it the start is the direction preset, or screen centre for `to` and `by`.
132
+
133
+ All three must clear a 0.03 minimum travel on the combined start-to-end vector; shorter reads as a tap and will be rejected/fail.
134
+
135
+ Anchoring decides how a travel that does not fit is resolved:
136
+
137
+ - `direction` keeps the preset magnitude from where the finger lands (0.8 of the width for `left`/`right`, 0.7 of the height for `down`, 0.4 for `up`), clamped at the screen edge. It fails only when the clamp leaves it under 0.03, so a drawer handle or bottom sheet near the edge still swipes.
138
+ - `by` delivers its exact delta or nothing. With `from`, a delta that runs off-screen fails.
139
+
140
+ Only the direction presets carry OS-edge margins. A resolved `from` point is used verbatim, so use `from` for app-level gestures only and write system-edge gestures such as system back as raw `tool: gesture-swipe` steps.
141
+
142
+ `momentum: false` removes the fling, so the swipe lands where the finger stops. The default `momentum: true` is a natural flick that flings on. `duration` (ms) is the travel time: default 300, minimum 150. A shorter gesture gives the content too few frames to track the travel, so it overshoots and may fling backwards. Every `swipe` then waits for the tree to settle, best effort, so its momentum does not swallow the next step's touch.
143
+
144
+ On Chromium a swipe is a mouse drag (`gesture-drag`), so a `from` on an `<img>`, an `<a href>` or a `draggable="true"` node starts the browser's native drag-and-drop: the page gets `pointerdown` then `pointercancel` and sees no travel. On Vega, `swipe` fails upfront like the other touch directives.
145
+
119
146
  `type` presses Enter in a second `keyboard` call unless `submit: false`. A polished focus tap plus one text-only `keyboard` call usually needs `submit: false`. Store external values as `{{secret:NAME}}`. The runner uses the first source that defines the name: environment `ARGENT_SECRET_NAME`; project `.argent/secrets.env`; project `.env.local`, then `.env`; then `~/.argent/secrets.env`. The two `secrets.env` files accept the bare `NAME`, but the shared dotenv files expose only `ARGENT_SECRET_`-prefixed keys, so a bare `NAME=…` in `.env` or `.env.local` stays unresolved. The runner redacts every resolved value, so do not use a placeholder for content a report must show.
120
147
 
121
- A **selector-less gesture** — a coordinate `tap`/`long-press`, or a `pinch`/`rotate` with no `on:` — resolves no frame, so a tree source it cannot read does not fail it. It settles best effort, dispatches anyway, and the step **passes carrying a warning** that quotes the source's own error. That green says the gesture was sent, not that it landed: one aimed at a moving element can miss it entirely. Restore the tree source, usually by relaunching the app so the instrumentation loads. Accept the warning only where the app serves no tree at all, and put an explicit `wait:` before a gesture that follows a transition. The first such gesture proves the outage and later ones spend that verdict without paying the settle window again. A tree read that comes back, or a relaunch, retires that verdict — which only makes the next gesture pay a fresh window, and it warns again if the source is still down.
148
+ A **selector-less gesture** — a coordinate `tap`/`long-press`/`swipe`, or a `pinch`/`rotate` with no `on:` — resolves no frame, so a tree source it cannot read does not fail it. It settles best effort, dispatches anyway, and the step **passes carrying a warning** that quotes the source's own error. That green says the gesture was sent, not that it landed: one aimed at a moving element can miss it entirely. Restore the tree source, usually by relaunching the app so the instrumentation loads. Accept the warning only where the app serves no tree at all, and put an explicit `wait:` before a gesture that follows a transition. The first such gesture proves the outage and later ones spend that verdict without paying the settle window again. A tree read that comes back, or a relaunch, retires that verdict — which only makes the next gesture pay a fresh window, and it warns again if the source is still down.
122
149
 
123
150
  ## Verification conditions
124
151
 
@@ -194,7 +221,7 @@ A `run:` target is a YAML path resolved against the directory of the flow file c
194
221
 
195
222
  - iOS and Android can run fragments or e2e flows inline. A nested e2e launch restarts its app.
196
223
  - Chromium boots one instance per launch **step**, not one per run. The leading launch — the flow's own, or the one its leading `run:` chain reaches — boots before step 1, unless you pinned the run with an explicit `device`, where it only attaches. Every later launch boots a fresh instance, moves the run onto it, and tears down the instance the run already owned for that app path. Nesting a Chromium e2e flow with its own launch is therefore the supported way to give a sub-scenario its own restart. Chromium rejects `pinch` and `rotate`. Use the app's own zoom or rotate controls.
197
- - Vega uses `tool: tv-remote` and raw `tool: keyboard`. The touch directives (`tap`, `long-press`, `type`, `scroll-to`, `pinch`, `rotate`) are unsupported. Gate focus and navigation results with `await`.
224
+ - Vega uses `tool: tv-remote` and raw `tool: keyboard`. The touch directives (`tap`, `long-press`, `swipe`, `type`, `scroll-to`, `pinch`, `rotate`) are unsupported. Gate focus and navigation results with `await`.
198
225
 
199
226
  ## Snapshots and standalone runs
200
227
 
@@ -124,7 +124,8 @@ If characters are lost, restore the field with direct calls. Do not record a dup
124
124
  Record the required live gesture. During polish:
125
125
 
126
126
  - Convert element-seeking movement to selector-based `scroll-to`.
127
- - Retain a raw swipe only when the gesture itself is under test.
127
+ - Convert a swipe that is a gesture in its own right - swipe-to-dismiss, paging a carousel, revealing a row action - to `swipe:`, anchoring `from` on the gesture's **subject** (the card being dismissed, the row being revealed), not on whatever content happened to be under the finger.
128
+ - Retain a raw gesture tool only for what `swipe` deliberately doesn't express - an edge swipe (system back), a multi-touch `gesture-custom`, or exotic velocity control.
128
129
 
129
130
  For every retained raw gesture, add an echo and a recorded result check.
130
131
 
@@ -160,16 +161,17 @@ Stop immediately. Restore the last valid screen with direct MCP calls, not `flow
160
161
 
161
162
  Call `flow-finish-recording`, then read the saved YAML. Apply only meaning-preserving conversions:
162
163
 
163
- | Recorded form | Finished form |
164
- | ----------------------------------------- | ------------------------------------------------------------------ |
165
- | focus tap + `tool: keyboard` | `type:` |
166
- | text `keyboard` + `key: enter` `keyboard` | submitted `type:` without Enter in its text |
167
- | `tool: await-ui-element` | `await:` or `assert:` |
168
- | element-seeking movement | `scroll-to:` |
169
- | coordinate tap or long-press | strict selector after the fallback gate |
170
- | `tool: gesture-pinch` | selector-based `pinch:` with `scale = endDistance / startDistance` |
171
- | `tool: gesture-rotate` | selector-based `rotate:` with `by = endAngle - startAngle` |
172
- | sibling `tool: flow-execute` | recorder-captured `run:` |
164
+ | Recorded form | Finished form |
165
+ | ------------------------------------------ | ------------------------------------------------------------------ |
166
+ | focus tap + `tool: keyboard` | `type:` |
167
+ | text `keyboard` + `key: enter` `keyboard` | submitted `type:` without Enter in its text |
168
+ | `tool: await-ui-element` | `await:` or `assert:` |
169
+ | element-seeking movement | `scroll-to:` |
170
+ | `tool: gesture-swipe` as the action itself | `swipe:` with `from` on the gesture's subject |
171
+ | coordinate tap or long-press | strict selector after the fallback gate |
172
+ | `tool: gesture-pinch` | selector-based `pinch:` with `scale = endDistance / startDistance` |
173
+ | `tool: gesture-rotate` | selector-based `rotate:` with `by = endAngle - startAngle` |
174
+ | sibling `tool: flow-execute` | recorder-captured `run:` |
173
175
 
174
176
  Copy the recorded `selector:` map when you convert a wait. Do not use the loose bare-string form. Flow YAML accepts `identifier`; rename it to `id` only for style. Convert `textMatch: equals` to `equals:` and other text checks to `contains:`.
175
177
 
@@ -179,7 +181,7 @@ Only these unrecorded insertions are allowed, at states observed live:
179
181
  - `await: { idle: true }` after a navigation identity check.
180
182
  - The Chromium launch that packages the live boot.
181
183
 
182
- Keep raw forms only when conversion changes behavior. Examples include point-anchored or panning pinch, velocity-sensitive swipe, or rotation with a tested start angle, radius, pivot, duration, or speed. Keep screenshots for human evidence. Use `snapshot:` for automated visual comparison. Read [Flow YAML](flow-yaml.md) for syntax.
184
+ Keep raw forms only when conversion changes behavior. Examples include point-anchored or panning pinch, an edge swipe or one with exotic velocity control, or rotation with a tested start angle, radius, pivot, duration, or speed. Keep screenshots for human evidence. Use `snapshot:` for automated visual comparison. Read [Flow YAML](flow-yaml.md) for syntax.
183
185
 
184
186
  If polish reveals a missing action or structural check, restore its preceding state and record it. Do not add remembered behavior directly to YAML.
185
187
 
@@ -60,9 +60,9 @@ Give the flow a `launch:` step as usual. On iOS the launch waits the full devtoo
60
60
  - Raw `tool: await-ui-element` accessibility checks.
61
61
  - Point taps or long-presses derived from `describe`, each named by an echo.
62
62
  - A point focus tap plus a raw text-only `keyboard` with `delayMs: 500`, and a second raw `keyboard` with `key: "enter"` to submit.
63
- - Raw swipes with `settle: true` because `scroll-to` needs the missing flow tree. Momentum-free scrolling keeps later coordinate taps valid.
63
+ - Raw swipes with `momentum: false` because `scroll-to` needs the missing flow tree. Momentum-free scrolling keeps later coordinate taps valid. `momentum: false` needs `durationMs` of at least 150 and is rejected below it, so keep the 300 default or raise it.
64
64
 
65
- Every point tap or long-press in such a flow passes **carrying a warning** for as long as the app serves no tree: each [selector-less gesture](flow-yaml.md#directives) dispatches unsettled. Nothing here repairs it. Accept the warnings, read each green as "the gesture was sent, not that it landed", and put an explicit `wait:` or a raw `tool: await-ui-element` before a gesture that follows a transition. Raw `tool:` steps take no settle, so they never carry that warning.
65
+ Every point tap, long-press or coordinate swipe in such a flow passes **carrying a warning** for as long as the app serves no tree: each [selector-less gesture](flow-yaml.md#directives) dispatches unsettled. Nothing here repairs it. Accept the warnings, read each green as "the gesture was sent, not that it landed", and put an explicit `wait:` or a raw `tool: await-ui-element` before a gesture that follows a transition. Raw `tool:` steps take no settle, so they never carry that warning.
66
66
 
67
67
  A recorded wait carries a different warning: it adds about one second and reports that the runner tree is unavailable. That warning is expected too. Keep the wait as a raw `tool:` step.
68
68
 
@@ -29,10 +29,10 @@ Use `list-devices` to get a target id. Results are tagged with `platform` (`ios`
29
29
 
30
30
  1. **Always refer to tapping_rule** from your argent.md rule before tapping.
31
31
  2. Before performing interactions, consider whether they can be **dispatched sequentially** - more on that in `run-sequence`.
32
- 3. **Use `gesture-swipe` for lists/scrolling**, not `gesture-custom`, unless you need non-linear movement. On Chromium use `gesture-scroll` instead — `gesture-swipe` is touch-only. Consider whether you need multiple swipes, if yes - use `run-sequence`.
32
+ 3. **Use `gesture-swipe` for lists/scrolling**, not `gesture-custom`, unless you need non-linear movement. On Chromium use `gesture-scroll` instead — `gesture-swipe` is touch-only. Consider whether you need multiple swipes, if yes - use `run-sequence`. Pass `momentum: false` when the swipe should decelerate before ending for a precise movement.
33
33
  4. **Tap a text field before typing**, then use `keyboard` to enter text.
34
34
  5. **Coordinates are normalized** — always 0.0–1.0, not pixels.
35
- 6. **For app navigation, prefer `describe` first.** It works on any screen without app restart. Do not navigate from screenshots on regular in-app screens unless `describe` failed to expose a reliable target. Use `native-describe-screen` only when you need app-scoped UIKit properties.
35
+ 6. **For app navigation, use the element tree returned after each action** (`--- Elements after action (describe) ---`); call `describe` only when no fresh tree is available for the current screen. It works on any screen without app restart. Do not navigate from screenshot pixels on regular in-app screens unless the tree failed to expose a reliable target. Use `native-describe-screen` only when you need app-scoped UIKit properties.
36
36
 
37
37
  ## 3. Opening Apps
38
38
 
@@ -131,6 +131,8 @@ Before tapping near the bottom of the screen in React Native apps, check that "O
131
131
 
132
132
  Swipe **up** (`fromY > toY`) = scroll content **down**. Default duration: 300ms. Optional: `"durationMs": 500` for slower swipe.
133
133
 
134
+ `"momentum"` defaults to `true` (a natural flinging swipe). Pass `"momentum": false` for a momentum-free swipe: the finger decelerates into the end point, resulting in little to no fling. It needs `durationMs` of at least 150 and is rejected below it.
135
+
134
136
  ### gesture-pinch — Two-finger pinch
135
137
 
136
138
  ```json
@@ -101,7 +101,7 @@ After the last edit and audit, set the streak to zero:
101
101
  2. Seed, review, and freeze snapshot baselines. Baseline updates do not count as passes.
102
102
  3. Before mobile pass 1, recycle Argent services for this flow's device: two warm passes are correlated evidence, because a fixed timing margin can pass twice simply because environment speed did not change. Scope `stop-all-simulator-servers` to `devices: [<device>]`. Never omit the scope — a bare call is the machine-wide sweep, and step 7 restarts this proof often enough to reap every other agent's devices repeatedly. Use the MCP call for `flow-execute`, or `argent run stop-all-simulator-servers --devices <device>` from the standalone runner's install. The reset must not change app or account data. For Chromium, let the runner boot the declared app and omit `device`. Vega owns no recyclable Argent services, so the teardown is a no-op there and both passes are warm.
103
103
  4. Run from the flow's launch and setup without baseline-update mode. Count a pass only when `ok: true` and every acceptance check executed. A false `when:` can skip optional setup only. An errored step does not advance the streak, and the count mixes two kinds — read each reason. One that could not run (an unreadable tree under `idle`, an unresolvable `run:` target) is environment: fix it and rerun. **A failed `launch:` also scores `errored`, and it is a verdict about the app** — an app that no longer installs or starts is the regression this test exists to catch, so report it instead of rerunning.
104
- 5. Resolve every passing-step warning before completion. Also resolve recorded-wait warnings from `flow-finish-recording`. Follow [Live waits and checks](../argent-create-flow/references/live-authoring.md#live-waits-and-checks). For runner warnings, `await: { idle: true }` raises [six different warnings](../argent-create-flow/references/flow-yaml.md#idle-readiness), so read which one it is first. Two say the screen was moving. One says the wait ran out mid-hold and needs a larger `timeout:`. One says the tree stayed empty. One — **settled on the UI tree alone** — says the hierarchy did hold still and only the screenshot pairs were missing, so inspect the capture path rather than the app's rendering. One says the step ended with no evidence either way. Inspect the screen, disclose the cause, and verify that surrounding acceptance checks use stable elements rather than stillness. A [selector-less gesture](../argent-create-flow/references/flow-yaml.md#directives) — a coordinate `tap`/`long-press`, or a `pinch`/`rotate` with no `on:` — warns in a different shape: a tree-source outage left it unsettled, so it dispatched blind and the green says only that the gesture was sent. Restore the tree source, usually by relaunching the app so the instrumentation loads, and rerun. Accepting that warning needs an app that serves no tree, which cannot satisfy this contract anyway.
104
+ 5. Resolve every passing-step warning before completion. Also resolve recorded-wait warnings from `flow-finish-recording`. Follow [Live waits and checks](../argent-create-flow/references/live-authoring.md#live-waits-and-checks). For runner warnings, `await: { idle: true }` raises [six different warnings](../argent-create-flow/references/flow-yaml.md#idle-readiness), so read which one it is first. Two say the screen was moving. One says the wait ran out mid-hold and needs a larger `timeout:`. One says the tree stayed empty. One — **settled on the UI tree alone** — says the hierarchy did hold still and only the screenshot pairs were missing, so inspect the capture path rather than the app's rendering. One says the step ended with no evidence either way. Inspect the screen, disclose the cause, and verify that surrounding acceptance checks use stable elements rather than stillness. A [selector-less gesture](../argent-create-flow/references/flow-yaml.md#directives) — a coordinate `tap`/`long-press`/`swipe`, or a `pinch`/`rotate` with no `on:` — warns in a different shape: a tree-source outage left it unsettled, so it dispatched blind and the green says only that the gesture was sent. Restore the tree source, usually by relaunching the app so the instrumentation loads, and rerun. Accepting that warning needs an app that serves no tree, which cannot satisfy this contract anyway.
105
105
  6. Run the same YAML again immediately with the same runner. Do not manually reset app or account data.
106
106
  7. Reset the streak after any failure, edit, re-recording, baseline update, or state-changing manual recovery. Repair through `argent-create-flow`, audit again, and restart with fresh services.
107
107
 
@@ -1,186 +0,0 @@
1
- NOTE: This is the license for the Android screen-sharing agent bundled in this
2
- directory -- "screen-sharing-agent.jar" and the per-ABI
3
- "libscreen-sharing-agent.so" files. Those binaries are taken from the Android
4
- Studio IDE (JetBrains' "android/streaming" module) and are redistributed under
5
- the Apache License 2.0 reproduced below; see README.md in this directory for
6
- provenance. This note is informational only and does not modify the terms that
7
- follow.
8
-
9
- --------------------------------------------------------------------------------
10
-
11
- Apache License
12
- Version 2.0, January 2004
13
- http://www.apache.org/licenses/
14
-
15
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
16
-
17
- 1. Definitions.
18
-
19
- "License" shall mean the terms and conditions for use, reproduction,
20
- and distribution as defined by Sections 1 through 9 of this document.
21
-
22
- "Licensor" shall mean the copyright owner or entity authorized by
23
- the copyright owner that is granting the License.
24
-
25
- "Legal Entity" shall mean the union of the acting entity and all
26
- other entities that control, are controlled by, or are under common
27
- control with that entity. For the purposes of this definition,
28
- "control" means (i) the power, direct or indirect, to cause the
29
- direction or management of such entity, whether by contract or
30
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
31
- outstanding shares, or (iii) beneficial ownership of such entity.
32
-
33
- "You" (or "Your") shall mean an individual or Legal Entity
34
- exercising permissions granted by this License.
35
-
36
- "Source" form shall mean the preferred form for making modifications,
37
- including but not limited to software source code, documentation
38
- source, and configuration files.
39
-
40
- "Object" form shall mean any form resulting from mechanical
41
- transformation or translation of a Source form, including but
42
- not limited to compiled object code, generated documentation,
43
- and conversions to other media types.
44
-
45
- "Work" shall mean the work of authorship, whether in Source or
46
- Object form, made available under the License, as indicated by a
47
- copyright notice that is included in or attached to the work
48
- (an example is provided in the Appendix below).
49
-
50
- "Derivative Works" shall mean any work, whether in Source or Object
51
- form, that is based on (or derived from) the Work and for which the
52
- editorial revisions, annotations, elaborations, or other modifications
53
- represent, as a whole, an original work of authorship. For the purposes
54
- of this License, Derivative Works shall not include works that remain
55
- separable from, or merely link (or bind by name) to the interfaces of,
56
- the Work and Derivative Works thereof.
57
-
58
- "Contribution" shall mean any work of authorship, including
59
- the original version of the Work and any modifications or additions
60
- to that Work or Derivative Works thereof, that is intentionally
61
- submitted to Licensor for inclusion in the Work by the copyright owner
62
- or by an individual or Legal Entity authorized to submit on behalf of
63
- the copyright owner. For the purposes of this definition, "submitted"
64
- means any form of electronic, verbal, or written communication sent
65
- to the Licensor or its representatives, including but not limited to
66
- communication on electronic mailing lists, source code control systems,
67
- and issue tracking systems that are managed by, or on behalf of, the
68
- Licensor for the purpose of discussing and improving the Work, but
69
- excluding communication that is conspicuously marked or otherwise
70
- designated in writing by the copyright owner as "Not a Contribution."
71
-
72
- "Contributor" shall mean Licensor and any individual or Legal Entity
73
- on behalf of whom a Contribution has been received by Licensor and
74
- subsequently incorporated within the Work.
75
-
76
- 2. Grant of Copyright License. Subject to the terms and conditions of
77
- this License, each Contributor hereby grants to You a perpetual,
78
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
79
- copyright license to reproduce, prepare Derivative Works of,
80
- publicly display, publicly perform, sublicense, and distribute the
81
- Work and such Derivative Works in Source or Object form.
82
-
83
- 3. Grant of Patent License. Subject to the terms and conditions of
84
- this License, each Contributor hereby grants to You a perpetual,
85
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
86
- (except as stated in this section) patent license to make, have made,
87
- use, offer to sell, sell, import, and otherwise transfer the Work,
88
- where such license applies only to those patent claims licensable
89
- by such Contributor that are necessarily infringed by their
90
- Contribution(s) alone or by combination of their Contribution(s)
91
- with the Work to which such Contribution(s) was submitted. If You
92
- institute patent litigation against any entity (including a
93
- cross-claim or counterclaim in a lawsuit) alleging that the Work
94
- or a Contribution incorporated within the Work constitutes direct
95
- or contributory patent infringement, then any patent licenses
96
- granted to You under this License for that Work shall terminate
97
- as of the date such litigation is filed.
98
-
99
- 4. Redistribution. You may reproduce and distribute copies of the
100
- Work or Derivative Works thereof in any medium, with or without
101
- modifications, and in Source or Object form, provided that You
102
- meet the following conditions:
103
-
104
- (a) You must give any other recipients of the Work or
105
- Derivative Works a copy of this License; and
106
-
107
- (b) You must cause any modified files to carry prominent notices
108
- stating that You changed the files; and
109
-
110
- (c) You must retain, in the Source form of any Derivative Works
111
- that You distribute, all copyright, patent, trademark, and
112
- attribution notices from the Source form of the Work,
113
- excluding those notices that do not pertain to any part of
114
- the Derivative Works; and
115
-
116
- (d) If the Work includes a "NOTICE" text file as part of its
117
- distribution, then any Derivative Works that You distribute must
118
- include a readable copy of the attribution notices contained
119
- within such NOTICE file, excluding those notices that do not
120
- pertain to any part of the Derivative Works, in at least one
121
- of the following places: within a NOTICE text file distributed
122
- as part of the Derivative Works; within the Source form or
123
- documentation, if provided along with the Derivative Works; or,
124
- within a display generated by the Derivative Works, if and
125
- wherever such third-party notices normally appear. The contents
126
- of the NOTICE file are for informational purposes only and
127
- do not modify the License. You may add Your own attribution
128
- notices within Derivative Works that You distribute, alongside
129
- or as an addendum to the NOTICE text from the Work, provided
130
- that such additional attribution notices cannot be construed
131
- as modifying the License.
132
-
133
- You may add Your own copyright statement to Your modifications and
134
- may provide additional or different license terms and conditions
135
- for use, reproduction, or distribution of Your modifications, or
136
- for any such Derivative Works as a whole, provided Your use,
137
- reproduction, and distribution of the Work otherwise complies with
138
- the conditions stated in this License.
139
-
140
- 5. Submission of Contributions. Unless You explicitly state otherwise,
141
- any Contribution intentionally submitted for inclusion in the Work
142
- by You to the Licensor shall be under the terms and conditions of
143
- this License, without any additional terms or conditions.
144
- Notwithstanding the above, nothing herein shall supersede or modify
145
- the terms of any separate license agreement you may have executed
146
- with Licensor regarding such Contributions.
147
-
148
- 6. Trademarks. This License does not grant permission to use the trade
149
- names, trademarks, service marks, or product names of the Licensor,
150
- except as required for reasonable and customary use in describing the
151
- origin of the Work and reproducing the content of the NOTICE file.
152
-
153
- 7. Disclaimer of Warranty. Unless required by applicable law or
154
- agreed to in writing, Licensor provides the Work (and each
155
- Contributor provides its Contributions) on an "AS IS" BASIS,
156
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
157
- implied, including, without limitation, any warranties or conditions
158
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
159
- PARTICULAR PURPOSE. You are solely responsible for determining the
160
- appropriateness of using or redistributing the Work and assume any
161
- risks associated with Your exercise of permissions under this License.
162
-
163
- 8. Limitation of Liability. In no event and under no legal theory,
164
- whether in tort (including negligence), contract, or otherwise,
165
- unless required by applicable law (such as deliberate and grossly
166
- negligent acts) or agreed to in writing, shall any Contributor be
167
- liable to You for damages, including any direct, indirect, special,
168
- incidental, or consequential damages of any character arising as a
169
- result of this License or out of the use or inability to use the
170
- Work (including but not limited to damages for loss of goodwill,
171
- work stoppage, computer failure or malfunction, or any and all
172
- other commercial damages or losses), even if such Contributor
173
- has been advised of the possibility of such damages.
174
-
175
- 9. Accepting Warranty or Additional Liability. While redistributing
176
- the Work or Derivative Works thereof, You may choose to offer,
177
- and charge a fee for, acceptance of support, warranty, indemnity,
178
- or other liability obligations and/or rights consistent with this
179
- License. However, in accepting such obligations, You may act only
180
- on Your own behalf and on Your sole responsibility, not on behalf
181
- of any other Contributor, and only if You agree to indemnify,
182
- defend, and hold each Contributor harmless for any liability
183
- incurred by, or claims asserted against, such Contributor by reason
184
- of your accepting any such warranty or additional liability.
185
-
186
- END OF TERMS AND CONDITIONS
@@ -1,11 +0,0 @@
1
- This directory is provided as part of the Android Studio IDE
2
-
3
- ```
4
- /Applications/Android Studio.app/Contents/plugins/android/resources/screen-sharing-agent
5
- ```
6
-
7
- with source code available (and licensed under Apache 2.0 license) at
8
-
9
- ```
10
- https://github.com/JetBrains/android/streaming
11
- ```
@@ -1,186 +0,0 @@
1
- NOTE: This is the license for the Android screen-sharing agent bundled in this
2
- directory -- "screen-sharing-agent.jar" and the per-ABI
3
- "libscreen-sharing-agent.so" files. Those binaries are taken from the Android
4
- Studio IDE (JetBrains' "android/streaming" module) and are redistributed under
5
- the Apache License 2.0 reproduced below; see README.md in this directory for
6
- provenance. This note is informational only and does not modify the terms that
7
- follow.
8
-
9
- --------------------------------------------------------------------------------
10
-
11
- Apache License
12
- Version 2.0, January 2004
13
- http://www.apache.org/licenses/
14
-
15
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
16
-
17
- 1. Definitions.
18
-
19
- "License" shall mean the terms and conditions for use, reproduction,
20
- and distribution as defined by Sections 1 through 9 of this document.
21
-
22
- "Licensor" shall mean the copyright owner or entity authorized by
23
- the copyright owner that is granting the License.
24
-
25
- "Legal Entity" shall mean the union of the acting entity and all
26
- other entities that control, are controlled by, or are under common
27
- control with that entity. For the purposes of this definition,
28
- "control" means (i) the power, direct or indirect, to cause the
29
- direction or management of such entity, whether by contract or
30
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
31
- outstanding shares, or (iii) beneficial ownership of such entity.
32
-
33
- "You" (or "Your") shall mean an individual or Legal Entity
34
- exercising permissions granted by this License.
35
-
36
- "Source" form shall mean the preferred form for making modifications,
37
- including but not limited to software source code, documentation
38
- source, and configuration files.
39
-
40
- "Object" form shall mean any form resulting from mechanical
41
- transformation or translation of a Source form, including but
42
- not limited to compiled object code, generated documentation,
43
- and conversions to other media types.
44
-
45
- "Work" shall mean the work of authorship, whether in Source or
46
- Object form, made available under the License, as indicated by a
47
- copyright notice that is included in or attached to the work
48
- (an example is provided in the Appendix below).
49
-
50
- "Derivative Works" shall mean any work, whether in Source or Object
51
- form, that is based on (or derived from) the Work and for which the
52
- editorial revisions, annotations, elaborations, or other modifications
53
- represent, as a whole, an original work of authorship. For the purposes
54
- of this License, Derivative Works shall not include works that remain
55
- separable from, or merely link (or bind by name) to the interfaces of,
56
- the Work and Derivative Works thereof.
57
-
58
- "Contribution" shall mean any work of authorship, including
59
- the original version of the Work and any modifications or additions
60
- to that Work or Derivative Works thereof, that is intentionally
61
- submitted to Licensor for inclusion in the Work by the copyright owner
62
- or by an individual or Legal Entity authorized to submit on behalf of
63
- the copyright owner. For the purposes of this definition, "submitted"
64
- means any form of electronic, verbal, or written communication sent
65
- to the Licensor or its representatives, including but not limited to
66
- communication on electronic mailing lists, source code control systems,
67
- and issue tracking systems that are managed by, or on behalf of, the
68
- Licensor for the purpose of discussing and improving the Work, but
69
- excluding communication that is conspicuously marked or otherwise
70
- designated in writing by the copyright owner as "Not a Contribution."
71
-
72
- "Contributor" shall mean Licensor and any individual or Legal Entity
73
- on behalf of whom a Contribution has been received by Licensor and
74
- subsequently incorporated within the Work.
75
-
76
- 2. Grant of Copyright License. Subject to the terms and conditions of
77
- this License, each Contributor hereby grants to You a perpetual,
78
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
79
- copyright license to reproduce, prepare Derivative Works of,
80
- publicly display, publicly perform, sublicense, and distribute the
81
- Work and such Derivative Works in Source or Object form.
82
-
83
- 3. Grant of Patent License. Subject to the terms and conditions of
84
- this License, each Contributor hereby grants to You a perpetual,
85
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
86
- (except as stated in this section) patent license to make, have made,
87
- use, offer to sell, sell, import, and otherwise transfer the Work,
88
- where such license applies only to those patent claims licensable
89
- by such Contributor that are necessarily infringed by their
90
- Contribution(s) alone or by combination of their Contribution(s)
91
- with the Work to which such Contribution(s) was submitted. If You
92
- institute patent litigation against any entity (including a
93
- cross-claim or counterclaim in a lawsuit) alleging that the Work
94
- or a Contribution incorporated within the Work constitutes direct
95
- or contributory patent infringement, then any patent licenses
96
- granted to You under this License for that Work shall terminate
97
- as of the date such litigation is filed.
98
-
99
- 4. Redistribution. You may reproduce and distribute copies of the
100
- Work or Derivative Works thereof in any medium, with or without
101
- modifications, and in Source or Object form, provided that You
102
- meet the following conditions:
103
-
104
- (a) You must give any other recipients of the Work or
105
- Derivative Works a copy of this License; and
106
-
107
- (b) You must cause any modified files to carry prominent notices
108
- stating that You changed the files; and
109
-
110
- (c) You must retain, in the Source form of any Derivative Works
111
- that You distribute, all copyright, patent, trademark, and
112
- attribution notices from the Source form of the Work,
113
- excluding those notices that do not pertain to any part of
114
- the Derivative Works; and
115
-
116
- (d) If the Work includes a "NOTICE" text file as part of its
117
- distribution, then any Derivative Works that You distribute must
118
- include a readable copy of the attribution notices contained
119
- within such NOTICE file, excluding those notices that do not
120
- pertain to any part of the Derivative Works, in at least one
121
- of the following places: within a NOTICE text file distributed
122
- as part of the Derivative Works; within the Source form or
123
- documentation, if provided along with the Derivative Works; or,
124
- within a display generated by the Derivative Works, if and
125
- wherever such third-party notices normally appear. The contents
126
- of the NOTICE file are for informational purposes only and
127
- do not modify the License. You may add Your own attribution
128
- notices within Derivative Works that You distribute, alongside
129
- or as an addendum to the NOTICE text from the Work, provided
130
- that such additional attribution notices cannot be construed
131
- as modifying the License.
132
-
133
- You may add Your own copyright statement to Your modifications and
134
- may provide additional or different license terms and conditions
135
- for use, reproduction, or distribution of Your modifications, or
136
- for any such Derivative Works as a whole, provided Your use,
137
- reproduction, and distribution of the Work otherwise complies with
138
- the conditions stated in this License.
139
-
140
- 5. Submission of Contributions. Unless You explicitly state otherwise,
141
- any Contribution intentionally submitted for inclusion in the Work
142
- by You to the Licensor shall be under the terms and conditions of
143
- this License, without any additional terms or conditions.
144
- Notwithstanding the above, nothing herein shall supersede or modify
145
- the terms of any separate license agreement you may have executed
146
- with Licensor regarding such Contributions.
147
-
148
- 6. Trademarks. This License does not grant permission to use the trade
149
- names, trademarks, service marks, or product names of the Licensor,
150
- except as required for reasonable and customary use in describing the
151
- origin of the Work and reproducing the content of the NOTICE file.
152
-
153
- 7. Disclaimer of Warranty. Unless required by applicable law or
154
- agreed to in writing, Licensor provides the Work (and each
155
- Contributor provides its Contributions) on an "AS IS" BASIS,
156
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
157
- implied, including, without limitation, any warranties or conditions
158
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
159
- PARTICULAR PURPOSE. You are solely responsible for determining the
160
- appropriateness of using or redistributing the Work and assume any
161
- risks associated with Your exercise of permissions under this License.
162
-
163
- 8. Limitation of Liability. In no event and under no legal theory,
164
- whether in tort (including negligence), contract, or otherwise,
165
- unless required by applicable law (such as deliberate and grossly
166
- negligent acts) or agreed to in writing, shall any Contributor be
167
- liable to You for damages, including any direct, indirect, special,
168
- incidental, or consequential damages of any character arising as a
169
- result of this License or out of the use or inability to use the
170
- Work (including but not limited to damages for loss of goodwill,
171
- work stoppage, computer failure or malfunction, or any and all
172
- other commercial damages or losses), even if such Contributor
173
- has been advised of the possibility of such damages.
174
-
175
- 9. Accepting Warranty or Additional Liability. While redistributing
176
- the Work or Derivative Works thereof, You may choose to offer,
177
- and charge a fee for, acceptance of support, warranty, indemnity,
178
- or other liability obligations and/or rights consistent with this
179
- License. However, in accepting such obligations, You may act only
180
- on Your own behalf and on Your sole responsibility, not on behalf
181
- of any other Contributor, and only if You agree to indemnify,
182
- defend, and hold each Contributor harmless for any liability
183
- incurred by, or claims asserted against, such Contributor by reason
184
- of your accepting any such warranty or additional liability.
185
-
186
- END OF TERMS AND CONDITIONS
@@ -1,11 +0,0 @@
1
- This directory is provided as part of the Android Studio IDE
2
-
3
- ```
4
- /Applications/Android Studio.app/Contents/plugins/android/resources/screen-sharing-agent
5
- ```
6
-
7
- with source code available (and licensed under Apache 2.0 license) at
8
-
9
- ```
10
- https://github.com/JetBrains/android/streaming
11
- ```