agent-device 0.21.24 → 0.21.25

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 (379) hide show
  1. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.25.apk +0 -0
  2. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.25.apk.sha256 +1 -0
  3. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.24.manifest.json → agent-device-android-ime-helper-0.21.25.manifest.json} +4 -4
  4. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.apk +0 -0
  5. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.apk.sha256 +1 -0
  6. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.manifest.json +16 -0
  7. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +159 -4
  8. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerHttpRequestFraming.swift +139 -0
  9. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerListenerPeer.swift +41 -0
  10. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerListenerToken.swift +25 -0
  11. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Environment.swift +18 -11
  12. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +25 -1
  13. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +0 -3
  14. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +1 -3
  15. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryConfirmation.swift +59 -26
  16. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +47 -103
  17. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +142 -54
  18. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TypeExecution.swift +4 -1
  19. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +21 -19
  20. package/dist/src/absence-observation-errors.js +1 -0
  21. package/dist/src/adapter.js +1 -1
  22. package/dist/src/adb-executor.js +2 -2
  23. package/dist/src/adb-failure.js +2 -2
  24. package/dist/src/agent-browser-lifecycle.js +1 -1
  25. package/dist/src/agent-browser-process-record.js +1 -1
  26. package/dist/src/agent-browser-provider.js +1 -1
  27. package/dist/src/agent-browser-tool.js +1 -1
  28. package/dist/src/agent-device-client.js +2 -2
  29. package/dist/src/android-adb.js +1 -1
  30. package/dist/src/android-input-ownership.js +1 -1
  31. package/dist/src/android-system-surface-disclosure.js +1 -0
  32. package/dist/src/android-text-entry.js +1 -0
  33. package/dist/src/android.js +1 -1
  34. package/dist/src/app-backend.js +1 -1
  35. package/dist/src/app-helpers.js +1 -1
  36. package/dist/src/app-launch.js +1 -1
  37. package/dist/src/app-lifecycle.js +4 -3
  38. package/dist/src/app-lifecycle2.js +2 -2
  39. package/dist/src/app-log-files.js +1 -1
  40. package/dist/src/app-log-reconnect.js +1 -1
  41. package/dist/src/app-log-runtime2.js +3 -3
  42. package/dist/src/app-resolution-facade.js +1 -1
  43. package/dist/src/app-resolution.js +2 -2
  44. package/dist/src/apple-runner-platform.js +1 -1
  45. package/dist/src/artifact-download.js +1 -1
  46. package/dist/src/auth.js +1 -1
  47. package/dist/src/aws-device-farm-connection.js +1 -1
  48. package/dist/src/back-mode.js +1 -1
  49. package/dist/src/boot-diagnostics.js +1 -1
  50. package/dist/src/browserstack-connection.js +1 -1
  51. package/dist/src/capture-disclosure.js +1 -0
  52. package/dist/src/cli-config.js +1 -1
  53. package/dist/src/cli-help.js +17 -14
  54. package/dist/src/cli-output.js +1 -1
  55. package/dist/src/cli-runner.js +3 -1
  56. package/dist/src/cli.js +3 -3
  57. package/dist/src/client-companion-tunnel.js +1 -1
  58. package/dist/src/client-metro.js +1 -1
  59. package/dist/src/client-types.d.ts +8 -2
  60. package/dist/src/code-signature-cache.js +1 -1
  61. package/dist/src/code-signature.js +1 -1
  62. package/dist/src/command-metadata.js +73 -1
  63. package/dist/src/command-policy.js +1 -0
  64. package/dist/src/command-schema.js +3 -3
  65. package/dist/src/command-surface.js +1 -1
  66. package/dist/src/command-tools.js +2 -2
  67. package/dist/src/connection-runtime.js +1 -1
  68. package/dist/src/connection-verification.js +1 -1
  69. package/dist/src/connection.js +3 -3
  70. package/dist/src/contracts.js +1 -1
  71. package/dist/src/daemon-client-lease-beat.js +1 -1
  72. package/dist/src/daemon-client-lifecycle.js +1 -1
  73. package/dist/src/daemon-client-liveness-probe.js +1 -1
  74. package/dist/src/daemon-policy-file.js +1 -1
  75. package/dist/src/daemon-registration-owner.js +1 -1
  76. package/dist/src/daemon-registration.js +1 -1
  77. package/dist/src/daemon-resolution.js +3 -1
  78. package/dist/src/debug-symbols-facade.js +1 -1
  79. package/dist/src/device-claim-inspection.js +1 -1
  80. package/dist/src/device-input-state.d.ts +5 -3
  81. package/dist/src/device-inventory-context.js +1 -1
  82. package/dist/src/device-readiness-runtime.js +1 -1
  83. package/dist/src/device-release.js +1 -1
  84. package/dist/src/device-shell.js +1 -1
  85. package/dist/src/device.js +3 -1
  86. package/dist/src/devicectl.js +1 -1
  87. package/dist/src/diagnostics.js +1 -1
  88. package/dist/src/doctor-facade.js +1 -1
  89. package/dist/src/durable-capture-resource.js +1 -1
  90. package/dist/src/durable-resource.js +1 -1
  91. package/dist/src/engine-eval-script.js +1 -1
  92. package/dist/src/error.js +1 -1
  93. package/dist/src/exec.js +1 -1
  94. package/dist/src/expo-dev-client-launch.js +1 -0
  95. package/dist/src/file.js +3 -1
  96. package/dist/src/find.js +1 -1
  97. package/dist/src/finders.js +1 -1
  98. package/dist/src/generic-settle.js +1 -1
  99. package/dist/src/generic.js +1 -1
  100. package/dist/src/gesture-plan.js +1 -1
  101. package/dist/src/gesture-runtime.js +1 -1
  102. package/dist/src/harmonyos.js +1 -1
  103. package/dist/src/hdc.js +1 -1
  104. package/dist/src/helper.js +2 -2
  105. package/dist/src/human-control.js +1 -1
  106. package/dist/src/ime-rebind.js +1 -1
  107. package/dist/src/ime-state.js +1 -1
  108. package/dist/src/index.d.ts +1 -1
  109. package/dist/src/index.js +1 -1
  110. package/dist/src/input-actions.js +1 -1
  111. package/dist/src/input-actions2.js +2 -2
  112. package/dist/src/install-source-network-transport.js +1 -1
  113. package/dist/src/install-source2.js +1 -1
  114. package/dist/src/interaction-error.js +1 -0
  115. package/dist/src/interaction-positionals.js +1 -1
  116. package/dist/src/interaction.js +1 -1
  117. package/dist/src/interaction2.js +1 -1
  118. package/dist/src/interactor-operation-catalog.js +1 -1
  119. package/dist/src/interactor.js +5 -5
  120. package/dist/src/interactor2.js +1 -1
  121. package/dist/src/internal/bin.js +1 -1
  122. package/dist/src/internal/daemon.js +5 -1
  123. package/dist/src/internal/png-worker.js +1 -1
  124. package/dist/src/inventory.js +2 -2
  125. package/dist/src/inventory6.js +1 -1
  126. package/dist/src/io.d.ts +2 -2
  127. package/dist/src/ios-client.js +1 -1
  128. package/dist/src/ios-settings.js +1 -1
  129. package/dist/src/ios-snapshot-acquisition.js +1 -1
  130. package/dist/src/ios-snapshot-adapter.js +1 -1
  131. package/dist/src/ios-snapshot-engine.js +1 -1
  132. package/dist/src/ios-snapshot-runtime.js +1 -1
  133. package/dist/src/keyed-lock.js +1 -1
  134. package/dist/src/launch-confirmation.js +1 -1
  135. package/dist/src/lease.js +1 -1
  136. package/dist/src/limrun-runtime-dependencies.js +1 -1
  137. package/dist/src/limrun.d.ts +2 -10
  138. package/dist/src/limrun.js +1 -1
  139. package/dist/src/linux.js +1 -1
  140. package/dist/src/load.js +1 -1
  141. package/dist/src/local-interactor-operation-set.js +1 -1
  142. package/dist/src/log-stream.js +9 -9
  143. package/dist/src/mechanics.js +16 -16
  144. package/dist/src/metro.js +1 -1
  145. package/dist/src/metro2.js +1 -1
  146. package/dist/src/mobile-snapshot-semantics.js +1 -1
  147. package/dist/src/observability.js +1 -1
  148. package/dist/src/open-target-resolution.js +1 -1
  149. package/dist/src/output-path.js +1 -1
  150. package/dist/src/overlay.js +1 -3
  151. package/dist/src/perf-facade.js +1 -1
  152. package/dist/src/perf-runtime-operation-builder.js +1 -1
  153. package/dist/src/perf-runtime.js +1 -1
  154. package/dist/src/physical-device-control.js +1 -1
  155. package/dist/src/platform-request-scope.js +1 -1
  156. package/dist/src/platform-runtime-android-adb-host.js +1 -1
  157. package/dist/src/platform-runtime-app-log-android-transport.js +1 -1
  158. package/dist/src/platform-runtime-apple-resources.js +1 -0
  159. package/dist/src/platform-runtime-claim-recovery.js +1 -0
  160. package/dist/src/platform-runtime-daemon-services.js +1 -0
  161. package/dist/src/platform-runtime-host.js +1 -1
  162. package/dist/src/platform-runtime-network-web-transport.js +1 -1
  163. package/dist/src/platform-runtime-open-target.js +1 -1
  164. package/dist/src/platform-runtime-operation-host.js +4 -4
  165. package/dist/src/platform-runtime-runtime-hints.js +2 -2
  166. package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
  167. package/dist/src/platform-runtime-screen-recording-apple-runner-transport.js +1 -1
  168. package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
  169. package/dist/src/platform-runtime-screen-recording-harmony-host.js +1 -1
  170. package/dist/src/platform-runtime-screen-recording-web-host.js +1 -1
  171. package/dist/src/platform-runtime-unavailable.js +1 -1
  172. package/dist/src/platform-runtime.js +1 -1
  173. package/dist/src/platform-runtime2.js +1 -1
  174. package/dist/src/plugin.js +1 -1
  175. package/dist/src/png-crop-bytes.js +1 -1
  176. package/dist/src/png-resize.js +1 -0
  177. package/dist/src/png-worker-client.js +1 -1
  178. package/dist/src/png-worker-contract.js +1 -1
  179. package/dist/src/process-entry.js +1 -1
  180. package/dist/src/process.js +1 -1
  181. package/dist/src/provider-credential-fingerprint.js +1 -1
  182. package/dist/src/provider-device-admission.js +1 -1
  183. package/dist/src/provider-policy.js +1 -1
  184. package/dist/src/provider-webdriver.js +1 -1
  185. package/dist/src/proxy.js +2 -2
  186. package/dist/src/quality-warnings.js +1 -1
  187. package/dist/src/react-native-overlay2.js +3 -0
  188. package/dist/src/react-native.js +1 -1
  189. package/dist/src/record-runtime.js +1 -1
  190. package/dist/src/record-trace.js +1 -1
  191. package/dist/src/recording.js +2 -2
  192. package/dist/src/register-builtins.js +1 -1
  193. package/dist/src/remote-config-core.js +1 -1
  194. package/dist/src/replay-backend-registry.js +1 -0
  195. package/dist/src/replay-divergence.js +1 -1
  196. package/dist/src/replay-maestro-backend.js +117 -0
  197. package/dist/src/replay-script-selection.js +1 -0
  198. package/dist/src/replay.js +1 -3
  199. package/dist/src/replay2.js +1 -0
  200. package/dist/src/reporting.js +3 -3
  201. package/dist/src/request-cancel.js +1 -1
  202. package/dist/src/request-providers.js +1 -1
  203. package/dist/src/request-runtime-binding.js +1 -1
  204. package/dist/src/result-serialization.js +1 -1
  205. package/dist/src/retry.js +1 -1
  206. package/dist/src/runner-cache-retention.js +1 -1
  207. package/dist/src/runner-cache-trim.js +1 -1
  208. package/dist/src/runner-client.js +1 -1
  209. package/dist/src/runner-dev-tools-security.js +1 -1
  210. package/dist/src/runner-device-readiness.js +1 -1
  211. package/dist/src/runner-device-set.js +1 -1
  212. package/dist/src/runner-error-classification.js +3 -3
  213. package/dist/src/runner-exchange.js +1 -1
  214. package/dist/src/runner-lease.js +1 -1
  215. package/dist/src/runner-operations-facade.js +1 -1
  216. package/dist/src/runner-retention.js +1 -0
  217. package/dist/src/runner-start-budget.js +1 -1
  218. package/dist/src/runner-startup-transport.js +1 -0
  219. package/dist/src/runner-toolchain-probe.js +1 -1
  220. package/dist/src/runner.js +2 -1
  221. package/dist/src/runtime-command-surface.js +1 -0
  222. package/dist/src/runtime-deployment.js +1 -1
  223. package/dist/src/runtime-factory.js +1 -0
  224. package/dist/src/runtime-session.js +1 -0
  225. package/dist/src/runtime-transport-hints.js +1 -1
  226. package/dist/src/runtime.js +2 -1
  227. package/dist/src/runtime10.js +2 -1
  228. package/dist/src/runtime2.js +5 -2
  229. package/dist/src/runtime3.js +1 -5
  230. package/dist/src/runtime4.js +5 -1
  231. package/dist/src/runtime5.js +1 -5
  232. package/dist/src/runtime6.js +1 -1
  233. package/dist/src/runtime7.js +1 -1
  234. package/dist/src/runtime8.js +1 -1
  235. package/dist/src/runtime9.js +1 -1
  236. package/dist/src/screenshot-image.js +1 -1
  237. package/dist/src/screenshot-runtime.js +1 -0
  238. package/dist/src/screenshot3.js +5 -5
  239. package/dist/src/sdk-batch-runner.js +2 -2
  240. package/dist/src/sdk-batch.js +1 -1
  241. package/dist/src/sdk-contracts.js +2 -2
  242. package/dist/src/sdk-finders.js +1 -1
  243. package/dist/src/sdk-io.d.ts +4 -2
  244. package/dist/src/sdk-selectors.d.ts +4 -5
  245. package/dist/src/sdk-selectors.js +1 -1
  246. package/dist/src/selection.js +0 -0
  247. package/dist/src/selector-pipeline-policy.js +1 -1
  248. package/dist/src/selector-runtime.js +1 -1
  249. package/dist/src/selectors.js +1 -1
  250. package/dist/src/server.js +2 -2
  251. package/dist/src/session-allocation.js +1 -1
  252. package/dist/src/session-replay-runtime-failure-response.js +1 -0
  253. package/dist/src/session-runtime-admission.js +1 -0
  254. package/dist/src/session.js +1 -1
  255. package/dist/src/session2.js +5 -5
  256. package/dist/src/settings.js +1 -1
  257. package/dist/src/settings2.js +1 -1
  258. package/dist/src/simctl-settings.js +1 -1
  259. package/dist/src/simulator.js +1 -1
  260. package/dist/src/snapshot-chrome.js +1 -0
  261. package/dist/src/snapshot-desktop-projection.js +1 -1
  262. package/dist/src/snapshot-evidence.js +1 -0
  263. package/dist/src/snapshot-node-lookup.js +1 -0
  264. package/dist/src/snapshot-occlusion.js +1 -0
  265. package/dist/src/snapshot-quality-verdict.js +1 -0
  266. package/dist/src/snapshot-runtime-binding.js +1 -1
  267. package/dist/src/snapshot-runtime.js +1 -1
  268. package/dist/src/snapshot-state.js +1 -1
  269. package/dist/src/snapshot.js +1 -1
  270. package/dist/src/snapshot2.js +1 -1
  271. package/dist/src/snapshot3.js +1 -1
  272. package/dist/src/src.js +5 -1
  273. package/dist/src/src2.js +1 -1
  274. package/dist/src/src3.js +2 -1
  275. package/dist/src/store.js +1 -1
  276. package/dist/src/surface-snapshot2.js +1 -1
  277. package/dist/src/target-evidence-tree.js +1 -0
  278. package/dist/src/target-evidence.js +1 -1
  279. package/dist/src/text-entry-focus.js +1 -1
  280. package/dist/src/tool-provider2.js +1 -1
  281. package/dist/src/touch-runtime.js +1 -1
  282. package/dist/src/touch-runtime2.js +1 -1
  283. package/dist/src/tree.js +1 -1
  284. package/dist/src/tv-remote.js +1 -1
  285. package/dist/src/type-text-runtime.js +1 -1
  286. package/dist/src/undici.js +8 -8
  287. package/dist/src/update-check.js +1 -1
  288. package/dist/src/vars.js +2 -0
  289. package/dist/src/version.js +1 -1
  290. package/dist/src/video.js +2 -2
  291. package/dist/src/wait.js +1 -0
  292. package/dist/src/web.js +1 -1
  293. package/dist/src/web2.js +1 -1
  294. package/package.json +9 -11
  295. package/server.json +2 -2
  296. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.24.apk +0 -0
  297. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.24.apk.sha256 +0 -1
  298. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.24.apk +0 -0
  299. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.24.apk.sha256 +0 -1
  300. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.24.manifest.json +0 -16
  301. package/dist/src/adb-transport.js +0 -1
  302. package/dist/src/alert-runtime.js +0 -1
  303. package/dist/src/app-deployment-resolution.js +0 -2
  304. package/dist/src/app-inventory-contract.js +0 -1
  305. package/dist/src/app-log-session-resource.js +0 -1
  306. package/dist/src/application-lifecycle-runtime.js +0 -1
  307. package/dist/src/auth-session.js +0 -1
  308. package/dist/src/browserstack-device-features.js +0 -1
  309. package/dist/src/browserstack.js +0 -1
  310. package/dist/src/cache.js +0 -1
  311. package/dist/src/capture.js +0 -1
  312. package/dist/src/catalog.js +0 -1
  313. package/dist/src/click-button.js +0 -1
  314. package/dist/src/client-metro-companion.js +0 -1
  315. package/dist/src/client-options.js +0 -3
  316. package/dist/src/daemon-client-transport.js +0 -1
  317. package/dist/src/daemon-http.js +0 -1
  318. package/dist/src/device-rotation.js +0 -1
  319. package/dist/src/device-session.js +0 -3
  320. package/dist/src/device2.js +0 -1
  321. package/dist/src/device3.js +0 -3
  322. package/dist/src/dispatch-resolve.js +0 -4
  323. package/dist/src/format.js +0 -2
  324. package/dist/src/gesture-plan-types.js +0 -1
  325. package/dist/src/host.js +0 -1
  326. package/dist/src/ime-settings-record.js +0 -1
  327. package/dist/src/interaction-ref-policy.js +0 -1
  328. package/dist/src/interactor-operation-binding.js +0 -1
  329. package/dist/src/keyboard-actions.js +0 -1
  330. package/dist/src/lease-context.js +0 -1
  331. package/dist/src/lease-registry-scope.js +0 -1
  332. package/dist/src/lease-scope.js +0 -1
  333. package/dist/src/managed-device-scope.js +0 -1
  334. package/dist/src/manifest.js +0 -1
  335. package/dist/src/observe-until.js +0 -1
  336. package/dist/src/output-common.js +0 -5
  337. package/dist/src/owner-identity.js +0 -3
  338. package/dist/src/path-resolution.js +0 -1
  339. package/dist/src/perf-runtime-plan.js +0 -1
  340. package/dist/src/platform-runtime-app-log-process.js +0 -1
  341. package/dist/src/platform-runtime-managed-owner.js +0 -1
  342. package/dist/src/platform-runtime-screen-recording-process-host.js +0 -1
  343. package/dist/src/png.js +0 -1
  344. package/dist/src/provider-session-ownership.js +0 -2
  345. package/dist/src/providers.js +0 -1
  346. package/dist/src/registry.js +0 -68
  347. package/dist/src/remote-connection-state.js +0 -1
  348. package/dist/src/request-admission.js +0 -1
  349. package/dist/src/request-cancellation.js +0 -1
  350. package/dist/src/request-progress-protocol.js +0 -1
  351. package/dist/src/runner-cache-metadata.js +0 -2
  352. package/dist/src/runner-disposal.js +0 -1
  353. package/dist/src/runner-session-types.js +0 -1
  354. package/dist/src/runtime-admission.js +0 -1
  355. package/dist/src/runtime11.js +0 -2
  356. package/dist/src/screen-recording-resource-recovery.js +0 -1
  357. package/dist/src/screenshot-result.js +0 -1
  358. package/dist/src/script.js +0 -1
  359. package/dist/src/scroll-command.js +0 -1
  360. package/dist/src/scroll-gesture.js +0 -1
  361. package/dist/src/scroll-indicator.js +0 -1
  362. package/dist/src/session-artifact-paths.js +0 -1
  363. package/dist/src/session-paths.js +0 -1
  364. package/dist/src/session-repair-tombstone.js +0 -1
  365. package/dist/src/session-snapshot.js +0 -1
  366. package/dist/src/snapshot-private-evidence.js +0 -1
  367. package/dist/src/snapshot4.js +0 -1
  368. package/dist/src/src4.js +0 -1
  369. package/dist/src/src5.js +0 -1
  370. package/dist/src/src6.js +0 -1
  371. package/dist/src/src7.js +0 -2
  372. package/dist/src/src8.js +0 -115
  373. package/dist/src/string-enum.js +0 -1
  374. package/dist/src/success-text.js +0 -1
  375. package/dist/src/transport.js +0 -3
  376. package/dist/src/ttl-memo.js +0 -1
  377. package/dist/src/verified-file.js +0 -1
  378. package/dist/src/window-state.js +0 -1
  379. /package/dist/src/{doctor-output.js → doctor-lines.js} +0 -0
@@ -1,6 +1,6 @@
1
- import{$ as e,P as t,T as n,tt as r,w as i}from"./sdk-contracts.js";import{i as a}from"./capture.js";import{r as o}from"./snapshot-capture-annotations.js";import{O as s,v as c}from"./sdk-batch-runner.js";import{c as l,r as u}from"./diagnostics.js";import"./diagnostics2.js";import{A as ee,g as d,h as te,j as ne,m as re,x as f}from"./sdk-device.js";import{Wr as ie,ni as ae}from"./sdk-batch.js";import{d as oe,i as se,l as ce}from"./scroll-gesture.js";import{n as p}from"./session.js";import{S as le,T as ue,b as m,m as de,n as fe,r as pe,v as me,x as he}from"./settings.js";import{c as ge,n as _e,t as ve}from"./scroll-command.js";import"./device.js";import{t as ye}from"./device-rotation.js";import{o as h}from"./exec.js";import{r as be,t as xe}from"./retry.js";import{a as Se}from"./tv-remote.js";import"./command.js";import"./retry2.js";import{a as Ce}from"./gesture-plan.js";import{n as we}from"./scoped-provider.js";import{n as Te,r as Ee}from"./ios-snapshot-planning.js";import{n as De,r as Oe}from"./ios-system-surface.js";import{a as ke,l as Ae,n as je,s as Me}from"./quality-warnings.js";import{r as Ne}from"./ios-snapshot-acquisition.js";import{t as Pe}from"./png-size.js";import{n as Fe}from"./screenshot-density.js";import{i as g,n as Ie,r as _}from"./ios-snapshot-engine.js";import{C as Le,g as Re,o as ze,r as v}from"./host-file.js";import{c as y,f as Be,h as Ve,m as He,p as Ue}from"./config.js";import{o as We}from"./tool-provider.js";import{n as Ge,r as b,t as x}from"./physical-device-control.js";import{i as Ke,n as S,r as C,s as qe}from"./runner.js";import{u as Je}from"./host.js";import{t as Ye}from"./runner-cache-metadata.js";import{n as w,o as T,r as Xe}from"./simctl.js";import{c as E}from"./runner-client.js";import"./runner-error-classification.js";import{n as Ze,r as Qe,t as $e}from"./app-launch.js";import{r as D,t as O}from"./simulator.js";import{c as et,d as tt,l as nt,o as rt,s as it,t as at,u as ot}from"./helper.js";import{a as st,d as ct,f as lt,p as ut}from"./app-resolution.js";import{i as dt,t as ft}from"./display-inventory.js";import{t as pt}from"./simctl-settings.js";import{n as mt}from"./interactor-types.js";import{r as ht,t as gt}from"./app-backend.js";import{i as _t,r as vt,t as yt}from"./alert.js";import{t as bt}from"./surface-snapshot.js";import{t as xt}from"./ios-target-activation.js";import k from"node:path";async function St(e){return d(e)?await ct():(D(e,`clipboard`),await O(e),h(await T(e,[`pbpaste`,e.id],{allowFailure:!0}),`Failed to read iOS simulator clipboard`).stdout.replaceAll(`\r
1
+ import{P as e,T as t,et as n,nt as r,w as i}from"./sdk-contracts.js";import{$ as a,A as o,I as s,J as c,a as l,c as u,ft as ee,k as te,tt as ne}from"./tv-remote.js";import{r as re}from"./snapshot-capture-annotations.js";import{O as ie,v as d}from"./sdk-batch-runner.js";import{c as ae,r as f}from"./diagnostics.js";import"./diagnostics2.js";import{A as oe,g as p,h as se,j as m,m as ce,x as h}from"./sdk-device.js";import{Hr as le,ei as ue}from"./sdk-batch.js";import{n as g}from"./session.js";import{C as de,D as _,S as fe,h as v,n as pe,r as me,w as he,x as ge,y as _e}from"./settings.js";import{o as y}from"./exec.js";import{r as ve,t as ye}from"./retry.js";import"./command.js";import"./retry2.js";import{a as b}from"./gesture-plan.js";import{n as be}from"./scoped-provider.js";import{n as xe,r as Se}from"./ios-snapshot-planning.js";import{i as Ce,n as we,r as x}from"./ios-snapshot-engine.js";import{n as Te,r as Ee}from"./ios-system-surface.js";import{C as De,g as Oe,o as ke,r as Ae}from"./host-file.js";import{c as je,f as Me,h as Ne,m as Pe,p as Fe}from"./config.js";import{o as Ie}from"./tool-provider.js";import{n as Le,r as S,t as Re}from"./physical-device-control.js";import{C as ze,E as Be,S as Ve,n as He,x as Ue}from"./runner.js";import{x as We}from"./apple-runner-platform.js";import{n as C,o as w,r as T}from"./simctl.js";import{c as E}from"./runner-client.js";import"./runner-error-classification.js";import{n as Ge,r as Ke,t as qe}from"./app-launch.js";import{r as D,t as O}from"./simulator.js";import{c as Je,d as Ye,l as Xe,o as Ze,s as Qe,t as $e,u as et}from"./helper.js";import{a as tt,f as nt,m as rt,p as it}from"./app-resolution.js";import{i as at,t as ot}from"./display-inventory.js";import{t as st}from"./simctl-settings.js";import{n as ct}from"./png-resize.js";import{t as lt}from"./png-size.js";import{n as ut}from"./screenshot-density.js";import{n as dt}from"./interactor-types.js";import{r as ft,t as pt}from"./app-backend.js";import{i as mt,r as ht,t as gt}from"./alert.js";import{t as _t}from"./surface-snapshot.js";import{r as vt}from"./ios-snapshot-acquisition.js";import{n as yt}from"./quality-warnings.js";import{r as bt,t as xt}from"./snapshot-quality-verdict.js";import{t as St}from"./ios-target-activation.js";import k from"node:path";async function Ct(e){return p(e)?await nt():(D(e,`clipboard`),await O(e),y(await w(e,[`pbpaste`,e.id],{allowFailure:!0}),`Failed to read iOS simulator clipboard`).stdout.replaceAll(`\r
2
2
  `,`
3
- `).replace(/\n$/,``))}async function Ct(e,t,n){if(d(e)){await ut(t);return}if(D(e,`clipboard`),f(e)){let r=n?.signal;await O(e,{signal:r}),h(await T(e,[`pbcopy`,e.id],{allowFailure:!0,stdin:t,signal:r}),`Failed to write tvOS simulator clipboard`);return}await E(e,{command:`pasteboardWrite`,text:t},n)}function A(e,n){if(!re(e))throw new t(`UNSUPPORTED_OPERATION`,n.message,{deviceId:e.id,appleOs:ee(e),deviceKind:e.kind,reason:n.reason,hint:n.hint})}async function wt(e,t){A(e,pe);let n=he(t);return await T(e,[`ui`,e.id,`content_size`,n]),ue(n,n)}async function Tt(e){A(e,pe),await O(e);let n=h(await T(e,[`ui`,e.id,`content_size`],{allowFailure:!0}),`Failed to read iOS content size category`),r=n.stdout.trim(),i=le(r);if(i===void 0)throw new t(`COMMAND_FAILED`,`iOS simulator reported an unknown text size: ${r||`(empty)`}`,{deviceId:e.id,stdout:n.stdout,stderr:n.stderr,hint:"Boot the simulator, or run `xcrun simctl ui <device> content_size` to see what it reports."});return ue(i,r)}const Et=[`--time`,`9:41`,`--dataNetwork`,`wifi`,`--wifiMode`,`active`,`--wifiBars`,`3`,`--batteryState`,`charged`,`--batteryLevel`,`100`],Dt={0:`hide`,1:`wifi`,6:`3g`,7:`4g`,8:`lte`,9:`lte-a`,10:`lte+`,11:`5g`,12:`5g+`,13:`5g-uwb`,14:`5g-uc`},Ot={1:`searching`,2:`failed`,3:`active`},kt={0:`notSupported`,1:`searching`,2:`failed`,3:`active`},j=new Set;async function At(e){let t=null,n=!1;if(Mt(e))n=!0;else try{t=await Nt(e),n=!0}catch(t){L(e,`snapshot_failed`,t)}try{(!n||t)&&await F(e),await I(e,Et)}catch(t){L(e,`prepare_failed`,t)}return async()=>{await jt(e,n?t:null)}}async function jt(e,t){if(await F(e),!t){N(e);return}await I(e,Ft(t)),M(e)}function M(e){j.delete(P(e))}function N(e){j.add(P(e))}function Mt(e){return j.has(P(e))}function P(e){return`${e.platform}:${e.kind}:${e.id}`}async function Nt(e){return Pt(h(await T(e,[`status_bar`,e.id,`list`],{allowFailure:!0}),`Failed to read simulator status bar overrides`).stdout)}async function F(e){await T(e,[`status_bar`,e.id,`clear`])}async function I(e,t){t.length!==0&&await T(e,[`status_bar`,e.id,`override`,...t])}function Pt(e){let n={},r=e.split(`
4
- `).map(e=>e.trim()).filter(e=>e.length>0&&e!==`Current Status Bar Overrides:`&&!/^=+$/.test(e));for(let e of r){let r=/^DataNetworkType:\s+(\d+)$/.exec(e);if(r){let e=Number(r[1]),i=Dt[e];if(!i)throw new t(`COMMAND_FAILED`,`Unsupported simulator data network type: ${e}`);n.dataNetwork=i;continue}let i=/^WiFi Mode:\s+(\d+),\s+WiFi Bars:\s+(\d+)$/.exec(e);if(i){let e=Ot[Number(i[1])];e&&(n.wifiMode=e),n.wifiBars=i[2];continue}let a=/^Cell Mode:\s+(\d+),\s+Cell Bars:\s+(\d+)$/.exec(e);if(a){let e=Number(a[1]),r=kt[e];if(!r)throw new t(`COMMAND_FAILED`,`Unsupported simulator cellular mode: ${e}`);n.cellularMode=r,n.cellularBars=a[2];continue}let o=/^Operator Name:\s*(.*)$/.exec(e);if(o){n.operatorName=o[1]??``;continue}}return Object.keys(n).length===0?null:n}function Ft(e){let t=[];return e.dataNetwork&&t.push(`--dataNetwork`,e.dataNetwork),e.wifiMode&&t.push(`--wifiMode`,e.wifiMode),e.wifiBars!==void 0&&(e.dataNetwork===`wifi`||e.wifiMode)&&t.push(`--wifiBars`,e.wifiBars),e.cellularMode&&t.push(`--cellularMode`,e.cellularMode),e.cellularBars!==void 0&&(e.cellularMode||It(e.dataNetwork)||e.operatorName!==void 0)&&t.push(`--cellularBars`,e.cellularBars),e.operatorName!==void 0&&t.push(`--operatorName`,e.operatorName),t}function It(e){return!!(e&&e!==`hide`&&e!==`wifi`)}function L(e,t,n){u({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...b(n)}})}async function Lt(n,r,i,a,o){if(d(n)){let e=r.toLowerCase();if(e===`appearance`){await lt(i);return}if(e===`permission`){let e=me(i);if(e===`deny`)throw new t(`INVALID_ARGS`,de(`permission`));let n=Ut(o?.permissionTarget);return await it(e,n)}throw new t(`INVALID_ARGS`,de(r))}D(n,`settings`),await O(n);let s=r.toLowerCase();switch(s){case`clear-app-state`:{if(i.toLowerCase()!==`clear`)throw new t(`INVALID_ARGS`,`settings clear-app-state only supports clear.`);if(!a)throw new t(`INVALID_ARGS`,`settings clear-app-state requires an app id or an active app session.`,e());let r=await Ht(n,a);return{bundleId:r.bundleId,containerPath:r.containerPath,cleared:!0}}case`reset-keychain`:if(i.toLowerCase()!==`clear`)throw new t(`INVALID_ARGS`,`settings reset-keychain only supports clear.`);return await T(n,[`keychain`,n.id,`reset`]),{scope:`simulator`,cleared:!0,message:`Reset the whole iOS simulator keychain. This clears keychain-backed credentials for every installed app, not just the app under test.`};case`wifi`:{let e=m(i)?`active`:`failed`;await T(n,[`status_bar`,n.id,`override`,`--wifiMode`,e]),M(n);return}case`airplane`:m(i)?(await T(n,[`status_bar`,n.id,`override`,`--dataNetwork`,`hide`,`--wifiMode`,`failed`,`--wifiBars`,`0`,`--cellularMode`,`failed`,`--cellularBars`,`0`,`--operatorName`,``]),M(n)):(await T(n,[`status_bar`,n.id,`clear`]),N(n));return;case`faceid`:case`touchid`:{A(n,fe);let e=s,t=Wt[e];await Kt(n,Gt(i,e),{settingName:e,notificationModality:t.notificationModality});return}case`text-size`:return await wt(n,i);case`appearance`:case`permission`:case`location`:return await pt({runSimctl:e=>T(n,e),udid:n.id,deviceId:n.id,setting:s,state:i,appBundleId:a,options:o});default:throw new t(`INVALID_ARGS`,`Unsupported setting: ${r}`)}}const Rt={"text-size":Tt};async function zt(e,t){return await Rt[t](e)}const Bt=[`Documents`,`Library/Caches`,`Library/Preferences`,`SystemData`,`tmp`];function Vt(e){return`${e} has no data container to clear. Apps shipped in the simulator runtime, such as system apps, own no data container, so there is no app state here to remove.`}async function Ht(e,n){if(!te(e)||e.kind!==`simulator`)throw new t(`UNSUPPORTED_OPERATION`,`Clearing app state is currently supported only on iOS simulators.`);let r=await st(e,n);await O(e),await $e(e,r);let i=h(await T(e,[`get_app_container`,e.id,r,`data`],{allowFailure:!0}),`simctl get_app_container failed for ${r}`),a=Xe(i.stdout);if(a===void 0)throw new t(`UNSUPPORTED_OPERATION`,Vt(r),{reason:`app-no-data-container`,appBundleId:r,deviceId:e.id,hint:`Clear the app under test instead. A runtime-shipped app keeps no data container, so this command has no app state to remove; to reset it, erase or recreate the simulator device, or uninstall and reinstall the app if you installed it yourself.`});let o=await Re(a);return await Promise.all(o.filter(e=>e!==`.com.apple.mobile_container_manager.metadata.plist`).map(e=>Le(k.join(a,e)))),await Promise.all(Bt.map(e=>ze(k.join(a,e)))),{bundleId:r,containerPath:a}}function Ut(e){let n=e?.trim().toLowerCase();if(n===`accessibility`||n===`screen-recording`||n===`input-monitoring`)return n;throw new t(`INVALID_ARGS`,`Unsupported macOS permission target. Use accessibility|screen-recording|input-monitoring.`)}const Wt={faceid:{notificationModality:`pearl`},touchid:{notificationModality:`fingerTouch`}};function Gt(e,n){let r=e.trim().toLowerCase();if(r===`match`)return`match`;if(r===`nonmatch`)return`nonmatch`;if(r===`enroll`)return`enroll`;if(r===`unenroll`)return`unenroll`;throw new t(`INVALID_ARGS`,`Invalid ${n} state: ${e}. Use match|nonmatch|enroll|unenroll.`)}async function Kt(e,n,i){let a=w(e,Yt(e.id,n,i.notificationModality)),o=await We(a,{allowFailure:!0}),s=[];if(o.exitCode!==0)s.push({args:a,stderr:o.stderr,stdout:o.stdout,exitCode:o.exitCode});else{let t=qt(n);if(t!==void 0){let n=await Jt(e);if(n.state===t)return;s.push({args:n.args,stderr:n.stderr,stdout:n.stdout,exitCode:n.exitCode})}else return}throw new t(`COMMAND_FAILED`,`Failed to simulate ${i.settingName}.`,{deviceId:e.id,action:n,setting:i.settingName,attempts:r(s)})}const R=`com.apple.BiometricKit.enrollmentChanged`;function qt(e){if(e===`enroll`)return`1`;if(e===`unenroll`)return`0`}async function Jt(e){let t=w(e,[`spawn`,e.id,`notifyutil`,`-g`,R]),n=await We(t,{allowFailure:!0}),r=n.stdout.split(`
5
- `).map(e=>e.trim().split(/\s+/)).find(e=>e[0]===R)?.[1];return{args:t,stderr:n.stderr,stdout:n.stdout,exitCode:n.exitCode,state:n.exitCode===0?r:void 0}}function Yt(e,t,n){let r=[`spawn`,e,`notifyutil`];switch(t){case`match`:return[...r,`-p`,`com.apple.BiometricKit_Sim.${n}.match`];case`nonmatch`:return[...r,`-p`,`com.apple.BiometricKit_Sim.${n}.nomatch`];case`enroll`:return[...r,`-s`,R,`1`,`-p`,R];case`unenroll`:return[...r,`-s`,R,`0`,`-p`,R]}}function Xt(e){let t=e.screenshotMetadata;if(!t||typeof t!=`object`||Array.isArray(t))return;let n=t,r=z(n.displayID),i=z(n.pixelWidth),a=z(n.pixelHeight),o=Zt(n.pixelsPerPoint);if(r!==void 0&&i!==void 0&&a!==void 0&&o!==void 0)return Object.freeze({displayID:r,pixelWidth:i,pixelHeight:a,pixelsPerPoint:o})}function z(e){return typeof e==`number`&&Number.isInteger(e)&&e>0?e:void 0}function Zt(e){return typeof e==`number`&&Number.isFinite(e)&&e>0?e:void 0}const Qt={ensureBooted:O,prepareStatusBarForScreenshot:At,resolveCaptureTarget:dt,captureWithRetry:tn,normalizeDensity:dn,captureWithRunner:H,shouldFallbackToRunner:ln},B=new Map,V=new Map;async function $t(e,t,n={}){return d(e)?(await H(e,t,n.appBundleId,n.fullscreen,n.runnerOptions),{}):e.kind===`simulator`?await en(e,t,n):(await x(e).captureScreenshot(e,t,{appBundleId:n.appBundleId,fullscreen:n.fullscreen,runnerOptions:n.runnerOptions,runRunnerCommand:E}),{})}async function en(e,n,r={}){if(e.kind!==`simulator`)throw new t(`UNSUPPORTED_OPERATION`,`Simulator screenshot fallback flow supports only iOS simulators`);let i={...Qt,...r.deps??{}};r.skipIosSimulatorBootCheck||await i.ensureBooted(e);let{display:a,displayRotation:o}=await i.resolveCaptureTarget(e),s=o?{displayRotation:o}:{},c=async()=>{await i.captureWithRetry(e,n,a),await i.normalizeDensity(e,n,r.pixelDensity,a?.pointScale)},l=async()=>{};if(r.normalizeStatusBar===!0)try{l=await i.prepareStatusBarForScreenshot(e)}catch(t){sn(e,`prepare_failed`,t)}try{try{return await c(),s}catch(t){let n=t;if(r.skipIosSimulatorBootCheck&&un(t)){await i.ensureBooted(e);try{return await c(),s}catch(e){n=e}}if(!i.shouldFallbackToRunner(n))throw n;on(e,`simctl_screenshot`,n)}let t=await i.captureWithRunner(e,n,r.appBundleId,r.fullscreen,r.runnerOptions);return await i.normalizeDensity(e,n,r.pixelDensity,t?.pixelsPerPoint),s}finally{await l().catch(t=>sn(e,`restore_failed`,t))}}async function tn(e,t,n){let r=xe.fromTimeoutMs(Ve),i=[`io`,e.id,`screenshot`,...ft(n),t];await be(async({deadline:t})=>{await T(e,i,{timeoutMs:Math.max(1e3,t?.remainingMs()??2e4)})},{maxAttempts:5,baseDelayMs:Be,maxDelayMs:Ue,jitter:.2,shouldRetry:e=>ln(e)},{deadline:r,phase:`ios_simulator_screenshot`})}async function H(e,n,r,i,a){if(e.kind===`device`&&!d(e)){await x(e).captureScreenshot(e,n,{appBundleId:r,fullscreen:i,runnerOptions:a,preferRunner:!0,runRunnerCommand:E});return}let o=await E(e,{command:`screenshot`,appBundleId:r,fullscreen:i,inlineScreenshot:!1},a),s=o.message;if(!s)throw new t(`COMMAND_FAILED`,`Failed to capture iOS screenshot: runner returned no file path`);let c=Xt(o);if(d(e))return await v(s,n),c;if(e.kind===`simulator`)return await nn(e,s,n),c;throw new t(`COMMAND_FAILED`,`Unsupported Apple screenshot target`)}async function nn(e,n,r){let i=xe.fromTimeoutMs(y),a=`Unable to locate runner container for simulator screenshot`,o=V.get(e.id);if(o){let t=await rn(o,n,r);if(t.copied)return;a=t.error,V.delete(e.id)}for(let t of Ye){let o=await T(e,[`get_app_container`,e.id,t,`data`],{allowFailure:!0,timeoutMs:an(i,y,`runner screenshot container lookup`)});if(o.exitCode!==0){let e=o.stderr.trim();e&&(a=e);continue}let s=Xe(o.stdout);if(s===void 0){a=`simctl get_app_container returned no data container path`;continue}let c=await rn(s,n,r);if(c.copied){V.set(e.id,s);return}a=c.error}throw new t(`COMMAND_FAILED`,`Failed to capture iOS screenshot: ${a}`)}async function rn(e,t,n){let r=`Runner screenshot was not found in the simulator container`;for(let i of cn(e,t))try{return await v(i,n),{copied:!0}}catch(e){r=e instanceof Error?e.message:String(e)}return{copied:!1,error:r}}function an(e,n,r){let i=e.remainingMs();if(i>0)return i;throw new t(`COMMAND_FAILED`,`iOS ${r} timed out after ${n}ms`,{timeoutMs:n,step:r})}function on(e,t,n){let r=b(n);u({level:`warn`,phase:`ios_screenshot_fallback`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,from:t,to:`runner`,...r}})}function sn(e,t,n){u({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...b(n)}})}function cn(e,t){let n=k.resolve(e),r=t.trim();if(!r)return[];let i=[],a=new Set,o=e=>{let t=k.normalize(e);a.has(t)||(a.add(t),i.push(t))},s=r.replace(/^\/+/,``),c=s.replaceAll(`\\`,`/`);if(s&&o(k.join(n,s)),k.isAbsolute(r)&&o(k.normalize(r)),c.startsWith(`tmp/`))o(k.join(n,c));else{let e=c.lastIndexOf(`/tmp/`);if(e>=0){let t=c.slice(e+1);o(k.join(n,t))}}let l=k.basename(r);return l&&o(k.join(n,`tmp`,l)),i}function ln(e){if(!(e instanceof t)||e.code!==`COMMAND_FAILED`)return!1;let n=Ge(e);return n.includes(`timeout waiting for screen surfaces`)||n.includes(`nsposixerrordomain`)&&n.includes(`code=60`)&&n.includes(`screenshot`)||n.includes(`timed out`)&&n.includes(`screenshot`)}function un(e){if(!(e instanceof t)||e.code!==`COMMAND_FAILED`)return!1;let n=Ge(e);return n.includes(`not booted`)||n.includes(`current state: shutdown`)||n.includes(`current state is shutdown`)||n.includes(`current state=shutdown`)||n.includes(`state: shutdown`)||n.includes(`state=shutdown`)}async function dn(e,t,n,r){let i=r??await fn(e),a=Fe(await Pe(t),i,n);a&&await ke(t,a.width,a.height)}async function fn(e){let n=B.get(e.id);if(n!==void 0)return n;let r=await T(e,[`getenv`,e.id,`SIMULATOR_MAINSCREEN_SCALE`],{timeoutMs:He}),i=Number(r.stdout.trim());if(!Number.isFinite(i)||i<=0)throw new t(`COMMAND_FAILED`,`Failed to read iOS simulator screenshot scale from SIMULATOR_MAINSCREEN_SCALE`);return B.set(e.id,i),i}function pn(e){return!(e instanceof t)||e.details?.runnerErrorCode!==`SCROLL_KEYBOARD_OCCLUDES_SURFACE`?e:new t(e.code,e.message,{...e.details,...se})}function mn(e){let t=e?.amount!==void 0||e?.pixels!==void 0;return{...e,...t?{}:{amount:ve},durationMs:e?.durationMs??400,releaseBehavior:e?.releaseBehavior??`controlled`}}function U(e,t,n,r={includeDuration:!0}){let i=W(e.referenceWidth),a=W(e.referenceHeight);if(i===void 0||a===void 0)return G(e,{amount:n?.amount});let o=oe({direction:t,amount:n?.amount,pixels:n?.pixels,referenceWidth:i,referenceHeight:a});return G(e,{amount:n?.amount,pixels:o.pixels,durationMs:r?.includeDuration?n?.durationMs:void 0,preferProvidedPixels:!0})}function hn(e,t={}){return{...e?.amount===void 0?{}:{amount:e.amount},...e?.pixels===void 0?{}:{pixels:e.pixels},...t.includeDuration!==!1&&e?.durationMs!==void 0?{durationMs:e.durationMs}:{},...t.includeReleaseBehavior!==!1&&e?.releaseBehavior!==void 0?{scrollReleaseBehavior:e.releaseBehavior}:{}}}function W(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function G(e,t){let{x1:n,y1:r,x2:i,y2:a}=_n(e),o=W(e.referenceWidth),s=W(e.referenceHeight),c=gn(t,n!==void 0&&i!==void 0?Math.round(Math.abs(i-n)):void 0,r!==void 0&&a!==void 0?Math.round(Math.abs(a-r)):void 0),l=W(e.keyboardMinY);return{...n===void 0?{}:{x1:n},...r===void 0?{}:{y1:r},...i===void 0?{}:{x2:i},...a===void 0?{}:{y2:a},...o===void 0?{}:{referenceWidth:o},...s===void 0?{}:{referenceHeight:s},...e.keyboardAvoided===!0?{keyboardAvoided:!0}:{},...l===void 0?{}:{keyboardMinY:l},...t?.amount===void 0?{}:{amount:t.amount},...c===void 0?{}:{pixels:c},...t?.durationMs===void 0?{}:{durationMs:t.durationMs}}}function gn(e,t,n){if(e?.preferProvidedPixels&&e.pixels!==void 0)return e.pixels;if(t!==void 0&&t>0)return t;if(n!==void 0&&n>0)return n}function _n(e){let t=W(e.x),n=W(e.y),r=W(e.x2),i=W(e.y2);return{...t===void 0?{}:{x1:t},...n===void 0?{}:{y1:n},...r===void 0?{}:{x2:r},...i===void 0?{}:{y2:i}}}async function vn(e,t,n,r,i,a){return U(await e(t,{command:`desktopScroll`,direction:i,...hn(a,{includeDuration:!0,includeReleaseBehavior:!1}),appBundleId:n.appBundleId},r),i,a,{includeDuration:!0})}function K(e,t,n){return{command:`remotePress`,remoteButton:e,...n===void 0?{}:{durationMs:n},...t===void 0?{}:{appBundleId:t}}}function yn(e){return e===`system`?`backSystem`:`backInApp`}function bn(e,t){let n={signal:t.signal,verbose:t.verbose,logPath:t.logPath,traceLogPath:t.traceLogPath,requestId:t.requestId,iosXctestrunFile:t.iosXctestrunFile,iosXctestDerivedDataPath:t.iosXctestDerivedDataPath,iosXctestEnvDir:t.iosXctestEnvDir,runnerLeaseContext:t.runnerLeaseContext};return{runnerOpts:n,overrides:{tap:async(r,i)=>await E(e,J(e,t,r,i),n),pressPoint:async(r,i)=>await xn(e,t,n,r,i),tapElementSelector:async r=>await E(e,{command:`tap`,selectorKey:r.key,selectorValue:r.value,allowNonHittableCoordinateFallback:r.allowNonHittableCoordinateFallback,...r.expectedPoint?{x:r.expectedPoint.x,y:r.expectedPoint.y}:{},...ne(e)?{synthesized:!0}:{},appBundleId:t.appBundleId},n),doubleTap:async(r,i)=>{let a=await E(e,S([{kind:`doubleTap`,x:r,y:i}],t.appBundleId),n);return C(a),a},appState:async()=>En(await E(e,{command:`appState`,appBundleId:t.appBundleId},n)),longPress:async(r,i,a)=>await E(e,{command:`longPress`,x:r,y:i,durationMs:a,appBundleId:t.appBundleId},n),focus:async(r,i)=>await E(e,J(e,t,r,i),n),type:async(r,i)=>Tn(await E(e,{command:`type`,text:r,delayMs:i,textEntryMode:r===`
6
- `?void 0:`append`,appBundleId:t.appBundleId},n)),fill:async(r,i,a,o,s)=>await E(e,{command:`type`,x:r,y:i,text:a,delayMs:o,textEntryMode:`replace`,...s?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},appBundleId:t.appBundleId},n),scroll:async(r,i)=>await jn(E,e,t,n,r,i),performGesture:async r=>await kn(e,t,n,r),gestureViewport:async()=>On(await E(e,{command:`gestureViewport`,appBundleId:t.appBundleId},n))}}}async function xn(e,t,n,r,i){let a=d(e)?p(i.surface,`xctest`):void 0;return a?await Sn(t,r,i,a):i.button===`primary`?i.count===1?await wn(e,t,n,r,i):await Ke(e,r,i,t.appBundleId,async t=>await E(e,t,n)):await Cn(e,t,n,r,i.button)}async function Sn(e,n,r,i){if(r.button!==`primary`)throw new t(`UNSUPPORTED_OPERATION`,`${r.button} click is not supported on macOS ${i} sessions.`);let{runMacOsPressAction:a}=await import(`./helper.js`).then(e=>e.n),o=await a(n.x,n.y,{bundleId:e.appBundleId,surface:i,holdMs:r.holdMs,clicks:r.count,doubleClick:r.doubleTap,intervalMs:r.intervalMs,signal:e.signal});return o.holdMs===void 0?{}:{holdMs:o.holdMs}}async function Cn(e,t,n,r,i){return await E(e,{command:`mouseClick`,x:r.x,y:r.y,button:i,appBundleId:t.appBundleId},n)}async function wn(e,t,n,r,i){if(i.doubleTap){let i=await E(e,S([{kind:`doubleTap`,x:r.x,y:r.y}],t.appBundleId),n);return C(i),i}return i.holdMs>0?await E(e,{command:`longPress`,x:r.x,y:r.y,durationMs:i.holdMs,appBundleId:t.appBundleId},n):await E(e,J(e,t,r.x,r.y),n)}function Tn(e){let t=e.textEntryRoute;return Dn(t)?{textEntryRoute:t}:{}}function En(e){let t=e.applicationState;return i(t)?{applicationState:t}:{}}function Dn(e){return typeof e==`string`&&mt.includes(e)}function On(e){let n=q(e.x),r=q(e.y),i=q(e.x2),a=q(e.y2);if(n===void 0||r===void 0||i===void 0||a===void 0||i<=0||a<=0)throw new t(`COMMAND_FAILED`,`Apple runner returned an invalid gesture viewport`);return{x:n,y:r,width:i,height:a}}function q(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}async function kn(e,t,n,r){if(r.topology===`two`&&ht(e,r.intent),r.topology===`single`&&d(e)){let{start:i,end:a}=Ce(r);return await E(e,{command:`drag`,x:i.x,y:i.y,x2:a.x,y2:a.y,durationMs:r.durationMs,appBundleId:t.appBundleId},n)}if(r.topology===`single`&&f(e)){let{start:i,end:a}=Ce(r);return await E(e,{command:`swipe`,direction:An(i,a),appBundleId:t.appBundleId},n)}return await E(e,{command:`gesture`,gesturePlan:r,appBundleId:t.appBundleId},n)}function An(e,t){let n=t.x-e.x,r=t.y-e.y;return Math.abs(n)>=Math.abs(r)?n>=0?`right`:`left`:r>=0?`down`:`up`}function J(e,t,n,r){return{command:`tap`,x:n,y:r,...ne(e)?{synthesized:!0}:{},appBundleId:t.appBundleId}}async function jn(e,t,n,r,i,a){if(ge(a?.durationMs,{invalidMessage:`scroll durationMs must be a non-negative integer at most ${_e}`}),f(t))return G(await e(t,K(i,n.appBundleId,a?.durationMs),r),{amount:a?.amount,durationMs:a?.durationMs});if(ce(a??{}),d(t))return await vn(e,t,n,r,i,a);let o=mn(a),s;try{s=await e(t,{command:`scroll`,direction:i,...hn(o),appBundleId:n.appBundleId},r)}catch(e){throw pn(e)}return U(s,i,o)}const Mn=p(`app`,`native`),Nn=`The native macOS app backend acts through accessibility actions only. Unset AGENT_DEVICE_MACOS_APP_BACKEND to drive this app with XCTest.`,Pn=new Set(at);function Fn(e,t){let n=()=>{if(t.appBundleId)return t.appBundleId;throw Y(`an action on a session that names no app`)},r=async(e,r={})=>In(await X(et(e.x,e.y,{surface:Mn,bundleId:n(),clicks:r.count,intervalMs:r.intervalMs,signal:t.signal})));return{open:e.open,openDevice:e.openDevice,close:e.close,screenshot:e.screenshot,snapshot:e.snapshot,readTextAtPoint:e.readTextAtPoint,readClipboard:e.readClipboard,writeClipboard:e.writeClipboard,setSetting:e.setSetting,readAlert:e.readAlert,awaitAlert:e.awaitAlert,acceptAlert:e.acceptAlert,dismissAlert:e.dismissAlert,tap:async(e,t)=>await r({x:e,y:t}),pressPoint:async(t,n)=>{if(n.surface!==void 0&&n.surface!==`app`)return await e.pressPoint(t,n);if(n.button!==`primary`)throw Y(`${n.button} click`);if(n.doubleTap)throw Y(`double-click`);if(n.holdMs>0)throw Y(`press and hold`);return await r(t,n)},longPress:async()=>{throw Y(`press and hold`)},focus:async(e,t)=>await r({x:e,y:t}),type:async(e,r)=>{await X(tt(e,{bundleId:n(),delayMs:r,signal:t.signal}))},fill:async(e,r,i)=>In(await X(rt(e,r,i,{bundleId:n(),signal:t.signal}))),scroll:async(e,r)=>{ce(r??{});let i=await X(ot(e,{bundleId:n(),amount:r?.amount,pixels:r?.pixels,signal:t.signal}));return{...U(i,e,r,{includeDuration:!1}),mechanism:i.mechanism}},back:async()=>{throw Y(`back`)},setOrientation:async()=>{throw Y(`orientation`)}}}function In(e){return{mechanism:e.mechanism,...e.windowTitle===void 0?{}:{windowTitle:e.windowTitle}}}function Y(e){return new t(`UNSUPPORTED_OPERATION`,`${e} is not supported by the native macOS app backend.`,{reason:`unsupported-device-backend`,hint:Nn})}async function X(e){try{return await e}catch(e){if(!(e instanceof t))throw e;let n=e.details?.reason;throw typeof n!=`string`||!Pn.has(n)?e:new t(`UNSUPPORTED_OPERATION`,e.message,{...e.details,reason:`unsupported-device-backend`,helperReason:n,hint:Nn},e)}}const Ln={0:`unknown`,1:`notRunning`,2:`runningBackgroundSuspended`,3:`runningBackground`};function Rn(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return;let r={...e},i=r.reason;if(!n(i))return;let a=r.priorState;if(typeof a!=`number`||!Number.isInteger(a))return;let o=Ln[a];o===void 0&&t?.({reason:i,rawPriorState:a});let s=r.otherActiveApplicationPid;return{reason:i,priorState:o??`unknown`,...typeof s==`number`&&Number.isInteger(s)&&s>0?{otherActiveApplicationPid:s}:{}}}function zn(e){let t=Bn(e.systemSurface),n=s(e.keyboard),r=o(e.observation),i=Rn(e.targetActivation,e=>Je({level:`debug`,phase:`ios_runner_target_activation_prior_state_unmapped`,data:e}));return{nodes:Array.isArray(e.nodes)?e.nodes:void 0,truncated:typeof e.truncated==`boolean`?e.truncated:void 0,quality:Ae(e.snapshotQuality),qualityPayload:Wn(e.qualityPayload,t),runnerFatal:e.runnerFatal===!0,...n?{keyboard:n}:{},...t?{systemSurface:t}:{},...i?{targetActivation:i}:{},...r?{observation:r}:{},message:typeof e.message==`string`&&e.message.trim().length>0?e.message:void 0}}function Bn(e){if(!c(e)||typeof e.bundleId!=`string`)return;let t=Oe(e.bundleId);return t&&{bundleId:t.bundleId,kind:t.kind}}function Vn(e,t,n){let r=n.nodes??[],i=Gn(r,n.qualityPayload?.nodes);if(n.runnerFatal===!0||r.length===0&&n.qualityPayload===void 0)return{nodes:r};let a=Ee({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions}),o={stage:`presented`,presentation:{producer:`apple-runner`,intent:`full`,payload:{nodes:r,truncated:n.truncated??!1,...n.quality?.effectiveDepth===void 0?{}:{effectiveDepth:n.quality.effectiveDepth}},...n.qualityPayload?{qualityPayload:n.qualityPayload}:{}},validation:{presentationKey:Te(a),viewport:i,hittability:{kind:`available`},lineage:{targetId:e},residue:[]}};try{let e=Ie(o,a),t=ae(e.validatedViewport);return{nodes:e.nodes,...t?{viewport:t}:{}}}catch(e){Hn(e,n)}}function Hn(e,n){let r=n.quality;if(e instanceof _&&Me(r))throw new t(`COMMAND_FAILED`,e.message,{...g(e),...n.systemSurface?{systemSurface:n.systemSurface}:{},snapshotQuality:{state:r.state,backend:r.backend,...r.reason?{reason:r.reason}:{},...r.reasonCode?{reasonCode:r.reasonCode}:{}},hint:Un(n.systemSurface,r)},e);Z(e,n.systemSurface)}function Un(e,t){return[e?`${e.bundleId} hosts the surface presented over the app, and this capture targeted that surface.`:void 0,...je(t,[])].filter(e=>e!==void 0).join(` `)}function Wn(e,t){if(e!==void 0)return(!c(e)||!Array.isArray(e.nodes)||typeof e.truncated!=`boolean`)&&Z(new _(`invalid-quality-payload`,`iOS runner returned an invalid quality payload`),t),e.scope!==void 0&&e.scope!==null&&Z(new _(`invalid-quality-payload`,`iOS runner quality payload must be unscoped`,{field:`scope`}),t),{nodes:e.nodes,truncated:e.truncated,scope:null}}function Gn(e,t){return Ne(Kn(t),{fallbackToLargestRoot:!0})??Ne(Kn(e),{fallbackToLargestRoot:!0})??{kind:`missing`,reason:`not-provided`}}function Kn(e){return e?.filter(e=>e.parentIndex===void 0)??[]}function Z(e,n){throw e instanceof _?new t(`COMMAND_FAILED`,e.message,{...g(e),...n?{systemSurface:n}:{}},e):e}function qn(e,n,r){if(e.appleOs===`watchos`)throw new t(`UNSUPPORTED_PLATFORM`,`watchOS is not supported: XCUITest cannot drive watchOS UI, so this device has no runner backend.`);let{overrides:i,runnerOpts:a}=bn(e,n),o=d(e)?gt():`xctest`,s=t=>d(e)?p(t,o):void 0,c={open:(t,n)=>Ze(e,t,{appBundleId:n?.appBundleId,launchConsole:n?.launchConsole,launchArgs:n?.launchArgs,terminateRunningApp:n?.terminateRunningApp,url:n?.url,runnerOptions:a}),openDevice:()=>Qe(e),close:t=>$e(e,t,a),screenshot:(t,n)=>or(e,t,n,a,s(n?.surface)),snapshot:async t=>await Jn(e,t,a,s(t?.surface)),readTextAtPoint:async(t,n)=>{let r=s(n?.surface);return r?await sr(t,r,n?.appBundleId,n?.signal):await cr(e,t,n,a)},findText:async(t,n)=>({found:(await E(e,{command:`findText`,text:t,appBundleId:n?.appBundleId},n?.signal?{...a,signal:n.signal}:a))?.found===!0}),back:async t=>{if(f(e)){await E(e,K(`menu`,n.appBundleId),a);return}await E(e,{command:yn(t),appBundleId:n.appBundleId},a)},home:async()=>{if(f(e)){await E(e,K(`home`,n.appBundleId),a);return}await E(e,{command:`home`,appBundleId:n.appBundleId},a)},setOrientation:async r=>{let i=ir(await E(e,{command:`rotate`,orientation:r,appBundleId:n.appBundleId},a));if(i!==r)throw new t(`COMMAND_FAILED`,`iOS runner observed ${i} after requesting ${r}`,{requestedOrientation:r,observedOrientation:i});return{orientation:i}},appSwitcher:async()=>{await E(e,{command:`appSwitcher`,appBundleId:n.appBundleId},a)},actionButton:async()=>{await E(e,{command:`actionButton`,appBundleId:n.appBundleId},a)},tvRemote:async(t,r)=>{await E(e,K(Se(t),n.appBundleId,r),a)},keyboardDismiss:async()=>{let t=await E(e,{command:`keyboardDismiss`,appBundleId:n.appBundleId},a);return{kind:`mechanism`,wasVisible:Q(t,`wasVisible`),dismissed:Q(t,`dismissed`),visible:Q(t,`visible`),mechanism:rr(t,`keyboardDismissMechanism`)}},keyboardEnter:async()=>{let t=await E(e,{command:`keyboardReturn`,appBundleId:n.appBundleId},a);return{kind:`visibility-echo`,visible:Q(t,`visible`),wasVisible:Q(t,`wasVisible`)}},readClipboard:()=>St(e),writeClipboard:t=>Ct(e,t,a),setSetting:(t,n,r,i)=>Lt(e,t,n,r,i),readSetting:t=>zt(e,t),readAlert:t=>_t(e,a,t),awaitAlert:t=>vt(e,a,t),acceptAlert:t=>yt(e,a,`accept`,t),dismissAlert:t=>yt(e,a,`dismiss`,t),...i},l=o===`native`?Fn(c,n):c;return r?ar(e,n,l,r):l}async function Jn(e,t,n,r){return r?await bt({...t,surface:r},t?.signal):await Yn(e,t,n)}async function Yn(e,t,n){let r=zn(await l(`snapshot_capture`,async()=>await E(e,Xn(t),nr(n,t?.signal)),{backend:`xctest`}));Zn(t,r),Qn(e,t,r);let i=$n(r),a=er(e,t,r);return{nodes:a.nodes,truncated:r.truncated??!1,backend:`xctest`,producer:`apple-runner`,...a.viewport?{viewport:a.viewport}:{},...r.quality?{quality:r.quality}:{},...r.systemSurface?{systemSurface:r.systemSurface}:{},...r.keyboard?{keyboard:r.keyboard}:{},...r.targetActivation?{targetActivation:r.targetActivation}:{},...r.observation?{observation:r.observation}:{},...i.length>0?{warnings:i}:{}}}function Xn(e){let{appBundleId:t,interactiveOnly:n,preferredBackend:r,customActions:i,depth:a,scope:o,raw:s}=e??{};return{command:`snapshot`,appBundleId:t,interactiveOnly:n,preferredBackend:r,customActions:i,...e?.observeOnly===!0?{observeOnly:!0}:{},depth:a,scope:o,raw:s}}function Zn(e,n){if(e?.observeOnly===!0&&!(n.observation&&!n.targetActivation))throw new t(`COMMAND_FAILED`,`Runner did not return an observe-only snapshot.`,{reason:`observation-unavailable`})}function Qn(e,n,r){if(!((r.nodes?.length??0)>0)&&!tr(n,r.quality)&&e.kind===`simulator`)throw new t(`COMMAND_FAILED`,`XCTest snapshot returned 0 nodes on iOS simulator.`)}function $n(e){let t=[];return!e.quality&&e.message&&t.push(e.message),e.systemSurface&&t.push(De(e.systemSurface.bundleId)),e.targetActivation&&t.push(xt(e.targetActivation)),t}function er(e,t,n){return d(e)?{nodes:n.nodes??[]}:Vn(e.id,t,n)}function tr(e,t){return ie(e?.scope)!==null&&t!==void 0&&t.state!==`sparse`}function nr(e,t){return t?{...e,signal:e.signal?AbortSignal.any([e.signal,t]):t}:e}function Q(e,t){let n=e[t];return typeof n==`boolean`?n:void 0}function rr(e,t){let n=e[t];return typeof n==`string`?n:void 0}function ir(e){let n=e.orientation;if(typeof n==`string`&&ye.includes(n))return n;throw new t(`COMMAND_FAILED`,`iOS runner returned an invalid orientation result`,{orientation:n})}function ar(e,t,n,r){let i={...n,open:async()=>$(`open`),openDevice:async()=>$(`openDevice`),close:async()=>$(`close`),screenshot:async()=>$(`screenshot`),readClipboard:async()=>$(`readClipboard`),setSetting:async()=>$(`setSetting`),readSetting:async()=>$(`readSetting`)};return we(i,n=>qe(r,{deviceId:e.id,requestId:t.requestId},n))}function $(e){throw new t(`UNSUPPORTED_OPERATION`,`${e} uses local Apple tooling (simctl/devicectl), which an injected runner transport cannot reach; the provider session must supply its own ${e} implementation.`)}async function or(e,n,r={},i,o){if(o){if(r.fullscreen)throw new t(`INVALID_ARGS`,`screenshot --fullscreen is not accepted on the macOS ${o} surface: its capture frame is fixed`,{reason:a.macOsHelperSurfaceFixedFrame,surface:o});return await nt(n,{surface:o,...o===`app`?{bundleId:r.appBundleId}:{},signal:i.signal}),{}}return r.captureBackend===`runner`?(await H(e,n,r.appBundleId,r.fullscreen,i),{}):await $t(e,n,{appBundleId:r.appBundleId,pixelDensity:r.pixelDensity,fullscreen:r.fullscreen,runnerOptions:i,normalizeStatusBar:r.normalizeStatusBar,skipIosSimulatorBootCheck:r.skipIosSimulatorBootCheck})}async function sr(e,t,n,r){let{runMacOsReadTextAction:i}=await import(`./helper.js`).then(e=>e.n);return(await i(e.x,e.y,{bundleId:n,surface:t,signal:r})).text}async function cr(e,t,n,r){let i=await E(e,{command:`readText`,x:t.x,y:t.y,appBundleId:n?.appBundleId},n?.signal?{...r,signal:n.signal}:r);return typeof i.text==`string`?i.text:typeof i.message==`string`?i.message:void 0}export{qn as createAppleInteractor};
3
+ `).replace(/\n$/,``))}async function wt(e,t,n){if(p(e)){await rt(t);return}if(D(e,`clipboard`),h(e)){let r=n?.signal;await O(e,{signal:r}),y(await w(e,[`pbcopy`,e.id],{allowFailure:!0,stdin:t,signal:r}),`Failed to write tvOS simulator clipboard`);return}await E(e,{command:`pasteboardWrite`,text:t},n)}function A(t,n){if(!ce(t))throw new e(`UNSUPPORTED_OPERATION`,n.message,{deviceId:t.id,appleOs:oe(t),deviceKind:t.kind,reason:n.reason,hint:n.hint})}async function Tt(e,t){A(e,me);let n=fe(t);return await w(e,[`ui`,e.id,`content_size`,n]),_(n,n)}async function Et(t){A(t,me),await O(t);let n=y(await w(t,[`ui`,t.id,`content_size`],{allowFailure:!0}),`Failed to read iOS content size category`),r=n.stdout.trim(),i=de(r);if(i===void 0)throw new e(`COMMAND_FAILED`,`iOS simulator reported an unknown text size: ${r||`(empty)`}`,{deviceId:t.id,stdout:n.stdout,stderr:n.stderr,hint:"Boot the simulator, or run `xcrun simctl ui <device> content_size` to see what it reports."});return _(i,r)}const Dt=[`--time`,`9:41`,`--dataNetwork`,`wifi`,`--wifiMode`,`active`,`--wifiBars`,`3`,`--batteryState`,`charged`,`--batteryLevel`,`100`],Ot={0:`hide`,1:`wifi`,6:`3g`,7:`4g`,8:`lte`,9:`lte-a`,10:`lte+`,11:`5g`,12:`5g+`,13:`5g-uwb`,14:`5g-uc`},kt={1:`searching`,2:`failed`,3:`active`},At={0:`notSupported`,1:`searching`,2:`failed`,3:`active`},j=new Set;async function jt(e){let t=null,n=!1;if(Nt(e))n=!0;else try{t=await Pt(e),n=!0}catch(t){L(e,`snapshot_failed`,t)}try{(!n||t)&&await F(e),await I(e,Dt)}catch(t){L(e,`prepare_failed`,t)}return async()=>{await Mt(e,n?t:null)}}async function Mt(e,t){if(await F(e),!t){N(e);return}await I(e,It(t)),M(e)}function M(e){j.delete(P(e))}function N(e){j.add(P(e))}function Nt(e){return j.has(P(e))}function P(e){return`${e.platform}:${e.kind}:${e.id}`}async function Pt(e){return Ft(y(await w(e,[`status_bar`,e.id,`list`],{allowFailure:!0}),`Failed to read simulator status bar overrides`).stdout)}async function F(e){await w(e,[`status_bar`,e.id,`clear`])}async function I(e,t){t.length!==0&&await w(e,[`status_bar`,e.id,`override`,...t])}function Ft(t){let n={},r=t.split(`
4
+ `).map(e=>e.trim()).filter(e=>e.length>0&&e!==`Current Status Bar Overrides:`&&!/^=+$/.test(e));for(let t of r){let r=/^DataNetworkType:\s+(\d+)$/.exec(t);if(r){let t=Number(r[1]),i=Ot[t];if(!i)throw new e(`COMMAND_FAILED`,`Unsupported simulator data network type: ${t}`);n.dataNetwork=i;continue}let i=/^WiFi Mode:\s+(\d+),\s+WiFi Bars:\s+(\d+)$/.exec(t);if(i){let e=kt[Number(i[1])];e&&(n.wifiMode=e),n.wifiBars=i[2];continue}let a=/^Cell Mode:\s+(\d+),\s+Cell Bars:\s+(\d+)$/.exec(t);if(a){let t=Number(a[1]),r=At[t];if(!r)throw new e(`COMMAND_FAILED`,`Unsupported simulator cellular mode: ${t}`);n.cellularMode=r,n.cellularBars=a[2];continue}let o=/^Operator Name:\s*(.*)$/.exec(t);if(o){n.operatorName=o[1]??``;continue}}return Object.keys(n).length===0?null:n}function It(e){let t=[];return e.dataNetwork&&t.push(`--dataNetwork`,e.dataNetwork),e.wifiMode&&t.push(`--wifiMode`,e.wifiMode),e.wifiBars!==void 0&&(e.dataNetwork===`wifi`||e.wifiMode)&&t.push(`--wifiBars`,e.wifiBars),e.cellularMode&&t.push(`--cellularMode`,e.cellularMode),e.cellularBars!==void 0&&(e.cellularMode||Lt(e.dataNetwork)||e.operatorName!==void 0)&&t.push(`--cellularBars`,e.cellularBars),e.operatorName!==void 0&&t.push(`--operatorName`,e.operatorName),t}function Lt(e){return!!(e&&e!==`hide`&&e!==`wifi`)}function L(e,t,n){f({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...S(n)}})}async function Rt(t,r,i,a,o){if(p(t)){let t=r.toLowerCase();if(t===`appearance`){await it(i);return}if(t===`permission`){let t=_e(i);if(t===`deny`)throw new e(`INVALID_ARGS`,v(`permission`));let n=Wt(o?.permissionTarget);return await Qe(t,n)}throw new e(`INVALID_ARGS`,v(r))}D(t,`settings`),await O(t);let s=r.toLowerCase();switch(s){case`clear-app-state`:{if(i.toLowerCase()!==`clear`)throw new e(`INVALID_ARGS`,`settings clear-app-state only supports clear.`);if(!a)throw new e(`INVALID_ARGS`,`settings clear-app-state requires an app id or an active app session.`,n());let r=await Ut(t,a);return{bundleId:r.bundleId,containerPath:r.containerPath,cleared:!0}}case`reset-keychain`:if(i.toLowerCase()!==`clear`)throw new e(`INVALID_ARGS`,`settings reset-keychain only supports clear.`);return await w(t,[`keychain`,t.id,`reset`]),{scope:`simulator`,cleared:!0,message:`Reset the whole iOS simulator keychain. This clears keychain-backed credentials for every installed app, not just the app under test.`};case`wifi`:{let e=ge(i)?`active`:`failed`;await w(t,[`status_bar`,t.id,`override`,`--wifiMode`,e]),M(t);return}case`airplane`:ge(i)?(await w(t,[`status_bar`,t.id,`override`,`--dataNetwork`,`hide`,`--wifiMode`,`failed`,`--wifiBars`,`0`,`--cellularMode`,`failed`,`--cellularBars`,`0`,`--operatorName`,``]),M(t)):(await w(t,[`status_bar`,t.id,`clear`]),N(t));return;case`faceid`:case`touchid`:{A(t,pe);let e=s,n=Gt[e];await qt(t,Kt(i,e),{settingName:e,notificationModality:n.notificationModality});return}case`text-size`:return await Tt(t,i);case`appearance`:case`permission`:case`location`:return await st({runSimctl:e=>w(t,e),udid:t.id,deviceId:t.id,setting:s,state:i,appBundleId:a,resolveApp:e=>R(t,e),options:o});default:throw new e(`INVALID_ARGS`,`Unsupported setting: ${r}`)}}const zt={"text-size":Et};async function Bt(e,t){return await zt[t](e)}const Vt=[`Documents`,`Library/Caches`,`Library/Preferences`,`SystemData`,`tmp`];function Ht(e){return`${e} has no data container to clear. Apps shipped in the simulator runtime, such as system apps, own no data container, so there is no app state here to remove.`}async function R(e,t){return await he(t,t=>tt(e,t,{installedOnly:!0}))}async function Ut(t,n){if(!se(t)||t.kind!==`simulator`)throw new e(`UNSUPPORTED_OPERATION`,`Clearing app state is currently supported only on iOS simulators.`);let r=await R(t,n);await O(t),await qe(t,r);let i=y(await w(t,[`get_app_container`,t.id,r,`data`],{allowFailure:!0}),`simctl get_app_container failed for ${r}`),a=T(i.stdout);if(a===void 0)throw new e(`UNSUPPORTED_OPERATION`,Ht(r),{reason:`app-no-data-container`,appBundleId:r,deviceId:t.id,hint:`Clear the app under test instead. A runtime-shipped app keeps no data container, so this command has no app state to remove; to reset it, erase or recreate the simulator device, or uninstall and reinstall the app if you installed it yourself.`});let o=await Oe(a);return await Promise.all(o.filter(e=>e!==`.com.apple.mobile_container_manager.metadata.plist`).map(e=>De(k.join(a,e)))),await Promise.all(Vt.map(e=>ke(k.join(a,e)))),{bundleId:r,containerPath:a}}function Wt(t){let n=t?.trim().toLowerCase();if(n===`accessibility`||n===`screen-recording`||n===`input-monitoring`)return n;throw new e(`INVALID_ARGS`,`Unsupported macOS permission target. Use accessibility|screen-recording|input-monitoring.`)}const Gt={faceid:{notificationModality:`pearl`},touchid:{notificationModality:`fingerTouch`}};function Kt(t,n){let r=t.trim().toLowerCase();if(r===`match`)return`match`;if(r===`nonmatch`)return`nonmatch`;if(r===`enroll`)return`enroll`;if(r===`unenroll`)return`unenroll`;throw new e(`INVALID_ARGS`,`Invalid ${n} state: ${t}. Use match|nonmatch|enroll|unenroll.`)}async function qt(t,n,i){let a=C(t,Xt(t.id,n,i.notificationModality)),o=await Ie(a,{allowFailure:!0}),s=[];if(o.exitCode!==0)s.push({args:a,stderr:o.stderr,stdout:o.stdout,exitCode:o.exitCode});else{let e=Jt(n);if(e!==void 0){let n=await Yt(t);if(n.state===e)return;s.push({args:n.args,stderr:n.stderr,stdout:n.stdout,exitCode:n.exitCode})}else return}throw new e(`COMMAND_FAILED`,`Failed to simulate ${i.settingName}.`,{deviceId:t.id,action:n,setting:i.settingName,attempts:r(s)})}const z=`com.apple.BiometricKit.enrollmentChanged`;function Jt(e){if(e===`enroll`)return`1`;if(e===`unenroll`)return`0`}async function Yt(e){let t=C(e,[`spawn`,e.id,`notifyutil`,`-g`,z]),n=await Ie(t,{allowFailure:!0}),r=n.stdout.split(`
5
+ `).map(e=>e.trim().split(/\s+/)).find(e=>e[0]===z)?.[1];return{args:t,stderr:n.stderr,stdout:n.stdout,exitCode:n.exitCode,state:n.exitCode===0?r:void 0}}function Xt(e,t,n){let r=[`spawn`,e,`notifyutil`];switch(t){case`match`:return[...r,`-p`,`com.apple.BiometricKit_Sim.${n}.match`];case`nonmatch`:return[...r,`-p`,`com.apple.BiometricKit_Sim.${n}.nomatch`];case`enroll`:return[...r,`-s`,z,`1`,`-p`,z];case`unenroll`:return[...r,`-s`,z,`0`,`-p`,z]}}function Zt(e){let t=e.screenshotMetadata;if(!t||typeof t!=`object`||Array.isArray(t))return;let n=t,r=B(n.displayID),i=B(n.pixelWidth),a=B(n.pixelHeight),o=Qt(n.pixelsPerPoint);if(r!==void 0&&i!==void 0&&a!==void 0&&o!==void 0)return Object.freeze({displayID:r,pixelWidth:i,pixelHeight:a,pixelsPerPoint:o})}function B(e){return typeof e==`number`&&Number.isInteger(e)&&e>0?e:void 0}function Qt(e){return typeof e==`number`&&Number.isFinite(e)&&e>0?e:void 0}const $t={ensureBooted:O,prepareStatusBarForScreenshot:jt,resolveCaptureTarget:at,captureWithRetry:rn,normalizeDensity:pn,captureWithRunner:H,shouldFallbackToRunner:dn},en=new Map,V=new Map;async function tn(e,t,n={}){return p(e)?(await H(e,t,n.appBundleId,n.fullscreen,n.runnerOptions),{}):e.kind===`simulator`?await nn(e,t,n):(await Re(e).captureScreenshot(e,t,{appBundleId:n.appBundleId,fullscreen:n.fullscreen,runnerOptions:n.runnerOptions,runRunnerCommand:E}),{})}async function nn(t,n,r={}){if(t.kind!==`simulator`)throw new e(`UNSUPPORTED_OPERATION`,`Simulator screenshot fallback flow supports only iOS simulators`);let i={...$t,...r.deps??{}};r.skipIosSimulatorBootCheck||await i.ensureBooted(t);let{display:a,displayRotation:o}=await i.resolveCaptureTarget(t),s=o?{displayRotation:o}:{},c=async()=>{await i.captureWithRetry(t,n,a),await i.normalizeDensity(t,n,r.pixelDensity,a?.pointScale)},l=async()=>{};if(r.normalizeStatusBar===!0)try{l=await i.prepareStatusBarForScreenshot(t)}catch(e){ln(t,`prepare_failed`,e)}try{try{return await c(),s}catch(e){let n=e;if(r.skipIosSimulatorBootCheck&&fn(e)){await i.ensureBooted(t);try{return await c(),s}catch(e){n=e}}if(!i.shouldFallbackToRunner(n))throw n;cn(t,`simctl_screenshot`,n)}let e=await i.captureWithRunner(t,n,r.appBundleId,r.fullscreen,r.runnerOptions);return await i.normalizeDensity(t,n,r.pixelDensity,e?.pixelsPerPoint),s}finally{await l().catch(e=>ln(t,`restore_failed`,e))}}async function rn(e,t,n){let r=ye.fromTimeoutMs(Ne),i=[`io`,e.id,`screenshot`,...ot(n),t];await ve(async({deadline:t})=>{await w(e,i,{timeoutMs:Math.max(1e3,t?.remainingMs()??2e4)})},{maxAttempts:5,baseDelayMs:Me,maxDelayMs:Fe,jitter:.2,shouldRetry:e=>dn(e)},{deadline:r,phase:`ios_simulator_screenshot`})}async function H(t,n,r,i,a){if(t.kind===`device`&&!p(t)){await Re(t).captureScreenshot(t,n,{appBundleId:r,fullscreen:i,runnerOptions:a,preferRunner:!0,runRunnerCommand:E});return}let o=await E(t,{command:`screenshot`,appBundleId:r,fullscreen:i,inlineScreenshot:!1},a),s=o.message;if(!s)throw new e(`COMMAND_FAILED`,`Failed to capture iOS screenshot: runner returned no file path`);let c=Zt(o);if(p(t))return await Ae(s,n),c;if(t.kind===`simulator`)return await an(t,s,n),c;throw new e(`COMMAND_FAILED`,`Unsupported Apple screenshot target`)}async function an(t,n,r){let i=ye.fromTimeoutMs(je),a=`Unable to locate runner container for simulator screenshot`,o=V.get(t.id);if(o){let e=await on(o,n,r);if(e.copied)return;a=e.error,V.delete(t.id)}for(let e of He){let o=await w(t,[`get_app_container`,t.id,e,`data`],{allowFailure:!0,timeoutMs:sn(i,je,`runner screenshot container lookup`)});if(o.exitCode!==0){let e=o.stderr.trim();e&&(a=e);continue}let s=T(o.stdout);if(s===void 0){a=`simctl get_app_container returned no data container path`;continue}let c=await on(s,n,r);if(c.copied){V.set(t.id,s);return}a=c.error}throw new e(`COMMAND_FAILED`,`Failed to capture iOS screenshot: ${a}`)}async function on(e,t,n){let r=`Runner screenshot was not found in the simulator container`;for(let i of un(e,t))try{return await Ae(i,n),{copied:!0}}catch(e){r=e instanceof Error?e.message:String(e)}return{copied:!1,error:r}}function sn(t,n,r){let i=t.remainingMs();if(i>0)return i;throw new e(`COMMAND_FAILED`,`iOS ${r} timed out after ${n}ms`,{timeoutMs:n,step:r})}function cn(e,t,n){let r=S(n);f({level:`warn`,phase:`ios_screenshot_fallback`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,from:t,to:`runner`,...r}})}function ln(e,t,n){f({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...S(n)}})}function un(e,t){let n=k.resolve(e),r=t.trim();if(!r)return[];let i=[],a=new Set,o=e=>{let t=k.normalize(e);a.has(t)||(a.add(t),i.push(t))},s=r.replace(/^\/+/,``),c=s.replaceAll(`\\`,`/`);if(s&&o(k.join(n,s)),k.isAbsolute(r)&&o(k.normalize(r)),c.startsWith(`tmp/`))o(k.join(n,c));else{let e=c.lastIndexOf(`/tmp/`);if(e>=0){let t=c.slice(e+1);o(k.join(n,t))}}let l=k.basename(r);return l&&o(k.join(n,`tmp`,l)),i}function dn(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=Le(t);return n.includes(`timeout waiting for screen surfaces`)||n.includes(`nsposixerrordomain`)&&n.includes(`code=60`)&&n.includes(`screenshot`)||n.includes(`timed out`)&&n.includes(`screenshot`)}function fn(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=Le(t);return n.includes(`not booted`)||n.includes(`current state: shutdown`)||n.includes(`current state is shutdown`)||n.includes(`current state=shutdown`)||n.includes(`state: shutdown`)||n.includes(`state=shutdown`)}async function pn(e,t,n,r){let i=r??await mn(e),a=ut(await lt(t),i,n);a&&await ct(t,a.width,a.height)}async function mn(t){let n=en.get(t.id);if(n!==void 0)return n;let r=await w(t,[`getenv`,t.id,`SIMULATOR_MAINSCREEN_SCALE`],{timeoutMs:Pe}),i=Number(r.stdout.trim());if(!Number.isFinite(i)||i<=0)throw new e(`COMMAND_FAILED`,`Failed to read iOS simulator screenshot scale from SIMULATOR_MAINSCREEN_SCALE`);return en.set(t.id,i),i}function hn(t){return!(t instanceof e)||t.details?.runnerErrorCode!==`SCROLL_KEYBOARD_OCCLUDES_SURFACE`?t:new e(t.code,t.message,{...t.details,...c})}function gn(e){let t=e?.amount!==void 0||e?.pixels!==void 0;return{...e,...t?{}:{amount:te},durationMs:e?.durationMs??400,releaseBehavior:e?.releaseBehavior??`controlled`}}function U(e,t,n,r={includeDuration:!0}){let i=W(e.referenceWidth),a=W(e.referenceHeight);if(i===void 0||a===void 0)return G(e,{amount:n?.amount});let o=ne({direction:t,amount:n?.amount,pixels:n?.pixels,referenceWidth:i,referenceHeight:a});return G(e,{amount:n?.amount,pixels:o.pixels,durationMs:r?.includeDuration?n?.durationMs:void 0,preferProvidedPixels:!0})}function _n(e,t={}){return{...e?.amount===void 0?{}:{amount:e.amount},...e?.pixels===void 0?{}:{pixels:e.pixels},...t.includeDuration!==!1&&e?.durationMs!==void 0?{durationMs:e.durationMs}:{},...t.includeReleaseBehavior!==!1&&e?.releaseBehavior!==void 0?{scrollReleaseBehavior:e.releaseBehavior}:{}}}function W(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function G(e,t){let{x1:n,y1:r,x2:i,y2:a}=yn(e),o=W(e.referenceWidth),s=W(e.referenceHeight),c=vn(t,n!==void 0&&i!==void 0?Math.round(Math.abs(i-n)):void 0,r!==void 0&&a!==void 0?Math.round(Math.abs(a-r)):void 0),l=W(e.keyboardMinY);return{...n===void 0?{}:{x1:n},...r===void 0?{}:{y1:r},...i===void 0?{}:{x2:i},...a===void 0?{}:{y2:a},...o===void 0?{}:{referenceWidth:o},...s===void 0?{}:{referenceHeight:s},...e.keyboardAvoided===!0?{keyboardAvoided:!0}:{},...l===void 0?{}:{keyboardMinY:l},...t?.amount===void 0?{}:{amount:t.amount},...c===void 0?{}:{pixels:c},...t?.durationMs===void 0?{}:{durationMs:t.durationMs}}}function vn(e,t,n){if(e?.preferProvidedPixels&&e.pixels!==void 0)return e.pixels;if(t!==void 0&&t>0)return t;if(n!==void 0&&n>0)return n}function yn(e){let t=W(e.x),n=W(e.y),r=W(e.x2),i=W(e.y2);return{...t===void 0?{}:{x1:t},...n===void 0?{}:{y1:n},...r===void 0?{}:{x2:r},...i===void 0?{}:{y2:i}}}async function bn(e,t,n,r,i,a){return U(await e(t,{command:`desktopScroll`,direction:i,..._n(a,{includeDuration:!0,includeReleaseBehavior:!1}),appBundleId:n.appBundleId},r),i,a,{includeDuration:!0})}function K(e,t,n){return{command:`remotePress`,remoteButton:e,...n===void 0?{}:{durationMs:n},...t===void 0?{}:{appBundleId:t}}}function xn(e){return e===`system`?`backSystem`:`backInApp`}function Sn(e,t){let n={signal:t.signal,verbose:t.verbose,logPath:t.logPath,traceLogPath:t.traceLogPath,requestId:t.requestId,iosXctestrunFile:t.iosXctestrunFile,iosXctestDerivedDataPath:t.iosXctestDerivedDataPath,iosXctestEnvDir:t.iosXctestEnvDir,runnerLeaseContext:t.runnerLeaseContext};return{runnerOpts:n,overrides:{tap:async(r,i)=>await E(e,J(e,t,r,i),n),pressPoint:async(r,i)=>await Cn(e,t,n,r,i),tapElementSelector:async r=>await E(e,{command:`tap`,selectorKey:r.key,selectorValue:r.value,allowNonHittableCoordinateFallback:r.allowNonHittableCoordinateFallback,...r.expectedPoint?{x:r.expectedPoint.x,y:r.expectedPoint.y}:{},...m(e)?{synthesized:!0}:{},appBundleId:t.appBundleId},n),doubleTap:async(r,i)=>{let a=await E(e,Ue([{kind:`doubleTap`,x:r,y:i}],t.appBundleId),n);return Ve(a),a},appState:async()=>On(await E(e,{command:`appState`,appBundleId:t.appBundleId},n)),longPress:async(r,i,a)=>await E(e,{command:`longPress`,x:r,y:i,durationMs:a,appBundleId:t.appBundleId},n),focus:async(r,i)=>await E(e,J(e,t,r,i),n),type:async(r,i)=>Dn(await E(e,{command:`type`,text:r,delayMs:i,textEntryMode:r===`
6
+ `?void 0:`append`,appBundleId:t.appBundleId},n)),fill:async(r,i,a,o,s)=>await E(e,{command:`type`,x:r,y:i,text:a,delayMs:o,textEntryMode:`replace`,...s?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},appBundleId:t.appBundleId},n),scroll:async(r,i)=>await Nn(E,e,t,n,r,i),performGesture:async r=>await jn(e,t,n,r),gestureViewport:async()=>An(await E(e,{command:`gestureViewport`,appBundleId:t.appBundleId},n))}}}async function Cn(e,t,n,r,i){let a=p(e)?g(i.surface,`xctest`):void 0;return a?await wn(t,r,i,a):i.button===`primary`?i.count===1?await En(e,t,n,r,i):await ze(e,r,i,t.appBundleId,async t=>await E(e,t,n)):await Tn(e,t,n,r,i.button)}async function wn(t,n,r,i){if(r.button!==`primary`)throw new e(`UNSUPPORTED_OPERATION`,`${r.button} click is not supported on macOS ${i} sessions.`);let{runMacOsPressAction:a}=await import(`./helper.js`).then(e=>e.n),o=await a(n.x,n.y,{bundleId:t.appBundleId,surface:i,holdMs:r.holdMs,clicks:r.count,doubleClick:r.doubleTap,intervalMs:r.intervalMs,signal:t.signal});return o.holdMs===void 0?{}:{holdMs:o.holdMs}}async function Tn(e,t,n,r,i){return await E(e,{command:`mouseClick`,x:r.x,y:r.y,button:i,appBundleId:t.appBundleId},n)}async function En(e,t,n,r,i){if(i.doubleTap){let i=await E(e,Ue([{kind:`doubleTap`,x:r.x,y:r.y}],t.appBundleId),n);return Ve(i),i}return i.holdMs>0?await E(e,{command:`longPress`,x:r.x,y:r.y,durationMs:i.holdMs,appBundleId:t.appBundleId},n):await E(e,J(e,t,r.x,r.y),n)}function Dn(e){let t=e.textEntryRoute;return kn(t)?{textEntryRoute:t}:{}}function On(e){let t=e.applicationState;return i(t)?{applicationState:t}:{}}function kn(e){return typeof e==`string`&&dt.includes(e)}function An(t){let n=q(t.x),r=q(t.y),i=q(t.x2),a=q(t.y2);if(n===void 0||r===void 0||i===void 0||a===void 0||i<=0||a<=0)throw new e(`COMMAND_FAILED`,`Apple runner returned an invalid gesture viewport`);return{x:n,y:r,width:i,height:a}}function q(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}async function jn(e,t,n,r){if(r.topology===`two`&&ft(e,r.intent),r.topology===`single`&&p(e)){let{start:i,end:a}=b(r);return await E(e,{command:`drag`,x:i.x,y:i.y,x2:a.x,y2:a.y,durationMs:r.durationMs,appBundleId:t.appBundleId},n)}if(r.topology===`single`&&h(e)){let{start:i,end:a}=b(r);return await E(e,{command:`swipe`,direction:Mn(i,a),appBundleId:t.appBundleId},n)}return await E(e,{command:`gesture`,gesturePlan:r,appBundleId:t.appBundleId},n)}function Mn(e,t){let n=t.x-e.x,r=t.y-e.y;return Math.abs(n)>=Math.abs(r)?n>=0?`right`:`left`:r>=0?`down`:`up`}function J(e,t,n,r){return{command:`tap`,x:n,y:r,...m(e)?{synthesized:!0}:{},appBundleId:t.appBundleId}}async function Nn(e,t,n,r,i,c){if(s(c?.durationMs,{invalidMessage:`scroll durationMs must be a non-negative integer at most ${o}`}),h(t))return G(await e(t,K(i,n.appBundleId,c?.durationMs),r),{amount:c?.amount,durationMs:c?.durationMs});if(a(c??{}),p(t))return await bn(e,t,n,r,i,c);let l=gn(c),u;try{u=await e(t,{command:`scroll`,direction:i,..._n(l),appBundleId:n.appBundleId},r)}catch(e){throw hn(e)}return U(u,i,l)}const Pn=g(`app`,`native`),Fn=`The native macOS app backend acts through accessibility actions only. Unset AGENT_DEVICE_MACOS_APP_BACKEND to drive this app with XCTest.`,In=new Set($e);function Ln(e,t){let n=()=>{if(t.appBundleId)return t.appBundleId;throw Y(`an action on a session that names no app`)},r=async(e,r={})=>Rn(await X(Je(e.x,e.y,{surface:Pn,bundleId:n(),clicks:r.count,intervalMs:r.intervalMs,signal:t.signal})));return{open:e.open,openDevice:e.openDevice,close:e.close,screenshot:e.screenshot,snapshot:e.snapshot,readTextAtPoint:e.readTextAtPoint,readClipboard:e.readClipboard,writeClipboard:e.writeClipboard,setSetting:e.setSetting,readAlert:e.readAlert,awaitAlert:e.awaitAlert,acceptAlert:e.acceptAlert,dismissAlert:e.dismissAlert,tap:async(e,t)=>await r({x:e,y:t}),pressPoint:async(t,n)=>{if(n.surface!==void 0&&n.surface!==`app`)return await e.pressPoint(t,n);if(n.button!==`primary`)throw Y(`${n.button} click`);if(n.doubleTap)throw Y(`double-click`);if(n.holdMs>0)throw Y(`press and hold`);return await r(t,n)},longPress:async()=>{throw Y(`press and hold`)},focus:async(e,t)=>await r({x:e,y:t}),type:async(e,r)=>{await X(Ye(e,{bundleId:n(),delayMs:r,signal:t.signal}))},fill:async(e,r,i)=>Rn(await X(Ze(e,r,i,{bundleId:n(),signal:t.signal}))),scroll:async(e,r)=>{a(r??{});let i=await X(et(e,{bundleId:n(),amount:r?.amount,pixels:r?.pixels,signal:t.signal}));return{...U(i,e,r,{includeDuration:!1}),mechanism:i.mechanism}},back:async()=>{throw Y(`back`)},setOrientation:async()=>{throw Y(`orientation`)}}}function Rn(e){return{mechanism:e.mechanism,...e.windowTitle===void 0?{}:{windowTitle:e.windowTitle}}}function Y(t){return new e(`UNSUPPORTED_OPERATION`,`${t} is not supported by the native macOS app backend.`,{reason:`unsupported-device-backend`,hint:Fn})}async function X(t){try{return await t}catch(t){if(!(t instanceof e))throw t;let n=t.details?.reason;throw typeof n!=`string`||!In.has(n)?t:new e(`UNSUPPORTED_OPERATION`,t.message,{...t.details,reason:`unsupported-device-backend`,helperReason:n,hint:Fn},t)}}const zn={0:`unknown`,1:`notRunning`,2:`runningBackgroundSuspended`,3:`runningBackground`};function Bn(e,n){if(typeof e!=`object`||!e||Array.isArray(e))return;let r={...e},i=r.reason;if(!t(i))return;let a=r.priorState;if(typeof a!=`number`||!Number.isInteger(a))return;let o=zn[a];o===void 0&&n?.({reason:i,rawPriorState:a});let s=r.otherActiveApplicationPid;return{reason:i,priorState:o??`unknown`,...typeof s==`number`&&Number.isInteger(s)&&s>0?{otherActiveApplicationPid:s}:{}}}function Vn(e){let t=Hn(e.systemSurface),n=ie(e.keyboard),r=re(e.observation),i=Bn(e.targetActivation,e=>We({level:`debug`,phase:`ios_runner_target_activation_prior_state_unmapped`,data:e}));return{nodes:Array.isArray(e.nodes)?e.nodes:void 0,truncated:typeof e.truncated==`boolean`?e.truncated:void 0,quality:bt(e.snapshotQuality),qualityPayload:Kn(e.qualityPayload,t),runnerFatal:e.runnerFatal===!0,...n?{keyboard:n}:{},...t?{systemSurface:t}:{},...i?{targetActivation:i}:{},...r?{observation:r}:{},message:typeof e.message==`string`&&e.message.trim().length>0?e.message:void 0}}function Hn(e){if(!d(e)||typeof e.bundleId!=`string`)return;let t=Ee(e.bundleId);return t&&{bundleId:t.bundleId,kind:t.kind}}function Un(e,t,n){let r=n.nodes??[],i=qn(r,n.qualityPayload?.nodes);if(n.runnerFatal===!0||r.length===0&&n.qualityPayload===void 0)return{nodes:r};let a=Se({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions}),o={stage:`presented`,presentation:{producer:`apple-runner`,intent:`full`,payload:{nodes:r,truncated:n.truncated??!1,...n.quality?.effectiveDepth===void 0?{}:{effectiveDepth:n.quality.effectiveDepth}},...n.qualityPayload?{qualityPayload:n.qualityPayload}:{}},validation:{presentationKey:xe(a),viewport:i,hittability:{kind:`available`},lineage:{targetId:e},residue:[]}};try{let e=we(o,a),t=ue(e.validatedViewport);return{nodes:e.nodes,...t?{viewport:t}:{}}}catch(e){Wn(e,n)}}function Wn(t,n){let r=n.quality;if(t instanceof x&&xt(r))throw new e(`COMMAND_FAILED`,t.message,{...Ce(t),...n.systemSurface?{systemSurface:n.systemSurface}:{},snapshotQuality:{state:r.state,backend:r.backend,...r.reason?{reason:r.reason}:{},...r.reasonCode?{reasonCode:r.reasonCode}:{}},hint:Gn(n.systemSurface,r)},t);Z(t,n.systemSurface)}function Gn(e,t){return[e?`${e.bundleId} hosts the surface presented over the app, and this capture targeted that surface.`:void 0,...yt(t,[])].filter(e=>e!==void 0).join(` `)}function Kn(e,t){if(e!==void 0)return(!d(e)||!Array.isArray(e.nodes)||typeof e.truncated!=`boolean`)&&Z(new x(`invalid-quality-payload`,`iOS runner returned an invalid quality payload`),t),e.scope!==void 0&&e.scope!==null&&Z(new x(`invalid-quality-payload`,`iOS runner quality payload must be unscoped`,{field:`scope`}),t),{nodes:e.nodes,truncated:e.truncated,scope:null}}function qn(e,t){return vt(Jn(t),{fallbackToLargestRoot:!0})??vt(Jn(e),{fallbackToLargestRoot:!0})??{kind:`missing`,reason:`not-provided`}}function Jn(e){return e?.filter(e=>e.parentIndex===void 0)??[]}function Z(t,n){throw t instanceof x?new e(`COMMAND_FAILED`,t.message,{...Ce(t),...n?{systemSurface:n}:{}},t):t}function Yn(t,n,r){if(t.appleOs===`watchos`)throw new e(`UNSUPPORTED_PLATFORM`,`watchOS is not supported: XCUITest cannot drive watchOS UI, so this device has no runner backend.`);let{overrides:i,runnerOpts:a}=Sn(t,n),o=p(t)?pt():`xctest`,s=e=>p(t)?g(e,o):void 0,c={open:(e,n)=>Ge(t,e,{appBundleId:n?.appBundleId,launchConsole:n?.launchConsole,launchArgs:n?.launchArgs,terminateRunningApp:n?.terminateRunningApp,url:n?.url,runnerOptions:a}),openDevice:()=>Ke(t),close:e=>qe(t,e,a),screenshot:(e,n)=>cr(t,e,n,a,s(n?.surface)),snapshot:async e=>await Xn(t,e,a,s(e?.surface)),readTextAtPoint:async(e,n)=>{let r=s(n?.surface);return r?await lr(e,r,n?.appBundleId,n?.signal):await ur(t,e,n,a)},findText:async(e,n)=>({found:(await E(t,{command:`findText`,text:e,appBundleId:n?.appBundleId},n?.signal?{...a,signal:n.signal}:a))?.found===!0}),back:async e=>{if(h(t)){await E(t,K(`menu`,n.appBundleId),a);return}await E(t,{command:xn(e),appBundleId:n.appBundleId},a)},home:async()=>{if(h(t)){await E(t,K(`home`,n.appBundleId),a);return}await E(t,{command:`home`,appBundleId:n.appBundleId},a)},setOrientation:async r=>{let i=or(await E(t,{command:`rotate`,orientation:r,appBundleId:n.appBundleId},a));if(i!==r)throw new e(`COMMAND_FAILED`,`iOS runner observed ${i} after requesting ${r}`,{requestedOrientation:r,observedOrientation:i});return{orientation:i}},appSwitcher:async()=>{await E(t,{command:`appSwitcher`,appBundleId:n.appBundleId},a)},actionButton:async()=>{await E(t,{command:`actionButton`,appBundleId:n.appBundleId},a)},tvRemote:async(e,r)=>{await E(t,K(l(e),n.appBundleId,r),a)},keyboardDismiss:async()=>{let e=await E(t,{command:`keyboardDismiss`,appBundleId:n.appBundleId},a);return{kind:`mechanism`,wasVisible:Q(e,`wasVisible`),dismissed:Q(e,`dismissed`),visible:Q(e,`visible`),mechanism:ar(e,`keyboardDismissMechanism`)}},keyboardEnter:async()=>{let e=await E(t,{command:`keyboardReturn`,appBundleId:n.appBundleId},a);return{kind:`visibility-echo`,visible:Q(e,`visible`),wasVisible:Q(e,`wasVisible`)}},readClipboard:()=>Ct(t),writeClipboard:e=>wt(t,e,a),setSetting:(e,n,r,i)=>Rt(t,e,n,r,i),readSetting:e=>Bt(t,e),readAlert:e=>mt(t,a,e),awaitAlert:e=>ht(t,a,e),acceptAlert:e=>gt(t,a,`accept`,e),dismissAlert:e=>gt(t,a,`dismiss`,e),...i},u=o===`native`?Ln(c,n):c;return r?sr(t,n,u,r):u}async function Xn(e,t,n,r){return r?await _t({...t,surface:r},t?.signal):await Zn(e,t,n)}async function Zn(e,t,n){let r=Vn(await ae(`snapshot_capture`,async()=>await E(e,Qn(t),ir(n,t?.signal)),{backend:`xctest`}));$n(t,r),er(e,t,r);let i=tr(r),a=nr(e,t,r);return{nodes:a.nodes,truncated:r.truncated??!1,backend:`xctest`,producer:`apple-runner`,...a.viewport?{viewport:a.viewport}:{},...r.quality?{quality:r.quality}:{},...r.systemSurface?{systemSurface:r.systemSurface}:{},...r.keyboard?{keyboard:r.keyboard}:{},...r.targetActivation?{targetActivation:r.targetActivation}:{},...r.observation?{observation:r.observation}:{},...i.length>0?{warnings:i}:{}}}function Qn(e){let{appBundleId:t,interactiveOnly:n,preferredBackend:r,customActions:i,depth:a,scope:o,raw:s}=e??{};return{command:`snapshot`,appBundleId:t,interactiveOnly:n,preferredBackend:r,customActions:i,...e?.observeOnly===!0?{observeOnly:!0}:{},depth:a,scope:o,raw:s}}function $n(t,n){if(t?.observeOnly===!0&&!(n.observation&&!n.targetActivation))throw new e(`COMMAND_FAILED`,`Runner did not return an observe-only snapshot.`,{reason:`observation-unavailable`})}function er(t,n,r){if(!((r.nodes?.length??0)>0)&&!rr(n,r.quality)&&t.kind===`simulator`)throw new e(`COMMAND_FAILED`,`XCTest snapshot returned 0 nodes on iOS simulator.`)}function tr(e){let t=[];return!e.quality&&e.message&&t.push(e.message),e.systemSurface&&t.push(Te(e.systemSurface.bundleId)),e.targetActivation&&t.push(St(e.targetActivation)),t}function nr(e,t,n){return p(e)?{nodes:n.nodes??[]}:Un(e.id,t,n)}function rr(e,t){return le(e?.scope)!==null&&t!==void 0&&t.state!==`sparse`}function ir(e,t){return t?{...e,signal:e.signal?AbortSignal.any([e.signal,t]):t}:e}function Q(e,t){let n=e[t];return typeof n==`boolean`?n:void 0}function ar(e,t){let n=e[t];return typeof n==`string`?n:void 0}function or(t){let n=t.orientation;if(typeof n==`string`&&u.includes(n))return n;throw new e(`COMMAND_FAILED`,`iOS runner returned an invalid orientation result`,{orientation:n})}function sr(e,t,n,r){let i={...n,open:async()=>$(`open`),openDevice:async()=>$(`openDevice`),close:async()=>$(`close`),screenshot:async()=>$(`screenshot`),readClipboard:async()=>$(`readClipboard`),setSetting:async()=>$(`setSetting`),readSetting:async()=>$(`readSetting`)};return be(i,n=>Be(r,{deviceId:e.id,requestId:t.requestId},n))}function $(t){throw new e(`UNSUPPORTED_OPERATION`,`${t} uses local Apple tooling (simctl/devicectl), which an injected runner transport cannot reach; the provider session must supply its own ${t} implementation.`)}async function cr(t,n,r={},i,a){if(a){if(r.fullscreen)throw new e(`INVALID_ARGS`,`screenshot --fullscreen is not accepted on the macOS ${a} surface: its capture frame is fixed`,{reason:ee.macOsHelperSurfaceFixedFrame,surface:a});return await Xe(n,{surface:a,...a===`app`?{bundleId:r.appBundleId}:{},signal:i.signal}),{}}return r.captureBackend===`runner`?(await H(t,n,r.appBundleId,r.fullscreen,i),{}):await tn(t,n,{appBundleId:r.appBundleId,pixelDensity:r.pixelDensity,fullscreen:r.fullscreen,runnerOptions:i,normalizeStatusBar:r.normalizeStatusBar,skipIosSimulatorBootCheck:r.skipIosSimulatorBootCheck})}async function lr(e,t,n,r){let{runMacOsReadTextAction:i}=await import(`./helper.js`).then(e=>e.n);return(await i(e.x,e.y,{bundleId:n,surface:t,signal:r})).text}async function ur(e,t,n,r){let i=await E(e,{command:`readText`,x:t.x,y:t.y,appBundleId:n?.appBundleId},n?.signal?{...r,signal:n.signal}:r);return typeof i.text==`string`?i.text:typeof i.message==`string`?i.message:void 0}export{Yn as createAppleInteractor};
@@ -1 +1 @@
1
- import{P as e}from"./sdk-contracts.js";import{i as t}from"./sdk-batch-runner.js";import{o as n}from"./exec.js";import{o as r}from"./tv-remote.js";import"./command.js";import{t as i}from"./tool-provider3.js";function a(t){let n=async n=>{throw new e(`UNSUPPORTED_OPERATION`,`${n} is not supported on ${t}`)};return{open:()=>n(`open`),openDevice:()=>n(`openDevice`),close:()=>n(`close`),tap:()=>n(`tap`),longPress:()=>n(`longPress`),focus:()=>n(`focus`),type:()=>n(`type`),fill:()=>n(`fill`),scroll:()=>n(`scroll`),screenshot:()=>n(`screenshot`),snapshot:()=>n(`snapshot`),back:()=>n(`back`),setOrientation:()=>n(`setOrientation`),setSetting:()=>n(`setSetting`)}}const o={allowFailure:!0,timeoutMs:3e4};async function s(e,t){n(await i().launchApp(e.id,t,o),`Failed to launch Vega app ${t}`,{appName:t,deviceId:e.id})}async function c(e){n(await i().checkConnected(e.id,o),`Vega device is not connected`,{deviceId:e.id})}async function l(e,t){n(await i().terminateApp(e.id,t,o),`Failed to terminate Vega app ${t}`,{appName:t,deviceId:e.id})}async function u(e,t,a){let o=r(t);n(await i().pressRemote(e.id,o,a,{allowFailure:!0,timeoutMs:1e4+(a??0)}),`Failed to press Vega TV remote ${t}`,{button:t,deviceId:e.id})}const d=[{matches:(e,n)=>t(e)||!!n?.url,message:`Vega open does not support URLs or deep links.`,hint:`Use open <component-id> with an installed Vega app component ID.`},{matches:(e,t)=>!!t?.activity,message:`Vega open does not support Android activity selection.`,hint:`Remove --activity and use the Vega component ID as the open target.`},{matches:(e,t)=>!!t?.launchConsole,message:`Vega open does not support launch-console output.`,hint:`Remove --launch-console and open the Vega component ID directly.`},{matches:(e,t)=>!!t?.terminateRunningApp,message:`Vega open does not support terminating the running app before launch.`,hint:`Close the Vega component explicitly before opening it again.`},{matches:(e,t)=>!!t?.launchArgs?.length,message:`Vega open does not support launch arguments.`,hint:`Remove --launch-arg values and open the Vega component ID directly.`}];function f(e,t){return{...a(`Vega OS`),open:async(t,n)=>{p(t,n),await s(e,t)},openDevice:()=>c(e),close:t=>l(e,t),back:()=>u(e,`back`),home:()=>u(e,`home`),tvRemote:(t,n)=>u(e,t,n)}}function p(t,n){let r=d.find(({matches:e})=>e(t,n));if(r)throw new e(`UNSUPPORTED_OPERATION`,r.message,{hint:r.hint})}export{f as createVegaInteractor};
1
+ import{P as e}from"./sdk-contracts.js";import{o as t}from"./tv-remote.js";import{i as n}from"./sdk-batch-runner.js";import{o as r}from"./exec.js";import"./command.js";import{t as i}from"./tool-provider3.js";function a(t){let n=async n=>{throw new e(`UNSUPPORTED_OPERATION`,`${n} is not supported on ${t}`)};return{open:()=>n(`open`),openDevice:()=>n(`openDevice`),close:()=>n(`close`),tap:()=>n(`tap`),longPress:()=>n(`longPress`),focus:()=>n(`focus`),type:()=>n(`type`),fill:()=>n(`fill`),scroll:()=>n(`scroll`),screenshot:()=>n(`screenshot`),snapshot:()=>n(`snapshot`),back:()=>n(`back`),setOrientation:()=>n(`setOrientation`),setSetting:()=>n(`setSetting`)}}const o={allowFailure:!0,timeoutMs:3e4};async function s(e,t){r(await i().launchApp(e.id,t,o),`Failed to launch Vega app ${t}`,{appName:t,deviceId:e.id})}async function c(e){r(await i().checkConnected(e.id,o),`Vega device is not connected`,{deviceId:e.id})}async function l(e,t){r(await i().terminateApp(e.id,t,o),`Failed to terminate Vega app ${t}`,{appName:t,deviceId:e.id})}async function u(e,n,a){let o=t(n);r(await i().pressRemote(e.id,o,a,{allowFailure:!0,timeoutMs:1e4+(a??0)}),`Failed to press Vega TV remote ${n}`,{button:n,deviceId:e.id})}const d=[{matches:(e,t)=>n(e)||!!t?.url,message:`Vega open does not support URLs or deep links.`,hint:`Use open <component-id> with an installed Vega app component ID.`},{matches:(e,t)=>!!t?.activity,message:`Vega open does not support Android activity selection.`,hint:`Remove --activity and use the Vega component ID as the open target.`},{matches:(e,t)=>!!t?.launchConsole,message:`Vega open does not support launch-console output.`,hint:`Remove --launch-console and open the Vega component ID directly.`},{matches:(e,t)=>!!t?.terminateRunningApp,message:`Vega open does not support terminating the running app before launch.`,hint:`Close the Vega component explicitly before opening it again.`},{matches:(e,t)=>!!t?.launchArgs?.length,message:`Vega open does not support launch arguments.`,hint:`Remove --launch-arg values and open the Vega component ID directly.`}];function f(e,t){return{...a(`Vega OS`),open:async(t,n)=>{p(t,n),await s(e,t)},openDevice:()=>c(e),close:t=>l(e,t),back:()=>u(e,`back`),home:()=>u(e,`home`),tvRemote:(t,n)=>u(e,t,n)}}function p(t,n){let r=d.find(({matches:e})=>e(t,n));if(r)throw new e(`UNSUPPORTED_OPERATION`,r.message,{hint:r.hint})}export{f as createVegaInteractor};
@@ -1 +1 @@
1
- async function e(e,n,r){try{await t(e,n,r)}catch(e){r.stderr(`${e instanceof Error?e.message:String(e)}\n`),await(await n.processExit()).exitAfterFlush(1)}}async function t(e,t,l){if(e.length===0)return await n(t,l);if(o(e))return await r(t,l);let u=c(e);if(u!==void 0)return await i(u,e,t,l);if(s(e))return await(await t.mcp()).runAgentDeviceMcpServer();await a(e,t)}async function n(e,t){t.stdout(`${(await e.help()).buildUsageText()}\n`),await(await e.processExit()).exitAfterFlush(1)}async function r(e,t){t.stdout(`${t.bundledVersion??(await e.version()).readVersion()}\n`)}async function i(e,t,n,r){let i=await n.help(),o=e===null?`${i.buildUsageText()}\n`:i.resolveHelpTargetUsageText(e);if(o===null)return await a(t,n);r.stdout(o)}async function a(e,t){await(await t.cli()).runCliProcess(e)}function o(e){return e.length===1&&(e[0]===`--version`||e[0]===`-V`)}function s(e){return e[0]===`mcp`&&!e.some(l)}function c(e){let[t,n]=e;if(e.length===1)return t===`help`||l(t)?null:void 0;if(e.length===2)return t===`help`?n:l(n)?t:void 0}function l(e){return e===`--help`||e===`-h`}e(process.argv.slice(2),{help:()=>import(`../cli-help.js`).then(e=>e.n),cli:()=>import(`../process-entry.js`),mcp:()=>import(`../server.js`),version:()=>import(`../version.js`).then(e=>e.t),processExit:()=>import(`../process-exit.js`)},{bundledVersion:`0.21.24`,stdout:e=>{process.stdout.write(e)},stderr:e=>{process.stderr.write(e)}}).catch(()=>process.exit(1));export{};
1
+ async function e(e,n,r){try{await t(e,n,r)}catch(e){r.stderr(`${e instanceof Error?e.message:String(e)}\n`),await(await n.processExit()).exitAfterFlush(1)}}async function t(e,t,l){if(e.length===0)return await n(t,l);if(o(e))return await r(t,l);let u=c(e);if(u!==void 0)return await i(u,e,t,l);if(s(e))return await(await t.mcp()).runAgentDeviceMcpServer();await a(e,t)}async function n(e,t){t.stdout(`${(await e.help()).buildUsageText()}\n`),await(await e.processExit()).exitAfterFlush(1)}async function r(e,t){t.stdout(`${t.bundledVersion??(await e.version()).readVersion()}\n`)}async function i(e,t,n,r){let i=await n.help(),o=e===null?`${i.buildUsageText()}\n`:i.resolveHelpTargetUsageText(e);if(o===null)return await a(t,n);r.stdout(o)}async function a(e,t){await(await t.cli()).runCliProcess(e)}function o(e){return e.length===1&&(e[0]===`--version`||e[0]===`-V`)}function s(e){return e[0]===`mcp`&&!e.some(l)}function c(e){let[t,n]=e;if(e.length===1)return t===`help`||l(t)?null:void 0;if(e.length===2)return t===`help`?n:l(n)?t:void 0}function l(e){return e===`--help`||e===`-h`}e(process.argv.slice(2),{help:()=>import(`../cli-help.js`).then(e=>e.n),cli:()=>import(`../process-entry.js`),mcp:()=>import(`../server.js`),version:()=>import(`../version.js`).then(e=>e.t),processExit:()=>import(`../process-exit.js`)},{bundledVersion:`0.21.25`,stdout:e=>{process.stdout.write(e)},stderr:e=>{process.stderr.write(e)}}).catch(()=>process.exit(1));export{};