agent-device 0.21.24 → 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 (379) hide show
  1. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.25.apk +0 -0
  2. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.25.apk.sha256 +1 -0
  3. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.24.manifest.json → agent-device-android-ime-helper-0.21.25.manifest.json} +4 -4
  4. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.apk +0 -0
  5. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.apk.sha256 +1 -0
  6. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.manifest.json +16 -0
  7. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +159 -4
  8. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerHttpRequestFraming.swift +139 -0
  9. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerListenerPeer.swift +41 -0
  10. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerListenerToken.swift +25 -0
  11. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Environment.swift +18 -11
  12. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +25 -1
  13. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +0 -3
  14. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +1 -3
  15. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryConfirmation.swift +59 -26
  16. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +47 -103
  17. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +142 -54
  18. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TypeExecution.swift +4 -1
  19. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +21 -19
  20. package/dist/src/absence-observation-errors.js +1 -0
  21. package/dist/src/adapter.js +1 -1
  22. package/dist/src/adb-executor.js +2 -2
  23. package/dist/src/adb-failure.js +2 -2
  24. package/dist/src/agent-browser-lifecycle.js +1 -1
  25. package/dist/src/agent-browser-process-record.js +1 -1
  26. package/dist/src/agent-browser-provider.js +1 -1
  27. package/dist/src/agent-browser-tool.js +1 -1
  28. package/dist/src/agent-device-client.js +2 -2
  29. package/dist/src/android-adb.js +1 -1
  30. package/dist/src/android-input-ownership.js +1 -1
  31. package/dist/src/android-system-surface-disclosure.js +1 -0
  32. package/dist/src/android-text-entry.js +1 -0
  33. package/dist/src/android.js +1 -1
  34. package/dist/src/app-backend.js +1 -1
  35. package/dist/src/app-helpers.js +1 -1
  36. package/dist/src/app-launch.js +1 -1
  37. package/dist/src/app-lifecycle.js +4 -3
  38. package/dist/src/app-lifecycle2.js +2 -2
  39. package/dist/src/app-log-files.js +1 -1
  40. package/dist/src/app-log-reconnect.js +1 -1
  41. package/dist/src/app-log-runtime2.js +3 -3
  42. package/dist/src/app-resolution-facade.js +1 -1
  43. package/dist/src/app-resolution.js +2 -2
  44. package/dist/src/apple-runner-platform.js +1 -1
  45. package/dist/src/artifact-download.js +1 -1
  46. package/dist/src/auth.js +1 -1
  47. package/dist/src/aws-device-farm-connection.js +1 -1
  48. package/dist/src/back-mode.js +1 -1
  49. package/dist/src/boot-diagnostics.js +1 -1
  50. package/dist/src/browserstack-connection.js +1 -1
  51. package/dist/src/capture-disclosure.js +1 -0
  52. package/dist/src/cli-config.js +1 -1
  53. package/dist/src/cli-help.js +17 -14
  54. package/dist/src/cli-output.js +1 -1
  55. package/dist/src/cli-runner.js +3 -1
  56. package/dist/src/cli.js +3 -3
  57. package/dist/src/client-companion-tunnel.js +1 -1
  58. package/dist/src/client-metro.js +1 -1
  59. package/dist/src/client-types.d.ts +8 -2
  60. package/dist/src/code-signature-cache.js +1 -1
  61. package/dist/src/code-signature.js +1 -1
  62. package/dist/src/command-metadata.js +73 -1
  63. package/dist/src/command-policy.js +1 -0
  64. package/dist/src/command-schema.js +3 -3
  65. package/dist/src/command-surface.js +1 -1
  66. package/dist/src/command-tools.js +2 -2
  67. package/dist/src/connection-runtime.js +1 -1
  68. package/dist/src/connection-verification.js +1 -1
  69. package/dist/src/connection.js +3 -3
  70. package/dist/src/contracts.js +1 -1
  71. package/dist/src/daemon-client-lease-beat.js +1 -1
  72. package/dist/src/daemon-client-lifecycle.js +1 -1
  73. package/dist/src/daemon-client-liveness-probe.js +1 -1
  74. package/dist/src/daemon-policy-file.js +1 -1
  75. package/dist/src/daemon-registration-owner.js +1 -1
  76. package/dist/src/daemon-registration.js +1 -1
  77. package/dist/src/daemon-resolution.js +3 -1
  78. package/dist/src/debug-symbols-facade.js +1 -1
  79. package/dist/src/device-claim-inspection.js +1 -1
  80. package/dist/src/device-input-state.d.ts +5 -3
  81. package/dist/src/device-inventory-context.js +1 -1
  82. package/dist/src/device-readiness-runtime.js +1 -1
  83. package/dist/src/device-release.js +1 -1
  84. package/dist/src/device-shell.js +1 -1
  85. package/dist/src/device.js +3 -1
  86. package/dist/src/devicectl.js +1 -1
  87. package/dist/src/diagnostics.js +1 -1
  88. package/dist/src/doctor-facade.js +1 -1
  89. package/dist/src/durable-capture-resource.js +1 -1
  90. package/dist/src/durable-resource.js +1 -1
  91. package/dist/src/engine-eval-script.js +1 -1
  92. package/dist/src/error.js +1 -1
  93. package/dist/src/exec.js +1 -1
  94. package/dist/src/expo-dev-client-launch.js +1 -0
  95. package/dist/src/file.js +3 -1
  96. package/dist/src/find.js +1 -1
  97. package/dist/src/finders.js +1 -1
  98. package/dist/src/generic-settle.js +1 -1
  99. package/dist/src/generic.js +1 -1
  100. package/dist/src/gesture-plan.js +1 -1
  101. package/dist/src/gesture-runtime.js +1 -1
  102. package/dist/src/harmonyos.js +1 -1
  103. package/dist/src/hdc.js +1 -1
  104. package/dist/src/helper.js +2 -2
  105. package/dist/src/human-control.js +1 -1
  106. package/dist/src/ime-rebind.js +1 -1
  107. package/dist/src/ime-state.js +1 -1
  108. package/dist/src/index.d.ts +1 -1
  109. package/dist/src/index.js +1 -1
  110. package/dist/src/input-actions.js +1 -1
  111. package/dist/src/input-actions2.js +2 -2
  112. package/dist/src/install-source-network-transport.js +1 -1
  113. package/dist/src/install-source2.js +1 -1
  114. package/dist/src/interaction-error.js +1 -0
  115. package/dist/src/interaction-positionals.js +1 -1
  116. package/dist/src/interaction.js +1 -1
  117. package/dist/src/interaction2.js +1 -1
  118. package/dist/src/interactor-operation-catalog.js +1 -1
  119. package/dist/src/interactor.js +5 -5
  120. package/dist/src/interactor2.js +1 -1
  121. package/dist/src/internal/bin.js +1 -1
  122. package/dist/src/internal/daemon.js +5 -1
  123. package/dist/src/internal/png-worker.js +1 -1
  124. package/dist/src/inventory.js +2 -2
  125. package/dist/src/inventory6.js +1 -1
  126. package/dist/src/io.d.ts +2 -2
  127. package/dist/src/ios-client.js +1 -1
  128. package/dist/src/ios-settings.js +1 -1
  129. package/dist/src/ios-snapshot-acquisition.js +1 -1
  130. package/dist/src/ios-snapshot-adapter.js +1 -1
  131. package/dist/src/ios-snapshot-engine.js +1 -1
  132. package/dist/src/ios-snapshot-runtime.js +1 -1
  133. package/dist/src/keyed-lock.js +1 -1
  134. package/dist/src/launch-confirmation.js +1 -1
  135. package/dist/src/lease.js +1 -1
  136. package/dist/src/limrun-runtime-dependencies.js +1 -1
  137. package/dist/src/limrun.d.ts +2 -10
  138. package/dist/src/limrun.js +1 -1
  139. package/dist/src/linux.js +1 -1
  140. package/dist/src/load.js +1 -1
  141. package/dist/src/local-interactor-operation-set.js +1 -1
  142. package/dist/src/log-stream.js +9 -9
  143. package/dist/src/mechanics.js +16 -16
  144. package/dist/src/metro.js +1 -1
  145. package/dist/src/metro2.js +1 -1
  146. package/dist/src/mobile-snapshot-semantics.js +1 -1
  147. package/dist/src/observability.js +1 -1
  148. package/dist/src/open-target-resolution.js +1 -1
  149. package/dist/src/output-path.js +1 -1
  150. package/dist/src/overlay.js +1 -3
  151. package/dist/src/perf-facade.js +1 -1
  152. package/dist/src/perf-runtime-operation-builder.js +1 -1
  153. package/dist/src/perf-runtime.js +1 -1
  154. package/dist/src/physical-device-control.js +1 -1
  155. package/dist/src/platform-request-scope.js +1 -1
  156. package/dist/src/platform-runtime-android-adb-host.js +1 -1
  157. package/dist/src/platform-runtime-app-log-android-transport.js +1 -1
  158. package/dist/src/platform-runtime-apple-resources.js +1 -0
  159. package/dist/src/platform-runtime-claim-recovery.js +1 -0
  160. package/dist/src/platform-runtime-daemon-services.js +1 -0
  161. package/dist/src/platform-runtime-host.js +1 -1
  162. package/dist/src/platform-runtime-network-web-transport.js +1 -1
  163. package/dist/src/platform-runtime-open-target.js +1 -1
  164. package/dist/src/platform-runtime-operation-host.js +4 -4
  165. package/dist/src/platform-runtime-runtime-hints.js +2 -2
  166. package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
  167. package/dist/src/platform-runtime-screen-recording-apple-runner-transport.js +1 -1
  168. package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
  169. package/dist/src/platform-runtime-screen-recording-harmony-host.js +1 -1
  170. package/dist/src/platform-runtime-screen-recording-web-host.js +1 -1
  171. package/dist/src/platform-runtime-unavailable.js +1 -1
  172. package/dist/src/platform-runtime.js +1 -1
  173. package/dist/src/platform-runtime2.js +1 -1
  174. package/dist/src/plugin.js +1 -1
  175. package/dist/src/png-crop-bytes.js +1 -1
  176. package/dist/src/png-resize.js +1 -0
  177. package/dist/src/png-worker-client.js +1 -1
  178. package/dist/src/png-worker-contract.js +1 -1
  179. package/dist/src/process-entry.js +1 -1
  180. package/dist/src/process.js +1 -1
  181. package/dist/src/provider-credential-fingerprint.js +1 -1
  182. package/dist/src/provider-device-admission.js +1 -1
  183. package/dist/src/provider-policy.js +1 -1
  184. package/dist/src/provider-webdriver.js +1 -1
  185. package/dist/src/proxy.js +2 -2
  186. package/dist/src/quality-warnings.js +1 -1
  187. package/dist/src/react-native-overlay2.js +3 -0
  188. package/dist/src/react-native.js +1 -1
  189. package/dist/src/record-runtime.js +1 -1
  190. package/dist/src/record-trace.js +1 -1
  191. package/dist/src/recording.js +2 -2
  192. package/dist/src/register-builtins.js +1 -1
  193. package/dist/src/remote-config-core.js +1 -1
  194. package/dist/src/replay-backend-registry.js +1 -0
  195. package/dist/src/replay-divergence.js +1 -1
  196. package/dist/src/replay-maestro-backend.js +117 -0
  197. package/dist/src/replay-script-selection.js +1 -0
  198. package/dist/src/replay.js +1 -3
  199. package/dist/src/replay2.js +1 -0
  200. package/dist/src/reporting.js +3 -3
  201. package/dist/src/request-cancel.js +1 -1
  202. package/dist/src/request-providers.js +1 -1
  203. package/dist/src/request-runtime-binding.js +1 -1
  204. package/dist/src/result-serialization.js +1 -1
  205. package/dist/src/retry.js +1 -1
  206. package/dist/src/runner-cache-retention.js +1 -1
  207. package/dist/src/runner-cache-trim.js +1 -1
  208. package/dist/src/runner-client.js +1 -1
  209. package/dist/src/runner-dev-tools-security.js +1 -1
  210. package/dist/src/runner-device-readiness.js +1 -1
  211. package/dist/src/runner-device-set.js +1 -1
  212. package/dist/src/runner-error-classification.js +3 -3
  213. package/dist/src/runner-exchange.js +1 -1
  214. package/dist/src/runner-lease.js +1 -1
  215. package/dist/src/runner-operations-facade.js +1 -1
  216. package/dist/src/runner-retention.js +1 -0
  217. package/dist/src/runner-start-budget.js +1 -1
  218. package/dist/src/runner-startup-transport.js +1 -0
  219. package/dist/src/runner-toolchain-probe.js +1 -1
  220. package/dist/src/runner.js +2 -1
  221. package/dist/src/runtime-command-surface.js +1 -0
  222. package/dist/src/runtime-deployment.js +1 -1
  223. package/dist/src/runtime-factory.js +1 -0
  224. package/dist/src/runtime-session.js +1 -0
  225. package/dist/src/runtime-transport-hints.js +1 -1
  226. package/dist/src/runtime.js +2 -1
  227. package/dist/src/runtime10.js +2 -1
  228. package/dist/src/runtime2.js +5 -2
  229. package/dist/src/runtime3.js +1 -5
  230. package/dist/src/runtime4.js +5 -1
  231. package/dist/src/runtime5.js +1 -5
  232. package/dist/src/runtime6.js +1 -1
  233. package/dist/src/runtime7.js +1 -1
  234. package/dist/src/runtime8.js +1 -1
  235. package/dist/src/runtime9.js +1 -1
  236. package/dist/src/screenshot-image.js +1 -1
  237. package/dist/src/screenshot-runtime.js +1 -0
  238. package/dist/src/screenshot3.js +5 -5
  239. package/dist/src/sdk-batch-runner.js +2 -2
  240. package/dist/src/sdk-batch.js +1 -1
  241. package/dist/src/sdk-contracts.js +2 -2
  242. package/dist/src/sdk-finders.js +1 -1
  243. package/dist/src/sdk-io.d.ts +4 -2
  244. package/dist/src/sdk-selectors.d.ts +4 -5
  245. package/dist/src/sdk-selectors.js +1 -1
  246. package/dist/src/selection.js +0 -0
  247. package/dist/src/selector-pipeline-policy.js +1 -1
  248. package/dist/src/selector-runtime.js +1 -1
  249. package/dist/src/selectors.js +1 -1
  250. package/dist/src/server.js +2 -2
  251. package/dist/src/session-allocation.js +1 -1
  252. package/dist/src/session-replay-runtime-failure-response.js +1 -0
  253. package/dist/src/session-runtime-admission.js +1 -0
  254. package/dist/src/session.js +1 -1
  255. package/dist/src/session2.js +5 -5
  256. package/dist/src/settings.js +1 -1
  257. package/dist/src/settings2.js +1 -1
  258. package/dist/src/simctl-settings.js +1 -1
  259. package/dist/src/simulator.js +1 -1
  260. package/dist/src/snapshot-chrome.js +1 -0
  261. package/dist/src/snapshot-desktop-projection.js +1 -1
  262. package/dist/src/snapshot-evidence.js +1 -0
  263. package/dist/src/snapshot-node-lookup.js +1 -0
  264. package/dist/src/snapshot-occlusion.js +1 -0
  265. package/dist/src/snapshot-quality-verdict.js +1 -0
  266. package/dist/src/snapshot-runtime-binding.js +1 -1
  267. package/dist/src/snapshot-runtime.js +1 -1
  268. package/dist/src/snapshot-state.js +1 -1
  269. package/dist/src/snapshot.js +1 -1
  270. package/dist/src/snapshot2.js +1 -1
  271. package/dist/src/snapshot3.js +1 -1
  272. package/dist/src/src.js +5 -1
  273. package/dist/src/src2.js +1 -1
  274. package/dist/src/src3.js +2 -1
  275. package/dist/src/store.js +1 -1
  276. package/dist/src/surface-snapshot2.js +1 -1
  277. package/dist/src/target-evidence-tree.js +1 -0
  278. package/dist/src/target-evidence.js +1 -1
  279. package/dist/src/text-entry-focus.js +1 -1
  280. package/dist/src/tool-provider2.js +1 -1
  281. package/dist/src/touch-runtime.js +1 -1
  282. package/dist/src/touch-runtime2.js +1 -1
  283. package/dist/src/tree.js +1 -1
  284. package/dist/src/tv-remote.js +1 -1
  285. package/dist/src/type-text-runtime.js +1 -1
  286. package/dist/src/undici.js +8 -8
  287. package/dist/src/update-check.js +1 -1
  288. package/dist/src/vars.js +2 -0
  289. package/dist/src/version.js +1 -1
  290. package/dist/src/video.js +2 -2
  291. package/dist/src/wait.js +1 -0
  292. package/dist/src/web.js +1 -1
  293. package/dist/src/web2.js +1 -1
  294. package/package.json +9 -11
  295. package/server.json +2 -2
  296. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.24.apk +0 -0
  297. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.24.apk.sha256 +0 -1
  298. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.24.apk +0 -0
  299. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.24.apk.sha256 +0 -1
  300. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.24.manifest.json +0 -16
  301. package/dist/src/adb-transport.js +0 -1
  302. package/dist/src/alert-runtime.js +0 -1
  303. package/dist/src/app-deployment-resolution.js +0 -2
  304. package/dist/src/app-inventory-contract.js +0 -1
  305. package/dist/src/app-log-session-resource.js +0 -1
  306. package/dist/src/application-lifecycle-runtime.js +0 -1
  307. package/dist/src/auth-session.js +0 -1
  308. package/dist/src/browserstack-device-features.js +0 -1
  309. package/dist/src/browserstack.js +0 -1
  310. package/dist/src/cache.js +0 -1
  311. package/dist/src/capture.js +0 -1
  312. package/dist/src/catalog.js +0 -1
  313. package/dist/src/click-button.js +0 -1
  314. package/dist/src/client-metro-companion.js +0 -1
  315. package/dist/src/client-options.js +0 -3
  316. package/dist/src/daemon-client-transport.js +0 -1
  317. package/dist/src/daemon-http.js +0 -1
  318. package/dist/src/device-rotation.js +0 -1
  319. package/dist/src/device-session.js +0 -3
  320. package/dist/src/device2.js +0 -1
  321. package/dist/src/device3.js +0 -3
  322. package/dist/src/dispatch-resolve.js +0 -4
  323. package/dist/src/format.js +0 -2
  324. package/dist/src/gesture-plan-types.js +0 -1
  325. package/dist/src/host.js +0 -1
  326. package/dist/src/ime-settings-record.js +0 -1
  327. package/dist/src/interaction-ref-policy.js +0 -1
  328. package/dist/src/interactor-operation-binding.js +0 -1
  329. package/dist/src/keyboard-actions.js +0 -1
  330. package/dist/src/lease-context.js +0 -1
  331. package/dist/src/lease-registry-scope.js +0 -1
  332. package/dist/src/lease-scope.js +0 -1
  333. package/dist/src/managed-device-scope.js +0 -1
  334. package/dist/src/manifest.js +0 -1
  335. package/dist/src/observe-until.js +0 -1
  336. package/dist/src/output-common.js +0 -5
  337. package/dist/src/owner-identity.js +0 -3
  338. package/dist/src/path-resolution.js +0 -1
  339. package/dist/src/perf-runtime-plan.js +0 -1
  340. package/dist/src/platform-runtime-app-log-process.js +0 -1
  341. package/dist/src/platform-runtime-managed-owner.js +0 -1
  342. package/dist/src/platform-runtime-screen-recording-process-host.js +0 -1
  343. package/dist/src/png.js +0 -1
  344. package/dist/src/provider-session-ownership.js +0 -2
  345. package/dist/src/providers.js +0 -1
  346. package/dist/src/registry.js +0 -68
  347. package/dist/src/remote-connection-state.js +0 -1
  348. package/dist/src/request-admission.js +0 -1
  349. package/dist/src/request-cancellation.js +0 -1
  350. package/dist/src/request-progress-protocol.js +0 -1
  351. package/dist/src/runner-cache-metadata.js +0 -2
  352. package/dist/src/runner-disposal.js +0 -1
  353. package/dist/src/runner-session-types.js +0 -1
  354. package/dist/src/runtime-admission.js +0 -1
  355. package/dist/src/runtime11.js +0 -2
  356. package/dist/src/screen-recording-resource-recovery.js +0 -1
  357. package/dist/src/screenshot-result.js +0 -1
  358. package/dist/src/script.js +0 -1
  359. package/dist/src/scroll-command.js +0 -1
  360. package/dist/src/scroll-gesture.js +0 -1
  361. package/dist/src/scroll-indicator.js +0 -1
  362. package/dist/src/session-artifact-paths.js +0 -1
  363. package/dist/src/session-paths.js +0 -1
  364. package/dist/src/session-repair-tombstone.js +0 -1
  365. package/dist/src/session-snapshot.js +0 -1
  366. package/dist/src/snapshot-private-evidence.js +0 -1
  367. package/dist/src/snapshot4.js +0 -1
  368. package/dist/src/src4.js +0 -1
  369. package/dist/src/src5.js +0 -1
  370. package/dist/src/src6.js +0 -1
  371. package/dist/src/src7.js +0 -2
  372. package/dist/src/src8.js +0 -115
  373. package/dist/src/string-enum.js +0 -1
  374. package/dist/src/success-text.js +0 -1
  375. package/dist/src/transport.js +0 -3
  376. package/dist/src/ttl-memo.js +0 -1
  377. package/dist/src/verified-file.js +0 -1
  378. package/dist/src/window-state.js +0 -1
  379. /package/dist/src/{doctor-output.js → doctor-lines.js} +0 -0
@@ -1 +0,0 @@
1
- import{I as e,P as t,Y as n,at as r,rt as i}from"./sdk-contracts.js";import{n as a,r as o}from"./diagnostics.js";import"./diagnostics2.js";import{d as s,m as c,o as l}from"./lease-scope.js";import{T as u}from"./sdk-batch.js";import{n as d}from"./catalog.js";import{r as f}from"./owner-identity.js";import{l as p}from"./exec.js";import{d as m,f as h,h as g,l as _,m as v,n as y,s as ee}from"./daemon-http.js";import{r as b,t as x}from"./output-path.js";import"./command.js";import{i as te,n as S,t as C}from"./transport.js";import{n as ne,o as re,t as ie}from"./request-progress-protocol.js";import{t as ae}from"./session-artifact-paths.js";import"./process.js";import{a as oe}from"./version.js";import{t as se}from"./daemon-resolution.js";import{createHash as ce,randomUUID as le}from"node:crypto";import w from"node:fs";import ue from"node:os";import T from"node:path";import{Transform as de,Writable as fe}from"node:stream";import{pipeline as pe}from"node:stream/promises";import me from"node:net";async function he(e,t){let n=w.statSync(e),r=T.basename(e),i=n.isDirectory(),a=ve(t)??_e(e,n),o=[];try{let t=i?await ge(e,o):e,n=w.statSync(t);return{payloadPath:t,fileName:r,artifactType:i?`app-bundle`:`file`,platform:a,contentType:i?`application/gzip`:`application/octet-stream`,sha256:await ye(t),sizeBytes:n.size,cleanup:()=>E(o)}}catch(e){throw E(o),e}}async function ge(e,t){let n=w.mkdtempSync(T.join(ue.tmpdir(),`agent-device-upload-${le()}-`));t.push(n);let r=T.join(n,`${T.basename(e)}.tar.gz`);return await p(`tar`,[`czf`,r,`-C`,T.dirname(e),T.basename(e)],{env:{...process.env,COPYFILE_DISABLE:`1`}}),r}function _e(e,t){let n=e.toLowerCase();if(t.isDirectory()&&n.endsWith(`.app`)||n.endsWith(`.ipa`))return`ios`;if(n.endsWith(`.apk`)||n.endsWith(`.aab`))return`android`}function ve(e){return e===`ios`||e===`android`?e:void 0}function E(e){for(let t of e)w.rmSync(t,{recursive:!0,force:!0})}async function ye(e){let n=ce(`sha256`),r=new fe({write(e,t,r){n.update(e),r()}});return await pe(w.createReadStream(e),r).catch(e=>{throw new t(`COMMAND_FAILED`,`Failed to read local artifact`,{},e instanceof Error?e:void 0)}),n.digest(`hex`)}function be(e){let{stage:t,fileName:n,startOffset:r,totalBytes:i,onProgress:a}=e,o=r,s=Ce(i),c=Math.min(i,r+s);return new de({transform(e,r,l){o=Math.min(i,o+e.byteLength),o>=c&&(a?.({type:`progress`,stage:t,fileName:n,transferredBytes:o,totalBytes:i}),c=Math.min(i,o+s)),l(null,e)}})}function xe(){if(!(process.stderr.isTTY!==!0||process.env.CI))return e=>{process.stderr.write(`${Se(e)}\n`)}}function Se(e){switch(e.type){case`start`:return`Uploading ${e.fileName} (${O(e.totalBytes)}) via ${D(e.stage)} upload`;case`resume`:return`Resuming ${e.fileName} at ${O(e.transferredBytes)} of ${O(e.totalBytes)}`;case`progress`:return`Uploaded ${O(e.transferredBytes)} of ${O(e.totalBytes)} (${we(e.transferredBytes,e.totalBytes)})`;case`fallback`:return`Direct upload did not complete; retrying ${e.fileName} with ${D(e.to)} upload`}}function Ce(e){return Math.max(8388608,Math.ceil(e*.05))}function D(e){return e===`direct`?`direct`:`legacy`}function we(e,t){return t<=0?`100%`:`${Math.min(100,Math.floor(e/t*100))}%`}function O(e){if(e<1024)return`${e} B`;let t=e/1024;if(t<1024)return`${t.toFixed(1)} KiB`;let n=t/1024;return n<1024?`${n.toFixed(1)} MiB`:`${(n/1024).toFixed(1)} GiB`}const k=3e5,A=`uploadStreamRetryable`;async function j(e){return await M({...e,url:e.url,redirectCount:0,startOffset:0})}function Te(e){return e instanceof t&&e.details?.[A]===!0}async function M(e){let n=await S(e.url.protocol),r=w.statSync(e.payloadPath).size,i=De(e.headers,e.startOffset,r);return Ee(e.progress,e.startOffset,r),await new Promise((a,o)=>{let s=!1,c=n.request({protocol:e.url.protocol,host:e.url.hostname,port:e.url.port,method:e.method,path:e.url.pathname+e.url.search,headers:i,...e.signal?{signal:e.signal}:{}},n=>{s=!0,te(n).then(i=>{clearTimeout(l);let s=n.statusCode??500,c=n.headers.location;if(c&&Oe(s)){if(e.redirectCount>=5){o(new t(`COMMAND_FAILED`,`Artifact upload exceeded redirect limit`,{maxRedirects:5,url:e.url.toString()}));return}let n=new URL(c,e.url);M({...e,url:n,redirectCount:e.redirectCount+1}).then(a,o);return}let u=ke(s)?Ae(n.headers,r):void 0;if(u!==void 0){if(u>=r){a({statusCode:200,statusMessage:`Upload already complete`,body:``});return}if(u<=e.startOffset){o(new t(`COMMAND_FAILED`,`Artifact upload resume did not advance`,{offset:u,previousOffset:e.startOffset,url:e.url.toString()}));return}M({...e,startOffset:u}).then(a,o);return}a({statusCode:s,statusMessage:n.statusMessage,body:i})}).catch(o)}),l=setTimeout(()=>{c.destroy(),o(new t(`COMMAND_FAILED`,e.timeoutMessage,{timeoutMs:k,...e.timeoutHint?{hint:e.timeoutHint}:{},...N(e)}))},k);c.on(`error`,n=>{if(!s){if(clearTimeout(l),e.signal?.aborted){o(e.signal.reason);return}o(new t(`COMMAND_FAILED`,e.errorMessage,{...e.errorHint?{hint:e.errorHint}:{},...N(e)},n))}}),c.on(`close`,()=>clearTimeout(l)),pe(w.createReadStream(e.payloadPath,{start:e.startOffset}),be({stage:e.progress?.stage??`legacy`,fileName:e.progress?.fileName??T.basename(e.payloadPath),startOffset:e.startOffset,totalBytes:r,onProgress:e.progress?.onProgress}),c).catch(e=>{if(s)return;c.destroy();let n=e instanceof Error?e:Error(String(e));o(new t(`COMMAND_FAILED`,`Failed to read local artifact`,{},n))})})}function N(e){return e.retryable===!0?{[A]:!0}:{}}function Ee(e,t,n){e?.onProgress?.({type:t>0?`resume`:`start`,stage:e.stage,fileName:e.fileName,transferredBytes:t,totalBytes:n})}function De(e,t,n){return t<=0?e:{...e,"content-length":Math.max(n-t,0),"content-range":`bytes ${t}-${n-1}/${n}`}}function Oe(e){return[301,302,303,307,308].includes(e)}function ke(e){return e===308}function Ae(e,t){let n=je(e[`x-upload-offset`]??e[`upload-offset`]);if(n!==void 0)return Math.min(n,t);let r=P(e.range)?.match(/^bytes=0-(\d+)$/);if(!r)return;let i=Number(r[1]);if(!(!Number.isSafeInteger(i)||i<0))return Math.min(i+1,t)}function je(e){let t=P(e);if(t===void 0)return;let n=Number(t);return Number.isSafeInteger(n)&&n>=0?n:void 0}function P(e){return Array.isArray(e)?e[0]:e}const F=3e4;async function I(e){let t=await he(e.localPath,e.platform),n=e.baseUrl.endsWith(`/`)?e.baseUrl:`${e.baseUrl}/`,r=le();try{let i=await R({normalizedBase:n,token:e.token,artifact:t,uploadAttemptId:r,signal:e.signal});return i?.kind===`cache-hit`?i.uploadId:i?.kind===`direct-upload`?await Me({normalizedBase:n,token:e.token,artifact:t,preflight:i,uploadAttemptId:r,onProgress:e.onProgress,signal:e.signal})||(e.onProgress?.({type:`fallback`,from:`direct`,to:`legacy`,fileName:t.fileName}),await L({normalizedBase:n,token:e.token,artifact:t,onProgress:e.onProgress,signal:e.signal})):await L({normalizedBase:n,token:e.token,artifact:t,onProgress:e.onProgress,signal:e.signal})}finally{t.cleanup()}}async function Me(e){let t=async t=>(await Re(e.artifact,t,e.onProgress,e.signal),await ze({normalizedBase:e.normalizedBase,token:e.token,uploadId:t.uploadId,signal:e.signal}));try{return await t(e.preflight)}catch(n){if(e.signal?.aborted)throw n;return Pe(n)?await Ne(e,t):void 0}}async function Ne(e,t){let n=await R({normalizedBase:e.normalizedBase,token:e.token,artifact:e.artifact,uploadAttemptId:e.uploadAttemptId,signal:e.signal});if(n?.kind===`cache-hit`)return n.uploadId;if(n?.kind===`direct-upload`)try{return await t(n)}catch{return}}function Pe(e){return e instanceof t?Te(e):!0}async function L(e){let{normalizedBase:n,token:r,artifact:i}=e,a=new URL(`upload`,n),o={"content-type":i.contentType,"x-artifact-type":i.artifactType,"x-artifact-filename":i.fileName,"x-artifact-hash":i.sha256,"x-artifact-hash-algorithm":`sha256`,"transfer-encoding":`chunked`};Object.assign(o,_(r));let s=await j({url:a,method:`POST`,headers:o,payloadPath:i.payloadPath,timeoutMessage:`Artifact upload timed out`,timeoutHint:`The upload to the remote daemon exceeded the 5-minute timeout.`,errorMessage:`Failed to upload artifact to remote daemon`,errorHint:`Verify the remote daemon is reachable and supports artifact uploads.`,signal:e.signal,progress:{stage:`legacy`,fileName:i.fileName,onProgress:e.onProgress}});try{let e=JSON.parse(s.body);if(!e.ok||!e.uploadId)throw new t(`COMMAND_FAILED`,`Upload failed: ${s.body}`);return e.uploadId}catch(e){throw e instanceof t?e:new t(`COMMAND_FAILED`,`Invalid upload response: ${s.body}`)}}async function R(e){let t=new URL(`upload/preflight`,e.normalizedBase),n={"content-type":`application/json`};Object.assign(n,_(e.token));let r=await fetch(t,{method:`POST`,headers:n,signal:Fe(e.signal,F),body:JSON.stringify({uploadAttemptId:e.uploadAttemptId,sha256:e.artifact.sha256,fileName:e.artifact.fileName,sizeBytes:e.artifact.sizeBytes,artifactType:e.artifact.artifactType,...e.artifact.platform?{platform:e.artifact.platform}:{},contentType:e.artifact.contentType})}).catch(t=>{if(e.signal?.aborted)throw t});if(r?.ok)return Ie(await r.json().catch(()=>void 0))}function Fe(e,t){let n=AbortSignal.timeout(t);return e?AbortSignal.any([e,n]):n}function Ie(e){if(!e||typeof e!=`object`)return;let t=e;if(t.ok!==!0||typeof t.uploadId!=`string`)return;if(t.cacheHit===!0)return{kind:`cache-hit`,uploadId:t.uploadId};let n=t.upload;if(!n||typeof n.url!=`string`)return;let r=n.headers??{};if(Le(r))return{kind:`direct-upload`,uploadId:t.uploadId,url:n.url,headers:r}}function Le(e){return!e||typeof e!=`object`||Array.isArray(e)?!1:Object.values(e).every(e=>typeof e==`string`)}async function Re(e,n,r,i){let a=await j({url:new URL(n.url),method:`PUT`,headers:n.headers,payloadPath:e.payloadPath,timeoutMessage:`Direct artifact upload timed out`,timeoutHint:`The direct upload ticket did not accept the artifact within the timeout.`,errorMessage:`Failed to upload artifact with direct upload ticket`,retryable:!0,signal:i,progress:{stage:`direct`,fileName:e.fileName,onProgress:r}});if(a.statusCode<200||a.statusCode>=300)throw new t(`COMMAND_FAILED`,`Direct artifact upload failed`,{statusCode:a.statusCode,statusMessage:a.statusMessage})}async function ze(e){let n=new URL(`upload/finalize`,e.normalizedBase),r={"content-type":`application/json`};Object.assign(r,_(e.token));let i=await fetch(n,{method:`POST`,headers:r,signal:Fe(e.signal,F),body:JSON.stringify({uploadId:e.uploadId})}).catch(n=>{throw e.signal?.aborted?n:new t(`COMMAND_FAILED`,`Failed to finalize direct artifact upload`,{},n)});if(!i.ok)throw new t(`COMMAND_FAILED`,`Direct artifact upload finalize failed`,{status:i.status,statusText:i.statusText});let a=await i.json().catch(()=>void 0);if(!a?.ok||!a.uploadId)throw new t(`COMMAND_FAILED`,`Invalid upload finalize response`);return a.uploadId}async function Be(e,t,n){let r=[...e.positionals??[]],i=e.flags?{...e.flags}:void 0,a=e.meta?.installSource,o={},s,c=xe();if(!at(t))return Ke({positionals:r,flags:i,installSource:a,uploadedArtifactId:s,clientArtifactPaths:o});Ve(e),i=Ue(e,r,i,o);let l=await qe(e,t,c,n);return l&&(a=l.installSource,s=l.uploadedArtifactId??s),e.command!==`install`&&e.command!==`reinstall`||(s=await He(e,t,r,c,n)??s),Ke({positionals:r,flags:i,installSource:a,uploadedArtifactId:s,clientArtifactPaths:o})}function Ve(e){if(e.flags?.saveScript!==void 0)throw new t(`INVALID_ARGS`,`--save-script is not supported against a remote daemon: the healed script would be written on the daemon host, not on this machine.`,{hint:`Run the script against a local daemon to capture a healed .ad, or re-run without --save-script.`,command:e.command})}async function He(e,t,n,r,i){let a=n.length===1?0:1,o=n[a];if(o===void 0)return;if(o.startsWith(`remote:`)){n[a]=o.slice(7);return}let s=Ge(o,e.meta?.cwd);if(s)return await I({localPath:s,baseUrl:t.baseUrl,token:t.token,platform:e.flags?.platform,onProgress:r,signal:i})}function Ue(e,t,n,r){let i=Je(e,t);if(!i)return n;i.positionalIndex!==void 0&&i.positionalPath!==void 0&&(t[i.positionalIndex]=i.positionalPath);let a=We(n,i.flagKey??`out`,i.flagPath);return r[i.field]=i.localPath,a}function We(e,t,n){return n===void 0?e:{...e??{},[t]:n}}function Ge(e,t){let n=T.isAbsolute(e)?e:T.resolve(t??process.cwd(),e);return w.existsSync(n)?n:void 0}function Ke(e){return{positionals:e.positionals,flags:e.flags,installSource:e.installSource,uploadedArtifactId:e.uploadedArtifactId,...Object.keys(e.clientArtifactPaths).length>0?{clientArtifactPaths:e.clientArtifactPaths}:{}}}async function qe(e,t,n,r){let i=e.meta?.installSource;if(e.command!==`install_source`||!i||i.kind!==`path`)return null;let a=i.path.trim();if(!a)return{installSource:i};if(a.startsWith(`remote:`))return{installSource:{...i,path:a.slice(7)}};let o=T.isAbsolute(a)?a:T.resolve(e.meta?.cwd??process.cwd(),a);if(!w.existsSync(o))return{installSource:{...i,path:o}};let s=await I({localPath:o,baseUrl:t.baseUrl,token:t.token,platform:e.flags?.platform,onProgress:n,signal:r});return{installSource:{...i,path:o},uploadedArtifactId:s}}function Je(e,t){if(e.command===`screenshot`){let n=$e(e,`path`,`.png`);return t[0]?{field:`path`,localPath:n,positionalIndex:0,positionalPath:g(`screenshot`,`.png`)}:{field:`path`,localPath:n,positionalIndex:0,flagPath:g(`screenshot`,`.png`)}}if(e.command===`record`&&(t[0]??``).toLowerCase()===`start`){if(!Ze(e)&&e.flags?.platform===void 0)return null;let t=Xe(e),n=Qe($e(e,`outPath`,t,1),e);return{field:`outPath`,localPath:n,positionalIndex:1,positionalPath:g(`recording`,T.extname(n)||t)}}return e.command===`test`?{field:`artifactsDir`,localPath:Ye(e),flagKey:`artifactsDir`,flagPath:v(`test-artifacts`)}:null}function Ye(e){let t=e.flags?.artifactsDir;return et(z(t)?t:`.agent-device/test-artifacts`,e.meta?.cwd)}function Xe(e){return b(e.flags?.platform)}function Ze(e){return z(e.positionals?.[1])||z(e.flags?.out)}function Qe(e,t){return t.flags?.platform===`web`?x(e,Xe(t)):e}function $e(e,t,n,r=0){let i=e.positionals?.[r]??e.flags?.out,a=`${t===`path`?`screenshot`:`recording`}-${Date.now()}${n}`;return et(z(i)?i:a,e.meta?.cwd)}function et(e,t){return T.isAbsolute(e)?e:T.resolve(t??process.cwd(),e)}function z(e){return typeof e==`string`&&e.trim().length>0}async function tt(e,t,n){let r=Array.isArray(n.data?.artifacts)?n.data.artifacts:[];if(r.length===0||!e.baseUrl)return n;let i=n.data?{...n.data}:{},a=[];for(let n of r){if(!n||typeof n!=`object`||typeof n.artifactId!=`string`){a.push(n);continue}let r=nt(n,t),o=await rt({baseUrl:e.baseUrl,token:e.token,artifactId:n.artifactId,destinationPath:r,requestScope:t.meta,isDirectory:n.artifactType===`test-artifacts`});i[n.field]=o,a.push({...n,localPath:o})}return i.artifacts=a,{ok:!0,data:i}}function nt(e,t){if(e.localPath&&e.localPath.trim().length>0)return e.localPath;let n=t.meta?.clientArtifactPaths?.[e.field];if(n&&n.trim().length>0)return n;let r=e.fileName?.trim()||`${e.field}-${Date.now()}`;return T.resolve(t.meta?.cwd??process.cwd(),r)}async function rt(e){let{downloadRemoteArtifactFromUrl:t}=await import(`./artifact-download.js`);return await t({artifactUrl:new URL(it(e.baseUrl,e.artifactId)),token:e.token,artifactId:e.artifactId,destinationPath:e.destinationPath,requestScope:e.requestScope,...e.timeoutMs===void 0?{}:{timeoutMs:e.timeoutMs},...e.isDirectory===void 0?{}:{isDirectory:e.isDirectory}})}function it(e,t){let n=e.endsWith(`/`)?e:`${e}/`;return new URL(`artifacts/${encodeURIComponent(t)}`,n).toString()}function at(e){return typeof e.baseUrl==`string`&&e.baseUrl.length>0}function B(e,n,r){return new t(`COMMAND_FAILED`,`Invalid daemon response`,{requestId:e.meta?.requestId,line:n},r instanceof Error?r:void 0)}function ot(e){let t=t=>(e.onError(t),!0);return{handleLine(n){let r;try{r=JSON.parse(n)}catch(r){return t(B(e.req,n,r))}if(ie(r))try{return e.onProgress?.(r.event),!1}catch(e){return t(e)}return ne(r)?(e.onResponse(r.response),!0):e.responseFormat===`socket-legacy`?(e.onResponse(r),!0):t(B(e.req,n,Error(`Missing daemon progress response envelope`)))}}}function st(e,t){return re(e)&&String(Array.isArray(t)?t.join(`,`):t??``).includes(`application/x-ndjson`)}function ct(e,t){let{req:n,isSettled:r,resolve:i,reject:a,clearTimeout:o}=t,s=``,c=ot({req:n,onProgress:t.onProgress,responseFormat:`socket-legacy`,onResponse(t){o(),i(t),e.end()},onError(e){o(),a(e)}});e.setEncoding(`utf8`),e.on(`data`,e=>{if(r())return;let t=C(s,e);s=t.buffer;for(let e of t.lines)if(c.handleLine(e))return}),e.on(`end`,()=>{if(r())return;let e=s.trim();e&&c.handleLine(e)||(o(),a(B(n,e)))})}function lt(e,n){let{req:r,handleResponseBody:i,reject:a,clearTimeout:o}=n,s=``,c=!1,l=ot({req:r,onProgress:n.onProgress,responseFormat:`ndjson-envelope`,onResponse(e){c=!0,o(),i(JSON.stringify(e))},onError(e){c=!0,o(),a(e)}});e.setEncoding(`utf8`),e.on(`data`,e=>{if(c)return;let t=C(s,e);s=t.buffer;for(let e of t.lines)if(e&&l.handleLine(e))return}),e.on(`end`,()=>{if(c)return;let e=s.trim();e&&l.handleLine(e)||(c=!0,o(),a(B(r,e)))}),e.on(`error`,e=>{c||(c=!0,o(),a(new t(`COMMAND_FAILED`,`Failed to read daemon response`,{requestId:r.meta?.requestId},e instanceof Error?e:void 0)))})}const ut=1e4,V=8388608;function dt(e,t){return h(e,`sessions/${encodeURIComponent(t.session)}/requests/${encodeURIComponent(t.requestId)}/diagnostics`)}function ft(e){let{logPath:t,...n}=e;return n}async function pt(e,t){let n=ft(e),r=e.diagnosticsRecord,i=r?.requestId??t.requestId;if(!r)return H(n,t.endpoint,i,`the daemon named no diagnostics record`);try{let e=ae(t.stateDir,r),a=await mt({endpoint:t.endpoint,ref:r,destinationPath:e});return a?H(n,t.endpoint,i,a):{...n,logPath:e}}catch(e){return H(n,t.endpoint,i,e instanceof Error?e.message:String(e))}}function H(e,t,n,r){return{...e,logPathUnavailable:`remote daemon ${t.baseUrl}, request ${n??`unknown`}: ${r}`}}async function mt(e){let{endpoint:t,ref:n,destinationPath:r}=e,i;try{i=new URL(dt(t.baseUrl,n))}catch{return`daemon base URL is not a valid URL`}try{let e=await S(i.protocol);return await w.promises.mkdir(T.dirname(r),{recursive:!0}),await new Promise(n=>{let a=!1,o=e=>{if(!a){if(a=!0,clearTimeout(c),e===void 0){n(void 0);return}w.promises.rm(r,{force:!0}).finally(()=>{n(e)})}},s=e.request({protocol:i.protocol,host:i.hostname,port:i.port,method:`GET`,path:i.pathname+i.search,headers:{..._(t.token),...m(t.tenantId)}},e=>{let t=e.statusCode??500;if(t!==200){e.resume(),o(`HTTP ${t}`);return}let n=w.createWriteStream(r),i=0;e.on(`data`,e=>{i+=e.length,i>V&&(s.destroy(),n.destroy(),o(`record exceeds ${V} bytes`))}),e.on(`error`,e=>{n.destroy(),o(e.message)}),n.on(`error`,e=>{o(e.message)}),n.on(`finish`,()=>{o(void 0)}),e.pipe(n)}),c=setTimeout(()=>{o(`fetch timed out after ${ut}ms`),s.destroy()},ut);s.on(`error`,e=>{o(e.message)}),s.end()})}catch(e){return e instanceof Error?e.message:String(e)}}function ht(e,n){let{info:r,req:i,stateDir:a,resolve:o,reject:s}=n;try{let n=gt(e);if(n.error){_t(n.error,{info:r,req:i,stateDir:a,reject:s});return}if(!n.result||typeof n.result!=`object`){s(new t(`COMMAND_FAILED`,`Invalid daemon RPC response`,{requestId:i.meta?.requestId}));return}xt(r,i,n.result,o,s)}catch(n){s(new t(`COMMAND_FAILED`,`Invalid daemon response`,{requestId:i.meta?.requestId,line:e},n instanceof Error?n:void 0))}}function gt(e){return JSON.parse(e)}async function _t(e,t){let{info:n,req:r,stateDir:i,reject:a}=t,o=r.meta?.requestId,s=vt(e);if(!n.baseUrl){a(bt(s,o));return}a(bt(await pt(s,{endpoint:{baseUrl:n.baseUrl,token:n.token,tenantId:r.meta?.tenantId},stateDir:i,requestId:o}),o))}function vt(e){let t=e.data??{},r=yt(t.cause);return{code:i(t.code==null?void 0:String(t.code),`COMMAND_FAILED`),message:String(t.message??e.message??`Daemon RPC request failed`),cause:r,details:typeof t.details==`object`&&t.details?t.details:void 0,hint:typeof t.hint==`string`?t.hint:void 0,diagnosticId:typeof t.diagnosticId==`string`?t.diagnosticId:void 0,logPath:typeof t.logPath==`string`?t.logPath:void 0,diagnosticsRecord:n(t.diagnosticsRecord),retriable:typeof t.retriable==`boolean`?t.retriable:void 0,supportedOn:typeof t.supportedOn==`string`?t.supportedOn:void 0}}function yt(e){return r(e)}function bt(e,n){return new t(i(e.code,`COMMAND_FAILED`),e.message,{...e.details??{},hint:e.hint,diagnosticId:e.diagnosticId,logPath:e.logPath,logPathUnavailable:e.logPathUnavailable,diagnosticsRecord:e.diagnosticsRecord,retriable:e.retriable,supportedOn:e.supportedOn,requestId:n},e.cause)}async function xt(e,t,n,r,i){try{r(e.baseUrl&&n.ok?await tt(e,t,n):n)}catch(e){i(e)}}function St(e,t){let n=e.meta?.requestId??a();return Ct(e.command)?{jsonrpc:`2.0`,id:n,method:wt(e.command),params:{...Tt(e,e.command,t),...e.command===`lease_allocate`?c(e.flags):{},...e.command===`lease_allocate`&&e.meta?.providerCredentialFingerprint?{providerCredentialFingerprint:e.meta.providerCredentialFingerprint}:{}}}:{jsonrpc:`2.0`,id:n,method:`agent_device.command`,params:e}}function Ct(e){return e===`lease_allocate`||e===`lease_heartbeat`||e===`lease_release`}function wt(e){switch(e){case`lease_allocate`:return`agent_device.lease.allocate`;case`lease_heartbeat`:return`agent_device.lease.heartbeat`;case`lease_release`:return`agent_device.lease.release`}}function Tt(e,t,n){return s(l(e),t,{includeTokenParam:n.includeTokenParam,token:e.token,session:e.session})}async function Et(e){let{info:n,statePaths:r,remote:i,timeoutMs:a,requestId:s,command:c,platform:l,session:u,action:d}=e,f=!i&&Dt(c)?await(await import(`./daemon-client-liveness-probe.js`)).probeDaemonResponsive(n,{session:u}):void 0,p=f===!1,m;if(p){let{stopAndRetireDaemon:e}=await import(`./daemon-registration-owner.js`).then(e=>e.r);m=await e({paths:r,observed:{pid:n.pid,startTime:n.processStartTime??null},mode:`force`})}let h=m?.status===`retired`,g=m?.status===`retained`&&m.termination?.status!==`exited`;return o({level:`error`,phase:`daemon_request_timeout`,data:{timeoutMs:a,requestId:s,command:c,daemonPidReset:h?n.pid:void 0,daemonPidForceKilled:h?jt(m):void 0,daemonRetirement:m,daemonPreservedAfterTimeout:g||!i&&!p,daemonLivenessProbeAnswered:f,daemonBaseUrl:n.baseUrl}}),new t(`COMMAND_FAILED`,`Daemon request timed out`,{timeoutMs:a,requestId:s,reason:`daemon_transport_timeout`,...m?{retirement:m,stateDir:r.baseDir}:{},hint:m?.status===`retained`?`The daemon could not be safely retired. State was retained at ${r.baseDir}. ${m.error?.hint??`Retry with --debug and inspect daemon diagnostics before retrying.`}`:At({remote:i,resetDaemon:h,command:c,applePlatformDeclared:kt(l),session:u,action:d})})}function Dt(e){return u(e).onTimeout===`reset-daemon`}const Ot=new Set([`apple`,`ios`,`macos`]);function kt(e){return e!==void 0&&Ot.has(e)}function At(e){let{remote:t,resetDaemon:n,command:r,applePlatformDeclared:i,session:a,action:o}=e;if(!n&&r===d.record&&o===`stop`)return`The ${t?`remote `:``}daemon may still be exporting the recording. Run agent-device record stop${a?` --session ${a}`:``} again to wait for that export and receive the completed recording.`;if(t)return`Retry with --debug and verify the remote daemon URL, auth token, and remote host logs.`;if(n)return`Retry with --debug and check daemon diagnostics logs. The daemon did not answer the liveness probe and was reset after the timeout.`;let s=i&&r===d.snapshot?` If this was the first Apple-platform snapshot on the device, run agent-device prepare ios-runner with the same --platform before snapshot/test so runner startup is handled explicitly.`:``;return`Retry with --debug and check daemon diagnostics logs. The timed-out ${r??`request`} request was canceled; the daemon was kept alive so the session can still be closed or inspected.${s}`}function jt(e){if(!e||e.status===`absent`)return!1;let t=e.termination;return t?.status===`exited`&&t.mode===`forced`}function Mt(e){let t=Bt(e);if(!t||typeof t!=`object`)return null;let n=t,r=Nt(n);if(!r)return null;let i=Pt(n);return i?{token:r,...i,transport:It(n.transport),pid:f(n.pid)?n.pid:0,version:U(n.version),codeOrigin:Ft(n.codeOrigin),codeSignature:U(n.codeSignature),processStartTime:U(n.processStartTime),policyDigest:U(n.policyDigest)}:null}function Nt(e){return typeof e.token==`string`&&e.token.length>0?e.token:null}function Pt(e){let t=Lt(e.port),n=Lt(e.httpPort);return t===void 0&&n===void 0?null:{port:t,httpPort:n}}function Ft(e){return e===`installed`||e===`checkout`?e:void 0}function It(e){return e===`socket`||e===`http`||e===`dual`?e:void 0}function U(e){return typeof e==`string`?e:void 0}function Lt(e){return Number.isInteger(e)&&Number(e)>0?Number(e):void 0}function Rt(e){return{hasInfo:w.existsSync(e.infoPath),hasLock:w.existsSync(e.lockPath)}}function W(e){return typeof e.baseUrl==`string`&&e.baseUrl.length>0}function zt(e,t=se(process.env.AGENT_DEVICE_STATE_DIR)){let n=[e.hasInfo?t.infoPath:null,e.hasLock?t.lockPath:null].filter(Boolean).join(` and `);return`Daemon startup did not establish a reachable owner. ${n?`State was retained at ${n}. `:``}Retry with --debug and inspect daemon diagnostics. Before upgrading, stop all older clients and daemons with their original CLI and prevent them from returning to this state directory. Unverified lock state requires confirming every user stopped before manual recovery; deleting metadata alone is not a safe reset.`}function Bt(e){if(!w.existsSync(e))return null;try{return JSON.parse(w.readFileSync(e,`utf8`))}catch{return null}}function G(t,n,r){return e({requestId:r,dispatched:n},t.reason)}function K(e,t){if(e?.aborted)throw G(e,`no`,t)}const Vt={refuseIfAborted:()=>{},guard:async e=>await e()};function Ht(e){let{signal:t,requestId:n}=e;return t?{refuseIfAborted(){if(t.aborted)throw G(t,`no`,n)},guard:async e=>{if(t.aborted)throw G(t,`no`,n);return await new Promise((r,i)=>{let a=()=>i(G(t,`unknown`,n));t.addEventListener(`abort`,a,{once:!0}),e().then(e=>{t.removeEventListener(`abort`,a),r(e)},e=>{t.removeEventListener(`abort`,a),i(e)})})}}:Vt}const Ut=3e3,Wt=`daemon_endpoint_unavailable`;function Gt(e){return e instanceof t&&e.code===`COMMAND_FAILED`&&e.details?.reason===Wt}function q(e){return new t(`COMMAND_FAILED`,e===`http`?`Daemon HTTP endpoint is unavailable`:`Daemon socket endpoint is unavailable`,{reason:Wt,transport:e})}async function Kt(e,t,n){let r=Date.now()+(n??1/0),i=un(e,t),a=dn(e,t,i);return await qt(e,i,(r-Date.now())/(a?2:1))?Date.now()<r:a?await qt(e,a,r-Date.now())&&Date.now()<r:!1}async function qt(e,t,n){return t===`http`?await Yt(e,n):await Jt(e.port,n)}function Jt(e,t=500){return!e||t<=0?Promise.resolve(!1):new Promise(n=>{let r=!1,i=me.createConnection({host:`127.0.0.1`,port:e},()=>{a(!0)}),a=e=>{r||(r=!0,i.destroy(),n(e))};i.setTimeout(Math.min(500,Math.ceil(t))),i.on(`timeout`,()=>{a(!1)}),i.on(`error`,()=>{a(!1)})})}function Yt(e,t){return $t(e,t).then(e=>e.reachable)}async function Xt(e,n,r){let i=await $t(e,n,r);if(!e.baseUrl||!i.reachable)return i;let a=[i,i.upstream].find(e=>typeof e?.rpcProtocolVersion==`number`&&e.rpcProtocolVersion!==2);if(a)throw new t(`COMMAND_FAILED`,`Remote daemon RPC protocol is incompatible`,{daemonBaseUrl:e.baseUrl,clientVersion:oe(),remoteVersion:a.version,remoteService:a.service,supportedRpcProtocolVersion:2,remoteRpcProtocolVersion:a.rpcProtocolVersion,hint:`Upgrade agent-device on the client or remote host so both support the same daemon RPC protocol.`});return i}function Zt(e){return Qt(e,`health`)}function Qt(e,t){return e.baseUrl?h(e.baseUrl,t):e.httpPort?`http://127.0.0.1:${e.httpPort}/${t}`:null}async function $t(e,t,n){let r=Zt(e);if(!r)return{reachable:!1};let i=new URL(r),a=Math.min(e.baseUrl?Ut:500,t??1/0);if(a<=0)return{reachable:!1,timedOut:!0};let o=performance.now()+a,s=AbortSignal.timeout(Math.ceil(a)),c=n?AbortSignal.any([s,n]):s,l=await Promise.race([S(i.protocol),new Promise(e=>{c.addEventListener(`abort`,()=>e(null),{once:!0})})]),u=()=>en(s,o);return!l||J(c,o)?u():await new Promise(t=>{let n=e.baseUrl?_(e.token):{},r=l.request({protocol:i.protocol,host:i.hostname,port:i.port,path:i.pathname+i.search,method:`GET`,timeout:a,signal:c,headers:n},e=>{let n=``;e.setEncoding(`utf8`),e.on(`data`,e=>{n+=e}),e.on(`end`,()=>{let r=e.statusCode??500;t(J(s,o)?{reachable:!1,timedOut:!0}:{reachable:r<500,statusCode:r,...tn(n)})}),e.on(`error`,()=>t(u())),e.on(`aborted`,()=>t(u()))});r.on(`timeout`,()=>{r.destroy(),t({reachable:!1,timedOut:!0})}),r.on(`error`,()=>{t(u())}),r.end()})}function en(e,t){return J(e,t)?{reachable:!1,timedOut:!0}:{reachable:!1}}function J(e,t){return e.aborted||performance.now()>=t}function tn(e){try{let t=JSON.parse(e),n=t.upstream&&typeof t.upstream==`object`?nn(t.upstream):void 0;return{...nn(t),...n?{upstream:n}:{}}}catch{return{}}}function nn(e){return{service:typeof e.service==`string`?e.service:void 0,version:typeof e.version==`string`?e.version:void 0,rpcProtocolVersion:typeof e.rpcProtocolVersion==`number`?e.rpcProtocolVersion:void 0,...typeof e.instanceId==`string`?{instanceId:e.instanceId}:{},...typeof e.hostArch==`string`?{hostArch:e.hostArch}:{}}}async function rn(e,n,r,i,a,o={}){try{return await an(e,n,r,i,a,o)}catch(r){if(!(r instanceof t)||r.details?.reason!==`daemon_transport_timeout`)throw r;let a=r.details.timeoutMs;throw typeof a==`number`?await Et({info:e,statePaths:i,...gn(n,W(e),a)}):r}}async function an(e,t,n,r,i,a={}){let o=un(e,n),s=typeof i==`number`?performance.now()+i:void 0;K(a.signal,t.meta?.requestId);try{return await Y(e,t,r,i,o,a)}catch(c){if(e.baseUrl&&cn(c))return await on(e,t,r,i,s,o,a);ln(c)&&$(e);let l=dn(e,n,o);if(!l||!fn(c,o))throw c;return await Y(e,t,r,i,l,a)}}async function on(e,n,r,i,a,o,s){$(e);let c=sn(n,i,a),l=await Xt(e,c,s.signal);K(s.signal,n.meta?.requestId);let u=sn(n,i,a,l.timedOut?c:void 0);if(!l.reachable)throw new t(`COMMAND_FAILED`,`Remote daemon is unavailable`,{daemonBaseUrl:e.baseUrl});e.remoteInstanceId=l.instanceId,e.remoteUpstreamInstanceId=l.upstream?.instanceId,xn(e,l);try{return await Y(e,n,r,u,o,s)}catch(t){throw ln(t)&&$(e),t}}function sn(e,t,n,r){if(n===void 0||t===void 0)return;let i=n-performance.now();if(i>0&&(r===void 0||r>Ut))return i;throw Z(t,e.meta?.requestId)}function cn(e){return e instanceof t&&e.details?.reason===`remote_instance_mismatch`}function ln(e){return e instanceof t&&(e.details?.reason===`daemon_transport_failure`||e.details?.reason===`daemon_transport_timeout`||e.details?.reason===`daemon_response_read_failure`)}async function Y(e,t,n,r,i,a){return i===`http`?await yn(e,t,n,r,a):await hn(e,t,r,a)}function un(e,n){if(e.baseUrl){if(n===`socket`)throw new t(`COMMAND_FAILED`,`Remote daemon endpoint only supports HTTP transport`,{daemonBaseUrl:e.baseUrl});return`http`}if(n===`http`||n===`socket`)return pn(e,n);let r=(e.transport===`socket`||e.transport===`dual`?[`socket`,`http`]:[`http`,`socket`]).find(t=>X(e,t));if(r)return r;throw new t(`COMMAND_FAILED`,`Daemon metadata has no reachable transport`)}function X(e,t){return t===`http`?!!e.httpPort:!!e.port}function dn(e,t,n){if(t!==`auto`||e.baseUrl)return null;let r=n===`socket`?`http`:`socket`;return X(e,r)?r:null}function fn(e,n){return n===`socket`&&e instanceof t&&e.code===`COMMAND_FAILED`&&e.message===`Failed to communicate with daemon`&&e.details?.daemonSocketRequestWritten===!1}function pn(e,t){if(X(e,t))return t;throw q(t)}function mn(e,n,r,i={}){return o({level:`error`,phase:`daemon_request_socket_error`,data:{requestId:n,message:e instanceof Error?e.message:String(e)}}),new t(`COMMAND_FAILED`,`Failed to communicate with daemon`,{...i,reason:`daemon_transport_failure`,requestId:n,hint:r?`Retry command. If this persists, verify the remote daemon URL, auth token, and remote host reachability.`:`Retry command. If this persists, clean stale daemon metadata and start a fresh session.`},e instanceof Error?e:void 0)}async function hn(e,t,n,r){let i=e.port;if(!i)throw q(`socket`);let a=r.signal;return K(a,t.meta?.requestId),new Promise((e,o)=>{let s=!1,c=!1,l=me.createConnection({host:`127.0.0.1`,port:i},()=>{if(a?.aborted){c=!0,d(a);return}s=!0,l.write(`${JSON.stringify(t)}\n`)}),u=typeof n==`number`?setTimeout(()=>{c||(c=!0,p(),o(Z(n,t.meta?.requestId)),l.destroy())},n):void 0,d=e=>{p(),u&&clearTimeout(u),l.destroy(),o(G(e,s?`unknown`:`no`,t.meta?.requestId))},f=()=>{c||(c=!0,d(a))},p=()=>{a&&a.removeEventListener(`abort`,f)};a&&a.addEventListener(`abort`,f,{once:!0}),ct(l,{req:t,onProgress:r.onProgress,isSettled:()=>c,clearTimeout:()=>{u&&clearTimeout(u)},resolve:t=>{c=!0,p(),e(t)},reject:e=>{c=!0,p(),o(e)}}),l.on(`error`,e=>{c||(c=!0,u&&clearTimeout(u),p(),o(mn(e,t.meta?.requestId,!1,{daemonSocketRequestWritten:s})))})})}function Z(e,n){return new t(`COMMAND_FAILED`,`Daemon request timed out`,{reason:`daemon_transport_timeout`,timeoutMs:e,requestId:n})}function gn(e,t,n){return{remote:t,timeoutMs:n,requestId:e.meta?.requestId,command:e.command,platform:e.flags?.platform,session:e.session,action:e.positionals?.[0]}}function _n(e){return{...e.remoteInstanceId?{[y]:e.remoteInstanceId}:{},...e.remoteUpstreamInstanceId?{[ee]:e.remoteUpstreamInstanceId}:{}}}function vn(e,t){return e===409&&t[`x-agent-device-instance-mismatch`]===`true`}async function yn(e,n,r,i,a){let o=Qt(e,`rpc`);if(!o)throw q(`http`);let s=new URL(o),c=JSON.stringify(St(n,{includeTokenParam:!e.baseUrl})),l={"content-type":`application/json`,"content-length":Buffer.byteLength(c)};e.baseUrl&&(Object.assign(l,_(e.token)),Object.assign(l,_n(e)));let u=await S(s.protocol),d=a.signal;return K(d,n.meta?.requestId),await new Promise((o,f)=>{let p=!1,m=!1,h=()=>{d&&d.removeEventListener(`abort`,x)},g=e=>{p||(p=!0,h(),o(e))},_=e=>{p||(p=!0,h(),f(e))},v=t=>{ht(t,{info:e,req:n,stateDir:r.baseDir,resolve:g,reject:_})},y=u.request({protocol:s.protocol,host:s.hostname,port:s.port,method:`POST`,path:s.pathname+s.search,headers:l},r=>{if(vn(r.statusCode,r.headers??{})){r.resume(),b&&clearTimeout(b),_(new t(`COMMAND_FAILED`,`Remote daemon instance changed`,{reason:`remote_instance_mismatch`,daemonBaseUrl:e.baseUrl}));return}if(st(n,r.headers?.[`content-type`])){lt(r,{req:n,onProgress:a.onProgress,reject:_,clearTimeout:()=>{b&&clearTimeout(b)},handleResponseBody:v});return}te(r).catch(e=>{throw new t(`COMMAND_FAILED`,`Failed to read daemon response`,{requestId:n.meta?.requestId,reason:`daemon_response_read_failure`},e instanceof Error?e:void 0)}).then(e=>{b&&clearTimeout(b),v(e)}).catch(e=>{b&&clearTimeout(b),_(e)})}),ee=W(e),b=typeof i==`number`?setTimeout(()=>{_(Z(i,n.meta?.requestId)),y.destroy()},i):void 0,x=()=>{p||(b&&clearTimeout(b),_(G(d,m?`unknown`:`no`,n.meta?.requestId)),y.destroy())};d&&d.addEventListener(`abort`,x,{once:!0}),y.on(`error`,e=>{b&&clearTimeout(b),!p&&_(mn(e,n.meta?.requestId,ee))}),y.write(c),y.end(),m=!0})}let Q;function bn(e,t){return e.baseUrl===t.baseUrl&&e.token===t.token&&e.pid===t.pid}function xn(e,t){!t.instanceId||t.upstream&&!t.upstream.instanceId||(Q={baseUrl:e.baseUrl??``,token:e.token,pid:e.pid,health:Promise.resolve(t)})}function $(e){Q&&bn(Q,e)&&(Q=void 0)}async function Sn(e){if(Q&&bn(Q,e))return await Q.health;let t={baseUrl:e.baseUrl??``,token:e.token,pid:e.pid,health:Xt(e)};Q=t;try{let e=await t.health;return(!e.reachable||!e.instanceId||e.upstream&&!e.upstream.instanceId)&&Q===t&&(Q=void 0),e}catch(e){throw Q===t&&(Q=void 0),e}}export{rn as a,Mt as c,Gt as i,zt as l,Kt as n,Rt as o,Ht as r,W as s,Sn as t,Be as u};
@@ -1 +0,0 @@
1
- import e from"node:path";const t=`/agent-device`,n=`x-agent-device-tenant`,r=`x-agent-device-network-access`,i=`public-only`;function a(e){return o(e,t)}function o(e,t){let n=e.endsWith(`/`)?e:`${e}/`;return new URL(t.replace(/^\/+/,``),n).toString()}function s(e){let t=e?.trim();return t?{authorization:`Bearer ${t}`,"x-agent-device-token":t}:{}}function c(e){let t=e?.trim();return t?{[n]:t}:{}}const l=`x-agent-device-instance`,u=`x-agent-device-upstream-instance`,d=`x-agent-device-instance-mismatch`;function f(e,t,n){return{jsonrpc:`2.0`,id:e,error:{code:-32001,message:t,data:n}}}function p(e,t,n={}){return{ok:!0,service:e,version:t,rpcProtocolVersion:2,...n.instanceId===void 0?{}:{instanceId:n.instanceId},...n.hostArch===void 0?{}:{hostArch:n.hostArch},...n.leaseBackends===void 0?{}:{leaseBackends:n.leaseBackends},...n.upstream===void 0?{}:{upstream:n.upstream}}}const m=`/tmp`;function h(t,n){return e.posix.join(m,`${y(t)}${v(n)}`)}function g(t){return e.posix.join(m,y(t))}function _(t,n,r){let i=v(r),a=e.posix.basename(t,i);return t===e.posix.join(m,`${a}${i}`)&&a.startsWith(`agent-device-${n}-`)&&/^\d+-[a-z0-9]+$/.test(a.slice(`agent-device-${n}-`.length))}function v(e){return e.startsWith(`.`)?e:`.${e}`}function y(e){return`agent-device-${e}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}export{i as a,p as c,c as d,o as f,_ as g,h,r as i,s as l,g as m,l as n,n as o,f as p,d as r,u as s,t,a as u};
@@ -1 +0,0 @@
1
- import{P as e}from"./sdk-contracts.js";const t=`native-panel`,n=[`portrait`,`portrait-upside-down`,`landscape-left`,`landscape-right`],r={portrait:0,"landscape-left":1,"portrait-upside-down":2,"landscape-right":3};function i(e){return n.find(t=>r[t]===e)}function a(e){return typeof e==`string`&&n.includes(e)}function o(e){return r[e]*90}function s(e){return r[e]%2==0?`PORTRAIT`:`LANDSCAPE`}function c(t){if(t===void 0)throw new e(`INVALID_ARGS`,`orientation requires an orientation argument. Use portrait|portrait-upside-down|landscape-left|landscape-right.`);switch(t?.trim().toLowerCase()){case`portrait`:return`portrait`;case`portrait-upside-down`:case`upside-down`:return`portrait-upside-down`;case`landscape-left`:case`left`:return`landscape-left`;case`landscape-right`:case`right`:return`landscape-right`;default:throw new e(`INVALID_ARGS`,`Invalid rotation: ${t}. Use portrait|portrait-upside-down|landscape-left|landscape-right.`)}}const l=[`closed`,`half-open`,`open`],u=`closed|half-open|open`;function d(e){if(Number.isFinite(e))return e<=f?`closed`:e>=p?`open`:`half-open`}const f=1,p=179;function m(t){if(t===void 0)throw new e(`INVALID_ARGS`,`fold requires a pose argument. Use ${u}.`);switch(t.trim().toLowerCase()){case`closed`:case`close`:case`fold`:case`folded`:return`closed`;case`half-open`:case`half`:case`half-unfolded`:case`partially-open`:case`book`:return`half-open`;case`open`:case`unfold`:case`unfolded`:case`fully-open`:case`flat`:return`open`;default:throw new e(`INVALID_ARGS`,`Invalid fold pose: ${t}. Use ${u}.`)}}const h=6e4;function g(t){if(t.keyframes===void 0){if(t.pose===void 0)throw new e(`INVALID_ARGS`,`fold requires a pose or keyframes`);if(typeof t.pose!=`string`)throw new e(`INVALID_ARGS`,`fold pose must be a string`);return{pose:m(t.pose)}}if(t.pose!==void 0)throw new e(`INVALID_ARGS`,`fold accepts either pose or keyframes`);return{keyframes:_(t.keyframes)}}function _(t){if(!Array.isArray(t)||t.length<2||t.length>64)throw new e(`INVALID_ARGS`,`fold requires 2–64 keyframes`);let n=t.map(y);if(n[0].atMs!==0||n.some((e,t)=>t>0&&e.atMs<=n[t-1].atMs))throw new e(`INVALID_ARGS`,`Fold keyframes must start at 0ms and increase strictly`);return n}function v(e,t){return typeof e==`number`&&Number.isFinite(e)&&e>=0&&e<=t}function y(t){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`Each fold keyframe requires atMs and angle`);let{atMs:n,angle:r}=t;if(Object.keys(t).some(e=>e!==`atMs`&&e!==`angle`))throw new e(`INVALID_ARGS`,`Fold keyframes only accept atMs and angle`);if(!v(n,6e4)||!Number.isSafeInteger(n))throw new e(`INVALID_ARGS`,`Fold keyframe times must be integers from 0 to ${h}ms`);if(!v(r,180))throw new e(`INVALID_ARGS`,`Fold keyframe angles must be finite numbers from 0 to 180`);return{atMs:n,angle:r}}function b(t){let n;try{n=JSON.parse(t)}catch{throw new e(`INVALID_ARGS`,`--keyframes requires a JSON array of {atMs, angle} objects`)}return _(n)}export{t as a,s as c,a as d,c as f,m as h,u as i,o as l,b as m,r as n,h as o,g as p,l as r,i as s,n as t,d as u};
@@ -1,3 +0,0 @@
1
- import{B as e,P as t}from"./sdk-contracts.js";import{i as n}from"./sdk-batch-runner.js";import{n as r}from"./app-inventory.js";import"./device.js";import{t as i}from"./ios-client.js";import{t as a}from"./instance-client.js";import{t as o}from"./request-cancellation.js";import{i as s}from"./snapshot.js";import c from"node:fs";import l from"node:os";import u from"node:path";import{setTimeout as d}from"node:timers/promises";function f(e){return e?.trim()||void 0}async function p(e,t){let n=await a({apiUrl:e.apiUrl,adbUrl:e.adbUrl,token:e.token,logLevel:`warn`}),r={platform:`android`,lease:e.lease,instanceId:e.instanceId,ownership:e.ownership,device:e.device,client:n,token:e.token,dependencies:t},i={exec:async(e,t)=>await y(r,e,t),text:async e=>{await n.setText(e.target,e.text)}};return i.reverse=await t.android.createPortReverse(i.exec,{noRebind:e.ownership===`attached`}),Object.assign(r,{adbProvider:i})}function m(e){return e.dependencies.android.createInteractor(e.device,e.adbProvider)}async function h(e,t,n,r,i,a){i?.throwIfAborted();let s=f(r?.packageNameHint);r?.relaunch&&s&&await t.dependencies.android.forceStopApp(async(e,n)=>await y(t,e,n),s,i);let c=await o(a,e.assets.getOrUpload({path:n,name:T(s,n)},{signal:i}),i);await o(a,t.client.sendAsset(c.signedDownloadUrl),i),i?.throwIfAborted();let l=s?await t.dependencies.android.inferAppName(s):void 0;return{...s?{packageName:s,launchTarget:s}:{},...l?{appName:l}:{}}}async function g(e,t){await e.adbProvider.reverse?.ensure({local:w(t.devicePort),remote:w(t.hostPort),ownerId:t.name})}async function _(e){await e.adbTunnelPromise?.catch(()=>{});let t=e.adbSerial;t&&(await v(e),await e.dependencies.host.runAdb(e.dependencies.android.hostAdbInvocation([`disconnect`,t]),{allowFailure:!0,timeoutMs:1e4}).catch(()=>{})),e.adbTunnel?.close(),e.adbTunnel=void 0,e.adbSerial=void 0,e.adbTunnelPromise=void 0}async function v(e){let t=e.adbProvider.reverse;if(!t?.list)return;let n=await t.list().catch(()=>[]),r=new Set,i=[],a=e.ownership===`attached`;for(let e of n)e.ownerId?r.add(e.ownerId):a||i.push(e.local);await Promise.allSettled([...[...r].map(async e=>await t.removeAllOwned(e)),...i.map(async e=>await t.remove(e))])}async function y(e,t,n){let{invocation:r,result:i}=await b(e,t,n);return await x(r,i,n?.allowFailure,e.dependencies)}async function b(e,t,n){let r=await S(e),i=e.dependencies.android.deviceAdbInvocation(r,t);return{invocation:i,result:await e.dependencies.host.runAdb(i,{allowFailure:n?.allowFailure,binaryStdout:n?.binaryStdout,stdin:n?.stdin,timeoutMs:n?.timeoutMs??3e4,signal:n?.signal})}}async function x(e,t,n,r){if(t.exitCode!==0&&n!==!0)throw await r.android.adbError(`Limrun Android ADB command failed`,t,e);return t}async function S(e){if(e.adbSerial)return e.adbSerial;let t=e.adbTunnelPromise??C(e);e.adbTunnelPromise=t;try{return await t}catch(n){throw e.adbTunnelPromise===t&&(e.adbTunnelPromise=void 0),n}}async function C(e){let t=await e.client.startAdbTunnel(),n=`${t.address.address}:${t.address.port}`;return e.adbTunnel=t,e.adbSerial=n,n}function w(e){if(!Number.isInteger(e)||e<1||e>65535)throw new t(`INVALID_ARGS`,`Invalid Android tcp reverse port: ${e}`);return`tcp:${e}`}function T(e,t){let n=u.extname(t)||`.apk`;return`${e?.replaceAll(/[^a-zA-Z0-9_.-]+/g,`-`)||`android-app`}${n}`}async function E(e,t){let n=await i({apiUrl:e.apiUrl,token:e.token,logLevel:`warn`});return{platform:`ios`,lease:e.lease,instanceId:e.instanceId,ownership:e.ownership,device:e.device,client:n,token:e.token,dependencies:t}}async function D(e,t,n,r,i,a){i?.throwIfAborted();let s=await j(n,t.dependencies);try{i?.throwIfAborted();let n=await o(a,e.assets.getOrUpload({path:s.uploadPath,name:s.assetName},{signal:i}),i),c=(await O(t,n.signedDownloadUrl,{md5:n.md5,relaunch:r?.relaunch,appIdentifierHint:r?.appIdentifierHint},i,a)).appId;return{...c?{bundleId:c,launchTarget:c}:{},...s.appName?{appName:s.appName}:{}}}finally{await s.cleanup()}}async function O(e,n,r,i,a){i?.throwIfAborted();let s=await o(a,e.client.listApps(),i).catch(e=>{if(i?.aborted)throw e}),c=f((await o(a,e.client.installApp(n,{md5:r?.md5,launchMode:r?.relaunch?`RelaunchIfRunning`:`ForegroundIfRunning`}),i)).bundleId),l=f(r?.appIdentifierHint),u=[];for(let t of N){t>0&&await d(t,void 0,{signal:i}),u=await o(a,e.client.listApps(),i);let n=I({resultBundleId:c,requestedBundleId:l,beforeInstallApps:s,afterInstallApps:u});if(n)return{appId:n}}throw new t(`COMMAND_FAILED`,`Limrun iOS app installation could not be verified.`,{resultBundleId:c,requestedBundleId:l,installedUserApps:u.filter(R).map(e=>e.bundleId).sort()})}function k(e){return new A(e)}var A=class{session;constructor(e){this.session=e}async open(e,t){if(t?.url){await this.launch(e,t.launchArgs),await this.session.client.openUrl(t.url);return}if(n(e)){await this.session.client.openUrl(e);return}await this.launch(e,t?.launchArgs)}async launch(e,n=[]){let r=await this.session.dependencies.ios.resolveAppAlias(e);if(n.length===0){await this.session.client.launchApp(r);return}let i=await this.session.client.simctl([`launch`,`--terminate-running-process`,`booted`,r,...n]).wait();if(i.code!==0)throw new t(`COMMAND_FAILED`,`Limrun iOS could not launch ${r} with arguments.`,{bundleId:r,exitCode:i.code,stderr:i.stderr.trim()})}async openDevice(){}async close(e){e&&await this.session.client.terminateApp(await this.session.dependencies.ios.resolveAppAlias(e)).catch(()=>{})}async tap(e,t){await this.session.client.tap(e,t)}async tapElementSelector(e){await this.session.client.tapElement(s(e))}async doubleTap(e,t){await this.session.client.performActions([{type:`tap`,x:e,y:t},{type:`wait`,durationMs:F},{type:`tap`,x:e,y:t}])}async longPress(e,t,n=P){await this.session.client.performActions([{type:`touchDown`,x:e,y:t},{type:`wait`,durationMs:n},{type:`touchUp`,x:e,y:t}])}async focus(e,t){await this.tap(e,t)}async type(e,t){await this.enterText(e,t)}async fill(e,t,n,r){let{awaitLimrunTextEntryFocus:i,readLimrunUnambiguousTapTargets:a,readLimrunTextEntryFocus:o}=await import(`./text-entry-focus.js`),s=a(await this.session.client.elementTree(),e,t);await this.tap(e,t);let c=await i({targetsAtPoint:s,readFocus:async()=>o(await this.session.client.elementTree()),sleep:e=>d(e),x:e,y:t});return await this.session.client.pressKey(`a`,[`command`]),n.length===0?(await this.session.client.pressKey(`delete`),{textEntryReadiness:c}):(await this.enterText(n,r),{textEntryReadiness:c})}async enterText(t,n){if(n&&n>0){let r=0;try{for(let e of Array.from(t))await this.session.client.typeText(e,!1,{requireFocus:!1}),r+=1,await d(n)}catch(t){throw e(t,r)}return}await this.session.client.typeText(t,!1,{requireFocus:!1})}async scroll(e,t){await this.session.client.scroll(e,t?.pixels??300)}async screenshot(e){let{transcodeScreenshotToPngAsync:t}=await import(`./png-worker-client.js`).then(e=>e.s),n=await this.session.client.screenshot(),r=await t(Buffer.from(n.base64,`base64`),`Limrun iOS screenshot`);c.mkdirSync(u.dirname(e),{recursive:!0}),await c.promises.writeFile(e,r)}async snapshot(){let{captureLimrunIosSnapshot:e}=await import(`./ios-snapshot-adapter.js`);return await e(this.session)}async back(){await this.session.client.pressKey(`escape`)}async home(){await this.session.client.performActions([{type:`buttonDown`,button:`home`},{type:`buttonUp`,button:`home`}])}async readClipboard(){return(await this.pasteboard([`pbpaste`,`booted`])).stdout.replaceAll(`\r
2
- `,`
3
- `).replace(/\n$/,``)}async writeClipboard(e){await this.pasteboard([`pbcopy`,`booted`],e)}async pasteboard(e,n){let r=await this.session.client.simctl(e,n===void 0?void 0:{stdin:n}).wait();if(r.code!==0)throw new t(`COMMAND_FAILED`,`Limrun iOS could not access the clipboard.`,{command:e[0],exitCode:r.code,stderr:r.stderr.trim()});return r}async setOrientation(e){if(e===`portrait-upside-down`)throw z(`orientation`,`Limrun iOS direct sessions support portrait and landscape orientation, not portrait upside-down.`);await this.session.client.setOrientation(e===`portrait`?`Portrait`:`Landscape`)}async setSetting(e,t,n,r){let{setLimrunIosSetting:i}=await import(`./ios-settings.js`);return await i(this.session,e,t,n,r)}};async function j(e,t){if(!(await c.promises.stat(e)).isDirectory())return{uploadPath:e,assetName:u.basename(e),appName:M(e),cleanup:async()=>{}};let n=await c.promises.mkdtemp(u.join(l.tmpdir(),`agent-device-limrun-ios-app-`)),r=u.join(n,`${u.basename(e)}.zip`);try{await t.host.archiveDirectory({sourceDirectory:u.dirname(e),entryName:u.basename(e),archivePath:r})}catch(e){throw await c.promises.rm(n,{recursive:!0,force:!0}),e}return{uploadPath:r,assetName:u.basename(r),appName:await t.ios.readBundleAppName(e)??M(e),cleanup:async()=>{await c.promises.rm(n,{recursive:!0,force:!0})}}}function M(e){return u.basename(e).replace(/\.(?:app|ipa|apk|aab|zip)$/i,``)||void 0}const N=[0,250],P=800,F=80;function I(e){let t=new Set(e.afterInstallApps.map(e=>e.bundleId));return(e.resultBundleId&&t.has(e.resultBundleId)?e.resultBundleId:void 0)??(e.requestedBundleId&&t.has(e.requestedBundleId)?e.requestedBundleId:void 0)??L(e.beforeInstallApps,e.afterInstallApps)}function L(e,t){if(!e)return;let n=new Set(e.map(e=>e.bundleId)),r=t.filter(e=>R(e)&&!n.has(e.bundleId));return r.length===1?r[0]?.bundleId:void 0}function R(e){return!e.bundleId.startsWith(`com.apple.`)&&!e.installType.toLowerCase().includes(`system`)}function z(e,n){throw new t(`UNSUPPORTED_OPERATION`,n,{command:e})}function B(e){return e.platform===`android`?V(e):H(e)}function V(e){let t=e.adbProvider.exec;return{platform:`android`,device:e.device,interactor:m(e),adb:e.adbProvider,listApps:async n=>await e.dependencies.android.listApps(t,r(n)),getForegroundApp:async n=>await e.dependencies.android.getForegroundApp(e.device,t,n),pressKey:async(t,n)=>{await e.client.pressKey(t,n)},getKeyboardState:async()=>await e.dependencies.android.getKeyboardState(t),dismissKeyboard:async()=>await e.dependencies.android.dismissKeyboard(t),readLogs:async n=>await e.dependencies.android.readLogs(t,n),...U(e.client,e.token,e.dependencies.host),installRemoteApp:async t=>{await e.client.sendAsset(t)}}}function H(e){return{platform:`ios`,device:e.device,interactor:k(e),viewport:{width:e.client.deviceInfo.screenWidth,height:e.client.deviceInfo.screenHeight},listApps:async t=>(await e.client.listApps()).filter(e=>r(t)===`all`||R(e)).map(e=>({id:e.bundleId,name:e.name,installType:e.installType})).sort((e,t)=>e.id.localeCompare(t.id)),pressKey:async(t,n)=>{await e.client.pressKey(t,n)},readLogs:async(t,n)=>await e.client.appLogTail(t,n),...U(e.client,e.token,e.dependencies.host),installRemoteApp:async(t,n)=>await O(e,t,n),runSimctl:t=>e.client.simctl(t)}}function U(e,t,n){return{startRecording:async t=>{await e.startRecording(t)},stopRecording:async()=>({downloadUrl:await e.stopRecording({})}),downloadRecording:async e=>{await n.downloadFile({url:e.downloadUrl,headers:{Authorization:`Bearer ${t}`},destinationPath:e.outPath,timeoutMs:6e4})}}}export{_ as a,p as c,D as i,h as l,k as n,g as o,E as r,m as s,B as t};
@@ -1 +0,0 @@
1
- import{createHash as e}from"node:crypto";const t=`limrun`,n={provider:t,label:`Limrun`,fields:{providerApp:`consumed`,providerOsVersion:`refused`,providerDeviceType:`refused`,providerProject:`refused`,providerBuild:`refused`,providerSessionName:`refused`,providerDeviceOrientation:`refused`,providerGeoLocation:`refused`,providerTimezone:`refused`,providerAppiumVersion:`refused`,providerLanguage:`refused`,providerLocale:`refused`,providerNetworkProfile:`refused`,providerCustomNetwork:`refused`,providerNoResignApp:`refused`,awsProjectArn:`refused`,awsDeviceArn:`refused`,awsAppArn:`refused`,awsRegion:`refused`,awsInteractionMode:`refused`}},r=t;function i(e){if(e===`ios-instance`)return`ios`;if(e===`android-instance`)return`android`}function a(e,t,n){return{platform:e===`ios`?`apple`:`android`,...e===`ios`?{appleOs:`ios`}:{},id:c(e,t.leaseId),name:`Limrun ${e} ${n.slice(0,8)}`,kind:e===`ios`?`simulator`:`emulator`,target:`mobile`,booted:!0}}function o(t){return`attached-${e(`sha256`).update(t).digest(`hex`).slice(0,12)}`}function s(e){let[t,n,i]=e.split(`:`);if(t===r&&(n===`ios`||n===`android`)&&i)return{platform:n,leaseId:i}}function c(e,t){return`${r}:${e}:${t}`}function l(e){let t=s(e.id);return!t||e.target!==`mobile`?!1:t.platform===`ios`?u(e):d(e)}function u(e){return e.platform===`apple`&&e.appleOs===`ios`&&e.kind===`simulator`&&e.iosPhysicalDeviceBackend===void 0}function d(e){return e.platform===`android`&&e.appleOs===void 0&&e.kind===`emulator`&&e.iosPhysicalDeviceBackend===void 0}export{l as a,a as i,t as n,s as o,o as r,i as s,n as t};
@@ -1,3 +0,0 @@
1
- import{P as e}from"./sdk-contracts.js";import{E as t}from"./sdk-device.js";import{s as n}from"./device-shell.js";import{i as r,n as i,t as a}from"./device-claim-inspection.js";import{t as o}from"./shared.js";const s=async({positionals:t,flags:n})=>{if(t.length!==1||t[0]!==`status`&&t[0]!==`release`)throw new e(`INVALID_ARGS`,`device accepts only: status, release`);if(t[0]===`release`)return await c(n);let s=r({platform:n.platform,device:n.device,udid:n.udid,serial:n.serial}),l=s.filter(e=>i(e.classification)),u=(n.stale?l:s.filter(e=>!i(e.classification))).map(m),d={claims:u,...n.stale?{}:{hiddenStaleClaims:l.length}};return await o(n,d,()=>g(u,{staleOnly:n.stale===!0,hiddenStaleClaims:l.length,staleCommand:x(n,`status`),releasableClaims:l.filter(e=>a(e.classification)).length,releaseCommand:x(n,`release`)})),!0};async function c(t){if(t.stale!==!0)throw new e(`INVALID_ARGS`,`device release only releases provably stale claims; pass --stale to confirm.`,{hint:`A live owner is released by closing its session from its own workspace, or by stopping its daemon: agent-device daemon stop --state-dir <owner state dir>.`});let{runStaleDeviceClaimRelease:n}=await import(`./device-release.js`),r=await n({platform:t.platform,device:t.device,udid:t.udid,serial:t.serial}),i={released:r.filter(e=>e.status===`released`).map(l),retained:r.filter(e=>e.status===`retained`).map(l),refused:r.filter(e=>e.status===`refused`).map(l),changed:r.filter(e=>e.status===`changed`).map(l)};return await o(t,i,()=>u(r)),!0}function l(e){let{device:t,...n}=e;return{...n,...t?{device:h(t)}:{}}}function u(e){return e.length===0?`No local device claims matched.`:e.map(d).join(`
2
- `)}function d(e){let n=e.device?`${t({platform:e.device.family,appleOs:e.device.appleOs})} ${e.device.name}`:e.deviceKey??e.fileName,r=f(e);switch(e.status){case`released`:return`released ${n}${r}`;case`retained`:return`retained ${n}${r} — resources not settled (${e.reason}); the claim stays until they are.`;case`refused`:return`refused ${n}${r} — ${e.reason} (${e.classification}); ${p(e)}`;case`changed`:return`changed ${n} — the claim changed while releasing; re-run device status.`}}function f(e){return e.allocator?` allocator=${e.allocator.instanceId} incarnation=${e.allocator.identityIncarnationId}`:e.session?` session=${e.session} workspace=${e.workspace}`:``}function p(e){return e.classification===`allocator-held`?`held by its managed-device allocator; it is cleared only after the allocator proves the identity removed.`:e.classification===`live`||e.classification===`owner-state-dir-gone`?e.stateDir?`close the owning session from its workspace, or stop its daemon: agent-device daemon stop --state-dir ${n(e.stateDir)}`:`close the owning session from its workspace first.`:`only provably dead owners are released; nothing was changed.`}function m(e){let t=e.claim??e.allocatorClaim;return{...e.deviceKey?{deviceKey:e.deviceKey}:{},...t?{}:{fileName:e.fileName},classification:e.classification,...t?{device:h(t.device)}:{},...e.claim?{owner:{session:e.claim.session,workspace:e.claim.workspace,stateDir:e.claim.stateDir,pid:e.claim.ownerPid,startTime:e.claim.ownerStartTime}}:{},...e.allocatorClaim?{owner:{kind:`allocator`,stateDir:e.allocatorClaim.stateDir,allocator:e.allocatorClaim.allocator}}:{},...e.error?{error:e.error}:{}}}function h(e){let{family:n,...r}=e;return{...r,platform:t({platform:n,appleOs:e.appleOs})}}function g(e,t){let n=e.map(v);if(n.length===0){if(t.staleOnly)return`No stale local device claims found.`;if(t.hiddenStaleClaims===0)return`No local device claims found.`}return[...n.length===0?[`No live local device claims found.`]:n,..._(t)].join(`
3
- `)}function _(e){if(e.staleOnly)return e.releasableClaims>0?[`Release provably dead owners with: ${e.releaseCommand}`]:[];if(e.hiddenStaleClaims===0)return[];let t=e.hiddenStaleClaims===1?`claim`:`claims`;return[`${e.hiddenStaleClaims} stale ${t} hidden; inspect with: ${e.staleCommand}`]}function v(e){return`${y(e)}: ${e.classification}${b(e.owner)}`}function y(e){let t=e.device;return t?`${t.platform??`unknown`} ${t.name??t.id??`claim`}`:String(e.deviceKey??e.fileName??`claim`)}function b(e){if(!e||typeof e!=`object`)return``;let t=e;return t.allocator?` allocator=${t.allocator.instanceId} incarnation=${t.allocator.identityIncarnationId} installation=${t.stateDir}`:` session=${t.session} workspace=${t.workspace}`}function x(e,t){let r=[e.platform?`--platform ${n(e.platform)}`:null,e.device?`--device ${n(e.device)}`:null,e.udid?`--udid ${n(e.udid)}`:null,e.serial?`--serial ${n(e.serial)}`:null].filter(e=>!!e);return[`agent-device device ${t}`,...r,`--stale`].join(` `)}export{s as deviceCommand};
@@ -1,4 +0,0 @@
1
- import{P as e,it as t}from"./sdk-contracts.js";import{v as n}from"./sdk-batch-runner.js";import{a as r,c as i,r as a}from"./diagnostics.js";import"./diagnostics2.js";import{E as o,O as s,a as c,f as l,i as ee,n as te,u as ne}from"./sdk-device.js";import{S as re,cn as ie,er as ae,m as oe,tr as se,un as u}from"./sdk-batch.js";import{t as ce}from"./recording-scope.js";import{a as le}from"./scroll-gesture.js";import{_ as d,c as ue,d as de,g as fe,h as pe,i as me,l as he,m as ge,o as _e,p as f,s as ve,u as p,y as ye}from"./script.js";import{C as be,D as xe,E as Se,F as Ce,M as we,O as Te,P as Ee,S as De,T as Oe,a as ke,b as Ae,d as je,i as Me,j as Ne,k as Pe,l as Fe,o as Ie,r as Le,s as Re,v as m,w as ze,x as Be,y as Ve}from"./provider-device-admission.js";import{n as h,t as He}from"./catalog.js";import{o as Ue,t as g}from"./back-mode.js";import{t as We}from"./session.js";import{r as Ge}from"./success-text.js";import{t as Ke}from"./click-button.js";import"./device.js";import{r as _,t as qe}from"./device-rotation.js";import{j as Je}from"./owner-identity.js";import"./file.js";import{t as Ye}from"./tv-remote.js";import{n as Xe,r as Ze,t as Qe}from"./session-paths.js";import{i as $e,n as et,r as tt}from"./session-artifact-paths.js";import{i as nt,r as rt,t as it}from"./session-repair-tombstone.js";import{t as at}from"./keyboard-actions.js";import{n as ot,r as st}from"./device-isolation.js";import{a as ct,i as lt,r as ut}from"./device-inventory-context.js";import{AsyncLocalStorage as dt}from"node:async_hooks";import{createHash as ft}from"node:crypto";import v from"node:fs";import y from"node:path";import{StringDecoder as pt}from"node:string_decoder";function mt(e,t={}){let n=[e.command];return e.command===`snapshot`?de(n,e):e.command===`open`?me(n,e):e.command===`runtime`?ue(n,e,{includeAllPositionals:t.runtimeIncludeAllPositionals}):e.command===`record`?ve(n,e):e.command===`screenshot`?he(n,e):_e(n,e),n.join(` `)}function ht(e){return e.targetEvidences?[ae(e.targetEvidences)]:e.targetEvidence?[se(e.targetEvidence)]:[]}function b(e){return e?.scriptPublication??m}function gt(e,t){let n=b(e),r=typeof t.saveScript==`string`?Qe(t.saveScript):n.kind===`repair`?void 0:t.healedSiblingPath;e.scriptPublication=Ae(n,{requested:{path:r,force:t.force===!0},boundary:t.firstArm?e.actions.length:0,sourcePath:t.sourcePath})}function _t(e){e.scriptPublication=De(b(e))}function vt(e){e.scriptPublication=Se(b(e))}function yt(e,t){e.scriptPublication=xe(b(e),t)}function bt(e){e.scriptPublication=Ve(b(e))}function xt(e,t){let n=b(e);return n.kind===`repair`&&n.closeReceipt===t}function St(e){return b(e).kind===`repair`}function Ct(e){return Oe(b(e))}function x(e){return Te(b(e))}function wt(e){return Pe(b(e))}function Tt(e,t){if(t.flags?.noRecord||Ft(e,t))return;t.flags&&Fe(e,t.flags);let n=Dt(t),r=At(e,Ot(t,n));n&&kt(e,n);let i={ts:Date.now(),command:r.command,positionals:r.positionals,runtime:r.runtime,flags:Lt(r.flags),result:r.result,...r.targetEvidence?{targetEvidence:r.targetEvidence}:{},...r.targetEvidences?{targetEvidences:r.targetEvidences}:{}};return e.actions.push(i),a({level:`debug`,phase:`record_action`,data:{command:t.command,session:e.name}}),i}function Et(e,t,n,r,i,a){!t||!e.resolveCurrent(t)||e.recordAction(t,{command:r,positionals:a?.positionals??n.positionals??[],flags:a?.flags??n.flags??{},result:i??{}})}function Dt(e){if(e.command!==`fill`||typeof e.flags.recordAs!=`string`)return;let t=Ce(e.flags.recordAs),n=Ee(t);return{literal:we({ts:0,command:e.command,positionals:e.positionals,flags:e.flags}),placeholder:n}}function Ot(e,t){if(!t)return e;let{literal:n,placeholder:r}=t;return{...e,positionals:Mt(e.positionals,r),result:Le(e.result,n,r),targetEvidence:Me(e.targetEvidence,n,r)}}function kt(e,t){t.literal.trim()&&(e.recordedFillLiterals??=new Map,!e.recordedFillLiterals.has(t.literal)&&e.recordedFillLiterals.set(t.literal,t.placeholder))}function At(e,t){let n=e.recordedFillLiterals;if(!n||n.size===0)return t;let r=ke(t.result,n),i=(t.targetEvidenceMode??`action`)===`landmark`?jt(t.targetEvidence,n):S(t.targetEvidence,n),a=t.targetEvidences?{source:S(t.targetEvidences.source,n),destination:S(t.targetEvidences.destination,n)}:t.targetEvidences;return{...t,result:r,targetEvidence:i,targetEvidences:a}}function jt(e,t){return e&&(Re(e,t)?void 0:e)}function S(e,t){return!e||!Re(e,t)?e:{...Ie(e,t),verification:`unverifiable`}}function Mt(e,t){let n=e[0];return n?.startsWith(`@`)?e.length>=3?[n,e[1],t]:[n,t]:e.length>=3&&Number.isFinite(Number(e[0]))&&Number.isFinite(Number(e[1]))?[e[0],e[1],t]:n===void 0?[t]:[n,t]}const Nt=new Set([`snapshot`,`get`,`is`,`find`]);function Pt(e){return e.internal?.replayPlanStep!==!0&&Nt.has(e.command)}function Ft(e,t){return!t.interactiveObservation||x(e)===void 0?!1:t.flags?.record!==!0}const It=Ue();function Lt(e){if(!e)return{};let t={};for(let n of It){let r=e[n];r!==void 0&&(t[n]=r)}return t}function C(e){return y.join(e,`idle-expiry.json`)}function Rt(e){let t;try{t=v.readFileSync(e,`utf8`)}catch{return}let n;try{n=JSON.parse(t)}catch{return}if(!(typeof n?.expiresAt!=`number`||!Number.isFinite(n.expiresAt))&&!(n.expiresAt<=Date.now())&&typeof n.owner==`string`&&!(!zt(n.expiredAtMs)||!zt(n.idleExpiryMs))&&(n.deviceKey===void 0||typeof n.deviceKey==`string`))return n}function zt(e){return typeof e==`number`&&Number.isFinite(e)&&e>=0}function Bt(t){let n=t.flatMap((e,t)=>e.command===`open`?[t]:[]);if(n.length!==1||n[0]!==0)throw new e(`COMMAND_FAILED`,`Cannot publish this session: an open-to-destination script requires exactly one initial recorded open.`,{retriable:!1,hint:`Close this session and start a fresh one with open <app> --save-script[=<path>].`});if(t.some(e=>e.command===`close`))throw new e(`COMMAND_FAILED`,`Cannot publish an active-session script containing close.`,{retriable:!1,hint:`Close this session and record the journey again from a fresh open --save-script session.`});let r=-1;for(let[e,n]of t.entries())re({command:n.command,positionals:n.positionals,flags:n.flags})===`mutates-app`&&(r=e);if(!t.slice(r+1).some(Gt))throw new e(`COMMAND_FAILED`,`Cannot publish this session without a portable destination guard after the final mutating action.`,{retriable:!0,hint:`Record a selector-targeted wait on a labeled or id-bearing landmark, for example wait 'role="heading" label="Screen X"', so its recorded identity is captured, then retry session save-script.`})}function Vt(t){for(let n of t){if(Ht(n)){Ut(n);continue}let t=Kt(n),r=t??(n.command===`wait`?n.positionals[0]:void 0);if(r?.startsWith(`@`))throw new e(`COMMAND_FAILED`,`Cannot publish recorded step "${n.command} ${r}": the session-local ref was not converted to a portable selector.`,{retriable:!1,hint:`Close this session and record the journey again using selectors or resolvable refs.`});if(n.command===`find`&&re(n)===`mutates-app`)throw new e(`COMMAND_FAILED`,`Cannot publish a recorded mutating find step because its target identity is not replay-verifiable.`,{retriable:!1,hint:`Close this session and record the journey again with an explicit selector-targeted click, press, fill, or focus action.`});let i=t;if(!(!i||!u(i)||n.targetEvidence))throw new e(`COMMAND_FAILED`,`Cannot publish recorded step "${n.command} ${i}": recording-time target identity evidence is missing.`,{retriable:!1,hint:`Close this session and record the journey again from open --save-script so target-v1 evidence is captured before each interaction.`})}}function Ht(e){return w(e)!==void 0}function Ut(t){let n=w(t);if(!n)return;let r=[n.source,n.destination];for(let n of r){if(n?.startsWith(`@`))throw new e(`COMMAND_FAILED`,`Cannot publish recorded drag endpoint "${n}": the session-local ref was not converted to a portable selector.`,{retriable:!1});if(!(!n||!u(n))&&!t.targetEvidences)throw new e(`COMMAND_FAILED`,`Cannot publish recorded drag endpoint "${n}": recording-time target identity evidence is missing.`,{retriable:!1,hint:`Close this session and record the journey again so targets-v1 evidence is captured for both drag endpoints.`})}}function w(e){return e.command===`gesture`?ye(e.positionals):void 0}function Wt(t,n){if(t instanceof e){if(t.details?.reason===`script_target_exists`)return new e(t.code,`A file already exists at ${String(t.details.path)}.`,{...t.details,retriable:!0,hint:`Retry session save-script with another path, or pass --force to replace the existing file. The session remains armed.`});let n=t.details?.retriable===!0;return new e(t.code,t.message,{...t.details,retriable:n,hint:t.details?.hint??(n?`Fix the recorded journey or target, then retry session save-script. The session remains armed.`:`Close this session and start a fresh one with open <app> --save-script[=<path>].`)})}let r=t instanceof Error?t.message:String(t);return new e(`COMMAND_FAILED`,`Failed to publish the active session script${n?` to ${n}`:``}: ${r}`,{retriable:!0,hint:`Check the target path and permissions, then retry session save-script. The session remains armed.`})}function Gt(e){if(e.command!==`wait`)return!1;let t=ie(e.positionals);return t?.kind!==`selector`||!u(t.selectorExpression)?!1:e.targetEvidence?.verification===`verified`}function Kt(e){if(e.command===`get`)return e.positionals[1];if(fe(e.command)||e.command===`fill`){let[t,n]=e.positionals;return t!==void 0&&n!==void 0&&qt(t)&&qt(n)?void 0:t}}function qt(e){return e.trim().length>0&&Number.isFinite(Number(e))}function Jt(e){let t=e.scriptPublication??m;return t.kind===`repair`?t.status===`committed`||!ze(t):!1}function Yt(e){return!be(e.scriptPublication??m)||Jt(e)}var Xt=class{sessionsDir;constructor(e){this.sessionsDir=e}write(e,t){let n=St(e),r=t?.publication===`active`,i;try{if(Yt(e))return{written:!1};let a=Zt(e,{appendCompleteSentinel:n,activePublication:r});i=this.resolveScriptPath(e);let o=y.dirname(i);return v.existsSync(o)||v.mkdirSync(o,{recursive:!0}),en({scriptPath:i,script:a.script,force:t?.force}),n&&(e.scriptPublication=Be(e.scriptPublication??m)),{written:!0,path:i,actionCount:a.actionCount}}catch(t){return Qt({session:e,error:t,scriptPath:i,repairArmed:n,activePublication:r})}}resolveScriptPath(e){let t=Ne(e.scriptPublication??m);if(t)return Qe(t);let n=Ze(e.name),r=new Date(e.createdAt).toISOString().replaceAll(/[:.]/g,`-`);return y.join(this.sessionsDir,`${n}-${r}.ad`)}};function Zt(e,t){let n=tn(e,{strictPortableRefs:t.activePublication});return t.activePublication&&Bt(n),{script:fn(e,n,t.appendCompleteSentinel),actionCount:n.length}}function Qt(t){let{session:n,error:r,scriptPath:i,repairArmed:o,activePublication:s}=t;if(a({level:`warn`,phase:`session_script_write_failed`,data:{session:n.name,path:i,error:r instanceof Error?r.message:String(r)}}),o)return{written:!1,error:$t(r,i)};if(s)return{written:!1,error:Wt(r,i)};if(r instanceof e)throw r;return{written:!1}}function $t(t,n){if(t instanceof e)return t;let r=t instanceof Error?t.message:String(t);return new e(`COMMAND_FAILED`,`Failed to write the healed script${n?` to ${n}`:``}: ${r}`,{hint:`The repair transaction completed but the healed .ad could not be published; check the target path and permissions, then retry close --save-script.`})}function en(t){let{scriptPath:n,script:r,force:i}=t;try{Je({destination:n,contents:r,publish:i?`replace`:`link-exclusive`})}catch(t){throw t.code===`EEXIST`?new e(`COMMAND_FAILED`,`A file already exists at ${n}; remove it, pass replay --save-script=<other-path>, or pass --force/--overwrite to replace it.`,{reason:`script_target_exists`,path:n}):t}}function tn(e,t={}){let n=x(e),r=n!==void 0,i=e.actions.slice(n??0),a=[];for(let n of i){if(n.command===`snapshot`)continue;let i=an(n);if(i){a.push(i);continue}(r||t.strictPortableRefs)&&nn(n);let o=dn(e,n);o&&a.push(o),a.push(n)}return t.strictPortableRefs&&Vt(a),a}function nn(t){let n=t.command===`gesture`?ye(t.positionals??[]):void 0;if(n){rn(n);return}if(!T(t.command))return;let r=t.command===`get`?t.positionals?.[1]:t.positionals?.[0];if(r?.startsWith(`@`))throw new e(`COMMAND_FAILED`,`Cannot write recorded step "${t.command} ${r}" to a script: it never resolved to a selector, so the ref would not resolve in a fresh replay session.`)}function rn(t){let n=[t.source,t.destination].find(e=>e.startsWith(`@`));if(n)throw new e(`COMMAND_FAILED`,`Cannot write recorded drag endpoint "${n}" to a script: it never resolved to a selector, so the ref would not resolve in a fresh replay session.`)}function an(e){let t=on(e);if(!(!t||!T(e.command)))return pe(e.command)||e.command===`hover`?{...e,positionals:[t]}:e.command===`longpress`?cn(e,t):e.command===`fill`?sn(e,t):ln(e,t)}function on(e){let t=Array.isArray(e.result?.selectorChain)&&e.result.selectorChain.every(e=>typeof e==`string`)?e.result.selectorChain:[];return t.length>0?t.join(` || `):void 0}function T(e){return fe(e)||e===`fill`||e===`get`}function sn(e,t){let n=we(e);return n.length>0?{...e,positionals:[t,n]}:void 0}function cn(e,t){let n=typeof e.result?.durationMs==`number`?String(e.result.durationMs):un(e.positionals??[]);return{...e,positionals:n?[t,n]:[t]}}function ln(e,t){let n=e.positionals?.[0];return n===`text`||n===`attrs`?{...e,positionals:[n,t]}:void 0}function un(e){let t=e.at(-1);if(!(e.length<=1||t===void 0||t.trim()===``))return Number.isFinite(Number(t))?t:void 0}function dn(e,t){if(!T(t.command))return;let n=t.result?.refLabel;if(typeof n!=`string`||n.trim().length===0)return;let r=n.trim();return{ts:t.ts,command:`snapshot`,positionals:[],flags:{platform:e.device.platform,snapshotInteractiveOnly:!0,snapshotScope:r},result:{scope:r}}}function fn(e,t,n){let r=[],i=e.device.kind?` kind=${e.device.kind}`:``;r.push(`context platform=${o(e.device)} device=${ge(e.device.name)}${i} theme=unknown`);for(let e of t)e.flags?.noRecord||(r.push(...ht(e)),r.push(pn(e)));return n&&r.push(`# agent-device:heal-complete`),`${r.join(`
2
- `)}\n`}function pn(e){return mn([e.command],e)||mt(e)}function mn(e,t){if(pe(t.command))return hn(e,t);if(t.command===`fill`)return gn(e,t);if(t.command===`get`)return _n(e,t)}function hn(e,t){let n=t.positionals?.[0];if(n){if(n.startsWith(`@`))return e.push(f(d(n))),E(e,t),p(e,t),e.join(` `);if(t.positionals.length===1)return e.push(f(n)),p(e,t),e.join(` `)}}function gn(e,t){let n=t.positionals?.[0];if(!n?.startsWith(`@`))return;e.push(f(d(n))),E(e,t);let r=t.positionals.slice(1).join(` `);return t.positionals.length>1&&e.push(f(r)),p(e,t),e.join(` `)}function _n(e,t){let n=t.positionals?.[0],r=t.positionals?.[1];if(!(!n||!r))return e.push(f(n)),e.push(f(d(r))),r.startsWith(`@`)&&E(e,t),e.join(` `)}function E(e,t){let n=t.result?.refLabel;typeof n==`string`&&n.trim().length>0&&e.push(f(n))}const vn=[`id`,`deviceId`,`device_id`,`serial`,`udid`,`device_udid`,`identifier`],yn={ios:`iOS`,ipados:`iPadOS`,tvos:`tvOS`,watchos:`watchOS`,visionos:`visionOS`,macos:`macOS`,apple:`Apple`,android:`Android`,linux:`Linux`,web:`Web`};function bn(e,t){let n=t??{};switch(e.command){case h.devices:return xn(n.devices);case h.apps:return Sn(n.apps,e.flags?.appsFilter);case h.boot:return Cn(`Booted`,n,!0);case h.shutdown:return Cn(`Shut down`,n,!1);case h.install:return wn(`Installed`,n);case h.reinstall:return wn(`Reinstalled`,n);case h.screenshot:return Tn(e,n);default:return{}}}function xn(e){if(!Array.isArray(e))return{};let t=e.flatMap(e=>{let t=Dn(e);return t?[t]:[]}),n=t.slice(0,5),r=Math.max(0,t.length-n.length),i=t.slice(0,3);return{summary:Fn(`Found ${t.length} ${In(`device`,t.length)}`,i.map(e=>D(e,!0)),Math.max(0,t.length-i.length)),details:{deviceCount:t.length,devices:n,...r>0?{omittedDeviceCount:r}:{}}}}function Sn(e,t){if(!Array.isArray(e))return{};let n=e.flatMap(e=>{let t=A(e);return t?[t]:[]}),r=n.slice(0,5),i=Math.max(0,n.length-r.length),a=n.slice(0,3);return{summary:Fn(`Found ${n.length} ${In(`app`,n.length)}`,a,Math.max(0,n.length-a.length)),details:{appCount:n.length,apps:r,...i>0?{omittedAppCount:i}:{},...t===`all`||t===`user-installed`?{filter:t}:{}}}}function Cn(e,t,n){let r=On(t);if(!r)return{};let i={device:r,...Nn(t),booted:n};return{summary:`${e} ${D(i,!1)}`,details:i}}function wn(e,t){let n=A(t.appName),r=A(t.bundleId),i=O(t,[`packageName`,`package`]),a=A(t.platform),o=A(t.launchTarget),s=O(t,[`bundleId`,`packageName`,`package`,`appId`,`launchTarget`]),c=Pn(n,s);if(!c)return{};let l={};return k(l,`appName`,n),k(l,`bundleId`,r),k(l,`packageName`,i),k(l,`platform`,a),o!==s&&k(l,`launchTarget`,o),{summary:`${e} ${c}`,details:l}}function Tn(e,t){let n=En(e,t);return n?{details:{requestedFileName:n}}:{}}function En(e,t){let n=I(e.meta?.clientArtifactPaths?.path)??I(t.path);if(n)return F(n)}function Dn(e){if(!n(e))return;let t=On(e);if(t)return{name:t,...Nn(e)}}function On(e){let t=O(e,[`name`,`deviceName`,`device`]);return!t||!kn(e,t)?t:jn(e)}function kn(e,t){let n=An(t);return vn.some(t=>{let r=A(e[t]);return r!==void 0&&An(r)===n})}function An(e){return e.toLowerCase()}function jn(e){let t=A(e.appleOs),n=A(e.platform),r=A(e.kind),i=Mn(t,n);return i&&(r===`simulator`||r===`emulator`)?`${i} ${r}`:i?`${i} device`:r===`simulator`?`Simulator`:r===`emulator`?`Emulator`:`Unnamed device`}function Mn(e,t){let n=e??t;if(!(!n||!Object.hasOwn(yn,n)))return yn[n]}function Nn(e){let t=A(e.platform),n=A(e.appleOs),r=A(e.kind),i=A(e.target);return{...t?{platform:t}:{},...n?{appleOs:n}:{},...r?{kind:r}:{},...i?{target:i}:{},...typeof e.booted==`boolean`?{booted:e.booted}:{}}}function D(e,t){let n=A(e.name)??A(e.device)??`device`,r=A(e.platform),i=A(e.appleOs),a=[r,i===r?void 0:i,A(e.kind),A(e.target),t&&typeof e.booted==`boolean`?e.booted?`booted`:`stopped`:void 0].filter(e=>!!e);return a.length>0?`${n} (${a.join(`, `)})`:n}function Pn(e,t){return e&&t&&e!==t?`${e} (${t})`:e??t}function O(e,t){for(let n of t){let t=A(e[n]);if(t)return t}}function k(e,t,n){n&&(e[t]=n)}function Fn(e,t,n){let r=[...t,...n>0?[`+${n} more`]:[]];return r.length>0?`${e}: ${r.join(`, `)}`:e}function In(e,t){return t===1?e:`${e}s`}function A(e){let t=I(e);if(!t)return;let n=t.trim(),r=Array.from(n);return r.length<=120?n:`${r.slice(0,119).join(``)}…`}function j(e){return A(e)}function M(e){return typeof e==`boolean`?e:void 0}function N(e,t){let n=j(e);return n&&t.includes(n)?n:void 0}function P(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function F(e){let t=I(e);return t?A(t.split(/[\\/]/).at(-1)):void 0}function I(e){if(typeof e==`string`)return e.trim().length>0?e:void 0}function L(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}const Ln=[`up`,`down`,`left`,`right`],Rn=[`top`,`bottom`];function zn(e){return`${e.command===h.reinstall?`Reinstalled`:`Installed`} ${Un(e.result??{})??`app`}`}function Bn(e){let t=e.result??{};switch(e.command){case h.scroll:return Gn(t);case h.screenshot:return Jn(t);case h.home:return`Went home`;case h.back:return Xn(t);case h.appSwitcher:return`Opened app switcher`;case h.actionButton:return`Pressed Action Button`;case h.orientation:return Qn(t);case h.fold:return Zn(t);case h.viewport:return $n(t);case h.clipboard:return er(t);case h.keyboard:return tr(t);case h.tvRemote:return ir(t);case h.gesture:return ar(t);case h.swipe:return or(t);case h.trace:return cr(`trace`,e);case h.record:return cr(`recording`,e);default:return}}function Vn(e){let t=e.result??{};switch(e.command){case h.scroll:return P({direction:N(t.direction,Ln),edge:N(t.edge,Rn),passes:L(t.passes),amount:L(t.amount),pixels:L(t.pixels),durationMs:L(t.durationMs),x1:L(t.x1),y1:L(t.y1),x2:L(t.x2),y2:L(t.y2)});case h.screenshot:return P({requestedFileName:Yn(t)});case h.back:return P({mode:N(t.mode,g)});case h.orientation:return P({orientation:N(t.orientation,qe)});case h.fold:return P({pose:N(t.pose,_)});case h.viewport:return P({width:L(t.width),height:L(t.height)});case h.clipboard:return P({action:N(t.action,[`read`,`write`])});case h.keyboard:return rr(t);case h.tvRemote:return P({button:N(t.button,Ye),durationMs:L(t.durationMs)});case h.gesture:case h.swipe:return sr(t);case h.trace:case h.record:return P({action:N(t.action,[`start`,`stop`]),fileName:ur(e),showTouches:M(t.showTouches)});default:return{}}}function Hn(e,t){if(e.command!==h.screenshot)return t;let n=En(e,t);return n?{...t,requestedFileName:n}:t}function Un(e){let t=j(e.appName),n=dr(e,[`bundleId`,`packageName`,`appBundleId`,`launchTarget`]);return t&&n&&t!==n?`${t} (${n})`:t??n??Wn(e)}function Wn(e){let t=j(e.app);return t&&!t.includes(`/`)&&!t.includes(`\\`)?t:void 0}function Gn(e){let t=N(e.direction,Ln),n=N(e.edge,Rn),r=L(e.passes);return n?Kn(n,r):t?qn(t,e):`Scrolled`}function Kn(e,t){return t===0?`Already at ${e}`:t===void 0?`Scrolled to ${e}`:`Scrolled to ${e} in ${t} ${t===1?`pass`:`passes`}`}function qn(e,t){let n=L(t.pixels);if(n!==void 0)return`Scrolled ${e} by ${n}px`;let r=L(t.amount);return r===void 0?`Scrolled ${e}`:`Scrolled ${e} by ${r}`}function Jn(e){let t=Yn(e);return t?`Captured screenshot ${t}`:`Captured screenshot`}function Yn(e){return F(e.requestedFileName)??F(e.path)}function Xn(e){return N(e.mode,g)===`system`?`Went back using system navigation`:`Went back`}function Zn(e){let t=N(e.pose,_);return t?`Folded to ${t}`:`Changed fold pose`}function Qn(e){let t=N(e.orientation,qe);return t?M(e.confirmed)===!1?`Requested ${t} (unconfirmed)`:`Rotated to ${t}`:`Changed orientation`}function $n(e){let t=L(e.width),n=L(e.height);return t!==void 0&&n!==void 0?`Set viewport to ${t}×${n}`:`Changed viewport`}function er(e){let t=N(e.action,[`read`,`write`]);return t===`read`?`Read clipboard`:t===`write`?`Updated clipboard`:`Used clipboard`}function tr(e){let t=I(e.action);if(!t||!at(t))return`Used keyboard`;if(t===`dismiss`)return nr(e);if(t===`enter`||t===`return`)return`Pressed keyboard return`;let n=M(e.visible);return n===void 0?`Inspected keyboard`:n?`Keyboard is visible`:`Keyboard is hidden`}function nr(e){return M(e.dismissed)===!1?`Keyboard was already hidden`:`Dismissed keyboard`}function rr(e){let t=I(e.action);return P({action:t&&at(t)?t:void 0,platform:N(e.platform,[`ios`,`android`]),visible:M(e.visible),wasVisible:M(e.wasVisible),dismissed:M(e.dismissed),attempts:L(e.attempts),mechanism:N(e.mechanism,[`dismissKey`])})}function ir(e){let t=N(e.button,Ye);return t?`Pressed TV remote ${t}`:`Used TV remote`}function ar(e){let t=N(e.kind,[`fling`,`pan`,`pinch`,`rotate`,`transform`]);return t?`Ran ${t} gesture`:`Ran gesture`}function or(e){let t=L(e.count);return t!==void 0&&t>1?`Swiped ${t} times`:`Swiped`}function sr(e){return P({kind:N(e.kind,[`fling`,`pan`,`pinch`,`rotate`,`transform`]),durationMs:L(e.durationMs),pointerCount:L(e.pointerCount),x1:L(e.x1),y1:L(e.y1),x2:L(e.x2),y2:L(e.y2),count:L(e.count),pauseMs:L(e.pauseMs),pattern:N(e.pattern,[`one-way`,`ping-pong`]),scale:L(e.scale)})}function cr(e,t){let n=lr(e,N(t.result?.action,[`start`,`stop`])),r=ur(t);return r?`${n} ${r}`:n}function lr(e,t){return t===`start`?e===`trace`?`Started trace`:`Started recording`:t===`stop`?e===`trace`?`Stopped trace`:`Stopped recording`:e===`trace`?`Updated trace`:`Updated recording`}function ur(e){let t=e.result??{};return F(t.requestedFileName)??F(t.outPath)??F(t.path)??F(e.positionals[1])}function dr(e,t){for(let n of t){let t=j(e[n]);if(t)return t}}function fr(e){switch(e.command){case h.open:return`Opened ${R(e)??`session`}`;case h.close:return`Closed ${j(e.result?.session)??`session`}`;case h.click:case h.press:return`Tapped ${R(e)??`target`}`;case h.longPress:return`Long pressed ${R(e)??`target`}`;case h.hover:return`Hovered ${R(e)??`target`}`;case h.fill:return`Filled ${R(e)??`target`}`;case h.type:return`Typed text`;case h.install:case h.reinstall:case He.installSource:return zn(e);default:return Bn(e)??`Ran ${e.command}`}}function pr(e){return P({command:e.command,positionals:Sr(e),flags:Pr(e),...mr(e),...hr(e),...gr(e),...Vn(e)})}function mr(e){if(!_r(e.command))return{};let t=e.result??{};return P({ref:U(t),targetLabel:R(e),selectorChainLength:Ar(t.selectorChain)?.length,x:L(t.x),y:L(t.y),x2:L(t.x2),y2:L(t.y2),durationMs:L(t.durationMs)})}function hr(e){if(!vr(e.command))return{};let t=e.result??{};return P({platform:N(t.platform,c),target:N(t.target,te),appName:j(t.appName),appBundleId:j(t.appBundleId),bundleId:j(t.bundleId),packageName:j(t.packageName),launchTarget:j(t.launchTarget)})}function gr(e){let t=e.result??{};return e.command===h.snapshot?Array.isArray(t.nodes)?{nodeCount:t.nodes.length}:{}:e.command!==h.wait&&e.command!==h.find&&e.command!==h.get&&e.command!==h.is?{}:P({waitedMs:L(t.waitedMs),found:M(t.found)})}function _r(e){return e===h.click||e===h.press||e===h.longPress||e===h.hover||e===h.focus||e===h.fill}function vr(e){return e===h.open||e===h.install||e===h.reinstall||e===He.installSource}function R(e){let t=e.result??{};return yr(t)??br(t)??xr(t)??Or(e.positionals[0])}function yr(e){let t=U(e);if(t)return t.startsWith(`@`)?t:`@${t}`}function br(e){let t=L(e.x),n=L(e.y);if(t!==void 0&&n!==void 0)return`(${t}, ${n})`}function xr(e){return j(e.appName)??j(e.appBundleId)??j(e.bundleId)??j(e.packageName)}function Sr(e){if(e.positionals.length!==0)return e.command===h.type?[B(`text`)]:e.command===h.fill?Cr(e):e.command===h.find?wr(e):e.command===h.clipboard?Tr(e):e.command===h.push?Er(e,`app`,`payload`):e.command===h.triggerAppEvent?Er(e,`event`,`payload`):e.positionals.map(z)}function Cr(e){let t=B(`text`),n=e.result??{},r=U(n);if(r)return[`@${r}`,t];if(j(n.selector))return[B(`target`),t];let i=L(n.x),a=L(n.y);return i!==void 0&&a!==void 0?[String(i),String(a),t]:[t]}function wr(e){let t=+!!kr(e.positionals[0]);if(e.positionals[t]===void 0)return;let n=t+1,r=[...t===1?[String(e.positionals[0])]:[],B(`query`)],i=e.positionals[n];return i?i===`fill`||i===`type`?[...r,i,B(`text`)]:[...r,...e.positionals.slice(n).map(Dr)]:r}function Tr(e){let t=e.positionals[0]?.toLowerCase();return t===`read`?[`read`]:t===`write`?[`write`,B(`text`)]:e.positionals.map(z)}function Er(e,t,n){let[r,i,...a]=e.positionals;return[...r?[B(t)]:[],...i?[B(n)]:[],...a.map(z)]}function Dr(e){return e===`click`||e===`focus`||e===`exists`||e===`get`||e===`text`||e===`attrs`||e===`wait`?e:z(e)}function z(e){return Or(e)??B(`arg`)}function Or(e){if(!e)return;let t=e.trim();if(/^@[a-zA-Z0-9:_-]+$/.test(t))return t}function B(e){return`<${e}>`}function kr(e){return e===`text`||e===`label`||e===`value`||e===`role`||e===`id`}function Ar(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?e:void 0}const jr={enums:[{source:`platform`,values:ee},{source:`target`,values:te}]},Mr={booleans:[{source:`settle`}],numbers:[{source:`settleQuietMs`}]},Nr={[h.open]:{booleans:[{source:`relaunch`},{source:`testIme`}],enums:[{source:`surface`,values:We}]},[h.click]:V(),[h.press]:V(),[h.longPress]:V(),[h.hover]:V(),[h.fill]:Ir(),[h.type]:Ir(),[h.scroll]:{numbers:[{source:`pixels`},{source:`durationMs`}]},[h.gesture]:Lr(),[h.swipe]:Lr(),[h.screenshot]:{booleans:[{source:`overlayRefs`},{source:`screenshotFullscreen`,output:`fullscreen`},{source:`screenshotNoStabilize`,output:`noStabilize`},{source:`screenshotNormalizeStatusBar`,output:`normalizeStatusBar`}],numbers:[{source:`screenshotPixelDensity`,output:`pixelDensity`},{source:`screenshotScale`,output:`scale`}]},[h.snapshot]:{booleans:[{source:`snapshotInteractiveOnly`,output:`interactiveOnly`},{source:`snapshotDiff`,output:`diff`},{source:`snapshotRaw`,output:`raw`},{source:`snapshotCustomActions`,output:`actions`},{source:`snapshotForceFull`,output:`forceFull`}],numbers:[{source:`snapshotDepth`,output:`depth`}]},[h.back]:{enums:[{source:`backMode`,output:`mode`,values:g}]},[h.record]:{booleans:[{source:`hideTouches`}],numbers:[{source:`fps`}],enums:[{source:`recordingScope`,output:`scope`,values:ce}]},[h.apps]:{enums:[{source:`appsFilter`,output:`filter`,values:[`user-installed`,`all`]}]},[h.boot]:{booleans:[{source:`headless`}]},[h.close]:{booleans:[{source:`shutdown`}]}};function Pr(e){let t=e.flags??{},n={},r=Object.hasOwn(Nr,e.command)?Nr[e.command]:void 0;return H(n,t,jr),H(n,t,r),H(n,t,Fr(e.command)),Object.keys(n).length>0?n:void 0}function Fr(e){return oe(e)?Mr:void 0}function V(){return{booleans:[{source:`doubleTap`}],numbers:[{source:`count`},{source:`intervalMs`},{source:`holdMs`},{source:`jitterPx`}],enums:[{source:`clickButton`,values:Ke}]}}function Ir(){return{numbers:[{source:`delayMs`}]}}function Lr(){return{numbers:[{source:`pointerCount`},{source:`count`},{source:`pauseMs`}],enums:[{source:`pattern`,values:le}]}}function H(e,t,n){n&&(Rr(e,t,n.booleans??[]),zr(e,t,n.numbers??[]),Br(e,t,n.enums??[]))}function Rr(e,t,n){for(let r of n)Vr(e,r.output??r.source,t[r.source])}function zr(e,t,n){for(let r of n)Hr(e,r.output??r.source,t[r.source])}function Br(e,t,n){for(let r of n)Ur(e,r.output??r.source,t[r.source],r.values)}function U(e){let t=j(e.ref);if(!t)return;let n=t.startsWith(`@`)?t.slice(1):t;return/^[a-zA-Z0-9:_-]+$/.test(n)?n:void 0}function Vr(e,t,n){typeof n==`boolean`&&(e[t]=n)}function Hr(e,t,n){let r=L(n);r!==void 0&&(e[t]=r)}function Ur(e,t,n,r){let i=N(n,r);i!==void 0&&(e[t]=i)}const Wr=65536;function Gr(e){return ft(`sha256`).update(e,`utf8`).digest(`hex`).slice(0,32)}function W(e,t){let n=Yr(e);if(n===void 0)return!1;try{let e=qr(t),r=Buffer.allocUnsafe(Wr),i=0;do if(i=v.readSync(n,r,0,r.length,null),!e.push(r.subarray(0,i)))return!0;while(i>0);return e.end(),!0}finally{v.closeSync(n)}}async function Kr(e){let t=await Xr(e);if(t===void 0)return{lineCount:0,firstLineDigest:void 0};let n={lineCount:0,firstLineDigest:void 0};try{let e=qr(e=>{n.lineCount===0&&(n.firstLineDigest=Gr(e)),n.lineCount+=1}),r=Buffer.allocUnsafe(Wr);for(;;){let{bytesRead:n}=await t.read(r,0,r.length,null);if(e.push(r.subarray(0,n)),n===0)break}return e.end(),n}finally{await t.close()}}function G(e){let t;return W(e,e=>(t=Gr(e),!1)),t}function qr(e){let t=new pt(`utf8`),n=``,r=!1;return{push(i){if(r)return!1;let a=`${n}${t.write(i)}`,o=0;for(let t=a.indexOf(`
3
- `);t!==-1;t=a.indexOf(`
4
- `,o)){if(Jr(a.slice(o,t),e)===!1)return r=!0,!1;o=t+1}return n=a.slice(o),!0},end(){r||Jr(`${n}${t.end()}`,e)}}}function Jr(e,t){let n=e.endsWith(`\r`)?e.slice(0,-1):e;if(n.trim().length!==0)return t(n)}function Yr(e){try{return v.openSync(e,`r`)}catch(e){if(e.code===`ENOENT`)return;throw e}}async function Xr(e){try{return await v.promises.open(e,`r`)}catch(e){if(e.code===`ENOENT`)return;throw e}}const Zr=5242880;function Qr(e=process.env){let t=e.AGENT_DEVICE_EVENT_LOG_MAX_BYTES?.trim();if(t===void 0||!/^\d+$/.test(t))return Zr;let n=Number(t);return Number.isSafeInteger(n)&&n>0?n:Zr}function K(e){return`${e}.1`}function q(e){return`${e}.window.json`}function $r(e){let t;for(let n=0;n<3;n+=1){let n=Y(e);try{let t=ei(e);if(Y(e)===n)return t}catch(r){if(t=r,Y(e)===n)throw r}}throw t??J(e,`the window did not settle while reading`)}function ei(e){let t=K(e),n=si(e);if(n===`unverifiable`)throw J(e,`window file is invalid`);if(n===void 0)return ti(e,t);let r=n.at(-1);if(!r)throw J(e,`window file records no generation`);let i=ui(e),a=ni(e,r),o=[],s=ri({eventLogPath:e,rotatedPath:t,sidecar:n,activeStart:a,activeExists:i});return s!==void 0&&o.push({path:t,firstLineIndex:s}),i&&o.push({path:e,firstLineIndex:a}),{files:o,earliestCursor:o[0]?.firstLineIndex??a}}function ti(e,t){if(G(t)!==void 0)throw J(e,`a rotated event log exists with no window record`);return{files:ui(e)?[{path:e,firstLineIndex:0}]:[],earliestCursor:0}}function ni(e,t){let n=G(e);return n!==void 0&&n===t.firstLineDigest?t.firstLineIndex:t.firstLineIndex+t.lineCount}function ri(e){let{eventLogPath:t,rotatedPath:n,sidecar:r,activeStart:i,activeExists:a}=e,o=G(n);if(o===void 0)return;let s=r.find(e=>e.firstLineDigest===o);if(!s)throw J(t,`the rotated event log matches no window record`);let c=oi(n);if(c!==s.lineCount)throw J(t,`the rotated event log holds ${c} lines, the window recorded ${s.lineCount}`);if(a&&s.firstLineIndex+s.lineCount!==i)throw J(t,`retained event log generations are not contiguous`);return s.firstLineIndex}async function ii(e,t){let n=di(e);if(!n||n.size<t)return!1;let r=si(e);if(r===`unverifiable`)return await v.promises.rename(e,K(e)),!0;let i=await Kr(e);if(i.firstLineDigest!==void 0){let t=r??[],n=t.at(-1),a=n&&n.firstLineDigest===i.firstLineDigest?n:{firstLineIndex:n?n.firstLineIndex+n.lineCount:0,lineCount:i.lineCount,firstLineDigest:i.firstLineDigest};await li(e,(a===n?t:[...t,a]).slice(-2))}return await v.promises.rename(e,K(e)),!0}function ai(t,n){if(!(t>=n))throw new e(`COMMAND_FAILED`,`events cursor ${t} precedes the retained event log window; events before cursor ${n} were rotated out.`,{reason:`EVENT_LOG_CURSOR_EXPIRED`,cursor:t,earliestCursor:n,hint:`Resume with cursor ${n}, the oldest retained event; earlier events are no longer available.`})}function J(t,n){return new e(`COMMAND_FAILED`,`Session event log window cannot be verified: ${n}.`,{reason:`EVENT_LOG_WINDOW_UNVERIFIED`,path:t,hint:`Cursor positions for this session cannot be resolved. Delete ${t}, ${K(t)}, and ${q(t)} to restart the timeline, or read the files directly.`})}function oi(e){let t=0;return W(e,()=>{t+=1}),t}function Y(e){return[X(q(e)),X(e),X(K(e))].join(`|`)}function X(e){try{let t=v.lstatSync(e);return`${t.ino}:${t.size}:${t.mtimeMs}`}catch{return`absent`}}function si(e){let t;try{t=v.readFileSync(q(e),`utf8`)}catch(e){return e.code===`ENOENT`?void 0:`unverifiable`}try{let e=JSON.parse(t);if(!n(e)||e.version!==2)return`unverifiable`;let{generations:r}=e;if(!Array.isArray(r)||r.length===0)return`unverifiable`;let i=r.map(ci);return i.every(e=>e!==void 0)?i:`unverifiable`}catch{return`unverifiable`}}function ci(e){if(!n(e))return;let{firstLineIndex:t,lineCount:r,firstLineDigest:i}=e;if(!(!Number.isSafeInteger(t)||t<0)&&!(!Number.isSafeInteger(r)||r<0)&&typeof i==`string`&&i.length!==0)return{firstLineIndex:t,lineCount:r,firstLineDigest:i}}async function li(e,t){let n=q(e),r=`${n}.${process.pid}.tmp`;await v.promises.writeFile(r,JSON.stringify({version:2,generations:t}),`utf8`),await v.promises.rename(r,n)}function ui(e){return di(e)!==void 0}function di(t){try{let n=v.lstatSync(t);if(n.isSymbolicLink())throw new e(`COMMAND_FAILED`,`Session event log must not be a symbolic link: ${t}`);return n}catch(e){if(e.code===`ENOENT`)return;throw e}}const Z=new Map,fi=new Set;function pi(e){return y.join(e,`events.ndjson`)}function mi(e){return e.command!==h.events}function hi(e,n,r){let i=t({version:1,ts:r.ts??new Date().toISOString(),session:n,...r});_i(e,`${JSON.stringify(i)}\n`)}async function gi(e){await(e?Z.get(e):Promise.all(Z.values()))}function _i(e,t){let n=(Z.get(e)??Promise.resolve()).catch(()=>void 0).then(async()=>{await vi(e),await ii(e,Qr()),await v.promises.appendFile(e,t,`utf8`)}).catch(t=>{a({level:`warn`,phase:`session_event_log_write_failed`,data:{path:e,error:t instanceof Error?t.message:String(t)}})}).finally(()=>{Z.get(e)===n&&Z.delete(e)});Z.set(e,n)}async function vi(e){let t=y.dirname(e);if(!fi.has(t))try{await v.promises.mkdir(t,{recursive:!0}),fi.add(t)}catch(t){throw a({level:`warn`,phase:`session_event_log_dir_failed`,data:{path:e,error:t instanceof Error?t.message:String(t)}}),t}}function yi(e,t,n){hi(e,t,{kind:`action.recorded`,requestId:r().requestId,command:n.command,summary:fr(n),details:pr(n)})}function bi(e){let{req:t}=e;return{kind:`request.started`,requestId:t.meta?.requestId??r().requestId,command:t.command,summary:`Started ${t.command}`}}function xi(e){let{req:t,response:n,durationMs:i}=e;if(n.ok){let e=bn(t,n.data);return{kind:`request.finished`,requestId:t.meta?.requestId??r().requestId,command:t.command,status:`ok`,summary:e.summary??`Finished ${t.command}`,details:{durationMs:i,...e.details}}}return{kind:`request.finished`,requestId:t.meta?.requestId??r().requestId,command:t.command,status:`error`,summary:`Failed ${t.command}: ${n.error.code}`,details:{durationMs:i,code:n.error.code,diagnosticId:n.error.diagnosticId}}}function Si(e,t={}){let n=wi(t.cursor),r=Ti(t.limit),i=$r(e);ai(n,i.earliestCursor);let a=Ci(i.files,n,r),o=a.lines.flatMap(e=>{let t=Ei(e);return t?[t]:[]});return{path:e,cursor:String(n),limit:r,events:o,...a.nextCursor===void 0?{}:{nextCursor:String(a.nextCursor)}}}function Ci(e,t,n){let r=[],i;for(let a of e){let e=a.firstLineIndex;if(W(a.path,a=>{if(e>=t+n)return i=t+n,!1;e>=t&&r.push(a),e+=1}),i!==void 0)break}return{lines:r,...i===void 0?{}:{nextCursor:i}}}function wi(t){if(t===void 0||t.trim()===``)return 0;let n=Number(t);if(Number.isInteger(n)&&n>=0)return n;throw new e(`INVALID_ARGS`,`events cursor must be a non-negative integer string.`)}function Ti(t){if(t===void 0||typeof t==`string`&&t.trim()===``)return 100;let n=typeof t==`string`?Number(t):t;if(Number.isInteger(n)&&n>=1&&n<=500)return n;throw new e(`INVALID_ARGS`,`events limit must be between 1 and 500.`)}function Ei(e){try{let t=Di(JSON.parse(e));return t?Oi(t):void 0}catch{return}}function Di(e){if(n(e)&&e.version===1&&typeof e.ts==`string`&&typeof e.session==`string`&&ki(e.kind))return e}function Oi(e){let t=n(e.details)?e.details:void 0;return{version:1,ts:e.ts,session:e.session,kind:e.kind,...typeof e.requestId==`string`?{requestId:e.requestId}:{},...typeof e.command==`string`?{command:e.command}:{},...Ai(e.status)?{status:e.status}:{},...typeof e.summary==`string`?{summary:e.summary}:{},...t?{details:t}:{}}}function ki(e){return e===`request.started`||e===`request.finished`||e===`action.recorded`}function Ai(e){return e===`ok`||e===`error`}const ji=36e5;var Mi=class{sessions=new Map;acceptingSessions=!0;runtimeHints=new Map;sessionsDir;scriptWriter;constructor(e){this.sessionsDir=e,this.scriptWriter=new Xt(e)}get(e){return this.sessions.get(e)?.current}closeAdmission(){this.acceptingSessions=!1}assertAdmissionOpen(t){if(!this.acceptingSessions)throw new e(`COMMAND_FAILED`,`Daemon is shutting down`,{reason:`daemon_shutting_down`,session:t})}assertPublishable(t){if(this.assertAdmissionOpen(t),this.sessions.has(t))throw new e(`COMMAND_FAILED`,`Session address is already occupied`,{reason:`session_address_occupied`,session:t})}publish(e,t){this.assertPublishable(e);let n={current:t};return this.sessions.set(e,n),this.clearIdleExpiryTombstone(e),this.captureRef(e,n)}resolveCurrent(e){let t=this.sessions.get(e.address);return t===e.lifetime?t.current:void 0}refresh(e){let t=this.sessions.get(e.address);return t===e.lifetime?this.captureRef(e.address,t):e}requireCurrent(t){let n=this.resolveCurrent(t);if(!n)throw new e(`COMMAND_FAILED`,`Session lifetime has ended`,{reason:`session_lifetime_ended`,session:t.address,hint:`Open a new session before retrying the command.`});return n}update(e,t){let n=this.requireCurrent(e),r=this.sessions.get(e.address),i=typeof t==`function`?t(n):t,a={...n,...i};return r.current=a,a}retire(e){return this.resolveCurrent(e)?(this.runtimeHints.delete(e.address),this.sessions.delete(e.address)):!1}captureRef(e,t){return Object.freeze({address:e,session:t.current,lifetime:t})}*values(){for(let e of this.sessions.values())yield e.current}toArray(){return Array.from(this.values())}lookup(e){let t=this.sessions.get(e);return t?this.captureRef(e,t):void 0}findByDevice(e){for(let[t,n]of this.sessions)if(n.current.device.id===e)return this.captureRef(t,n)}listRefs(){return Array.from(this.sessions,([e,t])=>this.captureRef(e,t))}getRuntimeHints(e){return this.runtimeHints.get(e)}setRuntimeHints(e,t){t?this.runtimeHints.set(e,t):this.runtimeHints.delete(e)}clearRuntimeHints(e){return this.requireCurrent(e),this.runtimeHints.delete(e.address)}recordAction(e,t){let n=Tt(this.requireCurrent(e),t);n&&yi(this.resolveEventLogPath(e.address),e.address,n)}recordEvent(e,t){hi(this.resolveEventLogPath(e),e,t)}readEvents(e,t={}){return Si(this.resolveEventLogPath(e),t)}async flushEvents(e){await gi(e?this.resolveEventLogPath(e):void 0)}writeSessionLog(e,t){let n=this.requireCurrent(e),r=this.scriptWriter.write(n,t);return r.written&&a({level:`info`,phase:`session_script_written`,data:{session:n.name,path:r.path}}),r}finalizeRepairTeardown(e){let t=this.resolveCurrent(e);if(!t)return;this.recordRepairFinalizeCloseIfCommitting(e);let n=this.writeSessionLog(e,{force:je(t,void 0)});Ct(t)&&(!n.written&&n.error?this.writeRepairTombstone(e,ji,{code:String(n.error.code),message:n.error.message}):this.writeRepairTombstone(e))}recordRepairFinalizeCloseIfCommitting(e){let t=this.requireCurrent(e),n=t.scriptPublication??m;ze(n)&&this.recordAction(e,{command:`close`,positionals:[],flags:{},result:{session:t.name,...Ge(`Closed: ${t.name}`)}})}writeRepairTombstone(e,t=ji,n){let r=this.resolveCurrent(e);if(r)try{let i=this.resolveSessionDir(e.address);v.mkdirSync(i,{recursive:!0});let a={owner:e.address,reapedAt:Date.now(),expiresAt:Date.now()+t,...wt(r)?{sourcePath:wt(r)}:{},...n?{commitFailure:n}:{}};v.writeFileSync(this.repairTombstonePath(e.address),`${JSON.stringify(a)}\n`)}catch(t){a({level:`warn`,phase:`repair_tombstone_write_failed`,data:{session:e.address,error:t instanceof Error?t.message:String(t)}})}}readRepairTombstone(e){return rt(this.repairTombstonePath(e),e)}clearRepairTombstone(e){it(this.repairTombstonePath(e),e)}noteSessionActivity(e,t=Date.now()){let n=this.get(e);n&&(n.lastActivityAtMs=t)}writeIdleExpiryTombstone(e,t){try{v.mkdirSync(this.resolveSessionDir(e),{recursive:!0}),v.writeFileSync(C(this.resolveSessionDir(e)),`${JSON.stringify(t)}\n`)}catch(t){a({level:`warn`,phase:`idle_expiry_tombstone_write_failed`,data:{session:e,error:t instanceof Error?t.message:String(t)}})}}readIdleExpiryTombstone(e){if(!Xe(e))return;let t=Rt(C(this.resolveSessionDir(e)));return t?.owner===e?t:void 0}clearIdleExpiryTombstone(e){try{v.rmSync(C(this.resolveSessionDir(e)),{force:!0})}catch(t){a({level:`warn`,phase:`idle_expiry_tombstone_clear_failed`,data:{session:e,error:t instanceof Error?t.message:String(t)}})}}repairTombstonePath(e){return nt(this.resolveSessionDir(e))}defaultTracePath(e){let t=Ze(e.name),n=new Date().toISOString().replaceAll(/[:.]/g,`-`);return y.join(this.sessionsDir,`${t}-${n}.trace.log`)}resolveSessionDir(e){return $e(this.sessionsDir,e)}resolveDaemonStateDir(){return y.dirname(this.sessionsDir)}ensureSessionDir(e){let t=this.resolveSessionDir(e);return v.mkdirSync(t,{recursive:!0}),t}resolveAppLogPath(e){return et(this.sessionsDir,e)}resolveAppLogPidPath(e){return tt(this.sessionsDir,e)}resolveEventLogPath(e){return pi(this.resolveSessionDir(e))}};async function Q(e){let{resolveInventoryDeviceSelection:t}=await import(`./device-selection-resolver.js`).then(e=>e.t);return await t(e)}const $=new dt;function Ni(t,n){return!ne(n)&&t instanceof e&&t.code===`DEVICE_NOT_FOUND`}function Pi(e,t){return!ne(e)&&(!e.platform||e.platform===`apple`||e.platform===`ios`)&&e.target!==`desktop`&&(!t||t.kind===`device`)}async function Fi(e,t={}){return(await Ii(e,t)).device}async function Ii(e,t={}){let n={...zi(e),androidAvdSelection:t.androidAvdSelection??`running-only`},{iosSimulatorSetPath:r,...a}=n,o=Ui(n,t),s={platform:n.platform,target:e.target,cacheHit:!1};return await i(`resolve_target_device`,async()=>{let e=Vi(o);if(e)return s.cacheHit=!0,e;let i=await lt(n),c=[...i.devices];if(l(a.platform)&&i.source===`local`){let e=await Li(c,a,{simulatorSetPath:r,appleSimulatorAppTarget:t.appleSimulatorAppTarget});return Hi(o,e)}return Hi(o,await Q({devices:c,selector:a,source:i.source}))},s)}async function Li(t,n,r){let i;try{i=await Q({devices:t,selector:n,source:`local`,appleSimulatorAppTarget:r.appleSimulatorAppTarget})}catch(e){if(!Ni(e,n))throw e}let a=await Ri(n,r,i?.device);if(a)return a;if(i)return i;throw new e(`DEVICE_NOT_FOUND`,`No devices found`,{selector:n})}async function Ri(e,t,n){if(Pi(e,n))try{return await Q({devices:await ut({platform:e.platform??`ios`,target:e.target,iosSimulatorSetPath:t.simulatorSetPath,kind:`simulator`}),selector:e,source:`local`})}catch(e){if(ct(e))throw e;return}}function zi(t){let n=t.platform;if(t.target&&!n)throw new e(`INVALID_ARGS`,`Device target selector requires --platform. Use --platform ios|macos|android|vega|linux|apple with --target mobile|tv|desktop.`);let r=s({simulatorSetPath:st(t.iosSimulatorDeviceSet),platform:n,target:t.target}),i=ot(t.androidDeviceAllowlist);return{platform:n,target:t.target,deviceName:t.device,udid:t.udid,serial:t.serial,leaseId:t.leaseId,leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId,iosSimulatorSetPath:r,androidSerialAllowlist:i?Array.from(i).sort():void 0}}async function Bi(e){return $.getStore()?await e():await $.run(new Map,e)}function Vi(e){let t=$.getStore()?.get(e);if(t)return{...t,device:{...t.device}}}function Hi(e,t){return $.getStore()?.set(e,{...t,device:{...t.device}}),t}function Ui(e,t){let{appleSimulatorAppTarget:n,...r}=t;return JSON.stringify({request:e,options:r})}export{Ct as _,Mi as a,x as b,mi as c,Pt as d,Et as f,St as g,xt as h,Bi as i,Sr as l,gt as m,Fi as n,xi as o,bt as p,Ii as r,bi as s,zi as t,Hn as u,vt as v,_t as x,yt as y};
@@ -1,2 +0,0 @@
1
- import{P as e}from"./sdk-contracts.js";import{t}from"./script.js";import n from"node:path";function r(e){return e.startsWith(`AD_`)}function i(t){return new e(`INVALID_ARGS`,`The AD_* namespace is reserved for built-in variables. Rename ${t} to avoid the AD_ prefix.`)}function a(e){let t={};if(e.builtins)for(let[n,r]of Object.entries(e.builtins))t[n]=r;let n=[e.fileEnv,e.shellEnv,e.cliEnv];for(let e of n)if(e)for(let[n,a]of Object.entries(e)){if(r(n))throw i(n);t[n]=a}return{values:t,expandedBuiltinNames:new Set}}function o(e){let n={};for(let[i,a]of Object.entries(e)){if(typeof a!=`string`||!i.startsWith(`AD_VAR_`))continue;let e=i.slice(7);e.length!==0&&t.test(e)&&(r(e)||(n[e]=a))}return n}function s(n){let a={};for(let o of n){let n=o.indexOf(`=`);if(n<=0)throw new e(`INVALID_ARGS`,`Invalid -e entry "${o}": expected KEY=VALUE.`);let s=o.slice(0,n);if(!t.test(s))throw new e(`INVALID_ARGS`,`Invalid -e key "${s}": keys must be uppercase letters, digits, and underscores (e.g. APP_ID).`);if(r(s))throw i(s);a[s]=o.slice(n+1)}return a}function c(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function l(e){if(e&&typeof e==`object`&&!Array.isArray(e)){let t={};for(let[n,r]of Object.entries(e))typeof r==`string`&&(t[n]=r);return t}return process.env}function u(e){return e>=`A`&&e<=`Z`||e>=`a`&&e<=`z`||e===`_`}function d(e){return u(e)||e>=`0`&&e<=`9`||e===`.`}function f(e){return e===`
2
- `||e===`\r`||e===`\u2028`||e===`\u2029`}function p(e,t){let n=t+2;if(n>=e.length||!u(e[n]))return null;for(n+=1;n<e.length&&d(e[n]);)n+=1;let r=e.slice(t+2,n);if(e[n]===`}`)return{key:r,fallback:void 0,end:n+1};if(e[n]!==`:`||e[n+1]!==`-`)return null;n+=2;let i=``;for(;n<e.length;){let t=e[n];if(t===`}`)return{key:r,fallback:i,end:n+1};if(t===`\\`){let t=e[n+1];if(t===void 0)return{abortEnd:e.length};if(f(t))return{abortEnd:n+2};i+=t,n+=2;continue}i+=t,n+=1}return{abortEnd:e.length}}function m(t,n,i){let a=``,o=0;for(;o<t.length;){let s=t[o];if(s===`\\`&&t.startsWith("${",o+1)){a+="${",o+=3;continue}if(s===`$`&&t[o+1]===`{`){let s=p(t,o);if(s!==null&&`abortEnd`in s){a+=t.slice(o,s.abortEnd),o=s.abortEnd;continue}if(s!==null){let{key:t,fallback:c}=s;if(Object.prototype.hasOwnProperty.call(n.values,t))r(t)&&(n.expandedBuiltinNames??=new Set).add(t),a+=String(n.values[t]);else if(c!==void 0)a+=c;else throw new e(`INVALID_ARGS`,`Unresolved variable \${${t}} at ${i.file}:${i.line}.`);o=s.end;continue}}a+=s,o+=1}return a}function h(e,t,n){return{...e,positionals:(e.positionals??[]).map(e=>m(e,t,n)),flags:g(e.flags,t,n)??{},runtime:g(e.runtime,t,n)}}function g(e,t,n){return e&&_(e,t,n)}function _(e,t,n){return typeof e==`string`?m(e,t,n):Array.isArray(e)?e.map(e=>_(e,t,n)):e&&typeof e==`object`?Object.fromEntries(Object.entries(e).map(([e,r])=>[e,_(r,t,n)])):e}function v(e){return Object.entries(e.values).filter(([t,n])=>n.length>0&&(!r(t)||e.expandedBuiltinNames?.has(t))).map(([e,t])=>({name:e,value:t})).sort((e,t)=>t.value.length-e.value.length)}function y(e){let t=n.extname(e).toLowerCase();return t===`.yaml`||t===`.yml`}function b(e,t){return`Maestro YAML requires explicit --maestro routing: ${e} ${t} --maestro`}function x(e,t){return t===`maestro`&&y(e)?`maestro`:`ad`}export{v as a,c,a as i,l,b as n,o,x as r,s,y as t,h as u};
@@ -1 +0,0 @@
1
- const e=1e4;export{e as t};
package/dist/src/host.js DELETED
@@ -1 +0,0 @@
1
- let e;function t(t){if(e&&e!==t)throw Error(`Apple runner host is already bound to a different implementation.`);e=t}function n(){if(!e)throw Error(`Apple runner host is not bound. Production binds it in core/runner-client.ts; package tests bind it through runner/test-host.ts.`);return e}function r(e){return((...t)=>n()[e](...t))}const i=r(`runCmdStreaming`),a=r(`runCmdSync`),o=r(`runCmdBackground`),s=r(`requireExecSuccess`),c=r(`isCommandTimeoutError`),l=r(`commandDeveloperDir`),u=r(`shellQuote`),d=r(`emitDiagnostic`),f=r(`withDiagnosticTimer`),p=r(`retryWithPolicy`),m=r(`isEnvTruthy`),h=r(`isProcessAlive`),g=r(`isProcessGroupAlive`),_=r(`readProcessStartTime`),v=r(`readProcessCommand`),y=r(`signalPidsBestEffort`),b=r(`signalProcessGroupBestEffort`),x=r(`classifyOwnerLiveness`),S=r(`readHostCpuArchSync`),C=r(`findProjectRoot`),w=r(`readVersion`),T=r(`acquireProcessLock`),E=r(`withProcessLock`),D=r(`publishFileSync`),O=r(`emitRequestProgress`),k=r(`getRequestSignal`),A=r(`isRequestCanceled`),j=r(`withKeyedLock`),M=r(`createTtlMemo`),N=r(`isRecord`),P=r(`parseBooleanLiteral`),F=r(`classifyBootFailure`),I=r(`bootFailureHint`),L=r(`runAppleToolCommand`),R=r(`runXcrun`),z=r(`readApplePlistJson`),B=r(`hasScopedAppleToolProvider`),V=r(`buildSimctlArgsForDevice`),H=r(`simulatorAddressFor`),U=r(`visitXmlPlistEntries`),W=r(`resolveIosPhysicalDeviceControl`),G=r(`leaseOwnerStateDir`),K=r(`hasDeviceClaimAuthority`),q={fromTimeoutMs:r(`deadlineFromTimeoutMs`)};export{s as A,b as B,P as C,v as D,S as E,i as F,E as G,U as H,a as I,R as L,p as M,L as N,_ as O,o as P,u as R,G as S,z as T,f as U,H as V,j as W,m as _,V as a,N as b,l as c,O as d,C as f,c as g,B as h,I as i,W as j,w as k,M as l,K as m,T as n,F as o,k as p,t as r,x as s,q as t,d as u,h as v,D as w,A as x,g as y,y as z};
@@ -1 +0,0 @@
1
- import{J as e}from"./sdk-contracts.js";import{d as t,h as n}from"./adb-executor.js";const r=`agent_device_ime_helper_previous_ime`,i=`agent_device_ime_helper_rebind_displaced`,a=`secure`,o=`default_input_method`,s={previousIme:r,rebindDisplaced:i,defaultInputMethod:o};async function c(e){let n=await t(e,[`settings`,`get`,a,o],{allowFailure:!0,timeoutMs:5e3});return v(n.exitCode===0?n.stdout:``)}async function l(e){return await _(e,r)||void 0}async function u(e,n){return(await t(e,[`settings`,`put`,a,r,n],{allowFailure:!0,timeoutMs:5e3})).exitCode===0&&await l(e)===n}async function d(e){await t(e,[`settings`,`delete`,a,r],{allowFailure:!0,timeoutMs:5e3})}async function f(e){let t=await _(e,r),n=await _(e,i);if(t===void 0||n===void 0)return{kind:`unreadable`};let a=n===`1`;return t?{kind:`owned`,previousIme:t,rebindDisplaced:a}:{kind:`absent`,rebindDisplaced:a}}async function p(e){return(await t(e,[`settings`,`put`,a,i,`1`],{allowFailure:!0,timeoutMs:5e3})).exitCode===0&&await _(e,i)===`1`}async function m(e){return await t(e,[`settings`,`delete`,a,i],{allowFailure:!0,timeoutMs:5e3}),await _(e,i)===``}async function h(t,r,i){try{(r?await u(t,r):await g(t))||n({level:`warn`,phase:`android_test_ime_record_rollback_failed`,data:{device:i,hadPriorRecord:r!==void 0}})}catch(t){n({level:`warn`,phase:`android_test_ime_record_rollback_failed`,data:{device:i,hadPriorRecord:r!==void 0,error:e(t).message}})}}async function g(e){return await d(e),await l(e)===void 0}async function _(e,n){let r=await t(e,[`settings`,`get`,a,n],{allowFailure:!0,timeoutMs:5e3});return r.exitCode===0?v(r.stdout):void 0}function v(e){let t=e.trim();return!t||t===`null`?``:t}export{f as a,p as c,c as i,d as n,h as o,m as r,u as s,s as t};
@@ -1 +0,0 @@
1
- import{F as e,K as t,P as n,r}from"./sdk-contracts.js";import{E as i,h as a}from"./sdk-device.js";import{pn as o}from"./sdk-batch.js";import{i as s,s as c,u as l}from"./target-evidence.js";import{M as u,P as d,n as f,p,r as m}from"./provider-device-admission.js";import{i as h}from"./mobile-snapshot-semantics.js";import{r as g}from"./request-cancel.js";import"./request.js";import{_,b as v,c as y,j as b,p as x,s as S,x as C,y as w}from"./session-snapshot.js";import{Q as T}from"./internal/daemon.js";function E(e){return{...e,sessionRef:`sessionRef`in e?e.sessionRef:e.sessionStore.lookup(e.sessionName)}}function D(e){let{req:t,logPath:n,traceLogPath:r}=e;return{verbose:t.flags?.verbose,logPath:n,traceLogPath:r,requestId:t.meta?.requestId,iosXctestrunFile:t.flags?.iosXctestrunFile,iosXctestDerivedDataPath:t.flags?.iosXctestDerivedDataPath,iosXctestEnvDir:t.flags?.iosXctestEnvDir}}function O(e,t){return!(!e||!a(e.device)||f(e.device)||t.skipPendingPostGestureStabilization&&w(e))}function k(e){let{session:t,selectorExpression:n}=e;return O(t,{skipPendingPostGestureStabilization:!0})?o(n):null}function A(e){let t=e.identifier?.trim();if(t)return{key:`id`,value:t};let n=e.label?.trim();return n?{key:`label`,value:n}:null}async function j(e,t,n){let r=await _(e.device,t,e.appBundleId,n),i=r.found===!0,a=M(r);return{found:i,...typeof r.text==`string`?{text:r.text}:{},...a?{node:a}:{}}}function M(e){let t=e.nodes;if(!Array.isArray(t))return;let n=t[0];if(!(!n||typeof n!=`object`))return n}const N=new Set([`ELEMENT_NOT_FOUND`,`ELEMENT_OFFSCREEN`,`AMBIGUOUS_MATCH`]);function P(n,r){let i=e(n);return i.details?.dispatched!==`no`||t(i)?!1:N.has(i.code)?r.delegateSemanticFailures:i.code===`COMMAND_FAILED`}async function F(e){let{session:t,node:n,rootViewport:r,requestOptions:i}=e,a=A(n);if(!a)return null;let o;try{o=await j(t,a,i)}catch{return null}if(!o.found||!o.node?.rect)return null;let s={rect:o.node.rect,hittable:o.node.hittable===!0};return h(s,r)?s.rect:null}function I(e){let{operations:t,command:n,positionals:r,actionCommand:i=n,flags:a,result:o,responseData:c,recordedTarget:l,recordedTargets:u,actionStartedAt:d,actionFinishedAt:f,androidFreshnessBaseline:p}=e,m=C(a),[h,g]=R({command:n,positionals:r,flags:m,result:o,responseData:c}),_=t.isSessionRecording()&&l?s(l):void 0,v=t.isSessionRecording()&&u?L(u):void 0;return t.recordAction({command:n,positionals:r,flags:m??{},result:h,..._?{targetEvidence:_}:{},...v?{targetEvidences:v}:{}}),t.markDeferredOutcome({command:n,action:i,positionals:r,flags:a,androidFreshnessBaseline:p}),t.recordGestureVisualization(i,r,h,m??{},d,f),{ok:!0,data:g}}function L(e){let t=s(e.source),n=s(e.destination);return t&&n?{source:t,destination:n}:void 0}function R(e){if(e.command!==`fill`||typeof e.flags?.recordAs!=`string`)return[e.result,e.responseData];let t=u({ts:0,command:`fill`,positionals:e.positionals,flags:e.flags,result:e.result}),n=d(e.flags.recordAs);return[m(e.result,t,n),m(e.responseData,t,n)]}function z(e){let t=E(e).sessionRef;if(!t)throw new n(`SESSION_NOT_FOUND`,r);let i=e.sessionStore.requireCurrent(t);return V({requestId:e.req.meta?.requestId,flags:e.req.flags,session:i,contextFromFlags:e.contextFromFlags,captureSnapshot:async(n,r)=>{let i=await e.captureSnapshotForSession(t,n,e.sessionStore,e.contextFromFlags,r);return e.consumedCapture&&(e.consumedCapture.state=i),c(e.captureProof,i)},runtimeSessions:y({sessionName:e.sessionName,sessionStore:e.sessionStore,ref:t,recordOptions:{includeSnapshot:!0,omitRefFrameSnapshot:e.req.internal?.findResolvedTarget!==void 0},setRecord:(e,t)=>{e.snapshot&&S(t,e.snapshot)}}),expireRefFrame:()=>b(e.sessionStore.requireCurrent(t)),confirmOffscreenTargetVisible:O(i,{skipPendingPostGestureStabilization:!1})?async(t,n)=>await F({session:i,node:t,rootViewport:n,requestOptions:D({req:e.req,logPath:e.logPath,traceLogPath:i.trace?.outPath})}):void 0,pairedGestureViewport:e.pairedGestureViewport,touchExecutor:e.touchExecutor,gestures:e.gestures})}function B(e){let{ref:t,sessionStore:n,...r}=e,i=n.requireCurrent(t);return I({...r,operations:{recordAction:n.recordAction.bind(n,t),markDeferredOutcome:e=>v({session:i,...e}),isSessionRecording:p.bind(null,i),recordGestureVisualization:T.bind(null,i)}})}function V(e){return x({backend:H(e),...l(`interaction commands`,{plural:!0}),sessions:e.runtimeSessions,signal:g(e.requestId)})}function H(e){let{flags:t,session:n}=e;return{platform:i(n.device),captureSnapshot:async(n,r)=>({snapshot:await e.captureSnapshot(t,{interactiveOnly:r?.interactiveOnly===!0,preferredBackend:r?.preferredBackend,includeRects:r?.includeRects===!0,signal:n.signal,boundCapture:e.touchExecutor?.captureSnapshot??e.gestures?.captureSnapshot})}),...U(e,()=>e.contextFromFlags(t,n.appBundleId,n.trace?.outPath)),...e.confirmOffscreenTargetVisible?{confirmOffscreenTargetVisible:async(t,n,r)=>await e.confirmOffscreenTargetVisible(n,r)}:{},...W(e.touchExecutor,e.expireRefFrame,t)}}function U(e,t){let n=e.gestures,r=e.pairedGestureViewport;return n?{resolveGestureViewport:async()=>r??await n.gestureViewport?.(t()),performGesture:async(r,i)=>(e.expireRefFrame(),G(await n.performPlan(i,t())))}:r?{resolveGestureViewport:async()=>r}:{}}function W(e,t,n){if(!e)return{};let{tapPoint:r,tapRef:i,fillPoint:a,fillRef:o,longPressPoint:s,hoverPoint:c,hoverRef:l}=e,u=async e=>(t(),G(await e()));return{tap:r?(e,t)=>u(()=>r(t,n)):void 0,tapTarget:i?(e,t)=>u(()=>i(t.ref)):void 0,fill:a?(e,t,n,r)=>u(()=>a(t,n,r)):void 0,fillTarget:o?(e,t,n,r)=>u(()=>o(t.ref,n,r)):void 0,longPress:s?(e,t,n)=>u(()=>s(t,n?.durationMs)):void 0,hover:c?(e,t)=>u(()=>c(t)):void 0,hoverTarget:l?(e,t)=>u(()=>l(t.ref)):void 0}}function G(e){return e&&typeof e==`object`?e:void 0}function K(e,t,n){return{ok:!1,error:{code:e,message:t,...n?{details:n}:{}}}}function q(e,t){if(!t||t.settle===!0)return null;let n=[];return t.settleQuietMs!==void 0&&n.push(`--settle-quiet`),n.length===0?null:K(`INVALID_ARGS`,`${e}: ${n.join(`, `)} require${n.length===1?`s`:``} --settle.`)}function J(e){if(e?.settle===!0)return{...e.settleQuietMs===void 0?{}:{quietMs:e.settleQuietMs},...e.timeoutMs===void 0?{}:{timeoutMs:e.timeoutMs}}}function Y(e){try{return X(e),null}catch(e){if(e instanceof n)return K(e.code,e.message,e.details);throw e}}function X(e){let t=e.ref.startsWith(`@`)?e.ref.slice(1):e.ref,{admission:r,scope:i,currentGeneration:a}=e.frame;if(r.admitted)return;let o=r.reason===`plain_ref_requires_complete_frame`&&i!==`all`&&i.has(t)&&a!==void 0?`@${t}~s${a}`:void 0;throw new n(`COMMAND_FAILED`,Q(r.reason,e.ref),{reason:r.reason,ref:e.ref,currentGeneration:a,scope:i===`all`?`all`:Array.from(i),...e.mintedGeneration===void 0?{}:{mintedGeneration:e.mintedGeneration},...o?{suggestedRef:o}:{},hint:o?`Retry with the exact emitted ref ${o}.`:e.staleRefsWarning??Z})}const Z=`Capture a fresh interactive snapshot (snapshot -i) or use a stable selector, then retry.`;function Q(e,t){switch(e){case`ref_frame_expired`:return`Ref ${t} belongs to an expired ref frame — a device action since the snapshot invalidated it`;case`ref_generation_mismatch`:return`Ref ${t} was minted from a superseded snapshot generation`;case`plain_ref_requires_complete_frame`:return`Ref ${t} needs a complete snapshot — the current frame only authorizes its emitted refs`;case`ref_not_issued`:return`Ref ${t} was not issued by the current ref frame`}}export{z as a,O as c,q as i,k as l,Y as n,B as o,J as r,P as s,X as t,E as u};
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime.js";import{P as t}from"./sdk-contracts.js";var n=e({localInteractorSource:()=>i,providerInteractorSource:()=>a,requireInteractorMethod:()=>r});function r(e,n){if(e)return e;throw new t(`COMMAND_FAILED`,`${n} was admitted but its bound interactor has no implementation.`,{reason:`interactor-method-missing`})}function i(e){return async t=>await e.resolveInteractor(e.device,t)}function a(e){return async n=>{let r=e.resolveInteractor(n);if(r)return r;throw new t(`UNSUPPORTED_OPERATION`,`Provider-owned ${e.operation} operation has no bound provider interactor.`,{reason:`provider-runtime-interactor-missing`,deviceId:e.device.id})}}export{r as i,i as n,a as r,n as t};
@@ -1 +0,0 @@
1
- const e=[`status`,`get`,`dismiss`,`enter`,`return`];function t(t){return e.includes(t)}export{t};
@@ -1 +0,0 @@
1
- import{A as e}from"./sdk-batch-runner.js";import{o as t}from"./lease-scope.js";function n(e){return t(e)}function r(t,r){let i=n(t),a=i.leaseId??r?.leaseId,o=i.tenantId??r?.tenantId,s=i.runId??r?.runId;if(!(!o||!s||!a))return e({tenantId:o,runId:s,leaseId:a,leaseBackend:i.leaseBackend??r?.backend,leaseProvider:i.leaseProvider??r?.leaseProvider,deviceKey:i.deviceKey??r?.deviceKey,clientId:i.clientId??r?.clientId,expiresAt:r?.expiresAt})}function i(t,r){let i=n(t),a=r?.lease??r?.deviceLease??void 0;return e({tenantId:i.tenantId??a?.tenantId,runId:i.runId??a?.runId,leaseId:i.leaseId??a?.leaseId,leaseTtlMs:i.leaseTtlMs,leaseBackend:i.leaseBackend??a?.leaseBackend,leaseProvider:i.leaseProvider??a?.leaseProvider,deviceKey:i.deviceKey??a?.deviceKey,clientId:i.clientId??a?.clientId})}function a(t){let n=t.meta,r=e({leaseId:o(n?.leaseId),clientId:o(n?.clientId),tenantId:o(n?.tenantId),runId:o(n?.runId),leaseProvider:o(n?.leaseProvider),deviceKey:o(n?.deviceKey)});return Object.keys(r).length>0?r:void 0}function o(e){return typeof e==`string`&&e.trim().length>0?e.trim():void 0}export{a as i,n,i as r,r as t};
@@ -1 +0,0 @@
1
- import{P as e,t}from"./sdk-contracts.js";import{f as n,t as r}from"./lease-scope.js";import i from"node:crypto";function a(e){return(e??``).trim().toLowerCase()===`tenant`?`tenant`:`none`}function o(e){if(!e)return;let t=e.trim();if(t&&/^[a-zA-Z0-9._-]{1,128}$/.test(t))return t}const s=`default`;function c(t){let n=Number.isInteger(t.defaultLeaseTtlMs)?Math.max(1,Number(t.defaultLeaseTtlMs)):6e4,i=Number.isInteger(t.minLeaseTtlMs)?Math.max(1,Number(t.minLeaseTtlMs)):r,a=Number.isInteger(t.maxLeaseTtlMs)?Math.max(i,Number(t.maxLeaseTtlMs)):6e5;return t=>{if(!Number.isInteger(t))return n;let r=Number(t);if(r<i||r>a)throw new e(`INVALID_ARGS`,`Lease ttlMs must be between ${i} and ${a}.`);return r}}function l(e){if(!e)return;let t=e.trim();if(t&&/^[a-zA-Z0-9._-]{1,128}$/.test(t))return t}function u(e){if(!e)return;let t=e.trim();if(t&&/^[a-f0-9]{16,128}$/i.test(t))return t.toLowerCase()}function d(t){let n=u(t);if(!n)throw new e(`INVALID_ARGS`,`Invalid lease id.`);return n}function f(n){let r=(n??``).trim().toLowerCase();if(!r)return`ios-simulator`;let i=t.find(e=>e===r);if(i)return i;throw new e(`INVALID_ARGS`,`Unsupported lease backend: ${n??``}`)}function p(t){if(t===void 0)return;let n=t.trim();if(!n||n.length>256||!/^[\u0020-\u007E]+$/.test(n))throw new e(`INVALID_ARGS`,`Invalid device key. Use 1-256 printable characters.`);return n}function m(e){return g(e,`client id`,128)}function h(e){return g(e,`lease provider`,64)}function g(t,n,r){if(t===void 0)return;let i=t.trim();if(!i||i.length>r||!/^[a-zA-Z0-9._-]+$/.test(i))throw new e(`INVALID_ARGS`,`Invalid ${n}. Use 1-${String(r)} chars: letters, numbers, dot, underscore, hyphen.`);return i}function _(t){let n=o(t);if(!n)throw new e(`INVALID_ARGS`,`Invalid tenant id. Use 1-128 chars: letters, numbers, dot, underscore, hyphen.`);return n}function v(t){let n=l(t);if(!n)throw new e(`INVALID_ARGS`,`Invalid run id. Use 1-128 chars: letters, numbers, dot, underscore, hyphen.`);return n}function y(e){return{backend:f(e.leaseBackend),leaseProvider:h(e.leaseProvider),deviceKey:p(e.deviceKey),clientId:m(e.clientId),tenantId:_(e.tenantId),runId:v(e.runId),ttlMs:e.ttlMs,retainOnClose:e.retainOnClose}}function b(e){return!!(e.leaseProvider??e.deviceKey??e.clientId)}function x(e,t){return!t.tenantId||!t.runId?!1:[[e.leaseProvider,t.leaseProvider],[e.deviceKey,t.deviceKey],[e.clientId,t.clientId]].every(([e,t])=>!e||!!t)}function S(t,n){let r=w(n);if(r.tenantId&&t.tenantId!==r.tenantId||r.runId&&t.runId!==r.runId||r.leaseBackend&&t.backend!==r.leaseBackend||r.leaseProvider&&t.leaseProvider!==r.leaseProvider||r.deviceKey&&t.deviceKey!==r.deviceKey||r.clientId&&t.clientId!==r.clientId)throw new e(`UNAUTHORIZED`,`Lease does not match tenant/run scope`,{reason:`LEASE_SCOPE_MISMATCH`})}function C(t){let n=f(t.leaseBackend),r=o(t.tenantId);if(!r)throw new e(`INVALID_ARGS`,`tenant isolation requires tenant id.`);let i=l(t.runId);if(!i)throw new e(`INVALID_ARGS`,`tenant isolation requires run id.`);let a=u(t.leaseId);if(!a)throw new e(`INVALID_ARGS`,`tenant isolation requires lease id.`);return{...t,tenantId:r,runId:i,leaseId:a,leaseBackend:n}}function w(t){let n=o(t.tenantId),r=l(t.runId);if(t.tenantId&&!n)throw new e(`INVALID_ARGS`,`Invalid tenant id. Use 1-128 chars: letters, numbers, dot, underscore, hyphen.`);if(t.runId&&!r)throw new e(`INVALID_ARGS`,`Invalid run id. Use 1-128 chars: letters, numbers, dot, underscore, hyphen.`);return{tenantId:n,runId:r,leaseBackend:t.leaseBackend?f(t.leaseBackend):void 0,leaseProvider:h(t.leaseProvider),deviceKey:p(t.deviceKey),clientId:m(t.clientId)}}function T(t,n){if(b(t)&&!x(t,n))throw new e(`UNAUTHORIZED`,`Lease owner scope is required`,{reason:`LEASE_SCOPE_REQUIRED`})}function E(e,t){return e.tenantId===t.tenantId&&e.runId===t.runId&&e.backend===t.backend&&e.leaseProvider===t.leaseProvider&&e.deviceKey===t.deviceKey&&e.clientId===t.clientId}function D(e){if(e.deviceKey)return JSON.stringify([e.backend,e.leaseProvider??s,e.deviceKey])}function O(e){return JSON.stringify([e.tenantId,e.runId,e.backend,e.leaseProvider??s,e.deviceKey??`*`])}function k(e,t,n){return{leaseId:i.randomBytes(16).toString(`hex`),tenantId:e.tenantId,runId:e.runId,backend:e.backend,...e.leaseProvider?{leaseProvider:e.leaseProvider}:{},...e.deviceKey?{deviceKey:e.deviceKey}:{},...e.clientId?{clientId:e.clientId}:{},...e.retainOnClose?{retainOnClose:!0}:{},createdAt:n,heartbeatAt:n,expiresAt:n+t}}function A(e){return e.expiresAt-e.heartbeatAt}function j(t){return new e(`DEVICE_IN_USE`,`Device is already leased`,{reason:`DEVICE_LEASE_BUSY`,deviceKey:t.deviceKey,backend:t.backend,leaseProvider:t.leaseProvider,expiresAt:t.expiresAt,hint:`Retry after the lease expires or close the owning session.`})}function M(e){return n({leaseId:e.leaseId,tenantId:e.tenantId,runId:e.runId,leaseBackend:e.backend,leaseProvider:e.leaseProvider,deviceKey:e.deviceKey,clientId:e.clientId})}export{d as _,j as a,A as c,y as d,p as f,h as g,u as h,c as i,M as l,f as m,S as n,E as o,C as p,k as r,D as s,T as t,O as u,o as v,a as y};
@@ -1 +0,0 @@
1
- import{A as e}from"./sdk-batch-runner.js";const t=[`leaseId`,`tenantId`,`runId`,`clientId`,`deviceKey`];function n(t){return e({tenantId:t.meta?.tenantId??y(t.flags,`tenant`),runId:t.meta?.runId??y(t.flags,`runId`),leaseId:t.meta?.leaseId??y(t.flags,`leaseId`),leaseTtlMs:t.meta?.leaseTtlMs,leaseRetainOnClose:t.meta?.leaseRetainOnClose,leaseBackend:t.meta?.leaseBackend,leaseProvider:t.meta?.leaseProvider??y(t.flags,`leaseProvider`)??y(t.flags,`provider`),deviceKey:t.meta?.deviceKey??y(t.flags,`deviceKey`),clientId:t.meta?.clientId??y(t.flags,`clientId`)})}function r(t){return e({tenantId:t.tenant,runId:t.runId,leaseId:t.leaseId,leaseTtlMs:t.leaseTtlMs??t.ttlMs,leaseRetainOnClose:t.retainOnClose,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider??t.provider,deviceKey:t.deviceKey,clientId:t.clientId})}function i(t){return e({tenantId:t.tenantId,runId:t.runId,leaseId:t.leaseId,leaseTtlMs:t.leaseTtlMs,leaseRetainOnClose:t.leaseRetainOnClose,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId})}function a(t){return e({tenant:t.tenantId,runId:t.runId,leaseId:t.leaseId,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId})}function o(t){return e({tenantId:t.tenantId??``,runId:t.runId??``,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId,ttlMs:t.leaseTtlMs,retainOnClose:t.leaseRetainOnClose})}function s(e){return v(e)}function c(e){let{ttlMs:t,...n}=v(e);return n}function l(t,n,r){let i=e({...r.includeTokenParam?{token:r.token}:{},session:r.session,tenantId:t.tenantId,runId:t.runId,leaseProvider:t.leaseProvider,clientId:t.clientId,deviceKey:t.deviceKey});switch(n){case`lease_allocate`:return{...i,...e({ttlMs:t.leaseTtlMs,retainOnClose:t.leaseRetainOnClose,backend:t.leaseBackend})};case`lease_heartbeat`:return{...i,...e({leaseId:t.leaseId,ttlMs:t.leaseTtlMs})};case`lease_release`:return{...i,...e({leaseId:t.leaseId})}}}const u=[`platform`,`device`,`providerApp`,`providerOsVersion`,`providerDeviceType`,`providerProject`,`providerBuild`,`providerSessionName`,`providerDeviceOrientation`,`providerGeoLocation`,`providerTimezone`,`providerAppiumVersion`,`providerLanguage`,`providerLocale`,`providerNetworkProfile`,`providerCustomNetwork`,`providerNoResignApp`,`awsProjectArn`,`awsDeviceArn`,`awsAppArn`,`awsRegion`,`awsInteractionMode`];function d(e){let t={};for(let n of u){let r=e?.[n];(typeof r==`string`||typeof r==`boolean`)&&(t[n]=r)}return t}function f(t){let n=e({leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId});return Object.keys(n).length>0?n:void 0}function p(e){return e.leaseProvider===`proxy`}function m(e){return p(e)?t.filter(t=>!e[t]):[]}const h=5e3,g=new Set([`LEASE_NOT_FOUND`,`LEASE_EXPIRED`,`LEASE_REVOKED`]);function _(e){return typeof e==`object`&&!!e&&e.code===`UNAUTHORIZED`&&g.has(e.details?.reason)}function v(t){return e({leaseId:t.leaseId??``,tenantId:t.tenantId,runId:t.runId,leaseBackend:t.leaseBackend,leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId,ttlMs:t.leaseTtlMs})}function y(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}export{r as a,a as c,l as d,c as f,p as i,f as l,d as m,m as n,n as o,i as p,_ as r,o as s,h as t,s as u};
@@ -1 +0,0 @@
1
- import{P as e}from"./sdk-contracts.js";import{I as t,N as n}from"./sdk-device.js";import{t as r}from"./scoped-provider.js";const i=r(void 0);function a(){return i.resolve()}async function o(e,t){return await i.run(e,t)}function s(r,i){if(!t(n(r.device),n(i))||r.device.simulatorSetPath!==i.simulatorSetPath)throw new e(`COMMAND_FAILED`,`Managed automation cannot select another device.`,{reason:`managed-device-transport-mismatch`})}function c(){let e=a();if(e)return async t=>{s(e,t)}}async function l(e){let t=c();return t?(await t(e),!0):!1}export{o as a,c as i,a as n,l as r,s as t};
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime.js";import{P as t}from"./sdk-contracts.js";import{n}from"./providers.js";import r from"node:fs";import i from"node:path";var a=e({RESERVED_PLUGIN_PROVIDERS:()=>o,assertUniquePluginProviders:()=>s,readPluginManifest:()=>c,resolvePluginEntry:()=>d});const o=[`cloud`,`proxy`,...Object.values(n),`limrun`];function s(e,n){let r=new Set(n);for(let n of e){let e=n.agentDevicePlugin.provider;if(r.has(e))throw new t(`INVALID_ARGS`,`Duplicate provider plugin: ${e}`);r.add(e)}}function c(e){let n;try{let t=i.join(e,`package.json`);n=JSON.parse(r.readFileSync(t,`utf8`))}catch(n){throw new t(`INVALID_ARGS`,`Cannot read plugin manifest: ${e}`,{},n)}let a=n?.agentDevicePlugin;if(typeof n?.name!=`string`||typeof n?.version!=`string`||!a||a.apiVersion!==1||typeof a.provider!=`string`||!/^[a-z][a-z0-9-]*$/.test(a.provider)||typeof a.entry!=`string`||!a.entry.startsWith(`./`))throw new t(`INVALID_ARGS`,`Package does not declare a compatible provider plugin`,{reason:`incompatible_plugin`,apiVersion:1,hint:`Install a plugin release supporting agentDevicePlugin.apiVersion 1.`});return d(e,a.entry),l(a.connection),u(a.credentialVariables),n}function l(e){if(e!==void 0&&(!e||typeof e!=`object`||e.leaseKind!==`direct-device-provider`||[`requiresAppAttachment`,`requiresRemoteDaemon`,`supportsArtifacts`,`supportsDeferredAppSelection`,`supportsDirectPortReverse`,`usesCloudWebDriverLease`].some(t=>typeof e[t]!=`boolean`)||e.requiresRemoteDaemon))throw new t(`INVALID_ARGS`,`Plugin connection must declare local provider capabilities`)}function u(e){if(e!==void 0&&(!Array.isArray(e)||!e.every(e=>typeof e==`string`&&/^[A-Z_][A-Z0-9_]*$/.test(e))))throw new t(`INVALID_ARGS`,`Plugin credentialVariables must list environment variable names`)}function d(e,n){try{let t=r.realpathSync(e),a=r.realpathSync(i.resolve(e,n));if(a.startsWith(`${t}${i.sep}`)&&r.statSync(a).isFile())return a}catch{}throw new t(`INVALID_ARGS`,`Plugin entry must be a readable file inside its package`,{directory:e,entry:n})}export{d as a,c as i,s as n,a as r,o as t};
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime.js";import{I as t}from"./sdk-contracts.js";import{r as n}from"./diagnostics.js";import"./diagnostics2.js";var r=e({observeUntil:()=>a});const i={now:()=>Date.now(),sleep:e=>new Promise(t=>setTimeout(t,e))};async function a(e){let n=e.clock??i,r=n.now(),a={params:e,clock:n,state:{startedMs:r,budgetStartedMs:r,budgetMs:e.schedule.budgetMs,observations:0,polls:[],previous:void 0,last:void 0,lastError:void 0}};if(e.initial!==void 0){a.state.observations+=1;let t=d(a,e.initial);if(t)return t}for(;;){if(e.signal?.aborted)throw t();let n=await c(a);if(n)return n;if(e.signal?.aborted)throw t();let r=await l(a);if(r)return r}}function o({state:e,clock:t}){return e.budgetStartedMs+e.budgetMs-t.now()}function s({params:e,state:t}){return t.observations<(e.schedule.minPolls??1)}async function c(e){let{state:t,clock:n,params:r}=e;if(t.observations===0)return;let i=s(e);if(!i&&o(e)<=0)return f(e,{kind:`expired`,last:t.last,lastError:t.lastError});let{intervalMs:a}=r.schedule;await n.sleep(i?a:Math.max(0,Math.min(a,o(e))))}async function l(e){let{params:t,clock:n,state:r}=e,i=t.schedule.budgetFrom===`first-capture`&&r.polls.length===0,a=n.now(),s=await p(!i&&t.schedule.captureDeadline===`cancel`?Math.max(o(e),t.schedule.intervalMs):void 0,t.signal,t.capture,n);r.observations+=1,i&&(r.budgetStartedMs=n.now());let c=u(e,s);if(r.polls.push({startedMs:a-r.startedMs,durationMs:n.now()-a,outcome:c}),s.kind===`observed`)return d(e,s.value);if(c===`rode-out`){r.lastError=s.error;return}return s.kind===`stalled`?f(e,{kind:`stalled`,last:r.last,lastError:r.lastError,error:s.error}):f(e,{kind:`failed`,last:r.last,error:s.error})}function u(e,t){return t.kind===`stalled`?`stalled`:t.kind===`failed`?e.params.rideOut?.(t.error)?`rode-out`:`failed`:`observed`}function d(e,t){let{params:n,state:r}=e,i=n.verdict(t,r.previous,r.polls.length);if(r.previous=t,r.last=t,i.kind===`done`)return f(e,{kind:`done`,result:i.result,value:t});i.budgetMs!==void 0&&(r.budgetMs=Math.max(r.budgetMs,i.budgetMs))}function f(e,t){let{params:r,state:i,clock:a}=e,o={...t,polls:i.polls,waitedMs:a.now()-i.startedMs};return r.phase&&n({level:`debug`,phase:r.phase,data:{end:o.kind,polls:i.polls.length,waitedMs:o.waitedMs}}),o}async function p(e,t,n,r){let i=h(e,r),a=t?AbortSignal.any([t,i.signal]):i.signal;try{let e=await n(a);return m(t,i.expired(),void 0)??{kind:`observed`,value:e}}catch(e){return m(t,i.expired(),e)??{kind:`failed`,error:e}}finally{i.dispose()}}function m(e,n,r){if(e?.aborted)throw t();return n?{kind:`stalled`,error:r}:void 0}function h(e,t){let n=new AbortController,r=e===void 0?void 0:t.now()+e,i=!1,a=e===void 0?void 0:setTimeout(()=>{i=!0,n.abort(new DOMException(`Observation deadline exceeded`,`TimeoutError`))},Math.max(0,e));return a?.unref(),{signal:n.signal,expired:()=>i||r!==void 0&&t.now()>=r,dispose:()=>{a!==void 0&&clearTimeout(a)}}}export{r as n,a as t};
@@ -1,5 +0,0 @@
1
- import{n as e,t}from"./success-text.js";function n(e){return({result:t})=>e(t)}const r=n(i);function i(e){return{data:e,text:t(e)}}function a(t){return[...typeof t.warning==`string`&&t.warning.trim()!==``?[t.warning]:[],...e(t)].map(e=>c(e)).filter(e=>e.length>0)}function o(e,t){let n=e??``,r=a(t).filter(e=>!n.includes(e)).map(e=>`Warning: ${e}`);return r.length===0?e??null:[...n===``?[]:[n],...r].join(`
2
- `)}function s(e,t,n){let r=t??{};if(n===`text`)return{...e,text:o(e.text,r)};let i=`${e.text??``}\n${e.stderr??``}`,s=a(r).filter(e=>!i.includes(e)).map(e=>`Warning: ${e}`);if(s.length===0)return e;let c=e.stderr??``;return{...e,stderr:`${c}${c===``||c.endsWith(`
3
- `)?``:`
4
- `}${s.join(`
5
- `)}\n`}}function c(e){return e.replaceAll(/\s*\n\s*/g,` `)}function l(e,t){if(typeof e==`string`&&e.length!==0&&typeof t==`number`)return`@${e.startsWith(`@`)?e.slice(1):e}~s${t}`}export{n as a,l as i,i as n,s as o,r,c as t};
@@ -1,3 +0,0 @@
1
- import{r as e}from"./diagnostics.js";import{l as t,m as n}from"./exec.js";import{i as r}from"./retry.js";import i from"node:crypto";import a from"node:fs";import o from"node:path";function s(e){l(e.destination,t=>{let n={encoding:typeof e.contents==`string`?`utf8`:void 0,...e.mode===void 0?{}:{mode:e.mode}};a.writeFileSync(t,e.contents,n),e.publish===`link-exclusive`?a.linkSync(t,e.destination):a.renameSync(t,e.destination)})}function c(e){let t=o.dirname(e.destination);l(e.destination,n=>{let r,i=!1,o;try{u(e.destination),r=a.openSync(n,`wx`,e.mode??384),a.writeFileSync(r,e.contents,`utf8`),a.fsyncSync(r),a.closeSync(r),r=void 0,u(e.destination),e.publish===`link-exclusive`?a.linkSync(n,e.destination):a.renameSync(n,e.destination),ee(t)}catch(e){i=!0,o=e}if(r!==void 0)try{a.closeSync(r)}catch(e){i||(i=!0,o=e)}if(i)throw o})}function l(t,n){let r=te(t);try{return n(r)}finally{try{a.rmSync(r,{force:!0})}catch(n){e({level:`warn`,phase:`atomic_file_cleanup_failed`,data:{destination:t,temporaryPath:r,error:n instanceof Error?n.message:String(n)}})}}}function ee(e){let t;try{t=a.openSync(e,`r`),a.fsyncSync(t)}catch{}finally{if(t!==void 0)try{a.closeSync(t)}catch{}}}function te(e){return o.join(o.dirname(e),`.${o.basename(e)}.${process.pid}-${i.randomUUID()}.tmp`)}function u(e){let t=ne(e);if(t?.isSymbolicLink())throw Error(`Refusing to replace a durable file symbolic link: ${e}`);if(t&&!t.isFile())throw Error(`Refusing to replace a durable path that is not a regular file: ${e}`)}function ne(e){try{return a.lstatSync(e)}catch(e){if(e.code===`ENOENT`)return;throw e}}const d=1e3,f=`/bin/ps`,p=2e3,m=`powershell.exe`;function h(){return process.env}function re(e){return h()[e]}function g(e){process.stderr.write(e)}function _(){return process.cwd()}function v(){return process.execPath}function ie(){return process.version}function y(){return process.platform}function ae(){return process.pid}function b(e){if(!Number.isInteger(e)||e<=0)return!1;try{return process.kill(e,0),!0}catch(e){return e.code===`EPERM`}}function x(e){if(!Number.isInteger(e)||e<=0)return!1;try{return process.kill(-e,0),!0}catch(e){return e.code===`EPERM`}}async function S(e,t=d){if(A())return await I(e,t);let[n,r,i]=await Promise.all([D(e,`lstart=`,t),D(e,`command=`,t),D(e,`state=`,t)]);return{startTime:n,command:r,zombie:i===null?null:i.startsWith(`Z`)}}function C(e){return E(e,`lstart=`)}function oe(e){return E(e,`command=`)}function w(e){return A()?!1:E(e,`state=`)?.startsWith(`Z`)??!1}function T(e){let t=new Map,r=B(e);if(r.length===0)return t;if(A()){for(let e of N(r,p))e.startTime!==null&&t.set(e.pid,{state:`R`,startTime:e.startTime});return t}try{let e=n(f,[`-p`,r.join(`,`),`-o`,`pid=,state=,lstart=`],{allowFailure:!0,timeoutMs:d});if(e.exitCode!==0)return t;for(let n of e.stdout.split(`
2
- `)){let e=/^\s*(\d+)\s+(\S+)\s+(.+?)\s*$/.exec(n);if(!e)continue;let r=Number.parseInt(e[1],10);!Number.isInteger(r)||r<=0||t.set(r,{state:e[2],startTime:e[3]})}}catch{}return t}function E(e,t){if(!Number.isInteger(e)||e<=0)return null;if(A())return P(e,t);try{return O(n(f,[`-p`,String(e),`-o`,t],{allowFailure:!0,timeoutMs:d}))}catch{return null}}async function D(e,n,r){if(!Number.isInteger(e)||e<=0)return null;try{return O(await t(f,[`-p`,String(e),`-o`,n],{allowFailure:!0,timeoutMs:r}))}catch{return null}}function O(e){if(e.exitCode!==0)return null;let t=e.stdout.trim();return t.length>0?t:null}function k(e,t,n){let r=[];for(let i of e.replace(/^\uFEFF/,``).split(`
3
- `)){let e=t.exec(i);if(!e)continue;let a=Number.parseInt(e[1],10);if(!Number.isInteger(a)||a<=0)continue;let o=Number.parseInt(e[2],10);r.push(n(e,a,Number.isInteger(o)&&o>0?o:void 0))}return r}function se(e){return k(e,/^\s*(\d+)\s+(\d+)\s+(.+?)\s*$/,(e,t,n)=>({pid:t,ppid:n,command:e[3]}))}function A(){return y()===`win32`}const ce=` | ForEach-Object { $birth = if ($_.CreationDate) { $_.CreationDate.ToUniversalTime().ToString('yyyyMMddHHmmssfffffff', [System.Globalization.CultureInfo]::InvariantCulture) } else { '' }; '{0}|{1}|{2}|{3}' -f $_.ProcessId, $_.ParentProcessId, $birth,`+String.raw` ($_.CommandLine -replace '[\r\n]+', ' ') }`;function j(e){return[`-NoProfile`,`-NonInteractive`,`-Command`,`[Console]::OutputEncoding=[System.Text.Encoding]::UTF8; ${e.length>0?`Get-CimInstance -ClassName Win32_Process -Filter '${e.map(e=>`ProcessId=${e}`).join(` OR `)}'`:`Get-CimInstance -ClassName Win32_Process`}${ce}`]}function M(e){return k(e,/^(\d+)\|(\d+)\|([^|]*)\|(.*)\r?$/,(e,t,n)=>({pid:t,...n===void 0?{}:{ppid:n},startTime:e[3].length>0?e[3]:null,command:e[4].length>0?e[4]:null}))}function N(e,t){try{let r=n(m,j(e),{allowFailure:!0,timeoutMs:t});return r.exitCode===0?M(r.stdout):[]}catch{return[]}}function P(e,t){let n=N([e],p).find(t=>t.pid===e);return n?t===`lstart=`?n.startTime:t===`command=`?n.command:`R`:null}function F(e){return Math.max(e,p)}async function I(e,n){if(!Number.isInteger(e)||e<=0)return{startTime:null,command:null,zombie:null};try{let r=await t(m,j([e]),{allowFailure:!0,timeoutMs:F(n)});if(r.exitCode!==0)return{startTime:null,command:null,zombie:null};let i=M(r.stdout).find(t=>t.pid===e);return i?{startTime:i.startTime,command:i.command,zombie:!1}:{startTime:null,command:null,zombie:null}}catch{return{startTime:null,command:null,zombie:null}}}async function L(e){let n=await(e.runCommand??t)(m,j([]),{allowFailure:!0,timeoutMs:F(e.timeoutMs)});return n.exitCode===0?M(n.stdout).map(e=>({pid:e.pid,...e.ppid===void 0?{}:{ppid:e.ppid},command:e.command??``})):[]}async function R(e){if(A())return await L(e);let n=await(e.runCommand??t)(e.runCommand?`ps`:f,[`-ax`,`-o`,`pid=,ppid=,command=`],{allowFailure:!0,timeoutMs:e.timeoutMs});return n.exitCode===0?se(n.stdout):[]}function z(e,t){let n=new Set(B(e)),r=!0;for(;r;){r=!1;for(let e of t)e.ppid===void 0||!n.has(e.ppid)||n.has(e.pid)||(n.add(e.pid),r=!0)}return t.filter(e=>n.has(e.pid))}function B(e,t={}){return[...new Set(e)].filter(e=>Number.isInteger(e)&&e>0&&e!==t.excludePid)}function V(e,t){let n=B(e,{excludePid:process.pid}),r=0;for(let e of n)try{process.kill(e,t),r+=1}catch{}return r}async function H(e,t){if(!b(e))return!0;let n=Date.now();for(;Date.now()-n<t;)if(await r(50),!b(e))return!0;return!b(e)}async function U(e){let t=B(e.pids,{excludePid:process.pid});t.length!==0&&(V(t,`SIGTERM`),await Promise.all(t.map(async t=>await H(t,e.termTimeoutMs))),V(t.filter(e=>b(e)),`SIGKILL`),await Promise.all(t.map(async t=>await H(t,e.killTimeoutMs))))}const W=1e3,G=[`-n`,`hw.optional.arm64`];let K,q;function le(){return q===void 0?(K??=de(process.platform,process.arch).then(J),K):Promise.resolve(q)}function ue(){return q??J(Y(process.platform===`darwin`&&pe(),process.arch))}function J(e){return q??=e,q}async function de(e,t){return Y(e===`darwin`&&await fe(),t)}function Y(e,t){return e?`arm64`:t===`x64`?`x86_64`:t}async function fe(){try{let e=await t(`/usr/sbin/sysctl`,G,{allowFailure:!0,timeoutMs:W});return e.exitCode===0&&e.stdout.trim()===`1`}catch{return!1}}function pe(){try{let e=n(`/usr/sbin/sysctl`,G,{allowFailure:!0,timeoutMs:W});return e.exitCode===0&&e.stdout.trim()===`1`}catch{return!1}}function X(e){return typeof e==`number`&&Number.isInteger(e)&&e>0&&e<=2147483647}function me(){return{pid:process.pid,startTime:C(process.pid)}}function Z(e,t){return e.pid===t.pid&&e.startTime===t.startTime}function he(e,t){return e.pid!==t.pid||!!(e.startTime&&t.startTime&&e.startTime!==t.startTime)}function ge(e){return Q(e.owner)||$(e,T([e.owner.pid]).get(e.owner.pid)??null)}function _e(e,t){return Q(e.owner)||$(e,t)}function Q(e){if(!X(e.pid))return`unknown`;if(!b(e.pid))return`owner-process-dead`}function $(e,t){let{owner:n,stateDir:r}=e;return ve(n,t)?`owner-process-dead`:n.startTime&&ye(n,t)?`owner-process-reused`:r?be(r):`live`}function ve(e,t){return t===void 0?w(e.pid):t?.state.startsWith(`Z`)??!1}function ye(e,t){let n=t===void 0?C(e.pid):t?.startTime??null;return n!==null&&n!==e.startTime}function be(e){try{return a.statSync(e),`live`}catch(e){let t=e?.code;return t===`ENOENT`||t===`ENOTDIR`?`owner-state-dir-gone`:`unknown`}}export{c as A,S as C,B as D,U as E,l as M,H as O,oe as S,V as T,R as _,Z as a,re as b,_ as c,ie as d,y as f,w as g,x as h,he as i,s as j,g as k,h as l,b as m,_e as n,me as o,ae as p,X as r,z as s,ge as t,v as u,le as v,C as w,T as x,ue as y};
@@ -1 +0,0 @@
1
- import e from"node:os";import t from"node:path";function n(t){return t?.HOME?.trim()||e.homedir()}function r(e,r={}){return e===`~`?n(r.env):e.startsWith(`~/`)?t.join(n(r.env),e.slice(2)):e}function i(e,n={}){let i=r(e,n);return t.isAbsolute(i)?i:t.resolve(n.cwd??process.cwd(),i)}export{i as n,r as t};
@@ -1 +0,0 @@
1
- import{P as e}from"./sdk-contracts.js";import{r as t}from"./diagnostics.js";import"./diagnostics2.js";import{A as n,N as r,f as i}from"./sdk-device.js";import{At as a,Mt as o,Nt as s,Ot as c,kt as l}from"./sdk-batch.js";import{m as u}from"./observability.js";import{a as d,j as ee,o as f}from"./owner-identity.js";import{a as p,t as m}from"./file.js";import"./process.js";import{c as h,i as g,l as _,r as v,s as y,t as b,u as x}from"./device-claim-inspection.js";import{n as S,t as C}from"./durable-capture-resource.js";import w from"node:crypto";import T from"node:fs";import E from"node:path";async function D(e){let t=await e.observeDeviceBoot?.observeBootTimeMs(e.device);if(t?.observed!==!0||t.bootedAtMs<=e.claim.updatedAtMs)return;let{session:n,workspace:r,stateDir:i}=e.claim;return{session:n,workspace:r,stateDir:i,bootedAtMs:t.bootedAtMs}}function O(e){t({level:`info`,phase:`device_claim_reboot_released`,data:{deviceKey:e.deviceKey,ownerSession:e.claim.session,ownerStateDir:e.claim.stateDir,ownerWorkspace:e.claim.workspace,claimUpdatedAtMs:e.claim.updatedAtMs,deviceBootedAtMs:e.bootedAtMs}})}function k(e){let t=_(e.deviceKey);T.mkdirSync(E.dirname(t),{recursive:!0,mode:448}),ee({destination:t,contents:`${JSON.stringify(e)}\n`,mode:384})}async function A(e,t){let n=f();return await p({acquire:()=>m({lockDirPath:`${_(e)}.lock`,owner:{pid:n.pid,startTime:n.startTime,acquiredAtMs:Date.now()},timeoutMs:3e4,description:`device claim for ${e}`}),task:t})}async function te(e){let t=v(_(e.deviceKey));return t?t.claim&&P(t.claim,e.stateDir,e.owner)?(R(e.deviceKey,t.claim),{status:`available`}):t.claim&&F(t.claim,e,e.owner)?{status:`held`,ownership:ne(t.claim)}:await re(t,e):{status:`available`}}function ne(e){if(e.updatedAtMs>=Date.now())return y(e);let t={...e,updatedAtMs:Date.now()};return k(t),y(t)}async function re(e,t){let n=e.claim;if(!n)return I(t.deviceKey,e),{status:`conflict`,conflict:e};let r=await ie({classification:e.classification,claim:n,device:t.device,observeDeviceBoot:t.observeDeviceBoot});if(!r.settles)return I(t.deviceKey,e),{status:`conflict`,conflict:e};let i=await j(n,t.reconcileOrphanedDeviceClaim);return i.status===`retained`?(I(t.deviceKey,e,i.reason),{status:`conflict`,conflict:e}):r.tookOver?(O({deviceKey:t.deviceKey,claim:n,bootedAtMs:r.tookOver.bootedAtMs}),{status:`available`,tookOver:r.tookOver}):{status:`available`}}async function ie(e){if(b(e.classification))return{settles:!0};let t=await D(e);return t?{settles:!0,tookOver:t}:{settles:!1}}async function j(e,t){let n=await t(e);if(n.status===`retained`)return n;try{T.unlinkSync(_(e.deviceKey))}catch(e){if(e.code!==`ENOENT`)throw e}return{status:`reconciled`}}function M(e,t,n){return e.stateDir===t&&d({pid:e.ownerPid,startTime:e.ownerStartTime},n)}function N(e){return e.abandonedAtMs!==void 0}function P(e,t,n){return N(e)&&M(e,t,n)}function F(e,t,n){return e.session===t.session&&e.workspace===t.workspace&&M(e,t.stateDir,n)}function I(e,n,r){t({level:`warn`,phase:`device_claim_conflict`,data:{deviceKey:e,classification:n.classification,...L(n),...r?{reconciliationReason:r}:{}}})}function L(e){return e.allocatorClaim?{ownerStateDir:e.allocatorClaim.stateDir,allocatorInstanceId:e.allocatorClaim.allocator.instanceId,identityIncarnationId:e.allocatorClaim.allocator.identityIncarnationId}:{ownerSession:e.claim?.session,ownerStateDir:e.claim?.stateDir}}function R(e,n){t({level:`info`,phase:`device_claim_abandoned_superseded`,data:{deviceKey:e,abandonedSession:n.session,abandonedAtMs:n.abandonedAtMs}})}function z(e){return`transient:${e}`}async function B(e){let t=W(e.device),n=h(t);return await A(n,async()=>await H({...e,deviceKey:n,identity:t}))}async function V(e){let t=W(e.device),n=h(t);return await A(n,async()=>{let r=v(_(n));return r?.claim&&!N(r.claim)&&M(r.claim,e.stateDir,f())?{status:`covered-by-owned-claim`}:await H({device:e.device,deviceKey:n,identity:t,session:z(e.command),workspace:e.workspace,stateDir:e.stateDir,reconcileOrphanedDeviceClaim:e.reconcileOrphanedDeviceClaim})})}async function H(e){let{deviceKey:t,identity:n}=e,r=f(),i=await te({...e,owner:r});if(i.status===`conflict`)return i;if(i.status===`held`)return{status:`acquired`,ownership:i.ownership};let a=Date.now(),o={schemaVersion:2,deviceKey:t,device:{...n,name:e.device.name},session:e.session,workspace:e.workspace,stateDir:e.stateDir,ownerPid:r.pid,ownerStartTime:r.startTime,ownerToken:w.randomUUID(),createdAtMs:a,updatedAtMs:a};return k(o),{status:`acquired`,ownership:y(o),...i.tookOver?{tookOver:i.tookOver}:{}}}function U(e){let t=h(W(e)),n=v(_(t))?.claim;return n!==void 0&&n.deviceKey===t&&!N(n)&&d({pid:n.ownerPid,startTime:n.ownerStartTime},f())}function W(e){return r({...e,...i(e.platform)?{appleOs:n(e)}:{}})}async function G(e){let t=[];for(let n of g(e.selectors))t.push(await K(n,e.reconcile));return t}async function K(e,n){let r=e.claim,i={fileName:e.fileName,classification:e.classification,...e.deviceKey?{deviceKey:e.deviceKey}:{},...r?{device:r.device,session:r.session,workspace:r.workspace,stateDir:r.stateDir}:{},...e.allocatorClaim?{device:e.allocatorClaim.device,stateDir:e.allocatorClaim.stateDir,allocator:e.allocatorClaim.allocator}:{}};if(!r||!b(e.classification))return{...i,status:`refused`,reason:q(e.classification)};if(_(r.deviceKey)!==E.join(x(),e.fileName))return{...i,status:`refused`,reason:`claim-file-name-mismatch`};let{deviceKey:a,ownerToken:o}=r;return await A(a,async()=>{let e=v(_(a));if(!e?.claim||e.claim.ownerToken!==o||!b(e.classification))return{...i,status:`changed`,reason:`claim-changed-during-release`};let s=await j(e.claim,n);return s.status===`retained`?{...i,status:`retained`,reason:s.reason}:(t({level:`info`,phase:`device_claim_stale_released`,data:{deviceKey:a,ownerSession:r.session,ownerStateDir:r.stateDir}}),{...i,status:`released`})})}const ae=Object.freeze({live:`live-owner`,"owner-process-reused":`owner-pid-reused`,"owner-state-dir-gone":`owner-process-still-running`,unknown:`owner-liveness-unknown`,inconsistent:`claim-record-inconsistent`,"allocator-inconsistent":`allocator-claim-record-inconsistent`,"allocator-held":`allocator-held-owner`,"owner-process-dead":`claim-record-unreadable`,"owner-daemon-superseded":`claim-record-unreadable`});function q(e){return ae[e]}async function J(e){return e?await Y(e,(e,t)=>{try{T.unlinkSync(t)}catch(e){if(e.code!==`ENOENT`)throw e;return`absent`}return`deleted`},e=>e?e.claim?`ownership-changed`:`unattributable`:`absent`):`absent`}async function oe(e){return e?await Y(e,e=>{let t=Date.now();return k({...e,abandonedAtMs:t,updatedAtMs:t}),`abandoned`},e=>e?`ownership-changed`:`absent`):`absent`}async function se(e){return e?await Y(e,e=>(k({...e,updatedAtMs:Date.now()}),{status:`renewed`}),e=>({status:`lost`,conflict:e})):{status:`lost`,conflict:void 0}}async function Y(e,t,n){return await A(e.deviceKey,async()=>{let r=_(e.deviceKey),i=v(r);if(!i)return n(void 0);let a=i.claim;return!a||!ce(a,e)?n(i):t(a,r)})}function ce(e,t){return e.ownerToken===t.ownerToken&&d({pid:e.ownerPid,startTime:e.ownerStartTime},{pid:t.ownerPid,startTime:t.ownerStartTime})}async function le(e,t){let n=x(),r;try{r=T.readdirSync(n,{withFileTypes:!0})}catch{return{examined:0,reconciled:0,retained:0,changed:0}}let i=0,a=0,o=0,s=0;for(let c of r){if(!c.isFile()||!c.name.endsWith(`.json`))continue;let r=E.join(n,c.name),l=v(r);if(!l?.claim||!X(l.classification,l.claim.stateDir,t))continue;i+=1;let{deviceKey:u,ownerToken:d}=l.claim;if(_(u)!==r){o+=1;continue}await A(u,async()=>{let n=v(r);if(!n?.claim||!X(n.classification,n.claim.stateDir,t)||n.claim.ownerToken!==d){s+=1;return}if((await j(n.claim,e)).status===`retained`){o+=1;return}a+=1})}return{examined:i,reconciled:a,retained:o,changed:s}}function X(e,t,n){return b(e)?e!==`owner-daemon-superseded`||E.resolve(t)===E.resolve(n):!1}const ue=S({resourceKind:`audio-probe`,fileName:`audio-probe.resource.json`,displayName:`Audio probe`}),Z=C({resourceKind:`audio-probe`,displayName:`audio probe`,store:ue,completionMetadata:e=>({backend:e.backend??`unknown`,source:e.source,durationMs:e.durationMs,elapsedMs:e.elapsedMs,bucketMs:e.bucketMs,sampleCount:e.sampleCount,heard:e.heard}),failedFinishPolicy:`dispose-on-failed-finish`,messages:{noActive:`no active audio probe`,cleanupPendingHint:`Keep audio-probe.resource.json and retry stop through its exact runtime owner.`}});function de(e){return Z.adoptStarted(e)}function fe(e){return Z.finishLive(e)}const pe=S({resourceKind:`perf-capture`,fileName:`perf-capture.resource.json`,displayName:`Perf capture`}),Q=C({resourceKind:`perf-capture`,displayName:`perf capture`,store:pe,completionMetadata:e=>({kind:typeof e.kind==`string`?e.kind:`unknown`,mode:typeof e.mode==`string`?e.mode:`unknown`,...typeof e.outPath==`string`?{outPath:e.outPath}:{}}),failedFinishPolicy:`preserve-retry-material`,messages:{noActive:`no active native perf capture`,cleanupPendingHint:`Keep perf-capture.resource.json and retry stop through its exact runtime owner.`}});function $(e){return Q.adoptStarted(e)}function me(e){return Q.finishLive(e)}function he(e){if(e.area===`frames`)return Object.freeze({kind:`frames`,request:e,use:c});if(e.area===`memory`)return e.action===`snapshot`?Object.freeze({kind:`memory-snapshot`,request:e,use:a}):Object.freeze({kind:`memory-sample`,request:e,use:l});if(e.area===`trace`)return e.action===`start`?Object.freeze({kind:`capture-start`,request:e,use:o}):Object.freeze({kind:`capture-stop`,request:e});switch(e.action){case`start`:return Object.freeze({kind:`capture-start`,request:e,use:o});case`stop`:return Object.freeze({kind:`capture-stop`,request:e});case`report`:return Object.freeze({kind:`profile-report`,request:e,use:s})}}function ge(t){let n=t.positionals??[],r=n[0]?.toLowerCase();if(r===`frames`){let i=n[1]?.toLowerCase();if(i!==void 0&&i!==`sample`||n.length>2||t.kind!==void 0)throw new e(`INVALID_ARGS`,`perf action must be frames, memory sample|snapshot, cpu profile start|stop|report, or trace start|stop`);return Object.freeze({area:r,action:`sample`})}if(r===`memory`)return _e(n,t);if(r===`cpu`)return ve(n,t.outPath);if(r===`trace`)return ye(n,t.outPath);throw new e(`INVALID_ARGS`,`perf requires frames, memory, cpu, or trace`)}function _e(t,n){let r=(t[1]??`sample`).toLowerCase();if(r!==`sample`&&r!==`snapshot`)throw new e(`INVALID_ARGS`,`perf memory requires sample or snapshot`);if(n.kind!==void 0&&r!==`snapshot`)throw new e(`INVALID_ARGS`,`--kind is only supported with perf memory snapshot`);if(r===`sample`&&t.length>2)throw new e(`INVALID_ARGS`,`perf memory sample does not accept additional positionals`);if(r===`snapshot`&&t.length>3)throw new e(`INVALID_ARGS`,`perf memory snapshot accepts at most one positional kind`);let i=n.kind??t[2];if(i!==void 0&&!u(i))throw new e(`INVALID_ARGS`,`perf memory snapshot --kind must be android-hprof or memgraph`);return Object.freeze({area:`memory`,action:r,...i===void 0?{}:{kind:i},...n.outPath===void 0?{}:{outPath:n.outPath}})}function ve(t,n){if(t[1]?.toLowerCase()!==`profile`)throw new e(`INVALID_ARGS`,`perf cpu requires profile`);let r=t[2]?.toLowerCase();if(r!==`start`&&r!==`stop`&&r!==`report`)throw new e(`INVALID_ARGS`,`perf cpu profile action must be start, stop, or report`);let i=t[3]?.toLowerCase();if(i!==`xctrace`&&i!==`simpleperf`)throw new e(`INVALID_ARGS`,`perf cpu profile requires --kind xctrace or simpleperf`);let a=n??t[5];return Object.freeze({area:`cpu`,subject:`profile`,action:r,kind:i,...t[4]?{template:t[4]}:{},...a?{outPath:a}:{},...t[6]?{tracePath:t[6]}:{}})}function ye(t,n){let r=t[1]?.toLowerCase();if(r!==`start`&&r!==`stop`)throw new e(`INVALID_ARGS`,`perf trace action must be start or stop`);let i=t[2]?.toLowerCase();if(i!==`xctrace`&&i!==`perfetto`)throw new e(`INVALID_ARGS`,`perf trace requires --kind xctrace or perfetto`);let a=n??t[4];return Object.freeze({area:`trace`,action:r,kind:i,...t[3]?{template:t[3]}:{},...a?{outPath:a}:{}})}export{se as _,Q as a,fe as c,V as d,J as f,G as g,le as h,me as i,oe as l,U as m,he as n,de as o,W as p,$ as r,Z as s,ge as t,B as u};
@@ -1 +0,0 @@
1
- import{O as e,S as t,m as n,w as r}from"./owner-identity.js";import{i}from"./verified-file.js";import{u as a}from"./exec.js";import"./file.js";import"./command.js";import"./process.js";import{p as o}from"./src7.js";import s from"node:fs";import c from"node:path";function l(e){let t=c.resolve(e.sessionsDir),n=c.resolve(e.pathname);if(c.basename(n)!==e.basename)throw Error(`${e.label} is outside the daemon-owned sessions directory`);if(s.existsSync(t)&&s.existsSync(c.dirname(n))){let r=s.realpathSync.native(t),i=s.realpathSync.native(c.dirname(n));if(i!==r&&!i.startsWith(`${r}${c.sep}`))throw Error(`${e.label} resolves outside the daemon-owned sessions directory`);return c.join(i,e.basename)}if(n!==t&&!n.startsWith(`${t}${c.sep}`))throw Error(`${e.label} is outside the daemon-owned sessions directory`);return n}const u=`app-log.pid`;function d(e,t={}){let n=c.resolve(e),r=t.launch??h;return Object.freeze({start:async(e,t)=>await m(n,e,r,t),readMarker:async e=>T(n,e),clearMarker:async e=>D(n,e),inspect:async e=>k(e),terminate:async e=>await A(e)})}async function f(e){let t=[],n=[];if(!s.existsSync(e))return{recovered:t,retained:n};let r=c.resolve(e);for(let e of s.readdirSync(r,{withFileTypes:!0})){if(!e.isDirectory())continue;let i=c.join(r,e.name);if(s.existsSync(c.join(i,`app-log.resource.json`)))continue;let a=c.join(i,u),o=T(r,a);if(o.status!==`missing`){if(o.status===`invalid`){n.push({markerPath:a,reason:`invalid`,message:o.message});continue}if(await A(o.marker)===`ownership-lost`){let e=p(o.marker.command);n.push({markerPath:a,reason:`ownership-lost`,...e?{device:e}:{}});continue}D(r,a),t.push(a)}}return Object.freeze({recovered:Object.freeze(t),retained:Object.freeze(n)})}function p(e){let t=/(?:^|\s)(?:\S*\/)?adb\s+-s\s+([^\s]+)/.exec(e)?.[1];if(t)return Object.freeze({id:t,family:`android`,kind:t.startsWith(`emulator-`)?`emulator`:`device`,target:`mobile`});let n=/(?:^|\s)xcrun\s+(?:--set\s+\S+\s+)?simctl\s+spawn\s+([^\s]+)/.exec(e)?.[1];if(n)return Object.freeze({id:n,family:`apple`,appleOs:`ios`,kind:`simulator`,target:`mobile`});let r=/(?:^|\s)xcrun\s+devicectl\b[^\n]*?\s--device\s+([^\s]+)/.exec(e)?.[1];if(r)return Object.freeze({id:r,family:`apple`,appleOs:`ios`,kind:`device`,target:`mobile`,iosPhysicalDeviceBackend:`coredevice`})}async function m(e,t,n,r){_(e,t.markerPath),r?.throwIfAborted();let i=await n(t.command,r),a=i.child,o=v(a,t.output),s=await y(e,t.markerPath,i),c=i.wait.then(async e=>(await o(),e)).finally(()=>{t.markerPath&&s&&S(e,t.markerPath,s)}),l=b(a,c);return{marker:s,wait:c,terminate:l,[Symbol.asyncDispose]:l}}function h(e,t){let n=g(e);return a(n.executable,[...n.args],{allowFailure:n.allowFailure,cwd:n.cwd,env:n.env?{...process.env,...n.env}:void 0,captureOutput:!1,signal:t})}function g(e){return e.kind===`host`?e.request:{executable:`adb`,args:[`-s`,e.serial,...e.args],...e.options}}function _(e,t){if(t&&T(e,t).status!==`missing`)throw Error(`Existing app-log process marker evidence must be recovered before start`)}function v(e,t){let n=Promise.resolve(),r,i=i=>{n=n.then(async()=>await t.write(i)).catch(t=>{r??=t,typeof e.exitCode!=`number`&&e.kill(`SIGKILL`)})};return e.stdout?.on(`data`,i),e.stderr?.on(`data`,i),async()=>{if(await n,r!==void 0)throw r}}async function y(e,t,n){let r=n.child.pid?await w(n.child.pid):void 0;try{if(!r)throw Error(`Managed app-log process did not expose a complete ownership marker`);return t&&E(e,t,r),r}catch(e){throw n.child.kill(`SIGKILL`),await n.wait.catch(()=>void 0),e}}function b(e,t){let n;return async()=>await(n??=(async()=>{typeof e.exitCode!=`number`&&(e.kill(`SIGINT`),await x(t,2e3)||e.kill(`SIGKILL`),await t.catch(()=>void 0))})())}async function x(e,t){return await new Promise(n=>{let r=setTimeout(()=>n(!1),t),i=()=>{clearTimeout(r),n(!0)};e.then(i,i)})}function S(e,t,n){let r=T(e,t);r.status===`decoded`&&r.marker.pid===n.pid&&r.marker.startTime===n.startTime&&r.marker.command===n.command&&D(e,t)}function C(e){let n=r(e),i=t(e);if(!(!n||!i))return Object.freeze({pid:e,startTime:n,command:i})}async function w(e){for(let t=0;t<5;t+=1){let t=C(e);if(t)return t;await new Promise(e=>setTimeout(e,10))}}function T(e,t){let n=O(e,t),r;try{let e=i(n);if(e===void 0)return{status:`missing`};r=e}catch(e){return{status:`invalid`,message:e instanceof Error?e.message:`App-log process marker is invalid`}}try{let e=JSON.parse(s.readFileSync(r,`utf8`));return o(e)}catch(e){return{status:`invalid`,message:e instanceof Error?e.message:`App-log process marker is invalid`}}finally{s.closeSync(r)}}function E(e,t,n){let r=O(e,t);if(T(e,r).status!==`missing`)throw Error(`Existing app-log process marker evidence must be recovered before replacement`);s.mkdirSync(c.dirname(r),{recursive:!0});let i=`${r}.${process.pid}.${Date.now()}.tmp`,a,o=!1,l=!1;try{a=s.openSync(i,`wx`,384),s.writeFileSync(a,`${JSON.stringify(n)}\n`),s.fsyncSync(a),s.closeSync(a),a=void 0,s.linkSync(i,r),o=!0,s.unlinkSync(i);let e=s.openSync(c.dirname(r),`r`);try{s.fsyncSync(e)}finally{s.closeSync(e)}l=!0}finally{if(a!==void 0)try{s.closeSync(a)}catch{}if(!l)for(let e of o?[r,i]:[i])try{s.unlinkSync(e)}catch{}}}function D(e,t){let n=O(e,t);try{s.unlinkSync(n)}catch(e){if(e.code!==`ENOENT`)throw e}}function O(e,t){return l({sessionsDir:e,pathname:t,basename:u,label:`App-log process marker`})}function k(e){return n(e.pid)?j(e)?`owned-alive`:`ownership-lost`:`missing`}async function A(t){if(!n(t.pid))return`already-missing`;if(!j(t))return`ownership-lost`;try{process.kill(t.pid,`SIGTERM`)}catch{return`already-missing`}if(!await e(t.pid,2e3)){if(!j(t))return`ownership-lost`;try{process.kill(t.pid,`SIGKILL`)}catch{return`already-missing`}await e(t.pid,2e3)}return n(t.pid)?`ownership-lost`:`terminated`}function j(e){return!e.startTime||!e.command?!1:r(e.pid)===e.startTime&&t(e.pid)===e.command}export{f as n,l as r,d as t};
@@ -1 +0,0 @@
1
- import{P as e}from"./sdk-contracts.js";import{tn as t}from"./sdk-batch.js";import{n}from"./scoped-provider.js";import{r,t as i}from"./platform-runtime-unavailable.js";import{a,t as o}from"./managed-device-scope.js";const s={ensureReady:`both`,deployApp:`both`,materializeAppSource:`both`,deployMaterializedApp:`both`,sendPushNotification:`both`,setSetting:`both`,readSetting:`both`,readClipboard:`both`,writeClipboard:`android`,captureScreenshot:`android`},c=Object.freeze({available:!1,reason:`owner-capability-missing`,hint:`This operation has no verified managed-device automation path.`});function l(s){return Object.freeze({owner:s.owner,ownsDevice:()=>!1,inspectFacts:async e=>r(e,s.owner,i(c)),bind:async r=>{if(r.intent.kind!==`exact-owner`||!t(r.intent.owner,s.owner))throw new e(`COMMAND_FAILED`,`A managed local owner binds only under an exact-owner intent naming it`,{reason:`runtime-contract-invalid`});let i=r.scope.managedDevice;if(!i||!t(i.owner,s.owner)||i.fence.token!==r.intent.fence.token||i.fence.generation!==r.intent.fence.generation)throw new e(`COMMAND_FAILED`,`Managed automation requires its exact request authority.`,{reason:`runtime-contract-invalid`});o(i,r.device);let c=e=>i.run(()=>a(i,e)),l=await s.loadLocal(r.device.platform),f=await c(()=>l.bind({device:r.device,intent:{kind:`ordinary`},scope:r.scope})),p=u(f.facts);return Object.freeze({device:f.device,owner:s.owner,facts:p,operations:d(n({...f.operations},e=>c(async()=>(r.scope.signal.throwIfAborted(),await i.admit(async()=>(r.scope.signal.throwIfAborted(),await e()))))),p),[Symbol.asyncDispose]:async()=>await c(async()=>await f[Symbol.asyncDispose]())})},shutdown:async()=>void 0})}function u(e){let t=Object.fromEntries(Object.entries(e.operations).map(([t,n])=>{let r=s[t];return[t,(e.device.family===`android`||e.device.family===`apple`&&e.device.appleOs===`ios`)&&(r===`both`||r===e.device.family)?n:c]}));return Object.freeze({device:e.device,operations:Object.freeze(t)})}function d(e,t){let n={};for(let[r,i]of Object.entries(e))t.operations[r]?.available===!0&&(n[r]=i);return Object.freeze(n)}export{l as createManagedLocalRuntimeOwner};
@@ -1 +0,0 @@
1
- import{H as e}from"./sdk-contracts.js";import{r as t}from"./diagnostics.js";import"./diagnostics2.js";import{C as n,O as r,S as i,T as a,_ as o,g as s,m as c,s as l,w as u}from"./owner-identity.js";import"./process.js";const d=2e3,f=(e,t)=>e===t;async function p(e){if(e===void 0)return;let[t,n]=await Promise.all([Promise.resolve(u(e)),Promise.resolve(i(e))]);return t&&n?Object.freeze({pid:e,startTime:t,command:n}):void 0}async function m(e){let t=await h(e.pid),n=l([e.pid],t),r=(await Promise.all(n.map(async e=>await p(e.pid)))).filter(e=>e!==void 0);return Object.freeze([e,...r.filter(t=>t.pid!==e.pid)])}async function h(n){try{return await o({timeoutMs:5e3})}catch(r){return t({level:`warn`,phase:`screen_recording_process_tree_unreadable`,data:{rootPid:n,reason:e(r)}}),[]}}function g(e,t=f){return!c(e.pid)||s(e.pid)?`missing`:S(e,t)?`owned-alive`:`ownership-lost`}async function _(e,t){if(!c(e.pid))return`gone`;let r=await n(e.pid,5e3);return r.zombie===!0?`gone`:e.startTime.length===0||e.command.length===0?`not-ours`:r.startTime===null||r.command===null?`unprovable`:r.startTime===e.startTime&&t(e.command,r.command)?`ours`:`not-ours`}async function v(e,t,n=f){let r=t?.child.pid,i=async e=>({marker:e,evidence:await _(e,n)}),a=({marker:e,evidence:t})=>t===`ours`||t===`unprovable`&&e.pid===r,o=await Promise.all(e.map(i)),s=o[0],c=new Set(e.map(({pid:e})=>e)),l=s!==void 0&&a(s)?await m(s.marker):[],u=await Promise.all(l.filter(({pid:e})=>!c.has(e)).map(async e=>await i(e))),p=[...o,...u],h=p.filter(a).map(({marker:e})=>e);if(h.length===0)return y(p.map(({evidence:e})=>e));let g=new Set(h.map(({pid:e})=>e)),v=p.filter(({marker:e,evidence:t})=>!g.has(e.pid)&&t!==`gone`);for(let[e,r]of[[`SIGINT`,5e3],[`SIGTERM`,d],[`SIGKILL`,d]])if(b(h,e,t),await x(h,r,t,n))return v.length===0?`terminated`:`ownership-lost`;return`ownership-lost`}function y(e){return e.every(e=>e===`gone`)?`already-missing`:`ownership-lost`}function b(e,t,n){let r=n?.child.pid;a(e.map(({pid:e})=>e).filter(e=>e!==r),t),r!==void 0&&e.some(({pid:e})=>e===r)&&n?.child.kill(t)}async function x(e,t,n,i){let a=n?.child.pid,o=n?await C(n.wait,t):!1;return await Promise.all(e.filter(({pid:e})=>!o||e!==a).map(async({pid:e})=>await r(e,t))),e.every(e=>o&&e.pid===a||g(e,i)===`missing`)}function S(e,t){let n=i(e.pid);return e.startTime.length>0&&e.command.length>0&&u(e.pid)===e.startTime&&n!==null&&t(e.command,n)}async function C(e,t){return await Promise.race([e.then(()=>!0,()=>!0),new Promise(e=>setTimeout(()=>e(!1),t))])}export{v as i,p as n,m as r,g as t};
package/dist/src/png.js DELETED
@@ -1 +0,0 @@
1
- import{i as e,t}from"./rolldown-runtime.js";import{P as n}from"./sdk-contracts.js";var r=t(((t,n)=>{let r=e(`util`),i=e(`stream`),a=n.exports=function(){i.call(this),this._buffers=[],this._buffered=0,this._reads=[],this._paused=!1,this._encoding=`utf8`,this.writable=!0};r.inherits(a,i),a.prototype.read=function(e,t){this._reads.push({length:Math.abs(e),allowLess:e<0,func:t}),process.nextTick(function(){this._process(),this._paused&&this._reads&&this._reads.length>0&&(this._paused=!1,this.emit(`drain`))}.bind(this))},a.prototype.write=function(e,t){if(!this.writable)return this.emit(`error`,Error(`Stream not writable`)),!1;let n;return n=Buffer.isBuffer(e)?e:Buffer.from(e,t||this._encoding),this._buffers.push(n),this._buffered+=n.length,this._process(),this._reads&&this._reads.length===0&&(this._paused=!0),this.writable&&!this._paused},a.prototype.end=function(e,t){e&&this.write(e,t),this.writable=!1,this._buffers&&(this._buffers.length===0?this._end():(this._buffers.push(null),this._process()))},a.prototype.destroySoon=a.prototype.end,a.prototype._end=function(){this._reads.length>0&&this.emit(`error`,Error(`Unexpected end of input`)),this.destroy()},a.prototype.destroy=function(){this._buffers&&(this.writable=!1,this._reads=null,this._buffers=null,this.emit(`close`))},a.prototype._processReadAllowingLess=function(e){this._reads.shift();let t=this._buffers[0];t.length>e.length?(this._buffered-=e.length,this._buffers[0]=t.slice(e.length),e.func.call(this,t.slice(0,e.length))):(this._buffered-=t.length,this._buffers.shift(),e.func.call(this,t))},a.prototype._processRead=function(e){this._reads.shift();let t=0,n=0,r=Buffer.alloc(e.length);for(;t<e.length;){let i=this._buffers[n++],a=Math.min(i.length,e.length-t);i.copy(r,t,0,a),t+=a,a!==i.length&&(this._buffers[--n]=i.slice(a))}n>0&&this._buffers.splice(0,n),this._buffered-=e.length,e.func.call(this,r)},a.prototype._process=function(){try{for(;this._buffered>0&&this._reads&&this._reads.length>0;){let e=this._reads[0];if(e.allowLess)this._processReadAllowingLess(e);else if(this._buffered>=e.length)this._processRead(e);else break}this._buffers&&!this.writable&&this._end()}catch(e){this.emit(`error`,e)}}})),i=t((e=>{let t=[{x:[0],y:[0]},{x:[4],y:[0]},{x:[0,4],y:[4]},{x:[2,6],y:[0,4]},{x:[0,2,4,6],y:[2,6]},{x:[1,3,5,7],y:[0,2,4,6]},{x:[0,1,2,3,4,5,6,7],y:[1,3,5,7]}];e.getImagePasses=function(e,n){let r=[],i=e%8,a=n%8,o=(e-i)/8,s=(n-a)/8;for(let e=0;e<t.length;e++){let n=t[e],c=o*n.x.length,l=s*n.y.length;for(let e=0;e<n.x.length&&n.x[e]<i;e++)c++;for(let e=0;e<n.y.length&&n.y[e]<a;e++)l++;c>0&&l>0&&r.push({width:c,height:l,index:e})}return r},e.getInterlaceIterator=function(e){return function(n,r,i){let a=n%t[i].x.length,o=(n-a)/t[i].x.length*8+t[i].x[a],s=r%t[i].y.length,c=(r-s)/t[i].y.length*8+t[i].y[s];return o*4+c*e*4}}})),a=t(((e,t)=>{t.exports=function(e,t,n){let r=e+t-n,i=Math.abs(r-e),a=Math.abs(r-t),o=Math.abs(r-n);return i<=a&&i<=o?e:a<=o?t:n}})),o=t(((e,t)=>{let n=i(),r=a();function o(e,t,n){let r=e*t;return n!==8&&(r=Math.ceil(r/(8/n))),r}let s=t.exports=function(e,t){let r=e.width,i=e.height,a=e.interlace,s=e.bpp,c=e.depth;if(this.read=t.read,this.write=t.write,this.complete=t.complete,this._imageIndex=0,this._images=[],a){let e=n.getImagePasses(r,i);for(let t=0;t<e.length;t++)this._images.push({byteWidth:o(e[t].width,s,c),height:e[t].height,lineIndex:0})}else this._images.push({byteWidth:o(r,s,c),height:i,lineIndex:0});this._xComparison=c===8?s:c===16?s*2:1};s.prototype.start=function(){this.read(this._images[this._imageIndex].byteWidth+1,this._reverseFilterLine.bind(this))},s.prototype._unFilterType1=function(e,t,n){let r=this._xComparison,i=r-1;for(let a=0;a<n;a++){let n=e[1+a],o=a>i?t[a-r]:0;t[a]=n+o}},s.prototype._unFilterType2=function(e,t,n){let r=this._lastLine;for(let i=0;i<n;i++){let n=e[1+i],a=r?r[i]:0;t[i]=n+a}},s.prototype._unFilterType3=function(e,t,n){let r=this._xComparison,i=r-1,a=this._lastLine;for(let o=0;o<n;o++){let n=e[1+o],s=a?a[o]:0,c=o>i?t[o-r]:0,l=Math.floor((c+s)/2);t[o]=n+l}},s.prototype._unFilterType4=function(e,t,n){let i=this._xComparison,a=i-1,o=this._lastLine;for(let s=0;s<n;s++){let n=e[1+s],c=o?o[s]:0,l=s>a?t[s-i]:0,u=s>a&&o?o[s-i]:0,d=r(l,c,u);t[s]=n+d}},s.prototype._reverseFilterLine=function(e){let t=e[0],n,r=this._images[this._imageIndex],i=r.byteWidth;if(t===0)n=e.slice(1,i+1);else switch(n=Buffer.alloc(i),t){case 1:this._unFilterType1(e,n,i);break;case 2:this._unFilterType2(e,n,i);break;case 3:this._unFilterType3(e,n,i);break;case 4:this._unFilterType4(e,n,i);break;default:throw Error(`Unrecognised filter type - `+t)}this.write(n),r.lineIndex++,r.lineIndex>=r.height?(this._lastLine=null,this._imageIndex++,r=this._images[this._imageIndex]):this._lastLine=n,r?this.read(r.byteWidth+1,this._reverseFilterLine.bind(this)):(this._lastLine=null,this.complete())}})),s=t(((t,n)=>{let i=e(`util`),a=r(),s=o(),c=n.exports=function(e){a.call(this);let t=[],n=this;this._filter=new s(e,{read:this.read.bind(this),write:function(e){t.push(e)},complete:function(){n.emit(`complete`,Buffer.concat(t))}}),this._filter.start()};i.inherits(c,a)})),c=t(((e,t)=>{t.exports={PNG_SIGNATURE:[137,80,78,71,13,10,26,10],TYPE_IHDR:1229472850,TYPE_IEND:1229278788,TYPE_IDAT:1229209940,TYPE_PLTE:1347179589,TYPE_tRNS:1951551059,TYPE_gAMA:1732332865,COLORTYPE_GRAYSCALE:0,COLORTYPE_PALETTE:1,COLORTYPE_COLOR:2,COLORTYPE_ALPHA:4,COLORTYPE_PALETTE_COLOR:3,COLORTYPE_COLOR_ALPHA:6,COLORTYPE_TO_BPP_MAP:{0:1,2:3,3:1,4:2,6:4},GAMMA_DIVISION:1e5}})),l=t(((e,t)=>{let n=[];(function(){for(let e=0;e<256;e++){let t=e;for(let e=0;e<8;e++)t&1?t=3988292384^t>>>1:t>>>=1;n[e]=t}})();let r=t.exports=function(){this._crc=-1};r.prototype.write=function(e){for(let t=0;t<e.length;t++)this._crc=n[(this._crc^e[t])&255]^this._crc>>>8;return!0},r.prototype.crc32=function(){return this._crc^-1},r.crc32=function(e){let t=-1;for(let r=0;r<e.length;r++)t=n[(t^e[r])&255]^t>>>8;return t^-1}})),u=t(((e,t)=>{let n=c(),r=l(),i=t.exports=function(e,t){this._options=e,e.checkCRC=e.checkCRC!==!1,this._hasIHDR=!1,this._hasIEND=!1,this._emittedHeadersFinished=!1,this._palette=[],this._colorType=0,this._chunks={},this._chunks[n.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[n.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[n.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[n.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[n.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[n.TYPE_gAMA]=this._handleGAMA.bind(this),this.read=t.read,this.error=t.error,this.metadata=t.metadata,this.gamma=t.gamma,this.transColor=t.transColor,this.palette=t.palette,this.parsed=t.parsed,this.inflateData=t.inflateData,this.finished=t.finished,this.simpleTransparency=t.simpleTransparency,this.headersFinished=t.headersFinished||function(){}};i.prototype.start=function(){this.read(n.PNG_SIGNATURE.length,this._parseSignature.bind(this))},i.prototype._parseSignature=function(e){let t=n.PNG_SIGNATURE;for(let n=0;n<t.length;n++)if(e[n]!==t[n]){this.error(Error(`Invalid file signature`));return}this.read(8,this._parseChunkBegin.bind(this))},i.prototype._parseChunkBegin=function(e){let t=e.readUInt32BE(0),i=e.readUInt32BE(4),a=``;for(let t=4;t<8;t++)a+=String.fromCharCode(e[t]);let o=!!(e[4]&32);if(!this._hasIHDR&&i!==n.TYPE_IHDR){this.error(Error(`Expected IHDR on beggining`));return}if(this._crc=new r,this._crc.write(Buffer.from(a)),this._chunks[i])return this._chunks[i](t);if(!o){this.error(Error(`Unsupported critical chunk type `+a));return}this.read(t+4,this._skipChunk.bind(this))},i.prototype._skipChunk=function(){this.read(8,this._parseChunkBegin.bind(this))},i.prototype._handleChunkEnd=function(){this.read(4,this._parseChunkEnd.bind(this))},i.prototype._parseChunkEnd=function(e){let t=e.readInt32BE(0),n=this._crc.crc32();if(this._options.checkCRC&&n!==t){this.error(Error(`Crc error - `+t+` - `+n));return}this._hasIEND||this.read(8,this._parseChunkBegin.bind(this))},i.prototype._handleIHDR=function(e){this.read(e,this._parseIHDR.bind(this))},i.prototype._parseIHDR=function(e){this._crc.write(e);let t=e.readUInt32BE(0),r=e.readUInt32BE(4),i=e[8],a=e[9],o=e[10],s=e[11],c=e[12];if(i!==8&&i!==4&&i!==2&&i!==1&&i!==16){this.error(Error(`Unsupported bit depth `+i));return}if(!(a in n.COLORTYPE_TO_BPP_MAP)){this.error(Error(`Unsupported color type`));return}if(o!==0){this.error(Error(`Unsupported compression method`));return}if(s!==0){this.error(Error(`Unsupported filter method`));return}if(c!==0&&c!==1){this.error(Error(`Unsupported interlace method`));return}this._colorType=a;let l=n.COLORTYPE_TO_BPP_MAP[this._colorType];this._hasIHDR=!0,this.metadata({width:t,height:r,depth:i,interlace:!!c,palette:!!(a&n.COLORTYPE_PALETTE),color:!!(a&n.COLORTYPE_COLOR),alpha:!!(a&n.COLORTYPE_ALPHA),bpp:l,colorType:a}),this._handleChunkEnd()},i.prototype._handlePLTE=function(e){this.read(e,this._parsePLTE.bind(this))},i.prototype._parsePLTE=function(e){this._crc.write(e);let t=Math.floor(e.length/3);for(let n=0;n<t;n++)this._palette.push([e[n*3],e[n*3+1],e[n*3+2],255]);this.palette(this._palette),this._handleChunkEnd()},i.prototype._handleTRNS=function(e){this.simpleTransparency(),this.read(e,this._parseTRNS.bind(this))},i.prototype._parseTRNS=function(e){if(this._crc.write(e),this._colorType===n.COLORTYPE_PALETTE_COLOR){if(this._palette.length===0){this.error(Error(`Transparency chunk must be after palette`));return}if(e.length>this._palette.length){this.error(Error(`More transparent colors than palette size`));return}for(let t=0;t<e.length;t++)this._palette[t][3]=e[t];this.palette(this._palette)}this._colorType===n.COLORTYPE_GRAYSCALE&&this.transColor([e.readUInt16BE(0)]),this._colorType===n.COLORTYPE_COLOR&&this.transColor([e.readUInt16BE(0),e.readUInt16BE(2),e.readUInt16BE(4)]),this._handleChunkEnd()},i.prototype._handleGAMA=function(e){this.read(e,this._parseGAMA.bind(this))},i.prototype._parseGAMA=function(e){this._crc.write(e),this.gamma(e.readUInt32BE(0)/n.GAMMA_DIVISION),this._handleChunkEnd()},i.prototype._handleIDAT=function(e){this._emittedHeadersFinished||(this._emittedHeadersFinished=!0,this.headersFinished()),this.read(-e,this._parseIDAT.bind(this,e))},i.prototype._parseIDAT=function(e,t){if(this._crc.write(t),this._colorType===n.COLORTYPE_PALETTE_COLOR&&this._palette.length===0)throw Error(`Expected palette not found`);this.inflateData(t);let r=e-t.length;r>0?this._handleIDAT(r):this._handleChunkEnd()},i.prototype._handleIEND=function(e){this.read(e,this._parseIEND.bind(this))},i.prototype._parseIEND=function(e){this._crc.write(e),this._hasIEND=!0,this._handleChunkEnd(),this.finished&&this.finished()}})),d=t((e=>{let t=i(),n=[function(){},function(e,t,n,r){if(r===t.length)throw Error(`Ran out of data`);let i=t[r];e[n]=i,e[n+1]=i,e[n+2]=i,e[n+3]=255},function(e,t,n,r){if(r+1>=t.length)throw Error(`Ran out of data`);let i=t[r];e[n]=i,e[n+1]=i,e[n+2]=i,e[n+3]=t[r+1]},function(e,t,n,r){if(r+2>=t.length)throw Error(`Ran out of data`);e[n]=t[r],e[n+1]=t[r+1],e[n+2]=t[r+2],e[n+3]=255},function(e,t,n,r){if(r+3>=t.length)throw Error(`Ran out of data`);e[n]=t[r],e[n+1]=t[r+1],e[n+2]=t[r+2],e[n+3]=t[r+3]}],r=[function(){},function(e,t,n,r){let i=t[0];e[n]=i,e[n+1]=i,e[n+2]=i,e[n+3]=r},function(e,t,n){let r=t[0];e[n]=r,e[n+1]=r,e[n+2]=r,e[n+3]=t[1]},function(e,t,n,r){e[n]=t[0],e[n+1]=t[1],e[n+2]=t[2],e[n+3]=r},function(e,t,n){e[n]=t[0],e[n+1]=t[1],e[n+2]=t[2],e[n+3]=t[3]}];function a(e,t){let n=[],r=0;function i(){if(r===e.length)throw Error(`Ran out of data`);let i=e[r];r++;let a,o,s,c,l,u,d,f;switch(t){default:throw Error(`unrecognised depth`);case 16:d=e[r],r++,n.push((i<<8)+d);break;case 4:d=i&15,f=i>>4,n.push(f,d);break;case 2:l=i&3,u=i>>2&3,d=i>>4&3,f=i>>6&3,n.push(f,d,u,l);break;case 1:a=i&1,o=i>>1&1,s=i>>2&1,c=i>>3&1,l=i>>4&1,u=i>>5&1,d=i>>6&1,f=i>>7&1,n.push(f,d,u,l,c,s,o,a)}}return{get:function(e){for(;n.length<e;)i();let t=n.slice(0,e);return n=n.slice(e),t},resetAfterLine:function(){n.length=0},end:function(){if(r!==e.length)throw Error(`extra data found`)}}}function o(e,t,r,i,a,o){let s=e.width,c=e.height,l=e.index;for(let e=0;e<c;e++)for(let c=0;c<s;c++){let s=r(c,e,l);n[i](t,a,s,o),o+=i}return o}function s(e,t,n,i,a,o){let s=e.width,c=e.height,l=e.index;for(let e=0;e<c;e++){for(let c=0;c<s;c++){let s=a.get(i),u=n(c,e,l);r[i](t,s,u,o)}a.resetAfterLine()}}e.dataToBitMap=function(e,n){let r=n.width,i=n.height,c=n.depth,l=n.bpp,u=n.interlace,d;c!==8&&(d=a(e,c));let f;f=c<=8?Buffer.alloc(r*i*4):new Uint16Array(r*i*4);let p=2**c-1,m=0,h,g;if(u)h=t.getImagePasses(r,i),g=t.getInterlaceIterator(r,i);else{let e=0;g=function(){let t=e;return e+=4,t},h=[{width:r,height:i}]}for(let t=0;t<h.length;t++)c===8?m=o(h[t],f,g,l,e,m):s(h[t],f,g,l,d,p);if(c===8){if(m!==e.length)throw Error(`extra data found`)}else d.end();return f}})),f=t(((e,t)=>{function n(e,t,n,r,i){let a=0;for(let o=0;o<r;o++)for(let r=0;r<n;r++){let n=i[e[a]];if(!n)throw Error(`index `+e[a]+` not in palette`);for(let e=0;e<4;e++)t[a+e]=n[e];a+=4}}function r(e,t,n,r,i){let a=0;for(let o=0;o<r;o++)for(let r=0;r<n;r++){let n=!1;if(i.length===1?i[0]===e[a]&&(n=!0):i[0]===e[a]&&i[1]===e[a+1]&&i[2]===e[a+2]&&(n=!0),n)for(let e=0;e<4;e++)t[a+e]=0;a+=4}}function i(e,t,n,r,i){let a=2**i-1,o=0;for(let i=0;i<r;i++)for(let r=0;r<n;r++){for(let n=0;n<4;n++)t[o+n]=Math.floor(e[o+n]*255/a+.5);o+=4}}t.exports=function(e,t,a=!1){let o=t.depth,s=t.width,c=t.height,l=t.colorType,u=t.transColor,d=t.palette,f=e;return l===3?n(e,f,s,c,d):(u&&r(e,f,s,c,u),o!==8&&!a&&(o===16&&(f=Buffer.alloc(s*c*4)),i(e,f,s,c,o))),f}})),p=t(((t,n)=>{let i=e(`util`),a=e(`zlib`),o=r(),c=s(),l=u(),p=d(),m=f(),h=n.exports=function(e){o.call(this),this._parser=new l(e,{read:this.read.bind(this),error:this._handleError.bind(this),metadata:this._handleMetaData.bind(this),gamma:this.emit.bind(this,`gamma`),palette:this._handlePalette.bind(this),transColor:this._handleTransColor.bind(this),finished:this._finished.bind(this),inflateData:this._inflateData.bind(this),simpleTransparency:this._simpleTransparency.bind(this),headersFinished:this._headersFinished.bind(this)}),this._options=e,this.writable=!0,this._parser.start()};i.inherits(h,o),h.prototype._handleError=function(e){this.emit(`error`,e),this.writable=!1,this.destroy(),this._inflate&&this._inflate.destroy&&this._inflate.destroy(),this._filter&&(this._filter.destroy(),this._filter.on(`error`,function(){})),this.errord=!0},h.prototype._inflateData=function(e){if(!this._inflate){if(this._bitmapInfo.interlace)this._inflate=a.createInflate(),this._inflate.on(`error`,this.emit.bind(this,`error`)),this._filter.on(`complete`,this._complete.bind(this)),this._inflate.pipe(this._filter);else{let e=((this._bitmapInfo.width*this._bitmapInfo.bpp*this._bitmapInfo.depth+7>>3)+1)*this._bitmapInfo.height,t=Math.max(e,a.Z_MIN_CHUNK);this._inflate=a.createInflate({chunkSize:t});let n=e,r=this.emit.bind(this,`error`);this._inflate.on(`error`,function(e){n&&r(e)}),this._filter.on(`complete`,this._complete.bind(this));let i=this._filter.write.bind(this._filter);this._inflate.on(`data`,function(e){n&&(e.length>n&&(e=e.slice(0,n)),n-=e.length,i(e))}),this._inflate.on(`end`,this._filter.end.bind(this._filter))}}this._inflate.write(e)},h.prototype._handleMetaData=function(e){this._metaData=e,this._bitmapInfo=Object.create(e),this._filter=new c(this._bitmapInfo)},h.prototype._handleTransColor=function(e){this._bitmapInfo.transColor=e},h.prototype._handlePalette=function(e){this._bitmapInfo.palette=e},h.prototype._simpleTransparency=function(){this._metaData.alpha=!0},h.prototype._headersFinished=function(){this.emit(`metadata`,this._metaData)},h.prototype._finished=function(){this.errord||(this._inflate?this._inflate.end():this.emit(`error`,`No Inflate block`))},h.prototype._complete=function(e){if(this.errord)return;let t;try{let n=p.dataToBitMap(e,this._bitmapInfo);t=m(n,this._bitmapInfo,this._options.skipRescale),n=null}catch(e){this._handleError(e);return}this.emit(`parsed`,t)}})),m=t(((e,t)=>{let n=c();t.exports=function(e,t,r,i){let a=[n.COLORTYPE_COLOR_ALPHA,n.COLORTYPE_ALPHA].indexOf(i.colorType)!==-1;if(i.colorType===i.inputColorType){let t=(function(){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,256,!0),new Int16Array(e)[0]!==256})();if(i.bitDepth===8||i.bitDepth===16&&t)return e}let o=i.bitDepth===16?new Uint16Array(e.buffer):e,s=255,c=n.COLORTYPE_TO_BPP_MAP[i.inputColorType];c===4&&!i.inputHasAlpha&&(c=3);let l=n.COLORTYPE_TO_BPP_MAP[i.colorType];i.bitDepth===16&&(s=65535,l*=2);let u=Buffer.alloc(t*r*l),d=0,f=0,p=i.bgColor||{};p.red===void 0&&(p.red=s),p.green===void 0&&(p.green=s),p.blue===void 0&&(p.blue=s);function m(){let e,t,r,c=s;switch(i.inputColorType){case n.COLORTYPE_COLOR_ALPHA:c=o[d+3],e=o[d],t=o[d+1],r=o[d+2];break;case n.COLORTYPE_COLOR:e=o[d],t=o[d+1],r=o[d+2];break;case n.COLORTYPE_ALPHA:c=o[d+1],e=o[d],t=e,r=e;break;case n.COLORTYPE_GRAYSCALE:e=o[d],t=e,r=e;break;default:throw Error(`input color type:`+i.inputColorType+` is not supported at present`)}return i.inputHasAlpha&&(a||(c/=s,e=Math.min(Math.max(Math.round((1-c)*p.red+c*e),0),s),t=Math.min(Math.max(Math.round((1-c)*p.green+c*t),0),s),r=Math.min(Math.max(Math.round((1-c)*p.blue+c*r),0),s))),{red:e,green:t,blue:r,alpha:c}}for(let e=0;e<r;e++)for(let e=0;e<t;e++){let e=m(o,d);switch(i.colorType){case n.COLORTYPE_COLOR_ALPHA:case n.COLORTYPE_COLOR:i.bitDepth===8?(u[f]=e.red,u[f+1]=e.green,u[f+2]=e.blue,a&&(u[f+3]=e.alpha)):(u.writeUInt16BE(e.red,f),u.writeUInt16BE(e.green,f+2),u.writeUInt16BE(e.blue,f+4),a&&u.writeUInt16BE(e.alpha,f+6));break;case n.COLORTYPE_ALPHA:case n.COLORTYPE_GRAYSCALE:{let t=(e.red+e.green+e.blue)/3;i.bitDepth===8?(u[f]=t,a&&(u[f+1]=e.alpha)):(u.writeUInt16BE(t,f),a&&u.writeUInt16BE(e.alpha,f+2));break}default:throw Error(`unrecognised color Type `+i.colorType)}d+=c,f+=l}return u}})),h=t(((e,t)=>{let n=a();function r(e,t,n,r,i){for(let a=0;a<n;a++)r[i+a]=e[t+a]}function i(e,t,n){let r=0,i=t+n;for(let n=t;n<i;n++)r+=Math.abs(e[n]);return r}function o(e,t,n,r,i,a){for(let o=0;o<n;o++){let n=o>=a?e[t+o-a]:0,s=e[t+o]-n;r[i+o]=s}}function s(e,t,n,r){let i=0;for(let a=0;a<n;a++){let n=a>=r?e[t+a-r]:0,o=e[t+a]-n;i+=Math.abs(o)}return i}function c(e,t,n,r,i){for(let a=0;a<n;a++){let o=t>0?e[t+a-n]:0,s=e[t+a]-o;r[i+a]=s}}function l(e,t,n){let r=0,i=t+n;for(let a=t;a<i;a++){let i=t>0?e[a-n]:0,o=e[a]-i;r+=Math.abs(o)}return r}function u(e,t,n,r,i,a){for(let o=0;o<n;o++){let s=o>=a?e[t+o-a]:0,c=t>0?e[t+o-n]:0,l=e[t+o]-(s+c>>1);r[i+o]=l}}function d(e,t,n,r){let i=0;for(let a=0;a<n;a++){let o=a>=r?e[t+a-r]:0,s=t>0?e[t+a-n]:0,c=e[t+a]-(o+s>>1);i+=Math.abs(c)}return i}function f(e,t,r,i,a,o){for(let s=0;s<r;s++){let c=s>=o?e[t+s-o]:0,l=t>0?e[t+s-r]:0,u=t>0&&s>=o?e[t+s-(r+o)]:0,d=e[t+s]-n(c,l,u);i[a+s]=d}}function p(e,t,r,i){let a=0;for(let o=0;o<r;o++){let s=o>=i?e[t+o-i]:0,c=t>0?e[t+o-r]:0,l=t>0&&o>=i?e[t+o-(r+i)]:0,u=e[t+o]-n(s,c,l);a+=Math.abs(u)}return a}let m={0:r,1:o,2:c,3:u,4:f},h={0:i,1:s,2:l,3:d,4:p};t.exports=function(e,t,n,r,i){let a;if(!(`filterType`in r)||r.filterType===-1)a=[0,1,2,3,4];else if(typeof r.filterType==`number`)a=[r.filterType];else throw Error(`unrecognised filter types`);r.bitDepth===16&&(i*=2);let o=t*i,s=0,c=0,l=Buffer.alloc((o+1)*n),u=a[0];for(let t=0;t<n;t++){if(a.length>1){let t=1/0;for(let n=0;n<a.length;n++){let r=h[a[n]](e,c,o,i);r<t&&(u=a[n],t=r)}}l[s]=u,s++,m[u](e,c,o,l,s,i),s+=o,c+=o}return l}})),g=t(((t,n)=>{let r=c(),i=l(),a=m(),o=h(),s=e(`zlib`),u=n.exports=function(e){if(this._options=e,e.deflateChunkSize=e.deflateChunkSize||32768,e.deflateLevel=e.deflateLevel==null?9:e.deflateLevel,e.deflateStrategy=e.deflateStrategy==null?3:e.deflateStrategy,e.inputHasAlpha=e.inputHasAlpha==null||e.inputHasAlpha,e.deflateFactory=e.deflateFactory||s.createDeflate,e.bitDepth=e.bitDepth||8,e.colorType=typeof e.colorType==`number`?e.colorType:r.COLORTYPE_COLOR_ALPHA,e.inputColorType=typeof e.inputColorType==`number`?e.inputColorType:r.COLORTYPE_COLOR_ALPHA,[r.COLORTYPE_GRAYSCALE,r.COLORTYPE_COLOR,r.COLORTYPE_COLOR_ALPHA,r.COLORTYPE_ALPHA].indexOf(e.colorType)===-1)throw Error(`option color type:`+e.colorType+` is not supported at present`);if([r.COLORTYPE_GRAYSCALE,r.COLORTYPE_COLOR,r.COLORTYPE_COLOR_ALPHA,r.COLORTYPE_ALPHA].indexOf(e.inputColorType)===-1)throw Error(`option input color type:`+e.inputColorType+` is not supported at present`);if(e.bitDepth!==8&&e.bitDepth!==16)throw Error(`option bit depth:`+e.bitDepth+` is not supported at present`)};u.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy}},u.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions())},u.prototype.filterData=function(e,t,n){let i=a(e,t,n,this._options),s=r.COLORTYPE_TO_BPP_MAP[this._options.colorType];return o(i,t,n,this._options,s)},u.prototype._packChunk=function(e,t){let n=t?t.length:0,r=Buffer.alloc(n+12);return r.writeUInt32BE(n,0),r.writeUInt32BE(e,4),t&&t.copy(r,8),r.writeInt32BE(i.crc32(r.slice(4,r.length-4)),r.length-4),r},u.prototype.packGAMA=function(e){let t=Buffer.alloc(4);return t.writeUInt32BE(Math.floor(e*r.GAMMA_DIVISION),0),this._packChunk(r.TYPE_gAMA,t)},u.prototype.packIHDR=function(e,t){let n=Buffer.alloc(13);return n.writeUInt32BE(e,0),n.writeUInt32BE(t,4),n[8]=this._options.bitDepth,n[9]=this._options.colorType,n[10]=0,n[11]=0,n[12]=0,this._packChunk(r.TYPE_IHDR,n)},u.prototype.packIDAT=function(e){return this._packChunk(r.TYPE_IDAT,e)},u.prototype.packIEND=function(){return this._packChunk(r.TYPE_IEND,null)}})),_=t(((t,n)=>{let r=e(`util`),i=e(`stream`),a=c(),o=g(),s=n.exports=function(e){i.call(this);let t=e||{};this._packer=new o(t),this._deflate=this._packer.createDeflate(),this.readable=!0};r.inherits(s,i),s.prototype.pack=function(e,t,n,r){this.emit(`data`,Buffer.from(a.PNG_SIGNATURE)),this.emit(`data`,this._packer.packIHDR(t,n)),r&&this.emit(`data`,this._packer.packGAMA(r));let i=this._packer.filterData(e,t,n);this._deflate.on(`error`,this.emit.bind(this,`error`)),this._deflate.on(`data`,function(e){this.emit(`data`,this._packer.packIDAT(e))}.bind(this)),this._deflate.on(`end`,function(){this.emit(`data`,this._packer.packIEND()),this.emit(`end`)}.bind(this)),this._deflate.end(i)}})),v=t(((t,n)=>{let r=e(`assert`).ok,i=e(`zlib`),a=e(`util`),o=e(`buffer`).kMaxLength;function s(e){if(!(this instanceof s))return new s(e);e&&e.chunkSize<i.Z_MIN_CHUNK&&(e.chunkSize=i.Z_MIN_CHUNK),i.Inflate.call(this,e),this._offset=this._offset===void 0?this._outOffset:this._offset,this._buffer=this._buffer||this._outBuffer,e&&e.maxLength!=null&&(this._maxLength=e.maxLength)}function c(e){return new s(e)}function l(e,t){t&&process.nextTick(t),e._handle&&=(e._handle.close(),null)}s.prototype._processChunk=function(e,t,n){if(typeof n==`function`)return i.Inflate._processChunk.call(this,e,t,n);let a=this,s=e&&e.length,c=this._chunkSize-this._offset,u=this._maxLength,d=0,f=[],p=0,m;this.on(`error`,function(e){m=e});function h(e,t){if(a._hadError)return;let n=c-t;if(r(n>=0,`have should not go down`),n>0){let e=a._buffer.slice(a._offset,a._offset+n);if(a._offset+=n,e.length>u&&(e=e.slice(0,u)),f.push(e),p+=e.length,u-=e.length,u===0)return!1}return(t===0||a._offset>=a._chunkSize)&&(c=a._chunkSize,a._offset=0,a._buffer=Buffer.allocUnsafe(a._chunkSize)),t===0&&(d+=s-e,s=e,!0)}r(this._handle,`zlib binding closed`);let g;do g=this._handle.writeSync(t,e,d,s,this._buffer,this._offset,c),g||=this._writeState;while(!this._hadError&&h(g[0],g[1]));if(this._hadError)throw m;if(p>=o)throw l(this),RangeError(`Cannot create final Buffer. It would be larger than 0x`+o.toString(16)+` bytes`);let _=Buffer.concat(f,p);return l(this),_},a.inherits(s,i.Inflate);function u(e,t){if(typeof t==`string`&&(t=Buffer.from(t)),!(t instanceof Buffer))throw TypeError(`Not a string or buffer`);let n=e._finishFlushFlag;return n??=i.Z_FINISH,e._processChunk(t,n)}function d(e,t){return u(new s(t),e)}n.exports=t=d,t.Inflate=s,t.createInflate=c,t.inflateSync=d})),y=t(((e,t)=>{let n=t.exports=function(e){this._buffer=e,this._reads=[]};n.prototype.read=function(e,t){this._reads.push({length:Math.abs(e),allowLess:e<0,func:t})},n.prototype.process=function(){for(;this._reads.length>0&&this._buffer.length;){let e=this._reads[0];if(this._buffer.length&&(this._buffer.length>=e.length||e.allowLess)){this._reads.shift();let t=this._buffer;this._buffer=t.slice(e.length),e.func.call(this,t.slice(0,e.length))}else break}if(this._reads.length>0)throw Error(`There are some read requests waitng on finished stream`);if(this._buffer.length>0)throw Error(`unrecognised content at end of stream`)}})),b=t((e=>{let t=y(),n=o();e.process=function(e,r){let i=[],a=new t(e);return new n(r,{read:a.read.bind(a),write:function(e){i.push(e)},complete:function(){}}).start(),a.process(),Buffer.concat(i)}})),x=t(((t,n)=>{let r=!0,i=e(`zlib`),a=v();i.deflateSync||(r=!1);let o=y(),s=b(),c=u(),l=d(),p=f();n.exports=function(e,t){if(!r)throw Error(`To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0`);let n;function u(e){n=e}let d;function f(e){d=e}function m(e){d.transColor=e}function h(e){d.palette=e}function g(){d.alpha=!0}let _;function v(e){_=e}let y=[];function b(e){y.push(e)}let x=new o(e);if(new c(t,{read:x.read.bind(x),error:u,metadata:f,gamma:v,palette:h,transColor:m,inflateData:b,simpleTransparency:g}).start(),x.process(),n)throw n;let S=Buffer.concat(y);y.length=0;let C;if(d.interlace)C=i.inflateSync(S);else{let e=((d.width*d.bpp*d.depth+7>>3)+1)*d.height;C=a(S,{chunkSize:e,maxLength:e})}if(S=null,!C||!C.length)throw Error(`bad png - invalid inflate data response`);let w=s.process(C,d);S=null;let T=l.dataToBitMap(w,d);w=null;let E=p(T,d,t.skipRescale);return d.data=E,d.gamma=_||0,d}})),S=t(((t,n)=>{let r=!0,i=e(`zlib`);i.deflateSync||(r=!1);let a=c(),o=g();n.exports=function(e,t){if(!r)throw Error(`To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0`);let n=new o(t||{}),s=[];s.push(Buffer.from(a.PNG_SIGNATURE)),s.push(n.packIHDR(e.width,e.height)),e.gamma&&s.push(n.packGAMA(e.gamma));let c=n.filterData(e.data,e.width,e.height),l=i.deflateSync(c,n.getDeflateOptions());if(c=null,!l||!l.length)throw Error(`bad png - invalid compressed data response`);return s.push(n.packIDAT(l)),s.push(n.packIEND()),Buffer.concat(s)}})),C=t((e=>{let t=x(),n=S();e.read=function(e,n){return t(e,n||{})},e.write=function(e,t){return n(e,t)}})),w=t((t=>{let n=e(`util`),r=e(`stream`),i=p(),a=_(),o=C(),s=t.PNG=function(e){r.call(this),e||={},this.width=e.width|0,this.height=e.height|0,this.data=this.width>0&&this.height>0?Buffer.alloc(4*this.width*this.height):null,e.fill&&this.data&&this.data.fill(0),this.gamma=0,this.readable=this.writable=!0,this._parser=new i(e),this._parser.on(`error`,this.emit.bind(this,`error`)),this._parser.on(`close`,this._handleClose.bind(this)),this._parser.on(`metadata`,this._metadata.bind(this)),this._parser.on(`gamma`,this._gamma.bind(this)),this._parser.on(`parsed`,function(e){this.data=e,this.emit(`parsed`,e)}.bind(this)),this._packer=new a(e),this._packer.on(`data`,this.emit.bind(this,`data`)),this._packer.on(`end`,this.emit.bind(this,`end`)),this._parser.on(`close`,this._handleClose.bind(this)),this._packer.on(`error`,this.emit.bind(this,`error`))};n.inherits(s,r),s.sync=o,s.prototype.pack=function(){return!this.data||!this.data.length?(this.emit(`error`,`No data provided`),this):(process.nextTick(function(){this._packer.pack(this.data,this.width,this.height,this.gamma)}.bind(this)),this)},s.prototype.parse=function(e,t){if(t){let e,n;e=function(e){this.removeListener(`error`,n),this.data=e,t(null,this)}.bind(this),n=function(n){this.removeListener(`parsed`,e),t(n,null)}.bind(this),this.once(`parsed`,e),this.once(`error`,n)}return this.end(e),this},s.prototype.write=function(e){return this._parser.write(e),!0},s.prototype.end=function(e){this._parser.end(e)},s.prototype._metadata=function(e){this.width=e.width,this.height=e.height,this.emit(`metadata`,e)},s.prototype._gamma=function(e){this.gamma=e},s.prototype._handleClose=function(){!this._parser.writable&&!this._packer.readable&&this.emit(`close`)},s.bitblt=function(e,t,n,r,i,a,o,s){if(n|=0,r|=0,i|=0,a|=0,o|=0,s|=0,n>e.width||r>e.height||n+i>e.width||r+a>e.height)throw Error(`bitblt reading outside image`);if(o>t.width||s>t.height||o+i>t.width||s+a>t.height)throw Error(`bitblt writing outside image`);for(let c=0;c<a;c++)e.data.copy(t.data,(s+c)*t.width+o<<2,(r+c)*e.width+n<<2,(r+c)*e.width+n+i<<2)},s.prototype.bitblt=function(e,t,n,r,i,a,o){return s.bitblt(this,e,t,n,r,i,a,o),this},s.adjustGamma=function(e){if(e.gamma){for(let t=0;t<e.height;t++)for(let n=0;n<e.width;n++){let r=e.width*t+n<<2;for(let t=0;t<3;t++){let n=e.data[r+t]/255;n**=1/2.2/e.gamma,e.data[r+t]=Math.round(n*255)}}e.gamma=0}},s.prototype.adjustGamma=function(){s.adjustGamma(this)}}))();const T=Buffer.from([137,80,78,71,13,10,26,10]);function E(e){return e.subarray(0,T.length).equals(T)}function D(e,t){try{return w.PNG.sync.read(e)}catch(e){throw new n(`COMMAND_FAILED`,`Failed to decode ${t} as PNG`,{label:t,reason:e instanceof Error?e.message:String(e)})}}export{E as n,w as r,D as t};
@@ -1,2 +0,0 @@
1
- import{P as e}from"./sdk-contracts.js";import{l as t}from"./exec.js";import"./command.js";import n from"node:crypto";import r from"node:fs";import i from"node:os";import a from"node:path";function o(t,n){return new e(`COMMAND_FAILED`,`${t.label} not found or expired: ${n}`,{reason:`RESOURCE_EXPIRED`,hint:t.expiredHint})}function s(t,n,r,i){let a=t.get(n);if(!a)throw o(i,n);if(a.tenantId&&a.tenantId!==r)throw new e(`UNAUTHORIZED`,`${i.label} ${i.plural?`belong`:`belongs`} to a different tenant`);return a}const c=9e5,l={label:`Artifact`,expiredHint:`Downloadable artifacts are removed after download or after ${c/6e4} minutes. Re-run the command that produced the artifact and download it again.`},u=new Map;function d(e){let t=n.randomUUID(),r=Date.now(),i=setTimeout(()=>{C(t)},c);return i.unref(),u.set(t,{artifactPath:e.artifactPath,tenantId:e.tenantId,artifactType:e.artifactType,fileName:e.fileName,...e.displayRotation===void 0?{}:{displayRotation:e.displayRotation},deleteAfterDownload:e.deleteAfterDownload!==!1,createdAt:r,timer:i}),t}async function f(t,n){let{entry:r,stat:i}=h(t,n),a=await g(t,r,i);if(!a)throw new e(`COMMAND_FAILED`,`Artifact path is not a regular file or directory: ${r.artifactPath}`);return a}async function p(e){let t=[];for(let[n,i]of u){if(!b(i,e))continue;let a;try{a=r.statSync(i.artifactPath)}catch{C(n);continue}let o=await m(n,i,a);o&&t.push({id:n,...i.artifactType===void 0?{}:{artifactType:i.artifactType},filename:o.fileName??n,mimeType:o.mimeType,sizeBytes:o.sizeBytes,createdAt:new Date(i.createdAt).toISOString(),expiresAt:new Date(i.createdAt+c).toISOString(),...i.displayRotation===void 0?{}:{displayRotation:i.displayRotation}})}return t}async function m(e,t,n){try{return await g(e,t,n)}catch{return null}}function h(t,n){let i=s(u,t,n,l),a;try{a=r.statSync(i.artifactPath)}catch{throw C(t),new e(`COMMAND_FAILED`,`Artifact file is missing: ${i.artifactPath}`)}return{entry:i,stat:a}}async function g(e,t,n){if(n.isFile())return{artifactPath:t.artifactPath,fileName:x(t.fileName,e),mimeType:`application/octet-stream`,sizeBytes:n.size};if(!n.isDirectory())return null;let r=await _(e,t);return{artifactPath:r.archivePath,fileName:r.fileName,mimeType:`application/gzip`,sizeBytes:r.sizeBytes}}async function _(e,t){if(t.directoryArchive&&r.existsSync(t.directoryArchive.archivePath))return t.directoryArchive;if(t.directoryArchivePromise)return await t.directoryArchivePromise;let n=v(e,t);t.directoryArchivePromise=n;try{return await n}finally{t.directoryArchivePromise===n&&(t.directoryArchivePromise=void 0)}}async function v(s,c){w(c);let d=y(x(c.fileName,a.basename(c.artifactPath)||s)),f=r.mkdtempSync(a.join(i.tmpdir(),`agent-device-download-${n.randomUUID()}-`)),p=a.join(f,d);try{await t(`tar`,[`czf`,p,`-C`,a.dirname(c.artifactPath),`--`,a.basename(c.artifactPath)],{env:{...process.env,COPYFILE_DISABLE:`1`}});let e={archivePath:p,tempDir:f,fileName:d,sizeBytes:r.statSync(p).size};if(u.get(s)!==c)throw r.rmSync(f,{recursive:!0,force:!0}),o(l,s);return c.directoryArchive=e,e}catch(t){throw r.rmSync(f,{recursive:!0,force:!0}),t instanceof e?t:new e(`COMMAND_FAILED`,`Failed to archive downloadable artifact: ${c.artifactPath}`,{artifactPath:c.artifactPath},t instanceof Error?t:void 0)}}function y(e){let t=e.toLowerCase();return t.endsWith(`.tar.gz`)||t.endsWith(`.tgz`)?e:`${e}.tar.gz`}function b(e,t){return!e.tenantId||e.tenantId===t}function x(e,t){let n=e?.trim();return n&&!S(n)?n:t}function S(e){return e.includes(`/`)||e.includes(`\\`)||e.includes(`\0`)||e.includes(`\r`)||e.includes(`
2
- `)}function C(e){let t=u.get(e);if(t&&(clearTimeout(t.timer),u.delete(e),w(t),t.deleteAfterDownload))try{r.rmSync(t.artifactPath,{recursive:!0,force:!0})}catch{}}function w(e){if(e.directoryArchive)try{r.rmSync(e.directoryArchive.tempDir,{recursive:!0,force:!0})}catch{}finally{e.directoryArchive=void 0}}const T=3e5,E={label:`Uploaded artifact`,expiredHint:`Uploaded artifacts expire ${T/6e4} minutes after upload. Upload the file again and retry with the new upload id.`},D=new Map;function O(e){let t=n.randomUUID(),r=setTimeout(()=>{A(t)},T);return r.unref(),D.set(t,{artifactPath:e.artifactPath,tempDir:e.tempDir,tenantId:e.tenantId,timer:r}),t}function k(e,t){let n=s(D,e,t,E);return clearTimeout(n.timer),n.artifactPath}function A(e){let t=D.get(e);t&&(clearTimeout(t.timer),D.delete(e),r.rmSync(t.tempDir,{recursive:!0,force:!0}))}function j(e){let t=e?.providerSessionId;return typeof t==`string`&&t.trim().length>0?t.trim():void 0}var M=class{records=new Map;now;retentionMs;constructor(e={}){this.now=e.now??(()=>Date.now()),this.retentionMs=Number.isInteger(e.retentionMs)?Math.max(0,Number(e.retentionMs)):3e5}record(e,t){let n=e.leaseProvider?.trim(),r=t.trim();if(!n||!r)return;this.prune();let i={provider:n,providerSessionId:r,leaseId:e.leaseId,tenantId:e.tenantId};this.records.set(this.key(n,r),i)}markLeaseReleased(e,t=this.now()){let n=e.leaseProvider?.trim();if(!n)return;this.prune();let r=t+this.retentionMs;for(let[t,i]of this.records)i.provider===n&&i.leaseId===e.leaseId&&this.records.set(t,{...i,retainedUntil:r})}resolve(e){let t=e.provider?.trim(),n=e.providerSessionId?.trim(),r=e.tenantId?.trim();if(!t||!n||!r)return;this.prune();let i=this.records.get(this.key(t,n));if(!(!i||i.tenantId!==r))return{...i}}prune(){let e=this.now();for(let[t,n]of this.records)n.retainedUntil!==void 0&&n.retainedUntil<=e&&this.records.delete(t)}key(e,t){return JSON.stringify([e,t])}};export{p as a,d as c,A as i,O as l,j as n,f as o,C as r,k as s,M as t,s as u};
@@ -1 +0,0 @@
1
- const e={browserStack:`browserstack`,awsDeviceFarm:`aws-device-farm`},t={username:`BROWSERSTACK_USERNAME`,accessKey:`BROWSERSTACK_ACCESS_KEY`},n={leaseKind:`direct-device-provider`,requiresAppAttachment:!1,requiresRemoteDaemon:!1,supportsArtifacts:!0,supportsDeferredAppSelection:!1,supportsDirectPortReverse:!1,usesCloudWebDriverLease:!0},r=Object.freeze([{provider:e.browserStack,connection:n,credentialVariables:Object.values(t)},{provider:e.awsDeviceFarm,connection:{...n,requiresAppAttachment:!0}}]);function i(e){return r.find(t=>t.provider===e)}function a(e,t){if(e.slice(0,t.length).toLowerCase()===t)return`${t}${e.slice(t.length)}`}function o(e){return a(e,`bs://`)}function s(e){return/^bs:\/\/[\w.-]+$/.test(e)}export{s as a,i,e as n,o as r,t};