agent-device 0.20.10 → 0.21.1
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/README.md +2 -2
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.20.10.apk → agent-device-android-ime-helper-0.21.1.apk} +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.1.apk.sha256 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.20.10.manifest.json → agent-device-android-ime-helper-0.21.1.manifest.json} +4 -4
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.1.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.1.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.20.10.manifest.json → agent-device-android-snapshot-helper-0.21.1.manifest.json} +6 -6
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/AudioProbe.swift +35 -33
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/main.swift +6 -1
- package/apple/snapshot-bridge/LICENSE.idb +23 -0
- package/apple/snapshot-bridge/README.md +106 -0
- package/apple/snapshot-bridge/SnapshotBridge.m +286 -0
- package/apple/snapshot-bridge/SnapshotBridgeCapture.h +25 -0
- package/apple/snapshot-bridge/SnapshotBridgeCapture.m +138 -0
- package/apple/snapshot-bridge/SnapshotBridgeRuntime.h +34 -0
- package/apple/snapshot-bridge/SnapshotBridgeRuntime.m +411 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +58 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner.xcodeproj/project.pbxproj +19 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAXSnapshotBridge.h +12 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAXSnapshotBridge.m +20 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAlertVerification.swift +36 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSelectorMatchPolicy.swift +15 -15
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerStringNormalization.swift +8 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.h +12 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.m +100 -6
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSystemSurfaceHostPolicy.swift +72 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTapPointPolicy.swift +63 -14
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AXSnapshotFallback.swift +677 -83
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +35 -92
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AlertObservation.swift +124 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+BlockingSystemModalResolution.swift +39 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +1058 -213
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +296 -14
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Environment.swift +1 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Exceptions.swift +10 -10
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Interaction.swift +309 -149
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Keyboard.swift +101 -42
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +24 -17
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +124 -199
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +71 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+PrivateAXElementTypes.swift +12 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+PrivateAXPresentation.swift +211 -78
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScreenRecorder.swift +30 -10
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScrollGesture.swift +254 -24
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SequenceExecution.swift +206 -22
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +465 -494
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotBackendCapabilities.swift +168 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCapturePlan.swift +802 -247
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotPresentationInvariant.swift +19 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotTiming.swift +185 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedCommitDeadline.swift +206 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedGesturePolicy.swift +83 -5
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +156 -34
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SystemModal.swift +5 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +35 -318
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +206 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryReadiness.swift +158 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextInputCandidatePolicy.swift +28 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextInputProbe.swift +101 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +56 -23
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +56 -27
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TvRemote.swift +30 -24
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +126 -80
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/RecordingExportSupport.swift +111 -0
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-overlay.swift +47 -86
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-trim.swift +32 -79
- package/dist/apple/snapshot-presentation/Package.swift +21 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotGeometry.swift +56 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotModels.swift +259 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentation.swift +153 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationFailure.swift +27 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationInvariant.swift +91 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationProjection.swift +161 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotScopePolicy.swift +53 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFold.swift +242 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFoldProjection.swift +97 -0
- package/dist/src/adapter.js +1 -0
- package/dist/src/adb-executor.js +2 -0
- package/dist/src/adb-failure.js +1 -0
- package/dist/src/adb-host.js +1 -0
- package/dist/src/adb.js +1 -0
- package/dist/src/agent-browser-lifecycle.js +1 -0
- package/dist/src/agent-browser-process-record.js +1 -0
- package/dist/src/agent-browser-provider.js +1 -0
- package/dist/src/agent-browser-tool.js +1 -1
- package/dist/src/agent-device-client.js +2 -2
- package/dist/src/ai-sdk.d.ts +2 -2
- package/dist/src/ai-sdk.js +1 -1
- package/dist/src/alert-contract.js +1 -0
- package/dist/src/alert-runtime.js +1 -0
- package/dist/src/android-adb.d.ts +27 -19
- package/dist/src/android-adb.js +1 -1
- package/dist/src/android-input-ownership.js +1 -0
- package/dist/src/android-system-chrome.js +1 -0
- package/dist/src/android.js +1 -1
- package/dist/src/api.js +11 -0
- package/dist/src/app-catalog.js +1 -0
- package/dist/src/app-deployment-resolution.js +2 -0
- package/dist/src/app-helpers.js +1 -1
- package/dist/src/app-inventory-contract.js +1 -0
- package/dist/src/app-inventory.js +1 -0
- package/dist/src/app-launch.js +2 -0
- package/dist/src/app-lifecycle-facade.js +1 -0
- package/dist/src/app-lifecycle.js +3 -6
- package/dist/src/app-lifecycle2.js +2 -2
- package/dist/src/app-lifecycle3.js +1 -0
- package/dist/src/app-log-files.js +1 -1
- package/dist/src/app-log-reconnect.js +1 -1
- package/dist/src/app-log-runtime.js +1 -4
- package/dist/src/app-log-runtime2.js +4 -0
- package/dist/src/app-parsers.js +4 -0
- package/dist/src/app-resolution-cache.js +1 -0
- package/dist/src/app-resolution-facade.js +1 -0
- package/dist/src/app-resolution.js +2 -2
- package/dist/src/app-state.js +1 -2
- package/dist/src/apple-runner-platform.js +1 -0
- package/dist/src/application-lifecycle-interaction.js +1 -0
- package/dist/src/application-lifecycle-runtime.js +1 -0
- package/dist/src/apps-simctl.js +1 -0
- package/dist/src/archive.js +4 -0
- package/dist/src/artifact-download.js +1 -0
- package/dist/src/artifacts.d.ts +6 -2
- package/dist/src/artifacts.js +1 -1
- package/dist/src/async-lifecycle.js +1 -0
- package/dist/src/audio-probe-result.js +1 -0
- package/dist/src/audio-probe-runtime.js +1 -0
- package/dist/src/audio-probe-support.js +1 -0
- package/dist/src/auth-session.js +1 -1
- package/dist/src/auth.js +1 -1
- package/dist/src/backend-snapshot-options.js +1 -1
- package/dist/src/{url.js → base-url.js} +1 -1
- package/dist/src/boot-diagnostics.js +2 -2
- package/dist/src/byte-limit-stream.js +1 -1
- package/dist/src/capabilities.js +1 -0
- package/dist/src/capture.js +1 -0
- package/dist/src/catalog.js +1 -0
- package/dist/src/cli-command-aliases.js +1 -0
- package/dist/src/cli-config.js +1 -1
- package/dist/src/cli-help.js +74 -51
- package/dist/src/cli-output.js +1 -1
- package/dist/src/cli-runner.js +1 -1
- package/dist/src/cli.js +4 -6
- package/dist/src/click-button.js +1 -0
- package/dist/src/client-metro-companion.js +1 -0
- package/dist/src/client-metro.js +1 -1
- package/dist/src/client-types.d.ts +280 -242
- package/dist/src/clipboard.js +1 -0
- package/dist/src/code-signature-cache.js +1 -0
- package/dist/src/code-signature.js +1 -0
- package/dist/src/color.js +1 -0
- package/dist/src/command-metadata.js +1 -1
- package/dist/src/command-schema.js +3 -3
- package/dist/src/command-surface.js +1 -1
- package/dist/src/command-tools.js +2 -2
- package/dist/src/command.js +1 -0
- package/dist/src/compatibility-policy.js +1 -0
- package/dist/src/config.js +1 -1
- package/dist/src/config2.js +1 -0
- 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-client-lifecycle.js +1 -0
- package/dist/src/daemon-process.js +1 -0
- package/dist/src/daemon-registration.js +1 -0
- package/dist/src/daemon-shutdown-report.js +1 -1
- package/dist/src/daemon.js +2 -2
- package/dist/src/debug-symbols-facade.js +5 -0
- package/dist/src/deploy-result-target.js +1 -0
- package/dist/src/device-claim-inspection.js +1 -1
- package/dist/src/device-claim-rule.js +1 -0
- package/dist/src/device-input-state.d.ts +190 -3
- package/dist/src/device-inventory-context.js +1 -0
- package/dist/src/device-isolation.js +1 -0
- package/dist/src/device-release.js +1 -0
- package/dist/src/device-rotation.js +1 -0
- package/dist/src/device-selection-resolver.js +1 -0
- package/dist/src/device-session.js +1 -0
- package/dist/src/device.js +1 -1
- package/dist/src/device2.js +3 -2
- package/dist/src/diagnostics.js +3 -0
- package/dist/src/diagnostics2.js +1 -0
- package/dist/src/dispatch-resolve.js +1 -0
- package/dist/src/doctor-facade.js +1 -0
- package/dist/src/doctor-output.js +1 -0
- package/dist/src/doctor.js +1 -0
- package/dist/src/doctor2.js +1 -0
- package/dist/src/doctor3.js +1 -0
- package/dist/src/durable-resource.js +1 -0
- package/dist/src/entities.js +1 -1
- package/dist/src/error.js +2 -0
- package/dist/src/exec.js +1 -0
- package/dist/src/file.js +1 -0
- package/dist/src/find.js +1 -1
- package/dist/src/finders.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 -0
- package/dist/src/gesture-plan-types.js +1 -0
- package/dist/src/gesture-plan.js +1 -0
- package/dist/src/gesture-runtime.js +1 -0
- 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 -0
- package/dist/src/human-control-contract.js +1 -0
- package/dist/src/human-control.js +1 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/input-actions.js +1 -4
- package/dist/src/input-actions2.js +2 -1
- package/dist/src/install-artifact-facade.js +1 -0
- package/dist/src/install-source-network-transport.js +1 -0
- package/dist/src/install-source.d.ts +3 -10
- package/dist/src/install-source2.js +1 -1
- package/dist/src/interaction-positionals.js +1 -0
- package/dist/src/interaction-ref-policy.js +1 -0
- package/dist/src/interaction.js +1 -1
- package/dist/src/interaction2.js +1 -1
- package/dist/src/interactor-operation-catalog.js +1 -0
- package/dist/src/interactor-types.js +1 -0
- package/dist/src/interactor.js +6 -2
- package/dist/src/interactor2.js +1 -1
- package/dist/src/interactors.js +1 -1
- package/dist/src/internal/bin.d.ts +1 -1
- package/dist/src/internal/bin.js +1 -2
- package/dist/src/internal/companion-tunnel.d.ts +1 -1
- package/dist/src/internal/companion-tunnel.js +1 -1
- package/dist/src/internal/daemon.d.ts +1 -1
- package/dist/src/internal/daemon.js +2 -4
- package/dist/src/internal/png-worker.d.ts +4 -4
- package/dist/src/internal/png-worker.js +1 -1
- package/dist/src/internal/run-script-http-child.d.ts +4 -0
- package/dist/src/internal/run-script-http-child.js +1 -0
- package/dist/src/internal/update-check-entry.d.ts +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/inventory6.js +1 -1
- package/dist/src/ios-client.js +16 -0
- package/dist/src/ios-snapshot-acquisition.js +1 -0
- package/dist/src/ios-snapshot-adapter.js +1 -0
- package/dist/src/ios-snapshot-planning.js +1 -0
- package/dist/src/ios-snapshot-runtime.js +1 -0
- package/dist/src/ios-system-surface.js +1 -0
- package/dist/src/json.js +1 -0
- package/dist/src/keyboard-actions.js +1 -0
- package/dist/src/launch-console.js +1 -0
- package/dist/src/lease-context.js +1 -1
- package/dist/src/lease-scope.js +1 -0
- package/dist/src/lease.js +1 -1
- package/dist/src/limrun-runtime-dependencies.js +1 -1
- package/dist/src/limrun.d.ts +1610 -7
- package/dist/src/limrun.js +1 -1
- package/dist/src/linux.js +1 -1
- package/dist/src/local-interactor-operation-set.js +1 -0
- package/dist/src/location-coordinates.js +1 -1
- package/dist/src/logcat.js +1 -1
- package/dist/src/macos-facade.js +1 -0
- package/dist/src/managed-device-scope.js +1 -0
- package/dist/src/mechanics.js +19 -0
- package/dist/src/metro.d.ts +4 -2
- package/dist/src/metro.js +1 -1
- package/dist/src/metro2.js +1 -1
- package/dist/src/mobile-snapshot-semantics.js +1 -1
- package/dist/src/multitouch-support.js +1 -0
- package/dist/src/numeric.js +1 -0
- package/dist/src/observability.js +1 -1
- package/dist/src/observation.js +2 -0
- package/dist/src/open-target-resolution.js +1 -0
- package/dist/src/output-path.js +1 -1
- package/dist/src/owner-identity.js +3 -1
- package/dist/src/parameterized-recorded-fill.js +1 -0
- package/dist/src/parser.js +1 -1
- package/dist/src/perf-facade.js +2 -0
- package/dist/src/perf-process-identity.js +1 -0
- package/dist/src/perf-runtime-operation-builder.js +1 -0
- package/dist/src/perf-runtime-plan.js +1 -0
- package/dist/src/perf-runtime.js +1 -0
- package/dist/src/perf.js +1 -4
- package/dist/src/physical-device-control.js +1 -1
- package/dist/src/physical-device-facade.js +1 -0
- package/dist/src/platform-request-scope.js +1 -0
- package/dist/src/platform-runtime-android-adb-host.js +1 -0
- package/dist/src/platform-runtime-android-mechanics.js +1 -0
- package/dist/src/platform-runtime-app-log-android-transport.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 -0
- package/dist/src/platform-runtime-network-web-transport.js +1 -1
- package/dist/src/platform-runtime-open-target.js +1 -1
- package/dist/src/platform-runtime-operation-host.js +4 -4
- package/dist/src/platform-runtime-runtime-hints.js +2 -2
- package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-runner-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-runner-transport.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-transport.js +1 -1
- package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-harmony-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-process-host.js +1 -0
- package/dist/src/platform-runtime-screen-recording-web-host.js +1 -1
- package/dist/src/platform-runtime-unavailable.js +1 -0
- package/dist/src/platform-runtime.js +1 -1
- package/dist/src/platform-runtime2.js +1 -1
- package/dist/src/plist.js +1 -1
- package/dist/src/png-worker-contract.js +1 -1
- package/dist/src/prepare-kind.js +1 -0
- package/dist/src/process-exit.js +1 -1
- package/dist/src/process.js +1 -0
- package/dist/src/provider-device-runtime.js +1 -0
- package/dist/src/provider-session-ownership.js +2 -0
- package/dist/src/provider-webdriver.js +1 -1
- package/dist/src/provider.js +1 -1
- package/dist/src/providers.js +1 -0
- package/dist/src/proxy.js +2 -2
- package/dist/src/react-native-overlay.js +1 -0
- package/dist/src/react-native.js +1 -1
- package/dist/src/record-runtime.js +1 -1
- package/dist/src/record-trace.js +1 -1
- package/dist/src/rect-center.js +1 -0
- package/dist/src/register-builtins.js +1 -0
- package/dist/src/registry.js +40 -28
- package/dist/src/remote-config2.js +1 -1
- package/dist/src/replay-divergence.js +2 -0
- package/dist/src/replay.js +2 -2
- package/dist/src/reporting.js +8 -7
- package/dist/src/request-admission.js +1 -0
- package/dist/src/request-cancel.js +1 -0
- package/dist/src/request-cancellation.js +1 -0
- package/dist/src/request-progress-protocol.js +1 -0
- package/dist/src/request-providers.js +1 -0
- package/dist/src/request-runtime-binding.js +1 -0
- package/dist/src/request.js +1 -0
- package/dist/src/result-serialization.js +1 -0
- package/dist/src/retry.js +1 -0
- package/dist/src/rolldown-runtime.js +1 -1
- package/dist/src/runner-cache-metadata.js +2 -0
- package/dist/src/runner-client.js +1 -1
- package/dist/src/runner-disposal.js +1 -1
- package/dist/src/runner-operations-facade.js +1 -0
- package/dist/src/runner-owner-facade.js +1 -0
- package/dist/src/runner-owner-state.js +1 -0
- package/dist/src/runner-presentation.js +1 -0
- package/dist/src/runner.js +1 -0
- package/dist/src/{runtime-transport.js → runtime-transport-hints.js} +1 -1
- package/dist/src/runtime.js +3 -3
- package/dist/src/runtime2.js +4 -4
- package/dist/src/runtime3.js +1 -1
- package/dist/src/runtime4.js +5 -3
- 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/scoped-provider.js +1 -1
- package/dist/src/screen-recording-completion.js +1 -0
- package/dist/src/screen-recording-live-handle.js +1 -0
- package/dist/src/screen-recording-options.js +1 -0
- package/dist/src/screen-recording-resource-recovery.js +1 -0
- package/dist/src/screen-recording-runtime.js +1 -0
- package/dist/src/screenshot-density.js +1 -1
- package/dist/src/screenshot-result.js +1 -6
- package/dist/src/screenshot-runtime.js +1 -0
- package/dist/src/screenshot.js +1 -1
- package/dist/src/screenshot2.js +1 -0
- package/dist/src/screenshot3.js +5 -0
- package/dist/src/script.js +1 -0
- package/dist/src/scroll-command.js +1 -0
- package/dist/src/scroll-gesture.js +1 -0
- package/dist/src/scroll-indicator.js +1 -0
- package/dist/src/sdk-batch-runner.d.ts +23 -6
- package/dist/src/sdk-batch-runner.js +2 -3
- package/dist/src/sdk-batch.js +2 -0
- package/dist/src/sdk-contracts.d.ts +170 -41
- package/dist/src/sdk-contracts.js +2 -2
- package/dist/src/sdk-device.js +1 -1
- package/dist/src/sdk-finders.d.ts +1 -1
- package/dist/src/sdk-finders.js +1 -1
- package/dist/src/sdk-io.js +1 -1
- package/dist/src/sdk-remote-config.d.ts +1 -1
- package/dist/src/sdk-remote-config.js +1 -1
- package/dist/src/sdk-selectors.d.ts +524 -140
- package/dist/src/sdk-selectors.js +1 -1
- package/dist/src/selection.js +1 -0
- package/dist/src/selector-runtime.js +1 -1
- package/dist/src/selectors.js +1 -1
- package/dist/src/semantic-index.js +1 -0
- package/dist/src/server.js +4 -4
- package/dist/src/session-allocation.js +1 -0
- package/dist/src/session-artifact-paths.js +1 -0
- package/dist/src/session-observation.js +1 -0
- package/dist/src/session-paths.js +1 -0
- package/dist/src/session-repair-tombstone.js +1 -0
- package/dist/src/session-routing.js +1 -0
- package/dist/src/session-runtime-admission.js +1 -0
- package/dist/src/session-snapshot.js +1 -0
- package/dist/src/session-store.js +4 -0
- package/dist/src/session-target-evidence.js +1 -1
- package/dist/src/session2.js +5 -27
- package/dist/src/settings.js +1 -0
- package/dist/src/shared.js +2 -2
- package/dist/src/simctl-facade.js +1 -0
- package/dist/src/simctl.js +1 -1
- package/dist/src/simulator-facade.js +1 -0
- package/dist/src/simulator.js +1 -1
- package/dist/src/snapshot-capture-annotations.js +1 -0
- package/dist/src/snapshot-desktop-projection.js +1 -0
- package/dist/src/snapshot-diagnostics.js +1 -0
- package/dist/src/snapshot-process.js +1 -0
- package/dist/src/snapshot-quality-backend-capabilities.js +1 -0
- package/dist/src/snapshot-quality-verdict.js +1 -0
- package/dist/src/snapshot-runtime-binding.js +1 -0
- package/dist/src/snapshot-runtime.js +1 -1
- package/dist/src/snapshot-scope.js +1 -1
- package/dist/src/snapshot-state.js +1 -0
- package/dist/src/snapshot.js +1 -8
- package/dist/src/snapshot2.js +1 -1
- package/dist/src/snapshot3.js +1 -1
- package/dist/src/snapshot4.js +1 -0
- package/dist/src/src.js +1 -1
- package/dist/src/src2.js +1 -1
- package/dist/src/src3.js +1 -2
- package/dist/src/src4.js +1 -1
- package/dist/src/src5.js +1 -0
- package/dist/src/src6.js +1 -0
- package/dist/src/src7.js +2 -0
- package/dist/src/src8.js +115 -0
- package/dist/src/startup-recovery-fence.js +1 -0
- package/dist/src/status-markers.js +1 -0
- package/dist/src/string-enum.js +1 -1
- package/dist/src/success-text.js +1 -0
- package/dist/src/surface-snapshot.js +1 -0
- package/dist/src/surface-snapshot2.js +1 -0
- package/dist/src/takeover.js +5 -0
- package/dist/src/tool-provider-facade.js +1 -0
- package/dist/src/tool-provider.js +4 -3
- package/dist/src/tool-provider2.js +1 -1
- package/dist/src/tool-provider3.js +1 -1
- package/dist/src/toolchain-probe.js +2 -0
- package/dist/src/touch-reference-frame.js +1 -0
- package/dist/src/touch-runtime.js +1 -0
- package/dist/src/transport.js +3 -0
- package/dist/src/tree.js +1 -0
- package/dist/src/ttl-memo.js +1 -0
- package/dist/src/tv-remote.js +1 -0
- package/dist/src/type-text-runtime.js +1 -0
- package/dist/src/undici.js +99 -0
- package/dist/src/update-check.js +1 -1
- package/dist/src/verified-file.js +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/video.js +2 -2
- package/dist/src/web.js +2 -1
- package/dist/src/web2.js +1 -0
- package/dist/src/webdriver-ios-snapshot.js +1 -0
- package/dist/src/webdriver-source.js +1 -0
- package/dist/src/window-state.js +1 -0
- package/linux/atspi-dump.py +54 -9
- package/package.json +58 -35
- package/server.json +9 -3
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.20.10.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.20.10.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.20.10.apk.sha256 +0 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CoordinateTextEntryTests.swift +0 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+FlatSnapshotFiltering.swift +0 -168
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+LifecycleCacheTests.swift +0 -6
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+RecordingTests.swift +0 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SelectorMatchPolicyTests.swift +0 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotPresentation.swift +0 -183
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotPresentationTests.swift +0 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotTraversalIdentityTests.swift +0 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryPolicyTests.swift +0 -4
- package/dist/src/appearance.js +0 -1
- package/dist/src/apps.js +0 -5
- package/dist/src/audio-probe.js +0 -1
- package/dist/src/cli-grammar.js +0 -1
- package/dist/src/command-catalog.js +0 -1
- package/dist/src/debug-symbols.js +0 -5
- package/dist/src/device-input-state.js +0 -2
- package/dist/src/device-ready.js +0 -1
- package/dist/src/dispatch.js +0 -1
- package/dist/src/handler-utils.js +0 -1
- package/dist/src/helper-package-install.js +0 -1
- package/dist/src/host-process.js +0 -3
- package/dist/src/ime-lifecycle.js +0 -2
- package/dist/src/ime-recovery-marker.js +0 -1
- package/dist/src/input-actions3.js +0 -1
- package/dist/src/install-artifact.js +0 -1
- package/dist/src/install-artifact2.js +0 -1
- package/dist/src/interaction-common.js +0 -1
- package/dist/src/interaction-runtime.js +0 -1
- package/dist/src/interaction-snapshot.js +0 -1
- package/dist/src/manifest.js +0 -1
- package/dist/src/method-scope.js +0 -1
- package/dist/src/png-resize.js +0 -1
- package/dist/src/process-lock.js +0 -1
- package/dist/src/runner-lease.js +0 -1
- package/dist/src/runner-sequence.js +0 -1
- package/dist/src/script-source-bundle.js +0 -16
- package/dist/src/sdk-android-adb.d.ts +0 -245
- package/dist/src/sdk-android-adb.js +0 -4
- package/dist/src/sdk.js +0 -1
- package/dist/src/setting-state.js +0 -1
- package/dist/src/shell-quote.js +0 -1
- package/dist/src/snapshot-session.js +0 -1
- package/dist/src/timing-safe-equal.js +0 -1
- package/dist/src/unsupported-interactor.js +0 -1
- package/dist/src/verdict.js +0 -1
- /package/dist/src/{recording-telemetry.js → telemetry.js} +0 -0
package/dist/src/src2.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,x as t}from"./sdk-contracts.js";import{Ot as n}from"./sdk-batch-runner.js";import{_ as r,a as i}from"./sdk-device.js";import{z as a}from"./interaction.js";import{a as o}from"./sdk-remote-config.js";import{i as s,r as c}from"./device.js";import{t as l}from"./bounds.js";import{t as u}from"./parser.js";import d from"node:path";import ee from"node:fs";import f from"node:fs/promises";import{setTimeout as p}from"node:timers/promises";const m={support:`supported`},h={support:`unsupported`},te={lease:m,inventory:{support:`partial`,note:`Inventory exposes only the leased cloud device, not the provider catalog.`},install:{support:`partial`,note:`Requires provider-specific upload or a path visible to the remote Appium server.`},snapshot:{support:`partial`,note:`Uses Appium page source XML, not agent-device native snapshot backends.`},screenshot:m,tap:m,doubleTap:m,longPress:m,swipe:m,scroll:{support:`partial`,note:`Implemented as viewport-relative W3C pointer gestures.`},fill:m,type:m,back:m,home:{support:`partial`,note:`Uses provider/Appium mobile pressButton support where available.`},orientation:{support:`partial`,note:`Uses the WebDriver rotation/orientation endpoints; four-way rotation collapses to portrait/landscape on drivers that only accept the two-way endpoint. Rotates the current display, so an activity that does not pin its orientation may need rotating again once it is foreground.`},appSwitcher:{support:`partial`,note:`Uses provider/Appium mobile pressButton support where available.`},tvRemote:h,"clipboard.read":{support:`partial`,note:`Uses provider/Appium clipboard extension support where available.`},"clipboard.write":{support:`partial`,note:`Uses provider/Appium clipboard extension support where available.`},settings:h,pinch:h,rotateGesture:h,transformGesture:h,logs:h,record:h,artifacts:h,portReverse:h,nativeSnapshotBackend:{support:`unsupported`,note:`Cloud WebDriver cannot upload or run agent-device native runner/helper backends.`}};function ne(e){return{provider:e.provider,platform:e.platform,snapshotBackend:e.platform===`ios`?`xctest`:`android`,snapshotSource:`appium-page-source`,operations:re(te,e.overrides)}}function g(e,t){return e.operations[t].support!==`unsupported`}function _(e,t){let n=e.operations[t],r=n.note?` ${n.note}`:``;return`${e.provider} WebDriver runtime does not support ${t}.${r}`}function re(e,t){let n={...e};for(let[r,i]of Object.entries(t??{}))n[r]=typeof i==`string`?{...e[r],support:i}:{...e[r],...i};return n}function ie(e,t){let n=e?.bundleId??t?.appIdentifierHint,r=e?.packageName??t?.packageNameHint;return{bundleId:n,packageName:r,appName:e?.appName,launchTarget:oe(e?.launchTarget,n,r)}}function ae(e){return e===`ios`?`xctest`:`android`}function oe(...e){return e.find(e=>e!==void 0)}function se(e){let t=async(t,n,r,i,a)=>{let o=e.findSessionForDevice(t);if(!o)return;let s=await le(e,o,t,n,r,i,a);return await o.client.installApp(s?.appReference??r,a),ie(s,i)};return Object.freeze({fact:t=>ce(e.findSessionForDevice(t)),installApp:t,installInstallablePath:async(e,n,r,i)=>await t(e,``,n,r,i),deployApp:async(e,n,r)=>ue(await t(e,n.app,n.appPath,{relaunch:n.replaceExisting,appIdentifierHint:n.app,packageNameHint:n.app},r),n.app),deployMaterializedApp:async(e,n,r)=>ue(await t(e,``,n.artifact.installablePath,{appIdentifierHint:n.artifact.bundleId,packageNameHint:n.artifact.packageName},r))})}function ce(e){return e?g(e.capabilities,`install`)?Object.freeze({available:!0}):Object.freeze({available:!1,reason:`owner-capability-missing`,hint:_(e.capabilities,`install`)}):Object.freeze({available:!1,reason:`owner-capability-missing`,hint:`The WebDriver provider session is no longer active for this device.`})}async function le(t,n,i,a,o,s,c){if(!g(n.capabilities,`install`))throw new e(`UNSUPPORTED_OPERATION`,_(n.capabilities,`install`),{provider:t.provider,deviceId:i.id,platform:r(i)});let l=n.prepared.uploadApp??t.uploadApp;if(l)return await l({provider:t.provider,lease:n.lease,device:i,app:a,appPath:o,options:s,signal:c})}function ue(t,n){if(!t)throw new e(`UNSUPPORTED_OPERATION`,`The WebDriver provider session no longer supports app deployment.`);return{...t.bundleId?{bundleId:t.bundleId}:{},...t.packageName?{packageName:t.packageName}:{},...t.appName?{appName:t.appName}:{},...t.launchTarget??n?{launchTarget:t.launchTarget??n}:{}}}function v(e){return{provider:e.provider,providerSessionId:e.providerSessionId,status:e.artifacts.length>0?`ready`:`pending`,cloudArtifacts:e.artifacts,...e.artifacts.length>0?{}:{message:e.pendingMessage}}}function de(e){return{provider:e.provider,providerSessionId:e.providerSessionId,status:`unavailable`,cloudArtifacts:[],message:e.error instanceof Error?e.error.message:String(e.error)}}function y(e){return{"x-agent-device-client":`agent-device-cli`,"x-agent-device-version":e}}async function fe(n,r){try{await r()}catch(r){n instanceof e&&(n.details={...n.details,cleanupError:t(r)})}}function pe(e,t){return typeof e==`function`?e(t):e}function b(e){return`Basic ${Buffer.from(`${e.username}:${e.accessKey}`).toString(`base64`)}`}function me(e){let t=0;for(;t<e.length&&e.charCodeAt(t)===47;)t+=1;return t===0?e:e.slice(t)}function he(e){let t=e.length-1;for(;t>=0&&e.charCodeAt(t)===47;)--t;return t===e.length-1?e:e.slice(0,t+1)}function ge(e){if(e.pathname.endsWith(`/`))return e;let t=new URL(e);return t.pathname=`${t.pathname}/`,t}const _e=`webdriver_request_timeout`;function ve(t){return t instanceof e&&t.details?.reason===_e}var ye=class{endpoint;headers;requestPolicy;constructor(e){this.endpoint=ge(new URL(e.endpoint)),this.headers={...y(e.clientVersion),...e.auth?{Authorization:b(e.auth)}:{},...e.headers},this.requestPolicy={timeoutMs:e.requestPolicy?.timeoutMs??3e4,retryAttempts:e.requestPolicy?.retryAttempts??1,retryDelayMs:e.requestPolicy?.retryDelayMs??250}}async requestValue(e,t,n,r){return await this.requestValueWithRetries(e,t,n,{retryAttempts:r?.retryAttempts??this.requestPolicy.retryAttempts,timeoutMs:r?.timeoutMs??this.requestPolicy.timeoutMs,signal:r?.signal})}async requestValueWithRetries(e,t,n,r){let i;for(let a=0;a<=r.retryAttempts;a+=1)try{return await this.requestValueOnce(e,t,n,r.timeoutMs,r.signal)}catch(e){if(i=e,!be(e,a,r.retryAttempts,r.signal))throw e;await p(this.requestPolicy.retryDelayMs,void 0,{signal:r.signal})}throw i}async requestValueOnce(e,t,n,r,i){let{ok:a,status:o,text:s}=await this.fetchWebDriver(e,t,n,r,i),c=s?Se(s):{};if(!a)throw Ce(o,c);return xe(c)}async fetchWebDriver(e,t,n,r,i){let a=AbortSignal.timeout(r),o=i?AbortSignal.any([i,a]):a;try{let r=await fetch(new URL(me(t),this.endpoint),{method:e,headers:{Accept:`application/json`,...n===void 0?{}:{"Content-Type":`application/json`},...this.headers},body:n===void 0?void 0:JSON.stringify(n),signal:o});return{ok:r.ok,status:r.status,text:await r.text()}}catch(n){throw a.aborted&&!i?.aborted?we(e,t,r,n):n}}};function be(e,t,n,r){return!r?.aborted&&Te(e)&&t<n}function xe(e){if(!e||typeof e!=`object`)return e;let t=e;return`value`in t?t.value:e}function Se(t){try{return JSON.parse(t)}catch(n){throw new e(`COMMAND_FAILED`,`WebDriver response was not valid JSON.`,{text:t},n)}}function Ce(t,n){let r=n&&typeof n==`object`&&`value`in n?n.value:n;return new e(`COMMAND_FAILED`,r&&typeof r==`object`&&typeof r.message==`string`?r.message:`WebDriver request failed with HTTP ${t}.`,{status:t,response:n})}function we(t,n,r,i){return new e(`COMMAND_FAILED`,`WebDriver ${t} ${n} timed out after ${r}ms.`,{reason:_e,method:t,path:n,timeoutMs:r},i instanceof Error?i:void 0)}function Te(t){if(ve(t))return!0;if(t instanceof e){let e=t.details?.status;return typeof e==`number`&&e>=500}return t instanceof TypeError}var Ee=class{transport;sessionCreateTimeoutMs;sessionId;constructor(e){this.transport=new ye(e),this.sessionCreateTimeoutMs=e.requestPolicy?.sessionCreateTimeoutMs??18e4}async createSession(e,t){let n=ke(await this.requestValue(`POST`,`/session`,{capabilities:Oe(e)},{retryAttempts:0,timeoutMs:Ne(this.sessionCreateTimeoutMs,t?.deadline)}));return this.sessionId=n.sessionId,n}async deleteSession(){let e=this.requireSessionId();await this.requestValue(`DELETE`,`/session/${e}`),this.sessionId=void 0}async installApp(e,t){await this.sessionRequest(`POST`,`/appium/device/install_app`,{appPath:e},{signal:t})}async activateApp(e){try{await this.sessionRequest(`POST`,`/appium/device/activate_app`,{appId:e})}catch{await this.executeScript(`mobile: activateApp`,[{appId:e,bundleId:e}])}}async terminateApp(e){try{await this.sessionRequest(`POST`,`/appium/device/terminate_app`,{appId:e})}catch{await this.executeScript(`mobile: terminateApp`,[{appId:e,bundleId:e}])}}async performActions(e){await this.sessionRequest(`POST`,`/actions`,{actions:e})}async releaseActions(){await this.sessionRequest(`DELETE`,`/actions`,void 0,{retryAttempts:0})}async sendKeys(e){await this.sessionRequest(`POST`,`/keys`,{value:Array.from(e)})}async hideKeyboard(){await this.sessionRequest(`POST`,`/appium/device/hide_keyboard`,void 0,{retryAttempts:0})}async isKeyboardShown(e){let t;try{t=await this.sessionRequest(`GET`,`/appium/device/is_keyboard_shown`,void 0,{retryAttempts:0,...e===void 0?{}:{timeoutMs:e}})}catch(e){if(C(e))return`unsupported`;throw e}return typeof t==`boolean`?t:`unsupported`}async activeElement(e){let t=e===void 0?void 0:Date.now()+e,n;try{n=Me(await this.sessionRequest(`GET`,`/element/active`,void 0,S(t)))}catch(e){if(C(e))return`unsupported`;if(Fe(e))return`none`;throw e}if(n===void 0)return`unsupported`;try{let e=await this.sessionRequest(`GET`,`/element/${encodeURIComponent(n)}/rect`,void 0,S(t));return{id:n,rect:De(e)}}catch(e){if(C(e))return`unsupported`;if(Fe(e))return`none`;throw e}}async back(){await this.sessionRequest(`POST`,`/back`)}async setRotation(e){await this.sessionRequest(`POST`,`/rotation`,{x:0,y:0,z:e})}async setOrientation(e){await this.sessionRequest(`POST`,`/orientation`,{orientation:e})}async source(){let t=await this.sessionRequest(`GET`,`/source`);if(typeof t!=`string`)throw new e(`COMMAND_FAILED`,`WebDriver source response was not a string`,{valueType:typeof t});return t}async screenshot(t){let n=await this.sessionRequest(`GET`,`/screenshot`);if(typeof n!=`string`)throw new e(`COMMAND_FAILED`,`WebDriver screenshot response was not base64 text`,{valueType:typeof n});await f.writeFile(t,Buffer.from(n,`base64`))}async windowRect(){return De(await this.sessionRequest(`GET`,`/window/rect`))}async executeScript(e,t=[]){return await this.sessionRequest(`POST`,`/execute/sync`,{script:e,args:t})}async sessionRequest(e,t,n,r){let i=this.requireSessionId();return await this.requestValue(e,`/session/${i}${t}`,n,r)}requireSessionId(){if(!this.sessionId)throw new e(`SESSION_NOT_FOUND`,`WebDriver session has not been created yet.`);return this.sessionId}async requestValue(e,t,n,r){return await this.transport.requestValue(e,t,n,r)}};function De(t){if(!t||typeof t!=`object`)throw new e(`COMMAND_FAILED`,`WebDriver window rect response was empty.`);let n=t,r={x:x(n,`x`),y:x(n,`y`),width:x(n,`width`),height:x(n,`height`)};if(r.x===void 0||r.y===void 0||r.width===void 0||r.height===void 0)throw new e(`COMMAND_FAILED`,`WebDriver window rect response was invalid.`,{response:n});return r}function x(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function Oe(e){return`alwaysMatch`in e||`firstMatch`in e?e:{alwaysMatch:e}}function ke(t){if(!t||typeof t!=`object`)throw new e(`COMMAND_FAILED`,`WebDriver create-session response was empty.`);let n=t,r=typeof n.sessionId==`string`?n.sessionId:typeof n.session_id==`string`?n.session_id:void 0;if(!r)throw new e(`COMMAND_FAILED`,`WebDriver create-session response missed sessionId.`,{response:n});return{sessionId:r,capabilities:n.capabilities&&typeof n.capabilities==`object`?n.capabilities:{}}}const Ae=new Set([405,501]),je=new Set([`unknown command`,`unknown method`]);function Me(e){if(!e||typeof e!=`object`)return;let t=e,n=t[`element-6066-11e4-a52e-4f735466cecf`]??t.ELEMENT;return typeof n==`string`&&n.length>0?n:void 0}function S(e){return e===void 0?{retryAttempts:0}:{retryAttempts:0,timeoutMs:Pe(e)}}function Ne(e,t){return t===void 0?e:Math.min(e,Pe(t))}function Pe(e){return Math.max(0,e-Date.now())}function Fe(t){return t instanceof e?w(t).toLowerCase()===`no such element`:!1}function C(t){if(!(t instanceof e))return!1;let n=t.details?.status;return typeof n==`number`&&Ae.has(n)?!0:je.has(w(t).toLowerCase())}function w(e){let t=e.details?.response,n=t&&typeof t==`object`?t.value:void 0,r=n&&typeof n==`object`?n.error:void 0;return typeof r==`string`?r:``}function T(e,t){return{type:`pointer`,id:e,parameters:{pointerType:`touch`},actions:t}}function E(t){let n;try{n=u(t)}catch(t){throw new e(`COMMAND_FAILED`,`Failed to parse WebDriver page source XML: ${t instanceof Error?t.message:String(t)}`,void 0,t)}let r=[];for(let e of n)D(r,e);return r}function D(e,t,n,r=0){let i=Object.keys(t.attributes).length===0?n:Ie(e,t,n,r),a=i===n?r:r+1;for(let n of t.children)D(e,n,i,a)}function Ie(e,t,n,r){let i=e.length;return e.push(Le(i,t.name,t.attributes,n,r)),i}function Le(e,t,n,r,i){let a=Re(n),o=A(n.enabled,!0),s=A(n.displayed??n.visible,!0);return{index:e,type:t,role:ze(t,n),label:O(n,[`content-desc`,`label`,`text`,`name`]),value:k(n.value),identifier:O(n,[`resource-id`,`id`,`accessibility-id`,`name`]),rect:a,enabled:o,selected:A(n.selected),focused:A(n.focused),visibleToUser:s,hittable:s&&o&&a!==void 0&&a.width>0&&a.height>0,depth:i,parentIndex:r}}function Re(e){let t=l(e.bounds??null);if(t)return t;let n=j(e.x),r=j(e.y),i=j(e.width),a=j(e.height);if(!(n===void 0||r===void 0||i===void 0||a===void 0))return{x:n,y:r,width:i,height:a}}function O(e,t){for(let n of t){let t=k(e[n]);if(t!==void 0)return t}}function k(e){return e||void 0}function A(e,t=!1){return e===void 0?t:e===`true`||e===`1`}function j(e){if(e===void 0||e===``)return;let t=Number(e);return Number.isFinite(t)?t:void 0}function ze(e,t){return k(t.class)??k(e.replace(/^XCUIElementType/,``).toLowerCase())}function Be(e){let t=E(e).flatMap(e=>Ve(e)&&He(e.rect)?[e.rect]:[]).sort((e,t)=>t.width*t.height-e.width*e.height)[0];return t?{x:t.x,y:t.y,width:t.width,height:t.height}:void 0}function Ve(e){let t=e.type?.toLowerCase()??``;return e.visibleToUser!==!1&&(t.includes(`scrollview`)||t.includes(`listview`)||t.includes(`recyclerview`))}function He(e){return!!e&&e.width>=50&&e.height>=50}async function Ue(t,n,r){let i=[];for(let e of n===`android`?[`rotation`,`orientation`]:[`orientation`,`rotation`])try{await Je(t,e,r);return}catch(t){if(!Ke(t))throw t;i.push({transport:e,error:t instanceof Error?t.message:String(t)})}throw new e(`COMMAND_FAILED`,`Could not set device orientation to ${r} on the hosted WebDriver session.`,{hint:`The provider driver rejected both orientation endpoints. Set the orientation as a session capability instead, for example connect --provider-device-orientation portrait.`,rotation:r,attempts:i})}const We=new Set([`unknown command`,`unknown method`]),Ge=new Set([404,405]);function Ke(t){if(!(t instanceof e)||t.code===`SESSION_NOT_FOUND`)return!1;let n=qe(t.details?.response);if(n)return We.has(n);let r=t.details?.status;return typeof r==`number`&&Ge.has(r)}function qe(e){if(!e||typeof e!=`object`)return``;let t=e.value;if(!t||typeof t!=`object`)return``;let n=t.error;return typeof n==`string`?n:``}async function Je(e,t,n){if(t===`rotation`){await e.setRotation(s(n));return}await e.setOrientation(c(n))}const M=1500;function Ye(e){return new Promise(t=>setTimeout(t,e))}function N(t,n,r){return new e(`COMMAND_FAILED`,`fill tapped (${t}, ${n}) but ${r}`,{reason:`text_entry_focus_not_observed`,x:t,y:n,hint:`The tap most likely missed the field. Re-check the target with snapshot -i and fill the element it reports, rather than retrying the same coordinates.`})}function Xe(t,n){return new e(`COMMAND_FAILED`,`fill tapped (${t}, ${n}) but this driver reports neither the focused element nor keyboard state, so the text was not sent`,{reason:`text_entry_focus_unobservable`,x:t,y:n,hint:`This provider cannot confirm a field took focus. Use press <target> followed by type <text> to enter it anyway, accepting that nothing witnesses which field receives the keys.`})}function Ze(e,t,n){return t>=e.x&&t<=e.x+e.width&&n>=e.y&&n<=e.y+e.height}function Qe(e){return new $e(e.client,e.backend,e.capabilities)}var $e=class{client;backend;capabilities;constructor(e,t,n){this.client=e,this.backend=t,this.capabilities=n}async open(e,t){if(t?.url){await this.client.executeScript(`mobile: deepLink`,[{url:t.url,package:e}]);return}let n=t?.appBundleId??e;n&&await this.client.activateApp(n)}async openDevice(){await this.client.executeScript(`mobile: activateApp`,[{}])}async close(e){e&&await this.client.terminateApp(e)}async tap(e,t){return this.requireSupport(`tap`),await this.pointerGesture(`tap`,[{type:`pointerMove`,duration:0,x:e,y:t},{type:`pointerDown`,button:0},{type:`pointerUp`,button:0}]),{backend:`webdriver`,x:e,y:t}}async doubleTap(e,t){return this.requireSupport(`doubleTap`),await this.pointerGesture(`doubleTap`,[{type:`pointerMove`,duration:0,x:e,y:t},{type:`pointerDown`,button:0},{type:`pointerUp`,button:0},{type:`pause`,duration:80},{type:`pointerDown`,button:0},{type:`pointerUp`,button:0}]),{backend:`webdriver`,x:e,y:t}}async swipe(e,t,n,r,i=400){return this.requireSupport(`swipe`),await this.pointerGesture(`swipe`,[{type:`pointerMove`,duration:0,x:e,y:t},{type:`pointerDown`,button:0},{type:`pointerMove`,duration:i,x:n,y:r},{type:`pointerUp`,button:0}]),{backend:`webdriver`,x1:e,y1:t,x2:n,y2:r,durationMs:i}}async longPress(e,t,n=600){return this.requireSupport(`longPress`),await this.pointerGesture(`longPress`,[{type:`pointerMove`,duration:0,x:e,y:t},{type:`pointerDown`,button:0},{type:`pause`,duration:n},{type:`pointerUp`,button:0}]),{backend:`webdriver`,x:e,y:t,durationMs:n}}async focus(e,t){return await this.tap(e,t)}async type(e){this.requireSupport(`type`),await this.client.sendKeys(e)}async fill(e,t,n,r){this.requireSupport(`fill`);let i=await this.readTextEntryState();await this.tap(e,t);let a=await this.awaitTextEntryReadiness(i,e,t);return await this.type(n),{backend:`webdriver`,x:e,y:t,text:n,textEntryReadiness:a}}async scroll(e,t){this.requireSupport(`scroll`);let n=t?.durationMs??350;await this.client.hideKeyboard().catch(()=>void 0);let r=await this.scrollGestureFrame(),i=a({direction:e,amount:t?.amount,pixels:t?.pixels,referenceWidth:r.width,referenceHeight:r.height}),o={...i,x1:i.x1+r.x,y1:i.y1+r.y,x2:i.x2+r.x,y2:i.y2+r.y};return await this.swipe(o.x1,o.y1,o.x2,o.y2,n),{backend:`webdriver`,...o,distance:i.pixels,durationMs:n}}async gestureViewport(){return await this.scrollGestureFrame()}async performGesture(e){return this.requireSupport(tt(e)),await this.client.performActions(e.pointers.map(e=>T(`gesture-pointer-${e.pointerId}`,et(e.samples)))),await this.client.releaseActions().catch(()=>void 0),{backend:`webdriver-w3c-actions`}}async screenshot(e,t){this.requireSupport(`screenshot`),await this.client.screenshot(e)}async snapshot(e){return this.requireSupport(`snapshot`),{backend:this.backend,nodes:E(await this.client.source())}}async back(e){this.requireSupport(`back`),await this.client.back()}async home(){this.requireSupport(`home`),await this.client.executeScript(`mobile: pressButton`,[{name:`home`}])}async setOrientation(e){this.requireSupport(`orientation`),await Ue(this.client,this.backend,e)}async appSwitcher(){this.requireSupport(`appSwitcher`),await this.client.executeScript(`mobile: pressButton`,[{name:`appSwitch`}])}async tvRemote(e,t){this.unsupported(`tvRemote`)}async readClipboard(){this.requireSupport(`clipboard.read`);let e=await this.client.executeScript(`mobile: getClipboard`,[{}]);return typeof e==`string`?e:``}async writeClipboard(e){this.requireSupport(`clipboard.write`),await this.client.executeScript(`mobile: setClipboard`,[{content:e}])}async setSetting(e,t,n,r){this.unsupported(`settings`)}async awaitTextEntryReadiness(e,t,n){let r=e.keyboard,i=Date.now()+2e3,a=e.focusedElementId,o=await this.pollWithinBudget(i,async e=>{let r=await this.client.activeElement(e);return r===`unsupported`?`abandon`:r===`none`?`retry`:r.id!==a||Ze(r.rect,t,n)?`satisfied`:`retry`});if(o===`satisfied`)return`focused-element`;if(o===`expired`)throw N(t,n,`nothing there took text-entry focus, so the text was not sent`);if(r===`unsupported`)throw Xe(t,n);if(r)throw N(t,n,`the keyboard was already up and this driver cannot report which field holds focus, so the text was not sent`);if(await this.pollWithinBudget(i,async e=>await this.client.isKeyboardShown(e)===!0?`satisfied`:`retry`)===`satisfied`)return`keyboard-shown`;throw N(t,n,`no keyboard appeared, so the text was not sent`)}async readTextEntryState(){let[e,t]=await Promise.all([this.client.isKeyboardShown(M),this.client.activeElement(M)]);return{keyboard:e,focusedElementId:t===`none`||t===`unsupported`?void 0:t.id}}async pollWithinBudget(e,t){let n=!1,r;for(;;){let i=e-Date.now();if(i<=0)break;try{let e=await t(Math.min(M,i));if(n=!0,e!==`retry`)return e}catch(e){r=e}let a=e-Date.now();if(a<=0)break;await Ye(Math.min(100,a))}if(!n&&r!==void 0)throw r;return`expired`}async pointerGesture(e,t){await this.client.performActions([T(e,t)]),await this.client.releaseActions().catch(()=>void 0)}async scrollGestureFrame(){return await this.client.source().then(e=>Be(e)).catch(()=>void 0)||await this.client.windowRect()}requireSupport(e){g(this.capabilities,e)||this.unsupported(e)}unsupported(t){throw new e(`UNSUPPORTED_OPERATION`,_(this.capabilities,t),{provider:this.capabilities.provider,platform:this.capabilities.platform,operation:t})}};function et(t){let n=t[0];if(!n)throw new e(`INVALID_ARGS`,`WebDriver gesture pointer requires samples`);let r=[{type:`pointerMove`,duration:0,x:n.point.x,y:n.point.y},{type:`pointerDown`,button:0}];for(let e=1;e<t.length;e+=1){let n=t[e-1],i=t[e];r.push({type:`pointerMove`,duration:i.offsetMs-n.offsetMs,x:i.point.x,y:i.point.y})}return r.push({type:`pointerUp`,button:0}),r}function tt(e){if(e.topology===`single`)return`swipe`;switch(e.intent){case`pan`:case`transform`:return`transformGesture`;case`pinch`:return`pinch`;case`rotate`:return`rotateGesture`}}var nt=class{sessionsByLeaseId=new Map;ownedDeviceIds=new Set;releasedProviderSessionIdsByLeaseId=new Map;options;constructor(e){this.options=e}ownsDevice(e){return this.ownedDeviceIds.has(e.id)}findSessionForDevice(e){return[...this.sessionsByLeaseId.values()].find(t=>t.device.id===e.id)}findSessionForLease(e){return this.sessionsByLeaseId.get(e)}getInteractor(e){return this.findSessionForDevice(e)?.interactor}heartbeat(e){if(e.leaseProvider===this.options.provider&&this.sessionsByLeaseId.has(e.leaseId))return{provider:this.options.provider}}async allocate(e,t){if(e.leaseProvider!==this.options.provider)return;if(this.sessionsByLeaseId.has(e.leaseId))return this.heartbeat(e);let n=await this.prepareSession(e,t),r=new Ee({clientVersion:this.options.clientVersion,endpoint:n.endpoint,auth:n.auth,headers:n.headers,requestPolicy:this.options.requestPolicy}),i=await this.createSessionWithPreparedCleanup(r,n,e,t),a=this.deviceForLease(e,n),o=n.providerSessionId??i.sessionId,s=ne({provider:this.options.provider,platform:n.platform,overrides:this.options.capabilityOverrides});return this.sessionsByLeaseId.set(e.leaseId,Object.freeze({lease:e,device:a,client:r,prepared:n,capabilities:s,webDriverSessionId:i.sessionId,providerSessionId:o,interactor:Qe({client:r,backend:ae(n.platform),capabilities:s})})),this.ownedDeviceIds.add(a.id),{provider:this.options.provider,deviceId:a.id,sessionId:i.sessionId,providerSessionId:o,capabilities:s,...n.providerData}}async release(e){if(e.leaseProvider!==this.options.provider)return;let t=this.sessionsByLeaseId.get(e.leaseId);if(!t)return;this.sessionsByLeaseId.delete(e.leaseId),this.releasedProviderSessionIdsByLeaseId.set(e.leaseId,t.providerSessionId);let n=await this.closeSession(t),r=await this.safeListArtifacts(t);return{provider:this.options.provider,providerSessionId:t.providerSessionId,...n.cleanup,...n.warnings.length>0?{warnings:n.warnings}:{},...r?{cloudArtifacts:r}:{}}}async listCloudArtifacts(e){if(e.provider!==this.options.provider)return;let t=e.leaseId?this.sessionsByLeaseId.get(e.leaseId):void 0;if(t)return await this.safeListArtifacts(t);let n=e.providerSessionId??(e.leaseId?this.releasedProviderSessionIdsByLeaseId.get(e.leaseId):void 0);if(!(!n||!this.options.listArtifacts))return await this.options.listArtifacts({provider:this.options.provider,providerSessionId:n})}async shutdown(){await Promise.allSettled([...this.sessionsByLeaseId.values()].map(async e=>await this.closeSession(e))),this.sessionsByLeaseId.clear(),this.ownedDeviceIds.clear()}async createSessionWithPreparedCleanup(e,t,n,r){try{return await e.createSession(t.webdriverCapabilities,{deadline:r?.deadline})}catch(e){let r=ve(e)?rt(e,this.options.provider,n,t):e;throw await fe(r,()=>t.cleanup?.()),r}}async prepareSession(e,t){let n=this.baseSessionForLease(e);return this.options.prepareSession?await this.options.prepareSession({lease:e,req:t,base:n}):n}baseSessionForLease(e){let t=typeof this.options.webdriverCapabilities==`function`?this.options.webdriverCapabilities(e):this.options.webdriverCapabilities??{};return{provider:this.options.provider,endpoint:this.options.endpoint,platform:this.options.platform,deviceName:this.options.deviceName,auth:this.options.auth,headers:this.options.headers,webdriverCapabilities:P(this.options.platform,this.options.deviceName,t)}}deviceForLease(e,t){return{...i(t.platform),...t.platform===`ios`?{appleOs:`ios`}:{},id:t.deviceId??this.options.deviceId?.(e)??`${this.options.provider}:${t.platform}:${e.leaseId}`,name:t.deviceName,kind:`device`,target:`mobile`,booted:!0}}async closeSession(e){let n=[],r;try{await e.client.deleteSession()}catch(e){n.push({code:`WEBDRIVER_SESSION_DELETE_FAILED`,message:t(e)})}try{r=await e.prepared.cleanup?.()}catch(e){n.push({code:`PROVIDER_CLEANUP_FAILED`,message:t(e)})}return{cleanup:r,warnings:n}}async safeListArtifacts(e){let t=e.prepared.listArtifacts??this.options.listArtifacts;if(t)try{return await t({provider:this.options.provider,lease:e.lease,device:e.device,webDriverSessionId:e.webDriverSessionId,providerSessionId:e.providerSessionId})}catch(t){return de({provider:this.options.provider,providerSessionId:e.providerSessionId,error:t})}}};function P(e,t,n={}){return{platformName:e===`ios`?`iOS`:`Android`,"appium:deviceName":t,...n}}function rt(t,n,r,i){let a=t.details?.timeoutMs;return new e(`COMMAND_FAILED`,`${n} did not create the WebDriver session within ${String(a)}ms.`,{reason:`provider_session_create_timeout`,provider:n,leaseId:r.leaseId,runId:r.runId,timeoutMs:a,...i.providerSessionId?{providerSessionId:i.providerSessionId}:{},hint:`${n} may still finish creating the session after agent-device stopped waiting, and that session would keep billing until the provider reaps it. Before retrying, check ${n} for a running session created for lease ${r.leaseId} (run ${r.runId}) and stop it.`},t)}function F(e){return new it(e)}var it=class{provider;owner;leaseLifecycle;cloudArtifacts;deviceInventoryProvider;capabilities;platformRuntimeModule;sessions;deployment;constructor(e){this.provider=e.provider,this.owner=n(e.provider,e.platform),this.capabilities=ne({provider:e.provider,platform:e.platform,overrides:e.capabilityOverrides}),this.sessions=new nt(e),this.deployment=se({provider:e.provider,uploadApp:e.uploadApp,findSessionForDevice:e=>this.sessions.findSessionForDevice(e)}),this.platformRuntimeModule=Object.freeze({owner:this.owner,loadRuntime:async e=>await this.loadRuntime(e)}),this.leaseLifecycle={allocate:async(e,t)=>await this.sessions.allocate(e,t),heartbeat:async e=>this.sessions.heartbeat(e),release:async e=>await this.sessions.release(e)},this.cloudArtifacts={listCloudArtifacts:async e=>await this.sessions.listCloudArtifacts(e)},this.deviceInventoryProvider=async e=>{if(e.leaseProvider!==this.provider)return null;if(!e.leaseId)return[];let t=this.sessions.findSessionForLease(e.leaseId);return t?[t.device]:[]}}async loadRuntime(e){let{createWebDriverPlatformRuntimeOwner:t}=await import(`./platform-runtime2.js`);return t({host:e,owner:this.owner,ownsDevice:e=>this.ownsDevice(e),isSessionActive:e=>this.sessions.findSessionForDevice(e)!==void 0,deployment:this.deployment,snapshotAvailable:this.capabilities.operations.snapshot.support!==`unsupported`,getInteractor:e=>this.getInteractor(e)})}ownsDevice(e){return this.sessions.ownsDevice(e)}getInteractor(e){return this.sessions.getInteractor(e)}async installApp(e,t,n,r){return await this.deployment.installApp(e,t,n,r)}async installInstallablePath(e,t,n){return await this.deployment.installInstallablePath(e,t,n)}async shutdown(){await this.sessions.shutdown()}};async function I(e,t,n){if(t)return v({provider:e,providerSessionId:t,artifacts:(await Promise.all([n.listArtifacts(t,`FILE`),n.listArtifacts(t,`LOG`)])).flat().flatMap(n=>ot(e,t,n)),pendingMessage:`AWS Device Farm artifacts are not ready yet.`})}function at(e){if(!e||typeof e!=`object`)return[];let t=e.artifacts;return Array.isArray(t)?t:[]}function ot(e,t,n){let r=n.url;return typeof r!=`string`||r.length===0?[]:[{provider:e,providerSessionId:t,kind:st(n.type),name:n.name??n.type??`AWS Device Farm artifact`,url:r,providerArtifactId:n.arn,extension:n.extension,availability:`ready`,metadata:{awsType:n.type,...n.metadata?{awsMetadata:n.metadata}:{}}}]}function st(e){switch(e){case`VIDEO`:return`video`;case`APPIUM_SERVER_OUTPUT`:return`appium-log`;case`DEVICE_LOG`:return`device-log`;case`MESSAGE_LOG`:case`UNKNOWN`:return`automation-log`;default:return`raw`}}const L={browserStack:`browserstack`,awsDeviceFarm:`aws-device-farm`},ct=new Set(Object.values(L));function lt(e){return e!==void 0&&ct.has(e)}L.awsDeviceFarm;const ut={install:{support:`unsupported`,note:`Pass appArn when creating the remote access session; local artifact upload/install is not implemented.`},portReverse:{support:`unsupported`,note:`AWS Device Farm remote access does not expose agent-device port reverse.`},artifacts:{support:`supported`,note:`AWS Device Farm remote access exposes provider-hosted video, Appium logs, and device logs after session completion.`}};function R(e){let t=z(e);return{createRemoteAccessSession:async e=>B(await t(`create-remote-access-session`,[`--project-arn`,e.projectArn,`--device-arn`,e.deviceArn,`--name`,e.name,...e.appArn?[`--app-arn`,e.appArn]:[],...e.interactionMode?[`--interaction-mode`,e.interactionMode]:[],...e.configuration?[`--configuration`,JSON.stringify(e.configuration)]:[]])),getRemoteAccessSession:async e=>B(await t(`get-remote-access-session`,[`--arn`,e])),stopRemoteAccessSession:async e=>B(await t(`stop-remote-access-session`,[`--arn`,e])),listArtifacts:async(e,n)=>at(await t(`list-artifacts`,[`--arn`,e,`--type`,n]))}}function dt(t){return async({lease:n,req:r,base:i})=>{let a=await t.client.createRemoteAccessSession({projectArn:t.projectArn,deviceArn:t.deviceArn,appArn:t.appArn,name:pe(t.sessionName,n)??`agent-device-${n.leaseId}`,interactionMode:t.interactionMode,configuration:t.configuration}),o,s;try{if(o=await mt(a.arn,t,r),s=ft(o),!s)throw new e(`COMMAND_FAILED`,`AWS Device Farm did not expose a WebDriver endpoint.`,{sessionArn:o.arn,status:o.status})}catch(e){throw await fe(e,()=>t.client.stopRemoteAccessSession(a.arn)),e}let c=o.device?.name??t.deviceName,l=typeof t.webdriverCapabilities==`function`?t.webdriverCapabilities(n):t.webdriverCapabilities??{};return{...i,endpoint:s,platform:t.platform,deviceName:c,webdriverCapabilities:P(t.platform,c,l),cleanup:async()=>(await t.client.stopRemoteAccessSession(o.arn),{awsDeviceFarmSessionArn:o.arn}),providerSessionId:o.arn,providerData:{awsDeviceFarmSessionArn:o.arn}}}}function ft(e){let t=e.endpoints&&typeof e.endpoints==`object`?Object.values(e.endpoints):[],n=[e.remoteDriverEndpoint,e.endpoint,...t,e.remoteDebugUrl,e.remoteRecordAppUrl].filter(e=>typeof e==`string`&&e.length>0).find(e=>!/^wss?:\/\//i.test(e));return n?pt(n):void 0}function pt(e){return/^https?:\/\//i.test(e)?e:`http://${e}`}async function mt(t,n,r){let i=n.pollIntervalMs??5e3,a=Date.now(),o=r?.deadline??a+(n.startupTimeoutMs??12e4),s=r?.signal,c=await n.client.getRemoteAccessSession(t);for(;Date.now()<o;){if(s?.throwIfAborted(),c.status===`RUNNING`)return c;gt(c),await p(i,void 0,{signal:s}).catch(()=>s?.throwIfAborted()),c=await n.client.getRemoteAccessSession(t)}throw new e(`COMMAND_FAILED`,`Timed out waiting for AWS Device Farm remote access.`,{sessionArn:t,status:c.status,result:c.result,timeoutMs:o-a})}const ht=new Set([`ERRORED`,`STOPPED`,`COMPLETED`]);function gt(t){if(!(!t.status||!ht.has(t.status)))throw new e(`COMMAND_FAILED`,`AWS Device Farm remote access session did not start.`,{sessionArn:t.arn,status:t.status,result:t.result})}async function _t(t,n,r){let i=await t(n,r);try{return JSON.parse(i.stdout)}catch(t){throw new e(`COMMAND_FAILED`,`AWS Device Farm returned invalid JSON.`,void 0,t)}}function z(e){let t=e.region?[`--region`,e.region]:[],n=e.awsCommand??`aws`;return async(r,i)=>await _t(e.runHostCommand,n,[`devicefarm`,r,...t,...i,`--output`,`json`])}function B(t){if(!t||typeof t!=`object`)throw new e(`COMMAND_FAILED`,`AWS Device Farm response was not an object.`,{response:t});let n=t.remoteAccessSession;if(!n||typeof n!=`object`)throw new e(`COMMAND_FAILED`,`AWS Device Farm response missed remoteAccessSession.`,{response:t});return n}const V=[{field:`providerDeviceOrientation`,capability:`deviceOrientation`,flag:`--provider-device-orientation`,type:`enum`,enumValues:o},{field:`providerGeoLocation`,capability:`geoLocation`,flag:`--provider-geo-location`,type:`string`},{field:`providerTimezone`,capability:`timezone`,flag:`--provider-timezone`,type:`string`},{field:`providerLanguage`,capability:`language`,flag:`--provider-language`,type:`string`},{field:`providerLocale`,capability:`locale`,flag:`--provider-locale`,type:`string`},{field:`providerNetworkProfile`,capability:`networkProfile`,flag:`--provider-network-profile`,type:`string`},{field:`providerCustomNetwork`,capability:`customNetwork`,flag:`--provider-custom-network`,type:`string`},{field:`providerNoResignApp`,capability:`resignApp`,flag:`--provider-no-resign-app`,type:`negated-boolean`,platform:`ios`}];function vt(e,t){wt(e);let n={};for(let r of V){let i=e[r.field];i===void 0||i===!1||i===``||(Ct(r,t),n[r.capability]=r.type===`negated-boolean`?!1:i)}return n}function yt(e){return V.filter(t=>{let n=e?.[t.field];return n!==void 0&&n!==!1&&n!==``}).map(e=>e.flag)}function H(t,n){let r=yt(t);if(r.length===0)return;let i=r.length!==1;throw new e(`INVALID_ARGS`,`${r.join(`, `)} ${i?`are`:`is`} only supported by BrowserStack, not ${n}.`,{hint:`Drop ${i?`those flags`:`the flag`} or use the browserstack provider.`,provider:n,flags:r})}function bt(e){let t={};for(let n of V){let r=e?.[n.field];if(n.type===`negated-boolean`){r===!0&&(t.providerNoResignApp=!0);continue}typeof r!=`string`||r.length===0||xt(t,n,r)}return t}function xt(e,t,n){if(t.field===`providerDeviceOrientation`){e.providerDeviceOrientation=St(t,n);return}t.field!==`providerNoResignApp`&&(e[t.field]=n)}function St(t,n){let r=o.find(e=>e===n);if(r)return r;throw new e(`INVALID_ARGS`,`Invalid ${t.flag} value: ${n}.`,{hint:`Use ${o.join(`|`)}.`,flag:t.flag,capability:t.capability})}function Ct(t,n){if(!(!t.platform||t.platform===n))throw new e(`INVALID_ARGS`,`${t.flag} applies to ${t.platform} sessions only, but the session platform is ${n}.`,{hint:`Drop ${t.flag} or connect with --platform ${t.platform}.`,flag:t.flag,capability:t.capability,platform:n})}function wt(t){if(!(!t.providerNetworkProfile||!t.providerCustomNetwork))throw new e(`INVALID_ARGS`,`BrowserStack accepts either a named network profile or a custom network shape, not both.`,{hint:`Pass only one of --provider-network-profile or --provider-custom-network.`,networkProfile:t.providerNetworkProfile,customNetwork:t.providerCustomNetwork})}L.browserStack;const Tt={install:{support:`partial`,note:`Local app artifacts are uploaded to BrowserStack App Automate, then installed with Appium.`},portReverse:{support:`unsupported`,note:`Use BrowserStack Local for network tunneling; agent-device port reverse is not available.`},artifacts:{support:`supported`,note:`BrowserStack session details expose provider-hosted video, Appium logs, device logs, and dashboard links.`}};async function U(e,t,n){if(t)return v({provider:e,providerSessionId:t,artifacts:At(e,t,await kt(t,n)),pendingMessage:`BrowserStack artifacts are not ready yet.`})}async function W(t,n,r){r?.throwIfAborted();let i=await f.readFile(t),a=new FormData;a.set(`file`,new Blob([i]),d.basename(t));let o=await fetch(n.endpoint??`https://api-cloud.browserstack.com/app-automate/upload`,{method:`POST`,headers:{...y(n.clientVersion),Authorization:b(n)},body:a,signal:r}),s=await o.json(),c=jt(s);if(!o.ok||!c)throw new e(`COMMAND_FAILED`,`BrowserStack app upload failed.`,{status:o.status,response:s});return c}function Et(e){return async({appPath:t,options:n,signal:r})=>({appReference:await W(t,e,r),bundleId:n?.appIdentifierHint,packageName:n?.packageNameHint,launchTarget:n?.appIdentifierHint??n?.packageNameHint})}function Dt(e){let{"bstack:options":t,...n}=e.configured??{};return{device:e.deviceName,os_version:e.osVersion,...e.app?{app:e.app}:{},...n,"bstack:options":{...e.projectName?{projectName:e.projectName}:{},buildName:e.buildName,sessionName:e.sessionName,...e.deviceFeatures??{},...Ot(t)}}}function Ot(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}async function kt(t,n){let r=new URL(`${he(String(n.endpoint??`https://api-cloud.browserstack.com/app-automate/sessions`))}/${t}.json`),i=await fetch(r,{headers:{...y(n.clientVersion),Authorization:b(n)}}),a=await i.json();if(!i.ok||!a||typeof a!=`object`)throw new e(`COMMAND_FAILED`,`BrowserStack session details lookup failed.`,{status:i.status,response:a});let o=a.automation_session??a;return o&&typeof o==`object`?o:{}}function At(e,t,n){return[G(e,t,n,`video_url`,`video`,`Session video`),G(e,t,n,`appium_logs_url`,`appium-log`,`Appium logs`),G(e,t,n,`device_logs_url`,`device-log`,`Device logs`),G(e,t,n,`browser_url`,`provider-session`,`BrowserStack dashboard`),G(e,t,n,`public_url`,`provider-session`,`Public session link`)].filter(e=>e!==void 0)}function G(e,t,n,r,i,a){let o=n[r];if(!(typeof o!=`string`||o.length===0))return{provider:e,providerSessionId:t,kind:i,name:a,url:o,availability:`ready`}}function jt(e){if(!e||typeof e!=`object`)return;let t=e.app_url;return typeof t==`string`?t:void 0}function K(e){return/^arn:[^:]+:devicefarm:([^:]+):/.exec(e)?.[1]}async function Mt(t,n){let r=z({runHostCommand:n,region:t.region}),[i,a,o]=await Promise.all([r(`get-project`,[`--arn`,t.projectArn]),r(`get-device`,[`--arn`,t.deviceArn]),t.appArn?r(`get-upload`,[`--arn`,t.appArn]):void 0]),s=q(i,`project`),c=q(a,`device`),l=Pt(c.platform);if(l!==t.platform)throw new e(`INVALID_ARGS`,`AWS Device Farm device "${J(c.name)??t.deviceArn}" is ${l}, not ${t.platform}.`);let u=t.appArn?Nt(q(o,`upload`),t):{status:`missing`,message:`No app upload is attached; AWS Device Farm does not support install after allocation. Reconnect with --aws-app-arn <arn>.`};return{provider:`aws-device-farm`,service:`AWS Device Farm`,verificationMessage:t.appArn?`Credentials, project, device, and app upload verified.`:`Credentials, project, and device verified.`,project:{name:J(s.name),reference:t.projectArn},device:{status:`verified`,name:J(c.name)??t.deviceArn,reference:t.deviceArn,platform:l,osVersion:J(c.os),availability:J(c.availability)},app:u}}function Nt(t,n){let r=J(t.status);if(r!==`SUCCEEDED`)throw new e(`COMMAND_FAILED`,`AWS Device Farm app upload is not ready (${r??`unknown status`}).`,{status:r,hint:`Wait for the upload to succeed or reconnect with a different --aws-app-arn.`});let i=n.platform===`android`?`ANDROID_APP`:`IOS_APP`,a=J(t.type);if(a!==i)throw new e(`INVALID_ARGS`,`AWS Device Farm app upload type is ${a??`unknown`}, expected ${i}.`);return{status:`verified`,name:J(t.name),reference:n.appArn}}function q(t,n){if(!t||typeof t!=`object`)throw new e(`COMMAND_FAILED`,`AWS Device Farm ${n} response was not an object.`);let r=t[n];if(!r||typeof r!=`object`||Array.isArray(r))throw new e(`COMMAND_FAILED`,`AWS Device Farm response missed ${n}.`);return r}function Pt(t){if(t===`ANDROID`)return`android`;if(t===`IOS`)return`ios`;throw new e(`UNSUPPORTED_PLATFORM`,`AWS Device Farm device platform is ${String(t)}.`)}function J(e){return typeof e==`string`&&e.length>0?e:void 0}async function Ft(t,n){let r={username:t.username,accessKey:t.accessKey},i=zt(await Lt(t.devicesEndpoint??`https://api-cloud.browserstack.com/app-automate/devices.json`,r,n)).find(e=>e.device===t.deviceName&&e.os.toLowerCase()===t.platform&&Rt(e.osVersion,t.osVersion));if(!i)throw new e(`INVALID_ARGS`,`BrowserStack device "${t.deviceName}" with ${t.platform} ${t.osVersion} is not available.`,{hint:`Choose an exact device and OS version from the BrowserStack App Automate device list.`});let a=await It(t,r,n);return{provider:`browserstack`,service:`BrowserStack`,verificationMessage:a.status===`verified`?`Credentials, device, and uploaded app verified.`:`Credentials and device access verified; app availability is checked when the session is created.`,device:{status:`verified`,name:i.device,platform:t.platform,osVersion:i.osVersion},app:a}}async function It(e,t,n){let{app:r}=e;if(r.startsWith(`bs://`)){let i=Bt(await Lt(e.appsEndpoint??`https://api-cloud.browserstack.com/app-automate/recent_apps?limit=100`,t,n)).find(e=>e.reference===r);return i?{status:`verified`,...i}:{status:`configured`,reference:r,message:`App reference was not found in the 100 most recent uploads; BrowserStack validates it when creating the session.`}}return/^https?:\/\//i.test(r)?{status:`configured`,reference:r,message:`Public app URL configured; BrowserStack validates it when creating the session.`}:{status:`configured`,name:d.basename(r),reference:r,message:`Local app artifact is ready and will be uploaded when creating the session.`}}async function Lt(t,n,r){try{let i=await fetch(t,{headers:{...y(r),Authorization:b(n)},signal:AbortSignal.timeout(15e3)});if(!i.ok){let t=i.status===401||i.status===403;throw new e(t?`UNAUTHORIZED`:`COMMAND_FAILED`,`BrowserStack rejected connection verification.`,{status:i.status,hint:t?`Check BROWSERSTACK_USERNAME and BROWSERSTACK_ACCESS_KEY.`:`Retry connect or check the BrowserStack service status.`})}return await i.json()}catch(t){throw t instanceof e?t:new e(`COMMAND_FAILED`,`BrowserStack connection verification failed.`,{hint:`Check network access to api-cloud.browserstack.com and retry connect.`},t)}}function Rt(e,t){let n=e=>e.replace(/(?:\.0)+$/,``);return n(e)===n(t)}function zt(t){if(!Array.isArray(t))throw new e(`COMMAND_FAILED`,`BrowserStack device verification response was not a list.`);return t.flatMap(e=>{let t=Y(e),n=t?.os_version;return t&&typeof t.device==`string`&&typeof t.os==`string`&&(typeof n==`string`||typeof n==`number`)?[{device:t.device,os:t.os,osVersion:String(n)}]:[]})}function Bt(t){let n=Y(t);if(n&&Object.keys(n).length===0)return[];if(!Array.isArray(t))throw new e(`COMMAND_FAILED`,`BrowserStack app verification response was not a list.`);return t.flatMap(e=>{let t=Y(e);return!t||typeof t.app_url!=`string`?[]:[{reference:t.app_url,...typeof t.app_name==`string`?{name:t.app_name}:{},...typeof t.app_version==`string`?{version:t.app_version}:{}}]})}function Y(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:void 0}async function Vt(e,t){return e.provider===`browserstack`?await Ft(e,t.clientVersion):await Mt(e,t.runHostCommand)}function Ht(e){return[{provider:L.browserStack,createRuntime:t=>F({clientVersion:e.clientVersion,provider:L.browserStack,platform:`android`,deviceName:`BrowserStack device`,endpoint:t.BROWSERSTACK_WEBDRIVER_ENDPOINT??`https://hub-cloud.browserstack.com/wd/hub/`,capabilityOverrides:Tt,listArtifacts:async({provider:n,providerSessionId:r})=>{let i=$(t,`BROWSERSTACK_USERNAME`,`BrowserStack artifact lookup`),a=$(t,`BROWSERSTACK_ACCESS_KEY`,`BrowserStack artifact lookup`);return await U(n,r,{clientVersion:e.clientVersion,username:i,accessKey:a,endpoint:t.BROWSERSTACK_SESSION_DETAILS_ENDPOINT})},prepareSession:async({req:n,lease:r,base:i})=>{let a=Gt(n,`BrowserStack`),o=$(t,`BROWSERSTACK_USERNAME`,`BrowserStack`),s=$(t,`BROWSERSTACK_ACCESS_KEY`,`BrowserStack`),c=X(a,`BrowserStack`),l=Z(a,`device`,`BrowserStack requires --device <name>.`),u=Z(a,`providerOsVersion`,`BrowserStack requires --provider-os-version <version>.`),d=await Ut({clientVersion:e.clientVersion,app:Z(a,`providerApp`,`BrowserStack requires --provider-app <bs://app-id-or-local-path>.`),cwd:a.cwd,username:o,accessKey:s,uploadEndpoint:t.BROWSERSTACK_APP_UPLOAD_ENDPOINT,signal:a.signal});return{...i,platform:c,deviceName:l,auth:{username:o,accessKey:s},uploadApp:Et({clientVersion:e.clientVersion,username:o,accessKey:s,endpoint:t.BROWSERSTACK_APP_UPLOAD_ENDPOINT??`https://api-cloud.browserstack.com/app-automate/upload`}),webdriverCapabilities:Dt({deviceName:l,osVersion:u,app:d,projectName:Q(a,`providerProject`),buildName:Q(a,`providerBuild`)??r.runId,sessionName:Q(a,`providerSessionName`)??r.leaseId,deviceFeatures:vt(bt(a.flags),c),configured:P(c,l)})}}}),listArtifactsFromEnv:async(t,n)=>{let r=$(n,`BROWSERSTACK_USERNAME`,`BrowserStack artifact lookup`),i=$(n,`BROWSERSTACK_ACCESS_KEY`,`BrowserStack artifact lookup`);return await U(L.browserStack,t,{clientVersion:e.clientVersion,username:r,accessKey:i,endpoint:n.BROWSERSTACK_SESSION_DETAILS_ENDPOINT})}},{provider:L.awsDeviceFarm,createRuntime:t=>F({clientVersion:e.clientVersion,provider:L.awsDeviceFarm,endpoint:`http://127.0.0.1/`,platform:`android`,deviceName:`AWS Device Farm device`,capabilityOverrides:ut,listArtifacts:async({provider:n,providerSessionId:r})=>await I(n,r,R({runHostCommand:e.runHostCommand,region:t.AWS_REGION??t.AWS_DEFAULT_REGION??K(r??``)})),prepareSession:async({req:n,lease:r,base:i})=>{let a=Gt(n,`AWS Device Farm`);H(a.flags,L.awsDeviceFarm);let o=X(a,`AWS Device Farm`);return await dt({client:R({runHostCommand:e.runHostCommand,region:Q(a,`awsRegion`)??t.AWS_REGION??t.AWS_DEFAULT_REGION}),projectArn:Kt(a,t,`awsProjectArn`,`AGENT_DEVICE_AWS_DEVICE_FARM_PROJECT_ARN`,`AWS_DEVICE_FARM_PROJECT_ARN`),deviceArn:Kt(a,t,`awsDeviceArn`,`AGENT_DEVICE_AWS_DEVICE_FARM_DEVICE_ARN`,`AWS_DEVICE_FARM_DEVICE_ARN`),appArn:Q(a,`awsAppArn`)??t.AGENT_DEVICE_AWS_DEVICE_FARM_APP_ARN??t.AWS_DEVICE_FARM_APP_ARN,platform:o,deviceName:Q(a,`device`)??`AWS Device Farm device`,sessionName:Q(a,`providerSessionName`)??r.leaseId,interactionMode:qt(a)})({lease:r,req:n,base:i})}}),listArtifactsFromEnv:async(t,n)=>{let r=R({runHostCommand:e.runHostCommand,region:n.AWS_REGION??n.AWS_DEFAULT_REGION??K(t)});return await I(L.awsDeviceFarm,t,r)}}]}async function Ut(t){if(Wt(t.app))return t.app;let n=d.resolve(t.cwd??process.cwd(),t.app);if(!ee.existsSync(n))throw new e(`INVALID_ARGS`,`BrowserStack --provider-app must be a bs:// app id, URL, or existing local app path.`,{providerApp:t.app});return await W(n,{clientVersion:t.clientVersion,username:t.username,accessKey:t.accessKey,endpoint:t.uploadEndpoint},t.signal)}function Wt(e){return e.startsWith(`bs://`)||/^https?:\/\//.test(e)}function Gt(t,n){if(t)return t;throw new e(`INVALID_ARGS`,`${n} lease allocation requires provider profile flags on the request.`)}function X(t,n){let r=t.flags?.platform;if(r===`android`||r===`ios`)return r;throw new e(`INVALID_ARGS`,`${n} requires --platform ios|android.`)}function Z(t,n,r){let i=Q(t,n);if(i)return i;throw new e(`INVALID_ARGS`,r)}function Q(e,t){let n=e.flags?.[t];return typeof n==`string`&&n.length>0?n:void 0}function $(t,n,r){let i=t[n];if(i)return i;throw new e(`INVALID_ARGS`,`${r} requires ${n} in the environment.`)}function Kt(t,n,r,i,a){let o=Q(t,r)??n[i]??n[a];if(o)return o;throw new e(`INVALID_ARGS`,`AWS Device Farm requires --${Jt(String(r))} or ${a}.`)}function qt(e){let t=Q(e,`awsInteractionMode`);if(t===`INTERACTIVE`||t===`NO_VIDEO`||t===`VIDEO_ONLY`)return t}function Jt(e){return e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}function Yt(e){let t=Ht(e);return{providerIds:t.map(e=>e.provider),createDefaultRuntimes:(e=process.env)=>t.map(t=>t.createRuntime(e)),listArtifactsFromEnv:async(e,n)=>{if(e.providerSessionId)return await t.find(t=>t.provider===e.provider)?.listArtifactsFromEnv(e.providerSessionId,n)},verifyConnection:async t=>await Vt(t,e)}}export{lt as a,L as i,K as n,H as r,Yt as t};
|
|
1
|
+
const e=Object.freeze({family:`apple`}),t=Object.freeze({...e,loadRuntime:async e=>{let{createApplePlatformRuntime:t}=await import(`./runtime4.js`);return t(e)}}),n=Object.freeze({...e,loadInventory:async e=>{let{createAppleInventorySource:t}=await import(`./inventory2.js`);return t(e)}});async function r(e){let{createAppleShutdownRuntime:t}=await import(`./runtime5.js`);return t(e)}const i={id:`apple`,platforms:[`apple`],familySelector:`apple`,providers:{platformGatedResolvers:[`appleRunnerProvider`,`appleToolProvider`]},createInteractor:async(e,t)=>{let{createAppleInteractor:n}=await import(`./interactor.js`);return n(e,t)}};export{t as i,n,r,i as t};
|
package/dist/src/src3.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{_ as e}from"./sdk-contracts.js";import{At as t,Et as n,Ot as r,gt as i,it as a}from"./sdk-batch-runner.js";import{d as o,o as s}from"./sdk-device.js";const c=4096;function l(e){return d(e,{seen:new WeakSet,nodes:0},0)}function u(e){return Object.freeze(Object.fromEntries(Object.entries(e).map(([e,t])=>[e,p(t)])))}function d(e,t,n){if(!te(e)||n>32||t.seen.has(e))return!1;t.seen.add(e),t.nodes+=1;let r=t.nodes<=c&&Object.values(e).every(e=>f(e,t,n+1));return t.seen.delete(e),r}function f(e,t,n){return ne(e)?!0:n>32?!1:Array.isArray(e)?ee(e,t,n):d(e,t,n)}function ee(e,t,n){if(t.seen.has(e))return!1;t.seen.add(e),t.nodes+=1;let r=t.nodes<=c&&e.every(e=>f(e,t,n+1));return t.seen.delete(e),r}function te(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function ne(e){return e===null?!0:typeof e==`number`?Number.isFinite(e):typeof e==`string`||typeof e==`boolean`}function p(e){return Array.isArray(e)?Object.freeze(e.map(p)):typeof e==`object`&&e?u(e):e}function m(e){if(!S(e))return h(`Durable resource envelope must be an object`);let t=e.envelopeVersion;if(!x(t))return h(`Durable resource envelopeVersion must be a non-negative integer`);if(t!==1)return{status:`unreattachable`,reason:`descriptor-version-unsupported`,message:`Unsupported durable resource envelope version: ${t}`,version:t};if(!b(e.resourceKind))return h(`Durable resource resourceKind must be a non-empty string`);if(!b(e.sessionId))return h(`Durable resource sessionId must be a non-empty string`);let n=g(e.device);if(!n)return h(`Durable resource device identity is invalid`);let r=ae(e.owner);if(!r)return h(`Durable resource owner reference is invalid`);if(r.kind===`local-family`&&r.family!==n.family)return h(`Durable resource local owner does not match the device family`);let i=ue(e.fence);if(!i)return h(`Durable resource ownership fence is invalid`);if(!fe(e.lifecycle))return h(`Durable resource lifecycle state is invalid`);let a=de(e.descriptor);return a?e.metadata!==void 0&&!l(e.metadata)?h(`Durable resource metadata must be a JSON object`):{status:`decoded`,envelope:Object.freeze({envelopeVersion:1,resourceKind:e.resourceKind,sessionId:e.sessionId,device:n,owner:r,fence:i,lifecycle:e.lifecycle,descriptor:a,...e.metadata===void 0?{}:{metadata:u(e.metadata)}})}:h(`Durable resource descriptor is invalid`)}function re(e,t){return Object.freeze({version:e.version,body:u(e.encode(t))})}function ie(e){let t=m({envelopeVersion:1,...e});if(t.status!==`decoded`)throw TypeError(t.message);return t.envelope}function h(e){return{status:`unreattachable`,reason:`descriptor-invalid`,message:e}}function ae(e){return S(e)?e.kind===`local-family`&&o(e.family)?n(e.family):e.kind===`provider-runtime`&&b(e.provider)&&b(e.instance)?r(e.provider,e.instance):null:null}function g(e){if(!S(e))return null;let t=se(e.id),n=ce(e.family),r=_(e.kind),i=v(e.target);return!t||!n||!r||i===null||!y(e,n,r)?null:oe(e,t,n,r,i)}function oe(e,t,n,r,i){return Object.freeze({id:t,family:n,...e.appleOs===void 0?{}:{appleOs:e.appleOs},kind:r,...i===void 0?{}:{target:i},...e.iosPhysicalDeviceBackend===void 0?{}:{iosPhysicalDeviceBackend:e.iosPhysicalDeviceBackend}})}function se(e){return b(e)?e:null}function ce(e){return o(e)?e:null}function _(e){return pe(e)?e:null}function v(e){if(e!==void 0)return me(e)?e:null}function y(e,t,n){if(t===`apple`){if(!s(e.appleOs))return!1}else if(e.appleOs!==void 0||e.iosPhysicalDeviceBackend!==void 0)return!1;return le(e.iosPhysicalDeviceBackend,n)}function le(e,t){return e===void 0?!0:t===`device`?e===`coredevice`||e===`xctest`:!1}function ue(e){return!S(e)||!b(e.token)||!x(e.generation)?null:Object.freeze({token:e.token,generation:e.generation})}function de(e){return!S(e)||!x(e.version)||!l(e.body)?null:Object.freeze({version:e.version,body:u(e.body)})}function fe(e){return e===`open`||e===`completed`}function pe(e){return e===`simulator`||e===`emulator`||e===`device`}function me(e){return e===`mobile`||e===`tv`||e===`desktop`}function b(e){return typeof e==`string`&&e.trim().length>0}function x(e){return typeof e==`number`&&Number.isInteger(e)&&e>=0}function S(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function C(e,t){if(e.resourceKind!==t.resourceKind)return{status:`unreattachable`,reason:`descriptor-invalid`,message:`Durable resource kind ${e.resourceKind} does not match ${t.resourceKind}`};if(e.descriptor.version!==t.version)return{status:`unreattachable`,reason:`descriptor-version-unsupported`,message:`Unsupported ${t.resourceKind} descriptor version: ${e.descriptor.version}`,version:e.descriptor.version};try{let n=t.decode(e.descriptor.body);return n.status===`decoded`?n:{status:`unreattachable`,reason:`descriptor-invalid`,message:n.message}}catch(e){return{status:`unreattachable`,reason:`descriptor-invalid`,message:e instanceof Error?e.message:`Descriptor codec rejected the body`}}}function w(e,t){return Object.freeze({pendingHandle:new i(e),envelope:t})}function T(e){return Object.freeze({appLogReattach:async({envelope:t})=>{let n=C(t,e.codec);return n.status===`unreattachable`?n:await e.reattach(n.descriptor,E(t))},appLogCleanup:async({envelope:t})=>{let n=C(t,e.codec);return n.status===`decoded`?await e.cleanup(n.descriptor,E(t)):{status:`cleanup-pending`,reason:`manual-recovery-required`,message:n.message}}})}function E(e){return Object.freeze({sessionId:e.sessionId,fence:e.fence})}function he(e){if(typeof e!=`object`||!e||Array.isArray(e))return{status:`invalid`,message:`App-log process marker must be an object`};let t=e;return!Number.isInteger(t.pid)||Number(t.pid)<=0?{status:`invalid`,message:`App-log process marker pid must be a positive integer`}:typeof t.startTime!=`string`||t.startTime.trim().length===0?{status:`invalid`,message:`App-log process marker startTime must be a non-empty string`}:typeof t.command!=`string`||t.command.trim().length===0?{status:`invalid`,message:`App-log process marker command must be a non-empty string`}:{status:`decoded`,marker:Object.freeze({pid:Number(t.pid),startTime:t.startTime,command:t.command})}}function ge(e){let t,n,r,i=()=>n??=e.forceCleanup();return Object.freeze({inspect:()=>e.inspect(),finish:()=>t??=e.finish(),forceCleanup:i,[Symbol.asyncDispose]:async()=>{r??=i().then(_e),await r}})}function D(e){return ge({inspect:e.inspect,finish:e.finish,forceCleanup:async()=>{let t=await e.finish();return t.status===`completed`?{status:`cleaned`}:{status:`cleanup-pending`,reason:t.reason,message:t.message}}})}function _e(t){if(!a(t))throw new e(`COMMAND_FAILED`,t.message??`Durable resource cleanup could not be confirmed`,{reason:t.reason,retriable:t.reason!==`ownership-fence-lost`,hint:t.reason===`ownership-fence-lost`?`Use the current resource owner or recovery record before retrying cleanup.`:`Keep the recovery record and retry cleanup through the exact runtime owner.`})}function ve(e,t){let n=O(e),r,i,a,o=()=>r??=t.finish(n),s=()=>i??=r?r.then(async e=>e.status===`completed`?{status:`cleaned`}:await t.forceCleanup(n),async()=>await t.forceCleanup(n)):t.forceCleanup(n);return Object.freeze({inspect:()=>n,appendGestureEvents:e=>{e.length===0||r||i||(n=O({...n,gestureEvents:[...n.gestureEvents,...e]}))},setTouchReferenceFrame:e=>{r||i||(n=O({...n,...e?{touchReferenceFrame:e}:{}}))},setRunnerSessionId:e=>{r||i||e.trim().length===0||(n=O({...n,runnerSessionId:e}))},invalidate:e=>{r||i||n.invalidatedReason||(n=O({...n,invalidatedReason:e}))},finish:o,forceCleanup:s,[Symbol.asyncDispose]:async()=>{a??=s().then(ye),await a}})}function O(e){return Object.freeze({...e,gestureEvents:Object.freeze([...e.gestureEvents])})}function ye(t){if(!a(t))throw new e(`COMMAND_FAILED`,t.message??`Screen recording cleanup could not be confirmed`,{reason:t.reason,retriable:t.reason!==`ownership-fence-lost`,hint:t.reason===`ownership-fence-lost`?`Use the current recording owner or recovery record before retrying cleanup.`:`Keep the recovery record and retry cleanup through the exact runtime owner.`})}function k(e,t,n=e.showTouches){return Object.freeze({status:`completed`,result:Object.freeze({backend:e.backend,outPath:e.outPath,...e.clientOutPath===void 0?{}:{clientOutPath:e.clientOutPath},startedAt:e.startedAt,completedAt:Date.now(),scope:e.scope,showTouches:n,recordOnlySession:e.recordOnlySession,...e.activeSessionApp===void 0?{}:{activeSessionApp:e.activeSessionApp},...t})})}function A(t,n,r){let i=j(t,n);if(i.length>0)throw new e(`INVALID_ARGS`,r(i))}function j(e,t){return Object.freeze([...t.scopes.includes(e.scope)?[]:[`--scope`],...t.fps||e.fps===void 0?[]:[`--fps`],...t.exportQuality||e.exportQuality===void 0?[]:[`--quality`],...t.hideTouches||!e.hideTouchesRequested?[]:[`--hide-touches`]])}async function M(e,t){let n=await P(e,t);if(n.status===`missing`)return{status:`missing`};if(n.status===`invalid`)return{status:`unreattachable`,reason:`ownership-fence-lost`,message:n.message};let r=await e.processes.inspect(n.marker);return r===`missing`?(t&&await e.processes.clearMarker(t),{status:`missing`}):r===`ownership-lost`?{status:`unreattachable`,reason:`ownership-fence-lost`}:{status:`unreattachable`,reason:`transport-not-reattachable`}}async function N(e,t){if(!t)return{status:`cleanup-pending`,reason:`manual-recovery-required`,message:`App-log process marker path is missing`};let n=await P(e,t);if(n.status===`missing`)return{status:`already-missing`};if(n.status===`invalid`)return{status:`cleanup-pending`,reason:`manual-recovery-required`,message:n.message};let r=await e.processes.inspect(n.marker);if(r===`ownership-lost`)return F();if(r===`missing`)return await e.processes.clearMarker(t),{status:`already-missing`};let i=await e.processes.terminate(n.marker);return i===`ownership-lost`?F():(await e.processes.clearMarker(t),{status:i===`terminated`?`cleaned`:`already-missing`})}async function P(e,t){return t?await e.processes.readMarker(t):{status:`invalid`,message:`App-log process marker path is missing`}}function F(){return{status:`cleanup-pending`,reason:`ownership-fence-lost`}}async function be(e){let t=e.initialProcess;for(;!e.stopped();){if(t){await xe(e,t),t=void 0,await Oe(e);continue}let n=await ke(e);if(n.status===`stopped`)return;n.status!==`waiting`&&(t=n.process)}}async function xe(e,t){let{process:n}=t;e.setActive(n);try{e.setState(`active`),await Se(e,t)}finally{await I(e,n)}}async function Se(e,t){let n=Ce(t.process);try{await we(e,t,n),await Ee(e,t.process,n),await De(n.outcome)}finally{n.controller.abort()}}function Ce(e){let t=new AbortController,n=!1,r=()=>{n=!0,t.abort()};return{controller:t,outcome:e.wait.then(()=>(r(),{status:`exited`}),e=>(r(),{status:`failed`,error:e})),settled:()=>n}}async function we(e,t,n){for(;!e.stopped()&&!n.settled();){if(!await Te(e,n))return;let r=await e.resolvePid();if(e.stopped())return;if(r!==t.pid){await t.process.terminate();return}}}async function Te(e,t){try{await e.sleep(500,t.controller.signal)}catch(e){if(!t.settled())throw e}return!t.settled()}async function Ee(e,t,n){e.stopped()&&!n.settled()&&await t.terminate()}async function De(e){let t=await e;if(t.status===`failed`)throw t.error}async function Oe(e){e.stopped()||(e.setState(`recovering`),await e.sleep(500))}async function ke(e){let t=await e.resolvePid();if(e.stopped())return{status:`stopped`};if(!t)return e.setState(`recovering`),await e.sleep(1e3),{status:`waiting`};let n=await e.startProcess(t);return e.setActive(n),e.stopped()?(await Ae(e,n),{status:`stopped`}):{status:`started`,process:{pid:t,process:n}}}async function Ae(e,t){try{await t.terminate(),await t.wait}finally{await I(e,t)}}async function I(e,t){try{await t[Symbol.asyncDispose]()}finally{e.setActive(void 0)}}async function je(e){let t=await e.resolvePid(e.setupSignal);e.setupSignal.throwIfAborted();let n=await e.host.outputs.openAppend(e.outputPath),r=`recovering`,i=!1,a;try{if(e.setupSignal.throwIfAborted(),t){e.setupSignal.throwIfAborted();let i=new AbortController,o=()=>i.abort(e.setupSignal.reason);e.setupSignal.addEventListener(`abort`,o,{once:!0});try{a=await e.processStart({command:e.command(t),output:n,markerPath:e.pidPath},i.signal)}finally{e.setupSignal.removeEventListener(`abort`,o)}e.setupSignal.throwIfAborted(),r=`active`}}catch(e){throw await L([async()=>await a?.terminate(),async()=>{await a?.wait},async()=>await a?.[Symbol.asyncDispose](),async()=>await n[Symbol.asyncDispose]()]),e}let o=be({initialProcess:a&&t?{pid:t,process:a}:void 0,stopped:()=>i,setActive:e=>{a=e},setState:e=>{r=e},resolvePid:async()=>await e.resolvePid(),startProcess:async t=>await e.processStart({command:e.command(t),output:n,markerPath:e.pidPath}),sleep:async(t,n)=>await e.host.clock.sleep(t,n)}).catch(()=>{r=`failed`}),s,c=async()=>s??=Me({options:e,monitor:o,active:()=>a,stop:()=>{i=!0},setState:e=>{r=e},output:n}),l=e.host.clock.now();return D({inspect:()=>({backend:e.backend,state:r,startedAt:l}),finish:c})}async function Me(e){return e.stop(),(await L([async()=>await e.active()?.terminate(),async()=>await e.monitor,async()=>await e.output[Symbol.asyncDispose]()])).length>0?(e.setState(`failed`),{status:`cleanup-pending`,reason:`transport-failed`,message:e.options.cleanupFailureMessage}):(e.setState(`ended`),{status:`completed`,result:{backend:e.options.backend,outputPath:e.options.outputPath,completedAt:e.options.host.clock.now()}})}async function L(e){let t=[];for(let n of e)try{await n()}catch(e){t.push(e)}return t}function R(e,t,n){let r=e.artifacts.resolveSession(t);return n.outputPath===r.outputPath&&(n.pidPath===void 0||n.pidPath===r.pidPath)}function z(t,n){if(!R(t,n.sessionId,n))throw new e(`INVALID_ARGS`,`App-log paths do not match the owning session`)}const B=Object.freeze({available:!0});async function Ne(e,t,n){let r=(await e.commands.run(t,n)).stdout.trim().split(/\s+/)[0]??``;return/^\d+$/.test(r)?r:``}function Pe(r,i){let a=n(i.family);return Object.freeze({owner:a,ownsDevice:e=>e.platform===i.family,inspectFacts:async e=>V(e,await r.processTransports.resolve(e),i),bind:async n=>{if(n.intent.kind===`exact-owner`&&!t(n.intent.owner,a))throw new e(`UNSUPPORTED_OPERATION`,`${i.label} app-log owner identity does not match`);if(n.device.platform!==i.family)throw new e(`UNSUPPORTED_PLATFORM`,`${i.label} app-log owner cannot bind ${n.device.platform}`);let o=await r.processTransports.resolve(n.device);return Fe(r,n.device,n.scope.signal,o,a,i)},shutdown:async()=>void 0})}function Fe(e,t,n,r,i,a){let o=T({codec:a.codec,reattach:async(t,n)=>R(e,n.sessionId,t)?await M(e,t.pidPath):{status:`unreattachable`,reason:`descriptor-invalid`,message:`${a.label} app-log descriptor paths do not match the owning session`},cleanup:async(t,n)=>R(e,n.sessionId,t)?await N(e,t.pidPath):{status:`cleanup-pending`,reason:`ownership-fence-lost`,message:`${a.label} app-log descriptor paths do not match the owning session`}}),s=Object.freeze({appLogInspect:async()=>({backend:a.backend}),appLogDoctor:async({appBundleId:r})=>await a.doctor({host:e,device:t,signal:n},r),...r.start?{appLogStart:async o=>await Ie(e,t,n,r,i,o,a)}:{},...o});return Object.freeze({device:t,owner:i,facts:V(t,r,a),operations:s,[Symbol.asyncDispose]:async()=>void 0})}function V(e,t,n){let r=t.start?B:{available:!1,reason:`owner-capability-missing`,hint:n.startUnavailableHint};return Object.freeze({device:{family:n.family,kind:e.kind,...e.target===void 0?{}:{target:e.target},providerMode:t.mode},operations:{appLogInspect:B,appLogDoctor:B,appLogStart:r,appLogReattach:B,appLogCleanup:B}})}async function Ie(t,n,r,i,a,o,s){if(!i.start)throw new e(`UNSUPPORTED_OPERATION`,s.startUnavailableHint);z(t,o);let c=t.artifacts.resolveSession(o.sessionId),l={host:t,device:n,signal:r,input:o,artifacts:c,transport:i};s.validateStart?.(l),r.throwIfAborted();let u=await s.process(l);r.throwIfAborted();let d=await je({host:t,backend:s.backend,outputPath:c.outputPath,pidPath:c.pidPath,processStart:i.start,setupSignal:r,resolvePid:u.resolvePid,command:u.command,cleanupFailureMessage:s.cleanupFailureMessage}),f=s.descriptor({artifacts:c,transport:i});return w(d,s.envelope({input:o,device:n,owner:a,descriptor:f}))}async function Le(e,t){try{return await e()}catch{if(t?.aborted)throw t.reason;return!1}}function Re(e){return e.exitCode===0}function H(e){for(let t of[/\bstatus(?:Code)?["'=: ]+([1-5]\d{2})\b/i,/\bresponse(?:\s+code)?["'=: ]+([1-5]\d{2})\b/i,/\bHTTP\/[0-9.]+\s+([1-5]\d{2})\b/i]){let n=t.exec(e);if(!n)continue;let r=Number.parseInt(n[1]??``,10);if(Number.isInteger(r))return r}return null}function U(e){return/\b\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z)?\b/.exec(e)?.[0]??/\b\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+\b/.exec(e)?.[0]}function ze(e){let t=e.indexOf(`{`),n=e.lastIndexOf(`}`);if(t<0||n<=t)return null;try{let r=JSON.parse(e.slice(t,n+1));return r&&typeof r==`object`&&!Array.isArray(r)?r:null}catch{return null}}function W(e,t){for(let n of t){let t=e?.[n];if(typeof t==`string`&&t.trim())return t.trim()}}function Be(e,t){for(let n of t){let t=e?.[n];if(typeof t==`number`&&Number.isInteger(t))return t;if(typeof t==`string`&&/^\d{3}$/.test(t.trim()))return Number.parseInt(t,10)}return null}function Ve(e,t){let n=t?.headers??t?.requestHeaders??t?.responseHeaders;return n===void 0?/\bheaders?["'=: ]+(\{.*\})/i.exec(e)?.[1]?.trim():K(n)}function G(e,t,n){for(let r of n){if(t?.[r]!==void 0)return K(t[r]);let n=r.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),i=RegExp(`\\b${n}["'=: ]+(.+)$`,`i`).exec(e);if(i?.[1])return i[1].trim()}}function K(e){if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}function He(e,t,n){let r=Y(t,n,5),i=e.packetId??r.map(q).find(e=>typeof e==`string`&&e.length>0);i&&(e.packetId=i);let a=i?Y(t,n,12).filter(e=>q(e)===i):r;e.timestamp??=a.map(U).find(e=>typeof e==`string`&&e.length>0),e.status??=a.map(H).find(e=>typeof e==`number`)??void 0,e.durationMs??=a.map(J).find(e=>typeof e==`number`)??void 0}function q(e){return/\bpacket id (\d+)\b/i.exec(e)?.[1]??null}function J(e){let t=/\b(?:duration|elapsed request\/response time, ms)[:= ]+(\d+)\b/i.exec(e);return t?Number.parseInt(t[1]??``,10):null}function Y(e,t,n){return e.slice(Math.max(0,t-n),Math.min(e.length,t+n+1)).map(e=>e.trim()).filter(Boolean)}const Ue=RegExp(`\\b(${[`GET`,`POST`,`PUT`,`PATCH`,`DELETE`,`HEAD`,`OPTIONS`].join(`|`)})\\b\\s+https?:\\/\\/`,`i`),We=/https?:\/\/[^\s"'<>\])]+/i;function Ge(e,t,n=e.limits.maxEntries){let r=[...e.entries],i=new Set(r.map(Z));for(let e of t.entries){let t=Z(e);if(!i.has(t)&&(i.add(t),r.push(e),r.length>=n))break}return Object.freeze({...e,matchedLines:r.length,entries:Object.freeze(r)})}function Ke(e,t){let n=$(t.maxEntries,25,1,200),r=t.include??`summary`,i=$(t.maxPayloadChars,2048,64,16384),a=$(t.maxScanLines,4e3,100,2e4),o=qe(t.lineNumberOffset);if(!t.exists)return Object.freeze({path:t.path,exists:!1,scannedLines:0,matchedLines:0,entries:Object.freeze([]),include:r,limits:Object.freeze({maxEntries:n,maxPayloadChars:i,maxScanLines:a})});let s=e.split(`
|
|
2
|
-
`),c=Math.max(0,s.length-a),l=s.slice(c),u=[];for(let e=l.length-1;e>=0&&u.length<n;--e){if(!l[e]?.trim())continue;let n=X(l,e,o+c+e+1,t.backend,r,i);n&&u.push(n)}return Object.freeze({path:t.path,exists:!0,scannedLines:l.length,matchedLines:u.length,entries:Object.freeze(u),include:r,limits:Object.freeze({maxEntries:n,maxPayloadChars:i,maxScanLines:a})})}function qe(e){if(e===void 0)return 0;if(!Number.isInteger(e)||e<0)throw TypeError(`Network line number offset must be a non-negative integer`);return e}function X(e,t,n,r,i,a){let o=e[t]?.trim();if(!o)return null;let s=ze(o),c=Je(o,s);if(!c)return null;let l=$e(o,n,c,a);return r===`android`&&He(l,e,t),et(l,o,s,i,a),l}function Je(e,t){let n=Ye(e,t),r=Xe(e,t);if(!r)return null;let i=Ze(e,t);return Qe(e,n.explicit,i)?{method:n.value,url:r,status:i}:null}function Ye(e,t){let n=W(t,[`method`,`httpMethod`]),r=/\bmethod["'=: ]+([A-Z]+)\b/i.exec(e)?.[1],i=Ue.exec(e)?.[1],a=n??r??i;return{value:a?.toUpperCase(),explicit:!!a}}function Xe(e,t){return W(t,[`url`,`requestUrl`])??We.exec(e)?.[0]}function Ze(e,t){return Be(t,[`status`,`statusCode`,`responseCode`])??H(e)??void 0}function Qe(e,t,n){return t||n!==void 0||/\bURL["'=: ]+https?:\/\//i.test(e)||/\bheaders?["'=: ]+/i.test(e)||/\b(?:requestBody|responseBody|payload|request|response)["'=: ]+/i.test(e)}function $e(e,t,n,r){return{...n,timestamp:U(e),packetId:q(e)??void 0,durationMs:J(e)??void 0,raw:Q(e,r),line:t}}function et(e,t,n,r,i){if(tt(r)){let r=Ve(t,n);r&&(e.headers=Q(r,i))}if(nt(r)){let r=G(t,n,[`requestBody`,`body`,`payload`,`request`]),a=G(t,n,[`responseBody`,`response`]);r&&(e.requestBody=Q(r,i)),a&&(e.responseBody=Q(a,i))}}function tt(e){return e===`headers`||e===`all`}function nt(e){return e===`body`||e===`all`}function Z(e){return`${e.timestamp??``}|${e.method??``}|${e.url}|${e.status??``}|${e.raw}`}function Q(e,t){return e.length<=t?e:`${e.slice(0,t)}...<truncated>`}function $(e,t,n,r){return e===void 0||!Number.isInteger(e)?t:Math.max(n,Math.min(r,e))}export{he as _,Pe as a,m as b,z as c,A as d,k as f,w as g,T as h,Le as i,N as l,D as m,Ke as n,Ne as o,ve as p,Re as r,R as s,Ge as t,M as u,ie as v,re as x,g as y};
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";var t=e({appSwitcherHarmony:()=>v,backHarmony:()=>g,closeHarmonyApp:()=>o,createHarmonyInventoryModule:()=>D,doubleClickHarmony:()=>u,ensureHarmonyToolchainPathConfigured:()=>c,fillHarmony:()=>p,harmonyToolchainCheck:()=>E,homeHarmony:()=>_,longPressHarmony:()=>d,openHarmonyApp:()=>a,performHarmonyGesture:()=>h,pressHarmony:()=>l,pressHarmonyKeyboardKey:()=>y,readHarmonyGestureViewport:()=>w,runHarmonyHdc:()=>s,runtimeModule:()=>i,sampleHarmonyMemoryPerf:()=>T,screenshotHarmony:()=>x,scrollHarmony:()=>m,setHarmonyOrientation:()=>b,setHarmonySetting:()=>S,snapshotHarmony:()=>C,typeHarmony:()=>f});function n(e){return(async(...t)=>await(await e())(...t))}const r=Object.freeze({family:`harmonyos`}),i=Object.freeze({...r,loadRuntime:async e=>{let{createHarmonyPlatformRuntime:t}=await import(`./runtime6.js`);return t(e)}}),a=n(async()=>(await import(`./app-lifecycle2.js`)).openHarmonyApp),o=n(async()=>(await import(`./app-lifecycle2.js`)).closeHarmonyApp),s=n(async()=>(await import(`./hdc.js`)).runHarmonyHdc),c=n(async()=>(await import(`./hdc.js`)).ensureHarmonyToolchainPathConfigured),l=n(async()=>(await import(`./input-actions.js`)).pressHarmony),u=n(async()=>(await import(`./input-actions.js`)).doubleClickHarmony),d=n(async()=>(await import(`./input-actions.js`)).longPressHarmony),f=n(async()=>(await import(`./input-actions.js`)).typeHarmony),p=n(async()=>(await import(`./input-actions.js`)).fillHarmony),m=n(async()=>(await import(`./input-actions.js`)).scrollHarmony),h=n(async()=>(await import(`./input-actions.js`)).performHarmonyGesture),g=n(async()=>(await import(`./input-actions.js`)).backHarmony),_=n(async()=>(await import(`./input-actions.js`)).homeHarmony),v=n(async()=>(await import(`./input-actions.js`)).appSwitcherHarmony),y=n(async()=>(await import(`./input-actions.js`)).pressHarmonyKeyboardKey),b=n(async()=>(await import(`./input-actions.js`)).setHarmonyOrientation),x=n(async()=>(await import(`./screenshot.js`)).screenshotHarmony),S=n(async()=>(await import(`./settings.js`)).setHarmonySetting),C=n(async()=>(await import(`./snapshot2.js`)).snapshotHarmony),w=n(async()=>(await import(`./snapshot2.js`)).readHarmonyGestureViewport),T=n(async()=>(await import(`./perf.js`)).sampleHarmonyMemoryPerf),E=n(async()=>(await import(`./doctor.js`)).harmonyToolchainCheck);function D(e){let t=Object.freeze({hdcSdkPath:O(e.hdcSdkPath),devecoSdkHome:O(e.devecoSdkHome),commandLineToolsHome:O(e.commandLineToolsHome)});return Object.freeze({...r,loadInventory:async e=>{let{createHarmonyInventory:n}=await import(`./inventory3.js`);return n(e,t)}})}function O(e){return e?.trim()||void 0}export{b as _,u as a,t as b,d as c,l as d,y as f,m as g,x as h,D as i,a as l,i as m,g as n,p as o,w as p,o as r,_ as s,v as t,h as u,S as v,f as x,C as y};
|
package/dist/src/src4.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime.js";import{_ as t,y as n}from"./sdk-contracts.js";import{Ar as r,Cr as i,Dr as a,Er as o,J as s,_r as c,fr as l,gr as u,jr as ee,kr as te,wr as d}from"./sdk-batch-runner.js";import{R as ne}from"./interaction.js";import f from"node:path";import{createHash as re}from"node:crypto";import{LineCounter as ie,isMap as p,isNode as ae,isScalar as m,isSeq as h,parseAllDocuments as oe}from"yaml";function g(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function se(e){return JSON.stringify(ce(e))}function ce(e){if(Array.isArray(e))return e.map(ce);if(!e||typeof e!=`object`)return e;let t=e;return Object.fromEntries(Object.keys(t).sort().map(e=>[e,ce(t[e])]))}function _(e){return{x:le(e.x,e.width),y:le(e.y,e.height)}}function le(e,t){if(t<=1)return Math.floor(e);let n=Math.ceil(e),r=Math.floor(e+t-1);return Math.round(Math.min(r,Math.max(n,e+t/2)))}function ue(e){return e.trim().toLowerCase().replace(/\s+/g,` `)}function de(e){return[e.label,e.value,e.identifier].find(e=>typeof e==`string`&&e.length>0)?.trim()??``}function fe(e){let t={version:2,platform:e.platform??null,target:e.target??null,runtimeHints:e.runtimeHints??null,initialStaticEnv:e.initialStaticEnv,steps:e.steps};return re(`sha256`).update(se(t),`utf8`).digest(`hex`)}function pe(e={},n={}){let r={...n},i=me(e),a=[],o,s=0,c;return{get values(){return l()},get generation(){return s},get observation(){return c?.generation===s?c:void 0},enter(e={}){let n=u(e);return a.push(n),o=void 0,()=>{if(a.pop()!==n)throw new t(`COMMAND_FAILED`,`Maestro environment scopes were left out of order.`);o=void 0}},merge(e){i={...i,...e},o=void 0},recordObservation(e){if(e.generation!==s)throw new t(`COMMAND_FAILED`,`Maestro observation generation ${e.generation} does not match ${s}.`);c=e},invalidateObservation(){s+=1,c=void 0},resolve(e){return v(e,l())},resolveDeferred(e){return v(e,l(),new Set,!1)}};function l(){return o||(o={...a.reduce((e,t)=>({...e,...t}),{...i}),...r},o)}function u(e){let t=me(e),n={};for(let[e,i]of Object.entries(t))n[e]=v(i,{...l(),...t,...n,...r},new Set,!1);return n}}function me(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,String(t)]))}function v(e,n,r=new Set,i=!0){let a=e.replace(/\$\{([A-Za-z_][A-Za-z0-9_.]*)\}/g,(e,a)=>{if(!Object.hasOwn(n,a)){if(!i)return e;throw new t(`INVALID_ARGS`,`Maestro variable "${a}" is not defined.`)}if(r.has(a)){if(!i)return e;throw new t(`INVALID_ARGS`,`Maestro variable "${a}" has a cyclic reference.`)}return v(n[a],n,new Set([...r,a]),i)});return i&&he(a),a}function he(e){for(let n of e.matchAll(/\$\{[^{}]*\}/g))if(!ge(n[0]))throw new t(`INVALID_ARGS`,`Maestro interpolation "${n[0]}" is unresolved or unsupported.`)}function ge(e){return/^\$\{\s*maestro\.platform\s*(?:==|!=)\s*(['"]).*\1(?:\s*(?:&&|\|\|).*)?\s*\}$/.test(e)}function y(e,t){return _e(e?.range?.[0],t)}function _e(e,t){let n=t.lineCounter.linePos(e!==void 0&&e>=0?e:0).line;return t.sourcePath===void 0?{line:n}:{path:t.sourcePath,line:n}}function ve(e){return`${e.path===void 0?``:`${e.path}:`}line ${e.line}`}function b(e,n,r){throw new t(`INVALID_ARGS`,`${e} (${ve(y(n,r))})`)}function x(e,t,n){p(e)||b(`Maestro ${t} expects a map.`,e,n);let r=[];for(let i of e.items){let e=i.key;m(e)||b(`Maestro ${t} map keys must be strings.`,void 0,n);let a=e.value;typeof a!=`string`&&typeof a!=`number`&&typeof a!=`boolean`&&b(`Maestro ${t} map keys must be strings.`,e,n),i.value!==null&&!ae(i.value)&&b(`Maestro ${t} values must be YAML nodes.`,e,n),r.push({key:String(a),keyNode:e,value:i.value})}return r}function ye(e,t,n){return h(e)||b(`Maestro ${t} expects a list.`,e,n),e.items}function be(e,t,n){return ye(e,t,n).map((e,r)=>k(e,`${t}[${r}]`,n))}function S(e,t,n,r){let i=new Set(n),a=new Set;for(let n of e)a.has(n.key)&&b(`Maestro ${t} contains duplicate field "${n.key}".`,n.keyNode,r),a.add(n.key),i.has(n.key)||b(`Maestro ${t} field "${n.key}" is not supported.`,n.keyNode,r)}function C(e,t){return e.some(e=>e.key===t)}function w(e,t){return e.find(e=>e.key===t)?.value}function T(e,t,n){return C(e,t)?n(w(e,t)):void 0}function E(e,t,n){return g({optional:T(e,`optional`,e=>j(e,`${t}.optional`,n))})}function D(e){return e===null||m(e)&&e.value===null}function O(e,t,n){if(e==null)return null;m(e)||b(`Maestro ${t} expects a scalar value.`,e,n);let r=e.value;if(r===null||typeof r==`string`||typeof r==`number`||typeof r==`boolean`)return r;b(`Maestro ${t} contains an unsupported scalar value.`,e,n)}function k(e,t,n){let r=O(e,t,n);return typeof r!=`string`&&b(`Maestro ${t} expects a string.`,e,n),r}function A(e,t,n){let r=O(e,t,n);if(r!==null)return typeof r!=`string`&&b(`Maestro ${t} expects a string.`,e,n),r}function j(e,t,n){let r=O(e,t,n);if(r!==null)return typeof r!=`boolean`&&b(`Maestro ${t} expects a boolean.`,e,n),r}const xe=/^\$\{[A-Za-z_][A-Za-z0-9_.]*\}$/,Se=/^-?\d+(\.\d+)?$/,Ce=/^-?\d+$/,we={"tapOn.index":{integer:!0,nonNegative:!0},"tapOn.repeat":{integer:!0,positive:!0},"tapOn.delay":{integer:!0,nonNegative:!0},"doubleTapOn.delay":{integer:!0,nonNegative:!0},eraseText:{integer:!0,positive:!0},"eraseText.charactersToErase":{integer:!0,positive:!0},"extendedWaitUntil.timeout":{nonNegative:!0},"scrollUntilVisible.timeout":{nonNegative:!0},waitForAnimationToEnd:{nonNegative:!0},"waitForAnimationToEnd.timeout":{nonNegative:!0},"swipe.duration":{nonNegative:!0},"repeat.times":{integer:!0,nonNegative:!0},"retry.maxRetries":{integer:!0,nonNegative:!0}};function M(e){return e.positive&&e.integer?`a positive integer`:e.positive?`a positive number`:e.nonNegative&&e.integer?`a non-negative integer`:e.nonNegative?`a non-negative finite number`:e.integer?`an integer`:`a finite number`}function Te(e,t,n,r,i){let a=`Maestro ${t} expects ${M(i)} or a variable expression.`;Number.isFinite(e)||b(a,n,r),Math.abs(e)>2**53-1&&b(a,n,r),i.integer&&!Number.isSafeInteger(e)&&b(a,n,r),i.nonNegative&&e<0&&b(a,n,r),i.positive&&e<=0&&b(a,n,r)}function Ee(e,t,n,r,i){if(typeof e==`number`)return Te(e,t,n,r,i),e;if(typeof e==`string`){if(xe.test(e))return e;if((i.integer?Ce:Se).test(e)){let a=Number(e);return Te(a,t,n,r,i),a}}b(`Maestro ${t} expects ${M(i)} or a variable expression.`,n,r)}function N(e,t,n){let r=O(e,t,n);if(r!==null)return Ee(r,t,e,n,we[t]??{})}function P(e,t,n){let r=we[t]??{},i=O(e,t,n);return i===null&&b(`Maestro ${t} expects ${M(r)} or a variable expression.`,e,n),Ee(i,t,e,n,r)}function F(e,t,n){let r=x(e,t,n),i={};for(let e of r){let r=O(e.value,`${t}.${e.key}`,n);r===null&&b(`Maestro ${t}.${e.key} expects a string, number, or boolean.`,e.value,n),i[e.key]=r}return i}function De(e,t,n){return new Ie(ke(Oe(t.resolve(e))),n).parse()}function Oe(e){let t=e.trim();return t.startsWith("${")&&t.endsWith(`}`)?t.slice(2,-1).trim():t}function ke(e){let n=[],r=0;for(;r<e.length;){let i=e.slice(r),a=/^\s+/.exec(i)?.[0].length??0;if(a>0){r+=a;continue}let o=Ae(i);if(!o)throw new t(`INVALID_ARGS`,`Unsupported runFlow.when.true expression near "${i.slice(0,24)}".`);n.push(o.value),r+=o.length}return n}function Ae(e){return je(e)??Me(e)??Ne(e)??Pe(e)??Fe(e)}function je(e){return e.startsWith(`maestro.platform`)?{value:{type:`platform`},length:16}:null}function Me(e){let t=/^(==|!=|&&|\|\|)/.exec(e)?.[1];return t?{value:{type:`operator`,value:t},length:t.length}:null}function Ne(e){let t=e[0];return t===`(`||t===`)`?{value:{type:`paren`,value:t},length:1}:null}function Pe(e){let t=/^(['"])(.*?)\1/.exec(e);return t?{value:{type:`string`,value:t[2]??``},length:t[0].length}:null}function Fe(e){let t=/^(true|false)\b/.exec(e)?.[1];return t?{value:{type:`boolean`,value:t===`true`},length:t.length}:null}var Ie=class{index=0;tokens;platform;constructor(e,t){this.tokens=e,this.platform=t}parse(){let e=this.parseOr();if(this.peek())throw new t(`INVALID_ARGS`,`Unsupported trailing runFlow.when.true expression.`);return e}parseOr(){let e=this.parseAnd();for(;this.consumeOperator(`||`);)e=this.parseAnd()||e;return e}parseAnd(){let e=this.parsePrimary();for(;this.consumeOperator(`&&`);)e=this.parsePrimary()&&e;return e}parsePrimary(){let e=this.peek();if(!e)throw new t(`INVALID_ARGS`,`Incomplete runFlow.when.true expression.`);if(e.type===`boolean`)return this.index+=1,e.value;if(e.type===`paren`&&e.value===`(`){this.index+=1;let e=this.parseOr();if(!this.consumeParen(`)`))throw new t(`INVALID_ARGS`,`Unclosed runFlow.when.true parenthesis.`);return e}return this.parsePlatformComparison()}parsePlatformComparison(){this.consumePlatformToken();let e=this.consumeComparisonOperator(),t=this.consumeStringLiteral(),n=this.platform===t.toLowerCase();return e.value===`==`?n:!n}consumePlatformToken(){if(this.peek()?.type!==`platform`)throw new t(`INVALID_ARGS`,`runFlow.when.true supports maestro.platform comparisons.`);this.index+=1}consumeComparisonOperator(){let e=this.peek();if(e?.type!==`operator`||e.value!==`==`&&e.value!==`!=`)throw new t(`INVALID_ARGS`,`runFlow.when.true comparison requires == or !=.`);return this.index+=1,e}consumeStringLiteral(){let e=this.peek();if(e?.type!==`string`)throw new t(`INVALID_ARGS`,`runFlow.when.true comparison requires a string literal.`);return this.index+=1,e.value}consumeOperator(e){let t=this.peek();return t?.type!==`operator`||t.value!==e?!1:(this.index+=1,!0)}consumeParen(e){let t=this.peek();return t?.type!==`paren`||t.value!==e?!1:(this.index+=1,!0)}peek(){return this.tokens[this.index]}};function Le(e){switch(e.kind){case`runFlow`:return!(`include`in e);case`repeat`:case`retry`:return!(`commands`in e);default:return!1}}function Re(e,t){return{...qe(e,t),source:e.source}}function I(e,n,r){if(e===void 0)return;let i=r??we[n]??{},a=M(i),o;if(typeof e==`number`)o=e;else{let r=e.trim();if(r===``)throw new t(`INVALID_ARGS`,`Maestro ${n} must be ${a}.`);o=Number(r)}if(!Number.isFinite(o)||Math.abs(o)>2**53-1||i.integer&&!Number.isSafeInteger(o)||i.nonNegative&&o<0||i.positive&&o<=0)throw new t(`INVALID_ARGS`,`Maestro ${n} must be ${a}.`);return o}function ze(e,t,n,r){return I(e===void 0?t:n.resolve(String(e)),r)}function L(e){if(e?.aborted)throw n()}async function Be(e,n){if(e.include.kind===`commands`)return{kind:`program`,source:e.source,config:{},commands:e.include.commands};if(!n.loadProgram)throw new t(`INVALID_ARGS`,`Maestro file runFlow requires a program loader.`);return L(n.signal),n.signal?await n.loadProgram(e.include.path,e.source.path,n.signal):await n.loadProgram(e.include.path,e.source.path)}function Ve(e,t){if(e.include.kind===`file`)return f.resolve(t?f.dirname(t):process.cwd(),e.include.path)}function He(e){return e===void 0?void 0:f.resolve(e)}function Ue(e,n){let r=Ve(e,e.source.path);if(r&&n.has(r))throw new t(`INVALID_ARGS`,`Maestro runFlow cycle detected at ${r}.`);return r}function We(e,n,r,i){let a=e.include.kind===`file`?He(n.source.path):void 0,o=new Set([r,a].filter(e=>e!==void 0)),s=[...o].find(e=>i.has(e));if(s)throw new t(`INVALID_ARGS`,`Maestro runFlow cycle detected at ${s}.`);return o.forEach(e=>i.add(e)),o}function Ge(e,t,n){return e.platform&&e.platform!==n.platform?!1:e.true===void 0?!0:typeof e.true==`boolean`?e.true:De(e.true,t,n.platform)}function Ke(e){return[...e.visible?[{kind:`visible`,selector:e.visible}]:[],...e.notVisible?[{kind:`notVisible`,selector:e.notVisible}]:[]]}function qe(e,t){return typeof e==`string`?t.resolve(e):Array.isArray(e)?e.map(e=>qe(e,t)):e&&typeof e==`object`?Object.fromEntries(Object.entries(e).map(([e,n])=>[e,qe(n,t)])):e}async function Je(e,t){L(t.signal);let n=He(e.source.path),r={options:t,context:pe(t.defaults,t.env),activeIncludePaths:new Set(n===void 0?[]:[n]),staticallyExecutedControls:0,staticallySkippedControls:0};return{steps:await Ye(e,[],void 0,e.source.path,r),staticallyExecutedControls:r.staticallyExecutedControls,staticallySkippedControls:r.staticallySkippedControls}}async function Ye(e,t,n,r,i){L(i.options.signal);let a=ot(t,e.config.env),o=e.config.appId??n,s=i.context.enter(e.config.env);try{let t=[...e.config.onFlowStart??[],...e.commands,...e.config.onFlowComplete??[]],n=[];for(let s of t)n.push(...await Ze(s,a,o,e.source.path??r,i));return n}finally{s()}}async function Xe(e,t,n,r,i){let a=[];for(let o of e)a.push(...await Ze(o,t,n,r,i));return a}async function Ze(e,t,n,r,i){L(i.options.signal);let a=st(e,r);switch(a.kind){case`runFlow`:{let e=$e(a,i);if(e===`omit`)return i.staticallySkippedControls+=1,[];let o=await Qe(a,t,n,r,i);return e===`flatten`?(i.staticallyExecutedControls+=1,o):[it(a,t,n,o)]}case`repeat`:return[it(a,t,n,await Xe(a.commands,t,n,r,i))];case`retry`:return[it(a,t,n,await Xe(a.commands,t,n,r,i))];default:return[rt(a,t,n)]}}async function Qe(e,t,n,r,i){let a=tt(e,i.context),o=Ue(a,i.activeIncludePaths),s=await Be(a,i.options);L(i.options.signal);let c=We(a,s,o,i.activeIncludePaths),l=ot(t,e.env),u=i.context.enter(e.env);try{return await Ye(s,l,n,s.source.path??e.source.path??r,i)}finally{u(),c.forEach(e=>i.activeIncludePaths.delete(e))}}function $e(e,t){let n=e.when;return n?n.platform!==void 0&&n.platform!==t.options.platform?`omit`:et(n.true,t)||(n.visible||n.notVisible?`opaque`:`flatten`):`flatten`}function et(e,t){if(e===!1)return`omit`;if(typeof e==`string`)return nt(t.context.resolveDeferred(e))?`opaque`:De(e,t.context,t.options.platform)?void 0:`omit`}function tt(e,t){return e.include.kind===`file`?{...e,include:{...e.include,path:t.resolve(e.include.path)}}:e}function nt(e){return/\$\{[A-Za-z_][A-Za-z0-9_.]*\}/.test(e)}function rt(e,t,n){return g({kind:`command`,command:e,source:e.source,scopes:t,appId:n})}function it(e,t,n,r){return g({kind:`opaque`,command:at(e),source:e.source,scopes:t,body:r,appId:n})}function at(e){switch(e.kind){case`runFlow`:return g({kind:e.kind,source:e.source,when:e.when,label:e.label,...e.include.kind===`file`?{includePath:e.include.path}:{}});case`repeat`:return{kind:e.kind,source:e.source,times:e.times};case`retry`:return g({kind:e.kind,source:e.source,maxRetries:e.maxRetries})}}function ot(e,t){return t===void 0?e:[...e,t]}function st(e,t){return e.source.path||!t?e:{...e,source:{...e.source,path:t}}}async function ct(e,t={}){let{steps:n,staticallyExecutedControls:r,staticallySkippedControls:i}=await Je(e,t),a=lt(t.runtimeHints),o=g({kind:`maestroReplayPlan`,platform:t.platform,target:t.target,runtimeHints:a,initialStaticEnv:structuredClone({...t.defaults??{},...e.config.env??{},...t.env??{}}),steps:structuredClone(n),total:n.length,compatibility:{staticallyExecutedControls:r,staticallySkippedControls:i}}),s=fe(o);return ut({...o,digest:s})}function lt(e){if(!e)return;let t=Object.entries(e).filter(e=>e[1]!==void 0);return t.length===0?void 0:Object.fromEntries(t)}function ut(e){if(!e||typeof e!=`object`||Object.isFrozen(e))return e;for(let t of Object.values(e))ut(t);return Object.freeze(e)}function dt(e,t={}){let{from:n,planDigest:r}=t;if(n===void 0&&r===void 0)return{allowed:!0,startIndex:0};if(n===void 0||r===void 0)return{allowed:!1,reason:`replay --from requires --plan-digest (and --plan-digest requires --from).`};if(!Number.isInteger(n)||n<1||n>e.total)return{allowed:!1,reason:`replay --from ${n} is out of range for a ${e.total}-step plan.`};if(r!==e.digest)return{allowed:!1,reason:`replay --plan-digest does not match the current plan digest.`};if(n===1)return{allowed:!0,startIndex:0};for(let t=0;t<n-1;t+=1){let n=e.steps[t];if(n.kind===`opaque`)return{allowed:!1,reason:`step ${t+1} is opaque runtime control flow (${n.command.kind}) and cannot be skipped safely.`};if(n.command.kind===`runScript`)return{allowed:!1,reason:`step ${t+1} (runScript) can produce outputEnv values and cannot be skipped safely.`}}let i=e.steps[n-1];return i.kind===`opaque`?{allowed:!1,reason:`step ${n} is opaque runtime control flow (${i.command.kind}) and cannot be resumed into.`}:{allowed:!0,startIndex:n-1}}function ft(e,n={}){let r=dt(e,n);if(!r.allowed)throw new t(`INVALID_ARGS`,r.reason);return r.startIndex}function pt(e,n){if(!Number.isInteger(n)||n<0||n>e.total)throw new t(`INVALID_ARGS`,`Maestro replay startIndex ${n} is out of range for a ${e.total}-step plan.`);return n}const R={control:{retryMaxRetries:3},command:{retryTapMaxAttempts:2,targetLookupTimeoutMs:17e3,optionalTargetLookupTimeoutMs:7e3,scrollUntilVisibleTimeoutMs:2e4,waitForAnimationToEndTimeoutMs:15e3,waitForAnimationToEndDifferencePercent:.005,longPressDurationMs:3e3,swipeDurationMs:400,repeatDelayMs:100,scrollUntilVisibleSpeed:40,scrollUntilVisiblePercentage:100,eraseTextMaxCharacters:50},observation:{pollIntervalMs:200,defaultSettleAttempts:10},targetSwipe:{nearEdgeFraction:.1,farEdgeFraction:.9},screenSwipe:{nearEdgeFraction:.1,farEdgeFraction:.9,centerFraction:.5,downStartFraction:.2,upStartFraction:{android:.5,ios:.9}},scrollUntilVisibleSwipe:{nearEdgeFraction:.1,farEdgeFraction:.9}};function mt(e){return Math.trunc(1e3*(100-e)/100)+1}const ht={assertVisibleTimeoutMs:R.command.targetLookupTimeoutMs,assertNotVisibleTimeoutMs:R.command.targetLookupTimeoutMs,extendedWaitUntilTimeoutMs:R.command.targetLookupTimeoutMs,runFlowConditionTimeoutMs:R.command.optionalTargetLookupTimeoutMs},gt=R.observation.pollIntervalMs*R.observation.defaultSettleAttempts,_t=`maestro-test-failure`;function vt(e,n={}){return new t(`COMMAND_FAILED`,e,{...n,reason:_t})}function yt(e){return e instanceof t&&e.code===`COMMAND_FAILED`&&e.details?.reason===_t}async function bt(e,t){L(t.options.signal);try{return await Pt(e,t.context,async()=>await xt(e,t))}catch(t){throw Ft(t,e)}}async function xt(e,t){if(e.kind===`command`)return await St(e.command,e.appId,t);await Dt(e,t)}async function St(e,t,n){let r=Re(e,n.context);try{return await Tt(r,t,n)}catch(e){if(L(n.options.signal),wt(r)&&yt(e)){n.warnings.push(Ct(r,e)),n.skipped+=1;return}throw It(e,r)}}function Ct(e,n){let r=`${e.source.path?`${e.source.path}:`:``}line ${e.source.line}`,i=n instanceof t?n.message:String(n);return`Optional Maestro ${e.kind} skipped at ${r}: ${i}`}function wt(e){return`optional`in e&&e.optional===!0}async function Tt(e,t,n){switch(e.kind){case`assertVisible`:await jt({kind:`visible`,selector:e.target,childOf:e.childOf},n.timing.assertVisibleTimeoutMs,n),n.executed+=1;return;case`assertNotVisible`:await jt({kind:`notVisible`,selector:e.target,childOf:e.childOf},n.timing.assertNotVisibleTimeoutMs,n),n.executed+=1;return;case`extendedWaitUntil`:await jt(Nt(e),I(e.timeout,`extendedWaitUntil.timeout`)??n.timing.extendedWaitUntilTimeoutMs,n),n.executed+=1;return;default:return await Et(e,t,n)}}async function Et(e,t,n){let r=g({command:e,env:n.context.values,appId:t===void 0?void 0:n.context.resolve(t),generation:n.context.generation,invalidateObservation:n.context.invalidateObservation,cachedObservation:n.context.observation,signal:n.options.signal}),i=await n.port.execute(r);return L(n.options.signal),i.observation&&n.context.recordObservation(i.observation),i.outputEnv&&n.context.merge(i.outputEnv),i.artifactPaths?.forEach(e=>n.artifacts.add(e)),n.executed+=1,i}async function Dt(e,t){let n=Re(e.command,t.context);switch(n.kind){case`runFlow`:if(n.when&&!await At(n.when,t)){t.skipped+=1;return}t.executed+=1,await Ot(e.body,t);return;case`repeat`:{let r=ze(n.times,0,t.context,`repeat.times`);t.executed+=1;for(let n=0;n<r;n+=1)L(t.options.signal),await Ot(e.body,t);return}case`retry`:{let r=Math.min(ze(n.maxRetries,1,t.context,`retry.maxRetries`),R.control.retryMaxRetries);t.executed+=1,await kt(e.body,r,t);return}}}async function Ot(e,t){for(let n of e)await bt(n,t)}async function kt(e,n,r){let i;for(let t=0;t<=n;t+=1){L(r.options.signal);try{await Ot(e,r);return}catch(t){if(L(r.options.signal),!yt(Rt(t)))throw t;i=Ft(t,e[0])}}throw i||new t(`COMMAND_FAILED`,`Maestro retry commands failed.`)}async function At(e,t){if(!Ge(e,t.context,t.options))return!1;for(let n of Ke(e))if(L(t.options.signal),!(await Mt(n,t.timing.runFlowConditionTimeoutMs,t)).matched)return!1;return!0}async function jt(e,t,n){if(!(await Mt(e,t,n)).matched)throw vt(`Maestro ${e.kind} condition did not match.`)}async function Mt(e,t,n){let r={condition:e,timeoutMs:t,generation:n.context.generation,env:n.context.values,...n.context.observation?{cachedObservation:n.context.observation}:{},...n.options.signal?{signal:n.options.signal}:{}},i=await n.port.observe(r);return L(n.options.signal),n.context.recordObservation(i),i}function Nt(e){if(e.visible)return{kind:`visible`,selector:e.visible};if(e.notVisible)return{kind:`notVisible`,selector:e.notVisible};throw new t(`INVALID_ARGS`,`Maestro extendedWaitUntil requires one condition.`)}async function Pt(e,t,n){let r=e.scopes.map(e=>t.enter({...e}));try{return await n()}finally{for(let e=r.length-1;e>=0;--e)r[e]()}}function Ft(e,t){if(Lt(e))return e;let n=t?.source??{line:1};return{kind:`maestroPlanStepFailure`,error:zt(e,t?.command),source:n,...t?{command:t.command}:{}}}function It(e,t){return{kind:`maestroPlanStepFailure`,error:zt(e,t),source:t.source,command:t}}function Lt(e){return!!(e&&typeof e==`object`&&e.kind===`maestroPlanStepFailure`)}function Rt(e){return Lt(e)?e.error:e}function zt(e,n){if(!(e instanceof t)||!n||/\bline \d+\b/.test(e.message))return e;let r=n.source.path?`${n.source.path}:`:``;return new t(e.code,`${e.message} (${r}line ${n.source.line})`,e.details)}async function Bt(e,n,r={}){L(r.signal);let i=r.startIndex??0;if(!Number.isInteger(i)||i<0||i>e.total)throw new t(`INVALID_ARGS`,`Maestro replay startIndex ${i} is out of range for a ${e.total}-step plan.`);let a={plan:e,port:n,options:r,context:pe(r.defaults,r.env?{...r.env}:{}),timing:ht,artifacts:new Set,warnings:[],executed:e.compatibility.staticallyExecutedControls,skipped:e.compatibility.staticallySkippedControls};for(let t=i;t<e.steps.length;t+=1)try{await Vt(e.steps[t],t,a)}catch(e){throw Rt(e)}return{executed:a.executed,skipped:a.skipped,generation:a.context.generation,artifactPaths:[...a.artifacts],...a.warnings.length>0?{warnings:a.warnings}:{}}}async function Vt(e,t,n){L(n.options.signal);let r=n.options.now??Date.now,i=r(),a=n.port.readMetrics?.(),o=n.context.generation,s={command:e.command,source:e.source,generation:o,stepIndex:t+1,stepTotal:n.plan.total};Ut(()=>n.options.observer?.commandStarted?.(s));try{let t=await bt(e,n);L(n.options.signal),Ut(()=>n.options.observer?.commandCompleted?.({...s,durationMs:r()-i,...Ht(a,n.port.readMetrics?.()),...t?.data?{data:t.data}:{}}))}catch(t){let o=Ft(t,e);throw Ut(()=>n.options.observer?.commandFailed?.({...s,...o.command?{command:o.command}:{},source:o.source,durationMs:r()-i,...Ht(a,n.port.readMetrics?.()),error:o.error,artifactPaths:[...n.artifacts]})),o}}function Ht(e,t){return!e||!t?{}:{runtimeMetrics:{hierarchyCaptures:t.hierarchyCaptures-e.hierarchyCaptures,screenshotCaptures:t.screenshotCaptures-e.screenshotCaptures,tapRetries:t.tapRetries-e.tapRetries}}}function Ut(e){try{e?.()}catch{}}async function Wt(e,t,n={}){let r=Gt(e,n);return await Bt(e,t,{...n,startIndex:r})}function Gt(e,t){return t.from!==void 0||t.planDigest!==void 0?ft(e,{from:t.from,planDigest:t.planDigest}):pt(e,t.startIndex??0)}const z=[`id`,`text`,`enabled`,`selected`],Kt=[...z,`label`],qt={textKeys:[`id`,`text`,`label`],booleanKeys:[`enabled`,`selected`]},Jt={id:(e,t,n,r)=>on(e,`id`,t,n,r),text:(e,t,n,r)=>on(e,`text`,t,n,r),label:(e,t,n,r)=>on(e,`label`,t,n,r),enabled:(e,t,n,r)=>sn(e,`enabled`,t,n,r),selected:(e,t,n,r)=>sn(e,`selected`,t,n,r),optional:(e,t,n,r)=>sn(e,`optional`,t,n,r)};function B(e,t,n,r=z){if(m(e))return{text:k(e,t,n)};let i=x(e,t,n);return S(i,t,r,n),Yt(i,t,n)}function Yt(e,t,n){e.length===0&&b(`Maestro ${t} selector is empty.`,void 0,n);let r={};for(let i of e){let e=Jt[i.key];e||b(`Maestro ${t} selector field "${i.key}" is not supported.`,i.keyNode,n),e(r,i,t,n)}return Object.keys(r).filter(e=>e!==`optional`).length===0&&b(`Maestro ${t} selector must contain a selector value.`,e[0]?.keyNode,n),r}function Xt(e,t,n){let r=$t(e,t,n,{name:`tapOn`,selectorKeys:Kt,pointConflictingSelectorKeys:z,pointAllowedKeys:[`point`,`retryTapIfNoChange`,`repeat`,`delay`,`optional`,`label`],selectorAllowedKeys:[...Kt,`retryTapIfNoChange`,`repeat`,`delay`,`optional`,`index`,`childOf`],parsePoint:V});if(r.entries.length===0)return{kind:`tapOn`,source:r.source,target:r.target};if(r.target.space!==`target`)return{kind:`tapOn`,source:r.source,target:r.target,...an(r.entries,n,!0)};let i=C(r.entries,`childOf`)?B(w(r.entries,`childOf`),`tapOn.childOf`,n):void 0,a=an(r.entries,n,!1),o=C(r.entries,`index`)?N(w(r.entries,`index`),`tapOn.index`,n):void 0;return g({kind:`tapOn`,source:r.source,target:r.target,...a,index:o,childOf:i})}function Zt(e,t,n){let r=$t(e,t,n,{name:`doubleTapOn`,selectorKeys:z,pointAllowedKeys:[`point`,`delay`,`optional`],selectorAllowedKeys:[...z,`delay`,`optional`],parsePoint:ln}),i=E(r.entries,`doubleTapOn`,n),a=C(r.entries,`delay`)?N(w(r.entries,`delay`),`doubleTapOn.delay`,n):void 0;return g({kind:`doubleTapOn`,source:r.source,target:r.target,...i,delay:a})}function Qt(e,t,n){let r=$t(e,t,n,{name:`longPressOn`,selectorKeys:z,pointAllowedKeys:[`point`,`optional`],selectorAllowedKeys:[...z,`optional`],parsePoint:ln});return{kind:`longPressOn`,source:r.source,target:r.target,...E(r.entries,`longPressOn`,n)}}function $t(e,t,n,r){let i=y(t,n);if(m(e))return{source:i,entries:[],target:dn(B(e,r.name,n,r.selectorKeys))};let a=x(e,r.name,n),o=C(a,`point`);if(S(a,r.name,o?r.pointAllowedKeys:r.selectorAllowedKeys,n),o){let e=r.pointConflictingSelectorKeys??r.selectorKeys;return a.some(t=>cn(t.key,e))&&b(`Maestro ${r.name}.point cannot be combined with a selector.`,t,n),{source:i,entries:a,target:r.parsePoint(w(a,`point`),`${r.name}.point`,n)}}return{source:i,entries:a,target:dn(Yt(a.filter(e=>cn(e.key,r.selectorKeys)),r.name,n))}}function en(e,t,n){let r=y(t,n),i=x(e,`swipe`,n);S(i,`swipe`,[`start`,`end`,`direction`,`duration`,`from`,`label`,`optional`],n);let a=E(i,`swipe`,n),o=C(i,`duration`)?N(w(i,`duration`),`swipe.duration`,n):void 0;if(C(i,`start`)||C(i,`end`))return{...tn(i,r,o,t,n),...a};let s=C(i,`direction`)?un(w(i,`direction`),`swipe.direction`,n):void 0;return C(i,`from`)||C(i,`label`)?{...nn(i,r,s,o,t,n),...a}:{...rn(r,s,o,t,n),...a}}function tn(e,t,n,r,i){C(e,`direction`)&&b(`Maestro swipe cannot combine direction with start/end coordinates.`,r,i),(!C(e,`start`)||!C(e,`end`))&&b(`Maestro swipe requires both start and end coordinates.`,r,i);let a=V(w(e,`start`),`swipe.start`,i),o=V(w(e,`end`),`swipe.end`,i);return a.space!==o.space&&b(`Maestro swipe start/end must use the same coordinate space.`,r,i),{kind:`swipe`,source:t,gesture:g({kind:`coordinates`,start:a,end:o,duration:n})}}function nn(e,t,n,r,i,a){n===void 0&&b(`Maestro target swipe requires direction.`,i,a);let o=C(e,`label`)?A(w(e,`label`),`swipe.label`,a):void 0;return{kind:`swipe`,source:t,gesture:g({kind:`target`,from:C(e,`from`)?B(w(e,`from`),`swipe.from`,a):{text:o??``},direction:n,duration:r,label:o})}}function rn(e,t,n,r,i){return t===void 0&&b(`Maestro swipe requires direction, target, or start/end coordinates.`,r,i),{kind:`swipe`,source:e,gesture:g({kind:`screen`,direction:t,duration:n})}}function an(e,t,n){let r=T(e,`retryTapIfNoChange`,e=>j(e,`tapOn.retryTapIfNoChange`,t)),i=T(e,`repeat`,e=>P(e,`tapOn.repeat`,t)),a=T(e,`delay`,e=>N(e,`tapOn.delay`,t)),o=E(e,`tapOn`,t).optional;return g({retryTapIfNoChange:r,repeat:i,delay:a,optional:o,label:n?T(e,`label`,e=>A(e,`tapOn.label`,t)):void 0})}function on(e,t,n,r,i){let a=A(n.value,`${r}.${t}`,i);a!==void 0&&(e[t]=a)}function sn(e,t,n,r,i){let a=j(n.value,`${r}.${t}`,i);a!==void 0&&(e[t]=a)}function cn(e,t){return t.includes(e)}function V(e,t,n){let r=k(e,t,n),i=/^\s*(\d+)\s*,\s*(\d+)\s*$/.exec(r);if(i)return{space:`absolute`,x:Number(i[1]),y:Number(i[2])};let a=/^\s*(\d+)%\s*,\s*(\d+)%\s*$/.exec(r);if(a){let r=Number(a[1]),i=Number(a[2]);return(r>100||i>100)&&b(`Maestro ${t} percentage coordinates must be between 0% and 100%.`,e,n),{space:`percent`,x:r,y:i}}/^\s*\d+(?:\.\d+)?%\s*,\s*\d+(?:\.\d+)?%\s*$/.test(r)&&b(`Maestro ${t} percentage coordinates must be whole numbers.`,e,n),b(`Maestro ${t} expects absolute or percentage coordinates.`,e,n)}function ln(e,t,n){let r=V(e,t,n);return r.space!==`absolute`&&b(`Maestro ${t} only supports absolute coordinates.`,e,n),r}function un(e,t,n){let r=k(e,t,n).toLowerCase();if(r===`up`||r===`down`||r===`left`||r===`right`)return r;b(`Maestro ${t} must be UP, DOWN, LEFT, or RIGHT.`,e,n)}function dn(e){return{space:`target`,selector:e}}function fn(e,t,n){let r=y(t,n);if(m(e))return{kind:`runScript`,source:r,file:k(e,`runScript`,n)};let i=x(e,`runScript`,n);return S(i,`runScript`,[`file`,`env`],n),C(i,`file`)||b(`Maestro runScript requires a file.`,t,n),g({kind:`runScript`,source:r,file:k(w(i,`file`),`runScript.file`,n),env:C(i,`env`)?F(w(i,`env`),`runScript.env`,n):void 0})}function pn(e,t,n,r){let i=y(t,n);if(m(e))return{kind:`runFlow`,source:i,include:{kind:`file`,path:k(e,`runFlow`,n)}};let a=x(e,`runFlow`,n);S(a,`runFlow`,[`file`,`commands`,`env`,`when`,`label`],n);let o=C(a,`file`);return o===C(a,`commands`)&&b(`Maestro runFlow requires exactly one of file or commands.`,t,n),g({kind:`runFlow`,source:i,include:o?{kind:`file`,path:k(w(a,`file`),`runFlow.file`,n)}:{kind:`commands`,commands:r(w(a,`commands`),`runFlow.commands`,n)},env:C(a,`env`)?F(w(a,`env`),`runFlow.env`,n):void 0,when:C(a,`when`)?gn(w(a,`when`),n):void 0,label:C(a,`label`)?A(w(a,`label`),`runFlow.label`,n):void 0})}function mn(e,t,n,r){let i=y(t,n),a=x(e,`repeat`,n);return S(a,`repeat`,[`times`,`commands`,`while`],n),C(a,`while`)&&b(`Maestro repeat.while is not supported; use repeat.times.`,w(a,`while`),n),C(a,`times`)||b(`Maestro repeat requires times.`,t,n),C(a,`commands`)||b(`Maestro repeat requires commands.`,t,n),{kind:`repeat`,source:i,times:P(w(a,`times`),`repeat.times`,n),commands:r(w(a,`commands`),`repeat.commands`,n)}}function hn(e,t,n,r){let i=y(t,n),a=x(e,`retry`,n);S(a,`retry`,[`maxRetries`,`commands`],n),C(a,`commands`)||b(`Maestro retry requires commands.`,t,n);let o=C(a,`maxRetries`)?P(w(a,`maxRetries`),`retry.maxRetries`,n):void 0;return g({kind:`retry`,source:i,commands:r(w(a,`commands`),`retry.commands`,n),maxRetries:o})}function gn(e,t){let n=x(e,`runFlow.when`,t);return S(n,`runFlow.when`,[`platform`,`visible`,`notVisible`,`true`],t),n.length===0&&b(`Maestro runFlow.when cannot be empty.`,e,t),g({platform:T(n,`platform`,e=>vn(e,t)),visible:T(n,`visible`,e=>B(e,`runFlow.when.visible`,t)),notVisible:T(n,`notVisible`,e=>B(e,`runFlow.when.notVisible`,t)),true:T(n,`true`,e=>_n(e,t))})}function _n(e,t){let n=O(e,`runFlow.when.true`,t);if(typeof n==`boolean`||typeof n==`string`)return n;b(`Maestro runFlow.when.true expects a boolean or expression string.`,e,t)}function vn(e,t){let n=k(e,`runFlow.when.platform`,t).toLowerCase();if(n===`android`||n===`ios`||n===`web`)return n;b(`Maestro runFlow.when.platform expects Android, iOS, or Web.`,e,t)}function H(e,t,n){return ye(e,t,n).map(e=>yn(e,n))}function yn(e,t){if(m(e))return typeof e.value!=`string`&&b(`Maestro command names must be strings.`,e,t),bn(e.value,e,t);p(e)||b(`Maestro commands must be a scalar or one-key map.`,e,t);let n=x(e,`command`,t);n.length!==1&&b(`Maestro command maps must contain exactly one command.`,e,t);let r=n[0];return Sn(r.key,r.value,e,t)}function bn(e,t,n){return Sn(e,null,t,n)}const xn={launchApp:Cn,tapOn:Xt,doubleTapOn:Zt,longPressOn:Qt,inputText:wn,eraseText:Tn,openLink:En,assertVisible:(e,t,n)=>Dn(`assertVisible`,e,t,n),assertNotVisible:(e,t,n)=>Dn(`assertNotVisible`,e,t,n),extendedWaitUntil:jn,takeScreenshot:Mn,scroll:Nn,scrollUntilVisible:Pn,swipe:en,hideKeyboard:Fn,pressKey:In,back:Ln,waitForAnimationToEnd:Rn,stopApp:zn,runScript:fn,runFlow:(e,t,n)=>pn(e,t,n,H),repeat:(e,t,n)=>mn(e,t,n,H),retry:(e,t,n)=>hn(e,t,n,H)};Object.keys(xn);function Sn(e,t,n,r){let i=xn[e];return i||b(`Maestro command "${e}" is not supported.`,n,r),i(t,n,r)}function Cn(e,t,n){let r=y(t,n);if(D(e))return{kind:`launchApp`,source:r};if(m(e))return{kind:`launchApp`,source:r,appId:k(e,`launchApp`,n)};let i=x(e,`launchApp`,n);return S(i,`launchApp`,[`appId`,`stopApp`,`clearState`,`arguments`,`launchArguments`],n),g({kind:`launchApp`,source:r,appId:T(i,`appId`,e=>A(e,`launchApp.appId`,n)),stopApp:T(i,`stopApp`,e=>j(e,`launchApp.stopApp`,n)),clearState:T(i,`clearState`,e=>j(e,`launchApp.clearState`,n)),arguments:T(i,`arguments`,e=>Bn(e,`launchApp.arguments`,n)),launchArguments:T(i,`launchArguments`,e=>Bn(e,`launchApp.launchArguments`,n))})}function wn(e,t,n){let r=y(t,n);if(m(e))return{kind:`inputText`,source:r,text:k(e,`inputText`,n)};let i=x(e,`inputText`,n);return S(i,`inputText`,[`text`,`label`],n),C(i,`text`)||b(`Maestro inputText requires text.`,t,n),g({kind:`inputText`,source:r,text:k(w(i,`text`),`inputText.text`,n),label:C(i,`label`)?A(w(i,`label`),`inputText.label`,n):void 0})}function Tn(e,t,n){let r=y(t,n);if(D(e))return{kind:`eraseText`,source:r};if(m(e))return{kind:`eraseText`,source:r,charactersToErase:P(e,`eraseText`,n)};let i=x(e,`eraseText`,n);return S(i,`eraseText`,[`charactersToErase`],n),g({kind:`eraseText`,source:r,charactersToErase:C(i,`charactersToErase`)?N(w(i,`charactersToErase`),`eraseText.charactersToErase`,n):void 0})}function En(e,t,n){let r=y(t,n);if(m(e))return{kind:`openLink`,source:r,link:k(e,`openLink`,n)};let i=x(e,`openLink`,n);return S(i,`openLink`,[`link`],n),{kind:`openLink`,source:r,link:k(w(i,`link`),`openLink.link`,n)}}function Dn(e,t,n,r){let i=y(n,r);if(m(t))return{kind:e,source:i,target:B(t,e,r)};let a=x(t,e,r);S(a,e,[`id`,`text`,`enabled`,`selected`,`optional`,`childOf`],r);let o=E(a,e,r),s=C(a,`childOf`)?B(w(a,`childOf`),`${e}.childOf`,r):void 0;return g({kind:e,source:i,target:Yt(a.filter(e=>e.key!==`optional`&&e.key!==`childOf`),e,r),...o,childOf:s})}const On=[...z,`optional`];function kn(e,t,n,r){if(!C(e,t))return;let{optional:i,...a}=B(w(e,t),n,r,On);return{selector:a,optional:i}}function An(e,t,n){let r=kn(e,`visible`,`extendedWaitUntil.visible`,n),i=kn(e,`notVisible`,`extendedWaitUntil.notVisible`,n);return r&&i&&b(`Maestro extendedWaitUntil cannot specify both visible and notVisible.`,t,n),!r&&!i&&b(`Maestro extendedWaitUntil requires visible or notVisible.`,t,n),r?{key:`visible`,selector:r.selector,optional:r.optional}:{key:`notVisible`,selector:i.selector,optional:i.optional}}function jn(e,t,n){let r=x(e,`extendedWaitUntil`,n);S(r,`extendedWaitUntil`,[`visible`,`notVisible`,`timeout`,`optional`],n);let i=E(r,`extendedWaitUntil`,n),a=An(r,t,n),o=C(r,`timeout`)?N(w(r,`timeout`),`extendedWaitUntil.timeout`,n):void 0,s=i.optional===!0||a.optional===!0?!0:void 0,c={kind:`extendedWaitUntil`,source:y(t,n),timeout:o,optional:s};return c[a.key]=a.selector,g(c)}function Mn(e,t,n){return{kind:`takeScreenshot`,source:y(t,n),path:k(e,`takeScreenshot`,n)}}function Nn(e,t,n){return D(e)||b(`Maestro scroll does not accept options yet.`,t,n),{kind:`scroll`,source:y(t,n)}}function Pn(e,t,n){let r=y(t,n);if(m(e))return{kind:`scrollUntilVisible`,source:r,element:B(e,`scrollUntilVisible.element`,n)};let i=x(e,`scrollUntilVisible`,n);S(i,`scrollUntilVisible`,[`element`,`direction`,`timeout`,`optional`],n);let a=E(i,`scrollUntilVisible`,n),o=kn(i,`element`,`scrollUntilVisible.element`,n);o||b(`Maestro scrollUntilVisible requires element.`,t,n);let s=C(i,`direction`)?un(w(i,`direction`),`scrollUntilVisible.direction`,n):void 0,c=C(i,`timeout`)?N(w(i,`timeout`),`scrollUntilVisible.timeout`,n):void 0,l=a.optional===!0||o.optional===!0?!0:void 0;return g({kind:`scrollUntilVisible`,source:r,element:o.selector,direction:s,timeout:c,optional:l})}function Fn(e,t,n){return D(e)||b(`Maestro hideKeyboard does not accept options.`,t,n),{kind:`hideKeyboard`,source:y(t,n)}}function In(e,t,n){let r=k(e,`pressKey`,n).toLowerCase();return r!==`back`&&r!==`enter`&&r!==`return`&&r!==`home`&&b(`Maestro pressKey "${r}" is not supported.`,e,n),{kind:`pressKey`,source:y(t,n),key:r}}function Ln(e,t,n){return D(e)||b(`Maestro back does not accept options.`,t,n),{kind:`back`,source:y(t,n)}}function Rn(e,t,n){let r=y(t,n);if(D(e))return{kind:`waitForAnimationToEnd`,source:r};if(m(e))return g({kind:`waitForAnimationToEnd`,source:r,timeout:N(e,`waitForAnimationToEnd`,n)});let i=x(e,`waitForAnimationToEnd`,n);return S(i,`waitForAnimationToEnd`,[`timeout`],n),g({kind:`waitForAnimationToEnd`,source:r,timeout:C(i,`timeout`)?N(w(i,`timeout`),`waitForAnimationToEnd.timeout`,n):void 0})}function zn(e,t,n){let r=y(t,n);return D(e)?{kind:`stopApp`,source:r}:{kind:`stopApp`,source:r,appId:k(e,`stopApp`,n)}}function Bn(e,t,n){if(h(e))return{kind:`list`,values:ye(e,t,n).map((e,r)=>{let i=O(e,`${t}[${r}]`,n);return i===null&&b(`${t}[${r}] expects a scalar value.`,e,n),i})};if(p(e))return{kind:`map`,values:F(e,t,n)};let r=O(e,t,n);return r===null&&b(`${t} expects a scalar, list, or map.`,e,n),{kind:`scalar`,value:r}}function Vn(e,n={}){let r=new ie,i=g({lineCounter:r,sourcePath:n.sourcePath}),a=oe(e,{lineCounter:r});for(let e of a)if(e.errors.length>0){let n=e.errors[0];throw new t(`INVALID_ARGS`,`Invalid Maestro YAML flow: ${n?.message??`Invalid Maestro YAML flow.`} (${ve(_e(n?.pos[0],i))})`)}let o=a.map(e=>e.contents).filter(e=>e!==null);o.length===0&&b(`Maestro flow is empty.`,void 0,i);let s,c;o.length===1&&h(o[0])?c=o[0]:o.length===2&&p(o[0])&&h(o[1])?(s=o[0],c=o[1]):b(`Maestro flow must contain a command list, optionally preceded by one config document.`,o[0],i);let l=s?Hn(s,i):{};return{kind:`program`,source:y(s??c,i),config:l,commands:H(c,`commands`,i)}}function Hn(e,t){let n=x(e,`flow config`,t);return S(n,`flow config`,[`name`,`appId`,`tags`,`env`,`onFlowStart`,`onFlowComplete`],t),g({name:T(n,`name`,e=>A(e,`name`,t)),appId:T(n,`appId`,e=>A(e,`appId`,t)),tags:T(n,`tags`,e=>be(e,`tags`,t)),env:T(n,`env`,e=>F(e,`env`,t)),onFlowStart:T(n,`onFlowStart`,e=>H(e,`onFlowStart`,t)),onFlowComplete:T(n,`onFlowComplete`,e=>H(e,`onFlowComplete`,t))})}function Un(e,t){let r=new Map;return async(i,a,o)=>{if(o?.aborted)throw n();let s=Wn(i,a,e),c=r.get(s);if(c)return c;let l=Vn(t(s),{sourcePath:s});return r.set(s,l),l}}function Wn(e,t,n){let r=t?f.dirname(t):n;return f.resolve(r,e)}function Gn(e){return Le(e)?{command:e.kind,...e.kind===`runFlow`?W(e.label??e.includePath):{}}:{command:e.kind,...Kn(e)}}function Kn(e){return qn(e)?W(er(e.target)):Jn(e)?Yn(e):e.kind===`inputText`?W(`<text>`):Xn(e)}function qn(e){return e.kind===`tapOn`||e.kind===`doubleTapOn`||e.kind===`longPressOn`}function Jn(e){return e.kind===`assertVisible`||e.kind===`assertNotVisible`||e.kind===`extendedWaitUntil`||e.kind===`scrollUntilVisible`}function Yn(e){switch(e.kind){case`assertVisible`:case`assertNotVisible`:return W(U(e.target));case`extendedWaitUntil`:return W(U(e.visible??e.notVisible));case`scrollUntilVisible`:return W(U(e.element))}}function Xn(e){return Zn(e)?Qn(e):e.kind===`swipe`?$n(e):e.kind===`runFlow`?W(e.label??(e.include.kind===`file`?e.include.path:``)):{}}function Zn(e){return e.kind===`openLink`||e.kind===`takeScreenshot`||e.kind===`runScript`||e.kind===`pressKey`}function Qn(e){switch(e.kind){case`openLink`:return W(e.link);case`takeScreenshot`:return W(e.path);case`runScript`:return W(e.file);case`pressKey`:return W(e.key)}}function $n(e){return W(e.gesture.kind===`coordinates`?`${tr(e.gesture.start)} to ${tr(e.gesture.end)}`:e.gesture.direction)}function er(e){return e.space===`target`?U(e.selector):`${e.x},${e.y}${e.space===`percent`?`%`:``}`}function U(e){return e?.id??e?.text??e?.label}function tr(e){return`${e.x},${e.y}${e.space===`percent`?`%`:``}`}function W(e){return e?{value:e}:{}}const nr=new Set(`^$\\.*+?()[]{}|`);function rr(e,t){try{return RegExp(`^(?:${t})$`,`ims`).test(e)}catch{return e.toLocaleLowerCase()===t.toLocaleLowerCase()}}function ir(e){try{new RegExp(e)}catch{return e}let t=``;for(let n=0;n<e.length;n+=1){let r=e[n];if(r!==`\\`){if(nr.has(r))return;t+=r;continue}let i=e[n+1];if(i===void 0||!nr.has(i))return;t+=i,n+=1}return t}function ar(e,t,n){if(n===`android`&&e.visibleToUser===!1)return!1;if(r(e.rect))return or(e,t);if(e.rect)return!1;if(n!==`android`&&e.hittable===!0)return!0;let i=o(t,e,d(t),e=>u(e,n)?e:null);return i?r(i.rect)?or(i,t):n!==`android`&&i.hittable===!0:!1}function G(e,t,n,r){return!!o(e,t,r,e=>e.index===n.index?e:null)}function or(e,t){if(!e.rect)return!0;let n=l(e,d(t),e=>!!e.rect)?.rect??sr(t,e.rect);return n?ee(e.rect,n):!0}function sr(e,t){let n=e.filter(e=>e.rect&&c(e)).map(e=>e.rect).sort((e,t)=>t.width*t.height-e.width*e.height),r=t.x+t.width/2,i=t.y+t.height/2;return n.find(e=>te(e,r,i))??n[0]??null}function K(e,t){let n=[t.id===void 0?void 0:lr(e.identifier,t.id),t.text===void 0?void 0:ur(e,t.text),t.label===void 0?void 0:lr(e.label,t.label)].filter(e=>e!==void 0);return!(n.length===0&&t.enabled===void 0&&t.selected===void 0||n.some(e=>!e)||t.enabled!==void 0&&e.enabled!==!1!==t.enabled||t.selected!==void 0&&e.selected===!0!==t.selected)}function cr(e){return e.matches.filter(t=>ar(t,e.nodes,e.platform))}function lr(e,t){let n=e??``;return ue(n)===ue(t)?!0:rr(n,t)}function ur(e,t){return[e.label,de(e),e.identifier].filter(e=>!!e).some(e=>lr(e,t))}function dr(e,t,n,r){let i=yr(e,e.nodes.filter(e=>K(e,t)),r),a=cr({nodes:e.nodes,matches:i.matches,platform:n});return{matches:i.matches,visible:a,ranked:fr(e.nodes,a,t,n),parentMatched:i.parentMatched}}function fr(e,t,n,r){if(r!==`ios`||!hr(n))return t;let i=d(e);return t.filter(r=>{if(vr(r))return!0;let a=t.filter(e=>e!==r&&gr(r,e,n));return a.some(t=>vr(t)&&G(e,r,t,i))?!1:!a.some(t=>G(e,t,r,i))})}function pr(e,t){let n=t===void 0?e.find(mr):e[t];return!n||!mr(n)?null:{node:n,rect:n.rect}}function mr(e){return r(e.rect)}function hr(e){return e.id!==void 0||e.label!==void 0||e.text!==void 0}function gr(e,t,n){if(n.id!==void 0&&q(e.identifier)!==q(t.identifier)||n.label!==void 0&&q(e.label)!==q(t.label))return!1;if(n.text!==void 0){let n=_r(e),r=new Set(_r(t));if(!n.some(e=>r.has(e)))return!1}return!0}function _r(e){return[e.label,e.value,e.identifier].map(q).filter(e=>e!==void 0)}function q(e){if(e)return ue(e)||void 0}function vr(e){let t=i(e.type??``);return t===`button`||t===`link`||t===`switch`||t===`searchfield`||t===`textfield`||t===`securetextfield`||t===`textview`}function yr(e,t,n){if(!n)return{matches:t,parentMatched:!0};let r=e.nodes.filter(e=>K(e,n));if(r.length===0)return{matches:[],parentMatched:!1};let i=d(e.nodes);return{matches:t.filter(t=>r.some(n=>G(e.nodes,t,n,i))),parentMatched:!0}}const br=Symbol(`maestroFlowProgram`),xr=Symbol(`maestroFailureCommand`),Sr=Symbol(`maestroFailurePlan`);function Cr(e,t){let n=Vn(e,{sourcePath:t});return{sourcePath:t,name:n.config.name,appTarget:Or(n),[br]:n}}async function wr(e,t,n){let r;try{let i=Un(f.dirname(e.sourcePath),n.readSource),a=await ct(e[br],{defaults:n.defaults,env:n.env,platform:n.platform,target:n.target,runtimeHints:n.runtimeHints,loadProgram:i,signal:n.signal}),o=ft(a,{from:n.from,planDigest:n.planDigest}),s=await Wt(a,t,{defaults:n.defaults,env:n.env,platform:n.platform,target:n.target,loadProgram:i,signal:n.signal,startIndex:o,observer:Er(a,n.observer,e=>{r=e})});return{ok:!0,replayed:a.total-o,planDigest:a.digest,startIndex:o,artifactPaths:s.artifactPaths,...s.warnings?{warnings:s.warnings}:{}}}catch(e){return{ok:!1,error:r?.error??e,...r?{failure:r}:{}}}}function Tr(e,t){let n=Ar(e[xr]),r=e[Sr].platform;return!n||r!==`android`&&r!==`ios`?[]:dr(t,n.selector,r,n.childOf).ranked.map(e=>({node:e,basis:jr(n.selector,e)}))}function Er(e,t,n){return{commandStarted:e=>t?.actionStarted?.(Dr(e)),commandCompleted:e=>t?.actionCompleted?.({...Dr(e),durationMs:e.durationMs,runtimeMetrics:e.runtimeMetrics,data:e.data}),commandFailed:r=>{let i=dt(e,{from:r.stepIndex,planDigest:e.digest}),a={...Dr(r),durationMs:r.durationMs,error:r.error,artifactPaths:r.artifactPaths,isControl:Le(r.command),redactions:r.command.kind===`inputText`&&r.command.text.length>0?[{name:`inputText.text`,value:r.command.text}]:[],resume:i.allowed?{allowed:!0,from:r.stepIndex,planDigest:e.digest}:{allowed:!1,from:r.stepIndex,planDigest:e.digest,reason:i.reason},[xr]:r.command,[Sr]:e};n(a),t?.actionFailed?.(a)}}}function Dr(e){let t=Gn(e.command);return{action:t.command,...t.value?{value:t.value}:{},source:e.source,generation:e.generation,stepIndex:e.stepIndex,stepTotal:e.stepTotal}}function Or(e){return[e.config.appId,...[...e.config.onFlowStart??[],...e.commands].filter(e=>e.kind===`launchApp`).map(e=>e.kind===`launchApp`?e.appId:void 0)].find(kr)}function kr(e){return!!(e?.trim()&&!e.includes(`$`)&&!s(e))}function Ar(e){switch(e.kind){case`tapOn`:return e.target.space===`target`?{selector:e.target.selector,childOf:e.childOf}:void 0;case`doubleTapOn`:case`longPressOn`:return e.target.space===`target`?{selector:e.target.selector}:void 0;case`assertVisible`:case`assertNotVisible`:return{selector:e.target};case`extendedWaitUntil`:return e.visible?{selector:e.visible}:e.notVisible?{selector:e.notVisible}:void 0;case`scrollUntilVisible`:return{selector:e.element};case`swipe`:return e.gesture.kind===`target`?{selector:e.gesture.from}:void 0;default:return}}function jr(e,t){return e.id!==void 0||e.text!==void 0&&K({...t,label:void 0,value:void 0},{text:e.text})?`id`:e.text!==void 0||e.label!==void 0?`label`:`other`}function Mr(e){let t={[e.entryPath]:e.entrySource},n=Nr(e.entrySource,e.entryPath);return n&&Pr({program:n,sourcePath:e.entryPath,context:pe({},{...e.env}),files:t,readSource:e.readSource}),t}function Nr(e,t){try{return Vn(e,{sourcePath:t})}catch{return}}function Pr(e){let t=e.context.enter(e.program.config.env??{});try{Fr([...e.program.config.onFlowStart??[],...e.program.commands,...e.program.config.onFlowComplete??[]],e)}finally{t()}}function Fr(e,t){for(let n of e){if(n.kind===`repeat`||n.kind===`retry`){Fr(n.commands,t);continue}if(n.kind!==`runFlow`)continue;let e=t.context.enter(n.env??{});try{if(n.include.kind===`commands`){Fr(n.include.commands,t);continue}Ir(n.include.path,t)}finally{e()}}}function Ir(e,t){let n=t.context.resolveDeferred(e);if(n.includes("${"))return;let r=Wn(n,t.sourcePath,t.sourcePath);if(t.files[r]!==void 0)return;let i=t.readSource(r);if(i===void 0)return;t.files[r]=i;let a=Nr(i,r);a&&Pr({...t,program:a,sourcePath:r})}function J(e,t){return g({appId:e.appId,env:e.env,generation:e.generation,invalidateObservation:e.invalidateObservation,source:t?.source,cachedObservation:e.cachedObservation,signal:e.signal})}function Lr(e){return g({env:e.env,generation:e.generation,cachedObservation:e.cachedObservation,signal:e.signal})}async function Rr(e,t){let n=Hr(await t.observe({condition:e.condition,timeoutMs:e.timeoutMs},Lr(e)),e.generation),r={kind:`selector`,selector:e.condition.selector,visible:n.visible,candidateCount:n.candidateCount,...n.ref?{ref:n.ref}:{},...e.condition.childOf?{childOf:e.condition.childOf}:{}};return{generation:e.generation,matched:zr(e.condition,n),candidateCount:n.candidateCount,evidence:r}}function zr(e,t){return e.kind===`visible`?t.matched&&t.visible:!t.matched||!t.visible}async function Br(e,t,n,r){let i=Hr(await r.resolveTarget({selector:e,...t},J(n,n.command)),n.generation);if(!i.matched||!i.visible||!i.rect)throw vt(`Maestro target did not resolve to a visible element.`,{selector:e,candidateCount:i.candidateCount});return{kind:`selector`,selector:e,query:{selector:e,...t},...i,rect:i.rect}}function Y(e){let t={kind:`selector`,selector:e.selector,visible:e.visible,candidateCount:e.candidateCount,...e.ref?{ref:e.ref}:{},...e.query.childOf?{childOf:e.query.childOf}:{}};return{generation:e.generation,matched:e.matched&&e.visible,candidateCount:e.candidateCount,evidence:t}}function Vr(e){if(!e||typeof e!=`object`)return!1;let t=e;return[`x`,`y`,`width`,`height`].every(e=>typeof t[e]==`number`&&Number.isFinite(t[e]))}function Hr(e,t){return Ur(e,t),Wr(e),Gr(e),Kr(e),e}function Ur(e,n){if(e.generation!==n)throw new t(`COMMAND_FAILED`,`Maestro target evidence generation ${e.generation} does not match ${n}.`)}function Wr(e){if(!Number.isInteger(e.candidateCount)||e.candidateCount<0)throw new t(`COMMAND_FAILED`,`Maestro target evidence has an invalid candidate count.`)}function Gr(e){if(e.rect!==void 0&&!Vr(e.rect)||e.viewport!==void 0&&!Vr(e.viewport))throw new t(`COMMAND_FAILED`,`Maestro target evidence has invalid geometry.`)}function Kr(e){if(e.surfaceSignature!==void 0&&typeof e.surfaceSignature!=`string`)throw new t(`COMMAND_FAILED`,`Maestro target evidence has an invalid surface signature.`)}function qr(e,t,n,r,i){let a=Jr(e,t,n,i);if(!a)return;let{start:o,end:s}=ei(a,n);return{gesture:{from:o,to:s,durationMs:r},viewport:a}}function Jr(e,t,n,i){let o=n===`up`||n===`down`,s=cr({nodes:e.nodes,matches:e.nodes.filter(e=>a(e)),platform:i}),c=Xr(e.nodes)??Zr(s);if(!c||!r(c))return;let l=s.flatMap(e=>{if(!r(e.rect))return[];let t=Qr(e.rect,c);return!t||(o?t.height<=t.width:t.width<t.height)?[]:[{node:e,viewport:t}]}),u=new Map(e.nodes.map(e=>[e.index,e])),ee=new Map(l.map(e=>[e.node.index,e]));for(let n of e.nodes.filter(e=>K(e,t))){let e=Yr(n,u),t=e?ee.get(e.index):void 0;if(t)return t.viewport}return l.sort($r)[0]?.viewport}function Yr(e,t){return a(e)?e:l(e,t)}function Xr(e){return e.filter(e=>r(e.rect)&&c(e)).sort((e,t)=>t.rect.width*t.rect.height-e.rect.width*e.rect.height)[0]?.rect}function Zr(e){let t;for(let n of e)r(n.rect)&&(!t||n.rect.width*n.rect.height>t.width*t.height)&&(t=n.rect);return t}function Qr(e,t){let n=Math.max(e.x,t.x),r=Math.max(e.y,t.y),i=Math.min(e.x+e.width,t.x+t.width)-n,a=Math.min(e.y+e.height,t.y+t.height)-r;return i>0&&a>0?{x:n,y:r,width:i,height:a}:void 0}function $r(e,t){return t.viewport.width*t.viewport.height-e.viewport.width*e.viewport.height}function ei(e,t){let n=X(e,.5,.5),r=R.scrollUntilVisibleSwipe.nearEdgeFraction,i=R.scrollUntilVisibleSwipe.farEdgeFraction;switch(t){case`up`:return{start:n,end:X(e,.5,i)};case`down`:return{start:n,end:X(e,.5,r)};case`left`:return{start:n,end:X(e,i,.5)};case`right`:return{start:n,end:X(e,r,.5)}}}async function ti(e,n,r){let i=I(e.duration,`swipe.duration`);if(e.kind===`coordinates`){if(e.start.space!==e.end.space)throw new t(`INVALID_ARGS`,`Maestro swipe endpoints must use the same coordinate space.`);let a=e.start.space===`percent`?await r.resolveGestureViewport(J(n,n.command)):void 0;return{authored:e,gesture:ri(await ni(e.start,n,r,a),await ni(e.end,n,r,a),i),...a?{viewport:a}:{}}}if(e.kind===`screen`){let t=await r.resolveGestureViewport(J(n,n.command)),{start:a,end:o}=ii(t,e.direction,r.platform);return{authored:e,gesture:ri(a,o,i),viewport:t}}let a=await Br(e.from,{purpose:`swipe`,timeoutMs:`optional`in n.command&&n.command.optional===!0?R.command.optionalTargetLookupTimeoutMs:R.command.targetLookupTimeoutMs},n,r),o=a.viewport??await r.resolveGestureViewport(J(n,n.command)),{start:s,end:c}=ai(a,e.direction,o);return{authored:e,gesture:ri(s,c,i),target:a,viewport:o}}async function ni(e,t,n,r){if(e.space===`absolute`)return{x:e.x,y:e.y};let i=r??await n.resolveGestureViewport(J(t,t.command));return{x:i.x+Math.trunc(i.width*e.x/100),y:i.y+Math.trunc(i.height*e.y/100)}}function ri(e,t,n){return{from:e,to:t,durationMs:n??R.command.swipeDurationMs}}function ii(e,t,n){if(t===`left`||t===`right`){let n=ne(t,{referenceWidth:e.width,referenceHeight:e.height});return{start:{x:e.x+n.x1,y:e.y+n.y1},end:{x:e.x+n.x2,y:e.y+n.y2}}}let r=R.screenSwipe,i=X(e,r.centerFraction,r.nearEdgeFraction),a=X(e,r.centerFraction,r.farEdgeFraction),o=X(e,r.centerFraction,r.downStartFraction),s=X(e,r.centerFraction,r.upStartFraction[n]);return t===`up`?{start:s,end:i}:{start:o,end:a}}function X(e,t,n){return{x:e.x+Math.trunc(e.width*t),y:e.y+Math.trunc(e.height*n)}}function ai(e,t,n){let r=_(e.rect),i=n.x+Math.trunc(n.width*R.targetSwipe.nearEdgeFraction),a=n.y+Math.trunc(n.height*R.targetSwipe.nearEdgeFraction),o=n.x+Math.trunc(n.width*R.targetSwipe.farEdgeFraction),s=n.y+Math.trunc(n.height*R.targetSwipe.farEdgeFraction);switch(t){case`up`:return{start:r,end:{x:r.x,y:a}};case`down`:return{start:r,end:{x:r.x,y:s}};case`left`:return{start:r,end:{x:i,y:r.y}};case`right`:return{start:r,end:{x:o,y:r.y}}}}const oi={launchApp:di,stopApp:di,openLink:di,tapOn:pi,doubleTapOn:pi,longPressOn:pi,swipe:_i,inputText:vi,eraseText:vi,scroll:Q,scrollUntilVisible:Q,hideKeyboard:Q,pressKey:Q,back:Q,waitForAnimationToEnd:Q,takeScreenshot:xi,runScript:xi,assertVisible:Si,assertNotVisible:Si,extendedWaitUntil:Si},si={launchApp:!0,stopApp:!0,openLink:!0,tapOn:!0,doubleTapOn:!0,longPressOn:!0,swipe:!0,inputText:!0,eraseText:!0,scroll:!0,scrollUntilVisible:!0,hideKeyboard:!0,pressKey:!0,back:!0,waitForAnimationToEnd:!0,takeScreenshot:!1,runScript:!1,assertVisible:!1,assertNotVisible:!1,extendedWaitUntil:!1};function ci(e){return si[e.kind]}async function li(e,t){let n=e.command;return await ui(n,e,t,J(e,n))}function ui(e,t,n,r){let i=oi[e.kind];return i(e,t,n,r)}async function di(e,t,n,r){switch(e.kind){case`launchApp`:return await $(n.launchApp,fi(e,t),r,`invalidate`);case`stopApp`:return await $(n.stopApp,{appId:e.appId??t.appId},r,`invalidate`);case`openLink`:return await $(n.openLink,{link:e.link},r,`invalidate`)}}function fi(e,t){return g({appId:e.appId??t.appId,stopApp:e.stopApp,clearState:e.clearState,arguments:e.arguments,launchArguments:e.launchArguments})}async function pi(e,t,n,r){switch(e.kind){case`tapOn`:return await mi(e,t,n,r);case`doubleTapOn`:{let i=await Ai(e.target,{purpose:`doubleTap`,timeoutMs:Z(e)},t,n),a=I(e.delay,`doubleTapOn.delay`)??R.command.repeatDelayMs;return await $(n.doubleTapOn,{target:i,delay:a},r,`invalidate`,i.resolution?Y(i.resolution):void 0)}case`longPressOn`:{let i=await Ai(e.target,{purpose:`longPress`,timeoutMs:Z(e)},t,n);return await $(n.longPressOn,{target:i},r,`invalidate`,i.resolution?Y(i.resolution):void 0)}}}async function mi(e,t,n,r){let i=await hi(e,t,n);return await $(n.tapOn,gi(e,i),r,`invalidate`,i.resolution?Y(i.resolution):void 0)}async function hi(e,t,n){let r={purpose:`tap`,timeoutMs:Z(e),index:I(e.index,`tapOn.index`),childOf:e.childOf,allowAtomicSelectorDispatch:e.repeat===void 0&&e.delay===void 0,...e.retryTapIfNoChange===!0?{includeSurfaceSignature:!0}:{}};return await Ai(e.target,r,t,n)}function Z(e){return e.optional===!0?R.command.optionalTargetLookupTimeoutMs:R.command.targetLookupTimeoutMs}function gi(e,t){let n=I(e.repeat,`tapOn.repeat`),r=I(e.delay,`tapOn.delay`),i=n===void 0?r:r??R.command.repeatDelayMs;return g({target:t,retryTapIfNoChange:e.retryTapIfNoChange,repeat:n,delay:i})}async function _i(e,t,n,r){let i=await ti(e.gesture,t,n);return await $(n.gesture,i.gesture,{...r,...i.viewport?{gestureViewport:i.viewport}:{}},`invalidate`,i.target?Y(i.target):void 0)}async function vi(e,t,n,r){switch(e.kind){case`inputText`:return await $(n.inputText,g({text:e.text,label:e.label}),r,`invalidate`);case`eraseText`:return await $(n.eraseText,g({charactersToErase:I(e.charactersToErase,`eraseText.charactersToErase`)}),r,`invalidate`)}}async function Q(e,t,n,r){switch(e.kind){case`scroll`:return await $(n.scroll,{direction:`down`},r,`invalidate`);case`scrollUntilVisible`:return await $(n.scrollUntilVisible,yi(e),r,`invalidate`);case`hideKeyboard`:return await $(n.hideKeyboard,{},r,`invalidate`);case`pressKey`:return await $(n.pressKey,{key:e.key},r,`invalidate`);case`back`:return await $(n.back,{},r,`invalidate`);case`waitForAnimationToEnd`:return await $(n.waitForAnimationToEnd,bi(e),r,`preserve`)}}function yi(e){return{selector:e.element,direction:e.direction??`down`,timeoutMs:I(e.timeout,`scrollUntilVisible.timeout`)??R.command.scrollUntilVisibleTimeoutMs,durationMs:mt(R.command.scrollUntilVisibleSpeed)}}function bi(e){return g({timeoutMs:I(e.timeout,`waitForAnimationToEnd.timeout`)})}async function xi(e,t,n,r){switch(e.kind){case`takeScreenshot`:return wi(await n.takeScreenshot({path:e.path},r),[],void 0,r.generation);case`runScript`:return await $(n.runScript,g({file:e.file,env:e.env}),r,`preserve`)}}async function Si(e){throw new t(`COMMAND_FAILED`,`Maestro ${e.kind} must be executed by the observation engine.`)}async function $(e,t,n,r,i){let a=Ci(n,r);return wi(await e(t,a),[],r===`preserve`?i:void 0,a.generation)}function Ci(e,t){return t===`preserve`?e:(e.invalidateObservation(),{...e,generation:e.generation+1})}function wi(e,t,n,r){let i=e?.observation;return Ti(i,r),{...Ei(n??i),...Di(e?.outputEnv),...Oi(t,e?.artifactPaths),...ki(e?.data),...e?.visualStabilityReached===void 0?{}:{visualStabilityReached:e.visualStabilityReached}}}function Ti(e,n){if(!(!e||n===void 0||e.generation===n))throw new t(`COMMAND_FAILED`,`Maestro operation evidence generation ${e.generation} does not match ${n}.`)}function Ei(e){return e?{observation:e}:{}}function Di(e){return e?{outputEnv:{...e}}:{}}function Oi(e,t){let n=[...new Set([...e,...t??[]])];return n.length>0?{artifactPaths:n}:{}}function ki(e){return e&&Object.keys(e).length>0?{data:{...e}}:{}}async function Ai(e,t,n,r){if(e.space===`target`){let i=await Br(e.selector,t,n,r);return{authored:e,point:_(i.rect),resolution:i}}return{authored:e,point:await ni(e,n,r)}}function ji(e,t,n,r={}){let i=dr(e,t.selector,n,t.childOf);if(!i.parentMatched)return{ok:!1,message:`Maestro childOf parent did not match.`,evidence:Ii(t,i.matches,[],void 0)};let{matches:a,ranked:o}=i,s=pr(o,t.index),c=Ii(t,a,o,s?.node);if(!s)return Ni(t,a,o,c);let l=Mi(s.node,t,n,r),u=l?pr(l.mapped,void 0):void 0,ee=r.interactiveBounds===!0?u?.rect??s.rect:s.rect;return{ok:!0,node:s.node,rect:ee,matches:o.length,dispatchCandidates:n===`ios`&&t.allowAtomicSelectorDispatch&&!t.childOf?Pi(s,l):0,evidence:c}}function Mi(e,t,n,r){let i=r.interaction;if(!i)return;let{snapshot:a,sourceIndexes:o}=i,s=o.get(e.index);if(s===void 0)return;let c=d(a.nodes),l=c.get(s);if(!l)return;let u=dr(a,t.selector,n,t.childOf).ranked;return{all:u,mapped:u.filter(e=>e.index===l.index||G(a.nodes,e,l,c))}}function Ni(e,t,n,r){return t.length>0&&n.length===0?{ok:!1,message:`Maestro selector matched ${t.length} element(s), but none were visible.`,evidence:r}:{ok:!1,message:`Maestro selector did not match${e.index===void 0?``:` index ${e.index}`}.`,evidence:r}}function Pi(e,t){if(!t)return 0;if(t.all.length!==1)return t.all.length;let n=pr(t.mapped,void 0);return n&&n.node.hittable!==!1&&Fi(n.rect,e.rect)?1:0}function Fi(e,t){let n=_(e),r=_(t);return n.x===r.x&&n.y===r.y}function Ii(e,t,n,r){return g({selector:e.selector,childOf:e.childOf,matched:t.length>0,visible:n.length>0,candidateCount:t.length,ref:r?.ref})}const Li={settleTimeoutMs:gt,retryTapMaxAttempts:R.command.retryTapMaxAttempts,longPressDurationMs:R.command.longPressDurationMs,eraseTextMaxCharacters:R.command.eraseTextMaxCharacters,scrollUntilVisiblePercentage:R.command.scrollUntilVisiblePercentage,animationWaitTimeoutMs:R.command.waitForAnimationToEndTimeoutMs,animationDifferencePercent:R.command.waitForAnimationToEndDifferencePercent,observationPollMs:R.observation.pollIntervalMs};function Ri(e,t={}){return{execute:async n=>{let r=J(n,n.command),i=n.command.kind===`waitForAnimationToEnd`;await t.beforeExecute?.({context:r,requiresSettledPredecessor:ci(n.command)&&!i,visualStabilityBarrier:i});let a=await li(n,e);return t.afterExecute?.({context:r,visualStabilityReached:i&&a.visualStabilityReached===!0}),delete a.visualStabilityReached,a},observe:async n=>{let r=await Rr(n,e);return t.bindObservation?.(r)??r},...t.readMetrics?{readMetrics:t.readMetrics}:{}}}var zi=e({MAESTRO_COMPATIBILITY_ADR_URL:()=>MAESTRO_COMPATIBILITY_ADR_URL,MAESTRO_COMPATIBILITY_ISSUE_URL:()=>MAESTRO_COMPATIBILITY_ISSUE_URL,collectMaestroFlowSources:()=>Mr});export{qr as a,wr as c,qt as d,vt as f,ji as i,Cr as l,Li as n,zr as o,ht as p,Ri as r,Tr as s,zi as t,ir as u};
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";var t=e({inventoryModule:()=>a,runtimeModule:()=>i,vegaPlugin:()=>o,vegaToolchainCheck:()=>s,withVegaToolProvider:()=>c});function n(e){return(async(...t)=>await(await e())(...t))}const r=Object.freeze({family:`vega`}),i=Object.freeze({...r,loadRuntime:async e=>{let{createVegaPlatformRuntime:t}=await import(`./runtime8.js`);return t(e)}}),a=Object.freeze({...r,loadInventory:async e=>{let{createVegaInventory:t}=await import(`./inventory5.js`);return t(e)}}),o={id:`vega`,platforms:[`vega`],providers:{platformGatedResolvers:[`vegaToolProvider`]},createInteractor:async(e,t)=>{let{createVegaInteractor:n}=await import(`./interactor2.js`);return n(e,t)}},s=n(async()=>(await import(`./doctor2.js`)).vegaToolchainCheck);async function c(e,t){let{withVegaToolProvider:n}=await import(`./tool-provider3.js`).then(e=>e.n);return await n(e,t)}export{o as i,i as n,t as r,a as t};
|
package/dist/src/src5.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";var t=e({backLinux:()=>c,captureLinuxSurfaceSnapshot:()=>C,closeLinuxApp:()=>s,doubleClickLinux:()=>f,fillLinux:()=>p,focusLinux:()=>m,homeLinux:()=>l,inventoryModule:()=>a,longPressLinux:()=>h,middleClickLinux:()=>v,openLinuxApp:()=>o,pressLinux:()=>g,readLinuxClipboard:()=>u,readLinuxTextAtPoint:()=>w,rightClickLinux:()=>_,runtimeModule:()=>i,screenshotLinux:()=>S,scrollLinux:()=>y,swipeLinux:()=>b,typeLinux:()=>x,withLinuxToolProvider:()=>T,writeLinuxClipboard:()=>d});function n(e){return(async(...t)=>await(await e())(...t))}const r=Object.freeze({family:`linux`}),i=Object.freeze({...r,loadRuntime:async e=>{let{createLinuxPlatformRuntime:t}=await import(`./runtime7.js`);return t(e)}}),a=Object.freeze({...r,loadInventory:async e=>{let{createLinuxInventory:t}=await import(`./inventory4.js`);return t(e)}}),o=n(async()=>(await import(`./app-lifecycle3.js`)).openLinuxApp),s=n(async()=>(await import(`./app-lifecycle3.js`)).closeLinuxApp),c=n(async()=>(await import(`./app-lifecycle3.js`)).backLinux),l=n(async()=>(await import(`./app-lifecycle3.js`)).homeLinux),u=n(async()=>(await import(`./clipboard.js`)).readLinuxClipboard),d=n(async()=>(await import(`./clipboard.js`)).writeLinuxClipboard),f=n(async()=>(await import(`./input-actions2.js`)).doubleClickLinux),p=n(async()=>(await import(`./input-actions2.js`)).fillLinux),m=n(async()=>(await import(`./input-actions2.js`)).focusLinux),h=n(async()=>(await import(`./input-actions2.js`)).longPressLinux),g=n(async()=>(await import(`./input-actions2.js`)).pressLinux),_=n(async()=>(await import(`./input-actions2.js`)).rightClickLinux),v=n(async()=>(await import(`./input-actions2.js`)).middleClickLinux),y=n(async()=>(await import(`./input-actions2.js`)).scrollLinux),b=n(async()=>(await import(`./input-actions2.js`)).swipeLinux),x=n(async()=>(await import(`./input-actions2.js`)).typeLinux),S=n(async()=>(await import(`./screenshot2.js`)).screenshotLinux),C=n(async()=>(await import(`./surface-snapshot2.js`)).captureLinuxSurfaceSnapshot),w=n(async()=>(await import(`./snapshot3.js`)).readLinuxTextAtPoint);async function T(e,t){let{withLinuxToolProvider:n}=await import(`./tool-provider2.js`).then(e=>e.r);return await n(e,t)}export{d as S,S as _,p as a,b,a as c,o as d,g as f,i as g,_ as h,f as i,h as l,w as m,C as n,m as o,u as p,s as r,l as s,c as t,v as u,y as v,x,t as y};
|
package/dist/src/src6.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";var t=e({AGENT_BROWSER_TIMEOUT_MS:()=>AGENT_BROWSER_TIMEOUT_MS,cleanupManagedAgentBrowserOrphans:()=>u,createAgentBrowserWebProvider:()=>o,doctorManagedAgentBrowser:()=>l,getManagedAgentBrowserStatus:()=>s,hasScopedWebProvider:()=>p,inventoryModule:()=>a,resolveWebProvider:()=>f,runtimeModule:()=>i,setupManagedAgentBrowser:()=>c,webBrowserLifecycleCheck:()=>d,withWebProvider:()=>m});function n(e){return(async(...t)=>await(await e())(...t))}const r=Object.freeze({family:`web`}),i=Object.freeze({...r,loadRuntime:async e=>{let{createWebPlatformRuntime:t}=await import(`./runtime9.js`);return t(e)}}),a=Object.freeze({...r,loadInventory:async()=>{let{createWebInventory:e}=await import(`./inventory6.js`);return e()}}),o=n(async()=>(await import(`./agent-browser-provider.js`)).createAgentBrowserWebProvider),s=n(async()=>(await import(`./agent-browser-tool.js`).then(e=>e.t)).getManagedAgentBrowserStatus),c=n(async()=>(await import(`./agent-browser-tool.js`).then(e=>e.t)).setupManagedAgentBrowser),l=n(async()=>(await import(`./agent-browser-tool.js`).then(e=>e.t)).doctorManagedAgentBrowser),u=n(async()=>(await import(`./agent-browser-lifecycle.js`).then(e=>e.t)).cleanupManagedAgentBrowserOrphans),d=n(async()=>(await import(`./doctor3.js`)).webBrowserLifecycleCheck),f=n(async()=>(await import(`./provider.js`)).resolveWebProvider),p=n(async()=>(await import(`./provider.js`)).hasScopedWebProvider);async function m(e,t){let{withWebProvider:n}=await import(`./provider.js`);return await n(e,t)}export{t as i,f as n,i as r,a as t};
|
package/dist/src/src7.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{C as e}from"./sdk-contracts.js";import{w as t}from"./sdk-device.js";import{Wt as n,Yt as r}from"./sdk-batch.js";import{t as i}from"./audio-probe-runtime.js";import{a,n as o,t as s}from"./durable-resource.js";import{n as c}from"./async-lifecycle.js";import{n as l,t as u}from"./audio-probe-result.js";import d from"node:fs/promises";function f(e,t){if(e.resourceKind!==t.resourceKind)return{status:`unreattachable`,reason:`descriptor-invalid`,message:`Durable resource kind ${e.resourceKind} does not match ${t.resourceKind}`};if(e.descriptor.version!==t.version)return{status:`unreattachable`,reason:`descriptor-version-unsupported`,message:`Unsupported ${t.resourceKind} descriptor version: ${e.descriptor.version}`,version:e.descriptor.version};try{let n=t.decode(e.descriptor.body);return n.status===`decoded`?n:{status:`unreattachable`,reason:`descriptor-invalid`,message:n.message}}catch(e){return{status:`unreattachable`,reason:`descriptor-invalid`,message:e instanceof Error?e.message:`Descriptor codec rejected the body`}}}function p(e,t){return Object.freeze({pendingHandle:new c(e),envelope:t})}function m(e){return Object.freeze({appLogReattach:async({envelope:t})=>{let n=f(t,e.codec);return n.status===`unreattachable`?n:await e.reattach(n.descriptor,h(t))},appLogCleanup:async({envelope:t})=>{let n=f(t,e.codec);return n.status===`decoded`?await e.cleanup(n.descriptor,h(t)):{status:`cleanup-pending`,reason:`manual-recovery-required`,message:n.message}}})}function h(e){return Object.freeze({sessionId:e.sessionId,fence:e.fence})}function g(e){if(typeof e!=`object`||!e||Array.isArray(e))return{status:`invalid`,message:`App-log process marker must be an object`};let t=e;return!Number.isInteger(t.pid)||Number(t.pid)<=0?{status:`invalid`,message:`App-log process marker pid must be a positive integer`}:typeof t.startTime!=`string`||t.startTime.trim().length===0?{status:`invalid`,message:`App-log process marker startTime must be a non-empty string`}:typeof t.command!=`string`||t.command.trim().length===0?{status:`invalid`,message:`App-log process marker command must be a non-empty string`}:{status:`decoded`,marker:Object.freeze({pid:Number(t.pid),startTime:t.startTime,command:t.command})}}function _(e){let t,n,r,i=()=>n??=e.forceCleanup();return Object.freeze({inspect:()=>e.inspect(),finish:()=>t??=e.finish(),forceCleanup:i,[Symbol.asyncDispose]:async()=>{r??=i().then(ee),await r}})}function v(e){return _({inspect:e.inspect,finish:e.finish,forceCleanup:async()=>{let t=await e.finish();return t.status===`completed`?{status:`cleaned`}:{status:`cleanup-pending`,reason:t.reason,message:t.message}}})}function ee(t){if(!s(t))throw new e(`COMMAND_FAILED`,t.message??`Durable resource cleanup could not be confirmed`,{reason:t.reason,retriable:t.reason!==`ownership-fence-lost`,hint:t.reason===`ownership-fence-lost`?`Use the current resource owner or recovery record before retrying cleanup.`:`Keep the recovery record and retry cleanup through the exact runtime owner.`})}const te=e=>b(e.backend)&&(e.source===`system-audio`||e.source===`media-elements`)&&x(e.sourceCount,0)&&re(e.notes)&&b(e.statusPath)&&x(e.startedAt,1)&&x(e.durationMs,1)&&x(e.bucketMs,1),y=Object.freeze({resourceKind:i,version:1,encode:e=>({...e,notes:[...e.notes],marker:{...e.marker}}),decode:e=>{let t=te(e)?ne(e.marker):`invalid`;if(t===`invalid`)return{status:`invalid`,message:`Audio probe descriptor body is invalid`};let n=e;return{status:`decoded`,descriptor:Object.freeze({backend:n.backend,source:n.source,sourceCount:n.sourceCount,notes:Object.freeze([...n.notes]),statusPath:n.statusPath,startedAt:n.startedAt,durationMs:n.durationMs,bucketMs:n.bucketMs,marker:t})}}});function ne(e){if(typeof e!=`object`||!e)return`invalid`;let t=e;return!x(t.pid,1)||!b(t.startTime)||!b(t.command)?`invalid`:Object.freeze({pid:t.pid,startTime:t.startTime,command:t.command})}function b(e){return typeof e==`string`&&e.length>0}function x(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=t}function re(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)}async function S(e){try{let t=await d.readFile(e.statusPath,`utf8`);return l(JSON.parse(t),{source:e.source,backend:e.backend,durationMs:e.durationMs,elapsedMs:Date.now()-e.startedAt,bucketMs:e.bucketMs,activeFallback:!0,sourceCount:e.sourceCount,notes:[...e.notes]})}catch(e){if(e.code===`ENOENT`)return;throw e}}function C(e,t,n){let r=Math.min(e.durationMs,Math.max(0,Date.now()-e.startedAt));return{...t??u({source:e.source,backend:e.backend,durationMs:e.durationMs,bucketMs:e.bucketMs,sourceCount:e.sourceCount,notes:[...e.notes]}),state:`stopped`,active:!1,elapsedMs:r,stoppedAt:new Date().toISOString(),reason:n}}function ie(e){let{host:t}=e;return Object.freeze({audioProbeReattach:async e=>{let n=f(e.envelope,y);if(n.status!==`decoded`)return n;let r=n.descriptor,i=await t.inspectProcess(r.marker);if(i===`owned-alive`)return{status:`unreattachable`,reason:`transport-not-reattachable`};if(i===`ownership-lost`)return{status:`unreattachable`,reason:`ownership-fence-lost`};let a=await S(r);return a===void 0||a.state!==`stopped`?{status:`missing`}:{status:`completed`,result:C(r,a,`daemon-recovery`)}},audioProbeCleanup:async e=>{let n=f(e.envelope,y);if(n.status!==`decoded`)return{status:`cleanup-pending`,reason:`manual-recovery-required`,message:n.message};let r=n.descriptor,i=await t.inspectProcess(r.marker);if(i===`ownership-lost`)return{status:`cleanup-pending`,reason:`ownership-fence-lost`};if(i===`missing`)return{status:`already-missing`};let a=await t.terminateProcess(r.marker);return a===`ownership-lost`?{status:`cleanup-pending`,reason:`ownership-fence-lost`}:{status:a===`terminated`?`cleaned`:`already-missing`}}})}async function ae(n){let{host:r,device:s,owner:l,input:u}=n,f=Date.now(),p=r.info,m=Object.freeze([...p.notes(s)]),h=Object.freeze({source:p.source,backend:p.backend,sourceCount:p.sourceCount,notes:m,statusPath:u.statusPath,startedAt:f,durationMs:u.durationMs,bucketMs:u.bucketMs});await d.rm(u.statusPath,{force:!0});let g=await r.start({durationMs:u.durationMs,bucketMs:u.bucketMs,statusPath:u.statusPath});g.wait.catch(()=>{});let _=g.marker;try{if(_===void 0)throw new e(`COMMAND_FAILED`,`failed to start host audio probe: the helper process exposed no exact identity, so the capture could not be recovered after daemon loss and was terminated`);await ue(h,g)}catch(e){throw await g.terminate().catch(()=>{}),e}return Object.freeze({pendingHandle:new c(oe(h,g)),envelope:o({resourceKind:i,sessionId:u.sessionId,device:t(s),owner:l,fence:u.fence,lifecycle:`open`,descriptor:a(y,{backend:p.backend,source:p.source,sourceCount:p.sourceCount,notes:m,statusPath:u.statusPath,startedAt:f,durationMs:u.durationMs,bucketMs:u.bucketMs,marker:_})})})}function oe(e,t){let n,r,i,a;t.wait.then(e=>{a={message:se(e)}},e=>{a={message:e instanceof Error?e.message:`audio probe helper wait failed`}});let o=()=>n??=(async()=>{let n=await S(e);if(n?.state!==`stopped`&&a)throw w(a);return await t.terminate().catch(()=>{}),await t.wait.catch(()=>{}),{status:`completed`,result:C(e,n,`stopped`)}})(),s=()=>r??=n?n.then(async()=>({status:`cleaned`}),async()=>await T(t)):T(t);return Object.freeze({inspect:()=>e,status:async()=>{let t=await S(e);if(t?.state===`stopped`)return t;if(a)throw w(a);return t??C(e,void 0,`not-started`)},finish:o,forceCleanup:s,[Symbol.asyncDispose]:async()=>{i??=s().then(ce),await i}})}function se(e){return e.stderr?.trim()||e.stdout?.trim()||`audio probe helper exited with code ${e.exitCode??1}`}function w(t){return new e(`COMMAND_FAILED`,`host audio probe helper exited before completing the capture: ${t.message}`,{hint:`Keep audio-probe.resource.json; stop resolves the record through descriptor cleanup.`})}async function T(e){try{return await e.terminate(),await e.wait.catch(()=>{}),{status:`cleaned`}}catch(e){return{status:`cleanup-pending`,reason:`cleanup-unconfirmed`,message:e instanceof Error?e.message:`Audio probe termination failed`}}}function ce(t){if(!s(t))throw new e(`COMMAND_FAILED`,t.message??`Audio probe cleanup could not be confirmed`,{reason:t.reason,retriable:t.reason!==`ownership-fence-lost`,hint:`Keep audio-probe.resource.json and retry stop through its exact runtime owner.`})}function le(e){let{host:t,device:n,owner:r}=e,i=ie({host:t});return Object.freeze({audioProbeStart:async e=>await ae({host:t,device:n,owner:r,input:e}),audioProbeReattach:i.audioProbeReattach,audioProbeCleanup:i.audioProbeCleanup})}async function ue(t,n){let r=Date.now()+5e3;for(;Date.now()<r;){if(await S(t))return;let r=await Promise.race([n.wait.then(e=>e,e=>e),de(100).then(()=>void 0)]);if(r instanceof Error)throw r;if(r){let t=r,n=t.stderr?.trim()||t.stdout?.trim()||`host audio probe helper exited with code ${t.exitCode??1}`;throw new e(`COMMAND_FAILED`,`failed to start host audio probe: ${n}`)}}throw new e(`COMMAND_FAILED`,`failed to start host audio probe`)}function de(e){return new Promise(t=>setTimeout(t,e))}async function E(e,t){let n=await O(e,t);if(n.status===`missing`)return{status:`missing`};if(n.status===`invalid`)return{status:`unreattachable`,reason:`ownership-fence-lost`,message:n.message};let r=await e.processes.inspect(n.marker);return r===`missing`?(t&&await e.processes.clearMarker(t),{status:`missing`}):r===`ownership-lost`?{status:`unreattachable`,reason:`ownership-fence-lost`}:{status:`unreattachable`,reason:`transport-not-reattachable`}}async function D(e,t){if(!t)return{status:`cleanup-pending`,reason:`manual-recovery-required`,message:`App-log process marker path is missing`};let n=await O(e,t);if(n.status===`missing`)return{status:`already-missing`};if(n.status===`invalid`)return{status:`cleanup-pending`,reason:`manual-recovery-required`,message:n.message};let r=await e.processes.inspect(n.marker);if(r===`ownership-lost`)return k();if(r===`missing`)return await e.processes.clearMarker(t),{status:`already-missing`};let i=await e.processes.terminate(n.marker);return i===`ownership-lost`?k():(await e.processes.clearMarker(t),{status:i===`terminated`?`cleaned`:`already-missing`})}async function O(e,t){return t?await e.processes.readMarker(t):{status:`invalid`,message:`App-log process marker path is missing`}}function k(){return{status:`cleanup-pending`,reason:`ownership-fence-lost`}}async function fe(e){let t=e.initialProcess;for(;!e.stopped();){if(t){await pe(e,t),t=void 0,await be(e);continue}let n=await xe(e);if(n.status===`stopped`)return;n.status!==`waiting`&&(t=n.process)}}async function pe(e,t){let{process:n}=t;e.setActive(n);try{e.setState(`active`),await me(e,t)}finally{await A(e,n)}}async function me(e,t){let n=he(t.process);try{await ge(e,t,n),await ve(e,t.process,n),await ye(n.outcome)}finally{n.controller.abort()}}function he(e){let t=new AbortController,n=!1,r=()=>{n=!0,t.abort()};return{controller:t,outcome:e.wait.then(()=>(r(),{status:`exited`}),e=>(r(),{status:`failed`,error:e})),settled:()=>n}}async function ge(e,t,n){for(;!e.stopped()&&!n.settled();){if(!await _e(e,n))return;let r=await e.resolvePid();if(e.stopped())return;if(r!==t.pid){await t.process.terminate();return}}}async function _e(e,t){try{await e.sleep(500,t.controller.signal)}catch(e){if(!t.settled())throw e}return!t.settled()}async function ve(e,t,n){e.stopped()&&!n.settled()&&await t.terminate()}async function ye(e){let t=await e;if(t.status===`failed`)throw t.error}async function be(e){e.stopped()||(e.setState(`recovering`),await e.sleep(500))}async function xe(e){let t=await e.resolvePid();if(e.stopped())return{status:`stopped`};if(!t)return e.setState(`recovering`),await e.sleep(1e3),{status:`waiting`};let n=await e.startProcess(t);return e.setActive(n),e.stopped()?(await Se(e,n),{status:`stopped`}):{status:`started`,process:{pid:t,process:n}}}async function Se(e,t){try{await t.terminate(),await t.wait}finally{await A(e,t)}}async function A(e,t){try{await t[Symbol.asyncDispose]()}finally{e.setActive(void 0)}}async function Ce(e){let t=await e.resolvePid(e.setupSignal);e.setupSignal.throwIfAborted();let n=await e.host.outputs.openAppend(e.outputPath),r=`recovering`,i=!1,a;try{if(e.setupSignal.throwIfAborted(),t){e.setupSignal.throwIfAborted();let i=new AbortController,o=()=>i.abort(e.setupSignal.reason);e.setupSignal.addEventListener(`abort`,o,{once:!0});try{a=await e.processStart({command:e.command(t),output:n,markerPath:e.pidPath},i.signal)}finally{e.setupSignal.removeEventListener(`abort`,o)}e.setupSignal.throwIfAborted(),r=`active`}}catch(e){throw await j([async()=>await a?.terminate(),async()=>{await a?.wait},async()=>await a?.[Symbol.asyncDispose](),async()=>await n[Symbol.asyncDispose]()]),e}let o=fe({initialProcess:a&&t?{pid:t,process:a}:void 0,stopped:()=>i,setActive:e=>{a=e},setState:e=>{r=e},resolvePid:async()=>await e.resolvePid(),startProcess:async t=>await e.processStart({command:e.command(t),output:n,markerPath:e.pidPath}),sleep:async(t,n)=>await e.host.clock.sleep(t,n)}).catch(()=>{r=`failed`}),s,c=async()=>s??=we({options:e,monitor:o,active:()=>a,stop:()=>{i=!0},setState:e=>{r=e},output:n}),l=e.host.clock.now();return v({inspect:()=>({backend:e.backend,state:r,startedAt:l}),finish:c})}async function we(e){return e.stop(),(await j([async()=>await e.active()?.terminate(),async()=>await e.monitor,async()=>await e.output[Symbol.asyncDispose]()])).length>0?(e.setState(`failed`),{status:`cleanup-pending`,reason:`transport-failed`,message:e.options.cleanupFailureMessage}):(e.setState(`ended`),{status:`completed`,result:{backend:e.options.backend,outputPath:e.options.outputPath,completedAt:e.options.host.clock.now()}})}async function j(e){let t=[];for(let n of e)try{await n()}catch(e){t.push(e)}return t}function M(e,t,n){let r=e.artifacts.resolveSession(t);return n.outputPath===r.outputPath&&(n.pidPath===void 0||n.pidPath===r.pidPath)}function N(t,n){if(!M(t,n.sessionId,n))throw new e(`INVALID_ARGS`,`App-log paths do not match the owning session`)}const P=Object.freeze({available:!0});async function Te(e,t,n){let r=(await e.commands.run(t,n)).stdout.trim().split(/\s+/)[0]??``;return/^\d+$/.test(r)?r:``}function Ee(t,i){let a=n(i.family);return Object.freeze({owner:a,ownsDevice:e=>e.platform===i.family,inspectFacts:async e=>F(e,await t.processTransports.resolve(e),i),bind:async n=>{if(n.intent.kind===`exact-owner`&&!r(n.intent.owner,a))throw new e(`UNSUPPORTED_OPERATION`,`${i.label} app-log owner identity does not match`);if(n.device.platform!==i.family)throw new e(`UNSUPPORTED_PLATFORM`,`${i.label} app-log owner cannot bind ${n.device.platform}`);let o=await t.processTransports.resolve(n.device);return De(t,n.device,n.scope.signal,o,a,i)},shutdown:async()=>void 0})}function De(e,t,n,r,i,a){let o=m({codec:a.codec,reattach:async(t,n)=>M(e,n.sessionId,t)?await E(e,t.pidPath):{status:`unreattachable`,reason:`descriptor-invalid`,message:`${a.label} app-log descriptor paths do not match the owning session`},cleanup:async(t,n)=>M(e,n.sessionId,t)?await D(e,t.pidPath):{status:`cleanup-pending`,reason:`ownership-fence-lost`,message:`${a.label} app-log descriptor paths do not match the owning session`}}),s=Object.freeze({appLogInspect:async()=>({backend:a.backend}),appLogDoctor:async({appBundleId:r})=>await a.doctor({host:e,device:t,signal:n},r),...r.start?{appLogStart:async o=>await Oe(e,t,n,r,i,o,a)}:{},...o});return Object.freeze({device:t,owner:i,facts:F(t,r,a),operations:s,[Symbol.asyncDispose]:async()=>void 0})}function F(e,t,n){let r=t.start?P:{available:!1,reason:`owner-capability-missing`,hint:n.startUnavailableHint};return Object.freeze({device:{family:n.family,kind:e.kind,...e.target===void 0?{}:{target:e.target},providerMode:t.mode},operations:{appLogInspect:P,appLogDoctor:P,appLogStart:r,appLogReattach:P,appLogCleanup:P}})}async function Oe(t,n,r,i,a,o,s){if(!i.start)throw new e(`UNSUPPORTED_OPERATION`,s.startUnavailableHint);N(t,o);let c=t.artifacts.resolveSession(o.sessionId),l={host:t,device:n,signal:r,input:o,artifacts:c,transport:i};s.validateStart?.(l),r.throwIfAborted();let u=await s.process(l);r.throwIfAborted();let d=await Ce({host:t,backend:s.backend,outputPath:c.outputPath,pidPath:c.pidPath,processStart:i.start,setupSignal:r,resolvePid:u.resolvePid,command:u.command,cleanupFailureMessage:s.cleanupFailureMessage}),f=s.descriptor({artifacts:c,transport:i});return p(d,s.envelope({input:o,device:n,owner:a,descriptor:f}))}function I(e){for(let t of[/\bstatus(?:Code)?["'=: ]+([1-5]\d{2})\b/i,/\bresponse(?:\s+code)?["'=: ]+([1-5]\d{2})\b/i,/\bHTTP\/[0-9.]+\s+([1-5]\d{2})\b/i]){let n=t.exec(e);if(!n)continue;let r=Number.parseInt(n[1]??``,10);if(Number.isInteger(r))return r}return null}function L(e){return/\b\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z)?\b/.exec(e)?.[0]??/\b\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+\b/.exec(e)?.[0]}function ke(e){let t=e.indexOf(`{`),n=e.lastIndexOf(`}`);if(t<0||n<=t)return null;try{let r=JSON.parse(e.slice(t,n+1));return r&&typeof r==`object`&&!Array.isArray(r)?r:null}catch{return null}}function R(e,t){for(let n of t){let t=e?.[n];if(typeof t==`string`&&t.trim())return t.trim()}}function Ae(e,t){for(let n of t){let t=e?.[n];if(typeof t==`number`&&Number.isInteger(t))return t;if(typeof t==`string`&&/^\d{3}$/.test(t.trim()))return Number.parseInt(t,10)}return null}function je(e,t){let n=t?.headers??t?.requestHeaders??t?.responseHeaders;return n===void 0?/\bheaders?["'=: ]+(\{.*\})/i.exec(e)?.[1]?.trim():B(n)}function z(e,t,n){for(let r of n){if(t?.[r]!==void 0)return B(t[r]);let n=r.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`),i=RegExp(`\\b${n}["'=: ]+(.+)$`,`i`).exec(e);if(i?.[1])return i[1].trim()}}function B(e){if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}function Me(e,t,n){let r=U(t,n,5),i=e.packetId??r.map(V).find(e=>typeof e==`string`&&e.length>0);i&&(e.packetId=i);let a=i?U(t,n,12).filter(e=>V(e)===i):r;e.timestamp??=a.map(L).find(e=>typeof e==`string`&&e.length>0),e.status??=a.map(I).find(e=>typeof e==`number`)??void 0,e.durationMs??=a.map(H).find(e=>typeof e==`number`)??void 0}function V(e){return/\bpacket id (\d+)\b/i.exec(e)?.[1]??null}function H(e){let t=/\b(?:duration|elapsed request\/response time, ms)[:= ]+(\d+)\b/i.exec(e);return t?Number.parseInt(t[1]??``,10):null}function U(e,t,n){return e.slice(Math.max(0,t-n),Math.min(e.length,t+n+1)).map(e=>e.trim()).filter(Boolean)}const Ne=RegExp(`\\b(${[`GET`,`POST`,`PUT`,`PATCH`,`DELETE`,`HEAD`,`OPTIONS`].join(`|`)})\\b\\s+https?:\\/\\/`,`i`),Pe=/https?:\/\/[^\s"'<>\])]+/i,Fe=/\[C(\d+)\b[^\]]*?\burl:\s*([^\s,\]]+)/,W=/\bsummary for task (?:success|failure)\s*\{([^}]*)\}/,Ie=/\bTask\s+<([0-9A-Fa-f-]+)>\.<(\d+)>/,G=/(?:^|\s)(\S+)\[(\d+):[0-9a-f]+\]/,Le=/\burl:\s*(https?:\/\/[^\s,\]]+)/i;function Re(e,t,n=e.dump.limits.maxEntries){let r=[...e.dump.entries],i=new Set(r.map(K));for(let e of t.dump.entries){let t=K(e);if(!i.has(t)&&(i.add(t),r.push(e),r.length>=n))break}let a=new Set([...e.dump.entries,...t.dump.entries].map(e=>e.packetId).filter(e=>e!==void 0)),o=[...new Set([...e.unnamedRequestIds,...t.unnamedRequestIds])].filter(e=>!a.has(e));return Object.freeze({dump:Object.freeze({...e.dump,matchedLines:r.length,entries:Object.freeze(r),unnamedRequests:o.length}),unnamedRequestIds:Object.freeze(o)})}function ze(e,t){let n=J(t.maxEntries,25,1,200),r=t.include??`summary`,i=J(t.maxPayloadChars,2048,64,16384),a=J(t.maxScanLines,4e3,100,2e4),o=Ve(t.lineNumberOffset);if(!t.exists)return Object.freeze({dump:Object.freeze({path:t.path,exists:!1,scannedLines:0,matchedLines:0,entries:Object.freeze([]),unnamedRequests:0,include:r,limits:Object.freeze({maxEntries:n,maxPayloadChars:i,maxScanLines:a})}),unnamedRequestIds:Object.freeze([])});let s=e.split(`
|
|
2
|
+
`),c=Math.max(0,s.length-a),l=s.slice(c),u=[],d=Be(t.backend)?Qe(l):void 0,f=d?et(l,d):[];for(let e=l.length-1;e>=0&&u.length<n;--e){if(!l[e]?.trim())continue;let n=He(l,e,o+c+e+1,t.backend,r,i,d);n&&u.push(n)}return Object.freeze({dump:Object.freeze({path:t.path,exists:!0,scannedLines:l.length,matchedLines:u.length,entries:Object.freeze(u),unnamedRequests:f.length,include:r,limits:Object.freeze({maxEntries:n,maxPayloadChars:i,maxScanLines:a})}),unnamedRequestIds:Object.freeze(f)})}function Be(e){return e===`ios-simulator`||e===`ios-device`||e===`macos`}function Ve(e){if(e===void 0)return 0;if(!Number.isInteger(e)||e<0)throw TypeError(`Network line number offset must be a non-negative integer`);return e}function He(e,t,n,r,i,a,o){let s=e[t]?.trim();if(!s)return null;let c=ke(s),l=Ue(s,c)??(o?$e(s,o,t):null);if(!l)return null;let u=Je(s,n,l,a);return r===`android`&&Me(u,e,t),Ye(u,s,c,i,a),u}function Ue(e,t){let n=We(e,t),r=Ge(e,t);if(!r)return null;let i=Ke(e,t);return qe(e,n.explicit,i)?{method:n.value,url:r,status:i}:null}function We(e,t){let n=R(t,[`method`,`httpMethod`]),r=/\bmethod["'=: ]+([A-Z]+)\b/i.exec(e)?.[1],i=Ne.exec(e)?.[1],a=n??r??i;return{value:a?.toUpperCase(),explicit:!!a}}function Ge(e,t){return R(t,[`url`,`requestUrl`])||(Le.exec(e)?.[1]??Pe.exec(e)?.[0])}function Ke(e,t){return Ae(t,[`status`,`statusCode`,`responseCode`])??I(e)??void 0}function qe(e,t,n){return t||n!==void 0||/\bURL["'=: ]+https?:\/\//i.test(e)||/\bheaders?["'=: ]+/i.test(e)||/\b(?:requestBody|responseBody|payload|request|response)["'=: ]+/i.test(e)}function Je(e,t,n,r){return{...n,timestamp:L(e),packetId:n.packetId??V(e)??void 0,durationMs:n.durationMs??H(e)??void 0,raw:q(e,r),line:t}}function Ye(e,t,n,r,i){if(Xe(r)){let r=je(t,n);r&&(e.headers=q(r,i))}if(Ze(r)){let r=z(t,n,[`requestBody`,`body`,`payload`,`request`]),a=z(t,n,[`responseBody`,`response`]);r&&(e.requestBody=q(r,i)),a&&(e.responseBody=q(a,i))}}function Xe(e){return e===`headers`||e===`all`}function Ze(e){return e===`body`||e===`all`}function K(e){return`${e.timestamp??``}|${e.method??``}|${e.url}|${e.status??``}|${e.raw}`}function q(e,t){return e.length<=t?e:`${e.slice(0,t)}...<truncated>`}function J(e,t,n,r){return e===void 0||!Number.isInteger(e)?t:Math.max(n,Math.min(r,e))}function Qe(e){let t=new Map;for(let[n,r]of e.entries()){let e=Fe.exec(r);if(!e)continue;let i=Y(r,e[1]),a=i===void 0?void 0:nt(e[2]);if(!a||i===void 0)continue;let o=t.get(i);o?o.push({lineIndex:n,origin:a}):t.set(i,[{lineIndex:n,origin:a}])}return t}function Y(e,t){let n=G.exec(e);if(n)return`${n[1]}[${n[2]}]#${t}`}function $e(e,t,n){let r=W.exec(e);if(!r)return null;let i=Q(r[1]);if(i.get(`reused`)!==`1`)return null;let a=i.get(`connection`),o=a===void 0?void 0:Y(e,a),s=o===void 0?void 0:Z(t,o,n);return s?{url:s,status:rt(i.get(`response_status`)),durationMs:$(i.get(`transaction_duration_ms`)),pathUnavailable:!0,packetId:X(e)}:null}function et(e,t){let n=new Set;for(let[r,i]of e.entries()){let e=tt(i,t,r);e!==void 0&&n.add(e)}return[...n]}function tt(e,t,n){if(!e.includes(`summary for task`))return;let r=W.exec(e);if(!r)return;let i=Q(r[1]);if(i.get(`reused`)!==`1`)return;let a=i.get(`connection`),o=a===void 0?void 0:Y(e,a);if(!(o!==void 0&&Z(t,o,n)))return X(e)}function X(e){let t=Ie.exec(e);if(!t)return;let n=G.exec(e);return`${n?`${n[1]}[${n[2]}]`:``}#${t[1]}.${t[2]}`}function Z(e,t,n){let r=e.get(t);if(!r)return;let i;for(let e of r){if(e.lineIndex>n)break;i=e.origin}return i}function Q(e){let t=new Map;for(let n of e.split(`,`)){let e=n.indexOf(`=`);e!==-1&&t.set(n.slice(0,e).trim(),n.slice(e+1).trim())}return t}function nt(e){try{return new URL(e).origin}catch{return}}function rt(e){let t=$(e);return t!==void 0&&t>0?t:void 0}function $(e){if(e===void 0)return;let t=Number(e);return Number.isFinite(t)?t:void 0}export{M as a,E as c,m as d,p as f,Te as i,le as l,f as m,ze as n,N as o,g as p,Ee as r,D as s,Re as t,v as u};
|