agent-device 0.20.10 → 0.21.1

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 (510) 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.1.apk} +0 -0
  3. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.1.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.1.manifest.json} +4 -4
  5. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.1.apk +0 -0
  6. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.1.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.1.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 +106 -0
  12. package/apple/snapshot-bridge/SnapshotBridge.m +286 -0
  13. package/apple/snapshot-bridge/SnapshotBridgeCapture.h +25 -0
  14. package/apple/snapshot-bridge/SnapshotBridgeCapture.m +138 -0
  15. package/apple/snapshot-bridge/SnapshotBridgeRuntime.h +34 -0
  16. package/apple/snapshot-bridge/SnapshotBridgeRuntime.m +411 -0
  17. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +58 -0
  18. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner.xcodeproj/project.pbxproj +19 -0
  19. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAXSnapshotBridge.h +12 -0
  20. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAXSnapshotBridge.m +20 -0
  21. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAlertVerification.swift +36 -0
  22. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSelectorMatchPolicy.swift +15 -15
  23. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerStringNormalization.swift +8 -0
  24. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.h +12 -1
  25. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.m +100 -6
  26. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSystemSurfaceHostPolicy.swift +72 -0
  27. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTapPointPolicy.swift +63 -14
  28. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AXSnapshotFallback.swift +677 -83
  29. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +35 -92
  30. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AlertObservation.swift +124 -0
  31. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+BlockingSystemModalResolution.swift +39 -4
  32. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +1058 -213
  33. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +296 -14
  34. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Environment.swift +1 -1
  35. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Exceptions.swift +10 -10
  36. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Interaction.swift +309 -149
  37. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Keyboard.swift +101 -42
  38. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +24 -17
  39. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +124 -199
  40. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +71 -4
  41. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+PrivateAXElementTypes.swift +12 -0
  42. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+PrivateAXPresentation.swift +211 -78
  43. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScreenRecorder.swift +30 -10
  44. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScrollGesture.swift +254 -24
  45. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SequenceExecution.swift +206 -22
  46. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +465 -494
  47. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotBackendCapabilities.swift +168 -0
  48. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCapturePlan.swift +802 -247
  49. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotPresentationInvariant.swift +19 -0
  50. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotTiming.swift +185 -0
  51. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedCommitDeadline.swift +206 -0
  52. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedGesturePolicy.swift +83 -5
  53. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +156 -34
  54. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SystemModal.swift +5 -4
  55. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +35 -318
  56. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +206 -0
  57. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryReadiness.swift +158 -0
  58. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextInputCandidatePolicy.swift +28 -0
  59. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextInputProbe.swift +101 -0
  60. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +56 -23
  61. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +56 -27
  62. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TvRemote.swift +30 -24
  63. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +126 -80
  64. package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/RecordingExportSupport.swift +111 -0
  65. package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-overlay.swift +47 -86
  66. package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-trim.swift +32 -79
  67. package/dist/apple/snapshot-presentation/Package.swift +21 -0
  68. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotGeometry.swift +56 -0
  69. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotModels.swift +259 -0
  70. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentation.swift +153 -0
  71. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationFailure.swift +27 -0
  72. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationInvariant.swift +91 -0
  73. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationProjection.swift +161 -0
  74. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotScopePolicy.swift +53 -0
  75. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFold.swift +242 -0
  76. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFoldProjection.swift +97 -0
  77. package/dist/src/adapter.js +1 -0
  78. package/dist/src/adb-executor.js +2 -0
  79. package/dist/src/adb-failure.js +1 -0
  80. package/dist/src/adb-host.js +1 -0
  81. package/dist/src/adb.js +1 -0
  82. package/dist/src/agent-browser-lifecycle.js +1 -0
  83. package/dist/src/agent-browser-process-record.js +1 -0
  84. package/dist/src/agent-browser-provider.js +1 -0
  85. package/dist/src/agent-browser-tool.js +1 -1
  86. package/dist/src/agent-device-client.js +2 -2
  87. package/dist/src/ai-sdk.d.ts +2 -2
  88. package/dist/src/ai-sdk.js +1 -1
  89. package/dist/src/alert-contract.js +1 -0
  90. package/dist/src/alert-runtime.js +1 -0
  91. package/dist/src/android-adb.d.ts +27 -19
  92. package/dist/src/android-adb.js +1 -1
  93. package/dist/src/android-input-ownership.js +1 -0
  94. package/dist/src/android-system-chrome.js +1 -0
  95. package/dist/src/android.js +1 -1
  96. package/dist/src/api.js +11 -0
  97. package/dist/src/app-catalog.js +1 -0
  98. package/dist/src/app-deployment-resolution.js +2 -0
  99. package/dist/src/app-helpers.js +1 -1
  100. package/dist/src/app-inventory-contract.js +1 -0
  101. package/dist/src/app-inventory.js +1 -0
  102. package/dist/src/app-launch.js +2 -0
  103. package/dist/src/app-lifecycle-facade.js +1 -0
  104. package/dist/src/app-lifecycle.js +3 -6
  105. package/dist/src/app-lifecycle2.js +2 -2
  106. package/dist/src/app-lifecycle3.js +1 -0
  107. package/dist/src/app-log-files.js +1 -1
  108. package/dist/src/app-log-reconnect.js +1 -1
  109. package/dist/src/app-log-runtime.js +1 -4
  110. package/dist/src/app-log-runtime2.js +4 -0
  111. package/dist/src/app-parsers.js +4 -0
  112. package/dist/src/app-resolution-cache.js +1 -0
  113. package/dist/src/app-resolution-facade.js +1 -0
  114. package/dist/src/app-resolution.js +2 -2
  115. package/dist/src/app-state.js +1 -2
  116. package/dist/src/apple-runner-platform.js +1 -0
  117. package/dist/src/application-lifecycle-interaction.js +1 -0
  118. package/dist/src/application-lifecycle-runtime.js +1 -0
  119. package/dist/src/apps-simctl.js +1 -0
  120. package/dist/src/archive.js +4 -0
  121. package/dist/src/artifact-download.js +1 -0
  122. package/dist/src/artifacts.d.ts +6 -2
  123. package/dist/src/artifacts.js +1 -1
  124. package/dist/src/async-lifecycle.js +1 -0
  125. package/dist/src/audio-probe-result.js +1 -0
  126. package/dist/src/audio-probe-runtime.js +1 -0
  127. package/dist/src/audio-probe-support.js +1 -0
  128. package/dist/src/auth-session.js +1 -1
  129. package/dist/src/auth.js +1 -1
  130. package/dist/src/backend-snapshot-options.js +1 -1
  131. package/dist/src/{url.js → base-url.js} +1 -1
  132. package/dist/src/boot-diagnostics.js +2 -2
  133. package/dist/src/byte-limit-stream.js +1 -1
  134. package/dist/src/capabilities.js +1 -0
  135. package/dist/src/capture.js +1 -0
  136. package/dist/src/catalog.js +1 -0
  137. package/dist/src/cli-command-aliases.js +1 -0
  138. package/dist/src/cli-config.js +1 -1
  139. package/dist/src/cli-help.js +74 -51
  140. package/dist/src/cli-output.js +1 -1
  141. package/dist/src/cli-runner.js +1 -1
  142. package/dist/src/cli.js +4 -6
  143. package/dist/src/click-button.js +1 -0
  144. package/dist/src/client-metro-companion.js +1 -0
  145. package/dist/src/client-metro.js +1 -1
  146. package/dist/src/client-types.d.ts +280 -242
  147. package/dist/src/clipboard.js +1 -0
  148. package/dist/src/code-signature-cache.js +1 -0
  149. package/dist/src/code-signature.js +1 -0
  150. package/dist/src/color.js +1 -0
  151. package/dist/src/command-metadata.js +1 -1
  152. package/dist/src/command-schema.js +3 -3
  153. package/dist/src/command-surface.js +1 -1
  154. package/dist/src/command-tools.js +2 -2
  155. package/dist/src/command.js +1 -0
  156. package/dist/src/compatibility-policy.js +1 -0
  157. package/dist/src/config.js +1 -1
  158. package/dist/src/config2.js +1 -0
  159. package/dist/src/connection-runtime.js +1 -1
  160. package/dist/src/connection.js +5 -5
  161. package/dist/src/contracts.d.ts +1 -1
  162. package/dist/src/contracts.js +1 -1
  163. package/dist/src/daemon-client-lifecycle.js +1 -0
  164. package/dist/src/daemon-process.js +1 -0
  165. package/dist/src/daemon-registration.js +1 -0
  166. package/dist/src/daemon-shutdown-report.js +1 -1
  167. package/dist/src/daemon.js +2 -2
  168. package/dist/src/debug-symbols-facade.js +5 -0
  169. package/dist/src/deploy-result-target.js +1 -0
  170. package/dist/src/device-claim-inspection.js +1 -1
  171. package/dist/src/device-claim-rule.js +1 -0
  172. package/dist/src/device-input-state.d.ts +190 -3
  173. package/dist/src/device-inventory-context.js +1 -0
  174. package/dist/src/device-isolation.js +1 -0
  175. package/dist/src/device-release.js +1 -0
  176. package/dist/src/device-rotation.js +1 -0
  177. package/dist/src/device-selection-resolver.js +1 -0
  178. package/dist/src/device-session.js +1 -0
  179. package/dist/src/device.js +1 -1
  180. package/dist/src/device2.js +3 -2
  181. package/dist/src/diagnostics.js +3 -0
  182. package/dist/src/diagnostics2.js +1 -0
  183. package/dist/src/dispatch-resolve.js +1 -0
  184. package/dist/src/doctor-facade.js +1 -0
  185. package/dist/src/doctor-output.js +1 -0
  186. package/dist/src/doctor.js +1 -0
  187. package/dist/src/doctor2.js +1 -0
  188. package/dist/src/doctor3.js +1 -0
  189. package/dist/src/durable-resource.js +1 -0
  190. package/dist/src/entities.js +1 -1
  191. package/dist/src/error.js +2 -0
  192. package/dist/src/exec.js +1 -0
  193. package/dist/src/file.js +1 -0
  194. package/dist/src/find.js +1 -1
  195. package/dist/src/finders.js +1 -1
  196. package/dist/src/generic-settle.js +1 -1
  197. package/dist/src/generic.js +1 -1
  198. package/dist/src/gesture-admission.js +1 -0
  199. package/dist/src/gesture-plan-types.js +1 -0
  200. package/dist/src/gesture-plan.js +1 -0
  201. package/dist/src/gesture-runtime.js +1 -0
  202. package/dist/src/harmonyos.js +1 -1
  203. package/dist/src/hdc.js +1 -1
  204. package/dist/src/helper.js +2 -2
  205. package/dist/src/host-file.js +1 -0
  206. package/dist/src/human-control-contract.js +1 -0
  207. package/dist/src/human-control.js +1 -0
  208. package/dist/src/index.d.ts +1 -1
  209. package/dist/src/index.js +1 -1
  210. package/dist/src/input-actions.js +1 -4
  211. package/dist/src/input-actions2.js +2 -1
  212. package/dist/src/install-artifact-facade.js +1 -0
  213. package/dist/src/install-source-network-transport.js +1 -0
  214. package/dist/src/install-source.d.ts +3 -10
  215. package/dist/src/install-source2.js +1 -1
  216. package/dist/src/interaction-positionals.js +1 -0
  217. package/dist/src/interaction-ref-policy.js +1 -0
  218. package/dist/src/interaction.js +1 -1
  219. package/dist/src/interaction2.js +1 -1
  220. package/dist/src/interactor-operation-catalog.js +1 -0
  221. package/dist/src/interactor-types.js +1 -0
  222. package/dist/src/interactor.js +6 -2
  223. package/dist/src/interactor2.js +1 -1
  224. package/dist/src/interactors.js +1 -1
  225. package/dist/src/internal/bin.d.ts +1 -1
  226. package/dist/src/internal/bin.js +1 -2
  227. package/dist/src/internal/companion-tunnel.d.ts +1 -1
  228. package/dist/src/internal/companion-tunnel.js +1 -1
  229. package/dist/src/internal/daemon.d.ts +1 -1
  230. package/dist/src/internal/daemon.js +2 -4
  231. package/dist/src/internal/png-worker.d.ts +4 -4
  232. package/dist/src/internal/png-worker.js +1 -1
  233. package/dist/src/internal/run-script-http-child.d.ts +4 -0
  234. package/dist/src/internal/run-script-http-child.js +1 -0
  235. package/dist/src/internal/update-check-entry.d.ts +1 -1
  236. package/dist/src/inventory.js +4 -4
  237. package/dist/src/inventory2.js +1 -1
  238. package/dist/src/inventory3.js +1 -1
  239. package/dist/src/inventory5.js +1 -1
  240. package/dist/src/inventory6.js +1 -1
  241. package/dist/src/ios-client.js +16 -0
  242. package/dist/src/ios-snapshot-acquisition.js +1 -0
  243. package/dist/src/ios-snapshot-adapter.js +1 -0
  244. package/dist/src/ios-snapshot-planning.js +1 -0
  245. package/dist/src/ios-snapshot-runtime.js +1 -0
  246. package/dist/src/ios-system-surface.js +1 -0
  247. package/dist/src/json.js +1 -0
  248. package/dist/src/keyboard-actions.js +1 -0
  249. package/dist/src/launch-console.js +1 -0
  250. package/dist/src/lease-context.js +1 -1
  251. package/dist/src/lease-scope.js +1 -0
  252. package/dist/src/lease.js +1 -1
  253. package/dist/src/limrun-runtime-dependencies.js +1 -1
  254. package/dist/src/limrun.d.ts +1610 -7
  255. package/dist/src/limrun.js +1 -1
  256. package/dist/src/linux.js +1 -1
  257. package/dist/src/local-interactor-operation-set.js +1 -0
  258. package/dist/src/location-coordinates.js +1 -1
  259. package/dist/src/logcat.js +1 -1
  260. package/dist/src/macos-facade.js +1 -0
  261. package/dist/src/managed-device-scope.js +1 -0
  262. package/dist/src/mechanics.js +19 -0
  263. package/dist/src/metro.d.ts +4 -2
  264. package/dist/src/metro.js +1 -1
  265. package/dist/src/metro2.js +1 -1
  266. package/dist/src/mobile-snapshot-semantics.js +1 -1
  267. package/dist/src/multitouch-support.js +1 -0
  268. package/dist/src/numeric.js +1 -0
  269. package/dist/src/observability.js +1 -1
  270. package/dist/src/observation.js +2 -0
  271. package/dist/src/open-target-resolution.js +1 -0
  272. package/dist/src/output-path.js +1 -1
  273. package/dist/src/owner-identity.js +3 -1
  274. package/dist/src/parameterized-recorded-fill.js +1 -0
  275. package/dist/src/parser.js +1 -1
  276. package/dist/src/perf-facade.js +2 -0
  277. package/dist/src/perf-process-identity.js +1 -0
  278. package/dist/src/perf-runtime-operation-builder.js +1 -0
  279. package/dist/src/perf-runtime-plan.js +1 -0
  280. package/dist/src/perf-runtime.js +1 -0
  281. package/dist/src/perf.js +1 -4
  282. package/dist/src/physical-device-control.js +1 -1
  283. package/dist/src/physical-device-facade.js +1 -0
  284. package/dist/src/platform-request-scope.js +1 -0
  285. package/dist/src/platform-runtime-android-adb-host.js +1 -0
  286. package/dist/src/platform-runtime-android-mechanics.js +1 -0
  287. package/dist/src/platform-runtime-app-log-android-transport.js +1 -1
  288. package/dist/src/platform-runtime-app-log-process.js +1 -1
  289. package/dist/src/platform-runtime-host.js +1 -1
  290. package/dist/src/platform-runtime-managed-owner.js +1 -0
  291. package/dist/src/platform-runtime-network-web-transport.js +1 -1
  292. package/dist/src/platform-runtime-open-target.js +1 -1
  293. package/dist/src/platform-runtime-operation-host.js +4 -4
  294. package/dist/src/platform-runtime-runtime-hints.js +2 -2
  295. package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
  296. package/dist/src/platform-runtime-screen-recording-apple-runner-host.js +1 -1
  297. package/dist/src/platform-runtime-screen-recording-apple-runner-transport.js +1 -1
  298. package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
  299. package/dist/src/platform-runtime-screen-recording-apple-transport.js +1 -1
  300. package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
  301. package/dist/src/platform-runtime-screen-recording-harmony-host.js +1 -1
  302. package/dist/src/platform-runtime-screen-recording-process-host.js +1 -0
  303. package/dist/src/platform-runtime-screen-recording-web-host.js +1 -1
  304. package/dist/src/platform-runtime-unavailable.js +1 -0
  305. package/dist/src/platform-runtime.js +1 -1
  306. package/dist/src/platform-runtime2.js +1 -1
  307. package/dist/src/plist.js +1 -1
  308. package/dist/src/png-worker-contract.js +1 -1
  309. package/dist/src/prepare-kind.js +1 -0
  310. package/dist/src/process-exit.js +1 -1
  311. package/dist/src/process.js +1 -0
  312. package/dist/src/provider-device-runtime.js +1 -0
  313. package/dist/src/provider-session-ownership.js +2 -0
  314. package/dist/src/provider-webdriver.js +1 -1
  315. package/dist/src/provider.js +1 -1
  316. package/dist/src/providers.js +1 -0
  317. package/dist/src/proxy.js +2 -2
  318. package/dist/src/react-native-overlay.js +1 -0
  319. package/dist/src/react-native.js +1 -1
  320. package/dist/src/record-runtime.js +1 -1
  321. package/dist/src/record-trace.js +1 -1
  322. package/dist/src/rect-center.js +1 -0
  323. package/dist/src/register-builtins.js +1 -0
  324. package/dist/src/registry.js +40 -28
  325. package/dist/src/remote-config2.js +1 -1
  326. package/dist/src/replay-divergence.js +2 -0
  327. package/dist/src/replay.js +2 -2
  328. package/dist/src/reporting.js +8 -7
  329. package/dist/src/request-admission.js +1 -0
  330. package/dist/src/request-cancel.js +1 -0
  331. package/dist/src/request-cancellation.js +1 -0
  332. package/dist/src/request-progress-protocol.js +1 -0
  333. package/dist/src/request-providers.js +1 -0
  334. package/dist/src/request-runtime-binding.js +1 -0
  335. package/dist/src/request.js +1 -0
  336. package/dist/src/result-serialization.js +1 -0
  337. package/dist/src/retry.js +1 -0
  338. package/dist/src/rolldown-runtime.js +1 -1
  339. package/dist/src/runner-cache-metadata.js +2 -0
  340. package/dist/src/runner-client.js +1 -1
  341. package/dist/src/runner-disposal.js +1 -1
  342. package/dist/src/runner-operations-facade.js +1 -0
  343. package/dist/src/runner-owner-facade.js +1 -0
  344. package/dist/src/runner-owner-state.js +1 -0
  345. package/dist/src/runner-presentation.js +1 -0
  346. package/dist/src/runner.js +1 -0
  347. package/dist/src/{runtime-transport.js → runtime-transport-hints.js} +1 -1
  348. package/dist/src/runtime.js +3 -3
  349. package/dist/src/runtime2.js +4 -4
  350. package/dist/src/runtime3.js +1 -1
  351. package/dist/src/runtime4.js +5 -3
  352. package/dist/src/runtime5.js +1 -1
  353. package/dist/src/runtime6.js +1 -1
  354. package/dist/src/runtime7.js +1 -1
  355. package/dist/src/runtime8.js +1 -1
  356. package/dist/src/runtime9.js +1 -1
  357. package/dist/src/scoped-provider.js +1 -1
  358. package/dist/src/screen-recording-completion.js +1 -0
  359. package/dist/src/screen-recording-live-handle.js +1 -0
  360. package/dist/src/screen-recording-options.js +1 -0
  361. package/dist/src/screen-recording-resource-recovery.js +1 -0
  362. package/dist/src/screen-recording-runtime.js +1 -0
  363. package/dist/src/screenshot-density.js +1 -1
  364. package/dist/src/screenshot-result.js +1 -6
  365. package/dist/src/screenshot-runtime.js +1 -0
  366. package/dist/src/screenshot.js +1 -1
  367. package/dist/src/screenshot2.js +1 -0
  368. package/dist/src/screenshot3.js +5 -0
  369. package/dist/src/script.js +1 -0
  370. package/dist/src/scroll-command.js +1 -0
  371. package/dist/src/scroll-gesture.js +1 -0
  372. package/dist/src/scroll-indicator.js +1 -0
  373. package/dist/src/sdk-batch-runner.d.ts +23 -6
  374. package/dist/src/sdk-batch-runner.js +2 -3
  375. package/dist/src/sdk-batch.js +2 -0
  376. package/dist/src/sdk-contracts.d.ts +170 -41
  377. package/dist/src/sdk-contracts.js +2 -2
  378. package/dist/src/sdk-device.js +1 -1
  379. package/dist/src/sdk-finders.d.ts +1 -1
  380. package/dist/src/sdk-finders.js +1 -1
  381. package/dist/src/sdk-io.js +1 -1
  382. package/dist/src/sdk-remote-config.d.ts +1 -1
  383. package/dist/src/sdk-remote-config.js +1 -1
  384. package/dist/src/sdk-selectors.d.ts +524 -140
  385. package/dist/src/sdk-selectors.js +1 -1
  386. package/dist/src/selection.js +1 -0
  387. package/dist/src/selector-runtime.js +1 -1
  388. package/dist/src/selectors.js +1 -1
  389. package/dist/src/semantic-index.js +1 -0
  390. package/dist/src/server.js +4 -4
  391. package/dist/src/session-allocation.js +1 -0
  392. package/dist/src/session-artifact-paths.js +1 -0
  393. package/dist/src/session-observation.js +1 -0
  394. package/dist/src/session-paths.js +1 -0
  395. package/dist/src/session-repair-tombstone.js +1 -0
  396. package/dist/src/session-routing.js +1 -0
  397. package/dist/src/session-runtime-admission.js +1 -0
  398. package/dist/src/session-snapshot.js +1 -0
  399. package/dist/src/session-store.js +4 -0
  400. package/dist/src/session-target-evidence.js +1 -1
  401. package/dist/src/session2.js +5 -27
  402. package/dist/src/settings.js +1 -0
  403. package/dist/src/shared.js +2 -2
  404. package/dist/src/simctl-facade.js +1 -0
  405. package/dist/src/simctl.js +1 -1
  406. package/dist/src/simulator-facade.js +1 -0
  407. package/dist/src/simulator.js +1 -1
  408. package/dist/src/snapshot-capture-annotations.js +1 -0
  409. package/dist/src/snapshot-desktop-projection.js +1 -0
  410. package/dist/src/snapshot-diagnostics.js +1 -0
  411. package/dist/src/snapshot-process.js +1 -0
  412. package/dist/src/snapshot-quality-backend-capabilities.js +1 -0
  413. package/dist/src/snapshot-quality-verdict.js +1 -0
  414. package/dist/src/snapshot-runtime-binding.js +1 -0
  415. package/dist/src/snapshot-runtime.js +1 -1
  416. package/dist/src/snapshot-scope.js +1 -1
  417. package/dist/src/snapshot-state.js +1 -0
  418. package/dist/src/snapshot.js +1 -8
  419. package/dist/src/snapshot2.js +1 -1
  420. package/dist/src/snapshot3.js +1 -1
  421. package/dist/src/snapshot4.js +1 -0
  422. package/dist/src/src.js +1 -1
  423. package/dist/src/src2.js +1 -1
  424. package/dist/src/src3.js +1 -2
  425. package/dist/src/src4.js +1 -1
  426. package/dist/src/src5.js +1 -0
  427. package/dist/src/src6.js +1 -0
  428. package/dist/src/src7.js +2 -0
  429. package/dist/src/src8.js +115 -0
  430. package/dist/src/startup-recovery-fence.js +1 -0
  431. package/dist/src/status-markers.js +1 -0
  432. package/dist/src/string-enum.js +1 -1
  433. package/dist/src/success-text.js +1 -0
  434. package/dist/src/surface-snapshot.js +1 -0
  435. package/dist/src/surface-snapshot2.js +1 -0
  436. package/dist/src/takeover.js +5 -0
  437. package/dist/src/tool-provider-facade.js +1 -0
  438. package/dist/src/tool-provider.js +4 -3
  439. package/dist/src/tool-provider2.js +1 -1
  440. package/dist/src/tool-provider3.js +1 -1
  441. package/dist/src/toolchain-probe.js +2 -0
  442. package/dist/src/touch-reference-frame.js +1 -0
  443. package/dist/src/touch-runtime.js +1 -0
  444. package/dist/src/transport.js +3 -0
  445. package/dist/src/tree.js +1 -0
  446. package/dist/src/ttl-memo.js +1 -0
  447. package/dist/src/tv-remote.js +1 -0
  448. package/dist/src/type-text-runtime.js +1 -0
  449. package/dist/src/undici.js +99 -0
  450. package/dist/src/update-check.js +1 -1
  451. package/dist/src/verified-file.js +1 -1
  452. package/dist/src/version.js +1 -1
  453. package/dist/src/video.js +2 -2
  454. package/dist/src/web.js +2 -1
  455. package/dist/src/web2.js +1 -0
  456. package/dist/src/webdriver-ios-snapshot.js +1 -0
  457. package/dist/src/webdriver-source.js +1 -0
  458. package/dist/src/window-state.js +1 -0
  459. package/linux/atspi-dump.py +54 -9
  460. package/package.json +58 -35
  461. package/server.json +9 -3
  462. package/android/ime-helper/dist/agent-device-android-ime-helper-0.20.10.apk.sha256 +0 -1
  463. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.20.10.apk +0 -0
  464. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.20.10.apk.sha256 +0 -1
  465. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CoordinateTextEntryTests.swift +0 -4
  466. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+FlatSnapshotFiltering.swift +0 -168
  467. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+LifecycleCacheTests.swift +0 -6
  468. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+RecordingTests.swift +0 -4
  469. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SelectorMatchPolicyTests.swift +0 -4
  470. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotPresentation.swift +0 -183
  471. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotPresentationTests.swift +0 -0
  472. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotTraversalIdentityTests.swift +0 -4
  473. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryPolicyTests.swift +0 -4
  474. package/dist/src/appearance.js +0 -1
  475. package/dist/src/apps.js +0 -5
  476. package/dist/src/audio-probe.js +0 -1
  477. package/dist/src/cli-grammar.js +0 -1
  478. package/dist/src/command-catalog.js +0 -1
  479. package/dist/src/debug-symbols.js +0 -5
  480. package/dist/src/device-input-state.js +0 -2
  481. package/dist/src/device-ready.js +0 -1
  482. package/dist/src/dispatch.js +0 -1
  483. package/dist/src/handler-utils.js +0 -1
  484. package/dist/src/helper-package-install.js +0 -1
  485. package/dist/src/host-process.js +0 -3
  486. package/dist/src/ime-lifecycle.js +0 -2
  487. package/dist/src/ime-recovery-marker.js +0 -1
  488. package/dist/src/input-actions3.js +0 -1
  489. package/dist/src/install-artifact.js +0 -1
  490. package/dist/src/install-artifact2.js +0 -1
  491. package/dist/src/interaction-common.js +0 -1
  492. package/dist/src/interaction-runtime.js +0 -1
  493. package/dist/src/interaction-snapshot.js +0 -1
  494. package/dist/src/manifest.js +0 -1
  495. package/dist/src/method-scope.js +0 -1
  496. package/dist/src/png-resize.js +0 -1
  497. package/dist/src/process-lock.js +0 -1
  498. package/dist/src/runner-lease.js +0 -1
  499. package/dist/src/runner-sequence.js +0 -1
  500. package/dist/src/script-source-bundle.js +0 -16
  501. package/dist/src/sdk-android-adb.d.ts +0 -245
  502. package/dist/src/sdk-android-adb.js +0 -4
  503. package/dist/src/sdk.js +0 -1
  504. package/dist/src/setting-state.js +0 -1
  505. package/dist/src/shell-quote.js +0 -1
  506. package/dist/src/snapshot-session.js +0 -1
  507. package/dist/src/timing-safe-equal.js +0 -1
  508. package/dist/src/unsupported-interactor.js +0 -1
  509. package/dist/src/verdict.js +0 -1
  510. /package/dist/src/{recording-telemetry.js → telemetry.js} +0 -0
@@ -1,5 +1,4 @@
1
- import { C as SnapshotNode, E as SnapshotState, S as SnapshotBackend, T as SnapshotQualityVerdict, U as PublicPlatform, V as Platform, b as Rect, m as ResponseCost, v as Point, w as SnapshotOptions$1, x as ScreenshotOverlayRef, y as RawSnapshotNode } from "./sdk-contracts.js";
2
- import { c as ScrollDirection, o as GesturePlan } from "./sdk-android-adb.js";
1
+ import { D as SnapshotQualityVerdict, E as SnapshotProvenance, I as Platform, O as SnapshotState, R as PublicPlatform, S as ScreenshotOverlayRef, T as SnapshotOptions$1, b as RawSnapshotNode, h as ResponseCost, w as SnapshotNode, x as Rect, y as Point } from "./sdk-contracts.js";
3
2
  //#region packages/contracts/src/session-surface.d.ts
4
3
  declare const SESSION_SURFACES: readonly ['app', 'frontmost-app', 'desktop', 'menubar'];
5
4
  type SessionSurface = (typeof SESSION_SURFACES)[number];
@@ -28,6 +27,7 @@ type ScreenshotResultData = {
28
27
  logicalHeight?: number;
29
28
  pixelDensity?: number;
30
29
  overlayRefs?: ScreenshotOverlayRef[];
30
+ warnings?: string[];
31
31
  };
32
32
  type BackendSnapshotResult = {
33
33
  nodes?: SnapshotNode[];
@@ -70,7 +70,12 @@ type AndroidSnapshotBackendMetadata = {
70
70
  nodeCount?: number;
71
71
  helperTruncated?: boolean;
72
72
  elapsedMs?: number;
73
- /** API 23 helper output carries no `drawing-order`; covered same-window surfaces are not pruned. */
73
+ presentationFailure?: {
74
+ phase: 'deadline' | 'complexity' | 'regular-invariant';
75
+ workUnits: number;
76
+ maxWorkUnits?: number;
77
+ };
78
+ /** API 23 exposes no sibling drawing order, so same-window occlusion fails conservative. */
74
79
  occlusionScanUnavailable?: boolean;
75
80
  };
76
81
  type FindLocator = 'any' | 'text' | 'label' | 'value' | 'role' | 'id';
@@ -79,6 +84,58 @@ type FindLocator = 'any' | 'text' | 'label' | 'value' | 'role' | 'id';
79
84
  declare const CLICK_BUTTONS: readonly ['primary', 'secondary', 'middle'];
80
85
  type ClickButton = (typeof CLICK_BUTTONS)[number];
81
86
  //#endregion
87
+ //#region packages/contracts/src/scroll-gesture.d.ts
88
+ declare const SCROLL_INPUT_DIRECTIONS: readonly ['up', 'down', 'left', 'right', 'top', 'bottom'];
89
+ type ScrollInputDirection = (typeof SCROLL_INPUT_DIRECTIONS)[number];
90
+ declare const SCROLL_DIRECTIONS: readonly ['up', 'down', 'left', 'right'];
91
+ type ScrollDirection = (typeof SCROLL_DIRECTIONS)[number];
92
+ declare const SWIPE_PRESETS: readonly ['left', 'right', 'left-edge', 'right-edge'];
93
+ type SwipePreset = (typeof SWIPE_PRESETS)[number];
94
+ declare const SWIPE_PATTERNS: readonly ['one-way', 'ping-pong'];
95
+ type SwipePattern = (typeof SWIPE_PATTERNS)[number];
96
+ type TransformGestureParams = {
97
+ x: number;
98
+ y: number;
99
+ dx: number;
100
+ dy: number;
101
+ scale: number;
102
+ degrees: number;
103
+ durationMs?: number;
104
+ };
105
+ //#endregion
106
+ //#region packages/contracts/src/gesture-plan-types.d.ts
107
+ type GesturePointerCount = 1 | 2;
108
+ /** Selects one-pointer release timing without changing semantic gesture intent. */
109
+ type GestureExecutionProfile = 'endpoint-hold' | 'timed-pan';
110
+ type PointerTrajectorySample = {
111
+ offsetMs: number;
112
+ point: Point;
113
+ };
114
+ type PointerTrajectory = {
115
+ pointerId: 0 | 1;
116
+ samples: readonly PointerTrajectorySample[];
117
+ };
118
+ type SinglePointerTrajectory = {
119
+ pointerId: 0;
120
+ samples: readonly [PointerTrajectorySample, PointerTrajectorySample, ...PointerTrajectorySample[]];
121
+ };
122
+ type SinglePointerGesturePlan = {
123
+ topology: 'single';
124
+ intent: 'fling' | 'pan';
125
+ executionProfile: GestureExecutionProfile;
126
+ durationMs: number;
127
+ viewport: Rect;
128
+ pointers: readonly [SinglePointerTrajectory];
129
+ };
130
+ type MultiTouchGesturePlan = {
131
+ topology: 'two';
132
+ intent: 'pan' | 'pinch' | 'rotate' | 'transform';
133
+ durationMs: number;
134
+ viewport: Rect;
135
+ pointers: readonly [PointerTrajectory, PointerTrajectory];
136
+ };
137
+ type GesturePlan = SinglePointerGesturePlan | MultiTouchGesturePlan;
138
+ //#endregion
82
139
  //#region packages/contracts/src/back-mode.d.ts
83
140
  declare const BACK_MODES: readonly ['in-app', 'system'];
84
141
  type BackMode = (typeof BACK_MODES)[number];
@@ -141,145 +198,33 @@ declare const TV_REMOTE_BUTTON_DEFINITIONS: {
141
198
  declare const TV_REMOTE_BUTTONS: (keyof typeof TV_REMOTE_BUTTON_DEFINITIONS)[];
142
199
  type TvRemoteButton = (typeof TV_REMOTE_BUTTONS)[number];
143
200
  //#endregion
144
- //#region packages/contracts/src/settings.d.ts
145
- type SettingOptions = {
146
- permissionTarget?: string;
147
- permissionMode?: string;
148
- latitude?: number;
149
- longitude?: number;
150
- };
151
- //#endregion
152
- //#region packages/contracts/src/runner-lease-context.d.ts
153
- type RunnerLogicalLeaseContext = {
154
- leaseId?: string;
155
- clientId?: string;
156
- tenantId?: string;
157
- runId?: string;
158
- leaseProvider?: string;
159
- deviceKey?: string;
160
- };
161
- //#endregion
162
- //#region packages/contracts/src/interactor-types.d.ts
163
- type RunnerContext = {
164
- requestId?: string;
165
- signal?: AbortSignal;
166
- appBundleId?: string;
167
- verbose?: boolean;
168
- logPath?: string;
169
- traceLogPath?: string;
170
- iosXctestrunFile?: string;
171
- iosXctestDerivedDataPath?: string;
172
- iosXctestEnvDir?: string;
173
- runnerLeaseContext?: RunnerLogicalLeaseContext;
174
- };
175
- type ScreenshotOptions = {
176
- appBundleId?: string;
177
- pixelDensity?: number;
178
- fullscreen?: boolean;
179
- normalizeStatusBar?: boolean;
180
- stabilize?: boolean;
181
- surface?: SessionSurface;
182
- skipIosSimulatorBootCheck?: boolean;
183
- captureBackend?: 'runner';
184
- };
185
- type ElementSelectorKey = 'id' | 'label' | 'text' | 'value';
186
- type ElementSelectorTapOptions = {
187
- key: ElementSelectorKey;
188
- value: string;
189
- allowNonHittableCoordinateFallback?: boolean;
190
- expectedPoint?: Point;
191
- };
201
+ //#region packages/contracts/src/ios-system-surface.d.ts
192
202
  /**
193
- * The channel the XCTest runner actually entered text through — the Swift
194
- * `TextEntryResult.textEntryRoute` (RunnerTests+TextTyping.swift,
195
- * RunnerTests+SynthesizedTextEntry.swift). Closed set, because the runner is
196
- * its only producer and the boundary that narrows it
197
- * (readTypeTextBackendResult, src/platforms/apple/interactions.ts) drops a
198
- * route it cannot name — so a Swift-side addition would silently vanish. The
199
- * route-parity test in src/platforms/apple/core/__tests__/interactions.test.ts
200
- * reads the Swift sources and fails instead.
203
+ * iOS out-of-process system surfaces that agent-device observes and drives IN PLACE, never by
204
+ * activation.
205
+ *
206
+ * `com.apple.SafariViewService` hosts `ASWebAuthenticationSession` and `SFSafariViewController`
207
+ * out of the app's process. It is presented over a still-foreground app, and any
208
+ * `XCUIApplication.activate()` or `simctl launch` on it cancels the authentication session and
209
+ * blacks the view (issue #2438). So the runner reads and drives it without activation, and the
210
+ * `open` path refuses to launch it. The set is deliberately closed and tiny; add a host only with
211
+ * live evidence that it presents out of process and dies on activation.
212
+ *
213
+ * The canonical membership lives in `contracts/fixtures/ios-system-surface-hosts.json`; this module
214
+ * and the Swift `SystemSurfaceHostRegistry` both mirror it, each guarded by a parity test.
201
215
  */
202
- declare const TEXT_ENTRY_ROUTES: readonly ['xctest-element', 'synthesized-first-responder', 'synthesized-first-responder-replacement', 'xctest-application-fallback'];
203
- type TextEntryRoute = (typeof TEXT_ENTRY_ROUTES)[number];
216
+ /** Why a system surface is served in place; carried at snapshot-response level as provenance. */
217
+ type IosSystemSurfaceKind = 'web-auth';
204
218
  /**
205
- * What `Interactor.type` reports back about the entry it performed. Only the
206
- * Apple runner populates it; every other platform types blind and returns void.
219
+ * Whole-snapshot provenance: the capture describes a system surface presented over the session app,
220
+ * not the app itself. Carried at response level (it applies to the entire snapshot) and folded into
221
+ * iOS snapshot lineage so `--verify`/`--settle` never compare an app baseline against a sheet
222
+ * capture. Mirrors the Android system-chrome/system-surface provenance model.
207
223
  */
208
- type TypeTextBackendResult = {
209
- textEntryRoute?: TextEntryRoute;
210
- };
211
- type FillVerificationTarget = {
212
- resourceId: string | null;
213
- className: string | null;
214
- packageName: string | null;
215
- rect: Rect;
216
- };
217
- type FillUnconfirmedVerification = {
218
- verification: 'unconfirmed';
219
- requested: string;
220
- before: string | null;
221
- after: string | null;
222
- target: FillVerificationTarget;
223
- };
224
- type SnapshotOptions = SnapshotOptions$1 & {
225
- appBundleId?: string;
226
- signal?: AbortSignal;
227
- includeRects?: boolean;
228
- includeHiddenContentHints?: boolean;
229
- surface?: SessionSurface;
230
- };
231
- type SnapshotResult = Omit<BackendSnapshotResult, 'backend' | 'nodes'> & {
232
- nodes?: RawSnapshotNode[];
233
- backend: Extract<SnapshotBackend, 'android' | 'harmonyos-arkui' | 'xctest' | 'linux-atspi' | 'macos-helper' | 'web'>;
234
- };
235
- type Interactor = {
236
- open(app: string, options?: {
237
- activity?: string;
238
- appBundleId?: string;
239
- launchConsole?: string;
240
- launchArgs?: string[];
241
- terminateRunningApp?: boolean;
242
- url?: string;
243
- }): Promise<void>;
244
- openDevice(): Promise<void>;
245
- close(app: string): Promise<void>;
246
- tap(x: number, y: number): Promise<Record<string, unknown> | void>;
247
- tapElementSelector?(selector: ElementSelectorTapOptions): Promise<Record<string, unknown> | void>;
248
- doubleTap(x: number, y: number): Promise<Record<string, unknown> | void>;
249
- longPress(x: number, y: number, durationMs?: number): Promise<Record<string, unknown> | void>;
250
- /**
251
- * Move the pointer to a point without pressing. Only pointer-driven
252
- * platforms (web today) implement it; touch platforms have no hover state
253
- * and leave it undefined, which the `hover` command reports as unsupported.
254
- */
255
- hover?(x: number, y: number): Promise<Record<string, unknown> | void>;
256
- focus(x: number, y: number): Promise<Record<string, unknown> | void>;
257
- type(text: string, delayMs?: number): Promise<TypeTextBackendResult | void>;
258
- fillElementSelector?(selector: ElementSelectorTapOptions, text: string, delayMs?: number): Promise<Record<string, unknown> | void>;
259
- fill(x: number, y: number, text: string, delayMs?: number, options?: {
260
- allowNonHittableCoordinateFallback?: boolean;
261
- }): Promise<Record<string, unknown> | void>;
262
- scroll(direction: ScrollDirection, options?: {
263
- amount?: number;
264
- pixels?: number;
265
- durationMs?: number;
266
- }): Promise<Record<string, unknown> | void>;
267
- screenshot(outPath: string, options?: ScreenshotOptions): Promise<void>;
268
- setViewport?(width: number, height: number): Promise<Record<string, unknown> | void>;
269
- snapshot(options?: SnapshotOptions): Promise<SnapshotResult>;
270
- gestureViewport?(): Promise<Rect>;
271
- back(mode?: BackMode): Promise<void>;
272
- home(): Promise<void>;
273
- setOrientation(orientation: DeviceRotation): Promise<{
274
- orientation?: DeviceRotation;
275
- } | void>;
276
- performGesture?(plan: GesturePlan): Promise<Record<string, unknown> | void>;
277
- appSwitcher(): Promise<void>;
278
- tvRemote(button: TvRemoteButton, durationMs?: number): Promise<void>;
279
- readClipboard(): Promise<string>;
280
- writeClipboard(text: string): Promise<void>;
281
- setSetting(setting: string, state: string, appId?: string, options?: SettingOptions): Promise<Record<string, unknown> | void>;
282
- };
224
+ type IosSystemSurfaceProvenance = Readonly<{
225
+ bundleId: string;
226
+ kind: IosSystemSurfaceKind;
227
+ }>;
283
228
  //#endregion
284
229
  //#region packages/contracts/src/interaction.d.ts
285
230
  /** The decisive criterion separating a resolveSelectorChain winner from its strongest runner-up (ADR 0012). */
@@ -327,6 +272,22 @@ type ResolutionDisclosure = {
327
272
  source: 'direct-ios';
328
273
  kind: 'not-observed';
329
274
  };
275
+ /**
276
+ * A post-action capture that describes a DIFFERENT surface than the pre-action baseline (#2438): an
277
+ * in-place iOS system surface (a web sign-in sheet, hosted out of the app's process) was presented
278
+ * over the app, or left it. `from`/`to` name the two surfaces — a host bundle id, or `app` for
279
+ * ordinary app content.
280
+ *
281
+ * Its presence IS the refusal of a same-surface claim: the two captures are not one presentation,
282
+ * so `--verify` reports `changedFromBefore` from this transition instead of from a digest
283
+ * comparison across it, and `--settle` attaches no settled diff (and therefore no refs) across it.
284
+ */
285
+ type PostActionSurfaceChange = {
286
+ from: string;
287
+ to: string;
288
+ /** The one agent-facing sentence for this transition (`@agent-device/contracts/ios-system-surface`). */
289
+ disclosure: string;
290
+ };
330
291
  /**
331
292
  * Opt-in (`--verify`) cheap post-condition evidence for mutating interaction
332
293
  * commands (#1047). `digest`/`nodeCount`/`interactiveNodeCount` describe a single
@@ -335,6 +296,10 @@ type ResolutionDisclosure = {
335
296
  * held, so no extra device round trip is spent beyond the one verify capture.
336
297
  * `changedFromBefore: false` is evidence, not failure — the command still
337
298
  * succeeded.
299
+ *
300
+ * When `surfaceChange` is present the two captures describe different surfaces, so the digest
301
+ * comparison is not made at all: `changedFromBefore` then reports that transition, which replaced
302
+ * the whole observed surface.
338
303
  */
339
304
  type InteractionEvidence = {
340
305
  foregroundApp?: string;
@@ -342,6 +307,7 @@ type InteractionEvidence = {
342
307
  interactiveNodeCount: number;
343
308
  digest: string;
344
309
  changedFromBefore: boolean;
310
+ surfaceChange?: PostActionSurfaceChange;
345
311
  };
346
312
  type SettleDiffLine = {
347
313
  kind: 'added' | 'removed';
@@ -385,7 +351,17 @@ type SettleObservation = {
385
351
  refs?: Array<{
386
352
  ref: string;
387
353
  }>;
388
- /** Present only for `settled: true` observations that stored the settled tree. */
354
+ /**
355
+ * Present when the settled capture describes a different surface than the pre-action baseline
356
+ * (#2438). The settled tree then replaced the whole surface rather than changing within one, so
357
+ * `diff` is omitted: its lines (and their refs) would present a surface replacement as an
358
+ * in-surface change. `hint` says what to do instead.
359
+ */
360
+ surfaceChange?: PostActionSurfaceChange;
361
+ /**
362
+ * Present only for `settled: true` observations that stored the settled tree, and never across a
363
+ * `surfaceChange` — a diff describes change WITHIN one surface.
364
+ */
389
365
  diff?: {
390
366
  summary: {
391
367
  additions: number;
@@ -520,6 +496,414 @@ type FindCommandResponseData = {
520
496
  cost?: ResponseCost;
521
497
  };
522
498
  //#endregion
499
+ //#region packages/contracts/src/scroll-command.d.ts
500
+ type ScrollReleaseBehavior = 'controlled' | 'inertial';
501
+ type ScrollDistanceOptions = {
502
+ amount?: number;
503
+ pixels?: number;
504
+ };
505
+ type ScrollTimingOptions = {
506
+ durationMs?: number;
507
+ };
508
+ type ScrollCommandOptions = ScrollDistanceOptions & ScrollTimingOptions;
509
+ type ScrollExecutionOptions = ScrollCommandOptions & {
510
+ releaseBehavior?: ScrollReleaseBehavior;
511
+ };
512
+ /**
513
+ * `scroll` — the generic-route result built by `buildDispatchedScrollResult`
514
+ * (src/core/dispatch-scroll.ts): the resolved direction, the edge-pass
515
+ * bookkeeping for `top`/`bottom` scrolls, the honored distance/timing echo,
516
+ * and the success message. Platform leaves add gesture-plan coordinates
517
+ * (`x1`/`y1`/`x2`/`y2`, reference frame) on top; the output schema stays
518
+ * non-strict so those additive fields validate. The one field the dispatcher
519
+ * itself may add: `settle`, the opt-in `--settle` observation (#1638),
520
+ * attached after the command — same shape as `BackCommandResult`.
521
+ */
522
+ type ScrollCommandResult = {
523
+ direction: ScrollDirection;
524
+ /** Set for `top`/`bottom` requests: the extreme being scrolled to. */
525
+ edge?: 'top' | 'bottom';
526
+ /** Set for `--until` requests: the selector the passes stopped on. */
527
+ until?: string;
528
+ /** Edge and until scrolls only: how many scroll-and-check passes ran. */
529
+ passes?: number;
530
+ amount?: number;
531
+ pixels?: number;
532
+ durationMs?: number;
533
+ message?: string;
534
+ settle?: SettleObservation;
535
+ };
536
+ //#endregion
537
+ //#region packages/contracts/src/settings.d.ts
538
+ type SettingOptions = {
539
+ permissionTarget?: string;
540
+ permissionMode?: string;
541
+ latitude?: number;
542
+ longitude?: number;
543
+ };
544
+ //#endregion
545
+ //#region packages/contracts/src/runner-lease-context.d.ts
546
+ type RunnerLogicalLeaseContext = {
547
+ leaseId?: string;
548
+ clientId?: string;
549
+ tenantId?: string;
550
+ runId?: string;
551
+ leaseProvider?: string;
552
+ deviceKey?: string;
553
+ };
554
+ //#endregion
555
+ //#region packages/contracts/src/ios-snapshot.d.ts
556
+ type IosSnapshotProducer = 'apple-runner' | 'simulator-ax-bridge' | 'appium-source' | 'limrun-ios-tree';
557
+ type IosAcquisitionProducer = Exclude<IosSnapshotProducer, 'apple-runner'>;
558
+ type IosAcquisitionIntent = 'full' | 'surface-observation';
559
+ type IosSnapshotProjection = 'regular' | 'raw';
560
+ type IosSnapshotGeneration = string;
561
+ type IosSnapshotLineage = Readonly<{
562
+ targetId?: string;
563
+ generation?: IosSnapshotGeneration;
564
+ }>;
565
+ type IosSnapshotPresentationKey = Readonly<{
566
+ projection: IosSnapshotProjection;
567
+ interactiveOnly: boolean;
568
+ depth: number | null;
569
+ scope: string | null;
570
+ customActions: boolean;
571
+ }>;
572
+ type CaptureHint = Readonly<{
573
+ projection: IosSnapshotProjection;
574
+ rawTraversalDepth: number | null;
575
+ regularPresentedDepth: number | null;
576
+ interactiveOnly: boolean;
577
+ customActions: boolean;
578
+ acquisitionIntent: IosAcquisitionIntent;
579
+ }>;
580
+ type IosSnapshotFact = 'acquisition-depth' | 'scope' | 'interactive-query' | 'viewport' | 'hittability' | 'generation' | 'truncation';
581
+ type IosViewportEvidence = Readonly<{
582
+ kind: 'reported';
583
+ rect: Rect;
584
+ }> | Readonly<{
585
+ kind: 'derived';
586
+ rect: Rect;
587
+ }> | Readonly<{
588
+ kind: 'missing';
589
+ reason: 'not-provided' | 'not-supported' | 'invalid';
590
+ }>;
591
+ type IosProviderPrunedField = 'nodes' | 'depth' | 'scope' | 'interactive-only';
592
+ type IosTruncationDimension = 'nodes' | 'depth' | 'payload';
593
+ type IosAcquisitionResidue = Readonly<{
594
+ kind: 'provider-pruned';
595
+ fields: readonly IosProviderPrunedField[];
596
+ }> | Readonly<{
597
+ kind: 'missing-viewport';
598
+ reason: 'not-provided' | 'not-supported' | 'invalid';
599
+ }> | Readonly<{
600
+ kind: 'truncated';
601
+ dimension: IosTruncationDimension;
602
+ limit?: number;
603
+ }> | Readonly<{
604
+ kind: 'stale-generation';
605
+ expected?: IosSnapshotGeneration;
606
+ observed?: IosSnapshotGeneration;
607
+ }> | Readonly<{
608
+ kind: 'unknown-generation';
609
+ captureId: string;
610
+ }> | Readonly<{
611
+ kind: 'unavailable-fact';
612
+ fact: IosSnapshotFact;
613
+ }> | Readonly<{
614
+ kind: 'fallback-source';
615
+ producer: IosSnapshotProducer;
616
+ }>;
617
+ type IosSnapshotAcquisitionForIntent<Intent extends IosAcquisitionIntent> = Readonly<{
618
+ producer: IosAcquisitionProducer;
619
+ intent: Intent;
620
+ hint: CaptureHint & Readonly<{
621
+ acquisitionIntent: Intent;
622
+ }>;
623
+ nodes: readonly RawSnapshotNode[];
624
+ truncated?: boolean;
625
+ viewport: IosViewportEvidence;
626
+ lineage: IosSnapshotLineage;
627
+ residue: readonly IosAcquisitionResidue[];
628
+ }>;
629
+ type IosSnapshotAcquisition = IosSnapshotAcquisitionForIntent<'full'> | IosSnapshotAcquisitionForIntent<'surface-observation'>;
630
+ type IosSnapshotAcquisitionFacts = Omit<IosSnapshotAcquisition, 'hint'>;
631
+ type IosSnapshotComparisonIdentity = Readonly<{
632
+ producer: IosSnapshotProducer;
633
+ intent: IosAcquisitionIntent;
634
+ lineage: IosSnapshotLineage;
635
+ presentationKey: IosSnapshotPresentationKey;
636
+ residue: readonly IosAcquisitionResidue[];
637
+ }>;
638
+ //#endregion
639
+ //#region packages/contracts/src/interactor-types.d.ts
640
+ type RunnerContext = {
641
+ requestId?: string;
642
+ signal?: AbortSignal;
643
+ appBundleId?: string;
644
+ verbose?: boolean;
645
+ logPath?: string;
646
+ traceLogPath?: string;
647
+ iosXctestrunFile?: string;
648
+ iosXctestDerivedDataPath?: string;
649
+ iosXctestEnvDir?: string;
650
+ runnerLeaseContext?: RunnerLogicalLeaseContext;
651
+ };
652
+ type ScreenshotOptions = {
653
+ appBundleId?: string;
654
+ pixelDensity?: number;
655
+ fullscreen?: boolean;
656
+ normalizeStatusBar?: boolean;
657
+ stabilize?: boolean;
658
+ surface?: SessionSurface;
659
+ skipIosSimulatorBootCheck?: boolean;
660
+ captureBackend?: 'runner';
661
+ };
662
+ type ElementSelectorKey = 'id' | 'label' | 'text' | 'value';
663
+ type ElementSelectorTapOptions = {
664
+ key: ElementSelectorKey;
665
+ value: string;
666
+ allowNonHittableCoordinateFallback?: boolean;
667
+ expectedPoint?: Point;
668
+ };
669
+ type PressPointOptions = Readonly<{
670
+ button: 'primary' | 'secondary' | 'middle';
671
+ count: number;
672
+ intervalMs: number;
673
+ holdMs: number;
674
+ jitterPx: number;
675
+ doubleTap: boolean;
676
+ surface?: SessionSurface;
677
+ }>;
678
+ /**
679
+ * The channel the XCTest runner actually entered text through — the Swift
680
+ * `TextEntryResult.textEntryRoute` (RunnerTests+TextTyping.swift,
681
+ * RunnerTests+SynthesizedTextEntry.swift). Closed set, because the runner is
682
+ * its only producer and the boundary that narrows it
683
+ * (readTypeTextBackendResult, packages/platform-apple/src/interactions.ts) drops a
684
+ * route it cannot name — so a Swift-side addition would silently vanish. The
685
+ * route-parity test in packages/platform-apple/src/core/__tests__/interactions.test.ts
686
+ * reads the Swift sources and fails instead.
687
+ */
688
+ declare const TEXT_ENTRY_ROUTES: readonly ['xctest-element', 'synthesized-first-responder', 'synthesized-first-responder-replacement', 'xctest-application-fallback'];
689
+ type TextEntryRoute = (typeof TEXT_ENTRY_ROUTES)[number];
690
+ /**
691
+ * What `Interactor.type` reports back about the entry it performed. Only the
692
+ * Apple runner populates it; every other platform types blind and returns void.
693
+ */
694
+ type TypeTextBackendResult = {
695
+ textEntryRoute?: TextEntryRoute;
696
+ };
697
+ type FillVerificationTarget = {
698
+ resourceId: string | null;
699
+ className: string | null;
700
+ packageName: string | null;
701
+ rect: Rect;
702
+ };
703
+ type FillUnconfirmedVerification = {
704
+ verification: 'unconfirmed';
705
+ requested: string;
706
+ before: string | null;
707
+ after: string | null;
708
+ target: FillVerificationTarget;
709
+ };
710
+ type SnapshotOptions = SnapshotOptions$1 & {
711
+ appBundleId?: string;
712
+ signal?: AbortSignal;
713
+ includeRects?: boolean;
714
+ includeHiddenContentHints?: boolean;
715
+ surface?: SessionSurface;
716
+ /** Internal capture purpose; action outcomes always require the full tree. */
717
+ acquisitionIntent?: 'full' | 'surface-observation';
718
+ };
719
+ /**
720
+ * Android's live IME status read. Optional on {@link Interactor}: parity with the retired leaf,
721
+ * which refused `status`/`get` on every other family (no other platform's runner exposes one).
722
+ * A single-member discriminated union rather than a bare object so the daemon can derive its wire
723
+ * `platform` label from `kind` the same way it does for dismiss and enter — an owner can only ever
724
+ * produce its own result shape.
725
+ */
726
+ type KeyboardStatusResult = Readonly<{
727
+ kind: 'ime-probe';
728
+ visible: boolean;
729
+ inputType?: string;
730
+ type?: string;
731
+ inputMethodPackage?: string;
732
+ focusedPackage?: string;
733
+ focusedResourceId?: string;
734
+ inputOwner?: string;
735
+ }>;
736
+ /**
737
+ * Owner-shaped dismiss evidence, discriminated by which owner produced it: Android's IME probe
738
+ * fields, or iOS's `mechanism` disclosure (#1598), or HarmonyOS's bare acknowledgment (its HDC
739
+ * key press reports nothing beyond success). The daemon derives the wire `platform` label from
740
+ * `kind` rather than re-deriving it from the device, so an owner can only ever produce its own
741
+ * result shape — an android-probe result under an `ios` label is unrepresentable.
742
+ */
743
+ type KeyboardDismissResult = Readonly<{
744
+ kind: 'ime-probe';
745
+ attempts?: number;
746
+ wasVisible?: boolean;
747
+ dismissed?: boolean;
748
+ visible?: boolean;
749
+ inputType?: string;
750
+ type?: string;
751
+ inputMethodPackage?: string;
752
+ focusedPackage?: string;
753
+ focusedResourceId?: string;
754
+ inputOwner?: string;
755
+ }> | Readonly<{
756
+ kind: 'mechanism';
757
+ wasVisible?: boolean;
758
+ dismissed?: boolean;
759
+ visible?: boolean;
760
+ mechanism?: string;
761
+ }> | Readonly<{
762
+ kind: 'acknowledged';
763
+ }>;
764
+ /**
765
+ * Only the Apple runner echoes visibility around the return-key press; Android and HarmonyOS
766
+ * acknowledge with no fields beyond success. Kind is owner-specific, not just content-shaped —
767
+ * Android's and HarmonyOS's acknowledgments are structurally identical, so only the discriminant
768
+ * itself tells the daemon which owner actually pressed enter.
769
+ */
770
+ type KeyboardEnterResult = Readonly<{
771
+ kind: 'visibility-echo';
772
+ visible?: boolean;
773
+ wasVisible?: boolean;
774
+ }> | Readonly<{
775
+ kind: 'android-acknowledged';
776
+ }> | Readonly<{
777
+ kind: 'harmonyos-acknowledged';
778
+ }>;
779
+ /**
780
+ * Every acquisition carries its provenance pair atomically: the channel alone cannot say who
781
+ * acquired the tree or which guarantees it carries, and `SnapshotProvenance`
782
+ * (`@agent-device/kernel/snapshot`) makes a cross-channel `backend`/`producer` combination
783
+ * fail to compile.
784
+ */
785
+ type SnapshotResult = Omit<BackendSnapshotResult, 'backend' | 'nodes'> & {
786
+ nodes?: RawSnapshotNode[];
787
+ comparisonIdentity?: IosSnapshotComparisonIdentity;
788
+ /**
789
+ * Set when the capture describes an in-place iOS system surface (a web sign-in sheet) presented
790
+ * over the session app rather than the app itself (#2438).
791
+ */
792
+ systemSurface?: IosSystemSurfaceProvenance;
793
+ } & SnapshotProvenance;
794
+ type SnapshotRuntimeAcquiredResult = Readonly<{
795
+ stage: 'acquired';
796
+ acquisition: IosSnapshotAcquisitionFacts & Readonly<{
797
+ producer: IosAcquisitionProducer;
798
+ }>;
799
+ }>;
800
+ type SnapshotRuntimeResult = SnapshotResult | SnapshotRuntimeAcquiredResult;
801
+ type Interactor = {
802
+ open(app: string, options?: {
803
+ activity?: string;
804
+ appBundleId?: string;
805
+ launchConsole?: string;
806
+ launchArgs?: string[];
807
+ terminateRunningApp?: boolean;
808
+ url?: string;
809
+ }): Promise<void>;
810
+ openDevice(): Promise<void>;
811
+ close(app: string): Promise<void>;
812
+ tap(x: number, y: number): Promise<Record<string, unknown> | void>;
813
+ /** Complete point-press semantics for owners with fused series, alternate buttons, or surfaces. */
814
+ pressPoint?(point: Point, options: PressPointOptions): Promise<Record<string, unknown> | void>;
815
+ /** Alternate mouse buttons for owners that otherwise use the shared point-press series. */
816
+ alternateClick?(point: Point, button: 'secondary' | 'middle'): Promise<Record<string, unknown> | void>;
817
+ /** Owner-native ref routes; currently the managed web runtime is their only local owner. */
818
+ tapRef?(ref: string): Promise<Record<string, unknown> | void>;
819
+ tapElementSelector?(selector: ElementSelectorTapOptions): Promise<Record<string, unknown> | void>;
820
+ doubleTap(x: number, y: number): Promise<Record<string, unknown> | void>;
821
+ longPress(x: number, y: number, durationMs?: number): Promise<Record<string, unknown> | void>;
822
+ /**
823
+ * Move the pointer to a point without pressing. Only pointer-driven
824
+ * platforms (web today) implement it; touch platforms have no hover state
825
+ * and leave it undefined, which the `hover` command reports as unsupported.
826
+ */
827
+ hover?(x: number, y: number): Promise<Record<string, unknown> | void>;
828
+ hoverRef?(ref: string): Promise<Record<string, unknown> | void>;
829
+ focus(x: number, y: number): Promise<Record<string, unknown> | void>;
830
+ type(text: string, delayMs?: number): Promise<TypeTextBackendResult | void>;
831
+ /**
832
+ * Replace the target's text with `text`. The empty string is the clear request (#2063), not a
833
+ * no-op: an implementation must empty the field or fail — never report success over an
834
+ * untouched value. A backend with no clear mechanism refuses the empty text up front (see the
835
+ * webdriver interactor).
836
+ */
837
+ fill(x: number, y: number, text: string, delayMs?: number, options?: {
838
+ allowNonHittableCoordinateFallback?: boolean;
839
+ }): Promise<Record<string, unknown> | void>;
840
+ fillRef?(ref: string, text: string, delayMs?: number): Promise<Record<string, unknown> | void>;
841
+ scroll(direction: ScrollDirection, options?: ScrollExecutionOptions): Promise<Record<string, unknown> | void>;
842
+ screenshot(outPath: string, options?: ScreenshotOptions): Promise<void>;
843
+ setViewport?(width: number, height: number): Promise<Record<string, unknown> | void>;
844
+ snapshot(options?: SnapshotOptions): Promise<SnapshotRuntimeResult>;
845
+ /**
846
+ * Native reading of the live text at a point, when the backend has one. Answers the text the
847
+ * owner can see right now, which can exceed what an already-captured node carries (an editable
848
+ * field whose value is longer than its label). Optional: a backend without it leaves the
849
+ * captured tree as the complete answer.
850
+ */
851
+ readTextAtPoint?(point: Point, options?: {
852
+ appBundleId?: string;
853
+ surface?: SessionSurface;
854
+ signal?: AbortSignal;
855
+ }): Promise<string | undefined>;
856
+ /**
857
+ * Native text-presence reading, when the backend has one that does not require a tree capture.
858
+ * A `true` answer is authoritative; anything else means "not proven here" and the caller
859
+ * consults the canonical tree (see `FindTextResult`).
860
+ */
861
+ findText?(text: string, options?: {
862
+ appBundleId?: string;
863
+ signal?: AbortSignal;
864
+ }): Promise<{
865
+ found: boolean;
866
+ }>;
867
+ gestureViewport?(): Promise<Rect>;
868
+ back(mode?: BackMode): Promise<void>;
869
+ home(): Promise<void>;
870
+ setOrientation(orientation: DeviceRotation): Promise<{
871
+ orientation?: DeviceRotation;
872
+ } | void>;
873
+ performGesture?(plan: GesturePlan): Promise<Record<string, unknown> | void>;
874
+ appSwitcher(): Promise<void>;
875
+ tvRemote(button: TvRemoteButton, durationMs?: number): Promise<void>;
876
+ /** Optional: only Android implements a live status read (see {@link KeyboardStatusResult}). */
877
+ keyboardStatus?(): Promise<KeyboardStatusResult>;
878
+ /** Optional: platforms with no keyboard-dismiss concept leave it undefined. */
879
+ keyboardDismiss?(): Promise<KeyboardDismissResult>;
880
+ /** Optional: platforms with no keyboard-return concept leave it undefined. */
881
+ keyboardEnter?(): Promise<KeyboardEnterResult>;
882
+ readClipboard(): Promise<string>;
883
+ writeClipboard(text: string): Promise<void>;
884
+ setSetting(setting: string, state: string, appId?: string, options?: SettingOptions): Promise<Record<string, unknown> | void>;
885
+ /**
886
+ * The four alert legs. Each owner runs its own observation and, where it needs one, its own
887
+ * poll: an alert is a transient device surface, and how long to look for it — and how to press
888
+ * its buttons — is family mechanics, not something a caller can supply. `timeoutMs` is the
889
+ * whole window the caller allows; the owner spends it however its backend requires.
890
+ */
891
+ readAlert(options?: AlertInteractorOptions): Promise<Record<string, unknown>>;
892
+ awaitAlert(options?: AlertInteractorOptions): Promise<Record<string, unknown>>;
893
+ acceptAlert(options?: AlertInteractorOptions): Promise<Record<string, unknown>>;
894
+ dismissAlert(options?: AlertInteractorOptions): Promise<Record<string, unknown>>;
895
+ };
896
+ /**
897
+ * The session-derived target one alert leg acts on. `appBundleId` is separate from the runner
898
+ * context's because the macOS helper reads a frontmost-app surface with no bundle at all, and
899
+ * the two must not collapse into one field that means both.
900
+ */
901
+ type AlertInteractorOptions = {
902
+ timeoutMs?: number;
903
+ appBundleId?: string;
904
+ surface?: SessionSurface;
905
+ };
906
+ //#endregion
523
907
  //#region packages/selectors/src/internal/parse.d.ts
524
908
  type SelectorKey = 'id' | 'role' | 'text' | 'label' | 'value' | 'appname' | 'windowtitle' | 'visible' | 'hidden' | 'editable' | 'selected' | 'focused' | 'enabled' | 'hittable';
525
909
  type SelectorTerm = {
@@ -614,4 +998,4 @@ declare function formatSelectorFailure(chain: SelectorChain | string, diagnostic
614
998
  unique?: boolean;
615
999
  }): string;
616
1000
  //#endregion
617
- export { ClickButton as C, SnapshotDiagnosticsSummary as D, ScreenshotResultData as E, SessionSurface as O, BackMode as S, FindLocator as T, SettleObservation as _, resolveSelectorChain as a, TvRemoteButton as b, isSelectorToken as c, ClickCommandResponseData as d, FillCommandResponseData as f, PressCommandResponseData as g, LongPressCommandResponseData as h, findSelectorChainMatch as i, parseSelectorChain as l, HoverCommandResponseData as m, isNodeEditable as n, SelectorDiagnostics as o, FindCommandResponseData as p, isNodeVisible as r, SelectorChain as s, formatSelectorFailure as t, tryParseSelectorChain as u, Interactor as v, AndroidSnapshotBackendMetadata as w, DeviceRotation as x, RunnerContext as y };
1001
+ export { ScrollInputDirection as A, BackMode as C, PointerTrajectorySample as D, PointerTrajectory as E, AndroidSnapshotBackendMetadata as F, FindLocator as I, ScreenshotResultData as L, SwipePreset as M, TransformGestureParams as N, SinglePointerGesturePlan as O, ClickButton as P, SnapshotDiagnosticsSummary as R, DeviceRotation as S, MultiTouchGesturePlan as T, HoverCommandResponseData as _, resolveSelectorChain as a, SettleObservation as b, isSelectorToken as c, Interactor as d, RunnerContext as f, FindCommandResponseData as g, FillCommandResponseData as h, findSelectorChainMatch as i, SwipePattern as j, ScrollDirection as k, parseSelectorChain as l, ClickCommandResponseData as m, isNodeEditable as n, SelectorDiagnostics as o, ScrollCommandResult as p, isNodeVisible as r, SelectorChain as s, formatSelectorFailure as t, tryParseSelectorChain as u, LongPressCommandResponseData as v, GesturePointerCount as w, TvRemoteButton as x, PressCommandResponseData as y, SessionSurface as z };