agent-device 0.21.0 → 0.21.2

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 (328) hide show
  1. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.0.apk → agent-device-android-ime-helper-0.21.2.apk} +0 -0
  2. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.2.apk.sha256 +1 -0
  3. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.0.manifest.json → agent-device-android-ime-helper-0.21.2.manifest.json} +4 -4
  4. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.2.apk +0 -0
  5. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.2.apk.sha256 +1 -0
  6. package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.0.manifest.json → agent-device-android-snapshot-helper-0.21.2.manifest.json} +6 -6
  7. package/apple/snapshot-bridge/README.md +58 -1
  8. package/apple/snapshot-bridge/SnapshotBridge.m +6 -0
  9. package/apple/snapshot-bridge/SnapshotBridgeCapture.h +25 -0
  10. package/apple/snapshot-bridge/SnapshotBridgeCapture.m +138 -0
  11. package/apple/snapshot-bridge/SnapshotBridgeRuntime.h +1 -0
  12. package/apple/snapshot-bridge/SnapshotBridgeRuntime.m +32 -3
  13. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAXSnapshotBridge.h +12 -0
  14. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAXSnapshotBridge.m +20 -0
  15. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerScrollViewportPolicy.swift +413 -0
  16. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSelectorMatchPolicy.swift +15 -15
  17. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSystemSurfaceHostPolicy.swift +72 -0
  18. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTapPointPolicy.swift +63 -14
  19. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AXSnapshotFallback.swift +668 -82
  20. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +48 -4
  21. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+BlockingSystemModalResolution.swift +39 -4
  22. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +1078 -211
  23. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +290 -0
  24. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Environment.swift +1 -1
  25. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Exceptions.swift +10 -10
  26. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Interaction.swift +250 -74
  27. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Keyboard.swift +101 -42
  28. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +13 -13
  29. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +55 -43
  30. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +71 -4
  31. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+PrivateAXPresentation.swift +144 -7
  32. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScreenRecorder.swift +13 -1
  33. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScrollGesture.swift +216 -17
  34. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SequenceExecution.swift +206 -22
  35. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +289 -42
  36. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotBackendCapabilities.swift +92 -22
  37. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCapturePlan.swift +617 -122
  38. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotTiming.swift +79 -4
  39. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedCommitDeadline.swift +71 -71
  40. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedGesturePolicy.swift +92 -6
  41. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +67 -67
  42. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SystemModal.swift +4 -4
  43. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +17 -17
  44. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +30 -30
  45. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryReadiness.swift +31 -31
  46. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextInputCandidatePolicy.swift +28 -0
  47. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextInputProbe.swift +101 -0
  48. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +19 -19
  49. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +55 -17
  50. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TvRemote.swift +26 -5
  51. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +126 -75
  52. package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/RecordingExportSupport.swift +8 -12
  53. package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-overlay.swift +9 -9
  54. package/dist/src/absence-observation-errors.js +1 -0
  55. package/dist/src/adapter.js +1 -1
  56. package/dist/src/adb-executor.js +1 -1
  57. package/dist/src/adb-failure.js +1 -1
  58. package/dist/src/agent-browser-lifecycle.js +1 -1
  59. package/dist/src/agent-browser-process-record.js +1 -1
  60. package/dist/src/agent-browser-provider.js +1 -1
  61. package/dist/src/agent-browser-tool.js +1 -1
  62. package/dist/src/agent-device-client.js +2 -2
  63. package/dist/src/ai-sdk.d.ts +1 -1
  64. package/dist/src/ai-sdk.js +1 -1
  65. package/dist/src/alert-runtime.js +1 -1
  66. package/dist/src/android-input-ownership.js +1 -1
  67. package/dist/src/app-catalog.js +1 -1
  68. package/dist/src/app-deployment-resolution.js +1 -1
  69. package/dist/src/app-helpers.js +1 -1
  70. package/dist/src/app-inventory-contract.js +1 -1
  71. package/dist/src/app-inventory.js +1 -1
  72. package/dist/src/app-launch.js +2 -2
  73. package/dist/src/app-lifecycle.js +3 -3
  74. package/dist/src/app-lifecycle2.js +1 -1
  75. package/dist/src/app-log-files.js +1 -1
  76. package/dist/src/app-log-runtime2.js +3 -3
  77. package/dist/src/app-resolution.js +1 -1
  78. package/dist/src/apple-runner-platform.js +1 -0
  79. package/dist/src/application-lifecycle-interaction.js +1 -1
  80. package/dist/src/archive.js +1 -1
  81. package/dist/src/artifact-download.js +1 -1
  82. package/dist/src/auth-session.js +1 -1
  83. package/dist/src/auth.js +1 -1
  84. package/dist/src/back-mode.js +1 -1
  85. package/dist/src/backend-snapshot-options.js +1 -1
  86. package/dist/src/boot-diagnostics.js +1 -1
  87. package/dist/src/browser-launch.js +1 -0
  88. package/dist/src/capture.js +1 -1
  89. package/dist/src/catalog.js +1 -1
  90. package/dist/src/cli-config.js +1 -1
  91. package/dist/src/cli-help.js +30 -26
  92. package/dist/src/cli.js +4 -4
  93. package/dist/src/click-button.js +1 -1
  94. package/dist/src/client-metro-companion.js +1 -1
  95. package/dist/src/client-metro.js +1 -1
  96. package/dist/src/client-types.d.ts +28 -13
  97. package/dist/src/code-signature-cache.js +1 -1
  98. package/dist/src/code-signature.js +1 -1
  99. package/dist/src/command-metadata.js +1 -1
  100. package/dist/src/command-schema.js +3 -3
  101. package/dist/src/command-tools.js +2 -2
  102. package/dist/src/command.js +1 -1
  103. package/dist/src/config.js +1 -1
  104. package/dist/src/connection-runtime.js +1 -1
  105. package/dist/src/connection.js +3 -3
  106. package/dist/src/contracts.d.ts +1 -1
  107. package/dist/src/contracts.js +1 -1
  108. package/dist/src/daemon-client-lifecycle.js +1 -1
  109. package/dist/src/daemon-process.js +1 -1
  110. package/dist/src/daemon-shutdown-report.js +1 -1
  111. package/dist/src/daemon.js +1 -1
  112. package/dist/src/debug-symbols-facade.js +1 -1
  113. package/dist/src/device-boot.js +1 -0
  114. package/dist/src/device-claim-inspection.js +1 -1
  115. package/dist/src/device-claim-rule.js +1 -1
  116. package/dist/src/device-input-state.d.ts +1 -1
  117. package/dist/src/device-inventory-context.js +1 -1
  118. package/dist/src/device-rotation.js +1 -1
  119. package/dist/src/device-selection-resolver.js +1 -1
  120. package/dist/src/device-session.js +1 -1
  121. package/dist/src/device2.js +1 -1
  122. package/dist/src/diagnostics.js +1 -1
  123. package/dist/src/dispatch-resolve.js +1 -1
  124. package/dist/src/doctor2.js +1 -1
  125. package/dist/src/durable-resource.js +1 -1
  126. package/dist/src/engine-eval-script.js +1 -0
  127. package/dist/src/error.js +1 -1
  128. package/dist/src/exec.js +1 -1
  129. package/dist/src/file.js +1 -1
  130. package/dist/src/find.js +1 -1
  131. package/dist/src/finders.js +1 -1
  132. package/dist/src/format.js +1 -2
  133. package/dist/src/generic-settle.js +1 -1
  134. package/dist/src/gesture-plan.js +1 -1
  135. package/dist/src/gesture-runtime.js +1 -1
  136. package/dist/src/harmonyos.js +1 -1
  137. package/dist/src/hdc.js +1 -1
  138. package/dist/src/helper.js +2 -2
  139. package/dist/src/human-control-contract.js +1 -1
  140. package/dist/src/human-control.js +1 -1
  141. package/dist/src/index.d.ts +1 -1
  142. package/dist/src/index.js +1 -1
  143. package/dist/src/input-actions.js +1 -1
  144. package/dist/src/input-actions2.js +2 -2
  145. package/dist/src/install-artifact-facade.js +1 -1
  146. package/dist/src/install-source-network-transport.js +1 -1
  147. package/dist/src/install-source2.js +1 -1
  148. package/dist/src/interaction-positionals.js +1 -1
  149. package/dist/src/interaction-ref-policy.js +1 -1
  150. package/dist/src/interaction.js +1 -1
  151. package/dist/src/interaction2.js +1 -1
  152. package/dist/src/interactor.js +5 -5
  153. package/dist/src/interactor2.js +1 -1
  154. package/dist/src/interactors.js +1 -1
  155. package/dist/src/internal/bin.js +1 -1
  156. package/dist/src/internal/daemon.js +2 -2
  157. package/dist/src/internal/png-worker.d.ts +3 -0
  158. package/dist/src/internal/png-worker.js +1 -1
  159. package/dist/src/internal/run-script-http-child.js +1 -1
  160. package/dist/src/inventory.js +2 -2
  161. package/dist/src/inventory2.js +1 -1
  162. package/dist/src/inventory3.js +1 -1
  163. package/dist/src/inventory5.js +1 -1
  164. package/dist/src/ios-snapshot-acquisition.js +1 -1
  165. package/dist/src/ios-snapshot-planning.js +1 -1
  166. package/dist/src/ios-snapshot-runtime.js +1 -1
  167. package/dist/src/ios-system-surface.js +1 -0
  168. package/dist/src/lease-scope.js +1 -1
  169. package/dist/src/lease.js +1 -1
  170. package/dist/src/limrun-runtime-dependencies.js +1 -1
  171. package/dist/src/limrun.d.ts +1 -1
  172. package/dist/src/linux.js +1 -1
  173. package/dist/src/local-interactor-operation-set.js +1 -1
  174. package/dist/src/location-coordinates.js +1 -1
  175. package/dist/src/managed-device-scope.js +1 -1
  176. package/dist/src/mechanics.js +16 -16
  177. package/dist/src/mobile-snapshot-semantics.js +1 -1
  178. package/dist/src/mp4-atoms.js +1 -0
  179. package/dist/src/multitouch-support.js +1 -1
  180. package/dist/src/observation.js +1 -1
  181. package/dist/src/open-target-resolution.js +1 -0
  182. package/dist/src/owner-identity.js +3 -3
  183. package/dist/src/parameterized-recorded-fill.js +1 -1
  184. package/dist/src/perf-facade.js +2 -2
  185. package/dist/src/perf-process-identity.js +1 -0
  186. package/dist/src/perf-runtime-operation-builder.js +1 -1
  187. package/dist/src/perf-runtime-plan.js +1 -1
  188. package/dist/src/perf.js +1 -1
  189. package/dist/src/physical-device-control.js +1 -1
  190. package/dist/src/platform-request-scope.js +1 -1
  191. package/dist/src/platform-runtime-android-adb-host.js +1 -1
  192. package/dist/src/platform-runtime-app-log-process.js +1 -1
  193. package/dist/src/platform-runtime-host.js +1 -1
  194. package/dist/src/platform-runtime-managed-owner.js +1 -1
  195. package/dist/src/platform-runtime-open-target.js +1 -1
  196. package/dist/src/platform-runtime-operation-host.js +2 -2
  197. package/dist/src/platform-runtime-runtime-hints.js +2 -2
  198. package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
  199. package/dist/src/platform-runtime-screen-recording-apple-runner-host.js +1 -1
  200. package/dist/src/platform-runtime-screen-recording-apple-runner-transport.js +1 -1
  201. package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
  202. package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
  203. package/dist/src/platform-runtime-screen-recording-process-host.js +1 -1
  204. package/dist/src/platform-runtime-unavailable.js +1 -1
  205. package/dist/src/platform-runtime.js +1 -1
  206. package/dist/src/platform-runtime2.js +1 -1
  207. package/dist/src/png-crop-bytes.js +1 -0
  208. package/dist/src/png-worker-contract.js +1 -1
  209. package/dist/src/png.js +1 -0
  210. package/dist/src/prepare-kind.js +1 -1
  211. package/dist/src/process.js +1 -1
  212. package/dist/src/provider-device-runtime.js +1 -1
  213. package/dist/src/provider-session-ownership.js +1 -1
  214. package/dist/src/provider-webdriver.js +1 -1
  215. package/dist/src/proxy.js +1 -1
  216. package/dist/src/quality-warnings.js +1 -0
  217. package/dist/src/react-native.js +1 -1
  218. package/dist/src/record-runtime.js +1 -1
  219. package/dist/src/rect-center.js +1 -1
  220. package/dist/src/register-builtins.js +1 -1
  221. package/dist/src/registry.js +36 -36
  222. package/dist/src/remote-config2.js +1 -1
  223. package/dist/src/replay-divergence.js +1 -1
  224. package/dist/src/replay.js +2 -2
  225. package/dist/src/reporting.js +9 -8
  226. package/dist/src/request-admission.js +1 -1
  227. package/dist/src/request-cancel.js +1 -1
  228. package/dist/src/request-cancellation.js +1 -1
  229. package/dist/src/request-runtime-binding.js +1 -1
  230. package/dist/src/retry.js +1 -1
  231. package/dist/src/runner-cache-metadata.js +2 -2
  232. package/dist/src/runner-client.js +1 -1
  233. package/dist/src/runner-disposal.js +1 -1
  234. package/dist/src/runner-operations-facade.js +1 -1
  235. package/dist/src/runner-presentation.js +1 -1
  236. package/dist/src/runner.js +1 -1
  237. package/dist/src/runtime-transport-hints.js +1 -1
  238. package/dist/src/runtime.js +3 -3
  239. package/dist/src/runtime10.js +1 -0
  240. package/dist/src/runtime2.js +4 -4
  241. package/dist/src/runtime3.js +1 -1
  242. package/dist/src/runtime4.js +5 -4
  243. package/dist/src/runtime5.js +1 -1
  244. package/dist/src/runtime6.js +1 -1
  245. package/dist/src/runtime7.js +1 -1
  246. package/dist/src/runtime8.js +1 -1
  247. package/dist/src/runtime9.js +1 -1
  248. package/dist/src/screen-recording-live-handle.js +1 -1
  249. package/dist/src/screen-recording-options.js +1 -1
  250. package/dist/src/screen-recording-resource-recovery.js +1 -1
  251. package/dist/src/screenshot-density.js +1 -1
  252. package/dist/src/screenshot-runtime.js +1 -1
  253. package/dist/src/screenshot.js +1 -1
  254. package/dist/src/screenshot3.js +3 -3
  255. package/dist/src/script.js +1 -1
  256. package/dist/src/scroll-command.js +1 -1
  257. package/dist/src/scroll-gesture.js +1 -1
  258. package/dist/src/sdk-batch-runner.js +2 -2
  259. package/dist/src/sdk-batch.js +2 -2
  260. package/dist/src/sdk-contracts.d.ts +69 -26
  261. package/dist/src/sdk-contracts.js +2 -2
  262. package/dist/src/sdk-device.js +1 -1
  263. package/dist/src/sdk-finders.d.ts +1 -1
  264. package/dist/src/sdk-finders.js +1 -1
  265. package/dist/src/sdk-io.js +1 -1
  266. package/dist/src/sdk-remote-config.d.ts +1 -1
  267. package/dist/src/sdk-remote-config.js +1 -1
  268. package/dist/src/sdk-selectors.d.ts +80 -16
  269. package/dist/src/sdk-selectors.js +1 -1
  270. package/dist/src/selection.js +0 -0
  271. package/dist/src/selector-runtime.js +1 -1
  272. package/dist/src/selectors.js +1 -1
  273. package/dist/src/semantic-index.js +1 -1
  274. package/dist/src/server.js +3 -3
  275. package/dist/src/session-allocation.js +1 -1
  276. package/dist/src/session-observation.js +1 -0
  277. package/dist/src/session-routing.js +1 -1
  278. package/dist/src/session-runtime-admission.js +1 -1
  279. package/dist/src/session-snapshot.js +1 -1
  280. package/dist/src/session-store.js +3 -3
  281. package/dist/src/session-target-evidence.js +1 -1
  282. package/dist/src/session2.js +5 -5
  283. package/dist/src/settings.js +1 -1
  284. package/dist/src/simulator-boot.js +3 -0
  285. package/dist/src/simulator.js +1 -1
  286. package/dist/src/snapshot-quality-backend-capabilities.js +1 -1
  287. package/dist/src/snapshot-runtime-binding.js +1 -1
  288. package/dist/src/snapshot-runtime.js +1 -1
  289. package/dist/src/snapshot-state.js +1 -1
  290. package/dist/src/snapshot2.js +1 -1
  291. package/dist/src/snapshot3.js +1 -1
  292. package/dist/src/snapshot4.js +1 -1
  293. package/dist/src/src.js +1 -1
  294. package/dist/src/src7.js +2 -2
  295. package/dist/src/src8.js +2 -2
  296. package/dist/src/string-enum.js +1 -1
  297. package/dist/src/takeover.js +1 -1
  298. package/dist/src/telemetry.js +1 -1
  299. package/dist/src/tool-provider.js +2 -2
  300. package/dist/src/tool-provider2.js +1 -1
  301. package/dist/src/tool-provider3.js +1 -1
  302. package/dist/src/toolchain-probe.js +1 -1
  303. package/dist/src/touch-reference-frame.js +1 -0
  304. package/dist/src/touch-runtime.js +1 -1
  305. package/dist/src/transport.js +1 -1
  306. package/dist/src/tree.js +1 -1
  307. package/dist/src/tv-remote.js +1 -1
  308. package/dist/src/type-text-runtime.js +1 -1
  309. package/dist/src/update-check.js +1 -1
  310. package/dist/src/vars.js +2 -0
  311. package/dist/src/verified-file.js +1 -1
  312. package/dist/src/version.js +1 -1
  313. package/dist/src/video.js +2 -2
  314. package/dist/src/viewport.js +1 -0
  315. package/dist/src/web.js +1 -1
  316. package/dist/src/web2.js +1 -1
  317. package/dist/src/webdriver-ios-snapshot.js +1 -1
  318. package/dist/src/webdriver-source.js +1 -1
  319. package/dist/src/window-state.js +1 -0
  320. package/package.json +4 -2
  321. package/server.json +2 -2
  322. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.0.apk.sha256 +0 -1
  323. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.0.apk +0 -0
  324. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.0.apk.sha256 +0 -1
  325. package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-trim.swift +0 -93
  326. package/dist/src/platform-runtime-apple-resources.js +0 -1
  327. package/dist/src/runner-selector-query.js +0 -1
  328. package/dist/src/snapshot-quality-verdict.js +0 -1
@@ -1,6 +1,6 @@
1
1
  import AgentDeviceSnapshotPresentation
2
2
 
3
- // MARK: - Wire Models
3
+
4
4
 
5
5
  enum CommandType: String, Codable {
6
6
  case tap
@@ -39,72 +39,72 @@ enum CommandType: String, Codable {
39
39
  case shutdown
40
40
  }
41
41
 
42
- /// Runner command traits — see CONTEXT.md ("Runner command traits").
43
- ///
44
- /// Single source of truth for how the runner classifies a command across three
45
- /// independent axes, replacing the three hand-maintained switches that used to live
46
- /// in RunnerTests+Lifecycle.swift (isInteractionCommand / isReadOnlyCommand /
47
- /// isRunnerLifecycleCommand). The classification is load-bearing for ADR-0002 session
48
- /// invalidation: `readOnly` gates the retry that nulls currentApp/currentBundleId.
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
49
  struct CommandTraits {
50
- /// Whether the command needs the foreground-guard + stabilization preflight before running.
50
+
51
51
  let isInteraction: Bool
52
- /// Whether the command is eligible for the session-invalidating retry.
53
- /// `.conditional` is resolved against the request (alert is read-only only for its `get` action).
52
+
53
+
54
54
  let readOnly: ReadOnly
55
- /// Whether the command skips the app-activation preflight entirely.
55
+
56
56
  let isLifecycle: Bool
57
57
 
58
58
  enum ReadOnly {
59
59
  case always
60
60
  case never
61
- /// Alert-only today. Resolved in `isReadOnlyCommand` with alert's rule (read-only for the
62
- /// `get` action, mutating otherwise). A new `.conditional` command would inherit that rule
63
- /// until the resolver is generalized — give it explicit handling there if its semantics differ.
61
+
62
+
63
+
64
64
  case conditional
65
65
  }
66
66
  }
67
67
 
68
68
  extension CommandType {
69
- /// The classification for this command. Exhaustive by construction: a new CommandType
70
- /// cannot compile without being classified here, so commands can no longer silently drift
71
- /// out of classification the way the parallel switches allowed.
69
+
70
+
71
+
72
72
  var traits: CommandTraits {
73
73
  switch self {
74
- // Interaction commands: require the foreground-guard + stabilization preflight.
75
- // keyboardReturn is the sibling of keyboardDismiss (missing from the historical switch —
76
- // drift the table now prevents). .scroll is the fused frame-resolve + drag scroll; same
77
- // classification as .drag. .desktopScroll is the macOS frame-resolve + wheel event sibling.
78
- // .sequence is the fused multi-step gesture batch.
74
+
75
+
76
+
77
+
78
+
79
79
  case .tap, .longPress, .drag, .remotePress, .type, .swipe, .scroll, .desktopScroll,
80
80
  .back, .backInApp, .backSystem, .rotate, .appSwitcher,
81
81
  .keyboardDismiss, .keyboardReturn, .sequence, .gesture:
82
82
  return CommandTraits(isInteraction: true, readOnly: .never, isLifecycle: false)
83
83
 
84
- // Read-only reads: eligible for the session-invalidating retry.
84
+
85
85
  case .findText, .readText, .snapshot, .gestureViewport:
86
86
  return CommandTraits(isInteraction: false, readOnly: .always, isLifecycle: false)
87
87
 
88
- // Screenshot is both a read and a runner-lifecycle command (skips app-activation preflight).
88
+
89
89
  case .screenshot:
90
90
  return CommandTraits(isInteraction: false, readOnly: .always, isLifecycle: true)
91
91
 
92
- // Alert is read-only only for its `get` action (resolved by isReadOnlyCommand).
92
+
93
93
  case .alert:
94
94
  return CommandTraits(isInteraction: false, readOnly: .conditional, isLifecycle: false)
95
95
 
96
- // Runner-lifecycle commands: skip the app-activation preflight.
96
+
97
97
  case .recordStop, .uptime, .terminate, .targetReset, .shutdown:
98
98
  return CommandTraits(isInteraction: false, readOnly: .never, isLifecycle: true)
99
99
 
100
100
  case .status:
101
101
  return CommandTraits(isInteraction: false, readOnly: .always, isLifecycle: true)
102
102
 
103
- // Normal preflight, not retried.
104
- // NOTE: mouseClick stays non-interaction for now — it is macOS-only and the foreground
105
- // guard interacts with bespoke macOS activation, so classifying it needs a macOS smoke
106
- // check first (tracked as a follow-up). Also preserved: querySelector is NOT read-only;
107
- // recordStart is NOT a lifecycle command; home/alert remain non-interaction by design.
103
+
104
+
105
+
106
+
107
+
108
108
  case .mouseClick, .querySelector, .home, .recordStart, .activate:
109
109
  return CommandTraits(isInteraction: false, readOnly: .never, isLifecycle: false)
110
110
  }
@@ -156,7 +156,7 @@ enum ScrollReleaseBehavior: String, Codable {
156
156
  case inertial
157
157
  }
158
158
 
159
- /// Canonical one- or two-pointer plan produced by the portable TypeScript planner.
159
+
160
160
  struct RunnerGesturePlan: Codable {
161
161
  let topology: String
162
162
  let intent: String
@@ -188,22 +188,22 @@ struct RunnerGesturePoint: Codable {
188
188
  let y: Double
189
189
  }
190
190
 
191
- /// One allowlisted coordinate gesture step inside a fused `sequence` command.
192
- /// `kind` is decoded as a raw String (not an enum) so the runner can return a clear
193
- /// INVALID_ARGS for an unknown kind instead of a generic decode failure.
191
+
192
+
193
+
194
194
  struct SequenceStep: Codable {
195
195
  let kind: String
196
196
  let x: Double?
197
197
  let y: Double?
198
198
  let durationMs: Double?
199
199
  let pauseMs: Double?
200
- /// For `tap` steps on iOS non-tv: use the synthesized HID fast path instead of the
201
- /// drag-based XCUICoordinate path, matching the individual command behavior.
200
+
201
+
202
202
  let synthesized: Bool?
203
203
  }
204
204
 
205
- /// Per-step result for a `sequence` response. `ok:false` carries the failing step's
206
- /// errorCode/errorMessage; execution stops at the first failed step.
205
+
206
+
207
207
  struct SequenceStepResult: Codable {
208
208
  let ok: Bool
209
209
  let kind: String
@@ -220,9 +220,9 @@ struct Response: Codable {
220
220
  }
221
221
 
222
222
  extension Response {
223
- // The daemon pairs this gesture-clock anchor with its own receipt time to map
224
- // gesture uptimes onto wall-clock for the recording touch overlay. Error responses
225
- // carry no anchor so the daemon falls back instead of pairing a stale value.
223
+
224
+
225
+
226
226
  func stampingCurrentUptimeMs(_ value: Double) -> Response {
227
227
  guard ok else { return self }
228
228
  var payload = data ?? DataPayload()
@@ -241,6 +241,8 @@ struct DataPayload: Codable {
241
241
  var truncated: Bool?
242
242
  var qualityPayload: SnapshotQualityPayload? = nil
243
243
  var snapshotQuality: SnapshotQuality?
244
+
245
+ var systemSurface: SystemSurfaceProvenancePayload?
244
246
  var gestureStartUptimeMs: Double?
245
247
  var gestureEndUptimeMs: Double?
246
248
  var x: Double?
@@ -266,6 +268,10 @@ struct DataPayload: Codable {
266
268
  var gestureFallback: String?
267
269
  var gestureFallbackMessage: String?
268
270
  var gestureFallbackHint: String?
271
+
272
+
273
+ var keyboardAvoided: Bool?
274
+ var keyboardMinY: Double?
269
275
  var maestroNonHittableCoordinateFallbackUsed: Bool?
270
276
  var textEntryRoute: String?
271
277
  var runnerFatal: Bool?
@@ -275,6 +281,12 @@ struct DataPayload: Codable {
275
281
  var sequenceResults: [SequenceStepResult]?
276
282
  }
277
283
 
284
+
285
+ struct SystemSurfaceProvenancePayload: Codable {
286
+ let bundleId: String
287
+ let kind: String
288
+ }
289
+
278
290
  struct SnapshotQualityPayload: Codable {
279
291
  let nodes: [PresentedNode]
280
292
  let truncated: Bool
@@ -81,7 +81,7 @@ extension RunnerTests {
81
81
  return navigationBackKeywords.firstIndex { text.contains($0) }
82
82
  }
83
83
 
84
- // isFinite/>0 alone don't reject CGRect.infinite — its origin (~-9e307) is finite.
84
+
85
85
  static func isUsableNavigationFrame(_ frame: CGRect) -> Bool {
86
86
  guard frame.width.isFinite, frame.height.isFinite, frame.width > 0, frame.height > 0 else {
87
87
  return false
@@ -93,7 +93,7 @@ extension RunnerTests {
93
93
  guard isUsableNavigationFrame(candidate), isUsableNavigationFrame(window) else {
94
94
  return false
95
95
  }
96
- // Accept the compact navigation/search header band without matching deep content controls.
96
+
97
97
  let maxY = window.minY + min(max(window.height * 0.22, 96), 180)
98
98
  return candidate.midY >= window.minY && candidate.midY <= maxY
99
99
  }
@@ -102,9 +102,9 @@ extension RunnerTests {
102
102
  guard isUsableNavigationFrame(frame) else {
103
103
  return nil
104
104
  }
105
- // Aim at the standard leading navigation slot, bounded for compact and tablet widths.
105
+
106
106
  let xOffset = min(max(frame.width * 0.08, 28), 44)
107
- // Sit below the status/dynamic-island region and inside common custom RN search headers.
107
+
108
108
  let yOffset = min(max(frame.height * 0.155, 56), 132)
109
109
  return CGPoint(x: frame.minX + xOffset, y: frame.minY + yOffset)
110
110
  }
@@ -169,4 +169,71 @@ extension RunnerTests {
169
169
  return element.exists ? element : nil
170
170
  }
171
171
 
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+
228
+
229
+
230
+
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+
172
239
  }
@@ -1,8 +1,8 @@
1
1
  import XCTest
2
2
  import AgentDeviceSnapshotPresentation
3
3
 
4
- /// Reported facts for one private-AX element, read once so every consumer describes a node the
5
- /// same way.
4
+
5
+
6
6
  struct PrivateAXFields {
7
7
  let rect: CGRect
8
8
  let label: String
@@ -18,11 +18,11 @@ struct PrivateAXFields {
18
18
  }
19
19
 
20
20
  extension RunnerTests {
21
- /// Private-AX acquisition: ONE serializer for both projections. Reported facts at traversal
22
- /// depth -- membership, the clip fold, scroll hints, and collapsed depth are
23
- /// `SnapshotPresentation`'s alone (#1797). The traversal-depth cut is the backend's one
24
- /// narrowing, complete for raw (raw depth *is* traversal depth) and a declared residue for
25
- /// regular; `hittable` is the shared geometric fact the fold recomputes for effective geometry.
21
+
22
+
23
+
24
+
25
+
26
26
  func privateAXAcquisition(rawRoot: [String: Any], hint: CaptureHint, viewport: CGRect)
27
27
  -> [RawAXNode]
28
28
  {
@@ -102,3 +102,140 @@ extension RunnerTests {
102
102
  }
103
103
  }
104
104
 
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+
228
+
229
+
230
+
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+
239
+
240
+
241
+
@@ -2,7 +2,7 @@ import AVFoundation
2
2
  import CoreVideo
3
3
 
4
4
  extension RunnerTests {
5
- // MARK: - Screen Recorder
5
+
6
6
 
7
7
  final class ScreenRecorder {
8
8
  private let outputPath: String
@@ -269,3 +269,15 @@ extension RunnerTests {
269
269
  }
270
270
  }
271
271
 
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+