agent-device 0.21.5 → 0.21.7
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.
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.5.apk → agent-device-android-ime-helper-0.21.7.apk} +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.7.apk.sha256 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.5.manifest.json → agent-device-android-ime-helper-0.21.7.manifest.json} +4 -4
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.5.apk → agent-device-android-snapshot-helper-0.21.7.apk} +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.7.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.5.manifest.json → agent-device-android-snapshot-helper-0.21.7.manifest.json} +6 -6
- package/apple/snapshot-bridge/SnapshotBridgeRuntime.m +8 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAXSnapshotBridge.h +4 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAXSnapshotBridge.m +20 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerScrollViewportPolicy.swift +1 -2
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AXSnapshotFallback.swift +25 -12
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +56 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +1 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Interaction.swift +36 -108
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Keyboard.swift +241 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +29 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +46 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+PrivateAXPresentation.swift +85 -26
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +134 -117
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotBackendCapabilities.swift +1 -3
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCapturePlan.swift +25 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SystemModal.swift +1 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +3 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotCoordinateSpace.swift +197 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotModels.swift +30 -4
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentation.swift +0 -81
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationInvariant.swift +1 -9
- package/dist/src/absence-observation-errors.js +1 -1
- package/dist/src/adapter.js +1 -1
- package/dist/src/adb-executor.js +2 -2
- package/dist/src/adb-failure.js +1 -1
- package/dist/src/adb-transport.js +1 -0
- package/dist/src/adb.js +1 -1
- package/dist/src/agent-browser-lifecycle.js +1 -1
- package/dist/src/agent-browser-process-record.js +1 -1
- package/dist/src/agent-browser-provider.js +1 -1
- package/dist/src/agent-browser-tool.js +1 -1
- package/dist/src/agent-device-client.js +2 -2
- package/dist/src/ai-sdk.js +1 -1
- package/dist/src/alert-runtime.js +1 -1
- package/dist/src/android-adb.d.ts +29 -2
- package/dist/src/android-adb.js +1 -1
- package/dist/src/android-input-ownership.js +1 -1
- package/dist/src/android.js +1 -1
- package/dist/src/app-catalog.js +1 -1
- package/dist/src/app-deployment-resolution.js +1 -1
- package/dist/src/app-helpers.js +1 -1
- package/dist/src/app-inventory.js +1 -1
- package/dist/src/app-launch.js +2 -2
- package/dist/src/app-lifecycle.js +3 -3
- package/dist/src/app-lifecycle2.js +2 -2
- package/dist/src/app-log-files.js +1 -1
- package/dist/src/app-log-reconnect.js +1 -1
- package/dist/src/app-log-runtime2.js +3 -3
- package/dist/src/app-resolution.js +2 -2
- package/dist/src/app-state.js +1 -1
- package/dist/src/apple-runner-platform.js +1 -1
- package/dist/src/application-lifecycle-interaction.js +1 -1
- package/dist/src/archive.js +1 -1
- package/dist/src/artifact-download.js +1 -1
- package/dist/src/auth-session.js +1 -1
- package/dist/src/auth.js +1 -1
- package/dist/src/back-mode.js +1 -1
- package/dist/src/backend-snapshot-options.js +1 -1
- package/dist/src/boot-diagnostics.js +1 -1
- package/dist/src/capture-disclosure.js +1 -0
- package/dist/src/capture.js +1 -1
- package/dist/src/cli-config.js +1 -1
- package/dist/src/cli-help.js +15 -2
- package/dist/src/cli-output.js +1 -1
- package/dist/src/cli.js +4 -4
- package/dist/src/click-button.js +1 -1
- package/dist/src/client-metro.js +1 -1
- package/dist/src/client-types.d.ts +32 -2
- package/dist/src/clipboard-shell-response.js +1 -0
- package/dist/src/command-schema.js +1 -1
- package/dist/src/command-tools.js +4 -2
- package/dist/src/command.js +1 -1
- package/dist/src/config.js +1 -1
- package/dist/src/connection-runtime.js +1 -1
- package/dist/src/connection.js +1 -1
- package/dist/src/contracts.d.ts +1 -1
- package/dist/src/contracts.js +1 -1
- package/dist/src/daemon-client-lifecycle.js +1 -1
- package/dist/src/daemon.js +1 -1
- package/dist/src/debug-symbols-facade.js +1 -1
- package/dist/src/device-boot.js +1 -1
- package/dist/src/device-claim-inspection.js +1 -1
- package/dist/src/device-claim-rule.js +2 -1
- package/dist/src/device-input-state.d.ts +7 -8
- package/dist/src/device-inventory-context.js +1 -1
- package/dist/src/device-rotation.js +1 -1
- package/dist/src/device-selection-resolver.js +1 -1
- package/dist/src/device-session.js +1 -1
- package/dist/src/device-shell.js +1 -0
- package/dist/src/device.js +1 -1
- package/dist/src/device2.js +1 -1
- package/dist/src/devicectl.js +1 -0
- package/dist/src/diagnostics.js +1 -1
- package/dist/src/dispatch-resolve.js +1 -1
- package/dist/src/display-inventory.js +1 -0
- package/dist/src/doctor-facade.js +1 -1
- package/dist/src/doctor2.js +1 -1
- package/dist/src/durable-resource.js +1 -1
- package/dist/src/engine-eval-script.js +1 -1
- package/dist/src/error.js +1 -1
- package/dist/src/exec.js +1 -1
- package/dist/src/file.js +1 -1
- package/dist/src/find.js +1 -1
- package/dist/src/finders.js +1 -1
- package/dist/src/format.js +2 -1
- package/dist/src/generic.js +1 -1
- package/dist/src/gesture-admission.js +1 -1
- package/dist/src/gesture-plan.js +1 -1
- package/dist/src/gesture-runtime.js +1 -1
- package/dist/src/harmonyos.js +1 -1
- package/dist/src/hdc.js +1 -1
- package/dist/src/helper.js +1 -1
- package/dist/src/human-control-contract.js +1 -1
- package/dist/src/human-control.js +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/input-actions.js +1 -1
- package/dist/src/input-actions2.js +1 -1
- package/dist/src/install-artifact-facade.js +1 -1
- package/dist/src/install-source-network-transport.js +1 -1
- package/dist/src/install-source2.js +1 -1
- package/dist/src/interaction-positionals.js +1 -1
- package/dist/src/interaction-ref-policy.js +1 -1
- package/dist/src/interaction.js +1 -1
- package/dist/src/interaction2.js +1 -1
- package/dist/src/interactor-operation-catalog.js +1 -1
- package/dist/src/interactor.js +5 -5
- package/dist/src/interactor2.js +1 -1
- package/dist/src/interactors.js +1 -1
- package/dist/src/internal/bin.js +1 -1
- package/dist/src/internal/daemon.js +2 -2
- package/dist/src/internal/png-worker.d.ts +4 -1
- package/dist/src/internal/png-worker.js +1 -1
- package/dist/src/internal/run-script-http-child.d.ts +1 -1
- package/dist/src/internal/run-script-http-child.js +1 -1
- package/dist/src/inventory.js +4 -4
- package/dist/src/inventory2.js +1 -1
- package/dist/src/inventory3.js +2 -2
- package/dist/src/inventory5.js +1 -1
- package/dist/src/ios-snapshot-acquisition.js +1 -1
- package/dist/src/ios-snapshot-runtime.js +1 -1
- package/dist/src/ios-target-activation.js +1 -0
- package/dist/src/lease-context.js +1 -1
- package/dist/src/lease-scope.js +1 -1
- package/dist/src/lease.js +1 -1
- package/dist/src/limrun-download-file.js +1 -0
- package/dist/src/limrun-runtime-dependencies.js +1 -1
- package/dist/src/limrun.d.ts +10 -4
- package/dist/src/linux.js +1 -1
- package/dist/src/local-interactor-operation-set.js +1 -1
- package/dist/src/location-coordinates.js +1 -1
- package/dist/src/logcat.js +1 -1
- package/dist/src/managed-device-scope.js +1 -1
- package/dist/src/mechanics.js +16 -16
- package/dist/src/mobile-snapshot-semantics.js +1 -1
- package/dist/src/multitouch-support.js +1 -1
- package/dist/src/observation.js +2 -2
- package/dist/src/output-common.js +5 -2
- package/dist/src/parameterized-recorded-fill.js +1 -1
- package/dist/src/perf-facade.js +2 -2
- package/dist/src/perf-runtime-operation-builder.js +1 -1
- package/dist/src/perf-runtime-plan.js +1 -1
- package/dist/src/perf.js +1 -1
- package/dist/src/physical-device-control.js +1 -1
- package/dist/src/platform-request-scope.js +1 -1
- package/dist/src/platform-runtime-android-adb-host.js +1 -1
- package/dist/src/platform-runtime-host.js +1 -1
- package/dist/src/platform-runtime-managed-owner.js +1 -1
- package/dist/src/platform-runtime-open-target.js +1 -1
- package/dist/src/platform-runtime-operation-host.js +4 -4
- package/dist/src/platform-runtime-runtime-hints.js +2 -2
- package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-runner-transport.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-transport.js +1 -1
- package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-harmony-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-process-host.js +1 -1
- package/dist/src/platform-runtime-unavailable.js +1 -1
- package/dist/src/platform-runtime.js +1 -1
- package/dist/src/platform-runtime2.js +1 -1
- package/dist/src/png-crop-bytes.js +1 -1
- package/dist/src/png-transcode.js +1 -0
- package/dist/src/png-worker-client.js +1 -0
- package/dist/src/png.js +1 -1
- package/dist/src/prepare-kind.js +1 -1
- package/dist/src/provider-session-ownership.js +1 -1
- package/dist/src/provider-webdriver.js +1 -1
- package/dist/src/proxy.js +1 -1
- package/dist/src/quality-warnings.js +1 -1
- package/dist/src/react-native.js +1 -1
- package/dist/src/record-runtime.js +1 -1
- package/dist/src/record-trace.js +1 -1
- package/dist/src/rect-center.js +1 -1
- package/dist/src/register-builtins.js +1 -1
- package/dist/src/registry.js +35 -35
- package/dist/src/remote-config2.js +1 -1
- package/dist/src/replay-divergence.js +1 -1
- package/dist/src/replay.js +2 -2
- package/dist/src/reporting.js +1 -1
- package/dist/src/request-admission.js +1 -1
- package/dist/src/request-cancel.js +1 -1
- package/dist/src/request-runtime-binding.js +1 -1
- package/dist/src/result-serialization.js +1 -1
- package/dist/src/retry.js +1 -1
- package/dist/src/runner-cache-metadata.js +2 -2
- package/dist/src/runner-client.js +1 -1
- package/dist/src/runner-disposal.js +1 -1
- package/dist/src/runner-operations-facade.js +1 -1
- package/dist/src/runner-presentation.js +1 -1
- package/dist/src/runner.js +1 -1
- package/dist/src/runtime-transport-hints.js +1 -1
- package/dist/src/runtime.js +3 -3
- package/dist/src/runtime10.js +1 -1
- package/dist/src/runtime2.js +4 -4
- package/dist/src/runtime3.js +1 -1
- package/dist/src/runtime4.js +5 -5
- package/dist/src/runtime5.js +1 -1
- package/dist/src/runtime6.js +1 -1
- package/dist/src/runtime7.js +1 -1
- package/dist/src/runtime8.js +1 -1
- package/dist/src/runtime9.js +1 -1
- package/dist/src/screen-recording-admission-ledger.js +1 -0
- package/dist/src/screen-recording-completion.js +1 -1
- package/dist/src/screen-recording-options.js +1 -1
- package/dist/src/screen-recording-resource-recovery.js +1 -1
- package/dist/src/screen-recording-transport.js +1 -0
- package/dist/src/screenshot-density.js +1 -1
- package/dist/src/screenshot-runtime.js +1 -1
- package/dist/src/screenshot.js +1 -1
- package/dist/src/screenshot3.js +1 -1
- package/dist/src/script.js +1 -1
- package/dist/src/scroll-command.js +1 -1
- package/dist/src/scroll-gesture.js +1 -1
- package/dist/src/sdk-batch-runner.js +2 -2
- package/dist/src/sdk-batch.js +2 -2
- package/dist/src/sdk-contracts.d.ts +76 -1
- package/dist/src/sdk-contracts.js +1 -1
- package/dist/src/sdk-device.js +1 -1
- package/dist/src/sdk-finders.d.ts +1 -1
- package/dist/src/sdk-finders.js +1 -1
- package/dist/src/sdk-io.js +1 -1
- package/dist/src/sdk-remote-config.js +1 -1
- package/dist/src/sdk-selectors.d.ts +18 -1
- package/dist/src/sdk-selectors.js +1 -1
- package/dist/src/selection.js +0 -0
- package/dist/src/selector-runtime.js +1 -1
- package/dist/src/selectors.js +1 -1
- package/dist/src/semantic-index.js +1 -1
- package/dist/src/server.js +1 -1
- package/dist/src/session-allocation.js +1 -1
- package/dist/src/session-observation.js +1 -1
- package/dist/src/session-routing.js +1 -1
- package/dist/src/session-runtime-admission.js +1 -1
- package/dist/src/session-snapshot.js +1 -1
- package/dist/src/session-store.js +3 -3
- package/dist/src/session2.js +4 -5
- package/dist/src/settings.js +1 -1
- package/dist/src/simctl-facade.js +1 -1
- package/dist/src/simctl.js +1 -1
- package/dist/src/simulator-boot.js +1 -1
- package/dist/src/simulator.js +1 -1
- package/dist/src/snapshot-capture-annotations.js +1 -1
- package/dist/src/snapshot-diagnostics.js +1 -1
- package/dist/src/snapshot-quality-backend-capabilities.js +1 -1
- package/dist/src/snapshot-runtime-binding.js +1 -1
- package/dist/src/snapshot-runtime.js +1 -1
- package/dist/src/snapshot-state.js +1 -1
- package/dist/src/snapshot.js +1 -1
- package/dist/src/snapshot2.js +1 -1
- package/dist/src/snapshot3.js +1 -1
- package/dist/src/snapshot4.js +1 -1
- package/dist/src/src.js +1 -1
- package/dist/src/src4.js +1 -1
- package/dist/src/src7.js +1 -1
- package/dist/src/src8.js +1 -1
- package/dist/src/stop-sequence.js +1 -1
- package/dist/src/string-enum.js +1 -1
- package/dist/src/takeover.js +1 -1
- package/dist/src/text-entry-focus.js +1 -1
- package/dist/src/tool-provider.js +1 -1
- package/dist/src/tool-provider2.js +1 -1
- package/dist/src/touch-runtime.js +1 -1
- package/dist/src/transport.js +1 -1
- package/dist/src/tree.js +1 -1
- package/dist/src/tv-remote.js +1 -1
- package/dist/src/type-text-runtime.js +1 -1
- package/dist/src/verified-file.js +1 -1
- package/dist/src/video.js +2 -2
- package/dist/src/viewport.js +1 -1
- package/dist/src/web.js +1 -1
- package/dist/src/web2.js +1 -1
- package/dist/src/webdriver-source.js +1 -1
- package/dist/src/window-state.js +1 -1
- package/package.json +3 -2
- package/server.json +2 -2
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.5.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.5.apk.sha256 +0 -1
- package/dist/src/adb-host.js +0 -1
- package/dist/src/session-target-evidence.js +0 -1
- package/dist/src/vars.js +0 -2
package/dist/src/interactor.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{D as e,v as t}from"./sdk-contracts.js";import{E as n}from"./sdk-batch-runner.js";import{d as r,g as i,u as a}from"./sdk-device.js";import{r as o}from"./snapshot-scope.js";import{d as s,i as c,l}from"./scroll-gesture.js";import{a as u,n as d}from"./alert-contract.js";import{f as ee,n as te,p as ne,u as f}from"./location-coordinates.js";import{n as re,s as ie,t as ae}from"./scroll-command.js";import"./device.js";import{t as oe}from"./device-rotation.js";import{c as se,r as p}from"./diagnostics.js";import{_ as ce}from"./owner-identity.js";import{a as m}from"./exec.js";import{t as h}from"./timeouts.js";import{a as le}from"./tv-remote.js";import"./diagnostics2.js";import"./command.js";import{i as ue,n as de}from"./retry.js";import"./process.js";import{a as fe}from"./gesture-plan.js";import{n as pe}from"./scoped-provider.js";import{n as me,r as he}from"./ios-snapshot-planning.js";import{r as ge}from"./device-isolation.js";import{c as _e,i as ve,n as ye,o as be}from"./quality-warnings.js";import{a as g,o as xe,t as Se}from"./runner-presentation.js";import{n as Ce,r as we}from"./ios-system-surface.js";import{r as Te}from"./ios-snapshot-acquisition.js";import{i as Ee,n as De}from"./screenshot-density.js";import{n as Oe}from"./interactor-types.js";import{C as ke,g as Ae,r as je}from"./host-file.js";import{d as Me,f as Ne,l as Pe,o as Fe,u as Ie}from"./config.js";import{o as Le}from"./tool-provider.js";import{n as _}from"./simctl.js";import{n as v,r as Re}from"./apps-simctl.js";import{n as ze,r as y,t as Be}from"./physical-device-control.js";import{n as b,r as x,s as Ve}from"./runner.js";import{t as He,w as Ue}from"./runner-cache-metadata.js";import"./runner-disposal.js";import{h as S,m as We}from"./runner-client.js";import{n as Ge,r as Ke,t as qe}from"./app-launch.js";import{r as C,t as w}from"./simulator.js";import{a as Je,d as Ye,f as Xe,g as Ze,h as T,m as Qe,p as $e}from"./app-resolution.js";import{a as et,i as tt,o as nt}from"./helper.js";import{r as rt,t as it}from"./display-inventory.js";import{n as at}from"./multitouch-support.js";import{t as ot}from"./surface-snapshot.js";import{t as st}from"./ios-target-activation.js";import E from"node:path";async function ct(e){return r(e)?await Ye():(C(e,`clipboard`),await w(e),m(await v(e,[`pbpaste`,e.id],{allowFailure:!0}),`Failed to read iOS simulator clipboard`).stdout.replaceAll(`\r
|
|
2
2
|
`,`
|
|
3
|
-
`).replace(/\n$/,``))}async function
|
|
4
|
-
`).map(e=>e.trim()).filter(e=>e.length>0&&e!==`Current Status Bar Overrides:`&&!/^=+$/.test(e));for(let t of r){let r=/^DataNetworkType:\s+(\d+)$/.exec(t);if(r){let t=Number(r[1]),i=
|
|
5
|
-
`)){let e=r.trim();if(!e)continue;if(e===`service`){n=!0;continue}if(!n)continue;if(e.startsWith(`bundle identifier`))break;let i=/^([a-z-]+)\s+-\s+/.exec(e)?.[1];i!==void 0&&t.add(i)}return t}function Ct(t,n){let r=ee(t);if(r!==`photos`&&n?.trim())throw new e(`INVALID_ARGS`,`Permission mode is only supported for photos. Received: ${n}.`);if(r===`camera`)return`camera`;if(r===`microphone`)return`microphone`;if(r===`contacts`)return`contacts`;if(r===`contacts-limited`)return`contacts-limited`;if(r===`notifications`)return`notifications`;if(r===`calendar`)return`calendar`;if(r===`location`)return`location`;if(r===`location-always`)return`location-always`;if(r===`media-library`)return`media-library`;if(r===`motion`)return`motion`;if(r===`reminders`)return`reminders`;if(r===`siri`)return`siri`;if(r===`photos`){let t=n?.trim().toLowerCase();if(!t||t===`full`)return`photos`;if(t===`limited`)return`photos-add`;throw new e(`INVALID_ARGS`,`Invalid photos mode: ${n}. Use full|limited.`)}throw new e(`INVALID_ARGS`,`Unsupported permission target: ${t}. Use camera|microphone|photos|contacts|contacts-limited|notifications|calendar|location|location-always|media-library|motion|reminders|siri.`)}function wt(t,n){let r=t.trim().toLowerCase();if(r===`match`)return`match`;if(r===`nonmatch`)return`nonmatch`;if(r===`enroll`)return`enroll`;if(r===`unenroll`)return`unenroll`;throw new e(`INVALID_ARGS`,`Invalid ${n} state: ${t}. Use match|nonmatch|enroll|unenroll.`)}async function Tt(t,n,r){let i=Et(t.id,n,r.modalityAliases),a=[];for(let e of i){let n=Me(t,e),r=await je(n,{allowFailure:!0});if(r.exitCode===0)return;a.push({args:n,stderr:r.stderr,stdout:r.stdout,exitCode:r.exitCode})}let o=Ve(a);throw a.length>0&&a.every(e=>Dt(e.stdout,e.stderr))?new e(`UNSUPPORTED_OPERATION`,`${r.label} simulation is not supported on this simulator runtime.`,{deviceId:t.id,action:n,setting:r.settingName,attempts:o}):new e(`COMMAND_FAILED`,`Failed to simulate ${r.settingName}.`,{deviceId:t.id,action:n,setting:r.settingName,attempts:o})}function Et(e,t,n){let r=n.length>0?n:[`face`];switch(t){case`match`:return r.flatMap(t=>[[`biometric`,e,`match`,t],[`biometric`,`match`,e,t]]);case`nonmatch`:return r.flatMap(t=>[[`biometric`,e,`nonmatch`,t],[`biometric`,e,`nomatch`,t],[`biometric`,`nonmatch`,e,t],[`biometric`,`nomatch`,e,t]]);case`enroll`:return[[`biometric`,e,`enroll`,`yes`],[`biometric`,e,`enroll`,`1`],[`biometric`,`enroll`,e,`yes`],[`biometric`,`enroll`,e,`1`]];case`unenroll`:return[[`biometric`,e,`enroll`,`no`],[`biometric`,e,`enroll`,`0`],[`biometric`,`enroll`,e,`no`],[`biometric`,`enroll`,e,`0`]]}}function Dt(e,t){let n=`${e}\n${t}`.toLowerCase();return n.includes(`unrecognized subcommand`)||n.includes(`unknown subcommand`)||n.includes(`not supported`)||n.includes(`unavailable`)||n.includes(`biometric`)&&n.includes(`invalid`)}function B(e,t,n){return w(e,t,n)}const Ot={ensureBooted:j,prepareStatusBarForScreenshot:tt,captureWithRetry:Mt,normalizeDensity:Vt,captureWithRunner:H,shouldFallbackToRunner:zt},kt=new Map,V=new Map;async function At(e,t,n={}){if(r(e)){await H(e,t,n.appBundleId,n.fullscreen,n.runnerOptions);return}if(e.kind===`simulator`){await jt(e,t,n);return}await C(e).captureScreenshot(e,t,{appBundleId:n.appBundleId,fullscreen:n.fullscreen,runnerOptions:n.runnerOptions,runRunnerCommand:O})}async function jt(t,n,r={}){if(t.kind!==`simulator`)throw new e(`UNSUPPORTED_OPERATION`,`Simulator screenshot fallback flow supports only iOS simulators`);let i={...Ot,...r.deps??{}};r.skipIosSimulatorBootCheck||await i.ensureBooted(t);let a=async()=>{};if(r.normalizeStatusBar===!0)try{a=await i.prepareStatusBarForScreenshot(t)}catch(e){Lt(t,`prepare_failed`,e)}try{try{await i.captureWithRetry(t,n),await i.normalizeDensity(t,n,r.pixelDensity);return}catch(e){let a=e;if(r.skipIosSimulatorBootCheck&&Bt(e)){await i.ensureBooted(t);try{await i.captureWithRetry(t,n),await i.normalizeDensity(t,n,r.pixelDensity);return}catch(e){a=e}}if(!i.shouldFallbackToRunner(a))throw a;It(t,`simctl_screenshot`,a)}await i.captureWithRunner(t,n,r.appBundleId,r.fullscreen,r.runnerOptions),await i.normalizeDensity(t,n,r.pixelDensity)}finally{await a().catch(e=>Lt(t,`restore_failed`,e))}}async function Mt(e,t){let n=g.fromTimeoutMs(Oe);await ce(async({deadline:n})=>{await B(e,[`io`,e.id,`screenshot`,t],{timeoutMs:Math.max(1e3,n?.remainingMs()??2e4)})},{maxAttempts:5,baseDelayMs:De,maxDelayMs:ke,jitter:.2,shouldRetry:e=>zt(e)},{deadline:n,phase:`ios_simulator_screenshot`})}async function H(t,n,i,a,o){if(t.kind===`device`&&!r(t)){await C(t).captureScreenshot(t,n,{appBundleId:i,fullscreen:a,runnerOptions:o,preferRunner:!0,runRunnerCommand:O});return}let s=(await O(t,{command:`screenshot`,appBundleId:i,fullscreen:a,inlineScreenshot:!1},o)).message;if(!s)throw new e(`COMMAND_FAILED`,`Failed to capture iOS screenshot: runner returned no file path`);if(r(t)){await y(s,n);return}if(t.kind===`simulator`){await Nt(t,s,n);return}throw new e(`COMMAND_FAILED`,`Unsupported Apple screenshot target`)}async function Nt(t,n,r){let i=g.fromTimeoutMs(b),a=`Unable to locate runner container for simulator screenshot`,o=V.get(t.id);if(o){let e=await Pt(o,n,r);if(e.copied)return;a=e.error,V.delete(t.id)}for(let e of Pe){let o=await B(t,[`get_app_container`,t.id,e,`data`],{allowFailure:!0,timeoutMs:Ft(i,b,`runner screenshot container lookup`)});if(o.exitCode!==0){let e=o.stderr.trim();e&&(a=e);continue}let s=o.stdout.trim();if(!s){a=`simctl get_app_container returned empty output`;continue}let c=await Pt(s,n,r);if(c.copied){V.set(t.id,s);return}a=c.error}throw new e(`COMMAND_FAILED`,`Failed to capture iOS screenshot: ${a}`)}async function Pt(e,t,n){let r=`Runner screenshot was not found in the simulator container`;for(let i of Rt(e,t))try{return await y(i,n),{copied:!0}}catch(e){r=e instanceof Error?e.message:String(e)}return{copied:!1,error:r}}function Ft(t,n,r){let i=t.remainingMs();if(i>0)return i;throw new e(`COMMAND_FAILED`,`iOS ${r} timed out after ${n}ms`,{timeoutMs:n,step:r})}function It(e,t,n){let r=S(n);p({level:`warn`,phase:`ios_screenshot_fallback`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,from:t,to:`runner`,...r}})}function Lt(e,t,n){p({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...S(n)}})}function Rt(e,t){let n=N.resolve(e),r=t.trim();if(!r)return[];let i=[],a=new Set,o=e=>{let t=N.normalize(e);a.has(t)||(a.add(t),i.push(t))},s=r.replace(/^\/+/,``),c=s.replaceAll(`\\`,`/`);if(s&&o(N.join(n,s)),N.isAbsolute(r)&&o(N.normalize(r)),c.startsWith(`tmp/`))o(N.join(n,c));else{let e=c.lastIndexOf(`/tmp/`);if(e>=0){let t=c.slice(e+1);o(N.join(n,t))}}let l=N.basename(r);return l&&o(N.join(n,`tmp`,l)),i}function zt(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=x(t);return n.includes(`timeout waiting for screen surfaces`)||n.includes(`nsposixerrordomain`)&&n.includes(`code=60`)&&n.includes(`screenshot`)||n.includes(`timed out`)&&n.includes(`screenshot`)}function Bt(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=x(t);return n.includes(`not booted`)||n.includes(`current state: shutdown`)||n.includes(`current state is shutdown`)||n.includes(`current state=shutdown`)||n.includes(`state: shutdown`)||n.includes(`state=shutdown`)}async function Vt(e,t,n){let r=await Ht(e),i=Se(await xe(t),r,n);i&&await he(t,i.width,i.height)}async function Ht(t){let n=kt.get(t.id);if(n!==void 0)return n;let r=await B(t,[`getenv`,t.id,`SIMULATOR_MAINSCREEN_SCALE`],{timeoutMs:Ae}),i=Number(r.stdout.trim());if(!Number.isFinite(i)||i<=0)throw new e(`COMMAND_FAILED`,`Failed to read iOS simulator screenshot scale from SIMULATOR_MAINSCREEN_SCALE`);return kt.set(t.id,i),i}function Ut(t){return!(t instanceof e)||t.details?.runnerErrorCode!==`SCROLL_KEYBOARD_OCCLUDES_SURFACE`?t:new e(t.code,t.message,{...t.details,...o})}function Wt(e){let t=e?.amount!==void 0||e?.pixels!==void 0;return{...e,...t?{}:{amount:re},durationMs:e?.durationMs??400,releaseBehavior:e?.releaseBehavior??`controlled`}}function Gt(e,t,n,r={includeDuration:!0}){let i=U(e.referenceWidth),o=U(e.referenceHeight);if(i===void 0||o===void 0)return W(e,{amount:n?.amount});let s=a({direction:t,amount:n?.amount,pixels:n?.pixels,referenceWidth:i,referenceHeight:o});return W(e,{amount:n?.amount,pixels:s.pixels,durationMs:r?.includeDuration?n?.durationMs:void 0,preferProvidedPixels:!0})}function Kt(e,t={}){return{...e?.amount===void 0?{}:{amount:e.amount},...e?.pixels===void 0?{}:{pixels:e.pixels},...t.includeDuration!==!1&&e?.durationMs!==void 0?{durationMs:e.durationMs}:{},...t.includeReleaseBehavior!==!1&&e?.releaseBehavior!==void 0?{scrollReleaseBehavior:e.releaseBehavior}:{}}}function U(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function W(e,t){let{x1:n,y1:r,x2:i,y2:a}=Jt(e),o=U(e.referenceWidth),s=U(e.referenceHeight),c=qt(t,n!==void 0&&i!==void 0?Math.round(Math.abs(i-n)):void 0,r!==void 0&&a!==void 0?Math.round(Math.abs(a-r)):void 0),l=U(e.keyboardMinY);return{...n===void 0?{}:{x1:n},...r===void 0?{}:{y1:r},...i===void 0?{}:{x2:i},...a===void 0?{}:{y2:a},...o===void 0?{}:{referenceWidth:o},...s===void 0?{}:{referenceHeight:s},...e.keyboardAvoided===!0?{keyboardAvoided:!0}:{},...l===void 0?{}:{keyboardMinY:l},...t?.amount===void 0?{}:{amount:t.amount},...c===void 0?{}:{pixels:c},...t?.durationMs===void 0?{}:{durationMs:t.durationMs}}}function qt(e,t,n){if(e?.preferProvidedPixels&&e.pixels!==void 0)return e.pixels;if(t!==void 0&&t>0)return t;if(n!==void 0&&n>0)return n}function Jt(e){let t=U(e.x),n=U(e.y),r=U(e.x2),i=U(e.y2);return{...t===void 0?{}:{x1:t},...n===void 0?{}:{y1:n},...r===void 0?{}:{x2:r},...i===void 0?{}:{y2:i}}}async function Yt(e,t,n,r,i,a){return Gt(await e(t,{command:`desktopScroll`,direction:i,...Kt(a,{includeDuration:!0,includeReleaseBehavior:!1}),appBundleId:n.appBundleId},r),i,a,{includeDuration:!0})}function G(e,t,n){return{command:`remotePress`,remoteButton:e,...n===void 0?{}:{durationMs:n},...t===void 0?{}:{appBundleId:t}}}function Xt(e){return e===`system`?`backSystem`:`backInApp`}function Zt(e,t){let n={signal:t.signal,verbose:t.verbose,logPath:t.logPath,traceLogPath:t.traceLogPath,requestId:t.requestId,iosXctestrunFile:t.iosXctestrunFile,iosXctestDerivedDataPath:t.iosXctestDerivedDataPath,iosXctestEnvDir:t.iosXctestEnvDir,runnerLeaseContext:t.runnerLeaseContext};return{runnerOpts:n,overrides:{tap:async(r,i)=>await O(e,q(e,t,r,i),n),pressPoint:async(r,i)=>await Qt(e,t,n,r,i),tapElementSelector:async r=>await O(e,{command:`tap`,selectorKey:r.key,selectorValue:r.value,allowNonHittableCoordinateFallback:r.allowNonHittableCoordinateFallback,...r.expectedPoint?{x:r.expectedPoint.x,y:r.expectedPoint.y}:{},...cn(e)?{synthesized:!0}:{},appBundleId:t.appBundleId},n),doubleTap:async(r,i)=>{let a=await O(e,E([{kind:`doubleTap`,x:r,y:i}],t.appBundleId),n);return D(a),a},longPress:async(r,i,a)=>await O(e,{command:`longPress`,x:r,y:i,durationMs:a,appBundleId:t.appBundleId},n),focus:async(r,i)=>await O(e,q(e,t,r,i),n),type:async(r,i)=>nn(await O(e,{command:`type`,text:r,delayMs:i,textEntryMode:r===`
|
|
6
|
-
`?void 0:`append`,appBundleId:t.appBundleId},n)),fill:async(r,i,a,o,s)=>await O(e,{command:`type`,x:r,y:i,text:a,delayMs:o,textEntryMode:`replace`,...s?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},appBundleId:t.appBundleId},n),scroll:async(r,i)=>await ln(O,e,t,n,r,i),performGesture:async r=>await on(e,t,n,r),gestureViewport:async()=>an(await O(e,{command:`gestureViewport`,appBundleId:t.appBundleId},n))}}}async function Qt(e,t,n,i,a){return r(e)&&a.surface&&a.surface!==`app`?await $t(t,i,a):a.button===`primary`?a.count===1?await tn(e,t,n,i,a):await Fe(e,i,a,t.appBundleId,async t=>await O(e,t,n)):await en(e,t,n,i,a.button)}async function $t(t,n,r){if(r.button!==`primary`)throw new e(`UNSUPPORTED_OPERATION`,`${r.button} click is not supported on macOS ${r.surface} sessions.`);let{runMacOsPressAction:i}=await import(`./helper.js`).then(e=>e.t);return await i(n.x,n.y,{bundleId:t.appBundleId,surface:r.surface}),{}}async function en(e,t,n,r,i){return await O(e,{command:`mouseClick`,x:r.x,y:r.y,button:i,appBundleId:t.appBundleId},n)}async function tn(e,t,n,r,i){if(i.doubleTap){let i=await O(e,E([{kind:`doubleTap`,x:r.x,y:r.y}],t.appBundleId),n);return D(i),i}return i.holdMs>0?await O(e,{command:`longPress`,x:r.x,y:r.y,durationMs:i.holdMs,appBundleId:t.appBundleId},n):await O(e,q(e,t,r.x,r.y),n)}function nn(e){let t=e.textEntryRoute;return rn(t)?{textEntryRoute:t}:{}}function rn(e){return typeof e==`string`&&Ce.includes(e)}function an(t){let n=K(t.x),r=K(t.y),i=K(t.x2),a=K(t.y2);if(n===void 0||r===void 0||i===void 0||a===void 0||i<=0||a<=0)throw new e(`COMMAND_FAILED`,`Apple runner returned an invalid gesture viewport`);return{x:n,y:r,width:i,height:a}}function K(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}async function on(e,n,i,a){if(a.topology===`two`&&qe(e,a.intent),a.topology===`single`&&r(e)){let{start:t,end:r}=le(a);return await O(e,{command:`drag`,x:t.x,y:t.y,x2:r.x,y2:r.y,durationMs:a.durationMs,appBundleId:n.appBundleId},i)}if(a.topology===`single`&&t(e)){let{start:t,end:r}=le(a);return await O(e,{command:`swipe`,direction:sn(t,r),appBundleId:n.appBundleId},i)}return await O(e,{command:`gesture`,gesturePlan:a,appBundleId:n.appBundleId},i)}function sn(e,t){let n=t.x-e.x,r=t.y-e.y;return Math.abs(n)>=Math.abs(r)?n>=0?`right`:`left`:r>=0?`down`:`up`}function q(e,t,n,r){return{command:`tap`,x:n,y:r,...cn(e)?{synthesized:!0}:{},appBundleId:t.appBundleId}}function cn(e){return n(e)&&!t(e)}async function ln(e,n,i,a,o,c){if(ne(c?.durationMs,{invalidMessage:`scroll durationMs must be a non-negative integer at most ${te}`}),t(n))return W(await e(n,G(o,i.appBundleId,c?.durationMs),a),{amount:c?.amount,durationMs:c?.durationMs});if(s(c??{}),r(n))return await Yt(e,n,i,a,o,c);let l=Wt(c),u;try{u=await e(n,{command:`scroll`,direction:o,...Kt(l),appBundleId:i.appBundleId},a)}catch(e){throw Ut(e)}return Gt(u,o,l)}function J(e,t,n){if(r(e)){let e=n?.surface===`frontmost-app`?{surface:n.surface}:{bundleId:n?.appBundleId,surface:n?.surface};return async t=>await Ge(t,e)}return async(r,i)=>await O(e,{command:`alert`,action:r,appBundleId:n?.appBundleId,timeoutMs:i},t)}async function un(e,t,n){return await J(e,t,n)(`get`,c)}async function dn(t,n,r){let i=J(t,n,r),a=r?.timeoutMs??1e4,o=Date.now(),s=!0;for(;Date.now()-o<a;){try{let e=s?a:pn(o,a);return s=!1,await i(`get`,e)}catch(e){if(!Y(e))throw e}await h(300)}throw new e(`COMMAND_FAILED`,`alert wait timed out`)}async function fn(e,t,r,i){let a=J(e,t,i),o=n(e)?c:l,s=Date.now(),u,d=!0;for(;Date.now()-s<l;){try{let e=d?o:pn(s,l);return d=!1,await a(r,e)}catch(e){if(u=e,!Y(e))break}await h(300)}throw mn(u)}function pn(e,t){return Math.max(1,t-(Date.now()-e))}function mn(t){return!(t instanceof e)||!Y(t)?t:new e(t.code,t.message,{...t.details??{},hint:`If the permission sheet is visible in snapshot or screenshot but alert reports no alert, take a scoped snapshot around the visible button label and use press @ref.`})}function Y(t){if(!(t instanceof e))return!1;let n=t.details??{};return n.runnerErrorCode===`ALERT_NOT_FOUND`||n.reason===`alert-not-found`}function hn(e){let t=gn(e.systemSurface);return{nodes:Array.isArray(e.nodes)?e.nodes:void 0,truncated:typeof e.truncated==`boolean`?e.truncated:void 0,quality:me(e.snapshotQuality),qualityPayload:bn(e.qualityPayload,t),runnerFatal:e.runnerFatal===!0,...t?{systemSurface:t}:{},message:typeof e.message==`string`&&e.message.trim().length>0?e.message:void 0}}function gn(e){if(!X(e)||typeof e.bundleId!=`string`)return;let t=ye(e.bundleId);return t&&{bundleId:t.bundleId,kind:t.kind}}function _n(e,t,n){let r=n.nodes??[];if(n.runnerFatal===!0||r.length===0&&n.qualityPayload===void 0)return r;let i=fe({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions}),a=xn(r,n.qualityPayload?.nodes),o={stage:`presented`,presentation:{producer:`apple-runner`,intent:`full`,payload:{nodes:r,truncated:n.truncated??!1,...n.quality?.effectiveDepth===void 0?{}:{effectiveDepth:n.quality.effectiveDepth}},...n.qualityPayload?{qualityPayload:n.qualityPayload}:{}},validation:{presentationKey:de(i),viewport:a,hittability:{kind:`available`},lineage:{targetId:e},residue:[]}};try{return we(o,i).nodes}catch(e){vn(e,n)}}function vn(t,n){let r=n.quality;if(t instanceof _&&_e(r))throw new e(`COMMAND_FAILED`,t.message,{...v(t),...n.systemSurface?{systemSurface:n.systemSurface}:{},snapshotQuality:{state:r.state,backend:r.backend,...r.reason?{reason:r.reason}:{},...r.reasonCode?{reasonCode:r.reasonCode}:{}},hint:yn(n.systemSurface,r)},t);Z(t,n.systemSurface)}function yn(e,t){return[e?`${e.bundleId} hosts the surface presented over the app, and this capture targeted that surface.`:void 0,...ge(t,[])].filter(e=>e!==void 0).join(` `)}function bn(e,t){if(e!==void 0)return(!X(e)||!Array.isArray(e.nodes)||typeof e.truncated!=`boolean`)&&Z(new _(`invalid-quality-payload`,`iOS runner returned an invalid quality payload`),t),e.scope!==void 0&&e.scope!==null&&Z(new _(`invalid-quality-payload`,`iOS runner quality payload must be unscoped`,{field:`scope`}),t),{nodes:e.nodes,truncated:e.truncated,scope:null}}function xn(e,t){return be(Sn(t),{fallbackToLargestRoot:!0})??be(Sn(e),{fallbackToLargestRoot:!0})??{kind:`missing`,reason:`not-provided`}}function Sn(e){return e?.filter(e=>e.parentIndex===void 0)??[]}function X(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Z(t,n){throw t instanceof _?new e(`COMMAND_FAILED`,t.message,{...v(t),...n?{systemSurface:n}:{}},t):t}function Cn(n,r,i){if(n.appleOs===`watchos`)throw new e(`UNSUPPORTED_PLATFORM`,`watchOS is not supported: XCUITest cannot drive watchOS UI, so this device has no runner backend.`);let{overrides:a,runnerOpts:o}=Zt(n,r),s={open:(e,t)=>Ie(n,e,{appBundleId:t?.appBundleId,launchConsole:t?.launchConsole,launchArgs:t?.launchArgs,terminateRunningApp:t?.terminateRunningApp,url:t?.url,runnerOptions:o}),openDevice:()=>Le(n),close:e=>k(n,e,o),screenshot:(e,t)=>Nn(n,e,t,o),snapshot:async e=>await wn(n,e,o),readTextAtPoint:async(e,t)=>Fn(n,t?.surface)?await In(e,t):await Ln(n,e,t,o),findText:async(e,t)=>({found:(await O(n,{command:`findText`,text:e,appBundleId:t?.appBundleId},t?.signal?{...o,signal:t.signal}:o))?.found===!0}),back:async e=>{if(t(n)){await O(n,G(`menu`,r.appBundleId),o);return}await O(n,{command:Xt(e),appBundleId:r.appBundleId},o)},home:async()=>{if(t(n)){await O(n,G(`home`,r.appBundleId),o);return}await O(n,{command:`home`,appBundleId:r.appBundleId},o)},setOrientation:async t=>{let i=jn(await O(n,{command:`rotate`,orientation:t,appBundleId:r.appBundleId},o));if(i!==t)throw new e(`COMMAND_FAILED`,`iOS runner observed ${i} after requesting ${t}`,{requestedOrientation:t,observedOrientation:i});return{orientation:i}},appSwitcher:async()=>{await O(n,{command:`appSwitcher`,appBundleId:r.appBundleId},o)},tvRemote:async(e,t)=>{await O(n,G(se(e),r.appBundleId,t),o)},keyboardDismiss:async()=>{let e=await O(n,{command:`keyboardDismiss`,appBundleId:r.appBundleId},o);return{kind:`mechanism`,wasVisible:Q(e,`wasVisible`),dismissed:Q(e,`dismissed`),visible:Q(e,`visible`),mechanism:An(e,`keyboardDismissMechanism`)}},keyboardEnter:async()=>{let e=await O(n,{command:`keyboardReturn`,appBundleId:r.appBundleId},o);return{kind:`visibility-echo`,visible:Q(e,`visible`),wasVisible:Q(e,`wasVisible`)}},readClipboard:()=>Ye(n),writeClipboard:e=>Xe(n,e),setSetting:(e,t,r,i)=>ft(n,e,t,r,i),readAlert:e=>un(n,o,e),awaitAlert:e=>dn(n,o,e),acceptAlert:e=>fn(n,o,`accept`,e),dismissAlert:e=>fn(n,o,`dismiss`,e),...a};return i?Mn(n,r,s,i):s}async function wn(e,t,n){return r(e)&&t?.surface&&t.surface!==`app`?await Je(t,t.signal):await Tn(e,t,n)}async function Tn(t,n,r){let i=hn(await ae(`snapshot_capture`,async()=>await O(t,{command:`snapshot`,appBundleId:n?.appBundleId,interactiveOnly:n?.interactiveOnly,preferredBackend:n?.preferredBackend,customActions:n?.customActions,depth:n?.depth,scope:n?.scope,raw:n?.raw},kn(r,n?.signal)),{backend:`xctest`})),a=i.nodes??[],o=On(n,i.quality);if(a.length===0&&t.kind===`simulator`&&!o)throw new e(`COMMAND_FAILED`,`XCTest snapshot returned 0 nodes on iOS simulator.`);let s=En(i);return{nodes:Dn(t,n,i),truncated:i.truncated??!1,backend:`xctest`,producer:`apple-runner`,...i.quality?{quality:i.quality}:{},...i.systemSurface?{systemSurface:i.systemSurface}:{},...s.length>0?{warnings:s}:{}}}function En(e){let t=[];return!e.quality&&e.message&&t.push(e.message),e.systemSurface&&t.push(ve(e.systemSurface.bundleId)),t}function Dn(e,t,n){return r(e)?n.nodes??[]:_n(e.id,t,n)}function On(e,t){return i(e?.scope)!==null&&t!==void 0&&t.state!==`sparse`}function kn(e,t){return t?{...e,signal:e.signal?AbortSignal.any([e.signal,t]):t}:e}function Q(e,t){let n=e[t];return typeof n==`boolean`?n:void 0}function An(e,t){let n=e[t];return typeof n==`string`?n:void 0}function jn(t){let n=t.orientation;if(typeof n==`string`&&ie.includes(n))return n;throw new e(`COMMAND_FAILED`,`iOS runner returned an invalid orientation result`,{orientation:n})}function Mn(e,t,n,r){let i={...n,open:async()=>$(`open`),openDevice:async()=>$(`openDevice`),close:async()=>$(`close`),screenshot:async()=>$(`screenshot`),readClipboard:async()=>$(`readClipboard`),writeClipboard:async()=>$(`writeClipboard`),setSetting:async()=>$(`setSetting`)};return ue(i,n=>Ne(r,{deviceId:e.id,requestId:t.requestId},n))}function $(t){throw new e(`UNSUPPORTED_OPERATION`,`${t} uses local Apple tooling (simctl/devicectl), which an injected runner transport cannot reach; the provider session must supply its own ${t} implementation.`)}async function Nn(e,t,n={},r){if(Pn(e,n.surface)){await Ke(t,{surface:n.surface,fullscreen:n.fullscreen});return}if(n.captureBackend===`runner`){await H(e,t,n.appBundleId,n.fullscreen,r);return}await At(e,t,{appBundleId:n.appBundleId,pixelDensity:n.pixelDensity,fullscreen:n.fullscreen,runnerOptions:r,normalizeStatusBar:n.normalizeStatusBar,skipIosSimulatorBootCheck:n.skipIosSimulatorBootCheck})}function Pn(e,t){return r(e)&&t!==void 0&&t!==`app`}function Fn(e,t){return r(e)&&t!==void 0&&t!==`app`}async function In(e,t){let{runMacOsReadTextAction:n}=await import(`./helper.js`).then(e=>e.t);return(await n(e.x,e.y,{bundleId:t?.appBundleId,surface:t?.surface})).text}async function Ln(e,t,n,r){let i=await O(e,{command:`readText`,x:t.x,y:t.y,appBundleId:n?.appBundleId},n?.signal?{...r,signal:n.signal}:r);return typeof i.text==`string`?i.text:typeof i.message==`string`?i.message:void 0}export{Cn as createAppleInteractor};
|
|
3
|
+
`).replace(/\n$/,``))}async function lt(e,t){if(r(e)){await $e(t);return}C(e,`clipboard`),await w(e),m(await v(e,[`pbcopy`,e.id],{allowFailure:!0,stdin:t}),`Failed to write iOS simulator clipboard`)}const ut=[`--time`,`9:41`,`--dataNetwork`,`wifi`,`--wifiMode`,`active`,`--wifiBars`,`3`,`--batteryState`,`charged`,`--batteryLevel`,`100`],dt={0:`hide`,1:`wifi`,6:`3g`,7:`4g`,8:`lte`,9:`lte-a`,10:`lte+`,11:`5g`,12:`5g+`,13:`5g-uwb`,14:`5g-uc`},ft={1:`searching`,2:`failed`,3:`active`},pt={0:`notSupported`,1:`searching`,2:`failed`,3:`active`};function D(e,t,n){return _(e,t,n)}const O=new Set;async function mt(e){let t=null,n=!1;if(_t(e))n=!0;else try{t=await vt(e),n=!0}catch(t){N(e,`snapshot_failed`,t)}try{(!n||t)&&await j(e),await M(e,ut)}catch(t){N(e,`prepare_failed`,t)}return async()=>{await ht(e,n?t:null)}}async function ht(e,t){if(await j(e),!t){gt(e);return}await M(e,bt(t)),k(e)}function k(e){O.delete(A(e))}function gt(e){O.add(A(e))}function _t(e){return O.has(A(e))}function A(e){return`${e.platform}:${e.kind}:${e.id}`}async function vt(e){return yt(m(await D(e,[`status_bar`,e.id,`list`],{allowFailure:!0}),`Failed to read simulator status bar overrides`).stdout)}async function j(e){await D(e,[`status_bar`,e.id,`clear`])}async function M(e,t){t.length!==0&&await D(e,[`status_bar`,e.id,`override`,...t])}function yt(t){let n={},r=t.split(`
|
|
4
|
+
`).map(e=>e.trim()).filter(e=>e.length>0&&e!==`Current Status Bar Overrides:`&&!/^=+$/.test(e));for(let t of r){let r=/^DataNetworkType:\s+(\d+)$/.exec(t);if(r){let t=Number(r[1]),i=dt[t];if(!i)throw new e(`COMMAND_FAILED`,`Unsupported simulator data network type: ${t}`);n.dataNetwork=i;continue}let i=/^WiFi Mode:\s+(\d+),\s+WiFi Bars:\s+(\d+)$/.exec(t);if(i){let e=ft[Number(i[1])];e&&(n.wifiMode=e),n.wifiBars=i[2];continue}let a=/^Cell Mode:\s+(\d+),\s+Cell Bars:\s+(\d+)$/.exec(t);if(a){let t=Number(a[1]),r=pt[t];if(!r)throw new e(`COMMAND_FAILED`,`Unsupported simulator cellular mode: ${t}`);n.cellularMode=r,n.cellularBars=a[2];continue}let o=/^Operator Name:\s*(.*)$/.exec(t);if(o){n.operatorName=o[1]??``;continue}}return Object.keys(n).length===0?null:n}function bt(e){let t=[];return e.dataNetwork&&t.push(`--dataNetwork`,e.dataNetwork),e.wifiMode&&t.push(`--wifiMode`,e.wifiMode),e.wifiBars!==void 0&&(e.dataNetwork===`wifi`||e.wifiMode)&&t.push(`--wifiBars`,e.wifiBars),e.cellularMode&&t.push(`--cellularMode`,e.cellularMode),e.cellularBars!==void 0&&(e.cellularMode||xt(e.dataNetwork)||e.operatorName!==void 0)&&t.push(`--cellularBars`,e.cellularBars),e.operatorName!==void 0&&t.push(`--operatorName`,e.operatorName),t}function xt(e){return!!(e&&e!==`hide`&&e!==`wifi`)}function N(e,t,n){p({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...y(n)}})}let P=null,F;async function St(t,n,i,a,o){if(r(t)){let t=n.toLowerCase();if(t===`appearance`){await Xe(i);return}if(t===`permission`){let t=ee(i);if(t===`deny`)throw new e(`INVALID_ARGS`,f(`permission`));let n=wt(o?.permissionTarget);return await et(t,n)}throw new e(`INVALID_ARGS`,f(n))}C(t,`settings`),await w(t);let s=n.toLowerCase();switch(s){case`clear-app-state`:{if(i.toLowerCase()!==`clear`)throw new e(`INVALID_ARGS`,`settings clear-app-state only supports clear.`);if(!a)throw new e(`INVALID_ARGS`,`settings clear-app-state requires an app id or an active app session.`);let n=await Ct(t,a);return{bundleId:n.bundleId,containerPath:n.containerPath,cleared:!0}}case`reset-keychain`:if(i.toLowerCase()!==`clear`)throw new e(`INVALID_ARGS`,`settings reset-keychain only supports clear.`);return await v(t,[`keychain`,t.id,`reset`]),{scope:`simulator`,cleared:!0,message:`Reset the whole iOS simulator keychain. This clears keychain-backed credentials for every installed app, not just the app under test.`};case`wifi`:{let e=T(i)?`active`:`failed`;await v(t,[`status_bar`,t.id,`override`,`--wifiMode`,e]),k(t);return}case`airplane`:T(i)?(await v(t,[`status_bar`,t.id,`override`,`--dataNetwork`,`hide`,`--wifiMode`,`failed`,`--wifiBars`,`0`,`--cellularMode`,`failed`,`--cellularBars`,`0`,`--operatorName`,``]),k(t)):(await v(t,[`status_bar`,t.id,`clear`]),gt(t));return;case`location`:{if(i.toLowerCase()===`set`){let{latitude:e,longitude:n}=te(o);return await v(t,[`location`,t.id,`set`,`${e},${n}`]),{latitude:e,longitude:n}}let n=T(i);if(!a)throw new e(`INVALID_ARGS`,`location setting requires an active app in session`);let r=n?`grant`:`revoke`;await v(t,[`privacy`,t.id,r,`location`,a]);return}case`faceid`:case`touchid`:{let e=s,n=Dt[e];await Pt(t,Nt(i,e),{settingName:e,label:n.label,modalityAliases:n.modalityAliases});return}case`appearance`:{let e=await Tt(t,i);await v(t,[`ui`,t.id,`appearance`,e]);return}case`permission`:if(!a)throw new e(`INVALID_ARGS`,`permission setting requires an active app in session`);await kt(t,Ot(ee(i)),Mt(o?.permissionTarget,o?.permissionMode),a);return;default:throw new e(`INVALID_ARGS`,`Unsupported setting: ${n}`)}}async function Ct(t,n){if(!a(t)||t.kind!==`simulator`)throw new e(`UNSUPPORTED_OPERATION`,`Clearing app state is currently supported only on iOS simulators.`);let r=await Je(t,n);await w(t),await qe(t,r);let i=m(await v(t,[`get_app_container`,t.id,r,`data`],{allowFailure:!0}),`simctl get_app_container failed for ${r}`).stdout.trim();if(!i)throw new e(`COMMAND_FAILED`,`simctl get_app_container returned an empty data container path for ${r}`);let o=await Ae(i);return await Promise.all(o.map(e=>ke(E.join(i,e)))),{bundleId:r,containerPath:i}}function wt(t){let n=t?.trim().toLowerCase();if(n===`accessibility`||n===`screen-recording`||n===`input-monitoring`)return n;throw new e(`INVALID_ARGS`,`Unsupported macOS permission target. Use accessibility|screen-recording|input-monitoring.`)}async function Tt(t,n){let r=Qe(n);if(r!==`toggle`)return r;let i=m(await v(t,[`ui`,t.id,`appearance`],{allowFailure:!0}),`Failed to read current iOS appearance`),a=Et(i.stdout,i.stderr);if(!a)throw new e(`COMMAND_FAILED`,`Unable to determine current iOS appearance for toggle`,{stdout:i.stdout,stderr:i.stderr});return a===`dark`?`light`:`dark`}function Et(e,t){let n=/\b(light|dark|unsupported|unknown)\b/i.exec(`${e}\n${t}`);if(!n)return null;let r=n[1]?.toLowerCase();return r===`dark`?`dark`:r===`light`?`light`:null}const Dt={faceid:{label:`Face ID`,modalityAliases:[`face`]},touchid:{label:`Touch ID`,modalityAliases:[`finger`,`touch`]}};function Ot(e){return e===`deny`?`revoke`:e}async function kt(t,n,r,i){let a=await At(t);if(!a.has(r))throw new e(`UNSUPPORTED_OPERATION`,`iOS simctl privacy does not support service "${r}" on this runtime.`,{deviceId:t.id,appBundleId:i,hint:`Supported services: ${Array.from(a).sort().join(`, `)}`});let o=[`privacy`,t.id,n,r,i],s=r===`notifications`;if(!(n===`reset`&&s))try{await v(t,o);return}catch(n){throw s&&I(n)?new e(`UNSUPPORTED_OPERATION`,`iOS simulator does not support setting notifications permission via simctl privacy on this runtime.`,{deviceId:t.id,appBundleId:i,hint:`Use reset notifications for reprompt behavior, or toggle notifications manually in Settings.`}):n}try{await v(t,o);return}catch(e){if(!I(e))throw e}try{await v(t,[`privacy`,t.id,`reset`,`all`,i])}catch(n){throw new e(`COMMAND_FAILED`,`iOS simulator blocked direct notifications reset. Fallback reset-all also failed.`,{deviceId:t.id,appBundleId:i,hint:`Use reinstall to force a fresh notifications prompt, or reset simulator content and settings.`},n instanceof Error?n:void 0)}}function I(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=String(t.details?.stderr??``).toLowerCase();return(n.includes(`failed to grant access`)||n.includes(`failed to revoke access`)||n.includes(`failed to reset access`))&&n.includes(`operation not permitted`)}async function At(t){let n=ge(t.simulatorSetPath),r=`${ce(`PATH`)??``}::${n??``}`;if(P&&F===r)return P;let i=await v(t,[`privacy`,`help`],{allowFailure:!0}),a=jt(`${i.stdout}\n${i.stderr}`);if(a.size===0)throw new e(`COMMAND_FAILED`,`Unable to determine supported simctl privacy services`,{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode,hint:"Run `xcrun simctl privacy help` manually to verify available services for this runtime."});return P=a,F=r,a}function jt(e){let t=new Set,n=!1;for(let r of e.split(`
|
|
5
|
+
`)){let e=r.trim();if(!e)continue;if(e===`service`){n=!0;continue}if(!n)continue;if(e.startsWith(`bundle identifier`))break;let i=/^([a-z-]+)\s+-\s+/.exec(e)?.[1];i!==void 0&&t.add(i)}return t}function Mt(t,n){let r=ne(t);if(r!==`photos`&&n?.trim())throw new e(`INVALID_ARGS`,`Permission mode is only supported for photos. Received: ${n}.`);if(r===`camera`)return`camera`;if(r===`microphone`)return`microphone`;if(r===`contacts`)return`contacts`;if(r===`contacts-limited`)return`contacts-limited`;if(r===`notifications`)return`notifications`;if(r===`calendar`)return`calendar`;if(r===`location`)return`location`;if(r===`location-always`)return`location-always`;if(r===`media-library`)return`media-library`;if(r===`motion`)return`motion`;if(r===`reminders`)return`reminders`;if(r===`siri`)return`siri`;if(r===`photos`){let t=n?.trim().toLowerCase();if(!t||t===`full`)return`photos`;if(t===`limited`)return`photos-add`;throw new e(`INVALID_ARGS`,`Invalid photos mode: ${n}. Use full|limited.`)}throw new e(`INVALID_ARGS`,`Unsupported permission target: ${t}. Use camera|microphone|photos|contacts|contacts-limited|notifications|calendar|location|location-always|media-library|motion|reminders|siri.`)}function Nt(t,n){let r=t.trim().toLowerCase();if(r===`match`)return`match`;if(r===`nonmatch`)return`nonmatch`;if(r===`enroll`)return`enroll`;if(r===`unenroll`)return`unenroll`;throw new e(`INVALID_ARGS`,`Invalid ${n} state: ${t}. Use match|nonmatch|enroll|unenroll.`)}async function Pt(t,n,r){let i=Ft(t.id,n,r.modalityAliases),a=[];for(let e of i){let n=Re(t,e),r=await Le(n,{allowFailure:!0});if(r.exitCode===0)return;a.push({args:n,stderr:r.stderr,stdout:r.stdout,exitCode:r.exitCode})}let o=Ze(a);throw a.length>0&&a.every(e=>It(e.stdout,e.stderr))?new e(`UNSUPPORTED_OPERATION`,`${r.label} simulation is not supported on this simulator runtime.`,{deviceId:t.id,action:n,setting:r.settingName,attempts:o}):new e(`COMMAND_FAILED`,`Failed to simulate ${r.settingName}.`,{deviceId:t.id,action:n,setting:r.settingName,attempts:o})}function Ft(e,t,n){let r=n.length>0?n:[`face`];switch(t){case`match`:return r.flatMap(t=>[[`biometric`,e,`match`,t],[`biometric`,`match`,e,t]]);case`nonmatch`:return r.flatMap(t=>[[`biometric`,e,`nonmatch`,t],[`biometric`,e,`nomatch`,t],[`biometric`,`nonmatch`,e,t],[`biometric`,`nomatch`,e,t]]);case`enroll`:return[[`biometric`,e,`enroll`,`yes`],[`biometric`,e,`enroll`,`1`],[`biometric`,`enroll`,e,`yes`],[`biometric`,`enroll`,e,`1`]];case`unenroll`:return[[`biometric`,e,`enroll`,`no`],[`biometric`,e,`enroll`,`0`],[`biometric`,`enroll`,e,`no`],[`biometric`,`enroll`,e,`0`]]}}function It(e,t){let n=`${e}\n${t}`.toLowerCase();return n.includes(`unrecognized subcommand`)||n.includes(`unknown subcommand`)||n.includes(`not supported`)||n.includes(`unavailable`)||n.includes(`biometric`)&&n.includes(`invalid`)}function L(e,t,n){return _(e,t,n)}const Lt={ensureBooted:w,prepareStatusBarForScreenshot:mt,resolveCaptureDisplay:rt,captureWithRetry:Bt,normalizeDensity:Kt,captureWithRunner:B,shouldFallbackToRunner:U},R=new Map,z=new Map;async function Rt(e,t,n={}){if(r(e)){await B(e,t,n.appBundleId,n.fullscreen,n.runnerOptions);return}if(e.kind===`simulator`){await zt(e,t,n);return}await Be(e).captureScreenshot(e,t,{appBundleId:n.appBundleId,fullscreen:n.fullscreen,runnerOptions:n.runnerOptions,runRunnerCommand:S})}async function zt(t,n,r={}){if(t.kind!==`simulator`)throw new e(`UNSUPPORTED_OPERATION`,`Simulator screenshot fallback flow supports only iOS simulators`);let i={...Lt,...r.deps??{}};r.skipIosSimulatorBootCheck||await i.ensureBooted(t);let a=await i.resolveCaptureDisplay(t),o=async()=>{await i.captureWithRetry(t,n,a),await i.normalizeDensity(t,n,r.pixelDensity,a)},s=async()=>{};if(r.normalizeStatusBar===!0)try{s=await i.prepareStatusBarForScreenshot(t)}catch(e){H(t,`prepare_failed`,e)}try{try{await o();return}catch(e){let n=e;if(r.skipIosSimulatorBootCheck&&Gt(e)){await i.ensureBooted(t);try{await o();return}catch(e){n=e}}if(!i.shouldFallbackToRunner(n))throw n;Ut(t,`simctl_screenshot`,n)}await i.captureWithRunner(t,n,r.appBundleId,r.fullscreen,r.runnerOptions),await i.normalizeDensity(t,n,r.pixelDensity,void 0)}finally{await s().catch(e=>H(t,`restore_failed`,e))}}async function Bt(e,t,n){let r=de.fromTimeoutMs(Ne),i=[`io`,e.id,`screenshot`,...it(n),t];await ue(async({deadline:t})=>{await L(e,i,{timeoutMs:Math.max(1e3,t?.remainingMs()??2e4)})},{maxAttempts:5,baseDelayMs:Pe,maxDelayMs:Ie,jitter:.2,shouldRetry:e=>U(e)},{deadline:r,phase:`ios_simulator_screenshot`})}async function B(t,n,i,a,o){if(t.kind===`device`&&!r(t)){await Be(t).captureScreenshot(t,n,{appBundleId:i,fullscreen:a,runnerOptions:o,preferRunner:!0,runRunnerCommand:S});return}let s=(await S(t,{command:`screenshot`,appBundleId:i,fullscreen:a,inlineScreenshot:!1},o)).message;if(!s)throw new e(`COMMAND_FAILED`,`Failed to capture iOS screenshot: runner returned no file path`);if(r(t)){await je(s,n);return}if(t.kind===`simulator`){await Vt(t,s,n);return}throw new e(`COMMAND_FAILED`,`Unsupported Apple screenshot target`)}async function Vt(t,n,r){let i=de.fromTimeoutMs(Fe),a=`Unable to locate runner container for simulator screenshot`,o=z.get(t.id);if(o){let e=await V(o,n,r);if(e.copied)return;a=e.error,z.delete(t.id)}for(let e of He){let o=await L(t,[`get_app_container`,t.id,e,`data`],{allowFailure:!0,timeoutMs:Ht(i,Fe,`runner screenshot container lookup`)});if(o.exitCode!==0){let e=o.stderr.trim();e&&(a=e);continue}let s=o.stdout.trim();if(!s){a=`simctl get_app_container returned empty output`;continue}let c=await V(s,n,r);if(c.copied){z.set(t.id,s);return}a=c.error}throw new e(`COMMAND_FAILED`,`Failed to capture iOS screenshot: ${a}`)}async function V(e,t,n){let r=`Runner screenshot was not found in the simulator container`;for(let i of Wt(e,t))try{return await je(i,n),{copied:!0}}catch(e){r=e instanceof Error?e.message:String(e)}return{copied:!1,error:r}}function Ht(t,n,r){let i=t.remainingMs();if(i>0)return i;throw new e(`COMMAND_FAILED`,`iOS ${r} timed out after ${n}ms`,{timeoutMs:n,step:r})}function Ut(e,t,n){let r=y(n);p({level:`warn`,phase:`ios_screenshot_fallback`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,from:t,to:`runner`,...r}})}function H(e,t,n){p({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...y(n)}})}function Wt(e,t){let n=E.resolve(e),r=t.trim();if(!r)return[];let i=[],a=new Set,o=e=>{let t=E.normalize(e);a.has(t)||(a.add(t),i.push(t))},s=r.replace(/^\/+/,``),c=s.replaceAll(`\\`,`/`);if(s&&o(E.join(n,s)),E.isAbsolute(r)&&o(E.normalize(r)),c.startsWith(`tmp/`))o(E.join(n,c));else{let e=c.lastIndexOf(`/tmp/`);if(e>=0){let t=c.slice(e+1);o(E.join(n,t))}}let l=E.basename(r);return l&&o(E.join(n,`tmp`,l)),i}function U(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=ze(t);return n.includes(`timeout waiting for screen surfaces`)||n.includes(`nsposixerrordomain`)&&n.includes(`code=60`)&&n.includes(`screenshot`)||n.includes(`timed out`)&&n.includes(`screenshot`)}function Gt(t){if(!(t instanceof e)||t.code!==`COMMAND_FAILED`)return!1;let n=ze(t);return n.includes(`not booted`)||n.includes(`current state: shutdown`)||n.includes(`current state is shutdown`)||n.includes(`current state=shutdown`)||n.includes(`state: shutdown`)||n.includes(`state=shutdown`)}async function Kt(e,t,n,r){let i=r?r.pointScale:await qt(e),a=De(await Ee(t),i,n);a&&await ve(t,a.width,a.height)}async function qt(t){let n=R.get(t.id);if(n!==void 0)return n;let r=await L(t,[`getenv`,t.id,`SIMULATOR_MAINSCREEN_SCALE`],{timeoutMs:Me}),i=Number(r.stdout.trim());if(!Number.isFinite(i)||i<=0)throw new e(`COMMAND_FAILED`,`Failed to read iOS simulator screenshot scale from SIMULATOR_MAINSCREEN_SCALE`);return R.set(t.id,i),i}function Jt(t){return!(t instanceof e)||t.details?.runnerErrorCode!==`SCROLL_KEYBOARD_OCCLUDES_SURFACE`?t:new e(t.code,t.message,{...t.details,...c})}function Yt(e){let t=e?.amount!==void 0||e?.pixels!==void 0;return{...e,...t?{}:{amount:ae},durationMs:e?.durationMs??400,releaseBehavior:e?.releaseBehavior??`controlled`}}function Xt(e,t,n,r={includeDuration:!0}){let i=W(e.referenceWidth),a=W(e.referenceHeight);if(i===void 0||a===void 0)return G(e,{amount:n?.amount});let o=s({direction:t,amount:n?.amount,pixels:n?.pixels,referenceWidth:i,referenceHeight:a});return G(e,{amount:n?.amount,pixels:o.pixels,durationMs:r?.includeDuration?n?.durationMs:void 0,preferProvidedPixels:!0})}function Zt(e,t={}){return{...e?.amount===void 0?{}:{amount:e.amount},...e?.pixels===void 0?{}:{pixels:e.pixels},...t.includeDuration!==!1&&e?.durationMs!==void 0?{durationMs:e.durationMs}:{},...t.includeReleaseBehavior!==!1&&e?.releaseBehavior!==void 0?{scrollReleaseBehavior:e.releaseBehavior}:{}}}function W(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function G(e,t){let{x1:n,y1:r,x2:i,y2:a}=$t(e),o=W(e.referenceWidth),s=W(e.referenceHeight),c=Qt(t,n!==void 0&&i!==void 0?Math.round(Math.abs(i-n)):void 0,r!==void 0&&a!==void 0?Math.round(Math.abs(a-r)):void 0),l=W(e.keyboardMinY);return{...n===void 0?{}:{x1:n},...r===void 0?{}:{y1:r},...i===void 0?{}:{x2:i},...a===void 0?{}:{y2:a},...o===void 0?{}:{referenceWidth:o},...s===void 0?{}:{referenceHeight:s},...e.keyboardAvoided===!0?{keyboardAvoided:!0}:{},...l===void 0?{}:{keyboardMinY:l},...t?.amount===void 0?{}:{amount:t.amount},...c===void 0?{}:{pixels:c},...t?.durationMs===void 0?{}:{durationMs:t.durationMs}}}function Qt(e,t,n){if(e?.preferProvidedPixels&&e.pixels!==void 0)return e.pixels;if(t!==void 0&&t>0)return t;if(n!==void 0&&n>0)return n}function $t(e){let t=W(e.x),n=W(e.y),r=W(e.x2),i=W(e.y2);return{...t===void 0?{}:{x1:t},...n===void 0?{}:{y1:n},...r===void 0?{}:{x2:r},...i===void 0?{}:{y2:i}}}async function en(e,t,n,r,i,a){return Xt(await e(t,{command:`desktopScroll`,direction:i,...Zt(a,{includeDuration:!0,includeReleaseBehavior:!1}),appBundleId:n.appBundleId},r),i,a,{includeDuration:!0})}function K(e,t,n){return{command:`remotePress`,remoteButton:e,...n===void 0?{}:{durationMs:n},...t===void 0?{}:{appBundleId:t}}}function tn(e){return e===`system`?`backSystem`:`backInApp`}function nn(e,t){let n={signal:t.signal,verbose:t.verbose,logPath:t.logPath,traceLogPath:t.traceLogPath,requestId:t.requestId,iosXctestrunFile:t.iosXctestrunFile,iosXctestDerivedDataPath:t.iosXctestDerivedDataPath,iosXctestEnvDir:t.iosXctestEnvDir,runnerLeaseContext:t.runnerLeaseContext};return{runnerOpts:n,overrides:{tap:async(r,i)=>await S(e,J(e,t,r,i),n),pressPoint:async(r,i)=>await rn(e,t,n,r,i),tapElementSelector:async r=>await S(e,{command:`tap`,selectorKey:r.key,selectorValue:r.value,allowNonHittableCoordinateFallback:r.allowNonHittableCoordinateFallback,...r.expectedPoint?{x:r.expectedPoint.x,y:r.expectedPoint.y}:{},...pn(e)?{synthesized:!0}:{},appBundleId:t.appBundleId},n),doubleTap:async(r,i)=>{let a=await S(e,b([{kind:`doubleTap`,x:r,y:i}],t.appBundleId),n);return x(a),a},longPress:async(r,i,a)=>await S(e,{command:`longPress`,x:r,y:i,durationMs:a,appBundleId:t.appBundleId},n),focus:async(r,i)=>await S(e,J(e,t,r,i),n),type:async(r,i)=>cn(await S(e,{command:`type`,text:r,delayMs:i,textEntryMode:r===`
|
|
6
|
+
`?void 0:`append`,appBundleId:t.appBundleId},n)),fill:async(r,i,a,o,s)=>await S(e,{command:`type`,x:r,y:i,text:a,delayMs:o,textEntryMode:`replace`,...s?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},appBundleId:t.appBundleId},n),scroll:async(r,i)=>await mn(S,e,t,n,r,i),performGesture:async r=>await dn(e,t,n,r),gestureViewport:async()=>un(await S(e,{command:`gestureViewport`,appBundleId:t.appBundleId},n))}}}async function rn(e,t,n,i,a){return r(e)&&a.surface&&a.surface!==`app`?await an(t,i,a):a.button===`primary`?a.count===1?await sn(e,t,n,i,a):await We(e,i,a,t.appBundleId,async t=>await S(e,t,n)):await on(e,t,n,i,a.button)}async function an(t,n,r){if(r.button!==`primary`)throw new e(`UNSUPPORTED_OPERATION`,`${r.button} click is not supported on macOS ${r.surface} sessions.`);let{runMacOsPressAction:i}=await import(`./helper.js`).then(e=>e.t);return await i(n.x,n.y,{bundleId:t.appBundleId,surface:r.surface}),{}}async function on(e,t,n,r,i){return await S(e,{command:`mouseClick`,x:r.x,y:r.y,button:i,appBundleId:t.appBundleId},n)}async function sn(e,t,n,r,i){if(i.doubleTap){let i=await S(e,b([{kind:`doubleTap`,x:r.x,y:r.y}],t.appBundleId),n);return x(i),i}return i.holdMs>0?await S(e,{command:`longPress`,x:r.x,y:r.y,durationMs:i.holdMs,appBundleId:t.appBundleId},n):await S(e,J(e,t,r.x,r.y),n)}function cn(e){let t=e.textEntryRoute;return ln(t)?{textEntryRoute:t}:{}}function ln(e){return typeof e==`string`&&Oe.includes(e)}function un(t){let n=q(t.x),r=q(t.y),i=q(t.x2),a=q(t.y2);if(n===void 0||r===void 0||i===void 0||a===void 0||i<=0||a<=0)throw new e(`COMMAND_FAILED`,`Apple runner returned an invalid gesture viewport`);return{x:n,y:r,width:i,height:a}}function q(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}async function dn(e,t,n,a){if(a.topology===`two`&&at(e,a.intent),a.topology===`single`&&r(e)){let{start:r,end:i}=fe(a);return await S(e,{command:`drag`,x:r.x,y:r.y,x2:i.x,y2:i.y,durationMs:a.durationMs,appBundleId:t.appBundleId},n)}if(a.topology===`single`&&i(e)){let{start:r,end:i}=fe(a);return await S(e,{command:`swipe`,direction:fn(r,i),appBundleId:t.appBundleId},n)}return await S(e,{command:`gesture`,gesturePlan:a,appBundleId:t.appBundleId},n)}function fn(e,t){let n=t.x-e.x,r=t.y-e.y;return Math.abs(n)>=Math.abs(r)?n>=0?`right`:`left`:r>=0?`down`:`up`}function J(e,t,n,r){return{command:`tap`,x:n,y:r,...pn(e)?{synthesized:!0}:{},appBundleId:t.appBundleId}}function pn(e){return a(e)&&!i(e)}async function mn(e,t,n,a,o,s){if(ie(s?.durationMs,{invalidMessage:`scroll durationMs must be a non-negative integer at most ${re}`}),i(t))return G(await e(t,K(o,n.appBundleId,s?.durationMs),a),{amount:s?.amount,durationMs:s?.durationMs});if(l(s??{}),r(t))return await en(e,t,n,a,o,s);let c=Yt(s),u;try{u=await e(t,{command:`scroll`,direction:o,...Zt(c),appBundleId:n.appBundleId},a)}catch(e){throw Jt(e)}return Xt(u,o,c)}function Y(e,t,n){if(r(e)){let e=n?.surface===`frontmost-app`?{surface:n.surface}:{bundleId:n?.appBundleId,surface:n?.surface};return async t=>await tt(t,e)}return async(r,i)=>await S(e,{command:`alert`,action:r,appBundleId:n?.appBundleId,timeoutMs:i},t)}async function hn(e,t,n){return await Y(e,t,n)(`get`,u)}async function gn(t,n,r){let i=Y(t,n,r),a=r?.timeoutMs??1e4,o=Date.now(),s=!0;for(;Date.now()-o<a;){try{let e=s?a:vn(o,a);return s=!1,await i(`get`,e)}catch(e){if(!X(e))throw e}await h(300)}throw new e(`COMMAND_FAILED`,`alert wait timed out`)}async function _n(e,t,n,r){let i=Y(e,t,r),o=a(e)?u:d,s=Date.now(),c,l=!0;for(;Date.now()-s<d;){try{let e=l?o:vn(s,d);return l=!1,await i(n,e)}catch(e){if(c=e,!X(e))break}await h(300)}throw yn(c)}function vn(e,t){return Math.max(1,t-(Date.now()-e))}function yn(t){return!(t instanceof e)||!X(t)?t:new e(t.code,t.message,{...t.details??{},hint:`If the permission sheet is visible in snapshot or screenshot but alert reports no alert, take a scoped snapshot around the visible button label and use press @ref.`})}function X(t){if(!(t instanceof e))return!1;let n=t.details??{};return n.runnerErrorCode===`ALERT_NOT_FOUND`||n.reason===`alert-not-found`}const bn={0:`unknown`,1:`notRunning`,2:`runningBackground`,3:`runningBackgroundSuspended`};function xn(e,n){if(typeof e!=`object`||!e||Array.isArray(e))return;let r={...e},i=r.reason;if(!t(i))return;let a=r.priorState;if(typeof a!=`number`||!Number.isInteger(a))return;let o=bn[a];o===void 0&&n?.({reason:i,rawPriorState:a});let s=r.otherActiveApplicationPid;return{reason:i,priorState:o??`unknown`,...typeof s==`number`&&Number.isInteger(s)&&s>0?{otherActiveApplicationPid:s}:{}}}function Sn(e){let t=Cn(e.systemSurface),r=n(e.keyboard),i=xn(e.targetActivation,e=>Ue({level:`debug`,phase:`ios_runner_target_activation_prior_state_unmapped`,data:e}));return{nodes:Array.isArray(e.nodes)?e.nodes:void 0,truncated:typeof e.truncated==`boolean`?e.truncated:void 0,quality:_e(e.snapshotQuality),qualityPayload:Dn(e.qualityPayload,t),runnerFatal:e.runnerFatal===!0,...r?{keyboard:r}:{},...t?{systemSurface:t}:{},...i?{targetActivation:i}:{},message:typeof e.message==`string`&&e.message.trim().length>0?e.message:void 0}}function Cn(e){if(!An(e)||typeof e.bundleId!=`string`)return;let t=we(e.bundleId);return t&&{bundleId:t.bundleId,kind:t.kind}}function wn(e,t,n){let r=n.nodes??[];if(n.runnerFatal===!0||r.length===0&&n.qualityPayload===void 0)return r;let i=he({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions}),a=On(r,n.qualityPayload?.nodes),o={stage:`presented`,presentation:{producer:`apple-runner`,intent:`full`,payload:{nodes:r,truncated:n.truncated??!1,...n.quality?.effectiveDepth===void 0?{}:{effectiveDepth:n.quality.effectiveDepth}},...n.qualityPayload?{qualityPayload:n.qualityPayload}:{}},validation:{presentationKey:me(i),viewport:a,hittability:{kind:`available`},lineage:{targetId:e},residue:[]}};try{return Se(o,i).nodes}catch(e){Tn(e,n)}}function Tn(t,n){let r=n.quality;if(t instanceof g&&be(r))throw new e(`COMMAND_FAILED`,t.message,{...xe(t),...n.systemSurface?{systemSurface:n.systemSurface}:{},snapshotQuality:{state:r.state,backend:r.backend,...r.reason?{reason:r.reason}:{},...r.reasonCode?{reasonCode:r.reasonCode}:{}},hint:En(n.systemSurface,r)},t);Z(t,n.systemSurface)}function En(e,t){return[e?`${e.bundleId} hosts the surface presented over the app, and this capture targeted that surface.`:void 0,...ye(t,[])].filter(e=>e!==void 0).join(` `)}function Dn(e,t){if(e!==void 0)return(!An(e)||!Array.isArray(e.nodes)||typeof e.truncated!=`boolean`)&&Z(new g(`invalid-quality-payload`,`iOS runner returned an invalid quality payload`),t),e.scope!==void 0&&e.scope!==null&&Z(new g(`invalid-quality-payload`,`iOS runner quality payload must be unscoped`,{field:`scope`}),t),{nodes:e.nodes,truncated:e.truncated,scope:null}}function On(e,t){return Te(kn(t),{fallbackToLargestRoot:!0})??Te(kn(e),{fallbackToLargestRoot:!0})??{kind:`missing`,reason:`not-provided`}}function kn(e){return e?.filter(e=>e.parentIndex===void 0)??[]}function An(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Z(t,n){throw t instanceof g?new e(`COMMAND_FAILED`,t.message,{...xe(t),...n?{systemSurface:n}:{}},t):t}function jn(t,n,r){if(t.appleOs===`watchos`)throw new e(`UNSUPPORTED_PLATFORM`,`watchOS is not supported: XCUITest cannot drive watchOS UI, so this device has no runner backend.`);let{overrides:a,runnerOpts:o}=nn(t,n),s={open:(e,n)=>Ge(t,e,{appBundleId:n?.appBundleId,launchConsole:n?.launchConsole,launchArgs:n?.launchArgs,terminateRunningApp:n?.terminateRunningApp,url:n?.url,runnerOptions:o}),openDevice:()=>Ke(t),close:e=>qe(t,e,o),screenshot:(e,n)=>Hn(t,e,n,o),snapshot:async e=>await Mn(t,e,o),readTextAtPoint:async(e,n)=>Wn(t,n?.surface)?await Gn(e,n):await Kn(t,e,n,o),findText:async(e,n)=>({found:(await S(t,{command:`findText`,text:e,appBundleId:n?.appBundleId},n?.signal?{...o,signal:n.signal}:o))?.found===!0}),back:async e=>{if(i(t)){await S(t,K(`menu`,n.appBundleId),o);return}await S(t,{command:tn(e),appBundleId:n.appBundleId},o)},home:async()=>{if(i(t)){await S(t,K(`home`,n.appBundleId),o);return}await S(t,{command:`home`,appBundleId:n.appBundleId},o)},setOrientation:async r=>{let i=Bn(await S(t,{command:`rotate`,orientation:r,appBundleId:n.appBundleId},o));if(i!==r)throw new e(`COMMAND_FAILED`,`iOS runner observed ${i} after requesting ${r}`,{requestedOrientation:r,observedOrientation:i});return{orientation:i}},appSwitcher:async()=>{await S(t,{command:`appSwitcher`,appBundleId:n.appBundleId},o)},actionButton:async()=>{await S(t,{command:`actionButton`,appBundleId:n.appBundleId},o)},tvRemote:async(e,r)=>{await S(t,K(le(e),n.appBundleId,r),o)},keyboardDismiss:async()=>{let e=await S(t,{command:`keyboardDismiss`,appBundleId:n.appBundleId},o);return{kind:`mechanism`,wasVisible:Q(e,`wasVisible`),dismissed:Q(e,`dismissed`),visible:Q(e,`visible`),mechanism:zn(e,`keyboardDismissMechanism`)}},keyboardEnter:async()=>{let e=await S(t,{command:`keyboardReturn`,appBundleId:n.appBundleId},o);return{kind:`visibility-echo`,visible:Q(e,`visible`),wasVisible:Q(e,`wasVisible`)}},readClipboard:()=>ct(t),writeClipboard:e=>lt(t,e),setSetting:(e,n,r,i)=>St(t,e,n,r,i),readAlert:e=>hn(t,o,e),awaitAlert:e=>gn(t,o,e),acceptAlert:e=>_n(t,o,`accept`,e),dismissAlert:e=>_n(t,o,`dismiss`,e),...a};return r?Vn(t,n,s,r):s}async function Mn(e,t,n){return r(e)&&t?.surface&&t.surface!==`app`?await ot(t,t.signal):await Nn(e,t,n)}async function Nn(e,t,n){let r=Sn(await se(`snapshot_capture`,async()=>await S(e,{command:`snapshot`,appBundleId:t?.appBundleId,interactiveOnly:t?.interactiveOnly,preferredBackend:t?.preferredBackend,customActions:t?.customActions,depth:t?.depth,scope:t?.scope,raw:t?.raw},Rn(n,t?.signal)),{backend:`xctest`}));Pn(e,t,r);let i=Fn(r);return{nodes:In(e,t,r),truncated:r.truncated??!1,backend:`xctest`,producer:`apple-runner`,...r.quality?{quality:r.quality}:{},...r.systemSurface?{systemSurface:r.systemSurface}:{},...r.keyboard?{keyboard:r.keyboard}:{},...r.targetActivation?{targetActivation:r.targetActivation}:{},...i.length>0?{warnings:i}:{}}}function Pn(t,n,r){if(!((r.nodes?.length??0)>0)&&!Ln(n,r.quality)&&t.kind===`simulator`)throw new e(`COMMAND_FAILED`,`XCTest snapshot returned 0 nodes on iOS simulator.`)}function Fn(e){let t=[];return!e.quality&&e.message&&t.push(e.message),e.systemSurface&&t.push(Ce(e.systemSurface.bundleId)),e.targetActivation&&t.push(st(e.targetActivation)),t}function In(e,t,n){return r(e)?n.nodes??[]:wn(e.id,t,n)}function Ln(e,t){return o(e?.scope)!==null&&t!==void 0&&t.state!==`sparse`}function Rn(e,t){return t?{...e,signal:e.signal?AbortSignal.any([e.signal,t]):t}:e}function Q(e,t){let n=e[t];return typeof n==`boolean`?n:void 0}function zn(e,t){let n=e[t];return typeof n==`string`?n:void 0}function Bn(t){let n=t.orientation;if(typeof n==`string`&&oe.includes(n))return n;throw new e(`COMMAND_FAILED`,`iOS runner returned an invalid orientation result`,{orientation:n})}function Vn(e,t,n,r){let i={...n,open:async()=>$(`open`),openDevice:async()=>$(`openDevice`),close:async()=>$(`close`),screenshot:async()=>$(`screenshot`),readClipboard:async()=>$(`readClipboard`),writeClipboard:async()=>$(`writeClipboard`),setSetting:async()=>$(`setSetting`)};return pe(i,n=>Ve(r,{deviceId:e.id,requestId:t.requestId},n))}function $(t){throw new e(`UNSUPPORTED_OPERATION`,`${t} uses local Apple tooling (simctl/devicectl), which an injected runner transport cannot reach; the provider session must supply its own ${t} implementation.`)}async function Hn(e,t,n={},r){if(Un(e,n.surface)){await nt(t,{surface:n.surface,fullscreen:n.fullscreen});return}if(n.captureBackend===`runner`){await B(e,t,n.appBundleId,n.fullscreen,r);return}await Rt(e,t,{appBundleId:n.appBundleId,pixelDensity:n.pixelDensity,fullscreen:n.fullscreen,runnerOptions:r,normalizeStatusBar:n.normalizeStatusBar,skipIosSimulatorBootCheck:n.skipIosSimulatorBootCheck})}function Un(e,t){return r(e)&&t!==void 0&&t!==`app`}function Wn(e,t){return r(e)&&t!==void 0&&t!==`app`}async function Gn(e,t){let{runMacOsReadTextAction:n}=await import(`./helper.js`).then(e=>e.t);return(await n(e.x,e.y,{bundleId:t?.appBundleId,surface:t?.surface})).text}async function Kn(e,t,n,r){let i=await S(e,{command:`readText`,x:t.x,y:t.y,appBundleId:n?.appBundleId},n?.signal?{...r,signal:n.signal}:r);return typeof i.text==`string`?i.text:typeof i.message==`string`?i.message:void 0}export{jn as createAppleInteractor};
|
package/dist/src/interactor2.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{D as e}from"./sdk-contracts.js";import{r as t}from"./sdk-batch-runner.js";import{a as n}from"./exec.js";import{o as r}from"./tv-remote.js";import"./command.js";import{t as i}from"./tool-provider3.js";function a(t){let n=async n=>{throw new e(`UNSUPPORTED_OPERATION`,`${n} is not supported on ${t}`)};return{open:()=>n(`open`),openDevice:()=>n(`openDevice`),close:()=>n(`close`),tap:()=>n(`tap`),doubleTap:()=>n(`doubleTap`),longPress:()=>n(`longPress`),focus:()=>n(`focus`),type:()=>n(`type`),fill:()=>n(`fill`),scroll:()=>n(`scroll`),screenshot:()=>n(`screenshot`),snapshot:()=>n(`snapshot`),back:()=>n(`back`),home:()=>n(`home`),setOrientation:()=>n(`setOrientation`),appSwitcher:()=>n(`appSwitcher`),actionButton:()=>n(`actionButton`),tvRemote:()=>n(`tvRemote`),readClipboard:()=>n(`readClipboard`),writeClipboard:()=>n(`writeClipboard`),setSetting:()=>n(`setSetting`),readAlert:()=>n(`readAlert`),awaitAlert:()=>n(`awaitAlert`),acceptAlert:()=>n(`acceptAlert`),dismissAlert:()=>n(`dismissAlert`)}}const o={allowFailure:!0,timeoutMs:3e4};async function s(e,t){n(await i().launchApp(e.id,t,o),`Failed to launch Vega app ${t}`,{appName:t,deviceId:e.id})}async function c(e){n(await i().checkConnected(e.id,o),`Vega device is not connected`,{deviceId:e.id})}async function l(e,t){n(await i().terminateApp(e.id,t,o),`Failed to terminate Vega app ${t}`,{appName:t,deviceId:e.id})}async function u(e,t,a){let o=r(t);n(await i().pressRemote(e.id,o,a,{allowFailure:!0,timeoutMs:1e4+(a??0)}),`Failed to press Vega TV remote ${t}`,{button:t,deviceId:e.id})}const d=[{matches:(e,n)=>t(e)||!!n?.url,message:`Vega open does not support URLs or deep links.`,hint:`Use open <component-id> with an installed Vega app component ID.`},{matches:(e,t)=>!!t?.activity,message:`Vega open does not support Android activity selection.`,hint:`Remove --activity and use the Vega component ID as the open target.`},{matches:(e,t)=>!!t?.launchConsole,message:`Vega open does not support launch-console output.`,hint:`Remove --launch-console and open the Vega component ID directly.`},{matches:(e,t)=>!!t?.terminateRunningApp,message:`Vega open does not support terminating the running app before launch.`,hint:`Close the Vega component explicitly before opening it again.`},{matches:(e,t)=>!!t?.launchArgs?.length,message:`Vega open does not support launch arguments.`,hint:`Remove --launch-arg values and open the Vega component ID directly.`}];function f(e,t){return{...a(`Vega OS`),open:async(t,n)=>{p(t,n),await s(e,t)},openDevice:()=>c(e),close:t=>l(e,t),back:()=>u(e,`back`),home:()=>u(e,`home`),tvRemote:(t,n)=>u(e,t,n)}}function p(t,n){let r=d.find(({matches:e})=>e(t,n));if(r)throw new e(`UNSUPPORTED_OPERATION`,r.message,{hint:r.hint})}export{f as createVegaInteractor};
|
package/dist/src/interactors.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";import{D as t}from"./sdk-contracts.js";import{y as n}from"./sdk-device.js";import{n as r,t as i}from"./register-builtins.js";import{AsyncLocalStorage as a}from"node:async_hooks";let o=[];const s=new a;async function c(e,t){return await s.run([...e],t)}function l(e,t){for(let n of d()){if(!n.ownsDevice(e))continue;let r=n.getInteractor(e,t);if(r)return r}}function u(e){return d().some(t=>t.ownsDevice(e))}function d(){return s.getStore()??o}function f(e,t={}){C(e);let n=e.map(e=>e.provider);return{providerRuntimes:Object.freeze([...e]),providerRuntimeIds:n,providerRuntimeRequiredIds:v([...n,...t.providerRuntimeRequiredIds??[]]),leaseLifecycleProvider:y(e),recoverableProviderIds:e.filter(e=>e.recoverExpiredLease!==void 0).map(e=>e.provider),recoverExpiredLease:_(e),cloudArtifactProvider:b(e),providerAppCatalog:x(e),deviceInventorySource:S(e),appleRunnerProvider:m(e),appleRunnerScreenRecordingTransport:p(e),providerDeviceRuntimeScope:async t=>await c(e,t)}}function p(e){if(e.some(g))return t=>{for(let n of e){if(!g(n)||!n.ownsDevice(t.device))continue;let e=n.getAppleRunnerScreenRecordingTransport(t.device);if(e)return e}}}function m(e){if(e.some(h))return t=>{for(let n of e){if(!h(n)||!n.ownsDevice(t.device))continue;let e=n.getAppleRunnerProvider(t.device);if(e)return e}}}function h(e){return`getAppleRunnerProvider`in e&&typeof e.getAppleRunnerProvider==`function`}function g(e){return`getAppleRunnerScreenRecordingTransport`in e&&typeof e.getAppleRunnerScreenRecordingTransport==`function`}function _(e){if(e.some(e=>e.recoverExpiredLease!==void 0))return async n=>{let r=e.find(e=>E(e,n.leaseProvider));if(!r?.recoverExpiredLease)throw new t(`UNSUPPORTED_OPERATION`,`Provider ${n.leaseProvider??`unknown`} cannot recover an expired lease.`,{provider:n.leaseProvider,leaseId:n.leaseId});await r.recoverExpiredLease(n)}}function v(e){return[...new Set(e)]}function y(e){if(e.length!==0)return{allocate:async(t,n)=>await T(e,`allocate`,t,n),heartbeat:async(t,n)=>await T(e,`heartbeat`,t,n),release:async(t,n)=>await T(e,`release`,t,n)}}function b(e){if(e.length!==0)return{listCloudArtifacts:async t=>await w(e,t)}}function x(e){let n=e.filter(e=>e.appCatalog!==void 0);if(n.length!==0)return{supports:e=>n.some(t=>E(t,e)),list:async(e,r)=>{let i=n.find(t=>E(t,e.provider));if(!i?.appCatalog)throw new t(`UNSUPPORTED_OPERATION`,`Provider ${e.provider} does not expose an app catalog.`,{provider:e.provider});return await i.appCatalog(e,r)}}}function S(e){if(e.length!==0)return{discover:async(t,n)=>{n.throwIfAborted();for(let r of e){if(!E(r,t.leaseProvider))continue;let e=await r.deviceInventoryProvider(t,n);if(n.throwIfAborted(),e!=null)return{kind:`inventory`,devices:e}}return{kind:`declined`}}}}function C(e){let t=new Set;for(let n of e){if(t.has(n.provider))throw TypeError(`Duplicate provider device runtime: ${n.provider}`);t.add(n.provider)}}async function w(e,t){for(let n of e){if(!E(n,t.provider))continue;let e=await n.cloudArtifacts?.listCloudArtifacts?.(t);if(e)return e}}async function T(e,t,n,r){for(let i of e){if(!E(i,n.leaseProvider))continue;let e=i.leaseLifecycle[t],a=e?await e(n,r):void 0;if(a)return a}}function E(e,t){return e.provider===t}var D=e({getInteractor:()=>O,getLocalInteractor:()=>k});i();async function O(e,r){if(u(e)){let i=l(e,r);if(i)return i;throw new t(`UNSUPPORTED_OPERATION`,`Provider device runtime does not have an active interactor for this device.`,{deviceId:e.id,platform:n(e)})}return await k(e,r)}async function k(e,t){return await r(e.platform).createInteractor(e,t)}export{u as i,D as n,f as r,O as t};
|
package/dist/src/internal/bin.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
async function e(e,n,r){try{await t(e,n,r)}catch(e){r.stderr(`${e instanceof Error?e.message:String(e)}\n`),await(await n.processExit()).exitAfterFlush(1)}}async function t(e,t,l){if(e.length===0)return await n(t,l);if(o(e))return await r(t,l);let u=c(e);if(u!==void 0)return await i(u,e,t,l);if(s(e))return await(await t.mcp()).runAgentDeviceMcpServer();await a(e,t)}async function n(e,t){t.stdout(`${(await e.help()).buildUsageText()}\n`),await(await e.processExit()).exitAfterFlush(1)}async function r(e,t){t.stdout(`${t.bundledVersion??(await e.version()).readVersion()}\n`)}async function i(e,t,n,r){let i=await n.help(),o=e===null?`${i.buildUsageText()}\n`:i.resolveHelpTargetUsageText(e);if(o===null)return await a(t,n);r.stdout(o)}async function a(e,t){await(await t.cli()).runCliProcess(e)}function o(e){return e.length===1&&(e[0]===`--version`||e[0]===`-V`)}function s(e){return e[0]===`mcp`&&!e.some(l)}function c(e){let[t,n]=e;if(e.length===1)return t===`help`||l(t)?null:void 0;if(e.length===2)return t===`help`?n:l(n)?t:void 0}function l(e){return e===`--help`||e===`-h`}e(process.argv.slice(2),{help:()=>import(`../cli-help.js`).then(e=>e.n),cli:()=>import(`../process-entry.js`),mcp:()=>import(`../server.js`),version:()=>import(`../version.js`).then(e=>e.t),processExit:()=>import(`../process-exit.js`)},{bundledVersion:`0.21.
|
|
1
|
+
async function e(e,n,r){try{await t(e,n,r)}catch(e){r.stderr(`${e instanceof Error?e.message:String(e)}\n`),await(await n.processExit()).exitAfterFlush(1)}}async function t(e,t,l){if(e.length===0)return await n(t,l);if(o(e))return await r(t,l);let u=c(e);if(u!==void 0)return await i(u,e,t,l);if(s(e))return await(await t.mcp()).runAgentDeviceMcpServer();await a(e,t)}async function n(e,t){t.stdout(`${(await e.help()).buildUsageText()}\n`),await(await e.processExit()).exitAfterFlush(1)}async function r(e,t){t.stdout(`${t.bundledVersion??(await e.version()).readVersion()}\n`)}async function i(e,t,n,r){let i=await n.help(),o=e===null?`${i.buildUsageText()}\n`:i.resolveHelpTargetUsageText(e);if(o===null)return await a(t,n);r.stdout(o)}async function a(e,t){await(await t.cli()).runCliProcess(e)}function o(e){return e.length===1&&(e[0]===`--version`||e[0]===`-V`)}function s(e){return e[0]===`mcp`&&!e.some(l)}function c(e){let[t,n]=e;if(e.length===1)return t===`help`||l(t)?null:void 0;if(e.length===2)return t===`help`?n:l(n)?t:void 0}function l(e){return e===`--help`||e===`-h`}e(process.argv.slice(2),{help:()=>import(`../cli-help.js`).then(e=>e.n),cli:()=>import(`../process-entry.js`),mcp:()=>import(`../server.js`),version:()=>import(`../version.js`).then(e=>e.t),processExit:()=>import(`../process-exit.js`)},{bundledVersion:`0.21.7`,stdout:e=>{process.stdout.write(e)},stderr:e=>{process.stderr.write(e)}}).catch(()=>process.exit(1));export{};
|