agent-device 0.21.15 → 0.21.16

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 (248) hide show
  1. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.15.apk → agent-device-android-ime-helper-0.21.16.apk} +0 -0
  2. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.16.apk.sha256 +1 -0
  3. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.15.manifest.json → agent-device-android-ime-helper-0.21.16.manifest.json} +4 -4
  4. package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.15.apk → agent-device-android-snapshot-helper-0.21.16.apk} +0 -0
  5. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.16.apk.sha256 +1 -0
  6. package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.15.manifest.json → agent-device-android-snapshot-helper-0.21.16.manifest.json} +6 -6
  7. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +1 -4
  8. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedTextEntry.h +9 -9
  9. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedTextEntry.m +13 -22
  10. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSystemSurfaceHostPolicy.swift +0 -9
  11. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +202 -73
  12. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +17 -2
  13. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +109 -128
  14. package/dist/src/adapter.js +1 -1
  15. package/dist/src/adb-executor.js +1 -1
  16. package/dist/src/adb-failure.js +1 -1
  17. package/dist/src/adb-transport.js +1 -1
  18. package/dist/src/agent-browser-provider.js +1 -1
  19. package/dist/src/agent-browser-tool.js +1 -1
  20. package/dist/src/agent-device-client.js +2 -2
  21. package/dist/src/ai-sdk.js +1 -1
  22. package/dist/src/alert-runtime.js +1 -1
  23. package/dist/src/android-input-ownership.js +1 -1
  24. package/dist/src/app-catalog.js +1 -1
  25. package/dist/src/app-deployment-resolution.js +1 -1
  26. package/dist/src/app-inventory.js +1 -1
  27. package/dist/src/app-launch.js +1 -1
  28. package/dist/src/app-lifecycle.js +1 -1
  29. package/dist/src/app-lifecycle2.js +1 -1
  30. package/dist/src/app-log-files.js +1 -1
  31. package/dist/src/app-log-runtime2.js +1 -1
  32. package/dist/src/app-resolution.js +1 -1
  33. package/dist/src/apple-runner-platform.js +1 -1
  34. package/dist/src/application-lifecycle-interaction.js +1 -1
  35. package/dist/src/archive.js +1 -1
  36. package/dist/src/artifact-download.js +1 -1
  37. package/dist/src/auth-session.js +1 -1
  38. package/dist/src/auth.js +1 -1
  39. package/dist/src/backend-snapshot-options.js +1 -1
  40. package/dist/src/boot-diagnostics.js +1 -1
  41. package/dist/src/capture-disclosure.js +1 -1
  42. package/dist/src/capture.js +1 -1
  43. package/dist/src/cli-config.js +1 -1
  44. package/dist/src/cli-help.js +3 -2
  45. package/dist/src/cli.js +4 -4
  46. package/dist/src/click-button.js +1 -1
  47. package/dist/src/client-metro.js +1 -1
  48. package/dist/src/client-types.d.ts +1 -1
  49. package/dist/src/clipboard-shell-response.js +1 -1
  50. package/dist/src/command-schema.js +1 -1
  51. package/dist/src/command-tools.js +2 -2
  52. package/dist/src/connection-runtime.js +1 -1
  53. package/dist/src/connection.js +5 -5
  54. package/dist/src/contracts.js +1 -1
  55. package/dist/src/daemon-client-lease-beat.js +1 -0
  56. package/dist/src/daemon-client-lifecycle.js +1 -1
  57. package/dist/src/daemon-client-transport.js +1 -0
  58. package/dist/src/daemon-shutdown-report.js +1 -1
  59. package/dist/src/daemon.js +1 -1
  60. package/dist/src/debug-symbols-facade.js +1 -1
  61. package/dist/src/device-claim-inspection.js +1 -1
  62. package/dist/src/device-claim-rule.js +2 -2
  63. package/dist/src/device-inventory-context.js +1 -1
  64. package/dist/src/device-rotation.js +1 -1
  65. package/dist/src/device-selection-resolver.js +1 -1
  66. package/dist/src/device-session.js +1 -1
  67. package/dist/src/device-shell.js +1 -1
  68. package/dist/src/device.js +1 -1
  69. package/dist/src/device2.js +1 -1
  70. package/dist/src/devicectl.js +1 -1
  71. package/dist/src/diagnostics.js +1 -1
  72. package/dist/src/dispatch-resolve.js +1 -1
  73. package/dist/src/doctor-facade.js +1 -1
  74. package/dist/src/doctor2.js +1 -1
  75. package/dist/src/durable-resource.js +1 -1
  76. package/dist/src/engine-eval-script.js +1 -1
  77. package/dist/src/error.js +1 -1
  78. package/dist/src/exec.js +1 -1
  79. package/dist/src/file.js +1 -1
  80. package/dist/src/find.js +1 -1
  81. package/dist/src/format.js +1 -1
  82. package/dist/src/gesture-admission.js +1 -1
  83. package/dist/src/gesture-plan.js +1 -1
  84. package/dist/src/gesture-runtime.js +1 -1
  85. package/dist/src/harmonyos.js +1 -1
  86. package/dist/src/helper.js +1 -1
  87. package/dist/src/host.js +1 -1
  88. package/dist/src/human-control-contract.js +1 -1
  89. package/dist/src/human-control.js +1 -1
  90. package/dist/src/index.js +1 -1
  91. package/dist/src/input-actions.js +1 -1
  92. package/dist/src/input-actions2.js +1 -1
  93. package/dist/src/install-artifact-facade.js +1 -1
  94. package/dist/src/install-source-network-transport.js +1 -1
  95. package/dist/src/install-source2.js +1 -1
  96. package/dist/src/interaction-positionals.js +1 -1
  97. package/dist/src/interaction-ref-policy.js +1 -1
  98. package/dist/src/interaction2.js +1 -1
  99. package/dist/src/interactor-operation-binding.js +1 -1
  100. package/dist/src/interactor.js +5 -4
  101. package/dist/src/interactor2.js +1 -1
  102. package/dist/src/interactors.js +1 -1
  103. package/dist/src/internal/bin.js +1 -1
  104. package/dist/src/internal/daemon.js +2 -2
  105. package/dist/src/internal/png-worker.js +1 -1
  106. package/dist/src/internal/run-script-http-child.js +1 -1
  107. package/dist/src/inventory.js +1 -1
  108. package/dist/src/inventory2.js +1 -1
  109. package/dist/src/inventory3.js +1 -1
  110. package/dist/src/inventory5.js +1 -1
  111. package/dist/src/ios-snapshot-engine.js +1 -1
  112. package/dist/src/ios-snapshot-runtime.js +1 -1
  113. package/dist/src/lease-context.js +1 -1
  114. package/dist/src/lease-scope.js +1 -1
  115. package/dist/src/lease.js +1 -1
  116. package/dist/src/limrun-download-file.js +1 -1
  117. package/dist/src/limrun-runtime-dependencies.js +1 -1
  118. package/dist/src/linux.js +1 -1
  119. package/dist/src/location-coordinates.js +1 -1
  120. package/dist/src/managed-device-scope.js +1 -1
  121. package/dist/src/mechanics.js +15 -15
  122. package/dist/src/multitouch-support.js +1 -1
  123. package/dist/src/native-build-cache.js +1 -1
  124. package/dist/src/observation.js +1 -1
  125. package/dist/src/overlay.js +2 -2
  126. package/dist/src/parameterized-recorded-fill.js +1 -1
  127. package/dist/src/perf-facade.js +1 -1
  128. package/dist/src/perf-runtime-operation-builder.js +1 -1
  129. package/dist/src/perf-runtime-plan.js +1 -1
  130. package/dist/src/perf-target.js +1 -1
  131. package/dist/src/perf.js +1 -1
  132. package/dist/src/physical-device-control.js +1 -1
  133. package/dist/src/platform-request-scope.js +1 -1
  134. package/dist/src/platform-runtime-managed-owner.js +1 -1
  135. package/dist/src/platform-runtime-open-target.js +1 -1
  136. package/dist/src/platform-runtime-operation-host.js +2 -2
  137. package/dist/src/platform-runtime-runtime-hints.js +1 -1
  138. package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
  139. package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
  140. package/dist/src/platform-runtime-screen-recording-process-host.js +1 -1
  141. package/dist/src/platform-runtime-unavailable.js +1 -1
  142. package/dist/src/platform-runtime.js +1 -1
  143. package/dist/src/platform-runtime2.js +1 -1
  144. package/dist/src/png-crop-bytes.js +1 -1
  145. package/dist/src/png-size.js +1 -1
  146. package/dist/src/png-worker-client.js +1 -1
  147. package/dist/src/png.js +1 -1
  148. package/dist/src/prepare-kind.js +1 -1
  149. package/dist/src/provider-session-ownership.js +1 -1
  150. package/dist/src/provider-webdriver.js +1 -1
  151. package/dist/src/proxy.js +1 -1
  152. package/dist/src/quality-warnings.js +1 -1
  153. package/dist/src/react-native.js +1 -1
  154. package/dist/src/record-runtime.js +1 -1
  155. package/dist/src/recording.js +1 -1
  156. package/dist/src/rect-center.js +1 -1
  157. package/dist/src/register-builtins.js +1 -1
  158. package/dist/src/registry.js +13 -13
  159. package/dist/src/remote-config2.js +1 -1
  160. package/dist/src/replay-divergence.js +1 -1
  161. package/dist/src/replay.js +1 -1
  162. package/dist/src/reporting.js +1 -1
  163. package/dist/src/request-admission.js +1 -1
  164. package/dist/src/request-cancel.js +1 -1
  165. package/dist/src/request-runtime-binding.js +1 -1
  166. package/dist/src/result-serialization.js +1 -1
  167. package/dist/src/retry.js +1 -1
  168. package/dist/src/runner-artifact-manifest.js +1 -0
  169. package/dist/src/runner-cache-metadata.js +3 -2
  170. package/dist/src/runner-client.js +1 -1
  171. package/dist/src/runner-dev-tools-security.js +1 -1
  172. package/dist/src/runner-device-readiness.js +1 -1
  173. package/dist/src/runner-disposal.js +1 -1
  174. package/dist/src/runner-error-classification.js +3 -3
  175. package/dist/src/runner-operations-facade.js +1 -1
  176. package/dist/src/runner.js +1 -1
  177. package/dist/src/runtime-transport-hints.js +1 -1
  178. package/dist/src/runtime.js +1 -1
  179. package/dist/src/runtime10.js +2 -2
  180. package/dist/src/runtime2.js +3 -3
  181. package/dist/src/runtime3.js +1 -1
  182. package/dist/src/runtime4.js +4 -4
  183. package/dist/src/runtime5.js +1 -1
  184. package/dist/src/runtime6.js +1 -1
  185. package/dist/src/runtime7.js +1 -1
  186. package/dist/src/runtime8.js +1 -1
  187. package/dist/src/runtime9.js +1 -1
  188. package/dist/src/screen-recording-admission-ledger.js +1 -1
  189. package/dist/src/screen-recording-completion.js +1 -1
  190. package/dist/src/screen-recording-options.js +1 -1
  191. package/dist/src/screen-recording-resource-recovery.js +1 -1
  192. package/dist/src/screen-recording-transport.js +1 -1
  193. package/dist/src/screenshot-density.js +1 -1
  194. package/dist/src/screenshot-image.js +1 -1
  195. package/dist/src/screenshot-runtime.js +1 -1
  196. package/dist/src/screenshot.js +1 -1
  197. package/dist/src/screenshot3.js +1 -1
  198. package/dist/src/script.js +1 -1
  199. package/dist/src/scroll-command.js +1 -1
  200. package/dist/src/scroll-gesture.js +1 -1
  201. package/dist/src/sdk-batch-runner.js +2 -2
  202. package/dist/src/sdk-batch.js +1 -1
  203. package/dist/src/sdk-contracts.js +2 -2
  204. package/dist/src/sdk-device.js +1 -1
  205. package/dist/src/sdk-io.js +1 -1
  206. package/dist/src/sdk-remote-config.js +1 -1
  207. package/dist/src/selector-runtime.js +1 -1
  208. package/dist/src/server.js +1 -1
  209. package/dist/src/session-allocation.js +1 -1
  210. package/dist/src/session-routing.js +1 -1
  211. package/dist/src/session-runtime-admission.js +1 -1
  212. package/dist/src/session-snapshot.js +1 -1
  213. package/dist/src/session-store.js +3 -3
  214. package/dist/src/session2.js +3 -3
  215. package/dist/src/settings.js +1 -1
  216. package/dist/src/settings2.js +1 -1
  217. package/dist/src/simctl.js +1 -1
  218. package/dist/src/simulator-boot.js +1 -1
  219. package/dist/src/simulator.js +1 -1
  220. package/dist/src/snapshot-runtime-binding.js +1 -1
  221. package/dist/src/snapshot-runtime.js +1 -1
  222. package/dist/src/snapshot-state.js +1 -1
  223. package/dist/src/snapshot2.js +1 -1
  224. package/dist/src/snapshot3.js +1 -1
  225. package/dist/src/snapshot4.js +1 -1
  226. package/dist/src/src.js +1 -1
  227. package/dist/src/src7.js +1 -1
  228. package/dist/src/src8.js +1 -1
  229. package/dist/src/stop-sequence.js +1 -1
  230. package/dist/src/string-enum.js +1 -1
  231. package/dist/src/takeover.js +1 -1
  232. package/dist/src/text-entry-focus.js +1 -1
  233. package/dist/src/tool-provider.js +1 -1
  234. package/dist/src/tool-provider2.js +1 -1
  235. package/dist/src/touch-runtime.js +1 -1
  236. package/dist/src/transport.js +1 -1
  237. package/dist/src/tv-remote.js +1 -1
  238. package/dist/src/type-text-runtime.js +1 -1
  239. package/dist/src/verified-file.js +1 -1
  240. package/dist/src/video.js +1 -1
  241. package/dist/src/viewport.js +1 -1
  242. package/dist/src/web.js +1 -1
  243. package/dist/src/web2.js +1 -1
  244. package/dist/src/webdriver-source.js +1 -1
  245. package/package.json +2 -2
  246. package/server.json +2 -2
  247. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.15.apk.sha256 +0 -1
  248. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.15.apk.sha256 +0 -1
@@ -1 +1 @@
1
- import{A as e,C as t,T as n,o as r,p as i,v as a}from"./sdk-contracts.js";import{u as o}from"./capture.js";import{r as s}from"./snapshot-capture-annotations.js";import{r as c}from"./snapshot-diagnostics.js";import{f as l}from"./android-input-ownership.js";import{b as u,l as d,p as f}from"./sdk-device.js";import{Ar as p,Bt as ee,Kn as te,Sn as ne,Tt as re,Vn as ie,Wt as ae,Yn as oe,Zn as se,ct as ce,dt as le,ht as ue,ir as de,lt as fe,nr as m,qn as pe,ut as me,xt as he}from"./sdk-batch.js";import{F as ge,I as _e,M as ve,P as ye,T as be,a as xe,g as Se,j as Ce,o as we,t as Te,x as h}from"./runtime.js";import{r as g}from"./success-text.js";import{g as Ee,o as _}from"./overlay.js";import{i as v}from"./click-button.js";import{a as De,r as y}from"./diagnostics.js";import{t as Oe}from"./timeouts.js";import"./diagnostics2.js";import"./retry.js";import{i as ke}from"./rect-center.js";import{t as Ae}from"./snapshot-state.js";import{n as je}from"./request-runtime-binding.js";import{i as Me}from"./lease-context.js";import{s as Ne}from"./tree.js";import{t as Pe}from"./interactor-types.js";import{randomInt as Fe}from"node:crypto";function Ie(e){return e.matchedRefs.length===0?{path:2,outcome:`unverifiable`,reason:`selector-miss`}:e.identitySetRefs.length===0?{path:3,outcome:`unverifiable`,reason:`identity-set-empty`}:e.identitySetRefs.length===1?e.identitySetRefs[0]===e.winnerRef?{path:4,outcome:`verified`}:{path:5,outcome:`unverifiable`,reason:`unique-but-wrong`}:e.siblingMatchRefs.length===1?e.siblingMatchRefs[0]===e.winnerRef?{path:6,outcome:`verified`}:{path:6,outcome:`unverifiable`,reason:`signal-isolated-wrong`}:e.regionMemberRefs!==void 0&&e.regionMemberRefs.length>0&&e.viewportCandidateRef!==void 0?e.viewportCandidateRef===e.winnerRef?{path:6,outcome:`verified`}:{path:6,outcome:`unverifiable`,reason:`signal-isolated-wrong`}:{path:6,outcome:`unverifiable`,reason:`no-signal-isolation`}}let Le={resolve:async()=>{throw new e(`COMMAND_FAILED`,`Interactor resolution is not composed for this process.`,{reason:`interactor-resolution-missing`})}};function Re(e){Le=e}function ze(){return Le}var b=class e{#e;constructor(e){this.#e=e}get state(){return this.#e.state}get scope(){return this.#e.scope}get tree(){return this.#e.tree}get generation(){return this.#e.generation}static expire(t){return t.#e.state===`expired`?t:new e({...t.#e,state:`expired`})}};const Be=new b({state:`active`,scope:`all`,tree:void 0,generation:void 0});function Ve(e){return new b({state:`active`,...e})}function He(e){return b.expire(e)}const x=new WeakMap,Ue=new WeakSet;function S(e){return e.refFrame??Be}function C(e){return S(e).generation??e.snapshotGeneration}function We(e){return S(e).tree}function Ge(e){Je(e),Ke(e),e.refFrame=He(S(e)),e.snapshotScopeSource=void 0}function Ke(e){e.snapshot&&Ue.add(e.snapshot)}function qe(e){return Ue.has(e)}function Je(e){let t=Ye(e)+1;return x.set(e,t),t}function Ye(e){return x.get(e)??0}function Xe(e){w(e,`all`)}function Ze(e,t){w(e,t)}function w(e,t){e.refFrame=Ve({scope:t,tree:e.snapshot,generation:e.snapshotGeneration})}function T(e){return S(e).state}function Qe(e){return S(e).scope}function $e(e){let t=e.ref.startsWith(`@`)?e.ref.slice(1):e.ref;return{admission:et({session:e.session,refBody:t,mintedGeneration:e.mintedGeneration}),scope:Qe(e.session),currentGeneration:C(e.session)}}function et(e){let{session:t,refBody:n,mintedGeneration:r}=e;if(T(t)===`expired`)return{admitted:!1,reason:`ref_frame_expired`};if(r!==void 0&&r!==C(t))return{admitted:!1,reason:`ref_generation_mismatch`};let i=Qe(t);if(i!==`all`){if(r===void 0)return{admitted:!1,reason:`plain_ref_requires_complete_frame`};if(!i.has(n))return{admitted:!1,reason:`ref_not_issued`}}return{admitted:!0}}const tt=[250,400,600];function nt(e){return e===`press`||e===`click`||e===`back`||e===`open`}function rt(e){return e.map(e=>[e.depth??0,e.type??``,e.label??``,e.value??``,e.identifier??``,e.enabled===!1?`disabled`:`enabled`,e.hittable===!0?`hittable`:`not-hittable`].join(`|`))}function it(e,t){return e<12?!1:t<=Math.floor(e*.2)}function at(e,t,n){return n.interactiveOnly&&e.snapshot.nodes.length===0&&e.rawNodeCount!==void 0&&e.rawNodeCount>=12?`empty-interactive`:n.mode===`ref-refresh`?null:it(t.baselineCount,e.snapshot.nodes.length)?ot(e.snapshot)?null:`sharp-drop`:t.routeComparable&&nt(t.action)&&st(t.baselineSignatures,e.snapshot.nodes)?`stuck-route`:null}function ot(e){return e.nodes.some(e=>e.hittable===!0||!!e.label?.trim()||!!e.value?.trim()||!!e.identifier?.trim())}function st(e,t){if(!e||e.length===0)return!1;let n=Math.max(e.length,t.length);if(n<12)return!1;let r=rt(t),i=Math.min(e.length,r.length),a=0;for(let t=0;t<i;t+=1)e[t]===r[t]&&(a+=1);let o=Math.max(0,r.length-e.length),s=Math.max(0,e.length-r.length),c=Math.max(3,Math.floor(n*.15));return a>=Math.floor(n*.9)&&o<=c&&s<=c}async function ct(e){let t=e.window.markedAt+e.retry.retryBudgetMs,n=await e.capture(),r=e.classify(n),i=0;for(let a of e.retry.delaysMs){if(!r)break;let o=t-Date.now();if(o<=0)break;await Oe(Math.min(a,o)),n=await e.capture(),i+=1,r=e.classify(n)}r||e.onTrustworthyCapture?.();let a=i>0||r?{action:e.window.action,retryCount:i,staleAfterRetries:!!r,reason:r??void 0}:void 0;return{...n,annotations:{...n.annotations,...s({freshness:a})}}}function lt(e,t,n=e.snapshot){if(e.device.platform!==`android`)return;let r=ut(e,n),i=r?.comparisonSafe===!0;e.androidSnapshotFreshness={action:t,markedAt:Date.now(),baselineCount:(r??n)?.nodes.length??0,baselineSignatures:i?rt(r?.nodes??[]):void 0,routeComparable:i}}function ut(e,t){if(t?.comparisonSafe===!0)return t;let n=e.lastComparisonSafeSnapshot;return!n||n.comparisonSafe!==!0?t:Date.now()-n.createdAt<=5e3?n:t}function E(e){if(!e||e.device.platform!==`android`)return;let t=e.androidSnapshotFreshness;if(t){if(Date.now()-t.markedAt>2500){delete e.androidSnapshotFreshness;return}return t}}function D(e){!e||e.device.platform!==`android`||delete e.androidSnapshotFreshness}async function dt(e,t){return ct({capture:e.capture,classify:n=>at({snapshot:n.snapshot,rawNodeCount:n.annotations.analysis?.rawNodeCount},t,{interactiveOnly:e.interactiveOnly,mode:e.androidFreshnessMode}),window:t,retry:{retryBudgetMs:1500,delaysMs:tt},onTrustworthyCapture:()=>D(e.session)})}const ft=`activity.launchConsole.launchArgs.clearAppState.verbose.iosXctestrunFile.iosXctestDerivedDataPath.iosXctestEnvDir.snapshotInteractiveOnly.snapshotPreferredBackend.snapshotDepth.snapshotScope.snapshotRaw.snapshotCustomActions.snapshotIncludeHiddenContentHints.count.intervalMs.delayMs.durationMs.holdMs.jitterPx.pixels.until.doubleTap.backMode.pauseMs.pattern`.split(`.`);function pt(e){return Object.fromEntries(ft.map(t=>[t,e?.[t]]))}function O(e,t,n,r,i,a){return{requestId:i??De().requestId,appBundleId:n,runnerLeaseContext:Me({meta:a}),logPath:e,traceLogPath:r,...pt(t),screenshotCaptureBackend:t?.maestro?.screenshotCaptureBackend,...o(t),clickButton:v(t)}}function mt(e){return e?.interactionOutcome?.retryOnNoChange===!0}function ht(e){let{session:t,command:n,positionals:r,flags:i,preSnapshot:a}=e;if(!mt(i)||!W(t))return;let o=St(n);if(!o||!Ot(r))return;let s=N(a?.nodes??[]);s.length!==0&&(t.pendingInteractionOutcome={action:n,command:o,positionals:r,flags:M(i),markedAt:Date.now(),attemptsRemaining:2,preSignature:s})}function gt(e){let t=e?.pendingInteractionOutcome;if(!(!e||!t)){if(!W(e)){k(e);return}if(Date.now()-t.markedAt>3e4){k(e);return}return t}}function k(e){e?.pendingInteractionOutcome&&(e.pendingInteractionOutcome=void 0)}async function A(e){let{pending:t,snapshot:n}=e,r=F(t.preSignature,N(n.nodes));if(r!==`unchanged`||t.attemptsRemaining<=0)return{retried:!1,change:r};let i=e.retryTap,a=i?xt(t.positionals):void 0;if(!i||!a)return j(t,i?`unreadable-retry-point`:`device-runtime-unavailable`),{retried:!1,change:r};let o=Date.now();return--t.attemptsRemaining,await _t(i,e)?(y({level:`info`,phase:`interaction_no_change_retry`,data:{action:t.action,attemptsRemaining:t.attemptsRemaining,durationMs:Date.now()-o}}),{retried:!0,change:r}):(j(t,`retry-tap-unavailable`),{retried:!1,change:r})}async function _t(e,t){let{session:n,pending:r}=t,i=xt(r.positionals);if(!i)return!1;try{return await e({device:n.device,point:i,context:{...O(t.logPath,r.flags,n.appBundleId,n.trace?.outPath),surface:n.surface}})}catch{return!1}}function j(e,t){y({level:`info`,phase:`interaction_no_change_retry_skipped`,data:{action:e.action,attemptsRemaining:e.attemptsRemaining,reason:t}})}function vt(e){y({level:e.attempts>0?`info`:`debug`,phase:`interaction_settled`,data:{action:e.pending.action,change:e.change,attempts:e.attempts,durationMs:Date.now()-e.startedAt}})}function yt(e){y({level:`warn`,phase:`interaction_settle_timeout`,data:{action:e.pending.action,attempts:e.attempts,durationMs:Date.now()-e.startedAt}})}function M(e){if(!e?.interactionOutcome&&!e?.postGestureStabilization)return e;let{interactionOutcome:t,postGestureStabilization:n,...r}=e;return r}function N(e){let t=new Map,n=[],r=ve(e);for(let i of e){let e=Ct(i,t,r);e&&n.push(e)}return n}function P(e){return e?.comparisonKey??e?.snapshotQuality?.backend}function F(e,t){return e.length===0||t.length===0?`ambiguous`:L(e,t)?`unchanged`:`changed`}function I(e,t){return Math.abs(e.x-t.x)<=1&&Math.abs(e.y-t.y)<=1&&Math.abs(e.width-t.width)<=1&&Math.abs(e.height-t.height)<=1}function L(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){let r=e[n],i=t[n];if(!r||!i||r.key!==i.key||!I(r,i))return!1}return!0}function R(e,t){let n=z(e),r=z(t);if(n.size===0||r.size===0)return`ambiguous`;let i=0,a=!1;for(let[e,t]of n){let n=r.get(e);if(!n){a=!0;continue}if(i+=1,!I(t,n))return`changed`}if(i===0)return`ambiguous`;let o=r.size>i;return a&&o?`changed`:`unchanged`}function z(e){let t=new Map;for(let n of e)!n.identity||!n.discriminating||t.has(n.identity)||t.set(n.identity,n);return t}function B(e,t){let n=e.filter(e=>e.discriminating),r=t.filter(e=>e.discriminating);if(n.length===0||n.length!==r.length)return!1;let i=new Map(r.map(e=>[e.key,e]));for(let e of n){let t=i.get(e.key);if(!t||!I(e,t))return!1}return!0}function V(e,t){let n=new Map(t.filter(e=>e.discriminating).map(e=>[e.key,e])),r=0,i=0,a=0;for(let t of e){if(!t.discriminating)continue;let e=n.get(t.key);if(!e){r+=1;continue}n.delete(t.key),a+=1,I(t,e)||(i+=1)}return{onlyInBaseline:r,onlyInCurrent:n.size,rectMismatched:i,shared:a}}function bt(e,t,n){let r=H(U(e,n)),i=H(U(t,n));for(let[e,t]of r){let n=i.get(e);if(!n||!I(t,n))return!0;i.delete(e)}return i.size>0}function H(e){let t=new Map,n=new Map;for(let r of e){let e=t.get(r.content)??0;t.set(r.content,e+1),n.set(`${r.content}|#${e}`,r)}return n}function U(e,t){return e.filter(e=>e.discriminating&&e.x<t.x+t.width&&t.x<e.x+e.width&&e.y<t.y+t.height&&t.y<e.y+e.height)}function W(e){return f(e.device)}function xt(e){let t=Number(e[0]),n=Number(e[1]);return Number.isFinite(t)&&Number.isFinite(n)?{x:t,y:n}:void 0}function St(e){if(e===`click`||e===`press`)return`press`}function Ct(e,t,n){if(!e.rect||!kt(e.rect)||At(e))return;let r=Dt(e);if(!r)return;let i=t.get(r)??0;t.set(r,i+1);let a=Tt(e);return{key:`${r}|#${i}`,...a?{identity:a}:{},content:wt(e,a),x:Math.round(e.rect.x),y:Math.round(e.rect.y),width:Math.round(e.rect.width),height:Math.round(e.rect.height),discriminating:!Et(e,n)}}function wt(e,t){return t??`${e.type??``}|${e.role??``}`}function Tt(e){let t=[e.identifier,e.label,e.value].map(e=>typeof e==`string`?e.trim():``).join(`|`);if(t.replaceAll(`|`,``))return`${t}|${e.type??``}`}function Et(e,t){return p(e)||e.ref!==void 0&&t.has(e.ref)}function Dt(e){let t=[e.identifier,e.label,e.value,e.type,e.role,...Ee(e),e.hittable===!0?`hittable`:`not-hittable`].map(e=>typeof e==`string`?e.trim():``).join(`|`);return t.replaceAll(`|`,``)?t:void 0}function Ot(e){return e.length===2&&e.every(e=>Number.isFinite(Number(e)))}function kt(e){return[e.x,e.y,e.width,e.height].every(e=>Number.isFinite(e))&&e.width>0&&e.height>0}function At(e){return`${e.label??``} ${e.identifier??``}`.toLowerCase().includes(`scroll bar`)}function jt(e){let{session:t,command:n,action:r=n,positionals:i,flags:a,scheduleOutcomeRetry:o=!1,androidFreshnessBaseline:s}=e;o&&ht({session:t,command:n,positionals:i,flags:a,preSnapshot:t.snapshot}),nt(r)&&lt(t,r,s??t.snapshot),Mt(t,r,i,a)}function Mt(e,t,n=[],r){if(!Ht(e.device)||!Vt(t,n,r))return;let i=Ut(e.device)?N(e.snapshot?.nodes??[]):void 0;e.postGestureStabilization={action:t,positionals:n,markedAt:Date.now(),...i?.length?{baselineSignature:i,baselineBackend:P(e.snapshot)}:{}}}function Nt(e){e?.postGestureStabilization&&(e.postGestureStabilization=void 0)}function Pt(e){return!!e?.postGestureStabilization}async function Ft(e){let t=gt(e.session);if(t&&e.session)return await It({...e,session:e.session},t);if(f(e.device)&&e.session&&Pt(e.session))return await Rt({...e,session:e.session});let n=E(e.session);if(n&&e.device.platform===`android`){let t=await dt(e,n);return{snapshot:t.snapshot,...t.annotations}}}async function It(e,t){let n=e.session,r=Date.now(),i=0,a=await Lt(e,t,await G(e)),o=await A({session:n,pending:t,logPath:e.logPath,snapshot:a.snapshot,retryTap:e.retryTap});for(;o.retried;)i+=1,a=await Lt(e,t,await G(e)),o=await A({session:n,pending:t,logPath:e.logPath,snapshot:a.snapshot,retryTap:e.retryTap});k(n);let s=await zt({session:n,initial:a,capture:async()=>await G(e),readSnapshot:e=>e.snapshot});return a=s.value,o.change!==`ambiguous`&&a.annotations.freshness?.staleAfterRetries!==!0&&D(n),o.change===`unchanged`?yt({pending:t,attempts:i,startedAt:r}):vt({pending:t,change:o.change,attempts:i,startedAt:r}),Bt(s)}async function Lt(e,t,n){let r=n;return F(t.preSignature,N(r.snapshot.nodes))===`unchanged`?(await Oe(500),r=await G(e),r):r}async function Rt(e){return Bt(await zt({session:e.session,capture:async()=>await G(e),readSnapshot:e=>e.snapshot}))}async function G(e){let t=E(e.session);return t&&e.device.platform===`android`?await dt(e,t):await e.capture()}async function zt(e){let{session:t,capture:n,readSnapshot:r}=e,i=t?.postGestureStabilization;if(!t||!Ht(t.device)||!i)return{value:e.initial??await n()};let a=await Ce({pending:{action:i.action,positionals:i.positionals??[],baselineSignature:i.baselineSignature,baselineBackend:i.baselineBackend},needsBaselineDistrust:Ut(t.device),initial:e.initial,hooks:{capture:n,readSurface:e=>{let t=r(e);return{signature:N(t.nodes),backend:P(t)}},signaturesStable:L,classifyBaselineEvidence:R,surfacesIdentical:B,summarizeDivergence:V}});return Nt(t),a}function Bt(e){let{snapshot:t,annotations:n}=e.value;return e.postGestureOutcome&&(t.postGestureOutcome=e.postGestureOutcome),{snapshot:t,...n}}function Vt(e,t,n){return n?.postGestureStabilization===!1?!1:n?.postGestureStabilization===!0||e===`swipe`||e===`scroll`||e===`gesture`&&t[0]===`swipe`}function Ht(e){return f(e)}function Ut(e){return d(e.platform)}function Wt(e,t={}){let n=t.mode??`action`,{node:r,preActionNodes:i}=e;if(typeof r.index!=`number`)return;let a=ge(i),o=ie(K(r),i);if(n===`landmark`&&o.id===void 0&&o.label===void 0)return;let s=ye(r,a,8),c=s.chain,l=q(i,r),u=J(r,a),d=Yt(r),f=+(c.length>0),p=e=>{let t=c.slice(0,e),n=Xt({nodes:i,byIndex:a,node:r,identity:o,ancestry:t,sibling:l,scrollRegion:u});return{candidate:{...o,ancestry:t,sibling:l,viewportOrder:n.viewportOrder,...u?{scrollRegion:u}:{},...d?{rect:d}:{},verification:`verified`},domain:n}};for(let e=c.length;e>=f;--e){let{candidate:t,domain:i}=p(e);if(Kt(t))return t.verification=Gt({node:r,domain:i,mode:n,brokenWalk:s.broken}),t;if(e===f)return qt(t)}}function Gt(e){return e.brokenWalk?`unverifiable`:e.mode===`landmark`?`verified`:Qt({node:e.node,domain:e.domain})}function Kt(e){return de(m({...e,verification:`unverifiable`}))<=se}function qt(e){return e.verification=`unverifiable`,de(m(e))>4096&&delete e.rect,e}const K=pe;function q(e,t){return oe(e,t)}function J(e,t){let n=Ne(e,t);if(!n)return;let r=K(n);return{role:r.role,...r.id===void 0?r.label===void 0?{}:{label:r.label}:{id:r.id}}}function Jt(e,t){return!e&&!t?!0:!e||!t?!1:te(e,t)}function Yt(e){let t=e.rect;if(t)return{x:t.x,y:t.y,width:t.width,height:t.height}}function Xt(e){let{nodes:t,byIndex:n,node:r,identity:i,ancestry:a,sibling:o,scrollRegion:s}=e,c=_e(t,n,i,a),l=c.filter(e=>q(t,e)===o),u=c.length>0?c.filter(e=>Jt(J(e,n),s)):void 0,d=u?Zt(u):[];return{identitySet:c,siblingMatches:l,regionMembers:u,orderedRegion:d,viewportOrder:Math.max(d.findIndex(e=>e.index===r.index),0)}}function Zt(e){return e.map((e,t)=>({node:e,documentOrder:t,center:ke(e.rect)})).sort((e,t)=>!e.center&&!t.center?e.documentOrder-t.documentOrder:e.center?t.center?e.center.y===t.center.y?e.center.x===t.center.x?e.documentOrder-t.documentOrder:e.center.x-t.center.x:e.center.y-t.center.y:-1:1).map(e=>e.node)}function Qt(e){let{node:t,domain:n}=e,r=t.ref,i=n.identitySet.map(e=>e.ref);return Ie({winnerRef:r,matchedRefs:i,identitySetRefs:i,siblingMatchRefs:n.siblingMatches.map(e=>e.ref),regionMemberRefs:n.regionMembers?.map(e=>e.ref),viewportCandidateRef:n.orderedRegion[n.viewportOrder]?.ref}).outcome}let Y;async function $t(){if(Y)return Y;let{createAppleSessionObservation:e}=await import(`./session-observation.js`),{listLocalDeviceInventory:t,shouldPropagateDeviceInventoryProbeError:n}=await import(`./device-inventory-context.js`).then(e=>e.t);return Y??=e({listLocalDevices:t,shouldPropagateProbeError:n}),Y}const en=Object.freeze({async observeRunnerSession(e){return(await $t()).observeRunnerSession(e)},async resolveSoleForegroundApp(e){return(await $t()).resolveSoleForegroundApp(e)}});async function tn(e,t,n,r){let{queryAppleRunnerSelector:i}=await import(`./runner-operations-facade.js`);return await i(e,t,n,r)}function nn(e,t){return r(`UNSUPPORTED_OPERATION`,`${e} is not supported on this device`,{reason:t.reason},t.hint?{hint:t.hint}:void 0)}async function X(e){let t=await on(e.inspectFacts)(e.device);for(let n of e.required){let r=t.operations[n];if(!r.available)return{type:`response`,response:e.unavailableResponse?e.unavailableResponse(r):nn(e.command,r)}}return{type:`admitted`,bind:sn(e.bindDevice)}}async function rn(e){let t=await X({...e,required:e.use.required});if(t.type===`response`)return t;let n=await t.bind(e.device,e.use);return e.readiness&&await je(n),{type:`runtime`,runtime:n}}async function an(e,t){let n=await rn(e);if(n.type===`response`)return{ok:!1,response:n.response};let r=n.runtime;return{ok:!0,execute:async({dispatchContext:e})=>await t(r,e)}}function on(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime facts inspection is unavailable.`,{reason:`runtime-gateway-missing`})}function sn(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime binding is unavailable.`,{reason:`runtime-gateway-missing`})}function cn(e){let{flags:t,logPath:r,meta:a,session:o,snapshotScope:s}=e,{appBundleId:c,trace:l,surface:u}=o??{},d=e.context??O(r??``,t,c,l?.outPath,a?.requestId,a);return{options:{appBundleId:c,...n(t,i),scope:s,includeRects:e.includeRects,surface:u},execution:Z(d),...e.signal===void 0?{}:{signal:e.signal}}}function Z(e){return{requestId:e.requestId,verbose:e.verbose,logPath:e.logPath,traceLogPath:e.traceLogPath,iosXctestrunFile:e.iosXctestrunFile,iosXctestDerivedDataPath:e.iosXctestDerivedDataPath,iosXctestEnvDir:e.iosXctestEnvDir,runnerLeaseContext:e.runnerLeaseContext}}function ln(e){let t=Se(e);return{...t,capture:Te(t),selectors:we(t),interactions:xe(t)}}async function un(e){let t=await(await ze().resolve(e.device,e.runnerContext)).snapshot(e.options);if(!(`stage`in t))return t;let{presentIosSnapshotAcquisition:n}=await import(`./ios-snapshot-runtime.js`);return await n(t,e.options)}function dn(e){let t=e?e.textEntryReadiness:void 0,n=gn(t)?{textEntryReadiness:t}:{},r=fn(e);return r?{...n,...r}:n}function fn(e){if(!pn(e))return null;let t=mn(e.target);return t?{verification:`unconfirmed`,requested:e.requested,before:e.before,after:e.after,target:t}:null}function pn(e){return!!(e&&e.verification===`unconfirmed`&&typeof e.requested==`string`&&Q(e.before)&&Q(e.after))}function mn(e){if(!vn(e)||!hn(e))return null;let t=_n(e.rect);return t?{resourceId:e.resourceId,className:e.className,packageName:e.packageName,rect:t}:null}function hn(e){return Q(e.resourceId)&&Q(e.className)&&Q(e.packageName)}function gn(e){return typeof e==`string`&&Pe.includes(e)}function Q(e){return e===null||typeof e==`string`}function _n(e){return!vn(e)||![e.x,e.y,e.width,e.height].every(e=>typeof e==`number`)?null:e}function vn(e){return!!e&&typeof e==`object`}async function yn(e){let t={device:e.device,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice},n=ee(e.command,e.requiresCapture),r=await X({command:e.command,required:n.use.required,...e.unavailableResponse?{unavailableResponse:e.unavailableResponse}:{},...t});if(r.type===`response`)return{ok:!1,response:r.response};let i=r.bind;switch(n.kind){case`tap-point`:return{ok:!0,runtime:{kind:`tap`,captured:!1,runtime:await i(e.device,ae)}};case`captured-tap`:return{ok:!0,runtime:{kind:`tap`,captured:!0,runtime:await i(e.device,le)}};case`long-press-point`:return{ok:!0,runtime:{kind:`long-press`,captured:!1,runtime:await i(e.device,re)}};case`captured-long-press`:return{ok:!0,runtime:{kind:`long-press`,captured:!0,runtime:await i(e.device,me)}};case`hover-point`:return{ok:!0,runtime:{kind:`hover`,captured:!1,runtime:await i(e.device,he)}};case`captured-hover`:return{ok:!0,runtime:{kind:`hover`,captured:!0,runtime:await i(e.device,fe)}};case`fill-point`:return{ok:!0,runtime:{kind:`fill`,captured:!1,runtime:await i(e.device,ue)}};case`captured-fill`:return{ok:!0,runtime:{kind:`fill`,captured:!0,runtime:await i(e.device,ce)}}}}function bn(e,t){let n={execution:Z(t),appBundleId:t.appBundleId},r=e.captured?En(e.runtime):void 0;switch(e.kind){case`tap`:return xn(e,t,n,r);case`long-press`:return Sn(e,n,r);case`hover`:return Cn(e,n,r);case`fill`:return wn(e,t,n,r)}}function xn(e,t,n,r){let i=e.captured?e.runtime.operations.tapRef:void 0,a=e.captured?e.runtime.operations.tapElementSelector:void 0;return Object.freeze({captureSnapshot:r,tapPoint:async(r,i={})=>{let a=Dn(i,t),o=await e.runtime.operations.tapPoint({point:r,options:a,...n});return{x:r.x,y:r.y,count:a.count,intervalMs:a.intervalMs,holdMs:a.holdMs,jitterPx:a.jitterPx,doubleTap:a.doubleTap,...a.button===`primary`?{}:{button:a.button},...o??{},...g(An(r,a.button))}},tapRef:i?async e=>await i({ref:e,...n}):void 0,tapElementSelector:e.captured&&a?async t=>{let r=await e.runtime.operations.tapElementSelector?.({selector:t,...n}),i=r?.maestroNonHittableCoordinateFallbackUsed===!0;return{selector:t.raw,...r??{},...g(i?`tapped via non-hittable coordinate fallback`:`Tapped ${t.raw}`)}}:void 0})}function Sn(e,t,n){return Object.freeze({captureSnapshot:n,longPressPoint:async(n,r)=>{let i=await e.runtime.operations.longPressPoint({point:n,durationMs:r,...t});return{x:n.x,y:n.y,durationMs:r,...i??{},...g(`Long pressed (${n.x}, ${n.y})`)}}})}function Cn(e,t,n){let r=e.captured?e.runtime.operations.hoverRef:void 0;return Object.freeze({captureSnapshot:n,hoverPoint:async n=>{let r=await e.runtime.operations.hoverPoint({point:n,...t});return{x:n.x,y:n.y,...r??{},...g(`Hovered (${n.x}, ${n.y})`)}},hoverRef:r?async e=>await r({ref:e,...t}):void 0})}function wn(e,t,n,r){let i=e.captured?e.runtime.operations.fillRef:void 0,a=e=>h(e??t.delayMs??0,`delay-ms`,0,1e4);return Object.freeze({captureSnapshot:r,fillPoint:async(t,r,i={})=>{let o=a(i.delayMs),s=await e.runtime.operations.fillPoint({point:t,text:r,delayMs:o,allowNonHittableCoordinateFallback:i.allowNonHittableCoordinateFallback===!0,...n});return{x:t.x,y:t.y,text:r,delayMs:o,...Tn(s)?{maestroNonHittableCoordinateFallbackUsed:!0}:{},...dn(s),...g(`Filled ${Array.from(r).length} chars`)}},fillRef:i?async(e,t,r={})=>await i({ref:e,text:t,delayMs:a(r.delayMs),...n}):void 0})}function Tn(e){return typeof e==`object`&&!!e&&`maestroNonHittableCoordinateFallbackUsed`in e&&e.maestroNonHittableCoordinateFallbackUsed===!0}function En(e){return async t=>await e.operations.captureSnapshot(t)}function Dn(e,t){let n=On(e,t);return kn(n),{button:e.button??v(t),...n,surface:e.surface??t.surface}}function On(e,t){return{count:$(e.count,t.count,1,`count`,1,200),intervalMs:$(e.intervalMs,t.intervalMs,0,`interval-ms`,0,1e4),holdMs:$(e.holdMs,t.holdMs,0,`hold-ms`,0,1e4),jitterPx:$(e.jitterPx,t.jitterPx,0,`jitter-px`,0,100),doubleTap:e.doubleTap??t.doubleTap??!1}}function $(e,t,n,r,i,a){return h(e??t??n,r,i,a)}function kn(t){if(t.doubleTap&&t.holdMs>0)throw new e(`INVALID_ARGS`,`double-tap cannot be combined with hold-ms`);if(t.doubleTap&&t.jitterPx>0)throw new e(`INVALID_ARGS`,`double-tap cannot be combined with jitter-px`)}function An(e,t){return t===`primary`?`Pressed (${e.x}, ${e.y})`:`${t===`secondary`?`Right`:`Middle`} clicked (${e.x}, ${e.y})`}function jn(e){let{inspectFacts:t,bindDevice:n}=e;if(!t||!n)return;let r=new Map;return async({device:e,point:i,context:a})=>{let o=r.get(e.id);o||(o=yn({device:e,command:`press`,requiresCapture:!1,inspectFacts:t,bindDevice:n}),r.set(e.id,o));let s=await o;if(!s.ok)return!1;let c=bn(s.runtime,a);return c.tapPoint?(await c.tapPoint(i),!0):!1}}async function Mn(e){let t=await Ft({session:e.session,device:e.device,logPath:e.logPath,interactiveOnly:e.flags?.snapshotInteractiveOnly===!0,androidFreshnessMode:e.androidFreshnessMode,capture:()=>Pn(e),retryTap:jn(e)});if(t)return t;let n=await Pn(e);return D(e.session),{snapshot:n.snapshot,...n.annotations}}async function Nn(e){if(e.captureData)return await e.captureData();let{device:t,session:r,logPath:a}=e,o=O(a,Fn(e),r?.appBundleId,r?.trace?.outPath);return await un({device:t,runnerContext:{requestId:o.requestId,signal:e.signal,appBundleId:o.appBundleId,verbose:o.verbose,logPath:o.logPath,traceLogPath:o.traceLogPath,iosXctestrunFile:o.iosXctestrunFile,iosXctestDerivedDataPath:o.iosXctestDerivedDataPath,iosXctestEnvDir:o.iosXctestEnvDir,runnerLeaseContext:o.runnerLeaseContext},options:{appBundleId:o.appBundleId,signal:e.signal,...n(o,i),includeRects:e.includeRects,surface:r?.surface}})}async function Pn(e){let t=Date.now(),n=await Nn(e);c(e.session,{durationMs:Date.now()-t,backend:n.backend,platform:u(e.device)});let r=s(n),i=l(n,Ae(n,Fn(e)));return r.androidSnapshot?.systemSurfaceOnly===!0&&(i.systemSurfaceOnly=!0),{data:n,snapshot:i,annotations:r}}function Fn(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function In(e,n){if(!e||!e.trim().startsWith(`@`))return{ok:!0,scope:e};if(!n?.snapshot)return r(`INVALID_ARGS`,`Ref scope requires an existing snapshot in session.`);let i=t(e.trim());if(!i)return r(`INVALID_ARGS`,`Invalid ref scope: ${e}`);let o=[n.snapshot,...n.snapshotScopeSource?[n.snapshotScopeSource]:[]],s=!1,c;for(let e of o){let t=a(e.nodes,i);if(t&&(s=!0,c=be(t,e.nodes),c))break}return s?c?{ok:!0,scope:c}:r(`COMMAND_FAILED`,`Ref ${e} has no label to scope by`,{reason:_.refUnlabeled,ref:i}):r(`COMMAND_FAILED`,`Ref ${e} not found`,{reason:_.refNotFound,ref:i},{hint:ne})}function Ln(e,t,n={}){if(!e)return;let r=We(e);return{name:t,appBundleId:e.appBundleId,appName:e.appName,...n.includeSnapshot===!0?{snapshot:e.snapshot,...r&&n.omitRefFrameSnapshot!==!0?{refFrameSnapshot:r}:{}}:{},metadata:{surface:e.surface,...n.metadata??{}}}}function Rn(e){return{get:t=>t===e.sessionName?Ln(e.getSession(),e.sessionName,e.recordOptions):void 0,set:t=>{if(t.name!==e.sessionName){y({level:`warn`,phase:`runtime_session_write_skipped`,data:{expected:e.sessionName,received:t.name}});return}e.setRecord(t)}}}function zn(e,t){e.snapshot!==t&&(e.snapshotGeneration=Vn(e.snapshotGeneration)),e.snapshot=t,e.snapshotScopeSource=void 0,t.comparisonSafe===!0&&(e.lastComparisonSafeSnapshot=t)}function Bn(e,t){e.snapshotScopeSource=t.scopeSource,e.snapshotGeneration=t.keptCurrentSnapshot?t.previousGeneration:Vn(t.previousGeneration)}function Vn(e){return e===void 0?Fe(1e5,1e6):e+1}function Hn(e){let t=e.startsWith(`@`)?e.slice(1):e,n=t.indexOf(`~`);return n===-1?t:t.slice(0,n)}function Un(e,t){let n=new Set;for(let e of t){let t=Hn(e);t.length>0&&n.add(t)}n.size!==0&&Ze(e,n)}function Wn(e,t){if(t?.diff)return Un(e,Gn(t)),e.snapshotGeneration}function Gn(e){let t=[];for(let n of e.diff?.lines??[])n.ref&&t.push(n.ref);for(let n of e.refs??[])t.push(n.ref);for(let n of e.tail??[])t.push(n.ref);return t}function Kn(e){return`Ref @${e.ref.startsWith(`@`)?e.ref.slice(1):e.ref} was minted from snapshot s${e.mintedGeneration} but the session's ref frame is now s${e.currentFrameEpoch} — re-run snapshot -i.`}function qn(e){let{session:t,ref:n,mintedGeneration:r}=e;if(t&&T(t)===`expired`)return`The UI may have changed since these refs were issued, so they no longer represent current device state. Take a new snapshot before relying on or interacting with them.`;if(r!==void 0){let e=t?C(t)??0:0;if(r!==e)return Kn({ref:n,mintedGeneration:r,currentFrameEpoch:e})}}export{N as A,Ge as B,q as C,Pt as D,Jt as E,M as F,S as G,Ke as H,V as I,Ie as J,T as K,O as L,bt as M,B as N,jt as O,P,E as R,J as S,Zt as T,$e as U,qe as V,Ye as W,an as _,Bn as a,tn as b,Nn as c,yn as d,ln as f,rn as g,X as h,zn as i,R as j,L as k,In as l,Z as m,Un as n,Rn as o,cn as p,Re as q,qn as r,Mn as s,Wn as t,bn as u,nn as v,Wt as w,K as x,en as y,Xe as z};
1
+ import{D as e,M as t,T as n,b as r,h as i,o as a}from"./sdk-contracts.js";import{u as o}from"./capture.js";import{r as s}from"./snapshot-capture-annotations.js";import{r as c}from"./snapshot-diagnostics.js";import{f as l}from"./android-input-ownership.js";import{S as u,m as d,u as f}from"./sdk-device.js";import{Ar as ee,Bt as te,Kn as ne,Sn as re,Tt as ie,Vn as ae,Wt as oe,Yn as se,Zn as ce,ct as le,dt as ue,ht as de,ir as p,lt as fe,nr as m,qn as pe,ut as me,xt as he}from"./sdk-batch.js";import{F as ge,I as _e,M as ve,P as ye,T as be,a as xe,g as Se,j as Ce,o as we,t as Te,x as h}from"./runtime.js";import{r as g}from"./success-text.js";import{g as Ee,o as _}from"./overlay.js";import{i as De}from"./click-button.js";import{a as Oe,r as v}from"./diagnostics.js";import{t as ke}from"./timeouts.js";import"./diagnostics2.js";import"./retry.js";import{i as Ae}from"./rect-center.js";import{t as je}from"./snapshot-state.js";import{n as Me}from"./request-runtime-binding.js";import{i as Ne}from"./lease-context.js";import{s as Pe}from"./tree.js";import{t as Fe}from"./interactor-types.js";import{randomInt as Ie}from"node:crypto";function Le(e){return e.matchedRefs.length===0?{path:2,outcome:`unverifiable`,reason:`selector-miss`}:e.identitySetRefs.length===0?{path:3,outcome:`unverifiable`,reason:`identity-set-empty`}:e.identitySetRefs.length===1?e.identitySetRefs[0]===e.winnerRef?{path:4,outcome:`verified`}:{path:5,outcome:`unverifiable`,reason:`unique-but-wrong`}:e.siblingMatchRefs.length===1?e.siblingMatchRefs[0]===e.winnerRef?{path:6,outcome:`verified`}:{path:6,outcome:`unverifiable`,reason:`signal-isolated-wrong`}:e.regionMemberRefs!==void 0&&e.regionMemberRefs.length>0&&e.viewportCandidateRef!==void 0?e.viewportCandidateRef===e.winnerRef?{path:6,outcome:`verified`}:{path:6,outcome:`unverifiable`,reason:`signal-isolated-wrong`}:{path:6,outcome:`unverifiable`,reason:`no-signal-isolation`}}let Re={resolve:async()=>{throw new t(`COMMAND_FAILED`,`Interactor resolution is not composed for this process.`,{reason:`interactor-resolution-missing`})}};function ze(e){Re=e}function Be(){return Re}var y=class e{#e;constructor(e){this.#e=e}get state(){return this.#e.state}get scope(){return this.#e.scope}get tree(){return this.#e.tree}get generation(){return this.#e.generation}static expire(t){return t.#e.state===`expired`?t:new e({...t.#e,state:`expired`})}};const Ve=new y({state:`active`,scope:`all`,tree:void 0,generation:void 0});function He(e){return new y({state:`active`,...e})}function Ue(e){return y.expire(e)}const We=new WeakMap,Ge=new WeakSet;function b(e){return e.refFrame??Ve}function x(e){return b(e).generation??e.snapshotGeneration}function Ke(e){return b(e).tree}function qe(e){Xe(e),Je(e),e.refFrame=Ue(b(e)),e.snapshotScopeSource=void 0}function Je(e){e.snapshot&&Ge.add(e.snapshot)}function Ye(e){return Ge.has(e)}function Xe(e){let t=S(e)+1;return We.set(e,t),t}function S(e){return We.get(e)??0}function Ze(e){C(e,`all`)}function Qe(e,t){C(e,t)}function C(e,t){e.refFrame=He({scope:t,tree:e.snapshot,generation:e.snapshotGeneration})}function w(e){return b(e).state}function $e(e){return b(e).scope}function et(e){let t=e.ref.startsWith(`@`)?e.ref.slice(1):e.ref;return{admission:tt({session:e.session,refBody:t,mintedGeneration:e.mintedGeneration}),scope:$e(e.session),currentGeneration:x(e.session)}}function tt(e){let{session:t,refBody:n,mintedGeneration:r}=e;if(w(t)===`expired`)return{admitted:!1,reason:`ref_frame_expired`};if(r!==void 0&&r!==x(t))return{admitted:!1,reason:`ref_generation_mismatch`};let i=$e(t);if(i!==`all`){if(r===void 0)return{admitted:!1,reason:`plain_ref_requires_complete_frame`};if(!i.has(n))return{admitted:!1,reason:`ref_not_issued`}}return{admitted:!0}}const nt=[250,400,600];function rt(e){return e===`press`||e===`click`||e===`back`||e===`open`}function it(e){return e.map(e=>[e.depth??0,e.type??``,e.label??``,e.value??``,e.identifier??``,e.enabled===!1?`disabled`:`enabled`,e.hittable===!0?`hittable`:`not-hittable`].join(`|`))}function at(e,t){return e<12?!1:t<=Math.floor(e*.2)}function ot(e,t,n){return n.interactiveOnly&&e.snapshot.nodes.length===0&&e.rawNodeCount!==void 0&&e.rawNodeCount>=12?`empty-interactive`:n.mode===`ref-refresh`?null:at(t.baselineCount,e.snapshot.nodes.length)?st(e.snapshot)?null:`sharp-drop`:t.routeComparable&&rt(t.action)&&ct(t.baselineSignatures,e.snapshot.nodes)?`stuck-route`:null}function st(e){return e.nodes.some(e=>e.hittable===!0||!!e.label?.trim()||!!e.value?.trim()||!!e.identifier?.trim())}function ct(e,t){if(!e||e.length===0)return!1;let n=Math.max(e.length,t.length);if(n<12)return!1;let r=it(t),i=Math.min(e.length,r.length),a=0;for(let t=0;t<i;t+=1)e[t]===r[t]&&(a+=1);let o=Math.max(0,r.length-e.length),s=Math.max(0,e.length-r.length),c=Math.max(3,Math.floor(n*.15));return a>=Math.floor(n*.9)&&o<=c&&s<=c}async function lt(e){let t=e.window.markedAt+e.retry.retryBudgetMs,n=await e.capture(),r=e.classify(n),i=0;for(let a of e.retry.delaysMs){if(!r)break;let o=t-Date.now();if(o<=0)break;await ke(Math.min(a,o)),n=await e.capture(),i+=1,r=e.classify(n)}r||e.onTrustworthyCapture?.();let a=i>0||r?{action:e.window.action,retryCount:i,staleAfterRetries:!!r,reason:r??void 0}:void 0;return{...n,annotations:{...n.annotations,...s({freshness:a})}}}function ut(e,t,n=e.snapshot){if(e.device.platform!==`android`)return;let r=dt(e,n),i=r?.comparisonSafe===!0;e.androidSnapshotFreshness={action:t,markedAt:Date.now(),baselineCount:(r??n)?.nodes.length??0,baselineSignatures:i?it(r?.nodes??[]):void 0,routeComparable:i}}function dt(e,t){if(t?.comparisonSafe===!0)return t;let n=e.lastComparisonSafeSnapshot;return!n||n.comparisonSafe!==!0?t:Date.now()-n.createdAt<=5e3?n:t}function T(e){if(!e||e.device.platform!==`android`)return;let t=e.androidSnapshotFreshness;if(t){if(Date.now()-t.markedAt>2500){delete e.androidSnapshotFreshness;return}return t}}function E(e){!e||e.device.platform!==`android`||delete e.androidSnapshotFreshness}async function ft(e,t){return lt({capture:e.capture,classify:n=>ot({snapshot:n.snapshot,rawNodeCount:n.annotations.analysis?.rawNodeCount},t,{interactiveOnly:e.interactiveOnly,mode:e.androidFreshnessMode}),window:t,retry:{retryBudgetMs:1500,delaysMs:nt},onTrustworthyCapture:()=>E(e.session)})}const pt=`activity.launchConsole.launchArgs.clearAppState.verbose.iosXctestrunFile.iosXctestDerivedDataPath.iosXctestEnvDir.snapshotInteractiveOnly.snapshotPreferredBackend.snapshotDepth.snapshotScope.snapshotRaw.snapshotCustomActions.snapshotIncludeHiddenContentHints.count.intervalMs.delayMs.durationMs.holdMs.jitterPx.pixels.until.doubleTap.backMode.pauseMs.pattern`.split(`.`);function mt(e){return Object.fromEntries(pt.map(t=>[t,e?.[t]]))}function D(e,t,n,r,i,a){return{requestId:i??Oe().requestId,appBundleId:n,runnerLeaseContext:Ne({meta:a}),logPath:e,traceLogPath:r,...mt(t),screenshotCaptureBackend:t?.maestro?.screenshotCaptureBackend,...o(t),clickButton:De(t)}}function ht(e){return e?.interactionOutcome?.retryOnNoChange===!0}function gt(e){let{session:t,command:n,positionals:r,flags:i,preSnapshot:a}=e;if(!ht(i)||!U(t))return;let o=Ct(n);if(!o||!kt(r))return;let s=M(a?.nodes??[]);s.length!==0&&(t.pendingInteractionOutcome={action:n,command:o,positionals:r,flags:j(i),markedAt:Date.now(),attemptsRemaining:2,preSignature:s})}function _t(e){let t=e?.pendingInteractionOutcome;if(!(!e||!t)){if(!U(e)){O(e);return}if(Date.now()-t.markedAt>3e4){O(e);return}return t}}function O(e){e?.pendingInteractionOutcome&&(e.pendingInteractionOutcome=void 0)}async function k(e){let{pending:t,snapshot:n}=e,r=P(t.preSignature,M(n.nodes));if(r!==`unchanged`||t.attemptsRemaining<=0)return{retried:!1,change:r};let i=e.retryTap,a=i?St(t.positionals):void 0;if(!i||!a)return A(t,i?`unreadable-retry-point`:`device-runtime-unavailable`),{retried:!1,change:r};let o=Date.now();return--t.attemptsRemaining,await vt(i,e)?(v({level:`info`,phase:`interaction_no_change_retry`,data:{action:t.action,attemptsRemaining:t.attemptsRemaining,durationMs:Date.now()-o}}),{retried:!0,change:r}):(A(t,`retry-tap-unavailable`),{retried:!1,change:r})}async function vt(e,t){let{session:n,pending:r}=t,i=St(r.positionals);if(!i)return!1;try{return await e({device:n.device,point:i,context:{...D(t.logPath,r.flags,n.appBundleId,n.trace?.outPath),surface:n.surface}})}catch{return!1}}function A(e,t){v({level:`info`,phase:`interaction_no_change_retry_skipped`,data:{action:e.action,attemptsRemaining:e.attemptsRemaining,reason:t}})}function yt(e){v({level:e.attempts>0?`info`:`debug`,phase:`interaction_settled`,data:{action:e.pending.action,change:e.change,attempts:e.attempts,durationMs:Date.now()-e.startedAt}})}function bt(e){v({level:`warn`,phase:`interaction_settle_timeout`,data:{action:e.pending.action,attempts:e.attempts,durationMs:Date.now()-e.startedAt}})}function j(e){if(!e?.interactionOutcome&&!e?.postGestureStabilization)return e;let{interactionOutcome:t,postGestureStabilization:n,...r}=e;return r}function M(e){let t=new Map,n=[],r=ve(e);for(let i of e){let e=wt(i,t,r);e&&n.push(e)}return n}function N(e){return e?.comparisonKey??e?.snapshotQuality?.backend}function P(e,t){return e.length===0||t.length===0?`ambiguous`:I(e,t)?`unchanged`:`changed`}function F(e,t){return Math.abs(e.x-t.x)<=1&&Math.abs(e.y-t.y)<=1&&Math.abs(e.width-t.width)<=1&&Math.abs(e.height-t.height)<=1}function I(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){let r=e[n],i=t[n];if(!r||!i||r.key!==i.key||!F(r,i))return!1}return!0}function L(e,t){let n=R(e),r=R(t);if(n.size===0||r.size===0)return`ambiguous`;let i=0,a=!1;for(let[e,t]of n){let n=r.get(e);if(!n){a=!0;continue}if(i+=1,!F(t,n))return`changed`}if(i===0)return`ambiguous`;let o=r.size>i;return a&&o?`changed`:`unchanged`}function R(e){let t=new Map;for(let n of e)!n.identity||!n.discriminating||t.has(n.identity)||t.set(n.identity,n);return t}function z(e,t){let n=e.filter(e=>e.discriminating),r=t.filter(e=>e.discriminating);if(n.length===0||n.length!==r.length)return!1;let i=new Map(r.map(e=>[e.key,e]));for(let e of n){let t=i.get(e.key);if(!t||!F(e,t))return!1}return!0}function B(e,t){let n=new Map(t.filter(e=>e.discriminating).map(e=>[e.key,e])),r=0,i=0,a=0;for(let t of e){if(!t.discriminating)continue;let e=n.get(t.key);if(!e){r+=1;continue}n.delete(t.key),a+=1,F(t,e)||(i+=1)}return{onlyInBaseline:r,onlyInCurrent:n.size,rectMismatched:i,shared:a}}function xt(e,t,n){let r=V(H(e,n)),i=V(H(t,n));for(let[e,t]of r){let n=i.get(e);if(!n||!F(t,n))return!0;i.delete(e)}return i.size>0}function V(e){let t=new Map,n=new Map;for(let r of e){let e=t.get(r.content)??0;t.set(r.content,e+1),n.set(`${r.content}|#${e}`,r)}return n}function H(e,t){return e.filter(e=>e.discriminating&&e.x<t.x+t.width&&t.x<e.x+e.width&&e.y<t.y+t.height&&t.y<e.y+e.height)}function U(e){return d(e.device)}function St(e){let t=Number(e[0]),n=Number(e[1]);return Number.isFinite(t)&&Number.isFinite(n)?{x:t,y:n}:void 0}function Ct(e){if(e===`click`||e===`press`)return`press`}function wt(e,t,n){if(!e.rect||!At(e.rect)||jt(e))return;let r=Ot(e);if(!r)return;let i=t.get(r)??0;t.set(r,i+1);let a=Et(e);return{key:`${r}|#${i}`,...a?{identity:a}:{},content:Tt(e,a),x:Math.round(e.rect.x),y:Math.round(e.rect.y),width:Math.round(e.rect.width),height:Math.round(e.rect.height),discriminating:!Dt(e,n)}}function Tt(e,t){return t??`${e.type??``}|${e.role??``}`}function Et(e){let t=[e.identifier,e.label,e.value].map(e=>typeof e==`string`?e.trim():``).join(`|`);if(t.replaceAll(`|`,``))return`${t}|${e.type??``}`}function Dt(e,t){return ee(e)||e.ref!==void 0&&t.has(e.ref)}function Ot(e){let t=[e.identifier,e.label,e.value,e.type,e.role,...Ee(e),e.hittable===!0?`hittable`:`not-hittable`].map(e=>typeof e==`string`?e.trim():``).join(`|`);return t.replaceAll(`|`,``)?t:void 0}function kt(e){return e.length===2&&e.every(e=>Number.isFinite(Number(e)))}function At(e){return[e.x,e.y,e.width,e.height].every(e=>Number.isFinite(e))&&e.width>0&&e.height>0}function jt(e){return`${e.label??``} ${e.identifier??``}`.toLowerCase().includes(`scroll bar`)}function Mt(e){let{session:t,command:n,action:r=n,positionals:i,flags:a,scheduleOutcomeRetry:o=!1,androidFreshnessBaseline:s}=e;o&&gt({session:t,command:n,positionals:i,flags:a,preSnapshot:t.snapshot}),rt(r)&&ut(t,r,s??t.snapshot),Nt(t,r,i,a)}function Nt(e,t,n=[],r){if(!Ut(e.device)||!Ht(t,n,r))return;let i=Wt(e.device)?M(e.snapshot?.nodes??[]):void 0;e.postGestureStabilization={action:t,positionals:n,markedAt:Date.now(),...i?.length?{baselineSignature:i,baselineBackend:N(e.snapshot)}:{}}}function Pt(e){e?.postGestureStabilization&&(e.postGestureStabilization=void 0)}function Ft(e){return!!e?.postGestureStabilization}async function It(e){let t=_t(e.session);if(t&&e.session)return await Lt({...e,session:e.session},t);if(d(e.device)&&e.session&&Ft(e.session))return await zt({...e,session:e.session});let n=T(e.session);if(n&&e.device.platform===`android`){let t=await ft(e,n);return{snapshot:t.snapshot,...t.annotations}}}async function Lt(e,t){let n=e.session,r=Date.now(),i=0,a=await Rt(e,t,await W(e)),o=await k({session:n,pending:t,logPath:e.logPath,snapshot:a.snapshot,retryTap:e.retryTap});for(;o.retried;)i+=1,a=await Rt(e,t,await W(e)),o=await k({session:n,pending:t,logPath:e.logPath,snapshot:a.snapshot,retryTap:e.retryTap});O(n);let s=await Bt({session:n,initial:a,capture:async()=>await W(e),readSnapshot:e=>e.snapshot});return a=s.value,o.change!==`ambiguous`&&a.annotations.freshness?.staleAfterRetries!==!0&&E(n),o.change===`unchanged`?bt({pending:t,attempts:i,startedAt:r}):yt({pending:t,change:o.change,attempts:i,startedAt:r}),Vt(s)}async function Rt(e,t,n){let r=n;return P(t.preSignature,M(r.snapshot.nodes))===`unchanged`?(await ke(500),r=await W(e),r):r}async function zt(e){return Vt(await Bt({session:e.session,capture:async()=>await W(e),readSnapshot:e=>e.snapshot}))}async function W(e){let t=T(e.session);return t&&e.device.platform===`android`?await ft(e,t):await e.capture()}async function Bt(e){let{session:t,capture:n,readSnapshot:r}=e,i=t?.postGestureStabilization;if(!t||!Ut(t.device)||!i)return{value:e.initial??await n()};try{return await Ce({pending:{action:i.action,positionals:i.positionals??[],baselineSignature:i.baselineSignature,baselineBackend:i.baselineBackend},needsBaselineDistrust:Wt(t.device),initial:e.initial,hooks:{capture:n,readSurface:e=>{let t=r(e);return{signature:M(t.nodes),backend:N(t)}},signaturesStable:I,classifyBaselineEvidence:L,surfacesIdentical:z,summarizeDivergence:B}})}finally{Pt(t)}}function Vt(e){let{snapshot:t,annotations:n}=e.value;return e.postGestureOutcome&&(t.postGestureOutcome=e.postGestureOutcome),{snapshot:t,...n}}function Ht(e,t,n){return n?.postGestureStabilization===!1?!1:n?.postGestureStabilization===!0||e===`swipe`||e===`scroll`||e===`gesture`&&t[0]===`swipe`}function Ut(e){return d(e)}function Wt(e){return f(e.platform)}function Gt(e,t={}){let n=t.mode??`action`,{node:r,preActionNodes:i}=e;if(typeof r.index!=`number`)return;let a=ge(i),o=ae(G(r),i);if(n===`landmark`&&o.id===void 0&&o.label===void 0)return;let s=ye(r,a,8),c=s.chain,l=K(i,r),u=q(r,a),d=Xt(r),f=+(c.length>0),ee=e=>{let t=c.slice(0,e),n=Zt({nodes:i,byIndex:a,node:r,identity:o,ancestry:t,sibling:l,scrollRegion:u});return{candidate:{...o,ancestry:t,sibling:l,viewportOrder:n.viewportOrder,...u?{scrollRegion:u}:{},...d?{rect:d}:{},verification:`verified`},domain:n}};for(let e=c.length;e>=f;--e){let{candidate:t,domain:i}=ee(e);if(qt(t))return t.verification=Kt({node:r,domain:i,mode:n,brokenWalk:s.broken}),t;if(e===f)return Jt(t)}}function Kt(e){return e.brokenWalk?`unverifiable`:e.mode===`landmark`?`verified`:$t({node:e.node,domain:e.domain})}function qt(e){return p(m({...e,verification:`unverifiable`}))<=ce}function Jt(e){return e.verification=`unverifiable`,p(m(e))>4096&&delete e.rect,e}const G=pe;function K(e,t){return se(e,t)}function q(e,t){let n=Pe(e,t);if(!n)return;let r=G(n);return{role:r.role,...r.id===void 0?r.label===void 0?{}:{label:r.label}:{id:r.id}}}function Yt(e,t){return!e&&!t?!0:!e||!t?!1:ne(e,t)}function Xt(e){let t=e.rect;if(t)return{x:t.x,y:t.y,width:t.width,height:t.height}}function Zt(e){let{nodes:t,byIndex:n,node:r,identity:i,ancestry:a,sibling:o,scrollRegion:s}=e,c=_e(t,n,i,a),l=c.filter(e=>K(t,e)===o),u=c.length>0?c.filter(e=>Yt(q(e,n),s)):void 0,d=u?Qt(u):[];return{identitySet:c,siblingMatches:l,regionMembers:u,orderedRegion:d,viewportOrder:Math.max(d.findIndex(e=>e.index===r.index),0)}}function Qt(e){return e.map((e,t)=>({node:e,documentOrder:t,center:Ae(e.rect)})).sort((e,t)=>!e.center&&!t.center?e.documentOrder-t.documentOrder:e.center?t.center?e.center.y===t.center.y?e.center.x===t.center.x?e.documentOrder-t.documentOrder:e.center.x-t.center.x:e.center.y-t.center.y:-1:1).map(e=>e.node)}function $t(e){let{node:t,domain:n}=e,r=t.ref,i=n.identitySet.map(e=>e.ref);return Le({winnerRef:r,matchedRefs:i,identitySetRefs:i,siblingMatchRefs:n.siblingMatches.map(e=>e.ref),regionMemberRefs:n.regionMembers?.map(e=>e.ref),viewportCandidateRef:n.orderedRegion[n.viewportOrder]?.ref}).outcome}let J;async function en(){if(J)return J;let{createAppleSessionObservation:e}=await import(`./session-observation.js`),{listLocalDeviceInventory:t,shouldPropagateDeviceInventoryProbeError:n}=await import(`./device-inventory-context.js`).then(e=>e.t);return J??=e({listLocalDevices:t,shouldPropagateProbeError:n}),J}const tn=Object.freeze({async observeRunnerSession(e){return(await en()).observeRunnerSession(e)},async resolveSoleForegroundApp(e){return(await en()).resolveSoleForegroundApp(e)}});async function nn(e,t,n,r){let{queryAppleRunnerSelector:i}=await import(`./runner-operations-facade.js`);return await i(e,t,n,r)}function rn(e,t){return a(`UNSUPPORTED_OPERATION`,`${e} is not supported on this device`,{reason:t.reason},t.hint?{hint:t.hint}:void 0)}async function Y(e){let t=await on(e.inspectFacts)(e.device);for(let n of e.required){let r=t.operations[n];if(!r.available)return{type:`response`,response:e.unavailableResponse?e.unavailableResponse(r):rn(e.command,r)}}return{type:`admitted`,bind:sn(e.bindDevice)}}async function X(e){let t=await Y({...e,required:e.use.required});if(t.type===`response`)return t;let n=await t.bind(e.device,e.use);return e.readiness&&await Me(n),{type:`runtime`,runtime:n}}async function an(e,t){let n=await X(e);if(n.type===`response`)return{ok:!1,response:n.response};let r=n.runtime;return{ok:!0,execute:async({dispatchContext:e})=>await t(r,e)}}function on(e){if(e)return e;throw new t(`COMMAND_FAILED`,`Device runtime facts inspection is unavailable.`,{reason:`runtime-gateway-missing`})}function sn(e){if(e)return e;throw new t(`COMMAND_FAILED`,`Device runtime binding is unavailable.`,{reason:`runtime-gateway-missing`})}function cn(t){let{flags:n,logPath:r,meta:a,session:o,snapshotScope:s}=t,{appBundleId:c,trace:l,surface:u}=o??{},d=t.context??D(r??``,n,c,l?.outPath,a?.requestId,a);return{options:{appBundleId:c,...e(n,i),scope:s,includeRects:t.includeRects,surface:u},execution:Z(d),...t.signal===void 0?{}:{signal:t.signal}}}function Z(e){return{requestId:e.requestId,verbose:e.verbose,logPath:e.logPath,traceLogPath:e.traceLogPath,iosXctestrunFile:e.iosXctestrunFile,iosXctestDerivedDataPath:e.iosXctestDerivedDataPath,iosXctestEnvDir:e.iosXctestEnvDir,runnerLeaseContext:e.runnerLeaseContext}}function ln(e){let t=Se(e);return{...t,capture:Te(t),selectors:we(t),interactions:xe(t)}}async function un(e){let t=await(await Be().resolve(e.device,e.runnerContext)).snapshot(e.options);if(!(`stage`in t))return t;let{presentIosSnapshotAcquisition:n}=await import(`./ios-snapshot-runtime.js`);return await n(t,e.options)}function dn(e){let t=e?e.textEntryReadiness:void 0,n=gn(t)?{textEntryReadiness:t}:{},r=fn(e);return r?{...n,...r}:n}function fn(e){if(!pn(e))return null;let t=mn(e.target);return t?{verification:`unconfirmed`,requested:e.requested,before:e.before,after:e.after,target:t}:null}function pn(e){return!!(e&&e.verification===`unconfirmed`&&typeof e.requested==`string`&&Q(e.before)&&Q(e.after))}function mn(e){if(!vn(e)||!hn(e))return null;let t=_n(e.rect);return t?{resourceId:e.resourceId,className:e.className,packageName:e.packageName,rect:t}:null}function hn(e){return Q(e.resourceId)&&Q(e.className)&&Q(e.packageName)}function gn(e){return typeof e==`string`&&Fe.includes(e)}function Q(e){return e===null||typeof e==`string`}function _n(e){return!vn(e)||![e.x,e.y,e.width,e.height].every(e=>typeof e==`number`)?null:e}function vn(e){return!!e&&typeof e==`object`}async function yn(e){let t={device:e.device,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice},n=te(e.command,e.requiresCapture),r=await Y({command:e.command,required:n.use.required,...e.unavailableResponse?{unavailableResponse:e.unavailableResponse}:{},...t});if(r.type===`response`)return{ok:!1,response:r.response};let i=r.bind;switch(n.kind){case`tap-point`:return{ok:!0,runtime:{kind:`tap`,captured:!1,runtime:await i(e.device,oe)}};case`captured-tap`:return{ok:!0,runtime:{kind:`tap`,captured:!0,runtime:await i(e.device,ue)}};case`long-press-point`:return{ok:!0,runtime:{kind:`long-press`,captured:!1,runtime:await i(e.device,ie)}};case`captured-long-press`:return{ok:!0,runtime:{kind:`long-press`,captured:!0,runtime:await i(e.device,me)}};case`hover-point`:return{ok:!0,runtime:{kind:`hover`,captured:!1,runtime:await i(e.device,he)}};case`captured-hover`:return{ok:!0,runtime:{kind:`hover`,captured:!0,runtime:await i(e.device,fe)}};case`fill-point`:return{ok:!0,runtime:{kind:`fill`,captured:!1,runtime:await i(e.device,de)}};case`captured-fill`:return{ok:!0,runtime:{kind:`fill`,captured:!0,runtime:await i(e.device,le)}}}}function bn(e,t){let n={execution:Z(t),appBundleId:t.appBundleId},r=e.captured?En(e.runtime):void 0;switch(e.kind){case`tap`:return xn(e,t,n,r);case`long-press`:return Sn(e,n,r);case`hover`:return Cn(e,n,r);case`fill`:return wn(e,t,n,r)}}function xn(e,t,n,r){let i=e.captured?e.runtime.operations.tapRef:void 0,a=e.captured?e.runtime.operations.tapElementSelector:void 0;return Object.freeze({captureSnapshot:r,tapPoint:async(r,i={})=>{let a=Dn(i,t),o=await e.runtime.operations.tapPoint({point:r,options:a,...n});return{x:r.x,y:r.y,count:a.count,intervalMs:a.intervalMs,holdMs:a.holdMs,jitterPx:a.jitterPx,doubleTap:a.doubleTap,...a.button===`primary`?{}:{button:a.button},...o??{},...g(An(r,a.button))}},tapRef:i?async e=>await i({ref:e,...n}):void 0,tapElementSelector:e.captured&&a?async t=>{let r=await e.runtime.operations.tapElementSelector?.({selector:t,...n}),i=r?.maestroNonHittableCoordinateFallbackUsed===!0;return{selector:t.raw,...r??{},...g(i?`tapped via non-hittable coordinate fallback`:`Tapped ${t.raw}`)}}:void 0})}function Sn(e,t,n){return Object.freeze({captureSnapshot:n,longPressPoint:async(n,r)=>{let i=await e.runtime.operations.longPressPoint({point:n,durationMs:r,...t});return{x:n.x,y:n.y,durationMs:r,...i??{},...g(`Long pressed (${n.x}, ${n.y})`)}}})}function Cn(e,t,n){let r=e.captured?e.runtime.operations.hoverRef:void 0;return Object.freeze({captureSnapshot:n,hoverPoint:async n=>{let r=await e.runtime.operations.hoverPoint({point:n,...t});return{x:n.x,y:n.y,...r??{},...g(`Hovered (${n.x}, ${n.y})`)}},hoverRef:r?async e=>await r({ref:e,...t}):void 0})}function wn(e,t,n,r){let i=e.captured?e.runtime.operations.fillRef:void 0,a=e=>h(e??t.delayMs??0,`delay-ms`,0,1e4);return Object.freeze({captureSnapshot:r,fillPoint:async(t,r,i={})=>{let o=a(i.delayMs),s=await e.runtime.operations.fillPoint({point:t,text:r,delayMs:o,allowNonHittableCoordinateFallback:i.allowNonHittableCoordinateFallback===!0,...n});return{x:t.x,y:t.y,text:r,delayMs:o,...Tn(s)?{maestroNonHittableCoordinateFallbackUsed:!0}:{},...dn(s),...g(`Filled ${Array.from(r).length} chars`)}},fillRef:i?async(e,t,r={})=>await i({ref:e,text:t,delayMs:a(r.delayMs),...n}):void 0})}function Tn(e){return typeof e==`object`&&!!e&&`maestroNonHittableCoordinateFallbackUsed`in e&&e.maestroNonHittableCoordinateFallbackUsed===!0}function En(e){return async t=>await e.operations.captureSnapshot(t)}function Dn(e,t){let n=On(e,t);return kn(n),{button:e.button??De(t),...n,surface:e.surface??t.surface}}function On(e,t){return{count:$(e.count,t.count,1,`count`,1,200),intervalMs:$(e.intervalMs,t.intervalMs,0,`interval-ms`,0,1e4),holdMs:$(e.holdMs,t.holdMs,0,`hold-ms`,0,1e4),jitterPx:$(e.jitterPx,t.jitterPx,0,`jitter-px`,0,100),doubleTap:e.doubleTap??t.doubleTap??!1}}function $(e,t,n,r,i,a){return h(e??t??n,r,i,a)}function kn(e){if(e.doubleTap&&e.holdMs>0)throw new t(`INVALID_ARGS`,`double-tap cannot be combined with hold-ms`);if(e.doubleTap&&e.jitterPx>0)throw new t(`INVALID_ARGS`,`double-tap cannot be combined with jitter-px`)}function An(e,t){return t===`primary`?`Pressed (${e.x}, ${e.y})`:`${t===`secondary`?`Right`:`Middle`} clicked (${e.x}, ${e.y})`}function jn(e){let{inspectFacts:t,bindDevice:n}=e;if(!t||!n)return;let r=new Map;return async({device:e,point:i,context:a})=>{let o=r.get(e.id);o||(o=yn({device:e,command:`press`,requiresCapture:!1,inspectFacts:t,bindDevice:n}),r.set(e.id,o));let s=await o;if(!s.ok)return!1;let c=bn(s.runtime,a);return c.tapPoint?(await c.tapPoint(i),!0):!1}}async function Mn(e){let t=await It({session:e.session,device:e.device,logPath:e.logPath,interactiveOnly:e.flags?.snapshotInteractiveOnly===!0,androidFreshnessMode:e.androidFreshnessMode,capture:()=>Pn(e),retryTap:jn(e)});if(t)return t;let n=await Pn(e);return E(e.session),{snapshot:n.snapshot,...n.annotations}}async function Nn(t){if(t.captureData)return await t.captureData();let{device:n,session:r,logPath:a}=t,o=D(a,Fn(t),r?.appBundleId,r?.trace?.outPath);return await un({device:n,runnerContext:{requestId:o.requestId,signal:t.signal,appBundleId:o.appBundleId,verbose:o.verbose,logPath:o.logPath,traceLogPath:o.traceLogPath,iosXctestrunFile:o.iosXctestrunFile,iosXctestDerivedDataPath:o.iosXctestDerivedDataPath,iosXctestEnvDir:o.iosXctestEnvDir,runnerLeaseContext:o.runnerLeaseContext},options:{appBundleId:o.appBundleId,signal:t.signal,...e(o,i),includeRects:t.includeRects,surface:r?.surface}})}async function Pn(e){let t=Date.now(),n=await Nn(e);c(e.session,{durationMs:Date.now()-t,backend:n.backend,platform:u(e.device)});let r=s(n),i=l(n,je(n,Fn(e)));return r.androidSnapshot?.systemSurfaceOnly===!0&&(i.systemSurfaceOnly=!0),{data:n,snapshot:i,annotations:r}}function Fn(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function In(e,t){if(!e||!e.trim().startsWith(`@`))return{ok:!0,scope:e};if(!t?.snapshot)return a(`INVALID_ARGS`,`Ref scope requires an existing snapshot in session.`);let i=n(e.trim());if(!i)return a(`INVALID_ARGS`,`Invalid ref scope: ${e}`);let o=[t.snapshot,...t.snapshotScopeSource?[t.snapshotScopeSource]:[]],s=!1,c;for(let e of o){let t=r(e.nodes,i);if(t&&(s=!0,c=be(t,e.nodes),c))break}return s?c?{ok:!0,scope:c}:a(`COMMAND_FAILED`,`Ref ${e} has no label to scope by`,{reason:_.refUnlabeled,ref:i}):a(`COMMAND_FAILED`,`Ref ${e} not found`,{reason:_.refNotFound,ref:i},{hint:re})}function Ln(e,t,n={}){if(!e)return;let r=Ke(e);return{name:t,appBundleId:e.appBundleId,appName:e.appName,...n.includeSnapshot===!0?{snapshot:e.snapshot,...r&&n.omitRefFrameSnapshot!==!0?{refFrameSnapshot:r}:{}}:{},metadata:{surface:e.surface,...n.metadata??{}}}}function Rn(e){return{get:t=>t===e.sessionName?Ln(e.getSession(),e.sessionName,e.recordOptions):void 0,set:t=>{if(t.name!==e.sessionName){v({level:`warn`,phase:`runtime_session_write_skipped`,data:{expected:e.sessionName,received:t.name}});return}e.setRecord(t)}}}function zn(e,t){e.snapshot!==t&&(e.snapshotGeneration=Vn(e.snapshotGeneration)),e.snapshot=t,e.snapshotScopeSource=void 0,t.comparisonSafe===!0&&(e.lastComparisonSafeSnapshot=t)}function Bn(e,t){e.snapshotScopeSource=t.scopeSource,e.snapshotGeneration=t.keptCurrentSnapshot?t.previousGeneration:Vn(t.previousGeneration)}function Vn(e){return e===void 0?Ie(1e5,1e6):e+1}function Hn(e){let t=e.startsWith(`@`)?e.slice(1):e,n=t.indexOf(`~`);return n===-1?t:t.slice(0,n)}function Un(e,t){let n=new Set;for(let e of t){let t=Hn(e);t.length>0&&n.add(t)}n.size!==0&&Qe(e,n)}function Wn(e,t){if(t?.diff)return Un(e,Gn(t)),e.snapshotGeneration}function Gn(e){let t=[];for(let n of e.diff?.lines??[])n.ref&&t.push(n.ref);for(let n of e.refs??[])t.push(n.ref);for(let n of e.tail??[])t.push(n.ref);return t}function Kn(e){return`Ref @${e.ref.startsWith(`@`)?e.ref.slice(1):e.ref} was minted from snapshot s${e.mintedGeneration} but the session's ref frame is now s${e.currentFrameEpoch} — re-run snapshot -i.`}function qn(e){let{session:t,ref:n,mintedGeneration:r}=e;if(t&&w(t)===`expired`)return`The UI may have changed since these refs were issued, so they no longer represent current device state. Take a new snapshot before relying on or interacting with them.`;if(r!==void 0){let e=t?x(t)??0:0;if(r!==e)return Kn({ref:n,mintedGeneration:r,currentFrameEpoch:e})}}export{M as A,qe as B,K as C,Ft as D,Yt as E,j as F,b as G,Je as H,B as I,Le as J,w as K,D as L,xt as M,z as N,Mt as O,N as P,T as R,q as S,Qt as T,et as U,Ye as V,S as W,an as _,Bn as a,nn as b,Nn as c,yn as d,ln as f,X as g,Y as h,zn as i,L as j,I as k,In as l,Z as m,Un as n,Rn as o,cn as p,ze as q,qn as r,Mn as s,Wn as t,bn as u,rn as v,Gt as w,G as x,tn as y,Ze as z};
@@ -1,4 +1,4 @@
1
- import{A as e,J as t}from"./sdk-contracts.js";import{_ as n}from"./sdk-batch-runner.js";import{b as r,i,r as a,t as o}from"./sdk-device.js";import{$n as s,Qn as c,cn as l,on as ee,p as te,x as ne}from"./sdk-batch.js";import{t as re}from"./recording-scope.js";import{a as ie}from"./scroll-gesture.js";import{_ as u,c as ae,d as oe,g as se,h as ce,i as le,l as ue,m as de,o as fe,p as d,s as pe,u as f,y as me}from"./script.js";import{A as p,C as he,D as ge,E as _e,M as ve,N as ye,S as be,T as xe,_ as Se,a as Ce,b as we,g as m,i as Te,k as Ee,l as De,n as Oe,r as ke,s as Ae,t as je,v as Me,w as Ne,x as Pe,y as Fe}from"./parameterized-recorded-fill.js";import{n as h,t as Ie}from"./catalog.js";import{o as Le,t as g}from"./back-mode.js";import{t as Re}from"./session.js";import{r as ze}from"./success-text.js";import{t as Be}from"./click-button.js";import"./device.js";import{r as _,t as v}from"./device-rotation.js";import{a as y,r as b}from"./diagnostics.js";import{D as Ve}from"./owner-identity.js";import"./file.js";import{t as He}from"./tv-remote.js";import"./diagnostics2.js";import{n as Ue,r as We}from"./session-repair-tombstone.js";import{n as Ge,r as x,t as S}from"./session-paths.js";import{t as Ke}from"./keyboard-actions.js";import C from"node:path";import w from"node:fs";import{createHash as qe}from"node:crypto";import{StringDecoder as Je}from"node:string_decoder";function Ye(e,t={}){let n=[e.command];return e.command===`snapshot`?oe(n,e):e.command===`open`?le(n,e):e.command===`runtime`?ae(n,e,{includeAllPositionals:t.runtimeIncludeAllPositionals}):e.command===`record`?pe(n,e):e.command===`screenshot`?ue(n,e):fe(n,e),n.join(` `)}function Xe(e){return e.targetEvidences?[c(e.targetEvidences)]:e.targetEvidence?[s(e.targetEvidence)]:[]}function T(e){return e?.scriptPublication??m}function Ze(e,t){let n=T(e),r=typeof t.saveScript==`string`?S(t.saveScript):n.kind===`repair`?void 0:t.healedSiblingPath;e.scriptPublication=Me(n,{requested:{path:r,force:t.force===!0},boundary:t.firstArm?e.actions.length:0,sourcePath:t.sourcePath})}function Qe(e){e.scriptPublication=we(T(e))}function $e(e){e.scriptPublication=Ne(T(e))}function et(e,t){e.scriptPublication=xe(T(e),t)}function tt(e){e.scriptPublication=Se(T(e))}function nt(e,t){let n=T(e);return n.kind===`repair`&&n.closeReceipt===t}function rt(e){return T(e).kind===`repair`}function it(e){return he(T(e))}function E(e){return _e(T(e))}function at(e){return ge(T(e))}function ot(e,t){if(t.flags?.noRecord||gt(e,t))return;t.flags&&Ae(e,t.flags);let n=ct(t),r=dt(e,lt(t,n));n&&ut(e,n);let i={ts:Date.now(),command:r.command,positionals:r.positionals,runtime:r.runtime,flags:vt(r.flags),result:r.result,...r.targetEvidence?{targetEvidence:r.targetEvidence}:{},...r.targetEvidences?{targetEvidences:r.targetEvidences}:{}};return e.actions.push(i),b({level:`debug`,phase:`record_action`,data:{command:t.command,session:e.name}}),i}function st(e,t,n,r,i,a){t&&e.recordAction(t,{command:r,positionals:a?.positionals??n.positionals??[],flags:a?.flags??n.flags??{},result:i??{}})}function ct(e){if(e.command!==`fill`||typeof e.flags.recordAs!=`string`)return;let t=ye(e.flags.recordAs),n=ve(t);return{literal:p({ts:0,command:e.command,positionals:e.positionals,flags:e.flags}),placeholder:n}}function lt(e,t){if(!t)return e;let{literal:n,placeholder:r}=t;return{...e,positionals:pt(e.positionals,r),result:je(e.result,n,r),targetEvidence:Oe(e.targetEvidence,n,r)}}function ut(e,t){t.literal.trim()&&(e.recordedFillLiterals??=new Map,!e.recordedFillLiterals.has(t.literal)&&e.recordedFillLiterals.set(t.literal,t.placeholder))}function dt(e,t){let n=e.recordedFillLiterals;if(!n||n.size===0)return t;let r=ke(t.result,n),i=(t.targetEvidenceMode??`action`)===`landmark`?ft(t.targetEvidence,n):D(t.targetEvidence,n),a=t.targetEvidences?{source:D(t.targetEvidences.source,n),destination:D(t.targetEvidences.destination,n)}:t.targetEvidences;return{...t,result:r,targetEvidence:i,targetEvidences:a}}function ft(e,t){return e&&(Ce(e,t)?void 0:e)}function D(e,t){return!e||!Ce(e,t)?e:{...Te(e,t),verification:`unverifiable`}}function pt(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 mt=new Set([`snapshot`,`get`,`is`,`find`]);function ht(e){return e.internal?.replayPlanStep!==!0&&mt.has(e.command)}function gt(e,t){return!t.interactiveObservation||E(e)===void 0?!1:t.flags?.record!==!0}const _t=Le();function vt(e){if(!e)return{};let t={};for(let n of _t){let r=e[n];r!==void 0&&(t[n]=r)}return t}function yt(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())ne({command:n.command,positionals:n.positionals,flags:n.flags})===`mutates-app`&&(r=e);if(!t.slice(r+1).some(Tt))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 bt(t){for(let n of t){if(xt(n)){St(n);continue}let t=Et(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`&&ne(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||!l(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 xt(e){return Ct(e)!==void 0}function St(t){let n=Ct(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||!l(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 Ct(e){return e.command===`gesture`?me(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 Tt(e){if(e.command!==`wait`)return!1;let t=ee(e.positionals);return t?.kind!==`selector`||!l(t.selectorExpression)?!1:e.targetEvidence?.verification===`verified`}function Et(e){if(e.command===`get`)return e.positionals[1];if(se(e.command)||e.command===`fill`){let[t,n]=e.positionals;return t!==void 0&&n!==void 0&&Dt(t)&&Dt(n)?void 0:t}}function Dt(e){return e.trim().length>0&&Number.isFinite(Number(e))}function Ot(e){let t=e.scriptPublication??m;return t.kind===`repair`?t.status===`committed`||!be(t):!1}function kt(e){return!Pe(e.scriptPublication??m)||Ot(e)}var At=class{sessionsDir;constructor(e){this.sessionsDir=e}write(e,t){let n=rt(e),r=t?.publication===`active`,i;try{if(kt(e))return{written:!1};let a=jt(e,{appendCompleteSentinel:n,activePublication:r});i=this.resolveScriptPath(e);let o=C.dirname(i);return w.existsSync(o)||w.mkdirSync(o,{recursive:!0}),Pt({scriptPath:i,script:a.script,force:t?.force}),n&&(e.scriptPublication=Fe(e.scriptPublication??m)),{written:!0,path:i,actionCount:a.actionCount}}catch(t){return Mt({session:e,error:t,scriptPath:i,repairArmed:n,activePublication:r})}}resolveScriptPath(e){let t=Ee(e.scriptPublication??m);if(t)return S(t);let n=x(e.name),r=new Date(e.createdAt).toISOString().replaceAll(/[:.]/g,`-`);return C.join(this.sessionsDir,`${n}-${r}.ad`)}};function jt(e,t){let n=Ft(e,{strictPortableRefs:t.activePublication});return t.activePublication&&yt(n),{script:Gt(e,n,t.appendCompleteSentinel),actionCount:n.length}}function Mt(t){let{session:n,error:r,scriptPath:i,repairArmed:a,activePublication:o}=t;if(b({level:`warn`,phase:`session_script_write_failed`,data:{session:n.name,path:i,error:r instanceof Error?r.message:String(r)}}),a)return{written:!1,error:Nt(r,i)};if(o)return{written:!1,error:wt(r,i)};if(r instanceof e)throw r;return{written:!1}}function Nt(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 Pt(t){let{scriptPath:n,script:r,force:i}=t;try{Ve({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 Ft(e,t={}){let n=E(e),r=n!==void 0,i=e.actions.slice(n??0),a=[];for(let n of i){if(n.command===`snapshot`)continue;let i=Rt(n);if(i){a.push(i);continue}(r||t.strictPortableRefs)&&It(n);let o=Wt(e,n);o&&a.push(o),a.push(n)}return t.strictPortableRefs&&bt(a),a}function It(t){let n=t.command===`gesture`?me(t.positionals??[]):void 0;if(n){Lt(n);return}if(!O(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 Lt(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 Rt(e){let t=zt(e);if(!(!t||!O(e.command)))return ce(e.command)||e.command===`hover`?{...e,positionals:[t]}:e.command===`longpress`?Vt(e,t):e.command===`fill`?Bt(e,t):Ht(e,t)}function zt(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 O(e){return se(e)||e===`fill`||e===`get`}function Bt(e,t){let n=p(e);return n.length>0?{...e,positionals:[t,n]}:void 0}function Vt(e,t){let n=typeof e.result?.durationMs==`number`?String(e.result.durationMs):Ut(e.positionals??[]);return{...e,positionals:n?[t,n]:[t]}}function Ht(e,t){let n=e.positionals?.[0];return n===`text`||n===`attrs`?{...e,positionals:[n,t]}:void 0}function Ut(e){let t=e.at(-1);if(!(e.length<=1||t===void 0||t.trim()===``))return Number.isFinite(Number(t))?t:void 0}function Wt(e,t){if(!O(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 Gt(e,t,n){let i=[],a=e.device.kind?` kind=${e.device.kind}`:``;i.push(`context platform=${r(e.device)} device=${de(e.device.name)}${a} theme=unknown`);for(let e of t)e.flags?.noRecord||(i.push(...Xe(e)),i.push(Kt(e)));return n&&i.push(`# agent-device:heal-complete`),`${i.join(`
2
- `)}\n`}function Kt(e){return qt([e.command],e)||Ye(e)}function qt(e,t){if(ce(t.command))return Jt(e,t);if(t.command===`fill`)return Yt(e,t);if(t.command===`get`)return Xt(e,t)}function Jt(e,t){let n=t.positionals?.[0];if(n){if(n.startsWith(`@`))return e.push(d(u(n))),k(e,t),f(e,t),e.join(` `);if(t.positionals.length===1)return e.push(d(n)),f(e,t),e.join(` `)}}function Yt(e,t){let n=t.positionals?.[0];if(!n?.startsWith(`@`))return;e.push(d(u(n))),k(e,t);let r=t.positionals.slice(1).join(` `);return t.positionals.length>1&&e.push(d(r)),f(e,t),e.join(` `)}function Xt(e,t){let n=t.positionals?.[0],r=t.positionals?.[1];if(!(!n||!r))return e.push(d(n)),e.push(d(u(r))),r.startsWith(`@`)&&k(e,t),e.join(` `)}function k(e,t){let n=t.result?.refLabel;typeof n==`string`&&n.trim().length>0&&e.push(d(n))}const Zt=[`id`,`deviceId`,`device_id`,`serial`,`udid`,`device_udid`,`identifier`],Qt={ios:`iOS`,ipados:`iPadOS`,tvos:`tvOS`,watchos:`watchOS`,visionos:`visionOS`,macos:`macOS`,apple:`Apple`,android:`Android`,linux:`Linux`,web:`Web`};function $t(e,t){let n=t??{};switch(e.command){case h.devices:return en(n.devices);case h.apps:return tn(n.apps,e.flags?.appsFilter);case h.boot:return nn(`Booted`,n,!0);case h.shutdown:return nn(`Shut down`,n,!1);case h.install:return rn(`Installed`,n);case h.reinstall:return rn(`Reinstalled`,n);case h.screenshot:return an(e,n);default:return{}}}function en(e){if(!Array.isArray(e))return{};let t=e.flatMap(e=>{let t=sn(e);return t?[t]:[]}),n=t.slice(0,5),r=Math.max(0,t.length-n.length),i=t.slice(0,3);return{summary:gn(`Found ${t.length} ${_n(`device`,t.length)}`,i.map(e=>mn(e,!0)),Math.max(0,t.length-i.length)),details:{deviceCount:t.length,devices:n,...r>0?{omittedDeviceCount:r}:{}}}}function tn(e,t){if(!Array.isArray(e))return{};let n=e.flatMap(e=>{let t=M(e);return t?[t]:[]}),r=n.slice(0,5),i=Math.max(0,n.length-r.length),a=n.slice(0,3);return{summary:gn(`Found ${n.length} ${_n(`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 nn(e,t,n){let r=cn(t);if(!r)return{};let i={device:r,...pn(t),booted:n};return{summary:`${e} ${mn(i,!1)}`,details:i}}function rn(e,t){let n=M(t.appName),r=M(t.bundleId),i=A(t,[`packageName`,`package`]),a=M(t.platform),o=M(t.launchTarget),s=A(t,[`bundleId`,`packageName`,`package`,`appId`,`launchTarget`]),c=hn(n,s);if(!c)return{};let l={};return j(l,`appName`,n),j(l,`bundleId`,r),j(l,`packageName`,i),j(l,`platform`,a),o!==s&&j(l,`launchTarget`,o),{summary:`${e} ${c}`,details:l}}function an(e,t){let n=on(e,t);return n?{details:{requestedFileName:n}}:{}}function on(e,t){let n=R(e.meta?.clientArtifactPaths?.path)??R(t.path);if(n)return L(n)}function sn(e){if(!n(e))return;let t=cn(e);if(t)return{name:t,...pn(e)}}function cn(e){let t=A(e,[`name`,`deviceName`,`device`]);return!t||!ln(e,t)?t:dn(e)}function ln(e,t){let n=un(t);return Zt.some(t=>{let r=M(e[t]);return r!==void 0&&un(r)===n})}function un(e){return e.toLowerCase()}function dn(e){let t=M(e.appleOs),n=M(e.platform),r=M(e.kind),i=fn(t,n);return i&&(r===`simulator`||r===`emulator`)?`${i} ${r}`:i?`${i} device`:r===`simulator`?`Simulator`:r===`emulator`?`Emulator`:`Unnamed device`}function fn(e,t){let n=e??t;if(!(!n||!Object.hasOwn(Qt,n)))return Qt[n]}function pn(e){let t=M(e.platform),n=M(e.appleOs),r=M(e.kind),i=M(e.target);return{...t?{platform:t}:{},...n?{appleOs:n}:{},...r?{kind:r}:{},...i?{target:i}:{},...typeof e.booted==`boolean`?{booted:e.booted}:{}}}function mn(e,t){let n=M(e.name)??M(e.device)??`device`,r=M(e.platform),i=M(e.appleOs),a=[r,i===r?void 0:i,M(e.kind),M(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 hn(e,t){return e&&t&&e!==t?`${e} (${t})`:e??t}function A(e,t){for(let n of t){let t=M(e[n]);if(t)return t}}function j(e,t,n){n&&(e[t]=n)}function gn(e,t,n){let r=[...t,...n>0?[`+${n} more`]:[]];return r.length>0?`${e}: ${r.join(`, `)}`:e}function _n(e,t){return t===1?e:`${e}s`}function M(e){let t=R(e);if(!t)return;let n=t.trim(),r=Array.from(n);return r.length<=120?n:`${r.slice(0,119).join(``)}…`}function N(e){return M(e)}function P(e){return typeof e==`boolean`?e:void 0}function F(e,t){let n=N(e);return n&&t.includes(n)?n:void 0}function I(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function L(e){let t=R(e);return t?M(t.split(/[\\/]/).at(-1)):void 0}function R(e){if(typeof e==`string`)return e.trim().length>0?e:void 0}function z(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}const vn=[`up`,`down`,`left`,`right`],yn=[`top`,`bottom`];function bn(e){return`${e.command===h.reinstall?`Reinstalled`:`Installed`} ${wn(e.result??{})??`app`}`}function xn(e){let t=e.result??{};switch(e.command){case h.scroll:return En(t);case h.screenshot:return kn(t);case h.home:return`Went home`;case h.back:return jn(t);case h.appSwitcher:return`Opened app switcher`;case h.actionButton:return`Pressed Action Button`;case h.orientation:return Nn(t);case h.fold:return Mn(t);case h.viewport:return Pn(t);case h.clipboard:return Fn(t);case h.keyboard:return In(t);case h.tvRemote:return zn(t);case h.gesture:return Bn(t);case h.swipe:return Vn(t);case h.trace:return Un(`trace`,e);case h.record:return Un(`recording`,e);default:return}}function Sn(e){let t=e.result??{};switch(e.command){case h.scroll:return I({direction:F(t.direction,vn),edge:F(t.edge,yn),passes:z(t.passes),amount:z(t.amount),pixels:z(t.pixels),durationMs:z(t.durationMs),x1:z(t.x1),y1:z(t.y1),x2:z(t.x2),y2:z(t.y2)});case h.screenshot:return I({requestedFileName:An(t)});case h.back:return I({mode:F(t.mode,g)});case h.orientation:return I({orientation:F(t.orientation,v)});case h.fold:return I({pose:F(t.pose,_)});case h.viewport:return I({width:z(t.width),height:z(t.height)});case h.clipboard:return I({action:F(t.action,[`read`,`write`])});case h.keyboard:return Rn(t);case h.tvRemote:return I({button:F(t.button,He),durationMs:z(t.durationMs)});case h.gesture:case h.swipe:return Hn(t);case h.trace:case h.record:return I({action:F(t.action,[`start`,`stop`]),fileName:Gn(e),showTouches:P(t.showTouches)});default:return{}}}function Cn(e,t){if(e.command!==h.screenshot)return t;let n=on(e,t);return n?{...t,requestedFileName:n}:t}function wn(e){let t=N(e.appName),n=Kn(e,[`bundleId`,`packageName`,`appBundleId`,`launchTarget`]);return t&&n&&t!==n?`${t} (${n})`:t??n??Tn(e)}function Tn(e){let t=N(e.app);return t&&!t.includes(`/`)&&!t.includes(`\\`)?t:void 0}function En(e){let t=F(e.direction,vn),n=F(e.edge,yn),r=z(e.passes);return n?Dn(n,r):t?On(t,e):`Scrolled`}function Dn(e,t){return t===0?`Already at ${e}`:t===void 0?`Scrolled to ${e}`:`Scrolled to ${e} in ${t} ${t===1?`pass`:`passes`}`}function On(e,t){let n=z(t.pixels);if(n!==void 0)return`Scrolled ${e} by ${n}px`;let r=z(t.amount);return r===void 0?`Scrolled ${e}`:`Scrolled ${e} by ${r}`}function kn(e){let t=An(e);return t?`Captured screenshot ${t}`:`Captured screenshot`}function An(e){return L(e.requestedFileName)??L(e.path)}function jn(e){return F(e.mode,g)===`system`?`Went back using system navigation`:`Went back`}function Mn(e){let t=F(e.pose,_);return t?`Folded to ${t}`:`Changed fold pose`}function Nn(e){let t=F(e.orientation,v);return t?P(e.confirmed)===!1?`Requested ${t} (unconfirmed)`:`Rotated to ${t}`:`Changed orientation`}function Pn(e){let t=z(e.width),n=z(e.height);return t!==void 0&&n!==void 0?`Set viewport to ${t}×${n}`:`Changed viewport`}function Fn(e){let t=F(e.action,[`read`,`write`]);return t===`read`?`Read clipboard`:t===`write`?`Updated clipboard`:`Used clipboard`}function In(e){let t=R(e.action);if(!t||!Ke(t))return`Used keyboard`;if(t===`dismiss`)return Ln(e);if(t===`enter`||t===`return`)return`Pressed keyboard return`;let n=P(e.visible);return n===void 0?`Inspected keyboard`:n?`Keyboard is visible`:`Keyboard is hidden`}function Ln(e){return P(e.dismissed)===!1?`Keyboard was already hidden`:`Dismissed keyboard`}function Rn(e){let t=R(e.action);return I({action:t&&Ke(t)?t:void 0,platform:F(e.platform,[`ios`,`android`]),visible:P(e.visible),wasVisible:P(e.wasVisible),dismissed:P(e.dismissed),attempts:z(e.attempts),mechanism:F(e.mechanism,[`dismissKey`])})}function zn(e){let t=F(e.button,He);return t?`Pressed TV remote ${t}`:`Used TV remote`}function Bn(e){let t=F(e.kind,[`fling`,`pan`,`pinch`,`rotate`,`transform`]);return t?`Ran ${t} gesture`:`Ran gesture`}function Vn(e){let t=z(e.count);return t!==void 0&&t>1?`Swiped ${t} times`:`Swiped`}function Hn(e){return I({kind:F(e.kind,[`fling`,`pan`,`pinch`,`rotate`,`transform`]),durationMs:z(e.durationMs),pointerCount:z(e.pointerCount),x1:z(e.x1),y1:z(e.y1),x2:z(e.x2),y2:z(e.y2),count:z(e.count),pauseMs:z(e.pauseMs),pattern:F(e.pattern,[`one-way`,`ping-pong`]),scale:z(e.scale)})}function Un(e,t){let n=Wn(e,F(t.result?.action,[`start`,`stop`])),r=Gn(t);return r?`${n} ${r}`:n}function Wn(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 Gn(e){let t=e.result??{};return L(t.requestedFileName)??L(t.outPath)??L(t.path)??L(e.positionals[1])}function Kn(e,t){for(let n of t){let t=N(e[n]);if(t)return t}}function qn(e){switch(e.command){case h.open:return`Opened ${B(e)??`session`}`;case h.close:return`Closed ${N(e.result?.session)??`session`}`;case h.click:case h.press:return`Tapped ${B(e)??`target`}`;case h.longPress:return`Long pressed ${B(e)??`target`}`;case h.hover:return`Hovered ${B(e)??`target`}`;case h.fill:return`Filled ${B(e)??`target`}`;case h.type:return`Typed text`;case h.install:case h.reinstall:case Ie.installSource:return bn(e);default:return xn(e)??`Ran ${e.command}`}}function Jn(e){return I({command:e.command,positionals:rr(e),flags:hr(e),...Yn(e),...Xn(e),...Zn(e),...Sn(e)})}function Yn(e){if(!Qn(e.command))return{};let t=e.result??{};return I({ref:G(t),targetLabel:B(e),selectorChainLength:dr(t.selectorChain)?.length,x:z(t.x),y:z(t.y),x2:z(t.x2),y2:z(t.y2),durationMs:z(t.durationMs)})}function Xn(e){if(!$n(e.command))return{};let t=e.result??{};return I({platform:F(t.platform,i),target:F(t.target,o),appName:N(t.appName),appBundleId:N(t.appBundleId),bundleId:N(t.bundleId),packageName:N(t.packageName),launchTarget:N(t.launchTarget)})}function Zn(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?{}:I({waitedMs:z(t.waitedMs),found:P(t.found)})}function Qn(e){return e===h.click||e===h.press||e===h.longPress||e===h.hover||e===h.focus||e===h.fill}function $n(e){return e===h.open||e===h.install||e===h.reinstall||e===Ie.installSource}function B(e){let t=e.result??{};return er(t)??tr(t)??nr(t)??lr(e.positionals[0])}function er(e){let t=G(e);if(t)return t.startsWith(`@`)?t:`@${t}`}function tr(e){let t=z(e.x),n=z(e.y);if(t!==void 0&&n!==void 0)return`(${t}, ${n})`}function nr(e){return N(e.appName)??N(e.appBundleId)??N(e.bundleId)??N(e.packageName)}function rr(e){if(e.positionals.length!==0)return e.command===h.type?[H(`text`)]:e.command===h.fill?ir(e):e.command===h.find?ar(e):e.command===h.clipboard?or(e):e.command===h.push?sr(e,`app`,`payload`):e.command===h.triggerAppEvent?sr(e,`event`,`payload`):e.positionals.map(V)}function ir(e){let t=H(`text`),n=e.result??{},r=G(n);if(r)return[`@${r}`,t];if(N(n.selector))return[H(`target`),t];let i=z(n.x),a=z(n.y);return i!==void 0&&a!==void 0?[String(i),String(a),t]:[t]}function ar(e){let t=+!!ur(e.positionals[0]);if(e.positionals[t]===void 0)return;let n=t+1,r=[...t===1?[String(e.positionals[0])]:[],H(`query`)],i=e.positionals[n];return i?i===`fill`||i===`type`?[...r,i,H(`text`)]:[...r,...e.positionals.slice(n).map(cr)]:r}function or(e){let t=e.positionals[0]?.toLowerCase();return t===`read`?[`read`]:t===`write`?[`write`,H(`text`)]:e.positionals.map(V)}function sr(e,t,n){let[r,i,...a]=e.positionals;return[...r?[H(t)]:[],...i?[H(n)]:[],...a.map(V)]}function cr(e){return e===`click`||e===`focus`||e===`exists`||e===`get`||e===`text`||e===`attrs`||e===`wait`?e:V(e)}function V(e){return lr(e)??H(`arg`)}function lr(e){if(!e)return;let t=e.trim();if(/^@[a-zA-Z0-9:_-]+$/.test(t))return t}function H(e){return`<${e}>`}function ur(e){return e===`text`||e===`label`||e===`value`||e===`role`||e===`id`}function dr(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?e:void 0}const fr={enums:[{source:`platform`,values:a},{source:`target`,values:o}]},pr={booleans:[{source:`settle`}],numbers:[{source:`settleQuietMs`}]},mr={[h.open]:{booleans:[{source:`relaunch`},{source:`testIme`}],enums:[{source:`surface`,values:Re}]},[h.click]:U(),[h.press]:U(),[h.longPress]:U(),[h.hover]:U(),[h.fill]:_r(),[h.type]:_r(),[h.scroll]:{numbers:[{source:`pixels`},{source:`durationMs`}]},[h.gesture]:vr(),[h.swipe]:vr(),[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:re}]},[h.apps]:{enums:[{source:`appsFilter`,output:`filter`,values:[`user-installed`,`all`]}]},[h.boot]:{booleans:[{source:`headless`}]},[h.close]:{booleans:[{source:`shutdown`}]}};function hr(e){let t=e.flags??{},n={},r=Object.hasOwn(mr,e.command)?mr[e.command]:void 0;return W(n,t,fr),W(n,t,r),W(n,t,gr(e.command)),Object.keys(n).length>0?n:void 0}function gr(e){return te(e)?pr:void 0}function U(){return{booleans:[{source:`doubleTap`}],numbers:[{source:`count`},{source:`intervalMs`},{source:`holdMs`},{source:`jitterPx`}],enums:[{source:`clickButton`,values:Be}]}}function _r(){return{numbers:[{source:`delayMs`}]}}function vr(){return{numbers:[{source:`pointerCount`},{source:`count`},{source:`pauseMs`}],enums:[{source:`pattern`,values:ie}]}}function W(e,t,n){n&&(yr(e,t,n.booleans??[]),br(e,t,n.numbers??[]),xr(e,t,n.enums??[]))}function yr(e,t,n){for(let r of n)Sr(e,r.output??r.source,t[r.source])}function br(e,t,n){for(let r of n)Cr(e,r.output??r.source,t[r.source])}function xr(e,t,n){for(let r of n)wr(e,r.output??r.source,t[r.source],r.values)}function G(e){let t=N(e.ref);if(!t)return;let n=t.startsWith(`@`)?t.slice(1):t;return/^[a-zA-Z0-9:_-]+$/.test(n)?n:void 0}function Sr(e,t,n){typeof n==`boolean`&&(e[t]=n)}function Cr(e,t,n){let r=z(n);r!==void 0&&(e[t]=r)}function wr(e,t,n,r){let i=F(n,r);i!==void 0&&(e[t]=i)}const Tr=65536;function Er(e){return qe(`sha256`).update(e,`utf8`).digest(`hex`).slice(0,32)}function K(e,t){let n=Ar(e);if(n===void 0)return!1;try{let e=Or(t),r=Buffer.allocUnsafe(Tr),i=0;do if(i=w.readSync(n,r,0,r.length,null),!e.push(r.subarray(0,i)))return!0;while(i>0);return e.end(),!0}finally{w.closeSync(n)}}async function Dr(e){let t=await jr(e);if(t===void 0)return{lineCount:0,firstLineDigest:void 0};let n={lineCount:0,firstLineDigest:void 0};try{let e=Or(e=>{n.lineCount===0&&(n.firstLineDigest=Er(e)),n.lineCount+=1}),r=Buffer.allocUnsafe(Tr);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 q(e){let t;return K(e,e=>(t=Er(e),!1)),t}function Or(e){let t=new Je(`utf8`),n=``,r=!1;return{push(i){if(r)return!1;let a=`${n}${t.write(i)}`,o=0;for(let t=a.indexOf(`
1
+ import{M as e,X as t}from"./sdk-contracts.js";import{_ as n}from"./sdk-batch-runner.js";import{S as r,i,r as a,t as o}from"./sdk-device.js";import{$n as s,Qn as c,cn as l,on as ee,p as te,x as ne}from"./sdk-batch.js";import{t as re}from"./recording-scope.js";import{a as ie}from"./scroll-gesture.js";import{_ as u,c as ae,d as oe,g as se,h as ce,i as le,l as ue,m as de,o as fe,p as d,s as pe,u as f,y as me}from"./script.js";import{A as p,C as he,D as ge,E as _e,M as ve,N as ye,S as be,T as xe,_ as Se,a as Ce,b as we,g as m,i as Te,k as Ee,l as De,n as Oe,r as ke,s as Ae,t as je,v as Me,w as Ne,x as Pe,y as Fe}from"./parameterized-recorded-fill.js";import{n as h,t as Ie}from"./catalog.js";import{o as Le,t as g}from"./back-mode.js";import{t as Re}from"./session.js";import{r as ze}from"./success-text.js";import{t as Be}from"./click-button.js";import"./device.js";import{r as _,t as Ve}from"./device-rotation.js";import{a as v,r as y}from"./diagnostics.js";import{D as He}from"./owner-identity.js";import"./file.js";import{t as Ue}from"./tv-remote.js";import"./diagnostics2.js";import{n as We,r as Ge}from"./session-repair-tombstone.js";import{n as Ke,r as b,t as x}from"./session-paths.js";import{t as qe}from"./keyboard-actions.js";import S from"node:path";import C from"node:fs";import{createHash as Je}from"node:crypto";import{StringDecoder as Ye}from"node:string_decoder";function Xe(e,t={}){let n=[e.command];return e.command===`snapshot`?oe(n,e):e.command===`open`?le(n,e):e.command===`runtime`?ae(n,e,{includeAllPositionals:t.runtimeIncludeAllPositionals}):e.command===`record`?pe(n,e):e.command===`screenshot`?ue(n,e):fe(n,e),n.join(` `)}function Ze(e){return e.targetEvidences?[c(e.targetEvidences)]:e.targetEvidence?[s(e.targetEvidence)]:[]}function w(e){return e?.scriptPublication??m}function Qe(e,t){let n=w(e),r=typeof t.saveScript==`string`?x(t.saveScript):n.kind===`repair`?void 0:t.healedSiblingPath;e.scriptPublication=Me(n,{requested:{path:r,force:t.force===!0},boundary:t.firstArm?e.actions.length:0,sourcePath:t.sourcePath})}function $e(e){e.scriptPublication=we(w(e))}function et(e){e.scriptPublication=Ne(w(e))}function tt(e,t){e.scriptPublication=xe(w(e),t)}function nt(e){e.scriptPublication=Se(w(e))}function rt(e,t){let n=w(e);return n.kind===`repair`&&n.closeReceipt===t}function it(e){return w(e).kind===`repair`}function at(e){return he(w(e))}function T(e){return _e(w(e))}function ot(e){return ge(w(e))}function st(e,t){if(t.flags?.noRecord||_t(e,t))return;t.flags&&Ae(e,t.flags);let n=lt(t),r=ft(e,ut(t,n));n&&dt(e,n);let i={ts:Date.now(),command:r.command,positionals:r.positionals,runtime:r.runtime,flags:yt(r.flags),result:r.result,...r.targetEvidence?{targetEvidence:r.targetEvidence}:{},...r.targetEvidences?{targetEvidences:r.targetEvidences}:{}};return e.actions.push(i),y({level:`debug`,phase:`record_action`,data:{command:t.command,session:e.name}}),i}function ct(e,t,n,r,i,a){t&&e.recordAction(t,{command:r,positionals:a?.positionals??n.positionals??[],flags:a?.flags??n.flags??{},result:i??{}})}function lt(e){if(e.command!==`fill`||typeof e.flags.recordAs!=`string`)return;let t=ye(e.flags.recordAs),n=ve(t);return{literal:p({ts:0,command:e.command,positionals:e.positionals,flags:e.flags}),placeholder:n}}function ut(e,t){if(!t)return e;let{literal:n,placeholder:r}=t;return{...e,positionals:mt(e.positionals,r),result:je(e.result,n,r),targetEvidence:Oe(e.targetEvidence,n,r)}}function dt(e,t){t.literal.trim()&&(e.recordedFillLiterals??=new Map,!e.recordedFillLiterals.has(t.literal)&&e.recordedFillLiterals.set(t.literal,t.placeholder))}function ft(e,t){let n=e.recordedFillLiterals;if(!n||n.size===0)return t;let r=ke(t.result,n),i=(t.targetEvidenceMode??`action`)===`landmark`?pt(t.targetEvidence,n):E(t.targetEvidence,n),a=t.targetEvidences?{source:E(t.targetEvidences.source,n),destination:E(t.targetEvidences.destination,n)}:t.targetEvidences;return{...t,result:r,targetEvidence:i,targetEvidences:a}}function pt(e,t){return e&&(Ce(e,t)?void 0:e)}function E(e,t){return!e||!Ce(e,t)?e:{...Te(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 ht=new Set([`snapshot`,`get`,`is`,`find`]);function gt(e){return e.internal?.replayPlanStep!==!0&&ht.has(e.command)}function _t(e,t){return!t.interactiveObservation||T(e)===void 0?!1:t.flags?.record!==!0}const vt=Le();function yt(e){if(!e)return{};let t={};for(let n of vt){let r=e[n];r!==void 0&&(t[n]=r)}return t}function D(e){return S.join(e,`idle-expiry.json`)}function bt(e){let t;try{t=C.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`&&!(!xt(n.expiredAtMs)||!xt(n.idleExpiryMs))&&(n.deviceKey===void 0||typeof n.deviceKey==`string`))return n}function xt(e){return typeof e==`number`&&Number.isFinite(e)&&e>=0}function St(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())ne({command:n.command,positionals:n.positionals,flags:n.flags})===`mutates-app`&&(r=e);if(!t.slice(r+1).some(Ot))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 Ct(t){for(let n of t){if(wt(n)){Tt(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`&&ne(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||!l(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 wt(e){return Et(e)!==void 0}function Tt(t){let n=Et(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||!l(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 Et(e){return e.command===`gesture`?me(e.positionals):void 0}function Dt(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 Ot(e){if(e.command!==`wait`)return!1;let t=ee(e.positionals);return t?.kind!==`selector`||!l(t.selectorExpression)?!1:e.targetEvidence?.verification===`verified`}function kt(e){if(e.command===`get`)return e.positionals[1];if(se(e.command)||e.command===`fill`){let[t,n]=e.positionals;return t!==void 0&&n!==void 0&&At(t)&&At(n)?void 0:t}}function At(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`||!be(t):!1}function Mt(e){return!Pe(e.scriptPublication??m)||jt(e)}var Nt=class{sessionsDir;constructor(e){this.sessionsDir=e}write(e,t){let n=it(e),r=t?.publication===`active`,i;try{if(Mt(e))return{written:!1};let a=Pt(e,{appendCompleteSentinel:n,activePublication:r});i=this.resolveScriptPath(e);let o=S.dirname(i);return C.existsSync(o)||C.mkdirSync(o,{recursive:!0}),Lt({scriptPath:i,script:a.script,force:t?.force}),n&&(e.scriptPublication=Fe(e.scriptPublication??m)),{written:!0,path:i,actionCount:a.actionCount}}catch(t){return Ft({session:e,error:t,scriptPath:i,repairArmed:n,activePublication:r})}}resolveScriptPath(e){let t=Ee(e.scriptPublication??m);if(t)return x(t);let n=b(e.name),r=new Date(e.createdAt).toISOString().replaceAll(/[:.]/g,`-`);return S.join(this.sessionsDir,`${n}-${r}.ad`)}};function Pt(e,t){let n=Rt(e,{strictPortableRefs:t.activePublication});return t.activePublication&&St(n),{script:Jt(e,n,t.appendCompleteSentinel),actionCount:n.length}}function Ft(t){let{session:n,error:r,scriptPath:i,repairArmed:a,activePublication:o}=t;if(y({level:`warn`,phase:`session_script_write_failed`,data:{session:n.name,path:i,error:r instanceof Error?r.message:String(r)}}),a)return{written:!1,error:It(r,i)};if(o)return{written:!1,error:Dt(r,i)};if(r instanceof e)throw r;return{written:!1}}function It(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 Lt(t){let{scriptPath:n,script:r,force:i}=t;try{He({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 Rt(e,t={}){let n=T(e),r=n!==void 0,i=e.actions.slice(n??0),a=[];for(let n of i){if(n.command===`snapshot`)continue;let i=Vt(n);if(i){a.push(i);continue}(r||t.strictPortableRefs)&&zt(n);let o=qt(e,n);o&&a.push(o),a.push(n)}return t.strictPortableRefs&&Ct(a),a}function zt(t){let n=t.command===`gesture`?me(t.positionals??[]):void 0;if(n){Bt(n);return}if(!O(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 Bt(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 Vt(e){let t=Ht(e);if(!(!t||!O(e.command)))return ce(e.command)||e.command===`hover`?{...e,positionals:[t]}:e.command===`longpress`?Wt(e,t):e.command===`fill`?Ut(e,t):Gt(e,t)}function Ht(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 O(e){return se(e)||e===`fill`||e===`get`}function Ut(e,t){let n=p(e);return n.length>0?{...e,positionals:[t,n]}:void 0}function Wt(e,t){let n=typeof e.result?.durationMs==`number`?String(e.result.durationMs):Kt(e.positionals??[]);return{...e,positionals:n?[t,n]:[t]}}function Gt(e,t){let n=e.positionals?.[0];return n===`text`||n===`attrs`?{...e,positionals:[n,t]}:void 0}function Kt(e){let t=e.at(-1);if(!(e.length<=1||t===void 0||t.trim()===``))return Number.isFinite(Number(t))?t:void 0}function qt(e,t){if(!O(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 Jt(e,t,n){let i=[],a=e.device.kind?` kind=${e.device.kind}`:``;i.push(`context platform=${r(e.device)} device=${de(e.device.name)}${a} theme=unknown`);for(let e of t)e.flags?.noRecord||(i.push(...Ze(e)),i.push(Yt(e)));return n&&i.push(`# agent-device:heal-complete`),`${i.join(`
2
+ `)}\n`}function Yt(e){return Xt([e.command],e)||Xe(e)}function Xt(e,t){if(ce(t.command))return Zt(e,t);if(t.command===`fill`)return Qt(e,t);if(t.command===`get`)return $t(e,t)}function Zt(e,t){let n=t.positionals?.[0];if(n){if(n.startsWith(`@`))return e.push(d(u(n))),k(e,t),f(e,t),e.join(` `);if(t.positionals.length===1)return e.push(d(n)),f(e,t),e.join(` `)}}function Qt(e,t){let n=t.positionals?.[0];if(!n?.startsWith(`@`))return;e.push(d(u(n))),k(e,t);let r=t.positionals.slice(1).join(` `);return t.positionals.length>1&&e.push(d(r)),f(e,t),e.join(` `)}function $t(e,t){let n=t.positionals?.[0],r=t.positionals?.[1];if(!(!n||!r))return e.push(d(n)),e.push(d(u(r))),r.startsWith(`@`)&&k(e,t),e.join(` `)}function k(e,t){let n=t.result?.refLabel;typeof n==`string`&&n.trim().length>0&&e.push(d(n))}const en=[`id`,`deviceId`,`device_id`,`serial`,`udid`,`device_udid`,`identifier`],tn={ios:`iOS`,ipados:`iPadOS`,tvos:`tvOS`,watchos:`watchOS`,visionos:`visionOS`,macos:`macOS`,apple:`Apple`,android:`Android`,linux:`Linux`,web:`Web`};function nn(e,t){let n=t??{};switch(e.command){case h.devices:return rn(n.devices);case h.apps:return an(n.apps,e.flags?.appsFilter);case h.boot:return on(`Booted`,n,!0);case h.shutdown:return on(`Shut down`,n,!1);case h.install:return sn(`Installed`,n);case h.reinstall:return sn(`Reinstalled`,n);case h.screenshot:return cn(e,n);default:return{}}}function rn(e){if(!Array.isArray(e))return{};let t=e.flatMap(e=>{let t=un(e);return t?[t]:[]}),n=t.slice(0,5),r=Math.max(0,t.length-n.length),i=t.slice(0,3);return{summary:yn(`Found ${t.length} ${bn(`device`,t.length)}`,i.map(e=>_n(e,!0)),Math.max(0,t.length-i.length)),details:{deviceCount:t.length,devices:n,...r>0?{omittedDeviceCount:r}:{}}}}function an(e,t){if(!Array.isArray(e))return{};let n=e.flatMap(e=>{let t=M(e);return t?[t]:[]}),r=n.slice(0,5),i=Math.max(0,n.length-r.length),a=n.slice(0,3);return{summary:yn(`Found ${n.length} ${bn(`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 on(e,t,n){let r=dn(t);if(!r)return{};let i={device:r,...gn(t),booted:n};return{summary:`${e} ${_n(i,!1)}`,details:i}}function sn(e,t){let n=M(t.appName),r=M(t.bundleId),i=A(t,[`packageName`,`package`]),a=M(t.platform),o=M(t.launchTarget),s=A(t,[`bundleId`,`packageName`,`package`,`appId`,`launchTarget`]),c=vn(n,s);if(!c)return{};let l={};return j(l,`appName`,n),j(l,`bundleId`,r),j(l,`packageName`,i),j(l,`platform`,a),o!==s&&j(l,`launchTarget`,o),{summary:`${e} ${c}`,details:l}}function cn(e,t){let n=ln(e,t);return n?{details:{requestedFileName:n}}:{}}function ln(e,t){let n=R(e.meta?.clientArtifactPaths?.path)??R(t.path);if(n)return L(n)}function un(e){if(!n(e))return;let t=dn(e);if(t)return{name:t,...gn(e)}}function dn(e){let t=A(e,[`name`,`deviceName`,`device`]);return!t||!fn(e,t)?t:mn(e)}function fn(e,t){let n=pn(t);return en.some(t=>{let r=M(e[t]);return r!==void 0&&pn(r)===n})}function pn(e){return e.toLowerCase()}function mn(e){let t=M(e.appleOs),n=M(e.platform),r=M(e.kind),i=hn(t,n);return i&&(r===`simulator`||r===`emulator`)?`${i} ${r}`:i?`${i} device`:r===`simulator`?`Simulator`:r===`emulator`?`Emulator`:`Unnamed device`}function hn(e,t){let n=e??t;if(!(!n||!Object.hasOwn(tn,n)))return tn[n]}function gn(e){let t=M(e.platform),n=M(e.appleOs),r=M(e.kind),i=M(e.target);return{...t?{platform:t}:{},...n?{appleOs:n}:{},...r?{kind:r}:{},...i?{target:i}:{},...typeof e.booted==`boolean`?{booted:e.booted}:{}}}function _n(e,t){let n=M(e.name)??M(e.device)??`device`,r=M(e.platform),i=M(e.appleOs),a=[r,i===r?void 0:i,M(e.kind),M(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 vn(e,t){return e&&t&&e!==t?`${e} (${t})`:e??t}function A(e,t){for(let n of t){let t=M(e[n]);if(t)return t}}function j(e,t,n){n&&(e[t]=n)}function yn(e,t,n){let r=[...t,...n>0?[`+${n} more`]:[]];return r.length>0?`${e}: ${r.join(`, `)}`:e}function bn(e,t){return t===1?e:`${e}s`}function M(e){let t=R(e);if(!t)return;let n=t.trim(),r=Array.from(n);return r.length<=120?n:`${r.slice(0,119).join(``)}…`}function N(e){return M(e)}function P(e){return typeof e==`boolean`?e:void 0}function F(e,t){let n=N(e);return n&&t.includes(n)?n:void 0}function I(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function L(e){let t=R(e);return t?M(t.split(/[\\/]/).at(-1)):void 0}function R(e){if(typeof e==`string`)return e.trim().length>0?e:void 0}function z(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}const xn=[`up`,`down`,`left`,`right`],Sn=[`top`,`bottom`];function Cn(e){return`${e.command===h.reinstall?`Reinstalled`:`Installed`} ${Dn(e.result??{})??`app`}`}function wn(e){let t=e.result??{};switch(e.command){case h.scroll:return kn(t);case h.screenshot:return Mn(t);case h.home:return`Went home`;case h.back:return Pn(t);case h.appSwitcher:return`Opened app switcher`;case h.actionButton:return`Pressed Action Button`;case h.orientation:return In(t);case h.fold:return Fn(t);case h.viewport:return Ln(t);case h.clipboard:return Rn(t);case h.keyboard:return zn(t);case h.tvRemote:return Hn(t);case h.gesture:return Un(t);case h.swipe:return Wn(t);case h.trace:return Kn(`trace`,e);case h.record:return Kn(`recording`,e);default:return}}function Tn(e){let t=e.result??{};switch(e.command){case h.scroll:return I({direction:F(t.direction,xn),edge:F(t.edge,Sn),passes:z(t.passes),amount:z(t.amount),pixels:z(t.pixels),durationMs:z(t.durationMs),x1:z(t.x1),y1:z(t.y1),x2:z(t.x2),y2:z(t.y2)});case h.screenshot:return I({requestedFileName:Nn(t)});case h.back:return I({mode:F(t.mode,g)});case h.orientation:return I({orientation:F(t.orientation,Ve)});case h.fold:return I({pose:F(t.pose,_)});case h.viewport:return I({width:z(t.width),height:z(t.height)});case h.clipboard:return I({action:F(t.action,[`read`,`write`])});case h.keyboard:return Vn(t);case h.tvRemote:return I({button:F(t.button,Ue),durationMs:z(t.durationMs)});case h.gesture:case h.swipe:return Gn(t);case h.trace:case h.record:return I({action:F(t.action,[`start`,`stop`]),fileName:Jn(e),showTouches:P(t.showTouches)});default:return{}}}function En(e,t){if(e.command!==h.screenshot)return t;let n=ln(e,t);return n?{...t,requestedFileName:n}:t}function Dn(e){let t=N(e.appName),n=Yn(e,[`bundleId`,`packageName`,`appBundleId`,`launchTarget`]);return t&&n&&t!==n?`${t} (${n})`:t??n??On(e)}function On(e){let t=N(e.app);return t&&!t.includes(`/`)&&!t.includes(`\\`)?t:void 0}function kn(e){let t=F(e.direction,xn),n=F(e.edge,Sn),r=z(e.passes);return n?An(n,r):t?jn(t,e):`Scrolled`}function An(e,t){return t===0?`Already at ${e}`:t===void 0?`Scrolled to ${e}`:`Scrolled to ${e} in ${t} ${t===1?`pass`:`passes`}`}function jn(e,t){let n=z(t.pixels);if(n!==void 0)return`Scrolled ${e} by ${n}px`;let r=z(t.amount);return r===void 0?`Scrolled ${e}`:`Scrolled ${e} by ${r}`}function Mn(e){let t=Nn(e);return t?`Captured screenshot ${t}`:`Captured screenshot`}function Nn(e){return L(e.requestedFileName)??L(e.path)}function Pn(e){return F(e.mode,g)===`system`?`Went back using system navigation`:`Went back`}function Fn(e){let t=F(e.pose,_);return t?`Folded to ${t}`:`Changed fold pose`}function In(e){let t=F(e.orientation,Ve);return t?P(e.confirmed)===!1?`Requested ${t} (unconfirmed)`:`Rotated to ${t}`:`Changed orientation`}function Ln(e){let t=z(e.width),n=z(e.height);return t!==void 0&&n!==void 0?`Set viewport to ${t}×${n}`:`Changed viewport`}function Rn(e){let t=F(e.action,[`read`,`write`]);return t===`read`?`Read clipboard`:t===`write`?`Updated clipboard`:`Used clipboard`}function zn(e){let t=R(e.action);if(!t||!qe(t))return`Used keyboard`;if(t===`dismiss`)return Bn(e);if(t===`enter`||t===`return`)return`Pressed keyboard return`;let n=P(e.visible);return n===void 0?`Inspected keyboard`:n?`Keyboard is visible`:`Keyboard is hidden`}function Bn(e){return P(e.dismissed)===!1?`Keyboard was already hidden`:`Dismissed keyboard`}function Vn(e){let t=R(e.action);return I({action:t&&qe(t)?t:void 0,platform:F(e.platform,[`ios`,`android`]),visible:P(e.visible),wasVisible:P(e.wasVisible),dismissed:P(e.dismissed),attempts:z(e.attempts),mechanism:F(e.mechanism,[`dismissKey`])})}function Hn(e){let t=F(e.button,Ue);return t?`Pressed TV remote ${t}`:`Used TV remote`}function Un(e){let t=F(e.kind,[`fling`,`pan`,`pinch`,`rotate`,`transform`]);return t?`Ran ${t} gesture`:`Ran gesture`}function Wn(e){let t=z(e.count);return t!==void 0&&t>1?`Swiped ${t} times`:`Swiped`}function Gn(e){return I({kind:F(e.kind,[`fling`,`pan`,`pinch`,`rotate`,`transform`]),durationMs:z(e.durationMs),pointerCount:z(e.pointerCount),x1:z(e.x1),y1:z(e.y1),x2:z(e.x2),y2:z(e.y2),count:z(e.count),pauseMs:z(e.pauseMs),pattern:F(e.pattern,[`one-way`,`ping-pong`]),scale:z(e.scale)})}function Kn(e,t){let n=qn(e,F(t.result?.action,[`start`,`stop`])),r=Jn(t);return r?`${n} ${r}`:n}function qn(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 Jn(e){let t=e.result??{};return L(t.requestedFileName)??L(t.outPath)??L(t.path)??L(e.positionals[1])}function Yn(e,t){for(let n of t){let t=N(e[n]);if(t)return t}}function Xn(e){switch(e.command){case h.open:return`Opened ${B(e)??`session`}`;case h.close:return`Closed ${N(e.result?.session)??`session`}`;case h.click:case h.press:return`Tapped ${B(e)??`target`}`;case h.longPress:return`Long pressed ${B(e)??`target`}`;case h.hover:return`Hovered ${B(e)??`target`}`;case h.fill:return`Filled ${B(e)??`target`}`;case h.type:return`Typed text`;case h.install:case h.reinstall:case Ie.installSource:return Cn(e);default:return wn(e)??`Ran ${e.command}`}}function Zn(e){return I({command:e.command,positionals:or(e),flags:vr(e),...Qn(e),...$n(e),...er(e),...Tn(e)})}function Qn(e){if(!tr(e.command))return{};let t=e.result??{};return I({ref:G(t),targetLabel:B(e),selectorChainLength:mr(t.selectorChain)?.length,x:z(t.x),y:z(t.y),x2:z(t.x2),y2:z(t.y2),durationMs:z(t.durationMs)})}function $n(e){if(!nr(e.command))return{};let t=e.result??{};return I({platform:F(t.platform,i),target:F(t.target,o),appName:N(t.appName),appBundleId:N(t.appBundleId),bundleId:N(t.bundleId),packageName:N(t.packageName),launchTarget:N(t.launchTarget)})}function er(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?{}:I({waitedMs:z(t.waitedMs),found:P(t.found)})}function tr(e){return e===h.click||e===h.press||e===h.longPress||e===h.hover||e===h.focus||e===h.fill}function nr(e){return e===h.open||e===h.install||e===h.reinstall||e===Ie.installSource}function B(e){let t=e.result??{};return rr(t)??ir(t)??ar(t)??fr(e.positionals[0])}function rr(e){let t=G(e);if(t)return t.startsWith(`@`)?t:`@${t}`}function ir(e){let t=z(e.x),n=z(e.y);if(t!==void 0&&n!==void 0)return`(${t}, ${n})`}function ar(e){return N(e.appName)??N(e.appBundleId)??N(e.bundleId)??N(e.packageName)}function or(e){if(e.positionals.length!==0)return e.command===h.type?[H(`text`)]:e.command===h.fill?sr(e):e.command===h.find?cr(e):e.command===h.clipboard?lr(e):e.command===h.push?ur(e,`app`,`payload`):e.command===h.triggerAppEvent?ur(e,`event`,`payload`):e.positionals.map(V)}function sr(e){let t=H(`text`),n=e.result??{},r=G(n);if(r)return[`@${r}`,t];if(N(n.selector))return[H(`target`),t];let i=z(n.x),a=z(n.y);return i!==void 0&&a!==void 0?[String(i),String(a),t]:[t]}function cr(e){let t=+!!pr(e.positionals[0]);if(e.positionals[t]===void 0)return;let n=t+1,r=[...t===1?[String(e.positionals[0])]:[],H(`query`)],i=e.positionals[n];return i?i===`fill`||i===`type`?[...r,i,H(`text`)]:[...r,...e.positionals.slice(n).map(dr)]:r}function lr(e){let t=e.positionals[0]?.toLowerCase();return t===`read`?[`read`]:t===`write`?[`write`,H(`text`)]:e.positionals.map(V)}function ur(e,t,n){let[r,i,...a]=e.positionals;return[...r?[H(t)]:[],...i?[H(n)]:[],...a.map(V)]}function dr(e){return e===`click`||e===`focus`||e===`exists`||e===`get`||e===`text`||e===`attrs`||e===`wait`?e:V(e)}function V(e){return fr(e)??H(`arg`)}function fr(e){if(!e)return;let t=e.trim();if(/^@[a-zA-Z0-9:_-]+$/.test(t))return t}function H(e){return`<${e}>`}function pr(e){return e===`text`||e===`label`||e===`value`||e===`role`||e===`id`}function mr(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?e:void 0}const hr={enums:[{source:`platform`,values:a},{source:`target`,values:o}]},gr={booleans:[{source:`settle`}],numbers:[{source:`settleQuietMs`}]},_r={[h.open]:{booleans:[{source:`relaunch`},{source:`testIme`}],enums:[{source:`surface`,values:Re}]},[h.click]:U(),[h.press]:U(),[h.longPress]:U(),[h.hover]:U(),[h.fill]:br(),[h.type]:br(),[h.scroll]:{numbers:[{source:`pixels`},{source:`durationMs`}]},[h.gesture]:xr(),[h.swipe]:xr(),[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:re}]},[h.apps]:{enums:[{source:`appsFilter`,output:`filter`,values:[`user-installed`,`all`]}]},[h.boot]:{booleans:[{source:`headless`}]},[h.close]:{booleans:[{source:`shutdown`}]}};function vr(e){let t=e.flags??{},n={},r=Object.hasOwn(_r,e.command)?_r[e.command]:void 0;return W(n,t,hr),W(n,t,r),W(n,t,yr(e.command)),Object.keys(n).length>0?n:void 0}function yr(e){return te(e)?gr:void 0}function U(){return{booleans:[{source:`doubleTap`}],numbers:[{source:`count`},{source:`intervalMs`},{source:`holdMs`},{source:`jitterPx`}],enums:[{source:`clickButton`,values:Be}]}}function br(){return{numbers:[{source:`delayMs`}]}}function xr(){return{numbers:[{source:`pointerCount`},{source:`count`},{source:`pauseMs`}],enums:[{source:`pattern`,values:ie}]}}function W(e,t,n){n&&(Sr(e,t,n.booleans??[]),Cr(e,t,n.numbers??[]),wr(e,t,n.enums??[]))}function Sr(e,t,n){for(let r of n)Tr(e,r.output??r.source,t[r.source])}function Cr(e,t,n){for(let r of n)Er(e,r.output??r.source,t[r.source])}function wr(e,t,n){for(let r of n)Dr(e,r.output??r.source,t[r.source],r.values)}function G(e){let t=N(e.ref);if(!t)return;let n=t.startsWith(`@`)?t.slice(1):t;return/^[a-zA-Z0-9:_-]+$/.test(n)?n:void 0}function Tr(e,t,n){typeof n==`boolean`&&(e[t]=n)}function Er(e,t,n){let r=z(n);r!==void 0&&(e[t]=r)}function Dr(e,t,n,r){let i=F(n,r);i!==void 0&&(e[t]=i)}const Or=65536;function kr(e){return Je(`sha256`).update(e,`utf8`).digest(`hex`).slice(0,32)}function K(e,t){let n=Nr(e);if(n===void 0)return!1;try{let e=jr(t),r=Buffer.allocUnsafe(Or),i=0;do if(i=C.readSync(n,r,0,r.length,null),!e.push(r.subarray(0,i)))return!0;while(i>0);return e.end(),!0}finally{C.closeSync(n)}}async function Ar(e){let t=await Pr(e);if(t===void 0)return{lineCount:0,firstLineDigest:void 0};let n={lineCount:0,firstLineDigest:void 0};try{let e=jr(e=>{n.lineCount===0&&(n.firstLineDigest=kr(e)),n.lineCount+=1}),r=Buffer.allocUnsafe(Or);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 q(e){let t;return K(e,e=>(t=kr(e),!1)),t}function jr(e){let t=new Ye(`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
3
  `);t!==-1;t=a.indexOf(`
4
- `,o)){if(kr(a.slice(o,t),e)===!1)return r=!0,!1;o=t+1}return n=a.slice(o),!0},end(){r||kr(`${n}${t.end()}`,e)}}}function kr(e,t){let n=e.endsWith(`\r`)?e.slice(0,-1):e;if(n.trim().length!==0)return t(n)}function Ar(e){try{return w.openSync(e,`r`)}catch(e){if(e.code===`ENOENT`)return;throw e}}async function jr(e){try{return await w.promises.open(e,`r`)}catch(e){if(e.code===`ENOENT`)return;throw e}}const Mr=5242880;function Nr(e=process.env){let t=e.AGENT_DEVICE_EVENT_LOG_MAX_BYTES?.trim();if(t===void 0||!/^\d+$/.test(t))return Mr;let n=Number(t);return Number.isSafeInteger(n)&&n>0?n:Mr}function J(e){return`${e}.1`}function Y(e){return`${e}.window.json`}function Pr(e){let t;for(let n=0;n<3;n+=1){let n=Z(e);try{let t=Fr(e);if(Z(e)===n)return t}catch(r){if(t=r,Z(e)===n)throw r}}throw t??X(e,`the window did not settle while reading`)}function Fr(e){let t=J(e),n=Hr(e);if(n===`unverifiable`)throw X(e,`window file is invalid`);if(n===void 0)return Ir(e,t);let r=n.at(-1);if(!r)throw X(e,`window file records no generation`);let i=Gr(e),a=Lr(e,r),o=[],s=Rr({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 Ir(e,t){if(q(t)!==void 0)throw X(e,`a rotated event log exists with no window record`);return{files:Gr(e)?[{path:e,firstLineIndex:0}]:[],earliestCursor:0}}function Lr(e,t){let n=q(e);return n!==void 0&&n===t.firstLineDigest?t.firstLineIndex:t.firstLineIndex+t.lineCount}function Rr(e){let{eventLogPath:t,rotatedPath:n,sidecar:r,activeStart:i,activeExists:a}=e,o=q(n);if(o===void 0)return;let s=r.find(e=>e.firstLineDigest===o);if(!s)throw X(t,`the rotated event log matches no window record`);let c=Vr(n);if(c!==s.lineCount)throw X(t,`the rotated event log holds ${c} lines, the window recorded ${s.lineCount}`);if(a&&s.firstLineIndex+s.lineCount!==i)throw X(t,`retained event log generations are not contiguous`);return s.firstLineIndex}async function zr(e,t){let n=Kr(e);if(!n||n.size<t)return!1;let r=Hr(e);if(r===`unverifiable`)return await w.promises.rename(e,J(e)),!0;let i=await Dr(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 Wr(e,(a===n?t:[...t,a]).slice(-2))}return await w.promises.rename(e,J(e)),!0}function Br(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 X(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}, ${J(t)}, and ${Y(t)} to restart the timeline, or read the files directly.`})}function Vr(e){let t=0;return K(e,()=>{t+=1}),t}function Z(e){return[Q(Y(e)),Q(e),Q(J(e))].join(`|`)}function Q(e){try{let t=w.lstatSync(e);return`${t.ino}:${t.size}:${t.mtimeMs}`}catch{return`absent`}}function Hr(e){let t;try{t=w.readFileSync(Y(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(Ur);return i.every(e=>e!==void 0)?i:`unverifiable`}catch{return`unverifiable`}}function Ur(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 Wr(e,t){let n=Y(e),r=`${n}.${process.pid}.tmp`;await w.promises.writeFile(r,JSON.stringify({version:2,generations:t}),`utf8`),await w.promises.rename(r,n)}function Gr(e){return Kr(e)!==void 0}function Kr(t){try{let n=w.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 $=new Map,qr=new Set;function Jr(e){return C.join(e,`events.ndjson`)}function Yr(e){return e.command!==h.events}function Xr(e,n,r){let i=t({version:1,ts:r.ts??new Date().toISOString(),session:n,...r});Qr(e,`${JSON.stringify(i)}\n`)}async function Zr(e){await(e?$.get(e):Promise.all($.values()))}function Qr(e,t){let n=($.get(e)??Promise.resolve()).catch(()=>void 0).then(async()=>{await $r(e),await zr(e,Nr()),await w.promises.appendFile(e,t,`utf8`)}).catch(t=>{b({level:`warn`,phase:`session_event_log_write_failed`,data:{path:e,error:t instanceof Error?t.message:String(t)}})}).finally(()=>{$.get(e)===n&&$.delete(e)});$.set(e,n)}async function $r(e){let t=C.dirname(e);if(!qr.has(t))try{await w.promises.mkdir(t,{recursive:!0}),qr.add(t)}catch(t){throw b({level:`warn`,phase:`session_event_log_dir_failed`,data:{path:e,error:t instanceof Error?t.message:String(t)}}),t}}function ei(e,t,n){Xr(e,t,{kind:`action.recorded`,requestId:y().requestId,command:n.command,summary:qn(n),details:Jn(n)})}function ti(e){let{req:t}=e;return{kind:`request.started`,requestId:t.meta?.requestId??y().requestId,command:t.command,summary:`Started ${t.command}`}}function ni(e){let{req:t,response:n,durationMs:r}=e;if(n.ok){let e=$t(t,n.data);return{kind:`request.finished`,requestId:t.meta?.requestId??y().requestId,command:t.command,status:`ok`,summary:e.summary??`Finished ${t.command}`,details:{durationMs:r,...e.details}}}return{kind:`request.finished`,requestId:t.meta?.requestId??y().requestId,command:t.command,status:`error`,summary:`Failed ${t.command}: ${n.error.code}`,details:{durationMs:r,code:n.error.code,diagnosticId:n.error.diagnosticId}}}function ri(e,t={}){let n=ai(t.cursor),r=oi(t.limit),i=Pr(e);Br(n,i.earliestCursor);let a=ii(i.files,n,r),o=a.lines.flatMap(e=>{let t=si(e);return t?[t]:[]});return{path:e,cursor:String(n),limit:r,events:o,...a.nextCursor===void 0?{}:{nextCursor:String(a.nextCursor)}}}function ii(e,t,n){let r=[],i;for(let a of e){let e=a.firstLineIndex;if(K(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 ai(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 oi(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 si(e){try{let t=ci(JSON.parse(e));return t?li(t):void 0}catch{return}}function ci(e){if(n(e)&&e.version===1&&typeof e.ts==`string`&&typeof e.session==`string`&&ui(e.kind))return e}function li(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}:{},...di(e.status)?{status:e.status}:{},...typeof e.summary==`string`?{summary:e.summary}:{},...t?{details:t}:{}}}function ui(e){return e===`request.started`||e===`request.finished`||e===`action.recorded`}function di(e){return e===`ok`||e===`error`}const fi=36e5;var pi=class{sessions=new Map;runtimeHints=new Map;sessionsDir;scriptWriter;constructor(e){this.sessionsDir=e,this.scriptWriter=new At(e)}get(e){return this.sessions.get(e)}set(e,t){this.sessions.set(e,t)}delete(e){return this.runtimeHints.delete(e),this.sessions.delete(e)}values(){return this.sessions.values()}toArray(){return Array.from(this.sessions.values())}lookup(e){let t=this.sessions.get(e);return t?{address:e,session:t}:void 0}findByDevice(e){for(let[t,n]of this.sessions)if(n.device.id===e)return{address:t,session:n}}listRefs(){return Array.from(this.sessions,([e,t])=>({address:e,session:t}))}getRuntimeHints(e){return this.runtimeHints.get(e)}setRuntimeHints(e,t){this.runtimeHints.set(e,t)}clearRuntimeHints(e){return this.runtimeHints.delete(e)}recordAction(e,t){let n=ot(e,t);if(n){let t=this.resolveStoredSessionName(e);ei(this.resolveEventLogPath(t),t,n)}}recordEvent(e,t){Xr(this.resolveEventLogPath(e),e,t)}readEvents(e,t={}){return ri(this.resolveEventLogPath(e),t)}async flushEvents(e){await Zr(e?this.resolveEventLogPath(e):void 0)}writeSessionLog(e,t){let n=this.scriptWriter.write(e,t);return n.written&&b({level:`info`,phase:`session_script_written`,data:{session:e.name,path:n.path}}),n}finalizeRepairTeardown(e){this.recordRepairFinalizeCloseIfCommitting(e);let t=this.writeSessionLog(e,{force:De(e,void 0)});it(e)&&(!t.written&&t.error?this.writeRepairTombstone(e,fi,{code:String(t.error.code),message:t.error.message}):this.writeRepairTombstone(e))}recordRepairFinalizeCloseIfCommitting(e){let t=e.scriptPublication??m;be(t)&&this.recordAction(e,{command:`close`,positionals:[],flags:{},result:{session:e.name,...ze(`Closed: ${e.name}`)}})}writeRepairTombstone(e,t=fi,n){try{let r=this.resolveSessionDir(e.name);w.mkdirSync(r,{recursive:!0});let i={owner:e.name,reapedAt:Date.now(),expiresAt:Date.now()+t,...at(e)?{sourcePath:at(e)}:{},...n?{commitFailure:n}:{}};w.writeFileSync(this.repairTombstonePath(e.name),`${JSON.stringify(i)}\n`)}catch(t){b({level:`warn`,phase:`repair_tombstone_write_failed`,data:{session:e.name,error:t instanceof Error?t.message:String(t)}})}}readRepairTombstone(e){return Ue(this.repairTombstonePath(e))}clearRepairTombstone(e){try{w.rmSync(this.repairTombstonePath(e),{force:!0})}catch{}}repairTombstonePath(e){return We(this.resolveSessionDir(e))}defaultTracePath(e){let t=x(e.name),n=new Date().toISOString().replaceAll(/[:.]/g,`-`);return C.join(this.sessionsDir,`${t}-${n}.trace.log`)}resolveSessionDir(t){if(!Ge(t))throw new e(`INVALID_ARGS`,`Invalid session name ${JSON.stringify(t)}: a session name cannot be empty, ".", or "..".`);return C.join(this.sessionsDir,x(t))}resolveDaemonStateDir(){return C.dirname(this.sessionsDir)}ensureSessionDir(e){let t=this.resolveSessionDir(e);return w.mkdirSync(t,{recursive:!0}),t}resolveAppLogPath(e){return C.join(this.resolveSessionDir(e),`app.log`)}resolveAppLogPidPath(e){return C.join(this.resolveSessionDir(e),`app-log.pid`)}resolveEventLogPath(e){return Jr(this.resolveSessionDir(e))}static expandHome(e,t){return S(e,t)}resolveStoredSessionName(e){for(let[t,n]of this.sessions)if(n===e)return t;return e.name}};export{Qe as _,rr as a,st as c,nt as d,rt as f,E as g,et as h,Yr as i,tt as l,$e as m,ni as n,Cn as o,it as p,ti as r,ht as s,pi as t,Ze as u};
4
+ `,o)){if(Mr(a.slice(o,t),e)===!1)return r=!0,!1;o=t+1}return n=a.slice(o),!0},end(){r||Mr(`${n}${t.end()}`,e)}}}function Mr(e,t){let n=e.endsWith(`\r`)?e.slice(0,-1):e;if(n.trim().length!==0)return t(n)}function Nr(e){try{return C.openSync(e,`r`)}catch(e){if(e.code===`ENOENT`)return;throw e}}async function Pr(e){try{return await C.promises.open(e,`r`)}catch(e){if(e.code===`ENOENT`)return;throw e}}const Fr=5242880;function Ir(e=process.env){let t=e.AGENT_DEVICE_EVENT_LOG_MAX_BYTES?.trim();if(t===void 0||!/^\d+$/.test(t))return Fr;let n=Number(t);return Number.isSafeInteger(n)&&n>0?n:Fr}function J(e){return`${e}.1`}function Y(e){return`${e}.window.json`}function Lr(e){let t;for(let n=0;n<3;n+=1){let n=Z(e);try{let t=Rr(e);if(Z(e)===n)return t}catch(r){if(t=r,Z(e)===n)throw r}}throw t??X(e,`the window did not settle while reading`)}function Rr(e){let t=J(e),n=Gr(e);if(n===`unverifiable`)throw X(e,`window file is invalid`);if(n===void 0)return zr(e,t);let r=n.at(-1);if(!r)throw X(e,`window file records no generation`);let i=Jr(e),a=Br(e,r),o=[],s=Vr({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 zr(e,t){if(q(t)!==void 0)throw X(e,`a rotated event log exists with no window record`);return{files:Jr(e)?[{path:e,firstLineIndex:0}]:[],earliestCursor:0}}function Br(e,t){let n=q(e);return n!==void 0&&n===t.firstLineDigest?t.firstLineIndex:t.firstLineIndex+t.lineCount}function Vr(e){let{eventLogPath:t,rotatedPath:n,sidecar:r,activeStart:i,activeExists:a}=e,o=q(n);if(o===void 0)return;let s=r.find(e=>e.firstLineDigest===o);if(!s)throw X(t,`the rotated event log matches no window record`);let c=Wr(n);if(c!==s.lineCount)throw X(t,`the rotated event log holds ${c} lines, the window recorded ${s.lineCount}`);if(a&&s.firstLineIndex+s.lineCount!==i)throw X(t,`retained event log generations are not contiguous`);return s.firstLineIndex}async function Hr(e,t){let n=Yr(e);if(!n||n.size<t)return!1;let r=Gr(e);if(r===`unverifiable`)return await C.promises.rename(e,J(e)),!0;let i=await Ar(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 qr(e,(a===n?t:[...t,a]).slice(-2))}return await C.promises.rename(e,J(e)),!0}function Ur(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 X(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}, ${J(t)}, and ${Y(t)} to restart the timeline, or read the files directly.`})}function Wr(e){let t=0;return K(e,()=>{t+=1}),t}function Z(e){return[Q(Y(e)),Q(e),Q(J(e))].join(`|`)}function Q(e){try{let t=C.lstatSync(e);return`${t.ino}:${t.size}:${t.mtimeMs}`}catch{return`absent`}}function Gr(e){let t;try{t=C.readFileSync(Y(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(Kr);return i.every(e=>e!==void 0)?i:`unverifiable`}catch{return`unverifiable`}}function Kr(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 qr(e,t){let n=Y(e),r=`${n}.${process.pid}.tmp`;await C.promises.writeFile(r,JSON.stringify({version:2,generations:t}),`utf8`),await C.promises.rename(r,n)}function Jr(e){return Yr(e)!==void 0}function Yr(t){try{let n=C.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 $=new Map,Xr=new Set;function Zr(e){return S.join(e,`events.ndjson`)}function Qr(e){return e.command!==h.events}function $r(e,n,r){let i=t({version:1,ts:r.ts??new Date().toISOString(),session:n,...r});ti(e,`${JSON.stringify(i)}\n`)}async function ei(e){await(e?$.get(e):Promise.all($.values()))}function ti(e,t){let n=($.get(e)??Promise.resolve()).catch(()=>void 0).then(async()=>{await ni(e),await Hr(e,Ir()),await C.promises.appendFile(e,t,`utf8`)}).catch(t=>{y({level:`warn`,phase:`session_event_log_write_failed`,data:{path:e,error:t instanceof Error?t.message:String(t)}})}).finally(()=>{$.get(e)===n&&$.delete(e)});$.set(e,n)}async function ni(e){let t=S.dirname(e);if(!Xr.has(t))try{await C.promises.mkdir(t,{recursive:!0}),Xr.add(t)}catch(t){throw y({level:`warn`,phase:`session_event_log_dir_failed`,data:{path:e,error:t instanceof Error?t.message:String(t)}}),t}}function ri(e,t,n){$r(e,t,{kind:`action.recorded`,requestId:v().requestId,command:n.command,summary:Xn(n),details:Zn(n)})}function ii(e){let{req:t}=e;return{kind:`request.started`,requestId:t.meta?.requestId??v().requestId,command:t.command,summary:`Started ${t.command}`}}function ai(e){let{req:t,response:n,durationMs:r}=e;if(n.ok){let e=nn(t,n.data);return{kind:`request.finished`,requestId:t.meta?.requestId??v().requestId,command:t.command,status:`ok`,summary:e.summary??`Finished ${t.command}`,details:{durationMs:r,...e.details}}}return{kind:`request.finished`,requestId:t.meta?.requestId??v().requestId,command:t.command,status:`error`,summary:`Failed ${t.command}: ${n.error.code}`,details:{durationMs:r,code:n.error.code,diagnosticId:n.error.diagnosticId}}}function oi(e,t={}){let n=ci(t.cursor),r=li(t.limit),i=Lr(e);Ur(n,i.earliestCursor);let a=si(i.files,n,r),o=a.lines.flatMap(e=>{let t=ui(e);return t?[t]:[]});return{path:e,cursor:String(n),limit:r,events:o,...a.nextCursor===void 0?{}:{nextCursor:String(a.nextCursor)}}}function si(e,t,n){let r=[],i;for(let a of e){let e=a.firstLineIndex;if(K(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 ci(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 li(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 ui(e){try{let t=di(JSON.parse(e));return t?fi(t):void 0}catch{return}}function di(e){if(n(e)&&e.version===1&&typeof e.ts==`string`&&typeof e.session==`string`&&pi(e.kind))return e}function fi(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}:{},...mi(e.status)?{status:e.status}:{},...typeof e.summary==`string`?{summary:e.summary}:{},...t?{details:t}:{}}}function pi(e){return e===`request.started`||e===`request.finished`||e===`action.recorded`}function mi(e){return e===`ok`||e===`error`}const hi=36e5;var gi=class{sessions=new Map;runtimeHints=new Map;sessionsDir;scriptWriter;constructor(e){this.sessionsDir=e,this.scriptWriter=new Nt(e)}get(e){return this.sessions.get(e)}set(e,t){let n=this.sessions.has(e);this.sessions.set(e,t),n||this.clearIdleExpiryTombstone(e)}delete(e){return this.runtimeHints.delete(e),this.sessions.delete(e)}values(){return this.sessions.values()}toArray(){return Array.from(this.sessions.values())}lookup(e){let t=this.sessions.get(e);return t?{address:e,session:t}:void 0}findByDevice(e){for(let[t,n]of this.sessions)if(n.device.id===e)return{address:t,session:n}}listRefs(){return Array.from(this.sessions,([e,t])=>({address:e,session:t}))}getRuntimeHints(e){return this.runtimeHints.get(e)}setRuntimeHints(e,t){this.runtimeHints.set(e,t)}clearRuntimeHints(e){return this.runtimeHints.delete(e)}recordAction(e,t){let n=st(e,t);if(n){let t=this.resolveStoredSessionName(e);ri(this.resolveEventLogPath(t),t,n)}}recordEvent(e,t){$r(this.resolveEventLogPath(e),e,t)}readEvents(e,t={}){return oi(this.resolveEventLogPath(e),t)}async flushEvents(e){await ei(e?this.resolveEventLogPath(e):void 0)}writeSessionLog(e,t){let n=this.scriptWriter.write(e,t);return n.written&&y({level:`info`,phase:`session_script_written`,data:{session:e.name,path:n.path}}),n}finalizeRepairTeardown(e){this.recordRepairFinalizeCloseIfCommitting(e);let t=this.writeSessionLog(e,{force:De(e,void 0)});at(e)&&(!t.written&&t.error?this.writeRepairTombstone(e,hi,{code:String(t.error.code),message:t.error.message}):this.writeRepairTombstone(e))}recordRepairFinalizeCloseIfCommitting(e){let t=e.scriptPublication??m;be(t)&&this.recordAction(e,{command:`close`,positionals:[],flags:{},result:{session:e.name,...ze(`Closed: ${e.name}`)}})}writeRepairTombstone(e,t=hi,n){try{let r=this.resolveSessionDir(e.name);C.mkdirSync(r,{recursive:!0});let i={owner:e.name,reapedAt:Date.now(),expiresAt:Date.now()+t,...ot(e)?{sourcePath:ot(e)}:{},...n?{commitFailure:n}:{}};C.writeFileSync(this.repairTombstonePath(e.name),`${JSON.stringify(i)}\n`)}catch(t){y({level:`warn`,phase:`repair_tombstone_write_failed`,data:{session:e.name,error:t instanceof Error?t.message:String(t)}})}}readRepairTombstone(e){return We(this.repairTombstonePath(e))}clearRepairTombstone(e){try{C.rmSync(this.repairTombstonePath(e),{force:!0})}catch{}}noteSessionActivity(e,t=Date.now()){let n=this.sessions.get(e);n&&(n.lastActivityAtMs=t)}writeIdleExpiryTombstone(e,t){try{C.mkdirSync(this.resolveSessionDir(e),{recursive:!0}),C.writeFileSync(D(this.resolveSessionDir(e)),`${JSON.stringify(t)}\n`)}catch(t){y({level:`warn`,phase:`idle_expiry_tombstone_write_failed`,data:{session:e,error:t instanceof Error?t.message:String(t)}})}}readIdleExpiryTombstone(e){if(!Ke(e))return;let t=bt(D(this.resolveSessionDir(e)));return t?.owner===e?t:void 0}clearIdleExpiryTombstone(e){try{C.rmSync(D(this.resolveSessionDir(e)),{force:!0})}catch(t){y({level:`warn`,phase:`idle_expiry_tombstone_clear_failed`,data:{session:e,error:t instanceof Error?t.message:String(t)}})}}repairTombstonePath(e){return Ge(this.resolveSessionDir(e))}defaultTracePath(e){let t=b(e.name),n=new Date().toISOString().replaceAll(/[:.]/g,`-`);return S.join(this.sessionsDir,`${t}-${n}.trace.log`)}resolveSessionDir(t){if(!Ke(t))throw new e(`INVALID_ARGS`,`Invalid session name ${JSON.stringify(t)}: a session name cannot be empty, ".", or "..".`);return S.join(this.sessionsDir,b(t))}resolveDaemonStateDir(){return S.dirname(this.sessionsDir)}ensureSessionDir(e){let t=this.resolveSessionDir(e);return C.mkdirSync(t,{recursive:!0}),t}resolveAppLogPath(e){return S.join(this.resolveSessionDir(e),`app.log`)}resolveAppLogPidPath(e){return S.join(this.resolveSessionDir(e),`app-log.pid`)}resolveEventLogPath(e){return Zr(this.resolveSessionDir(e))}static expandHome(e,t){return x(e,t)}resolveStoredSessionName(e){for(let[t,n]of this.sessions)if(n===e)return t;return e.name}};export{$e as _,or as a,ct as c,rt as d,it as f,T as g,tt as h,Qr as i,nt as l,et as m,ai as n,En as o,at as p,ii as r,gt as s,gi as t,Qe as u};