agent-device 0.21.19 → 0.21.21

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 (369) hide show
  1. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.19.apk → agent-device-android-ime-helper-0.21.21.apk} +0 -0
  2. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.21.apk.sha256 +1 -0
  3. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.19.manifest.json → agent-device-android-ime-helper-0.21.21.manifest.json} +4 -4
  4. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.21.apk +0 -0
  5. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.21.apk.sha256 +1 -0
  6. package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.19.manifest.json → agent-device-android-snapshot-helper-0.21.21.manifest.json} +6 -6
  7. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/AppWindowScreenshot.swift +73 -0
  8. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/BackgroundInteraction.swift +557 -0
  9. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/GhostCursor.swift +141 -0
  10. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/SnapshotTraversal.swift +107 -3
  11. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/main.swift +136 -22
  12. package/apple/macos-helper/Tests/AgentDeviceMacOSHelperTests/BackgroundInteractionTests.swift +88 -0
  13. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +133 -4
  14. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.h +10 -2
  15. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.m +36 -9
  16. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +28 -0
  17. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +1 -14
  18. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Interaction.swift +14 -16
  19. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +67 -14
  20. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedCommitDeadline.swift +6 -1
  21. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedGesturePolicy.swift +7 -2
  22. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift +21 -7
  23. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +121 -17
  24. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +179 -6
  25. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryConfirmation.swift +119 -0
  26. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +8 -1
  27. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryReadiness.swift +23 -11
  28. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextInputProbe.swift +59 -6
  29. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +112 -23
  30. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TypeExecution.swift +25 -12
  31. package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/RecordingExportSupport.swift +6 -1
  32. package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-overlay.swift +43 -13
  33. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotModels.swift +20 -5
  34. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationProjection.swift +2 -15
  35. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFold.swift +10 -25
  36. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFoldProjection.swift +1 -18
  37. package/dist/src/adapter.js +1 -1
  38. package/dist/src/adb-executor.js +2 -2
  39. package/dist/src/adb-failure.js +1 -1
  40. package/dist/src/adb-transport.js +1 -1
  41. package/dist/src/agent-browser-lifecycle.js +1 -1
  42. package/dist/src/agent-browser-process-record.js +1 -1
  43. package/dist/src/agent-browser-provider.js +1 -1
  44. package/dist/src/agent-browser-tool.js +1 -1
  45. package/dist/src/agent-device-client.js +2 -2
  46. package/dist/src/ai-sdk.js +1 -1
  47. package/dist/src/alert-runtime.js +1 -1
  48. package/dist/src/alert.js +1 -0
  49. package/dist/src/android-adb.d.ts +12 -0
  50. package/dist/src/android-input-ownership.js +1 -1
  51. package/dist/src/app-backend.js +1 -0
  52. package/dist/src/app-catalog.js +1 -1
  53. package/dist/src/app-deployment-resolution.js +1 -1
  54. package/dist/src/app-inventory.js +1 -1
  55. package/dist/src/app-launch.js +2 -2
  56. package/dist/src/app-lifecycle.js +2 -2
  57. package/dist/src/app-lifecycle2.js +1 -1
  58. package/dist/src/app-log-files.js +1 -1
  59. package/dist/src/app-log-reconnect.js +1 -1
  60. package/dist/src/app-log-runtime2.js +3 -3
  61. package/dist/src/app-log-session-resource.js +1 -0
  62. package/dist/src/app-resolution.js +2 -2
  63. package/dist/src/apple-runner-platform.js +1 -1
  64. package/dist/src/application-lifecycle-interaction.js +1 -1
  65. package/dist/src/archive.js +2 -2
  66. package/dist/src/artifact-download.js +1 -1
  67. package/dist/src/auth-session.js +1 -1
  68. package/dist/src/auth.js +1 -1
  69. package/dist/src/back-mode.js +1 -1
  70. package/dist/src/backend-snapshot-options.js +1 -1
  71. package/dist/src/boot-diagnostics.js +1 -1
  72. package/dist/src/browser-launch.js +1 -1
  73. package/dist/src/cache.js +1 -1
  74. package/dist/src/capabilities.js +1 -1
  75. package/dist/src/capture.js +1 -1
  76. package/dist/src/cli-config.js +1 -1
  77. package/dist/src/cli-help.js +317 -323
  78. package/dist/src/cli-runner.js +1 -1
  79. package/dist/src/cli.js +4 -4
  80. package/dist/src/click-button.js +1 -1
  81. package/dist/src/client-metro-companion.js +1 -1
  82. package/dist/src/client-metro.js +1 -1
  83. package/dist/src/client-options.js +3 -0
  84. package/dist/src/client-types.d.ts +101 -6
  85. package/dist/src/clipboard-shell-response.js +1 -1
  86. package/dist/src/{scroll-command.d.ts → cloud-artifacts.d.ts} +249 -240
  87. package/dist/src/code-signature-cache.js +1 -1
  88. package/dist/src/code-signature.js +1 -1
  89. package/dist/src/command-schema.js +3 -3
  90. package/dist/src/command-tools.js +2 -2
  91. package/dist/src/command.js +1 -1
  92. package/dist/src/config.js +1 -1
  93. package/dist/src/connection-runtime.js +1 -1
  94. package/dist/src/connection.js +5 -5
  95. package/dist/src/contracts.d.ts +1 -1
  96. package/dist/src/contracts.js +1 -1
  97. package/dist/src/daemon-artifacts.js +1 -0
  98. package/dist/src/daemon-client-lease-beat.js +1 -1
  99. package/dist/src/daemon-client-lifecycle.js +1 -1
  100. package/dist/src/daemon-client-liveness-probe.js +1 -0
  101. package/dist/src/daemon-client-transport.js +1 -1
  102. package/dist/src/daemon-http.js +1 -0
  103. package/dist/src/daemon-policy-file.js +1 -1
  104. package/dist/src/daemon-registration-owner.js +1 -0
  105. package/dist/src/daemon-registration.js +1 -1
  106. package/dist/src/daemon-resolution.js +1 -1
  107. package/dist/src/daemon-shutdown-report.js +1 -1
  108. package/dist/src/daemon.js +2 -2
  109. package/dist/src/debug-symbols-facade.js +3 -3
  110. package/dist/src/device-claim-inspection.js +1 -1
  111. package/dist/src/device-claim-rule.js +1 -1
  112. package/dist/src/device-inventory-context.js +1 -1
  113. package/dist/src/device-readiness-runtime.js +1 -1
  114. package/dist/src/device-release.js +1 -1
  115. package/dist/src/device-rotation.js +1 -1
  116. package/dist/src/device-selection-resolver.js +1 -1
  117. package/dist/src/device-session.js +1 -1
  118. package/dist/src/device-shell.js +1 -1
  119. package/dist/src/device.js +1 -1
  120. package/dist/src/device2.js +1 -3
  121. package/dist/src/device3.js +3 -0
  122. package/dist/src/devicectl.js +1 -1
  123. package/dist/src/diagnostics.js +3 -3
  124. package/dist/src/dispatch-resolve.js +4 -1
  125. package/dist/src/display-inventory.js +1 -1
  126. package/dist/src/doctor-facade.js +1 -1
  127. package/dist/src/doctor2.js +1 -1
  128. package/dist/src/durable-capture-resource.js +1 -0
  129. package/dist/src/engine-eval-script.js +1 -1
  130. package/dist/src/error.js +1 -1
  131. package/dist/src/exec.js +1 -1
  132. package/dist/src/file.js +1 -1
  133. package/dist/src/find.js +1 -1
  134. package/dist/src/generic-settle.js +1 -1
  135. package/dist/src/generic.js +1 -1
  136. package/dist/src/gesture-admission.js +1 -1
  137. package/dist/src/gesture-plan.js +1 -1
  138. package/dist/src/gesture-runtime.js +1 -1
  139. package/dist/src/harmonyos.js +1 -1
  140. package/dist/src/hdc.js +1 -1
  141. package/dist/src/helper.js +2 -2
  142. package/dist/src/host-file.js +1 -1
  143. package/dist/src/host.js +1 -1
  144. package/dist/src/human-control-contract.js +1 -1
  145. package/dist/src/human-control.js +1 -1
  146. package/dist/src/index.d.ts +2 -2
  147. package/dist/src/index.js +1 -1
  148. package/dist/src/input-actions.js +1 -1
  149. package/dist/src/input-actions2.js +2 -2
  150. package/dist/src/install-artifact-facade.js +1 -1
  151. package/dist/src/install-source-network-transport.js +1 -1
  152. package/dist/src/install-source.d.ts +5 -0
  153. package/dist/src/install-source2.js +1 -1
  154. package/dist/src/instance-client.js +1 -0
  155. package/dist/src/interaction-positionals.js +1 -1
  156. package/dist/src/interaction-ref-policy.js +1 -1
  157. package/dist/src/interaction.js +1 -1
  158. package/dist/src/interaction2.js +1 -1
  159. package/dist/src/interactor-operation-binding.js +1 -1
  160. package/dist/src/interactor.js +5 -5
  161. package/dist/src/interactor2.js +1 -1
  162. package/dist/src/interactors.js +1 -1
  163. package/dist/src/internal/bin.js +1 -1
  164. package/dist/src/internal/daemon.js +1 -2
  165. package/dist/src/internal/png-worker.js +1 -1
  166. package/dist/src/internal/run-script-http-child.js +1 -1
  167. package/dist/src/inventory.js +4 -4
  168. package/dist/src/inventory2.js +1 -1
  169. package/dist/src/inventory3.js +1 -1
  170. package/dist/src/inventory5.js +1 -1
  171. package/dist/src/ios-client.js +4 -30
  172. package/dist/src/ios-settings.js +1 -0
  173. package/dist/src/ios-snapshot-engine.js +1 -1
  174. package/dist/src/ios-snapshot-runtime.js +1 -1
  175. package/dist/src/launch-confirmation.js +1 -0
  176. package/dist/src/lease-context.js +1 -1
  177. package/dist/src/lease-registry-scope.js +1 -0
  178. package/dist/src/lease-scope.js +1 -1
  179. package/dist/src/lease.js +1 -1
  180. package/dist/src/legacy-xctest-device-set.js +1 -1
  181. package/dist/src/limrun-download-file.js +1 -1
  182. package/dist/src/limrun-runtime-dependencies.js +1 -1
  183. package/dist/src/limrun.d.ts +78 -44
  184. package/dist/src/limrun.js +1 -1
  185. package/dist/src/linux.js +1 -1
  186. package/dist/src/load.js +1 -0
  187. package/dist/src/location-coordinates.js +1 -1
  188. package/dist/src/macos-facade.js +1 -1
  189. package/dist/src/managed-device-scope.js +1 -1
  190. package/dist/src/mechanics.js +16 -16
  191. package/dist/src/observation.js +1 -1
  192. package/dist/src/observe-until.js +1 -1
  193. package/dist/src/overlay.js +2 -2
  194. package/dist/src/owner-identity.js +3 -3
  195. package/dist/src/path-resolution.js +1 -1
  196. package/dist/src/perf-facade.js +1 -1
  197. package/dist/src/perf-runtime-operation-builder.js +1 -1
  198. package/dist/src/perf-runtime-plan.js +1 -1
  199. package/dist/src/perf-target.js +1 -1
  200. package/dist/src/perf.js +1 -1
  201. package/dist/src/physical-device-control.js +1 -1
  202. package/dist/src/platform-request-scope.js +1 -1
  203. package/dist/src/platform-runtime-android-adb-host.js +1 -1
  204. package/dist/src/platform-runtime-app-log-process.js +1 -1
  205. package/dist/src/platform-runtime-host.js +1 -1
  206. package/dist/src/platform-runtime-managed-owner.js +1 -1
  207. package/dist/src/platform-runtime-open-target.js +1 -1
  208. package/dist/src/platform-runtime-operation-host.js +2 -2
  209. package/dist/src/platform-runtime-runtime-hints.js +2 -2
  210. package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
  211. package/dist/src/platform-runtime-screen-recording-apple-runner-transport.js +1 -1
  212. package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
  213. package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
  214. package/dist/src/platform-runtime-screen-recording-output-host.js +1 -1
  215. package/dist/src/platform-runtime-screen-recording-process-host.js +1 -1
  216. package/dist/src/platform-runtime-unavailable.js +1 -1
  217. package/dist/src/platform-runtime.js +1 -1
  218. package/dist/src/platform-runtime2.js +1 -1
  219. package/dist/src/plugins.d.ts +9 -0
  220. package/dist/src/plugins.js +1 -0
  221. package/dist/src/plugins2.js +2 -0
  222. package/dist/src/png-crop-bytes.js +1 -1
  223. package/dist/src/png-size.js +1 -1
  224. package/dist/src/png-worker-client.js +1 -1
  225. package/dist/src/png.js +1 -1
  226. package/dist/src/prepare-kind.js +1 -1
  227. package/dist/src/process.js +1 -1
  228. package/dist/src/project-runtime.js +1 -1
  229. package/dist/src/provider-credential-fingerprint.js +1 -0
  230. package/dist/src/provider-device-admission.js +1 -1
  231. package/dist/src/provider-device-runtimes.js +1 -0
  232. package/dist/src/provider-limrun-credentials.js +1 -0
  233. package/dist/src/provider-profile-fields.js +1 -0
  234. package/dist/src/provider-session-ownership.js +2 -2
  235. package/dist/src/provider-webdriver.js +2 -1
  236. package/dist/src/providers.js +1 -1
  237. package/dist/src/proxy.js +1 -1
  238. package/dist/src/quality-warnings.js +1 -1
  239. package/dist/src/react-native.js +1 -1
  240. package/dist/src/record-runtime.js +1 -1
  241. package/dist/src/record-trace.js +1 -1
  242. package/dist/src/recording.js +1 -1
  243. package/dist/src/rect-center.js +1 -1
  244. package/dist/src/register-builtins.js +1 -1
  245. package/dist/src/registry.js +52 -36
  246. package/dist/src/remote-config2.js +1 -1
  247. package/dist/src/replay-divergence.js +1 -1
  248. package/dist/src/replay.js +2 -2
  249. package/dist/src/reporting.js +5 -5
  250. package/dist/src/request-admission.js +1 -1
  251. package/dist/src/request-cancel.js +1 -1
  252. package/dist/src/request-cancellation.js +1 -1
  253. package/dist/src/request-runtime-binding.js +1 -1
  254. package/dist/src/result-serialization.js +1 -1
  255. package/dist/src/retry.js +1 -1
  256. package/dist/src/runner-artifact-manifest.js +1 -1
  257. package/dist/src/runner-cache-metadata.js +3 -3
  258. package/dist/src/runner-client.js +1 -1
  259. package/dist/src/runner-dev-tools-security.js +1 -1
  260. package/dist/src/runner-device-readiness.js +1 -1
  261. package/dist/src/runner-disposal.js +1 -1
  262. package/dist/src/runner-error-classification.js +2 -2
  263. package/dist/src/runner-exchange.js +1 -1
  264. package/dist/src/runner-operations-facade.js +1 -1
  265. package/dist/src/runner-session-types.js +1 -1
  266. package/dist/src/runner-start-budget.js +1 -1
  267. package/dist/src/runner.js +1 -1
  268. package/dist/src/runtime-admission.js +1 -1
  269. package/dist/src/runtime-transport-hints.js +1 -1
  270. package/dist/src/runtime.js +1 -1
  271. package/dist/src/runtime10.js +2 -2
  272. package/dist/src/runtime2.js +3 -3
  273. package/dist/src/runtime3.js +1 -1
  274. package/dist/src/runtime4.js +5 -5
  275. package/dist/src/runtime5.js +1 -1
  276. package/dist/src/runtime6.js +1 -1
  277. package/dist/src/runtime7.js +1 -1
  278. package/dist/src/runtime8.js +1 -1
  279. package/dist/src/runtime9.js +1 -1
  280. package/dist/src/screen-recording-admission-ledger.js +1 -1
  281. package/dist/src/screen-recording-completion.js +1 -1
  282. package/dist/src/screen-recording-options.js +1 -1
  283. package/dist/src/screen-recording-resource-recovery.js +1 -1
  284. package/dist/src/screen-recording-transport.js +1 -1
  285. package/dist/src/screenshot-density.js +1 -1
  286. package/dist/src/screenshot-image.js +1 -1
  287. package/dist/src/screenshot-result.js +1 -1
  288. package/dist/src/screenshot-runtime.js +1 -1
  289. package/dist/src/screenshot.js +1 -1
  290. package/dist/src/screenshot3.js +1 -1
  291. package/dist/src/script.js +1 -1
  292. package/dist/src/scroll-command.js +1 -1
  293. package/dist/src/scroll-gesture.js +1 -1
  294. package/dist/src/sdk-batch-runner.js +2 -2
  295. package/dist/src/sdk-batch.js +2 -2
  296. package/dist/src/sdk-contracts.d.ts +47 -2
  297. package/dist/src/sdk-contracts.js +2 -2
  298. package/dist/src/sdk-device.js +1 -1
  299. package/dist/src/sdk-io.js +1 -1
  300. package/dist/src/sdk-remote-config.js +1 -1
  301. package/dist/src/sdk-selectors.d.ts +37 -8
  302. package/dist/src/selection.js +0 -0
  303. package/dist/src/selector-runtime.js +1 -1
  304. package/dist/src/selectors.d.ts +2 -2
  305. package/dist/src/selectors.js +1 -1
  306. package/dist/src/server.js +1 -1
  307. package/dist/src/session-allocation.js +1 -1
  308. package/dist/src/session-artifact-paths.js +1 -1
  309. package/dist/src/session-repair-tombstone.js +1 -1
  310. package/dist/src/session-routing.js +1 -1
  311. package/dist/src/session-runtime-admission.js +1 -1
  312. package/dist/src/session-snapshot.js +1 -1
  313. package/dist/src/session-stream.js +27 -0
  314. package/dist/src/session.js +1 -1
  315. package/dist/src/session2.js +5 -5
  316. package/dist/src/settings.js +1 -1
  317. package/dist/src/settings2.js +1 -1
  318. package/dist/src/simctl-settings-facade.js +1 -0
  319. package/dist/src/simctl-settings.js +1 -0
  320. package/dist/src/simctl.js +1 -1
  321. package/dist/src/simulator-boot.js +1 -1
  322. package/dist/src/simulator.js +1 -1
  323. package/dist/src/snapshot-diagnostics.js +1 -1
  324. package/dist/src/snapshot-runtime-binding.js +1 -1
  325. package/dist/src/snapshot-runtime.js +1 -1
  326. package/dist/src/snapshot-state.js +1 -1
  327. package/dist/src/snapshot2.js +1 -1
  328. package/dist/src/snapshot3.js +1 -1
  329. package/dist/src/snapshot4.js +1 -1
  330. package/dist/src/src.js +1 -1
  331. package/dist/src/src7.js +1 -1
  332. package/dist/src/src8.js +2 -2
  333. package/dist/src/store.js +1 -0
  334. package/dist/src/string-enum.js +1 -1
  335. package/dist/src/surface-snapshot.js +1 -1
  336. package/dist/src/takeover.js +1 -1
  337. package/dist/src/target-evidence.js +1 -1
  338. package/dist/src/telemetry.js +1 -1
  339. package/dist/src/text-entry-focus.js +1 -1
  340. package/dist/src/tool-provider.js +3 -3
  341. package/dist/src/tool-provider2.js +1 -1
  342. package/dist/src/tool-provider3.js +1 -1
  343. package/dist/src/toolchain-probe.js +2 -2
  344. package/dist/src/touch-runtime.js +1 -1
  345. package/dist/src/touch-runtime2.js +1 -1
  346. package/dist/src/transport.js +2 -2
  347. package/dist/src/tv-remote.js +1 -1
  348. package/dist/src/type-text-runtime.js +1 -1
  349. package/dist/src/update-check.js +1 -1
  350. package/dist/src/vars.js +1 -1
  351. package/dist/src/verified-file.js +1 -1
  352. package/dist/src/version.js +1 -1
  353. package/dist/src/video.js +1 -1
  354. package/dist/src/viewport.js +1 -1
  355. package/dist/src/web.js +1 -1
  356. package/dist/src/web2.js +1 -1
  357. package/dist/src/webdriver-source.js +1 -1
  358. package/package.json +5 -1
  359. package/server.json +2 -2
  360. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.19.apk.sha256 +0 -1
  361. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.19.apk +0 -0
  362. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.19.apk.sha256 +0 -1
  363. package/dist/src/api.js +0 -3
  364. package/dist/src/daemon-process.js +0 -1
  365. package/dist/src/multitouch-support.js +0 -1
  366. package/dist/src/parameterized-recorded-fill.js +0 -1
  367. package/dist/src/runner-startup-transport.js +0 -1
  368. package/dist/src/runner-xctestrun.js +0 -1
  369. package/dist/src/session-store.js +0 -4
@@ -0,0 +1 @@
1
+ import{$ as e,P as t}from"./sdk-contracts.js";async function n(e,n,a,o,s){let c=n.toLowerCase();switch(c){case`appearance`:case`permission`:case`location`:return await e.dependencies.ios.applySimctlSetting({runSimctl:t=>r(e,t),udid:`booted`,setting:c,state:a,appBundleId:o===void 0?void 0:await e.dependencies.ios.resolveAppAlias(o),options:s});case`clear-app-state`:return await i(e,a,o);default:throw new t(`UNSUPPORTED_OPERATION`,`Limrun iOS direct sessions support appearance, permission, location, and clear-app-state settings, not ${n}.`,{command:`settings`})}}async function r(e,n){let r=await e.client.simctl(n).wait();if(r.code!==0)throw new t(`COMMAND_FAILED`,`Limrun iOS simctl exited with code ${r.code}`,{args:n,exitCode:r.code,stdout:r.stdout,stderr:r.stderr});return r}async function i(n,r,i){if(r.toLowerCase()!==`clear`)throw new t(`INVALID_ARGS`,`settings clear-app-state only supports clear.`);if(!i)throw new t(`INVALID_ARGS`,`settings clear-app-state requires an app id or an active app session.`,e());let a=await n.dependencies.ios.resolveAppAlias(i);try{await n.client.softReset(a,{strategy:`data`}),await n.client.terminateApp(a)}catch(e){throw e instanceof t?e:new t(`COMMAND_FAILED`,`Limrun iOS could not clear app state.`,{setting:`clear-app-state`,bundleId:a},e)}return{bundleId:a,cleared:!0}}export{n as setLimrunIosSetting};
@@ -1 +1 @@
1
- import{_ as e}from"./sdk-contracts.js";import{$r as t,Jr as n,Lr as r,Nr as i,Qr as a,Xr as o,Yr as s,qr as c}from"./sdk-batch.js";import{n as l,t as u}from"./scroll-indicator.js";import{a as d,i as f,o as p,r as m}from"./react-native-overlay.js";import{t as h}from"./rect-center.js";import{i as g,n as _,t as ee}from"./ios-snapshot-planning.js";import{_ as te,a as v,c as y,d as ne,f as b,g as x,h as re,i as S,l as ie,m as C,n as w,o as T,p as E,r as ae,t as D,u as oe}from"./tree.js";function se(e,t){let n=v(t.sourceNodesByIndex.values());for(let r of e)ce(r,t.sourceNodesByIndex,n)&&C(t.replacements,r,{type:`Cell`})}function ce(e,t,n){return!(r(e.type??``)!==`other`||e.enabled===!1||!e.rect||!de(e.label)||!T(e,t,ue)||!le(e)||oe(e.rect,n))}function le(e){return e.rect?e.rect.height>=44&&e.rect.height<=160&&e.rect.width>=120:!1}function ue(e){let t=r(e.type??``);return t===`scrollview`||t===`scrollarea`}function de(e){let t=e?.trim();return!(!t||/^(toolbar|window|application)$/i.test(t)||t.startsWith(`!,`)||/debugger|fast refresh/i.test(t))}function fe(e,t){let n=new Set;for(let r of e)pe(t.replacements.get(r.index)??r)&&me(r,t.sourceNodesByIndex,t,n);_e(e,t,n)}function pe(e){let t=e.label?.trim();return!!(t&&l(t))}function me(e,t,n,r){let i=!b(e.type)||n.isSuppressed(e),a=u(e.label?.trim()??``,e.value),o=a?ge(e,t):void 0;i&&n.suppressNode(e,o?[o]:[]),o&&a&&Te(n,o,e,a)&&r.add(o.index)}function O(e,t){return typeof e.parentIndex==`number`?t.get(e.parentIndex):void 0}function he(e,t){return e.rect!=null&&t.rect!=null&&k(e.rect,t.rect)}function ge(e,t){if(b(e.type))return null;let n=O(e,t);for(;n&&!b(n.type);){let e=O(n,t);if(!e||!he(n,e))return null;n=e}return n??null}function _e(e,t,n){let r=new Map;for(let i of e){let e=r.get(i.parentIndex??-1),a=e?.clip,o=t.replacements.get(i.index)??i,s=we(o.rect,a),c=ve(o,a,s),l=ye(e,c,o);be(t,i,o,a,s,c,l),r.set(i.index,xe(i,o,a,s,l,n))}}function ve(e,t,n){return!!(t&&s(e.rect)&&!s(n))}function ye(e,t,n){return!!(e?.projectedOut||t&&Ce(n))}function be(e,t,n,r,i,a,o){o||a?e.suppressNode(t,[]):r&&i&&!k(n.rect,i)&&C(e.replacements,t,{rect:i})}function xe(e,t,n,r,i,a){return{projectedOut:i,...Se(e,t,n,r,a)?{clip:r}:n?{clip:n}:{}}}function Se(e,t,n,r,i){return!!(s(r)&&(i.has(e.index)||n!==void 0&&b(t.type)))}function Ce(e){return e.type?.trim().toLowerCase()===`cell`||b(e.type)}function we(e,t){if(!e||!t)return e;let n=Math.max(e.x,t.x),r=Math.max(e.y,t.y),i=Math.min(e.x+e.width,t.x+t.width),a=Math.min(e.y+e.height,t.y+t.height);return{x:n,y:r,width:Math.max(0,i-n),height:Math.max(0,a-r)}}function k(e,t){return!!(e&&e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height)}function Te(e,t,n,r){let i=Ee((e.replacements.get(t.index)??t).rect,n.rect);return te(e.replacements,t,e=>({rect:i??e.rect,hiddenContentAbove:A(e.hiddenContentAbove,r.above),hiddenContentBelow:A(e.hiddenContentBelow,r.below)})),!!i}function A(e,t){return e===!0||t?!0:void 0}function Ee(e,t){if(!(!e||!t)&&!(t.height<=0||t.height>=e.height)&&!(t.y<e.y||t.y>e.y+e.height))return{...e,y:t.y,height:Math.min(t.height,e.y+e.height-t.y)}}function j(e,t){for(let n=0;n<e.length;n+=1){let i=e[n],a=i?.label?.trim();i&&a&&r(i.type??``)===`other`&&t(i,a,n)}}function De(e,t){j(e,(n,r,i)=>{if(!d(r)||!n.rect)return;let a=S(e,i,e=>!!e.rect&&p(e.label?.trim()??``));if(!a?.rect)return;let o=ke(n.rect,a.rect);if(!o)return;let s=Oe(e,i,o);C(t,n,{rect:s}),y(e,i,e=>{d(e.label?.trim()??``)&&C(t,e,{rect:s})})})}function Oe(e,n,r){let i=r;return y(e,n,e=>{let n=e.label?.trim()??``;!e.rect||!d(n)||t(r,e.rect)&&a(e.rect)<a(i)&&(i=e.rect)}),i}function ke(e,t){let n=e.x+e.width,r=t.x+t.width,i={x:t.x,y:e.y,width:n-t.x,height:e.height};if(t.x>e.x&&h(t,i))return{...e,width:t.x-e.x};let a={x:e.x,y:e.y,width:r-e.x,height:e.height};if(r<n&&h(t,a))return{...e,x:r,width:n-r}}function Ae(e,t){j(e,(n,r,i)=>{m(n)&&f(n,M(e,i))&&t.suppressNode(n,M(e,i))})}function M(e,t){let n=[];return y(e,t,e=>{n.push(e)}),n}function je(e,t){let n=v(e),r=n?n.y+n.height:null;if(r!==null)for(let n=0;n<e.length;n+=1){let i=e[n];!i||!Me(i,r)||(t.suppressNode(i,[]),Ne(i,t,r),y(e,n,e=>{t.suppressNode(e,[])}))}}function Me(e,t){return!e.rect||r(e.type??``)!==`keyboard`?!1:e.rect.y>=t}function Ne(e,t,n){let r=typeof e.parentIndex==`number`?t.sourceNodesByIndex.get(e.parentIndex):void 0;for(;r?.rect&&r.rect.y>=n;)t.suppressNode(r,[]),r=typeof r.parentIndex==`number`?t.sourceNodesByIndex.get(r.parentIndex):void 0}function Pe(e,t){for(let n=0;n<e.length;n+=1){let i=e[n];if(!i)continue;if(Fe(i)){N(e,n,i,t);continue}if(!Ie(i))continue;let a=S(e,n,e=>r(e.type??``)===`searchfield`&&e.label===`Search`);a&&(t.suppressNode(i,[a]),Le(i,a,t),N(e,n,a,t))}}function Fe(e){return r(e.type??``)===`searchfield`&&e.label===`Search`}function Ie(e){let t=r(e.type??``);return e.label===`Toolbar`&&(t===`toolbar`||t===`searchfield`)}function N(e,t,n,r){y(e,t,e=>{e.index!==n.index&&Re(e)&&r.suppressNode(e,[n])})}function Le(e,t,n){let r=e;for(;typeof r.parentIndex==`number`;){let e=n.sourceNodesByIndex.get(r.parentIndex);if(!e||e.label!==`Toolbar`)return;n.suppressNode(e,[t]),r=e}}function Re(e){let t=r(e.type??``);return t===`button`?!1:t===`image`||e.label===`Search`}function ze(e,t){for(let n=0;n<e.length;n+=1){let r=e[n],i=r?.label?.trim();!r||t.isSuppressed(r)||!i||Be(e,n,r,i,t)}}function Be(e,t,n,i,a){let o=r(n.type??``);if(o===`statictext`||o===`link`){P(e,t,i,n,a);return}if(o!==`other`)return;let s=Ve(e,t,i);if(s){a.suppressNode(n,[s]);return}P(e,t,i,n,a)}function Ve(e,t,n){return S(e,t,e=>{let t=r(e.type??``);return(t===`link`||t===`searchfield`||b(e.type))&&e.label?.trim()===n})}function P(e,t,n,r,i){y(e,t,e=>{!i.semanticRepresentativeIndexes.has(e.index)&&ne(e,n)&&i.suppressNode(e,[r])})}function He(e,t){j(e,(n,r,i)=>{let a=S(e,i,e=>E(e)&&e.label?.trim()===r&&(h(e.rect,n.rect)||Ue(n,e)));a&&t.suppressNode(n,[a])})}function Ue(e,t){if(t.label?.trim()!==e.label?.trim())return!1;let n=r(t.type??``);return We(e,n)||n===`textfield`||Ge(e,n,t)}function We(e,t){let n=e.label?.trim();return t===`button`&&(n===`Dismiss`||n===`Back`)}function Ge(e,t,n){return t!==`button`||!e.rect||!n.rect?!1:e.rect.x===0&&e.rect.y===0&&e.rect.width>=300&&e.rect.height>=600&&n.rect.width<e.rect.width}function Ke(e,t){let n=D(e);for(let i of e){if(r(i.type??``)!==`other`||i.hittable===!0||i.label?.trim()||i.value?.trim()||!i.identifier?.trim())continue;let e=ae(i,n);(e.length!==0||i.hittable===!1)&&t.suppressNode(i,e)}}function qe(e,t){je(e,t),Ke(e,t),fe(e,t),Pe(e,t),He(e,t),De(e,t.replacements),Ae(e,t),ze(e,t)}function Je(e,t){for(let n=0;n<e.length;n+=1){let r=e[n],i=r?Ye(e,n,r,t):void 0;!r?.rect||!i||Qe(e,n,r,i,t)}}function Ye(e,t,n,i){let a=n.label?.trim();if(r(n.type??``)!==`cell`||a&&!Xe(a,n.identifier)&&!l(a))return a;let o=w(e,t).find(Ze),s=o?.label?.trim();return!o||!s?a:(C(i.replacements,n,{label:s}),i.suppressNode(o,[n]),s)}function Xe(e,t){return t?.trim()===e&&/^[A-Z_$][A-Za-z0-9_$]*Cell$/.test(e)}function Ze(e){if(!e.label?.trim())return!1;let t=r(e.type??``);return t===`statictext`||t===`text`||t===`textview`}function Qe(e,t,n,i,a){let o=r(n.type??``);if(o===`button`){F(w(e,t),i,a,n);return}if(o!==`cell`)return;let s=w(e,t);$e(s,n,i,a)||et(s,n,i,a)}function $e(e,t,n,r){let i=e.find(e=>nt(e,t,n));if(!i)return!1;let a=e.find(e=>I(e,t,n)),o=i.identifier?void 0:a?.identifier??t.identifier;return o&&C(r.replacements,i,{identifier:o}),r.suppressNode(t,[i]),tt(e,t,n,i,r),!0}function et(e,t,n,r){let i=e.find(e=>I(e,t,n));if(!i){e.some(ie)&&F(e,n,r,t);return}!t.identifier&&i.identifier&&C(r.replacements,t,{identifier:i.identifier}),r.suppressNode(i,[t]),F(e.filter(e=>e.index!==i.index),n,r,t)}function tt(e,t,n,r,i){for(let a of e)a.index!==r.index&&(I(a,t,n)||L(a,t)||rt(a,r)||x(a,n))&&i.suppressNode(a,[r])}function F(e,t,n,r){for(let i of e)(x(i,t)||r&&L(i,r))&&n.suppressNode(i,r?[r]:[])}function I(e,t,n){if(r(e.type??``)!==`button`)return!1;let i=t.identifier?.trim(),a=e.identifier?.trim();return i&&a&&i===a?!0:e.label?.trim()===n&&h(e.rect,t.rect)}function L(e,t){return r(e.type??``)===`button`&&!e.label?.trim()&&!e.value?.trim()&&h(e.rect,t.rect)}function nt(e,t,n){if(r(e.type??``)!==`switch`)return!1;let i=t.identifier?.trim(),a=e.identifier?.trim();return i&&a&&i===a?!0:e.label?.trim()===n}function rt(e,t){if(r(e.type??``)!==`switch`||e.index===t.index)return!1;let n=e.label?.trim();return n===t.value?.trim()||n===`0`||n===`1`}const R=1.15;function it(e,t,n){let r=new Map(e.map((e,t)=>[e.index,t]));for(let[i,a]of e.entries()){let s=at(e,r,t,a,n);if(!s)continue;B(e,i,n);let c=V(s.shelfRect,2);for(let t of s.intermediateSiblings){if(mt(t)||!t.rect||!o(t.rect,c))continue;let i=r.get(t.index);i!==void 0&&B(e,i,n)}}}function at(e,t,n,r,i){let a=ot(r,n,i.sourceNodesByIndex);if(!a)return;let o=lt(e,t,a.siblings,a.position,a.parent);if(!(o<0))return{shelfRect:a.rect,intermediateSiblings:a.siblings.slice(a.position+1,o)}}function ot(e,t,n){let r=ut(e,z(t,e.index));if(!r)return;let i=ct(e,n);if(!i||!i.rect)return;let a=z(t,i.index),o=a.findIndex(t=>t.index===e.index);if(st(a,o,e,r))return{rect:r.rect,parent:i,siblings:a,position:o}}function z(e,t){return e.get(t)??[]}function st(e,t,n,r){if(t<1)return!1;let i=dt(e,t,n);return i?!r.childActionsPresented||!ft(i,r.actionButtons):!1}function ct(e,t){return typeof e.parentIndex==`number`?t.get(e.parentIndex):void 0}function lt(e,t,n,r,i){return n.findIndex((n,a)=>a>r&&pt(e,t.get(n.index),n,i))}function ut(e,n){if(!b(e.type)||!e.rect)return;let i=e.rect,a=n.filter(e=>r(e.type??``)===`button`&&e.rect);if(a.length===0&&e.hiddenContentBelow===!0)return{rect:i,childActionsPresented:!1,actionButtons:a};if(a.length<3)return;let o=a.map(e=>e.rect.x+e.rect.width/2);if(o.every((e,t)=>t===0||e>o[t-1]))return{rect:i,childActionsPresented:a.some(e=>t(i,e.rect)),actionButtons:a}}function dt(e,t,n){if(!(!n.rect||t<1))for(let r=t-1;r>=0;--r){let t=e[r];if(!(!t.rect||!E(t))&&t.rect.x+t.rect.width/2<n.rect.x&&ht(t.rect,V(n.rect,2)))return t}}function ft(e,t){if(!e.rect||t.length===0)return!1;let n=Math.max(...t.map(e=>e.rect?.width??0)),r=Math.max(...t.map(e=>e.rect?.height??0));return e.rect.width>n*R||e.rect.height>r*R}function pt(e,t,n,i){return t!==void 0&&r(n.type??``)===`other`&&h(n.rect,i.rect)&&!!S(e,t,E)}function B(e,t,n){let r=e[t];if(r){n.suppressNode(r,[]);for(let r of w(e,t))n.suppressNode(r,[])}}function mt(e){let t=r(e.type??``);return t===`textfield`||t===`securetextfield`||t===`searchfield`||t===`textview`}function V(e,t){return{x:e.x-t,y:e.y-t,width:e.width+t*2,height:e.height+t*2}}function ht(e,t){return Math.max(e.y,t.y)<=Math.min(e.y+e.height,t.y+t.height)}function gt(e,t){let n=D(e);it(e,n,t),_t(e,n,t)}function _t(e,t,n){for(let i of e){if(r(i.type??``)!==`navigationbar`||!i.rect)continue;let e=t.get(i.index)??[],a=e.flatMap(t=>vt(t,e,i.rect));if(a.length!==1)continue;let{field:o,title:s,image:c,label:l}=a[0];C(n.replacements,o,{type:`Button`,label:l,enabled:!0,hittable:void 0,rect:Ct([c.rect,o.rect,s.rect])}),n.semanticRepresentativeIndexes.add(o.index),n.suppressNode(s,[o]),n.suppressNode(c,[o])}}function vt(e,t,n){let r=i(e);if(!yt(e,r))return[];let a=H(t,e=>bt(e,r)),o=H(t,xt);return a?.rect&&o?.rect&&St(o.rect,e.rect,a.rect,n)?[{field:e,title:a,image:o,label:r}]:[]}function yt(e,t){return r(e.type??``)===`textfield`&&e.enabled===!1&&!!e.rect&&!!t&&e.value?.trim()===t}function bt(e,t){return r(e.type??``)===`statictext`&&e.label?.trim()===t&&!!e.rect}function xt(e){return r(e.type??``)===`image`&&!!e.identifier?.trim()&&!!e.rect}function H(e,t){let n=e.filter(t);return n.length===1?n[0]:void 0}function St(e,n,r,i){let a=n.x-(e.x+e.width),o=r.x-(n.x+n.width);return t(i,e)&&t(i,n)&&t(i,r)&&a>=0&&a<=12&&o>=0&&o<=12&&U(e,n)&&U(n,r)}function U(e,t){return Math.max(e.y,t.y)<=Math.min(e.y+e.height,t.y+t.height)}function Ct(e){let t=Math.min(...e.map(e=>e.x)),n=Math.min(...e.map(e=>e.y)),r=Math.max(...e.map(e=>e.x+e.width)),i=Math.max(...e.map(e=>e.y+e.height));return{x:t,y:n,width:r-t,height:i-n}}function wt(e,t){let n=D(e);for(let i of e){if(r(i.type??``)===`element(58)`){C(t.replacements,i,{type:`WebView`});continue}let e=Tt(i,t.sourceNodesByIndex,n);if(e?.kind===`suppress`){t.suppressNode(i,[]);continue}e&&(C(t.replacements,i,{type:e.type,...e.type===`Heading`?{value:void 0}:{}}),t.semanticRepresentativeIndexes.add(i.index))}}function Tt(e,t,n){if(r(e.type??``)!==`other`)return null;let i=T(e,t,Ot),a=e.label?.trim();return!i||!a?null:Dt(e,i,a)?{kind:`suppress`}:Et(e,a,n)?{kind:`semantic`,type:W(e.value)?`Heading`:`StaticText`}:null}function Et(e,t,n){let i=n.get(e.index);if(i?.length!==1)return!1;let a=i[0];return r(a.type??``)===`statictext`&&a.label?.trim()===t&&!n.has(a.index)}function Dt(e,t,n){return e.parentIndex===t.index&&t.label?.trim()===n&&!W(e.value)}function Ot(e){let t=r(e.type??``);return t===`webview`||t===`element(58)`}function W(e){return/^[1-6]$/.test(e?.trim()??``)}const kt=[wt,gt,se,Je,qe];function G(e){if(e.length===0)return{nodes:e,presentedIndexesBySourceIndex:new Map};let t=new Map,n=new Map,r=new Set,i=new Map(e.map(e=>[e.index,e])),a=new Set,o={replacements:t,semanticRepresentativeIndexes:r,sourceNodesByIndex:i,isSuppressed:e=>a.has(e.index),suppressNode(e,t){if(a.add(e.index),t.length===0)return;let r=n.get(e.index)??new Set;for(let e of t)r.add(e.index);n.set(e.index,r)}};for(let t of kt)t(e,o);if(a.size===0&&t.size===0)return{nodes:e,presentedIndexesBySourceIndex:new Map(e.map(e=>[e.index,[e.index]]))};let s=e.filter(e=>!a.has(e.index)).map(e=>t.get(e.index)??e),c=re(s,a,e),l=new Map(s.map((e,t)=>[e.index,c[t].index]));return{nodes:c,presentedIndexesBySourceIndex:new Map(e.map(e=>[e.index,At(e.index,l,n)]))}}function At(e,t,n,r=new Set){let i=t.get(e);if(i!==void 0)return[i];if(r.has(e))return[];r.add(e);let a=new Set;for(let i of n.get(e)??[])for(let e of At(i,t,n,r))a.add(e);return[...a].sort((e,t)=>e-t)}var K=class extends Error{code=`IOS_SNAPSHOT_ENGINE_FAILED`;reason;details;constructor(e,t,n={}){super(t),this.name=`IosSnapshotEngineError`,this.reason=e,this.details=n}};function jt(e){return{reason:e.reason,...e.details}}function q(e){let t=new Map;for(let[n,r]of e.entries()){if(!Number.isInteger(r.index)||r.index<0||t.has(r.index))throw new K(`malformed-graph`,`iOS snapshot graph contains a duplicate or invalid node index`,{index:r.index});if(t.set(r.index,n),r.depth!==void 0&&(!Number.isInteger(r.depth)||r.depth<0))throw new K(`malformed-graph`,`iOS snapshot graph contains an invalid node depth`,{index:r.index,field:`depth`})}for(let[n,r]of e.entries()){if(r.parentIndex===void 0)continue;let e=t.get(r.parentIndex);if(e===void 0||e>=n)throw new K(`malformed-graph`,`iOS snapshot graph parent must precede its child`,{index:r.index,parentIndex:r.parentIndex})}}const J=new Set([`collectionview`,`scrollview`,`table`]),Mt=new Set([`application`,`window`]);function Nt(){return{projectedOut:!1}}function Pt(e,t,n,i,a,o){let c=o===`cursor-projected`?t.ancestorClip:void 0,l=Ft(e.rect,n,c),u=s(Y(e.rect)),d=s(l),f=r(e.type??``),p=It(o,t.projectedOut,u,d,f,a),m=Ut(e,Lt(o,t.projectedOut,u,d)&&!Rt(e,u,o),i,o),h=Ht(f,m,d,a),g=Bt(o,t.projectedOut,u,d,e);return{isIncluded:m,descendants:zt(o,p,c,l,h),effectiveRect:l,...g?{hiddenContentFrame:g}:{},establishesScrollAnchor:h}}function Ft(e,t,n){let r=Y(e);if(!r)return;let i=qt(r,t);return n&&(i=qt(i,n)),i}function It(e,t,n,r,i,a){return e===`plain-viewport`?!r:t||n&&!r&&Vt(i,a)}function Lt(e,t,n,r){return e===`plain-viewport`?r:!t&&(!n||r)}function Rt(e,t,n){return n!==`cursor-projected`||e.parentIndex===void 0||Wt(e)||!t?!1:Gt(e.rect)<=1||Kt(e.rect)<=1}function zt(e,t,n,r,i){return{projectedOut:t,...e===`cursor-projected`&&i?{ancestorClip:r}:{ancestorClip:n}}}function Bt(e,t,n,r,i){if(!(e!==`cursor-projected`||t||!n||r))return Y(i.rect)}function Vt(e,t){return t&&(e===`cell`||J.has(e))}function Ht(e,t,n,r){return t&&n&&r&&J.has(e)}function Ut(e,t,n,i){if(e.parentIndex===void 0)return!0;let a=r(e.type??``);return i===`plain-viewport`&&n&&!t&&a!==`application`?!1:Mt.has(a)||t}function Wt(e){return[e.label,e.identifier,e.value].some(e=>typeof e==`string`&&e.trim().length>0)}function Y(e){if(e&&[e.x,e.y,e.width,e.height].every(Number.isFinite)&&!(e.width<0||e.height<0))return{...e,width:Math.max(0,e.width),height:Math.max(0,e.height)}}function Gt(e){return Y(e)?.width??0}function Kt(e){return Y(e)?.height??0}function qt(e,t){let n=Math.max(e.x,t.x),r=Math.max(e.y,t.y),i=Math.min(e.x+e.width,t.x+t.width),a=Math.min(e.y+e.height,t.y+t.height);return i<=n||a<=r?{x:e.x,y:e.y,width:0,height:0}:{x:i>n?n:e.x,y:a>r?r:e.y,width:i-n,height:a-r}}function Jt(e){let t=D(e),n=new Set;for(let e of t.values()){let r=Yt(e,t);if(r){for(let i of e.slice(0,-1))if(Xt(r,i)){n.add(i.index);for(let e of ae(i,t))n.add(e.index)}}}return n}function Yt(e,t){let n=e.at(-1);if(!n||!Zt(n))return;let r=(t.get(n.index)??[]).find(Qt);if(!(r?.userInteractionEnabled!==!0||!s(r.rect)))return{container:n,dimmingRect:r.rect}}function Xt(e,n){return Zt(n)&&s(n.rect)&&t(e.dimmingRect,n.rect)}function Zt(e){return $t(e,`uitransitionview`)}function Qt(e){return $t(e,`uidimmingview`)}function $t(e,t){return r(e.role??``)===t}function en(e,t,n,r,i={}){q(e);let a=Jt(e),o=e.filter(e=>!a.has(e.index)),s=tn(o),c=new Map,l=[],u=new Map,d=0;for(let e of o){let a=nn(e,c,()=>{d+=1}),o=a?.traversal??Nt(),f=r===`cursor-projected`?a?.anchor:void 0,p=Pt(e,o,t,n,s.has(e.index),r);rn(p,f,u);let m=an(e,p,a,l,t,i),h=sn(p,f,m.keptIndex);c.set(e.index,{traversal:p.descendants,anchor:h,keptIndex:m.keptIndex,keptDepth:m.keptDepth})}let f=ln(u,l);return{nodes:f,stats:{presentedNodeCount:f.length,sourceNodeCount:e.length,parentClipLookups:d,modalContainedNodeCount:a.size}}}function tn(e){let t=new Set;for(let n of e)n.parentIndex!==void 0&&t.add(n.parentIndex);return t}function nn(e,t,n){if(e.parentIndex!==void 0)return n(),t.get(e.parentIndex)}function rn(e,t,n){e.hiddenContentFrame&&t&&cn(e.hiddenContentFrame,t,n)}function an(e,t,n,r,i,a){let o=n?.keptIndex,s=n?.keptDepth??-1;if(!t.isIncluded)return{keptIndex:o,keptDepth:s};let c=r.length;s+=1;let{hittable:l,...u}=e;return r.push({raw:{...u,index:c,depth:s,parentIndex:o,...on(l,e.parentIndex!==void 0,t.effectiveRect,e.enabled!==!1,i,a)},sourceIndex:e.index,...t.effectiveRect?{effectiveRect:t.effectiveRect}:{}}),o=c,{keptIndex:o,keptDepth:s}}function on(e,t,r,i,a,o){return o.hittabilityAvailable===!1?e===!1||!i?{hittable:!1}:{}:{hittable:t&&e===!0&&n(i,r,a)}}function sn(e,t,n){return e.establishesScrollAnchor&&n!==void 0&&e.effectiveRect?{index:n,rect:e.effectiveRect}:t}function cn(e,t,n){let r=n.get(t.index)??{above:!1,below:!1};e.y+e.height<=t.rect.y?r.above=!0:e.y>=t.rect.y+t.rect.height&&(r.below=!0),n.set(t.index,r)}function ln(e,t){return t.map(t=>{let n=e.get(t.raw.index);if(!n)return t;let r=t.raw;return{...t,raw:{...r,hiddenContentAbove:r.hiddenContentAbove===!0||n.above?!0:void 0,hiddenContentBelow:r.hiddenContentBelow===!0||n.below?!0:void 0}}})}const un=new Set([`collectionview`,`scrollview`,`table`]);function dn(e){return fn(e.viewport)}function fn(e){if(e.kind===`missing`)throw new K(e.reason===`invalid`?`invalid-viewport`:`missing-viewport`,`regular iOS snapshot presentation requires a valid viewport`,{field:`viewport`});if(!s(e.rect))throw new K(`invalid-viewport`,`regular iOS snapshot presentation requires a positive finite viewport`,{field:`viewport`});return e.rect}function pn(e,t,n,r=!0){q(e);let i=new Map,a=0;for(let o of e){let e=mn(o,i,t,()=>{a+=1}),c=bn(o.rect);if(hn(o,r),!c||!s(c)){gn(o,c),i.set(o.index,e);continue}_n(o,c,e),vn(o,c,t),i.set(o.index,yn(o,c,e,n))}return{parentClipLookups:a}}function mn(e,t,n,r){if(e.parentIndex===void 0)return n;r();let i=t.get(e.parentIndex);if(!i)throw new K(`invalid-presented-payload`,`regular iOS snapshot payload refers to a parent outside the payload`,{index:e.index,parentIndex:e.parentIndex});return i}function hn(e,t){if(!(e.hittable!==!0||t))throw new K(`invalid-presented-payload`,`iOS snapshot payload marked a node actionable without hittability evidence`,{index:e.index})}function gn(e,t){if(e.hittable===!0)throw new K(`regular-degenerate-actionable-node`,`regular iOS snapshot node with a missing or degenerate frame is actionable`,{index:e.index,frame:t??e.rect})}function _n(e,t,n){if(!xn(t,n))throw new K(`regular-node-outside-cumulative-clip`,`regular iOS snapshot node escaped its cumulative clip`,{index:e.index,frame:t,clip:n})}function vn(e,t,n){if(!(e.hittable!==!0||e.enabled!==!1&&c(n,t.x+t.width/2,t.y+t.height/2)))throw new K(`invalid-presented-payload`,`regular iOS snapshot payload marked a disabled or off-viewport node actionable`,{index:e.index,frame:t})}function yn(e,t,n,i){return i===`cursor-projected`&&un.has(r(e.type??``))?t:n}function X(e,t,n,r,i=!0){if(t===`raw`)return q(e),{parentClipLookups:0};if(!n)throw new K(`missing-viewport`,`regular iOS snapshot payload cannot be validated without a viewport`,{field:`viewport`});try{return pn(e,n,r,i)}catch(e){throw e instanceof K&&e.code===`IOS_SNAPSHOT_ENGINE_FAILED`&&e.reason===`malformed-graph`?new K(`invalid-presented-payload`,e.message,e.details):e}}function bn(e){if(!(!e||![e.x,e.y,e.width,e.height].every(Number.isFinite))&&!(e.width<0||e.height<0))return{...e,width:Math.max(0,e.width),height:Math.max(0,e.height)}}function xn(e,n){let r=1e-4;return t({x:n.x-r,y:n.y-r,width:n.width+r*2,height:n.height+r*2},e)}const Sn=new Set([`button`,`cell`,`checkbox`,`collectionview`,`link`,`menuitem`,`picker`,`searchfield`,`securetextfield`,`segmentedcontrol`,`slider`,`scrollview`,`stepper`,`switch`,`tabbar`,`table`,`textfield`,`textview`,`webview`]);function Cn(e){let t=Fn(e.nodes),n=Tn(e,t);return e.projection===`raw`?En(n,e.depth,t):Dn(n,e.depth)}function Z(e){let t=Fn(e.nodes);return e.projection===`raw`?En(e.nodes,e.depth,t):Dn(e.nodes,e.depth)}function wn(e){return e.parentIndex===void 0||Sn.has(r(e.type??``))||In(e)}function Tn(e,t){let n=e.scope?.trim().toLowerCase();if(!n)return[...e.nodes];for(let r=0;r<e.nodes.length;r+=1){let i=e.nodes[r];if(!i||!Nn(i.raw,n))continue;let a=Pn(e.nodes,r,t);if(!(e.projection===`raw`||a.some(t=>wn(e.nodes[t].raw))))continue;let o=a.map(t=>e.nodes[t]);return Mn(e.projection===`raw`&&e.depth!==null?o.filter(n=>Q(n,t)-Q(i,t)<=e.depth):o,Q(i,t),t)}return[]}function En(e,t,n){let r=t===null?[...e]:e.filter(e=>Q(e,n)<=t);return{nodes:r.map(e=>({...e.raw,rect:e.raw.rect})),sourceIndexes:r.map(e=>e.sourceIndex)}}function Dn(e,t){let n=[],r=[],i=new Map;for(let a of e){let e=On(a,i),o=kn(a,e,t,n.length);if(!o){jn(a,e,i);continue}n.push(o),r.push(a.sourceIndex),i.set(a.raw.index,o)}return{nodes:n,sourceIndexes:r}}function On(e,t){return e.raw.parentIndex===void 0?void 0:t.get(e.raw.parentIndex)}function kn(e,t,n,r){if(!wn(e.raw))return;let i=t?(t.depth??0)+1:0;if(n!==null&&i>n)return;let a=An(e);return{...e.raw,index:r,depth:i,parentIndex:t?.index,...e.effectiveRect?{rect:e.effectiveRect}:{rect:void 0},...a===void 0?{}:{hittable:a}}}function An(e){if(e.raw.hittable!==void 0)return!!(e.raw.hittable===!0&&e.effectiveRect&&e.effectiveRect.width>0&&e.effectiveRect.height>0)}function jn(e,t,n){t&&n.set(e.raw.index,t)}function Mn(e,t,n){let r=new Map(e.map((e,t)=>[e.raw.index,t]));return e.map((e,i)=>({...e,raw:{...e.raw,index:i,depth:Math.max(0,Q(e,n)-t),parentIndex:e.raw.parentIndex===void 0?void 0:r.get(e.raw.parentIndex)}}))}function Nn(e,t){return[e.label,e.identifier,e.value].some(e=>typeof e==`string`&&e.toLowerCase().includes(t))}function Pn(e,t,n){let r=Q(e[t],n),i=[];for(let a=t;a<e.length&&!(a>t&&Q(e[a],n)<=r);a+=1)i.push(a);return i}function Q(e,t){return Math.max(0,e.raw.depth??t?.get(e.raw.index)??0)}function Fn(e){let t=new Map;for(let n of e){let e=(n.raw.parentIndex===void 0?-1:t.get(n.raw.parentIndex)??-1)+1;t.set(n.raw.index,n.raw.depth===void 0?e:Math.max(0,n.raw.depth))}return t}function In(e){return[e.label,e.identifier,e.value].some(e=>typeof e==`string`&&e.trim().length>0)}function Ln(e,t,n=`cursor-projected`){Rn(e,t);let r=e.validation.presentationKey.projection,i=r===`regular`?fn(e.validation.viewport):void 0,a=e.validation.hittability.kind===`available`,o=zn(e,r,i,n,a),s=Bn(e.presentation.payload.nodes,r,t),c=Vn(s.nodes,r,i,n,a,o);return{nodes:s.nodes,...e.presentation.qualityPayload?{qualityNodes:[...e.presentation.qualityPayload.nodes]}:{},presentedIndexesBySourceIndex:s.presentedIndexesBySourceIndex,stats:{presentedNodeCount:s.nodes.length,sourceNodeCount:e.presentation.payload.nodes.length,parentClipLookups:c.parentClipLookups,modalContainedNodeCount:0}}}function Rn(e,t){if(!Hn(_(t),e.validation.presentationKey))throw new K(`projection-mismatch`,`presented iOS snapshot does not match the requested presentation key`,{projection:e.validation.presentationKey.projection});if(e.presentation.intent!==t.acquisitionIntent)throw new K(`projection-mismatch`,`presented iOS snapshot does not match the requested acquisition intent`,{field:`acquisitionIntent`})}function zn(e,t,n,r,i){let a=X(e.presentation.payload.nodes,t,n,r,i);if(e.presentation.qualityPayload)try{X(e.presentation.qualityPayload.nodes,t,n,r,i)}catch(e){throw e instanceof K?new K(`invalid-quality-payload`,e.message,e.details):e}return a}function Bn(e,t,n){return t===`regular`&&n.interactiveOnly?G([...e]):{nodes:[...e],presentedIndexesBySourceIndex:Un(e)}}function Vn(e,t,n,r,i,a){return t!==`regular`||!n?a:X(e,t,n,r,i)}function Hn(e,t){return e.projection===t.projection&&e.interactiveOnly===t.interactiveOnly&&e.depth===t.depth&&e.scope===t.scope&&e.customActions===t.customActions}function Un(e){return new Map(e.map(e=>[e.index,[e.index]]))}function Wn(t,n,r={}){let i=Gn(t,n,r),a=t.stage===`presented`?t.validation.presentationKey:_(n),o=t.stage===`acquired`?t.acquisition.truncated:t.presentation.payload.truncated;return{payload:{nodes:e(i.nodes),...o===void 0?{}:{truncated:o}},presentationKey:a,comparisonIdentity:ee(t,n),residue:t.stage===`acquired`?[...t.acquisition.residue]:[...t.validation.residue]}}function Gn(e,t,n={}){let r=n.foldPolicy??`cursor-projected`;return e.stage===`acquired`?Kn(e.acquisition,t,r):Ln(e,t,r)}function Kn(e,t,n){if(Jn(e,g(t)),t.projection===`raw`){q(e.nodes);let r=e.nodes.map(e=>({raw:e,sourceIndex:e.index})),i=Cn({nodes:r,projection:`raw`,scope:t.scope,depth:t.depth,foldPolicy:n}),a=t.scope===null?void 0:Z({nodes:r,projection:`raw`,depth:null,foldPolicy:n}).nodes;return{nodes:i.nodes,...a?{qualityNodes:a}:{},presentedIndexesBySourceIndex:$(e.nodes,i.nodes,i.sourceIndexes,Yn(i.nodes)),stats:{presentedNodeCount:i.nodes.length,sourceNodeCount:e.nodes.length,parentClipLookups:0,modalContainedNodeCount:0}}}let r=dn(e),i=!qn(e.residue),a=en(e.nodes,r,t.interactiveOnly,n,{hittabilityAvailable:i}),o=Cn({nodes:a.nodes,projection:`regular`,scope:t.scope,depth:t.depth,foldPolicy:n}),s=t.interactiveOnly?G(o.nodes):{nodes:o.nodes,presentedIndexesBySourceIndex:Yn(o.nodes)},c=X(s.nodes,`regular`,r,n,i),l=t.scope===null?void 0:Z({nodes:a.nodes,projection:`regular`,depth:null,foldPolicy:n}).nodes;return{nodes:s.nodes,...l?{qualityNodes:l}:{},presentedIndexesBySourceIndex:$(e.nodes,o.nodes,o.sourceIndexes,s.presentedIndexesBySourceIndex),stats:{presentedNodeCount:s.nodes.length,sourceNodeCount:e.nodes.length,parentClipLookups:a.stats.parentClipLookups+c.parentClipLookups,modalContainedNodeCount:a.stats.modalContainedNodeCount}}}function qn(e){return e.some(e=>e.kind===`unavailable-fact`&&e.fact===`hittability`)}function Jn(e,t){let n=e.hint;if(n.projection!==t.projection||n.rawTraversalDepth!==t.rawTraversalDepth||n.regularPresentedDepth!==t.regularPresentedDepth||n.interactiveOnly!==t.interactiveOnly||n.customActions!==t.customActions||n.acquisitionIntent!==t.acquisitionIntent)throw new K(`projection-mismatch`,`acquired iOS snapshot does not match the requested capture hint`,{projection:n.projection})}function Yn(e){return new Map(e.map(e=>[e.index,[e.index]]))}function $(e,t,n,r){let i=new Map(t.map((e,t)=>[e.index,n[t]])),a=new Map(e.map(e=>[e.index,[]]));for(let[e,t]of r){let n=i.get(e);n!==void 0&&a.set(n,t)}return a}export{G as a,jt as i,Ln as n,K as r,Wn as t};
1
+ import{v as e}from"./sdk-contracts.js";import{$r as t,Jr as n,Lr as r,Nr as i,Xr as a,Yr as o,ei as s,qr as c}from"./sdk-batch.js";import{n as l,t as u}from"./scroll-indicator.js";import{a as d,i as f,o as p,r as m}from"./react-native-overlay.js";import{t as h}from"./rect-center.js";import{i as g,n as _,t as ee}from"./ios-snapshot-planning.js";import{_ as te,a as v,c as y,d as ne,f as b,g as x,h as re,i as S,l as ie,m as C,n as w,o as T,p as E,r as ae,t as D,u as oe}from"./tree.js";function se(e,t){let n=v(t.sourceNodesByIndex.values());for(let r of e)ce(r,t.sourceNodesByIndex,n)&&C(t.replacements,r,{type:`Cell`})}function ce(e,t,n){return!(r(e.type??``)!==`other`||e.enabled===!1||!e.rect||!de(e.label)||!T(e,t,ue)||!le(e)||oe(e.rect,n))}function le(e){return e.rect?e.rect.height>=44&&e.rect.height<=160&&e.rect.width>=120:!1}function ue(e){let t=r(e.type??``);return t===`scrollview`||t===`scrollarea`}function de(e){let t=e?.trim();return!(!t||/^(toolbar|window|application)$/i.test(t)||t.startsWith(`!,`)||/debugger|fast refresh/i.test(t))}function fe(e,t){let n=new Set;for(let r of e)pe(t.replacements.get(r.index)??r)&&me(r,t.sourceNodesByIndex,t,n);_e(e,t,n)}function pe(e){let t=e.label?.trim();return!!(t&&l(t))}function me(e,t,n,r){let i=!b(e.type)||n.isSuppressed(e),a=u(e.label?.trim()??``,e.value),o=a?ge(e,t):void 0;i&&n.suppressNode(e,o?[o]:[]),o&&a&&Te(n,o,e,a)&&r.add(o.index)}function O(e,t){return typeof e.parentIndex==`number`?t.get(e.parentIndex):void 0}function he(e,t){return e.rect!=null&&t.rect!=null&&k(e.rect,t.rect)}function ge(e,t){if(b(e.type))return null;let n=O(e,t);for(;n&&!b(n.type);){let e=O(n,t);if(!e||!he(n,e))return null;n=e}return n??null}function _e(e,t,n){let r=new Map;for(let i of e){let e=r.get(i.parentIndex??-1),a=e?.clip,o=t.replacements.get(i.index)??i,s=we(o.rect,a),c=ve(o,a,s),l=ye(e,c,o);be(t,i,o,a,s,c,l),r.set(i.index,xe(i,o,a,s,l,n))}}function ve(e,t,n){return!!(t&&o(e.rect)&&!o(n))}function ye(e,t,n){return!!(e?.projectedOut||t&&Ce(n))}function be(e,t,n,r,i,a,o){o||a?e.suppressNode(t,[]):r&&i&&!k(n.rect,i)&&C(e.replacements,t,{rect:i})}function xe(e,t,n,r,i,a){return{projectedOut:i,...Se(e,t,n,r,a)?{clip:r}:n?{clip:n}:{}}}function Se(e,t,n,r,i){return!!(o(r)&&(i.has(e.index)||n!==void 0&&b(t.type)))}function Ce(e){return e.type?.trim().toLowerCase()===`cell`||b(e.type)}function we(e,t){if(!e||!t)return e;let n=Math.max(e.x,t.x),r=Math.max(e.y,t.y),i=Math.min(e.x+e.width,t.x+t.width),a=Math.min(e.y+e.height,t.y+t.height);return{x:n,y:r,width:Math.max(0,i-n),height:Math.max(0,a-r)}}function k(e,t){return!!(e&&e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height)}function Te(e,t,n,r){let i=Ee((e.replacements.get(t.index)??t).rect,n.rect);return te(e.replacements,t,e=>({rect:i??e.rect,hiddenContentAbove:A(e.hiddenContentAbove,r.above),hiddenContentBelow:A(e.hiddenContentBelow,r.below)})),!!i}function A(e,t){return e===!0||t?!0:void 0}function Ee(e,t){if(!(!e||!t)&&!(t.height<=0||t.height>=e.height)&&!(t.y<e.y||t.y>e.y+e.height))return{...e,y:t.y,height:Math.min(t.height,e.y+e.height-t.y)}}function j(e,t){for(let n=0;n<e.length;n+=1){let i=e[n],a=i?.label?.trim();i&&a&&r(i.type??``)===`other`&&t(i,a,n)}}function De(e,t){j(e,(n,r,i)=>{if(!d(r)||!n.rect)return;let a=S(e,i,e=>!!e.rect&&p(e.label?.trim()??``));if(!a?.rect)return;let o=ke(n.rect,a.rect);if(!o)return;let s=Oe(e,i,o);C(t,n,{rect:s}),y(e,i,e=>{d(e.label?.trim()??``)&&C(t,e,{rect:s})})})}function Oe(e,n,r){let i=r;return y(e,n,e=>{let n=e.label?.trim()??``;!e.rect||!d(n)||s(r,e.rect)&&t(e.rect)<t(i)&&(i=e.rect)}),i}function ke(e,t){let n=e.x+e.width,r=t.x+t.width,i={x:t.x,y:e.y,width:n-t.x,height:e.height};if(t.x>e.x&&h(t,i))return{...e,width:t.x-e.x};let a={x:e.x,y:e.y,width:r-e.x,height:e.height};if(r<n&&h(t,a))return{...e,x:r,width:n-r}}function Ae(e,t){j(e,(n,r,i)=>{m(n)&&f(n,M(e,i))&&t.suppressNode(n,M(e,i))})}function M(e,t){let n=[];return y(e,t,e=>{n.push(e)}),n}function je(e,t){let n=v(e),r=n?n.y+n.height:null;if(r!==null)for(let n=0;n<e.length;n+=1){let i=e[n];!i||!Me(i,r)||(t.suppressNode(i,[]),Ne(i,t,r),y(e,n,e=>{t.suppressNode(e,[])}))}}function Me(e,t){return!e.rect||r(e.type??``)!==`keyboard`?!1:e.rect.y>=t}function Ne(e,t,n){let r=typeof e.parentIndex==`number`?t.sourceNodesByIndex.get(e.parentIndex):void 0;for(;r?.rect&&r.rect.y>=n;)t.suppressNode(r,[]),r=typeof r.parentIndex==`number`?t.sourceNodesByIndex.get(r.parentIndex):void 0}function Pe(e,t){for(let n=0;n<e.length;n+=1){let i=e[n];if(!i)continue;if(Fe(i)){N(e,n,i,t);continue}if(!Ie(i))continue;let a=S(e,n,e=>r(e.type??``)===`searchfield`&&e.label===`Search`);a&&(t.suppressNode(i,[a]),Le(i,a,t),N(e,n,a,t))}}function Fe(e){return r(e.type??``)===`searchfield`&&e.label===`Search`}function Ie(e){let t=r(e.type??``);return e.label===`Toolbar`&&(t===`toolbar`||t===`searchfield`)}function N(e,t,n,r){y(e,t,e=>{e.index!==n.index&&Re(e)&&r.suppressNode(e,[n])})}function Le(e,t,n){let r=e;for(;typeof r.parentIndex==`number`;){let e=n.sourceNodesByIndex.get(r.parentIndex);if(!e||e.label!==`Toolbar`)return;n.suppressNode(e,[t]),r=e}}function Re(e){let t=r(e.type??``);return t===`button`?!1:t===`image`||e.label===`Search`}function ze(e,t){for(let n=0;n<e.length;n+=1){let r=e[n],i=r?.label?.trim();!r||t.isSuppressed(r)||!i||Be(e,n,r,i,t)}}function Be(e,t,n,i,a){let o=r(n.type??``);if(o===`statictext`||o===`link`){P(e,t,i,n,a);return}if(o!==`other`)return;let s=Ve(e,t,i);if(s){a.suppressNode(n,[s]);return}P(e,t,i,n,a)}function Ve(e,t,n){return S(e,t,e=>{let t=r(e.type??``);return(t===`link`||t===`searchfield`||b(e.type))&&e.label?.trim()===n})}function P(e,t,n,r,i){y(e,t,e=>{!i.semanticRepresentativeIndexes.has(e.index)&&ne(e,n)&&i.suppressNode(e,[r])})}function He(e,t){j(e,(n,r,i)=>{let a=S(e,i,e=>E(e)&&e.label?.trim()===r&&(h(e.rect,n.rect)||Ue(n,e)));a&&t.suppressNode(n,[a])})}function Ue(e,t){if(t.label?.trim()!==e.label?.trim())return!1;let n=r(t.type??``);return We(e,n)||n===`textfield`||Ge(e,n,t)}function We(e,t){let n=e.label?.trim();return t===`button`&&(n===`Dismiss`||n===`Back`)}function Ge(e,t,n){return t!==`button`||!e.rect||!n.rect?!1:e.rect.x===0&&e.rect.y===0&&e.rect.width>=300&&e.rect.height>=600&&n.rect.width<e.rect.width}function Ke(e,t){let n=D(e);for(let i of e){if(r(i.type??``)!==`other`||i.hittable===!0||i.label?.trim()||i.value?.trim()||!i.identifier?.trim())continue;let e=ae(i,n);(e.length!==0||i.hittable===!1)&&t.suppressNode(i,e)}}function qe(e,t){je(e,t),Ke(e,t),fe(e,t),Pe(e,t),He(e,t),De(e,t.replacements),Ae(e,t),ze(e,t)}function Je(e,t){for(let n=0;n<e.length;n+=1){let r=e[n],i=r?Ye(e,n,r,t):void 0;!r?.rect||!i||Qe(e,n,r,i,t)}}function Ye(e,t,n,i){let a=n.label?.trim();if(r(n.type??``)!==`cell`||a&&!Xe(a,n.identifier)&&!l(a))return a;let o=w(e,t).find(Ze),s=o?.label?.trim();return!o||!s?a:(C(i.replacements,n,{label:s}),i.suppressNode(o,[n]),s)}function Xe(e,t){return t?.trim()===e&&/^[A-Z_$][A-Za-z0-9_$]*Cell$/.test(e)}function Ze(e){if(!e.label?.trim())return!1;let t=r(e.type??``);return t===`statictext`||t===`text`||t===`textview`}function Qe(e,t,n,i,a){let o=r(n.type??``);if(o===`button`){F(w(e,t),i,a,n);return}if(o!==`cell`)return;let s=w(e,t);$e(s,n,i,a)||et(s,n,i,a)}function $e(e,t,n,r){let i=e.find(e=>nt(e,t,n));if(!i)return!1;let a=e.find(e=>I(e,t,n)),o=i.identifier?void 0:a?.identifier??t.identifier;return o&&C(r.replacements,i,{identifier:o}),r.suppressNode(t,[i]),tt(e,t,n,i,r),!0}function et(e,t,n,r){let i=e.find(e=>I(e,t,n));if(!i){e.some(ie)&&F(e,n,r,t);return}!t.identifier&&i.identifier&&C(r.replacements,t,{identifier:i.identifier}),r.suppressNode(i,[t]),F(e.filter(e=>e.index!==i.index),n,r,t)}function tt(e,t,n,r,i){for(let a of e)a.index!==r.index&&(I(a,t,n)||L(a,t)||rt(a,r)||x(a,n))&&i.suppressNode(a,[r])}function F(e,t,n,r){for(let i of e)(x(i,t)||r&&L(i,r))&&n.suppressNode(i,r?[r]:[])}function I(e,t,n){if(r(e.type??``)!==`button`)return!1;let i=t.identifier?.trim(),a=e.identifier?.trim();return i&&a&&i===a?!0:e.label?.trim()===n&&h(e.rect,t.rect)}function L(e,t){return r(e.type??``)===`button`&&!e.label?.trim()&&!e.value?.trim()&&h(e.rect,t.rect)}function nt(e,t,n){if(r(e.type??``)!==`switch`)return!1;let i=t.identifier?.trim(),a=e.identifier?.trim();return i&&a&&i===a?!0:e.label?.trim()===n}function rt(e,t){if(r(e.type??``)!==`switch`||e.index===t.index)return!1;let n=e.label?.trim();return n===t.value?.trim()||n===`0`||n===`1`}const R=1.15;function it(e,t,n){let r=new Map(e.map((e,t)=>[e.index,t]));for(let[i,o]of e.entries()){let s=at(e,r,t,o,n);if(!s)continue;B(e,i,n);let c=V(s.shelfRect,2);for(let t of s.intermediateSiblings){if(mt(t)||!t.rect||!a(t.rect,c))continue;let i=r.get(t.index);i!==void 0&&B(e,i,n)}}}function at(e,t,n,r,i){let a=ot(r,n,i.sourceNodesByIndex);if(!a)return;let o=lt(e,t,a.siblings,a.position,a.parent);if(!(o<0))return{shelfRect:a.rect,intermediateSiblings:a.siblings.slice(a.position+1,o)}}function ot(e,t,n){let r=ut(e,z(t,e.index));if(!r)return;let i=ct(e,n);if(!i||!i.rect)return;let a=z(t,i.index),o=a.findIndex(t=>t.index===e.index);if(st(a,o,e,r))return{rect:r.rect,parent:i,siblings:a,position:o}}function z(e,t){return e.get(t)??[]}function st(e,t,n,r){if(t<1)return!1;let i=dt(e,t,n);return i?!r.childActionsPresented||!ft(i,r.actionButtons):!1}function ct(e,t){return typeof e.parentIndex==`number`?t.get(e.parentIndex):void 0}function lt(e,t,n,r,i){return n.findIndex((n,a)=>a>r&&pt(e,t.get(n.index),n,i))}function ut(e,t){if(!b(e.type)||!e.rect)return;let n=e.rect,i=t.filter(e=>r(e.type??``)===`button`&&e.rect);if(i.length===0&&e.hiddenContentBelow===!0)return{rect:n,childActionsPresented:!1,actionButtons:i};if(i.length<3)return;let a=i.map(e=>e.rect.x+e.rect.width/2);if(a.every((e,t)=>t===0||e>a[t-1]))return{rect:n,childActionsPresented:i.some(e=>s(n,e.rect)),actionButtons:i}}function dt(e,t,n){if(!(!n.rect||t<1))for(let r=t-1;r>=0;--r){let t=e[r];if(!(!t.rect||!E(t))&&t.rect.x+t.rect.width/2<n.rect.x&&ht(t.rect,V(n.rect,2)))return t}}function ft(e,t){if(!e.rect||t.length===0)return!1;let n=Math.max(...t.map(e=>e.rect?.width??0)),r=Math.max(...t.map(e=>e.rect?.height??0));return e.rect.width>n*R||e.rect.height>r*R}function pt(e,t,n,i){return t!==void 0&&r(n.type??``)===`other`&&h(n.rect,i.rect)&&!!S(e,t,E)}function B(e,t,n){let r=e[t];if(r){n.suppressNode(r,[]);for(let r of w(e,t))n.suppressNode(r,[])}}function mt(e){let t=r(e.type??``);return t===`textfield`||t===`securetextfield`||t===`searchfield`||t===`textview`}function V(e,t){return{x:e.x-t,y:e.y-t,width:e.width+t*2,height:e.height+t*2}}function ht(e,t){return Math.max(e.y,t.y)<=Math.min(e.y+e.height,t.y+t.height)}function gt(e,t){let n=D(e);it(e,n,t),_t(e,n,t)}function _t(e,t,n){for(let i of e){if(r(i.type??``)!==`navigationbar`||!i.rect)continue;let e=t.get(i.index)??[],a=e.flatMap(t=>vt(t,e,i.rect));if(a.length!==1)continue;let{field:o,title:s,image:c,label:l}=a[0];C(n.replacements,o,{type:`Button`,label:l,enabled:!0,hittable:void 0,rect:Ct([c.rect,o.rect,s.rect])}),n.semanticRepresentativeIndexes.add(o.index),n.suppressNode(s,[o]),n.suppressNode(c,[o])}}function vt(e,t,n){let r=i(e);if(!yt(e,r))return[];let a=H(t,e=>bt(e,r)),o=H(t,xt);return a?.rect&&o?.rect&&St(o.rect,e.rect,a.rect,n)?[{field:e,title:a,image:o,label:r}]:[]}function yt(e,t){return r(e.type??``)===`textfield`&&e.enabled===!1&&!!e.rect&&!!t&&e.value?.trim()===t}function bt(e,t){return r(e.type??``)===`statictext`&&e.label?.trim()===t&&!!e.rect}function xt(e){return r(e.type??``)===`image`&&!!e.identifier?.trim()&&!!e.rect}function H(e,t){let n=e.filter(t);return n.length===1?n[0]:void 0}function St(e,t,n,r){let i=t.x-(e.x+e.width),a=n.x-(t.x+t.width);return s(r,e)&&s(r,t)&&s(r,n)&&i>=0&&i<=12&&a>=0&&a<=12&&U(e,t)&&U(t,n)}function U(e,t){return Math.max(e.y,t.y)<=Math.min(e.y+e.height,t.y+t.height)}function Ct(e){let t=Math.min(...e.map(e=>e.x)),n=Math.min(...e.map(e=>e.y)),r=Math.max(...e.map(e=>e.x+e.width)),i=Math.max(...e.map(e=>e.y+e.height));return{x:t,y:n,width:r-t,height:i-n}}function wt(e,t){let n=D(e);for(let i of e){if(r(i.type??``)===`element(58)`){C(t.replacements,i,{type:`WebView`});continue}let e=Tt(i,t.sourceNodesByIndex,n);if(e?.kind===`suppress`){t.suppressNode(i,[]);continue}e&&(C(t.replacements,i,{type:e.type,...e.type===`Heading`?{value:void 0}:{}}),t.semanticRepresentativeIndexes.add(i.index))}}function Tt(e,t,n){if(r(e.type??``)!==`other`)return null;let i=T(e,t,Ot),a=e.label?.trim();return!i||!a?null:Dt(e,i,a)?{kind:`suppress`}:Et(e,a,n)?{kind:`semantic`,type:W(e.value)?`Heading`:`StaticText`}:null}function Et(e,t,n){let i=n.get(e.index);if(i?.length!==1)return!1;let a=i[0];return r(a.type??``)===`statictext`&&a.label?.trim()===t&&!n.has(a.index)}function Dt(e,t,n){return e.parentIndex===t.index&&t.label?.trim()===n&&!W(e.value)}function Ot(e){let t=r(e.type??``);return t===`webview`||t===`element(58)`}function W(e){return/^[1-6]$/.test(e?.trim()??``)}const kt=[wt,gt,se,Je,qe];function G(e){if(e.length===0)return{nodes:e,presentedIndexesBySourceIndex:new Map};let t=new Map,n=new Map,r=new Set,i=new Map(e.map(e=>[e.index,e])),a=new Set,o={replacements:t,semanticRepresentativeIndexes:r,sourceNodesByIndex:i,isSuppressed:e=>a.has(e.index),suppressNode(e,t){if(a.add(e.index),t.length===0)return;let r=n.get(e.index)??new Set;for(let e of t)r.add(e.index);n.set(e.index,r)}};for(let t of kt)t(e,o);if(a.size===0&&t.size===0)return{nodes:e,presentedIndexesBySourceIndex:new Map(e.map(e=>[e.index,[e.index]]))};let s=e.filter(e=>!a.has(e.index)).map(e=>t.get(e.index)??e),c=re(s,a,e),l=new Map(s.map((e,t)=>[e.index,c[t].index]));return{nodes:c,presentedIndexesBySourceIndex:new Map(e.map(e=>[e.index,At(e.index,l,n)]))}}function At(e,t,n,r=new Set){let i=t.get(e);if(i!==void 0)return[i];if(r.has(e))return[];r.add(e);let a=new Set;for(let i of n.get(e)??[])for(let e of At(i,t,n,r))a.add(e);return[...a].sort((e,t)=>e-t)}var K=class extends Error{code=`IOS_SNAPSHOT_ENGINE_FAILED`;reason;details;constructor(e,t,n={}){super(t),this.name=`IosSnapshotEngineError`,this.reason=e,this.details=n}};function jt(e){return{reason:e.reason,...e.details}}function q(e){let t=new Map;for(let[n,r]of e.entries()){if(!Number.isInteger(r.index)||r.index<0||t.has(r.index))throw new K(`malformed-graph`,`iOS snapshot graph contains a duplicate or invalid node index`,{index:r.index});if(t.set(r.index,n),r.depth!==void 0&&(!Number.isInteger(r.depth)||r.depth<0))throw new K(`malformed-graph`,`iOS snapshot graph contains an invalid node depth`,{index:r.index,field:`depth`})}for(let[n,r]of e.entries()){if(r.parentIndex===void 0)continue;let e=t.get(r.parentIndex);if(e===void 0||e>=n)throw new K(`malformed-graph`,`iOS snapshot graph parent must precede its child`,{index:r.index,parentIndex:r.parentIndex})}}const J=new Set([`collectionview`,`scrollview`,`table`]),Mt=new Set([`application`,`window`]);function Nt(){return{projectedOut:!1}}function Pt(e,t,n,i,a,s){let c=s===`cursor-projected`?t.ancestorClip:void 0,l=Ft(e.rect,n,c),u=o(Y(e.rect)),d=o(l),f=r(e.type??``),p=It(s,t.projectedOut,u,d,f,a),m=Ut(e,Lt(s,t.projectedOut,u,d)&&!Rt(e,u,s),i,s),h=Ht(f,m,d,a),g=Bt(s,t.projectedOut,u,d,e);return{isIncluded:m,descendants:zt(s,p,c,l,h),effectiveRect:l,...g?{hiddenContentFrame:g}:{},establishesScrollAnchor:h}}function Ft(e,t,n){let r=Y(e);if(!r)return;let i=qt(r,t);return n&&(i=qt(i,n)),i}function It(e,t,n,r,i,a){return e===`plain-viewport`?!r:t||n&&!r&&Vt(i,a)}function Lt(e,t,n,r){return e===`plain-viewport`?r:!t&&(!n||r)}function Rt(e,t,n){return n!==`cursor-projected`||e.parentIndex===void 0||Wt(e)||!t?!1:Gt(e.rect)<=1||Kt(e.rect)<=1}function zt(e,t,n,r,i){return{projectedOut:t,...e===`cursor-projected`&&i?{ancestorClip:r}:{ancestorClip:n}}}function Bt(e,t,n,r,i){if(!(e!==`cursor-projected`||t||!n||r))return Y(i.rect)}function Vt(e,t){return t&&(e===`cell`||J.has(e))}function Ht(e,t,n,r){return t&&n&&r&&J.has(e)}function Ut(e,t,n,i){if(e.parentIndex===void 0)return!0;let a=r(e.type??``);return i===`plain-viewport`&&n&&!t&&a!==`application`?!1:Mt.has(a)||t}function Wt(e){return[e.label,e.identifier,e.value].some(e=>typeof e==`string`&&e.trim().length>0)}function Y(e){if(e&&[e.x,e.y,e.width,e.height].every(Number.isFinite)&&!(e.width<0||e.height<0))return{...e,width:Math.max(0,e.width),height:Math.max(0,e.height)}}function Gt(e){return Y(e)?.width??0}function Kt(e){return Y(e)?.height??0}function qt(e,t){let n=Math.max(e.x,t.x),r=Math.max(e.y,t.y),i=Math.min(e.x+e.width,t.x+t.width),a=Math.min(e.y+e.height,t.y+t.height);return i<=n||a<=r?{x:e.x,y:e.y,width:0,height:0}:{x:i>n?n:e.x,y:a>r?r:e.y,width:i-n,height:a-r}}function Jt(e){let t=D(e),n=new Set;for(let e of t.values()){let r=Yt(e,t);if(r){for(let i of e.slice(0,-1))if(Xt(r,i)){n.add(i.index);for(let e of ae(i,t))n.add(e.index)}}}return n}function Yt(e,t){let n=e.at(-1);if(!n||!Zt(n))return;let r=(t.get(n.index)??[]).find(Qt);if(!(r?.userInteractionEnabled!==!0||!o(r.rect)))return{container:n,dimmingRect:r.rect}}function Xt(e,t){return Zt(t)&&o(t.rect)&&s(e.dimmingRect,t.rect)}function Zt(e){return $t(e,`uitransitionview`)}function Qt(e){return $t(e,`uidimmingview`)}function $t(e,t){return r(e.role??``)===t}function en(e,t,n,r,i={}){q(e);let a=Jt(e),o=e.filter(e=>!a.has(e.index)),s=tn(o),c=new Map,l=[],u=new Map,d=0;for(let e of o){let a=nn(e,c,()=>{d+=1}),o=a?.traversal??Nt(),f=r===`cursor-projected`?a?.anchor:void 0,p=Pt(e,o,t,n,s.has(e.index),r);rn(p,f,u);let m=an(e,p,a,l,t,i),h=sn(p,f,m.keptIndex);c.set(e.index,{traversal:p.descendants,anchor:h,keptIndex:m.keptIndex,keptDepth:m.keptDepth})}let f=ln(u,l);return{nodes:f,stats:{presentedNodeCount:f.length,sourceNodeCount:e.length,parentClipLookups:d,modalContainedNodeCount:a.size}}}function tn(e){let t=new Set;for(let n of e)n.parentIndex!==void 0&&t.add(n.parentIndex);return t}function nn(e,t,n){if(e.parentIndex!==void 0)return n(),t.get(e.parentIndex)}function rn(e,t,n){e.hiddenContentFrame&&t&&cn(e.hiddenContentFrame,t,n)}function an(e,t,n,r,i,a){let o=n?.keptIndex,s=n?.keptDepth??-1;if(!t.isIncluded)return{keptIndex:o,keptDepth:s};let c=r.length;s+=1;let{hittable:l,...u}=e;return r.push({raw:{...u,index:c,depth:s,parentIndex:o,...on(l,e.parentIndex!==void 0,t.effectiveRect,e.enabled!==!1,i,a)},sourceIndex:e.index,...t.effectiveRect?{effectiveRect:t.effectiveRect}:{}}),o=c,{keptIndex:o,keptDepth:s}}function on(e,t,r,i,a,o){return o.hittabilityAvailable===!1?e===!1||!i?{hittable:!1}:{}:{hittable:t&&e===!0&&n(i,r,a)}}function sn(e,t,n){return e.establishesScrollAnchor&&n!==void 0&&e.effectiveRect?{index:n,rect:e.effectiveRect}:t}function cn(e,t,n){let r=n.get(t.index)??{above:!1,below:!1};e.y+e.height<=t.rect.y?r.above=!0:e.y>=t.rect.y+t.rect.height&&(r.below=!0),n.set(t.index,r)}function ln(e,t){return t.map(t=>{let n=e.get(t.raw.index);if(!n)return t;let r=t.raw;return{...t,raw:{...r,hiddenContentAbove:r.hiddenContentAbove===!0||n.above?!0:void 0,hiddenContentBelow:r.hiddenContentBelow===!0||n.below?!0:void 0}}})}const un=new Set([`collectionview`,`scrollview`,`table`]);function dn(e){return fn(e.viewport)}function fn(e){if(e.kind===`missing`)throw new K(e.reason===`invalid`?`invalid-viewport`:`missing-viewport`,`regular iOS snapshot presentation requires a valid viewport`,{field:`viewport`});if(!o(e.rect))throw new K(`invalid-viewport`,`regular iOS snapshot presentation requires a positive finite viewport`,{field:`viewport`});return e.rect}function pn(e,t,n,r=!0){q(e);let i=new Map,a=0;for(let s of e){let e=mn(s,i,t,()=>{a+=1}),c=bn(s.rect);if(hn(s,r),!c||!o(c)){gn(s,c),i.set(s.index,e);continue}_n(s,c,e),vn(s,c,t),i.set(s.index,yn(s,c,e,n))}return{parentClipLookups:a}}function mn(e,t,n,r){if(e.parentIndex===void 0)return n;r();let i=t.get(e.parentIndex);if(!i)throw new K(`invalid-presented-payload`,`regular iOS snapshot payload refers to a parent outside the payload`,{index:e.index,parentIndex:e.parentIndex});return i}function hn(e,t){if(!(e.hittable!==!0||t))throw new K(`invalid-presented-payload`,`iOS snapshot payload marked a node actionable without hittability evidence`,{index:e.index})}function gn(e,t){if(e.hittable===!0)throw new K(`regular-degenerate-actionable-node`,`regular iOS snapshot node with a missing or degenerate frame is actionable`,{index:e.index,frame:t??e.rect})}function _n(e,t,n){if(!xn(t,n))throw new K(`regular-node-outside-cumulative-clip`,`regular iOS snapshot node escaped its cumulative clip`,{index:e.index,frame:t,clip:n})}function vn(e,t,n){if(!(e.hittable!==!0||e.enabled!==!1&&c(n,t.x+t.width/2,t.y+t.height/2)))throw new K(`invalid-presented-payload`,`regular iOS snapshot payload marked a disabled or off-viewport node actionable`,{index:e.index,frame:t})}function yn(e,t,n,i){return i===`cursor-projected`&&un.has(r(e.type??``))?t:n}function X(e,t,n,r,i=!0){if(t===`raw`)return q(e),{parentClipLookups:0};if(!n)throw new K(`missing-viewport`,`regular iOS snapshot payload cannot be validated without a viewport`,{field:`viewport`});try{return pn(e,n,r,i)}catch(e){throw e instanceof K&&e.code===`IOS_SNAPSHOT_ENGINE_FAILED`&&e.reason===`malformed-graph`?new K(`invalid-presented-payload`,e.message,e.details):e}}function bn(e){if(!(!e||![e.x,e.y,e.width,e.height].every(Number.isFinite))&&!(e.width<0||e.height<0))return{...e,width:Math.max(0,e.width),height:Math.max(0,e.height)}}function xn(e,t){let n=1e-4;return s({x:t.x-n,y:t.y-n,width:t.width+n*2,height:t.height+n*2},e)}const Sn=new Set([`button`,`cell`,`checkbox`,`collectionview`,`link`,`menuitem`,`picker`,`searchfield`,`securetextfield`,`segmentedcontrol`,`slider`,`scrollview`,`stepper`,`switch`,`tabbar`,`table`,`textfield`,`textview`,`webview`]);function Cn(e){let t=Fn(e.nodes),n=Tn(e,t);return e.projection===`raw`?En(n,e.depth,t):Dn(n,e.depth)}function Z(e){let t=Fn(e.nodes);return e.projection===`raw`?En(e.nodes,e.depth,t):Dn(e.nodes,e.depth)}function wn(e){return e.parentIndex===void 0||Sn.has(r(e.type??``))||In(e)}function Tn(e,t){let n=e.scope?.trim().toLowerCase();if(!n)return[...e.nodes];for(let r=0;r<e.nodes.length;r+=1){let i=e.nodes[r];if(!i||!Nn(i.raw,n))continue;let a=Pn(e.nodes,r,t);if(!(e.projection===`raw`||a.some(t=>wn(e.nodes[t].raw))))continue;let o=a.map(t=>e.nodes[t]);return Mn(e.projection===`raw`&&e.depth!==null?o.filter(n=>Q(n,t)-Q(i,t)<=e.depth):o,Q(i,t),t)}return[]}function En(e,t,n){let r=t===null?[...e]:e.filter(e=>Q(e,n)<=t);return{nodes:r.map(e=>({...e.raw,rect:e.raw.rect})),sourceIndexes:r.map(e=>e.sourceIndex)}}function Dn(e,t){let n=[],r=[],i=new Map;for(let a of e){let e=On(a,i),o=kn(a,e,t,n.length);if(!o){jn(a,e,i);continue}n.push(o),r.push(a.sourceIndex),i.set(a.raw.index,o)}return{nodes:n,sourceIndexes:r}}function On(e,t){return e.raw.parentIndex===void 0?void 0:t.get(e.raw.parentIndex)}function kn(e,t,n,r){if(!wn(e.raw))return;let i=t?(t.depth??0)+1:0;if(n!==null&&i>n)return;let a=An(e);return{...e.raw,index:r,depth:i,parentIndex:t?.index,...e.effectiveRect?{rect:e.effectiveRect}:{rect:void 0},...a===void 0?{}:{hittable:a}}}function An(e){if(e.raw.hittable!==void 0)return!!(e.raw.hittable===!0&&e.effectiveRect&&e.effectiveRect.width>0&&e.effectiveRect.height>0)}function jn(e,t,n){t&&n.set(e.raw.index,t)}function Mn(e,t,n){let r=new Map(e.map((e,t)=>[e.raw.index,t]));return e.map((e,i)=>({...e,raw:{...e.raw,index:i,depth:Math.max(0,Q(e,n)-t),parentIndex:e.raw.parentIndex===void 0?void 0:r.get(e.raw.parentIndex)}}))}function Nn(e,t){return[e.label,e.identifier,e.value].some(e=>typeof e==`string`&&e.toLowerCase().includes(t))}function Pn(e,t,n){let r=Q(e[t],n),i=[];for(let a=t;a<e.length&&!(a>t&&Q(e[a],n)<=r);a+=1)i.push(a);return i}function Q(e,t){return Math.max(0,e.raw.depth??t?.get(e.raw.index)??0)}function Fn(e){let t=new Map;for(let n of e){let e=(n.raw.parentIndex===void 0?-1:t.get(n.raw.parentIndex)??-1)+1;t.set(n.raw.index,n.raw.depth===void 0?e:Math.max(0,n.raw.depth))}return t}function In(e){return[e.label,e.identifier,e.value].some(e=>typeof e==`string`&&e.trim().length>0)}function Ln(e,t,n=`cursor-projected`){Rn(e,t);let r=e.validation.presentationKey.projection,i=r===`regular`?fn(e.validation.viewport):void 0,a=e.validation.hittability.kind===`available`,o=zn(e,r,i,n,a),s=Bn(e.presentation.payload.nodes,r,t),c=Vn(s.nodes,r,i,n,a,o);return{nodes:s.nodes,...i?{validatedViewport:i}:{},...e.presentation.qualityPayload?{qualityNodes:[...e.presentation.qualityPayload.nodes]}:{},presentedIndexesBySourceIndex:s.presentedIndexesBySourceIndex,stats:{presentedNodeCount:s.nodes.length,sourceNodeCount:e.presentation.payload.nodes.length,parentClipLookups:c.parentClipLookups,modalContainedNodeCount:0}}}function Rn(e,t){if(!Hn(_(t),e.validation.presentationKey))throw new K(`projection-mismatch`,`presented iOS snapshot does not match the requested presentation key`,{projection:e.validation.presentationKey.projection});if(e.presentation.intent!==t.acquisitionIntent)throw new K(`projection-mismatch`,`presented iOS snapshot does not match the requested acquisition intent`,{field:`acquisitionIntent`})}function zn(e,t,n,r,i){let a=X(e.presentation.payload.nodes,t,n,r,i);if(e.presentation.qualityPayload)try{X(e.presentation.qualityPayload.nodes,t,n,r,i)}catch(e){throw e instanceof K?new K(`invalid-quality-payload`,e.message,e.details):e}return a}function Bn(e,t,n){return t===`regular`&&n.interactiveOnly?G([...e]):{nodes:[...e],presentedIndexesBySourceIndex:Un(e)}}function Vn(e,t,n,r,i,a){return t!==`regular`||!n?a:X(e,t,n,r,i)}function Hn(e,t){return e.projection===t.projection&&e.interactiveOnly===t.interactiveOnly&&e.depth===t.depth&&e.scope===t.scope&&e.customActions===t.customActions}function Un(e){return new Map(e.map(e=>[e.index,[e.index]]))}function Wn(t,n,r={}){let i=Gn(t,n,r),a=t.stage===`presented`?t.validation.presentationKey:_(n),o=t.stage===`acquired`?t.acquisition.truncated:t.presentation.payload.truncated;return{payload:{nodes:e(i.nodes),...o===void 0?{}:{truncated:o}},presentationKey:a,comparisonIdentity:ee(t,n),residue:t.stage===`acquired`?[...t.acquisition.residue]:[...t.validation.residue],...i.validatedViewport?{validatedViewport:i.validatedViewport}:{}}}function Gn(e,t,n={}){let r=n.foldPolicy??`cursor-projected`;return e.stage===`acquired`?Kn(e.acquisition,t,r):Ln(e,t,r)}function Kn(e,t,n){if(Jn(e,g(t)),t.projection===`raw`){q(e.nodes);let r=e.nodes.map(e=>({raw:e,sourceIndex:e.index})),i=Cn({nodes:r,projection:`raw`,scope:t.scope,depth:t.depth,foldPolicy:n}),a=t.scope===null?void 0:Z({nodes:r,projection:`raw`,depth:null,foldPolicy:n}).nodes;return{nodes:i.nodes,...a?{qualityNodes:a}:{},presentedIndexesBySourceIndex:$(e.nodes,i.nodes,i.sourceIndexes,Yn(i.nodes)),stats:{presentedNodeCount:i.nodes.length,sourceNodeCount:e.nodes.length,parentClipLookups:0,modalContainedNodeCount:0}}}let r=dn(e),i=!qn(e.residue),a=en(e.nodes,r,t.interactiveOnly,n,{hittabilityAvailable:i}),o=Cn({nodes:a.nodes,projection:`regular`,scope:t.scope,depth:t.depth,foldPolicy:n}),s=t.interactiveOnly?G(o.nodes):{nodes:o.nodes,presentedIndexesBySourceIndex:Yn(o.nodes)},c=X(s.nodes,`regular`,r,n,i),l=t.scope===null?void 0:Z({nodes:a.nodes,projection:`regular`,depth:null,foldPolicy:n}).nodes;return{nodes:s.nodes,validatedViewport:r,...l?{qualityNodes:l}:{},presentedIndexesBySourceIndex:$(e.nodes,o.nodes,o.sourceIndexes,s.presentedIndexesBySourceIndex),stats:{presentedNodeCount:s.nodes.length,sourceNodeCount:e.nodes.length,parentClipLookups:a.stats.parentClipLookups+c.parentClipLookups,modalContainedNodeCount:a.stats.modalContainedNodeCount}}}function qn(e){return e.some(e=>e.kind===`unavailable-fact`&&e.fact===`hittability`)}function Jn(e,t){let n=e.hint;if(n.projection!==t.projection||n.rawTraversalDepth!==t.rawTraversalDepth||n.regularPresentedDepth!==t.regularPresentedDepth||n.interactiveOnly!==t.interactiveOnly||n.customActions!==t.customActions||n.acquisitionIntent!==t.acquisitionIntent)throw new K(`projection-mismatch`,`acquired iOS snapshot does not match the requested capture hint`,{projection:n.projection})}function Yn(e){return new Map(e.map(e=>[e.index,[e.index]]))}function $(e,t,n,r){let i=new Map(t.map((e,t)=>[e.index,n[t]])),a=new Map(e.map(e=>[e.index,[]]));for(let[e,t]of r){let n=i.get(e);n!==void 0&&a.set(n,t)}return a}export{G as a,jt as i,Ln as n,K as r,Wn as t};
@@ -1 +1 @@
1
- import{N as e}from"./sdk-contracts.js";import{i as t,r as n}from"./ios-snapshot-planning.js";import{i as r,r as i,t as a}from"./ios-snapshot-engine.js";const o={"acquisition-depth":`iOS snapshot acquisition does not report hierarchy completeness; provider-side depth or child limits may omit nodes.`,hittability:`iOS snapshot acquisition does not provide hittability evidence; regular snapshots omit unverified hittability while raw snapshots preserve supplied facts.`,truncation:`iOS snapshot acquisition does not expose truncation metadata; tree completeness is not independently verified.`};function s(e,t){let r=n({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions,acquisitionIntent:e.acquisition.intent}),i=c(e,r);try{let t=a(i,r);return{backend:`xctest`,producer:e.acquisition.producer,nodes:[...t.payload.nodes],comparisonIdentity:t.comparisonIdentity,...e.acquisition.truncated===void 0?{}:{truncated:e.acquisition.truncated},...l(e.acquisition.residue)}}catch(e){u(e)}}function c(e,n){let r=t(n);return e.acquisition.intent===`full`?{stage:`acquired`,acquisition:{...e.acquisition,intent:`full`,hint:{...r,acquisitionIntent:`full`}}}:{stage:`acquired`,acquisition:{...e.acquisition,intent:`surface-observation`,hint:{...r,acquisitionIntent:`surface-observation`}}}}function l(e){let t=new Set(e.flatMap(e=>{if(e.kind===`missing-viewport`)return[`iOS snapshot acquisition did not provide a valid viewport (${e.reason}); retry with --raw to inspect the acquired tree, while regular presentation requires viewport evidence.`];if(e.kind!==`unavailable-fact`)return[];let t=o[e.fact];return t?[t]:[]}));return t.size===0?{}:{warnings:[...t]}}function u(t){if(!(t instanceof i))throw t;let n=r(t),a=t.reason===`missing-viewport`||t.reason===`invalid-viewport`?`Use snapshot --raw to inspect the acquired iOS tree; regular presentation requires valid viewport evidence.`:void 0;throw new e(`COMMAND_FAILED`,t.message,{...n,...a?{hint:a}:{}},t)}export{s as presentIosSnapshotAcquisition};
1
+ import{P as e}from"./sdk-contracts.js";import{ti as t}from"./sdk-batch.js";import{i as n,r}from"./ios-snapshot-planning.js";import{i,r as a,t as o}from"./ios-snapshot-engine.js";const s={"acquisition-depth":`iOS snapshot acquisition does not report hierarchy completeness; provider-side depth or child limits may omit nodes.`,hittability:`iOS snapshot acquisition does not provide hittability evidence; regular snapshots omit unverified hittability while raw snapshots preserve supplied facts.`,truncation:`iOS snapshot acquisition does not expose truncation metadata; tree completeness is not independently verified.`};function c(e,n){let i=r({raw:n?.raw,interactiveOnly:n?.interactiveOnly,depth:n?.depth,scope:n?.scope,customActions:n?.customActions,acquisitionIntent:e.acquisition.intent}),a=l(e,i);try{let n=o(a,i),r=t(n.validatedViewport);return{backend:`xctest`,producer:e.acquisition.producer,nodes:[...n.payload.nodes],comparisonIdentity:n.comparisonIdentity,...e.acquisition.truncated===void 0?{}:{truncated:e.acquisition.truncated},...r?{viewport:r}:{},...u(e.acquisition.residue)}}catch(e){d(e)}}function l(e,t){let r=n(t);return e.acquisition.intent===`full`?{stage:`acquired`,acquisition:{...e.acquisition,intent:`full`,hint:{...r,acquisitionIntent:`full`}}}:{stage:`acquired`,acquisition:{...e.acquisition,intent:`surface-observation`,hint:{...r,acquisitionIntent:`surface-observation`}}}}function u(e){let t=new Set(e.flatMap(e=>{if(e.kind===`missing-viewport`)return[`iOS snapshot acquisition did not provide a valid viewport (${e.reason}); retry with --raw to inspect the acquired tree, while regular presentation requires viewport evidence.`];if(e.kind!==`unavailable-fact`)return[];let t=s[e.fact];return t?[t]:[]}));return t.size===0?{}:{warnings:[...t]}}function d(t){if(!(t instanceof a))throw t;let n=i(t),r=t.reason===`missing-viewport`||t.reason===`invalid-viewport`?`Use snapshot --raw to inspect the acquired iOS tree; regular presentation requires valid viewport evidence.`:void 0;throw new e(`COMMAND_FAILED`,t.message,{...n,...r?{hint:r}:{}},t)}export{c as presentIosSnapshotAcquisition};
@@ -0,0 +1 @@
1
+ import{P as e}from"./sdk-contracts.js";import{r as t}from"./diagnostics.js";import"./diagnostics2.js";import{rn as n}from"./sdk-batch.js";import{s as r}from"./app-resolution.js";import{n as i}from"./alert.js";const a=`launch_confirmation_foreign_app`,o=/^Open in [“"].+[”"]\?$/u,s=1e4;async function c(n){let r=await u(n);if(`outcome`in r)return r;let i=r.alert;if(!i)return{outcome:`absent`};if(!p(i))return t({level:`warn`,phase:`ios_launch_confirmation_unanswered`,data:{reason:`alert-unrecognized`,title:i.message,buttons:i.items}}),{outcome:`unanswered`,reason:`alert-unrecognized`};let o=await d(n);if(`outcome`in o)return o;if(o.owner===void 0)return h(`url-owner-unresolved`,{}),{outcome:`unanswered`,reason:`url-owner-unresolved`};if(o.owner!==n.appBundleId)throw new e(`COMMAND_FAILED`,`The launch URL asks to open ${o.owner} instead.`,{reason:a,foreignAppBundleId:o.owner,sessionAppBundleId:n.appBundleId,hint:`iOS is asking whether to open ${o.owner}. Answer it with alert accept or alert dismiss, and pass a launch URL whose scheme belongs to the session app.`});return await n.acceptAlert().then(f,async e=>await l(n,i,e))}async function l(e,t,n){let r=await u(e);return`outcome`in r?m(`alert-accept`)(n):r.alert&&p(r.alert)&&r.alert.message===t.message?(h(`alert-still-present`,{}),{outcome:`unanswered`,reason:`alert-still-present`}):m(`alert-accept`)(n)}async function u(e){return await e.readAlert().then(e=>({alert:e}),m(`alert-read`))}async function d(e){return await e.resolveUrlOwner().then(e=>({owner:e}),m(`url-owner`))}function f(){return{outcome:`accepted`}}function p(e){let t=e.message,n=e.items;return typeof t==`string`&&o.test(t)&&Array.isArray(n)&&n.length===2&&n.includes(`Cancel`)&&n.includes(`Open`)}function m(t){return n=>(h(`step-failed`,{step:t,code:n instanceof e?n.code:void 0}),{outcome:`unreadable`,step:t})}function h(e,n){t({level:`debug`,phase:`ios_launch_confirmation_unanswered`,data:{reason:e,...n}})}async function g(e,t,n,r){let i=await n.then(e=>({interactor:e}),m(`runner`));return`outcome`in i?i:await c(_(e,t,i.interactor,r))}function _(e,{url:t,appBundleId:a},o,c){let l=o.readAlert?.bind(o),u=o.acceptAlert?.bind(o);if(!l||!u)throw n(`Apple interactor has no alert read or accept leg`);let d={appBundleId:a,surface:`app`};return Object.freeze({appBundleId:a,readAlert:async()=>await i(l(d)),acceptAlert:async()=>await u(d),resolveUrlOwner:async()=>await r(e,t,{timeoutMs:s,signal:c})})}export{a as LAUNCH_CONFIRMATION_FOREIGN_APP_REASON,s as URL_OWNER_LOOKUP_TIMEOUT_MS,c as answerLaunchConfirmation,g as answerSimulatorLaunchConfirmation,_ as createLaunchConfirmationPort};
@@ -1 +1 @@
1
- import{k as e}from"./sdk-batch-runner.js";import{o as t}from"./lease-scope.js";function n(e){return t(e)}function r(t,r){let i=n(t),a=i.leaseId??r?.leaseId,o=i.tenantId??r?.tenantId,s=i.runId??r?.runId;if(!(!o||!s||!a))return e({tenantId:o,runId:s,leaseId:a,leaseBackend:i.leaseBackend??r?.backend,leaseProvider:i.leaseProvider??r?.leaseProvider,deviceKey:i.deviceKey??r?.deviceKey,clientId:i.clientId??r?.clientId,expiresAt:r?.expiresAt})}function i(t,r){let i=n(t),a=r?.lease??r?.deviceLease??void 0;return e({tenantId:i.tenantId??a?.tenantId,runId:i.runId??a?.runId,leaseId:i.leaseId??a?.leaseId,leaseTtlMs:i.leaseTtlMs,leaseBackend:i.leaseBackend??a?.leaseBackend,leaseProvider:i.leaseProvider??a?.leaseProvider,deviceKey:i.deviceKey??a?.deviceKey,clientId:i.clientId??a?.clientId})}function a(t){let n=t.meta,r=e({leaseId:o(n?.leaseId),clientId:o(n?.clientId),tenantId:o(n?.tenantId),runId:o(n?.runId),leaseProvider:o(n?.leaseProvider),deviceKey:o(n?.deviceKey)});return Object.keys(r).length>0?r:void 0}function o(e){return typeof e==`string`&&e.trim().length>0?e.trim():void 0}export{a as i,n,i as r,r as t};
1
+ import{A as e}from"./sdk-batch-runner.js";import{o as t}from"./lease-scope.js";function n(e){return t(e)}function r(t,r){let i=n(t),a=i.leaseId??r?.leaseId,o=i.tenantId??r?.tenantId,s=i.runId??r?.runId;if(!(!o||!s||!a))return e({tenantId:o,runId:s,leaseId:a,leaseBackend:i.leaseBackend??r?.backend,leaseProvider:i.leaseProvider??r?.leaseProvider,deviceKey:i.deviceKey??r?.deviceKey,clientId:i.clientId??r?.clientId,expiresAt:r?.expiresAt})}function i(t,r){let i=n(t),a=r?.lease??r?.deviceLease??void 0;return e({tenantId:i.tenantId??a?.tenantId,runId:i.runId??a?.runId,leaseId:i.leaseId??a?.leaseId,leaseTtlMs:i.leaseTtlMs,leaseBackend:i.leaseBackend??a?.leaseBackend,leaseProvider:i.leaseProvider??a?.leaseProvider,deviceKey:i.deviceKey??a?.deviceKey,clientId:i.clientId??a?.clientId})}function a(t){let n=t.meta,r=e({leaseId:o(n?.leaseId),clientId:o(n?.clientId),tenantId:o(n?.tenantId),runId:o(n?.runId),leaseProvider:o(n?.leaseProvider),deviceKey:o(n?.deviceKey)});return Object.keys(r).length>0?r:void 0}function o(e){return typeof e==`string`&&e.trim().length>0?e.trim():void 0}export{a as i,n,i as r,r as t};
@@ -0,0 +1 @@
1
+ import{P as e,t}from"./sdk-contracts.js";import{f as n,t as r}from"./lease-scope.js";import i from"node:crypto";function a(e){return(e??``).trim().toLowerCase()===`tenant`?`tenant`:`none`}function o(e){if(!e)return;let t=e.trim();if(t&&/^[a-zA-Z0-9._-]{1,128}$/.test(t))return t}const s=`default`;function c(t){let n=Number.isInteger(t.defaultLeaseTtlMs)?Math.max(1,Number(t.defaultLeaseTtlMs)):6e4,i=Number.isInteger(t.minLeaseTtlMs)?Math.max(1,Number(t.minLeaseTtlMs)):r,a=Number.isInteger(t.maxLeaseTtlMs)?Math.max(i,Number(t.maxLeaseTtlMs)):6e5;return t=>{if(!Number.isInteger(t))return n;let r=Number(t);if(r<i||r>a)throw new e(`INVALID_ARGS`,`Lease ttlMs must be between ${i} and ${a}.`);return r}}function l(e){if(!e)return;let t=e.trim();if(t&&/^[a-zA-Z0-9._-]{1,128}$/.test(t))return t}function u(e){if(!e)return;let t=e.trim();if(t&&/^[a-f0-9]{16,128}$/i.test(t))return t.toLowerCase()}function d(t){let n=u(t);if(!n)throw new e(`INVALID_ARGS`,`Invalid lease id.`);return n}function f(n){let r=(n??``).trim().toLowerCase();if(!r)return`ios-simulator`;let i=t.find(e=>e===r);if(i)return i;throw new e(`INVALID_ARGS`,`Unsupported lease backend: ${n??``}`)}function p(t){if(t===void 0)return;let n=t.trim();if(!n||n.length>256||!/^[\u0020-\u007E]+$/.test(n))throw new e(`INVALID_ARGS`,`Invalid device key. Use 1-256 printable characters.`);return n}function m(e){return g(e,`client id`,128)}function h(e){return g(e,`lease provider`,64)}function g(t,n,r){if(t===void 0)return;let i=t.trim();if(!i||i.length>r||!/^[a-zA-Z0-9._-]+$/.test(i))throw new e(`INVALID_ARGS`,`Invalid ${n}. Use 1-${String(r)} chars: letters, numbers, dot, underscore, hyphen.`);return i}function _(t){let n=o(t);if(!n)throw new e(`INVALID_ARGS`,`Invalid tenant id. Use 1-128 chars: letters, numbers, dot, underscore, hyphen.`);return n}function v(t){let n=l(t);if(!n)throw new e(`INVALID_ARGS`,`Invalid run id. Use 1-128 chars: letters, numbers, dot, underscore, hyphen.`);return n}function y(e){return{backend:f(e.leaseBackend),leaseProvider:h(e.leaseProvider),deviceKey:p(e.deviceKey),clientId:m(e.clientId),tenantId:_(e.tenantId),runId:v(e.runId),ttlMs:e.ttlMs,retainOnClose:e.retainOnClose}}function b(e){return!!(e.leaseProvider??e.deviceKey??e.clientId)}function x(e,t){return!t.tenantId||!t.runId?!1:[[e.leaseProvider,t.leaseProvider],[e.deviceKey,t.deviceKey],[e.clientId,t.clientId]].every(([e,t])=>!e||!!t)}function S(t,n){let r=w(n);if(r.tenantId&&t.tenantId!==r.tenantId||r.runId&&t.runId!==r.runId||r.leaseBackend&&t.backend!==r.leaseBackend||r.leaseProvider&&t.leaseProvider!==r.leaseProvider||r.deviceKey&&t.deviceKey!==r.deviceKey||r.clientId&&t.clientId!==r.clientId)throw new e(`UNAUTHORIZED`,`Lease does not match tenant/run scope`,{reason:`LEASE_SCOPE_MISMATCH`})}function C(t){let n=f(t.leaseBackend),r=o(t.tenantId);if(!r)throw new e(`INVALID_ARGS`,`tenant isolation requires tenant id.`);let i=l(t.runId);if(!i)throw new e(`INVALID_ARGS`,`tenant isolation requires run id.`);let a=u(t.leaseId);if(!a)throw new e(`INVALID_ARGS`,`tenant isolation requires lease id.`);return{...t,tenantId:r,runId:i,leaseId:a,leaseBackend:n}}function w(t){let n=o(t.tenantId),r=l(t.runId);if(t.tenantId&&!n)throw new e(`INVALID_ARGS`,`Invalid tenant id. Use 1-128 chars: letters, numbers, dot, underscore, hyphen.`);if(t.runId&&!r)throw new e(`INVALID_ARGS`,`Invalid run id. Use 1-128 chars: letters, numbers, dot, underscore, hyphen.`);return{tenantId:n,runId:r,leaseBackend:t.leaseBackend?f(t.leaseBackend):void 0,leaseProvider:h(t.leaseProvider),deviceKey:p(t.deviceKey),clientId:m(t.clientId)}}function T(t,n){if(b(t)&&!x(t,n))throw new e(`UNAUTHORIZED`,`Lease owner scope is required`,{reason:`LEASE_SCOPE_REQUIRED`})}function E(e,t){return e.tenantId===t.tenantId&&e.runId===t.runId&&e.backend===t.backend&&e.leaseProvider===t.leaseProvider&&e.deviceKey===t.deviceKey&&e.clientId===t.clientId}function D(e){if(e.deviceKey)return JSON.stringify([e.backend,e.leaseProvider??s,e.deviceKey])}function O(e){return JSON.stringify([e.tenantId,e.runId,e.backend,e.leaseProvider??s,e.deviceKey??`*`])}function k(e,t,n){return{leaseId:i.randomBytes(16).toString(`hex`),tenantId:e.tenantId,runId:e.runId,backend:e.backend,...e.leaseProvider?{leaseProvider:e.leaseProvider}:{},...e.deviceKey?{deviceKey:e.deviceKey}:{},...e.clientId?{clientId:e.clientId}:{},...e.retainOnClose?{retainOnClose:!0}:{},createdAt:n,heartbeatAt:n,expiresAt:n+t}}function A(e){return e.expiresAt-e.heartbeatAt}function j(t){return new e(`DEVICE_IN_USE`,`Device is already leased`,{reason:`DEVICE_LEASE_BUSY`,deviceKey:t.deviceKey,backend:t.backend,leaseProvider:t.leaseProvider,expiresAt:t.expiresAt,hint:`Retry after the lease expires or close the owning session.`})}function M(e){return n({leaseId:e.leaseId,tenantId:e.tenantId,runId:e.runId,leaseBackend:e.backend,leaseProvider:e.leaseProvider,deviceKey:e.deviceKey,clientId:e.clientId})}export{d as _,j as a,A as c,y as d,p as f,h as g,u as h,c as i,M as l,f as m,S as n,E as o,C as p,k as r,D as s,T as t,O as u,o as v,a as y};
@@ -1 +1 @@
1
- import{k as e}from"./sdk-batch-runner.js";const t=[`leaseId`,`tenantId`,`runId`,`clientId`,`deviceKey`];function n(t){return e({tenantId:t.meta?.tenantId??y(t.flags,`tenant`),runId:t.meta?.runId??y(t.flags,`runId`),leaseId:t.meta?.leaseId??y(t.flags,`leaseId`),leaseTtlMs:t.meta?.leaseTtlMs,leaseBackend:t.meta?.leaseBackend,leaseProvider:t.meta?.leaseProvider??y(t.flags,`leaseProvider`)??y(t.flags,`provider`),deviceKey:t.meta?.deviceKey??y(t.flags,`deviceKey`),clientId:t.meta?.clientId??y(t.flags,`clientId`)})}function r(t){return e({tenantId:t.tenant,runId:t.runId,leaseId:t.leaseId,leaseTtlMs:t.leaseTtlMs??t.ttlMs,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider??t.provider,deviceKey:t.deviceKey,clientId:t.clientId})}function i(t){return e({tenantId:t.tenantId,runId:t.runId,leaseId:t.leaseId,leaseTtlMs:t.leaseTtlMs,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId})}function a(t){return e({tenant:t.tenantId,runId:t.runId,leaseId:t.leaseId,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId})}function o(t){return e({tenantId:t.tenantId??``,runId:t.runId??``,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId,ttlMs:t.leaseTtlMs})}function s(e){return v(e)}function c(e){let{ttlMs:t,...n}=v(e);return n}function l(t,n,r){let i=e({...r.includeTokenParam?{token:r.token}:{},session:r.session,tenantId:t.tenantId,runId:t.runId,leaseProvider:t.leaseProvider,clientId:t.clientId,deviceKey:t.deviceKey});switch(n){case`lease_allocate`:return{...i,...e({ttlMs:t.leaseTtlMs,backend:t.leaseBackend})};case`lease_heartbeat`:return{...i,...e({leaseId:t.leaseId,ttlMs:t.leaseTtlMs})};case`lease_release`:return{...i,...e({leaseId:t.leaseId})}}}const u=[`platform`,`device`,`providerApp`,`providerOsVersion`,`providerProject`,`providerBuild`,`providerSessionName`,`providerDeviceOrientation`,`providerGeoLocation`,`providerTimezone`,`providerAppiumVersion`,`providerLanguage`,`providerLocale`,`providerNetworkProfile`,`providerCustomNetwork`,`providerNoResignApp`,`awsProjectArn`,`awsDeviceArn`,`awsAppArn`,`awsRegion`,`awsInteractionMode`];function d(e){let t={};for(let n of u){let r=e?.[n];(typeof r==`string`||typeof r==`boolean`)&&(t[n]=r)}return t}function f(t){let n=e({leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId});return Object.keys(n).length>0?n:void 0}function p(e){return e.leaseProvider===`proxy`}function m(e){return p(e)?t.filter(t=>!e[t]):[]}const h=5e3,g=new Set([`LEASE_NOT_FOUND`,`LEASE_EXPIRED`,`LEASE_REVOKED`]);function _(e){return typeof e==`object`&&!!e&&e.code===`UNAUTHORIZED`&&g.has(e.details?.reason)}function v(t){return e({leaseId:t.leaseId??``,tenantId:t.tenantId,runId:t.runId,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId,ttlMs:t.leaseTtlMs})}function y(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}export{r as a,a as c,l as d,c as f,p as i,f as l,d as m,m as n,n as o,i as p,_ as r,o as s,h as t,s as u};
1
+ import{A as e}from"./sdk-batch-runner.js";const t=[`leaseId`,`tenantId`,`runId`,`clientId`,`deviceKey`];function n(t){return e({tenantId:t.meta?.tenantId??y(t.flags,`tenant`),runId:t.meta?.runId??y(t.flags,`runId`),leaseId:t.meta?.leaseId??y(t.flags,`leaseId`),leaseTtlMs:t.meta?.leaseTtlMs,leaseRetainOnClose:t.meta?.leaseRetainOnClose,leaseBackend:t.meta?.leaseBackend,leaseProvider:t.meta?.leaseProvider??y(t.flags,`leaseProvider`)??y(t.flags,`provider`),deviceKey:t.meta?.deviceKey??y(t.flags,`deviceKey`),clientId:t.meta?.clientId??y(t.flags,`clientId`)})}function r(t){return e({tenantId:t.tenant,runId:t.runId,leaseId:t.leaseId,leaseTtlMs:t.leaseTtlMs??t.ttlMs,leaseRetainOnClose:t.retainOnClose,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider??t.provider,deviceKey:t.deviceKey,clientId:t.clientId})}function i(t){return e({tenantId:t.tenantId,runId:t.runId,leaseId:t.leaseId,leaseTtlMs:t.leaseTtlMs,leaseRetainOnClose:t.leaseRetainOnClose,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId})}function a(t){return e({tenant:t.tenantId,runId:t.runId,leaseId:t.leaseId,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId})}function o(t){return e({tenantId:t.tenantId??``,runId:t.runId??``,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId,ttlMs:t.leaseTtlMs,retainOnClose:t.leaseRetainOnClose})}function s(e){return v(e)}function c(e){let{ttlMs:t,...n}=v(e);return n}function l(t,n,r){let i=e({...r.includeTokenParam?{token:r.token}:{},session:r.session,tenantId:t.tenantId,runId:t.runId,leaseProvider:t.leaseProvider,clientId:t.clientId,deviceKey:t.deviceKey});switch(n){case`lease_allocate`:return{...i,...e({ttlMs:t.leaseTtlMs,retainOnClose:t.leaseRetainOnClose,backend:t.leaseBackend})};case`lease_heartbeat`:return{...i,...e({leaseId:t.leaseId,ttlMs:t.leaseTtlMs})};case`lease_release`:return{...i,...e({leaseId:t.leaseId})}}}const u=[`platform`,`device`,`providerApp`,`providerOsVersion`,`providerProject`,`providerBuild`,`providerSessionName`,`providerDeviceOrientation`,`providerGeoLocation`,`providerTimezone`,`providerAppiumVersion`,`providerLanguage`,`providerLocale`,`providerNetworkProfile`,`providerCustomNetwork`,`providerNoResignApp`,`awsProjectArn`,`awsDeviceArn`,`awsAppArn`,`awsRegion`,`awsInteractionMode`];function d(e){let t={};for(let n of u){let r=e?.[n];(typeof r==`string`||typeof r==`boolean`)&&(t[n]=r)}return t}function f(t){let n=e({leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId});return Object.keys(n).length>0?n:void 0}function p(e){return e.leaseProvider===`proxy`}function m(e){return p(e)?t.filter(t=>!e[t]):[]}const h=5e3,g=new Set([`LEASE_NOT_FOUND`,`LEASE_EXPIRED`,`LEASE_REVOKED`]);function _(e){return typeof e==`object`&&!!e&&e.code===`UNAUTHORIZED`&&g.has(e.details?.reason)}function v(t){return e({leaseId:t.leaseId??``,tenantId:t.tenantId,runId:t.runId,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId,ttlMs:t.leaseTtlMs})}function y(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}export{r as a,a as c,l as d,c as f,p as i,f as l,d as m,m as n,n as o,i as p,_ as r,o as s,h as t,s as u};
package/dist/src/lease.js CHANGED
@@ -1 +1 @@
1
- import{F as e,N as t,V as n}from"./sdk-contracts.js";import{f as r,i,s as a,u as o}from"./lease-scope.js";import{in as s}from"./sdk-batch.js";import{n as c}from"./catalog.js";import{i as l,r as u}from"./request-cancel.js";import"./request.js";import{a as d,n as f}from"./provider-session-ownership.js";import{n as p,r as m}from"./lease-context.js";async function h(e){let{req:t,sessionName:n,sessionStore:i,leaseRegistry:d,providerRuntimeIds:f,providerRuntimeRequiredIds:h,leaseLifecycleProvider:y,cloudArtifactProvider:b}=e,w=p(t);switch(t.command){case c.artifacts:return{ok:!0,data:await C(t,m(t,i.get(n)),d,b)};case`lease_allocate`:{S(w.leaseProvider,f,h);let e=d.allocateLease(a(w));return await d.runDeviceMutation(e,async()=>{let n;try{n=await y?.allocate?.(e,{...x(t),signal:u(t.meta?.requestId),deadline:Date.now()+s}),k(d,e,n)}catch(t){throw d.releaseLease(g(e)),t}if(l(t.meta?.requestId))throw await v(e,y,d);return{ok:!0,data:{lease:e,...n?{provider:n}:{}}}})}case`lease_heartbeat`:{let e=d.heartbeatLease(o(w)),n=await y?.heartbeat?.(e,x(t));return{ok:!0,data:{lease:e,...n?{provider:n}:{}}}}case`lease_release`:{let e=r(w),n=d.getLease(e),i=await d.runDeviceMutation(n,async()=>await _(d,y,n,e,x(t)));return{ok:!0,data:{released:i.registryReleased,...i.provider?{provider:i.provider}:{}}}}default:return null}}function g(e){return r({leaseId:e.leaseId,tenantId:e.tenantId,runId:e.runId,leaseBackend:e.backend,leaseProvider:e.leaseProvider,deviceKey:e.deviceKey,clientId:e.clientId})}async function _(e,t,n,r,i){let a=n?await t?.release?.(n,i):void 0;return n&&k(e,n,a),{registryReleased:e.releaseLease(r).released,provider:a}}async function v(e,t,r){let i=g(e),a,o;try{a=await _(r,t,e,i)}catch(e){o=n(e),a={registryReleased:r.releaseLease(i).released}}return y(e,a,o)}function y(t,n,r){let i=n.provider?.providerSessionId,a=Array.isArray(n.provider?.warnings)?n.provider.warnings:[],o=n.registryReleased&&r===void 0&&a.length===0;return e({leaseId:t.leaseId,leaseProvider:t.leaseProvider,released:o,registryReleased:n.registryReleased,providerSessionId:i,...a.length>0?{warnings:a}:{},...r===void 0?{}:{releaseError:r},hint:b(o,t.leaseId,i)})}function b(e,t,n){return e?`The lease request was canceled while the provider was still allocating; the session it produced was released.`:`The lease request was canceled while the provider was still allocating, and the session it produced could NOT be confirmed released — it may still be running and billing. Stop provider session ${String(n??`(unknown)`)} for lease ${t} by hand.`}function x(e){return{flags:e.flags,...typeof e.flags?.providerApp==`string`?{initialApp:e.flags.providerApp}:{},cwd:typeof e.meta?.cwd==`string`?e.meta.cwd:void 0,...e.internal?.publicNetworkOnly?{publicNetworkOnly:!0}:{}}}function S(e,n,r){if(!(!e||n===void 0||r===void 0||!r.includes(e)||n.includes(e)))throw new t(`UNSUPPORTED_OPERATION`,`Provider "${e}" is not available in this daemon runtime.`,{provider:e,hint:`Restart the daemon with ${e} configured, then retry lease allocation.`})}async function C(e,t,n,r){let i=O(e.flags,`providerSessionId`);return w(t,i)?await T(t.tenantId):await E(t,i,n,r)}function w(e,t){return i(e)||!e.leaseProvider&&!t}async function T(e){let t=await d(e);return{source:`daemon`,status:`ready`,artifacts:t,...t.length===0?{message:`No daemon artifacts available.`}:{}}}async function E(e,n,r,i){if(!e.leaseProvider)throw new t(`INVALID_ARGS`,`artifacts requires --provider for provider session lookup or an active cloud connection.`);if(!e.leaseId&&!n)throw new t(`INVALID_ARGS`,`artifacts requires an active cloud lease or --provider-session <id>.`);let a=D(r,e,n),o=await i?.listCloudArtifacts?.({provider:e.leaseProvider,leaseId:a?.leaseId??e.leaseId,providerSessionId:n});if(!o)throw new t(`UNSUPPORTED_OPERATION`,`Cloud artifacts are not available for provider "${e.leaseProvider}".`);return o}function D(e,n,r){if(!r)return;let i=e.resolveProviderSession({provider:n.leaseProvider,providerSessionId:r,tenantId:n.tenantId});if(i)return i;throw new t(`UNAUTHORIZED`,`Provider session is not owned by the request tenant`,{reason:`PROVIDER_SESSION_NOT_OWNED`})}function O(e,t){let n=e?.[t];return typeof n==`string`&&n.trim().length>0?n.trim():void 0}function k(e,t,n){let r=f(n);r&&e.recordProviderSession(t,r)}export{h as handleLeaseCommands};
1
+ import{H as e,I as t,P as n}from"./sdk-contracts.js";import{f as r,i,s as a,u as o}from"./lease-scope.js";import{in as s}from"./sdk-batch.js";import{n as c}from"./catalog.js";import{s as l}from"./device-shell.js";import{l as u,m as d}from"./lease-registry-scope.js";import{i as f,r as p}from"./request-cancel.js";import"./request.js";import{a as m,n as h}from"./provider-session-ownership.js";import{n as g,r as _}from"./lease-context.js";async function v(e){let{req:t,sessionName:n,sessionStore:i,leaseRegistry:l,providerRuntimeIds:d,providerRuntimeRequiredIds:m,providerCredentials:h,leaseLifecycleProvider:v,cloudArtifactProvider:S}=e,C=g(t);switch(t.command){case c.artifacts:return{ok:!0,data:await D(t,_(t,i.get(n)),l,S)};case`lease_allocate`:{F(C.leaseBackend),T(C.leaseProvider,d,m),E(C,t.meta?.providerCredentialFingerprint,h);let e=new Set(l.listActiveLeases().map(e=>e.leaseId)),n=l.allocateLease(a(C)),r=e.has(n.leaseId),i=t.meta?.requestId;return await l.runDeviceMutation(n,async()=>{let e,a=v?.allocate?l.retainLeaseWork(n,()=>!f(i)):void 0;try{e=await v?.allocate?.(n,{...w(t),signal:p(i),deadline:Date.now()+s}),N(l,n,e)}catch(e){throw await b(n,r,i,v,l),e}finally{a?.release()}if(f(i))throw await x(n,v,l);return{ok:!0,data:{lease:l.getLease(u(n))??n,...e?{provider:e}:{}}}})}case`lease_heartbeat`:{let e=l.heartbeatLease(o(C)),n=await v?.heartbeat?.(e,w(t));return{ok:!0,data:{lease:e,...n?{provider:n}:{}}}}case`lease_release`:{let e=r(C),n=l.getLease(e);P(n);let i=await l.runDeviceMutation(n,async()=>await y(l,v,n,e,w(t)));return{ok:!0,data:{released:i.registryReleased,...i.provider?{provider:i.provider}:{}}}}default:return null}}async function y(e,t,n,r,i){let a=n?await t?.release?.(n,i):void 0;return n&&N(e,n,a),{registryReleased:e.releaseLease(r).released,provider:a}}async function b(e,t,n,r,i){if(!t){i.releaseLease(u(e));return}if(f(n))throw await x(e,r,i)}async function x(t,n,r){let i=u(t),a,o;try{a=await y(r,n,t,i)}catch(t){o=e(t),a={registryReleased:r.releaseLease(i).released}}return S(t,a,o)}function S(e,n,r){let i=n.provider?.providerSessionId,a=Array.isArray(n.provider?.warnings)?n.provider.warnings:[],o=n.registryReleased&&r===void 0&&a.length===0;return t({leaseId:e.leaseId,leaseProvider:e.leaseProvider,released:o,registryReleased:n.registryReleased,providerSessionId:i,...a.length>0?{warnings:a}:{},...r===void 0?{}:{releaseError:r},hint:C(o,e.leaseId,i)})}function C(e,t,n){return e?`The lease request was canceled while the provider was still allocating; the session it produced was released.`:`The lease request was canceled while the provider was still allocating, and the session it produced could NOT be confirmed released — it may still be running and billing. Stop provider session ${String(n??`(unknown)`)} for lease ${t} by hand.`}function w(e){return{flags:e.flags,...typeof e.flags?.providerApp==`string`?{initialApp:e.flags.providerApp}:{},cwd:typeof e.meta?.cwd==`string`?e.meta.cwd:void 0,...e.internal?.publicNetworkOnly?{publicNetworkOnly:!0}:{}}}function T(e,t,r){if(!(!e||t===void 0||r===void 0||!r.includes(e)||t.includes(e)))throw new n(`UNSUPPORTED_OPERATION`,`Provider "${e}" is not available in this daemon runtime.`,{provider:e,hint:`Restart the daemon with ${e} configured, then retry lease allocation.`})}function E({leaseProvider:e,leaseBackend:t},r,i){if(!i||!e||!r)return;let a=i.fingerprint(e,t);if(r!==a)throw new n(`INVALID_ARGS`,a?`The running daemon holds different ${e} credentials than this shell.`:`The running daemon was started without the ${e} credentials this shell holds.`,{reason:`provider-credentials-changed`,provider:e,hint:`Stop it with agent-device daemon stop --state-dir ${l(i.stateDir)}, then rerun the command so a new daemon starts with this shell's environment.`})}async function D(e,t,n,r){let i=M(e.flags,`providerSessionId`);return O(t,i)?await k(t.tenantId):await A(t,i,n,r)}function O(e,t){return i(e)||!e.leaseProvider&&!t}async function k(e){let t=await m(e);return{source:`daemon`,status:`ready`,artifacts:t,...t.length===0?{message:`No daemon artifacts available.`}:{}}}async function A(e,t,r,i){if(!e.leaseProvider)throw new n(`INVALID_ARGS`,`artifacts requires --provider for provider session lookup or an active cloud connection.`);if(!e.leaseId&&!t)throw new n(`INVALID_ARGS`,`artifacts requires an active cloud lease or --provider-session <id>.`);let a=j(r,e,t),o=await i?.listCloudArtifacts?.({provider:e.leaseProvider,leaseId:a?.leaseId??e.leaseId,providerSessionId:t});if(!o)throw new n(`UNSUPPORTED_OPERATION`,`Cloud artifacts are not available for provider "${e.leaseProvider}".`);return o}function j(e,t,r){if(!r)return;let i=e.resolveProviderSession({provider:t.leaseProvider,providerSessionId:r,tenantId:t.tenantId});if(i)return i;throw new n(`UNAUTHORIZED`,`Provider session is not owned by the request tenant`,{reason:`PROVIDER_SESSION_NOT_OWNED`})}function M(e,t){let n=e?.[t];return typeof n==`string`&&n.trim().length>0?n.trim():void 0}function N(e,t,n){let r=h(n);r&&e.recordProviderSession(t,r)}function P(e){if(e?.backend===`macos-app`)throw new n(`UNAUTHORIZED`,`A macos-app lease is released by the host administrator.`,{reason:`MACOS_APP_LEASE_HOST_OWNED`,retriable:!1,hint:`Disconnect only drops the client connection; the host ends the lease.`})}function F(e){if(d(e)===`macos-app`)throw new n(`UNAUTHORIZED`,`A macos-app lease is allocated by the host administrator.`,{reason:`MACOS_APP_LEASE_HOST_ALLOCATED`,retriable:!1,hint:`Ask the host administrator for a macos-app lease and connect with its leaseId.`})}export{v as handleLeaseCommands};
@@ -1 +1 @@
1
- import e from"node:path";import t from"node:fs";import n from"node:os";function r(r,c=e.join(n.homedir(),`Library`,`Developer`,`XCTestDevices`)){let l=`${c}.agent-device-backup`;try{if(o(c)){let e=s(c);i(c),r({phase:`ios_runner_legacy_xctest_device_set_link_removed`,resourcePath:c,data:{linkTarget:e}})}t.existsSync(l)&&!t.existsSync(c)&&(a(l,c),r({phase:`ios_runner_legacy_xctest_device_set_backup_restored`,resourcePath:c,data:{backupPath:l}}))}catch(e){r({phase:`ios_runner_legacy_xctest_device_set_restore_failed`,resourcePath:c,data:{error:e instanceof Error?e.message:String(e)}})}}function i(e){try{t.unlinkSync(e)}catch(t){if(o(e))throw t}}function a(e,n){try{t.renameSync(e,n)}catch(r){if(t.existsSync(e)&&!t.existsSync(n))throw r}}function o(e){return t.lstatSync(e,{throwIfNoEntry:!1})?.isSymbolicLink()??!1}function s(e){try{return t.readlinkSync(e)}catch{return}}export{r as restoreLegacyXctestDeviceSetRedirect};
1
+ import e from"node:fs";import t from"node:os";import n from"node:path";function r(r,c=n.join(t.homedir(),`Library`,`Developer`,`XCTestDevices`)){let l=`${c}.agent-device-backup`;try{if(o(c)){let e=s(c);i(c),r({phase:`ios_runner_legacy_xctest_device_set_link_removed`,resourcePath:c,data:{linkTarget:e}})}e.existsSync(l)&&!e.existsSync(c)&&(a(l,c),r({phase:`ios_runner_legacy_xctest_device_set_backup_restored`,resourcePath:c,data:{backupPath:l}}))}catch(e){r({phase:`ios_runner_legacy_xctest_device_set_restore_failed`,resourcePath:c,data:{error:e instanceof Error?e.message:String(e)}})}}function i(t){try{e.unlinkSync(t)}catch(e){if(o(t))throw e}}function a(t,n){try{e.renameSync(t,n)}catch(r){if(e.existsSync(t)&&!e.existsSync(n))throw r}}function o(t){return e.lstatSync(t,{throwIfNoEntry:!1})?.isSymbolicLink()??!1}function s(t){try{return e.readlinkSync(t)}catch{return}}export{r as restoreLegacyXctestDeviceSetRedirect};
@@ -1 +1 @@
1
- import{N as e}from"./sdk-contracts.js";import t from"node:path";import n from"node:fs";import{Readable as r}from"node:stream";import{pipeline as i}from"node:stream/promises";async function a(a){let s=AbortSignal.timeout(a.timeoutMs);try{await n.promises.mkdir(t.dirname(a.destinationPath),{recursive:!0});let c=await fetch(a.url,{method:`GET`,headers:a.headers,signal:s});if(!c.ok)throw await o(c,a);if(!c.body)throw new e(`COMMAND_FAILED`,`Limrun download returned no body`,{url:a.url});await i(r.fromWeb(c.body),n.createWriteStream(a.destinationPath),{signal:s})}catch(e){throw await n.promises.rm(a.destinationPath,{force:!0}).catch(()=>{}),c(e,a,s)}}async function o(t,n){return new e(`COMMAND_FAILED`,`Limrun download failed with HTTP ${t.status}`,{url:n.url,statusCode:t.status,body:await s(t)})}async function s(e){if(!e.body)return``;let t=e.body.getReader(),n=[],r=0;try{for(;r<500;){let{done:e,value:i}=await t.read();if(e)break;let a=500-r;n.push(i.subarray(0,a)),r+=i.byteLength}}finally{t.cancel().catch(()=>{})}return Buffer.concat(n).toString(`utf8`)}function c(t,n,r){return r.aborted?new e(`COMMAND_FAILED`,`Limrun download timed out`,{url:n.url,timeoutMs:n.timeoutMs}):t instanceof e?t:new e(`COMMAND_FAILED`,`Limrun download failed`,{url:n.url,reason:t instanceof Error?t.message:String(t)})}export{a as downloadLimrunFile};
1
+ import{P as e}from"./sdk-contracts.js";import t from"node:fs";import n from"node:path";import{Readable as r}from"node:stream";import{pipeline as i}from"node:stream/promises";async function a(a){let s=AbortSignal.timeout(a.timeoutMs);try{await t.promises.mkdir(n.dirname(a.destinationPath),{recursive:!0});let c=await fetch(a.url,{method:`GET`,headers:a.headers,signal:s});if(!c.ok)throw await o(c,a);if(!c.body)throw new e(`COMMAND_FAILED`,`Limrun download returned no body`,{url:a.url});await i(r.fromWeb(c.body),t.createWriteStream(a.destinationPath),{signal:s})}catch(e){throw await t.promises.rm(a.destinationPath,{force:!0}).catch(()=>{}),c(e,a,s)}}async function o(t,n){return new e(`COMMAND_FAILED`,`Limrun download failed with HTTP ${t.status}`,{url:n.url,statusCode:t.status,body:await s(t)})}async function s(e){if(!e.body)return``;let t=e.body.getReader(),n=[],r=0;try{for(;r<500;){let{done:e,value:i}=await t.read();if(e)break;let a=500-r;n.push(i.subarray(0,a)),r+=i.byteLength}}finally{t.cancel().catch(()=>{})}return Buffer.concat(n).toString(`utf8`)}function c(t,n,r){return r.aborted?new e(`COMMAND_FAILED`,`Limrun download timed out`,{url:n.url,timeoutMs:n.timeoutMs}):t instanceof e?t:new e(`COMMAND_FAILED`,`Limrun download failed`,{url:n.url,reason:t instanceof Error?t.message:String(t)})}export{a as downloadLimrunFile};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime.js";import{N as t}from"./sdk-contracts.js";import{c as n,n as r}from"./exec.js";import"./command.js";import{a as i}from"./version.js";import{_ as a}from"./adb-executor.js";import{i as o,o as s,r as c}from"./adb-transport.js";import"./mechanics.js";import"./platform-runtime-android-adb-host.js";import{n as l}from"./android.js";var u=e({createLimrunRuntimeDependencies:()=>d});function d(){return{clientVersion:i(),android:{createInteractor:(e,t)=>l(e,t),createPortReverse:async e=>{let{createAndroidPortReverseManager:t}=await import(`./mechanics.js`).then(e=>e.r);return t(e)},inferAppName:async e=>{let{inferAndroidAppName:t}=await import(`./mechanics.js`).then(e=>e.r);return t(e)},listApps:async(e,t)=>{let{listAndroidAppsWithAdb:n}=await import(`./mechanics.js`).then(e=>e.r);return(await n(e,{filter:t,target:`mobile`})).map(e=>({id:e.package,name:e.name}))},getForegroundApp:async(e,t,n)=>{let{getAndroidAppStateWithAdb:r}=await import(`./platform-runtime.js`).then(e=>e.a),i=await r(async(e,r)=>await t(e,{...r,signal:n}),n);return i.package?{appId:i.package,activity:i.activity}:void 0},getKeyboardState:async e=>{let{getAndroidKeyboardStatusWithAdb:t}=await import(`./mechanics.js`).then(e=>e.r);return await t(e)},dismissKeyboard:async e=>{let{dismissAndroidKeyboardWithAdb:t}=await import(`./mechanics.js`).then(e=>e.r);return await t(e)},readLogs:async(e,t)=>{let{captureAndroidLogcatWithAdb:n}=await import(`./mechanics.js`).then(e=>e.r);return await n(e,{lines:t,timeoutMs:5e3})},forceStopApp:async(e,t,n)=>{let{runAdbShell:r}=await import(`./mechanics.js`).then(e=>e.r);await r(async(t,r)=>await e(t,{...r,signal:n}),[`am`,`force-stop`,t],{allowFailure:!0})},deviceAdbInvocation:(e,t)=>o(s(e),t),hostAdbInvocation:e=>o(c(),e),adbError:async(e,t,n)=>{let{androidAdbResultError:r,serializeAndroidAdbInvocation:i}=await import(`./mechanics.js`).then(e=>e.r);return r(e,t,n?{command:`adb ${i(n).join(` `)}`}:void 0)}},host:{runAdb:async(e,t)=>await a(e,t),downloadFile:async e=>{let{downloadLimrunFile:t}=await import(`./limrun-download-file.js`);await t(e)},archiveDirectory:async({sourceDirectory:e,entryName:i,archivePath:a})=>{let o=[`-qr`,a,i],s=await n(`zip`,o,{cwd:e,timeoutMs:12e4});if(s.exitCode!==0)throw new t(`COMMAND_FAILED`,`Failed to package iOS .app for Limrun install`,{command:[`zip`,...o].join(` `),...r(s)})}},ios:{resolveAppAlias:async e=>{let{resolveIosAppAlias:t}=await import(`./app-resolution-facade.js`);return t(e)},readBundleAppName:async e=>{let{readIosBundleInfo:t}=await import(`./install-artifact-facade.js`);return(await t(e)).appName}}}}export{u as n,d as t};
1
+ import{r as e}from"./rolldown-runtime.js";import{P as t}from"./sdk-contracts.js";import{l as n,r}from"./exec.js";import"./command.js";import{a as i}from"./version.js";import{_ as a}from"./adb-executor.js";import{i as o,o as s,r as c}from"./adb-transport.js";import"./mechanics.js";import"./platform-runtime-android-adb-host.js";import{n as l}from"./android.js";var u=e({createLimrunRuntimeDependencies:()=>d});function d(){return{clientVersion:i(),android:{createInteractor:(e,t)=>l(e,t),createPortReverse:async(e,t)=>{let{createAndroidPortReverseManager:n}=await import(`./mechanics.js`).then(e=>e.r);return n(e,t)},inferAppName:async e=>{let{inferAndroidAppName:t}=await import(`./mechanics.js`).then(e=>e.r);return t(e)},listApps:async(e,t)=>{let{listAndroidAppsWithAdb:n}=await import(`./mechanics.js`).then(e=>e.r);return(await n(e,{filter:t,target:`mobile`})).map(e=>({id:e.package,name:e.name}))},getForegroundApp:async(e,t,n)=>{let{getAndroidAppStateWithAdb:r}=await import(`./platform-runtime.js`).then(e=>e.a),i=await r(async(e,r)=>await t(e,{...r,signal:n}),n);return i.package?{appId:i.package,activity:i.activity}:void 0},getKeyboardState:async e=>{let{getAndroidKeyboardStatusWithAdb:t}=await import(`./mechanics.js`).then(e=>e.r);return await t(e)},dismissKeyboard:async e=>{let{dismissAndroidKeyboardWithAdb:t}=await import(`./mechanics.js`).then(e=>e.r);return await t(e)},readLogs:async(e,t)=>{let{captureAndroidLogcatWithAdb:n}=await import(`./mechanics.js`).then(e=>e.r);return await n(e,{lines:t,timeoutMs:5e3})},forceStopApp:async(e,t,n)=>{let{runAdbShell:r}=await import(`./mechanics.js`).then(e=>e.r);await r(async(t,r)=>await e(t,{...r,signal:n}),[`am`,`force-stop`,t],{allowFailure:!0})},deviceAdbInvocation:(e,t)=>o(s(e),t),hostAdbInvocation:e=>o(c(),e),adbError:async(e,t,n)=>{let{androidAdbResultError:r,serializeAndroidAdbInvocation:i}=await import(`./mechanics.js`).then(e=>e.r);return r(e,t,n?{command:`adb ${i(n).join(` `)}`}:void 0)}},host:{runAdb:async(e,t)=>await a(e,t),downloadFile:async e=>{let{downloadLimrunFile:t}=await import(`./limrun-download-file.js`);await t(e)},archiveDirectory:async({sourceDirectory:e,entryName:i,archivePath:a})=>{let o=[`-qr`,a,i],s=await n(`zip`,o,{cwd:e,timeoutMs:12e4});if(s.exitCode!==0)throw new t(`COMMAND_FAILED`,`Failed to package iOS .app for Limrun install`,{command:[`zip`,...o].join(` `),...r(s)})}},ios:{applySimctlSetting:async e=>{let{applySimctlSetting:t}=await import(`./simctl-settings-facade.js`);return await t(e)},resolveAppAlias:async e=>{let{resolveIosAppAlias:t}=await import(`./app-resolution-facade.js`);return t(e)},readBundleAppName:async e=>{let{readIosBundleInfo:t}=await import(`./install-artifact-facade.js`);return(await t(e)).appName}}}}export{u as n,d as t};
@@ -1,7 +1,7 @@
1
1
  import { A as Rect, D as IosTargetActivation, F as SnapshotOptions$1, I as SnapshotProvenance, N as SnapshotKeyboardBandFact, O as Point, S as DeviceTarget, b as DeviceInfo, f as LeaseBackend, k as RawSnapshotNode, w as PlatformSelector, x as DeviceKind } from "./sdk-contracts.js";
2
2
  import { s as AppsFilter, t as GesturePlan } from "./gesture-plan-types.js";
3
- import { A as SessionSurface, E as BackendSnapshotResult, b as ScrollDirection, c as BackMode, h as SettingOptions, i as DeviceRotation, m as ReadableSetting, n as ScrollExecutionOptions, p as ReadSettingResult, r as TvRemoteButton, v as CloudArtifactProvider } from "./scroll-command.js";
4
3
  import { d as AndroidAdbProvider, m as AppStateRuntimeResult, n as AndroidKeyboardState, s as AndroidInputOwner, t as AndroidKeyboardDismissResult } from "./device-input-state.js";
4
+ import { A as BackMode, E as DeviceRotation, a as BackendSnapshotResult, b as ScrollExecutionOptions, g as SettingOptions, h as ReadableSetting, l as SessionSurface, m as ReadSettingResult, n as CloudArtifactProvider, v as TvRemoteButton, x as ScrollDirection } from "./cloud-artifacts.js";
5
5
  //#region packages/contracts/src/device-inventory.d.ts
6
6
  type DeviceInventoryRequest = {
7
7
  platform?: PlatformSelector;
@@ -23,46 +23,6 @@ type DeviceInventoryRequest = {
23
23
  };
24
24
  type ProviderDeviceInventoryRequest = Omit<DeviceInventoryRequest, 'booted' | 'kind'>;
25
25
  //#endregion
26
- //#region packages/contracts/src/device-provider.d.ts
27
- type DeviceLease = {
28
- leaseId: string;
29
- tenantId: string;
30
- runId: string;
31
- backend: LeaseBackend;
32
- leaseProvider?: string;
33
- deviceKey?: string;
34
- clientId?: string;
35
- createdAt: number;
36
- heartbeatAt: number;
37
- expiresAt: number;
38
- };
39
- type LeaseLifecycleContext = {
40
- flags?: Readonly<Record<string, unknown>>;
41
- initialApp?: string;
42
- cwd?: string;
43
- publicNetworkOnly?: boolean;
44
- /** Request-bound cancellation (explicit cancel or client disconnect). */
45
- signal?: AbortSignal;
46
- /**
47
- * Epoch-ms deadline by which `allocate` must have settled; derived from the
48
- * same budget as the client's `lease_allocate` envelope, so a provider that
49
- * fits its remote phases within it is never abandoned by a client first.
50
- */
51
- deadline?: number;
52
- };
53
- type LeaseLifecycleProvider = {
54
- allocate?: (lease: DeviceLease, context?: LeaseLifecycleContext) => Promise<Record<string, unknown> | undefined>;
55
- heartbeat?: (lease: DeviceLease, context?: LeaseLifecycleContext) => Promise<Record<string, unknown> | undefined>;
56
- release?: (lease: DeviceLease, context?: LeaseLifecycleContext) => Promise<Record<string, unknown> | undefined>;
57
- };
58
- type DeviceInventoryProvider = (request: ProviderDeviceInventoryRequest, signal?: AbortSignal) => Promise<DeviceInfo[] | null | undefined>;
59
- type ProviderAppCatalogQuery = Readonly<{
60
- provider: string;
61
- platform: 'android' | 'ios';
62
- publicNetworkOnly?: boolean;
63
- }>;
64
- type ProviderAppCatalogHandler = (query: ProviderAppCatalogQuery, signal?: AbortSignal) => Promise<readonly string[]>;
65
- //#endregion
66
26
  //#region packages/contracts/src/ios-system-surface.d.ts
67
27
  /**
68
28
  * iOS out-of-process system surfaces that agent-device observes and drives IN PLACE, never by
@@ -200,6 +160,14 @@ type ScreenshotOptions = {
200
160
  skipIosSimulatorBootCheck?: boolean;
201
161
  captureBackend?: 'runner';
202
162
  };
163
+ /**
164
+ * What the capture owner observed while writing the image. `displayRotation` is the rotation the display
165
+ * rendered the pixels in, so a landscape value pairs with a landscape image; it is absent when the
166
+ * owner has no rotation reading it can stand behind for this capture.
167
+ */
168
+ type ScreenshotCaptureFacts = Readonly<{
169
+ displayRotation?: DeviceRotation;
170
+ }>;
203
171
  type ElementSelectorKey = 'id' | 'label' | 'text' | 'value';
204
172
  type ElementSelectorTapOptions = {
205
173
  key: ElementSelectorKey;
@@ -397,7 +365,7 @@ type Interactor = {
397
365
  }): Promise<Record<string, unknown> | void>;
398
366
  fillRef?(ref: string, text: string, delayMs?: number): Promise<Record<string, unknown> | void>;
399
367
  scroll(direction: ScrollDirection, options?: ScrollExecutionOptions): Promise<Record<string, unknown> | void>;
400
- screenshot(outPath: string, options?: ScreenshotOptions): Promise<void>;
368
+ screenshot(outPath: string, options?: ScreenshotOptions): Promise<ScreenshotCaptureFacts | void>;
401
369
  setViewport?(width: number, height: number): Promise<Record<string, unknown> | void>;
402
370
  snapshot(options?: SnapshotOptions): Promise<SnapshotRuntimeResult>;
403
371
  /**
@@ -508,6 +476,47 @@ type AlertInteractorOptions = {
508
476
  surface?: SessionSurface;
509
477
  };
510
478
  //#endregion
479
+ //#region packages/contracts/src/device-provider.d.ts
480
+ type DeviceLease = {
481
+ leaseId: string;
482
+ tenantId: string;
483
+ runId: string;
484
+ backend: LeaseBackend;
485
+ leaseProvider?: string;
486
+ deviceKey?: string;
487
+ clientId?: string;
488
+ retainOnClose?: true;
489
+ createdAt: number;
490
+ heartbeatAt: number;
491
+ expiresAt: number;
492
+ };
493
+ type LeaseLifecycleContext = {
494
+ flags?: Readonly<Record<string, unknown>>;
495
+ initialApp?: string;
496
+ cwd?: string;
497
+ publicNetworkOnly?: boolean;
498
+ /** Request-bound cancellation (explicit cancel or client disconnect). */
499
+ signal?: AbortSignal;
500
+ /**
501
+ * Epoch-ms deadline by which `allocate` must have settled; derived from the
502
+ * same budget as the client's `lease_allocate` envelope, so a provider that
503
+ * fits its remote phases within it is never abandoned by a client first.
504
+ */
505
+ deadline?: number;
506
+ };
507
+ type LeaseLifecycleProvider = {
508
+ allocate?: (lease: DeviceLease, context?: LeaseLifecycleContext) => Promise<Record<string, unknown> | undefined>;
509
+ heartbeat?: (lease: DeviceLease, context?: LeaseLifecycleContext) => Promise<Record<string, unknown> | undefined>;
510
+ release?: (lease: DeviceLease, context?: LeaseLifecycleContext) => Promise<Record<string, unknown> | undefined>;
511
+ };
512
+ type DeviceInventoryProvider = (request: ProviderDeviceInventoryRequest, signal?: AbortSignal) => Promise<DeviceInfo[] | null | undefined>;
513
+ type ProviderAppCatalogQuery = Readonly<{
514
+ provider: string;
515
+ platform: 'android' | 'ios';
516
+ publicNetworkOnly?: boolean;
517
+ }>;
518
+ type ProviderAppCatalogHandler = (query: ProviderAppCatalogQuery, signal?: AbortSignal) => Promise<readonly string[]>;
519
+ //#endregion
511
520
  //#region packages/contracts/src/provider-device-runtime.d.ts
512
521
  type ProviderDeviceInstallResult = {
513
522
  bundleId?: string;
@@ -603,6 +612,27 @@ type LimrunAndroidKeyboardDismissResult = LimrunAndroidKeyboardState & {
603
612
  dismissed: boolean;
604
613
  };
605
614
  //#endregion
615
+ //#region packages/provider-limrun/src/instance-access.d.ts
616
+ /** An existing iOS instance's own API URL and token (`status.apiUrl`, `status.token`). */
617
+ type LimrunIosInstanceAccess = Readonly<{
618
+ apiUrl: string;
619
+ token: string;
620
+ }>;
621
+ /** An existing Android instance's own API URL, ADB WebSocket URL, and token. */
622
+ type LimrunAndroidInstanceAccess = Readonly<{
623
+ apiUrl: string;
624
+ token: string;
625
+ adbUrl: string;
626
+ }>;
627
+ /**
628
+ * Existing instances to drive with their own credentials instead of an organization API key. A
629
+ * platform listed here never creates or deletes instances: whoever created the instance owns it.
630
+ */
631
+ type LimrunInstanceAccess = Readonly<{
632
+ ios?: LimrunIosInstanceAccess;
633
+ android?: LimrunAndroidInstanceAccess;
634
+ }>;
635
+ //#endregion
606
636
  //#region packages/provider-limrun/src/ios.d.ts
607
637
  type LimrunIosRemoteInstallOptions = {
608
638
  md5?: string;
@@ -680,9 +710,13 @@ type LimrunIosDeviceSession = LimrunDeviceSessionBase & {
680
710
  //#endregion
681
711
  //#region packages/provider-limrun/src/runtime.d.ts
682
712
  type LimrunRuntimeOptions = {
683
- apiKey: string;
713
+ /** Organization API key. It creates and deletes instances for platforms without `instances`. */
714
+ apiKey?: string;
684
715
  region?: string;
716
+ /** Pings each leased instance every 30 s so Limrun's inactivity timeout does not end idle sessions. */
717
+ keepAlive?: boolean;
685
718
  runtimeInstance?: string;
719
+ instances?: LimrunInstanceAccess;
686
720
  };
687
721
  //#endregion
688
722
  //#region src/sdk/limrun-runtime-types.d.ts
@@ -710,4 +744,4 @@ declare class LimrunRuntime implements ProviderDeviceRuntime {
710
744
  shutdown(): Promise<void>;
711
745
  }
712
746
  //#endregion
713
- export { type LimrunAndroidDeviceSession, type LimrunDeviceSession, type LimrunIosCommandExecution, type LimrunIosDeviceSession, LimrunRuntime, type LimrunRuntimeOptions };
747
+ export { type LimrunAndroidDeviceSession, type LimrunDeviceSession, type LimrunInstanceAccess, type LimrunIosCommandExecution, type LimrunIosDeviceSession, LimrunRuntime, type LimrunRuntimeOptions };
@@ -1 +1 @@
1
- import{i as e}from"./request-cancellation.js";import{r as t}from"./src.js";import{t as n}from"./limrun-runtime-dependencies.js";var r=class{implementation;provider=e;constructor(e){this.implementation=t(e,n())}get leaseLifecycle(){return this.implementation.leaseLifecycle}get recoverExpiredLease(){return this.implementation.recoverExpiredLease}get deviceInventoryProvider(){return this.implementation.deviceInventoryProvider}ownsDevice(e){return this.implementation.ownsDevice(e)}getInteractor(e){return this.implementation.getInteractor(e)}getDeviceSession(e){return this.implementation.getDeviceSession(e)}async installApp(e,t,n,r){return await this.implementation.installApp?.(e,t,n,r)}async installInstallablePath(e,t,n){return await this.implementation.installInstallablePath?.(e,t,n)}async configurePortReverse(e){return await this.implementation.configurePortReverse?.(e)}async shutdown(){await this.implementation.shutdown()}};export{r as LimrunRuntime};
1
+ import{n as e}from"./device2.js";import{r as t}from"./src.js";import{t as n}from"./limrun-runtime-dependencies.js";var r=class{implementation;provider=e;constructor(e){this.implementation=t(e,n())}get leaseLifecycle(){return this.implementation.leaseLifecycle}get recoverExpiredLease(){return this.implementation.recoverExpiredLease}get deviceInventoryProvider(){return this.implementation.deviceInventoryProvider}ownsDevice(e){return this.implementation.ownsDevice(e)}getInteractor(e){return this.implementation.getInteractor(e)}getDeviceSession(e){return this.implementation.getDeviceSession(e)}async installApp(e,t,n,r){return await this.implementation.installApp?.(e,t,n,r)}async installInstallablePath(e,t,n){return await this.implementation.installInstallablePath?.(e,t,n)}async configurePortReverse(e){return await this.implementation.configurePortReverse?.(e)}async shutdown(){await this.implementation.shutdown()}};export{r as LimrunRuntime};
package/dist/src/linux.js CHANGED
@@ -1 +1 @@
1
- import{N as e}from"./sdk-contracts.js";import{c as t}from"./diagnostics.js";import"./diagnostics2.js";import{a as n}from"./gesture-plan.js";import{S as r,_ as i,a,b as o,d as s,f as c,h as l,i as u,l as d,m as f,n as p,o as m,p as h,r as g,s as _,t as v,u as y,v as b,x}from"./src5.js";function S(){return{open:e=>s(e),openDevice:()=>Promise.resolve(),close:e=>g(e),tap:(e,t)=>c(e,t),alternateClick:async(e,t)=>t===`secondary`?await l(e.x,e.y):await y(e.x,e.y),doubleTap:(e,t)=>u(e,t),longPress:(e,t,n)=>d(e,t,n),focus:(e,t)=>m(e,t),type:(e,t)=>x(e,t),fill:(e,t,n,r)=>a(e,t,n,r),scroll:(e,t)=>b(e,t),performGesture:async t=>{if(t.topology===`two`)throw new e(`UNSUPPORTED_OPERATION`,`Multi-touch gestures are not supported on Linux`);let{start:r,end:i}=n(t);await o(r.x,r.y,i.x,i.y,t.durationMs)},screenshot:(e,t)=>i(e,t),readTextAtPoint:async(e,t)=>await f(e.x,e.y,t?.surface),snapshot:async e=>await t(`snapshot_capture`,async()=>await p(e,e?.signal),{backend:`linux-atspi`}),back:()=>v(),home:()=>_(),setOrientation:()=>{throw new e(`UNSUPPORTED_OPERATION`,`orientation not supported on Linux`)},appSwitcher:()=>{throw new e(`UNSUPPORTED_OPERATION`,`appSwitcher not yet supported on Linux`)},tvRemote:()=>{throw new e(`UNSUPPORTED_OPERATION`,`tv-remote not supported on Linux`)},readClipboard:()=>h(),writeClipboard:e=>r(e),setSetting:()=>{throw new e(`UNSUPPORTED_OPERATION`,`setSetting not supported on Linux`)}}}export{S as createLinuxInteractor};
1
+ import{P as e}from"./sdk-contracts.js";import{c as t}from"./diagnostics.js";import"./diagnostics2.js";import{a as n}from"./gesture-plan.js";import{S as r,_ as i,a,b as o,d as s,f as c,h as l,i as u,l as d,m as f,n as p,o as m,p as h,r as g,s as _,t as v,u as y,v as b,x}from"./src5.js";function S(){return{open:e=>s(e),openDevice:()=>Promise.resolve(),close:e=>g(e),tap:(e,t)=>c(e,t),alternateClick:async(e,t)=>t===`secondary`?await l(e.x,e.y):await y(e.x,e.y),doubleTap:(e,t)=>u(e,t),longPress:(e,t,n)=>d(e,t,n),focus:(e,t)=>m(e,t),type:(e,t)=>x(e,t),fill:(e,t,n,r)=>a(e,t,n,r),scroll:(e,t)=>b(e,t),performGesture:async t=>{if(t.topology===`two`)throw new e(`UNSUPPORTED_OPERATION`,`Multi-touch gestures are not supported on Linux`);let{start:r,end:i}=n(t);await o(r.x,r.y,i.x,i.y,t.durationMs)},screenshot:(e,t)=>i(e,t),readTextAtPoint:async(e,t)=>await f(e.x,e.y,t?.surface),snapshot:async e=>await t(`snapshot_capture`,async()=>await p(e,e?.signal),{backend:`linux-atspi`}),back:()=>v(),home:()=>_(),setOrientation:()=>{throw new e(`UNSUPPORTED_OPERATION`,`orientation not supported on Linux`)},appSwitcher:()=>{throw new e(`UNSUPPORTED_OPERATION`,`appSwitcher not yet supported on Linux`)},tvRemote:()=>{throw new e(`UNSUPPORTED_OPERATION`,`tv-remote not supported on Linux`)},readClipboard:()=>h(),writeClipboard:e=>r(e),setSetting:()=>{throw new e(`UNSUPPORTED_OPERATION`,`setSetting not supported on Linux`)}}}export{S as createLinuxInteractor};
@@ -0,0 +1 @@
1
+ import{P as e}from"./sdk-contracts.js";import{a as t,i as n,n as r}from"./store.js";import{pathToFileURL as i}from"node:url";async function a(a,o){let s=r(a);n(s,o);let c=[];try{for(let n of s){let r=await import(i(t(n.directory,n.agentDevicePlugin.entry)).href);if(typeof r.default!=`function`)throw new e(`INVALID_ARGS`,`Plugin must export a default factory: ${n.name}`);let o=await r.default(Object.freeze({env:Object.freeze({...a}),options:Object.freeze({...n.selection.options}),createError:(t,n,r)=>new e(t,n,r)}));if(!o?.runtime||typeof o.runtime.shutdown!=`function`)throw new e(`INVALID_ARGS`,`Plugin must return a provider runtime: ${n.name}`);if(c.push(o),o.runtime.provider!==n.agentDevicePlugin.provider||typeof o.runtime.ownsDevice!=`function`||typeof o.runtime.getInteractor!=`function`||typeof o.runtime.deviceInventoryProvider!=`function`||!o.runtime.leaseLifecycle||typeof o.runtime.leaseLifecycle!=`object`||o.platformModule?.owner?.kind!==`provider-runtime`||o.platformModule.owner.provider!==o.runtime.provider||typeof o.platformModule.owner.instance!=`string`||o.platformModule.owner.instance.trim().length===0||typeof o.platformModule.loadRuntime!=`function`)throw new e(`INVALID_ARGS`,`Plugin runtime owner does not match its declaration: ${n.name}`)}return c}catch(e){throw await Promise.allSettled(c.map(async({runtime:e})=>await e.shutdown())),e}}export{a as loadProviderPlugins};
@@ -1 +1 @@
1
- import{N as e}from"./sdk-contracts.js";function t(t,n){if(t===void 0||t.trim()===``)throw new e(`INVALID_ARGS`,`settings location set requires ${n}`);return r(Number(t),n)}function n(e){return{latitude:r(e?.latitude,`latitude`),longitude:r(e?.longitude,`longitude`)}}function r(t,n){let r=n===`latitude`?-90:-180,i=n===`latitude`?90:180;if(typeof t!=`number`||!Number.isFinite(t)||t<r||t>i)throw new e(`INVALID_ARGS`,`${n} must be a number from ${r} to ${i}`);return t}export{n,t};
1
+ import{P as e}from"./sdk-contracts.js";function t(t,n){if(t===void 0||t.trim()===``)throw new e(`INVALID_ARGS`,`settings location set requires ${n}`);return r(Number(t),n)}function n(e){return{latitude:r(e?.latitude,`latitude`),longitude:r(e?.longitude,`longitude`)}}function r(t,n){let r=n===`latitude`?-90:-180,i=n===`latitude`?90:180;if(typeof t!=`number`||!Number.isFinite(t)||t<r||t>i)throw new e(`INVALID_ARGS`,`${n} must be a number from ${r} to ${i}`);return t}export{n,t};
@@ -1 +1 @@
1
- import{i as e,r as t,s as n}from"./helper.js";import{t as r}from"./surface-snapshot.js";export{r as captureMacOsSurfaceSnapshot,t as resolveFrontmostMacOsApp,e as runMacOsAlertAction,n as startMacOsAudioProbeProcess};
1
+ import{a as e,f as t,i as n}from"./helper.js";import{t as r}from"./surface-snapshot.js";export{r as captureMacOsSurfaceSnapshot,n as resolveFrontmostMacOsApp,e as runMacOsAlertAction,t as startMacOsAudioProbeProcess};
@@ -1 +1 @@
1
- import{N as e}from"./sdk-contracts.js";import{A as t,N as n}from"./sdk-device.js";import{t as r}from"./scoped-provider.js";const i=r(void 0);function a(){return i.resolve()}async function o(e,t){return await i.run(e,t)}function s(r,i){if(!n(t(r.device),t(i))||r.device.simulatorSetPath!==i.simulatorSetPath)throw new e(`COMMAND_FAILED`,`Managed automation cannot select another device.`,{reason:`managed-device-transport-mismatch`})}function c(){let e=a();if(e)return async t=>{s(e,t)}}async function l(e){let t=c();return t?(await t(e),!0):!1}export{o as a,c as i,a as n,l as r,s as t};
1
+ import{P as e}from"./sdk-contracts.js";import{P as t,j as n}from"./sdk-device.js";import{t as r}from"./scoped-provider.js";const i=r(void 0);function a(){return i.resolve()}async function o(e,t){return await i.run(e,t)}function s(r,i){if(!t(n(r.device),n(i))||r.device.simulatorSetPath!==i.simulatorSetPath)throw new e(`COMMAND_FAILED`,`Managed automation cannot select another device.`,{reason:`managed-device-transport-mismatch`})}function c(){let e=a();if(e)return async t=>{s(e,t)}}async function l(e){let t=c();return t?(await t(e),!0):!1}export{o as a,c as i,a as n,l as r,s as t};