agent-device 0.21.8 → 0.21.9

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 (171) hide show
  1. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.8.apk → agent-device-android-ime-helper-0.21.9.apk} +0 -0
  2. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.9.apk.sha256 +1 -0
  3. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.8.manifest.json → agent-device-android-ime-helper-0.21.9.manifest.json} +4 -4
  4. package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.8.apk → agent-device-android-snapshot-helper-0.21.9.apk} +0 -0
  5. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.9.apk.sha256 +1 -0
  6. package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.8.manifest.json → agent-device-android-snapshot-helper-0.21.9.manifest.json} +6 -6
  7. package/apple/macos-helper/Sources/AgentDeviceMacOSDeviceHub/DeviceHubWindowInventory.swift +65 -0
  8. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/DeviceHubPose.swift +45 -140
  9. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/DeviceHubSidebar.swift +57 -0
  10. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/DeviceHubWindowDiscovery.swift +108 -0
  11. package/apple/macos-helper/Tests/AgentDeviceMacOSDeviceHubTests/DeviceHubWindowInventoryTests.swift +65 -0
  12. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/AgentDeviceRunnerUITests-Bridging-Header.h +1 -0
  13. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAppScreenCapture.swift +175 -0
  14. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.h +10 -2
  15. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.m +42 -15
  16. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +8 -0
  17. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +45 -22
  18. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Interaction.swift +39 -734
  19. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Keyboard.swift +20 -4
  20. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +63 -1
  21. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +13 -0
  22. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +25 -10
  23. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +5 -562
  24. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotAcquisition.swift +566 -0
  25. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedGesturePolicy.swift +5 -1
  26. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift +594 -0
  27. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerXCTestEventBridge.h +35 -1
  28. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerXCTestEventBridge.m +160 -0
  29. package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/RecordingExportSupport.swift +3 -0
  30. package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-frames.swift +203 -0
  31. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotCoordinateSpace.swift +5 -0
  32. package/dist/src/absence-observation-errors.js +1 -1
  33. package/dist/src/adapter.js +1 -1
  34. package/dist/src/agent-browser-lifecycle.js +1 -1
  35. package/dist/src/agent-browser-process-record.js +1 -1
  36. package/dist/src/agent-device-client.js +1 -1
  37. package/dist/src/alert-runtime.js +1 -1
  38. package/dist/src/android-adb.js +1 -1
  39. package/dist/src/android-input-ownership.js +1 -1
  40. package/dist/src/android.js +1 -1
  41. package/dist/src/app-launch.js +1 -1
  42. package/dist/src/app-log-runtime2.js +3 -3
  43. package/dist/src/app-resolution.js +2 -2
  44. package/dist/src/apple-runner-platform.js +1 -1
  45. package/dist/src/application-lifecycle-interaction.js +1 -1
  46. package/dist/src/artifact-paths.js +1 -0
  47. package/dist/src/back-mode.js +1 -1
  48. package/dist/src/cli-config.js +1 -1
  49. package/dist/src/cli-help.js +8 -7
  50. package/dist/src/cli.js +4 -4
  51. package/dist/src/client-types.d.ts +23 -5
  52. package/dist/src/command-tools.js +3 -3
  53. package/dist/src/connection-runtime.js +1 -1
  54. package/dist/src/device-claim-inspection.js +1 -1
  55. package/dist/src/device-claim-rule.js +2 -2
  56. package/dist/src/device-input-state.d.ts +1 -1
  57. package/dist/src/device-selection-resolver.js +1 -1
  58. package/dist/src/device.js +1 -1
  59. package/dist/src/device2.js +1 -1
  60. package/dist/src/dispatch-resolve.js +1 -1
  61. package/dist/src/doctor-facade.js +1 -1
  62. package/dist/src/durable-resource.js +1 -1
  63. package/dist/src/find.js +1 -1
  64. package/dist/src/finders.js +1 -1
  65. package/dist/src/fold-runtime.js +1 -0
  66. package/dist/src/gesture-admission.js +1 -1
  67. package/dist/src/interaction-positionals.js +1 -1
  68. package/dist/src/interaction-ref-policy.js +1 -1
  69. package/dist/src/interaction.js +1 -1
  70. package/dist/src/interaction2.js +1 -1
  71. package/dist/src/interactor-operation-catalog.js +1 -1
  72. package/dist/src/interactor.js +4 -4
  73. package/dist/src/interactors.js +1 -1
  74. package/dist/src/internal/bin.js +1 -1
  75. package/dist/src/internal/daemon.js +2 -2
  76. package/dist/src/inventory2.js +1 -1
  77. package/dist/src/ios-snapshot-acquisition.js +1 -1
  78. package/dist/src/ios-snapshot-runtime.js +1 -1
  79. package/dist/src/lease.js +1 -1
  80. package/dist/src/local-interactor-operation-set.js +1 -1
  81. package/dist/src/location-coordinates.js +1 -1
  82. package/dist/src/managed-device-scope.js +1 -1
  83. package/dist/src/mechanics.js +17 -17
  84. package/dist/src/mobile-snapshot-semantics.js +1 -1
  85. package/dist/src/mp4-duration.js +1 -0
  86. package/dist/src/multitouch-support.js +1 -1
  87. package/dist/src/owner-identity.js +1 -1
  88. package/dist/src/parameterized-recorded-fill.js +1 -1
  89. package/dist/src/perf-facade.js +2 -2
  90. package/dist/src/perf-runtime-plan.js +1 -1
  91. package/dist/src/platform-request-scope.js +1 -1
  92. package/dist/src/platform-runtime-managed-owner.js +1 -1
  93. package/dist/src/platform-runtime-open-target.js +1 -1
  94. package/dist/src/platform-runtime-operation-host.js +2 -2
  95. package/dist/src/platform-runtime-runtime-hints.js +1 -1
  96. package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
  97. package/dist/src/platform-runtime-unavailable.js +1 -1
  98. package/dist/src/platform-runtime.js +1 -1
  99. package/dist/src/platform-runtime2.js +1 -1
  100. package/dist/src/png-crop-bytes.js +1 -1
  101. package/dist/src/png-encode.js +1 -0
  102. package/dist/src/png-size.js +1 -0
  103. package/dist/src/provider-webdriver.js +1 -1
  104. package/dist/src/quality-warnings.js +1 -1
  105. package/dist/src/react-native.js +1 -1
  106. package/dist/src/record-runtime.js +1 -1
  107. package/dist/src/recording-export-quality.js +1 -1
  108. package/dist/src/recording-scope.js +1 -0
  109. package/dist/src/recording.js +3 -0
  110. package/dist/src/registry.js +35 -35
  111. package/dist/src/replay.js +2 -2
  112. package/dist/src/request-admission.js +1 -1
  113. package/dist/src/request-runtime-binding.js +1 -1
  114. package/dist/src/result-serialization.js +1 -1
  115. package/dist/src/runner-cache-metadata.js +2 -2
  116. package/dist/src/runner-client.js +1 -1
  117. package/dist/src/runner-contract.js +1 -1
  118. package/dist/src/runner-dev-tools-security.js +1 -1
  119. package/dist/src/runner-device-readiness.js +1 -1
  120. package/dist/src/runner-disposal.js +1 -1
  121. package/dist/src/runner-operations-facade.js +1 -1
  122. package/dist/src/runner-presentation.js +1 -1
  123. package/dist/src/runner.js +1 -1
  124. package/dist/src/runtime.js +2 -2
  125. package/dist/src/runtime10.js +2 -1
  126. package/dist/src/runtime2.js +4 -4
  127. package/dist/src/runtime4.js +5 -5
  128. package/dist/src/runtime5.js +1 -1
  129. package/dist/src/runtime6.js +1 -1
  130. package/dist/src/runtime7.js +1 -1
  131. package/dist/src/runtime8.js +1 -1
  132. package/dist/src/runtime9.js +1 -1
  133. package/dist/src/screen-recording-admission-ledger.js +1 -1
  134. package/dist/src/screen-recording-resource-recovery.js +1 -1
  135. package/dist/src/screen-recording-transport.js +1 -1
  136. package/dist/src/screenshot-density.js +1 -1
  137. package/dist/src/screenshot-overlay-draw.js +1 -0
  138. package/dist/src/screenshot-runtime.js +1 -1
  139. package/dist/src/script.js +1 -1
  140. package/dist/src/scroll-gesture.js +1 -1
  141. package/dist/src/sdk-batch.js +2 -2
  142. package/dist/src/sdk-contracts.d.ts +7 -5
  143. package/dist/src/sdk-device.js +1 -1
  144. package/dist/src/sdk-finders.js +1 -1
  145. package/dist/src/sdk-selectors.d.ts +44 -1
  146. package/dist/src/sdk-selectors.js +1 -1
  147. package/dist/src/selection.js +0 -0
  148. package/dist/src/selector-runtime.js +1 -1
  149. package/dist/src/selectors.js +1 -1
  150. package/dist/src/semantic-index.js +1 -1
  151. package/dist/src/session-routing.js +1 -1
  152. package/dist/src/session-snapshot.js +1 -1
  153. package/dist/src/session-store.js +3 -3
  154. package/dist/src/session2.js +3 -3
  155. package/dist/src/simctl.js +1 -1
  156. package/dist/src/simulator-boot.js +1 -1
  157. package/dist/src/snapshot-runtime-binding.js +1 -1
  158. package/dist/src/snapshot-runtime.js +1 -1
  159. package/dist/src/snapshot-state.js +1 -1
  160. package/dist/src/snapshot4.js +1 -1
  161. package/dist/src/src.js +1 -1
  162. package/dist/src/src7.js +1 -1
  163. package/dist/src/stop-sequence.js +1 -1
  164. package/dist/src/text-entry-focus.js +1 -1
  165. package/dist/src/tree.js +1 -1
  166. package/dist/src/type-text-runtime.js +1 -1
  167. package/dist/src/video.js +2 -2
  168. package/package.json +1 -1
  169. package/server.json +2 -2
  170. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.8.apk.sha256 +0 -1
  171. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.8.apk.sha256 +0 -1
@@ -1,5 +1,5 @@
1
1
  import { k as Rect } from "./sdk-contracts.js";
2
- import { A as MultiTouchGesturePlan, M as PointerTrajectorySample, N as SinglePointerGesturePlan, j as PointerTrajectory } from "./sdk-selectors.js";
2
+ import { M as PointerTrajectory, N as PointerTrajectorySample, P as SinglePointerGesturePlan, j as MultiTouchGesturePlan } from "./sdk-selectors.js";
3
3
  import { Readable, Stream, Writable } from "node:stream";
4
4
  //#region packages/platform-android/src/helper-artifacts.d.ts
5
5
  type AndroidImeHelperManifest = {
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime.js";import{D as t}from"./sdk-contracts.js";import{S as n,_ as r,h as i,s as a,u as o}from"./sdk-device.js";var s=e({markSelectionBootOccurred:()=>u,resolveExistingSessionDeviceSelection:()=>l,resolveInventoryDeviceSelection:()=>c});async function c(e){let{devices:t,selector:i,source:o}=e,s=a(i);if(o===`provider`&&!s)return p(t,i);if(o===`local`&&!s){let n=await m(t,i,e.appleSimulatorAppTarget);if(n)return n}let c=t.filter(e=>r(e,i,{includeExplicitSelectors:s}));try{return d(await n([...t],i),c,{explicitSelector:s,source:o})}catch(e){throw h(e,c)}}function l(e){return{device:e,reason:`existing-session`,source:`session`,candidateCount:1,bootOccurred:!1}}function u(e){if(!e||e.source!==`local`)return e;let{device:t}=e;return t.booted!==!0&&(t.kind===`simulator`||t.kind===`emulator`)?{...e,bootOccurred:!0}:e}function d(e,t,n){return{device:e,reason:n.explicitSelector?`explicit-selector`:n.source===`provider`?`single-provider-device`:f(e,t),source:n.source,candidateCount:t.length,bootOccurred:!1}}function f(e,t){return e.booted===!0&&t.filter(e=>e.booted===!0).length===1?`single-booted-local`:!e.booted&&t.length===1?`single-bootable-local`:`preferred-local`}async function p(e,i){let a=e.filter(e=>r(e,i)),o=a[0];if(o!==void 0&&a.length===1)return d(o,a,{explicitSelector:!1,source:`provider`});try{await n([...e],i)}catch(e){throw h(e,a)}throw new t(`AMBIGUOUS_MATCH`,`Multiple provider devices match this request.`,{...g(a),matches:a.length,hint:`Select the leased provider device explicitly with --device, --udid, or --serial.`,retrySelectors:_(a)})}async function m(e,n,i){let a=i?.trim();if(!a)return;let{readInstalledAppProbe:s}=await import(`./device-inventory-context.js`).then(e=>e.t),c=s();if(!c)return;let l=e.filter(e=>r(e,n)&&o(e)&&e.kind===`simulator`&&e.booted===!0);if(l.length<2)return;let u=(await Promise.all(l.map(async e=>await c(e,a)?e:void 0))).filter(e=>e!==void 0),d=u[0];if(d!==void 0&&u.length===1)return{device:d,reason:`single-app-installed-local`,source:`local`,candidateCount:1,bootOccurred:!1};throw u.length===0?new t(`APP_NOT_INSTALLED`,`No booted iOS simulator has ${a} installed`,{appTarget:a,...g(l),hint:`Install the app on a booted simulator, or pass --udid to select the intended device explicitly.`,retrySelectors:_(l)}):new t(`AMBIGUOUS_MATCH`,`Multiple booted iOS simulators have ${a} installed`,{appTarget:a,...g(u),hint:`Pass --udid to select the intended simulator explicitly.`,retrySelectors:_(u)})}function h(e,n){return!(e instanceof t)||e.code!==`AMBIGUOUS_MATCH`?e:new t(e.code,e.message,{...e.details??{},...g(n),retrySelectors:_(n)},e)}function g(e){return{devices:e.slice(0,10).map(e=>({id:e.id,name:e.name}))}}function _(e){return e.slice(0,10).flatMap(e=>[{flag:i(e.platform)?`--serial`:`--udid`,value:e.id},{flag:`--device`,value:e.name}])}export{u as n,l as r,s as t};
1
+ import{r as e}from"./rolldown-runtime.js";import{D as t}from"./sdk-contracts.js";import{C as n,d as r,g as i,s as a,v as o}from"./sdk-device.js";var s=e({markSelectionBootOccurred:()=>u,resolveExistingSessionDeviceSelection:()=>l,resolveInventoryDeviceSelection:()=>c});async function c(e){let{devices:t,selector:r,source:i}=e,s=a(r);if(i===`provider`&&!s)return p(t,r);if(i===`local`&&!s){let n=await m(t,r,e.appleSimulatorAppTarget);if(n)return n}let c=t.filter(e=>o(e,r,{includeExplicitSelectors:s}));try{return d(await n([...t],r),c,{explicitSelector:s,source:i})}catch(e){throw h(e,c)}}function l(e){return{device:e,reason:`existing-session`,source:`session`,candidateCount:1,bootOccurred:!1}}function u(e){if(!e||e.source!==`local`)return e;let{device:t}=e;return t.booted!==!0&&(t.kind===`simulator`||t.kind===`emulator`)?{...e,bootOccurred:!0}:e}function d(e,t,n){return{device:e,reason:n.explicitSelector?`explicit-selector`:n.source===`provider`?`single-provider-device`:f(e,t),source:n.source,candidateCount:t.length,bootOccurred:!1}}function f(e,t){return e.booted===!0&&t.filter(e=>e.booted===!0).length===1?`single-booted-local`:!e.booted&&t.length===1?`single-bootable-local`:`preferred-local`}async function p(e,r){let i=e.filter(e=>o(e,r)),a=i[0];if(a!==void 0&&i.length===1)return d(a,i,{explicitSelector:!1,source:`provider`});try{await n([...e],r)}catch(e){throw h(e,i)}throw new t(`AMBIGUOUS_MATCH`,`Multiple provider devices match this request.`,{...g(i),matches:i.length,hint:`Select the leased provider device explicitly with --device, --udid, or --serial.`,retrySelectors:_(i)})}async function m(e,n,i){let a=i?.trim();if(!a)return;let{readInstalledAppProbe:s}=await import(`./device-inventory-context.js`).then(e=>e.t),c=s();if(!c)return;let l=e.filter(e=>o(e,n)&&r(e)&&e.kind===`simulator`&&e.booted===!0);if(l.length<2)return;let u=(await Promise.all(l.map(async e=>await c(e,a)?e:void 0))).filter(e=>e!==void 0),d=u[0];if(d!==void 0&&u.length===1)return{device:d,reason:`single-app-installed-local`,source:`local`,candidateCount:1,bootOccurred:!1};throw u.length===0?new t(`APP_NOT_INSTALLED`,`No booted iOS simulator has ${a} installed`,{appTarget:a,...g(l),hint:`Install the app on a booted simulator, or pass --udid to select the intended device explicitly.`,retrySelectors:_(l)}):new t(`AMBIGUOUS_MATCH`,`Multiple booted iOS simulators have ${a} installed`,{appTarget:a,...g(u),hint:`Pass --udid to select the intended simulator explicitly.`,retrySelectors:_(u)})}function h(e,n){return!(e instanceof t)||e.code!==`AMBIGUOUS_MATCH`?e:new t(e.code,e.message,{...e.details??{},...g(n),retrySelectors:_(n)},e)}function g(e){return{devices:e.slice(0,10).map(e=>({id:e.id,name:e.name}))}}function _(e){return e.slice(0,10).flatMap(e=>[{flag:i(e.platform)?`--serial`:`--udid`,value:e.id},{flag:`--device`,value:e.name}])}export{u as n,l as r,s as t};
@@ -1 +1 @@
1
- import{d as e,u as t,v as n}from"./sdk-device.js";const r=[`android`,`harmonyos`,`apple`,`vega`,`linux`];function i(e){let{booted:t,kind:n,...r}=e;return r}const a={platform:`web`,id:`agent-browser-chrome`,name:`Agent Browser Chrome`,kind:`device`,target:`desktop`,booted:!0};function o(e){let t=c();for(let n of e){let e=l(n);t[e].available+=1,n.booted===!0&&(t[e].booted+=1)}return t}function s(e,t){return e.filter(e=>n(e,t.platform)&&(t.target===void 0||(e.target??`mobile`)===t.target)&&(t.kind===void 0||e.kind===t.kind)&&(t.booted===void 0||e.booted===t.booted))}function c(){return{android:{available:0,booted:0},harmonyos:{available:0,booted:0},apple:{available:0,booted:0},vega:{available:0,booted:0},linux:{available:0,booted:0},web:{available:0,booted:0}}}function l(n){return t(n)||e(n)?`apple`:n.platform}const u=new Set([`DEVICE_CLAIM_LIVE_OWNER`,`DEVICE_CLAIM_RECOVERY_PENDING`,`DEVICE_CLAIM_OWNER_UNCERTAIN`]);function d(e){return u.has(e)}export{d as a,s as i,a as n,i as o,o as r,r as t};
1
+ import{d as e,f as t,y as n}from"./sdk-device.js";const r=[`android`,`harmonyos`,`apple`,`vega`,`linux`];function i(e){let{booted:t,kind:n,...r}=e;return r}const a={platform:`web`,id:`agent-browser-chrome`,name:`Agent Browser Chrome`,kind:`device`,target:`desktop`,booted:!0};function o(e){let t=c();for(let n of e){let e=l(n);t[e].available+=1,n.booted===!0&&(t[e].booted+=1)}return t}function s(e,t){return e.filter(e=>n(e,t.platform)&&(t.target===void 0||(e.target??`mobile`)===t.target)&&(t.kind===void 0||e.kind===t.kind)&&(t.booted===void 0||e.booted===t.booted))}function c(){return{android:{available:0,booted:0},harmonyos:{available:0,booted:0},apple:{available:0,booted:0},vega:{available:0,booted:0},linux:{available:0,booted:0},web:{available:0,booted:0}}}function l(n){return e(n)||t(n)?`apple`:n.platform}const u=new Set([`DEVICE_CLAIM_LIVE_OWNER`,`DEVICE_CLAIM_RECOVERY_PENDING`,`DEVICE_CLAIM_OWNER_UNCERTAIN`]);function d(e){return u.has(e)}export{d as a,s as i,a as n,i as o,o as r,r as t};
@@ -1,3 +1,3 @@
1
- import{D as e}from"./sdk-contracts.js";import{y as t}from"./sdk-device.js";import{s as n}from"./device-shell.js";import{i as r,n as i,t as a}from"./device-claim-inspection.js";import{t as o}from"./shared.js";const s=async({positionals:t,flags:n})=>{if(t.length!==1||t[0]!==`status`&&t[0]!==`release`)throw new e(`INVALID_ARGS`,`device accepts only: status, release`);if(t[0]===`release`)return await c(n);let s=r({platform:n.platform,device:n.device,udid:n.udid,serial:n.serial}),l=s.filter(e=>i(e.classification)),u=(n.stale?l:s.filter(e=>!i(e.classification))).map(m),d={claims:u,...n.stale?{}:{hiddenStaleClaims:l.length}};return await o(n,d,()=>g(u,{staleOnly:n.stale===!0,hiddenStaleClaims:l.length,staleCommand:x(n,`status`),releasableClaims:l.filter(e=>a(e.classification)).length,releaseCommand:x(n,`release`)})),!0};async function c(t){if(t.stale!==!0)throw new e(`INVALID_ARGS`,`device release only releases provably stale claims; pass --stale to confirm.`,{hint:`A live owner is released by closing its session from its own workspace, or by stopping its daemon: agent-device daemon stop --state-dir <owner state dir>.`});let{runStaleDeviceClaimRelease:n}=await import(`./device-release.js`),r=await n({platform:t.platform,device:t.device,udid:t.udid,serial:t.serial}),i={released:r.filter(e=>e.status===`released`).map(l),retained:r.filter(e=>e.status===`retained`).map(l),refused:r.filter(e=>e.status===`refused`).map(l),changed:r.filter(e=>e.status===`changed`).map(l)};return await o(t,i,()=>u(r)),!0}function l(e){let{device:t,...n}=e;return{...n,...t?{device:h(t)}:{}}}function u(e){return e.length===0?`No local device claims matched.`:e.map(d).join(`
1
+ import{D as e}from"./sdk-contracts.js";import{b as t}from"./sdk-device.js";import{s as n}from"./device-shell.js";import{i as r,n as i,t as a}from"./device-claim-inspection.js";import{t as o}from"./shared.js";const s=async({positionals:t,flags:n})=>{if(t.length!==1||t[0]!==`status`&&t[0]!==`release`)throw new e(`INVALID_ARGS`,`device accepts only: status, release`);if(t[0]===`release`)return await c(n);let s=r({platform:n.platform,device:n.device,udid:n.udid,serial:n.serial}),l=s.filter(e=>i(e.classification)),u=(n.stale?l:s.filter(e=>!i(e.classification))).map(m),d={claims:u,...n.stale?{}:{hiddenStaleClaims:l.length}};return await o(n,d,()=>g(u,{staleOnly:n.stale===!0,hiddenStaleClaims:l.length,staleCommand:x(n,`status`),releasableClaims:l.filter(e=>a(e.classification)).length,releaseCommand:x(n,`release`)})),!0};async function c(t){if(t.stale!==!0)throw new e(`INVALID_ARGS`,`device release only releases provably stale claims; pass --stale to confirm.`,{hint:`A live owner is released by closing its session from its own workspace, or by stopping its daemon: agent-device daemon stop --state-dir <owner state dir>.`});let{runStaleDeviceClaimRelease:n}=await import(`./device-release.js`),r=await n({platform:t.platform,device:t.device,udid:t.udid,serial:t.serial}),i={released:r.filter(e=>e.status===`released`).map(l),retained:r.filter(e=>e.status===`retained`).map(l),refused:r.filter(e=>e.status===`refused`).map(l),changed:r.filter(e=>e.status===`changed`).map(l)};return await o(t,i,()=>u(r)),!0}function l(e){let{device:t,...n}=e;return{...n,...t?{device:h(t)}:{}}}function u(e){return e.length===0?`No local device claims matched.`:e.map(d).join(`
2
2
  `)}function d(e){let n=e.device?`${t({platform:e.device.family,appleOs:e.device.appleOs})} ${e.device.name}`:e.deviceKey??e.fileName,r=f(e);switch(e.status){case`released`:return`released ${n}${r}`;case`retained`:return`retained ${n}${r} — resources not settled (${e.reason}); the claim stays until they are.`;case`refused`:return`refused ${n}${r} — ${e.reason} (${e.classification}); ${p(e)}`;case`changed`:return`changed ${n} — the claim changed while releasing; re-run device status.`}}function f(e){return e.allocator?` allocator=${e.allocator.instanceId} incarnation=${e.allocator.identityIncarnationId}`:e.session?` session=${e.session} workspace=${e.workspace}`:``}function p(e){return e.classification===`allocator-held`?`held by its managed-device allocator; it is cleared only after the allocator proves the identity removed.`:e.classification===`live`||e.classification===`owner-state-dir-gone`?e.stateDir?`close the owning session from its workspace, or stop its daemon: agent-device daemon stop --state-dir ${n(e.stateDir)}`:`close the owning session from its workspace first.`:`only provably dead owners are released; nothing was changed.`}function m(e){let t=e.claim??e.allocatorClaim;return{...e.deviceKey?{deviceKey:e.deviceKey}:{},...t?{}:{fileName:e.fileName},classification:e.classification,...t?{device:h(t.device)}:{},...e.claim?{owner:{session:e.claim.session,workspace:e.claim.workspace,stateDir:e.claim.stateDir,pid:e.claim.ownerPid,startTime:e.claim.ownerStartTime}}:{},...e.allocatorClaim?{owner:{kind:`allocator`,stateDir:e.allocatorClaim.stateDir,allocator:e.allocatorClaim.allocator}}:{},...e.error?{error:e.error}:{}}}function h(e){let{family:n,...r}=e;return{...r,platform:t({platform:n,appleOs:e.appleOs})}}function g(e,t){let n=e.map(v);if(n.length===0){if(t.staleOnly)return`No stale local device claims found.`;if(t.hiddenStaleClaims===0)return`No local device claims found.`}return[...n.length===0?[`No live local device claims found.`]:n,..._(t)].join(`
3
3
  `)}function _(e){if(e.staleOnly)return e.releasableClaims>0?[`Release provably dead owners with: ${e.releaseCommand}`]:[];if(e.hiddenStaleClaims===0)return[];let t=e.hiddenStaleClaims===1?`claim`:`claims`;return[`${e.hiddenStaleClaims} stale ${t} hidden; inspect with: ${e.staleCommand}`]}function v(e){return`${y(e)}: ${e.classification}${b(e.owner)}`}function y(e){let t=e.device;return t?`${t.platform??`unknown`} ${t.name??t.id??`claim`}`:String(e.deviceKey??e.fileName??`claim`)}function b(e){if(!e||typeof e!=`object`)return``;let t=e;return t.allocator?` allocator=${t.allocator.instanceId} incarnation=${t.allocator.identityIncarnationId} installation=${t.stateDir}`:` session=${t.session} workspace=${t.workspace}`}function x(e,t){let r=[e.platform?`--platform ${n(e.platform)}`:null,e.device?`--device ${n(e.device)}`:null,e.udid?`--udid ${n(e.udid)}`:null,e.serial?`--serial ${n(e.serial)}`:null].filter(e=>!!e);return[`agent-device device ${t}`,...r,`--stale`].join(` `)}export{s as deviceCommand};
@@ -1 +1 @@
1
- import{D as e}from"./sdk-contracts.js";import{l as t,s as n,x as r}from"./sdk-device.js";import{c as i}from"./diagnostics.js";import"./diagnostics2.js";import{n as a,r as o}from"./device-isolation.js";import{a as s,i as c,r as l}from"./device-inventory-context.js";import{AsyncLocalStorage as u}from"node:async_hooks";async function d(e){let{resolveInventoryDeviceSelection:t}=await import(`./device-selection-resolver.js`).then(e=>e.t);return await t(e)}const f=new u;function p(t,r){return!n(r)&&t instanceof e&&t.code===`DEVICE_NOT_FOUND`}function m(e,t){return!n(e)&&(!e.platform||e.platform===`apple`||e.platform===`ios`)&&e.target!==`desktop`&&(!t||t.kind===`device`)}async function h(e,t={}){return(await g(e,t)).device}async function g(e,n={}){let r={...y(e),androidAvdSelection:n.androidAvdSelection??`running-only`},{iosSimulatorSetPath:a,...o}=r,s=C(r,n),l={platform:r.platform,target:e.target,cacheHit:!1};return await i(`resolve_target_device`,async()=>{let e=x(s);if(e)return l.cacheHit=!0,e;let i=await c(r),u=[...i.devices];if(t(o.platform)&&i.source===`local`){let e=await _(u,o,{simulatorSetPath:a,appleSimulatorAppTarget:n.appleSimulatorAppTarget});return S(s,e)}return S(s,await d({devices:u,selector:o,source:i.source}))},l)}async function _(t,n,r){let i;try{i=await d({devices:t,selector:n,source:`local`,appleSimulatorAppTarget:r.appleSimulatorAppTarget})}catch(e){if(!p(e,n))throw e}let a=await v(n,r,i?.device);if(a)return a;if(i)return i;throw new e(`DEVICE_NOT_FOUND`,`No devices found`,{selector:n})}async function v(e,t,n){if(m(e,n))try{return await d({devices:await l({platform:e.platform??`ios`,target:e.target,iosSimulatorSetPath:t.simulatorSetPath,kind:`simulator`}),selector:e,source:`local`})}catch(e){if(s(e))throw e;return}}function y(t){let n=t.platform;if(t.target&&!n)throw new e(`INVALID_ARGS`,`Device target selector requires --platform. Use --platform ios|macos|android|vega|linux|apple with --target mobile|tv|desktop.`);let i=r({simulatorSetPath:o(t.iosSimulatorDeviceSet),platform:n,target:t.target}),s=a(t.androidDeviceAllowlist);return{platform:n,target:t.target,deviceName:t.device,udid:t.udid,serial:t.serial,leaseId:t.leaseId,leaseProvider:t.leaseProvider,deviceKey:t.deviceKey,clientId:t.clientId,iosSimulatorSetPath:i,androidSerialAllowlist:s?Array.from(s).sort():void 0}}async function b(e){return f.getStore()?await e():await f.run(new Map,e)}function x(e){let t=f.getStore()?.get(e);if(t)return{...t,device:{...t.device}}}function S(e,t){return f.getStore()?.set(e,{...t,device:{...t.device}}),t}function C(e,t){let{appleSimulatorAppTarget:n,...r}=t;return JSON.stringify({request:e,options:r})}export{b as i,h as n,g as r,y as t};
1
+ import{D as e}from"./sdk-contracts.js";import{S as t,l as n,s as r}from"./sdk-device.js";import{c as i}from"./diagnostics.js";import"./diagnostics2.js";import{n as a,r as o}from"./device-isolation.js";import{a as s,i as c,r as l}from"./device-inventory-context.js";import{AsyncLocalStorage as u}from"node:async_hooks";async function d(e){let{resolveInventoryDeviceSelection:t}=await import(`./device-selection-resolver.js`).then(e=>e.t);return await t(e)}const f=new u;function p(t,n){return!r(n)&&t instanceof e&&t.code===`DEVICE_NOT_FOUND`}function m(e,t){return!r(e)&&(!e.platform||e.platform===`apple`||e.platform===`ios`)&&e.target!==`desktop`&&(!t||t.kind===`device`)}async function h(e,t={}){return(await g(e,t)).device}async function g(e,t={}){let r={...y(e),androidAvdSelection:t.androidAvdSelection??`running-only`},{iosSimulatorSetPath:a,...o}=r,s=C(r,t),l={platform:r.platform,target:e.target,cacheHit:!1};return await i(`resolve_target_device`,async()=>{let e=x(s);if(e)return l.cacheHit=!0,e;let i=await c(r),u=[...i.devices];if(n(o.platform)&&i.source===`local`){let e=await _(u,o,{simulatorSetPath:a,appleSimulatorAppTarget:t.appleSimulatorAppTarget});return S(s,e)}return S(s,await d({devices:u,selector:o,source:i.source}))},l)}async function _(t,n,r){let i;try{i=await d({devices:t,selector:n,source:`local`,appleSimulatorAppTarget:r.appleSimulatorAppTarget})}catch(e){if(!p(e,n))throw e}let a=await v(n,r,i?.device);if(a)return a;if(i)return i;throw new e(`DEVICE_NOT_FOUND`,`No devices found`,{selector:n})}async function v(e,t,n){if(m(e,n))try{return await d({devices:await l({platform:e.platform??`ios`,target:e.target,iosSimulatorSetPath:t.simulatorSetPath,kind:`simulator`}),selector:e,source:`local`})}catch(e){if(s(e))throw e;return}}function y(n){let r=n.platform;if(n.target&&!r)throw new e(`INVALID_ARGS`,`Device target selector requires --platform. Use --platform ios|macos|android|vega|linux|apple with --target mobile|tv|desktop.`);let i=t({simulatorSetPath:o(n.iosSimulatorDeviceSet),platform:r,target:n.target}),s=a(n.androidDeviceAllowlist);return{platform:r,target:n.target,deviceName:n.device,udid:n.udid,serial:n.serial,leaseId:n.leaseId,leaseProvider:n.leaseProvider,deviceKey:n.deviceKey,clientId:n.clientId,iosSimulatorSetPath:i,androidSerialAllowlist:s?Array.from(s).sort():void 0}}async function b(e){return f.getStore()?await e():await f.run(new Map,e)}function x(e){let t=f.getStore()?.get(e);if(t)return{...t,device:{...t.device}}}function S(e,t){return f.getStore()?.set(e,{...t,device:{...t.device}}),t}function C(e,t){let{appleSimulatorAppTarget:n,...r}=t;return JSON.stringify({request:e,options:r})}export{b as i,h as n,g as r,y as t};
@@ -1 +1 @@
1
- import{u as e}from"./sdk-device.js";import{d as t}from"./owner-identity.js";import"./process.js";import{n}from"./toolchain-probe.js";import{r,s as i}from"./runner-client.js";async function a(){let e=await n(`xcodebuild`,[`-version`]);return e?s({selectedPath:await n(`xcode-select`,[`-p`]),versionLine:e}):u()}async function o(n,a){if(!(!e(n)||n.kind!==`simulator`)&&!(t()!==`darwin`||a.isProviderDevice(n)))return a.emitProgress(`Checking iOS runner build cache (${n.name})...`),await r(n)?{id:`ios-runner-cache`,status:`pass`,summary:`iOS runner artifact cached; first open skips the runner build`}:(i(n,{}),a.emitProgress(`Warming iOS runner build cache in the background (${n.name})...`),{id:`ios-runner-cache`,status:`pass`,summary:`iOS runner build started in the background; the first open gets faster once it completes`,hint:"Run `agent-device prepare ios-runner` to wait for a fully warmed runner instead."})}function s(e){return{id:`toolchain`,status:c(e),summary:l(e),evidence:{selectedPath:e.selectedPath??null,xcodeVersion:e.versionLine??null}}}function c(e){return e.versionLine?`pass`:`info`}function l(e){return e.versionLine?e.selectedPath?`Apple toolchain: ${e.versionLine}; xcode-select ${e.selectedPath}.`:`Apple toolchain: ${e.versionLine}; xcode-select path unavailable.`:`Apple toolchain: xcodebuild version check failed.`}function u(){return{id:`toolchain`,status:`info`,summary:`Apple toolchain: xcodebuild version check failed.`,hint:`Install/select Xcode and complete first launch/license setup if xcodebuild reports it.`,command:`xcodebuild -version`}}export{o as appleRunnerWarmupCheck,a as appleToolchainCheck};
1
+ import{d as e}from"./sdk-device.js";import{d as t}from"./owner-identity.js";import"./process.js";import{n}from"./toolchain-probe.js";import{r,s as i}from"./runner-client.js";async function a(){let e=await n(`xcodebuild`,[`-version`]);return e?s({selectedPath:await n(`xcode-select`,[`-p`]),versionLine:e}):u()}async function o(n,a){if(!(!e(n)||n.kind!==`simulator`)&&!(t()!==`darwin`||a.isProviderDevice(n)))return a.emitProgress(`Checking iOS runner build cache (${n.name})...`),await r(n)?{id:`ios-runner-cache`,status:`pass`,summary:`iOS runner artifact cached; first open skips the runner build`}:(i(n,{}),a.emitProgress(`Warming iOS runner build cache in the background (${n.name})...`),{id:`ios-runner-cache`,status:`pass`,summary:`iOS runner build started in the background; the first open gets faster once it completes`,hint:"Run `agent-device prepare ios-runner` to wait for a fully warmed runner instead."})}function s(e){return{id:`toolchain`,status:c(e),summary:l(e),evidence:{selectedPath:e.selectedPath??null,xcodeVersion:e.versionLine??null}}}function c(e){return e.versionLine?`pass`:`info`}function l(e){return e.versionLine?e.selectedPath?`Apple toolchain: ${e.versionLine}; xcode-select ${e.selectedPath}.`:`Apple toolchain: ${e.versionLine}; xcode-select path unavailable.`:`Apple toolchain: xcodebuild version check failed.`}function u(){return{id:`toolchain`,status:`info`,summary:`Apple toolchain: xcodebuild version check failed.`,hint:`Install/select Xcode and complete first launch/license setup if xcodebuild reports it.`,command:`xcodebuild -version`}}export{o as appleRunnerWarmupCheck,a as appleToolchainCheck};
@@ -1 +1 @@
1
- import{c as e,p as t}from"./sdk-device.js";import{Jt as n,Xt as r,qt as i}from"./sdk-batch.js";const a=4096;function o(e){return c(e,{seen:new WeakSet,nodes:0},0)}function s(e){return Object.freeze(Object.fromEntries(Object.entries(e).map(([e,t])=>[e,p(t)])))}function c(e,t,n){if(!d(e)||n>32||t.seen.has(e))return!1;t.seen.add(e),t.nodes+=1;let r=t.nodes<=a&&Object.values(e).every(e=>l(e,t,n+1));return t.seen.delete(e),r}function l(e,t,n){return f(e)?!0:n>32?!1:Array.isArray(e)?u(e,t,n):c(e,t,n)}function u(e,t,n){if(t.seen.has(e))return!1;t.seen.add(e),t.nodes+=1;let r=t.nodes<=a&&e.every(e=>l(e,t,n+1));return t.seen.delete(e),r}function d(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function f(e){return e===null?!0:typeof e==`number`?Number.isFinite(e):typeof e==`string`||typeof e==`boolean`}function p(e){return Array.isArray(e)?Object.freeze(e.map(p)):typeof e==`object`&&e?s(e):e}function m(e){if(!P(e))return _(`Durable resource envelope must be an object`);let t=e.envelopeVersion;if(!N(t))return _(`Durable resource envelopeVersion must be a non-negative integer`);if(t!==1)return{status:`unreattachable`,reason:`descriptor-version-unsupported`,message:`Unsupported durable resource envelope version: ${t}`,version:t};if(!M(e.resourceKind))return _(`Durable resource resourceKind must be a non-empty string`);if(!M(e.sessionId))return _(`Durable resource sessionId must be a non-empty string`);let n=y(e.device);if(!n)return _(`Durable resource device identity is invalid`);let r=v(e.owner);if(!r)return _(`Durable resource owner reference is invalid`);if(r.kind===`local-family`&&r.family!==n.family)return _(`Durable resource local owner does not match the device family`);let i=D(e.fence);if(!i)return _(`Durable resource ownership fence is invalid`);if(!k(e.lifecycle))return _(`Durable resource lifecycle state is invalid`);let a=O(e.descriptor);return a?e.metadata!==void 0&&!o(e.metadata)?_(`Durable resource metadata must be a JSON object`):{status:`decoded`,envelope:Object.freeze({envelopeVersion:1,resourceKind:e.resourceKind,sessionId:e.sessionId,device:n,owner:r,fence:i,lifecycle:e.lifecycle,descriptor:a,...e.metadata===void 0?{}:{metadata:s(e.metadata)}})}:_(`Durable resource descriptor is invalid`)}function h(e,t){return Object.freeze({version:e.version,body:s(e.encode(t))})}function g(e){let t=m({envelopeVersion:1,...e});if(t.status!==`decoded`)throw TypeError(t.message);return t.envelope}function _(e){return{status:`unreattachable`,reason:`descriptor-invalid`,message:e}}function v(e){return P(e)?e.kind===`local-family`&&t(e.family)?i(e.family):e.kind===`managed-local`&&M(e.instance)?n(e.instance):e.kind===`provider-runtime`&&M(e.provider)&&M(e.instance)?r(e.provider,e.instance):null:null}function y(e){if(!P(e))return null;let t=x(e.id),n=S(e.family),r=C(e.kind),i=w(e.target);return!t||!n||!r||i===null||!T(e,n,r)?null:b(e,t,n,r,i)}function b(e,t,n,r,i){return Object.freeze({id:t,family:n,...e.appleOs===void 0?{}:{appleOs:e.appleOs},kind:r,...i===void 0?{}:{target:i},...e.iosPhysicalDeviceBackend===void 0?{}:{iosPhysicalDeviceBackend:e.iosPhysicalDeviceBackend}})}function x(e){return M(e)?e:null}function S(e){return t(e)?e:null}function C(e){return A(e)?e:null}function w(e){if(e!==void 0)return j(e)?e:null}function T(t,n,r){if(n===`apple`){if(!e(t.appleOs))return!1}else if(t.appleOs!==void 0||t.iosPhysicalDeviceBackend!==void 0)return!1;return E(t.iosPhysicalDeviceBackend,r)}function E(e,t){return e===void 0?!0:t===`device`?e===`coredevice`||e===`xctest`:!1}function D(e){return!P(e)||!M(e.token)||!N(e.generation)?null:Object.freeze({token:e.token,generation:e.generation})}function O(e){return!P(e)||!N(e.version)||!o(e.body)?null:Object.freeze({version:e.version,body:s(e.body)})}function k(e){return e===`open`||e===`completed`}function A(e){return e===`simulator`||e===`emulator`||e===`device`}function j(e){return e===`mobile`||e===`tv`||e===`desktop`}function M(e){return typeof e==`string`&&e.trim().length>0}function N(e){return typeof e==`number`&&Number.isInteger(e)&&e>=0}function P(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function F(e){return e.status===`cleaned`||e.status===`already-missing`}export{h as a,m as i,g as n,y as r,F as t};
1
+ import{c as e,m as t}from"./sdk-device.js";import{Qt as n,Xt as r,Yt as i}from"./sdk-batch.js";const a=4096;function o(e){return c(e,{seen:new WeakSet,nodes:0},0)}function s(e){return Object.freeze(Object.fromEntries(Object.entries(e).map(([e,t])=>[e,p(t)])))}function c(e,t,n){if(!d(e)||n>32||t.seen.has(e))return!1;t.seen.add(e),t.nodes+=1;let r=t.nodes<=a&&Object.values(e).every(e=>l(e,t,n+1));return t.seen.delete(e),r}function l(e,t,n){return f(e)?!0:n>32?!1:Array.isArray(e)?u(e,t,n):c(e,t,n)}function u(e,t,n){if(t.seen.has(e))return!1;t.seen.add(e),t.nodes+=1;let r=t.nodes<=a&&e.every(e=>l(e,t,n+1));return t.seen.delete(e),r}function d(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function f(e){return e===null?!0:typeof e==`number`?Number.isFinite(e):typeof e==`string`||typeof e==`boolean`}function p(e){return Array.isArray(e)?Object.freeze(e.map(p)):typeof e==`object`&&e?s(e):e}function m(e){if(!P(e))return _(`Durable resource envelope must be an object`);let t=e.envelopeVersion;if(!N(t))return _(`Durable resource envelopeVersion must be a non-negative integer`);if(t!==1)return{status:`unreattachable`,reason:`descriptor-version-unsupported`,message:`Unsupported durable resource envelope version: ${t}`,version:t};if(!M(e.resourceKind))return _(`Durable resource resourceKind must be a non-empty string`);if(!M(e.sessionId))return _(`Durable resource sessionId must be a non-empty string`);let n=y(e.device);if(!n)return _(`Durable resource device identity is invalid`);let r=v(e.owner);if(!r)return _(`Durable resource owner reference is invalid`);if(r.kind===`local-family`&&r.family!==n.family)return _(`Durable resource local owner does not match the device family`);let i=D(e.fence);if(!i)return _(`Durable resource ownership fence is invalid`);if(!k(e.lifecycle))return _(`Durable resource lifecycle state is invalid`);let a=O(e.descriptor);return a?e.metadata!==void 0&&!o(e.metadata)?_(`Durable resource metadata must be a JSON object`):{status:`decoded`,envelope:Object.freeze({envelopeVersion:1,resourceKind:e.resourceKind,sessionId:e.sessionId,device:n,owner:r,fence:i,lifecycle:e.lifecycle,descriptor:a,...e.metadata===void 0?{}:{metadata:s(e.metadata)}})}:_(`Durable resource descriptor is invalid`)}function h(e,t){return Object.freeze({version:e.version,body:s(e.encode(t))})}function g(e){let t=m({envelopeVersion:1,...e});if(t.status!==`decoded`)throw TypeError(t.message);return t.envelope}function _(e){return{status:`unreattachable`,reason:`descriptor-invalid`,message:e}}function v(e){return P(e)?e.kind===`local-family`&&t(e.family)?i(e.family):e.kind===`managed-local`&&M(e.instance)?r(e.instance):e.kind===`provider-runtime`&&M(e.provider)&&M(e.instance)?n(e.provider,e.instance):null:null}function y(e){if(!P(e))return null;let t=x(e.id),n=S(e.family),r=C(e.kind),i=w(e.target);return!t||!n||!r||i===null||!T(e,n,r)?null:b(e,t,n,r,i)}function b(e,t,n,r,i){return Object.freeze({id:t,family:n,...e.appleOs===void 0?{}:{appleOs:e.appleOs},kind:r,...i===void 0?{}:{target:i},...e.iosPhysicalDeviceBackend===void 0?{}:{iosPhysicalDeviceBackend:e.iosPhysicalDeviceBackend}})}function x(e){return M(e)?e:null}function S(e){return t(e)?e:null}function C(e){return A(e)?e:null}function w(e){if(e!==void 0)return j(e)?e:null}function T(t,n,r){if(n===`apple`){if(!e(t.appleOs))return!1}else if(t.appleOs!==void 0||t.iosPhysicalDeviceBackend!==void 0)return!1;return E(t.iosPhysicalDeviceBackend,r)}function E(e,t){return e===void 0?!0:t===`device`?e===`coredevice`||e===`xctest`:!1}function D(e){return!P(e)||!M(e.token)||!N(e.generation)?null:Object.freeze({token:e.token,generation:e.generation})}function O(e){return!P(e)||!N(e.version)||!o(e.body)?null:Object.freeze({version:e.version,body:s(e.body)})}function k(e){return e===`open`||e===`completed`}function A(e){return e===`simulator`||e===`emulator`||e===`device`}function j(e){return e===`mobile`||e===`tv`||e===`desktop`}function M(e){return typeof e==`string`&&e.trim().length>0}function N(e){return typeof e==`number`&&Number.isInteger(e)&&e>=0}function P(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function F(e){return e.status===`cleaned`||e.status===`already-missing`}export{h as a,m as i,g as n,y as r,F as t};
package/dist/src/find.js CHANGED
@@ -1 +1 @@
1
- import{g as e,o as t,u as n}from"./sdk-contracts.js";import{An as r,Fn as i,Lt as a,Mn as o,gt as s,jn as c}from"./sdk-batch.js";import{c as l}from"./session-store.js";import{M as u,O as d,k as f}from"./session-snapshot.js";import{C as p,S as m,c as h,h as g,u as _}from"./runtime.js";import{r as v,t as y}from"./success-text.js";import{f as b}from"./absence-observation-errors.js";import{o as x}from"./quality-warnings.js";import{t as S}from"./internal/daemon.js";import{n as C}from"./capture-disclosure.js";import{t as w}from"./snapshot-runtime-binding.js";import{l as T,n as E}from"./selector-runtime.js";import{t as D}from"./type-text-runtime.js";function O(t,n){let r=n[0]?.rect;if(!r)return t;let i=t.filter(t=>{if(!t.rect)return!1;let n=e(t.rect);return n.x>=r.x&&n.x<=r.x+r.width&&n.y>=r.y&&n.y<=r.y+r.height}),a=i.length>0?i:t;return a.length<2?a:k(a,n,m(n))}function k(e,t,n){return e.map((e,r)=>({node:e,index:r,score:A(e,t,n)})).sort((e,t)=>t.score===e.score?M(e.node)-M(t.node)||e.index-t.index:t.score-e.score).map(e=>e.node)}function A(e,t,n){let r=n(e);if(r.reason===`covered`)return 0;let i=j(r,t[0]);return i>0?i:e.hittable&&e.rect&&!p(e,t[0])?3:+!!e.rect}function j(e,t){return e.node.rect?e.reason===`semantic-target`||e.reason===`same-rect-descendant`?4:e.reason===`hittable-ancestor`&&!p(e.node,t)?2:0:0}function M(e){return e.rect?e.rect.width*e.rect.height:1/0}function N(e,n,r){let i={matches:e.length,candidates:e.slice(0,5).map(e=>b(e,0,!1))};return t(`AMBIGUOUS_MATCH`,`find matched ${e.length} elements for ${n} "${r}". Use a more specific locator or selector.`,{locator:n,query:r,...i})}function P(e){if(e.ambiguity!==`reject-candidates`)throw Error(`find's resolution policy must reject candidates, got "${e.ambiguity}"`)}function F(e){let{nodes:n,locator:r,query:i,selectorExpression:a,flags:o,platform:s}=e,l=g.findAct,u=n.filter(e=>!p(e,n[0])),d=l.resolution,f;if(f=a?h(l,u,a,{platform:s}).list?.matchedNodes??[]:c(u,r,i,{requireRect:d.requireRect}).matches,f=O(f,n),f.length>1){P(d);let e=I(f,o);if(!e)return{ok:!1,response:N(f,r,i)};f=e}let m=f[0]??null;return m?{ok:!0,node:m}:{ok:!1,response:t(`COMMAND_FAILED`,`find did not match any element`)}}function I(e,t){return t?.findFirst?[e[0]]:t?.findLast?[e.at(-1)]:null}function L(e){let{device:t,session:n,req:r,logPath:i,locator:a,query:o,sessionStore:s,sessionName:c}=e,l=T({device:t,session:n,sessionStore:s,sessionName:c,req:r,logPath:i,capture:e.capture,activationProof:e.activationProof});return async()=>{let{snapshot:e}=await l.capture({flags:{...r.flags,snapshotInteractiveOnly:!0},recovery:{legacyIosSparse:{query:o,shouldScope:z(a)},sparseVerdictQueryScope:{query:o,shouldScope:z(a)}}});return{nodes:e.nodes,snapshotQuality:e.snapshotQuality,systemSurfaceOnly:e.systemSurfaceOnly,iosSystemSurfaceBundleId:e.iosSystemSurfaceBundleId,...e.keyboard?{keyboard:e.keyboard}:{}}}}function R(e){return t(`COMMAND_FAILED`,`find could not read the current accessibility tree`,{reason:e.reason,hint:`The snapshot quality verdict is sparse. Use screenshot as visual truth, navigate with coordinates if needed, then retry find after reaching a readable screen.`})}function z(e){return e!==`role`}async function B(e){let{req:c,sessionName:l,logPath:u,sessionStore:d,invoke:f}=e,p=c.command;if(p!==`find`)return null;let m=c.positionals??[],h=r(m,c.flags);if(!h.ok)return t(h.code,h.message);let{locator:v,query:y,action:b,value:S}=h.parsed;if(c.flags?.record&&!o(b))return t(`INVALID_ARGS`,`find ${b} is a mutating action and is always recorded; --record only applies to a read-only find (exists, wait, list, get text, get attrs).`);let T=await E({req:c,sessionName:l,logPath:u,sessionStore:d,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(T)return T;let D=d.get(l);if(!D)return n();let O=D.device,k=await w({command:`find`,device:O,session:D,plan:a({hasActiveApp:D.appBundleId!==void 0,intent:s(b)}),inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!k.ok)return k.response;let A=i(v,y),j={},M=L({device:O,session:D,req:c,logPath:u,locator:v,query:y,sessionStore:d,sessionName:l,capture:k.capture,activationProof:j}),N={req:c,sessionName:l,logPath:u,sessionStore:d,invoke:f,session:D,device:O,command:p,locator:v,query:y,publicFlags:X(c.flags),boundFocusPoint:k.focusPoint,boundTypeText:k.typeText},P=await M();if(x(P.snapshotQuality))return C({response:R(P.snapshotQuality),consumedTree:P,activationProof:j});let{nodes:I}=P,z=F({nodes:I,locator:v,query:y,selectorExpression:A,flags:c.flags,platform:O.platform});if(!z.ok)return C({response:z.response,consumedTree:P,activationProof:j});let B=z.node,H=await _(g.findAct,I,B),U=H.node,W=`@${U.ref}`,G={...c.flags??{},noRecord:!0},K=await V(N,{node:B,resolvedNode:U,ref:W,nodes:I,...P.iosSystemSurfaceBundleId?{iosSystemSurfaceBundleId:P.iosSystemSurfaceBundleId}:{},...P.keyboard?{keyboard:P.keyboard}:{},actionFlags:G,...H.kind===`occluded`?{occludedNode:H.node}:{}},b,S);return K&&C({response:K,consumedTree:P,activationProof:j})}async function V(e,t,n,r){let i={click:()=>U(e,t),fill:()=>W(e,t,r),focus:()=>G(e,t),type:()=>K(e,t,r)}[n];return i?await i():null}function H(e){return{ref:e.ref,node:e.resolvedNode,nodes:e.nodes,...e.iosSystemSurfaceBundleId?{iosSystemSurfaceBundleId:e.iosSystemSurfaceBundleId}:{},...e.keyboard?{keyboard:e.keyboard}:{}}}async function U(t,n){let{req:r,sessionName:i,sessionStore:a,session:o,invoke:s,command:c,locator:u,query:d,publicFlags:f}=t,p=await s({token:r.token,session:i,command:`click`,positionals:[n.ref],flags:n.actionFlags,internal:{findResolvedTarget:H(n)}});if(!p.ok)return p;let m=n.resolvedNode.rect?e(n.resolvedNode.rect):n.node.rect?e(n.node.rect):null,h={ref:n.ref,locator:u,query:d};m&&(h.x=m.x,h.y=m.y);let g=y(p.data)??`Tapped ${n.ref}${m?` (${m.x}, ${m.y})`:``}`;return Object.assign(h,v(g)),l(a,o,r,c,{ref:n.ref,action:`click`,locator:u,query:d},{flags:f}),{ok:!0,data:h}}async function W(e,n,r){let{req:i,sessionName:a,sessionStore:o,session:s,invoke:c,command:u,publicFlags:d}=e;if(r===void 0)return t(`INVALID_ARGS`,`find fill requires text (use "" to clear the field)`);let f=await c({token:i.token,session:a,command:`fill`,positionals:[n.ref,r],flags:n.actionFlags,internal:{findResolvedTarget:H(n)}});return f.ok&&l(o,s,i,u,{ref:n.ref,action:`fill`},{flags:d}),f}async function G(e,t){let n=await q(e,t);return n.ok&&Y(e,t,`focus`),n}async function K(e,n,r){let{req:i,logPath:a,session:o}=e;if(!r)return t(`INVALID_ARGS`,`find type requires text`);let s=await q(e,n);if(!s.ok)return s;u(o);let c=e.boundTypeText;if(!c)return t(`COMMAND_FAILED`,`find type was admitted without a text-entry operation`);let l=await D({operations:{typeText:c}},[r],f(a,i.flags,o.appBundleId,o.trace?.outPath));return Y(e,n,`type`),{ok:!0,data:l??{ref:n.ref}}}async function q(n,r){let{req:i,logPath:a,session:o}=n,s=J(r,`be focused`);if(s)return s;let c=r.resolvedNode.rect?e(r.resolvedNode.rect):null;if(!c)return t(`COMMAND_FAILED`,`matched element has no bounds`);u(o);let l=n.boundFocusPoint;return l?{ok:!0,data:await S({operations:{focusPoint:l}},c,f(a,i.flags,o.appBundleId,o.trace?.outPath))??{ref:r.ref}}:t(`COMMAND_FAILED`,`find focus was admitted without a focus operation`)}function J(e,n){let r=e.occludedNode;return r?t(`COMMAND_FAILED`,`Matched element ${e.ref} is covered by another visible element and cannot ${n} safely`,{ref:`@${r.ref}`,interactionBlocked:r.interactionBlocked,hint:`Use a different visible target, scroll it clear of the overlay, or inspect with snapshot/screenshot before retrying.`}):null}function Y(e,t,n){let{req:r,sessionStore:i,session:a,command:o,publicFlags:s}=e;l(i,a,r,o,{ref:t.ref,action:n},{flags:s})}function X(e){return{...d(e)??{}}}export{B as handleFindCommands};
1
+ import{g as e,o as t,u as n}from"./sdk-contracts.js";import{Ln as r,Lt as i,Mn as a,Nn as o,Pn as s,gt as c}from"./sdk-batch.js";import{c as l}from"./session-store.js";import{M as u,O as d,k as f}from"./session-snapshot.js";import{C as p,S as m,c as h,h as g,u as _}from"./runtime.js";import{r as v,t as y}from"./success-text.js";import{f as b}from"./absence-observation-errors.js";import{s as x}from"./quality-warnings.js";import{t as S}from"./internal/daemon.js";import{n as C}from"./capture-disclosure.js";import{t as w}from"./snapshot-runtime-binding.js";import{l as T,n as E}from"./selector-runtime.js";import{t as D}from"./type-text-runtime.js";function O(t,n){let r=n[0]?.rect;if(!r)return t;let i=t.filter(t=>{if(!t.rect)return!1;let n=e(t.rect);return n.x>=r.x&&n.x<=r.x+r.width&&n.y>=r.y&&n.y<=r.y+r.height}),a=i.length>0?i:t;return a.length<2?a:k(a,n,m(n))}function k(e,t,n){return e.map((e,r)=>({node:e,index:r,score:A(e,t,n)})).sort((e,t)=>t.score===e.score?M(e.node)-M(t.node)||e.index-t.index:t.score-e.score).map(e=>e.node)}function A(e,t,n){let r=n(e);if(r.reason===`covered`)return 0;let i=j(r,t[0]);return i>0?i:e.hittable&&e.rect&&!p(e,t[0])?3:+!!e.rect}function j(e,t){return e.node.rect?e.reason===`semantic-target`||e.reason===`same-rect-descendant`?4:e.reason===`hittable-ancestor`&&!p(e.node,t)?2:0:0}function M(e){return e.rect?e.rect.width*e.rect.height:1/0}function N(e,n,r){let i={matches:e.length,candidates:e.slice(0,5).map(e=>b(e,0,!1))};return t(`AMBIGUOUS_MATCH`,`find matched ${e.length} elements for ${n} "${r}". Use a more specific locator or selector.`,{locator:n,query:r,...i})}function P(e){if(e.ambiguity!==`reject-candidates`)throw Error(`find's resolution policy must reject candidates, got "${e.ambiguity}"`)}function F(e){let{nodes:n,locator:r,query:i,selectorExpression:a,flags:s,platform:c}=e,l=g.findAct,u=n.filter(e=>!p(e,n[0])),d=l.resolution,f;if(f=a?h(l,u,a,{platform:c}).list?.matchedNodes??[]:o(u,r,i,{requireRect:d.requireRect}).matches,f=O(f,n),f.length>1){P(d);let e=I(f,s);if(!e)return{ok:!1,response:N(f,r,i)};f=e}let m=f[0]??null;return m?{ok:!0,node:m}:{ok:!1,response:t(`COMMAND_FAILED`,`find did not match any element`)}}function I(e,t){return t?.findFirst?[e[0]]:t?.findLast?[e.at(-1)]:null}function L(e){let{device:t,session:n,req:r,logPath:i,locator:a,query:o,sessionStore:s,sessionName:c}=e,l=T({device:t,session:n,sessionStore:s,sessionName:c,req:r,logPath:i,capture:e.capture,activationProof:e.activationProof});return async()=>{let{snapshot:e}=await l.capture({flags:{...r.flags,snapshotInteractiveOnly:!0},recovery:{legacyIosSparse:{query:o,shouldScope:z(a)},sparseVerdictQueryScope:{query:o,shouldScope:z(a)}}});return{nodes:e.nodes,snapshotQuality:e.snapshotQuality,systemSurfaceOnly:e.systemSurfaceOnly,iosSystemSurfaceBundleId:e.iosSystemSurfaceBundleId,...e.keyboard?{keyboard:e.keyboard}:{}}}}function R(e){return t(`COMMAND_FAILED`,`find could not read the current accessibility tree`,{reason:e.reason,hint:`The snapshot quality verdict is sparse. Use screenshot as visual truth, navigate with coordinates if needed, then retry find after reaching a readable screen.`})}function z(e){return e!==`role`}async function B(e){let{req:o,sessionName:l,logPath:u,sessionStore:d,invoke:f}=e,p=o.command;if(p!==`find`)return null;let m=o.positionals??[],h=a(m,o.flags);if(!h.ok)return t(h.code,h.message);let{locator:v,query:y,action:b,value:S}=h.parsed;if(o.flags?.record&&!s(b))return t(`INVALID_ARGS`,`find ${b} is a mutating action and is always recorded; --record only applies to a read-only find (exists, wait, list, get text, get attrs).`);let T=await E({req:o,sessionName:l,logPath:u,sessionStore:d,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(T)return T;let D=d.get(l);if(!D)return n();let O=D.device,k=await w({command:`find`,device:O,session:D,plan:i({hasActiveApp:D.appBundleId!==void 0,intent:c(b)}),inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!k.ok)return k.response;let A=r(v,y),j={},M=L({device:O,session:D,req:o,logPath:u,locator:v,query:y,sessionStore:d,sessionName:l,capture:k.capture,activationProof:j}),N={req:o,sessionName:l,logPath:u,sessionStore:d,invoke:f,session:D,device:O,command:p,locator:v,query:y,publicFlags:X(o.flags),boundFocusPoint:k.focusPoint,boundTypeText:k.typeText},P=await M();if(x(P.snapshotQuality))return C({response:R(P.snapshotQuality),consumedTree:P,activationProof:j});let{nodes:I}=P,z=F({nodes:I,locator:v,query:y,selectorExpression:A,flags:o.flags,platform:O.platform});if(!z.ok)return C({response:z.response,consumedTree:P,activationProof:j});let B=z.node,H=await _(g.findAct,I,B),U=H.node,W=`@${U.ref}`,G={...o.flags??{},noRecord:!0},K=await V(N,{node:B,resolvedNode:U,ref:W,nodes:I,...P.iosSystemSurfaceBundleId?{iosSystemSurfaceBundleId:P.iosSystemSurfaceBundleId}:{},...P.keyboard?{keyboard:P.keyboard}:{},actionFlags:G,...H.kind===`occluded`?{occludedNode:H.node}:{}},b,S);return K&&C({response:K,consumedTree:P,activationProof:j})}async function V(e,t,n,r){let i={click:()=>U(e,t),fill:()=>W(e,t,r),focus:()=>G(e,t),type:()=>K(e,t,r)}[n];return i?await i():null}function H(e){return{ref:e.ref,node:e.resolvedNode,nodes:e.nodes,...e.iosSystemSurfaceBundleId?{iosSystemSurfaceBundleId:e.iosSystemSurfaceBundleId}:{},...e.keyboard?{keyboard:e.keyboard}:{}}}async function U(t,n){let{req:r,sessionName:i,sessionStore:a,session:o,invoke:s,command:c,locator:u,query:d,publicFlags:f}=t,p=await s({token:r.token,session:i,command:`click`,positionals:[n.ref],flags:n.actionFlags,internal:{findResolvedTarget:H(n)}});if(!p.ok)return p;let m=n.resolvedNode.rect?e(n.resolvedNode.rect):n.node.rect?e(n.node.rect):null,h={ref:n.ref,locator:u,query:d};m&&(h.x=m.x,h.y=m.y);let g=y(p.data)??`Tapped ${n.ref}${m?` (${m.x}, ${m.y})`:``}`;return Object.assign(h,v(g)),l(a,o,r,c,{ref:n.ref,action:`click`,locator:u,query:d},{flags:f}),{ok:!0,data:h}}async function W(e,n,r){let{req:i,sessionName:a,sessionStore:o,session:s,invoke:c,command:u,publicFlags:d}=e;if(r===void 0)return t(`INVALID_ARGS`,`find fill requires text (use "" to clear the field)`);let f=await c({token:i.token,session:a,command:`fill`,positionals:[n.ref,r],flags:n.actionFlags,internal:{findResolvedTarget:H(n)}});return f.ok&&l(o,s,i,u,{ref:n.ref,action:`fill`},{flags:d}),f}async function G(e,t){let n=await q(e,t);return n.ok&&Y(e,t,`focus`),n}async function K(e,n,r){let{req:i,logPath:a,session:o}=e;if(!r)return t(`INVALID_ARGS`,`find type requires text`);let s=await q(e,n);if(!s.ok)return s;u(o);let c=e.boundTypeText;if(!c)return t(`COMMAND_FAILED`,`find type was admitted without a text-entry operation`);let l=await D({operations:{typeText:c}},[r],f(a,i.flags,o.appBundleId,o.trace?.outPath));return Y(e,n,`type`),{ok:!0,data:l??{ref:n.ref}}}async function q(n,r){let{req:i,logPath:a,session:o}=n,s=J(r,`be focused`);if(s)return s;let c=r.resolvedNode.rect?e(r.resolvedNode.rect):null;if(!c)return t(`COMMAND_FAILED`,`matched element has no bounds`);u(o);let l=n.boundFocusPoint;return l?{ok:!0,data:await S({operations:{focusPoint:l}},c,f(a,i.flags,o.appBundleId,o.trace?.outPath))??{ref:r.ref}}:t(`COMMAND_FAILED`,`find focus was admitted without a focus operation`)}function J(e,n){let r=e.occludedNode;return r?t(`COMMAND_FAILED`,`Matched element ${e.ref} is covered by another visible element and cannot ${n} safely`,{ref:`@${r.ref}`,interactionBlocked:r.interactionBlocked,hint:`Use a different visible target, scroll it clear of the overlay, or inspect with snapshot/screenshot before retrying.`}):null}function Y(e,t,n){let{req:r,sessionStore:i,session:a,command:o,publicFlags:s}=e;l(i,a,r,o,{ref:t.ref,action:n},{flags:s})}function X(e){return{...d(e)??{}}}export{B as handleFindCommands};
@@ -1 +1 @@
1
- import{Pn as e}from"./sdk-batch.js";import{t}from"./sdk-finders.js";export{t as findBestMatchesByLocator,e as parseFindArgs};
1
+ import{In as e}from"./sdk-batch.js";import{t}from"./sdk-finders.js";export{t as findBestMatchesByLocator,e as parseFindArgs};
@@ -0,0 +1 @@
1
+ const e=`native-panel`;function t(e){return Object.freeze({setFoldPose:e.fold})}export{t as n,e as t};
@@ -1 +1 @@
1
- import{C as e,l as t}from"./sdk-device.js";const n={ios:`iOS`,ipados:`iPadOS`,tvos:`tvOS`,watchos:`watchOS`,visionos:`visionOS`,macos:`macOS`},r=`Target-authored drag requires an adapter that preserves source hold, timed movement, and destination hold; it is supported on Android touch devices and iOS/iPadOS.`,i=`Android TV has no touch input — this gesture is supported on Android phones, tablets, and the iOS simulator only.`,a=`Two-finger gesture synthesis is iOS-simulator only — not available on physical iOS devices.`;function o(e,t){return(t===`multi-touch`?s(e):t===`directional-fling`&&e.platform===`linux`?`Linux`:void 0)??e.appleOs??e.platform}function s(r){if(r.platform===`android`)return r.target===`tv`?`Android TV`:void 0;if(!t(r.platform))return;let i=e(r);if(i===`ios`||i===`ipados`)return`physical iOS devices`;if(i===`macos`||i===`tvos`||i===`visionos`)return n[i]}function c(e,t,n){return`gesture ${n} is not supported on ${o(e,t)}`}export{c as a,r as i,n,a as r,i as t};
1
+ import{l as e,w as t}from"./sdk-device.js";const n={ios:`iOS`,ipados:`iPadOS`,tvos:`tvOS`,watchos:`watchOS`,visionos:`visionOS`,macos:`macOS`},r=`Target-authored drag requires an adapter that preserves source hold, timed movement, and destination hold; it is supported on Android touch devices and iOS/iPadOS.`,i=`Android TV has no touch input — this gesture is supported on Android phones, tablets, and the iOS simulator only.`,a=`Two-finger gesture synthesis is iOS-simulator only — not available on physical iOS devices.`;function o(e,t){return(t===`multi-touch`?s(e):t===`directional-fling`&&e.platform===`linux`?`Linux`:void 0)??e.appleOs??e.platform}function s(r){if(r.platform===`android`)return r.target===`tv`?`Android TV`:void 0;if(!e(r.platform))return;let i=t(r);if(i===`ios`||i===`ipados`)return`physical iOS devices`;if(i===`macos`||i===`tvos`||i===`visionos`)return n[i]}function c(e,t,n){return`gesture ${n} is not supported on ${o(e,t)}`}export{c as a,r as i,n,a as r,i as t};
@@ -1 +1 @@
1
- import{D as e}from"./sdk-contracts.js";import{_r as t,br as n,gr as r,hr as i,vr as a}from"./sdk-batch.js";function o(e){return e?.startsWith(`@`)?e.slice(1):e}const s=/^e\d+$/;function c(t){if(t[0]?.startsWith(`@`)){let e=_(t.slice(1));return{ref:t[0],...e===void 0?{}:{label:e}}}if(s.test(t[0]??``))throw new e(`INVALID_ARGS`,`Did you mean "@${t[0]}"? Snapshot refs need the @ prefix.`);let r=n(t);if(r){if(r.rest.length>0)throw new e(`INVALID_ARGS`,m(t,r));return{selector:r.selectorExpression}}return u(t)}function l(t){let r=t[0];if(r?.startsWith(`@`)){let e=t.slice(1),n=e.length===0?void 0:e.join(` `);return{kind:`ref`,target:{ref:r},text:n}}if(s.test(r??``))throw new e(`INVALID_ARGS`,`Did you mean "@${r}"? Snapshot refs need the @ prefix.`);let i=n(t,{preferTrailingValue:!0});if(i)return{kind:`selector`,target:{selector:i.selectorExpression},text:i.rest.length===0?void 0:i.rest.join(` `)};let a=t.slice(2);return{kind:`point`,target:u(t.slice(0,2)),text:a.length===0?void 0:a.join(` `)}}function u(t){let n=t[0]??``,i=r(n);if(i){let r=d(n)?i.value:[i.value,...t.slice(1)].join(` `).trim();throw new e(`INVALID_ARGS`,f({key:i.key,value:r}))}let a=Number(t[0]),o=Number(t[1]);if(Number.isFinite(a)&&Number.isFinite(o))return{x:a,y:o};throw new e(`INVALID_ARGS`,p(t))}function d(e){let t=e.slice(e.indexOf(`=`)+1).trim();if(t.length<2)return!1;let n=t[0];return(n===`"`||n===`'`)&&t.endsWith(n)}function f(e){let{key:n,value:r}=e;return`Unknown selector key "${n}". Supported: ${i.join(`, `)}. ${t(n)?`Did you mean role=${n} label=${g(r)}?`:`Did you mean label=${g(r)}?`}`}function p(e){let t=e.filter(e=>e!==void 0).join(` `);if(!t.trim())return`Missing target. Pass an @ref from snapshot, a selector like text="Sign in", or "x y" coordinates.`;let n=`Target "${t}" is not a @ref, selector, or "x y" point.`;return e.some(e=>a(e??``))?`${n} Selector values with spaces need quotes, e.g. text="Sign in".`:`${n} To match by visible text, use text=${g(t)} (or label=/id=/role=), or pass an @ref from snapshot.`}function m(e,t){return`${`Selector ${t.selectorExpression} is followed by unexpected extra arguments: "${t.rest.join(` `)}".`} Selector values with spaces need quotes, e.g. ${h(e,t)??`text="Sign in"`}.`}function h(e,t){let n=e.length-t.rest.length,r=e[n-1];if(r===void 0)return;let i=r.indexOf(`=`);if(i<=0)return;let a=[r.slice(i+1),...t.rest].join(` `),o=`${r.slice(0,i+1)}${g(a)}`;return[...e.slice(0,n-1),o].join(` `)}function g(e){return`"${e.replaceAll(`\\`,String.raw`\\`).replaceAll(`"`,String.raw`\"`)}"`}function _(e){return e.join(` `).trim()||void 0}export{c as n,o as r,l as t};
1
+ import{D as e}from"./sdk-contracts.js";import{Sr as t,_r as n,br as r,vr as i,yr as a}from"./sdk-batch.js";function o(e){return e?.startsWith(`@`)?e.slice(1):e}const s=/^e\d+$/;function c(n){if(n[0]?.startsWith(`@`)){let e=_(n.slice(1));return{ref:n[0],...e===void 0?{}:{label:e}}}if(s.test(n[0]??``))throw new e(`INVALID_ARGS`,`Did you mean "@${n[0]}"? Snapshot refs need the @ prefix.`);let r=t(n);if(r){if(r.rest.length>0)throw new e(`INVALID_ARGS`,m(n,r));return{selector:r.selectorExpression}}return u(n)}function l(n){let r=n[0];if(r?.startsWith(`@`)){let e=n.slice(1),t=e.length===0?void 0:e.join(` `);return{kind:`ref`,target:{ref:r},text:t}}if(s.test(r??``))throw new e(`INVALID_ARGS`,`Did you mean "@${r}"? Snapshot refs need the @ prefix.`);let i=t(n,{preferTrailingValue:!0});if(i)return{kind:`selector`,target:{selector:i.selectorExpression},text:i.rest.length===0?void 0:i.rest.join(` `)};let a=n.slice(2);return{kind:`point`,target:u(n.slice(0,2)),text:a.length===0?void 0:a.join(` `)}}function u(t){let n=t[0]??``,r=i(n);if(r){let i=d(n)?r.value:[r.value,...t.slice(1)].join(` `).trim();throw new e(`INVALID_ARGS`,f({key:r.key,value:i}))}let a=Number(t[0]),o=Number(t[1]);if(Number.isFinite(a)&&Number.isFinite(o))return{x:a,y:o};throw new e(`INVALID_ARGS`,p(t))}function d(e){let t=e.slice(e.indexOf(`=`)+1).trim();if(t.length<2)return!1;let n=t[0];return(n===`"`||n===`'`)&&t.endsWith(n)}function f(e){let{key:t,value:r}=e;return`Unknown selector key "${t}". Supported: ${n.join(`, `)}. ${a(t)?`Did you mean role=${t} label=${g(r)}?`:`Did you mean label=${g(r)}?`}`}function p(e){let t=e.filter(e=>e!==void 0).join(` `);if(!t.trim())return`Missing target. Pass an @ref from snapshot, a selector like text="Sign in", or "x y" coordinates.`;let n=`Target "${t}" is not a @ref, selector, or "x y" point.`;return e.some(e=>r(e??``))?`${n} Selector values with spaces need quotes, e.g. text="Sign in".`:`${n} To match by visible text, use text=${g(t)} (or label=/id=/role=), or pass an @ref from snapshot.`}function m(e,t){return`${`Selector ${t.selectorExpression} is followed by unexpected extra arguments: "${t.rest.join(` `)}".`} Selector values with spaces need quotes, e.g. ${h(e,t)??`text="Sign in"`}.`}function h(e,t){let n=e.length-t.rest.length,r=e[n-1];if(r===void 0)return;let i=r.indexOf(`=`);if(i<=0)return;let a=[r.slice(i+1),...t.rest].join(` `),o=`${r.slice(0,i+1)}${g(a)}`;return[...e.slice(0,n-1),o].join(` `)}function g(e){return`"${e.replaceAll(`\\`,String.raw`\\`).replaceAll(`"`,String.raw`\"`)}"`}function _(e){return e.join(` `).trim()||void 0}export{c as n,o as r,l as t};
@@ -1 +1 @@
1
- import{D as e,O as t,n}from"./sdk-contracts.js";import{u as r,y as i}from"./sdk-device.js";import{ln as a}from"./sdk-batch.js";import{C as o,D as s,E as c,M as l,O as u,f as d,i as f,o as p,y as m}from"./session-snapshot.js";import{A as h,M as g,d as _,t as v}from"./parameterized-recorded-fill.js";import{i as y}from"./mobile-snapshot-semantics.js";import{r as b}from"./request-cancel.js";import"./request.js";import{i as x}from"./request-runtime-binding.js";import{n as S}from"./internal/daemon.js";import{i as C,t as w}from"./capture-disclosure.js";function T(e){let{req:t,logPath:n,traceLogPath:r}=e;return{verbose:t.flags?.verbose,logPath:n,traceLogPath:r,requestId:t.meta?.requestId,iosXctestrunFile:t.flags?.iosXctestrunFile,iosXctestDerivedDataPath:t.flags?.iosXctestDerivedDataPath,iosXctestEnvDir:t.flags?.iosXctestEnvDir}}function E(e,t){return!(!e||!r(e.device)||x(e.device)||t.skipPendingPostGestureStabilization&&c(e))}function D(e){let{session:t,selectorExpression:n}=e;return E(t,{skipPendingPostGestureStabilization:!0})?a(n):null}function O(e){let t=e.identifier?.trim();if(t)return{key:`id`,value:t};let n=e.label?.trim();return n?{key:`label`,value:n}:null}async function k(e,t,n){let r=await m(e.device,t,e.appBundleId,n),i=r.found===!0,a=A(r);return{found:i,...typeof r.text==`string`?{text:r.text}:{},...a?{node:a}:{}}}function A(e){let t=e.nodes;if(!Array.isArray(t))return;let n=t[0];if(!(!n||typeof n!=`object`))return n}function j(e,n={}){let r=t(e);if(r.code===`ELEMENT_NOT_FOUND`)return n.delegateSemanticFailures===!0||n.allowElementNotFound===!0;if(r.code===`AMBIGUOUS_MATCH`)return n.delegateSemanticFailures===!0;if(r.code===`ELEMENT_OFFSCREEN`)return n.delegateSemanticFailures!==!1;if(r.code!==`COMMAND_FAILED`)return!1;let i=r.message.toLowerCase();return i.includes(`fetch failed`)||i.includes(`timed out`)||i.includes(`timeout`)||i.includes(`runner did not accept connection`)||i.includes(`invalid runner response`)}async function M(e){let{session:t,node:n,rootViewport:r,requestOptions:i}=e,a=O(n);if(!a)return null;let o;try{o=await k(t,a,i)}catch{return null}if(!o.found||!o.node?.rect)return null;let s={rect:o.node.rect,hittable:o.node.hittable===!0};return y(s,r)?s.rect:null}function N(e){let{operations:t,command:n,positionals:r,actionCommand:i=n,retryPositionals:a,flags:s,result:c,responseData:l,recordedTarget:d,recordedTargets:f,scheduleInteractionOutcomeRetry:p=!0,actionStartedAt:m,actionFinishedAt:h,androidFreshnessBaseline:g}=e,_=u(s),[v,y]=F({command:n,positionals:r,flags:_,result:c,responseData:l}),b=t.isSessionRecording()&&d?o(d):void 0,x=t.isSessionRecording()&&f?P(f):void 0;return t.recordAction({command:n,positionals:r,flags:_??{},result:v,...b?{targetEvidence:b}:{},...x?{targetEvidences:x}:{}}),t.markDeferredOutcome({command:n,action:i,positionals:a??r,flags:s,scheduleOutcomeRetry:p,androidFreshnessBaseline:g}),t.recordGestureVisualization(i,r,v,_??{},m,h),{ok:!0,data:y}}function P(e){let t=o(e.source),n=o(e.destination);return t&&n?{source:t,destination:n}:void 0}function F(e){if(e.command!==`fill`||typeof e.flags?.recordAs!=`string`)return[e.result,e.responseData];let t=h({ts:0,command:`fill`,positionals:e.positionals,flags:e.flags,result:e.result}),n=g(e.flags.recordAs);return[v(e.result,t,n),v(e.responseData,t,n)]}function I(t){let r=t.sessionStore.get(t.sessionName);if(!r)throw new e(`SESSION_NOT_FOUND`,n);return R({requestId:t.req.meta?.requestId,flags:t.req.flags,session:r,contextFromFlags:t.contextFromFlags,captureSnapshot:async(e,n)=>{let i=await t.captureSnapshotForSession(r,e,t.sessionStore,t.contextFromFlags,n);return w(t.activationProof,i)},runtimeSessions:p({sessionName:t.sessionName,getSession:()=>r,recordOptions:{includeSnapshot:!0,omitRefFrameSnapshot:t.req.internal?.findResolvedTarget!==void 0},setRecord:e=>{e.snapshot&&(f(r,e.snapshot),t.sessionStore.set(t.sessionName,r))}}),expireRefFrame:()=>l(r),confirmOffscreenTargetVisible:E(r,{skipPendingPostGestureStabilization:!1})?async(e,n)=>await M({session:r,node:e,rootViewport:n,requestOptions:T({req:t.req,logPath:t.logPath,traceLogPath:r.trace?.outPath})}):void 0,pairedGestureViewport:t.pairedGestureViewport,touchExecutor:t.touchExecutor,gestures:t.gestures})}function L(e){let{session:t,sessionStore:n,...r}=e;return N({...r,operations:{recordAction:n.recordAction.bind(n,t),markDeferredOutcome:e=>s({session:t,...e}),isSessionRecording:_.bind(null,t),recordGestureVisualization:S.bind(null,t)}})}function R(e){return d({backend:z(e),...C(`interaction commands`,{plural:!0}),sessions:e.runtimeSessions,signal:b(e.requestId)})}function z(e){let{flags:t,session:n}=e;return{platform:i(n.device),captureSnapshot:async(n,r)=>({snapshot:await e.captureSnapshot(t,{interactiveOnly:r?.interactiveOnly===!0,preferredBackend:r?.preferredBackend,includeRects:r?.includeRects===!0,signal:n.signal,boundCapture:e.touchExecutor?.captureSnapshot??e.gestures?.captureSnapshot})}),...B(e,()=>e.contextFromFlags(t,n.appBundleId,n.trace?.outPath)),...e.confirmOffscreenTargetVisible?{confirmOffscreenTargetVisible:async(t,n,r)=>await e.confirmOffscreenTargetVisible(n,r)}:{},...V(e.touchExecutor,e.expireRefFrame,t)}}function B(e,t){let n=e.gestures,r=e.pairedGestureViewport;return n?{resolveGestureViewport:async()=>r??await n.gestureViewport?.(t()),performGesture:async(r,i)=>(e.expireRefFrame(),H(await n.performPlan(i,t())))}:r?{resolveGestureViewport:async()=>r}:{}}function V(e,t,n){if(!e)return{};let{tapPoint:r,tapRef:i,fillPoint:a,fillRef:o,longPressPoint:s,hoverPoint:c,hoverRef:l}=e,u=async e=>(t(),H(await e()));return{tap:r?(e,t)=>u(()=>r(t,n)):void 0,tapTarget:i?(e,t)=>u(()=>i(t.ref)):void 0,fill:a?(e,t,n,r)=>u(()=>a(t,n,r)):void 0,fillTarget:o?(e,t,n,r)=>u(()=>o(t.ref,n,r)):void 0,longPress:s?(e,t,n)=>u(()=>s(t,n?.durationMs)):void 0,hover:c?(e,t)=>u(()=>c(t)):void 0,hoverTarget:l?(e,t)=>u(()=>l(t.ref)):void 0}}function H(e){return e&&typeof e==`object`?e:void 0}function U(e,t,n){return{ok:!1,error:{code:e,message:t,...n?{details:n}:{}}}}function W(e,t){if(!t||t.settle===!0)return null;let n=[];return t.settleQuietMs!==void 0&&n.push(`--settle-quiet`),n.length===0?null:U(`INVALID_ARGS`,`${e}: ${n.join(`, `)} require${n.length===1?`s`:``} --settle.`)}function G(e){if(e?.settle===!0)return{...e.settleQuietMs===void 0?{}:{quietMs:e.settleQuietMs},...e.timeoutMs===void 0?{}:{timeoutMs:e.timeoutMs}}}function K(t){try{return q(t),null}catch(t){if(t instanceof e)return U(t.code,t.message,t.details);throw t}}function q(t){let n=t.ref.startsWith(`@`)?t.ref.slice(1):t.ref,{admission:r,scope:i,currentGeneration:a}=t.frame;if(r.admitted)return;let o=r.reason===`plain_ref_requires_complete_frame`&&i!==`all`&&i.has(n)&&a!==void 0?`@${n}~s${a}`:void 0;throw new e(`COMMAND_FAILED`,Y(r.reason,t.ref),{reason:r.reason,ref:t.ref,currentGeneration:a,scope:i===`all`?`all`:Array.from(i),...t.mintedGeneration===void 0?{}:{mintedGeneration:t.mintedGeneration},...o?{suggestedRef:o}:{},hint:o?`Retry with the exact emitted ref ${o}.`:t.staleRefsWarning??J})}const J=`Capture a fresh interactive snapshot (snapshot -i) or use a stable selector, then retry.`;function Y(e,t){switch(e){case`ref_frame_expired`:return`Ref ${t} belongs to an expired ref frame — a device action since the snapshot invalidated it`;case`ref_generation_mismatch`:return`Ref ${t} was minted from a superseded snapshot generation`;case`plain_ref_requires_complete_frame`:return`Ref ${t} needs a complete snapshot — the current frame only authorizes its emitted refs`;case`ref_not_issued`:return`Ref ${t} was not issued by the current ref frame`}}export{I as a,E as c,W as i,D as l,K as n,L as o,G as r,j as s,q as t};
1
+ import{D as e,O as t,n}from"./sdk-contracts.js";import{b as r,d as i}from"./sdk-device.js";import{dn as a}from"./sdk-batch.js";import{C as o,D as s,E as c,M as l,O as u,f as d,i as f,o as p,y as m}from"./session-snapshot.js";import{A as h,M as g,d as _,t as v}from"./parameterized-recorded-fill.js";import{i as y}from"./mobile-snapshot-semantics.js";import{r as b}from"./request-cancel.js";import"./request.js";import{i as x}from"./request-runtime-binding.js";import{n as S}from"./internal/daemon.js";import{i as C,t as w}from"./capture-disclosure.js";function T(e){let{req:t,logPath:n,traceLogPath:r}=e;return{verbose:t.flags?.verbose,logPath:n,traceLogPath:r,requestId:t.meta?.requestId,iosXctestrunFile:t.flags?.iosXctestrunFile,iosXctestDerivedDataPath:t.flags?.iosXctestDerivedDataPath,iosXctestEnvDir:t.flags?.iosXctestEnvDir}}function E(e,t){return!(!e||!i(e.device)||x(e.device)||t.skipPendingPostGestureStabilization&&c(e))}function D(e){let{session:t,selectorExpression:n}=e;return E(t,{skipPendingPostGestureStabilization:!0})?a(n):null}function O(e){let t=e.identifier?.trim();if(t)return{key:`id`,value:t};let n=e.label?.trim();return n?{key:`label`,value:n}:null}async function k(e,t,n){let r=await m(e.device,t,e.appBundleId,n),i=r.found===!0,a=A(r);return{found:i,...typeof r.text==`string`?{text:r.text}:{},...a?{node:a}:{}}}function A(e){let t=e.nodes;if(!Array.isArray(t))return;let n=t[0];if(!(!n||typeof n!=`object`))return n}function j(e,n={}){let r=t(e);if(r.code===`ELEMENT_NOT_FOUND`)return n.delegateSemanticFailures===!0||n.allowElementNotFound===!0;if(r.code===`AMBIGUOUS_MATCH`)return n.delegateSemanticFailures===!0;if(r.code===`ELEMENT_OFFSCREEN`)return n.delegateSemanticFailures!==!1;if(r.code!==`COMMAND_FAILED`)return!1;let i=r.message.toLowerCase();return i.includes(`fetch failed`)||i.includes(`timed out`)||i.includes(`timeout`)||i.includes(`runner did not accept connection`)||i.includes(`invalid runner response`)}async function M(e){let{session:t,node:n,rootViewport:r,requestOptions:i}=e,a=O(n);if(!a)return null;let o;try{o=await k(t,a,i)}catch{return null}if(!o.found||!o.node?.rect)return null;let s={rect:o.node.rect,hittable:o.node.hittable===!0};return y(s,r)?s.rect:null}function N(e){let{operations:t,command:n,positionals:r,actionCommand:i=n,retryPositionals:a,flags:s,result:c,responseData:l,recordedTarget:d,recordedTargets:f,scheduleInteractionOutcomeRetry:p=!0,actionStartedAt:m,actionFinishedAt:h,androidFreshnessBaseline:g}=e,_=u(s),[v,y]=F({command:n,positionals:r,flags:_,result:c,responseData:l}),b=t.isSessionRecording()&&d?o(d):void 0,x=t.isSessionRecording()&&f?P(f):void 0;return t.recordAction({command:n,positionals:r,flags:_??{},result:v,...b?{targetEvidence:b}:{},...x?{targetEvidences:x}:{}}),t.markDeferredOutcome({command:n,action:i,positionals:a??r,flags:s,scheduleOutcomeRetry:p,androidFreshnessBaseline:g}),t.recordGestureVisualization(i,r,v,_??{},m,h),{ok:!0,data:y}}function P(e){let t=o(e.source),n=o(e.destination);return t&&n?{source:t,destination:n}:void 0}function F(e){if(e.command!==`fill`||typeof e.flags?.recordAs!=`string`)return[e.result,e.responseData];let t=h({ts:0,command:`fill`,positionals:e.positionals,flags:e.flags,result:e.result}),n=g(e.flags.recordAs);return[v(e.result,t,n),v(e.responseData,t,n)]}function I(t){let r=t.sessionStore.get(t.sessionName);if(!r)throw new e(`SESSION_NOT_FOUND`,n);return R({requestId:t.req.meta?.requestId,flags:t.req.flags,session:r,contextFromFlags:t.contextFromFlags,captureSnapshot:async(e,n)=>{let i=await t.captureSnapshotForSession(r,e,t.sessionStore,t.contextFromFlags,n);return w(t.activationProof,i)},runtimeSessions:p({sessionName:t.sessionName,getSession:()=>r,recordOptions:{includeSnapshot:!0,omitRefFrameSnapshot:t.req.internal?.findResolvedTarget!==void 0},setRecord:e=>{e.snapshot&&(f(r,e.snapshot),t.sessionStore.set(t.sessionName,r))}}),expireRefFrame:()=>l(r),confirmOffscreenTargetVisible:E(r,{skipPendingPostGestureStabilization:!1})?async(e,n)=>await M({session:r,node:e,rootViewport:n,requestOptions:T({req:t.req,logPath:t.logPath,traceLogPath:r.trace?.outPath})}):void 0,pairedGestureViewport:t.pairedGestureViewport,touchExecutor:t.touchExecutor,gestures:t.gestures})}function L(e){let{session:t,sessionStore:n,...r}=e;return N({...r,operations:{recordAction:n.recordAction.bind(n,t),markDeferredOutcome:e=>s({session:t,...e}),isSessionRecording:_.bind(null,t),recordGestureVisualization:S.bind(null,t)}})}function R(e){return d({backend:z(e),...C(`interaction commands`,{plural:!0}),sessions:e.runtimeSessions,signal:b(e.requestId)})}function z(e){let{flags:t,session:n}=e;return{platform:r(n.device),captureSnapshot:async(n,r)=>({snapshot:await e.captureSnapshot(t,{interactiveOnly:r?.interactiveOnly===!0,preferredBackend:r?.preferredBackend,includeRects:r?.includeRects===!0,signal:n.signal,boundCapture:e.touchExecutor?.captureSnapshot??e.gestures?.captureSnapshot})}),...B(e,()=>e.contextFromFlags(t,n.appBundleId,n.trace?.outPath)),...e.confirmOffscreenTargetVisible?{confirmOffscreenTargetVisible:async(t,n,r)=>await e.confirmOffscreenTargetVisible(n,r)}:{},...V(e.touchExecutor,e.expireRefFrame,t)}}function B(e,t){let n=e.gestures,r=e.pairedGestureViewport;return n?{resolveGestureViewport:async()=>r??await n.gestureViewport?.(t()),performGesture:async(r,i)=>(e.expireRefFrame(),H(await n.performPlan(i,t())))}:r?{resolveGestureViewport:async()=>r}:{}}function V(e,t,n){if(!e)return{};let{tapPoint:r,tapRef:i,fillPoint:a,fillRef:o,longPressPoint:s,hoverPoint:c,hoverRef:l}=e,u=async e=>(t(),H(await e()));return{tap:r?(e,t)=>u(()=>r(t,n)):void 0,tapTarget:i?(e,t)=>u(()=>i(t.ref)):void 0,fill:a?(e,t,n,r)=>u(()=>a(t,n,r)):void 0,fillTarget:o?(e,t,n,r)=>u(()=>o(t.ref,n,r)):void 0,longPress:s?(e,t,n)=>u(()=>s(t,n?.durationMs)):void 0,hover:c?(e,t)=>u(()=>c(t)):void 0,hoverTarget:l?(e,t)=>u(()=>l(t.ref)):void 0}}function H(e){return e&&typeof e==`object`?e:void 0}function U(e,t,n){return{ok:!1,error:{code:e,message:t,...n?{details:n}:{}}}}function W(e,t){if(!t||t.settle===!0)return null;let n=[];return t.settleQuietMs!==void 0&&n.push(`--settle-quiet`),n.length===0?null:U(`INVALID_ARGS`,`${e}: ${n.join(`, `)} require${n.length===1?`s`:``} --settle.`)}function G(e){if(e?.settle===!0)return{...e.settleQuietMs===void 0?{}:{quietMs:e.settleQuietMs},...e.timeoutMs===void 0?{}:{timeoutMs:e.timeoutMs}}}function K(t){try{return q(t),null}catch(t){if(t instanceof e)return U(t.code,t.message,t.details);throw t}}function q(t){let n=t.ref.startsWith(`@`)?t.ref.slice(1):t.ref,{admission:r,scope:i,currentGeneration:a}=t.frame;if(r.admitted)return;let o=r.reason===`plain_ref_requires_complete_frame`&&i!==`all`&&i.has(n)&&a!==void 0?`@${n}~s${a}`:void 0;throw new e(`COMMAND_FAILED`,Y(r.reason,t.ref),{reason:r.reason,ref:t.ref,currentGeneration:a,scope:i===`all`?`all`:Array.from(i),...t.mintedGeneration===void 0?{}:{mintedGeneration:t.mintedGeneration},...o?{suggestedRef:o}:{},hint:o?`Retry with the exact emitted ref ${o}.`:t.staleRefsWarning??J})}const J=`Capture a fresh interactive snapshot (snapshot -i) or use a stable selector, then retry.`;function Y(e,t){switch(e){case`ref_frame_expired`:return`Ref ${t} belongs to an expired ref frame — a device action since the snapshot invalidated it`;case`ref_generation_mismatch`:return`Ref ${t} was minted from a superseded snapshot generation`;case`plain_ref_requires_complete_frame`:return`Ref ${t} needs a complete snapshot — the current frame only authorizes its emitted refs`;case`ref_not_issued`:return`Ref ${t} was not issued by the current ref frame`}}export{I as a,E as c,W as i,D as l,K as n,L as o,G as r,j as s,q as t};
@@ -1 +1 @@
1
- import{i as e,p as t,s as n}from"./session-snapshot.js";import{o as r}from"./quality-warnings.js";import{t as i}from"./backend-snapshot-options.js";import{a,i as o,n as s,o as c,r as l}from"./interaction-ref-policy.js";async function u(e){let{session:t,flags:n,contextFromFlags:a,options:o}=e,s={...n??{},...i(o)},c=a(s,t.appBundleId,t.trace?.outPath),l=await e.capture({flags:s,options:o,context:c});return r(l.snapshotQuality)||e.publishSnapshot(l),l}const d=async(r,i,a,o,s)=>await u({session:r,flags:i,contextFromFlags:o,options:s,capture:async({flags:e,options:i,context:a})=>{let{snapshot:o}=await n({device:r.device,session:r,flags:e,outPath:e.out,logPath:a.logPath??``,includeRects:i.includeRects,androidFreshnessMode:i.androidFreshnessMode,signal:i.signal,...i.boundCapture?{captureData:async()=>await i.boundCapture(t({flags:e,session:r,snapshotScope:e.snapshotScope,includeRects:i.includeRects,signal:i.signal,context:a}))}:{}});return o},publishSnapshot:t=>{e(r,t),a.set(a.resolveStoredSessionName(r),r)}});function f(e){return a({...e,captureSnapshotForSession:e.captureSnapshotForSession??d})}async function p(e){return(await import(`./find.js`)).handleFindCommands(e)}async function m(e){return await(await import(`./interaction2.js`)).handleInteractionCommands({...e,captureSnapshotForSession:e.captureSnapshotForSession??d})}export{d as captureSnapshotForSession,f as createInteractionRuntime,c as finalizeTouchInteraction,p as handleFindCommands,m as handleInteractionCommands,l as readSettleRequest,s as refMutationAdmissionResponse,o as settleFlagGuardResponse};
1
+ import{i as e,p as t,s as n}from"./session-snapshot.js";import{s as r}from"./quality-warnings.js";import{t as i}from"./backend-snapshot-options.js";import{a,i as o,n as s,o as c,r as l}from"./interaction-ref-policy.js";async function u(e){let{session:t,flags:n,contextFromFlags:a,options:o}=e,s={...n??{},...i(o)},c=a(s,t.appBundleId,t.trace?.outPath),l=await e.capture({flags:s,options:o,context:c});return r(l.snapshotQuality)||e.publishSnapshot(l),l}const d=async(r,i,a,o,s)=>await u({session:r,flags:i,contextFromFlags:o,options:s,capture:async({flags:e,options:i,context:a})=>{let{snapshot:o}=await n({device:r.device,session:r,flags:e,outPath:e.out,logPath:a.logPath??``,includeRects:i.includeRects,androidFreshnessMode:i.androidFreshnessMode,signal:i.signal,...i.boundCapture?{captureData:async()=>await i.boundCapture(t({flags:e,session:r,snapshotScope:e.snapshotScope,includeRects:i.includeRects,signal:i.signal,context:a}))}:{}});return o},publishSnapshot:t=>{e(r,t),a.set(a.resolveStoredSessionName(r),r)}});function f(e){return a({...e,captureSnapshotForSession:e.captureSnapshotForSession??d})}async function p(e){return(await import(`./find.js`)).handleFindCommands(e)}async function m(e){return await(await import(`./interaction2.js`)).handleInteractionCommands({...e,captureSnapshotForSession:e.captureSnapshotForSession??d})}export{d as captureSnapshotForSession,f as createInteractionRuntime,c as finalizeTouchInteraction,p as handleFindCommands,m as handleInteractionCommands,l as readSettleRequest,s as refMutationAdmissionResponse,o as settleFlagGuardResponse};
@@ -1 +1 @@
1
- import{D as e,L as t,O as n,T as r,d as i,o as a,u as o,z as s}from"./sdk-contracts.js";import{f as c}from"./sdk-batch-runner.js";import{d as l,y as u}from"./sdk-device.js";import{C as d,h as f,m as p,p as ee}from"./sdk-batch.js";import{c as te,o as ne}from"./scroll-gesture.js";import{C as m,E as re,S as ie,v as ae,x as h}from"./script.js";import{A as oe,M as g,N as _,d as se,n as ce,r as v,t as le,u as ue}from"./session-snapshot.js";import{N as de,d as y}from"./parameterized-recorded-fill.js";import{m as fe,s as b}from"./runtime.js";import{n as x}from"./catalog.js";import{r as pe}from"./success-text.js";import{i as S,n as me,r as he}from"./click-button.js";import{r as ge,t as _e}from"./interaction-positionals.js";import{r as C}from"./diagnostics.js";import{t as ve}from"./timeouts.js";import"./diagnostics2.js";import"./retry.js";import"./gesture-plan.js";import{r as ye}from"./request-cancel.js";import"./request.js";import{i as be}from"./request-runtime-binding.js";import{n as w,t as T}from"./touch-reference-frame.js";import{o as xe,s as Se}from"./quality-warnings.js";import{i as Ce,r as E}from"./internal/daemon.js";import{r as we}from"./capture-disclosure.js";import{a as Te,c as Ee,i as D,l as De,n as O,o as k,r as A,s as Oe,t as ke}from"./interaction-ref-policy.js";import{t as j}from"./gesture-runtime.js";import{d as Ae,g as M,i as je,r as Me,u as Ne}from"./selector-runtime.js";import{n as Pe}from"./type-text-runtime.js";function Fe(t){let n=t.flags?.recordAs;if(n!==void 0){if(de(n),t.flags?.noRecord)throw new e(`INVALID_ARGS`,`fill --record-as cannot be combined with --no-record because no script step would be published.`);if(!t.isSessionRecording&&!t.replayPlanStep)throw new e(`INVALID_ARGS`,`fill --record-as requires an armed script recording. Start a fresh session with open --save-script, then retry the fill.`)}}async function N(e,t){if(!oe(t))return;let n=t.snapshot?.comparisonSafe===!0?t.snapshot:void 0;try{await e.captureSnapshotForSession(t,e.req.flags,e.sessionStore,e.contextFromFlags,{interactiveOnly:!0,androidFreshnessMode:`ref-refresh`})}catch(t){C({level:`warn`,phase:`android_ref_snapshot_refresh_failed`,data:{command:e.req.command,error:t instanceof Error?t.message:String(t)}})}return n}function P(e,t){return!l(e.device)||e.surface!==`desktop`&&e.surface!==`menubar`||e.surface===`menubar`&&(t===`click`||t===`press`)?null:a(`UNSUPPORTED_OPERATION`,`${t} is not supported on macOS ${e.surface} sessions yet. Open an app session to act, or use the ${e.surface} surface to inspect.`)}const Ie=new Set(f()),Le=new Set([`currentUptimeMs`,`gestureEndUptimeMs`,`gestureStartUptimeMs`,`sequenceResults`]);function F(e){if(e)return Object.fromEntries(Object.entries(e).filter(([e])=>!Le.has(e)))}function Re(e){return Be({fields:ze(e.command),input:e.input??{},data:F(e.data),controlledFields:Ie})}function ze(e){let t=d(e);if(!t)throw Error(`Missing response data transform descriptor for ${e}`);return t.fields}function Be(e){let t=Object.fromEntries(Object.entries(e.data??{}).filter(([t])=>!e.controlledFields.has(t)));for(let[n,r]of Object.entries(e.fields)){let i=e.input[n]===void 0?r.defaultValue:e.input[n];if(i===void 0||r.omitDefault===!0&&i===r.defaultValue){delete t[n];continue}t[n]=i}return Object.fromEntries(Object.entries(t).filter(([,e])=>e!==void 0))}async function Ve(e){let{session:t,flags:n,sessionStore:r,contextFromFlags:i,captureSnapshotForSession:a,observation:o}=e,s=t.screenRecording?.handle;if(!s)return;let c=s.inspect().touchReferenceFrame;if(c)return c;if(t.device.platform===`android`&&!t.lease?.leaseProvider&&!be(t.device)){if(!o)throw Error(`Android observation was not injected into the request`);let e=await o.readScreenSize(t.device),n={referenceWidth:e.width,referenceHeight:e.height};return s.setTouchReferenceFrame(n),n}let l=T(t.snapshot);if(l)return s.setTouchReferenceFrame(l),l;let u=await a(t,n,r,i,{interactiveOnly:!0}),d=T(u);return d&&s.setTouchReferenceFrame(d),d}async function He(e){try{return await Ve(e)}catch(t){C({level:`warn`,phase:`touch_reference_frame_resolve_failed`,data:{platform:e.session.device.platform,error:t instanceof Error?t.message:String(t)}});return}}function I(e){let{data:t,fallbackX:n,fallbackY:r,referenceFrame:i,extra:a}=e,o=We(a,n,r)??(typeof t?.message==`string`?t.message:void 0);return Ue({...t??{},...n===void 0||r===void 0?{}:{x:n,y:r},...i??{},...a??{},...pe(o)})}function Ue(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function We(e,t,n){let r=L(e,`text`);if(r!==void 0)return`Filled ${Array.from(r).length} chars`;let i=Ge(t,n),a=Ke(e);if(a)return Je(a,e??{},i);if(i)return qe(e,i)}function L(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function Ge(e,t){return e===void 0||t===void 0?``:` (${e}, ${t})`}function Ke(e){let t=L(e,`ref`);return t===void 0?L(e,`selector`):`@${t}`}function qe(e,t){return e?.gesture===`longpress`?`Long pressed${t}`:e?.gesture===`hover`?`Hovered${t}`:`Tapped${t}`}function Je(e,t,n){let r=typeof t.button==`string`?t.button:void 0;return t.gesture===`longpress`?`Long pressed ${e}${n}`:t.gesture===`hover`?`Hovered ${e}${n}`:r&&r!==`primary`?`Clicked ${r} ${e}${n}`:`Tapped ${e}${n}`}function R(e){if(e.length<2)return null;let t=Number(e[0]),n=Number(e[1]);return!Number.isFinite(t)||!Number.isFinite(n)?null:{x:t,y:n}}function z(e,t){let n=R(e);if(n)return{ok:!0,target:{kind:`point`,x:n.x,y:n.y}};let r=e[0]??``;if(r.startsWith(`@`)){let t=M(r);return t.ok?{ok:!0,target:{kind:`ref`,ref:t.ref,fallbackLabel:e.slice(1).join(` `).trim()},refGeneration:t.generation}:{ok:!1,response:t.response}}let i=e.join(` `).trim();return i?{ok:!0,target:{kind:`selector`,selector:i}}:{ok:!1,response:a(`INVALID_ARGS`,`${t} requires @ref, selector expression, or x y coordinates`)}}function Ye(e){let t=R(e);if(t)return{ok:!0,target:{kind:`point`,x:t.x,y:t.y},...tt(e[2])};let n=et(e),r=z(n.targetPositionals,`longpress`);return r.ok?{ok:!0,target:r.target,refGeneration:r.refGeneration,...n.duration}:r}function B(e){return{ok:!1,response:a(`INVALID_ARGS`,`fill requires text after ${e} (use "" to clear the field)`)}}function Xe(e){let t=Ze(e);if(!t)return{ok:!1,response:a(`INVALID_ARGS`,`fill requires x y text, @ref text, or selector text`)};switch(t.kind){case`ref`:{let n=M(e[0]??``);return n.ok?t.text===void 0?B(`ref`):{ok:!0,target:{kind:`ref`,ref:n.ref},refGeneration:n.generation,text:t.text}:{ok:!1,response:n.response}}case`point`:return t.text===void 0?B(`coordinates`):{ok:!0,target:{kind:`point`,x:t.target.x,y:t.target.y},text:t.text};case`selector`:return t.text===void 0||t.text.length>0&&!t.text.trim()?B(`selector`):{ok:!0,target:{kind:`selector`,selector:t.target.selector},text:t.text}}}function Ze(e){try{return _e(e)}catch{return null}}function Qe(e){let t=`evidence`in e?e.evidence:void 0,n=e.settle;return e.kind===`ref`?{ref:ge(e.target?.kind===`ref`?e.target.ref:void 0),refLabel:e.refLabel,selectorChain:e.selectorChain,targetHittable:e.targetHittable,hint:e.hint,evidence:t,settle:n,resolution:e.resolution}:e.kind===`selector`?{selector:e.target?.kind===`selector`?e.target.selector:void 0,selectorChain:e.selectorChain,refLabel:e.refLabel,targetHittable:e.targetHittable,hint:e.hint,evidence:t,settle:n,resolution:e.resolution}:{evidence:t,settle:n}}function $e(e,t){return e.kind===`point`?`coordinate tap`:t.kind===`ref`&&t.target?.kind===`ref`?t.target.ref:t.kind===`selector`&&t.target?.kind===`selector`?t.target.selector:`target`}function et(e){let t=e.at(-1);return e.length>1&&nt(t)?{targetPositionals:e.slice(0,-1),duration:{durationMs:Number(t)}}:{targetPositionals:e,duration:{}}}function tt(e){return e===void 0?{}:{durationMs:Number(e)}}function nt(e){return e===void 0||e.trim()===``?!1:Number.isFinite(Number(e))}const rt={source:`direct-ios`,kind:`not-observed`};function V(e,t){if(!it(e))return t;let{resolution:n,...r}=t;return r}function it(e){return`dispatchPath`in e&&e.dispatchPath===`maestro-non-hittable-fallback`}function H(e){return U({source:{kind:`corroborated-tap`,targetKind:e.targetKind,data:{warning:e.warning},publicData:{warning:e.warning},point:e.point,resolution:e.resolution},referenceFrame:e.referenceFrame,extra:e.extra})}function U(e){let{source:t,referenceFrame:n,extra:r}=e;if(t.kind===`runner-payload`||t.kind===`corroborated-tap`){let e={targetKind:t.targetKind,...V(t,{resolution:t.kind===`runner-payload`?rt:t.resolution}),...r??{}};return{result:I({data:t.data,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e}),responseData:I({data:t.publicData,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e})}}let{result:i}=t,a={targetKind:i.kind,...V(t,Qe(i)),...st(i.settle,e.settleRefsGeneration),...r??{}},o=I({data:i.backendResult,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:{...a,...ot(i)}}),s=I({data:t.publicData,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:a}),c=ct(`warning`in i?i.warning:void 0,e.staleRefsWarning);return c&&(o.warning=c,s.warning=c),{result:o,responseData:s,...at(i)}}function at(e){let t=W(e)?.node??(`node`in e?e.node:void 0),n=`preAction`in e?e.preAction?.nodes:void 0;return t&&n?{recordedTarget:{node:t,preActionNodes:n}}:{}}function ot(e){let t=W(e);return t?{selectorChain:t.selectorChain,refLabel:t.refLabel}:{}}function W(e){return`recordingTarget`in e?e.recordingTarget:void 0}function st(e,t){return!e?.diff||t===void 0?{}:{settle:{...e,refsGeneration:t}}}function ct(e,t){return t?e?`${e} ${t}`:t:e}async function lt(e){let{params:t,session:n,result:r,publicData:i,extra:a}=e,o=r.kind===`point`?await He({session:n,flags:t.req.flags,sessionStore:t.sessionStore,contextFromFlags:t.contextFromFlags,captureSnapshotForSession:t.captureSnapshotForSession,observation:t.androidObservation}):w(n.snapshot?.nodes??[]);return U({source:{kind:`runtime`,result:r,publicData:i},referenceFrame:o,extra:a,staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:le(n,r.settle)})}function G(e){return e.command?Re({command:e.command,input:e.flags,data:e.data}):F(e.data)}function ut(e,t){return e===`click`||e===`press`||e===`fill`?e:t}function K(e,t){if(!e)return{used:!1,extra:{}};let n=t?.maestroNonHittableCoordinateFallbackUsed===!0;return{used:n,extra:{maestroNonHittableCoordinateFallbackAllowed:!0,maestroNonHittableCoordinateFallbackUsed:n,...n?{maestroFallbackReason:`non-hittable-coordinate`}:{}}}}function q(e){return[String(e.x),String(e.y)]}function dt(t){let{error:n,snapshotGeneration:r,publishPartialRefs:i}=t;if(n.code!==`AMBIGUOUS_MATCH`)return n;let a=s(n.details);return a.length===0||r===void 0?n:(i(a),new e(n.code,n.message,{...n.details,refsGeneration:r},n.cause))}async function ft(t,n,r){let i=await Ne(t,r);if(i){if(i.permissionDialog)return`press ${n} opened an Android permission dialog (${i.foregroundPackage}) over ${i.expectedPackage}. ${i.hint}`;throw new e(`COMMAND_FAILED`,`press ${n} left ${t.appBundleId} and foregrounded ${i.foregroundPackage}. The tap likely escaped the app.`,i)}}function pt(e){return e.code===`COMMAND_FAILED`&&typeof e.details?.expectedPackage==`string`&&typeof e.details?.foregroundPackage==`string`}async function J(e){if(!mt(e))return;let t=gt(e.session.snapshot);if(!t)return;let n=await _t(e,t.snapshot.snapshotQuality,t.presentation);if(!(!n||!vt(t.snapshot,n,e.command)))return xt(t.snapshot,n,e.command)}function mt(e){return ht(e.command)&&n(e.error).code===`XCTEST_RECORDED_FAILURE`&&Ee(e.session,{skipPendingPostGestureStabilization:!1})}function ht(e){return e===`click`||e===`press`}function gt(e){if(!Y(e))return;let t=Date.now()-e.createdAt;if(t<0||t>15e3){C({level:`debug`,phase:`ios_tap_failure_corroboration_stale_baseline`,data:{ageMs:t}});return}let n=St(e.presentationKey);if(n){if(n.raw){C({level:`debug`,phase:`ios_tap_failure_corroboration_raw_baseline`,data:{presentationKey:e.presentationKey}});return}return{snapshot:e,presentation:n}}}async function _t(e,t,n){try{let r=Se(t);return await e.captureSnapshotForSession(e.session,Dt(e.flags,n),e.sessionStore,e.contextFromFlags,{interactiveOnly:n?.interactiveOnly??!0,...r?{preferredBackend:r}:{},signal:ye(e.requestId)})}catch(t){C({level:`debug`,phase:`ios_tap_failure_corroboration_capture_failed`,data:{command:e.command,error:t instanceof Error?t.message:String(t)}});return}}function vt(e,t,n){let r=yt(e,t);return r===void 0?bt(e,t,n):r?!0:(C({level:`debug`,phase:`ios_tap_failure_corroboration_identity_mismatch`,data:{command:n}}),!1)}function yt(e,t){if(e.comparisonKey!==void 0||t.comparisonKey!==void 0)return e.comparisonKey!==void 0&&e.comparisonKey===t.comparisonKey}function bt(e,t,n){let r=e.snapshotQuality?.backend,i=t.snapshotQuality?.backend;return!r||r!==i?(C({level:`debug`,phase:`ios_tap_failure_corroboration_backend_mismatch`,data:{command:n,baselineBackend:r,afterBackend:i}}),!1):e.presentationKey===t.presentationKey||(C({level:`debug`,phase:`ios_tap_failure_corroboration_scope_mismatch`,data:{command:n,baselinePresentationKey:e.presentationKey,afterPresentationKey:t.presentationKey}}),!1)}function xt(e,t,n){if(!Y(t))return;let r=b(e.nodes),i=b(t.nodes);if(r.digest!==i.digest)return C({level:`warn`,phase:`ios_tap_failure_corroborated`,data:{command:n,beforeNodeCount:r.nodeCount,afterNodeCount:i.nodeCount}}),{warning:`XCTest reported the tap as failed, but a same-scope post-action accessibility capture changed; treating the tap as landed. Observe the current screen before issuing another tap.`}}function Y(e){return!!(e&&e.nodes.length>0&&!xe(e.snapshotQuality))}function St(e){if(!e)return;let t;try{t=JSON.parse(e)}catch{return}return Ct(t)}function Ct(e){let t=wt(e);if(!(!t||typeof t.interactiveOnly!=`boolean`||typeof t.raw!=`boolean`)&&!(!Tt(t.depth)||!Et(t.scope)))return{interactiveOnly:t.interactiveOnly,...typeof t.depth==`number`?{depth:t.depth}:{},...typeof t.scope==`string`?{scope:t.scope}:{},raw:t.raw}}function wt(e){return typeof e==`object`&&e?e:void 0}function Tt(e){return e==null||typeof e==`number`}function Et(e){return e==null||typeof e==`string`}function Dt(e,t){if(!(!e&&!t))return{...e??{},out:void 0,...t?{snapshotDepth:t.depth,snapshotScope:t.scope,snapshotRaw:t.raw}:{}}}function Ot(e){return e.kind===`selector`?{selector:e.selector}:e.kind===`ref`?{ref:e.ref.startsWith(`@`)?e.ref.slice(1):e.ref}:{}}async function kt(e,t,n,r,i){if(e.lease?.leaseProvider)return{aborted:!1,readiness:{status:`clear`},runtimeResult:await r()};let a=await E({session:e,command:t,phase:`before-command`,observation:i});if(n.refContext&&a.status===`recovered`){let t=O({ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration,staleRefsWarning:n.refContext.staleRefsWarning,frame:_({session:e,ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration})});if(t)return{aborted:!0,response:t}}let o=await r();return await E({session:e,command:t,phase:`after-command`,observation:i}),{aborted:!1,readiness:a,runtimeResult:o}}async function X(e,t){let r=e.sessionStore.get(e.sessionName);if(!r)return o();let i=Te({...e,touchExecutor:t.touchExecutor}),a=Date.now();try{let n,o=await kt(r,e.req.command,{refContext:t.refContext},async()=>{let e=await t.run(i);return n=await t.afterRun?.(e),e},e.androidObservation);if(o.aborted)return o.response;let{readiness:s,runtimeResult:c}=o,l=Date.now(),{result:u,responseData:d,recordedTarget:f}=await t.buildPayloads(c),p=[...s.status===`recovered`?[s.warning]:[],...n?[n]:[]];if(p.length>0){let e=[...typeof d.warning==`string`?[d.warning]:[],...p].join(` `);u.warning=e,d.warning=e}return k({session:r,sessionStore:e.sessionStore,command:e.req.command,positionals:e.req.positionals??[],retryPositionals:Nt(e.req.command,c),flags:e.req.flags,result:u,responseData:d,recordedTarget:f,actionStartedAt:a,actionFinishedAt:l,androidFreshnessBaseline:t.androidFreshnessBaseline})}catch(i){let o=dt({error:n(i),snapshotGeneration:r.snapshotGeneration,publishPartialRefs:e=>ce(r,e)});if(pt(o))throw o;return o.code===`AMBIGUOUS_MATCH`?Z(o):await At({error:o,handlerParams:e,session:r,target:t.iosTapCorroboration?.target,extra:t.iosTapCorroboration?.extra,actionStartedAt:a,androidFreshnessBaseline:t.androidFreshnessBaseline})||Z(o)}}async function At(e){if(!e.target)return;let t=fe(e.error);if(!t&&y(e.session))return;let n=await J({error:e.error,command:e.handlerParams.req.command,requestId:e.handlerParams.req.meta?.requestId,flags:e.handlerParams.req.flags,session:e.session,sessionStore:e.handlerParams.sessionStore,contextFromFlags:e.handlerParams.contextFromFlags,captureSnapshotForSession:e.handlerParams.captureSnapshotForSession});if(!n)return;let r=jt({target:e.target,resolvedTarget:t,warning:n.warning,referenceFrame:w(e.session.snapshot?.nodes??[]),extra:e.extra});return k({session:e.session,sessionStore:e.handlerParams.sessionStore,command:e.handlerParams.req.command,positionals:e.handlerParams.req.positionals??[],flags:e.handlerParams.req.flags,result:r.result,responseData:r.responseData,recordedTarget:r.recordedTarget,scheduleInteractionOutcomeRetry:!1,actionStartedAt:e.actionStartedAt,actionFinishedAt:Date.now(),androidFreshnessBaseline:e.androidFreshnessBaseline})}function jt(e){return e.resolvedTarget?U({source:{kind:`runtime`,result:{...e.resolvedTarget,warning:e.warning}},referenceFrame:e.referenceFrame,extra:e.extra}):H({targetKind:e.target.kind,point:Mt(e.target),warning:e.warning,referenceFrame:e.referenceFrame,extra:{...Ot(e.target),...e.extra??{}}})}function Mt(e){return e.kind===`point`?{x:e.x,y:e.y}:void 0}function Z(e){return{ok:!1,error:t(e)}}function Nt(e,t){if(!(t.kind===`ref`&&!t.node)&&(e===`click`||e===`press`))return t.point?q(t.point):void 0}async function Q(e,t,n,r){let i=await se({device:t.device,command:n,requiresCapture:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?{ok:!0,touchExecutor:ue(i.runtime,e.contextFromFlags(e.req.flags,t.appBundleId,t.trace?.outPath))}:i}async function Pt(e){let{req:t,sessionName:n,sessionStore:r}=e,i=r.get(n);if(i){let e=P(i,`fill`);if(e)return e}if(!i)return o();let a=Xe(t.positionals??[]);if(!a.ok)return a.response;let s=await Q(e,i,`fill`,a.target.kind!==`point`);if(!s.ok)return s.response;let{touchExecutor:c}=s;Fe({flags:t.flags,replayPlanStep:t.internal?.replayPlanStep===!0,isSessionRecording:y(i)});let l=D(`fill`,t.flags);if(l)return l;let u=await Ft(e,i,a.target,a.refGeneration);if(u.response)return u.response;let{staleRefsWarning:d}=u,f=t.internal?.replayTargetGuard;return await X(e,{touchExecutor:c,refContext:a.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0?{ref:a.target.ref,mintedGeneration:a.refGeneration,staleRefsWarning:d}:void 0,run:async e=>await e.interactions.fill(a.target,a.text,{session:n,requestId:t.meta?.requestId,delayMs:t.flags?.delayMs,allowNonHittableCoordinateFallback:t.flags?.maestro?.allowNonHittableCoordinateFallback,verify:t.flags?.verify,settle:A(t.flags),expectedResolvedTarget:f,preresolvedTarget:t.internal?.findResolvedTarget}),buildPayloads:e=>It({session:i,result:e,text:a.text,flags:t.flags,staleRefsWarning:d})})}async function Ft(e,t,n,r){if(n.kind!==`ref`)return{};let i=e.req.internal?.findResolvedTarget===void 0?v({session:t,ref:n.ref,mintedGeneration:r}):void 0,a=e.refSnapshotFlagGuardResponse(`fill`,e.req.flags);if(a)return{response:a,staleRefsWarning:i};let o=e.req.internal?.findResolvedTarget?null:O({ref:n.ref,mintedGeneration:r,staleRefsWarning:i,frame:_({session:t,ref:n.ref,mintedGeneration:r})});return o?{response:o,staleRefsWarning:i}:(await N(e,t),{staleRefsWarning:i})}function It(e){let{session:t,result:n}=e,r=K(e.flags?.maestro?.allowNonHittableCoordinateFallback===!0,n.backendResult),i=n.kind===`point`?void 0:w(t.snapshot?.nodes??[]);return U({source:{kind:`runtime`,result:n,publicData:G({command:`fill`,flags:e.flags,data:n.backendResult}),...r.used?{dispatchPath:`maestro-non-hittable-fallback`}:{}},referenceFrame:i,extra:{text:e.text,...r.extra},staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:le(t,n.settle)})}async function Lt(e,n,r,i){let a=e,o={selector:r.raw},s=Date.now();g(n);try{let e=await i(r)??{},t=Date.now(),c=zt(e),l=G({command:ut(a.req.command,`press`),flags:a.req.flags,data:e}),u=K(r.allowNonHittableCoordinateFallback===!0,e),{result:d,responseData:f}=U({source:{kind:`runner-payload`,targetKind:`selector`,data:e,publicData:l,point:c,dispatchPath:u.used?`maestro-non-hittable-fallback`:`maestro-direct-selector`},referenceFrame:Bt(e),extra:{...o,...u.extra}});return k({session:n,sessionStore:a.sessionStore,command:a.req.command,positionals:a.req.positionals??[],retryPositionals:q(c),flags:a.req.flags,result:d,responseData:f,actionStartedAt:s,actionFinishedAt:t})}catch(e){return await Rt({error:e,handlerParams:a,session:n,extra:o,positionals:[],actionStartedAt:s})||(Oe(e,{delegateSemanticFailures:r.allowNonHittableCoordinateFallback!==!0})?(C({level:`debug`,phase:`ios_direct_selector_tap_fallback`,data:{selector:r.raw,error:e instanceof Error?e.message:String(e)}}),null):{ok:!1,error:t(e)})}}async function Rt(e){let{error:t,handlerParams:n,session:r,extra:i,positionals:a,actionStartedAt:o}=e,s=await J({error:t,command:n.req.command,requestId:n.req.meta?.requestId,flags:n.req.flags,session:r,sessionStore:n.sessionStore,contextFromFlags:n.contextFromFlags,captureSnapshotForSession:n.captureSnapshotForSession});if(!s)return;let{result:c,responseData:l}=H({targetKind:`selector`,warning:s.warning,resolution:{source:`direct-ios`,kind:`not-observed`},extra:i});return k({session:r,sessionStore:n.sessionStore,command:n.req.command,positionals:n.req.positionals??a,flags:n.req.flags,result:c,responseData:l,scheduleInteractionOutcomeRetry:!1,actionStartedAt:o,actionFinishedAt:Date.now()})}function zt(e){let t=typeof e.x==`number`?e.x:void 0,n=typeof e.y==`number`?e.y:void 0;return t!==void 0&&n!==void 0?{x:t,y:n}:{x:0,y:0}}function Bt(e){return typeof e.referenceWidth==`number`&&typeof e.referenceHeight==`number`?{referenceWidth:e.referenceWidth,referenceHeight:e.referenceHeight}:void 0}function Vt(e){let{session:t,commandLabel:n,target:r,flags:i}=e;return!e.tapElementSelectorAvailable||i?.maestro?.allowNonHittableCoordinateFallback!==!0||n!==`click`||r.kind!==`selector`||y(t)||Wt(i)||p(n)&&i?.verify===!0||ee(n)&&i?.settle===!0?null:Ht(t,r.selector,i)}function Ht(e,t,n){let r=De({session:e,selectorExpression:t});return r?{...r,...n?.maestro?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},...n?.maestro?.expectedTapPoint?{expectedPoint:n.maestro.expectedTapPoint}:{}}:null}const Ut=[`count`,`intervalMs`,`holdMs`,`jitterPx`,`doubleTap`];function Wt(e){return Ut.some(t=>e?.[t]!==void 0)?!0:e?.clickButton!==void 0&&e.clickButton!==`primary`}const Gt=new Set([`press`,`click`]);async function Kt(e,t){let{req:n,sessionStore:r,sessionName:i}=e,a=r.get(i);if(!a)return{response:o()};let s=t===`click`?`click`:t,c=qt(a,t,s,n.flags);if(c)return{response:c};let l=n.positionals??[],u=t===`longpress`?Ye(l):z(l,s);if(!u.ok)return{response:u.response};let d=Yt(a,n,u),f=Zt(e,a,t,u,d);if(f.response)return{response:f.response};let p=S(n.flags);return{admitted:{session:a,commandLabel:s,clickButton:p,resultButtonTag:me(p),target:u.target,durationMs:t===`longpress`?u.durationMs:void 0,staleRefsWarning:d,refContext:Xt(n,u,d)}}}function qt(e,t,n,r){return P(e,n)||D(t,r)||Jt(e,t,n,r)}function Jt(e,t,n,r){let i=S(r);if(!Gt.has(t)||i===`primary`)return;let o=he({commandLabel:n,platform:u(e.device),button:i,count:r?.count,intervalMs:r?.intervalMs,holdMs:r?.holdMs,jitterPx:r?.jitterPx,doubleTap:r?.doubleTap});if(o)return a(o.code,o.message,o.details)}function Yt(e,t,n){if(n.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0)return v({session:e,ref:n.target.ref,mintedGeneration:n.refGeneration})}function Xt(e,t,n){if(t.target.kind===`ref`&&e.internal?.findResolvedTarget===void 0)return{ref:t.target.ref,mintedGeneration:t.refGeneration,staleRefsWarning:n}}function Zt(e,t,n,r,i){let{req:a}=e;if(r.target.kind!==`ref`)return{};let o=e.refSnapshotFlagGuardResponse(n===`click`?`press`:n,a.flags);if(o)return{response:o};let s=a.internal?.findResolvedTarget?null:O({ref:r.target.ref,mintedGeneration:r.refGeneration,staleRefsWarning:i,frame:_({session:t,ref:r.target.ref,mintedGeneration:r.refGeneration})});return s?{response:s}:{}}async function $(e,t){let n=await Kt(e,t);if(`response`in n)return n.response;let{admitted:r}=n,i=await Q(e,r.session,t,r.target.kind!==`point`);if(!i.ok)return i.response;let{touchExecutor:a}=i,o=r.target.kind===`ref`?await N(e,r.session):void 0,s={...r,androidFreshnessBaseline:o},c=e.req.internal?.replayTargetGuard?null:Vt({session:s.session,commandLabel:s.commandLabel,target:s.target,flags:e.req.flags,tapElementSelectorAvailable:a.tapElementSelector!==void 0});if(c&&a.tapElementSelector){let t=await Lt(e,s.session,c,a.tapElementSelector);if(t)return t}return await X(e,{...Qt(e,t,s),touchExecutor:a})}function Qt(e,t,n){let{req:r,sessionName:i}=e,{session:a,target:o,durationMs:s,staleRefsWarning:c,resultButtonTag:l}=n,u=t===`longpress`?{...s===void 0?{}:{durationMs:s},gesture:`longpress`}:t===`hover`?{gesture:`hover`}:l;return{androidFreshnessBaseline:n.androidFreshnessBaseline,refContext:n.refContext,iosTapCorroboration:{target:o,extra:u},run:async e=>await $t({runtime:e,command:t,target:o,sessionName:i,requestId:r.meta?.requestId,clickButton:n.clickButton,flags:r.flags,durationMs:s,expectedResolvedTarget:r.internal?.replayTargetGuard,preresolvedTarget:r.internal?.findResolvedTarget}),afterRun:async t=>{if(!a.lease?.leaseProvider)return await ft(a,$e(o,t),e.androidObservation)},buildPayloads:async n=>{let i=tn(n);return await lt({params:e,session:a,result:n,staleRefsWarning:c,publicData:G({command:t===`longpress`||t===`hover`?void 0:t,flags:r.flags,data:n.backendResult}),extra:t===`longpress`?{...i===void 0?{}:{durationMs:i},gesture:`longpress`}:t===`hover`?{gesture:`hover`}:l})}}}async function $t(e){let{runtime:t,command:n,target:r,sessionName:i,requestId:a,flags:o,expectedResolvedTarget:s}=e,c={session:i,requestId:a,settle:A(o),expectedResolvedTarget:s};switch(n){case`longpress`:return await t.interactions.longPress(r,{...c,durationMs:e.durationMs});case`hover`:return await t.interactions.hover(r,c);case`click`:return await t.interactions.click(r,en(e,c));case`press`:return await t.interactions.press(r,en(e,c))}}function en(e,t){let{flags:n}=e;return{...t,button:e.clickButton,count:n?.count,intervalMs:n?.intervalMs,holdMs:n?.holdMs,jitterPx:n?.jitterPx,doubleTap:n?.doubleTap,verify:n?.verify,preresolvedTarget:e.preresolvedTarget}}function tn(e){return`durationMs`in e?e.durationMs:void 0}function nn(e,t={}){let n=typeof t.executionProfile==`string`?t.executionProfile:void 0;return{kind:e.kind,durationMs:e.durationMs,pointerCount:e.pointerCount,from:e.from,to:e.to,...e.kind===`drag`?{targets:e.targets}:{},...e.backendResult??{},...t,...n?{timing:{executionProfile:n,gestureDurationMs:e.durationMs}}:{},message:e.message}}function rn(e){return`refused`in e}async function an(e){return await dn(e,`gesture`,async t=>on(e,t))}async function on(e,t){let n=re(e.req.input),r=pn(n,t);r.intent===`pan`&&e.req.internal?.gestureExecutionProfile&&(r.executionProfile=e.req.internal.gestureExecutionProfile);let i=await j({device:t.device,input:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?cn(n,r,await sn(un(e,i.gestures),{session:e.sessionName,requestId:e.req.meta?.requestId},r,e.req.internal),e.req.flags):{refused:i.response}}async function sn(e,t,n,r){if(n.intent!==`drag`)return await e.interactions.gesture({...t,gesture:n});let i=r?.replayTargetGuards??(r?.replayTargetGuard?{source:r.replayTargetGuard}:void 0);return await e.interactions.gesture({...t,gesture:n,...i?{expectedResolvedTargets:i}:{}})}function cn(e,t,n,r){let i=n.kind===`drag`?n.recording:void 0,a=i?.sourceTarget,o=i?.destinationTarget;return{positionals:hn(e,i),flags:Sn(e,r),responseData:nn(n,{executionProfile:fn(t)}),...e.kind===`pinch`?{recordingResultExtra:{scale:e.scale}}:a?{recordingResultExtra:{selectorChain:a.selectorChain}}:{},...a&&o?{recordedTargets:{source:{node:a.node,preActionNodes:a.preActionNodes},destination:{node:o.node,preActionNodes:o.preActionNodes}}}:{}}}async function ln(e){return await dn(e,`swipe`,async t=>{let n=gn(e.req.input),r=await j({device:t.device,input:m(n).gesture,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!r.ok)return{refused:r.response};let i=n.count??1,a=n.pauseMs??0,o=n.pattern??`one-way`,s=await bn(un(e,r.gestures),e,n,i,a,o);return{positionals:yn(n),flags:e.req.flags,responseData:nn(s,{from:n.from,to:n.to,x1:n.from.x,y1:n.from.y,x2:n.to.x,y2:n.to.y,effectiveDurationMs:s.durationMs,timingMode:`direct`,executionProfile:`endpoint-hold`,count:i,pauseMs:a,pattern:o})}})}function un(e,t){return Te({...e,gestures:t,pairedGestureViewport:e.req.internal?.gestureViewport})}async function dn(e,n,r){let i=e.sessionStore.get(e.sessionName);if(!i)return o();let a=Date.now();try{let t=be(i.device),o=t?{status:`clear`}:await E({session:i,command:n,phase:`before-command`,observation:e.androidObservation}),s=await r(i);if(rn(s))return s.refused;t||await E({session:i,command:n,phase:`after-command`,observation:e.androidObservation});let c={...s.responseData};return o.status===`recovered`&&(c.warning=`${typeof c.warning==`string`?`${c.warning} `:``}${o.warning}`),k({session:i,sessionStore:e.sessionStore,command:n,actionCommand:n,positionals:s.positionals,flags:s.flags,result:{...c,...s.recordingResultExtra??{}},responseData:c,recordedTargets:s.recordedTargets,actionStartedAt:a,actionFinishedAt:Date.now()})}catch(e){return{ok:!1,error:t(e)}}}function fn(e){if(e.intent===`fling`)return`endpoint-hold`;if(e.intent===`pan`)return e.executionProfile??`timed-pan`;if(e.intent===`drag`)return`timed-pan`}function pn(e,t){let n=ie(e);return n.intent===`drag`?{...n,source:mn(n.source,t),destination:mn(n.destination,t)}:n}function mn(t,n){if(!t.startsWith(`@`))return t;let a=r(t);if(!a)throw new e(`INVALID_ARGS`,`Invalid ref "${t}" — malformed generation suffix.`,{hint:i});return ke({ref:a.base,mintedGeneration:a.generation,frame:_({session:n,ref:a.base,mintedGeneration:a.generation})}),a.base}function hn(e,t){return e.kind!==`drag`||!t?h(e):h({...e,source:t.sourceSelector??e.source,destination:t.destinationSelector??e.destination})}function gn(t){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`swipe requires structured object input`);ae(t);let n=t,r=n.pattern;if(r!==void 0&&r!==`one-way`&&r!==`ping-pong`)throw new e(`INVALID_ARGS`,`swipe pattern must be one-way or ping-pong`);let i={from:vn(n.from,`swipe from`),to:vn(n.to,`swipe to`),count:c(n,`count`,{min:1,max:200}),pauseMs:c(n,`pauseMs`,{min:0,max:ne}),pattern:r};return _n(i),i}function _n(t){let n=t.count??1,r=t.pauseMs??0,i=n*100+Math.max(0,n-1)*r;if(!(i<=6e4))throw new e(`INVALID_ARGS`,`Swipe series must fit within ${te}ms.`,{count:n,pauseMs:r,gestureDurationMs:100,scheduledDurationMs:i,hint:`Reduce --count or --pause-ms.`})}function vn(t,n){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`${n} must be a point`);let r=t;if(typeof r.x!=`number`||!Number.isFinite(r.x))throw new e(`INVALID_ARGS`,`${n} x must be finite`);if(typeof r.y!=`number`||!Number.isFinite(r.y))throw new e(`INVALID_ARGS`,`${n} y must be finite`);return{x:r.x,y:r.y}}function yn(e){return[String(e.from.x),String(e.from.y),String(e.to.x),String(e.to.y)]}async function bn(e,t,n,r,i,a){let o;for(let s=0;s<r;s+=1){let c=m(xn(n,a,s));o=await e.interactions.gesture({session:t.sessionName,requestId:t.req.meta?.requestId,gesture:c.gesture}),i>0&&s+1<r&&await ve(i)}if(!o)throw Error(`Swipe orchestration did not execute a gesture.`);return o}function xn(e,t,n){return t!==`ping-pong`||n%2!=1?e:{...e,from:e.to,to:e.from}}function Sn(e,t){return e.kind!==`pan`||e.pointerCount===void 0?t:{...t,pointerCount:e.pointerCount}}async function Cn(e){let t={},n=await wn({...e,refSnapshotFlagGuardResponse:Ae,activationProof:t});return n&&we(n,t.state)}async function wn(e){switch(e.req.command){case`press`:return await $(e,`press`);case`click`:return await $(e,`click`);case`longpress`:return await $(e,`longpress`);case`hover`:return await $(e,`hover`);case`fill`:return await Pt(e);default:return await Tn(e)}}async function Tn(e){switch(e.req.command){case x.gesture:return await an(e);case x.swipe:return await ln(e);case x.type:return await En(e);case`get`:return await Me(e);case`is`:return await je(e);default:return null}}async function En(e){let{sessionName:t,sessionStore:n}=e,r=n.get(t);if(!r)return o();let i=await Pe({device:r.device,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!i.ok)return i.response;let a=await Dn(r,e.androidObservation);return a.response?a.response:await On(e,r,i.typeText,a.warning)}async function Dn(e,t){if(e.device.platform===`android`&&e.screenRecording){let n=await Ce({session:e,observation:t});if(n.status===`failed`)return{response:a(`COMMAND_FAILED`,`Android system dialog blocked the recording session`)};if(n.status===`unknown`)return{warning:n.warning}}return{}}async function On(e,n,r,i){let{req:a,sessionStore:o}=e,s=Date.now();try{let t=await E({session:n,command:a.command,phase:`before-command`,observation:e.androidObservation});g(n);let c=await r(a.positionals??[],e.contextFromFlags(a.flags,n.appBundleId,n.trace?.outPath));await E({session:n,command:a.command,phase:`after-command`,observation:e.androidObservation});let l=Date.now(),u={...c};return kn(u,i,t),k({session:n,sessionStore:o,command:a.command,positionals:a.positionals??[],flags:a.flags,result:u,responseData:u,actionStartedAt:s,actionFinishedAt:l})}catch(e){return{ok:!1,error:t(e)}}}function kn(e,t,n){let r=[typeof e.warning==`string`?e.warning:void 0,t];n.status===`recovered`&&r.push(n.warning);let i=r.filter(e=>typeof e==`string`&&e.length>0).join(` `);i.length>0&&(e.warning=i)}export{Cn as handleInteractionCommands};
1
+ import{D as e,L as t,O as n,T as r,d as i,o as a,u as o,z as s}from"./sdk-contracts.js";import{f as c}from"./sdk-batch-runner.js";import{b as l,f as u}from"./sdk-device.js";import{C as d,h as f,m as p,p as ee}from"./sdk-batch.js";import{c as te,o as ne}from"./scroll-gesture.js";import{C as m,E as re,S as ie,v as ae,x as h}from"./script.js";import{A as oe,M as g,N as _,d as se,n as ce,r as v,t as le,u as ue}from"./session-snapshot.js";import{N as de,d as y}from"./parameterized-recorded-fill.js";import{m as fe,s as b}from"./runtime.js";import{n as x}from"./catalog.js";import{r as pe}from"./success-text.js";import{i as S,n as me,r as he}from"./click-button.js";import{r as ge,t as _e}from"./interaction-positionals.js";import{r as C}from"./diagnostics.js";import{t as ve}from"./timeouts.js";import"./diagnostics2.js";import"./retry.js";import"./gesture-plan.js";import{r as ye}from"./request-cancel.js";import"./request.js";import{i as be}from"./request-runtime-binding.js";import{n as w,t as T}from"./touch-reference-frame.js";import{c as xe,s as Se}from"./quality-warnings.js";import{i as Ce,r as E}from"./internal/daemon.js";import{r as we}from"./capture-disclosure.js";import{a as Te,c as Ee,i as D,l as De,n as O,o as k,r as A,s as Oe,t as ke}from"./interaction-ref-policy.js";import{t as j}from"./gesture-runtime.js";import{d as Ae,g as M,i as je,r as Me,u as Ne}from"./selector-runtime.js";import{n as Pe}from"./type-text-runtime.js";function Fe(t){let n=t.flags?.recordAs;if(n!==void 0){if(de(n),t.flags?.noRecord)throw new e(`INVALID_ARGS`,`fill --record-as cannot be combined with --no-record because no script step would be published.`);if(!t.isSessionRecording&&!t.replayPlanStep)throw new e(`INVALID_ARGS`,`fill --record-as requires an armed script recording. Start a fresh session with open --save-script, then retry the fill.`)}}async function N(e,t){if(!oe(t))return;let n=t.snapshot?.comparisonSafe===!0?t.snapshot:void 0;try{await e.captureSnapshotForSession(t,e.req.flags,e.sessionStore,e.contextFromFlags,{interactiveOnly:!0,androidFreshnessMode:`ref-refresh`})}catch(t){C({level:`warn`,phase:`android_ref_snapshot_refresh_failed`,data:{command:e.req.command,error:t instanceof Error?t.message:String(t)}})}return n}function P(e,t){return!u(e.device)||e.surface!==`desktop`&&e.surface!==`menubar`||e.surface===`menubar`&&(t===`click`||t===`press`)?null:a(`UNSUPPORTED_OPERATION`,`${t} is not supported on macOS ${e.surface} sessions yet. Open an app session to act, or use the ${e.surface} surface to inspect.`)}const Ie=new Set(f()),Le=new Set([`currentUptimeMs`,`gestureEndUptimeMs`,`gestureStartUptimeMs`,`sequenceResults`]);function F(e){if(e)return Object.fromEntries(Object.entries(e).filter(([e])=>!Le.has(e)))}function Re(e){return Be({fields:ze(e.command),input:e.input??{},data:F(e.data),controlledFields:Ie})}function ze(e){let t=d(e);if(!t)throw Error(`Missing response data transform descriptor for ${e}`);return t.fields}function Be(e){let t=Object.fromEntries(Object.entries(e.data??{}).filter(([t])=>!e.controlledFields.has(t)));for(let[n,r]of Object.entries(e.fields)){let i=e.input[n]===void 0?r.defaultValue:e.input[n];if(i===void 0||r.omitDefault===!0&&i===r.defaultValue){delete t[n];continue}t[n]=i}return Object.fromEntries(Object.entries(t).filter(([,e])=>e!==void 0))}async function Ve(e){let{session:t,flags:n,sessionStore:r,contextFromFlags:i,captureSnapshotForSession:a,observation:o}=e,s=t.screenRecording?.handle;if(!s)return;let c=s.inspect().touchReferenceFrame;if(c)return c;if(t.device.platform===`android`&&!t.lease?.leaseProvider&&!be(t.device)){if(!o)throw Error(`Android observation was not injected into the request`);let e=await o.readScreenSize(t.device),n={referenceWidth:e.width,referenceHeight:e.height};return s.setTouchReferenceFrame(n),n}let l=T(t.snapshot);if(l)return s.setTouchReferenceFrame(l),l;let u=await a(t,n,r,i,{interactiveOnly:!0}),d=T(u);return d&&s.setTouchReferenceFrame(d),d}async function He(e){try{return await Ve(e)}catch(t){C({level:`warn`,phase:`touch_reference_frame_resolve_failed`,data:{platform:e.session.device.platform,error:t instanceof Error?t.message:String(t)}});return}}function I(e){let{data:t,fallbackX:n,fallbackY:r,referenceFrame:i,extra:a}=e,o=We(a,n,r)??(typeof t?.message==`string`?t.message:void 0);return Ue({...t??{},...n===void 0||r===void 0?{}:{x:n,y:r},...i??{},...a??{},...pe(o)})}function Ue(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function We(e,t,n){let r=L(e,`text`);if(r!==void 0)return`Filled ${Array.from(r).length} chars`;let i=Ge(t,n),a=Ke(e);if(a)return Je(a,e??{},i);if(i)return qe(e,i)}function L(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function Ge(e,t){return e===void 0||t===void 0?``:` (${e}, ${t})`}function Ke(e){let t=L(e,`ref`);return t===void 0?L(e,`selector`):`@${t}`}function qe(e,t){return e?.gesture===`longpress`?`Long pressed${t}`:e?.gesture===`hover`?`Hovered${t}`:`Tapped${t}`}function Je(e,t,n){let r=typeof t.button==`string`?t.button:void 0;return t.gesture===`longpress`?`Long pressed ${e}${n}`:t.gesture===`hover`?`Hovered ${e}${n}`:r&&r!==`primary`?`Clicked ${r} ${e}${n}`:`Tapped ${e}${n}`}function R(e){if(e.length<2)return null;let t=Number(e[0]),n=Number(e[1]);return!Number.isFinite(t)||!Number.isFinite(n)?null:{x:t,y:n}}function z(e,t){let n=R(e);if(n)return{ok:!0,target:{kind:`point`,x:n.x,y:n.y}};let r=e[0]??``;if(r.startsWith(`@`)){let t=M(r);return t.ok?{ok:!0,target:{kind:`ref`,ref:t.ref,fallbackLabel:e.slice(1).join(` `).trim()},refGeneration:t.generation}:{ok:!1,response:t.response}}let i=e.join(` `).trim();return i?{ok:!0,target:{kind:`selector`,selector:i}}:{ok:!1,response:a(`INVALID_ARGS`,`${t} requires @ref, selector expression, or x y coordinates`)}}function Ye(e){let t=R(e);if(t)return{ok:!0,target:{kind:`point`,x:t.x,y:t.y},...tt(e[2])};let n=et(e),r=z(n.targetPositionals,`longpress`);return r.ok?{ok:!0,target:r.target,refGeneration:r.refGeneration,...n.duration}:r}function B(e){return{ok:!1,response:a(`INVALID_ARGS`,`fill requires text after ${e} (use "" to clear the field)`)}}function Xe(e){let t=Ze(e);if(!t)return{ok:!1,response:a(`INVALID_ARGS`,`fill requires x y text, @ref text, or selector text`)};switch(t.kind){case`ref`:{let n=M(e[0]??``);return n.ok?t.text===void 0?B(`ref`):{ok:!0,target:{kind:`ref`,ref:n.ref},refGeneration:n.generation,text:t.text}:{ok:!1,response:n.response}}case`point`:return t.text===void 0?B(`coordinates`):{ok:!0,target:{kind:`point`,x:t.target.x,y:t.target.y},text:t.text};case`selector`:return t.text===void 0||t.text.length>0&&!t.text.trim()?B(`selector`):{ok:!0,target:{kind:`selector`,selector:t.target.selector},text:t.text}}}function Ze(e){try{return _e(e)}catch{return null}}function Qe(e){let t=`evidence`in e?e.evidence:void 0,n=e.settle;return e.kind===`ref`?{ref:ge(e.target?.kind===`ref`?e.target.ref:void 0),refLabel:e.refLabel,selectorChain:e.selectorChain,targetHittable:e.targetHittable,hint:e.hint,evidence:t,settle:n,resolution:e.resolution}:e.kind===`selector`?{selector:e.target?.kind===`selector`?e.target.selector:void 0,selectorChain:e.selectorChain,refLabel:e.refLabel,targetHittable:e.targetHittable,hint:e.hint,evidence:t,settle:n,resolution:e.resolution}:{evidence:t,settle:n}}function $e(e,t){return e.kind===`point`?`coordinate tap`:t.kind===`ref`&&t.target?.kind===`ref`?t.target.ref:t.kind===`selector`&&t.target?.kind===`selector`?t.target.selector:`target`}function et(e){let t=e.at(-1);return e.length>1&&nt(t)?{targetPositionals:e.slice(0,-1),duration:{durationMs:Number(t)}}:{targetPositionals:e,duration:{}}}function tt(e){return e===void 0?{}:{durationMs:Number(e)}}function nt(e){return e===void 0||e.trim()===``?!1:Number.isFinite(Number(e))}const rt={source:`direct-ios`,kind:`not-observed`};function V(e,t){if(!it(e))return t;let{resolution:n,...r}=t;return r}function it(e){return`dispatchPath`in e&&e.dispatchPath===`maestro-non-hittable-fallback`}function H(e){return U({source:{kind:`corroborated-tap`,targetKind:e.targetKind,data:{warning:e.warning},publicData:{warning:e.warning},point:e.point,resolution:e.resolution},referenceFrame:e.referenceFrame,extra:e.extra})}function U(e){let{source:t,referenceFrame:n,extra:r}=e;if(t.kind===`runner-payload`||t.kind===`corroborated-tap`){let e={targetKind:t.targetKind,...V(t,{resolution:t.kind===`runner-payload`?rt:t.resolution}),...r??{}};return{result:I({data:t.data,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e}),responseData:I({data:t.publicData,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e})}}let{result:i}=t,a={targetKind:i.kind,...V(t,Qe(i)),...st(i.settle,e.settleRefsGeneration),...r??{}},o=I({data:i.backendResult,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:{...a,...ot(i)}}),s=I({data:t.publicData,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:a}),c=ct(`warning`in i?i.warning:void 0,e.staleRefsWarning);return c&&(o.warning=c,s.warning=c),{result:o,responseData:s,...at(i)}}function at(e){let t=W(e)?.node??(`node`in e?e.node:void 0),n=`preAction`in e?e.preAction?.nodes:void 0;return t&&n?{recordedTarget:{node:t,preActionNodes:n}}:{}}function ot(e){let t=W(e);return t?{selectorChain:t.selectorChain,refLabel:t.refLabel}:{}}function W(e){return`recordingTarget`in e?e.recordingTarget:void 0}function st(e,t){return!e?.diff||t===void 0?{}:{settle:{...e,refsGeneration:t}}}function ct(e,t){return t?e?`${e} ${t}`:t:e}async function lt(e){let{params:t,session:n,result:r,publicData:i,extra:a}=e,o=r.kind===`point`?await He({session:n,flags:t.req.flags,sessionStore:t.sessionStore,contextFromFlags:t.contextFromFlags,captureSnapshotForSession:t.captureSnapshotForSession,observation:t.androidObservation}):w(n.snapshot?.nodes??[]);return U({source:{kind:`runtime`,result:r,publicData:i},referenceFrame:o,extra:a,staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:le(n,r.settle)})}function G(e){return e.command?Re({command:e.command,input:e.flags,data:e.data}):F(e.data)}function ut(e,t){return e===`click`||e===`press`||e===`fill`?e:t}function K(e,t){if(!e)return{used:!1,extra:{}};let n=t?.maestroNonHittableCoordinateFallbackUsed===!0;return{used:n,extra:{maestroNonHittableCoordinateFallbackAllowed:!0,maestroNonHittableCoordinateFallbackUsed:n,...n?{maestroFallbackReason:`non-hittable-coordinate`}:{}}}}function q(e){return[String(e.x),String(e.y)]}function dt(t){let{error:n,snapshotGeneration:r,publishPartialRefs:i}=t;if(n.code!==`AMBIGUOUS_MATCH`)return n;let a=s(n.details);return a.length===0||r===void 0?n:(i(a),new e(n.code,n.message,{...n.details,refsGeneration:r},n.cause))}async function ft(t,n,r){let i=await Ne(t,r);if(i){if(i.permissionDialog)return`press ${n} opened an Android permission dialog (${i.foregroundPackage}) over ${i.expectedPackage}. ${i.hint}`;throw new e(`COMMAND_FAILED`,`press ${n} left ${t.appBundleId} and foregrounded ${i.foregroundPackage}. The tap likely escaped the app.`,i)}}function pt(e){return e.code===`COMMAND_FAILED`&&typeof e.details?.expectedPackage==`string`&&typeof e.details?.foregroundPackage==`string`}async function J(e){if(!mt(e))return;let t=gt(e.session.snapshot);if(!t)return;let n=await _t(e,t.snapshot.snapshotQuality,t.presentation);if(!(!n||!vt(t.snapshot,n,e.command)))return xt(t.snapshot,n,e.command)}function mt(e){return ht(e.command)&&n(e.error).code===`XCTEST_RECORDED_FAILURE`&&Ee(e.session,{skipPendingPostGestureStabilization:!1})}function ht(e){return e===`click`||e===`press`}function gt(e){if(!Y(e))return;let t=Date.now()-e.createdAt;if(t<0||t>15e3){C({level:`debug`,phase:`ios_tap_failure_corroboration_stale_baseline`,data:{ageMs:t}});return}let n=St(e.presentationKey);if(n){if(n.raw){C({level:`debug`,phase:`ios_tap_failure_corroboration_raw_baseline`,data:{presentationKey:e.presentationKey}});return}return{snapshot:e,presentation:n}}}async function _t(e,t,n){try{let r=xe(t);return await e.captureSnapshotForSession(e.session,Dt(e.flags,n),e.sessionStore,e.contextFromFlags,{interactiveOnly:n?.interactiveOnly??!0,...r?{preferredBackend:r}:{},signal:ye(e.requestId)})}catch(t){C({level:`debug`,phase:`ios_tap_failure_corroboration_capture_failed`,data:{command:e.command,error:t instanceof Error?t.message:String(t)}});return}}function vt(e,t,n){let r=yt(e,t);return r===void 0?bt(e,t,n):r?!0:(C({level:`debug`,phase:`ios_tap_failure_corroboration_identity_mismatch`,data:{command:n}}),!1)}function yt(e,t){if(e.comparisonKey!==void 0||t.comparisonKey!==void 0)return e.comparisonKey!==void 0&&e.comparisonKey===t.comparisonKey}function bt(e,t,n){let r=e.snapshotQuality?.backend,i=t.snapshotQuality?.backend;return!r||r!==i?(C({level:`debug`,phase:`ios_tap_failure_corroboration_backend_mismatch`,data:{command:n,baselineBackend:r,afterBackend:i}}),!1):e.presentationKey===t.presentationKey||(C({level:`debug`,phase:`ios_tap_failure_corroboration_scope_mismatch`,data:{command:n,baselinePresentationKey:e.presentationKey,afterPresentationKey:t.presentationKey}}),!1)}function xt(e,t,n){if(!Y(t))return;let r=b(e.nodes),i=b(t.nodes);if(r.digest!==i.digest)return C({level:`warn`,phase:`ios_tap_failure_corroborated`,data:{command:n,beforeNodeCount:r.nodeCount,afterNodeCount:i.nodeCount}}),{warning:`XCTest reported the tap as failed, but a same-scope post-action accessibility capture changed; treating the tap as landed. Observe the current screen before issuing another tap.`}}function Y(e){return!!(e&&e.nodes.length>0&&!Se(e.snapshotQuality))}function St(e){if(!e)return;let t;try{t=JSON.parse(e)}catch{return}return Ct(t)}function Ct(e){let t=wt(e);if(!(!t||typeof t.interactiveOnly!=`boolean`||typeof t.raw!=`boolean`)&&!(!Tt(t.depth)||!Et(t.scope)))return{interactiveOnly:t.interactiveOnly,...typeof t.depth==`number`?{depth:t.depth}:{},...typeof t.scope==`string`?{scope:t.scope}:{},raw:t.raw}}function wt(e){return typeof e==`object`&&e?e:void 0}function Tt(e){return e==null||typeof e==`number`}function Et(e){return e==null||typeof e==`string`}function Dt(e,t){if(!(!e&&!t))return{...e??{},out:void 0,...t?{snapshotDepth:t.depth,snapshotScope:t.scope,snapshotRaw:t.raw}:{}}}function Ot(e){return e.kind===`selector`?{selector:e.selector}:e.kind===`ref`?{ref:e.ref.startsWith(`@`)?e.ref.slice(1):e.ref}:{}}async function kt(e,t,n,r,i){if(e.lease?.leaseProvider)return{aborted:!1,readiness:{status:`clear`},runtimeResult:await r()};let a=await E({session:e,command:t,phase:`before-command`,observation:i});if(n.refContext&&a.status===`recovered`){let t=O({ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration,staleRefsWarning:n.refContext.staleRefsWarning,frame:_({session:e,ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration})});if(t)return{aborted:!0,response:t}}let o=await r();return await E({session:e,command:t,phase:`after-command`,observation:i}),{aborted:!1,readiness:a,runtimeResult:o}}async function X(e,t){let r=e.sessionStore.get(e.sessionName);if(!r)return o();let i=Te({...e,touchExecutor:t.touchExecutor}),a=Date.now();try{let n,o=await kt(r,e.req.command,{refContext:t.refContext},async()=>{let e=await t.run(i);return n=await t.afterRun?.(e),e},e.androidObservation);if(o.aborted)return o.response;let{readiness:s,runtimeResult:c}=o,l=Date.now(),{result:u,responseData:d,recordedTarget:f}=await t.buildPayloads(c),p=[...s.status===`recovered`?[s.warning]:[],...n?[n]:[]];if(p.length>0){let e=[...typeof d.warning==`string`?[d.warning]:[],...p].join(` `);u.warning=e,d.warning=e}return k({session:r,sessionStore:e.sessionStore,command:e.req.command,positionals:e.req.positionals??[],retryPositionals:Nt(e.req.command,c),flags:e.req.flags,result:u,responseData:d,recordedTarget:f,actionStartedAt:a,actionFinishedAt:l,androidFreshnessBaseline:t.androidFreshnessBaseline})}catch(i){let o=dt({error:n(i),snapshotGeneration:r.snapshotGeneration,publishPartialRefs:e=>ce(r,e)});if(pt(o))throw o;return o.code===`AMBIGUOUS_MATCH`?Z(o):await At({error:o,handlerParams:e,session:r,target:t.iosTapCorroboration?.target,extra:t.iosTapCorroboration?.extra,actionStartedAt:a,androidFreshnessBaseline:t.androidFreshnessBaseline})||Z(o)}}async function At(e){if(!e.target)return;let t=fe(e.error);if(!t&&y(e.session))return;let n=await J({error:e.error,command:e.handlerParams.req.command,requestId:e.handlerParams.req.meta?.requestId,flags:e.handlerParams.req.flags,session:e.session,sessionStore:e.handlerParams.sessionStore,contextFromFlags:e.handlerParams.contextFromFlags,captureSnapshotForSession:e.handlerParams.captureSnapshotForSession});if(!n)return;let r=jt({target:e.target,resolvedTarget:t,warning:n.warning,referenceFrame:w(e.session.snapshot?.nodes??[]),extra:e.extra});return k({session:e.session,sessionStore:e.handlerParams.sessionStore,command:e.handlerParams.req.command,positionals:e.handlerParams.req.positionals??[],flags:e.handlerParams.req.flags,result:r.result,responseData:r.responseData,recordedTarget:r.recordedTarget,scheduleInteractionOutcomeRetry:!1,actionStartedAt:e.actionStartedAt,actionFinishedAt:Date.now(),androidFreshnessBaseline:e.androidFreshnessBaseline})}function jt(e){return e.resolvedTarget?U({source:{kind:`runtime`,result:{...e.resolvedTarget,warning:e.warning}},referenceFrame:e.referenceFrame,extra:e.extra}):H({targetKind:e.target.kind,point:Mt(e.target),warning:e.warning,referenceFrame:e.referenceFrame,extra:{...Ot(e.target),...e.extra??{}}})}function Mt(e){return e.kind===`point`?{x:e.x,y:e.y}:void 0}function Z(e){return{ok:!1,error:t(e)}}function Nt(e,t){if(!(t.kind===`ref`&&!t.node)&&(e===`click`||e===`press`))return t.point?q(t.point):void 0}async function Q(e,t,n,r){let i=await se({device:t.device,command:n,requiresCapture:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?{ok:!0,touchExecutor:ue(i.runtime,e.contextFromFlags(e.req.flags,t.appBundleId,t.trace?.outPath))}:i}async function Pt(e){let{req:t,sessionName:n,sessionStore:r}=e,i=r.get(n);if(i){let e=P(i,`fill`);if(e)return e}if(!i)return o();let a=Xe(t.positionals??[]);if(!a.ok)return a.response;let s=await Q(e,i,`fill`,a.target.kind!==`point`);if(!s.ok)return s.response;let{touchExecutor:c}=s;Fe({flags:t.flags,replayPlanStep:t.internal?.replayPlanStep===!0,isSessionRecording:y(i)});let l=D(`fill`,t.flags);if(l)return l;let u=await Ft(e,i,a.target,a.refGeneration);if(u.response)return u.response;let{staleRefsWarning:d}=u,f=t.internal?.replayTargetGuard;return await X(e,{touchExecutor:c,refContext:a.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0?{ref:a.target.ref,mintedGeneration:a.refGeneration,staleRefsWarning:d}:void 0,run:async e=>await e.interactions.fill(a.target,a.text,{session:n,requestId:t.meta?.requestId,delayMs:t.flags?.delayMs,allowNonHittableCoordinateFallback:t.flags?.maestro?.allowNonHittableCoordinateFallback,verify:t.flags?.verify,settle:A(t.flags),expectedResolvedTarget:f,preresolvedTarget:t.internal?.findResolvedTarget}),buildPayloads:e=>It({session:i,result:e,text:a.text,flags:t.flags,staleRefsWarning:d})})}async function Ft(e,t,n,r){if(n.kind!==`ref`)return{};let i=e.req.internal?.findResolvedTarget===void 0?v({session:t,ref:n.ref,mintedGeneration:r}):void 0,a=e.refSnapshotFlagGuardResponse(`fill`,e.req.flags);if(a)return{response:a,staleRefsWarning:i};let o=e.req.internal?.findResolvedTarget?null:O({ref:n.ref,mintedGeneration:r,staleRefsWarning:i,frame:_({session:t,ref:n.ref,mintedGeneration:r})});return o?{response:o,staleRefsWarning:i}:(await N(e,t),{staleRefsWarning:i})}function It(e){let{session:t,result:n}=e,r=K(e.flags?.maestro?.allowNonHittableCoordinateFallback===!0,n.backendResult),i=n.kind===`point`?void 0:w(t.snapshot?.nodes??[]);return U({source:{kind:`runtime`,result:n,publicData:G({command:`fill`,flags:e.flags,data:n.backendResult}),...r.used?{dispatchPath:`maestro-non-hittable-fallback`}:{}},referenceFrame:i,extra:{text:e.text,...r.extra},staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:le(t,n.settle)})}async function Lt(e,n,r,i){let a=e,o={selector:r.raw},s=Date.now();g(n);try{let e=await i(r)??{},t=Date.now(),c=zt(e),l=G({command:ut(a.req.command,`press`),flags:a.req.flags,data:e}),u=K(r.allowNonHittableCoordinateFallback===!0,e),{result:d,responseData:f}=U({source:{kind:`runner-payload`,targetKind:`selector`,data:e,publicData:l,point:c,dispatchPath:u.used?`maestro-non-hittable-fallback`:`maestro-direct-selector`},referenceFrame:Bt(e),extra:{...o,...u.extra}});return k({session:n,sessionStore:a.sessionStore,command:a.req.command,positionals:a.req.positionals??[],retryPositionals:q(c),flags:a.req.flags,result:d,responseData:f,actionStartedAt:s,actionFinishedAt:t})}catch(e){return await Rt({error:e,handlerParams:a,session:n,extra:o,positionals:[],actionStartedAt:s})||(Oe(e,{delegateSemanticFailures:r.allowNonHittableCoordinateFallback!==!0})?(C({level:`debug`,phase:`ios_direct_selector_tap_fallback`,data:{selector:r.raw,error:e instanceof Error?e.message:String(e)}}),null):{ok:!1,error:t(e)})}}async function Rt(e){let{error:t,handlerParams:n,session:r,extra:i,positionals:a,actionStartedAt:o}=e,s=await J({error:t,command:n.req.command,requestId:n.req.meta?.requestId,flags:n.req.flags,session:r,sessionStore:n.sessionStore,contextFromFlags:n.contextFromFlags,captureSnapshotForSession:n.captureSnapshotForSession});if(!s)return;let{result:c,responseData:l}=H({targetKind:`selector`,warning:s.warning,resolution:{source:`direct-ios`,kind:`not-observed`},extra:i});return k({session:r,sessionStore:n.sessionStore,command:n.req.command,positionals:n.req.positionals??a,flags:n.req.flags,result:c,responseData:l,scheduleInteractionOutcomeRetry:!1,actionStartedAt:o,actionFinishedAt:Date.now()})}function zt(e){let t=typeof e.x==`number`?e.x:void 0,n=typeof e.y==`number`?e.y:void 0;return t!==void 0&&n!==void 0?{x:t,y:n}:{x:0,y:0}}function Bt(e){return typeof e.referenceWidth==`number`&&typeof e.referenceHeight==`number`?{referenceWidth:e.referenceWidth,referenceHeight:e.referenceHeight}:void 0}function Vt(e){let{session:t,commandLabel:n,target:r,flags:i}=e;return!e.tapElementSelectorAvailable||i?.maestro?.allowNonHittableCoordinateFallback!==!0||n!==`click`||r.kind!==`selector`||y(t)||Wt(i)||p(n)&&i?.verify===!0||ee(n)&&i?.settle===!0?null:Ht(t,r.selector,i)}function Ht(e,t,n){let r=De({session:e,selectorExpression:t});return r?{...r,...n?.maestro?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},...n?.maestro?.expectedTapPoint?{expectedPoint:n.maestro.expectedTapPoint}:{}}:null}const Ut=[`count`,`intervalMs`,`holdMs`,`jitterPx`,`doubleTap`];function Wt(e){return Ut.some(t=>e?.[t]!==void 0)?!0:e?.clickButton!==void 0&&e.clickButton!==`primary`}const Gt=new Set([`press`,`click`]);async function Kt(e,t){let{req:n,sessionStore:r,sessionName:i}=e,a=r.get(i);if(!a)return{response:o()};let s=t===`click`?`click`:t,c=qt(a,t,s,n.flags);if(c)return{response:c};let l=n.positionals??[],u=t===`longpress`?Ye(l):z(l,s);if(!u.ok)return{response:u.response};let d=Yt(a,n,u),f=Zt(e,a,t,u,d);if(f.response)return{response:f.response};let p=S(n.flags);return{admitted:{session:a,commandLabel:s,clickButton:p,resultButtonTag:me(p),target:u.target,durationMs:t===`longpress`?u.durationMs:void 0,staleRefsWarning:d,refContext:Xt(n,u,d)}}}function qt(e,t,n,r){return P(e,n)||D(t,r)||Jt(e,t,n,r)}function Jt(e,t,n,r){let i=S(r);if(!Gt.has(t)||i===`primary`)return;let o=he({commandLabel:n,platform:l(e.device),button:i,count:r?.count,intervalMs:r?.intervalMs,holdMs:r?.holdMs,jitterPx:r?.jitterPx,doubleTap:r?.doubleTap});if(o)return a(o.code,o.message,o.details)}function Yt(e,t,n){if(n.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0)return v({session:e,ref:n.target.ref,mintedGeneration:n.refGeneration})}function Xt(e,t,n){if(t.target.kind===`ref`&&e.internal?.findResolvedTarget===void 0)return{ref:t.target.ref,mintedGeneration:t.refGeneration,staleRefsWarning:n}}function Zt(e,t,n,r,i){let{req:a}=e;if(r.target.kind!==`ref`)return{};let o=e.refSnapshotFlagGuardResponse(n===`click`?`press`:n,a.flags);if(o)return{response:o};let s=a.internal?.findResolvedTarget?null:O({ref:r.target.ref,mintedGeneration:r.refGeneration,staleRefsWarning:i,frame:_({session:t,ref:r.target.ref,mintedGeneration:r.refGeneration})});return s?{response:s}:{}}async function $(e,t){let n=await Kt(e,t);if(`response`in n)return n.response;let{admitted:r}=n,i=await Q(e,r.session,t,r.target.kind!==`point`);if(!i.ok)return i.response;let{touchExecutor:a}=i,o=r.target.kind===`ref`?await N(e,r.session):void 0,s={...r,androidFreshnessBaseline:o},c=e.req.internal?.replayTargetGuard?null:Vt({session:s.session,commandLabel:s.commandLabel,target:s.target,flags:e.req.flags,tapElementSelectorAvailable:a.tapElementSelector!==void 0});if(c&&a.tapElementSelector){let t=await Lt(e,s.session,c,a.tapElementSelector);if(t)return t}return await X(e,{...Qt(e,t,s),touchExecutor:a})}function Qt(e,t,n){let{req:r,sessionName:i}=e,{session:a,target:o,durationMs:s,staleRefsWarning:c,resultButtonTag:l}=n,u=t===`longpress`?{...s===void 0?{}:{durationMs:s},gesture:`longpress`}:t===`hover`?{gesture:`hover`}:l;return{androidFreshnessBaseline:n.androidFreshnessBaseline,refContext:n.refContext,iosTapCorroboration:{target:o,extra:u},run:async e=>await $t({runtime:e,command:t,target:o,sessionName:i,requestId:r.meta?.requestId,clickButton:n.clickButton,flags:r.flags,durationMs:s,expectedResolvedTarget:r.internal?.replayTargetGuard,preresolvedTarget:r.internal?.findResolvedTarget}),afterRun:async t=>{if(!a.lease?.leaseProvider)return await ft(a,$e(o,t),e.androidObservation)},buildPayloads:async n=>{let i=tn(n);return await lt({params:e,session:a,result:n,staleRefsWarning:c,publicData:G({command:t===`longpress`||t===`hover`?void 0:t,flags:r.flags,data:n.backendResult}),extra:t===`longpress`?{...i===void 0?{}:{durationMs:i},gesture:`longpress`}:t===`hover`?{gesture:`hover`}:l})}}}async function $t(e){let{runtime:t,command:n,target:r,sessionName:i,requestId:a,flags:o,expectedResolvedTarget:s}=e,c={session:i,requestId:a,settle:A(o),expectedResolvedTarget:s};switch(n){case`longpress`:return await t.interactions.longPress(r,{...c,durationMs:e.durationMs});case`hover`:return await t.interactions.hover(r,c);case`click`:return await t.interactions.click(r,en(e,c));case`press`:return await t.interactions.press(r,en(e,c))}}function en(e,t){let{flags:n}=e;return{...t,button:e.clickButton,count:n?.count,intervalMs:n?.intervalMs,holdMs:n?.holdMs,jitterPx:n?.jitterPx,doubleTap:n?.doubleTap,verify:n?.verify,preresolvedTarget:e.preresolvedTarget}}function tn(e){return`durationMs`in e?e.durationMs:void 0}function nn(e,t={}){let n=typeof t.executionProfile==`string`?t.executionProfile:void 0;return{kind:e.kind,durationMs:e.durationMs,pointerCount:e.pointerCount,from:e.from,to:e.to,...e.kind===`drag`?{targets:e.targets}:{},...e.backendResult??{},...t,...n?{timing:{executionProfile:n,gestureDurationMs:e.durationMs}}:{},message:e.message}}function rn(e){return`refused`in e}async function an(e){return await dn(e,`gesture`,async t=>on(e,t))}async function on(e,t){let n=re(e.req.input),r=pn(n,t);r.intent===`pan`&&e.req.internal?.gestureExecutionProfile&&(r.executionProfile=e.req.internal.gestureExecutionProfile);let i=await j({device:t.device,input:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?cn(n,r,await sn(un(e,i.gestures),{session:e.sessionName,requestId:e.req.meta?.requestId},r,e.req.internal),e.req.flags):{refused:i.response}}async function sn(e,t,n,r){if(n.intent!==`drag`)return await e.interactions.gesture({...t,gesture:n});let i=r?.replayTargetGuards??(r?.replayTargetGuard?{source:r.replayTargetGuard}:void 0);return await e.interactions.gesture({...t,gesture:n,...i?{expectedResolvedTargets:i}:{}})}function cn(e,t,n,r){let i=n.kind===`drag`?n.recording:void 0,a=i?.sourceTarget,o=i?.destinationTarget;return{positionals:hn(e,i),flags:Sn(e,r),responseData:nn(n,{executionProfile:fn(t)}),...e.kind===`pinch`?{recordingResultExtra:{scale:e.scale}}:a?{recordingResultExtra:{selectorChain:a.selectorChain}}:{},...a&&o?{recordedTargets:{source:{node:a.node,preActionNodes:a.preActionNodes},destination:{node:o.node,preActionNodes:o.preActionNodes}}}:{}}}async function ln(e){return await dn(e,`swipe`,async t=>{let n=gn(e.req.input),r=await j({device:t.device,input:m(n).gesture,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!r.ok)return{refused:r.response};let i=n.count??1,a=n.pauseMs??0,o=n.pattern??`one-way`,s=await bn(un(e,r.gestures),e,n,i,a,o);return{positionals:yn(n),flags:e.req.flags,responseData:nn(s,{from:n.from,to:n.to,x1:n.from.x,y1:n.from.y,x2:n.to.x,y2:n.to.y,effectiveDurationMs:s.durationMs,timingMode:`direct`,executionProfile:`endpoint-hold`,count:i,pauseMs:a,pattern:o})}})}function un(e,t){return Te({...e,gestures:t,pairedGestureViewport:e.req.internal?.gestureViewport})}async function dn(e,n,r){let i=e.sessionStore.get(e.sessionName);if(!i)return o();let a=Date.now();try{let t=be(i.device),o=t?{status:`clear`}:await E({session:i,command:n,phase:`before-command`,observation:e.androidObservation}),s=await r(i);if(rn(s))return s.refused;t||await E({session:i,command:n,phase:`after-command`,observation:e.androidObservation});let c={...s.responseData};return o.status===`recovered`&&(c.warning=`${typeof c.warning==`string`?`${c.warning} `:``}${o.warning}`),k({session:i,sessionStore:e.sessionStore,command:n,actionCommand:n,positionals:s.positionals,flags:s.flags,result:{...c,...s.recordingResultExtra??{}},responseData:c,recordedTargets:s.recordedTargets,actionStartedAt:a,actionFinishedAt:Date.now()})}catch(e){return{ok:!1,error:t(e)}}}function fn(e){if(e.intent===`fling`)return`endpoint-hold`;if(e.intent===`pan`)return e.executionProfile??`timed-pan`;if(e.intent===`drag`)return`timed-pan`}function pn(e,t){let n=ie(e);return n.intent===`drag`?{...n,source:mn(n.source,t),destination:mn(n.destination,t)}:n}function mn(t,n){if(!t.startsWith(`@`))return t;let a=r(t);if(!a)throw new e(`INVALID_ARGS`,`Invalid ref "${t}" — malformed generation suffix.`,{hint:i});return ke({ref:a.base,mintedGeneration:a.generation,frame:_({session:n,ref:a.base,mintedGeneration:a.generation})}),a.base}function hn(e,t){return e.kind!==`drag`||!t?h(e):h({...e,source:t.sourceSelector??e.source,destination:t.destinationSelector??e.destination})}function gn(t){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`swipe requires structured object input`);ae(t);let n=t,r=n.pattern;if(r!==void 0&&r!==`one-way`&&r!==`ping-pong`)throw new e(`INVALID_ARGS`,`swipe pattern must be one-way or ping-pong`);let i={from:vn(n.from,`swipe from`),to:vn(n.to,`swipe to`),count:c(n,`count`,{min:1,max:200}),pauseMs:c(n,`pauseMs`,{min:0,max:ne}),pattern:r};return _n(i),i}function _n(t){let n=t.count??1,r=t.pauseMs??0,i=n*100+Math.max(0,n-1)*r;if(!(i<=6e4))throw new e(`INVALID_ARGS`,`Swipe series must fit within ${te}ms.`,{count:n,pauseMs:r,gestureDurationMs:100,scheduledDurationMs:i,hint:`Reduce --count or --pause-ms.`})}function vn(t,n){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`${n} must be a point`);let r=t;if(typeof r.x!=`number`||!Number.isFinite(r.x))throw new e(`INVALID_ARGS`,`${n} x must be finite`);if(typeof r.y!=`number`||!Number.isFinite(r.y))throw new e(`INVALID_ARGS`,`${n} y must be finite`);return{x:r.x,y:r.y}}function yn(e){return[String(e.from.x),String(e.from.y),String(e.to.x),String(e.to.y)]}async function bn(e,t,n,r,i,a){let o;for(let s=0;s<r;s+=1){let c=m(xn(n,a,s));o=await e.interactions.gesture({session:t.sessionName,requestId:t.req.meta?.requestId,gesture:c.gesture}),i>0&&s+1<r&&await ve(i)}if(!o)throw Error(`Swipe orchestration did not execute a gesture.`);return o}function xn(e,t,n){return t!==`ping-pong`||n%2!=1?e:{...e,from:e.to,to:e.from}}function Sn(e,t){return e.kind!==`pan`||e.pointerCount===void 0?t:{...t,pointerCount:e.pointerCount}}async function Cn(e){let t={},n=await wn({...e,refSnapshotFlagGuardResponse:Ae,activationProof:t});return n&&we(n,t.state)}async function wn(e){switch(e.req.command){case`press`:return await $(e,`press`);case`click`:return await $(e,`click`);case`longpress`:return await $(e,`longpress`);case`hover`:return await $(e,`hover`);case`fill`:return await Pt(e);default:return await Tn(e)}}async function Tn(e){switch(e.req.command){case x.gesture:return await an(e);case x.swipe:return await ln(e);case x.type:return await En(e);case`get`:return await Me(e);case`is`:return await je(e);default:return null}}async function En(e){let{sessionName:t,sessionStore:n}=e,r=n.get(t);if(!r)return o();let i=await Pe({device:r.device,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!i.ok)return i.response;let a=await Dn(r,e.androidObservation);return a.response?a.response:await On(e,r,i.typeText,a.warning)}async function Dn(e,t){if(e.device.platform===`android`&&e.screenRecording){let n=await Ce({session:e,observation:t});if(n.status===`failed`)return{response:a(`COMMAND_FAILED`,`Android system dialog blocked the recording session`)};if(n.status===`unknown`)return{warning:n.warning}}return{}}async function On(e,n,r,i){let{req:a,sessionStore:o}=e,s=Date.now();try{let t=await E({session:n,command:a.command,phase:`before-command`,observation:e.androidObservation});g(n);let c=await r(a.positionals??[],e.contextFromFlags(a.flags,n.appBundleId,n.trace?.outPath));await E({session:n,command:a.command,phase:`after-command`,observation:e.androidObservation});let l=Date.now(),u={...c};return kn(u,i,t),k({session:n,sessionStore:o,command:a.command,positionals:a.positionals??[],flags:a.flags,result:u,responseData:u,actionStartedAt:s,actionFinishedAt:l})}catch(e){return{ok:!1,error:t(e)}}}function kn(e,t,n){let r=[typeof e.warning==`string`?e.warning:void 0,t];n.status===`recovered`&&r.push(n.warning);let i=r.filter(e=>typeof e==`string`&&e.length>0).join(` `);i.length>0&&(e.warning=i)}export{Cn as handleInteractionCommands};
@@ -1 +1 @@
1
- import{n as e,r as t}from"./interactor-operation-binding.js";import{c as n,d as r,g as i,m as a,n as o,o as s,p as c,r as l,s as u,u as d,v as f,x as p}from"./alert-runtime.js";const m=[{operation:`back`,label:`back`,bind:p},{operation:`home`,label:u.home,bind:(e,t)=>n(`home`,e,t)},{operation:`setOrientation`,label:`orientation`,bind:f},{operation:`tvRemote`,label:`tv-remote`,bind:i},{operation:`keyboardStatus`,label:c.keyboardStatus,bind:(e,t)=>a(`keyboardStatus`,e,t)},{operation:`keyboardDismiss`,label:c.keyboardDismiss,bind:(e,t)=>a(`keyboardDismiss`,e,t)},{operation:`keyboardEnter`,label:c.keyboardEnter,bind:(e,t)=>a(`keyboardEnter`,e,t)},{operation:`readClipboard`,label:`clipboard read`,bind:d},{operation:`writeClipboard`,label:`clipboard write`,bind:r},{operation:`appSwitcher`,label:u.appSwitcher,bind:(e,t)=>n(`appSwitcher`,e,t)},{operation:`actionButton`,label:u.actionButton,bind:(e,t)=>n(`actionButton`,e,t)},{operation:`triggerAppEvent`,label:`trigger-app-event`,bind:s},{operation:`setSetting`,label:`settings`,bind:l},{operation:`readAlert`,label:`alert get`,bind:(e,t)=>o(`readAlert`,e,t)},{operation:`awaitAlert`,label:`alert wait`,bind:(e,t)=>o(`awaitAlert`,e,t)},{operation:`acceptAlert`,label:`alert accept`,bind:(e,t)=>o(`acceptAlert`,e,t)},{operation:`dismissAlert`,label:`alert dismiss`,bind:(e,t)=>o(`dismissAlert`,e,t)}];function h(e,t){let n={};for(let r of m)e.facts[r.operation]?.available&&Object.assign(n,r.bind(e.signal,t(r)));return n}function g(t){return h(t,()=>e(t))}function _(e){return h(e,n=>t({...e,operation:n.label}))}export{_ as n,g as t};
1
+ import{n as e,r as t}from"./interactor-operation-binding.js";import{S as n,_ as r,c as i,d as a,f as o,h as s,i as c,l,m as u,n as d,r as f,s as p,y as m}from"./alert-runtime.js";const h=[{operation:`back`,label:`back`,bind:n},{operation:`home`,label:i.home,bind:(e,t)=>l(`home`,e,t)},{operation:`setOrientation`,label:`orientation`,bind:m},{operation:`tvRemote`,label:`tv-remote`,bind:r},{operation:`keyboardStatus`,label:u.keyboardStatus,bind:(e,t)=>s(`keyboardStatus`,e,t)},{operation:`keyboardDismiss`,label:u.keyboardDismiss,bind:(e,t)=>s(`keyboardDismiss`,e,t)},{operation:`keyboardEnter`,label:u.keyboardEnter,bind:(e,t)=>s(`keyboardEnter`,e,t)},{operation:`readClipboard`,label:`clipboard read`,bind:a},{operation:`writeClipboard`,label:`clipboard write`,bind:o},{operation:`appSwitcher`,label:i.appSwitcher,bind:(e,t)=>l(`appSwitcher`,e,t)},{operation:`actionButton`,label:i.actionButton,bind:(e,t)=>l(`actionButton`,e,t)},{operation:`triggerAppEvent`,label:`trigger-app-event`,bind:p},{operation:`setSetting`,label:`settings`,bind:c},{operation:`readSetting`,label:`settings read`,bind:f},{operation:`readAlert`,label:`alert get`,bind:(e,t)=>d(`readAlert`,e,t)},{operation:`awaitAlert`,label:`alert wait`,bind:(e,t)=>d(`awaitAlert`,e,t)},{operation:`acceptAlert`,label:`alert accept`,bind:(e,t)=>d(`acceptAlert`,e,t)},{operation:`dismissAlert`,label:`alert dismiss`,bind:(e,t)=>d(`dismissAlert`,e,t)}];function g(e,t){let n={};for(let r of h)e.facts[r.operation]?.available&&Object.assign(n,r.bind(e.signal,t(r)));return n}function _(t){return g(t,()=>e(t))}function v(e){return g(e,n=>t({...e,operation:n.label}))}export{v as n,_ as t};