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 +1 @@
1
- import{P as e}from"./sdk-contracts.js";function t(e){return Object.freeze({family:e.platform,...e.appleOs===void 0?{}:{appleOs:e.appleOs},kind:e.kind,...e.target===void 0?{}:{target:e.target},...e.iosPhysicalDeviceBackend===void 0?{}:{iosPhysicalDeviceBackend:e.iosPhysicalDeviceBackend}})}function n(e){return Object.freeze({id:e.id,...t(e)})}function r(e){return JSON.stringify([e.id,...o(e)])}function i(e,t){return r(e)===r(t)}function a(e,t){return JSON.stringify(o(e))===JSON.stringify(o(t))}function o(e){return[e.family,e.appleOs??null,e.kind,e.target??null,e.iosPhysicalDeviceBackend??null]}const s=[`ios`,`ipados`,`tvos`,`watchos`,`visionos`,`macos`],c=[`apple`,`android`,`harmonyos`,`vega`,`linux`,`web`],l=[`ios`,`macos`,`android`,`harmonyos`,`vega`,`linux`,`web`],u=[...c,`ios`,`macos`],ee=[`simulator`,`emulator`,`device`],te=[`mobile`,`tv`,`desktop`];function d(e){return[e.deviceName,e.udid,e.serial].some(e=>typeof e==`string`&&e.trim().length>0)}function f(e){return e===`apple`||e===`ios`||e===`macos`}function p(e){return e.appleOs===`macos`||e.platform===`macos`}function m(e){return f(e.platform)&&!p(e)}function h(e){if(e.kind!==`simulator`)return!1;let t=x(e);return t===`ios`||t===`ipados`}function g(e){return e.platform===`android`||e.platform===`harmonyos`||f(e.platform)&&!p(e)}function _(e){return f(e.platform)?p(e)?`macos`:`ios`:e.platform}function v(e){return e===`macos`?{platform:`apple`,appleOs:`macos`}:e===`ios`?{platform:`apple`}:{platform:e}}function y(e){return f(e.platform)&&e.target===`tv`}function b(e){return m(e)&&!y(e)&&e.appleOs!==`visionos`}function x(e){return e.appleOs?e.appleOs:e.platform===`macos`?`macos`:y(e)?`tvos`:`ios`}function ne(e){let t=x(e);return t===`ios`||t===`ipados`}function re(e){return c.includes(e)}function ie(e){return l.includes(e)}function S(e){return s.includes(e)}function C(e,t){return t?t===`apple`?f(e.platform):t===`ios`?f(e.platform)&&!p(e):t===`macos`?f(e.platform)&&p(e):e.platform===t:!0}function w(e,t){return!e||!t||e===t?!1:e===`apple`?!f(t):t!==`apple`||!f(e)}function T(e,t){return t?E(t):e===`macos`||e===`desktop`?`macOS`:e===`tv`?`tvOS`:`iOS`}function E(e){switch(e){case`tvos`:return`tvOS`;case`macos`:return`macOS`;case`visionos`:return`visionOS`;default:return`iOS`}}function D(e){let{simulatorSetPath:t,platform:n,target:r}=e;if(t&&n!==`macos`&&r!==`desktop`)return t}function O(e){return e.map((e,t)=>({device:e,index:t})).sort((e,t)=>ae(e,t)).map(({device:e})=>e)}function k(e){return!e||e===`apple`||e===`ios`}async function A(e,t,n={}){let r=e.filter(e=>W(e,t));return j(r,t)||F(r,t.deviceName)||($(r)&&(r=O(r)),R(r,t,n))}function j(e,t){if(M(t),t.udid)return N(e,t.udid);if(t.serial)return P(e,t)}function M(t){let n=t.platform;if(n){if(t.udid&&K(n))throw new e(`INVALID_ARGS`,`--udid selects Apple devices, but this request selected --platform ${n}.`,{hint:`Use --serial ${t.udid} for ${n} devices.`});if(t.serial&&f(n))throw new e(`INVALID_ARGS`,`--serial selects Android and HarmonyOS devices, but this request selected --platform ${n}.`,{hint:`Use --udid ${t.serial} for Apple devices.`})}}function N(t,n){let r=t.find(e=>e.id===n&&f(e.platform));if(!r)throw new e(`DEVICE_NOT_FOUND`,`No Apple device with UDID ${n}`);return r}function P(t,n){let r=t.find(e=>e.id===n.serial&&K(e.platform));if(!r)throw new e(`DEVICE_NOT_FOUND`,q(n));return r}function F(t,n){if(!n)return;let r=t.find(e=>Y(e,n));if(!r){let r=I(t,n);throw new e(`DEVICE_NOT_FOUND`,`No device named ${n}`,r===void 0?void 0:{hint:r})}return r}function I(e,t){let n=e.find(e=>e.id===t);if(!n)return;let r=L(n.platform);if(r)return`${t} is the id of ${JSON.stringify(n.name)}, not its name. Did you mean --${r} ${t}?`}function L(e){if(f(e))return`udid`;if(K(e))return`serial`}function R(e,t,n){let r=e[0];if(r!==void 0&&e.length===1)return r;e.length===0&&J(t,n);let i=V(e);i.length>1&&z(i);let a=i[0];return a||J(t,n),a}function z(t){let n=t.slice(0,10);throw new e(`AMBIGUOUS_MATCH`,`${t.length} devices match this request equally; select one explicitly.`,{devices:n.map(e=>({id:e.id,name:e.name})),matches:t.length,hint:B(n)})}function B(e){let t=e[0];return`Select the intended device explicitly, for example ${t?`--${L(t.platform)??`udid`} ${t.id}`:`--udid <id>`} or --device ${JSON.stringify(t?.name??`<name>`)}. Run agent-device devices to list them.`}function V(e){let t=$(e)?U(e):H(e),n=t.filter(e=>e.booted);return n.length>0?n:t}function H(e){let t=e.filter(e=>e.kind!==`device`);return t.length>0?t:e}function U(e){let t=Math.min(...e.map(e=>Z(e)));return e.filter(e=>Z(e)===t)}function W(e,t,n={}){return C(e,t.platform)&&(!t.target||(e.target??`mobile`)===t.target)&&(!n.includeExplicitSelectors||G(e,t))}function G(e,t){return!(t.udid&&!(e.id===t.udid&&f(e.platform))||t.serial&&!(e.id===t.serial&&K(e.platform))||t.deviceName&&!Y(e,t.deviceName))}function K(e){return e===`android`||e===`harmonyos`||e===`vega`}function q(e){return e.platform===`android`?`No Android device with serial ${e.serial}`:e.platform===`vega`?`No Vega VVD with serial ${e.serial}`:e.platform===`harmonyos`?`No HarmonyOS device with serial ${e.serial}`:`No Android, HarmonyOS device, or Vega VVD with serial ${e.serial}`}function J(t,n){let r=n.simulatorSetPath;throw r&&k(t.platform)?new e(`DEVICE_NOT_FOUND`,`No devices found in the scoped simulator set`,{simulatorSetPath:r,hint:`The simulator set at "${r}" appears to be empty. Create a compatible simulator first with xcrun simctl --set "${r}" create, or remove the scoped simulator set.`,selector:t}):new e(`DEVICE_NOT_FOUND`,`No devices found`,{selector:t})}function Y(e,t){return X(e.name)===X(t)}function X(e){return e.toLowerCase().replaceAll(`_`,` `).replaceAll(/\s+/g,` `).trim()}function ae(e,t){return Z(e.device)-Z(t.device)||Number(t.device.booted===!0)-Number(e.device.booted===!0)||e.device.name.localeCompare(t.device.name)||e.index-t.index}function Z(e){return e.kind===`simulator`?Q(e,0,1,2,3):e.kind===`device`&&f(e.platform)&&!p(e)?Q(e,10,11,12,13):14}function Q(e,t,n,r,i){return{mobile:oe(e.name)?n:t,tv:r,desktop:i}[e.target??`mobile`]}function $(e){return e.length>0&&e.every(e=>f(e.platform))}function oe(e){return/\bipad\b/i.test(e)}export{O as A,w as C,A as D,D as E,a as F,r as M,t as N,x as O,i as P,C as S,T,ie as _,l as a,Y as b,ne as c,f as d,h as f,re as g,g as h,u as i,n as j,b as k,d as l,p as m,te as n,v as o,m as p,c as r,L as s,ee as t,S as u,K as v,_ as w,W as x,y};
1
+ import{r as e}from"./rolldown-runtime.js";import{P as t}from"./sdk-contracts.js";function n(e){return Object.freeze({family:e.platform,...e.appleOs===void 0?{}:{appleOs:e.appleOs},kind:e.kind,...e.target===void 0?{}:{target:e.target},...e.iosPhysicalDeviceBackend===void 0?{}:{iosPhysicalDeviceBackend:e.iosPhysicalDeviceBackend}})}function r(e){return Object.freeze({id:e.id,...n(e)})}function i(e){return JSON.stringify([e.id,...s(e)])}function a(e,t){return i(e)===i(t)}function o(e,t){return JSON.stringify(s(e))===JSON.stringify(s(t))}function s(e){return[e.family,e.appleOs??null,e.kind,e.target??null,e.iosPhysicalDeviceBackend??null]}var ee=e({DEVICE_KINDS:()=>f,DEVICE_TARGETS:()=>p,PLATFORMS:()=>l,PLATFORM_SELECTORS:()=>d,PUBLIC_PLATFORMS:()=>u,deviceFieldsFromPublicPlatform:()=>S,deviceIdentityFlag:()=>R,hasAppleActionButton:()=>E,hasExplicitDeviceIdentitySelector:()=>m,isAppleOs:()=>k,isApplePlatform:()=>h,isHandheldAppleDevice:()=>y,isHandheldAppleSimulator:()=>v,isIosFamily:()=>_,isMacOs:()=>g,isMobilePlatform:()=>b,isPlatform:()=>D,isPublicPlatform:()=>O,isSerialAddressablePlatform:()=>q,isTvOsDevice:()=>C,matchesDeviceNameSelector:()=>Y,matchesDeviceSelector:()=>G,matchesPlatformSelector:()=>A,platformSelectorsConflict:()=>j,publicPlatformString:()=>x,resolveApplePlatformName:()=>M,resolveAppleSimulatorSetPathForSelector:()=>N,resolveDevice:()=>F,resolveDeviceAppleOs:()=>T,runnerSynthesizesTap:()=>w,sortAppleDevicesForSelection:()=>P});const c=[`ios`,`ipados`,`tvos`,`watchos`,`visionos`,`macos`],l=[`apple`,`android`,`harmonyos`,`vega`,`linux`,`web`],u=[`ios`,`macos`,`android`,`harmonyos`,`vega`,`linux`,`web`],d=[...l,`ios`,`macos`],f=[`simulator`,`emulator`,`device`],p=[`mobile`,`tv`,`desktop`];function m(e){return[e.deviceName,e.udid,e.serial].some(e=>typeof e==`string`&&e.trim().length>0)}function h(e){return e===`apple`||e===`ios`||e===`macos`}function g(e){return e.appleOs===`macos`||e.platform===`macos`}function _(e){return h(e.platform)&&!g(e)}function v(e){if(e.kind!==`simulator`)return!1;let t=T(e);return t===`ios`||t===`ipados`}function y(e){if(!_(e))return!1;let t=T(e);return t===`ios`||t===`ipados`}function b(e){return e.platform===`android`||e.platform===`harmonyos`||h(e.platform)&&!g(e)}function x(e){return h(e.platform)?g(e)?`macos`:`ios`:e.platform}function S(e){return e===`macos`?{platform:`apple`,appleOs:`macos`}:e===`ios`?{platform:`apple`}:{platform:e}}function C(e){return h(e.platform)&&e.target===`tv`}function w(e){return _(e)&&!C(e)&&e.appleOs!==`visionos`}function T(e){return e.appleOs?e.appleOs:e.platform===`macos`?`macos`:C(e)?`tvos`:`ios`}function E(e){let t=T(e);return t===`ios`||t===`ipados`}function D(e){return l.includes(e)}function O(e){return u.includes(e)}function k(e){return c.includes(e)}function A(e,t){return t?t===`apple`?h(e.platform):t===`ios`?h(e.platform)&&!g(e):t===`macos`?h(e.platform)&&g(e):e.platform===t:!0}function j(e,t){return!e||!t||e===t?!1:e===`apple`?!h(t):t!==`apple`||!h(e)}function M(e,t){return t?te(t):e===`macos`||e===`desktop`?`macOS`:e===`tv`?`tvOS`:`iOS`}function te(e){switch(e){case`tvos`:return`tvOS`;case`macos`:return`macOS`;case`visionos`:return`visionOS`;default:return`iOS`}}function N(e){let{simulatorSetPath:t,platform:n,target:r}=e;if(t&&n!==`macos`&&r!==`desktop`)return t}function P(e){return e.map((e,t)=>({device:e,index:t})).sort((e,t)=>ce(e,t)).map(({device:e})=>e)}function ne(e){return!e||e===`apple`||e===`ios`}async function F(e,t,n={}){let r=e.filter(e=>G(e,t));return re(r,t)||I(r,t.deviceName)||($(r)&&(r=P(r)),z(r,t,n))}function re(e,t){if(ie(t),t.udid)return ae(e,t.udid);if(t.serial)return oe(e,t)}function ie(e){let n=e.platform;if(n){if(e.udid&&q(n))throw new t(`INVALID_ARGS`,`--udid selects Apple devices, but this request selected --platform ${n}.`,{hint:`Use --serial ${e.udid} for ${n} devices.`});if(e.serial&&h(n))throw new t(`INVALID_ARGS`,`--serial selects Android and HarmonyOS devices, but this request selected --platform ${n}.`,{hint:`Use --udid ${e.serial} for Apple devices.`})}}function ae(e,n){let r=e.find(e=>e.id===n&&h(e.platform));if(!r)throw new t(`DEVICE_NOT_FOUND`,`No Apple device with UDID ${n}`);return r}function oe(e,n){let r=e.find(e=>e.id===n.serial&&q(e.platform));if(!r)throw new t(`DEVICE_NOT_FOUND`,se(n));return r}function I(e,n){if(!n)return;let r=e.find(e=>Y(e,n));if(!r){let r=L(e,n);throw new t(`DEVICE_NOT_FOUND`,`No device named ${n}`,r===void 0?void 0:{hint:r})}return r}function L(e,t){let n=e.find(e=>e.id===t);if(!n)return;let r=R(n.platform);if(r)return`${t} is the id of ${JSON.stringify(n.name)}, not its name. Did you mean --${r} ${t}?`}function R(e){if(h(e))return`udid`;if(q(e))return`serial`}function z(e,t,n){let r=e[0];if(r!==void 0&&e.length===1)return r;e.length===0&&J(t,n);let i=H(e);i.length>1&&B(i);let a=i[0];return a||J(t,n),a}function B(e){let n=e.slice(0,10);throw new t(`AMBIGUOUS_MATCH`,`${e.length} devices match this request equally; select one explicitly.`,{devices:n.map(e=>({id:e.id,name:e.name})),matches:e.length,hint:V(n)})}function V(e){let t=e[0];return`Select the intended device explicitly, for example ${t?`--${R(t.platform)??`udid`} ${t.id}`:`--udid <id>`} or --device ${JSON.stringify(t?.name??`<name>`)}. Run agent-device devices to list them.`}function H(e){let t=$(e)?W(e):U(e),n=t.filter(e=>e.booted);return n.length>0?n:t}function U(e){let t=e.filter(e=>e.kind!==`device`);return t.length>0?t:e}function W(e){let t=Math.min(...e.map(e=>Z(e)));return e.filter(e=>Z(e)===t)}function G(e,t,n={}){return A(e,t.platform)&&(!t.target||(e.target??`mobile`)===t.target)&&(!n.includeExplicitSelectors||K(e,t))}function K(e,t){return!(t.udid&&!(e.id===t.udid&&h(e.platform))||t.serial&&!(e.id===t.serial&&q(e.platform))||t.deviceName&&!Y(e,t.deviceName))}function q(e){return e===`android`||e===`harmonyos`||e===`vega`}function se(e){return e.platform===`android`?`No Android device with serial ${e.serial}`:e.platform===`vega`?`No Vega VVD with serial ${e.serial}`:e.platform===`harmonyos`?`No HarmonyOS device with serial ${e.serial}`:`No Android, HarmonyOS device, or Vega VVD with serial ${e.serial}`}function J(e,n){let r=n.simulatorSetPath;throw r&&ne(e.platform)?new t(`DEVICE_NOT_FOUND`,`No devices found in the scoped simulator set`,{simulatorSetPath:r,hint:`The simulator set at "${r}" appears to be empty. Create a compatible simulator first with xcrun simctl --set "${r}" create, or remove the scoped simulator set.`,selector:e}):new t(`DEVICE_NOT_FOUND`,`No devices found`,{selector:e})}function Y(e,t){return X(e.name)===X(t)}function X(e){return e.toLowerCase().replaceAll(`_`,` `).replaceAll(/\s+/g,` `).trim()}function ce(e,t){return Z(e.device)-Z(t.device)||Number(t.device.booted===!0)-Number(e.device.booted===!0)||e.device.name.localeCompare(t.device.name)||e.index-t.index}function Z(e){return e.kind===`simulator`?Q(e,0,1,2,3):e.kind===`device`&&h(e.platform)&&!g(e)?Q(e,10,11,12,13):14}function Q(e,t,n,r,i){return{mobile:le(e.name)?n:t,tv:r,desktop:i}[e.target??`mobile`]}function $(e){return e.length>0&&e.every(e=>h(e.platform))}function le(e){return/\bipad\b/i.test(e)}export{T as A,G as C,M as D,x as E,n as F,a as I,o as L,P as M,r as N,N as O,i as P,Y as S,j as T,b as _,u as a,q as b,ee as c,k as d,h as f,g,_ as h,d as i,w as j,F as k,E as l,v as m,p as n,S as o,y as p,l as r,R as s,f as t,m as u,D as v,A as w,C as x,O as y};
@@ -1,4 +1,4 @@
1
- import { P as SnapshotNode } from "./sdk-contracts.js";
1
+ import { F as SnapshotNode } from "./sdk-contracts.js";
2
2
  //#region packages/selectors/src/internal/find.d.ts
3
3
  declare const FIND_LOCATORS: readonly ['any', 'text', 'label', 'value', 'role', 'id'];
4
4
  type FindLocator = (typeof FIND_LOCATORS)[number];
@@ -1 +1 @@
1
- import{Pn as e}from"./sdk-batch.js";function t(t,n,r,i){return e(t,n,r,typeof i==`boolean`?{requireRect:i}:i)}export{t};
1
+ import{Nn as e}from"./sdk-batch.js";function t(t,n,r,i){return e(t,n,r,typeof i==`boolean`?{requireRect:i}:i)}export{t};
@@ -1,5 +1,5 @@
1
1
  import { n as DaemonArtifactType } from "./sdk-contracts.js";
2
- //#region src/io.d.ts
2
+ //#region packages/contracts/src/artifact-adapter.d.ts
3
3
  type FileInputRef = {
4
4
  kind: 'path';
5
5
  path: string;
@@ -73,6 +73,8 @@ type LocalArtifactAdapterOptions = {
73
73
  tempDir?: string;
74
74
  rootDir?: string;
75
75
  };
76
+ //#endregion
77
+ //#region src/io.d.ts
76
78
  declare function createLocalArtifactAdapter(options?: LocalArtifactAdapterOptions): ArtifactAdapter;
77
79
  //#endregion
78
- export { FileOutputRef as a, ReserveOutputOptions as c, ResolvedInputFile as d, TemporaryFile as f, FileInputRef as i, ReservedOutputFile as l, ArtifactDescriptor as n, LocalArtifactAdapterOptions as o, createLocalArtifactAdapter as p, CreateTempFileOptions as r, OutputVisibility as s, ArtifactAdapter as t, ResolveInputOptions as u };
80
+ export { FileInputRef as a, OutputVisibility as c, ResolveInputOptions as d, ResolvedInputFile as f, CreateTempFileOptions as i, ReserveOutputOptions as l, ArtifactAdapter as n, FileOutputRef as o, TemporaryFile as p, ArtifactDescriptor as r, LocalArtifactAdapterOptions as s, createLocalArtifactAdapter as t, ReservedOutputFile as u };
@@ -107,9 +107,13 @@ type MetroReloadResult = ReloadMetroResult;
107
107
  */
108
108
  declare const PROVIDER_DEVICE_ORIENTATIONS: readonly ['portrait', 'landscape'];
109
109
  type ProviderDeviceOrientation = (typeof PROVIDER_DEVICE_ORIENTATIONS)[number];
110
+ /** Device pool a hosted provider session is created in: physical devices or emulators/simulators. */
111
+ declare const PROVIDER_DEVICE_TYPES: readonly ['real', 'virtual'];
112
+ type ProviderDeviceType = (typeof PROVIDER_DEVICE_TYPES)[number];
110
113
  type CloudProviderProfileFields = {
111
114
  providerApp?: string;
112
115
  providerOsVersion?: string;
116
+ providerDeviceType?: ProviderDeviceType;
113
117
  providerProject?: string;
114
118
  providerBuild?: string;
115
119
  providerSessionName?: string;
@@ -1 +1 @@
1
- import{P as e,t}from"./sdk-contracts.js";import{i as n}from"./sdk-device.js";const r=[`portrait`,`landscape`],i={providerApp:`--provider-app`,providerOsVersion:`--provider-os-version`,providerProject:`--provider-project`,providerBuild:`--provider-build`,providerSessionName:`--provider-session-name`,providerDeviceOrientation:`--provider-device-orientation`,providerGeoLocation:`--provider-geo-location`,providerTimezone:`--provider-timezone`,providerAppiumVersion:`--provider-appium-version`,providerLanguage:`--provider-language`,providerLocale:`--provider-locale`,providerNetworkProfile:`--provider-network-profile`,providerCustomNetwork:`--provider-custom-network`,providerNoResignApp:`--provider-no-resign-app`,awsProjectArn:`--aws-project-arn`,awsDeviceArn:`--aws-device-arn`,awsAppArn:`--aws-app-arn`,awsRegion:`--aws-region`,awsInteractionMode:`--aws-interaction-mode`},a={providerOsVersion:[`--os-version`],providerDeviceOrientation:[`--device-orientation`],providerGeoLocation:[`--geo-location`],providerTimezone:[`--timezone`],providerAppiumVersion:[`--appium-version`],providerLanguage:[`--language`],providerLocale:[`--locale`],providerNetworkProfile:[`--network-profile`],providerCustomNetwork:[`--custom-network`]},o=new Set([`1`,`true`,`yes`,`on`]),s=new Set([`0`,`false`,`no`,`off`]);function c(e){return`AGENT_DEVICE_${e.replaceAll(/([A-Z])/g,`_$1`).replaceAll(/[^A-Za-z0-9_]/g,`_`).toUpperCase()}`}function l(t,n,r,i){if(t.multiple)return(Array.isArray(n)?n:[n]).map(e=>l({...t,multiple:!1},e,r,i));if(t.type===`boolean`)return u(n,r,i);if(t.type===`booleanOrString`){if(typeof n==`boolean`)return n;if(typeof n==`string`&&d(n)!==void 0)return d(n);if(typeof n==`string`&&n.trim().length>0)return n;throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected boolean or non-empty string.`)}if(t.type===`string`){if(typeof n==`string`&&n.trim().length>0)return n;throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected non-empty string.`)}if(t.type===`enum`){if(t.setValue!==void 0)return f(t,n,r,i);if(typeof n!=`string`||!t.enumValues?.includes(n))throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected one of: ${t.enumValues?.join(`, `)}.`);return n}let a=typeof n==`number`?n:typeof n==`string`?Number(n):NaN;if(!Number.isFinite(a)||t.type===`int`&&!Number.isInteger(a))throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected ${t.type===`int`?`integer`:`number`}.`);if(typeof t.min==`number`&&a<t.min)throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Must be >= ${t.min}.`);if(typeof t.max==`number`&&a>t.max)throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Must be <= ${t.max}.`);return a}function u(t,n,r){if(typeof t==`boolean`)return t;if(typeof t==`string`){let e=d(t);if(e!==void 0)return e}throw new e(`INVALID_ARGS`,`Invalid value for "${r}" in ${n}. Expected boolean.`)}function d(e){let t=e.trim().toLowerCase();if(o.has(t))return!0;if(s.has(t))return!1}function f(t,n,r,i){let a=t.setValue;if(n===a)return a;if(typeof n==`string`){let e=n.trim();if(e===``||e===`true`||e===`1`)return a;if(e===`false`||e===`0`)return}if(n===!0)return a;if(n!==!1)throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected boolean-like value for enum flag.`)}const p=[{key:`stateDir`,type:`string`,path:!0},{key:`daemonBaseUrl`,type:`string`},{key:`daemonAuthToken`,type:`string`},{key:`daemonTransport`,type:`enum`,enumValues:[`auto`,`socket`,`http`]},{key:`daemonServerMode`,type:`enum`,enumValues:[`socket`,`http`,`dual`]},{key:`tenant`,type:`string`},{key:`sessionIsolation`,type:`enum`,enumValues:[`none`,`tenant`]},{key:`runId`,type:`string`},{key:`leaseId`,type:`string`},{key:`leaseBackend`,type:`enum`,enumValues:t},{key:`platform`,type:`enum`,enumValues:n},{key:`target`,type:`enum`,enumValues:[`mobile`,`tv`,`desktop`]},{key:`device`,type:`string`},{key:`udid`,type:`string`},{key:`serial`,type:`string`},{key:`iosSimulatorDeviceSet`,type:`string`,path:!0,env:!1},{key:`androidDeviceAllowlist`,type:`string`},{key:`session`,type:`string`},{key:`providerApp`,type:`string`},{key:`providerOsVersion`,type:`string`},{key:`providerProject`,type:`string`},{key:`providerBuild`,type:`string`},{key:`providerSessionName`,type:`string`},{key:`providerDeviceOrientation`,type:`enum`,enumValues:r},{key:`providerGeoLocation`,type:`string`},{key:`providerTimezone`,type:`string`},{key:`providerAppiumVersion`,type:`string`},{key:`providerLanguage`,type:`string`},{key:`providerLocale`,type:`string`},{key:`providerNetworkProfile`,type:`string`},{key:`providerCustomNetwork`,type:`string`},{key:`providerNoResignApp`,type:`boolean`},{key:`awsProjectArn`,type:`string`},{key:`awsDeviceArn`,type:`string`},{key:`awsAppArn`,type:`string`},{key:`awsRegion`,type:`string`},{key:`awsInteractionMode`,type:`enum`,enumValues:[`INTERACTIVE`,`NO_VIDEO`,`VIDEO_ONLY`]},{key:`metroProjectRoot`,type:`string`,path:!0},{key:`metroKind`,type:`enum`,enumValues:[`auto`,`react-native`,`expo`,`repack`]},{key:`metroPublicBaseUrl`,type:`string`},{key:`metroProxyBaseUrl`,type:`string`},{key:`metroBearerToken`,type:`string`},{key:`metroPreparePort`,type:`int`,min:1,max:65535},{key:`metroListenHost`,type:`string`},{key:`metroStatusHost`,type:`string`},{key:`metroStartupTimeoutMs`,type:`int`,min:1},{key:`metroProbeTimeoutMs`,type:`int`,min:1},{key:`metroRuntimeFile`,type:`string`,path:!0},{key:`metroNoReuseExisting`,type:`boolean`},{key:`metroNoInstallDeps`,type:`boolean`},{key:`launchUrl`,type:`string`}],m=[{key:`leaseProvider`,type:`string`,env:!1},{key:`deviceKey`,type:`string`,env:!1},{key:`clientId`,type:`string`,env:!1}],h=[...p,...m],g=new Map(h.map(e=>[e.key,e]));function _(e){return g.get(e)}function v(e){return _(e)?.env===!1?[]:[c(e)]}export{c as a,r as c,_ as i,i as l,h as n,d as o,v as r,l as s,p as t,a as u};
1
+ import{P as e,t}from"./sdk-contracts.js";import{i as n}from"./sdk-device.js";const r=[`portrait`,`landscape`],i=[`real`,`virtual`],a={providerApp:`--provider-app`,providerOsVersion:`--provider-os-version`,providerDeviceType:`--provider-device-type`,providerProject:`--provider-project`,providerBuild:`--provider-build`,providerSessionName:`--provider-session-name`,providerDeviceOrientation:`--provider-device-orientation`,providerGeoLocation:`--provider-geo-location`,providerTimezone:`--provider-timezone`,providerAppiumVersion:`--provider-appium-version`,providerLanguage:`--provider-language`,providerLocale:`--provider-locale`,providerNetworkProfile:`--provider-network-profile`,providerCustomNetwork:`--provider-custom-network`,providerNoResignApp:`--provider-no-resign-app`,awsProjectArn:`--aws-project-arn`,awsDeviceArn:`--aws-device-arn`,awsAppArn:`--aws-app-arn`,awsRegion:`--aws-region`,awsInteractionMode:`--aws-interaction-mode`},o={providerOsVersion:[`--os-version`],providerDeviceOrientation:[`--device-orientation`],providerGeoLocation:[`--geo-location`],providerTimezone:[`--timezone`],providerAppiumVersion:[`--appium-version`],providerLanguage:[`--language`],providerLocale:[`--locale`],providerNetworkProfile:[`--network-profile`],providerCustomNetwork:[`--custom-network`]},s=new Set([`1`,`true`,`yes`,`on`]),c=new Set([`0`,`false`,`no`,`off`]);function l(e){return`AGENT_DEVICE_${e.replaceAll(/([A-Z])/g,`_$1`).replaceAll(/[^A-Za-z0-9_]/g,`_`).toUpperCase()}`}function u(t,n,r,i){if(t.multiple)return(Array.isArray(n)?n:[n]).map(e=>u({...t,multiple:!1},e,r,i));if(t.type===`boolean`)return d(n,r,i);if(t.type===`booleanOrString`){if(typeof n==`boolean`)return n;if(typeof n==`string`&&f(n)!==void 0)return f(n);if(typeof n==`string`&&n.trim().length>0)return n;throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected boolean or non-empty string.`)}if(t.type===`string`){if(typeof n==`string`&&n.trim().length>0)return n;throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected non-empty string.`)}if(t.type===`enum`){if(t.setValue!==void 0)return p(t,n,r,i);if(typeof n!=`string`||!t.enumValues?.includes(n))throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected one of: ${t.enumValues?.join(`, `)}.`);return n}let a=typeof n==`number`?n:typeof n==`string`?Number(n):NaN;if(!Number.isFinite(a)||t.type===`int`&&!Number.isInteger(a))throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected ${t.type===`int`?`integer`:`number`}.`);if(typeof t.min==`number`&&a<t.min)throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Must be >= ${t.min}.`);if(typeof t.max==`number`&&a>t.max)throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Must be <= ${t.max}.`);return a}function d(t,n,r){if(typeof t==`boolean`)return t;if(typeof t==`string`){let e=f(t);if(e!==void 0)return e}throw new e(`INVALID_ARGS`,`Invalid value for "${r}" in ${n}. Expected boolean.`)}function f(e){let t=e.trim().toLowerCase();if(s.has(t))return!0;if(c.has(t))return!1}function p(t,n,r,i){let a=t.setValue;if(n===a)return a;if(typeof n==`string`){let e=n.trim();if(e===``||e===`true`||e===`1`)return a;if(e===`false`||e===`0`)return}if(n===!0)return a;if(n!==!1)throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected boolean-like value for enum flag.`)}const m=[{key:`stateDir`,type:`string`,path:!0},{key:`daemonBaseUrl`,type:`string`},{key:`daemonAuthToken`,type:`string`},{key:`daemonTransport`,type:`enum`,enumValues:[`auto`,`socket`,`http`]},{key:`daemonServerMode`,type:`enum`,enumValues:[`socket`,`http`,`dual`]},{key:`tenant`,type:`string`},{key:`sessionIsolation`,type:`enum`,enumValues:[`none`,`tenant`]},{key:`runId`,type:`string`},{key:`leaseId`,type:`string`},{key:`leaseBackend`,type:`enum`,enumValues:t},{key:`platform`,type:`enum`,enumValues:n},{key:`target`,type:`enum`,enumValues:[`mobile`,`tv`,`desktop`]},{key:`device`,type:`string`},{key:`udid`,type:`string`},{key:`serial`,type:`string`},{key:`iosSimulatorDeviceSet`,type:`string`,path:!0,env:!1},{key:`androidDeviceAllowlist`,type:`string`},{key:`session`,type:`string`},{key:`providerApp`,type:`string`},{key:`providerOsVersion`,type:`string`},{key:`providerDeviceType`,type:`enum`,enumValues:i},{key:`providerProject`,type:`string`},{key:`providerBuild`,type:`string`},{key:`providerSessionName`,type:`string`},{key:`providerDeviceOrientation`,type:`enum`,enumValues:r},{key:`providerGeoLocation`,type:`string`},{key:`providerTimezone`,type:`string`},{key:`providerAppiumVersion`,type:`string`},{key:`providerLanguage`,type:`string`},{key:`providerLocale`,type:`string`},{key:`providerNetworkProfile`,type:`string`},{key:`providerCustomNetwork`,type:`string`},{key:`providerNoResignApp`,type:`boolean`},{key:`awsProjectArn`,type:`string`},{key:`awsDeviceArn`,type:`string`},{key:`awsAppArn`,type:`string`},{key:`awsRegion`,type:`string`},{key:`awsInteractionMode`,type:`enum`,enumValues:[`INTERACTIVE`,`NO_VIDEO`,`VIDEO_ONLY`]},{key:`metroProjectRoot`,type:`string`,path:!0},{key:`metroKind`,type:`enum`,enumValues:[`auto`,`react-native`,`expo`,`repack`]},{key:`metroPublicBaseUrl`,type:`string`},{key:`metroProxyBaseUrl`,type:`string`},{key:`metroBearerToken`,type:`string`},{key:`metroPreparePort`,type:`int`,min:1,max:65535},{key:`metroListenHost`,type:`string`},{key:`metroStatusHost`,type:`string`},{key:`metroStartupTimeoutMs`,type:`int`,min:1},{key:`metroProbeTimeoutMs`,type:`int`,min:1},{key:`metroRuntimeFile`,type:`string`,path:!0},{key:`metroNoReuseExisting`,type:`boolean`},{key:`metroNoInstallDeps`,type:`boolean`},{key:`launchUrl`,type:`string`}],h=[{key:`leaseProvider`,type:`string`,env:!1},{key:`deviceKey`,type:`string`,env:!1},{key:`clientId`,type:`string`,env:!1}],g=[...m,...h],_=new Map(g.map(e=>[e.key,e]));function v(e){return _.get(e)}function y(e){return v(e)?.env===!1?[]:[l(e)]}export{l as a,r as c,o as d,v as i,i as l,g as n,f as o,y as r,u as s,m as t,a as u};
@@ -1,4 +1,4 @@
1
- import { A as Rect, C as Platform, P as SnapshotNode, R as SnapshotState, T as PublicPlatform, h as ResponseCost } from "./sdk-contracts.js";
1
+ import { C as Platform, F as SnapshotNode, T as PublicPlatform, h as ResponseCost, j as Rect, z as SnapshotState } from "./sdk-contracts.js";
2
2
  //#region packages/contracts/src/fill-evidence.d.ts
3
3
  /**
4
4
  * The evidence a `fill` carries when it changed a field but could not confirm the text it sent.
@@ -15,11 +15,10 @@ type FillVerificationTarget = {
15
15
  rect: Rect;
16
16
  };
17
17
  /**
18
- * Target-bound evidence that a fill moved a field's content from `before` to `after` without raw
19
- * equality with `requested` being reachable, because app-owned formatting prevents it or the field's
20
- * accessibility value does not echo the typed text. Bound to the
21
- * {@link FillVerificationTarget} it was collected against so another field, or the same field after
22
- * it re-laid out, cannot borrow this evidence.
18
+ * Target-bound read-back evidence when a fill could not confirm the requested text. The observed
19
+ * value may reflect app-owned formatting or altered input; this evidence makes no correctness
20
+ * claim. Bound to the {@link FillVerificationTarget} it was collected against so a different
21
+ * field cannot borrow the observation.
23
22
  */
24
23
  type FillUnconfirmedVerification = {
25
24
  verification: 'unconfirmed';
@@ -1 +1 @@
1
- import{Tn as e}from"./sdk-batch.js";function t(t,n,r){return e(typeof t==`string`?t:t.raw,n,r)}export{t};
1
+ import{wn as e}from"./sdk-batch.js";function t(t,n,r){return e(typeof t==`string`?t:t.raw,n,r)}export{t};
Binary file
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime.js";import{xn as t}from"./sdk-batch.js";var n=e({SELECTOR_PIPELINE_POLICIES:()=>i,readinessScheduleFor:()=>a});const r={defaultTimeoutMs:1e4,intervalMs:300},i={promotedTarget:{resolution:t.act,occlusion:`exclude-and-refuse`,offscreen:`refuse`,promotion:`hittable-ancestor`,poll:{maxTimeoutMs:2e3,intervalMs:200}},resolvedTarget:{resolution:t.act,occlusion:`exclude-and-refuse`,offscreen:`refuse`,promotion:`none`,poll:`none`},coveredDiagnosis:{resolution:t.actCoveredDiagnosis,occlusion:`refuse`,offscreen:`ignore`,promotion:`none`,poll:`none`},readText:{resolution:t.readText,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`},readUnique:{resolution:t.readUnique,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`},readAny:{resolution:t.readAny,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`},findWait:{resolution:t.readAny,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:r},wait:{resolution:t.wait,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:r},readList:{resolution:t.readList,occlusion:`ignore`},findAct:{resolution:t.findAct,occlusion:`refuse`,offscreen:`ignore`,promotion:`hittable-ancestor-below-root`,poll:`none`},cropTarget:{resolution:t.cropTarget,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`}};function a(e,t){if(e!==`none`&&!(t===void 0||!Number.isInteger(t))&&!(t<=0))return{intervalMs:e.intervalMs,budgetMs:Math.min(t,e.maxTimeoutMs),budgetFrom:`first-capture`}}export{a as n,n as r,i as t};
1
+ import{r as e}from"./rolldown-runtime.js";import{L as t,P as n}from"./sdk-contracts.js";import"./tv-remote.js";import{i as r}from"./snapshot-capture-annotations.js";import{r as i}from"./diagnostics.js";import"./diagnostics2.js";import{Ar as a,Dn as o,Ir as s,Rr as c,Tn as l,bn as u,jr as d,xn as f,xr as p,zr as m}from"./sdk-batch.js";import{i as h}from"./retry.js";import"./retry2.js";import{i as g,n as _,t as v}from"./rect-center.js";import{r as y}from"./snapshot-occlusion.js";const ee=2500,te=5e3,ne=1500,re=[250,400,600];function b(e){return e===`press`||e===`click`||e===`back`||e===`open`}function x(e){return e.map(e=>[e.depth??0,e.type??``,e.label??``,e.value??``,e.identifier??``,e.enabled===!1?`disabled`:`enabled`,e.hittable===!0?`hittable`:`not-hittable`].join(`|`))}function S(e,t){return e<12?!1:t<=Math.floor(e*.2)}function ie(e,t,n){return n.interactiveOnly&&e.snapshot.nodes.length===0&&e.rawNodeCount!==void 0&&e.rawNodeCount>=12?`empty-interactive`:n.mode===`ref-refresh`?null:S(t.baselineCount,e.snapshot.nodes.length)?ae(e.snapshot)?null:`sharp-drop`:t.routeComparable&&b(t.action)&&oe(t.baselineSignatures,e.snapshot.nodes)?`stuck-route`:null}function ae(e){return e.nodes.some(e=>e.hittable===!0||!!e.label?.trim()||!!e.value?.trim()||!!e.identifier?.trim())}function oe(e,t){if(!e||e.length===0)return!1;let n=Math.max(e.length,t.length);if(n<12)return!1;let r=x(t),i=Math.min(e.length,r.length),a=0;for(let t=0;t<i;t+=1)e[t]===r[t]&&(a+=1);let o=Math.max(0,r.length-e.length),s=Math.max(0,e.length-r.length),c=Math.max(3,Math.floor(n*.15));return a>=Math.floor(n*.9)&&o<=c&&s<=c}async function se(e){let t=e.window.markedAt+e.retry.retryBudgetMs,n=await e.capture(),i=e.classify(n),a=0;for(let r of e.retry.delaysMs){if(!i)break;let o=t-Date.now();if(o<=0)break;await h(Math.min(r,o)),n=await e.capture(),a+=1,i=e.classify(n)}i||e.onTrustworthyCapture?.();let o=a>0||i?{action:e.window.action,retryCount:a,staleAfterRetries:!!i,reason:i??void 0}:void 0;return{...n,annotations:{...n.annotations,...r({freshness:o})}}}var ce=e({observeUntil:()=>C});const le={now:()=>Date.now(),sleep:e=>new Promise(t=>setTimeout(t,e))};async function C(e){let n=e.clock??le,r=n.now(),i={params:e,clock:n,state:{startedMs:r,budgetStartedMs:r,budgetMs:e.schedule.budgetMs,observations:0,polls:[],previous:void 0,last:void 0,lastError:void 0}};if(e.initial!==void 0){i.state.observations+=1;let t=T(i,e.initial);if(t)return t}for(;;){if(e.signal?.aborted)throw t();let n=await de(i);if(n)return n;if(e.signal?.aborted)throw t();let r=await fe(i);if(r)return r}}function w({state:e,clock:t}){return e.budgetStartedMs+e.budgetMs-t.now()}function ue({params:e,state:t}){return t.observations<(e.schedule.minPolls??1)}async function de(e){let{state:t,clock:n,params:r}=e;if(t.observations===0)return;let i=ue(e);if(!i&&w(e)<=0)return E(e,{kind:`expired`,last:t.last,lastError:t.lastError});let{intervalMs:a}=r.schedule;await n.sleep(i?a:Math.max(0,Math.min(a,w(e))))}async function fe(e){let{params:t,clock:n,state:r}=e,i=t.schedule.budgetFrom===`first-capture`&&r.polls.length===0,a=n.now(),o=await me(!i&&t.schedule.captureDeadline===`cancel`?Math.max(w(e),t.schedule.intervalMs):void 0,t.signal,t.capture,n);r.observations+=1,i&&(r.budgetStartedMs=n.now());let s=pe(e,o);if(r.polls.push({startedMs:a-r.startedMs,durationMs:n.now()-a,outcome:s}),o.kind===`observed`)return T(e,o.value);if(s===`rode-out`){r.lastError=o.error;return}return o.kind===`stalled`?E(e,{kind:`stalled`,last:r.last,lastError:r.lastError,error:o.error}):E(e,{kind:`failed`,last:r.last,error:o.error})}function pe(e,t){return t.kind===`stalled`?`stalled`:t.kind===`failed`?e.params.rideOut?.(t.error)?`rode-out`:`failed`:`observed`}function T(e,t){let{params:n,state:r}=e,i=n.verdict(t,r.previous,r.polls.length);if(r.previous=t,r.last=t,i.kind===`done`)return E(e,{kind:`done`,result:i.result,value:t});i.budgetMs!==void 0&&(r.budgetMs=Math.max(r.budgetMs,i.budgetMs))}function E(e,t){let{params:n,state:r,clock:a}=e,o={...t,polls:r.polls,waitedMs:a.now()-r.startedMs};return n.phase&&i({level:`debug`,phase:n.phase,data:{end:o.kind,polls:r.polls.length,waitedMs:o.waitedMs}}),o}async function me(e,t,n,r){let i=he(e,r),a=t?AbortSignal.any([t,i.signal]):i.signal;try{let e=await n(a);return D(t,i.expired(),void 0)??{kind:`observed`,value:e}}catch(e){return D(t,i.expired(),e)??{kind:`failed`,error:e}}finally{i.dispose()}}function D(e,n,r){if(e?.aborted)throw t();return n?{kind:`stalled`,error:r}:void 0}function he(e,t){let n=new AbortController,r=e===void 0?void 0:t.now()+e,i=!1,a=e===void 0?void 0:setTimeout(()=>{i=!0,n.abort(new DOMException(`Observation deadline exceeded`,`TimeoutError`))},Math.max(0,e));return a?.unref(),{signal:n.signal,expired:()=>i||r!==void 0&&t.now()>=r,dispose:()=>{a!==void 0&&clearTimeout(a)}}}const O={intervalMs:200,budgetMs:1500,minPolls:2},k=O.budgetMs+2e3;function ge({kind:e,gesture:t}){let n=[t.action,...t.positionals].join(` `).trim();return e===`unsettled`?`The surface was still changing after ${n} when this tree was read, so it may not match where the surface comes to rest: an element missing from it is not proof of absence.`:`${n} produced no visible change: the tree still matches its pre-gesture state. Either the container is already at its edge, or it ignores synthesized scrolls — a raw drag moves such lists: swipe x1 y1 x2 y2 (start inside the list).`}function A(e,t){return{kind:e,gesture:{action:t.action,positionals:t.positionals}}}function _e(e){let{needsBaselineDistrust:t,baselineSignature:n,quietSignature:r,elapsedMs:i,distrustCapMs:a}=e;return!t||!n?.length||e.classifyBaselineEvidence(n,r)!==`unchanged`?`trust`:i<a?`distrust`:`accept-stale`}async function ve(e){let{pending:t,needsBaselineDistrust:n,hooks:r,clock:a}=e,o=()=>a?.now()??Date.now(),s=o(),c=0,l=t.baselineSignature,u=t.baselineBackend,d=!1,f=!1,p,m=e=>(p?.value===e||(p={value:e,...r.readSurface(e)}),p),h=await C({...e.initial===void 0?{}:{initial:e.initial},capture:()=>r.capture(),schedule:O,...a?{clock:a}:{},verdict:(e,a)=>{c+=1;let p=m(e);if(a===void 0)return{kind:`continue`};let h=m(a);if(f=r.signaturesStable(h.signature,p.signature),!f)return{kind:`continue`};let g=o()-s;if(l&&u!==p.backend)return i({level:`debug`,phase:`post_gesture_snapshot_baseline_rebased`,data:{action:t.action,from:u,to:p.backend,attempts:c}}),l=p.signature,u=p.backend,d=!0,{kind:`continue`};let _=_e({needsBaselineDistrust:n,baselineSignature:l,quietSignature:p.signature,elapsedMs:g,distrustCapMs:k,classifyBaselineEvidence:r.classifyBaselineEvidence});return _===`distrust`?{kind:`continue`,budgetMs:k}:(ye(_,t.action,c,g),{kind:`done`,result:j(_,t,p,r,d)})}});if(h.kind===`done`)return h.result;if(h.kind===`failed`)throw h.error;i({level:`warn`,phase:`post_gesture_snapshot_stabilization_timeout`,data:{action:t.action,attempts:c,durationMs:h.waitedMs,lastPairAgreed:f}});let g=h.last;return f?{value:g}:{value:g,postGestureOutcome:A(`unsettled`,t)}}function ye(e,t,n,r){if(e===`accept-stale`){i({level:`warn`,phase:`post_gesture_snapshot_stale_accept`,data:{action:t,attempts:n,durationMs:r,matchedPreGestureBaseline:!0}});return}i({level:n>2?`info`:`debug`,phase:`post_gesture_snapshot_stabilized`,data:{action:t,attempts:n,durationMs:r}})}function j(e,t,n,r,a){if(e!==`accept-stale`)return{value:n.value};let o=t.baselineSignature;return o!==void 0&&r.surfacesIdentical(o,n.signature)?{value:n.value,postGestureOutcome:A(`no-effect`,t)}:(i({level:`info`,phase:`post_gesture_no_effect_vetoed`,data:{action:t.action,backend:n.backend,...a?{reason:`baseline_rebased`}:{reason:`surface_divergence`,...o===void 0?{}:r.summarizeDivergence(o,n.signature)}}}),{value:n.value})}function M(e,t,r,i){if(!Number.isFinite(e)||!Number.isInteger(e)||e<r||e>i)throw new n(`INVALID_ARGS`,`${t} must be an integer between ${r} and ${i}`);return e}function N(e,t,r){let i=Number(e[0]),a=Number(e[1]);if(Number.isNaN(i)||Number.isNaN(a))throw new n(`INVALID_ARGS`,t,r);return{x:i,y:a}}function P(e,t,n,r){let i=n.ambiguity;if(i===`first-match`||i===`reject-candidates`){let a=l(e,t,{...r,requireRect:n.requireRect});return!a||a.matchedNodes.length===0?{kind:`none`}:i===`first-match`?I(a):a.matchedNodes.length>1?F(a):I(a)}let a=o(e,t,{...r,...f({ambiguity:i,requireRect:n.requireRect})});return a.firstMatch?a.resolution?{kind:`resolved`,resolution:a.resolution,matchedNodes:a.firstMatch.matchedNodes}:F(a.firstMatch):{kind:`none`}}function F(e){return{kind:`ambiguous`,selector:e.selector.raw,selectorIndex:e.selectorIndex,matchedNodes:e.matchedNodes}}function I(e){let t=e.matchedNodes[0];return t?{kind:`resolved`,matchedNodes:e.matchedNodes,resolution:{node:t,selector:e.selector,selectorIndex:e.selectorIndex,matches:e.matchedNodes.length,diagnostics:[{selector:e.selector.raw,matches:e.matchedNodes.length}]}}:{kind:`none`}}function be(e,t,n){let r=l(e,p(t),n);return r?{...r,selector:r.selector.raw}:null}function xe(e,t,n,r){let i=P(e,p(t),n,r);return i.kind===`resolved`?{...i,resolution:{...i.resolution,selector:i.resolution.selector.raw}}:i}function Se(e){return e}function L(e,t){let n=Math.max(e.x,t.x),r=Math.max(e.y,t.y),i=Math.min(e.x+e.width,t.x+t.width),a=Math.min(e.y+e.height,t.y+t.height);return i<=n||a<=r?0:(i-n)*(a-r)}const Ce=[`button`,`link`,`menuitem`,`tabitem`,`textfield`,`searchfield`,`securetextfield`,`checkbox`,`radio`,`switch`,`cell`];function R(e){return[e.type,e.role,e.subrole].map(e=>s(e??``)).some(e=>e===`tab`||Ce.some(t=>e.includes(t)))}function we(e,t){let n=t[0];if(!n)return{kind:`ambiguous`,candidates:t};let r=K(e);if(!z(t,r.nodesByIndex))return{kind:`ambiguous`,candidates:t};let i=G(e,n,r).node;for(let n of t.slice(1))if(G(e,n,r).node.index!==i.index){let e=V(t,r);return e?{kind:`equivalent`,node:e}:{kind:`ambiguous`,candidates:t}}return{kind:`equivalent`,node:i}}function z(e,t){for(let n=0;n<e.length;n+=1)for(let r=n+1;r<e.length;r+=1){let i=e[n],a=e[r];if(!B(i,a,t)&&!B(a,i,t))return!1}return!0}function B(e,t,n){let r=t,i=new Set;for(;r.parentIndex!==void 0&&!i.has(r.index);){if(i.add(r.index),r.parentIndex===e.index)return!0;let t=n.get(r.parentIndex);if(!t)return!1;r=t}return!1}function V(e,t){if(e.length<2||!z(e,t.nodesByIndex)||e.some(e=>e.hittable!==void 0))return null;let n=e.reduce((e,t)=>(t.depth??0)>(e.depth??0)?t:e);if(!R(n)||!e.every(e=>e===n||!R(e)))return null;let r=_(n.rect);return r&&e.every(e=>U(_(e.rect),r))?n:null}function Te(e){return[e.type,e.role,e.subrole].map(e=>s(e??``)).some(e=>e.includes(`accessibilityelement`))}function Ee(e,t){if(e.length<2||!z(e,t.nodesByIndex)||e.some(e=>R(e)))return null;let n=e.reduce((e,t)=>(t.depth??0)<(e.depth??0)?t:e),r=n.label?.trim();if(!r)return null;let i=_(n.rect);return i&&e.every(e=>(e===n||Te(e))&&e.label?.trim()===r&&U(_(e.rect),i))?n:null}function H(e,t){let n=K(e);return V(t,n)??Ee(t,n)}function U(e,t){return e?Math.abs(e.x-t.x)<=1&&Math.abs(e.y-t.y)<=1&&Math.abs(e.width-t.width)<=1&&Math.abs(e.height-t.height)<=1:!1}function W(e,t){if(!t?.rect||!e.rect||!a(e))return!1;let n=e.rect,r=t.rect;return n.x===r.x&&n.y===r.y&&n.width===r.width&&n.height===r.height}function De(e,t){return G(e,t)}function Oe(e){let t=K(e);return n=>G(e,n,t)}function G(e,t,n){return y(t)?{node:t,reason:`covered`}:ke(e,t,n)??Ae(t)??je(e,t,n)??{node:t,reason:`original`}}function ke(e,t,n){let r=Ne(e,t,n);return r?.rect&&g(r.rect)?{node:r,reason:`same-rect-descendant`}:null}function Ae(e){return R(e)&&e.rect&&g(e.rect)?{node:e,reason:`semantic-target`}:null}function je(e,t,n){let r=Me(e,t,n);return!r?.rect||y(r)||!g(r.rect)?null:Pe(t,r,e,n)?{node:t,reason:`overly-broad-ancestor`}:{node:r,reason:`hittable-ancestor`}}function Me(e,t,n){if(t.hittable)return t;let r=e=>e.hittable===!0;return n?m(e,t,n.nodesByIndex,e=>r(e)?e:null):c(e,t,r)}function Ne(e,t,n){let r=_(t.rect);if(!r)return null;let i=t,a=new Set;for(;!a.has(i.ref);){a.add(i.ref);let t=(n?n.childrenByParentIndex.get(i.index)??[]:e.filter(e=>e.parentIndex===i.index)).filter(e=>{if(!e.hittable||y(e))return!1;let t=_(e.rect);return t?v(t,r):!1});if(t.length!==1)break;i=t[0]}return i===t?null:i}function Pe(e,t,n,r){let i=_(e.rect),a=_(t.rect);if(!i||!a)return!1;if(Fe(t)&&!v(i,a))return!0;let o=d(n,i,r?.viewportRootRects);return!o||!Ie(a,o)?!1:!v(i,a)}function Fe(e){let t=s(e.type??``);return t.includes(`scrollview`)||t.includes(`scrollarea`)||t.includes(`listview`)||t.includes(`recyclerview`)||t.includes(`collectionview`)||t===`list`||t===`table`||t===`collection`}function K(e){let t=new Map,n=new Map,r=[];for(let i of e){if(t.set(i.index,i),typeof i.parentIndex==`number`){let e=n.get(i.parentIndex);e?e.push(i):n.set(i.parentIndex,[i])}if(a(i)){let e=_(i.rect);e&&r.push(e)}}return{nodesByIndex:t,childrenByParentIndex:n,viewportRootRects:r}}function Ie(e,t){let n=L(e,t),r=e.width*e.height,i=t.width*t.height;if(n<=0||r<=0||i<=0)return!1;let a=n/i,o=n/r;return a>=.9&&o>=.8}async function Le(e,t,n,r,i={}){let a=xe(Y(e,t),n,e.resolution,r);if(a.kind===`none`)return{kind:`none`};if(a.kind===`resolved`)return await q(e,t,{node:a.resolution.node,selector:a.resolution.selector,selectorIndex:a.resolution.selectorIndex,matches:a.resolution.matches,matchedNodes:a.matchedNodes},i);let o=Re(t,a);return o?await q(e,t,o,i):a}function Re(e,t){let n=H(e,t.matchedNodes);return n?{node:n,selector:t.selector,selectorIndex:t.selectorIndex,matches:t.matchedNodes.length,matchedNodes:t.matchedNodes}:null}async function q(e,t,n,r){let i=await J(e,t,n.node,r);return i.kind===`occluded`?{kind:`occluded`,node:i.node,selector:n.selector}:{...n,kind:`target`,node:i.node}}function ze(e,t,n,r){let i=Y(e,t);return{candidates:i,list:be(i,n,{...r,requireRect:e.resolution.requireRect})}}async function J(e,t,n,r={}){r.onResolved?.(n,t);let i=Be(e.promotion,t,n);return e.occlusion!==`ignore`&&(i.covered||y(i.node))?{kind:`occluded`,node:i.node}:{kind:`target`,node:await X(e,t,i.node,r)}}function Y(e,t){return e.occlusion===`exclude-and-refuse`?t.filter(e=>!y(e)):t}function Be(e,t,n){if(e===`none`)return{node:n,covered:!1};let r=De(t,n);return r.reason===`covered`?{node:r.node,covered:!0}:e===`hittable-ancestor-below-root`&&W(r.node,t[0])&&n.rect?{node:n,covered:!1}:{node:r.node,covered:!1}}async function X(e,t,n,r){if(e.offscreen!==`refuse`)return n;if(!r.offscreen)throw Error(`selector pipeline row declares an off-screen refusal but this route supplies no refusal shape`);return await r.offscreen(n,t)}function Ve(e){if(e.poll===`none`)throw Error(`selector pipeline row resolves against one capture and declares no poll budget`);if(!(`defaultTimeoutMs`in e.poll))throw Error(`selector pipeline row polls under a caller-capped readiness budget, not a caller-default one`);return e.poll}var He=e({SELECTOR_PIPELINE_POLICIES:()=>Q,readinessScheduleFor:()=>$});const Z={defaultTimeoutMs:1e4,intervalMs:300},Q={promotedTarget:{resolution:u.act,occlusion:`exclude-and-refuse`,offscreen:`refuse`,promotion:`hittable-ancestor`,poll:{maxTimeoutMs:2e3,intervalMs:200}},resolvedTarget:{resolution:u.act,occlusion:`exclude-and-refuse`,offscreen:`refuse`,promotion:`none`,poll:`none`},coveredDiagnosis:{resolution:u.actCoveredDiagnosis,occlusion:`refuse`,offscreen:`ignore`,promotion:`none`,poll:`none`},readText:{resolution:u.readText,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`},readUnique:{resolution:u.readUnique,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`},readAny:{resolution:u.readAny,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`},findWait:{resolution:u.readAny,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:Z},wait:{resolution:u.wait,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:Z},readList:{resolution:u.readList,occlusion:`ignore`},findAct:{resolution:u.findAct,occlusion:`refuse`,offscreen:`ignore`,promotion:`hittable-ancestor-below-root`,poll:`none`},cropTarget:{resolution:u.cropTarget,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`}};function $(e,t){if(e!==`none`&&!(t===void 0||!Number.isInteger(t))&&!(t<=0))return{intervalMs:e.intervalMs,budgetMs:Math.min(t,e.maxTimeoutMs),budgetFrom:`first-capture`}}export{ne as C,x as D,ie as E,S as O,te as S,ee as T,ge as _,Le as a,ce as b,we as c,H as d,R as f,M as g,N as h,ze as i,b as k,Oe as l,Se as m,$ as n,J as o,L as p,He as r,Ve as s,Q as t,W as u,ve as v,re as w,se as x,C as y};
@@ -1 +1 @@
1
- import{A as e,C as t,F as n,M as r,P as i,f as a,h as o,s,y as c}from"./sdk-contracts.js";import{r as l}from"./diagnostics.js";import"./diagnostics2.js";import{p as u,w as d}from"./sdk-device.js";import{Fn as f,Nn as p,Rt as m,dr as ee,fr as h,pr as g}from"./sdk-batch.js";import{d as te,n as _}from"./dispatch-resolve.js";import{c as v,i as y,s as b,u as ne}from"./target-evidence.js";import{n as re,p as ie}from"./provider-device-admission.js";import{_ as ae,g as oe,l as se,r as ce,s as le}from"./overlay.js";import{i as ue}from"./rect-center.js";import{a as x}from"./android-system-chrome.js";import{r as de}from"./request-cancel.js";import"./request.js";import{M as fe,O as S,_ as pe,f as me,i as he,j as ge,l as _e,m as C,o as w,p as T,r as E,s as D,v as O}from"./session-snapshot.js";import{s as k}from"./quality-warnings.js";import{t as A}from"./backend-snapshot-options.js";import{t as j}from"./snapshot-runtime-binding.js";function M(e){let t=r(e);return t?{ok:!0,ref:t.base,generation:t.generation}:{ok:!1,response:s(`INVALID_ARGS`,`Invalid ref "${e}" — malformed generation suffix.`,{hint:o})}}function N(e,t){if(t===`exists`)return{found:!0};if(t===`wait`)return{found:!0,waitedMs:e.waitedMs};if(t===`list`)return{action:`list`,matches:Array.isArray(e.matches)?e.matches.length:0};let n=typeof e.ref==`string`?e.ref:void 0;return t===`get_attrs`?{ref:n,action:`get attrs`}:{ref:n,action:`get text`,text:typeof e.text==`string`?e.text:``}}function P(e){return e.kind===`found`?{found:!0,...typeof e.waitedMs==`number`?{waitedMs:e.waitedMs}:{}}:e.kind===`list`?{matches:e.matches.map(e=>({ref:e.ref,node:x(e.node)}))}:{ref:e.ref,...e.kind===`text`?{text:e.text}:{},node:x(e.node)}}function F(e,t){let n=Array.isArray(e.selectorChain)?e.selectorChain:void 0,r=xe(e),i=r?.kind===`ref`?z(r.ref):void 0,a=r?.kind===`selector`?r.selector:void 0,o={...i?{ref:i}:{},...a?{selector:a}:{},...n?{selectorChain:n}:{}};if(t===`attrs`)return o;let s=typeof e.text==`string`?e.text:``;return{...o,text:s,refLabel:be(s)}}function I(e){let{target:t}=e;return{...t.kind===`ref`?{ref:z(t.ref)}:{},...t.kind===`selector`?{selector:t.selector}:{},...typeof e.text==`string`?{text:e.text}:{},node:x(e.node)}}function L(e){let{node:t,preActionNodes:n,...r}=e;return r}function ve(e){return{waitedMs:e.waitedMs,...typeof e.text==`string`?{text:e.text}:{},...typeof e.selector==`string`?{selector:e.selector}:{},...typeof e.captures==`number`?{captures:e.captures}:{},...typeof e.nodeCount==`number`?{nodeCount:e.nodeCount}:{},...typeof e.hint==`string`?{hint:e.hint}:{}}}function ye(e){let{selectorChain:t,...n}=e;return n}function R(e,t,n,r,i,a){if(!t)return;let o=e.resolveCurrent(t);if(!o)return;let s=ie(o)&&i?y(i,{mode:a}):void 0;e.recordAction(t,{command:n.command,positionals:n.positionals??[],flags:n.flags??{},result:r,interactiveObservation:te(n),...s?{targetEvidence:s,targetEvidenceMode:a??`action`}:{}})}function be(e){let t=e.trim();if(!(!t||t.length>80||/[\r\n]/.test(t)))return t}function xe(e){let t=e.target;if(!t||typeof t!=`object`)return;let n=t;if(n.kind===`ref`&&typeof n.ref==`string`)return{kind:`ref`,ref:n.ref};if(n.kind===`selector`&&typeof n.selector==`string`)return{kind:`selector`,selector:n.selector}}function z(e){return e.startsWith(`@`)?e.slice(1):e}async function B(e){let t=await j({...e,plan:m({hasActiveApp:e.session?.appBundleId!==void 0,intent:Se(e.command)}),readiness:!e.session});return t.ok?{ok:!0,operations:{capture:t.capture,...t.readTextAtPoint?{readText:t.readTextAtPoint}:{},...t.findText?{findText:t.findText}:{}}}:t}function Se(e){switch(e){case`is`:return`capture-only`;case`find`:case`get`:return`element-text`;case`wait`:return`wait-observation`}}const Ce=[[`snapshotDepth`,`--depth`],[`snapshotScope`,`--scope`],[`snapshotRaw`,`--raw`]];function V(e,t){let n=Ce.filter(([e])=>t?.[e]!==void 0).map(([,e])=>e);return n.length===0?null:s(`INVALID_ARGS`,`${e} @ref does not support ${n.join(`, `)}.`)}async function H(e,t){if(e.device.platform!==`android`||!e.appBundleId||e.lease?.leaseProvider||re(e.device))return null;if(!t)throw new i(`INTERNAL_ERROR`,`Android observation was not supplied by root runtime composition`);let n=await t.readAppState(e.device),r=n.package?.trim();if(!r||r===e.appBundleId)return null;let a=await t.isPermissionPackage(r);return!Ee(r)&&!a?null:{expectedPackage:e.appBundleId,foregroundPackage:r,activity:n.activity,hint:Te(a),...a?{permissionDialog:!0}:{}}}function we(e){return e.permissionDialog?`Android permission dialog is blocking ${e.expectedPackage}`:`${e.foregroundPackage} is foreground instead of ${e.expectedPackage}`}function Te(e){return e?`Use "alert get" to inspect it, then "alert accept" or "alert dismiss" to respond.`:`Use screenshot as visual truth, then take a fresh snapshot -i before retrying.`}function Ee(e){return e===`com.android.settings`||e===`com.android.systemui`||e.includes(`launcher`)}async function De(e){let{device:t,node:n,flags:r,appBundleId:i,traceOutPath:a,surface:o,contextFromFlags:s}=e,c=oe(n),d=e.readTextAtPoint;if(!d)return c;let f=ue(n.rect);if(!f||u(t)&&c&&!ae(n.type??``))return c;let p=s(r,i,a),m=await d({point:f,options:{appBundleId:i,surface:o},execution:C(p)});return m.status===`read`?m.text:(l({level:`warn`,phase:`interaction_read_fallback`,data:{reason:Oe(m.reason),nodeRef:n.ref,surface:o,platform:t.platform}}),c)}function Oe(e){switch(e){case`no-text-at-point`:return`no_text_at_point`;default:return e}}function U(e){let{sessionStore:t,ref:n}=e,r=0,i,a,o=t=>(e.consumedSnapshot&&(e.consumedSnapshot.state=t.snapshot),t);return{capture:async s=>{let c=n?t.requireCurrent(n):void 0,l=Date.now(),u=Ie(s,e.req.flags?.out),d=Me({timestamp:l,lastSnapshotAt:r,lastSnapshotResult:i,lastSnapshotCacheKey:a,session:c,request:s,cacheKey:u});if(d)return o(d);let f=Ne({session:c,timestamp:l,request:s});if(f)return r=f.createdAt,i={snapshot:f},a=u,o(i);let p=await ke({params:e,request:s});s.signal?.throwIfAborted();let m={snapshot:p};return Re({ref:n,sessionStore:t,snapshot:p}),r=l,i=m,a=u,o(m)}}}async function ke(e){let{params:n,request:r}=e,i=await W(n,r,r.snapshotScope);return r.recovery?.legacyIosSparse&&se(i)?t(i,await Ae({runtimeParams:n,request:r,policy:r.recovery.legacyIosSparse})):r.recovery?.sparseVerdictQueryScope?.shouldScope&&k(i.snapshotQuality)?t(i,await je({runtimeParams:n,request:r,policy:r.recovery.sparseVerdictQueryScope,snapshot:i})):i}async function Ae(e){let{runtimeParams:t,request:n,policy:r}=e;try{return await W(t,n,void 0,!1)}catch(e){if(!r.shouldScope)throw e;return await W(t,n,r.query,!1)}}async function je(e){let{runtimeParams:t,request:n,policy:r,snapshot:i}=e;try{return await W(t,n,r.query,!1)}catch{return i}}async function W(e,t,n,r=t.flags?.snapshotInteractiveOnly){let i=e.ref?e.sessionStore.requireCurrent(e.ref):void 0,a={...t.flags,snapshotInteractiveOnly:r},o=e.capture,s=await _e({device:e.device,session:i,flags:a,outPath:t.outPath??e.req.flags?.out,logPath:e.logPath??``,snapshotScope:n,includeRects:t.includeRects,signal:t.signal,captureData:async()=>await o(T({flags:a,logPath:e.logPath??``,meta:e.req.meta,session:i,snapshotScope:n,includeRects:t.includeRects,signal:t.signal}))});return b(e.captureProof,s.snapshot)}function Me(e){let{timestamp:t,lastSnapshotAt:n,lastSnapshotResult:r,lastSnapshotCacheKey:i,session:a,request:o,cacheKey:s}=e;if(o.cache?.forceFresh!==!0&&r&&i===s&&!(t-n>=750)&&!S(a)&&!G(a,o))return r}function Ne(e){let{session:t,timestamp:n,request:r}=e,i=t?.snapshot;if(!(!i||ge(i))&&Pe(t,r)&&Fe(i,n)&&i.presentationKey===K(r))return i}function Pe(e,t){return t.cache?.forceFresh===!0||t.cache?.useSessionSnapshot!==!0||S(e)||G(e,t)?!1:e.snapshot?.postGestureOutcome?.kind!==`unsettled`}function Fe(e,t){return t-e.createdAt<750}function G(e,t){return t.cache?.bypassForPostGestureStabilization===!0&&O(e)}function K(t){return c(e(Le(t)))}function Ie(e,t){return JSON.stringify({presentationKey:K(e),includeRects:e.includeRects===!0,outPath:e.outPath??t??null})}function Le(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function Re(e){let{ref:t,sessionStore:n,snapshot:r}=e;!t||k(r.snapshotQuality)||w(n.requireCurrent(t),r)}function q(e){return me({backend:Be(e),...ne(`selector commands`,{plural:!0}),sessions:D({sessionName:e.sessionName,sessionStore:e.sessionStore,ref:e.ref,recordOptions:{includeSnapshot:!0},setRecord:(e,t)=>{!t||!e.snapshot||w(t,e.snapshot)}}),signal:e.signal??de(e.req.meta?.requestId)})}async function ze(e,t){e.consumedSnapshot??={},e.captureProof??={};let n=e.sessionStore.lookup(e.sessionName),r=n?.session;return!r&&t?{ok:!1,response:a()}:{ok:!0,ref:n,session:r,device:r?.device??await _(e.req.flags??{})}}async function J(e,t){let n=await ze(e,t.requireSession);if(!n.ok)return n;let r=await B({command:t.command,device:n.device,session:n.session,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return r.ok?{ok:!0,ref:n.ref,runtime:q({...e,ref:n.ref,session:n.session,device:n.device,bound:r.operations})}:{ok:!1,response:r.response}}function Be(e){let{req:t,session:n,device:r,logPath:i,sessionName:a,sessionStore:o}=e,s=e.contextFromFlags??((e,t,n)=>pe(i??``,e,t,n)),c=e.bound?.readText,l=e.bound?.findText,u=T({flags:t.flags,logPath:i??``,meta:t.meta,session:n,snapshotScope:void 0}).execution,f=e.bound,p=f===void 0?void 0:U({ref:e.ref,device:r,sessionStore:o,sessionName:a,req:t,consumedSnapshot:e.consumedSnapshot,captureProof:e.captureProof,logPath:i,capture:f.capture});return{platform:d(r),captureSnapshot:p&&(async(e,n)=>{let i={...t.flags,...A(n)},a=n?.includeRects===!0,o=n?.scope??t.flags?.snapshotScope,s=t.command===`wait`||t.command===`find`||Ve(t)||a&&r.platform===`web`;return await p.capture({flags:i,signal:e.signal,snapshotScope:o,includeRects:a,cache:{forceFresh:s,useSessionSnapshot:!0,bypassForPostGestureStabilization:!0}})}),readText:async(e,i)=>({text:await De({readTextAtPoint:c,device:r,node:i,flags:t.flags,appBundleId:n?.appBundleId,traceOutPath:n?.trace?.outPath,surface:n?.surface,contextFromFlags:s})}),...l?{findText:async(e,t)=>{let{found:r}=await l({text:t,options:{appBundleId:n?.appBundleId,surface:n?.surface},execution:u,...e.signal?{signal:e.signal}:{}});return n&&fe(n),{found:r}}}:{}}}function Ve(e){if(e.command!==`is`)return!1;let t=g(e.positionals??[]);return t.ok&&t.predicate===`absent`}async function Y(e){let{req:t}=e;if(t.command!==`find`)return null;let n=t.positionals??[],r=p(n,t.flags);if(!r.ok)return s(r.code,r.message);let i=r.parsed,a=i.action;if(!f(a))return null;let o=await J(e,{requireSession:!1,command:`find`});if(!o.ok)return o.response;let c=await Q(async()=>{let n=await o.runtime.selectors.find({session:e.sessionName,requestId:t.meta?.requestId,locator:i.locator,query:i.query,action:a,timeoutMs:i.timeoutMs});R(e.sessionStore,o.ref,t,N(n,a));let r=P(n),s=typeof r.ref==`string`?[r.ref]:Array.isArray(r.matches)?r.matches.map(e=>e.ref).filter(e=>typeof e==`string`):[];if(s.length>0){let t=o.ref;if(t){let n=e.sessionStore.requireCurrent(t);if(E(n,s),n.snapshotGeneration!==void 0)return{...r,refsGeneration:n.snapshotGeneration}}}return r});return v({response:c,consumedTree:X(e),captureProof:e.captureProof})}function X(e){return e.consumedSnapshot?.state??e.sessionStore.get(e.sessionName)?.snapshot}async function He(e){let{req:t}=e;if(t.command!==`get`)return null;let n=h(t.positionals?.[0]);if(!n.ok)return s(n.code,n.message);let r=n.format,i=We(t);if(!i.ok)return i.response;if(i.target.kind===`ref`){let e=V(`get`,t.flags);if(e)return e}let a=t.internal?.replayTargetGuard,o=await J(e,{requireSession:!0,command:`get`});if(!o.ok)return o.response;let c=o.runtime,l=i.target.kind===`ref`?he({session:e.sessionStore.get(e.sessionName),ref:i.target.ref,mintedGeneration:i.refGeneration}):void 0,u=await Q(async()=>{let n=await c.selectors.get({session:e.sessionName,requestId:t.meta?.requestId,property:r,target:i.target,expectedResolvedTarget:a});R(e.sessionStore,o.ref,t,F(n,r),{node:n.node,preActionNodes:n.preActionNodes});let s=I(n);return l?{...s,warning:l}:s});return v({response:u,consumedTree:X(e),captureProof:e.captureProof})}async function Ue(e){let{req:t}=e;if(t.command!==`is`)return null;let n=g(t.positionals??[]);if(!n.ok)return s(n.code,n.message,n.hint?{hint:n.hint}:void 0);let{predicate:r,selectorExpression:i,expectedText:a}=n;if(r===`absent`){let e=le({depth:t.flags?.snapshotDepth,scope:t.flags?.snapshotScope});if(e){let t=ce(e);return s(t.code,t.message,t.details)}}let o=t.internal?.replayTargetGuard,c=await J(e,{requireSession:!0,command:`is`});if(!c.ok)return c.response;let l=await Q(async()=>{let n=await c.runtime.selectors.is({session:e.sessionName,requestId:t.meta?.requestId,predicate:r,selector:i,expectedText:a,expectedResolvedTarget:o}),s=Z(n),l=L(n);return R(e.sessionStore,c.ref,t,l,s),ye(l)});return v({response:await $(e,l,`is ${r}`),consumedTree:X(e),captureProof:e.captureProof})}function Z(e){let t=e.node,n=e.preActionNodes;if(!(!t||typeof t!=`object`||!Array.isArray(n)))return{node:t,preActionNodes:n}}function We(e){let t=e.positionals?.[1]??``;if(t.startsWith(`@`)){let n=M(t);return n.ok?{ok:!0,target:{kind:`ref`,ref:n.ref,fallbackLabel:e.positionals.length>2?e.positionals.slice(2).join(` `).trim():``},refGeneration:n.generation}:{ok:!1,response:n.response}}let n=ee(e.positionals?.slice(1)??[]);return n.ok?{ok:!0,target:{kind:`selector`,selector:`selector`in n?n.selector:``}}:{ok:!1,response:s(n.code,n.message)}}async function Q(e){try{return{ok:!0,data:await e()}}catch(e){let t=n(e);return s(t.code,t.message,t.details)}}async function $(e,t,n){if(t.ok)return t;let r=e.sessionStore.get(e.sessionName);if(!r)return t;let i;try{if(!e.androidObservation)return t;i=await H(r,e.androidObservation)}catch{return t}return i?s(t.error.code,`${n} failed because ${we(i)}.`,{...t.error.details??{},...i,blockedBy:`android_foreground_surface`,originalMessage:t.error.message}):t}export{$ as a,q as c,V as d,B as f,M as g,ve as h,Ue as i,U as l,L as m,Y as n,Z as o,R as p,He as r,Q as s,X as t,H as u};
1
+ import{A as e,C as t,I as n,M as r,P as i,f as a,h as o,s,y as c}from"./sdk-contracts.js";import{c as l,u,v as d,y as f}from"./back-mode.js";import{r as p}from"./diagnostics.js";import"./diagnostics2.js";import{E as m,h as ee}from"./sdk-device.js";import{Mn as h,Pn as te,Rt as ne,dr as re,fr as g,ur as ie}from"./sdk-batch.js";import{i as _}from"./target-evidence.js";import{t as v}from"./absence-observation-errors.js";import{i as ae}from"./rect-center.js";import{a as y}from"./android-system-chrome.js";import{d as oe}from"./replay-script-selection.js";import{r as se}from"./request-cancel.js";import"./request.js";import{n as ce}from"./provider-device-admission.js";import{Dt as le,H as ue,Ut as de,W as fe,X as b,a as pe,i as x,nt as me,rt as he}from"./internal/daemon.js";import{t as S}from"./snapshot-quality-verdict.js";import{c as ge,f as C,l as _e,r as w,t as T,u as E}from"./runtime-session.js";import{t as D}from"./backend-snapshot-options.js";import{i as O,n as k,t as A}from"./capture-disclosure.js";import{t as j}from"./snapshot-runtime-binding.js";function M(e){let t=r(e);return t?{ok:!0,ref:t.base,generation:t.generation}:{ok:!1,response:s(`INVALID_ARGS`,`Invalid ref "${e}" — malformed generation suffix.`,{hint:o})}}function N(e,t){if(t===`exists`)return{found:!0};if(t===`wait`)return{found:!0,waitedMs:e.waitedMs};if(t===`list`)return{action:`list`,matches:Array.isArray(e.matches)?e.matches.length:0};let n=typeof e.ref==`string`?e.ref:void 0;return t===`get_attrs`?{ref:n,action:`get attrs`}:{ref:n,action:`get text`,text:typeof e.text==`string`?e.text:``}}function P(e){return e.kind===`found`?{found:!0,...typeof e.waitedMs==`number`?{waitedMs:e.waitedMs}:{}}:e.kind===`list`?{matches:e.matches.map(e=>({ref:e.ref,node:y(e.node)}))}:{ref:e.ref,...e.kind===`text`?{text:e.text}:{},node:y(e.node)}}function F(e,t){let n=Array.isArray(e.selectorChain)?e.selectorChain:void 0,r=xe(e),i=r?.kind===`ref`?z(r.ref):void 0,a=r?.kind===`selector`?r.selector:void 0,o={...i?{ref:i}:{},...a?{selector:a}:{},...n?{selectorChain:n}:{}};if(t===`attrs`)return o;let s=typeof e.text==`string`?e.text:``;return{...o,text:s,refLabel:be(s)}}function I(e){let{target:t}=e;return{...t.kind===`ref`?{ref:z(t.ref)}:{},...t.kind===`selector`?{selector:t.selector}:{},...typeof e.text==`string`?{text:e.text}:{},node:y(e.node)}}function L(e){let{node:t,preActionNodes:n,...r}=e;return r}function ve(e){return{waitedMs:e.waitedMs,...typeof e.text==`string`?{text:e.text}:{},...typeof e.selector==`string`?{selector:e.selector}:{},...typeof e.captures==`number`?{captures:e.captures}:{},...typeof e.nodeCount==`number`?{nodeCount:e.nodeCount}:{},...typeof e.hint==`string`?{hint:e.hint}:{}}}function ye(e){let{selectorChain:t,...n}=e;return n}function R(e,t,n,r,i,a){if(!t)return;let o=e.resolveCurrent(t);if(!o)return;let s=de(o)&&i?_(i,{mode:a}):void 0;e.recordAction(t,{command:n.command,positionals:n.positionals??[],flags:n.flags??{},result:r,interactiveObservation:le(n),...s?{targetEvidence:s,targetEvidenceMode:a??`action`}:{}})}function be(e){let t=e.trim();if(!(!t||t.length>80||/[\r\n]/.test(t)))return t}function xe(e){let t=e.target;if(!t||typeof t!=`object`)return;let n=t;if(n.kind===`ref`&&typeof n.ref==`string`)return{kind:`ref`,ref:n.ref};if(n.kind===`selector`&&typeof n.selector==`string`)return{kind:`selector`,selector:n.selector}}function z(e){return e.startsWith(`@`)?e.slice(1):e}async function B(e){let t=await j({...e,plan:ne({hasActiveApp:e.session?.appBundleId!==void 0,intent:Se(e.command)}),readiness:!e.session});return t.ok?{ok:!0,operations:{capture:t.capture,...t.readTextAtPoint?{readText:t.readTextAtPoint}:{},...t.findText?{findText:t.findText}:{}}}:t}function Se(e){switch(e){case`is`:return`capture-only`;case`find`:case`get`:return`element-text`;case`wait`:return`wait-observation`}}const Ce=[[`snapshotDepth`,`--depth`],[`snapshotScope`,`--scope`],[`snapshotRaw`,`--raw`]];function V(e,t){let n=Ce.filter(([e])=>t?.[e]!==void 0).map(([,e])=>e);return n.length===0?null:s(`INVALID_ARGS`,`${e} @ref does not support ${n.join(`, `)}.`)}async function H(e,t){if(e.device.platform!==`android`||!e.appBundleId||e.lease?.leaseProvider||ce(e.device))return null;if(!t)throw new i(`INTERNAL_ERROR`,`Android observation was not supplied by root runtime composition`);let n=await t.readAppState(e.device),r=n.package?.trim();if(!r||r===e.appBundleId)return null;let a=await t.isPermissionPackage(r);return!Ee(r)&&!a?null:{expectedPackage:e.appBundleId,foregroundPackage:r,activity:n.activity,hint:Te(a),...a?{permissionDialog:!0}:{}}}function we(e){return e.permissionDialog?`Android permission dialog is blocking ${e.expectedPackage}`:`${e.foregroundPackage} is foreground instead of ${e.expectedPackage}`}function Te(e){return e?`Use "alert get" to inspect it, then "alert accept" or "alert dismiss" to respond.`:`Use screenshot as visual truth, then take a fresh snapshot -i before retrying.`}function Ee(e){return e===`com.android.settings`||e===`com.android.systemui`||e.includes(`launcher`)}async function De(e){let{device:t,node:n,flags:r,appBundleId:i,traceOutPath:a,surface:o,contextFromFlags:s}=e,c=d(n),l=e.readTextAtPoint;if(!l)return c;let u=ae(n.rect);if(!u||ee(t)&&c&&!f(n.type??``))return c;let m=s(r,i,a),h=await l({point:u,options:{appBundleId:i,surface:o},execution:pe(m)});return h.status===`read`?h.text:(p({level:`warn`,phase:`interaction_read_fallback`,data:{reason:Oe(h.reason),nodeRef:n.ref,surface:o,platform:t.platform}}),c)}function Oe(e){switch(e){case`no-text-at-point`:return`no_text_at_point`;default:return e}}function U(e){let{sessionStore:t,ref:n}=e,r=0,i,a,o=t=>(e.consumedSnapshot&&(e.consumedSnapshot.state=t.snapshot),t);return{capture:async s=>{let c=n?t.requireCurrent(n):void 0,l=Date.now(),u=Ie(s,e.req.flags?.out),d=Me({timestamp:l,lastSnapshotAt:r,lastSnapshotResult:i,lastSnapshotCacheKey:a,session:c,request:s,cacheKey:u});if(d)return o(d);let f=Ne({session:c,timestamp:l,request:s});if(f)return r=f.createdAt,i={snapshot:f},a=u,o(i);let p=await ke({params:e,request:s});s.signal?.throwIfAborted();let m={snapshot:p};return Re({ref:n,sessionStore:t,snapshot:p}),r=l,i=m,a=u,o(m)}}}async function ke(e){let{params:n,request:r}=e,i=await W(n,r,r.snapshotScope);return r.recovery?.legacyIosSparse&&u(i)?t(i,await Ae({runtimeParams:n,request:r,policy:r.recovery.legacyIosSparse})):r.recovery?.sparseVerdictQueryScope?.shouldScope&&S(i.snapshotQuality)?t(i,await je({runtimeParams:n,request:r,policy:r.recovery.sparseVerdictQueryScope,snapshot:i})):i}async function Ae(e){let{runtimeParams:t,request:n,policy:r}=e;try{return await W(t,n,void 0,!1)}catch(e){if(!r.shouldScope)throw e;return await W(t,n,r.query,!1)}}async function je(e){let{runtimeParams:t,request:n,policy:r,snapshot:i}=e;try{return await W(t,n,r.query,!1)}catch{return i}}async function W(e,t,n,r=t.flags?.snapshotInteractiveOnly){let i=e.ref?e.sessionStore.requireCurrent(e.ref):void 0,a={...t.flags,snapshotInteractiveOnly:r},o=e.capture,s=await w({device:e.device,session:i,flags:a,logPath:e.logPath??``,snapshotScope:n,includeRects:t.includeRects,signal:t.signal,captureData:async()=>await o(x({flags:a,logPath:e.logPath??``,meta:e.req.meta,session:i,snapshotScope:n,includeRects:t.includeRects,signal:t.signal}))});return A(e.captureProof,s.snapshot)}function Me(e){let{timestamp:t,lastSnapshotAt:n,lastSnapshotResult:r,lastSnapshotCacheKey:i,session:a,request:o,cacheKey:s}=e;if(o.cache?.forceFresh!==!0&&r&&i===s&&!(t-n>=750)&&!b(a)&&!G(a,o))return r}function Ne(e){let{session:t,timestamp:n,request:r}=e,i=t?.snapshot;if(!(!i||me(i))&&Pe(t,r)&&Fe(i,n)&&i.presentationKey===K(r))return i}function Pe(e,t){return t.cache?.forceFresh===!0||t.cache?.useSessionSnapshot!==!0||b(e)||G(e,t)?!1:e.snapshot?.postGestureOutcome?.kind!==`unsettled`}function Fe(e,t){return t-e.createdAt<750}function G(e,t){return t.cache?.bypassForPostGestureStabilization===!0&&fe(e)}function K(t){return c(e(Le(t)))}function Ie(e,t){return JSON.stringify({presentationKey:K(e),includeRects:e.includeRects===!0,outPath:e.outPath??t??null})}function Le(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function Re(e){let{ref:t,sessionStore:n,snapshot:r}=e;!t||S(r.snapshotQuality)||C(n.requireCurrent(t),r)}async function q(e){return await e.createCommandSurface({backend:Be(e),...O(`selector commands`,{plural:!0}),sessions:T({sessionName:e.sessionName,sessionStore:e.sessionStore,ref:e.ref,recordOptions:{includeSnapshot:!0},setRecord:(e,t)=>{!t||!e.snapshot||C(t,e.snapshot)}}),signal:e.signal??se(e.req.meta?.requestId)})}async function ze(e,t){e.consumedSnapshot??={},e.captureProof??={};let n=e.sessionStore.lookup(e.sessionName),r=n?.session;return!r&&t?{ok:!1,response:a()}:{ok:!0,ref:n,session:r,device:r?.device??await oe(e.req.flags??{})}}async function J(e,t){let n=await ze(e,t.requireSession);if(!n.ok)return n;let r=await B({command:t.command,device:n.device,session:n.session,inspectFacts:e.inspectFacts,platformServices:e.platformServices,bindDevice:e.bindDevice});return r.ok?{ok:!0,ref:n.ref,runtime:await q({...e,ref:n.ref,session:n.session,device:n.device,bound:r.operations})}:{ok:!1,response:r.response}}function Be(e){let{req:t,session:n,device:r,logPath:i,sessionName:a,sessionStore:o}=e,s=e.contextFromFlags??((e,t,n)=>ue(i??``,e,t,n)),c=e.bound?.readText,l=e.bound?.findText,u=x({flags:t.flags,logPath:i??``,meta:t.meta,session:n,snapshotScope:void 0}).execution,d=e.bound,f=d===void 0?void 0:U({ref:e.ref,device:r,sessionStore:o,sessionName:a,req:t,consumedSnapshot:e.consumedSnapshot,captureProof:e.captureProof,logPath:i,capture:d.capture});return{platform:m(r),captureSnapshot:f&&(async(e,n)=>{let i={...t.flags,...D(n)},a=n?.includeRects===!0,o=n?.scope??t.flags?.snapshotScope,s=t.command===`wait`||t.command===`find`||Ve(t)||a&&r.platform===`web`;return await f.capture({flags:i,signal:e.signal,snapshotScope:o,includeRects:a,cache:{forceFresh:s,useSessionSnapshot:!0,bypassForPostGestureStabilization:!0}})}),readText:async(e,i)=>({text:await De({readTextAtPoint:c,device:r,node:i,flags:t.flags,appBundleId:n?.appBundleId,traceOutPath:n?.trace?.outPath,surface:n?.surface,contextFromFlags:s})}),...l?{findText:async(e,t)=>{let{found:r}=await l({text:t,options:{appBundleId:n?.appBundleId,surface:n?.surface},execution:u,...e.signal?{signal:e.signal}:{}});return n&&he(n),{found:r}}}:{}}}function Ve(e){if(e.command!==`is`)return!1;let t=g(e.positionals??[]);return t.ok&&t.predicate===`absent`}async function Y(e){let{req:t}=e;if(t.command!==`find`)return null;let n=t.positionals??[],r=h(n,t.flags);if(!r.ok)return s(r.code,r.message);let i=r.parsed,a=i.action;if(!te(a))return null;let o=await J(e,{requireSession:!1,command:`find`});if(!o.ok)return o.response;let c=await Q(async()=>{let n=await o.runtime.selectors.find({session:e.sessionName,requestId:t.meta?.requestId,locator:i.locator,query:i.query,action:a,timeoutMs:i.timeoutMs});R(e.sessionStore,o.ref,t,N(n,a));let r=P(n),s=typeof r.ref==`string`?[r.ref]:Array.isArray(r.matches)?r.matches.map(e=>e.ref).filter(e=>typeof e==`string`):[];if(s.length>0){let t=o.ref;if(t){let n=e.sessionStore.requireCurrent(t);if(ge(n,s),n.snapshotGeneration!==void 0)return{...r,refsGeneration:n.snapshotGeneration}}}return r});return k({response:c,consumedTree:X(e),captureProof:e.captureProof})}function X(e){return e.consumedSnapshot?.state??e.sessionStore.get(e.sessionName)?.snapshot}async function He(e){let{req:t}=e;if(t.command!==`get`)return null;let n=re(t.positionals?.[0]);if(!n.ok)return s(n.code,n.message);let r=n.format,i=We(t);if(!i.ok)return i.response;if(i.target.kind===`ref`){let e=V(`get`,t.flags);if(e)return e}let a=t.internal?.replayTargetGuard,o=await J(e,{requireSession:!0,command:`get`});if(!o.ok)return o.response;let c=o.runtime,l=i.target.kind===`ref`?E({session:e.sessionStore.get(e.sessionName),ref:i.target.ref,mintedGeneration:i.refGeneration}):void 0,u=await Q(async()=>{let n=await c.selectors.get({session:e.sessionName,requestId:t.meta?.requestId,property:r,target:i.target,expectedResolvedTarget:a});R(e.sessionStore,o.ref,t,F(n,r),{node:n.node,preActionNodes:n.preActionNodes});let s=I(n);return l?{...s,warning:l}:s},{ref:o.ref,sessionStore:e.sessionStore,consumed:e.consumedSnapshot});return k({response:u,consumedTree:X(e),captureProof:e.captureProof})}async function Ue(e){let{req:t}=e;if(t.command!==`is`)return null;let n=g(t.positionals??[]);if(!n.ok)return s(n.code,n.message,n.hint?{hint:n.hint}:void 0);let{predicate:r,selectorExpression:i,expectedText:a}=n;if(r===`absent`){let e=l({depth:t.flags?.snapshotDepth,scope:t.flags?.snapshotScope});if(e){let t=v(e);return s(t.code,t.message,t.details)}}let o=t.internal?.replayTargetGuard,c=await J(e,{requireSession:!0,command:`is`});if(!c.ok)return c.response;let u=await Q(async()=>{let n=await c.runtime.selectors.is({session:e.sessionName,requestId:t.meta?.requestId,predicate:r,selector:i,expectedText:a,expectedResolvedTarget:o}),s=Z(n),l=L(n);return R(e.sessionStore,c.ref,t,l,s),ye(l)},{ref:c.ref,sessionStore:e.sessionStore,consumed:e.consumedSnapshot});return k({response:await $(e,u,`is ${r}`),consumedTree:X(e),captureProof:e.captureProof})}function Z(e){let t=e.node,n=e.preActionNodes;if(!(!t||typeof t!=`object`||!Array.isArray(n)))return{node:t,preActionNodes:n}}function We(e){let t=e.positionals?.[1]??``;if(t.startsWith(`@`)){let n=M(t);return n.ok?{ok:!0,target:{kind:`ref`,ref:n.ref,fallbackLabel:e.positionals.length>2?e.positionals.slice(2).join(` `).trim():``},refGeneration:n.generation}:{ok:!1,response:n.response}}let n=ie(e.positionals?.slice(1)??[]);return n.ok?{ok:!0,target:{kind:`selector`,selector:`selector`in n?n.selector:``}}:{ok:!1,response:s(n.code,n.message)}}async function Q(e,t){try{return{ok:!0,data:await e()}}catch(e){let r=t?_e(t.ref,t.sessionStore,n(e),t.consumed?.state):n(e);return s(r.code,r.message,r.details)}}async function $(e,t,n){if(t.ok)return t;let r=e.sessionStore.get(e.sessionName);if(!r)return t;let i;try{if(!e.androidObservation)return t;i=await H(r,e.androidObservation)}catch{return t}return i?s(t.error.code,`${n} failed because ${we(i)}.`,{...t.error.details??{},...i,blockedBy:`android_foreground_surface`,originalMessage:t.error.message}):t}export{$ as a,q as c,V as d,B as f,M as g,ve as h,Ue as i,U as l,L as m,Y as n,Z as o,R as p,He as r,Q as s,X as t,H as u};
@@ -1 +1 @@
1
- import{Dn as e,En as t,Er as n,Sr as r,Tr as i,wn as a,wr as o,xr as s}from"./sdk-batch.js";import{t as c}from"./sdk-selectors.js";export{a as findSelectorChainMatch,c as formatSelectorFailure,i as isNodeEditable,n as isNodeVisible,s as isSelectorToken,t as listSelectorChainMatches,r as parseSelectorChain,e as resolveSelectorChain,o as tryParseSelectorChain};
1
+ import{Cn as e,Cr as t,En as n,Tn as r,Tr as i,br as a,wr as o,xr as s}from"./sdk-batch.js";import{t as c}from"./sdk-selectors.js";export{e as findSelectorChainMatch,c as formatSelectorFailure,o as isNodeEditable,i as isNodeVisible,a as isSelectorToken,r as listSelectorChainMatches,s as parseSelectorChain,n as resolveSelectorChain,t as tryParseSelectorChain};
@@ -1,4 +1,4 @@
1
- import{P as e,u as t}from"./sdk-contracts.js";import{v as n}from"./sdk-batch.js";import{i as r}from"./catalog.js";import{a as i}from"./version.js";import{a,i as ee,r as o,t as te}from"./command-tools.js";import{i as s,r as c,t as l}from"./cli-help.js";const u=`agent-device drives iOS, Android, tvOS, Android TV, macOS, Linux, and web apps. Tools mirror CLI commands of the same name; CLI flags are camelCase properties (--settle -> settle: true).
1
+ import{P as e,u as t}from"./sdk-contracts.js";import{v as n}from"./sdk-batch-runner.js";import{O as r}from"./back-mode.js";import{v as i}from"./sdk-batch.js";import{a}from"./version.js";import{a as o,i as s,r as c,t as ee}from"./command-tools.js";import{i as l,r as u,t as d}from"./cli-help.js";const f=`agent-device drives iOS, Android, tvOS, Android TV, macOS, Linux, and web apps. Tools mirror CLI commands of the same name; CLI flags are camelCase properties (--settle -> settle: true).
2
2
 
3
3
  Start: known app -> call open {app, foreground: true} at once; do not probe with devices, apps, appstate, snapshot, or screenshot first. open returns the initial interactive snapshot with @refs. Unknown app id: devices, then apps, then open the discovered id; never invent ids. Existing session: continue from its state, do not reopen.
4
4
 
@@ -6,5 +6,5 @@ Loop: press/click/fill/longpress/hover/scroll/back with settle: true; the respon
6
6
 
7
7
  Targets: copy refs byte-for-byte (@e12, @e12~s4; keep @ and any ~sN). Refs go stale after mutations. Prefer refs, then id/label/role selectors; coordinates last. On a sparse/AX-unavailable warning its refs and selectors are invalid: screenshot, read the image, press {x, y}, then snapshot the changed screen.
8
8
 
9
- Errors carry hints; follow them instead of re-planning. Call help only for specialized work (gestures, scripting, TV, macOS, web, remote, debugging) or an unclear command shape, never at startup.`;function d(){let e=new Set(n());return r().filter(t=>!e.has(t))}const f={name:`help`,description:`Usage guides. No topic: the full workflow card. topic = one of ${c().join(`, `)} for that guide, or a tool name for its complete flag reference. For specialized work or an unclear command shape only; not a startup step, not needed after an error that carries a hint.`,inputSchema:{type:`object`,properties:{topic:{type:`string`,description:`Guide topic or tool name; omit for the card.`}},additionalProperties:!1}},p=`CLI syntax over MCP: \`agent-device <command> <positionals> --flag\` = tool <command>; positionals are named properties (target, text, direction), flags camelCase (--settle -> settle: true, -i -> interactiveOnly: true). Terminal-only (no MCP tool; run in a shell): ${d().join(`, `)}.\n\n`;function ne(e){let t=e.topic;if(t!==void 0&&typeof t!=`string`)return m(`Expected topic to be a string.`,!0);let n=t?s(t):l();return n===null?m(`Unknown help topic: ${t}. ${f.description}`,!0):m(p+n)}function m(e,t=!1){return{isError:t,content:[{type:`text`,text:e}]}}const h=`2026-07-28`,g=[h],_=[`2025-11-25`,`2025-06-18`],v=[...g,..._],y=`server/discover`,b=new Set([`initialize`,`ping`]),x=`io.modelcontextprotocol/protocolVersion`,S=`io.modelcontextprotocol/clientCapabilities`,C=`io.modelcontextprotocol/clientInfo`,w=36e5;var T=class extends Error{requested;constructor(e){super(`Unsupported MCP protocol version: ${e}. Supported: ${v.join(`, `)}.`),this.requested=e}get data(){return{supported:v,requested:this.requested}}};function E(t,n){let r=I(I(n)._meta),i=L(r,x);if(i===void 0){if(t===y)throw new e(`INVALID_ARGS`,`Expected _meta["${x}"] on ${y}.`);return`legacy`}if(!v.includes(i))throw new T(i);if(!A(r[S]))throw new e(`INVALID_ARGS`,`Expected _meta["${S}"] to be an object.`);let a=r[C];if(a!==void 0&&!j(a))throw new e(`INVALID_ARGS`,`Expected _meta["${C}"] to be a valid Implementation.`);if(!g.includes(i)){if(t===y)throw new T(i);return`legacy`}return`modern`}function D(e){let t=L(I(e),`protocolVersion`);return t!==void 0&&_.includes(t)?t:`2025-11-25`}function O(e,t){return t===`modern`&&b.has(e)}function k(){return{name:`agent-device`,version:i()}}function re(e,t){return t===`legacy`||typeof e!=`object`||!e?e:{resultType:`complete`,...e,_meta:{...e._meta,"io.modelcontextprotocol/serverInfo":k()}}}function ie(e,t){return e===`modern`?{ttlMs:t,cacheScope:`public`}:void 0}function A(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function j(e){return!A(e)||!P(e.name)||!P(e.version)?!1:N(e.title,P)&&N(e.description,P)&&N(e.websiteUrl,P)&&N(e.icons,e=>Array.isArray(e)&&e.every(M))}function M(e){return!A(e)||!P(e.src)?!1:N(e.mimeType,P)&&N(e.sizes,F)&&N(e.theme,e=>e===`light`||e===`dark`)}function N(e,t){return e===void 0||t(e)}function P(e){return typeof e==`string`}function F(e){return Array.isArray(e)&&e.every(P)}function I(e){return A(e)?e:{}}function L(e,t){let n=e[t];return typeof n==`string`&&n.length>0?n:void 0}async function R(e){if(e.jsonrpc!==`2.0`||typeof e.method!=`string`)return U(e.id??null,-32600,`Invalid JSON-RPC request.`);if(e.id===void 0)return null;try{let t=E(e.method,e.params),n=await z(e.method,e.params,t);return H(e.id,re(n,t))}catch(t){return t instanceof T?U(e.id,-32022,t.message,t.data):t instanceof q?U(e.id,-32601,t.message):U(e.id,-32602,t instanceof Error?t.message:String(t))}}async function z(e,t,n){if(O(e,n))throw new q(`${e} was removed in MCP ${h}.`);switch(e){case`server/discover`:return{supportedVersions:v,capabilities:{tools:{}},instructions:u,ttlMs:w,cacheScope:`public`};case`initialize`:return{protocolVersion:D(t),capabilities:{tools:{}},serverInfo:k(),instructions:u};case`ping`:return{};case`tools/list`:return{tools:[...o(),f],...ie(n,w)};case`tools/call`:return await B(t);default:throw new q(`Unsupported MCP method: ${e}`)}}async function B(e){let t=W(e),n=K(t,`name`);try{return n===`help`?ne(G(t.arguments)):await te.execute(n,G(t.arguments))}catch(e){return V(ee(a(e)),!0)}}function V(e,t=!1){return{isError:t,content:[{type:`text`,text:e}]}}function H(e,t){return{jsonrpc:`2.0`,id:e,result:t}}function U(e,t,n,r){return{jsonrpc:`2.0`,id:e,error:{code:t,message:n,...r?{data:r}:{}}}}function W(t){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`Expected object parameters.`);return t}function G(e){return e===void 0?{}:W(e)}function K(t,n){let r=t[n];if(typeof r!=`string`||r.length===0)throw new e(`INVALID_ARGS`,`Expected ${n} to be a non-empty string.`);return r}var q=class extends Error{};async function J(){let e=Y(),t=new ce(t=>{e.push(t)});process.stdin.setEncoding(`utf8`),process.stdin.on(`data`,e=>{try{t.push(e)}catch(e){$({jsonrpc:`2.0`,id:null,error:{code:-32700,message:e instanceof Error?e.message:String(e)}})}}),await new Promise(e=>{process.stdin.on(`end`,e),process.stdin.on(`close`,e),process.stdin.resume()}),await e.idle()}function Y(e={}){let t=e.handlePayload??X,n=e.write??$,r=Promise.resolve();return{push:e=>{let i=se(e);r=r.then(async()=>{let r=await t(e);r&&n(r)}).catch(e=>{n({jsonrpc:`2.0`,id:i,error:{code:-32603,message:e instanceof Error?e.message:String(e)}})})},idle:async()=>{await r}}}function X(e){return Array.isArray(e)?ae(e):Z(e)}async function ae(e){let t=[];for(let n of e)t.push(...le(await Z(n)));return t.length>0?t:null}async function Z(e){let n;try{n=t.parse(e)}catch{return oe(Q(e))}return R(n)}function oe(e){return{jsonrpc:`2.0`,id:e,error:{code:-32600,message:`Invalid JSON-RPC request.`}}}function se(e){return Array.isArray(e)?e.length===1?Q(e[0]):null:Q(e)}function Q(e){if(e&&typeof e==`object`&&!Array.isArray(e)){let t=e.id;if(typeof t==`string`||typeof t==`number`||t===null)return t}return null}var ce=class{buffer=``;sink;constructor(e){this.sink=e}push(e){for(this.buffer+=e;;){let e=this.tryReadLineMessage();if(e!==void 0){this.emit(e);continue}break}}tryReadLineMessage(){let e=this.buffer.indexOf(`
9
+ Errors carry hints; follow them instead of re-planning. Call help only for specialized work (gestures, scripting, TV, macOS, web, remote, debugging) or an unclear command shape, never at startup.`;function p(){let e=new Set(i());return r().filter(t=>!e.has(t))}const m={name:`help`,description:`Usage guides. No topic: the full workflow card. topic = one of ${u().join(`, `)} for that guide, or a tool name for its complete flag reference. For specialized work or an unclear command shape only; not a startup step, not needed after an error that carries a hint.`,inputSchema:{type:`object`,properties:{topic:{type:`string`,description:`Guide topic or tool name; omit for the card.`}},additionalProperties:!1}},te=`CLI syntax over MCP: \`agent-device <command> <positionals> --flag\` = tool <command>; positionals are named properties (target, text, direction), flags camelCase (--settle -> settle: true, -i -> interactiveOnly: true). Terminal-only (no MCP tool; run in a shell): ${p().join(`, `)}.\n\n`;function ne(e){let t=e.topic;if(t!==void 0&&typeof t!=`string`)return h(`Expected topic to be a string.`,!0);let n=t?l(t):d();return n===null?h(`Unknown help topic: ${t}. ${m.description}`,!0):h(te+n)}function h(e,t=!1){return{isError:t,content:[{type:`text`,text:e}]}}const g=`2026-07-28`,_=[g],v=[`2025-11-25`,`2025-06-18`],y=[..._,...v],b=`server/discover`,x=new Set([`initialize`,`ping`]),S=`io.modelcontextprotocol/protocolVersion`,C=`io.modelcontextprotocol/clientCapabilities`,w=`io.modelcontextprotocol/clientInfo`,T=36e5;var E=class extends Error{requested;constructor(e){super(`Unsupported MCP protocol version: ${e}. Supported: ${y.join(`, `)}.`),this.requested=e}get data(){return{supported:y,requested:this.requested}}};function D(t,r){let i=I(I(r)._meta),a=L(i,S);if(a===void 0){if(t===b)throw new e(`INVALID_ARGS`,`Expected _meta["${S}"] on ${b}.`);return`legacy`}if(!y.includes(a))throw new E(a);if(!n(i[C]))throw new e(`INVALID_ARGS`,`Expected _meta["${C}"] to be an object.`);let o=i[w];if(o!==void 0&&!j(o))throw new e(`INVALID_ARGS`,`Expected _meta["${w}"] to be a valid Implementation.`);if(!_.includes(a)){if(t===b)throw new E(a);return`legacy`}return`modern`}function O(e){let t=L(I(e),`protocolVersion`);return t!==void 0&&v.includes(t)?t:`2025-11-25`}function re(e,t){return t===`modern`&&x.has(e)}function k(){return{name:`agent-device`,version:a()}}function ie(e,t){return t===`legacy`||typeof e!=`object`||!e?e:{resultType:`complete`,...e,_meta:{...e._meta,"io.modelcontextprotocol/serverInfo":k()}}}function A(e,t){return e===`modern`?{ttlMs:t,cacheScope:`public`}:void 0}function j(e){return!n(e)||!P(e.name)||!P(e.version)?!1:N(e.title,P)&&N(e.description,P)&&N(e.websiteUrl,P)&&N(e.icons,e=>Array.isArray(e)&&e.every(M))}function M(e){return!n(e)||!P(e.src)?!1:N(e.mimeType,P)&&N(e.sizes,F)&&N(e.theme,e=>e===`light`||e===`dark`)}function N(e,t){return e===void 0||t(e)}function P(e){return typeof e==`string`}function F(e){return Array.isArray(e)&&e.every(P)}function I(e){return n(e)?e:{}}function L(e,t){let n=e[t];return typeof n==`string`&&n.length>0?n:void 0}async function R(e){if(e.jsonrpc!==`2.0`||typeof e.method!=`string`)return U(e.id??null,-32600,`Invalid JSON-RPC request.`);if(e.id===void 0)return null;try{let t=D(e.method,e.params),n=await z(e.method,e.params,t);return H(e.id,ie(n,t))}catch(t){return t instanceof E?U(e.id,-32022,t.message,t.data):t instanceof q?U(e.id,-32601,t.message):U(e.id,-32602,t instanceof Error?t.message:String(t))}}async function z(e,t,n){if(re(e,n))throw new q(`${e} was removed in MCP ${g}.`);switch(e){case`server/discover`:return{supportedVersions:y,capabilities:{tools:{}},instructions:f,ttlMs:T,cacheScope:`public`};case`initialize`:return{protocolVersion:O(t),capabilities:{tools:{}},serverInfo:k(),instructions:f};case`ping`:return{};case`tools/list`:return{tools:[...c(),m],...A(n,T)};case`tools/call`:return await B(t);default:throw new q(`Unsupported MCP method: ${e}`)}}async function B(e){let t=W(e),n=K(t,`name`);try{return n===`help`?ne(G(t.arguments)):await ee.execute(n,G(t.arguments))}catch(e){return V(s(o(e)),!0)}}function V(e,t=!1){return{isError:t,content:[{type:`text`,text:e}]}}function H(e,t){return{jsonrpc:`2.0`,id:e,result:t}}function U(e,t,n,r){return{jsonrpc:`2.0`,id:e,error:{code:t,message:n,...r?{data:r}:{}}}}function W(t){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`Expected object parameters.`);return t}function G(e){return e===void 0?{}:W(e)}function K(t,n){let r=t[n];if(typeof r!=`string`||r.length===0)throw new e(`INVALID_ARGS`,`Expected ${n} to be a non-empty string.`);return r}var q=class extends Error{};async function J(){let e=Y(),t=new ce(t=>{e.push(t)});process.stdin.setEncoding(`utf8`),process.stdin.on(`data`,e=>{try{t.push(e)}catch(e){$({jsonrpc:`2.0`,id:null,error:{code:-32700,message:e instanceof Error?e.message:String(e)}})}}),await new Promise(e=>{process.stdin.on(`end`,e),process.stdin.on(`close`,e),process.stdin.resume()}),await e.idle()}function Y(e={}){let t=e.handlePayload??X,n=e.write??$,r=Promise.resolve();return{push:e=>{let i=se(e);r=r.then(async()=>{let r=await t(e);r&&n(r)}).catch(e=>{n({jsonrpc:`2.0`,id:i,error:{code:-32603,message:e instanceof Error?e.message:String(e)}})})},idle:async()=>{await r}}}function X(e){return Array.isArray(e)?ae(e):Z(e)}async function ae(e){let t=[];for(let n of e)t.push(...le(await Z(n)));return t.length>0?t:null}async function Z(e){let n;try{n=t.parse(e)}catch{return oe(Q(e))}return R(n)}function oe(e){return{jsonrpc:`2.0`,id:e,error:{code:-32600,message:`Invalid JSON-RPC request.`}}}function se(e){return Array.isArray(e)?e.length===1?Q(e[0]):null:Q(e)}function Q(e){if(e&&typeof e==`object`&&!Array.isArray(e)){let t=e.id;if(typeof t==`string`||typeof t==`number`||t===null)return t}return null}var ce=class{buffer=``;sink;constructor(e){this.sink=e}push(e){for(this.buffer+=e;;){let e=this.tryReadLineMessage();if(e!==void 0){this.emit(e);continue}break}}tryReadLineMessage(){let e=this.buffer.indexOf(`
10
10
  `);if(e===-1)return;let t=this.buffer.slice(0,e).trim();return this.buffer=this.buffer.slice(e+1),t.length>0?t:void 0}emit(e){this.sink(JSON.parse(e))}};function le(e){return e?[e]:[]}function $(e){process.stdout.write(`${JSON.stringify(e)}\n`)}export{Y as createMcpPayloadQueue,X as handleMcpPayload,J as runAgentDeviceMcpServer};
@@ -1 +1 @@
1
- import{P as e}from"./sdk-contracts.js";import{i as t,t as n}from"./device2.js";import{c as r,r as i,t as a}from"./device-session.js";import{n as o}from"./provider-profile-fields.js";import{assertLimrunUploadedAppAccess as s,resolveInstalledAppIdForAsset as c,resolveLimrunAppAsset as l}from"./app-catalog.js";function u(e){o(e?.flags,n)}async function d(e,t,n){let r=n?.initialApp,i=typeof r==`string`?r.trim():``;if(i)return s(n?.publicNetworkOnly),await l(e,t,i,n?.signal)}async function f(t,n){let r=await a(t).listApps(`user-installed`),i=c(n.name,r);if(i)return i;throw new e(`COMMAND_FAILED`,`Limrun installed ${n.name}, but its application identifier could not be resolved unambiguously.`,{asset:n.name,installedApps:r.map(e=>e.id)})}async function p(n){let r=await n.limrun.iosInstances.create({wait:!0,metadata:n.metadata,spec:{...n.region?{region:n.region}:{},...n.app?{initialAssets:[{kind:`App`,source:`AssetID`,assetId:n.app.id,launchMode:`RelaunchIfRunning`}]}:{}}});try{if(!r.status.apiUrl)throw new e(`COMMAND_FAILED`,`Limrun iOS instance did not expose apiUrl`);return await i({lease:n.lease,instanceId:r.metadata.id,ownership:`created`,device:t(`ios`,n.lease,r.metadata.id),apiUrl:r.status.apiUrl,token:r.status.token},n.dependencies)}catch(e){throw await n.limrun.iosInstances.delete(r.metadata.id).catch(()=>{}),e}}async function m(n){let i=await n.limrun.androidInstances.create({wait:!0,metadata:n.metadata,spec:{...n.region?{region:n.region}:{},...n.app?{initialAssets:[{kind:`App`,source:`AssetIDs`,assetIds:[n.app.id]}]}:{}}});try{if(!i.status.apiUrl||!i.status.adbWebSocketUrl)throw new e(`COMMAND_FAILED`,`Limrun Android instance did not expose API and ADB websocket endpoints`);return await r({lease:n.lease,instanceId:i.metadata.id,ownership:`created`,device:t(`android`,n.lease,i.metadata.id),apiUrl:i.status.apiUrl,token:i.status.token,adbUrl:i.status.adbWebSocketUrl},n.dependencies)}catch(e){throw await n.limrun.androidInstances.delete(i.metadata.id).catch(()=>{}),e}}export{m as allocateLimrunAndroidSession,p as allocateLimrunIosSession,u as rejectRefusedLimrunProfileFields,f as resolvePreinstalledAppId,d as resolveRequestedLimrunAppAsset};
1
+ import{P as e}from"./sdk-contracts.js";import{a as t,g as n,o as r,p as i,u as a}from"./src.js";import{n as o}from"./provider-profile-fields.js";import{assertLimrunUploadedAppAccess as s,resolveInstalledAppIdForAsset as c,resolveLimrunAppAsset as l}from"./app-catalog.js";function u(e){o(e?.flags,i)}async function d(e,t,n){let r=n?.initialApp,i=typeof r==`string`?r.trim():``;if(i)return s(n?.publicNetworkOnly),await l(e,t,i,n?.signal)}async function f(n,r){let i=await t(n).listApps(`user-installed`),a=c(r.name,i);if(a)return a;throw new e(`COMMAND_FAILED`,`Limrun installed ${r.name}, but its application identifier could not be resolved unambiguously.`,{asset:r.name,installedApps:i.map(e=>e.id)})}async function p(t){let i=await t.limrun.iosInstances.create({wait:!0,metadata:t.metadata,spec:{...t.region?{region:t.region}:{},...t.app?{initialAssets:[{kind:`App`,source:`AssetID`,assetId:t.app.id,launchMode:`RelaunchIfRunning`}]}:{}}});try{if(!i.status.apiUrl)throw new e(`COMMAND_FAILED`,`Limrun iOS instance did not expose apiUrl`);return await r({lease:t.lease,instanceId:i.metadata.id,ownership:`created`,device:n(`ios`,t.lease,i.metadata.id),apiUrl:i.status.apiUrl,token:i.status.token},t.dependencies)}catch(e){throw await t.limrun.iosInstances.delete(i.metadata.id).catch(()=>{}),e}}async function m(t){let r=await t.limrun.androidInstances.create({wait:!0,metadata:t.metadata,spec:{...t.region?{region:t.region}:{},...t.app?{initialAssets:[{kind:`App`,source:`AssetIDs`,assetIds:[t.app.id]}]}:{}}});try{if(!r.status.apiUrl||!r.status.adbWebSocketUrl)throw new e(`COMMAND_FAILED`,`Limrun Android instance did not expose API and ADB websocket endpoints`);return await a({lease:t.lease,instanceId:r.metadata.id,ownership:`created`,device:n(`android`,t.lease,r.metadata.id),apiUrl:r.status.apiUrl,token:r.status.token,adbUrl:r.status.adbWebSocketUrl},t.dependencies)}catch(e){throw await t.limrun.androidInstances.delete(r.metadata.id).catch(()=>{}),e}}export{m as allocateLimrunAndroidSession,p as allocateLimrunIosSession,u as rejectRefusedLimrunProfileFields,f as resolvePreinstalledAppId,d as resolveRequestedLimrunAppAsset};
@@ -0,0 +1 @@
1
+ import{S as e,at as t}from"./sdk-contracts.js";import"./sdk-batch-runner.js";import{G as n,Y as r,m as i}from"./back-mode.js";import{r as a}from"./diagnostics.js";import"./diagnostics2.js";import{Gn as o,_n as s,hn as c,sr as l,yn as u}from"./sdk-batch.js";import{n as d,o as f}from"./target-evidence.js";import{n as p,t as m}from"./target-evidence-tree.js";import{i as h}from"./retry.js";import"./retry2.js";import{t as g}from"./android-snapshot-quality.js";import{a as _,n as ee,t as v}from"./replay-divergence.js";import{n as y}from"./snapshot-chrome.js";import{g as b}from"./replay-script-selection.js";import{t as x}from"./snapshot-quality-verdict.js";import S from"node:fs";import C from"node:path";function te(e){let{req:t,sessionName:n,metadata:r,resolvedPath:i}=e,a=t.flags??{},o={AD_SESSION:n,AD_FILENAME:w(t,i)};return E(o,`AD_PLATFORM`,a.platform??r.platform),E(o,`AD_TARGET`,a.target??r.target),E(o,`AD_DEVICE`,a.device),E(o,`AD_DEVICE_ID`,T(a)),D(o,`AD_SHARD_INDEX`,a.shardIndex),D(o,`AD_SHARD_COUNT`,a.shardCount),E(o,`AD_ARTIFACTS`,a.artifactsDir),o}function w(e,t){let n=e.meta?.cwd??process.cwd();return C.relative(n,t)||t}function T(e){return typeof e.serial==`string`?e.serial:e.udid}function E(e,t,n){typeof n==`string`&&n.length>0&&(e[t]=n)}function D(e,t,n){typeof n==`number`&&(e[t]=String(n))}function O(e,n){if(e)try{S.appendFileSync(e,`${JSON.stringify(t(n))}\n`)}catch(t){a({level:`warn`,phase:`replay_trace_write_failed`,data:{path:e,error:t instanceof Error?t.message:String(t)}})}}const k={id:0,"role-label":1,label:2,other:3};function A(e){let t=new Map;for(let n of e){let e=t.get(n.nodeIndex);(!e||j(n.basis)<j(e.basis))&&t.set(n.nodeIndex,n)}return[...t.values()].sort((e,t)=>j(e.basis)-j(t.basis)||e.nodeIndex-t.nodeIndex)}function j(e){return k[e]}function M(e){if(e.length===0)return{selectorExpression:null,selectorTimeout:null};let t=e.at(-1),n=t!==void 0&&/^\d+$/.test(t)?t:null,r=n===null?e.slice():e.slice(0,-1),i=s(`positional`,r);return i.kind!==`expression`||i.rest.length>0?{selectorExpression:null,selectorTimeout:null}:{selectorExpression:i.expression,selectorTimeout:n}}function ne(e){let t=[],n=Array.isArray(e.result?.selectorChain)&&e.result?.selectorChain.every(e=>typeof e==`string`)?e.result.selectorChain:[];if(t.push(...n),r(e.command)){let n=re(e),r=n[0]??``;r&&!r.startsWith(`@`)&&t.push(n.join(` `))}if(e.command===`fill`){let n=e.positionals?.[0]??``;n&&!n.startsWith(`@`)&&Number.isNaN(Number(n))&&t.push(n)}if(e.command===`get`){let n=e.positionals?.[1]??``;n&&!n.startsWith(`@`)&&t.push(e.positionals.slice(1).join(` `))}if(e.command===`is`){let n=s(`is`,[...e.positionals]);n.kind===`expression`&&t.push(n.expression)}if(e.command===`wait`){let{selectorExpression:n}=M([...e.positionals]);n&&t.push(n)}return l(t).filter(e=>e.trim().length>0)}function re(e){let t=e.positionals;if(e.command!==`longpress`)return t;let n=t.at(-1);return t.length>1&&ie(n)?t.slice(0,-1):t}function ie(e){return e===void 0||e.trim()===``?!1:Number.isFinite(Number(e))}function ae(e){let t=C.dirname(e),n=C.basename(e,C.extname(e));return C.join(t,`${n}.healed.ad`)}function N(e){let t=oe({failedIndex:e.failedIndex,actions:e.actions,planDigest:e.planDigest,repairHint:e.repairHint,sessionExists:e.resumeStamper.sessionExists()});return e.resumeStamper.stampCorrectiveWatermark({resume:t,repairHint:e.repairHint,failedIndex:e.failedIndex,actions:e.actions}),t}function oe(e){let{failedIndex:t,actions:n,planDigest:r,repairHint:i,sessionExists:a}=e,o=i===`record-and-heal`?t+1:t,s=se({failedIndex:t,actions:n,repairHint:i,sessionExists:a});return{allowed:!0,from:o,planDigest:r,...s===void 0?{}:{alternateFrom:s}}}function se(e){let{failedIndex:t,actions:n,repairHint:r,sessionExists:i}=e;if(r!==`caution`&&r!==`manual`)return;let a=t+1;if(!(a>n.length&&!i))return a}function P(e){let{kind:t,targetEvidence:n,capture:r}=e;if(t===`identity-mismatch`)return`caution`;if(t===`identity-unverifiable`||!n||r.state!==`available`||!ce(n))return`manual`;let i=le(n,r.nodes);return t===`selector-miss`?i?`record-and-heal`:`state-repair`:i?`record-and-heal`:`manual`}function ce(e){return e.ancestry.length>0||e.scrollRegion!==void 0&&F(e.scrollRegion)}function le(e,t){let n=p(t),r=L(e.ancestry,n,t),i=e.scrollRegion;return i&&F(i)?r&&I(i,n,t):r}function F(e){return e.id!==void 0||e.label!==void 0}function I(e,t,n){return n.some(n=>f(d(n,t),e))}function L(e,t,n){return e.length===0?n.length>0:n.some(n=>{let r=m(n,t,e.length);return!r.broken&&o(r.chain,e)})}function R(e){let{sessionStore:n,observationStore:r,divergence:i,responseLevel:a}=e,o,s,c=v({divergence:i,level:a,writeOverflowArtifact:e=>{let r=t(e),i=V(n,r);return`artifactPath`in i&&(o=r,s=i.artifactPath),i}}),l=(o??c).screen;if(l.state!==`available`||l.refs.length===0)return e.evidence&&r.bindAuthority(e.signal).finalize(e.evidence,{refsGeneration:l.state===`available`?l.refsGeneration:void 0,refs:[]}),c;if(!e.evidence)return B(s),z(c,`missing-evidence`);let u=r.bindAuthority(e.signal).finalize(e.evidence,{refsGeneration:l.refsGeneration,refs:l.refs.map(e=>e.ref)});return u.published===!0?c:(B(s),z(c,u.reason))}function z(e,t){let{overflow:n,...r}=e;return{...r,screen:{state:`unavailable`,reason:`ref-publication-${t}`,hint:`The replay observation changed before its refs could be published. Take a new snapshot before targeting an element.`},suggestions:e.suggestions.map(({ref:e,...t})=>t),...e.targetBinding?{targetBinding:{...e.targetBinding,candidates:e.targetBinding.candidates.map(({ref:e,...t})=>t)}}:{}}}function B(e){if(e)try{S.unlinkSync(e)}catch{}}function V(e,t){try{let n=C.join(e.ensureSessionDir(),`replay-divergence`);S.mkdirSync(n,{recursive:!0});let r=`${Date.now()}-step${t.step.index}.json`,i=C.join(n,r);return S.writeFileSync(i,`${JSON.stringify(t,null,2)}\n`),{artifactPath:i}}catch{return{artifactUnavailable:!0}}}async function H(e){let{error:t,action:r,index:i,sourcePath:a,sourceLine:o,session:s,sessionStore:c,observationStore:l,resumeStamper:u,logPath:d,responseLevel:f,scrubVars:p=[],planActions:m,planDigest:h,signal:g}=e,_=ee(p),v={code:t.code,message:_(t.message),...t.hint?{hint:_(t.hint)}:{}},y=s?await W({session:s,observationStore:l,logPath:d,action:r}):{state:`unavailable`,reason:`no-session`,hint:`The session closed before a post-failure screen could be captured.`},b=K(y,_),x=y.state===`available`&&s?ge({action:r,session:s,nodes:y.nodes,sanitize:_}):[],S=P({kind:`action-failure`,targetEvidence:r.targetEvidence,capture:U(y)}),C=N({failedIndex:i+1,actions:m,planDigest:h,repairHint:S,resumeStamper:u});return R({sessionStore:c,observationStore:l,divergence:{version:1,kind:`action-failure`,step:{index:i+1,source:{path:_(a),line:o}},action:_(n(r)),cause:v,screen:b,suggestions:x.slice(0,5),suggestionCount:x.length,resume:C,repairHint:S},responseLevel:f,evidence:y.state===`available`?y.evidence:void 0,...g?{signal:g}:{}})}function U(e){return e.state===`available`?{state:`available`,nodes:e.nodes}:{state:`unavailable`}}const ue=[300,500,800,1200,2e3,3e3,4e3];async function W(e){let{session:t,observationStore:n,logPath:r,action:i,retryLaunchRace:a=!1}=e,o=de(i),s=Date.now()+12e3,c=n.bindAuthority(),l=await G({session:t,observation:c,logPath:r,flags:o});if(!a)return l.observation;for(let e of ue){if(l.observation.state===`available`||!l.retryable)break;let n=s-Date.now();if(n<=0)break;await h(Math.min(e,n)),l=await G({session:t,observation:c,logPath:r,flags:o})}return l.observation}async function G(e){let{session:t,observation:n,logPath:r,flags:i}=e;try{let e=(await n.capture({flags:i,logPath:r})).snapshot;if(x(e.snapshotQuality))return{observation:{state:`unavailable`,reason:`sparse-snapshot`,hint:`The post-failure snapshot was sparse or unavailable; run snapshot -i to observe the current screen.`},retryable:!0};let a=n.store(e);return{observation:{state:`available`,nodes:e.nodes,refsGeneration:a.refsGeneration,evidence:a.evidence,appBundleId:t.appBundleId},retryable:!1}}catch(e){return{observation:{state:`unavailable`,reason:`capture-failed`,hint:`Post-failure snapshot capture failed (${e instanceof Error?e.message:String(e)}); the original replay failure is unaffected.`},retryable:g(e)}}}function de(e){return{snapshotInteractiveOnly:fe(e)}}function fe(e){return!J(e.command)||Y(e).requiresRect}function K(e,t){if(e.state===`unavailable`)return{state:`unavailable`,reason:t(e.reason),hint:t(e.hint)};let{refs:n,truncated:r}=he(e.nodes,t,e.appBundleId);return{state:`available`,refsGeneration:e.refsGeneration,refs:n,...r?{truncated:!0}:{}}}function pe(t){return!!i(t,e(t.type??`Element`))||t.hittable===!0}function q(e,t){return t!==void 0&&e.bundleId!==void 0&&e.bundleId!==t&&e.hittable===!0}function me(e,t){let n=y(e,t),r=e.filter(e=>e.ref&&!n.has(e.ref)&&pe(e)),i=r.length>0?r:e.filter(e=>e.ref&&e.hittable===!0),a=i.filter(e=>e.interactionBlocked!==`covered`),o=a.length>0?a:i,s=[...o.filter(e=>q(e,t)),...o.filter(e=>!q(e,t))],c=s.slice(0,20);return{nodes:c,truncated:s.length>c.length}}function he(t,n,r){let{nodes:a,truncated:o}=me(t,r);return{refs:a.map(t=>{let r=e(t.type??`Element`),a=i(t,r);return{ref:t.ref,role:n(r),...a?{label:n(a)}:{}}}),truncated:o}}function ge(e){let{action:t,session:n,nodes:r,sanitize:i}=e;if(!J(t.command))return[];let a=ne(t);return a.length===0?[]:X({candidates:a,nodes:r,session:n,action:t,matching:Y(t),sanitize:i})}function J(e){return r(e)||[`fill`,`get`,`is`,`wait`].includes(e)}function Y(e){let t=r(e.command);return{requiresRect:t||e.command===`fill`,allowDisambiguation:t||e.command===`fill`||e.command===`get`&&e.positionals?.[0]===`text`}}function X(e){let{candidates:t,nodes:n,session:r,action:i,matching:a,sanitize:o}=e,s=[];for(let e of t){let t=_e({candidate:e,nodes:n,session:r,action:i,matching:a,sanitize:o});t&&s.push(t)}return A(s).map(e=>e.suggestion)}function _e(e){let{candidate:t,nodes:n,session:r,action:i,matching:a,sanitize:o}=e,s=u(t,n,{platform:r.device.platform,requireRect:a.requiresRect,allowDisambiguation:a.allowDisambiguation});if(s)return{suggestion:Z({node:s.node,nodes:n,session:r,action:i,basis:s.basis,sanitize:o}),basis:s.basis,nodeIndex:s.node.index}}function Z(t){let{node:n,nodes:a,session:o,action:s,basis:l,sanitize:u}=t,d=c(n,o.device.platform,{action:s.command===`fill`?`fill`:r(s.command)?`click`:`get`,nodes:a}),f=e(n.type??`Element`),p=i(n,f);return{selector:u(d.join(` || `)),basis:l,...n.ref?{ref:n.ref}:{},role:u(f),...p?{label:u(p)}:{}}}function ve(e){return ye({...e,hint:e.hint??$(e.details,`hint`),diagnosticId:e.diagnosticId??$(e.details,`diagnosticId`),logPath:e.logPath??$(e.details,`logPath`)})}function ye(e){return e.details?.reason===`android_shell_text_unsupported`?{...e,hint:"On emulators the test IME activates automatically; on real devices pass `--test-ime` to this test/replay run to enable it for the sessions the flow opens (see `agent-device doctor` for the current IME state)."}:e}function be(e){let{error:t,action:r,step:i,replayPath:a,artifactPaths:o,snapshotDiagnostics:s,divergence:c,scrubVars:l}=e;return Q({error:t,actionLabel:n(r),action:r.command,positionals:b(r)??[],step:i,replayPath:a,artifactPaths:o,snapshotDiagnostics:s,divergence:c,scrubVars:l})}function Q(e){let{error:t,actionLabel:n,action:r,positionals:i,step:a,replayPath:o,artifactPaths:s,snapshotDiagnostics:c,divergence:l,scrubVars:u,warnings:d}=e;return{ok:!1,error:{code:`REPLAY_DIVERGENCE`,message:_(`Replay failed at step ${a} (${n}): ${t.message}`,u),hint:t.hint===void 0?void 0:_(t.hint,u),diagnosticId:t.diagnosticId,logPath:t.logPath,...t.retriable===void 0?{}:{retriable:t.retriable},...t.supportedOn===void 0?{}:{supportedOn:t.supportedOn},details:{...Se(t.details),replayPath:o,step:a,action:r,positionals:i,artifactPaths:s,...c?{snapshotDiagnostics:c}:{},...d&&d.length>0?{warnings:d.map(e=>_(e,u))}:{},divergence:l}}}}function $(e,t){let n=e?.[t];return typeof n==`string`&&n.length>0?n:void 0}const xe=[`readiness`,`reason`,`recovery`,`retriable`,`snapshotQuality`,`supportedOn`,`systemSurface`];function Se(e){if(!e)return{};let t={};for(let n of xe)e[n]!==void 0&&(t[n]=e[n]);return t}export{Z as a,Y as c,P as d,N as f,te as g,O as h,K as i,U as l,A as m,Q as n,H as o,ae as p,ve as r,W as s,be as t,R as u};
@@ -1 +1 @@
1
- import{P as e}from"./sdk-contracts.js";import{i as t}from"./runtime-admission.js";function n(e,n){return n.available?void 0:t(e,n)}function r(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime facts inspection is unavailable.`)}const i=new WeakMap;let a;(class e{static{a=(t,n)=>{let r=new e;return i.set(r,{device:Object.freeze({...t}),plan:n}),Object.freeze(r),r}}#e;constructor(){this.#e=void 0}get admitted(){return this.#e,!0}});function o(t){let n=i.get(t);if(n===void 0)throw new e(`COMMAND_FAILED`,`Runtime plan admission is not one minted by admitRuntimePlan; refusing to bind.`);return n}async function s(e){let t=await r(e.inspectFacts)(e.device);for(let n of e.plan.use.required){let e=t.operations[n];if(!e.available)return{admitted:!1,operation:n,fact:e}}return a(e.device,e.plan)}function c(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime binding is unavailable.`)}export{o as a,n as i,c as n,r,s as t};
1
+ import{P as e}from"./sdk-contracts.js";import{c as t}from"./internal/daemon.js";function n(e,n){return n.available?void 0:t(e,n)}function r(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime facts inspection is unavailable.`,{reason:`runtime-gateway-missing`})}const i=new WeakMap;let a;(class e{static{a=(t,n)=>{let r=new e;return i.set(r,{device:Object.freeze({...t}),plan:n}),Object.freeze(r),r}}#e;constructor(){this.#e=void 0}get admitted(){return this.#e,!0}});function o(t){let n=i.get(t);if(n===void 0)throw new e(`COMMAND_FAILED`,`Runtime plan admission is not one minted by admitRuntimePlan; refusing to bind.`);return n}async function s(e){let t=await r(e.inspectFacts)(e.device);for(let n of e.plan.use.required){let e=t.operations[n];if(!e.available)return{admitted:!1,operation:n,fact:e}}return a(e.device,e.plan)}function c(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime binding is unavailable.`,{reason:`runtime-gateway-missing`})}export{o as a,n as i,c as n,r,s as t};
@@ -1 +1 @@
1
- import{t as e}from"./string-enum.js";const t=[`app`,`frontmost-app`,`desktop`,`menubar`],n=e(t,{normalize:e=>e.trim().toLowerCase(),message:e=>`Invalid surface: ${e}. Use ${t.join(`|`)}.`});function r(e){return n.parse(e)}const i=[`xctest`,`native`],a=`AGENT_DEVICE_MACOS_APP_BACKEND`,o=e(i,{normalize:e=>e.trim().toLowerCase(),message:e=>`Invalid ${a}: ${e}. Use ${i.join(`|`)}.`});function s(e){let t=e(a);return t===void 0||t.trim()===``?`xctest`:o.parse(t)}const c={"frontmost-app":`macos-helper`,desktop:`macos-helper`,menubar:`macos-helper`};function l(e,t){let n=e??`app`;return n===`app`?t===`native`?`macos-helper`:`xctest`:c[n]}function u(e,t){let n=e??`app`;return l(n,t)===`macos-helper`?n:void 0}export{s as a,r as i,u as n,l as r,t};
1
+ import{ct as e}from"./tv-remote.js";const t=[`app`,`frontmost-app`,`desktop`,`menubar`],n=e(t,{normalize:e=>e.trim().toLowerCase(),message:e=>`Invalid surface: ${e}. Use ${t.join(`|`)}.`});function r(e){return n.parse(e)}const i=[`xctest`,`native`],a=`AGENT_DEVICE_MACOS_APP_BACKEND`,o=e(i,{normalize:e=>e.trim().toLowerCase(),message:e=>`Invalid ${a}: ${e}. Use ${i.join(`|`)}.`});function s(e){let t=e(a);return t===void 0||t.trim()===``?`xctest`:o.parse(t)}const c={"frontmost-app":`macos-helper`,desktop:`macos-helper`,menubar:`macos-helper`};function l(e,t){let n=e??`app`;return n===`app`?t===`native`?`macos-helper`:`xctest`:c[n]}function u(e,t){let n=e??`app`;return l(n,t)===`macos-helper`?n:void 0}export{s as a,r as i,u as n,l as r,t};