agent-device 0.21.15 → 0.21.17

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 (282) hide show
  1. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.15.apk → agent-device-android-ime-helper-0.21.17.apk} +0 -0
  2. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.17.apk.sha256 +1 -0
  3. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.15.manifest.json → agent-device-android-ime-helper-0.21.17.manifest.json} +4 -4
  4. package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.15.apk → agent-device-android-snapshot-helper-0.21.17.apk} +0 -0
  5. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.17.apk.sha256 +1 -0
  6. package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.15.manifest.json → agent-device-android-snapshot-helper-0.21.17.manifest.json} +6 -6
  7. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +1 -4
  8. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedTextEntry.h +9 -9
  9. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedTextEntry.m +13 -22
  10. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSystemSurfaceHostPolicy.swift +0 -9
  11. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandDispatch.swift +31 -0
  12. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +1 -1
  13. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +1 -1
  14. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +9 -0
  15. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCapturePlan.swift +40 -6
  16. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +202 -73
  17. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +17 -2
  18. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +109 -128
  19. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +4 -0
  20. package/dist/src/adapter.js +1 -1
  21. package/dist/src/adb-executor.js +1 -1
  22. package/dist/src/adb-failure.js +1 -1
  23. package/dist/src/adb-transport.js +1 -1
  24. package/dist/src/agent-browser-process-record.js +1 -1
  25. package/dist/src/agent-browser-provider.js +1 -1
  26. package/dist/src/agent-browser-tool.js +1 -1
  27. package/dist/src/agent-device-client.js +2 -2
  28. package/dist/src/ai-sdk.js +1 -1
  29. package/dist/src/alert-runtime.js +1 -1
  30. package/dist/src/android-input-ownership.js +1 -1
  31. package/dist/src/app-catalog.js +1 -1
  32. package/dist/src/app-deployment-resolution.js +1 -1
  33. package/dist/src/app-inventory.js +1 -1
  34. package/dist/src/app-launch.js +1 -1
  35. package/dist/src/app-lifecycle.js +1 -1
  36. package/dist/src/app-lifecycle2.js +1 -1
  37. package/dist/src/app-log-files.js +1 -1
  38. package/dist/src/app-log-runtime2.js +1 -1
  39. package/dist/src/app-resolution.js +2 -2
  40. package/dist/src/apple-runner-platform.js +1 -1
  41. package/dist/src/application-lifecycle-interaction.js +1 -1
  42. package/dist/src/archive.js +1 -1
  43. package/dist/src/artifact-download.js +1 -1
  44. package/dist/src/auth-session.js +1 -1
  45. package/dist/src/auth.js +1 -1
  46. package/dist/src/back-mode.js +1 -1
  47. package/dist/src/backend-snapshot-options.js +1 -1
  48. package/dist/src/boot-diagnostics.js +1 -1
  49. package/dist/src/cache.js +1 -0
  50. package/dist/src/capture.js +1 -1
  51. package/dist/src/cli-config.js +1 -1
  52. package/dist/src/cli-help.js +9 -7
  53. package/dist/src/cli-runner.js +1 -1
  54. package/dist/src/cli.js +4 -4
  55. package/dist/src/click-button.js +1 -1
  56. package/dist/src/client-metro-companion.js +1 -1
  57. package/dist/src/client-metro.js +1 -1
  58. package/dist/src/client-types.d.ts +6 -6
  59. package/dist/src/clipboard-shell-response.js +1 -1
  60. package/dist/src/code-signature-cache.js +1 -1
  61. package/dist/src/command-schema.js +3 -3
  62. package/dist/src/command-tools.js +3 -3
  63. package/dist/src/connection-runtime.js +1 -1
  64. package/dist/src/connection.js +5 -5
  65. package/dist/src/contracts.js +1 -1
  66. package/dist/src/daemon-client-lease-beat.js +1 -0
  67. package/dist/src/daemon-client-lifecycle.js +1 -1
  68. package/dist/src/daemon-client-transport.js +1 -0
  69. package/dist/src/daemon-policy-file.js +1 -0
  70. package/dist/src/daemon-process.js +1 -1
  71. package/dist/src/daemon-registration.js +1 -1
  72. package/dist/src/daemon-shutdown-report.js +1 -1
  73. package/dist/src/daemon.js +1 -1
  74. package/dist/src/debug-symbols-facade.js +1 -1
  75. package/dist/src/device-claim-inspection.js +1 -1
  76. package/dist/src/device-claim-rule.js +1 -2
  77. package/dist/src/device-inventory-context.js +1 -1
  78. package/dist/src/{stop-sequence.js → device-readiness-runtime.js} +1 -1
  79. package/dist/src/device-rotation.js +1 -1
  80. package/dist/src/device-selection-resolver.js +1 -1
  81. package/dist/src/device-session.js +1 -1
  82. package/dist/src/device-shell.js +1 -1
  83. package/dist/src/device.js +1 -1
  84. package/dist/src/device2.js +1 -1
  85. package/dist/src/devicectl.js +1 -1
  86. package/dist/src/diagnostics.js +1 -1
  87. package/dist/src/dispatch-resolve.js +1 -1
  88. package/dist/src/doctor-facade.js +1 -1
  89. package/dist/src/doctor2.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/file.js +1 -1
  95. package/dist/src/find.js +1 -1
  96. package/dist/src/format.js +1 -2
  97. package/dist/src/gesture-admission.js +1 -1
  98. package/dist/src/gesture-plan.js +1 -1
  99. package/dist/src/gesture-runtime.js +1 -1
  100. package/dist/src/harmonyos.js +1 -1
  101. package/dist/src/helper.js +2 -2
  102. package/dist/src/host.js +1 -1
  103. package/dist/src/human-control-contract.js +1 -1
  104. package/dist/src/human-control.js +1 -1
  105. package/dist/src/index.d.ts +1 -1
  106. package/dist/src/index.js +1 -1
  107. package/dist/src/input-actions.js +1 -1
  108. package/dist/src/input-actions2.js +1 -1
  109. package/dist/src/install-artifact-facade.js +1 -1
  110. package/dist/src/install-source-network-transport.js +1 -1
  111. package/dist/src/install-source2.js +1 -1
  112. package/dist/src/interaction-positionals.js +1 -1
  113. package/dist/src/interaction-ref-policy.js +1 -1
  114. package/dist/src/interaction2.js +1 -1
  115. package/dist/src/interactor-operation-binding.js +1 -1
  116. package/dist/src/interactor.js +5 -4
  117. package/dist/src/interactor2.js +1 -1
  118. package/dist/src/interactors.js +1 -1
  119. package/dist/src/internal/bin.js +1 -1
  120. package/dist/src/internal/daemon.js +2 -2
  121. package/dist/src/internal/png-worker.js +1 -1
  122. package/dist/src/internal/run-script-http-child.js +1 -1
  123. package/dist/src/inventory.js +1 -1
  124. package/dist/src/inventory2.js +1 -1
  125. package/dist/src/inventory3.js +1 -1
  126. package/dist/src/inventory5.js +1 -1
  127. package/dist/src/ios-snapshot-engine.js +1 -1
  128. package/dist/src/ios-snapshot-runtime.js +1 -1
  129. package/dist/src/lease-context.js +1 -1
  130. package/dist/src/lease-scope.js +1 -1
  131. package/dist/src/lease.js +1 -1
  132. package/dist/src/legacy-xctest-device-set.js +1 -0
  133. package/dist/src/limrun-download-file.js +1 -1
  134. package/dist/src/limrun-runtime-dependencies.js +1 -1
  135. package/dist/src/limrun.d.ts +1 -1
  136. package/dist/src/linux.js +1 -1
  137. package/dist/src/location-coordinates.js +1 -1
  138. package/dist/src/managed-device-scope.js +1 -1
  139. package/dist/src/mechanics.js +16 -16
  140. package/dist/src/multitouch-support.js +1 -1
  141. package/dist/src/observation.js +1 -1
  142. package/dist/src/overlay.js +3 -3
  143. package/dist/src/owner-identity.js +3 -3
  144. package/dist/src/parameterized-recorded-fill.js +1 -1
  145. package/dist/src/perf-facade.js +1 -1
  146. package/dist/src/perf-runtime-operation-builder.js +1 -1
  147. package/dist/src/perf-runtime-plan.js +1 -1
  148. package/dist/src/perf-target.js +1 -1
  149. package/dist/src/perf.js +1 -1
  150. package/dist/src/physical-device-control.js +1 -1
  151. package/dist/src/platform-request-scope.js +1 -1
  152. package/dist/src/platform-runtime-app-log-process.js +1 -1
  153. package/dist/src/platform-runtime-managed-owner.js +1 -1
  154. package/dist/src/platform-runtime-open-target.js +1 -1
  155. package/dist/src/platform-runtime-operation-host.js +2 -2
  156. package/dist/src/platform-runtime-runtime-hints.js +1 -1
  157. package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
  158. package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
  159. package/dist/src/platform-runtime-screen-recording-process-host.js +1 -1
  160. package/dist/src/platform-runtime-unavailable.js +1 -1
  161. package/dist/src/platform-runtime.js +1 -1
  162. package/dist/src/platform-runtime2.js +1 -1
  163. package/dist/src/png-crop-bytes.js +1 -1
  164. package/dist/src/png-size.js +1 -1
  165. package/dist/src/png-worker-client.js +1 -1
  166. package/dist/src/png.js +1 -1
  167. package/dist/src/prepare-kind.js +1 -1
  168. package/dist/src/process.js +1 -1
  169. package/dist/src/provider-session-ownership.js +1 -1
  170. package/dist/src/provider-webdriver.js +1 -1
  171. package/dist/src/proxy.js +2 -2
  172. package/dist/src/quality-warnings.js +1 -1
  173. package/dist/src/react-native.js +1 -1
  174. package/dist/src/record-runtime.js +1 -1
  175. package/dist/src/recording.js +1 -1
  176. package/dist/src/rect-center.js +1 -1
  177. package/dist/src/register-builtins.js +1 -1
  178. package/dist/src/registry.js +36 -36
  179. package/dist/src/remote-config2.js +1 -1
  180. package/dist/src/replay-divergence.js +1 -1
  181. package/dist/src/replay.js +1 -1
  182. package/dist/src/reporting.js +1 -1
  183. package/dist/src/request-admission.js +1 -1
  184. package/dist/src/request-cancel.js +1 -1
  185. package/dist/src/request-runtime-binding.js +1 -1
  186. package/dist/src/result-serialization.js +1 -1
  187. package/dist/src/retry.js +1 -1
  188. package/dist/src/runner-artifact-manifest.js +1 -0
  189. package/dist/src/runner-cache-metadata.js +3 -2
  190. package/dist/src/runner-client.js +1 -1
  191. package/dist/src/runner-command-traits.js +1 -0
  192. package/dist/src/runner-dev-tools-security.js +1 -1
  193. package/dist/src/runner-device-readiness.js +1 -1
  194. package/dist/src/runner-disposal.js +1 -1
  195. package/dist/src/runner-error-classification.js +3 -3
  196. package/dist/src/runner-exchange.js +1 -0
  197. package/dist/src/runner-operations-facade.js +1 -1
  198. package/dist/src/runner-owner-facade.js +1 -1
  199. package/dist/src/runner-session-types.js +1 -0
  200. package/dist/src/runner-start-budget.js +1 -0
  201. package/dist/src/runner-startup-transport.js +1 -0
  202. package/dist/src/runner-xctestrun.js +1 -0
  203. package/dist/src/runner.js +1 -1
  204. package/dist/src/runtime-transport-hints.js +1 -1
  205. package/dist/src/runtime.js +1 -1
  206. package/dist/src/runtime10.js +2 -2
  207. package/dist/src/runtime2.js +3 -3
  208. package/dist/src/runtime3.js +1 -1
  209. package/dist/src/runtime4.js +5 -5
  210. package/dist/src/runtime5.js +1 -1
  211. package/dist/src/runtime6.js +1 -1
  212. package/dist/src/runtime7.js +1 -1
  213. package/dist/src/runtime8.js +1 -1
  214. package/dist/src/runtime9.js +1 -1
  215. package/dist/src/screen-recording-admission-ledger.js +1 -1
  216. package/dist/src/screen-recording-completion.js +1 -1
  217. package/dist/src/screen-recording-options.js +1 -1
  218. package/dist/src/screen-recording-resource-recovery.js +1 -1
  219. package/dist/src/screen-recording-transport.js +1 -1
  220. package/dist/src/screenshot-density.js +1 -1
  221. package/dist/src/screenshot-image.js +1 -1
  222. package/dist/src/screenshot-runtime.js +1 -1
  223. package/dist/src/screenshot.js +1 -1
  224. package/dist/src/screenshot3.js +1 -1
  225. package/dist/src/script.js +1 -1
  226. package/dist/src/scroll-command.d.ts +4 -1
  227. package/dist/src/scroll-command.js +1 -1
  228. package/dist/src/scroll-gesture.js +1 -1
  229. package/dist/src/sdk-batch-runner.js +2 -2
  230. package/dist/src/sdk-batch.js +2 -2
  231. package/dist/src/sdk-contracts.d.ts +10 -0
  232. package/dist/src/sdk-contracts.js +2 -2
  233. package/dist/src/sdk-device.js +1 -1
  234. package/dist/src/sdk-io.js +1 -1
  235. package/dist/src/sdk-remote-config.js +1 -1
  236. package/dist/src/selection.js +0 -0
  237. package/dist/src/selector-runtime.js +1 -1
  238. package/dist/src/server.js +1 -1
  239. package/dist/src/session-allocation.js +1 -1
  240. package/dist/src/session-routing.js +1 -1
  241. package/dist/src/session-runtime-admission.js +1 -1
  242. package/dist/src/session-snapshot.js +1 -1
  243. package/dist/src/session-store.js +3 -3
  244. package/dist/src/session2.js +5 -4
  245. package/dist/src/settings.js +1 -1
  246. package/dist/src/settings2.js +1 -1
  247. package/dist/src/simctl.js +1 -1
  248. package/dist/src/simulator-boot.js +1 -1
  249. package/dist/src/simulator.js +1 -1
  250. package/dist/src/snapshot-runtime-binding.js +1 -1
  251. package/dist/src/snapshot-runtime.js +1 -1
  252. package/dist/src/snapshot-state.js +1 -1
  253. package/dist/src/snapshot2.js +1 -1
  254. package/dist/src/snapshot3.js +1 -1
  255. package/dist/src/snapshot4.js +1 -1
  256. package/dist/src/src.js +1 -1
  257. package/dist/src/src7.js +1 -1
  258. package/dist/src/src8.js +2 -2
  259. package/dist/src/string-enum.js +1 -1
  260. package/dist/src/takeover.js +1 -1
  261. package/dist/src/target-evidence.js +1 -0
  262. package/dist/src/text-entry-focus.js +1 -1
  263. package/dist/src/tool-provider.js +1 -1
  264. package/dist/src/tool-provider2.js +1 -1
  265. package/dist/src/touch-runtime.js +1 -1
  266. package/dist/src/transport.js +2 -2
  267. package/dist/src/tv-remote.js +1 -1
  268. package/dist/src/type-text-runtime.js +1 -1
  269. package/dist/src/vars.js +2 -0
  270. package/dist/src/verified-file.js +1 -1
  271. package/dist/src/video.js +1 -1
  272. package/dist/src/viewport.js +1 -1
  273. package/dist/src/web.js +1 -1
  274. package/dist/src/web2.js +1 -1
  275. package/dist/src/webdriver-source.js +1 -1
  276. package/package.json +2 -2
  277. package/server.json +2 -2
  278. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.15.apk.sha256 +0 -1
  279. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.15.apk.sha256 +0 -1
  280. package/dist/src/capture-disclosure.js +0 -1
  281. package/dist/src/fold-runtime.js +0 -1
  282. package/dist/src/native-build-cache.js +0 -1
@@ -1,5 +1,6 @@
1
- import{A as e,G as t,b as n,x as r}from"./sdk-contracts.js";import{i}from"./capture.js";import{D as a}from"./sdk-batch-runner.js";import{T as o,_ as s,d as c,f as l,u as ee,w as te}from"./sdk-device.js";import{Hr as ne}from"./sdk-batch.js";import{d as re,i as ie,l as ae}from"./scroll-gesture.js";import{n as u}from"./session.js";import{a as d,n as f}from"./alert-contract.js";import{S as oe,_ as p,b as se,g as ce,n as m,p as le,v as ue,x as de,y as h}from"./settings.js";import{n as fe}from"./location-coordinates.js";import{c as pe,n as me,t as he}from"./scroll-command.js";import"./device.js";import{t as ge}from"./device-rotation.js";import{c as _e,r as g}from"./diagnostics.js";import{a as _}from"./exec.js";import{t as ve}from"./timeouts.js";import{a as ye}from"./tv-remote.js";import"./diagnostics2.js";import"./command.js";import{i as be,n as v}from"./retry.js";import{a as y}from"./gesture-plan.js";import{n as xe}from"./scoped-provider.js";import{n as Se,r as Ce}from"./ios-snapshot-planning.js";import{a as we,l as Te,n as Ee,s as De}from"./quality-warnings.js";import{i as Oe,n as ke,r as b}from"./ios-snapshot-engine.js";import{n as Ae,r as je}from"./ios-system-surface.js";import{r as x}from"./ios-snapshot-acquisition.js";import{t as Me}from"./png-size.js";import{n as Ne}from"./screenshot-density.js";import{n as Pe}from"./interactor-types.js";import{C as Fe,g as Ie,r as Le}from"./host-file.js";import{c as Re,d as ze,f as Be,m as Ve,p as He}from"./config.js";import{o as Ue}from"./tool-provider.js";import{n as We,r as S,t as Ge}from"./physical-device-control.js";import{i as Ke,n as C,r as w,s as qe}from"./runner.js";import{l as Je}from"./host.js";import{t as Ye}from"./runner-cache-metadata.js";import{a as T,n 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{a as et,i as tt,o as nt}from"./helper.js";import{a as rt,d as it,f as at,p as ot}from"./app-resolution.js";import{i as st,t as ct}from"./display-inventory.js";import{n as lt}from"./multitouch-support.js";import{t as ut}from"./surface-snapshot.js";import{t as dt}from"./ios-target-activation.js";import k from"node:path";async function ft(e){return l(e)?await it():(D(e,`clipboard`),await O(e),_(await T(e,[`pbpaste`,e.id],{allowFailure:!0}),`Failed to read iOS simulator clipboard`).stdout.replaceAll(`\r
1
+ import{C as e,J as t,N as n,w as r}from"./sdk-contracts.js";import{i}from"./capture.js";import{D as a}from"./sdk-batch-runner.js";import{D as o,O as s,f as c,m as l,p as ee,y as u}from"./sdk-device.js";import{Hr as te}from"./sdk-batch.js";import{d as ne,i as re,l as ie}from"./scroll-gesture.js";import{n as d}from"./session.js";import{a as ae,n as f}from"./alert-contract.js";import{C as oe,S as se,_ as ce,b as p,m as le,n as ue,r as m,v as h,x as de,y as fe}from"./settings.js";import{n as pe}from"./location-coordinates.js";import{c as me,n as he,t as ge}from"./scroll-command.js";import"./device.js";import{t as _e}from"./device-rotation.js";import{c as ve,r as g}from"./diagnostics.js";import{a as _}from"./exec.js";import{t as ye}from"./timeouts.js";import{a as be}from"./tv-remote.js";import"./diagnostics2.js";import"./command.js";import{i as xe,n as Se}from"./retry.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{a as De,l as Oe,n as ke,s as Ae}from"./quality-warnings.js";import{n as je,r as Me}from"./ios-system-surface.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{n as Ie}from"./interactor-types.js";import{i as v,n as Le,r as y}from"./ios-snapshot-engine.js";import{C as Re,g as ze,r as Be}from"./host-file.js";import{c as b,d as Ve,f as He,m as Ue,p as We}from"./config.js";import{o as Ge}from"./tool-provider.js";import{n as Ke,r as x,t as S}from"./physical-device-control.js";import{i as qe,n as C,r as w,s as Je}from"./runner.js";import{l as Ye}from"./host.js";import{t as Xe}from"./runner-cache-metadata.js";import{a as T,n as E}from"./simctl.js";import{c as D}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 O,t as k}from"./simulator.js";import{a as et,i as tt,o as nt}from"./helper.js";import{a as rt,d as it,f as at,p as ot}from"./app-resolution.js";import{i as st,t as ct}from"./display-inventory.js";import{n as lt}from"./multitouch-support.js";import{t as ut}from"./surface-snapshot.js";import{t as dt}from"./ios-target-activation.js";import A from"node:path";async function ft(e){return l(e)?await it():(O(e,`clipboard`),await k(e),_(await T(e,[`pbpaste`,e.id],{allowFailure:!0}),`Failed to read iOS simulator clipboard`).stdout.replaceAll(`\r
2
2
  `,`
3
- `).replace(/\n$/,``))}async function pt(e,t){if(l(e)){await ot(t);return}D(e,`clipboard`),await O(e),_(await T(e,[`pbcopy`,e.id],{allowFailure:!0,stdin:t}),`Failed to write iOS simulator clipboard`)}function mt(t){if(!ee(t))throw new e(`UNSUPPORTED_OPERATION`,m.message,{deviceId:t.id,appleOs:te(t),deviceKind:t.kind,reason:m.reason,hint:m.hint})}async function ht(e,t){mt(e);let n=se(t);return await T(e,[`ui`,e.id,`content_size`,n]),oe(n,n)}async function gt(t){mt(t),await O(t);let n=_(await T(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 oe(i,r)}const _t=[`--time`,`9:41`,`--dataNetwork`,`wifi`,`--wifiMode`,`active`,`--wifiBars`,`3`,`--batteryState`,`charged`,`--batteryLevel`,`100`],vt={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`},yt={1:`searching`,2:`failed`,3:`active`},bt={0:`notSupported`,1:`searching`,2:`failed`,3:`active`},A=new Set;async function xt(e){let t=null,n=!1;if(Ct(e))n=!0;else try{t=await wt(e),n=!0}catch(t){I(e,`snapshot_failed`,t)}try{(!n||t)&&await P(e),await F(e,_t)}catch(t){I(e,`prepare_failed`,t)}return async()=>{await St(e,n?t:null)}}async function St(e,t){if(await P(e),!t){M(e);return}await F(e,Et(t)),j(e)}function j(e){A.delete(N(e))}function M(e){A.add(N(e))}function Ct(e){return A.has(N(e))}function N(e){return`${e.platform}:${e.kind}:${e.id}`}async function wt(e){return Tt(_(await T(e,[`status_bar`,e.id,`list`],{allowFailure:!0}),`Failed to read simulator status bar overrides`).stdout)}async function P(e){await T(e,[`status_bar`,e.id,`clear`])}async function F(e,t){t.length!==0&&await T(e,[`status_bar`,e.id,`override`,...t])}function Tt(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=vt[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=yt[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=bt[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 Et(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||Dt(e.dataNetwork)||e.operatorName!==void 0)&&t.push(`--cellularBars`,e.cellularBars),e.operatorName!==void 0&&t.push(`--operatorName`,e.operatorName),t}function Dt(e){return!!(e&&e!==`hide`&&e!==`wifi`)}function I(e,t,n){g({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...S(n)}})}async function Ot(t,n,r,i,a){if(l(t)){let t=n.toLowerCase();if(t===`appearance`){await at(r);return}if(t===`permission`){let t=p(r);if(t===`deny`)throw new e(`INVALID_ARGS`,le(`permission`));let n=Mt(a?.permissionTarget);return await et(t,n)}throw new e(`INVALID_ARGS`,le(n))}D(t,`settings`),await O(t);let o=n.toLowerCase();switch(o){case`clear-app-state`:{if(r.toLowerCase()!==`clear`)throw new e(`INVALID_ARGS`,`settings clear-app-state only supports clear.`);if(!i)throw new e(`INVALID_ARGS`,`settings clear-app-state requires an app id or an active app session.`);let n=await jt(t,i);return{bundleId:n.bundleId,containerPath:n.containerPath,cleared:!0}}case`reset-keychain`:if(r.toLowerCase()!==`clear`)throw new e(`INVALID_ARGS`,`settings reset-keychain only supports clear.`);return await T(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=h(r)?`active`:`failed`;await T(t,[`status_bar`,t.id,`override`,`--wifiMode`,e]),j(t);return}case`airplane`:h(r)?(await T(t,[`status_bar`,t.id,`override`,`--dataNetwork`,`hide`,`--wifiMode`,`failed`,`--wifiBars`,`0`,`--cellularMode`,`failed`,`--cellularBars`,`0`,`--operatorName`,``]),j(t)):(await T(t,[`status_bar`,t.id,`clear`]),M(t));return;case`location`:{if(r.toLowerCase()===`set`){let{latitude:e,longitude:n}=fe(a);return await T(t,[`location`,t.id,`set`,`${e},${n}`]),{latitude:e,longitude:n}}let n=h(r);if(!i)throw new e(`INVALID_ARGS`,`location setting requires an active app in session`);let o=n?`grant`:`revoke`;await T(t,[`privacy`,t.id,o,`location`,i]);return}case`faceid`:case`touchid`:{let e=o,n=Ft[e];await Ut(t,Ht(r,e),{settingName:e,label:n.label,modalityAliases:n.modalityAliases});return}case`appearance`:{let e=await Nt(t,r);await T(t,[`ui`,t.id,`appearance`,e]);return}case`text-size`:return await ht(t,r);case`permission`:if(!i)throw new e(`INVALID_ARGS`,`permission setting requires an active app in session`);await Lt(t,It(p(r)),Vt(a?.permissionTarget,a?.permissionMode),i);return;default:throw new e(`INVALID_ARGS`,`Unsupported setting: ${n}`)}}const kt={"text-size":gt};async function At(e,t){return await kt[t](e)}async function jt(t,n){if(!c(t)||t.kind!==`simulator`)throw new e(`UNSUPPORTED_OPERATION`,`Clearing app state is currently supported only on iOS simulators.`);let r=await rt(t,n);await O(t),await $e(t,r);let i=_(await T(t,[`get_app_container`,t.id,r,`data`],{allowFailure:!0}),`simctl get_app_container failed for ${r}`).stdout.trim();if(!i)throw new e(`COMMAND_FAILED`,`simctl get_app_container returned an empty data container path for ${r}`);let a=await Ie(i);return await Promise.all(a.map(e=>Fe(k.join(i,e)))),{bundleId:r,containerPath:i}}function Mt(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.`)}async function Nt(t,n){let r=ce(n);if(r!==`toggle`)return r;let i=_(await T(t,[`ui`,t.id,`appearance`],{allowFailure:!0}),`Failed to read current iOS appearance`),a=Pt(i.stdout,i.stderr);if(!a)throw new e(`COMMAND_FAILED`,`Unable to determine current iOS appearance for toggle`,{stdout:i.stdout,stderr:i.stderr});return a===`dark`?`light`:`dark`}function Pt(e,t){let n=/\b(light|dark|unsupported|unknown)\b/i.exec(`${e}\n${t}`);if(!n)return null;let r=n[1]?.toLowerCase();return r===`dark`?`dark`:r===`light`?`light`:null}const Ft={faceid:{label:`Face ID`,modalityAliases:[`face`]},touchid:{label:`Touch ID`,modalityAliases:[`finger`,`touch`]}};function It(e){return e===`deny`?`revoke`:e}async function Lt(e,t,n,r){try{await T(e,[`privacy`,e.id,t,n,r])}catch(i){throw Rt(i)?zt(e,t,n,r,i):i}}function Rt(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=String(t.details?.stderr??``).toLowerCase();return/failed to (set|grant|revoke|reset) access/.test(n)&&n.includes(`operation not permitted`)}function zt(t,n,r,i,a){return n===`reset`?new e(`UNSUPPORTED_OPERATION`,`iOS simulator does not support resetting ${r} permission via simctl privacy on this runtime.`,{deviceId:t.id,appBundleId:i,hint:`Use reinstall to force a fresh prompt, or reset simulator content and settings.`},a):new e(`UNSUPPORTED_OPERATION`,`iOS simulator does not support setting ${r} permission via simctl privacy on this runtime.`,{deviceId:t.id,appBundleId:i,hint:"Privacy support varies by Xcode runtime: run `xcrun simctl privacy help` for its documented services, or use the `all` target, which applies the action to every service this runtime can change."},a)}const Bt={all:`all`,camera:`camera`,microphone:`microphone`,contacts:`contacts`,"contacts-limited":`contacts-limited`,notifications:`notifications`,calendar:`calendar`,location:`location`,"location-always":`location-always`,"media-library":`media-library`,motion:`motion`,reminders:`reminders`,siri:`siri`};function Vt(t,n){let r=ue(t);if(r===`photos`){let t=n?.trim().toLowerCase();if(!t||t===`full`)return`photos`;if(t===`limited`)return`photos-add`;throw new e(`INVALID_ARGS`,`Invalid photos mode: ${n}. Use full|limited.`)}if(n?.trim())throw new e(`INVALID_ARGS`,`Permission mode is only supported for photos. Received: ${n}.`);return Bt[r]}function Ht(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 Ut(n,r,i){let a=Wt(n.id,r,i.modalityAliases),o=[];for(let e of a){let t=Xe(n,e),r=await Ue(t,{allowFailure:!0});if(r.exitCode===0)return;o.push({args:t,stderr:r.stderr,stdout:r.stdout,exitCode:r.exitCode})}let s=t(o);throw o.length>0&&o.every(e=>Gt(e.stdout,e.stderr))?new e(`UNSUPPORTED_OPERATION`,`${i.label} simulation is not supported on this simulator runtime.`,{deviceId:n.id,action:r,setting:i.settingName,attempts:s}):new e(`COMMAND_FAILED`,`Failed to simulate ${i.settingName}.`,{deviceId:n.id,action:r,setting:i.settingName,attempts:s})}function Wt(e,t,n){let r=n.length>0?n:[`face`];switch(t){case`match`:return r.flatMap(t=>[[`biometric`,e,`match`,t],[`biometric`,`match`,e,t]]);case`nonmatch`:return r.flatMap(t=>[[`biometric`,e,`nonmatch`,t],[`biometric`,e,`nomatch`,t],[`biometric`,`nonmatch`,e,t],[`biometric`,`nomatch`,e,t]]);case`enroll`:return[[`biometric`,e,`enroll`,`yes`],[`biometric`,e,`enroll`,`1`],[`biometric`,`enroll`,e,`yes`],[`biometric`,`enroll`,e,`1`]];case`unenroll`:return[[`biometric`,e,`enroll`,`no`],[`biometric`,e,`enroll`,`0`],[`biometric`,`enroll`,e,`no`],[`biometric`,`enroll`,e,`0`]]}}function Gt(e,t){let n=`${e}\n${t}`.toLowerCase();return n.includes(`unrecognized subcommand`)||n.includes(`unknown subcommand`)||n.includes(`not supported`)||n.includes(`unavailable`)||n.includes(`biometric`)&&n.includes(`invalid`)}function Kt(e){let t=e.screenshotMetadata;if(!t||typeof t!=`object`||Array.isArray(t))return;let n=t,r=L(n.displayID),i=L(n.pixelWidth),a=L(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 L(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 Jt={ensureBooted:O,prepareStatusBarForScreenshot:xt,resolveCaptureDisplay:st,captureWithRetry:Zt,normalizeDensity:rn,captureWithRunner:B,shouldFallbackToRunner:U},R=new Map,z=new Map;async function Yt(e,t,n={}){if(l(e)){await B(e,t,n.appBundleId,n.fullscreen,n.runnerOptions);return}if(e.kind===`simulator`){await Xt(e,t,n);return}await Ge(e).captureScreenshot(e,t,{appBundleId:n.appBundleId,fullscreen:n.fullscreen,runnerOptions:n.runnerOptions,runRunnerCommand:E})}async function Xt(t,n,r={}){if(t.kind!==`simulator`)throw new e(`UNSUPPORTED_OPERATION`,`Simulator screenshot fallback flow supports only iOS simulators`);let i={...Jt,...r.deps??{}};r.skipIosSimulatorBootCheck||await i.ensureBooted(t);let a=await i.resolveCaptureDisplay(t),o=async()=>{await i.captureWithRetry(t,n,a),await i.normalizeDensity(t,n,r.pixelDensity,a?.pointScale)},s=async()=>{};if(r.normalizeStatusBar===!0)try{s=await i.prepareStatusBarForScreenshot(t)}catch(e){H(t,`prepare_failed`,e)}try{try{await o();return}catch(e){let n=e;if(r.skipIosSimulatorBootCheck&&nn(e)){await i.ensureBooted(t);try{await o();return}catch(e){n=e}}if(!i.shouldFallbackToRunner(n))throw n;en(t,`simctl_screenshot`,n)}let e=await i.captureWithRunner(t,n,r.appBundleId,r.fullscreen,r.runnerOptions);await i.normalizeDensity(t,n,r.pixelDensity,e?.pixelsPerPoint)}finally{await s().catch(e=>H(t,`restore_failed`,e))}}async function Zt(e,t,n){let r=v.fromTimeoutMs(Ve),i=[`io`,e.id,`screenshot`,...ct(n),t];await be(async({deadline:t})=>{await T(e,i,{timeoutMs:Math.max(1e3,t?.remainingMs()??2e4)})},{maxAttempts:5,baseDelayMs:ze,maxDelayMs:Be,jitter:.2,shouldRetry:e=>U(e)},{deadline:r,phase:`ios_simulator_screenshot`})}async function B(t,n,r,i,a){if(t.kind===`device`&&!l(t)){await Ge(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=Kt(o);if(l(t))return await Le(s,n),c;if(t.kind===`simulator`)return await Qt(t,s,n),c;throw new e(`COMMAND_FAILED`,`Unsupported Apple screenshot target`)}async function Qt(t,n,r){let i=v.fromTimeoutMs(Re),a=`Unable to locate runner container for simulator screenshot`,o=z.get(t.id);if(o){let e=await V(o,n,r);if(e.copied)return;a=e.error,z.delete(t.id)}for(let e of Ye){let o=await T(t,[`get_app_container`,t.id,e,`data`],{allowFailure:!0,timeoutMs:$t(i,Re,`runner screenshot container lookup`)});if(o.exitCode!==0){let e=o.stderr.trim();e&&(a=e);continue}let s=o.stdout.trim();if(!s){a=`simctl get_app_container returned empty output`;continue}let c=await V(s,n,r);if(c.copied){z.set(t.id,s);return}a=c.error}throw new e(`COMMAND_FAILED`,`Failed to capture iOS screenshot: ${a}`)}async function V(e,t,n){let r=`Runner screenshot was not found in the simulator container`;for(let i of tn(e,t))try{return await Le(i,n),{copied:!0}}catch(e){r=e instanceof Error?e.message:String(e)}return{copied:!1,error:r}}function $t(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 en(e,t,n){let r=S(n);g({level:`warn`,phase:`ios_screenshot_fallback`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,from:t,to:`runner`,...r}})}function H(e,t,n){g({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...S(n)}})}function tn(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 U(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=We(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 nn(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=We(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 rn(e,t,n,r){let i=r??await an(e),a=Ne(await Me(t),i,n);a&&await we(t,a.width,a.height)}async function an(t){let n=R.get(t.id);if(n!==void 0)return n;let r=await T(t,[`getenv`,t.id,`SIMULATOR_MAINSCREEN_SCALE`],{timeoutMs:He}),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 R.set(t.id,i),i}function on(t){return!(t instanceof e)||t.details?.runnerErrorCode!==`SCROLL_KEYBOARD_OCCLUDES_SURFACE`?t:new e(t.code,t.message,{...t.details,...ie})}function sn(e){let t=e?.amount!==void 0||e?.pixels!==void 0;return{...e,...t?{}:{amount:he},durationMs:e?.durationMs??400,releaseBehavior:e?.releaseBehavior??`controlled`}}function cn(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=re({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 ln(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}=dn(e),o=W(e.referenceWidth),s=W(e.referenceHeight),c=un(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 un(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 dn(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 fn(e,t,n,r,i,a){return cn(await e(t,{command:`desktopScroll`,direction:i,...ln(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 pn(e){return e===`system`?`backSystem`:`backInApp`}function mn(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 hn(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}:{},...o(e)?{synthesized:!0}:{},appBundleId:t.appBundleId},n),doubleTap:async(r,i)=>{let a=await E(e,C([{kind:`doubleTap`,x:r,y:i}],t.appBundleId),n);return w(a),a},appState:async()=>bn(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)=>yn(await E(e,{command:`type`,text:r,delayMs:i,textEntryMode:r===`
5
- `?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 Tn(E,e,t,n,r,i),performGesture:async r=>await Cn(e,t,n,r),gestureViewport:async()=>Sn(await E(e,{command:`gestureViewport`,appBundleId:t.appBundleId},n))}}}async function hn(e,t,n,r,i){let a=l(e)?u(i.surface):void 0;return a?await gn(t,r,i,a):i.button===`primary`?i.count===1?await vn(e,t,n,r,i):await Ke(e,r,i,t.appBundleId,async t=>await E(e,t,n)):await _n(e,t,n,r,i.button)}async function gn(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.t),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 _n(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 vn(e,t,n,r,i){if(i.doubleTap){let i=await E(e,C([{kind:`doubleTap`,x:r.x,y:r.y}],t.appBundleId),n);return w(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 yn(e){let t=e.textEntryRoute;return xn(t)?{textEntryRoute:t}:{}}function bn(e){let t=e.applicationState;return n(t)?{applicationState:t}:{}}function xn(e){return typeof e==`string`&&Pe.includes(e)}function Sn(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 Cn(e,t,n,r){if(r.topology===`two`&&lt(e,r.intent),r.topology===`single`&&l(e)){let{start:i,end:a}=y(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`&&s(e)){let{start:i,end:a}=y(r);return await E(e,{command:`swipe`,direction:wn(i,a),appBundleId:t.appBundleId},n)}return await E(e,{command:`gesture`,gesturePlan:r,appBundleId:t.appBundleId},n)}function wn(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,...o(e)?{synthesized:!0}:{},appBundleId:t.appBundleId}}async function Tn(e,t,n,r,i,a){if(pe(a?.durationMs,{invalidMessage:`scroll durationMs must be a non-negative integer at most ${me}`}),s(t))return G(await e(t,K(i,n.appBundleId,a?.durationMs),r),{amount:a?.amount,durationMs:a?.durationMs});if(ae(a??{}),l(t))return await fn(e,t,n,r,i,a);let o=sn(a),c;try{c=await e(t,{command:`scroll`,direction:i,...ln(o),appBundleId:n.appBundleId},r)}catch(e){throw on(e)}return cn(c,i,o)}function Y(e,t,n){if(l(e)){let e=n?.surface===`frontmost-app`?{surface:n.surface}:{bundleId:n?.appBundleId,surface:n?.surface};return async t=>await tt(t,e)}return async(r,i)=>await E(e,{command:`alert`,action:r,appBundleId:n?.appBundleId,timeoutMs:i},t)}async function En(e,t,n){return await Y(e,t,n)(`get`,d)}async function Dn(t,n,r){let i=Y(t,n,r),a=r?.timeoutMs??1e4,o=Date.now(),s=!0;for(;Date.now()-o<a;){try{let e=s?a:kn(o,a);return s=!1,await i(`get`,e)}catch(e){if(!X(e))throw e}await ve(300)}throw new e(`COMMAND_FAILED`,`alert wait timed out`)}async function On(e,t,n,r){let i=Y(e,t,r),a=c(e)?d:f,o=Date.now(),s,l=!0;for(;Date.now()-o<f;){try{let e=l?a:kn(o,f);return l=!1,await i(n,e)}catch(e){if(s=e,!X(e))break}await ve(300)}throw An(s)}function kn(e,t){return Math.max(1,t-(Date.now()-e))}function An(t){return!(t instanceof e)||!X(t)?t:new e(t.code,t.message,{...t.details??{},hint:`If the permission sheet is visible in snapshot or screenshot but alert reports no alert, take a scoped snapshot around the visible button label and use press @ref.`})}function X(t){if(!(t instanceof e))return!1;let n=t.details??{};return n.runnerErrorCode===`ALERT_NOT_FOUND`||n.reason===`alert-not-found`}const jn={0:`unknown`,1:`notRunning`,2:`runningBackgroundSuspended`,3:`runningBackground`};function Mn(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return;let n={...e},i=n.reason;if(!r(i))return;let a=n.priorState;if(typeof a!=`number`||!Number.isInteger(a))return;let o=jn[a];o===void 0&&t?.({reason:i,rawPriorState:a});let s=n.otherActiveApplicationPid;return{reason:i,priorState:o??`unknown`,...typeof s==`number`&&Number.isInteger(s)&&s>0?{otherActiveApplicationPid:s}:{}}}function Nn(e){let t=Pn(e.systemSurface),n=a(e.keyboard),r=Mn(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:Te(e.snapshotQuality),qualityPayload:Rn(e.qualityPayload,t),runnerFatal:e.runnerFatal===!0,...n?{keyboard:n}:{},...t?{systemSurface:t}:{},...r?{targetActivation:r}:{},message:typeof e.message==`string`&&e.message.trim().length>0?e.message:void 0}}function Pn(e){if(!Vn(e)||typeof e.bundleId!=`string`)return;let t=je(e.bundleId);return t&&{bundleId:t.bundleId,kind:t.kind}}function Fn(e,t,n){let r=n.nodes??[];if(n.runnerFatal===!0||r.length===0&&n.qualityPayload===void 0)return r;let i=Ce({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions}),a=zn(r,n.qualityPayload?.nodes),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:Se(i),viewport:a,hittability:{kind:`available`},lineage:{targetId:e},residue:[]}};try{return ke(o,i).nodes}catch(e){In(e,n)}}function In(t,n){let r=n.quality;if(t instanceof b&&De(r))throw new e(`COMMAND_FAILED`,t.message,{...Oe(t),...n.systemSurface?{systemSurface:n.systemSurface}:{},snapshotQuality:{state:r.state,backend:r.backend,...r.reason?{reason:r.reason}:{},...r.reasonCode?{reasonCode:r.reasonCode}:{}},hint:Ln(n.systemSurface,r)},t);Z(t,n.systemSurface)}function Ln(e,t){return[e?`${e.bundleId} hosts the surface presented over the app, and this capture targeted that surface.`:void 0,...Ee(t,[])].filter(e=>e!==void 0).join(` `)}function Rn(e,t){if(e!==void 0)return(!Vn(e)||!Array.isArray(e.nodes)||typeof e.truncated!=`boolean`)&&Z(new b(`invalid-quality-payload`,`iOS runner returned an invalid quality payload`),t),e.scope!==void 0&&e.scope!==null&&Z(new b(`invalid-quality-payload`,`iOS runner quality payload must be unscoped`,{field:`scope`}),t),{nodes:e.nodes,truncated:e.truncated,scope:null}}function zn(e,t){return x(Bn(t),{fallbackToLargestRoot:!0})??x(Bn(e),{fallbackToLargestRoot:!0})??{kind:`missing`,reason:`not-provided`}}function Bn(e){return e?.filter(e=>e.parentIndex===void 0)??[]}function Vn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Z(t,n){throw t instanceof b?new e(`COMMAND_FAILED`,t.message,{...Oe(t),...n?{systemSurface:n}:{}},t):t}function Hn(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}=mn(t,n),o={open:(e,n)=>Ze(t,e,{appBundleId:n?.appBundleId,launchConsole:n?.launchConsole,launchArgs:n?.launchArgs,terminateRunningApp:n?.terminateRunningApp,url:n?.url,runnerOptions:a}),openDevice:()=>Qe(t),close:e=>$e(t,e,a),screenshot:(e,n)=>$n(t,e,n,a),snapshot:async e=>await Un(t,e,a),readTextAtPoint:async(e,n)=>{let r=l(t)?u(n?.surface):void 0;return r?await er(e,r,n?.appBundleId):await tr(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(s(t)){await E(t,K(`menu`,n.appBundleId),a);return}await E(t,{command:pn(e),appBundleId:n.appBundleId},a)},home:async()=>{if(s(t)){await E(t,K(`home`,n.appBundleId),a);return}await E(t,{command:`home`,appBundleId:n.appBundleId},a)},setOrientation:async r=>{let i=Zn(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(ye(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:Xn(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:()=>ft(t),writeClipboard:e=>pt(t,e),setSetting:(e,n,r,i)=>Ot(t,e,n,r,i),readSetting:e=>At(t,e),readAlert:e=>En(t,a,e),awaitAlert:e=>Dn(t,a,e),acceptAlert:e=>On(t,a,`accept`,e),dismissAlert:e=>On(t,a,`dismiss`,e),...i};return r?Qn(t,n,o,r):o}async function Un(e,t,n){let r=l(e)?u(t?.surface):void 0;return r?await ut({...t,surface:r},t?.signal):await Wn(e,t,n)}async function Wn(e,t,n){let r=Nn(await _e(`snapshot_capture`,async()=>await E(e,{command:`snapshot`,appBundleId:t?.appBundleId,interactiveOnly:t?.interactiveOnly,preferredBackend:t?.preferredBackend,customActions:t?.customActions,depth:t?.depth,scope:t?.scope,raw:t?.raw},Yn(n,t?.signal)),{backend:`xctest`}));Gn(e,t,r);let i=Kn(r);return{nodes:qn(e,t,r),truncated:r.truncated??!1,backend:`xctest`,producer:`apple-runner`,...r.quality?{quality:r.quality}:{},...r.systemSurface?{systemSurface:r.systemSurface}:{},...r.keyboard?{keyboard:r.keyboard}:{},...r.targetActivation?{targetActivation:r.targetActivation}:{},...i.length>0?{warnings:i}:{}}}function Gn(t,n,r){if(!((r.nodes?.length??0)>0)&&!Jn(n,r.quality)&&t.kind===`simulator`)throw new e(`COMMAND_FAILED`,`XCTest snapshot returned 0 nodes on iOS simulator.`)}function Kn(e){let t=[];return!e.quality&&e.message&&t.push(e.message),e.systemSurface&&t.push(Ae(e.systemSurface.bundleId)),e.targetActivation&&t.push(dt(e.targetActivation)),t}function qn(e,t,n){return l(e)?n.nodes??[]:Fn(e.id,t,n)}function Jn(e,t){return ne(e?.scope)!==null&&t!==void 0&&t.state!==`sparse`}function Yn(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 Xn(e,t){let n=e[t];return typeof n==`string`?n:void 0}function Zn(t){let n=t.orientation;if(typeof n==`string`&&ge.includes(n))return n;throw new e(`COMMAND_FAILED`,`iOS runner returned an invalid orientation result`,{orientation:n})}function Qn(e,t,n,r){let i={...n,open:async()=>$(`open`),openDevice:async()=>$(`openDevice`),close:async()=>$(`close`),screenshot:async()=>$(`screenshot`),readClipboard:async()=>$(`readClipboard`),writeClipboard:async()=>$(`writeClipboard`),setSetting:async()=>$(`setSetting`),readSetting:async()=>$(`readSetting`)};return xe(i,n=>qe(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 $n(t,n,r={},a){let o=l(t)?u(r.surface):void 0;if(o){if(r.fullscreen)throw new e(`INVALID_ARGS`,`screenshot --fullscreen is not accepted on the macOS ${o} surface: it always captures the main display`,{reason:i.macOsHelperSurfaceFixedFrame,surface:o});await nt(n,{surface:o});return}if(r.captureBackend===`runner`){await B(t,n,r.appBundleId,r.fullscreen,a);return}await Yt(t,n,{appBundleId:r.appBundleId,pixelDensity:r.pixelDensity,fullscreen:r.fullscreen,runnerOptions:a,normalizeStatusBar:r.normalizeStatusBar,skipIosSimulatorBootCheck:r.skipIosSimulatorBootCheck})}async function er(e,t,n){let{runMacOsReadTextAction:r}=await import(`./helper.js`).then(e=>e.t);return(await r(e.x,e.y,{bundleId:n,surface:t})).text}async function tr(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{Hn as createAppleInteractor};
3
+ `).replace(/\n$/,``))}async function pt(e,t,n){if(l(e)){await ot(t);return}if(O(e,`clipboard`),u(e)){let r=n?.signal;await k(e,{signal:r}),_(await T(e,[`pbcopy`,e.id],{allowFailure:!0,stdin:t,signal:r}),`Failed to write tvOS simulator clipboard`);return}await D(e,{command:`pasteboardWrite`,text:t},n)}function j(e,t){if(!c(e))throw new n(`UNSUPPORTED_OPERATION`,t.message,{deviceId:e.id,appleOs:o(e),deviceKind:e.kind,reason:t.reason,hint:t.hint})}async function mt(e,t){j(e,m);let n=de(t);return await T(e,[`ui`,e.id,`content_size`,n]),oe(n,n)}async function ht(e){j(e,m),await k(e);let t=_(await T(e,[`ui`,e.id,`content_size`],{allowFailure:!0}),`Failed to read iOS content size category`),r=t.stdout.trim(),i=se(r);if(i===void 0)throw new n(`COMMAND_FAILED`,`iOS simulator reported an unknown text size: ${r||`(empty)`}`,{deviceId:e.id,stdout:t.stdout,stderr:t.stderr,hint:"Boot the simulator, or run `xcrun simctl ui <device> content_size` to see what it reports."});return oe(i,r)}const gt=[`--time`,`9:41`,`--dataNetwork`,`wifi`,`--wifiMode`,`active`,`--wifiBars`,`3`,`--batteryState`,`charged`,`--batteryLevel`,`100`],_t={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`},vt={1:`searching`,2:`failed`,3:`active`},yt={0:`notSupported`,1:`searching`,2:`failed`,3:`active`},M=new Set;async function bt(e){let t=null,n=!1;if(St(e))n=!0;else try{t=await Ct(e),n=!0}catch(t){R(e,`snapshot_failed`,t)}try{(!n||t)&&await I(e),await L(e,gt)}catch(t){R(e,`prepare_failed`,t)}return async()=>{await xt(e,n?t:null)}}async function xt(e,t){if(await I(e),!t){P(e);return}await L(e,Tt(t)),N(e)}function N(e){M.delete(F(e))}function P(e){M.add(F(e))}function St(e){return M.has(F(e))}function F(e){return`${e.platform}:${e.kind}:${e.id}`}async function Ct(e){return wt(_(await T(e,[`status_bar`,e.id,`list`],{allowFailure:!0}),`Failed to read simulator status bar overrides`).stdout)}async function I(e){await T(e,[`status_bar`,e.id,`clear`])}async function L(e,t){t.length!==0&&await T(e,[`status_bar`,e.id,`override`,...t])}function wt(e){let t={},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=_t[e];if(!i)throw new n(`COMMAND_FAILED`,`Unsupported simulator data network type: ${e}`);t.dataNetwork=i;continue}let i=/^WiFi Mode:\s+(\d+),\s+WiFi Bars:\s+(\d+)$/.exec(e);if(i){let e=vt[Number(i[1])];e&&(t.wifiMode=e),t.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=yt[e];if(!r)throw new n(`COMMAND_FAILED`,`Unsupported simulator cellular mode: ${e}`);t.cellularMode=r,t.cellularBars=a[2];continue}let o=/^Operator Name:\s*(.*)$/.exec(e);if(o){t.operatorName=o[1]??``;continue}}return Object.keys(t).length===0?null:t}function Tt(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||Et(e.dataNetwork)||e.operatorName!==void 0)&&t.push(`--cellularBars`,e.cellularBars),e.operatorName!==void 0&&t.push(`--operatorName`,e.operatorName),t}function Et(e){return!!(e&&e!==`hide`&&e!==`wifi`)}function R(e,t,n){g({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...x(n)}})}async function Dt(e,t,r,i,a){if(l(e)){let e=t.toLowerCase();if(e===`appearance`){await at(r);return}if(e===`permission`){let e=h(r);if(e===`deny`)throw new n(`INVALID_ARGS`,le(`permission`));let t=jt(a?.permissionTarget);return await et(e,t)}throw new n(`INVALID_ARGS`,le(t))}O(e,`settings`),await k(e);let o=t.toLowerCase();switch(o){case`clear-app-state`:{if(r.toLowerCase()!==`clear`)throw new n(`INVALID_ARGS`,`settings clear-app-state only supports clear.`);if(!i)throw new n(`INVALID_ARGS`,`settings clear-app-state requires an app id or an active app session.`);let t=await At(e,i);return{bundleId:t.bundleId,containerPath:t.containerPath,cleared:!0}}case`reset-keychain`:if(r.toLowerCase()!==`clear`)throw new n(`INVALID_ARGS`,`settings reset-keychain only supports clear.`);return await T(e,[`keychain`,e.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 t=p(r)?`active`:`failed`;await T(e,[`status_bar`,e.id,`override`,`--wifiMode`,t]),N(e);return}case`airplane`:p(r)?(await T(e,[`status_bar`,e.id,`override`,`--dataNetwork`,`hide`,`--wifiMode`,`failed`,`--wifiBars`,`0`,`--cellularMode`,`failed`,`--cellularBars`,`0`,`--operatorName`,``]),N(e)):(await T(e,[`status_bar`,e.id,`clear`]),P(e));return;case`location`:{if(r.toLowerCase()===`set`){let{latitude:t,longitude:n}=pe(a);return await T(e,[`location`,e.id,`set`,`${t},${n}`]),{latitude:t,longitude:n}}let t=p(r);if(!i)throw new n(`INVALID_ARGS`,`location setting requires an active app in session`);let o=t?`grant`:`revoke`;await T(e,[`privacy`,e.id,o,`location`,i]);return}case`faceid`:case`touchid`:{j(e,ue);let t=o,n=Pt[t];await Ht(e,Vt(r,t),{settingName:t,notificationModality:n.notificationModality});return}case`appearance`:{let t=await Mt(e,r);await T(e,[`ui`,e.id,`appearance`,t]);return}case`text-size`:return await mt(e,r);case`permission`:if(!i)throw new n(`INVALID_ARGS`,`permission setting requires an active app in session`);await It(e,Ft(h(r)),Bt(a?.permissionTarget,a?.permissionMode),i);return;default:throw new n(`INVALID_ARGS`,`Unsupported setting: ${t}`)}}const Ot={"text-size":ht};async function kt(e,t){return await Ot[t](e)}async function At(e,t){if(!ee(e)||e.kind!==`simulator`)throw new n(`UNSUPPORTED_OPERATION`,`Clearing app state is currently supported only on iOS simulators.`);let r=await rt(e,t);await k(e),await $e(e,r);let i=_(await T(e,[`get_app_container`,e.id,r,`data`],{allowFailure:!0}),`simctl get_app_container failed for ${r}`).stdout.trim();if(!i)throw new n(`COMMAND_FAILED`,`simctl get_app_container returned an empty data container path for ${r}`);let a=await ze(i);return await Promise.all(a.map(e=>Re(A.join(i,e)))),{bundleId:r,containerPath:i}}function jt(e){let t=e?.trim().toLowerCase();if(t===`accessibility`||t===`screen-recording`||t===`input-monitoring`)return t;throw new n(`INVALID_ARGS`,`Unsupported macOS permission target. Use accessibility|screen-recording|input-monitoring.`)}async function Mt(e,t){let r=ce(t);if(r!==`toggle`)return r;let i=_(await T(e,[`ui`,e.id,`appearance`],{allowFailure:!0}),`Failed to read current iOS appearance`),a=Nt(i.stdout,i.stderr);if(!a)throw new n(`COMMAND_FAILED`,`Unable to determine current iOS appearance for toggle`,{stdout:i.stdout,stderr:i.stderr});return a===`dark`?`light`:`dark`}function Nt(e,t){let n=/\b(light|dark|unsupported|unknown)\b/i.exec(`${e}\n${t}`);if(!n)return null;let r=n[1]?.toLowerCase();return r===`dark`?`dark`:r===`light`?`light`:null}const Pt={faceid:{notificationModality:`pearl`},touchid:{notificationModality:`fingerTouch`}};function Ft(e){return e===`deny`?`revoke`:e}async function It(e,t,n,r){try{await T(e,[`privacy`,e.id,t,n,r])}catch(i){throw Lt(i)?Rt(e,t,n,r,i):i}}function Lt(e){if(!(e instanceof n)||e.code!==`COMMAND_FAILED`)return!1;let t=String(e.details?.stderr??``).toLowerCase();return/failed to (set|grant|revoke|reset) access/.test(t)&&t.includes(`operation not permitted`)}function Rt(e,t,r,i,a){return t===`reset`?new n(`UNSUPPORTED_OPERATION`,`iOS simulator does not support resetting ${r} permission via simctl privacy on this runtime.`,{deviceId:e.id,appBundleId:i,hint:`Use reinstall to force a fresh prompt, or reset simulator content and settings.`},a):new n(`UNSUPPORTED_OPERATION`,`iOS simulator does not support setting ${r} permission via simctl privacy on this runtime.`,{deviceId:e.id,appBundleId:i,hint:"Privacy support varies by Xcode runtime: run `xcrun simctl privacy help` for its documented services, or use the `all` target, which applies the action to every service this runtime can change."},a)}const zt={all:`all`,camera:`camera`,microphone:`microphone`,contacts:`contacts`,"contacts-limited":`contacts-limited`,notifications:`notifications`,calendar:`calendar`,location:`location`,"location-always":`location-always`,"media-library":`media-library`,motion:`motion`,reminders:`reminders`,siri:`siri`};function Bt(e,t){let r=fe(e);if(r===`photos`){let e=t?.trim().toLowerCase();if(!e||e===`full`)return`photos`;if(e===`limited`)return`photos-add`;throw new n(`INVALID_ARGS`,`Invalid photos mode: ${t}. Use full|limited.`)}if(t?.trim())throw new n(`INVALID_ARGS`,`Permission mode is only supported for photos. Received: ${t}.`);return zt[r]}function Vt(e,t){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 n(`INVALID_ARGS`,`Invalid ${t} state: ${e}. Use match|nonmatch|enroll|unenroll.`)}async function Ht(e,r,i){let a=E(e,Gt(e.id,r,i.notificationModality)),o=await Ge(a,{allowFailure:!0}),s=[];if(o.exitCode!==0)s.push({args:a,stderr:o.stderr,stdout:o.stdout,exitCode:o.exitCode});else{let t=Ut(r);if(t!==void 0){let n=await Wt(e);if(n.state===t)return;s.push({args:n.args,stderr:n.stderr,stdout:n.stdout,exitCode:n.exitCode})}else return}throw new n(`COMMAND_FAILED`,`Failed to simulate ${i.settingName}.`,{deviceId:e.id,action:r,setting:i.settingName,attempts:t(s)})}const z=`com.apple.BiometricKit.enrollmentChanged`;function Ut(e){if(e===`enroll`)return`1`;if(e===`unenroll`)return`0`}async function Wt(e){let t=E(e,[`spawn`,e.id,`notifyutil`,`-g`,z]),n=await Ge(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 Gt(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 Kt(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 Jt={ensureBooted:k,prepareStatusBarForScreenshot:bt,resolveCaptureDisplay:st,captureWithRetry:Zt,normalizeDensity:sn,captureWithRunner:U,shouldFallbackToRunner:an},V=new Map,H=new Map;async function Yt(e,t,n={}){if(l(e)){await U(e,t,n.appBundleId,n.fullscreen,n.runnerOptions);return}if(e.kind===`simulator`){await Xt(e,t,n);return}await S(e).captureScreenshot(e,t,{appBundleId:n.appBundleId,fullscreen:n.fullscreen,runnerOptions:n.runnerOptions,runRunnerCommand:D})}async function Xt(e,t,r={}){if(e.kind!==`simulator`)throw new n(`UNSUPPORTED_OPERATION`,`Simulator screenshot fallback flow supports only iOS simulators`);let i={...Jt,...r.deps??{}};r.skipIosSimulatorBootCheck||await i.ensureBooted(e);let a=await i.resolveCaptureDisplay(e),o=async()=>{await i.captureWithRetry(e,t,a),await i.normalizeDensity(e,t,r.pixelDensity,a?.pointScale)},s=async()=>{};if(r.normalizeStatusBar===!0)try{s=await i.prepareStatusBarForScreenshot(e)}catch(t){nn(e,`prepare_failed`,t)}try{try{await o();return}catch(t){let n=t;if(r.skipIosSimulatorBootCheck&&on(t)){await i.ensureBooted(e);try{await o();return}catch(e){n=e}}if(!i.shouldFallbackToRunner(n))throw n;tn(e,`simctl_screenshot`,n)}let n=await i.captureWithRunner(e,t,r.appBundleId,r.fullscreen,r.runnerOptions);await i.normalizeDensity(e,t,r.pixelDensity,n?.pixelsPerPoint)}finally{await s().catch(t=>nn(e,`restore_failed`,t))}}async function Zt(e,t,n){let r=Se.fromTimeoutMs(Ue),i=[`io`,e.id,`screenshot`,...ct(n),t];await xe(async({deadline:t})=>{await T(e,i,{timeoutMs:Math.max(1e3,t?.remainingMs()??2e4)})},{maxAttempts:5,baseDelayMs:Ve,maxDelayMs:He,jitter:.2,shouldRetry:e=>an(e)},{deadline:r,phase:`ios_simulator_screenshot`})}async function U(e,t,r,i,a){if(e.kind===`device`&&!l(e)){await S(e).captureScreenshot(e,t,{appBundleId:r,fullscreen:i,runnerOptions:a,preferRunner:!0,runRunnerCommand:D});return}let o=await D(e,{command:`screenshot`,appBundleId:r,fullscreen:i,inlineScreenshot:!1},a),s=o.message;if(!s)throw new n(`COMMAND_FAILED`,`Failed to capture iOS screenshot: runner returned no file path`);let c=Kt(o);if(l(e))return await Be(s,t),c;if(e.kind===`simulator`)return await Qt(e,s,t),c;throw new n(`COMMAND_FAILED`,`Unsupported Apple screenshot target`)}async function Qt(e,t,r){let i=Se.fromTimeoutMs(b),a=`Unable to locate runner container for simulator screenshot`,o=H.get(e.id);if(o){let n=await $t(o,t,r);if(n.copied)return;a=n.error,H.delete(e.id)}for(let n of Xe){let o=await T(e,[`get_app_container`,e.id,n,`data`],{allowFailure:!0,timeoutMs:en(i,b,`runner screenshot container lookup`)});if(o.exitCode!==0){let e=o.stderr.trim();e&&(a=e);continue}let s=o.stdout.trim();if(!s){a=`simctl get_app_container returned empty output`;continue}let c=await $t(s,t,r);if(c.copied){H.set(e.id,s);return}a=c.error}throw new n(`COMMAND_FAILED`,`Failed to capture iOS screenshot: ${a}`)}async function $t(e,t,n){let r=`Runner screenshot was not found in the simulator container`;for(let i of rn(e,t))try{return await Be(i,n),{copied:!0}}catch(e){r=e instanceof Error?e.message:String(e)}return{copied:!1,error:r}}function en(e,t,r){let i=e.remainingMs();if(i>0)return i;throw new n(`COMMAND_FAILED`,`iOS ${r} timed out after ${t}ms`,{timeoutMs:t,step:r})}function tn(e,t,n){let r=x(n);g({level:`warn`,phase:`ios_screenshot_fallback`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,from:t,to:`runner`,...r}})}function nn(e,t,n){g({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...x(n)}})}function rn(e,t){let n=A.resolve(e),r=t.trim();if(!r)return[];let i=[],a=new Set,o=e=>{let t=A.normalize(e);a.has(t)||(a.add(t),i.push(t))},s=r.replace(/^\/+/,``),c=s.replaceAll(`\\`,`/`);if(s&&o(A.join(n,s)),A.isAbsolute(r)&&o(A.normalize(r)),c.startsWith(`tmp/`))o(A.join(n,c));else{let e=c.lastIndexOf(`/tmp/`);if(e>=0){let t=c.slice(e+1);o(A.join(n,t))}}let l=A.basename(r);return l&&o(A.join(n,`tmp`,l)),i}function an(e){if(!(e instanceof n)||e.code!==`COMMAND_FAILED`)return!1;let t=Ke(e);return t.includes(`timeout waiting for screen surfaces`)||t.includes(`nsposixerrordomain`)&&t.includes(`code=60`)&&t.includes(`screenshot`)||t.includes(`timed out`)&&t.includes(`screenshot`)}function on(e){if(!(e instanceof n)||e.code!==`COMMAND_FAILED`)return!1;let t=Ke(e);return t.includes(`not booted`)||t.includes(`current state: shutdown`)||t.includes(`current state is shutdown`)||t.includes(`current state=shutdown`)||t.includes(`state: shutdown`)||t.includes(`state=shutdown`)}async function sn(e,t,n,r){let i=r??await cn(e),a=Fe(await Pe(t),i,n);a&&await De(t,a.width,a.height)}async function cn(e){let t=V.get(e.id);if(t!==void 0)return t;let r=await T(e,[`getenv`,e.id,`SIMULATOR_MAINSCREEN_SCALE`],{timeoutMs:We}),i=Number(r.stdout.trim());if(!Number.isFinite(i)||i<=0)throw new n(`COMMAND_FAILED`,`Failed to read iOS simulator screenshot scale from SIMULATOR_MAINSCREEN_SCALE`);return V.set(e.id,i),i}function ln(e){return!(e instanceof n)||e.details?.runnerErrorCode!==`SCROLL_KEYBOARD_OCCLUDES_SURFACE`?e:new n(e.code,e.message,{...e.details,...re})}function un(e){let t=e?.amount!==void 0||e?.pixels!==void 0;return{...e,...t?{}:{amount:ge},durationMs:e?.durationMs??400,releaseBehavior:e?.releaseBehavior??`controlled`}}function dn(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 fn(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}=mn(e),o=W(e.referenceWidth),s=W(e.referenceHeight),c=pn(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 pn(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 mn(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 hn(e,t,n,r,i,a){return dn(await e(t,{command:`desktopScroll`,direction:i,...fn(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 gn(e){return e===`system`?`backSystem`:`backInApp`}function _n(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 D(e,J(e,t,r,i),n),pressPoint:async(r,i)=>await vn(e,t,n,r,i),tapElementSelector:async r=>await D(e,{command:`tap`,selectorKey:r.key,selectorValue:r.value,allowNonHittableCoordinateFallback:r.allowNonHittableCoordinateFallback,...r.expectedPoint?{x:r.expectedPoint.x,y:r.expectedPoint.y}:{},...s(e)?{synthesized:!0}:{},appBundleId:t.appBundleId},n),doubleTap:async(r,i)=>{let a=await D(e,C([{kind:`doubleTap`,x:r,y:i}],t.appBundleId),n);return w(a),a},appState:async()=>Cn(await D(e,{command:`appState`,appBundleId:t.appBundleId},n)),longPress:async(r,i,a)=>await D(e,{command:`longPress`,x:r,y:i,durationMs:a,appBundleId:t.appBundleId},n),focus:async(r,i)=>await D(e,J(e,t,r,i),n),type:async(r,i)=>Sn(await D(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 D(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 On(D,e,t,n,r,i),performGesture:async r=>await En(e,t,n,r),gestureViewport:async()=>Tn(await D(e,{command:`gestureViewport`,appBundleId:t.appBundleId},n))}}}async function vn(e,t,n,r,i){let a=l(e)?d(i.surface):void 0;return a?await yn(t,r,i,a):i.button===`primary`?i.count===1?await xn(e,t,n,r,i):await qe(e,r,i,t.appBundleId,async t=>await D(e,t,n)):await bn(e,t,n,r,i.button)}async function yn(e,t,r,i){if(r.button!==`primary`)throw new n(`UNSUPPORTED_OPERATION`,`${r.button} click is not supported on macOS ${i} sessions.`);let{runMacOsPressAction:a}=await import(`./helper.js`).then(e=>e.t),o=await a(t.x,t.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 bn(e,t,n,r,i){return await D(e,{command:`mouseClick`,x:r.x,y:r.y,button:i,appBundleId:t.appBundleId},n)}async function xn(e,t,n,r,i){if(i.doubleTap){let i=await D(e,C([{kind:`doubleTap`,x:r.x,y:r.y}],t.appBundleId),n);return w(i),i}return i.holdMs>0?await D(e,{command:`longPress`,x:r.x,y:r.y,durationMs:i.holdMs,appBundleId:t.appBundleId},n):await D(e,J(e,t,r.x,r.y),n)}function Sn(e){let t=e.textEntryRoute;return wn(t)?{textEntryRoute:t}:{}}function Cn(t){let n=t.applicationState;return e(n)?{applicationState:n}:{}}function wn(e){return typeof e==`string`&&Ie.includes(e)}function Tn(e){let t=q(e.x),r=q(e.y),i=q(e.x2),a=q(e.y2);if(t===void 0||r===void 0||i===void 0||a===void 0||i<=0||a<=0)throw new n(`COMMAND_FAILED`,`Apple runner returned an invalid gesture viewport`);return{x:t,y:r,width:i,height:a}}function q(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}async function En(e,t,n,r){if(r.topology===`two`&&lt(e,r.intent),r.topology===`single`&&l(e)){let{start:i,end:a}=Ce(r);return await D(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`&&u(e)){let{start:i,end:a}=Ce(r);return await D(e,{command:`swipe`,direction:Dn(i,a),appBundleId:t.appBundleId},n)}return await D(e,{command:`gesture`,gesturePlan:r,appBundleId:t.appBundleId},n)}function Dn(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,...s(e)?{synthesized:!0}:{},appBundleId:t.appBundleId}}async function On(e,t,n,r,i,a){if(me(a?.durationMs,{invalidMessage:`scroll durationMs must be a non-negative integer at most ${he}`}),u(t))return G(await e(t,K(i,n.appBundleId,a?.durationMs),r),{amount:a?.amount,durationMs:a?.durationMs});if(ie(a??{}),l(t))return await hn(e,t,n,r,i,a);let o=un(a),s;try{s=await e(t,{command:`scroll`,direction:i,...fn(o),appBundleId:n.appBundleId},r)}catch(e){throw ln(e)}return dn(s,i,o)}function Y(e,t,n){if(l(e)){let e=n?.surface===`frontmost-app`?{surface:n.surface}:{bundleId:n?.appBundleId,surface:n?.surface};return async t=>await tt(t,e)}return async(r,i)=>await D(e,{command:`alert`,action:r,appBundleId:n?.appBundleId,timeoutMs:i},t)}async function kn(e,t,n){return await Y(e,t,n)(`get`,ae)}async function An(e,t,r){let i=Y(e,t,r),a=r?.timeoutMs??1e4,o=Date.now(),s=!0;for(;Date.now()-o<a;){try{let e=s?a:Mn(o,a);return s=!1,await i(`get`,e)}catch(e){if(!X(e))throw e}await ye(300)}throw new n(`COMMAND_FAILED`,`alert wait timed out`)}async function jn(e,t,n,r){let i=Y(e,t,r),a=ee(e)?ae:f,o=Date.now(),s,c=!0;for(;Date.now()-o<f;){try{let e=c?a:Mn(o,f);return c=!1,await i(n,e)}catch(e){if(s=e,!X(e))break}await ye(300)}throw Nn(s)}function Mn(e,t){return Math.max(1,t-(Date.now()-e))}function Nn(e){return!(e instanceof n)||!X(e)?e:new n(e.code,e.message,{...e.details??{},hint:`If the permission sheet is visible in snapshot or screenshot but alert reports no alert, take a scoped snapshot around the visible button label and use press @ref.`})}function X(e){if(!(e instanceof n))return!1;let t=e.details??{};return t.runnerErrorCode===`ALERT_NOT_FOUND`||t.reason===`alert-not-found`}const Pn={0:`unknown`,1:`notRunning`,2:`runningBackgroundSuspended`,3:`runningBackground`};function Fn(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return;let n={...e},i=n.reason;if(!r(i))return;let a=n.priorState;if(typeof a!=`number`||!Number.isInteger(a))return;let o=Pn[a];o===void 0&&t?.({reason:i,rawPriorState:a});let s=n.otherActiveApplicationPid;return{reason:i,priorState:o??`unknown`,...typeof s==`number`&&Number.isInteger(s)&&s>0?{otherActiveApplicationPid:s}:{}}}function In(e){let t=Ln(e.systemSurface),n=a(e.keyboard),r=Fn(e.targetActivation,e=>Ye({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:Oe(e.snapshotQuality),qualityPayload:Vn(e.qualityPayload,t),runnerFatal:e.runnerFatal===!0,...n?{keyboard:n}:{},...t?{systemSurface:t}:{},...r?{targetActivation:r}:{},message:typeof e.message==`string`&&e.message.trim().length>0?e.message:void 0}}function Ln(e){if(!Wn(e)||typeof e.bundleId!=`string`)return;let t=Me(e.bundleId);return t&&{bundleId:t.bundleId,kind:t.kind}}function Rn(e,t,n){let r=n.nodes??[];if(n.runnerFatal===!0||r.length===0&&n.qualityPayload===void 0)return r;let i=Ee({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions}),a=Hn(r,n.qualityPayload?.nodes),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(i),viewport:a,hittability:{kind:`available`},lineage:{targetId:e},residue:[]}};try{return Le(o,i).nodes}catch(e){zn(e,n)}}function zn(e,t){let r=t.quality;if(e instanceof y&&Ae(r))throw new n(`COMMAND_FAILED`,e.message,{...v(e),...t.systemSurface?{systemSurface:t.systemSurface}:{},snapshotQuality:{state:r.state,backend:r.backend,...r.reason?{reason:r.reason}:{},...r.reasonCode?{reasonCode:r.reasonCode}:{}},hint:Bn(t.systemSurface,r)},e);Z(e,t.systemSurface)}function Bn(e,t){return[e?`${e.bundleId} hosts the surface presented over the app, and this capture targeted that surface.`:void 0,...ke(t,[])].filter(e=>e!==void 0).join(` `)}function Vn(e,t){if(e!==void 0)return(!Wn(e)||!Array.isArray(e.nodes)||typeof e.truncated!=`boolean`)&&Z(new y(`invalid-quality-payload`,`iOS runner returned an invalid quality payload`),t),e.scope!==void 0&&e.scope!==null&&Z(new y(`invalid-quality-payload`,`iOS runner quality payload must be unscoped`,{field:`scope`}),t),{nodes:e.nodes,truncated:e.truncated,scope:null}}function Hn(e,t){return Ne(Un(t),{fallbackToLargestRoot:!0})??Ne(Un(e),{fallbackToLargestRoot:!0})??{kind:`missing`,reason:`not-provided`}}function Un(e){return e?.filter(e=>e.parentIndex===void 0)??[]}function Wn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Z(e,t){throw e instanceof y?new n(`COMMAND_FAILED`,e.message,{...v(e),...t?{systemSurface:t}:{}},e):e}function Gn(e,t,r){if(e.appleOs===`watchos`)throw new n(`UNSUPPORTED_PLATFORM`,`watchOS is not supported: XCUITest cannot drive watchOS UI, so this device has no runner backend.`);let{overrides:i,runnerOpts:a}=_n(e,t),o={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)=>nr(e,t,n,a),snapshot:async t=>await Kn(e,t,a),readTextAtPoint:async(t,n)=>{let r=l(e)?d(n?.surface):void 0;return r?await rr(t,r,n?.appBundleId):await ir(e,t,n,a)},findText:async(t,n)=>({found:(await D(e,{command:`findText`,text:t,appBundleId:n?.appBundleId},n?.signal?{...a,signal:n.signal}:a))?.found===!0}),back:async n=>{if(u(e)){await D(e,K(`menu`,t.appBundleId),a);return}await D(e,{command:gn(n),appBundleId:t.appBundleId},a)},home:async()=>{if(u(e)){await D(e,K(`home`,t.appBundleId),a);return}await D(e,{command:`home`,appBundleId:t.appBundleId},a)},setOrientation:async r=>{let i=er(await D(e,{command:`rotate`,orientation:r,appBundleId:t.appBundleId},a));if(i!==r)throw new n(`COMMAND_FAILED`,`iOS runner observed ${i} after requesting ${r}`,{requestedOrientation:r,observedOrientation:i});return{orientation:i}},appSwitcher:async()=>{await D(e,{command:`appSwitcher`,appBundleId:t.appBundleId},a)},actionButton:async()=>{await D(e,{command:`actionButton`,appBundleId:t.appBundleId},a)},tvRemote:async(n,r)=>{await D(e,K(be(n),t.appBundleId,r),a)},keyboardDismiss:async()=>{let n=await D(e,{command:`keyboardDismiss`,appBundleId:t.appBundleId},a);return{kind:`mechanism`,wasVisible:Q(n,`wasVisible`),dismissed:Q(n,`dismissed`),visible:Q(n,`visible`),mechanism:$n(n,`keyboardDismissMechanism`)}},keyboardEnter:async()=>{let n=await D(e,{command:`keyboardReturn`,appBundleId:t.appBundleId},a);return{kind:`visibility-echo`,visible:Q(n,`visible`),wasVisible:Q(n,`wasVisible`)}},readClipboard:()=>ft(e),writeClipboard:t=>pt(e,t,a),setSetting:(t,n,r,i)=>Dt(e,t,n,r,i),readSetting:t=>kt(e,t),readAlert:t=>kn(e,a,t),awaitAlert:t=>An(e,a,t),acceptAlert:t=>jn(e,a,`accept`,t),dismissAlert:t=>jn(e,a,`dismiss`,t),...i};return r?tr(e,t,o,r):o}async function Kn(e,t,n){let r=l(e)?d(t?.surface):void 0;return r?await ut({...t,surface:r},t?.signal):await qn(e,t,n)}async function qn(e,t,n){let r=In(await ve(`snapshot_capture`,async()=>await D(e,{command:`snapshot`,appBundleId:t?.appBundleId,interactiveOnly:t?.interactiveOnly,preferredBackend:t?.preferredBackend,customActions:t?.customActions,depth:t?.depth,scope:t?.scope,raw:t?.raw},Qn(n,t?.signal)),{backend:`xctest`}));Jn(e,t,r);let i=Yn(r);return{nodes:Xn(e,t,r),truncated:r.truncated??!1,backend:`xctest`,producer:`apple-runner`,...r.quality?{quality:r.quality}:{},...r.systemSurface?{systemSurface:r.systemSurface}:{},...r.keyboard?{keyboard:r.keyboard}:{},...r.targetActivation?{targetActivation:r.targetActivation}:{},...i.length>0?{warnings:i}:{}}}function Jn(e,t,r){if(!((r.nodes?.length??0)>0)&&!Zn(t,r.quality)&&e.kind===`simulator`)throw new n(`COMMAND_FAILED`,`XCTest snapshot returned 0 nodes on iOS simulator.`)}function Yn(e){let t=[];return!e.quality&&e.message&&t.push(e.message),e.systemSurface&&t.push(je(e.systemSurface.bundleId)),e.targetActivation&&t.push(dt(e.targetActivation)),t}function Xn(e,t,n){return l(e)?n.nodes??[]:Rn(e.id,t,n)}function Zn(e,t){return te(e?.scope)!==null&&t!==void 0&&t.state!==`sparse`}function Qn(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 $n(e,t){let n=e[t];return typeof n==`string`?n:void 0}function er(e){let t=e.orientation;if(typeof t==`string`&&_e.includes(t))return t;throw new n(`COMMAND_FAILED`,`iOS runner returned an invalid orientation result`,{orientation:t})}function tr(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=>Je(r,{deviceId:e.id,requestId:t.requestId},n))}function $(e){throw new n(`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 nr(e,t,r={},a){let o=l(e)?d(r.surface):void 0;if(o){if(r.fullscreen)throw new n(`INVALID_ARGS`,`screenshot --fullscreen is not accepted on the macOS ${o} surface: it always captures the main display`,{reason:i.macOsHelperSurfaceFixedFrame,surface:o});await nt(t,{surface:o});return}if(r.captureBackend===`runner`){await U(e,t,r.appBundleId,r.fullscreen,a);return}await Yt(e,t,{appBundleId:r.appBundleId,pixelDensity:r.pixelDensity,fullscreen:r.fullscreen,runnerOptions:a,normalizeStatusBar:r.normalizeStatusBar,skipIosSimulatorBootCheck:r.skipIosSimulatorBootCheck})}async function rr(e,t,n){let{runMacOsReadTextAction:r}=await import(`./helper.js`).then(e=>e.t);return(await r(e.x,e.y,{bundleId:n,surface:t})).text}async function ir(e,t,n,r){let i=await D(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{Gn as createAppleInteractor};
@@ -1 +1 @@
1
- import{A as e}from"./sdk-contracts.js";import{i as t}from"./sdk-batch-runner.js";import{a 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{N as e}from"./sdk-contracts.js";import{i as t}from"./sdk-batch-runner.js";import{a 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 +1 @@
1
- import{r as e}from"./rolldown-runtime.js";import{A as t}from"./sdk-contracts.js";import{b as n}from"./sdk-device.js";import{n as r,t as i}from"./register-builtins.js";import{AsyncLocalStorage as a}from"node:async_hooks";let o=[];const s=new a;async function c(e,t){return await s.run([...e],t)}function l(e,t){for(let n of d()){if(!n.ownsDevice(e))continue;let r=n.getInteractor(e,t);if(r)return r}}function u(e){return d().some(t=>t.ownsDevice(e))}function d(){return s.getStore()??o}function f(e,t={}){C(e);let n=e.map(e=>e.provider);return{providerRuntimes:Object.freeze([...e]),providerRuntimeIds:n,providerRuntimeRequiredIds:v([...n,...t.providerRuntimeRequiredIds??[]]),leaseLifecycleProvider:y(e),recoverableProviderIds:e.filter(e=>e.recoverExpiredLease!==void 0).map(e=>e.provider),recoverExpiredLease:_(e),cloudArtifactProvider:b(e),providerAppCatalog:x(e),deviceInventorySource:S(e),appleRunnerProvider:m(e),appleRunnerScreenRecordingTransport:p(e),providerDeviceRuntimeScope:async t=>await c(e,t)}}function p(e){if(e.some(g))return t=>{for(let n of e){if(!g(n)||!n.ownsDevice(t.device))continue;let e=n.getAppleRunnerScreenRecordingTransport(t.device);if(e)return e}}}function m(e){if(e.some(h))return t=>{for(let n of e){if(!h(n)||!n.ownsDevice(t.device))continue;let e=n.getAppleRunnerProvider(t.device);if(e)return e}}}function h(e){return`getAppleRunnerProvider`in e&&typeof e.getAppleRunnerProvider==`function`}function g(e){return`getAppleRunnerScreenRecordingTransport`in e&&typeof e.getAppleRunnerScreenRecordingTransport==`function`}function _(e){if(e.some(e=>e.recoverExpiredLease!==void 0))return async n=>{let r=e.find(e=>E(e,n.leaseProvider));if(!r?.recoverExpiredLease)throw new t(`UNSUPPORTED_OPERATION`,`Provider ${n.leaseProvider??`unknown`} cannot recover an expired lease.`,{provider:n.leaseProvider,leaseId:n.leaseId});await r.recoverExpiredLease(n)}}function v(e){return[...new Set(e)]}function y(e){if(e.length!==0)return{allocate:async(t,n)=>await T(e,`allocate`,t,n),heartbeat:async(t,n)=>await T(e,`heartbeat`,t,n),release:async(t,n)=>await T(e,`release`,t,n)}}function b(e){if(e.length!==0)return{listCloudArtifacts:async t=>await w(e,t)}}function x(e){let n=e.filter(e=>e.appCatalog!==void 0);if(n.length!==0)return{supports:e=>n.some(t=>E(t,e)),list:async(e,r)=>{let i=n.find(t=>E(t,e.provider));if(!i?.appCatalog)throw new t(`UNSUPPORTED_OPERATION`,`Provider ${e.provider} does not expose an app catalog.`,{provider:e.provider});return await i.appCatalog(e,r)}}}function S(e){if(e.length!==0)return{discover:async(t,n)=>{n.throwIfAborted();for(let r of e){if(!E(r,t.leaseProvider))continue;let e=await r.deviceInventoryProvider(t,n);if(n.throwIfAborted(),e!=null)return{kind:`inventory`,devices:e}}return{kind:`declined`}}}}function C(e){let t=new Set;for(let n of e){if(t.has(n.provider))throw TypeError(`Duplicate provider device runtime: ${n.provider}`);t.add(n.provider)}}async function w(e,t){for(let n of e){if(!E(n,t.provider))continue;let e=await n.cloudArtifacts?.listCloudArtifacts?.(t);if(e)return e}}async function T(e,t,n,r){for(let i of e){if(!E(i,n.leaseProvider))continue;let e=i.leaseLifecycle[t],a=e?await e(n,r):void 0;if(a)return a}}function E(e,t){return e.provider===t}var D=e({getInteractor:()=>O,getLocalInteractor:()=>k});i();async function O(e,r){if(u(e)){let i=l(e,r);if(i)return i;throw new t(`UNSUPPORTED_OPERATION`,`Provider device runtime does not have an active interactor for this device.`,{deviceId:e.id,platform:n(e)})}return await k(e,r)}async function k(e,t){return await r(e.platform).createInteractor(e,t)}export{u as i,D as n,f as r,O as t};
1
+ import{r as e}from"./rolldown-runtime.js";import{N as t}from"./sdk-contracts.js";import{C as n}from"./sdk-device.js";import{n as r,t as i}from"./register-builtins.js";import{AsyncLocalStorage as a}from"node:async_hooks";let o=[];const s=new a;async function c(e,t){return await s.run([...e],t)}function l(e,t){for(let n of d()){if(!n.ownsDevice(e))continue;let r=n.getInteractor(e,t);if(r)return r}}function u(e){return d().some(t=>t.ownsDevice(e))}function d(){return s.getStore()??o}function f(e,t={}){C(e);let n=e.map(e=>e.provider);return{providerRuntimes:Object.freeze([...e]),providerRuntimeIds:n,providerRuntimeRequiredIds:v([...n,...t.providerRuntimeRequiredIds??[]]),leaseLifecycleProvider:y(e),recoverableProviderIds:e.filter(e=>e.recoverExpiredLease!==void 0).map(e=>e.provider),recoverExpiredLease:_(e),cloudArtifactProvider:b(e),providerAppCatalog:x(e),deviceInventorySource:S(e),appleRunnerProvider:m(e),appleRunnerScreenRecordingTransport:p(e),providerDeviceRuntimeScope:async t=>await c(e,t)}}function p(e){if(e.some(g))return t=>{for(let n of e){if(!g(n)||!n.ownsDevice(t.device))continue;let e=n.getAppleRunnerScreenRecordingTransport(t.device);if(e)return e}}}function m(e){if(e.some(h))return t=>{for(let n of e){if(!h(n)||!n.ownsDevice(t.device))continue;let e=n.getAppleRunnerProvider(t.device);if(e)return e}}}function h(e){return`getAppleRunnerProvider`in e&&typeof e.getAppleRunnerProvider==`function`}function g(e){return`getAppleRunnerScreenRecordingTransport`in e&&typeof e.getAppleRunnerScreenRecordingTransport==`function`}function _(e){if(e.some(e=>e.recoverExpiredLease!==void 0))return async n=>{let r=e.find(e=>E(e,n.leaseProvider));if(!r?.recoverExpiredLease)throw new t(`UNSUPPORTED_OPERATION`,`Provider ${n.leaseProvider??`unknown`} cannot recover an expired lease.`,{provider:n.leaseProvider,leaseId:n.leaseId});await r.recoverExpiredLease(n)}}function v(e){return[...new Set(e)]}function y(e){if(e.length!==0)return{allocate:async(t,n)=>await T(e,`allocate`,t,n),heartbeat:async(t,n)=>await T(e,`heartbeat`,t,n),release:async(t,n)=>await T(e,`release`,t,n)}}function b(e){if(e.length!==0)return{listCloudArtifacts:async t=>await w(e,t)}}function x(e){let n=e.filter(e=>e.appCatalog!==void 0);if(n.length!==0)return{supports:e=>n.some(t=>E(t,e)),list:async(e,r)=>{let i=n.find(t=>E(t,e.provider));if(!i?.appCatalog)throw new t(`UNSUPPORTED_OPERATION`,`Provider ${e.provider} does not expose an app catalog.`,{provider:e.provider});return await i.appCatalog(e,r)}}}function S(e){if(e.length!==0)return{discover:async(t,n)=>{n.throwIfAborted();for(let r of e){if(!E(r,t.leaseProvider))continue;let e=await r.deviceInventoryProvider(t,n);if(n.throwIfAborted(),e!=null)return{kind:`inventory`,devices:e}}return{kind:`declined`}}}}function C(e){let t=new Set;for(let n of e){if(t.has(n.provider))throw TypeError(`Duplicate provider device runtime: ${n.provider}`);t.add(n.provider)}}async function w(e,t){for(let n of e){if(!E(n,t.provider))continue;let e=await n.cloudArtifacts?.listCloudArtifacts?.(t);if(e)return e}}async function T(e,t,n,r){for(let i of e){if(!E(i,n.leaseProvider))continue;let e=i.leaseLifecycle[t],a=e?await e(n,r):void 0;if(a)return a}}function E(e,t){return e.provider===t}var D=e({getInteractor:()=>O,getLocalInteractor:()=>k});i();async function O(e,r){if(u(e)){let i=l(e,r);if(i)return i;throw new t(`UNSUPPORTED_OPERATION`,`Provider device runtime does not have an active interactor for this device.`,{deviceId:e.id,platform:n(e)})}return await k(e,r)}async function k(e,t){return await r(e.platform).createInteractor(e,t)}export{u as i,D as n,f as r,O as t};
@@ -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.15`,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.17`,stdout:e=>{process.stdout.write(e)},stderr:e=>{process.stderr.write(e)}}).catch(()=>process.exit(1));export{};