agent-device 0.21.23 → 0.21.24

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 (258) hide show
  1. package/README.md +6 -6
  2. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.23.apk → agent-device-android-ime-helper-0.21.24.apk} +0 -0
  3. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.24.apk.sha256 +1 -0
  4. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.23.manifest.json → agent-device-android-ime-helper-0.21.24.manifest.json} +4 -4
  5. package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.23.apk → agent-device-android-snapshot-helper-0.21.24.apk} +0 -0
  6. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.24.apk.sha256 +1 -0
  7. package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.23.manifest.json → agent-device-android-snapshot-helper-0.21.24.manifest.json} +6 -6
  8. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/SnapshotTraversal.swift +12 -6
  9. package/apple/macos-helper/Tests/AgentDeviceMacOSHelperTests/RectResponseTests.swift +21 -0
  10. package/apple/snapshot-bridge/README.md +9 -7
  11. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandDispatch.swift +56 -0
  12. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +14 -5
  13. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +8 -0
  14. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +12 -0
  15. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCaptureTarget.swift +1 -1
  16. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotExecution.swift +29 -5
  17. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +34 -10
  18. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +19 -5
  19. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +3 -3
  20. package/dist/src/adapter.js +1 -1
  21. package/dist/src/adb.js +1 -1
  22. package/dist/src/agent-browser-lifecycle.js +1 -1
  23. package/dist/src/agent-browser-process-record.js +1 -1
  24. package/dist/src/agent-browser-provider.js +1 -1
  25. package/dist/src/agent-device-client.js +2 -2
  26. package/dist/src/alert-runtime.js +1 -1
  27. package/dist/src/alert.js +1 -1
  28. package/dist/src/android-adb.d.ts +3 -2
  29. package/dist/src/android-input-ownership.js +1 -1
  30. package/dist/src/app-backend.js +1 -1
  31. package/dist/src/app-inventory.d.ts +4 -0
  32. package/dist/src/app-launch.js +1 -1
  33. package/dist/src/app-lifecycle.js +1 -1
  34. package/dist/src/app-log-runtime2.js +3 -3
  35. package/dist/src/app-resolution.js +2 -2
  36. package/dist/src/app-state-runtime.d.ts +15 -0
  37. package/dist/src/apple-runner-platform.js +1 -1
  38. package/dist/src/application-lifecycle-interaction.js +1 -1
  39. package/dist/src/aws-device-farm-connection.js +1 -0
  40. package/dist/src/back-mode.js +1 -1
  41. package/dist/src/backend-snapshot-options.js +1 -1
  42. package/dist/src/browserstack-connection.js +1 -0
  43. package/dist/src/browserstack-device-features.js +1 -0
  44. package/dist/src/browserstack.js +1 -0
  45. package/dist/src/cache.js +1 -1
  46. package/dist/src/cli-config.js +1 -1
  47. package/dist/src/cli-help.js +35 -19
  48. package/dist/src/cli-runner.js +1 -1
  49. package/dist/src/cli.js +3 -4
  50. package/dist/src/client-companion-tunnel.js +1 -0
  51. package/dist/src/client-metro-companion.js +1 -1
  52. package/dist/src/client-metro.js +1 -1
  53. package/dist/src/client-types.d.ts +7 -5
  54. package/dist/src/cloud-artifacts.d.ts +3 -2
  55. package/dist/src/command-metadata.js +1 -1
  56. package/dist/src/command-schema.js +1 -1
  57. package/dist/src/command-tools.js +2 -2
  58. package/dist/src/connection-runtime.js +1 -1
  59. package/dist/src/connection-verification.js +1 -0
  60. package/dist/src/connection.js +5 -5
  61. package/dist/src/contracts.d.ts +1 -1
  62. package/dist/src/daemon-client-lease-beat.js +1 -1
  63. package/dist/src/daemon-client-lifecycle.js +1 -1
  64. package/dist/src/daemon-client-transport.js +1 -1
  65. package/dist/src/daemon-http.js +1 -1
  66. package/dist/src/daemon-policy-file.js +1 -1
  67. package/dist/src/daemon-registration-owner.js +1 -1
  68. package/dist/src/device-claim-inspection.js +1 -1
  69. package/dist/src/device-input-state.d.ts +2 -15
  70. package/dist/src/device-readiness-runtime.js +1 -1
  71. package/dist/src/device-selection-resolver.js +1 -1
  72. package/dist/src/device.js +1 -1
  73. package/dist/src/device2.js +1 -1
  74. package/dist/src/device3.js +1 -1
  75. package/dist/src/dispatch-resolve.js +3 -3
  76. package/dist/src/doctor-facade.js +1 -1
  77. package/dist/src/durable-capture-resource.js +1 -1
  78. package/dist/src/durable-resource.js +1 -1
  79. package/dist/src/exec.js +1 -1
  80. package/dist/src/file.js +1 -1
  81. package/dist/src/find.js +1 -1
  82. package/dist/src/finders.js +1 -1
  83. package/dist/src/format.js +2 -1
  84. package/dist/src/gesture-admission.js +1 -1
  85. package/dist/src/gesture-plan-types.d.ts +2 -5
  86. package/dist/src/gesture-runtime.js +1 -1
  87. package/dist/src/human-control.js +1 -1
  88. package/dist/src/ime-rebind.js +1 -1
  89. package/dist/src/ime-settings-record.js +1 -0
  90. package/dist/src/ime-state.js +1 -1
  91. package/dist/src/index.d.ts +3 -3
  92. package/dist/src/input-actions.js +1 -1
  93. package/dist/src/input-actions2.js +1 -1
  94. package/dist/src/install-source2.js +1 -1
  95. package/dist/src/interaction-positionals.js +1 -1
  96. package/dist/src/interaction-ref-policy.js +1 -1
  97. package/dist/src/interaction.js +1 -1
  98. package/dist/src/interaction2.js +1 -1
  99. package/dist/src/interactor.js +5 -5
  100. package/dist/src/interactors.js +1 -1
  101. package/dist/src/internal/bin.js +1 -1
  102. package/dist/src/internal/daemon.js +1 -1
  103. package/dist/src/inventory2.js +1 -1
  104. package/dist/src/ios-snapshot-acquisition.js +1 -1
  105. package/dist/src/ios-snapshot-engine.js +1 -1
  106. package/dist/src/ios-snapshot-runtime.js +1 -1
  107. package/dist/src/launch-confirmation.js +1 -1
  108. package/dist/src/lease-scope.js +1 -1
  109. package/dist/src/lease.js +1 -1
  110. package/dist/src/limrun.d.ts +4 -555
  111. package/dist/src/load.js +1 -1
  112. package/dist/src/local-interactor-operation-set.js +1 -1
  113. package/dist/src/managed-device-scope.js +1 -1
  114. package/dist/src/manifest.js +1 -0
  115. package/dist/src/mechanics.js +16 -16
  116. package/dist/src/mobile-snapshot-semantics.js +1 -1
  117. package/dist/src/observation.js +1 -2
  118. package/dist/src/overlay.js +3 -3
  119. package/dist/src/owner-identity.js +3 -3
  120. package/dist/src/perf-facade.js +1 -1
  121. package/dist/src/perf-runtime-plan.js +1 -1
  122. package/dist/src/perf-target.js +1 -1
  123. package/dist/src/physical-device-control.js +1 -1
  124. package/dist/src/platform-request-scope.js +1 -1
  125. package/dist/src/platform-runtime-open-target.js +1 -1
  126. package/dist/src/platform-runtime-operation-host.js +4 -4
  127. package/dist/src/platform-runtime-runtime-hints.js +1 -1
  128. package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
  129. package/dist/src/platform-runtime-unavailable.js +1 -1
  130. package/dist/src/platform-runtime.js +1 -1
  131. package/dist/src/platform-runtime2.js +1 -1
  132. package/dist/src/plugin.js +1 -0
  133. package/dist/src/plugins/webdriver.d.ts +111 -0
  134. package/dist/src/plugins/webdriver.js +1 -0
  135. package/dist/src/plugins.d.ts +2 -1
  136. package/dist/src/plugins2.js +1 -1
  137. package/dist/src/process-exit.js +1 -1
  138. package/dist/src/process.js +1 -1
  139. package/dist/src/provider-credential-fingerprint.js +1 -1
  140. package/dist/src/provider-device-admission.js +1 -1
  141. package/dist/src/provider-device-runtime.d.ts +556 -0
  142. package/dist/src/provider-policy.js +1 -0
  143. package/dist/src/provider-profile-fields.js +1 -1
  144. package/dist/src/provider-webdriver.js +1 -2
  145. package/dist/src/providers.js +1 -1
  146. package/dist/src/react-devtools.js +2 -0
  147. package/dist/src/react-native.js +1 -1
  148. package/dist/src/record-runtime.js +1 -1
  149. package/dist/src/record-trace.js +1 -1
  150. package/dist/src/recording.js +1 -1
  151. package/dist/src/registry.js +24 -24
  152. package/dist/src/remote-bridge.js +1 -0
  153. package/dist/src/remote-config-core.js +1 -0
  154. package/dist/src/remote-config.js +1 -1
  155. package/dist/src/remote-config2.js +1 -1
  156. package/dist/src/remote-connection-state.js +1 -0
  157. package/dist/src/replay.js +2 -2
  158. package/dist/src/request-admission.js +1 -1
  159. package/dist/src/request-runtime-binding.js +1 -1
  160. package/dist/src/result-serialization.js +1 -1
  161. package/dist/src/retry.js +1 -1
  162. package/dist/src/retry2.js +1 -0
  163. package/dist/src/runner-artifact-manifest.js +1 -1
  164. package/dist/src/runner-cache-metadata.js +2 -3
  165. package/dist/src/runner-cache-retention.js +1 -0
  166. package/dist/src/runner-cache-trim.js +1 -0
  167. package/dist/src/runner-client.js +1 -1
  168. package/dist/src/runner-dev-tools-security.js +1 -1
  169. package/dist/src/runner-device-readiness.js +1 -1
  170. package/dist/src/runner-device-set.js +1 -0
  171. package/dist/src/runner-disposal.js +1 -1
  172. package/dist/src/runner-error-classification.js +1 -1
  173. package/dist/src/runner-exchange.js +1 -1
  174. package/dist/src/runner-lease.js +1 -0
  175. package/dist/src/runner-operations-facade.js +1 -1
  176. package/dist/src/runner-session-types.js +1 -1
  177. package/dist/src/runner-start-budget.js +1 -1
  178. package/dist/src/runner-toolchain-probe.js +2 -0
  179. package/dist/src/runner.js +1 -1
  180. package/dist/src/runtime-deployment.js +1 -0
  181. package/dist/src/runtime.js +1 -1
  182. package/dist/src/runtime10.js +1 -2
  183. package/dist/src/runtime11.js +2 -0
  184. package/dist/src/runtime2.js +2 -5
  185. package/dist/src/runtime3.js +5 -1
  186. package/dist/src/runtime4.js +1 -5
  187. package/dist/src/runtime5.js +5 -1
  188. package/dist/src/runtime6.js +1 -1
  189. package/dist/src/runtime7.js +1 -1
  190. package/dist/src/runtime8.js +1 -1
  191. package/dist/src/runtime9.js +1 -1
  192. package/dist/src/screen-recording-transport.js +1 -1
  193. package/dist/src/screenshot-density.js +1 -1
  194. package/dist/src/screenshot3.js +2 -2
  195. package/dist/src/script.js +1 -1
  196. package/dist/src/scroll-gesture.js +1 -1
  197. package/dist/src/sdk-batch.js +2 -2
  198. package/dist/src/sdk-contracts.d.ts +20 -29
  199. package/dist/src/sdk-contracts.js +2 -2
  200. package/dist/src/sdk-device.js +1 -1
  201. package/dist/src/sdk-finders.d.ts +1 -1
  202. package/dist/src/sdk-finders.js +1 -1
  203. package/dist/src/sdk-remote-config.d.ts +4 -0
  204. package/dist/src/sdk-remote-config.js +1 -1
  205. package/dist/src/sdk-selectors.d.ts +1 -1
  206. package/dist/src/sdk-selectors.js +1 -1
  207. package/dist/src/selection.js +0 -0
  208. package/dist/src/selector-pipeline-policy.js +1 -1
  209. package/dist/src/selector-runtime.js +1 -1
  210. package/dist/src/selectors.js +1 -1
  211. package/dist/src/server.js +2 -2
  212. package/dist/src/session-snapshot.js +1 -1
  213. package/dist/src/session2.js +5 -5
  214. package/dist/src/simctl.js +1 -1
  215. package/dist/src/simulator-boot.js +1 -1
  216. package/dist/src/simulator-state.js +1 -1
  217. package/dist/src/simulator.js +1 -1
  218. package/dist/src/snapshot-capture-annotations.js +1 -1
  219. package/dist/src/snapshot-desktop-projection.js +1 -1
  220. package/dist/src/snapshot-private-evidence.js +1 -0
  221. package/dist/src/snapshot-runtime-binding.js +1 -1
  222. package/dist/src/snapshot-runtime.js +1 -1
  223. package/dist/src/snapshot-state.js +1 -1
  224. package/dist/src/snapshot4.js +1 -1
  225. package/dist/src/src2.js +1 -1
  226. package/dist/src/src3.js +1 -1
  227. package/dist/src/src4.js +1 -1
  228. package/dist/src/src5.js +1 -1
  229. package/dist/src/src6.js +1 -1
  230. package/dist/src/src7.js +1 -1
  231. package/dist/src/src8.js +20 -20
  232. package/dist/src/store.js +1 -1
  233. package/dist/src/target-evidence.js +1 -1
  234. package/dist/src/text-entry-focus.js +1 -1
  235. package/dist/src/tool-provider2.js +1 -1
  236. package/dist/src/touch-runtime2.js +1 -1
  237. package/dist/src/tree.js +1 -1
  238. package/dist/src/type-text-runtime.js +1 -1
  239. package/dist/src/video.js +1 -1
  240. package/package.json +15 -10
  241. package/server.json +2 -2
  242. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.23.apk.sha256 +0 -1
  243. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.23.apk.sha256 +0 -1
  244. package/dist/src/capabilities.js +0 -1
  245. package/dist/src/compatibility-policy.js +0 -1
  246. package/dist/src/daemon-artifacts.js +0 -1
  247. package/dist/src/device-claim-rule.js +0 -1
  248. package/dist/src/human-control-contract.js +0 -1
  249. package/dist/src/prepare-kind.js +0 -1
  250. package/dist/src/provider-device-runtimes.js +0 -1
  251. package/dist/src/screen-recording-admission-ledger.js +0 -1
  252. package/dist/src/screenshot-runtime.js +0 -1
  253. package/dist/src/session-routing.js +0 -1
  254. package/dist/src/session-runtime-admission.js +0 -1
  255. package/dist/src/timeouts.js +0 -1
  256. package/dist/src/touch-reference-frame.js +0 -1
  257. package/dist/src/vars.js +0 -2
  258. package/dist/src/viewport.js +0 -1
@@ -1 +1 @@
1
- import{P as e}from"./sdk-contracts.js";function t(e){return Object.freeze({family:e.platform,...e.appleOs===void 0?{}:{appleOs:e.appleOs},kind:e.kind,...e.target===void 0?{}:{target:e.target},...e.iosPhysicalDeviceBackend===void 0?{}:{iosPhysicalDeviceBackend:e.iosPhysicalDeviceBackend}})}function n(e){return Object.freeze({id:e.id,...t(e)})}function r(e){return JSON.stringify([e.id,...o(e)])}function i(e,t){return r(e)===r(t)}function a(e,t){return JSON.stringify(o(e))===JSON.stringify(o(t))}function o(e){return[e.family,e.appleOs??null,e.kind,e.target??null,e.iosPhysicalDeviceBackend??null]}const s=[`ios`,`ipados`,`tvos`,`watchos`,`visionos`,`macos`],c=[`apple`,`android`,`harmonyos`,`vega`,`linux`,`web`],l=[`ios`,`macos`,`android`,`harmonyos`,`vega`,`linux`,`web`],u=[...c,`ios`,`macos`],ee=[`simulator`,`emulator`,`device`],te=[`mobile`,`tv`,`desktop`];function d(e){return[e.deviceName,e.udid,e.serial].some(e=>typeof e==`string`&&e.trim().length>0)}function f(e){return e===`apple`||e===`ios`||e===`macos`}function p(e){return e.appleOs===`macos`||e.platform===`macos`}function m(e){return f(e.platform)&&!p(e)}function h(e){if(e.kind!==`simulator`)return!1;let t=x(e);return t===`ios`||t===`ipados`}function g(e){return e.platform===`android`||e.platform===`harmonyos`||f(e.platform)&&!p(e)}function _(e){return f(e.platform)?p(e)?`macos`:`ios`:e.platform}function v(e){return e===`macos`?{platform:`apple`,appleOs:`macos`}:e===`ios`?{platform:`apple`}:{platform:e}}function y(e){return f(e.platform)&&e.target===`tv`}function b(e){return m(e)&&!y(e)&&e.appleOs!==`visionos`}function x(e){return e.appleOs?e.appleOs:e.platform===`macos`?`macos`:y(e)?`tvos`:`ios`}function ne(e){let t=x(e);return t===`ios`||t===`ipados`}function re(e){return c.includes(e)}function ie(e){return l.includes(e)}function S(e){return s.includes(e)}function C(e,t){return t?t===`apple`?f(e.platform):t===`ios`?f(e.platform)&&!p(e):t===`macos`?f(e.platform)&&p(e):e.platform===t:!0}function w(e,t){return!e||!t||e===t?!1:e===`apple`?!f(t):t!==`apple`||!f(e)}function T(e,t){return t?E(t):e===`macos`||e===`desktop`?`macOS`:e===`tv`?`tvOS`:`iOS`}function E(e){switch(e){case`tvos`:return`tvOS`;case`macos`:return`macOS`;case`visionos`:return`visionOS`;default:return`iOS`}}function D(e){let{simulatorSetPath:t,platform:n,target:r}=e;if(t&&n!==`macos`&&r!==`desktop`)return t}function O(e){return e.map((e,t)=>({device:e,index:t})).sort((e,t)=>ae(e,t)).map(({device:e})=>e)}function k(e){return!e||e===`apple`||e===`ios`}async function A(e,t,n={}){let r=e.filter(e=>W(e,t));return j(r,t)||F(r,t.deviceName)||($(r)&&(r=O(r)),R(r,t,n))}function j(e,t){if(M(t),t.udid)return N(e,t.udid);if(t.serial)return P(e,t)}function M(t){let n=t.platform;if(n){if(t.udid&&K(n))throw new e(`INVALID_ARGS`,`--udid selects Apple devices, but this request selected --platform ${n}.`,{hint:`Use --serial ${t.udid} for ${n} devices.`});if(t.serial&&f(n))throw new e(`INVALID_ARGS`,`--serial selects Android and HarmonyOS devices, but this request selected --platform ${n}.`,{hint:`Use --udid ${t.serial} for Apple devices.`})}}function N(t,n){let r=t.find(e=>e.id===n&&f(e.platform));if(!r)throw new e(`DEVICE_NOT_FOUND`,`No Apple device with UDID ${n}`);return r}function P(t,n){let r=t.find(e=>e.id===n.serial&&K(e.platform));if(!r)throw new e(`DEVICE_NOT_FOUND`,q(n));return r}function F(t,n){if(!n)return;let r=t.find(e=>Y(e,n));if(!r){let r=I(t,n);throw new e(`DEVICE_NOT_FOUND`,`No device named ${n}`,r===void 0?void 0:{hint:r})}return r}function I(e,t){let n=e.find(e=>e.id===t);if(!n)return;let r=L(n.platform);if(r)return`${t} is the id of ${JSON.stringify(n.name)}, not its name. Did you mean --${r} ${t}?`}function L(e){if(f(e))return`udid`;if(K(e))return`serial`}function R(e,t,n){let r=e[0];if(r!==void 0&&e.length===1)return r;e.length===0&&J(t,n);let i=V(e);i.length>1&&z(i);let a=i[0];return a||J(t,n),a}function z(t){let n=t.slice(0,10);throw new e(`AMBIGUOUS_MATCH`,`${t.length} devices match this request equally; select one explicitly.`,{devices:n.map(e=>({id:e.id,name:e.name})),matches:t.length,hint:B(n)})}function B(e){let t=e[0];return`Select the intended device explicitly, for example ${t?`--${L(t.platform)??`udid`} ${t.id}`:`--udid <id>`} or --device ${JSON.stringify(t?.name??`<name>`)}. Run agent-device devices to list them.`}function V(e){let t=$(e)?U(e):H(e),n=t.filter(e=>e.booted);return n.length>0?n:t}function H(e){let t=e.filter(e=>e.kind!==`device`);return t.length>0?t:e}function U(e){let t=Math.min(...e.map(e=>Z(e)));return e.filter(e=>Z(e)===t)}function W(e,t,n={}){return C(e,t.platform)&&(!t.target||(e.target??`mobile`)===t.target)&&(!n.includeExplicitSelectors||G(e,t))}function G(e,t){return!(t.udid&&!(e.id===t.udid&&f(e.platform))||t.serial&&!(e.id===t.serial&&K(e.platform))||t.deviceName&&!Y(e,t.deviceName))}function K(e){return e===`android`||e===`harmonyos`||e===`vega`}function q(e){return e.platform===`android`?`No Android device with serial ${e.serial}`:e.platform===`vega`?`No Vega VVD with serial ${e.serial}`:e.platform===`harmonyos`?`No HarmonyOS device with serial ${e.serial}`:`No Android, HarmonyOS device, or Vega VVD with serial ${e.serial}`}function J(t,n){let r=n.simulatorSetPath;throw r&&k(t.platform)?new e(`DEVICE_NOT_FOUND`,`No devices found in the scoped simulator set`,{simulatorSetPath:r,hint:`The simulator set at "${r}" appears to be empty. Create a compatible simulator first with xcrun simctl --set "${r}" create, or remove the scoped simulator set.`,selector:t}):new e(`DEVICE_NOT_FOUND`,`No devices found`,{selector:t})}function Y(e,t){return X(e.name)===X(t)}function X(e){return e.toLowerCase().replaceAll(`_`,` `).replaceAll(/\s+/g,` `).trim()}function ae(e,t){return Z(e.device)-Z(t.device)||Number(t.device.booted===!0)-Number(e.device.booted===!0)||e.device.name.localeCompare(t.device.name)||e.index-t.index}function Z(e){return e.kind===`simulator`?Q(e,0,1,2,3):e.kind===`device`&&f(e.platform)&&!p(e)?Q(e,10,11,12,13):14}function Q(e,t,n,r,i){return{mobile:oe(e.name)?n:t,tv:r,desktop:i}[e.target??`mobile`]}function $(e){return e.length>0&&e.every(e=>f(e.platform))}function oe(e){return/\bipad\b/i.test(e)}export{O as A,w as C,A as D,D as E,a as F,r as M,t as N,x as O,i as P,C as S,T,ie as _,l as a,Y as b,ne as c,f as d,h as f,re as g,g as h,u as i,n as j,b as k,d as l,p as m,te as n,v as o,m as p,c as r,L as s,ee as t,S as u,K as v,_ as w,W as x,y};
1
+ import{r as e}from"./rolldown-runtime.js";import{P as t}from"./sdk-contracts.js";function n(e){return Object.freeze({family:e.platform,...e.appleOs===void 0?{}:{appleOs:e.appleOs},kind:e.kind,...e.target===void 0?{}:{target:e.target},...e.iosPhysicalDeviceBackend===void 0?{}:{iosPhysicalDeviceBackend:e.iosPhysicalDeviceBackend}})}function r(e){return Object.freeze({id:e.id,...n(e)})}function i(e){return JSON.stringify([e.id,...s(e)])}function a(e,t){return i(e)===i(t)}function o(e,t){return JSON.stringify(s(e))===JSON.stringify(s(t))}function s(e){return[e.family,e.appleOs??null,e.kind,e.target??null,e.iosPhysicalDeviceBackend??null]}var ee=e({DEVICE_KINDS:()=>f,DEVICE_TARGETS:()=>p,PLATFORMS:()=>l,PLATFORM_SELECTORS:()=>d,PUBLIC_PLATFORMS:()=>u,deviceFieldsFromPublicPlatform:()=>S,deviceIdentityFlag:()=>R,hasAppleActionButton:()=>E,hasExplicitDeviceIdentitySelector:()=>m,isAppleOs:()=>k,isApplePlatform:()=>h,isHandheldAppleDevice:()=>y,isHandheldAppleSimulator:()=>v,isIosFamily:()=>_,isMacOs:()=>g,isMobilePlatform:()=>b,isPlatform:()=>D,isPublicPlatform:()=>O,isSerialAddressablePlatform:()=>q,isTvOsDevice:()=>C,matchesDeviceNameSelector:()=>Y,matchesDeviceSelector:()=>G,matchesPlatformSelector:()=>A,platformSelectorsConflict:()=>j,publicPlatformString:()=>x,resolveApplePlatformName:()=>M,resolveAppleSimulatorSetPathForSelector:()=>N,resolveDevice:()=>F,resolveDeviceAppleOs:()=>T,runnerSynthesizesTap:()=>w,sortAppleDevicesForSelection:()=>P});const c=[`ios`,`ipados`,`tvos`,`watchos`,`visionos`,`macos`],l=[`apple`,`android`,`harmonyos`,`vega`,`linux`,`web`],u=[`ios`,`macos`,`android`,`harmonyos`,`vega`,`linux`,`web`],d=[...l,`ios`,`macos`],f=[`simulator`,`emulator`,`device`],p=[`mobile`,`tv`,`desktop`];function m(e){return[e.deviceName,e.udid,e.serial].some(e=>typeof e==`string`&&e.trim().length>0)}function h(e){return e===`apple`||e===`ios`||e===`macos`}function g(e){return e.appleOs===`macos`||e.platform===`macos`}function _(e){return h(e.platform)&&!g(e)}function v(e){if(e.kind!==`simulator`)return!1;let t=T(e);return t===`ios`||t===`ipados`}function y(e){if(!_(e))return!1;let t=T(e);return t===`ios`||t===`ipados`}function b(e){return e.platform===`android`||e.platform===`harmonyos`||h(e.platform)&&!g(e)}function x(e){return h(e.platform)?g(e)?`macos`:`ios`:e.platform}function S(e){return e===`macos`?{platform:`apple`,appleOs:`macos`}:e===`ios`?{platform:`apple`}:{platform:e}}function C(e){return h(e.platform)&&e.target===`tv`}function w(e){return _(e)&&!C(e)&&e.appleOs!==`visionos`}function T(e){return e.appleOs?e.appleOs:e.platform===`macos`?`macos`:C(e)?`tvos`:`ios`}function E(e){let t=T(e);return t===`ios`||t===`ipados`}function D(e){return l.includes(e)}function O(e){return u.includes(e)}function k(e){return c.includes(e)}function A(e,t){return t?t===`apple`?h(e.platform):t===`ios`?h(e.platform)&&!g(e):t===`macos`?h(e.platform)&&g(e):e.platform===t:!0}function j(e,t){return!e||!t||e===t?!1:e===`apple`?!h(t):t!==`apple`||!h(e)}function M(e,t){return t?te(t):e===`macos`||e===`desktop`?`macOS`:e===`tv`?`tvOS`:`iOS`}function te(e){switch(e){case`tvos`:return`tvOS`;case`macos`:return`macOS`;case`visionos`:return`visionOS`;default:return`iOS`}}function N(e){let{simulatorSetPath:t,platform:n,target:r}=e;if(t&&n!==`macos`&&r!==`desktop`)return t}function P(e){return e.map((e,t)=>({device:e,index:t})).sort((e,t)=>ce(e,t)).map(({device:e})=>e)}function ne(e){return!e||e===`apple`||e===`ios`}async function F(e,t,n={}){let r=e.filter(e=>G(e,t));return re(r,t)||I(r,t.deviceName)||($(r)&&(r=P(r)),z(r,t,n))}function re(e,t){if(ie(t),t.udid)return ae(e,t.udid);if(t.serial)return oe(e,t)}function ie(e){let n=e.platform;if(n){if(e.udid&&q(n))throw new t(`INVALID_ARGS`,`--udid selects Apple devices, but this request selected --platform ${n}.`,{hint:`Use --serial ${e.udid} for ${n} devices.`});if(e.serial&&h(n))throw new t(`INVALID_ARGS`,`--serial selects Android and HarmonyOS devices, but this request selected --platform ${n}.`,{hint:`Use --udid ${e.serial} for Apple devices.`})}}function ae(e,n){let r=e.find(e=>e.id===n&&h(e.platform));if(!r)throw new t(`DEVICE_NOT_FOUND`,`No Apple device with UDID ${n}`);return r}function oe(e,n){let r=e.find(e=>e.id===n.serial&&q(e.platform));if(!r)throw new t(`DEVICE_NOT_FOUND`,se(n));return r}function I(e,n){if(!n)return;let r=e.find(e=>Y(e,n));if(!r){let r=L(e,n);throw new t(`DEVICE_NOT_FOUND`,`No device named ${n}`,r===void 0?void 0:{hint:r})}return r}function L(e,t){let n=e.find(e=>e.id===t);if(!n)return;let r=R(n.platform);if(r)return`${t} is the id of ${JSON.stringify(n.name)}, not its name. Did you mean --${r} ${t}?`}function R(e){if(h(e))return`udid`;if(q(e))return`serial`}function z(e,t,n){let r=e[0];if(r!==void 0&&e.length===1)return r;e.length===0&&J(t,n);let i=H(e);i.length>1&&B(i);let a=i[0];return a||J(t,n),a}function B(e){let n=e.slice(0,10);throw new t(`AMBIGUOUS_MATCH`,`${e.length} devices match this request equally; select one explicitly.`,{devices:n.map(e=>({id:e.id,name:e.name})),matches:e.length,hint:V(n)})}function V(e){let t=e[0];return`Select the intended device explicitly, for example ${t?`--${R(t.platform)??`udid`} ${t.id}`:`--udid <id>`} or --device ${JSON.stringify(t?.name??`<name>`)}. Run agent-device devices to list them.`}function H(e){let t=$(e)?W(e):U(e),n=t.filter(e=>e.booted);return n.length>0?n:t}function U(e){let t=e.filter(e=>e.kind!==`device`);return t.length>0?t:e}function W(e){let t=Math.min(...e.map(e=>Z(e)));return e.filter(e=>Z(e)===t)}function G(e,t,n={}){return A(e,t.platform)&&(!t.target||(e.target??`mobile`)===t.target)&&(!n.includeExplicitSelectors||K(e,t))}function K(e,t){return!(t.udid&&!(e.id===t.udid&&h(e.platform))||t.serial&&!(e.id===t.serial&&q(e.platform))||t.deviceName&&!Y(e,t.deviceName))}function q(e){return e===`android`||e===`harmonyos`||e===`vega`}function se(e){return e.platform===`android`?`No Android device with serial ${e.serial}`:e.platform===`vega`?`No Vega VVD with serial ${e.serial}`:e.platform===`harmonyos`?`No HarmonyOS device with serial ${e.serial}`:`No Android, HarmonyOS device, or Vega VVD with serial ${e.serial}`}function J(e,n){let r=n.simulatorSetPath;throw r&&ne(e.platform)?new t(`DEVICE_NOT_FOUND`,`No devices found in the scoped simulator set`,{simulatorSetPath:r,hint:`The simulator set at "${r}" appears to be empty. Create a compatible simulator first with xcrun simctl --set "${r}" create, or remove the scoped simulator set.`,selector:e}):new t(`DEVICE_NOT_FOUND`,`No devices found`,{selector:e})}function Y(e,t){return X(e.name)===X(t)}function X(e){return e.toLowerCase().replaceAll(`_`,` `).replaceAll(/\s+/g,` `).trim()}function ce(e,t){return Z(e.device)-Z(t.device)||Number(t.device.booted===!0)-Number(e.device.booted===!0)||e.device.name.localeCompare(t.device.name)||e.index-t.index}function Z(e){return e.kind===`simulator`?Q(e,0,1,2,3):e.kind===`device`&&h(e.platform)&&!g(e)?Q(e,10,11,12,13):14}function Q(e,t,n,r,i){return{mobile:le(e.name)?n:t,tv:r,desktop:i}[e.target??`mobile`]}function $(e){return e.length>0&&e.every(e=>h(e.platform))}function le(e){return/\bipad\b/i.test(e)}export{T as A,G as C,M as D,x as E,n as F,a as I,o as L,P as M,r as N,N as O,i as P,Y as S,j as T,b as _,u as a,q as b,ee as c,k as d,h as f,g,_ as h,d as i,w as j,F as k,E as l,v as m,p as n,S as o,y as p,l as r,R as s,f as t,m as u,D as v,A as w,C as x,O as y};
@@ -1,4 +1,4 @@
1
- import { P as SnapshotNode } from "./sdk-contracts.js";
1
+ import { F as SnapshotNode } from "./sdk-contracts.js";
2
2
  //#region packages/selectors/src/internal/find.d.ts
3
3
  declare const FIND_LOCATORS: readonly ['any', 'text', 'label', 'value', 'role', 'id'];
4
4
  type FindLocator = (typeof FIND_LOCATORS)[number];
@@ -1 +1 @@
1
- import{Pn as e}from"./sdk-batch.js";function t(t,n,r,i){return e(t,n,r,typeof i==`boolean`?{requireRect:i}:i)}export{t};
1
+ import{Fn as e}from"./sdk-batch.js";function t(t,n,r,i){return e(t,n,r,typeof i==`boolean`?{requireRect:i}:i)}export{t};
@@ -107,9 +107,13 @@ type MetroReloadResult = ReloadMetroResult;
107
107
  */
108
108
  declare const PROVIDER_DEVICE_ORIENTATIONS: readonly ['portrait', 'landscape'];
109
109
  type ProviderDeviceOrientation = (typeof PROVIDER_DEVICE_ORIENTATIONS)[number];
110
+ /** Device pool a hosted provider session is created in: physical devices or emulators/simulators. */
111
+ declare const PROVIDER_DEVICE_TYPES: readonly ['real', 'virtual'];
112
+ type ProviderDeviceType = (typeof PROVIDER_DEVICE_TYPES)[number];
110
113
  type CloudProviderProfileFields = {
111
114
  providerApp?: string;
112
115
  providerOsVersion?: string;
116
+ providerDeviceType?: ProviderDeviceType;
113
117
  providerProject?: string;
114
118
  providerBuild?: string;
115
119
  providerSessionName?: string;
@@ -1 +1 @@
1
- import{P as e,t}from"./sdk-contracts.js";import{i as n}from"./sdk-device.js";const r=[`portrait`,`landscape`],i={providerApp:`--provider-app`,providerOsVersion:`--provider-os-version`,providerProject:`--provider-project`,providerBuild:`--provider-build`,providerSessionName:`--provider-session-name`,providerDeviceOrientation:`--provider-device-orientation`,providerGeoLocation:`--provider-geo-location`,providerTimezone:`--provider-timezone`,providerAppiumVersion:`--provider-appium-version`,providerLanguage:`--provider-language`,providerLocale:`--provider-locale`,providerNetworkProfile:`--provider-network-profile`,providerCustomNetwork:`--provider-custom-network`,providerNoResignApp:`--provider-no-resign-app`,awsProjectArn:`--aws-project-arn`,awsDeviceArn:`--aws-device-arn`,awsAppArn:`--aws-app-arn`,awsRegion:`--aws-region`,awsInteractionMode:`--aws-interaction-mode`},a={providerOsVersion:[`--os-version`],providerDeviceOrientation:[`--device-orientation`],providerGeoLocation:[`--geo-location`],providerTimezone:[`--timezone`],providerAppiumVersion:[`--appium-version`],providerLanguage:[`--language`],providerLocale:[`--locale`],providerNetworkProfile:[`--network-profile`],providerCustomNetwork:[`--custom-network`]},o=new Set([`1`,`true`,`yes`,`on`]),s=new Set([`0`,`false`,`no`,`off`]);function c(e){return`AGENT_DEVICE_${e.replaceAll(/([A-Z])/g,`_$1`).replaceAll(/[^A-Za-z0-9_]/g,`_`).toUpperCase()}`}function l(t,n,r,i){if(t.multiple)return(Array.isArray(n)?n:[n]).map(e=>l({...t,multiple:!1},e,r,i));if(t.type===`boolean`)return u(n,r,i);if(t.type===`booleanOrString`){if(typeof n==`boolean`)return n;if(typeof n==`string`&&d(n)!==void 0)return d(n);if(typeof n==`string`&&n.trim().length>0)return n;throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected boolean or non-empty string.`)}if(t.type===`string`){if(typeof n==`string`&&n.trim().length>0)return n;throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected non-empty string.`)}if(t.type===`enum`){if(t.setValue!==void 0)return f(t,n,r,i);if(typeof n!=`string`||!t.enumValues?.includes(n))throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected one of: ${t.enumValues?.join(`, `)}.`);return n}let a=typeof n==`number`?n:typeof n==`string`?Number(n):NaN;if(!Number.isFinite(a)||t.type===`int`&&!Number.isInteger(a))throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected ${t.type===`int`?`integer`:`number`}.`);if(typeof t.min==`number`&&a<t.min)throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Must be >= ${t.min}.`);if(typeof t.max==`number`&&a>t.max)throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Must be <= ${t.max}.`);return a}function u(t,n,r){if(typeof t==`boolean`)return t;if(typeof t==`string`){let e=d(t);if(e!==void 0)return e}throw new e(`INVALID_ARGS`,`Invalid value for "${r}" in ${n}. Expected boolean.`)}function d(e){let t=e.trim().toLowerCase();if(o.has(t))return!0;if(s.has(t))return!1}function f(t,n,r,i){let a=t.setValue;if(n===a)return a;if(typeof n==`string`){let e=n.trim();if(e===``||e===`true`||e===`1`)return a;if(e===`false`||e===`0`)return}if(n===!0)return a;if(n!==!1)throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected boolean-like value for enum flag.`)}const p=[{key:`stateDir`,type:`string`,path:!0},{key:`daemonBaseUrl`,type:`string`},{key:`daemonAuthToken`,type:`string`},{key:`daemonTransport`,type:`enum`,enumValues:[`auto`,`socket`,`http`]},{key:`daemonServerMode`,type:`enum`,enumValues:[`socket`,`http`,`dual`]},{key:`tenant`,type:`string`},{key:`sessionIsolation`,type:`enum`,enumValues:[`none`,`tenant`]},{key:`runId`,type:`string`},{key:`leaseId`,type:`string`},{key:`leaseBackend`,type:`enum`,enumValues:t},{key:`platform`,type:`enum`,enumValues:n},{key:`target`,type:`enum`,enumValues:[`mobile`,`tv`,`desktop`]},{key:`device`,type:`string`},{key:`udid`,type:`string`},{key:`serial`,type:`string`},{key:`iosSimulatorDeviceSet`,type:`string`,path:!0,env:!1},{key:`androidDeviceAllowlist`,type:`string`},{key:`session`,type:`string`},{key:`providerApp`,type:`string`},{key:`providerOsVersion`,type:`string`},{key:`providerProject`,type:`string`},{key:`providerBuild`,type:`string`},{key:`providerSessionName`,type:`string`},{key:`providerDeviceOrientation`,type:`enum`,enumValues:r},{key:`providerGeoLocation`,type:`string`},{key:`providerTimezone`,type:`string`},{key:`providerAppiumVersion`,type:`string`},{key:`providerLanguage`,type:`string`},{key:`providerLocale`,type:`string`},{key:`providerNetworkProfile`,type:`string`},{key:`providerCustomNetwork`,type:`string`},{key:`providerNoResignApp`,type:`boolean`},{key:`awsProjectArn`,type:`string`},{key:`awsDeviceArn`,type:`string`},{key:`awsAppArn`,type:`string`},{key:`awsRegion`,type:`string`},{key:`awsInteractionMode`,type:`enum`,enumValues:[`INTERACTIVE`,`NO_VIDEO`,`VIDEO_ONLY`]},{key:`metroProjectRoot`,type:`string`,path:!0},{key:`metroKind`,type:`enum`,enumValues:[`auto`,`react-native`,`expo`,`repack`]},{key:`metroPublicBaseUrl`,type:`string`},{key:`metroProxyBaseUrl`,type:`string`},{key:`metroBearerToken`,type:`string`},{key:`metroPreparePort`,type:`int`,min:1,max:65535},{key:`metroListenHost`,type:`string`},{key:`metroStatusHost`,type:`string`},{key:`metroStartupTimeoutMs`,type:`int`,min:1},{key:`metroProbeTimeoutMs`,type:`int`,min:1},{key:`metroRuntimeFile`,type:`string`,path:!0},{key:`metroNoReuseExisting`,type:`boolean`},{key:`metroNoInstallDeps`,type:`boolean`},{key:`launchUrl`,type:`string`}],m=[{key:`leaseProvider`,type:`string`,env:!1},{key:`deviceKey`,type:`string`,env:!1},{key:`clientId`,type:`string`,env:!1}],h=[...p,...m],g=new Map(h.map(e=>[e.key,e]));function _(e){return g.get(e)}function v(e){return _(e)?.env===!1?[]:[c(e)]}export{c as a,r as c,_ as i,i as l,h as n,d as o,v as r,l as s,p as t,a as u};
1
+ import{P as e,t}from"./sdk-contracts.js";import{i as n}from"./sdk-device.js";const r=[`portrait`,`landscape`],i=[`real`,`virtual`],a={providerApp:`--provider-app`,providerOsVersion:`--provider-os-version`,providerDeviceType:`--provider-device-type`,providerProject:`--provider-project`,providerBuild:`--provider-build`,providerSessionName:`--provider-session-name`,providerDeviceOrientation:`--provider-device-orientation`,providerGeoLocation:`--provider-geo-location`,providerTimezone:`--provider-timezone`,providerAppiumVersion:`--provider-appium-version`,providerLanguage:`--provider-language`,providerLocale:`--provider-locale`,providerNetworkProfile:`--provider-network-profile`,providerCustomNetwork:`--provider-custom-network`,providerNoResignApp:`--provider-no-resign-app`,awsProjectArn:`--aws-project-arn`,awsDeviceArn:`--aws-device-arn`,awsAppArn:`--aws-app-arn`,awsRegion:`--aws-region`,awsInteractionMode:`--aws-interaction-mode`},o={providerOsVersion:[`--os-version`],providerDeviceOrientation:[`--device-orientation`],providerGeoLocation:[`--geo-location`],providerTimezone:[`--timezone`],providerAppiumVersion:[`--appium-version`],providerLanguage:[`--language`],providerLocale:[`--locale`],providerNetworkProfile:[`--network-profile`],providerCustomNetwork:[`--custom-network`]},s=new Set([`1`,`true`,`yes`,`on`]),c=new Set([`0`,`false`,`no`,`off`]);function l(e){return`AGENT_DEVICE_${e.replaceAll(/([A-Z])/g,`_$1`).replaceAll(/[^A-Za-z0-9_]/g,`_`).toUpperCase()}`}function u(t,n,r,i){if(t.multiple)return(Array.isArray(n)?n:[n]).map(e=>u({...t,multiple:!1},e,r,i));if(t.type===`boolean`)return d(n,r,i);if(t.type===`booleanOrString`){if(typeof n==`boolean`)return n;if(typeof n==`string`&&f(n)!==void 0)return f(n);if(typeof n==`string`&&n.trim().length>0)return n;throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected boolean or non-empty string.`)}if(t.type===`string`){if(typeof n==`string`&&n.trim().length>0)return n;throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected non-empty string.`)}if(t.type===`enum`){if(t.setValue!==void 0)return p(t,n,r,i);if(typeof n!=`string`||!t.enumValues?.includes(n))throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected one of: ${t.enumValues?.join(`, `)}.`);return n}let a=typeof n==`number`?n:typeof n==`string`?Number(n):NaN;if(!Number.isFinite(a)||t.type===`int`&&!Number.isInteger(a))throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected ${t.type===`int`?`integer`:`number`}.`);if(typeof t.min==`number`&&a<t.min)throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Must be >= ${t.min}.`);if(typeof t.max==`number`&&a>t.max)throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Must be <= ${t.max}.`);return a}function d(t,n,r){if(typeof t==`boolean`)return t;if(typeof t==`string`){let e=f(t);if(e!==void 0)return e}throw new e(`INVALID_ARGS`,`Invalid value for "${r}" in ${n}. Expected boolean.`)}function f(e){let t=e.trim().toLowerCase();if(s.has(t))return!0;if(c.has(t))return!1}function p(t,n,r,i){let a=t.setValue;if(n===a)return a;if(typeof n==`string`){let e=n.trim();if(e===``||e===`true`||e===`1`)return a;if(e===`false`||e===`0`)return}if(n===!0)return a;if(n!==!1)throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected boolean-like value for enum flag.`)}const m=[{key:`stateDir`,type:`string`,path:!0},{key:`daemonBaseUrl`,type:`string`},{key:`daemonAuthToken`,type:`string`},{key:`daemonTransport`,type:`enum`,enumValues:[`auto`,`socket`,`http`]},{key:`daemonServerMode`,type:`enum`,enumValues:[`socket`,`http`,`dual`]},{key:`tenant`,type:`string`},{key:`sessionIsolation`,type:`enum`,enumValues:[`none`,`tenant`]},{key:`runId`,type:`string`},{key:`leaseId`,type:`string`},{key:`leaseBackend`,type:`enum`,enumValues:t},{key:`platform`,type:`enum`,enumValues:n},{key:`target`,type:`enum`,enumValues:[`mobile`,`tv`,`desktop`]},{key:`device`,type:`string`},{key:`udid`,type:`string`},{key:`serial`,type:`string`},{key:`iosSimulatorDeviceSet`,type:`string`,path:!0,env:!1},{key:`androidDeviceAllowlist`,type:`string`},{key:`session`,type:`string`},{key:`providerApp`,type:`string`},{key:`providerOsVersion`,type:`string`},{key:`providerDeviceType`,type:`enum`,enumValues:i},{key:`providerProject`,type:`string`},{key:`providerBuild`,type:`string`},{key:`providerSessionName`,type:`string`},{key:`providerDeviceOrientation`,type:`enum`,enumValues:r},{key:`providerGeoLocation`,type:`string`},{key:`providerTimezone`,type:`string`},{key:`providerAppiumVersion`,type:`string`},{key:`providerLanguage`,type:`string`},{key:`providerLocale`,type:`string`},{key:`providerNetworkProfile`,type:`string`},{key:`providerCustomNetwork`,type:`string`},{key:`providerNoResignApp`,type:`boolean`},{key:`awsProjectArn`,type:`string`},{key:`awsDeviceArn`,type:`string`},{key:`awsAppArn`,type:`string`},{key:`awsRegion`,type:`string`},{key:`awsInteractionMode`,type:`enum`,enumValues:[`INTERACTIVE`,`NO_VIDEO`,`VIDEO_ONLY`]},{key:`metroProjectRoot`,type:`string`,path:!0},{key:`metroKind`,type:`enum`,enumValues:[`auto`,`react-native`,`expo`,`repack`]},{key:`metroPublicBaseUrl`,type:`string`},{key:`metroProxyBaseUrl`,type:`string`},{key:`metroBearerToken`,type:`string`},{key:`metroPreparePort`,type:`int`,min:1,max:65535},{key:`metroListenHost`,type:`string`},{key:`metroStatusHost`,type:`string`},{key:`metroStartupTimeoutMs`,type:`int`,min:1},{key:`metroProbeTimeoutMs`,type:`int`,min:1},{key:`metroRuntimeFile`,type:`string`,path:!0},{key:`metroNoReuseExisting`,type:`boolean`},{key:`metroNoInstallDeps`,type:`boolean`},{key:`launchUrl`,type:`string`}],h=[{key:`leaseProvider`,type:`string`,env:!1},{key:`deviceKey`,type:`string`,env:!1},{key:`clientId`,type:`string`,env:!1}],g=[...m,...h],_=new Map(g.map(e=>[e.key,e]));function v(e){return _.get(e)}function y(e){return v(e)?.env===!1?[]:[l(e)]}export{l as a,r as c,o as d,v as i,i as l,g as n,f as o,y as r,u as s,m as t,a as u};
@@ -1,4 +1,4 @@
1
- import { A as Rect, C as Platform, P as SnapshotNode, R as SnapshotState, T as PublicPlatform, h as ResponseCost } from "./sdk-contracts.js";
1
+ import { C as Platform, F as SnapshotNode, T as PublicPlatform, h as ResponseCost, j as Rect, z as SnapshotState } from "./sdk-contracts.js";
2
2
  //#region packages/contracts/src/fill-evidence.d.ts
3
3
  /**
4
4
  * The evidence a `fill` carries when it changed a field but could not confirm the text it sent.
@@ -1 +1 @@
1
- import{Tn as e}from"./sdk-batch.js";function t(t,n,r){return e(typeof t==`string`?t:t.raw,n,r)}export{t};
1
+ import{En as e}from"./sdk-batch.js";function t(t,n,r){return e(typeof t==`string`?t:t.raw,n,r)}export{t};
Binary file
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime.js";import{xn as t}from"./sdk-batch.js";var n=e({SELECTOR_PIPELINE_POLICIES:()=>i,readinessScheduleFor:()=>a});const r={defaultTimeoutMs:1e4,intervalMs:300},i={promotedTarget:{resolution:t.act,occlusion:`exclude-and-refuse`,offscreen:`refuse`,promotion:`hittable-ancestor`,poll:{maxTimeoutMs:2e3,intervalMs:200}},resolvedTarget:{resolution:t.act,occlusion:`exclude-and-refuse`,offscreen:`refuse`,promotion:`none`,poll:`none`},coveredDiagnosis:{resolution:t.actCoveredDiagnosis,occlusion:`refuse`,offscreen:`ignore`,promotion:`none`,poll:`none`},readText:{resolution:t.readText,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`},readUnique:{resolution:t.readUnique,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`},readAny:{resolution:t.readAny,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`},findWait:{resolution:t.readAny,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:r},wait:{resolution:t.wait,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:r},readList:{resolution:t.readList,occlusion:`ignore`},findAct:{resolution:t.findAct,occlusion:`refuse`,offscreen:`ignore`,promotion:`hittable-ancestor-below-root`,poll:`none`},cropTarget:{resolution:t.cropTarget,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`}};function a(e,t){if(e!==`none`&&!(t===void 0||!Number.isInteger(t))&&!(t<=0))return{intervalMs:e.intervalMs,budgetMs:Math.min(t,e.maxTimeoutMs),budgetFrom:`first-capture`}}export{a as n,n as r,i as t};
1
+ import{r as e}from"./rolldown-runtime.js";import{Sn as t}from"./sdk-batch.js";var n=e({SELECTOR_PIPELINE_POLICIES:()=>i,readinessScheduleFor:()=>a});const r={defaultTimeoutMs:1e4,intervalMs:300},i={promotedTarget:{resolution:t.act,occlusion:`exclude-and-refuse`,offscreen:`refuse`,promotion:`hittable-ancestor`,poll:{maxTimeoutMs:2e3,intervalMs:200}},resolvedTarget:{resolution:t.act,occlusion:`exclude-and-refuse`,offscreen:`refuse`,promotion:`none`,poll:`none`},coveredDiagnosis:{resolution:t.actCoveredDiagnosis,occlusion:`refuse`,offscreen:`ignore`,promotion:`none`,poll:`none`},readText:{resolution:t.readText,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`},readUnique:{resolution:t.readUnique,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`},readAny:{resolution:t.readAny,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`},findWait:{resolution:t.readAny,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:r},wait:{resolution:t.wait,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:r},readList:{resolution:t.readList,occlusion:`ignore`},findAct:{resolution:t.findAct,occlusion:`refuse`,offscreen:`ignore`,promotion:`hittable-ancestor-below-root`,poll:`none`},cropTarget:{resolution:t.cropTarget,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`}};function a(e,t){if(e!==`none`&&!(t===void 0||!Number.isInteger(t))&&!(t<=0))return{intervalMs:e.intervalMs,budgetMs:Math.min(t,e.maxTimeoutMs),budgetFrom:`first-capture`}}export{a as n,n as r,i as t};
@@ -1 +1 @@
1
- import{A as e,C as t,F as n,M as r,P as i,f as a,h as o,s,y as c}from"./sdk-contracts.js";import{r as l}from"./diagnostics.js";import"./diagnostics2.js";import{p as u,w as d}from"./sdk-device.js";import{Fn as f,Nn as p,Rt as m,dr as ee,fr as h,pr as g}from"./sdk-batch.js";import{d as te,n as _}from"./dispatch-resolve.js";import{c as v,i as y,s as b,u as ne}from"./target-evidence.js";import{n as re,p as ie}from"./provider-device-admission.js";import{_ as ae,g as oe,l as se,r as ce,s as le}from"./overlay.js";import{i as ue}from"./rect-center.js";import{a as x}from"./android-system-chrome.js";import{r as de}from"./request-cancel.js";import"./request.js";import{M as fe,O as S,_ as pe,f as me,i as he,j as ge,l as _e,m as C,o as w,p as T,r as E,s as D,v as O}from"./session-snapshot.js";import{s as k}from"./quality-warnings.js";import{t as A}from"./backend-snapshot-options.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:s(`INVALID_ARGS`,`Invalid ref "${e}" — malformed generation suffix.`,{hint:o})}}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:x(e.node)}))}:{ref:e.ref,...e.kind===`text`?{text:e.text}:{},node:x(e.node)}}function F(e,t){let n=Array.isArray(e.selectorChain)?e.selectorChain:void 0,r=xe(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:be(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:x(e.node)}}function L(e){let{node:t,preActionNodes:n,...r}=e;return r}function ve(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 ye(e){let{selectorChain:t,...n}=e;return n}function R(e,t,n,r,i,a){if(!t)return;let o=e.resolveCurrent(t);if(!o)return;let s=ie(o)&&i?y(i,{mode:a}):void 0;e.recordAction(t,{command:n.command,positionals:n.positionals??[],flags:n.flags??{},result:r,interactiveObservation:te(n),...s?{targetEvidence:s,targetEvidenceMode:a??`action`}:{}})}function be(e){let t=e.trim();if(!(!t||t.length>80||/[\r\n]/.test(t)))return t}function xe(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:m({hasActiveApp:e.session?.appBundleId!==void 0,intent:Se(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 Se(e){switch(e){case`is`:return`capture-only`;case`find`:case`get`:return`element-text`;case`wait`:return`wait-observation`}}const Ce=[[`snapshotDepth`,`--depth`],[`snapshotScope`,`--scope`],[`snapshotRaw`,`--raw`]];function V(e,t){let n=Ce.filter(([e])=>t?.[e]!==void 0).map(([,e])=>e);return n.length===0?null:s(`INVALID_ARGS`,`${e} @ref does not support ${n.join(`, `)}.`)}async function H(e,t){if(e.device.platform!==`android`||!e.appBundleId||e.lease?.leaseProvider||re(e.device))return null;if(!t)throw new i(`INTERNAL_ERROR`,`Android observation was not supplied by root runtime composition`);let n=await t.readAppState(e.device),r=n.package?.trim();if(!r||r===e.appBundleId)return null;let a=await t.isPermissionPackage(r);return!Ee(r)&&!a?null:{expectedPackage:e.appBundleId,foregroundPackage:r,activity:n.activity,hint:Te(a),...a?{permissionDialog:!0}:{}}}function we(e){return e.permissionDialog?`Android permission dialog is blocking ${e.expectedPackage}`:`${e.foregroundPackage} is foreground instead of ${e.expectedPackage}`}function Te(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 Ee(e){return e===`com.android.settings`||e===`com.android.systemui`||e.includes(`launcher`)}async function De(e){let{device:t,node:n,flags:r,appBundleId:i,traceOutPath:a,surface:o,contextFromFlags:s}=e,c=oe(n),d=e.readTextAtPoint;if(!d)return c;let f=ue(n.rect);if(!f||u(t)&&c&&!ae(n.type??``))return c;let p=s(r,i,a),m=await d({point:f,options:{appBundleId:i,surface:o},execution:C(p)});return m.status===`read`?m.text:(l({level:`warn`,phase:`interaction_read_fallback`,data:{reason:Oe(m.reason),nodeRef:n.ref,surface:o,platform:t.platform}}),c)}function Oe(e){switch(e){case`no-text-at-point`:return`no_text_at_point`;default:return e}}function U(e){let{sessionStore:t,ref:n}=e,r=0,i,a,o=t=>(e.consumedSnapshot&&(e.consumedSnapshot.state=t.snapshot),t);return{capture:async s=>{let c=n?t.requireCurrent(n):void 0,l=Date.now(),u=Ie(s,e.req.flags?.out),d=Me({timestamp:l,lastSnapshotAt:r,lastSnapshotResult:i,lastSnapshotCacheKey:a,session:c,request:s,cacheKey:u});if(d)return o(d);let f=Ne({session:c,timestamp:l,request:s});if(f)return r=f.createdAt,i={snapshot:f},a=u,o(i);let p=await ke({params:e,request:s});s.signal?.throwIfAborted();let m={snapshot:p};return Re({ref:n,sessionStore:t,snapshot:p}),r=l,i=m,a=u,o(m)}}}async function ke(e){let{params:n,request:r}=e,i=await W(n,r,r.snapshotScope);return r.recovery?.legacyIosSparse&&se(i)?t(i,await Ae({runtimeParams:n,request:r,policy:r.recovery.legacyIosSparse})):r.recovery?.sparseVerdictQueryScope?.shouldScope&&k(i.snapshotQuality)?t(i,await je({runtimeParams:n,request:r,policy:r.recovery.sparseVerdictQueryScope,snapshot:i})):i}async function Ae(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 je(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=e.ref?e.sessionStore.requireCurrent(e.ref):void 0,a={...t.flags,snapshotInteractiveOnly:r},o=e.capture,s=await _e({device:e.device,session:i,flags:a,outPath:t.outPath??e.req.flags?.out,logPath:e.logPath??``,snapshotScope:n,includeRects:t.includeRects,signal:t.signal,captureData:async()=>await o(T({flags:a,logPath:e.logPath??``,meta:e.req.meta,session:i,snapshotScope:n,includeRects:t.includeRects,signal:t.signal}))});return b(e.captureProof,s.snapshot)}function Me(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)&&!S(a)&&!G(a,o))return r}function Ne(e){let{session:t,timestamp:n,request:r}=e,i=t?.snapshot;if(!(!i||ge(i))&&Pe(t,r)&&Fe(i,n)&&i.presentationKey===K(r))return i}function Pe(e,t){return t.cache?.forceFresh===!0||t.cache?.useSessionSnapshot!==!0||S(e)||G(e,t)?!1:e.snapshot?.postGestureOutcome?.kind!==`unsettled`}function Fe(e,t){return t-e.createdAt<750}function G(e,t){return t.cache?.bypassForPostGestureStabilization===!0&&O(e)}function K(t){return c(e(Le(t)))}function Ie(e,t){return JSON.stringify({presentationKey:K(e),includeRects:e.includeRects===!0,outPath:e.outPath??t??null})}function Le(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function Re(e){let{ref:t,sessionStore:n,snapshot:r}=e;!t||k(r.snapshotQuality)||w(n.requireCurrent(t),r)}function q(e){return me({backend:Be(e),...ne(`selector commands`,{plural:!0}),sessions:D({sessionName:e.sessionName,sessionStore:e.sessionStore,ref:e.ref,recordOptions:{includeSnapshot:!0},setRecord:(e,t)=>{!t||!e.snapshot||w(t,e.snapshot)}}),signal:e.signal??de(e.req.meta?.requestId)})}async function ze(e,t){e.consumedSnapshot??={},e.captureProof??={};let n=e.sessionStore.lookup(e.sessionName),r=n?.session;return!r&&t?{ok:!1,response:a()}:{ok:!0,ref:n,session:r,device:r?.device??await _(e.req.flags??{})}}async function J(e,t){let n=await ze(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,ref:n.ref,runtime:q({...e,ref:n.ref,session:n.session,device:n.device,bound:r.operations})}:{ok:!1,response:r.response}}function Be(e){let{req:t,session:n,device:r,logPath:i,sessionName:a,sessionStore:o}=e,s=e.contextFromFlags??((e,t,n)=>pe(i??``,e,t,n)),c=e.bound?.readText,l=e.bound?.findText,u=T({flags:t.flags,logPath:i??``,meta:t.meta,session:n,snapshotScope:void 0}).execution,f=e.bound,p=f===void 0?void 0:U({ref:e.ref,device:r,sessionStore:o,sessionName:a,req:t,consumedSnapshot:e.consumedSnapshot,captureProof:e.captureProof,logPath:i,capture:f.capture});return{platform:d(r),captureSnapshot:p&&(async(e,n)=>{let i={...t.flags,...A(n)},a=n?.includeRects===!0,o=n?.scope??t.flags?.snapshotScope,s=t.command===`wait`||t.command===`find`||Ve(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 De({readTextAtPoint:c,device:r,node:i,flags:t.flags,appBundleId:n?.appBundleId,traceOutPath:n?.trace?.outPath,surface:n?.surface,contextFromFlags:s})}),...l?{findText:async(e,t)=>{let{found:r}=await l({text:t,options:{appBundleId:n?.appBundleId,surface:n?.surface},execution:u,...e.signal?{signal:e.signal}:{}});return n&&fe(n),{found:r}}}:{}}}function Ve(e){if(e.command!==`is`)return!1;let t=g(e.positionals??[]);return t.ok&&t.predicate===`absent`}async function Y(e){let{req:t}=e;if(t.command!==`find`)return null;let n=t.positionals??[],r=p(n,t.flags);if(!r.ok)return s(r.code,r.message);let i=r.parsed,a=i.action;if(!f(a))return null;let o=await J(e,{requireSession:!1,command:`find`});if(!o.ok)return o.response;let c=await Q(async()=>{let n=await o.runtime.selectors.find({session:e.sessionName,requestId:t.meta?.requestId,locator:i.locator,query:i.query,action:a,timeoutMs:i.timeoutMs});R(e.sessionStore,o.ref,t,N(n,a));let r=P(n),s=typeof r.ref==`string`?[r.ref]:Array.isArray(r.matches)?r.matches.map(e=>e.ref).filter(e=>typeof e==`string`):[];if(s.length>0){let t=o.ref;if(t){let n=e.sessionStore.requireCurrent(t);if(E(n,s),n.snapshotGeneration!==void 0)return{...r,refsGeneration:n.snapshotGeneration}}}return r});return v({response:c,consumedTree:X(e),captureProof:e.captureProof})}function X(e){return e.consumedSnapshot?.state??e.sessionStore.get(e.sessionName)?.snapshot}async function He(e){let{req:t}=e;if(t.command!==`get`)return null;let n=h(t.positionals?.[0]);if(!n.ok)return s(n.code,n.message);let r=n.format,i=We(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,o=await J(e,{requireSession:!0,command:`get`});if(!o.ok)return o.response;let c=o.runtime,l=i.target.kind===`ref`?he({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,o.ref,t,F(n,r),{node:n.node,preActionNodes:n.preActionNodes});let s=I(n);return l?{...s,warning:l}:s});return v({response:u,consumedTree:X(e),captureProof:e.captureProof})}async function Ue(e){let{req:t}=e;if(t.command!==`is`)return null;let n=g(t.positionals??[]);if(!n.ok)return s(n.code,n.message,n.hint?{hint:n.hint}:void 0);let{predicate:r,selectorExpression:i,expectedText:a}=n;if(r===`absent`){let e=le({depth:t.flags?.snapshotDepth,scope:t.flags?.snapshotScope});if(e){let t=ce(e);return s(t.code,t.message,t.details)}}let o=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:o}),s=Z(n),l=L(n);return R(e.sessionStore,c.ref,t,l,s),ye(l)});return v({response:await $(e,l,`is ${r}`),consumedTree:X(e),captureProof:e.captureProof})}function Z(e){let t=e.node,n=e.preActionNodes;if(!(!t||typeof t!=`object`||!Array.isArray(n)))return{node:t,preActionNodes:n}}function We(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=ee(e.positionals?.slice(1)??[]);return n.ok?{ok:!0,target:{kind:`selector`,selector:`selector`in n?n.selector:``}}:{ok:!1,response:s(n.code,n.message)}}async function Q(e){try{return{ok:!0,data:await e()}}catch(e){let t=n(e);return s(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?s(t.error.code,`${n} failed because ${we(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,ve as h,Ue as i,U as l,L as m,Y as n,Z as o,R as p,He as r,Q as s,X as t,H as u};
1
+ import{A as e,C as t,F as n,M as r,P as i,f as a,h as o,s,y as c}from"./sdk-contracts.js";import{r as l}from"./diagnostics.js";import"./diagnostics2.js";import{E as u,h as d}from"./sdk-device.js";import{In as f,Pn as p,Rt as m,fr as h,mr as g,pr as ee}from"./sdk-batch.js";import{d as te,n as _}from"./dispatch-resolve.js";import{c as v,i as y,s as b,u as ne}from"./target-evidence.js";import{n as re,p as ie}from"./provider-device-admission.js";import{_ as ae,l as oe,r as se,s as ce,v as le}from"./overlay.js";import{i as ue}from"./rect-center.js";import{a as x}from"./android-system-chrome.js";import{r as de}from"./request-cancel.js";import"./request.js";import{M as fe,N as pe,a as me,c as he,h as ge,i as _e,k as S,m as C,p as w,r as T,s as E,u as D,v as O,y as k}from"./session-snapshot.js";import{s as A}from"./quality-warnings.js";import{t as j}from"./backend-snapshot-options.js";import{t as M}from"./snapshot-runtime-binding.js";function N(e){let t=r(e);return t?{ok:!0,ref:t.base,generation:t.generation}:{ok:!1,response:s(`INVALID_ARGS`,`Invalid ref "${e}" — malformed generation suffix.`,{hint:o})}}function P(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 F(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:x(e.node)}))}:{ref:e.ref,...e.kind===`text`?{text:e.text}:{},node:x(e.node)}}function I(e,t){let n=Array.isArray(e.selectorChain)?e.selectorChain:void 0,r=Se(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:xe(s)}}function ve(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:x(e.node)}}function L(e){let{node:t,preActionNodes:n,...r}=e;return r}function ye(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 be(e){let{selectorChain:t,...n}=e;return n}function R(e,t,n,r,i,a){if(!t)return;let o=e.resolveCurrent(t);if(!o)return;let s=ie(o)&&i?y(i,{mode:a}):void 0;e.recordAction(t,{command:n.command,positionals:n.positionals??[],flags:n.flags??{},result:r,interactiveObservation:te(n),...s?{targetEvidence:s,targetEvidenceMode:a??`action`}:{}})}function xe(e){let t=e.trim();if(!(!t||t.length>80||/[\r\n]/.test(t)))return t}function Se(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 M({...e,plan:m({hasActiveApp:e.session?.appBundleId!==void 0,intent:Ce(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 Ce(e){switch(e){case`is`:return`capture-only`;case`find`:case`get`:return`element-text`;case`wait`:return`wait-observation`}}const we=[[`snapshotDepth`,`--depth`],[`snapshotScope`,`--scope`],[`snapshotRaw`,`--raw`]];function V(e,t){let n=we.filter(([e])=>t?.[e]!==void 0).map(([,e])=>e);return n.length===0?null:s(`INVALID_ARGS`,`${e} @ref does not support ${n.join(`, `)}.`)}async function H(e,t){if(e.device.platform!==`android`||!e.appBundleId||e.lease?.leaseProvider||re(e.device))return null;if(!t)throw new i(`INTERNAL_ERROR`,`Android observation was not supplied by root runtime composition`);let n=await t.readAppState(e.device),r=n.package?.trim();if(!r||r===e.appBundleId)return null;let a=await t.isPermissionPackage(r);return!De(r)&&!a?null:{expectedPackage:e.appBundleId,foregroundPackage:r,activity:n.activity,hint:Ee(a),...a?{permissionDialog:!0}:{}}}function Te(e){return e.permissionDialog?`Android permission dialog is blocking ${e.expectedPackage}`:`${e.foregroundPackage} is foreground instead of ${e.expectedPackage}`}function Ee(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 De(e){return e===`com.android.settings`||e===`com.android.systemui`||e.includes(`launcher`)}async function Oe(e){let{device:t,node:n,flags:r,appBundleId:i,traceOutPath:a,surface:o,contextFromFlags:s}=e,c=ae(n),u=e.readTextAtPoint;if(!u)return c;let f=ue(n.rect);if(!f||d(t)&&c&&!le(n.type??``))return c;let p=s(r,i,a),m=await u({point:f,options:{appBundleId:i,surface:o},execution:ge(p)});return m.status===`read`?m.text:(l({level:`warn`,phase:`interaction_read_fallback`,data:{reason:ke(m.reason),nodeRef:n.ref,surface:o,platform:t.platform}}),c)}function ke(e){switch(e){case`no-text-at-point`:return`no_text_at_point`;default:return e}}function U(e){let{sessionStore:t,ref:n}=e,r=0,i,a,o=t=>(e.consumedSnapshot&&(e.consumedSnapshot.state=t.snapshot),t);return{capture:async s=>{let c=n?t.requireCurrent(n):void 0,l=Date.now(),u=Le(s,e.req.flags?.out),d=Ne({timestamp:l,lastSnapshotAt:r,lastSnapshotResult:i,lastSnapshotCacheKey:a,session:c,request:s,cacheKey:u});if(d)return o(d);let f=Pe({session:c,timestamp:l,request:s});if(f)return r=f.createdAt,i={snapshot:f},a=u,o(i);let p=await Ae({params:e,request:s});s.signal?.throwIfAborted();let m={snapshot:p};return ze({ref:n,sessionStore:t,snapshot:p}),r=l,i=m,a=u,o(m)}}}async function Ae(e){let{params:n,request:r}=e,i=await W(n,r,r.snapshotScope);return r.recovery?.legacyIosSparse&&oe(i)?t(i,await je({runtimeParams:n,request:r,policy:r.recovery.legacyIosSparse})):r.recovery?.sparseVerdictQueryScope?.shouldScope&&A(i.snapshotQuality)?t(i,await Me({runtimeParams:n,request:r,policy:r.recovery.sparseVerdictQueryScope,snapshot:i})):i}async function je(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 Me(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=e.ref?e.sessionStore.requireCurrent(e.ref):void 0,a={...t.flags,snapshotInteractiveOnly:r},o=e.capture,s=await D({device:e.device,session:i,flags:a,logPath:e.logPath??``,snapshotScope:n,includeRects:t.includeRects,signal:t.signal,captureData:async()=>await o(C({flags:a,logPath:e.logPath??``,meta:e.req.meta,session:i,snapshotScope:n,includeRects:t.includeRects,signal:t.signal}))});return b(e.captureProof,s.snapshot)}function Ne(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)&&!S(a)&&!G(a,o))return r}function Pe(e){let{session:t,timestamp:n,request:r}=e,i=t?.snapshot;if(!(!i||fe(i))&&Fe(t,r)&&Ie(i,n)&&i.presentationKey===K(r))return i}function Fe(e,t){return t.cache?.forceFresh===!0||t.cache?.useSessionSnapshot!==!0||S(e)||G(e,t)?!1:e.snapshot?.postGestureOutcome?.kind!==`unsettled`}function Ie(e,t){return t-e.createdAt<750}function G(e,t){return t.cache?.bypassForPostGestureStabilization===!0&&k(e)}function K(t){return c(e(Re(t)))}function Le(e,t){return JSON.stringify({presentationKey:K(e),includeRects:e.includeRects===!0,outPath:e.outPath??t??null})}function Re(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function ze(e){let{ref:t,sessionStore:n,snapshot:r}=e;!t||A(r.snapshotQuality)||E(n.requireCurrent(t),r)}function q(e){return w({backend:Be(e),...ne(`selector commands`,{plural:!0}),sessions:he({sessionName:e.sessionName,sessionStore:e.sessionStore,ref:e.ref,recordOptions:{includeSnapshot:!0},setRecord:(e,t)=>{!t||!e.snapshot||E(t,e.snapshot)}}),signal:e.signal??de(e.req.meta?.requestId)})}async function J(e,t){e.consumedSnapshot??={},e.captureProof??={};let n=e.sessionStore.lookup(e.sessionName),r=n?.session;return!r&&t?{ok:!1,response:a()}:{ok:!0,ref:n,session:r,device:r?.device??await _(e.req.flags??{})}}async function Y(e,t){let n=await J(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,ref:n.ref,runtime:q({...e,ref:n.ref,session:n.session,device:n.device,bound:r.operations})}:{ok:!1,response:r.response}}function Be(e){let{req:t,session:n,device:r,logPath:i,sessionName:a,sessionStore:o}=e,s=e.contextFromFlags??((e,t,n)=>O(i??``,e,t,n)),c=e.bound?.readText,l=e.bound?.findText,d=C({flags:t.flags,logPath:i??``,meta:t.meta,session:n,snapshotScope:void 0}).execution,f=e.bound,p=f===void 0?void 0:U({ref:e.ref,device:r,sessionStore:o,sessionName:a,req:t,consumedSnapshot:e.consumedSnapshot,captureProof:e.captureProof,logPath:i,capture:f.capture});return{platform:u(r),captureSnapshot:p&&(async(e,n)=>{let i={...t.flags,...j(n)},a=n?.includeRects===!0,o=n?.scope??t.flags?.snapshotScope,s=t.command===`wait`||t.command===`find`||Ve(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 Oe({readTextAtPoint:c,device:r,node:i,flags:t.flags,appBundleId:n?.appBundleId,traceOutPath:n?.trace?.outPath,surface:n?.surface,contextFromFlags:s})}),...l?{findText:async(e,t)=>{let{found:r}=await l({text:t,options:{appBundleId:n?.appBundleId,surface:n?.surface},execution:d,...e.signal?{signal:e.signal}:{}});return n&&pe(n),{found:r}}}:{}}}function Ve(e){if(e.command!==`is`)return!1;let t=g(e.positionals??[]);return t.ok&&t.predicate===`absent`}async function He(e){let{req:t}=e;if(t.command!==`find`)return null;let n=t.positionals??[],r=p(n,t.flags);if(!r.ok)return s(r.code,r.message);let i=r.parsed,a=i.action;if(!f(a))return null;let o=await Y(e,{requireSession:!1,command:`find`});if(!o.ok)return o.response;let c=await Q(async()=>{let n=await o.runtime.selectors.find({session:e.sessionName,requestId:t.meta?.requestId,locator:i.locator,query:i.query,action:a,timeoutMs:i.timeoutMs});R(e.sessionStore,o.ref,t,P(n,a));let r=F(n),s=typeof r.ref==`string`?[r.ref]:Array.isArray(r.matches)?r.matches.map(e=>e.ref).filter(e=>typeof e==`string`):[];if(s.length>0){let t=o.ref;if(t){let n=e.sessionStore.requireCurrent(t);if(T(n,s),n.snapshotGeneration!==void 0)return{...r,refsGeneration:n.snapshotGeneration}}}return r});return v({response:c,consumedTree:X(e),captureProof:e.captureProof})}function X(e){return e.consumedSnapshot?.state??e.sessionStore.get(e.sessionName)?.snapshot}async function Ue(e){let{req:t}=e;if(t.command!==`get`)return null;let n=ee(t.positionals?.[0]);if(!n.ok)return s(n.code,n.message);let r=n.format,i=Ge(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,o=await Y(e,{requireSession:!0,command:`get`});if(!o.ok)return o.response;let c=o.runtime,l=i.target.kind===`ref`?me({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,o.ref,t,I(n,r),{node:n.node,preActionNodes:n.preActionNodes});let s=ve(n);return l?{...s,warning:l}:s},{ref:o.ref,sessionStore:e.sessionStore,consumed:e.consumedSnapshot});return v({response:u,consumedTree:X(e),captureProof:e.captureProof})}async function We(e){let{req:t}=e;if(t.command!==`is`)return null;let n=g(t.positionals??[]);if(!n.ok)return s(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=se(e);return s(t.code,t.message,t.details)}}let o=t.internal?.replayTargetGuard,c=await Y(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:o}),s=Z(n),l=L(n);return R(e.sessionStore,c.ref,t,l,s),be(l)},{ref:c.ref,sessionStore:e.sessionStore,consumed:e.consumedSnapshot});return v({response:await $(e,l,`is ${r}`),consumedTree:X(e),captureProof:e.captureProof})}function Z(e){let t=e.node,n=e.preActionNodes;if(!(!t||typeof t!=`object`||!Array.isArray(n)))return{node:t,preActionNodes:n}}function Ge(e){let t=e.positionals?.[1]??``;if(t.startsWith(`@`)){let n=N(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:s(n.code,n.message)}}async function Q(e,t){try{return{ok:!0,data:await e()}}catch(e){let r=t?_e(t.ref,t.sessionStore,n(e),t.consumed?.state):n(e);return s(r.code,r.message,r.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?s(t.error.code,`${n} failed because ${Te(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,N as g,ye as h,We as i,U as l,L as m,He as n,Z as o,R as p,Ue as r,Q as s,X as t,H as u};
@@ -1 +1 @@
1
- import{Dn as e,En as t,Er as n,Sr as r,Tr as i,wn as a,wr as o,xr as s}from"./sdk-batch.js";import{t as c}from"./sdk-selectors.js";export{a as findSelectorChainMatch,c as formatSelectorFailure,i as isNodeEditable,n as isNodeVisible,s as isSelectorToken,t as listSelectorChainMatches,r as parseSelectorChain,e as resolveSelectorChain,o as tryParseSelectorChain};
1
+ import{Cr as e,Dn as t,Dr as n,Er as r,On as i,Sr as a,Tn as o,Tr as s}from"./sdk-batch.js";import{t as c}from"./sdk-selectors.js";export{o as findSelectorChainMatch,c as formatSelectorFailure,r as isNodeEditable,n as isNodeVisible,a as isSelectorToken,t as listSelectorChainMatches,e as parseSelectorChain,i as resolveSelectorChain,s as tryParseSelectorChain};
@@ -1,4 +1,4 @@
1
- import{P as e,u as t}from"./sdk-contracts.js";import{v 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).
1
+ import{P as e,u as t}from"./sdk-contracts.js";import{v as n}from"./sdk-batch-runner.js";import{v as r}from"./sdk-batch.js";import{i}from"./catalog.js";import{a}from"./version.js";import{a as o,i as s,r as c,t as ee}from"./command-tools.js";import{i as l,r as u,t as d}from"./cli-help.js";const f=`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
 
@@ -6,5 +6,5 @@ Loop: press/click/fill/longpress/hover/scroll/back with settle: true; the respon
6
6
 
7
7
  Targets: copy refs byte-for-byte (@e12, @e12~s4; keep @ and any ~sN). Refs go stale after mutations. Prefer refs, then id/label/role selectors; coordinates last. On a sparse/AX-unavailable warning its refs and selectors are invalid: screenshot, read the image, press {x, y}, then snapshot the changed screen.
8
8
 
9
- Errors carry hints; follow them instead of re-planning. Call help only for specialized work (gestures, scripting, TV, macOS, web, remote, debugging) or an unclear command shape, never at startup.`;function d(){let e=new Set(n());return r().filter(t=>!e.has(t))}const f={name:`help`,description:`Usage guides. No topic: the full workflow card. topic = one of ${c().join(`, `)} for that guide, or a tool name for its complete flag reference. For specialized work or an unclear command shape only; not a startup step, not needed after an error that carries a hint.`,inputSchema:{type:`object`,properties:{topic:{type:`string`,description:`Guide topic or tool name; omit for the card.`}},additionalProperties:!1}},p=`CLI syntax over MCP: \`agent-device <command> <positionals> --flag\` = tool <command>; positionals are named properties (target, text, direction), flags camelCase (--settle -> settle: true, -i -> interactiveOnly: true). Terminal-only (no MCP tool; run in a shell): ${d().join(`, `)}.\n\n`;function ne(e){let t=e.topic;if(t!==void 0&&typeof t!=`string`)return m(`Expected topic to be a string.`,!0);let n=t?s(t):l();return n===null?m(`Unknown help topic: ${t}. ${f.description}`,!0):m(p+n)}function m(e,t=!1){return{isError:t,content:[{type:`text`,text:e}]}}const h=`2026-07-28`,g=[h],_=[`2025-11-25`,`2025-06-18`],v=[...g,..._],y=`server/discover`,b=new Set([`initialize`,`ping`]),x=`io.modelcontextprotocol/protocolVersion`,S=`io.modelcontextprotocol/clientCapabilities`,C=`io.modelcontextprotocol/clientInfo`,w=36e5;var T=class extends Error{requested;constructor(e){super(`Unsupported MCP protocol version: ${e}. Supported: ${v.join(`, `)}.`),this.requested=e}get data(){return{supported:v,requested:this.requested}}};function E(t,n){let r=I(I(n)._meta),i=L(r,x);if(i===void 0){if(t===y)throw new e(`INVALID_ARGS`,`Expected _meta["${x}"] on ${y}.`);return`legacy`}if(!v.includes(i))throw new T(i);if(!A(r[S]))throw new e(`INVALID_ARGS`,`Expected _meta["${S}"] to be an object.`);let a=r[C];if(a!==void 0&&!j(a))throw new e(`INVALID_ARGS`,`Expected _meta["${C}"] to be a valid Implementation.`);if(!g.includes(i)){if(t===y)throw new T(i);return`legacy`}return`modern`}function D(e){let t=L(I(e),`protocolVersion`);return t!==void 0&&_.includes(t)?t:`2025-11-25`}function O(e,t){return t===`modern`&&b.has(e)}function k(){return{name:`agent-device`,version:i()}}function re(e,t){return t===`legacy`||typeof e!=`object`||!e?e:{resultType:`complete`,...e,_meta:{...e._meta,"io.modelcontextprotocol/serverInfo":k()}}}function ie(e,t){return e===`modern`?{ttlMs:t,cacheScope:`public`}:void 0}function A(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function j(e){return!A(e)||!P(e.name)||!P(e.version)?!1:N(e.title,P)&&N(e.description,P)&&N(e.websiteUrl,P)&&N(e.icons,e=>Array.isArray(e)&&e.every(M))}function M(e){return!A(e)||!P(e.src)?!1:N(e.mimeType,P)&&N(e.sizes,F)&&N(e.theme,e=>e===`light`||e===`dark`)}function N(e,t){return e===void 0||t(e)}function P(e){return typeof e==`string`}function F(e){return Array.isArray(e)&&e.every(P)}function I(e){return A(e)?e:{}}function L(e,t){let n=e[t];return typeof n==`string`&&n.length>0?n:void 0}async function R(e){if(e.jsonrpc!==`2.0`||typeof e.method!=`string`)return U(e.id??null,-32600,`Invalid JSON-RPC request.`);if(e.id===void 0)return null;try{let t=E(e.method,e.params),n=await z(e.method,e.params,t);return H(e.id,re(n,t))}catch(t){return t instanceof T?U(e.id,-32022,t.message,t.data):t instanceof q?U(e.id,-32601,t.message):U(e.id,-32602,t instanceof Error?t.message:String(t))}}async function z(e,t,n){if(O(e,n))throw new q(`${e} was removed in MCP ${h}.`);switch(e){case`server/discover`:return{supportedVersions:v,capabilities:{tools:{}},instructions:u,ttlMs:w,cacheScope:`public`};case`initialize`:return{protocolVersion:D(t),capabilities:{tools:{}},serverInfo:k(),instructions:u};case`ping`:return{};case`tools/list`:return{tools:[...o(),f],...ie(n,w)};case`tools/call`:return await B(t);default:throw new q(`Unsupported MCP method: ${e}`)}}async function B(e){let t=W(e),n=K(t,`name`);try{return n===`help`?ne(G(t.arguments)):await te.execute(n,G(t.arguments))}catch(e){return V(ee(a(e)),!0)}}function V(e,t=!1){return{isError:t,content:[{type:`text`,text:e}]}}function H(e,t){return{jsonrpc:`2.0`,id:e,result:t}}function U(e,t,n,r){return{jsonrpc:`2.0`,id:e,error:{code:t,message:n,...r?{data:r}:{}}}}function W(t){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`Expected object parameters.`);return t}function G(e){return e===void 0?{}:W(e)}function K(t,n){let r=t[n];if(typeof r!=`string`||r.length===0)throw new e(`INVALID_ARGS`,`Expected ${n} to be a non-empty string.`);return r}var q=class extends Error{};async function J(){let e=Y(),t=new ce(t=>{e.push(t)});process.stdin.setEncoding(`utf8`),process.stdin.on(`data`,e=>{try{t.push(e)}catch(e){$({jsonrpc:`2.0`,id:null,error:{code:-32700,message:e instanceof Error?e.message:String(e)}})}}),await new Promise(e=>{process.stdin.on(`end`,e),process.stdin.on(`close`,e),process.stdin.resume()}),await e.idle()}function Y(e={}){let t=e.handlePayload??X,n=e.write??$,r=Promise.resolve();return{push:e=>{let i=se(e);r=r.then(async()=>{let r=await t(e);r&&n(r)}).catch(e=>{n({jsonrpc:`2.0`,id:i,error:{code:-32603,message:e instanceof Error?e.message:String(e)}})})},idle:async()=>{await r}}}function X(e){return Array.isArray(e)?ae(e):Z(e)}async function ae(e){let t=[];for(let n of e)t.push(...le(await Z(n)));return t.length>0?t:null}async function Z(e){let n;try{n=t.parse(e)}catch{return oe(Q(e))}return R(n)}function oe(e){return{jsonrpc:`2.0`,id:e,error:{code:-32600,message:`Invalid JSON-RPC request.`}}}function se(e){return Array.isArray(e)?e.length===1?Q(e[0]):null:Q(e)}function Q(e){if(e&&typeof e==`object`&&!Array.isArray(e)){let t=e.id;if(typeof t==`string`||typeof t==`number`||t===null)return t}return null}var ce=class{buffer=``;sink;constructor(e){this.sink=e}push(e){for(this.buffer+=e;;){let e=this.tryReadLineMessage();if(e!==void 0){this.emit(e);continue}break}}tryReadLineMessage(){let e=this.buffer.indexOf(`
9
+ Errors carry hints; follow them instead of re-planning. Call help only for specialized work (gestures, scripting, TV, macOS, web, remote, debugging) or an unclear command shape, never at startup.`;function p(){let e=new Set(r());return i().filter(t=>!e.has(t))}const m={name:`help`,description:`Usage guides. No topic: the full workflow card. topic = one of ${u().join(`, `)} for that guide, or a tool name for its complete flag reference. For specialized work or an unclear command shape only; not a startup step, not needed after an error that carries a hint.`,inputSchema:{type:`object`,properties:{topic:{type:`string`,description:`Guide topic or tool name; omit for the card.`}},additionalProperties:!1}},te=`CLI syntax over MCP: \`agent-device <command> <positionals> --flag\` = tool <command>; positionals are named properties (target, text, direction), flags camelCase (--settle -> settle: true, -i -> interactiveOnly: true). Terminal-only (no MCP tool; run in a shell): ${p().join(`, `)}.\n\n`;function ne(e){let t=e.topic;if(t!==void 0&&typeof t!=`string`)return h(`Expected topic to be a string.`,!0);let n=t?l(t):d();return n===null?h(`Unknown help topic: ${t}. ${m.description}`,!0):h(te+n)}function h(e,t=!1){return{isError:t,content:[{type:`text`,text:e}]}}const g=`2026-07-28`,_=[g],v=[`2025-11-25`,`2025-06-18`],y=[..._,...v],b=`server/discover`,x=new Set([`initialize`,`ping`]),S=`io.modelcontextprotocol/protocolVersion`,C=`io.modelcontextprotocol/clientCapabilities`,w=`io.modelcontextprotocol/clientInfo`,T=36e5;var E=class extends Error{requested;constructor(e){super(`Unsupported MCP protocol version: ${e}. Supported: ${y.join(`, `)}.`),this.requested=e}get data(){return{supported:y,requested:this.requested}}};function D(t,r){let i=I(I(r)._meta),a=L(i,S);if(a===void 0){if(t===b)throw new e(`INVALID_ARGS`,`Expected _meta["${S}"] on ${b}.`);return`legacy`}if(!y.includes(a))throw new E(a);if(!n(i[C]))throw new e(`INVALID_ARGS`,`Expected _meta["${C}"] to be an object.`);let o=i[w];if(o!==void 0&&!j(o))throw new e(`INVALID_ARGS`,`Expected _meta["${w}"] to be a valid Implementation.`);if(!_.includes(a)){if(t===b)throw new E(a);return`legacy`}return`modern`}function O(e){let t=L(I(e),`protocolVersion`);return t!==void 0&&v.includes(t)?t:`2025-11-25`}function re(e,t){return t===`modern`&&x.has(e)}function k(){return{name:`agent-device`,version:a()}}function ie(e,t){return t===`legacy`||typeof e!=`object`||!e?e:{resultType:`complete`,...e,_meta:{...e._meta,"io.modelcontextprotocol/serverInfo":k()}}}function A(e,t){return e===`modern`?{ttlMs:t,cacheScope:`public`}:void 0}function j(e){return!n(e)||!P(e.name)||!P(e.version)?!1:N(e.title,P)&&N(e.description,P)&&N(e.websiteUrl,P)&&N(e.icons,e=>Array.isArray(e)&&e.every(M))}function M(e){return!n(e)||!P(e.src)?!1:N(e.mimeType,P)&&N(e.sizes,F)&&N(e.theme,e=>e===`light`||e===`dark`)}function N(e,t){return e===void 0||t(e)}function P(e){return typeof e==`string`}function F(e){return Array.isArray(e)&&e.every(P)}function I(e){return n(e)?e:{}}function L(e,t){let n=e[t];return typeof n==`string`&&n.length>0?n:void 0}async function R(e){if(e.jsonrpc!==`2.0`||typeof e.method!=`string`)return U(e.id??null,-32600,`Invalid JSON-RPC request.`);if(e.id===void 0)return null;try{let t=D(e.method,e.params),n=await z(e.method,e.params,t);return H(e.id,ie(n,t))}catch(t){return t instanceof E?U(e.id,-32022,t.message,t.data):t instanceof q?U(e.id,-32601,t.message):U(e.id,-32602,t instanceof Error?t.message:String(t))}}async function z(e,t,n){if(re(e,n))throw new q(`${e} was removed in MCP ${g}.`);switch(e){case`server/discover`:return{supportedVersions:y,capabilities:{tools:{}},instructions:f,ttlMs:T,cacheScope:`public`};case`initialize`:return{protocolVersion:O(t),capabilities:{tools:{}},serverInfo:k(),instructions:f};case`ping`:return{};case`tools/list`:return{tools:[...c(),m],...A(n,T)};case`tools/call`:return await B(t);default:throw new q(`Unsupported MCP method: ${e}`)}}async function B(e){let t=W(e),n=K(t,`name`);try{return n===`help`?ne(G(t.arguments)):await ee.execute(n,G(t.arguments))}catch(e){return V(s(o(e)),!0)}}function V(e,t=!1){return{isError:t,content:[{type:`text`,text:e}]}}function H(e,t){return{jsonrpc:`2.0`,id:e,result:t}}function U(e,t,n,r){return{jsonrpc:`2.0`,id:e,error:{code:t,message:n,...r?{data:r}:{}}}}function W(t){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`Expected object parameters.`);return t}function G(e){return e===void 0?{}:W(e)}function K(t,n){let r=t[n];if(typeof r!=`string`||r.length===0)throw new e(`INVALID_ARGS`,`Expected ${n} to be a non-empty string.`);return r}var q=class extends Error{};async function J(){let e=Y(),t=new ce(t=>{e.push(t)});process.stdin.setEncoding(`utf8`),process.stdin.on(`data`,e=>{try{t.push(e)}catch(e){$({jsonrpc:`2.0`,id:null,error:{code:-32700,message:e instanceof Error?e.message:String(e)}})}}),await new Promise(e=>{process.stdin.on(`end`,e),process.stdin.on(`close`,e),process.stdin.resume()}),await e.idle()}function Y(e={}){let t=e.handlePayload??X,n=e.write??$,r=Promise.resolve();return{push:e=>{let i=se(e);r=r.then(async()=>{let r=await t(e);r&&n(r)}).catch(e=>{n({jsonrpc:`2.0`,id:i,error:{code:-32603,message:e instanceof Error?e.message:String(e)}})})},idle:async()=>{await r}}}function X(e){return Array.isArray(e)?ae(e):Z(e)}async function ae(e){let t=[];for(let n of e)t.push(...le(await Z(n)));return t.length>0?t:null}async function Z(e){let n;try{n=t.parse(e)}catch{return oe(Q(e))}return R(n)}function oe(e){return{jsonrpc:`2.0`,id:e,error:{code:-32600,message:`Invalid JSON-RPC request.`}}}function se(e){return Array.isArray(e)?e.length===1?Q(e[0]):null:Q(e)}function Q(e){if(e&&typeof e==`object`&&!Array.isArray(e)){let t=e.id;if(typeof t==`string`||typeof t==`number`||t===null)return t}return null}var ce=class{buffer=``;sink;constructor(e){this.sink=e}push(e){for(this.buffer+=e;;){let e=this.tryReadLineMessage();if(e!==void 0){this.emit(e);continue}break}}tryReadLineMessage(){let e=this.buffer.indexOf(`
10
10
  `);if(e===-1)return;let t=this.buffer.slice(0,e).trim();return this.buffer=this.buffer.slice(e+1),t.length>0?t:void 0}emit(e){this.sink(JSON.parse(e))}};function le(e){return e?[e]:[]}function $(e){process.stdout.write(`${JSON.stringify(e)}\n`)}export{Y as createMcpPayloadQueue,X as handleMcpPayload,J as runAgentDeviceMcpServer};
@@ -1 +1 @@
1
- import{D as e,P as t,g as n,k as r,s as i,x 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{a as u,r as d}from"./diagnostics.js";import"./diagnostics2.js";import{d as ee,h as f,w as te}from"./sdk-device.js";import{Cn as ne,jr as re}from"./sdk-batch.js";import{A as ie,C as ae,a as oe,g as se,j as ce,o as le,t as ue}from"./runtime.js";import{h as de,o as p}from"./overlay.js";import{i as fe}from"./click-button.js";import{t as pe}from"./timeouts.js";import"./retry.js";import{t as me}from"./snapshot-state.js";import{i as he}from"./lease-context.js";import{randomInt as ge}from"node:crypto";let m={resolve:async()=>{throw new t(`COMMAND_FAILED`,`Interactor resolution is not composed for this process.`,{reason:`interactor-resolution-missing`})}};function _e(e){m=e}function ve(){return m}var h=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 ye=new h({state:`active`,scope:`all`,tree:void 0,generation:void 0});function be(e){return new h({state:`active`,...e})}function xe(e){return h.expire(e)}const g=new WeakMap,_=new WeakSet;function v(e){return e.refFrame??ye}function y(e){return v(e).generation??e.snapshotGeneration}function Se(e){return v(e).tree}function Ce(e){Te(e),b(e),e.refFrame=xe(v(e)),e.snapshotScopeSource=void 0}function b(e){e.snapshot&&_.add(e.snapshot)}function we(e){return _.has(e)}function Te(e){let t=x(e)+1;return g.set(e,t),t}function x(e){return g.get(e)??0}function Ee(e){S(e,`all`)}function De(e,t){S(e,t)}function S(e,t){e.refFrame=be({scope:t,tree:e.snapshot,generation:e.snapshotGeneration})}function C(e){return v(e).state}function w(e){return v(e).scope}function Oe(e){let t=e.ref.startsWith(`@`)?e.ref.slice(1):e.ref;return{admission:ke({session:e.session,refBody:t,mintedGeneration:e.mintedGeneration}),scope:w(e.session),currentGeneration:y(e.session)}}function ke(e){let{session:t,refBody:n,mintedGeneration:r}=e;if(C(t)===`expired`)return{admitted:!1,reason:`ref_frame_expired`};if(r!==void 0&&r!==y(t))return{admitted:!1,reason:`ref_generation_mismatch`};let i=w(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 Ae=[250,400,600];function T(e){return e===`press`||e===`click`||e===`back`||e===`open`}function E(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 je(e,t){return e<12?!1:t<=Math.floor(e*.2)}function Me(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:je(t.baselineCount,e.snapshot.nodes.length)?Ne(e.snapshot)?null:`sharp-drop`:t.routeComparable&&T(t.action)&&Pe(t.baselineSignatures,e.snapshot.nodes)?`stuck-route`:null}function Ne(e){return e.nodes.some(e=>e.hittable===!0||!!e.label?.trim()||!!e.value?.trim()||!!e.identifier?.trim())}function Pe(e,t){if(!e||e.length===0)return!1;let n=Math.max(e.length,t.length);if(n<12)return!1;let r=E(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 Fe(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 pe(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 Ie(e,t,n=e.snapshot){if(e.device.platform!==`android`)return;let r=Le(e,n),i=r?.comparisonSafe===!0;e.androidSnapshotFreshness={action:t,markedAt:Date.now(),baselineCount:(r??n)?.nodes.length??0,baselineSignatures:i?E(r?.nodes??[]):void 0,routeComparable:i}}function Le(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 D(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 O(e){!e||e.device.platform!==`android`||delete e.androidSnapshotFreshness}async function k(e,t){return Fe({capture:e.capture,classify:n=>Me({snapshot:n.snapshot,rawNodeCount:n.annotations.analysis?.rawNodeCount},t,{interactiveOnly:e.interactiveOnly,mode:e.androidFreshnessMode}),window:t,retry:{retryBudgetMs:1500,delaysMs:Ae},onTrustworthyCapture:()=>O(e.session)})}function A(e){let t=new Map,n=[],r=ce(e);for(let i of e){let e=Re(i,t,r);e&&n.push(e)}return n}function j(e){return e?.comparisonKey??e?.snapshotQuality?.backend}function M(e,t){return Math.abs(e.x-t.x)<=1&&Math.abs(e.y-t.y)<=1&&Math.abs(e.width-t.width)<=1&&Math.abs(e.height-t.height)<=1}function N(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){let r=e[n],i=t[n];if(!r||!i||r.key!==i.key||!M(r,i))return!1}return!0}function P(e,t){let n=F(e),r=F(t);if(n.size===0||r.size===0)return`ambiguous`;let i=0,a=!1;for(let[e,t]of n){let n=r.get(e);if(!n){a=!0;continue}if(i+=1,!M(t,n))return`changed`}if(i===0)return`ambiguous`;let o=r.size>i;return a&&o?`changed`:`unchanged`}function F(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 I(e,t){let n=e.filter(e=>e.discriminating),r=t.filter(e=>e.discriminating);if(n.length===0||n.length!==r.length)return!1;let i=new Map(r.map(e=>[e.key,e]));for(let e of n){let t=i.get(e.key);if(!t||!M(e,t))return!1}return!0}function L(e,t){let n=new Map(t.filter(e=>e.discriminating).map(e=>[e.key,e])),r=0,i=0,a=0;for(let t of e){if(!t.discriminating)continue;let e=n.get(t.key);if(!e){r+=1;continue}n.delete(t.key),a+=1,M(t,e)||(i+=1)}return{onlyInBaseline:r,onlyInCurrent:n.size,rectMismatched:i,shared:a}}function R(e,t,n){let r=z(B(e,n)),i=z(B(t,n));for(let[e,t]of r){let n=i.get(e);if(!n||!M(t,n))return!0;i.delete(e)}return i.size>0}function z(e){let t=new Map,n=new Map;for(let r of e){let e=t.get(r.content)??0;t.set(r.content,e+1),n.set(`${r.content}|#${e}`,r)}return n}function B(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 Re(e,t,n){if(!e.rect||!Ue(e.rect)||We(e))return;let r=He(e);if(!r)return;let i=t.get(r)??0;t.set(r,i+1);let a=Be(e);return{key:`${r}|#${i}`,...a?{identity:a}:{},content:ze(e,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:!Ve(e,n)}}function ze(e,t){return t??`${e.type??``}|${e.role??``}`}function Be(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 Ve(e,t){return re(e)||e.ref!==void 0&&t.has(e.ref)}function He(e){let t=[e.identifier,e.label,e.value,e.type,e.role,...de(e),e.hittable===!0?`hittable`:`not-hittable`].map(e=>typeof e==`string`?e.trim():``).join(`|`);return t.replaceAll(`|`,``)?t:void 0}function Ue(e){return[e.x,e.y,e.width,e.height].every(e=>Number.isFinite(e))&&e.width>0&&e.height>0}function We(e){return`${e.label??``} ${e.identifier??``}`.toLowerCase().includes(`scroll bar`)}function Ge(e){let{session:t,command:n,action:r=n,positionals:i,flags:a,androidFreshnessBaseline:o}=e;T(r)&&Ie(t,r,o??t.snapshot),Ke(t,r,i,a)}function Ke(e,t,n=[],r){if(!H(e.device)||!et(t,n,r))return;let i=U(e.device)?A(e.snapshot?.nodes??[]):void 0;e.postGestureStabilization={action:t,positionals:n,markedAt:Date.now(),...i?.length?{baselineSignature:i,baselineBackend:j(e.snapshot)}:{}}}function qe(e){e?.postGestureStabilization&&(e.postGestureStabilization=void 0)}function V(e){return!!e?.postGestureStabilization}async function Je(e){if(f(e.device)&&e.session&&V(e.session))return await Ye({...e,session:e.session});let t=D(e.session);if(t&&e.device.platform===`android`){let n=await k(e,t);return{snapshot:n.snapshot,...n.annotations}}}async function Ye(e){return Qe(await Ze({session:e.session,capture:async()=>await Xe(e),readSnapshot:e=>e.snapshot}))}async function Xe(e){let t=D(e.session);return t&&e.device.platform===`android`?await k(e,t):await e.capture()}async function Ze(e){let{session:t,capture:n,readSnapshot:r}=e,i=t?.postGestureStabilization;if(!t||!H(t.device)||!i)return{value:e.initial??await n()};try{return await ie({pending:{action:i.action,positionals:i.positionals??[],baselineSignature:i.baselineSignature,baselineBackend:i.baselineBackend},needsBaselineDistrust:U(t.device),initial:e.initial,hooks:{capture:n,readSurface:e=>{let t=r(e);return{signature:A(t.nodes),backend:j(t)}},signaturesStable:N,classifyBaselineEvidence:P,surfacesIdentical:I,summarizeDivergence:L}})}finally{qe(t)}}function Qe(e){let{snapshot:t,annotations:n}=e.value;return e.postGestureOutcome&&(t.postGestureOutcome=e.postGestureOutcome),{snapshot:t,...n}}function $e(e){if(!e?.postGestureStabilization)return e;let{postGestureStabilization:t,...n}=e;return n}function et(e,t,n){return n?.postGestureStabilization===!1?!1:n?.postGestureStabilization===!0||e===`swipe`||e===`scroll`||e===`gesture`&&t[0]===`swipe`}function H(e){return f(e)}function U(e){return ee(e.platform)}const tt=`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 nt(e){return Object.fromEntries(tt.map(t=>[t,e?.[t]]))}function W(e,t,n,r,i,a){return{requestId:i??u().requestId,appBundleId:n,runnerLeaseContext:he({meta:a}),logPath:e,traceLogPath:r,...nt(t),screenshotCaptureBackend:t?.maestro?.screenshotCaptureBackend,...o(t),clickButton:fe(t)}}let G;async function K(){if(G)return G;let{createAppleSessionObservation:e}=await import(`./session-observation.js`),{listLocalDeviceInventory:t,shouldPropagateDeviceInventoryProbeError:n}=await import(`./device-inventory-context.js`).then(e=>e.t);return G??=e({listLocalDevices:t,shouldPropagateProbeError:n}),G}const rt=Object.freeze({async observeRunnerSession(e){return(await K()).observeRunnerSession(e)},async resolveSoleForegroundApp(e){return(await K()).resolveSoleForegroundApp(e)}});async function it(e,t,n,r){let{queryAppleRunnerSelector:i}=await import(`./runner-operations-facade.js`);return await i(e,t,n,r)}function at(e){let{flags:t,logPath:i,meta:a,session:o,snapshotScope:s}=e,{appBundleId:c,trace:l,surface:u}=o??{},d=e.context??W(i??``,t,c,l?.outPath,a?.requestId,a);return{options:{appBundleId:c,...r(t,n),scope:s,includeRects:e.includeRects,surface:u},execution:q(d),...e.signal===void 0?{}:{signal:e.signal}}}function q(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 ot(e){let t=ae(e);return{...t,capture:ue(t),selectors:le(t),interactions:oe(t)}}async function st(e){let t=await(await ve().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)}async function ct(e){let t=await Je({session:e.session,device:e.device,interactiveOnly:e.flags?.snapshotInteractiveOnly===!0,androidFreshnessMode:e.androidFreshnessMode,capture:()=>Y(e)});if(t)return t;let n=await Y(e);return O(e.session),{snapshot:n.snapshot,...n.annotations}}async function J(e){if(e.captureData)return await e.captureData();let{device:t,session:i,logPath:a}=e,o=W(a,X(e),i?.appBundleId,i?.trace?.outPath);return await st({device:t,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,...r(o,n),includeRects:e.includeRects,surface:i?.surface}})}async function Y(e){let t=Date.now(),n=await J(e);c(e.session,{durationMs:Date.now()-t,backend:n.backend,platform:te(e.device)});let r=s(n),i=l(n,me(n,X(e)));return r.androidSnapshot?.systemSurfaceOnly===!0&&(i.systemSurfaceOnly=!0),{data:n,snapshot:i,annotations:r}}function X(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function lt(t,n){if(!t||!t.trim().startsWith(`@`))return{ok:!0,scope:t};if(!n?.snapshot)return i(`INVALID_ARGS`,`Ref scope requires an existing snapshot in session.`);let r=e(t.trim());if(!r)return i(`INVALID_ARGS`,`Invalid ref scope: ${t}`);let o=[n.snapshot,...n.snapshotScopeSource?[n.snapshotScopeSource]:[]],s=!1,c;for(let e of o){let t=a(e.nodes,r);if(t&&(s=!0,c=se(t,e.nodes),c))break}return s?c?{ok:!0,scope:c}:i(`COMMAND_FAILED`,`Ref ${t} has no label to scope by`,{reason:p.refUnlabeled,ref:r}):i(`COMMAND_FAILED`,`Ref ${t} not found`,{reason:p.refNotFound,ref:r},{hint:ne})}function Z(e,t,n={}){if(!e)return;let r=Se(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 ut(e,t){return{get:n=>n===e?Z(t,e):void 0,set:()=>{}}}function dt(e){let t=e.ref;return{getRef:()=>t?e.sessionStore.refresh(t):void 0,get:n=>n===e.sessionName?Z(t?e.sessionStore.resolveCurrent(t):void 0,e.sessionName,e.recordOptions):void 0,set:n=>{if(n.name!==e.sessionName){d({level:`warn`,phase:`runtime_session_write_skipped`,data:{expected:e.sessionName,received:n.name}});return}let r=t?e.sessionStore.requireCurrent(t):void 0,i=e.setRecord(n,r,t);i&&(t=i)}}}function ft(e,t){e.snapshot!==t&&(e.snapshotGeneration=Q(e.snapshotGeneration)),e.snapshot=t,e.snapshotScopeSource=void 0,t.comparisonSafe===!0&&(e.lastComparisonSafeSnapshot=t)}function pt(e){e.snapshot=void 0}function mt(e,t){e.snapshot=t.snapshot,t.snapshot.comparisonSafe===!0&&(e.lastComparisonSafeSnapshot=t.snapshot),e.snapshotScopeSource=t.scopeSource,e.snapshotGeneration=t.keptCurrentSnapshot?t.previousGeneration:Q(t.previousGeneration)}function Q(e){return e===void 0?ge(1e5,1e6):e+1}function ht(e){let t=e.startsWith(`@`)?e.slice(1):e,n=t.indexOf(`~`);return n===-1?t:t.slice(0,n)}function $(e,t){let n=new Set;for(let e of t){let t=ht(e);t.length>0&&n.add(t)}n.size!==0&&De(e,n)}function gt(e,t,n){if(!e||!n?.diff)return;let r=t.resolveCurrent(e);if(r)return $(r,_t(n)),r.snapshotGeneration}function _t(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 vt(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 yt(e){let{session:t,ref:n,mintedGeneration:r}=e;if(t&&C(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?y(t)??0:0;if(r!==e)return vt({ref:n,mintedGeneration:r,currentFrameEpoch:e})}}export{Ce as A,P as C,L as D,j as E,v as F,C as I,_e as L,b as M,Oe as N,D as O,x as P,A as S,I as T,W as _,mt as a,$e as b,ut as c,lt as d,ot as f,it as g,rt as h,yt as i,we as j,Ee as k,ct as l,q as m,gt as n,ft as o,at as p,$ as r,dt as s,pt as t,J as u,V as v,R as w,N as x,Ge as y};
1
+ import{D as e,P as t,X as n,g as r,k as i,s as a,x as o}from"./sdk-contracts.js";import{u as s}from"./capture.js";import{i as c}from"./snapshot-capture-annotations.js";import{r as l}from"./snapshot-diagnostics.js";import{r as u}from"./snapshot-private-evidence.js";import{a as d,r as ee}from"./diagnostics.js";import"./diagnostics2.js";import{E as te,_ as f,f as ne}from"./sdk-device.js";import{Mr as re,wn as ie}from"./sdk-batch.js";import{A as ae,B as oe,C as se,F as ce,I as le,N as ue,R as de,a as fe,g as pe,j as me,o as he,t as ge,z as _e}from"./runtime.js";import{g as p,o as m}from"./overlay.js";import{i as ve}from"./click-button.js";import{t as ye}from"./snapshot-state.js";import{i as be}from"./lease-context.js";import{randomInt as xe}from"node:crypto";let h={resolve:async()=>{throw new t(`COMMAND_FAILED`,`Interactor resolution is not composed for this process.`,{reason:`interactor-resolution-missing`})}};function Se(e){h=e}function Ce(){return h}var g=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 we=new g({state:`active`,scope:`all`,tree:void 0,generation:void 0});function Te(e){return new g({state:`active`,...e})}function Ee(e){return g.expire(e)}const _=new WeakMap,v=new WeakSet;function y(e){return e.refFrame??we}function b(e){return y(e).generation??e.snapshotGeneration}function De(e){return y(e).tree}function Oe(e){Ae(e),x(e),e.refFrame=Ee(y(e)),e.snapshotScopeSource=void 0}function x(e){e.snapshot&&v.add(e.snapshot)}function ke(e){return v.has(e)}function Ae(e){let t=S(e)+1;return _.set(e,t),t}function S(e){return _.get(e)??0}function C(e){w(e,`all`)}function je(e,t){w(e,t)}function w(e,t){e.refFrame=Te({scope:t,tree:e.snapshot,generation:e.snapshotGeneration})}function T(e){return y(e).state}function E(e){return y(e).scope}function Me(e){let t=e.ref.startsWith(`@`)?e.ref.slice(1):e.ref;return{admission:Ne({session:e.session,refBody:t,mintedGeneration:e.mintedGeneration}),scope:E(e.session),currentGeneration:b(e.session)}}function Ne(e){let{session:t,refBody:n,mintedGeneration:r}=e;if(T(t)===`expired`)return{admitted:!1,reason:`ref_frame_expired`};if(r!==void 0&&r!==b(t))return{admitted:!1,reason:`ref_generation_mismatch`};let i=E(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}}function Pe(e,t,n=e.snapshot){if(e.device.platform!==`android`)return;let r=Fe(e,n),i=r?.comparisonSafe===!0;e.androidSnapshotFreshness={action:t,markedAt:Date.now(),baselineCount:(r??n)?.nodes.length??0,baselineSignatures:i?_e(r?.nodes??[]):void 0,routeComparable:i}}function Fe(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 D(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 O(e){!e||e.device.platform!==`android`||delete e.androidSnapshotFreshness}async function k(e,t){return ue({capture:e.capture,classify:n=>de({snapshot:n.snapshot,rawNodeCount:n.annotations.analysis?.rawNodeCount},t,{interactiveOnly:e.interactiveOnly,mode:e.androidFreshnessMode}),window:t,retry:{retryBudgetMs:ce,delaysMs:le},onTrustworthyCapture:()=>O(e.session)})}function A(e){let t=new Map,n=[],r=me(e);for(let i of e){let e=Le(i,t,r);e&&n.push(e)}return n}function j(e){return e?.comparisonKey??e?.snapshotQuality?.backend}function M(e,t){return Math.abs(e.x-t.x)<=1&&Math.abs(e.y-t.y)<=1&&Math.abs(e.width-t.width)<=1&&Math.abs(e.height-t.height)<=1}function N(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){let r=e[n],i=t[n];if(!r||!i||r.key!==i.key||!M(r,i))return!1}return!0}function P(e,t){let n=F(e),r=F(t);if(n.size===0||r.size===0)return`ambiguous`;let i=0,a=!1;for(let[e,t]of n){let n=r.get(e);if(!n){a=!0;continue}if(i+=1,!M(t,n))return`changed`}if(i===0)return`ambiguous`;let o=r.size>i;return a&&o?`changed`:`unchanged`}function F(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 I(e,t){let n=e.filter(e=>e.discriminating),r=t.filter(e=>e.discriminating);if(n.length===0||n.length!==r.length)return!1;let i=new Map(r.map(e=>[e.key,e]));for(let e of n){let t=i.get(e.key);if(!t||!M(e,t))return!1}return!0}function L(e,t){let n=new Map(t.filter(e=>e.discriminating).map(e=>[e.key,e])),r=0,i=0,a=0;for(let t of e){if(!t.discriminating)continue;let e=n.get(t.key);if(!e){r+=1;continue}n.delete(t.key),a+=1,M(t,e)||(i+=1)}return{onlyInBaseline:r,onlyInCurrent:n.size,rectMismatched:i,shared:a}}function Ie(e,t,n){let r=R(z(e,n)),i=R(z(t,n));for(let[e,t]of r){let n=i.get(e);if(!n||!M(t,n))return!0;i.delete(e)}return i.size>0}function R(e){let t=new Map,n=new Map;for(let r of e){let e=t.get(r.content)??0;t.set(r.content,e+1),n.set(`${r.content}|#${e}`,r)}return n}function z(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 Le(e,t,n){if(!e.rect||!Ve(e.rect)||He(e))return;let r=Be(e);if(!r)return;let i=t.get(r)??0;t.set(r,i+1);let a=ze(e);return{key:`${r}|#${i}`,...a?{identity:a}:{},content:Re(e,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:!B(e,n)}}function Re(e,t){return t??`${e.type??``}|${e.role??``}`}function ze(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 B(e,t){return re(e)||e.ref!==void 0&&t.has(e.ref)}function Be(e){let t=[e.identifier,e.label,e.value,e.type,e.role,...p(e),e.hittable===!0?`hittable`:`not-hittable`].map(e=>typeof e==`string`?e.trim():``).join(`|`);return t.replaceAll(`|`,``)?t:void 0}function Ve(e){return[e.x,e.y,e.width,e.height].every(e=>Number.isFinite(e))&&e.width>0&&e.height>0}function He(e){return`${e.label??``} ${e.identifier??``}`.toLowerCase().includes(`scroll bar`)}function Ue(e){let{session:t,command:n,action:r=n,positionals:i,flags:a,androidFreshnessBaseline:o}=e;oe(r)&&Pe(t,r,o??t.snapshot),We(t,r,i,a)}function We(e,t,n=[],r){if(!H(e.device)||!Qe(t,n,r))return;let i=U(e.device)?A(e.snapshot?.nodes??[]):void 0;e.postGestureStabilization={action:t,positionals:n,markedAt:Date.now(),...i?.length?{baselineSignature:i,baselineBackend:j(e.snapshot)}:{}}}function Ge(e){e?.postGestureStabilization&&(e.postGestureStabilization=void 0)}function V(e){return!!e?.postGestureStabilization}async function Ke(e){if(f(e.device)&&e.session&&V(e.session))return await qe({...e,session:e.session});let t=D(e.session);if(t&&e.device.platform===`android`){let n=await k(e,t);return{snapshot:n.snapshot,...n.annotations}}}async function qe(e){return Xe(await Ye({session:e.session,capture:async()=>await Je(e),readSnapshot:e=>e.snapshot}))}async function Je(e){let t=D(e.session);return t&&e.device.platform===`android`?await k(e,t):await e.capture()}async function Ye(e){let{session:t,capture:n,readSnapshot:r}=e,i=t?.postGestureStabilization;if(!t||!H(t.device)||!i)return{value:e.initial??await n()};try{return await ae({pending:{action:i.action,positionals:i.positionals??[],baselineSignature:i.baselineSignature,baselineBackend:i.baselineBackend},needsBaselineDistrust:U(t.device),initial:e.initial,hooks:{capture:n,readSurface:e=>{let t=r(e);return{signature:A(t.nodes),backend:j(t)}},signaturesStable:N,classifyBaselineEvidence:P,surfacesIdentical:I,summarizeDivergence:L}})}finally{Ge(t)}}function Xe(e){let{snapshot:t,annotations:n}=e.value;return e.postGestureOutcome&&(t.postGestureOutcome=e.postGestureOutcome),{snapshot:t,...n}}function Ze(e){if(!e?.postGestureStabilization)return e;let{postGestureStabilization:t,...n}=e;return n}function Qe(e,t,n){return n?.postGestureStabilization===!1?!1:n?.postGestureStabilization===!0||e===`swipe`||e===`scroll`||e===`gesture`&&t[0]===`swipe`}function H(e){return f(e)}function U(e){return ne(e.platform)}const $e=`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 et(e){return Object.fromEntries($e.map(t=>[t,e?.[t]]))}function W(e,t,n,r,i,a){return{requestId:i??d().requestId,appBundleId:n,runnerLeaseContext:be({meta:a}),logPath:e,traceLogPath:r,...et(t),screenshotCaptureBackend:t?.maestro?.screenshotCaptureBackend,...s(t),clickButton:ve(t)}}let G;async function K(){if(G)return G;let{createAppleSessionObservation:e}=await import(`./session-observation.js`),{listLocalDeviceInventory:t,shouldPropagateDeviceInventoryProbeError:n}=await import(`./device-inventory-context.js`).then(e=>e.t);return G??=e({listLocalDevices:t,shouldPropagateProbeError:n}),G}const tt=Object.freeze({async observeRunnerSession(e){return(await K()).observeRunnerSession(e)},async resolveSoleForegroundApp(e){return(await K()).resolveSoleForegroundApp(e)}});async function nt(e,t,n,r){let{queryAppleRunnerSelector:i}=await import(`./runner-operations-facade.js`);return await i(e,t,n,r)}function rt(e){let{flags:t,logPath:n,meta:a,session:o,snapshotScope:s}=e,{appBundleId:c,trace:l,surface:u}=o??{},d=e.context??W(n??``,t,c,l?.outPath,a?.requestId,a);return{options:{appBundleId:c,...i(t,r),scope:s,includeRects:e.includeRects,surface:u},execution:q(d),...e.signal===void 0?{}:{signal:e.signal}}}function q(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 it(e){let t=se(e);return{...t,capture:ge(t),selectors:he(t),interactions:fe(t)}}async function at(e){let t=await(await Ce().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)}async function ot(e){let t=await Ke({session:e.session,device:e.device,interactiveOnly:e.flags?.snapshotInteractiveOnly===!0,androidFreshnessMode:e.androidFreshnessMode,capture:()=>Y(e)});if(t)return t;let n=await Y(e);return O(e.session),{snapshot:n.snapshot,...n.annotations}}async function J(e){if(e.captureData)return await e.captureData();let{device:t,session:n,logPath:a}=e,o=W(a,X(e),n?.appBundleId,n?.trace?.outPath);return await at({device:t,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,...i(o,r),includeRects:e.includeRects,surface:n?.surface}})}async function Y(e){let t=Date.now(),n=await J(e);l(e.session,{durationMs:Date.now()-t,backend:n.backend,platform:te(e.device)});let r=c(n),i=u(n,ye(n,X(e)));return r.androidSnapshot?.systemSurfaceOnly===!0&&(i.systemSurfaceOnly=!0),{data:n,snapshot:i,annotations:r}}function X(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function st(t,n){if(!t||!t.trim().startsWith(`@`))return{ok:!0,scope:t};if(!n?.snapshot)return a(`INVALID_ARGS`,`Ref scope requires an existing snapshot in session.`);let r=e(t.trim());if(!r)return a(`INVALID_ARGS`,`Invalid ref scope: ${t}`);let i=[n.snapshot,...n.snapshotScopeSource?[n.snapshotScopeSource]:[]],s=!1,c;for(let e of i){let t=o(e.nodes,r);if(t&&(s=!0,c=pe(t,e.nodes),c))break}return s?c?{ok:!0,scope:c}:a(`COMMAND_FAILED`,`Ref ${t} has no label to scope by`,{reason:m.refUnlabeled,ref:r}):a(`COMMAND_FAILED`,`Ref ${t} not found`,{reason:m.refNotFound,ref:r},{hint:ie})}function Z(e,t,n={}){if(!e)return;let r=De(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 ct(e,t){return{get:n=>n===e?Z(t,e):void 0,set:()=>{}}}function lt(e){let t=e.ref;return{getRef:()=>t?e.sessionStore.refresh(t):void 0,get:n=>n===e.sessionName?Z(t?e.sessionStore.resolveCurrent(t):void 0,e.sessionName,e.recordOptions):void 0,set:n=>{if(n.name!==e.sessionName){ee({level:`warn`,phase:`runtime_session_write_skipped`,data:{expected:e.sessionName,received:n.name}});return}let r=t?e.sessionStore.requireCurrent(t):void 0,i=e.setRecord(n,r,t);i&&(t=i)}}}function ut(e,t){e.snapshot!==t&&(e.snapshotGeneration=Q(e.snapshotGeneration)),e.snapshot=t,e.snapshotScopeSource=void 0,t.comparisonSafe===!0&&(e.lastComparisonSafeSnapshot=t)}function dt(e){e.snapshot=void 0}function ft(e,t){e.snapshot=t.snapshot,t.snapshot.comparisonSafe===!0&&(e.lastComparisonSafeSnapshot=t.snapshot),e.snapshotScopeSource=t.scopeSource,e.snapshotGeneration=t.keptCurrentSnapshot?t.previousGeneration:Q(t.previousGeneration)}function Q(e){return e===void 0?xe(1e5,1e6):e+1}function pt(e){let t=e.startsWith(`@`)?e.slice(1):e,n=t.indexOf(`~`);return n===-1?t:t.slice(0,n)}function $(e,t){let n=new Set;for(let e of t){let t=pt(e);t.length>0&&n.add(t)}n.size!==0&&je(e,n)}function mt(e,t,n){if(!e||!n?.diff)return;let r=t.resolveCurrent(e);if(r)return $(r,_t(n)),r.snapshotGeneration}function ht(e,r,i,a){if(i.code!==`AMBIGUOUS_MATCH`)return i;let o=n(i.details);if(o.length===0)return i;let s=e?r.resolveCurrent(e):void 0;return s?.snapshot&&s.snapshotGeneration!==void 0&&a!==void 0&&a.nodes===s.snapshot.nodes?($(s,o),new t(i.code,i.message,{...i.details,refsGeneration:s.snapshotGeneration},i.cause)):gt(i)}function gt(e){let{candidates:n,refsGeneration:r,...i}=e.details??{};return new t(e.code,e.message,{...i,hint:`Narrow the selector with role/id/longer text and retry.`},e.cause)}function _t(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 vt(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 yt(e){let{session:t,ref:n,mintedGeneration:r}=e;if(t&&T(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?b(t)??0:0;if(r!==e)return vt({ref:n,mintedGeneration:r,currentFrameEpoch:e})}}export{C as A,A as C,j as D,I as E,S as F,y as I,T as L,ke as M,x as N,L as O,Me as P,Se as R,N as S,Ie as T,nt as _,yt as a,Ue as b,lt as c,J as d,st as f,tt as g,q as h,ht as i,Oe as j,D as k,ct as l,rt as m,mt as n,ft as o,it as p,$ as r,ut as s,dt as t,ot as u,W as v,P as w,Ze as x,V as y};