agent-device 0.21.23 → 0.21.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/README.md +6 -6
  2. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.23.apk → agent-device-android-ime-helper-0.21.25.apk} +0 -0
  3. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.25.apk.sha256 +1 -0
  4. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.23.manifest.json → agent-device-android-ime-helper-0.21.25.manifest.json} +4 -4
  5. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.apk +0 -0
  6. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.apk.sha256 +1 -0
  7. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.manifest.json +16 -0
  8. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/SnapshotTraversal.swift +12 -6
  9. package/apple/macos-helper/Tests/AgentDeviceMacOSHelperTests/RectResponseTests.swift +21 -0
  10. package/apple/snapshot-bridge/README.md +9 -7
  11. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +159 -4
  12. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerHttpRequestFraming.swift +139 -0
  13. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerListenerPeer.swift +41 -0
  14. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerListenerToken.swift +25 -0
  15. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandDispatch.swift +56 -0
  16. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +14 -5
  17. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Environment.swift +18 -11
  18. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +8 -0
  19. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +12 -0
  20. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +25 -1
  21. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCaptureTarget.swift +1 -1
  22. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotExecution.swift +29 -5
  23. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +0 -3
  24. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +35 -13
  25. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryConfirmation.swift +59 -26
  26. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +19 -5
  27. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +50 -106
  28. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +142 -54
  29. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TypeExecution.swift +4 -1
  30. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +21 -19
  31. package/dist/src/absence-observation-errors.js +1 -0
  32. package/dist/src/adapter.js +1 -1
  33. package/dist/src/adb-executor.js +2 -2
  34. package/dist/src/adb-failure.js +2 -2
  35. package/dist/src/adb.js +1 -1
  36. package/dist/src/agent-browser-lifecycle.js +1 -1
  37. package/dist/src/agent-browser-process-record.js +1 -1
  38. package/dist/src/agent-browser-provider.js +1 -1
  39. package/dist/src/agent-browser-tool.js +1 -1
  40. package/dist/src/agent-device-client.js +2 -2
  41. package/dist/src/alert.js +1 -1
  42. package/dist/src/android-adb.d.ts +3 -2
  43. package/dist/src/android-adb.js +1 -1
  44. package/dist/src/android-input-ownership.js +1 -1
  45. package/dist/src/android-system-surface-disclosure.js +1 -0
  46. package/dist/src/android-text-entry.js +1 -0
  47. package/dist/src/android.js +1 -1
  48. package/dist/src/app-backend.js +1 -1
  49. package/dist/src/app-helpers.js +1 -1
  50. package/dist/src/app-inventory.d.ts +4 -0
  51. package/dist/src/app-launch.js +1 -1
  52. package/dist/src/app-lifecycle.js +4 -3
  53. package/dist/src/app-lifecycle2.js +2 -2
  54. package/dist/src/app-log-files.js +1 -1
  55. package/dist/src/app-log-reconnect.js +1 -1
  56. package/dist/src/app-log-runtime2.js +3 -3
  57. package/dist/src/app-resolution-facade.js +1 -1
  58. package/dist/src/app-resolution.js +2 -2
  59. package/dist/src/app-state-runtime.d.ts +15 -0
  60. package/dist/src/apple-runner-platform.js +1 -1
  61. package/dist/src/application-lifecycle-interaction.js +1 -1
  62. package/dist/src/artifact-download.js +1 -1
  63. package/dist/src/auth.js +1 -1
  64. package/dist/src/aws-device-farm-connection.js +1 -0
  65. package/dist/src/back-mode.js +1 -1
  66. package/dist/src/backend-snapshot-options.js +1 -1
  67. package/dist/src/boot-diagnostics.js +1 -1
  68. package/dist/src/browserstack-connection.js +1 -0
  69. package/dist/src/capture-disclosure.js +1 -0
  70. package/dist/src/cli-config.js +1 -1
  71. package/dist/src/cli-help.js +36 -17
  72. package/dist/src/cli-output.js +1 -1
  73. package/dist/src/cli-runner.js +3 -1
  74. package/dist/src/cli.js +3 -4
  75. package/dist/src/client-companion-tunnel.js +1 -0
  76. package/dist/src/client-metro.js +1 -1
  77. package/dist/src/client-types.d.ts +15 -7
  78. package/dist/src/cloud-artifacts.d.ts +3 -2
  79. package/dist/src/code-signature-cache.js +1 -1
  80. package/dist/src/code-signature.js +1 -1
  81. package/dist/src/command-metadata.js +73 -1
  82. package/dist/src/command-policy.js +1 -0
  83. package/dist/src/command-schema.js +3 -3
  84. package/dist/src/command-surface.js +1 -1
  85. package/dist/src/command-tools.js +2 -2
  86. package/dist/src/connection-runtime.js +1 -1
  87. package/dist/src/connection-verification.js +1 -0
  88. package/dist/src/connection.js +5 -5
  89. package/dist/src/contracts.d.ts +1 -1
  90. package/dist/src/contracts.js +1 -1
  91. package/dist/src/daemon-client-lease-beat.js +1 -1
  92. package/dist/src/daemon-client-lifecycle.js +1 -1
  93. package/dist/src/daemon-client-liveness-probe.js +1 -1
  94. package/dist/src/daemon-policy-file.js +1 -1
  95. package/dist/src/daemon-registration-owner.js +1 -1
  96. package/dist/src/daemon-registration.js +1 -1
  97. package/dist/src/daemon-resolution.js +3 -1
  98. package/dist/src/debug-symbols-facade.js +1 -1
  99. package/dist/src/device-claim-inspection.js +1 -1
  100. package/dist/src/device-input-state.d.ts +6 -17
  101. package/dist/src/device-inventory-context.js +1 -1
  102. package/dist/src/device-readiness-runtime.js +1 -1
  103. package/dist/src/device-release.js +1 -1
  104. package/dist/src/device-selection-resolver.js +1 -1
  105. package/dist/src/device-shell.js +1 -1
  106. package/dist/src/device.js +3 -1
  107. package/dist/src/devicectl.js +1 -1
  108. package/dist/src/diagnostics.js +1 -1
  109. package/dist/src/doctor-facade.js +1 -1
  110. package/dist/src/durable-capture-resource.js +1 -1
  111. package/dist/src/durable-resource.js +1 -1
  112. package/dist/src/engine-eval-script.js +1 -1
  113. package/dist/src/error.js +1 -1
  114. package/dist/src/exec.js +1 -1
  115. package/dist/src/expo-dev-client-launch.js +1 -0
  116. package/dist/src/file.js +3 -1
  117. package/dist/src/find.js +1 -1
  118. package/dist/src/finders.js +1 -1
  119. package/dist/src/generic-settle.js +1 -1
  120. package/dist/src/generic.js +1 -1
  121. package/dist/src/gesture-admission.js +1 -1
  122. package/dist/src/gesture-plan-types.d.ts +2 -5
  123. package/dist/src/gesture-plan.js +1 -1
  124. package/dist/src/gesture-runtime.js +1 -1
  125. package/dist/src/harmonyos.js +1 -1
  126. package/dist/src/hdc.js +1 -1
  127. package/dist/src/helper.js +2 -2
  128. package/dist/src/human-control.js +1 -1
  129. package/dist/src/ime-rebind.js +1 -1
  130. package/dist/src/ime-state.js +1 -1
  131. package/dist/src/index.d.ts +4 -4
  132. package/dist/src/index.js +1 -1
  133. package/dist/src/input-actions.js +1 -1
  134. package/dist/src/input-actions2.js +2 -2
  135. package/dist/src/install-source-network-transport.js +1 -1
  136. package/dist/src/install-source2.js +1 -1
  137. package/dist/src/interaction-error.js +1 -0
  138. package/dist/src/interaction-positionals.js +1 -1
  139. package/dist/src/interaction.js +1 -1
  140. package/dist/src/interaction2.js +1 -1
  141. package/dist/src/interactor-operation-catalog.js +1 -1
  142. package/dist/src/interactor.js +5 -5
  143. package/dist/src/interactor2.js +1 -1
  144. package/dist/src/interactors.js +1 -1
  145. package/dist/src/internal/bin.js +1 -1
  146. package/dist/src/internal/daemon.js +5 -1
  147. package/dist/src/internal/png-worker.js +1 -1
  148. package/dist/src/inventory.js +2 -2
  149. package/dist/src/inventory2.js +1 -1
  150. package/dist/src/inventory6.js +1 -1
  151. package/dist/src/io.d.ts +2 -2
  152. package/dist/src/ios-client.js +1 -1
  153. package/dist/src/ios-settings.js +1 -1
  154. package/dist/src/ios-snapshot-acquisition.js +1 -1
  155. package/dist/src/ios-snapshot-adapter.js +1 -1
  156. package/dist/src/ios-snapshot-engine.js +1 -1
  157. package/dist/src/ios-snapshot-runtime.js +1 -1
  158. package/dist/src/keyed-lock.js +1 -1
  159. package/dist/src/launch-confirmation.js +1 -1
  160. package/dist/src/lease.js +1 -1
  161. package/dist/src/limrun-runtime-dependencies.js +1 -1
  162. package/dist/src/limrun.d.ts +5 -564
  163. package/dist/src/limrun.js +1 -1
  164. package/dist/src/linux.js +1 -1
  165. package/dist/src/load.js +1 -1
  166. package/dist/src/local-interactor-operation-set.js +1 -1
  167. package/dist/src/log-stream.js +9 -9
  168. package/dist/src/mechanics.js +16 -16
  169. package/dist/src/metro.js +1 -1
  170. package/dist/src/metro2.js +1 -1
  171. package/dist/src/mobile-snapshot-semantics.js +1 -1
  172. package/dist/src/observability.js +1 -1
  173. package/dist/src/observation.js +1 -2
  174. package/dist/src/open-target-resolution.js +1 -1
  175. package/dist/src/output-path.js +1 -1
  176. package/dist/src/overlay.js +1 -3
  177. package/dist/src/perf-facade.js +1 -1
  178. package/dist/src/perf-runtime-operation-builder.js +1 -1
  179. package/dist/src/perf-runtime.js +1 -1
  180. package/dist/src/perf-target.js +1 -1
  181. package/dist/src/physical-device-control.js +1 -1
  182. package/dist/src/platform-request-scope.js +1 -1
  183. package/dist/src/platform-runtime-android-adb-host.js +1 -1
  184. package/dist/src/platform-runtime-app-log-android-transport.js +1 -1
  185. package/dist/src/platform-runtime-apple-resources.js +1 -0
  186. package/dist/src/platform-runtime-claim-recovery.js +1 -0
  187. package/dist/src/platform-runtime-daemon-services.js +1 -0
  188. package/dist/src/platform-runtime-host.js +1 -1
  189. package/dist/src/platform-runtime-network-web-transport.js +1 -1
  190. package/dist/src/platform-runtime-open-target.js +1 -1
  191. package/dist/src/platform-runtime-operation-host.js +4 -4
  192. package/dist/src/platform-runtime-runtime-hints.js +2 -2
  193. package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
  194. package/dist/src/platform-runtime-screen-recording-apple-runner-transport.js +1 -1
  195. package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
  196. package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
  197. package/dist/src/platform-runtime-screen-recording-harmony-host.js +1 -1
  198. package/dist/src/platform-runtime-screen-recording-web-host.js +1 -1
  199. package/dist/src/platform-runtime-unavailable.js +1 -1
  200. package/dist/src/platform-runtime.js +1 -1
  201. package/dist/src/platform-runtime2.js +1 -1
  202. package/dist/src/plugin.js +1 -0
  203. package/dist/src/plugins/webdriver.d.ts +111 -0
  204. package/dist/src/plugins/webdriver.js +1 -0
  205. package/dist/src/plugins.d.ts +2 -1
  206. package/dist/src/plugins2.js +1 -1
  207. package/dist/src/png-crop-bytes.js +1 -1
  208. package/dist/src/png-resize.js +1 -0
  209. package/dist/src/png-worker-client.js +1 -1
  210. package/dist/src/png-worker-contract.js +1 -1
  211. package/dist/src/process-entry.js +1 -1
  212. package/dist/src/process-exit.js +1 -1
  213. package/dist/src/process.js +1 -1
  214. package/dist/src/provider-credential-fingerprint.js +1 -1
  215. package/dist/src/provider-device-admission.js +1 -1
  216. package/dist/src/provider-device-runtime.d.ts +556 -0
  217. package/dist/src/provider-policy.js +1 -0
  218. package/dist/src/provider-profile-fields.js +1 -1
  219. package/dist/src/provider-webdriver.js +1 -2
  220. package/dist/src/proxy.js +2 -2
  221. package/dist/src/quality-warnings.js +1 -1
  222. package/dist/src/react-devtools.js +2 -0
  223. package/dist/src/react-native-overlay2.js +3 -0
  224. package/dist/src/react-native.js +1 -1
  225. package/dist/src/record-runtime.js +1 -1
  226. package/dist/src/record-trace.js +1 -1
  227. package/dist/src/recording.js +2 -2
  228. package/dist/src/register-builtins.js +1 -1
  229. package/dist/src/remote-bridge.js +1 -0
  230. package/dist/src/remote-config-core.js +1 -0
  231. package/dist/src/remote-config.js +1 -1
  232. package/dist/src/remote-config2.js +1 -1
  233. package/dist/src/replay-backend-registry.js +1 -0
  234. package/dist/src/replay-divergence.js +1 -1
  235. package/dist/src/replay-maestro-backend.js +117 -0
  236. package/dist/src/replay-script-selection.js +1 -0
  237. package/dist/src/replay.js +1 -3
  238. package/dist/src/replay2.js +1 -0
  239. package/dist/src/reporting.js +3 -3
  240. package/dist/src/request-cancel.js +1 -1
  241. package/dist/src/request-providers.js +1 -1
  242. package/dist/src/request-runtime-binding.js +1 -1
  243. package/dist/src/result-serialization.js +1 -1
  244. package/dist/src/retry.js +1 -1
  245. package/dist/src/retry2.js +1 -0
  246. package/dist/src/runner-artifact-manifest.js +1 -1
  247. package/dist/src/runner-cache-retention.js +1 -0
  248. package/dist/src/runner-cache-trim.js +1 -0
  249. package/dist/src/runner-client.js +1 -1
  250. package/dist/src/runner-dev-tools-security.js +1 -1
  251. package/dist/src/runner-device-readiness.js +1 -1
  252. package/dist/src/runner-device-set.js +1 -0
  253. package/dist/src/runner-error-classification.js +3 -3
  254. package/dist/src/runner-exchange.js +1 -1
  255. package/dist/src/runner-lease.js +1 -0
  256. package/dist/src/runner-operations-facade.js +1 -1
  257. package/dist/src/runner-retention.js +1 -0
  258. package/dist/src/runner-start-budget.js +1 -1
  259. package/dist/src/runner-startup-transport.js +1 -0
  260. package/dist/src/runner-toolchain-probe.js +2 -0
  261. package/dist/src/runner.js +2 -1
  262. package/dist/src/runtime-command-surface.js +1 -0
  263. package/dist/src/runtime-deployment.js +1 -0
  264. package/dist/src/runtime-factory.js +1 -0
  265. package/dist/src/runtime-session.js +1 -0
  266. package/dist/src/runtime-transport-hints.js +1 -1
  267. package/dist/src/runtime.js +2 -1
  268. package/dist/src/runtime10.js +2 -2
  269. package/dist/src/runtime2.js +4 -4
  270. package/dist/src/runtime3.js +1 -1
  271. package/dist/src/runtime4.js +5 -5
  272. package/dist/src/runtime5.js +1 -1
  273. package/dist/src/runtime6.js +1 -1
  274. package/dist/src/runtime7.js +1 -1
  275. package/dist/src/runtime8.js +1 -1
  276. package/dist/src/runtime9.js +1 -1
  277. package/dist/src/screen-recording-transport.js +1 -1
  278. package/dist/src/screenshot-density.js +1 -1
  279. package/dist/src/screenshot-image.js +1 -1
  280. package/dist/src/screenshot-runtime.js +1 -1
  281. package/dist/src/screenshot3.js +5 -5
  282. package/dist/src/sdk-batch-runner.js +2 -2
  283. package/dist/src/sdk-batch.js +2 -2
  284. package/dist/src/sdk-contracts.d.ts +20 -29
  285. package/dist/src/sdk-contracts.js +2 -2
  286. package/dist/src/sdk-device.js +1 -1
  287. package/dist/src/sdk-finders.d.ts +1 -1
  288. package/dist/src/sdk-finders.js +1 -1
  289. package/dist/src/sdk-io.d.ts +4 -2
  290. package/dist/src/sdk-remote-config.d.ts +4 -0
  291. package/dist/src/sdk-remote-config.js +1 -1
  292. package/dist/src/sdk-selectors.d.ts +5 -6
  293. package/dist/src/sdk-selectors.js +1 -1
  294. package/dist/src/selection.js +0 -0
  295. package/dist/src/selector-pipeline-policy.js +1 -1
  296. package/dist/src/selector-runtime.js +1 -1
  297. package/dist/src/selectors.js +1 -1
  298. package/dist/src/server.js +2 -2
  299. package/dist/src/session-allocation.js +1 -1
  300. package/dist/src/session-replay-runtime-failure-response.js +1 -0
  301. package/dist/src/session-runtime-admission.js +1 -1
  302. package/dist/src/session.js +1 -1
  303. package/dist/src/session2.js +5 -5
  304. package/dist/src/settings.js +1 -1
  305. package/dist/src/settings2.js +1 -1
  306. package/dist/src/simctl-settings.js +1 -1
  307. package/dist/src/simctl.js +1 -1
  308. package/dist/src/simulator-boot.js +1 -1
  309. package/dist/src/simulator-state.js +1 -1
  310. package/dist/src/simulator.js +1 -1
  311. package/dist/src/snapshot-capture-annotations.js +1 -1
  312. package/dist/src/snapshot-chrome.js +1 -0
  313. package/dist/src/snapshot-desktop-projection.js +1 -1
  314. package/dist/src/snapshot-evidence.js +1 -0
  315. package/dist/src/snapshot-node-lookup.js +1 -0
  316. package/dist/src/snapshot-occlusion.js +1 -0
  317. package/dist/src/snapshot-quality-verdict.js +1 -0
  318. package/dist/src/snapshot-runtime-binding.js +1 -1
  319. package/dist/src/snapshot-runtime.js +1 -1
  320. package/dist/src/snapshot-state.js +1 -1
  321. package/dist/src/snapshot.js +1 -1
  322. package/dist/src/snapshot2.js +1 -1
  323. package/dist/src/snapshot3.js +1 -1
  324. package/dist/src/src.js +5 -1
  325. package/dist/src/src2.js +1 -1
  326. package/dist/src/src3.js +2 -1
  327. package/dist/src/store.js +1 -1
  328. package/dist/src/surface-snapshot2.js +1 -1
  329. package/dist/src/target-evidence-tree.js +1 -0
  330. package/dist/src/target-evidence.js +1 -1
  331. package/dist/src/text-entry-focus.js +1 -1
  332. package/dist/src/tool-provider2.js +1 -1
  333. package/dist/src/touch-runtime.js +1 -1
  334. package/dist/src/touch-runtime2.js +1 -1
  335. package/dist/src/tree.js +1 -1
  336. package/dist/src/tv-remote.js +1 -1
  337. package/dist/src/type-text-runtime.js +1 -1
  338. package/dist/src/undici.js +8 -8
  339. package/dist/src/update-check.js +1 -1
  340. package/dist/src/vars.js +1 -1
  341. package/dist/src/version.js +1 -1
  342. package/dist/src/video.js +2 -2
  343. package/dist/src/wait.js +1 -0
  344. package/dist/src/web.js +1 -1
  345. package/dist/src/web2.js +1 -1
  346. package/package.json +22 -19
  347. package/server.json +2 -2
  348. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.23.apk.sha256 +0 -1
  349. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.23.apk +0 -0
  350. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.23.apk.sha256 +0 -1
  351. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.23.manifest.json +0 -16
  352. package/dist/src/adb-transport.js +0 -1
  353. package/dist/src/alert-runtime.js +0 -1
  354. package/dist/src/app-deployment-resolution.js +0 -2
  355. package/dist/src/app-inventory-contract.js +0 -1
  356. package/dist/src/app-log-session-resource.js +0 -1
  357. package/dist/src/application-lifecycle-runtime.js +0 -1
  358. package/dist/src/auth-session.js +0 -1
  359. package/dist/src/cache.js +0 -1
  360. package/dist/src/capabilities.js +0 -1
  361. package/dist/src/capture.js +0 -1
  362. package/dist/src/catalog.js +0 -1
  363. package/dist/src/click-button.js +0 -1
  364. package/dist/src/client-metro-companion.js +0 -1
  365. package/dist/src/client-options.js +0 -3
  366. package/dist/src/compatibility-policy.js +0 -1
  367. package/dist/src/daemon-artifacts.js +0 -1
  368. package/dist/src/daemon-client-transport.js +0 -1
  369. package/dist/src/daemon-http.js +0 -1
  370. package/dist/src/device-claim-rule.js +0 -1
  371. package/dist/src/device-rotation.js +0 -1
  372. package/dist/src/device-session.js +0 -3
  373. package/dist/src/device2.js +0 -1
  374. package/dist/src/device3.js +0 -3
  375. package/dist/src/dispatch-resolve.js +0 -4
  376. package/dist/src/format.js +0 -1
  377. package/dist/src/gesture-plan-types.js +0 -1
  378. package/dist/src/host.js +0 -1
  379. package/dist/src/human-control-contract.js +0 -1
  380. package/dist/src/interaction-ref-policy.js +0 -1
  381. package/dist/src/interactor-operation-binding.js +0 -1
  382. package/dist/src/keyboard-actions.js +0 -1
  383. package/dist/src/lease-context.js +0 -1
  384. package/dist/src/lease-registry-scope.js +0 -1
  385. package/dist/src/lease-scope.js +0 -1
  386. package/dist/src/managed-device-scope.js +0 -1
  387. package/dist/src/observe-until.js +0 -1
  388. package/dist/src/output-common.js +0 -5
  389. package/dist/src/owner-identity.js +0 -3
  390. package/dist/src/path-resolution.js +0 -1
  391. package/dist/src/perf-runtime-plan.js +0 -1
  392. package/dist/src/platform-runtime-app-log-process.js +0 -1
  393. package/dist/src/platform-runtime-managed-owner.js +0 -1
  394. package/dist/src/platform-runtime-screen-recording-process-host.js +0 -1
  395. package/dist/src/png.js +0 -1
  396. package/dist/src/prepare-kind.js +0 -1
  397. package/dist/src/provider-device-runtimes.js +0 -1
  398. package/dist/src/provider-session-ownership.js +0 -2
  399. package/dist/src/providers.js +0 -1
  400. package/dist/src/registry.js +0 -68
  401. package/dist/src/request-admission.js +0 -1
  402. package/dist/src/request-cancellation.js +0 -1
  403. package/dist/src/request-progress-protocol.js +0 -1
  404. package/dist/src/runner-cache-metadata.js +0 -3
  405. package/dist/src/runner-disposal.js +0 -1
  406. package/dist/src/runner-session-types.js +0 -1
  407. package/dist/src/runtime-admission.js +0 -1
  408. package/dist/src/screen-recording-admission-ledger.js +0 -1
  409. package/dist/src/screen-recording-resource-recovery.js +0 -1
  410. package/dist/src/screenshot-result.js +0 -1
  411. package/dist/src/script.js +0 -1
  412. package/dist/src/scroll-command.js +0 -1
  413. package/dist/src/scroll-gesture.js +0 -1
  414. package/dist/src/scroll-indicator.js +0 -1
  415. package/dist/src/session-artifact-paths.js +0 -1
  416. package/dist/src/session-paths.js +0 -1
  417. package/dist/src/session-repair-tombstone.js +0 -1
  418. package/dist/src/session-routing.js +0 -1
  419. package/dist/src/session-snapshot.js +0 -1
  420. package/dist/src/snapshot4.js +0 -1
  421. package/dist/src/src4.js +0 -1
  422. package/dist/src/src5.js +0 -1
  423. package/dist/src/src6.js +0 -1
  424. package/dist/src/src7.js +0 -2
  425. package/dist/src/src8.js +0 -115
  426. package/dist/src/string-enum.js +0 -1
  427. package/dist/src/success-text.js +0 -1
  428. package/dist/src/timeouts.js +0 -1
  429. package/dist/src/touch-reference-frame.js +0 -1
  430. package/dist/src/transport.js +0 -3
  431. package/dist/src/ttl-memo.js +0 -1
  432. package/dist/src/verified-file.js +0 -1
  433. package/dist/src/viewport.js +0 -1
  434. package/dist/src/window-state.js +0 -1
  435. /package/dist/src/{doctor-output.js → doctor-lines.js} +0 -0
@@ -1 +0,0 @@
1
- import{I as e,K as t,P as n,V as r,z as i}from"./sdk-contracts.js";import{n as a}from"./entities.js";import{t as o}from"./parser.js";import{A as s,L as c,M as l,V as u,a as d,i as f,j as p,o as m,t as h}from"./host.js";import{o as g}from"./runner-cache-metadata.js";import{d as _,i as v,m as y,r as ee,s as te,t as ne,v as re}from"./runner-error-classification.js";import b from"node:fs";import ie from"node:os";import x from"node:path";import S from"node:net";import C from"node:http";async function ae(){return await new Promise((e,t)=>{let r=S.createServer();r.listen(0,`127.0.0.1`,()=>{let i=r.address();if(typeof i==`object`&&i?.port){let t=i.port;r.close(()=>e(t))}else r.close(()=>t(new n(`COMMAND_FAILED`,`Failed to allocate port`)))}),r.on(`error`,t)})}function oe(e,t,n,r){t&&E(t,e),n&&E(n,e),r&&process.stderr.write(e)}const w=new Map,T=new Map;function E(e,t){let n=(w.get(e)??Promise.resolve()).then(()=>D(e,t),()=>D(e,t)).then(()=>{T.delete(e)},t=>{T.set(e,t)}).finally(()=>{w.get(e)===n&&w.delete(e)});w.set(e,n)}async function D(e,t){await b.promises.mkdir(x.dirname(e),{recursive:!0}),await b.promises.appendFile(e,t)}async function se(e,t={}){let n=AbortSignal.any([t.signal??new AbortController().signal,AbortSignal.timeout(t.timeoutMs??2e3)]);if(n.aborted)throw n.reason;let r=w.get(e);if(r){let e=()=>{};try{await Promise.race([r,new Promise((t,r)=>{e=()=>r(n.reason),n.addEventListener(`abort`,e,{once:!0})})])}finally{n.removeEventListener(`abort`,e)}}let i=T.get(e);if(i!==void 0)throw i}function ce(e){try{b.existsSync(e)&&b.unlinkSync(e)}catch{}}function le(e,t){if(e)return e;let n=t.replaceAll(/[^A-Za-z0-9._-]/g,`_`);return x.join(ie.tmpdir(),`agent-device`,`apple-runner`,`logs`,`${n}.log`)}function ue(e,t){let n=0;try{n=b.fstatSync(t).size}catch{}return{logPath:e,startOffset:n}}function de(e){let t=e.pollMs??50,n=Buffer.alloc(65536),r=e.file.startOffset,i=null,a=null,o=!1,s=()=>{if(!o)try{i??=b.openSync(e.file.logPath,`r`);let t=b.fstatSync(i).size;for(t<r&&(r=0);r<t;){let a=Math.min(n.length,t-r),o=b.readSync(i,n,0,a,r);if(o<=0)break;r+=o,e.onOutput(n.toString(`utf8`,0,o)),t=b.fstatSync(i).size}}catch{l()}},c=()=>{o||(a=setTimeout(()=>{s(),c()},t),a.unref?.())};function l(){if(!o&&(o=!0,a&&clearTimeout(a),a=null,i!==null)){try{b.closeSync(i)}catch{}i=null}}return c(),{drain:()=>{s(),l()},stop:l}}function fe(e,t){if(!e)return``;let n=null;try{n=b.openSync(e.logPath,`r`);let r=b.fstatSync(n).size,i=Math.max(e.startOffset,r-t),a=r-i;if(a<=0)return``;let o=Buffer.alloc(a),s=b.readSync(n,o,0,a,i);return o.toString(`utf8`,0,Math.max(s,0))}catch{return``}finally{if(n!==null)try{b.closeSync(n)}catch{}}}const O=new Map;function k(e,t){let n,r=!1;return{markUsbmuxUnattached:()=>{r=!0},resolveRoute:async(i,a=!1)=>{if(e.kind!==`device`)return j(e,t,null,!1);let o=p(e);if(o.backend===`xctest`||!r)return pe(e,t);if(!a){let r=me(e.id);if(r)return j(e,t,r,!0);if(n!==void 0)return j(e,t,n,!1)}let{tunnelIp:s}=await o.resolveTunnel(e,i);return n=s,s&&he(e.id,s),j(e,t,s,!1)}}}function A(e){O.delete(e)}function pe(e,t){return{kind:`usbmux`,endpoints:[`usbmux://${e.id}:${t}/command`],cachedTunnelIp:!1}}function j(e,t,n,r){let i=[`http://127.0.0.1:${t}/command`];return e.kind===`device`&&n&&i.unshift(`http://[${n}]:${t}/command`),{kind:`network`,endpoints:i,cachedTunnelIp:r}}function me(e){let t=O.get(e);return t?t.expiresAt<=Date.now()?(O.delete(e),null):t.ip:null}function he(e,t){O.set(e,{ip:t,expiresAt:Date.now()+3e4})}function M(e){return u(e).simulatorSetPath}function ge(e,t){let n=u(e),r=u(t);return n.udid===r.udid&&n.simulatorSetPath===r.simulatorSetPath}function _e(e,t){let n=M(e);return n===void 0?[`-destination`,t]:[`-destination`,t,`-DVTSimulatorSetLocation=${n}`]}function N(e){let t=M(e);if(t===void 0)return{};let n=g(e);return n===void 0?{simulatorSetPath:t}:{simulatorSetPath:t,xcodeVersion:n}}function P(e,t,n){return`${e}: xcodebuild found no simulator ${t.id} in simulator set ${n.simulatorSetPath}${n.xcodeVersion===void 0?``:` with Xcode ${n.xcodeVersion}`}`}const F=`Connect the device by cable, trust this Mac, keep it unlocked, and retry.`;async function ve(e,t,n,r,i){let a=h.fromTimeoutMs(r);return await be(e,t,await ye(e,t,a.remainingMs(),i),n,a.remainingMs(),i)}async function ye(e,t,r,i){let a=await I(e,r,i);try{await L(a,1,z(`ListDevices`));let e=xe((await R(a,r,i)).payload.toString(`utf8`),t);if(e!==void 0)return e;throw new n(`DEVICE_NOT_FOUND`,`iOS device is not available through usbmux`,{deviceId:t,backend:`xctest`,usbmuxDeviceAttached:!1,hint:F})}finally{a.destroy()}}async function be(e,t,n,r,i,a){let o=await I(e,i,a);try{await L(o,2,z(`Connect`,{DeviceID:n,PortNumber:Te(r)}));let e=Ce((await R(o,i,a)).payload.toString(`utf8`),`Number`);if(e!==0)throw we({result:e,udid:t,deviceId:n,port:r});return o}catch(e){throw o.destroy(),e}}async function I(t,r,i){if(H(r,`connect to usbmuxd`),i?.aborted)throw e();return await new Promise((a,o)=>{let s=S.createConnection(t),c=!1,l=setTimeout(()=>{p(new n(`COMMAND_FAILED`,`Timed out connecting to usbmuxd`,{backend:`xctest`,socketPath:t,timeoutMs:r}))},r),u=()=>p(),d=e=>p(e),f=()=>p(e()),p=e=>{c||(c=!0,clearTimeout(l),s.off(`connect`,u),s.off(`error`,d),i?.removeEventListener(`abort`,f),e?(s.destroy(),o(e)):a(s))};s.once(`connect`,u),s.once(`error`,d),i?.addEventListener(`abort`,f,{once:!0})})}async function L(e,t,n){let r=Buffer.from(n,`utf8`),i=Buffer.alloc(16+r.length);i.writeUInt32LE(i.length,0),i.writeUInt32LE(1,4),i.writeUInt32LE(8,8),i.writeUInt32LE(t,12),r.copy(i,16),!e.write(i)&&await new Promise((t,n)=>{e.once(`drain`,t),e.once(`error`,n)})}async function R(t,r,i){if(H(r,`read usbmuxd response`),i?.aborted)throw e();return await new Promise((a,o)=>{let s=Buffer.alloc(0),c=!1,l=setTimeout(()=>m(new n(`COMMAND_FAILED`,`Timed out reading usbmuxd response`,{backend:`xctest`,timeoutMs:r})),r),u=e=>{if(s=Buffer.concat([s,e]),s.length<16)return;let t=s.readUInt32LE(0);if(t<16||t>4194304){m(new n(`COMMAND_FAILED`,`Invalid usbmuxd response length`));return}s.length<t||m(void 0,{payload:s.subarray(16,t)})},d=e=>m(e),f=()=>m(new n(`COMMAND_FAILED`,`usbmuxd closed the connection unexpectedly`)),p=()=>m(e()),m=(e,n)=>{c||(c=!0,clearTimeout(l),t.off(`data`,u),t.off(`error`,d),t.off(`close`,f),i?.removeEventListener(`abort`,p),t.pause(),e?o(e):a(n))};t.on(`data`,u),t.once(`error`,d),t.once(`close`,f),i?.addEventListener(`abort`,p,{once:!0}),t.resume()})}function z(e,t={}){return`<?xml version="1.0" encoding="UTF-8"?><plist version="1.0"><dict>${[[`BundleID`,`com.callstack.agent-device`],[`ClientVersionString`,`agent-device`],[`MessageType`,e],[`ProgName`,`agent-device`],[`kLibUSBMuxVersion`,3],...Object.entries(t)].map(([e,t])=>typeof t==`number`?`<key>${a(e)}</key><integer>${t}</integer>`:`<key>${a(e)}</key><string>${a(t)}</string>`).join(``)}</dict></plist>`}function xe(e,t){let n;for(let r of V(o(e))){let e=Se(r);if(e?.udid===t){if(B(B(r,`Properties`),`ConnectionType`)?.text===`USB`)return e.id;n??=e.id}}return n}function Se(e){if(e.name!==`dict`)return;let t=B(e,`Properties`);if(t?.name!==`dict`)return;let n=B(t,`SerialNumber`)?.text,r=Number(B(e,`DeviceID`)?.text);if(!(!n||!Number.isSafeInteger(r)||r<=0))return{udid:n,id:r}}function Ce(e,t){for(let n of V(o(e))){if(n.name!==`dict`)continue;let e=B(n,t);if(e?.name!==`integer`)continue;let r=Number(e.text);if(Number.isSafeInteger(r))return r}}function B(e,t){for(let n=0;n<e.children.length-1;n+=1){let r=e.children[n];if(r?.name===`key`&&r.text===t)return e.children[n+1]}}function*V(e){for(let t of e)yield t,yield*V(t.children)}function we(e){let{result:t,udid:r,deviceId:i,port:a}=e;return t===2?new n(`DEVICE_NOT_FOUND`,`iOS device is no longer available through usbmux`,{deviceId:r,backend:`xctest`,usbmuxDeviceAttached:!1,usbmuxResult:t,hint:F}):t===3?new n(`COMMAND_FAILED`,`XCTest runner is not listening on the device port`,{backend:`xctest`,deviceId:i,port:a,usbmuxResult:t,hint:`The device is reachable but nothing is bound to the runner port yet; this resolves once the runner finishes starting.`}):new n(`COMMAND_FAILED`,`Failed to connect to XCTest runner through usbmux`,{backend:`xctest`,deviceId:i,port:a,usbmuxResult:t,hint:`Keep the device connected by cable and unlocked, then retry.`})}function Te(e){return(e&255)<<8|e>>>8&255}function H(e,t){if(!(e>0))throw new n(`COMMAND_FAILED`,`No time remaining to ${t}`,{backend:`xctest`,timeoutMs:e})}function Ee(e){return{postCommand:async(t,r,a,o,s)=>{let c=h.fromTimeoutMs(o),l=await ve(e,t,r,c.remainingMs(),s).catch(e=>{throw e instanceof n?i(e,`no`):e});try{return await De(l,a,c.remainingMs(),s)}catch(e){throw l.destroy(),e}}}}const U=Ee(`/var/run/usbmuxd`);async function De(t,r,i,a){if(Ae(i),a?.aborted)throw e();let o=Buffer.from(JSON.stringify(r),`utf8`),s=AbortSignal.timeout(i),c=a?AbortSignal.any([a,s]):s,l=new C.Agent;l.createConnection=(e,n)=>(n?.(null,t),t);try{let e=await Oe(l,t,o,c);return new Response((await ke(e)).toString(`utf8`),{status:e.statusCode??500})}catch(t){throw a?.aborted?e():s.aborted?new n(`COMMAND_FAILED`,`Timed out waiting for XCTest runner over usbmux`,{backend:`xctest`,timeoutMs:i}):t}finally{l.destroy(),t.destroy()}}async function Oe(e,t,n,r){return await new Promise((i,a)=>{let o=C.request({method:`POST`,host:`127.0.0.1`,path:`/command`,headers:{"Content-Type":`application/json`,"Content-Length":n.length,Connection:`close`},agent:e,signal:r},i);o.once(`error`,a),t.resume(),o.end(n)})}async function ke(e){let t=[],r=0;for await(let i of e){let e=Buffer.isBuffer(i)?i:Buffer.from(i);if(r+=e.length,r>67108864)throw new n(`COMMAND_FAILED`,`XCTest runner response exceeded size limit`);t.push(e)}return Buffer.concat(t)}function Ae(e){if(!(e>0))throw new n(`COMMAND_FAILED`,`No time remaining to send XCTest runner command`,{backend:`xctest`,timeoutMs:e})}const W=45e3;async function je(t,r,i,a=W,o){if(o?.aborted)throw e();let s=h.fromTimeoutMs(a),c=k(t,r),l=await c.resolveRoute(s.remainingMs());if(l.kind===`usbmux`)try{return await Me(t,r,i,s,o)}catch(e){if(!G(t,e))throw e;c.markUsbmuxUnattached(),l=await c.resolveRoute(s.remainingMs())}let u=s.remainingMs();if(u<=0)throw new n(`COMMAND_FAILED`,`Runner command deadline exceeded`,{timeoutMs:a});let d=l.endpoints[0];if(!d)throw new n(`COMMAND_FAILED`,`Runner command endpoint not available`,{port:r,endpoints:l.endpoints});return await K(d,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(i)},u,o)}async function Me(e,t,r,i,a){let o=i.remainingMs();if(o<=0)throw new n(`COMMAND_FAILED`,`Runner command deadline exceeded`,{port:t,timeoutMs:o});return await U.postCommand(e.id,t,r,o,a)}function G(e,t){return _(t)?p(e).backend!==`xctest`:!1}async function K(e,t,r,i){let a=AbortSignal.timeout(r),o=i?AbortSignal.any([i,a]):a;try{return await fetch(e,{...t,signal:o})}catch(e){throw e===a.reason?new n(`COMMAND_FAILED`,`Runner command deadline exceeded`,{timeoutMs:r},e):e}}const q=45e3,J=2e4;async function Ne(n,r,i,a,o=q,s,c){let u=h.fromTimeoutMs(o),{resolveRoute:d,markUsbmuxUnattached:f}=k(n,r),p=await d(u.remainingMs()),m=null,g=!1,v=Math.max(1,Math.ceil(o/250));try{return await l(async({deadline:e})=>{let t=await Pe({device:n,port:r,command:i,timeoutMs:o,logPath:a,session:s,route:p,resolveRoute:d,markUsbmuxUnattached:f,signal:c,attemptDeadline:e,setRoute:e=>{p=e},setLastError:e=>{m=e,te(e)||(g=!0)}});if(t)return t;throw ze({port:r,endpoints:p.endpoints,lastError:m,signal:c})},{maxAttempts:v,baseDelayMs:300,maxDelayMs:2e3,jitter:.2,shouldRetry:re},{deadline:u,phase:`ios_runner_connect`,signal:c,retryWakeSignal:n.kind===`simulator`?s?.startupRetryWake:void 0})}catch(n){if(c?.aborted||t(n))throw e();if(_(n))throw n;m||=n}if(c?.aborted)throw e();if(n.kind===`simulator`){let e=u.remainingMs();if(e<=0)throw Y(Ue({port:r,endpoints:p.endpoints,logPath:a,lastError:m}),g);let t=await Z(n,r,i,e,c).catch(e=>{throw Y(e,g)});return new Response(t.body,{status:t.status})}throw s?.child.exitCode!==null&&s?.child.exitCode!==void 0?Y(await We({session:s,port:r,logPath:a}),g):Y(Ue({port:r,endpoints:p.endpoints,logPath:a,lastError:m,deviceStates:s?.startupDeviceStates}),g)}function Y(e,t){return e instanceof n?t?i(e,`unknown`):r(e,`no`):e}async function Pe(e){await Fe(e);let t=await Ie(e);return t.response?t.response:await Le(e)||await Re(e,t.usedCachedTunnelIp)}async function Fe(e){if(e.attemptDeadline?.isExpired())throw new n(`COMMAND_FAILED`,`Runner connection deadline exceeded`,{port:e.port,timeoutMs:e.timeoutMs});if(e.session?.child.exitCode!==null&&e.session?.child.exitCode!==void 0)throw await We({session:e.session,port:e.port,logPath:e.logPath})}async function Ie(e){let t=e.route,n=!1;e.device.kind===`device`&&(t=await e.resolveRoute(e.attemptDeadline?.remainingMs()),n=t.cachedTunnelIp,e.setRoute(t));let r=async t=>{let n=t.cachedTunnelIp?t.endpoints[0]:null;return await X(e.device,t,{command:e.command,port:e.port,timeoutMs:e.timeoutMs,signal:e.signal,attemptDeadline:e.attemptDeadline,onUsbmuxUnattached:e.markUsbmuxUnattached,onError:(t,r)=>{e.setLastError(r),e.device.kind===`device`&&t===n&&A(e.device.id)}})},i=await r(t);if(i||t.kind!==`usbmux`)return{response:i,usedCachedTunnelIp:n};let a=await e.resolveRoute(e.attemptDeadline?.remainingMs());return a.kind===`usbmux`?{response:null,usedCachedTunnelIp:n}:(e.setRoute(a),{response:await r(a),usedCachedTunnelIp:a.cachedTunnelIp})}async function Le(e){return e.device.kind!==`simulator`||e.session?.state!==`ready`?null:await Ve(e.device,e.port,e.command,{signal:e.signal,attemptDeadline:e.attemptDeadline,onError:e.setLastError})}async function Re(e,t){if(e.device.kind!==`device`||!t)return null;A(e.device.id);let n=await e.resolveRoute(e.attemptDeadline?.remainingMs(),!0);return e.setRoute(n),await X(e.device,n,{command:e.command,port:e.port,timeoutMs:e.timeoutMs,signal:e.signal,attemptDeadline:e.attemptDeadline,onError:(t,n)=>{e.setLastError(n)}})}function ze(t){if(t.signal?.aborted)throw e();return new n(`COMMAND_FAILED`,`Runner endpoint probe failed`,{port:t.port,endpoints:t.endpoints,lastError:t.lastError?String(t.lastError):void 0,...y(`runner_endpoint_probe_exhausted`)})}async function X(r,a,o){if(a.kind===`network`)return await Be(a.endpoints,o);let s=a.endpoints[0];try{let e=o.attemptDeadline?.remainingMs()??o.timeoutMs;if(e<=0)throw i(new n(`COMMAND_FAILED`,`Runner connection deadline exceeded`,{port:o.port,timeoutMs:o.timeoutMs}),`no`);return await U.postCommand(r.id,o.port,o.command,Math.min(J,e),o.signal)}catch(n){if(o.signal?.aborted||t(n))throw e();if(_(n)){if(!G(r,n))throw n;return o.onUsbmuxUnattached?.(),null}return o.onError(s,n),null}}async function Be(r,a){let{command:o,port:s,timeoutMs:c,signal:l,attemptDeadline:u,onError:d}=a;for(let a of r)try{let e=u?.remainingMs()??c;if(e<=0)throw i(new n(`COMMAND_FAILED`,`Runner connection deadline exceeded`,{port:s,timeoutMs:c}),`no`);return await K(a,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(o)},Math.min(J,e),l)}catch(n){if(l?.aborted||t(n))throw e();d(a,n)}return null}async function Ve(n,r,i,a){let{signal:o,attemptDeadline:s,onError:c}=a,l=s?.remainingMs()??45e3;if(l<=0)return null;try{let e=await Z(n,r,i,l,o);return new Response(e.body,{status:e.status})}catch(n){if(o?.aborted||t(n))throw e();return c(n),null}}async function Z(e,t,n,r,i){let a=JSON.stringify(n),o=d(e,[`spawn`,e.id,`/usr/bin/curl`,`-s`,`-X`,`POST`,`-H`,`Content-Type: application/json`,`--data`,a,`http://127.0.0.1:${t}/command`]);return{status:200,body:s(await c(o,{allowFailure:!0,timeoutMs:r,signal:i}),`Runner did not accept connection (simctl spawn)`,e=>{let n=m({message:`Runner did not accept connection (simctl spawn)`,stdout:e.stdout,stderr:e.stderr,context:{platform:`ios`,phase:`connect`}});return{port:t,reason:n,hint:f(n),...y(`runner_connect_refused`),dispatched:e.exitCode===7?`no`:`unknown`}}).stdout}}function He(e,t,n,r){let i=`${e}\n${t}\n${n}`.toLowerCase();if(i.includes(`device is busy`)&&i.includes(`connecting`))return`Target iOS device is still connecting. Keep it unlocked, wait for device trust/connection to settle, then retry.`;let a=r??`IOS_RUNNER_CONNECT_TIMEOUT`;return a===`IOS_RUNNER_DEVICE_NOT_PROVISIONED`?f(a):`${f(a)} ${ne}`}function Ue(e){let{port:t,endpoints:r,logPath:i,lastError:a,deviceStates:o}=e,s=`Runner did not accept connection`,c=new n(`COMMAND_FAILED`,s,{port:t,endpoints:r,logPath:i,lastError:a?String(a):void 0,reason:m({error:a,message:s,context:{platform:`ios`,phase:`connect`}}),hint:f(`IOS_RUNNER_CONNECT_TIMEOUT`),...y(`runner_connect_refused`)});return v(c,o)}async function We(e){let{session:t,port:r,logPath:i}=e,a=await t.testPromise,o=`Runner did not accept connection (xcodebuild exited early)`,s=t.readLogTail?.(65536)??``,c=m({message:o,stdout:s,stderr:s,context:{platform:`ios`,phase:`connect`}}),l=N(t.device),u=ee(new n(`COMMAND_FAILED`,o,{stderr:s,...l})),d=u.reason===`simulator_set_destination_not_found`,f=new n(`COMMAND_FAILED`,d?P(o,t.device,l):o,{port:r,logPath:t.runnerLogPath??i,xcodebuild:{exitCode:a.exitCode,stderr:s},reason:d?u.reason:c,hint:d?u.hint:He(o,s,s,c),...l,...y(`xcodebuild_exited_early`)});return v(f,t.startupDeviceStates)}const Ge={starting:[`ready`,`draining`,`stopped`],ready:[`draining`,`stopped`],draining:[`stopped`],stopped:[]};function Ke(e,t){Ge[e.state].includes(t)&&(e.state=t)}function qe(e){return e.state===`starting`||e.state===`ready`}function Q(e){return e?.runnerMainThreadBusy===!0}var Je=class{charges=[];get hasOutstandingCharges(){return this.charges.length>0}get outstandingChargeCount(){return this.charges.length}get hasAbandonedCharges(){return this.charges.some(e=>e.abandoned)}charge(e){this.charges.push({commandId:$(e),abandoned:!1})}markAbandoned(e){let t=this.findChargeIndex(e);t!==-1&&(this.charges[t].abandoned=!0)}settleAnswered(e){let t=this.findChargeIndex(e);if(t===-1)return;let n=this.charges[t];if(this.charges.splice(t,1),n.abandoned)return;let r=this.charges.findIndex((e,n)=>n<t&&e.abandoned);r!==-1&&this.charges.splice(r,1)}settleTerminalEvidence(e){let t=$(e);if(t===``)return!1;let n=this.charges.filter(e=>e.commandId!==t||!e.abandoned);return n.length!==this.charges.length&&(this.charges=n,!0)}findChargeIndex(e){let t=$(e);if(t===``)return-1;for(let e=this.charges.length-1;e>=0;--e)if(this.charges[e].commandId===t)return e;return-1}};function $(e){return e?.trim()??``}function Ye(e){return e.state===`ready`?e.commandCharges.hasOutstandingCharges?{detach:!1,reason:`command_in_flight`}:Q(e)?{detach:!1,reason:`main_thread_occupied`}:{detach:!0}:{detach:!1,reason:`runner_never_served_a_command`}}function Xe(e){return e.processRunning?e.state:`gone`}function Ze(e,t){return`${e}:${t}:${Date.now()}`}function Qe(e){return typeof e==`number`&&Number.isFinite(e)&&e>0?Math.floor(e):void 0}export{fe as C,oe as S,de as T,_e as _,Q as a,se as b,Xe as c,W as d,je as f,P as g,M as h,qe as i,q as l,N as m,Ke as n,Qe as o,ge as p,Ze as r,Ye as s,Je as t,Ne as u,ce as v,le as w,ae as x,ue as y};
@@ -1 +0,0 @@
1
- import{P as e,s as t}from"./sdk-contracts.js";import{n}from"./request-runtime-binding.js";function r(e,n){return t(`UNSUPPORTED_OPERATION`,`${e} is not supported on this device`,{reason:n.reason},n.hint?{hint:n.hint}:void 0)}async function i(e){let t=await s(e.inspectFacts)(e.device);for(let n of e.required){let i=t.operations[n];if(!i.available)return{type:`response`,response:e.unavailableResponse?e.unavailableResponse(i):r(e.command,i)}}return{type:`admitted`,bind:c(e.bindDevice)}}async function a(e){let t=await i({...e,required:e.use.required});if(t.type===`response`)return t;let r=await t.bind(e.device,e.use);return e.readiness&&await n(r),{type:`runtime`,runtime:r}}async function o(e,t){let n=await a(e);if(n.type===`response`)return{ok:!1,response:n.response};let r=n.runtime;return{ok:!0,execute:async({dispatchContext:e})=>await t(r,e)}}function s(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime facts inspection is unavailable.`,{reason:`runtime-gateway-missing`})}function c(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime binding is unavailable.`,{reason:`runtime-gateway-missing`})}export{r as i,a as n,o as r,i as t};
@@ -1 +0,0 @@
1
- import{P as e}from"./sdk-contracts.js";import{M as t,j as n}from"./sdk-device.js";function r(r){let i=r.now??Date.now,a=r.undurableCleanupTtlMs??3e5,o=new Map;return Object.freeze({blockUndurableCleanup(e,r){let s=n(e);o.set(t(s),{device:s,reason:r,expiresAt:i()+a})},clearUndurableCleanup(e){o.delete(t(n(e)))},assertStartAllowed(a){let s=t(n(a)),c=o.get(s);if(c){if(i()>c.expiresAt){o.delete(s),r.onUndurableCleanupExpired?.({device:c.device,reason:c.reason});return}throw new e(`COMMAND_FAILED`,`The existing ${r.displayName.toLowerCase()} resource has process-local unconfirmed ownership`,{reason:`cleanup-unconfirmed`,hint:`Do not start a replacement in this daemon process: ${c.reason}`})}}})}function i(){return r({displayName:`screen recording`})}export{r as n,i as t};
@@ -1 +0,0 @@
1
- import{Qt as e,k as t}from"./sdk-batch.js";import{n,t as r}from"./durable-capture-resource.js";import{n as i}from"./screen-recording-runtime.js";const a=n({resourceKind:i,fileName:`screen-recording.resource.json`,displayName:`screen recording`}),o=r({resourceKind:`screen-recording`,displayName:`screen recording`,store:a,completionMetadata:u,failedFinishPolicy:`preserve-retry-material`,messages:{noActive:`no active recording`,cleanupPendingHint:`Keep screen-recording.resource.json and retry stop through its exact runtime owner.`}});function s(e){return o.adoptStarted(e)}function c(e){return o.finishLive(e)}const l=`completion`;function u(e){return{[l]:{backend:e.backend,outPath:e.outPath,startedAt:e.startedAt,completedAt:e.completedAt,...e.capturedDurationMs===void 0?{}:{capturedDurationMs:e.capturedDurationMs},...e.stopObservation===void 0?{}:{stopObservation:f(e.stopObservation)},...e.nativePathDisposition===void 0?{}:{nativePathDisposition:e.nativePathDisposition},scope:e.scope,showTouches:e.showTouches,recordOnlySession:e.recordOnlySession,...e.clientOutPath===void 0?{}:{clientOutPath:e.clientOutPath},...e.telemetryPath===void 0?{}:{telemetryPath:e.telemetryPath},...e.warning===void 0?{}:{warning:e.warning},...e.overlayWarning===void 0?{}:{overlayWarning:e.overlayWarning},...e.activeSessionApp===void 0?{}:{activeSessionApp:d(e.activeSessionApp)},...e.chunks===void 0?{}:{chunks:e.chunks.map(p)}}}}function d(e){return{bundleId:e.bundleId,...e.name===void 0?{}:{name:e.name}}}function f(e){return e.recorder===`confirmed`?{recorder:e.recorder}:{recorder:e.recorder,why:e.why}}function p(e){return{index:e.index,path:e.path,...e.clientOutPath===void 0?{}:{clientOutPath:e.clientOutPath}}}function m(e){return o.finishRecovered(e)}async function h(e){let t;try{return t=await e.gateway.bind({device:g(e.envelope),intent:{kind:`exact-owner`,owner:e.envelope.owner,fence:e.envelope.fence},scope:e.scope}),e.scope.signal.throwIfAborted(),e.create(t)}catch(e){throw t&&await t[Symbol.asyncDispose](),e}}function g(e){return{platform:e.device.family,id:e.device.id,name:e.device.id,kind:e.device.kind,...e.device.target===void 0?{}:{target:e.device.target},...e.device.appleOs===void 0?{}:{appleOs:e.device.appleOs},...e.device.iosPhysicalDeviceBackend===void 0?{}:{iosPhysicalDeviceBackend:e.device.iosPhysicalDeviceBackend}}}function _(e){return o.recoverOne({sessionsDir:e.sessionsDir,scope:e.scope,perRecordDeadlineMs:e.perRecordDeadlineMs,onDiagnostic:e.onDiagnostic,acquireControl:async(t,n)=>await v(e.gateway,t,n)},e.resourcePath)}async function v(n,r,i){return await h({gateway:n,envelope:r,scope:i,create:n=>y({runtime:e(n,t),dispose:async()=>await n[Symbol.asyncDispose]()})})}function y(e){return Object.freeze({reattach:async t=>await e.runtime.operations.screenRecordingReattach({envelope:t}),cleanup:async t=>await e.runtime.operations.screenRecordingCleanup({envelope:t}),[Symbol.asyncDispose]:e.dispose})}export{s as a,o as c,l as i,_ as n,c as o,h as r,m as s,y as t};
@@ -1 +0,0 @@
1
- import{D as e,b as t,v as n,y as r}from"./sdk-batch-runner.js";import{n as i}from"./success-text.js";import"./device.js";import{d as a}from"./device-rotation.js";function o(e){return{...typeof e.path==`string`?{path:e.path}:{},...typeof e.width==`number`?{width:e.width}:{},...typeof e.height==`number`?{height:e.height}:{},...typeof e.logicalWidth==`number`?{logicalWidth:e.logicalWidth}:{},...typeof e.logicalHeight==`number`?{logicalHeight:e.logicalHeight}:{},...typeof e.pixelDensity==`number`?{pixelDensity:e.pixelDensity}:{},...a(e.displayRotation)?{displayRotation:e.displayRotation}:{},...e.overlayRefs?{overlayRefs:e.overlayRefs}:{},...e.warnings&&e.warnings.length>0?{warnings:e.warnings}:{}}}function s(t,n){let r=c(t);return{path:e(t,`path`),width:r?.width,height:r?.height,logicalWidth:r?.logicalWidth,logicalHeight:r?.logicalHeight,pixelDensity:r?.pixelDensity,...r?.displayRotation?{displayRotation:r.displayRotation}:{},overlayRefs:r?.overlayRefs,...r?.warnings?{warnings:r.warnings}:{},identifiers:{session:n}}}function c(e){if(!n(e))return;let t=f(e);return o({path:u(e,`path`),width:l(e,`width`),height:l(e,`height`),logicalWidth:l(e,`logicalWidth`),logicalHeight:l(e,`logicalHeight`),pixelDensity:l(e,`pixelDensity`),displayRotation:a(e.displayRotation)?e.displayRotation:void 0,overlayRefs:d(e.overlayRefs),...t===void 0?{}:{warnings:t}})}function l(e,t){let n=e[t];return typeof n==`number`?n:void 0}function u(e,t){let n=e[t];return typeof n==`string`?n:void 0}function d(e){if(Array.isArray(e))return e.filter(g).flatMap(e=>{let t=p(e);return t?[t]:[]})}function f(e){if(Array.isArray(e.warnings))return i(e).filter(e=>e.length>0)}function p(e){if(typeof e.ref!=`string`||e.ref.length===0)return;let t=m(e);if(t)return{ref:e.ref,...h(e),...t}}function m(e){let n=t(e.rect);if(!n)return;let i=t(e.overlayRect);if(!i)return;let a=r(e.center);return a?{rect:n,overlayRect:i,center:a}:void 0}function h(e){return typeof e.label==`string`&&e.label.length>0?{label:e.label}:{}}function g(e){return n(e)}export{o as n,s as t};
@@ -1 +0,0 @@
1
- import{M as e,P as t}from"./sdk-contracts.js";import{c as n,s as r,t as i}from"./capture.js";import{m as a}from"./sdk-batch-runner.js";import{i as o}from"./sdk-device.js";import{nr as s,tr as c}from"./sdk-batch.js";import{i as l}from"./recording-export-quality.js";import{n as u,s as d}from"./scroll-gesture.js";import{t as f}from"./gesture-plan-types.js";const p=[`pan`,`fling`,`swipe`,`pinch`,`rotate`,`transform`,`drag`];function m(e){let n=g(e),r=x(n,`kind`,p);if(r===`pan`)return{kind:r,origin:_(n,`origin`),delta:_(n,`delta`),pointerCount:a(n,`pointerCount`,{min:1,max:2}),durationMs:h(n)};if(r===`drag`)return ee(n);if(n.pointerCount!==void 0)throw new t(`INVALID_ARGS`,`pointerCount is supported only for gesture pan`);if(r===`fling`){if(n.durationMs!==void 0)throw new t(`INVALID_ARGS`,`gesture fling does not accept durationMs; use gesture pan for timed movement`);return{kind:r,direction:x(n,`direction`,u),origin:_(n,`origin`),distance:a(n,`distance`,{min:0})}}if(r===`swipe`){if(n.durationMs!==void 0)throw new t(`INVALID_ARGS`,`gesture swipe does not accept durationMs; use gesture pan for timed movement`);return{kind:r,preset:x(n,`preset`,d)}}if(r===`pinch`)return{kind:r,scale:y(n,`scale`),origin:v(n,`origin`)};if(r===`rotate`){if(n.velocity!==void 0)throw new t(`INVALID_ARGS`,`gesture rotate does not accept velocity; rotation pacing derives from degrees`);return{kind:r,degrees:y(n,`degrees`),origin:v(n,`origin`)}}return{kind:r,origin:_(n,`origin`),delta:_(n,`delta`),scale:y(n,`scale`),degrees:y(n,`degrees`),durationMs:h(n)}}function ee(e){let n=a(e,`sourceHoldMs`,{min:1,max:1e4}),r=a(e,`moveMs`,{min:16,max:1e4}),i=a(e,`destinationHoldMs`,{min:0,max:1e4});if((n??800)+(r??500)+(i??0)>1e4)throw new t(`INVALID_ARGS`,`gesture drag total duration must be at most ${f}`);return{kind:`drag`,source:b(e,`source`),destination:b(e,`destination`),sourceHoldMs:n,moveMs:r,destinationHoldMs:i}}function h(e){let n=a(e,`durationMs`);if(n!==void 0){if(n<16||n>1e4)throw new t(`INVALID_ARGS`,`Expected durationMs to be an integer between 16 and ${f}.`);return n}}function g(e){if(!e||typeof e!=`object`||Array.isArray(e))throw new t(`INVALID_ARGS`,`gesture requires structured object input`);return e}function _(e,t){let n=g(e[t]);return{x:y(n,`x`),y:y(n,`y`)}}function v(e,t){return e[t]===void 0?void 0:_(e,t)}function y(e,n){let r=e[n];if(typeof r!=`number`||!Number.isFinite(r))throw new t(`INVALID_ARGS`,`Expected ${n} to be a finite number.`);return r}function b(e,n){let r=e[n];if(typeof r!=`string`||r.trim().length===0)throw new t(`INVALID_ARGS`,`Expected ${n} to be a non-empty string.`);return r.trim()}function x(e,n,r){let i=e[n];if(typeof i!=`string`||!r.includes(i))throw new t(`INVALID_ARGS`,`Expected ${n} to be one of: ${r.join(`, `)}.`);return i}const S={swipe:{max:4,usage:`swipe accepts 4 arguments: x1 y1 x2 y2`,retired:{positional:`durationMs`,migrate:te}},"gesture pan":{max:5,usage:`gesture pan accepts at most 5 arguments: x y dx dy [durationMs]`},"gesture fling":{max:4,usage:`gesture fling accepts at most 4 arguments: direction x y [distance]`,retired:{positional:`durationMs`,migrate:(e,t)=>`use "${t}", or gesture pan for timed movement.`}},"gesture swipe":{max:1,usage:`gesture swipe accepts 1 argument: preset`,retired:{positional:`durationMs`,migrate:(e,t)=>`use "${t}", or gesture pan for timed movement.`}},"gesture pinch":{max:3,usage:`gesture pinch accepts at most 3 arguments: scale [x] [y]`},"gesture rotate":{max:3,usage:`gesture rotate accepts at most 3 arguments: degrees [x] [y]`,retired:{positional:`velocity`,migrate:(e,t)=>`use "${t}"; rotation pacing derives from degrees.`}},"gesture transform":{max:7,usage:`gesture transform accepts at most 7 arguments: x y dx dy scale degrees [durationMs]`},"gesture drag":{max:5,usage:`gesture drag accepts at most 5 arguments: source destination [sourceHoldMs] [moveMs] [destinationHoldMs]`}};function te(e,t){let[n,r,i,a,o]=e,s=C(n,i),c=C(r,a);return s===void 0||c===void 0?`use "gesture pan x1 y1 dx dy durationMs" for the same timed drag, or "${t}" for a default-duration swipe.`:`use "gesture pan ${n} ${r} ${s} ${c} ${o}" for the same timed drag, or "${t}" for a default-duration swipe.`}function C(e,t){let n=Number(t)-Number(e);return Number.isFinite(n)?n:void 0}function w(e,t){let n=S[e];if(t.length<=n.max)return;let r=n.retired;if(!r||t.length!==n.max+1||!ne(t[n.max]))return{usage:n.usage};let i=`${e} ${t.slice(0,n.max).join(` `)}`;return{usage:n.usage,migration:`The trailing ${r.positional} positional was removed: ${r.migrate(t,i)}`}}function ne(e){return e===void 0||e.trim().length===0?!1:e.startsWith("${")||Number.isFinite(Number(e))}function re(e){if(!(!e||typeof e!=`object`||Array.isArray(e))&&e.durationMs!==void 0)throw new t(`INVALID_ARGS`,`swipe does not accept durationMs; use gesture pan for timed movement`)}function T(e,t){let n=t?`${e.usage} (${t})`:e.usage;return e.migration?`${n}. ${e.migration}`:`${n}.`}function E(e,n){let r=w(e,n);if(r)throw new t(`INVALID_ARGS`,T(r))}function ie(e,t,n){let r=ae(e,t);return r?T(r,n):void 0}function ae(e,t){if(e===`swipe`)return w(`swipe`,t);if(e!==`gesture`)return;let n=`gesture ${t[0]}`;if(Object.hasOwn(S,n))return w(n,t.slice(1))}function D(e){return{origin:{x:Number(e[0]),y:Number(e[1])},delta:{x:Number(e[2]),y:Number(e[3])}}}function O(e,t){let n=e[0],r=e.slice(1);switch(n){case`pan`:{E(`gesture pan`,r);let{origin:e,delta:i}=D(r);return m({kind:n,origin:e,delta:i,pointerCount:t,durationMs:k(r[4])})}case`fling`:return E(`gesture fling`,r),m({kind:n,direction:r[0],origin:{x:Number(r[1]),y:Number(r[2])},distance:k(r[3])});case`swipe`:return E(`gesture swipe`,r),m({kind:n,preset:r[0]});case`pinch`:return E(`gesture pinch`,r),m({kind:n,scale:Number(r[0]),origin:A(r[1],r[2])});case`rotate`:return E(`gesture rotate`,r),m({kind:n,degrees:Number(r[0]),origin:A(r[1],r[2])});case`transform`:{E(`gesture transform`,r);let{origin:e,delta:t}=D(r);return m({kind:n,origin:e,delta:t,scale:Number(r[4]),degrees:Number(r[5]),durationMs:k(r[6])})}case`drag`:return E(`gesture drag`,r),m({kind:n,source:r[0],destination:r[1],sourceHoldMs:k(r[2]),moveMs:k(r[3]),destinationHoldMs:k(r[4])});default:return m({kind:n})}}function oe(e){if(e[0]!==`drag`)return;let t=O(e);return t.kind===`drag`?t:void 0}function se(e){switch(e.kind){case`pan`:return j([e.kind,e.origin.x,e.origin.y,e.delta.x,e.delta.y,e.durationMs]);case`fling`:return j([e.kind,e.direction,e.origin.x,e.origin.y,e.distance]);case`swipe`:return[e.kind,e.preset];case`pinch`:return j([e.kind,e.scale,e.origin?.x,e.origin?.y]);case`rotate`:return e.origin?j([e.kind,e.degrees,e.origin.x,e.origin.y]):[e.kind,String(e.degrees)];case`transform`:return j([e.kind,e.origin.x,e.origin.y,e.delta.x,e.delta.y,e.scale,e.degrees,e.durationMs]);case`drag`:return[e.kind,e.source,e.destination,String(e.sourceHoldMs??800),String(e.moveMs??500),String(e.destinationHoldMs??0)]}}function ce(e,t={}){return E(`swipe`,e),{from:{x:Number(e[0]),y:Number(e[1])},to:{x:Number(e[2]),y:Number(e[3])},...t.count===void 0?{}:{count:t.count},...t.pauseMs===void 0?{}:{pauseMs:t.pauseMs},...t.pattern===void 0?{}:{pattern:t.pattern}}}function le(e){switch(e.kind){case`pan`:return{gesture:{intent:`pan`,origin:e.origin,delta:e.delta,pointerCount:e.pointerCount,durationMs:e.durationMs}};case`fling`:return{gesture:{intent:`fling`,direction:e.direction,origin:e.origin,distance:e.distance}};case`swipe`:return{gesture:{intent:`fling`,preset:e.preset}};case`pinch`:return{gesture:{intent:`pinch`,origin:e.origin,scale:e.scale}};case`rotate`:return{gesture:{intent:`rotate`,origin:e.origin,degrees:e.degrees}};case`transform`:return{gesture:{intent:`transform`,origin:e.origin,delta:e.delta,scale:e.scale,degrees:e.degrees,durationMs:e.durationMs}};case`drag`:throw new t(`INVALID_ARGS`,`gesture drag targets must be resolved before coordinate normalization`)}}function ue(e){return e.kind===`drag`?{intent:`drag`,source:e.source,destination:e.destination,sourceHoldMs:e.sourceHoldMs,moveMs:e.moveMs,destinationHoldMs:e.destinationHoldMs}:le(e).gesture}function de(e){return{gesture:{intent:`fling`,from:e.from,to:e.to}}}function k(e){return e===void 0?void 0:Number(e)}function A(e,n){if(e===void 0!=(n===void 0))throw new t(`INVALID_ARGS`,`gesture origin requires both x and y coordinates`);return e===void 0?void 0:{x:Number(e),y:Number(n)}}function j(e){return e.filter(e=>e!==void 0).map(String)}const fe={ios:!0,android:!0,harmonyos:!0};function M(e){return typeof e==`string`&&Object.hasOwn(fe,e)}function N(t){return t.startsWith(`@`)?e(t)?.base??t:t}const P=/^-?\d+(\.\d+)?$/,pe=/^[^\s"'\\][^\s"\\]*$/,me=new Map([[`--count`,`count`],[`--interval-ms`,`intervalMs`],[`--hold-ms`,`holdMs`],[`--jitter-px`,`jitterPx`]]),he=new Map([[`--count`,`count`],[`--pause-ms`,`pauseMs`]]),ge=new Map([[`--pointer-count`,`pointerCount`]]),_e=new Map([[`--delay-ms`,`delayMs`]]),F={scroll:new Map([[`--until`,{key:`until`,kind:`string`}]]),wait:new Map([[`--raw`,{key:`snapshotRaw`,kind:`boolean`}],[`--depth`,{key:`snapshotDepth`,kind:`int`}],[`--scope`,{key:`snapshotScope`,kind:`string`}]])};Object.keys(F);function ve(e,t){let n=[],r={},i=F[e];for(let e=0;e<t.length;e+=1){let a=t[e],o=i.get(a),s=t[e+1];if(o===void 0||o.kind!==`boolean`&&s===void 0){n.push(a);continue}if(o.kind===`boolean`){Object.assign(r,{[o.key]:!0});continue}if(o.kind===`int`){let e=q(s);if(e===null){n.push(a);continue}Object.assign(r,{[o.key]:e})}else Object.assign(r,{[o.key]:s});e+=1}return{positionals:n,flags:r}}function I(e){return e===`click`||e===`press`}function ye(e){return I(e)||e===`longpress`||e===`hover`}function L(e){return e===`type`||e===`fill`}function R(e){return V(e,be)}function z(e){return JSON.stringify(e)}function B(e){return V(e,H)}function V(e,t){return t(e)?e:z(e)}function be(e){return H(e)&&e.startsWith(`@`)||P.test(e)}function H(e){return pe.test(e)}const xe=new Set([`fill`,`type`]);function Se(e){if(!xe.has(e.command)){let t=(e.positionals??[]).map(e=>R(e));return[e.command,...t].join(` `)}let t=Ce(e).map(e=>R(e)).join(` `);return[e.command,t,`<text>`].filter(e=>e.length>0).join(` `)}function Ce(e){if(e.command===`type`)return[];let t=e.positionals??[],n=t[0];return n===void 0?[]:n.startsWith(`@`)?[n]:t.length>=3&&P.test(n)&&P.test(t[1]??``)?[n,t[1]]:[n]}function U(e,t){let n=t.flags??{};if(I(t.command)){typeof n.count==`number`&&e.push(`--count`,String(n.count)),typeof n.intervalMs==`number`&&e.push(`--interval-ms`,String(n.intervalMs)),typeof n.holdMs==`number`&&e.push(`--hold-ms`,String(n.holdMs)),typeof n.jitterPx==`number`&&e.push(`--jitter-px`,String(n.jitterPx)),n.doubleTap===!0&&e.push(`--double-tap`);let t=n.clickButton;t&&t!==`primary`&&e.push(`--button`,t);return}if(t.command===`swipe`){typeof n.count==`number`&&e.push(`--count`,String(n.count)),typeof n.pauseMs==`number`&&e.push(`--pause-ms`,String(n.pauseMs)),(n.pattern===`one-way`||n.pattern===`ping-pong`)&&e.push(`--pattern`,n.pattern);return}if(t.command===`gesture`){typeof n.pointerCount==`number`&&e.push(`--pointer-count`,String(n.pointerCount));return}L(t.command)&&typeof n.delayMs==`number`&&e.push(`--delay-ms`,String(n.delayMs))}function W(e,t){t&&(M(t.platform)&&e.push(`--platform`,t.platform),typeof t.metroHost==`string`&&t.metroHost.length>0&&e.push(`--metro-host`,B(t.metroHost)),typeof t.metroPort==`number`&&e.push(`--metro-port`,String(t.metroPort)),typeof t.bundleUrl==`string`&&t.bundleUrl.length>0&&e.push(`--bundle-url`,B(t.bundleUrl)),typeof t.launchUrl==`string`&&t.launchUrl.length>0&&e.push(`--launch-url`,B(t.launchUrl)))}function we(e,t){let[n,...r]=t.positionals??[];n&&e.push(B(n));for(let t of r)e.push(R(t));typeof t.flags?.fps==`number`&&e.push(`--fps`,String(t.flags.fps)),(typeof t.flags?.quality==`number`||typeof t.flags?.quality==`string`)&&e.push(`--quality`,String(t.flags.quality)),t.flags?.hideTouches&&e.push(`--hide-touches`)}function Te(e,t){t.flags?.snapshotInteractiveOnly&&e.push(`-i`),typeof t.flags?.snapshotDepth==`number`&&e.push(`-d`,String(t.flags.snapshotDepth)),t.flags?.snapshotScope&&e.push(`-s`,R(t.flags.snapshotScope)),t.flags?.snapshotRaw&&e.push(`--raw`)}function Ee(e,t){for(let n of t.positionals??[])e.push(R(n));let n=t.flags?.screenshotCropOn;typeof n==`string`&&n.length>0&&e.push(`--crop-on`,B(n)),r(e,t.flags)}function De(e,t,n={}){let r=t.positionals??[],i=n.includeAllPositionals?r:r.slice(0,1);for(let t of i)e.push(B(t));W(e,t.flags)}function Oe(e,t){for(let n of t.positionals??[])e.push(R(t.command===`wait`?N(n):n));t.command===`fold`&&t.flags?.keyframes!==void 0&&e.push(`--keyframes`,R(t.flags.keyframes)),t.command===`scroll`&&typeof t.flags?.until==`string`&&e.push(`--until`,R(t.flags.until)),t.command===`wait`&&ke(e,t.flags),U(e,t)}function ke(e,t){t&&(t.snapshotRaw===!0&&e.push(`--raw`),typeof t.snapshotDepth==`number`&&e.push(`--depth`,String(t.snapshotDepth)),typeof t.snapshotScope==`string`&&e.push(`--scope`,R(t.snapshotScope)))}function G(e,t){let n=[],r={},i=I(e)?me:e===`swipe`?he:e===`gesture`?ge:L(e)?_e:void 0;for(let a=0;a<t.length;a+=1){let o=t[a];if(I(e)&&o===`--double-tap`){r.doubleTap=!0;continue}let s=t[a+1];if(e===`fold`&&o===`--keyframes`&&s!==void 0){r.keyframes=s,a+=1;continue}if(I(e)&&o===`--button`&&s!==void 0){let e=s;(e===`primary`||e===`secondary`||e===`middle`)&&(r.clickButton=e),a+=1;continue}let c=i?.get(o);if(c&&s!==void 0){let e=q(s);if(e!==null){r[c]=e,a+=1;continue}}if(e===`swipe`&&o===`--pattern`&&s!==void 0){let e=s;(e===`one-way`||e===`ping-pong`)&&(r.pattern=e),a+=1;continue}n.push(o)}return{positionals:n,flags:r}}function K(e){let t=[],n={};for(let r=0;r<e.length;r+=1){let i=e[r],a=e[r+1];if(i===`--platform`&&a!==void 0){let e=a;M(e)&&(n.platform=e),r+=1;continue}if(i===`--metro-host`&&a!==void 0){n.metroHost=a,r+=1;continue}if(i===`--metro-port`&&a!==void 0){let e=q(a);e!==null&&(n.metroPort=e),r+=1;continue}if(i===`--bundle-url`&&a!==void 0){n.bundleUrl=a,r+=1;continue}if(i===`--launch-url`&&a!==void 0){n.launchUrl=a,r+=1;continue}t.push(i)}return{positionals:t,flags:n}}function q(e){if(!e)return null;let t=Number(e);return!Number.isFinite(t)||t<0?null:Math.floor(t)}function Ae(e){let t;for(let n of e){if(n.command===`runtime`&&typeof n.flags.platform==`string`){t=n.flags.platform;continue}if(n.command===`open`)return n.runtime?.platform??t}return t}function je(e,t){for(let n of t.positionals??[])e.push(R(n));t.flags?.relaunch&&e.push(`--relaunch`),t.flags?.surface!==void 0&&e.push(`--surface`,t.flags.surface),t.flags?.testIme===!0?e.push(`--test-ime`):t.flags?.testIme===!1&&e.push(`--no-test-ime`),W(e,t.runtime)}function Me(e){let t=[],n={};for(let r=0;r<e.length;r+=1){let i=e[r];if(i===`--surface`){n.surface=Pe(e[r+1]),r+=1;continue}if(i===`--relaunch`){n.relaunch=!0;continue}if(i===`--test-ime`){n.testIme=!0;continue}if(i===`--no-test-ime`){n.testIme=!1;continue}t.push(i)}let r=K(t);return{positionals:r.positionals,flags:n,runtime:Fe(r.flags)?r.flags:void 0}}const J={app:!0,"frontmost-app":!0,desktop:!0,menubar:!0};function Ne(e){return Object.hasOwn(J,e)}function Pe(e){let n=e?.trim().toLowerCase();if(n!==void 0&&Ne(n))return n;throw new t(`INVALID_ARGS`,`Invalid surface: ${e}. Use ${Object.keys(J).join(`|`)}.`)}function Fe(e){return!!(e.platform||e.metroHost||e.metroPort!==void 0||e.bundleUrl||e.launchUrl)}const Y=/^[A-Z_][A-Z0-9_]*$/,Ie=new Set(o.filter(e=>e!==`web`)),Le=new Set([`mobile`,`tv`,`desktop`]);function Re(e){let n=[],r=[],i=e.split(/\r?\n/),a=!1,o,l=(e,n,r)=>{let i=e.kind===`multiple`?`targets-v1`:`target-v1`;throw new t(`INVALID_ARGS`,`${i} annotation on line ${e.line} must be immediately followed by its action line (line ${n+1} ${r}).`)};for(let[e,u]of i.entries()){let i=u.trim();if(i.length===0){o&&l(o,e,`is blank`);continue}if(i.startsWith(`#`)){let t=c(i);if(t.kind===`v1`){o&&l(o,e,`is another target annotation`),o={kind:`multiple`,evidence:t.evidence,line:e+1};continue}let n=s(i);if(n.kind===`v1`){o&&l(o,e,`is another target annotation`),o={kind:`single`,evidence:n.evidence,line:e+1};continue}o&&l(o,e,`is a comment`);continue}if(X(i)){if(o&&l(o,e,`is an env directive`),a)throw new t(`INVALID_ARGS`,`env directives must precede all actions (line ${e+1}).`);continue}let d=Q(u);if(!d){o&&l(o,e,`did not parse as an action`);continue}let f=ie(d.command,d.positionals??[],`line ${e+1}`);if(f)throw new t(`INVALID_ARGS`,f);o&&=(o.kind===`single`?d.targetEvidence=o.evidence:d.targetEvidences=o.evidence,void 0),n.push(d),r.push(e+1),a=!0}if(o){let e=o.kind===`multiple`?`targets-v1`:`target-v1`;throw new t(`INVALID_ARGS`,`${e} annotation on line ${o.line} must be immediately followed by its action line (end of script reached).`)}return{actions:n,actionLines:r}}function ze(e){let t=e.split(/\r?\n/),n={};for(let[e,r]of t.entries()){let t=r.trim();if(t.length===0||t.startsWith(`#`))continue;if(X(t)){He(n,t,e+1);continue}if(!t.startsWith(`context `))break;let i=t.match(/(?:^|\s)platform=([^\s]+)/);if(i){let e=i[1];e&&Ie.has(e)&&Z(n,`platform`,e)}let a=t.match(/(?:^|\s)target=([^\s]+)/);if(a){let e=a[1];e&&Le.has(e)&&Z(n,`target`,e)}let o=t.match(/(?:^|\s)timeout=(\d+)/);if(o){let e=Number(o[1]);Number.isFinite(e)&&e>=1&&Z(n,`timeoutMs`,Math.floor(e))}let s=t.match(/(?:^|\s)retries=(\d+)/);if(s){let e=Number(s[1]);Number.isFinite(e)&&e>=0&&Z(n,`retries`,Math.floor(e))}}return n}function X(e){return e===`env`||e.startsWith(`env `)||e.startsWith(`env `)}function Be(e,n){let r=e.slice(3).replace(/^[\s]+/,``),i=r.indexOf(`=`);if(i<=0)throw new t(`INVALID_ARGS`,`Invalid env directive on line ${n}: expected "env KEY=VALUE".`);let a=r.slice(0,i);if(!Y.test(a))throw new t(`INVALID_ARGS`,`Invalid env key "${a}" on line ${n}: keys must be uppercase letters, digits, and underscores (e.g. APP_ID).`);if(a.startsWith(`AD_`))throw new t(`INVALID_ARGS`,`Invalid env key "${a}" on line ${n}: the AD_* namespace is reserved for built-in variables. Rename ${a} to avoid the AD_ prefix.`);return{key:a,value:Ve(r.slice(i+1),n)}}function Ve(e,n){if(e.length===0)return``;if(e.startsWith(`"`))try{let t=JSON.parse(e);if(typeof t!=`string`)throw Error(`not a string literal`);return t}catch{throw new t(`INVALID_ARGS`,`Invalid quoted env value on line ${n}.`)}return e}function He(e,n,r){let{key:i,value:a}=Be(n,r),o=e.env??{};if(Object.prototype.hasOwnProperty.call(o,i))throw new t(`INVALID_ARGS`,`Duplicate env directive "${i}" on line ${r}.`);o[i]=a,e.env=o}function Z(e,n,r){let i=e[n];if(i!==void 0){let e=i===r?`Duplicate replay test metadata "${n}" in context header.`:`Conflicting replay test metadata "${n}" in context header: ${String(i)} vs ${String(r)}.`;throw new t(`INVALID_ARGS`,e)}e[n]=r}function Q(e){let r=e.trim();if(r.length===0||r.startsWith(`#`))return null;let[a,...o]=We(r);if(a===void 0||a===`context`)return null;let s={ts:Date.now(),command:a,positionals:[],flags:{}};if(a===`snapshot`){s.positionals=[];for(let e=0;e<o.length;e+=1){let t=o[e];if(t===`-i`){s.flags.snapshotInteractiveOnly=!0;continue}if(t!==`-c`){if(t===`--raw`){s.flags.snapshotRaw=!0;continue}if(t===`--force-full`){s.flags.snapshotForceFull=!0;continue}if((t===`-d`||t===`--depth`)&&e+1<o.length){let t=Number(o[e+1]);Number.isFinite(t)&&t>=0&&(s.flags.snapshotDepth=Math.floor(t)),e+=1;continue}if((t===`-s`||t===`--scope`)&&e+1<o.length){s.flags.snapshotScope=o[e+1],e+=1;continue}if(t===`--backend`&&e+1<o.length){e+=1;continue}}}return s}if(a===`open`){let e=Me(o);return s.positionals=e.positionals,Object.assign(s.flags,e.flags),s.runtime=e.runtime,s}if(a===`runtime`){let e=K(o);return s.positionals=e.positionals,Object.assign(s.flags,e.flags),s}if(I(a)){let e=G(a,o);Object.assign(s.flags,e.flags);let t=e.positionals[0];if(t===void 0)return s;if(t.startsWith(`@`))return s.positionals=[N(t)],e.positionals[1]&&(s.result={refLabel:e.positionals[1]}),s;let n=e.positionals[0],r=e.positionals[1];return $(n)&&$(r)&&e.positionals.length>=2?(s.positionals=[n,r],s):(s.positionals=[e.positionals.join(` `)],s)}if(a===`fill`){let e=G(a,o);if(Object.assign(s.flags,e.flags),!Ue(e.positionals))return s.positionals=e.positionals,s;let[t,n,...r]=e.positionals;if($(t)&&$(n))return s.positionals=[t,n,r.join(` `)],s;let[i,c,...l]=e.positionals;if(i.startsWith(`@`)){let e=N(i);return l.length>0?(s.positionals=[e,l.join(` `)],s.result={refLabel:c},s):(s.positionals=[e,c],s)}return s.positionals=[i,[c,...l].join(` `)],s}if(a===`get`){let e=o[0],t=o[1];return e===void 0||t===void 0?(s.positionals=o,s):t.startsWith(`@`)?(s.positionals=[e,N(t)],o[2]&&(s.result={refLabel:o[2]}),s):(s.positionals=[e,o.slice(1).join(` `)],s)}if(a===`swipe`||a===`type`||a===`gesture`||a===`fold`){let e=G(a,o);return Object.assign(s.flags,e.flags),s.positionals=e.positionals,s}if(a===`record`){let e=[];for(let n=0;n<o.length;n+=1){let r=o[n];if(r===i.cliToken)throw new t(`INVALID_ARGS`,i.migration.record);if(r===`--hide-touches`){s.flags.hideTouches=!0;continue}if(r===`--fps`&&n+1<o.length){let e=Number(o[n+1]);Number.isFinite(e)&&(s.flags.fps=Math.floor(e)),n+=1;continue}if(r===`--quality`&&n+1<o.length){let e=o[n+1],t=l(e);t!==void 0&&(s.flags.quality=t),n+=1;continue}e.push(r)}return s.positionals=e,s}if(a===`screenshot`){let e=[];for(let t=0;t<o.length;t+=1){let r=o[t],i=n({args:o,index:t,flags:s.flags});if(i.handled){t=i.nextIndex;continue}e.push(r)}return s.positionals=e,s}if(a===`scroll`||a===`wait`){let e=ve(a,o);return Object.assign(s.flags,e.flags),s.positionals=e.positionals.map(e=>N(e)),s}return s.positionals=a===`longpress`||a===`hover`?o.map(e=>N(e)):o,s}function Ue(e){return e.length>=2}function $(e){return e?!Number.isNaN(Number(e)):!1}function We(e){let t=[],n=0;for(;n<e.length&&(n=Ge(e,n),!(n>=e.length));){let r=e[n]===`"`?Ke(e,n):qe(e,n)??Qe(e,n);t.push(r.value),n=r.nextCursor}return t}function Ge(e,t){let n=t;for(;n<e.length&&/\s/.test(e.charAt(n));)n+=1;return n}function Ke(e,n){let r=n+1,i=!1,a=r;for(;a<e.length;a+=1){let t=e.charAt(a);if(t===`"`&&!i)break;if(i){i=!1;continue}i=t===`\\`}if(a>=e.length)throw new t(`INVALID_ARGS`,`Invalid replay script line: ${e}`);let o=e.slice(n,a+1),s;try{s=JSON.parse(o)}catch{throw new t(`INVALID_ARGS`,`Invalid quoted value ${o} in replay script line: ${e}`,{hint:`Quoted replay values are JSON strings: escape backslashes, quotes, tabs, and newlines (\\\\, \\", \\t, \\n).`})}return{value:s,nextCursor:a+1}}function qe(e,t){if(e[t]!==`'`)return null;let n=Je(e,t+1);return n===-1||!Xe(e,n+1)?null:{value:Ze(e.slice(t+1,n)),nextCursor:n+1}}function Je(e,t){let n=t;for(;n<e.length;){let t=e.indexOf(`'`,n);if(t===-1)return-1;if(!Ye(e,t))return t;n=t+1}return-1}function Ye(e,t){let n=0;for(;t>0&&e.charAt(t-1)===`\\`;)n+=1,--t;return n%2==1}function Xe(e,t){return t>=e.length||/\s/.test(e.charAt(t))}function Ze(e){return e.replaceAll(String.raw`\'`,`'`)}function Qe(e,t){let n=t;for(;n<e.length&&!/\s/.test(e.charAt(n));)n+=1;return{value:e.slice(t,n),nextCursor:n}}export{de as C,m as E,ue as S,p as T,N as _,Ae as a,O as b,De as c,Te as d,Se as f,ye as g,I as h,je as i,Ee as l,z as m,Re as n,Oe as o,R as p,ze as r,we as s,Y as t,U as u,re as v,ce as w,se as x,oe as y};
@@ -1 +0,0 @@
1
- import{P as e}from"./sdk-contracts.js";const t=1e4,n=.65;function r(e,t){return{...e,releaseBehavior:t===void 0?`controlled`:`inertial`}}function i(t,n=`scroll accepts either a relative amount or --pixels, not both`){if(t.amount!==void 0&&t.pixels!==void 0)throw new e(`INVALID_ARGS`,n)}function a(t){if(t.until!==void 0&&t.edge!==void 0)throw new e(`INVALID_ARGS`,`scroll ${t.edge} already scrolls to the ${t.edge} edge and cannot take --until`,{hint:`Use scroll ${t.edge===`bottom`?`down`:`up`} --until <selector> to stop at the target, or scroll ${t.edge} to reach the edge.`})}function o(t,n={}){if(t===void 0)return;let r=n.field??`scroll durationMs`,i=n.max??1e4,a=n.invalidMessage??`${r} must be a non-negative integer`;if(!Number.isFinite(t)||!Number.isInteger(t)||t<0)throw new e(`INVALID_ARGS`,a);if(t>i)throw new e(`INVALID_ARGS`,`${r} must be a non-negative integer at most ${i}`);return t}function s(e){return typeof e?.pixels==`number`?e.pixels:void 0}function c(e){return typeof e?.durationMs==`number`?e.durationMs:void 0}function l(e){let t=u(e?.x1),n=u(e?.y1),r=u(e?.x2),i=u(e?.y2);if(t!==void 0&&n!==void 0&&r!==void 0&&i!==void 0)return{x:(t+r)/2,y:(n+i)/2}}function u(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}export{c as a,o as c,a as i,r as l,t as n,s as o,i as r,l as s,n as t};
@@ -1 +0,0 @@
1
- import{P as e}from"./sdk-contracts.js";import{jr as t}from"./sdk-batch.js";import{t as n}from"./string-enum.js";const r=[`up`,`down`,`left`,`right`,`top`,`bottom`],i=[`up`,`down`,`left`,`right`],a=[`left`,`right`,`left-edge`,`right-edge`],o=[`one-way`,`ping-pong`],s=1e4,c=6e4,l=n(i,{message:e=>`Unknown direction: ${e}`}),u=.6;function d(e){let t=e.direction,n=t===`up`||t===`down`?e.referenceHeight:e.referenceWidth,r=S(e.amount),i=e.pixels===void 0?Math.round(n*r):C(e.pixels),a=Math.max(1,Math.round(n*.1)),o=Math.max(1,n-a*2),s=Math.max(1,Math.min(i,o)),c=Math.round(s/2),l=Math.round(e.referenceWidth/2),u=Math.round(e.referenceHeight/2),d=(n,r,i,a)=>({direction:t,x1:n,y1:r,x2:i,y2:a,referenceWidth:e.referenceWidth,referenceHeight:e.referenceHeight,amount:e.amount,pixels:s});switch(t){case`up`:return d(l,u-c,l,u+c);case`down`:return d(l,u+c,l,u-c);case`left`:return d(l-c,u,l+c,u);case`right`:return d(l+c,u,l-c,u)}}function f(e){S(e.amount),e.pixels!==void 0&&C(e.pixels)}function p(e,t){if(e===`left`||e===`right`){let n=h(e,t);return{preset:e,x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2,referenceWidth:n.referenceWidth,referenceHeight:n.referenceHeight}}let[n,r]=e===`left-edge`?[99,15]:[1,85],i=v(_(t,n,50),t,8),a=v(_(t,r,50),t,8);return{preset:e,x1:i.x,y1:i.y,x2:a.x,y2:a.y,referenceWidth:t.referenceWidth,referenceHeight:t.referenceHeight}}function m(e,t){switch(e){case`up`:return{x:0,y:-t};case`down`:return{x:0,y:t};case`left`:return{x:-t,y:0};case`right`:return{x:t,y:0}}}function h(e,t){let n=e===`left`||e===`up`,r=n?85:15,i=n?15:85,a=e===`up`||e===`down`,o=v(_(t,a?50:r,a?r:50),t,8),s=v(_(t,a?50:i,a?i:50),t,8);return{direction:e,x1:o.x,y1:o.y,x2:s.x,y2:s.y,referenceWidth:t.referenceWidth,referenceHeight:t.referenceHeight}}function g(e){let t=b(e);if(t)return{referenceWidth:t.width,referenceHeight:t.height}}function _(e,t,n){let r=Math.trunc(e.referenceWidth*t/100),i=Math.trunc(e.referenceHeight*n/100);return{x:Number.isFinite(r)?r:0,y:Number.isFinite(i)?i:0}}function v(e,t,n){return{x:w(e.x,n,t.referenceWidth),y:w(e.y,n,t.referenceHeight)}}function y(e){return l.parse(e)}function b(e){let n=e.filter(e=>t(e)&&x(e.rect)).map(e=>e.rect).sort((e,t)=>(t?.width??0)*(t?.height??0)-(e?.width??0)*(e?.height??0))[0];if(n)return n;let r=e.map(e=>e.rect).filter(x);if(r.length===0)return;let i=Math.max(...r.map(e=>e.x+e.width)),a=Math.max(...r.map(e=>e.y+e.height));if(!(i<=0||a<=0))return{x:0,y:0,width:i,height:a}}function x(e){return!!e&&e.width>0&&e.height>0}function S(t){if(t===void 0)return u;if(!Number.isFinite(t)||t<=0)throw new e(`INVALID_ARGS`,`scroll amount must be a positive number`);return t}function C(t){if(!Number.isFinite(t)||t<=0)throw new e(`INVALID_ARGS`,`scroll pixels must be a positive integer`);return Math.max(1,Math.round(t))}function w(e,t,n){let r=Math.round(t);if(!Number.isFinite(r))return 0;let i=Math.max(r,Math.round(n-t));return!Number.isFinite(i)||!Number.isFinite(e)?r:Math.min(i,Math.max(r,Math.round(e)))}const T=Object.freeze({reason:`scroll_keyboard_occludes_surface`,hint:"The on-screen keyboard covers the surface this scroll would swipe, so it cannot reach it. Run `keyboard dismiss` and retry, accepting that it drops focus (re-tap the field to keep typing), or scroll before focusing the field."});function E(e,t){if(!O(e)||!O(t))return{kind:`unobstructed`};let n=e.x+e.width/2;if(n<t.x||n>=t.x+t.width)return{kind:`unobstructed`};let r=t.y;if(r>=e.y+e.height||t.y+t.height<=e.y)return{kind:`unobstructed`};let i=Math.max(0,r-12-e.y);return i<.15*e.height?{kind:`occluded`,keyboardMinY:r,visibleHeight:i}:{kind:`avoided`,viewport:{...e,height:i},keyboardMinY:r}}function D(t,n){return new e(`COMMAND_FAILED`,`scroll ${t} refused: the keyboard leaves ${n.visibleHeight}px of ${n.viewportHeight}px visible, below the 15% needed for a swipe`,{keyboardMinY:n.keyboardMinY,visibleHeight:n.visibleHeight,viewportHeight:n.viewportHeight,minVisibleFraction:.15,...T})}function O(e){return[e.x,e.y,e.width,e.height].every(e=>Number.isFinite(e))&&e.width>0&&e.height>0}export{D as _,o as a,c,d,p as f,y as g,g as h,T as i,f as l,m,i as n,s as o,E as p,r,a as s,u as t,h as u};
@@ -1 +0,0 @@
1
- function e(e){let t=e.trim().toLowerCase();return t?/^(vertical|horizontal)\s+scroll\s+bar(?:,?\s*\d+\s+pages?)?$/.test(t):!1}function t(e,t){if(!(e?.trim().toLowerCase()??``).includes(`vertical scroll bar`))return null;let r=n(t);return r===null?null:r<=1?{above:!1,below:!0}:r>=99?{above:!0,below:!1}:{above:!0,below:!0}}function n(e){if(!e)return null;let t=/^(\d{1,3})%$/.exec(e.trim());if(!t)return null;let n=Number(t[1]);return Number.isFinite(n)?Math.max(0,Math.min(100,n)):null}export{e as n,t};
@@ -1 +0,0 @@
1
- import{P as e}from"./sdk-contracts.js";import{n as t,r as n}from"./session-paths.js";import r from"node:path";function i(e){return r.join(e,`runner.log`)}function a(e,t){let i=n(t&&t.length>0?t:`unknown`);return r.join(e,`requests`,`${i}.ndjson`)}function o(e){return{path:a(e.sessionDir,e.requestId),ref:{session:e.session,requestId:e.requestId&&e.requestId.length>0?e.requestId:`unknown`}}}function s(e,t){return a(r.join(e,`remote-diagnostics`,n(t.session)),t.requestId)}function c(i,a){if(!t(a))throw new e(`INVALID_ARGS`,`Invalid session name ${JSON.stringify(a)}: a session name cannot be empty, ".", or "..".`);return r.join(i,n(a))}function l(e,t){return r.join(c(e,t),`app.log`)}function u(e,t){return r.join(c(e,t),`app-log.pid`)}export{o as a,c as i,l as n,a as o,u as r,i as s,s as t};
@@ -1 +0,0 @@
1
- import{n as e}from"./path-resolution.js";import"./file.js";function t(e){return e.replaceAll(/[^a-zA-Z0-9._-]/g,`_`)}function n(e){let n=t(e);return n.length>0&&n!==`.`&&n!==`..`}function r(t,n){return e(t,{cwd:n})}export{n,t as r,r as t};
@@ -1 +0,0 @@
1
- import{P as e}from"./sdk-contracts.js";import t from"node:fs";import n from"node:path";function r(e){return n.join(e,`repair-tombstone.json`)}function i(e,t){try{let n=o(e);return n?.owner===t&&n.expiresAt>Date.now()?n:void 0}catch{return}}function a(e,n){try{o(e)?.owner===n&&t.rmSync(e,{force:!0})}catch{}}function o(e){let n;try{n=t.readFileSync(e,`utf8`)}catch(e){if(e.code===`ENOENT`)return;throw e}return s(n,e)}function s(t,n){try{let e=JSON.parse(t);if(!c(e))throw Error(`Invalid repair tombstone fields`);return e}catch(t){throw new e(`COMMAND_FAILED`,`Repair evidence could not be inspected.`,{reason:`repair_evidence_invalid`,path:n},t instanceof Error?t:void 0)}}function c(e){let t=e;return Number.isFinite(t?.reapedAt)&&Number.isFinite(t?.expiresAt)&&typeof t?.owner==`string`&&(t.sourcePath===void 0||typeof t.sourcePath==`string`)&&l(t.commitFailure)}function l(e){let t=e;return e===void 0||typeof t?.code==`string`&&typeof t?.message==`string`}function u(e){let i;try{i=t.readdirSync(e,{withFileTypes:!0})}catch(e){if(e.code===`ENOENT`)return;throw e}for(let t of i){if(!t.isDirectory())continue;let i=o(r(n.join(e,t.name)));if(i?.commitFailure&&i.expiresAt>Date.now())return{sessionName:t.name,tombstone:{...i,commitFailure:i.commitFailure}}}}export{r as i,u as n,i as r,a as t};
@@ -1 +0,0 @@
1
- import{P as e,s as t}from"./sdk-contracts.js";import{S as n,b as r,i,p as a,v as o,w as s}from"./sdk-device.js";import"./dispatch-resolve.js";import{s as c}from"./device-shell.js";import{t as l}from"./device-isolation.js";import u from"node:crypto";import d from"node:fs";import f from"node:path";function p(e){return`${e.device.platform} device "${e.device.name.trim()}" (${e.device.id})`}function m(e,t,n={}){return e.session.screenRecording?_(e.address,t):y(e,t,n)}function h(e,n,r={}){return t(`DEVICE_IN_USE`,`Device is already in use by session "${e.address}".`,{session:e.address,deviceId:n.id,deviceName:n.name,...r.waitedMs===void 0?{}:{waitedMs:r.waitedMs},hint:m(e,`device-in-use`,r)})}function g(e,n,r={}){return t(`DEVICE_IN_USE`,`Device is already in use by workspace session "${e.address}".`,{reason:`WORKSPACE_SESSION_SCOPE_CONFLICT`,session:e.address,deviceId:n.id,deviceName:n.name,...r.waitedMs===void 0?{}:{waitedMs:r.waitedMs},hint:v(e.address,r)})}function _(e,t){let n=c(e),r=`agent-device close --session ${n}`;return`Recording session "${e}" owns this device. Run ${`agent-device record stop --session ${n}`}; if the session still appears in agent-device session list, run ${r}. ${t===`selector-conflict`?`To keep using this device, rerun the command with --session ${n} and remove conflicting device selectors.`:`To keep using this device, reuse --session ${n} for commands that should attach to the recording session.`} Run agent-device session list to inspect active sessions.`}function v(e,t){let n=c(e);return`${b(t)}Session "${e}" belongs to another workspace. Run agent-device close --session ${n} to release this device from that workspace, agent-device devices to choose another device. ${x(t)}Run agent-device session list to inspect active sessions.`}function y(e,t,n){let r=e.address,i=c(r),a=`agent-device close --session ${i}`;return t===`selector-conflict`?`Run agent-device session list to inspect active sessions. To reuse this device, rerun the command with --session ${i} and remove conflicting device selectors. To switch devices, first run ${a}, then open the desired device with a different --session name.`+S(e,n):`${b(n)}Run agent-device session list to inspect active sessions. To reuse this device, rerun the command with --session ${i}. To open a new session on this device, first run ${a}. `+`${x(n)}`.trimEnd()}function b(e){return e.waitedMs===void 0?``:`Waited ${Math.round(e.waitedMs)}ms for this device and it stayed busy. `}function x(e){return e.offersDeviceWait&&e.waitedMs===void 0?`To wait for the device to free up, run the same open with --wait <ms>. `:``}function S(e,t){return t.offersPlatformSession===!0&&e.session.sessionScope?.kind===`cwd`?` Or name the other platform with --platform to open its own session for this workspace.`:``}function C(t,n){let{address:r,session:i}=t,a=w(i,n);if(a.length!==0)throw new e(`INVALID_ARGS`,`Session "${r}" is already bound to ${p(i)}, but this request selected ${a.map(T).join(`, `)}.`,{session:r,conflicts:a.map(T),hint:m(t,`selector-conflict`,{offersPlatformSession:a.some(e=>e.key===`platform`)})})}function w(e,t){if(!t)return[];let i=[],s=e.device,c=t.platform;if(c&&!n(s,c)&&i.push({key:`platform`,value:t.platform}),t.target&&t.target!==(s.target??`mobile`)&&i.push({key:`target`,value:t.target}),t.udid&&(!a(s)||t.udid!==s.id)&&i.push({key:`udid`,value:t.udid}),t.serial&&(!o(s.platform)||t.serial!==s.id)&&i.push({key:`serial`,value:t.serial}),t.device&&!r(s,t.device)&&i.push({key:`device`,value:t.device}),t.iosSimulatorDeviceSet){let e=t.iosSimulatorDeviceSet.trim(),n=s.simulatorSetPath?.trim();(!a(s)||s.kind!==`simulator`||e!==n)&&i.push({key:`iosSimulatorDeviceSet`,value:t.iosSimulatorDeviceSet})}if(t.androidDeviceAllowlist){let e=l(t.androidDeviceAllowlist);(s.platform!==`android`||!e.has(s.id))&&i.push({key:`androidDeviceAllowlist`,value:t.androidDeviceAllowlist})}return i}function T(e){return`${E(e.key)}=${e.value}`}function E(e){switch(e){case`iosSimulatorDeviceSet`:return`--ios-simulator-device-set`;case`androidDeviceAllowlist`:return`--android-device-allowlist`;default:return`--${e}`}}const D=`default`,O=new Set(i);function k(e,t,n={}){let r=e.session||D;if(F(e))return r;let i=M(e);return i.kind===`cwd`?L(e,t,i.id,n):r}function A(e){return e.session||D}function j(e){let t=M(e);return t.kind===`cwd`?t:void 0}function M(t){if(t.meta?.sessionIsolation===`tenant`||t.flags?.sessionIsolation===`tenant`){let n=t.meta?.tenantId;if(!n)throw new e(`INTERNAL_ERROR`,`Tenant-scoped request reached session routing without an admitted tenant id`);return{kind:`tenant`,id:n}}if(F(t)||(t.session||D)!==D)return{kind:`named-local`};let n=Y(t.meta?.cwd);return n?{kind:`cwd`,id:J(n)}:{kind:`global-default`}}function N(e,t){let n=e.sessionScope;return n?t.kind===`tenant`?n.kind===`tenant`&&n.id===t.id:n.kind===`tenant`?!1:t.kind!==`cwd`||n.kind===`named-local`||n.kind===`cwd`&&n.id===t.id:!1}function P(e,t){let n=j(e);return!n||t.sessionScope?.kind!==`cwd`?!1:t.sessionScope.id!==n.id}function F(e){if(e.meta?.sessionExplicit===!0)return!0;let t=e.flags?.session;return typeof t==`string`&&t.trim().length>0}function I(e,t){return`cwd:${e}:${t}`}function L(e,t,n,r){let i=U(t,n),a=W(e);return a?R(e,t,n,a,i,r):H(n,i,r)}function R(e,t,n,r,i,a){let o=I(n,r);if(t.get(o))return o;let s=V(e.flags,r),c=i.map(e=>({ref:e,conflicts:w(e.session,s)})),l=c.filter(e=>e.conflicts.length===0),[u]=l;return u&&l.length===1?u.ref.address:l.length>1?(K(a,l.map(e=>e.ref)),o):z(c)?.address??o}function z(e){return e.find(e=>!B(e.conflicts))?.ref}function B(e){return e.some(e=>e.key===`platform`)}function V(e,t){return{...e,platform:t}}function H(e,t,n){let[r]=t;return r&&t.length===1?r.address:(K(n,t),I(e,D))}function U(e,t){let n=new Set,r=[];for(let i of e.listRefs()){let e=i.session.sessionScope;e?.kind===`cwd`&&e.id===t&&(n.has(i.session)||(n.add(i.session),r.push(i)))}return r}function W(e){return G(e.flags?.platform)??G(e.meta?.lockPlatform)}function G(e){if(typeof e!=`string`)return;let t=e.trim().toLowerCase();return O.has(t)?t:void 0}function K(e,t){if(t.length>1&&e.attachesToSession===!0)throw q(t)}function q(t){let n=t.map(e=>e.address),r=t.map(e=>s(e.session.device)),i=r.map(e=>`--platform ${e}`).join(` or `);return new e(`AMBIGUOUS_MATCH`,`This workspace has ${t.length} implicit sessions (${n.join(`, `)}); select one explicitly.`,{sessions:n,platforms:r,hint:`Run agent-device session list to inspect them. Add ${i} to run in that platform's session, or pass --session <address> copied from that list.`})}function J(e){return u.createHash(`sha256`).update(e).digest(`hex`).slice(0,16)}function Y(e){if(!e||e.trim().length===0)return;let t=X(e);return Z(t)??t}function X(e){let t=f.resolve(e);try{return d.realpathSync.native(t)}catch{return t}}function Z(e){let t=e;for(;;){if(d.existsSync(f.join(t,`.git`)))return t;let e=f.dirname(t);if(e===t)return;t=e}}export{M as a,T as c,g as d,m as f,A as i,w as l,P as n,N as o,p,k as r,C as s,F as t,h as u};
@@ -1 +0,0 @@
1
- import{D as e,P as t,g as n,k as r,s as i,x as a}from"./sdk-contracts.js";import{u as o}from"./capture.js";import{r as s}from"./snapshot-capture-annotations.js";import{r as c}from"./snapshot-diagnostics.js";import{f as l}from"./android-input-ownership.js";import{a as u,r as d}from"./diagnostics.js";import"./diagnostics2.js";import{d as ee,h as f,w as te}from"./sdk-device.js";import{Cn as ne,jr as re}from"./sdk-batch.js";import{A as ie,C as ae,a as oe,g as se,j as ce,o as le,t as ue}from"./runtime.js";import{h as de,o as p}from"./overlay.js";import{i as fe}from"./click-button.js";import{t as pe}from"./timeouts.js";import"./retry.js";import{t as me}from"./snapshot-state.js";import{i as he}from"./lease-context.js";import{randomInt as ge}from"node:crypto";let m={resolve:async()=>{throw new t(`COMMAND_FAILED`,`Interactor resolution is not composed for this process.`,{reason:`interactor-resolution-missing`})}};function _e(e){m=e}function ve(){return m}var h=class e{#e;constructor(e){this.#e=e}get state(){return this.#e.state}get scope(){return this.#e.scope}get tree(){return this.#e.tree}get generation(){return this.#e.generation}static expire(t){return t.#e.state===`expired`?t:new e({...t.#e,state:`expired`})}};const ye=new h({state:`active`,scope:`all`,tree:void 0,generation:void 0});function be(e){return new h({state:`active`,...e})}function xe(e){return h.expire(e)}const g=new WeakMap,_=new WeakSet;function v(e){return e.refFrame??ye}function y(e){return v(e).generation??e.snapshotGeneration}function Se(e){return v(e).tree}function Ce(e){Te(e),b(e),e.refFrame=xe(v(e)),e.snapshotScopeSource=void 0}function b(e){e.snapshot&&_.add(e.snapshot)}function we(e){return _.has(e)}function Te(e){let t=x(e)+1;return g.set(e,t),t}function x(e){return g.get(e)??0}function Ee(e){S(e,`all`)}function De(e,t){S(e,t)}function S(e,t){e.refFrame=be({scope:t,tree:e.snapshot,generation:e.snapshotGeneration})}function C(e){return v(e).state}function w(e){return v(e).scope}function Oe(e){let t=e.ref.startsWith(`@`)?e.ref.slice(1):e.ref;return{admission:ke({session:e.session,refBody:t,mintedGeneration:e.mintedGeneration}),scope:w(e.session),currentGeneration:y(e.session)}}function ke(e){let{session:t,refBody:n,mintedGeneration:r}=e;if(C(t)===`expired`)return{admitted:!1,reason:`ref_frame_expired`};if(r!==void 0&&r!==y(t))return{admitted:!1,reason:`ref_generation_mismatch`};let i=w(t);if(i!==`all`){if(r===void 0)return{admitted:!1,reason:`plain_ref_requires_complete_frame`};if(!i.has(n))return{admitted:!1,reason:`ref_not_issued`}}return{admitted:!0}}const Ae=[250,400,600];function T(e){return e===`press`||e===`click`||e===`back`||e===`open`}function E(e){return e.map(e=>[e.depth??0,e.type??``,e.label??``,e.value??``,e.identifier??``,e.enabled===!1?`disabled`:`enabled`,e.hittable===!0?`hittable`:`not-hittable`].join(`|`))}function je(e,t){return e<12?!1:t<=Math.floor(e*.2)}function Me(e,t,n){return n.interactiveOnly&&e.snapshot.nodes.length===0&&e.rawNodeCount!==void 0&&e.rawNodeCount>=12?`empty-interactive`:n.mode===`ref-refresh`?null:je(t.baselineCount,e.snapshot.nodes.length)?Ne(e.snapshot)?null:`sharp-drop`:t.routeComparable&&T(t.action)&&Pe(t.baselineSignatures,e.snapshot.nodes)?`stuck-route`:null}function Ne(e){return e.nodes.some(e=>e.hittable===!0||!!e.label?.trim()||!!e.value?.trim()||!!e.identifier?.trim())}function Pe(e,t){if(!e||e.length===0)return!1;let n=Math.max(e.length,t.length);if(n<12)return!1;let r=E(t),i=Math.min(e.length,r.length),a=0;for(let t=0;t<i;t+=1)e[t]===r[t]&&(a+=1);let o=Math.max(0,r.length-e.length),s=Math.max(0,e.length-r.length),c=Math.max(3,Math.floor(n*.15));return a>=Math.floor(n*.9)&&o<=c&&s<=c}async function Fe(e){let t=e.window.markedAt+e.retry.retryBudgetMs,n=await e.capture(),r=e.classify(n),i=0;for(let a of e.retry.delaysMs){if(!r)break;let o=t-Date.now();if(o<=0)break;await pe(Math.min(a,o)),n=await e.capture(),i+=1,r=e.classify(n)}r||e.onTrustworthyCapture?.();let a=i>0||r?{action:e.window.action,retryCount:i,staleAfterRetries:!!r,reason:r??void 0}:void 0;return{...n,annotations:{...n.annotations,...s({freshness:a})}}}function Ie(e,t,n=e.snapshot){if(e.device.platform!==`android`)return;let r=Le(e,n),i=r?.comparisonSafe===!0;e.androidSnapshotFreshness={action:t,markedAt:Date.now(),baselineCount:(r??n)?.nodes.length??0,baselineSignatures:i?E(r?.nodes??[]):void 0,routeComparable:i}}function Le(e,t){if(t?.comparisonSafe===!0)return t;let n=e.lastComparisonSafeSnapshot;return!n||n.comparisonSafe!==!0?t:Date.now()-n.createdAt<=5e3?n:t}function D(e){if(!e||e.device.platform!==`android`)return;let t=e.androidSnapshotFreshness;if(t){if(Date.now()-t.markedAt>2500){delete e.androidSnapshotFreshness;return}return t}}function O(e){!e||e.device.platform!==`android`||delete e.androidSnapshotFreshness}async function k(e,t){return Fe({capture:e.capture,classify:n=>Me({snapshot:n.snapshot,rawNodeCount:n.annotations.analysis?.rawNodeCount},t,{interactiveOnly:e.interactiveOnly,mode:e.androidFreshnessMode}),window:t,retry:{retryBudgetMs:1500,delaysMs:Ae},onTrustworthyCapture:()=>O(e.session)})}function A(e){let t=new Map,n=[],r=ce(e);for(let i of e){let e=Re(i,t,r);e&&n.push(e)}return n}function j(e){return e?.comparisonKey??e?.snapshotQuality?.backend}function M(e,t){return Math.abs(e.x-t.x)<=1&&Math.abs(e.y-t.y)<=1&&Math.abs(e.width-t.width)<=1&&Math.abs(e.height-t.height)<=1}function N(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){let r=e[n],i=t[n];if(!r||!i||r.key!==i.key||!M(r,i))return!1}return!0}function P(e,t){let n=F(e),r=F(t);if(n.size===0||r.size===0)return`ambiguous`;let i=0,a=!1;for(let[e,t]of n){let n=r.get(e);if(!n){a=!0;continue}if(i+=1,!M(t,n))return`changed`}if(i===0)return`ambiguous`;let o=r.size>i;return a&&o?`changed`:`unchanged`}function F(e){let t=new Map;for(let n of e)!n.identity||!n.discriminating||t.has(n.identity)||t.set(n.identity,n);return t}function I(e,t){let n=e.filter(e=>e.discriminating),r=t.filter(e=>e.discriminating);if(n.length===0||n.length!==r.length)return!1;let i=new Map(r.map(e=>[e.key,e]));for(let e of n){let t=i.get(e.key);if(!t||!M(e,t))return!1}return!0}function L(e,t){let n=new Map(t.filter(e=>e.discriminating).map(e=>[e.key,e])),r=0,i=0,a=0;for(let t of e){if(!t.discriminating)continue;let e=n.get(t.key);if(!e){r+=1;continue}n.delete(t.key),a+=1,M(t,e)||(i+=1)}return{onlyInBaseline:r,onlyInCurrent:n.size,rectMismatched:i,shared:a}}function R(e,t,n){let r=z(B(e,n)),i=z(B(t,n));for(let[e,t]of r){let n=i.get(e);if(!n||!M(t,n))return!0;i.delete(e)}return i.size>0}function z(e){let t=new Map,n=new Map;for(let r of e){let e=t.get(r.content)??0;t.set(r.content,e+1),n.set(`${r.content}|#${e}`,r)}return n}function B(e,t){return e.filter(e=>e.discriminating&&e.x<t.x+t.width&&t.x<e.x+e.width&&e.y<t.y+t.height&&t.y<e.y+e.height)}function Re(e,t,n){if(!e.rect||!Ue(e.rect)||We(e))return;let r=He(e);if(!r)return;let i=t.get(r)??0;t.set(r,i+1);let a=Be(e);return{key:`${r}|#${i}`,...a?{identity:a}:{},content:ze(e,a),x:Math.round(e.rect.x),y:Math.round(e.rect.y),width:Math.round(e.rect.width),height:Math.round(e.rect.height),discriminating:!Ve(e,n)}}function ze(e,t){return t??`${e.type??``}|${e.role??``}`}function Be(e){let t=[e.identifier,e.label,e.value].map(e=>typeof e==`string`?e.trim():``).join(`|`);if(t.replaceAll(`|`,``))return`${t}|${e.type??``}`}function Ve(e,t){return re(e)||e.ref!==void 0&&t.has(e.ref)}function He(e){let t=[e.identifier,e.label,e.value,e.type,e.role,...de(e),e.hittable===!0?`hittable`:`not-hittable`].map(e=>typeof e==`string`?e.trim():``).join(`|`);return t.replaceAll(`|`,``)?t:void 0}function Ue(e){return[e.x,e.y,e.width,e.height].every(e=>Number.isFinite(e))&&e.width>0&&e.height>0}function We(e){return`${e.label??``} ${e.identifier??``}`.toLowerCase().includes(`scroll bar`)}function Ge(e){let{session:t,command:n,action:r=n,positionals:i,flags:a,androidFreshnessBaseline:o}=e;T(r)&&Ie(t,r,o??t.snapshot),Ke(t,r,i,a)}function Ke(e,t,n=[],r){if(!H(e.device)||!et(t,n,r))return;let i=U(e.device)?A(e.snapshot?.nodes??[]):void 0;e.postGestureStabilization={action:t,positionals:n,markedAt:Date.now(),...i?.length?{baselineSignature:i,baselineBackend:j(e.snapshot)}:{}}}function qe(e){e?.postGestureStabilization&&(e.postGestureStabilization=void 0)}function V(e){return!!e?.postGestureStabilization}async function Je(e){if(f(e.device)&&e.session&&V(e.session))return await Ye({...e,session:e.session});let t=D(e.session);if(t&&e.device.platform===`android`){let n=await k(e,t);return{snapshot:n.snapshot,...n.annotations}}}async function Ye(e){return Qe(await Ze({session:e.session,capture:async()=>await Xe(e),readSnapshot:e=>e.snapshot}))}async function Xe(e){let t=D(e.session);return t&&e.device.platform===`android`?await k(e,t):await e.capture()}async function Ze(e){let{session:t,capture:n,readSnapshot:r}=e,i=t?.postGestureStabilization;if(!t||!H(t.device)||!i)return{value:e.initial??await n()};try{return await ie({pending:{action:i.action,positionals:i.positionals??[],baselineSignature:i.baselineSignature,baselineBackend:i.baselineBackend},needsBaselineDistrust:U(t.device),initial:e.initial,hooks:{capture:n,readSurface:e=>{let t=r(e);return{signature:A(t.nodes),backend:j(t)}},signaturesStable:N,classifyBaselineEvidence:P,surfacesIdentical:I,summarizeDivergence:L}})}finally{qe(t)}}function Qe(e){let{snapshot:t,annotations:n}=e.value;return e.postGestureOutcome&&(t.postGestureOutcome=e.postGestureOutcome),{snapshot:t,...n}}function $e(e){if(!e?.postGestureStabilization)return e;let{postGestureStabilization:t,...n}=e;return n}function et(e,t,n){return n?.postGestureStabilization===!1?!1:n?.postGestureStabilization===!0||e===`swipe`||e===`scroll`||e===`gesture`&&t[0]===`swipe`}function H(e){return f(e)}function U(e){return ee(e.platform)}const tt=`activity.launchConsole.launchArgs.clearAppState.verbose.iosXctestrunFile.iosXctestDerivedDataPath.iosXctestEnvDir.snapshotInteractiveOnly.snapshotPreferredBackend.snapshotDepth.snapshotScope.snapshotRaw.snapshotCustomActions.snapshotIncludeHiddenContentHints.count.intervalMs.delayMs.durationMs.holdMs.jitterPx.pixels.until.doubleTap.backMode.pauseMs.pattern`.split(`.`);function nt(e){return Object.fromEntries(tt.map(t=>[t,e?.[t]]))}function W(e,t,n,r,i,a){return{requestId:i??u().requestId,appBundleId:n,runnerLeaseContext:he({meta:a}),logPath:e,traceLogPath:r,...nt(t),screenshotCaptureBackend:t?.maestro?.screenshotCaptureBackend,...o(t),clickButton:fe(t)}}let G;async function K(){if(G)return G;let{createAppleSessionObservation:e}=await import(`./session-observation.js`),{listLocalDeviceInventory:t,shouldPropagateDeviceInventoryProbeError:n}=await import(`./device-inventory-context.js`).then(e=>e.t);return G??=e({listLocalDevices:t,shouldPropagateProbeError:n}),G}const rt=Object.freeze({async observeRunnerSession(e){return(await K()).observeRunnerSession(e)},async resolveSoleForegroundApp(e){return(await K()).resolveSoleForegroundApp(e)}});async function it(e,t,n,r){let{queryAppleRunnerSelector:i}=await import(`./runner-operations-facade.js`);return await i(e,t,n,r)}function at(e){let{flags:t,logPath:i,meta:a,session:o,snapshotScope:s}=e,{appBundleId:c,trace:l,surface:u}=o??{},d=e.context??W(i??``,t,c,l?.outPath,a?.requestId,a);return{options:{appBundleId:c,...r(t,n),scope:s,includeRects:e.includeRects,surface:u},execution:q(d),...e.signal===void 0?{}:{signal:e.signal}}}function q(e){return{requestId:e.requestId,verbose:e.verbose,logPath:e.logPath,traceLogPath:e.traceLogPath,iosXctestrunFile:e.iosXctestrunFile,iosXctestDerivedDataPath:e.iosXctestDerivedDataPath,iosXctestEnvDir:e.iosXctestEnvDir,runnerLeaseContext:e.runnerLeaseContext}}function ot(e){let t=ae(e);return{...t,capture:ue(t),selectors:le(t),interactions:oe(t)}}async function st(e){let t=await(await ve().resolve(e.device,e.runnerContext)).snapshot(e.options);if(!(`stage`in t))return t;let{presentIosSnapshotAcquisition:n}=await import(`./ios-snapshot-runtime.js`);return await n(t,e.options)}async function ct(e){let t=await Je({session:e.session,device:e.device,interactiveOnly:e.flags?.snapshotInteractiveOnly===!0,androidFreshnessMode:e.androidFreshnessMode,capture:()=>Y(e)});if(t)return t;let n=await Y(e);return O(e.session),{snapshot:n.snapshot,...n.annotations}}async function J(e){if(e.captureData)return await e.captureData();let{device:t,session:i,logPath:a}=e,o=W(a,X(e),i?.appBundleId,i?.trace?.outPath);return await st({device:t,runnerContext:{requestId:o.requestId,signal:e.signal,appBundleId:o.appBundleId,verbose:o.verbose,logPath:o.logPath,traceLogPath:o.traceLogPath,iosXctestrunFile:o.iosXctestrunFile,iosXctestDerivedDataPath:o.iosXctestDerivedDataPath,iosXctestEnvDir:o.iosXctestEnvDir,runnerLeaseContext:o.runnerLeaseContext},options:{appBundleId:o.appBundleId,signal:e.signal,...r(o,n),includeRects:e.includeRects,surface:i?.surface}})}async function Y(e){let t=Date.now(),n=await J(e);c(e.session,{durationMs:Date.now()-t,backend:n.backend,platform:te(e.device)});let r=s(n),i=l(n,me(n,X(e)));return r.androidSnapshot?.systemSurfaceOnly===!0&&(i.systemSurfaceOnly=!0),{data:n,snapshot:i,annotations:r}}function X(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function lt(t,n){if(!t||!t.trim().startsWith(`@`))return{ok:!0,scope:t};if(!n?.snapshot)return i(`INVALID_ARGS`,`Ref scope requires an existing snapshot in session.`);let r=e(t.trim());if(!r)return i(`INVALID_ARGS`,`Invalid ref scope: ${t}`);let o=[n.snapshot,...n.snapshotScopeSource?[n.snapshotScopeSource]:[]],s=!1,c;for(let e of o){let t=a(e.nodes,r);if(t&&(s=!0,c=se(t,e.nodes),c))break}return s?c?{ok:!0,scope:c}:i(`COMMAND_FAILED`,`Ref ${t} has no label to scope by`,{reason:p.refUnlabeled,ref:r}):i(`COMMAND_FAILED`,`Ref ${t} not found`,{reason:p.refNotFound,ref:r},{hint:ne})}function Z(e,t,n={}){if(!e)return;let r=Se(e);return{name:t,appBundleId:e.appBundleId,appName:e.appName,...n.includeSnapshot===!0?{snapshot:e.snapshot,...r&&n.omitRefFrameSnapshot!==!0?{refFrameSnapshot:r}:{}}:{},metadata:{surface:e.surface,...n.metadata??{}}}}function ut(e,t){return{get:n=>n===e?Z(t,e):void 0,set:()=>{}}}function dt(e){let t=e.ref;return{getRef:()=>t?e.sessionStore.refresh(t):void 0,get:n=>n===e.sessionName?Z(t?e.sessionStore.resolveCurrent(t):void 0,e.sessionName,e.recordOptions):void 0,set:n=>{if(n.name!==e.sessionName){d({level:`warn`,phase:`runtime_session_write_skipped`,data:{expected:e.sessionName,received:n.name}});return}let r=t?e.sessionStore.requireCurrent(t):void 0,i=e.setRecord(n,r,t);i&&(t=i)}}}function ft(e,t){e.snapshot!==t&&(e.snapshotGeneration=Q(e.snapshotGeneration)),e.snapshot=t,e.snapshotScopeSource=void 0,t.comparisonSafe===!0&&(e.lastComparisonSafeSnapshot=t)}function pt(e){e.snapshot=void 0}function mt(e,t){e.snapshot=t.snapshot,t.snapshot.comparisonSafe===!0&&(e.lastComparisonSafeSnapshot=t.snapshot),e.snapshotScopeSource=t.scopeSource,e.snapshotGeneration=t.keptCurrentSnapshot?t.previousGeneration:Q(t.previousGeneration)}function Q(e){return e===void 0?ge(1e5,1e6):e+1}function ht(e){let t=e.startsWith(`@`)?e.slice(1):e,n=t.indexOf(`~`);return n===-1?t:t.slice(0,n)}function $(e,t){let n=new Set;for(let e of t){let t=ht(e);t.length>0&&n.add(t)}n.size!==0&&De(e,n)}function gt(e,t,n){if(!e||!n?.diff)return;let r=t.resolveCurrent(e);if(r)return $(r,_t(n)),r.snapshotGeneration}function _t(e){let t=[];for(let n of e.diff?.lines??[])n.ref&&t.push(n.ref);for(let n of e.refs??[])t.push(n.ref);for(let n of e.tail??[])t.push(n.ref);return t}function vt(e){return`Ref @${e.ref.startsWith(`@`)?e.ref.slice(1):e.ref} was minted from snapshot s${e.mintedGeneration} but the session's ref frame is now s${e.currentFrameEpoch} — re-run snapshot -i.`}function yt(e){let{session:t,ref:n,mintedGeneration:r}=e;if(t&&C(t)===`expired`)return`The UI may have changed since these refs were issued, so they no longer represent current device state. Take a new snapshot before relying on or interacting with them.`;if(r!==void 0){let e=t?y(t)??0:0;if(r!==e)return vt({ref:n,mintedGeneration:r,currentFrameEpoch:e})}}export{Ce as A,P as C,L as D,j as E,v as F,C as I,_e as L,b as M,Oe as N,D as O,x as P,A as S,I as T,W as _,mt as a,$e as b,ut as c,lt as d,ot as f,it as g,rt as h,yt as i,we as j,Ee as k,ct as l,q as m,gt as n,ft as o,at as p,$ as r,dt as s,pt as t,J as u,V as v,R as w,N as x,Ge as y};
@@ -1 +0,0 @@
1
- import{$ as e,P as t,s as n}from"./sdk-contracts.js";import{r}from"./diagnostics.js";import"./diagnostics2.js";import{O as i,d as a,f as o,m as s}from"./sdk-device.js";import{Ht as c,Lr as l,Ut as u,cn as d,et as f,mr as p,nt as m,rt as h,sn as g,tt as _,zt as v}from"./sdk-batch.js";import{f as y}from"./dispatch-resolve.js";import{c as b,s as ee}from"./target-evidence.js";import{l as x}from"./runtime.js";import{i as te,r as S}from"./success-text.js";import"./alert-contract.js";import{C as ne,S as re,c as ie,f as C,g as w,h as T,m as E,p as ae,r as D,w as O}from"./settings.js";import{t as k}from"./location-coordinates.js";import{r as oe,s as se}from"./overlay.js";import{g as ce}from"./screenshot-runtime.js";import{A,_ as j,i as le,l as M,m as N,p as P}from"./session-snapshot.js";import{n as F}from"./runtime-admission.js";import{n as I,t as L}from"./snapshot-runtime.js";import{a as R,i as z}from"./snapshot-runtime-binding.js";import{a as B,c as V,f as H,g as U,h as W,m as ue,o as de,p as fe,s as pe,t as me}from"./selector-runtime.js";async function he(e){let{device:t,action:n,inspectFacts:r,bindDevice:i}=e,a={command:`alert`,device:t,inspectFacts:r,bindDevice:i,readiness:!e.session};if(n===`wait`){let e=await F({...a,use:h});if(e.type===`response`)return{ok:!1,response:e.response};let t=e.runtime;return{ok:!0,execute:e=>_e(t,e)}}if(n===`accept`){let e=await F({...a,use:f});if(e.type===`response`)return{ok:!1,response:e.response};let t=e.runtime;return{ok:!0,execute:e=>ve(t,e)}}if(n===`dismiss`){let e=await F({...a,use:_});if(e.type===`response`)return{ok:!1,response:e.response};let t=e.runtime;return{ok:!0,execute:e=>ye(t,e)}}let o=await F({...a,use:m});if(o.type===`response`)return{ok:!1,response:o.response};let s=o.runtime;return{ok:!0,execute:e=>ge(s,e)}}async function ge(e,t){return await e.operations.readAlert(t)}async function _e(e,t){return await e.operations.awaitAlert(t)}async function ve(e,t){return await e.operations.acceptAlert(t)}async function ye(e,t){return await e.operations.dismissAlert(t)}async function be(e){let{req:t,logPath:n,sessionStore:r,ref:i,device:a,inspectFacts:o,bindDevice:s}=e,c=i?r.requireCurrent(i):void 0,l=await he({device:a,action:Se(t.positionals?.[0]),session:c,inspectFacts:o,bindDevice:s});if(!l.ok)return l.response;c=i?r.requireCurrent(i):void 0,c&&ce(t)===`may-invalidate`&&A(c);let u=j(n,t.flags,c?.appBundleId,c?.trace?.outPath),f=await l.execute({timeoutMs:d(t.positionals?.[1])??1e4,...xe(c),execution:N(u)});return y(r,i,t,t.command,f),{ok:!0,data:f}}function xe(e){return{...e?.appBundleId===void 0?{}:{appBundleId:e.appBundleId},...e?.surface===void 0?{}:{surface:e.surface}}}function Se(e){return e===`accept`||e===`dismiss`||e===`wait`?e:`get`}function Ce(e){let t=e.positionals?.[0]?.toLowerCase(),r=e.positionals?.[1]?.toLowerCase(),i=e.positionals?.[2]?.toLowerCase();if(t===`clear-app-state`)return{ok:!0,parsed:{leg:`write`,args:{setting:t,state:`clear`,appBundleId:r===`clear`?e.positionals?.[2]:e.positionals?.[1]}}};let a=v(e.positionals);if(a.kind===`read`)return{ok:!0,parsed:{leg:`read`,setting:a.setting}};if(!t||!r||t===`permission`&&!i||t===`location`&&r===`set`&&(!e.positionals?.[2]||!e.positionals?.[3])||t===`reset-keychain`&&e.positionals?.[2]!==void 0)return n(`INVALID_ARGS`,ie);let o=r;if(t===`text-size`){let e=re(r);if(e===void 0)return n(`INVALID_ARGS`,T(r));o=e}return{ok:!0,parsed:{leg:`write`,args:{setting:t,state:o,permissionTarget:i,permissionMode:e.positionals?.[3],latitude:e.positionals?.[2],longitude:e.positionals?.[3]}}}}function we(e){if(e.setting===`permission`)return{permissionTarget:e.permissionTarget,permissionMode:e.permissionMode};if(e.setting===`location`&&e.state===`set`)return{latitude:k(e.latitude,`latitude`),longitude:k(e.longitude,`longitude`)}}function Te(e,t,n){let{setting:r,state:i}=e;return r===`clear-app-state`?{setting:`clear-app-state`,state:`clear`,appBundleId:t,platform:n}:r===`location`&&i===`set`?{setting:r,state:i,latitude:e.latitude,longitude:e.longitude,platform:n}:r===`permission`?{setting:r,state:i,permissionTarget:e.permissionTarget,permissionMode:e.permissionMode,platform:n}:{setting:r,state:i,appBundleId:t,platform:n}}function Ee(e){return typeof e.message==`string`&&e.message.length>0?e.message:void 0}async function De(e,t,n){let{setting:r,state:i}=t,a=await e.operations.setSetting(t);return a&&typeof a==`object`?te({setting:r,state:i,...a},Ee(a)??n):{setting:r,state:i,...S(n)}}async function Oe(e){return e.parsed.leg===`read`?await ke(e,e.parsed.setting):await Ae(e,e.parsed.args)}async function ke(e,t){let{req:n,logPath:i,sessionStore:a,ref:o,device:s,inspectFacts:l,bindDevice:u}=e,d=o?a.requireCurrent(o):void 0,f=G(s,t);if(f!==void 0)return f;let p=await F({command:`settings ${t}`,device:s,use:c,inspectFacts:l,bindDevice:u,readiness:!d});if(p.type===`response`)return p.response;d=o?a.requireCurrent(o):void 0,r({level:`debug`,phase:`settings_read`,data:{setting:t,platform:s.platform}});let m=j(i,n.flags,d?.appBundleId,d?.trace?.outPath),h=await p.runtime.operations.readSetting({setting:t,execution:N(m)}),g={...h,...S(C(h))};return y(a,o,n,n.command,g),{ok:!0,data:g}}async function Ae(e,t){let{req:n,logPath:i,sessionStore:a,ref:o,device:s,inspectFacts:c,bindDevice:l}=e,d=o?a.requireCurrent(o):void 0,{setting:f,state:p}=t,m=G(s,f);if(m!==void 0)return m;let h=je(s,n,f,p);if(h!==void 0)return h;let g=await F({command:`settings`,device:s,use:u,inspectFacts:c,bindDevice:l,readiness:!d});if(g.type===`response`)return g.response;d=o?a.requireCurrent(o):void 0;let _=Me(n,t,d,s),v=Ne(t,_);if(v!==void 0)return v;d&&A(d),r({level:`debug`,phase:`settings_apply`,data:Te(t,_,s.platform)});let b=await De(g.runtime,Pe(t,_,j(i,n.flags,_,d?.trace?.outPath)),ae(f,p,_));return y(a,o,n,n.command,b),{ok:!0,data:b}}function G(e,t){if(s(e)&&!w(t))return n(`INVALID_ARGS`,E(t));if(t===`text-size`&&a(e.platform)&&!o(e))return n(`UNSUPPORTED_OPERATION`,D.message,{deviceKind:e.kind,appleOs:i(e),reason:D.reason},{hint:D.hint})}function K(e){let t=e.input?.app;if(typeof t!=`string`)return;let n=t.trim();return n.length>0?n:void 0}function q(e){return s(e)?`macos-host`:a(e.platform)?`apple`:`mobile`}function je(e,t,r,i){let a=K(t);if(a===void 0||O(q(e),r,i)!==`device-level`)return;let o=ne(r,i,a);return n(o.code,o.message,o.details,{hint:o.hint})}function Me(e,t,n,r){let i=O(q(r),t.setting,t.state)===`app-scoped`?K(e):void 0;return t.appBundleId??i??e.internal?.settingsAppBundleId??n?.appBundleId}function Ne(t,r){if(t.setting===`clear-app-state`&&!r)return n(`INVALID_ARGS`,`settings clear-app-state requires an app id when no app is bound to the session`,e())}function Pe(e,t,n){let r=we(e);return{setting:e.setting,state:e.state,...t===void 0?{}:{appBundleId:t},...r===void 0?{}:{options:r},execution:N(n)}}async function Fe(e){return await I({...e,command:`diff`,execute:async({runtime:e,sessionName:t,req:n,snapshotScope:r})=>{let i=await e.capture.diffSnapshot({session:t,interactiveOnly:n.flags?.snapshotInteractiveOnly,depth:n.flags?.snapshotDepth,scope:r,raw:n.flags?.snapshotRaw});return{data:i,record:{kind:`diff`,mode:`snapshot`,baselineInitialized:i.baselineInitialized,summary:i.summary}}}})}function Ie(e){return e!==`sleep`}const Le=[`application`,`window`,`tabbar`,`scrollbar`,`image`],Re=new Set([`tab bar`]);async function ze(e,t){if(t.ok||!Be(t.error.details?.reason)||t.error.details?.captureStalled===!0||t.error.details?.captureTruncated===!0)return t;let r=await Ve(e).catch(()=>null);return r?n(t.error.code,`${t.error.message}. Current surface: ${r.summary}.`,{...t.error.details??{},currentSurface:r.details}):t}function Be(e){return e===x.targetAbsent||e===x.stableTimeout}async function Ve(e){let t={...e.req.flags,snapshotInteractiveOnly:!0},n=await M({device:e.device,session:e.session,flags:t,logPath:e.logPath??``,captureData:async()=>await e.capture(P({flags:t,logPath:e.logPath??``,meta:e.req.meta,session:e.session,snapshotScope:void 0}))});ee(e.captureProof,n.snapshot);let r=[...n.snapshot.nodes].sort(He),i=J(r,6,{includeIdentifiers:!0});if(i.length===0)return null;let a=J(r.filter(e=>!Z(e)),4,{includeIdentifiers:!1}),o=J(r.filter(We),4,{includeIdentifiers:!0});return{summary:(a.length>0?a:i.slice(0,4)).join(`, `),details:{labels:i,...o.length>0?{buttons:o}:{}}}}function J(e,t,n){let r=new Set,i=[];for(let a of e){let e=X(a,n);if(!(!e||r.has(e))&&(r.add(e),i.push(e),i.length>=t))break}return i}function He(e,t){return Y(e)-Y(t)||Ue(e,t)}function Y(e){let t=!!X(e,{includeIdentifiers:!1});return(Z(e)?2:0)+ +!t}function Ue(e,t){return e.rect&&t.rect?e.rect.y-t.rect.y||e.rect.x-t.rect.x:e.rect?-1:t.rect?1:(e.depth??0)-(t.depth??0)||e.index-t.index}function X(e,t){let n=(t.includeIdentifiers?[e.label,e.value,e.identifier]:[e.label,e.value]).map(e=>typeof e==`string`?e.trim():``).find(e=>e.length>0);return n?n.replaceAll(/\s+/g,` `).slice(0,80):``}function Z(e){let t=l(`${e.type??``} ${e.role??``} ${e.subrole??``}`),n=`${e.label??``} ${e.value??``}`.trim().toLowerCase();return Le.some(e=>t.includes(e))||Re.has(n)||n.endsWith(`.fill`)}function We(e){let t=`${e.type??``} ${e.role??``} ${e.subrole??``}`;return l(t).includes(`button`)}async function Ge(e){let{req:t,sessionName:n,sessionStore:r}=e,i=Q(t);if(`ok`in i)return i;let a=i,{ref:o,session:s,device:c}=await z(r,n,t.flags),l=await Ke(e,a,s,c);if(l&&`ok`in l)return l;let u=l,d=t.internal?.replayLandmarkGuard,f=qe(a,s);if(`ok`in f)return f;let{waitParsed:p,staleRefsWarning:m}=f;return e.consumedSnapshot??={},e.captureProof??={},a.kind===`sleep`?await $({...e,ref:o},p,s,c,u,m,d):b({response:await R(s,c,()=>$({...e,ref:o},p,s,c,u,m,d),e.platformResourceCleanup),consumedTree:me(e),captureProof:e.captureProof})}function Q(e){let t=g(e.positionals??[]);if(!t)return n(`INVALID_ARGS`,`wait requires a duration or text`);if(t.kind===`invalid`)return n(`INVALID_ARGS`,t.message);if(t.kind!==`absent`)return t;let r=se({depth:e.flags?.snapshotDepth,scope:e.flags?.snapshotScope});if(!r)return t;let i=oe(r,`wait`);return n(i.code,i.message,i.details)}async function Ke(e,t,n,r){if(!Ie(t.kind))return;let i=await H({command:`wait`,device:r,session:n,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?i.operations:i.response}function qe(e,t){if(e.kind!==`ref`)return{waitParsed:e};let n=U(e.rawRef);return n.ok?{waitParsed:{...e,rawRef:n.ref},staleRefsWarning:le({session:t,ref:n.ref,mintedGeneration:n.generation})}:n.response}async function $(e,t,n,r,i,a,o){let{req:s,sessionName:c,sessionStore:l}=e,u=V({...e,ref:e.ref,session:n,device:r,bound:i}),d=await pe(async()=>{let r=await u.selectors.wait({session:c,requestId:s.meta?.requestId,target:Je(t,n,o)}),i=de(r);fe(l,e.ref,s,ue(r),i,`landmark`);let d=W(r);return a?{...d,warning:a}:d}),f=i?await ze({req:s,logPath:e.logPath,session:n,device:r,capture:i.capture,captureProof:e.captureProof},d):d;return await B(e,f,`wait`)}function Je(e,t,n){switch(e.kind){case`sleep`:return{kind:`sleep`,durationMs:e.durationMs};case`selector`:return{kind:`selector`,selector:e.selectorExpression,timeoutMs:e.timeoutMs,...n?{recordedLandmark:n}:{}};case`absent`:return{kind:`absent`,selector:e.selectorExpression,timeoutMs:e.timeoutMs};case`ref`:return Xe(e,t);case`stable`:return{kind:`stable`,quietMs:e.quietMs,timeoutMs:e.timeoutMs};case`text`:return Ze(e);default:return Ye(e)}}function Ye(e){throw Error(`Unsupported wait positional target: ${String(e)}`)}function Xe(e,n){if(!n?.snapshot)throw new t(`INVALID_ARGS`,`Ref wait requires an existing snapshot in session.`);return{kind:`ref`,ref:e.rawRef,timeoutMs:e.timeoutMs}}function Ze(e){let n=p(e.text);if(!n.ok)throw new t(n.code,n.message);return{kind:`text`,text:n.text,timeoutMs:e.timeoutMs}}const Qe={snapshot:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>await L({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o}),diff:async({req:e,sessionName:t,logPath:r,sessionStore:i,inspectFacts:a,bindDevice:o,platformResourceCleanup:s})=>e.positionals?.[0]===`snapshot`?await Fe({req:e,sessionName:t,logPath:r,sessionStore:i,inspectFacts:a,bindDevice:o,platformResourceCleanup:s}):n(`INVALID_ARGS`,`diff currently supports only: diff snapshot`),wait:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>await Ge({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o}),alert:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>{let{ref:s,session:c,device:l}=await z(r,t,e.flags);return await R(c,l,async()=>await be({req:e,logPath:n,sessionStore:r,ref:s,device:l,inspectFacts:i,bindDevice:a}),o)},settings:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>{let s=Ce(e);if(!s.ok)return s;let{ref:c,session:l,device:u}=await z(r,t,e.flags);return await R(l,u,async()=>await Oe({req:e,logPath:n,sessionStore:r,ref:c,device:u,parsed:s.parsed,inspectFacts:i,bindDevice:a}),o)}};async function $e(e){let t=e.req.command,n=Qe[t];return n?await n(e):null}export{$e as handleSnapshotCommands};
package/dist/src/src4.js DELETED
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime.js";var t=e({appSwitcherHarmony:()=>y,backHarmony:()=>_,closeHarmonyApp:()=>o,createHarmonyInventoryModule:()=>O,doubleClickHarmony:()=>d,ensureHarmonyToolchainPathConfigured:()=>l,fillHarmony:()=>m,harmonyToolchainCheck:()=>D,homeHarmony:()=>v,longPressHarmony:()=>f,openHarmonyApp:()=>a,performHarmonyGesture:()=>g,pressHarmony:()=>u,pressHarmonyKeyboardKey:()=>b,readHarmonyGestureViewport:()=>T,runHarmonyHdc:()=>s,runHarmonyShell:()=>c,runtimeModule:()=>i,sampleHarmonyMemoryPerf:()=>E,screenshotHarmony:()=>S,scrollHarmony:()=>h,setHarmonyOrientation:()=>x,setHarmonySetting:()=>C,snapshotHarmony:()=>w,typeHarmony:()=>p});function n(e){return(async(...t)=>await(await e())(...t))}const r=Object.freeze({family:`harmonyos`}),i=Object.freeze({...r,loadRuntime:async e=>{let{createHarmonyPlatformRuntime:t}=await import(`./runtime6.js`);return t(e)}}),a=n(async()=>(await import(`./app-lifecycle2.js`)).openHarmonyApp),o=n(async()=>(await import(`./app-lifecycle2.js`)).closeHarmonyApp),s=n(async()=>(await import(`./hdc.js`)).runHarmonyHdc),c=n(async()=>(await import(`./hdc.js`)).runHarmonyShell),l=n(async()=>(await import(`./hdc.js`)).ensureHarmonyToolchainPathConfigured),u=n(async()=>(await import(`./input-actions.js`)).pressHarmony),d=n(async()=>(await import(`./input-actions.js`)).doubleClickHarmony),f=n(async()=>(await import(`./input-actions.js`)).longPressHarmony),p=n(async()=>(await import(`./input-actions.js`)).typeHarmony),m=n(async()=>(await import(`./input-actions.js`)).fillHarmony),h=n(async()=>(await import(`./input-actions.js`)).scrollHarmony),g=n(async()=>(await import(`./input-actions.js`)).performHarmonyGesture),_=n(async()=>(await import(`./input-actions.js`)).backHarmony),v=n(async()=>(await import(`./input-actions.js`)).homeHarmony),y=n(async()=>(await import(`./input-actions.js`)).appSwitcherHarmony),b=n(async()=>(await import(`./input-actions.js`)).pressHarmonyKeyboardKey),x=n(async()=>(await import(`./input-actions.js`)).setHarmonyOrientation),S=n(async()=>(await import(`./screenshot.js`)).screenshotHarmony),C=n(async()=>(await import(`./settings2.js`)).setHarmonySetting),w=n(async()=>(await import(`./snapshot2.js`)).snapshotHarmony),T=n(async()=>(await import(`./snapshot2.js`)).readHarmonyGestureViewport),E=n(async()=>(await import(`./perf.js`)).sampleHarmonyMemoryPerf),D=n(async()=>(await import(`./doctor.js`)).harmonyToolchainCheck);function O(e){let t=Object.freeze({hdcSdkPath:k(e.hdcSdkPath),devecoSdkHome:k(e.devecoSdkHome),commandLineToolsHome:k(e.commandLineToolsHome)});return Object.freeze({...r,loadInventory:async e=>{let{createHarmonyInventory:n}=await import(`./inventory3.js`);return n(e,t)}})}function k(e){return e?.trim()||void 0}export{x as _,d as a,t as b,f as c,u as d,b as f,h as g,S as h,O as i,a as l,i as m,_ as n,m as o,T as p,o as r,v as s,y as t,g as u,C as v,p as x,w as y};
package/dist/src/src5.js DELETED
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime.js";var t=e({backLinux:()=>c,captureLinuxSurfaceSnapshot:()=>C,closeLinuxApp:()=>s,doubleClickLinux:()=>f,fillLinux:()=>p,focusLinux:()=>m,homeLinux:()=>l,inventoryModule:()=>a,longPressLinux:()=>h,middleClickLinux:()=>v,openLinuxApp:()=>o,pressLinux:()=>g,readLinuxClipboard:()=>u,readLinuxTextAtPoint:()=>w,rightClickLinux:()=>_,runtimeModule:()=>i,screenshotLinux:()=>S,scrollLinux:()=>y,swipeLinux:()=>b,typeLinux:()=>x,withLinuxToolProvider:()=>T,writeLinuxClipboard:()=>d});function n(e){return(async(...t)=>await(await e())(...t))}const r=Object.freeze({family:`linux`}),i=Object.freeze({...r,loadRuntime:async e=>{let{createLinuxPlatformRuntime:t}=await import(`./runtime7.js`);return t(e)}}),a=Object.freeze({...r,loadInventory:async e=>{let{createLinuxInventory:t}=await import(`./inventory4.js`);return t(e)}}),o=n(async()=>(await import(`./app-lifecycle3.js`)).openLinuxApp),s=n(async()=>(await import(`./app-lifecycle3.js`)).closeLinuxApp),c=n(async()=>(await import(`./app-lifecycle3.js`)).backLinux),l=n(async()=>(await import(`./app-lifecycle3.js`)).homeLinux),u=n(async()=>(await import(`./clipboard.js`)).readLinuxClipboard),d=n(async()=>(await import(`./clipboard.js`)).writeLinuxClipboard),f=n(async()=>(await import(`./input-actions2.js`)).doubleClickLinux),p=n(async()=>(await import(`./input-actions2.js`)).fillLinux),m=n(async()=>(await import(`./input-actions2.js`)).focusLinux),h=n(async()=>(await import(`./input-actions2.js`)).longPressLinux),g=n(async()=>(await import(`./input-actions2.js`)).pressLinux),_=n(async()=>(await import(`./input-actions2.js`)).rightClickLinux),v=n(async()=>(await import(`./input-actions2.js`)).middleClickLinux),y=n(async()=>(await import(`./input-actions2.js`)).scrollLinux),b=n(async()=>(await import(`./input-actions2.js`)).swipeLinux),x=n(async()=>(await import(`./input-actions2.js`)).typeLinux),S=n(async()=>(await import(`./screenshot2.js`)).screenshotLinux),C=n(async()=>(await import(`./surface-snapshot2.js`)).captureLinuxSurfaceSnapshot),w=n(async()=>(await import(`./snapshot3.js`)).readLinuxTextAtPoint);async function T(e,t){let{withLinuxToolProvider:n}=await import(`./tool-provider2.js`).then(e=>e.r);return await n(e,t)}export{d as S,S as _,p as a,b,a as c,o as d,g as f,i as g,_ as h,f as i,h as l,w as m,C as n,m as o,u as p,s as r,l as s,c as t,v as u,y as v,x,t as y};
package/dist/src/src6.js DELETED
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime.js";var t=e({AGENT_BROWSER_TIMEOUT_MS:()=>AGENT_BROWSER_TIMEOUT_MS,cleanupManagedAgentBrowserOrphans:()=>u,createAgentBrowserWebProvider:()=>o,doctorManagedAgentBrowser:()=>l,getManagedAgentBrowserStatus:()=>s,hasScopedWebProvider:()=>p,inventoryModule:()=>a,resolveWebProvider:()=>f,runtimeModule:()=>i,setupManagedAgentBrowser:()=>c,webBrowserLifecycleCheck:()=>d,withWebProvider:()=>m});function n(e){return(async(...t)=>await(await e())(...t))}const r=Object.freeze({family:`web`}),i=Object.freeze({...r,loadRuntime:async e=>{let{createWebPlatformRuntime:t}=await import(`./runtime9.js`);return t(e)}}),a=Object.freeze({...r,loadInventory:async()=>{let{createWebInventory:e}=await import(`./inventory6.js`);return e()}}),o=n(async()=>(await import(`./agent-browser-provider.js`)).createAgentBrowserWebProvider),s=n(async()=>(await import(`./agent-browser-tool.js`).then(e=>e.t)).getManagedAgentBrowserStatus),c=n(async()=>(await import(`./agent-browser-tool.js`).then(e=>e.t)).setupManagedAgentBrowser),l=n(async()=>(await import(`./agent-browser-tool.js`).then(e=>e.t)).doctorManagedAgentBrowser),u=n(async()=>(await import(`./agent-browser-lifecycle.js`).then(e=>e.t)).cleanupManagedAgentBrowserOrphans),d=n(async()=>(await import(`./doctor3.js`)).webBrowserLifecycleCheck),f=n(async()=>(await import(`./provider.js`)).resolveWebProvider),p=n(async()=>(await import(`./provider.js`)).hasScopedWebProvider);async function m(e,t){let{withWebProvider:n}=await import(`./provider.js`);return await n(e,t)}export{t as i,f as n,i as r,a as t};
package/dist/src/src7.js DELETED
@@ -1,2 +0,0 @@
1
- import{P as e}from"./sdk-contracts.js";import{j as t}from"./sdk-device.js";import{Xt as n,tn as r}from"./sdk-batch.js";import{t as i}from"./audio-probe-runtime.js";import{a,n as o,t as s}from"./durable-resource.js";import{n as c}from"./async-lifecycle.js";import{n as l,t as u}from"./audio-probe-result.js";import d from"node:fs/promises";function f(e,t){if(e.resourceKind!==t.resourceKind)return{status:`unreattachable`,reason:`descriptor-invalid`,message:`Durable resource kind ${e.resourceKind} does not match ${t.resourceKind}`};if(e.descriptor.version!==t.version)return{status:`unreattachable`,reason:`descriptor-version-unsupported`,message:`Unsupported ${t.resourceKind} descriptor version: ${e.descriptor.version}`,version:e.descriptor.version};try{let n=t.decode(e.descriptor.body);return n.status===`decoded`?n:{status:`unreattachable`,reason:`descriptor-invalid`,message:n.message}}catch(e){return{status:`unreattachable`,reason:`descriptor-invalid`,message:e instanceof Error?e.message:`Descriptor codec rejected the body`}}}function p(e,t){return Object.freeze({pendingHandle:new c(e),envelope:t})}function m(e){return Object.freeze({appLogReattach:async({envelope:t})=>{let n=f(t,e.codec);return n.status===`unreattachable`?n:await e.reattach(n.descriptor,h(t))},appLogCleanup:async({envelope:t})=>{let n=f(t,e.codec);return n.status===`decoded`?await e.cleanup(n.descriptor,h(t)):{status:`cleanup-pending`,reason:`manual-recovery-required`,message:n.message}}})}function h(e){return Object.freeze({sessionId:e.sessionId,fence:e.fence})}function g(e){if(typeof e!=`object`||!e||Array.isArray(e))return{status:`invalid`,message:`App-log process marker must be an object`};let t=e;return!Number.isInteger(t.pid)||Number(t.pid)<=0?{status:`invalid`,message:`App-log process marker pid must be a positive integer`}:typeof t.startTime!=`string`||t.startTime.trim().length===0?{status:`invalid`,message:`App-log process marker startTime must be a non-empty string`}:typeof t.command!=`string`||t.command.trim().length===0?{status:`invalid`,message:`App-log process marker command must be a non-empty string`}:{status:`decoded`,marker:Object.freeze({pid:Number(t.pid),startTime:t.startTime,command:t.command})}}function _(e){let t,n,r,i=()=>n??=e.forceCleanup();return Object.freeze({inspect:()=>e.inspect(),finish:()=>t??=e.finish(),forceCleanup:i,[Symbol.asyncDispose]:async()=>{r??=i().then(ee),await r}})}function v(e){return _({inspect:e.inspect,finish:e.finish,forceCleanup:async()=>{let t=await e.finish();return t.status===`completed`?{status:`cleaned`}:{status:`cleanup-pending`,reason:t.reason,message:t.message}}})}function ee(t){if(!s(t))throw new e(`COMMAND_FAILED`,t.message??`Durable resource cleanup could not be confirmed`,{reason:t.reason,retriable:t.reason!==`ownership-fence-lost`,hint:t.reason===`ownership-fence-lost`?`Use the current resource owner or recovery record before retrying cleanup.`:`Keep the recovery record and retry cleanup through the exact runtime owner.`})}const te=e=>b(e.backend)&&(e.source===`system-audio`||e.source===`media-elements`)&&x(e.sourceCount,0)&&re(e.notes)&&b(e.statusPath)&&x(e.startedAt,1)&&x(e.durationMs,1)&&x(e.bucketMs,1),y=Object.freeze({resourceKind:i,version:1,encode:e=>({...e,notes:[...e.notes],marker:{...e.marker}}),decode:e=>{let t=te(e)?ne(e.marker):`invalid`;if(t===`invalid`)return{status:`invalid`,message:`Audio probe descriptor body is invalid`};let n=e;return{status:`decoded`,descriptor:Object.freeze({backend:n.backend,source:n.source,sourceCount:n.sourceCount,notes:Object.freeze([...n.notes]),statusPath:n.statusPath,startedAt:n.startedAt,durationMs:n.durationMs,bucketMs:n.bucketMs,marker:t})}}});function ne(e){if(typeof e!=`object`||!e)return`invalid`;let t=e;return!x(t.pid,1)||!b(t.startTime)||!b(t.command)?`invalid`:Object.freeze({pid:t.pid,startTime:t.startTime,command:t.command})}function b(e){return typeof e==`string`&&e.length>0}function x(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=t}function re(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)}async function S(e){try{let t=await d.readFile(e.statusPath,`utf8`);return l(JSON.parse(t),{source:e.source,backend:e.backend,durationMs:e.durationMs,elapsedMs:Date.now()-e.startedAt,bucketMs:e.bucketMs,activeFallback:!0,sourceCount:e.sourceCount,notes:[...e.notes]})}catch(e){if(e.code===`ENOENT`)return;throw e}}function C(e,t,n){let r=Math.min(e.durationMs,Math.max(0,Date.now()-e.startedAt));return{...t??u({source:e.source,backend:e.backend,durationMs:e.durationMs,bucketMs:e.bucketMs,sourceCount:e.sourceCount,notes:[...e.notes]}),state:`stopped`,active:!1,elapsedMs:r,stoppedAt:new Date().toISOString(),reason:n}}function ie(e){let{host:t}=e;return Object.freeze({audioProbeReattach:async e=>{let n=f(e.envelope,y);if(n.status!==`decoded`)return n;let r=n.descriptor,i=await t.inspectProcess(r.marker);if(i===`owned-alive`)return{status:`unreattachable`,reason:`transport-not-reattachable`};if(i===`ownership-lost`)return{status:`unreattachable`,reason:`ownership-fence-lost`};let a=await S(r);return a===void 0||a.state!==`stopped`?{status:`missing`}:{status:`completed`,result:C(r,a,`daemon-recovery`)}},audioProbeCleanup:async e=>{let n=f(e.envelope,y);if(n.status!==`decoded`)return{status:`cleanup-pending`,reason:`manual-recovery-required`,message:n.message};let r=n.descriptor,i=await t.inspectProcess(r.marker);if(i===`ownership-lost`)return{status:`cleanup-pending`,reason:`ownership-fence-lost`};if(i===`missing`)return{status:`already-missing`};let a=await t.terminateProcess(r.marker);return a===`ownership-lost`?{status:`cleanup-pending`,reason:`ownership-fence-lost`}:{status:a===`terminated`?`cleaned`:`already-missing`}}})}async function ae(n){let{host:r,device:s,owner:l,input:u}=n,f=Date.now(),p=r.info,m=Object.freeze([...p.notes(s)]),h=Object.freeze({source:p.source,backend:p.backend,sourceCount:p.sourceCount,notes:m,statusPath:u.statusPath,startedAt:f,durationMs:u.durationMs,bucketMs:u.bucketMs});await d.rm(u.statusPath,{force:!0});let g=await r.start({durationMs:u.durationMs,bucketMs:u.bucketMs,statusPath:u.statusPath});g.wait.catch(()=>{});let _=g.marker;try{if(_===void 0)throw new e(`COMMAND_FAILED`,`failed to start host audio probe: the helper process exposed no exact identity, so the capture could not be recovered after daemon loss and was terminated`);await ue(h,g)}catch(e){throw await g.terminate().catch(()=>{}),e}return Object.freeze({pendingHandle:new c(oe(h,g)),envelope:o({resourceKind:i,sessionId:u.sessionId,device:t(s),owner:l,fence:u.fence,lifecycle:`open`,descriptor:a(y,{backend:p.backend,source:p.source,sourceCount:p.sourceCount,notes:m,statusPath:u.statusPath,startedAt:f,durationMs:u.durationMs,bucketMs:u.bucketMs,marker:_})})})}function oe(e,t){let n,r,i,a;t.wait.then(e=>{a={message:se(e)}},e=>{a={message:e instanceof Error?e.message:`audio probe helper wait failed`}});let o=()=>n??=(async()=>{let n=await S(e);if(n?.state!==`stopped`&&a)throw w(a);return await t.terminate().catch(()=>{}),await t.wait.catch(()=>{}),{status:`completed`,result:C(e,n,`stopped`)}})(),s=()=>r??=n?n.then(async()=>({status:`cleaned`}),async()=>await T(t)):T(t);return Object.freeze({inspect:()=>e,status:async()=>{let t=await S(e);if(t?.state===`stopped`)return t;if(a)throw w(a);return t??C(e,void 0,`not-started`)},finish:o,forceCleanup:s,[Symbol.asyncDispose]:async()=>{i??=s().then(ce),await i}})}function se(e){return e.stderr?.trim()||e.stdout?.trim()||`audio probe helper exited with code ${e.exitCode??1}`}function w(t){return new e(`COMMAND_FAILED`,`host audio probe helper exited before completing the capture: ${t.message}`,{hint:`Keep audio-probe.resource.json; stop resolves the record through descriptor cleanup.`})}async function T(e){try{return await e.terminate(),await e.wait.catch(()=>{}),{status:`cleaned`}}catch(e){return{status:`cleanup-pending`,reason:`cleanup-unconfirmed`,message:e instanceof Error?e.message:`Audio probe termination failed`}}}function ce(t){if(!s(t))throw new e(`COMMAND_FAILED`,t.message??`Audio probe cleanup could not be confirmed`,{reason:t.reason,retriable:t.reason!==`ownership-fence-lost`,hint:`Keep audio-probe.resource.json and retry stop through its exact runtime owner.`})}function le(e){let{host:t,device:n,owner:r}=e,i=ie({host:t});return Object.freeze({audioProbeStart:async e=>await ae({host:t,device:n,owner:r,input:e}),audioProbeReattach:i.audioProbeReattach,audioProbeCleanup:i.audioProbeCleanup})}async function ue(t,n){let r=Date.now()+5e3;for(;Date.now()<r;){if(await S(t))return;let r=await Promise.race([n.wait.then(e=>e,e=>e),de(100).then(()=>void 0)]);if(r instanceof Error)throw r;if(r){let t=r,n=t.stderr?.trim()||t.stdout?.trim()||`host audio probe helper exited with code ${t.exitCode??1}`;throw new e(`COMMAND_FAILED`,`failed to start host audio probe: ${n}`)}}throw new e(`COMMAND_FAILED`,`failed to start host audio probe`)}function de(e){return new Promise(t=>setTimeout(t,e))}async function E(e,t){let n=await O(e,t);if(n.status===`missing`)return{status:`missing`};if(n.status===`invalid`)return{status:`unreattachable`,reason:`ownership-fence-lost`,message:n.message};let r=await e.processes.inspect(n.marker);return r===`missing`?(t&&await e.processes.clearMarker(t),{status:`missing`}):r===`ownership-lost`?{status:`unreattachable`,reason:`ownership-fence-lost`}:{status:`unreattachable`,reason:`transport-not-reattachable`}}async function D(e,t){if(!t)return{status:`cleanup-pending`,reason:`manual-recovery-required`,message:`App-log process marker path is missing`};let n=await O(e,t);if(n.status===`missing`)return{status:`already-missing`};if(n.status===`invalid`)return{status:`cleanup-pending`,reason:`manual-recovery-required`,message:n.message};let r=await e.processes.inspect(n.marker);if(r===`ownership-lost`)return k();if(r===`missing`)return await e.processes.clearMarker(t),{status:`already-missing`};let i=await e.processes.terminate(n.marker);return i===`ownership-lost`?k():(await e.processes.clearMarker(t),{status:i===`terminated`?`cleaned`:`already-missing`})}async function O(e,t){return t?await e.processes.readMarker(t):{status:`invalid`,message:`App-log process marker path is missing`}}function k(){return{status:`cleanup-pending`,reason:`ownership-fence-lost`}}async function fe(e){let t=e.initialProcess;for(;!e.stopped();){if(t){await pe(e,t),t=void 0,await be(e);continue}let n=await xe(e);if(n.status===`stopped`)return;n.status!==`waiting`&&(t=n.process)}}async function pe(e,t){let{process:n}=t;e.setActive(n);try{e.setState(`active`),await me(e,t)}finally{await A(e,n)}}async function me(e,t){let n=he(t.process);try{await ge(e,t,n),await ve(e,t.process,n),await ye(n.outcome)}finally{n.controller.abort()}}function he(e){let t=new AbortController,n=!1,r=()=>{n=!0,t.abort()};return{controller:t,outcome:e.wait.then(()=>(r(),{status:`exited`}),e=>(r(),{status:`failed`,error:e})),settled:()=>n}}async function ge(e,t,n){for(;!e.stopped()&&!n.settled();){if(!await _e(e,n))return;let r=await e.resolvePid();if(e.stopped())return;if(r!==t.pid){await t.process.terminate();return}}}async function _e(e,t){try{await e.sleep(500,t.controller.signal)}catch(e){if(!t.settled())throw e}return!t.settled()}async function ve(e,t,n){e.stopped()&&!n.settled()&&await t.terminate()}async function ye(e){let t=await e;if(t.status===`failed`)throw t.error}async function be(e){e.stopped()||(e.setState(`recovering`),await e.sleep(500))}async function xe(e){let t=await e.resolvePid();if(e.stopped())return{status:`stopped`};if(!t)return e.setState(`recovering`),await e.sleep(1e3),{status:`waiting`};let n=await e.startProcess(t);return e.setActive(n),e.stopped()?(await Se(e,n),{status:`stopped`}):{status:`started`,process:{pid:t,process:n}}}async function Se(e,t){try{await t.terminate(),await t.wait}finally{await A(e,t)}}async function A(e,t){try{await t[Symbol.asyncDispose]()}finally{e.setActive(void 0)}}async function Ce(e){let t=await e.resolvePid(e.setupSignal);e.setupSignal.throwIfAborted();let n=await e.host.outputs.openAppend(e.outputPath),r=`recovering`,i=!1,a;try{if(e.setupSignal.throwIfAborted(),t){e.setupSignal.throwIfAborted();let i=new AbortController,o=()=>i.abort(e.setupSignal.reason);e.setupSignal.addEventListener(`abort`,o,{once:!0});try{a=await e.processStart({command:e.command(t),output:n,markerPath:e.pidPath},i.signal)}finally{e.setupSignal.removeEventListener(`abort`,o)}e.setupSignal.throwIfAborted(),r=`active`}}catch(e){throw await j([async()=>await a?.terminate(),async()=>{await a?.wait},async()=>await a?.[Symbol.asyncDispose](),async()=>await n[Symbol.asyncDispose]()]),e}let o=fe({initialProcess:a&&t?{pid:t,process:a}:void 0,stopped:()=>i,setActive:e=>{a=e},setState:e=>{r=e},resolvePid:async()=>await e.resolvePid(),startProcess:async t=>await e.processStart({command:e.command(t),output:n,markerPath:e.pidPath}),sleep:async(t,n)=>await e.host.clock.sleep(t,n)}).catch(()=>{r=`failed`}),s,c=async()=>s??=we({options:e,monitor:o,active:()=>a,stop:()=>{i=!0},setState:e=>{r=e},output:n}),l=e.host.clock.now();return v({inspect:()=>({backend:e.backend,state:r,startedAt:l}),finish:c})}async function we(e){return e.stop(),(await j([async()=>await e.active()?.terminate(),async()=>await e.monitor,async()=>await e.output[Symbol.asyncDispose]()])).length>0?(e.setState(`failed`),{status:`cleanup-pending`,reason:`transport-failed`,message:e.options.cleanupFailureMessage}):(e.setState(`ended`),{status:`completed`,result:{backend:e.options.backend,outputPath:e.options.outputPath,completedAt:e.options.host.clock.now()}})}async function j(e){let t=[];for(let n of e)try{await n()}catch(e){t.push(e)}return t}function M(e,t,n){let r=e.artifacts.resolveSession(t);return n.outputPath===r.outputPath&&(n.pidPath===void 0||n.pidPath===r.pidPath)}function N(t,n){if(!M(t,n.sessionId,n))throw new e(`INVALID_ARGS`,`App-log paths do not match the owning session`)}const P=Object.freeze({available:!0});async function Te(e,t,n){let r=(await e.commands.run(t,n)).stdout.trim().split(/\s+/)[0]??``;return/^\d+$/.test(r)?r:``}function Ee(t,i){let a=n(i.family);return Object.freeze({owner:a,ownsDevice:e=>e.platform===i.family,inspectFacts:async e=>F(e,await t.processTransports.resolve(e),i),bind:async n=>{if(n.intent.kind===`exact-owner`&&!r(n.intent.owner,a))throw new e(`UNSUPPORTED_OPERATION`,`${i.label} app-log owner identity does not match`);if(n.device.platform!==i.family)throw new e(`UNSUPPORTED_PLATFORM`,`${i.label} app-log owner cannot bind ${n.device.platform}`);let o=await t.processTransports.resolve(n.device);return De(t,n.device,n.scope.signal,o,a,i)},shutdown:async()=>void 0})}function De(e,t,n,r,i,a){let o=m({codec:a.codec,reattach:async(t,n)=>M(e,n.sessionId,t)?await E(e,t.pidPath):{status:`unreattachable`,reason:`descriptor-invalid`,message:`${a.label} app-log descriptor paths do not match the owning session`},cleanup:async(t,n)=>M(e,n.sessionId,t)?await D(e,t.pidPath):{status:`cleanup-pending`,reason:`ownership-fence-lost`,message:`${a.label} app-log descriptor paths do not match the owning session`}}),s=Object.freeze({appLogInspect:async()=>({backend:a.backend}),appLogDoctor:async({appBundleId:r})=>await a.doctor({host:e,device:t,signal:n},r),...r.start?{appLogStart:async o=>await Oe(e,t,n,r,i,o,a)}:{},...o});return Object.freeze({device:t,owner:i,facts:F(t,r,a),operations:s,[Symbol.asyncDispose]:async()=>void 0})}function F(e,t,n){let r=t.start?P:{available:!1,reason:`owner-capability-missing`,hint:n.startUnavailableHint};return Object.freeze({device:{family:n.family,kind:e.kind,...e.target===void 0?{}:{target:e.target},providerMode:t.mode},operations:{appLogInspect:P,appLogDoctor:P,appLogStart:r,appLogReattach:P,appLogCleanup:P}})}async function Oe(t,n,r,i,a,o,s){if(!i.start)throw new e(`UNSUPPORTED_OPERATION`,s.startUnavailableHint);N(t,o);let c=t.artifacts.resolveSession(o.sessionId),l={host:t,device:n,signal:r,input:o,artifacts:c,transport:i};s.validateStart?.(l),r.throwIfAborted();let u=await s.process(l);r.throwIfAborted();let d=await Ce({host:t,backend:s.backend,outputPath:c.outputPath,pidPath:c.pidPath,processStart:i.start,setupSignal:r,resolvePid:u.resolvePid,command:u.command,cleanupFailureMessage:s.cleanupFailureMessage}),f=s.descriptor({artifacts:c,transport:i});return p(d,s.envelope({input:o,device:n,owner:a,descriptor:f}))}function I(e){for(let t of[/\bstatus(?:Code)?["'=: ]+([1-5]\d{2})\b/i,/\bresponse(?:\s+code)?["'=: ]+([1-5]\d{2})\b/i,/\bHTTP\/[0-9.]+\s+([1-5]\d{2})\b/i]){let n=t.exec(e);if(!n)continue;let r=Number.parseInt(n[1]??``,10);if(Number.isInteger(r))return r}return null}function L(e){return/\b\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z)?\b/.exec(e)?.[0]??/\b\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+\b/.exec(e)?.[0]}function ke(e){let t=e.indexOf(`{`),n=e.lastIndexOf(`}`);if(t<0||n<=t)return null;try{let r=JSON.parse(e.slice(t,n+1));return r&&typeof r==`object`&&!Array.isArray(r)?r:null}catch{return null}}function R(e,t){for(let n of t){let t=e?.[n];if(typeof t==`string`&&t.trim())return t.trim()}}function Ae(e,t){for(let n of t){let t=e?.[n];if(typeof t==`number`&&Number.isInteger(t))return t;if(typeof t==`string`&&/^\d{3}$/.test(t.trim()))return Number.parseInt(t,10)}return null}function je(e,t){let n=t?.headers??t?.requestHeaders??t?.responseHeaders;return n===void 0?/\bheaders?["'=: ]+(\{.*\})/i.exec(e)?.[1]?.trim():B(n)}function z(e,t,n){for(let r of n){if(t?.[r]!==void 0)return B(t[r]);let n=r.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`),i=RegExp(`\\b${n}["'=: ]+(.+)$`,`i`).exec(e);if(i?.[1])return i[1].trim()}}function B(e){if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}function Me(e,t,n){let r=U(t,n,5),i=e.packetId??r.map(V).find(e=>typeof e==`string`&&e.length>0);i&&(e.packetId=i);let a=i?U(t,n,12).filter(e=>V(e)===i):r;e.timestamp??=a.map(L).find(e=>typeof e==`string`&&e.length>0),e.status??=a.map(I).find(e=>typeof e==`number`)??void 0,e.durationMs??=a.map(H).find(e=>typeof e==`number`)??void 0}function V(e){return/\bpacket id (\d+)\b/i.exec(e)?.[1]??null}function H(e){let t=/\b(?:duration|elapsed request\/response time, ms)[:= ]+(\d+)\b/i.exec(e);return t?Number.parseInt(t[1]??``,10):null}function U(e,t,n){return e.slice(Math.max(0,t-n),Math.min(e.length,t+n+1)).map(e=>e.trim()).filter(Boolean)}const Ne=RegExp(`\\b(${[`GET`,`POST`,`PUT`,`PATCH`,`DELETE`,`HEAD`,`OPTIONS`].join(`|`)})\\b\\s+https?:\\/\\/`,`i`),Pe=/https?:\/\/[^\s"'<>\])]+/i,Fe=/\[C(\d+)\b[^\]]*?\burl:\s*([^\s,\]]+)/,W=/\bsummary for task (?:success|failure)\s*\{([^}]*)\}/,Ie=/\bTask\s+<([0-9A-Fa-f-]+)>\.<(\d+)>/,G=/(?:^|\s)(\S+)\[(\d+):[0-9a-f]+\]/,Le=/\burl:\s*(https?:\/\/[^\s,\]]+)/i;function Re(e,t,n=e.dump.limits.maxEntries){let r=[...e.dump.entries],i=new Set(r.map(K));for(let e of t.dump.entries){let t=K(e);if(!i.has(t)&&(i.add(t),r.push(e),r.length>=n))break}let a=new Set([...e.dump.entries,...t.dump.entries].map(e=>e.packetId).filter(e=>e!==void 0)),o=[...new Set([...e.unnamedRequestIds,...t.unnamedRequestIds])].filter(e=>!a.has(e));return Object.freeze({dump:Object.freeze({...e.dump,matchedLines:r.length,entries:Object.freeze(r),unnamedRequests:o.length}),unnamedRequestIds:Object.freeze(o)})}function ze(e,t){let n=J(t.maxEntries,25,1,200),r=t.include??`summary`,i=J(t.maxPayloadChars,2048,64,16384),a=J(t.maxScanLines,4e3,100,2e4),o=Ve(t.lineNumberOffset);if(!t.exists)return Object.freeze({dump:Object.freeze({path:t.path,exists:!1,scannedLines:0,matchedLines:0,entries:Object.freeze([]),unnamedRequests:0,include:r,limits:Object.freeze({maxEntries:n,maxPayloadChars:i,maxScanLines:a})}),unnamedRequestIds:Object.freeze([])});let s=e.split(`
2
- `),c=Math.max(0,s.length-a),l=s.slice(c),u=[],d=Be(t.backend)?Qe(l):void 0,f=d?et(l,d):[];for(let e=l.length-1;e>=0&&u.length<n;--e){if(!l[e]?.trim())continue;let n=He(l,e,o+c+e+1,t.backend,r,i,d);n&&u.push(n)}return Object.freeze({dump:Object.freeze({path:t.path,exists:!0,scannedLines:l.length,matchedLines:u.length,entries:Object.freeze(u),unnamedRequests:f.length,include:r,limits:Object.freeze({maxEntries:n,maxPayloadChars:i,maxScanLines:a})}),unnamedRequestIds:Object.freeze(f)})}function Be(e){return e===`ios-simulator`||e===`ios-device`||e===`macos`}function Ve(e){if(e===void 0)return 0;if(!Number.isInteger(e)||e<0)throw TypeError(`Network line number offset must be a non-negative integer`);return e}function He(e,t,n,r,i,a,o){let s=e[t]?.trim();if(!s)return null;let c=ke(s),l=Ue(s,c)??(o?$e(s,o,t):null);if(!l)return null;let u=Je(s,n,l,a);return r===`android`&&Me(u,e,t),Ye(u,s,c,i,a),u}function Ue(e,t){let n=We(e,t),r=Ge(e,t);if(!r)return null;let i=Ke(e,t);return qe(e,n.explicit,i)?{method:n.value,url:r,status:i}:null}function We(e,t){let n=R(t,[`method`,`httpMethod`]),r=/\bmethod["'=: ]+([A-Z]+)\b/i.exec(e)?.[1],i=Ne.exec(e)?.[1],a=n??r??i;return{value:a?.toUpperCase(),explicit:!!a}}function Ge(e,t){return R(t,[`url`,`requestUrl`])||(Le.exec(e)?.[1]??Pe.exec(e)?.[0])}function Ke(e,t){return Ae(t,[`status`,`statusCode`,`responseCode`])??I(e)??void 0}function qe(e,t,n){return t||n!==void 0||/\bURL["'=: ]+https?:\/\//i.test(e)||/\bheaders?["'=: ]+/i.test(e)||/\b(?:requestBody|responseBody|payload|request|response)["'=: ]+/i.test(e)}function Je(e,t,n,r){return{...n,timestamp:L(e),packetId:n.packetId??V(e)??void 0,durationMs:n.durationMs??H(e)??void 0,raw:q(e,r),line:t}}function Ye(e,t,n,r,i){if(Xe(r)){let r=je(t,n);r&&(e.headers=q(r,i))}if(Ze(r)){let r=z(t,n,[`requestBody`,`body`,`payload`,`request`]),a=z(t,n,[`responseBody`,`response`]);r&&(e.requestBody=q(r,i)),a&&(e.responseBody=q(a,i))}}function Xe(e){return e===`headers`||e===`all`}function Ze(e){return e===`body`||e===`all`}function K(e){return`${e.timestamp??``}|${e.method??``}|${e.url}|${e.status??``}|${e.raw}`}function q(e,t){return e.length<=t?e:`${e.slice(0,t)}...<truncated>`}function J(e,t,n,r){return e===void 0||!Number.isInteger(e)?t:Math.max(n,Math.min(r,e))}function Qe(e){let t=new Map;for(let[n,r]of e.entries()){let e=Fe.exec(r);if(!e)continue;let i=Y(r,e[1]),a=i===void 0?void 0:nt(e[2]);if(!a||i===void 0)continue;let o=t.get(i);o?o.push({lineIndex:n,origin:a}):t.set(i,[{lineIndex:n,origin:a}])}return t}function Y(e,t){let n=G.exec(e);if(n)return`${n[1]}[${n[2]}]#${t}`}function $e(e,t,n){let r=W.exec(e);if(!r)return null;let i=Q(r[1]);if(i.get(`reused`)!==`1`)return null;let a=i.get(`connection`),o=a===void 0?void 0:Y(e,a),s=o===void 0?void 0:Z(t,o,n);return s?{url:s,status:rt(i.get(`response_status`)),durationMs:$(i.get(`transaction_duration_ms`)),pathUnavailable:!0,packetId:X(e)}:null}function et(e,t){let n=new Set;for(let[r,i]of e.entries()){let e=tt(i,t,r);e!==void 0&&n.add(e)}return[...n]}function tt(e,t,n){if(!e.includes(`summary for task`))return;let r=W.exec(e);if(!r)return;let i=Q(r[1]);if(i.get(`reused`)!==`1`)return;let a=i.get(`connection`),o=a===void 0?void 0:Y(e,a);if(!(o!==void 0&&Z(t,o,n)))return X(e)}function X(e){let t=Ie.exec(e);if(!t)return;let n=G.exec(e);return`${n?`${n[1]}[${n[2]}]`:``}#${t[1]}.${t[2]}`}function Z(e,t,n){let r=e.get(t);if(!r)return;let i;for(let e of r){if(e.lineIndex>n)break;i=e.origin}return i}function Q(e){let t=new Map;for(let n of e.split(`,`)){let e=n.indexOf(`=`);e!==-1&&t.set(n.slice(0,e).trim(),n.slice(e+1).trim())}return t}function nt(e){try{return new URL(e).origin}catch{return}}function rt(e){let t=$(e);return t!==void 0&&t>0?t:void 0}function $(e){if(e===void 0)return;let t=Number(e);return Number.isFinite(t)?t:void 0}export{M as a,E as c,m as d,p as f,Te as i,le as l,f as m,ze as n,N as o,g as p,Ee as r,D as s,Re as t,v as u};