agent-device 0.21.14 → 0.21.16

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 (310) hide show
  1. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.14.apk → agent-device-android-ime-helper-0.21.16.apk} +0 -0
  2. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.16.apk.sha256 +1 -0
  3. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.14.manifest.json → agent-device-android-ime-helper-0.21.16.manifest.json} +4 -4
  4. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.16.apk +0 -0
  5. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.16.apk.sha256 +1 -0
  6. package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.14.manifest.json → agent-device-android-snapshot-helper-0.21.16.manifest.json} +6 -6
  7. package/apple/snapshot-bridge/SnapshotBridgeRuntime.m +11 -1
  8. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +84 -2
  9. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAXSnapshotBridge.m +4 -2
  10. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerMainOwnedState.swift +27 -0
  11. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedTextEntry.h +10 -4
  12. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedTextEntry.m +21 -5
  13. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSystemSurfaceHostPolicy.swift +0 -9
  14. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +40 -5
  15. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandDispatch.swift +179 -91
  16. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +5 -4
  17. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +1 -1
  18. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+GestureExecution.swift +1 -0
  19. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +36 -49
  20. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+MainThreadWork.swift +11 -15
  21. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +136 -29
  22. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +4 -2
  23. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+PrivateAXPresentation.swift +3 -0
  24. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScreenRecorder.swift +6 -5
  25. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScrollDragExecution.swift +4 -0
  26. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SequenceExecution.swift +2 -0
  27. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +8 -4
  28. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotAcquisition.swift +56 -14
  29. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCapturePlan.swift +18 -8
  30. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCaptureTarget.swift +9 -7
  31. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotExecution.swift +5 -4
  32. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotTiming.swift +2 -2
  33. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedGesturePolicy.swift +4 -1
  34. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift +5 -1
  35. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +245 -41
  36. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +47 -2
  37. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +7 -4
  38. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +115 -111
  39. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +17 -10
  40. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TvRemote.swift +8 -9
  41. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TypeExecution.swift +2 -1
  42. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +12 -11
  43. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotGeometry.swift +7 -4
  44. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotModels.swift +15 -8
  45. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationProjection.swift +1 -0
  46. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFold.swift +26 -9
  47. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFoldProjection.swift +1 -0
  48. package/dist/src/adapter.js +1 -1
  49. package/dist/src/adb-executor.js +1 -1
  50. package/dist/src/adb-failure.js +1 -1
  51. package/dist/src/adb-transport.js +1 -1
  52. package/dist/src/agent-browser-provider.js +1 -1
  53. package/dist/src/agent-browser-tool.js +1 -1
  54. package/dist/src/agent-device-client.js +2 -2
  55. package/dist/src/ai-sdk.js +1 -1
  56. package/dist/src/alert-runtime.js +1 -1
  57. package/dist/src/android-adb.d.ts +1 -8
  58. package/dist/src/android-input-ownership.js +1 -1
  59. package/dist/src/android-snapshot-quality.js +1 -0
  60. package/dist/src/android-system-chrome.js +1 -1
  61. package/dist/src/android.js +1 -1
  62. package/dist/src/app-catalog.js +1 -1
  63. package/dist/src/app-deployment-resolution.js +1 -1
  64. package/dist/src/app-inventory.js +1 -1
  65. package/dist/src/app-launch.js +1 -1
  66. package/dist/src/app-lifecycle.js +1 -1
  67. package/dist/src/app-lifecycle2.js +1 -1
  68. package/dist/src/app-log-files.js +1 -1
  69. package/dist/src/app-log-runtime2.js +1 -1
  70. package/dist/src/app-resolution.js +2 -2
  71. package/dist/src/apple-runner-platform.js +1 -1
  72. package/dist/src/application-lifecycle-interaction.js +1 -1
  73. package/dist/src/archive.js +1 -1
  74. package/dist/src/artifact-download.js +1 -1
  75. package/dist/src/auth-session.js +1 -1
  76. package/dist/src/auth.js +1 -1
  77. package/dist/src/backend-snapshot-options.js +1 -1
  78. package/dist/src/boot-diagnostics.js +1 -1
  79. package/dist/src/capture-disclosure.js +1 -1
  80. package/dist/src/capture.js +1 -1
  81. package/dist/src/cli-config.js +1 -1
  82. package/dist/src/cli-help.js +3 -2
  83. package/dist/src/cli.js +4 -4
  84. package/dist/src/click-button.js +1 -1
  85. package/dist/src/client-metro.js +1 -1
  86. package/dist/src/client-types.d.ts +103 -96
  87. package/dist/src/clipboard-shell-response.js +1 -1
  88. package/dist/src/command-schema.js +1 -1
  89. package/dist/src/command-tools.js +3 -3
  90. package/dist/src/connection-runtime.js +1 -1
  91. package/dist/src/connection.js +5 -5
  92. package/dist/src/contracts.d.ts +1 -1
  93. package/dist/src/contracts.js +1 -1
  94. package/dist/src/daemon-client-lease-beat.js +1 -0
  95. package/dist/src/daemon-client-lifecycle.js +1 -1
  96. package/dist/src/daemon-client-transport.js +1 -0
  97. package/dist/src/daemon-shutdown-report.js +1 -1
  98. package/dist/src/daemon.js +1 -1
  99. package/dist/src/debug-symbols-facade.js +1 -1
  100. package/dist/src/device-claim-inspection.js +1 -1
  101. package/dist/src/device-claim-rule.js +2 -2
  102. package/dist/src/device-input-state.d.ts +15 -2
  103. package/dist/src/device-inventory-context.js +1 -1
  104. package/dist/src/device-rotation.js +1 -1
  105. package/dist/src/device-selection-resolver.js +1 -1
  106. package/dist/src/device-session.js +1 -1
  107. package/dist/src/device-shell.js +1 -1
  108. package/dist/src/device.js +1 -1
  109. package/dist/src/device2.js +1 -1
  110. package/dist/src/devicectl.js +1 -1
  111. package/dist/src/diagnostics.js +1 -1
  112. package/dist/src/dispatch-resolve.js +1 -1
  113. package/dist/src/doctor-facade.js +1 -1
  114. package/dist/src/doctor2.js +1 -1
  115. package/dist/src/durable-resource.js +1 -1
  116. package/dist/src/engine-eval-script.js +1 -1
  117. package/dist/src/error.js +1 -1
  118. package/dist/src/exec.js +1 -1
  119. package/dist/src/file.js +1 -1
  120. package/dist/src/find.js +1 -1
  121. package/dist/src/format.js +1 -1
  122. package/dist/src/gesture-admission.js +1 -1
  123. package/dist/src/gesture-plan-types.d.ts +1 -1
  124. package/dist/src/gesture-plan.js +1 -1
  125. package/dist/src/gesture-runtime.js +1 -1
  126. package/dist/src/harmonyos.js +1 -1
  127. package/dist/src/helper.js +2 -2
  128. package/dist/src/host.js +1 -1
  129. package/dist/src/human-control-contract.js +1 -1
  130. package/dist/src/human-control.js +1 -1
  131. package/dist/src/index.d.ts +7 -3
  132. package/dist/src/index.js +1 -1
  133. package/dist/src/input-actions.js +1 -1
  134. package/dist/src/input-actions2.js +1 -1
  135. package/dist/src/install-artifact-facade.js +1 -1
  136. package/dist/src/install-source-network-transport.js +1 -1
  137. package/dist/src/install-source2.js +1 -1
  138. package/dist/src/interaction-positionals.js +1 -1
  139. package/dist/src/interaction-ref-policy.js +1 -1
  140. package/dist/src/interaction2.js +1 -1
  141. package/dist/src/interactor-operation-binding.js +1 -1
  142. package/dist/src/interactor.js +5 -4
  143. package/dist/src/interactor2.js +1 -1
  144. package/dist/src/interactors.js +1 -1
  145. package/dist/src/internal/bin.js +1 -1
  146. package/dist/src/internal/daemon.js +2 -2
  147. package/dist/src/internal/png-worker.js +1 -1
  148. package/dist/src/internal/run-script-http-child.js +1 -1
  149. package/dist/src/inventory.js +1 -1
  150. package/dist/src/inventory2.js +1 -1
  151. package/dist/src/inventory3.js +1 -1
  152. package/dist/src/inventory5.js +1 -1
  153. package/dist/src/ios-snapshot-acquisition.js +1 -1
  154. package/dist/src/ios-snapshot-engine.js +1 -0
  155. package/dist/src/ios-snapshot-runtime.js +1 -1
  156. package/dist/src/lease-context.js +1 -1
  157. package/dist/src/lease-scope.js +1 -1
  158. package/dist/src/lease.js +1 -1
  159. package/dist/src/limrun-download-file.js +1 -1
  160. package/dist/src/limrun-runtime-dependencies.js +1 -1
  161. package/dist/src/limrun.d.ts +16 -3
  162. package/dist/src/linux.js +1 -1
  163. package/dist/src/location-coordinates.js +1 -1
  164. package/dist/src/managed-device-scope.js +1 -1
  165. package/dist/src/mechanics.js +17 -17
  166. package/dist/src/mobile-snapshot-semantics.js +1 -1
  167. package/dist/src/multitouch-support.js +1 -1
  168. package/dist/src/native-build-cache.js +1 -1
  169. package/dist/src/observation.js +1 -1
  170. package/dist/src/overlay.js +3 -0
  171. package/dist/src/parameterized-recorded-fill.js +1 -1
  172. package/dist/src/perf-facade.js +1 -1
  173. package/dist/src/perf-runtime-operation-builder.js +1 -1
  174. package/dist/src/perf-runtime-plan.js +1 -1
  175. package/dist/src/perf-target.js +1 -1
  176. package/dist/src/perf.js +1 -1
  177. package/dist/src/physical-device-control.js +1 -1
  178. package/dist/src/platform-request-scope.js +1 -1
  179. package/dist/src/platform-runtime-managed-owner.js +1 -1
  180. package/dist/src/platform-runtime-open-target.js +1 -1
  181. package/dist/src/platform-runtime-operation-host.js +4 -4
  182. package/dist/src/platform-runtime-runtime-hints.js +1 -1
  183. package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
  184. package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
  185. package/dist/src/platform-runtime-screen-recording-process-host.js +1 -1
  186. package/dist/src/platform-runtime-unavailable.js +1 -1
  187. package/dist/src/platform-runtime.js +1 -1
  188. package/dist/src/platform-runtime2.js +1 -1
  189. package/dist/src/png-crop-bytes.js +1 -1
  190. package/dist/src/png-size.js +1 -1
  191. package/dist/src/png-worker-client.js +1 -1
  192. package/dist/src/png.js +1 -1
  193. package/dist/src/prepare-kind.js +1 -1
  194. package/dist/src/provider-session-ownership.js +1 -1
  195. package/dist/src/provider-webdriver.js +1 -1
  196. package/dist/src/proxy.js +1 -1
  197. package/dist/src/quality-warnings.js +1 -1
  198. package/dist/src/react-native.js +1 -1
  199. package/dist/src/record-runtime.js +1 -1
  200. package/dist/src/recording.js +1 -1
  201. package/dist/src/rect-center.js +1 -1
  202. package/dist/src/register-builtins.js +1 -1
  203. package/dist/src/registry.js +36 -36
  204. package/dist/src/remote-config2.js +1 -1
  205. package/dist/src/replay-divergence.js +1 -1
  206. package/dist/src/replay.js +1 -1
  207. package/dist/src/reporting.js +1 -1
  208. package/dist/src/request-admission.js +1 -1
  209. package/dist/src/request-cancel.js +1 -1
  210. package/dist/src/request-runtime-binding.js +1 -1
  211. package/dist/src/result-serialization.js +1 -1
  212. package/dist/src/retry.js +1 -1
  213. package/dist/src/runner-artifact-manifest.js +1 -0
  214. package/dist/src/runner-cache-metadata.js +3 -2
  215. package/dist/src/runner-client.js +1 -1
  216. package/dist/src/runner-dev-tools-security.js +1 -1
  217. package/dist/src/runner-device-readiness.js +1 -1
  218. package/dist/src/runner-disposal.js +1 -1
  219. package/dist/src/runner-error-classification.js +3 -3
  220. package/dist/src/runner-operations-facade.js +1 -1
  221. package/dist/src/runner.js +1 -1
  222. package/dist/src/runtime-transport-hints.js +1 -1
  223. package/dist/src/runtime.js +1 -3
  224. package/dist/src/runtime10.js +2 -2
  225. package/dist/src/runtime2.js +4 -4
  226. package/dist/src/runtime3.js +1 -1
  227. package/dist/src/runtime4.js +5 -5
  228. package/dist/src/runtime5.js +1 -1
  229. package/dist/src/runtime6.js +1 -1
  230. package/dist/src/runtime7.js +1 -1
  231. package/dist/src/runtime8.js +1 -1
  232. package/dist/src/runtime9.js +1 -1
  233. package/dist/src/screen-recording-admission-ledger.js +1 -1
  234. package/dist/src/screen-recording-completion.js +1 -1
  235. package/dist/src/screen-recording-options.js +1 -1
  236. package/dist/src/screen-recording-resource-recovery.js +1 -1
  237. package/dist/src/screen-recording-transport.js +1 -1
  238. package/dist/src/screenshot-density.js +1 -1
  239. package/dist/src/screenshot-image.js +1 -1
  240. package/dist/src/screenshot-overlay-draw.js +1 -1
  241. package/dist/src/screenshot-runtime.js +1 -1
  242. package/dist/src/screenshot.js +1 -1
  243. package/dist/src/screenshot3.js +1 -1
  244. package/dist/src/script.js +1 -1
  245. package/dist/src/scroll-command.d.ts +13 -6
  246. package/dist/src/scroll-command.js +1 -1
  247. package/dist/src/scroll-gesture.js +1 -1
  248. package/dist/src/sdk-batch-runner.js +2 -2
  249. package/dist/src/sdk-batch.js +2 -2
  250. package/dist/src/sdk-contracts.d.ts +38 -10
  251. package/dist/src/sdk-contracts.js +2 -2
  252. package/dist/src/sdk-device.js +1 -1
  253. package/dist/src/sdk-finders.d.ts +1 -1
  254. package/dist/src/sdk-io.js +1 -1
  255. package/dist/src/sdk-remote-config.js +1 -1
  256. package/dist/src/sdk-selectors.d.ts +1 -1
  257. package/dist/src/selection.js +0 -0
  258. package/dist/src/selector-runtime.js +1 -1
  259. package/dist/src/server.js +1 -1
  260. package/dist/src/session-allocation.js +1 -1
  261. package/dist/src/session-routing.js +1 -1
  262. package/dist/src/session-runtime-admission.js +1 -1
  263. package/dist/src/session-snapshot.js +1 -1
  264. package/dist/src/session-store.js +3 -3
  265. package/dist/src/session.js +1 -1
  266. package/dist/src/session2.js +4 -4
  267. package/dist/src/settings.js +1 -1
  268. package/dist/src/settings2.js +1 -0
  269. package/dist/src/simctl.js +1 -1
  270. package/dist/src/simulator-boot.js +1 -1
  271. package/dist/src/simulator.js +1 -1
  272. package/dist/src/snapshot-capture-annotations.js +1 -1
  273. package/dist/src/snapshot-desktop-projection.js +1 -1
  274. package/dist/src/snapshot-runtime-binding.js +1 -1
  275. package/dist/src/snapshot-runtime.js +1 -1
  276. package/dist/src/snapshot-state.js +1 -1
  277. package/dist/src/snapshot2.js +1 -1
  278. package/dist/src/snapshot3.js +1 -1
  279. package/dist/src/snapshot4.js +1 -1
  280. package/dist/src/src.js +1 -1
  281. package/dist/src/src4.js +1 -1
  282. package/dist/src/src7.js +1 -1
  283. package/dist/src/src8.js +2 -2
  284. package/dist/src/stop-sequence.js +1 -1
  285. package/dist/src/string-enum.js +1 -1
  286. package/dist/src/surface-snapshot.js +1 -1
  287. package/dist/src/takeover.js +1 -1
  288. package/dist/src/text-entry-focus.js +1 -1
  289. package/dist/src/tool-provider.js +1 -1
  290. package/dist/src/tool-provider2.js +1 -1
  291. package/dist/src/touch-runtime.js +1 -1
  292. package/dist/src/transport.js +1 -1
  293. package/dist/src/tree.js +1 -1
  294. package/dist/src/tv-remote.js +1 -1
  295. package/dist/src/type-text-runtime.js +1 -1
  296. package/dist/src/verified-file.js +1 -1
  297. package/dist/src/video.js +1 -1
  298. package/dist/src/viewport.js +1 -1
  299. package/dist/src/web.js +1 -1
  300. package/dist/src/web2.js +1 -1
  301. package/dist/src/webdriver-source.js +1 -1
  302. package/package.json +2 -2
  303. package/server.json +2 -2
  304. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.14.apk.sha256 +0 -1
  305. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.14.apk +0 -0
  306. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.14.apk.sha256 +0 -1
  307. package/dist/src/absence-observation-errors.js +0 -1
  308. package/dist/src/runner-presentation.js +0 -1
  309. package/dist/src/semantic-index.js +0 -1
  310. package/dist/src/snapshot-scope.js +0 -1
@@ -1,2 +1,2 @@
1
- import{r as e}from"./rolldown-runtime.js";const t=/(token|secret|password|authorization|cookie|api[_-]?key|access[_-]?key|private[_-]?key|user[_-]?code|device[_-]?code|refresh[_-]?credential)/i,n=/\b(?:bearer\s+[a-z0-9._-]+|adc_(?:agent|live|refresh|cli)_[a-z0-9._-]+)\b/gi,r=/\b([a-z0-9_-]*(?:api[_-]?key|token|secret|password|user[_-]?code|device[_-]?code|refresh[_-]?credential)[a-z0-9_-]*)(\s*[=:]\s*)("[^"]*"|'[^']*'|\S+)/gi,i=/https?:\/\/[^\s"'<>]+/gi;function a(e){return s(e,new WeakSet)}function o(e){if(!e||typeof e!=`object`)return;let t=e;if(typeof t.message==`string`&&t.message.length!==0)return a({message:t.message,...typeof t.code==`string`&&t.code.length>0?{code:t.code}:{}})}function s(e,n,r){if(e==null)return e;if(typeof e==`string`)return c(e,r);if(typeof e!=`object`)return e;if(n.has(e))return`[Circular]`;if(n.add(e),Array.isArray(e))return e.map(e=>s(e,n));let i={};for(let[r,a]of Object.entries(e)){if(t.test(r)){i[r]=`[REDACTED]`;continue}i[r]=s(a,n,r)}return i}function c(e,i){let a=e.trim();if(!a)return l(e);if(i&&t.test(i))return`[REDACTED]`;let o=u(a);return o=o.replace(n,`[REDACTED]`),o=o.replace(r,(e,t,n,r,i,a)=>f({key:t,separator:n,rawValue:r,offset:i,input:a})||d(r)?e:`${t}${n}[REDACTED]`),l(o)}function l(e){return e.length<=400?e:`${e.slice(0,386)}...<truncated>`}function u(e){return e.replace(i,e=>p(e)??e)}function d(e){return/^adc_(?:agent|live|refresh|cli)_\.\.\.$/i.test(e)}function f(e){if(e.key.toLowerCase()!==`token`||!e.separator.includes(`:`))return!1;try{return new URL(e.rawValue).pathname.replace(/\/+$/,``)===`/api-keys`&&/(?:^|\b)(?:service\/)?api\s+$/i.test(e.input.slice(0,e.offset))}catch{return!1}}function p(e){try{let t=new URL(e);return t.search&&=`?REDACTED`,(t.username||t.password)&&(t.username=`REDACTED`,t.password=`REDACTED`),t.toString()}catch{return null}}var m=e({AppError:()=>b,KNOWN_APP_ERROR_CODES:()=>h,asAppError:()=>O,createRequestCanceledError:()=>w,defaultHintForCode:()=>I,errorMessage:()=>D,isAgentDeviceError:()=>k,isRequestCanceledDetails:()=>T,isRequestCanceledError:()=>E,normalizeAgentDeviceError:()=>A,normalizeError:()=>j,readDiagnosticsRecordRef:()=>P,readElementMatchCandidateRefs:()=>v,readErrorCandidateViews:()=>_,retriableForErrorCode:()=>F,throwDaemonError:()=>x,toAppErrorCode:()=>g});const h=[`INVALID_ARGS`,`DEVICE_NOT_FOUND`,`DEVICE_IN_USE`,`TOOL_MISSING`,`APP_NOT_INSTALLED`,`UNSUPPORTED_PLATFORM`,`UNSUPPORTED_OPERATION`,`NOT_IMPLEMENTED`,`COMMAND_FAILED`,`SESSION_NOT_FOUND`,`UNAUTHORIZED`,`AMBIGUOUS_MATCH`,`REPLAY_DIVERGENCE`,`REPAIR_SESSION_EXPIRED`,`REPAIR_COMMIT_FAILED`,`UNKNOWN`];function g(e,t=`COMMAND_FAILED`){return typeof e==`string`&&e.length>0?e:t}function _(e){let t=y(e?.candidates),n=[];if(t.length>0){let r=typeof e?.matches==`number`?e.matches:t.length,i=typeof e?.refsGeneration==`number`?e.refsGeneration:void 0;n.push({kind:`element-match`,candidates:t,matches:r,...i===void 0?{}:{refsGeneration:i}})}let r=ee(e?.devices);return r.length>0&&n.push({kind:`device`,devices:r}),n}function v(e){return y(e?.candidates).flatMap(e=>{let t=/^@(e\d+)(?:~s\d+)?(?:\s|$)/.exec(e);return t?.[1]?[t[1]]:[]})}function y(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function ee(e){return Array.isArray(e)?e.filter(e=>typeof e==`object`&&!!e&&typeof e.id==`string`&&typeof e.name==`string`):[]}var b=class extends Error{code;details;cause;constructor(e,t,n,r){super(t),this.code=e,this.details=n,this.cause=r}};function x(e){throw new b(g(e.code),e.message,{...e.details??{},hint:e.hint,diagnosticId:e.diagnosticId,logPath:e.logPath,logPathUnavailable:e.logPathUnavailable,diagnosticsRecord:e.diagnosticsRecord,retriable:e.retriable,supportedOn:e.supportedOn},e.cause)}const S=`request_canceled`,C=`request canceled`;function w(e,t){return new b(`COMMAND_FAILED`,C,{hint:`The request was canceled intentionally (explicit cancel or client disconnect) — no retry is needed unless the cancellation was unintended.`,...e,reason:S},t)}function T(e){return e?.reason===S}function E(e){return!(e instanceof b)||e.code!==`COMMAND_FAILED`?!1:T(e.details)?!0:e.message===C}function D(e){return e instanceof Error?e.message:String(e)}function O(e,t=`UNKNOWN`){return e instanceof b?e:e instanceof Error?new b(t,e.message,void 0,e):new b(t,`Unknown error`,{err:e})}function k(e){return e instanceof b}function A(e,t={}){return j(e,t)}function j(e,t={}){let n=O(e),r=n.details?a(n.details):void 0,i=N(r,`diagnosticId`)??t.diagnosticId,s=N(r,`logPath`)??t.logPath,c=N(r,`logPathUnavailable`),l=P(r?.diagnosticsRecord)??t.diagnosticsRecord,u=N(r,`hint`)??I(n.code),d=ae(r,`retriable`)??F(n.code),f=N(r,`supportedOn`),p=se(r),m=ne(n.code,n.message,r),h=o(n.cause);return{code:n.code,message:m,...h===void 0?{}:{cause:h},hint:u,diagnosticId:i,logPath:s,...c===void 0?{}:{logPathUnavailable:c},...l===void 0?{}:{diagnosticsRecord:l},...d===void 0?{}:{retriable:d},...f===void 0?{}:{supportedOn:f},details:p}}const te=/^\S+ exited with code -?\d+$/;function ne(e,t,n){if(e!==`COMMAND_FAILED`||n?.processExitError!==!0)return t;let r=M(typeof n?.stderr==`string`?n.stderr:``);return r?te.test(t)?r:t.includes(r)?t:`${t}: ${r}`:t}const re=[/^an error was encountered processing the command/i,/^underlying error\b/i,/^simulator device failed to complete the requested operation/i],ie=/^(?:(?:adb|xcrun|simctl):\s*)?(?:error:\s*)?/i;function M(e){for(let t of e.split(`
2
- `)){let e=t.trim();if(!e||re.some(t=>t.test(e)))continue;let n=e.replace(ie,``).trim();if(n)return n.length>200?`${n.slice(0,200)}...`:n}return null}function N(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function P(e){if(!e||typeof e!=`object`)return;let{session:t,requestId:n}=e;if(typeof t==`string`&&typeof n==`string`&&t.length!==0&&n.length!==0)return{session:t,requestId:n}}function ae(e,t){let n=e?.[t];return typeof n==`boolean`?n:void 0}const oe=[`startupRuleMatched`,`startupHostDeadlineHit`];function se(e){if(!e)return;let t={...e};for(let e of oe)delete t[e];return delete t.hint,delete t.diagnosticId,delete t.logPath,delete t.logPathUnavailable,delete t.diagnosticsRecord,delete t.retriable,delete t.supportedOn,Object.keys(t).length>0?t:void 0}const ce={DEVICE_IN_USE:!0};function le(e){return h.includes(e)}function F(e){return le(e)?ce[e]:void 0}function I(e){switch(e){case`INVALID_ARGS`:return`Check command arguments and run --help for usage examples.`;case`SESSION_NOT_FOUND`:return`Run open first or pass an explicit device selector.`;case`TOOL_MISSING`:return`Install required platform tooling and ensure it is available in PATH.`;case`DEVICE_NOT_FOUND`:return`Verify the target device is booted/connected and selectors match.`;case`APP_NOT_INSTALLED`:return`Run apps to discover the exact installed package or bundle id, or install the app before open.`;case`UNSUPPORTED_OPERATION`:return`This command is not available for the selected platform/device.`;case`UNSUPPORTED_PLATFORM`:return`This platform is not supported for the requested operation; run devices to inspect available targets.`;case`AMBIGUOUS_MATCH`:return`Multiple candidates matched. Narrow the query or pass an exact identifier.`;case`DEVICE_IN_USE`:return`The device is busy with another agent-device request; retry once it frees up.`;case`REPLAY_DIVERGENCE`:return`Read details.divergence (screen/suggestions) for repair context, or rerun with --json for the full report.`;case`REPAIR_SESSION_EXPIRED`:return`The --save-script repair session was reaped before it was finalized; re-run replay <script> --save-script from the start.`;case`REPAIR_COMMIT_FAILED`:return`The repair transaction completed, but committing its healed script failed at teardown (no-clobber refusal or a filesystem error); inspect the target path/permissions, then re-run replay <script> --save-script to retry.`;case`NOT_IMPLEMENTED`:return`This command is part of the planned API but is not implemented yet.`;case`COMMAND_FAILED`:return`Retry with --debug and inspect diagnostics log for details.`;case`UNAUTHORIZED`:return`Refresh daemon metadata and retry the command.`;case`UNKNOWN`:return`Unexpected internal error. Retry with --debug and report the diagnostics log if it persists.`;default:return`Retry with --debug and inspect diagnostics log for details.`}}const L={interactiveOnly:`snapshotInteractiveOnly`,depth:`snapshotDepth`,scope:`snapshotScope`,raw:`snapshotRaw`,customActions:`snapshotCustomActions`,forceFull:`snapshotForceFull`,includeHiddenContentHints:`snapshotIncludeHiddenContentHints`,preferredBackend:`snapshotPreferredBackend`},ue=[`interactiveOnly`,`depth`,`scope`,`raw`,`customActions`,`forceFull`],de=[`interactiveOnly`,`preferredBackend`,`depth`,`scope`,`raw`,`customActions`,`includeHiddenContentHints`],R=[`depth`,`interactiveOnly`,`raw`,`scope`,`customActions`];function z(e,t){return Object.fromEntries(t.map(t=>[t,e?.[L[t]]]))}function B(e,t){return Object.fromEntries(t.flatMap(t=>{let n=e?.[t];return n===void 0?[]:[[L[t],n]]}))}function V(e){if(e===void 0||e.backend===void 0)return{};switch(e.backend){case`xctest`:return{backend:e.backend,producer:e.producer};case`android`:return{backend:e.backend,producer:e.producer};case`harmonyos-arkui`:return{backend:e.backend,producer:e.producer};case`macos-helper`:return{backend:e.backend,producer:e.producer};case`linux-atspi`:return{backend:e.backend,producer:e.producer};case`web`:return{backend:e.backend,producer:e.producer}}}function H(e){return e===`xctest`||e===`android`||e===`harmonyos-arkui`||e===`macos-helper`||e===`linux-atspi`||e===`web`}function fe(e){return e===void 0||e===`xctest`||e===`android`||e===`harmonyos-arkui`}const pe=[`bundle_changed`,`stale_target`,`missing_after_wait`,`interaction_foreground_guard`];function me(e){return typeof e==`string`&&pe.includes(e)}function he(e,t){return t.postGestureOutcome??=e.postGestureOutcome,t}function ge(e){return e.map((e,t)=>({...e,ref:e.ref??`e${t+1}`}))}const _e=/^~s(\d+)$/,ve=`Refs look like @e12, optionally pinned to the snapshot generation that minted them: @e12~s3 (the ref, then "~s" and the refsGeneration reported by the issuing snapshot/find response).`;function U(e){let t=e.trim(),n=t.indexOf(`~`);if(n===-1)return{base:t};let r=_e.exec(t.slice(n));return!r||n===0?null:{base:t.slice(0,n),generation:Number(r[1])}}function ye(e){let t=U(e);if(!t)return null;let n=t.base;return n.startsWith(`@`)?n.slice(1)||null:n.startsWith(`e`)?n:null}function be(e,t){return e.find(e=>e.ref===t)??null}function xe(e){return JSON.stringify({interactiveOnly:e?.interactiveOnly===!0,depth:typeof e?.depth==`number`?e.depth:null,scope:e?.scope?.trim()||null,raw:e?.raw===!0,customActions:e?.customActions===!0})}function Se(e){if(e)return z(e,R)}function Ce(e){return{x:Math.round(e.x+e.width/2),y:Math.round(e.y+e.height/2)}}const W=[`ios`,`android`,`harmonyos`];function we(e){return W.some(t=>t===e)}const Te=[`summary`,`headers`,`body`,`all`],Ee=[`digest`,`default`,`full`];function De(e){return e!==void 0&&e!=="default"}function G(e,t,n,r){return{ok:!1,error:{code:e,message:t,...r?.hint?{hint:r.hint}:{},...r?.retriable===void 0?{}:{retriable:r.retriable},...n?{details:n}:{}}}}const K=`No active session. Run open first.`;function Oe(){return G(`SESSION_NOT_FOUND`,K)}function q(e){return{parse(t){return e(t,`$`)}}}function J(e,t){throw Error(`${e}: ${t}`)}function Y(e,t){return(!e||typeof e!=`object`||Array.isArray(e))&&J(t,`Expected an object`),e}function X(e,t){return typeof e!=`string`&&J(t,`Expected a string`),e}function ke(e,t){return Number.isInteger(e)||J(t,`Expected an integer`),e}function Ae(e,t){return Array.isArray(e)||J(t,`Expected an array`),e}function Z(e,t,n){let r=e[t];return r===void 0?void 0:X(r,`${n}.${t}`)}function je(e,t,n){let r=e[t];if(r!==void 0)return Ae(r,`${n}.${t}`).map((e,r)=>X(e,`${n}.${t}[${String(r)}]`))}function Q(e,t,n){let r=e[t];return r===void 0?void 0:ke(r,`${n}.${t}`)}function $(e,t,n){let r=e[t];return r===void 0?void 0:Y(r,`${n}.${t}`)}function Me(e,t,n,r){let i=e[t];if(i!==void 0)return(typeof i!=`string`||!n.includes(i))&&J(`${r}.${t}`,`Expected one of: ${n.join(`, `)}`),i}const Ne=q((e,t)=>{let n=Y(e,t);return{platform:Me(n,`platform`,W,t),metroHost:Z(n,`metroHost`,t),metroPort:Q(n,`metroPort`,t),bundleUrl:Z(n,`bundleUrl`,t),launchUrl:Z(n,`launchUrl`,t)}});function Pe(e,t){let n=e.id;return n==null||typeof n!=`string`&&typeof n!=`number`&&J(`${t}.id`,`Expected a string, number, or null`),n}const Fe=q((e,t)=>{let n=Y(e,t);return{jsonrpc:Z(n,`jsonrpc`,t),id:Pe(n,t),method:Z(n,`method`,t),params:n.params}}),Ie=q((e,t)=>{let n=Y(e,t);return{token:Z(n,`token`,t),session:Z(n,`session`,t),command:Z(n,`command`,t),positionals:je(n,`positionals`,t),input:$(n,`input`,t),flags:$(n,`flags`,t),runtime:$(n,`runtime`,t),meta:$(n,`meta`,t)}});export{w as A,v as B,z as C,fe as D,U as E,T as F,a as G,F as H,E as I,o as K,A as L,D as M,m as N,b as O,k as P,j as R,B as S,V as T,x as U,_ as V,g as W,be as _,Ne as a,H as b,we as c,ve as d,de as f,Ce as g,xe as h,Ie as i,I as j,O as k,Fe as l,ge as m,K as n,G as o,ue as p,Ee as r,De as s,Te as t,Oe as u,he as v,Se as w,ye as x,me as y,P as z};
1
+ import{r as e}from"./rolldown-runtime.js";const t=/(token|secret|password|authorization|cookie|api[_-]?key|access[_-]?key|private[_-]?key|user[_-]?code|device[_-]?code|refresh[_-]?credential)/i,n=/\b(?:bearer\s+[a-z0-9._-]+|adc_(?:agent|live|refresh|cli)_[a-z0-9._-]+)\b/gi,r=/\b([a-z0-9_-]*(?:api[_-]?key|token|secret|password|user[_-]?code|device[_-]?code|refresh[_-]?credential)[a-z0-9_-]*)(\s*[=:]\s*)("[^"]*"|'[^']*'|\S+)/gi,i=/https?:\/\/[^\s"'<>]+/gi;function a(e){return s(e,new WeakSet)}function o(e){if(!e||typeof e!=`object`)return;let t=e;if(typeof t.message==`string`&&t.message.length!==0)return a({message:t.message,...typeof t.code==`string`&&t.code.length>0?{code:t.code}:{}})}function s(e,n,r){if(e==null)return e;if(typeof e==`string`)return c(e,r);if(typeof e!=`object`)return e;if(n.has(e))return`[Circular]`;if(n.add(e),Array.isArray(e))return e.map(e=>s(e,n));let i={};for(let[r,a]of Object.entries(e)){if(t.test(r)){i[r]=`[REDACTED]`;continue}i[r]=s(a,n,r)}return i}function c(e,i){let a=e.trim();if(!a)return l(e);if(i&&t.test(i))return`[REDACTED]`;let o=u(a);return o=o.replace(n,`[REDACTED]`),o=o.replace(r,(e,t,n,r,i,a)=>f({key:t,separator:n,rawValue:r,offset:i,input:a})||d(r)?e:`${t}${n}[REDACTED]`),l(o)}function l(e){return e.length<=400?e:`${e.slice(0,386)}...<truncated>`}function u(e){return e.replace(i,e=>p(e)??e)}function d(e){return/^adc_(?:agent|live|refresh|cli)_\.\.\.$/i.test(e)}function f(e){if(e.key.toLowerCase()!==`token`||!e.separator.includes(`:`))return!1;try{return new URL(e.rawValue).pathname.replace(/\/+$/,``)===`/api-keys`&&/(?:^|\b)(?:service\/)?api\s+$/i.test(e.input.slice(0,e.offset))}catch{return!1}}function p(e){try{let t=new URL(e);return t.search&&=`?REDACTED`,(t.username||t.password)&&(t.username=`REDACTED`,t.password=`REDACTED`),t.toString()}catch{return null}}var m=e({AppError:()=>b,KNOWN_APP_ERROR_CODES:()=>h,asAppError:()=>k,createRequestCanceledError:()=>w,defaultHintForCode:()=>L,errorMessage:()=>D,isAgentDeviceError:()=>A,isRequestCanceledDetails:()=>T,isRequestCanceledError:()=>E,normalizeAgentDeviceError:()=>j,normalizeError:()=>M,readDiagnosticsRecordRef:()=>P,readElementMatchCandidateRefs:()=>v,readErrorCandidateViews:()=>_,retriableForErrorCode:()=>I,summarizeCommandAttemptFailures:()=>O,throwDaemonError:()=>x,toAppErrorCode:()=>g});const h=[`INVALID_ARGS`,`DEVICE_NOT_FOUND`,`DEVICE_IN_USE`,`TOOL_MISSING`,`APP_NOT_INSTALLED`,`UNSUPPORTED_PLATFORM`,`UNSUPPORTED_OPERATION`,`NOT_IMPLEMENTED`,`COMMAND_FAILED`,`SESSION_NOT_FOUND`,`UNAUTHORIZED`,`AMBIGUOUS_MATCH`,`REPLAY_DIVERGENCE`,`REPAIR_SESSION_EXPIRED`,`REPAIR_COMMIT_FAILED`,`UNKNOWN`];function g(e,t=`COMMAND_FAILED`){return typeof e==`string`&&e.length>0?e:t}function _(e){let t=y(e?.candidates),n=[];if(t.length>0){let r=typeof e?.matches==`number`?e.matches:t.length,i=typeof e?.refsGeneration==`number`?e.refsGeneration:void 0;n.push({kind:`element-match`,candidates:t,matches:r,...i===void 0?{}:{refsGeneration:i}})}let r=ee(e?.devices);return r.length>0&&n.push({kind:`device`,devices:r}),n}function v(e){return y(e?.candidates).flatMap(e=>{let t=/^@(e\d+)(?:~s\d+)?(?:\s|$)/.exec(e);return t?.[1]?[t[1]]:[]})}function y(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function ee(e){return Array.isArray(e)?e.filter(e=>typeof e==`object`&&!!e&&typeof e.id==`string`&&typeof e.name==`string`):[]}var b=class extends Error{code;details;cause;constructor(e,t,n,r){super(t),this.code=e,this.details=n,this.cause=r}};function x(e){throw new b(g(e.code),e.message,{...e.details??{},hint:e.hint,diagnosticId:e.diagnosticId,logPath:e.logPath,logPathUnavailable:e.logPathUnavailable,diagnosticsRecord:e.diagnosticsRecord,retriable:e.retriable,supportedOn:e.supportedOn},e.cause)}const S=`request_canceled`,C=`request canceled`;function w(e,t){return new b(`COMMAND_FAILED`,C,{hint:`The request was canceled intentionally (explicit cancel or client disconnect) — no retry is needed unless the cancellation was unintended.`,...e,reason:S},t)}function T(e){return e?.reason===S}function E(e){return!(e instanceof b)||e.code!==`COMMAND_FAILED`?!1:T(e.details)?!0:e.message===C}function D(e){return e instanceof Error?e.message:String(e)}function O(e){return e.map(e=>({args:e.args.join(` `),exitCode:e.exitCode,stderr:e.stderr.slice(0,400)}))}function k(e,t=`UNKNOWN`){return e instanceof b?e:e instanceof Error?new b(t,e.message,void 0,e):new b(t,`Unknown error`,{err:e})}function A(e){return e instanceof b}function j(e,t={}){return M(e,t)}function M(e,t={}){let n=k(e),r=n.details?a(n.details):void 0,i=N(r,`diagnosticId`)??t.diagnosticId,s=N(r,`logPath`)??t.logPath,c=N(r,`logPathUnavailable`),l=P(r?.diagnosticsRecord)??t.diagnosticsRecord,u=N(r,`hint`)??L(n.code),d=F(r,`retriable`)??I(n.code),f=N(r,`supportedOn`),p=se(r),m=ne(n.code,n.message,r),h=o(n.cause);return{code:n.code,message:m,...h===void 0?{}:{cause:h},hint:u,diagnosticId:i,logPath:s,...c===void 0?{}:{logPathUnavailable:c},...l===void 0?{}:{diagnosticsRecord:l},...d===void 0?{}:{retriable:d},...f===void 0?{}:{supportedOn:f},details:p}}const te=/^\S+ exited with code -?\d+$/;function ne(e,t,n){if(e!==`COMMAND_FAILED`||n?.processExitError!==!0)return t;let r=ae(typeof n?.stderr==`string`?n.stderr:``);return r?te.test(t)?r:t.includes(r)?t:`${t}: ${r}`:t}const re=[/^an error was encountered processing the command/i,/^underlying error\b/i,/^simulator device failed to complete the requested operation/i],ie=/^(?:(?:adb|xcrun|simctl):\s*)?(?:error:\s*)?/i;function ae(e){for(let t of e.split(`
2
+ `)){let e=t.trim();if(!e||re.some(t=>t.test(e)))continue;let n=e.replace(ie,``).trim();if(n)return n.length>200?`${n.slice(0,200)}...`:n}return null}function N(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function P(e){if(!e||typeof e!=`object`)return;let{session:t,requestId:n}=e;if(typeof t==`string`&&typeof n==`string`&&t.length!==0&&n.length!==0)return{session:t,requestId:n}}function F(e,t){let n=e?.[t];return typeof n==`boolean`?n:void 0}const oe=[`startupRuleMatched`,`startupHostDeadlineHit`];function se(e){if(!e)return;let t={...e};for(let e of oe)delete t[e];return delete t.hint,delete t.diagnosticId,delete t.logPath,delete t.logPathUnavailable,delete t.diagnosticsRecord,delete t.retriable,delete t.supportedOn,Object.keys(t).length>0?t:void 0}const ce={DEVICE_IN_USE:!0};function le(e){return h.includes(e)}function I(e){return le(e)?ce[e]:void 0}function L(e){switch(e){case`INVALID_ARGS`:return`Check command arguments and run --help for usage examples.`;case`SESSION_NOT_FOUND`:return`Run open first or pass an explicit device selector.`;case`TOOL_MISSING`:return`Install required platform tooling and ensure it is available in PATH.`;case`DEVICE_NOT_FOUND`:return`Verify the target device is booted/connected and selectors match.`;case`APP_NOT_INSTALLED`:return`Run apps to discover the exact installed package or bundle id, or install the app before open.`;case`UNSUPPORTED_OPERATION`:return`This command is not available for the selected platform/device.`;case`UNSUPPORTED_PLATFORM`:return`This platform is not supported for the requested operation; run devices to inspect available targets.`;case`AMBIGUOUS_MATCH`:return`Multiple candidates matched. Narrow the query or pass an exact identifier.`;case`DEVICE_IN_USE`:return`The device is busy with another agent-device request; retry once it frees up.`;case`REPLAY_DIVERGENCE`:return`Read details.divergence (screen/suggestions) for repair context, or rerun with --json for the full report.`;case`REPAIR_SESSION_EXPIRED`:return`The --save-script repair session was reaped before it was finalized; re-run replay <script> --save-script from the start.`;case`REPAIR_COMMIT_FAILED`:return`The repair transaction completed, but committing its healed script failed at teardown (no-clobber refusal or a filesystem error); inspect the target path/permissions, then re-run replay <script> --save-script to retry.`;case`NOT_IMPLEMENTED`:return`This command is part of the planned API but is not implemented yet.`;case`COMMAND_FAILED`:return`Retry with --debug and inspect diagnostics log for details.`;case`UNAUTHORIZED`:return`Refresh daemon metadata and retry the command.`;case`UNKNOWN`:return`Unexpected internal error. Retry with --debug and report the diagnostics log if it persists.`;default:return`Retry with --debug and inspect diagnostics log for details.`}}const R={interactiveOnly:`snapshotInteractiveOnly`,depth:`snapshotDepth`,scope:`snapshotScope`,raw:`snapshotRaw`,customActions:`snapshotCustomActions`,forceFull:`snapshotForceFull`,includeHiddenContentHints:`snapshotIncludeHiddenContentHints`,preferredBackend:`snapshotPreferredBackend`},ue=[`interactiveOnly`,`depth`,`scope`,`raw`,`customActions`,`forceFull`],de=[`interactiveOnly`,`preferredBackend`,`depth`,`scope`,`raw`,`customActions`,`includeHiddenContentHints`],fe=[`depth`,`interactiveOnly`,`raw`,`scope`,`customActions`];function z(e,t){return Object.fromEntries(t.map(t=>[t,e?.[R[t]]]))}function B(e,t){return Object.fromEntries(t.flatMap(t=>{let n=e?.[t];return n===void 0?[]:[[R[t],n]]}))}function V(e){if(e===void 0||e.backend===void 0)return{};switch(e.backend){case`xctest`:return{backend:e.backend,producer:e.producer};case`android`:return{backend:e.backend,producer:e.producer};case`harmonyos-arkui`:return{backend:e.backend,producer:e.producer};case`macos-helper`:return{backend:e.backend,producer:e.producer};case`linux-atspi`:return{backend:e.backend,producer:e.producer};case`web`:return{backend:e.backend,producer:e.producer}}}function pe(e){return e===`xctest`||e===`android`||e===`harmonyos-arkui`||e===`macos-helper`||e===`linux-atspi`||e===`web`}function me(e){return e===void 0||e===`xctest`||e===`android`||e===`harmonyos-arkui`}const he=[`bundle_changed`,`stale_target`,`missing_after_wait`,`interaction_foreground_guard`];function ge(e){return typeof e==`string`&&he.includes(e)}const H=[`unknown`,`notRunning`,`runningBackgroundSuspended`,`runningBackground`,`runningForeground`];Object.freeze(H.filter(e=>e!==`runningForeground`));function _e(e){return typeof e==`string`&&H.includes(e)}function ve(e,t){return t.postGestureOutcome??=e.postGestureOutcome,t}function ye(e){return e.map((e,t)=>({...e,ref:e.ref??`e${t+1}`}))}const be=/^~s(\d+)$/,xe=`Refs look like @e12, optionally pinned to the snapshot generation that minted them: @e12~s3 (the ref, then "~s" and the refsGeneration reported by the issuing snapshot/find response).`;function U(e){let t=e.trim(),n=t.indexOf(`~`);if(n===-1)return{base:t};let r=be.exec(t.slice(n));return!r||n===0?null:{base:t.slice(0,n),generation:Number(r[1])}}function Se(e){let t=U(e);if(!t)return null;let n=t.base;return n.startsWith(`@`)?n.slice(1)||null:n.startsWith(`e`)?n:null}function Ce(e,t){return e.find(e=>e.ref===t)??null}function we(e){return JSON.stringify({interactiveOnly:e?.interactiveOnly===!0,depth:typeof e?.depth==`number`?e.depth:null,scope:e?.scope?.trim()||null,raw:e?.raw===!0,customActions:e?.customActions===!0})}function Te(e){if(e)return z(e,fe)}function Ee(e){return{x:Math.round(e.x+e.width/2),y:Math.round(e.y+e.height/2)}}const W=[`ios`,`android`,`harmonyos`];function De(e){return W.some(t=>t===e)}const G={ios:`ios-instance`,android:`android-instance`,harmonyos:`harmonyos-instance`};function Oe(e){return e===void 0?void 0:G[e]}const ke=new Map(Object.entries(G).flatMap(([e,t])=>t===void 0?[]:[[t,e]]));function Ae(e){return ke.get(e)}const je=[`summary`,`headers`,`body`,`all`],Me=[`digest`,`default`,`full`];function Ne(e){return e!==void 0&&e!=="default"}function K(e,t,n,r){return{ok:!1,error:{code:e,message:t,...r?.hint?{hint:r.hint}:{},...r?.retriable===void 0?{}:{retriable:r.retriable},...n?{details:n}:{}}}}const q=`No active session. Run open first.`;function Pe(){return K(`SESSION_NOT_FOUND`,q)}function J(e){return{parse(t){return e(t,`$`)}}}function Y(e,t){throw Error(`${e}: ${t}`)}function X(e,t){return(!e||typeof e!=`object`||Array.isArray(e))&&Y(t,`Expected an object`),e}function Z(e,t){return typeof e!=`string`&&Y(t,`Expected a string`),e}function Fe(e,t){return Number.isInteger(e)||Y(t,`Expected an integer`),e}function Ie(e,t){return Array.isArray(e)||Y(t,`Expected an array`),e}function Q(e,t,n){let r=e[t];return r===void 0?void 0:Z(r,`${n}.${t}`)}function Le(e,t,n){let r=e[t];if(r!==void 0)return Ie(r,`${n}.${t}`).map((e,r)=>Z(e,`${n}.${t}[${String(r)}]`))}function Re(e,t,n){let r=e[t];return r===void 0?void 0:Fe(r,`${n}.${t}`)}function $(e,t,n){let r=e[t];return r===void 0?void 0:X(r,`${n}.${t}`)}function ze(e,t,n,r){let i=e[t];if(i!==void 0)return(typeof i!=`string`||!n.includes(i))&&Y(`${r}.${t}`,`Expected one of: ${n.join(`, `)}`),i}const Be=J((e,t)=>{let n=X(e,t);return{platform:ze(n,`platform`,W,t),metroHost:Q(n,`metroHost`,t),metroPort:Re(n,`metroPort`,t),bundleUrl:Q(n,`bundleUrl`,t),launchUrl:Q(n,`launchUrl`,t)}});function Ve(e,t){let n=e.id;return n==null||typeof n!=`string`&&typeof n!=`number`&&Y(`${t}.id`,`Expected a string, number, or null`),n}const He=J((e,t)=>{let n=X(e,t);return{jsonrpc:Q(n,`jsonrpc`,t),id:Ve(n,t),method:Q(n,`method`,t),params:n.params}}),Ue=J((e,t)=>{let n=X(e,t);return{token:Q(n,`token`,t),session:Q(n,`session`,t),command:Q(n,`command`,t),positionals:Le(n,`positionals`,t),input:$(n,`input`,t),flags:$(n,`flags`,t),runtime:$(n,`runtime`,t),meta:$(n,`meta`,t)}});export{U as A,E as B,ge as C,z as D,B as E,L as F,_ as G,M as H,D as I,x as J,I as K,m as L,b as M,k as N,Te as O,w as P,A as R,_e as S,Se as T,P as U,j as V,v as W,a as X,g as Y,o as Z,ye as _,Be as a,Ce as b,De as c,Pe as d,Ae as f,ue as g,de as h,Ue as i,me as j,V as k,He as l,xe as m,q as n,K as o,H as p,O as q,Me as r,Ne as s,je as t,Oe as u,we as v,pe as w,ve as x,Ee as y,T as z};
@@ -1 +1 @@
1
- import{O 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=[`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 te(e){let t=x(e);return t===`ios`||t===`ipados`}function S(e){return c.includes(e)}function C(e){return l.includes(e)}function w(e){return s.includes(e)}function T(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 E(e,t){return t?D(t):e===`macos`||e===`desktop`?`macOS`:e===`tv`?`tvOS`:`iOS`}function D(e){switch(e){case`tvos`:return`tvOS`;case`macos`:return`macOS`;case`visionos`:return`visionOS`;default:return`iOS`}}function O(e){let{simulatorSetPath:t,platform:n,target:r}=e;if(t&&n!==`macos`&&r!==`desktop`)return t}function k(e){return e.map((e,t)=>({device:e,index:t})).sort((e,t)=>X(e,t)).map(({device:e})=>e)}function A(e){return!e||e===`apple`||e===`ios`}async function j(e,t,n={}){let r=e.filter(e=>W(e,t));return M(r,t)||I(r,t.deviceName)||($(r)&&(r=k(r)),R(r,t,n))}function M(e,t){if(N(t),t.udid)return P(e,t.udid);if(t.serial)return F(e,t)}function N(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 P(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 F(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 I(t,n){if(!n)return;let r=Y(n),i=t.find(e=>Y(e.name)===r);if(!i){let r=L(t,n);throw new e(`DEVICE_NOT_FOUND`,`No device named ${n}`,r===void 0?void 0:{hint:r})}return i}function L(e,t){let n=e.find(e=>e.id===t);if(!n)return;let r=ne(n.platform);if(r)return`${t} is the id of ${JSON.stringify(n.name)}, not its name. Did you mean ${r} ${t}?`}function ne(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&&K(t.platform)?`--serial ${t.id}`:`--udid ${t?.id??`<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 T(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.name)!==Y(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&&A(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){return e.toLowerCase().replaceAll(`_`,` `).replaceAll(/\s+/g,` `).trim()}function X(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:re(e.name)?n:t,tv:r,desktop:i}[e.target??`mobile`]}function $(e){return e.length>0&&e.every(e=>f(e.platform))}function re(e){return/\bipad\b/i.test(e)}export{i as A,j as C,n as D,k as E,r as O,O as S,b as T,y as _,v as a,_ as b,w as c,m as d,p as f,K as g,C as h,l as i,a as j,t as k,f as l,S as m,c as n,te as o,g as p,u as r,d as s,ee as t,h as u,W as v,x as w,E as x,T as y};
1
+ import{M 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 ee=[`ios`,`ipados`,`tvos`,`watchos`,`visionos`,`macos`],s=[`apple`,`android`,`harmonyos`,`vega`,`linux`,`web`],c=[`ios`,`macos`,`android`,`harmonyos`,`vega`,`linux`,`web`],l=[...s,`ios`,`macos`],u=[`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 te(e){if(e.kind!==`simulator`)return!1;let t=b(e);return t===`ios`||t===`ipados`}function h(e){return e.platform===`android`||e.platform===`harmonyos`||f(e.platform)&&!p(e)}function g(e){return f(e.platform)?p(e)?`macos`:`ios`:e.platform}function _(e){return e===`macos`?{platform:`apple`,appleOs:`macos`}:e===`ios`?{platform:`apple`}:{platform:e}}function v(e){return f(e.platform)&&e.target===`tv`}function y(e){return m(e)&&!v(e)&&e.appleOs!==`visionos`}function b(e){return e.appleOs?e.appleOs:e.platform===`macos`?`macos`:v(e)?`tvos`:`ios`}function ne(e){let t=b(e);return t===`ios`||t===`ipados`}function re(e){return s.includes(e)}function x(e){return c.includes(e)}function S(e){return ee.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)=>X(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=Y(n),i=t.find(e=>Y(e.name)===r);if(!i){let r=I(t,n);throw new e(`DEVICE_NOT_FOUND`,`No device named ${n}`,r===void 0?void 0:{hint:r})}return i}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.name)!==Y(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){return e.toLowerCase().replaceAll(`_`,` `).replaceAll(/\s+/g,` `).trim()}function X(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:ie(e.name)?n:t,tv:r,desktop:i}[e.target??`mobile`]}function $(e){return e.length>0&&e.every(e=>f(e.platform))}function ie(e){return/\bipad\b/i.test(e)}export{r as A,T as C,y as D,b as E,i as M,a as N,O,g as S,A as T,K as _,_ as a,C as b,d as c,te as d,m as f,x as g,re as h,c as i,t as j,n as k,S as l,h as m,s as n,L as o,p,l as r,ne as s,u as t,f as u,v,D as w,w as x,W as y};
@@ -1,4 +1,4 @@
1
- import { N as SnapshotNode } from "./sdk-contracts.js";
1
+ import { P 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{r as e}from"./rolldown-runtime.js";import{O as t}from"./sdk-contracts.js";import n from"node:path";import{promises as r}from"node:fs";import i from"node:os";var a=e({createLocalArtifactAdapter:()=>o});function o(e={}){let a=e.cwd??process.cwd(),o=e.tempDir??i.tmpdir(),c=e.rootDir?s(e.rootDir,a):void 0;return{resolveInput:async e=>{if(e.kind===`uploadedArtifact`)throw new t(`UNSUPPORTED_OPERATION`,`Uploaded artifact inputs require a custom artifact adapter`);return{path:s(e.path,a,c)}},reserveOutput:async(e,t)=>{let i,l=t.visibility??`client-visible`,u=e?.kind===`path`?s(e.path,a,c):n.join(i=await r.mkdtemp(n.join(o,`agent-device-${t.field}-`)),`${t.field}${t.ext}`);return await r.mkdir(n.dirname(u),{recursive:!0}),{path:u,visibility:l,...i?{cleanup:async()=>{await r.rm(i,{recursive:!0,force:!0})}}:{},publish:async()=>e?.kind===`downloadableArtifact`?{kind:`localPath`,field:t.field,artifactType:t.artifactType,path:u,fileName:e.fileName??n.basename(e.clientPath??u)}:void 0}},createTempFile:async e=>{let t=await r.mkdtemp(n.join(o,`${e.prefix}-`));return{path:n.join(t,`file${e.ext}`),visibility:`internal`,cleanup:async()=>{await r.rm(t,{recursive:!0,force:!0})}}}}}function s(e,r,i){let a=n.isAbsolute(e)?e:n.resolve(r,e);if(i&&!c(a,i))throw new t(`INVALID_ARGS`,`Local path is outside the artifact adapter root`,{path:a,rootDir:i});return a}function c(e,t){let r=n.relative(t,e);return r===``||!r.startsWith(`..`)&&!n.isAbsolute(r)}export{a as n,o as t};
1
+ import{r as e}from"./rolldown-runtime.js";import{M as t}from"./sdk-contracts.js";import n from"node:path";import{promises as r}from"node:fs";import i from"node:os";var a=e({createLocalArtifactAdapter:()=>o});function o(e={}){let a=e.cwd??process.cwd(),o=e.tempDir??i.tmpdir(),c=e.rootDir?s(e.rootDir,a):void 0;return{resolveInput:async e=>{if(e.kind===`uploadedArtifact`)throw new t(`UNSUPPORTED_OPERATION`,`Uploaded artifact inputs require a custom artifact adapter`);return{path:s(e.path,a,c)}},reserveOutput:async(e,t)=>{let i,l=t.visibility??`client-visible`,u=e?.kind===`path`?s(e.path,a,c):n.join(i=await r.mkdtemp(n.join(o,`agent-device-${t.field}-`)),`${t.field}${t.ext}`);return await r.mkdir(n.dirname(u),{recursive:!0}),{path:u,visibility:l,...i?{cleanup:async()=>{await r.rm(i,{recursive:!0,force:!0})}}:{},publish:async()=>e?.kind===`downloadableArtifact`?{kind:`localPath`,field:t.field,artifactType:t.artifactType,path:u,fileName:e.fileName??n.basename(e.clientPath??u)}:void 0}},createTempFile:async e=>{let t=await r.mkdtemp(n.join(o,`${e.prefix}-`));return{path:n.join(t,`file${e.ext}`),visibility:`internal`,cleanup:async()=>{await r.rm(t,{recursive:!0,force:!0})}}}}}function s(e,r,i){let a=n.isAbsolute(e)?e:n.resolve(r,e);if(i&&!c(a,i))throw new t(`INVALID_ARGS`,`Local path is outside the artifact adapter root`,{path:a,rootDir:i});return a}function c(e,t){let r=n.relative(t,e);return r===``||!r.startsWith(`..`)&&!n.isAbsolute(r)}export{a as n,o as t};
@@ -1 +1 @@
1
- import{O as e}from"./sdk-contracts.js";import{r as t}from"./sdk-device.js";const n=[`portrait`,`landscape`],r=new Set([`1`,`true`,`yes`,`on`]),i=new Set([`0`,`false`,`no`,`off`]);function a(e){return`AGENT_DEVICE_${e.replaceAll(/([A-Z])/g,`_$1`).replaceAll(/[^A-Za-z0-9_]/g,`_`).toUpperCase()}`}function o(t,n,r,i){if(t.multiple)return(Array.isArray(n)?n:[n]).map(e=>o({...t,multiple:!1},e,r,i));if(t.type===`boolean`)return s(n,r,i);if(t.type===`booleanOrString`){if(typeof n==`boolean`)return n;if(typeof n==`string`&&c(n)!==void 0)return c(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 l(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 s(t,n,r){if(typeof t==`boolean`)return t;if(typeof t==`string`){let e=c(t);if(e!==void 0)return e}throw new e(`INVALID_ARGS`,`Invalid value for "${r}" in ${n}. Expected boolean.`)}function c(e){let t=e.trim().toLowerCase();if(r.has(t))return!0;if(i.has(t))return!1}function l(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 u=[{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:[`ios-simulator`,`ios-instance`,`android-instance`,`harmonyos-instance`]},{key:`platform`,type:`enum`,enumValues:t},{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:n},{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`}],d=[{key:`leaseProvider`,type:`string`,env:!1},{key:`deviceKey`,type:`string`,env:!1},{key:`clientId`,type:`string`,env:!1}],f=[...u,...d],p=new Map(f.map(e=>[e.key,e]));function m(e){return p.get(e)}function h(e){return m(e)?.env===!1?[]:[a(e)]}export{a,n as c,m as i,f as n,c as o,h as r,o as s,u as t};
1
+ import{M as e}from"./sdk-contracts.js";import{r as t}from"./sdk-device.js";const n=[`portrait`,`landscape`],r=new Set([`1`,`true`,`yes`,`on`]),i=new Set([`0`,`false`,`no`,`off`]);function a(e){return`AGENT_DEVICE_${e.replaceAll(/([A-Z])/g,`_$1`).replaceAll(/[^A-Za-z0-9_]/g,`_`).toUpperCase()}`}function o(t,n,r,i){if(t.multiple)return(Array.isArray(n)?n:[n]).map(e=>o({...t,multiple:!1},e,r,i));if(t.type===`boolean`)return s(n,r,i);if(t.type===`booleanOrString`){if(typeof n==`boolean`)return n;if(typeof n==`string`&&c(n)!==void 0)return c(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 l(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 s(t,n,r){if(typeof t==`boolean`)return t;if(typeof t==`string`){let e=c(t);if(e!==void 0)return e}throw new e(`INVALID_ARGS`,`Invalid value for "${r}" in ${n}. Expected boolean.`)}function c(e){let t=e.trim().toLowerCase();if(r.has(t))return!0;if(i.has(t))return!1}function l(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 u=[{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:[`ios-simulator`,`ios-instance`,`android-instance`,`harmonyos-instance`]},{key:`platform`,type:`enum`,enumValues:t},{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:n},{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`}],d=[{key:`leaseProvider`,type:`string`,env:!1},{key:`deviceKey`,type:`string`,env:!1},{key:`clientId`,type:`string`,env:!1}],f=[...u,...d],p=new Map(f.map(e=>[e.key,e]));function m(e){return p.get(e)}function h(e){return m(e)?.env===!1?[]:[a(e)]}export{a,n as c,m as i,f as n,c as o,h as r,o as s,u as t};
@@ -1,4 +1,4 @@
1
- import { C as Platform, L as SnapshotState, N as SnapshotNode, T as PublicPlatform, h as ResponseCost, k as Rect } from "./sdk-contracts.js";
1
+ import { A as Rect, C as Platform, P as SnapshotNode, R as SnapshotState, T as PublicPlatform, h as ResponseCost } from "./sdk-contracts.js";
2
2
  //#region packages/contracts/src/click-button.d.ts
3
3
  declare const CLICK_BUTTONS: readonly ['primary', 'secondary', 'middle'];
4
4
  type ClickButton = (typeof CLICK_BUTTONS)[number];
Binary file
@@ -1 +1 @@
1
- import{E as e,O as t,d as n,h as r,k as i,o as a,u as o,v as s,w as c}from"./sdk-contracts.js";import{b as l,d as u}from"./sdk-device.js";import{Lt as d,Mn as f,Pn as p,dr as m,fr as h,ur as g}from"./sdk-batch.js";import{s as ee}from"./session-store.js";import{D as te,H as ne,L as _,R as v,V as y,f as re,i as b,m as ie,n as ae,o as oe,p as x,r as se,s as ce,w as le}from"./session-snapshot.js";import{d as ue}from"./parameterized-recorded-fill.js";import{a as de,h as fe,m as pe,s as me,t as he}from"./absence-observation-errors.js";import{r as ge}from"./diagnostics.js";import"./diagnostics2.js";import{i as _e}from"./rect-center.js";import{a as S}from"./android-system-chrome.js";import{r as C}from"./request-cancel.js";import"./request.js";import{i as w}from"./request-runtime-binding.js";import{n as T}from"./dispatch-resolve.js";import{s as E}from"./quality-warnings.js";import{t as D}from"./backend-snapshot-options.js";import{i as O,n as k,t as A}from"./capture-disclosure.js";import{t as j}from"./snapshot-runtime-binding.js";function M(t){let r=e(t);return r?{ok:!0,ref:r.base,generation:r.generation}:{ok:!1,response:a(`INVALID_ARGS`,`Invalid ref "${t}" — malformed generation suffix.`,{hint:n})}}function N(e,t){if(t===`exists`)return{found:!0};if(t===`wait`)return{found:!0,waitedMs:e.waitedMs};if(t===`list`)return{action:`list`,matches:Array.isArray(e.matches)?e.matches.length:0};let n=typeof e.ref==`string`?e.ref:void 0;return t===`get_attrs`?{ref:n,action:`get attrs`}:{ref:n,action:`get text`,text:typeof e.text==`string`?e.text:``}}function P(e){return e.kind===`found`?{found:!0,...typeof e.waitedMs==`number`?{waitedMs:e.waitedMs}:{}}:e.kind===`list`?{matches:e.matches.map(e=>({ref:e.ref,node:S(e.node)}))}:{ref:e.ref,...e.kind===`text`?{text:e.text}:{},node:S(e.node)}}function F(e,t){let n=Array.isArray(e.selectorChain)?e.selectorChain:void 0,r=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:S(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){let o=e.get(t);if(!o)return;let s=ue(o)&&i?le(i,{mode:a}):void 0;e.recordAction(o,{command:n.command,positionals:n.positionals??[],flags:n.flags??{},result:r,interactiveObservation:ee(n),...s?{targetEvidence:s,targetEvidenceMode:a??`action`}:{}})}function 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:d({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:a(`INVALID_ARGS`,`${e} @ref does not support ${n.join(`, `)}.`)}async function H(e,n){if(e.device.platform!==`android`||!e.appBundleId||e.lease?.leaseProvider||w(e.device))return null;if(!n)throw new t(`INTERNAL_ERROR`,`Android observation was not supplied by root runtime composition`);let r=await n.readAppState(e.device),i=r.package?.trim();if(!i||i===e.appBundleId)return null;let a=await n.isPermissionPackage(i);return!Ee(i)&&!a?null:{expectedPackage:e.appBundleId,foregroundPackage:i,activity:r.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=pe(n),l=e.readTextAtPoint;if(!l)return c;let d=_e(n.rect);if(!d||u(t)&&c&&!fe(n.type??``))return c;let f=s(r,i,a),p=await l({point:d,options:{appBundleId:i,surface:o},execution:ie(f)});return p.status===`read`?p.text:(ge({level:`warn`,phase:`interaction_read_fallback`,data:{reason:Oe(p.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{session:t,sessionStore:n,sessionName:r}=e,i=0,a,o,s=t=>(e.consumedSnapshot&&(e.consumedSnapshot.state=t.snapshot),t);return{capture:async c=>{let l=Date.now(),u=Ie(c,e.req.flags?.out),d=Me({timestamp:l,lastSnapshotAt:i,lastSnapshotResult:a,lastSnapshotCacheKey:o,session:t,request:c,cacheKey:u});if(d)return s(d);let f=Ne({session:t,timestamp:l,request:c});if(f)return i=f.createdAt,a={snapshot:f},o=u,s(a);let p=await ke({params:e,request:c});c.signal?.throwIfAborted();let m={snapshot:p};return Re({session:t,sessionStore:n,sessionName:r,snapshot:p}),i=l,a=m,o=u,s(m)}}}async function ke(e){let{params:t,request:n}=e,r=await W(t,n,n.snapshotScope);return n.recovery?.legacyIosSparse&&me(r)?s(r,await Ae({runtimeParams:t,request:n,policy:n.recovery.legacyIosSparse})):n.recovery?.sparseVerdictQueryScope?.shouldScope&&E(r.snapshotQuality)?s(r,await je({runtimeParams:t,request:n,policy:n.recovery.sparseVerdictQueryScope,snapshot:r})):r}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={...t.flags,snapshotInteractiveOnly:r},a=e.capture,o=await ce({device:e.device,session:e.session,flags:i,outPath:t.outPath??e.req.flags?.out,logPath:e.logPath??``,snapshotScope:n,includeRects:t.includeRects,signal:t.signal,captureData:async()=>await a(x({flags:i,logPath:e.logPath??``,meta:e.req.meta,session:e.session,snapshotScope:n,includeRects:t.includeRects,signal:t.signal}))});return A(e.captureProof,o.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)&&!v(a)&&!G(a,o))return r}function Ne(e){let{session:t,timestamp:n,request:r}=e,i=t?.snapshot;if(!(!i||y(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||v(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&&te(e)}function K(e){return r(c(Le(e)))}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{session:t,sessionStore:n,sessionName:r,snapshot:i}=e;!t||E(i.snapshotQuality)||(b(t,i),n.set(r,t))}function q(e){return re({backend:Be(e),...O(`selector commands`,{plural:!0}),sessions:oe({sessionName:e.sessionName,getSession:()=>e.session,recordOptions:{includeSnapshot:!0},setRecord:t=>{!e.session||!t.snapshot||(b(e.session,t.snapshot),e.sessionStore.set(e.sessionName,e.session))}}),signal:e.signal??C(e.req.meta?.requestId)})}async function ze(e,t){e.consumedSnapshot??={},e.captureProof??={};let n=e.sessionStore.get(e.sessionName);return!n&&t?{ok:!1,response:o()}:{ok:!0,session:n,device:n?.device??await T(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,runtime:q({...e,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)=>_(i??``,e,t,n)),c=e.bound?.readText,u=e.bound?.findText,d=x({flags:t.flags,logPath:i??``,meta:t.meta,session:n,snapshotScope:void 0}).execution,f=e.bound,p=f===void 0?void 0:U({device:r,session:n,sessionStore:o,sessionName:a,req:t,consumedSnapshot:e.consumedSnapshot,captureProof:e.captureProof,logPath:i,capture:f.capture});return{platform:l(r),captureSnapshot:p&&(async(e,n)=>{let i={...t.flags,...D(n)},a=n?.includeRects===!0,o=n?.scope??t.flags?.snapshotScope,s=t.command===`wait`||t.command===`find`||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})}),...u?{findText:async(e,t)=>{let{found:r}=await u({text:t,options:{appBundleId:n?.appBundleId,surface:n?.surface},execution:d,...e.signal?{signal:e.signal}:{}});return n&&ne(n),{found:r}}}:{}}}function Ve(e){if(e.command!==`is`)return!1;let t=h(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=f(n,t.flags);if(!r.ok)return a(r.code,r.message);let i=r.parsed,o=i.action;if(!p(o))return null;let s=await J(e,{requireSession:!1,command:`find`});if(!s.ok)return s.response;let c=await Q(async()=>{let n=await s.runtime.selectors.find({session:e.sessionName,requestId:t.meta?.requestId,locator:i.locator,query:i.query,action:o,timeoutMs:i.timeoutMs});R(e.sessionStore,e.sessionName,t,N(n,o));let r=P(n),a=typeof r.ref==`string`?[r.ref]:Array.isArray(r.matches)?r.matches.map(e=>e.ref).filter(e=>typeof e==`string`):[];if(a.length>0){let t=e.sessionStore.get(e.sessionName);if(t&&(ae(t,a),e.sessionStore.set(e.sessionName,t),t.snapshotGeneration!==void 0))return{...r,refsGeneration:t.snapshotGeneration}}return r});return k({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=m(t.positionals?.[0]);if(!n.ok)return a(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 o=t.internal?.replayTargetGuard,s=await J(e,{requireSession:!0,command:`get`});if(!s.ok)return s.response;let c=s.runtime,l=i.target.kind===`ref`?se({session:e.sessionStore.get(e.sessionName),ref:i.target.ref,mintedGeneration:i.refGeneration}):void 0,u=await Q(async()=>{let n=await c.selectors.get({session:e.sessionName,requestId:t.meta?.requestId,property:r,target:i.target,expectedResolvedTarget:o});R(e.sessionStore,e.sessionName,t,F(n,r),{node:n.node,preActionNodes:n.preActionNodes});let a=I(n);return l?{...a,warning:l}:a});return k({response:u,consumedTree:X(e),captureProof:e.captureProof})}async function Ue(e){let{req:t}=e;if(t.command!==`is`)return null;let n=h(t.positionals??[]);if(!n.ok)return a(n.code,n.message,n.hint?{hint:n.hint}:void 0);let{predicate:r,selectorExpression:i,expectedText:o}=n;if(r===`absent`){let e=de({depth:t.flags?.snapshotDepth,scope:t.flags?.snapshotScope});if(e){let t=he(e);return a(t.code,t.message,t.details)}}let s=t.internal?.replayTargetGuard,c=await J(e,{requireSession:!0,command:`is`});if(!c.ok)return c.response;let l=await Q(async()=>{let n=await c.runtime.selectors.is({session:e.sessionName,requestId:t.meta?.requestId,predicate:r,selector:i,expectedText:o,expectedResolvedTarget:s}),a=Z(n),l=L(n);return R(e.sessionStore,e.sessionName,t,l,a),ye(l)});return k({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=g(e.positionals?.slice(1)??[]);return n.ok?{ok:!0,target:{kind:`selector`,selector:`selector`in n?n.selector:``}}:{ok:!1,response:a(n.code,n.message)}}async function Q(e){try{return{ok:!0,data:await e()}}catch(e){let t=i(e);return a(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?a(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,M as t,N as n,O as r,d as i,m as a,o,v as s,x as c}from"./sdk-contracts.js";import{S as l,f as u}from"./sdk-device.js";import{Lt as d,Mn as f,Pn as p,dr as m,fr as h,ur as g}from"./sdk-batch.js";import{s as ee}from"./session-store.js";import{D as te,H as ne,L as _,R as v,V as y,f as re,i as b,m as ie,n as ae,o as oe,p as x,r as se,s as ce,w as le}from"./session-snapshot.js";import{d as ue}from"./parameterized-recorded-fill.js";import{_ as de,l as fe,r as pe,s as me,v as he}from"./overlay.js";import{r as ge}from"./diagnostics.js";import"./diagnostics2.js";import{i as _e}from"./rect-center.js";import{a as S}from"./android-system-chrome.js";import{r as C}from"./request-cancel.js";import"./request.js";import{i as w}from"./request-runtime-binding.js";import{n as T}from"./dispatch-resolve.js";import{s as E}from"./quality-warnings.js";import{t as D}from"./backend-snapshot-options.js";import{i as O,n as k,t as A}from"./capture-disclosure.js";import{t as j}from"./snapshot-runtime-binding.js";function M(t){let n=e(t);return n?{ok:!0,ref:n.base,generation:n.generation}:{ok:!1,response:o(`INVALID_ARGS`,`Invalid ref "${t}" — malformed generation suffix.`,{hint:a})}}function N(e,t){if(t===`exists`)return{found:!0};if(t===`wait`)return{found:!0,waitedMs:e.waitedMs};if(t===`list`)return{action:`list`,matches:Array.isArray(e.matches)?e.matches.length:0};let n=typeof e.ref==`string`?e.ref:void 0;return t===`get_attrs`?{ref:n,action:`get attrs`}:{ref:n,action:`get text`,text:typeof e.text==`string`?e.text:``}}function P(e){return e.kind===`found`?{found:!0,...typeof e.waitedMs==`number`?{waitedMs:e.waitedMs}:{}}:e.kind===`list`?{matches:e.matches.map(e=>({ref:e.ref,node:S(e.node)}))}:{ref:e.ref,...e.kind===`text`?{text:e.text}:{},node:S(e.node)}}function F(e,t){let n=Array.isArray(e.selectorChain)?e.selectorChain:void 0,r=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:S(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){let o=e.get(t);if(!o)return;let s=ue(o)&&i?le(i,{mode:a}):void 0;e.recordAction(o,{command:n.command,positionals:n.positionals??[],flags:n.flags??{},result:r,interactiveObservation:ee(n),...s?{targetEvidence:s,targetEvidenceMode:a??`action`}:{}})}function 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:d({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:o(`INVALID_ARGS`,`${e} @ref does not support ${n.join(`, `)}.`)}async function H(e,n){if(e.device.platform!==`android`||!e.appBundleId||e.lease?.leaseProvider||w(e.device))return null;if(!n)throw new t(`INTERNAL_ERROR`,`Android observation was not supplied by root runtime composition`);let r=await n.readAppState(e.device),i=r.package?.trim();if(!i||i===e.appBundleId)return null;let a=await n.isPermissionPackage(i);return!Ee(i)&&!a?null:{expectedPackage:e.appBundleId,foregroundPackage:i,activity:r.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=de(n),l=e.readTextAtPoint;if(!l)return c;let d=_e(n.rect);if(!d||u(t)&&c&&!he(n.type??``))return c;let f=s(r,i,a),p=await l({point:d,options:{appBundleId:i,surface:o},execution:ie(f)});return p.status===`read`?p.text:(ge({level:`warn`,phase:`interaction_read_fallback`,data:{reason:Oe(p.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{session:t,sessionStore:n,sessionName:r}=e,i=0,a,o,s=t=>(e.consumedSnapshot&&(e.consumedSnapshot.state=t.snapshot),t);return{capture:async c=>{let l=Date.now(),u=Ie(c,e.req.flags?.out),d=Me({timestamp:l,lastSnapshotAt:i,lastSnapshotResult:a,lastSnapshotCacheKey:o,session:t,request:c,cacheKey:u});if(d)return s(d);let f=Ne({session:t,timestamp:l,request:c});if(f)return i=f.createdAt,a={snapshot:f},o=u,s(a);let p=await ke({params:e,request:c});c.signal?.throwIfAborted();let m={snapshot:p};return Re({session:t,sessionStore:n,sessionName:r,snapshot:p}),i=l,a=m,o=u,s(m)}}}async function ke(e){let{params:t,request:n}=e,r=await W(t,n,n.snapshotScope);return n.recovery?.legacyIosSparse&&fe(r)?c(r,await Ae({runtimeParams:t,request:n,policy:n.recovery.legacyIosSparse})):n.recovery?.sparseVerdictQueryScope?.shouldScope&&E(r.snapshotQuality)?c(r,await je({runtimeParams:t,request:n,policy:n.recovery.sparseVerdictQueryScope,snapshot:r})):r}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={...t.flags,snapshotInteractiveOnly:r},a=e.capture,o=await ce({device:e.device,session:e.session,flags:i,outPath:t.outPath??e.req.flags?.out,logPath:e.logPath??``,snapshotScope:n,includeRects:t.includeRects,signal:t.signal,captureData:async()=>await a(x({flags:i,logPath:e.logPath??``,meta:e.req.meta,session:e.session,snapshotScope:n,includeRects:t.includeRects,signal:t.signal}))});return A(e.captureProof,o.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)&&!v(a)&&!G(a,o))return r}function Ne(e){let{session:t,timestamp:n,request:r}=e,i=t?.snapshot;if(!(!i||y(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||v(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&&te(e)}function K(e){return s(r(Le(e)))}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{session:t,sessionStore:n,sessionName:r,snapshot:i}=e;!t||E(i.snapshotQuality)||(b(t,i),n.set(r,t))}function q(e){return re({backend:Be(e),...O(`selector commands`,{plural:!0}),sessions:oe({sessionName:e.sessionName,getSession:()=>e.session,recordOptions:{includeSnapshot:!0},setRecord:t=>{!e.session||!t.snapshot||(b(e.session,t.snapshot),e.sessionStore.set(e.sessionName,e.session))}}),signal:e.signal??C(e.req.meta?.requestId)})}async function ze(e,t){e.consumedSnapshot??={},e.captureProof??={};let n=e.sessionStore.get(e.sessionName);return!n&&t?{ok:!1,response:i()}:{ok:!0,session:n,device:n?.device??await T(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,runtime:q({...e,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)=>_(i??``,e,t,n)),c=e.bound?.readText,u=e.bound?.findText,d=x({flags:t.flags,logPath:i??``,meta:t.meta,session:n,snapshotScope:void 0}).execution,f=e.bound,p=f===void 0?void 0:U({device:r,session:n,sessionStore:o,sessionName:a,req:t,consumedSnapshot:e.consumedSnapshot,captureProof:e.captureProof,logPath:i,capture:f.capture});return{platform:l(r),captureSnapshot:p&&(async(e,n)=>{let i={...t.flags,...D(n)},a=n?.includeRects===!0,o=n?.scope??t.flags?.snapshotScope,s=t.command===`wait`||t.command===`find`||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})}),...u?{findText:async(e,t)=>{let{found:r}=await u({text:t,options:{appBundleId:n?.appBundleId,surface:n?.surface},execution:d,...e.signal?{signal:e.signal}:{}});return n&&ne(n),{found:r}}}:{}}}function Ve(e){if(e.command!==`is`)return!1;let t=h(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=f(n,t.flags);if(!r.ok)return o(r.code,r.message);let i=r.parsed,a=i.action;if(!p(a))return null;let s=await J(e,{requireSession:!1,command:`find`});if(!s.ok)return s.response;let c=await Q(async()=>{let n=await s.runtime.selectors.find({session:e.sessionName,requestId:t.meta?.requestId,locator:i.locator,query:i.query,action:a,timeoutMs:i.timeoutMs});R(e.sessionStore,e.sessionName,t,N(n,a));let r=P(n),o=typeof r.ref==`string`?[r.ref]:Array.isArray(r.matches)?r.matches.map(e=>e.ref).filter(e=>typeof e==`string`):[];if(o.length>0){let t=e.sessionStore.get(e.sessionName);if(t&&(ae(t,o),e.sessionStore.set(e.sessionName,t),t.snapshotGeneration!==void 0))return{...r,refsGeneration:t.snapshotGeneration}}return r});return k({response:c,consumedTree:X(e),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=m(t.positionals?.[0]);if(!n.ok)return o(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,s=await J(e,{requireSession:!0,command:`get`});if(!s.ok)return s.response;let c=s.runtime,l=i.target.kind===`ref`?se({session:e.sessionStore.get(e.sessionName),ref:i.target.ref,mintedGeneration:i.refGeneration}):void 0,u=await Q(async()=>{let n=await c.selectors.get({session:e.sessionName,requestId:t.meta?.requestId,property:r,target:i.target,expectedResolvedTarget:a});R(e.sessionStore,e.sessionName,t,F(n,r),{node:n.node,preActionNodes:n.preActionNodes});let o=I(n);return l?{...o,warning:l}:o});return k({response:u,consumedTree:X(e),captureProof:e.captureProof})}async function Ue(e){let{req:t}=e;if(t.command!==`is`)return null;let n=h(t.positionals??[]);if(!n.ok)return o(n.code,n.message,n.hint?{hint:n.hint}:void 0);let{predicate:r,selectorExpression:i,expectedText:a}=n;if(r===`absent`){let e=me({depth:t.flags?.snapshotDepth,scope:t.flags?.snapshotScope});if(e){let t=pe(e);return o(t.code,t.message,t.details)}}let s=t.internal?.replayTargetGuard,c=await J(e,{requireSession:!0,command:`is`});if(!c.ok)return c.response;let l=await Q(async()=>{let n=await c.runtime.selectors.is({session:e.sessionName,requestId:t.meta?.requestId,predicate:r,selector:i,expectedText:a,expectedResolvedTarget:s}),o=Z(n),l=L(n);return R(e.sessionStore,e.sessionName,t,l,o),ye(l)});return k({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=g(e.positionals?.slice(1)??[]);return n.ok?{ok:!0,target:{kind:`selector`,selector:`selector`in n?n.selector:``}}:{ok:!1,response:o(n.code,n.message)}}async function Q(e){try{return{ok:!0,data:await e()}}catch(e){let t=n(e);return o(t.code,t.message,t.details)}}async function $(e,t,n){if(t.ok)return t;let r=e.sessionStore.get(e.sessionName);if(!r)return t;let i;try{if(!e.androidObservation)return t;i=await H(r,e.androidObservation)}catch{return t}return i?o(t.error.code,`${n} failed because ${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,4 +1,4 @@
1
- import{O as e,l as t}from"./sdk-contracts.js";import{_ as n}from"./sdk-batch.js";import{i as r}from"./catalog.js";import{a as i}from"./version.js";import{a,i as ee,r as o,t as te}from"./command-tools.js";import{i as s,r as c,t as l}from"./cli-help.js";const u=`agent-device drives iOS, Android, tvOS, Android TV, macOS, Linux, and web apps. Tools mirror CLI commands of the same name; CLI flags are camelCase properties (--settle -> settle: true).
1
+ import{M as e,l as t}from"./sdk-contracts.js";import{_ as n}from"./sdk-batch.js";import{i as r}from"./catalog.js";import{a as i}from"./version.js";import{a,i as ee,r as o,t as te}from"./command-tools.js";import{i as s,r as c,t as l}from"./cli-help.js";const u=`agent-device drives iOS, Android, tvOS, Android TV, macOS, Linux, and web apps. Tools mirror CLI commands of the same name; CLI flags are camelCase properties (--settle -> settle: true).
2
2
 
3
3
  Start: known app -> call open {app, foreground: true} at once; do not probe with devices, apps, appstate, snapshot, or screenshot first. open returns the initial interactive snapshot with @refs. Unknown app id: devices, then apps, then open the discovered id; never invent ids. Existing session: continue from its state, do not reopen.
4
4
 
@@ -1 +1 @@
1
- import{O as e}from"./sdk-contracts.js";import{a as t}from"./request-cancellation.js";import{c as n,r,t as i}from"./device-session.js";import{assertLimrunUploadedAppAccess as a,resolveInstalledAppIdForAsset as o,resolveLimrunAppAsset as s}from"./app-catalog.js";async function c(e,t,n){let r=n?.initialApp,i=typeof r==`string`?r.trim():``;if(i)return a(n?.publicNetworkOnly),await s(e,t,i,n?.signal)}async function l(t,n){let r=await i(t).listApps(`user-installed`),a=o(n.name,r);if(a)return a;throw new e(`COMMAND_FAILED`,`Limrun installed ${n.name}, but its application identifier could not be resolved unambiguously.`,{asset:n.name,installedApps:r.map(e=>e.id)})}async function u(n){let i=await n.limrun.iosInstances.create({wait:!0,metadata:n.metadata,spec:{...n.region?{region:n.region}:{},...n.app?{initialAssets:[{kind:`App`,source:`AssetID`,assetId:n.app.id,launchMode:`RelaunchIfRunning`}]}:{}}});try{if(!i.status.apiUrl)throw new e(`COMMAND_FAILED`,`Limrun iOS instance did not expose apiUrl`);return await r({lease:n.lease,instanceId:i.metadata.id,device:t(`ios`,n.lease,i.metadata.id),apiUrl:i.status.apiUrl,token:i.status.token},n.dependencies)}catch(e){throw await n.limrun.iosInstances.delete(i.metadata.id).catch(()=>{}),e}}async function d(r){let i=await r.limrun.androidInstances.create({wait:!0,metadata:r.metadata,spec:{...r.region?{region:r.region}:{},...r.app?{initialAssets:[{kind:`App`,source:`AssetIDs`,assetIds:[r.app.id]}]}:{}}});try{if(!i.status.apiUrl||!i.status.adbWebSocketUrl)throw new e(`COMMAND_FAILED`,`Limrun Android instance did not expose API and ADB websocket endpoints`);return await n({lease:r.lease,instanceId:i.metadata.id,device:t(`android`,r.lease,i.metadata.id),apiUrl:i.status.apiUrl,token:i.status.token,adbUrl:i.status.adbWebSocketUrl},r.dependencies)}catch(e){throw await r.limrun.androidInstances.delete(i.metadata.id).catch(()=>{}),e}}export{d as allocateLimrunAndroidSession,u as allocateLimrunIosSession,l as resolvePreinstalledAppId,c as resolveRequestedLimrunAppAsset};
1
+ import{M as e}from"./sdk-contracts.js";import{a as t}from"./request-cancellation.js";import{c as n,r,t as i}from"./device-session.js";import{assertLimrunUploadedAppAccess as a,resolveInstalledAppIdForAsset as o,resolveLimrunAppAsset as s}from"./app-catalog.js";async function c(e,t,n){let r=n?.initialApp,i=typeof r==`string`?r.trim():``;if(i)return a(n?.publicNetworkOnly),await s(e,t,i,n?.signal)}async function l(t,n){let r=await i(t).listApps(`user-installed`),a=o(n.name,r);if(a)return a;throw new e(`COMMAND_FAILED`,`Limrun installed ${n.name}, but its application identifier could not be resolved unambiguously.`,{asset:n.name,installedApps:r.map(e=>e.id)})}async function u(n){let i=await n.limrun.iosInstances.create({wait:!0,metadata:n.metadata,spec:{...n.region?{region:n.region}:{},...n.app?{initialAssets:[{kind:`App`,source:`AssetID`,assetId:n.app.id,launchMode:`RelaunchIfRunning`}]}:{}}});try{if(!i.status.apiUrl)throw new e(`COMMAND_FAILED`,`Limrun iOS instance did not expose apiUrl`);return await r({lease:n.lease,instanceId:i.metadata.id,device:t(`ios`,n.lease,i.metadata.id),apiUrl:i.status.apiUrl,token:i.status.token},n.dependencies)}catch(e){throw await n.limrun.iosInstances.delete(i.metadata.id).catch(()=>{}),e}}async function d(r){let i=await r.limrun.androidInstances.create({wait:!0,metadata:r.metadata,spec:{...r.region?{region:r.region}:{},...r.app?{initialAssets:[{kind:`App`,source:`AssetIDs`,assetIds:[r.app.id]}]}:{}}});try{if(!i.status.apiUrl||!i.status.adbWebSocketUrl)throw new e(`COMMAND_FAILED`,`Limrun Android instance did not expose API and ADB websocket endpoints`);return await n({lease:r.lease,instanceId:i.metadata.id,device:t(`android`,r.lease,i.metadata.id),apiUrl:i.status.apiUrl,token:i.status.token,adbUrl:i.status.adbWebSocketUrl},r.dependencies)}catch(e){throw await r.limrun.androidInstances.delete(i.metadata.id).catch(()=>{}),e}}export{d as allocateLimrunAndroidSession,u as allocateLimrunIosSession,l as resolvePreinstalledAppId,c as resolveRequestedLimrunAppAsset};
@@ -1 +1 @@
1
- import{O as e,o as t}from"./sdk-contracts.js";import{b as n,d as r,g as i,r as a,y as o}from"./sdk-device.js";import"./session-store.js";import{s}from"./device-shell.js";import{t as c}from"./device-isolation.js";import l from"node:path";import u from"node:fs";import d from"node:crypto";function f(e){return`${e.device.platform} device "${e.device.name.trim()}" (${e.device.id})`}function p(e,t,n={}){return e.session.screenRecording?g(e.address,t):v(e,t,n)}function m(e,n,r={}){return t(`DEVICE_IN_USE`,`Device is already in use by session "${e.address}".`,{session:e.address,deviceId:n.id,deviceName:n.name,...r.waitedMs===void 0?{}:{waitedMs:r.waitedMs},hint:p(e,`device-in-use`,r)})}function h(e,n,r={}){return t(`DEVICE_IN_USE`,`Device is already in use by workspace session "${e.address}".`,{reason:`WORKSPACE_SESSION_SCOPE_CONFLICT`,session:e.address,deviceId:n.id,deviceName:n.name,...r.waitedMs===void 0?{}:{waitedMs:r.waitedMs},hint:_(e.address,r)})}function g(e,t){let n=s(e),r=`agent-device close --session ${n}`;return`Recording session "${e}" owns this device. Run ${`agent-device record stop --session ${n}`}; if the session still appears in agent-device session list, run ${r}. ${t===`selector-conflict`?`To keep using this device, rerun the command with --session ${n} and remove conflicting device selectors.`:`To keep using this device, reuse --session ${n} for commands that should attach to the recording session.`} Run agent-device session list to inspect active sessions.`}function _(e,t){let n=s(e);return`${y(t)}Session "${e}" belongs to another workspace. Run agent-device close --session ${n} to release this device from that workspace, agent-device devices to choose another device. ${b(t)}Run agent-device session list to inspect active sessions.`}function v(e,t,n){let r=e.address,i=s(r),a=`agent-device close --session ${i}`;return t===`selector-conflict`?`Run agent-device session list to inspect active sessions. To reuse this device, rerun the command with --session ${i} and remove conflicting device selectors. To switch devices, first run ${a}, then open the desired device with a different --session name.`+x(e,n):`${y(n)}Run agent-device session list to inspect active sessions. To reuse this device, rerun the command with --session ${i}. To open a new session on this device, first run ${a}. `+`${b(n)}`.trimEnd()}function y(e){return e.waitedMs===void 0?``:`Waited ${Math.round(e.waitedMs)}ms for this device and it stayed busy. `}function b(e){return e.offersDeviceWait&&e.waitedMs===void 0?`To wait for the device to free up, run the same open with --wait <ms>. `:``}function x(e,t){return t.offersPlatformSession===!0&&e.session.sessionScope?.kind===`cwd`?` Or name the other platform with --platform to open its own session for this workspace.`:``}function S(t,n){let{address:r,session:i}=t,a=C(i,n);if(a.length!==0)throw new e(`INVALID_ARGS`,`Session "${r}" is already bound to ${f(i)}, but this request selected ${a.map(w).join(`, `)}.`,{session:r,conflicts:a.map(w),hint:p(t,`selector-conflict`,{offersPlatformSession:a.some(e=>e.key===`platform`)})})}function C(e,t){if(!t)return[];let n=[],a=e.device,s=t.platform;if(s&&!o(a,s)&&n.push({key:`platform`,value:t.platform}),t.target&&t.target!==(a.target??`mobile`)&&n.push({key:`target`,value:t.target}),t.udid&&(!r(a)||t.udid!==a.id)&&n.push({key:`udid`,value:t.udid}),t.serial&&(!i(a.platform)||t.serial!==a.id)&&n.push({key:`serial`,value:t.serial}),t.device&&t.device.trim().toLowerCase()!==a.name.trim().toLowerCase()&&n.push({key:`device`,value:t.device}),t.iosSimulatorDeviceSet){let e=t.iosSimulatorDeviceSet.trim(),i=a.simulatorSetPath?.trim();(!r(a)||a.kind!==`simulator`||e!==i)&&n.push({key:`iosSimulatorDeviceSet`,value:t.iosSimulatorDeviceSet})}if(t.androidDeviceAllowlist){let e=c(t.androidDeviceAllowlist);(a.platform!==`android`||!e.has(a.id))&&n.push({key:`androidDeviceAllowlist`,value:t.androidDeviceAllowlist})}return n}function w(e){return`${T(e.key)}=${e.value}`}function T(e){switch(e){case`iosSimulatorDeviceSet`:return`--ios-simulator-device-set`;case`androidDeviceAllowlist`:return`--android-device-allowlist`;default:return`--${e}`}}const E=`default`,D=new Set(a);function O(e,t,n={}){let r=e.session||E;if(P(e))return r;let i=j(e);return i.kind===`cwd`?I(e,t,i.id,n):r}function k(e){return e.session||E}function A(e){let t=j(e);return t.kind===`cwd`?t:void 0}function j(t){if(t.meta?.sessionIsolation===`tenant`||t.flags?.sessionIsolation===`tenant`){let n=t.meta?.tenantId;if(!n)throw new e(`INTERNAL_ERROR`,`Tenant-scoped request reached session routing without an admitted tenant id`);return{kind:`tenant`,id:n}}if(P(t)||(t.session||E)!==E)return{kind:`named-local`};let n=J(t.meta?.cwd);return n?{kind:`cwd`,id:q(n)}:{kind:`global-default`}}function M(e,t){let n=e.sessionScope;return n?t.kind===`tenant`?n.kind===`tenant`&&n.id===t.id:n.kind===`tenant`?!1:t.kind!==`cwd`||n.kind===`named-local`||n.kind===`cwd`&&n.id===t.id:!1}function N(e,t){let n=A(e);return!n||t.sessionScope?.kind!==`cwd`?!1:t.sessionScope.id!==n.id}function P(e){if(e.meta?.sessionExplicit===!0)return!0;let t=e.flags?.session;return typeof t==`string`&&t.trim().length>0}function F(e,t){return`cwd:${e}:${t}`}function I(e,t,n,r){let i=H(t,n),a=U(e);return a?L(e,t,n,a,i,r):V(n,i,r)}function L(e,t,n,r,i,a){let o=F(n,r);if(t.get(o))return o;let s=B(e.flags,r),c=i.map(e=>({ref:e,conflicts:C(e.session,s)})),l=c.filter(e=>e.conflicts.length===0),[u]=l;return u&&l.length===1?u.ref.address:l.length>1?(G(a,l.map(e=>e.ref)),o):R(c)?.address??o}function R(e){return e.find(e=>!z(e.conflicts))?.ref}function z(e){return e.some(e=>e.key===`platform`)}function B(e,t){return{...e,platform:t}}function V(e,t,n){let[r]=t;return r&&t.length===1?r.address:(G(n,t),F(e,E))}function H(e,t){let n=new Set,r=[];for(let i of e.listRefs()){let e=i.session.sessionScope;e?.kind===`cwd`&&e.id===t&&(n.has(i.session)||(n.add(i.session),r.push(i)))}return r}function U(e){return W(e.flags?.platform)??W(e.meta?.lockPlatform)}function W(e){if(typeof e!=`string`)return;let t=e.trim().toLowerCase();return D.has(t)?t:void 0}function G(e,t){if(t.length>1&&e.attachesToSession===!0)throw K(t)}function K(t){let r=t.map(e=>e.address),i=t.map(e=>n(e.session.device)),a=i.map(e=>`--platform ${e}`).join(` or `);return new e(`AMBIGUOUS_MATCH`,`This workspace has ${t.length} implicit sessions (${r.join(`, `)}); select one explicitly.`,{sessions:r,platforms:i,hint:`Run agent-device session list to inspect them. Add ${a} to run in that platform's session, or pass --session <address> copied from that list.`})}function q(e){return d.createHash(`sha256`).update(e).digest(`hex`).slice(0,16)}function J(e){if(!e||e.trim().length===0)return;let t=Y(e);return X(t)??t}function Y(e){let t=l.resolve(e);try{return u.realpathSync.native(t)}catch{return t}}function X(e){let t=e;for(;;){if(u.existsSync(l.join(t,`.git`)))return t;let e=l.dirname(t);if(e===t)return;t=e}}export{j as a,w as c,h as d,p as f,k as i,C as l,N as n,M as o,f as p,O as r,S as s,P as t,m as u};
1
+ import{M as e,o as t}from"./sdk-contracts.js";import{S as n,_ as r,b as i,f as a,r as o}from"./sdk-device.js";import"./session-store.js";import{s}from"./device-shell.js";import{t as c}from"./device-isolation.js";import l from"node:path";import u from"node:fs";import d from"node:crypto";function f(e){return`${e.device.platform} device "${e.device.name.trim()}" (${e.device.id})`}function p(e,t,n={}){return e.session.screenRecording?g(e.address,t):v(e,t,n)}function m(e,n,r={}){return t(`DEVICE_IN_USE`,`Device is already in use by session "${e.address}".`,{session:e.address,deviceId:n.id,deviceName:n.name,...r.waitedMs===void 0?{}:{waitedMs:r.waitedMs},hint:p(e,`device-in-use`,r)})}function h(e,n,r={}){return t(`DEVICE_IN_USE`,`Device is already in use by workspace session "${e.address}".`,{reason:`WORKSPACE_SESSION_SCOPE_CONFLICT`,session:e.address,deviceId:n.id,deviceName:n.name,...r.waitedMs===void 0?{}:{waitedMs:r.waitedMs},hint:_(e.address,r)})}function g(e,t){let n=s(e),r=`agent-device close --session ${n}`;return`Recording session "${e}" owns this device. Run ${`agent-device record stop --session ${n}`}; if the session still appears in agent-device session list, run ${r}. ${t===`selector-conflict`?`To keep using this device, rerun the command with --session ${n} and remove conflicting device selectors.`:`To keep using this device, reuse --session ${n} for commands that should attach to the recording session.`} Run agent-device session list to inspect active sessions.`}function _(e,t){let n=s(e);return`${y(t)}Session "${e}" belongs to another workspace. Run agent-device close --session ${n} to release this device from that workspace, agent-device devices to choose another device. ${b(t)}Run agent-device session list to inspect active sessions.`}function v(e,t,n){let r=e.address,i=s(r),a=`agent-device close --session ${i}`;return t===`selector-conflict`?`Run agent-device session list to inspect active sessions. To reuse this device, rerun the command with --session ${i} and remove conflicting device selectors. To switch devices, first run ${a}, then open the desired device with a different --session name.`+x(e,n):`${y(n)}Run agent-device session list to inspect active sessions. To reuse this device, rerun the command with --session ${i}. To open a new session on this device, first run ${a}. `+`${b(n)}`.trimEnd()}function y(e){return e.waitedMs===void 0?``:`Waited ${Math.round(e.waitedMs)}ms for this device and it stayed busy. `}function b(e){return e.offersDeviceWait&&e.waitedMs===void 0?`To wait for the device to free up, run the same open with --wait <ms>. `:``}function x(e,t){return t.offersPlatformSession===!0&&e.session.sessionScope?.kind===`cwd`?` Or name the other platform with --platform to open its own session for this workspace.`:``}function S(t,n){let{address:r,session:i}=t,a=C(i,n);if(a.length!==0)throw new e(`INVALID_ARGS`,`Session "${r}" is already bound to ${f(i)}, but this request selected ${a.map(w).join(`, `)}.`,{session:r,conflicts:a.map(w),hint:p(t,`selector-conflict`,{offersPlatformSession:a.some(e=>e.key===`platform`)})})}function C(e,t){if(!t)return[];let n=[],o=e.device,s=t.platform;if(s&&!i(o,s)&&n.push({key:`platform`,value:t.platform}),t.target&&t.target!==(o.target??`mobile`)&&n.push({key:`target`,value:t.target}),t.udid&&(!a(o)||t.udid!==o.id)&&n.push({key:`udid`,value:t.udid}),t.serial&&(!r(o.platform)||t.serial!==o.id)&&n.push({key:`serial`,value:t.serial}),t.device&&t.device.trim().toLowerCase()!==o.name.trim().toLowerCase()&&n.push({key:`device`,value:t.device}),t.iosSimulatorDeviceSet){let e=t.iosSimulatorDeviceSet.trim(),r=o.simulatorSetPath?.trim();(!a(o)||o.kind!==`simulator`||e!==r)&&n.push({key:`iosSimulatorDeviceSet`,value:t.iosSimulatorDeviceSet})}if(t.androidDeviceAllowlist){let e=c(t.androidDeviceAllowlist);(o.platform!==`android`||!e.has(o.id))&&n.push({key:`androidDeviceAllowlist`,value:t.androidDeviceAllowlist})}return n}function w(e){return`${T(e.key)}=${e.value}`}function T(e){switch(e){case`iosSimulatorDeviceSet`:return`--ios-simulator-device-set`;case`androidDeviceAllowlist`:return`--android-device-allowlist`;default:return`--${e}`}}const E=`default`,D=new Set(o);function O(e,t,n={}){let r=e.session||E;if(P(e))return r;let i=j(e);return i.kind===`cwd`?I(e,t,i.id,n):r}function k(e){return e.session||E}function A(e){let t=j(e);return t.kind===`cwd`?t:void 0}function j(t){if(t.meta?.sessionIsolation===`tenant`||t.flags?.sessionIsolation===`tenant`){let n=t.meta?.tenantId;if(!n)throw new e(`INTERNAL_ERROR`,`Tenant-scoped request reached session routing without an admitted tenant id`);return{kind:`tenant`,id:n}}if(P(t)||(t.session||E)!==E)return{kind:`named-local`};let n=J(t.meta?.cwd);return n?{kind:`cwd`,id:q(n)}:{kind:`global-default`}}function M(e,t){let n=e.sessionScope;return n?t.kind===`tenant`?n.kind===`tenant`&&n.id===t.id:n.kind===`tenant`?!1:t.kind!==`cwd`||n.kind===`named-local`||n.kind===`cwd`&&n.id===t.id:!1}function N(e,t){let n=A(e);return!n||t.sessionScope?.kind!==`cwd`?!1:t.sessionScope.id!==n.id}function P(e){if(e.meta?.sessionExplicit===!0)return!0;let t=e.flags?.session;return typeof t==`string`&&t.trim().length>0}function F(e,t){return`cwd:${e}:${t}`}function I(e,t,n,r){let i=H(t,n),a=U(e);return a?L(e,t,n,a,i,r):V(n,i,r)}function L(e,t,n,r,i,a){let o=F(n,r);if(t.get(o))return o;let s=B(e.flags,r),c=i.map(e=>({ref:e,conflicts:C(e.session,s)})),l=c.filter(e=>e.conflicts.length===0),[u]=l;return u&&l.length===1?u.ref.address:l.length>1?(G(a,l.map(e=>e.ref)),o):R(c)?.address??o}function R(e){return e.find(e=>!z(e.conflicts))?.ref}function z(e){return e.some(e=>e.key===`platform`)}function B(e,t){return{...e,platform:t}}function V(e,t,n){let[r]=t;return r&&t.length===1?r.address:(G(n,t),F(e,E))}function H(e,t){let n=new Set,r=[];for(let i of e.listRefs()){let e=i.session.sessionScope;e?.kind===`cwd`&&e.id===t&&(n.has(i.session)||(n.add(i.session),r.push(i)))}return r}function U(e){return W(e.flags?.platform)??W(e.meta?.lockPlatform)}function W(e){if(typeof e!=`string`)return;let t=e.trim().toLowerCase();return D.has(t)?t:void 0}function G(e,t){if(t.length>1&&e.attachesToSession===!0)throw K(t)}function K(t){let r=t.map(e=>e.address),i=t.map(e=>n(e.session.device)),a=i.map(e=>`--platform ${e}`).join(` or `);return new e(`AMBIGUOUS_MATCH`,`This workspace has ${t.length} implicit sessions (${r.join(`, `)}); select one explicitly.`,{sessions:r,platforms:i,hint:`Run agent-device session list to inspect them. Add ${a} to run in that platform's session, or pass --session <address> copied from that list.`})}function q(e){return d.createHash(`sha256`).update(e).digest(`hex`).slice(0,16)}function J(e){if(!e||e.trim().length===0)return;let t=Y(e);return X(t)??t}function Y(e){let t=l.resolve(e);try{return u.realpathSync.native(t)}catch{return t}}function X(e){let t=e;for(;;){if(u.existsSync(l.join(t,`.git`)))return t;let e=l.dirname(t);if(e===t)return;t=e}}export{j as a,w as c,h as d,p as f,k as i,C as l,N as n,M as o,f as p,O as r,S as s,P as t,m as u};
@@ -1 +1 @@
1
- import{O as e}from"./sdk-contracts.js";import{v as t}from"./session-snapshot.js";function n(e,n){return n.available?void 0:t(e,n)}function r(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime facts inspection is unavailable.`)}const i=new WeakMap;let a;(class e{static{a=(t,n)=>{let r=new e;return i.set(r,{device:Object.freeze({...t}),plan:n}),Object.freeze(r),r}}#e;constructor(){this.#e=void 0}get admitted(){return this.#e,!0}});function o(t){let n=i.get(t);if(n===void 0)throw new e(`COMMAND_FAILED`,`Runtime plan admission is not one minted by admitRuntimePlan; refusing to bind.`);return n}async function s(e){let t=await r(e.inspectFacts)(e.device);for(let n of e.plan.use.required){let e=t.operations[n];if(!e.available)return{admitted:!1,operation:n,fact:e}}return a(e.device,e.plan)}function c(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime binding is unavailable.`)}export{o as a,n as i,c as n,r,s as t};
1
+ import{M as e}from"./sdk-contracts.js";import{v as t}from"./session-snapshot.js";function n(e,n){return n.available?void 0:t(e,n)}function r(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime facts inspection is unavailable.`)}const i=new WeakMap;let a;(class e{static{a=(t,n)=>{let r=new e;return i.set(r,{device:Object.freeze({...t}),plan:n}),Object.freeze(r),r}}#e;constructor(){this.#e=void 0}get admitted(){return this.#e,!0}});function o(t){let n=i.get(t);if(n===void 0)throw new e(`COMMAND_FAILED`,`Runtime plan admission is not one minted by admitRuntimePlan; refusing to bind.`);return n}async function s(e){let t=await r(e.inspectFacts)(e.device);for(let n of e.plan.use.required){let e=t.operations[n];if(!e.available)return{admitted:!1,operation:n,fact:e}}return a(e.device,e.plan)}function c(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime binding is unavailable.`)}export{o as a,n as i,c as n,r,s as t};
@@ -1 +1 @@
1
- import{C as e,O as t,_ as n,f as r,o 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{b as u,l as d,p as f}from"./sdk-device.js";import{Ar as p,Bt as ee,Kn as te,Tt as ne,Vn as re,Wt as ie,Yn as ae,Zn as oe,ct as se,dt as ce,ht as le,ir as ue,lt as de,nr as fe,qn as pe,ut as me,xt as he}from"./sdk-batch.js";import{F as ge,I as _e,L as ve,M as ye,T as be,a as xe,g as Se,j as Ce,o as we,t as Te,x as m}from"./runtime.js";import{r as h}from"./success-text.js";import{i as g}from"./click-button.js";import{a as Ee,r as _}from"./diagnostics.js";import{t as v}from"./timeouts.js";import"./diagnostics2.js";import"./retry.js";import{i as De}from"./rect-center.js";import{t as Oe}from"./snapshot-state.js";import{n as ke}from"./request-runtime-binding.js";import{i as Ae}from"./lease-context.js";import{s as je}from"./tree.js";import{t as Me}from"./interactor-types.js";import{randomInt as Ne}from"node:crypto";function y(e){return e.matchedRefs.length===0?{path:2,outcome:`unverifiable`,reason:`selector-miss`}:e.identitySetRefs.length===0?{path:3,outcome:`unverifiable`,reason:`identity-set-empty`}:e.identitySetRefs.length===1?e.identitySetRefs[0]===e.winnerRef?{path:4,outcome:`verified`}:{path:5,outcome:`unverifiable`,reason:`unique-but-wrong`}:e.siblingMatchRefs.length===1?e.siblingMatchRefs[0]===e.winnerRef?{path:6,outcome:`verified`}:{path:6,outcome:`unverifiable`,reason:`signal-isolated-wrong`}:e.regionMemberRefs!==void 0&&e.regionMemberRefs.length>0&&e.viewportCandidateRef!==void 0?e.viewportCandidateRef===e.winnerRef?{path:6,outcome:`verified`}:{path:6,outcome:`unverifiable`,reason:`signal-isolated-wrong`}:{path:6,outcome:`unverifiable`,reason:`no-signal-isolation`}}let b={resolve:async()=>{throw new t(`COMMAND_FAILED`,`Interactor resolution is not composed for this process.`,{reason:`interactor-resolution-missing`})}};function Pe(e){b=e}function Fe(){return b}var x=class e{#e;constructor(e){this.#e=e}get state(){return this.#e.state}get scope(){return this.#e.scope}get tree(){return this.#e.tree}get generation(){return this.#e.generation}static expire(t){return t.#e.state===`expired`?t:new e({...t.#e,state:`expired`})}};const Ie=new x({state:`active`,scope:`all`,tree:void 0,generation:void 0});function Le(e){return new x({state:`active`,...e})}function Re(e){return x.expire(e)}const S=new WeakMap,C=new WeakSet;function w(e){return e.refFrame??Ie}function T(e){return w(e).generation??e.snapshotGeneration}function ze(e){return w(e).tree}function Be(e){He(e),E(e),e.refFrame=Re(w(e)),e.snapshotScopeSource=void 0}function E(e){e.snapshot&&C.add(e.snapshot)}function Ve(e){return C.has(e)}function He(e){let t=D(e)+1;return S.set(e,t),t}function D(e){return S.get(e)??0}function Ue(e){O(e,`all`)}function We(e,t){O(e,t)}function O(e,t){e.refFrame=Le({scope:t,tree:e.snapshot,generation:e.snapshotGeneration})}function k(e){return w(e).state}function A(e){return w(e).scope}function Ge(e){let t=e.ref.startsWith(`@`)?e.ref.slice(1):e.ref;return{admission:Ke({session:e.session,refBody:t,mintedGeneration:e.mintedGeneration}),scope:A(e.session),currentGeneration:T(e.session)}}function Ke(e){let{session:t,refBody:n,mintedGeneration:r}=e;if(k(t)===`expired`)return{admitted:!1,reason:`ref_frame_expired`};if(r!==void 0&&r!==T(t))return{admitted:!1,reason:`ref_generation_mismatch`};let i=A(t);if(i!==`all`){if(r===void 0)return{admitted:!1,reason:`plain_ref_requires_complete_frame`};if(!i.has(n))return{admitted:!1,reason:`ref_not_issued`}}return{admitted:!0}}const qe=[250,400,600];function j(e){return e===`press`||e===`click`||e===`back`||e===`open`}function M(e){return e.map(e=>[e.depth??0,e.type??``,e.label??``,e.value??``,e.identifier??``,e.enabled===!1?`disabled`:`enabled`,e.hittable===!0?`hittable`:`not-hittable`].join(`|`))}function Je(e,t){return e<12?!1:t<=Math.floor(e*.2)}function Ye(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)?Xe(e.snapshot)?null:`sharp-drop`:t.routeComparable&&j(t.action)&&Ze(t.baselineSignatures,e.snapshot.nodes)?`stuck-route`:null}function Xe(e){return e.nodes.some(e=>e.hittable===!0||!!e.label?.trim()||!!e.value?.trim()||!!e.identifier?.trim())}function Ze(e,t){if(!e||e.length===0)return!1;let n=Math.max(e.length,t.length);if(n<12)return!1;let r=M(t),i=Math.min(e.length,r.length),a=0;for(let t=0;t<i;t+=1)e[t]===r[t]&&(a+=1);let o=Math.max(0,r.length-e.length),s=Math.max(0,e.length-r.length),c=Math.max(3,Math.floor(n*.15));return a>=Math.floor(n*.9)&&o<=c&&s<=c}async function Qe(e){let t=e.window.markedAt+e.retry.retryBudgetMs,n=await e.capture(),r=e.classify(n),i=0;for(let a of e.retry.delaysMs){if(!r)break;let o=t-Date.now();if(o<=0)break;await v(Math.min(a,o)),n=await e.capture(),i+=1,r=e.classify(n)}r||e.onTrustworthyCapture?.();let a=i>0||r?{action:e.window.action,retryCount:i,staleAfterRetries:!!r,reason:r??void 0}:void 0;return{...n,annotations:{...n.annotations,...s({freshness:a})}}}function $e(e,t,n=e.snapshot){if(e.device.platform!==`android`)return;let r=et(e,n),i=r?.comparisonSafe===!0;e.androidSnapshotFreshness={action:t,markedAt:Date.now(),baselineCount:(r??n)?.nodes.length??0,baselineSignatures:i?M(r?.nodes??[]):void 0,routeComparable:i}}function et(e,t){if(t?.comparisonSafe===!0)return t;let n=e.lastComparisonSafeSnapshot;return!n||n.comparisonSafe!==!0?t:Date.now()-n.createdAt<=5e3?n:t}function N(e){if(!e||e.device.platform!==`android`)return;let t=e.androidSnapshotFreshness;if(t){if(Date.now()-t.markedAt>2500){delete e.androidSnapshotFreshness;return}return t}}function P(e){!e||e.device.platform!==`android`||delete e.androidSnapshotFreshness}async function F(e,t){return Qe({capture:e.capture,classify:n=>Ye({snapshot:n.snapshot,rawNodeCount:n.annotations.analysis?.rawNodeCount},t,{interactiveOnly:e.interactiveOnly,mode:e.androidFreshnessMode}),window:t,retry:{retryBudgetMs:1500,delaysMs:qe},onTrustworthyCapture:()=>P(e.session)})}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 I(e,t,n,r,i,a){return{requestId:i??Ee().requestId,appBundleId:n,runnerLeaseContext:Ae({meta:a}),logPath:e,traceLogPath:r,...nt(t),screenshotCaptureBackend:t?.maestro?.screenshotCaptureBackend,...o(t),clickButton:g(t)}}function rt(e){return e?.interactionOutcome?.retryOnNoChange===!0}function it(e){let{session:t,command:n,positionals:r,flags:i,preSnapshot:a}=e;if(!rt(i)||!gt(t))return;let o=vt(n);if(!o||!Ct(r))return;let s=V(a?.nodes??[]);s.length!==0&&(t.pendingInteractionOutcome={action:n,command:o,positionals:r,flags:B(i),markedAt:Date.now(),attemptsRemaining:2,preSignature:s})}function at(e){let t=e?.pendingInteractionOutcome;if(!(!e||!t)){if(!gt(e)){L(e);return}if(Date.now()-t.markedAt>3e4){L(e);return}return t}}function L(e){e?.pendingInteractionOutcome&&(e.pendingInteractionOutcome=void 0)}async function R(e){let{pending:t,snapshot:n}=e,r=lt(t.preSignature,V(n.nodes));if(r!==`unchanged`||t.attemptsRemaining<=0)return{retried:!1,change:r};let i=e.retryTap,a=i?_t(t.positionals):void 0;if(!i||!a)return z(t,i?`unreadable-retry-point`:`device-runtime-unavailable`),{retried:!1,change:r};let o=Date.now();return--t.attemptsRemaining,await ot(i,e)?(_({level:`info`,phase:`interaction_no_change_retry`,data:{action:t.action,attemptsRemaining:t.attemptsRemaining,durationMs:Date.now()-o}}),{retried:!0,change:r}):(z(t,`retry-tap-unavailable`),{retried:!1,change:r})}async function ot(e,t){let{session:n,pending:r}=t,i=_t(r.positionals);if(!i)return!1;try{return await e({device:n.device,point:i,context:{...I(t.logPath,r.flags,n.appBundleId,n.trace?.outPath),surface:n.surface}})}catch{return!1}}function z(e,t){_({level:`info`,phase:`interaction_no_change_retry_skipped`,data:{action:e.action,attemptsRemaining:e.attemptsRemaining,reason:t}})}function st(e){_({level:e.attempts>0?`info`:`debug`,phase:`interaction_settled`,data:{action:e.pending.action,change:e.change,attempts:e.attempts,durationMs:Date.now()-e.startedAt}})}function ct(e){_({level:`warn`,phase:`interaction_settle_timeout`,data:{action:e.pending.action,attempts:e.attempts,durationMs:Date.now()-e.startedAt}})}function B(e){if(!e?.interactionOutcome&&!e?.postGestureStabilization)return e;let{interactionOutcome:t,postGestureStabilization:n,...r}=e;return r}function V(e){let t=new Map,n=[],r=ye(e);for(let i of e){let e=yt(i,t,r);e&&n.push(e)}return n}function H(e){return e?.comparisonKey??e?.snapshotQuality?.backend}function lt(e,t){return e.length===0||t.length===0?`ambiguous`:W(e,t)?`unchanged`:`changed`}function U(e,t){return Math.abs(e.x-t.x)<=1&&Math.abs(e.y-t.y)<=1&&Math.abs(e.width-t.width)<=1&&Math.abs(e.height-t.height)<=1}function W(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){let r=e[n],i=t[n];if(!r||!i||r.key!==i.key||!U(r,i))return!1}return!0}function ut(e,t){let n=dt(e),r=dt(t);if(n.size===0||r.size===0)return`ambiguous`;let i=0,a=!1;for(let[e,t]of n){let n=r.get(e);if(!n){a=!0;continue}if(i+=1,!U(t,n))return`changed`}if(i===0)return`ambiguous`;let o=r.size>i;return a&&o?`changed`:`unchanged`}function dt(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 ft(e,t){let n=e.filter(e=>e.discriminating),r=t.filter(e=>e.discriminating);if(n.length===0||n.length!==r.length)return!1;let i=new Map(r.map(e=>[e.key,e]));for(let e of n){let t=i.get(e.key);if(!t||!U(e,t))return!1}return!0}function pt(e,t){let n=new Map(t.filter(e=>e.discriminating).map(e=>[e.key,e])),r=0,i=0,a=0;for(let t of e){if(!t.discriminating)continue;let e=n.get(t.key);if(!e){r+=1;continue}n.delete(t.key),a+=1,U(t,e)||(i+=1)}return{onlyInBaseline:r,onlyInCurrent:n.size,rectMismatched:i,shared:a}}function mt(e,t,n){let r=ht(e,n),i=new Map(ht(t,n).map(e=>[e.key,e]));for(let e of r){let t=i.get(e.key);if(!t||!U(e,t))return!0;i.delete(e.key)}return i.size>0}function ht(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 gt(e){return f(e.device)}function _t(e){let t=Number(e[0]),n=Number(e[1]);return Number.isFinite(t)&&Number.isFinite(n)?{x:t,y:n}:void 0}function vt(e){if(e===`click`||e===`press`)return`press`}function yt(e,t,n){if(!e.rect||!wt(e.rect)||Tt(e))return;let r=St(e);if(!r)return;let i=t.get(r)??0;t.set(r,i+1);let a=bt(e);return{key:`${r}|#${i}`,...a?{identity:a}:{},x:Math.round(e.rect.x),y:Math.round(e.rect.y),width:Math.round(e.rect.width),height:Math.round(e.rect.height),discriminating:!xt(e,n)}}function bt(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 xt(e,t){return p(e)||e.ref!==void 0&&t.has(e.ref)}function St(e){let t=[e.identifier,e.label,e.value,e.type,e.role,e.enabled===!1?`disabled`:`enabled`,e.selected===!0?`selected`:`unselected`,e.hittable===!0?`hittable`:`not-hittable`].map(e=>typeof e==`string`?e.trim():``).join(`|`);return t.replaceAll(`|`,``)?t:void 0}function Ct(e){return e.length===2&&e.every(e=>Number.isFinite(Number(e)))}function wt(e){return[e.x,e.y,e.width,e.height].every(e=>Number.isFinite(e))&&e.width>0&&e.height>0}function Tt(e){return`${e.label??``} ${e.identifier??``}`.toLowerCase().includes(`scroll bar`)}function Et(e){let{session:t,command:n,action:r=n,positionals:i,flags:a,scheduleOutcomeRetry:o=!1,androidFreshnessBaseline:s}=e;o&&it({session:t,command:n,positionals:i,flags:a,preSnapshot:t.snapshot}),j(r)&&$e(t,r,s??t.snapshot),Dt(t,r,i,a)}function Dt(e,t,n=[],r){if(!Lt(e.device)||!It(t,n,r))return;let i=Rt(e.device)?V(e.snapshot?.nodes??[]):void 0;e.postGestureStabilization={action:t,positionals:n,markedAt:Date.now(),...i?.length?{baselineSignature:i,baselineBackend:H(e.snapshot)}:{}}}function Ot(e){e?.postGestureStabilization&&(e.postGestureStabilization=void 0)}function kt(e){return!!e?.postGestureStabilization}async function At(e){let t=at(e.session);if(t&&e.session)return await jt({...e,session:e.session},t);if(f(e.device)&&e.session&&kt(e.session))return await Nt({...e,session:e.session});let n=N(e.session);if(n&&e.device.platform===`android`){let t=await F(e,n);return{snapshot:t.snapshot,...t.annotations}}}async function jt(e,t){let n=e.session,r=Date.now(),i=0,a=await Mt(e,t,await G(e)),o=await R({session:n,pending:t,logPath:e.logPath,snapshot:a.snapshot,retryTap:e.retryTap});for(;o.retried;)i+=1,a=await Mt(e,t,await G(e)),o=await R({session:n,pending:t,logPath:e.logPath,snapshot:a.snapshot,retryTap:e.retryTap});L(n);let s=await Pt({session:n,initial:a,capture:async()=>await G(e),readSnapshot:e=>e.snapshot});return a=s.value,o.change!==`ambiguous`&&a.annotations.freshness?.staleAfterRetries!==!0&&P(n),o.change===`unchanged`?ct({pending:t,attempts:i,startedAt:r}):st({pending:t,change:o.change,attempts:i,startedAt:r}),Ft(s)}async function Mt(e,t,n){let r=n;return lt(t.preSignature,V(r.snapshot.nodes))===`unchanged`?(await v(500),r=await G(e),r):r}async function Nt(e){return Ft(await Pt({session:e.session,capture:async()=>await G(e),readSnapshot:e=>e.snapshot}))}async function G(e){let t=N(e.session);return t&&e.device.platform===`android`?await F(e,t):await e.capture()}async function Pt(e){let{session:t,capture:n,readSnapshot:r}=e,i=t?.postGestureStabilization;if(!t||!Lt(t.device)||!i)return{value:e.initial??await n()};let a=await Ce({pending:{action:i.action,positionals:i.positionals??[],baselineSignature:i.baselineSignature,baselineBackend:i.baselineBackend},needsBaselineDistrust:Rt(t.device),initial:e.initial,hooks:{capture:n,readSurface:e=>{let t=r(e);return{signature:V(t.nodes),backend:H(t)}},signaturesStable:W,classifyBaselineEvidence:ut,surfacesIdentical:ft,summarizeDivergence:pt}});return Ot(t),a}function Ft(e){let{snapshot:t,annotations:n}=e.value;return e.postGestureOutcome&&(t.postGestureOutcome=e.postGestureOutcome),{snapshot:t,...n}}function It(e,t,n){return n?.postGestureStabilization===!1?!1:n?.postGestureStabilization===!0||e===`swipe`||e===`scroll`||e===`gesture`&&t[0]===`swipe`}function Lt(e){return f(e)}function Rt(e){return d(e.platform)}function zt(e,t={}){let n=t.mode??`action`,{node:r,preActionNodes:i}=e;if(typeof r.index!=`number`)return;let a=_e(i),o=re(K(r),i);if(n===`landmark`&&o.id===void 0&&o.label===void 0)return;let s=ge(r,a,8),c=s.chain,l=q(i,r),u=J(r,a),d=Wt(r),f=+(c.length>0),p=e=>{let t=c.slice(0,e),n=Gt({nodes:i,byIndex:a,node:r,identity:o,ancestry:t,sibling:l,scrollRegion:u});return{candidate:{...o,ancestry:t,sibling:l,viewportOrder:n.viewportOrder,...u?{scrollRegion:u}:{},...d?{rect:d}:{},verification:`verified`},domain:n}};for(let e=c.length;e>=f;--e){let{candidate:t,domain:i}=p(e);if(Vt(t))return t.verification=Bt({node:r,domain:i,mode:n,brokenWalk:s.broken}),t;if(e===f)return Ht(t)}}function Bt(e){return e.brokenWalk?`unverifiable`:e.mode===`landmark`?`verified`:qt({node:e.node,domain:e.domain})}function Vt(e){return ue(fe({...e,verification:`unverifiable`}))<=oe}function Ht(e){return e.verification=`unverifiable`,ue(fe(e))>4096&&delete e.rect,e}const K=pe;function q(e,t){return ae(e,t)}function J(e,t){let n=je(e,t);if(!n)return;let r=K(n);return{role:r.role,...r.id===void 0?r.label===void 0?{}:{label:r.label}:{id:r.id}}}function Ut(e,t){return!e&&!t?!0:!e||!t?!1:te(e,t)}function Wt(e){let t=e.rect;if(t)return{x:t.x,y:t.y,width:t.width,height:t.height}}function Gt(e){let{nodes:t,byIndex:n,node:r,identity:i,ancestry:a,sibling:o,scrollRegion:s}=e,c=ve(t,n,i,a),l=c.filter(e=>q(t,e)===o),u=c.length>0?c.filter(e=>Ut(J(e,n),s)):void 0,d=u?Kt(u):[];return{identitySet:c,siblingMatches:l,regionMembers:u,orderedRegion:d,viewportOrder:Math.max(d.findIndex(e=>e.index===r.index),0)}}function Kt(e){return e.map((e,t)=>({node:e,documentOrder:t,center:De(e.rect)})).sort((e,t)=>!e.center&&!t.center?e.documentOrder-t.documentOrder:e.center?t.center?e.center.y===t.center.y?e.center.x===t.center.x?e.documentOrder-t.documentOrder:e.center.x-t.center.x:e.center.y-t.center.y:-1:1).map(e=>e.node)}function qt(e){let{node:t,domain:n}=e,r=t.ref,i=n.identitySet.map(e=>e.ref);return y({winnerRef:r,matchedRefs:i,identitySetRefs:i,siblingMatchRefs:n.siblingMatches.map(e=>e.ref),regionMemberRefs:n.regionMembers?.map(e=>e.ref),viewportCandidateRef:n.orderedRegion[n.viewportOrder]?.ref}).outcome}let Y;async function Jt(){if(Y)return Y;let{createAppleSessionObservation:e}=await import(`./session-observation.js`),{listLocalDeviceInventory:t,shouldPropagateDeviceInventoryProbeError:n}=await import(`./device-inventory-context.js`).then(e=>e.t);return Y??=e({listLocalDevices:t,shouldPropagateProbeError:n}),Y}const Yt=Object.freeze({async observeRunnerSession(e){return(await Jt()).observeRunnerSession(e)},async resolveSoleForegroundApp(e){return(await Jt()).resolveSoleForegroundApp(e)}});async function Xt(e,t,n,r){let{queryAppleRunnerSelector:i}=await import(`./runner-operations-facade.js`);return await i(e,t,n,r)}function Zt(e,t){return i(`UNSUPPORTED_OPERATION`,`${e} is not supported on this device`,{reason:t.reason},t.hint?{hint:t.hint}:void 0)}async function X(e){let t=await en(e.inspectFacts)(e.device);for(let n of e.required){let r=t.operations[n];if(!r.available)return{type:`response`,response:e.unavailableResponse?e.unavailableResponse(r):Zt(e.command,r)}}return{type:`admitted`,bind:tn(e.bindDevice)}}async function Qt(e){let t=await X({...e,required:e.use.required});if(t.type===`response`)return t;let n=await t.bind(e.device,e.use);return e.readiness&&await ke(n),{type:`runtime`,runtime:n}}async function $t(e,t){let n=await Qt(e);if(n.type===`response`)return{ok:!1,response:n.response};let r=n.runtime;return{ok:!0,execute:async({dispatchContext:e})=>await t(r,e)}}function en(e){if(e)return e;throw new t(`COMMAND_FAILED`,`Device runtime facts inspection is unavailable.`,{reason:`runtime-gateway-missing`})}function tn(e){if(e)return e;throw new t(`COMMAND_FAILED`,`Device runtime binding is unavailable.`,{reason:`runtime-gateway-missing`})}function nn(t){let{flags:n,logPath:i,meta:a,session:o,snapshotScope:s}=t,{appBundleId:c,trace:l,surface:u}=o??{},d=t.context??I(i??``,n,c,l?.outPath,a?.requestId,a);return{options:{appBundleId:c,...e(n,r),scope:s,includeRects:t.includeRects,surface:u},execution:Z(d),...t.signal===void 0?{}:{signal:t.signal}}}function Z(e){return{requestId:e.requestId,verbose:e.verbose,logPath:e.logPath,traceLogPath:e.traceLogPath,iosXctestrunFile:e.iosXctestrunFile,iosXctestDerivedDataPath:e.iosXctestDerivedDataPath,iosXctestEnvDir:e.iosXctestEnvDir,runnerLeaseContext:e.runnerLeaseContext}}function rn(e){let t=Se(e);return{...t,capture:Te(t),selectors:we(t),interactions:xe(t)}}async function an(e){let t=await(await Fe().resolve(e.device,e.runnerContext)).snapshot(e.options);if(!(`stage`in t))return t;let{presentIosSnapshotAcquisition:n}=await import(`./ios-snapshot-runtime.js`);return await n(t,e.options)}function on(e){let t=e?e.textEntryReadiness:void 0,n=dn(t)?{textEntryReadiness:t}:{},r=sn(e);return r?{...n,...r}:n}function sn(e){if(!cn(e))return null;let t=ln(e.target);return t?{verification:`unconfirmed`,requested:e.requested,before:e.before,after:e.after,target:t}:null}function cn(e){return!!(e&&e.verification===`unconfirmed`&&typeof e.requested==`string`&&Q(e.before)&&Q(e.after))}function ln(e){if(!pn(e)||!un(e))return null;let t=fn(e.rect);return t?{resourceId:e.resourceId,className:e.className,packageName:e.packageName,rect:t}:null}function un(e){return Q(e.resourceId)&&Q(e.className)&&Q(e.packageName)}function dn(e){return typeof e==`string`&&Me.includes(e)}function Q(e){return e===null||typeof e==`string`}function fn(e){return!pn(e)||![e.x,e.y,e.width,e.height].every(e=>typeof e==`number`)?null:e}function pn(e){return!!e&&typeof e==`object`}async function mn(e){let t={device:e.device,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice},n=ee(e.command,e.requiresCapture),r=await X({command:e.command,required:n.use.required,...e.unavailableResponse?{unavailableResponse:e.unavailableResponse}:{},...t});if(r.type===`response`)return{ok:!1,response:r.response};let i=r.bind;switch(n.kind){case`tap-point`:return{ok:!0,runtime:{kind:`tap`,captured:!1,runtime:await i(e.device,ie)}};case`captured-tap`:return{ok:!0,runtime:{kind:`tap`,captured:!0,runtime:await i(e.device,ce)}};case`long-press-point`:return{ok:!0,runtime:{kind:`long-press`,captured:!1,runtime:await i(e.device,ne)}};case`captured-long-press`:return{ok:!0,runtime:{kind:`long-press`,captured:!0,runtime:await i(e.device,me)}};case`hover-point`:return{ok:!0,runtime:{kind:`hover`,captured:!1,runtime:await i(e.device,he)}};case`captured-hover`:return{ok:!0,runtime:{kind:`hover`,captured:!0,runtime:await i(e.device,de)}};case`fill-point`:return{ok:!0,runtime:{kind:`fill`,captured:!1,runtime:await i(e.device,le)}};case`captured-fill`:return{ok:!0,runtime:{kind:`fill`,captured:!0,runtime:await i(e.device,se)}}}}function hn(e,t){let n={execution:Z(t),appBundleId:t.appBundleId},r=e.captured?xn(e.runtime):void 0;switch(e.kind){case`tap`:return gn(e,t,n,r);case`long-press`:return _n(e,n,r);case`hover`:return vn(e,n,r);case`fill`:return yn(e,t,n,r)}}function gn(e,t,n,r){let i=e.captured?e.runtime.operations.tapRef:void 0,a=e.captured?e.runtime.operations.tapElementSelector:void 0;return Object.freeze({captureSnapshot:r,tapPoint:async(r,i={})=>{let a=Sn(i,t),o=await e.runtime.operations.tapPoint({point:r,options:a,...n});return{x:r.x,y:r.y,count:a.count,intervalMs:a.intervalMs,holdMs:a.holdMs,jitterPx:a.jitterPx,doubleTap:a.doubleTap,...a.button===`primary`?{}:{button:a.button},...o??{},...h(Tn(r,a.button))}},tapRef:i?async e=>await i({ref:e,...n}):void 0,tapElementSelector:e.captured&&a?async t=>{let r=await e.runtime.operations.tapElementSelector?.({selector:t,...n}),i=r?.maestroNonHittableCoordinateFallbackUsed===!0;return{selector:t.raw,...r??{},...h(i?`tapped via non-hittable coordinate fallback`:`Tapped ${t.raw}`)}}:void 0})}function _n(e,t,n){return Object.freeze({captureSnapshot:n,longPressPoint:async(n,r)=>{let i=await e.runtime.operations.longPressPoint({point:n,durationMs:r,...t});return{x:n.x,y:n.y,durationMs:r,...i??{},...h(`Long pressed (${n.x}, ${n.y})`)}}})}function vn(e,t,n){let r=e.captured?e.runtime.operations.hoverRef:void 0;return Object.freeze({captureSnapshot:n,hoverPoint:async n=>{let r=await e.runtime.operations.hoverPoint({point:n,...t});return{x:n.x,y:n.y,...r??{},...h(`Hovered (${n.x}, ${n.y})`)}},hoverRef:r?async e=>await r({ref:e,...t}):void 0})}function yn(e,t,n,r){let i=e.captured?e.runtime.operations.fillRef:void 0,a=e=>m(e??t.delayMs??0,`delay-ms`,0,1e4);return Object.freeze({captureSnapshot:r,fillPoint:async(t,r,i={})=>{let o=a(i.delayMs),s=await e.runtime.operations.fillPoint({point:t,text:r,delayMs:o,allowNonHittableCoordinateFallback:i.allowNonHittableCoordinateFallback===!0,...n});return{x:t.x,y:t.y,text:r,delayMs:o,...bn(s)?{maestroNonHittableCoordinateFallbackUsed:!0}:{},...on(s),...h(`Filled ${Array.from(r).length} chars`)}},fillRef:i?async(e,t,r={})=>await i({ref:e,text:t,delayMs:a(r.delayMs),...n}):void 0})}function bn(e){return typeof e==`object`&&!!e&&`maestroNonHittableCoordinateFallbackUsed`in e&&e.maestroNonHittableCoordinateFallbackUsed===!0}function xn(e){return async t=>await e.operations.captureSnapshot(t)}function Sn(e,t){let n=Cn(e,t);return wn(n),{button:e.button??g(t),...n,surface:e.surface??t.surface}}function Cn(e,t){return{count:$(e.count,t.count,1,`count`,1,200),intervalMs:$(e.intervalMs,t.intervalMs,0,`interval-ms`,0,1e4),holdMs:$(e.holdMs,t.holdMs,0,`hold-ms`,0,1e4),jitterPx:$(e.jitterPx,t.jitterPx,0,`jitter-px`,0,100),doubleTap:e.doubleTap??t.doubleTap??!1}}function $(e,t,n,r,i,a){return m(e??t??n,r,i,a)}function wn(e){if(e.doubleTap&&e.holdMs>0)throw new t(`INVALID_ARGS`,`double-tap cannot be combined with hold-ms`);if(e.doubleTap&&e.jitterPx>0)throw new t(`INVALID_ARGS`,`double-tap cannot be combined with jitter-px`)}function Tn(e,t){return t===`primary`?`Pressed (${e.x}, ${e.y})`:`${t===`secondary`?`Right`:`Middle`} clicked (${e.x}, ${e.y})`}function En(e){let{inspectFacts:t,bindDevice:n}=e;if(!t||!n)return;let r=new Map;return async({device:e,point:i,context:a})=>{let o=r.get(e.id);o||(o=mn({device:e,command:`press`,requiresCapture:!1,inspectFacts:t,bindDevice:n}),r.set(e.id,o));let s=await o;if(!s.ok)return!1;let c=hn(s.runtime,a);return c.tapPoint?(await c.tapPoint(i),!0):!1}}async function Dn(e){let t=await At({session:e.session,device:e.device,logPath:e.logPath,interactiveOnly:e.flags?.snapshotInteractiveOnly===!0,androidFreshnessMode:e.androidFreshnessMode,capture:()=>kn(e),retryTap:En(e)});if(t)return t;let n=await kn(e);return P(e.session),{snapshot:n.snapshot,...n.annotations}}async function On(t){if(t.captureData)return await t.captureData();let{device:n,session:i,logPath:a}=t,o=I(a,An(t),i?.appBundleId,i?.trace?.outPath);return await an({device:n,runnerContext:{requestId:o.requestId,signal:t.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:t.signal,...e(o,r),includeRects:t.includeRects,surface:i?.surface}})}async function kn(e){let t=Date.now(),n=await On(e);c(e.session,{durationMs:Date.now()-t,backend:n.backend,platform:u(e.device)});let r=s(n),i=l(n,Oe(n,An(e)));return r.androidSnapshot?.systemSurfaceOnly===!0&&(i.systemSurfaceOnly=!0),{data:n,snapshot:i,annotations:r}}function An(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function jn(e,t){if(!e||!e.trim().startsWith(`@`))return{ok:!0,scope:e};if(!t?.snapshot)return i(`INVALID_ARGS`,`Ref scope requires an existing snapshot in session.`);let r=a(e.trim());if(!r)return i(`INVALID_ARGS`,`Invalid ref scope: ${e}`);let o=[t.snapshot,...t.snapshotScopeSource?[t.snapshotScopeSource]:[]],s;for(let e of o){let t=n(e.nodes,r);if(s=t?be(t,e.nodes):void 0,s)break}return s?{ok:!0,scope:s}:i(`COMMAND_FAILED`,`Ref ${e} not found or has no label`)}function Mn(e,t,n={}){if(!e)return;let r=ze(e);return{name:t,appBundleId:e.appBundleId,appName:e.appName,...n.includeSnapshot===!0?{snapshot:e.snapshot,...r&&n.omitRefFrameSnapshot!==!0?{refFrameSnapshot:r}:{}}:{},metadata:{surface:e.surface,...n.metadata??{}}}}function Nn(e){return{get:t=>t===e.sessionName?Mn(e.getSession(),e.sessionName,e.recordOptions):void 0,set:t=>{if(t.name!==e.sessionName){_({level:`warn`,phase:`runtime_session_write_skipped`,data:{expected:e.sessionName,received:t.name}});return}e.setRecord(t)}}}function Pn(e,t){e.snapshot!==t&&(e.snapshotGeneration=In(e.snapshotGeneration)),e.snapshot=t,e.snapshotScopeSource=void 0,t.comparisonSafe===!0&&(e.lastComparisonSafeSnapshot=t)}function Fn(e,t){e.snapshotScopeSource=t.scopeSource,e.snapshotGeneration=t.keptCurrentSnapshot?t.previousGeneration:In(t.previousGeneration)}function In(e){return e===void 0?Ne(1e5,1e6):e+1}function Ln(e){let t=e.startsWith(`@`)?e.slice(1):e,n=t.indexOf(`~`);return n===-1?t:t.slice(0,n)}function Rn(e,t){let n=new Set;for(let e of t){let t=Ln(e);t.length>0&&n.add(t)}n.size!==0&&We(e,n)}function zn(e,t){if(t?.diff)return Rn(e,Bn(t)),e.snapshotGeneration}function Bn(e){let t=[];for(let n of e.diff?.lines??[])n.ref&&t.push(n.ref);for(let n of e.refs??[])t.push(n.ref);for(let n of e.tail??[])t.push(n.ref);return t}function Vn(e){return`Ref @${e.ref.startsWith(`@`)?e.ref.slice(1):e.ref} was minted from snapshot s${e.mintedGeneration} but the session's ref frame is now s${e.currentFrameEpoch} — re-run snapshot -i.`}function Hn(e){let{session:t,ref:n,mintedGeneration:r}=e;if(t&&k(t)===`expired`)return`The UI may have changed since these refs were issued, so they no longer represent current device state. Take a new snapshot before relying on or interacting with them.`;if(r!==void 0){let e=t?T(t)??0:0;if(r!==e)return Vn({ref:n,mintedGeneration:r,currentFrameEpoch:e})}}export{V as A,Be as B,q as C,kt as D,Ut as E,B as F,w as G,E as H,pt as I,y as J,k as K,I as L,mt as M,ft as N,Et as O,H as P,N as R,J as S,Kt as T,Ge as U,Ve as V,D as W,$t as _,Fn as a,Xt as b,On as c,mn as d,rn as f,Qt as g,X as h,Pn as i,ut as j,W as k,jn as l,Z as m,Rn as n,Nn as o,nn as p,Pe as q,Hn as r,Dn as s,zn as t,hn as u,Zt as v,zt as w,K as x,Yt as y,Ue as z};
1
+ import{D as e,M as t,T as n,b as r,h as i,o as a}from"./sdk-contracts.js";import{u as o}from"./capture.js";import{r as s}from"./snapshot-capture-annotations.js";import{r as c}from"./snapshot-diagnostics.js";import{f as l}from"./android-input-ownership.js";import{S as u,m as d,u as f}from"./sdk-device.js";import{Ar as ee,Bt as te,Kn as ne,Sn as re,Tt as ie,Vn as ae,Wt as oe,Yn as se,Zn as ce,ct as le,dt as ue,ht as de,ir as p,lt as fe,nr as m,qn as pe,ut as me,xt as he}from"./sdk-batch.js";import{F as ge,I as _e,M as ve,P as ye,T as be,a as xe,g as Se,j as Ce,o as we,t as Te,x as h}from"./runtime.js";import{r as g}from"./success-text.js";import{g as Ee,o as _}from"./overlay.js";import{i as De}from"./click-button.js";import{a as Oe,r as v}from"./diagnostics.js";import{t as ke}from"./timeouts.js";import"./diagnostics2.js";import"./retry.js";import{i as Ae}from"./rect-center.js";import{t as je}from"./snapshot-state.js";import{n as Me}from"./request-runtime-binding.js";import{i as Ne}from"./lease-context.js";import{s as Pe}from"./tree.js";import{t as Fe}from"./interactor-types.js";import{randomInt as Ie}from"node:crypto";function Le(e){return e.matchedRefs.length===0?{path:2,outcome:`unverifiable`,reason:`selector-miss`}:e.identitySetRefs.length===0?{path:3,outcome:`unverifiable`,reason:`identity-set-empty`}:e.identitySetRefs.length===1?e.identitySetRefs[0]===e.winnerRef?{path:4,outcome:`verified`}:{path:5,outcome:`unverifiable`,reason:`unique-but-wrong`}:e.siblingMatchRefs.length===1?e.siblingMatchRefs[0]===e.winnerRef?{path:6,outcome:`verified`}:{path:6,outcome:`unverifiable`,reason:`signal-isolated-wrong`}:e.regionMemberRefs!==void 0&&e.regionMemberRefs.length>0&&e.viewportCandidateRef!==void 0?e.viewportCandidateRef===e.winnerRef?{path:6,outcome:`verified`}:{path:6,outcome:`unverifiable`,reason:`signal-isolated-wrong`}:{path:6,outcome:`unverifiable`,reason:`no-signal-isolation`}}let Re={resolve:async()=>{throw new t(`COMMAND_FAILED`,`Interactor resolution is not composed for this process.`,{reason:`interactor-resolution-missing`})}};function ze(e){Re=e}function Be(){return Re}var y=class e{#e;constructor(e){this.#e=e}get state(){return this.#e.state}get scope(){return this.#e.scope}get tree(){return this.#e.tree}get generation(){return this.#e.generation}static expire(t){return t.#e.state===`expired`?t:new e({...t.#e,state:`expired`})}};const Ve=new y({state:`active`,scope:`all`,tree:void 0,generation:void 0});function He(e){return new y({state:`active`,...e})}function Ue(e){return y.expire(e)}const We=new WeakMap,Ge=new WeakSet;function b(e){return e.refFrame??Ve}function x(e){return b(e).generation??e.snapshotGeneration}function Ke(e){return b(e).tree}function qe(e){Xe(e),Je(e),e.refFrame=Ue(b(e)),e.snapshotScopeSource=void 0}function Je(e){e.snapshot&&Ge.add(e.snapshot)}function Ye(e){return Ge.has(e)}function Xe(e){let t=S(e)+1;return We.set(e,t),t}function S(e){return We.get(e)??0}function Ze(e){C(e,`all`)}function Qe(e,t){C(e,t)}function C(e,t){e.refFrame=He({scope:t,tree:e.snapshot,generation:e.snapshotGeneration})}function w(e){return b(e).state}function $e(e){return b(e).scope}function et(e){let t=e.ref.startsWith(`@`)?e.ref.slice(1):e.ref;return{admission:tt({session:e.session,refBody:t,mintedGeneration:e.mintedGeneration}),scope:$e(e.session),currentGeneration:x(e.session)}}function tt(e){let{session:t,refBody:n,mintedGeneration:r}=e;if(w(t)===`expired`)return{admitted:!1,reason:`ref_frame_expired`};if(r!==void 0&&r!==x(t))return{admitted:!1,reason:`ref_generation_mismatch`};let i=$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}}const nt=[250,400,600];function rt(e){return e===`press`||e===`click`||e===`back`||e===`open`}function it(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 at(e,t){return e<12?!1:t<=Math.floor(e*.2)}function ot(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:at(t.baselineCount,e.snapshot.nodes.length)?st(e.snapshot)?null:`sharp-drop`:t.routeComparable&&rt(t.action)&&ct(t.baselineSignatures,e.snapshot.nodes)?`stuck-route`:null}function st(e){return e.nodes.some(e=>e.hittable===!0||!!e.label?.trim()||!!e.value?.trim()||!!e.identifier?.trim())}function ct(e,t){if(!e||e.length===0)return!1;let n=Math.max(e.length,t.length);if(n<12)return!1;let r=it(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 lt(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 ke(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 ut(e,t,n=e.snapshot){if(e.device.platform!==`android`)return;let r=dt(e,n),i=r?.comparisonSafe===!0;e.androidSnapshotFreshness={action:t,markedAt:Date.now(),baselineCount:(r??n)?.nodes.length??0,baselineSignatures:i?it(r?.nodes??[]):void 0,routeComparable:i}}function dt(e,t){if(t?.comparisonSafe===!0)return t;let n=e.lastComparisonSafeSnapshot;return!n||n.comparisonSafe!==!0?t:Date.now()-n.createdAt<=5e3?n:t}function T(e){if(!e||e.device.platform!==`android`)return;let t=e.androidSnapshotFreshness;if(t){if(Date.now()-t.markedAt>2500){delete e.androidSnapshotFreshness;return}return t}}function E(e){!e||e.device.platform!==`android`||delete e.androidSnapshotFreshness}async function ft(e,t){return lt({capture:e.capture,classify:n=>ot({snapshot:n.snapshot,rawNodeCount:n.annotations.analysis?.rawNodeCount},t,{interactiveOnly:e.interactiveOnly,mode:e.androidFreshnessMode}),window:t,retry:{retryBudgetMs:1500,delaysMs:nt},onTrustworthyCapture:()=>E(e.session)})}const pt=`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 mt(e){return Object.fromEntries(pt.map(t=>[t,e?.[t]]))}function D(e,t,n,r,i,a){return{requestId:i??Oe().requestId,appBundleId:n,runnerLeaseContext:Ne({meta:a}),logPath:e,traceLogPath:r,...mt(t),screenshotCaptureBackend:t?.maestro?.screenshotCaptureBackend,...o(t),clickButton:De(t)}}function ht(e){return e?.interactionOutcome?.retryOnNoChange===!0}function gt(e){let{session:t,command:n,positionals:r,flags:i,preSnapshot:a}=e;if(!ht(i)||!U(t))return;let o=Ct(n);if(!o||!kt(r))return;let s=M(a?.nodes??[]);s.length!==0&&(t.pendingInteractionOutcome={action:n,command:o,positionals:r,flags:j(i),markedAt:Date.now(),attemptsRemaining:2,preSignature:s})}function _t(e){let t=e?.pendingInteractionOutcome;if(!(!e||!t)){if(!U(e)){O(e);return}if(Date.now()-t.markedAt>3e4){O(e);return}return t}}function O(e){e?.pendingInteractionOutcome&&(e.pendingInteractionOutcome=void 0)}async function k(e){let{pending:t,snapshot:n}=e,r=P(t.preSignature,M(n.nodes));if(r!==`unchanged`||t.attemptsRemaining<=0)return{retried:!1,change:r};let i=e.retryTap,a=i?St(t.positionals):void 0;if(!i||!a)return A(t,i?`unreadable-retry-point`:`device-runtime-unavailable`),{retried:!1,change:r};let o=Date.now();return--t.attemptsRemaining,await vt(i,e)?(v({level:`info`,phase:`interaction_no_change_retry`,data:{action:t.action,attemptsRemaining:t.attemptsRemaining,durationMs:Date.now()-o}}),{retried:!0,change:r}):(A(t,`retry-tap-unavailable`),{retried:!1,change:r})}async function vt(e,t){let{session:n,pending:r}=t,i=St(r.positionals);if(!i)return!1;try{return await e({device:n.device,point:i,context:{...D(t.logPath,r.flags,n.appBundleId,n.trace?.outPath),surface:n.surface}})}catch{return!1}}function A(e,t){v({level:`info`,phase:`interaction_no_change_retry_skipped`,data:{action:e.action,attemptsRemaining:e.attemptsRemaining,reason:t}})}function yt(e){v({level:e.attempts>0?`info`:`debug`,phase:`interaction_settled`,data:{action:e.pending.action,change:e.change,attempts:e.attempts,durationMs:Date.now()-e.startedAt}})}function bt(e){v({level:`warn`,phase:`interaction_settle_timeout`,data:{action:e.pending.action,attempts:e.attempts,durationMs:Date.now()-e.startedAt}})}function j(e){if(!e?.interactionOutcome&&!e?.postGestureStabilization)return e;let{interactionOutcome:t,postGestureStabilization:n,...r}=e;return r}function M(e){let t=new Map,n=[],r=ve(e);for(let i of e){let e=wt(i,t,r);e&&n.push(e)}return n}function N(e){return e?.comparisonKey??e?.snapshotQuality?.backend}function P(e,t){return e.length===0||t.length===0?`ambiguous`:I(e,t)?`unchanged`:`changed`}function F(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 I(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||!F(r,i))return!1}return!0}function L(e,t){let n=R(e),r=R(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,!F(t,n))return`changed`}if(i===0)return`ambiguous`;let o=r.size>i;return a&&o?`changed`:`unchanged`}function R(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 z(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||!F(e,t))return!1}return!0}function B(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,F(t,e)||(i+=1)}return{onlyInBaseline:r,onlyInCurrent:n.size,rectMismatched:i,shared:a}}function xt(e,t,n){let r=V(H(e,n)),i=V(H(t,n));for(let[e,t]of r){let n=i.get(e);if(!n||!F(t,n))return!0;i.delete(e)}return i.size>0}function V(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 H(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 U(e){return d(e.device)}function St(e){let t=Number(e[0]),n=Number(e[1]);return Number.isFinite(t)&&Number.isFinite(n)?{x:t,y:n}:void 0}function Ct(e){if(e===`click`||e===`press`)return`press`}function wt(e,t,n){if(!e.rect||!At(e.rect)||jt(e))return;let r=Ot(e);if(!r)return;let i=t.get(r)??0;t.set(r,i+1);let a=Et(e);return{key:`${r}|#${i}`,...a?{identity:a}:{},content:Tt(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:!Dt(e,n)}}function Tt(e,t){return t??`${e.type??``}|${e.role??``}`}function Et(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 Dt(e,t){return ee(e)||e.ref!==void 0&&t.has(e.ref)}function Ot(e){let t=[e.identifier,e.label,e.value,e.type,e.role,...Ee(e),e.hittable===!0?`hittable`:`not-hittable`].map(e=>typeof e==`string`?e.trim():``).join(`|`);return t.replaceAll(`|`,``)?t:void 0}function kt(e){return e.length===2&&e.every(e=>Number.isFinite(Number(e)))}function At(e){return[e.x,e.y,e.width,e.height].every(e=>Number.isFinite(e))&&e.width>0&&e.height>0}function jt(e){return`${e.label??``} ${e.identifier??``}`.toLowerCase().includes(`scroll bar`)}function Mt(e){let{session:t,command:n,action:r=n,positionals:i,flags:a,scheduleOutcomeRetry:o=!1,androidFreshnessBaseline:s}=e;o&&gt({session:t,command:n,positionals:i,flags:a,preSnapshot:t.snapshot}),rt(r)&&ut(t,r,s??t.snapshot),Nt(t,r,i,a)}function Nt(e,t,n=[],r){if(!Ut(e.device)||!Ht(t,n,r))return;let i=Wt(e.device)?M(e.snapshot?.nodes??[]):void 0;e.postGestureStabilization={action:t,positionals:n,markedAt:Date.now(),...i?.length?{baselineSignature:i,baselineBackend:N(e.snapshot)}:{}}}function Pt(e){e?.postGestureStabilization&&(e.postGestureStabilization=void 0)}function Ft(e){return!!e?.postGestureStabilization}async function It(e){let t=_t(e.session);if(t&&e.session)return await Lt({...e,session:e.session},t);if(d(e.device)&&e.session&&Ft(e.session))return await zt({...e,session:e.session});let n=T(e.session);if(n&&e.device.platform===`android`){let t=await ft(e,n);return{snapshot:t.snapshot,...t.annotations}}}async function Lt(e,t){let n=e.session,r=Date.now(),i=0,a=await Rt(e,t,await W(e)),o=await k({session:n,pending:t,logPath:e.logPath,snapshot:a.snapshot,retryTap:e.retryTap});for(;o.retried;)i+=1,a=await Rt(e,t,await W(e)),o=await k({session:n,pending:t,logPath:e.logPath,snapshot:a.snapshot,retryTap:e.retryTap});O(n);let s=await Bt({session:n,initial:a,capture:async()=>await W(e),readSnapshot:e=>e.snapshot});return a=s.value,o.change!==`ambiguous`&&a.annotations.freshness?.staleAfterRetries!==!0&&E(n),o.change===`unchanged`?bt({pending:t,attempts:i,startedAt:r}):yt({pending:t,change:o.change,attempts:i,startedAt:r}),Vt(s)}async function Rt(e,t,n){let r=n;return P(t.preSignature,M(r.snapshot.nodes))===`unchanged`?(await ke(500),r=await W(e),r):r}async function zt(e){return Vt(await Bt({session:e.session,capture:async()=>await W(e),readSnapshot:e=>e.snapshot}))}async function W(e){let t=T(e.session);return t&&e.device.platform===`android`?await ft(e,t):await e.capture()}async function Bt(e){let{session:t,capture:n,readSnapshot:r}=e,i=t?.postGestureStabilization;if(!t||!Ut(t.device)||!i)return{value:e.initial??await n()};try{return await Ce({pending:{action:i.action,positionals:i.positionals??[],baselineSignature:i.baselineSignature,baselineBackend:i.baselineBackend},needsBaselineDistrust:Wt(t.device),initial:e.initial,hooks:{capture:n,readSurface:e=>{let t=r(e);return{signature:M(t.nodes),backend:N(t)}},signaturesStable:I,classifyBaselineEvidence:L,surfacesIdentical:z,summarizeDivergence:B}})}finally{Pt(t)}}function Vt(e){let{snapshot:t,annotations:n}=e.value;return e.postGestureOutcome&&(t.postGestureOutcome=e.postGestureOutcome),{snapshot:t,...n}}function Ht(e,t,n){return n?.postGestureStabilization===!1?!1:n?.postGestureStabilization===!0||e===`swipe`||e===`scroll`||e===`gesture`&&t[0]===`swipe`}function Ut(e){return d(e)}function Wt(e){return f(e.platform)}function Gt(e,t={}){let n=t.mode??`action`,{node:r,preActionNodes:i}=e;if(typeof r.index!=`number`)return;let a=ge(i),o=ae(G(r),i);if(n===`landmark`&&o.id===void 0&&o.label===void 0)return;let s=ye(r,a,8),c=s.chain,l=K(i,r),u=q(r,a),d=Xt(r),f=+(c.length>0),ee=e=>{let t=c.slice(0,e),n=Zt({nodes:i,byIndex:a,node:r,identity:o,ancestry:t,sibling:l,scrollRegion:u});return{candidate:{...o,ancestry:t,sibling:l,viewportOrder:n.viewportOrder,...u?{scrollRegion:u}:{},...d?{rect:d}:{},verification:`verified`},domain:n}};for(let e=c.length;e>=f;--e){let{candidate:t,domain:i}=ee(e);if(qt(t))return t.verification=Kt({node:r,domain:i,mode:n,brokenWalk:s.broken}),t;if(e===f)return Jt(t)}}function Kt(e){return e.brokenWalk?`unverifiable`:e.mode===`landmark`?`verified`:$t({node:e.node,domain:e.domain})}function qt(e){return p(m({...e,verification:`unverifiable`}))<=ce}function Jt(e){return e.verification=`unverifiable`,p(m(e))>4096&&delete e.rect,e}const G=pe;function K(e,t){return se(e,t)}function q(e,t){let n=Pe(e,t);if(!n)return;let r=G(n);return{role:r.role,...r.id===void 0?r.label===void 0?{}:{label:r.label}:{id:r.id}}}function Yt(e,t){return!e&&!t?!0:!e||!t?!1:ne(e,t)}function Xt(e){let t=e.rect;if(t)return{x:t.x,y:t.y,width:t.width,height:t.height}}function Zt(e){let{nodes:t,byIndex:n,node:r,identity:i,ancestry:a,sibling:o,scrollRegion:s}=e,c=_e(t,n,i,a),l=c.filter(e=>K(t,e)===o),u=c.length>0?c.filter(e=>Yt(q(e,n),s)):void 0,d=u?Qt(u):[];return{identitySet:c,siblingMatches:l,regionMembers:u,orderedRegion:d,viewportOrder:Math.max(d.findIndex(e=>e.index===r.index),0)}}function Qt(e){return e.map((e,t)=>({node:e,documentOrder:t,center:Ae(e.rect)})).sort((e,t)=>!e.center&&!t.center?e.documentOrder-t.documentOrder:e.center?t.center?e.center.y===t.center.y?e.center.x===t.center.x?e.documentOrder-t.documentOrder:e.center.x-t.center.x:e.center.y-t.center.y:-1:1).map(e=>e.node)}function $t(e){let{node:t,domain:n}=e,r=t.ref,i=n.identitySet.map(e=>e.ref);return Le({winnerRef:r,matchedRefs:i,identitySetRefs:i,siblingMatchRefs:n.siblingMatches.map(e=>e.ref),regionMemberRefs:n.regionMembers?.map(e=>e.ref),viewportCandidateRef:n.orderedRegion[n.viewportOrder]?.ref}).outcome}let J;async function en(){if(J)return J;let{createAppleSessionObservation:e}=await import(`./session-observation.js`),{listLocalDeviceInventory:t,shouldPropagateDeviceInventoryProbeError:n}=await import(`./device-inventory-context.js`).then(e=>e.t);return J??=e({listLocalDevices:t,shouldPropagateProbeError:n}),J}const tn=Object.freeze({async observeRunnerSession(e){return(await en()).observeRunnerSession(e)},async resolveSoleForegroundApp(e){return(await en()).resolveSoleForegroundApp(e)}});async function nn(e,t,n,r){let{queryAppleRunnerSelector:i}=await import(`./runner-operations-facade.js`);return await i(e,t,n,r)}function rn(e,t){return a(`UNSUPPORTED_OPERATION`,`${e} is not supported on this device`,{reason:t.reason},t.hint?{hint:t.hint}:void 0)}async function Y(e){let t=await on(e.inspectFacts)(e.device);for(let n of e.required){let r=t.operations[n];if(!r.available)return{type:`response`,response:e.unavailableResponse?e.unavailableResponse(r):rn(e.command,r)}}return{type:`admitted`,bind:sn(e.bindDevice)}}async function X(e){let t=await Y({...e,required:e.use.required});if(t.type===`response`)return t;let n=await t.bind(e.device,e.use);return e.readiness&&await Me(n),{type:`runtime`,runtime:n}}async function an(e,t){let n=await X(e);if(n.type===`response`)return{ok:!1,response:n.response};let r=n.runtime;return{ok:!0,execute:async({dispatchContext:e})=>await t(r,e)}}function on(e){if(e)return e;throw new t(`COMMAND_FAILED`,`Device runtime facts inspection is unavailable.`,{reason:`runtime-gateway-missing`})}function sn(e){if(e)return e;throw new t(`COMMAND_FAILED`,`Device runtime binding is unavailable.`,{reason:`runtime-gateway-missing`})}function cn(t){let{flags:n,logPath:r,meta:a,session:o,snapshotScope:s}=t,{appBundleId:c,trace:l,surface:u}=o??{},d=t.context??D(r??``,n,c,l?.outPath,a?.requestId,a);return{options:{appBundleId:c,...e(n,i),scope:s,includeRects:t.includeRects,surface:u},execution:Z(d),...t.signal===void 0?{}:{signal:t.signal}}}function Z(e){return{requestId:e.requestId,verbose:e.verbose,logPath:e.logPath,traceLogPath:e.traceLogPath,iosXctestrunFile:e.iosXctestrunFile,iosXctestDerivedDataPath:e.iosXctestDerivedDataPath,iosXctestEnvDir:e.iosXctestEnvDir,runnerLeaseContext:e.runnerLeaseContext}}function ln(e){let t=Se(e);return{...t,capture:Te(t),selectors:we(t),interactions:xe(t)}}async function un(e){let t=await(await Be().resolve(e.device,e.runnerContext)).snapshot(e.options);if(!(`stage`in t))return t;let{presentIosSnapshotAcquisition:n}=await import(`./ios-snapshot-runtime.js`);return await n(t,e.options)}function dn(e){let t=e?e.textEntryReadiness:void 0,n=gn(t)?{textEntryReadiness:t}:{},r=fn(e);return r?{...n,...r}:n}function fn(e){if(!pn(e))return null;let t=mn(e.target);return t?{verification:`unconfirmed`,requested:e.requested,before:e.before,after:e.after,target:t}:null}function pn(e){return!!(e&&e.verification===`unconfirmed`&&typeof e.requested==`string`&&Q(e.before)&&Q(e.after))}function mn(e){if(!vn(e)||!hn(e))return null;let t=_n(e.rect);return t?{resourceId:e.resourceId,className:e.className,packageName:e.packageName,rect:t}:null}function hn(e){return Q(e.resourceId)&&Q(e.className)&&Q(e.packageName)}function gn(e){return typeof e==`string`&&Fe.includes(e)}function Q(e){return e===null||typeof e==`string`}function _n(e){return!vn(e)||![e.x,e.y,e.width,e.height].every(e=>typeof e==`number`)?null:e}function vn(e){return!!e&&typeof e==`object`}async function yn(e){let t={device:e.device,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice},n=te(e.command,e.requiresCapture),r=await Y({command:e.command,required:n.use.required,...e.unavailableResponse?{unavailableResponse:e.unavailableResponse}:{},...t});if(r.type===`response`)return{ok:!1,response:r.response};let i=r.bind;switch(n.kind){case`tap-point`:return{ok:!0,runtime:{kind:`tap`,captured:!1,runtime:await i(e.device,oe)}};case`captured-tap`:return{ok:!0,runtime:{kind:`tap`,captured:!0,runtime:await i(e.device,ue)}};case`long-press-point`:return{ok:!0,runtime:{kind:`long-press`,captured:!1,runtime:await i(e.device,ie)}};case`captured-long-press`:return{ok:!0,runtime:{kind:`long-press`,captured:!0,runtime:await i(e.device,me)}};case`hover-point`:return{ok:!0,runtime:{kind:`hover`,captured:!1,runtime:await i(e.device,he)}};case`captured-hover`:return{ok:!0,runtime:{kind:`hover`,captured:!0,runtime:await i(e.device,fe)}};case`fill-point`:return{ok:!0,runtime:{kind:`fill`,captured:!1,runtime:await i(e.device,de)}};case`captured-fill`:return{ok:!0,runtime:{kind:`fill`,captured:!0,runtime:await i(e.device,le)}}}}function bn(e,t){let n={execution:Z(t),appBundleId:t.appBundleId},r=e.captured?En(e.runtime):void 0;switch(e.kind){case`tap`:return xn(e,t,n,r);case`long-press`:return Sn(e,n,r);case`hover`:return Cn(e,n,r);case`fill`:return wn(e,t,n,r)}}function xn(e,t,n,r){let i=e.captured?e.runtime.operations.tapRef:void 0,a=e.captured?e.runtime.operations.tapElementSelector:void 0;return Object.freeze({captureSnapshot:r,tapPoint:async(r,i={})=>{let a=Dn(i,t),o=await e.runtime.operations.tapPoint({point:r,options:a,...n});return{x:r.x,y:r.y,count:a.count,intervalMs:a.intervalMs,holdMs:a.holdMs,jitterPx:a.jitterPx,doubleTap:a.doubleTap,...a.button===`primary`?{}:{button:a.button},...o??{},...g(An(r,a.button))}},tapRef:i?async e=>await i({ref:e,...n}):void 0,tapElementSelector:e.captured&&a?async t=>{let r=await e.runtime.operations.tapElementSelector?.({selector:t,...n}),i=r?.maestroNonHittableCoordinateFallbackUsed===!0;return{selector:t.raw,...r??{},...g(i?`tapped via non-hittable coordinate fallback`:`Tapped ${t.raw}`)}}:void 0})}function Sn(e,t,n){return Object.freeze({captureSnapshot:n,longPressPoint:async(n,r)=>{let i=await e.runtime.operations.longPressPoint({point:n,durationMs:r,...t});return{x:n.x,y:n.y,durationMs:r,...i??{},...g(`Long pressed (${n.x}, ${n.y})`)}}})}function Cn(e,t,n){let r=e.captured?e.runtime.operations.hoverRef:void 0;return Object.freeze({captureSnapshot:n,hoverPoint:async n=>{let r=await e.runtime.operations.hoverPoint({point:n,...t});return{x:n.x,y:n.y,...r??{},...g(`Hovered (${n.x}, ${n.y})`)}},hoverRef:r?async e=>await r({ref:e,...t}):void 0})}function wn(e,t,n,r){let i=e.captured?e.runtime.operations.fillRef:void 0,a=e=>h(e??t.delayMs??0,`delay-ms`,0,1e4);return Object.freeze({captureSnapshot:r,fillPoint:async(t,r,i={})=>{let o=a(i.delayMs),s=await e.runtime.operations.fillPoint({point:t,text:r,delayMs:o,allowNonHittableCoordinateFallback:i.allowNonHittableCoordinateFallback===!0,...n});return{x:t.x,y:t.y,text:r,delayMs:o,...Tn(s)?{maestroNonHittableCoordinateFallbackUsed:!0}:{},...dn(s),...g(`Filled ${Array.from(r).length} chars`)}},fillRef:i?async(e,t,r={})=>await i({ref:e,text:t,delayMs:a(r.delayMs),...n}):void 0})}function Tn(e){return typeof e==`object`&&!!e&&`maestroNonHittableCoordinateFallbackUsed`in e&&e.maestroNonHittableCoordinateFallbackUsed===!0}function En(e){return async t=>await e.operations.captureSnapshot(t)}function Dn(e,t){let n=On(e,t);return kn(n),{button:e.button??De(t),...n,surface:e.surface??t.surface}}function On(e,t){return{count:$(e.count,t.count,1,`count`,1,200),intervalMs:$(e.intervalMs,t.intervalMs,0,`interval-ms`,0,1e4),holdMs:$(e.holdMs,t.holdMs,0,`hold-ms`,0,1e4),jitterPx:$(e.jitterPx,t.jitterPx,0,`jitter-px`,0,100),doubleTap:e.doubleTap??t.doubleTap??!1}}function $(e,t,n,r,i,a){return h(e??t??n,r,i,a)}function kn(e){if(e.doubleTap&&e.holdMs>0)throw new t(`INVALID_ARGS`,`double-tap cannot be combined with hold-ms`);if(e.doubleTap&&e.jitterPx>0)throw new t(`INVALID_ARGS`,`double-tap cannot be combined with jitter-px`)}function An(e,t){return t===`primary`?`Pressed (${e.x}, ${e.y})`:`${t===`secondary`?`Right`:`Middle`} clicked (${e.x}, ${e.y})`}function jn(e){let{inspectFacts:t,bindDevice:n}=e;if(!t||!n)return;let r=new Map;return async({device:e,point:i,context:a})=>{let o=r.get(e.id);o||(o=yn({device:e,command:`press`,requiresCapture:!1,inspectFacts:t,bindDevice:n}),r.set(e.id,o));let s=await o;if(!s.ok)return!1;let c=bn(s.runtime,a);return c.tapPoint?(await c.tapPoint(i),!0):!1}}async function Mn(e){let t=await It({session:e.session,device:e.device,logPath:e.logPath,interactiveOnly:e.flags?.snapshotInteractiveOnly===!0,androidFreshnessMode:e.androidFreshnessMode,capture:()=>Pn(e),retryTap:jn(e)});if(t)return t;let n=await Pn(e);return E(e.session),{snapshot:n.snapshot,...n.annotations}}async function Nn(t){if(t.captureData)return await t.captureData();let{device:n,session:r,logPath:a}=t,o=D(a,Fn(t),r?.appBundleId,r?.trace?.outPath);return await un({device:n,runnerContext:{requestId:o.requestId,signal:t.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:t.signal,...e(o,i),includeRects:t.includeRects,surface:r?.surface}})}async function Pn(e){let t=Date.now(),n=await Nn(e);c(e.session,{durationMs:Date.now()-t,backend:n.backend,platform:u(e.device)});let r=s(n),i=l(n,je(n,Fn(e)));return r.androidSnapshot?.systemSurfaceOnly===!0&&(i.systemSurfaceOnly=!0),{data:n,snapshot:i,annotations:r}}function Fn(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function In(e,t){if(!e||!e.trim().startsWith(`@`))return{ok:!0,scope:e};if(!t?.snapshot)return a(`INVALID_ARGS`,`Ref scope requires an existing snapshot in session.`);let i=n(e.trim());if(!i)return a(`INVALID_ARGS`,`Invalid ref scope: ${e}`);let o=[t.snapshot,...t.snapshotScopeSource?[t.snapshotScopeSource]:[]],s=!1,c;for(let e of o){let t=r(e.nodes,i);if(t&&(s=!0,c=be(t,e.nodes),c))break}return s?c?{ok:!0,scope:c}:a(`COMMAND_FAILED`,`Ref ${e} has no label to scope by`,{reason:_.refUnlabeled,ref:i}):a(`COMMAND_FAILED`,`Ref ${e} not found`,{reason:_.refNotFound,ref:i},{hint:re})}function Ln(e,t,n={}){if(!e)return;let r=Ke(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 Rn(e){return{get:t=>t===e.sessionName?Ln(e.getSession(),e.sessionName,e.recordOptions):void 0,set:t=>{if(t.name!==e.sessionName){v({level:`warn`,phase:`runtime_session_write_skipped`,data:{expected:e.sessionName,received:t.name}});return}e.setRecord(t)}}}function zn(e,t){e.snapshot!==t&&(e.snapshotGeneration=Vn(e.snapshotGeneration)),e.snapshot=t,e.snapshotScopeSource=void 0,t.comparisonSafe===!0&&(e.lastComparisonSafeSnapshot=t)}function Bn(e,t){e.snapshotScopeSource=t.scopeSource,e.snapshotGeneration=t.keptCurrentSnapshot?t.previousGeneration:Vn(t.previousGeneration)}function Vn(e){return e===void 0?Ie(1e5,1e6):e+1}function Hn(e){let t=e.startsWith(`@`)?e.slice(1):e,n=t.indexOf(`~`);return n===-1?t:t.slice(0,n)}function Un(e,t){let n=new Set;for(let e of t){let t=Hn(e);t.length>0&&n.add(t)}n.size!==0&&Qe(e,n)}function Wn(e,t){if(t?.diff)return Un(e,Gn(t)),e.snapshotGeneration}function Gn(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 Kn(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 qn(e){let{session:t,ref:n,mintedGeneration:r}=e;if(t&&w(t)===`expired`)return`The UI may have changed since these refs were issued, so they no longer represent current device state. Take a new snapshot before relying on or interacting with them.`;if(r!==void 0){let e=t?x(t)??0:0;if(r!==e)return Kn({ref:n,mintedGeneration:r,currentFrameEpoch:e})}}export{M as A,qe as B,K as C,Ft as D,Yt as E,j as F,b as G,Je as H,B as I,Le as J,w as K,D as L,xt as M,z as N,Mt as O,N as P,T as R,q as S,Qt as T,et as U,Ye as V,S as W,an as _,Bn as a,nn as b,Nn as c,yn as d,ln as f,X as g,Y as h,zn as i,L as j,I as k,In as l,Z as m,Un as n,Rn as o,cn as p,ze as q,qn as r,Mn as s,Wn as t,bn as u,rn as v,Gt as w,G as x,tn as y,Ze as z};