agent-device 0.20.10 → 0.21.0

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 (490) hide show
  1. package/README.md +2 -2
  2. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.20.10.apk → agent-device-android-ime-helper-0.21.0.apk} +0 -0
  3. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.0.apk.sha256 +1 -0
  4. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.20.10.manifest.json → agent-device-android-ime-helper-0.21.0.manifest.json} +4 -4
  5. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.0.apk +0 -0
  6. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.0.apk.sha256 +1 -0
  7. package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.20.10.manifest.json → agent-device-android-snapshot-helper-0.21.0.manifest.json} +6 -6
  8. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/AudioProbe.swift +35 -33
  9. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/main.swift +6 -1
  10. package/apple/snapshot-bridge/LICENSE.idb +23 -0
  11. package/apple/snapshot-bridge/README.md +49 -0
  12. package/apple/snapshot-bridge/SnapshotBridge.m +280 -0
  13. package/apple/snapshot-bridge/SnapshotBridgeRuntime.h +33 -0
  14. package/apple/snapshot-bridge/SnapshotBridgeRuntime.m +382 -0
  15. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +58 -0
  16. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner.xcodeproj/project.pbxproj +19 -0
  17. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAlertVerification.swift +36 -0
  18. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerStringNormalization.swift +8 -0
  19. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.h +12 -1
  20. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.m +100 -6
  21. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTapPointPolicy.swift +2 -2
  22. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AXSnapshotFallback.swift +16 -8
  23. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +21 -88
  24. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AlertObservation.swift +124 -0
  25. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +106 -103
  26. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +6 -14
  27. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Interaction.swift +63 -91
  28. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +13 -6
  29. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +72 -155
  30. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+PrivateAXElementTypes.swift +12 -0
  31. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+PrivateAXPresentation.swift +74 -78
  32. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScreenRecorder.swift +17 -9
  33. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScrollGesture.swift +42 -11
  34. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +185 -461
  35. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotBackendCapabilities.swift +98 -0
  36. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCapturePlan.swift +224 -164
  37. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotPresentationInvariant.swift +19 -0
  38. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotTiming.swift +110 -0
  39. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedCommitDeadline.swift +206 -0
  40. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +147 -25
  41. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SystemModal.swift +1 -0
  42. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +24 -307
  43. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +206 -0
  44. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryReadiness.swift +158 -0
  45. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +49 -16
  46. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +2 -11
  47. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TvRemote.swift +4 -19
  48. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +16 -20
  49. package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/RecordingExportSupport.swift +111 -0
  50. package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-overlay.swift +42 -81
  51. package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-trim.swift +35 -82
  52. package/dist/apple/snapshot-presentation/Package.swift +21 -0
  53. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotGeometry.swift +56 -0
  54. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotModels.swift +259 -0
  55. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentation.swift +153 -0
  56. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationFailure.swift +27 -0
  57. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationInvariant.swift +91 -0
  58. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationProjection.swift +161 -0
  59. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotScopePolicy.swift +53 -0
  60. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFold.swift +242 -0
  61. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFoldProjection.swift +97 -0
  62. package/dist/src/adapter.js +1 -0
  63. package/dist/src/adb-executor.js +2 -0
  64. package/dist/src/adb-failure.js +1 -0
  65. package/dist/src/adb-host.js +1 -0
  66. package/dist/src/adb.js +1 -0
  67. package/dist/src/agent-browser-lifecycle.js +1 -0
  68. package/dist/src/agent-browser-process-record.js +1 -0
  69. package/dist/src/agent-browser-provider.js +1 -0
  70. package/dist/src/agent-browser-tool.js +1 -1
  71. package/dist/src/agent-device-client.js +2 -2
  72. package/dist/src/ai-sdk.d.ts +2 -2
  73. package/dist/src/ai-sdk.js +1 -1
  74. package/dist/src/alert-contract.js +1 -0
  75. package/dist/src/alert-runtime.js +1 -0
  76. package/dist/src/android-adb.d.ts +27 -19
  77. package/dist/src/android-adb.js +1 -1
  78. package/dist/src/android-input-ownership.js +1 -0
  79. package/dist/src/android-system-chrome.js +1 -0
  80. package/dist/src/android.js +1 -1
  81. package/dist/src/api.js +11 -0
  82. package/dist/src/app-catalog.js +1 -0
  83. package/dist/src/app-deployment-resolution.js +2 -0
  84. package/dist/src/app-helpers.js +1 -1
  85. package/dist/src/app-inventory-contract.js +1 -0
  86. package/dist/src/app-inventory.js +1 -0
  87. package/dist/src/app-launch.js +2 -0
  88. package/dist/src/app-lifecycle-facade.js +1 -0
  89. package/dist/src/app-lifecycle.js +3 -6
  90. package/dist/src/app-lifecycle2.js +2 -2
  91. package/dist/src/app-lifecycle3.js +1 -0
  92. package/dist/src/app-log-files.js +1 -1
  93. package/dist/src/app-log-reconnect.js +1 -1
  94. package/dist/src/app-log-runtime.js +1 -4
  95. package/dist/src/app-log-runtime2.js +4 -0
  96. package/dist/src/app-parsers.js +4 -0
  97. package/dist/src/app-resolution-cache.js +1 -0
  98. package/dist/src/app-resolution-facade.js +1 -0
  99. package/dist/src/app-resolution.js +2 -2
  100. package/dist/src/app-state.js +1 -2
  101. package/dist/src/application-lifecycle-interaction.js +1 -0
  102. package/dist/src/application-lifecycle-runtime.js +1 -0
  103. package/dist/src/apps-simctl.js +1 -0
  104. package/dist/src/archive.js +4 -0
  105. package/dist/src/artifact-download.js +1 -0
  106. package/dist/src/artifacts.d.ts +6 -2
  107. package/dist/src/artifacts.js +1 -1
  108. package/dist/src/async-lifecycle.js +1 -0
  109. package/dist/src/audio-probe-result.js +1 -0
  110. package/dist/src/audio-probe-runtime.js +1 -0
  111. package/dist/src/audio-probe-support.js +1 -0
  112. package/dist/src/auth-session.js +1 -1
  113. package/dist/src/auth.js +1 -1
  114. package/dist/src/back-mode.js +1 -0
  115. package/dist/src/{url.js → base-url.js} +1 -1
  116. package/dist/src/boot-diagnostics.js +2 -2
  117. package/dist/src/byte-limit-stream.js +1 -1
  118. package/dist/src/capabilities.js +1 -0
  119. package/dist/src/capture.js +1 -0
  120. package/dist/src/catalog.js +1 -0
  121. package/dist/src/cli-command-aliases.js +1 -0
  122. package/dist/src/cli-config.js +1 -1
  123. package/dist/src/cli-help.js +69 -50
  124. package/dist/src/cli-output.js +1 -1
  125. package/dist/src/cli-runner.js +1 -1
  126. package/dist/src/cli.js +4 -6
  127. package/dist/src/click-button.js +1 -0
  128. package/dist/src/client-metro-companion.js +1 -0
  129. package/dist/src/client-metro.js +1 -1
  130. package/dist/src/client-types.d.ts +255 -231
  131. package/dist/src/clipboard.js +1 -0
  132. package/dist/src/code-signature-cache.js +1 -0
  133. package/dist/src/code-signature.js +1 -0
  134. package/dist/src/color.js +1 -0
  135. package/dist/src/command-metadata.js +1 -1
  136. package/dist/src/command-schema.js +3 -3
  137. package/dist/src/command-surface.js +1 -1
  138. package/dist/src/command-tools.js +2 -2
  139. package/dist/src/command.js +1 -0
  140. package/dist/src/compatibility-policy.js +1 -0
  141. package/dist/src/config.js +1 -1
  142. package/dist/src/config2.js +1 -0
  143. package/dist/src/connection-runtime.js +1 -1
  144. package/dist/src/connection.js +5 -5
  145. package/dist/src/contracts.d.ts +1 -1
  146. package/dist/src/contracts.js +1 -1
  147. package/dist/src/daemon-client-lifecycle.js +1 -0
  148. package/dist/src/daemon-process.js +1 -0
  149. package/dist/src/daemon-registration.js +1 -0
  150. package/dist/src/daemon-shutdown-report.js +1 -1
  151. package/dist/src/daemon.js +2 -2
  152. package/dist/src/debug-symbols-facade.js +5 -0
  153. package/dist/src/deploy-result-target.js +1 -0
  154. package/dist/src/device-claim-inspection.js +1 -1
  155. package/dist/src/device-claim-rule.js +1 -0
  156. package/dist/src/device-input-state.d.ts +190 -3
  157. package/dist/src/device-inventory-context.js +1 -0
  158. package/dist/src/device-isolation.js +1 -0
  159. package/dist/src/device-release.js +1 -0
  160. package/dist/src/device-rotation.js +1 -0
  161. package/dist/src/device-selection-resolver.js +1 -0
  162. package/dist/src/device-session.js +1 -0
  163. package/dist/src/device.js +1 -1
  164. package/dist/src/device2.js +3 -2
  165. package/dist/src/diagnostics.js +3 -0
  166. package/dist/src/diagnostics2.js +1 -0
  167. package/dist/src/dispatch-resolve.js +1 -0
  168. package/dist/src/doctor-facade.js +1 -0
  169. package/dist/src/doctor-output.js +1 -0
  170. package/dist/src/doctor.js +1 -0
  171. package/dist/src/doctor2.js +1 -0
  172. package/dist/src/doctor3.js +1 -0
  173. package/dist/src/durable-resource.js +1 -0
  174. package/dist/src/entities.js +1 -1
  175. package/dist/src/error.js +2 -0
  176. package/dist/src/exec.js +1 -0
  177. package/dist/src/file.js +1 -0
  178. package/dist/src/find.js +1 -1
  179. package/dist/src/finders.js +1 -1
  180. package/dist/src/format.js +2 -0
  181. package/dist/src/generic-settle.js +1 -1
  182. package/dist/src/generic.js +1 -1
  183. package/dist/src/gesture-admission.js +1 -0
  184. package/dist/src/gesture-plan-types.js +1 -0
  185. package/dist/src/gesture-plan.js +1 -0
  186. package/dist/src/gesture-runtime.js +1 -0
  187. package/dist/src/harmonyos.js +1 -1
  188. package/dist/src/hdc.js +1 -1
  189. package/dist/src/helper.js +2 -2
  190. package/dist/src/host-file.js +1 -0
  191. package/dist/src/human-control-contract.js +1 -0
  192. package/dist/src/human-control.js +1 -0
  193. package/dist/src/index.d.ts +1 -1
  194. package/dist/src/index.js +1 -1
  195. package/dist/src/input-actions.js +1 -4
  196. package/dist/src/input-actions2.js +2 -1
  197. package/dist/src/install-artifact-facade.js +1 -0
  198. package/dist/src/install-source-network-transport.js +1 -0
  199. package/dist/src/install-source.d.ts +3 -10
  200. package/dist/src/install-source2.js +1 -1
  201. package/dist/src/interaction-positionals.js +1 -0
  202. package/dist/src/interaction-ref-policy.js +1 -0
  203. package/dist/src/interaction.js +1 -1
  204. package/dist/src/interaction2.js +1 -1
  205. package/dist/src/interactor-operation-catalog.js +1 -0
  206. package/dist/src/interactor-types.js +1 -0
  207. package/dist/src/interactor.js +6 -2
  208. package/dist/src/interactor2.js +1 -1
  209. package/dist/src/interactors.js +1 -1
  210. package/dist/src/internal/bin.d.ts +1 -1
  211. package/dist/src/internal/bin.js +1 -2
  212. package/dist/src/internal/companion-tunnel.d.ts +1 -1
  213. package/dist/src/internal/companion-tunnel.js +1 -1
  214. package/dist/src/internal/daemon.d.ts +1 -1
  215. package/dist/src/internal/daemon.js +2 -4
  216. package/dist/src/internal/png-worker.d.ts +4 -4
  217. package/dist/src/internal/png-worker.js +1 -1
  218. package/dist/src/internal/run-script-http-child.d.ts +4 -0
  219. package/dist/src/internal/run-script-http-child.js +1 -0
  220. package/dist/src/internal/update-check-entry.d.ts +1 -1
  221. package/dist/src/inventory.js +4 -4
  222. package/dist/src/inventory2.js +1 -1
  223. package/dist/src/inventory3.js +1 -1
  224. package/dist/src/inventory5.js +1 -1
  225. package/dist/src/inventory6.js +1 -1
  226. package/dist/src/ios-client.js +16 -0
  227. package/dist/src/ios-snapshot-acquisition.js +1 -0
  228. package/dist/src/ios-snapshot-adapter.js +1 -0
  229. package/dist/src/ios-snapshot-planning.js +1 -0
  230. package/dist/src/ios-snapshot-runtime.js +1 -0
  231. package/dist/src/json.js +1 -0
  232. package/dist/src/keyboard-actions.js +1 -0
  233. package/dist/src/launch-console.js +1 -0
  234. package/dist/src/lease-context.js +1 -1
  235. package/dist/src/lease-scope.js +1 -0
  236. package/dist/src/lease.js +1 -1
  237. package/dist/src/limrun-runtime-dependencies.js +1 -1
  238. package/dist/src/limrun.d.ts +1610 -7
  239. package/dist/src/limrun.js +1 -1
  240. package/dist/src/linux.js +1 -1
  241. package/dist/src/local-interactor-operation-set.js +1 -0
  242. package/dist/src/location-coordinates.js +1 -1
  243. package/dist/src/logcat.js +1 -1
  244. package/dist/src/macos-facade.js +1 -0
  245. package/dist/src/managed-device-scope.js +1 -0
  246. package/dist/src/mechanics.js +19 -0
  247. package/dist/src/metro.d.ts +4 -2
  248. package/dist/src/metro.js +1 -1
  249. package/dist/src/metro2.js +1 -1
  250. package/dist/src/mobile-snapshot-semantics.js +1 -1
  251. package/dist/src/multitouch-support.js +1 -0
  252. package/dist/src/numeric.js +1 -0
  253. package/dist/src/observability.js +1 -1
  254. package/dist/src/observation.js +2 -0
  255. package/dist/src/output-path.js +1 -1
  256. package/dist/src/owner-identity.js +3 -1
  257. package/dist/src/parameterized-recorded-fill.js +1 -0
  258. package/dist/src/parser.js +1 -1
  259. package/dist/src/perf-facade.js +2 -0
  260. package/dist/src/perf-runtime-operation-builder.js +1 -0
  261. package/dist/src/perf-runtime-plan.js +1 -0
  262. package/dist/src/perf-runtime.js +1 -0
  263. package/dist/src/perf.js +1 -4
  264. package/dist/src/physical-device-control.js +1 -1
  265. package/dist/src/physical-device-facade.js +1 -0
  266. package/dist/src/platform-request-scope.js +1 -0
  267. package/dist/src/platform-runtime-android-adb-host.js +1 -0
  268. package/dist/src/platform-runtime-android-mechanics.js +1 -0
  269. package/dist/src/platform-runtime-app-log-android-transport.js +1 -1
  270. package/dist/src/platform-runtime-app-log-process.js +1 -1
  271. package/dist/src/platform-runtime-apple-resources.js +1 -0
  272. package/dist/src/platform-runtime-host.js +1 -1
  273. package/dist/src/platform-runtime-managed-owner.js +1 -0
  274. package/dist/src/platform-runtime-network-web-transport.js +1 -1
  275. package/dist/src/platform-runtime-open-target.js +1 -1
  276. package/dist/src/platform-runtime-operation-host.js +4 -4
  277. package/dist/src/platform-runtime-runtime-hints.js +2 -2
  278. package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
  279. package/dist/src/platform-runtime-screen-recording-apple-runner-host.js +1 -1
  280. package/dist/src/platform-runtime-screen-recording-apple-runner-transport.js +1 -1
  281. package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
  282. package/dist/src/platform-runtime-screen-recording-apple-transport.js +1 -1
  283. package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
  284. package/dist/src/platform-runtime-screen-recording-harmony-host.js +1 -1
  285. package/dist/src/platform-runtime-screen-recording-process-host.js +1 -0
  286. package/dist/src/platform-runtime-screen-recording-web-host.js +1 -1
  287. package/dist/src/platform-runtime-unavailable.js +1 -0
  288. package/dist/src/platform-runtime.js +1 -1
  289. package/dist/src/platform-runtime2.js +1 -1
  290. package/dist/src/plist.js +1 -1
  291. package/dist/src/png-worker-contract.js +1 -1
  292. package/dist/src/prepare-kind.js +1 -0
  293. package/dist/src/process-exit.js +1 -1
  294. package/dist/src/process.js +1 -0
  295. package/dist/src/provider-device-runtime.js +1 -0
  296. package/dist/src/provider-session-ownership.js +2 -0
  297. package/dist/src/provider-webdriver.js +1 -1
  298. package/dist/src/provider.js +1 -1
  299. package/dist/src/providers.js +1 -0
  300. package/dist/src/proxy.js +2 -2
  301. package/dist/src/react-native-overlay.js +1 -0
  302. package/dist/src/react-native.js +1 -1
  303. package/dist/src/record-runtime.js +1 -1
  304. package/dist/src/record-trace.js +1 -1
  305. package/dist/src/rect-center.js +1 -0
  306. package/dist/src/register-builtins.js +1 -0
  307. package/dist/src/registry.js +39 -28
  308. package/dist/src/remote-config2.js +1 -1
  309. package/dist/src/replay-divergence.js +2 -0
  310. package/dist/src/replay.js +2 -2
  311. package/dist/src/reporting.js +8 -8
  312. package/dist/src/request-admission.js +1 -0
  313. package/dist/src/request-cancel.js +1 -0
  314. package/dist/src/request-cancellation.js +1 -0
  315. package/dist/src/request-progress-protocol.js +1 -0
  316. package/dist/src/request-providers.js +1 -0
  317. package/dist/src/request-runtime-binding.js +1 -0
  318. package/dist/src/request.js +1 -0
  319. package/dist/src/result-serialization.js +1 -0
  320. package/dist/src/retry.js +1 -0
  321. package/dist/src/rolldown-runtime.js +1 -1
  322. package/dist/src/runner-cache-metadata.js +2 -0
  323. package/dist/src/runner-client.js +1 -1
  324. package/dist/src/runner-disposal.js +1 -1
  325. package/dist/src/runner-operations-facade.js +1 -0
  326. package/dist/src/runner-owner-facade.js +1 -0
  327. package/dist/src/runner-owner-state.js +1 -0
  328. package/dist/src/runner-presentation.js +1 -0
  329. package/dist/src/runner-selector-query.js +1 -0
  330. package/dist/src/runner.js +1 -0
  331. package/dist/src/{runtime-transport.js → runtime-transport-hints.js} +1 -1
  332. package/dist/src/runtime.js +3 -3
  333. package/dist/src/runtime2.js +4 -4
  334. package/dist/src/runtime3.js +1 -1
  335. package/dist/src/runtime4.js +4 -3
  336. package/dist/src/runtime5.js +1 -1
  337. package/dist/src/runtime6.js +1 -1
  338. package/dist/src/runtime7.js +1 -1
  339. package/dist/src/runtime8.js +1 -1
  340. package/dist/src/runtime9.js +1 -1
  341. package/dist/src/scoped-provider.js +1 -1
  342. package/dist/src/screen-recording-completion.js +1 -0
  343. package/dist/src/screen-recording-live-handle.js +1 -0
  344. package/dist/src/screen-recording-options.js +1 -0
  345. package/dist/src/screen-recording-resource-recovery.js +1 -0
  346. package/dist/src/screen-recording-runtime.js +1 -0
  347. package/dist/src/screenshot-density.js +1 -1
  348. package/dist/src/screenshot-result.js +1 -6
  349. package/dist/src/screenshot-runtime.js +1 -0
  350. package/dist/src/screenshot.js +1 -1
  351. package/dist/src/screenshot2.js +1 -0
  352. package/dist/src/screenshot3.js +5 -0
  353. package/dist/src/script.js +1 -0
  354. package/dist/src/scroll-command.js +1 -0
  355. package/dist/src/scroll-gesture.js +1 -0
  356. package/dist/src/scroll-indicator.js +1 -0
  357. package/dist/src/sdk-batch-runner.d.ts +23 -6
  358. package/dist/src/sdk-batch-runner.js +2 -3
  359. package/dist/src/sdk-batch.js +2 -0
  360. package/dist/src/sdk-contracts.d.ts +127 -41
  361. package/dist/src/sdk-contracts.js +2 -2
  362. package/dist/src/sdk-device.js +1 -1
  363. package/dist/src/sdk-finders.js +1 -1
  364. package/dist/src/sdk-io.js +1 -1
  365. package/dist/src/sdk-remote-config.d.ts +1 -1
  366. package/dist/src/sdk-remote-config.js +1 -1
  367. package/dist/src/sdk-selectors.d.ts +472 -144
  368. package/dist/src/sdk-selectors.js +1 -1
  369. package/dist/src/selection.js +1 -0
  370. package/dist/src/selector-runtime.js +1 -1
  371. package/dist/src/selectors.js +1 -1
  372. package/dist/src/semantic-index.js +1 -0
  373. package/dist/src/server.js +4 -4
  374. package/dist/src/session-allocation.js +1 -0
  375. package/dist/src/session-artifact-paths.js +1 -0
  376. package/dist/src/session-paths.js +1 -0
  377. package/dist/src/session-repair-tombstone.js +1 -0
  378. package/dist/src/session-routing.js +1 -0
  379. package/dist/src/session-runtime-admission.js +1 -0
  380. package/dist/src/session-snapshot.js +1 -0
  381. package/dist/src/session-store.js +4 -0
  382. package/dist/src/session-target-evidence.js +1 -1
  383. package/dist/src/session2.js +5 -27
  384. package/dist/src/settings.js +1 -0
  385. package/dist/src/shared.js +2 -2
  386. package/dist/src/simctl-facade.js +1 -0
  387. package/dist/src/simctl.js +1 -1
  388. package/dist/src/simulator-facade.js +1 -0
  389. package/dist/src/simulator.js +1 -1
  390. package/dist/src/snapshot-capture-annotations.js +1 -0
  391. package/dist/src/snapshot-desktop-projection.js +1 -0
  392. package/dist/src/snapshot-diagnostics.js +1 -0
  393. package/dist/src/snapshot-process.js +1 -0
  394. package/dist/src/snapshot-quality-backend-capabilities.js +1 -0
  395. package/dist/src/snapshot-quality-verdict.js +1 -0
  396. package/dist/src/snapshot-runtime-binding.js +1 -0
  397. package/dist/src/snapshot-runtime.js +1 -1
  398. package/dist/src/snapshot-scope.js +1 -1
  399. package/dist/src/snapshot-state.js +1 -0
  400. package/dist/src/snapshot.js +1 -8
  401. package/dist/src/snapshot2.js +1 -1
  402. package/dist/src/snapshot3.js +1 -1
  403. package/dist/src/snapshot4.js +1 -0
  404. package/dist/src/src.js +1 -1
  405. package/dist/src/src2.js +1 -1
  406. package/dist/src/src3.js +1 -2
  407. package/dist/src/src4.js +1 -1
  408. package/dist/src/src5.js +1 -0
  409. package/dist/src/src6.js +1 -0
  410. package/dist/src/src7.js +2 -0
  411. package/dist/src/src8.js +115 -0
  412. package/dist/src/startup-recovery-fence.js +1 -0
  413. package/dist/src/status-markers.js +1 -0
  414. package/dist/src/string-enum.js +1 -1
  415. package/dist/src/success-text.js +1 -0
  416. package/dist/src/surface-snapshot.js +1 -0
  417. package/dist/src/surface-snapshot2.js +1 -0
  418. package/dist/src/takeover.js +5 -0
  419. package/dist/src/tool-provider-facade.js +1 -0
  420. package/dist/src/tool-provider.js +4 -3
  421. package/dist/src/tool-provider2.js +1 -1
  422. package/dist/src/tool-provider3.js +1 -1
  423. package/dist/src/toolchain-probe.js +2 -0
  424. package/dist/src/touch-runtime.js +1 -0
  425. package/dist/src/transport.js +3 -0
  426. package/dist/src/tree.js +1 -0
  427. package/dist/src/ttl-memo.js +1 -0
  428. package/dist/src/tv-remote.js +1 -0
  429. package/dist/src/type-text-runtime.js +1 -0
  430. package/dist/src/undici.js +99 -0
  431. package/dist/src/update-check.js +1 -1
  432. package/dist/src/verified-file.js +1 -1
  433. package/dist/src/version.js +1 -1
  434. package/dist/src/video.js +2 -2
  435. package/dist/src/web.js +2 -1
  436. package/dist/src/web2.js +1 -0
  437. package/dist/src/webdriver-ios-snapshot.js +1 -0
  438. package/dist/src/webdriver-source.js +1 -0
  439. package/linux/atspi-dump.py +54 -9
  440. package/package.json +56 -34
  441. package/server.json +9 -3
  442. package/android/ime-helper/dist/agent-device-android-ime-helper-0.20.10.apk.sha256 +0 -1
  443. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.20.10.apk +0 -0
  444. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.20.10.apk.sha256 +0 -1
  445. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CoordinateTextEntryTests.swift +0 -4
  446. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+FlatSnapshotFiltering.swift +0 -168
  447. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+LifecycleCacheTests.swift +0 -6
  448. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+RecordingTests.swift +0 -4
  449. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SelectorMatchPolicyTests.swift +0 -4
  450. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotPresentation.swift +0 -183
  451. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotPresentationTests.swift +0 -0
  452. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotTraversalIdentityTests.swift +0 -4
  453. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryPolicyTests.swift +0 -4
  454. package/dist/src/appearance.js +0 -1
  455. package/dist/src/apps.js +0 -5
  456. package/dist/src/audio-probe.js +0 -1
  457. package/dist/src/cli-grammar.js +0 -1
  458. package/dist/src/command-catalog.js +0 -1
  459. package/dist/src/debug-symbols.js +0 -5
  460. package/dist/src/device-input-state.js +0 -2
  461. package/dist/src/device-ready.js +0 -1
  462. package/dist/src/dispatch.js +0 -1
  463. package/dist/src/handler-utils.js +0 -1
  464. package/dist/src/helper-package-install.js +0 -1
  465. package/dist/src/host-process.js +0 -3
  466. package/dist/src/ime-lifecycle.js +0 -2
  467. package/dist/src/ime-recovery-marker.js +0 -1
  468. package/dist/src/input-actions3.js +0 -1
  469. package/dist/src/install-artifact.js +0 -1
  470. package/dist/src/install-artifact2.js +0 -1
  471. package/dist/src/interaction-common.js +0 -1
  472. package/dist/src/interaction-runtime.js +0 -1
  473. package/dist/src/interaction-snapshot.js +0 -1
  474. package/dist/src/manifest.js +0 -1
  475. package/dist/src/method-scope.js +0 -1
  476. package/dist/src/png-resize.js +0 -1
  477. package/dist/src/process-lock.js +0 -1
  478. package/dist/src/runner-lease.js +0 -1
  479. package/dist/src/runner-sequence.js +0 -1
  480. package/dist/src/script-source-bundle.js +0 -16
  481. package/dist/src/sdk-android-adb.d.ts +0 -245
  482. package/dist/src/sdk-android-adb.js +0 -4
  483. package/dist/src/sdk.js +0 -1
  484. package/dist/src/setting-state.js +0 -1
  485. package/dist/src/shell-quote.js +0 -1
  486. package/dist/src/snapshot-session.js +0 -1
  487. package/dist/src/timing-safe-equal.js +0 -1
  488. package/dist/src/unsupported-interactor.js +0 -1
  489. package/dist/src/verdict.js +0 -1
  490. /package/dist/src/{recording-telemetry.js → telemetry.js} +0 -0
@@ -1,11 +1,17 @@
1
1
  import XCTest
2
+ import AgentDeviceSnapshotPresentation
2
3
 
3
4
  #if os(macOS)
4
5
  import CoreGraphics
5
6
  #endif
6
7
 
8
+ private struct RunnerUnsupportedOperationError: LocalizedError {
9
+ let message: String
10
+
11
+ var errorDescription: String? { message }
12
+ }
13
+
7
14
  private enum RunnerInterfaceOrientation {
8
- static let unknown = 0
9
15
  static let portrait = 1
10
16
  static let portraitUpsideDown = 2
11
17
  static let landscapeRight = 3
@@ -18,11 +24,18 @@ extension RunnerTests {
18
24
  case sampled
19
25
  }
20
26
 
21
- enum SynthesizedDragProfile {
27
+ enum SynthesizedDragProfile: Equatable {
22
28
  case continuous
29
+ case controlledScroll
23
30
  case fastSwipe
24
31
  }
25
32
 
33
+ func scrollDragProfile(
34
+ releaseBehavior: ScrollReleaseBehavior?
35
+ ) -> SynthesizedDragProfile {
36
+ releaseBehavior == .inertial ? .fastSwipe : .controlledScroll
37
+ }
38
+
26
39
  struct TouchVisualizationFrame {
27
40
  let x: Double
28
41
  let y: Double
@@ -257,6 +270,23 @@ extension RunnerTests {
257
270
  )
258
271
  }
259
272
 
273
+ /// Shared ordering for point-hit candidates: smallest area wins, then top-to-bottom,
274
+ /// left-to-right, then stable element-type order for ties.
275
+ func smallestElementFirst(_ left: XCUIElement, _ right: XCUIElement) -> Bool {
276
+ let leftArea = max(1, left.frame.width * left.frame.height)
277
+ let rightArea = max(1, right.frame.width * right.frame.height)
278
+ if leftArea != rightArea {
279
+ return leftArea < rightArea
280
+ }
281
+ if left.frame.minY != right.frame.minY {
282
+ return left.frame.minY < right.frame.minY
283
+ }
284
+ if left.frame.minX != right.frame.minX {
285
+ return left.frame.minX < right.frame.minX
286
+ }
287
+ return left.elementType.rawValue < right.elementType.rawValue
288
+ }
289
+
260
290
  func readTextAt(app: XCUIApplication, x: Double, y: Double) -> String? {
261
291
  let point = CGPoint(x: x, y: y)
262
292
  let textInputCandidates = textInputCandidatesAt(app: app, point: point)
@@ -270,20 +300,7 @@ extension RunnerTests {
270
300
  .filter { element in
271
301
  element.exists && !element.frame.isEmpty && element.frame.contains(point)
272
302
  }
273
- .sorted { left, right in
274
- let leftArea = max(1, left.frame.width * left.frame.height)
275
- let rightArea = max(1, right.frame.width * right.frame.height)
276
- if leftArea != rightArea {
277
- return leftArea < rightArea
278
- }
279
- if left.frame.minY != right.frame.minY {
280
- return left.frame.minY < right.frame.minY
281
- }
282
- if left.frame.minX != right.frame.minX {
283
- return left.frame.minX < right.frame.minX
284
- }
285
- return left.elementType.rawValue < right.elementType.rawValue
286
- }
303
+ .sorted(by: smallestElementFirst)
287
304
 
288
305
  for element in candidates where prefersExpandedTextRead(element) {
289
306
  if let text = readableText(for: element) {
@@ -325,20 +342,7 @@ extension RunnerTests {
325
342
  point: point
326
343
  )
327
344
  }
328
- .sorted { left, right in
329
- let leftArea = max(1, left.frame.width * left.frame.height)
330
- let rightArea = max(1, right.frame.width * right.frame.height)
331
- if leftArea != rightArea {
332
- return leftArea < rightArea
333
- }
334
- if left.frame.minY != right.frame.minY {
335
- return left.frame.minY < right.frame.minY
336
- }
337
- if left.frame.minX != right.frame.minX {
338
- return left.frame.minX < right.frame.minX
339
- }
340
- return left.elementType.rawValue < right.elementType.rawValue
341
- }
345
+ .sorted(by: smallestElementFirst)
342
346
  }
343
347
  }
344
348
 
@@ -368,16 +372,6 @@ extension RunnerTests {
368
372
  }
369
373
  }
370
374
 
371
- func findScopeElement(app: XCUIApplication, scope: String) -> XCUIElement? {
372
- let predicate = NSPredicate(
373
- format: "label CONTAINS[c] %@ OR identifier CONTAINS[c] %@",
374
- scope,
375
- scope
376
- )
377
- let element = app.descendants(matching: .any).matching(predicate).firstMatch
378
- return element.exists ? element : nil
379
- }
380
-
381
375
  func tapAt(app: XCUIApplication, x: Double, y: Double) -> RunnerInteractionOutcome {
382
376
  if let outcome = selectFocusedTvElement(app: app, point: CGPoint(x: x, y: y), action: "tap") {
383
377
  return outcome
@@ -394,30 +388,14 @@ extension RunnerTests {
394
388
  case "secondary":
395
389
  coordinate.rightClick()
396
390
  case "middle":
397
- throw NSError(
398
- domain: "AgentDeviceRunner",
399
- code: 1,
400
- userInfo: [NSLocalizedDescriptionKey: "middle mouse button is not supported"]
401
- )
391
+ throw RunnerUnsupportedOperationError(message: "middle mouse button is not supported")
402
392
  default:
403
- throw NSError(
404
- domain: "AgentDeviceRunner",
405
- code: 1,
406
- userInfo: [NSLocalizedDescriptionKey: "unsupported mouse button: \(button)"]
407
- )
393
+ throw RunnerUnsupportedOperationError(message: "unsupported mouse button: \(button)")
408
394
  }
409
395
  #elseif os(tvOS)
410
- throw NSError(
411
- domain: "AgentDeviceRunner",
412
- code: 1,
413
- userInfo: [NSLocalizedDescriptionKey: "mouseClick is not supported on tvOS"]
414
- )
396
+ throw RunnerUnsupportedOperationError(message: "mouseClick is not supported on tvOS")
415
397
  #else
416
- throw NSError(
417
- domain: "AgentDeviceRunner",
418
- code: 1,
419
- userInfo: [NSLocalizedDescriptionKey: "mouseClick is only supported on macOS"]
420
- )
398
+ throw RunnerUnsupportedOperationError(message: "mouseClick is only supported on macOS")
421
399
  #endif
422
400
  }
423
401
 
@@ -425,22 +403,16 @@ extension RunnerTests {
425
403
  app: XCUIApplication,
426
404
  x: Double,
427
405
  y: Double,
428
- direction: String,
406
+ direction: RunnerScrollDirection,
429
407
  pixels: Double,
430
408
  durationMs: Double?
431
409
  ) throws {
432
410
  #if os(macOS)
433
- guard let events = desktopScrollWheelDeltaEvents(
411
+ let events = desktopScrollWheelDeltaEvents(
434
412
  direction: direction,
435
413
  pixels: pixels,
436
414
  durationMs: durationMs
437
- ) else {
438
- throw NSError(
439
- domain: "AgentDeviceRunner",
440
- code: 1,
441
- userInfo: [NSLocalizedDescriptionKey: "unsupported desktop scroll direction: \(direction)"]
442
- )
443
- }
415
+ )
444
416
 
445
417
  let coordinate = interactionCoordinate(app: app, x: x, y: y)
446
418
  let interval = desktopScrollEventIntervalSeconds(durationMs: durationMs, eventCount: events.count)
@@ -456,44 +428,35 @@ extension RunnerTests {
456
428
  }
457
429
  }
458
430
  #elseif os(tvOS)
459
- throw NSError(
460
- domain: "AgentDeviceRunner",
461
- code: 1,
462
- userInfo: [NSLocalizedDescriptionKey: "desktopScroll is not supported on tvOS"]
463
- )
431
+ throw RunnerUnsupportedOperationError(message: "desktopScroll is not supported on tvOS")
464
432
  #else
465
- throw NSError(
466
- domain: "AgentDeviceRunner",
467
- code: 1,
468
- userInfo: [NSLocalizedDescriptionKey: "desktopScroll is only supported on macOS"]
469
- )
433
+ throw RunnerUnsupportedOperationError(message: "desktopScroll is only supported on macOS")
470
434
  #endif
471
435
  }
472
436
 
473
- func desktopScrollWheelDeltas(direction: String, pixels: Double) -> (vertical: Int32, horizontal: Int32)? {
437
+ func desktopScrollWheelDeltas(
438
+ direction: RunnerScrollDirection,
439
+ pixels: Double
440
+ ) -> (vertical: Int32, horizontal: Int32) {
474
441
  let magnitude = Int32(max(1, min(Double(Int32.max), pixels.rounded())))
475
442
  switch direction {
476
- case "up":
443
+ case .up:
477
444
  return (vertical: magnitude, horizontal: 0)
478
- case "down":
445
+ case .down:
479
446
  return (vertical: -magnitude, horizontal: 0)
480
- case "left":
447
+ case .left:
481
448
  return (vertical: 0, horizontal: magnitude)
482
- case "right":
449
+ case .right:
483
450
  return (vertical: 0, horizontal: -magnitude)
484
- default:
485
- return nil
486
451
  }
487
452
  }
488
453
 
489
454
  func desktopScrollWheelDeltaEvents(
490
- direction: String,
455
+ direction: RunnerScrollDirection,
491
456
  pixels: Double,
492
457
  durationMs: Double?
493
- ) -> [(vertical: Int32, horizontal: Int32)]? {
494
- guard let totalDeltas = desktopScrollWheelDeltas(direction: direction, pixels: pixels) else {
495
- return nil
496
- }
458
+ ) -> [(vertical: Int32, horizontal: Int32)] {
459
+ let totalDeltas = desktopScrollWheelDeltas(direction: direction, pixels: pixels)
497
460
  let magnitude = max(abs(Int(totalDeltas.vertical)), abs(Int(totalDeltas.horizontal)))
498
461
  let duration = max(0, durationMs ?? 0)
499
462
  let requestedEventCount = duration > 0 ? Int(ceil(duration / 16.0)) : 1
@@ -646,6 +609,15 @@ extension RunnerTests {
646
609
  y2: Double(end.y),
647
610
  durationMs: durationMs
648
611
  )
612
+ case .controlledScroll:
613
+ RunnerSynthesizedGesture.synthesizeControlledScroll(
614
+ withApplication: app,
615
+ x: Double(start.x),
616
+ y: Double(start.y),
617
+ x2: Double(end.x),
618
+ y2: Double(end.y),
619
+ durationMs: durationMs
620
+ )
649
621
  case .fastSwipe:
650
622
  RunnerSynthesizedGesture.synthesizeSwipe(
651
623
  withApplication: app,
@@ -108,7 +108,7 @@ extension RunnerTests {
108
108
  // old PID before refreshCachedTargetIfProcessChanged can observe it.
109
109
  clearSnapshotXCTestChannelPenalty(reason: "external_app_relaunch")
110
110
  clearPrivateAXAcceptedDepth(reason: "external_app_relaunch")
111
- needsFirstInteractionDelay = true
111
+ beginFirstInteractionStabilization()
112
112
  return Response(ok: true, data: DataPayload(message: "target reset"))
113
113
  }
114
114
 
@@ -132,7 +132,7 @@ extension RunnerTests {
132
132
  clearSnapshotXCTestChannelPenalty(reason: "target_process_changed")
133
133
  clearPrivateAXAcceptedDepth(reason: "target_process_changed")
134
134
  snapshotXCTestPenaltyWarmupExemptionPending = true
135
- needsFirstInteractionDelay = true
135
+ beginFirstInteractionStabilization()
136
136
  }
137
137
 
138
138
  static func processIdentifier(of target: XCUIApplication) -> Int? {
@@ -205,7 +205,7 @@ extension RunnerTests {
205
205
  currentAppProcessIdentifier = Self.processIdentifier(of: target)
206
206
  clearRememberedTextEntryTap()
207
207
  snapshotXCTestPenaltyWarmupExemptionPending = false
208
- needsFirstInteractionDelay = true
208
+ beginFirstInteractionStabilization()
209
209
  return target
210
210
  }
211
211
 
@@ -320,12 +320,19 @@ extension RunnerTests {
320
320
  sleepFor(postSnapshotInteractionDelay)
321
321
  needsPostSnapshotInteractionDelay = false
322
322
  }
323
- if needsFirstInteractionDelay {
324
- sleepFor(firstInteractionAfterActivateDelay)
325
- needsFirstInteractionDelay = false
323
+ if let readyUptime = firstInteractionReadyUptime {
324
+ sleepFor(readyUptime - ProcessInfo.processInfo.systemUptime)
325
+ firstInteractionReadyUptime = nil
326
326
  }
327
327
  }
328
328
 
329
+ /// Start the post-activation settling window. Measured from now, so the time the caller spends
330
+ /// getting back to us counts towards it instead of being charged twice.
331
+ func beginFirstInteractionStabilization() {
332
+ firstInteractionReadyUptime =
333
+ ProcessInfo.processInfo.systemUptime + firstInteractionAfterActivateDelay
334
+ }
335
+
329
336
  func sleepFor(_ delay: TimeInterval) {
330
337
  guard delay > 0 else { return }
331
338
  // Keep XCTest/UI sources moving during command-local pauses such as delayed typing.
@@ -1,3 +1,5 @@
1
+ import AgentDeviceSnapshotPresentation
2
+
1
3
  // MARK: - Wire Models
2
4
 
3
5
  enum CommandType: String, Codable {
@@ -132,6 +134,7 @@ struct Command: Codable {
132
134
  let direction: String?
133
135
  let amount: Double?
134
136
  let pixels: Double?
137
+ let scrollReleaseBehavior: ScrollReleaseBehavior?
135
138
  let orientation: String?
136
139
  let gesturePlan: RunnerGesturePlan?
137
140
  let outPath: String?
@@ -148,6 +151,11 @@ struct Command: Codable {
148
151
  let steps: [SequenceStep]?
149
152
  }
150
153
 
154
+ enum ScrollReleaseBehavior: String, Codable {
155
+ case controlled
156
+ case inertial
157
+ }
158
+
151
159
  /// Canonical one- or two-pointer plan produced by the portable TypeScript planner.
152
160
  struct RunnerGesturePlan: Codable {
153
161
  let topology: String
@@ -207,14 +215,8 @@ struct SequenceStepResult: Codable {
207
215
 
208
216
  struct Response: Codable {
209
217
  let ok: Bool
210
- let data: DataPayload?
211
- let error: ErrorPayload?
212
-
213
- init(ok: Bool, data: DataPayload? = nil, error: ErrorPayload? = nil) {
214
- self.ok = ok
215
- self.data = data
216
- self.error = error
217
- }
218
+ var data: DataPayload?
219
+ var error: ErrorPayload?
218
220
  }
219
221
 
220
222
  extension Response {
@@ -230,161 +232,76 @@ extension Response {
230
232
  }
231
233
 
232
234
  struct DataPayload: Codable {
233
- let message: String?
234
- let imageBase64: String?
235
- let text: String?
236
- let found: Bool?
237
- let items: [String]?
238
- let nodes: [PresentedNode]?
239
- let truncated: Bool?
240
- let snapshotQuality: SnapshotQuality?
241
- let gestureStartUptimeMs: Double?
242
- let gestureEndUptimeMs: Double?
243
- let x: Double?
244
- let y: Double?
245
- let x2: Double?
246
- let y2: Double?
247
- let referenceWidth: Double?
248
- let referenceHeight: Double?
235
+ var message: String?
236
+ var imageBase64: String?
237
+ var text: String?
238
+ var found: Bool?
239
+ var items: [String]?
240
+ var nodes: [PresentedNode]?
241
+ var truncated: Bool?
242
+ var qualityPayload: SnapshotQualityPayload? = nil
243
+ var snapshotQuality: SnapshotQuality?
244
+ var gestureStartUptimeMs: Double?
245
+ var gestureEndUptimeMs: Double?
246
+ var x: Double?
247
+ var y: Double?
248
+ var x2: Double?
249
+ var y2: Double?
250
+ var referenceWidth: Double?
251
+ var referenceHeight: Double?
249
252
  var currentUptimeMs: Double?
250
- let commandId: String?
251
- let lifecycleState: String?
252
- let lifecycleCommand: String?
253
- let lifecycleResponseOk: Bool?
254
- let lifecycleResponseJson: String?
255
- let lifecycleErrorCode: String?
256
- let lifecycleErrorMessage: String?
257
- let lifecycleErrorHint: String?
258
- let visible: Bool?
259
- let wasVisible: Bool?
260
- let dismissed: Bool?
261
- let keyboardDismissMechanism: String?
262
- let orientation: String?
263
- let gestureFallback: String?
264
- let gestureFallbackMessage: String?
265
- let gestureFallbackHint: String?
266
- let maestroNonHittableCoordinateFallbackUsed: Bool?
267
- let textEntryRoute: String?
268
- let runnerFatal: Bool?
269
- let runnerFatalReason: String?
270
- let completedSteps: Int?
271
- let failedStepIndex: Int?
272
- let sequenceResults: [SequenceStepResult]?
253
+ var commandId: String?
254
+ var lifecycleState: String?
255
+ var lifecycleCommand: String?
256
+ var lifecycleResponseOk: Bool?
257
+ var lifecycleResponseJson: String?
258
+ var lifecycleErrorCode: String?
259
+ var lifecycleErrorMessage: String?
260
+ var lifecycleErrorHint: String?
261
+ var visible: Bool?
262
+ var wasVisible: Bool?
263
+ var dismissed: Bool?
264
+ var keyboardDismissMechanism: String?
265
+ var orientation: String?
266
+ var gestureFallback: String?
267
+ var gestureFallbackMessage: String?
268
+ var gestureFallbackHint: String?
269
+ var maestroNonHittableCoordinateFallbackUsed: Bool?
270
+ var textEntryRoute: String?
271
+ var runnerFatal: Bool?
272
+ var runnerFatalReason: String?
273
+ var completedSteps: Int?
274
+ var failedStepIndex: Int?
275
+ var sequenceResults: [SequenceStepResult]?
276
+ }
273
277
 
274
- init(
275
- message: String? = nil,
276
- imageBase64: String? = nil,
277
- text: String? = nil,
278
- found: Bool? = nil,
279
- items: [String]? = nil,
280
- nodes: [PresentedNode]? = nil,
281
- truncated: Bool? = nil,
282
- snapshotQuality: SnapshotQuality? = nil,
283
- gestureStartUptimeMs: Double? = nil,
284
- gestureEndUptimeMs: Double? = nil,
285
- x: Double? = nil,
286
- y: Double? = nil,
287
- x2: Double? = nil,
288
- y2: Double? = nil,
289
- referenceWidth: Double? = nil,
290
- referenceHeight: Double? = nil,
291
- currentUptimeMs: Double? = nil,
292
- commandId: String? = nil,
293
- lifecycleState: String? = nil,
294
- lifecycleCommand: String? = nil,
295
- lifecycleResponseOk: Bool? = nil,
296
- lifecycleResponseJson: String? = nil,
297
- lifecycleErrorCode: String? = nil,
298
- lifecycleErrorMessage: String? = nil,
299
- lifecycleErrorHint: String? = nil,
300
- visible: Bool? = nil,
301
- wasVisible: Bool? = nil,
302
- dismissed: Bool? = nil,
303
- keyboardDismissMechanism: String? = nil,
304
- orientation: String? = nil,
305
- gestureFallback: String? = nil,
306
- gestureFallbackMessage: String? = nil,
307
- gestureFallbackHint: String? = nil,
308
- maestroNonHittableCoordinateFallbackUsed: Bool? = nil,
309
- textEntryRoute: String? = nil,
310
- runnerFatal: Bool? = nil,
311
- runnerFatalReason: String? = nil,
312
- completedSteps: Int? = nil,
313
- failedStepIndex: Int? = nil,
314
- sequenceResults: [SequenceStepResult]? = nil
315
- ) {
316
- self.message = message
317
- self.imageBase64 = imageBase64
318
- self.text = text
319
- self.found = found
320
- self.items = items
278
+ struct SnapshotQualityPayload: Codable {
279
+ let nodes: [PresentedNode]
280
+ let truncated: Bool
281
+ let scope: String?
282
+
283
+ init(nodes: [PresentedNode], truncated: Bool) {
321
284
  self.nodes = nodes
322
285
  self.truncated = truncated
323
- self.snapshotQuality = snapshotQuality
324
- self.gestureStartUptimeMs = gestureStartUptimeMs
325
- self.gestureEndUptimeMs = gestureEndUptimeMs
326
- self.x = x
327
- self.y = y
328
- self.x2 = x2
329
- self.y2 = y2
330
- self.referenceWidth = referenceWidth
331
- self.referenceHeight = referenceHeight
332
- self.currentUptimeMs = currentUptimeMs
333
- self.commandId = commandId
334
- self.lifecycleState = lifecycleState
335
- self.lifecycleCommand = lifecycleCommand
336
- self.lifecycleResponseOk = lifecycleResponseOk
337
- self.lifecycleResponseJson = lifecycleResponseJson
338
- self.lifecycleErrorCode = lifecycleErrorCode
339
- self.lifecycleErrorMessage = lifecycleErrorMessage
340
- self.lifecycleErrorHint = lifecycleErrorHint
341
- self.visible = visible
342
- self.wasVisible = wasVisible
343
- self.dismissed = dismissed
344
- self.keyboardDismissMechanism = keyboardDismissMechanism
345
- self.orientation = orientation
346
- self.gestureFallback = gestureFallback
347
- self.gestureFallbackMessage = gestureFallbackMessage
348
- self.gestureFallbackHint = gestureFallbackHint
349
- self.maestroNonHittableCoordinateFallbackUsed = maestroNonHittableCoordinateFallbackUsed
350
- self.textEntryRoute = textEntryRoute
351
- self.runnerFatal = runnerFatal
352
- self.runnerFatalReason = runnerFatalReason
353
- self.completedSteps = completedSteps
354
- self.failedStepIndex = failedStepIndex
355
- self.sequenceResults = sequenceResults
286
+ self.scope = nil
356
287
  }
357
- }
358
-
359
- struct ErrorPayload: Codable {
360
- let code: String?
361
- let message: String
362
- let hint: String?
363
288
 
364
- init(code: String? = nil, message: String, hint: String? = nil) {
365
- self.code = code
366
- self.message = message
367
- self.hint = hint
289
+ private enum CodingKeys: String, CodingKey {
290
+ case nodes
291
+ case truncated
292
+ case scope
368
293
  }
369
- }
370
294
 
371
- struct SnapshotRect: Codable {
372
- let x: Double
373
- let y: Double
374
- let width: Double
375
- let height: Double
295
+ func encode(to encoder: Encoder) throws {
296
+ var container = encoder.container(keyedBy: CodingKeys.self)
297
+ try container.encode(nodes, forKey: .nodes)
298
+ try container.encode(truncated, forKey: .truncated)
299
+ try container.encodeNil(forKey: .scope)
300
+ }
376
301
  }
377
302
 
378
- struct PresentationOptions {
379
- let interactiveOnly: Bool
380
- let depth: Int?
381
- let scope: String?
382
- let raw: Bool
383
- /// Internal daemon ask: capture with this backend first regardless of channel
384
- /// health ("private-ax"). Same-backend evidence probes (tap-outcome
385
- /// corroboration) must be captured the way their baseline was.
386
- var preferredBackend: String? = nil
387
- /// Read UIAccessibilityCustomActions for merged leaves. Opt-in: each element
388
- /// costs its own AX round trip (see RunnerAXSnapshotBridge).
389
- var customActions: Bool = false
303
+ struct ErrorPayload: Codable {
304
+ var code: String?
305
+ let message: String
306
+ var hint: String?
390
307
  }
@@ -0,0 +1,12 @@
1
+ import XCTest
2
+
3
+ extension RunnerTests {
4
+ func privateAXElementType(rawElementType: Int) -> XCUIElement.ElementType? {
5
+ guard let raw = UInt(exactly: rawElementType),
6
+ let type = XCUIElement.ElementType(rawValue: raw)
7
+ else {
8
+ return nil
9
+ }
10
+ return type
11
+ }
12
+ }