agent-device 0.21.23 → 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 (435) hide show
  1. package/README.md +6 -6
  2. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.23.apk → agent-device-android-ime-helper-0.21.25.apk} +0 -0
  3. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.25.apk.sha256 +1 -0
  4. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.23.manifest.json → agent-device-android-ime-helper-0.21.25.manifest.json} +4 -4
  5. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.apk +0 -0
  6. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.apk.sha256 +1 -0
  7. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.manifest.json +16 -0
  8. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/SnapshotTraversal.swift +12 -6
  9. package/apple/macos-helper/Tests/AgentDeviceMacOSHelperTests/RectResponseTests.swift +21 -0
  10. package/apple/snapshot-bridge/README.md +9 -7
  11. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +159 -4
  12. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerHttpRequestFraming.swift +139 -0
  13. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerListenerPeer.swift +41 -0
  14. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerListenerToken.swift +25 -0
  15. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandDispatch.swift +56 -0
  16. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +14 -5
  17. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Environment.swift +18 -11
  18. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +8 -0
  19. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +12 -0
  20. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +25 -1
  21. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCaptureTarget.swift +1 -1
  22. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotExecution.swift +29 -5
  23. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +0 -3
  24. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +35 -13
  25. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryConfirmation.swift +59 -26
  26. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +19 -5
  27. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +50 -106
  28. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +142 -54
  29. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TypeExecution.swift +4 -1
  30. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +21 -19
  31. package/dist/src/absence-observation-errors.js +1 -0
  32. package/dist/src/adapter.js +1 -1
  33. package/dist/src/adb-executor.js +2 -2
  34. package/dist/src/adb-failure.js +2 -2
  35. package/dist/src/adb.js +1 -1
  36. package/dist/src/agent-browser-lifecycle.js +1 -1
  37. package/dist/src/agent-browser-process-record.js +1 -1
  38. package/dist/src/agent-browser-provider.js +1 -1
  39. package/dist/src/agent-browser-tool.js +1 -1
  40. package/dist/src/agent-device-client.js +2 -2
  41. package/dist/src/alert.js +1 -1
  42. package/dist/src/android-adb.d.ts +3 -2
  43. package/dist/src/android-adb.js +1 -1
  44. package/dist/src/android-input-ownership.js +1 -1
  45. package/dist/src/android-system-surface-disclosure.js +1 -0
  46. package/dist/src/android-text-entry.js +1 -0
  47. package/dist/src/android.js +1 -1
  48. package/dist/src/app-backend.js +1 -1
  49. package/dist/src/app-helpers.js +1 -1
  50. package/dist/src/app-inventory.d.ts +4 -0
  51. package/dist/src/app-launch.js +1 -1
  52. package/dist/src/app-lifecycle.js +4 -3
  53. package/dist/src/app-lifecycle2.js +2 -2
  54. package/dist/src/app-log-files.js +1 -1
  55. package/dist/src/app-log-reconnect.js +1 -1
  56. package/dist/src/app-log-runtime2.js +3 -3
  57. package/dist/src/app-resolution-facade.js +1 -1
  58. package/dist/src/app-resolution.js +2 -2
  59. package/dist/src/app-state-runtime.d.ts +15 -0
  60. package/dist/src/apple-runner-platform.js +1 -1
  61. package/dist/src/application-lifecycle-interaction.js +1 -1
  62. package/dist/src/artifact-download.js +1 -1
  63. package/dist/src/auth.js +1 -1
  64. package/dist/src/aws-device-farm-connection.js +1 -0
  65. package/dist/src/back-mode.js +1 -1
  66. package/dist/src/backend-snapshot-options.js +1 -1
  67. package/dist/src/boot-diagnostics.js +1 -1
  68. package/dist/src/browserstack-connection.js +1 -0
  69. package/dist/src/capture-disclosure.js +1 -0
  70. package/dist/src/cli-config.js +1 -1
  71. package/dist/src/cli-help.js +36 -17
  72. package/dist/src/cli-output.js +1 -1
  73. package/dist/src/cli-runner.js +3 -1
  74. package/dist/src/cli.js +3 -4
  75. package/dist/src/client-companion-tunnel.js +1 -0
  76. package/dist/src/client-metro.js +1 -1
  77. package/dist/src/client-types.d.ts +15 -7
  78. package/dist/src/cloud-artifacts.d.ts +3 -2
  79. package/dist/src/code-signature-cache.js +1 -1
  80. package/dist/src/code-signature.js +1 -1
  81. package/dist/src/command-metadata.js +73 -1
  82. package/dist/src/command-policy.js +1 -0
  83. package/dist/src/command-schema.js +3 -3
  84. package/dist/src/command-surface.js +1 -1
  85. package/dist/src/command-tools.js +2 -2
  86. package/dist/src/connection-runtime.js +1 -1
  87. package/dist/src/connection-verification.js +1 -0
  88. package/dist/src/connection.js +5 -5
  89. package/dist/src/contracts.d.ts +1 -1
  90. package/dist/src/contracts.js +1 -1
  91. package/dist/src/daemon-client-lease-beat.js +1 -1
  92. package/dist/src/daemon-client-lifecycle.js +1 -1
  93. package/dist/src/daemon-client-liveness-probe.js +1 -1
  94. package/dist/src/daemon-policy-file.js +1 -1
  95. package/dist/src/daemon-registration-owner.js +1 -1
  96. package/dist/src/daemon-registration.js +1 -1
  97. package/dist/src/daemon-resolution.js +3 -1
  98. package/dist/src/debug-symbols-facade.js +1 -1
  99. package/dist/src/device-claim-inspection.js +1 -1
  100. package/dist/src/device-input-state.d.ts +6 -17
  101. package/dist/src/device-inventory-context.js +1 -1
  102. package/dist/src/device-readiness-runtime.js +1 -1
  103. package/dist/src/device-release.js +1 -1
  104. package/dist/src/device-selection-resolver.js +1 -1
  105. package/dist/src/device-shell.js +1 -1
  106. package/dist/src/device.js +3 -1
  107. package/dist/src/devicectl.js +1 -1
  108. package/dist/src/diagnostics.js +1 -1
  109. package/dist/src/doctor-facade.js +1 -1
  110. package/dist/src/durable-capture-resource.js +1 -1
  111. package/dist/src/durable-resource.js +1 -1
  112. package/dist/src/engine-eval-script.js +1 -1
  113. package/dist/src/error.js +1 -1
  114. package/dist/src/exec.js +1 -1
  115. package/dist/src/expo-dev-client-launch.js +1 -0
  116. package/dist/src/file.js +3 -1
  117. package/dist/src/find.js +1 -1
  118. package/dist/src/finders.js +1 -1
  119. package/dist/src/generic-settle.js +1 -1
  120. package/dist/src/generic.js +1 -1
  121. package/dist/src/gesture-admission.js +1 -1
  122. package/dist/src/gesture-plan-types.d.ts +2 -5
  123. package/dist/src/gesture-plan.js +1 -1
  124. package/dist/src/gesture-runtime.js +1 -1
  125. package/dist/src/harmonyos.js +1 -1
  126. package/dist/src/hdc.js +1 -1
  127. package/dist/src/helper.js +2 -2
  128. package/dist/src/human-control.js +1 -1
  129. package/dist/src/ime-rebind.js +1 -1
  130. package/dist/src/ime-state.js +1 -1
  131. package/dist/src/index.d.ts +4 -4
  132. package/dist/src/index.js +1 -1
  133. package/dist/src/input-actions.js +1 -1
  134. package/dist/src/input-actions2.js +2 -2
  135. package/dist/src/install-source-network-transport.js +1 -1
  136. package/dist/src/install-source2.js +1 -1
  137. package/dist/src/interaction-error.js +1 -0
  138. package/dist/src/interaction-positionals.js +1 -1
  139. package/dist/src/interaction.js +1 -1
  140. package/dist/src/interaction2.js +1 -1
  141. package/dist/src/interactor-operation-catalog.js +1 -1
  142. package/dist/src/interactor.js +5 -5
  143. package/dist/src/interactor2.js +1 -1
  144. package/dist/src/interactors.js +1 -1
  145. package/dist/src/internal/bin.js +1 -1
  146. package/dist/src/internal/daemon.js +5 -1
  147. package/dist/src/internal/png-worker.js +1 -1
  148. package/dist/src/inventory.js +2 -2
  149. package/dist/src/inventory2.js +1 -1
  150. package/dist/src/inventory6.js +1 -1
  151. package/dist/src/io.d.ts +2 -2
  152. package/dist/src/ios-client.js +1 -1
  153. package/dist/src/ios-settings.js +1 -1
  154. package/dist/src/ios-snapshot-acquisition.js +1 -1
  155. package/dist/src/ios-snapshot-adapter.js +1 -1
  156. package/dist/src/ios-snapshot-engine.js +1 -1
  157. package/dist/src/ios-snapshot-runtime.js +1 -1
  158. package/dist/src/keyed-lock.js +1 -1
  159. package/dist/src/launch-confirmation.js +1 -1
  160. package/dist/src/lease.js +1 -1
  161. package/dist/src/limrun-runtime-dependencies.js +1 -1
  162. package/dist/src/limrun.d.ts +5 -564
  163. package/dist/src/limrun.js +1 -1
  164. package/dist/src/linux.js +1 -1
  165. package/dist/src/load.js +1 -1
  166. package/dist/src/local-interactor-operation-set.js +1 -1
  167. package/dist/src/log-stream.js +9 -9
  168. package/dist/src/mechanics.js +16 -16
  169. package/dist/src/metro.js +1 -1
  170. package/dist/src/metro2.js +1 -1
  171. package/dist/src/mobile-snapshot-semantics.js +1 -1
  172. package/dist/src/observability.js +1 -1
  173. package/dist/src/observation.js +1 -2
  174. package/dist/src/open-target-resolution.js +1 -1
  175. package/dist/src/output-path.js +1 -1
  176. package/dist/src/overlay.js +1 -3
  177. package/dist/src/perf-facade.js +1 -1
  178. package/dist/src/perf-runtime-operation-builder.js +1 -1
  179. package/dist/src/perf-runtime.js +1 -1
  180. package/dist/src/perf-target.js +1 -1
  181. package/dist/src/physical-device-control.js +1 -1
  182. package/dist/src/platform-request-scope.js +1 -1
  183. package/dist/src/platform-runtime-android-adb-host.js +1 -1
  184. package/dist/src/platform-runtime-app-log-android-transport.js +1 -1
  185. package/dist/src/platform-runtime-apple-resources.js +1 -0
  186. package/dist/src/platform-runtime-claim-recovery.js +1 -0
  187. package/dist/src/platform-runtime-daemon-services.js +1 -0
  188. package/dist/src/platform-runtime-host.js +1 -1
  189. package/dist/src/platform-runtime-network-web-transport.js +1 -1
  190. package/dist/src/platform-runtime-open-target.js +1 -1
  191. package/dist/src/platform-runtime-operation-host.js +4 -4
  192. package/dist/src/platform-runtime-runtime-hints.js +2 -2
  193. package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
  194. package/dist/src/platform-runtime-screen-recording-apple-runner-transport.js +1 -1
  195. package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
  196. package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
  197. package/dist/src/platform-runtime-screen-recording-harmony-host.js +1 -1
  198. package/dist/src/platform-runtime-screen-recording-web-host.js +1 -1
  199. package/dist/src/platform-runtime-unavailable.js +1 -1
  200. package/dist/src/platform-runtime.js +1 -1
  201. package/dist/src/platform-runtime2.js +1 -1
  202. package/dist/src/plugin.js +1 -0
  203. package/dist/src/plugins/webdriver.d.ts +111 -0
  204. package/dist/src/plugins/webdriver.js +1 -0
  205. package/dist/src/plugins.d.ts +2 -1
  206. package/dist/src/plugins2.js +1 -1
  207. package/dist/src/png-crop-bytes.js +1 -1
  208. package/dist/src/png-resize.js +1 -0
  209. package/dist/src/png-worker-client.js +1 -1
  210. package/dist/src/png-worker-contract.js +1 -1
  211. package/dist/src/process-entry.js +1 -1
  212. package/dist/src/process-exit.js +1 -1
  213. package/dist/src/process.js +1 -1
  214. package/dist/src/provider-credential-fingerprint.js +1 -1
  215. package/dist/src/provider-device-admission.js +1 -1
  216. package/dist/src/provider-device-runtime.d.ts +556 -0
  217. package/dist/src/provider-policy.js +1 -0
  218. package/dist/src/provider-profile-fields.js +1 -1
  219. package/dist/src/provider-webdriver.js +1 -2
  220. package/dist/src/proxy.js +2 -2
  221. package/dist/src/quality-warnings.js +1 -1
  222. package/dist/src/react-devtools.js +2 -0
  223. package/dist/src/react-native-overlay2.js +3 -0
  224. package/dist/src/react-native.js +1 -1
  225. package/dist/src/record-runtime.js +1 -1
  226. package/dist/src/record-trace.js +1 -1
  227. package/dist/src/recording.js +2 -2
  228. package/dist/src/register-builtins.js +1 -1
  229. package/dist/src/remote-bridge.js +1 -0
  230. package/dist/src/remote-config-core.js +1 -0
  231. package/dist/src/remote-config.js +1 -1
  232. package/dist/src/remote-config2.js +1 -1
  233. package/dist/src/replay-backend-registry.js +1 -0
  234. package/dist/src/replay-divergence.js +1 -1
  235. package/dist/src/replay-maestro-backend.js +117 -0
  236. package/dist/src/replay-script-selection.js +1 -0
  237. package/dist/src/replay.js +1 -3
  238. package/dist/src/replay2.js +1 -0
  239. package/dist/src/reporting.js +3 -3
  240. package/dist/src/request-cancel.js +1 -1
  241. package/dist/src/request-providers.js +1 -1
  242. package/dist/src/request-runtime-binding.js +1 -1
  243. package/dist/src/result-serialization.js +1 -1
  244. package/dist/src/retry.js +1 -1
  245. package/dist/src/retry2.js +1 -0
  246. package/dist/src/runner-artifact-manifest.js +1 -1
  247. package/dist/src/runner-cache-retention.js +1 -0
  248. package/dist/src/runner-cache-trim.js +1 -0
  249. package/dist/src/runner-client.js +1 -1
  250. package/dist/src/runner-dev-tools-security.js +1 -1
  251. package/dist/src/runner-device-readiness.js +1 -1
  252. package/dist/src/runner-device-set.js +1 -0
  253. package/dist/src/runner-error-classification.js +3 -3
  254. package/dist/src/runner-exchange.js +1 -1
  255. package/dist/src/runner-lease.js +1 -0
  256. package/dist/src/runner-operations-facade.js +1 -1
  257. package/dist/src/runner-retention.js +1 -0
  258. package/dist/src/runner-start-budget.js +1 -1
  259. package/dist/src/runner-startup-transport.js +1 -0
  260. package/dist/src/runner-toolchain-probe.js +2 -0
  261. package/dist/src/runner.js +2 -1
  262. package/dist/src/runtime-command-surface.js +1 -0
  263. package/dist/src/runtime-deployment.js +1 -0
  264. package/dist/src/runtime-factory.js +1 -0
  265. package/dist/src/runtime-session.js +1 -0
  266. package/dist/src/runtime-transport-hints.js +1 -1
  267. package/dist/src/runtime.js +2 -1
  268. package/dist/src/runtime10.js +2 -2
  269. package/dist/src/runtime2.js +4 -4
  270. package/dist/src/runtime3.js +1 -1
  271. package/dist/src/runtime4.js +5 -5
  272. package/dist/src/runtime5.js +1 -1
  273. package/dist/src/runtime6.js +1 -1
  274. package/dist/src/runtime7.js +1 -1
  275. package/dist/src/runtime8.js +1 -1
  276. package/dist/src/runtime9.js +1 -1
  277. package/dist/src/screen-recording-transport.js +1 -1
  278. package/dist/src/screenshot-density.js +1 -1
  279. package/dist/src/screenshot-image.js +1 -1
  280. package/dist/src/screenshot-runtime.js +1 -1
  281. package/dist/src/screenshot3.js +5 -5
  282. package/dist/src/sdk-batch-runner.js +2 -2
  283. package/dist/src/sdk-batch.js +2 -2
  284. package/dist/src/sdk-contracts.d.ts +20 -29
  285. package/dist/src/sdk-contracts.js +2 -2
  286. package/dist/src/sdk-device.js +1 -1
  287. package/dist/src/sdk-finders.d.ts +1 -1
  288. package/dist/src/sdk-finders.js +1 -1
  289. package/dist/src/sdk-io.d.ts +4 -2
  290. package/dist/src/sdk-remote-config.d.ts +4 -0
  291. package/dist/src/sdk-remote-config.js +1 -1
  292. package/dist/src/sdk-selectors.d.ts +5 -6
  293. package/dist/src/sdk-selectors.js +1 -1
  294. package/dist/src/selection.js +0 -0
  295. package/dist/src/selector-pipeline-policy.js +1 -1
  296. package/dist/src/selector-runtime.js +1 -1
  297. package/dist/src/selectors.js +1 -1
  298. package/dist/src/server.js +2 -2
  299. package/dist/src/session-allocation.js +1 -1
  300. package/dist/src/session-replay-runtime-failure-response.js +1 -0
  301. package/dist/src/session-runtime-admission.js +1 -1
  302. package/dist/src/session.js +1 -1
  303. package/dist/src/session2.js +5 -5
  304. package/dist/src/settings.js +1 -1
  305. package/dist/src/settings2.js +1 -1
  306. package/dist/src/simctl-settings.js +1 -1
  307. package/dist/src/simctl.js +1 -1
  308. package/dist/src/simulator-boot.js +1 -1
  309. package/dist/src/simulator-state.js +1 -1
  310. package/dist/src/simulator.js +1 -1
  311. package/dist/src/snapshot-capture-annotations.js +1 -1
  312. package/dist/src/snapshot-chrome.js +1 -0
  313. package/dist/src/snapshot-desktop-projection.js +1 -1
  314. package/dist/src/snapshot-evidence.js +1 -0
  315. package/dist/src/snapshot-node-lookup.js +1 -0
  316. package/dist/src/snapshot-occlusion.js +1 -0
  317. package/dist/src/snapshot-quality-verdict.js +1 -0
  318. package/dist/src/snapshot-runtime-binding.js +1 -1
  319. package/dist/src/snapshot-runtime.js +1 -1
  320. package/dist/src/snapshot-state.js +1 -1
  321. package/dist/src/snapshot.js +1 -1
  322. package/dist/src/snapshot2.js +1 -1
  323. package/dist/src/snapshot3.js +1 -1
  324. package/dist/src/src.js +5 -1
  325. package/dist/src/src2.js +1 -1
  326. package/dist/src/src3.js +2 -1
  327. package/dist/src/store.js +1 -1
  328. package/dist/src/surface-snapshot2.js +1 -1
  329. package/dist/src/target-evidence-tree.js +1 -0
  330. package/dist/src/target-evidence.js +1 -1
  331. package/dist/src/text-entry-focus.js +1 -1
  332. package/dist/src/tool-provider2.js +1 -1
  333. package/dist/src/touch-runtime.js +1 -1
  334. package/dist/src/touch-runtime2.js +1 -1
  335. package/dist/src/tree.js +1 -1
  336. package/dist/src/tv-remote.js +1 -1
  337. package/dist/src/type-text-runtime.js +1 -1
  338. package/dist/src/undici.js +8 -8
  339. package/dist/src/update-check.js +1 -1
  340. package/dist/src/vars.js +1 -1
  341. package/dist/src/version.js +1 -1
  342. package/dist/src/video.js +2 -2
  343. package/dist/src/wait.js +1 -0
  344. package/dist/src/web.js +1 -1
  345. package/dist/src/web2.js +1 -1
  346. package/package.json +22 -19
  347. package/server.json +2 -2
  348. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.23.apk.sha256 +0 -1
  349. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.23.apk +0 -0
  350. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.23.apk.sha256 +0 -1
  351. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.23.manifest.json +0 -16
  352. package/dist/src/adb-transport.js +0 -1
  353. package/dist/src/alert-runtime.js +0 -1
  354. package/dist/src/app-deployment-resolution.js +0 -2
  355. package/dist/src/app-inventory-contract.js +0 -1
  356. package/dist/src/app-log-session-resource.js +0 -1
  357. package/dist/src/application-lifecycle-runtime.js +0 -1
  358. package/dist/src/auth-session.js +0 -1
  359. package/dist/src/cache.js +0 -1
  360. package/dist/src/capabilities.js +0 -1
  361. package/dist/src/capture.js +0 -1
  362. package/dist/src/catalog.js +0 -1
  363. package/dist/src/click-button.js +0 -1
  364. package/dist/src/client-metro-companion.js +0 -1
  365. package/dist/src/client-options.js +0 -3
  366. package/dist/src/compatibility-policy.js +0 -1
  367. package/dist/src/daemon-artifacts.js +0 -1
  368. package/dist/src/daemon-client-transport.js +0 -1
  369. package/dist/src/daemon-http.js +0 -1
  370. package/dist/src/device-claim-rule.js +0 -1
  371. package/dist/src/device-rotation.js +0 -1
  372. package/dist/src/device-session.js +0 -3
  373. package/dist/src/device2.js +0 -1
  374. package/dist/src/device3.js +0 -3
  375. package/dist/src/dispatch-resolve.js +0 -4
  376. package/dist/src/format.js +0 -1
  377. package/dist/src/gesture-plan-types.js +0 -1
  378. package/dist/src/host.js +0 -1
  379. package/dist/src/human-control-contract.js +0 -1
  380. package/dist/src/interaction-ref-policy.js +0 -1
  381. package/dist/src/interactor-operation-binding.js +0 -1
  382. package/dist/src/keyboard-actions.js +0 -1
  383. package/dist/src/lease-context.js +0 -1
  384. package/dist/src/lease-registry-scope.js +0 -1
  385. package/dist/src/lease-scope.js +0 -1
  386. package/dist/src/managed-device-scope.js +0 -1
  387. package/dist/src/observe-until.js +0 -1
  388. package/dist/src/output-common.js +0 -5
  389. package/dist/src/owner-identity.js +0 -3
  390. package/dist/src/path-resolution.js +0 -1
  391. package/dist/src/perf-runtime-plan.js +0 -1
  392. package/dist/src/platform-runtime-app-log-process.js +0 -1
  393. package/dist/src/platform-runtime-managed-owner.js +0 -1
  394. package/dist/src/platform-runtime-screen-recording-process-host.js +0 -1
  395. package/dist/src/png.js +0 -1
  396. package/dist/src/prepare-kind.js +0 -1
  397. package/dist/src/provider-device-runtimes.js +0 -1
  398. package/dist/src/provider-session-ownership.js +0 -2
  399. package/dist/src/providers.js +0 -1
  400. package/dist/src/registry.js +0 -68
  401. package/dist/src/request-admission.js +0 -1
  402. package/dist/src/request-cancellation.js +0 -1
  403. package/dist/src/request-progress-protocol.js +0 -1
  404. package/dist/src/runner-cache-metadata.js +0 -3
  405. package/dist/src/runner-disposal.js +0 -1
  406. package/dist/src/runner-session-types.js +0 -1
  407. package/dist/src/runtime-admission.js +0 -1
  408. package/dist/src/screen-recording-admission-ledger.js +0 -1
  409. package/dist/src/screen-recording-resource-recovery.js +0 -1
  410. package/dist/src/screenshot-result.js +0 -1
  411. package/dist/src/script.js +0 -1
  412. package/dist/src/scroll-command.js +0 -1
  413. package/dist/src/scroll-gesture.js +0 -1
  414. package/dist/src/scroll-indicator.js +0 -1
  415. package/dist/src/session-artifact-paths.js +0 -1
  416. package/dist/src/session-paths.js +0 -1
  417. package/dist/src/session-repair-tombstone.js +0 -1
  418. package/dist/src/session-routing.js +0 -1
  419. package/dist/src/session-snapshot.js +0 -1
  420. package/dist/src/snapshot4.js +0 -1
  421. package/dist/src/src4.js +0 -1
  422. package/dist/src/src5.js +0 -1
  423. package/dist/src/src6.js +0 -1
  424. package/dist/src/src7.js +0 -2
  425. package/dist/src/src8.js +0 -115
  426. package/dist/src/string-enum.js +0 -1
  427. package/dist/src/success-text.js +0 -1
  428. package/dist/src/timeouts.js +0 -1
  429. package/dist/src/touch-reference-frame.js +0 -1
  430. package/dist/src/transport.js +0 -3
  431. package/dist/src/ttl-memo.js +0 -1
  432. package/dist/src/verified-file.js +0 -1
  433. package/dist/src/viewport.js +0 -1
  434. package/dist/src/window-state.js +0 -1
  435. /package/dist/src/{doctor-output.js → doctor-lines.js} +0 -0
@@ -1,2 +1,2 @@
1
- import{P as e,S as t,b as n}from"./sdk-contracts.js";import{g as r,r 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]),v=[..._],Ne=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 Pe(e){return Ne.has(e.trim().toLowerCase())}const Fe=new Map([[`"`,`"`],[`'`,`'`],[`\\`,`\\`],[`/`,`/`],[`b`,`\b`],[`f`,`\f`],[`n`,`
2
- `],[`r`,`\r`],[`t`,` `]]);function y(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Selector expression cannot be empty`);let r=ze(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Selector expression cannot be empty`);return{raw:n,selectors:r.map(e=>Le(e))}}function b(e){try{return y(e)}catch{return null}}function x(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 Ie(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=He(i).trim();return a?{key:r,value:a}:null}function S(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||!x(t))break;r+=1;let n=e.slice(0,r).join(` `).trim();n&&b(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 Le(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Selector segment cannot be empty`);let r=Be(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Invalid selector segment: ${t}`);return{raw:n,terms:r.map(Re)}}function Re(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:He(a)}}function ze(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=Ve(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 Be(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=Ve(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 Ve(e,t){return e?e===t?null:e:t}function He(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 Fe.get(e)??null}function Ge(e){let t=He(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 qe(e){return o.includes(e)}const Je=`is requires predicate: ${o.join(`|`)}`;function Ye(e){let t=e.toLowerCase();return qe(t)?{ok:!0,predicate:t}:a(Je,Xe)}const Xe=`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 Ze(e){if(qe((e[0]??``).toLowerCase()))return e;for(let t=1;t<e.length;t+=1){let n=(e[t]??``).toLowerCase();if(qe(n)&&b(e.slice(0,t).join(` `)))return[n,...e.slice(0,t),...e.slice(t+1)]}return e}function Qe(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):et(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 $e(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 $e(e){throw Error(`Unhandled is predicate: ${String(e)}`)}function et(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=tt(e,t,n);return r?l(r.rect)?t.isVisibleInEffectiveViewport(r):n!==`android`&&r.hittable===!0:!1}function tt(e,t,n){return t.findAncestor(e,e=>Oe(e,n)?e:null)}function nt(e){let t=Ze(e),n=t[0]??``;return{predicate:n,split:S(t.slice(1),{preferTrailingValue:n===`text`})}}const rt=`is requires a selector expression`,it=`is text requires expected text value`;function at(e){let{predicate:t,split:n}=nt([...e]),r=Ye(t);if(!r.ok)return r;if(!n)return a(rt);let i=n.rest.join(` `).trim();return r.predicate===`text`&&!i?a(it):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 ot(e){return e===`text`||e===`attrs`?{ok:!0,format:e}:a(`get only supports text or attrs`)}function st(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 ct(e){return e?{ok:!0,text:e}:a(`wait requires text`)}function lt(e){return Array.from(new Set(e))}function ut(e){return JSON.stringify(dt(e))}function dt(e){if(Array.isArray(e))return e.map(dt);if(!e||typeof e!=`object`)return e;let t=e;return Object.fromEntries(Object.keys(t).sort().map(e=>[e,dt(t[e])]))}function ft(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 pt=/^#\s*agent-device:target-v(\d+)(?:\s+(\S.*))?$/,mt=/^#\s*agent-device:targets-v(\d+)(?:\s+(\S.*))?$/,ht=4096;function gt(e){return e.normalize(`NFC`)}function _t(e){if(e===void 0)return;let t=gt(e);return t.length>0?t:void 0}function vt(e){return gt(e)}function yt(e){if(e===void 0)return;let t=gt(e).trim().replaceAll(/\s+/g,` `);return t.length>0?t:void 0}function C(e){return Buffer.byteLength(e,`utf8`)}function w(e,t){if(C(e)<=t)return e;let n=e.length;for(;n>0&&C(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 bt(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(xt),t.sibling=e.sibling,t.viewportOrder=e.viewportOrder,e.scrollRegion&&(t.scrollRegion=St(e.scrollRegion)),e.rect&&(t.rect=Ct(e.rect)),t.verification=e.verification,t}function xt(e){let t={role:e.role};return e.label!==void 0&&(t.label=e.label),t}function St(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 Ct(e){return{x:e.x,y:e.y,width:e.width,height:e.height}}function wt(e){return JSON.stringify(bt(e))}function Tt(e){return`# agent-device:target-v1 ${wt(e)}`}function Et(e){return JSON.stringify({source:bt(e.source),destination:bt(e.destination)})}function Dt(e){return`# agent-device:targets-v1 ${Et(e)}`}function Ot(e){let t=e.trim(),n=mt.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:kt((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function kt(t){if(C(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:jt(JSON.stringify(r.source)),destination:jt(JSON.stringify(r.destination))}}function At(e){let t=e.trim();if(!t.startsWith(`#`))return{kind:`none`};let n=pt.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:jt((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function jt(t){if(C(t)>4096)throw new e(`INVALID_ARGS`,`target-v1 annotation exceeds the ${ht}-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=Mt(r.role,`role`),a=Nt(r.id,`id`),o=Pt(r.label,`label`),s=It(r.ancestry),c=Rt(r.sibling,`sibling`,0),l=Rt(r.viewportOrder,`viewportOrder`,0),u=zt(r.scrollRegion),d=Bt(r.rect),ee=Vt(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 Mt(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 Ft(vt(t),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=_t(t);return r===void 0?void 0:Ft(r,n)}function Pt(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=yt(t);return r===void 0?void 0:Ft(r,n)}function Ft(t,n){if(C(t)>256)throw new e(`INVALID_ARGS`,`target-v1 "${n}" exceeds the 256-byte field cap.`);return t}function It(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)=>Lt(e,t))}function Lt(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=Mt(r.role,`ancestry[${n}].role`),a=Pt(r.label,`ancestry[${n}].label`);return{role:i,...a===void 0?{}:{label:a}}}function Rt(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 zt(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=Mt(n.role,`scrollRegion.role`),i=Nt(n.id,`id`),a=Pt(n.label,`scrollRegion.label`);return{role:r,...i===void 0?{}:{id:i},...a===void 0?{}:{label:a}}}function Bt(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:T(n.x,`rect.x`),y:T(n.y,`rect.y`),width:T(n.width,`rect.width`),height:T(n.height,`rect.height`)}}function T(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 Vt(t){if(t===`verified`||t===`unverifiable`)return t;throw new e(`INVALID_ARGS`,`target-v1 "verification" must be "verified" or "unverifiable".`)}function Ht(e){let t=vt(p(e.type??``)),n=_t(e.identifier),r=yt(e.label);return{...n===void 0?{}:{id:w(n,256)},role:w(t,256),...r===void 0?{}:{label:w(r,256)}}}function Ut(e,t){return e.id===t.id&&e.role===t.role&&e.label===t.label}function Wt(e,t){let n=0;for(let r of e)Ht(r).id===t&&(n+=1);return n}function Gt(e,t){if(e.id===void 0||Wt(t,e.id)<=1)return e;let{role:n,label:r}=e;return{role:n,...r===void 0?{}:{label:r}}}function Kt(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 qt(e,t){return{documentOrder:e.index,sibling:Kt(t,e)}}function Jt(e,t){return e.documentOrder===t.documentOrder&&e.sibling===t.sibling}function Yt(e){return{...e.id===void 0?{}:{id:e.id},role:e.role,...e.label===void 0?{}:{label:e.label}}}function Xt(e,t){return t.id===void 0?e.role===t.role&&e.label===t.label:e.id===t.id}function Zt(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 Qt(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 $t(e){return e?`${e.role}${e.label?`/${e.label}`:``}`:`(missing)`}function en(e,t){return!t||t.role!==e.role||e.label!==void 0&&t.label!==e.label}function tn(e,t){for(let[n,r]of e.entries()){let e=t[n];if(en(r,e))return[`ancestry[${n}]: recorded=${$t(r)} observed=${$t(e)}`]}return[]}function nn(e,t,n={}){let r=[],i=p(e.type??``),a=rn(e,n.nodes),o=D(e.label),s=D(e.value),c=D(m(e)),l=n.action===`fill`;a&&r.push(`id=${E(a)}`),i&&o&&r.push(l?`role=${E(i)} label=${E(o)} editable=true`:`role=${E(i)} label=${E(o)}`),o&&r.push(l?`label=${E(o)} editable=true`:`label=${E(o)}`),s&&r.push(l?`value=${E(s)} editable=true`:`value=${E(s)}`),c&&c!==o&&c!==s&&r.push(l?`text=${E(c)} editable=true`:`text=${E(c)}`),i&&l&&!r.some(e=>e.includes(`editable=true`))&&r.push(`role=${E(i)} editable=true`);let u=lt(r);return u.length===0&&i&&u.push(l?`role=${E(i)} editable=true`:`role=${E(i)}`),u.length===0&&g(e)&&u.push(`visible=true`),u}function rn(e,t){let n=D(e.identifier);if(!n||!t)return n;let r=Ht(e).id;return r===void 0?n:Wt(t,r)>1?null:n}function E(e){return JSON.stringify(e)}function D(e){return e&&e.trim()||null}const an=[`any`,`text`,`label`,`value`,`role`,`id`],on=[`text`,`label`,`value`,`role`,`id`];function sn(e){let t=e?.toLowerCase();return t===`press`||t===`tap`?`click`:t}function O(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;on.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=sn(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:b(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`?nt([...t]).split:S([...t]);return n?b(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=b(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 nn(e,t,n)}function Wn(e,t,n){let r=b(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=b(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=b(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=b(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=b(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 b(e)?.selectors.some(e=>e.terms.some(e=>e.key===t))??!1}function tr(e){return y(e).selectors.map(e=>e.raw)}function nr(e){return b(e)!==null}function rr(e){y(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=S(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=S(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=Ie(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=>x(e))?{kind:`invalid`,reason:`selector-shaped-text`,message:mr(e)}:null}function fr(e,t){let n=t.join(` `),r=Pe(e.key)?`role=${e.key} label="${e.value}"`:`label="${e.value}"`;return`Unknown selector key "${e.key}" in "${n}". Supported: ${v.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=>!x(e)),r=e.filter(e=>x(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 (${v.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(!r(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 e.available?t():{}}function Ir(e){if(!F(e.requesterId)||!F(e.identityIncarnationId)||!Rr(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 Lr(e){let t=zr(e.token);if(!t||t.length!==2)return null;let[n,r]=t;if(!F(n)||!F(r)||!Rr(e.generation))return null;let i=Object.freeze({requesterId:n,requestGeneration:e.generation,identityIncarnationId:r});return Ir(i).token===e.token?i:null}function Rr(e){return Number.isInteger(e)&&e>=0}function F(e){return typeof e==`string`&&e.trim().length>0}function zr(e){try{let t=JSON.parse(e);return Array.isArray(t)?t:null}catch{return null}}function Br(e,t){let n={},r={};for(let i of t.required){let t=Vr(e.facts.operations,i);if(n[i]=t,!t.available)throw Kr(i,t);r[i]=Wr(e.operations,i)}for(let i of t.preferred){let t=Vr(e.facts.operations,i);n[i]=t,t.available&&(r[i]=Wr(e.operations,i))}for(let i of t.conditional??[]){let t=Vr(e.facts.operations,i);n[i]=t,t.available&&(r[i]=Wr(e.operations,i))}return Object.freeze({device:e.device,owner:e.owner,facts:Object.freeze(n),operations:Object.freeze(r)})}function Vr(e,t){let n=e[t];if(!Hr(n))throw P(`Runtime owner omitted the ${t} fact`);let r=Ur(n);if(r)return r;throw P(`Runtime owner returned an invalid ${t} fact`)}function Hr(e){return typeof e==`object`&&!!e&&`available`in e}function Ur(e){if(e.available===!0)return Object.freeze({available:!0});if(e.available===!1&&Gr(e.reason)&&(e.hint===void 0||typeof e.hint==`string`))return Object.freeze({available:!1,reason:e.reason,...e.hint===void 0?{}:{hint:e.hint}})}function Wr(e,t){let n=e[t];if(typeof n!=`function`)throw P(`Runtime owner advertised ${t} without an implementation`);return n}function Gr(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 Kr(t,n){return new e(`UNSUPPORTED_OPERATION`,`Runtime operation ${t} is unavailable`,{reason:n.reason,hint:n.hint})}function qr(e){return JSON.stringify({required:[...e.required].sort(),preferred:[...e.preferred].sort(),conditional:[...e.conditional??[]].sort()})}function Jr(){return e=>{let t=Yr(e.required,`required`),n=Yr(e.preferred??[],`preferred`),r=Yr(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 Yr(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=Jr(),Xr=I({required:[`bootTarget`]}),Zr=I({required:[`bootTargetHeadless`]}),Qr=I({required:[`ensureReady`,`listApps`]}),$r=I({required:[`captureSnapshot`]}),ei=I({required:[`setViewport`]}),ti=I({required:[`focusPoint`]}),ni=I({required:[`typeText`]}),ri=I({required:[`back`]}),ii=I({required:[`home`]}),ai=I({required:[`setOrientation`]}),oi=I({required:[`setFoldPose`]}),si=I({required:[`tvRemote`]}),ci=I({required:[`keyboardStatus`]}),li=I({required:[`keyboardDismiss`]}),ui=I({required:[`keyboardEnter`]}),di=I({required:[`appSwitcher`]}),fi=I({required:[`actionButton`]}),pi=I({required:[`triggerAppEvent`]}),mi=I({required:[`setSetting`]}),hi=I({required:[`readSetting`]}),gi=I({required:[`readAlert`]}),_i=I({required:[`awaitAlert`]}),vi=I({required:[`acceptAlert`]}),yi=I({required:[`dismissAlert`]}),bi=I({required:[`readClipboard`]}),xi=I({required:[`writeClipboard`]}),Si=I({required:[`perfFrames`]}),Ci=I({required:[`perfMemorySample`]}),wi=I({required:[`perfMemorySnapshot`]}),Ti=I({required:[`perfNativeCaptureStart`]}),Ei=I({required:[`perfNativeCaptureReattach`,`perfNativeCaptureCleanup`]}),Di=I({required:[`perfProfileReport`]}),Oi=Object.freeze([Si,Ci,wi,Ti,Ei,Di]),L=I({required:[`tapPoint`]}),ki=I({required:[`captureSnapshot`,`tapPoint`],preferred:[`tapRef`],conditional:[`tapElementSelector`]}),Ai=I({required:[`longPressPoint`]}),ji=I({required:[`captureSnapshot`,`longPressPoint`]}),Mi=I({required:[`hoverPoint`]}),R=I({required:[`captureSnapshot`,`hoverPoint`],preferred:[`hoverRef`]}),Ni=I({required:[`fillPoint`]}),Pi=I({required:[`captureSnapshot`,`fillPoint`],preferred:[`fillRef`]}),Fi=Object.freeze([L,ki]),Ii=Fi,Li=Object.freeze([Ai,ji]),Ri=Object.freeze([Mi,R]),zi=Object.freeze([Ni,Pi]);function Bi(e,t){switch(e){case`click`:case`press`:return t?{kind:`captured-tap`,use:ki}:{kind:`tap-point`,use:L};case`fill`:return t?{kind:`captured-fill`,use:Pi}:{kind:`fill-point`,use:Ni};case`longpress`:return t?{kind:`captured-long-press`,use:ji}:{kind:`long-press-point`,use:Ai};case`hover`:return t?{kind:`captured-hover`,use:R}:{kind:`hover-point`,use:Mi}}}const Vi=I({required:[`performGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Hi=I({required:[`performDirectionalFlingPlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Ui=I({required:[`performMultiTouchGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Wi=I({required:[`performTargetAuthoredDrag`,`captureSnapshot`],preferred:[`gestureViewport`]}),Gi=I({required:[`gestureViewport`]}),Ki=I({required:[`scrollDirection`],conditional:[`captureSnapshot`]}),qi=I({required:[`scrollDirection`,`captureSnapshot`]}),Ji=Object.freeze({plan:Vi,"directional-fling":Hi,"multi-touch":Ui,"target-authored-drag":Wi}),Yi=Object.freeze([Vi,Hi,Ui,Wi]),Xi=Object.freeze([Vi]),Zi=Object.freeze([Ki,qi]);function Qi(e){return e.intent===`pan`?(`pointerCount`in e?e.pointerCount:1)===2:e.intent===`pinch`||e.intent===`rotate`||e.intent===`transform`}function $i(e){return e.intent===`drag`?`target-authored-drag`:Qi(e)?`multi-touch`:e.intent===`fling`&&`direction`in e?`directional-fling`:`plan`}function ea(e){let t=$i(e);switch(t){case`plan`:return z(t);case`directional-fling`:return z(t);case`multi-touch`:return z(t);case`target-authored-drag`:return z(t)}}function z(e){let t=Ji[e];return Object.freeze({tier:e,operation:t.required[0],use:t})}function ta(e){return e.until===void 0?e.edge===void 0?Object.freeze({kind:`direction`,use:Ki}):Object.freeze({kind:`edge`,edge:e.edge,use:qi}):Object.freeze({kind:`until`,until:e.until,use:qi})}const na=I({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`]}),ra=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),ia=I({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`,`captureSnapshotWithoutActiveApp`]}),aa=I({required:[`captureSnapshot`]}),oa=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),sa=I({required:[`captureSnapshot`],preferred:[`readTextAtPoint`]}),ca=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],preferred:[`readTextAtPoint`]}),la=I({required:[`captureSnapshot`],conditional:[`findText`]}),ua=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],conditional:[`findText`]}),da=Object.freeze([aa,oa]),fa=Object.freeze([sa,ca]),pa=I({required:[`captureSnapshot`,`focusPoint`]}),ma=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`]}),ha=I({required:[`captureSnapshot`,`focusPoint`,`typeText`]}),ga=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`,`typeText`]}),_a=Object.freeze([sa,ca,aa,oa,pa,ma,ha,ga]),va=Object.freeze([la,ua]),ya=Object.freeze([$r,na,ra,ia]),B=Object.freeze({"capture-only":da,"element-text":fa,"wait-observation":va,"find-focus":Object.freeze([pa,ma]),"find-type":Object.freeze([ha,ga])});function ba(e){return e===`focus`?`find-focus`:e===`type`?`find-type`:`capture-only`}function xa(e){switch(e.intent){case`capture-only`:return V(e.hasActiveApp,e.intent,B[e.intent]);case`element-text`:return V(e.hasActiveApp,e.intent,B[e.intent]);case`wait-observation`:return V(e.hasActiveApp,e.intent,B[e.intent]);case`find-focus`:return V(e.hasActiveApp,e.intent,B[e.intent]);case`find-type`:return V(e.hasActiveApp,e.intent,B[e.intent])}}function V(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 Sa(e){return e.customActions?e.hasActiveApp?Object.freeze({kind:`custom-actions-active-app`,operation:`captureSnapshotWithCustomActions`,use:na}):Object.freeze({kind:`custom-actions-without-active-app`,operation:`captureSnapshotWithCustomActions`,use:ia}):e.hasActiveApp?Object.freeze({kind:`active-app`,operation:`captureSnapshot`,use:$r}):Object.freeze({kind:`without-active-app`,operation:`captureSnapshotWithoutActiveApp`,use:ra})}const Ca=I({required:[`captureScreenshot`]}),wa=I({required:[`captureScreenshot`,`captureSnapshot`]}),Ta=Object.freeze([Ca,wa]);function Ea(e){return e.cropOn?Object.freeze({kind:`capture-with-crop-on`,use:wa}):e.overlayRefs?Object.freeze({kind:`capture-with-overlay-refs`,use:wa}):Object.freeze({kind:`capture`,use:Ca})}const Da=Object.freeze([Xr,Zr]),Oa=Object.freeze({kind:`boot-target`,operation:`bootTarget`,use:Xr}),ka=Object.freeze({kind:`boot-target-headless`,operation:`bootTargetHeadless`,use:Zr});function Aa(e){return e.headless?ka:Oa}const ja=I({required:[`ensureReady`,`appState`]}),Ma=Object.freeze([ja]),Na=I({required:[`shutdownTarget`]}),Pa=Object.freeze([bi,xi]),Fa=Object.freeze([mi,hi]),Ia=[`text-size`],La=Object.freeze({kind:`write`,use:mi});function Ra(e){let t=za(e?.[0]);return e?.length!==1||t===void 0?La:Ia.includes(t)?Object.freeze({kind:`read`,setting:t,use:hi}):La}function za(e){let t=e?.trim().toLowerCase();return Ia.find(e=>e===t)}const Ba=Object.freeze([gi,_i,vi,yi]),Va=Object.freeze([ci,li,ui]),Ha=I({required:[`deployApp`]}),Ua=I({required:[`ensureReady`,`materializeAppSource`,`deployMaterializedApp`]}),Wa=I({required:[`ensureReady`,`sendPushNotification`]}),Ga=I({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`]}),Ka=I({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`]}),qa=I({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`clearRuntimeHints`]}),Ja=I({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`,`clearRuntimeHints`]});function Ya(e){return e.applyRuntimeHints&&e.clearRemovedRuntimeHints?Object.freeze({kind:`open-apply-and-clear-runtime-hints`,use:Ja}):e.applyRuntimeHints?Object.freeze({kind:`open-apply-runtime-hints`,use:Ka}):e.clearRemovedRuntimeHints?Object.freeze({kind:`open-clear-runtime-hints`,use:qa}):Object.freeze({kind:`open`,use:Ga})}const Xa=Object.freeze([Ga,Ka,qa,Ja]),Za=I({required:[`closeApplication`,`finalizeApplicationClose`]}),Qa=I({required:[`closeApplication`,`finalizeApplicationClose`,`clearRuntimeHints`]}),$a=Object.freeze([Za,Qa]),eo=I({required:[`finalizeApplicationClose`]}),to=I({required:[`finalizeApplicationClose`,`clearRuntimeHints`]}),no=I({required:[`prepareAppleRunner`]}),ro=I({required:[`clearRuntimeHints`]}),io=I({required:[`configureProviderPortReverse`]}),ao=Object.freeze([ro,io]),H=I({required:[`appLogInspect`]}),oo=I({required:[`appLogInspect`,`appLogDoctor`]}),so=I({required:[`appLogInspect`,`appLogStart`]}),co=I({required:[],preferred:[`appLogInspect`]}),lo=Object.freeze([H,oo,so]);function uo(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:H});case`start`:return Object.freeze({kind:`start`,requiresAppSession:!0,use:so});case`stop`:return Object.freeze({kind:`stop`,requiresAppSession:!1,use:H});case`doctor`:return Object.freeze({kind:`doctor`,requiresAppSession:!1,use:oo});case`mark`:return Object.freeze({kind:`mark`,marker:t.marker??``,requiresAppSession:!1,use:H});case`clear`:return t.restart?Object.freeze({kind:`clear-restart`,requiresAppSession:!0,use:so}):Object.freeze({kind:`clear`,requiresAppSession:!1,use:H});default:throw new e(`INVALID_ARGS`,`logs requires path, start, stop, doctor, mark, or clear`)}}const fo=I({required:[`audioProbeStart`]}),po=I({required:[`audioProbeReattach`,`audioProbeCleanup`]}),mo=I({required:[`audioProbeQuery`]}),ho=Object.freeze([fo,po,mo]);function go(e){if(e.mode===`query`)return Object.freeze({kind:`query`,action:e.probeAction,use:mo});switch(e.probeAction){case`start`:return Object.freeze({kind:`capture-start`,use:fo});case`status`:return Object.freeze({kind:`capture-status`});case`stop`:return Object.freeze({kind:`capture-stop`})}}const _o=[`probe`],vo=[`start`,`status`,`stop`];function yo(t){let n=(t?.[0]??`probe`).toLowerCase();if(!_o.includes(n))throw new e(`INVALID_ARGS`,`audio requires probe`);let r=(t?.[1]??`status`).toLowerCase();if(!vo.includes(r))throw new e(`INVALID_ARGS`,`audio probe requires ${vo.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:bo(t?.[2],{defaultValue:1e4,min:100,max:12e4,message:`audio probe duration must be an integer in range 100..120000 ms`}),bucketMs:bo(t?.[3],{defaultValue:1e3,min:100,max:1e4,message:`audio probe bucket must be an integer in range 100..10000 ms`})})}function bo(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 xo=I({required:[`networkDump`]}),So=I({required:[],preferred:[`networkDump`]}),Co=[`dump`,`log`],wo=[`summary`,`headers`,`body`,`all`];function To(t){let n=(t.action??`dump`).toLowerCase(),r=(t.include??`summary`).toLowerCase();if(!Eo(n))throw new e(`INVALID_ARGS`,`network requires dump or log`);if(!Do(r))throw new e(`INVALID_ARGS`,`network --include must be summary, headers, body, or all`);return Object.freeze({action:n,include:r,use:xo})}function Eo(e){return Co.some(t=>t===e)}function Do(e){return wo.some(t=>t===e)}function Oo(e){let t=new Map;for(let n of e){if(!r(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,ko(n))}let n=i.filter(e=>!t.has(e));if(n.length>0)throw TypeError(`Missing platform family registrations: ${n.join(`, `)}`);let a=Object.freeze([...i]),o=Object.freeze(a.map(e=>Ao(t,e)));return Object.freeze({families:a,modules:o,get:e=>Ao(t,e)})}function ko(e){return Object.freeze({...e})}function Ao(e,t){let n=e.get(t);if(!n)throw TypeError(`Missing platform family registration: ${t}`);return n}const jo=Object.freeze({kind:`device-inventory`});function Mo(e){if(typeof e!=`object`||!e)throw zo();let t=e,n=Object.keys(t).sort();if(!(t.kind===`none`&&U(n,[`kind`]))&&!(t.kind===`host`&&U(n,[`kind`]))&&!(t.kind===`inventory`&&U(n,[`kind`,`use`])&&Po(t.use))&&!(t.kind===`device-runtime`&&U(n,[`kind`,`use`])&&Fo(t.use))&&!(t.kind===`device-runtime`&&(U(n,[`kind`,`uses`])||U(n,[`kind`,`selectUses`,`uses`])&&typeof t.selectUses==`function`)&&No(t.uses)))throw zo()}function No(e){if(!Array.isArray(e)||e.length===0||!e.every(Fo))return!1;let t=e.map(qr);return new Set(t).size===t.length}function Po(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.kind===`device-inventory`&&U(Object.keys(t).sort(),[`kind`])}function Fo(e){if(typeof e!=`object`||!e)return!1;let t=e,n=[Lo(t.required),Lo(t.preferred),Lo(t.conditional??[])];if(!Io(n))return!1;let r=n.flat();return new Set(r).size===r.length&&U(Object.keys(t).sort(),t.conditional===void 0?[`preferred`,`required`]:[`conditional`,`preferred`,`required`])}function Io(e){return e.every(e=>e!==null&&Ro(e))}function Lo(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?e:null}function Ro(e){return new Set(e).size===e.length}function U(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function zo(){return TypeError(`Command platform execution must declare exactly one of none, host, inventory, or device-runtime`)}const Bo=I({required:[`screenRecordingStart`]}),Vo=I({required:[`screenRecordingReattach`,`screenRecordingCleanup`]}),Ho=I({required:[]}),Uo=I({required:[],preferred:[`screenRecordingStart`]}),Wo=Object.freeze([Bo,Vo]);function Go(t){switch((t.action??``).toLowerCase()){case`start`:if(!Ko(t.scope??`app`))throw new e(`INVALID_ARGS`,`record scope must be app, device, or system`);return Object.freeze({kind:`start`,use:Bo});case`stop`:return t.hasLiveHandle===!0?Object.freeze({kind:`stop-live`,use:Ho}):Object.freeze({kind:`stop-recovery`,use:Vo});default:throw new e(`INVALID_ARGS`,`record requires start or stop`)}}function Ko(e){return e===`app`||e===`device`||e===`system`}function qo(e){if(Mo(e),e.kind!==`device-runtime`||!(`uses`in e))throw Jo();let t=e.uses.map(qr),n=Wo.map(qr),r=new Set(t),i=new Set(n);if(t.length!==n.length||r.size!==t.length||[...r].some(e=>!i.has(e)))throw Jo()}function Jo(){return TypeError(`Record runtime execution must declare exactly the uses selected by its two runtime-bearing plans`)}function Yo(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 Mo(t),t}const W={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0},G={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0,selectorValidationExempt:!0},Xo=()=>!0,Zo=e=>(e.positionals?.[0]??``).toLowerCase()===`start`,Qo=e=>e.command===`test`&&(typeof e.flags?.shardAll==`number`||typeof e.flags?.shardSplit==`number`),$o=e=>(e.positionals?.length??0)===0?{kind:`unconditional`}:void 0,es=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},ts=new Set([`status`,`get`]),ns=e=>fs(e,ts,`status`),rs=new Set([`get`,`wait`]),is=e=>fs(e,rs,`get`),as=e=>ps(e,ts,`status`),os=e=>ps(e,rs,`get`),ss=e=>{try{return O(_n(e.positionals??[]).action)?`observes-app`:`mutates-app`}catch{return`mutates-app`}},cs=e=>ps(e,new Set([`read`]),``),ls=e=>Ra(e.positionals).kind===`read`,us=e=>ls(e)?`observes-app`:`mutates-app`,ds=e=>ls(e)?`preserve`:`may-invalidate`;function fs(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`preserve`:`may-invalidate`}function ps(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`observes-app`:`mutates-app`}const K={kind:`none`},ms={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`},hs={...N,envelopeMs:18e4},gs={...N,onTimeout:`preserve-daemon`},_s={...gs,envelopeMs:33e4},vs={...N,budget:{source:`flag`,envelope:`widen`,defaultBudgetMs:1e4},onTimeout:`preserve-daemon`},ys={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}}},bs={fields:{delayMs:{defaultValue:0}}};function X(e,t){return kr(e)===void 0?t:vs}function Z(e){let t=kr(e);if(t===void 0)throw Error(`Missing post-action observation descriptor support for ${e}`);return t}const xs={deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:Ha},timeoutPolicy:hs,batchable:!0},Ss=e=>{let t=e.flags?.snapshotCustomActions===!0||e.input?.customActions===!0;return[!0,!1].map(e=>Sa({customActions:t,hasActiveApp:e}).use)},Cs=e=>{let t=Ts(e);if(t===void 0||!ws(t))return _a;let n=ba(t);return[!0,!1].map(e=>xa({hasActiveApp:e,intent:n}).use)};function ws(e){return O(e)||e===`focus`||e===`type`}function Ts(e){if(e.positionals===void 0)return;let t=mn(e.positionals,e.flags);return t.ok?t.parsed.action:void 0}const Es=[{name:`human_control`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`humanControl`},recordsSessionAction:!1,daemon:{route:`humanControl`,refFrameEffect:`preserve`,selectorValidationExempt:!0,skipSessionlessProviderDevice:Xo},timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`lease_allocate`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseAllocate`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...W},timeoutPolicy:_s,batchable:!1,platformExecution:K},{name:`lease_heartbeat`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseHeartbeat`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...W,appLease:`allowed`},timeoutPolicy:gs,batchable:!1,platformExecution:K},{name:`lease_release`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseRelease`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...W,appLease:`allowed`},timeoutPolicy:gs,batchable:!1,platformExecution:K},{name:`artifacts`,deviceClaimPolicy:`none`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...W},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`,...G},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,...G},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`inventory`,use:jo}},{name:`capabilities`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0,...G},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:Xo,...G},timeoutPolicy:N,batchable:!0,platformExecution:ms},{name:`apps`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0,sessionlessLeaseAdmissionExemption:es},platformExecution:{kind:`device-runtime`,uses:[Qr]},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:Da},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:Na},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:Ma},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:Oi}},{name:`logs`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},platformExecution:{kind:`device-runtime`,uses:lo},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,...G},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:xo},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:ho}},{name:`replay`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,sessionKind:`replay`,skipSessionlessProviderDevice:Qo,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:Qo},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:[...ao,Gi]}},{name:`clipboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:cs,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Pa}},{name:`keyboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:as,daemon:{route:`session`,refFrameEffect:ns,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Va}},{name:`install`,...xs},{name:`reinstall`,...xs},{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:Ua},timeoutPolicy:hs,batchable:!1},{name:`release_materialized_paths`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`releaseMaterializedPaths`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,...G},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:Wa},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:[pi]}},{name:`open`,deviceClaimPolicy:`acquire-session`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`,allowSessionlessDefaultDevice:Xo,saveScriptFlagOwner:!0,appLease:`allowed`},timeoutPolicy:{...N,budget:{source:`flag`,envelope:`margin`}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:Xa}},{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:no}},{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:$o,appLease:`allowed`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:$a}},{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:ya,selectUses:Ss}},{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:ya,selectUses:Ss}},{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:va}},{name:`alert`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:os,daemon:{route:`snapshot`,refFrameEffect:is},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ba}},{name:`settings`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:us,daemon:{route:`snapshot`,refFrameEffect:ds},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Fa}},{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:Zo},platformExecution:{kind:`device-runtime`,uses:Wo},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:ss,daemon:{route:`find`,refFrameEffect:`may-invalidate`,appLease:`allowed`},timeoutPolicy:Y,batchable:!0,platformExecution:{kind:`device-runtime`,uses:_a,selectUses:Cs}},{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:ys,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Fi}},{name:`fill`,...J,daemon:{...J.daemon,appLease:`allowed`},frameworkTier:`core`,timeoutPolicy:X(`fill`,Y),postActionObservation:Z(`fill`),responseDataTransform:bs,batchable:!0,platformExecution:{kind:`device-runtime`,uses:zi}},{name:`longpress`,...J,catalog:{group:`public`,key:`longPress`},frameworkTier:`extended`,timeoutPolicy:{...vs,envelopeMs:21e4},postActionObservation:Z(`longpress`),targetReadiness:`budgeted`,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Li}},{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:Ri}},{name:`press`,...J,daemon:{...J.daemon,appLease:`allowed`},frameworkTier:`core`,timeoutPolicy:X(`press`,Y),postActionObservation:Z(`press`),targetReadiness:`budgeted`,responseDataTransform:ys,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ii}},{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:[ni]}},{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:fa}},{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:da}},{name:`back`,catalog:{group:`public`},frameworkTier:`core`,...q,timeoutPolicy:X(`back`,N),postActionObservation:Z(`back`),platformExecution:{kind:`device-runtime`,uses:[ri]}},{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:Yi}},{name:`home`,catalog:{group:`public`},frameworkTier:`extended`,...q,platformExecution:{kind:`device-runtime`,uses:[ii]}},{name:`tv-remote`,catalog:{group:`public`,key:`tvRemote`},frameworkTier:`extended`,...q,platformExecution:{kind:`device-runtime`,uses:[si]}},{name:`orientation`,catalog:{group:`public`},frameworkTier:`extended`,...q,platformExecution:{kind:`device-runtime`,uses:[ai]}},{name:`fold`,catalog:{group:`public`},frameworkTier:`extended`,...q,timeoutPolicy:yr,platformExecution:{kind:`device-runtime`,uses:[oi]}},{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:Zi}},{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:Xi}},{name:`focus`,catalog:{group:`public`},frameworkTier:`extended`,...q,daemon:{...q.daemon,appLease:`allowed`},platformExecution:{kind:`device-runtime`,uses:[ti]}},{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:Ta}},{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:[ei]}},{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:[di]}},{name:`action-button`,catalog:{group:`public`,key:`actionButton`},frameworkTier:`extended`,...q,platformExecution:{kind:`device-runtime`,uses:[fi]}},{name:`install-from-source`,deviceClaimPolicy:`none`,catalog:{group:`public`,key:`installFromSource`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,platformExecution:{kind:`device-runtime`,use:Ua},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:ms},{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:jo}},{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:ms}],Ds=new Set([`public`,`local-cli`]),Os=new Set(Es.filter(e=>Ds.has(Is(e))).map(e=>e.name)),Q=Es.map(e=>{let t=Yo(e);return e.name===`record`&&qo(t),{...e,mcpExposed:Ps(e),platformExecution:t}});function ks(e){return Q.filter(t=>Is(t)===e).map(e=>[Ls(e),e.name])}function As(){return Q.filter(e=>Fs(e)).map(e=>e.name).sort()}function js(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 Ms(){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 Ns(e){return Os.has(e)}function Ps(e){return e.mcpExposed??Os.has(e.name)}function Fs(e){return e.mcpExposed&&Ns(e.name)}function Is(e){return e.catalog.group}function Ls(e){return e.catalog.key??e.name}const Rs=new Map(Array.from($.values(),e=>[e.name,e.targetReadiness?{...e.timeoutPolicy,targetReadiness:e.targetReadiness}:e.timeoutPolicy])),zs=new Map(Q.map(e=>[e.name,e.deviceClaimPolicy])),Bs=new Map(Array.from($.values()).flatMap(e=>e.responseDataTransform?[[e.name,e.responseDataTransform]]:[]));function Vs(e){if(e!==void 0)return $.get(e)?.postActionObservation}function Hs(e){return Vs(e)!==void 0}function Us(e){return e!==void 0&&$.get(e)?.targetReadiness===`budgeted`}function Ws(e){return Vs(e)===`settle-and-verify`}function Gs(e){return e===void 0?N:Rs.get(e)??N}function Ks(e){return e===void 0?`require-owner`:zs.get(e)??`require-owner`}function qs(e){if(e!==void 0)return Bs.get(e)}function Js(e){return e===void 0?!1:$.get(e)?.recordsSessionAction??!1}function Ys(e){if(e!==void 0)return $.get(e)?.frameworkTier}function Xs(e){return $.get(e)?.targetIdentityVerification}function Zs(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(Bs.values()).flatMap(e=>Object.keys(e.fields)))].sort()}const $s={apps:{appsFilter:`user-installed`}};function ec(e,t){if(!e||!Ns(e))return!1;let n=$s[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 tc(e){let t=[];for(let n of e)n.daemon&&t.push({command:n.name,...n.daemon,replayScopedAction:n.recordsSessionAction});return t}function nc(e){return e.filter(e=>e.batchable).map(e=>e.name)}const rc=nc(Q),ic=new Set([`batch`,`replay`]),ac=[`command`,`positionals`,`input`,`flags`,`runtime`],oc=[`platform`,`target`,`device`,`udid`,`serial`,`verbose`,`out`,`testIme`],sc=`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.`,cc=new Set(rc);function lc(e){return cc.has(e)}function uc(e){return typeof e==`string`?e.trim().toLowerCase():``}function dc(e){let t=uc(e);return lc(t)?t:void 0}function fc(t,n,r=sc){let i=dc(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 pc(t,n){if(ic.has(t))throw new e(`INVALID_ARGS`,`Batch step ${n} cannot run ${t}.`)}export{fi as $,Dt as $n,ne as $r,jr as $t,Oo as A,an as An,Oe as Ar,wi as At,Qa as B,D as Bn,he as Br,Sa as Bt,Js as C,On as Cn,S as Cr,li as Ct,Go as D,Tn as Dn,xe as Dr,ai as Dt,Xs as E,En,g as Er,Ai as Et,go as F,O as Fn,ve as Fr,ea as Ft,Ja as G,Ut as Gn,le as Gr,L as Gt,eo as H,Gt as Hn,de as Hr,hi as Ht,co as I,sn as In,ye as Ir,Ea as It,no as J,Ht as Jn,ae as Jr,ei as Jt,Ka as K,Zt as Kn,ce as Kr,si as Kt,uo as L,_n as Ln,p as Lr,ta as Lt,To as M,pn as Mn,we as Mr,Ti as Mt,po as N,mn as Nn,m as Nr,Di as Nt,Uo as O,wn as On,De as Or,Si as Ot,yo as P,cn as Pn,_e as Pr,Aa as Pt,Wa as Q,ht as Qn,ee as Qr,Br as Qt,ro as R,yn as Rn,me as Rr,xa as Rt,Zs as S,zn as Sn,y as Sr,Mi as St,Gs as T,An as Tn,ke as Tr,ci as Tt,to as U,tn as Un,ue as Ur,mi as Ut,io as V,Yt as Vn,fe as Vr,Bi as Vt,Ga as W,Qt as Wn,pe as Wr,Na as Wt,Ha as X,Kt as Xn,oe as Xr,Ar as Xt,Ya as Y,qt as Yn,l as Yr,Lr as Yt,Ua as Z,Jt as Zn,f as Zr,Mr as Zt,ks as _,Gn as _n,Ze as _r,ba as _t,pc as a,_r as an,C as ar,ja as at,Ks as b,Wn as bn,Pe as br,Gi as bt,dc as c,M as cn,lt as cr,ri as ct,Us as d,tr as dn,st as dr,ji as dt,te as ei,Nr as en,Tt as er,vi as et,Q as f,Qn as fn,ot as fr,ki as ft,Qs as g,Un as gn,Qe as gr,Ni as gt,Ws as h,rr as hn,Ye as hr,I as ht,rc as i,vr as in,w as ir,pi as it,So as j,fn as jn,Se as jr,Ei as jt,Vo as k,kn,Ee as kr,Ci as kt,tc as l,nr as ln,it as lr,Pi as lt,Hs as m,$n as mn,ct as mr,xi as mt,ac as n,re as ni,Fr as nn,At as nr,gi as nt,uc as o,br as on,ut as or,di as ot,js as p,er as pn,at as pr,bi as pt,qa as q,Xt as qn,ie as qr,ni as qt,oc as r,o as ri,P as rn,wt as rr,_i as rt,fc as s,ar as sn,ft as sr,Qr as st,sc as t,d as ti,Pr as tn,Ot as tr,yi as tt,ec as u,qn as un,rt as ur,R as ut,As as v,Bn as vn,v as vr,ti as vt,qs as w,Dn as wn,b as wr,ui as wt,Ys as x,Rn as xn,x as xr,ii as xt,Ms as y,Hn as yn,Ie as yr,oi as yt,Za as z,nn as zn,ge as zr,Ra as zt};
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 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};
@@ -10,6 +10,13 @@
10
10
  declare const KNOWN_APP_ERROR_CODES: readonly ['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'];
11
11
  type KnownAppErrorCode = (typeof KNOWN_APP_ERROR_CODES)[number];
12
12
  type AppErrorCode = KnownAppErrorCode | (string & {});
13
+ declare class AppError extends Error {
14
+ static [Symbol.hasInstance](value: unknown): boolean;
15
+ code: AppErrorCode;
16
+ details?: AppErrorDetails;
17
+ cause?: unknown;
18
+ constructor(code: AppErrorCode, message: string, details?: AppErrorDetails, cause?: unknown);
19
+ }
13
20
  /**
14
21
  * Locator for one request's diagnostics record on the daemon host, in the
15
22
  * daemon's own vocabulary rather than as a filesystem path: `logPath` names
@@ -102,33 +109,7 @@ type NormalizedError = {
102
109
  * error representation because clients immediately rehydrate this wire shape
103
110
  * into `AppError` before rendering or handling it.
104
111
  */
105
- type DaemonError = {
106
- code: string;
107
- message: string;
108
- cause?: ErrorCause;
109
- hint?: string;
110
- diagnosticId?: string;
111
- /** Path on the DAEMON host. Meaningful to a local caller only (#1801). */
112
- logPath?: string;
113
- /** Why no readable path is named; set by the client, never by the daemon. */
114
- logPathUnavailable?: string;
115
- /**
116
- * Additive locator (#1801) for the request diagnostics record `logPath`
117
- * names, so a remote caller can fetch it over the daemon API instead of
118
- * being handed a path on a filesystem it cannot read.
119
- */
120
- diagnosticsRecord?: DiagnosticsRecordRef;
121
- details?: ErrorWireDetails;
122
- /** Additive retry and platform-support signals; absent when not derivable. */
123
- retriable?: boolean;
124
- supportedOn?: string;
125
- };
126
- declare class AppError extends Error {
127
- code: AppErrorCode;
128
- details?: AppErrorDetails;
129
- cause?: unknown;
130
- constructor(code: AppErrorCode, message: string, details?: AppErrorDetails, cause?: unknown);
131
- }
112
+ type DaemonError = NormalizedError;
132
113
  declare function isAgentDeviceError(err: unknown): err is AppError;
133
114
  type NormalizeErrorContext = {
134
115
  diagnosticId?: string;
@@ -206,7 +187,15 @@ type Point = {
206
187
  x: number;
207
188
  y: number;
208
189
  };
190
+ type IosSnapshotObservation = {
191
+ mode: 'observe-only';
192
+ activationPerformed: false;
193
+ /** XCTest's report, not proof of foreground ownership (#2696). */
194
+ appState: 'runningForeground';
195
+ appStateSource: 'xcuiapplication-state';
196
+ };
209
197
  type SnapshotOptions = {
198
+ observeOnly?: boolean;
210
199
  interactiveOnly?: boolean;
211
200
  depth?: number;
212
201
  scope?: string;
@@ -231,6 +220,7 @@ declare const SNAPSHOT_OPTION_FLAGS: {
231
220
  readonly depth: 'snapshotDepth';
232
221
  readonly scope: 'snapshotScope';
233
222
  readonly raw: 'snapshotRaw';
223
+ readonly observeOnly: 'snapshotObserveOnly';
234
224
  readonly customActions: 'snapshotCustomActions';
235
225
  readonly forceFull: 'snapshotForceFull';
236
226
  readonly includeHiddenContentHints: 'snapshotIncludeHiddenContentHints';
@@ -238,6 +228,7 @@ declare const SNAPSHOT_OPTION_FLAGS: {
238
228
  };
239
229
  type SnapshotOptionKey = keyof typeof SNAPSHOT_OPTION_FLAGS;
240
230
  type SnapshotOptionValues = {
231
+ observeOnly: boolean;
241
232
  interactiveOnly: boolean;
242
233
  depth: number;
243
234
  scope: string;
@@ -254,7 +245,7 @@ type SnapshotOptionFields<TKeys extends SnapshotOptionKey = SnapshotOptionKey> =
254
245
  * resolved against the session before capture, so seams that resolve it spread
255
246
  * this projection and then override that one key.
256
247
  */
257
- declare const SNAPSHOT_COMMAND_OPTION_KEYS: readonly ['interactiveOnly', 'depth', 'scope', 'raw', 'customActions', 'forceFull'];
248
+ declare const SNAPSHOT_COMMAND_OPTION_KEYS: readonly ['observeOnly', 'interactiveOnly', 'depth', 'scope', 'raw', 'customActions', 'forceFull'];
258
249
  /**
259
250
  * The snapshot capture options a `snapshot`/`diff` request is stated in, in
260
251
  * every vocabulary that names them: the public SDK type, the internal request
@@ -736,4 +727,4 @@ type JsonRpcRequestEnvelope<TParams = unknown> = {
736
727
  params?: TParams;
737
728
  };
738
729
  //#endregion
739
- export { normalizeError as $, Rect as A, SnapshotViewportSize as B, Platform as C, IosTargetActivation as D, AppleApplicationState as E, SnapshotOptions as F, AppErrorDetails as G, centerOfRect as H, SnapshotProvenance as I, KnownAppErrorCode as J, DaemonError as K, SnapshotQualityVerdict as L, SnapshotCommandOptionFields as M, SnapshotKeyboardBandFact as N, Point as O, SnapshotNode as P, normalizeAgentDeviceError as Q, SnapshotState as R, DeviceTarget as S, PublicPlatform as T, AppError as U, SnapshotVisibility as V, AppErrorCode as W, defaultHintForCode as X, NormalizedError as Y, isAgentDeviceError as Z, SessionIsolationMode as _, DaemonRequest as a, DeviceInfo as b, DaemonServerMode as c, JsonRpcRequestEnvelope as d, LeaseBackend as f, ResponseLevel as g, ResponseCost as h, DaemonLockPolicy as i, ScreenshotOverlayRef as j, RawSnapshotNode as k, DaemonTransportPreference as l, NetworkIncludeMode as m, DaemonArtifactType as n, DaemonResponse as o, LocalInstallSource as p, ErrorCause as q, DaemonInstallSource as r, DaemonResponseData as s, DaemonArtifact as t, JsonRpcId as u, SessionRuntimeHints as v, PlatformSelector as w, DeviceKind as x, AppleOS as y, SnapshotUnchanged as z };
730
+ export { normalizeAgentDeviceError as $, RawSnapshotNode as A, SnapshotUnchanged as B, Platform as C, IosSnapshotObservation as D, AppleApplicationState as E, SnapshotNode as F, AppErrorCode as G, SnapshotVisibility as H, SnapshotOptions as I, ErrorCause as J, AppErrorDetails as K, SnapshotProvenance as L, ScreenshotOverlayRef as M, SnapshotCommandOptionFields as N, IosTargetActivation as O, SnapshotKeyboardBandFact as P, isAgentDeviceError as Q, SnapshotQualityVerdict as R, DeviceTarget as S, PublicPlatform as T, centerOfRect as U, SnapshotViewportSize as V, AppError as W, NormalizedError as X, KnownAppErrorCode as Y, defaultHintForCode as Z, SessionIsolationMode as _, DaemonRequest as a, DeviceInfo as b, DaemonServerMode as c, JsonRpcRequestEnvelope as d, normalizeError as et, LeaseBackend as f, ResponseLevel as g, ResponseCost as h, DaemonLockPolicy as i, Rect as j, Point as k, DaemonTransportPreference as l, NetworkIncludeMode as m, DaemonArtifactType as n, DaemonResponse as o, LocalInstallSource as p, DaemonError as q, DaemonInstallSource as r, DaemonResponseData as s, DaemonArtifact as t, JsonRpcId as u, SessionRuntimeHints as v, PlatformSelector as w, DeviceKind as x, AppleOS as y, SnapshotState as z };
@@ -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 c(e,new WeakSet)}function ee(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 c(e,n,r){if(e==null)return e;if(typeof e==`string`)return l(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=>c(e,n));let i={};for(let[r,a]of Object.entries(e)){if(t.test(r)){i[r]=`[REDACTED]`;continue}i[r]=c(a,n,r)}return i}function l(e,i){let a=e.trim();if(!a)return u(e,i);if(i&&t.test(i))return`[REDACTED]`;let o=d(a);return o=o.replace(n,`[REDACTED]`),o=o.replace(r,(e,t,n,r,i,a)=>p({key:t,separator:n,rawValue:r,offset:i,input:a})||f(r)?e:`${t}${n}[REDACTED]`),u(o,i)}function u(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 d(e){return e.replace(i,e=>m(e)??e)}function f(e){return/^adc_(?:agent|live|refresh|cli)_\.\.\.$/i.test(e)}function p(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:()=>b,KNOWN_APP_ERROR_CODES:()=>h,PRE_DISPATCH_REFUSAL_REASONS:()=>S,asAppError:()=>D,createRequestCanceledError:()=>se,defaultHintForCode:()=>P,detailsAfterDispatchedSteps:()=>I,discloseDispatch:()=>F,discloseDispatchAfterSteps:()=>L,discloseUnclassifiedDispatch:()=>R,errorMessage:()=>T,isAgentDeviceError:()=>O,isRequestCanceledDetails:()=>C,isRequestCanceledError:()=>w,normalizeAgentDeviceError:()=>k,normalizeError:()=>A,readDiagnosticsRecordRef:()=>M,readElementMatchCandidateRefs:()=>v,readErrorCandidateViews:()=>_,retriableForErrorCode:()=>N,sessionAppRequiredDetails:()=>re,sessionOrDeviceSelectorRequiredDetails:()=>ie,summarizeCommandAttemptFailures:()=>E,throwDaemonError:()=>x,toAppErrorCode:()=>g});const h=[`INVALID_ARGS`,`DEVICE_NOT_FOUND`,`DEVICE_IN_USE`,`TOOL_MISSING`,`APP_NOT_INSTALLED`,`UNSUPPORTED_PLATFORM`,`UNSUPPORTED_OPERATION`,`NOT_IMPLEMENTED`,`COMMAND_FAILED`,`SESSION_NOT_FOUND`,`UNAUTHORIZED`,`AMBIGUOUS_MATCH`,`REPLAY_DIVERGENCE`,`REPAIR_SESSION_EXPIRED`,`REPAIR_COMMIT_FAILED`,`UNKNOWN`];function g(e,t=`COMMAND_FAILED`){return typeof e==`string`&&e.length>0?e:t}function _(e){let t=y(e?.candidates),n=[];if(t.length>0){let r=typeof e?.matches==`number`?e.matches:t.length,i=typeof e?.refsGeneration==`number`?e.refsGeneration:void 0;n.push({kind:`element-match`,candidates:t,matches:r,...i===void 0?{}:{refsGeneration:i}})}let r=ne(e?.devices);return r.length>0&&n.push({kind:`device`,devices:r}),n}function v(e){return y(e?.candidates).flatMap(e=>{let t=/^@(e\d+)(?:~s\d+)?(?:\s|$)/.exec(e);return t?.[1]?[t[1]]:[]})}function y(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function ne(e){return Array.isArray(e)?e.filter(e=>typeof e==`object`&&!!e&&typeof e.id==`string`&&typeof e.name==`string`):[]}var b=class extends Error{code;details;cause;constructor(e,t,n,r){super(t),this.code=e,this.details=n,this.cause=r}};function x(e){throw new b(g(e.code),e.message,{...e.details??{},hint:e.hint,diagnosticId:e.diagnosticId,logPath:e.logPath,logPathUnavailable:e.logPathUnavailable,diagnosticsRecord:e.diagnosticsRecord,retriable:e.retriable,supportedOn:e.supportedOn},e.cause)}const S={sessionAppRequired:`session_app_required`,sessionOrDeviceSelectorRequired:`session_or_device_selector_required`};function re(){return{reason:S.sessionAppRequired,dispatched:`no`}}function ie(){return{reason:S.sessionOrDeviceSelectorRequired,dispatched:`no`}}const ae=`request_canceled`,oe=`request canceled`;function se(e,t){return new b(`COMMAND_FAILED`,oe,{hint:`The request was canceled intentionally (explicit cancel or client disconnect) — no retry is needed unless the cancellation was unintended.`,...e,reason:ae},t)}function C(e){return e?.reason===ae}function w(e){return!(e instanceof b)||e.code!==`COMMAND_FAILED`?!1:C(e.details)?!0:e.message===oe}function T(e){return e instanceof Error?e.message:String(e)}function E(e){return e.map(e=>({args:e.args.join(` `),exitCode:e.exitCode,stderr:e.stderr.slice(0,400)}))}function D(e,t=`UNKNOWN`){return e instanceof b?e:e instanceof Error?new b(t,e.message,void 0,e):new b(t,`Unknown error`,{err:e})}function O(e){return e instanceof b}function k(e,t={}){return A(e,t)}function A(e,t={}){let n=D(e),r=n.details?s(n.details):void 0,i=j(r,`diagnosticId`)??t.diagnosticId,a=j(r,`logPath`)??t.logPath,o=j(r,`logPathUnavailable`),c=M(r?.diagnosticsRecord)??t.diagnosticsRecord,l=j(r,`hint`)??P(n.code),u=pe(r,`retriable`)??N(n.code),d=j(r,`supportedOn`),f=he(r),p=le(n.code,n.message,r),m=ee(n.cause);return{code:n.code,message:p,...m===void 0?{}:{cause:m},hint:l,diagnosticId:i,logPath:a,...o===void 0?{}:{logPathUnavailable:o},...c===void 0?{}:{diagnosticsRecord:c},...u===void 0?{}:{retriable:u},...d===void 0?{}:{supportedOn:d},details:f}}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 j(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function M(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 N(e){return _e(e)?ge[e]:void 0}function P(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 F(e,t,n={}){return e.details={...e.details,...n,dispatched:t},e}function I(e,t){if(t===0)return e;let n=e?.dispatchedSteps;return{...e,dispatchedSteps:t+(typeof n==`number`?n:0),dispatched:`unknown`}}function L(e,t){return e instanceof b&&(e.details=I(e.details,t)),e}function R(e,t){return e.details?.dispatched===void 0?F(e,t):e}const z={interactiveOnly:`snapshotInteractiveOnly`,depth:`snapshotDepth`,scope:`snapshotScope`,raw:`snapshotRaw`,customActions:`snapshotCustomActions`,forceFull:`snapshotForceFull`,includeHiddenContentHints:`snapshotIncludeHiddenContentHints`,preferredBackend:`snapshotPreferredBackend`},ve=[`interactiveOnly`,`depth`,`scope`,`raw`,`customActions`,`forceFull`],ye=[`interactiveOnly`,`preferredBackend`,`depth`,`scope`,`raw`,`customActions`,`includeHiddenContentHints`],be=[`depth`,`interactiveOnly`,`raw`,`scope`,`customActions`];function B(e,t){return Object.fromEntries(t.map(t=>[t,e?.[z[t]]]))}function xe(e,t){return Object.fromEntries(t.flatMap(t=>{let n=e?.[t];return n===void 0?[]:[[z[t],n]]}))}const V={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(V,e)?V[e]:void 0}function H(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 U=[`unknown`,`notRunning`,`runningBackgroundSuspended`,`runningBackground`,`runningForeground`];Object.freeze(U.filter(e=>e!==`runningForeground`));function Oe(e){return typeof e==`string`&&U.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:H(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 W(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=W(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 B(e,be)}function Le(e){return{x:Math.round(e.x+e.width/2),y:Math.round(e.y+e.height/2)}}const G=[`ios`,`android`,`harmonyos`];function Re(e){return G.some(t=>t===e)}const ze=[`ios-simulator`,`ios-instance`,`android-instance`,`harmonyos-instance`,`macos-app`],K={ios:`ios-instance`,android:`android-instance`,harmonyos:`harmonyos-instance`};function Be(e){return e===void 0?void 0:K[e]}const Ve=new Map([...Object.entries(K).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 q(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 J=`No active session. Run open first.`;function Ke(){return q(`SESSION_NOT_FOUND`,J)}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 qe(e,t){return typeof e!=`string`&&X(t,`Expected a string`),e}function Je(e,t){return Number.isInteger(e)||X(t,`Expected an integer`),e}function Ye(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:qe(r,`${n}.${t}`)}function Xe(e,t,n){let r=e[t];if(r!==void 0)return Ye(r,`${n}.${t}`).map((e,r)=>qe(e,`${n}.${t}[${String(r)}]`))}function Ze(e,t,n){let r=e[t];return r===void 0?void 0:Je(r,`${n}.${t}`)}function $(e,t,n){let r=e[t];return r===void 0?void 0:Z(r,`${n}.${t}`)}function Qe(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 $e=Y((e,t)=>{let n=Z(e,t);return{platform:Qe(n,`platform`,G,t),metroHost:Q(n,`metroHost`,t),metroPort:Ze(n,`metroPort`,t),bundleUrl:Q(n,`bundleUrl`,t),launchUrl:Q(n,`launchUrl`,t)}});function et(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 tt=Y((e,t)=>{let n=Z(e,t);return{jsonrpc:Q(n,`jsonrpc`,t),id:et(n,t),method:Q(n,`method`,t),params:n.params}}),nt=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:Xe(n,`positionals`,t),input:$(n,`input`,t),flags:$(n,`flags`,t),runtime:$(n,`runtime`,t),meta:$(n,`meta`,t)}});export{re as $,Ie as A,L as B,ke as C,Ne as D,we as E,D as F,C as G,T as H,se as I,A as J,w as K,P as L,W as M,Te as N,xe as O,b as P,N as Q,I as R,H as S,De as T,te as U,R as V,O as W,v as X,M as Y,_ as Z,ve as _,nt as a,ee as at,Le as b,Ge as c,Be as d,ie as et,Ke as f,ye as g,Me as h,We as i,s as it,Ce as j,B as k,Re as l,U as m,Ue as n,x as nt,$e as o,He as p,k as q,J as r,g as rt,q as s,ze as t,E as tt,tt as u,Ae as v,Oe as w,Pe as x,Fe as y,F 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};