agent-device 0.21.7 → 0.21.9
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/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.7.apk → agent-device-android-ime-helper-0.21.9.apk} +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.9.apk.sha256 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.7.manifest.json → agent-device-android-ime-helper-0.21.9.manifest.json} +4 -4
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.7.apk → agent-device-android-snapshot-helper-0.21.9.apk} +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.9.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.7.manifest.json → agent-device-android-snapshot-helper-0.21.9.manifest.json} +6 -6
- package/apple/macos-helper/Package.swift +16 -1
- package/apple/macos-helper/Sources/AgentDeviceMacOSDeviceHub/DeviceHubPose.swift +47 -0
- package/apple/macos-helper/Sources/AgentDeviceMacOSDeviceHub/DeviceHubWindowInventory.swift +65 -0
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/DeviceHubPose.swift +225 -0
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/DeviceHubSidebar.swift +57 -0
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/DeviceHubWindowDiscovery.swift +108 -0
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/main.swift +66 -13
- package/apple/macos-helper/Sources/AgentDeviceMacOSInput/MouseClickDelivery.swift +116 -0
- package/apple/macos-helper/Sources/AgentDeviceMacOSInput/MouseClickSchedule.swift +61 -0
- package/apple/macos-helper/Tests/AgentDeviceMacOSDeviceHubTests/DeviceHubPoseTests.swift +30 -0
- package/apple/macos-helper/Tests/AgentDeviceMacOSDeviceHubTests/DeviceHubWindowInventoryTests.swift +65 -0
- package/apple/macos-helper/Tests/AgentDeviceMacOSInputTests/MouseClickScheduleTests.swift +58 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/AgentDeviceRunnerUITests-Bridging-Header.h +1 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAppScreenCapture.swift +175 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.h +10 -2
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.m +42 -15
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +8 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +45 -22
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Interaction.swift +39 -734
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Keyboard.swift +20 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +63 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +13 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +25 -10
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +5 -562
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotAcquisition.swift +566 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedGesturePolicy.swift +5 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift +594 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerXCTestEventBridge.h +35 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerXCTestEventBridge.m +160 -0
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/RecordingExportSupport.swift +3 -0
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-frames.swift +203 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotCoordinateSpace.swift +5 -0
- package/dist/src/absence-observation-errors.js +1 -1
- package/dist/src/adapter.js +1 -1
- package/dist/src/agent-browser-lifecycle.js +1 -1
- package/dist/src/agent-browser-process-record.js +1 -1
- package/dist/src/agent-device-client.js +2 -2
- package/dist/src/alert-runtime.js +1 -1
- package/dist/src/android-adb.js +1 -1
- package/dist/src/android-input-ownership.js +1 -1
- package/dist/src/android.js +1 -1
- package/dist/src/app-launch.js +1 -1
- package/dist/src/app-log-runtime2.js +3 -3
- package/dist/src/app-resolution.js +2 -2
- package/dist/src/apple-runner-platform.js +1 -1
- package/dist/src/application-lifecycle-interaction.js +1 -1
- package/dist/src/artifact-paths.js +1 -0
- package/dist/src/back-mode.js +1 -1
- package/dist/src/cli-config.js +1 -1
- package/dist/src/cli-help.js +15 -11
- package/dist/src/cli.js +4 -4
- package/dist/src/client-types.d.ts +51 -1
- package/dist/src/command-tools.js +3 -3
- package/dist/src/config.js +1 -1
- package/dist/src/connection-runtime.js +1 -1
- package/dist/src/device-claim-inspection.js +1 -1
- package/dist/src/device-claim-rule.js +2 -2
- package/dist/src/device-input-state.d.ts +1 -1
- package/dist/src/device-rotation.js +1 -1
- package/dist/src/device-selection-resolver.js +1 -1
- package/dist/src/device-session.js +1 -1
- package/dist/src/device.js +1 -1
- package/dist/src/device2.js +1 -1
- package/dist/src/devicectl.js +1 -1
- package/dist/src/dispatch-resolve.js +1 -1
- package/dist/src/display-inventory.js +1 -1
- package/dist/src/doctor-facade.js +1 -1
- package/dist/src/durable-resource.js +1 -1
- package/dist/src/exec.js +1 -1
- package/dist/src/find.js +1 -1
- package/dist/src/finders.js +1 -1
- package/dist/src/fold-runtime.js +1 -0
- package/dist/src/gesture-admission.js +1 -1
- package/dist/src/gesture-runtime.js +1 -1
- package/dist/src/harmonyos.js +1 -1
- package/dist/src/helper.js +2 -2
- package/dist/src/host.js +1 -0
- package/dist/src/interaction-positionals.js +1 -1
- package/dist/src/interaction-ref-policy.js +1 -1
- package/dist/src/interaction.js +1 -1
- package/dist/src/interaction2.js +1 -1
- package/dist/src/interactor-operation-binding.js +1 -0
- package/dist/src/interactor-operation-catalog.js +1 -1
- package/dist/src/interactor.js +4 -5
- package/dist/src/interactor2.js +1 -1
- package/dist/src/interactors.js +1 -1
- package/dist/src/internal/bin.js +1 -1
- package/dist/src/internal/daemon.js +2 -2
- package/dist/src/internal/png-worker.d.ts +5 -0
- package/dist/src/internal/png-worker.js +1 -1
- package/dist/src/inventory2.js +1 -1
- package/dist/src/ios-snapshot-acquisition.js +1 -1
- package/dist/src/ios-snapshot-runtime.js +1 -1
- package/dist/src/lease.js +1 -1
- package/dist/src/linux.js +1 -1
- package/dist/src/local-interactor-operation-set.js +1 -1
- package/dist/src/location-coordinates.js +1 -1
- package/dist/src/macos-facade.js +1 -1
- package/dist/src/managed-device-scope.js +1 -1
- package/dist/src/mechanics.js +17 -16
- package/dist/src/mobile-snapshot-semantics.js +1 -1
- package/dist/src/mp4-duration.js +1 -0
- package/dist/src/multitouch-support.js +1 -1
- package/dist/src/owner-identity.js +1 -1
- package/dist/src/parameterized-recorded-fill.js +1 -1
- package/dist/src/perf-facade.js +2 -2
- package/dist/src/perf-runtime-plan.js +1 -1
- package/dist/src/physical-device-control.js +1 -1
- package/dist/src/platform-request-scope.js +1 -1
- package/dist/src/platform-runtime-managed-owner.js +1 -1
- package/dist/src/platform-runtime-open-target.js +1 -1
- package/dist/src/platform-runtime-operation-host.js +2 -2
- package/dist/src/platform-runtime-runtime-hints.js +1 -1
- package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
- package/dist/src/platform-runtime-unavailable.js +1 -1
- package/dist/src/platform-runtime.js +1 -1
- package/dist/src/platform-runtime2.js +1 -1
- package/dist/src/png-crop-bytes.js +1 -1
- package/dist/src/png-encode.js +1 -0
- package/dist/src/png-size.js +1 -0
- package/dist/src/png-worker-client.js +1 -1
- package/dist/src/provider-webdriver.js +1 -1
- package/dist/src/quality-warnings.js +1 -1
- package/dist/src/react-native.js +1 -1
- package/dist/src/record-runtime.js +1 -1
- package/dist/src/recording-export-quality.js +1 -1
- package/dist/src/recording-scope.js +1 -0
- package/dist/src/recording.js +3 -0
- package/dist/src/registry.js +35 -35
- package/dist/src/replay.js +1 -1
- package/dist/src/request-admission.js +1 -1
- package/dist/src/request-runtime-binding.js +1 -1
- package/dist/src/result-serialization.js +1 -1
- package/dist/src/runner-cache-metadata.js +2 -2
- package/dist/src/runner-client.js +1 -1
- package/dist/src/runner-contract.js +3 -0
- package/dist/src/runner-dev-tools-security.js +1 -0
- package/dist/src/runner-device-readiness.js +1 -0
- package/dist/src/runner-disposal.js +1 -1
- package/dist/src/runner-operations-facade.js +1 -1
- package/dist/src/runner-presentation.js +1 -1
- package/dist/src/runner.js +1 -1
- package/dist/src/runtime.js +2 -2
- package/dist/src/runtime10.js +2 -1
- package/dist/src/runtime2.js +4 -4
- package/dist/src/runtime4.js +5 -5
- package/dist/src/runtime5.js +1 -1
- package/dist/src/runtime6.js +1 -1
- package/dist/src/runtime7.js +1 -1
- package/dist/src/runtime8.js +1 -1
- package/dist/src/runtime9.js +1 -1
- package/dist/src/screen-recording-admission-ledger.js +1 -1
- package/dist/src/screen-recording-resource-recovery.js +1 -1
- package/dist/src/screen-recording-transport.js +1 -1
- package/dist/src/screenshot-density.js +1 -1
- package/dist/src/screenshot-image.js +1 -0
- package/dist/src/screenshot-overlay-draw.js +1 -0
- package/dist/src/screenshot-runtime.js +1 -1
- package/dist/src/script.js +1 -1
- package/dist/src/scroll-gesture.js +1 -1
- package/dist/src/sdk-batch.js +2 -2
- package/dist/src/sdk-contracts.d.ts +7 -5
- package/dist/src/sdk-contracts.js +2 -2
- package/dist/src/sdk-device.js +1 -1
- package/dist/src/sdk-finders.js +1 -1
- package/dist/src/sdk-selectors.d.ts +58 -6
- package/dist/src/sdk-selectors.js +1 -1
- package/dist/src/selection.js +0 -0
- package/dist/src/selector-runtime.js +1 -1
- package/dist/src/selectors.js +1 -1
- package/dist/src/semantic-index.js +1 -1
- package/dist/src/session-routing.js +1 -1
- package/dist/src/session-snapshot.js +1 -1
- package/dist/src/session-store.js +3 -3
- package/dist/src/session2.js +3 -3
- package/dist/src/simctl.js +1 -1
- package/dist/src/simulator-boot.js +1 -1
- package/dist/src/simulator-facade.js +1 -1
- package/dist/src/simulator.js +1 -1
- package/dist/src/snapshot-runtime-binding.js +1 -1
- package/dist/src/snapshot-runtime.js +1 -1
- package/dist/src/snapshot-state.js +1 -1
- package/dist/src/snapshot4.js +1 -1
- package/dist/src/src.js +1 -1
- package/dist/src/src7.js +1 -1
- package/dist/src/src8.js +1 -1
- package/dist/src/stop-sequence.js +1 -1
- package/dist/src/text-entry-focus.js +1 -1
- package/dist/src/touch-runtime.js +1 -1
- package/dist/src/tree.js +1 -1
- package/dist/src/type-text-runtime.js +1 -1
- package/dist/src/video.js +2 -2
- package/dist/src/web2.js +1 -1
- package/package.json +3 -1
- package/server.json +2 -2
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.7.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.7.apk.sha256 +0 -1
- package/dist/src/png-transcode.js +0 -1
|
@@ -153,11 +153,46 @@ type BackMode = (typeof BACK_MODES)[number];
|
|
|
153
153
|
declare const PERMISSION_ACTIONS: readonly ['grant', 'deny', 'reset'];
|
|
154
154
|
declare const PERMISSION_MODES: readonly ['full', 'limited'];
|
|
155
155
|
/** The app-scoped targets, the only ones `parsePermissionTarget` accepts. */
|
|
156
|
-
declare const MOBILE_PERMISSION_TARGETS: readonly ['camera', 'microphone', 'photos', 'contacts', 'contacts-limited', 'notifications', 'calendar', 'location', 'location-always', 'media-library', 'motion', 'reminders', 'siri'];
|
|
156
|
+
declare const MOBILE_PERMISSION_TARGETS: readonly ['all', 'camera', 'microphone', 'photos', 'contacts', 'contacts-limited', 'notifications', 'calendar', 'location', 'location-always', 'media-library', 'motion', 'reminders', 'siri'];
|
|
157
157
|
/** The desktop targets the CLI and the public client accept; `parsePermissionTarget` refuses them. */
|
|
158
158
|
declare const MACOS_PERMISSION_TARGETS: readonly ['accessibility', 'screen-recording', 'input-monitoring'];
|
|
159
159
|
type PermissionAction = (typeof PERMISSION_ACTIONS)[number];
|
|
160
160
|
type PermissionMode = (typeof PERMISSION_MODES)[number];
|
|
161
|
+
/**
|
|
162
|
+
* The preferred-text-size ladder `settings text-size` accepts, in the order `settings` help lists
|
|
163
|
+
* it. Apple serves it natively — `simctl ui <device> content_size` reads and writes exactly these
|
|
164
|
+
* names — and Android serves it through its `system font_scale` multiplier, so this ladder is the
|
|
165
|
+
* cross-platform vocabulary and each owner maps it in its own native terms. Acceptance is not
|
|
166
|
+
* support: an owner that cannot serve the ladder refuses at admission, on its own fact.
|
|
167
|
+
*/
|
|
168
|
+
declare const TEXT_SIZE_CATEGORIES: readonly ['extra-small', 'small', 'medium', 'large', 'extra-large', 'extra-extra-large', 'extra-extra-extra-large', 'accessibility-medium', 'accessibility-large', 'accessibility-extra-large', 'accessibility-extra-extra-large', 'accessibility-extra-extra-extra-large'];
|
|
169
|
+
type TextSizeCategory = (typeof TEXT_SIZE_CATEGORIES)[number];
|
|
170
|
+
/**
|
|
171
|
+
* The settings that answer a bare `settings <setting>` with the value the target holds. This is the
|
|
172
|
+
* vocabulary every settings type and every settings owner reads it from; the matching value is
|
|
173
|
+
* `READABLE_SETTINGS` in `platform-runtime-operations.ts`, where the CLI hub can evaluate it, and
|
|
174
|
+
* that module pins the two equal in both directions at compile time.
|
|
175
|
+
*/
|
|
176
|
+
type ReadableSetting = 'text-size';
|
|
177
|
+
/**
|
|
178
|
+
* What `text-size` answers with. The ladder is shared across platforms, so a read names the
|
|
179
|
+
* category the ladder calls the device's value *and* the value the platform itself reported: an
|
|
180
|
+
* Apple content-size name, or an Android `font_scale` multiplier. The ladder is coarser than any
|
|
181
|
+
* one platform's own scale, and `platformValue` is what keeps a normalized answer auditable.
|
|
182
|
+
*/
|
|
183
|
+
type TextSizeSettingPayload = Readonly<{
|
|
184
|
+
setting: 'text-size';
|
|
185
|
+
category: TextSizeCategory;
|
|
186
|
+
platformValue: string;
|
|
187
|
+
}>;
|
|
188
|
+
/**
|
|
189
|
+
* The payload a readable setting answers with, keyed by the setting that answered. Each readable
|
|
190
|
+
* setting has its own shape — a category and a multiplier are not the same observation — so the
|
|
191
|
+
* discriminant is what lets a response be composed, recorded, and printed from one place without
|
|
192
|
+
* assuming every setting is a ladder rung. A second readable setting joins this union and supplies
|
|
193
|
+
* its own sentence in `describeSettingRead`, which is where the compiler then asks for it.
|
|
194
|
+
*/
|
|
195
|
+
type ReadSettingResult = TextSizeSettingPayload;
|
|
161
196
|
type SettingOptions = {
|
|
162
197
|
permissionTarget?: string;
|
|
163
198
|
permissionMode?: string;
|
|
@@ -168,6 +203,14 @@ type SettingOptions = {
|
|
|
168
203
|
//#region packages/contracts/src/device-rotation.d.ts
|
|
169
204
|
declare const DEVICE_ROTATIONS: readonly ['portrait', 'portrait-upside-down', 'landscape-left', 'landscape-right'];
|
|
170
205
|
type DeviceRotation = (typeof DEVICE_ROTATIONS)[number];
|
|
206
|
+
/**
|
|
207
|
+
* The three hinge poses a foldable Apple device can be put in, named after what an agent sees
|
|
208
|
+
* rather than after Apple's `UIHinge.Status` cases: `closed` lights the outer panel only,
|
|
209
|
+
* `half-open` and `open` light the inner panel. Device Hub calls them Closed, Book, and Open;
|
|
210
|
+
* `UIHinge.Status` calls them `.closed`, `.partiallyOpen`, and `.fullyOpen`.
|
|
211
|
+
*/
|
|
212
|
+
declare const FOLD_POSES: readonly ['closed', 'half-open', 'open'];
|
|
213
|
+
type FoldPose = (typeof FOLD_POSES)[number];
|
|
171
214
|
//#endregion
|
|
172
215
|
//#region packages/contracts/src/tv-remote.d.ts
|
|
173
216
|
declare const TV_REMOTE_BUTTON_DEFINITIONS: {
|
|
@@ -905,11 +948,12 @@ type Interactor = {
|
|
|
905
948
|
appSwitcher(): Promise<void>;
|
|
906
949
|
tvRemote(button: TvRemoteButton, durationMs?: number): Promise<void>;
|
|
907
950
|
/**
|
|
908
|
-
*
|
|
909
|
-
*
|
|
910
|
-
*
|
|
951
|
+
* Optional (parity with `keyboardDismiss`): presses the iPhone/iPad Action Button, hardware only
|
|
952
|
+
* the Apple owner carries. An owner without the button leaves it undefined; its fact refuses the
|
|
953
|
+
* press before binding, and the system-button binder fails closed rather than resolving an
|
|
954
|
+
* absent member as a successful no-op.
|
|
911
955
|
*/
|
|
912
|
-
actionButton(): Promise<void>;
|
|
956
|
+
actionButton?(): Promise<void>;
|
|
913
957
|
/** Optional: only Android implements a live status read (see {@link KeyboardStatusResult}). */
|
|
914
958
|
keyboardStatus?(): Promise<KeyboardStatusResult>;
|
|
915
959
|
/** Optional: platforms with no keyboard-dismiss concept leave it undefined. */
|
|
@@ -919,6 +963,14 @@ type Interactor = {
|
|
|
919
963
|
readClipboard(): Promise<string>;
|
|
920
964
|
writeClipboard(text: string): Promise<void>;
|
|
921
965
|
setSetting(setting: string, state: string, appId?: string, options?: SettingOptions): Promise<Record<string, unknown> | void>;
|
|
966
|
+
/**
|
|
967
|
+
* Optional: reads back the value a device holds for one readable setting. The name is narrowed to
|
|
968
|
+
* `READABLE_SETTINGS`, which is not every setting the write switch serves, and an owner's dispatch
|
|
969
|
+
* is exhaustive over it — a setting joins the list only with an owner that answers it. An owner with
|
|
970
|
+
* no read path leaves the member undefined; its fact refuses the read before binding, so an absent
|
|
971
|
+
* method can never resolve into an empty answer.
|
|
972
|
+
*/
|
|
973
|
+
readSetting?(setting: ReadableSetting): Promise<ReadSettingResult>;
|
|
922
974
|
/**
|
|
923
975
|
* The four alert legs. Each owner runs its own observation and, where it needs one, its own
|
|
924
976
|
* poll: an alert is a transient device surface, and how long to look for it — and how to press
|
|
@@ -1035,4 +1087,4 @@ declare function formatSelectorFailure(chain: SelectorChain | string, diagnostic
|
|
|
1035
1087
|
unique?: boolean;
|
|
1036
1088
|
}): string;
|
|
1037
1089
|
//#endregion
|
|
1038
|
-
export {
|
|
1090
|
+
export { GesturePointerCount as A, ClickButton as B, FoldPose as C, PermissionMode as D, PermissionAction as E, ScrollDirection as F, SessionSurface as G, FindLocator as H, ScrollInputDirection as I, SwipePattern as L, PointerTrajectory as M, PointerTrajectorySample as N, TextSizeCategory as O, SinglePointerGesturePlan as P, SwipePreset as R, DeviceRotation as S, MOBILE_PERMISSION_TARGETS as T, ScreenshotResultData as U, AndroidSnapshotBackendMetadata as V, SnapshotDiagnosticsSummary as W, HoverCommandResponseData as _, resolveSelectorChain as a, SettleObservation as b, isSelectorToken as c, Interactor as d, RunnerContext as f, FindCommandResponseData as g, FillCommandResponseData as h, findSelectorChainMatch as i, MultiTouchGesturePlan as j, BackMode as k, parseSelectorChain as l, ClickCommandResponseData as m, isNodeEditable as n, SelectorDiagnostics as o, ScrollCommandResult as p, isNodeVisible as r, SelectorChain as s, formatSelectorFailure as t, tryParseSelectorChain as u, LongPressCommandResponseData as v, MACOS_PERMISSION_TARGETS as w, TvRemoteButton as x, PressCommandResponseData as y, TransformGestureParams as z };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{wn as e}from"./sdk-batch.js";function t(t,n,r){return e(typeof t==`string`?t:t.raw,n,r)}export{t};
|
package/dist/src/selection.js
CHANGED
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e,D as t,O as n,T as r,d as i,h as a,o,u as s}from"./sdk-contracts.js";import{u as c,y as l}from"./sdk-device.js";import{It as u,cr as d,jn as f,kn as p,lr as m,sr as ee}from"./sdk-batch.js";import{s as h}from"./session-store.js";import{A as g,C as te,E as ne,f as re,i as _,k as ie,m as ae,n as oe,o as v,p as y,r as b,s as x}from"./session-snapshot.js";import{d as se}from"./parameterized-recorded-fill.js";import{a as ce,m as le,p as ue,s as de,t as fe}from"./absence-observation-errors.js";import{r as pe}from"./diagnostics.js";import"./diagnostics2.js";import{i as me}from"./rect-center.js";import{a as S}from"./android-system-chrome.js";import{r as he}from"./request-cancel.js";import"./request.js";import{i as ge}from"./request-runtime-binding.js";import{n as C}from"./dispatch-resolve.js";import{o as w}from"./quality-warnings.js";import{t as T}from"./backend-snapshot-options.js";import{i as E,n as D,t as O}from"./capture-disclosure.js";import{t as k}from"./snapshot-runtime-binding.js";function A(e){let t=r(e);return t?{ok:!0,ref:t.base,generation:t.generation}:{ok:!1,response:o(`INVALID_ARGS`,`Invalid ref "${e}" — malformed generation suffix.`,{hint:i})}}function j(e,t){if(t===`exists`)return{found:!0};if(t===`wait`)return{found:!0,waitedMs:e.waitedMs};if(t===`list`)return{action:`list`,matches:Array.isArray(e.matches)?e.matches.length:0};let n=typeof e.ref==`string`?e.ref:void 0;return t===`get_attrs`?{ref:n,action:`get attrs`}:{ref:n,action:`get text`,text:typeof e.text==`string`?e.text:``}}function M(e){return e.kind===`found`?{found:!0,...typeof e.waitedMs==`number`?{waitedMs:e.waitedMs}:{}}:e.kind===`list`?{matches:e.matches.map(e=>({ref:e.ref,node:S(e.node)}))}:{ref:e.ref,...e.kind===`text`?{text:e.text}:{},node:S(e.node)}}function N(e,t){let n=Array.isArray(e.selectorChain)?e.selectorChain:void 0,r=ve(e),i=r?.kind===`ref`?z(r.ref):void 0,a=r?.kind===`selector`?r.selector:void 0,o={...i?{ref:i}:{},...a?{selector:a}:{},...n?{selectorChain:n}:{}};if(t===`attrs`)return o;let s=typeof e.text==`string`?e.text:``;return{...o,text:s,refLabel:_e(s)}}function P(e){let{target:t}=e;return{...t.kind===`ref`?{ref:z(t.ref)}:{},...t.kind===`selector`?{selector:t.selector}:{},...typeof e.text==`string`?{text:e.text}:{},node:S(e.node)}}function F(e){let{node:t,preActionNodes:n,...r}=e;return r}function I(e){return{waitedMs:e.waitedMs,...typeof e.text==`string`?{text:e.text}:{},...typeof e.selector==`string`?{selector:e.selector}:{},...typeof e.captures==`number`?{captures:e.captures}:{},...typeof e.nodeCount==`number`?{nodeCount:e.nodeCount}:{},...typeof e.hint==`string`?{hint:e.hint}:{}}}function L(e){let{selectorChain:t,...n}=e;return n}function R(e,t,n,r,i,a){let o=e.get(t);if(!o)return;let s=se(o)&&i?te(i,{mode:a}):void 0;e.recordAction(o,{command:n.command,positionals:n.positionals??[],flags:n.flags??{},result:r,interactiveObservation:h(n),...s?{targetEvidence:s,targetEvidenceMode:a??`action`}:{}})}function _e(e){let t=e.trim();if(!(!t||t.length>80||/[\r\n]/.test(t)))return t}function ve(e){let t=e.target;if(!t||typeof t!=`object`)return;let n=t;if(n.kind===`ref`&&typeof n.ref==`string`)return{kind:`ref`,ref:n.ref};if(n.kind===`selector`&&typeof n.selector==`string`)return{kind:`selector`,selector:n.selector}}function z(e){return e.startsWith(`@`)?e.slice(1):e}async function B(e){let t=await k({...e,plan:u({hasActiveApp:e.session?.appBundleId!==void 0,intent:ye(e.command)}),...e.session?{}:{readiness:{}}});return t.ok?{ok:!0,operations:{capture:t.capture,...t.readTextAtPoint?{readText:t.readTextAtPoint}:{},...t.findText?{findText:t.findText}:{}}}:t}function ye(e){switch(e){case`is`:return`capture-only`;case`find`:case`get`:return`element-text`;case`wait`:return`wait-observation`}}const be=[[`snapshotDepth`,`--depth`],[`snapshotScope`,`--scope`],[`snapshotRaw`,`--raw`]];function V(e,t){let n=be.filter(([e])=>t?.[e]!==void 0).map(([,e])=>e);return n.length===0?null:o(`INVALID_ARGS`,`${e} @ref does not support ${n.join(`, `)}.`)}async function H(e,n){if(e.device.platform!==`android`||!e.appBundleId||e.lease?.leaseProvider||ge(e.device))return null;if(!n)throw new t(`INTERNAL_ERROR`,`Android observation was not supplied by root runtime composition`);let r=await n.readAppState(e.device),i=r.package?.trim();if(!i||i===e.appBundleId)return null;let a=await n.isPermissionPackage(i);return!Ce(i)&&!a?null:{expectedPackage:e.appBundleId,foregroundPackage:i,activity:r.activity,hint:Se(a),...a?{permissionDialog:!0}:{}}}function xe(e){return e.permissionDialog?`Android permission dialog is blocking ${e.expectedPackage}`:`${e.foregroundPackage} is foreground instead of ${e.expectedPackage}`}function Se(e){return e?`Use "alert get" to inspect it, then "alert accept" or "alert dismiss" to respond.`:`Use screenshot as visual truth, then take a fresh snapshot -i before retrying.`}function Ce(e){return e===`com.android.settings`||e===`com.android.systemui`||e.includes(`launcher`)}async function we(e){let{device:t,node:n,flags:r,appBundleId:i,traceOutPath:a,surface:o,contextFromFlags:s}=e,l=ue(n),u=e.readTextAtPoint;if(!u)return l;let d=me(n.rect);if(!d||c(t)&&l&&!le(n.type??``))return l;let f=s(r,i,a),p=await u({point:d,options:{appBundleId:i,surface:o},execution:ae(f)});return p.status===`read`?p.text:(pe({level:`warn`,phase:`interaction_read_fallback`,data:{reason:Te(p.reason),nodeRef:n.ref,surface:o,platform:t.platform}}),l)}function Te(e){switch(e){case`no-text-at-point`:return`no_text_at_point`;default:return e}}function U(e){let{session:t,sessionStore:n,sessionName:r}=e,i=0,a,o,s=t=>(e.consumedSnapshot&&(e.consumedSnapshot.state=t.snapshot),t);return{capture:async c=>{let l=Date.now(),u=Ne(c,e.req.flags?.out),d=ke({timestamp:l,lastSnapshotAt:i,lastSnapshotResult:a,lastSnapshotCacheKey:o,session:t,request:c,cacheKey:u});if(d)return s(d);let f=Ae({session:t,timestamp:l,request:c});if(f)return i=f.createdAt,a={snapshot:f},o=u,s(a);let p=await Ee({params:e,request:c});c.signal?.throwIfAborted();let m={snapshot:p};return Fe({session:t,sessionStore:n,sessionName:r,snapshot:p}),i=l,a=m,o=u,s(m)}}}async function Ee(e){let{params:t,request:n}=e,r=await W(t,n,n.snapshotScope);return n.recovery?.legacyIosSparse&&de(r)?await De({runtimeParams:t,request:n,policy:n.recovery.legacyIosSparse}):n.recovery?.sparseVerdictQueryScope?.shouldScope&&w(r.snapshotQuality)?await Oe({runtimeParams:t,request:n,policy:n.recovery.sparseVerdictQueryScope,snapshot:r}):r}async function De(e){let{runtimeParams:t,request:n,policy:r}=e;try{return await W(t,n,void 0,!1)}catch(e){if(!r.shouldScope)throw e;return await W(t,n,r.query,!1)}}async function Oe(e){let{runtimeParams:t,request:n,policy:r,snapshot:i}=e;try{return await W(t,n,r.query,!1)}catch{return i}}async function W(e,t,n,r=t.flags?.snapshotInteractiveOnly){let i={...t.flags,snapshotInteractiveOnly:r},a=e.capture,o=await x({device:e.device,session:e.session,flags:i,outPath:t.outPath??e.req.flags?.out,logPath:e.logPath??``,snapshotScope:n,includeRects:t.includeRects,signal:t.signal,captureData:async()=>await a(y({flags:i,logPath:e.logPath??``,meta:e.req.meta,session:e.session,snapshotScope:n,includeRects:t.includeRects,signal:t.signal}))});return O(e.activationProof,o.snapshot)}function ke(e){let{timestamp:t,lastSnapshotAt:n,lastSnapshotResult:r,lastSnapshotCacheKey:i,session:a,request:o,cacheKey:s}=e;if(o.cache?.forceFresh!==!0&&r&&i===s&&!(t-n>=750)&&!g(a)&&!G(a,o))return r}function Ae(e){let{session:t,timestamp:n,request:r}=e,i=t?.snapshot;if(i&&je(t,r)&&Me(i,n)&&i.presentationKey===K(r))return i}function je(e,t){return!(t.cache?.forceFresh===!0||t.cache?.useSessionSnapshot!==!0||g(e)||G(e,t))}function Me(e,t){return t-e.createdAt<750}function G(e,t){return t.cache?.bypassForPostGestureStabilization===!0&&ne(e)}function K(t){return a(e(Pe(t)))}function Ne(e,t){return JSON.stringify({presentationKey:K(e),includeRects:e.includeRects===!0,outPath:e.outPath??t??null})}function Pe(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function Fe(e){let{session:t,sessionStore:n,sessionName:r,snapshot:i}=e;!t||w(i.snapshotQuality)||(_(t,i),n.set(r,t))}function q(e){return re({backend:Le(e),...E(`selector commands`,{plural:!0}),sessions:v({sessionName:e.sessionName,getSession:()=>e.session,recordOptions:{includeSnapshot:!0},setRecord:t=>{!e.session||!t.snapshot||(_(e.session,t.snapshot),e.sessionStore.set(e.sessionName,e.session))}}),signal:e.signal??he(e.req.meta?.requestId)})}async function Ie(e,t){e.consumedSnapshot??={},e.activationProof??={};let n=e.sessionStore.get(e.sessionName);return!n&&t?{ok:!1,response:s()}:{ok:!0,session:n,device:n?.device??await C(e.req.flags??{})}}async function J(e,t){let n=await Ie(e,t.requireSession);if(!n.ok)return n;let r=await B({command:t.command,device:n.device,session:n.session,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return r.ok?{ok:!0,runtime:q({...e,session:n.session,device:n.device,bound:r.operations})}:{ok:!1,response:r.response}}function Le(e){let{req:t,session:n,device:r,logPath:i,sessionName:a,sessionStore:o}=e,s=e.contextFromFlags??((e,t,n)=>ie(i??``,e,t,n)),c=e.bound?.readText,u=e.bound?.findText,d=y({flags:t.flags,logPath:i??``,meta:t.meta,session:n,snapshotScope:void 0}).execution,f=e.bound,p=f===void 0?void 0:U({device:r,session:n,sessionStore:o,sessionName:a,req:t,consumedSnapshot:e.consumedSnapshot,activationProof:e.activationProof,logPath:i,capture:f.capture});return{platform:l(r),captureSnapshot:p&&(async(e,n)=>{let i={...t.flags,...T(n)},a=n?.includeRects===!0,o=n?.scope??t.flags?.snapshotScope,s=t.command===`wait`||t.command===`find`||Re(t)||a&&r.platform===`web`;return await p.capture({flags:i,signal:e.signal,snapshotScope:o,includeRects:a,cache:{forceFresh:s,useSessionSnapshot:!0,bypassForPostGestureStabilization:!0}})}),readText:async(e,i)=>({text:await we({readTextAtPoint:c,device:r,node:i,flags:t.flags,appBundleId:n?.appBundleId,traceOutPath:n?.trace?.outPath,surface:n?.surface,contextFromFlags:s})}),...u?{findText:async(e,t)=>({found:(await u({text:t,options:{appBundleId:n?.appBundleId,surface:n?.surface},execution:d,...e.signal?{signal:e.signal}:{}})).found})}:{}}}function Re(e){if(e.command!==`is`)return!1;let t=m(e.positionals??[]);return t.ok&&t.predicate===`absent`}async function ze(e){let{req:t}=e;if(t.command!==`find`)return null;let n=t.positionals??[],r=p(n,t.flags);if(!r.ok)return o(r.code,r.message);let i=r.parsed,a=i.action;if(!f(a))return null;let s=await J(e,{requireSession:!1,command:`find`});if(!s.ok)return s.response;let c=await Q(async()=>{let n=await s.runtime.selectors.find({session:e.sessionName,requestId:t.meta?.requestId,locator:i.locator,query:i.query,action:a,timeoutMs:i.timeoutMs});R(e.sessionStore,e.sessionName,t,j(n,a));let r=M(n),o=typeof r.ref==`string`?[r.ref]:Array.isArray(r.matches)?r.matches.map(e=>e.ref).filter(e=>typeof e==`string`):[];if(o.length>0){let t=e.sessionStore.get(e.sessionName);if(t&&(oe(t,o),e.sessionStore.set(e.sessionName,t),t.snapshotGeneration!==void 0))return{...r,refsGeneration:t.snapshotGeneration}}return r});return D({response:c,consumedTree:Y(e),activationProof:e.activationProof})}function Y(e){return e.consumedSnapshot?.state??e.sessionStore.get(e.sessionName)?.snapshot}async function X(e){let{req:t}=e;if(t.command!==`get`)return null;let n=d(t.positionals?.[0]);if(!n.ok)return o(n.code,n.message);let r=n.format,i=Ve(t);if(!i.ok)return i.response;if(i.target.kind===`ref`){let e=V(`get`,t.flags);if(e)return e}let a=t.internal?.replayTargetGuard,s=await J(e,{requireSession:!0,command:`get`});if(!s.ok)return s.response;let c=s.runtime,l=i.target.kind===`ref`?b({session:e.sessionStore.get(e.sessionName),ref:i.target.ref,mintedGeneration:i.refGeneration}):void 0,u=await Q(async()=>{let n=await c.selectors.get({session:e.sessionName,requestId:t.meta?.requestId,property:r,target:i.target,expectedResolvedTarget:a});R(e.sessionStore,e.sessionName,t,N(n,r),{node:n.node,preActionNodes:n.preActionNodes});let o=P(n);return l?{...o,warning:l}:o});return D({response:u,consumedTree:Y(e),activationProof:e.activationProof})}async function Be(e){let{req:t}=e;if(t.command!==`is`)return null;let n=m(t.positionals??[]);if(!n.ok)return o(n.code,n.message,n.hint?{hint:n.hint}:void 0);let{predicate:r,selectorExpression:i,expectedText:a}=n;if(r===`absent`){let e=ce({depth:t.flags?.snapshotDepth,scope:t.flags?.snapshotScope});if(e){let t=fe(e);return o(t.code,t.message,t.details)}}let s=t.internal?.replayTargetGuard,c=await J(e,{requireSession:!0,command:`is`});if(!c.ok)return c.response;let l=await Q(async()=>{let n=await c.runtime.selectors.is({session:e.sessionName,requestId:t.meta?.requestId,predicate:r,selector:i,expectedText:a,expectedResolvedTarget:s}),o=Z(n),l=F(n);return R(e.sessionStore,e.sessionName,t,l,o),L(l)});return D({response:await $(e,l,`is ${r}`),consumedTree:Y(e),activationProof:e.activationProof})}function Z(e){let t=e.node,n=e.preActionNodes;if(!(!t||typeof t!=`object`||!Array.isArray(n)))return{node:t,preActionNodes:n}}function Ve(e){let t=e.positionals?.[1]??``;if(t.startsWith(`@`)){let n=A(t);return n.ok?{ok:!0,target:{kind:`ref`,ref:n.ref,fallbackLabel:e.positionals.length>2?e.positionals.slice(2).join(` `).trim():``},refGeneration:n.generation}:{ok:!1,response:n.response}}let n=ee(e.positionals?.slice(1)??[]);return n.ok?{ok:!0,target:{kind:`selector`,selector:`selector`in n?n.selector:``}}:{ok:!1,response:o(n.code,n.message)}}async function Q(e){try{return{ok:!0,data:await e()}}catch(e){let t=n(e);return o(t.code,t.message,t.details)}}async function $(e,t,n){if(t.ok)return t;let r=e.sessionStore.get(e.sessionName);if(!r)return t;let i;try{if(!e.androidObservation)return t;i=await H(r,e.androidObservation)}catch{return t}return i?o(t.error.code,`${n} failed because ${xe(i)}.`,{...t.error.details??{},...i,blockedBy:`android_foreground_surface`,originalMessage:t.error.message}):t}export{$ as a,q as c,V as d,B as f,A as g,I as h,Be as i,U as l,F as m,ze as n,Z as o,R as p,X as r,Q as s,Y as t,H as u};
|
|
1
|
+
import{C as e,D as t,O as n,T as r,d as i,h as a,o,u as s}from"./sdk-contracts.js";import{b as c,d as l}from"./sdk-device.js";import{Lt as u,Mn as d,Pn as f,dr as p,fr as m,ur as ee}from"./sdk-batch.js";import{s as h}from"./session-store.js";import{A as g,C as te,E as ne,f as re,i as _,k as ie,m as ae,n as oe,o as v,p as y,r as b,s as x}from"./session-snapshot.js";import{d as se}from"./parameterized-recorded-fill.js";import{a as ce,m as le,p as ue,s as de,t as fe}from"./absence-observation-errors.js";import{r as pe}from"./diagnostics.js";import"./diagnostics2.js";import{i as me}from"./rect-center.js";import{a as S}from"./android-system-chrome.js";import{r as he}from"./request-cancel.js";import"./request.js";import{i as ge}from"./request-runtime-binding.js";import{n as C}from"./dispatch-resolve.js";import{s as w}from"./quality-warnings.js";import{t as T}from"./backend-snapshot-options.js";import{i as E,n as D,t as O}from"./capture-disclosure.js";import{t as k}from"./snapshot-runtime-binding.js";function A(e){let t=r(e);return t?{ok:!0,ref:t.base,generation:t.generation}:{ok:!1,response:o(`INVALID_ARGS`,`Invalid ref "${e}" — malformed generation suffix.`,{hint:i})}}function j(e,t){if(t===`exists`)return{found:!0};if(t===`wait`)return{found:!0,waitedMs:e.waitedMs};if(t===`list`)return{action:`list`,matches:Array.isArray(e.matches)?e.matches.length:0};let n=typeof e.ref==`string`?e.ref:void 0;return t===`get_attrs`?{ref:n,action:`get attrs`}:{ref:n,action:`get text`,text:typeof e.text==`string`?e.text:``}}function M(e){return e.kind===`found`?{found:!0,...typeof e.waitedMs==`number`?{waitedMs:e.waitedMs}:{}}:e.kind===`list`?{matches:e.matches.map(e=>({ref:e.ref,node:S(e.node)}))}:{ref:e.ref,...e.kind===`text`?{text:e.text}:{},node:S(e.node)}}function N(e,t){let n=Array.isArray(e.selectorChain)?e.selectorChain:void 0,r=ve(e),i=r?.kind===`ref`?z(r.ref):void 0,a=r?.kind===`selector`?r.selector:void 0,o={...i?{ref:i}:{},...a?{selector:a}:{},...n?{selectorChain:n}:{}};if(t===`attrs`)return o;let s=typeof e.text==`string`?e.text:``;return{...o,text:s,refLabel:_e(s)}}function P(e){let{target:t}=e;return{...t.kind===`ref`?{ref:z(t.ref)}:{},...t.kind===`selector`?{selector:t.selector}:{},...typeof e.text==`string`?{text:e.text}:{},node:S(e.node)}}function F(e){let{node:t,preActionNodes:n,...r}=e;return r}function I(e){return{waitedMs:e.waitedMs,...typeof e.text==`string`?{text:e.text}:{},...typeof e.selector==`string`?{selector:e.selector}:{},...typeof e.captures==`number`?{captures:e.captures}:{},...typeof e.nodeCount==`number`?{nodeCount:e.nodeCount}:{},...typeof e.hint==`string`?{hint:e.hint}:{}}}function L(e){let{selectorChain:t,...n}=e;return n}function R(e,t,n,r,i,a){let o=e.get(t);if(!o)return;let s=se(o)&&i?te(i,{mode:a}):void 0;e.recordAction(o,{command:n.command,positionals:n.positionals??[],flags:n.flags??{},result:r,interactiveObservation:h(n),...s?{targetEvidence:s,targetEvidenceMode:a??`action`}:{}})}function _e(e){let t=e.trim();if(!(!t||t.length>80||/[\r\n]/.test(t)))return t}function ve(e){let t=e.target;if(!t||typeof t!=`object`)return;let n=t;if(n.kind===`ref`&&typeof n.ref==`string`)return{kind:`ref`,ref:n.ref};if(n.kind===`selector`&&typeof n.selector==`string`)return{kind:`selector`,selector:n.selector}}function z(e){return e.startsWith(`@`)?e.slice(1):e}async function B(e){let t=await k({...e,plan:u({hasActiveApp:e.session?.appBundleId!==void 0,intent:ye(e.command)}),...e.session?{}:{readiness:{}}});return t.ok?{ok:!0,operations:{capture:t.capture,...t.readTextAtPoint?{readText:t.readTextAtPoint}:{},...t.findText?{findText:t.findText}:{}}}:t}function ye(e){switch(e){case`is`:return`capture-only`;case`find`:case`get`:return`element-text`;case`wait`:return`wait-observation`}}const be=[[`snapshotDepth`,`--depth`],[`snapshotScope`,`--scope`],[`snapshotRaw`,`--raw`]];function V(e,t){let n=be.filter(([e])=>t?.[e]!==void 0).map(([,e])=>e);return n.length===0?null:o(`INVALID_ARGS`,`${e} @ref does not support ${n.join(`, `)}.`)}async function H(e,n){if(e.device.platform!==`android`||!e.appBundleId||e.lease?.leaseProvider||ge(e.device))return null;if(!n)throw new t(`INTERNAL_ERROR`,`Android observation was not supplied by root runtime composition`);let r=await n.readAppState(e.device),i=r.package?.trim();if(!i||i===e.appBundleId)return null;let a=await n.isPermissionPackage(i);return!Ce(i)&&!a?null:{expectedPackage:e.appBundleId,foregroundPackage:i,activity:r.activity,hint:Se(a),...a?{permissionDialog:!0}:{}}}function xe(e){return e.permissionDialog?`Android permission dialog is blocking ${e.expectedPackage}`:`${e.foregroundPackage} is foreground instead of ${e.expectedPackage}`}function Se(e){return e?`Use "alert get" to inspect it, then "alert accept" or "alert dismiss" to respond.`:`Use screenshot as visual truth, then take a fresh snapshot -i before retrying.`}function Ce(e){return e===`com.android.settings`||e===`com.android.systemui`||e.includes(`launcher`)}async function we(e){let{device:t,node:n,flags:r,appBundleId:i,traceOutPath:a,surface:o,contextFromFlags:s}=e,c=ue(n),u=e.readTextAtPoint;if(!u)return c;let d=me(n.rect);if(!d||l(t)&&c&&!le(n.type??``))return c;let f=s(r,i,a),p=await u({point:d,options:{appBundleId:i,surface:o},execution:ae(f)});return p.status===`read`?p.text:(pe({level:`warn`,phase:`interaction_read_fallback`,data:{reason:Te(p.reason),nodeRef:n.ref,surface:o,platform:t.platform}}),c)}function Te(e){switch(e){case`no-text-at-point`:return`no_text_at_point`;default:return e}}function U(e){let{session:t,sessionStore:n,sessionName:r}=e,i=0,a,o,s=t=>(e.consumedSnapshot&&(e.consumedSnapshot.state=t.snapshot),t);return{capture:async c=>{let l=Date.now(),u=Ne(c,e.req.flags?.out),d=ke({timestamp:l,lastSnapshotAt:i,lastSnapshotResult:a,lastSnapshotCacheKey:o,session:t,request:c,cacheKey:u});if(d)return s(d);let f=Ae({session:t,timestamp:l,request:c});if(f)return i=f.createdAt,a={snapshot:f},o=u,s(a);let p=await Ee({params:e,request:c});c.signal?.throwIfAborted();let m={snapshot:p};return Fe({session:t,sessionStore:n,sessionName:r,snapshot:p}),i=l,a=m,o=u,s(m)}}}async function Ee(e){let{params:t,request:n}=e,r=await W(t,n,n.snapshotScope);return n.recovery?.legacyIosSparse&&de(r)?await De({runtimeParams:t,request:n,policy:n.recovery.legacyIosSparse}):n.recovery?.sparseVerdictQueryScope?.shouldScope&&w(r.snapshotQuality)?await Oe({runtimeParams:t,request:n,policy:n.recovery.sparseVerdictQueryScope,snapshot:r}):r}async function De(e){let{runtimeParams:t,request:n,policy:r}=e;try{return await W(t,n,void 0,!1)}catch(e){if(!r.shouldScope)throw e;return await W(t,n,r.query,!1)}}async function Oe(e){let{runtimeParams:t,request:n,policy:r,snapshot:i}=e;try{return await W(t,n,r.query,!1)}catch{return i}}async function W(e,t,n,r=t.flags?.snapshotInteractiveOnly){let i={...t.flags,snapshotInteractiveOnly:r},a=e.capture,o=await x({device:e.device,session:e.session,flags:i,outPath:t.outPath??e.req.flags?.out,logPath:e.logPath??``,snapshotScope:n,includeRects:t.includeRects,signal:t.signal,captureData:async()=>await a(y({flags:i,logPath:e.logPath??``,meta:e.req.meta,session:e.session,snapshotScope:n,includeRects:t.includeRects,signal:t.signal}))});return O(e.activationProof,o.snapshot)}function ke(e){let{timestamp:t,lastSnapshotAt:n,lastSnapshotResult:r,lastSnapshotCacheKey:i,session:a,request:o,cacheKey:s}=e;if(o.cache?.forceFresh!==!0&&r&&i===s&&!(t-n>=750)&&!g(a)&&!G(a,o))return r}function Ae(e){let{session:t,timestamp:n,request:r}=e,i=t?.snapshot;if(i&&je(t,r)&&Me(i,n)&&i.presentationKey===K(r))return i}function je(e,t){return!(t.cache?.forceFresh===!0||t.cache?.useSessionSnapshot!==!0||g(e)||G(e,t))}function Me(e,t){return t-e.createdAt<750}function G(e,t){return t.cache?.bypassForPostGestureStabilization===!0&&ne(e)}function K(t){return a(e(Pe(t)))}function Ne(e,t){return JSON.stringify({presentationKey:K(e),includeRects:e.includeRects===!0,outPath:e.outPath??t??null})}function Pe(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function Fe(e){let{session:t,sessionStore:n,sessionName:r,snapshot:i}=e;!t||w(i.snapshotQuality)||(_(t,i),n.set(r,t))}function q(e){return re({backend:Le(e),...E(`selector commands`,{plural:!0}),sessions:v({sessionName:e.sessionName,getSession:()=>e.session,recordOptions:{includeSnapshot:!0},setRecord:t=>{!e.session||!t.snapshot||(_(e.session,t.snapshot),e.sessionStore.set(e.sessionName,e.session))}}),signal:e.signal??he(e.req.meta?.requestId)})}async function Ie(e,t){e.consumedSnapshot??={},e.activationProof??={};let n=e.sessionStore.get(e.sessionName);return!n&&t?{ok:!1,response:s()}:{ok:!0,session:n,device:n?.device??await C(e.req.flags??{})}}async function J(e,t){let n=await Ie(e,t.requireSession);if(!n.ok)return n;let r=await B({command:t.command,device:n.device,session:n.session,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return r.ok?{ok:!0,runtime:q({...e,session:n.session,device:n.device,bound:r.operations})}:{ok:!1,response:r.response}}function Le(e){let{req:t,session:n,device:r,logPath:i,sessionName:a,sessionStore:o}=e,s=e.contextFromFlags??((e,t,n)=>ie(i??``,e,t,n)),l=e.bound?.readText,u=e.bound?.findText,d=y({flags:t.flags,logPath:i??``,meta:t.meta,session:n,snapshotScope:void 0}).execution,f=e.bound,p=f===void 0?void 0:U({device:r,session:n,sessionStore:o,sessionName:a,req:t,consumedSnapshot:e.consumedSnapshot,activationProof:e.activationProof,logPath:i,capture:f.capture});return{platform:c(r),captureSnapshot:p&&(async(e,n)=>{let i={...t.flags,...T(n)},a=n?.includeRects===!0,o=n?.scope??t.flags?.snapshotScope,s=t.command===`wait`||t.command===`find`||Re(t)||a&&r.platform===`web`;return await p.capture({flags:i,signal:e.signal,snapshotScope:o,includeRects:a,cache:{forceFresh:s,useSessionSnapshot:!0,bypassForPostGestureStabilization:!0}})}),readText:async(e,i)=>({text:await we({readTextAtPoint:l,device:r,node:i,flags:t.flags,appBundleId:n?.appBundleId,traceOutPath:n?.trace?.outPath,surface:n?.surface,contextFromFlags:s})}),...u?{findText:async(e,t)=>({found:(await u({text:t,options:{appBundleId:n?.appBundleId,surface:n?.surface},execution:d,...e.signal?{signal:e.signal}:{}})).found})}:{}}}function Re(e){if(e.command!==`is`)return!1;let t=m(e.positionals??[]);return t.ok&&t.predicate===`absent`}async function ze(e){let{req:t}=e;if(t.command!==`find`)return null;let n=t.positionals??[],r=d(n,t.flags);if(!r.ok)return o(r.code,r.message);let i=r.parsed,a=i.action;if(!f(a))return null;let s=await J(e,{requireSession:!1,command:`find`});if(!s.ok)return s.response;let c=await Q(async()=>{let n=await s.runtime.selectors.find({session:e.sessionName,requestId:t.meta?.requestId,locator:i.locator,query:i.query,action:a,timeoutMs:i.timeoutMs});R(e.sessionStore,e.sessionName,t,j(n,a));let r=M(n),o=typeof r.ref==`string`?[r.ref]:Array.isArray(r.matches)?r.matches.map(e=>e.ref).filter(e=>typeof e==`string`):[];if(o.length>0){let t=e.sessionStore.get(e.sessionName);if(t&&(oe(t,o),e.sessionStore.set(e.sessionName,t),t.snapshotGeneration!==void 0))return{...r,refsGeneration:t.snapshotGeneration}}return r});return D({response:c,consumedTree:Y(e),activationProof:e.activationProof})}function Y(e){return e.consumedSnapshot?.state??e.sessionStore.get(e.sessionName)?.snapshot}async function X(e){let{req:t}=e;if(t.command!==`get`)return null;let n=p(t.positionals?.[0]);if(!n.ok)return o(n.code,n.message);let r=n.format,i=Ve(t);if(!i.ok)return i.response;if(i.target.kind===`ref`){let e=V(`get`,t.flags);if(e)return e}let a=t.internal?.replayTargetGuard,s=await J(e,{requireSession:!0,command:`get`});if(!s.ok)return s.response;let c=s.runtime,l=i.target.kind===`ref`?b({session:e.sessionStore.get(e.sessionName),ref:i.target.ref,mintedGeneration:i.refGeneration}):void 0,u=await Q(async()=>{let n=await c.selectors.get({session:e.sessionName,requestId:t.meta?.requestId,property:r,target:i.target,expectedResolvedTarget:a});R(e.sessionStore,e.sessionName,t,N(n,r),{node:n.node,preActionNodes:n.preActionNodes});let o=P(n);return l?{...o,warning:l}:o});return D({response:u,consumedTree:Y(e),activationProof:e.activationProof})}async function Be(e){let{req:t}=e;if(t.command!==`is`)return null;let n=m(t.positionals??[]);if(!n.ok)return o(n.code,n.message,n.hint?{hint:n.hint}:void 0);let{predicate:r,selectorExpression:i,expectedText:a}=n;if(r===`absent`){let e=ce({depth:t.flags?.snapshotDepth,scope:t.flags?.snapshotScope});if(e){let t=fe(e);return o(t.code,t.message,t.details)}}let s=t.internal?.replayTargetGuard,c=await J(e,{requireSession:!0,command:`is`});if(!c.ok)return c.response;let l=await Q(async()=>{let n=await c.runtime.selectors.is({session:e.sessionName,requestId:t.meta?.requestId,predicate:r,selector:i,expectedText:a,expectedResolvedTarget:s}),o=Z(n),l=F(n);return R(e.sessionStore,e.sessionName,t,l,o),L(l)});return D({response:await $(e,l,`is ${r}`),consumedTree:Y(e),activationProof:e.activationProof})}function Z(e){let t=e.node,n=e.preActionNodes;if(!(!t||typeof t!=`object`||!Array.isArray(n)))return{node:t,preActionNodes:n}}function Ve(e){let t=e.positionals?.[1]??``;if(t.startsWith(`@`)){let n=A(t);return n.ok?{ok:!0,target:{kind:`ref`,ref:n.ref,fallbackLabel:e.positionals.length>2?e.positionals.slice(2).join(` `).trim():``},refGeneration:n.generation}:{ok:!1,response:n.response}}let n=ee(e.positionals?.slice(1)??[]);return n.ok?{ok:!0,target:{kind:`selector`,selector:`selector`in n?n.selector:``}}:{ok:!1,response:o(n.code,n.message)}}async function Q(e){try{return{ok:!0,data:await e()}}catch(e){let t=n(e);return o(t.code,t.message,t.details)}}async function $(e,t,n){if(t.ok)return t;let r=e.sessionStore.get(e.sessionName);if(!r)return t;let i;try{if(!e.androidObservation)return t;i=await H(r,e.androidObservation)}catch{return t}return i?o(t.error.code,`${n} failed because ${xe(i)}.`,{...t.error.details??{},...i,blockedBy:`android_foreground_surface`,originalMessage:t.error.message}):t}export{$ as a,q as c,V as d,B as f,A as g,I as h,Be as i,U as l,F as m,ze as n,Z as o,R as p,X as r,Q as s,Y as t,H as u};
|
package/dist/src/selectors.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Cn as e,
|
|
1
|
+
import{Cn as e,Cr as t,En as n,Tr as r,br as i,wr as a,xr as o}from"./sdk-batch.js";import{t as s}from"./sdk-selectors.js";export{e as findSelectorChainMatch,s as formatSelectorFailure,a as isNodeEditable,r as isNodeVisible,i as isSelectorToken,o as parseSelectorChain,n as resolveSelectorChain,t as tryParseSelectorChain};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Br as e,Nr as t,Ur as n,Vr as r,Wr as i,kr as a}from"./sdk-batch.js";import{n as o,t as s}from"./scroll-indicator.js";import{a as c,i as l,o as ee,r as u}from"./react-native-overlay.js";import{t as d}from"./rect-center.js";import{a as f,c as te,d as p,f as m,g as ne,h,i as g,l as re,m as _,n as v,o as y,p as b,r as x,s as S,t as C,u as ie}from"./tree.js";function ae(e,t){let n=g(t.sourceNodesByIndex.values());for(let r of e)oe(r,t.sourceNodesByIndex,n)&&b(t.replacements,r,{type:`Cell`})}function oe(e,n,r){return!(t(e.type??``)!==`other`||e.enabled===!1||!e.rect||!le(e.label)||!f(e,n,ce)||!se(e)||re(e.rect,r))}function se(e){return e.rect?e.rect.height>=44&&e.rect.height<=160&&e.rect.width>=120:!1}function ce(e){let n=t(e.type??``);return n===`scrollview`||n===`scrollarea`}function le(e){let t=e?.trim();return!(!t||/^(toolbar|window|application)$/i.test(t)||t.startsWith(`!,`)||/debugger|fast refresh/i.test(t))}function ue(e,t){let n=new Set;for(let r of e)de(t.replacements.get(r.index)??r)&&fe(r,t.sourceNodesByIndex,t,n);pe(e,t,n)}function de(e){let t=e.label?.trim();return!!(t&&o(t))}function fe(e,t,n,r){let i=!p(e.type)||n.isSuppressed(e),a=s(e.label?.trim()??``,e.value),o=a?y(e,t,{includeSelf:!0}):void 0;i&&n.suppressNode(e,o?[o]:[]),o&&a&&j(n,o,e,a)&&r.add(o.index)}function pe(e,t,n){let r=new Map;for(let i of e){let e=r.get(i.parentIndex??-1),a=e?.clip,o=t.replacements.get(i.index)??i,s=k(o.rect,a),c=me(o,a,s),l=w(e,c,o);T(t,i,o,a,s,c,l),r.set(i.index,E(i,o,a,s,l,n))}}function me(t,n,r){return!!(n&&e(t.rect)&&!e(r))}function w(e,t,n){return!!(e?.projectedOut||t&&O(n))}function T(e,t,n,r,i,a,o){o||a?e.suppressNode(t,[]):r&&i&&!A(n.rect,i)&&b(e.replacements,t,{rect:i})}function E(e,t,n,r,i,a){return{projectedOut:i,...D(e,t,n,r,a)?{clip:r}:n?{clip:n}:{}}}function D(t,n,r,i,a){return!!(e(i)&&(a.has(t.index)||r!==void 0&&p(n.type)))}function O(e){return e.type?.trim().toLowerCase()===`cell`||p(e.type)}function k(e,t){if(!e||!t)return e;let n=Math.max(e.x,t.x),r=Math.max(e.y,t.y),i=Math.min(e.x+e.width,t.x+t.width),a=Math.min(e.y+e.height,t.y+t.height);return{x:n,y:r,width:Math.max(0,i-n),height:Math.max(0,a-r)}}function A(e,t){return!!(e&&e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height)}function j(e,t,n,r){let i=N((e.replacements.get(t.index)??t).rect,n.rect);return ne(e.replacements,t,e=>({rect:i??e.rect,hiddenContentAbove:M(e.hiddenContentAbove,r.above),hiddenContentBelow:M(e.hiddenContentBelow,r.below)})),!!i}function M(e,t){return e===!0||t?!0:void 0}function N(e,t){if(!(!e||!t)&&!(t.height<=0||t.height>=e.height)&&!(t.y<e.y||t.y>e.y+e.height))return{...e,y:t.y,height:Math.min(t.height,e.y+e.height-t.y)}}function P(e,n){for(let r=0;r<e.length;r+=1){let i=e[r],a=i?.label?.trim();i&&a&&t(i.type??``)===`other`&&n(i,a,r)}}function F(e,t){P(e,(n,r,i)=>{if(!c(r)||!n.rect)return;let a=x(e,i,e=>!!e.rect&&ee(e.label?.trim()??``));if(!a?.rect)return;let o=L(n.rect,a.rect);if(!o)return;let s=I(e,i,o);b(t,n,{rect:s}),S(e,i,e=>{c(e.label?.trim()??``)&&b(t,e,{rect:s})})})}function I(e,t,r){let a=r;return S(e,t,e=>{let t=e.label?.trim()??``;!e.rect||!c(t)||i(r,e.rect)&&n(e.rect)<n(a)&&(a=e.rect)}),a}function L(e,t){let n=e.x+e.width,r=t.x+t.width,i={x:t.x,y:e.y,width:n-t.x,height:e.height};if(t.x>e.x&&d(t,i))return{...e,width:t.x-e.x};let a={x:e.x,y:e.y,width:r-e.x,height:e.height};if(r<n&&d(t,a))return{...e,x:r,width:n-r}}function R(e,t){P(e,(n,r,i)=>{u(n)&&l(n,z(e,i))&&t.suppressNode(n,z(e,i))})}function z(e,t){let n=[];return S(e,t,e=>{n.push(e)}),n}function he(e,t){let n=g(e),r=n?n.y+n.height:null;if(r!==null)for(let n=0;n<e.length;n+=1){let i=e[n];!i||!ge(i,r)||(t.suppressNode(i,[]),_e(i,t,r),S(e,n,e=>{t.suppressNode(e,[])}))}}function ge(e,n){return!e.rect||t(e.type??``)!==`keyboard`?!1:e.rect.y>=n}function _e(e,t,n){let r=typeof e.parentIndex==`number`?t.sourceNodesByIndex.get(e.parentIndex):void 0;for(;r?.rect&&r.rect.y>=n;)t.suppressNode(r,[]),r=typeof r.parentIndex==`number`?t.sourceNodesByIndex.get(r.parentIndex):void 0}function ve(e,n){for(let r=0;r<e.length;r+=1){let i=e[r];if(!i)continue;if(ye(i)){B(e,r,i,n);continue}if(!be(i))continue;let a=x(e,r,e=>t(e.type??``)===`searchfield`&&e.label===`Search`);a&&(n.suppressNode(i,[a]),xe(i,a,n),B(e,r,a,n))}}function ye(e){return t(e.type??``)===`searchfield`&&e.label===`Search`}function be(e){let n=t(e.type??``);return e.label===`Toolbar`&&(n===`toolbar`||n===`searchfield`)}function B(e,t,n,r){S(e,t,e=>{e.index!==n.index&&Se(e)&&r.suppressNode(e,[n])})}function xe(e,t,n){let r=e;for(;typeof r.parentIndex==`number`;){let e=n.sourceNodesByIndex.get(r.parentIndex);if(!e||e.label!==`Toolbar`)return;n.suppressNode(e,[t]),r=e}}function Se(e){let n=t(e.type??``);return n===`button`?!1:n===`image`||e.label===`Search`}function Ce(e,t){for(let n=0;n<e.length;n+=1){let r=e[n],i=r?.label?.trim();!r||t.isSuppressed(r)||!i||we(e,n,r,i,t)}}function we(e,n,r,i,a){let o=t(r.type??``);if(o===`statictext`||o===`link`){V(e,n,i,r,a);return}if(o!==`other`)return;let s=Te(e,n,i);if(s){a.suppressNode(r,[s]);return}V(e,n,i,r,a)}function Te(e,n,r){return x(e,n,e=>{let n=t(e.type??``);return(n===`link`||n===`searchfield`||p(e.type))&&e.label?.trim()===r})}function V(e,t,n,r,i){S(e,t,e=>{!i.semanticRepresentativeIndexes.has(e.index)&&ie(e,n)&&i.suppressNode(e,[r])})}function Ee(e,t){P(e,(n,r,i)=>{let a=x(e,i,e=>m(e)&&e.label?.trim()===r&&(d(e.rect,n.rect)||De(n,e)));a&&t.suppressNode(n,[a])})}function De(e,n){if(n.label?.trim()!==e.label?.trim())return!1;let r=t(n.type??``);return Oe(e,r)||r===`textfield`||ke(e,r,n)}function Oe(e,t){let n=e.label?.trim();return t===`button`&&(n===`Dismiss`||n===`Back`)}function ke(e,t,n){return t!==`button`||!e.rect||!n.rect?!1:e.rect.x===0&&e.rect.y===0&&e.rect.width>=300&&e.rect.height>=600&&n.rect.width<e.rect.width}function Ae(e,n){let r=C(e);for(let i of e){if(t(i.type??``)!==`other`||i.hittable===!0||i.label?.trim()||i.value?.trim()||!i.identifier?.trim())continue;let e=je(i,r);(e.length!==0||i.hittable===!1)&&n.suppressNode(i,e)}}function je(e,t){let n=[],r=new Set([e.index]),i=[...t.get(e.index)??[]];for(;i.length>0;){let e=i.pop();if(!e||r.has(e.index))continue;r.add(e.index),n.push(e);let a=t.get(e.index);a&&i.push(...a)}return n}function Me(e,t){he(e,t),Ae(e,t),ue(e,t),ve(e,t),Ee(e,t),F(e,t.replacements),R(e,t),Ce(e,t)}function Ne(e,t){for(let n=0;n<e.length;n+=1){let r=e[n],i=r?Pe(e,n,r,t):void 0;!r?.rect||!i||Le(e,n,r,i,t)}}function Pe(e,n,r,i){let a=r.label?.trim();if(t(r.type??``)!==`cell`||a&&!Fe(a,r.identifier)&&!o(a))return a;let s=v(e,n).find(Ie),c=s?.label?.trim();return!s||!c?a:(b(i.replacements,r,{label:c}),i.suppressNode(s,[r]),c)}function Fe(e,t){return t?.trim()===e&&/^[A-Z_$][A-Za-z0-9_$]*Cell$/.test(e)}function Ie(e){if(!e.label?.trim())return!1;let n=t(e.type??``);return n===`statictext`||n===`text`||n===`textview`}function Le(e,n,r,i,a){let o=t(r.type??``);if(o===`button`){H(v(e,n),i,a,r);return}if(o!==`cell`)return;let s=v(e,n);Re(s,r,i,a)||ze(s,r,i,a)}function Re(e,t,n,r){let i=e.find(e=>Ve(e,t,n));if(!i)return!1;let a=e.find(e=>U(e,t,n)),o=i.identifier?void 0:a?.identifier??t.identifier;return o&&b(r.replacements,i,{identifier:o}),r.suppressNode(t,[i]),Be(e,t,n,i,r),!0}function ze(e,t,n,r){let i=e.find(e=>U(e,t,n));if(!i){e.some(te)&&H(e,n,r,t);return}!t.identifier&&i.identifier&&b(r.replacements,t,{identifier:i.identifier}),r.suppressNode(i,[t]),H(e.filter(e=>e.index!==i.index),n,r,t)}function Be(e,t,n,r,i){for(let a of e)a.index!==r.index&&(U(a,t,n)||W(a,t)||He(a,r)||h(a,n))&&i.suppressNode(a,[r])}function H(e,t,n,r){for(let i of e)(h(i,t)||r&&W(i,r))&&n.suppressNode(i,r?[r]:[])}function U(e,n,r){if(t(e.type??``)!==`button`)return!1;let i=n.identifier?.trim(),a=e.identifier?.trim();return i&&a&&i===a?!0:e.label?.trim()===r&&d(e.rect,n.rect)}function W(e,n){return t(e.type??``)===`button`&&!e.label?.trim()&&!e.value?.trim()&&d(e.rect,n.rect)}function Ve(e,n,r){if(t(e.type??``)!==`switch`)return!1;let i=n.identifier?.trim(),a=e.identifier?.trim();return i&&a&&i===a?!0:e.label?.trim()===r}function He(e,n){if(t(e.type??``)!==`switch`||e.index===n.index)return!1;let r=e.label?.trim();return r===n.value?.trim()||r===`0`||r===`1`}const G=1.15;function Ue(e,t,n){let i=new Map(e.map((e,t)=>[e.index,t]));for(let[a,o]of e.entries()){let s=We(e,i,t,o,n);if(!s)continue;q(e,a,n);let c=J(s.shelfRect,2);for(let t of s.intermediateSiblings){if($e(t)||!t.rect||!r(t.rect,c))continue;let a=i.get(t.index);a!==void 0&&q(e,a,n)}}}function We(e,t,n,r,i){let a=Ge(r,n,i.sourceNodesByIndex);if(!a)return;let o=Je(e,t,a.siblings,a.position,a.parent);if(!(o<0))return{shelfRect:a.rect,intermediateSiblings:a.siblings.slice(a.position+1,o)}}function Ge(e,t,n){let r=Ye(e,K(t,e.index));if(!r)return;let i=qe(e,n);if(!i||!i.rect)return;let a=K(t,i.index),o=a.findIndex(t=>t.index===e.index);if(Ke(a,o,e,r))return{rect:r.rect,parent:i,siblings:a,position:o}}function K(e,t){return e.get(t)??[]}function Ke(e,t,n,r){if(t<1)return!1;let i=Xe(e,t,n);return i?!r.childActionsPresented||!Ze(i,r.actionButtons):!1}function qe(e,t){return typeof e.parentIndex==`number`?t.get(e.parentIndex):void 0}function Je(e,t,n,r,i){return n.findIndex((n,a)=>a>r&&Qe(e,t.get(n.index),n,i))}function Ye(e,n){if(!p(e.type)||!e.rect)return;let r=e.rect,a=n.filter(e=>t(e.type??``)===`button`&&e.rect);if(a.length===0&&e.hiddenContentBelow===!0)return{rect:r,childActionsPresented:!1,actionButtons:a};if(a.length<3)return;let o=a.map(e=>e.rect.x+e.rect.width/2);if(o.every((e,t)=>t===0||e>o[t-1]))return{rect:r,childActionsPresented:a.some(e=>i(r,e.rect)),actionButtons:a}}function Xe(e,t,n){if(!(!n.rect||t<1))for(let r=t-1;r>=0;--r){let t=e[r];if(!(!t.rect||!m(t))&&t.rect.x+t.rect.width/2<n.rect.x&&et(t.rect,J(n.rect,2)))return t}}function Ze(e,t){if(!e.rect||t.length===0)return!1;let n=Math.max(...t.map(e=>e.rect?.width??0)),r=Math.max(...t.map(e=>e.rect?.height??0));return e.rect.width>n*G||e.rect.height>r*G}function Qe(e,n,r,i){return n!==void 0&&t(r.type??``)===`other`&&d(r.rect,i.rect)&&!!x(e,n,m)}function q(e,t,n){let r=e[t];if(r){n.suppressNode(r,[]);for(let r of v(e,t))n.suppressNode(r,[])}}function $e(e){let n=t(e.type??``);return n===`textfield`||n===`securetextfield`||n===`searchfield`||n===`textview`}function J(e,t){return{x:e.x-t,y:e.y-t,width:e.width+t*2,height:e.height+t*2}}function et(e,t){return Math.max(e.y,t.y)<=Math.min(e.y+e.height,t.y+t.height)}function tt(e,t){let n=C(e);Ue(e,n,t),nt(e,n,t)}function nt(e,n,r){for(let i of e){if(t(i.type??``)!==`navigationbar`||!i.rect)continue;let e=n.get(i.index)??[],a=e.flatMap(t=>rt(t,e,i.rect));if(a.length!==1)continue;let{field:o,title:s,image:c,label:l}=a[0];b(r.replacements,o,{type:`Button`,label:l,enabled:!0,hittable:void 0,rect:st([c.rect,o.rect,s.rect])}),r.semanticRepresentativeIndexes.add(o.index),r.suppressNode(s,[o]),r.suppressNode(c,[o])}}function rt(e,t,n){let r=a(e);if(!it(e,r))return[];let i=X(t,e=>at(e,r)),o=X(t,Y);return i?.rect&&o?.rect&&ot(o.rect,e.rect,i.rect,n)?[{field:e,title:i,image:o,label:r}]:[]}function it(e,n){return t(e.type??``)===`textfield`&&e.enabled===!1&&!!e.rect&&!!n&&e.value?.trim()===n}function at(e,n){return t(e.type??``)===`statictext`&&e.label?.trim()===n&&!!e.rect}function Y(e){return t(e.type??``)===`image`&&!!e.identifier?.trim()&&!!e.rect}function X(e,t){let n=e.filter(t);return n.length===1?n[0]:void 0}function ot(e,t,n,r){let a=t.x-(e.x+e.width),o=n.x-(t.x+t.width);return i(r,e)&&i(r,t)&&i(r,n)&&a>=0&&a<=12&&o>=0&&o<=12&&Z(e,t)&&Z(t,n)}function Z(e,t){return Math.max(e.y,t.y)<=Math.min(e.y+e.height,t.y+t.height)}function st(e){let t=Math.min(...e.map(e=>e.x)),n=Math.min(...e.map(e=>e.y)),r=Math.max(...e.map(e=>e.x+e.width)),i=Math.max(...e.map(e=>e.y+e.height));return{x:t,y:n,width:r-t,height:i-n}}function ct(e,n){let r=C(e);for(let i of e){if(t(i.type??``)===`element(58)`){b(n.replacements,i,{type:`WebView`});continue}let e=lt(i,n.sourceNodesByIndex,r);if(e?.kind===`suppress`){n.suppressNode(i,[]);continue}e&&(b(n.replacements,i,{type:e.type,...e.type===`Heading`?{value:void 0}:{}}),n.semanticRepresentativeIndexes.add(i.index))}}function lt(e,n,r){if(t(e.type??``)!==`other`)return null;let i=f(e,n,ft),a=e.label?.trim();return!i||!a?null:dt(e,i,a)?{kind:`suppress`}:ut(e,a,r)?{kind:`semantic`,type:Q(e.value)?`Heading`:`StaticText`}:null}function ut(e,n,r){let i=r.get(e.index);if(i?.length!==1)return!1;let a=i[0];return t(a.type??``)===`statictext`&&a.label?.trim()===n&&!r.has(a.index)}function dt(e,t,n){return e.parentIndex===t.index&&t.label?.trim()===n&&!Q(e.value)}function ft(e){let n=t(e.type??``);return n===`webview`||n===`element(58)`}function Q(e){return/^[1-6]$/.test(e?.trim()??``)}const pt=[ct,tt,ae,Ne,Me];function mt(e){if(e.length===0)return{nodes:e,presentedIndexesBySourceIndex:new Map};let t=new Map,n=new Map,r=new Set,i=new Map(e.map(e=>[e.index,e])),a=new Set,o={replacements:t,semanticRepresentativeIndexes:r,sourceNodesByIndex:i,isSuppressed:e=>a.has(e.index),suppressNode(e,t){if(a.add(e.index),t.length===0)return;let r=n.get(e.index)??new Set;for(let e of t)r.add(e.index);n.set(e.index,r)}};for(let t of pt)t(e,o);if(a.size===0&&t.size===0)return{nodes:e,presentedIndexesBySourceIndex:new Map(e.map(e=>[e.index,[e.index]]))};let s=e.filter(e=>!a.has(e.index)).map(e=>t.get(e.index)??e),c=_(s,a,e),l=new Map(s.map((e,t)=>[e.index,c[t].index]));return{nodes:c,presentedIndexesBySourceIndex:new Map(e.map(e=>[e.index,$(e.index,l,n)]))}}function $(e,t,n,r=new Set){let i=t.get(e);if(i!==void 0)return[i];if(r.has(e))return[];r.add(e);let a=new Set;for(let i of n.get(e)??[])for(let e of $(i,t,n,r))a.add(e);return[...a].sort((e,t)=>e-t)}export{mt as t};
|
|
1
|
+
import{Ir as e,Kr as t,Mr as n,Ur as r,Wr as i,qr as a}from"./sdk-batch.js";import{n as o,t as s}from"./scroll-indicator.js";import{a as c,i as l,o as ee,r as u}from"./react-native-overlay.js";import{t as d}from"./rect-center.js";import{a as f,c as te,d as p,f as m,g as ne,h,i as g,l as re,m as _,n as v,p as y,r as b,s as x,t as S,u as ie}from"./tree.js";function ae(e,t){let n=g(t.sourceNodesByIndex.values());for(let r of e)oe(r,t.sourceNodesByIndex,n)&&y(t.replacements,r,{type:`Cell`})}function oe(t,n,r){return!(e(t.type??``)!==`other`||t.enabled===!1||!t.rect||!le(t.label)||!f(t,n,ce)||!se(t)||re(t.rect,r))}function se(e){return e.rect?e.rect.height>=44&&e.rect.height<=160&&e.rect.width>=120:!1}function ce(t){let n=e(t.type??``);return n===`scrollview`||n===`scrollarea`}function le(e){let t=e?.trim();return!(!t||/^(toolbar|window|application)$/i.test(t)||t.startsWith(`!,`)||/debugger|fast refresh/i.test(t))}function ue(e,t){let n=new Set;for(let r of e)de(t.replacements.get(r.index)??r)&&fe(r,t.sourceNodesByIndex,t,n);he(e,t,n)}function de(e){let t=e.label?.trim();return!!(t&&o(t))}function fe(e,t,n,r){let i=!p(e.type)||n.isSuppressed(e),a=s(e.label?.trim()??``,e.value),o=a?pe(e,t):void 0;i&&n.suppressNode(e,o?[o]:[]),o&&a&&j(n,o,e,a)&&r.add(o.index)}function pe(e,t){if(p(e.type))return e;let n=f(e,t,e=>p(e.type)||me(e.type));return n&&p(n.type)?n:null}function me(t){return e(t??``)===`textview`}function he(e,t,n){let r=new Map;for(let i of e){let e=r.get(i.parentIndex??-1),a=e?.clip,o=t.replacements.get(i.index)??i,s=k(o.rect,a),c=C(o,a,s),l=w(e,c,o);T(t,i,o,a,s,c,l),r.set(i.index,E(i,o,a,s,l,n))}}function C(e,t,n){return!!(t&&r(e.rect)&&!r(n))}function w(e,t,n){return!!(e?.projectedOut||t&&O(n))}function T(e,t,n,r,i,a,o){o||a?e.suppressNode(t,[]):r&&i&&!A(n.rect,i)&&y(e.replacements,t,{rect:i})}function E(e,t,n,r,i,a){return{projectedOut:i,...D(e,t,n,r,a)?{clip:r}:n?{clip:n}:{}}}function D(e,t,n,i,a){return!!(r(i)&&(a.has(e.index)||n!==void 0&&p(t.type)))}function O(e){return e.type?.trim().toLowerCase()===`cell`||p(e.type)}function k(e,t){if(!e||!t)return e;let n=Math.max(e.x,t.x),r=Math.max(e.y,t.y),i=Math.min(e.x+e.width,t.x+t.width),a=Math.min(e.y+e.height,t.y+t.height);return{x:n,y:r,width:Math.max(0,i-n),height:Math.max(0,a-r)}}function A(e,t){return!!(e&&e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height)}function j(e,t,n,r){let i=N((e.replacements.get(t.index)??t).rect,n.rect);return ne(e.replacements,t,e=>({rect:i??e.rect,hiddenContentAbove:M(e.hiddenContentAbove,r.above),hiddenContentBelow:M(e.hiddenContentBelow,r.below)})),!!i}function M(e,t){return e===!0||t?!0:void 0}function N(e,t){if(!(!e||!t)&&!(t.height<=0||t.height>=e.height)&&!(t.y<e.y||t.y>e.y+e.height))return{...e,y:t.y,height:Math.min(t.height,e.y+e.height-t.y)}}function P(t,n){for(let r=0;r<t.length;r+=1){let i=t[r],a=i?.label?.trim();i&&a&&e(i.type??``)===`other`&&n(i,a,r)}}function F(e,t){P(e,(n,r,i)=>{if(!c(r)||!n.rect)return;let a=b(e,i,e=>!!e.rect&&ee(e.label?.trim()??``));if(!a?.rect)return;let o=L(n.rect,a.rect);if(!o)return;let s=I(e,i,o);y(t,n,{rect:s}),x(e,i,e=>{c(e.label?.trim()??``)&&y(t,e,{rect:s})})})}function I(e,n,r){let i=r;return x(e,n,e=>{let n=e.label?.trim()??``;!e.rect||!c(n)||a(r,e.rect)&&t(e.rect)<t(i)&&(i=e.rect)}),i}function L(e,t){let n=e.x+e.width,r=t.x+t.width,i={x:t.x,y:e.y,width:n-t.x,height:e.height};if(t.x>e.x&&d(t,i))return{...e,width:t.x-e.x};let a={x:e.x,y:e.y,width:r-e.x,height:e.height};if(r<n&&d(t,a))return{...e,x:r,width:n-r}}function R(e,t){P(e,(n,r,i)=>{u(n)&&l(n,z(e,i))&&t.suppressNode(n,z(e,i))})}function z(e,t){let n=[];return x(e,t,e=>{n.push(e)}),n}function ge(e,t){let n=g(e),r=n?n.y+n.height:null;if(r!==null)for(let n=0;n<e.length;n+=1){let i=e[n];!i||!_e(i,r)||(t.suppressNode(i,[]),ve(i,t,r),x(e,n,e=>{t.suppressNode(e,[])}))}}function _e(t,n){return!t.rect||e(t.type??``)!==`keyboard`?!1:t.rect.y>=n}function ve(e,t,n){let r=typeof e.parentIndex==`number`?t.sourceNodesByIndex.get(e.parentIndex):void 0;for(;r?.rect&&r.rect.y>=n;)t.suppressNode(r,[]),r=typeof r.parentIndex==`number`?t.sourceNodesByIndex.get(r.parentIndex):void 0}function ye(t,n){for(let r=0;r<t.length;r+=1){let i=t[r];if(!i)continue;if(be(i)){B(t,r,i,n);continue}if(!xe(i))continue;let a=b(t,r,t=>e(t.type??``)===`searchfield`&&t.label===`Search`);a&&(n.suppressNode(i,[a]),Se(i,a,n),B(t,r,a,n))}}function be(t){return e(t.type??``)===`searchfield`&&t.label===`Search`}function xe(t){let n=e(t.type??``);return t.label===`Toolbar`&&(n===`toolbar`||n===`searchfield`)}function B(e,t,n,r){x(e,t,e=>{e.index!==n.index&&Ce(e)&&r.suppressNode(e,[n])})}function Se(e,t,n){let r=e;for(;typeof r.parentIndex==`number`;){let e=n.sourceNodesByIndex.get(r.parentIndex);if(!e||e.label!==`Toolbar`)return;n.suppressNode(e,[t]),r=e}}function Ce(t){let n=e(t.type??``);return n===`button`?!1:n===`image`||t.label===`Search`}function we(e,t){for(let n=0;n<e.length;n+=1){let r=e[n],i=r?.label?.trim();!r||t.isSuppressed(r)||!i||Te(e,n,r,i,t)}}function Te(t,n,r,i,a){let o=e(r.type??``);if(o===`statictext`||o===`link`){V(t,n,i,r,a);return}if(o!==`other`)return;let s=Ee(t,n,i);if(s){a.suppressNode(r,[s]);return}V(t,n,i,r,a)}function Ee(t,n,r){return b(t,n,t=>{let n=e(t.type??``);return(n===`link`||n===`searchfield`||p(t.type))&&t.label?.trim()===r})}function V(e,t,n,r,i){x(e,t,e=>{!i.semanticRepresentativeIndexes.has(e.index)&&ie(e,n)&&i.suppressNode(e,[r])})}function De(e,t){P(e,(n,r,i)=>{let a=b(e,i,e=>m(e)&&e.label?.trim()===r&&(d(e.rect,n.rect)||Oe(n,e)));a&&t.suppressNode(n,[a])})}function Oe(t,n){if(n.label?.trim()!==t.label?.trim())return!1;let r=e(n.type??``);return ke(t,r)||r===`textfield`||Ae(t,r,n)}function ke(e,t){let n=e.label?.trim();return t===`button`&&(n===`Dismiss`||n===`Back`)}function Ae(e,t,n){return t!==`button`||!e.rect||!n.rect?!1:e.rect.x===0&&e.rect.y===0&&e.rect.width>=300&&e.rect.height>=600&&n.rect.width<e.rect.width}function je(t,n){let r=S(t);for(let i of t){if(e(i.type??``)!==`other`||i.hittable===!0||i.label?.trim()||i.value?.trim()||!i.identifier?.trim())continue;let t=Me(i,r);(t.length!==0||i.hittable===!1)&&n.suppressNode(i,t)}}function Me(e,t){let n=[],r=new Set([e.index]),i=[...t.get(e.index)??[]];for(;i.length>0;){let e=i.pop();if(!e||r.has(e.index))continue;r.add(e.index),n.push(e);let a=t.get(e.index);a&&i.push(...a)}return n}function Ne(e,t){ge(e,t),je(e,t),ue(e,t),ye(e,t),De(e,t),F(e,t.replacements),R(e,t),we(e,t)}function Pe(e,t){for(let n=0;n<e.length;n+=1){let r=e[n],i=r?Fe(e,n,r,t):void 0;!r?.rect||!i||Re(e,n,r,i,t)}}function Fe(t,n,r,i){let a=r.label?.trim();if(e(r.type??``)!==`cell`||a&&!Ie(a,r.identifier)&&!o(a))return a;let s=v(t,n).find(Le),c=s?.label?.trim();return!s||!c?a:(y(i.replacements,r,{label:c}),i.suppressNode(s,[r]),c)}function Ie(e,t){return t?.trim()===e&&/^[A-Z_$][A-Za-z0-9_$]*Cell$/.test(e)}function Le(t){if(!t.label?.trim())return!1;let n=e(t.type??``);return n===`statictext`||n===`text`||n===`textview`}function Re(t,n,r,i,a){let o=e(r.type??``);if(o===`button`){H(v(t,n),i,a,r);return}if(o!==`cell`)return;let s=v(t,n);ze(s,r,i,a)||Be(s,r,i,a)}function ze(e,t,n,r){let i=e.find(e=>He(e,t,n));if(!i)return!1;let a=e.find(e=>U(e,t,n)),o=i.identifier?void 0:a?.identifier??t.identifier;return o&&y(r.replacements,i,{identifier:o}),r.suppressNode(t,[i]),Ve(e,t,n,i,r),!0}function Be(e,t,n,r){let i=e.find(e=>U(e,t,n));if(!i){e.some(te)&&H(e,n,r,t);return}!t.identifier&&i.identifier&&y(r.replacements,t,{identifier:i.identifier}),r.suppressNode(i,[t]),H(e.filter(e=>e.index!==i.index),n,r,t)}function Ve(e,t,n,r,i){for(let a of e)a.index!==r.index&&(U(a,t,n)||W(a,t)||Ue(a,r)||h(a,n))&&i.suppressNode(a,[r])}function H(e,t,n,r){for(let i of e)(h(i,t)||r&&W(i,r))&&n.suppressNode(i,r?[r]:[])}function U(t,n,r){if(e(t.type??``)!==`button`)return!1;let i=n.identifier?.trim(),a=t.identifier?.trim();return i&&a&&i===a?!0:t.label?.trim()===r&&d(t.rect,n.rect)}function W(t,n){return e(t.type??``)===`button`&&!t.label?.trim()&&!t.value?.trim()&&d(t.rect,n.rect)}function He(t,n,r){if(e(t.type??``)!==`switch`)return!1;let i=n.identifier?.trim(),a=t.identifier?.trim();return i&&a&&i===a?!0:t.label?.trim()===r}function Ue(t,n){if(e(t.type??``)!==`switch`||t.index===n.index)return!1;let r=t.label?.trim();return r===n.value?.trim()||r===`0`||r===`1`}const G=1.15;function We(e,t,n){let r=new Map(e.map((e,t)=>[e.index,t]));for(let[a,o]of e.entries()){let s=Ge(e,r,t,o,n);if(!s)continue;q(e,a,n);let c=J(s.shelfRect,2);for(let t of s.intermediateSiblings){if(et(t)||!t.rect||!i(t.rect,c))continue;let a=r.get(t.index);a!==void 0&&q(e,a,n)}}}function Ge(e,t,n,r,i){let a=Ke(r,n,i.sourceNodesByIndex);if(!a)return;let o=Ye(e,t,a.siblings,a.position,a.parent);if(!(o<0))return{shelfRect:a.rect,intermediateSiblings:a.siblings.slice(a.position+1,o)}}function Ke(e,t,n){let r=Xe(e,K(t,e.index));if(!r)return;let i=Je(e,n);if(!i||!i.rect)return;let a=K(t,i.index),o=a.findIndex(t=>t.index===e.index);if(qe(a,o,e,r))return{rect:r.rect,parent:i,siblings:a,position:o}}function K(e,t){return e.get(t)??[]}function qe(e,t,n,r){if(t<1)return!1;let i=Ze(e,t,n);return i?!r.childActionsPresented||!Qe(i,r.actionButtons):!1}function Je(e,t){return typeof e.parentIndex==`number`?t.get(e.parentIndex):void 0}function Ye(e,t,n,r,i){return n.findIndex((n,a)=>a>r&&$e(e,t.get(n.index),n,i))}function Xe(t,n){if(!p(t.type)||!t.rect)return;let r=t.rect,i=n.filter(t=>e(t.type??``)===`button`&&t.rect);if(i.length===0&&t.hiddenContentBelow===!0)return{rect:r,childActionsPresented:!1,actionButtons:i};if(i.length<3)return;let o=i.map(e=>e.rect.x+e.rect.width/2);if(o.every((e,t)=>t===0||e>o[t-1]))return{rect:r,childActionsPresented:i.some(e=>a(r,e.rect)),actionButtons:i}}function Ze(e,t,n){if(!(!n.rect||t<1))for(let r=t-1;r>=0;--r){let t=e[r];if(!(!t.rect||!m(t))&&t.rect.x+t.rect.width/2<n.rect.x&&tt(t.rect,J(n.rect,2)))return t}}function Qe(e,t){if(!e.rect||t.length===0)return!1;let n=Math.max(...t.map(e=>e.rect?.width??0)),r=Math.max(...t.map(e=>e.rect?.height??0));return e.rect.width>n*G||e.rect.height>r*G}function $e(t,n,r,i){return n!==void 0&&e(r.type??``)===`other`&&d(r.rect,i.rect)&&!!b(t,n,m)}function q(e,t,n){let r=e[t];if(r){n.suppressNode(r,[]);for(let r of v(e,t))n.suppressNode(r,[])}}function et(t){let n=e(t.type??``);return n===`textfield`||n===`securetextfield`||n===`searchfield`||n===`textview`}function J(e,t){return{x:e.x-t,y:e.y-t,width:e.width+t*2,height:e.height+t*2}}function tt(e,t){return Math.max(e.y,t.y)<=Math.min(e.y+e.height,t.y+t.height)}function nt(e,t){let n=S(e);We(e,n,t),rt(e,n,t)}function rt(t,n,r){for(let i of t){if(e(i.type??``)!==`navigationbar`||!i.rect)continue;let t=n.get(i.index)??[],a=t.flatMap(e=>it(e,t,i.rect));if(a.length!==1)continue;let{field:o,title:s,image:c,label:l}=a[0];y(r.replacements,o,{type:`Button`,label:l,enabled:!0,hittable:void 0,rect:ct([c.rect,o.rect,s.rect])}),r.semanticRepresentativeIndexes.add(o.index),r.suppressNode(s,[o]),r.suppressNode(c,[o])}}function it(e,t,r){let i=n(e);if(!at(e,i))return[];let a=X(t,e=>Y(e,i)),o=X(t,ot);return a?.rect&&o?.rect&&st(o.rect,e.rect,a.rect,r)?[{field:e,title:a,image:o,label:i}]:[]}function at(t,n){return e(t.type??``)===`textfield`&&t.enabled===!1&&!!t.rect&&!!n&&t.value?.trim()===n}function Y(t,n){return e(t.type??``)===`statictext`&&t.label?.trim()===n&&!!t.rect}function ot(t){return e(t.type??``)===`image`&&!!t.identifier?.trim()&&!!t.rect}function X(e,t){let n=e.filter(t);return n.length===1?n[0]:void 0}function st(e,t,n,r){let i=t.x-(e.x+e.width),o=n.x-(t.x+t.width);return a(r,e)&&a(r,t)&&a(r,n)&&i>=0&&i<=12&&o>=0&&o<=12&&Z(e,t)&&Z(t,n)}function Z(e,t){return Math.max(e.y,t.y)<=Math.min(e.y+e.height,t.y+t.height)}function ct(e){let t=Math.min(...e.map(e=>e.x)),n=Math.min(...e.map(e=>e.y)),r=Math.max(...e.map(e=>e.x+e.width)),i=Math.max(...e.map(e=>e.y+e.height));return{x:t,y:n,width:r-t,height:i-n}}function lt(t,n){let r=S(t);for(let i of t){if(e(i.type??``)===`element(58)`){y(n.replacements,i,{type:`WebView`});continue}let t=ut(i,n.sourceNodesByIndex,r);if(t?.kind===`suppress`){n.suppressNode(i,[]);continue}t&&(y(n.replacements,i,{type:t.type,...t.type===`Heading`?{value:void 0}:{}}),n.semanticRepresentativeIndexes.add(i.index))}}function ut(t,n,r){if(e(t.type??``)!==`other`)return null;let i=f(t,n,pt),a=t.label?.trim();return!i||!a?null:ft(t,i,a)?{kind:`suppress`}:dt(t,a,r)?{kind:`semantic`,type:Q(t.value)?`Heading`:`StaticText`}:null}function dt(t,n,r){let i=r.get(t.index);if(i?.length!==1)return!1;let a=i[0];return e(a.type??``)===`statictext`&&a.label?.trim()===n&&!r.has(a.index)}function ft(e,t,n){return e.parentIndex===t.index&&t.label?.trim()===n&&!Q(e.value)}function pt(t){let n=e(t.type??``);return n===`webview`||n===`element(58)`}function Q(e){return/^[1-6]$/.test(e?.trim()??``)}const mt=[lt,nt,ae,Pe,Ne];function ht(e){if(e.length===0)return{nodes:e,presentedIndexesBySourceIndex:new Map};let t=new Map,n=new Map,r=new Set,i=new Map(e.map(e=>[e.index,e])),a=new Set,o={replacements:t,semanticRepresentativeIndexes:r,sourceNodesByIndex:i,isSuppressed:e=>a.has(e.index),suppressNode(e,t){if(a.add(e.index),t.length===0)return;let r=n.get(e.index)??new Set;for(let e of t)r.add(e.index);n.set(e.index,r)}};for(let t of mt)t(e,o);if(a.size===0&&t.size===0)return{nodes:e,presentedIndexesBySourceIndex:new Map(e.map(e=>[e.index,[e.index]]))};let s=e.filter(e=>!a.has(e.index)).map(e=>t.get(e.index)??e),c=_(s,a,e),l=new Map(s.map((e,t)=>[e.index,c[t].index]));return{nodes:c,presentedIndexesBySourceIndex:new Map(e.map(e=>[e.index,$(e.index,l,n)]))}}function $(e,t,n,r=new Set){let i=t.get(e);if(i!==void 0)return[i];if(r.has(e))return[];r.add(e);let a=new Set;for(let i of n.get(e)??[])for(let e of $(i,t,n,r))a.add(e);return[...a].sort((e,t)=>e-t)}export{ht as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{D as e,o as t}from"./sdk-contracts.js";import{
|
|
1
|
+
import{D as e,o as t}from"./sdk-contracts.js";import{b as n,d as r,g as i,r as a,y as o}from"./sdk-device.js";import"./session-store.js";import{s}from"./device-shell.js";import{t as c}from"./device-isolation.js";import l from"node:path";import u from"node:fs";import d from"node:crypto";function f(e){return`${e.device.platform} device "${e.device.name.trim()}" (${e.device.id})`}function p(e,t,n={}){return e.session.screenRecording?g(e.address,t):v(e,t,n)}function m(e,n,r={}){return t(`DEVICE_IN_USE`,`Device is already in use by session "${e.address}".`,{session:e.address,deviceId:n.id,deviceName:n.name,...r.waitedMs===void 0?{}:{waitedMs:r.waitedMs},hint:p(e,`device-in-use`,r)})}function h(e,n,r={}){return t(`DEVICE_IN_USE`,`Device is already in use by workspace session "${e.address}".`,{reason:`WORKSPACE_SESSION_SCOPE_CONFLICT`,session:e.address,deviceId:n.id,deviceName:n.name,...r.waitedMs===void 0?{}:{waitedMs:r.waitedMs},hint:_(e.address,r)})}function g(e,t){let n=s(e),r=`agent-device close --session ${n}`;return`Recording session "${e}" owns this device. Run ${`agent-device record stop --session ${n}`}; if the session still appears in agent-device session list, run ${r}. ${t===`selector-conflict`?`To keep using this device, rerun the command with --session ${n} and remove conflicting device selectors.`:`To keep using this device, reuse --session ${n} for commands that should attach to the recording session.`} Run agent-device session list to inspect active sessions.`}function _(e,t){let n=s(e);return`${y(t)}Session "${e}" belongs to another workspace. Run agent-device close --session ${n} to release this device from that workspace, agent-device devices to choose another device. ${b(t)}Run agent-device session list to inspect active sessions.`}function v(e,t,n){let r=e.address,i=s(r),a=`agent-device close --session ${i}`;return t===`selector-conflict`?`Run agent-device session list to inspect active sessions. To reuse this device, rerun the command with --session ${i} and remove conflicting device selectors. To switch devices, first run ${a}, then open the desired device with a different --session name.`+x(e,n):`${y(n)}Run agent-device session list to inspect active sessions. To reuse this device, rerun the command with --session ${i}. To open a new session on this device, first run ${a}. `+`${b(n)}`.trimEnd()}function y(e){return e.waitedMs===void 0?``:`Waited ${Math.round(e.waitedMs)}ms for this device and it stayed busy. `}function b(e){return e.offersDeviceWait&&e.waitedMs===void 0?`To wait for the device to free up, run the same open with --wait <ms>. `:``}function x(e,t){return t.offersPlatformSession===!0&&e.session.sessionScope?.kind===`cwd`?` Or name the other platform with --platform to open its own session for this workspace.`:``}function S(t,n){let{address:r,session:i}=t,a=C(i,n);if(a.length!==0)throw new e(`INVALID_ARGS`,`Session "${r}" is already bound to ${f(i)}, but this request selected ${a.map(w).join(`, `)}.`,{session:r,conflicts:a.map(w),hint:p(t,`selector-conflict`,{offersPlatformSession:a.some(e=>e.key===`platform`)})})}function C(e,t){if(!t)return[];let n=[],a=e.device,s=t.platform;if(s&&!o(a,s)&&n.push({key:`platform`,value:t.platform}),t.target&&t.target!==(a.target??`mobile`)&&n.push({key:`target`,value:t.target}),t.udid&&(!r(a)||t.udid!==a.id)&&n.push({key:`udid`,value:t.udid}),t.serial&&(!i(a.platform)||t.serial!==a.id)&&n.push({key:`serial`,value:t.serial}),t.device&&t.device.trim().toLowerCase()!==a.name.trim().toLowerCase()&&n.push({key:`device`,value:t.device}),t.iosSimulatorDeviceSet){let e=t.iosSimulatorDeviceSet.trim(),i=a.simulatorSetPath?.trim();(!r(a)||a.kind!==`simulator`||e!==i)&&n.push({key:`iosSimulatorDeviceSet`,value:t.iosSimulatorDeviceSet})}if(t.androidDeviceAllowlist){let e=c(t.androidDeviceAllowlist);(a.platform!==`android`||!e.has(a.id))&&n.push({key:`androidDeviceAllowlist`,value:t.androidDeviceAllowlist})}return n}function w(e){return`${T(e.key)}=${e.value}`}function T(e){switch(e){case`iosSimulatorDeviceSet`:return`--ios-simulator-device-set`;case`androidDeviceAllowlist`:return`--android-device-allowlist`;default:return`--${e}`}}const E=`default`,D=new Set(a);function O(e,t,n={}){let r=e.session||E;if(P(e))return r;let i=j(e);return i.kind===`cwd`?I(e,t,i.id,n):r}function k(e){return e.session||E}function A(e){let t=j(e);return t.kind===`cwd`?t:void 0}function j(t){if(t.meta?.sessionIsolation===`tenant`||t.flags?.sessionIsolation===`tenant`){let n=t.meta?.tenantId;if(!n)throw new e(`INTERNAL_ERROR`,`Tenant-scoped request reached session routing without an admitted tenant id`);return{kind:`tenant`,id:n}}if(P(t)||(t.session||E)!==E)return{kind:`named-local`};let n=J(t.meta?.cwd);return n?{kind:`cwd`,id:q(n)}:{kind:`global-default`}}function M(e,t){let n=e.sessionScope;return n?t.kind===`tenant`?n.kind===`tenant`&&n.id===t.id:n.kind===`tenant`?!1:t.kind!==`cwd`||n.kind===`named-local`||n.kind===`cwd`&&n.id===t.id:!1}function N(e,t){let n=A(e);return!n||t.sessionScope?.kind!==`cwd`?!1:t.sessionScope.id!==n.id}function P(e){if(e.meta?.sessionExplicit===!0)return!0;let t=e.flags?.session;return typeof t==`string`&&t.trim().length>0}function F(e,t){return`cwd:${e}:${t}`}function I(e,t,n,r){let i=H(t,n),a=U(e);return a?L(e,t,n,a,i,r):V(n,i,r)}function L(e,t,n,r,i,a){let o=F(n,r);if(t.get(o))return o;let s=B(e.flags,r),c=i.map(e=>({ref:e,conflicts:C(e.session,s)})),l=c.filter(e=>e.conflicts.length===0),[u]=l;return u&&l.length===1?u.ref.address:l.length>1?(G(a,l.map(e=>e.ref)),o):R(c)?.address??o}function R(e){return e.find(e=>!z(e.conflicts))?.ref}function z(e){return e.some(e=>e.key===`platform`)}function B(e,t){return{...e,platform:t}}function V(e,t,n){let[r]=t;return r&&t.length===1?r.address:(G(n,t),F(e,E))}function H(e,t){let n=new Set,r=[];for(let i of e.listRefs()){let e=i.session.sessionScope;e?.kind===`cwd`&&e.id===t&&(n.has(i.session)||(n.add(i.session),r.push(i)))}return r}function U(e){return W(e.flags?.platform)??W(e.meta?.lockPlatform)}function W(e){if(typeof e!=`string`)return;let t=e.trim().toLowerCase();return D.has(t)?t:void 0}function G(e,t){if(t.length>1&&e.attachesToSession===!0)throw K(t)}function K(t){let r=t.map(e=>e.address),i=t.map(e=>n(e.session.device)),a=i.map(e=>`--platform ${e}`).join(` or `);return new e(`AMBIGUOUS_MATCH`,`This workspace has ${t.length} implicit sessions (${r.join(`, `)}); select one explicitly.`,{sessions:r,platforms:i,hint:`Run agent-device session list to inspect them. Add ${a} to run in that platform's session, or pass --session <address> copied from that list.`})}function q(e){return d.createHash(`sha256`).update(e).digest(`hex`).slice(0,16)}function J(e){if(!e||e.trim().length===0)return;let t=Y(e);return X(t)??t}function Y(e){let t=l.resolve(e);try{return u.realpathSync.native(t)}catch{return t}}function X(e){let t=e;for(;;){if(u.existsSync(l.join(t,`.git`)))return t;let e=l.dirname(t);if(e===t)return;t=e}}export{j as a,w as c,h as d,p as f,k as i,C as l,N as n,M as o,f as p,O as r,S as s,P as t,m as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{D as e,S as t,_ as n,b as r,f as i,o as a}from"./sdk-contracts.js";import{l as o}from"./capture.js";import{r as s}from"./snapshot-capture-annotations.js";import{r as c}from"./snapshot-diagnostics.js";import{f as l}from"./android-input-ownership.js";import{f as u,l as d,y as f}from"./sdk-device.js";import{$n as p,Dr as ee,Jn as te,Kn as ne,Rn as re,Rt as ie,Un as ae,Vt as oe,Wn as se,bt as ce,ct as le,dt as ue,ht as de,lt as fe,tr as m,ut as pe,wt as me}from"./sdk-batch.js";import{A as he,F as ge,N as _e,P as ve,T as ye,a as be,g as xe,o as Se,t as Ce,x as we}from"./runtime.js";import{r as h}from"./success-text.js";import{i as g}from"./click-button.js";import{a as Te,r as _}from"./diagnostics.js";import{t as v}from"./timeouts.js";import"./diagnostics2.js";import"./retry.js";import{i as Ee}from"./rect-center.js";import{t as De}from"./snapshot-state.js";import{n as Oe}from"./request-runtime-binding.js";import{i as ke}from"./lease-context.js";import{o as Ae}from"./tree.js";import{t as je}from"./interactor-types.js";import{randomInt as Me}from"node:crypto";function Ne(e){return e.matchedRefs.length===0?{path:2,outcome:`unverifiable`,reason:`selector-miss`}:e.identitySetRefs.length===0?{path:3,outcome:`unverifiable`,reason:`identity-set-empty`}:e.identitySetRefs.length===1?e.identitySetRefs[0]===e.winnerRef?{path:4,outcome:`verified`}:{path:5,outcome:`unverifiable`,reason:`unique-but-wrong`}:e.siblingMatchRefs.length===1?e.siblingMatchRefs[0]===e.winnerRef?{path:6,outcome:`verified`}:{path:6,outcome:`unverifiable`,reason:`signal-isolated-wrong`}:e.regionMemberRefs!==void 0&&e.regionMemberRefs.length>0&&e.viewportCandidateRef!==void 0?e.viewportCandidateRef===e.winnerRef?{path:6,outcome:`verified`}:{path:6,outcome:`unverifiable`,reason:`signal-isolated-wrong`}:{path:6,outcome:`unverifiable`,reason:`no-signal-isolation`}}let Pe={resolve:async()=>{throw new e(`COMMAND_FAILED`,`Interactor resolution is not composed for this process.`,{reason:`interactor-resolution-missing`})}};function Fe(e){Pe=e}function Ie(){return Pe}var y=class e{#e;constructor(e){this.#e=e}get state(){return this.#e.state}get scope(){return this.#e.scope}get tree(){return this.#e.tree}get generation(){return this.#e.generation}static expire(t){return t.#e.state===`expired`?t:new e({...t.#e,state:`expired`})}};const Le=new y({state:`active`,scope:`all`,tree:void 0,generation:void 0});function Re(e){return new y({state:`active`,...e})}function ze(e){return y.expire(e)}const Be=new WeakMap;function b(e){return e.refFrame??Le}function x(e){return b(e).generation??e.snapshotGeneration}function Ve(e){return b(e).tree}function He(e){Ue(e),e.refFrame=ze(b(e)),e.snapshotScopeSource=void 0}function Ue(e){let t=We(e)+1;return Be.set(e,t),t}function We(e){return Be.get(e)??0}function Ge(e){qe(e,`all`)}function Ke(e,t){qe(e,t)}function qe(e,t){e.refFrame=Re({scope:t,tree:e.snapshot,generation:e.snapshotGeneration})}function Je(e){return b(e).state}function Ye(e){return b(e).scope}function Xe(e){let t=e.ref.startsWith(`@`)?e.ref.slice(1):e.ref;return{admission:Ze({session:e.session,refBody:t,mintedGeneration:e.mintedGeneration}),scope:Ye(e.session),currentGeneration:x(e.session)}}function Ze(e){let{session:t,refBody:n,mintedGeneration:r}=e;if(Je(t)===`expired`)return{admitted:!1,reason:`ref_frame_expired`};if(r!==void 0&&r!==x(t))return{admitted:!1,reason:`ref_generation_mismatch`};let i=Ye(t);if(i!==`all`){if(r===void 0)return{admitted:!1,reason:`plain_ref_requires_complete_frame`};if(!i.has(n))return{admitted:!1,reason:`ref_not_issued`}}return{admitted:!0}}const Qe=[250,400,600];function $e(e){return e===`press`||e===`click`||e===`back`||e===`open`}function S(e){return e.map(e=>[e.depth??0,e.type??``,e.label??``,e.value??``,e.identifier??``,e.enabled===!1?`disabled`:`enabled`,e.hittable===!0?`hittable`:`not-hittable`].join(`|`))}function et(e,t){return e<12?!1:t<=Math.floor(e*.2)}function tt(e,t,n){return n.interactiveOnly&&e.snapshot.nodes.length===0&&e.rawNodeCount!==void 0&&e.rawNodeCount>=12?`empty-interactive`:n.mode===`ref-refresh`?null:et(t.baselineCount,e.snapshot.nodes.length)?nt(e.snapshot)?null:`sharp-drop`:t.routeComparable&&$e(t.action)&&rt(t.baselineSignatures,e.snapshot.nodes)?`stuck-route`:null}function nt(e){return e.nodes.some(e=>e.hittable===!0||!!e.label?.trim()||!!e.value?.trim()||!!e.identifier?.trim())}function rt(e,t){if(!e||e.length===0)return!1;let n=Math.max(e.length,t.length);if(n<12)return!1;let r=S(t),i=Math.min(e.length,r.length),a=0;for(let t=0;t<i;t+=1)e[t]===r[t]&&(a+=1);let o=Math.max(0,r.length-e.length),s=Math.max(0,e.length-r.length),c=Math.max(3,Math.floor(n*.15));return a>=Math.floor(n*.9)&&o<=c&&s<=c}async function it(e){let t=e.window.markedAt+e.retry.retryBudgetMs,n=await e.capture(),r=e.classify(n),i=0;for(let a of e.retry.delaysMs){if(!r)break;let o=t-Date.now();if(o<=0)break;await v(Math.min(a,o)),n=await e.capture(),i+=1,r=e.classify(n)}r||e.onTrustworthyCapture?.();let a=i>0||r?{action:e.window.action,retryCount:i,staleAfterRetries:!!r,reason:r??void 0}:void 0;return{...n,annotations:{...n.annotations,...s({freshness:a})}}}function at(e,t,n=e.snapshot){if(e.device.platform!==`android`)return;let r=ot(e,n),i=r?.comparisonSafe===!0;e.androidSnapshotFreshness={action:t,markedAt:Date.now(),baselineCount:(r??n)?.nodes.length??0,baselineSignatures:i?S(r?.nodes??[]):void 0,routeComparable:i}}function ot(e,t){if(t?.comparisonSafe===!0)return t;let n=e.lastComparisonSafeSnapshot;return!n||n.comparisonSafe!==!0?t:Date.now()-n.createdAt<=5e3?n:t}function C(e){if(!e||e.device.platform!==`android`)return;let t=e.androidSnapshotFreshness;if(t){if(Date.now()-t.markedAt>2500){delete e.androidSnapshotFreshness;return}return t}}function w(e){!e||e.device.platform!==`android`||delete e.androidSnapshotFreshness}async function st(e,t){return it({capture:e.capture,classify:n=>tt({snapshot:n.snapshot,rawNodeCount:n.annotations.analysis?.rawNodeCount},t,{interactiveOnly:e.interactiveOnly,mode:e.androidFreshnessMode}),window:t,retry:{retryBudgetMs:1500,delaysMs:Qe},onTrustworthyCapture:()=>w(e.session)})}function ct(e,t){return`${[e,...t].join(` `).trim()} produced no visible change: the tree still matches its pre-gesture state. Either the container is already at its edge, or it ignores synthesized scrolls — a raw drag moves such lists: swipe x1 y1 x2 y2 (start inside the list).`}function lt(e,t){return t?{...e,warnings:[...e.warnings??[],ct(t.action,t.positionals)]}:e}const ut=`activity.launchConsole.launchArgs.clearAppState.verbose.iosXctestrunFile.iosXctestDerivedDataPath.iosXctestEnvDir.snapshotInteractiveOnly.snapshotPreferredBackend.snapshotDepth.snapshotScope.snapshotRaw.snapshotCustomActions.snapshotIncludeHiddenContentHints.count.intervalMs.delayMs.durationMs.holdMs.jitterPx.pixels.until.doubleTap.backMode.pauseMs.pattern`.split(`.`);function dt(e){return Object.fromEntries(ut.map(t=>[t,e?.[t]]))}function T(e,t,n,r,i,a){return{requestId:i??Te().requestId,appBundleId:n,runnerLeaseContext:ke({meta:a}),logPath:e,traceLogPath:r,...dt(t),screenshotCaptureBackend:t?.maestro?.screenshotCaptureBackend,...o(t),clickButton:g(t)}}function ft(e){return e?.interactionOutcome?.retryOnNoChange===!0}function pt(e){let{session:t,command:n,positionals:r,flags:i,preSnapshot:a}=e;if(!ft(i)||!F(t))return;let o=xt(n);if(!o||!Et(r))return;let s=A(a?.nodes??[]);s.length!==0&&(t.pendingInteractionOutcome={action:n,command:o,positionals:r,flags:k(i),markedAt:Date.now(),attemptsRemaining:2,preSignature:s})}function mt(e){let t=e?.pendingInteractionOutcome;if(!(!e||!t)){if(!F(e)){E(e);return}if(Date.now()-t.markedAt>3e4){E(e);return}return t}}function E(e){e?.pendingInteractionOutcome&&(e.pendingInteractionOutcome=void 0)}async function D(e){let{pending:t,snapshot:n}=e,r=j(t.preSignature,A(n.nodes));if(r!==`unchanged`||t.attemptsRemaining<=0)return{retried:!1,change:r};let i=e.retryTap,a=i?I(t.positionals):void 0;if(!i||!a)return O(t,i?`unreadable-retry-point`:`device-runtime-unavailable`),{retried:!1,change:r};let o=Date.now();return--t.attemptsRemaining,await ht(i,e)?(_({level:`info`,phase:`interaction_no_change_retry`,data:{action:t.action,attemptsRemaining:t.attemptsRemaining,durationMs:Date.now()-o}}),{retried:!0,change:r}):(O(t,`retry-tap-unavailable`),{retried:!1,change:r})}async function ht(e,t){let{session:n,pending:r}=t,i=I(r.positionals);if(!i)return!1;try{return await e({device:n.device,point:i,context:{...T(t.logPath,r.flags,n.appBundleId,n.trace?.outPath),surface:n.surface}})}catch{return!1}}function O(e,t){_({level:`info`,phase:`interaction_no_change_retry_skipped`,data:{action:e.action,attemptsRemaining:e.attemptsRemaining,reason:t}})}function gt(e){_({level:e.attempts>0?`info`:`debug`,phase:`interaction_settled`,data:{action:e.pending.action,change:e.change,attempts:e.attempts,durationMs:Date.now()-e.startedAt}})}function _t(e){_({level:`warn`,phase:`interaction_settle_timeout`,data:{action:e.pending.action,attempts:e.attempts,durationMs:Date.now()-e.startedAt}})}function k(e){if(!e?.interactionOutcome&&!e?.postGestureStabilization)return e;let{interactionOutcome:t,postGestureStabilization:n,...r}=e;return r}function A(e){let t=new Map,n=[],r=he(e);for(let i of e){let e=St(i,t,r);e&&n.push(e)}return n}function j(e,t){return e.length===0||t.length===0?`ambiguous`:N(e,t)?`unchanged`:`changed`}function M(e,t){return Math.abs(e.x-t.x)<=1&&Math.abs(e.y-t.y)<=1&&Math.abs(e.width-t.width)<=1&&Math.abs(e.height-t.height)<=1}function N(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){let r=e[n],i=t[n];if(!r||!i||r.key!==i.key||!M(r,i))return!1}return!0}function vt(e,t){let n=P(e),r=P(t);if(n.size===0||r.size===0)return`ambiguous`;let i=0,a=!1;for(let[e,t]of n){let n=r.get(e);if(!n){a=!0;continue}if(i+=1,!M(t,n))return`changed`}if(i===0)return`ambiguous`;let o=r.size>i;return a&&o?`changed`:`unchanged`}function P(e){let t=new Map;for(let n of e)!n.identity||!n.discriminating||t.has(n.identity)||t.set(n.identity,n);return t}function yt(e,t){let n=e.filter(e=>e.discriminating),r=t.filter(e=>e.discriminating);if(n.length===0||n.length!==r.length)return!1;let i=new Map(r.map(e=>[e.key,e]));for(let e of n){let t=i.get(e.key);if(!t||!M(e,t))return!1}return!0}function bt(e,t){let n=new Map(t.filter(e=>e.discriminating).map(e=>[e.key,e])),r=0,i=0,a=0;for(let t of e){if(!t.discriminating)continue;let e=n.get(t.key);if(!e){r+=1;continue}n.delete(t.key),a+=1,M(t,e)||(i+=1)}return{onlyInBaseline:r,onlyInCurrent:n.size,rectMismatched:i,shared:a}}function F(e){return u(e.device)}function I(e){let t=Number(e[0]),n=Number(e[1]);return Number.isFinite(t)&&Number.isFinite(n)?{x:t,y:n}:void 0}function xt(e){if(e===`click`||e===`press`)return`press`}function St(e,t,n){if(!e.rect||!Dt(e.rect)||Ot(e))return;let r=Tt(e);if(!r)return;let i=t.get(r)??0;t.set(r,i+1);let a=Ct(e);return{key:`${r}|#${i}`,...a?{identity:a}:{},x:Math.round(e.rect.x),y:Math.round(e.rect.y),width:Math.round(e.rect.width),height:Math.round(e.rect.height),discriminating:!wt(e,n)}}function Ct(e){let t=[e.identifier,e.label,e.value].map(e=>typeof e==`string`?e.trim():``).join(`|`);if(t.replaceAll(`|`,``))return`${t}|${e.type??``}`}function wt(e,t){return ee(e)||e.ref!==void 0&&t.has(e.ref)}function Tt(e){let t=[e.identifier,e.label,e.value,e.type,e.role,e.enabled===!1?`disabled`:`enabled`,e.selected===!0?`selected`:`unselected`,e.hittable===!0?`hittable`:`not-hittable`].map(e=>typeof e==`string`?e.trim():``).join(`|`);return t.replaceAll(`|`,``)?t:void 0}function Et(e){return e.length===2&&e.every(e=>Number.isFinite(Number(e)))}function Dt(e){return[e.x,e.y,e.width,e.height].every(e=>Number.isFinite(e))&&e.width>0&&e.height>0}function Ot(e){return`${e.label??``} ${e.identifier??``}`.toLowerCase().includes(`scroll bar`)}const L=3500;function kt(e){let{needsBaselineDistrust:t,baselineSignature:n,quietSignature:r,elapsedMs:i,distrustCapMs:a}=e;return!t||!n?.length||e.classifyBaselineEvidence(n,r)!==`unchanged`?`trust`:i<a?`distrust`:`accept-stale`}async function At(e){let{pending:t,needsBaselineDistrust:n,hooks:r}=e,i=Date.now(),a=1,o=await R(r,e.initial),s=t.baselineSignature,c=t.baselineBackend,l=!1,u=1500;for(;a<2||Date.now()-i<u;){await v(200),a+=1;let e=await R(r);if(r.signaturesStable(o.signature,e.signature)){let d=Date.now()-i;if(s&&c!==e.backend){_({level:`debug`,phase:`post_gesture_snapshot_baseline_rebased`,data:{action:t.action,from:c,to:e.backend,attempts:a}}),s=e.signature,c=e.backend,l=!0,o=e;continue}let f=kt({needsBaselineDistrust:n,baselineSignature:s,quietSignature:e.signature,elapsedMs:d,distrustCapMs:L,classifyBaselineEvidence:r.classifyBaselineEvidence});if(f===`distrust`){u=L,o=e;continue}return jt(f,t.action,a,d),Mt(f,t,e,r,l)}o=e}return _({level:`warn`,phase:`post_gesture_snapshot_stabilization_timeout`,data:{action:t.action,attempts:a,durationMs:Date.now()-i}}),{value:o.value}}async function R(e,t){let n=t??await e.capture();return{value:n,...e.readSurface(n)}}function jt(e,t,n,r){if(e===`accept-stale`){_({level:`warn`,phase:`post_gesture_snapshot_stale_accept`,data:{action:t,attempts:n,durationMs:r,matchedPreGestureBaseline:!0}});return}_({level:n>2?`info`:`debug`,phase:`post_gesture_snapshot_stabilized`,data:{action:t,attempts:n,durationMs:r}})}function Mt(e,t,n,r,i){if(e!==`accept-stale`)return{value:n.value};let a=t.baselineSignature;return a!==void 0&&r.surfacesIdentical(a,n.signature)?{value:n.value,gestureNoEffect:{action:t.action,positionals:t.positionals}}:(_({level:`info`,phase:`post_gesture_no_effect_vetoed`,data:{action:t.action,backend:n.backend,...i?{reason:`baseline_rebased`}:{reason:`surface_divergence`,...a===void 0?{}:r.summarizeDivergence(a,n.signature)}}}),{value:n.value})}function Nt(e){let{session:t,command:n,action:r=n,positionals:i,flags:a,scheduleOutcomeRetry:o=!1,androidFreshnessBaseline:s}=e;o&&pt({session:t,command:n,positionals:i,flags:a,preSnapshot:t.snapshot}),$e(r)&&at(t,r,s??t.snapshot),Pt(t,r,i,a)}function Pt(e,t,n=[],r){if(!W(e.device)||!zt(t,n,r))return;let i=G(e.device)?A(e.snapshot?.nodes??[]):void 0;e.postGestureStabilization={action:t,positionals:n,markedAt:Date.now(),...i?.length?{baselineSignature:i,baselineBackend:U(e.snapshot)}:{}}}function Ft(e){e?.postGestureStabilization&&(e.postGestureStabilization=void 0)}function z(e){return!!e?.postGestureStabilization}async function It(e){let t=mt(e.session);if(t&&e.session)return await Lt({...e,session:e.session},t);if(u(e.device)&&e.session&&z(e.session))return await Rt({...e,session:e.session});let n=C(e.session);if(n&&e.device.platform===`android`){let t=await st(e,n);return{snapshot:t.snapshot,...t.annotations}}}async function Lt(e,t){let n=e.session,r=Date.now(),i=0,a=await B(e,t,await V(e)),o=await D({session:n,pending:t,logPath:e.logPath,snapshot:a.snapshot,retryTap:e.retryTap});for(;o.retried;)i+=1,a=await B(e,t,await V(e)),o=await D({session:n,pending:t,logPath:e.logPath,snapshot:a.snapshot,retryTap:e.retryTap});E(n);let s=await H({session:n,initial:a,capture:async()=>await V(e),readSnapshot:e=>e.snapshot});return a=s.value,o.change!==`ambiguous`&&a.annotations.freshness?.staleAfterRetries!==!0&&w(n),o.change===`unchanged`?_t({pending:t,attempts:i,startedAt:r}):gt({pending:t,change:o.change,attempts:i,startedAt:r}),{snapshot:a.snapshot,...lt(a.annotations,s.gestureNoEffect)}}async function B(e,t,n){let r=n;return j(t.preSignature,A(r.snapshot.nodes))===`unchanged`?(await v(500),r=await V(e),r):r}async function Rt(e){let t=await H({session:e.session,capture:async()=>await V(e),readSnapshot:e=>e.snapshot}),n=t.value;return{snapshot:n.snapshot,...lt(n.annotations,t.gestureNoEffect)}}async function V(e){let t=C(e.session);return t&&e.device.platform===`android`?await st(e,t):await e.capture()}async function H(e){let{session:t,capture:n,readSnapshot:r}=e,i=t?.postGestureStabilization;if(!t||!W(t.device)||!i)return{value:e.initial??await n()};let a=await At({pending:{action:i.action,positionals:i.positionals??[],baselineSignature:i.baselineSignature,baselineBackend:i.baselineBackend},needsBaselineDistrust:G(t.device),initial:e.initial,hooks:{capture:n,readSurface:e=>{let t=r(e);return{signature:A(t.nodes),backend:U(t)}},signaturesStable:N,classifyBaselineEvidence:vt,surfacesIdentical:yt,summarizeDivergence:bt}});return Ft(t),a}function U(e){return e?.comparisonKey??e?.snapshotQuality?.backend}function zt(e,t,n){return n?.postGestureStabilization===!1?!1:n?.postGestureStabilization===!0||e===`swipe`||e===`scroll`||e===`gesture`&&t[0]===`swipe`}function W(e){return u(e)}function G(e){return d(e.platform)}function Bt(e,t={}){let n=t.mode??`action`,{node:r,preActionNodes:i}=e;if(typeof r.index!=`number`)return;let a=ve(i),o=re(K(r),i);if(n===`landmark`&&o.id===void 0&&o.label===void 0)return;let s=_e(r,a,8),c=s.chain,l=q(i,r),u=J(r,a),d=Gt(r),f=+(c.length>0),p=e=>{let t=c.slice(0,e),n=Kt({nodes:i,byIndex:a,node:r,identity:o,ancestry:t,sibling:l,scrollRegion:u});return{candidate:{...o,ancestry:t,sibling:l,viewportOrder:n.viewportOrder,...u?{scrollRegion:u}:{},...d?{rect:d}:{},verification:`verified`},domain:n}};for(let e=c.length;e>=f;--e){let{candidate:t,domain:i}=p(e);if(Ht(t))return t.verification=Vt({node:r,domain:i,mode:n,brokenWalk:s.broken}),t;if(e===f)return Ut(t)}}function Vt(e){return e.brokenWalk?`unverifiable`:e.mode===`landmark`?`verified`:Jt({node:e.node,domain:e.domain})}function Ht(e){return m(p({...e,verification:`unverifiable`}))<=te}function Ut(e){return e.verification=`unverifiable`,m(p(e))>4096&&delete e.rect,e}const K=se;function q(e,t){return ne(e,t)}function J(e,t){let n=Ae(e,t);if(!n)return;let r=K(n);return{role:r.role,...r.id===void 0?r.label===void 0?{}:{label:r.label}:{id:r.id}}}function Wt(e,t){return!e&&!t?!0:!e||!t?!1:ae(e,t)}function Gt(e){let t=e.rect;if(t)return{x:t.x,y:t.y,width:t.width,height:t.height}}function Kt(e){let{nodes:t,byIndex:n,node:r,identity:i,ancestry:a,sibling:o,scrollRegion:s}=e,c=ge(t,n,i,a),l=c.filter(e=>q(t,e)===o),u=c.length>0?c.filter(e=>Wt(J(e,n),s)):void 0,d=u?qt(u):[];return{identitySet:c,siblingMatches:l,regionMembers:u,orderedRegion:d,viewportOrder:Math.max(d.findIndex(e=>e.index===r.index),0)}}function qt(e){return e.map((e,t)=>({node:e,documentOrder:t,center:Ee(e.rect)})).sort((e,t)=>!e.center&&!t.center?e.documentOrder-t.documentOrder:e.center?t.center?e.center.y===t.center.y?e.center.x===t.center.x?e.documentOrder-t.documentOrder:e.center.x-t.center.x:e.center.y-t.center.y:-1:1).map(e=>e.node)}function Jt(e){let{node:t,domain:n}=e,r=t.ref,i=n.identitySet.map(e=>e.ref);return Ne({winnerRef:r,matchedRefs:i,identitySetRefs:i,siblingMatchRefs:n.siblingMatches.map(e=>e.ref),regionMemberRefs:n.regionMembers?.map(e=>e.ref),viewportCandidateRef:n.orderedRegion[n.viewportOrder]?.ref}).outcome}let Y;async function Yt(){if(Y)return Y;let{createAppleSessionObservation:e}=await import(`./session-observation.js`),{listLocalDeviceInventory:t,shouldPropagateDeviceInventoryProbeError:n}=await import(`./device-inventory-context.js`).then(e=>e.t);return Y??=e({listLocalDevices:t,shouldPropagateProbeError:n}),Y}const Xt=Object.freeze({async observeRunnerSession(e){return(await Yt()).observeRunnerSession(e)},async resolveSoleForegroundApp(e){return(await Yt()).resolveSoleForegroundApp(e)}});async function Zt(e,t,n,r){let{queryAppleRunnerSelector:i}=await import(`./runner-operations-facade.js`);return await i(e,t,n,r)}async function X(e){let t=await en(e.inspectFacts)(e.device);for(let n of e.required){let r=t.operations[n];if(!r.available)return{type:`response`,response:e.unavailableResponse?e.unavailableResponse(r):a(`UNSUPPORTED_OPERATION`,`${e.command} is not supported on this device`,void 0,r.hint?{hint:r.hint}:void 0)}}return{type:`admitted`,bind:tn(e.bindDevice)}}async function Qt(e){let t=await X({...e,required:e.use.required});if(t.type===`response`)return t;let n=await t.bind(e.device,e.use);return e.readiness!==void 0&&await Oe(n,e.readiness),{type:`runtime`,runtime:n}}async function $t(e,t){let n=await Qt(e);if(n.type===`response`)return{ok:!1,response:n.response};let r=n.runtime;return{ok:!0,execute:async({dispatchContext:e})=>await t(r,e)}}function en(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime facts inspection is unavailable.`,{reason:`runtime-gateway-missing`})}function tn(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime binding is unavailable.`,{reason:`runtime-gateway-missing`})}function nn(e){let{flags:n,logPath:r,meta:a,session:o,snapshotScope:s}=e,{appBundleId:c,trace:l,surface:u}=o??{},d=e.context??T(r??``,n,c,l?.outPath,a?.requestId,a);return{options:{appBundleId:c,...t(n,i),scope:s,includeRects:e.includeRects,surface:u},execution:Z(d),...e.signal===void 0?{}:{signal:e.signal}}}function Z(e){return{requestId:e.requestId,verbose:e.verbose,logPath:e.logPath,traceLogPath:e.traceLogPath,iosXctestrunFile:e.iosXctestrunFile,iosXctestDerivedDataPath:e.iosXctestDerivedDataPath,iosXctestEnvDir:e.iosXctestEnvDir,runnerLeaseContext:e.runnerLeaseContext}}function rn(e){let t=xe(e);return{...t,capture:Ce(t),selectors:Se(t),interactions:be(t)}}async function an(e){let t=await(await Ie().resolve(e.device,e.runnerContext)).snapshot(e.options);if(!(`stage`in t))return t;let{presentIosSnapshotAcquisition:n}=await import(`./ios-snapshot-runtime.js`);return await n(t,e.options)}function on(e){let t=e?e.textEntryReadiness:void 0,n=dn(t)?{textEntryReadiness:t}:{},r=sn(e);return r?{...n,...r}:n}function sn(e){if(!cn(e))return null;let t=ln(e.target);return t?{verification:`unconfirmed`,requested:e.requested,before:e.before,after:e.after,target:t}:null}function cn(e){return!!(e&&e.verification===`unconfirmed`&&typeof e.requested==`string`&&Q(e.before)&&Q(e.after))}function ln(e){if(!pn(e)||!un(e))return null;let t=fn(e.rect);return t?{resourceId:e.resourceId,className:e.className,packageName:e.packageName,rect:t}:null}function un(e){return Q(e.resourceId)&&Q(e.className)&&Q(e.packageName)}function dn(e){return typeof e==`string`&&je.includes(e)}function Q(e){return e===null||typeof e==`string`}function fn(e){return!pn(e)||![e.x,e.y,e.width,e.height].every(e=>typeof e==`number`)?null:e}function pn(e){return!!e&&typeof e==`object`}async function mn(e){let t={device:e.device,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice},n=ie(e.command,e.requiresCapture),r=await X({command:e.command,required:n.use.required,...e.unavailableResponse?{unavailableResponse:e.unavailableResponse}:{},...t});if(r.type===`response`)return{ok:!1,response:r.response};let i=r.bind;switch(n.kind){case`tap-point`:return{ok:!0,runtime:{kind:`tap`,captured:!1,runtime:await i(e.device,oe)}};case`captured-tap`:return{ok:!0,runtime:{kind:`tap`,captured:!0,runtime:await i(e.device,ue)}};case`long-press-point`:return{ok:!0,runtime:{kind:`long-press`,captured:!1,runtime:await i(e.device,me)}};case`captured-long-press`:return{ok:!0,runtime:{kind:`long-press`,captured:!0,runtime:await i(e.device,pe)}};case`hover-point`:return{ok:!0,runtime:{kind:`hover`,captured:!1,runtime:await i(e.device,ce)}};case`captured-hover`:return{ok:!0,runtime:{kind:`hover`,captured:!0,runtime:await i(e.device,fe)}};case`fill-point`:return{ok:!0,runtime:{kind:`fill`,captured:!1,runtime:await i(e.device,de)}};case`captured-fill`:return{ok:!0,runtime:{kind:`fill`,captured:!0,runtime:await i(e.device,le)}}}}function hn(e,t){let n={execution:Z(t),appBundleId:t.appBundleId},r=e.captured?xn(e.runtime):void 0;switch(e.kind){case`tap`:return gn(e,t,n,r);case`long-press`:return _n(e,n,r);case`hover`:return vn(e,n,r);case`fill`:return yn(e,t,n,r)}}function gn(e,t,n,r){let i=e.captured?e.runtime.operations.tapRef:void 0,a=e.captured?e.runtime.operations.tapElementSelector:void 0;return Object.freeze({captureSnapshot:r,tapPoint:async(r,i={})=>{let a=Sn(i,t),o=await e.runtime.operations.tapPoint({point:r,options:a,...n});return{x:r.x,y:r.y,count:a.count,intervalMs:a.intervalMs,holdMs:a.holdMs,jitterPx:a.jitterPx,doubleTap:a.doubleTap,...a.button===`primary`?{}:{button:a.button},...o??{},...h(Tn(r,a.button))}},tapRef:i?async e=>await i({ref:e,...n}):void 0,tapElementSelector:e.captured&&a?async t=>{let r=await e.runtime.operations.tapElementSelector?.({selector:t,...n}),i=r?.maestroNonHittableCoordinateFallbackUsed===!0;return{selector:t.raw,...r??{},...h(i?`tapped via non-hittable coordinate fallback`:`Tapped ${t.raw}`)}}:void 0})}function _n(e,t,n){return Object.freeze({captureSnapshot:n,longPressPoint:async(n,r)=>{let i=await e.runtime.operations.longPressPoint({point:n,durationMs:r,...t});return{x:n.x,y:n.y,durationMs:r,...i??{},...h(`Long pressed (${n.x}, ${n.y})`)}}})}function vn(e,t,n){let r=e.captured?e.runtime.operations.hoverRef:void 0;return Object.freeze({captureSnapshot:n,hoverPoint:async n=>{let r=await e.runtime.operations.hoverPoint({point:n,...t});return{x:n.x,y:n.y,...r??{},...h(`Hovered (${n.x}, ${n.y})`)}},hoverRef:r?async e=>await r({ref:e,...t}):void 0})}function yn(e,t,n,r){let i=e.captured?e.runtime.operations.fillRef:void 0,a=e=>we(e??t.delayMs??0,`delay-ms`,0,1e4);return Object.freeze({captureSnapshot:r,fillPoint:async(t,r,i={})=>{let o=a(i.delayMs),s=await e.runtime.operations.fillPoint({point:t,text:r,delayMs:o,allowNonHittableCoordinateFallback:i.allowNonHittableCoordinateFallback===!0,...n});return{x:t.x,y:t.y,text:r,delayMs:o,...bn(s)?{maestroNonHittableCoordinateFallbackUsed:!0}:{},...on(s),...h(`Filled ${Array.from(r).length} chars`)}},fillRef:i?async(e,t,r={})=>await i({ref:e,text:t,delayMs:a(r.delayMs),...n}):void 0})}function bn(e){return typeof e==`object`&&!!e&&`maestroNonHittableCoordinateFallbackUsed`in e&&e.maestroNonHittableCoordinateFallbackUsed===!0}function xn(e){return async t=>await e.operations.captureSnapshot(t)}function Sn(e,t){let n=Cn(e,t);return wn(n),{button:e.button??g(t),...n,surface:e.surface??t.surface}}function Cn(e,t){return{count:$(e.count,t.count,1,`count`,1,200),intervalMs:$(e.intervalMs,t.intervalMs,0,`interval-ms`,0,1e4),holdMs:$(e.holdMs,t.holdMs,0,`hold-ms`,0,1e4),jitterPx:$(e.jitterPx,t.jitterPx,0,`jitter-px`,0,100),doubleTap:e.doubleTap??t.doubleTap??!1}}function $(e,t,n,r,i,a){return we(e??t??n,r,i,a)}function wn(t){if(t.doubleTap&&t.holdMs>0)throw new e(`INVALID_ARGS`,`double-tap cannot be combined with hold-ms`);if(t.doubleTap&&t.jitterPx>0)throw new e(`INVALID_ARGS`,`double-tap cannot be combined with jitter-px`)}function Tn(e,t){return t===`primary`?`Pressed (${e.x}, ${e.y})`:`${t===`secondary`?`Right`:`Middle`} clicked (${e.x}, ${e.y})`}function En(e){let{inspectFacts:t,bindDevice:n}=e;if(!t||!n)return;let r=new Map;return async({device:e,point:i,context:a})=>{let o=r.get(e.id);o||(o=mn({device:e,command:`press`,requiresCapture:!1,inspectFacts:t,bindDevice:n}),r.set(e.id,o));let s=await o;if(!s.ok)return!1;let c=hn(s.runtime,a);return c.tapPoint?(await c.tapPoint(i),!0):!1}}async function Dn(e){let t=await It({session:e.session,device:e.device,logPath:e.logPath,interactiveOnly:e.flags?.snapshotInteractiveOnly===!0,androidFreshnessMode:e.androidFreshnessMode,capture:()=>kn(e),retryTap:En(e)});if(t)return t;let n=await kn(e);return w(e.session),{snapshot:n.snapshot,...n.annotations}}async function On(e){if(e.captureData)return await e.captureData();let{device:n,session:r,logPath:a}=e,o=T(a,An(e),r?.appBundleId,r?.trace?.outPath);return await an({device:n,runnerContext:{requestId:o.requestId,signal:e.signal,appBundleId:o.appBundleId,verbose:o.verbose,logPath:o.logPath,traceLogPath:o.traceLogPath,iosXctestrunFile:o.iosXctestrunFile,iosXctestDerivedDataPath:o.iosXctestDerivedDataPath,iosXctestEnvDir:o.iosXctestEnvDir,runnerLeaseContext:o.runnerLeaseContext},options:{appBundleId:o.appBundleId,signal:e.signal,...t(o,i),includeRects:e.includeRects,surface:r?.surface}})}async function kn(e){let t=Date.now(),n=await On(e);c(e.session,{durationMs:Date.now()-t,backend:n.backend,platform:f(e.device)});let r=s(n),i=l(n,De(n,An(e)));return r.androidSnapshot?.systemSurfaceOnly===!0&&(i.systemSurfaceOnly=!0),{data:n,snapshot:i,annotations:r}}function An(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function jn(e,t){if(!e||!e.trim().startsWith(`@`))return{ok:!0,scope:e};if(!t?.snapshot)return a(`INVALID_ARGS`,`Ref scope requires an existing snapshot in session.`);let i=r(e.trim());if(!i)return a(`INVALID_ARGS`,`Invalid ref scope: ${e}`);let o=[t.snapshot,...t.snapshotScopeSource?[t.snapshotScopeSource]:[]],s;for(let e of o){let t=n(e.nodes,i);if(s=t?ye(t,e.nodes):void 0,s)break}return s?{ok:!0,scope:s}:a(`COMMAND_FAILED`,`Ref ${e} not found or has no label`)}function Mn(e,t,n={}){if(!e)return;let r=Ve(e);return{name:t,appBundleId:e.appBundleId,appName:e.appName,...n.includeSnapshot===!0?{snapshot:e.snapshot,...r&&n.omitRefFrameSnapshot!==!0?{refFrameSnapshot:r}:{}}:{},metadata:{surface:e.surface,...n.metadata??{}}}}function Nn(e){return{get:t=>t===e.sessionName?Mn(e.getSession(),e.sessionName,e.recordOptions):void 0,set:t=>{if(t.name!==e.sessionName){_({level:`warn`,phase:`runtime_session_write_skipped`,data:{expected:e.sessionName,received:t.name}});return}e.setRecord(t)}}}function Pn(e,t){e.snapshot!==t&&(e.snapshotGeneration=In(e.snapshotGeneration)),e.snapshot=t,e.snapshotScopeSource=void 0,t.comparisonSafe===!0&&(e.lastComparisonSafeSnapshot=t)}function Fn(e,t){e.snapshotScopeSource=t.scopeSource,e.snapshotGeneration=t.keptCurrentSnapshot?t.previousGeneration:In(t.previousGeneration)}function In(e){return e===void 0?Me(1e5,1e6):e+1}function Ln(e){let t=e.startsWith(`@`)?e.slice(1):e,n=t.indexOf(`~`);return n===-1?t:t.slice(0,n)}function Rn(e,t){let n=new Set;for(let e of t){let t=Ln(e);t.length>0&&n.add(t)}n.size!==0&&Ke(e,n)}function zn(e,t){if(t?.diff)return Rn(e,Bn(t)),e.snapshotGeneration}function Bn(e){let t=[];for(let n of e.diff?.lines??[])n.ref&&t.push(n.ref);for(let n of e.refs??[])t.push(n.ref);for(let n of e.tail??[])t.push(n.ref);return t}function Vn(e){return`Ref @${e.ref.startsWith(`@`)?e.ref.slice(1):e.ref} was minted from snapshot s${e.mintedGeneration} but the session's ref frame is now s${e.currentFrameEpoch} — re-run snapshot -i.`}function Hn(e){let{session:t,ref:n,mintedGeneration:r}=e;if(t&&Je(t)===`expired`)return`The UI may have changed since these refs were issued, so they no longer represent current device state. Take a new snapshot before relying on or interacting with them.`;if(r!==void 0){let e=t?x(t)??0:0;if(r!==e)return Vn({ref:n,mintedGeneration:r,currentFrameEpoch:e})}}export{C as A,Bt as C,Nt as D,z as E,b as F,Fe as I,Ne as L,He as M,Xe as N,k as O,We as P,q as S,Wt as T,$t as _,Fn as a,K as b,On as c,mn as d,rn as f,Qt as g,X as h,Pn as i,Ge as j,T as k,jn as l,Z as m,Rn as n,Nn as o,nn as p,Hn as r,Dn as s,zn as t,hn as u,Xt as v,qt as w,J as x,Zt as y};
|
|
1
|
+
import{D as e,S as t,_ as n,b as r,f as i,o as a}from"./sdk-contracts.js";import{l as o}from"./capture.js";import{r as s}from"./snapshot-capture-annotations.js";import{r as c}from"./snapshot-diagnostics.js";import{f as l}from"./android-input-ownership.js";import{b as u,l as d,p as f}from"./sdk-device.js";import{Ar as p,Bt as ee,Kn as te,Tt as ne,Vn as re,Wt as ie,Yn as ae,Zn as oe,ct as se,dt as ce,ht as le,ir as ue,lt as de,nr as fe,qn as pe,ut as me,xt as he}from"./sdk-batch.js";import{A as ge,F as _e,N as ve,P as ye,T as be,a as xe,g as Se,o as Ce,t as we,x as m}from"./runtime.js";import{r as h}from"./success-text.js";import{i as g}from"./click-button.js";import{a as Te,r as _}from"./diagnostics.js";import{t as v}from"./timeouts.js";import"./diagnostics2.js";import"./retry.js";import{i as Ee}from"./rect-center.js";import{t as De}from"./snapshot-state.js";import{n as Oe}from"./request-runtime-binding.js";import{i as ke}from"./lease-context.js";import{o as Ae}from"./tree.js";import{t as je}from"./interactor-types.js";import{randomInt as Me}from"node:crypto";function y(e){return e.matchedRefs.length===0?{path:2,outcome:`unverifiable`,reason:`selector-miss`}:e.identitySetRefs.length===0?{path:3,outcome:`unverifiable`,reason:`identity-set-empty`}:e.identitySetRefs.length===1?e.identitySetRefs[0]===e.winnerRef?{path:4,outcome:`verified`}:{path:5,outcome:`unverifiable`,reason:`unique-but-wrong`}:e.siblingMatchRefs.length===1?e.siblingMatchRefs[0]===e.winnerRef?{path:6,outcome:`verified`}:{path:6,outcome:`unverifiable`,reason:`signal-isolated-wrong`}:e.regionMemberRefs!==void 0&&e.regionMemberRefs.length>0&&e.viewportCandidateRef!==void 0?e.viewportCandidateRef===e.winnerRef?{path:6,outcome:`verified`}:{path:6,outcome:`unverifiable`,reason:`signal-isolated-wrong`}:{path:6,outcome:`unverifiable`,reason:`no-signal-isolation`}}let Ne={resolve:async()=>{throw new e(`COMMAND_FAILED`,`Interactor resolution is not composed for this process.`,{reason:`interactor-resolution-missing`})}};function Pe(e){Ne=e}function Fe(){return Ne}var b=class e{#e;constructor(e){this.#e=e}get state(){return this.#e.state}get scope(){return this.#e.scope}get tree(){return this.#e.tree}get generation(){return this.#e.generation}static expire(t){return t.#e.state===`expired`?t:new e({...t.#e,state:`expired`})}};const Ie=new b({state:`active`,scope:`all`,tree:void 0,generation:void 0});function Le(e){return new b({state:`active`,...e})}function Re(e){return b.expire(e)}const ze=new WeakMap;function x(e){return e.refFrame??Ie}function S(e){return x(e).generation??e.snapshotGeneration}function Be(e){return x(e).tree}function Ve(e){He(e),e.refFrame=Re(x(e)),e.snapshotScopeSource=void 0}function He(e){let t=C(e)+1;return ze.set(e,t),t}function C(e){return ze.get(e)??0}function Ue(e){w(e,`all`)}function We(e,t){w(e,t)}function w(e,t){e.refFrame=Le({scope:t,tree:e.snapshot,generation:e.snapshotGeneration})}function Ge(e){return x(e).state}function Ke(e){return x(e).scope}function qe(e){let t=e.ref.startsWith(`@`)?e.ref.slice(1):e.ref;return{admission:Je({session:e.session,refBody:t,mintedGeneration:e.mintedGeneration}),scope:Ke(e.session),currentGeneration:S(e.session)}}function Je(e){let{session:t,refBody:n,mintedGeneration:r}=e;if(Ge(t)===`expired`)return{admitted:!1,reason:`ref_frame_expired`};if(r!==void 0&&r!==S(t))return{admitted:!1,reason:`ref_generation_mismatch`};let i=Ke(t);if(i!==`all`){if(r===void 0)return{admitted:!1,reason:`plain_ref_requires_complete_frame`};if(!i.has(n))return{admitted:!1,reason:`ref_not_issued`}}return{admitted:!0}}const Ye=[250,400,600];function Xe(e){return e===`press`||e===`click`||e===`back`||e===`open`}function Ze(e){return e.map(e=>[e.depth??0,e.type??``,e.label??``,e.value??``,e.identifier??``,e.enabled===!1?`disabled`:`enabled`,e.hittable===!0?`hittable`:`not-hittable`].join(`|`))}function Qe(e,t){return e<12?!1:t<=Math.floor(e*.2)}function $e(e,t,n){return n.interactiveOnly&&e.snapshot.nodes.length===0&&e.rawNodeCount!==void 0&&e.rawNodeCount>=12?`empty-interactive`:n.mode===`ref-refresh`?null:Qe(t.baselineCount,e.snapshot.nodes.length)?et(e.snapshot)?null:`sharp-drop`:t.routeComparable&&Xe(t.action)&&tt(t.baselineSignatures,e.snapshot.nodes)?`stuck-route`:null}function et(e){return e.nodes.some(e=>e.hittable===!0||!!e.label?.trim()||!!e.value?.trim()||!!e.identifier?.trim())}function tt(e,t){if(!e||e.length===0)return!1;let n=Math.max(e.length,t.length);if(n<12)return!1;let r=Ze(t),i=Math.min(e.length,r.length),a=0;for(let t=0;t<i;t+=1)e[t]===r[t]&&(a+=1);let o=Math.max(0,r.length-e.length),s=Math.max(0,e.length-r.length),c=Math.max(3,Math.floor(n*.15));return a>=Math.floor(n*.9)&&o<=c&&s<=c}async function nt(e){let t=e.window.markedAt+e.retry.retryBudgetMs,n=await e.capture(),r=e.classify(n),i=0;for(let a of e.retry.delaysMs){if(!r)break;let o=t-Date.now();if(o<=0)break;await v(Math.min(a,o)),n=await e.capture(),i+=1,r=e.classify(n)}r||e.onTrustworthyCapture?.();let a=i>0||r?{action:e.window.action,retryCount:i,staleAfterRetries:!!r,reason:r??void 0}:void 0;return{...n,annotations:{...n.annotations,...s({freshness:a})}}}function rt(e,t,n=e.snapshot){if(e.device.platform!==`android`)return;let r=it(e,n),i=r?.comparisonSafe===!0;e.androidSnapshotFreshness={action:t,markedAt:Date.now(),baselineCount:(r??n)?.nodes.length??0,baselineSignatures:i?Ze(r?.nodes??[]):void 0,routeComparable:i}}function it(e,t){if(t?.comparisonSafe===!0)return t;let n=e.lastComparisonSafeSnapshot;return!n||n.comparisonSafe!==!0?t:Date.now()-n.createdAt<=5e3?n:t}function T(e){if(!e||e.device.platform!==`android`)return;let t=e.androidSnapshotFreshness;if(t){if(Date.now()-t.markedAt>2500){delete e.androidSnapshotFreshness;return}return t}}function E(e){!e||e.device.platform!==`android`||delete e.androidSnapshotFreshness}async function at(e,t){return nt({capture:e.capture,classify:n=>$e({snapshot:n.snapshot,rawNodeCount:n.annotations.analysis?.rawNodeCount},t,{interactiveOnly:e.interactiveOnly,mode:e.androidFreshnessMode}),window:t,retry:{retryBudgetMs:1500,delaysMs:Ye},onTrustworthyCapture:()=>E(e.session)})}function ot(e,t){return`${[e,...t].join(` `).trim()} produced no visible change: the tree still matches its pre-gesture state. Either the container is already at its edge, or it ignores synthesized scrolls — a raw drag moves such lists: swipe x1 y1 x2 y2 (start inside the list).`}function st(e,t){return t?{...e,warnings:[...e.warnings??[],ot(t.action,t.positionals)]}:e}const ct=`activity.launchConsole.launchArgs.clearAppState.verbose.iosXctestrunFile.iosXctestDerivedDataPath.iosXctestEnvDir.snapshotInteractiveOnly.snapshotPreferredBackend.snapshotDepth.snapshotScope.snapshotRaw.snapshotCustomActions.snapshotIncludeHiddenContentHints.count.intervalMs.delayMs.durationMs.holdMs.jitterPx.pixels.until.doubleTap.backMode.pauseMs.pattern`.split(`.`);function lt(e){return Object.fromEntries(ct.map(t=>[t,e?.[t]]))}function D(e,t,n,r,i,a){return{requestId:i??Te().requestId,appBundleId:n,runnerLeaseContext:ke({meta:a}),logPath:e,traceLogPath:r,...lt(t),screenshotCaptureBackend:t?.maestro?.screenshotCaptureBackend,...o(t),clickButton:g(t)}}function ut(e){return e?.interactionOutcome?.retryOnNoChange===!0}function dt(e){let{session:t,command:n,positionals:r,flags:i,preSnapshot:a}=e;if(!ut(i)||!L(t))return;let o=yt(n);if(!o||!wt(r))return;let s=M(a?.nodes??[]);s.length!==0&&(t.pendingInteractionOutcome={action:n,command:o,positionals:r,flags:j(i),markedAt:Date.now(),attemptsRemaining:2,preSignature:s})}function ft(e){let t=e?.pendingInteractionOutcome;if(!(!e||!t)){if(!L(e)){O(e);return}if(Date.now()-t.markedAt>3e4){O(e);return}return t}}function O(e){e?.pendingInteractionOutcome&&(e.pendingInteractionOutcome=void 0)}async function k(e){let{pending:t,snapshot:n}=e,r=N(t.preSignature,M(n.nodes));if(r!==`unchanged`||t.attemptsRemaining<=0)return{retried:!1,change:r};let i=e.retryTap,a=i?R(t.positionals):void 0;if(!i||!a)return A(t,i?`unreadable-retry-point`:`device-runtime-unavailable`),{retried:!1,change:r};let o=Date.now();return--t.attemptsRemaining,await pt(i,e)?(_({level:`info`,phase:`interaction_no_change_retry`,data:{action:t.action,attemptsRemaining:t.attemptsRemaining,durationMs:Date.now()-o}}),{retried:!0,change:r}):(A(t,`retry-tap-unavailable`),{retried:!1,change:r})}async function pt(e,t){let{session:n,pending:r}=t,i=R(r.positionals);if(!i)return!1;try{return await e({device:n.device,point:i,context:{...D(t.logPath,r.flags,n.appBundleId,n.trace?.outPath),surface:n.surface}})}catch{return!1}}function A(e,t){_({level:`info`,phase:`interaction_no_change_retry_skipped`,data:{action:e.action,attemptsRemaining:e.attemptsRemaining,reason:t}})}function mt(e){_({level:e.attempts>0?`info`:`debug`,phase:`interaction_settled`,data:{action:e.pending.action,change:e.change,attempts:e.attempts,durationMs:Date.now()-e.startedAt}})}function ht(e){_({level:`warn`,phase:`interaction_settle_timeout`,data:{action:e.pending.action,attempts:e.attempts,durationMs:Date.now()-e.startedAt}})}function j(e){if(!e?.interactionOutcome&&!e?.postGestureStabilization)return e;let{interactionOutcome:t,postGestureStabilization:n,...r}=e;return r}function M(e){let t=new Map,n=[],r=ge(e);for(let i of e){let e=bt(i,t,r);e&&n.push(e)}return n}function N(e,t){return e.length===0||t.length===0?`ambiguous`:F(e,t)?`unchanged`:`changed`}function P(e,t){return Math.abs(e.x-t.x)<=1&&Math.abs(e.y-t.y)<=1&&Math.abs(e.width-t.width)<=1&&Math.abs(e.height-t.height)<=1}function F(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){let r=e[n],i=t[n];if(!r||!i||r.key!==i.key||!P(r,i))return!1}return!0}function gt(e,t){let n=I(e),r=I(t);if(n.size===0||r.size===0)return`ambiguous`;let i=0,a=!1;for(let[e,t]of n){let n=r.get(e);if(!n){a=!0;continue}if(i+=1,!P(t,n))return`changed`}if(i===0)return`ambiguous`;let o=r.size>i;return a&&o?`changed`:`unchanged`}function I(e){let t=new Map;for(let n of e)!n.identity||!n.discriminating||t.has(n.identity)||t.set(n.identity,n);return t}function _t(e,t){let n=e.filter(e=>e.discriminating),r=t.filter(e=>e.discriminating);if(n.length===0||n.length!==r.length)return!1;let i=new Map(r.map(e=>[e.key,e]));for(let e of n){let t=i.get(e.key);if(!t||!P(e,t))return!1}return!0}function vt(e,t){let n=new Map(t.filter(e=>e.discriminating).map(e=>[e.key,e])),r=0,i=0,a=0;for(let t of e){if(!t.discriminating)continue;let e=n.get(t.key);if(!e){r+=1;continue}n.delete(t.key),a+=1,P(t,e)||(i+=1)}return{onlyInBaseline:r,onlyInCurrent:n.size,rectMismatched:i,shared:a}}function L(e){return f(e.device)}function R(e){let t=Number(e[0]),n=Number(e[1]);return Number.isFinite(t)&&Number.isFinite(n)?{x:t,y:n}:void 0}function yt(e){if(e===`click`||e===`press`)return`press`}function bt(e,t,n){if(!e.rect||!Tt(e.rect)||Et(e))return;let r=Ct(e);if(!r)return;let i=t.get(r)??0;t.set(r,i+1);let a=xt(e);return{key:`${r}|#${i}`,...a?{identity:a}:{},x:Math.round(e.rect.x),y:Math.round(e.rect.y),width:Math.round(e.rect.width),height:Math.round(e.rect.height),discriminating:!St(e,n)}}function xt(e){let t=[e.identifier,e.label,e.value].map(e=>typeof e==`string`?e.trim():``).join(`|`);if(t.replaceAll(`|`,``))return`${t}|${e.type??``}`}function St(e,t){return p(e)||e.ref!==void 0&&t.has(e.ref)}function Ct(e){let t=[e.identifier,e.label,e.value,e.type,e.role,e.enabled===!1?`disabled`:`enabled`,e.selected===!0?`selected`:`unselected`,e.hittable===!0?`hittable`:`not-hittable`].map(e=>typeof e==`string`?e.trim():``).join(`|`);return t.replaceAll(`|`,``)?t:void 0}function wt(e){return e.length===2&&e.every(e=>Number.isFinite(Number(e)))}function Tt(e){return[e.x,e.y,e.width,e.height].every(e=>Number.isFinite(e))&&e.width>0&&e.height>0}function Et(e){return`${e.label??``} ${e.identifier??``}`.toLowerCase().includes(`scroll bar`)}const z=3500;function Dt(e){let{needsBaselineDistrust:t,baselineSignature:n,quietSignature:r,elapsedMs:i,distrustCapMs:a}=e;return!t||!n?.length||e.classifyBaselineEvidence(n,r)!==`unchanged`?`trust`:i<a?`distrust`:`accept-stale`}async function Ot(e){let{pending:t,needsBaselineDistrust:n,hooks:r}=e,i=Date.now(),a=1,o=await B(r,e.initial),s=t.baselineSignature,c=t.baselineBackend,l=!1,u=1500;for(;a<2||Date.now()-i<u;){await v(200),a+=1;let e=await B(r);if(r.signaturesStable(o.signature,e.signature)){let d=Date.now()-i;if(s&&c!==e.backend){_({level:`debug`,phase:`post_gesture_snapshot_baseline_rebased`,data:{action:t.action,from:c,to:e.backend,attempts:a}}),s=e.signature,c=e.backend,l=!0,o=e;continue}let f=Dt({needsBaselineDistrust:n,baselineSignature:s,quietSignature:e.signature,elapsedMs:d,distrustCapMs:z,classifyBaselineEvidence:r.classifyBaselineEvidence});if(f===`distrust`){u=z,o=e;continue}return kt(f,t.action,a,d),At(f,t,e,r,l)}o=e}return _({level:`warn`,phase:`post_gesture_snapshot_stabilization_timeout`,data:{action:t.action,attempts:a,durationMs:Date.now()-i}}),{value:o.value}}async function B(e,t){let n=t??await e.capture();return{value:n,...e.readSurface(n)}}function kt(e,t,n,r){if(e===`accept-stale`){_({level:`warn`,phase:`post_gesture_snapshot_stale_accept`,data:{action:t,attempts:n,durationMs:r,matchedPreGestureBaseline:!0}});return}_({level:n>2?`info`:`debug`,phase:`post_gesture_snapshot_stabilized`,data:{action:t,attempts:n,durationMs:r}})}function At(e,t,n,r,i){if(e!==`accept-stale`)return{value:n.value};let a=t.baselineSignature;return a!==void 0&&r.surfacesIdentical(a,n.signature)?{value:n.value,gestureNoEffect:{action:t.action,positionals:t.positionals}}:(_({level:`info`,phase:`post_gesture_no_effect_vetoed`,data:{action:t.action,backend:n.backend,...i?{reason:`baseline_rebased`}:{reason:`surface_divergence`,...a===void 0?{}:r.summarizeDivergence(a,n.signature)}}}),{value:n.value})}function jt(e){let{session:t,command:n,action:r=n,positionals:i,flags:a,scheduleOutcomeRetry:o=!1,androidFreshnessBaseline:s}=e;o&&dt({session:t,command:n,positionals:i,flags:a,preSnapshot:t.snapshot}),Xe(r)&&rt(t,r,s??t.snapshot),Mt(t,r,i,a)}function Mt(e,t,n=[],r){if(!Rt(e.device)||!Lt(t,n,r))return;let i=zt(e.device)?M(e.snapshot?.nodes??[]):void 0;e.postGestureStabilization={action:t,positionals:n,markedAt:Date.now(),...i?.length?{baselineSignature:i,baselineBackend:G(e.snapshot)}:{}}}function Nt(e){e?.postGestureStabilization&&(e.postGestureStabilization=void 0)}function V(e){return!!e?.postGestureStabilization}async function Pt(e){let t=ft(e.session);if(t&&e.session)return await Ft({...e,session:e.session},t);if(f(e.device)&&e.session&&V(e.session))return await It({...e,session:e.session});let n=T(e.session);if(n&&e.device.platform===`android`){let t=await at(e,n);return{snapshot:t.snapshot,...t.annotations}}}async function Ft(e,t){let n=e.session,r=Date.now(),i=0,a=await H(e,t,await U(e)),o=await k({session:n,pending:t,logPath:e.logPath,snapshot:a.snapshot,retryTap:e.retryTap});for(;o.retried;)i+=1,a=await H(e,t,await U(e)),o=await k({session:n,pending:t,logPath:e.logPath,snapshot:a.snapshot,retryTap:e.retryTap});O(n);let s=await W({session:n,initial:a,capture:async()=>await U(e),readSnapshot:e=>e.snapshot});return a=s.value,o.change!==`ambiguous`&&a.annotations.freshness?.staleAfterRetries!==!0&&E(n),o.change===`unchanged`?ht({pending:t,attempts:i,startedAt:r}):mt({pending:t,change:o.change,attempts:i,startedAt:r}),{snapshot:a.snapshot,...st(a.annotations,s.gestureNoEffect)}}async function H(e,t,n){let r=n;return N(t.preSignature,M(r.snapshot.nodes))===`unchanged`?(await v(500),r=await U(e),r):r}async function It(e){let t=await W({session:e.session,capture:async()=>await U(e),readSnapshot:e=>e.snapshot}),n=t.value;return{snapshot:n.snapshot,...st(n.annotations,t.gestureNoEffect)}}async function U(e){let t=T(e.session);return t&&e.device.platform===`android`?await at(e,t):await e.capture()}async function W(e){let{session:t,capture:n,readSnapshot:r}=e,i=t?.postGestureStabilization;if(!t||!Rt(t.device)||!i)return{value:e.initial??await n()};let a=await Ot({pending:{action:i.action,positionals:i.positionals??[],baselineSignature:i.baselineSignature,baselineBackend:i.baselineBackend},needsBaselineDistrust:zt(t.device),initial:e.initial,hooks:{capture:n,readSurface:e=>{let t=r(e);return{signature:M(t.nodes),backend:G(t)}},signaturesStable:F,classifyBaselineEvidence:gt,surfacesIdentical:_t,summarizeDivergence:vt}});return Nt(t),a}function G(e){return e?.comparisonKey??e?.snapshotQuality?.backend}function Lt(e,t,n){return n?.postGestureStabilization===!1?!1:n?.postGestureStabilization===!0||e===`swipe`||e===`scroll`||e===`gesture`&&t[0]===`swipe`}function Rt(e){return f(e)}function zt(e){return d(e.platform)}function Bt(e,t={}){let n=t.mode??`action`,{node:r,preActionNodes:i}=e;if(typeof r.index!=`number`)return;let a=ye(i),o=re(K(r),i);if(n===`landmark`&&o.id===void 0&&o.label===void 0)return;let s=ve(r,a,8),c=s.chain,l=q(i,r),u=J(r,a),d=Gt(r),f=+(c.length>0),p=e=>{let t=c.slice(0,e),n=Kt({nodes:i,byIndex:a,node:r,identity:o,ancestry:t,sibling:l,scrollRegion:u});return{candidate:{...o,ancestry:t,sibling:l,viewportOrder:n.viewportOrder,...u?{scrollRegion:u}:{},...d?{rect:d}:{},verification:`verified`},domain:n}};for(let e=c.length;e>=f;--e){let{candidate:t,domain:i}=p(e);if(Ht(t))return t.verification=Vt({node:r,domain:i,mode:n,brokenWalk:s.broken}),t;if(e===f)return Ut(t)}}function Vt(e){return e.brokenWalk?`unverifiable`:e.mode===`landmark`?`verified`:Jt({node:e.node,domain:e.domain})}function Ht(e){return ue(fe({...e,verification:`unverifiable`}))<=oe}function Ut(e){return e.verification=`unverifiable`,ue(fe(e))>4096&&delete e.rect,e}const K=pe;function q(e,t){return ae(e,t)}function J(e,t){let n=Ae(e,t);if(!n)return;let r=K(n);return{role:r.role,...r.id===void 0?r.label===void 0?{}:{label:r.label}:{id:r.id}}}function Wt(e,t){return!e&&!t?!0:!e||!t?!1:te(e,t)}function Gt(e){let t=e.rect;if(t)return{x:t.x,y:t.y,width:t.width,height:t.height}}function Kt(e){let{nodes:t,byIndex:n,node:r,identity:i,ancestry:a,sibling:o,scrollRegion:s}=e,c=_e(t,n,i,a),l=c.filter(e=>q(t,e)===o),u=c.length>0?c.filter(e=>Wt(J(e,n),s)):void 0,d=u?qt(u):[];return{identitySet:c,siblingMatches:l,regionMembers:u,orderedRegion:d,viewportOrder:Math.max(d.findIndex(e=>e.index===r.index),0)}}function qt(e){return e.map((e,t)=>({node:e,documentOrder:t,center:Ee(e.rect)})).sort((e,t)=>!e.center&&!t.center?e.documentOrder-t.documentOrder:e.center?t.center?e.center.y===t.center.y?e.center.x===t.center.x?e.documentOrder-t.documentOrder:e.center.x-t.center.x:e.center.y-t.center.y:-1:1).map(e=>e.node)}function Jt(e){let{node:t,domain:n}=e,r=t.ref,i=n.identitySet.map(e=>e.ref);return y({winnerRef:r,matchedRefs:i,identitySetRefs:i,siblingMatchRefs:n.siblingMatches.map(e=>e.ref),regionMemberRefs:n.regionMembers?.map(e=>e.ref),viewportCandidateRef:n.orderedRegion[n.viewportOrder]?.ref}).outcome}let Y;async function Yt(){if(Y)return Y;let{createAppleSessionObservation:e}=await import(`./session-observation.js`),{listLocalDeviceInventory:t,shouldPropagateDeviceInventoryProbeError:n}=await import(`./device-inventory-context.js`).then(e=>e.t);return Y??=e({listLocalDevices:t,shouldPropagateProbeError:n}),Y}const Xt=Object.freeze({async observeRunnerSession(e){return(await Yt()).observeRunnerSession(e)},async resolveSoleForegroundApp(e){return(await Yt()).resolveSoleForegroundApp(e)}});async function Zt(e,t,n,r){let{queryAppleRunnerSelector:i}=await import(`./runner-operations-facade.js`);return await i(e,t,n,r)}async function X(e){let t=await en(e.inspectFacts)(e.device);for(let n of e.required){let r=t.operations[n];if(!r.available)return{type:`response`,response:e.unavailableResponse?e.unavailableResponse(r):a(`UNSUPPORTED_OPERATION`,`${e.command} is not supported on this device`,void 0,r.hint?{hint:r.hint}:void 0)}}return{type:`admitted`,bind:tn(e.bindDevice)}}async function Qt(e){let t=await X({...e,required:e.use.required});if(t.type===`response`)return t;let n=await t.bind(e.device,e.use);return e.readiness!==void 0&&await Oe(n,e.readiness),{type:`runtime`,runtime:n}}async function $t(e,t){let n=await Qt(e);if(n.type===`response`)return{ok:!1,response:n.response};let r=n.runtime;return{ok:!0,execute:async({dispatchContext:e})=>await t(r,e)}}function en(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime facts inspection is unavailable.`,{reason:`runtime-gateway-missing`})}function tn(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime binding is unavailable.`,{reason:`runtime-gateway-missing`})}function nn(e){let{flags:n,logPath:r,meta:a,session:o,snapshotScope:s}=e,{appBundleId:c,trace:l,surface:u}=o??{},d=e.context??D(r??``,n,c,l?.outPath,a?.requestId,a);return{options:{appBundleId:c,...t(n,i),scope:s,includeRects:e.includeRects,surface:u},execution:Z(d),...e.signal===void 0?{}:{signal:e.signal}}}function Z(e){return{requestId:e.requestId,verbose:e.verbose,logPath:e.logPath,traceLogPath:e.traceLogPath,iosXctestrunFile:e.iosXctestrunFile,iosXctestDerivedDataPath:e.iosXctestDerivedDataPath,iosXctestEnvDir:e.iosXctestEnvDir,runnerLeaseContext:e.runnerLeaseContext}}function rn(e){let t=Se(e);return{...t,capture:we(t),selectors:Ce(t),interactions:xe(t)}}async function an(e){let t=await(await Fe().resolve(e.device,e.runnerContext)).snapshot(e.options);if(!(`stage`in t))return t;let{presentIosSnapshotAcquisition:n}=await import(`./ios-snapshot-runtime.js`);return await n(t,e.options)}function on(e){let t=e?e.textEntryReadiness:void 0,n=dn(t)?{textEntryReadiness:t}:{},r=sn(e);return r?{...n,...r}:n}function sn(e){if(!cn(e))return null;let t=ln(e.target);return t?{verification:`unconfirmed`,requested:e.requested,before:e.before,after:e.after,target:t}:null}function cn(e){return!!(e&&e.verification===`unconfirmed`&&typeof e.requested==`string`&&Q(e.before)&&Q(e.after))}function ln(e){if(!pn(e)||!un(e))return null;let t=fn(e.rect);return t?{resourceId:e.resourceId,className:e.className,packageName:e.packageName,rect:t}:null}function un(e){return Q(e.resourceId)&&Q(e.className)&&Q(e.packageName)}function dn(e){return typeof e==`string`&&je.includes(e)}function Q(e){return e===null||typeof e==`string`}function fn(e){return!pn(e)||![e.x,e.y,e.width,e.height].every(e=>typeof e==`number`)?null:e}function pn(e){return!!e&&typeof e==`object`}async function mn(e){let t={device:e.device,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice},n=ee(e.command,e.requiresCapture),r=await X({command:e.command,required:n.use.required,...e.unavailableResponse?{unavailableResponse:e.unavailableResponse}:{},...t});if(r.type===`response`)return{ok:!1,response:r.response};let i=r.bind;switch(n.kind){case`tap-point`:return{ok:!0,runtime:{kind:`tap`,captured:!1,runtime:await i(e.device,ie)}};case`captured-tap`:return{ok:!0,runtime:{kind:`tap`,captured:!0,runtime:await i(e.device,ce)}};case`long-press-point`:return{ok:!0,runtime:{kind:`long-press`,captured:!1,runtime:await i(e.device,ne)}};case`captured-long-press`:return{ok:!0,runtime:{kind:`long-press`,captured:!0,runtime:await i(e.device,me)}};case`hover-point`:return{ok:!0,runtime:{kind:`hover`,captured:!1,runtime:await i(e.device,he)}};case`captured-hover`:return{ok:!0,runtime:{kind:`hover`,captured:!0,runtime:await i(e.device,de)}};case`fill-point`:return{ok:!0,runtime:{kind:`fill`,captured:!1,runtime:await i(e.device,le)}};case`captured-fill`:return{ok:!0,runtime:{kind:`fill`,captured:!0,runtime:await i(e.device,se)}}}}function hn(e,t){let n={execution:Z(t),appBundleId:t.appBundleId},r=e.captured?xn(e.runtime):void 0;switch(e.kind){case`tap`:return gn(e,t,n,r);case`long-press`:return _n(e,n,r);case`hover`:return vn(e,n,r);case`fill`:return yn(e,t,n,r)}}function gn(e,t,n,r){let i=e.captured?e.runtime.operations.tapRef:void 0,a=e.captured?e.runtime.operations.tapElementSelector:void 0;return Object.freeze({captureSnapshot:r,tapPoint:async(r,i={})=>{let a=Sn(i,t),o=await e.runtime.operations.tapPoint({point:r,options:a,...n});return{x:r.x,y:r.y,count:a.count,intervalMs:a.intervalMs,holdMs:a.holdMs,jitterPx:a.jitterPx,doubleTap:a.doubleTap,...a.button===`primary`?{}:{button:a.button},...o??{},...h(Tn(r,a.button))}},tapRef:i?async e=>await i({ref:e,...n}):void 0,tapElementSelector:e.captured&&a?async t=>{let r=await e.runtime.operations.tapElementSelector?.({selector:t,...n}),i=r?.maestroNonHittableCoordinateFallbackUsed===!0;return{selector:t.raw,...r??{},...h(i?`tapped via non-hittable coordinate fallback`:`Tapped ${t.raw}`)}}:void 0})}function _n(e,t,n){return Object.freeze({captureSnapshot:n,longPressPoint:async(n,r)=>{let i=await e.runtime.operations.longPressPoint({point:n,durationMs:r,...t});return{x:n.x,y:n.y,durationMs:r,...i??{},...h(`Long pressed (${n.x}, ${n.y})`)}}})}function vn(e,t,n){let r=e.captured?e.runtime.operations.hoverRef:void 0;return Object.freeze({captureSnapshot:n,hoverPoint:async n=>{let r=await e.runtime.operations.hoverPoint({point:n,...t});return{x:n.x,y:n.y,...r??{},...h(`Hovered (${n.x}, ${n.y})`)}},hoverRef:r?async e=>await r({ref:e,...t}):void 0})}function yn(e,t,n,r){let i=e.captured?e.runtime.operations.fillRef:void 0,a=e=>m(e??t.delayMs??0,`delay-ms`,0,1e4);return Object.freeze({captureSnapshot:r,fillPoint:async(t,r,i={})=>{let o=a(i.delayMs),s=await e.runtime.operations.fillPoint({point:t,text:r,delayMs:o,allowNonHittableCoordinateFallback:i.allowNonHittableCoordinateFallback===!0,...n});return{x:t.x,y:t.y,text:r,delayMs:o,...bn(s)?{maestroNonHittableCoordinateFallbackUsed:!0}:{},...on(s),...h(`Filled ${Array.from(r).length} chars`)}},fillRef:i?async(e,t,r={})=>await i({ref:e,text:t,delayMs:a(r.delayMs),...n}):void 0})}function bn(e){return typeof e==`object`&&!!e&&`maestroNonHittableCoordinateFallbackUsed`in e&&e.maestroNonHittableCoordinateFallbackUsed===!0}function xn(e){return async t=>await e.operations.captureSnapshot(t)}function Sn(e,t){let n=Cn(e,t);return wn(n),{button:e.button??g(t),...n,surface:e.surface??t.surface}}function Cn(e,t){return{count:$(e.count,t.count,1,`count`,1,200),intervalMs:$(e.intervalMs,t.intervalMs,0,`interval-ms`,0,1e4),holdMs:$(e.holdMs,t.holdMs,0,`hold-ms`,0,1e4),jitterPx:$(e.jitterPx,t.jitterPx,0,`jitter-px`,0,100),doubleTap:e.doubleTap??t.doubleTap??!1}}function $(e,t,n,r,i,a){return m(e??t??n,r,i,a)}function wn(t){if(t.doubleTap&&t.holdMs>0)throw new e(`INVALID_ARGS`,`double-tap cannot be combined with hold-ms`);if(t.doubleTap&&t.jitterPx>0)throw new e(`INVALID_ARGS`,`double-tap cannot be combined with jitter-px`)}function Tn(e,t){return t===`primary`?`Pressed (${e.x}, ${e.y})`:`${t===`secondary`?`Right`:`Middle`} clicked (${e.x}, ${e.y})`}function En(e){let{inspectFacts:t,bindDevice:n}=e;if(!t||!n)return;let r=new Map;return async({device:e,point:i,context:a})=>{let o=r.get(e.id);o||(o=mn({device:e,command:`press`,requiresCapture:!1,inspectFacts:t,bindDevice:n}),r.set(e.id,o));let s=await o;if(!s.ok)return!1;let c=hn(s.runtime,a);return c.tapPoint?(await c.tapPoint(i),!0):!1}}async function Dn(e){let t=await Pt({session:e.session,device:e.device,logPath:e.logPath,interactiveOnly:e.flags?.snapshotInteractiveOnly===!0,androidFreshnessMode:e.androidFreshnessMode,capture:()=>kn(e),retryTap:En(e)});if(t)return t;let n=await kn(e);return E(e.session),{snapshot:n.snapshot,...n.annotations}}async function On(e){if(e.captureData)return await e.captureData();let{device:n,session:r,logPath:a}=e,o=D(a,An(e),r?.appBundleId,r?.trace?.outPath);return await an({device:n,runnerContext:{requestId:o.requestId,signal:e.signal,appBundleId:o.appBundleId,verbose:o.verbose,logPath:o.logPath,traceLogPath:o.traceLogPath,iosXctestrunFile:o.iosXctestrunFile,iosXctestDerivedDataPath:o.iosXctestDerivedDataPath,iosXctestEnvDir:o.iosXctestEnvDir,runnerLeaseContext:o.runnerLeaseContext},options:{appBundleId:o.appBundleId,signal:e.signal,...t(o,i),includeRects:e.includeRects,surface:r?.surface}})}async function kn(e){let t=Date.now(),n=await On(e);c(e.session,{durationMs:Date.now()-t,backend:n.backend,platform:u(e.device)});let r=s(n),i=l(n,De(n,An(e)));return r.androidSnapshot?.systemSurfaceOnly===!0&&(i.systemSurfaceOnly=!0),{data:n,snapshot:i,annotations:r}}function An(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function jn(e,t){if(!e||!e.trim().startsWith(`@`))return{ok:!0,scope:e};if(!t?.snapshot)return a(`INVALID_ARGS`,`Ref scope requires an existing snapshot in session.`);let i=r(e.trim());if(!i)return a(`INVALID_ARGS`,`Invalid ref scope: ${e}`);let o=[t.snapshot,...t.snapshotScopeSource?[t.snapshotScopeSource]:[]],s;for(let e of o){let t=n(e.nodes,i);if(s=t?be(t,e.nodes):void 0,s)break}return s?{ok:!0,scope:s}:a(`COMMAND_FAILED`,`Ref ${e} not found or has no label`)}function Mn(e,t,n={}){if(!e)return;let r=Be(e);return{name:t,appBundleId:e.appBundleId,appName:e.appName,...n.includeSnapshot===!0?{snapshot:e.snapshot,...r&&n.omitRefFrameSnapshot!==!0?{refFrameSnapshot:r}:{}}:{},metadata:{surface:e.surface,...n.metadata??{}}}}function Nn(e){return{get:t=>t===e.sessionName?Mn(e.getSession(),e.sessionName,e.recordOptions):void 0,set:t=>{if(t.name!==e.sessionName){_({level:`warn`,phase:`runtime_session_write_skipped`,data:{expected:e.sessionName,received:t.name}});return}e.setRecord(t)}}}function Pn(e,t){e.snapshot!==t&&(e.snapshotGeneration=In(e.snapshotGeneration)),e.snapshot=t,e.snapshotScopeSource=void 0,t.comparisonSafe===!0&&(e.lastComparisonSafeSnapshot=t)}function Fn(e,t){e.snapshotScopeSource=t.scopeSource,e.snapshotGeneration=t.keptCurrentSnapshot?t.previousGeneration:In(t.previousGeneration)}function In(e){return e===void 0?Me(1e5,1e6):e+1}function Ln(e){let t=e.startsWith(`@`)?e.slice(1):e,n=t.indexOf(`~`);return n===-1?t:t.slice(0,n)}function Rn(e,t){let n=new Set;for(let e of t){let t=Ln(e);t.length>0&&n.add(t)}n.size!==0&&We(e,n)}function zn(e,t){if(t?.diff)return Rn(e,Bn(t)),e.snapshotGeneration}function Bn(e){let t=[];for(let n of e.diff?.lines??[])n.ref&&t.push(n.ref);for(let n of e.refs??[])t.push(n.ref);for(let n of e.tail??[])t.push(n.ref);return t}function Vn(e){return`Ref @${e.ref.startsWith(`@`)?e.ref.slice(1):e.ref} was minted from snapshot s${e.mintedGeneration} but the session's ref frame is now s${e.currentFrameEpoch} — re-run snapshot -i.`}function Hn(e){let{session:t,ref:n,mintedGeneration:r}=e;if(t&&Ge(t)===`expired`)return`The UI may have changed since these refs were issued, so they no longer represent current device state. Take a new snapshot before relying on or interacting with them.`;if(r!==void 0){let e=t?S(t)??0:0;if(r!==e)return Vn({ref:n,mintedGeneration:r,currentFrameEpoch:e})}}export{T as A,Bt as C,jt as D,V as E,x as F,Pe as I,y as L,Ve as M,qe as N,j as O,C as P,q as S,Wt as T,$t as _,Fn as a,K as b,On as c,mn as d,rn as f,Qt as g,X as h,Pn as i,Ue as j,D as k,jn as l,Z as m,Rn as n,Nn as o,nn as p,Hn as r,Dn as s,zn as t,hn as u,Xt as v,qt as w,J as x,Zt as y};
|