agent-device 0.21.24 → 0.21.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (379) hide show
  1. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.25.apk +0 -0
  2. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.25.apk.sha256 +1 -0
  3. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.24.manifest.json → agent-device-android-ime-helper-0.21.25.manifest.json} +4 -4
  4. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.apk +0 -0
  5. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.apk.sha256 +1 -0
  6. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.manifest.json +16 -0
  7. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +159 -4
  8. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerHttpRequestFraming.swift +139 -0
  9. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerListenerPeer.swift +41 -0
  10. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerListenerToken.swift +25 -0
  11. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Environment.swift +18 -11
  12. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +25 -1
  13. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +0 -3
  14. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +1 -3
  15. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryConfirmation.swift +59 -26
  16. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +47 -103
  17. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +142 -54
  18. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TypeExecution.swift +4 -1
  19. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +21 -19
  20. package/dist/src/absence-observation-errors.js +1 -0
  21. package/dist/src/adapter.js +1 -1
  22. package/dist/src/adb-executor.js +2 -2
  23. package/dist/src/adb-failure.js +2 -2
  24. package/dist/src/agent-browser-lifecycle.js +1 -1
  25. package/dist/src/agent-browser-process-record.js +1 -1
  26. package/dist/src/agent-browser-provider.js +1 -1
  27. package/dist/src/agent-browser-tool.js +1 -1
  28. package/dist/src/agent-device-client.js +2 -2
  29. package/dist/src/android-adb.js +1 -1
  30. package/dist/src/android-input-ownership.js +1 -1
  31. package/dist/src/android-system-surface-disclosure.js +1 -0
  32. package/dist/src/android-text-entry.js +1 -0
  33. package/dist/src/android.js +1 -1
  34. package/dist/src/app-backend.js +1 -1
  35. package/dist/src/app-helpers.js +1 -1
  36. package/dist/src/app-launch.js +1 -1
  37. package/dist/src/app-lifecycle.js +4 -3
  38. package/dist/src/app-lifecycle2.js +2 -2
  39. package/dist/src/app-log-files.js +1 -1
  40. package/dist/src/app-log-reconnect.js +1 -1
  41. package/dist/src/app-log-runtime2.js +3 -3
  42. package/dist/src/app-resolution-facade.js +1 -1
  43. package/dist/src/app-resolution.js +2 -2
  44. package/dist/src/apple-runner-platform.js +1 -1
  45. package/dist/src/artifact-download.js +1 -1
  46. package/dist/src/auth.js +1 -1
  47. package/dist/src/aws-device-farm-connection.js +1 -1
  48. package/dist/src/back-mode.js +1 -1
  49. package/dist/src/boot-diagnostics.js +1 -1
  50. package/dist/src/browserstack-connection.js +1 -1
  51. package/dist/src/capture-disclosure.js +1 -0
  52. package/dist/src/cli-config.js +1 -1
  53. package/dist/src/cli-help.js +17 -14
  54. package/dist/src/cli-output.js +1 -1
  55. package/dist/src/cli-runner.js +3 -1
  56. package/dist/src/cli.js +3 -3
  57. package/dist/src/client-companion-tunnel.js +1 -1
  58. package/dist/src/client-metro.js +1 -1
  59. package/dist/src/client-types.d.ts +8 -2
  60. package/dist/src/code-signature-cache.js +1 -1
  61. package/dist/src/code-signature.js +1 -1
  62. package/dist/src/command-metadata.js +73 -1
  63. package/dist/src/command-policy.js +1 -0
  64. package/dist/src/command-schema.js +3 -3
  65. package/dist/src/command-surface.js +1 -1
  66. package/dist/src/command-tools.js +2 -2
  67. package/dist/src/connection-runtime.js +1 -1
  68. package/dist/src/connection-verification.js +1 -1
  69. package/dist/src/connection.js +3 -3
  70. package/dist/src/contracts.js +1 -1
  71. package/dist/src/daemon-client-lease-beat.js +1 -1
  72. package/dist/src/daemon-client-lifecycle.js +1 -1
  73. package/dist/src/daemon-client-liveness-probe.js +1 -1
  74. package/dist/src/daemon-policy-file.js +1 -1
  75. package/dist/src/daemon-registration-owner.js +1 -1
  76. package/dist/src/daemon-registration.js +1 -1
  77. package/dist/src/daemon-resolution.js +3 -1
  78. package/dist/src/debug-symbols-facade.js +1 -1
  79. package/dist/src/device-claim-inspection.js +1 -1
  80. package/dist/src/device-input-state.d.ts +5 -3
  81. package/dist/src/device-inventory-context.js +1 -1
  82. package/dist/src/device-readiness-runtime.js +1 -1
  83. package/dist/src/device-release.js +1 -1
  84. package/dist/src/device-shell.js +1 -1
  85. package/dist/src/device.js +3 -1
  86. package/dist/src/devicectl.js +1 -1
  87. package/dist/src/diagnostics.js +1 -1
  88. package/dist/src/doctor-facade.js +1 -1
  89. package/dist/src/durable-capture-resource.js +1 -1
  90. package/dist/src/durable-resource.js +1 -1
  91. package/dist/src/engine-eval-script.js +1 -1
  92. package/dist/src/error.js +1 -1
  93. package/dist/src/exec.js +1 -1
  94. package/dist/src/expo-dev-client-launch.js +1 -0
  95. package/dist/src/file.js +3 -1
  96. package/dist/src/find.js +1 -1
  97. package/dist/src/finders.js +1 -1
  98. package/dist/src/generic-settle.js +1 -1
  99. package/dist/src/generic.js +1 -1
  100. package/dist/src/gesture-plan.js +1 -1
  101. package/dist/src/gesture-runtime.js +1 -1
  102. package/dist/src/harmonyos.js +1 -1
  103. package/dist/src/hdc.js +1 -1
  104. package/dist/src/helper.js +2 -2
  105. package/dist/src/human-control.js +1 -1
  106. package/dist/src/ime-rebind.js +1 -1
  107. package/dist/src/ime-state.js +1 -1
  108. package/dist/src/index.d.ts +1 -1
  109. package/dist/src/index.js +1 -1
  110. package/dist/src/input-actions.js +1 -1
  111. package/dist/src/input-actions2.js +2 -2
  112. package/dist/src/install-source-network-transport.js +1 -1
  113. package/dist/src/install-source2.js +1 -1
  114. package/dist/src/interaction-error.js +1 -0
  115. package/dist/src/interaction-positionals.js +1 -1
  116. package/dist/src/interaction.js +1 -1
  117. package/dist/src/interaction2.js +1 -1
  118. package/dist/src/interactor-operation-catalog.js +1 -1
  119. package/dist/src/interactor.js +5 -5
  120. package/dist/src/interactor2.js +1 -1
  121. package/dist/src/internal/bin.js +1 -1
  122. package/dist/src/internal/daemon.js +5 -1
  123. package/dist/src/internal/png-worker.js +1 -1
  124. package/dist/src/inventory.js +2 -2
  125. package/dist/src/inventory6.js +1 -1
  126. package/dist/src/io.d.ts +2 -2
  127. package/dist/src/ios-client.js +1 -1
  128. package/dist/src/ios-settings.js +1 -1
  129. package/dist/src/ios-snapshot-acquisition.js +1 -1
  130. package/dist/src/ios-snapshot-adapter.js +1 -1
  131. package/dist/src/ios-snapshot-engine.js +1 -1
  132. package/dist/src/ios-snapshot-runtime.js +1 -1
  133. package/dist/src/keyed-lock.js +1 -1
  134. package/dist/src/launch-confirmation.js +1 -1
  135. package/dist/src/lease.js +1 -1
  136. package/dist/src/limrun-runtime-dependencies.js +1 -1
  137. package/dist/src/limrun.d.ts +2 -10
  138. package/dist/src/limrun.js +1 -1
  139. package/dist/src/linux.js +1 -1
  140. package/dist/src/load.js +1 -1
  141. package/dist/src/local-interactor-operation-set.js +1 -1
  142. package/dist/src/log-stream.js +9 -9
  143. package/dist/src/mechanics.js +16 -16
  144. package/dist/src/metro.js +1 -1
  145. package/dist/src/metro2.js +1 -1
  146. package/dist/src/mobile-snapshot-semantics.js +1 -1
  147. package/dist/src/observability.js +1 -1
  148. package/dist/src/open-target-resolution.js +1 -1
  149. package/dist/src/output-path.js +1 -1
  150. package/dist/src/overlay.js +1 -3
  151. package/dist/src/perf-facade.js +1 -1
  152. package/dist/src/perf-runtime-operation-builder.js +1 -1
  153. package/dist/src/perf-runtime.js +1 -1
  154. package/dist/src/physical-device-control.js +1 -1
  155. package/dist/src/platform-request-scope.js +1 -1
  156. package/dist/src/platform-runtime-android-adb-host.js +1 -1
  157. package/dist/src/platform-runtime-app-log-android-transport.js +1 -1
  158. package/dist/src/platform-runtime-apple-resources.js +1 -0
  159. package/dist/src/platform-runtime-claim-recovery.js +1 -0
  160. package/dist/src/platform-runtime-daemon-services.js +1 -0
  161. package/dist/src/platform-runtime-host.js +1 -1
  162. package/dist/src/platform-runtime-network-web-transport.js +1 -1
  163. package/dist/src/platform-runtime-open-target.js +1 -1
  164. package/dist/src/platform-runtime-operation-host.js +4 -4
  165. package/dist/src/platform-runtime-runtime-hints.js +2 -2
  166. package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
  167. package/dist/src/platform-runtime-screen-recording-apple-runner-transport.js +1 -1
  168. package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
  169. package/dist/src/platform-runtime-screen-recording-harmony-host.js +1 -1
  170. package/dist/src/platform-runtime-screen-recording-web-host.js +1 -1
  171. package/dist/src/platform-runtime-unavailable.js +1 -1
  172. package/dist/src/platform-runtime.js +1 -1
  173. package/dist/src/platform-runtime2.js +1 -1
  174. package/dist/src/plugin.js +1 -1
  175. package/dist/src/png-crop-bytes.js +1 -1
  176. package/dist/src/png-resize.js +1 -0
  177. package/dist/src/png-worker-client.js +1 -1
  178. package/dist/src/png-worker-contract.js +1 -1
  179. package/dist/src/process-entry.js +1 -1
  180. package/dist/src/process.js +1 -1
  181. package/dist/src/provider-credential-fingerprint.js +1 -1
  182. package/dist/src/provider-device-admission.js +1 -1
  183. package/dist/src/provider-policy.js +1 -1
  184. package/dist/src/provider-webdriver.js +1 -1
  185. package/dist/src/proxy.js +2 -2
  186. package/dist/src/quality-warnings.js +1 -1
  187. package/dist/src/react-native-overlay2.js +3 -0
  188. package/dist/src/react-native.js +1 -1
  189. package/dist/src/record-runtime.js +1 -1
  190. package/dist/src/record-trace.js +1 -1
  191. package/dist/src/recording.js +2 -2
  192. package/dist/src/register-builtins.js +1 -1
  193. package/dist/src/remote-config-core.js +1 -1
  194. package/dist/src/replay-backend-registry.js +1 -0
  195. package/dist/src/replay-divergence.js +1 -1
  196. package/dist/src/replay-maestro-backend.js +117 -0
  197. package/dist/src/replay-script-selection.js +1 -0
  198. package/dist/src/replay.js +1 -3
  199. package/dist/src/replay2.js +1 -0
  200. package/dist/src/reporting.js +3 -3
  201. package/dist/src/request-cancel.js +1 -1
  202. package/dist/src/request-providers.js +1 -1
  203. package/dist/src/request-runtime-binding.js +1 -1
  204. package/dist/src/result-serialization.js +1 -1
  205. package/dist/src/retry.js +1 -1
  206. package/dist/src/runner-cache-retention.js +1 -1
  207. package/dist/src/runner-cache-trim.js +1 -1
  208. package/dist/src/runner-client.js +1 -1
  209. package/dist/src/runner-dev-tools-security.js +1 -1
  210. package/dist/src/runner-device-readiness.js +1 -1
  211. package/dist/src/runner-device-set.js +1 -1
  212. package/dist/src/runner-error-classification.js +3 -3
  213. package/dist/src/runner-exchange.js +1 -1
  214. package/dist/src/runner-lease.js +1 -1
  215. package/dist/src/runner-operations-facade.js +1 -1
  216. package/dist/src/runner-retention.js +1 -0
  217. package/dist/src/runner-start-budget.js +1 -1
  218. package/dist/src/runner-startup-transport.js +1 -0
  219. package/dist/src/runner-toolchain-probe.js +1 -1
  220. package/dist/src/runner.js +2 -1
  221. package/dist/src/runtime-command-surface.js +1 -0
  222. package/dist/src/runtime-deployment.js +1 -1
  223. package/dist/src/runtime-factory.js +1 -0
  224. package/dist/src/runtime-session.js +1 -0
  225. package/dist/src/runtime-transport-hints.js +1 -1
  226. package/dist/src/runtime.js +2 -1
  227. package/dist/src/runtime10.js +2 -1
  228. package/dist/src/runtime2.js +5 -2
  229. package/dist/src/runtime3.js +1 -5
  230. package/dist/src/runtime4.js +5 -1
  231. package/dist/src/runtime5.js +1 -5
  232. package/dist/src/runtime6.js +1 -1
  233. package/dist/src/runtime7.js +1 -1
  234. package/dist/src/runtime8.js +1 -1
  235. package/dist/src/runtime9.js +1 -1
  236. package/dist/src/screenshot-image.js +1 -1
  237. package/dist/src/screenshot-runtime.js +1 -0
  238. package/dist/src/screenshot3.js +5 -5
  239. package/dist/src/sdk-batch-runner.js +2 -2
  240. package/dist/src/sdk-batch.js +1 -1
  241. package/dist/src/sdk-contracts.js +2 -2
  242. package/dist/src/sdk-finders.js +1 -1
  243. package/dist/src/sdk-io.d.ts +4 -2
  244. package/dist/src/sdk-selectors.d.ts +4 -5
  245. package/dist/src/sdk-selectors.js +1 -1
  246. package/dist/src/selection.js +0 -0
  247. package/dist/src/selector-pipeline-policy.js +1 -1
  248. package/dist/src/selector-runtime.js +1 -1
  249. package/dist/src/selectors.js +1 -1
  250. package/dist/src/server.js +2 -2
  251. package/dist/src/session-allocation.js +1 -1
  252. package/dist/src/session-replay-runtime-failure-response.js +1 -0
  253. package/dist/src/session-runtime-admission.js +1 -0
  254. package/dist/src/session.js +1 -1
  255. package/dist/src/session2.js +5 -5
  256. package/dist/src/settings.js +1 -1
  257. package/dist/src/settings2.js +1 -1
  258. package/dist/src/simctl-settings.js +1 -1
  259. package/dist/src/simulator.js +1 -1
  260. package/dist/src/snapshot-chrome.js +1 -0
  261. package/dist/src/snapshot-desktop-projection.js +1 -1
  262. package/dist/src/snapshot-evidence.js +1 -0
  263. package/dist/src/snapshot-node-lookup.js +1 -0
  264. package/dist/src/snapshot-occlusion.js +1 -0
  265. package/dist/src/snapshot-quality-verdict.js +1 -0
  266. package/dist/src/snapshot-runtime-binding.js +1 -1
  267. package/dist/src/snapshot-runtime.js +1 -1
  268. package/dist/src/snapshot-state.js +1 -1
  269. package/dist/src/snapshot.js +1 -1
  270. package/dist/src/snapshot2.js +1 -1
  271. package/dist/src/snapshot3.js +1 -1
  272. package/dist/src/src.js +5 -1
  273. package/dist/src/src2.js +1 -1
  274. package/dist/src/src3.js +2 -1
  275. package/dist/src/store.js +1 -1
  276. package/dist/src/surface-snapshot2.js +1 -1
  277. package/dist/src/target-evidence-tree.js +1 -0
  278. package/dist/src/target-evidence.js +1 -1
  279. package/dist/src/text-entry-focus.js +1 -1
  280. package/dist/src/tool-provider2.js +1 -1
  281. package/dist/src/touch-runtime.js +1 -1
  282. package/dist/src/touch-runtime2.js +1 -1
  283. package/dist/src/tree.js +1 -1
  284. package/dist/src/tv-remote.js +1 -1
  285. package/dist/src/type-text-runtime.js +1 -1
  286. package/dist/src/undici.js +8 -8
  287. package/dist/src/update-check.js +1 -1
  288. package/dist/src/vars.js +2 -0
  289. package/dist/src/version.js +1 -1
  290. package/dist/src/video.js +2 -2
  291. package/dist/src/wait.js +1 -0
  292. package/dist/src/web.js +1 -1
  293. package/dist/src/web2.js +1 -1
  294. package/package.json +9 -11
  295. package/server.json +2 -2
  296. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.24.apk +0 -0
  297. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.24.apk.sha256 +0 -1
  298. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.24.apk +0 -0
  299. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.24.apk.sha256 +0 -1
  300. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.24.manifest.json +0 -16
  301. package/dist/src/adb-transport.js +0 -1
  302. package/dist/src/alert-runtime.js +0 -1
  303. package/dist/src/app-deployment-resolution.js +0 -2
  304. package/dist/src/app-inventory-contract.js +0 -1
  305. package/dist/src/app-log-session-resource.js +0 -1
  306. package/dist/src/application-lifecycle-runtime.js +0 -1
  307. package/dist/src/auth-session.js +0 -1
  308. package/dist/src/browserstack-device-features.js +0 -1
  309. package/dist/src/browserstack.js +0 -1
  310. package/dist/src/cache.js +0 -1
  311. package/dist/src/capture.js +0 -1
  312. package/dist/src/catalog.js +0 -1
  313. package/dist/src/click-button.js +0 -1
  314. package/dist/src/client-metro-companion.js +0 -1
  315. package/dist/src/client-options.js +0 -3
  316. package/dist/src/daemon-client-transport.js +0 -1
  317. package/dist/src/daemon-http.js +0 -1
  318. package/dist/src/device-rotation.js +0 -1
  319. package/dist/src/device-session.js +0 -3
  320. package/dist/src/device2.js +0 -1
  321. package/dist/src/device3.js +0 -3
  322. package/dist/src/dispatch-resolve.js +0 -4
  323. package/dist/src/format.js +0 -2
  324. package/dist/src/gesture-plan-types.js +0 -1
  325. package/dist/src/host.js +0 -1
  326. package/dist/src/ime-settings-record.js +0 -1
  327. package/dist/src/interaction-ref-policy.js +0 -1
  328. package/dist/src/interactor-operation-binding.js +0 -1
  329. package/dist/src/keyboard-actions.js +0 -1
  330. package/dist/src/lease-context.js +0 -1
  331. package/dist/src/lease-registry-scope.js +0 -1
  332. package/dist/src/lease-scope.js +0 -1
  333. package/dist/src/managed-device-scope.js +0 -1
  334. package/dist/src/manifest.js +0 -1
  335. package/dist/src/observe-until.js +0 -1
  336. package/dist/src/output-common.js +0 -5
  337. package/dist/src/owner-identity.js +0 -3
  338. package/dist/src/path-resolution.js +0 -1
  339. package/dist/src/perf-runtime-plan.js +0 -1
  340. package/dist/src/platform-runtime-app-log-process.js +0 -1
  341. package/dist/src/platform-runtime-managed-owner.js +0 -1
  342. package/dist/src/platform-runtime-screen-recording-process-host.js +0 -1
  343. package/dist/src/png.js +0 -1
  344. package/dist/src/provider-session-ownership.js +0 -2
  345. package/dist/src/providers.js +0 -1
  346. package/dist/src/registry.js +0 -68
  347. package/dist/src/remote-connection-state.js +0 -1
  348. package/dist/src/request-admission.js +0 -1
  349. package/dist/src/request-cancellation.js +0 -1
  350. package/dist/src/request-progress-protocol.js +0 -1
  351. package/dist/src/runner-cache-metadata.js +0 -2
  352. package/dist/src/runner-disposal.js +0 -1
  353. package/dist/src/runner-session-types.js +0 -1
  354. package/dist/src/runtime-admission.js +0 -1
  355. package/dist/src/runtime11.js +0 -2
  356. package/dist/src/screen-recording-resource-recovery.js +0 -1
  357. package/dist/src/screenshot-result.js +0 -1
  358. package/dist/src/script.js +0 -1
  359. package/dist/src/scroll-command.js +0 -1
  360. package/dist/src/scroll-gesture.js +0 -1
  361. package/dist/src/scroll-indicator.js +0 -1
  362. package/dist/src/session-artifact-paths.js +0 -1
  363. package/dist/src/session-paths.js +0 -1
  364. package/dist/src/session-repair-tombstone.js +0 -1
  365. package/dist/src/session-snapshot.js +0 -1
  366. package/dist/src/snapshot-private-evidence.js +0 -1
  367. package/dist/src/snapshot4.js +0 -1
  368. package/dist/src/src4.js +0 -1
  369. package/dist/src/src5.js +0 -1
  370. package/dist/src/src6.js +0 -1
  371. package/dist/src/src7.js +0 -2
  372. package/dist/src/src8.js +0 -115
  373. package/dist/src/string-enum.js +0 -1
  374. package/dist/src/success-text.js +0 -1
  375. package/dist/src/transport.js +0 -3
  376. package/dist/src/ttl-memo.js +0 -1
  377. package/dist/src/verified-file.js +0 -1
  378. package/dist/src/window-state.js +0 -1
  379. /package/dist/src/{doctor-output.js → doctor-lines.js} +0 -0
@@ -1,2 +1,2 @@
1
- import{F as e,P as t,c as n,o as r}from"./sdk-contracts.js";import{S as i,a,n as o,o as s,r as c}from"./sdk-batch.js";function l(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function u(e,n,r,i){let a=r(e[n]);if(a===void 0)throw new t(`COMMAND_FAILED`,i,{response:e});return a}function d(e,t,n){return n(e[t])}function f(e,t,n){let r=e[t];return r===null?null:n(r)}function p(e,t){return u(e,t,S,`Daemon response is missing "${t}".`)}function ee(e,t){return d(e,t,S)}function m(e,t){return f(e,t,S)}function h(e,t){return u(e,t,ne,`Daemon response is missing numeric "${t}".`)}function g(e,t){return u(e,t,C,`Daemon response has invalid "${t}".`)}function _(e,t){return u(e,t,w,`Daemon response has invalid "${t}".`)}function te(e,t){return d(e,t,T)??`mobile`}function v(e){if(!D(e))return;let t=x(e,`x`),n=x(e,`y`),r=x(e,`width`),i=x(e,`height`);if(t!==void 0&&n!==void 0&&r!==void 0&&i!==void 0)return{x:t,y:n,width:r,height:i}}function y(e){if(e!==void 0){if(!D(e))return{kind:`unmeasurable`,reason:`malformed-fact`};if(e.kind===`absent`)return{kind:`absent`};if(e.kind===`unmeasurable`)return typeof e.reason==`string`&&e.reason.trim().length>0?{kind:`unmeasurable`,reason:e.reason}:{kind:`unmeasurable`,reason:`unreported-reason`};if(e.kind===`visible`){let t=v(e.frame);return t!==void 0&&[t.x,t.y,t.width,t.height].every(Number.isFinite)&&t.width>0&&t.height>0?{kind:`visible`,frame:t}:{kind:`unmeasurable`,reason:`invalid-visible-frame`}}return{kind:`unmeasurable`,reason:`unrecognized-kind`}}}function b(e){if(!D(e))return;let t=x(e,`x`),n=x(e,`y`);if(t!==void 0&&n!==void 0)return{x:t,y:n}}function x(e,t){let n=e[t];return typeof n==`number`?n:void 0}function S(e){return typeof e==`string`&&e.length>0?e:void 0}function ne(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function C(e){return e===`apple`?`ios`:e===`ios`||e===`macos`||e===`android`||e===`harmonyos`||e===`vega`||e===`linux`||e===`web`?e:void 0}function w(e){return e===`simulator`||e===`emulator`||e===`device`?e:void 0}function T(e){return e===`tv`||e===`mobile`||e===`desktop`?e:void 0}function E(e){if(!D(e))throw new t(`COMMAND_FAILED`,`Daemon returned an unexpected response shape.`,{value:e});return e}function D(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function O(e){return D(e)?e:void 0}function k(e){let t={};for(let[n,r]of Object.entries(e))r!==void 0&&(t[n]=r);return t}function A(e){return e.split(`
2
- `).map(e=>e.trim()).filter(e=>e.length>0)}function j(e,n,r={}){let i=e[n];if(i===void 0)return;if(!Number.isInteger(i))throw new t(`INVALID_ARGS`,`Expected ${n} to be an integer.`);let a=i;if(r.min!==void 0&&a<r.min)throw new t(`INVALID_ARGS`,`Expected ${n} to be at least ${r.min}.`);if(r.max!==void 0&&a>r.max)throw new t(`INVALID_ARGS`,`Expected ${n} to be at most ${r.max}.`);return a}function M(e,n,r={}){let i=e[n];if(i!==void 0){if(typeof i!=`number`||!Number.isFinite(i))throw new t(`INVALID_ARGS`,`Expected ${n} to be a finite number.`);if(r.min!==void 0&&i<r.min)throw new t(`INVALID_ARGS`,`Expected ${n} to be at least ${r.min}.`);if(r.max!==void 0&&i>r.max)throw new t(`INVALID_ARGS`,`Expected ${n} to be at most ${r.max}.`);return i}}const N=`android_shell_text_unsupported`;function P(e){return Number.isInteger(e)&&e>=1&&e<=1e3}function F(e,n){if(e>n)throw new t(`INVALID_ARGS`,`batch has ${e} steps; max allowed is ${n}.`)}const I=`Each batch step is {"command":"<name>","input":{...}}, where input is that command's own structured input object, keyed by field name. There is no positional step form: args, argv, positionals, and flags are not step fields.`;function L(e,n,r=I){if(!l(e))throw new t(`INVALID_ARGS`,`Invalid batch step ${n}.`,{hint:r});return e}function R(e,n,r=I){let i=e.input;if(!l(i))throw new t(`INVALID_ARGS`,`Batch step ${n} input must be an object.`,{hint:r});return i}function z(e,n){if(e!==void 0)try{return r.parse(e)}catch(e){throw new t(`INVALID_ARGS`,`Batch step ${n} runtime is invalid: ${e instanceof Error?e.message:String(e)}`)}}function B(e){let t=e.trim();if(!t||/\s/.test(t))return!1;let n=/^([A-Za-z][A-Za-z0-9+.-]*):(.+)$/.exec(t);if(!n)return!1;let r=n[1]?.toLowerCase(),i=n[2]??``;return r===`http`||r===`https`||r===`ws`||r===`wss`||r===`ftp`||r===`ftps`?i.startsWith(`//`):!0}function V(e){let t=e.trim().split(`:`)[0]?.toLowerCase();return t===`http`||t===`https`}const H=`com.apple.mobilesafari`;function U(e,t){let n=e?.trim();if(n)return n;if(V(t))return H}const W=new Set(o);async function G(t,n,r){let i=Q(t.flags),a=i?.batchOnError??`stop`;if(a!==`stop`)return $(`INVALID_ARGS`,`Unsupported batch on-error mode: ${a}.`);let o=i?.batchMaxSteps??100;if(!P(o))return $(`INVALID_ARGS`,`Invalid batch max-steps: ${String(i?.batchMaxSteps)}`);try{let e=J(i?.batchSteps,o),a=Date.now(),s=[];for(let[i,a]of e.entries()){let o=await ie(t,n,a,r,{stepNumber:i+1,totalSteps:e.length,remainingSteps:e.slice(i+1).map(e=>({command:e.command,positionals:e.positionals,flags:e.flags,...e.input===void 0?{}:{input:e.input}}))});if(!o.ok)return K(o,a,{executedSteps:e.slice(0,i),total:e.length,partialResults:s});s.push(o.result)}return{ok:!0,data:{total:e.length,executed:e.length,totalDurationMs:Date.now()-a,results:s}}}catch(t){let n=e(t);return $(n.code,n.message,n.details)}}function K(e,t,n){let{error:r}=e;return{ok:!1,error:{code:r.code,message:`Batch failed at step ${e.step} (${t.command}): ${r.message}`,hint:r.hint,diagnosticId:r.diagnosticId,logPath:r.logPath,...r.retriable===void 0?{}:{retriable:r.retriable},...r.supportedOn===void 0?{}:{supportedOn:r.supportedOn},details:{...r.details??{},...n.executedSteps.some(q)?{dispatched:`unknown`}:{},step:e.step,command:t.command,positionals:t.positionals,executed:n.executedSteps.length,total:n.total,partialResults:n.partialResults}}}}function q(e){return i(e)!==`observes-app`}function J(e,n){if(!Array.isArray(e)||e.length===0)throw new t(`INVALID_ARGS`,`batch requires a non-empty batchSteps array.`);F(e.length,n);let r=[];for(let n=0;n<e.length;n+=1){let i=e[n];if(!D(i))throw new t(`INVALID_ARGS`,`Invalid batch step at index ${n}.`);let o=Object.keys(i).filter(e=>!W.has(e));if(o.length>0){let e=o.map(e=>`"${e}"`).join(`, `);throw new t(`INVALID_ARGS`,`Batch step ${n+1} has unknown field(s): ${e}. Allowed fields: command, positionals, input, flags, runtime.`)}let c=s(i.command);if(!c)throw new t(`INVALID_ARGS`,`Batch step ${n+1} requires command.`);if(a(c,n+1),i.positionals!==void 0&&!Array.isArray(i.positionals))throw new t(`INVALID_ARGS`,`Batch step ${n+1} positionals must be an array.`);let l=i.positionals??[];if(l.some(e=>typeof e!=`string`))throw new t(`INVALID_ARGS`,`Batch step ${n+1} positionals must contain only strings.`);if(i.flags!==void 0&&!D(i.flags))throw new t(`INVALID_ARGS`,`Batch step ${n+1} flags must be an object.`);if(i.input!==void 0&&!D(i.input))throw new t(`INVALID_ARGS`,`Batch step ${n+1} input must be an object.`);r.push({command:c,positionals:l,input:i.input,flags:i.flags??{},runtime:z(i.runtime,n+1)})}return r}function Y(e,t){let{batchSteps:n,batchOnError:r,batchMaxSteps:i,...a}=t??{};return X(Q(e),a)}function X(e,t){let n=Q(e)??{},r=t;for(let e of c)r[e]===void 0&&n[e]!==void 0&&(r[e]=n[e]);return t}function Z(e,t){return n(e)?t?e:`digest`:e}function re(e,t){let n=e?.responseLevel,r=Z(n,t);return r===n?e:{...e,responseLevel:r}}async function ie(e,t,n,r,i){let{stepNumber:a,totalSteps:o}=i,s=a===o,c=Date.now(),l=Y(e.flags,n.flags);l.session===void 0&&(l.session=t);let u=await r({token:e.token,session:t,command:n.command,positionals:n.positionals,input:n.input,flags:l,runtime:n.runtime===void 0?e.runtime:n.runtime,meta:re(e.meta,s)},i),d=Date.now()-c;return u.ok?{ok:!0,step:a,result:{step:a,command:n.command,ok:!0,data:u.data??{},durationMs:d}}:{ok:!1,step:a,error:u.error}}function Q(e){return e}function $(e,t,n){return{ok:!1,error:{code:e,message:t,...n?{details:n}:{}}}}export{k as A,ee as C,p as D,g as E,y as O,m as S,h as T,E as _,V as a,v as b,F as c,R as d,L as f,O as g,M as h,B as i,l as j,A as k,P as l,j as m,G as n,U as o,N as p,H as r,I as s,X as t,z as u,D as v,_ as w,te as x,b as y};
1
+ import{I as e,P as t,c as n,o as r}from"./sdk-contracts.js";import{S as i,a,n as o,o as s,r as c}from"./sdk-batch.js";function l(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function u(e,n,r,i){let a=r(e[n]);if(a===void 0)throw new t(`COMMAND_FAILED`,i,{response:e});return a}function d(e,t,n){return n(e[t])}function f(e,t,n){let r=e[t];return r===null?null:n(r)}function p(e,t){return u(e,t,S,`Daemon response is missing "${t}".`)}function ee(e,t){return d(e,t,S)}function m(e,t){return f(e,t,S)}function h(e,t){return u(e,t,ne,`Daemon response is missing numeric "${t}".`)}function g(e,t){return u(e,t,C,`Daemon response has invalid "${t}".`)}function _(e,t){return u(e,t,w,`Daemon response has invalid "${t}".`)}function te(e,t){return d(e,t,T)??`mobile`}function v(e){if(!D(e))return;let t=x(e,`x`),n=x(e,`y`),r=x(e,`width`),i=x(e,`height`);if(t!==void 0&&n!==void 0&&r!==void 0&&i!==void 0)return{x:t,y:n,width:r,height:i}}function y(e){if(e!==void 0){if(!D(e))return{kind:`unmeasurable`,reason:`malformed-fact`};if(e.kind===`absent`)return{kind:`absent`};if(e.kind===`unmeasurable`)return typeof e.reason==`string`&&e.reason.trim().length>0?{kind:`unmeasurable`,reason:e.reason}:{kind:`unmeasurable`,reason:`unreported-reason`};if(e.kind===`visible`){let t=v(e.frame);return t!==void 0&&[t.x,t.y,t.width,t.height].every(Number.isFinite)&&t.width>0&&t.height>0?{kind:`visible`,frame:t}:{kind:`unmeasurable`,reason:`invalid-visible-frame`}}return{kind:`unmeasurable`,reason:`unrecognized-kind`}}}function b(e){if(!D(e))return;let t=x(e,`x`),n=x(e,`y`);if(t!==void 0&&n!==void 0)return{x:t,y:n}}function x(e,t){let n=e[t];return typeof n==`number`?n:void 0}function S(e){return typeof e==`string`&&e.length>0?e:void 0}function ne(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function C(e){return e===`apple`?`ios`:e===`ios`||e===`macos`||e===`android`||e===`harmonyos`||e===`vega`||e===`linux`||e===`web`?e:void 0}function w(e){return e===`simulator`||e===`emulator`||e===`device`?e:void 0}function T(e){return e===`tv`||e===`mobile`||e===`desktop`?e:void 0}function E(e){if(!D(e))throw new t(`COMMAND_FAILED`,`Daemon returned an unexpected response shape.`,{value:e});return e}function D(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function O(e){return D(e)?e:void 0}function k(e){let t={};for(let[n,r]of Object.entries(e))r!==void 0&&(t[n]=r);return t}function A(e){return e.split(`
2
+ `).map(e=>e.trim()).filter(e=>e.length>0)}function j(e,n,r={}){let i=e[n];if(i===void 0)return;if(!Number.isInteger(i))throw new t(`INVALID_ARGS`,`Expected ${n} to be an integer.`);let a=i;if(r.min!==void 0&&a<r.min)throw new t(`INVALID_ARGS`,`Expected ${n} to be at least ${r.min}.`);if(r.max!==void 0&&a>r.max)throw new t(`INVALID_ARGS`,`Expected ${n} to be at most ${r.max}.`);return a}function M(e,n,r={}){let i=e[n];if(i!==void 0){if(typeof i!=`number`||!Number.isFinite(i))throw new t(`INVALID_ARGS`,`Expected ${n} to be a finite number.`);if(r.min!==void 0&&i<r.min)throw new t(`INVALID_ARGS`,`Expected ${n} to be at least ${r.min}.`);if(r.max!==void 0&&i>r.max)throw new t(`INVALID_ARGS`,`Expected ${n} to be at most ${r.max}.`);return i}}const N=`android_shell_text_unsupported`;function P(e){return Number.isInteger(e)&&e>=1&&e<=1e3}function F(e,n){if(e>n)throw new t(`INVALID_ARGS`,`batch has ${e} steps; max allowed is ${n}.`)}const I=`Each batch step is {"command":"<name>","input":{...}}, where input is that command's own structured input object, keyed by field name. There is no positional step form: args, argv, positionals, and flags are not step fields.`;function L(e,n,r=I){if(!l(e))throw new t(`INVALID_ARGS`,`Invalid batch step ${n}.`,{hint:r});return e}function R(e,n,r=I){let i=e.input;if(!l(i))throw new t(`INVALID_ARGS`,`Batch step ${n} input must be an object.`,{hint:r});return i}function z(e,n){if(e!==void 0)try{return r.parse(e)}catch(e){throw new t(`INVALID_ARGS`,`Batch step ${n} runtime is invalid: ${e instanceof Error?e.message:String(e)}`)}}function B(e){let t=e.trim();if(!t||/\s/.test(t))return!1;let n=/^([A-Za-z][A-Za-z0-9+.-]*):(.+)$/.exec(t);if(!n)return!1;let r=n[1]?.toLowerCase(),i=n[2]??``;return r===`http`||r===`https`||r===`ws`||r===`wss`||r===`ftp`||r===`ftps`?i.startsWith(`//`):!0}function V(e){let t=e.trim().split(`:`)[0]?.toLowerCase();return t===`http`||t===`https`}const H=`com.apple.mobilesafari`;function U(e,t){let n=e?.trim();if(n)return n;if(V(t))return H}const W=new Set(o);async function G(t,n,r){let i=Q(t.flags),a=i?.batchOnError??`stop`;if(a!==`stop`)return $(`INVALID_ARGS`,`Unsupported batch on-error mode: ${a}.`);let o=i?.batchMaxSteps??100;if(!P(o))return $(`INVALID_ARGS`,`Invalid batch max-steps: ${String(i?.batchMaxSteps)}`);try{let e=J(i?.batchSteps,o),a=Date.now(),s=[];for(let[i,a]of e.entries()){let o=await ae(t,n,a,r,{stepNumber:i+1,totalSteps:e.length,remainingSteps:e.slice(i+1).map(e=>({command:e.command,positionals:e.positionals,flags:e.flags,...e.input===void 0?{}:{input:e.input}}))});if(!o.ok)return K(o,a,{executedSteps:e.slice(0,i),total:e.length,partialResults:s});s.push(o.result)}return{ok:!0,data:{total:e.length,executed:e.length,totalDurationMs:Date.now()-a,results:s}}}catch(t){let n=e(t);return $(n.code,n.message,n.details)}}function K(e,t,n){let{error:r}=e;return{ok:!1,error:{code:r.code,message:`Batch failed at step ${e.step} (${t.command}): ${r.message}`,hint:r.hint,diagnosticId:r.diagnosticId,logPath:r.logPath,...r.retriable===void 0?{}:{retriable:r.retriable},...r.supportedOn===void 0?{}:{supportedOn:r.supportedOn},details:{...r.details??{},...n.executedSteps.some(q)?{dispatched:`unknown`}:{},step:e.step,command:t.command,positionals:t.positionals,executed:n.executedSteps.length,total:n.total,partialResults:n.partialResults}}}}function q(e){return i(e)!==`observes-app`}function J(e,n){if(!Array.isArray(e)||e.length===0)throw new t(`INVALID_ARGS`,`batch requires a non-empty batchSteps array.`);F(e.length,n);let r=[];for(let n=0;n<e.length;n+=1){let i=e[n];if(!D(i))throw new t(`INVALID_ARGS`,`Invalid batch step at index ${n}.`);let o=Object.keys(i).filter(e=>!W.has(e));if(o.length>0){let e=o.map(e=>`"${e}"`).join(`, `);throw new t(`INVALID_ARGS`,`Batch step ${n+1} has unknown field(s): ${e}. Allowed fields: command, positionals, input, flags, runtime.`)}let c=s(i.command);if(!c)throw new t(`INVALID_ARGS`,`Batch step ${n+1} requires command.`);if(a(c,n+1),i.positionals!==void 0&&!Array.isArray(i.positionals))throw new t(`INVALID_ARGS`,`Batch step ${n+1} positionals must be an array.`);let l=i.positionals??[];if(l.some(e=>typeof e!=`string`))throw new t(`INVALID_ARGS`,`Batch step ${n+1} positionals must contain only strings.`);if(i.flags!==void 0&&!D(i.flags))throw new t(`INVALID_ARGS`,`Batch step ${n+1} flags must be an object.`);if(Y(i.flags,n+1),i.input!==void 0&&!D(i.input))throw new t(`INVALID_ARGS`,`Batch step ${n+1} input must be an object.`);r.push({command:c,positionals:l,input:i.input,flags:i.flags??{},runtime:z(i.runtime,n+1)})}return r}function Y(e,n){if(e?.textStdin===!0)throw new t(`INVALID_ARGS`,`Batch step ${n}: fill textStdin is not supported because batch steps have no stdin of their own.`,{reason:`fill_text_stdin_in_batch`})}function X(e,t){let{batchSteps:n,batchOnError:r,batchMaxSteps:i,...a}=t??{};return Z(Q(e),a)}function Z(e,t){let n=Q(e)??{},r=t;for(let e of c)r[e]===void 0&&n[e]!==void 0&&(r[e]=n[e]);return t}function re(e,t){return n(e)?t?e:`digest`:e}function ie(e,t){let n=e?.responseLevel,r=re(n,t);return r===n?e:{...e,responseLevel:r}}async function ae(e,t,n,r,i){let{stepNumber:a,totalSteps:o}=i,s=a===o,c=Date.now(),l=X(e.flags,n.flags);l.session===void 0&&(l.session=t);let u=await r({token:e.token,session:t,command:n.command,positionals:n.positionals,input:n.input,flags:l,runtime:n.runtime===void 0?e.runtime:n.runtime,meta:ie(e.meta,s)},i),d=Date.now()-c;return u.ok?{ok:!0,step:a,result:{step:a,command:n.command,ok:!0,data:u.data??{},durationMs:d}}:{ok:!1,step:a,error:u.error}}function Q(e){return e}function $(e,t,n){return{ok:!1,error:{code:e,message:t,...n?{details:n}:{}}}}export{k as A,ee as C,p as D,g as E,y as O,m as S,h as T,E as _,V as a,v as b,F as c,R as d,L as f,O as g,M as h,B as i,l as j,A as k,P as l,j as m,G as n,U as o,N as p,H as r,I as s,Z as t,z as u,D as v,_ as w,te as x,b as y};
@@ -1,2 +1,2 @@
1
1
  import{P as e,S as t,b as n}from"./sdk-contracts.js";import{r,v as i}from"./sdk-device.js";function a(e,t){return{ok:!1,code:`INVALID_ARGS`,message:e,...t?{hint:t}:{}}}const o=[`visible`,`hidden`,`exists`,`absent`,`editable`,`selected`,`focused`,`text`],s={x:-Number.MAX_VALUE/2,y:-Number.MAX_VALUE/2,width:Number.MAX_VALUE,height:Number.MAX_VALUE};function c(e){return e.x===s.x&&e.y===s.y&&e.width===s.width&&e.height===s.height}function l(e){if(!e)return!1;let{x:t,y:n,width:r,height:i}=e;return![t,n,r,i].every(Number.isFinite)||!Number.isFinite(t+r)||!Number.isFinite(n+i)||r<=0||i<=0?!1:!c(e)}function u(e,t){return e>=s.width||t>=s.height}function d(e){if(l(e)&&!u(e.width,e.height))return{width:e.width,height:e.height}}function ee(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let{x:t,y:n,width:r,height:i}=e;if(typeof r==`number`&&typeof i==`number`&&(t===void 0||typeof t==`number`)&&(n===void 0||typeof n==`number`))return d({x:t??0,y:n??0,width:r,height:i})}function te(e,t){return t.x>=e.x&&t.y>=e.y&&t.x+t.width<=e.x+e.width&&t.y+t.height<=e.y+e.height}function ne(e){return e.width*e.height}function re(e){let t=e[0];if(t===void 0)throw Error(`unionRects requires at least one rect`);let n=t.x,r=t.y,i=t.x+t.width,a=t.y+t.height;for(let t of e.slice(1))n=Math.min(n,t.x),r=Math.min(r,t.y),i=Math.max(i,t.x+t.width),a=Math.max(a,t.y+t.height);return{x:n,y:r,width:i-n,height:a-r}}function ie(e,t,n){return t>=e.x&&t<=e.x+e.width&&n>=e.y&&n<=e.y+e.height}function ae(e,t,n){if(!e||!l(t))return!1;let r=t.x+t.width/2,i=t.y+t.height/2;return r>=n.x&&r<n.x+n.width&&i>=n.y&&i<n.y+n.height}function f(e){let t=null,n=-1;for(let r of e){let e=r.width*r.height;e>n&&(t=r,n=e)}return t}function oe(e,t){return se(e.x,e.x+e.width,t.x,t.x+t.width)&&se(e.y,e.y+e.height,t.y,t.y+t.height)}function se(e,t,n,r){return Math.max(e,n)<=Math.min(t,r)}function ce(e){let t=`${e??``}`.toLowerCase();return t.includes(`scroll`)||t.includes(`recyclerview`)||t.includes(`listview`)||t.includes(`gridview`)||t.includes(`collectionview`)||t===`table`}function le(e){return ce(e.type)?!0:`${e.role??``} ${e.subrole??``}`.toLowerCase().includes(`scroll`)}function ue(e){return e?.trim().toLowerCase()||null}function de(e,t){let n=ue(t);return n?[e.label,e.value,e.identifier].some(e=>(e??``).toLowerCase().includes(n)):!1}function fe(e,t,n=()=>!0){if(!ue(t))return null;for(let[r,i]of e.entries()){if(!de(i,t))continue;let a=i.depth??0,o=r+1;for(;o<e.length&&(e[o]?.depth??0)>a;)o+=1;let s={start:r,end:o};if(n(s))return s}return null}function pe(e,t=0){let n=new Map;for(let[t,r]of e.entries())n.set(r.index,t);return e.map((e,r)=>({...e,index:r,depth:Math.max(0,(e.depth??0)-t),parentIndex:typeof e.parentIndex==`number`?n.get(e.parentIndex):void 0}))}function me(e){return new Map(e.map(e=>[e.index,e]))}function he(e,t,n,r){let i=t,a=new Set;for(;typeof i.parentIndex==`number`&&!a.has(i.index);){if(a.add(i.index),i=n.get(i.parentIndex)??e[i.parentIndex],!i)return null;let t=r(i);if(t!==null)return t}return null}function ge(e,t,n){return he(e,t,me(e),e=>n(e)?e:null)}function p(e){let t=e.trim().replaceAll(/XCUIElementType/gi,``).replace(/^AX/,``).toLowerCase(),n=Math.max(t.lastIndexOf(`.`),t.lastIndexOf(`/`));return n!==-1&&(t=t.slice(n+1)),t}function _e(e,t){let n=p(e);return n?t===`android`?n.includes(`edittext`)||n.includes(`autocompletetextview`):n.includes(`textfield`)||n.includes(`securetextfield`)||n.includes(`searchfield`)||n.includes(`textview`)||n.includes(`textarea`)||n===`search`:!0}function ve(e){let t=e.trim();return!(!t||/^(true|false)$/i.test(t)||/^\d+$/.test(t))}function ye(e){if(typeof e!=`string`)return!1;let t=e.trim();return t?!/^(true|false)$/i.test(t):!1}function m(e){return[e.label,e.value,e.identifier].map(e=>typeof e==`string`?e.trim():``).filter(e=>e.length>0)[0]??``}const be=Symbol(`SnapshotVisibility`);function xe(e,t={}){let n,r,i=()=>(n||(n=me(e),t.onNodeMapBuilt?.()),n),a=()=>(r||(r=Ce(e),t.onViewportRectsCollected?.()),r),o=n=>h(e,n,a(),t.onContainingRectFallback),s=n=>{let r=De(n,i(),e=>!!e.rect)?.rect;if(r)return r;let o=a();return o.length===0?null:h(e,n.rect??{x:0,y:0,width:0,height:0},o,t.onContainingRectFallback)},c=e=>{if(!e.rect)return!0;let t=s(e);return!t||oe(e.rect,t)},l=e=>e.rect?c(e)?Ee(e.rect,o(e.rect)):!1:!0;return{[be]:!0,get nodeByIndex(){return i()},get viewportRects(){return a()},findAncestor(t,n){return he(e,t,i(),n)},isVisibleInEffectiveViewport:c,isVisibleOnScreen:l,resolveEffectiveViewport:s,resolveViewport:o}}function Se(e){let t=[e.type,e.role,e.subrole].map(e=>p(e??``)).join(` `);return t.includes(`application`)||t.includes(`window`)}function Ce(e){return e.flatMap(e=>Se(e)&&l(e.rect)?[e.rect]:[])}function we(e,t,n){return h(e,t,n??Ce(e))}function h(e,t,r,i){let a=n(t),o=e=>ie(e,a.x,a.y);return(f(r.filter(o))??f(r))||(i?.(),f(e.flatMap(e=>Te(e.rect)&&o(e.rect)?[e.rect]:[])))}function Te(e){return e?Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.width)&&Number.isFinite(e.height):!1}function Ee(e,t){return!t||t.width<=0||t.height<=0||ie(t,e.x+e.width/2,e.y+e.height/2)}function De(e,t,n=()=>!0){let r=typeof e.parentIndex==`number`?t.get(e.parentIndex):void 0,i=new Set;for(;r&&!i.has(r.index);){if(i.add(r.index),n(r)&&le(r))return r;r=typeof r.parentIndex==`number`?t.get(r.parentIndex):void 0}return null}function Oe(e,t){if(t===`android`&&e.visibleToUser===!1)return!1;let n=p(e.type??``);return n.includes(`application`)||n.includes(`window`)||n.includes(`scrollview`)||n.includes(`tableview`)||n.includes(`collectionview`)||n===`table`||n===`list`||n===`listview`?!1:t===`android`?e.hittable===!0&&l(e.rect):e.hittable===!0||l(e.rect)}function g(e){return e.hittable===!0?!0:e.rect?e.rect.width>0&&e.rect.height>0:!1}function ke(e,t){return _e(e.type??``,t)&&e.enabled!==!1}function Ae(e){let n=e.kind??t(e.type??`Element`),r=p(e.type??``);return r&&r!==n?[n,r]:[n]}const je=new Set([`id`,`role`,`text`,`label`,`value`,`appname`,`windowtitle`]),Me=new Set([`visible`,`hidden`,`editable`,`selected`,`focused`,`enabled`,`hittable`]),_=new Set([...je,...Me]),Ne=[..._],Pe=new Set(`button.imagebutton.link.cell.statictext.checkedtextview.textfield.textbox.edittext.textarea.switch.slider.image.imageview.webview.framelayout.linearlayout.relativelayout.constraintlayout.viewgroup.view.listview.recyclerview.collectionview.list.searchfield.segmentedcontrol.group.window.checkbox.radio.menuitem.toolbar.scrollarea.scrollview.nestedscrollview.table.application.navigationbar.tabbar.tab.alert.dialog.header`.split(`.`));function Fe(e){return Pe.has(e.trim().toLowerCase())}const Ie=new Map([[`"`,`"`],[`'`,`'`],[`\\`,`\\`],[`/`,`/`],[`b`,`\b`],[`f`,`\f`],[`n`,`
2
- `],[`r`,`\r`],[`t`,` `]]);function v(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Selector expression cannot be empty`);let r=Be(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Selector expression cannot be empty`);return{raw:n,selectors:r.map(e=>Re(e))}}function y(e){try{return v(e)}catch{return null}}function b(e){let t=e.trim();if(!t)return!1;if(t===`||`)return!0;let n=t.indexOf(`=`);if(n!==-1){let e=t.slice(0,n).trim().toLowerCase();return _.has(e)}return _.has(t.toLowerCase())}function Le(e){let t=e.trim(),n=t.indexOf(`=`);if(n===-1)return null;let r=t.slice(0,n).trim().toLowerCase();if(!r||_.has(r))return null;let i=t.slice(n+1).trim();if(!i)return null;let a=S(i).trim();return a?{key:r,value:a}:null}function x(e,t={}){if(e.length===0)return null;let n=t.preferTrailingValue??!1,r=0,i=[];for(;r<e.length;){let t=e[r];if(t===void 0||!b(t))break;r+=1;let n=e.slice(0,r).join(` `).trim();n&&y(n)&&i.push(r)}if(i.length===0)return null;let a=i.at(-1);if(a===void 0)return null;let o=a;if(n)for(let t=i.length-1;t>=0;--t){let n=i[t];if(n!==void 0&&n<e.length){o=n;break}}let s=e.slice(0,o).join(` `).trim();return s?{selectorExpression:s,rest:e.slice(o)}:null}function Re(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Selector segment cannot be empty`);let r=Ve(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Invalid selector segment: ${t}`);return{raw:n,terms:r.map(ze)}}function ze(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Empty selector term`);let r=n.indexOf(`=`);if(r===-1){let r=n.toLowerCase();if(!Me.has(r))throw new e(`INVALID_ARGS`,`Invalid selector term "${t}", expected key=value`);return{key:r,value:!0}}let i=n.slice(0,r).trim().toLowerCase(),a=n.slice(r+1).trim();if(!_.has(i))throw new e(`INVALID_ARGS`,`Unknown selector key: ${i}`);if(!a)throw new e(`INVALID_ARGS`,`Missing selector value for key: ${i}`);if(Me.has(i)){let t=Ge(a);if(t===null)throw new e(`INVALID_ARGS`,`Invalid boolean value for ${i}: ${a}`);return{key:i,value:t}}return{key:i,value:S(a)}}function Be(t){let n=[],r=``,i=null;for(let a=0;a<t.length;a+=1){let o=t[a];if((o===`"`||o===`'`)&&!Ke(t,a)){i=He(i,o),r+=o;continue}if(!i&&o===`|`&&t[a+1]===`|`){let i=r.trim();if(!i)throw new e(`INVALID_ARGS`,`Invalid selector fallback expression: ${t}`);n.push(i),r=``,a+=1;continue}r+=o}let a=r.trim();if(!a)throw new e(`INVALID_ARGS`,`Invalid selector fallback expression: ${t}`);return n.push(a),n}function Ve(t){let n=[],r=``,i=null;for(let e=0;e<t.length;e+=1){let a=t.charAt(e);if((a===`"`||a===`'`)&&!Ke(t,e)){i=He(i,a),r+=a;continue}if(!i&&/\s/.test(a)){r.trim()&&n.push(r.trim()),r=``;continue}r+=a}if(i)throw new e(`INVALID_ARGS`,`Unclosed quote in selector: ${t}`);return r.trim()&&n.push(r.trim()),n}function He(e,t){return e?e===t?null:e:t}function S(e){let t=e.trim();return t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?Ue(t.slice(1,-1)):t}function Ue(e){let t=``,n=0;for(;n<e.length;){let r=e.charAt(n);if(r!==`\\`){t+=r,n+=1;continue}let i=e.charAt(n+1);if(!i){t+=r,n+=1;continue}let a=We(i);if(a!==null){t+=a,n+=2;continue}if(i===`u`){let r=e.slice(n+2,n+6);if(/^[0-9a-fA-F]{4}$/.test(r)){t+=String.fromCharCode(Number.parseInt(r,16)),n+=6;continue}}t+=r,n+=1}return t}function We(e){return Ie.get(e)??null}function Ge(e){let t=S(e).toLowerCase();return t===`true`||t!==`false`&&null}function Ke(e,t){let n=0;for(let r=t-1;r>=0&&e[r]===`\\`;--r)n+=1;return n%2==1}function C(e){return o.includes(e)}const qe=`is requires predicate: ${o.join(`|`)}`;function Je(e){let t=e.toLowerCase();return C(t)?{ok:!0,predicate:t}:a(qe,Ye)}const Ye=`Use "is <predicate> <selector>" or "is <selector> <predicate>". visible|hidden|editable|selected|focused double as selector keys: a bare predicate token after the selector is read as the predicate, so write key=true (e.g. visible=true) inside the selector to use it as a filter instead.`;function Xe(e){if(C((e[0]??``).toLowerCase()))return e;for(let t=1;t<e.length;t+=1){let n=(e[t]??``).toLowerCase();if(C(n)&&y(e.slice(0,t).join(` `)))return[n,...e.slice(0,t),...e.slice(t+1)]}return e}function Ze(e){let{predicate:t,node:n,visibility:r,expectedText:i,platform:a}=e,o=m(n),s=ke(n,a),c=n.selected===!0,l=n.focused===!0,u=t===`text`?g(n):$e(n,r,a),d=!1;switch(t){case`visible`:d=u;break;case`hidden`:d=!u;break;case`editable`:d=s;break;case`selected`:d=c;break;case`focused`:d=l;break;case`text`:d=o===(i??``);break;default:return Qe(t)}let ee=t===`text`?`expected="${i??``}" actual="${o}"`:`actual=${JSON.stringify({visible:u,editable:s,selected:c,focused:l})}`;return{pass:d,actualText:o,details:ee}}function Qe(e){throw Error(`Unhandled is predicate: ${String(e)}`)}function $e(e,t,n){if(n===`android`&&e.visibleToUser===!1)return!1;if(l(e.rect))return t.isVisibleInEffectiveViewport(e);if(e.rect)return!1;if(n!==`android`&&e.hittable===!0)return!0;let r=et(e,t,n);return r?l(r.rect)?t.isVisibleInEffectiveViewport(r):n!==`android`&&r.hittable===!0:!1}function et(e,t,n){return t.findAncestor(e,e=>Oe(e,n)?e:null)}function tt(e){let t=Xe(e),n=t[0]??``;return{predicate:n,split:x(t.slice(1),{preferTrailingValue:n===`text`})}}const nt=`is requires a selector expression`,rt=`is text requires expected text value`;function it(e){let{predicate:t,split:n}=tt([...e]),r=Je(t);if(!r.ok)return r;if(!n)return a(nt);let i=n.rest.join(` `).trim();return r.predicate===`text`&&!i?a(rt):r.predicate!==`text`&&n.rest.length>0?a(`is ${r.predicate} does not accept trailing values`):{ok:!0,predicate:r.predicate,selectorExpression:n.selectorExpression,expectedText:i}}function at(e){return e===`text`||e===`attrs`?{ok:!0,format:e}:a(`get only supports text or attrs`)}function ot(e){let t=e[0];if(t?.startsWith(`@`)){let n=e.slice(1).join(` `).trim();return{ok:!0,ref:t,...n?{label:n}:{}}}let n=e.join(` `).trim();return n?{ok:!0,selector:n}:a(`get requires @ref or selector expression`)}function st(e){return e?{ok:!0,text:e}:a(`wait requires text`)}function ct(e){return Array.from(new Set(e))}function lt(e){return JSON.stringify(ut(e))}function ut(e){if(Array.isArray(e))return e.map(ut);if(!e||typeof e!=`object`)return e;let t=e;return Object.fromEntries(Object.keys(t).sort().map(e=>[e,ut(t[e])]))}function dt(e){let t=0,n=e.length;for(;t<n&&e[t]===`-`;)t+=1;for(;n>t&&e[n-1]===`-`;)--n;return e.slice(t,n)}const ft=/^#\s*agent-device:target-v(\d+)(?:\s+(\S.*))?$/,pt=/^#\s*agent-device:targets-v(\d+)(?:\s+(\S.*))?$/,mt=4096;function ht(e){return e.normalize(`NFC`)}function gt(e){if(e===void 0)return;let t=ht(e);return t.length>0?t:void 0}function _t(e){return ht(e)}function vt(e){if(e===void 0)return;let t=ht(e).trim().replaceAll(/\s+/g,` `);return t.length>0?t:void 0}function w(e){return Buffer.byteLength(e,`utf8`)}function T(e,t){if(w(e)<=t)return e;let n=e.length;for(;n>0&&w(e.slice(0,n))>t;)--n;if(n>0){let t=e.charCodeAt(n-1);t>=55296&&t<=56319&&--n}return e.slice(0,n)}function yt(e){let t={};return e.id!==void 0&&(t.id=e.id),t.role=e.role,e.label!==void 0&&(t.label=e.label),t.ancestry=e.ancestry.map(bt),t.sibling=e.sibling,t.viewportOrder=e.viewportOrder,e.scrollRegion&&(t.scrollRegion=xt(e.scrollRegion)),e.rect&&(t.rect=St(e.rect)),t.verification=e.verification,t}function bt(e){let t={role:e.role};return e.label!==void 0&&(t.label=e.label),t}function xt(e){let t={role:e.role};return e.id!==void 0&&(t.id=e.id),e.label!==void 0&&(t.label=e.label),t}function St(e){return{x:e.x,y:e.y,width:e.width,height:e.height}}function Ct(e){return JSON.stringify(yt(e))}function wt(e){return`# agent-device:target-v1 ${Ct(e)}`}function Tt(e){return JSON.stringify({source:yt(e.source),destination:yt(e.destination)})}function Et(e){return`# agent-device:targets-v1 ${Tt(e)}`}function Dt(e){let t=e.trim(),n=pt.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:Ot((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function Ot(t){if(w(t)>8320)throw new e(`INVALID_ARGS`,`targets-v1 annotation exceeds the 8320-byte payload cap.`);let n;try{n=JSON.parse(t)}catch{throw new e(`INVALID_ARGS`,`targets-v1 annotation is not valid JSON.`)}if(typeof n!=`object`||!n||Array.isArray(n))throw new e(`INVALID_ARGS`,`targets-v1 annotation must be a JSON object.`);let r=n;if(r.source===void 0||r.destination===void 0)throw new e(`INVALID_ARGS`,`targets-v1 annotation requires source and destination evidence.`);return{source:At(JSON.stringify(r.source)),destination:At(JSON.stringify(r.destination))}}function kt(e){let t=e.trim();if(!t.startsWith(`#`))return{kind:`none`};let n=ft.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:At((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function At(t){if(w(t)>4096)throw new e(`INVALID_ARGS`,`target-v1 annotation exceeds the ${mt}-byte payload cap.`);let n;try{n=JSON.parse(t)}catch{throw new e(`INVALID_ARGS`,`target-v1 annotation is not valid JSON.`)}if(typeof n!=`object`||!n||Array.isArray(n))throw new e(`INVALID_ARGS`,`target-v1 annotation must be a JSON object.`);let r=n,i=jt(r.role,`role`),a=Mt(r.id,`id`),o=Nt(r.label,`label`),s=Ft(r.ancestry),c=Lt(r.sibling,`sibling`,0),l=Lt(r.viewportOrder,`viewportOrder`,0),u=Rt(r.scrollRegion),d=zt(r.rect),ee=Bt(r.verification);return{...a===void 0?{}:{id:a},role:i,...o===void 0?{}:{label:o},ancestry:s,sibling:c,viewportOrder:l,...u?{scrollRegion:u}:{},...d?{rect:d}:{},verification:ee}}function jt(t,n){if(t===void 0)throw new e(`INVALID_ARGS`,`target-v1 "${n}" is required.`);if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);return Pt(_t(t),n)}function Mt(t,n){if(t===void 0)return;if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);let r=gt(t);return r===void 0?void 0:Pt(r,n)}function Nt(t,n){if(t===void 0)return;if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);let r=vt(t);return r===void 0?void 0:Pt(r,n)}function Pt(t,n){if(w(t)>256)throw new e(`INVALID_ARGS`,`target-v1 "${n}" exceeds the 256-byte field cap.`);return t}function Ft(t){if(t===void 0)return[];if(!Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "ancestry" must be an array.`);if(t.length>8)throw new e(`INVALID_ARGS`,`target-v1 "ancestry" exceeds the 8-entry cap.`);return t.map((e,t)=>It(e,t))}function It(t,n){if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "ancestry[${n}]" must be an object.`);let r=t,i=jt(r.role,`ancestry[${n}].role`),a=Nt(r.label,`ancestry[${n}].label`);return{role:i,...a===void 0?{}:{label:a}}}function Lt(t,n,r){if(t===void 0)return r;if(typeof t!=`number`||!Number.isSafeInteger(t)||t<0)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a non-negative integer.`);return t}function Rt(t){if(t===void 0)return;if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "scrollRegion" must be an object.`);let n=t,r=jt(n.role,`scrollRegion.role`),i=Mt(n.id,`id`),a=Nt(n.label,`scrollRegion.label`);return{role:r,...i===void 0?{}:{id:i},...a===void 0?{}:{label:a}}}function zt(t){if(t===void 0)return;if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "rect" must be an object.`);let n=t;return{x:E(n.x,`rect.x`),y:E(n.y,`rect.y`),width:E(n.width,`rect.width`),height:E(n.height,`rect.height`)}}function E(t,n){if(typeof t!=`number`||!Number.isFinite(t))throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a finite number.`);return t}function Bt(t){if(t===`verified`||t===`unverifiable`)return t;throw new e(`INVALID_ARGS`,`target-v1 "verification" must be "verified" or "unverifiable".`)}function Vt(e){let t=_t(p(e.type??``)),n=gt(e.identifier),r=vt(e.label);return{...n===void 0?{}:{id:T(n,256)},role:T(t,256),...r===void 0?{}:{label:T(r,256)}}}function Ht(e,t){return e.id===t.id&&e.role===t.role&&e.label===t.label}function Ut(e,t){let n=0;for(let r of e)Vt(r).id===t&&(n+=1);return n}function Wt(e,t){if(e.id===void 0||Ut(t,e.id)<=1)return e;let{role:n,label:r}=e;return{role:n,...r===void 0?{}:{label:r}}}function Gt(e,t){let n=0;for(let r of e)if(r.parentIndex===t.parentIndex){if(r.index===t.index)return n;n+=1}return 0}function Kt(e,t){return{documentOrder:e.index,sibling:Gt(t,e)}}function qt(e,t){return e.documentOrder===t.documentOrder&&e.sibling===t.sibling}function Jt(e){return{...e.id===void 0?{}:{id:e.id},role:e.role,...e.label===void 0?{}:{label:e.label}}}function Yt(e,t){return t.id===void 0?e.role===t.role&&e.label===t.label:e.id===t.id}function Xt(e,t){if(e.length<t.length)return!1;for(let[n,r]of t.entries()){let t=e[n];if(!t||t.role!==r.role||r.label!==void 0&&t.label!==r.label)return!1}return!0}function Zt(e,t){let n=[];return e.id!==t.id&&n.push(`id: recorded=${e.id??`(none)`} observed=${t.id??`(none)`}`),e.role!==t.role&&n.push(`role: recorded=${e.role} observed=${t.role}`),e.label!==t.label&&n.push(`label: recorded=${e.label??`(none)`} observed=${t.label??`(none)`}`),n}function Qt(e){return e?`${e.role}${e.label?`/${e.label}`:``}`:`(missing)`}function $t(e,t){return!t||t.role!==e.role||e.label!==void 0&&t.label!==e.label}function en(e,t){for(let[n,r]of e.entries()){let e=t[n];if($t(r,e))return[`ancestry[${n}]: recorded=${Qt(r)} observed=${Qt(e)}`]}return[]}function tn(e,t,n={}){let r=[],i=p(e.type??``),a=nn(e,n.nodes),o=O(e.label),s=O(e.value),c=O(m(e)),l=n.action===`fill`;a&&r.push(`id=${D(a)}`),i&&o&&r.push(l?`role=${D(i)} label=${D(o)} editable=true`:`role=${D(i)} label=${D(o)}`),o&&r.push(l?`label=${D(o)} editable=true`:`label=${D(o)}`),s&&r.push(l?`value=${D(s)} editable=true`:`value=${D(s)}`),c&&c!==o&&c!==s&&r.push(l?`text=${D(c)} editable=true`:`text=${D(c)}`),i&&l&&!r.some(e=>e.includes(`editable=true`))&&r.push(`role=${D(i)} editable=true`);let u=ct(r);return u.length===0&&i&&u.push(l?`role=${D(i)} editable=true`:`role=${D(i)}`),u.length===0&&g(e)&&u.push(`visible=true`),u}function nn(e,t){let n=O(e.identifier);if(!n||!t)return n;let r=Vt(e).id;return r===void 0?n:Ut(t,r)>1?null:n}function D(e){return JSON.stringify(e)}function O(e){return e&&e.trim()||null}const rn=[`any`,`text`,`label`,`value`,`role`,`id`],an=[`text`,`label`,`value`,`role`,`id`];function on(e){let t=e?.toLowerCase();return t===`press`||t===`tap`?`click`:t}function sn(e){return e===`exists`||e===`wait`||e===`get_text`||e===`get_attrs`||e===`list`}function cn(e,t,n,r={}){let i=A(n);if(!i)return{matches:[],score:0};let a=0,o=[];for(let n of e){if(r.requireRect&&!n.rect)continue;let e=ln(n,t,i);if(!(e<=0)){if(e>a){a=e,o.length=0,o.push(n);continue}e===a&&o.push(n)}}return{matches:o,score:a}}function ln(e,t,n){switch(t){case`role`:return un(e,n);case`label`:return k(e.label,n);case`value`:return k(e.value,n);case`id`:return k(e.identifier,n);default:return Math.max(k(e.label,n),k(e.value,n),k(e.identifier,n))}}function k(e,t){let n=A(e??``);return n?n===t?2:+!!n.includes(t):0}function un(e,t){let n=Ae(e);return n.some(e=>A(e)===t)?2:+!!n.some(e=>dn(e).includes(t))}function dn(e){let t=e.lastIndexOf(`.`);return t===-1?e:e.slice(t+1)}function A(e){return e.trim().toLowerCase().replaceAll(/\s+/g,` `)}const fn=`find requires a value`,pn=`find actions: click (default; press/tap are aliases), list, focus, fill, type, exists, wait, get text, get attrs — there is no longpress/swipe find action. Run find "<text>" list to inspect every match with its @ref without acting, then dispatch the gesture on the chosen ref, e.g. longpress @eNN.`;function mn(e,t){if(e.length===0)return{ok:!1,code:`INVALID_ARGS`,message:`find requires a locator or text`};let n=_n([...e]);return n.query?t?.findFirst&&t?.findLast?{ok:!1,code:`INVALID_ARGS`,message:`find accepts only one of --first or --last`}:{ok:!0,parsed:n}:{ok:!1,code:`INVALID_ARGS`,message:fn}}const hn=[`exists`,`list`,`click`,`focus`];function gn(e){return hn.includes(e)}function _n(t){let n=`any`,r=0;an.includes(t[0])&&(n=t[0],r=1);let i=t[r]??``,a=t.slice(r+1);if(a.length===0)return{locator:n,query:i,action:`click`};let o=on(a[0]);if(gn(o))return{locator:n,query:i,action:o};if(o===`get`)return{locator:n,query:i,action:vn(a[1])};if(o===`wait`){let e=bn(a[1]);return{locator:n,query:i,action:`wait`,timeoutMs:e??void 0}}if(o===`fill`||o===`type`){let e=a.slice(1);return{locator:n,query:i,action:o,value:e.length===0?void 0:e.join(` `)}}throw new e(`INVALID_ARGS`,`Unsupported find action: ${a[0]}`,{hint:pn})}function vn(t){let n=t?.toLowerCase();if(n===`text`)return`get_text`;if(n===`attrs`)return`get_attrs`;throw new e(`INVALID_ARGS`,`find get only supports text or attrs`)}function yn(e,t){return e!==`any`||!t.includes(`=`)&&!t.includes(`||`)?null:y(t)?t:null}function bn(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}function xn(e,t,n){return t.terms.every(t=>Sn(e,t,n))}function Sn(e,t,n){switch(t.key){case`id`:return j(e.identifier,String(t.value));case`role`:return Cn(e,String(t.value));case`label`:return j(e.label,String(t.value));case`value`:return j(e.value,String(t.value));case`text`:return j(m(e),String(t.value));case`appname`:return j(e.appName,String(t.value));case`windowtitle`:return j(e.windowTitle,String(t.value));case`visible`:return g(e)===!!t.value;case`hidden`:return!g(e)==!!t.value;case`editable`:return ke(e,n)===!!t.value;case`selected`:return e.selected===!0==!!t.value;case`focused`:return e.focused===!0==!!t.value;case`enabled`:return e.enabled!==!1==!!t.value;case`hittable`:return e.hittable===!0==!!t.value;default:return!1}}function j(e,t){return A(e??``)===A(t)}function Cn(e,t){let n=A(t);return Ae(e).some(e=>A(e)===n)}function wn(e,t,n){let r=n.requireRect??!1,i=n.requireUnique??!0,a=[],o=null;for(let[s,c]of t.selectors.entries()){let t=jn(e,c,n.platform,r);if(a.push({selector:c.raw,matches:t.count}),!(t.count===0||!t.firstNode)){if(o??={selector:c,selectorIndex:s,matchedNodes:t.candidates},i&&t.count!==1){if(!n.disambiguateAmbiguous||!t.disambiguated||!t.tiebreak)continue;return{matchedNodes:t.candidates,firstMatch:o,resolution:{node:t.disambiguated,selector:c,selectorIndex:s,matches:t.count,diagnostics:a,disambiguation:{matchCount:t.count,tiebreak:t.tiebreak,alternatives:t.candidates.filter(e=>e!==t.disambiguated)}}}}return{matchedNodes:t.candidates,firstMatch:o,resolution:{node:t.firstNode,selector:c,selectorIndex:s,matches:t.count,diagnostics:a}}}}return{resolution:null,matchedNodes:o?.matchedNodes??[],firstMatch:o}}function Tn(e,t,n){return wn(e,t,n).resolution}function En(e,t,n){let r=n.requireRect??!1;for(let[i,a]of t.selectors.entries()){let t=e.filter(e=>r&&!e.rect?!1:xn(e,a,n.platform));if(t.length>0)return{selector:a,selectorIndex:i,matchedNodes:t}}return null}function Dn(e,t,n){let r=n.requireRect??!1,i=[];for(let[a,o]of t.selectors.entries()){let t=Fn(e,o,n.platform,r);if(i.push({selector:o.raw,matches:t}),t>0)return{selectorIndex:a,selector:o,matches:t,diagnostics:i}}return null}const On=`Snapshot refs expire when the UI changes. Run snapshot -i and retry with a fresh @ref.`;function kn(e){return e.some(e=>e.matches>1)?`Add more terms to disambiguate (e.g. role=button text="Sign in"), use an @ref from snapshot -i, or use find <text> --first/--last.`:`Selector text/label values match exactly (quote multi-word values: text="Sign in"). Run snapshot -i to see current elements and refs, or use find <text> for contains matching.`}function An(e,t,n){if(t.length===0)return`Selector did not match: ${e}`;let r=t.map(e=>`${e.selector} -> ${e.matches}`).join(`, `);return n.unique??!0?`Selector did not resolve uniquely (${r})`:`Selector did not match (${r})`}function jn(e,t,n,r){let i=0,a=null,o=[],s={best:null,bestVisible:!1,tie:!1},c=xe(e).isVisibleOnScreen;for(let l of e)r&&!l.rect||xn(l,t,n)&&(i+=1,a??=l,o.push(l),Mn(s,l,c));return{count:i,firstNode:a,disambiguated:s.tie?null:s.best,tiebreak:s.tie?null:Nn(o,s.best,c),candidates:o}}function Mn(e,t,n){if(!e.best){e.best=t;return}e.bestVisible||=n(e.best);let r=n(t);if(r!==e.bestVisible){r&&(e.best=t,e.bestVisible=!0,e.tie=!1);return}let i=In(t,e.best);i.result>0?(e.best=t,e.tie=!1):i.result===0&&(e.tie=!0)}function Nn(e,t,n){if(!t)return null;let r=null;for(let i of e)i!==t&&(!r||Pn(i,r,n).result>0)&&(r=i);return r?Pn(t,r,n).criterion:null}function Pn(e,t,n){let r=n(e);return r===n(t)?In(e,t):{result:r?1:-1,criterion:`visible`}}function Fn(e,t,n,r){let i=0;for(let a of e)r&&!a.rect||xn(a,t,n)&&(i+=1);return i}function In(e,t){let n=e.depth??0,r=t.depth??0;if(n!==r)return{result:n>r?1:-1,criterion:`deepest`};let i=Ln(e),a=Ln(t);return i===a?{result:0,criterion:null}:{result:i<a?1:-1,criterion:`smallest-area`}}function Ln(e){return e.rect?e.rect.width*e.rect.height:1/0}const Rn={act:{ambiguity:`reject-candidates`,requireRect:!0},actCoveredDiagnosis:{ambiguity:`first-match`,requireRect:!0},readText:{ambiguity:`disambiguate`,requireRect:!1},readUnique:{ambiguity:`fail-closed`,requireRect:!1},readAny:{ambiguity:`first-match`,requireRect:!1},wait:{ambiguity:`first-match`,requireRect:!1},findAct:{ambiguity:`reject-candidates`,requireRect:!0},readList:{ambiguity:`reject-candidates`,requireRect:!1},cropTarget:{ambiguity:`fail-closed`,requireRect:!0}};function zn(e){return e.ambiguity===`first-match`?{requireRect:e.requireRect,requireUnique:!1}:{requireRect:e.requireRect,requireUnique:!0,disambiguateAmbiguous:e.ambiguity===`disambiguate`}}function Bn(e,t){let n=e===`is`?tt([...t]).split:x([...t]);return n?y(n.selectorExpression)?{kind:`expression`,expression:n.selectorExpression,rest:n.rest}:{kind:`invalid`}:{kind:`not-applicable`}}function Vn(e){return{platform:e.platform,...zn({ambiguity:e.allowDisambiguation?`disambiguate`:`fail-closed`,requireRect:e.requireRect})}}function Hn(e,t,n){let r=y(e);if(!r)return{kind:`unresolved`,reason:`parse-invalid`,matchedNodes:[]};let{resolution:i,matchedNodes:a}=wn(t,r,Vn(n));return i?{kind:`resolved`,winner:i.node,matchedNodes:a,matchCount:a.length,...i.disambiguation?{disambiguation:{tiebreak:i.disambiguation.tiebreak,matchCount:i.disambiguation.matchCount,alternatives:i.disambiguation.alternatives}}:{}}:{kind:`unresolved`,reason:a.length>0?`ambiguous`:`no-match`,matchedNodes:a}}function Un(e,t,n={}){return tn(e,t,n)}function Wn(e,t,n){let r=y(e);if(!r)return;let i=Tn(t,r,Vn(n));if(i)return{node:i.node,basis:Kn(i.selector)}}function Gn(e){if(!e)return;let t=y(e);if(!t)return;let n=t.selectors.flatMap(e=>e.terms.flatMap(e=>(e.key===`label`||e.key===`text`||e.key===`id`)&&typeof e.value==`string`?[e.value]:[]));if(n.length===0)return;let r=n[0];return r&&n.every(e=>e===r)?r:void 0}function Kn(e){let t=new Set(e.terms.map(e=>e.key));if(t.has(`id`))return`id`;let n=t.has(`role`),r=t.has(`label`)||t.has(`text`);return n&&r?`role-label`:r||t.has(`value`)?`label`:`other`}function qn(e,t){let n=y(e);if(!n)return e.includes(`=`)||e.includes(`||`)?null:e;let r=new Set(t.textKeys),i=t.textAliases??{};return n.selectors.length>1?Jn(n.selectors,r,i):Yn(n.selectors[0],r,new Set(t.booleanKeys),i)}function Jn(e,t,n){let r=e.map(e=>{let r=e.terms.length===1?e.terms[0]:void 0;return r&&Xn(r.key,t,n)&&typeof r.value==`string`?r.value:void 0}),i=r[0];return i!==void 0&&r.every(e=>e===i)?i:null}function Yn(e,t,n,r){if(!e)return null;let i={},a=0;for(let o of e.terms){if(Xn(o.key,t,r)&&typeof o.value==`string`)a+=1;else if(!Zn(o,n,`boolean`))return null;i[r[o.key]??o.key]=o.value}return a<=1&&Object.keys(i).length>0?i:null}function Xn(e,t,n){return t.has(e)||n[e]!==void 0}function Zn(e,t,n){return t.has(e.key)&&typeof e.value===n}function Qn(e){let t=y(e);if(!t||t.selectors.length!==1)return null;let n=t.selectors[0];if(!n||n.terms.length!==1)return null;let r=n.terms[0];return!r||typeof r.value!=`string`||r.key!==`id`&&r.key!==`label`&&r.key!==`text`&&r.key!==`value`?null:{key:r.key,value:r.value,raw:n.raw}}function $n(e,t){if(!t)return!1;let n=y(e);return n?n.selectors.some(e=>e.terms.some(e=>(e.key===`text`||e.key===`label`||e.key===`value`)&&typeof e.value==`string`&&e.value.includes(t))):!1}function er(e,t){return y(e)?.selectors.some(e=>e.terms.some(e=>e.key===t))??!1}function tr(e){return v(e).selectors.map(e=>e.raw)}function nr(e){return y(e)!==null}function rr(e){v(e)}function M(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}const ir=new Set([`exists`,`present`,`appears`,`gone`,`disappears`]);function ar(e){let t=e[0];if(t===void 0)return null;let n=M(t);if(n!==null)return{kind:`sleep`,durationMs:n};let r=M(e.at(-1));return t===`text`?or(e,r):t===`stable`?sr(e):t===`absent`?cr(e,r):t.startsWith(`@`)?{kind:`ref`,rawRef:t,timeoutMs:r}:ur(e,r)}function or(e,t){return{kind:`text`,text:(t===null?e.slice(1).join(` `):e.slice(1,-1).join(` `)).trim(),timeoutMs:t}}function sr(e){let t=e.slice(1),n=t.length>1?M(t[1]):null;return{kind:`stable`,quietMs:t.length>0?M(t[0]):null,timeoutMs:n}}function cr(e,t){let n=t===null?e.slice(1):e.slice(1,-1),r=x(n);return n.length>0&&r?.rest.length===0&&nr(r.selectorExpression)?{kind:`absent`,selectorExpression:r.selectorExpression,timeoutMs:t}:{kind:`invalid`,reason:`absent-selector-required`,message:lr(n)}}function lr(e){let t=e.join(` `);return t.length>0?`wait absent requires one valid selector; received "${t}". Use wait absent '<selector>' [timeoutMs].`:`wait absent requires <selector> [timeoutMs].`}function ur(e,t){let n=t===null?e.slice():e.slice(0,-1),r=x(n);return r&&r.rest.length===0&&nr(r.selectorExpression)?{kind:`selector`,selectorExpression:r.selectorExpression,timeoutMs:t}:dr(n,r)||{kind:`text`,text:(t===null?e.join(` `):e.slice(0,-1).join(` `)).trim(),timeoutMs:t}}function dr(e,t){for(let t of e){let n=Le(t);if(n)return{kind:`invalid`,reason:`unknown-selector-key`,message:fr(n,e)}}return t&&t.rest.length>0?{kind:`invalid`,reason:`selector-shaped-text`,message:pr(t,e)}:e.some(e=>b(e))?{kind:`invalid`,reason:`selector-shaped-text`,message:mr(e)}:null}function fr(e,t){let n=t.join(` `),r=Fe(e.key)?`role=${e.key} label="${e.value}"`:`label="${e.value}"`;return`Unknown selector key "${e.key}" in "${n}". Supported: ${Ne.join(`, `)}. Use wait '${r}' [timeoutMs] to wait for the selector, or wait text '${n}' [timeoutMs] to wait for the literal text "${n}".`}function pr(e,t){let n=t.join(` `);return`Selector ${e.selectorExpression} is followed by unexpected extra arguments: "${e.rest.join(` `)}". Selector values with spaces need quotes, e.g. label="Sign in". Use wait '<selector>' [timeoutMs], or wait text '${n}' [timeoutMs] to wait for the literal text "${n}".`}function mr(e){let t=e.join(` `),n=e.filter(e=>!b(e)),r=e.filter(e=>b(e));if(n.length>0){let e=n[0],i=ir.has(e.toLowerCase())?` "${e}" describes a condition, not a selector key. Use the selector form: `+(e.toLowerCase()===`gone`||e.toLowerCase()===`disappears`?`wait absent '${r.join(` `)}' [timeoutMs] to wait for zero matches.`:`wait '${r.join(` `)}' [timeoutMs] to wait for it to appear.`):` "${e}" is not a recognized selector key (${Ne.join(`, `)}).`;return`"${t}" mixes plain word "${e}" with selector-shaped "${r.join(` `)}", so it is neither a valid selector nor safe as literal text.${i} Use wait '<selector>' [timeoutMs] for a selector, or wait text '${t}' [timeoutMs] to wait for the literal text "${t}".`}return`"${t}" looks like a selector key but is not a valid selector expression. Use wait '<selector>' [timeoutMs], e.g. wait '${e[0]}="value"' [timeoutMs], or wait text '${t}' [timeoutMs] to wait for the literal text "${t}".`}function hr(e){let t=ar(e);return t?t.kind===`sleep`?t.durationMs:t.kind===`invalid`?null:t.timeoutMs:null}const gr=3e4,_r=24e4,vr=3e5,N={budget:{source:`none`},envelopeMs:9e4,onTimeout:`reset-daemon`},yr={budget:{source:`none`},envelopeMs:255e3,onTimeout:`reset-daemon`};function br(e,t){if(e.envelopeMs===`unbounded`)return;let n={...e,envelopeMs:e.envelopeMs};return(Sr(n,t.positionals??[])??Cr(n,t.flags)??n.envelopeMs)+xr(e,t.flags)}function xr(e,t){if(e.targetReadiness!==`budgeted`)return 0;let n=t?.readinessTimeoutMs;return typeof n!=`number`||!Number.isInteger(n)||n<=0?0:Math.min(n,2e3)}function Sr(e,t){if(e.budget.source!==`positional-parser`)return;let n=e.budget.parser(t);return n===null?void 0:Er(e,n)}function Cr(e,t){if(e.budget.source===`flag`)return e.budget.envelope===`widen`?Tr(e,e.budget,t):e.budget.envelope===`margin`?wr(e,t):typeof t?.timeoutMs==`number`?t.timeoutMs:e.envelopeMs}function wr(e,t){let n=typeof t?.timeoutMs==`number`?Er(e,t.timeoutMs):e.envelopeMs;return typeof t?.waitMs==`number`?Dr({...e,envelopeMs:n},t.waitMs):n}function Tr(e,t,n){if(n?.settle!==!0)return e.envelopeMs;let r=typeof n.timeoutMs==`number`?n.timeoutMs:t.defaultBudgetMs;return typeof r==`number`?Dr(e,r):e.envelopeMs}function Er(e,t){return Math.max(e.envelopeMs,t+gr)}function Dr(e,t){return Math.max(e.envelopeMs,e.envelopeMs+t+gr)}const Or={click:`settle-and-verify`,press:`settle-and-verify`,fill:`settle-and-verify`,longpress:`settle`,hover:`settle`,scroll:`settle`,back:`settle`};function kr(e){if(e!==void 0)return Or[e]}function P(t){return new e(`COMMAND_FAILED`,t,{reason:`runtime-contract-invalid`,hint:`This is an agent-device runtime contract bug; report the selected device and command.`})}function Ar(e){if(!i(e))throw TypeError(`Unknown local runtime family: ${String(e)}`);return Object.freeze({kind:`local-family`,family:e})}function jr(e,t){let n=e.trim(),r=t.trim();if(n.length===0||r.length===0)throw TypeError(`Provider runtime owner requires non-empty provider and instance identities`);return Object.freeze({kind:`provider-runtime`,provider:n,instance:r})}function Mr(e){let t=e.trim();if(t.length===0)throw TypeError(`Managed local runtime owner requires a non-empty allocator instance identity`);return Object.freeze({kind:`managed-local`,instance:t})}function Nr(e){switch(e.kind){case`local-family`:return`local:${e.family}`;case`managed-local`:return`managed:${JSON.stringify([e.instance])}`;case`provider-runtime`:return`provider:${JSON.stringify([e.provider,e.instance])}`}}function Pr(e,t){return Nr(e)===Nr(t)}function Fr(e,t){return Object.freeze(t===void 0?{available:!1,reason:e}:{available:!1,reason:e,hint:t})}function Ir(e,t){return e.available?t():{}}function Lr(e){if(!F(e.requesterId)||!F(e.identityIncarnationId)||!zr(e.requestGeneration))throw TypeError(`Managed binding fence requires non-empty requester and identity incarnation ids and a non-negative integer request generation`);return Object.freeze({token:JSON.stringify([e.requesterId,e.identityIncarnationId]),generation:e.requestGeneration})}function Rr(e){let t=Br(e.token);if(!t||t.length!==2)return null;let[n,r]=t;if(!F(n)||!F(r)||!zr(e.generation))return null;let i=Object.freeze({requesterId:n,requestGeneration:e.generation,identityIncarnationId:r});return Lr(i).token===e.token?i:null}function zr(e){return Number.isInteger(e)&&e>=0}function F(e){return typeof e==`string`&&e.trim().length>0}function Br(e){try{let t=JSON.parse(e);return Array.isArray(t)?t:null}catch{return null}}function Vr(e,t){let n={},r={};for(let i of t.required){let t=Hr(e.facts.operations,i);if(n[i]=t,!t.available)throw qr(i,t);r[i]=Gr(e.operations,i)}for(let i of t.preferred){let t=Hr(e.facts.operations,i);n[i]=t,t.available&&(r[i]=Gr(e.operations,i))}for(let i of t.conditional??[]){let t=Hr(e.facts.operations,i);n[i]=t,t.available&&(r[i]=Gr(e.operations,i))}return Object.freeze({device:e.device,owner:e.owner,facts:Object.freeze(n),operations:Object.freeze(r)})}function Hr(e,t){let n=e[t];if(!Ur(n))throw P(`Runtime owner omitted the ${t} fact`);let r=Wr(n);if(r)return r;throw P(`Runtime owner returned an invalid ${t} fact`)}function Ur(e){return typeof e==`object`&&!!e&&`available`in e}function Wr(e){if(e.available===!0)return Object.freeze({available:!0});if(e.available===!1&&Kr(e.reason)&&(e.hint===void 0||typeof e.hint==`string`))return Fr(e.reason,e.hint)}function Gr(e,t){let n=e[t];if(typeof n!=`function`)throw P(`Runtime owner advertised ${t} without an implementation`);return n}function Kr(e){return e===`unsupported-platform-leaf`||e===`unsupported-device-kind`||e===`unsupported-device-backend`||e===`unsupported-device-scope`||e===`unsupported-provider-mode`||e===`owner-capability-missing`}function qr(t,n){return new e(`UNSUPPORTED_OPERATION`,`Runtime operation ${t} is unavailable`,{reason:n.reason,hint:n.hint})}function Jr(e){return JSON.stringify({required:[...e.required].sort(),preferred:[...e.preferred].sort(),conditional:[...e.conditional??[]].sort()})}function Yr(){return e=>{let t=Xr(e.required,`required`),n=Xr(e.preferred??[],`preferred`),r=Xr(e.conditional??[],`conditional`),i=[[`required`,t],[`preferred`,n],[`conditional`,r]];for(let e=0;e<i.length;e+=1){let t=i[e];if(t)for(let n of i.slice(e+1)){let e=n[1].find(e=>t[1].includes(e));if(e!==void 0)throw TypeError(`Runtime operation cannot be both ${t[0]} and ${n[0]}: ${e}`)}}return Object.freeze(r.length===0?{required:t,preferred:n}:{required:t,preferred:n,conditional:r})}}function Xr(e,t){let n=[...e];if(new Set(n).size!==n.length)throw TypeError(`Runtime use contains duplicate ${t} operations`);return Object.freeze(n)}const I=Yr(),Zr=I({required:[`bootTarget`]}),Qr=I({required:[`bootTargetHeadless`]}),$r=I({required:[`ensureReady`,`listApps`]}),ei=I({required:[`captureSnapshot`]}),ti=I({required:[`setViewport`]}),ni=I({required:[`focusPoint`]}),ri=I({required:[`typeText`]}),ii=I({required:[`back`]}),ai=I({required:[`home`]}),oi=I({required:[`setOrientation`]}),si=I({required:[`setFoldPose`]}),ci=I({required:[`tvRemote`]}),li=I({required:[`keyboardStatus`]}),ui=I({required:[`keyboardDismiss`]}),di=I({required:[`keyboardEnter`]}),fi=I({required:[`appSwitcher`]}),pi=I({required:[`actionButton`]}),mi=I({required:[`triggerAppEvent`]}),hi=I({required:[`setSetting`]}),gi=I({required:[`readSetting`]}),_i=I({required:[`readAlert`]}),vi=I({required:[`awaitAlert`]}),yi=I({required:[`acceptAlert`]}),bi=I({required:[`dismissAlert`]}),xi=I({required:[`readClipboard`]}),Si=I({required:[`writeClipboard`]}),Ci=I({required:[`perfFrames`]}),wi=I({required:[`perfMemorySample`]}),Ti=I({required:[`perfMemorySnapshot`]}),Ei=I({required:[`perfNativeCaptureStart`]}),Di=I({required:[`perfNativeCaptureReattach`,`perfNativeCaptureCleanup`]}),Oi=I({required:[`perfProfileReport`]}),ki=Object.freeze([Ci,wi,Ti,Ei,Di,Oi]),L=I({required:[`tapPoint`]}),Ai=I({required:[`captureSnapshot`,`tapPoint`],preferred:[`tapRef`],conditional:[`tapElementSelector`]}),ji=I({required:[`longPressPoint`]}),Mi=I({required:[`captureSnapshot`,`longPressPoint`]}),Ni=I({required:[`hoverPoint`]}),Pi=I({required:[`captureSnapshot`,`hoverPoint`],preferred:[`hoverRef`]}),Fi=I({required:[`fillPoint`]}),Ii=I({required:[`captureSnapshot`,`fillPoint`],preferred:[`fillRef`]}),Li=Object.freeze([L,Ai]),Ri=Li,zi=Object.freeze([ji,Mi]),Bi=Object.freeze([Ni,Pi]),Vi=Object.freeze([Fi,Ii]);function Hi(e,t){switch(e){case`click`:case`press`:return t?{kind:`captured-tap`,use:Ai}:{kind:`tap-point`,use:L};case`fill`:return t?{kind:`captured-fill`,use:Ii}:{kind:`fill-point`,use:Fi};case`longpress`:return t?{kind:`captured-long-press`,use:Mi}:{kind:`long-press-point`,use:ji};case`hover`:return t?{kind:`captured-hover`,use:Pi}:{kind:`hover-point`,use:Ni}}}const Ui=I({required:[`performGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Wi=I({required:[`performDirectionalFlingPlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Gi=I({required:[`performMultiTouchGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Ki=I({required:[`performTargetAuthoredDrag`,`captureSnapshot`],preferred:[`gestureViewport`]}),qi=I({required:[`gestureViewport`]}),Ji=I({required:[`scrollDirection`],conditional:[`captureSnapshot`]}),Yi=I({required:[`scrollDirection`,`captureSnapshot`]}),Xi=Object.freeze({plan:Ui,"directional-fling":Wi,"multi-touch":Gi,"target-authored-drag":Ki}),Zi=Object.freeze([Ui,Wi,Gi,Ki]),Qi=Object.freeze([Ui]),$i=Object.freeze([Ji,Yi]);function ea(e){return e.intent===`pan`?(`pointerCount`in e?e.pointerCount:1)===2:e.intent===`pinch`||e.intent===`rotate`||e.intent===`transform`}function ta(e){return e.intent===`drag`?`target-authored-drag`:ea(e)?`multi-touch`:e.intent===`fling`&&`direction`in e?`directional-fling`:`plan`}function na(e){let t=ta(e);switch(t){case`plan`:return R(t);case`directional-fling`:return R(t);case`multi-touch`:return R(t);case`target-authored-drag`:return R(t)}}function R(e){let t=Xi[e];return Object.freeze({tier:e,operation:t.required[0],use:t})}function ra(e){return e.until===void 0?e.edge===void 0?Object.freeze({kind:`direction`,use:Ji}):Object.freeze({kind:`edge`,edge:e.edge,use:Yi}):Object.freeze({kind:`until`,until:e.until,use:Yi})}const ia=I({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`]}),aa=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),oa=I({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`,`captureSnapshotWithoutActiveApp`]}),sa=I({required:[`captureSnapshot`]}),ca=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),la=I({required:[`captureSnapshot`],preferred:[`readTextAtPoint`]}),ua=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],preferred:[`readTextAtPoint`]}),da=I({required:[`captureSnapshot`],conditional:[`findText`]}),fa=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],conditional:[`findText`]}),pa=Object.freeze([sa,ca]),ma=Object.freeze([la,ua]),ha=I({required:[`captureSnapshot`,`focusPoint`]}),ga=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`]}),_a=I({required:[`captureSnapshot`,`focusPoint`,`typeText`]}),va=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`,`typeText`]}),ya=Object.freeze([la,ua,sa,ca,ha,ga,_a,va]),ba=Object.freeze([da,fa]),xa=Object.freeze([ei,ia,aa,oa]),z=Object.freeze({"capture-only":pa,"element-text":ma,"wait-observation":ba,"find-focus":Object.freeze([ha,ga]),"find-type":Object.freeze([_a,va])});function Sa(e){return e===`focus`?`find-focus`:e===`type`?`find-type`:`capture-only`}function Ca(e){switch(e.intent){case`capture-only`:return B(e.hasActiveApp,e.intent,z[e.intent]);case`element-text`:return B(e.hasActiveApp,e.intent,z[e.intent]);case`wait-observation`:return B(e.hasActiveApp,e.intent,z[e.intent]);case`find-focus`:return B(e.hasActiveApp,e.intent,z[e.intent]);case`find-type`:return B(e.hasActiveApp,e.intent,z[e.intent])}}function B(e,t,n){return Object.freeze(e?{kind:`selector-active-app`,intent:t,operation:`captureSnapshot`,use:n[0]}:{kind:`selector-without-active-app`,intent:t,operation:`captureSnapshotWithoutActiveApp`,use:n[1]})}function wa(e){return e.customActions?e.hasActiveApp?Object.freeze({kind:`custom-actions-active-app`,operation:`captureSnapshotWithCustomActions`,use:ia}):Object.freeze({kind:`custom-actions-without-active-app`,operation:`captureSnapshotWithCustomActions`,use:oa}):e.hasActiveApp?Object.freeze({kind:`active-app`,operation:`captureSnapshot`,use:ei}):Object.freeze({kind:`without-active-app`,operation:`captureSnapshotWithoutActiveApp`,use:aa})}const Ta=I({required:[`captureScreenshot`]}),Ea=I({required:[`captureScreenshot`,`captureSnapshot`]}),Da=Object.freeze([Ta,Ea]);function Oa(e){return e.cropOn?Object.freeze({kind:`capture-with-crop-on`,use:Ea}):e.overlayRefs?Object.freeze({kind:`capture-with-overlay-refs`,use:Ea}):Object.freeze({kind:`capture`,use:Ta})}const ka=Object.freeze([Zr,Qr]),Aa=Object.freeze({kind:`boot-target`,operation:`bootTarget`,use:Zr}),ja=Object.freeze({kind:`boot-target-headless`,operation:`bootTargetHeadless`,use:Qr});function Ma(e){return e.headless?ja:Aa}const Na=I({required:[`ensureReady`,`appState`]}),Pa=Object.freeze([Na]),Fa=I({required:[`shutdownTarget`]}),Ia=Object.freeze([xi,Si]),La=Object.freeze([hi,gi]),Ra=[`text-size`],za=Object.freeze({kind:`write`,use:hi});function Ba(e){let t=Va(e?.[0]);return e?.length!==1||t===void 0?za:Ra.includes(t)?Object.freeze({kind:`read`,setting:t,use:gi}):za}function Va(e){let t=e?.trim().toLowerCase();return Ra.find(e=>e===t)}const Ha=Object.freeze([_i,vi,yi,bi]),Ua=Object.freeze([li,ui,di]),Wa=I({required:[`deployApp`]}),Ga=I({required:[`ensureReady`,`materializeAppSource`,`deployMaterializedApp`]}),Ka=I({required:[`ensureReady`,`sendPushNotification`]}),qa=I({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`]}),Ja=I({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`]}),Ya=I({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`clearRuntimeHints`]}),Xa=I({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`,`clearRuntimeHints`]});function Za(e){return e.applyRuntimeHints&&e.clearRemovedRuntimeHints?Object.freeze({kind:`open-apply-and-clear-runtime-hints`,use:Xa}):e.applyRuntimeHints?Object.freeze({kind:`open-apply-runtime-hints`,use:Ja}):e.clearRemovedRuntimeHints?Object.freeze({kind:`open-clear-runtime-hints`,use:Ya}):Object.freeze({kind:`open`,use:qa})}const Qa=Object.freeze([qa,Ja,Ya,Xa]),$a=I({required:[`closeApplication`,`finalizeApplicationClose`]}),eo=I({required:[`closeApplication`,`finalizeApplicationClose`,`clearRuntimeHints`]}),to=Object.freeze([$a,eo]),no=I({required:[`finalizeApplicationClose`]}),ro=I({required:[`finalizeApplicationClose`,`clearRuntimeHints`]}),io=I({required:[`prepareAppleRunner`]}),ao=I({required:[`clearRuntimeHints`]}),oo=I({required:[`configureProviderPortReverse`]}),so=Object.freeze([ao,oo]),V=I({required:[`appLogInspect`]}),co=I({required:[`appLogInspect`,`appLogDoctor`]}),lo=I({required:[`appLogInspect`,`appLogStart`]}),uo=I({required:[],preferred:[`appLogInspect`]}),fo=Object.freeze([V,co,lo]);function po(t){let n=(t.action??`path`).toLowerCase();if(t.restart&&n!==`clear`)throw new e(`INVALID_ARGS`,`logs --restart is only supported with logs clear`);switch(n){case`path`:return Object.freeze({kind:`path`,requiresAppSession:!1,use:V});case`start`:return Object.freeze({kind:`start`,requiresAppSession:!0,use:lo});case`stop`:return Object.freeze({kind:`stop`,requiresAppSession:!1,use:V});case`doctor`:return Object.freeze({kind:`doctor`,requiresAppSession:!1,use:co});case`mark`:return Object.freeze({kind:`mark`,marker:t.marker??``,requiresAppSession:!1,use:V});case`clear`:return t.restart?Object.freeze({kind:`clear-restart`,requiresAppSession:!0,use:lo}):Object.freeze({kind:`clear`,requiresAppSession:!1,use:V});default:throw new e(`INVALID_ARGS`,`logs requires path, start, stop, doctor, mark, or clear`)}}const mo=I({required:[`audioProbeStart`]}),ho=I({required:[`audioProbeReattach`,`audioProbeCleanup`]}),go=I({required:[`audioProbeQuery`]}),_o=Object.freeze([mo,ho,go]);function vo(e){if(e.mode===`query`)return Object.freeze({kind:`query`,action:e.probeAction,use:go});switch(e.probeAction){case`start`:return Object.freeze({kind:`capture-start`,use:mo});case`status`:return Object.freeze({kind:`capture-status`});case`stop`:return Object.freeze({kind:`capture-stop`})}}const yo=[`probe`],bo=[`start`,`status`,`stop`];function xo(t){let n=(t?.[0]??`probe`).toLowerCase();if(!yo.includes(n))throw new e(`INVALID_ARGS`,`audio requires probe`);let r=(t?.[1]??`status`).toLowerCase();if(!bo.includes(r))throw new e(`INVALID_ARGS`,`audio probe requires ${bo.join(`, `)}`);if(r!==`start`&&t&&t.length>2)throw new e(`INVALID_ARGS`,`audio probe duration and bucket are only supported with audio probe start`);return Object.freeze({probeAction:r,durationMs:So(t?.[2],{defaultValue:1e4,min:100,max:12e4,message:`audio probe duration must be an integer in range 100..120000 ms`}),bucketMs:So(t?.[3],{defaultValue:1e3,min:100,max:1e4,message:`audio probe bucket must be an integer in range 100..10000 ms`})})}function So(t,n){if(t===void 0)return n.defaultValue;let r=Number.parseInt(t,10);if(!Number.isInteger(r)||String(r)!==t||r<n.min||r>n.max)throw new e(`INVALID_ARGS`,n.message);return r}const Co=I({required:[`networkDump`]}),wo=I({required:[],preferred:[`networkDump`]}),To=[`dump`,`log`],Eo=[`summary`,`headers`,`body`,`all`];function Do(t){let n=(t.action??`dump`).toLowerCase(),r=(t.include??`summary`).toLowerCase();if(!Oo(n))throw new e(`INVALID_ARGS`,`network requires dump or log`);if(!ko(r))throw new e(`INVALID_ARGS`,`network --include must be summary, headers, body, or all`);return Object.freeze({action:n,include:r,use:Co})}function Oo(e){return To.some(t=>t===e)}function ko(e){return Eo.some(t=>t===e)}function Ao(e){let t=new Map;for(let n of e){if(!i(n.family))throw TypeError(`Unknown platform family registration: ${String(n.family)}`);if(t.has(n.family))throw TypeError(`Duplicate platform family registration: ${n.family}`);t.set(n.family,jo(n))}let n=r.filter(e=>!t.has(e));if(n.length>0)throw TypeError(`Missing platform family registrations: ${n.join(`, `)}`);let a=Object.freeze([...r]),o=Object.freeze(a.map(e=>Mo(t,e)));return Object.freeze({families:a,modules:o,get:e=>Mo(t,e)})}function jo(e){return Object.freeze({...e})}function Mo(e,t){let n=e.get(t);if(!n)throw TypeError(`Missing platform family registration: ${t}`);return n}const No=Object.freeze({kind:`device-inventory`});function Po(e){if(typeof e!=`object`||!e)throw Vo();let t=e,n=Object.keys(t).sort();if(!(t.kind===`none`&&H(n,[`kind`]))&&!(t.kind===`host`&&H(n,[`kind`]))&&!(t.kind===`inventory`&&H(n,[`kind`,`use`])&&Io(t.use))&&!(t.kind===`device-runtime`&&H(n,[`kind`,`use`])&&Lo(t.use))&&!(t.kind===`device-runtime`&&(H(n,[`kind`,`uses`])||H(n,[`kind`,`selectUses`,`uses`])&&typeof t.selectUses==`function`)&&Fo(t.uses)))throw Vo()}function Fo(e){if(!Array.isArray(e)||e.length===0||!e.every(Lo))return!1;let t=e.map(Jr);return new Set(t).size===t.length}function Io(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.kind===`device-inventory`&&H(Object.keys(t).sort(),[`kind`])}function Lo(e){if(typeof e!=`object`||!e)return!1;let t=e,n=[zo(t.required),zo(t.preferred),zo(t.conditional??[])];if(!Ro(n))return!1;let r=n.flat();return new Set(r).size===r.length&&H(Object.keys(t).sort(),t.conditional===void 0?[`preferred`,`required`]:[`conditional`,`preferred`,`required`])}function Ro(e){return e.every(e=>e!==null&&Bo(e))}function zo(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?e:null}function Bo(e){return new Set(e).size===e.length}function H(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function Vo(){return TypeError(`Command platform execution must declare exactly one of none, host, inventory, or device-runtime`)}const Ho=I({required:[`screenRecordingStart`]}),Uo=I({required:[`screenRecordingReattach`,`screenRecordingCleanup`]}),Wo=I({required:[]}),Go=I({required:[],preferred:[`screenRecordingStart`]}),Ko=Object.freeze([Ho,Uo]);function qo(t){switch((t.action??``).toLowerCase()){case`start`:if(!Jo(t.scope??`app`))throw new e(`INVALID_ARGS`,`record scope must be app, device, or system`);return Object.freeze({kind:`start`,use:Ho});case`stop`:return t.hasLiveHandle===!0?Object.freeze({kind:`stop-live`,use:Wo}):Object.freeze({kind:`stop-recovery`,use:Uo});default:throw new e(`INVALID_ARGS`,`record requires start or stop`)}}function Jo(e){return e===`app`||e===`device`||e===`system`}function Yo(e){if(Po(e),e.kind!==`device-runtime`||!(`uses`in e))throw Xo();let t=e.uses.map(Jr),n=Ko.map(Jr),r=new Set(t),i=new Set(n);if(t.length!==n.length||r.size!==t.length||[...r].some(e=>!i.has(e)))throw Xo()}function Xo(){return TypeError(`Record runtime execution must declare exactly the uses selected by its two runtime-bearing plans`)}function Zo(e){let t=e.platformExecution;if(t===void 0)throw TypeError(`Command descriptor "${e.name}" must declare platformExecution (none, host, inventory, or device-runtime); there is no registry-entry default`);return Po(t),t}const U={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0},W={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0,selectorValidationExempt:!0},G=()=>!0,Qo=e=>(e.positionals?.[0]??``).toLowerCase()===`start`,$o=e=>e.command===`test`&&(typeof e.flags?.shardAll==`number`||typeof e.flags?.shardSplit==`number`),es=e=>(e.positionals?.length??0)===0?{kind:`unconditional`}:void 0,ts=e=>{let t=e.flags?.leaseProvider;return e.flags?.leaseId===void 0&&typeof t==`string`&&(e.flags?.platform===`android`||e.flags?.platform===`ios`)?{kind:`provider-app-catalog`,provider:t}:void 0},ns=new Set([`status`,`get`]),rs=e=>ps(e,ns,`status`),is=new Set([`get`,`wait`]),as=e=>ps(e,is,`get`),os=e=>ms(e,ns,`status`),ss=e=>ms(e,is,`get`),cs=e=>{try{return sn(_n(e.positionals??[]).action)?`observes-app`:`mutates-app`}catch{return`mutates-app`}},ls=e=>ms(e,new Set([`read`]),``),us=e=>Ba(e.positionals).kind===`read`,ds=e=>us(e)?`observes-app`:`mutates-app`,fs=e=>us(e)?`preserve`:`may-invalidate`;function ps(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`preserve`:`may-invalidate`}function ms(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`observes-app`:`mutates-app`}const K={kind:`none`},hs={kind:`host`},q={recordsSessionAction:!0,recordingEffect:`mutates-app`,deviceClaimPolicy:`require-owner`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0},J={targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},recordsSessionAction:!0,recordingEffect:`mutates-app`,deviceClaimPolicy:`require-owner`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0}},Y={...N,onTimeout:`preserve-daemon`},gs={...N,envelopeMs:18e4},_s={...N,onTimeout:`preserve-daemon`},vs={..._s,envelopeMs:33e4},ys={...N,budget:{source:`flag`,envelope:`widen`,defaultBudgetMs:1e4},onTimeout:`preserve-daemon`},bs={fields:{count:{defaultValue:1,omitDefault:!0},intervalMs:{defaultValue:0,omitDefault:!0},holdMs:{defaultValue:0,omitDefault:!0},jitterPx:{defaultValue:0,omitDefault:!0},doubleTap:{defaultValue:!1,omitDefault:!0}}},xs={fields:{delayMs:{defaultValue:0}}};function X(e,t){return kr(e)===void 0?t:ys}function Z(e){let t=kr(e);if(t===void 0)throw Error(`Missing post-action observation descriptor support for ${e}`);return t}const Ss={deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:Wa},timeoutPolicy:gs,batchable:!0},Cs=e=>{let t=e.flags?.snapshotCustomActions===!0||e.input?.customActions===!0;return[!0,!1].map(e=>wa({customActions:t,hasActiveApp:e}).use)},ws=e=>{let t=Es(e);if(t===void 0||!Ts(t))return ya;let n=Sa(t);return[!0,!1].map(e=>Ca({hasActiveApp:e,intent:n}).use)};function Ts(e){return sn(e)||e===`focus`||e===`type`}function Es(e){if(e.positionals===void 0)return;let t=mn(e.positionals,e.flags);return t.ok?t.parsed.action:void 0}const Ds=[{name:`human_control`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`humanControl`},recordsSessionAction:!1,daemon:{route:`humanControl`,refFrameEffect:`preserve`,selectorValidationExempt:!0,skipSessionlessProviderDevice:G},timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`lease_allocate`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseAllocate`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...U},timeoutPolicy:vs,batchable:!1,platformExecution:K},{name:`lease_heartbeat`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseHeartbeat`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...U,appLease:`allowed`},timeoutPolicy:_s,batchable:!1,platformExecution:K},{name:`lease_release`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseRelease`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...U,appLease:`allowed`},timeoutPolicy:_s,batchable:!1,platformExecution:K},{name:`artifacts`,deviceClaimPolicy:`none`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...U},timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`session_list`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`sessionList`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,...W},timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`session_save_script`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`sessionSaveScript`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`publication`},timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`devices`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,...W},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`inventory`,use:No}},{name:`capabilities`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0,...W},timeoutPolicy:N,batchable:!0,platformExecution:K},{name:`doctor`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,allowSessionlessDefaultDevice:G,...W},timeoutPolicy:N,batchable:!0,platformExecution:hs},{name:`apps`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0,sessionlessLeaseAdmissionExemption:ts},platformExecution:{kind:`device-runtime`,uses:[$r]},timeoutPolicy:N,batchable:!0},{name:`boot`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`may-invalidate`,sessionKind:`state`},platformExecution:{kind:`device-runtime`,uses:ka},timeoutPolicy:{...N,budget:{source:`flag`,envelope:`margin`}},batchable:!0},{name:`shutdown`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`may-invalidate`,sessionKind:`state`},platformExecution:{kind:`device-runtime`,use:Fa},timeoutPolicy:N,batchable:!0},{name:`appstate`,deviceClaimPolicy:`observe`,catalog:{group:`public`,key:`appState`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`state`},platformExecution:{kind:`device-runtime`,uses:Pa},timeoutPolicy:N,batchable:!0},{name:`perf`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ki}},{name:`logs`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},platformExecution:{kind:`device-runtime`,uses:fo},timeoutPolicy:N,batchable:!0},{name:`events`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`,allowInvalidRecording:!0,...W},timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`network`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},platformExecution:{kind:`device-runtime`,use:Co},timeoutPolicy:N,batchable:!0},{name:`audio`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:_o}},{name:`replay`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,sessionKind:`replay`,skipSessionlessProviderDevice:$o,saveScriptFlagOwner:!0},timeoutPolicy:{...N,budget:{source:`flag`}},batchable:!1,platformExecution:K},{name:`test`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,sessionKind:`replay`,skipSessionlessProviderDevice:$o},timeoutPolicy:{...N,envelopeMs:`unbounded`},batchable:!0,platformExecution:K},{name:`runtime`,deviceClaimPolicy:`require-owner`,catalog:{group:`internal`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!1,platformExecution:{kind:`device-runtime`,uses:[...so,qi]}},{name:`clipboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:ls,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ia}},{name:`keyboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:os,daemon:{route:`session`,refFrameEffect:rs,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ua}},{name:`install`,...Ss},{name:`reinstall`,...Ss},{name:`install_source`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`internal`,key:`installSource`,servesPublicCommand:`install-from-source`},recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:Ga},timeoutPolicy:gs,batchable:!1},{name:`release_materialized_paths`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`releaseMaterializedPaths`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,...W},timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`push`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:Ka},timeoutPolicy:N,batchable:!0},{name:`trigger-app-event`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`,key:`triggerAppEvent`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[mi]}},{name:`open`,deviceClaimPolicy:`acquire-session`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`,allowSessionlessDefaultDevice:G,saveScriptFlagOwner:!0,appLease:`allowed`},timeoutPolicy:{...N,budget:{source:`flag`,envelope:`margin`}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:Qa}},{name:`prepare`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:{budget:{source:`flag`,envelope:`margin`},envelopeMs:27e4,onTimeout:`reset-daemon`},batchable:!1,mcpExposed:!1,platformExecution:{kind:`device-runtime`,use:io}},{name:`batch`,deviceClaimPolicy:`none`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,appLease:`allowed`},timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`close`,deviceClaimPolicy:`release-session`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`,allowInvalidRecording:!0,saveScriptFlagOwner:!0,sessionlessLeaseAdmissionExemption:es,appLease:`allowed`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:to}},{name:`snapshot`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`snapshot`,refFrameEffect:`preserve`,appLease:`allowed`},timeoutPolicy:{...Y,budget:{source:`flag`}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:xa,selectUses:Cs}},{name:`diff`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`snapshot`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:xa,selectUses:Cs}},{name:`wait`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,targetIdentityVerification:`post-resolution`,daemon:{route:`snapshot`,refFrameEffect:`preserve`,appLease:`allowed`},timeoutPolicy:{...Y,budget:{source:`positional-parser`,parser:hr}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:ba}},{name:`alert`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:ss,daemon:{route:`snapshot`,refFrameEffect:as},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ha}},{name:`settings`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:ds,daemon:{route:`snapshot`,refFrameEffect:fs},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:La}},{name:`react-native`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`,key:`reactNative`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`reactNative`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[L]}},{name:`record`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`recordTrace`,refFrameEffect:`preserve`,allowInvalidRecording:!0,allowSessionlessDefaultDevice:Qo},platformExecution:{kind:`device-runtime`,uses:Ko},timeoutPolicy:Y,batchable:!0},{name:`trace`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`recordTrace`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:K},{name:`find`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:cs,daemon:{route:`find`,refFrameEffect:`may-invalidate`,appLease:`allowed`},timeoutPolicy:Y,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ya,selectUses:ws}},{name:`click`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0,appLease:`allowed`},timeoutPolicy:X(`click`,Y),postActionObservation:Z(`click`),targetReadiness:`budgeted`,responseDataTransform:bs,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Li}},{name:`fill`,...J,daemon:{...J.daemon,appLease:`allowed`},frameworkTier:`core`,timeoutPolicy:X(`fill`,Y),postActionObservation:Z(`fill`),responseDataTransform:xs,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Vi}},{name:`longpress`,...J,catalog:{group:`public`,key:`longPress`},frameworkTier:`extended`,timeoutPolicy:{...ys,envelopeMs:21e4},postActionObservation:Z(`longpress`),targetReadiness:`budgeted`,batchable:!0,platformExecution:{kind:`device-runtime`,uses:zi}},{name:`hover`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`},timeoutPolicy:X(`hover`,Y),postActionObservation:Z(`hover`),batchable:!0,platformExecution:{kind:`device-runtime`,uses:Bi}},{name:`press`,...J,daemon:{...J.daemon,appLease:`allowed`},frameworkTier:`core`,timeoutPolicy:X(`press`,Y),postActionObservation:Z(`press`),targetReadiness:`budgeted`,responseDataTransform:bs,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ri}},{name:`type`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0,appLease:`allowed`},timeoutPolicy:X(`type`,Y),batchable:!0,platformExecution:{kind:`device-runtime`,uses:[ri]}},{name:`get`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`interaction`,refFrameEffect:`preserve`,appLease:`allowed`},timeoutPolicy:X(`get`,Y),batchable:!0,platformExecution:{kind:`device-runtime`,uses:ma}},{name:`is`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`interaction`,refFrameEffect:`preserve`,appLease:`allowed`},timeoutPolicy:X(`is`,Y),batchable:!0,platformExecution:{kind:`device-runtime`,uses:pa}},{name:`back`,catalog:{group:`public`},frameworkTier:`core`,...q,timeoutPolicy:X(`back`,N),postActionObservation:Z(`back`),platformExecution:{kind:`device-runtime`,uses:[ii]}},{name:`gesture`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,targetIdentityVerification:`pre-dispatch`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Zi}},{name:`home`,catalog:{group:`public`},frameworkTier:`extended`,...q,platformExecution:{kind:`device-runtime`,uses:[ai]}},{name:`tv-remote`,catalog:{group:`public`,key:`tvRemote`},frameworkTier:`extended`,...q,platformExecution:{kind:`device-runtime`,uses:[ci]}},{name:`orientation`,catalog:{group:`public`},frameworkTier:`extended`,...q,platformExecution:{kind:`device-runtime`,uses:[oi]}},{name:`fold`,catalog:{group:`public`},frameworkTier:`extended`,...q,timeoutPolicy:yr,platformExecution:{kind:`device-runtime`,uses:[si]}},{name:`scroll`,catalog:{group:`public`},frameworkTier:`core`,...q,daemon:{...q.daemon,appLease:`allowed`},timeoutPolicy:X(`scroll`,N),postActionObservation:Z(`scroll`),platformExecution:{kind:`device-runtime`,uses:$i}},{name:`swipe`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Qi}},{name:`focus`,catalog:{group:`public`},frameworkTier:`extended`,...q,daemon:{...q.daemon,appLease:`allowed`},platformExecution:{kind:`device-runtime`,uses:[ni]}},{name:`screenshot`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`generic`,refFrameEffect:`preserve`,appLease:`allowed`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Da}},{name:`viewport`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!1,platformExecution:{kind:`device-runtime`,uses:[ti]}},{name:`app-switcher`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`,key:`appSwitcher`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[fi]}},{name:`action-button`,catalog:{group:`public`,key:`actionButton`},frameworkTier:`extended`,...q,platformExecution:{kind:`device-runtime`,uses:[pi]}},{name:`install-from-source`,deviceClaimPolicy:`none`,catalog:{group:`public`,key:`installFromSource`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,platformExecution:{kind:`device-runtime`,use:Ga},timeoutPolicy:N,batchable:!0},{name:`debug`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`daemon`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:hs},{name:`device`,deviceClaimPolicy:`observe`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`metro`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`session`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`cdp`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`auth`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`plugins`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`connect`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`connection`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`disconnect`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`mcp`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`proxy`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`takeover`,deviceClaimPolicy:`observe`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:{kind:`inventory`,use:No}},{name:`react-devtools`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`,key:`reactDevtools`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`web`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:hs}],Os=new Set([`public`,`local-cli`]),ks=new Set(Ds.filter(e=>Os.has(Ls(e))).map(e=>e.name)),Q=Ds.map(e=>{let t=Zo(e);return e.name===`record`&&Yo(t),{...e,mcpExposed:Fs(e),platformExecution:t}});function As(e){return Q.filter(t=>Ls(t)===e).map(e=>[Rs(e),e.name])}function js(){return Q.filter(e=>Is(e)).map(e=>e.name).sort()}function Ms(e){let t=Q.find(t=>t.name===e)?.platformExecution;if(t?.kind===`device-runtime`)return(`uses`in t?t.uses:[t.use]).map(e=>e.required)}function Ns(){return Q.filter(e=>e.catalog.group===`public`&&e.platformExecution.kind===`device-runtime`).map(e=>e.name).sort()}const $=new Map(Q.map(e=>[e.name,e]));function Ps(e){return ks.has(e)}function Fs(e){return e.mcpExposed??ks.has(e.name)}function Is(e){return e.mcpExposed&&Ps(e.name)}function Ls(e){return e.catalog.group}function Rs(e){return e.catalog.key??e.name}const zs=new Map(Array.from($.values(),e=>[e.name,e.targetReadiness?{...e.timeoutPolicy,targetReadiness:e.targetReadiness}:e.timeoutPolicy])),Bs=new Map(Q.map(e=>[e.name,e.deviceClaimPolicy])),Vs=new Map(Array.from($.values()).flatMap(e=>e.responseDataTransform?[[e.name,e.responseDataTransform]]:[]));function Hs(e){if(e!==void 0)return $.get(e)?.postActionObservation}function Us(e){return Hs(e)!==void 0}function Ws(e){return e!==void 0&&$.get(e)?.targetReadiness===`budgeted`}function Gs(e){return Hs(e)===`settle-and-verify`}function Ks(e){return e===void 0?N:zs.get(e)??N}function qs(e){return e===void 0?`require-owner`:Bs.get(e)??`require-owner`}function Js(e){if(e!==void 0)return Vs.get(e)}function Ys(e){return e===void 0?!1:$.get(e)?.recordsSessionAction??!1}function Xs(e){if(e!==void 0)return $.get(e)?.frameworkTier}function Zs(e){return $.get(e)?.targetIdentityVerification}function Qs(e){let t=$.get(e.command);if(t?.recordsSessionAction)return typeof t.recordingEffect==`function`?t.recordingEffect(e):t.recordingEffect}function $s(){return[...new Set(Array.from(Vs.values()).flatMap(e=>Object.keys(e.fields)))].sort()}const ec={apps:{appsFilter:`user-installed`}};function tc(e,t){if(!e||!Ps(e))return!1;let n=ec[e];if(!n)return!1;let r=!1;for(let e of Object.keys(n))t[e]===void 0&&(t[e]=n[e],r=!0);return r}function nc(e){let t=[];for(let n of e)n.daemon&&t.push({command:n.name,...n.daemon,replayScopedAction:n.recordsSessionAction});return t}function rc(e){return e.filter(e=>e.batchable).map(e=>e.name)}const ic=rc(Q),ac=new Set([`batch`,`replay`]),oc=[`command`,`positionals`,`input`,`flags`,`runtime`],sc=[`platform`,`target`,`device`,`udid`,`serial`,`verbose`,`out`,`testIme`],cc=`Session, daemon, connection, and host tooling commands are excluded from batch — they own lifecycle a batch cannot carry — and batch and replay never nest. Run an excluded command on its own; every other device command is available as a step.`,lc=new Set(ic);function uc(e){return lc.has(e)}function dc(e){return typeof e==`string`?e.trim().toLowerCase():``}function fc(e){let t=dc(e);return uc(t)?t:void 0}function pc(t,n,r=cc){let i=fc(t);if(i!==void 0)return i;throw new e(`INVALID_ARGS`,`Batch step ${n} command is not available through command batch: ${String(t)}`,{hint:r})}function mc(t,n){if(ac.has(t))throw new e(`INVALID_ARGS`,`Batch step ${n} cannot run ${t}.`)}export{pi as $,mt as $n,ee as $r,jr as $t,Ao as A,kn as An,Ee as Ar,Ti as At,eo as B,tn as Bn,ge as Br,wa as Bt,Ys as C,zn as Cn,v as Cr,ui as Ct,qo as D,En as Dn,g as Dr,oi as Dt,Zs as E,An as En,ke as Er,ji as Et,vo as F,cn as Fn,_e as Fr,na as Ft,Xa as G,Zt as Gn,pe as Gr,L as Gt,no as H,Jt as Hn,fe as Hr,gi as Ht,uo as I,sn as In,ve as Ir,Oa as It,io as J,Yt as Jn,ie as Jr,ti as Jt,Ja as K,Ht as Kn,le as Kr,ci as Kt,po as L,on as Ln,ye as Lr,ra as Lt,Do as M,fn as Mn,Se as Mr,Ei as Mt,ho as N,pn as Nn,we as Nr,Oi as Nt,Go as O,Tn as On,xe as Or,Ci as Ot,xo as P,mn as Pn,m as Pr,Ma as Pt,Ka as Q,qt as Qn,f as Qr,Vr as Qt,ao as R,_n as Rn,p as Rr,Ca as Rt,Qs as S,Rn as Sn,b as Sr,Ni as St,Ks as T,Dn as Tn,y as Tr,li as Tt,ro as U,Wt as Un,de as Ur,hi as Ut,oo as V,O as Vn,he as Vr,Hi as Vt,qa as W,en as Wn,ue as Wr,Fa as Wt,Wa as X,Kt as Xn,l as Xr,Ar as Xt,Za as Y,Vt as Yn,ae as Yr,Rr as Yt,Ga as Z,Gt as Zn,oe as Zr,Mr as Zt,As as _,Un as _n,Ze as _r,Sa as _t,mc as a,vr as an,T as ar,Na as at,qs as b,Hn as bn,Le as br,qi as bt,fc as c,ar as cn,dt as cr,ii as ct,Ws as d,qn as dn,nt as dr,Mi as dt,ne as ei,Nr as en,Et as er,yi as et,Q as f,tr as fn,ot as fr,Ai as ft,$s as g,rr as gn,Je as gr,Fi as gt,Gs as h,$n as hn,st as hr,I as ht,ic as i,o as ii,P as in,Ct as ir,mi as it,wo as j,rn as jn,Oe as jr,Di as jt,Uo as k,wn as kn,De as kr,wi as kt,nc as l,M as ln,ct as lr,Ii as lt,Us as m,er as mn,it as mr,Si as mt,oc as n,d as ni,Fr as nn,Dt as nr,_i as nt,dc as o,_r as on,w as or,fi as ot,Ms as p,Qn as pn,at as pr,xi as pt,Ya as q,Xt as qn,ce as qr,ri as qt,sc as r,re as ri,Ir as rn,kt as rr,vi as rt,pc as s,br as sn,lt as sr,$r as st,cc as t,te as ti,Pr as tn,wt as tr,bi as tt,tc as u,nr as un,rt as ur,Pi as ut,js as v,Gn as vn,Xe as vr,ni as vt,Js as w,On as wn,x as wr,di as wt,Xs as x,Wn as xn,Fe as xr,ai as xt,Ns as y,Bn as yn,Ne as yr,si as yt,$a as z,yn as zn,me as zr,Ba as zt};
2
+ `],[`r`,`\r`],[`t`,` `]]);function v(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Selector expression cannot be empty`);let r=Be(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Selector expression cannot be empty`);return{raw:n,selectors:r.map(e=>Re(e))}}function y(e){try{return v(e)}catch{return null}}function b(e){let t=e.trim();if(!t)return!1;if(t===`||`)return!0;let n=t.indexOf(`=`);if(n!==-1){let e=t.slice(0,n).trim().toLowerCase();return _.has(e)}return _.has(t.toLowerCase())}function Le(e){let t=e.trim(),n=t.indexOf(`=`);if(n===-1)return null;let r=t.slice(0,n).trim().toLowerCase();if(!r||_.has(r))return null;let i=t.slice(n+1).trim();if(!i)return null;let a=S(i).trim();return a?{key:r,value:a}:null}function x(e,t={}){if(e.length===0)return null;let n=t.preferTrailingValue??!1,r=0,i=[];for(;r<e.length;){let t=e[r];if(t===void 0||!b(t))break;r+=1;let n=e.slice(0,r).join(` `).trim();n&&y(n)&&i.push(r)}if(i.length===0)return null;let a=i.at(-1);if(a===void 0)return null;let o=a;if(n)for(let t=i.length-1;t>=0;--t){let n=i[t];if(n!==void 0&&n<e.length){o=n;break}}let s=e.slice(0,o).join(` `).trim();return s?{selectorExpression:s,rest:e.slice(o)}:null}function Re(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Selector segment cannot be empty`);let r=Ve(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Invalid selector segment: ${t}`);return{raw:n,terms:r.map(ze)}}function ze(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Empty selector term`);let r=n.indexOf(`=`);if(r===-1){let r=n.toLowerCase();if(!Me.has(r))throw new e(`INVALID_ARGS`,`Invalid selector term "${t}", expected key=value`);return{key:r,value:!0}}let i=n.slice(0,r).trim().toLowerCase(),a=n.slice(r+1).trim();if(!_.has(i))throw new e(`INVALID_ARGS`,`Unknown selector key: ${i}`);if(!a)throw new e(`INVALID_ARGS`,`Missing selector value for key: ${i}`);if(Me.has(i)){let t=Ge(a);if(t===null)throw new e(`INVALID_ARGS`,`Invalid boolean value for ${i}: ${a}`);return{key:i,value:t}}return{key:i,value:S(a)}}function Be(t){let n=[],r=``,i=null;for(let a=0;a<t.length;a+=1){let o=t[a];if((o===`"`||o===`'`)&&!Ke(t,a)){i=He(i,o),r+=o;continue}if(!i&&o===`|`&&t[a+1]===`|`){let i=r.trim();if(!i)throw new e(`INVALID_ARGS`,`Invalid selector fallback expression: ${t}`);n.push(i),r=``,a+=1;continue}r+=o}let a=r.trim();if(!a)throw new e(`INVALID_ARGS`,`Invalid selector fallback expression: ${t}`);return n.push(a),n}function Ve(t){let n=[],r=``,i=null;for(let e=0;e<t.length;e+=1){let a=t.charAt(e);if((a===`"`||a===`'`)&&!Ke(t,e)){i=He(i,a),r+=a;continue}if(!i&&/\s/.test(a)){r.trim()&&n.push(r.trim()),r=``;continue}r+=a}if(i)throw new e(`INVALID_ARGS`,`Unclosed quote in selector: ${t}`);return r.trim()&&n.push(r.trim()),n}function He(e,t){return e?e===t?null:e:t}function S(e){let t=e.trim();return t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?Ue(t.slice(1,-1)):t}function Ue(e){let t=``,n=0;for(;n<e.length;){let r=e.charAt(n);if(r!==`\\`){t+=r,n+=1;continue}let i=e.charAt(n+1);if(!i){t+=r,n+=1;continue}let a=We(i);if(a!==null){t+=a,n+=2;continue}if(i===`u`){let r=e.slice(n+2,n+6);if(/^[0-9a-fA-F]{4}$/.test(r)){t+=String.fromCharCode(Number.parseInt(r,16)),n+=6;continue}}t+=r,n+=1}return t}function We(e){return Ie.get(e)??null}function Ge(e){let t=S(e).toLowerCase();return t===`true`||t!==`false`&&null}function Ke(e,t){let n=0;for(let r=t-1;r>=0&&e[r]===`\\`;--r)n+=1;return n%2==1}function C(e){return o.includes(e)}const qe=`is requires predicate: ${o.join(`|`)}`;function Je(e){let t=e.toLowerCase();return C(t)?{ok:!0,predicate:t}:a(qe,Ye)}const Ye=`Use "is <predicate> <selector>" or "is <selector> <predicate>". visible|hidden|editable|selected|focused double as selector keys: a bare predicate token after the selector is read as the predicate, so write key=true (e.g. visible=true) inside the selector to use it as a filter instead.`;function Xe(e){if(C((e[0]??``).toLowerCase()))return e;for(let t=1;t<e.length;t+=1){let n=(e[t]??``).toLowerCase();if(C(n)&&y(e.slice(0,t).join(` `)))return[n,...e.slice(0,t),...e.slice(t+1)]}return e}function Ze(e){let{predicate:t,node:n,visibility:r,expectedText:i,platform:a}=e,o=m(n),s=ke(n,a),c=n.selected===!0,l=n.focused===!0,u=t===`text`?g(n):$e(n,r,a),d=!1;switch(t){case`visible`:d=u;break;case`hidden`:d=!u;break;case`editable`:d=s;break;case`selected`:d=c;break;case`focused`:d=l;break;case`text`:d=o===(i??``);break;default:return Qe(t)}let ee=t===`text`?`expected="${i??``}" actual="${o}"`:`actual=${JSON.stringify({visible:u,editable:s,selected:c,focused:l})}`;return{pass:d,actualText:o,details:ee}}function Qe(e){throw Error(`Unhandled is predicate: ${String(e)}`)}function $e(e,t,n){if(n===`android`&&e.visibleToUser===!1)return!1;if(l(e.rect))return t.isVisibleInEffectiveViewport(e);if(e.rect)return!1;if(n!==`android`&&e.hittable===!0)return!0;let r=et(e,t,n);return r?l(r.rect)?t.isVisibleInEffectiveViewport(r):n!==`android`&&r.hittable===!0:!1}function et(e,t,n){return t.findAncestor(e,e=>Oe(e,n)?e:null)}function tt(e){let t=Xe(e),n=t[0]??``;return{predicate:n,split:x(t.slice(1),{preferTrailingValue:n===`text`})}}const nt=`is requires a selector expression`,rt=`is text requires expected text value`;function it(e){let{predicate:t,split:n}=tt([...e]),r=Je(t);if(!r.ok)return r;if(!n)return a(nt);let i=n.rest.join(` `).trim();return r.predicate===`text`&&!i?a(rt):r.predicate!==`text`&&n.rest.length>0?a(`is ${r.predicate} does not accept trailing values`):{ok:!0,predicate:r.predicate,selectorExpression:n.selectorExpression,expectedText:i}}function at(e){return e===`text`||e===`attrs`?{ok:!0,format:e}:a(`get only supports text or attrs`)}function ot(e){let t=e[0];if(t?.startsWith(`@`)){let n=e.slice(1).join(` `).trim();return{ok:!0,ref:t,...n?{label:n}:{}}}let n=e.join(` `).trim();return n?{ok:!0,selector:n}:a(`get requires @ref or selector expression`)}function st(e){return e?{ok:!0,text:e}:a(`wait requires text`)}function ct(e){return Array.from(new Set(e))}function lt(e){return JSON.stringify(ut(e))}function ut(e){if(Array.isArray(e))return e.map(ut);if(!e||typeof e!=`object`)return e;let t=e;return Object.fromEntries(Object.keys(t).sort().map(e=>[e,ut(t[e])]))}function dt(e){let t=0,n=e.length;for(;t<n&&e[t]===`-`;)t+=1;for(;n>t&&e[n-1]===`-`;)--n;return e.slice(t,n)}const ft=/^#\s*agent-device:target-v(\d+)(?:\s+(\S.*))?$/,pt=/^#\s*agent-device:targets-v(\d+)(?:\s+(\S.*))?$/,mt=4096;function ht(e){return e.normalize(`NFC`)}function gt(e){if(e===void 0)return;let t=ht(e);return t.length>0?t:void 0}function _t(e){return ht(e)}function vt(e){if(e===void 0)return;let t=ht(e).trim().replaceAll(/\s+/g,` `);return t.length>0?t:void 0}function w(e){return Buffer.byteLength(e,`utf8`)}function T(e,t){if(w(e)<=t)return e;let n=e.length;for(;n>0&&w(e.slice(0,n))>t;)--n;if(n>0){let t=e.charCodeAt(n-1);t>=55296&&t<=56319&&--n}return e.slice(0,n)}function yt(e){let t={};return e.id!==void 0&&(t.id=e.id),t.role=e.role,e.label!==void 0&&(t.label=e.label),t.ancestry=e.ancestry.map(bt),t.sibling=e.sibling,t.viewportOrder=e.viewportOrder,e.scrollRegion&&(t.scrollRegion=xt(e.scrollRegion)),e.rect&&(t.rect=St(e.rect)),t.verification=e.verification,t}function bt(e){let t={role:e.role};return e.label!==void 0&&(t.label=e.label),t}function xt(e){let t={role:e.role};return e.id!==void 0&&(t.id=e.id),e.label!==void 0&&(t.label=e.label),t}function St(e){return{x:e.x,y:e.y,width:e.width,height:e.height}}function Ct(e){return JSON.stringify(yt(e))}function wt(e){return`# agent-device:target-v1 ${Ct(e)}`}function Tt(e){return JSON.stringify({source:yt(e.source),destination:yt(e.destination)})}function Et(e){return`# agent-device:targets-v1 ${Tt(e)}`}function Dt(e){let t=e.trim(),n=pt.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:Ot((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function Ot(t){if(w(t)>8320)throw new e(`INVALID_ARGS`,`targets-v1 annotation exceeds the 8320-byte payload cap.`);let n;try{n=JSON.parse(t)}catch{throw new e(`INVALID_ARGS`,`targets-v1 annotation is not valid JSON.`)}if(typeof n!=`object`||!n||Array.isArray(n))throw new e(`INVALID_ARGS`,`targets-v1 annotation must be a JSON object.`);let r=n;if(r.source===void 0||r.destination===void 0)throw new e(`INVALID_ARGS`,`targets-v1 annotation requires source and destination evidence.`);return{source:At(JSON.stringify(r.source)),destination:At(JSON.stringify(r.destination))}}function kt(e){let t=e.trim();if(!t.startsWith(`#`))return{kind:`none`};let n=ft.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:At((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function At(t){if(w(t)>4096)throw new e(`INVALID_ARGS`,`target-v1 annotation exceeds the ${mt}-byte payload cap.`);let n;try{n=JSON.parse(t)}catch{throw new e(`INVALID_ARGS`,`target-v1 annotation is not valid JSON.`)}if(typeof n!=`object`||!n||Array.isArray(n))throw new e(`INVALID_ARGS`,`target-v1 annotation must be a JSON object.`);let r=n,i=jt(r.role,`role`),a=Mt(r.id,`id`),o=Nt(r.label,`label`),s=Ft(r.ancestry),c=Lt(r.sibling,`sibling`,0),l=Lt(r.viewportOrder,`viewportOrder`,0),u=Rt(r.scrollRegion),d=zt(r.rect),ee=Bt(r.verification);return{...a===void 0?{}:{id:a},role:i,...o===void 0?{}:{label:o},ancestry:s,sibling:c,viewportOrder:l,...u?{scrollRegion:u}:{},...d?{rect:d}:{},verification:ee}}function jt(t,n){if(t===void 0)throw new e(`INVALID_ARGS`,`target-v1 "${n}" is required.`);if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);return Pt(_t(t),n)}function Mt(t,n){if(t===void 0)return;if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);let r=gt(t);return r===void 0?void 0:Pt(r,n)}function Nt(t,n){if(t===void 0)return;if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);let r=vt(t);return r===void 0?void 0:Pt(r,n)}function Pt(t,n){if(w(t)>256)throw new e(`INVALID_ARGS`,`target-v1 "${n}" exceeds the 256-byte field cap.`);return t}function Ft(t){if(t===void 0)return[];if(!Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "ancestry" must be an array.`);if(t.length>8)throw new e(`INVALID_ARGS`,`target-v1 "ancestry" exceeds the 8-entry cap.`);return t.map((e,t)=>It(e,t))}function It(t,n){if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "ancestry[${n}]" must be an object.`);let r=t,i=jt(r.role,`ancestry[${n}].role`),a=Nt(r.label,`ancestry[${n}].label`);return{role:i,...a===void 0?{}:{label:a}}}function Lt(t,n,r){if(t===void 0)return r;if(typeof t!=`number`||!Number.isSafeInteger(t)||t<0)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a non-negative integer.`);return t}function Rt(t){if(t===void 0)return;if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "scrollRegion" must be an object.`);let n=t,r=jt(n.role,`scrollRegion.role`),i=Mt(n.id,`id`),a=Nt(n.label,`scrollRegion.label`);return{role:r,...i===void 0?{}:{id:i},...a===void 0?{}:{label:a}}}function zt(t){if(t===void 0)return;if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "rect" must be an object.`);let n=t;return{x:E(n.x,`rect.x`),y:E(n.y,`rect.y`),width:E(n.width,`rect.width`),height:E(n.height,`rect.height`)}}function E(t,n){if(typeof t!=`number`||!Number.isFinite(t))throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a finite number.`);return t}function Bt(t){if(t===`verified`||t===`unverifiable`)return t;throw new e(`INVALID_ARGS`,`target-v1 "verification" must be "verified" or "unverifiable".`)}function Vt(e){let t=_t(p(e.type??``)),n=gt(e.identifier),r=vt(e.label);return{...n===void 0?{}:{id:T(n,256)},role:T(t,256),...r===void 0?{}:{label:T(r,256)}}}function Ht(e,t){return e.id===t.id&&e.role===t.role&&e.label===t.label}function Ut(e,t){let n=0;for(let r of e)Vt(r).id===t&&(n+=1);return n}function Wt(e,t){if(e.id===void 0||Ut(t,e.id)<=1)return e;let{role:n,label:r}=e;return{role:n,...r===void 0?{}:{label:r}}}function Gt(e,t){let n=0;for(let r of e)if(r.parentIndex===t.parentIndex){if(r.index===t.index)return n;n+=1}return 0}function Kt(e,t){return{documentOrder:e.index,sibling:Gt(t,e)}}function qt(e,t){return e.documentOrder===t.documentOrder&&e.sibling===t.sibling}function Jt(e){return{...e.id===void 0?{}:{id:e.id},role:e.role,...e.label===void 0?{}:{label:e.label}}}function Yt(e,t){return t.id===void 0?e.role===t.role&&e.label===t.label:e.id===t.id}function Xt(e,t){if(e.length<t.length)return!1;for(let[n,r]of t.entries()){let t=e[n];if(!t||t.role!==r.role||r.label!==void 0&&t.label!==r.label)return!1}return!0}function Zt(e,t){let n=[];return e.id!==t.id&&n.push(`id: recorded=${e.id??`(none)`} observed=${t.id??`(none)`}`),e.role!==t.role&&n.push(`role: recorded=${e.role} observed=${t.role}`),e.label!==t.label&&n.push(`label: recorded=${e.label??`(none)`} observed=${t.label??`(none)`}`),n}function Qt(e){return e?`${e.role}${e.label?`/${e.label}`:``}`:`(missing)`}function $t(e,t){return!t||t.role!==e.role||e.label!==void 0&&t.label!==e.label}function en(e,t){for(let[n,r]of e.entries()){let e=t[n];if($t(r,e))return[`ancestry[${n}]: recorded=${Qt(r)} observed=${Qt(e)}`]}return[]}function tn(e,t,n={}){let r=[],i=p(e.type??``),a=nn(e,n.nodes),o=O(e.label),s=O(e.value),c=O(m(e)),l=n.action===`fill`;a&&r.push(`id=${D(a)}`),i&&o&&r.push(l?`role=${D(i)} label=${D(o)} editable=true`:`role=${D(i)} label=${D(o)}`),o&&r.push(l?`label=${D(o)} editable=true`:`label=${D(o)}`),s&&r.push(l?`value=${D(s)} editable=true`:`value=${D(s)}`),c&&c!==o&&c!==s&&r.push(l?`text=${D(c)} editable=true`:`text=${D(c)}`),i&&l&&!r.some(e=>e.includes(`editable=true`))&&r.push(`role=${D(i)} editable=true`);let u=ct(r);return u.length===0&&i&&u.push(l?`role=${D(i)} editable=true`:`role=${D(i)}`),u.length===0&&g(e)&&u.push(`visible=true`),u}function nn(e,t){let n=O(e.identifier);if(!n||!t)return n;let r=Vt(e).id;return r===void 0?n:Ut(t,r)>1?null:n}function D(e){return JSON.stringify(e)}function O(e){return e&&e.trim()||null}const rn=[`any`,`text`,`label`,`value`,`role`,`id`],an=[`text`,`label`,`value`,`role`,`id`];function on(e){let t=e?.toLowerCase();return t===`press`||t===`tap`?`click`:t}function sn(e){return e===`exists`||e===`wait`||e===`get_text`||e===`get_attrs`||e===`list`}function cn(e,t,n,r={}){let i=A(n);if(!i)return{matches:[],score:0};let a=0,o=[];for(let n of e){if(r.requireRect&&!n.rect)continue;let e=ln(n,t,i);if(!(e<=0)){if(e>a){a=e,o.length=0,o.push(n);continue}e===a&&o.push(n)}}return{matches:o,score:a}}function ln(e,t,n){switch(t){case`role`:return un(e,n);case`label`:return k(e.label,n);case`value`:return k(e.value,n);case`id`:return k(e.identifier,n);default:return Math.max(k(e.label,n),k(e.value,n),k(e.identifier,n))}}function k(e,t){let n=A(e??``);return n?n===t?2:+!!n.includes(t):0}function un(e,t){let n=Ae(e);return n.some(e=>A(e)===t)?2:+!!n.some(e=>dn(e).includes(t))}function dn(e){let t=e.lastIndexOf(`.`);return t===-1?e:e.slice(t+1)}function A(e){return e.trim().toLowerCase().replaceAll(/\s+/g,` `)}const fn=`find requires a value`,pn=`find actions: click (default; press/tap are aliases), list, focus, fill, type, exists, wait, get text, get attrs — there is no longpress/swipe find action. Run find "<text>" list to inspect every match with its @ref without acting, then dispatch the gesture on the chosen ref, e.g. longpress @eNN.`;function mn(e,t){if(e.length===0)return{ok:!1,code:`INVALID_ARGS`,message:`find requires a locator or text`};let n=_n([...e]);return n.query?t?.findFirst&&t?.findLast?{ok:!1,code:`INVALID_ARGS`,message:`find accepts only one of --first or --last`}:{ok:!0,parsed:n}:{ok:!1,code:`INVALID_ARGS`,message:fn}}const hn=[`exists`,`list`,`click`,`focus`];function gn(e){return hn.includes(e)}function _n(t){let n=`any`,r=0;an.includes(t[0])&&(n=t[0],r=1);let i=t[r]??``,a=t.slice(r+1);if(a.length===0)return{locator:n,query:i,action:`click`};let o=on(a[0]);if(gn(o))return{locator:n,query:i,action:o};if(o===`get`)return{locator:n,query:i,action:vn(a[1])};if(o===`wait`){let e=bn(a[1]);return{locator:n,query:i,action:`wait`,timeoutMs:e??void 0}}if(o===`fill`||o===`type`){let e=a.slice(1);return{locator:n,query:i,action:o,value:e.length===0?void 0:e.join(` `)}}throw new e(`INVALID_ARGS`,`Unsupported find action: ${a[0]}`,{hint:pn})}function vn(t){let n=t?.toLowerCase();if(n===`text`)return`get_text`;if(n===`attrs`)return`get_attrs`;throw new e(`INVALID_ARGS`,`find get only supports text or attrs`)}function yn(e,t){return e!==`any`||!t.includes(`=`)&&!t.includes(`||`)?null:y(t)?t:null}function bn(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}function xn(e,t,n){return t.terms.every(t=>Sn(e,t,n))}function Sn(e,t,n){switch(t.key){case`id`:return j(e.identifier,String(t.value));case`role`:return Cn(e,String(t.value));case`label`:return j(e.label,String(t.value));case`value`:return j(e.value,String(t.value));case`text`:return j(m(e),String(t.value));case`appname`:return j(e.appName,String(t.value));case`windowtitle`:return j(e.windowTitle,String(t.value));case`visible`:return g(e)===!!t.value;case`hidden`:return!g(e)==!!t.value;case`editable`:return ke(e,n)===!!t.value;case`selected`:return e.selected===!0==!!t.value;case`focused`:return e.focused===!0==!!t.value;case`enabled`:return e.enabled!==!1==!!t.value;case`hittable`:return e.hittable===!0==!!t.value;default:return!1}}function j(e,t){return A(e??``)===A(t)}function Cn(e,t){let n=A(t);return Ae(e).some(e=>A(e)===n)}function wn(e,t,n){let r=n.requireRect??!1,i=n.requireUnique??!0,a=[],o=null;for(let[s,c]of t.selectors.entries()){let t=jn(e,c,n.platform,r);if(a.push({selector:c.raw,matches:t.count}),!(t.count===0||!t.firstNode)){if(o??={selector:c,selectorIndex:s,matchedNodes:t.candidates},i&&t.count!==1){if(!n.disambiguateAmbiguous||!t.disambiguated||!t.tiebreak)continue;return{matchedNodes:t.candidates,firstMatch:o,resolution:{node:t.disambiguated,selector:c,selectorIndex:s,matches:t.count,diagnostics:a,disambiguation:{matchCount:t.count,tiebreak:t.tiebreak,alternatives:t.candidates.filter(e=>e!==t.disambiguated)}}}}return{matchedNodes:t.candidates,firstMatch:o,resolution:{node:t.firstNode,selector:c,selectorIndex:s,matches:t.count,diagnostics:a}}}}return{resolution:null,matchedNodes:o?.matchedNodes??[],firstMatch:o}}function Tn(e,t,n){return wn(e,t,n).resolution}function En(e,t,n){let r=n.requireRect??!1;for(let[i,a]of t.selectors.entries()){let t=e.filter(e=>r&&!e.rect?!1:xn(e,a,n.platform));if(t.length>0)return{selector:a,selectorIndex:i,matchedNodes:t}}return null}function Dn(e,t,n){let r=n.requireRect??!1,i=[];for(let[a,o]of t.selectors.entries()){let t=Fn(e,o,n.platform,r);if(i.push({selector:o.raw,matches:t}),t>0)return{selectorIndex:a,selector:o,matches:t,diagnostics:i}}return null}const On=`Snapshot refs expire when the UI changes. Run snapshot -i and retry with a fresh @ref.`;function kn(e){return e.some(e=>e.matches>1)?`Add more terms to disambiguate (e.g. role=button text="Sign in"), use an @ref from snapshot -i, or use find <text> --first/--last.`:`Selector text/label values match exactly (quote multi-word values: text="Sign in"). Run snapshot -i to see current elements and refs, or use find <text> for contains matching.`}function An(e,t,n){if(t.length===0)return`Selector did not match: ${e}`;let r=t.map(e=>`${e.selector} -> ${e.matches}`).join(`, `);return n.unique??!0?`Selector did not resolve uniquely (${r})`:`Selector did not match (${r})`}function jn(e,t,n,r){let i=0,a=null,o=[],s={best:null,bestVisible:!1,tie:!1},c=xe(e).isVisibleOnScreen;for(let l of e)r&&!l.rect||xn(l,t,n)&&(i+=1,a??=l,o.push(l),Mn(s,l,c));return{count:i,firstNode:a,disambiguated:s.tie?null:s.best,tiebreak:s.tie?null:Nn(o,s.best,c),candidates:o}}function Mn(e,t,n){if(!e.best){e.best=t;return}e.bestVisible||=n(e.best);let r=n(t);if(r!==e.bestVisible){r&&(e.best=t,e.bestVisible=!0,e.tie=!1);return}let i=In(t,e.best);i.result>0?(e.best=t,e.tie=!1):i.result===0&&(e.tie=!0)}function Nn(e,t,n){if(!t)return null;let r=null;for(let i of e)i!==t&&(!r||Pn(i,r,n).result>0)&&(r=i);return r?Pn(t,r,n).criterion:null}function Pn(e,t,n){let r=n(e);return r===n(t)?In(e,t):{result:r?1:-1,criterion:`visible`}}function Fn(e,t,n,r){let i=0;for(let a of e)r&&!a.rect||xn(a,t,n)&&(i+=1);return i}function In(e,t){let n=e.depth??0,r=t.depth??0;if(n!==r)return{result:n>r?1:-1,criterion:`deepest`};let i=Ln(e),a=Ln(t);return i===a?{result:0,criterion:null}:{result:i<a?1:-1,criterion:`smallest-area`}}function Ln(e){return e.rect?e.rect.width*e.rect.height:1/0}const Rn={act:{ambiguity:`reject-candidates`,requireRect:!0},actCoveredDiagnosis:{ambiguity:`first-match`,requireRect:!0},readText:{ambiguity:`disambiguate`,requireRect:!1},readUnique:{ambiguity:`fail-closed`,requireRect:!1},readAny:{ambiguity:`first-match`,requireRect:!1},wait:{ambiguity:`first-match`,requireRect:!1},findAct:{ambiguity:`reject-candidates`,requireRect:!0},readList:{ambiguity:`reject-candidates`,requireRect:!1},cropTarget:{ambiguity:`fail-closed`,requireRect:!0}};function zn(e){return e.ambiguity===`first-match`?{requireRect:e.requireRect,requireUnique:!1}:{requireRect:e.requireRect,requireUnique:!0,disambiguateAmbiguous:e.ambiguity===`disambiguate`}}function Bn(e,t){let n=e===`is`?tt([...t]).split:x([...t]);return n?y(n.selectorExpression)?{kind:`expression`,expression:n.selectorExpression,rest:n.rest}:{kind:`invalid`}:{kind:`not-applicable`}}function Vn(e){return{platform:e.platform,...zn({ambiguity:e.allowDisambiguation?`disambiguate`:`fail-closed`,requireRect:e.requireRect})}}function Hn(e,t,n){let r=y(e);if(!r)return{kind:`unresolved`,reason:`parse-invalid`,matchedNodes:[]};let{resolution:i,matchedNodes:a}=wn(t,r,Vn(n));return i?{kind:`resolved`,winner:i.node,matchedNodes:a,matchCount:a.length,...i.disambiguation?{disambiguation:{tiebreak:i.disambiguation.tiebreak,matchCount:i.disambiguation.matchCount,alternatives:i.disambiguation.alternatives}}:{}}:{kind:`unresolved`,reason:a.length>0?`ambiguous`:`no-match`,matchedNodes:a}}function Un(e,t,n={}){return tn(e,t,n)}function Wn(e,t,n){let r=y(e);if(!r)return;let i=Tn(t,r,Vn(n));if(i)return{node:i.node,basis:Kn(i.selector)}}function Gn(e){if(!e)return;let t=y(e);if(!t)return;let n=t.selectors.flatMap(e=>e.terms.flatMap(e=>(e.key===`label`||e.key===`text`||e.key===`id`)&&typeof e.value==`string`?[e.value]:[]));if(n.length===0)return;let r=n[0];return r&&n.every(e=>e===r)?r:void 0}function Kn(e){let t=new Set(e.terms.map(e=>e.key));if(t.has(`id`))return`id`;let n=t.has(`role`),r=t.has(`label`)||t.has(`text`);return n&&r?`role-label`:r||t.has(`value`)?`label`:`other`}function qn(e,t){let n=y(e);if(!n)return e.includes(`=`)||e.includes(`||`)?null:e;let r=new Set(t.textKeys),i=t.textAliases??{};return n.selectors.length>1?Jn(n.selectors,r,i):Yn(n.selectors[0],r,new Set(t.booleanKeys),i)}function Jn(e,t,n){let r=e.map(e=>{let r=e.terms.length===1?e.terms[0]:void 0;return r&&Xn(r.key,t,n)&&typeof r.value==`string`?r.value:void 0}),i=r[0];return i!==void 0&&r.every(e=>e===i)?i:null}function Yn(e,t,n,r){if(!e)return null;let i={},a=0;for(let o of e.terms){if(Xn(o.key,t,r)&&typeof o.value==`string`)a+=1;else if(!Zn(o,n,`boolean`))return null;i[r[o.key]??o.key]=o.value}return a<=1&&Object.keys(i).length>0?i:null}function Xn(e,t,n){return t.has(e)||n[e]!==void 0}function Zn(e,t,n){return t.has(e.key)&&typeof e.value===n}function Qn(e){let t=y(e);if(!t||t.selectors.length!==1)return null;let n=t.selectors[0];if(!n||n.terms.length!==1)return null;let r=n.terms[0];return!r||typeof r.value!=`string`||r.key!==`id`&&r.key!==`label`&&r.key!==`text`&&r.key!==`value`?null:{key:r.key,value:r.value,raw:n.raw}}function $n(e,t){if(!t)return!1;let n=y(e);return n?n.selectors.some(e=>e.terms.some(e=>(e.key===`text`||e.key===`label`||e.key===`value`)&&typeof e.value==`string`&&e.value.includes(t))):!1}function er(e,t){return y(e)?.selectors.some(e=>e.terms.some(e=>e.key===t))??!1}function tr(e){return v(e).selectors.map(e=>e.raw)}function M(e){return y(e)!==null}function nr(e){v(e)}function N(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}const rr=new Set([`exists`,`present`,`appears`,`gone`,`disappears`]);function ir(e){let t=e[0];if(t===void 0)return null;let n=N(t);if(n!==null)return{kind:`sleep`,durationMs:n};let r=N(e.at(-1));return t===`text`?ar(e,r):t===`stable`?or(e):t===`absent`?sr(e,r):t.startsWith(`@`)?{kind:`ref`,rawRef:t,timeoutMs:r}:lr(e,r)}function ar(e,t){return{kind:`text`,text:(t===null?e.slice(1).join(` `):e.slice(1,-1).join(` `)).trim(),timeoutMs:t}}function or(e){let t=e.slice(1),n=t.length>1?N(t[1]):null;return{kind:`stable`,quietMs:t.length>0?N(t[0]):null,timeoutMs:n}}function sr(e,t){let n=t===null?e.slice(1):e.slice(1,-1),r=x(n);return n.length>0&&r?.rest.length===0&&M(r.selectorExpression)?{kind:`absent`,selectorExpression:r.selectorExpression,timeoutMs:t}:{kind:`invalid`,reason:`absent-selector-required`,message:cr(n)}}function cr(e){let t=e.join(` `);return t.length>0?`wait absent requires one valid selector; received "${t}". Use wait absent '<selector>' [timeoutMs].`:`wait absent requires <selector> [timeoutMs].`}function lr(e,t){let n=t===null?e.slice():e.slice(0,-1),r=x(n);return r&&r.rest.length===0&&M(r.selectorExpression)?{kind:`selector`,selectorExpression:r.selectorExpression,timeoutMs:t}:ur(n,r)||{kind:`text`,text:(t===null?e.join(` `):e.slice(0,-1).join(` `)).trim(),timeoutMs:t}}function ur(e,t){for(let t of e){let n=Le(t);if(n)return{kind:`invalid`,reason:`unknown-selector-key`,message:dr(n,e)}}return t&&t.rest.length>0?{kind:`invalid`,reason:`selector-shaped-text`,message:fr(t,e)}:e.some(e=>b(e))?{kind:`invalid`,reason:`selector-shaped-text`,message:pr(e)}:null}function dr(e,t){let n=t.join(` `),r=Fe(e.key)?`role=${e.key} label="${e.value}"`:`label="${e.value}"`;return`Unknown selector key "${e.key}" in "${n}". Supported: ${Ne.join(`, `)}. Use wait '${r}' [timeoutMs] to wait for the selector, or wait text '${n}' [timeoutMs] to wait for the literal text "${n}".`}function fr(e,t){let n=t.join(` `);return`Selector ${e.selectorExpression} is followed by unexpected extra arguments: "${e.rest.join(` `)}". Selector values with spaces need quotes, e.g. label="Sign in". Use wait '<selector>' [timeoutMs], or wait text '${n}' [timeoutMs] to wait for the literal text "${n}".`}function pr(e){let t=e.join(` `),n=e.filter(e=>!b(e)),r=e.filter(e=>b(e));if(n.length>0){let e=n[0],i=rr.has(e.toLowerCase())?` "${e}" describes a condition, not a selector key. Use the selector form: `+(e.toLowerCase()===`gone`||e.toLowerCase()===`disappears`?`wait absent '${r.join(` `)}' [timeoutMs] to wait for zero matches.`:`wait '${r.join(` `)}' [timeoutMs] to wait for it to appear.`):` "${e}" is not a recognized selector key (${Ne.join(`, `)}).`;return`"${t}" mixes plain word "${e}" with selector-shaped "${r.join(` `)}", so it is neither a valid selector nor safe as literal text.${i} Use wait '<selector>' [timeoutMs] for a selector, or wait text '${t}' [timeoutMs] to wait for the literal text "${t}".`}return`"${t}" looks like a selector key but is not a valid selector expression. Use wait '<selector>' [timeoutMs], e.g. wait '${e[0]}="value"' [timeoutMs], or wait text '${t}' [timeoutMs] to wait for the literal text "${t}".`}function mr(e){let t=ir(e);return t?t.kind===`sleep`?t.durationMs:t.kind===`invalid`?null:t.timeoutMs:null}const hr=3e4,gr=24e4,_r=3e5,P={budget:{source:`none`},envelopeMs:9e4,onTimeout:`reset-daemon`},vr={budget:{source:`none`},envelopeMs:255e3,onTimeout:`reset-daemon`};function yr(e,t){if(e.envelopeMs===`unbounded`)return;let n={...e,envelopeMs:e.envelopeMs};return(xr(n,t.positionals??[])??Sr(n,t.flags)??n.envelopeMs)+br(e,t.flags)}function br(e,t){if(e.targetReadiness!==`budgeted`)return 0;let n=t?.readinessTimeoutMs;return typeof n!=`number`||!Number.isInteger(n)||n<=0?0:Math.min(n,2e3)}function xr(e,t){if(e.budget.source!==`positional-parser`)return;let n=e.budget.parser(t);return n===null?void 0:Tr(e,n)}function Sr(e,t){if(e.budget.source===`flag`)return e.budget.envelope===`widen`?wr(e,e.budget,t):e.budget.envelope===`margin`?Cr(e,t):typeof t?.timeoutMs==`number`?t.timeoutMs:e.envelopeMs}function Cr(e,t){let n=typeof t?.timeoutMs==`number`?Tr(e,t.timeoutMs):e.envelopeMs;return typeof t?.waitMs==`number`?Er({...e,envelopeMs:n},t.waitMs):n}function wr(e,t,n){if(n?.settle!==!0)return e.envelopeMs;let r=typeof n.timeoutMs==`number`?n.timeoutMs:t.defaultBudgetMs;return typeof r==`number`?Er(e,r):e.envelopeMs}function Tr(e,t){return Math.max(e.envelopeMs,t+hr)}function Er(e,t){return Math.max(e.envelopeMs,e.envelopeMs+t+hr)}const Dr={click:`settle-and-verify`,press:`settle-and-verify`,fill:`settle-and-verify`,longpress:`settle`,hover:`settle`,scroll:`settle`,back:`settle`};function Or(e){if(e!==void 0)return Dr[e]}function F(t){return new e(`COMMAND_FAILED`,t,{reason:`runtime-contract-invalid`,hint:`This is an agent-device runtime contract bug; report the selected device and command.`})}function kr(e){if(!i(e))throw TypeError(`Unknown local runtime family: ${String(e)}`);return Object.freeze({kind:`local-family`,family:e})}function Ar(e,t){let n=e.trim(),r=t.trim();if(n.length===0||r.length===0)throw TypeError(`Provider runtime owner requires non-empty provider and instance identities`);return Object.freeze({kind:`provider-runtime`,provider:n,instance:r})}function jr(e){switch(e.kind){case`local-family`:return`local:${e.family}`;case`provider-runtime`:return`provider:${JSON.stringify([e.provider,e.instance])}`}}function Mr(e,t){return jr(e)===jr(t)}function Nr(e,t){return Object.freeze(t===void 0?{available:!1,reason:e}:{available:!1,reason:e,hint:t})}function Pr(e,t){return e.available?t():{}}function Fr(e,t){let n={},r={};for(let i of t.required){let t=Ir(e.facts.operations,i);if(n[i]=t,!t.available)throw Vr(i,t);r[i]=zr(e.operations,i)}for(let i of t.preferred){let t=Ir(e.facts.operations,i);n[i]=t,t.available&&(r[i]=zr(e.operations,i))}for(let i of t.conditional??[]){let t=Ir(e.facts.operations,i);n[i]=t,t.available&&(r[i]=zr(e.operations,i))}return Object.freeze({device:e.device,owner:e.owner,facts:Object.freeze(n),operations:Object.freeze(r)})}function Ir(e,t){let n=e[t];if(!Lr(n))throw F(`Runtime owner omitted the ${t} fact`);let r=Rr(n);if(r)return r;throw F(`Runtime owner returned an invalid ${t} fact`)}function Lr(e){return typeof e==`object`&&!!e&&`available`in e}function Rr(e){if(e.available===!0)return Object.freeze({available:!0});if(e.available===!1&&Br(e.reason)&&(e.hint===void 0||typeof e.hint==`string`))return Nr(e.reason,e.hint)}function zr(e,t){let n=e[t];if(typeof n!=`function`)throw F(`Runtime owner advertised ${t} without an implementation`);return n}function Br(e){return e===`unsupported-platform-leaf`||e===`unsupported-device-kind`||e===`unsupported-device-backend`||e===`unsupported-device-scope`||e===`unsupported-provider-mode`||e===`owner-capability-missing`}function Vr(t,n){return new e(`UNSUPPORTED_OPERATION`,`Runtime operation ${t} is unavailable`,{reason:n.reason,hint:n.hint})}function Hr(e){return JSON.stringify({required:[...e.required].sort(),preferred:[...e.preferred].sort(),conditional:[...e.conditional??[]].sort()})}function Ur(){return e=>{let t=Wr(e.required,`required`),n=Wr(e.preferred??[],`preferred`),r=Wr(e.conditional??[],`conditional`),i=[[`required`,t],[`preferred`,n],[`conditional`,r]];for(let e=0;e<i.length;e+=1){let t=i[e];if(t)for(let n of i.slice(e+1)){let e=n[1].find(e=>t[1].includes(e));if(e!==void 0)throw TypeError(`Runtime operation cannot be both ${t[0]} and ${n[0]}: ${e}`)}}return Object.freeze(r.length===0?{required:t,preferred:n}:{required:t,preferred:n,conditional:r})}}function Wr(e,t){let n=[...e];if(new Set(n).size!==n.length)throw TypeError(`Runtime use contains duplicate ${t} operations`);return Object.freeze(n)}const I=Ur(),Gr=I({required:[`bootTarget`]}),Kr=I({required:[`bootTargetHeadless`]}),qr=I({required:[`ensureReady`,`listApps`]}),Jr=I({required:[`captureSnapshot`]}),Yr=I({required:[`setViewport`]}),Xr=I({required:[`focusPoint`]}),Zr=I({required:[`typeText`]}),Qr=I({required:[`back`]}),$r=I({required:[`home`]}),ei=I({required:[`setOrientation`]}),ti=I({required:[`setFoldPose`]}),ni=I({required:[`tvRemote`]}),ri=I({required:[`keyboardStatus`]}),ii=I({required:[`keyboardDismiss`]}),ai=I({required:[`keyboardEnter`]}),oi=I({required:[`appSwitcher`]}),si=I({required:[`actionButton`]}),ci=I({required:[`triggerAppEvent`]}),li=I({required:[`setSetting`]}),ui=I({required:[`readSetting`]}),di=I({required:[`readAlert`]}),fi=I({required:[`awaitAlert`]}),pi=I({required:[`acceptAlert`]}),mi=I({required:[`dismissAlert`]}),hi=I({required:[`readClipboard`]}),gi=I({required:[`writeClipboard`]}),_i=I({required:[`perfFrames`]}),vi=I({required:[`perfMemorySample`]}),yi=I({required:[`perfMemorySnapshot`]}),bi=I({required:[`perfNativeCaptureStart`]}),xi=I({required:[`perfNativeCaptureReattach`,`perfNativeCaptureCleanup`]}),Si=I({required:[`perfProfileReport`]}),Ci=Object.freeze([_i,vi,yi,bi,xi,Si]),L=I({required:[`tapPoint`]}),wi=I({required:[`captureSnapshot`,`tapPoint`],preferred:[`tapRef`],conditional:[`tapElementSelector`]}),Ti=I({required:[`longPressPoint`]}),Ei=I({required:[`captureSnapshot`,`longPressPoint`]}),Di=I({required:[`hoverPoint`]}),Oi=I({required:[`captureSnapshot`,`hoverPoint`],preferred:[`hoverRef`]}),ki=I({required:[`fillPoint`]}),Ai=I({required:[`captureSnapshot`,`fillPoint`],preferred:[`fillRef`]}),ji=Object.freeze([L,wi]),Mi=ji,Ni=Object.freeze([Ti,Ei]),Pi=Object.freeze([Di,Oi]),Fi=Object.freeze([ki,Ai]);function Ii(e,t){switch(e){case`click`:case`press`:return t?{kind:`captured-tap`,use:wi}:{kind:`tap-point`,use:L};case`fill`:return t?{kind:`captured-fill`,use:Ai}:{kind:`fill-point`,use:ki};case`longpress`:return t?{kind:`captured-long-press`,use:Ei}:{kind:`long-press-point`,use:Ti};case`hover`:return t?{kind:`captured-hover`,use:Oi}:{kind:`hover-point`,use:Di}}}const Li=I({required:[`performGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Ri=I({required:[`performDirectionalFlingPlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),zi=I({required:[`performMultiTouchGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Bi=I({required:[`performTargetAuthoredDrag`,`captureSnapshot`],preferred:[`gestureViewport`]}),Vi=I({required:[`gestureViewport`]}),Hi=I({required:[`scrollDirection`],conditional:[`captureSnapshot`]}),Ui=I({required:[`scrollDirection`,`captureSnapshot`]}),Wi=Object.freeze({plan:Li,"directional-fling":Ri,"multi-touch":zi,"target-authored-drag":Bi}),Gi=Object.freeze([Li,Ri,zi,Bi]),Ki=Object.freeze([Li]),qi=Object.freeze([Hi,Ui]);function Ji(e){return e.intent===`pan`?(`pointerCount`in e?e.pointerCount:1)===2:e.intent===`pinch`||e.intent===`rotate`||e.intent===`transform`}function Yi(e){return e.intent===`drag`?`target-authored-drag`:Ji(e)?`multi-touch`:e.intent===`fling`&&`direction`in e?`directional-fling`:`plan`}function Xi(e){let t=Yi(e);switch(t){case`plan`:return R(t);case`directional-fling`:return R(t);case`multi-touch`:return R(t);case`target-authored-drag`:return R(t)}}function R(e){let t=Wi[e];return Object.freeze({tier:e,operation:t.required[0],use:t})}function Zi(e){return e.until===void 0?e.edge===void 0?Object.freeze({kind:`direction`,use:Hi}):Object.freeze({kind:`edge`,edge:e.edge,use:Ui}):Object.freeze({kind:`until`,until:e.until,use:Ui})}const Qi=I({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`]}),$i=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),ea=I({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`,`captureSnapshotWithoutActiveApp`]}),ta=I({required:[`captureSnapshot`]}),na=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),ra=I({required:[`captureSnapshot`],preferred:[`readTextAtPoint`]}),ia=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],preferred:[`readTextAtPoint`]}),aa=I({required:[`captureSnapshot`],conditional:[`findText`]}),oa=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],conditional:[`findText`]}),sa=Object.freeze([ta,na]),ca=Object.freeze([ra,ia]),la=I({required:[`captureSnapshot`,`focusPoint`]}),ua=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`]}),da=I({required:[`captureSnapshot`,`focusPoint`,`typeText`]}),fa=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`,`typeText`]}),pa=Object.freeze([ra,ia,ta,na,la,ua,da,fa]),ma=Object.freeze([aa,oa]),ha=Object.freeze([Jr,Qi,$i,ea]),z=Object.freeze({"capture-only":sa,"element-text":ca,"wait-observation":ma,"find-focus":Object.freeze([la,ua]),"find-type":Object.freeze([da,fa])});function ga(e){return e===`focus`?`find-focus`:e===`type`?`find-type`:`capture-only`}function _a(e){switch(e.intent){case`capture-only`:return B(e.hasActiveApp,e.intent,z[e.intent]);case`element-text`:return B(e.hasActiveApp,e.intent,z[e.intent]);case`wait-observation`:return B(e.hasActiveApp,e.intent,z[e.intent]);case`find-focus`:return B(e.hasActiveApp,e.intent,z[e.intent]);case`find-type`:return B(e.hasActiveApp,e.intent,z[e.intent])}}function B(e,t,n){return Object.freeze(e?{kind:`selector-active-app`,intent:t,operation:`captureSnapshot`,use:n[0]}:{kind:`selector-without-active-app`,intent:t,operation:`captureSnapshotWithoutActiveApp`,use:n[1]})}function va(e){return e.customActions?e.hasActiveApp?Object.freeze({kind:`custom-actions-active-app`,operation:`captureSnapshotWithCustomActions`,use:Qi}):Object.freeze({kind:`custom-actions-without-active-app`,operation:`captureSnapshotWithCustomActions`,use:ea}):e.hasActiveApp?Object.freeze({kind:`active-app`,operation:`captureSnapshot`,use:Jr}):Object.freeze({kind:`without-active-app`,operation:`captureSnapshotWithoutActiveApp`,use:$i})}const ya=I({required:[`captureScreenshot`]}),ba=I({required:[`captureScreenshot`,`captureSnapshot`]}),xa=Object.freeze([ya,ba]);function Sa(e){return e.cropOn?Object.freeze({kind:`capture-with-crop-on`,use:ba}):e.overlayRefs?Object.freeze({kind:`capture-with-overlay-refs`,use:ba}):Object.freeze({kind:`capture`,use:ya})}const Ca=Object.freeze([Gr,Kr]),wa=Object.freeze({kind:`boot-target`,operation:`bootTarget`,use:Gr}),Ta=Object.freeze({kind:`boot-target-headless`,operation:`bootTargetHeadless`,use:Kr});function Ea(e){return e.headless?Ta:wa}const Da=I({required:[`ensureReady`,`appState`]}),Oa=Object.freeze([Da]),ka=I({required:[`shutdownTarget`]}),Aa=Object.freeze([hi,gi]),ja=Object.freeze([li,ui]),Ma=[`text-size`],Na=Object.freeze({kind:`write`,use:li});function Pa(e){let t=Fa(e?.[0]);return e?.length!==1||t===void 0?Na:Ma.includes(t)?Object.freeze({kind:`read`,setting:t,use:ui}):Na}function Fa(e){let t=e?.trim().toLowerCase();return Ma.find(e=>e===t)}const Ia=Object.freeze([di,fi,pi,mi]),La=Object.freeze([ri,ii,ai]),Ra=I({required:[`deployApp`]}),za=I({required:[`ensureReady`,`materializeAppSource`,`deployMaterializedApp`]}),Ba=I({required:[`ensureReady`,`sendPushNotification`]}),Va=I({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`]}),Ha=I({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`]}),Ua=I({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`clearRuntimeHints`]}),Wa=I({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`,`clearRuntimeHints`]});function Ga(e){return e.applyRuntimeHints&&e.clearRemovedRuntimeHints?Object.freeze({kind:`open-apply-and-clear-runtime-hints`,use:Wa}):e.applyRuntimeHints?Object.freeze({kind:`open-apply-runtime-hints`,use:Ha}):e.clearRemovedRuntimeHints?Object.freeze({kind:`open-clear-runtime-hints`,use:Ua}):Object.freeze({kind:`open`,use:Va})}const Ka=Object.freeze([Va,Ha,Ua,Wa]),qa=I({required:[`closeApplication`,`finalizeApplicationClose`]}),Ja=I({required:[`closeApplication`,`finalizeApplicationClose`,`clearRuntimeHints`]}),Ya=Object.freeze([qa,Ja]),Xa=I({required:[`finalizeApplicationClose`]}),Za=I({required:[`finalizeApplicationClose`,`clearRuntimeHints`]}),Qa=I({required:[`prepareAppleRunner`]}),$a=I({required:[`clearRuntimeHints`]}),eo=I({required:[`configureProviderPortReverse`]}),to=Object.freeze([$a,eo]),V=I({required:[`appLogInspect`]}),no=I({required:[`appLogInspect`,`appLogDoctor`]}),ro=I({required:[`appLogInspect`,`appLogStart`]}),io=I({required:[],preferred:[`appLogInspect`]}),ao=Object.freeze([V,no,ro]);function oo(t){let n=(t.action??`path`).toLowerCase();if(t.restart&&n!==`clear`)throw new e(`INVALID_ARGS`,`logs --restart is only supported with logs clear`);switch(n){case`path`:return Object.freeze({kind:`path`,requiresAppSession:!1,use:V});case`start`:return Object.freeze({kind:`start`,requiresAppSession:!0,use:ro});case`stop`:return Object.freeze({kind:`stop`,requiresAppSession:!1,use:V});case`doctor`:return Object.freeze({kind:`doctor`,requiresAppSession:!1,use:no});case`mark`:return Object.freeze({kind:`mark`,marker:t.marker??``,requiresAppSession:!1,use:V});case`clear`:return t.restart?Object.freeze({kind:`clear-restart`,requiresAppSession:!0,use:ro}):Object.freeze({kind:`clear`,requiresAppSession:!1,use:V});default:throw new e(`INVALID_ARGS`,`logs requires path, start, stop, doctor, mark, or clear`)}}const so=I({required:[`audioProbeStart`]}),co=I({required:[`audioProbeReattach`,`audioProbeCleanup`]}),lo=I({required:[`audioProbeQuery`]}),uo=Object.freeze([so,co,lo]);function fo(e){if(e.mode===`query`)return Object.freeze({kind:`query`,action:e.probeAction,use:lo});switch(e.probeAction){case`start`:return Object.freeze({kind:`capture-start`,use:so});case`status`:return Object.freeze({kind:`capture-status`});case`stop`:return Object.freeze({kind:`capture-stop`})}}const po=[`probe`],mo=[`start`,`status`,`stop`];function ho(t){let n=(t?.[0]??`probe`).toLowerCase();if(!po.includes(n))throw new e(`INVALID_ARGS`,`audio requires probe`);let r=(t?.[1]??`status`).toLowerCase();if(!mo.includes(r))throw new e(`INVALID_ARGS`,`audio probe requires ${mo.join(`, `)}`);if(r!==`start`&&t&&t.length>2)throw new e(`INVALID_ARGS`,`audio probe duration and bucket are only supported with audio probe start`);return Object.freeze({probeAction:r,durationMs:go(t?.[2],{defaultValue:1e4,min:100,max:12e4,message:`audio probe duration must be an integer in range 100..120000 ms`}),bucketMs:go(t?.[3],{defaultValue:1e3,min:100,max:1e4,message:`audio probe bucket must be an integer in range 100..10000 ms`})})}function go(t,n){if(t===void 0)return n.defaultValue;let r=Number.parseInt(t,10);if(!Number.isInteger(r)||String(r)!==t||r<n.min||r>n.max)throw new e(`INVALID_ARGS`,n.message);return r}const _o=I({required:[`networkDump`]}),vo=I({required:[],preferred:[`networkDump`]}),yo=[`dump`,`log`],bo=[`summary`,`headers`,`body`,`all`];function xo(t){let n=(t.action??`dump`).toLowerCase(),r=(t.include??`summary`).toLowerCase();if(!So(n))throw new e(`INVALID_ARGS`,`network requires dump or log`);if(!Co(r))throw new e(`INVALID_ARGS`,`network --include must be summary, headers, body, or all`);return Object.freeze({action:n,include:r,use:_o})}function So(e){return yo.some(t=>t===e)}function Co(e){return bo.some(t=>t===e)}function wo(e){let t=new Map;for(let n of e){if(!i(n.family))throw TypeError(`Unknown platform family registration: ${String(n.family)}`);if(t.has(n.family))throw TypeError(`Duplicate platform family registration: ${n.family}`);t.set(n.family,To(n))}let n=r.filter(e=>!t.has(e));if(n.length>0)throw TypeError(`Missing platform family registrations: ${n.join(`, `)}`);let a=Object.freeze([...r]),o=Object.freeze(a.map(e=>Eo(t,e)));return Object.freeze({families:a,modules:o,get:e=>Eo(t,e)})}function To(e){return Object.freeze({...e})}function Eo(e,t){let n=e.get(t);if(!n)throw TypeError(`Missing platform family registration: ${t}`);return n}const Do=Object.freeze({kind:`device-inventory`});function Oo(e){if(typeof e!=`object`||!e)throw Fo();let t=e,n=Object.keys(t).sort();if(!(t.kind===`none`&&H(n,[`kind`]))&&!(t.kind===`host`&&H(n,[`kind`]))&&!(t.kind===`inventory`&&H(n,[`kind`,`use`])&&Ao(t.use))&&!(t.kind===`device-runtime`&&H(n,[`kind`,`use`])&&jo(t.use))&&!(t.kind===`device-runtime`&&(H(n,[`kind`,`uses`])||H(n,[`kind`,`selectUses`,`uses`])&&typeof t.selectUses==`function`)&&ko(t.uses)))throw Fo()}function ko(e){if(!Array.isArray(e)||e.length===0||!e.every(jo))return!1;let t=e.map(Hr);return new Set(t).size===t.length}function Ao(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.kind===`device-inventory`&&H(Object.keys(t).sort(),[`kind`])}function jo(e){if(typeof e!=`object`||!e)return!1;let t=e,n=[No(t.required),No(t.preferred),No(t.conditional??[])];if(!Mo(n))return!1;let r=n.flat();return new Set(r).size===r.length&&H(Object.keys(t).sort(),t.conditional===void 0?[`preferred`,`required`]:[`conditional`,`preferred`,`required`])}function Mo(e){return e.every(e=>e!==null&&Po(e))}function No(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?e:null}function Po(e){return new Set(e).size===e.length}function H(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function Fo(){return TypeError(`Command platform execution must declare exactly one of none, host, inventory, or device-runtime`)}const Io=I({required:[`screenRecordingStart`]}),Lo=I({required:[`screenRecordingReattach`,`screenRecordingCleanup`]}),Ro=I({required:[]}),zo=I({required:[],preferred:[`screenRecordingStart`]}),Bo=Object.freeze([Io,Lo]);function Vo(t){switch((t.action??``).toLowerCase()){case`start`:if(!Ho(t.scope??`app`))throw new e(`INVALID_ARGS`,`record scope must be app, device, or system`);return Object.freeze({kind:`start`,use:Io});case`stop`:return t.hasLiveHandle===!0?Object.freeze({kind:`stop-live`,use:Ro}):Object.freeze({kind:`stop-recovery`,use:Lo});default:throw new e(`INVALID_ARGS`,`record requires start or stop`)}}function Ho(e){return e===`app`||e===`device`||e===`system`}function Uo(e){if(Oo(e),e.kind!==`device-runtime`||!(`uses`in e))throw Wo();let t=e.uses.map(Hr),n=Bo.map(Hr),r=new Set(t),i=new Set(n);if(t.length!==n.length||r.size!==t.length||[...r].some(e=>!i.has(e)))throw Wo()}function Wo(){return TypeError(`Record runtime execution must declare exactly the uses selected by its two runtime-bearing plans`)}function Go(e){let t=e.platformExecution;if(t===void 0)throw TypeError(`Command descriptor "${e.name}" must declare platformExecution (none, host, inventory, or device-runtime); there is no registry-entry default`);return Oo(t),t}const U={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0},W={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0,selectorValidationExempt:!0},Ko=()=>!0,qo=e=>(e.positionals?.[0]??``).toLowerCase()===`start`,Jo=e=>e.command===`test`&&(typeof e.flags?.shardAll==`number`||typeof e.flags?.shardSplit==`number`),Yo=e=>(e.positionals?.length??0)===0?{kind:`unconditional`}:void 0,Xo=e=>{let t=e.flags?.leaseProvider;return e.flags?.leaseId===void 0&&typeof t==`string`&&(e.flags?.platform===`android`||e.flags?.platform===`ios`)?{kind:`provider-app-catalog`,provider:t}:void 0},Zo=new Set([`status`,`get`]),Qo=e=>cs(e,Zo,`status`),$o=new Set([`get`,`wait`]),es=e=>cs(e,$o,`get`),ts=e=>G(e,Zo,`status`),ns=e=>G(e,$o,`get`),rs=e=>{try{return sn(_n(e.positionals??[]).action)?`observes-app`:`mutates-app`}catch{return`mutates-app`}},is=e=>G(e,new Set([`read`]),``),as=e=>Pa(e.positionals).kind===`read`,os=e=>as(e)?`observes-app`:`mutates-app`,ss=e=>as(e)?`preserve`:`may-invalidate`;function cs(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`preserve`:`may-invalidate`}function G(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`observes-app`:`mutates-app`}const K={kind:`none`},ls={kind:`host`},q={recordsSessionAction:!0,recordingEffect:`mutates-app`,deviceClaimPolicy:`require-owner`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:P,batchable:!0},J={targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},recordsSessionAction:!0,recordingEffect:`mutates-app`,deviceClaimPolicy:`require-owner`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0}},Y={...P,onTimeout:`preserve-daemon`},us={...P,envelopeMs:18e4},ds={...P,onTimeout:`preserve-daemon`},fs={...ds,envelopeMs:33e4},ps={...P,budget:{source:`flag`,envelope:`widen`,defaultBudgetMs:1e4},onTimeout:`preserve-daemon`},ms={fields:{count:{defaultValue:1,omitDefault:!0},intervalMs:{defaultValue:0,omitDefault:!0},holdMs:{defaultValue:0,omitDefault:!0},jitterPx:{defaultValue:0,omitDefault:!0},doubleTap:{defaultValue:!1,omitDefault:!0}}},hs={fields:{delayMs:{defaultValue:0}}};function X(e,t){return Or(e)===void 0?t:ps}function Z(e){let t=Or(e);if(t===void 0)throw Error(`Missing post-action observation descriptor support for ${e}`);return t}const gs={deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:Ra},timeoutPolicy:us,batchable:!0},_s=e=>{let t=e.flags?.snapshotCustomActions===!0||e.input?.customActions===!0;return[!0,!1].map(e=>va({customActions:t,hasActiveApp:e}).use)},vs=e=>{let t=bs(e);if(t===void 0||!ys(t))return pa;let n=ga(t);return[!0,!1].map(e=>_a({hasActiveApp:e,intent:n}).use)};function ys(e){return sn(e)||e===`focus`||e===`type`}function bs(e){if(e.positionals===void 0)return;let t=mn(e.positionals,e.flags);return t.ok?t.parsed.action:void 0}const xs=[{name:`human_control`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`humanControl`},recordsSessionAction:!1,daemon:{route:`humanControl`,refFrameEffect:`preserve`,selectorValidationExempt:!0,skipSessionlessProviderDevice:Ko},timeoutPolicy:P,batchable:!1,platformExecution:K},{name:`lease_allocate`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseAllocate`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...U},timeoutPolicy:fs,batchable:!1,platformExecution:K},{name:`lease_heartbeat`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseHeartbeat`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...U,appLease:`allowed`},timeoutPolicy:ds,batchable:!1,platformExecution:K},{name:`lease_release`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseRelease`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...U,appLease:`allowed`},timeoutPolicy:ds,batchable:!1,platformExecution:K},{name:`artifacts`,deviceClaimPolicy:`none`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...U},timeoutPolicy:P,batchable:!1,platformExecution:K},{name:`session_list`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`sessionList`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,...W},timeoutPolicy:P,batchable:!1,platformExecution:K},{name:`session_save_script`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`sessionSaveScript`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`publication`},timeoutPolicy:P,batchable:!1,platformExecution:K},{name:`devices`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,...W},timeoutPolicy:P,batchable:!0,platformExecution:{kind:`inventory`,use:Do}},{name:`capabilities`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0,...W},timeoutPolicy:P,batchable:!0,platformExecution:K},{name:`doctor`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,allowSessionlessDefaultDevice:Ko,...W},timeoutPolicy:P,batchable:!0,platformExecution:ls},{name:`apps`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0,sessionlessLeaseAdmissionExemption:Xo},platformExecution:{kind:`device-runtime`,uses:[qr]},timeoutPolicy:P,batchable:!0},{name:`boot`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`may-invalidate`,sessionKind:`state`},platformExecution:{kind:`device-runtime`,uses:Ca},timeoutPolicy:{...P,budget:{source:`flag`,envelope:`margin`}},batchable:!0},{name:`shutdown`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`may-invalidate`,sessionKind:`state`},platformExecution:{kind:`device-runtime`,use:ka},timeoutPolicy:P,batchable:!0},{name:`appstate`,deviceClaimPolicy:`observe`,catalog:{group:`public`,key:`appState`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`state`},platformExecution:{kind:`device-runtime`,uses:Oa},timeoutPolicy:P,batchable:!0},{name:`perf`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},timeoutPolicy:P,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ci}},{name:`logs`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},platformExecution:{kind:`device-runtime`,uses:ao},timeoutPolicy:P,batchable:!0},{name:`events`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`,allowInvalidRecording:!0,...W},timeoutPolicy:P,batchable:!1,platformExecution:K},{name:`network`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},platformExecution:{kind:`device-runtime`,use:_o},timeoutPolicy:P,batchable:!0},{name:`audio`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},timeoutPolicy:P,batchable:!0,platformExecution:{kind:`device-runtime`,uses:uo}},{name:`replay`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,sessionKind:`replay`,skipSessionlessProviderDevice:Jo,saveScriptFlagOwner:!0},timeoutPolicy:{...P,budget:{source:`flag`}},batchable:!1,platformExecution:K},{name:`test`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,sessionKind:`replay`,skipSessionlessProviderDevice:Jo},timeoutPolicy:{...P,envelopeMs:`unbounded`},batchable:!0,platformExecution:K},{name:`runtime`,deviceClaimPolicy:`require-owner`,catalog:{group:`internal`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:P,batchable:!1,platformExecution:{kind:`device-runtime`,uses:[...to,Vi]}},{name:`clipboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:is,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:P,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Aa}},{name:`keyboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:ts,daemon:{route:`session`,refFrameEffect:Qo,androidBlockingDialogGuard:!0},timeoutPolicy:P,batchable:!0,platformExecution:{kind:`device-runtime`,uses:La}},{name:`install`,...gs},{name:`reinstall`,...gs},{name:`install_source`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`internal`,key:`installSource`,servesPublicCommand:`install-from-source`},recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:za},timeoutPolicy:us,batchable:!1},{name:`release_materialized_paths`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`releaseMaterializedPaths`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,...W},timeoutPolicy:P,batchable:!1,platformExecution:K},{name:`push`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:Ba},timeoutPolicy:P,batchable:!0},{name:`trigger-app-event`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`,key:`triggerAppEvent`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},timeoutPolicy:P,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[ci]}},{name:`open`,deviceClaimPolicy:`acquire-session`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`,allowSessionlessDefaultDevice:Ko,saveScriptFlagOwner:!0,appLease:`allowed`},timeoutPolicy:{...P,budget:{source:`flag`,envelope:`margin`}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ka}},{name:`prepare`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:{budget:{source:`flag`,envelope:`margin`},envelopeMs:27e4,onTimeout:`reset-daemon`},batchable:!1,mcpExposed:!1,platformExecution:{kind:`device-runtime`,use:Qa}},{name:`batch`,deviceClaimPolicy:`none`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,appLease:`allowed`},timeoutPolicy:P,batchable:!1,platformExecution:K},{name:`close`,deviceClaimPolicy:`release-session`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`,allowInvalidRecording:!0,saveScriptFlagOwner:!0,sessionlessLeaseAdmissionExemption:Yo,appLease:`allowed`},timeoutPolicy:P,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ya}},{name:`snapshot`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`snapshot`,refFrameEffect:`preserve`,appLease:`allowed`},timeoutPolicy:{...Y,budget:{source:`flag`}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:ha,selectUses:_s}},{name:`diff`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`snapshot`,refFrameEffect:`preserve`},timeoutPolicy:P,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ha,selectUses:_s}},{name:`wait`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,targetIdentityVerification:`post-resolution`,daemon:{route:`snapshot`,refFrameEffect:`preserve`,appLease:`allowed`},timeoutPolicy:{...Y,budget:{source:`positional-parser`,parser:mr}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:ma}},{name:`alert`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:ns,daemon:{route:`snapshot`,refFrameEffect:es},timeoutPolicy:P,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ia}},{name:`settings`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:os,daemon:{route:`snapshot`,refFrameEffect:ss},timeoutPolicy:P,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ja}},{name:`react-native`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`,key:`reactNative`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`reactNative`,refFrameEffect:`may-invalidate`},timeoutPolicy:P,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[L]}},{name:`record`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`recordTrace`,refFrameEffect:`preserve`,allowInvalidRecording:!0,allowSessionlessDefaultDevice:qo},platformExecution:{kind:`device-runtime`,uses:Bo},timeoutPolicy:Y,batchable:!0},{name:`trace`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`recordTrace`,refFrameEffect:`preserve`},timeoutPolicy:P,batchable:!0,platformExecution:K},{name:`find`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:rs,daemon:{route:`find`,refFrameEffect:`may-invalidate`,appLease:`allowed`},timeoutPolicy:Y,batchable:!0,platformExecution:{kind:`device-runtime`,uses:pa,selectUses:vs}},{name:`click`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0,appLease:`allowed`},timeoutPolicy:X(`click`,Y),postActionObservation:Z(`click`),targetReadiness:`budgeted`,responseDataTransform:ms,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ji}},{name:`fill`,...J,daemon:{...J.daemon,appLease:`allowed`},frameworkTier:`core`,timeoutPolicy:X(`fill`,Y),postActionObservation:Z(`fill`),responseDataTransform:hs,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Fi}},{name:`longpress`,...J,catalog:{group:`public`,key:`longPress`},frameworkTier:`extended`,timeoutPolicy:{...ps,envelopeMs:21e4},postActionObservation:Z(`longpress`),targetReadiness:`budgeted`,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ni}},{name:`hover`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`},timeoutPolicy:X(`hover`,Y),postActionObservation:Z(`hover`),batchable:!0,platformExecution:{kind:`device-runtime`,uses:Pi}},{name:`press`,...J,daemon:{...J.daemon,appLease:`allowed`},frameworkTier:`core`,timeoutPolicy:X(`press`,Y),postActionObservation:Z(`press`),targetReadiness:`budgeted`,responseDataTransform:ms,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Mi}},{name:`type`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0,appLease:`allowed`},timeoutPolicy:X(`type`,Y),batchable:!0,platformExecution:{kind:`device-runtime`,uses:[Zr]}},{name:`get`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`interaction`,refFrameEffect:`preserve`,appLease:`allowed`},timeoutPolicy:X(`get`,Y),batchable:!0,platformExecution:{kind:`device-runtime`,uses:ca}},{name:`is`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`interaction`,refFrameEffect:`preserve`,appLease:`allowed`},timeoutPolicy:X(`is`,Y),batchable:!0,platformExecution:{kind:`device-runtime`,uses:sa}},{name:`back`,catalog:{group:`public`},frameworkTier:`core`,...q,timeoutPolicy:X(`back`,P),postActionObservation:Z(`back`),platformExecution:{kind:`device-runtime`,uses:[Qr]}},{name:`gesture`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,targetIdentityVerification:`pre-dispatch`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:P,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Gi}},{name:`home`,catalog:{group:`public`},frameworkTier:`extended`,...q,platformExecution:{kind:`device-runtime`,uses:[$r]}},{name:`tv-remote`,catalog:{group:`public`,key:`tvRemote`},frameworkTier:`extended`,...q,platformExecution:{kind:`device-runtime`,uses:[ni]}},{name:`orientation`,catalog:{group:`public`},frameworkTier:`extended`,...q,platformExecution:{kind:`device-runtime`,uses:[ei]}},{name:`fold`,catalog:{group:`public`},frameworkTier:`extended`,...q,timeoutPolicy:vr,platformExecution:{kind:`device-runtime`,uses:[ti]}},{name:`scroll`,catalog:{group:`public`},frameworkTier:`core`,...q,daemon:{...q.daemon,appLease:`allowed`},timeoutPolicy:X(`scroll`,P),postActionObservation:Z(`scroll`),platformExecution:{kind:`device-runtime`,uses:qi}},{name:`swipe`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:P,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ki}},{name:`focus`,catalog:{group:`public`},frameworkTier:`extended`,...q,daemon:{...q.daemon,appLease:`allowed`},platformExecution:{kind:`device-runtime`,uses:[Xr]}},{name:`screenshot`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`generic`,refFrameEffect:`preserve`,appLease:`allowed`},timeoutPolicy:P,batchable:!0,platformExecution:{kind:`device-runtime`,uses:xa}},{name:`viewport`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`},timeoutPolicy:P,batchable:!1,platformExecution:{kind:`device-runtime`,uses:[Yr]}},{name:`app-switcher`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`,key:`appSwitcher`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`},timeoutPolicy:P,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[oi]}},{name:`action-button`,catalog:{group:`public`,key:`actionButton`},frameworkTier:`extended`,...q,platformExecution:{kind:`device-runtime`,uses:[si]}},{name:`install-from-source`,deviceClaimPolicy:`none`,catalog:{group:`public`,key:`installFromSource`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,platformExecution:{kind:`device-runtime`,use:za},timeoutPolicy:P,batchable:!0},{name:`debug`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:P,batchable:!1,platformExecution:K},{name:`daemon`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:P,batchable:!1,mcpExposed:!1,platformExecution:ls},{name:`device`,deviceClaimPolicy:`observe`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:P,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`metro`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:P,batchable:!1,platformExecution:K},{name:`session`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:P,batchable:!1,platformExecution:K},{name:`cdp`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:P,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`auth`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:P,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`plugins`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:P,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`connect`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:P,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`connection`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:P,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`disconnect`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:P,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`mcp`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:P,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`proxy`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:P,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`takeover`,deviceClaimPolicy:`observe`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:P,batchable:!1,mcpExposed:!1,platformExecution:{kind:`inventory`,use:Do}},{name:`react-devtools`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`,key:`reactDevtools`},recordsSessionAction:!1,timeoutPolicy:P,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`web`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:P,batchable:!1,mcpExposed:!1,platformExecution:ls}],Ss=new Set([`public`,`local-cli`]),Cs=new Set(xs.filter(e=>Ss.has(js(e))).map(e=>e.name)),Q=xs.map(e=>{let t=Go(e);return e.name===`record`&&Uo(t),{...e,mcpExposed:ks(e),platformExecution:t}});function ws(e){return Q.filter(t=>js(t)===e).map(e=>[Ms(e),e.name])}function Ts(){return Q.filter(e=>As(e)).map(e=>e.name).sort()}function Es(e){let t=Q.find(t=>t.name===e)?.platformExecution;if(t?.kind===`device-runtime`)return(`uses`in t?t.uses:[t.use]).map(e=>e.required)}function Ds(){return Q.filter(e=>e.catalog.group===`public`&&e.platformExecution.kind===`device-runtime`).map(e=>e.name).sort()}const $=new Map(Q.map(e=>[e.name,e]));function Os(e){return Cs.has(e)}function ks(e){return e.mcpExposed??Cs.has(e.name)}function As(e){return e.mcpExposed&&Os(e.name)}function js(e){return e.catalog.group}function Ms(e){return e.catalog.key??e.name}const Ns=new Map(Array.from($.values(),e=>[e.name,e.targetReadiness?{...e.timeoutPolicy,targetReadiness:e.targetReadiness}:e.timeoutPolicy])),Ps=new Map(Q.map(e=>[e.name,e.deviceClaimPolicy])),Fs=new Map(Array.from($.values()).flatMap(e=>e.responseDataTransform?[[e.name,e.responseDataTransform]]:[]));function Is(e){if(e!==void 0)return $.get(e)?.postActionObservation}function Ls(e){return Is(e)!==void 0}function Rs(e){return e!==void 0&&$.get(e)?.targetReadiness===`budgeted`}function zs(e){return Is(e)===`settle-and-verify`}function Bs(e){return e===void 0?P:Ns.get(e)??P}function Vs(e){return e===void 0?`require-owner`:Ps.get(e)??`require-owner`}function Hs(e){if(e!==void 0)return Fs.get(e)}function Us(e){return e===void 0?!1:$.get(e)?.recordsSessionAction??!1}function Ws(e){if(e!==void 0)return $.get(e)?.frameworkTier}function Gs(e){return $.get(e)?.targetIdentityVerification}function Ks(e){let t=$.get(e.command);if(t?.recordsSessionAction)return typeof t.recordingEffect==`function`?t.recordingEffect(e):t.recordingEffect}function qs(){return[...new Set(Array.from(Fs.values()).flatMap(e=>Object.keys(e.fields)))].sort()}const Js={apps:{appsFilter:`user-installed`}};function Ys(e,t){if(!e||!Os(e))return!1;let n=Js[e];if(!n)return!1;let r=!1;for(let e of Object.keys(n))t[e]===void 0&&(t[e]=n[e],r=!0);return r}function Xs(e){let t=[];for(let n of e)n.daemon&&t.push({command:n.name,...n.daemon,replayScopedAction:n.recordsSessionAction});return t}function Zs(e){return e.filter(e=>e.batchable).map(e=>e.name)}const Qs=Zs(Q),$s=new Set([`batch`,`replay`]),ec=[`command`,`positionals`,`input`,`flags`,`runtime`],tc=[`platform`,`target`,`device`,`udid`,`serial`,`verbose`,`out`,`testIme`],nc=`Session, daemon, connection, and host tooling commands are excluded from batch — they own lifecycle a batch cannot carry — and batch and replay never nest. Run an excluded command on its own; every other device command is available as a step.`,rc=new Set(Qs);function ic(e){return rc.has(e)}function ac(e){return typeof e==`string`?e.trim().toLowerCase():``}function oc(e){let t=ac(e);return ic(t)?t:void 0}function sc(t,n,r=nc){let i=oc(t);if(i!==void 0)return i;throw new e(`INVALID_ARGS`,`Batch step ${n} command is not available through command batch: ${String(t)}`,{hint:r})}function cc(t,n){if($s.has(t))throw new e(`INVALID_ARGS`,`Batch step ${n} cannot run ${t}.`)}export{si as $,wt as $n,te as $r,Mr as $t,wo as A,fn as An,Se as Ar,yi as At,Ja as B,Jt as Bn,fe as Br,va as Bt,Us as C,Dn as Cn,y as Cr,ii as Ct,Vo as D,wn as Dn,De as Dr,ei as Dt,Gs as E,Tn as En,xe as Er,Ti as Et,fo as F,on as Fn,ye as Fr,Xi as Ft,Wa as G,Xt as Gn,ce as Gr,L as Gt,Xa as H,en as Hn,ue as Hr,ui as Ht,io as I,_n as In,p as Ir,Sa as It,Qa as J,Kt as Jn,l as Jr,Yr as Jt,Ha as K,Yt as Kn,ie as Kr,ni as Kt,oo as L,yn as Ln,me as Lr,Zi as Lt,xo as M,mn as Mn,m as Mr,bi as Mt,co as N,cn as Nn,_e as Nr,Si as Nt,zo as O,kn as On,Ee as Or,_i as Ot,ho as P,sn as Pn,ve as Pr,Ea as Pt,Ba as Q,Et as Qn,ne as Qr,jr as Qt,$a as R,tn as Rn,ge as Rr,_a as Rt,Ks as S,On as Sn,x as Sr,Di as St,Bs as T,En as Tn,g as Tr,ri as Tt,Za as U,Zt as Un,pe as Ur,li as Ut,eo as V,Wt as Vn,de as Vr,Ii as Vt,Va as W,Ht as Wn,le as Wr,ka as Wt,Ra as X,qt as Xn,f as Xr,Fr as Xt,Ga as Y,Gt as Yn,oe as Yr,kr as Yt,za as Z,mt as Zn,ee as Zr,Ar as Zt,ws as _,Bn as _n,Ne as _r,ga as _t,cc as a,yr as an,lt as ar,Da as at,Vs as b,Rn as bn,b as br,Vi as bt,oc as c,M as cn,rt as cr,Qr as ct,Rs as d,Qn as dn,at as dr,Ei as dt,d as ei,Nr as en,Dt as er,pi as et,Q as f,er as fn,it as fr,wi as ft,qs as g,Gn as gn,Xe as gr,ki as gt,zs as h,Un as hn,Ze as hr,I as ht,Qs as i,gr as in,w as ir,ci as it,vo as j,pn as jn,we as jr,xi as jt,Lo as k,rn as kn,Oe as kr,vi as kt,Xs as l,qn as ln,nt as lr,Ai as lt,Ls as m,nr as mn,Je as mr,gi as mt,ec as n,o as ni,F as nn,Ct as nr,di as nt,ac as o,ir as on,dt as or,oi as ot,Es as p,$n as pn,st as pr,hi as pt,Ua as q,Vt as qn,ae as qr,Zr as qt,tc as r,_r as rn,T as rr,fi as rt,sc as s,N as sn,ct as sr,qr as st,nc as t,re as ti,Pr as tn,kt as tr,mi as tt,Ys as u,tr as un,ot as ur,Oi as ut,Ts as v,Hn as vn,Le as vr,Xr as vt,Hs as w,An as wn,ke as wr,ai as wt,Ws as x,zn as xn,v as xr,$r as xt,Ds as y,Wn as yn,Fe as yr,ti as yt,qa as z,O as zn,he as zr,Pa as zt};
@@ -1,2 +1,2 @@
1
- import{r as e}from"./rolldown-runtime.js";const t=/(token|secret|password|authorization|cookie|api[_-]?key|access[_-]?key|private[_-]?key|user[_-]?code|device[_-]?code|refresh[_-]?credential)/i,n=/\b(?:bearer\s+[a-z0-9._-]+|adc_(?:agent|live|refresh|cli)_[a-z0-9._-]+)\b/gi,r=/\b([a-z0-9_-]*(?:api[_-]?key|token|secret|password|user[_-]?code|device[_-]?code|refresh[_-]?credential)[a-z0-9_-]*)(\s*[=:]\s*)("[^"]*"|'[^']*'|\S+)/gi,i=/https?:\/\/[^\s"'<>]+/gi,a=8192,o=`...<truncated>`;function s(e){return l(e,new WeakSet)}function c(e){if(!e||typeof e!=`object`)return;let t=e;if(typeof t.message==`string`&&t.message.length!==0)return s({message:t.message,...typeof t.code==`string`&&t.code.length>0?{code:t.code}:{}})}function l(e,n,r){if(e==null)return e;if(typeof e==`string`)return u(e,r);if(typeof e!=`object`)return e;if(n.has(e))return`[Circular]`;if(n.add(e),Array.isArray(e))return e.map(e=>l(e,n));let i={};for(let[r,a]of Object.entries(e)){if(t.test(r)){i[r]=`[REDACTED]`;continue}i[r]=l(a,n,r)}return i}function u(e,i){let a=e.trim();if(!a)return d(e,i);if(i&&t.test(i))return`[REDACTED]`;let o=f(a);return o=o.replace(n,`[REDACTED]`),o=o.replace(r,(e,t,n,r,i,a)=>te({key:t,separator:n,rawValue:r,offset:i,input:a})||ee(r)?e:`${t}${n}[REDACTED]`),d(o,i)}function d(e,t){if(t===`stderr`){if(e.length<=a)return e;let t=`\n${o}\n`,n=a-t.length,r=Math.ceil(n/2);return`${e.slice(0,r)}${t}${e.slice(-(n-r))}`}return e.length<=400?e:`${e.slice(0,386)}${o}`}function f(e){return e.replace(i,e=>p(e)??e)}function ee(e){return/^adc_(?:agent|live|refresh|cli)_\.\.\.$/i.test(e)}function te(e){if(e.key.toLowerCase()!==`token`||!e.separator.includes(`:`))return!1;try{return new URL(e.rawValue).pathname.replace(/\/+$/,``)===`/api-keys`&&/(?:^|\b)(?:service\/)?api\s+$/i.test(e.input.slice(0,e.offset))}catch{return!1}}function p(e){try{let t=new URL(e);return t.search&&=`?REDACTED`,(t.username||t.password)&&(t.username=`REDACTED`,t.password=`REDACTED`),t.toString()}catch{return null}}var ne=e({AppError:()=>h,KNOWN_APP_ERROR_CODES:()=>re,PRE_DISPATCH_REFUSAL_REASONS:()=>b,asAppError:()=>O,createRequestCanceledError:()=>oe,defaultHintForCode:()=>F,detailsAfterDispatchedSteps:()=>L,discloseDispatch:()=>I,discloseDispatchAfterSteps:()=>R,discloseUnclassifiedDispatch:()=>z,errorMessage:()=>E,isAgentDeviceError:()=>k,isRequestCanceledDetails:()=>T,isRequestCanceledError:()=>se,normalizeAgentDeviceError:()=>A,normalizeError:()=>j,readDiagnosticsRecordRef:()=>N,readElementMatchCandidateRefs:()=>ie,readErrorCandidateViews:()=>_,retriableForErrorCode:()=>P,sessionAppRequiredDetails:()=>x,sessionOrDeviceSelectorRequiredDetails:()=>S,summarizeCommandAttemptFailures:()=>D,throwDaemonError:()=>y,toAppErrorCode:()=>g});const re=[`INVALID_ARGS`,`DEVICE_NOT_FOUND`,`DEVICE_IN_USE`,`TOOL_MISSING`,`APP_NOT_INSTALLED`,`UNSUPPORTED_PLATFORM`,`UNSUPPORTED_OPERATION`,`NOT_IMPLEMENTED`,`COMMAND_FAILED`,`SESSION_NOT_FOUND`,`UNAUTHORIZED`,`AMBIGUOUS_MATCH`,`REPLAY_DIVERGENCE`,`REPAIR_SESSION_EXPIRED`,`REPAIR_COMMIT_FAILED`,`UNKNOWN`],m=Symbol.for(`agent-device.AppError`);var h=class e extends Error{static[Symbol.hasInstance](t){return this===e?typeof t==`object`&&!!t&&t[m]===!0:Function.prototype[Symbol.hasInstance].call(this,t)}code;details;cause;constructor(e,t,n,r){super(t),Object.defineProperty(this,m,{value:!0}),this.code=e,this.details=n,this.cause=r}};function g(e,t=`COMMAND_FAILED`){return typeof e==`string`&&e.length>0?e:t}function _(e){let t=v(e?.candidates),n=[];if(t.length>0){let r=typeof e?.matches==`number`?e.matches:t.length,i=typeof e?.refsGeneration==`number`?e.refsGeneration:void 0;n.push({kind:`element-match`,candidates:t,matches:r,...i===void 0?{}:{refsGeneration:i}})}let r=ae(e?.devices);return r.length>0&&n.push({kind:`device`,devices:r}),n}function ie(e){return v(e?.candidates).flatMap(e=>{let t=/^@(e\d+)(?:~s\d+)?(?:\s|$)/.exec(e);return t?.[1]?[t[1]]:[]})}function v(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function ae(e){return Array.isArray(e)?e.filter(e=>typeof e==`object`&&!!e&&typeof e.id==`string`&&typeof e.name==`string`):[]}function y(e){throw new h(g(e.code),e.message,{...e.details??{},hint:e.hint,diagnosticId:e.diagnosticId,logPath:e.logPath,logPathUnavailable:e.logPathUnavailable,diagnosticsRecord:e.diagnosticsRecord,retriable:e.retriable,supportedOn:e.supportedOn},e.cause)}const b={sessionAppRequired:`session_app_required`,sessionOrDeviceSelectorRequired:`session_or_device_selector_required`};function x(){return{reason:b.sessionAppRequired,dispatched:`no`}}function S(){return{reason:b.sessionOrDeviceSelectorRequired,dispatched:`no`}}const C=`request_canceled`,w=`request canceled`;function oe(e,t){return new h(`COMMAND_FAILED`,w,{hint:`The request was canceled intentionally (explicit cancel or client disconnect) — no retry is needed unless the cancellation was unintended.`,...e,reason:C},t)}function T(e){return e?.reason===C}function se(e){return!(e instanceof h)||e.code!==`COMMAND_FAILED`?!1:T(e.details)?!0:e.message===w}function E(e){return e instanceof Error?e.message:String(e)}function D(e){return e.map(e=>({args:e.args.join(` `),exitCode:e.exitCode,stderr:e.stderr.slice(0,400)}))}function O(e,t=`UNKNOWN`){return e instanceof h?e:e instanceof Error?new h(t,e.message,void 0,e):new h(t,`Unknown error`,{err:e})}function k(e){return e instanceof h}function A(e,t={}){return j(e,t)}function j(e,t={}){let n=O(e),r=n.details?s(n.details):void 0,i=M(r,`diagnosticId`)??t.diagnosticId,a=M(r,`logPath`)??t.logPath,o=M(r,`logPathUnavailable`),l=N(r?.diagnosticsRecord)??t.diagnosticsRecord,u=M(r,`hint`)??F(n.code),d=pe(r,`retriable`)??P(n.code),f=M(r,`supportedOn`),ee=he(r),te=le(n.code,n.message,r),p=c(n.cause);return{code:n.code,message:te,...p===void 0?{}:{cause:p},hint:u,diagnosticId:i,logPath:a,...o===void 0?{}:{logPathUnavailable:o},...l===void 0?{}:{diagnosticsRecord:l},...d===void 0?{}:{retriable:d},...f===void 0?{}:{supportedOn:f},details:ee}}const ce=/^\S+ exited with code -?\d+$/;function le(e,t,n){if(e!==`COMMAND_FAILED`||n?.processExitError!==!0)return t;let r=fe(typeof n?.stderr==`string`?n.stderr:``);return r?ce.test(t)?r:t.includes(r)?t:`${t}: ${r}`:t}const ue=[/^an error was encountered processing the command/i,/^underlying error\b/i,/^simulator device failed to complete the requested operation/i],de=/^(?:(?:adb|xcrun|simctl):\s*)?(?:error:\s*)?/i;function fe(e){for(let t of e.split(`
2
- `)){let e=t.trim();if(!e||ue.some(t=>t.test(e)))continue;let n=e.replace(de,``).trim();if(n)return n.length>200?`${n.slice(0,200)}...`:n}return null}function M(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function N(e){if(!e||typeof e!=`object`)return;let{session:t,requestId:n}=e;if(typeof t==`string`&&typeof n==`string`&&t.length!==0&&n.length!==0)return{session:t,requestId:n}}function pe(e,t){let n=e?.[t];return typeof n==`boolean`?n:void 0}const me=[`startupRuleMatched`,`startupHostDeadlineHit`];function he(e){if(!e)return;let t={...e};for(let e of me)delete t[e];return delete t.hint,delete t.diagnosticId,delete t.logPath,delete t.logPathUnavailable,delete t.diagnosticsRecord,delete t.retriable,delete t.supportedOn,Object.keys(t).length>0?t:void 0}const ge={DEVICE_IN_USE:!0};function _e(e){return re.includes(e)}function P(e){return _e(e)?ge[e]:void 0}function F(e){switch(e){case`INVALID_ARGS`:return`Check command arguments and run --help for usage examples.`;case`SESSION_NOT_FOUND`:return`Run open first or pass an explicit device selector.`;case`TOOL_MISSING`:return`Install required platform tooling and ensure it is available in PATH.`;case`DEVICE_NOT_FOUND`:return`Verify the target device is booted/connected and selectors match.`;case`APP_NOT_INSTALLED`:return`Run apps to discover the exact installed package or bundle id, or install the app before open.`;case`UNSUPPORTED_OPERATION`:return`This command is not available for the selected platform/device.`;case`UNSUPPORTED_PLATFORM`:return`This platform is not supported for the requested operation; run devices to inspect available targets.`;case`AMBIGUOUS_MATCH`:return`Multiple candidates matched. Narrow the query or pass an exact identifier.`;case`DEVICE_IN_USE`:return`The device is busy with another agent-device request; retry once it frees up.`;case`REPLAY_DIVERGENCE`:return`Read details.divergence (screen/suggestions) for repair context, or rerun with --json for the full report.`;case`REPAIR_SESSION_EXPIRED`:return`The --save-script repair session was reaped before it was finalized; re-run replay <script> --save-script from the start.`;case`REPAIR_COMMIT_FAILED`:return`The repair transaction completed, but committing its healed script failed at teardown (no-clobber refusal or a filesystem error); inspect the target path/permissions, then re-run replay <script> --save-script to retry.`;case`NOT_IMPLEMENTED`:return`This command is part of the planned API but is not implemented yet.`;case`COMMAND_FAILED`:return`Retry with --debug and inspect diagnostics log for details.`;case`UNAUTHORIZED`:return`Refresh daemon metadata and retry the command.`;case`UNKNOWN`:return`Unexpected internal error. Retry with --debug and report the diagnostics log if it persists.`;default:return`Retry with --debug and inspect diagnostics log for details.`}}function I(e,t,n={}){return e.details={...e.details,...n,dispatched:t},e}function L(e,t){if(t===0)return e;let n=e?.dispatchedSteps;return{...e,dispatchedSteps:t+(typeof n==`number`?n:0),dispatched:`unknown`}}function R(e,t){return e instanceof h&&(e.details=L(e.details,t)),e}function z(e,t){return e.details?.dispatched===void 0?I(e,t):e}const B={interactiveOnly:`snapshotInteractiveOnly`,depth:`snapshotDepth`,scope:`snapshotScope`,raw:`snapshotRaw`,observeOnly:`snapshotObserveOnly`,customActions:`snapshotCustomActions`,forceFull:`snapshotForceFull`,includeHiddenContentHints:`snapshotIncludeHiddenContentHints`,preferredBackend:`snapshotPreferredBackend`},ve=[`observeOnly`,`interactiveOnly`,`depth`,`scope`,`raw`,`customActions`,`forceFull`],ye=[`observeOnly`,`interactiveOnly`,`preferredBackend`,`depth`,`scope`,`raw`,`customActions`,`includeHiddenContentHints`],be=[`depth`,`interactiveOnly`,`raw`,`scope`,`customActions`];function V(e,t){return Object.fromEntries(t.map(t=>[t,e?.[B[t]]]))}function xe(e,t){return Object.fromEntries(t.flatMap(t=>{let n=e?.[t];return n===void 0?[]:[[B[t],n]]}))}const H={application:`application`,navigationbar:`navigation-bar`,tabbar:`tab-bar`,button:`button`,imagebutton:`button`,link:`link`,cell:`cell`,statictext:`text`,checkedtextview:`text`,textbox:`text-field`,textfield:`text-field`,edittext:`text-field`,textarea:`text-view`,switch:`switch`,slider:`slider`,image:`image`,imageview:`image`,webview:`webview`,framelayout:`group`,linearlayout:`group`,relativelayout:`group`,constraintlayout:`group`,viewgroup:`group`,view:`group`,listview:`list`,recyclerview:`list`,collectionview:`collection`,searchfield:`search`,heading:`heading`,activityindicator:`activity-indicator`,progressindicator:`progress-indicator`,segmentedcontrol:`segmented-control`,group:`group`,window:`window`,checkbox:`checkbox`,radio:`radio`,menuitem:`menu-item`,toolbar:`toolbar`,scrollarea:`scroll-area`,scrollview:`scroll-area`,nestedscrollview:`scroll-area`,table:`table`};function Se(e){return Object.prototype.hasOwnProperty.call(H,e)?H[e]:void 0}function U(e){let t=e,n=e.replaceAll(/XCUIElementType/gi,``).toLowerCase(),r=t.includes(`.`)&&(t.startsWith(`android.`)||t.startsWith(`androidx.`)||t.startsWith(`com.`));return n.includes(`.`)&&(n=n.replace(/^android\.widget\./,``).replace(/^android\.view\./,``).replace(/^android\.webkit\./,``).replace(/^androidx\./,``).replace(/^com\.google\.android\./,``).replace(/^com\.android\./,``),r&&n.includes(`.`)&&(n=n.slice(n.lastIndexOf(`.`)+1))),n===`textview`?r?`text`:`text-view`:Se(n)||n||`element`}function Ce(e){if(e===void 0||e.backend===void 0)return{};switch(e.backend){case`xctest`:return{backend:e.backend,producer:e.producer};case`android`:return{backend:e.backend,producer:e.producer};case`harmonyos-arkui`:return{backend:e.backend,producer:e.producer};case`macos-helper`:return{backend:e.backend,producer:e.producer};case`linux-atspi`:return{backend:e.backend,producer:e.producer};case`web`:return{backend:e.backend,producer:e.producer}}}function we(e){return e===`xctest`||e===`android`||e===`harmonyos-arkui`||e===`macos-helper`||e===`linux-atspi`||e===`web`}function Te(e){return e===void 0||e===`xctest`||e===`android`||e===`harmonyos-arkui`}const Ee=[`bundle_changed`,`stale_target`,`missing_after_wait`,`interaction_foreground_guard`];function De(e){return typeof e==`string`&&Ee.includes(e)}const W=[`unknown`,`notRunning`,`runningBackgroundSuspended`,`runningBackground`,`runningForeground`];Object.freeze(W.filter(e=>e!==`runningForeground`));function Oe(e){return typeof e==`string`&&W.includes(e)}function ke(e,t){return t.postGestureOutcome??=e.postGestureOutcome,t}function Ae(e){return e.map((e,t)=>({...e,ref:e.ref??`e${t+1}`,kind:U(e.type??`Element`)}))}const je=/^~s(\d+)$/,Me=`Refs look like @e12, optionally pinned to the snapshot generation that minted them: @e12~s3 (the ref, then "~s" and the refsGeneration reported by the issuing snapshot/find response).`;function G(e){let t=e.trim(),n=t.indexOf(`~`);if(n===-1)return{base:t};let r=je.exec(t.slice(n));return!r||n===0?null:{base:t.slice(0,n),generation:Number(r[1])}}function Ne(e){let t=G(e);if(!t)return null;let n=t.base;return n.startsWith(`@`)?n.slice(1)||null:n.startsWith(`e`)?n:null}function Pe(e,t){return e.find(e=>e.ref===t)??null}function Fe(e){return JSON.stringify({interactiveOnly:e?.interactiveOnly===!0,depth:typeof e?.depth==`number`?e.depth:null,scope:e?.scope?.trim()||null,raw:e?.raw===!0,customActions:e?.customActions===!0})}function Ie(e){if(e)return V(e,be)}function Le(e){return{x:Math.round(e.x+e.width/2),y:Math.round(e.y+e.height/2)}}const K=[`ios`,`android`,`harmonyos`];function Re(e){return K.some(t=>t===e)}const ze=[`ios-simulator`,`ios-instance`,`android-instance`,`harmonyos-instance`,`macos-app`],q={ios:`ios-instance`,android:`android-instance`,harmonyos:`harmonyos-instance`};function Be(e){return e===void 0?void 0:q[e]}const Ve=new Map([...Object.entries(q).flatMap(([e,t])=>t===void 0?[]:[[t,e]]),[`macos-app`,`macos`]]);function He(e){return Ve.get(e)}const Ue=[`summary`,`headers`,`body`,`all`],We=[`digest`,`default`,`full`];function Ge(e){return e!==void 0&&e!=="default"}function J(e,t,n,r){return{ok:!1,error:{code:e,message:t,...r?.hint?{hint:r.hint}:{},...r?.retriable===void 0?{}:{retriable:r.retriable},...n?{details:n}:{}}}}const Ke=`No active session. Run open first.`;function qe(){return J(`SESSION_NOT_FOUND`,Ke)}function Y(e){return{parse(t){return e(t,`$`)}}}function X(e,t){throw Error(`${e}: ${t}`)}function Z(e,t){return(!e||typeof e!=`object`||Array.isArray(e))&&X(t,`Expected an object`),e}function Je(e,t){return typeof e!=`string`&&X(t,`Expected a string`),e}function Ye(e,t){return Number.isInteger(e)||X(t,`Expected an integer`),e}function Xe(e,t){return Array.isArray(e)||X(t,`Expected an array`),e}function Q(e,t,n){let r=e[t];return r===void 0?void 0:Je(r,`${n}.${t}`)}function Ze(e,t,n){let r=e[t];if(r!==void 0)return Xe(r,`${n}.${t}`).map((e,r)=>Je(e,`${n}.${t}[${String(r)}]`))}function Qe(e,t,n){let r=e[t];return r===void 0?void 0:Ye(r,`${n}.${t}`)}function $(e,t,n){let r=e[t];return r===void 0?void 0:Z(r,`${n}.${t}`)}function $e(e,t,n,r){let i=e[t];if(i!==void 0)return(typeof i!=`string`||!n.includes(i))&&X(`${r}.${t}`,`Expected one of: ${n.join(`, `)}`),i}const et=Y((e,t)=>{let n=Z(e,t);return{platform:$e(n,`platform`,K,t),metroHost:Q(n,`metroHost`,t),metroPort:Qe(n,`metroPort`,t),bundleUrl:Q(n,`bundleUrl`,t),launchUrl:Q(n,`launchUrl`,t)}});function tt(e,t){let n=e.id;return n==null||typeof n!=`string`&&typeof n!=`number`&&X(`${t}.id`,`Expected a string, number, or null`),n}const nt=Y((e,t)=>{let n=Z(e,t);return{jsonrpc:Q(n,`jsonrpc`,t),id:tt(n,t),method:Q(n,`method`,t),params:n.params}}),rt=Y((e,t)=>{let n=Z(e,t);return{token:Q(n,`token`,t),session:Q(n,`session`,t),command:Q(n,`command`,t),positionals:Ze(n,`positionals`,t),input:$(n,`input`,t),flags:$(n,`flags`,t),runtime:$(n,`runtime`,t),meta:$(n,`meta`,t)}});export{x as $,Ie as A,R as B,ke as C,Ne as D,we as E,O as F,T as G,E as H,oe as I,j as J,se as K,F as L,G as M,Te as N,xe as O,h as P,P as Q,L as R,U as S,De as T,ne as U,z as V,k as W,ie as X,N as Y,_ as Z,ve as _,rt as a,c as at,Le as b,Ge as c,Be as d,S as et,qe as f,ye as g,Me as h,We as i,s as it,Ce as j,V as k,Re as l,W as m,Ue as n,y as nt,et as o,He as p,A as q,Ke as r,g as rt,J as s,ze as t,D as tt,nt as u,Ae as v,Oe as w,Pe as x,Fe as y,I as z};
1
+ import{r as e}from"./rolldown-runtime.js";const t=/(token|secret|password|authorization|cookie|api[_-]?key|access[_-]?key|private[_-]?key|user[_-]?code|device[_-]?code|refresh[_-]?credential)/i,n=/\b(?:bearer\s+[a-z0-9._-]+|adc_(?:agent|live|refresh|cli)_[a-z0-9._-]+)\b/gi,r=/\b([a-z0-9_-]*(?:api[_-]?key|token|secret|password|user[_-]?code|device[_-]?code|refresh[_-]?credential)[a-z0-9_-]*)(\s*[=:]\s*)("[^"]*"|'[^']*'|\S+)/gi,i=/https?:\/\/[^\s"'<>]+/gi,a=8192,o=`...<truncated>`;function s(e){return l(e,new WeakSet)}function c(e){if(!e||typeof e!=`object`)return;let t=e;if(typeof t.message==`string`&&t.message.length!==0)return s({message:t.message,...typeof t.code==`string`&&t.code.length>0?{code:t.code}:{}})}function l(e,n,r){if(e==null)return e;if(typeof e==`string`)return u(e,r);if(typeof e!=`object`)return e;if(n.has(e))return`[Circular]`;if(n.add(e),Array.isArray(e))return e.map(e=>l(e,n));let i={};for(let[r,a]of Object.entries(e)){if(t.test(r)){i[r]=`[REDACTED]`;continue}i[r]=l(a,n,r)}return i}function u(e,i){let a=e.trim();if(!a)return d(e,i);if(i&&t.test(i))return`[REDACTED]`;let o=f(a);return o=o.replace(n,`[REDACTED]`),o=o.replace(r,(e,t,n,r,i,a)=>ee({key:t,separator:n,rawValue:r,offset:i,input:a})||p(r)?e:`${t}${n}[REDACTED]`),d(o,i)}function d(e,t){if(t===`stderr`){if(e.length<=a)return e;let t=`\n${o}\n`,n=a-t.length,r=Math.ceil(n/2);return`${e.slice(0,r)}${t}${e.slice(-(n-r))}`}return e.length<=400?e:`${e.slice(0,386)}${o}`}function f(e){return e.replace(i,e=>m(e)??e)}function p(e){return/^adc_(?:agent|live|refresh|cli)_\.\.\.$/i.test(e)}function ee(e){if(e.key.toLowerCase()!==`token`||!e.separator.includes(`:`))return!1;try{return new URL(e.rawValue).pathname.replace(/\/+$/,``)===`/api-keys`&&/(?:^|\b)(?:service\/)?api\s+$/i.test(e.input.slice(0,e.offset))}catch{return!1}}function m(e){try{let t=new URL(e);return t.search&&=`?REDACTED`,(t.username||t.password)&&(t.username=`REDACTED`,t.password=`REDACTED`),t.toString()}catch{return null}}var te=e({AppError:()=>_,KNOWN_APP_ERROR_CODES:()=>h,PRE_DISPATCH_REFUSAL_REASONS:()=>C,appNotInstalledDetails:()=>ie,asAppError:()=>k,createRequestCanceledError:()=>w,defaultHintForCode:()=>I,detailsAfterDispatchedSteps:()=>R,discloseDispatch:()=>L,discloseDispatchAfterSteps:()=>z,discloseUnclassifiedDispatch:()=>B,errorMessage:()=>D,isAgentDeviceError:()=>A,isRequestCanceledDetails:()=>T,isRequestCanceledError:()=>E,normalizeAgentDeviceError:()=>j,normalizeError:()=>M,readDiagnosticsRecordRef:()=>P,readElementMatchCandidateRefs:()=>b,readErrorCandidateViews:()=>y,retriableForErrorCode:()=>F,sessionAppRequiredDetails:()=>re,sessionOrDeviceSelectorRequiredDetails:()=>ae,summarizeCommandAttemptFailures:()=>O,throwDaemonError:()=>S,toAppErrorCode:()=>v});const h=[`INVALID_ARGS`,`DEVICE_NOT_FOUND`,`DEVICE_IN_USE`,`TOOL_MISSING`,`APP_NOT_INSTALLED`,`UNSUPPORTED_PLATFORM`,`UNSUPPORTED_OPERATION`,`NOT_IMPLEMENTED`,`COMMAND_FAILED`,`SESSION_NOT_FOUND`,`UNAUTHORIZED`,`AMBIGUOUS_MATCH`,`REPLAY_DIVERGENCE`,`REPAIR_SESSION_EXPIRED`,`REPAIR_COMMIT_FAILED`,`UNKNOWN`],g=Symbol.for(`agent-device.AppError`);var _=class e extends Error{static[Symbol.hasInstance](t){return this===e?typeof t==`object`&&!!t&&t[g]===!0:Function.prototype[Symbol.hasInstance].call(this,t)}code;details;cause;constructor(e,t,n,r){super(t),Object.defineProperty(this,g,{value:!0}),this.code=e,this.details=n,this.cause=r}};function v(e,t=`COMMAND_FAILED`){return typeof e==`string`&&e.length>0?e:t}function y(e){let t=x(e?.candidates),n=[];if(t.length>0){let r=typeof e?.matches==`number`?e.matches:t.length,i=typeof e?.refsGeneration==`number`?e.refsGeneration:void 0;n.push({kind:`element-match`,candidates:t,matches:r,...i===void 0?{}:{refsGeneration:i}})}let r=ne(e?.devices);return r.length>0&&n.push({kind:`device`,devices:r}),n}function b(e){return x(e?.candidates).flatMap(e=>{let t=/^@(e\d+)(?:~s\d+)?(?:\s|$)/.exec(e);return t?.[1]?[t[1]]:[]})}function x(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function ne(e){return Array.isArray(e)?e.filter(e=>typeof e==`object`&&!!e&&typeof e.id==`string`&&typeof e.name==`string`):[]}function S(e){throw new _(v(e.code),e.message,{...e.details??{},hint:e.hint,diagnosticId:e.diagnosticId,logPath:e.logPath,logPathUnavailable:e.logPathUnavailable,diagnosticsRecord:e.diagnosticsRecord,retriable:e.retriable,supportedOn:e.supportedOn},e.cause)}const C={sessionAppRequired:`session_app_required`,sessionOrDeviceSelectorRequired:`session_or_device_selector_required`,appNotInstalled:`app_not_installed`};function re(){return{reason:C.sessionAppRequired,dispatched:`no`}}function ie(){return{reason:C.appNotInstalled,dispatched:`no`}}function ae(){return{reason:C.sessionOrDeviceSelectorRequired,dispatched:`no`}}const oe=`request_canceled`,se=`request canceled`;function w(e,t){return new _(`COMMAND_FAILED`,se,{hint:`The request was canceled intentionally (explicit cancel or client disconnect) — no retry is needed unless the cancellation was unintended.`,...e,reason:oe},t)}function T(e){return e?.reason===oe}function E(e){return!(e instanceof _)||e.code!==`COMMAND_FAILED`?!1:T(e.details)?!0:e.message===se}function D(e){return e instanceof Error?e.message:String(e)}function O(e){return e.map(e=>({args:e.args.join(` `),exitCode:e.exitCode,stderr:e.stderr.slice(0,400)}))}function k(e,t=`UNKNOWN`){return e instanceof _?e:e instanceof Error?new _(t,e.message,void 0,e):new _(t,`Unknown error`,{err:e})}function A(e){return e instanceof _}function j(e,t={}){return M(e,t)}function M(e,t={}){let n=k(e),r=n.details?s(n.details):void 0,i=N(r,`diagnosticId`)??t.diagnosticId,a=N(r,`logPath`)??t.logPath,o=N(r,`logPathUnavailable`),l=P(r?.diagnosticsRecord)??t.diagnosticsRecord,u=N(r,`hint`)??I(n.code),d=pe(r,`retriable`)??F(n.code),f=N(r,`supportedOn`),p=he(r),ee=le(n.code,n.message,r),m=c(n.cause);return{code:n.code,message:ee,...m===void 0?{}:{cause:m},hint:u,diagnosticId:i,logPath:a,...o===void 0?{}:{logPathUnavailable:o},...l===void 0?{}:{diagnosticsRecord:l},...d===void 0?{}:{retriable:d},...f===void 0?{}:{supportedOn:f},details:p}}const ce=/^\S+ exited with code -?\d+$/;function le(e,t,n){if(e!==`COMMAND_FAILED`||n?.processExitError!==!0)return t;let r=fe(typeof n?.stderr==`string`?n.stderr:``);return r?ce.test(t)?r:t.includes(r)?t:`${t}: ${r}`:t}const ue=[/^an error was encountered processing the command/i,/^underlying error\b/i,/^simulator device failed to complete the requested operation/i],de=/^(?:(?:adb|xcrun|simctl):\s*)?(?:error:\s*)?/i;function fe(e){for(let t of e.split(`
2
+ `)){let e=t.trim();if(!e||ue.some(t=>t.test(e)))continue;let n=e.replace(de,``).trim();if(n)return n.length>200?`${n.slice(0,200)}...`:n}return null}function N(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function P(e){if(!e||typeof e!=`object`)return;let{session:t,requestId:n}=e;if(typeof t==`string`&&typeof n==`string`&&t.length!==0&&n.length!==0)return{session:t,requestId:n}}function pe(e,t){let n=e?.[t];return typeof n==`boolean`?n:void 0}const me=[`startupRuleMatched`,`startupHostDeadlineHit`];function he(e){if(!e)return;let t={...e};for(let e of me)delete t[e];return delete t.hint,delete t.diagnosticId,delete t.logPath,delete t.logPathUnavailable,delete t.diagnosticsRecord,delete t.retriable,delete t.supportedOn,Object.keys(t).length>0?t:void 0}const ge={DEVICE_IN_USE:!0};function _e(e){return h.includes(e)}function F(e){return _e(e)?ge[e]:void 0}function I(e){switch(e){case`INVALID_ARGS`:return`Check command arguments and run --help for usage examples.`;case`SESSION_NOT_FOUND`:return`Run open first or pass an explicit device selector.`;case`TOOL_MISSING`:return`Install required platform tooling and ensure it is available in PATH.`;case`DEVICE_NOT_FOUND`:return`Verify the target device is booted/connected and selectors match.`;case`APP_NOT_INSTALLED`:return`Run apps to discover the exact installed package or bundle id, or install the app before open.`;case`UNSUPPORTED_OPERATION`:return`This command is not available for the selected platform/device.`;case`UNSUPPORTED_PLATFORM`:return`This platform is not supported for the requested operation; run devices to inspect available targets.`;case`AMBIGUOUS_MATCH`:return`Multiple candidates matched. Narrow the query or pass an exact identifier.`;case`DEVICE_IN_USE`:return`The device is busy with another agent-device request; retry once it frees up.`;case`REPLAY_DIVERGENCE`:return`Read details.divergence (screen/suggestions) for repair context, or rerun with --json for the full report.`;case`REPAIR_SESSION_EXPIRED`:return`The --save-script repair session was reaped before it was finalized; re-run replay <script> --save-script from the start.`;case`REPAIR_COMMIT_FAILED`:return`The repair transaction completed, but committing its healed script failed at teardown (no-clobber refusal or a filesystem error); inspect the target path/permissions, then re-run replay <script> --save-script to retry.`;case`NOT_IMPLEMENTED`:return`This command is part of the planned API but is not implemented yet.`;case`COMMAND_FAILED`:return`Retry with --debug and inspect diagnostics log for details.`;case`UNAUTHORIZED`:return`Refresh daemon metadata and retry the command.`;case`UNKNOWN`:return`Unexpected internal error. Retry with --debug and report the diagnostics log if it persists.`;default:return`Retry with --debug and inspect diagnostics log for details.`}}function L(e,t,n={}){return e.details={...e.details,...n,dispatched:t},e}function R(e,t){if(t===0)return e;let n=e?.dispatchedSteps;return{...e,dispatchedSteps:t+(typeof n==`number`?n:0),dispatched:`unknown`}}function z(e,t){return e instanceof _&&(e.details=R(e.details,t)),e}function B(e,t){return e.details?.dispatched===void 0?L(e,t):e}const V={interactiveOnly:`snapshotInteractiveOnly`,depth:`snapshotDepth`,scope:`snapshotScope`,raw:`snapshotRaw`,observeOnly:`snapshotObserveOnly`,customActions:`snapshotCustomActions`,forceFull:`snapshotForceFull`,includeHiddenContentHints:`snapshotIncludeHiddenContentHints`,preferredBackend:`snapshotPreferredBackend`},ve=[`observeOnly`,`interactiveOnly`,`depth`,`scope`,`raw`,`customActions`,`forceFull`],ye=[`observeOnly`,`interactiveOnly`,`preferredBackend`,`depth`,`scope`,`raw`,`customActions`,`includeHiddenContentHints`],be=[`depth`,`interactiveOnly`,`raw`,`scope`,`customActions`];function H(e,t){return Object.fromEntries(t.map(t=>[t,e?.[V[t]]]))}function xe(e,t){return Object.fromEntries(t.flatMap(t=>{let n=e?.[t];return n===void 0?[]:[[V[t],n]]}))}const U={application:`application`,navigationbar:`navigation-bar`,tabbar:`tab-bar`,button:`button`,imagebutton:`button`,link:`link`,cell:`cell`,statictext:`text`,checkedtextview:`text`,textbox:`text-field`,textfield:`text-field`,edittext:`text-field`,textarea:`text-view`,switch:`switch`,slider:`slider`,image:`image`,imageview:`image`,webview:`webview`,framelayout:`group`,linearlayout:`group`,relativelayout:`group`,constraintlayout:`group`,viewgroup:`group`,view:`group`,listview:`list`,recyclerview:`list`,collectionview:`collection`,searchfield:`search`,heading:`heading`,activityindicator:`activity-indicator`,progressindicator:`progress-indicator`,segmentedcontrol:`segmented-control`,group:`group`,window:`window`,checkbox:`checkbox`,radio:`radio`,menuitem:`menu-item`,toolbar:`toolbar`,scrollarea:`scroll-area`,scrollview:`scroll-area`,nestedscrollview:`scroll-area`,table:`table`};function Se(e){return Object.prototype.hasOwnProperty.call(U,e)?U[e]:void 0}function W(e){let t=e,n=e.replaceAll(/XCUIElementType/gi,``).toLowerCase(),r=t.includes(`.`)&&(t.startsWith(`android.`)||t.startsWith(`androidx.`)||t.startsWith(`com.`));return n.includes(`.`)&&(n=n.replace(/^android\.widget\./,``).replace(/^android\.view\./,``).replace(/^android\.webkit\./,``).replace(/^androidx\./,``).replace(/^com\.google\.android\./,``).replace(/^com\.android\./,``),r&&n.includes(`.`)&&(n=n.slice(n.lastIndexOf(`.`)+1))),n===`textview`?r?`text`:`text-view`:Se(n)||n||`element`}function Ce(e){if(e===void 0||e.backend===void 0)return{};switch(e.backend){case`xctest`:return{backend:e.backend,producer:e.producer};case`android`:return{backend:e.backend,producer:e.producer};case`harmonyos-arkui`:return{backend:e.backend,producer:e.producer};case`macos-helper`:return{backend:e.backend,producer:e.producer};case`linux-atspi`:return{backend:e.backend,producer:e.producer};case`web`:return{backend:e.backend,producer:e.producer}}}function we(e){return e===`xctest`||e===`android`||e===`harmonyos-arkui`||e===`macos-helper`||e===`linux-atspi`||e===`web`}function Te(e){return e===void 0||e===`xctest`||e===`android`||e===`harmonyos-arkui`}const Ee=[`bundle_changed`,`stale_target`,`missing_after_wait`,`interaction_foreground_guard`];function De(e){return typeof e==`string`&&Ee.includes(e)}const G=[`unknown`,`notRunning`,`runningBackgroundSuspended`,`runningBackground`,`runningForeground`];Object.freeze(G.filter(e=>e!==`runningForeground`));function Oe(e){return typeof e==`string`&&G.includes(e)}function ke(e,t){return t.postGestureOutcome??=e.postGestureOutcome,t}function Ae(e){return e.map((e,t)=>({...e,ref:e.ref??`e${t+1}`,kind:W(e.type??`Element`)}))}const je=/^~s(\d+)$/,Me=`Refs look like @e12, optionally pinned to the snapshot generation that minted them: @e12~s3 (the ref, then "~s" and the refsGeneration reported by the issuing snapshot/find response).`;function K(e){let t=e.trim(),n=t.indexOf(`~`);if(n===-1)return{base:t};let r=je.exec(t.slice(n));return!r||n===0?null:{base:t.slice(0,n),generation:Number(r[1])}}function Ne(e){let t=K(e);if(!t)return null;let n=t.base;return n.startsWith(`@`)?n.slice(1)||null:n.startsWith(`e`)?n:null}function Pe(e,t){return e.find(e=>e.ref===t)??null}function Fe(e){return JSON.stringify({interactiveOnly:e?.interactiveOnly===!0,depth:typeof e?.depth==`number`?e.depth:null,scope:e?.scope?.trim()||null,raw:e?.raw===!0,customActions:e?.customActions===!0})}function Ie(e){if(e)return H(e,be)}function Le(e){return{x:Math.round(e.x+e.width/2),y:Math.round(e.y+e.height/2)}}const q=[`ios`,`android`,`harmonyos`];function Re(e){return q.some(t=>t===e)}const ze=[`ios-simulator`,`ios-instance`,`android-instance`,`harmonyos-instance`,`macos-app`],J={ios:`ios-instance`,android:`android-instance`,harmonyos:`harmonyos-instance`};function Be(e){return e===void 0?void 0:J[e]}const Ve=new Map([...Object.entries(J).flatMap(([e,t])=>t===void 0?[]:[[t,e]]),[`macos-app`,`macos`]]);function He(e){return Ve.get(e)}const Ue=[`summary`,`headers`,`body`,`all`],We=[`digest`,`default`,`full`];function Ge(e){return e!==void 0&&e!=="default"}function Ke(e,t,n,r){return{ok:!1,error:{code:e,message:t,...r?.hint?{hint:r.hint}:{},...r?.retriable===void 0?{}:{retriable:r.retriable},...n?{details:n}:{}}}}const qe=`No active session. Run open first.`;function Je(){return Ke(`SESSION_NOT_FOUND`,qe)}function Y(e){return{parse(t){return e(t,`$`)}}}function X(e,t){throw Error(`${e}: ${t}`)}function Z(e,t){return(!e||typeof e!=`object`||Array.isArray(e))&&X(t,`Expected an object`),e}function Ye(e,t){return typeof e!=`string`&&X(t,`Expected a string`),e}function Xe(e,t){return Number.isInteger(e)||X(t,`Expected an integer`),e}function Ze(e,t){return Array.isArray(e)||X(t,`Expected an array`),e}function Q(e,t,n){let r=e[t];return r===void 0?void 0:Ye(r,`${n}.${t}`)}function Qe(e,t,n){let r=e[t];if(r!==void 0)return Ze(r,`${n}.${t}`).map((e,r)=>Ye(e,`${n}.${t}[${String(r)}]`))}function $e(e,t,n){let r=e[t];return r===void 0?void 0:Xe(r,`${n}.${t}`)}function $(e,t,n){let r=e[t];return r===void 0?void 0:Z(r,`${n}.${t}`)}function et(e,t,n,r){let i=e[t];if(i!==void 0)return(typeof i!=`string`||!n.includes(i))&&X(`${r}.${t}`,`Expected one of: ${n.join(`, `)}`),i}const tt=Y((e,t)=>{let n=Z(e,t);return{platform:et(n,`platform`,q,t),metroHost:Q(n,`metroHost`,t),metroPort:$e(n,`metroPort`,t),bundleUrl:Q(n,`bundleUrl`,t),launchUrl:Q(n,`launchUrl`,t)}});function nt(e,t){let n=e.id;return n==null||typeof n!=`string`&&typeof n!=`number`&&X(`${t}.id`,`Expected a string, number, or null`),n}const rt=Y((e,t)=>{let n=Z(e,t);return{jsonrpc:Q(n,`jsonrpc`,t),id:nt(n,t),method:Q(n,`method`,t),params:n.params}}),it=Y((e,t)=>{let n=Z(e,t);return{token:Q(n,`token`,t),session:Q(n,`session`,t),command:Q(n,`command`,t),positionals:Qe(n,`positionals`,t),input:$(n,`input`,t),flags:$(n,`flags`,t),runtime:$(n,`runtime`,t),meta:$(n,`meta`,t)}});export{F as $,Ie as A,L as B,ke as C,Ne as D,we as E,ie as F,A as G,B as H,k as I,j as J,T as K,w as L,K as M,Te as N,xe as O,_ as P,y as Q,I as R,W as S,De as T,D as U,z as V,te as W,P as X,M as Y,b as Z,ve as _,it as a,s as at,Le as b,Ge as c,Be as d,re as et,Je as f,ye as g,Me as h,We as i,v as it,Ce as j,H as k,Re as l,G as m,Ue as n,O as nt,tt as o,c as ot,He as p,E as q,qe as r,S as rt,Ke as s,ze as t,ae as tt,rt as u,Ae as v,Oe as w,Pe as x,Fe as y,R as z};
@@ -1 +1 @@
1
- import{Fn as e}from"./sdk-batch.js";function t(t,n,r,i){return e(t,n,r,typeof i==`boolean`?{requireRect:i}:i)}export{t};
1
+ import{Nn as e}from"./sdk-batch.js";function t(t,n,r,i){return e(t,n,r,typeof i==`boolean`?{requireRect:i}:i)}export{t};
@@ -1,5 +1,5 @@
1
1
  import { n as DaemonArtifactType } from "./sdk-contracts.js";
2
- //#region src/io.d.ts
2
+ //#region packages/contracts/src/artifact-adapter.d.ts
3
3
  type FileInputRef = {
4
4
  kind: 'path';
5
5
  path: string;
@@ -73,6 +73,8 @@ type LocalArtifactAdapterOptions = {
73
73
  tempDir?: string;
74
74
  rootDir?: string;
75
75
  };
76
+ //#endregion
77
+ //#region src/io.d.ts
76
78
  declare function createLocalArtifactAdapter(options?: LocalArtifactAdapterOptions): ArtifactAdapter;
77
79
  //#endregion
78
- export { FileOutputRef as a, ReserveOutputOptions as c, ResolvedInputFile as d, TemporaryFile as f, FileInputRef as i, ReservedOutputFile as l, ArtifactDescriptor as n, LocalArtifactAdapterOptions as o, createLocalArtifactAdapter as p, CreateTempFileOptions as r, OutputVisibility as s, ArtifactAdapter as t, ResolveInputOptions as u };
80
+ export { FileInputRef as a, OutputVisibility as c, ResolveInputOptions as d, ResolvedInputFile as f, CreateTempFileOptions as i, ReserveOutputOptions as l, ArtifactAdapter as n, FileOutputRef as o, TemporaryFile as p, ArtifactDescriptor as r, LocalArtifactAdapterOptions as s, createLocalArtifactAdapter as t, ReservedOutputFile as u };
@@ -15,11 +15,10 @@ type FillVerificationTarget = {
15
15
  rect: Rect;
16
16
  };
17
17
  /**
18
- * Target-bound evidence that a fill moved a field's content from `before` to `after` without raw
19
- * equality with `requested` being reachable, because app-owned formatting prevents it or the field's
20
- * accessibility value does not echo the typed text. Bound to the
21
- * {@link FillVerificationTarget} it was collected against so another field, or the same field after
22
- * it re-laid out, cannot borrow this evidence.
18
+ * Target-bound read-back evidence when a fill could not confirm the requested text. The observed
19
+ * value may reflect app-owned formatting or altered input; this evidence makes no correctness
20
+ * claim. Bound to the {@link FillVerificationTarget} it was collected against so a different
21
+ * field cannot borrow the observation.
23
22
  */
24
23
  type FillUnconfirmedVerification = {
25
24
  verification: 'unconfirmed';
@@ -1 +1 @@
1
- import{En as e}from"./sdk-batch.js";function t(t,n,r){return e(typeof t==`string`?t:t.raw,n,r)}export{t};
1
+ import{wn as e}from"./sdk-batch.js";function t(t,n,r){return e(typeof t==`string`?t:t.raw,n,r)}export{t};
Binary file