agent-device 0.21.7 → 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 (204) hide show
  1. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.7.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.7.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.7.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.7.manifest.json → agent-device-android-snapshot-helper-0.21.9.manifest.json} +6 -6
  7. package/apple/macos-helper/Package.swift +16 -1
  8. package/apple/macos-helper/Sources/AgentDeviceMacOSDeviceHub/DeviceHubPose.swift +47 -0
  9. package/apple/macos-helper/Sources/AgentDeviceMacOSDeviceHub/DeviceHubWindowInventory.swift +65 -0
  10. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/DeviceHubPose.swift +225 -0
  11. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/DeviceHubSidebar.swift +57 -0
  12. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/DeviceHubWindowDiscovery.swift +108 -0
  13. package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/main.swift +66 -13
  14. package/apple/macos-helper/Sources/AgentDeviceMacOSInput/MouseClickDelivery.swift +116 -0
  15. package/apple/macos-helper/Sources/AgentDeviceMacOSInput/MouseClickSchedule.swift +61 -0
  16. package/apple/macos-helper/Tests/AgentDeviceMacOSDeviceHubTests/DeviceHubPoseTests.swift +30 -0
  17. package/apple/macos-helper/Tests/AgentDeviceMacOSDeviceHubTests/DeviceHubWindowInventoryTests.swift +65 -0
  18. package/apple/macos-helper/Tests/AgentDeviceMacOSInputTests/MouseClickScheduleTests.swift +58 -0
  19. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/AgentDeviceRunnerUITests-Bridging-Header.h +1 -0
  20. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAppScreenCapture.swift +175 -0
  21. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.h +10 -2
  22. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.m +42 -15
  23. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +8 -0
  24. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +45 -22
  25. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Interaction.swift +39 -734
  26. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Keyboard.swift +20 -4
  27. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +63 -1
  28. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +13 -0
  29. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +25 -10
  30. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +5 -562
  31. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotAcquisition.swift +566 -0
  32. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedGesturePolicy.swift +5 -1
  33. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift +594 -0
  34. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerXCTestEventBridge.h +35 -1
  35. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerXCTestEventBridge.m +160 -0
  36. package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/RecordingExportSupport.swift +3 -0
  37. package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-frames.swift +203 -0
  38. package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotCoordinateSpace.swift +5 -0
  39. package/dist/src/absence-observation-errors.js +1 -1
  40. package/dist/src/adapter.js +1 -1
  41. package/dist/src/agent-browser-lifecycle.js +1 -1
  42. package/dist/src/agent-browser-process-record.js +1 -1
  43. package/dist/src/agent-device-client.js +2 -2
  44. package/dist/src/alert-runtime.js +1 -1
  45. package/dist/src/android-adb.js +1 -1
  46. package/dist/src/android-input-ownership.js +1 -1
  47. package/dist/src/android.js +1 -1
  48. package/dist/src/app-launch.js +1 -1
  49. package/dist/src/app-log-runtime2.js +3 -3
  50. package/dist/src/app-resolution.js +2 -2
  51. package/dist/src/apple-runner-platform.js +1 -1
  52. package/dist/src/application-lifecycle-interaction.js +1 -1
  53. package/dist/src/artifact-paths.js +1 -0
  54. package/dist/src/back-mode.js +1 -1
  55. package/dist/src/cli-config.js +1 -1
  56. package/dist/src/cli-help.js +15 -11
  57. package/dist/src/cli.js +4 -4
  58. package/dist/src/client-types.d.ts +51 -1
  59. package/dist/src/command-tools.js +3 -3
  60. package/dist/src/config.js +1 -1
  61. package/dist/src/connection-runtime.js +1 -1
  62. package/dist/src/device-claim-inspection.js +1 -1
  63. package/dist/src/device-claim-rule.js +2 -2
  64. package/dist/src/device-input-state.d.ts +1 -1
  65. package/dist/src/device-rotation.js +1 -1
  66. package/dist/src/device-selection-resolver.js +1 -1
  67. package/dist/src/device-session.js +1 -1
  68. package/dist/src/device.js +1 -1
  69. package/dist/src/device2.js +1 -1
  70. package/dist/src/devicectl.js +1 -1
  71. package/dist/src/dispatch-resolve.js +1 -1
  72. package/dist/src/display-inventory.js +1 -1
  73. package/dist/src/doctor-facade.js +1 -1
  74. package/dist/src/durable-resource.js +1 -1
  75. package/dist/src/exec.js +1 -1
  76. package/dist/src/find.js +1 -1
  77. package/dist/src/finders.js +1 -1
  78. package/dist/src/fold-runtime.js +1 -0
  79. package/dist/src/gesture-admission.js +1 -1
  80. package/dist/src/gesture-runtime.js +1 -1
  81. package/dist/src/harmonyos.js +1 -1
  82. package/dist/src/helper.js +2 -2
  83. package/dist/src/host.js +1 -0
  84. package/dist/src/interaction-positionals.js +1 -1
  85. package/dist/src/interaction-ref-policy.js +1 -1
  86. package/dist/src/interaction.js +1 -1
  87. package/dist/src/interaction2.js +1 -1
  88. package/dist/src/interactor-operation-binding.js +1 -0
  89. package/dist/src/interactor-operation-catalog.js +1 -1
  90. package/dist/src/interactor.js +4 -5
  91. package/dist/src/interactor2.js +1 -1
  92. package/dist/src/interactors.js +1 -1
  93. package/dist/src/internal/bin.js +1 -1
  94. package/dist/src/internal/daemon.js +2 -2
  95. package/dist/src/internal/png-worker.d.ts +5 -0
  96. package/dist/src/internal/png-worker.js +1 -1
  97. package/dist/src/inventory2.js +1 -1
  98. package/dist/src/ios-snapshot-acquisition.js +1 -1
  99. package/dist/src/ios-snapshot-runtime.js +1 -1
  100. package/dist/src/lease.js +1 -1
  101. package/dist/src/linux.js +1 -1
  102. package/dist/src/local-interactor-operation-set.js +1 -1
  103. package/dist/src/location-coordinates.js +1 -1
  104. package/dist/src/macos-facade.js +1 -1
  105. package/dist/src/managed-device-scope.js +1 -1
  106. package/dist/src/mechanics.js +17 -16
  107. package/dist/src/mobile-snapshot-semantics.js +1 -1
  108. package/dist/src/mp4-duration.js +1 -0
  109. package/dist/src/multitouch-support.js +1 -1
  110. package/dist/src/owner-identity.js +1 -1
  111. package/dist/src/parameterized-recorded-fill.js +1 -1
  112. package/dist/src/perf-facade.js +2 -2
  113. package/dist/src/perf-runtime-plan.js +1 -1
  114. package/dist/src/physical-device-control.js +1 -1
  115. package/dist/src/platform-request-scope.js +1 -1
  116. package/dist/src/platform-runtime-managed-owner.js +1 -1
  117. package/dist/src/platform-runtime-open-target.js +1 -1
  118. package/dist/src/platform-runtime-operation-host.js +2 -2
  119. package/dist/src/platform-runtime-runtime-hints.js +1 -1
  120. package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
  121. package/dist/src/platform-runtime-unavailable.js +1 -1
  122. package/dist/src/platform-runtime.js +1 -1
  123. package/dist/src/platform-runtime2.js +1 -1
  124. package/dist/src/png-crop-bytes.js +1 -1
  125. package/dist/src/png-encode.js +1 -0
  126. package/dist/src/png-size.js +1 -0
  127. package/dist/src/png-worker-client.js +1 -1
  128. package/dist/src/provider-webdriver.js +1 -1
  129. package/dist/src/quality-warnings.js +1 -1
  130. package/dist/src/react-native.js +1 -1
  131. package/dist/src/record-runtime.js +1 -1
  132. package/dist/src/recording-export-quality.js +1 -1
  133. package/dist/src/recording-scope.js +1 -0
  134. package/dist/src/recording.js +3 -0
  135. package/dist/src/registry.js +35 -35
  136. package/dist/src/replay.js +1 -1
  137. package/dist/src/request-admission.js +1 -1
  138. package/dist/src/request-runtime-binding.js +1 -1
  139. package/dist/src/result-serialization.js +1 -1
  140. package/dist/src/runner-cache-metadata.js +2 -2
  141. package/dist/src/runner-client.js +1 -1
  142. package/dist/src/runner-contract.js +3 -0
  143. package/dist/src/runner-dev-tools-security.js +1 -0
  144. package/dist/src/runner-device-readiness.js +1 -0
  145. package/dist/src/runner-disposal.js +1 -1
  146. package/dist/src/runner-operations-facade.js +1 -1
  147. package/dist/src/runner-presentation.js +1 -1
  148. package/dist/src/runner.js +1 -1
  149. package/dist/src/runtime.js +2 -2
  150. package/dist/src/runtime10.js +2 -1
  151. package/dist/src/runtime2.js +4 -4
  152. package/dist/src/runtime4.js +5 -5
  153. package/dist/src/runtime5.js +1 -1
  154. package/dist/src/runtime6.js +1 -1
  155. package/dist/src/runtime7.js +1 -1
  156. package/dist/src/runtime8.js +1 -1
  157. package/dist/src/runtime9.js +1 -1
  158. package/dist/src/screen-recording-admission-ledger.js +1 -1
  159. package/dist/src/screen-recording-resource-recovery.js +1 -1
  160. package/dist/src/screen-recording-transport.js +1 -1
  161. package/dist/src/screenshot-density.js +1 -1
  162. package/dist/src/screenshot-image.js +1 -0
  163. package/dist/src/screenshot-overlay-draw.js +1 -0
  164. package/dist/src/screenshot-runtime.js +1 -1
  165. package/dist/src/script.js +1 -1
  166. package/dist/src/scroll-gesture.js +1 -1
  167. package/dist/src/sdk-batch.js +2 -2
  168. package/dist/src/sdk-contracts.d.ts +7 -5
  169. package/dist/src/sdk-contracts.js +2 -2
  170. package/dist/src/sdk-device.js +1 -1
  171. package/dist/src/sdk-finders.js +1 -1
  172. package/dist/src/sdk-selectors.d.ts +58 -6
  173. package/dist/src/sdk-selectors.js +1 -1
  174. package/dist/src/selection.js +0 -0
  175. package/dist/src/selector-runtime.js +1 -1
  176. package/dist/src/selectors.js +1 -1
  177. package/dist/src/semantic-index.js +1 -1
  178. package/dist/src/session-routing.js +1 -1
  179. package/dist/src/session-snapshot.js +1 -1
  180. package/dist/src/session-store.js +3 -3
  181. package/dist/src/session2.js +3 -3
  182. package/dist/src/simctl.js +1 -1
  183. package/dist/src/simulator-boot.js +1 -1
  184. package/dist/src/simulator-facade.js +1 -1
  185. package/dist/src/simulator.js +1 -1
  186. package/dist/src/snapshot-runtime-binding.js +1 -1
  187. package/dist/src/snapshot-runtime.js +1 -1
  188. package/dist/src/snapshot-state.js +1 -1
  189. package/dist/src/snapshot4.js +1 -1
  190. package/dist/src/src.js +1 -1
  191. package/dist/src/src7.js +1 -1
  192. package/dist/src/src8.js +1 -1
  193. package/dist/src/stop-sequence.js +1 -1
  194. package/dist/src/text-entry-focus.js +1 -1
  195. package/dist/src/touch-runtime.js +1 -1
  196. package/dist/src/tree.js +1 -1
  197. package/dist/src/type-text-runtime.js +1 -1
  198. package/dist/src/video.js +2 -2
  199. package/dist/src/web2.js +1 -1
  200. package/package.json +3 -1
  201. package/server.json +2 -2
  202. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.7.apk.sha256 +0 -1
  203. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.7.apk.sha256 +0 -1
  204. package/dist/src/png-transcode.js +0 -1
@@ -1 +1 @@
1
- import{D as e}from"./sdk-contracts.js";import{w as t}from"./sdk-device.js";const n=/^(iphone|ipad|ipod|appletv|realitydevice)/i,r=/ipad/i,i=/\b(apple vision|vision pro|xros|visionos|realitydevice)\b/i,a=/\b(iphone|ipad|ipod)\b/i,o=/^appletv/i,s=[`apple tv`,`appletv`,`tvos`];function c(e){return(e??``).trim().toLowerCase()}function l(e){return e.includes(`tvos`)}function u(e){return e.includes(`xros`)||e.includes(`visionos`)}function d(e){return l(c(e))?`tv`:`mobile`}function f(e){let t=c(e);return t.includes(`ios`)||t.includes(`tvos`)||t.includes(`xros`)||t.includes(`visionos`)}function p(e){let t=c(e);return s.some(e=>t.includes(e))}function m(e){return a.test(e.trim())}function h(e){return p(e)?`tv`:m(e)||i.test(e)?`mobile`:null}function g(e,t){return e===`tv`?`tvos`:t.some(e=>i.test(e))?`visionos`:t.some(e=>r.test(e))?`ipados`:`ios`}function _(e){return n.test(e.trim())}function v(e){return o.test(e.trim())}function y(e){return[e.name??``,e.deviceProperties?.name??``,e.deviceProperties?.deviceType??``]}function b(e){return e.hardwareProperties?.productType??e.deviceProperties?.productType??``}function x(e){return l(c(e.hardwareProperties?.platform))||v(b(e))||y(e).some(p)?`tv`:`mobile`}function S(e){let t=c(e.hardwareProperties?.platform);return t.includes(`ios`)||l(t)||u(t)||_(b(e))?!0:y(e).some(p)}function C(e){if(!S(e))return null;let t=e.hardwareProperties?.udid??e.identifier??``,n=e.name??e.deviceProperties?.name??t;if(!t)return null;let r=x(e);return{platform:`apple`,id:t,name:n,kind:`device`,target:r,appleOs:g(r,[b(e),...y(e)]),iosPhysicalDeviceBackend:`coredevice`,booted:!0}}const w=/^==\s*(.+?)\s*==$/,T=/^(?<name>.+?)\s+(?:\[(?<idBracket>[^[\]]+)\]|\((?<osVersion>[^)]+)\)\s+\((?<idParen>[^)]+)\))\s*$/;function E(e){let t=[],n=null;for(let r of e.split(/\r?\n/)){let e=r.trim();if(!e)continue;let i=w.exec(e);if(i){n=i[1]?.trim()??null;continue}if(n!==`Devices`)continue;let a=D(e);a&&t.push(a)}return t}function D(e){let t=T.exec(e)?.groups;if(!t)return;let n=t.name?.trim(),r=t.idBracket?.trim()||t.idParen?.trim();if(!n||!r)return;let i=h(n);if(!i)return;let a=t.osVersion?.trim();return{platform:`apple`,id:r,name:n,kind:`device`,target:i,appleOs:g(i,a?[n,a]:[n]),iosPhysicalDeviceBackend:`xctest`,booted:!0}}async function O(e,t){let[n,r]=await Promise.all([k(e,t),A(e,t)]);return j(n,r)}async function k(e,t){let n;try{return n=await e.files.createTemporaryTextFile({prefix:`agent-device-devicectl-`,suffix:`.json`}),(await e.appleTools.run({tool:`devicectl`,args:[`list`,`devices`,`--json-output`,n.path],allowFailure:!0,timeoutMs:8e3},t.signal)).exitCode===0?(JSON.parse(await n.readText()).result?.devices??[]).flatMap(e=>{let t=C(e);return t?[t]:[]}):[]}catch{return t.signal.throwIfAborted(),[]}finally{try{await n?.[Symbol.asyncDispose]()}catch{}}}async function A(e,t){try{let n=await e.appleTools.run({tool:`xctrace`,args:[`list`,`devices`],allowFailure:!0},t.signal);return n.exitCode===0?E(n.stdout):[]}catch{return t.signal.throwIfAborted(),[]}}function j(e,t){let n=new Set(e.map(e=>e.id)),r=[...e];for(let e of t)n.has(e.id)||(n.add(e.id),r.push(e));return r}function M(e){let t=e?.trim();return t?[`--set`,t,`list`,`devices`,`-j`]:[`list`,`devices`,`-j`]}function N(e,t){let n=[];for(let[r,i]of Object.entries(e.devices))if(f(r))for(let e of i){if(!e.isAvailable)continue;let i=d(r);n.push({platform:`apple`,id:e.udid,name:e.name,kind:`simulator`,target:i,appleOs:g(i,[e.deviceTypeIdentifier??``,e.name]),booted:e.state===`Booted`,...t?{simulatorSetPath:t}:{}})}return n}async function P(n,r,i){let a=r.iosSimulatorSetPath?.trim()||void 0,o=await n.appleTools.run({tool:`simctl`,args:M(a),...r.booted===!0?{timeoutMs:3e3}:{}},i.signal),s;try{s=N(JSON.parse(o.stdout),a)}catch(t){throw new e(`COMMAND_FAILED`,`Failed to parse simctl devices JSON`,void 0,t)}for(let e of s)e.booted===!0&&await n.observations.deviceBooted(e);return t(s)}function F(e){return Object.freeze({discover:async(t,n)=>await I(e,t,n)})}async function I(n,r,i){if(L(r))return[B(n)];if(n.hostOs!==`darwin`)throw z(n.hostOs);if(!await n.appleTools.isXcrunAvailable(i.signal))throw new e(`TOOL_MISSING`,`xcrun not found in PATH`);let a=P(n,r,i);if(r.kind===`simulator`)return await a;if(r.iosSimulatorSetPath||r.udid){let e=await a,o=[...e,B(n)];if(r.iosSimulatorSetPath||e.some(e=>e.id===r.udid))return t(o);let s=await O(n,i);return t(V(o,s))}let[o,s]=await Promise.all([a,O(n,i)]),c=[...o,B(n)];return t(V(c,s))}function L(e){return e.platform===`macos`||e.platform===`apple`&&e.target===`desktop`}const R={darwin:`macOS`,linux:`Linux`,win32:`Windows`,other:`a non-macOS host`};function z(t){return new e(`UNSUPPORTED_PLATFORM`,`Apple tools are only available on macOS`,{supportedOn:`macOS`,hostOs:t,retriable:!1,hint:`This host runs ${R[t]}, so it cannot boot iOS Simulators or run macOS sessions. Drive Android here instead with the same command shape: agent-device devices --platform android to list targets, then agent-device open <app.apk> --platform android. To use an iOS Simulator from this machine, run agent-device on a macOS host and pass --daemon-base-url <that daemon URL>.`})}function B(e){return{platform:`apple`,id:`host-macos-local`,name:e.hostName,kind:`device`,target:`desktop`,appleOs:`macos`,booted:!0}}function V(e,t){let n=new Set(e.map(e=>e.id));return[...e,...t.filter(e=>!n.has(e.id)&&(n.add(e.id),!0))]}export{F as createAppleInventorySource};
1
+ import{D as e}from"./sdk-contracts.js";import{T as t}from"./sdk-device.js";const n=/^(iphone|ipad|ipod|appletv|realitydevice)/i,r=/ipad/i,i=/\b(apple vision|vision pro|xros|visionos|realitydevice)\b/i,a=/\b(iphone|ipad|ipod)\b/i,o=/^appletv/i,s=[`apple tv`,`appletv`,`tvos`];function c(e){return(e??``).trim().toLowerCase()}function l(e){return e.includes(`tvos`)}function u(e){return e.includes(`xros`)||e.includes(`visionos`)}function d(e){return l(c(e))?`tv`:`mobile`}function f(e){let t=c(e);return t.includes(`ios`)||t.includes(`tvos`)||t.includes(`xros`)||t.includes(`visionos`)}function p(e){let t=c(e);return s.some(e=>t.includes(e))}function m(e){return a.test(e.trim())}function h(e){return p(e)?`tv`:m(e)||i.test(e)?`mobile`:null}function g(e,t){return e===`tv`?`tvos`:t.some(e=>i.test(e))?`visionos`:t.some(e=>r.test(e))?`ipados`:`ios`}function _(e){return n.test(e.trim())}function v(e){return o.test(e.trim())}function y(e){return[e.name??``,e.deviceProperties?.name??``,e.deviceProperties?.deviceType??``]}function b(e){return e.hardwareProperties?.productType??e.deviceProperties?.productType??``}function x(e){return l(c(e.hardwareProperties?.platform))||v(b(e))||y(e).some(p)?`tv`:`mobile`}function S(e){let t=c(e.hardwareProperties?.platform);return t.includes(`ios`)||l(t)||u(t)||_(b(e))?!0:y(e).some(p)}function C(e){if(!S(e))return null;let t=e.hardwareProperties?.udid??e.identifier??``,n=e.name??e.deviceProperties?.name??t;if(!t)return null;let r=x(e);return{platform:`apple`,id:t,name:n,kind:`device`,target:r,appleOs:g(r,[b(e),...y(e)]),iosPhysicalDeviceBackend:`coredevice`,booted:!0}}const w=/^==\s*(.+?)\s*==$/,T=/^(?<name>.+?)\s+(?:\[(?<idBracket>[^[\]]+)\]|\((?<osVersion>[^)]+)\)\s+\((?<idParen>[^)]+)\))\s*$/;function E(e){let t=[],n=null;for(let r of e.split(/\r?\n/)){let e=r.trim();if(!e)continue;let i=w.exec(e);if(i){n=i[1]?.trim()??null;continue}if(n!==`Devices`)continue;let a=D(e);a&&t.push(a)}return t}function D(e){let t=T.exec(e)?.groups;if(!t)return;let n=t.name?.trim(),r=t.idBracket?.trim()||t.idParen?.trim();if(!n||!r)return;let i=h(n);if(!i)return;let a=t.osVersion?.trim();return{platform:`apple`,id:r,name:n,kind:`device`,target:i,appleOs:g(i,a?[n,a]:[n]),iosPhysicalDeviceBackend:`xctest`,booted:!0}}async function O(e,t){let[n,r]=await Promise.all([k(e,t),A(e,t)]);return j(n,r)}async function k(e,t){let n;try{return n=await e.files.createTemporaryTextFile({prefix:`agent-device-devicectl-`,suffix:`.json`}),(await e.appleTools.run({tool:`devicectl`,args:[`list`,`devices`,`--json-output`,n.path],allowFailure:!0,timeoutMs:8e3},t.signal)).exitCode===0?(JSON.parse(await n.readText()).result?.devices??[]).flatMap(e=>{let t=C(e);return t?[t]:[]}):[]}catch{return t.signal.throwIfAborted(),[]}finally{try{await n?.[Symbol.asyncDispose]()}catch{}}}async function A(e,t){try{let n=await e.appleTools.run({tool:`xctrace`,args:[`list`,`devices`],allowFailure:!0},t.signal);return n.exitCode===0?E(n.stdout):[]}catch{return t.signal.throwIfAborted(),[]}}function j(e,t){let n=new Set(e.map(e=>e.id)),r=[...e];for(let e of t)n.has(e.id)||(n.add(e.id),r.push(e));return r}function M(e){let t=e?.trim();return t?[`--set`,t,`list`,`devices`,`-j`]:[`list`,`devices`,`-j`]}function N(e,t){let n=[];for(let[r,i]of Object.entries(e.devices))if(f(r))for(let e of i){if(!e.isAvailable)continue;let i=d(r);n.push({platform:`apple`,id:e.udid,name:e.name,kind:`simulator`,target:i,appleOs:g(i,[e.deviceTypeIdentifier??``,e.name]),booted:e.state===`Booted`,...t?{simulatorSetPath:t}:{}})}return n}async function P(n,r,i){let a=r.iosSimulatorSetPath?.trim()||void 0,o=await n.appleTools.run({tool:`simctl`,args:M(a),...r.booted===!0?{timeoutMs:3e3}:{}},i.signal),s;try{s=N(JSON.parse(o.stdout),a)}catch(t){throw new e(`COMMAND_FAILED`,`Failed to parse simctl devices JSON`,void 0,t)}for(let e of s)e.booted===!0&&await n.observations.deviceBooted(e);return t(s)}function F(e){return Object.freeze({discover:async(t,n)=>await I(e,t,n)})}async function I(n,r,i){if(L(r))return[B(n)];if(n.hostOs!==`darwin`)throw z(n.hostOs);if(!await n.appleTools.isXcrunAvailable(i.signal))throw new e(`TOOL_MISSING`,`xcrun not found in PATH`);let a=P(n,r,i);if(r.kind===`simulator`)return await a;if(r.iosSimulatorSetPath||r.udid){let e=await a,o=[...e,B(n)];if(r.iosSimulatorSetPath||e.some(e=>e.id===r.udid))return t(o);let s=await O(n,i);return t(V(o,s))}let[o,s]=await Promise.all([a,O(n,i)]),c=[...o,B(n)];return t(V(c,s))}function L(e){return e.platform===`macos`||e.platform===`apple`&&e.target===`desktop`}const R={darwin:`macOS`,linux:`Linux`,win32:`Windows`,other:`a non-macOS host`};function z(t){return new e(`UNSUPPORTED_PLATFORM`,`Apple tools are only available on macOS`,{supportedOn:`macOS`,hostOs:t,retriable:!1,hint:`This host runs ${R[t]}, so it cannot boot iOS Simulators or run macOS sessions. Drive Android here instead with the same command shape: agent-device devices --platform android to list targets, then agent-device open <app.apk> --platform android. To use an iOS Simulator from this machine, run agent-device on a macOS host and pass --daemon-base-url <that daemon URL>.`})}function B(e){return{platform:`apple`,id:`host-macos-local`,name:e.hostName,kind:`device`,target:`desktop`,appleOs:`macos`,booted:!0}}function V(e,t){let n=new Set(e.map(e=>e.id));return[...e,...t.filter(e=>!n.has(e.id)&&(n.add(e.id),!0))]}export{F as createAppleInventorySource};
@@ -1 +1 @@
1
- import{Br as e,Nr as t}from"./sdk-batch.js";const n={"appium-source":{producer:`appium-source`,acquisitionDepth:{rawTraversal:{kind:`incomplete`},regularPresented:{kind:`incomplete`}},hittabilityEvidence:`unavailable`},"limrun-ios-tree":{producer:`limrun-ios-tree`,acquisitionDepth:{rawTraversal:{kind:`incomplete`},regularPresented:{kind:`incomplete`}},hittabilityEvidence:`unavailable`}},r={"apple-runner":`available`,"simulator-ax-bridge":`available`,"appium-source":`unavailable`,"limrun-ios-tree":`unavailable`};function i(e){return r[e]}function a(e,t){let n=[];return e.hittabilityEvidence===`unavailable`&&n.push({kind:`unavailable-fact`,fact:`hittability`}),(e.acquisitionDepth.rawTraversal.kind===`incomplete`||e.acquisitionDepth.regularPresented.kind===`incomplete`)&&n.push({kind:`unavailable-fact`,fact:`acquisition-depth`}),i(e.producer)===`unavailable`&&n.push({kind:`unavailable-fact`,fact:`truncation`}),t.kind===`missing`&&n.push({kind:`missing-viewport`,reason:t.reason}),Object.freeze(n)}function o(e){let t=n[e.producer];return{stage:`acquired`,acquisition:{producer:e.producer,intent:`full`,nodes:e.nodes,viewport:e.viewport,lineage:e.lineage,residue:a(t,e.viewport)}}}function s(t,n={}){let r=t.filter(c),i=[...r.length>0||n.fallbackToLargestRoot!==!0?r:t].sort(l)[0];if(i)return e(i.rect)?{kind:`reported`,rect:i.rect}:{kind:`missing`,reason:i.rectStatus===`invalid`||i.rectStatus===void 0&&i.rect!==void 0?`invalid`:`not-provided`}}function c(e){let n=t(e.type??``);return n===`application`||n===`window`}function l(e,t){return u(t.rectStatus)-u(e.rectStatus)||d(t.rect)-d(e.rect)}function u(e){return e===`reported`?2:+(e===`invalid`)}function d(t){return t&&e(t)?t.width*t.height:0}export{i as n,s as r,o as t};
1
+ import{Ir as e,Ur as t}from"./sdk-batch.js";const n={"appium-source":{producer:`appium-source`,acquisitionDepth:{rawTraversal:{kind:`incomplete`},regularPresented:{kind:`incomplete`}},hittabilityEvidence:`unavailable`},"limrun-ios-tree":{producer:`limrun-ios-tree`,acquisitionDepth:{rawTraversal:{kind:`incomplete`},regularPresented:{kind:`incomplete`}},hittabilityEvidence:`unavailable`}},r={"apple-runner":`available`,"simulator-ax-bridge":`available`,"appium-source":`unavailable`,"limrun-ios-tree":`unavailable`};function i(e){return r[e]}function a(e,t){let n=[];return e.hittabilityEvidence===`unavailable`&&n.push({kind:`unavailable-fact`,fact:`hittability`}),(e.acquisitionDepth.rawTraversal.kind===`incomplete`||e.acquisitionDepth.regularPresented.kind===`incomplete`)&&n.push({kind:`unavailable-fact`,fact:`acquisition-depth`}),i(e.producer)===`unavailable`&&n.push({kind:`unavailable-fact`,fact:`truncation`}),t.kind===`missing`&&n.push({kind:`missing-viewport`,reason:t.reason}),Object.freeze(n)}function o(e){let t=n[e.producer];return{stage:`acquired`,acquisition:{producer:e.producer,intent:`full`,nodes:e.nodes,viewport:e.viewport,lineage:e.lineage,residue:a(t,e.viewport)}}}function s(e,n={}){let r=e.filter(c),i=[...r.length>0||n.fallbackToLargestRoot!==!0?r:e].sort(l)[0];if(i)return t(i.rect)?{kind:`reported`,rect:i.rect}:{kind:`missing`,reason:i.rectStatus===`invalid`||i.rectStatus===void 0&&i.rect!==void 0?`invalid`:`not-provided`}}function c(t){let n=e(t.type??``);return n===`application`||n===`window`}function l(e,t){return u(t.rectStatus)-u(e.rectStatus)||d(t.rect)-d(e.rect)}function u(e){return e===`reported`?2:+(e===`invalid`)}function d(e){return e&&t(e)?e.width*e.height:0}export{i as n,s as r,o as t};
@@ -1 +1 @@
1
- import{D as e,m as t}from"./sdk-contracts.js";import{Br as n,Nr as r,zr as i}from"./sdk-batch.js";import{i as a,n as o,r as s,t as c}from"./ios-snapshot-planning.js";import{t as l}from"./semantic-index.js";import{a as u,i as d,n as f,o as p,r as m,t as h}from"./runner-presentation.js";const g=new Set([`collectionview`,`scrollview`,`table`]),_=new Set([`application`,`window`]);function v(e,t,r){return!!(e&&n(t)&&i(r,t.x+t.width/2,t.y+t.height/2))}function y(){return{projectedOut:!1}}function b(e,t,i,a,o,s){let c=s===`cursor-projected`?t.ancestorClip:void 0,l=x(e.rect,i,c),u=n(T(e.rect)),d=n(l),f=r(e.type??``),p=ee(s,t.projectedOut,u,d,f,o),m=C(e,S(s,t.projectedOut,u,d)&&!te(e,u,s),a,s),h=ae(f,m,d,o),g=re(s,t.projectedOut,u,d,e);return{isIncluded:m,descendants:ne(s,p,c,l,h),effectiveRect:l,...g?{hiddenContentFrame:g}:{},establishesScrollAnchor:h}}function x(e,t,n){let r=T(e);if(!r)return;let i=O(r,t);return n&&(i=O(i,n)),i}function ee(e,t,n,r,i,a){return e===`plain-viewport`?!r:t||n&&!r&&ie(i,a)}function S(e,t,n,r){return e===`plain-viewport`?r:!t&&(!n||r)}function te(e,t,n){return n!==`cursor-projected`||e.parentIndex===void 0||w(e)||!t?!1:E(e.rect)<=1||D(e.rect)<=1}function ne(e,t,n,r,i){return{projectedOut:t,...e===`cursor-projected`&&i?{ancestorClip:r}:{ancestorClip:n}}}function re(e,t,n,r,i){if(!(e!==`cursor-projected`||t||!n||r))return T(i.rect)}function ie(e,t){return t&&(e===`cell`||g.has(e))}function ae(e,t,n,r){return t&&n&&r&&g.has(e)}function C(e,t,n,i){if(e.parentIndex===void 0)return!0;let a=r(e.type??``);return i===`plain-viewport`&&n&&!t&&a!==`application`?!1:_.has(a)||t}function w(e){return[e.label,e.identifier,e.value].some(e=>typeof e==`string`&&e.trim().length>0)}function T(e){if(e&&[e.x,e.y,e.width,e.height].every(Number.isFinite)&&!(e.width<0||e.height<0))return{...e,width:Math.max(0,e.width),height:Math.max(0,e.height)}}function E(e){return T(e)?.width??0}function D(e){return T(e)?.height??0}function O(e,t){let n=Math.max(e.x,t.x),r=Math.max(e.y,t.y),i=Math.min(e.x+e.width,t.x+t.width),a=Math.min(e.y+e.height,t.y+t.height);return i<=n||a<=r?{x:e.x,y:e.y,width:0,height:0}:{x:i>n?n:e.x,y:a>r?r:e.y,width:i-n,height:a-r}}function k(e,t,n,r,i={}){d(e);let a=A(e),o=new Map,s=[],c=new Map,l=0;for(let u of e){let e=j(u,o,()=>{l+=1}),d=e?.traversal??y(),f=r===`cursor-projected`?e?.anchor:void 0,p=b(u,d,t,n,a.has(u.index),r);M(p,f,c);let m=N(u,p,e,s,t,i),h=F(p,f,m.keptIndex);o.set(u.index,{traversal:p.descendants,anchor:h,keptIndex:m.keptIndex,keptDepth:m.keptDepth})}let u=L(c,s);return{nodes:u,stats:{presentedNodeCount:u.length,sourceNodeCount:e.length,parentClipLookups:l}}}function A(e){let t=new Set;for(let n of e)n.parentIndex!==void 0&&t.add(n.parentIndex);return t}function j(e,t,n){if(e.parentIndex!==void 0)return n(),t.get(e.parentIndex)}function M(e,t,n){e.hiddenContentFrame&&t&&I(e.hiddenContentFrame,t,n)}function N(e,t,n,r,i,a){let o=n?.keptIndex,s=n?.keptDepth??-1;if(!t.isIncluded)return{keptIndex:o,keptDepth:s};let c=r.length;s+=1;let{hittable:l,...u}=e;return r.push({raw:{...u,index:c,depth:s,parentIndex:o,...P(l,e.parentIndex!==void 0,t.effectiveRect,e.enabled!==!1,i,a)},sourceIndex:e.index,...t.effectiveRect?{effectiveRect:t.effectiveRect}:{}}),o=c,{keptIndex:o,keptDepth:s}}function P(e,t,n,r,i,a){return a.hittabilityAvailable===!1?e===!1||!r?{hittable:!1}:{}:{hittable:t&&e===!0&&v(r,n,i)}}function F(e,t,n){return e.establishesScrollAnchor&&n!==void 0&&e.effectiveRect?{index:n,rect:e.effectiveRect}:t}function I(e,t,n){let r=n.get(t.index)??{above:!1,below:!1};e.y+e.height<=t.rect.y?r.above=!0:e.y>=t.rect.y+t.rect.height&&(r.below=!0),n.set(t.index,r)}function L(e,t){return t.map(t=>{let n=e.get(t.raw.index);if(!n)return t;let r=t.raw;return{...t,raw:{...r,hiddenContentAbove:r.hiddenContentAbove===!0||n.above?!0:void 0,hiddenContentBelow:r.hiddenContentBelow===!0||n.below?!0:void 0}}})}const R=new Set([`button`,`cell`,`checkbox`,`collectionview`,`link`,`menuitem`,`picker`,`searchfield`,`securetextfield`,`segmentedcontrol`,`slider`,`scrollview`,`stepper`,`switch`,`tabbar`,`table`,`textfield`,`textview`,`webview`]);function z(e){let t=X(e.nodes),n=H(e,t);return e.projection===`raw`?U(n,e.depth,t):W(n,e.depth)}function B(e){let t=X(e.nodes);return e.projection===`raw`?U(e.nodes,e.depth,t):W(e.nodes,e.depth)}function V(e){return e.parentIndex===void 0||R.has(r(e.type??``))||le(e)}function H(e,t){let n=e.scope?.trim().toLowerCase();if(!n)return[...e.nodes];for(let r=0;r<e.nodes.length;r+=1){let i=e.nodes[r];if(!i||!se(i.raw,n))continue;let a=ce(e.nodes,r,t);if(!(e.projection===`raw`||a.some(t=>V(e.nodes[t].raw))))continue;let o=a.map(t=>e.nodes[t]);return oe(e.projection===`raw`&&e.depth!==null?o.filter(n=>Y(n,t)-Y(i,t)<=e.depth):o,Y(i,t),t)}return[]}function U(e,t,n){let r=t===null?[...e]:e.filter(e=>Y(e,n)<=t);return{nodes:r.map(e=>({...e.raw,rect:e.raw.rect})),sourceIndexes:r.map(e=>e.sourceIndex)}}function W(e,t){let n=[],r=[],i=new Map;for(let a of e){let e=G(a,i),o=K(a,e,t,n.length);if(!o){J(a,e,i);continue}n.push(o),r.push(a.sourceIndex),i.set(a.raw.index,o)}return{nodes:n,sourceIndexes:r}}function G(e,t){return e.raw.parentIndex===void 0?void 0:t.get(e.raw.parentIndex)}function K(e,t,n,r){if(!V(e.raw))return;let i=t?(t.depth??0)+1:0;if(n!==null&&i>n)return;let a=q(e);return{...e.raw,index:r,depth:i,parentIndex:t?.index,...e.effectiveRect?{rect:e.effectiveRect}:{rect:void 0},...a===void 0?{}:{hittable:a}}}function q(e){if(e.raw.hittable!==void 0)return!!(e.raw.hittable===!0&&e.effectiveRect&&e.effectiveRect.width>0&&e.effectiveRect.height>0)}function J(e,t,n){t&&n.set(e.raw.index,t)}function oe(e,t,n){let r=new Map(e.map((e,t)=>[e.raw.index,t]));return e.map((e,i)=>({...e,raw:{...e.raw,index:i,depth:Math.max(0,Y(e,n)-t),parentIndex:e.raw.parentIndex===void 0?void 0:r.get(e.raw.parentIndex)}}))}function se(e,t){return[e.label,e.identifier,e.value].some(e=>typeof e==`string`&&e.toLowerCase().includes(t))}function ce(e,t,n){let r=Y(e[t],n),i=[];for(let a=t;a<e.length&&!(a>t&&Y(e[a],n)<=r);a+=1)i.push(a);return i}function Y(e,t){return Math.max(0,e.raw.depth??t?.get(e.raw.index)??0)}function X(e){let t=new Map;for(let n of e){let e=(n.raw.parentIndex===void 0?-1:t.get(n.raw.parentIndex)??-1)+1;t.set(n.raw.index,n.raw.depth===void 0?e:Math.max(0,n.raw.depth))}return t}function le(e){return[e.label,e.identifier,e.value].some(e=>typeof e==`string`&&e.trim().length>0)}function ue(e,n,r={}){let i=de(e,n,r),a=e.stage===`presented`?e.validation.presentationKey:o(n),s=e.stage===`acquired`?e.acquisition.truncated:e.presentation.payload.truncated;return{payload:{nodes:t(i.nodes),...s===void 0?{}:{truncated:s}},presentationKey:a,comparisonIdentity:c(e,n),residue:e.stage===`acquired`?[...e.acquisition.residue]:[...e.validation.residue]}}function de(e,t,n={}){let r=n.foldPolicy??`cursor-projected`;return e.stage===`acquired`?fe(e.acquisition,t,r):h(e,t,r)}function fe(e,t,n){if(me(e,a(t)),t.projection===`raw`){d(e.nodes);let r=e.nodes.map(e=>({raw:e,sourceIndex:e.index})),i=z({nodes:r,projection:`raw`,scope:t.scope,depth:t.depth,foldPolicy:n}),a=t.scope===null?void 0:B({nodes:r,projection:`raw`,depth:null,foldPolicy:n}).nodes;return{nodes:i.nodes,...a?{qualityNodes:a}:{},presentedIndexesBySourceIndex:Q(e.nodes,i.nodes,i.sourceIndexes,Z(i.nodes)),stats:{presentedNodeCount:i.nodes.length,sourceNodeCount:e.nodes.length,parentClipLookups:0}}}let r=f(e),i=!pe(e.residue),o=k(e.nodes,r,t.interactiveOnly,n,{hittabilityAvailable:i}),s=z({nodes:o.nodes,projection:`regular`,scope:t.scope,depth:t.depth,foldPolicy:n}),c=t.interactiveOnly?l(s.nodes):{nodes:s.nodes,presentedIndexesBySourceIndex:Z(s.nodes)},u=m(c.nodes,`regular`,r,n,i),p=t.scope===null?void 0:B({nodes:o.nodes,projection:`regular`,depth:null,foldPolicy:n}).nodes;return{nodes:c.nodes,...p?{qualityNodes:p}:{},presentedIndexesBySourceIndex:Q(e.nodes,s.nodes,s.sourceIndexes,c.presentedIndexesBySourceIndex),stats:{presentedNodeCount:c.nodes.length,sourceNodeCount:e.nodes.length,parentClipLookups:o.stats.parentClipLookups+u.parentClipLookups}}}function pe(e){return e.some(e=>e.kind===`unavailable-fact`&&e.fact===`hittability`)}function me(e,t){let n=e.hint;if(n.projection!==t.projection||n.rawTraversalDepth!==t.rawTraversalDepth||n.regularPresentedDepth!==t.regularPresentedDepth||n.interactiveOnly!==t.interactiveOnly||n.customActions!==t.customActions||n.acquisitionIntent!==t.acquisitionIntent)throw new u(`projection-mismatch`,`acquired iOS snapshot does not match the requested capture hint`,{projection:n.projection})}function Z(e){return new Map(e.map(e=>[e.index,[e.index]]))}function Q(e,t,n,r){let i=new Map(t.map((e,t)=>[e.index,n[t]])),a=new Map(e.map(e=>[e.index,[]]));for(let[e,t]of r){let n=i.get(e);n!==void 0&&a.set(n,t)}return a}const he={"acquisition-depth":`iOS snapshot acquisition does not report hierarchy completeness; provider-side depth or child limits may omit nodes.`,hittability:`iOS snapshot acquisition does not provide hittability evidence; regular snapshots omit unverified hittability while raw snapshots preserve supplied facts.`,truncation:`iOS snapshot acquisition does not expose truncation metadata; tree completeness is not independently verified.`};function ge(e,t){let n=s({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions,acquisitionIntent:e.acquisition.intent}),r=$(e,n);try{let t=ue(r,n);return{backend:`xctest`,producer:e.acquisition.producer,nodes:[...t.payload.nodes],comparisonIdentity:t.comparisonIdentity,...e.acquisition.truncated===void 0?{}:{truncated:e.acquisition.truncated},..._e(e.acquisition.residue)}}catch(e){ve(e)}}function $(e,t){let n=a(t);return e.acquisition.intent===`full`?{stage:`acquired`,acquisition:{...e.acquisition,intent:`full`,hint:{...n,acquisitionIntent:`full`}}}:{stage:`acquired`,acquisition:{...e.acquisition,intent:`surface-observation`,hint:{...n,acquisitionIntent:`surface-observation`}}}}function _e(e){let t=new Set(e.flatMap(e=>{if(e.kind===`missing-viewport`)return[`iOS snapshot acquisition did not provide a valid viewport (${e.reason}); retry with --raw to inspect the acquired tree, while regular presentation requires viewport evidence.`];if(e.kind!==`unavailable-fact`)return[];let t=he[e.fact];return t?[t]:[]}));return t.size===0?{}:{warnings:[...t]}}function ve(t){if(!(t instanceof u))throw t;let n=p(t),r=t.reason===`missing-viewport`||t.reason===`invalid-viewport`?`Use snapshot --raw to inspect the acquired iOS tree; regular presentation requires valid viewport evidence.`:void 0;throw new e(`COMMAND_FAILED`,t.message,{...n,...r?{hint:r}:{}},t)}export{ge as presentIosSnapshotAcquisition};
1
+ import{D as e,m as t}from"./sdk-contracts.js";import{Hr as n,Ir as r,Ur as i}from"./sdk-batch.js";import{i as a,n as o,r as s,t as c}from"./ios-snapshot-planning.js";import{t as l}from"./semantic-index.js";import{a as u,i as d,n as f,o as p,r as m,t as h}from"./runner-presentation.js";const g=new Set([`collectionview`,`scrollview`,`table`]),_=new Set([`application`,`window`]);function v(e,t,r){return!!(e&&i(t)&&n(r,t.x+t.width/2,t.y+t.height/2))}function y(){return{projectedOut:!1}}function b(e,t,n,a,o,s){let c=s===`cursor-projected`?t.ancestorClip:void 0,l=x(e.rect,n,c),u=i(T(e.rect)),d=i(l),f=r(e.type??``),p=ee(s,t.projectedOut,u,d,f,o),m=C(e,S(s,t.projectedOut,u,d)&&!te(e,u,s),a,s),h=ae(f,m,d,o),g=re(s,t.projectedOut,u,d,e);return{isIncluded:m,descendants:ne(s,p,c,l,h),effectiveRect:l,...g?{hiddenContentFrame:g}:{},establishesScrollAnchor:h}}function x(e,t,n){let r=T(e);if(!r)return;let i=O(r,t);return n&&(i=O(i,n)),i}function ee(e,t,n,r,i,a){return e===`plain-viewport`?!r:t||n&&!r&&ie(i,a)}function S(e,t,n,r){return e===`plain-viewport`?r:!t&&(!n||r)}function te(e,t,n){return n!==`cursor-projected`||e.parentIndex===void 0||w(e)||!t?!1:E(e.rect)<=1||D(e.rect)<=1}function ne(e,t,n,r,i){return{projectedOut:t,...e===`cursor-projected`&&i?{ancestorClip:r}:{ancestorClip:n}}}function re(e,t,n,r,i){if(!(e!==`cursor-projected`||t||!n||r))return T(i.rect)}function ie(e,t){return t&&(e===`cell`||g.has(e))}function ae(e,t,n,r){return t&&n&&r&&g.has(e)}function C(e,t,n,i){if(e.parentIndex===void 0)return!0;let a=r(e.type??``);return i===`plain-viewport`&&n&&!t&&a!==`application`?!1:_.has(a)||t}function w(e){return[e.label,e.identifier,e.value].some(e=>typeof e==`string`&&e.trim().length>0)}function T(e){if(e&&[e.x,e.y,e.width,e.height].every(Number.isFinite)&&!(e.width<0||e.height<0))return{...e,width:Math.max(0,e.width),height:Math.max(0,e.height)}}function E(e){return T(e)?.width??0}function D(e){return T(e)?.height??0}function O(e,t){let n=Math.max(e.x,t.x),r=Math.max(e.y,t.y),i=Math.min(e.x+e.width,t.x+t.width),a=Math.min(e.y+e.height,t.y+t.height);return i<=n||a<=r?{x:e.x,y:e.y,width:0,height:0}:{x:i>n?n:e.x,y:a>r?r:e.y,width:i-n,height:a-r}}function k(e,t,n,r,i={}){d(e);let a=A(e),o=new Map,s=[],c=new Map,l=0;for(let u of e){let e=j(u,o,()=>{l+=1}),d=e?.traversal??y(),f=r===`cursor-projected`?e?.anchor:void 0,p=b(u,d,t,n,a.has(u.index),r);M(p,f,c);let m=N(u,p,e,s,t,i),h=F(p,f,m.keptIndex);o.set(u.index,{traversal:p.descendants,anchor:h,keptIndex:m.keptIndex,keptDepth:m.keptDepth})}let u=L(c,s);return{nodes:u,stats:{presentedNodeCount:u.length,sourceNodeCount:e.length,parentClipLookups:l}}}function A(e){let t=new Set;for(let n of e)n.parentIndex!==void 0&&t.add(n.parentIndex);return t}function j(e,t,n){if(e.parentIndex!==void 0)return n(),t.get(e.parentIndex)}function M(e,t,n){e.hiddenContentFrame&&t&&I(e.hiddenContentFrame,t,n)}function N(e,t,n,r,i,a){let o=n?.keptIndex,s=n?.keptDepth??-1;if(!t.isIncluded)return{keptIndex:o,keptDepth:s};let c=r.length;s+=1;let{hittable:l,...u}=e;return r.push({raw:{...u,index:c,depth:s,parentIndex:o,...P(l,e.parentIndex!==void 0,t.effectiveRect,e.enabled!==!1,i,a)},sourceIndex:e.index,...t.effectiveRect?{effectiveRect:t.effectiveRect}:{}}),o=c,{keptIndex:o,keptDepth:s}}function P(e,t,n,r,i,a){return a.hittabilityAvailable===!1?e===!1||!r?{hittable:!1}:{}:{hittable:t&&e===!0&&v(r,n,i)}}function F(e,t,n){return e.establishesScrollAnchor&&n!==void 0&&e.effectiveRect?{index:n,rect:e.effectiveRect}:t}function I(e,t,n){let r=n.get(t.index)??{above:!1,below:!1};e.y+e.height<=t.rect.y?r.above=!0:e.y>=t.rect.y+t.rect.height&&(r.below=!0),n.set(t.index,r)}function L(e,t){return t.map(t=>{let n=e.get(t.raw.index);if(!n)return t;let r=t.raw;return{...t,raw:{...r,hiddenContentAbove:r.hiddenContentAbove===!0||n.above?!0:void 0,hiddenContentBelow:r.hiddenContentBelow===!0||n.below?!0:void 0}}})}const R=new Set([`button`,`cell`,`checkbox`,`collectionview`,`link`,`menuitem`,`picker`,`searchfield`,`securetextfield`,`segmentedcontrol`,`slider`,`scrollview`,`stepper`,`switch`,`tabbar`,`table`,`textfield`,`textview`,`webview`]);function z(e){let t=X(e.nodes),n=H(e,t);return e.projection===`raw`?U(n,e.depth,t):W(n,e.depth)}function B(e){let t=X(e.nodes);return e.projection===`raw`?U(e.nodes,e.depth,t):W(e.nodes,e.depth)}function V(e){return e.parentIndex===void 0||R.has(r(e.type??``))||le(e)}function H(e,t){let n=e.scope?.trim().toLowerCase();if(!n)return[...e.nodes];for(let r=0;r<e.nodes.length;r+=1){let i=e.nodes[r];if(!i||!se(i.raw,n))continue;let a=ce(e.nodes,r,t);if(!(e.projection===`raw`||a.some(t=>V(e.nodes[t].raw))))continue;let o=a.map(t=>e.nodes[t]);return oe(e.projection===`raw`&&e.depth!==null?o.filter(n=>Y(n,t)-Y(i,t)<=e.depth):o,Y(i,t),t)}return[]}function U(e,t,n){let r=t===null?[...e]:e.filter(e=>Y(e,n)<=t);return{nodes:r.map(e=>({...e.raw,rect:e.raw.rect})),sourceIndexes:r.map(e=>e.sourceIndex)}}function W(e,t){let n=[],r=[],i=new Map;for(let a of e){let e=G(a,i),o=K(a,e,t,n.length);if(!o){J(a,e,i);continue}n.push(o),r.push(a.sourceIndex),i.set(a.raw.index,o)}return{nodes:n,sourceIndexes:r}}function G(e,t){return e.raw.parentIndex===void 0?void 0:t.get(e.raw.parentIndex)}function K(e,t,n,r){if(!V(e.raw))return;let i=t?(t.depth??0)+1:0;if(n!==null&&i>n)return;let a=q(e);return{...e.raw,index:r,depth:i,parentIndex:t?.index,...e.effectiveRect?{rect:e.effectiveRect}:{rect:void 0},...a===void 0?{}:{hittable:a}}}function q(e){if(e.raw.hittable!==void 0)return!!(e.raw.hittable===!0&&e.effectiveRect&&e.effectiveRect.width>0&&e.effectiveRect.height>0)}function J(e,t,n){t&&n.set(e.raw.index,t)}function oe(e,t,n){let r=new Map(e.map((e,t)=>[e.raw.index,t]));return e.map((e,i)=>({...e,raw:{...e.raw,index:i,depth:Math.max(0,Y(e,n)-t),parentIndex:e.raw.parentIndex===void 0?void 0:r.get(e.raw.parentIndex)}}))}function se(e,t){return[e.label,e.identifier,e.value].some(e=>typeof e==`string`&&e.toLowerCase().includes(t))}function ce(e,t,n){let r=Y(e[t],n),i=[];for(let a=t;a<e.length&&!(a>t&&Y(e[a],n)<=r);a+=1)i.push(a);return i}function Y(e,t){return Math.max(0,e.raw.depth??t?.get(e.raw.index)??0)}function X(e){let t=new Map;for(let n of e){let e=(n.raw.parentIndex===void 0?-1:t.get(n.raw.parentIndex)??-1)+1;t.set(n.raw.index,n.raw.depth===void 0?e:Math.max(0,n.raw.depth))}return t}function le(e){return[e.label,e.identifier,e.value].some(e=>typeof e==`string`&&e.trim().length>0)}function ue(e,n,r={}){let i=de(e,n,r),a=e.stage===`presented`?e.validation.presentationKey:o(n),s=e.stage===`acquired`?e.acquisition.truncated:e.presentation.payload.truncated;return{payload:{nodes:t(i.nodes),...s===void 0?{}:{truncated:s}},presentationKey:a,comparisonIdentity:c(e,n),residue:e.stage===`acquired`?[...e.acquisition.residue]:[...e.validation.residue]}}function de(e,t,n={}){let r=n.foldPolicy??`cursor-projected`;return e.stage===`acquired`?fe(e.acquisition,t,r):h(e,t,r)}function fe(e,t,n){if(me(e,a(t)),t.projection===`raw`){d(e.nodes);let r=e.nodes.map(e=>({raw:e,sourceIndex:e.index})),i=z({nodes:r,projection:`raw`,scope:t.scope,depth:t.depth,foldPolicy:n}),a=t.scope===null?void 0:B({nodes:r,projection:`raw`,depth:null,foldPolicy:n}).nodes;return{nodes:i.nodes,...a?{qualityNodes:a}:{},presentedIndexesBySourceIndex:Q(e.nodes,i.nodes,i.sourceIndexes,Z(i.nodes)),stats:{presentedNodeCount:i.nodes.length,sourceNodeCount:e.nodes.length,parentClipLookups:0}}}let r=f(e),i=!pe(e.residue),o=k(e.nodes,r,t.interactiveOnly,n,{hittabilityAvailable:i}),s=z({nodes:o.nodes,projection:`regular`,scope:t.scope,depth:t.depth,foldPolicy:n}),c=t.interactiveOnly?l(s.nodes):{nodes:s.nodes,presentedIndexesBySourceIndex:Z(s.nodes)},u=m(c.nodes,`regular`,r,n,i),p=t.scope===null?void 0:B({nodes:o.nodes,projection:`regular`,depth:null,foldPolicy:n}).nodes;return{nodes:c.nodes,...p?{qualityNodes:p}:{},presentedIndexesBySourceIndex:Q(e.nodes,s.nodes,s.sourceIndexes,c.presentedIndexesBySourceIndex),stats:{presentedNodeCount:c.nodes.length,sourceNodeCount:e.nodes.length,parentClipLookups:o.stats.parentClipLookups+u.parentClipLookups}}}function pe(e){return e.some(e=>e.kind===`unavailable-fact`&&e.fact===`hittability`)}function me(e,t){let n=e.hint;if(n.projection!==t.projection||n.rawTraversalDepth!==t.rawTraversalDepth||n.regularPresentedDepth!==t.regularPresentedDepth||n.interactiveOnly!==t.interactiveOnly||n.customActions!==t.customActions||n.acquisitionIntent!==t.acquisitionIntent)throw new u(`projection-mismatch`,`acquired iOS snapshot does not match the requested capture hint`,{projection:n.projection})}function Z(e){return new Map(e.map(e=>[e.index,[e.index]]))}function Q(e,t,n,r){let i=new Map(t.map((e,t)=>[e.index,n[t]])),a=new Map(e.map(e=>[e.index,[]]));for(let[e,t]of r){let n=i.get(e);n!==void 0&&a.set(n,t)}return a}const he={"acquisition-depth":`iOS snapshot acquisition does not report hierarchy completeness; provider-side depth or child limits may omit nodes.`,hittability:`iOS snapshot acquisition does not provide hittability evidence; regular snapshots omit unverified hittability while raw snapshots preserve supplied facts.`,truncation:`iOS snapshot acquisition does not expose truncation metadata; tree completeness is not independently verified.`};function ge(e,t){let n=s({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions,acquisitionIntent:e.acquisition.intent}),r=$(e,n);try{let t=ue(r,n);return{backend:`xctest`,producer:e.acquisition.producer,nodes:[...t.payload.nodes],comparisonIdentity:t.comparisonIdentity,...e.acquisition.truncated===void 0?{}:{truncated:e.acquisition.truncated},..._e(e.acquisition.residue)}}catch(e){ve(e)}}function $(e,t){let n=a(t);return e.acquisition.intent===`full`?{stage:`acquired`,acquisition:{...e.acquisition,intent:`full`,hint:{...n,acquisitionIntent:`full`}}}:{stage:`acquired`,acquisition:{...e.acquisition,intent:`surface-observation`,hint:{...n,acquisitionIntent:`surface-observation`}}}}function _e(e){let t=new Set(e.flatMap(e=>{if(e.kind===`missing-viewport`)return[`iOS snapshot acquisition did not provide a valid viewport (${e.reason}); retry with --raw to inspect the acquired tree, while regular presentation requires viewport evidence.`];if(e.kind!==`unavailable-fact`)return[];let t=he[e.fact];return t?[t]:[]}));return t.size===0?{}:{warnings:[...t]}}function ve(t){if(!(t instanceof u))throw t;let n=p(t),r=t.reason===`missing-viewport`||t.reason===`invalid-viewport`?`Use snapshot --raw to inspect the acquired iOS tree; regular presentation requires valid viewport evidence.`:void 0;throw new e(`COMMAND_FAILED`,t.message,{...n,...r?{hint:r}:{}},t)}export{ge as presentIosSnapshotAcquisition};
package/dist/src/lease.js CHANGED
@@ -1 +1 @@
1
- import{D as e,j as t,k as n}from"./sdk-contracts.js";import{d as r,l as i,o as a,r as o}from"./lease-scope.js";import{en as s}from"./sdk-batch.js";import{n as c}from"./catalog.js";import{i as l,r as u}from"./request-cancel.js";import"./request.js";import{a as d,n as f}from"./provider-session-ownership.js";import{n as p,r as m}from"./lease-context.js";async function h(e){let{req:t,sessionName:n,sessionStore:o,leaseRegistry:d,providerRuntimeIds:f,providerRuntimeRequiredIds:h,leaseLifecycleProvider:y,cloudArtifactProvider:b}=e,w=p(t);switch(t.command){case c.artifacts:return{ok:!0,data:await C(t,m(t,o.get(n)),d,b)};case`lease_allocate`:{S(w.leaseProvider,f,h);let e=d.allocateLease(a(w));return await d.runDeviceMutation(e,async()=>{let n;try{n=await y?.allocate?.(e,{...x(t),signal:u(t.meta?.requestId),deadline:Date.now()+s}),k(d,e,n)}catch(t){throw d.releaseLease(g(e)),t}if(l(t.meta?.requestId))throw await v(e,y,d);return{ok:!0,data:{lease:e,...n?{provider:n}:{}}}})}case`lease_heartbeat`:{let e=d.heartbeatLease(i(w)),n=await y?.heartbeat?.(e,x(t));return{ok:!0,data:{lease:e,...n?{provider:n}:{}}}}case`lease_release`:{let e=r(w),n=d.getLease(e),i=await d.runDeviceMutation(n,async()=>await _(d,y,n,e,x(t)));return{ok:!0,data:{released:i.registryReleased,...i.provider?{provider:i.provider}:{}}}}default:return null}}function g(e){return r({leaseId:e.leaseId,tenantId:e.tenantId,runId:e.runId,leaseBackend:e.backend,leaseProvider:e.leaseProvider,deviceKey:e.deviceKey,clientId:e.clientId})}async function _(e,t,n,r,i){let a=n?await t?.release?.(n,i):void 0;return n&&k(e,n,a),{registryReleased:e.releaseLease(r).released,provider:a}}async function v(e,n,r){let i=g(e),a,o;try{a=await _(r,n,e,i)}catch(e){o=t(e),a={registryReleased:r.releaseLease(i).released}}return y(e,a,o)}function y(e,t,r){let i=t.provider?.providerSessionId,a=Array.isArray(t.provider?.warnings)?t.provider.warnings:[],o=t.registryReleased&&r===void 0&&a.length===0;return n({leaseId:e.leaseId,leaseProvider:e.leaseProvider,released:o,registryReleased:t.registryReleased,providerSessionId:i,...a.length>0?{warnings:a}:{},...r===void 0?{}:{releaseError:r},hint:b(o,e.leaseId,i)})}function b(e,t,n){return e?`The lease request was canceled while the provider was still allocating; the session it produced was released.`:`The lease request was canceled while the provider was still allocating, and the session it produced could NOT be confirmed released — it may still be running and billing. Stop provider session ${String(n??`(unknown)`)} for lease ${t} by hand.`}function x(e){return{flags:e.flags,...typeof e.flags?.providerApp==`string`?{initialApp:e.flags.providerApp}:{},cwd:typeof e.meta?.cwd==`string`?e.meta.cwd:void 0,...e.internal?.publicNetworkOnly?{publicNetworkOnly:!0}:{}}}function S(t,n,r){if(!(!t||n===void 0||r===void 0||!r.includes(t)||n.includes(t)))throw new e(`UNSUPPORTED_OPERATION`,`Provider "${t}" is not available in this daemon runtime.`,{provider:t,hint:`Restart the daemon with ${t} configured, then retry lease allocation.`})}async function C(e,t,n,r){let i=O(e.flags,`providerSessionId`);return w(t,i)?await T(t.tenantId):await E(t,i,n,r)}function w(e,t){return o(e)||!e.leaseProvider&&!t}async function T(e){let t=await d(e);return{source:`daemon`,status:`ready`,artifacts:t,...t.length===0?{message:`No daemon artifacts available.`}:{}}}async function E(t,n,r,i){if(!t.leaseProvider)throw new e(`INVALID_ARGS`,`artifacts requires --provider for provider session lookup or an active cloud connection.`);if(!t.leaseId&&!n)throw new e(`INVALID_ARGS`,`artifacts requires an active cloud lease or --provider-session <id>.`);let a=D(r,t,n),o=await i?.listCloudArtifacts?.({provider:t.leaseProvider,leaseId:a?.leaseId??t.leaseId,providerSessionId:n});if(!o)throw new e(`UNSUPPORTED_OPERATION`,`Cloud artifacts are not available for provider "${t.leaseProvider}".`);return o}function D(t,n,r){if(!r)return;let i=t.resolveProviderSession({provider:n.leaseProvider,providerSessionId:r,tenantId:n.tenantId});if(i)return i;throw new e(`UNAUTHORIZED`,`Provider session is not owned by the request tenant`,{reason:`PROVIDER_SESSION_NOT_OWNED`})}function O(e,t){let n=e?.[t];return typeof n==`string`&&n.trim().length>0?n.trim():void 0}function k(e,t,n){let r=f(n);r&&e.recordProviderSession(t,r)}export{h as handleLeaseCommands};
1
+ import{D as e,j as t,k as n}from"./sdk-contracts.js";import{d as r,l as i,o as a,r as o}from"./lease-scope.js";import{rn as s}from"./sdk-batch.js";import{n as c}from"./catalog.js";import{i as l,r as u}from"./request-cancel.js";import"./request.js";import{a as d,n as f}from"./provider-session-ownership.js";import{n as p,r as m}from"./lease-context.js";async function h(e){let{req:t,sessionName:n,sessionStore:o,leaseRegistry:d,providerRuntimeIds:f,providerRuntimeRequiredIds:h,leaseLifecycleProvider:y,cloudArtifactProvider:b}=e,w=p(t);switch(t.command){case c.artifacts:return{ok:!0,data:await C(t,m(t,o.get(n)),d,b)};case`lease_allocate`:{S(w.leaseProvider,f,h);let e=d.allocateLease(a(w));return await d.runDeviceMutation(e,async()=>{let n;try{n=await y?.allocate?.(e,{...x(t),signal:u(t.meta?.requestId),deadline:Date.now()+s}),k(d,e,n)}catch(t){throw d.releaseLease(g(e)),t}if(l(t.meta?.requestId))throw await v(e,y,d);return{ok:!0,data:{lease:e,...n?{provider:n}:{}}}})}case`lease_heartbeat`:{let e=d.heartbeatLease(i(w)),n=await y?.heartbeat?.(e,x(t));return{ok:!0,data:{lease:e,...n?{provider:n}:{}}}}case`lease_release`:{let e=r(w),n=d.getLease(e),i=await d.runDeviceMutation(n,async()=>await _(d,y,n,e,x(t)));return{ok:!0,data:{released:i.registryReleased,...i.provider?{provider:i.provider}:{}}}}default:return null}}function g(e){return r({leaseId:e.leaseId,tenantId:e.tenantId,runId:e.runId,leaseBackend:e.backend,leaseProvider:e.leaseProvider,deviceKey:e.deviceKey,clientId:e.clientId})}async function _(e,t,n,r,i){let a=n?await t?.release?.(n,i):void 0;return n&&k(e,n,a),{registryReleased:e.releaseLease(r).released,provider:a}}async function v(e,n,r){let i=g(e),a,o;try{a=await _(r,n,e,i)}catch(e){o=t(e),a={registryReleased:r.releaseLease(i).released}}return y(e,a,o)}function y(e,t,r){let i=t.provider?.providerSessionId,a=Array.isArray(t.provider?.warnings)?t.provider.warnings:[],o=t.registryReleased&&r===void 0&&a.length===0;return n({leaseId:e.leaseId,leaseProvider:e.leaseProvider,released:o,registryReleased:t.registryReleased,providerSessionId:i,...a.length>0?{warnings:a}:{},...r===void 0?{}:{releaseError:r},hint:b(o,e.leaseId,i)})}function b(e,t,n){return e?`The lease request was canceled while the provider was still allocating; the session it produced was released.`:`The lease request was canceled while the provider was still allocating, and the session it produced could NOT be confirmed released — it may still be running and billing. Stop provider session ${String(n??`(unknown)`)} for lease ${t} by hand.`}function x(e){return{flags:e.flags,...typeof e.flags?.providerApp==`string`?{initialApp:e.flags.providerApp}:{},cwd:typeof e.meta?.cwd==`string`?e.meta.cwd:void 0,...e.internal?.publicNetworkOnly?{publicNetworkOnly:!0}:{}}}function S(t,n,r){if(!(!t||n===void 0||r===void 0||!r.includes(t)||n.includes(t)))throw new e(`UNSUPPORTED_OPERATION`,`Provider "${t}" is not available in this daemon runtime.`,{provider:t,hint:`Restart the daemon with ${t} configured, then retry lease allocation.`})}async function C(e,t,n,r){let i=O(e.flags,`providerSessionId`);return w(t,i)?await T(t.tenantId):await E(t,i,n,r)}function w(e,t){return o(e)||!e.leaseProvider&&!t}async function T(e){let t=await d(e);return{source:`daemon`,status:`ready`,artifacts:t,...t.length===0?{message:`No daemon artifacts available.`}:{}}}async function E(t,n,r,i){if(!t.leaseProvider)throw new e(`INVALID_ARGS`,`artifacts requires --provider for provider session lookup or an active cloud connection.`);if(!t.leaseId&&!n)throw new e(`INVALID_ARGS`,`artifacts requires an active cloud lease or --provider-session <id>.`);let a=D(r,t,n),o=await i?.listCloudArtifacts?.({provider:t.leaseProvider,leaseId:a?.leaseId??t.leaseId,providerSessionId:n});if(!o)throw new e(`UNSUPPORTED_OPERATION`,`Cloud artifacts are not available for provider "${t.leaseProvider}".`);return o}function D(t,n,r){if(!r)return;let i=t.resolveProviderSession({provider:n.leaseProvider,providerSessionId:r,tenantId:n.tenantId});if(i)return i;throw new e(`UNAUTHORIZED`,`Provider session is not owned by the request tenant`,{reason:`PROVIDER_SESSION_NOT_OWNED`})}function O(e,t){let n=e?.[t];return typeof n==`string`&&n.trim().length>0?n.trim():void 0}function k(e,t,n){let r=f(n);r&&e.recordProviderSession(t,r)}export{h as handleLeaseCommands};
package/dist/src/linux.js CHANGED
@@ -1 +1 @@
1
- import{D as e}from"./sdk-contracts.js";import{c as t}from"./diagnostics.js";import"./diagnostics2.js";import{a as n}from"./gesture-plan.js";import{S as r,_ as i,a,b as o,d as s,f as c,h as l,i as u,l as d,m as f,n as p,o as m,p as h,r as g,s as _,t as v,u as y,v as b,x}from"./src5.js";function S(){throw new e(`UNSUPPORTED_OPERATION`,`alert not supported on Linux`)}function C(){return{open:e=>s(e),openDevice:()=>Promise.resolve(),close:e=>g(e),tap:(e,t)=>c(e,t),alternateClick:async(e,t)=>t===`secondary`?await l(e.x,e.y):await y(e.x,e.y),doubleTap:(e,t)=>u(e,t),longPress:(e,t,n)=>d(e,t,n),focus:(e,t)=>m(e,t),type:(e,t)=>x(e,t),fill:(e,t,n,r)=>a(e,t,n,r),scroll:(e,t)=>b(e,t),performGesture:async t=>{if(t.topology===`two`)throw new e(`UNSUPPORTED_OPERATION`,`Multi-touch gestures are not supported on Linux`);let{start:r,end:i}=n(t);await o(r.x,r.y,i.x,i.y,t.durationMs)},screenshot:(e,t)=>i(e,t),readTextAtPoint:async(e,t)=>await f(e.x,e.y,t?.surface),snapshot:async e=>await t(`snapshot_capture`,async()=>await p(e,e?.signal),{backend:`linux-atspi`}),back:()=>v(),home:()=>_(),setOrientation:()=>{throw new e(`UNSUPPORTED_OPERATION`,`orientation not supported on Linux`)},appSwitcher:()=>{throw new e(`UNSUPPORTED_OPERATION`,`appSwitcher not yet supported on Linux`)},actionButton:()=>{throw new e(`UNSUPPORTED_OPERATION`,`action-button not supported on Linux`)},tvRemote:()=>{throw new e(`UNSUPPORTED_OPERATION`,`tv-remote not supported on Linux`)},readClipboard:()=>h(),writeClipboard:e=>r(e),setSetting:()=>{throw new e(`UNSUPPORTED_OPERATION`,`setSetting not supported on Linux`)},readAlert:S,awaitAlert:S,acceptAlert:S,dismissAlert:S}}export{C as createLinuxInteractor};
1
+ import{D as e}from"./sdk-contracts.js";import{c as t}from"./diagnostics.js";import"./diagnostics2.js";import{a as n}from"./gesture-plan.js";import{S as r,_ as i,a,b as o,d as s,f as c,h as l,i as u,l as d,m as f,n as p,o as m,p as h,r as g,s as _,t as v,u as y,v as b,x}from"./src5.js";function S(){throw new e(`UNSUPPORTED_OPERATION`,`alert not supported on Linux`)}function C(){return{open:e=>s(e),openDevice:()=>Promise.resolve(),close:e=>g(e),tap:(e,t)=>c(e,t),alternateClick:async(e,t)=>t===`secondary`?await l(e.x,e.y):await y(e.x,e.y),doubleTap:(e,t)=>u(e,t),longPress:(e,t,n)=>d(e,t,n),focus:(e,t)=>m(e,t),type:(e,t)=>x(e,t),fill:(e,t,n,r)=>a(e,t,n,r),scroll:(e,t)=>b(e,t),performGesture:async t=>{if(t.topology===`two`)throw new e(`UNSUPPORTED_OPERATION`,`Multi-touch gestures are not supported on Linux`);let{start:r,end:i}=n(t);await o(r.x,r.y,i.x,i.y,t.durationMs)},screenshot:(e,t)=>i(e,t),readTextAtPoint:async(e,t)=>await f(e.x,e.y,t?.surface),snapshot:async e=>await t(`snapshot_capture`,async()=>await p(e,e?.signal),{backend:`linux-atspi`}),back:()=>v(),home:()=>_(),setOrientation:()=>{throw new e(`UNSUPPORTED_OPERATION`,`orientation not supported on Linux`)},appSwitcher:()=>{throw new e(`UNSUPPORTED_OPERATION`,`appSwitcher not yet supported on Linux`)},tvRemote:()=>{throw new e(`UNSUPPORTED_OPERATION`,`tv-remote not supported on Linux`)},readClipboard:()=>h(),writeClipboard:e=>r(e),setSetting:()=>{throw new e(`UNSUPPORTED_OPERATION`,`setSetting not supported on Linux`)},readAlert:S,awaitAlert:S,acceptAlert:S,dismissAlert:S}}export{C as createLinuxInteractor};
@@ -1 +1 @@
1
- import{Qt as e}from"./sdk-batch.js";import{t}from"./touch-runtime.js";import{C as n,O as r,P as i,T as a,U as o,j as s}from"./alert-runtime.js";import{t as c}from"./interactor-operation-catalog.js";function l(l){let{facts:u,pause:d}=l,f={device:l.device,signal:l.signal,resolveInteractor:l.resolveInteractor};return{...u.captureScreenshot.available?o(f):{},...u.focusPoint.available?i(f):{},...s({...f,facts:u}),...u.scrollDirection.available?r(f):{},...u.typeText.available?a(f):{},...u.readTextAtPoint.available?n(f):{},...e(u.tapPoint,()=>t({...f,facts:u,pause:d})),...c({...f,facts:u})}}export{l as t};
1
+ import{tn as e}from"./sdk-batch.js";import{C as t,O as n,P as r,T as i,U as a,j as o}from"./alert-runtime.js";import{t as s}from"./touch-runtime.js";import{t as c}from"./interactor-operation-catalog.js";function l(l){let{facts:u,pause:d}=l,f={device:l.device,signal:l.signal,resolveInteractor:l.resolveInteractor};return{...u.captureScreenshot.available?a(f):{},...u.focusPoint.available?r(f):{},...o({...f,facts:u}),...u.scrollDirection.available?n(f):{},...u.typeText.available?i(f):{},...u.readTextAtPoint.available?t(f):{},...e(u.tapPoint,()=>s({...f,facts:u,pause:d})),...c({...f,facts:u})}}export{l as t};
@@ -1 +1 @@
1
- import{D as e}from"./sdk-contracts.js";const t=[`grant`,`deny`,`reset`],n=[`full`,`limited`],r=[`camera`,`microphone`,`photos`,`contacts`,`contacts-limited`,`notifications`,`calendar`,`location`,`location-always`,`media-library`,`motion`,`reminders`,`siri`],i=[`accessibility`,`screen-recording`,`input-monitoring`],a=`<wifi|airplane|location> <on|off>`,o=`location set <lat> <lon>`,s=`animations <on|off>`,c=`appearance <light|dark|toggle>`,l=`faceid <match|nonmatch|enroll|unenroll>`,u=`touchid <match|nonmatch|enroll|unenroll>`,d=`fingerprint <match|nonmatch>`,f=`clear-app-state [app-id]`,p=`reset-keychain clear`,m=`permission <${t.join(`|`)}> <${r.join(`|`)}> [${n.join(`|`)}]`,h=`permission <grant|reset> <${i.join(`|`)}>`,g=`macOS supports only settings ${c} and settings ${h}. wifi|airplane|location|animations remain unsupported on macOS.`,_=[`settings ${a}`,`settings ${o}`,`settings ${s}`,`settings ${c}`,`settings ${l}`,`settings ${u}`,`settings ${d}`,`settings ${f}`,`settings ${p}`,`settings ${m}`,`settings ${h}`].join(` | `),v=`settings requires ${a}, ${o}, ${s}, ${c}, ${l}, ${u}, ${d}, ${f}, ${p}, ${m}, or ${h}`;function y(e){let t=e.trim().toLowerCase();return t===`appearance`||t===`permission`}function b(e){return`Unsupported macOS setting: ${e}. ${g}`}function x(e,t){let n=t?.trim().toLowerCase();return n===void 0?void 0:e.find(e=>e===n)}function S(n){let r=x(t,n);if(r!==void 0)return r;throw new e(`INVALID_ARGS`,`Invalid permission action: ${n}. Use ${t.join(`|`)}.`)}function C(t){let n=x(r,t);if(n!==void 0)return n;throw new e(`INVALID_ARGS`,`permission setting requires a target: ${r.join(`|`)}`)}function w(t,n){if(t===void 0||t.trim()===``)throw new e(`INVALID_ARGS`,`settings location set requires ${n}`);return E(Number(t),n)}function T(e){return{latitude:E(e?.latitude,`latitude`),longitude:E(e?.longitude,`longitude`)}}function E(t,n){let r=n===`latitude`?-90:-180,i=n===`latitude`?90:180;if(typeof t!=`number`||!Number.isFinite(t)||t<r||t>i)throw new e(`INVALID_ARGS`,`${n} must be a number from ${r} to ${i}`);return t}export{t as a,h as c,y as d,S as f,r as i,_ as l,T as n,n as o,C as p,i as r,v as s,w as t,b as u};
1
+ import{D as e}from"./sdk-contracts.js";const t=[`grant`,`deny`,`reset`],n=[`full`,`limited`],r=[`all`,`camera`,`microphone`,`photos`,`contacts`,`contacts-limited`,`notifications`,`calendar`,`location`,`location-always`,`media-library`,`motion`,`reminders`,`siri`],i=[`accessibility`,`screen-recording`,`input-monitoring`],a=[`extra-small`,`small`,`medium`,`large`,`extra-large`,`extra-extra-large`,`extra-extra-extra-large`,`accessibility-medium`,`accessibility-large`,`accessibility-extra-large`,`accessibility-extra-extra-large`,`accessibility-extra-extra-extra-large`];function o(e,t){return Object.freeze({setting:`text-size`,category:e,platformValue:t})}function s(e){return`Text size is ${e.category}`}function c(e,t,n){return e===`clear-app-state`?`Cleared user data for ${n}`:e===`text-size`?`Text size set to ${t}`:`Updated setting: ${e}`}const l=`<wifi|airplane|location> <on|off>`,u=`location set <lat> <lon>`,d=`animations <on|off>`,f=`appearance <light|dark|toggle>`,p=`faceid <match|nonmatch|enroll|unenroll>`,m=`touchid <match|nonmatch|enroll|unenroll>`,h=`fingerprint <match|nonmatch>`,g=`clear-app-state [app-id]`,_=`reset-keychain clear`,v=`text-size [${a.join(`|`)}]`,y=`permission <${t.join(`|`)}> <${r.join(`|`)}> [${n.join(`|`)}]`,b=`permission <grant|reset> <${i.join(`|`)}>`,x=`macOS supports only settings ${f} and settings ${b}. wifi|airplane|location|animations|text-size remain unsupported on macOS.`,S=[`settings ${l}`,`settings ${u}`,`settings ${d}`,`settings ${f}`,`settings ${v}`,`settings ${p}`,`settings ${m}`,`settings ${h}`,`settings ${g}`,`settings ${_}`,`settings ${y}`,`settings ${b}`].join(` | `),C=`settings requires ${l}, ${u}, ${d}, ${f}, ${v}, ${p}, ${m}, ${h}, ${g}, ${_}, ${y}, or ${b}`;function w(e){let t=e.trim().toLowerCase();return t===`appearance`||t===`permission`}function T(e){return`Unsupported macOS setting: ${e}. ${x}`}function E(t){let n=O(t);if(n!==void 0)return n;throw new e(`INVALID_ARGS`,D(t))}function D(e){return`Invalid text size: ${e??``}. Use ${a.join(`|`)}.`}function O(e){return A(a,e)}const k=Object.freeze({message:`Reading or setting a text size is supported on iOS and iPadOS simulators.`,hint:"Run `xcrun simctl ui <device> content_size` on a booted iPhone or iPad simulator.",reason:`setting-unsupported-on-leaf`});function A(e,t){let n=t?.trim().toLowerCase();return n===void 0?void 0:e.find(e=>e===n)}function j(n){let r=A(t,n);if(r!==void 0)return r;throw new e(`INVALID_ARGS`,`Invalid permission action: ${n}. Use ${t.join(`|`)}.`)}function M(t){let n=A(r,t);if(n!==void 0)return n;throw new e(`INVALID_ARGS`,`permission setting requires a target: ${r.join(`|`)}`)}function N(t,n){if(t===void 0||t.trim()===``)throw new e(`INVALID_ARGS`,`settings location set requires ${n}`);return F(Number(t),n)}function P(e){return{latitude:F(e?.latitude,`latitude`),longitude:F(e?.longitude,`longitude`)}}function F(t,n){let r=n===`latitude`?-90:-180,i=n===`latitude`?90:180;if(typeof t!=`number`||!Number.isFinite(t)||t<r||t>i)throw new e(`INVALID_ARGS`,`${n} must be a number from ${r} to ${i}`);return t}export{j as _,r as a,O as b,C as c,a as d,s as f,w as g,D as h,i,b as l,T as m,P as n,t as o,c as p,k as r,n as s,N as t,S as u,M as v,o as x,E as y};
@@ -1 +1 @@
1
- import{i as e,r as t,s as n}from"./helper.js";import{t as r}from"./surface-snapshot.js";export{r as captureMacOsSurfaceSnapshot,t as resolveFrontmostMacOsApp,e as runMacOsAlertAction,n as startMacOsAudioProbeProcess};
1
+ import{c as e,i as t,r as n}from"./helper.js";import{t as r}from"./surface-snapshot.js";export{r as captureMacOsSurfaceSnapshot,n as resolveFrontmostMacOsApp,t as runMacOsAlertAction,e as startMacOsAudioProbeProcess};
@@ -1 +1 @@
1
- import{D as e}from"./sdk-contracts.js";import{O as t,T as n}from"./sdk-device.js";import{t as r}from"./scoped-provider.js";const i=r(void 0);function a(){return i.resolve()}async function o(e,t){return await i.run(e,t)}function s(r,i){if(!t(n(r.device),n(i))||r.device.simulatorSetPath!==i.simulatorSetPath)throw new e(`COMMAND_FAILED`,`Managed automation cannot select another device.`,{reason:`managed-device-transport-mismatch`})}function c(){let e=a();if(e)return async t=>{s(e,t)}}async function l(e){let t=c();return t?(await t(e),!0):!1}export{o as a,c as i,a as n,l as r,s as t};
1
+ import{D as e}from"./sdk-contracts.js";import{E as t,k as n}from"./sdk-device.js";import{t as r}from"./scoped-provider.js";const i=r(void 0);function a(){return i.resolve()}async function o(e,t){return await i.run(e,t)}function s(r,i){if(!n(t(r.device),t(i))||r.device.simulatorSetPath!==i.simulatorSetPath)throw new e(`COMMAND_FAILED`,`Managed automation cannot select another device.`,{reason:`managed-device-transport-mismatch`})}function c(){let e=a();if(e)return async t=>{s(e,t)}}async function l(e){let t=c();return t?(await t(e),!0):!1}export{o as a,c as i,a as n,l as r,s as t};