agent-device 0.21.11 → 0.21.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.11.apk → agent-device-android-ime-helper-0.21.13.apk} +0 -0
  2. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.13.apk.sha256 +1 -0
  3. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.11.manifest.json → agent-device-android-ime-helper-0.21.13.manifest.json} +4 -4
  4. package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.11.apk → agent-device-android-snapshot-helper-0.21.13.apk} +0 -0
  5. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.13.apk.sha256 +1 -0
  6. package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.11.manifest.json → agent-device-android-snapshot-helper-0.21.13.manifest.json} +6 -6
  7. package/apple/fold-helper/Fold.m +97 -0
  8. package/apple/macos-helper/Package.swift +3 -6
  9. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/main.swift +3 -8
  10. package/apple/macos-helper/Tests/AgentDeviceMacOSHelperTests/ScreenshotResponseTests.swift +15 -0
  11. package/apple/snapshot-bridge/SnapshotBridgeRuntime.m +47 -1
  12. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +99 -42
  13. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/Info.plist +23 -0
  14. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner.xcodeproj/project.pbxproj +17 -0
  15. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAppScreenCapture.swift +21 -13
  16. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerScrollViewportPolicy.swift +1 -162
  17. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.h +0 -9
  18. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.m +0 -56
  19. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSystemSurfaceHostPolicy.swift +0 -48
  20. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTapPointPolicy.swift +0 -50
  21. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AXSnapshotFallback.swift +22 -568
  22. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +21 -9
  23. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+BlockingSystemModalResolution.swift +0 -36
  24. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandDispatch.swift +630 -0
  25. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +18 -2236
  26. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +1 -338
  27. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Environment.swift +0 -12
  28. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+GestureExecution.swift +165 -0
  29. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Interaction.swift +0 -24
  30. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Keyboard.swift +0 -142
  31. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +90 -39
  32. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+MainThreadWork.swift +78 -106
  33. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +23 -2
  34. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +147 -95
  35. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+PrivateAXPresentation.swift +0 -209
  36. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScreenRecorder.swift +86 -10
  37. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScrollDragExecution.swift +287 -0
  38. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScrollGesture.swift +1 -200
  39. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SequenceExecution.swift +0 -185
  40. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +75 -285
  41. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotAcquisition.swift +23 -10
  42. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotBackendCapabilities.swift +0 -78
  43. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCapturePlan.swift +83 -578
  44. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCaptureTarget.swift +106 -0
  45. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotExecution.swift +142 -0
  46. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotTiming.swift +49 -78
  47. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedCommitDeadline.swift +0 -44
  48. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedGesturePolicy.swift +27 -97
  49. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift +1 -11
  50. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +11 -87
  51. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SystemModal.swift +2 -10
  52. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +1 -1
  53. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +0 -35
  54. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextInputCandidatePolicy.swift +0 -31
  55. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +2 -18
  56. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +34 -52
  57. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TvRemote.swift +0 -22
  58. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TypeExecution.swift +142 -0
  59. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +22 -6
  60. package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-overlay.swift +140 -20
  61. package/dist/src/absence-observation-errors.js +1 -1
  62. package/dist/src/adapter.js +1 -1
  63. package/dist/src/agent-device-client.js +1 -1
  64. package/dist/src/alert-runtime.js +1 -1
  65. package/dist/src/android-adb.d.ts +1 -1
  66. package/dist/src/app-launch.js +2 -2
  67. package/dist/src/app-log-runtime2.js +3 -3
  68. package/dist/src/app-resolution.js +2 -2
  69. package/dist/src/back-mode.js +1 -1
  70. package/dist/src/capture-disclosure.js +1 -1
  71. package/dist/src/capture.js +1 -1
  72. package/dist/src/cli-config.js +1 -1
  73. package/dist/src/cli-help.js +10 -7
  74. package/dist/src/cli-runner.js +1 -1
  75. package/dist/src/cli.js +1 -1
  76. package/dist/src/client-types.d.ts +5 -8
  77. package/dist/src/code-signature.js +1 -1
  78. package/dist/src/command-schema.js +3 -3
  79. package/dist/src/command-tools.js +3 -3
  80. package/dist/src/connection.js +1 -1
  81. package/dist/src/daemon-client-lifecycle.js +1 -1
  82. package/dist/src/daemon-resolution.js +1 -1
  83. package/dist/src/device-claim-rule.js +2 -2
  84. package/dist/src/device-input-state.d.ts +1 -1
  85. package/dist/src/device-rotation.js +1 -1
  86. package/dist/src/device-session.js +1 -1
  87. package/dist/src/devicectl.js +1 -1
  88. package/dist/src/display-inventory.js +1 -1
  89. package/dist/src/doctor-facade.js +1 -1
  90. package/dist/src/find.js +1 -1
  91. package/dist/src/gesture-plan-types.d.ts +38 -0
  92. package/dist/src/harmonyos.js +1 -1
  93. package/dist/src/helper.js +2 -2
  94. package/dist/src/host.js +1 -1
  95. package/dist/src/install-source-network-transport.js +1 -1
  96. package/dist/src/install-source2.js +1 -1
  97. package/dist/src/interaction-ref-policy.js +1 -1
  98. package/dist/src/interaction2.js +1 -1
  99. package/dist/src/interactor-operation-catalog.js +1 -1
  100. package/dist/src/interactor.js +4 -4
  101. package/dist/src/interactor2.js +1 -1
  102. package/dist/src/internal/bin.js +1 -1
  103. package/dist/src/internal/daemon.js +2 -2
  104. package/dist/src/inventory2.js +1 -1
  105. package/dist/src/ios-snapshot-acquisition.js +1 -1
  106. package/dist/src/ios-snapshot-runtime.js +1 -1
  107. package/dist/src/limrun-runtime-dependencies.js +1 -1
  108. package/dist/src/limrun.d.ts +435 -4
  109. package/dist/src/linux.js +1 -1
  110. package/dist/src/local-interactor-operation-set.js +1 -1
  111. package/dist/src/macos-facade.js +1 -1
  112. package/dist/src/managed-device-scope.js +1 -1
  113. package/dist/src/mechanics.js +4 -4
  114. package/dist/src/mobile-snapshot-semantics.js +1 -1
  115. package/dist/src/perf-facade.js +1 -2
  116. package/dist/src/perf-runtime-plan.js +1 -1
  117. package/dist/src/perf-target.js +2 -0
  118. package/dist/src/physical-device-apps.js +1 -0
  119. package/dist/src/physical-device-control.js +1 -1
  120. package/dist/src/platform-request-scope.js +1 -1
  121. package/dist/src/platform-runtime-operation-host.js +1 -1
  122. package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
  123. package/dist/src/platform-runtime-unavailable.js +1 -1
  124. package/dist/src/platform-runtime.js +1 -1
  125. package/dist/src/platform-runtime2.js +1 -1
  126. package/dist/src/provider-webdriver.js +1 -1
  127. package/dist/src/proxy.js +1 -1
  128. package/dist/src/quality-warnings.js +1 -1
  129. package/dist/src/react-native.js +1 -1
  130. package/dist/src/record-runtime.js +1 -1
  131. package/dist/src/registry.js +35 -35
  132. package/dist/src/request-admission.js +1 -1
  133. package/dist/src/request-runtime-binding.js +1 -1
  134. package/dist/src/runner-client.js +1 -1
  135. package/dist/src/runner-dev-tools-security.js +1 -1
  136. package/dist/src/runner-device-readiness.js +1 -1
  137. package/dist/src/runner-disposal.js +1 -1
  138. package/dist/src/runner-error-classification.js +3 -0
  139. package/dist/src/runner-operations-facade.js +1 -1
  140. package/dist/src/runner-presentation.js +1 -1
  141. package/dist/src/runner.js +1 -1
  142. package/dist/src/runtime.js +3 -3
  143. package/dist/src/runtime10.js +1 -1
  144. package/dist/src/runtime2.js +2 -2
  145. package/dist/src/runtime4.js +5 -5
  146. package/dist/src/runtime5.js +1 -1
  147. package/dist/src/runtime6.js +1 -1
  148. package/dist/src/runtime7.js +1 -1
  149. package/dist/src/runtime8.js +1 -1
  150. package/dist/src/runtime9.js +1 -1
  151. package/dist/src/screen-recording-admission-ledger.js +1 -1
  152. package/dist/src/screen-recording-resource-recovery.js +1 -1
  153. package/dist/src/screen-recording-transport.js +1 -1
  154. package/dist/src/screenshot-runtime.js +1 -1
  155. package/dist/src/screenshot3.js +1 -1
  156. package/dist/src/script.js +1 -1
  157. package/dist/src/scroll-command.d.ts +377 -0
  158. package/dist/src/scroll-command.js +1 -1
  159. package/dist/src/sdk-batch.js +2 -2
  160. package/dist/src/sdk-contracts.d.ts +9 -0
  161. package/dist/src/sdk-device.js +1 -1
  162. package/dist/src/sdk-selectors.d.ts +23 -715
  163. package/dist/src/selection.js +0 -0
  164. package/dist/src/selector-runtime.js +1 -1
  165. package/dist/src/semantic-index.js +1 -1
  166. package/dist/src/server.js +1 -1
  167. package/dist/src/session-observation.js +1 -1
  168. package/dist/src/session-snapshot.js +1 -1
  169. package/dist/src/session2.js +2 -2
  170. package/dist/src/simctl-facade.js +1 -1
  171. package/dist/src/simctl.js +1 -1
  172. package/dist/src/simulator-facade.js +1 -1
  173. package/dist/src/simulator-state.js +1 -1
  174. package/dist/src/simulator.js +1 -1
  175. package/dist/src/snapshot-runtime-binding.js +1 -1
  176. package/dist/src/snapshot-runtime.js +1 -1
  177. package/dist/src/snapshot-state.js +1 -1
  178. package/dist/src/snapshot4.js +1 -1
  179. package/dist/src/src7.js +1 -1
  180. package/dist/src/text-entry-focus.js +1 -1
  181. package/dist/src/tool-provider.js +1 -1
  182. package/dist/src/touch-runtime.js +1 -1
  183. package/dist/src/tree.js +1 -1
  184. package/dist/src/update-check.js +1 -1
  185. package/dist/src/version.js +1 -1
  186. package/dist/src/web2.js +1 -1
  187. package/package.json +4 -2
  188. package/server.json +2 -2
  189. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.11.apk.sha256 +0 -1
  190. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.11.apk.sha256 +0 -1
  191. package/apple/macos-helper/Sources/AgentDeviceMacOSDeviceHub/DeviceHubPose.swift +0 -47
  192. package/apple/macos-helper/Sources/AgentDeviceMacOSDeviceHub/DeviceHubWindowInventory.swift +0 -65
  193. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/DeviceHubPose.swift +0 -225
  194. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/DeviceHubSidebar.swift +0 -57
  195. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/DeviceHubWindowDiscovery.swift +0 -108
  196. package/apple/macos-helper/Tests/AgentDeviceMacOSDeviceHubTests/DeviceHubPoseTests.swift +0 -30
  197. package/apple/macos-helper/Tests/AgentDeviceMacOSDeviceHubTests/DeviceHubWindowInventoryTests.swift +0 -65
  198. package/dist/src/app-inventory.d.ts +0 -4
  199. package/dist/src/apps-simctl.js +0 -1
  200. package/dist/src/cloud-artifacts.d.ts +0 -61
  201. package/dist/src/runner-contract.js +0 -3
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{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};
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 h}from"./sdk-batch.js";import{s as ee}from"./session-store.js";import{B as te,C as ne,E as g,I as _,L as v,V as y,f as re,i as b,m as ie,n as ae,o as oe,p as x,r as se,s as ce}from"./session-snapshot.js";import{d as le}from"./parameterized-recorded-fill.js";import{a as ue,h as de,m as fe,s as pe,t as me}from"./absence-observation-errors.js";import{r as he}from"./diagnostics.js";import"./diagnostics2.js";import{i as ge}from"./rect-center.js";import{a as S}from"./android-system-chrome.js";import{r as C}from"./request-cancel.js";import"./request.js";import{i as w}from"./request-runtime-binding.js";import{n as T}from"./dispatch-resolve.js";import{s as E}from"./quality-warnings.js";import{t as D}from"./backend-snapshot-options.js";import{i as O,n as k,t as A}from"./capture-disclosure.js";import{t as j}from"./snapshot-runtime-binding.js";function M(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 N(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 P(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 F(e,t){let n=Array.isArray(e.selectorChain)?e.selectorChain:void 0,r=be(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:ye(s)}}function I(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 L(e){let{node:t,preActionNodes:n,...r}=e;return r}function _e(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 ve(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=le(o)&&i?ne(i,{mode:a}):void 0;e.recordAction(o,{command:n.command,positionals:n.positionals??[],flags:n.flags??{},result:r,interactiveObservation:ee(n),...s?{targetEvidence:s,targetEvidenceMode:a??`action`}:{}})}function ye(e){let t=e.trim();if(!(!t||t.length>80||/[\r\n]/.test(t)))return t}function be(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 j({...e,plan:u({hasActiveApp:e.session?.appBundleId!==void 0,intent:xe(e.command)}),readiness:!e.session});return t.ok?{ok:!0,operations:{capture:t.capture,...t.readTextAtPoint?{readText:t.readTextAtPoint}:{},...t.findText?{findText:t.findText}:{}}}:t}function xe(e){switch(e){case`is`:return`capture-only`;case`find`:case`get`:return`element-text`;case`wait`:return`wait-observation`}}const Se=[[`snapshotDepth`,`--depth`],[`snapshotScope`,`--scope`],[`snapshotRaw`,`--raw`]];function V(e,t){let n=Se.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||w(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!Te(i)&&!a?null:{expectedPackage:e.appBundleId,foregroundPackage:i,activity:r.activity,hint:we(a),...a?{permissionDialog:!0}:{}}}function Ce(e){return e.permissionDialog?`Android permission dialog is blocking ${e.expectedPackage}`:`${e.foregroundPackage} is foreground instead of ${e.expectedPackage}`}function we(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 Te(e){return e===`com.android.settings`||e===`com.android.systemui`||e.includes(`launcher`)}async function Ee(e){let{device:t,node:n,flags:r,appBundleId:i,traceOutPath:a,surface:o,contextFromFlags:s}=e,c=fe(n),u=e.readTextAtPoint;if(!u)return c;let d=ge(n.rect);if(!d||l(t)&&c&&!de(n.type??``))return c;let f=s(r,i,a),p=await u({point:d,options:{appBundleId:i,surface:o},execution:ie(f)});return p.status===`read`?p.text:(he({level:`warn`,phase:`interaction_read_fallback`,data:{reason:De(p.reason),nodeRef:n.ref,surface:o,platform:t.platform}}),c)}function De(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=Fe(c,e.req.flags?.out),d=je({timestamp:l,lastSnapshotAt:i,lastSnapshotResult:a,lastSnapshotCacheKey:o,session:t,request:c,cacheKey:u});if(d)return s(d);let f=Me({session:t,timestamp:l,request:c});if(f)return i=f.createdAt,a={snapshot:f},o=u,s(a);let p=await Oe({params:e,request:c});c.signal?.throwIfAborted();let m={snapshot:p};return Le({session:t,sessionStore:n,sessionName:r,snapshot:p}),i=l,a=m,o=u,s(m)}}}async function Oe(e){let{params:t,request:n}=e,r=await W(t,n,n.snapshotScope);return n.recovery?.legacyIosSparse&&pe(r)?await ke({runtimeParams:t,request:n,policy:n.recovery.legacyIosSparse}):n.recovery?.sparseVerdictQueryScope?.shouldScope&&E(r.snapshotQuality)?await Ae({runtimeParams:t,request:n,policy:n.recovery.sparseVerdictQueryScope,snapshot:r}):r}async function ke(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 Ae(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 ce({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(x({flags:i,logPath:e.logPath??``,meta:e.req.meta,session:e.session,snapshotScope:n,includeRects:t.includeRects,signal:t.signal}))});return A(e.activationProof,o.snapshot)}function je(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)&&!v(a)&&!G(a,o))return r}function Me(e){let{session:t,timestamp:n,request:r}=e,i=t?.snapshot;if(!(!i||te(i))&&Ne(t,r)&&Pe(i,n)&&i.presentationKey===K(r))return i}function Ne(e,t){return t.cache?.forceFresh===!0||t.cache?.useSessionSnapshot!==!0||v(e)||G(e,t)?!1:e.snapshot?.unsettledGesture===void 0}function Pe(e,t){return t-e.createdAt<750}function G(e,t){return t.cache?.bypassForPostGestureStabilization===!0&&g(e)}function K(t){return a(e(Ie(t)))}function Fe(e,t){return JSON.stringify({presentationKey:K(e),includeRects:e.includeRects===!0,outPath:e.outPath??t??null})}function Ie(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function Le(e){let{session:t,sessionStore:n,sessionName:r,snapshot:i}=e;!t||E(i.snapshotQuality)||(b(t,i),n.set(r,t))}function q(e){return re({backend:Y(e),...O(`selector commands`,{plural:!0}),sessions:oe({sessionName:e.sessionName,getSession:()=>e.session,recordOptions:{includeSnapshot:!0},setRecord:t=>{!e.session||!t.snapshot||(b(e.session,t.snapshot),e.sessionStore.set(e.sessionName,e.session))}}),signal:e.signal??C(e.req.meta?.requestId)})}async function Re(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 T(e.req.flags??{})}}async function J(e,t){let n=await Re(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 Y(e){let{req:t,session:n,device:r,logPath:i,sessionName:a,sessionStore:o}=e,s=e.contextFromFlags??((e,t,n)=>_(i??``,e,t,n)),l=e.bound?.readText,u=e.bound?.findText,d=x({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,...D(n)},a=n?.includeRects===!0,o=n?.scope??t.flags?.snapshotScope,s=t.command===`wait`||t.command===`find`||ze(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 Ee({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)=>{let{found:r}=await u({text:t,options:{appBundleId:n?.appBundleId,surface:n?.surface},execution:d,...e.signal?{signal:e.signal}:{}});return n&&y(n),{found:r}}}:{}}}function ze(e){if(e.command!==`is`)return!1;let t=m(e.positionals??[]);return t.ok&&t.predicate===`absent`}async function Be(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,N(n,a));let r=P(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&&(ae(t,o),e.sessionStore.set(e.sessionName,t),t.snapshotGeneration!==void 0))return{...r,refsGeneration:t.snapshotGeneration}}return r});return k({response:c,consumedTree:X(e),activationProof:e.activationProof})}function X(e){return e.consumedSnapshot?.state??e.sessionStore.get(e.sessionName)?.snapshot}async function Ve(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=Ue(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`?se({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,F(n,r),{node:n.node,preActionNodes:n.preActionNodes});let o=I(n);return l?{...o,warning:l}:o});return k({response:u,consumedTree:X(e),activationProof:e.activationProof})}async function He(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=ue({depth:t.flags?.snapshotDepth,scope:t.flags?.snapshotScope});if(e){let t=me(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=L(n);return R(e.sessionStore,e.sessionName,t,l,o),ve(l)});return k({response:await $(e,l,`is ${r}`),consumedTree:X(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 Ue(e){let t=e.positionals?.[1]??``;if(t.startsWith(`@`)){let n=M(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=h(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 ${Ce(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,M as g,_e as h,He as i,U as l,L as m,Be as n,Z as o,R as p,Ve as r,Q as s,X as t,H as u};
@@ -1 +1 @@
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 p,d as m,f as h,g,h as _,i as v,l as te,m as ne,n as y,p as b,r as x,s as S,t as C,u as re}from"./tree.js";function ie(e,t){let n=v(t.sourceNodesByIndex.values());for(let r of e)ae(r,t.sourceNodesByIndex,n)&&b(t.replacements,r,{type:`Cell`})}function ae(t,n,r){return!(e(t.type??``)!==`other`||t.enabled===!1||!t.rect||!ce(t.label)||!f(t,n,se)||!oe(t)||te(t.rect,r))}function oe(e){return e.rect?e.rect.height>=44&&e.rect.height<=160&&e.rect.width>=120:!1}function se(t){let n=e(t.type??``);return n===`scrollview`||n===`scrollarea`}function ce(e){let t=e?.trim();return!(!t||/^(toolbar|window|application)$/i.test(t)||t.startsWith(`!,`)||/debugger|fast refresh/i.test(t))}function le(e,t){let n=new Set;for(let r of e)ue(t.replacements.get(r.index)??r)&&de(r,t.sourceNodesByIndex,t,n);me(e,t,n)}function ue(e){let t=e.label?.trim();return!!(t&&o(t))}function de(e,t,n,r){let i=!m(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&&M(n,o,e,a)&&r.add(o.index)}function w(e,t){return typeof e.parentIndex==`number`?t.get(e.parentIndex):void 0}function fe(e,t){return e.rect!=null&&t.rect!=null&&j(e.rect,t.rect)}function pe(e,t){if(m(e.type))return null;let n=w(e,t);for(;n&&!m(n.type);){let e=w(n,t);if(!e||!fe(n,e))return null;n=e}return n??null}function me(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=A(o.rect,a),c=he(o,a,s),l=T(e,c,o);E(t,i,o,a,s,c,l),r.set(i.index,D(i,o,a,s,l,n))}}function he(e,t,n){return!!(t&&r(e.rect)&&!r(n))}function T(e,t,n){return!!(e?.projectedOut||t&&k(n))}function E(e,t,n,r,i,a,o){o||a?e.suppressNode(t,[]):r&&i&&!j(n.rect,i)&&b(e.replacements,t,{rect:i})}function D(e,t,n,r,i,a){return{projectedOut:i,...O(e,t,n,r,a)?{clip:r}:n?{clip:n}:{}}}function O(e,t,n,i,a){return!!(r(i)&&(a.has(e.index)||n!==void 0&&m(t.type)))}function k(e){return e.type?.trim().toLowerCase()===`cell`||m(e.type)}function A(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 j(e,t){return!!(e&&e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height)}function M(e,t,n,r){let i=P((e.replacements.get(t.index)??t).rect,n.rect);return g(e.replacements,t,e=>({rect:i??e.rect,hiddenContentAbove:N(e.hiddenContentAbove,r.above),hiddenContentBelow:N(e.hiddenContentBelow,r.below)})),!!i}function N(e,t){return e===!0||t?!0:void 0}function P(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 F(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 I(e,t){F(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=R(n.rect,a.rect);if(!o)return;let s=L(e,i,o);b(t,n,{rect:s}),S(e,i,e=>{c(e.label?.trim()??``)&&b(t,e,{rect:s})})})}function L(e,n,r){let i=r;return S(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 R(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 ge(e,t){F(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 _e(e,t){let n=v(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||!ve(i,r)||(t.suppressNode(i,[]),ye(i,t,r),S(e,n,e=>{t.suppressNode(e,[])}))}}function ve(t,n){return!t.rect||e(t.type??``)!==`keyboard`?!1:t.rect.y>=n}function ye(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 be(t,n){for(let r=0;r<t.length;r+=1){let i=t[r];if(!i)continue;if(xe(i)){B(t,r,i,n);continue}if(!Se(i))continue;let a=x(t,r,t=>e(t.type??``)===`searchfield`&&t.label===`Search`);a&&(n.suppressNode(i,[a]),Ce(i,a,n),B(t,r,a,n))}}function xe(t){return e(t.type??``)===`searchfield`&&t.label===`Search`}function Se(t){let n=e(t.type??``);return t.label===`Toolbar`&&(n===`toolbar`||n===`searchfield`)}function B(e,t,n,r){S(e,t,e=>{e.index!==n.index&&we(e)&&r.suppressNode(e,[n])})}function Ce(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 we(t){let n=e(t.type??``);return n===`button`?!1:n===`image`||t.label===`Search`}function Te(e,t){for(let n=0;n<e.length;n+=1){let r=e[n],i=r?.label?.trim();!r||t.isSuppressed(r)||!i||Ee(e,n,r,i,t)}}function Ee(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=De(t,n,i);if(s){a.suppressNode(r,[s]);return}V(t,n,i,r,a)}function De(t,n,r){return x(t,n,t=>{let n=e(t.type??``);return(n===`link`||n===`searchfield`||m(t.type))&&t.label?.trim()===r})}function V(e,t,n,r,i){S(e,t,e=>{!i.semanticRepresentativeIndexes.has(e.index)&&re(e,n)&&i.suppressNode(e,[r])})}function Oe(e,t){F(e,(n,r,i)=>{let a=x(e,i,e=>h(e)&&e.label?.trim()===r&&(d(e.rect,n.rect)||ke(n,e)));a&&t.suppressNode(n,[a])})}function ke(t,n){if(n.label?.trim()!==t.label?.trim())return!1;let r=e(n.type??``);return Ae(t,r)||r===`textfield`||je(t,r,n)}function Ae(e,t){let n=e.label?.trim();return t===`button`&&(n===`Dismiss`||n===`Back`)}function je(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 Me(t,n){let r=C(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=Ne(i,r);(t.length!==0||i.hittable===!1)&&n.suppressNode(i,t)}}function Ne(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 Pe(e,t){_e(e,t),Me(e,t),le(e,t),be(e,t),Oe(e,t),I(e,t.replacements),ge(e,t),Te(e,t)}function Fe(e,t){for(let n=0;n<e.length;n+=1){let r=e[n],i=r?Ie(e,n,r,t):void 0;!r?.rect||!i||ze(e,n,r,i,t)}}function Ie(t,n,r,i){let a=r.label?.trim();if(e(r.type??``)!==`cell`||a&&!Le(a,r.identifier)&&!o(a))return a;let s=y(t,n).find(Re),c=s?.label?.trim();return!s||!c?a:(b(i.replacements,r,{label:c}),i.suppressNode(s,[r]),c)}function Le(e,t){return t?.trim()===e&&/^[A-Z_$][A-Za-z0-9_$]*Cell$/.test(e)}function Re(t){if(!t.label?.trim())return!1;let n=e(t.type??``);return n===`statictext`||n===`text`||n===`textview`}function ze(t,n,r,i,a){let o=e(r.type??``);if(o===`button`){H(y(t,n),i,a,r);return}if(o!==`cell`)return;let s=y(t,n);Be(s,r,i,a)||Ve(s,r,i,a)}function Be(e,t,n,r){let i=e.find(e=>Ue(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]),He(e,t,n,i,r),!0}function Ve(e,t,n,r){let i=e.find(e=>U(e,t,n));if(!i){e.some(p)&&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 He(e,t,n,r,i){for(let a of e)a.index!==r.index&&(U(a,t,n)||W(a,t)||We(a,r)||_(a,n))&&i.suppressNode(a,[r])}function H(e,t,n,r){for(let i of e)(_(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 Ue(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 We(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 Ge(e,t,n){let r=new Map(e.map((e,t)=>[e.index,t]));for(let[a,o]of e.entries()){let s=Ke(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(tt(t)||!t.rect||!i(t.rect,c))continue;let a=r.get(t.index);a!==void 0&&q(e,a,n)}}}function Ke(e,t,n,r,i){let a=qe(r,n,i.sourceNodesByIndex);if(!a)return;let o=Xe(e,t,a.siblings,a.position,a.parent);if(!(o<0))return{shelfRect:a.rect,intermediateSiblings:a.siblings.slice(a.position+1,o)}}function qe(e,t,n){let r=Ze(e,K(t,e.index));if(!r)return;let i=Ye(e,n);if(!i||!i.rect)return;let a=K(t,i.index),o=a.findIndex(t=>t.index===e.index);if(Je(a,o,e,r))return{rect:r.rect,parent:i,siblings:a,position:o}}function K(e,t){return e.get(t)??[]}function Je(e,t,n,r){if(t<1)return!1;let i=Qe(e,t,n);return i?!r.childActionsPresented||!$e(i,r.actionButtons):!1}function Ye(e,t){return typeof e.parentIndex==`number`?t.get(e.parentIndex):void 0}function Xe(e,t,n,r,i){return n.findIndex((n,a)=>a>r&&et(e,t.get(n.index),n,i))}function Ze(t,n){if(!m(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 Qe(e,t,n){if(!(!n.rect||t<1))for(let r=t-1;r>=0;--r){let t=e[r];if(!(!t.rect||!h(t))&&t.rect.x+t.rect.width/2<n.rect.x&&nt(t.rect,J(n.rect,2)))return t}}function $e(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 et(t,n,r,i){return n!==void 0&&e(r.type??``)===`other`&&d(r.rect,i.rect)&&!!x(t,n,h)}function q(e,t,n){let r=e[t];if(r){n.suppressNode(r,[]);for(let r of y(e,t))n.suppressNode(r,[])}}function tt(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 nt(e,t){return Math.max(e.y,t.y)<=Math.min(e.y+e.height,t.y+t.height)}function rt(e,t){let n=C(e);Ge(e,n,t),it(e,n,t)}function it(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=>at(e,t,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:lt([c.rect,o.rect,s.rect])}),r.semanticRepresentativeIndexes.add(o.index),r.suppressNode(s,[o]),r.suppressNode(c,[o])}}function at(e,t,r){let i=n(e);if(!Y(e,i))return[];let a=X(t,e=>ot(e,i)),o=X(t,st);return a?.rect&&o?.rect&&ct(o.rect,e.rect,a.rect,r)?[{field:e,title:a,image:o,label:i}]:[]}function Y(t,n){return e(t.type??``)===`textfield`&&t.enabled===!1&&!!t.rect&&!!n&&t.value?.trim()===n}function ot(t,n){return e(t.type??``)===`statictext`&&t.label?.trim()===n&&!!t.rect}function st(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 ct(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 lt(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 ut(t,n){let r=C(t);for(let i of t){if(e(i.type??``)===`element(58)`){b(n.replacements,i,{type:`WebView`});continue}let t=dt(i,n.sourceNodesByIndex,r);if(t?.kind===`suppress`){n.suppressNode(i,[]);continue}t&&(b(n.replacements,i,{type:t.type,...t.type===`Heading`?{value:void 0}:{}}),n.semanticRepresentativeIndexes.add(i.index))}}function dt(t,n,r){if(e(t.type??``)!==`other`)return null;let i=f(t,n,mt),a=t.label?.trim();return!i||!a?null:pt(t,i,a)?{kind:`suppress`}:ft(t,a,r)?{kind:`semantic`,type:Q(t.value)?`Heading`:`StaticText`}:null}function ft(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 pt(e,t,n){return e.parentIndex===t.index&&t.label?.trim()===n&&!Q(e.value)}function mt(t){let n=e(t.type??``);return n===`webview`||n===`element(58)`}function Q(e){return/^[1-6]$/.test(e?.trim()??``)}const ht=[ut,rt,ie,Fe,Pe];function gt(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 ht)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=ne(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{gt as t};
1
+ import{Gr as e,Ir as t,Jr as n,Mr 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{_ as f,a as p,c as m,d as h,f as g,g as _,h as te,i as v,l as ne,m as y,n as b,o as x,p as S,r as re,t as C,u as ie}from"./tree.js";function ae(e,t){let n=p(t.sourceNodesByIndex.values());for(let r of e)oe(r,t.sourceNodesByIndex,n)&&y(t.replacements,r,{type:`Cell`})}function oe(e,n,r){return!(t(e.type??``)!==`other`||e.enabled===!1||!e.rect||!le(e.label)||!x(e,n,ce)||!se(e)||ie(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);he(e,t,n)}function de(e){let t=e.label?.trim();return!!(t&&o(t))}function fe(e,t,n,r){let i=!g(e.type)||n.isSuppressed(e),a=s(e.label?.trim()??``,e.value),o=a?me(e,t):void 0;i&&n.suppressNode(e,o?[o]:[]),o&&a&&N(n,o,e,a)&&r.add(o.index)}function w(e,t){return typeof e.parentIndex==`number`?t.get(e.parentIndex):void 0}function pe(e,t){return e.rect!=null&&t.rect!=null&&M(e.rect,t.rect)}function me(e,t){if(g(e.type))return null;let n=w(e,t);for(;n&&!g(n.type);){let e=w(n,t);if(!e||!pe(n,e))return null;n=e}return n??null}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=j(o.rect,a),c=T(o,a,s),l=E(e,c,o);D(t,i,o,a,s,c,l),r.set(i.index,O(i,o,a,s,l,n))}}function T(e,t,n){return!!(t&&i(e.rect)&&!i(n))}function E(e,t,n){return!!(e?.projectedOut||t&&A(n))}function D(e,t,n,r,i,a,o){o||a?e.suppressNode(t,[]):r&&i&&!M(n.rect,i)&&y(e.replacements,t,{rect:i})}function O(e,t,n,r,i,a){return{projectedOut:i,...k(e,t,n,r,a)?{clip:r}:n?{clip:n}:{}}}function k(e,t,n,r,a){return!!(i(r)&&(a.has(e.index)||n!==void 0&&g(t.type)))}function A(e){return e.type?.trim().toLowerCase()===`cell`||g(e.type)}function j(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 M(e,t){return!!(e&&e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height)}function N(e,t,n,r){let i=F((e.replacements.get(t.index)??t).rect,n.rect);return f(e.replacements,t,e=>({rect:i??e.rect,hiddenContentAbove:P(e.hiddenContentAbove,r.above),hiddenContentBelow:P(e.hiddenContentBelow,r.below)})),!!i}function P(e,t){return e===!0||t?!0:void 0}function F(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 I(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 L(e,t){I(e,(n,r,i)=>{if(!c(r)||!n.rect)return;let a=v(e,i,e=>!!e.rect&&ee(e.label?.trim()??``));if(!a?.rect)return;let o=ge(n.rect,a.rect);if(!o)return;let s=R(e,i,o);y(t,n,{rect:s}),m(e,i,e=>{c(e.label?.trim()??``)&&y(t,e,{rect:s})})})}function R(e,t,r){let i=r;return m(e,t,e=>{let t=e.label?.trim()??``;!e.rect||!c(t)||n(r,e.rect)&&a(e.rect)<a(i)&&(i=e.rect)}),i}function ge(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 _e(e,t){I(e,(n,r,i)=>{u(n)&&l(n,z(e,i))&&t.suppressNode(n,z(e,i))})}function z(e,t){let n=[];return m(e,t,e=>{n.push(e)}),n}function ve(e,t){let n=p(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||!ye(i,r)||(t.suppressNode(i,[]),be(i,t,r),m(e,n,e=>{t.suppressNode(e,[])}))}}function ye(e,n){return!e.rect||t(e.type??``)!==`keyboard`?!1:e.rect.y>=n}function be(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 xe(e,n){for(let r=0;r<e.length;r+=1){let i=e[r];if(!i)continue;if(Se(i)){B(e,r,i,n);continue}if(!Ce(i))continue;let a=v(e,r,e=>t(e.type??``)===`searchfield`&&e.label===`Search`);a&&(n.suppressNode(i,[a]),we(i,a,n),B(e,r,a,n))}}function Se(e){return t(e.type??``)===`searchfield`&&e.label===`Search`}function Ce(e){let n=t(e.type??``);return e.label===`Toolbar`&&(n===`toolbar`||n===`searchfield`)}function B(e,t,n,r){m(e,t,e=>{e.index!==n.index&&Te(e)&&r.suppressNode(e,[n])})}function we(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 Te(e){let n=t(e.type??``);return n===`button`?!1:n===`image`||e.label===`Search`}function Ee(e,t){for(let n=0;n<e.length;n+=1){let r=e[n],i=r?.label?.trim();!r||t.isSuppressed(r)||!i||De(e,n,r,i,t)}}function De(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=Oe(e,n,i);if(s){a.suppressNode(r,[s]);return}V(e,n,i,r,a)}function Oe(e,n,r){return v(e,n,e=>{let n=t(e.type??``);return(n===`link`||n===`searchfield`||g(e.type))&&e.label?.trim()===r})}function V(e,t,n,r,i){m(e,t,e=>{!i.semanticRepresentativeIndexes.has(e.index)&&h(e,n)&&i.suppressNode(e,[r])})}function ke(e,t){I(e,(n,r,i)=>{let a=v(e,i,e=>S(e)&&e.label?.trim()===r&&(d(e.rect,n.rect)||Ae(n,e)));a&&t.suppressNode(n,[a])})}function Ae(e,n){if(n.label?.trim()!==e.label?.trim())return!1;let r=t(n.type??``);return je(e,r)||r===`textfield`||Me(e,r,n)}function je(e,t){let n=e.label?.trim();return t===`button`&&(n===`Dismiss`||n===`Back`)}function Me(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 Ne(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=re(i,r);(e.length!==0||i.hittable===!1)&&n.suppressNode(i,e)}}function Pe(e,t){ve(e,t),Ne(e,t),ue(e,t),xe(e,t),ke(e,t),L(e,t.replacements),_e(e,t),Ee(e,t)}function Fe(e,t){for(let n=0;n<e.length;n+=1){let r=e[n],i=r?Ie(e,n,r,t):void 0;!r?.rect||!i||ze(e,n,r,i,t)}}function Ie(e,n,r,i){let a=r.label?.trim();if(t(r.type??``)!==`cell`||a&&!Le(a,r.identifier)&&!o(a))return a;let s=b(e,n).find(Re),c=s?.label?.trim();return!s||!c?a:(y(i.replacements,r,{label:c}),i.suppressNode(s,[r]),c)}function Le(e,t){return t?.trim()===e&&/^[A-Z_$][A-Za-z0-9_$]*Cell$/.test(e)}function Re(e){if(!e.label?.trim())return!1;let n=t(e.type??``);return n===`statictext`||n===`text`||n===`textview`}function ze(e,n,r,i,a){let o=t(r.type??``);if(o===`button`){H(b(e,n),i,a,r);return}if(o!==`cell`)return;let s=b(e,n);Be(s,r,i,a)||Ve(s,r,i,a)}function Be(e,t,n,r){let i=e.find(e=>Ue(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]),He(e,t,n,i,r),!0}function Ve(e,t,n,r){let i=e.find(e=>U(e,t,n));if(!i){e.some(ne)&&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 He(e,t,n,r,i){for(let a of e)a.index!==r.index&&(U(a,t,n)||W(a,t)||We(a,r)||_(a,n))&&i.suppressNode(a,[r])}function H(e,t,n,r){for(let i of e)(_(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 Ue(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 We(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 Ge(t,n,r){let i=new Map(t.map((e,t)=>[e.index,t]));for(let[a,o]of t.entries()){let s=Ke(t,i,n,o,r);if(!s)continue;q(t,a,r);let c=J(s.shelfRect,2);for(let n of s.intermediateSiblings){if(tt(n)||!n.rect||!e(n.rect,c))continue;let a=i.get(n.index);a!==void 0&&q(t,a,r)}}}function Ke(e,t,n,r,i){let a=qe(r,n,i.sourceNodesByIndex);if(!a)return;let o=Xe(e,t,a.siblings,a.position,a.parent);if(!(o<0))return{shelfRect:a.rect,intermediateSiblings:a.siblings.slice(a.position+1,o)}}function qe(e,t,n){let r=Ze(e,K(t,e.index));if(!r)return;let i=Ye(e,n);if(!i||!i.rect)return;let a=K(t,i.index),o=a.findIndex(t=>t.index===e.index);if(Je(a,o,e,r))return{rect:r.rect,parent:i,siblings:a,position:o}}function K(e,t){return e.get(t)??[]}function Je(e,t,n,r){if(t<1)return!1;let i=Qe(e,t,n);return i?!r.childActionsPresented||!$e(i,r.actionButtons):!1}function Ye(e,t){return typeof e.parentIndex==`number`?t.get(e.parentIndex):void 0}function Xe(e,t,n,r,i){return n.findIndex((n,a)=>a>r&&et(e,t.get(n.index),n,i))}function Ze(e,r){if(!g(e.type)||!e.rect)return;let i=e.rect,a=r.filter(e=>t(e.type??``)===`button`&&e.rect);if(a.length===0&&e.hiddenContentBelow===!0)return{rect:i,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:i,childActionsPresented:a.some(e=>n(i,e.rect)),actionButtons:a}}function Qe(e,t,n){if(!(!n.rect||t<1))for(let r=t-1;r>=0;--r){let t=e[r];if(!(!t.rect||!S(t))&&t.rect.x+t.rect.width/2<n.rect.x&&nt(t.rect,J(n.rect,2)))return t}}function $e(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 et(e,n,r,i){return n!==void 0&&t(r.type??``)===`other`&&d(r.rect,i.rect)&&!!v(e,n,S)}function q(e,t,n){let r=e[t];if(r){n.suppressNode(r,[]);for(let r of b(e,t))n.suppressNode(r,[])}}function tt(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 nt(e,t){return Math.max(e.y,t.y)<=Math.min(e.y+e.height,t.y+t.height)}function rt(e,t){let n=C(e);Ge(e,n,t),it(e,n,t)}function it(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=>at(t,e,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:lt([c.rect,o.rect,s.rect])}),r.semanticRepresentativeIndexes.add(o.index),r.suppressNode(s,[o]),r.suppressNode(c,[o])}}function at(e,t,n){let i=r(e);if(!Y(e,i))return[];let a=X(t,e=>ot(e,i)),o=X(t,st);return a?.rect&&o?.rect&&ct(o.rect,e.rect,a.rect,n)?[{field:e,title:a,image:o,label:i}]:[]}function Y(e,n){return t(e.type??``)===`textfield`&&e.enabled===!1&&!!e.rect&&!!n&&e.value?.trim()===n}function ot(e,n){return t(e.type??``)===`statictext`&&e.label?.trim()===n&&!!e.rect}function st(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 ct(e,t,r,i){let a=t.x-(e.x+e.width),o=r.x-(t.x+t.width);return n(i,e)&&n(i,t)&&n(i,r)&&a>=0&&a<=12&&o>=0&&o<=12&&Z(e,t)&&Z(t,r)}function Z(e,t){return Math.max(e.y,t.y)<=Math.min(e.y+e.height,t.y+t.height)}function lt(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 ut(e,n){let r=C(e);for(let i of e){if(t(i.type??``)===`element(58)`){y(n.replacements,i,{type:`WebView`});continue}let e=dt(i,n.sourceNodesByIndex,r);if(e?.kind===`suppress`){n.suppressNode(i,[]);continue}e&&(y(n.replacements,i,{type:e.type,...e.type===`Heading`?{value:void 0}:{}}),n.semanticRepresentativeIndexes.add(i.index))}}function dt(e,n,r){if(t(e.type??``)!==`other`)return null;let i=x(e,n,mt),a=e.label?.trim();return!i||!a?null:pt(e,i,a)?{kind:`suppress`}:ft(e,a,r)?{kind:`semantic`,type:Q(e.value)?`Heading`:`StaticText`}:null}function ft(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 pt(e,t,n){return e.parentIndex===t.index&&t.label?.trim()===n&&!Q(e.value)}function mt(e){let n=t(e.type??``);return n===`webview`||n===`element(58)`}function Q(e){return/^[1-6]$/.test(e?.trim()??``)}const ht=[ut,rt,ae,Fe,Pe];function gt(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 ht)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=te(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{gt as t};
@@ -1,4 +1,4 @@
1
- import{D as e,l as t}from"./sdk-contracts.js";import{_ as n}from"./sdk-batch.js";import{i as r}from"./catalog.js";import{r as i}from"./version.js";import{a,i as ee,r as o,t as te}from"./command-tools.js";import{i as s,r as c,t as l}from"./cli-help.js";const u=`agent-device drives iOS, Android, tvOS, Android TV, macOS, Linux, and web apps. Tools mirror CLI commands of the same name; CLI flags are camelCase properties (--settle -> settle: true).
1
+ import{D as e,l as t}from"./sdk-contracts.js";import{_ as n}from"./sdk-batch.js";import{i as r}from"./catalog.js";import{a as i}from"./version.js";import{a,i as ee,r as o,t as te}from"./command-tools.js";import{i as s,r as c,t as l}from"./cli-help.js";const u=`agent-device drives iOS, Android, tvOS, Android TV, macOS, Linux, and web apps. Tools mirror CLI commands of the same name; CLI flags are camelCase properties (--settle -> settle: true).
2
2
 
3
3
  Start: known app -> call open {app, foreground: true} at once; do not probe with devices, apps, appstate, snapshot, or screenshot first. open returns the initial interactive snapshot with @refs. Unknown app id: devices, then apps, then open the discovered id; never invent ids. Existing session: continue from its state, do not reopen.
4
4
 
@@ -1 +1 @@
1
- function e(e){return Object.freeze({async observeRunnerSession(e){let{readRunnerSessionLiveness:t}=await import(`./runner-client.js`).then(e=>e.g),n=t(e);return n?{alive:n.liveness!==`gone`,sessionId:n.sessionId}:void 0},async resolveSoleForegroundApp(t={}){try{let n=await e.listLocalDevices({platform:`ios`,iosSimulatorSetPath:t.simulatorSetPath,kind:`simulator`,booted:!0});if(n.length!==1)return;let[r]=n;if(!r)return;let{detectSoleRunningIosSimulatorApp:i}=await import(`./app-resolution.js`).then(e=>e.t),a=await i(r);return a?{device:r,app:{bundleId:a.bundleId}}:void 0}catch(t){if(e.shouldPropagateProbeError(t))throw t;return}}})}export{e as createAppleSessionObservation};
1
+ function e(e){return Object.freeze({async observeRunnerSession(e){let{readRunnerSessionLiveness:t}=await import(`./runner-client.js`).then(e=>e.t),n=t(e);return n?{alive:n.liveness!==`gone`,sessionId:n.sessionId}:void 0},async resolveSoleForegroundApp(t={}){try{let n=await e.listLocalDevices({platform:`ios`,iosSimulatorSetPath:t.simulatorSetPath,kind:`simulator`,booted:!0});if(n.length!==1)return;let[r]=n;if(!r)return;let{detectSoleRunningIosSimulatorApp:i}=await import(`./app-resolution.js`).then(e=>e.t),a=await i(r);return a?{device:r,app:{bundleId:a.bundleId}}:void 0}catch(t){if(e.shouldPropagateProbeError(t))throw t;return}}})}export{e as createAppleSessionObservation};
@@ -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{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};
1
+ import{D as e,S as t,_ as n,b as r,f as i,o as a}from"./sdk-contracts.js";import{u 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,I as _e,L as ve,M as ye,P as be,R as xe,T as Se,a as Ce,g as we,o as Te,t as Ee,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 De,r as _}from"./diagnostics.js";import{t as v}from"./timeouts.js";import"./diagnostics2.js";import"./retry.js";import{i as Oe}from"./rect-center.js";import{t as ke}from"./snapshot-state.js";import{n as Ae}from"./request-runtime-binding.js";import{i as je}from"./lease-context.js";import{s as Me}from"./tree.js";import{t as Ne}from"./interactor-types.js";import{randomInt as Pe}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 b={resolve:async()=>{throw new e(`COMMAND_FAILED`,`Interactor resolution is not composed for this process.`,{reason:`interactor-resolution-missing`})}};function Fe(e){b=e}function Ie(){return b}var x=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 x({state:`active`,scope:`all`,tree:void 0,generation:void 0});function Re(e){return new x({state:`active`,...e})}function ze(e){return x.expire(e)}const S=new WeakMap,C=new WeakSet;function w(e){return e.refFrame??Le}function T(e){return w(e).generation??e.snapshotGeneration}function Be(e){return w(e).tree}function Ve(e){Ue(e),E(e),e.refFrame=ze(w(e)),e.snapshotScopeSource=void 0}function E(e){e.snapshot&&C.add(e.snapshot)}function He(e){return C.has(e)}function Ue(e){let t=D(e)+1;return S.set(e,t),t}function D(e){return S.get(e)??0}function We(e){O(e,`all`)}function Ge(e,t){O(e,t)}function O(e,t){e.refFrame=Re({scope:t,tree:e.snapshot,generation:e.snapshotGeneration})}function k(e){return w(e).state}function A(e){return w(e).scope}function Ke(e){let t=e.ref.startsWith(`@`)?e.ref.slice(1):e.ref;return{admission:qe({session:e.session,refBody:t,mintedGeneration:e.mintedGeneration}),scope:A(e.session),currentGeneration:T(e.session)}}function qe(e){let{session:t,refBody:n,mintedGeneration:r}=e;if(k(t)===`expired`)return{admitted:!1,reason:`ref_frame_expired`};if(r!==void 0&&r!==T(t))return{admitted:!1,reason:`ref_generation_mismatch`};let i=A(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 Je=[250,400,600];function j(e){return e===`press`||e===`click`||e===`back`||e===`open`}function M(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 Ye(e,t){return e<12?!1:t<=Math.floor(e*.2)}function Xe(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:Ye(t.baselineCount,e.snapshot.nodes.length)?Ze(e.snapshot)?null:`sharp-drop`:t.routeComparable&&j(t.action)&&Qe(t.baselineSignatures,e.snapshot.nodes)?`stuck-route`:null}function Ze(e){return e.nodes.some(e=>e.hittable===!0||!!e.label?.trim()||!!e.value?.trim()||!!e.identifier?.trim())}function Qe(e,t){if(!e||e.length===0)return!1;let n=Math.max(e.length,t.length);if(n<12)return!1;let r=M(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 $e(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 et(e,t,n=e.snapshot){if(e.device.platform!==`android`)return;let r=tt(e,n),i=r?.comparisonSafe===!0;e.androidSnapshotFreshness={action:t,markedAt:Date.now(),baselineCount:(r??n)?.nodes.length??0,baselineSignatures:i?M(r?.nodes??[]):void 0,routeComparable:i}}function tt(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 N(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 P(e){!e||e.device.platform!==`android`||delete e.androidSnapshotFreshness}async function F(e,t){return $e({capture:e.capture,classify:n=>Xe({snapshot:n.snapshot,rawNodeCount:n.annotations.analysis?.rawNodeCount},t,{interactiveOnly:e.interactiveOnly,mode:e.androidFreshnessMode}),window:t,retry:{retryBudgetMs:1500,delaysMs:Je},onTrustworthyCapture:()=>P(e.session)})}function nt(e,t){return t?{...e,warnings:[...e.warnings??[],ye(t.action,t.positionals)]}:e}const rt=`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 it(e){return Object.fromEntries(rt.map(t=>[t,e?.[t]]))}function I(e,t,n,r,i,a){return{requestId:i??De().requestId,appBundleId:n,runnerLeaseContext:je({meta:a}),logPath:e,traceLogPath:r,...it(t),screenshotCaptureBackend:t?.maestro?.screenshotCaptureBackend,...o(t),clickButton:g(t)}}function at(e){return e?.interactionOutcome?.retryOnNoChange===!0}function ot(e){let{session:t,command:n,positionals:r,flags:i,preSnapshot:a}=e;if(!at(i)||!vt(t))return;let o=bt(n);if(!o||!Tt(r))return;let s=V(a?.nodes??[]);s.length!==0&&(t.pendingInteractionOutcome={action:n,command:o,positionals:r,flags:B(i),markedAt:Date.now(),attemptsRemaining:2,preSignature:s})}function st(e){let t=e?.pendingInteractionOutcome;if(!(!e||!t)){if(!vt(e)){L(e);return}if(Date.now()-t.markedAt>3e4){L(e);return}return t}}function L(e){e?.pendingInteractionOutcome&&(e.pendingInteractionOutcome=void 0)}async function R(e){let{pending:t,snapshot:n}=e,r=dt(t.preSignature,V(n.nodes));if(r!==`unchanged`||t.attemptsRemaining<=0)return{retried:!1,change:r};let i=e.retryTap,a=i?yt(t.positionals):void 0;if(!i||!a)return z(t,i?`unreadable-retry-point`:`device-runtime-unavailable`),{retried:!1,change:r};let o=Date.now();return--t.attemptsRemaining,await ct(i,e)?(_({level:`info`,phase:`interaction_no_change_retry`,data:{action:t.action,attemptsRemaining:t.attemptsRemaining,durationMs:Date.now()-o}}),{retried:!0,change:r}):(z(t,`retry-tap-unavailable`),{retried:!1,change:r})}async function ct(e,t){let{session:n,pending:r}=t,i=yt(r.positionals);if(!i)return!1;try{return await e({device:n.device,point:i,context:{...I(t.logPath,r.flags,n.appBundleId,n.trace?.outPath),surface:n.surface}})}catch{return!1}}function z(e,t){_({level:`info`,phase:`interaction_no_change_retry_skipped`,data:{action:e.action,attemptsRemaining:e.attemptsRemaining,reason:t}})}function lt(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 ut(e){_({level:`warn`,phase:`interaction_settle_timeout`,data:{action:e.pending.action,attempts:e.attempts,durationMs:Date.now()-e.startedAt}})}function B(e){if(!e?.interactionOutcome&&!e?.postGestureStabilization)return e;let{interactionOutcome:t,postGestureStabilization:n,...r}=e;return r}function V(e){let t=new Map,n=[],r=ge(e);for(let i of e){let e=xt(i,t,r);e&&n.push(e)}return n}function H(e){return e?.comparisonKey??e?.snapshotQuality?.backend}function dt(e,t){return e.length===0||t.length===0?`ambiguous`:W(e,t)?`unchanged`:`changed`}function U(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 W(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||!U(r,i))return!1}return!0}function ft(e,t){let n=pt(e),r=pt(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,!U(t,n))return`changed`}if(i===0)return`ambiguous`;let o=r.size>i;return a&&o?`changed`:`unchanged`}function pt(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 mt(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||!U(e,t))return!1}return!0}function ht(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,U(t,e)||(i+=1)}return{onlyInBaseline:r,onlyInCurrent:n.size,rectMismatched:i,shared:a}}function gt(e,t,n){let r=_t(e,n),i=new Map(_t(t,n).map(e=>[e.key,e]));for(let e of r){let t=i.get(e.key);if(!t||!U(e,t))return!0;i.delete(e.key)}return i.size>0}function _t(e,t){return e.filter(e=>e.discriminating&&e.x<t.x+t.width&&t.x<e.x+e.width&&e.y<t.y+t.height&&t.y<e.y+e.height)}function vt(e){return f(e.device)}function yt(e){let t=Number(e[0]),n=Number(e[1]);return Number.isFinite(t)&&Number.isFinite(n)?{x:t,y:n}:void 0}function bt(e){if(e===`click`||e===`press`)return`press`}function xt(e,t,n){if(!e.rect||!Et(e.rect)||Dt(e))return;let r=wt(e);if(!r)return;let i=t.get(r)??0;t.set(r,i+1);let a=St(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:!Ct(e,n)}}function St(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 Ct(e,t){return p(e)||e.ref!==void 0&&t.has(e.ref)}function wt(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 Tt(e){return e.length===2&&e.every(e=>Number.isFinite(Number(e)))}function Et(e){return[e.x,e.y,e.width,e.height].every(e=>Number.isFinite(e))&&e.width>0&&e.height>0}function Dt(e){return`${e.label??``} ${e.identifier??``}`.toLowerCase().includes(`scroll bar`)}function Ot(e){let{session:t,command:n,action:r=n,positionals:i,flags:a,scheduleOutcomeRetry:o=!1,androidFreshnessBaseline:s}=e;o&&ot({session:t,command:n,positionals:i,flags:a,preSnapshot:t.snapshot}),j(r)&&et(t,r,s??t.snapshot),kt(t,r,i,a)}function kt(e,t,n=[],r){if(!zt(e.device)||!Rt(t,n,r))return;let i=Bt(e.device)?V(e.snapshot?.nodes??[]):void 0;e.postGestureStabilization={action:t,positionals:n,markedAt:Date.now(),...i?.length?{baselineSignature:i,baselineBackend:H(e.snapshot)}:{}}}function At(e){e?.postGestureStabilization&&(e.postGestureStabilization=void 0)}function jt(e){return!!e?.postGestureStabilization}async function Mt(e){let t=st(e.session);if(t&&e.session)return await Nt({...e,session:e.session},t);if(f(e.device)&&e.session&&jt(e.session))return await Ft({...e,session:e.session});let n=N(e.session);if(n&&e.device.platform===`android`){let t=await F(e,n);return{snapshot:t.snapshot,...t.annotations}}}async function Nt(e,t){let n=e.session,r=Date.now(),i=0,a=await Pt(e,t,await G(e)),o=await R({session:n,pending:t,logPath:e.logPath,snapshot:a.snapshot,retryTap:e.retryTap});for(;o.retried;)i+=1,a=await Pt(e,t,await G(e)),o=await R({session:n,pending:t,logPath:e.logPath,snapshot:a.snapshot,retryTap:e.retryTap});L(n);let s=await It({session:n,initial:a,capture:async()=>await G(e),readSnapshot:e=>e.snapshot});return a=s.value,o.change!==`ambiguous`&&a.annotations.freshness?.staleAfterRetries!==!0&&P(n),o.change===`unchanged`?ut({pending:t,attempts:i,startedAt:r}):lt({pending:t,change:o.change,attempts:i,startedAt:r}),Lt(s)}async function Pt(e,t,n){let r=n;return dt(t.preSignature,V(r.snapshot.nodes))===`unchanged`?(await v(500),r=await G(e),r):r}async function Ft(e){return Lt(await It({session:e.session,capture:async()=>await G(e),readSnapshot:e=>e.snapshot}))}async function G(e){let t=N(e.session);return t&&e.device.platform===`android`?await F(e,t):await e.capture()}async function It(e){let{session:t,capture:n,readSnapshot:r}=e,i=t?.postGestureStabilization;if(!t||!zt(t.device)||!i)return{value:e.initial??await n()};let a=await be({pending:{action:i.action,positionals:i.positionals??[],baselineSignature:i.baselineSignature,baselineBackend:i.baselineBackend},needsBaselineDistrust:Bt(t.device),initial:e.initial,hooks:{capture:n,readSurface:e=>{let t=r(e);return{signature:V(t.nodes),backend:H(t)}},signaturesStable:W,classifyBaselineEvidence:ft,surfacesIdentical:mt,summarizeDivergence:ht}});return At(t),a}function Lt(e){let{snapshot:t,annotations:n}=e.value;return e.unsettledGesture&&(t.unsettledGesture=e.unsettledGesture),{snapshot:t,...nt(n,e.gestureNoEffect)}}function Rt(e,t,n){return n?.postGestureStabilization===!1?!1:n?.postGestureStabilization===!0||e===`swipe`||e===`scroll`||e===`gesture`&&t[0]===`swipe`}function zt(e){return f(e)}function Bt(e){return d(e.platform)}function Vt(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=Kt(r),f=+(c.length>0),p=e=>{let t=c.slice(0,e),n=qt({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(Ut(t))return t.verification=Ht({node:r,domain:i,mode:n,brokenWalk:s.broken}),t;if(e===f)return Wt(t)}}function Ht(e){return e.brokenWalk?`unverifiable`:e.mode===`landmark`?`verified`:Yt({node:e.node,domain:e.domain})}function Ut(e){return ue(fe({...e,verification:`unverifiable`}))<=oe}function Wt(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=Me(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 Gt(e,t){return!e&&!t?!0:!e||!t?!1:te(e,t)}function Kt(e){let t=e.rect;if(t)return{x:t.x,y:t.y,width:t.width,height:t.height}}function qt(e){let{nodes:t,byIndex:n,node:r,identity:i,ancestry:a,sibling:o,scrollRegion:s}=e,c=xe(t,n,i,a),l=c.filter(e=>q(t,e)===o),u=c.length>0?c.filter(e=>Gt(J(e,n),s)):void 0,d=u?Jt(u):[];return{identitySet:c,siblingMatches:l,regionMembers:u,orderedRegion:d,viewportOrder:Math.max(d.findIndex(e=>e.index===r.index),0)}}function Jt(e){return e.map((e,t)=>({node:e,documentOrder:t,center:Oe(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 Yt(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 Xt(){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 Zt=Object.freeze({async observeRunnerSession(e){return(await Xt()).observeRunnerSession(e)},async resolveSoleForegroundApp(e){return(await Xt()).resolveSoleForegroundApp(e)}});async function Qt(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 tn(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:nn(e.bindDevice)}}async function $t(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&&await Ae(n),{type:`runtime`,runtime:n}}async function en(e,t){let n=await $t(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 tn(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime facts inspection is unavailable.`,{reason:`runtime-gateway-missing`})}function nn(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime binding is unavailable.`,{reason:`runtime-gateway-missing`})}function rn(e){let{flags:n,logPath:r,meta:a,session:o,snapshotScope:s}=e,{appBundleId:c,trace:l,surface:u}=o??{},d=e.context??I(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 an(e){let t=we(e);return{...t,capture:Ee(t),selectors:Te(t),interactions:Ce(t)}}async function on(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 sn(e){let t=e?e.textEntryReadiness:void 0,n=fn(t)?{textEntryReadiness:t}:{},r=cn(e);return r?{...n,...r}:n}function cn(e){if(!ln(e))return null;let t=un(e.target);return t?{verification:`unconfirmed`,requested:e.requested,before:e.before,after:e.after,target:t}:null}function ln(e){return!!(e&&e.verification===`unconfirmed`&&typeof e.requested==`string`&&Q(e.before)&&Q(e.after))}function un(e){if(!mn(e)||!dn(e))return null;let t=pn(e.rect);return t?{resourceId:e.resourceId,className:e.className,packageName:e.packageName,rect:t}:null}function dn(e){return Q(e.resourceId)&&Q(e.className)&&Q(e.packageName)}function fn(e){return typeof e==`string`&&Ne.includes(e)}function Q(e){return e===null||typeof e==`string`}function pn(e){return!mn(e)||![e.x,e.y,e.width,e.height].every(e=>typeof e==`number`)?null:e}function mn(e){return!!e&&typeof e==`object`}async function hn(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 gn(e,t){let n={execution:Z(t),appBundleId:t.appBundleId},r=e.captured?Sn(e.runtime):void 0;switch(e.kind){case`tap`:return _n(e,t,n,r);case`long-press`:return vn(e,n,r);case`hover`:return yn(e,n,r);case`fill`:return bn(e,t,n,r)}}function _n(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=Cn(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(En(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 vn(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 yn(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 bn(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,...xn(s)?{maestroNonHittableCoordinateFallbackUsed:!0}:{},...sn(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 xn(e){return typeof e==`object`&&!!e&&`maestroNonHittableCoordinateFallbackUsed`in e&&e.maestroNonHittableCoordinateFallbackUsed===!0}function Sn(e){return async t=>await e.operations.captureSnapshot(t)}function Cn(e,t){let n=wn(e,t);return Tn(n),{button:e.button??g(t),...n,surface:e.surface??t.surface}}function wn(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 Tn(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 En(e,t){return t===`primary`?`Pressed (${e.x}, ${e.y})`:`${t===`secondary`?`Right`:`Middle`} clicked (${e.x}, ${e.y})`}function Dn(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=hn({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=gn(s.runtime,a);return c.tapPoint?(await c.tapPoint(i),!0):!1}}async function On(e){let t=await Mt({session:e.session,device:e.device,logPath:e.logPath,interactiveOnly:e.flags?.snapshotInteractiveOnly===!0,androidFreshnessMode:e.androidFreshnessMode,capture:()=>An(e),retryTap:Dn(e)});if(t)return t;let n=await An(e);return P(e.session),{snapshot:n.snapshot,...n.annotations}}async function kn(e){if(e.captureData)return await e.captureData();let{device:n,session:r,logPath:a}=e,o=I(a,jn(e),r?.appBundleId,r?.trace?.outPath);return await on({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 An(e){let t=Date.now(),n=await kn(e);c(e.session,{durationMs:Date.now()-t,backend:n.backend,platform:u(e.device)});let r=s(n),i=l(n,ke(n,jn(e)));return r.androidSnapshot?.systemSurfaceOnly===!0&&(i.systemSurfaceOnly=!0),{data:n,snapshot:i,annotations:r}}function jn(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function Mn(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?Se(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 Nn(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 Pn(e){return{get:t=>t===e.sessionName?Nn(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 Fn(e,t){e.snapshot!==t&&(e.snapshotGeneration=Ln(e.snapshotGeneration)),e.snapshot=t,e.snapshotScopeSource=void 0,t.comparisonSafe===!0&&(e.lastComparisonSafeSnapshot=t)}function In(e,t){e.snapshotScopeSource=t.scopeSource,e.snapshotGeneration=t.keptCurrentSnapshot?t.previousGeneration:Ln(t.previousGeneration)}function Ln(e){return e===void 0?Pe(1e5,1e6):e+1}function Rn(e){let t=e.startsWith(`@`)?e.slice(1):e,n=t.indexOf(`~`);return n===-1?t:t.slice(0,n)}function zn(e,t){let n=new Set;for(let e of t){let t=Rn(e);t.length>0&&n.add(t)}n.size!==0&&Ge(e,n)}function Bn(e,t){if(t?.diff)return zn(e,Vn(t)),e.snapshotGeneration}function Vn(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 Hn(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 Un(e){let{session:t,ref:n,mintedGeneration:r}=e;if(t&&k(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?T(t)??0:0;if(r!==e)return Hn({ref:n,mintedGeneration:r,currentFrameEpoch:e})}}export{ft as A,He as B,Vt as C,Ot as D,jt as E,ht as F,k as G,Ke as H,I,Fe as K,N as L,mt as M,H as N,W as O,B as P,We as R,q as S,Gt as T,D as U,E as V,w as W,en as _,In as a,K as b,kn as c,hn as d,an as f,$t as g,X as h,Fn as i,gt as j,V as k,Mn as l,Z as m,zn as n,Pn as o,rn as p,y as q,Un as r,On as s,Bn as t,gn as u,Zt as v,Jt as w,J as x,Qt as y,Ve as z};