agent-device 0.21.20 → 0.21.21
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.20.apk → agent-device-android-ime-helper-0.21.21.apk} +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.21.apk.sha256 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.20.manifest.json → agent-device-android-ime-helper-0.21.21.manifest.json} +4 -4
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.21.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.21.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.20.manifest.json → agent-device-android-snapshot-helper-0.21.21.manifest.json} +6 -6
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/AppWindowScreenshot.swift +73 -0
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/BackgroundInteraction.swift +557 -0
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/GhostCursor.swift +141 -0
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/SnapshotTraversal.swift +107 -3
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/main.swift +136 -22
- package/apple/macos-helper/Tests/AgentDeviceMacOSHelperTests/BackgroundInteractionTests.swift +88 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +121 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.h +10 -2
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.m +36 -9
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +28 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +27 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedCommitDeadline.swift +6 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedGesturePolicy.swift +7 -2
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift +21 -7
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +121 -17
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +179 -6
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryConfirmation.swift +119 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +8 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryReadiness.swift +23 -11
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextInputProbe.swift +59 -6
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +112 -23
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TypeExecution.swift +25 -12
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/RecordingExportSupport.swift +6 -1
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-overlay.swift +43 -13
- 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 -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/alert.js +1 -1
- package/dist/src/android-adb.d.ts +12 -0
- package/dist/src/android-input-ownership.js +1 -1
- package/dist/src/app-backend.js +1 -0
- package/dist/src/app-catalog.js +1 -1
- package/dist/src/app-deployment-resolution.js +1 -1
- package/dist/src/app-inventory.js +1 -1
- package/dist/src/app-launch.js +1 -1
- package/dist/src/app-lifecycle.js +2 -2
- package/dist/src/app-lifecycle2.js +1 -1
- 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-log-session-resource.js +1 -0
- package/dist/src/app-resolution.js +2 -2
- package/dist/src/apple-runner-platform.js +1 -1
- package/dist/src/application-lifecycle-interaction.js +1 -1
- package/dist/src/archive.js +2 -2
- 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/cache.js +1 -1
- package/dist/src/capabilities.js +1 -1
- package/dist/src/capture.js +1 -1
- package/dist/src/cli-config.js +1 -1
- package/dist/src/cli-help.js +13 -5
- package/dist/src/cli.js +4 -4
- package/dist/src/click-button.js +1 -1
- package/dist/src/client-metro-companion.js +1 -1
- package/dist/src/client-metro.js +1 -1
- package/dist/src/client-options.js +3 -0
- package/dist/src/client-types.d.ts +88 -5
- package/dist/src/clipboard-shell-response.js +1 -1
- package/dist/src/cloud-artifacts.d.ts +7 -2
- package/dist/src/code-signature-cache.js +1 -1
- package/dist/src/code-signature.js +1 -1
- package/dist/src/command-schema.js +1 -1
- package/dist/src/command-tools.js +2 -2
- package/dist/src/connection-runtime.js +1 -1
- package/dist/src/connection.js +5 -5
- package/dist/src/contracts.d.ts +1 -1
- package/dist/src/contracts.js +1 -1
- package/dist/src/daemon-artifacts.js +1 -0
- package/dist/src/daemon-client-lease-beat.js +1 -1
- package/dist/src/daemon-client-lifecycle.js +1 -1
- package/dist/src/daemon-client-liveness-probe.js +1 -0
- package/dist/src/daemon-client-transport.js +1 -1
- package/dist/src/daemon-http.js +1 -0
- package/dist/src/daemon-policy-file.js +1 -1
- package/dist/src/daemon-registration-owner.js +1 -0
- package/dist/src/daemon-registration.js +1 -1
- package/dist/src/daemon-resolution.js +1 -1
- package/dist/src/daemon-shutdown-report.js +1 -1
- package/dist/src/daemon.js +2 -2
- package/dist/src/debug-symbols-facade.js +1 -1
- package/dist/src/device-claim-inspection.js +1 -1
- package/dist/src/device-claim-rule.js +1 -1
- package/dist/src/device-inventory-context.js +1 -1
- package/dist/src/device-readiness-runtime.js +1 -1
- package/dist/src/device-release.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 -1
- package/dist/src/device.js +1 -1
- package/dist/src/device2.js +1 -3
- package/dist/src/device3.js +3 -0
- package/dist/src/devicectl.js +1 -1
- package/dist/src/diagnostics.js +3 -3
- package/dist/src/dispatch-resolve.js +4 -1
- package/dist/src/display-inventory.js +1 -1
- package/dist/src/doctor-facade.js +1 -1
- package/dist/src/doctor2.js +1 -1
- package/dist/src/durable-capture-resource.js +1 -0
- 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/generic-settle.js +1 -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 +2 -2
- package/dist/src/host-file.js +1 -1
- package/dist/src/host.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 +2 -2
- package/dist/src/install-artifact-facade.js +1 -1
- package/dist/src/install-source-network-transport.js +1 -1
- package/dist/src/install-source.d.ts +5 -0
- package/dist/src/install-source2.js +1 -1
- package/dist/src/instance-client.js +1 -0
- 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-binding.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 +1 -2
- package/dist/src/internal/png-worker.js +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 +1 -1
- package/dist/src/inventory5.js +1 -1
- package/dist/src/ios-client.js +4 -30
- package/dist/src/ios-settings.js +1 -0
- package/dist/src/ios-snapshot-engine.js +1 -1
- package/dist/src/ios-snapshot-runtime.js +1 -1
- package/dist/src/launch-confirmation.js +1 -1
- package/dist/src/lease-context.js +1 -1
- package/dist/src/lease-registry-scope.js +1 -0
- package/dist/src/lease-scope.js +1 -1
- package/dist/src/lease.js +1 -1
- package/dist/src/legacy-xctest-device-set.js +1 -1
- package/dist/src/limrun-download-file.js +1 -1
- package/dist/src/limrun-runtime-dependencies.js +1 -1
- package/dist/src/limrun.d.ts +28 -2
- package/dist/src/limrun.js +1 -1
- package/dist/src/linux.js +1 -1
- package/dist/src/load.js +1 -0
- package/dist/src/location-coordinates.js +1 -1
- package/dist/src/macos-facade.js +1 -1
- package/dist/src/managed-device-scope.js +1 -1
- package/dist/src/mechanics.js +16 -16
- package/dist/src/observation.js +1 -1
- package/dist/src/observe-until.js +1 -1
- package/dist/src/overlay.js +2 -2
- package/dist/src/owner-identity.js +3 -3
- package/dist/src/path-resolution.js +1 -1
- package/dist/src/perf-facade.js +1 -1
- package/dist/src/perf-runtime-operation-builder.js +1 -1
- package/dist/src/perf-runtime-plan.js +1 -1
- package/dist/src/perf-target.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-app-log-process.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 +2 -2
- 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-finalizer-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-output-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/plugins.d.ts +9 -0
- package/dist/src/plugins.js +1 -0
- package/dist/src/plugins2.js +2 -0
- package/dist/src/png-crop-bytes.js +1 -1
- package/dist/src/png-size.js +1 -1
- package/dist/src/png-worker-client.js +1 -1
- package/dist/src/png.js +1 -1
- package/dist/src/prepare-kind.js +1 -1
- package/dist/src/process.js +1 -1
- package/dist/src/project-runtime.js +1 -1
- package/dist/src/provider-credential-fingerprint.js +1 -0
- package/dist/src/provider-device-admission.js +1 -1
- package/dist/src/provider-device-runtimes.js +1 -0
- package/dist/src/provider-limrun-credentials.js +1 -0
- package/dist/src/provider-profile-fields.js +1 -0
- package/dist/src/provider-session-ownership.js +2 -2
- package/dist/src/provider-webdriver.js +2 -1
- package/dist/src/providers.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/recording.js +1 -1
- package/dist/src/rect-center.js +1 -1
- package/dist/src/register-builtins.js +1 -1
- package/dist/src/registry.js +39 -39
- 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 +5 -5
- package/dist/src/request-admission.js +1 -1
- package/dist/src/request-cancel.js +1 -1
- package/dist/src/request-cancellation.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-artifact-manifest.js +1 -1
- package/dist/src/runner-cache-metadata.js +3 -3
- package/dist/src/runner-client.js +1 -1
- package/dist/src/runner-dev-tools-security.js +1 -1
- package/dist/src/runner-device-readiness.js +1 -1
- package/dist/src/runner-disposal.js +1 -1
- package/dist/src/runner-error-classification.js +2 -2
- package/dist/src/runner-exchange.js +1 -1
- package/dist/src/runner-operations-facade.js +1 -1
- package/dist/src/runner-session-types.js +1 -1
- package/dist/src/runner-start-budget.js +1 -1
- package/dist/src/runner.js +1 -1
- package/dist/src/runtime-admission.js +1 -1
- package/dist/src/runtime-transport-hints.js +1 -1
- package/dist/src/runtime.js +1 -1
- package/dist/src/runtime10.js +2 -2
- package/dist/src/runtime2.js +3 -3
- 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 -1
- 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 -1
- package/dist/src/screenshot-density.js +1 -1
- package/dist/src/screenshot-image.js +1 -1
- package/dist/src/screenshot-result.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 +45 -2
- package/dist/src/sdk-contracts.js +2 -2
- package/dist/src/sdk-device.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 +33 -4
- package/dist/src/selection.js +0 -0
- package/dist/src/selector-runtime.js +1 -1
- package/dist/src/selectors.d.ts +2 -2
- package/dist/src/selectors.js +1 -1
- package/dist/src/server.js +1 -1
- package/dist/src/session-allocation.js +1 -1
- package/dist/src/session-artifact-paths.js +1 -1
- package/dist/src/session-repair-tombstone.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-stream.js +27 -0
- package/dist/src/session.js +1 -1
- package/dist/src/session2.js +5 -5
- package/dist/src/settings.js +1 -1
- package/dist/src/settings2.js +1 -1
- package/dist/src/simctl-settings-facade.js +1 -0
- package/dist/src/simctl-settings.js +1 -0
- package/dist/src/simctl.js +1 -1
- package/dist/src/simulator.js +1 -1
- package/dist/src/snapshot-diagnostics.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/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/src7.js +1 -1
- package/dist/src/src8.js +2 -2
- package/dist/src/store.js +1 -0
- package/dist/src/string-enum.js +1 -1
- package/dist/src/surface-snapshot.js +1 -1
- package/dist/src/takeover.js +1 -1
- package/dist/src/target-evidence.js +1 -1
- package/dist/src/telemetry.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/toolchain-probe.js +2 -2
- package/dist/src/touch-runtime.js +1 -1
- package/dist/src/touch-runtime2.js +1 -1
- package/dist/src/transport.js +2 -2
- package/dist/src/tv-remote.js +1 -1
- package/dist/src/type-text-runtime.js +1 -1
- package/dist/src/update-check.js +1 -1
- package/dist/src/vars.js +1 -1
- package/dist/src/verified-file.js +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/video.js +1 -1
- 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/package.json +5 -1
- package/server.json +2 -2
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.20.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.20.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.20.apk.sha256 +0 -1
- package/dist/src/api.js +0 -3
- package/dist/src/daemon-process.js +0 -1
- package/dist/src/multitouch-support.js +0 -1
- package/dist/src/parameterized-recorded-fill.js +0 -1
- package/dist/src/runner-startup-transport.js +0 -1
- package/dist/src/runner-xctestrun.js +0 -1
- package/dist/src/session-store.js +0 -4
package/dist/src/interaction2.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{N as e,P as t,Y as n,d as r,j as i,m as a,o,q as s}from"./sdk-contracts.js";import{p as c}from"./sdk-batch-runner.js";import{C as l,m as u}from"./sdk-device.js";import{g as d,h as f,m as p,w as ee}from"./sdk-batch.js";import{c as te,o as ne}from"./scroll-gesture.js";import{C as re,E as ie,S as ae,v as oe,x as m}from"./script.js";import{c as se}from"./target-evidence.js";import{N as ce,d as h}from"./parameterized-recorded-fill.js";import{S as le,v as g}from"./runtime.js";import{n as _}from"./catalog.js";import{r as ue}from"./success-text.js";import{i as v,n as de,r as fe}from"./click-button.js";import{r as pe,t as me}from"./interaction-positionals.js";import{r as y}from"./diagnostics.js";import{t as he}from"./timeouts.js";import"./diagnostics2.js";import"./retry.js";import"./gesture-plan.js";import{r as ge}from"./request-cancel.js";import"./request.js";import{n as _e}from"./provider-device-admission.js";import{E as ve,O as ye,j as b,n as be,r as x,t as S}from"./session-snapshot.js";import{n as C,t as w}from"./touch-reference-frame.js";import{c as xe,s as Se}from"./quality-warnings.js";import{a as T,n as Ce,o as we,t as E}from"./internal/daemon.js";import{a as D,c as Te,i as O,l as Ee,n as k,o as A,r as j,s as De,t as Oe}from"./interaction-ref-policy.js";import{n as ke,t as Ae}from"./touch-runtime2.js";import{t as M}from"./gesture-runtime.js";import{d as je,g as N,i as Me,r as Ne,u as Pe}from"./selector-runtime.js";import{n as Fe}from"./type-text-runtime.js";function Ie(t){let n=t.flags?.recordAs;if(n!==void 0){if(ce(n),t.flags?.noRecord)throw new e(`INVALID_ARGS`,`fill --record-as cannot be combined with --no-record because no script step would be published.`);if(!t.isSessionRecording&&!t.replayPlanStep)throw new e(`INVALID_ARGS`,`fill --record-as requires an armed script recording. Start a fresh session with open --save-script, then retry the fill.`)}}async function P(e,t){if(!ve(t))return;let n=t.snapshot?.comparisonSafe===!0?t.snapshot:void 0;try{await e.captureSnapshotForSession(t,e.req.flags,e.sessionStore,e.contextFromFlags,{interactiveOnly:!0,androidFreshnessMode:`ref-refresh`})}catch(t){y({level:`warn`,phase:`android_ref_snapshot_refresh_failed`,data:{command:e.req.command,error:t instanceof Error?t.message:String(t)}})}return n}function F(e,t){return!u(e.device)||e.surface!==`desktop`&&e.surface!==`menubar`||e.surface===`menubar`&&(t===`click`||t===`press`)?null:o(`UNSUPPORTED_OPERATION`,`${t} is not supported on macOS ${e.surface} sessions yet. Open an app session to act, or use the ${e.surface} surface to inspect.`)}const Le=new Set(d()),Re=new Set([`currentUptimeMs`,`gestureEndUptimeMs`,`gestureStartUptimeMs`,`sequenceResults`]);function I(e){if(e)return Object.fromEntries(Object.entries(e).filter(([e])=>!Re.has(e)))}function ze(e){return Ve({fields:Be(e.command),input:e.input??{},data:I(e.data),controlledFields:Le})}function Be(e){let t=ee(e);if(!t)throw Error(`Missing response data transform descriptor for ${e}`);return t.fields}function Ve(e){let t=Object.fromEntries(Object.entries(e.data??{}).filter(([t])=>!e.controlledFields.has(t)));for(let[n,r]of Object.entries(e.fields)){let i=e.input[n]===void 0?r.defaultValue:e.input[n];if(i===void 0||r.omitDefault===!0&&i===r.defaultValue){delete t[n];continue}t[n]=i}return Object.fromEntries(Object.entries(t).filter(([,e])=>e!==void 0))}async function He(e){let{session:t,flags:n,sessionStore:r,contextFromFlags:i,captureSnapshotForSession:a,observation:o}=e,s=t.screenRecording?.handle;if(!s)return;let c=s.inspect().touchReferenceFrame;if(c)return c;if(t.device.platform===`android`&&!t.lease?.leaseProvider&&!_e(t.device)){if(!o)throw Error(`Android observation was not injected into the request`);let e=await o.readScreenSize(t.device),n={referenceWidth:e.width,referenceHeight:e.height};return s.setTouchReferenceFrame(n),n}let l=w(t.snapshot);if(l)return s.setTouchReferenceFrame(l),l;let u=await a(t,n,r,i,{interactiveOnly:!0}),d=w(u);return d&&s.setTouchReferenceFrame(d),d}async function Ue(e){try{return await He(e)}catch(t){y({level:`warn`,phase:`touch_reference_frame_resolve_failed`,data:{platform:e.session.device.platform,error:t instanceof Error?t.message:String(t)}});return}}function L(e){let{data:t,fallbackX:n,fallbackY:r,referenceFrame:i,extra:a}=e,o=Ge(a,n,r)??(typeof t?.message==`string`?t.message:void 0);return We({...t??{},...n===void 0||r===void 0?{}:{x:n,y:r},...i??{},...a??{},...ue(o)})}function We(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function Ge(e,t,n){let r=R(e,`text`);if(r!==void 0)return`Filled ${Array.from(r).length} chars`;let i=Ke(t,n),a=qe(e);if(a)return Ye(a,e??{},i);if(i)return Je(e,i)}function R(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function Ke(e,t){return e===void 0||t===void 0?``:` (${e}, ${t})`}function qe(e){let t=R(e,`ref`);return t===void 0?R(e,`selector`):`@${t}`}function Je(e,t){return e?.gesture===`longpress`?`Long pressed${t}`:e?.gesture===`hover`?`Hovered${t}`:`Tapped${t}`}function Ye(e,t,n){let r=typeof t.button==`string`?t.button:void 0;return t.gesture===`longpress`?`Long pressed ${e}${n}`:t.gesture===`hover`?`Hovered ${e}${n}`:r&&r!==`primary`?`Clicked ${r} ${e}${n}`:`Tapped ${e}${n}`}function z(e){if(e.length<2)return null;let t=Number(e[0]),n=Number(e[1]);return!Number.isFinite(t)||!Number.isFinite(n)?null:{x:t,y:n}}function B(e,t){let n=z(e);if(n)return{ok:!0,target:{kind:`point`,x:n.x,y:n.y}};let r=e[0]??``;if(r.startsWith(`@`)){let t=N(r);return t.ok?{ok:!0,target:{kind:`ref`,ref:t.ref,fallbackLabel:e.slice(1).join(` `).trim()},refGeneration:t.generation}:{ok:!1,response:t.response}}let i=e.join(` `).trim();return i?{ok:!0,target:{kind:`selector`,selector:i}}:{ok:!1,response:o(`INVALID_ARGS`,`${t} requires @ref, selector expression, or x y coordinates`)}}function Xe(e){let t=z(e);if(t)return{ok:!0,target:{kind:`point`,x:t.x,y:t.y},...nt(e[2])};let n=tt(e),r=B(n.targetPositionals,`longpress`);return r.ok?{ok:!0,target:r.target,refGeneration:r.refGeneration,...n.duration}:r}function V(e){return{ok:!1,response:o(`INVALID_ARGS`,`fill requires text after ${e} (use "" to clear the field)`)}}function Ze(e){let t=Qe(e);if(!t)return{ok:!1,response:o(`INVALID_ARGS`,`fill requires x y text, @ref text, or selector text`)};switch(t.kind){case`ref`:{let n=N(e[0]??``);return n.ok?t.text===void 0?V(`ref`):{ok:!0,target:{kind:`ref`,ref:n.ref},refGeneration:n.generation,text:t.text}:{ok:!1,response:n.response}}case`point`:return t.text===void 0?V(`coordinates`):{ok:!0,target:{kind:`point`,x:t.target.x,y:t.target.y},text:t.text};case`selector`:return t.text===void 0||t.text.length>0&&!t.text.trim()?V(`selector`):{ok:!0,target:{kind:`selector`,selector:t.target.selector},text:t.text}}}function Qe(e){try{return me(e)}catch{return null}}function $e(e){let t=`evidence`in e?e.evidence:void 0,n=e.settle;return e.kind===`ref`?{ref:pe(e.target?.kind===`ref`?e.target.ref:void 0),refLabel:e.refLabel,selectorChain:e.selectorChain,targetHittable:e.targetHittable,hint:e.hint,evidence:t,settle:n,resolution:e.resolution}:e.kind===`selector`?{selector:e.target?.kind===`selector`?e.target.selector:void 0,selectorChain:e.selectorChain,refLabel:e.refLabel,targetHittable:e.targetHittable,hint:e.hint,evidence:t,settle:n,resolution:e.resolution}:{evidence:t,settle:n}}function et(e,t){return e.kind===`point`?`coordinate tap`:t.kind===`ref`&&t.target?.kind===`ref`?t.target.ref:t.kind===`selector`&&t.target?.kind===`selector`?t.target.selector:`target`}function tt(e){let t=e.at(-1);return e.length>1&&rt(t)?{targetPositionals:e.slice(0,-1),duration:{durationMs:Number(t)}}:{targetPositionals:e,duration:{}}}function nt(e){return e===void 0?{}:{durationMs:Number(e)}}function rt(e){return e===void 0||e.trim()===``?!1:Number.isFinite(Number(e))}const it={source:`direct-ios`,kind:`not-observed`};function H(e,t){if(!at(e))return t;let{resolution:n,...r}=t;return r}function at(e){return`dispatchPath`in e&&e.dispatchPath===`maestro-non-hittable-fallback`}function U(e){return W({source:{kind:`corroborated-tap`,targetKind:e.targetKind,data:{warning:e.warning},publicData:{warning:e.warning},point:e.point,resolution:e.resolution},referenceFrame:e.referenceFrame,extra:e.extra})}function W(e){let{source:t,referenceFrame:n,extra:r}=e;if(t.kind===`runner-payload`||t.kind===`corroborated-tap`){let e={targetKind:t.targetKind,...H(t,{resolution:t.kind===`runner-payload`?it:t.resolution}),...r??{}};return{result:L({data:t.data,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e}),responseData:L({data:t.publicData,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e})}}let{result:i}=t,a={targetKind:i.kind,...H(t,$e(i)),...ct(i.settle,e.settleRefsGeneration),...r??{}},o=L({data:i.backendResult,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:{...a,...st(i)}}),s=L({data:t.publicData,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:a}),c=lt(`warning`in i?i.warning:void 0,e.staleRefsWarning);return c&&(o.warning=c,s.warning=c),`readiness`in i&&i.readiness&&(s.readiness=i.readiness),{result:o,responseData:s,...ot(i)}}function ot(e){let t=G(e)?.node??(`node`in e?e.node:void 0),n=`preAction`in e?e.preAction?.nodes:void 0;return t&&n?{recordedTarget:{node:t,preActionNodes:n}}:{}}function st(e){let t=G(e);return t?{selectorChain:t.selectorChain,refLabel:t.refLabel}:{}}function G(e){return`recordingTarget`in e?e.recordingTarget:void 0}function ct(e,t){return!e?.diff||t===void 0?{}:{settle:{...e,refsGeneration:t}}}function lt(e,t){return t?e?`${e} ${t}`:t:e}async function ut(e){let{params:t,session:n,result:r,publicData:i,extra:a}=e,o=r.kind===`point`?await Ue({session:n,flags:t.req.flags,sessionStore:t.sessionStore,contextFromFlags:t.contextFromFlags,captureSnapshotForSession:t.captureSnapshotForSession,observation:t.androidObservation}):C(n.snapshot?.nodes??[]);return W({source:{kind:`runtime`,result:r,publicData:i},referenceFrame:o,extra:a,staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:S(n,r.settle)})}function K(e){return e.command?ze({command:e.command,input:e.flags,data:e.data}):I(e.data)}function dt(e,t){return e===`click`||e===`press`||e===`fill`?e:t}function q(e,t){if(!e)return{used:!1,extra:{}};let n=t?.maestroNonHittableCoordinateFallbackUsed===!0;return{used:n,extra:{maestroNonHittableCoordinateFallbackAllowed:!0,maestroNonHittableCoordinateFallbackUsed:n,...n?{maestroFallbackReason:`non-hittable-coordinate`}:{}}}}function ft(t){let{error:r,snapshotGeneration:i,publishPartialRefs:a}=t;if(r.code!==`AMBIGUOUS_MATCH`)return r;let o=n(r.details);return o.length===0||i===void 0?r:(a(o),new e(r.code,r.message,{...r.details,refsGeneration:i},r.cause))}async function pt(t,n,r){let i=await Pe(t,r);if(i){if(i.permissionDialog)return`press ${n} opened an Android permission dialog (${i.foregroundPackage}) over ${i.expectedPackage}. ${i.hint}`;throw new e(`COMMAND_FAILED`,`press ${n} left ${t.appBundleId} and foregrounded ${i.foregroundPackage}. The tap likely escaped the app.`,i)}}function mt(e){return e.code===`COMMAND_FAILED`&&typeof e.details?.expectedPackage==`string`&&typeof e.details?.foregroundPackage==`string`}async function J(e){if(!ht(e))return;let t=_t(e.session.snapshot);if(!t)return;let n=await vt(e,t.snapshot.snapshotQuality,t.presentation);if(!(!n||!yt(t.snapshot,n,e.command)))return St(t.snapshot,n,e.command)}function ht(e){return gt(e.command)&&t(e.error).code===`XCTEST_RECORDED_FAILURE`&&Te(e.session,{skipPendingPostGestureStabilization:!1})}function gt(e){return e===`click`||e===`press`}function _t(e){if(!Y(e))return;let t=Date.now()-e.createdAt;if(t<0||t>15e3){y({level:`debug`,phase:`ios_tap_failure_corroboration_stale_baseline`,data:{ageMs:t}});return}let n=Ct(e.presentationKey);if(n){if(n.raw){y({level:`debug`,phase:`ios_tap_failure_corroboration_raw_baseline`,data:{presentationKey:e.presentationKey}});return}return{snapshot:e,presentation:n}}}async function vt(e,t,n){try{let r=xe(t);return await e.captureSnapshotForSession(e.session,Ot(e.flags,n),e.sessionStore,e.contextFromFlags,{interactiveOnly:n?.interactiveOnly??!0,...r?{preferredBackend:r}:{},signal:ge(e.requestId)})}catch(t){y({level:`debug`,phase:`ios_tap_failure_corroboration_capture_failed`,data:{command:e.command,error:t instanceof Error?t.message:String(t)}});return}}function yt(e,t,n){let r=bt(e,t);return r===void 0?xt(e,t,n):r?!0:(y({level:`debug`,phase:`ios_tap_failure_corroboration_identity_mismatch`,data:{command:n}}),!1)}function bt(e,t){if(e.comparisonKey!==void 0||t.comparisonKey!==void 0)return e.comparisonKey!==void 0&&e.comparisonKey===t.comparisonKey}function xt(e,t,n){let r=e.snapshotQuality?.backend,i=t.snapshotQuality?.backend;return!r||r!==i?(y({level:`debug`,phase:`ios_tap_failure_corroboration_backend_mismatch`,data:{command:n,baselineBackend:r,afterBackend:i}}),!1):e.presentationKey===t.presentationKey||(y({level:`debug`,phase:`ios_tap_failure_corroboration_scope_mismatch`,data:{command:n,baselinePresentationKey:e.presentationKey,afterPresentationKey:t.presentationKey}}),!1)}function St(e,t,n){if(!Y(t))return;let r=g(e.nodes),i=g(t.nodes);if(r.digest!==i.digest)return y({level:`warn`,phase:`ios_tap_failure_corroborated`,data:{command:n,beforeNodeCount:r.nodeCount,afterNodeCount:i.nodeCount}}),{warning:`XCTest reported the tap as failed, but a same-scope post-action accessibility capture changed; treating the tap as landed. Observe the current screen before issuing another tap.`}}function Y(e){return!!(e&&e.nodes.length>0&&!Se(e.snapshotQuality))}function Ct(e){if(!e)return;let t;try{t=JSON.parse(e)}catch{return}return wt(t)}function wt(e){let t=Tt(e);if(!(!t||typeof t.interactiveOnly!=`boolean`||typeof t.raw!=`boolean`)&&!(!Et(t.depth)||!Dt(t.scope)))return{interactiveOnly:t.interactiveOnly,...typeof t.depth==`number`?{depth:t.depth}:{},...typeof t.scope==`string`?{scope:t.scope}:{},raw:t.raw}}function Tt(e){return typeof e==`object`&&e?e:void 0}function Et(e){return e==null||typeof e==`number`}function Dt(e){return e==null||typeof e==`string`}function Ot(e,t){if(!(!e&&!t))return{...e??{},out:void 0,...t?{snapshotDepth:t.depth,snapshotScope:t.scope,snapshotRaw:t.raw}:{}}}function kt(e){return e.kind===`selector`?{selector:e.selector}:e.kind===`ref`?{ref:e.ref.startsWith(`@`)?e.ref.slice(1):e.ref}:{}}async function At(e,t,n,r,i){if(e.lease?.leaseProvider)return{aborted:!1,readiness:{status:`clear`},runtimeResult:await r()};let a=await T({session:e,command:t,phase:`before-command`,observation:i});if(n.refContext&&a.status===`recovered`){let t=k({ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration,staleRefsWarning:n.refContext.staleRefsWarning,frame:b({session:e,ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration})});if(t)return{aborted:!0,response:t}}let o=await r();return await T({session:e,command:t,phase:`after-command`,observation:i}),{aborted:!1,readiness:a,runtimeResult:o}}async function X(e,n){let i=e.sessionStore.get(e.sessionName);if(!i)return r();let a=D({...e,touchExecutor:n.touchExecutor}),o=Date.now();try{let t,r=await At(i,e.req.command,{refContext:n.refContext},async()=>{let e=await n.run(a);return t=await n.afterRun?.(e),e},e.androidObservation);if(r.aborted)return r.response;let{readiness:s,runtimeResult:c}=r,l=Date.now(),{result:u,responseData:d,recordedTarget:f}=await n.buildPayloads(c),p=[...s.status===`recovered`?[s.warning]:[],...t?[t]:[]];if(p.length>0){let e=[...typeof d.warning==`string`?[d.warning]:[],...p].join(` `);u.warning=e,d.warning=e}return A({session:i,sessionStore:e.sessionStore,command:e.req.command,positionals:e.req.positionals??[],flags:e.req.flags,result:u,responseData:d,recordedTarget:f,actionStartedAt:o,actionFinishedAt:l,androidFreshnessBaseline:n.androidFreshnessBaseline})}catch(r){let a=ft({error:t(r),snapshotGeneration:i.snapshotGeneration,publishPartialRefs:e=>be(i,e)});if(mt(a))throw a;return a.code===`AMBIGUOUS_MATCH`?Z(a):await jt({error:a,handlerParams:e,session:i,target:n.iosTapCorroboration?.target,extra:n.iosTapCorroboration?.extra,actionStartedAt:o,androidFreshnessBaseline:n.androidFreshnessBaseline})||Z(a)}}async function jt(e){if(!e.target)return;let t=le(e.error);if(!t&&h(e.session))return;let n=await J({error:e.error,command:e.handlerParams.req.command,requestId:e.handlerParams.req.meta?.requestId,flags:e.handlerParams.req.flags,session:e.session,sessionStore:e.handlerParams.sessionStore,contextFromFlags:e.handlerParams.contextFromFlags,captureSnapshotForSession:e.handlerParams.captureSnapshotForSession});if(!n)return;let r=Mt({target:e.target,resolvedTarget:t,warning:n.warning,referenceFrame:C(e.session.snapshot?.nodes??[]),extra:e.extra});return A({session:e.session,sessionStore:e.handlerParams.sessionStore,command:e.handlerParams.req.command,positionals:e.handlerParams.req.positionals??[],flags:e.handlerParams.req.flags,result:r.result,responseData:r.responseData,recordedTarget:r.recordedTarget,actionStartedAt:e.actionStartedAt,actionFinishedAt:Date.now(),androidFreshnessBaseline:e.androidFreshnessBaseline})}function Mt(e){return e.resolvedTarget?W({source:{kind:`runtime`,result:{...e.resolvedTarget,warning:e.warning}},referenceFrame:e.referenceFrame,extra:e.extra}):U({targetKind:e.target.kind,point:Nt(e.target),warning:e.warning,referenceFrame:e.referenceFrame,extra:{...kt(e.target),...e.extra??{}}})}function Nt(e){return e.kind===`point`?{x:e.x,y:e.y}:void 0}function Z(e){return{ok:!1,error:s(e)}}async function Q(e,t,n,r){let i=await ke({device:t.device,command:n,requiresCapture:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?{ok:!0,touchExecutor:Ae(i.runtime,e.contextFromFlags(e.req.flags,t.appBundleId,t.trace?.outPath))}:{ok:!1,response:E(i.response)}}async function Pt(e){let t=await Ft(e);if(`response`in t)return t.response;let{session:n,parsedTarget:r,touchExecutor:i,staleRefsWarning:a}=t.admitted,{req:o,sessionName:s}=e,c=o.internal?.replayTargetGuard;return await X(e,{touchExecutor:i,refContext:r.target.kind===`ref`&&o.internal?.findResolvedTarget===void 0?{ref:r.target.ref,mintedGeneration:r.refGeneration,staleRefsWarning:a}:void 0,run:async e=>await e.interactions.fill(r.target,r.text,{session:s,requestId:o.meta?.requestId,delayMs:o.flags?.delayMs,allowNonHittableCoordinateFallback:o.flags?.maestro?.allowNonHittableCoordinateFallback,verify:o.flags?.verify,settle:j(o.flags),expectedResolvedTarget:c,preresolvedTarget:o.internal?.findResolvedTarget}),buildPayloads:e=>zt({session:n,result:e,text:r.text,flags:o.flags,staleRefsWarning:a})})}async function Ft(e){try{let t=await It(e);return`response`in t?{response:E(t.response)}:t}catch(e){throw Ce(e)}}async function It(e){let{req:t}=e,n=Lt(e);if(`response`in n)return n;let{session:r,parsedTarget:i}=n,a=await Q(e,r,`fill`,i.target.kind!==`point`);if(!a.ok)return{response:a.response};Ie({flags:t.flags,replayPlanStep:t.internal?.replayPlanStep===!0,isSessionRecording:h(r)});let o=O(`fill`,t.flags);if(o)return{response:o};let s=await Rt(e,r,i.target,i.refGeneration);return s.response?{response:s.response}:{admitted:{session:r,parsedTarget:i,touchExecutor:a.touchExecutor,staleRefsWarning:s.staleRefsWarning}}}function Lt(e){let t=e.sessionStore.get(e.sessionName);if(!t)return{response:r()};let n=F(t,`fill`);if(n)return{response:n};let i=Ze(e.req.positionals??[]);return i.ok?{session:t,parsedTarget:i}:{response:i.response}}async function Rt(e,t,n,r){if(n.kind!==`ref`)return{};let i=e.req.internal?.findResolvedTarget===void 0?x({session:t,ref:n.ref,mintedGeneration:r}):void 0,a=e.refSnapshotFlagGuardResponse(`fill`,e.req.flags);if(a)return{response:a,staleRefsWarning:i};let o=e.req.internal?.findResolvedTarget?null:k({ref:n.ref,mintedGeneration:r,staleRefsWarning:i,frame:b({session:t,ref:n.ref,mintedGeneration:r})});return o?{response:o,staleRefsWarning:i}:(await P(e,t),{staleRefsWarning:i})}function zt(e){let{session:t,result:n}=e,r=q(e.flags?.maestro?.allowNonHittableCoordinateFallback===!0,n.backendResult),i=n.kind===`point`?void 0:C(t.snapshot?.nodes??[]);return W({source:{kind:`runtime`,result:n,publicData:K({command:`fill`,flags:e.flags,data:n.backendResult}),...r.used?{dispatchPath:`maestro-non-hittable-fallback`}:{}},referenceFrame:i,extra:{text:e.text,...r.extra},staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:S(t,n.settle)})}async function Bt(e,t,n,r){let i=e,a={selector:n.raw},o=Date.now();ye(t);try{let e=await r(n)??{},s=Date.now(),c=Ht(e),l=K({command:dt(i.req.command,`press`),flags:i.req.flags,data:e}),u=q(n.allowNonHittableCoordinateFallback===!0,e),{result:d,responseData:f}=W({source:{kind:`runner-payload`,targetKind:`selector`,data:e,publicData:l,point:c,dispatchPath:u.used?`maestro-non-hittable-fallback`:`maestro-direct-selector`},referenceFrame:Ut(e),extra:{...a,...u.extra}});return A({session:t,sessionStore:i.sessionStore,command:i.req.command,positionals:i.req.positionals??[],flags:i.req.flags,result:d,responseData:f,actionStartedAt:o,actionFinishedAt:s})}catch(e){return await Vt({error:e,handlerParams:i,session:t,extra:a,positionals:[],actionStartedAt:o})||(De(e,{delegateSemanticFailures:n.allowNonHittableCoordinateFallback!==!0})?(y({level:`debug`,phase:`ios_direct_selector_tap_fallback`,data:{selector:n.raw,error:e instanceof Error?e.message:String(e)}}),null):{ok:!1,error:s(e)})}}async function Vt(e){let{error:t,handlerParams:n,session:r,extra:i,positionals:a,actionStartedAt:o}=e,s=await J({error:t,command:n.req.command,requestId:n.req.meta?.requestId,flags:n.req.flags,session:r,sessionStore:n.sessionStore,contextFromFlags:n.contextFromFlags,captureSnapshotForSession:n.captureSnapshotForSession});if(!s)return;let{result:c,responseData:l}=U({targetKind:`selector`,warning:s.warning,resolution:{source:`direct-ios`,kind:`not-observed`},extra:i});return A({session:r,sessionStore:n.sessionStore,command:n.req.command,positionals:n.req.positionals??a,flags:n.req.flags,result:c,responseData:l,actionStartedAt:o,actionFinishedAt:Date.now()})}function Ht(e){let t=typeof e.x==`number`?e.x:void 0,n=typeof e.y==`number`?e.y:void 0;return t!==void 0&&n!==void 0?{x:t,y:n}:{x:0,y:0}}function Ut(e){return typeof e.referenceWidth==`number`&&typeof e.referenceHeight==`number`?{referenceWidth:e.referenceWidth,referenceHeight:e.referenceHeight}:void 0}function Wt(e){let{session:t,commandLabel:n,target:r,flags:i}=e;return!e.tapElementSelectorAvailable||i?.maestro?.allowNonHittableCoordinateFallback!==!0||n!==`click`||r.kind!==`selector`||h(t)||qt(i)||f(n)&&i?.verify===!0||p(n)&&i?.settle===!0?null:Gt(t,r.selector,i)}function Gt(e,t,n){let r=Ee({session:e,selectorExpression:t});return r?{...r,...n?.maestro?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},...n?.maestro?.expectedTapPoint?{expectedPoint:n.maestro.expectedTapPoint}:{}}:null}const Kt=[`count`,`intervalMs`,`holdMs`,`jitterPx`,`doubleTap`];function qt(e){return Kt.some(t=>e?.[t]!==void 0)?!0:e?.clickButton!==void 0&&e.clickButton!==`primary`}const Jt=new Set([`press`,`click`]);async function Yt(e,t){let n=await Xt(e,t);return`response`in n?{response:E(n.response)}:n}async function Xt(e,t){let{req:n,sessionStore:i,sessionName:a}=e,o=i.get(a);if(!o)return{response:r()};let s=t===`click`?`click`:t,c=Zt(o,t,s,n.flags);if(c)return{response:c};let l=n.positionals??[],u=t===`longpress`?Xe(l):B(l,s);if(!u.ok)return{response:u.response};let d=$t(o,n,u),f=tn(e,o,t,u,d);if(f.response)return{response:f.response};let p=v(n.flags);return{admitted:{session:o,commandLabel:s,clickButton:p,resultButtonTag:de(p),target:u.target,durationMs:t===`longpress`?u.durationMs:void 0,staleRefsWarning:d,refContext:en(n,u,d)}}}function Zt(e,t,n,r){return F(e,n)||O(t,r)||Qt(e,t,n,r)}function Qt(e,t,n,r){let i=v(r);if(!Jt.has(t)||i===`primary`)return;let a=fe({commandLabel:n,platform:l(e.device),button:i,count:r?.count,intervalMs:r?.intervalMs,holdMs:r?.holdMs,jitterPx:r?.jitterPx,doubleTap:r?.doubleTap});if(a)return o(a.code,a.message,a.details)}function $t(e,t,n){if(n.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0)return x({session:e,ref:n.target.ref,mintedGeneration:n.refGeneration})}function en(e,t,n){if(t.target.kind===`ref`&&e.internal?.findResolvedTarget===void 0)return{ref:t.target.ref,mintedGeneration:t.refGeneration,staleRefsWarning:n}}function tn(e,t,n,r,i){let{req:a}=e;if(r.target.kind!==`ref`)return{};let o=e.refSnapshotFlagGuardResponse(n===`click`?`press`:n,a.flags);if(o)return{response:o};let s=a.internal?.findResolvedTarget?null:k({ref:r.target.ref,mintedGeneration:r.refGeneration,staleRefsWarning:i,frame:b({session:t,ref:r.target.ref,mintedGeneration:r.refGeneration})});return s?{response:s}:{}}async function $(e,t){let n=await Yt(e,t);if(`response`in n)return n.response;let{admitted:r}=n,i=await Q(e,r.session,t,r.target.kind!==`point`);if(!i.ok)return i.response;let{touchExecutor:a}=i,o=r.target.kind===`ref`?await P(e,r.session):void 0,s={...r,androidFreshnessBaseline:o},c=e.req.internal?.replayTargetGuard?null:Wt({session:s.session,commandLabel:s.commandLabel,target:s.target,flags:e.req.flags,tapElementSelectorAvailable:a.tapElementSelector!==void 0});if(c&&a.tapElementSelector){let t=await Bt(e,s.session,c,a.tapElementSelector);if(t)return t}return await X(e,{...nn(e,t,s),touchExecutor:a})}function nn(e,t,n){let{req:r,sessionName:i}=e,{session:a,target:o,durationMs:s,staleRefsWarning:c,resultButtonTag:l}=n,u=t===`longpress`?{...s===void 0?{}:{durationMs:s},gesture:`longpress`}:t===`hover`?{gesture:`hover`}:l;return{androidFreshnessBaseline:n.androidFreshnessBaseline,refContext:n.refContext,iosTapCorroboration:{target:o,extra:u},run:async e=>await rn({runtime:e,command:t,target:o,sessionName:i,requestId:r.meta?.requestId,clickButton:n.clickButton,flags:r.flags,durationMs:s,expectedResolvedTarget:r.internal?.replayTargetGuard,preresolvedTarget:r.internal?.findResolvedTarget}),afterRun:async t=>{if(!a.lease?.leaseProvider)return await pt(a,et(o,t),e.androidObservation)},buildPayloads:async n=>{let i=on(n);return await ut({params:e,session:a,result:n,staleRefsWarning:c,publicData:K({command:t===`longpress`||t===`hover`?void 0:t,flags:r.flags,data:n.backendResult}),extra:t===`longpress`?{...i===void 0?{}:{durationMs:i},gesture:`longpress`}:t===`hover`?{gesture:`hover`}:l})}}}async function rn(e){let{runtime:t,command:n,target:r,sessionName:i,requestId:a,flags:o,expectedResolvedTarget:s}=e,c={session:i,requestId:a,settle:j(o),expectedResolvedTarget:s};switch(n){case`longpress`:return await t.interactions.longPress(r,{...c,durationMs:e.durationMs,readinessTimeoutMs:o?.readinessTimeoutMs});case`hover`:return await t.interactions.hover(r,c);case`click`:return await t.interactions.click(r,an(e,c));case`press`:return await t.interactions.press(r,an(e,c))}}function an(e,t){let{flags:n}=e;return{...t,button:e.clickButton,count:n?.count,intervalMs:n?.intervalMs,holdMs:n?.holdMs,jitterPx:n?.jitterPx,doubleTap:n?.doubleTap,verify:n?.verify,readinessTimeoutMs:n?.readinessTimeoutMs,preresolvedTarget:e.preresolvedTarget}}function on(e){return`durationMs`in e?e.durationMs:void 0}function sn(e,t={}){let n=typeof t.executionProfile==`string`?t.executionProfile:void 0;return{kind:e.kind,durationMs:e.durationMs,pointerCount:e.pointerCount,from:e.from,to:e.to,...e.kind===`drag`?{targets:e.targets}:{},...e.backendResult??{},...t,...n?{timing:{executionProfile:n,gestureDurationMs:e.durationMs}}:{},message:e.message}}function cn(e){return`refused`in e}async function ln(e){return await hn(e,`gesture`,async t=>un(e,t))}async function un(e,t){let n=ie(e.req.input),r=_n(n,t);r.intent===`pan`&&e.req.internal?.gestureExecutionProfile&&(r.executionProfile=e.req.internal.gestureExecutionProfile);let i=await M({device:t.device,input:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?fn(n,r,await dn(mn(e,i.gestures),{session:e.sessionName,requestId:e.req.meta?.requestId},r,e.req.internal),e.req.flags):{refused:i.response}}async function dn(e,t,n,r){if(n.intent!==`drag`)return await e.interactions.gesture({...t,gesture:n});let i=r?.replayTargetGuards??(r?.replayTargetGuard?{source:r.replayTargetGuard}:void 0);return await e.interactions.gesture({...t,gesture:n,...i?{expectedResolvedTargets:i}:{}})}function fn(e,t,n,r){let i=n.kind===`drag`?n.recording:void 0,a=i?.sourceTarget,o=i?.destinationTarget;return{positionals:yn(e,i),flags:En(e,r),responseData:sn(n,{executionProfile:gn(t)}),...e.kind===`pinch`?{recordingResultExtra:{scale:e.scale}}:a?{recordingResultExtra:{selectorChain:a.selectorChain}}:{},...a&&o?{recordedTargets:{source:{node:a.node,preActionNodes:a.preActionNodes},destination:{node:o.node,preActionNodes:o.preActionNodes}}}:{}}}async function pn(e){return await hn(e,`swipe`,async t=>{let n=bn(e.req.input),r=await M({device:t.device,input:re(n).gesture,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!r.ok)return{refused:r.response};let i=n.count??1,a=n.pauseMs??0,o=n.pattern??`one-way`,s=await wn(mn(e,r.gestures),e,n,i,a,o);return{positionals:Cn(n),flags:e.req.flags,responseData:sn(s,{from:n.from,to:n.to,x1:n.from.x,y1:n.from.y,x2:n.to.x,y2:n.to.y,effectiveDurationMs:s.durationMs,timingMode:`direct`,executionProfile:`endpoint-hold`,count:i,pauseMs:a,pattern:o})}})}function mn(e,t){return D({...e,gestures:t,pairedGestureViewport:e.req.internal?.gestureViewport})}async function hn(e,t,n){let i=e.sessionStore.get(e.sessionName);if(!i)return r();let a=Date.now();try{let r=_e(i.device),o=r?{status:`clear`}:await T({session:i,command:t,phase:`before-command`,observation:e.androidObservation}),s=await n(i);if(cn(s))return s.refused;r||await T({session:i,command:t,phase:`after-command`,observation:e.androidObservation});let c={...s.responseData};return o.status===`recovered`&&(c.warning=`${typeof c.warning==`string`?`${c.warning} `:``}${o.warning}`),A({session:i,sessionStore:e.sessionStore,command:t,actionCommand:t,positionals:s.positionals,flags:s.flags,result:{...c,...s.recordingResultExtra??{}},responseData:c,recordedTargets:s.recordedTargets,actionStartedAt:a,actionFinishedAt:Date.now()})}catch(e){return{ok:!1,error:s(e)}}}function gn(e){if(e.intent===`fling`)return`endpoint-hold`;if(e.intent===`pan`)return e.executionProfile??`timed-pan`;if(e.intent===`drag`)return`timed-pan`}function _n(e,t){let n=ae(e);return n.intent===`drag`?{...n,source:vn(n.source,t),destination:vn(n.destination,t)}:n}function vn(t,n){if(!t.startsWith(`@`))return t;let r=i(t);if(!r)throw new e(`INVALID_ARGS`,`Invalid ref "${t}" — malformed generation suffix.`,{hint:a});return Oe({ref:r.base,mintedGeneration:r.generation,frame:b({session:n,ref:r.base,mintedGeneration:r.generation})}),r.base}function yn(e,t){return e.kind!==`drag`||!t?m(e):m({...e,source:t.sourceSelector??e.source,destination:t.destinationSelector??e.destination})}function bn(t){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`swipe requires structured object input`);oe(t);let n=t,r=n.pattern;if(r!==void 0&&r!==`one-way`&&r!==`ping-pong`)throw new e(`INVALID_ARGS`,`swipe pattern must be one-way or ping-pong`);let i={from:Sn(n.from,`swipe from`),to:Sn(n.to,`swipe to`),count:c(n,`count`,{min:1,max:200}),pauseMs:c(n,`pauseMs`,{min:0,max:ne}),pattern:r};return xn(i),i}function xn(t){let n=t.count??1,r=t.pauseMs??0,i=n*100+Math.max(0,n-1)*r;if(!(i<=6e4))throw new e(`INVALID_ARGS`,`Swipe series must fit within ${te}ms.`,{count:n,pauseMs:r,gestureDurationMs:100,scheduledDurationMs:i,hint:`Reduce --count or --pause-ms.`})}function Sn(t,n){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`${n} must be a point`);let r=t;if(typeof r.x!=`number`||!Number.isFinite(r.x))throw new e(`INVALID_ARGS`,`${n} x must be finite`);if(typeof r.y!=`number`||!Number.isFinite(r.y))throw new e(`INVALID_ARGS`,`${n} y must be finite`);return{x:r.x,y:r.y}}function Cn(e){return[String(e.from.x),String(e.from.y),String(e.to.x),String(e.to.y)]}async function wn(e,t,n,r,i,a){let o;for(let s=0;s<r;s+=1){let c=re(Tn(n,a,s));o=await e.interactions.gesture({session:t.sessionName,requestId:t.req.meta?.requestId,gesture:c.gesture}),i>0&&s+1<r&&await he(i)}if(!o)throw Error(`Swipe orchestration did not execute a gesture.`);return o}function Tn(e,t,n){return t!==`ping-pong`||n%2!=1?e:{...e,from:e.to,to:e.from}}function En(e,t){return e.kind!==`pan`||e.pointerCount===void 0?t:{...t,pointerCount:e.pointerCount}}async function Dn(e){let t={},n=await On({...e,refSnapshotFlagGuardResponse:je,captureProof:t});return n&&se({response:n,consumedTree:t,captureProof:t})}async function On(e){switch(e.req.command){case`press`:return await $(e,`press`);case`click`:return await $(e,`click`);case`longpress`:return await $(e,`longpress`);case`hover`:return await $(e,`hover`);case`fill`:return await Pt(e);default:return await kn(e)}}async function kn(e){switch(e.req.command){case _.gesture:return await ln(e);case _.swipe:return await pn(e);case _.type:return await An(e);case`get`:return await Ne(e);case`is`:return await Me(e);default:return null}}async function An(e){let{sessionName:t,sessionStore:n}=e,i=n.get(t);if(!i)return r();let a=await Fe({device:i.device,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!a.ok)return a.response;let o=await jn(i,e.androidObservation);return o.response?o.response:await Mn(e,i,a.typeText,o.warning)}async function jn(e,t){if(e.device.platform===`android`&&e.screenRecording){let n=await we({session:e,observation:t});if(n.status===`failed`)return{response:o(`COMMAND_FAILED`,`Android system dialog blocked the recording session`)};if(n.status===`unknown`)return{warning:n.warning}}return{}}async function Mn(e,t,n,r){let{req:i,sessionStore:a}=e,o=Date.now();try{let s=await T({session:t,command:i.command,phase:`before-command`,observation:e.androidObservation});ye(t);let c=await n(i.positionals??[],e.contextFromFlags(i.flags,t.appBundleId,t.trace?.outPath));await T({session:t,command:i.command,phase:`after-command`,observation:e.androidObservation});let l=Date.now(),u={...c};return Nn(u,r,s),A({session:t,sessionStore:a,command:i.command,positionals:i.positionals??[],flags:i.flags,result:u,responseData:u,actionStartedAt:o,actionFinishedAt:l})}catch(e){return{ok:!1,error:s(e)}}}function Nn(e,t,n){let r=[typeof e.warning==`string`?e.warning:void 0,t];n.status===`recovered`&&r.push(n.warning);let i=r.filter(e=>typeof e==`string`&&e.length>0).join(` `);i.length>0&&(e.warning=i)}export{Dn as handleInteractionCommands};
|
|
1
|
+
import{F as e,J as t,M as n,P as r,X as i,f as a,h as o,s}from"./sdk-contracts.js";import{m as c}from"./sdk-batch-runner.js";import{r as l}from"./diagnostics.js";import"./diagnostics2.js";import{m as u,w as d}from"./sdk-device.js";import{g as f,h as p,m as ee,w as te}from"./sdk-batch.js";import{c as ne,o as re}from"./scroll-gesture.js";import{C as m,E as ie,S as ae,v as oe,x as h}from"./script.js";import{c as se}from"./target-evidence.js";import{F as ce,n as g,p as _}from"./provider-device-admission.js";import{S as le,v as ue}from"./runtime.js";import{n as v}from"./catalog.js";import{r as de}from"./success-text.js";import{i as y,n as fe,r as pe}from"./click-button.js";import{r as me,t as he}from"./interaction-positionals.js";import{t as ge}from"./timeouts.js";import"./retry.js";import"./gesture-plan.js";import{r as _e}from"./request-cancel.js";import"./request.js";import{A as b,N as x,O as ve,i as S,n as C,r as ye}from"./session-snapshot.js";import{n as w,t as T}from"./touch-reference-frame.js";import{c as be,s as xe}from"./quality-warnings.js";import{a as E,n as D,o as Se,t as O}from"./internal/daemon.js";import{a as k,c as Ce,i as we,l as Te,n as A,o as j,r as M,s as Ee,t as De,u as N}from"./interaction-ref-policy.js";import{n as Oe,t as ke}from"./touch-runtime2.js";import{t as P}from"./gesture-runtime.js";import{d as Ae,g as F,i as je,r as Me,u as Ne}from"./selector-runtime.js";import{n as Pe}from"./type-text-runtime.js";function Fe(e){let t=e.flags?.recordAs;if(t!==void 0){if(ce(t),e.flags?.noRecord)throw new r(`INVALID_ARGS`,`fill --record-as cannot be combined with --no-record because no script step would be published.`);if(!e.isSessionRecording&&!e.replayPlanStep)throw new r(`INVALID_ARGS`,`fill --record-as requires an armed script recording. Start a fresh session with open --save-script, then retry the fill.`)}}async function I(e,t){if(!ve(t))return;let n=t.snapshot?.comparisonSafe===!0?t.snapshot:void 0;try{await e.captureSnapshotForSession(e.sessionRef,e.req.flags,e.sessionStore,e.contextFromFlags,{interactiveOnly:!0,androidFreshnessMode:`ref-refresh`})}catch(t){l({level:`warn`,phase:`android_ref_snapshot_refresh_failed`,data:{command:e.req.command,error:t instanceof Error?t.message:String(t)}})}return n}function L(e,t){return!u(e.device)||e.surface!==`desktop`&&e.surface!==`menubar`||e.surface===`menubar`&&(t===`click`||t===`press`)?null:s(`UNSUPPORTED_OPERATION`,`${t} is not supported on macOS ${e.surface} sessions yet. Open an app session to act, or use the ${e.surface} surface to inspect.`)}const Ie=new Set(f()),Le=new Set([`currentUptimeMs`,`gestureEndUptimeMs`,`gestureStartUptimeMs`,`sequenceResults`]);function R(e){if(e)return Object.fromEntries(Object.entries(e).filter(([e])=>!Le.has(e)))}function Re(e){return Be({fields:ze(e.command),input:e.input??{},data:R(e.data),controlledFields:Ie})}function ze(e){let t=te(e);if(!t)throw Error(`Missing response data transform descriptor for ${e}`);return t.fields}function Be(e){let t=Object.fromEntries(Object.entries(e.data??{}).filter(([t])=>!e.controlledFields.has(t)));for(let[n,r]of Object.entries(e.fields)){let i=e.input[n]===void 0?r.defaultValue:e.input[n];if(i===void 0||r.omitDefault===!0&&i===r.defaultValue){delete t[n];continue}t[n]=i}return Object.fromEntries(Object.entries(t).filter(([,e])=>e!==void 0))}async function Ve(e){let{ref:t,flags:n,sessionStore:r,contextFromFlags:i,captureSnapshotForSession:a,observation:o}=e,s=r.resolveCurrent(t);if(!s)return;let c=s.screenRecording;if(!c)return;let l=c.handle,u=e=>{if(!(!e||r.resolveCurrent(t)?.screenRecording!==c))return l.setTouchReferenceFrame(e),e},d=l.inspect().touchReferenceFrame;if(d)return d;if(s.device.platform===`android`&&!s.lease?.leaseProvider&&!g(s.device)){if(!o)throw Error(`Android observation was not injected into the request`);let e=await o.readScreenSize(s.device);return u({referenceWidth:e.width,referenceHeight:e.height})}let f=T(s.snapshot);if(f)return u(f);let p=await a(t,n,r,i,{interactiveOnly:!0});return u(T(p))}async function He(e){try{return await Ve(e)}catch(t){let n=e.sessionStore.resolveCurrent(e.ref);if(!n)return;l({level:`warn`,phase:`touch_reference_frame_resolve_failed`,data:{platform:n.device.platform,error:t instanceof Error?t.message:String(t)}});return}}function z(e){let{data:t,fallbackX:n,fallbackY:r,referenceFrame:i,extra:a}=e,o=We(a,n,r)??(typeof t?.message==`string`?t.message:void 0);return Ue({...t??{},...n===void 0||r===void 0?{}:{x:n,y:r},...i??{},...a??{},...de(o)})}function Ue(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function We(e,t,n){let r=B(e,`text`);if(r!==void 0)return`Filled ${Array.from(r).length} chars`;let i=Ge(t,n),a=Ke(e);if(a)return Je(a,e??{},i);if(i)return qe(e,i)}function B(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function Ge(e,t){return e===void 0||t===void 0?``:` (${e}, ${t})`}function Ke(e){let t=B(e,`ref`);return t===void 0?B(e,`selector`):`@${t}`}function qe(e,t){return e?.gesture===`longpress`?`Long pressed${t}`:e?.gesture===`hover`?`Hovered${t}`:`Tapped${t}`}function Je(e,t,n){let r=typeof t.button==`string`?t.button:void 0;return t.gesture===`longpress`?`Long pressed ${e}${n}`:t.gesture===`hover`?`Hovered ${e}${n}`:r&&r!==`primary`?`Clicked ${r} ${e}${n}`:`Tapped ${e}${n}`}function V(e){if(e.length<2)return null;let t=Number(e[0]),n=Number(e[1]);return!Number.isFinite(t)||!Number.isFinite(n)?null:{x:t,y:n}}function H(e,t){let n=V(e);if(n)return{ok:!0,target:{kind:`point`,x:n.x,y:n.y}};let r=e[0]??``;if(r.startsWith(`@`)){let t=F(r);return t.ok?{ok:!0,target:{kind:`ref`,ref:t.ref,fallbackLabel:e.slice(1).join(` `).trim()},refGeneration:t.generation}:{ok:!1,response:t.response}}let i=e.join(` `).trim();return i?{ok:!0,target:{kind:`selector`,selector:i}}:{ok:!1,response:s(`INVALID_ARGS`,`${t} requires @ref, selector expression, or x y coordinates`)}}function Ye(e){let t=V(e);if(t)return{ok:!0,target:{kind:`point`,x:t.x,y:t.y},...tt(e[2])};let n=et(e),r=H(n.targetPositionals,`longpress`);return r.ok?{ok:!0,target:r.target,refGeneration:r.refGeneration,...n.duration}:r}function U(e){return{ok:!1,response:s(`INVALID_ARGS`,`fill requires text after ${e} (use "" to clear the field)`)}}function Xe(e){let t=Ze(e);if(!t)return{ok:!1,response:s(`INVALID_ARGS`,`fill requires x y text, @ref text, or selector text`)};switch(t.kind){case`ref`:{let n=F(e[0]??``);return n.ok?t.text===void 0?U(`ref`):{ok:!0,target:{kind:`ref`,ref:n.ref},refGeneration:n.generation,text:t.text}:{ok:!1,response:n.response}}case`point`:return t.text===void 0?U(`coordinates`):{ok:!0,target:{kind:`point`,x:t.target.x,y:t.target.y},text:t.text};case`selector`:return t.text===void 0||t.text.length>0&&!t.text.trim()?U(`selector`):{ok:!0,target:{kind:`selector`,selector:t.target.selector},text:t.text}}}function Ze(e){try{return he(e)}catch{return null}}function Qe(e){let t=`evidence`in e?e.evidence:void 0,n=e.settle;return e.kind===`ref`?{ref:me(e.target?.kind===`ref`?e.target.ref:void 0),refLabel:e.refLabel,selectorChain:e.selectorChain,targetHittable:e.targetHittable,hint:e.hint,evidence:t,settle:n,resolution:e.resolution}:e.kind===`selector`?{selector:e.target?.kind===`selector`?e.target.selector:void 0,selectorChain:e.selectorChain,refLabel:e.refLabel,targetHittable:e.targetHittable,hint:e.hint,evidence:t,settle:n,resolution:e.resolution}:{evidence:t,settle:n}}function $e(e,t){return e.kind===`point`?`coordinate tap`:t.kind===`ref`&&t.target?.kind===`ref`?t.target.ref:t.kind===`selector`&&t.target?.kind===`selector`?t.target.selector:`target`}function et(e){let t=e.at(-1);return e.length>1&&nt(t)?{targetPositionals:e.slice(0,-1),duration:{durationMs:Number(t)}}:{targetPositionals:e,duration:{}}}function tt(e){return e===void 0?{}:{durationMs:Number(e)}}function nt(e){return e===void 0||e.trim()===``?!1:Number.isFinite(Number(e))}const rt={source:`direct-ios`,kind:`not-observed`};function W(e,t){if(!it(e))return t;let{resolution:n,...r}=t;return r}function it(e){return`dispatchPath`in e&&e.dispatchPath===`maestro-non-hittable-fallback`}function at(e){return G({source:{kind:`corroborated-tap`,targetKind:e.targetKind,data:{warning:e.warning},publicData:{warning:e.warning},point:e.point,resolution:e.resolution},referenceFrame:e.referenceFrame,extra:e.extra})}function G(e){let{source:t,referenceFrame:n,extra:r}=e;if(t.kind===`runner-payload`||t.kind===`corroborated-tap`){let e={targetKind:t.targetKind,...W(t,{resolution:t.kind===`runner-payload`?rt:t.resolution}),...r??{}};return{result:z({data:t.data,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e}),responseData:z({data:t.publicData,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e})}}let{result:i}=t,a={targetKind:i.kind,...W(t,Qe(i)),...ct(i.settle,e.settleRefsGeneration),...r??{}},o=z({data:i.backendResult,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:{...a,...st(i)}}),s=z({data:t.publicData,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:a}),c=lt(`warning`in i?i.warning:void 0,e.staleRefsWarning);return c&&(o.warning=c,s.warning=c),`readiness`in i&&i.readiness&&(s.readiness=i.readiness),{result:o,responseData:s,...ot(i)}}function ot(e){let t=K(e)?.node??(`node`in e?e.node:void 0),n=`preAction`in e?e.preAction?.nodes:void 0;return t&&n?{recordedTarget:{node:t,preActionNodes:n}}:{}}function st(e){let t=K(e);return t?{selectorChain:t.selectorChain,refLabel:t.refLabel}:{}}function K(e){return`recordingTarget`in e?e.recordingTarget:void 0}function ct(e,t){return!e?.diff||t===void 0?{}:{settle:{...e,refsGeneration:t}}}function lt(e,t){return t?e?`${e} ${t}`:t:e}async function ut(e){let{params:t,result:n,publicData:r,extra:i}=e,a=n.kind===`point`?await He({ref:t.sessionRef,flags:t.req.flags,sessionStore:t.sessionStore,contextFromFlags:t.contextFromFlags,captureSnapshotForSession:t.captureSnapshotForSession,observation:t.androidObservation}):void 0,o=t.sessionStore.resolveCurrent(t.sessionRef),s=o?n.kind===`point`?a:w(o.snapshot?.nodes??[]):void 0,c=o?n:{...n,settle:void 0};return G({source:{kind:`runtime`,result:c,publicData:r},referenceFrame:s,extra:i,staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:C(t.sessionRef,t.sessionStore,c.settle)})}function q(e){return e.command?Re({command:e.command,input:e.flags,data:e.data}):R(e.data)}function dt(e,t){return e===`click`||e===`press`||e===`fill`?e:t}function J(e,t){if(!e)return{used:!1,extra:{}};let n=t?.maestroNonHittableCoordinateFallbackUsed===!0;return{used:n,extra:{maestroNonHittableCoordinateFallbackAllowed:!0,maestroNonHittableCoordinateFallbackUsed:n,...n?{maestroFallbackReason:`non-hittable-coordinate`}:{}}}}function ft(e){let{error:t,snapshotGeneration:n,publishPartialRefs:a}=e;if(t.code!==`AMBIGUOUS_MATCH`)return t;let o=i(t.details);return o.length===0||n===void 0?t:(a(o),new r(t.code,t.message,{...t.details,refsGeneration:n},t.cause))}async function pt(e,t,n){let i=await Ne(e,n);if(i){if(i.permissionDialog)return`press ${t} opened an Android permission dialog (${i.foregroundPackage}) over ${i.expectedPackage}. ${i.hint}`;throw new r(`COMMAND_FAILED`,`press ${t} left ${e.appBundleId} and foregrounded ${i.foregroundPackage}. The tap likely escaped the app.`,i)}}function mt(e){return e.code===`COMMAND_FAILED`&&typeof e.details?.expectedPackage==`string`&&typeof e.details?.foregroundPackage==`string`}async function Y(e){let t=e.sessionStore.resolveCurrent(e.ref);if(!t||!ht(e,t))return;let n=_t(t.snapshot);if(!n)return;let r=await vt(e,n.snapshot.snapshotQuality,n.presentation);if(!(!r||!yt(n.snapshot,r,e.command)))return St(n.snapshot,r,e.command)}function ht(t,n){return gt(t.command)&&e(t.error).code===`XCTEST_RECORDED_FAILURE`&&Ce(n,{skipPendingPostGestureStabilization:!1})}function gt(e){return e===`click`||e===`press`}function _t(e){if(!X(e))return;let t=Date.now()-e.createdAt;if(t<0||t>15e3){l({level:`debug`,phase:`ios_tap_failure_corroboration_stale_baseline`,data:{ageMs:t}});return}let n=Ct(e.presentationKey);if(n){if(n.raw){l({level:`debug`,phase:`ios_tap_failure_corroboration_raw_baseline`,data:{presentationKey:e.presentationKey}});return}return{snapshot:e,presentation:n}}}async function vt(e,t,n){try{let r=be(t);return await e.captureSnapshotForSession(e.ref,Ot(e.flags,n),e.sessionStore,e.contextFromFlags,{interactiveOnly:n?.interactiveOnly??!0,...r?{preferredBackend:r}:{},signal:_e(e.requestId)})}catch(t){l({level:`debug`,phase:`ios_tap_failure_corroboration_capture_failed`,data:{command:e.command,error:t instanceof Error?t.message:String(t)}});return}}function yt(e,t,n){let r=bt(e,t);return r===void 0?xt(e,t,n):r?!0:(l({level:`debug`,phase:`ios_tap_failure_corroboration_identity_mismatch`,data:{command:n}}),!1)}function bt(e,t){if(e.comparisonKey!==void 0||t.comparisonKey!==void 0)return e.comparisonKey!==void 0&&e.comparisonKey===t.comparisonKey}function xt(e,t,n){let r=e.snapshotQuality?.backend,i=t.snapshotQuality?.backend;return!r||r!==i?(l({level:`debug`,phase:`ios_tap_failure_corroboration_backend_mismatch`,data:{command:n,baselineBackend:r,afterBackend:i}}),!1):e.presentationKey===t.presentationKey||(l({level:`debug`,phase:`ios_tap_failure_corroboration_scope_mismatch`,data:{command:n,baselinePresentationKey:e.presentationKey,afterPresentationKey:t.presentationKey}}),!1)}function St(e,t,n){if(!X(t))return;let r=ue(e.nodes),i=ue(t.nodes);if(r.digest!==i.digest)return l({level:`warn`,phase:`ios_tap_failure_corroborated`,data:{command:n,beforeNodeCount:r.nodeCount,afterNodeCount:i.nodeCount}}),{warning:`XCTest reported the tap as failed, but a same-scope post-action accessibility capture changed; treating the tap as landed. Observe the current screen before issuing another tap.`}}function X(e){return!!(e&&e.nodes.length>0&&!xe(e.snapshotQuality))}function Ct(e){if(!e)return;let t;try{t=JSON.parse(e)}catch{return}return wt(t)}function wt(e){let t=Tt(e);if(!(!t||typeof t.interactiveOnly!=`boolean`||typeof t.raw!=`boolean`)&&!(!Et(t.depth)||!Dt(t.scope)))return{interactiveOnly:t.interactiveOnly,...typeof t.depth==`number`?{depth:t.depth}:{},...typeof t.scope==`string`?{scope:t.scope}:{},raw:t.raw}}function Tt(e){return typeof e==`object`&&e?e:void 0}function Et(e){return e==null||typeof e==`number`}function Dt(e){return e==null||typeof e==`string`}function Ot(e,t){if(!(!e&&!t))return{...e??{},out:void 0,...t?{snapshotDepth:t.depth,snapshotScope:t.scope,snapshotRaw:t.raw}:{}}}function kt(e){return e.kind===`selector`?{selector:e.selector}:e.kind===`ref`?{ref:e.ref.startsWith(`@`)?e.ref.slice(1):e.ref}:{}}async function At(e,t,n,r,i){if(e.lease?.leaseProvider)return{aborted:!1,readiness:{status:`clear`},runtimeResult:await r()};let a=await E({session:e,command:t,phase:`before-command`,observation:i});if(n.refContext&&a.status===`recovered`){let t=A({ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration,staleRefsWarning:n.refContext.staleRefsWarning,frame:x({session:e,ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration})});if(t)return{aborted:!0,response:t}}let o=await r();return await E({session:e,command:t,phase:`after-command`,observation:i}),{aborted:!1,readiness:a,runtimeResult:o}}async function Z(t,n){if(t=N(t),!t.sessionRef)return a();let r=t.sessionStore.requireCurrent(t.sessionRef),i=k({...t,touchExecutor:n.touchExecutor}),o=Date.now();try{let e,a=await At(r,t.req.command,{refContext:n.refContext},async()=>{let t=await n.run(i);return e=await n.afterRun?.(t),t},t.androidObservation);if(a.aborted)return a.response;let{readiness:s,runtimeResult:c}=a,l=Date.now(),{result:u,responseData:d,recordedTarget:f}=await n.buildPayloads(c),p=[...s.status===`recovered`?[s.warning]:[],...e?[e]:[]];if(p.length>0){let e=[...typeof d.warning==`string`?[d.warning]:[],...p].join(` `);u.warning=e,d.warning=e}return j({ref:t.sessionRef,sessionStore:t.sessionStore,command:t.req.command,positionals:t.req.positionals??[],flags:t.req.flags,result:u,responseData:d,recordedTarget:f,actionStartedAt:o,actionFinishedAt:l,androidFreshnessBaseline:n.androidFreshnessBaseline})}catch(i){let a=ft({error:e(i),snapshotGeneration:r.snapshotGeneration,publishPartialRefs:e=>ye(r,e)});if(mt(a))throw a;return a.code===`AMBIGUOUS_MATCH`?Q(a):await jt({error:a,handlerParams:t,session:r,target:n.iosTapCorroboration?.target,extra:n.iosTapCorroboration?.extra,actionStartedAt:o,androidFreshnessBaseline:n.androidFreshnessBaseline})||Q(a)}}async function jt(e){if(!e.target)return;let t=le(e.error);if(!t&&_(e.session))return;let n=await Y({error:e.error,command:e.handlerParams.req.command,requestId:e.handlerParams.req.meta?.requestId,flags:e.handlerParams.req.flags,ref:e.handlerParams.sessionRef,sessionStore:e.handlerParams.sessionStore,contextFromFlags:e.handlerParams.contextFromFlags,captureSnapshotForSession:e.handlerParams.captureSnapshotForSession});if(!n)return;let r=Mt({target:e.target,resolvedTarget:t,warning:n.warning,referenceFrame:w(e.session.snapshot?.nodes??[]),extra:e.extra});return j({ref:e.handlerParams.sessionRef,sessionStore:e.handlerParams.sessionStore,command:e.handlerParams.req.command,positionals:e.handlerParams.req.positionals??[],flags:e.handlerParams.req.flags,result:r.result,responseData:r.responseData,recordedTarget:r.recordedTarget,actionStartedAt:e.actionStartedAt,actionFinishedAt:Date.now(),androidFreshnessBaseline:e.androidFreshnessBaseline})}function Mt(e){return e.resolvedTarget?G({source:{kind:`runtime`,result:{...e.resolvedTarget,warning:e.warning}},referenceFrame:e.referenceFrame,extra:e.extra}):at({targetKind:e.target.kind,point:Nt(e.target),warning:e.warning,referenceFrame:e.referenceFrame,extra:{...kt(e.target),...e.extra??{}}})}function Nt(e){return e.kind===`point`?{x:e.x,y:e.y}:void 0}function Q(e){return{ok:!1,error:t(e)}}async function Pt(e,t,n,r){let i=await Oe({device:t.device,command:n,requiresCapture:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?{ok:!0,touchExecutor:ke(i.runtime,e.contextFromFlags(e.req.flags,t.appBundleId,t.trace?.outPath))}:{ok:!1,response:O(i.response)}}async function Ft(e){e=N(e);let t=await It(e);if(`response`in t)return t.response;let{parsedTarget:n,touchExecutor:r,staleRefsWarning:i}=t.admitted,{req:a,sessionName:o}=e,s=a.internal?.replayTargetGuard;return await Z(e,{touchExecutor:r,refContext:n.target.kind===`ref`&&a.internal?.findResolvedTarget===void 0?{ref:n.target.ref,mintedGeneration:n.refGeneration,staleRefsWarning:i}:void 0,run:async e=>await e.interactions.fill(n.target,n.text,{session:o,requestId:a.meta?.requestId,delayMs:a.flags?.delayMs,allowNonHittableCoordinateFallback:a.flags?.maestro?.allowNonHittableCoordinateFallback,verify:a.flags?.verify,settle:M(a.flags),expectedResolvedTarget:s,preresolvedTarget:a.internal?.findResolvedTarget}),buildPayloads:t=>Bt({ref:e.sessionRef,sessionStore:e.sessionStore,result:t,text:n.text,flags:a.flags,staleRefsWarning:i})})}async function It(e){try{let t=await Lt(e);return`response`in t?{response:O(t.response)}:t}catch(e){throw D(e)}}async function Lt(e){let{req:t}=e,n=Rt(e);if(`response`in n)return n;let{session:r,parsedTarget:i}=n,a=await Pt(e,r,`fill`,i.target.kind!==`point`);if(!a.ok)return{response:a.response};Fe({flags:t.flags,replayPlanStep:t.internal?.replayPlanStep===!0,isSessionRecording:_(r)});let o=we(`fill`,t.flags);if(o)return{response:o};let s=await zt(e,r,i.target,i.refGeneration);return s.response?{response:s.response}:{admitted:{session:r,parsedTarget:i,touchExecutor:a.touchExecutor,staleRefsWarning:s.staleRefsWarning}}}function Rt(e){let t=e.sessionStore.get(e.sessionName);if(!t)return{response:a()};let n=L(t,`fill`);if(n)return{response:n};let r=Xe(e.req.positionals??[]);return r.ok?{session:t,parsedTarget:r}:{response:r.response}}async function zt(e,t,n,r){if(n.kind!==`ref`)return{};let i=e.req.internal?.findResolvedTarget===void 0?S({session:t,ref:n.ref,mintedGeneration:r}):void 0,a=e.refSnapshotFlagGuardResponse(`fill`,e.req.flags);if(a)return{response:a,staleRefsWarning:i};let o=e.req.internal?.findResolvedTarget?null:A({ref:n.ref,mintedGeneration:r,staleRefsWarning:i,frame:x({session:t,ref:n.ref,mintedGeneration:r})});return o?{response:o,staleRefsWarning:i}:(await I(e,t),{staleRefsWarning:i})}function Bt(e){let{result:t,ref:n,sessionStore:r}=e,i=r.requireCurrent(n),a=J(e.flags?.maestro?.allowNonHittableCoordinateFallback===!0,t.backendResult),o=t.kind===`point`?void 0:w(i.snapshot?.nodes??[]);return G({source:{kind:`runtime`,result:t,publicData:q({command:`fill`,flags:e.flags,data:t.backendResult}),...a.used?{dispatchPath:`maestro-non-hittable-fallback`}:{}},referenceFrame:o,extra:{text:e.text,...a.extra},staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:C(n,r,t.settle)})}async function Vt(e,n,r,i){let a=e,o={selector:r.raw},s=Date.now();b(n);try{let e=await i(r)??{},t=Date.now(),n=Ut(e),c=q({command:dt(a.req.command,`press`),flags:a.req.flags,data:e}),l=J(r.allowNonHittableCoordinateFallback===!0,e),{result:u,responseData:d}=G({source:{kind:`runner-payload`,targetKind:`selector`,data:e,publicData:c,point:n,dispatchPath:l.used?`maestro-non-hittable-fallback`:`maestro-direct-selector`},referenceFrame:Wt(e),extra:{...o,...l.extra}});return j({ref:a.sessionRef,sessionStore:a.sessionStore,command:a.req.command,positionals:a.req.positionals??[],flags:a.req.flags,result:u,responseData:d,actionStartedAt:s,actionFinishedAt:t})}catch(e){return await Ht({error:e,handlerParams:a,extra:o,positionals:[],actionStartedAt:s})||(Ee(e,{delegateSemanticFailures:r.allowNonHittableCoordinateFallback!==!0})?(l({level:`debug`,phase:`ios_direct_selector_tap_fallback`,data:{selector:r.raw,error:e instanceof Error?e.message:String(e)}}),null):{ok:!1,error:t(e)})}}async function Ht(e){let{error:t,handlerParams:n,extra:r,positionals:i,actionStartedAt:a}=e,o=await Y({error:t,command:n.req.command,requestId:n.req.meta?.requestId,flags:n.req.flags,ref:n.sessionRef,sessionStore:n.sessionStore,contextFromFlags:n.contextFromFlags,captureSnapshotForSession:n.captureSnapshotForSession});if(!o)return;let{result:s,responseData:c}=at({targetKind:`selector`,warning:o.warning,resolution:{source:`direct-ios`,kind:`not-observed`},extra:r});return j({ref:n.sessionRef,sessionStore:n.sessionStore,command:n.req.command,positionals:n.req.positionals??i,flags:n.req.flags,result:s,responseData:c,actionStartedAt:a,actionFinishedAt:Date.now()})}function Ut(e){let t=typeof e.x==`number`?e.x:void 0,n=typeof e.y==`number`?e.y:void 0;return t!==void 0&&n!==void 0?{x:t,y:n}:{x:0,y:0}}function Wt(e){return typeof e.referenceWidth==`number`&&typeof e.referenceHeight==`number`?{referenceWidth:e.referenceWidth,referenceHeight:e.referenceHeight}:void 0}function Gt(e){let{session:t,commandLabel:n,target:r,flags:i}=e;return!e.tapElementSelectorAvailable||i?.maestro?.allowNonHittableCoordinateFallback!==!0||n!==`click`||r.kind!==`selector`||_(t)||Jt(i)||p(n)&&i?.verify===!0||ee(n)&&i?.settle===!0?null:Kt(t,r.selector,i)}function Kt(e,t,n){let r=Te({session:e,selectorExpression:t});return r?{...r,...n?.maestro?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},...n?.maestro?.expectedTapPoint?{expectedPoint:n.maestro.expectedTapPoint}:{}}:null}const qt=[`count`,`intervalMs`,`holdMs`,`jitterPx`,`doubleTap`];function Jt(e){return qt.some(t=>e?.[t]!==void 0)?!0:e?.clickButton!==void 0&&e.clickButton!==`primary`}const Yt=new Set([`press`,`click`]);async function Xt(e,t){let n=await Zt(e,t);return`response`in n?{response:O(n.response)}:n}async function Zt(e,t){let{req:n,sessionStore:r,sessionName:i}=e,o=r.get(i);if(!o)return{response:a()};let s=t===`click`?`click`:t,c=Qt(o,t,s,n.flags);if(c)return{response:c};let l=n.positionals??[],u=t===`longpress`?Ye(l):H(l,s);if(!u.ok)return{response:u.response};let d=en(o,n,u),f=nn(e,o,t,u,d);if(f.response)return{response:f.response};let p=y(n.flags);return{admitted:{session:o,commandLabel:s,clickButton:p,resultButtonTag:fe(p),target:u.target,durationMs:t===`longpress`?u.durationMs:void 0,staleRefsWarning:d,refContext:tn(n,u,d)}}}function Qt(e,t,n,r){return L(e,n)||we(t,r)||$t(e,t,n,r)}function $t(e,t,n,r){let i=y(r);if(!Yt.has(t)||i===`primary`)return;let a=pe({commandLabel:n,platform:d(e.device),button:i,count:r?.count,intervalMs:r?.intervalMs,holdMs:r?.holdMs,jitterPx:r?.jitterPx,doubleTap:r?.doubleTap});if(a)return s(a.code,a.message,a.details)}function en(e,t,n){if(n.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0)return S({session:e,ref:n.target.ref,mintedGeneration:n.refGeneration})}function tn(e,t,n){if(t.target.kind===`ref`&&e.internal?.findResolvedTarget===void 0)return{ref:t.target.ref,mintedGeneration:t.refGeneration,staleRefsWarning:n}}function nn(e,t,n,r,i){let{req:a}=e;if(r.target.kind!==`ref`)return{};let o=e.refSnapshotFlagGuardResponse(n===`click`?`press`:n,a.flags);if(o)return{response:o};let s=a.internal?.findResolvedTarget?null:A({ref:r.target.ref,mintedGeneration:r.refGeneration,staleRefsWarning:i,frame:x({session:t,ref:r.target.ref,mintedGeneration:r.refGeneration})});return s?{response:s}:{}}async function $(e,t){e=N(e);let n=await Xt(e,t);if(`response`in n)return n.response;let{admitted:r}=n,i=await Pt(e,r.session,t,r.target.kind!==`point`);if(!i.ok)return i.response;let{touchExecutor:a}=i,o=r.target.kind===`ref`?await I(e,r.session):void 0,s={...r,androidFreshnessBaseline:o},c=e.req.internal?.replayTargetGuard?null:Gt({session:s.session,commandLabel:s.commandLabel,target:s.target,flags:e.req.flags,tapElementSelectorAvailable:a.tapElementSelector!==void 0});if(c&&a.tapElementSelector){let t=await Vt(e,s.session,c,a.tapElementSelector);if(t)return t}return await Z(e,{...rn(e,t,s),touchExecutor:a})}function rn(e,t,n){let{req:r,sessionName:i}=e,{session:a,target:o,durationMs:s,staleRefsWarning:c,resultButtonTag:l}=n,u=t===`longpress`?{...s===void 0?{}:{durationMs:s},gesture:`longpress`}:t===`hover`?{gesture:`hover`}:l;return{androidFreshnessBaseline:n.androidFreshnessBaseline,refContext:n.refContext,iosTapCorroboration:{target:o,extra:u},run:async e=>await an({runtime:e,command:t,target:o,sessionName:i,requestId:r.meta?.requestId,clickButton:n.clickButton,flags:r.flags,durationMs:s,expectedResolvedTarget:r.internal?.replayTargetGuard,preresolvedTarget:r.internal?.findResolvedTarget}),afterRun:async t=>{if(!a.lease?.leaseProvider)return await pt(a,$e(o,t),e.androidObservation)},buildPayloads:async n=>{let i=sn(n);return await ut({params:e,result:n,staleRefsWarning:c,publicData:q({command:t===`longpress`||t===`hover`?void 0:t,flags:r.flags,data:n.backendResult}),extra:t===`longpress`?{...i===void 0?{}:{durationMs:i},gesture:`longpress`}:t===`hover`?{gesture:`hover`}:l})}}}async function an(e){let{runtime:t,command:n,target:r,sessionName:i,requestId:a,flags:o,expectedResolvedTarget:s}=e,c={session:i,requestId:a,settle:M(o),expectedResolvedTarget:s};switch(n){case`longpress`:return await t.interactions.longPress(r,{...c,durationMs:e.durationMs,readinessTimeoutMs:o?.readinessTimeoutMs});case`hover`:return await t.interactions.hover(r,c);case`click`:return await t.interactions.click(r,on(e,c));case`press`:return await t.interactions.press(r,on(e,c))}}function on(e,t){let{flags:n}=e;return{...t,button:e.clickButton,count:n?.count,intervalMs:n?.intervalMs,holdMs:n?.holdMs,jitterPx:n?.jitterPx,doubleTap:n?.doubleTap,verify:n?.verify,readinessTimeoutMs:n?.readinessTimeoutMs,preresolvedTarget:e.preresolvedTarget}}function sn(e){return`durationMs`in e?e.durationMs:void 0}function cn(e,t={}){let n=typeof t.executionProfile==`string`?t.executionProfile:void 0;return{kind:e.kind,durationMs:e.durationMs,pointerCount:e.pointerCount,from:e.from,to:e.to,...e.kind===`drag`?{targets:e.targets}:{},...e.backendResult??{},...t,...n?{timing:{executionProfile:n,gestureDurationMs:e.durationMs}}:{},message:e.message}}function ln(e){return`refused`in e}async function un(e){return e=N(e),await gn(e,`gesture`,async(t,n)=>dn(e,t,n))}async function dn(e,t,n){let r=ie(e.req.input),i=vn(r,t,n);i.intent===`pan`&&e.req.internal?.gestureExecutionProfile&&(i.executionProfile=e.req.internal.gestureExecutionProfile);let a=await P({device:t.device,input:i,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return a.ok?pn(r,i,await fn(hn(e,a.gestures),{session:e.sessionName,requestId:e.req.meta?.requestId},i,e.req.internal),e.req.flags):{refused:a.response}}async function fn(e,t,n,r){if(n.intent!==`drag`)return await e.interactions.gesture({...t,gesture:n});let i=r?.replayTargetGuards??(r?.replayTargetGuard?{source:r.replayTargetGuard}:void 0);return await e.interactions.gesture({...t,gesture:n,...i?{expectedResolvedTargets:i}:{}})}function pn(e,t,n,r){let i=n.kind===`drag`?n.recording:void 0,a=i?.sourceTarget,o=i?.destinationTarget;return{positionals:bn(e,i),flags:Dn(e,r),responseData:cn(n,{executionProfile:_n(t)}),...e.kind===`pinch`?{recordingResultExtra:{scale:e.scale}}:a?{recordingResultExtra:{selectorChain:a.selectorChain}}:{},...a&&o?{recordedTargets:{source:{node:a.node,preActionNodes:a.preActionNodes},destination:{node:o.node,preActionNodes:o.preActionNodes}}}:{}}}async function mn(e){return e=N(e),await gn(e,`swipe`,async t=>{let n=xn(e.req.input),r=await P({device:t.device,input:m(n).gesture,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!r.ok)return{refused:r.response};let i=n.count??1,a=n.pauseMs??0,o=n.pattern??`one-way`,s=await Tn(hn(e,r.gestures),e,n,i,a,o);return{positionals:wn(n),flags:e.req.flags,responseData:cn(s,{from:n.from,to:n.to,x1:n.from.x,y1:n.from.y,x2:n.to.x,y2:n.to.y,effectiveDurationMs:s.durationMs,timingMode:`direct`,executionProfile:`endpoint-hold`,count:i,pauseMs:a,pattern:o})}})}function hn(e,t){return k({...e,gestures:t,pairedGestureViewport:e.req.internal?.gestureViewport})}async function gn(e,n,r){let i=e.sessionStore.get(e.sessionName);if(!i)return a();let o=Date.now();try{let t=g(i.device),a=t?{status:`clear`}:await E({session:i,command:n,phase:`before-command`,observation:e.androidObservation}),s=await r(i,a);if(ln(s))return s.refused;t||await E({session:i,command:n,phase:`after-command`,observation:e.androidObservation});let c={...s.responseData};return a.status===`recovered`&&(c.warning=`${typeof c.warning==`string`?`${c.warning} `:``}${a.warning}`),j({ref:e.sessionRef,sessionStore:e.sessionStore,command:n,actionCommand:n,positionals:s.positionals,flags:s.flags,result:{...c,...s.recordingResultExtra??{}},responseData:c,recordedTargets:s.recordedTargets,actionStartedAt:o,actionFinishedAt:Date.now()})}catch(e){return{ok:!1,error:t(e)}}}function _n(e){if(e.intent===`fling`)return`endpoint-hold`;if(e.intent===`pan`)return e.executionProfile??`timed-pan`;if(e.intent===`drag`)return`timed-pan`}function vn(t,n,r){let i=ae(t);if(i.intent!==`drag`)return i;try{return{...i,source:yn(i.source,n),destination:yn(i.destination,n)}}catch(t){if(r.status===`recovered`){let n=e(t),i=typeof n.details?.warning==`string`?n.details.warning+` `:``;throw n.details={...n.details,warning:i+r.warning},n}throw D(t)}}function yn(e,t){if(!e.startsWith(`@`))return e;let i=n(e);if(!i)throw new r(`INVALID_ARGS`,`Invalid ref "${e}" — malformed generation suffix.`,{hint:o});return De({ref:i.base,mintedGeneration:i.generation,frame:x({session:t,ref:i.base,mintedGeneration:i.generation})}),i.base}function bn(e,t){return e.kind!==`drag`||!t?h(e):h({...e,source:t.sourceSelector??e.source,destination:t.destinationSelector??e.destination})}function xn(e){if(!e||typeof e!=`object`||Array.isArray(e))throw new r(`INVALID_ARGS`,`swipe requires structured object input`);oe(e);let t=e,n=t.pattern;if(n!==void 0&&n!==`one-way`&&n!==`ping-pong`)throw new r(`INVALID_ARGS`,`swipe pattern must be one-way or ping-pong`);let i={from:Cn(t.from,`swipe from`),to:Cn(t.to,`swipe to`),count:c(t,`count`,{min:1,max:200}),pauseMs:c(t,`pauseMs`,{min:0,max:re}),pattern:n};return Sn(i),i}function Sn(e){let t=e.count??1,n=e.pauseMs??0,i=t*100+Math.max(0,t-1)*n;if(!(i<=6e4))throw new r(`INVALID_ARGS`,`Swipe series must fit within ${ne}ms.`,{count:t,pauseMs:n,gestureDurationMs:100,scheduledDurationMs:i,hint:`Reduce --count or --pause-ms.`})}function Cn(e,t){if(!e||typeof e!=`object`||Array.isArray(e))throw new r(`INVALID_ARGS`,`${t} must be a point`);let n=e;if(typeof n.x!=`number`||!Number.isFinite(n.x))throw new r(`INVALID_ARGS`,`${t} x must be finite`);if(typeof n.y!=`number`||!Number.isFinite(n.y))throw new r(`INVALID_ARGS`,`${t} y must be finite`);return{x:n.x,y:n.y}}function wn(e){return[String(e.from.x),String(e.from.y),String(e.to.x),String(e.to.y)]}async function Tn(e,t,n,r,i,a){let o;for(let s=0;s<r;s+=1){let c=m(En(n,a,s));o=await e.interactions.gesture({session:t.sessionName,requestId:t.req.meta?.requestId,gesture:c.gesture}),i>0&&s+1<r&&await ge(i)}if(!o)throw Error(`Swipe orchestration did not execute a gesture.`);return o}function En(e,t,n){return t!==`ping-pong`||n%2!=1?e:{...e,from:e.to,to:e.from}}function Dn(e,t){return e.kind!==`pan`||e.pointerCount===void 0?t:{...t,pointerCount:e.pointerCount}}async function On(e){let t={},n=e.sessionRef,r=await kn({...e,sessionRef:n,refSnapshotFlagGuardResponse:Ae,captureProof:t});return r&&se({response:r,consumedTree:t,captureProof:t})}async function kn(e){switch(e.req.command){case`press`:return await $(e,`press`);case`click`:return await $(e,`click`);case`longpress`:return await $(e,`longpress`);case`hover`:return await $(e,`hover`);case`fill`:return await Ft(e);default:return await An(e)}}async function An(e){switch(e.req.command){case v.gesture:return await un(e);case v.swipe:return await mn(e);case v.type:return await jn(e);case`get`:return await Me(e);case`is`:return await je(e);default:return null}}async function jn(e){let{sessionName:t,sessionStore:n}=e,r=n.get(t);if(!r)return a();let i=await Pe({device:r.device,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!i.ok)return i.response;let o=await Mn(r,e.androidObservation);return o.response?o.response:await Nn(e,r,i.typeText,o.warning)}async function Mn(e,t){if(e.device.platform===`android`&&e.screenRecording){let n=await Se({session:e,observation:t});if(n.status===`failed`)return{response:s(`COMMAND_FAILED`,`Android system dialog blocked the recording session`)};if(n.status===`unknown`)return{warning:n.warning}}return{}}async function Nn(e,n,r,i){let{req:a,sessionStore:o}=e,s=Date.now();try{let t=await E({session:n,command:a.command,phase:`before-command`,observation:e.androidObservation});b(n);let c=await r(a.positionals??[],e.contextFromFlags(a.flags,n.appBundleId,n.trace?.outPath));await E({session:n,command:a.command,phase:`after-command`,observation:e.androidObservation});let l=Date.now(),u={...c};return Pn(u,i,t),j({ref:e.sessionRef,sessionStore:o,command:a.command,positionals:a.positionals??[],flags:a.flags,result:u,responseData:u,actionStartedAt:s,actionFinishedAt:l})}catch(e){return{ok:!1,error:t(e)}}}function Pn(e,t,n){let r=[typeof e.warning==`string`?e.warning:void 0,t];n.status===`recovered`&&r.push(n.warning);let i=r.filter(e=>typeof e==`string`&&e.length>0).join(` `);i.length>0&&(e.warning=i)}export{On as handleInteractionCommands};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";import{P as t}from"./sdk-contracts.js";var n=e({localInteractorSource:()=>i,providerInteractorSource:()=>a,requireInteractorMethod:()=>r});function r(e,n){if(e)return e;throw new t(`COMMAND_FAILED`,`${n} was admitted but its bound interactor has no implementation.`,{reason:`interactor-method-missing`})}function i(e){return async t=>await e.resolveInteractor(e.device,t)}function a(e){return async n=>{let r=e.resolveInteractor(n);if(r)return r;throw new t(`UNSUPPORTED_OPERATION`,`Provider-owned ${e.operation} operation has no bound provider interactor.`,{reason:`provider-runtime-interactor-missing`,deviceId:e.device.id})}}export{r as i,i as n,a as r,n as t};
|
package/dist/src/interactor.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{$ as e,P as t,T as n,tt as r,w as i}from"./sdk-contracts.js";import{i as a}from"./capture.js";import{O as o}from"./sdk-batch-runner.js";import{c as s,r as c}from"./diagnostics.js";import"./diagnostics2.js";import{O as l,f as ee,k as u,m as d,p as te,y as f}from"./sdk-device.js";import{Ur as ne,ti as re}from"./sdk-batch.js";import{d as ie,i as ae,l as oe}from"./scroll-gesture.js";import{n as p}from"./session.js";import{S as se,T as ce,b as le,m as ue,n as de,r as fe,v as pe,x as me}from"./settings.js";import{c as he,n as ge,t as _e}from"./scroll-command.js";import"./device.js";import{t as ve}from"./device-rotation.js";import{o as m}from"./exec.js";import{a as ye}from"./tv-remote.js";import"./command.js";import{i as be,n as xe}from"./retry.js";import{a as h}from"./gesture-plan.js";import{n as Se}from"./scoped-provider.js";import{n as Ce,r as we}from"./ios-snapshot-planning.js";import{n as Te,r as Ee}from"./ios-system-surface.js";import{a as De,l as Oe,n as ke,s as Ae}from"./quality-warnings.js";import{r as g}from"./ios-snapshot-acquisition.js";import{t as je}from"./png-size.js";import{n as Me}from"./screenshot-density.js";import{i as _,n as Ne,r as v}from"./ios-snapshot-engine.js";import{C as Pe,g as Fe,o as Ie,r as y}from"./host-file.js";import{c as b,f as Le,h as Re,m as ze,p as Be}from"./config.js";import{o as x}from"./tool-provider.js";import{n as S,r as C,t as w}from"./physical-device-control.js";import{i as Ve,n as T,r as E,s as He}from"./runner.js";import{u as Ue}from"./host.js";import{t as We}from"./runner-cache-metadata.js";import{a as D,n as O}from"./simctl.js";import{c as k}from"./runner-client.js";import"./runner-error-classification.js";import{n as Ge,r as Ke,t as A}from"./app-launch.js";import{r as j,t as M}from"./simulator.js";import{c as qe,d as Je,l as Ye,o as Xe,s as Ze,t as Qe,u as $e}from"./helper.js";import{a as et,d as tt,f as nt,p as rt}from"./app-resolution.js";import{i as it,t as at}from"./display-inventory.js";import{t as ot}from"./simctl-settings.js";import{n as st}from"./interactor-types.js";import{r as ct,t as lt}from"./app-backend.js";import{i as ut,r as dt,t as ft}from"./alert.js";import{t as pt}from"./surface-snapshot.js";import{t as mt}from"./ios-target-activation.js";import N from"node:path";async function ht(e){return d(e)?await tt():(j(e,`clipboard`),await M(e),m(await D(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 e of r){let r=/^DataNetworkType:\s+(\d+)$/.exec(e);if(r){let e=Number(r[1]),i=
|
|
5
|
-
`).map(e=>e.trim().split(/\s+/)).find(e=>e[0]===
|
|
6
|
-
`?void 0:`append`,appBundleId:t.appBundleId},n)),fill:async(r,i,a,o,s)=>await M(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 Tn(M,e,t,n,r,i),performGesture:async r=>await Cn(e,t,n,r),gestureViewport:async()=>Sn(await M(e,{command:`gestureViewport`,appBundleId:t.appBundleId},n))}}}async function hn(e,t,n,r,i){let a=l(e)?d(i.surface):void 0;return a?await gn(t,r,i,a):i.button===`primary`?i.count===1?await vn(e,t,n,r,i):await Re(e,r,i,t.appBundleId,async t=>await M(e,t,n)):await _n(e,t,n,r,i.button)}async function gn(e,n,r,i){if(r.button!==`primary`)throw new t(`UNSUPPORTED_OPERATION`,`${r.button} click is not supported on macOS ${i} sessions.`);let{runMacOsPressAction:a}=await import(`./helper.js`).then(e=>e.t),o=await a(n.x,n.y,{bundleId:e.appBundleId,surface:i,holdMs:r.holdMs,clicks:r.count,doubleClick:r.doubleTap,intervalMs:r.intervalMs,signal:e.signal});return o.holdMs===void 0?{}:{holdMs:o.holdMs}}async function _n(e,t,n,r,i){return await M(e,{command:`mouseClick`,x:r.x,y:r.y,button:i,appBundleId:t.appBundleId},n)}async function vn(e,t,n,r,i){if(i.doubleTap){let i=await M(e,O([{kind:`doubleTap`,x:r.x,y:r.y}],t.appBundleId),n);return k(i),i}return i.holdMs>0?await M(e,{command:`longPress`,x:r.x,y:r.y,durationMs:i.holdMs,appBundleId:t.appBundleId},n):await M(e,X(e,t,r.x,r.y),n)}function yn(e){let t=e.textEntryRoute;return xn(t)?{textEntryRoute:t}:{}}function bn(t){let n=t.applicationState;return e(n)?{applicationState:n}:{}}function xn(e){return typeof e==`string`&&Qe.includes(e)}function Sn(e){let n=Y(e.x),r=Y(e.y),i=Y(e.x2),a=Y(e.y2);if(n===void 0||r===void 0||i===void 0||a===void 0||i<=0||a<=0)throw new t(`COMMAND_FAILED`,`Apple runner returned an invalid gesture viewport`);return{x:n,y:r,width:i,height:a}}function Y(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}async function Cn(e,t,n,r){if(r.topology===`two`&&$e(e,r.intent),r.topology===`single`&&l(e)){let{start:i,end:a}=v(r);return await M(e,{command:`drag`,x:i.x,y:i.y,x2:a.x,y2:a.y,durationMs:r.durationMs,appBundleId:t.appBundleId},n)}if(r.topology===`single`&&u(e)){let{start:i,end:a}=v(r);return await M(e,{command:`swipe`,direction:wn(i,a),appBundleId:t.appBundleId},n)}return await M(e,{command:`gesture`,gesturePlan:r,appBundleId:t.appBundleId},n)}function wn(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 X(e,t,n,r){return{command:`tap`,x:n,y:r,...s(e)?{synthesized:!0}:{},appBundleId:t.appBundleId}}async function Tn(e,t,n,r,i,a){if(fe(a?.durationMs,{invalidMessage:`scroll durationMs must be a non-negative integer at most ${pe}`}),u(t))return q(await e(t,J(i,n.appBundleId,a?.durationMs),r),{amount:a?.amount,durationMs:a?.durationMs});if(ie(a??{}),l(t))return await fn(e,t,n,r,i,a);let o=sn(a),s;try{s=await e(t,{command:`scroll`,direction:i,...ln(o),appBundleId:n.appBundleId},r)}catch(e){throw on(e)}return cn(s,i,o)}const En={0:`unknown`,1:`notRunning`,2:`runningBackgroundSuspended`,3:`runningBackground`};function Dn(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return;let n={...e},i=n.reason;if(!r(i))return;let a=n.priorState;if(typeof a!=`number`||!Number.isInteger(a))return;let o=En[a];o===void 0&&t?.({reason:i,rawPriorState:a});let s=n.otherActiveApplicationPid;return{reason:i,priorState:o??`unknown`,...typeof s==`number`&&Number.isInteger(s)&&s>0?{otherActiveApplicationPid:s}:{}}}function On(e){let t=kn(e.systemSurface),n=a(e.keyboard),r=Dn(e.targetActivation,e=>Be({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:Ee(e.snapshotQuality),qualityPayload:Nn(e.qualityPayload,t),runnerFatal:e.runnerFatal===!0,...n?{keyboard:n}:{},...t?{systemSurface:t}:{},...r?{targetActivation:r}:{},message:typeof e.message==`string`&&e.message.trim().length>0?e.message:void 0}}function kn(e){if(!In(e)||typeof e.bundleId!=`string`)return;let t=we(e.bundleId);return t&&{bundleId:t.bundleId,kind:t.kind}}function An(e,t,n){let r=n.nodes??[];if(n.runnerFatal===!0||r.length===0&&n.qualityPayload===void 0)return r;let i=Se({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions}),a=Pn(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:xe(i),viewport:a,hittability:{kind:`available`},lineage:{targetId:e},residue:[]}};try{return je(o,i).nodes}catch(e){jn(e,n)}}function jn(e,n){let r=n.quality;if(e instanceof x&&Oe(r))throw new t(`COMMAND_FAILED`,e.message,{...b(e),...n.systemSurface?{systemSurface:n.systemSurface}:{},snapshotQuality:{state:r.state,backend:r.backend,...r.reason?{reason:r.reason}:{},...r.reasonCode?{reasonCode:r.reasonCode}:{}},hint:Mn(n.systemSurface,r)},e);Z(e,n.systemSurface)}function Mn(e,t){return[e?`${e.bundleId} hosts the surface presented over the app, and this capture targeted that surface.`:void 0,...De(t,[])].filter(e=>e!==void 0).join(` `)}function Nn(e,t){if(e!==void 0)return(!In(e)||!Array.isArray(e.nodes)||typeof e.truncated!=`boolean`)&&Z(new x(`invalid-quality-payload`,`iOS runner returned an invalid quality payload`),t),e.scope!==void 0&&e.scope!==null&&Z(new x(`invalid-quality-payload`,`iOS runner quality payload must be unscoped`,{field:`scope`}),t),{nodes:e.nodes,truncated:e.truncated,scope:null}}function Pn(e,t){return y(Fn(t),{fallbackToLargestRoot:!0})??y(Fn(e),{fallbackToLargestRoot:!0})??{kind:`missing`,reason:`not-provided`}}function Fn(e){return e?.filter(e=>e.parentIndex===void 0)??[]}function In(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Z(e,n){throw e instanceof x?new t(`COMMAND_FAILED`,e.message,{...b(e),...n?{systemSurface:n}:{}},e):e}function Ln(e,n,r){if(e.appleOs===`watchos`)throw new t(`UNSUPPORTED_PLATFORM`,`watchOS is not supported: XCUITest cannot drive watchOS UI, so this device has no runner backend.`);let{overrides:i,runnerOpts:a}=mn(e,n),o={open:(t,n)=>He(e,t,{appBundleId:n?.appBundleId,launchConsole:n?.launchConsole,launchArgs:n?.launchArgs,terminateRunningApp:n?.terminateRunningApp,url:n?.url,runnerOptions:a}),openDevice:()=>Ue(e),close:t=>N(e,t,a),screenshot:(t,n)=>Jn(e,t,n,a),snapshot:async t=>await Rn(e,t,a),readTextAtPoint:async(t,n)=>{let r=l(e)?d(n?.surface):void 0;return r?await Yn(t,r,n?.appBundleId):await Xn(e,t,n,a)},findText:async(t,n)=>({found:(await M(e,{command:`findText`,text:t,appBundleId:n?.appBundleId},n?.signal?{...a,signal:n.signal}:a))?.found===!0}),back:async t=>{if(u(e)){await M(e,J(`menu`,n.appBundleId),a);return}await M(e,{command:pn(t),appBundleId:n.appBundleId},a)},home:async()=>{if(u(e)){await M(e,J(`home`,n.appBundleId),a);return}await M(e,{command:`home`,appBundleId:n.appBundleId},a)},setOrientation:async r=>{let i=Kn(await M(e,{command:`rotate`,orientation:r,appBundleId:n.appBundleId},a));if(i!==r)throw new t(`COMMAND_FAILED`,`iOS runner observed ${i} after requesting ${r}`,{requestedOrientation:r,observedOrientation:i});return{orientation:i}},appSwitcher:async()=>{await M(e,{command:`appSwitcher`,appBundleId:n.appBundleId},a)},actionButton:async()=>{await M(e,{command:`actionButton`,appBundleId:n.appBundleId},a)},tvRemote:async(t,r)=>{await M(e,J(_e(t),n.appBundleId,r),a)},keyboardDismiss:async()=>{let t=await M(e,{command:`keyboardDismiss`,appBundleId:n.appBundleId},a);return{kind:`mechanism`,wasVisible:Q(t,`wasVisible`),dismissed:Q(t,`dismissed`),visible:Q(t,`visible`),mechanism:Gn(t,`keyboardDismissMechanism`)}},keyboardEnter:async()=>{let t=await M(e,{command:`keyboardReturn`,appBundleId:n.appBundleId},a);return{kind:`visibility-echo`,visible:Q(t,`visible`),wasVisible:Q(t,`wasVisible`)}},readClipboard:()=>it(e),writeClipboard:t=>at(e,t,a),setSetting:(t,n,r,i)=>Ct(e,t,n,r,i),readSetting:t=>Tt(e,t),readAlert:t=>et(e,a,t),awaitAlert:t=>tt(e,a,t),acceptAlert:t=>I(e,a,`accept`,t),dismissAlert:t=>I(e,a,`dismiss`,t),...i};return r?qn(e,n,o,r):o}async function Rn(e,t,n){let r=l(e)?d(t?.surface):void 0;return r?await nt({...t,surface:r},t?.signal):await zn(e,t,n)}async function zn(e,t,n){let r=On(await ge(`snapshot_capture`,async()=>await M(e,{command:`snapshot`,appBundleId:t?.appBundleId,interactiveOnly:t?.interactiveOnly,preferredBackend:t?.preferredBackend,customActions:t?.customActions,depth:t?.depth,scope:t?.scope,raw:t?.raw},Wn(n,t?.signal)),{backend:`xctest`}));Bn(e,t,r);let i=Vn(r);return{nodes:Hn(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 Bn(e,n,r){if(!((r.nodes?.length??0)>0)&&!Un(n,r.quality)&&e.kind===`simulator`)throw new t(`COMMAND_FAILED`,`XCTest snapshot returned 0 nodes on iOS simulator.`)}function Vn(e){let t=[];return!e.quality&&e.message&&t.push(e.message),e.systemSurface&&t.push(Ce(e.systemSurface.bundleId)),e.targetActivation&&t.push(rt(e.targetActivation)),t}function Hn(e,t,n){return l(e)?n.nodes??[]:An(e.id,t,n)}function Un(e,t){return te(e?.scope)!==null&&t!==void 0&&t.state!==`sparse`}function Wn(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 Gn(e,t){let n=e[t];return typeof n==`string`?n:void 0}function Kn(e){let n=e.orientation;if(typeof n==`string`&&he.includes(n))return n;throw new t(`COMMAND_FAILED`,`iOS runner returned an invalid orientation result`,{orientation:n})}function qn(e,t,n,r){let i={...n,open:async()=>$(`open`),openDevice:async()=>$(`openDevice`),close:async()=>$(`close`),screenshot:async()=>$(`screenshot`),readClipboard:async()=>$(`readClipboard`),setSetting:async()=>$(`setSetting`),readSetting:async()=>$(`readSetting`)};return be(i,n=>ze(r,{deviceId:e.id,requestId:t.requestId},n))}function $(e){throw new t(`UNSUPPORTED_OPERATION`,`${e} uses local Apple tooling (simctl/devicectl), which an injected runner transport cannot reach; the provider session must supply its own ${e} implementation.`)}async function Jn(e,n,r={},a){let o=l(e)?d(r.surface):void 0;if(o){if(r.fullscreen)throw new t(`INVALID_ARGS`,`screenshot --fullscreen is not accepted on the macOS ${o} surface: it always captures the main display`,{reason:i.macOsHelperSurfaceFixedFrame,surface:o});return await Ge(n,{surface:o}),{}}return r.captureBackend===`runner`?(await G(e,n,r.appBundleId,r.fullscreen,a),{}):await Kt(e,n,{appBundleId:r.appBundleId,pixelDensity:r.pixelDensity,fullscreen:r.fullscreen,runnerOptions:a,normalizeStatusBar:r.normalizeStatusBar,skipIosSimulatorBootCheck:r.skipIosSimulatorBootCheck})}async function Yn(e,t,n){let{runMacOsReadTextAction:r}=await import(`./helper.js`).then(e=>e.t);return(await r(e.x,e.y,{bundleId:n,surface:t})).text}async function Xn(e,t,n,r){let i=await M(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{Ln as createAppleInteractor};
|
|
3
|
+
`).replace(/\n$/,``))}async function gt(e,t,n){if(d(e)){await rt(t);return}if(j(e,`clipboard`),f(e)){let r=n?.signal;await M(e,{signal:r}),m(await D(e,[`pbcopy`,e.id],{allowFailure:!0,stdin:t,signal:r}),`Failed to write tvOS simulator clipboard`);return}await k(e,{command:`pasteboardWrite`,text:t},n)}function P(e,n){if(!ee(e))throw new t(`UNSUPPORTED_OPERATION`,n.message,{deviceId:e.id,appleOs:l(e),deviceKind:e.kind,reason:n.reason,hint:n.hint})}async function _t(e,t){P(e,fe);let n=me(t);return await D(e,[`ui`,e.id,`content_size`,n]),ce(n,n)}async function vt(e){P(e,fe),await M(e);let n=m(await D(e,[`ui`,e.id,`content_size`],{allowFailure:!0}),`Failed to read iOS content size category`),r=n.stdout.trim(),i=se(r);if(i===void 0)throw new t(`COMMAND_FAILED`,`iOS simulator reported an unknown text size: ${r||`(empty)`}`,{deviceId:e.id,stdout:n.stdout,stderr:n.stderr,hint:"Boot the simulator, or run `xcrun simctl ui <device> content_size` to see what it reports."});return ce(i,r)}const yt=[`--time`,`9:41`,`--dataNetwork`,`wifi`,`--wifiMode`,`active`,`--wifiBars`,`3`,`--batteryState`,`charged`,`--batteryLevel`,`100`],bt={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`},xt={1:`searching`,2:`failed`,3:`active`},St={0:`notSupported`,1:`searching`,2:`failed`,3:`active`},F=new Set;async function Ct(e){let t=null,n=!1;if(Et(e))n=!0;else try{t=await Dt(e),n=!0}catch(t){Nt(e,`snapshot_failed`,t)}try{(!n||t)&&await Ot(e),await kt(e,yt)}catch(t){Nt(e,`prepare_failed`,t)}return async()=>{await wt(e,n?t:null)}}async function wt(e,t){if(await Ot(e),!t){Tt(e);return}await kt(e,jt(t)),I(e)}function I(e){F.delete(L(e))}function Tt(e){F.add(L(e))}function Et(e){return F.has(L(e))}function L(e){return`${e.platform}:${e.kind}:${e.id}`}async function Dt(e){return At(m(await D(e,[`status_bar`,e.id,`list`],{allowFailure:!0}),`Failed to read simulator status bar overrides`).stdout)}async function Ot(e){await D(e,[`status_bar`,e.id,`clear`])}async function kt(e,t){t.length!==0&&await D(e,[`status_bar`,e.id,`override`,...t])}function At(e){let n={},r=e.split(`
|
|
4
|
+
`).map(e=>e.trim()).filter(e=>e.length>0&&e!==`Current Status Bar Overrides:`&&!/^=+$/.test(e));for(let e of r){let r=/^DataNetworkType:\s+(\d+)$/.exec(e);if(r){let e=Number(r[1]),i=bt[e];if(!i)throw new t(`COMMAND_FAILED`,`Unsupported simulator data network type: ${e}`);n.dataNetwork=i;continue}let i=/^WiFi Mode:\s+(\d+),\s+WiFi Bars:\s+(\d+)$/.exec(e);if(i){let e=xt[Number(i[1])];e&&(n.wifiMode=e),n.wifiBars=i[2];continue}let a=/^Cell Mode:\s+(\d+),\s+Cell Bars:\s+(\d+)$/.exec(e);if(a){let e=Number(a[1]),r=St[e];if(!r)throw new t(`COMMAND_FAILED`,`Unsupported simulator cellular mode: ${e}`);n.cellularMode=r,n.cellularBars=a[2];continue}let o=/^Operator Name:\s*(.*)$/.exec(e);if(o){n.operatorName=o[1]??``;continue}}return Object.keys(n).length===0?null:n}function jt(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||Mt(e.dataNetwork)||e.operatorName!==void 0)&&t.push(`--cellularBars`,e.cellularBars),e.operatorName!==void 0&&t.push(`--operatorName`,e.operatorName),t}function Mt(e){return!!(e&&e!==`hide`&&e!==`wifi`)}function Nt(e,t,n){c({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...C(n)}})}async function Pt(n,r,i,a,o){if(d(n)){let e=r.toLowerCase();if(e===`appearance`){await nt(i);return}if(e===`permission`){let e=pe(i);if(e===`deny`)throw new t(`INVALID_ARGS`,ue(`permission`));let n=zt(o?.permissionTarget);return await Ze(e,n)}throw new t(`INVALID_ARGS`,ue(r))}j(n,`settings`),await M(n);let s=r.toLowerCase();switch(s){case`clear-app-state`:{if(i.toLowerCase()!==`clear`)throw new t(`INVALID_ARGS`,`settings clear-app-state only supports clear.`);if(!a)throw new t(`INVALID_ARGS`,`settings clear-app-state requires an app id or an active app session.`,e());let r=await Rt(n,a);return{bundleId:r.bundleId,containerPath:r.containerPath,cleared:!0}}case`reset-keychain`:if(i.toLowerCase()!==`clear`)throw new t(`INVALID_ARGS`,`settings reset-keychain only supports clear.`);return await D(n,[`keychain`,n.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=le(i)?`active`:`failed`;await D(n,[`status_bar`,n.id,`override`,`--wifiMode`,e]),I(n);return}case`airplane`:le(i)?(await D(n,[`status_bar`,n.id,`override`,`--dataNetwork`,`hide`,`--wifiMode`,`failed`,`--wifiBars`,`0`,`--cellularMode`,`failed`,`--cellularBars`,`0`,`--operatorName`,``]),I(n)):(await D(n,[`status_bar`,n.id,`clear`]),Tt(n));return;case`faceid`:case`touchid`:{P(n,de);let e=s,t=Bt[e];await Ht(n,Vt(i,e),{settingName:e,notificationModality:t.notificationModality});return}case`text-size`:return await _t(n,i);case`appearance`:case`permission`:case`location`:return await ot({runSimctl:e=>D(n,e),udid:n.id,setting:s,state:i,appBundleId:a,options:o});default:throw new t(`INVALID_ARGS`,`Unsupported setting: ${r}`)}}const Ft={"text-size":vt};async function It(e,t){return await Ft[t](e)}const Lt=[`Documents`,`Library/Caches`,`Library/Preferences`,`SystemData`,`tmp`];async function Rt(e,n){if(!te(e)||e.kind!==`simulator`)throw new t(`UNSUPPORTED_OPERATION`,`Clearing app state is currently supported only on iOS simulators.`);let r=await et(e,n);await M(e),await A(e,r);let i=m(await D(e,[`get_app_container`,e.id,r,`data`],{allowFailure:!0}),`simctl get_app_container failed for ${r}`).stdout.trim();if(!i)throw new t(`COMMAND_FAILED`,`simctl get_app_container returned an empty data container path for ${r}`);let a=await Fe(i);return await Promise.all(a.filter(e=>e!==`.com.apple.mobile_container_manager.metadata.plist`).map(e=>Pe(N.join(i,e)))),await Promise.all(Lt.map(e=>Ie(N.join(i,e)))),{bundleId:r,containerPath:i}}function zt(e){let n=e?.trim().toLowerCase();if(n===`accessibility`||n===`screen-recording`||n===`input-monitoring`)return n;throw new t(`INVALID_ARGS`,`Unsupported macOS permission target. Use accessibility|screen-recording|input-monitoring.`)}const Bt={faceid:{notificationModality:`pearl`},touchid:{notificationModality:`fingerTouch`}};function Vt(e,n){let r=e.trim().toLowerCase();if(r===`match`)return`match`;if(r===`nonmatch`)return`nonmatch`;if(r===`enroll`)return`enroll`;if(r===`unenroll`)return`unenroll`;throw new t(`INVALID_ARGS`,`Invalid ${n} state: ${e}. Use match|nonmatch|enroll|unenroll.`)}async function Ht(e,n,i){let a=O(e,Gt(e.id,n,i.notificationModality)),o=await x(a,{allowFailure:!0}),s=[];if(o.exitCode!==0)s.push({args:a,stderr:o.stderr,stdout:o.stdout,exitCode:o.exitCode});else{let t=Ut(n);if(t!==void 0){let n=await Wt(e);if(n.state===t)return;s.push({args:n.args,stderr:n.stderr,stdout:n.stdout,exitCode:n.exitCode})}else return}throw new t(`COMMAND_FAILED`,`Failed to simulate ${i.settingName}.`,{deviceId:e.id,action:n,setting:i.settingName,attempts:r(s)})}const R=`com.apple.BiometricKit.enrollmentChanged`;function Ut(e){if(e===`enroll`)return`1`;if(e===`unenroll`)return`0`}async function Wt(e){let t=O(e,[`spawn`,e.id,`notifyutil`,`-g`,R]),n=await x(t,{allowFailure:!0}),r=n.stdout.split(`
|
|
5
|
+
`).map(e=>e.trim().split(/\s+/)).find(e=>e[0]===R)?.[1];return{args:t,stderr:n.stderr,stdout:n.stdout,exitCode:n.exitCode,state:n.exitCode===0?r:void 0}}function Gt(e,t,n){let r=[`spawn`,e,`notifyutil`];switch(t){case`match`:return[...r,`-p`,`com.apple.BiometricKit_Sim.${n}.match`];case`nonmatch`:return[...r,`-p`,`com.apple.BiometricKit_Sim.${n}.nomatch`];case`enroll`:return[...r,`-s`,R,`1`,`-p`,R];case`unenroll`:return[...r,`-s`,R,`0`,`-p`,R]}}function Kt(e){let t=e.screenshotMetadata;if(!t||typeof t!=`object`||Array.isArray(t))return;let n=t,r=z(n.displayID),i=z(n.pixelWidth),a=z(n.pixelHeight),o=qt(n.pixelsPerPoint);if(r!==void 0&&i!==void 0&&a!==void 0&&o!==void 0)return Object.freeze({displayID:r,pixelWidth:i,pixelHeight:a,pixelsPerPoint:o})}function z(e){return typeof e==`number`&&Number.isInteger(e)&&e>0?e:void 0}function qt(e){return typeof e==`number`&&Number.isFinite(e)&&e>0?e:void 0}const Jt={ensureBooted:M,prepareStatusBarForScreenshot:Ct,resolveCaptureTarget:it,captureWithRetry:Qt,normalizeDensity:cn,captureWithRunner:V,shouldFallbackToRunner:on},Yt=new Map,B=new Map;async function Xt(e,t,n={}){return d(e)?(await V(e,t,n.appBundleId,n.fullscreen,n.runnerOptions),{}):e.kind===`simulator`?await Zt(e,t,n):(await w(e).captureScreenshot(e,t,{appBundleId:n.appBundleId,fullscreen:n.fullscreen,runnerOptions:n.runnerOptions,runRunnerCommand:k}),{})}async function Zt(e,n,r={}){if(e.kind!==`simulator`)throw new t(`UNSUPPORTED_OPERATION`,`Simulator screenshot fallback flow supports only iOS simulators`);let i={...Jt,...r.deps??{}};r.skipIosSimulatorBootCheck||await i.ensureBooted(e);let{display:a,displayRotation:o}=await i.resolveCaptureTarget(e),s=o?{displayRotation:o}:{},c=async()=>{await i.captureWithRetry(e,n,a),await i.normalizeDensity(e,n,r.pixelDensity,a?.pointScale)},l=async()=>{};if(r.normalizeStatusBar===!0)try{l=await i.prepareStatusBarForScreenshot(e)}catch(t){rn(e,`prepare_failed`,t)}try{try{return await c(),s}catch(t){let n=t;if(r.skipIosSimulatorBootCheck&&sn(t)){await i.ensureBooted(e);try{return await c(),s}catch(e){n=e}}if(!i.shouldFallbackToRunner(n))throw n;nn(e,`simctl_screenshot`,n)}let t=await i.captureWithRunner(e,n,r.appBundleId,r.fullscreen,r.runnerOptions);return await i.normalizeDensity(e,n,r.pixelDensity,t?.pixelsPerPoint),s}finally{await l().catch(t=>rn(e,`restore_failed`,t))}}async function Qt(e,t,n){let r=xe.fromTimeoutMs(Re),i=[`io`,e.id,`screenshot`,...at(n),t];await be(async({deadline:t})=>{await D(e,i,{timeoutMs:Math.max(1e3,t?.remainingMs()??2e4)})},{maxAttempts:5,baseDelayMs:Le,maxDelayMs:Be,jitter:.2,shouldRetry:e=>on(e)},{deadline:r,phase:`ios_simulator_screenshot`})}async function V(e,n,r,i,a){if(e.kind===`device`&&!d(e)){await w(e).captureScreenshot(e,n,{appBundleId:r,fullscreen:i,runnerOptions:a,preferRunner:!0,runRunnerCommand:k});return}let o=await k(e,{command:`screenshot`,appBundleId:r,fullscreen:i,inlineScreenshot:!1},a),s=o.message;if(!s)throw new t(`COMMAND_FAILED`,`Failed to capture iOS screenshot: runner returned no file path`);let c=Kt(o);if(d(e))return await y(s,n),c;if(e.kind===`simulator`)return await $t(e,s,n),c;throw new t(`COMMAND_FAILED`,`Unsupported Apple screenshot target`)}async function $t(e,n,r){let i=xe.fromTimeoutMs(b),a=`Unable to locate runner container for simulator screenshot`,o=B.get(e.id);if(o){let t=await en(o,n,r);if(t.copied)return;a=t.error,B.delete(e.id)}for(let t of We){let o=await D(e,[`get_app_container`,e.id,t,`data`],{allowFailure:!0,timeoutMs:tn(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 en(s,n,r);if(c.copied){B.set(e.id,s);return}a=c.error}throw new t(`COMMAND_FAILED`,`Failed to capture iOS screenshot: ${a}`)}async function en(e,t,n){let r=`Runner screenshot was not found in the simulator container`;for(let i of an(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 tn(e,n,r){let i=e.remainingMs();if(i>0)return i;throw new t(`COMMAND_FAILED`,`iOS ${r} timed out after ${n}ms`,{timeoutMs:n,step:r})}function nn(e,t,n){let r=C(n);c({level:`warn`,phase:`ios_screenshot_fallback`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,from:t,to:`runner`,...r}})}function rn(e,t,n){c({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...C(n)}})}function an(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 on(e){if(!(e instanceof t)||e.code!==`COMMAND_FAILED`)return!1;let n=S(e);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 sn(e){if(!(e instanceof t)||e.code!==`COMMAND_FAILED`)return!1;let n=S(e);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 cn(e,t,n,r){let i=r??await ln(e),a=Me(await je(t),i,n);a&&await De(t,a.width,a.height)}async function ln(e){let n=Yt.get(e.id);if(n!==void 0)return n;let r=await D(e,[`getenv`,e.id,`SIMULATOR_MAINSCREEN_SCALE`],{timeoutMs:ze}),i=Number(r.stdout.trim());if(!Number.isFinite(i)||i<=0)throw new t(`COMMAND_FAILED`,`Failed to read iOS simulator screenshot scale from SIMULATOR_MAINSCREEN_SCALE`);return Yt.set(e.id,i),i}function un(e){return!(e instanceof t)||e.details?.runnerErrorCode!==`SCROLL_KEYBOARD_OCCLUDES_SURFACE`?e:new t(e.code,e.message,{...e.details,...ae})}function dn(e){let t=e?.amount!==void 0||e?.pixels!==void 0;return{...e,...t?{}:{amount:_e},durationMs:e?.durationMs??400,releaseBehavior:e?.releaseBehavior??`controlled`}}function H(e,t,n,r={includeDuration:!0}){let i=U(e.referenceWidth),a=U(e.referenceHeight);if(i===void 0||a===void 0)return W(e,{amount:n?.amount});let o=ie({direction:t,amount:n?.amount,pixels:n?.pixels,referenceWidth:i,referenceHeight:a});return W(e,{amount:n?.amount,pixels:o.pixels,durationMs:r?.includeDuration?n?.durationMs:void 0,preferProvidedPixels:!0})}function fn(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}=mn(e),o=U(e.referenceWidth),s=U(e.referenceHeight),c=pn(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 pn(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 mn(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 hn(e,t,n,r,i,a){return H(await e(t,{command:`desktopScroll`,direction:i,...fn(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 gn(e){return e===`system`?`backSystem`:`backInApp`}function _n(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 k(e,q(e,t,r,i),n),pressPoint:async(r,i)=>await vn(e,t,n,r,i),tapElementSelector:async r=>await k(e,{command:`tap`,selectorKey:r.key,selectorValue:r.value,allowNonHittableCoordinateFallback:r.allowNonHittableCoordinateFallback,...r.expectedPoint?{x:r.expectedPoint.x,y:r.expectedPoint.y}:{},...u(e)?{synthesized:!0}:{},appBundleId:t.appBundleId},n),doubleTap:async(r,i)=>{let a=await k(e,T([{kind:`doubleTap`,x:r,y:i}],t.appBundleId),n);return E(a),a},appState:async()=>Cn(await k(e,{command:`appState`,appBundleId:t.appBundleId},n)),longPress:async(r,i,a)=>await k(e,{command:`longPress`,x:r,y:i,durationMs:a,appBundleId:t.appBundleId},n),focus:async(r,i)=>await k(e,q(e,t,r,i),n),type:async(r,i)=>Sn(await k(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 k(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 On(k,e,t,n,r,i),performGesture:async r=>await En(e,t,n,r),gestureViewport:async()=>Tn(await k(e,{command:`gestureViewport`,appBundleId:t.appBundleId},n))}}}async function vn(e,t,n,r,i){let a=d(e)?p(i.surface,`xctest`):void 0;return a?await yn(t,r,i,a):i.button===`primary`?i.count===1?await xn(e,t,n,r,i):await Ve(e,r,i,t.appBundleId,async t=>await k(e,t,n)):await bn(e,t,n,r,i.button)}async function yn(e,n,r,i){if(r.button!==`primary`)throw new t(`UNSUPPORTED_OPERATION`,`${r.button} click is not supported on macOS ${i} sessions.`);let{runMacOsPressAction:a}=await import(`./helper.js`).then(e=>e.n),o=await a(n.x,n.y,{bundleId:e.appBundleId,surface:i,holdMs:r.holdMs,clicks:r.count,doubleClick:r.doubleTap,intervalMs:r.intervalMs,signal:e.signal});return o.holdMs===void 0?{}:{holdMs:o.holdMs}}async function bn(e,t,n,r,i){return await k(e,{command:`mouseClick`,x:r.x,y:r.y,button:i,appBundleId:t.appBundleId},n)}async function xn(e,t,n,r,i){if(i.doubleTap){let i=await k(e,T([{kind:`doubleTap`,x:r.x,y:r.y}],t.appBundleId),n);return E(i),i}return i.holdMs>0?await k(e,{command:`longPress`,x:r.x,y:r.y,durationMs:i.holdMs,appBundleId:t.appBundleId},n):await k(e,q(e,t,r.x,r.y),n)}function Sn(e){let t=e.textEntryRoute;return wn(t)?{textEntryRoute:t}:{}}function Cn(e){let t=e.applicationState;return i(t)?{applicationState:t}:{}}function wn(e){return typeof e==`string`&&st.includes(e)}function Tn(e){let n=K(e.x),r=K(e.y),i=K(e.x2),a=K(e.y2);if(n===void 0||r===void 0||i===void 0||a===void 0||i<=0||a<=0)throw new t(`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 En(e,t,n,r){if(r.topology===`two`&&ct(e,r.intent),r.topology===`single`&&d(e)){let{start:i,end:a}=h(r);return await k(e,{command:`drag`,x:i.x,y:i.y,x2:a.x,y2:a.y,durationMs:r.durationMs,appBundleId:t.appBundleId},n)}if(r.topology===`single`&&f(e)){let{start:i,end:a}=h(r);return await k(e,{command:`swipe`,direction:Dn(i,a),appBundleId:t.appBundleId},n)}return await k(e,{command:`gesture`,gesturePlan:r,appBundleId:t.appBundleId},n)}function Dn(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,...u(e)?{synthesized:!0}:{},appBundleId:t.appBundleId}}async function On(e,t,n,r,i,a){if(he(a?.durationMs,{invalidMessage:`scroll durationMs must be a non-negative integer at most ${ge}`}),f(t))return W(await e(t,G(i,n.appBundleId,a?.durationMs),r),{amount:a?.amount,durationMs:a?.durationMs});if(oe(a??{}),d(t))return await hn(e,t,n,r,i,a);let o=dn(a),s;try{s=await e(t,{command:`scroll`,direction:i,...fn(o),appBundleId:n.appBundleId},r)}catch(e){throw un(e)}return H(s,i,o)}const kn=p(`app`,`native`),An=`The native macOS app backend acts through accessibility actions only. Unset AGENT_DEVICE_MACOS_APP_BACKEND to drive this app with XCTest.`,jn=new Set(Qe);function Mn(e,t){let n=()=>{if(t.appBundleId)return t.appBundleId;throw J(`an action on a session that names no app`)},r=async(e,r={})=>Nn(await Y(qe(e.x,e.y,{surface:kn,bundleId:n(),clicks:r.count,intervalMs:r.intervalMs,signal:t.signal})));return{open:e.open,openDevice:e.openDevice,close:e.close,screenshot:e.screenshot,snapshot:e.snapshot,readTextAtPoint:e.readTextAtPoint,readClipboard:e.readClipboard,writeClipboard:e.writeClipboard,setSetting:e.setSetting,readAlert:e.readAlert,awaitAlert:e.awaitAlert,acceptAlert:e.acceptAlert,dismissAlert:e.dismissAlert,tap:async(e,t)=>await r({x:e,y:t}),pressPoint:async(t,n)=>{if(n.surface!==void 0&&n.surface!==`app`)return await e.pressPoint(t,n);if(n.button!==`primary`)throw J(`${n.button} click`);if(n.doubleTap)throw J(`double-click`);if(n.holdMs>0)throw J(`press and hold`);return await r(t,n)},longPress:async()=>{throw J(`press and hold`)},focus:async(e,t)=>await r({x:e,y:t}),type:async(e,r)=>{await Y(Je(e,{bundleId:n(),delayMs:r,signal:t.signal}))},fill:async(e,r,i)=>Nn(await Y(Xe(e,r,i,{bundleId:n(),signal:t.signal}))),scroll:async(e,r)=>{oe(r??{});let i=await Y($e(e,{bundleId:n(),amount:r?.amount,pixels:r?.pixels,signal:t.signal}));return{...H(i,e,r,{includeDuration:!1}),mechanism:i.mechanism}},back:async()=>{throw J(`back`)},setOrientation:async()=>{throw J(`orientation`)}}}function Nn(e){return{mechanism:e.mechanism,...e.windowTitle===void 0?{}:{windowTitle:e.windowTitle}}}function J(e){return new t(`UNSUPPORTED_OPERATION`,`${e} is not supported by the native macOS app backend.`,{reason:`unsupported-device-backend`,hint:An})}async function Y(e){try{return await e}catch(e){if(!(e instanceof t))throw e;let n=e.details?.reason;throw typeof n!=`string`||!jn.has(n)?e:new t(`UNSUPPORTED_OPERATION`,e.message,{...e.details,reason:`unsupported-device-backend`,helperReason:n,hint:An},e)}}const Pn={0:`unknown`,1:`notRunning`,2:`runningBackgroundSuspended`,3:`runningBackground`};function Fn(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return;let r={...e},i=r.reason;if(!n(i))return;let a=r.priorState;if(typeof a!=`number`||!Number.isInteger(a))return;let o=Pn[a];o===void 0&&t?.({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 In(e){let t=Ln(e.systemSurface),n=o(e.keyboard),r=Fn(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:Oe(e.snapshotQuality),qualityPayload:Vn(e.qualityPayload,t),runnerFatal:e.runnerFatal===!0,...n?{keyboard:n}:{},...t?{systemSurface:t}:{},...r?{targetActivation:r}:{},message:typeof e.message==`string`&&e.message.trim().length>0?e.message:void 0}}function Ln(e){if(!X(e)||typeof e.bundleId!=`string`)return;let t=Ee(e.bundleId);return t&&{bundleId:t.bundleId,kind:t.kind}}function Rn(e,t,n){let r=n.nodes??[],i=Hn(r,n.qualityPayload?.nodes);if(n.runnerFatal===!0||r.length===0&&n.qualityPayload===void 0)return{nodes:r};let a=we({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions}),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:Ce(a),viewport:i,hittability:{kind:`available`},lineage:{targetId:e},residue:[]}};try{let e=Ne(o,a),t=re(e.validatedViewport);return{nodes:e.nodes,...t?{viewport:t}:{}}}catch(e){zn(e,n)}}function zn(e,n){let r=n.quality;if(e instanceof v&&Ae(r))throw new t(`COMMAND_FAILED`,e.message,{..._(e),...n.systemSurface?{systemSurface:n.systemSurface}:{},snapshotQuality:{state:r.state,backend:r.backend,...r.reason?{reason:r.reason}:{},...r.reasonCode?{reasonCode:r.reasonCode}:{}},hint:Bn(n.systemSurface,r)},e);Z(e,n.systemSurface)}function Bn(e,t){return[e?`${e.bundleId} hosts the surface presented over the app, and this capture targeted that surface.`:void 0,...ke(t,[])].filter(e=>e!==void 0).join(` `)}function Vn(e,t){if(e!==void 0)return(!X(e)||!Array.isArray(e.nodes)||typeof e.truncated!=`boolean`)&&Z(new v(`invalid-quality-payload`,`iOS runner returned an invalid quality payload`),t),e.scope!==void 0&&e.scope!==null&&Z(new v(`invalid-quality-payload`,`iOS runner quality payload must be unscoped`,{field:`scope`}),t),{nodes:e.nodes,truncated:e.truncated,scope:null}}function Hn(e,t){return g(Un(t),{fallbackToLargestRoot:!0})??g(Un(e),{fallbackToLargestRoot:!0})??{kind:`missing`,reason:`not-provided`}}function Un(e){return e?.filter(e=>e.parentIndex===void 0)??[]}function X(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Z(e,n){throw e instanceof v?new t(`COMMAND_FAILED`,e.message,{..._(e),...n?{systemSurface:n}:{}},e):e}function Wn(e,n,r){if(e.appleOs===`watchos`)throw new t(`UNSUPPORTED_PLATFORM`,`watchOS is not supported: XCUITest cannot drive watchOS UI, so this device has no runner backend.`);let{overrides:i,runnerOpts:a}=_n(e,n),o=d(e)?lt():`xctest`,s=t=>d(e)?p(t,o):void 0,c={open:(t,n)=>Ge(e,t,{appBundleId:n?.appBundleId,launchConsole:n?.launchConsole,launchArgs:n?.launchArgs,terminateRunningApp:n?.terminateRunningApp,url:n?.url,runnerOptions:a}),openDevice:()=>Ke(e),close:t=>A(e,t,a),screenshot:(t,n)=>tr(e,t,n,a,s(n?.surface)),snapshot:async t=>await Gn(e,t,a,s(t?.surface)),readTextAtPoint:async(t,n)=>{let r=s(n?.surface);return r?await nr(t,r,n?.appBundleId,n?.signal):await rr(e,t,n,a)},findText:async(t,n)=>({found:(await k(e,{command:`findText`,text:t,appBundleId:n?.appBundleId},n?.signal?{...a,signal:n.signal}:a))?.found===!0}),back:async t=>{if(f(e)){await k(e,G(`menu`,n.appBundleId),a);return}await k(e,{command:gn(t),appBundleId:n.appBundleId},a)},home:async()=>{if(f(e)){await k(e,G(`home`,n.appBundleId),a);return}await k(e,{command:`home`,appBundleId:n.appBundleId},a)},setOrientation:async r=>{let i=$n(await k(e,{command:`rotate`,orientation:r,appBundleId:n.appBundleId},a));if(i!==r)throw new t(`COMMAND_FAILED`,`iOS runner observed ${i} after requesting ${r}`,{requestedOrientation:r,observedOrientation:i});return{orientation:i}},appSwitcher:async()=>{await k(e,{command:`appSwitcher`,appBundleId:n.appBundleId},a)},actionButton:async()=>{await k(e,{command:`actionButton`,appBundleId:n.appBundleId},a)},tvRemote:async(t,r)=>{await k(e,G(ye(t),n.appBundleId,r),a)},keyboardDismiss:async()=>{let t=await k(e,{command:`keyboardDismiss`,appBundleId:n.appBundleId},a);return{kind:`mechanism`,wasVisible:Q(t,`wasVisible`),dismissed:Q(t,`dismissed`),visible:Q(t,`visible`),mechanism:Qn(t,`keyboardDismissMechanism`)}},keyboardEnter:async()=>{let t=await k(e,{command:`keyboardReturn`,appBundleId:n.appBundleId},a);return{kind:`visibility-echo`,visible:Q(t,`visible`),wasVisible:Q(t,`wasVisible`)}},readClipboard:()=>ht(e),writeClipboard:t=>gt(e,t,a),setSetting:(t,n,r,i)=>Pt(e,t,n,r,i),readSetting:t=>It(e,t),readAlert:t=>ut(e,a,t),awaitAlert:t=>dt(e,a,t),acceptAlert:t=>ft(e,a,`accept`,t),dismissAlert:t=>ft(e,a,`dismiss`,t),...i},l=o===`native`?Mn(c,n):c;return r?er(e,n,l,r):l}async function Gn(e,t,n,r){return r?await pt({...t,surface:r},t?.signal):await Kn(e,t,n)}async function Kn(e,t,n){let r=In(await s(`snapshot_capture`,async()=>await k(e,{command:`snapshot`,appBundleId:t?.appBundleId,interactiveOnly:t?.interactiveOnly,preferredBackend:t?.preferredBackend,customActions:t?.customActions,depth:t?.depth,scope:t?.scope,raw:t?.raw},Zn(n,t?.signal)),{backend:`xctest`}));qn(e,t,r);let i=Jn(r),a=Yn(e,t,r);return{nodes:a.nodes,truncated:r.truncated??!1,backend:`xctest`,producer:`apple-runner`,...a.viewport?{viewport:a.viewport}:{},...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 qn(e,n,r){if(!((r.nodes?.length??0)>0)&&!Xn(n,r.quality)&&e.kind===`simulator`)throw new t(`COMMAND_FAILED`,`XCTest snapshot returned 0 nodes on iOS simulator.`)}function Jn(e){let t=[];return!e.quality&&e.message&&t.push(e.message),e.systemSurface&&t.push(Te(e.systemSurface.bundleId)),e.targetActivation&&t.push(mt(e.targetActivation)),t}function Yn(e,t,n){return d(e)?{nodes:n.nodes??[]}:Rn(e.id,t,n)}function Xn(e,t){return ne(e?.scope)!==null&&t!==void 0&&t.state!==`sparse`}function Zn(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 Qn(e,t){let n=e[t];return typeof n==`string`?n:void 0}function $n(e){let n=e.orientation;if(typeof n==`string`&&ve.includes(n))return n;throw new t(`COMMAND_FAILED`,`iOS runner returned an invalid orientation result`,{orientation:n})}function er(e,t,n,r){let i={...n,open:async()=>$(`open`),openDevice:async()=>$(`openDevice`),close:async()=>$(`close`),screenshot:async()=>$(`screenshot`),readClipboard:async()=>$(`readClipboard`),setSetting:async()=>$(`setSetting`),readSetting:async()=>$(`readSetting`)};return Se(i,n=>He(r,{deviceId:e.id,requestId:t.requestId},n))}function $(e){throw new t(`UNSUPPORTED_OPERATION`,`${e} uses local Apple tooling (simctl/devicectl), which an injected runner transport cannot reach; the provider session must supply its own ${e} implementation.`)}async function tr(e,n,r={},i,o){if(o){if(r.fullscreen)throw new t(`INVALID_ARGS`,`screenshot --fullscreen is not accepted on the macOS ${o} surface: its capture frame is fixed`,{reason:a.macOsHelperSurfaceFixedFrame,surface:o});return await Ye(n,{surface:o,...o===`app`?{bundleId:r.appBundleId}:{},signal:i.signal}),{}}return r.captureBackend===`runner`?(await V(e,n,r.appBundleId,r.fullscreen,i),{}):await Xt(e,n,{appBundleId:r.appBundleId,pixelDensity:r.pixelDensity,fullscreen:r.fullscreen,runnerOptions:i,normalizeStatusBar:r.normalizeStatusBar,skipIosSimulatorBootCheck:r.skipIosSimulatorBootCheck})}async function nr(e,t,n,r){let{runMacOsReadTextAction:i}=await import(`./helper.js`).then(e=>e.n);return(await i(e.x,e.y,{bundleId:n,surface:t,signal:r})).text}async function rr(e,t,n,r){let i=await k(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{Wn as createAppleInteractor};
|
package/dist/src/interactor2.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{P as e}from"./sdk-contracts.js";import{i as t}from"./sdk-batch-runner.js";import{o 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`),longPress:()=>n(`longPress`),focus:()=>n(`focus`),type:()=>n(`type`),fill:()=>n(`fill`),scroll:()=>n(`scroll`),screenshot:()=>n(`screenshot`),snapshot:()=>n(`snapshot`),back:()=>n(`back`),setOrientation:()=>n(`setOrientation`),setSetting:()=>n(`setSetting`)}}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{P as t}from"./sdk-contracts.js";import{w 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.21`,stdout:e=>{process.stdout.write(e)},stderr:e=>{process.stderr.write(e)}}).catch(()=>process.exit(1));export{};
|