agent-device 0.21.19 → 0.21.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.19.apk → agent-device-android-ime-helper-0.21.21.apk} +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.21.apk.sha256 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.19.manifest.json → agent-device-android-ime-helper-0.21.21.manifest.json} +4 -4
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.21.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.21.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.19.manifest.json → agent-device-android-snapshot-helper-0.21.21.manifest.json} +6 -6
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/AppWindowScreenshot.swift +73 -0
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/BackgroundInteraction.swift +557 -0
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/GhostCursor.swift +141 -0
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/SnapshotTraversal.swift +107 -3
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/main.swift +136 -22
- package/apple/macos-helper/Tests/AgentDeviceMacOSHelperTests/BackgroundInteractionTests.swift +88 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +133 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.h +10 -2
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.m +36 -9
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +28 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +1 -14
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Interaction.swift +14 -16
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +67 -14
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedCommitDeadline.swift +6 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedGesturePolicy.swift +7 -2
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift +21 -7
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +121 -17
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +179 -6
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryConfirmation.swift +119 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +8 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryReadiness.swift +23 -11
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextInputProbe.swift +59 -6
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +112 -23
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TypeExecution.swift +25 -12
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/RecordingExportSupport.swift +6 -1
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-overlay.swift +43 -13
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotModels.swift +20 -5
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationProjection.swift +2 -15
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFold.swift +10 -25
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFoldProjection.swift +1 -18
- package/dist/src/adapter.js +1 -1
- package/dist/src/adb-executor.js +2 -2
- package/dist/src/adb-failure.js +1 -1
- package/dist/src/adb-transport.js +1 -1
- package/dist/src/agent-browser-lifecycle.js +1 -1
- package/dist/src/agent-browser-process-record.js +1 -1
- package/dist/src/agent-browser-provider.js +1 -1
- package/dist/src/agent-browser-tool.js +1 -1
- package/dist/src/agent-device-client.js +2 -2
- package/dist/src/ai-sdk.js +1 -1
- package/dist/src/alert-runtime.js +1 -1
- package/dist/src/alert.js +1 -0
- package/dist/src/android-adb.d.ts +12 -0
- package/dist/src/android-input-ownership.js +1 -1
- package/dist/src/app-backend.js +1 -0
- package/dist/src/app-catalog.js +1 -1
- package/dist/src/app-deployment-resolution.js +1 -1
- package/dist/src/app-inventory.js +1 -1
- package/dist/src/app-launch.js +2 -2
- package/dist/src/app-lifecycle.js +2 -2
- package/dist/src/app-lifecycle2.js +1 -1
- package/dist/src/app-log-files.js +1 -1
- package/dist/src/app-log-reconnect.js +1 -1
- package/dist/src/app-log-runtime2.js +3 -3
- package/dist/src/app-log-session-resource.js +1 -0
- package/dist/src/app-resolution.js +2 -2
- package/dist/src/apple-runner-platform.js +1 -1
- package/dist/src/application-lifecycle-interaction.js +1 -1
- package/dist/src/archive.js +2 -2
- package/dist/src/artifact-download.js +1 -1
- package/dist/src/auth-session.js +1 -1
- package/dist/src/auth.js +1 -1
- package/dist/src/back-mode.js +1 -1
- package/dist/src/backend-snapshot-options.js +1 -1
- package/dist/src/boot-diagnostics.js +1 -1
- package/dist/src/browser-launch.js +1 -1
- package/dist/src/cache.js +1 -1
- package/dist/src/capabilities.js +1 -1
- package/dist/src/capture.js +1 -1
- package/dist/src/cli-config.js +1 -1
- package/dist/src/cli-help.js +317 -323
- package/dist/src/cli-runner.js +1 -1
- package/dist/src/cli.js +4 -4
- package/dist/src/click-button.js +1 -1
- package/dist/src/client-metro-companion.js +1 -1
- package/dist/src/client-metro.js +1 -1
- package/dist/src/client-options.js +3 -0
- package/dist/src/client-types.d.ts +101 -6
- package/dist/src/clipboard-shell-response.js +1 -1
- package/dist/src/{scroll-command.d.ts → cloud-artifacts.d.ts} +249 -240
- package/dist/src/code-signature-cache.js +1 -1
- package/dist/src/code-signature.js +1 -1
- package/dist/src/command-schema.js +3 -3
- package/dist/src/command-tools.js +2 -2
- package/dist/src/command.js +1 -1
- package/dist/src/config.js +1 -1
- package/dist/src/connection-runtime.js +1 -1
- package/dist/src/connection.js +5 -5
- package/dist/src/contracts.d.ts +1 -1
- package/dist/src/contracts.js +1 -1
- package/dist/src/daemon-artifacts.js +1 -0
- package/dist/src/daemon-client-lease-beat.js +1 -1
- package/dist/src/daemon-client-lifecycle.js +1 -1
- package/dist/src/daemon-client-liveness-probe.js +1 -0
- package/dist/src/daemon-client-transport.js +1 -1
- package/dist/src/daemon-http.js +1 -0
- package/dist/src/daemon-policy-file.js +1 -1
- package/dist/src/daemon-registration-owner.js +1 -0
- package/dist/src/daemon-registration.js +1 -1
- package/dist/src/daemon-resolution.js +1 -1
- package/dist/src/daemon-shutdown-report.js +1 -1
- package/dist/src/daemon.js +2 -2
- package/dist/src/debug-symbols-facade.js +3 -3
- package/dist/src/device-claim-inspection.js +1 -1
- package/dist/src/device-claim-rule.js +1 -1
- package/dist/src/device-inventory-context.js +1 -1
- package/dist/src/device-readiness-runtime.js +1 -1
- package/dist/src/device-release.js +1 -1
- package/dist/src/device-rotation.js +1 -1
- package/dist/src/device-selection-resolver.js +1 -1
- package/dist/src/device-session.js +1 -1
- package/dist/src/device-shell.js +1 -1
- package/dist/src/device.js +1 -1
- package/dist/src/device2.js +1 -3
- package/dist/src/device3.js +3 -0
- package/dist/src/devicectl.js +1 -1
- package/dist/src/diagnostics.js +3 -3
- package/dist/src/dispatch-resolve.js +4 -1
- package/dist/src/display-inventory.js +1 -1
- package/dist/src/doctor-facade.js +1 -1
- package/dist/src/doctor2.js +1 -1
- package/dist/src/durable-capture-resource.js +1 -0
- package/dist/src/engine-eval-script.js +1 -1
- package/dist/src/error.js +1 -1
- package/dist/src/exec.js +1 -1
- package/dist/src/file.js +1 -1
- package/dist/src/find.js +1 -1
- package/dist/src/generic-settle.js +1 -1
- package/dist/src/generic.js +1 -1
- package/dist/src/gesture-admission.js +1 -1
- package/dist/src/gesture-plan.js +1 -1
- package/dist/src/gesture-runtime.js +1 -1
- package/dist/src/harmonyos.js +1 -1
- package/dist/src/hdc.js +1 -1
- package/dist/src/helper.js +2 -2
- package/dist/src/host-file.js +1 -1
- package/dist/src/host.js +1 -1
- package/dist/src/human-control-contract.js +1 -1
- package/dist/src/human-control.js +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.js +1 -1
- package/dist/src/input-actions.js +1 -1
- package/dist/src/input-actions2.js +2 -2
- package/dist/src/install-artifact-facade.js +1 -1
- package/dist/src/install-source-network-transport.js +1 -1
- package/dist/src/install-source.d.ts +5 -0
- package/dist/src/install-source2.js +1 -1
- package/dist/src/instance-client.js +1 -0
- package/dist/src/interaction-positionals.js +1 -1
- package/dist/src/interaction-ref-policy.js +1 -1
- package/dist/src/interaction.js +1 -1
- package/dist/src/interaction2.js +1 -1
- package/dist/src/interactor-operation-binding.js +1 -1
- package/dist/src/interactor.js +5 -5
- package/dist/src/interactor2.js +1 -1
- package/dist/src/interactors.js +1 -1
- package/dist/src/internal/bin.js +1 -1
- package/dist/src/internal/daemon.js +1 -2
- package/dist/src/internal/png-worker.js +1 -1
- package/dist/src/internal/run-script-http-child.js +1 -1
- package/dist/src/inventory.js +4 -4
- package/dist/src/inventory2.js +1 -1
- package/dist/src/inventory3.js +1 -1
- package/dist/src/inventory5.js +1 -1
- package/dist/src/ios-client.js +4 -30
- package/dist/src/ios-settings.js +1 -0
- package/dist/src/ios-snapshot-engine.js +1 -1
- package/dist/src/ios-snapshot-runtime.js +1 -1
- package/dist/src/launch-confirmation.js +1 -0
- package/dist/src/lease-context.js +1 -1
- package/dist/src/lease-registry-scope.js +1 -0
- package/dist/src/lease-scope.js +1 -1
- package/dist/src/lease.js +1 -1
- package/dist/src/legacy-xctest-device-set.js +1 -1
- package/dist/src/limrun-download-file.js +1 -1
- package/dist/src/limrun-runtime-dependencies.js +1 -1
- package/dist/src/limrun.d.ts +78 -44
- package/dist/src/limrun.js +1 -1
- package/dist/src/linux.js +1 -1
- package/dist/src/load.js +1 -0
- package/dist/src/location-coordinates.js +1 -1
- package/dist/src/macos-facade.js +1 -1
- package/dist/src/managed-device-scope.js +1 -1
- package/dist/src/mechanics.js +16 -16
- package/dist/src/observation.js +1 -1
- package/dist/src/observe-until.js +1 -1
- package/dist/src/overlay.js +2 -2
- package/dist/src/owner-identity.js +3 -3
- package/dist/src/path-resolution.js +1 -1
- package/dist/src/perf-facade.js +1 -1
- package/dist/src/perf-runtime-operation-builder.js +1 -1
- package/dist/src/perf-runtime-plan.js +1 -1
- package/dist/src/perf-target.js +1 -1
- package/dist/src/perf.js +1 -1
- package/dist/src/physical-device-control.js +1 -1
- package/dist/src/platform-request-scope.js +1 -1
- package/dist/src/platform-runtime-android-adb-host.js +1 -1
- package/dist/src/platform-runtime-app-log-process.js +1 -1
- package/dist/src/platform-runtime-host.js +1 -1
- package/dist/src/platform-runtime-managed-owner.js +1 -1
- package/dist/src/platform-runtime-open-target.js +1 -1
- package/dist/src/platform-runtime-operation-host.js +2 -2
- package/dist/src/platform-runtime-runtime-hints.js +2 -2
- package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-runner-transport.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-output-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-process-host.js +1 -1
- package/dist/src/platform-runtime-unavailable.js +1 -1
- package/dist/src/platform-runtime.js +1 -1
- package/dist/src/platform-runtime2.js +1 -1
- package/dist/src/plugins.d.ts +9 -0
- package/dist/src/plugins.js +1 -0
- package/dist/src/plugins2.js +2 -0
- package/dist/src/png-crop-bytes.js +1 -1
- package/dist/src/png-size.js +1 -1
- package/dist/src/png-worker-client.js +1 -1
- package/dist/src/png.js +1 -1
- package/dist/src/prepare-kind.js +1 -1
- package/dist/src/process.js +1 -1
- package/dist/src/project-runtime.js +1 -1
- package/dist/src/provider-credential-fingerprint.js +1 -0
- package/dist/src/provider-device-admission.js +1 -1
- package/dist/src/provider-device-runtimes.js +1 -0
- package/dist/src/provider-limrun-credentials.js +1 -0
- package/dist/src/provider-profile-fields.js +1 -0
- package/dist/src/provider-session-ownership.js +2 -2
- package/dist/src/provider-webdriver.js +2 -1
- package/dist/src/providers.js +1 -1
- package/dist/src/proxy.js +1 -1
- package/dist/src/quality-warnings.js +1 -1
- package/dist/src/react-native.js +1 -1
- package/dist/src/record-runtime.js +1 -1
- package/dist/src/record-trace.js +1 -1
- package/dist/src/recording.js +1 -1
- package/dist/src/rect-center.js +1 -1
- package/dist/src/register-builtins.js +1 -1
- package/dist/src/registry.js +52 -36
- package/dist/src/remote-config2.js +1 -1
- package/dist/src/replay-divergence.js +1 -1
- package/dist/src/replay.js +2 -2
- package/dist/src/reporting.js +5 -5
- package/dist/src/request-admission.js +1 -1
- package/dist/src/request-cancel.js +1 -1
- package/dist/src/request-cancellation.js +1 -1
- package/dist/src/request-runtime-binding.js +1 -1
- package/dist/src/result-serialization.js +1 -1
- package/dist/src/retry.js +1 -1
- package/dist/src/runner-artifact-manifest.js +1 -1
- package/dist/src/runner-cache-metadata.js +3 -3
- package/dist/src/runner-client.js +1 -1
- package/dist/src/runner-dev-tools-security.js +1 -1
- package/dist/src/runner-device-readiness.js +1 -1
- package/dist/src/runner-disposal.js +1 -1
- package/dist/src/runner-error-classification.js +2 -2
- package/dist/src/runner-exchange.js +1 -1
- package/dist/src/runner-operations-facade.js +1 -1
- package/dist/src/runner-session-types.js +1 -1
- package/dist/src/runner-start-budget.js +1 -1
- package/dist/src/runner.js +1 -1
- package/dist/src/runtime-admission.js +1 -1
- package/dist/src/runtime-transport-hints.js +1 -1
- package/dist/src/runtime.js +1 -1
- package/dist/src/runtime10.js +2 -2
- package/dist/src/runtime2.js +3 -3
- package/dist/src/runtime3.js +1 -1
- package/dist/src/runtime4.js +5 -5
- package/dist/src/runtime5.js +1 -1
- package/dist/src/runtime6.js +1 -1
- package/dist/src/runtime7.js +1 -1
- package/dist/src/runtime8.js +1 -1
- package/dist/src/runtime9.js +1 -1
- package/dist/src/screen-recording-admission-ledger.js +1 -1
- package/dist/src/screen-recording-completion.js +1 -1
- package/dist/src/screen-recording-options.js +1 -1
- package/dist/src/screen-recording-resource-recovery.js +1 -1
- package/dist/src/screen-recording-transport.js +1 -1
- package/dist/src/screenshot-density.js +1 -1
- package/dist/src/screenshot-image.js +1 -1
- package/dist/src/screenshot-result.js +1 -1
- package/dist/src/screenshot-runtime.js +1 -1
- package/dist/src/screenshot.js +1 -1
- package/dist/src/screenshot3.js +1 -1
- package/dist/src/script.js +1 -1
- package/dist/src/scroll-command.js +1 -1
- package/dist/src/scroll-gesture.js +1 -1
- package/dist/src/sdk-batch-runner.js +2 -2
- package/dist/src/sdk-batch.js +2 -2
- package/dist/src/sdk-contracts.d.ts +47 -2
- package/dist/src/sdk-contracts.js +2 -2
- package/dist/src/sdk-device.js +1 -1
- package/dist/src/sdk-io.js +1 -1
- package/dist/src/sdk-remote-config.js +1 -1
- package/dist/src/sdk-selectors.d.ts +37 -8
- package/dist/src/selection.js +0 -0
- package/dist/src/selector-runtime.js +1 -1
- package/dist/src/selectors.d.ts +2 -2
- package/dist/src/selectors.js +1 -1
- package/dist/src/server.js +1 -1
- package/dist/src/session-allocation.js +1 -1
- package/dist/src/session-artifact-paths.js +1 -1
- package/dist/src/session-repair-tombstone.js +1 -1
- package/dist/src/session-routing.js +1 -1
- package/dist/src/session-runtime-admission.js +1 -1
- package/dist/src/session-snapshot.js +1 -1
- package/dist/src/session-stream.js +27 -0
- package/dist/src/session.js +1 -1
- package/dist/src/session2.js +5 -5
- package/dist/src/settings.js +1 -1
- package/dist/src/settings2.js +1 -1
- package/dist/src/simctl-settings-facade.js +1 -0
- package/dist/src/simctl-settings.js +1 -0
- package/dist/src/simctl.js +1 -1
- package/dist/src/simulator-boot.js +1 -1
- package/dist/src/simulator.js +1 -1
- package/dist/src/snapshot-diagnostics.js +1 -1
- package/dist/src/snapshot-runtime-binding.js +1 -1
- package/dist/src/snapshot-runtime.js +1 -1
- package/dist/src/snapshot-state.js +1 -1
- package/dist/src/snapshot2.js +1 -1
- package/dist/src/snapshot3.js +1 -1
- package/dist/src/snapshot4.js +1 -1
- package/dist/src/src.js +1 -1
- package/dist/src/src7.js +1 -1
- package/dist/src/src8.js +2 -2
- package/dist/src/store.js +1 -0
- package/dist/src/string-enum.js +1 -1
- package/dist/src/surface-snapshot.js +1 -1
- package/dist/src/takeover.js +1 -1
- package/dist/src/target-evidence.js +1 -1
- package/dist/src/telemetry.js +1 -1
- package/dist/src/text-entry-focus.js +1 -1
- package/dist/src/tool-provider.js +3 -3
- package/dist/src/tool-provider2.js +1 -1
- package/dist/src/tool-provider3.js +1 -1
- package/dist/src/toolchain-probe.js +2 -2
- package/dist/src/touch-runtime.js +1 -1
- package/dist/src/touch-runtime2.js +1 -1
- package/dist/src/transport.js +2 -2
- package/dist/src/tv-remote.js +1 -1
- package/dist/src/type-text-runtime.js +1 -1
- package/dist/src/update-check.js +1 -1
- package/dist/src/vars.js +1 -1
- package/dist/src/verified-file.js +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/video.js +1 -1
- package/dist/src/viewport.js +1 -1
- package/dist/src/web.js +1 -1
- package/dist/src/web2.js +1 -1
- package/dist/src/webdriver-source.js +1 -1
- package/package.json +5 -1
- package/server.json +2 -2
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.19.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.19.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.19.apk.sha256 +0 -1
- package/dist/src/api.js +0 -3
- package/dist/src/daemon-process.js +0 -1
- package/dist/src/multitouch-support.js +0 -1
- package/dist/src/parameterized-recorded-fill.js +0 -1
- package/dist/src/runner-startup-transport.js +0 -1
- package/dist/src/runner-xctestrun.js +0 -1
- package/dist/src/session-store.js +0 -4
package/dist/src/sdk-batch.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
`],[`r`,`\r`],[`t`,` `]]);function v(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Selector expression cannot be empty`);let r=Pe(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Selector expression cannot be empty`);return{raw:n,selectors:r.map(e=>Me(e))}}function y(e){try{return v(e)}catch{return null}}function b(e){let t=e.trim();if(!t)return!1;if(t===`||`)return!0;let n=t.indexOf(`=`);if(n!==-1){let e=t.slice(0,n).trim().toLowerCase();return _.has(e)}return _.has(t.toLowerCase())}function je(e){let t=e.trim(),n=t.indexOf(`=`);if(n===-1)return null;let r=t.slice(0,n).trim().toLowerCase();if(!r||_.has(r))return null;let i=t.slice(n+1).trim();if(!i)return null;let a=Le(i).trim();return a?{key:r,value:a}:null}function x(e,t={}){if(e.length===0)return null;let n=t.preferTrailingValue??!1,r=0,i=[];for(;r<e.length;){let t=e[r];if(t===void 0||!b(t))break;r+=1;let n=e.slice(0,r).join(` `).trim();n&&y(n)&&i.push(r)}if(i.length===0)return null;let a=i.at(-1);if(a===void 0)return null;let o=a;if(n)for(let t=i.length-1;t>=0;--t){let n=i[t];if(n!==void 0&&n<e.length){o=n;break}}let s=e.slice(0,o).join(` `).trim();return s?{selectorExpression:s,rest:e.slice(o)}:null}function Me(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Selector segment cannot be empty`);let r=Fe(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Invalid selector segment: ${t}`);return{raw:n,terms:r.map(Ne)}}function Ne(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Empty selector term`);let r=n.indexOf(`=`);if(r===-1){let r=n.toLowerCase();if(!Ee.has(r))throw new e(`INVALID_ARGS`,`Invalid selector term "${t}", expected key=value`);return{key:r,value:!0}}let i=n.slice(0,r).trim().toLowerCase(),a=n.slice(r+1).trim();if(!_.has(i))throw new e(`INVALID_ARGS`,`Unknown selector key: ${i}`);if(!a)throw new e(`INVALID_ARGS`,`Missing selector value for key: ${i}`);if(Ee.has(i)){let t=Be(a);if(t===null)throw new e(`INVALID_ARGS`,`Invalid boolean value for ${i}: ${a}`);return{key:i,value:t}}return{key:i,value:Le(a)}}function Pe(t){let n=[],r=``,i=null;for(let a=0;a<t.length;a+=1){let o=t[a];if((o===`"`||o===`'`)&&!Ve(t,a)){i=Ie(i,o),r+=o;continue}if(!i&&o===`|`&&t[a+1]===`|`){let i=r.trim();if(!i)throw new e(`INVALID_ARGS`,`Invalid selector fallback expression: ${t}`);n.push(i),r=``,a+=1;continue}r+=o}let a=r.trim();if(!a)throw new e(`INVALID_ARGS`,`Invalid selector fallback expression: ${t}`);return n.push(a),n}function Fe(t){let n=[],r=``,i=null;for(let e=0;e<t.length;e+=1){let a=t.charAt(e);if((a===`"`||a===`'`)&&!Ve(t,e)){i=Ie(i,a),r+=a;continue}if(!i&&/\s/.test(a)){r.trim()&&n.push(r.trim()),r=``;continue}r+=a}if(i)throw new e(`INVALID_ARGS`,`Unclosed quote in selector: ${t}`);return r.trim()&&n.push(r.trim()),n}function Ie(e,t){return e?e===t?null:e:t}function Le(e){let t=e.trim();return t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?Re(t.slice(1,-1)):t}function Re(e){let t=``,n=0;for(;n<e.length;){let r=e.charAt(n);if(r!==`\\`){t+=r,n+=1;continue}let i=e.charAt(n+1);if(!i){t+=r,n+=1;continue}let a=ze(i);if(a!==null){t+=a,n+=2;continue}if(i===`u`){let r=e.slice(n+2,n+6);if(/^[0-9a-fA-F]{4}$/.test(r)){t+=String.fromCharCode(Number.parseInt(r,16)),n+=6;continue}}t+=r,n+=1}return t}function ze(e){return Ae.get(e)??null}function Be(e){let t=Le(e).toLowerCase();return t===`true`||t!==`false`&&null}function Ve(e,t){let n=0;for(let r=t-1;r>=0&&e[r]===`\\`;--r)n+=1;return n%2==1}function He(e){return a.includes(e)}const Ue=`is requires predicate: ${a.join(`|`)}`;function We(e){let t=e.toLowerCase();return He(t)?{ok:!0,predicate:t}:i(Ue,Ge)}const Ge=`Use "is <predicate> <selector>" or "is <selector> <predicate>". visible|hidden|editable|selected|focused double as selector keys: a bare predicate token after the selector is read as the predicate, so write key=true (e.g. visible=true) inside the selector to use it as a filter instead.`;function Ke(e){if(He((e[0]??``).toLowerCase()))return e;for(let t=1;t<e.length;t+=1){let n=(e[t]??``).toLowerCase();if(He(n)&&y(e.slice(0,t).join(` `)))return[n,...e.slice(0,t),...e.slice(t+1)]}return e}function qe(e){let{predicate:t,node:n,visibility:r,expectedText:i,platform:a}=e,o=h(n),s=we(n,a),c=n.selected===!0,l=n.focused===!0,u=t===`text`?g(n):Ye(n,r,a),d=!1;switch(t){case`visible`:d=u;break;case`hidden`:d=!u;break;case`editable`:d=s;break;case`selected`:d=c;break;case`focused`:d=l;break;case`text`:d=o===(i??``);break;default:return Je(t)}let ee=t===`text`?`expected="${i??``}" actual="${o}"`:`actual=${JSON.stringify({visible:u,editable:s,selected:c,focused:l})}`;return{pass:d,actualText:o,details:ee}}function Je(e){throw Error(`Unhandled is predicate: ${String(e)}`)}function Ye(e,t,n){if(n===`android`&&e.visibleToUser===!1)return!1;if(c(e.rect))return t.isVisibleInEffectiveViewport(e);if(e.rect)return!1;if(n!==`android`&&e.hittable===!0)return!0;let r=Xe(e,t,n);return r?c(r.rect)?t.isVisibleInEffectiveViewport(r):n!==`android`&&r.hittable===!0:!1}function Xe(e,t,n){return t.findAncestor(e,e=>Ce(e,n)?e:null)}function Ze(e){let t=Ke(e),n=t[0]??``;return{predicate:n,split:x(t.slice(1),{preferTrailingValue:n===`text`})}}const Qe=`is requires a selector expression`,$e=`is text requires expected text value`;function et(e){let{predicate:t,split:n}=Ze([...e]),r=We(t);if(!r.ok)return r;if(!n)return i(Qe);let a=n.rest.join(` `).trim();return r.predicate===`text`&&!a?i($e):r.predicate!==`text`&&n.rest.length>0?i(`is ${r.predicate} does not accept trailing values`):{ok:!0,predicate:r.predicate,selectorExpression:n.selectorExpression,expectedText:a}}function tt(e){return e===`text`||e===`attrs`?{ok:!0,format:e}:i(`get only supports text or attrs`)}function nt(e){let t=e[0];if(t?.startsWith(`@`)){let n=e.slice(1).join(` `).trim();return{ok:!0,ref:t,...n?{label:n}:{}}}let n=e.join(` `).trim();return n?{ok:!0,selector:n}:i(`get requires @ref or selector expression`)}function rt(e){return e?{ok:!0,text:e}:i(`wait requires text`)}function it(e){return Array.from(new Set(e))}function at(e){return JSON.stringify(ot(e))}function ot(e){if(Array.isArray(e))return e.map(ot);if(!e||typeof e!=`object`)return e;let t=e;return Object.fromEntries(Object.keys(t).sort().map(e=>[e,ot(t[e])]))}function st(e){let t=0,n=e.length;for(;t<n&&e[t]===`-`;)t+=1;for(;n>t&&e[n-1]===`-`;)--n;return e.slice(t,n)}const ct=/^#\s*agent-device:target-v(\d+)(?:\s+(\S.*))?$/,lt=/^#\s*agent-device:targets-v(\d+)(?:\s+(\S.*))?$/,ut=4096;function dt(e){return e.normalize(`NFC`)}function ft(e){if(e===void 0)return;let t=dt(e);return t.length>0?t:void 0}function pt(e){return dt(e)}function mt(e){if(e===void 0)return;let t=dt(e).trim().replaceAll(/\s+/g,` `);return t.length>0?t:void 0}function S(e){return Buffer.byteLength(e,`utf8`)}function C(e,t){if(S(e)<=t)return e;let n=e.length;for(;n>0&&S(e.slice(0,n))>t;)--n;if(n>0){let t=e.charCodeAt(n-1);t>=55296&&t<=56319&&--n}return e.slice(0,n)}function ht(e){let t={};return e.id!==void 0&&(t.id=e.id),t.role=e.role,e.label!==void 0&&(t.label=e.label),t.ancestry=e.ancestry.map(gt),t.sibling=e.sibling,t.viewportOrder=e.viewportOrder,e.scrollRegion&&(t.scrollRegion=_t(e.scrollRegion)),e.rect&&(t.rect=vt(e.rect)),t.verification=e.verification,t}function gt(e){let t={role:e.role};return e.label!==void 0&&(t.label=e.label),t}function _t(e){let t={role:e.role};return e.id!==void 0&&(t.id=e.id),e.label!==void 0&&(t.label=e.label),t}function vt(e){return{x:e.x,y:e.y,width:e.width,height:e.height}}function yt(e){return JSON.stringify(ht(e))}function bt(e){return`# agent-device:target-v1 ${yt(e)}`}function xt(e){return JSON.stringify({source:ht(e.source),destination:ht(e.destination)})}function St(e){return`# agent-device:targets-v1 ${xt(e)}`}function Ct(e){let t=e.trim(),n=lt.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:wt((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function wt(t){if(S(t)>8320)throw new e(`INVALID_ARGS`,`targets-v1 annotation exceeds the 8320-byte payload cap.`);let n;try{n=JSON.parse(t)}catch{throw new e(`INVALID_ARGS`,`targets-v1 annotation is not valid JSON.`)}if(typeof n!=`object`||!n||Array.isArray(n))throw new e(`INVALID_ARGS`,`targets-v1 annotation must be a JSON object.`);let r=n;if(r.source===void 0||r.destination===void 0)throw new e(`INVALID_ARGS`,`targets-v1 annotation requires source and destination evidence.`);return{source:w(JSON.stringify(r.source)),destination:w(JSON.stringify(r.destination))}}function Tt(e){let t=e.trim();if(!t.startsWith(`#`))return{kind:`none`};let n=ct.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:w((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function w(t){if(S(t)>4096)throw new e(`INVALID_ARGS`,`target-v1 annotation exceeds the ${ut}-byte payload cap.`);let n;try{n=JSON.parse(t)}catch{throw new e(`INVALID_ARGS`,`target-v1 annotation is not valid JSON.`)}if(typeof n!=`object`||!n||Array.isArray(n))throw new e(`INVALID_ARGS`,`target-v1 annotation must be a JSON object.`);let r=n,i=T(r.role,`role`),a=Et(r.id,`id`),o=Dt(r.label,`label`),s=kt(r.ancestry),c=jt(r.sibling,`sibling`,0),l=jt(r.viewportOrder,`viewportOrder`,0),u=Mt(r.scrollRegion),d=Nt(r.rect),ee=Pt(r.verification);return{...a===void 0?{}:{id:a},role:i,...o===void 0?{}:{label:o},ancestry:s,sibling:c,viewportOrder:l,...u?{scrollRegion:u}:{},...d?{rect:d}:{},verification:ee}}function T(t,n){if(t===void 0)throw new e(`INVALID_ARGS`,`target-v1 "${n}" is required.`);if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);return Ot(pt(t),n)}function Et(t,n){if(t===void 0)return;if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);let r=ft(t);return r===void 0?void 0:Ot(r,n)}function Dt(t,n){if(t===void 0)return;if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);let r=mt(t);return r===void 0?void 0:Ot(r,n)}function Ot(t,n){if(S(t)>256)throw new e(`INVALID_ARGS`,`target-v1 "${n}" exceeds the 256-byte field cap.`);return t}function kt(t){if(t===void 0)return[];if(!Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "ancestry" must be an array.`);if(t.length>8)throw new e(`INVALID_ARGS`,`target-v1 "ancestry" exceeds the 8-entry cap.`);return t.map((e,t)=>At(e,t))}function At(t,n){if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "ancestry[${n}]" must be an object.`);let r=t,i=T(r.role,`ancestry[${n}].role`),a=Dt(r.label,`ancestry[${n}].label`);return{role:i,...a===void 0?{}:{label:a}}}function jt(t,n,r){if(t===void 0)return r;if(typeof t!=`number`||!Number.isSafeInteger(t)||t<0)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a non-negative integer.`);return t}function Mt(t){if(t===void 0)return;if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "scrollRegion" must be an object.`);let n=t,r=T(n.role,`scrollRegion.role`),i=Et(n.id,`id`),a=Dt(n.label,`scrollRegion.label`);return{role:r,...i===void 0?{}:{id:i},...a===void 0?{}:{label:a}}}function Nt(t){if(t===void 0)return;if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "rect" must be an object.`);let n=t;return{x:E(n.x,`rect.x`),y:E(n.y,`rect.y`),width:E(n.width,`rect.width`),height:E(n.height,`rect.height`)}}function E(t,n){if(typeof t!=`number`||!Number.isFinite(t))throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a finite number.`);return t}function Pt(t){if(t===`verified`||t===`unverifiable`)return t;throw new e(`INVALID_ARGS`,`target-v1 "verification" must be "verified" or "unverifiable".`)}function Ft(e){let t=pt(m(e.type??``)),n=ft(e.identifier),r=mt(e.label);return{...n===void 0?{}:{id:C(n,256)},role:C(t,256),...r===void 0?{}:{label:C(r,256)}}}function It(e,t){return e.id===t.id&&e.role===t.role&&e.label===t.label}function Lt(e,t){let n=0;for(let r of e)Ft(r).id===t&&(n+=1);return n}function Rt(e,t){if(e.id===void 0||Lt(t,e.id)<=1)return e;let{role:n,label:r}=e;return{role:n,...r===void 0?{}:{label:r}}}function zt(e,t){let n=0;for(let r of e)if(r.parentIndex===t.parentIndex){if(r.index===t.index)return n;n+=1}return 0}function Bt(e,t){return{documentOrder:e.index,sibling:zt(t,e)}}function Vt(e,t){return e.documentOrder===t.documentOrder&&e.sibling===t.sibling}function Ht(e){return{...e.id===void 0?{}:{id:e.id},role:e.role,...e.label===void 0?{}:{label:e.label}}}function Ut(e,t){return t.id===void 0?e.role===t.role&&e.label===t.label:e.id===t.id}function Wt(e,t){if(e.length<t.length)return!1;for(let[n,r]of t.entries()){let t=e[n];if(!t||t.role!==r.role||r.label!==void 0&&t.label!==r.label)return!1}return!0}function Gt(e,t){let n=[];return e.id!==t.id&&n.push(`id: recorded=${e.id??`(none)`} observed=${t.id??`(none)`}`),e.role!==t.role&&n.push(`role: recorded=${e.role} observed=${t.role}`),e.label!==t.label&&n.push(`label: recorded=${e.label??`(none)`} observed=${t.label??`(none)`}`),n}function Kt(e){return e?`${e.role}${e.label?`/${e.label}`:``}`:`(missing)`}function qt(e,t){return!t||t.role!==e.role||e.label!==void 0&&t.label!==e.label}function Jt(e,t){for(let[n,r]of e.entries()){let e=t[n];if(qt(r,e))return[`ancestry[${n}]: recorded=${Kt(r)} observed=${Kt(e)}`]}return[]}function Yt(e,t,n={}){let r=[],i=m(e.type??``),a=Xt(e,n.nodes),o=O(e.label),s=O(e.value),c=O(h(e)),l=n.action===`fill`;a&&r.push(`id=${D(a)}`),i&&o&&r.push(l?`role=${D(i)} label=${D(o)} editable=true`:`role=${D(i)} label=${D(o)}`),o&&r.push(l?`label=${D(o)} editable=true`:`label=${D(o)}`),s&&r.push(l?`value=${D(s)} editable=true`:`value=${D(s)}`),c&&c!==o&&c!==s&&r.push(l?`text=${D(c)} editable=true`:`text=${D(c)}`),i&&l&&!r.some(e=>e.includes(`editable=true`))&&r.push(`role=${D(i)} editable=true`);let u=it(r);return u.length===0&&i&&u.push(l?`role=${D(i)} editable=true`:`role=${D(i)}`),u.length===0&&g(e)&&u.push(`visible=true`),u}function Xt(e,t){let n=O(e.identifier);if(!n||!t)return n;let r=Ft(e).id;return r===void 0?n:Lt(t,r)>1?null:n}function D(e){return JSON.stringify(e)}function O(e){return e&&e.trim()||null}const Zt=[`any`,`text`,`label`,`value`,`role`,`id`],Qt=[`text`,`label`,`value`,`role`,`id`];function $t(e){let t=e?.toLowerCase();return t===`press`||t===`tap`?`click`:t}function en(e){return e===`exists`||e===`wait`||e===`get_text`||e===`get_attrs`||e===`list`}function tn(e,t,n,r={}){let i=A(n);if(!i)return{matches:[],score:0};let a=0,o=[];for(let n of e){if(r.requireRect&&!n.rect)continue;let e=nn(n,t,i);if(!(e<=0)){if(e>a){a=e,o.length=0,o.push(n);continue}e===a&&o.push(n)}}return{matches:o,score:a}}function nn(e,t,n){switch(t){case`role`:return rn(e.type,n);case`label`:return k(e.label,n);case`value`:return k(e.value,n);case`id`:return k(e.identifier,n);default:return Math.max(k(e.label,n),k(e.value,n),k(e.identifier,n))}}function k(e,t){let n=A(e??``);return n?n===t?2:+!!n.includes(t):0}function rn(e,t){let n=an(e??``);return n?n===t?2:+!!n.includes(t):0}function A(e){return e.trim().toLowerCase().replaceAll(/\s+/g,` `)}function an(e){let t=e.trim();return t?(t=(t.split(`.`).pop()??t).replaceAll(/XCUIElementType/gi,``).toLowerCase(),t):``}const on=`find requires a value`,sn=`find actions: click (default; press/tap are aliases), list, focus, fill, type, exists, wait, get text, get attrs — there is no longpress/swipe find action. Run find "<text>" list to inspect every match with its @ref without acting, then dispatch the gesture on the chosen ref, e.g. longpress @eNN.`;function cn(e,t){if(e.length===0)return{ok:!1,code:`INVALID_ARGS`,message:`find requires a locator or text`};let n=dn([...e]);return n.query?t?.findFirst&&t?.findLast?{ok:!1,code:`INVALID_ARGS`,message:`find accepts only one of --first or --last`}:{ok:!0,parsed:n}:{ok:!1,code:`INVALID_ARGS`,message:on}}const ln=[`exists`,`list`,`click`,`focus`];function un(e){return ln.includes(e)}function dn(t){let n=`any`,r=0;Qt.includes(t[0])&&(n=t[0],r=1);let i=t[r]??``,a=t.slice(r+1);if(a.length===0)return{locator:n,query:i,action:`click`};let o=$t(a[0]);if(un(o))return{locator:n,query:i,action:o};if(o===`get`)return{locator:n,query:i,action:fn(a[1])};if(o===`wait`){let e=mn(a[1]);return{locator:n,query:i,action:`wait`,timeoutMs:e??void 0}}if(o===`fill`||o===`type`){let e=a.slice(1);return{locator:n,query:i,action:o,value:e.length===0?void 0:e.join(` `)}}throw new e(`INVALID_ARGS`,`Unsupported find action: ${a[0]}`,{hint:sn})}function fn(t){let n=t?.toLowerCase();if(n===`text`)return`get_text`;if(n===`attrs`)return`get_attrs`;throw new e(`INVALID_ARGS`,`find get only supports text or attrs`)}function pn(e,t){return e!==`any`||!t.includes(`=`)&&!t.includes(`||`)?null:y(t)?t:null}function mn(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}function hn(e,t,n){return t.terms.every(t=>gn(e,t,n))}function gn(e,t,n){switch(t.key){case`id`:return j(e.identifier,String(t.value));case`role`:return j(m(e.type??``),String(t.value));case`label`:return j(e.label,String(t.value));case`value`:return j(e.value,String(t.value));case`text`:return j(h(e),String(t.value));case`appname`:return j(e.appName,String(t.value));case`windowtitle`:return j(e.windowTitle,String(t.value));case`visible`:return g(e)===!!t.value;case`hidden`:return!g(e)==!!t.value;case`editable`:return we(e,n)===!!t.value;case`selected`:return e.selected===!0==!!t.value;case`focused`:return e.focused===!0==!!t.value;case`enabled`:return e.enabled!==!1==!!t.value;case`hittable`:return e.hittable===!0==!!t.value;default:return!1}}function j(e,t){return A(e??``)===A(t)}function _n(e,t,n){let r=n.requireRect??!1,i=n.requireUnique??!0,a=[],o=null;for(let[s,c]of t.selectors.entries()){let t=wn(e,c,n.platform,r);if(a.push({selector:c.raw,matches:t.count}),!(t.count===0||!t.firstNode)){if(o??={selector:c,selectorIndex:s,matchedNodes:t.candidates},i&&t.count!==1){if(!n.disambiguateAmbiguous||!t.disambiguated||!t.tiebreak)continue;return{matchedNodes:t.candidates,firstMatch:o,resolution:{node:t.disambiguated,selector:c,selectorIndex:s,matches:t.count,diagnostics:a,disambiguation:{matchCount:t.count,tiebreak:t.tiebreak,alternatives:t.candidates.filter(e=>e!==t.disambiguated)}}}}return{matchedNodes:t.candidates,firstMatch:o,resolution:{node:t.firstNode,selector:c,selectorIndex:s,matches:t.count,diagnostics:a}}}}return{resolution:null,matchedNodes:o?.matchedNodes??[],firstMatch:o}}function vn(e,t,n){return _n(e,t,n).resolution}function yn(e,t,n){let r=n.requireRect??!1;for(let[i,a]of t.selectors.entries()){let t=e.filter(e=>r&&!e.rect?!1:hn(e,a,n.platform));if(t.length>0)return{selector:a,selectorIndex:i,matchedNodes:t}}return null}function bn(e,t,n){let r=n.requireRect??!1,i=[];for(let[a,o]of t.selectors.entries()){let t=On(e,o,n.platform,r);if(i.push({selector:o.raw,matches:t}),t>0)return{selectorIndex:a,selector:o,matches:t,diagnostics:i}}return null}const xn=`Snapshot refs expire when the UI changes. Run snapshot -i and retry with a fresh @ref.`;function Sn(e){return e.some(e=>e.matches>1)?`Add more terms to disambiguate (e.g. role=button text="Sign in"), use an @ref from snapshot -i, or use find <text> --first/--last.`:`Selector text/label values match exactly (quote multi-word values: text="Sign in"). Run snapshot -i to see current elements and refs, or use find <text> for contains matching.`}function Cn(e,t,n){if(t.length===0)return`Selector did not match: ${e}`;let r=t.map(e=>`${e.selector} -> ${e.matches}`).join(`, `);return n.unique??!0?`Selector did not resolve uniquely (${r})`:`Selector did not match (${r})`}function wn(e,t,n,r){let i=0,a=null,o=[],s={best:null,bestVisible:!1,tie:!1},c=he(e).isVisibleOnScreen;for(let l of e)r&&!l.rect||hn(l,t,n)&&(i+=1,a??=l,o.push(l),Tn(s,l,c));return{count:i,firstNode:a,disambiguated:s.tie?null:s.best,tiebreak:s.tie?null:En(o,s.best,c),candidates:o}}function Tn(e,t,n){if(!e.best){e.best=t;return}e.bestVisible||=n(e.best);let r=n(t);if(r!==e.bestVisible){r&&(e.best=t,e.bestVisible=!0,e.tie=!1);return}let i=kn(t,e.best);i.result>0?(e.best=t,e.tie=!1):i.result===0&&(e.tie=!0)}function En(e,t,n){if(!t)return null;let r=null;for(let i of e)i!==t&&(!r||Dn(i,r,n).result>0)&&(r=i);return r?Dn(t,r,n).criterion:null}function Dn(e,t,n){let r=n(e);return r===n(t)?kn(e,t):{result:r?1:-1,criterion:`visible`}}function On(e,t,n,r){let i=0;for(let a of e)r&&!a.rect||hn(a,t,n)&&(i+=1);return i}function kn(e,t){let n=e.depth??0,r=t.depth??0;if(n!==r)return{result:n>r?1:-1,criterion:`deepest`};let i=An(e),a=An(t);return i===a?{result:0,criterion:null}:{result:i<a?1:-1,criterion:`smallest-area`}}function An(e){return e.rect?e.rect.width*e.rect.height:1/0}const jn={act:{ambiguity:`reject-candidates`,requireRect:!0},actCoveredDiagnosis:{ambiguity:`first-match`,requireRect:!0},readText:{ambiguity:`disambiguate`,requireRect:!1},readUnique:{ambiguity:`fail-closed`,requireRect:!1},readAny:{ambiguity:`first-match`,requireRect:!1},wait:{ambiguity:`first-match`,requireRect:!1},findAct:{ambiguity:`reject-candidates`,requireRect:!0},readList:{ambiguity:`reject-candidates`,requireRect:!1},cropTarget:{ambiguity:`fail-closed`,requireRect:!0}};function Mn(e){return e.ambiguity===`first-match`?{requireRect:e.requireRect,requireUnique:!1}:{requireRect:e.requireRect,requireUnique:!0,disambiguateAmbiguous:e.ambiguity===`disambiguate`}}function Nn(e,t){let n=e===`is`?Ze([...t]).split:x([...t]);return n?y(n.selectorExpression)?{kind:`expression`,expression:n.selectorExpression,rest:n.rest}:{kind:`invalid`}:{kind:`not-applicable`}}function Pn(e){return{platform:e.platform,...Mn({ambiguity:e.allowDisambiguation?`disambiguate`:`fail-closed`,requireRect:e.requireRect})}}function Fn(e,t,n){let r=y(e);if(!r)return{kind:`unresolved`,reason:`parse-invalid`,matchedNodes:[]};let{resolution:i,matchedNodes:a}=_n(t,r,Pn(n));return i?{kind:`resolved`,winner:i.node,matchedNodes:a,matchCount:a.length,...i.disambiguation?{disambiguation:{tiebreak:i.disambiguation.tiebreak,matchCount:i.disambiguation.matchCount,alternatives:i.disambiguation.alternatives}}:{}}:{kind:`unresolved`,reason:a.length>0?`ambiguous`:`no-match`,matchedNodes:a}}function In(e,t,n={}){return Yt(e,t,n)}function Ln(e,t,n){let r=y(e);if(!r)return;let i=vn(t,r,Pn(n));if(i)return{node:i.node,basis:zn(i.selector)}}function Rn(e){if(!e)return;let t=y(e);if(!t)return;let n=t.selectors.flatMap(e=>e.terms.flatMap(e=>(e.key===`label`||e.key===`text`||e.key===`id`)&&typeof e.value==`string`?[e.value]:[]));if(n.length===0)return;let r=n[0];return r&&n.every(e=>e===r)?r:void 0}function zn(e){let t=new Set(e.terms.map(e=>e.key));if(t.has(`id`))return`id`;let n=t.has(`role`),r=t.has(`label`)||t.has(`text`);return n&&r?`role-label`:r||t.has(`value`)?`label`:`other`}function Bn(e,t){let n=y(e);if(!n)return e.includes(`=`)||e.includes(`||`)?null:e;let r=new Set(t.textKeys),i=t.textAliases??{};return n.selectors.length>1?Vn(n.selectors,r,i):Hn(n.selectors[0],r,new Set(t.booleanKeys),i)}function Vn(e,t,n){let r=e.map(e=>{let r=e.terms.length===1?e.terms[0]:void 0;return r&&Un(r.key,t,n)&&typeof r.value==`string`?r.value:void 0}),i=r[0];return i!==void 0&&r.every(e=>e===i)?i:null}function Hn(e,t,n,r){if(!e)return null;let i={},a=0;for(let o of e.terms){if(Un(o.key,t,r)&&typeof o.value==`string`)a+=1;else if(!Wn(o,n,`boolean`))return null;i[r[o.key]??o.key]=o.value}return a<=1&&Object.keys(i).length>0?i:null}function Un(e,t,n){return t.has(e)||n[e]!==void 0}function Wn(e,t,n){return t.has(e.key)&&typeof e.value===n}function Gn(e){let t=y(e);if(!t||t.selectors.length!==1)return null;let n=t.selectors[0];if(!n||n.terms.length!==1)return null;let r=n.terms[0];return!r||typeof r.value!=`string`||r.key!==`id`&&r.key!==`label`&&r.key!==`text`&&r.key!==`value`?null:{key:r.key,value:r.value,raw:n.raw}}function Kn(e,t){if(!t)return!1;let n=y(e);return n?n.selectors.some(e=>e.terms.some(e=>(e.key===`text`||e.key===`label`||e.key===`value`)&&typeof e.value==`string`&&e.value.includes(t))):!1}function qn(e,t){return y(e)?.selectors.some(e=>e.terms.some(e=>e.key===t))??!1}function Jn(e){return v(e).selectors.map(e=>e.raw)}function Yn(e){return y(e)!==null}function Xn(e){v(e)}function M(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}const Zn=new Set([`exists`,`present`,`appears`,`gone`,`disappears`]);function Qn(e){let t=e[0];if(t===void 0)return null;let n=M(t);if(n!==null)return{kind:`sleep`,durationMs:n};let r=M(e.at(-1));return t===`text`?$n(e,r):t===`stable`?er(e):t===`absent`?tr(e,r):t.startsWith(`@`)?{kind:`ref`,rawRef:t,timeoutMs:r}:rr(e,r)}function $n(e,t){return{kind:`text`,text:(t===null?e.slice(1).join(` `):e.slice(1,-1).join(` `)).trim(),timeoutMs:t}}function er(e){let t=e.slice(1),n=t.length>1?M(t[1]):null;return{kind:`stable`,quietMs:t.length>0?M(t[0]):null,timeoutMs:n}}function tr(e,t){let n=t===null?e.slice(1):e.slice(1,-1),r=x(n);return n.length>0&&r?.rest.length===0&&Yn(r.selectorExpression)?{kind:`absent`,selectorExpression:r.selectorExpression,timeoutMs:t}:{kind:`invalid`,reason:`absent-selector-required`,message:nr(n)}}function nr(e){let t=e.join(` `);return t.length>0?`wait absent requires one valid selector; received "${t}". Use wait absent '<selector>' [timeoutMs].`:`wait absent requires <selector> [timeoutMs].`}function rr(e,t){let n=t===null?e.slice():e.slice(0,-1),r=x(n);return r&&r.rest.length===0&&Yn(r.selectorExpression)?{kind:`selector`,selectorExpression:r.selectorExpression,timeoutMs:t}:ir(n,r)||{kind:`text`,text:(t===null?e.join(` `):e.slice(0,-1).join(` `)).trim(),timeoutMs:t}}function ir(e,t){for(let t of e){let n=je(t);if(n)return{kind:`invalid`,reason:`unknown-selector-key`,message:ar(n,e)}}return t&&t.rest.length>0?{kind:`invalid`,reason:`selector-shaped-text`,message:or(t,e)}:e.some(e=>b(e))?{kind:`invalid`,reason:`selector-shaped-text`,message:sr(e)}:null}function ar(e,t){let n=t.join(` `),r=ke(e.key)?`role=${e.key} label="${e.value}"`:`label="${e.value}"`;return`Unknown selector key "${e.key}" in "${n}". Supported: ${De.join(`, `)}. Use wait '${r}' [timeoutMs] to wait for the selector, or wait text '${n}' [timeoutMs] to wait for the literal text "${n}".`}function or(e,t){let n=t.join(` `);return`Selector ${e.selectorExpression} is followed by unexpected extra arguments: "${e.rest.join(` `)}". Selector values with spaces need quotes, e.g. label="Sign in". Use wait '<selector>' [timeoutMs], or wait text '${n}' [timeoutMs] to wait for the literal text "${n}".`}function sr(e){let t=e.join(` `),n=e.filter(e=>!b(e)),r=e.filter(e=>b(e));if(n.length>0){let e=n[0],i=Zn.has(e.toLowerCase())?` "${e}" describes a condition, not a selector key. Use the selector form: `+(e.toLowerCase()===`gone`||e.toLowerCase()===`disappears`?`wait absent '${r.join(` `)}' [timeoutMs] to wait for zero matches.`:`wait '${r.join(` `)}' [timeoutMs] to wait for it to appear.`):` "${e}" is not a recognized selector key (${De.join(`, `)}).`;return`"${t}" mixes plain word "${e}" with selector-shaped "${r.join(` `)}", so it is neither a valid selector nor safe as literal text.${i} Use wait '<selector>' [timeoutMs] for a selector, or wait text '${t}' [timeoutMs] to wait for the literal text "${t}".`}return`"${t}" looks like a selector key but is not a valid selector expression. Use wait '<selector>' [timeoutMs], e.g. wait '${e[0]}="value"' [timeoutMs], or wait text '${t}' [timeoutMs] to wait for the literal text "${t}".`}function cr(e){let t=Qn(e);return t?t.kind===`sleep`?t.durationMs:t.kind===`invalid`?null:t.timeoutMs:null}const lr=3e4,ur=24e4,dr=3e5,N={budget:{source:`none`},envelopeMs:9e4,onTimeout:`reset-daemon`},fr={budget:{source:`none`},envelopeMs:255e3,onTimeout:`reset-daemon`};function pr(e,t){if(e.envelopeMs===`unbounded`)return;let n={...e,envelopeMs:e.envelopeMs};return(hr(n,t.positionals??[])??gr(n,t.flags)??n.envelopeMs)+mr(e,t.flags)}function mr(e,t){if(e.targetReadiness!==`budgeted`)return 0;let n=t?.readinessTimeoutMs;return typeof n!=`number`||!Number.isInteger(n)||n<=0?0:Math.min(n,2e3)}function hr(e,t){if(e.budget.source!==`positional-parser`)return;let n=e.budget.parser(t);return n===null?void 0:yr(e,n)}function gr(e,t){if(e.budget.source===`flag`)return e.budget.envelope===`widen`?vr(e,e.budget,t):e.budget.envelope===`margin`?_r(e,t):typeof t?.timeoutMs==`number`?t.timeoutMs:e.envelopeMs}function _r(e,t){let n=typeof t?.timeoutMs==`number`?yr(e,t.timeoutMs):e.envelopeMs;return typeof t?.waitMs==`number`?br({...e,envelopeMs:n},t.waitMs):n}function vr(e,t,n){if(n?.settle!==!0)return e.envelopeMs;let r=typeof n.timeoutMs==`number`?n.timeoutMs:t.defaultBudgetMs;return typeof r==`number`?br(e,r):e.envelopeMs}function yr(e,t){return Math.max(e.envelopeMs,t+lr)}function br(e,t){return Math.max(e.envelopeMs,e.envelopeMs+t+lr)}const xr={click:`settle-and-verify`,press:`settle-and-verify`,fill:`settle-and-verify`,longpress:`settle`,hover:`settle`,scroll:`settle`,back:`settle`};function Sr(e){if(e!==void 0)return xr[e]}function P(t){return new e(`COMMAND_FAILED`,t,{reason:`runtime-contract-invalid`,hint:`This is an agent-device runtime contract bug; report the selected device and command.`})}function Cr(e){if(!n(e))throw TypeError(`Unknown local runtime family: ${String(e)}`);return Object.freeze({kind:`local-family`,family:e})}function wr(e,t){let n=e.trim(),r=t.trim();if(n.length===0||r.length===0)throw TypeError(`Provider runtime owner requires non-empty provider and instance identities`);return Object.freeze({kind:`provider-runtime`,provider:n,instance:r})}function Tr(e){let t=e.trim();if(t.length===0)throw TypeError(`Managed local runtime owner requires a non-empty allocator instance identity`);return Object.freeze({kind:`managed-local`,instance:t})}function F(e){switch(e.kind){case`local-family`:return`local:${e.family}`;case`managed-local`:return`managed:${JSON.stringify([e.instance])}`;case`provider-runtime`:return`provider:${JSON.stringify([e.provider,e.instance])}`}}function Er(e,t){return F(e)===F(t)}function Dr(e,t){return e.available?t():{}}function Or(e){if(!I(e.requesterId)||!I(e.identityIncarnationId)||!Ar(e.requestGeneration))throw TypeError(`Managed binding fence requires non-empty requester and identity incarnation ids and a non-negative integer request generation`);return Object.freeze({token:JSON.stringify([e.requesterId,e.identityIncarnationId]),generation:e.requestGeneration})}function kr(e){let t=jr(e.token);if(!t||t.length!==2)return null;let[n,r]=t;if(!I(n)||!I(r)||!Ar(e.generation))return null;let i=Object.freeze({requesterId:n,requestGeneration:e.generation,identityIncarnationId:r});return Or(i).token===e.token?i:null}function Ar(e){return Number.isInteger(e)&&e>=0}function I(e){return typeof e==`string`&&e.trim().length>0}function jr(e){try{let t=JSON.parse(e);return Array.isArray(t)?t:null}catch{return null}}function Mr(e,t){let n={},r={};for(let i of t.required){let t=Nr(e.facts.operations,i);if(n[i]=t,!t.available)throw Rr(i,t);r[i]=Ir(e.operations,i)}for(let i of t.preferred){let t=Nr(e.facts.operations,i);n[i]=t,t.available&&(r[i]=Ir(e.operations,i))}for(let i of t.conditional??[]){let t=Nr(e.facts.operations,i);n[i]=t,t.available&&(r[i]=Ir(e.operations,i))}return Object.freeze({device:e.device,owner:e.owner,facts:Object.freeze(n),operations:Object.freeze(r)})}function Nr(e,t){let n=e[t];if(!Pr(n))throw P(`Runtime owner omitted the ${t} fact`);let r=Fr(n);if(r)return r;throw P(`Runtime owner returned an invalid ${t} fact`)}function Pr(e){return typeof e==`object`&&!!e&&`available`in e}function Fr(e){if(e.available===!0)return Object.freeze({available:!0});if(e.available===!1&&Lr(e.reason)&&(e.hint===void 0||typeof e.hint==`string`))return Object.freeze({available:!1,reason:e.reason,...e.hint===void 0?{}:{hint:e.hint}})}function Ir(e,t){let n=e[t];if(typeof n!=`function`)throw P(`Runtime owner advertised ${t} without an implementation`);return n}function Lr(e){return e===`unsupported-platform-leaf`||e===`unsupported-device-kind`||e===`unsupported-device-backend`||e===`unsupported-device-scope`||e===`unsupported-provider-mode`||e===`owner-capability-missing`}function Rr(t,n){return new e(`UNSUPPORTED_OPERATION`,`Runtime operation ${t} is unavailable`,{reason:n.reason,hint:n.hint})}function zr(e){return JSON.stringify({required:[...e.required].sort(),preferred:[...e.preferred].sort(),conditional:[...e.conditional??[]].sort()})}function Br(){return e=>{let t=Vr(e.required,`required`),n=Vr(e.preferred??[],`preferred`),r=Vr(e.conditional??[],`conditional`),i=[[`required`,t],[`preferred`,n],[`conditional`,r]];for(let e=0;e<i.length;e+=1){let t=i[e];if(t)for(let n of i.slice(e+1)){let e=n[1].find(e=>t[1].includes(e));if(e!==void 0)throw TypeError(`Runtime operation cannot be both ${t[0]} and ${n[0]}: ${e}`)}}return Object.freeze(r.length===0?{required:t,preferred:n}:{required:t,preferred:n,conditional:r})}}function Vr(e,t){let n=[...e];if(new Set(n).size!==n.length)throw TypeError(`Runtime use contains duplicate ${t} operations`);return Object.freeze(n)}const L=Br(),Hr=L({required:[`bootTarget`]}),Ur=L({required:[`bootTargetHeadless`]}),Wr=L({required:[`ensureReady`,`listApps`]}),Gr=L({required:[`captureSnapshot`]}),Kr=L({required:[`setViewport`]}),qr=L({required:[`focusPoint`]}),Jr=L({required:[`typeText`]}),Yr=L({required:[`back`]}),Xr=L({required:[`home`]}),Zr=L({required:[`setOrientation`]}),Qr=L({required:[`setFoldPose`]}),$r=L({required:[`tvRemote`]}),ei=L({required:[`keyboardStatus`]}),ti=L({required:[`keyboardDismiss`]}),ni=L({required:[`keyboardEnter`]}),ri=L({required:[`appSwitcher`]}),ii=L({required:[`actionButton`]}),ai=L({required:[`triggerAppEvent`]}),oi=L({required:[`setSetting`]}),si=L({required:[`readSetting`]}),ci=L({required:[`readAlert`]}),li=L({required:[`awaitAlert`]}),ui=L({required:[`acceptAlert`]}),di=L({required:[`dismissAlert`]}),fi=L({required:[`readClipboard`]}),pi=L({required:[`writeClipboard`]}),mi=L({required:[`perfFrames`]}),hi=L({required:[`perfMemorySample`]}),gi=L({required:[`perfMemorySnapshot`]}),_i=L({required:[`perfNativeCaptureStart`]}),vi=L({required:[`perfNativeCaptureReattach`,`perfNativeCaptureCleanup`]}),yi=L({required:[`perfProfileReport`]}),bi=Object.freeze([mi,hi,gi,_i,vi,yi]),R=L({required:[`tapPoint`]}),z=L({required:[`captureSnapshot`,`tapPoint`],preferred:[`tapRef`],conditional:[`tapElementSelector`]}),xi=L({required:[`longPressPoint`]}),Si=L({required:[`captureSnapshot`,`longPressPoint`]}),Ci=L({required:[`hoverPoint`]}),wi=L({required:[`captureSnapshot`,`hoverPoint`],preferred:[`hoverRef`]}),Ti=L({required:[`fillPoint`]}),Ei=L({required:[`captureSnapshot`,`fillPoint`],preferred:[`fillRef`]}),Di=Object.freeze([R,z]),Oi=Di,ki=Object.freeze([xi,Si]),Ai=Object.freeze([Ci,wi]),ji=Object.freeze([Ti,Ei]);function Mi(e,t){switch(e){case`click`:case`press`:return t?{kind:`captured-tap`,use:z}:{kind:`tap-point`,use:R};case`fill`:return t?{kind:`captured-fill`,use:Ei}:{kind:`fill-point`,use:Ti};case`longpress`:return t?{kind:`captured-long-press`,use:Si}:{kind:`long-press-point`,use:xi};case`hover`:return t?{kind:`captured-hover`,use:wi}:{kind:`hover-point`,use:Ci}}}const Ni=L({required:[`performGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Pi=L({required:[`performDirectionalFlingPlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Fi=L({required:[`performMultiTouchGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Ii=L({required:[`performTargetAuthoredDrag`,`captureSnapshot`],preferred:[`gestureViewport`]}),Li=L({required:[`gestureViewport`]}),Ri=L({required:[`scrollDirection`],conditional:[`captureSnapshot`]}),zi=L({required:[`scrollDirection`,`captureSnapshot`]}),Bi=Object.freeze({plan:Ni,"directional-fling":Pi,"multi-touch":Fi,"target-authored-drag":Ii}),Vi=Object.freeze([Ni,Pi,Fi,Ii]),Hi=Object.freeze([Ni]),Ui=Object.freeze([Ri,zi]);function Wi(e){return e.intent===`pan`?(`pointerCount`in e?e.pointerCount:1)===2:e.intent===`pinch`||e.intent===`rotate`||e.intent===`transform`}function Gi(e){return e.intent===`drag`?`target-authored-drag`:Wi(e)?`multi-touch`:e.intent===`fling`&&`direction`in e?`directional-fling`:`plan`}function Ki(e){let t=Gi(e);switch(t){case`plan`:return B(t);case`directional-fling`:return B(t);case`multi-touch`:return B(t);case`target-authored-drag`:return B(t)}}function B(e){let t=Bi[e];return Object.freeze({tier:e,operation:t.required[0],use:t})}function qi(e){return e.until===void 0?e.edge===void 0?Object.freeze({kind:`direction`,use:Ri}):Object.freeze({kind:`edge`,edge:e.edge,use:zi}):Object.freeze({kind:`until`,until:e.until,use:zi})}const Ji=L({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`]}),Yi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),Xi=L({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`,`captureSnapshotWithoutActiveApp`]}),Zi=L({required:[`captureSnapshot`]}),Qi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),$i=L({required:[`captureSnapshot`],preferred:[`readTextAtPoint`]}),ea=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],preferred:[`readTextAtPoint`]}),ta=L({required:[`captureSnapshot`],conditional:[`findText`]}),na=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],conditional:[`findText`]}),ra=Object.freeze([Zi,Qi]),ia=Object.freeze([$i,ea]),aa=L({required:[`captureSnapshot`,`focusPoint`]}),oa=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`]}),sa=L({required:[`captureSnapshot`,`focusPoint`,`typeText`]}),ca=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`,`typeText`]}),la=Object.freeze([$i,ea,Zi,Qi,aa,oa,sa,ca]),ua=Object.freeze([ta,na]),da=Object.freeze([Gr,Ji,Yi,Xi]),V=Object.freeze({"capture-only":ra,"element-text":ia,"wait-observation":ua,"find-focus":Object.freeze([aa,oa]),"find-type":Object.freeze([sa,ca])});function fa(e){return e===`focus`?`find-focus`:e===`type`?`find-type`:`capture-only`}function pa(e){switch(e.intent){case`capture-only`:return H(e.hasActiveApp,e.intent,V[e.intent]);case`element-text`:return H(e.hasActiveApp,e.intent,V[e.intent]);case`wait-observation`:return H(e.hasActiveApp,e.intent,V[e.intent]);case`find-focus`:return H(e.hasActiveApp,e.intent,V[e.intent]);case`find-type`:return H(e.hasActiveApp,e.intent,V[e.intent])}}function H(e,t,n){return Object.freeze(e?{kind:`selector-active-app`,intent:t,operation:`captureSnapshot`,use:n[0]}:{kind:`selector-without-active-app`,intent:t,operation:`captureSnapshotWithoutActiveApp`,use:n[1]})}function ma(e){return e.customActions?e.hasActiveApp?Object.freeze({kind:`custom-actions-active-app`,operation:`captureSnapshotWithCustomActions`,use:Ji}):Object.freeze({kind:`custom-actions-without-active-app`,operation:`captureSnapshotWithCustomActions`,use:Xi}):e.hasActiveApp?Object.freeze({kind:`active-app`,operation:`captureSnapshot`,use:Gr}):Object.freeze({kind:`without-active-app`,operation:`captureSnapshotWithoutActiveApp`,use:Yi})}const ha=L({required:[`captureScreenshot`]}),ga=L({required:[`captureScreenshot`,`captureSnapshot`]}),_a=Object.freeze([ha,ga]);function va(e){return e.cropOn?Object.freeze({kind:`capture-with-crop-on`,use:ga}):e.overlayRefs?Object.freeze({kind:`capture-with-overlay-refs`,use:ga}):Object.freeze({kind:`capture`,use:ha})}const ya=Object.freeze([Hr,Ur]),ba=Object.freeze({kind:`boot-target`,operation:`bootTarget`,use:Hr}),xa=Object.freeze({kind:`boot-target-headless`,operation:`bootTargetHeadless`,use:Ur});function Sa(e){return e.headless?xa:ba}const Ca=L({required:[`ensureReady`,`appState`]}),wa=Object.freeze([Ca]),Ta=L({required:[`shutdownTarget`]}),Ea=Object.freeze([fi,pi]),Da=Object.freeze([oi,si]),Oa=[`text-size`],ka=Object.freeze({kind:`write`,use:oi});function Aa(e){let t=ja(e?.[0]);return e?.length!==1||t===void 0?ka:Oa.includes(t)?Object.freeze({kind:`read`,setting:t,use:si}):ka}function ja(e){let t=e?.trim().toLowerCase();return Oa.find(e=>e===t)}const Ma=Object.freeze([ci,li,ui,di]),Na=Object.freeze([ei,ti,ni]),Pa=L({required:[`deployApp`]}),Fa=L({required:[`ensureReady`,`materializeAppSource`,`deployMaterializedApp`]}),Ia=L({required:[`ensureReady`,`sendPushNotification`]}),La=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`]}),Ra=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`]}),za=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`clearRuntimeHints`]}),Ba=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`,`clearRuntimeHints`]});function Va(e){return e.applyRuntimeHints&&e.clearRemovedRuntimeHints?Object.freeze({kind:`open-apply-and-clear-runtime-hints`,use:Ba}):e.applyRuntimeHints?Object.freeze({kind:`open-apply-runtime-hints`,use:Ra}):e.clearRemovedRuntimeHints?Object.freeze({kind:`open-clear-runtime-hints`,use:za}):Object.freeze({kind:`open`,use:La})}const Ha=Object.freeze([La,Ra,za,Ba]),Ua=L({required:[`closeApplication`,`finalizeApplicationClose`]}),Wa=L({required:[`closeApplication`,`finalizeApplicationClose`,`clearRuntimeHints`]}),Ga=Object.freeze([Ua,Wa]),Ka=L({required:[`finalizeApplicationClose`]}),qa=L({required:[`finalizeApplicationClose`,`clearRuntimeHints`]}),Ja=L({required:[`prepareAppleRunner`]}),Ya=L({required:[`clearRuntimeHints`]}),Xa=L({required:[`configureProviderPortReverse`]}),Za=Object.freeze([Ya,Xa]),U=L({required:[`appLogInspect`]}),Qa=L({required:[`appLogInspect`,`appLogDoctor`]}),$a=L({required:[`appLogInspect`,`appLogStart`]}),eo=L({required:[],preferred:[`appLogInspect`]}),to=Object.freeze([U,Qa,$a]);function no(t){let n=(t.action??`path`).toLowerCase();if(t.restart&&n!==`clear`)throw new e(`INVALID_ARGS`,`logs --restart is only supported with logs clear`);switch(n){case`path`:return Object.freeze({kind:`path`,requiresAppSession:!1,use:U});case`start`:return Object.freeze({kind:`start`,requiresAppSession:!0,use:$a});case`stop`:return Object.freeze({kind:`stop`,requiresAppSession:!1,use:U});case`doctor`:return Object.freeze({kind:`doctor`,requiresAppSession:!1,use:Qa});case`mark`:return Object.freeze({kind:`mark`,marker:t.marker??``,requiresAppSession:!1,use:U});case`clear`:return t.restart?Object.freeze({kind:`clear-restart`,requiresAppSession:!0,use:$a}):Object.freeze({kind:`clear`,requiresAppSession:!1,use:U});default:throw new e(`INVALID_ARGS`,`logs requires path, start, stop, doctor, mark, or clear`)}}const ro=L({required:[`audioProbeStart`]}),io=L({required:[`audioProbeReattach`,`audioProbeCleanup`]}),ao=L({required:[`audioProbeQuery`]}),oo=Object.freeze([ro,io,ao]);function so(e){if(e.mode===`query`)return Object.freeze({kind:`query`,action:e.probeAction,use:ao});switch(e.probeAction){case`start`:return Object.freeze({kind:`capture-start`,use:ro});case`status`:return Object.freeze({kind:`capture-status`});case`stop`:return Object.freeze({kind:`capture-stop`})}}const co=[`probe`],lo=[`start`,`status`,`stop`];function uo(t){let n=(t?.[0]??`probe`).toLowerCase();if(!co.includes(n))throw new e(`INVALID_ARGS`,`audio requires probe`);let r=(t?.[1]??`status`).toLowerCase();if(!lo.includes(r))throw new e(`INVALID_ARGS`,`audio probe requires ${lo.join(`, `)}`);if(r!==`start`&&t&&t.length>2)throw new e(`INVALID_ARGS`,`audio probe duration and bucket are only supported with audio probe start`);return Object.freeze({probeAction:r,durationMs:fo(t?.[2],{defaultValue:1e4,min:100,max:12e4,message:`audio probe duration must be an integer in range 100..120000 ms`}),bucketMs:fo(t?.[3],{defaultValue:1e3,min:100,max:1e4,message:`audio probe bucket must be an integer in range 100..10000 ms`})})}function fo(t,n){if(t===void 0)return n.defaultValue;let r=Number.parseInt(t,10);if(!Number.isInteger(r)||String(r)!==t||r<n.min||r>n.max)throw new e(`INVALID_ARGS`,n.message);return r}const po=L({required:[`networkDump`]}),mo=L({required:[],preferred:[`networkDump`]}),ho=[`dump`,`log`],go=[`summary`,`headers`,`body`,`all`];function _o(t){let n=(t.action??`dump`).toLowerCase(),r=(t.include??`summary`).toLowerCase();if(!vo(n))throw new e(`INVALID_ARGS`,`network requires dump or log`);if(!yo(r))throw new e(`INVALID_ARGS`,`network --include must be summary, headers, body, or all`);return Object.freeze({action:n,include:r,use:po})}function vo(e){return ho.some(t=>t===e)}function yo(e){return go.some(t=>t===e)}function bo(e){let t=new Map;for(let r of e){if(!n(r.family))throw TypeError(`Unknown platform family registration: ${String(r.family)}`);if(t.has(r.family))throw TypeError(`Duplicate platform family registration: ${r.family}`);t.set(r.family,xo(r))}let i=r.filter(e=>!t.has(e));if(i.length>0)throw TypeError(`Missing platform family registrations: ${i.join(`, `)}`);let a=Object.freeze([...r]),o=Object.freeze(a.map(e=>So(t,e)));return Object.freeze({families:a,modules:o,get:e=>So(t,e)})}function xo(e){return Object.freeze({...e})}function So(e,t){let n=e.get(t);if(!n)throw TypeError(`Missing platform family registration: ${t}`);return n}const Co=Object.freeze({kind:`device-inventory`});function wo(e){if(typeof e!=`object`||!e)throw jo();let t=e,n=Object.keys(t).sort();if(!(t.kind===`none`&&W(n,[`kind`]))&&!(t.kind===`host`&&W(n,[`kind`]))&&!(t.kind===`inventory`&&W(n,[`kind`,`use`])&&Eo(t.use))&&!(t.kind===`device-runtime`&&W(n,[`kind`,`use`])&&Do(t.use))&&!(t.kind===`device-runtime`&&(W(n,[`kind`,`uses`])||W(n,[`kind`,`selectUses`,`uses`])&&typeof t.selectUses==`function`)&&To(t.uses)))throw jo()}function To(e){if(!Array.isArray(e)||e.length===0||!e.every(Do))return!1;let t=e.map(zr);return new Set(t).size===t.length}function Eo(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.kind===`device-inventory`&&W(Object.keys(t).sort(),[`kind`])}function Do(e){if(typeof e!=`object`||!e)return!1;let t=e,n=[ko(t.required),ko(t.preferred),ko(t.conditional??[])];if(!Oo(n))return!1;let r=n.flat();return new Set(r).size===r.length&&W(Object.keys(t).sort(),t.conditional===void 0?[`preferred`,`required`]:[`conditional`,`preferred`,`required`])}function Oo(e){return e.every(e=>e!==null&&Ao(e))}function ko(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?e:null}function Ao(e){return new Set(e).size===e.length}function W(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function jo(){return TypeError(`Command platform execution must declare exactly one of none, host, inventory, or device-runtime`)}const Mo=L({required:[`screenRecordingStart`]}),No=L({required:[`screenRecordingReattach`,`screenRecordingCleanup`]}),Po=L({required:[]}),Fo=L({required:[],preferred:[`screenRecordingStart`]}),Io=Object.freeze([Mo,No]);function Lo(t){switch((t.action??``).toLowerCase()){case`start`:if(!Ro(t.scope??`app`))throw new e(`INVALID_ARGS`,`record scope must be app, device, or system`);return Object.freeze({kind:`start`,use:Mo});case`stop`:return t.hasLiveHandle===!0?Object.freeze({kind:`stop-live`,use:Po}):Object.freeze({kind:`stop-recovery`,use:No});default:throw new e(`INVALID_ARGS`,`record requires start or stop`)}}function Ro(e){return e===`app`||e===`device`||e===`system`}function zo(e){if(wo(e),e.kind!==`device-runtime`||!(`uses`in e))throw Bo();let t=e.uses.map(zr),n=Io.map(zr),r=new Set(t),i=new Set(n);if(t.length!==n.length||r.size!==t.length||[...r].some(e=>!i.has(e)))throw Bo()}function Bo(){return TypeError(`Record runtime execution must declare exactly the uses selected by its two runtime-bearing plans`)}function Vo(e){let t=e.platformExecution;if(t===void 0)throw TypeError(`Command descriptor "${e.name}" must declare platformExecution (none, host, inventory, or device-runtime); there is no registry-entry default`);return wo(t),t}const G={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0},K={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0,selectorValidationExempt:!0},Ho=()=>!0,Uo=e=>(e.positionals?.[0]??``).toLowerCase()===`start`,Wo=e=>e.command===`test`&&(typeof e.flags?.shardAll==`number`||typeof e.flags?.shardSplit==`number`),Go=e=>(e.positionals?.length??0)===0?{kind:`unconditional`}:void 0,Ko=e=>{let t=e.flags?.leaseProvider;return e.flags?.leaseId===void 0&&typeof t==`string`&&(e.flags?.platform===`android`||e.flags?.platform===`ios`)?{kind:`provider-app-catalog`,provider:t}:void 0},qo=new Set([`status`,`get`]),Jo=e=>is(e,qo,`status`),Yo=new Set([`get`,`wait`]),Xo=e=>is(e,Yo,`get`),Zo=e=>as(e,qo,`status`),Qo=e=>as(e,Yo,`get`),$o=e=>{try{return en(dn(e.positionals??[]).action)?`observes-app`:`mutates-app`}catch{return`mutates-app`}},es=e=>as(e,new Set([`read`]),``),ts=e=>Aa(e.positionals).kind===`read`,ns=e=>ts(e)?`observes-app`:`mutates-app`,rs=e=>ts(e)?`preserve`:`may-invalidate`;function is(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`preserve`:`may-invalidate`}function as(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`observes-app`:`mutates-app`}const q={kind:`none`},os={kind:`host`},J={recordsSessionAction:!0,recordingEffect:`mutates-app`,deviceClaimPolicy:`require-owner`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0},ss={targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},recordsSessionAction:!0,recordingEffect:`mutates-app`,deviceClaimPolicy:`require-owner`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0}},Y={...N,onTimeout:`preserve-daemon`},cs={...N,envelopeMs:18e4},ls={...N,onTimeout:`preserve-daemon`},us={...ls,envelopeMs:33e4},ds={...N,budget:{source:`flag`,envelope:`widen`,defaultBudgetMs:1e4},onTimeout:`preserve-daemon`},fs={fields:{count:{defaultValue:1,omitDefault:!0},intervalMs:{defaultValue:0,omitDefault:!0},holdMs:{defaultValue:0,omitDefault:!0},jitterPx:{defaultValue:0,omitDefault:!0},doubleTap:{defaultValue:!1,omitDefault:!0}}},ps={fields:{delayMs:{defaultValue:0}}};function X(e,t){return Sr(e)===void 0?t:ds}function Z(e){let t=Sr(e);if(t===void 0)throw Error(`Missing post-action observation descriptor support for ${e}`);return t}const ms={deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:Pa},timeoutPolicy:cs,batchable:!0},hs=e=>{let t=e.flags?.snapshotCustomActions===!0||e.input?.customActions===!0;return[!0,!1].map(e=>ma({customActions:t,hasActiveApp:e}).use)},gs=e=>{let t=vs(e);if(t===void 0||!_s(t))return la;let n=fa(t);return[!0,!1].map(e=>pa({hasActiveApp:e,intent:n}).use)};function _s(e){return en(e)||e===`focus`||e===`type`}function vs(e){if(e.positionals===void 0)return;let t=cn(e.positionals,e.flags);return t.ok?t.parsed.action:void 0}const ys=[{name:`human_control`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`humanControl`},recordsSessionAction:!1,daemon:{route:`humanControl`,refFrameEffect:`preserve`,selectorValidationExempt:!0,skipSessionlessProviderDevice:Ho},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`lease_allocate`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseAllocate`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...G},timeoutPolicy:us,batchable:!1,platformExecution:q},{name:`lease_heartbeat`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseHeartbeat`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...G},timeoutPolicy:ls,batchable:!1,platformExecution:q},{name:`lease_release`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseRelease`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...G},timeoutPolicy:ls,batchable:!1,platformExecution:q},{name:`artifacts`,deviceClaimPolicy:`none`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...G},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`session_list`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`sessionList`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,...K},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`session_save_script`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`sessionSaveScript`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`publication`},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`devices`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,...K},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`inventory`,use:Co}},{name:`capabilities`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0,...K},timeoutPolicy:N,batchable:!0,platformExecution:q},{name:`doctor`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,allowSessionlessDefaultDevice:Ho,...K},timeoutPolicy:N,batchable:!0,platformExecution:os},{name:`apps`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0,sessionlessLeaseAdmissionExemption:Ko},platformExecution:{kind:`device-runtime`,uses:[Wr]},timeoutPolicy:N,batchable:!0},{name:`boot`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`may-invalidate`,sessionKind:`state`},platformExecution:{kind:`device-runtime`,uses:ya},timeoutPolicy:{...N,budget:{source:`flag`,envelope:`margin`}},batchable:!0},{name:`shutdown`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`may-invalidate`,sessionKind:`state`},platformExecution:{kind:`device-runtime`,use:Ta},timeoutPolicy:N,batchable:!0},{name:`appstate`,deviceClaimPolicy:`observe`,catalog:{group:`public`,key:`appState`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`state`},platformExecution:{kind:`device-runtime`,uses:wa},timeoutPolicy:N,batchable:!0},{name:`perf`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:bi}},{name:`logs`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},platformExecution:{kind:`device-runtime`,uses:to},timeoutPolicy:N,batchable:!0},{name:`events`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`,allowInvalidRecording:!0,...K},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`network`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},platformExecution:{kind:`device-runtime`,use:po},timeoutPolicy:N,batchable:!0},{name:`audio`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:oo}},{name:`replay`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,sessionKind:`replay`,skipSessionlessProviderDevice:Wo,saveScriptFlagOwner:!0},timeoutPolicy:{...N,budget:{source:`flag`}},batchable:!1,platformExecution:q},{name:`test`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,sessionKind:`replay`,skipSessionlessProviderDevice:Wo},timeoutPolicy:{...N,envelopeMs:`unbounded`},batchable:!0,platformExecution:q},{name:`runtime`,deviceClaimPolicy:`require-owner`,catalog:{group:`internal`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!1,platformExecution:{kind:`device-runtime`,uses:[...Za,Li]}},{name:`clipboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:es,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ea}},{name:`keyboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:Zo,daemon:{route:`session`,refFrameEffect:Jo,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Na}},{name:`install`,...ms},{name:`reinstall`,...ms},{name:`install_source`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`internal`,key:`installSource`,servesPublicCommand:`install-from-source`},recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:Fa},timeoutPolicy:cs,batchable:!1},{name:`release_materialized_paths`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`releaseMaterializedPaths`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,...K},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`push`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:Ia},timeoutPolicy:N,batchable:!0},{name:`trigger-app-event`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`,key:`triggerAppEvent`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[ai]}},{name:`open`,deviceClaimPolicy:`acquire-session`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`,allowSessionlessDefaultDevice:Ho,saveScriptFlagOwner:!0},timeoutPolicy:{...N,budget:{source:`flag`,envelope:`margin`}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ha}},{name:`prepare`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:{budget:{source:`flag`,envelope:`margin`},envelopeMs:27e4,onTimeout:`reset-daemon`},batchable:!1,mcpExposed:!1,platformExecution:{kind:`device-runtime`,use:Ja}},{name:`batch`,deviceClaimPolicy:`none`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`close`,deviceClaimPolicy:`release-session`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`,allowInvalidRecording:!0,saveScriptFlagOwner:!0,sessionlessLeaseAdmissionExemption:Go},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ga}},{name:`snapshot`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`snapshot`,refFrameEffect:`preserve`},timeoutPolicy:{...Y,budget:{source:`flag`}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:da,selectUses:hs}},{name:`diff`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`snapshot`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:da,selectUses:hs}},{name:`wait`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,targetIdentityVerification:`post-resolution`,daemon:{route:`snapshot`,refFrameEffect:`preserve`},timeoutPolicy:{...Y,budget:{source:`positional-parser`,parser:cr}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:ua}},{name:`alert`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:Qo,daemon:{route:`snapshot`,refFrameEffect:Xo},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ma}},{name:`settings`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:ns,daemon:{route:`snapshot`,refFrameEffect:rs},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Da}},{name:`react-native`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`,key:`reactNative`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`reactNative`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[R]}},{name:`record`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`recordTrace`,refFrameEffect:`preserve`,allowInvalidRecording:!0,allowSessionlessDefaultDevice:Uo},platformExecution:{kind:`device-runtime`,uses:Io},timeoutPolicy:N,batchable:!0},{name:`trace`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`recordTrace`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:q},{name:`find`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:$o,daemon:{route:`find`,refFrameEffect:`may-invalidate`},timeoutPolicy:Y,batchable:!0,platformExecution:{kind:`device-runtime`,uses:la,selectUses:gs}},{name:`click`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:X(`click`,Y),postActionObservation:Z(`click`),targetReadiness:`budgeted`,responseDataTransform:fs,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Di}},{name:`fill`,...ss,frameworkTier:`core`,timeoutPolicy:X(`fill`,Y),postActionObservation:Z(`fill`),responseDataTransform:ps,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ji}},{name:`longpress`,...ss,catalog:{group:`public`,key:`longPress`},frameworkTier:`extended`,timeoutPolicy:{...ds,envelopeMs:21e4},postActionObservation:Z(`longpress`),targetReadiness:`budgeted`,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ki}},{name:`hover`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`},timeoutPolicy:X(`hover`,Y),postActionObservation:Z(`hover`),batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ai}},{name:`press`,...ss,frameworkTier:`core`,timeoutPolicy:X(`press`,Y),postActionObservation:Z(`press`),targetReadiness:`budgeted`,responseDataTransform:fs,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Oi}},{name:`type`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:X(`type`,Y),batchable:!0,platformExecution:{kind:`device-runtime`,uses:[Jr]}},{name:`get`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`interaction`,refFrameEffect:`preserve`},timeoutPolicy:X(`get`,Y),batchable:!0,platformExecution:{kind:`device-runtime`,uses:ia}},{name:`is`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`interaction`,refFrameEffect:`preserve`},timeoutPolicy:X(`is`,Y),batchable:!0,platformExecution:{kind:`device-runtime`,uses:ra}},{name:`back`,catalog:{group:`public`},frameworkTier:`core`,...J,timeoutPolicy:X(`back`,N),postActionObservation:Z(`back`),platformExecution:{kind:`device-runtime`,uses:[Yr]}},{name:`gesture`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,targetIdentityVerification:`pre-dispatch`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Vi}},{name:`home`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Xr]}},{name:`tv-remote`,catalog:{group:`public`,key:`tvRemote`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[$r]}},{name:`orientation`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Zr]}},{name:`fold`,catalog:{group:`public`},frameworkTier:`extended`,...J,timeoutPolicy:fr,platformExecution:{kind:`device-runtime`,uses:[Qr]}},{name:`scroll`,catalog:{group:`public`},frameworkTier:`core`,...J,timeoutPolicy:X(`scroll`,N),postActionObservation:Z(`scroll`),platformExecution:{kind:`device-runtime`,uses:Ui}},{name:`swipe`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Hi}},{name:`focus`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[qr]}},{name:`screenshot`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`generic`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:_a}},{name:`viewport`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!1,platformExecution:{kind:`device-runtime`,uses:[Kr]}},{name:`app-switcher`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`,key:`appSwitcher`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[ri]}},{name:`action-button`,catalog:{group:`public`,key:`actionButton`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[ii]}},{name:`install-from-source`,deviceClaimPolicy:`none`,catalog:{group:`public`,key:`installFromSource`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,platformExecution:{kind:`device-runtime`,use:Fa},timeoutPolicy:N,batchable:!0},{name:`debug`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`daemon`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:os},{name:`device`,deviceClaimPolicy:`observe`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`metro`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`session`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`cdp`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`auth`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`connect`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`connection`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`disconnect`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`mcp`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`proxy`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`takeover`,deviceClaimPolicy:`observe`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:{kind:`inventory`,use:Co}},{name:`react-devtools`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`,key:`reactDevtools`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`web`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:os}],bs=new Set([`public`,`local-cli`]),xs=new Set(ys.filter(e=>bs.has(ks(e))).map(e=>e.name)),Q=ys.map(e=>{let t=Vo(e);return e.name===`record`&&zo(t),{...e,mcpExposed:Ds(e),platformExecution:t}});function Ss(e){return Q.filter(t=>ks(t)===e).map(e=>[As(e),e.name])}function Cs(){return Q.filter(e=>Os(e)).map(e=>e.name).sort()}function ws(e){let t=Q.find(t=>t.name===e)?.platformExecution;if(t?.kind===`device-runtime`)return(`uses`in t?t.uses:[t.use]).map(e=>e.required)}function Ts(){return Q.filter(e=>e.catalog.group===`public`&&e.platformExecution.kind===`device-runtime`).map(e=>e.name).sort()}const $=new Map(Q.map(e=>[e.name,e]));function Es(e){return xs.has(e)}function Ds(e){return e.mcpExposed??xs.has(e.name)}function Os(e){return e.mcpExposed&&Es(e.name)}function ks(e){return e.catalog.group}function As(e){return e.catalog.key??e.name}const js=new Map(Array.from($.values(),e=>[e.name,e.targetReadiness?{...e.timeoutPolicy,targetReadiness:e.targetReadiness}:e.timeoutPolicy])),Ms=new Map(Q.map(e=>[e.name,e.deviceClaimPolicy])),Ns=new Map(Array.from($.values()).flatMap(e=>e.responseDataTransform?[[e.name,e.responseDataTransform]]:[]));function Ps(e){if(e!==void 0)return $.get(e)?.postActionObservation}function Fs(e){return Ps(e)!==void 0}function Is(e){return e!==void 0&&$.get(e)?.targetReadiness===`budgeted`}function Ls(e){return Ps(e)===`settle-and-verify`}function Rs(e){return e===void 0?N:js.get(e)??N}function zs(e){return e===void 0?`require-owner`:Ms.get(e)??`require-owner`}function Bs(e){if(e!==void 0)return Ns.get(e)}function Vs(e){return e===void 0?!1:$.get(e)?.recordsSessionAction??!1}function Hs(e){if(e!==void 0)return $.get(e)?.frameworkTier}function Us(e){return $.get(e)?.targetIdentityVerification}function Ws(e){let t=$.get(e.command);if(t?.recordsSessionAction)return typeof t.recordingEffect==`function`?t.recordingEffect(e):t.recordingEffect}function Gs(){return[...new Set(Array.from(Ns.values()).flatMap(e=>Object.keys(e.fields)))].sort()}const Ks={apps:{appsFilter:`user-installed`}};function qs(e,t){if(!e||!Es(e))return!1;let n=Ks[e];if(!n)return!1;let r=!1;for(let e of Object.keys(n))t[e]===void 0&&(t[e]=n[e],r=!0);return r}function Js(e){let t=[];for(let n of e)n.daemon&&t.push({command:n.name,...n.daemon,replayScopedAction:n.recordsSessionAction});return t}function Ys(e){return e.filter(e=>e.batchable).map(e=>e.name)}const Xs=Ys(Q),Zs=new Set([`batch`,`replay`]),Qs=[`command`,`positionals`,`input`,`flags`,`runtime`],$s=[`platform`,`target`,`device`,`udid`,`serial`,`verbose`,`out`],ec=`Session, daemon, connection, and host tooling commands are excluded from batch — they own lifecycle a batch cannot carry — and batch and replay never nest. Run an excluded command on its own; every other device command is available as a step.`,tc=new Set(Xs);function nc(e){return tc.has(e)}function rc(e){return typeof e==`string`?e.trim().toLowerCase():``}function ic(e){let t=rc(e);return nc(t)?t:void 0}function ac(t,n,r=ec){let i=ic(t);if(i!==void 0)return i;throw new e(`INVALID_ARGS`,`Batch step ${n} command is not available through command batch: ${String(t)}`,{hint:r})}function oc(t,n){if(Zs.has(t))throw new e(`INVALID_ARGS`,`Batch step ${n} cannot run ${t}.`)}export{ii as $,St as $n,l as $r,wr as $t,bo as A,Zt as An,Ce as Ar,gi as At,Wa as B,O as Bn,le as Br,ma as Bt,Vs as C,xn as Cn,x as Cr,ti as Ct,Lo as D,vn as Dn,he as Dr,Zr as Dt,Us as E,yn as En,g as Er,xi as Et,so as F,en as Fn,fe as Fr,Ki as Ft,Ba as G,It as Gn,ie as Gr,R as Gt,Ka as H,Rt as Hn,oe as Hr,si as Ht,eo as I,$t as In,pe as Ir,va as It,Ja as J,Ft as Jn,ee as Jr,Kr as Jt,Ra as K,Wt as Kn,re as Kr,$r as Kt,no as L,dn as Ln,m as Lr,qi as Lt,_o as M,sn as Mn,ve as Mr,_i as Mt,io as N,cn as Nn,h as Nr,yi as Nt,Fo as O,_n as On,Se as Or,mi as Ot,uo as P,tn as Pn,de as Pr,Sa as Pt,Ia as Q,ut as Qn,u as Qr,Mr as Qt,Ya as R,pn as Rn,p as Rr,pa as Rt,Ws as S,Mn as Sn,v as Sr,Ci as St,Rs as T,Cn as Tn,we as Tr,ei as Tt,qa as U,Jt as Un,ae as Ur,oi as Ut,Xa as V,Ht as Vn,se as Vr,Mi as Vt,La as W,Gt as Wn,ce as Wr,Ta as Wt,Pa as X,zt as Xn,te as Xr,Cr as Xt,Va as Y,Bt as Yn,c as Yr,kr as Yt,Fa as Z,Vt as Zn,f as Zr,Tr as Zt,Ss as _,Rn as _n,Ke as _r,fa as _t,oc as a,ur as an,S as ar,Ca as at,zs as b,Ln as bn,ke as br,Li as bt,ic as c,M as cn,it as cr,Yr as ct,Is as d,Jn as dn,nt as dr,Si as dt,a as ei,F as en,bt as er,ui as et,Q as f,Gn as fn,tt as fr,z as ft,Gs as g,In as gn,qe as gr,Ti as gt,Ls as h,Xn as hn,We as hr,L as ht,Xs as i,dr as in,C as ir,ai as it,mo as j,on as jn,ge as jr,vi as jt,No as k,Sn as kn,xe as kr,hi as kt,Js as l,Yn as ln,$e as lr,Ei as lt,Fs as m,Kn as mn,rt as mr,pi as mt,Qs as n,Dr as nn,Tt as nr,ci as nt,rc as o,pr as on,at as or,ri as ot,ws as p,qn as pn,et as pr,fi as pt,za as q,Ut as qn,d as qr,Jr as qt,$s as r,P as rn,yt as rr,li as rt,ac as s,Qn as sn,st as sr,Wr as st,ec as t,Er as tn,Ct as tr,di as tt,qs as u,Bn as un,Qe as ur,wi as ut,Cs as v,Nn as vn,De as vr,qr as vt,Bs as w,bn as wn,y as wr,ni as wt,Hs as x,jn as xn,b as xr,Xr as xt,Ts as y,Fn as yn,je as yr,Qr as yt,Ua as z,Yt as zn,ue as zr,Aa as zt};
|
|
1
|
+
import{P as e,S as t,b as n}from"./sdk-contracts.js";import{g as r,r as i}from"./sdk-device.js";function a(e,t){return{ok:!1,code:`INVALID_ARGS`,message:e,...t?{hint:t}:{}}}const o=[`visible`,`hidden`,`exists`,`absent`,`editable`,`selected`,`focused`,`text`],s={x:-Number.MAX_VALUE/2,y:-Number.MAX_VALUE/2,width:Number.MAX_VALUE,height:Number.MAX_VALUE};function c(e){return e.x===s.x&&e.y===s.y&&e.width===s.width&&e.height===s.height}function l(e){if(!e)return!1;let{x:t,y:n,width:r,height:i}=e;return![t,n,r,i].every(Number.isFinite)||!Number.isFinite(t+r)||!Number.isFinite(n+i)||r<=0||i<=0?!1:!c(e)}function u(e,t){return e>=s.width||t>=s.height}function d(e){if(l(e)&&!u(e.width,e.height))return{width:e.width,height:e.height}}function ee(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let{x:t,y:n,width:r,height:i}=e;if(typeof r==`number`&&typeof i==`number`&&(t===void 0||typeof t==`number`)&&(n===void 0||typeof n==`number`))return d({x:t??0,y:n??0,width:r,height:i})}function te(e,t){return t.x>=e.x&&t.y>=e.y&&t.x+t.width<=e.x+e.width&&t.y+t.height<=e.y+e.height}function ne(e){return e.width*e.height}function re(e,t,n){return t>=e.x&&t<=e.x+e.width&&n>=e.y&&n<=e.y+e.height}function ie(e,t,n){if(!e||!l(t))return!1;let r=t.x+t.width/2,i=t.y+t.height/2;return r>=n.x&&r<n.x+n.width&&i>=n.y&&i<n.y+n.height}function f(e){let t=null,n=-1;for(let r of e){let e=r.width*r.height;e>n&&(t=r,n=e)}return t}function ae(e,t){return oe(e.x,e.x+e.width,t.x,t.x+t.width)&&oe(e.y,e.y+e.height,t.y,t.y+t.height)}function oe(e,t,n,r){return Math.max(e,n)<=Math.min(t,r)}function se(e){let t=`${e??``}`.toLowerCase();return t.includes(`scroll`)||t.includes(`recyclerview`)||t.includes(`listview`)||t.includes(`gridview`)||t.includes(`collectionview`)||t===`table`}function ce(e){return se(e.type)?!0:`${e.role??``} ${e.subrole??``}`.toLowerCase().includes(`scroll`)}function le(e){return e?.trim().toLowerCase()||null}function ue(e,t){let n=le(t);return n?[e.label,e.value,e.identifier].some(e=>(e??``).toLowerCase().includes(n)):!1}function de(e,t,n=()=>!0){if(!le(t))return null;for(let[r,i]of e.entries()){if(!ue(i,t))continue;let a=i.depth??0,o=r+1;for(;o<e.length&&(e[o]?.depth??0)>a;)o+=1;let s={start:r,end:o};if(n(s))return s}return null}function fe(e,t=0){let n=new Map;for(let[t,r]of e.entries())n.set(r.index,t);return e.map((e,r)=>({...e,index:r,depth:Math.max(0,(e.depth??0)-t),parentIndex:typeof e.parentIndex==`number`?n.get(e.parentIndex):void 0}))}function pe(e){return new Map(e.map(e=>[e.index,e]))}function me(e,t,n,r){let i=t,a=new Set;for(;typeof i.parentIndex==`number`&&!a.has(i.index);){if(a.add(i.index),i=n.get(i.parentIndex)??e[i.parentIndex],!i)return null;let t=r(i);if(t!==null)return t}return null}function he(e,t,n){return me(e,t,pe(e),e=>n(e)?e:null)}function p(e){let t=e.trim().replaceAll(/XCUIElementType/gi,``).replace(/^AX/,``).toLowerCase(),n=Math.max(t.lastIndexOf(`.`),t.lastIndexOf(`/`));return n!==-1&&(t=t.slice(n+1)),t}function ge(e,t){let n=p(e);return n?t===`android`?n.includes(`edittext`)||n.includes(`autocompletetextview`):n.includes(`textfield`)||n.includes(`securetextfield`)||n.includes(`searchfield`)||n.includes(`textview`)||n.includes(`textarea`)||n===`search`:!0}function _e(e){let t=e.trim();return!(!t||/^(true|false)$/i.test(t)||/^\d+$/.test(t))}function ve(e){if(typeof e!=`string`)return!1;let t=e.trim();return t?!/^(true|false)$/i.test(t):!1}function m(e){return[e.label,e.value,e.identifier].map(e=>typeof e==`string`?e.trim():``).filter(e=>e.length>0)[0]??``}const ye=Symbol(`SnapshotVisibility`);function be(e,t={}){let n,r,i=()=>(n||(n=pe(e),t.onNodeMapBuilt?.()),n),a=()=>(r||(r=Se(e),t.onViewportRectsCollected?.()),r),o=n=>h(e,n,a(),t.onContainingRectFallback),s=n=>{let r=Ee(n,i(),e=>!!e.rect)?.rect;if(r)return r;let o=a();return o.length===0?null:h(e,n.rect??{x:0,y:0,width:0,height:0},o,t.onContainingRectFallback)},c=e=>{if(!e.rect)return!0;let t=s(e);return!t||ae(e.rect,t)},l=e=>e.rect?c(e)?Te(e.rect,o(e.rect)):!1:!0;return{[ye]:!0,get nodeByIndex(){return i()},get viewportRects(){return a()},findAncestor(t,n){return me(e,t,i(),n)},isVisibleInEffectiveViewport:c,isVisibleOnScreen:l,resolveEffectiveViewport:s,resolveViewport:o}}function xe(e){let t=[e.type,e.role,e.subrole].map(e=>p(e??``)).join(` `);return t.includes(`application`)||t.includes(`window`)}function Se(e){return e.flatMap(e=>xe(e)&&l(e.rect)?[e.rect]:[])}function Ce(e,t,n){return h(e,t,n??Se(e))}function h(e,t,r,i){let a=n(t),o=e=>re(e,a.x,a.y);return(f(r.filter(o))??f(r))||(i?.(),f(e.flatMap(e=>we(e.rect)&&o(e.rect)?[e.rect]:[])))}function we(e){return e?Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.width)&&Number.isFinite(e.height):!1}function Te(e,t){return!t||t.width<=0||t.height<=0||re(t,e.x+e.width/2,e.y+e.height/2)}function Ee(e,t,n=()=>!0){let r=typeof e.parentIndex==`number`?t.get(e.parentIndex):void 0,i=new Set;for(;r&&!i.has(r.index);){if(i.add(r.index),n(r)&&ce(r))return r;r=typeof r.parentIndex==`number`?t.get(r.parentIndex):void 0}return null}function De(e,t){if(t===`android`&&e.visibleToUser===!1)return!1;let n=p(e.type??``);return n.includes(`application`)||n.includes(`window`)||n.includes(`scrollview`)||n.includes(`tableview`)||n.includes(`collectionview`)||n===`table`||n===`list`||n===`listview`?!1:t===`android`?e.hittable===!0&&l(e.rect):e.hittable===!0||l(e.rect)}function g(e){return e.hittable===!0?!0:e.rect?e.rect.width>0&&e.rect.height>0:!1}function Oe(e,t){return ge(e.type??``,t)&&e.enabled!==!1}function ke(e){let n=e.kind??t(e.type??`Element`),r=p(e.type??``);return r&&r!==n?[n,r]:[n]}const Ae=new Set([`id`,`role`,`text`,`label`,`value`,`appname`,`windowtitle`]),je=new Set([`visible`,`hidden`,`editable`,`selected`,`focused`,`enabled`,`hittable`]),_=new Set([...Ae,...je]),Me=[..._],Ne=new Set(`button.imagebutton.link.cell.statictext.checkedtextview.textfield.textbox.edittext.textarea.switch.slider.image.imageview.webview.framelayout.linearlayout.relativelayout.constraintlayout.viewgroup.view.listview.recyclerview.collectionview.list.searchfield.segmentedcontrol.group.window.checkbox.radio.menuitem.toolbar.scrollarea.scrollview.nestedscrollview.table.application.navigationbar.tabbar.tab.alert.dialog.header`.split(`.`));function Pe(e){return Ne.has(e.trim().toLowerCase())}const Fe=new Map([[`"`,`"`],[`'`,`'`],[`\\`,`\\`],[`/`,`/`],[`b`,`\b`],[`f`,`\f`],[`n`,`
|
|
2
|
+
`],[`r`,`\r`],[`t`,` `]]);function v(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Selector expression cannot be empty`);let r=ze(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Selector expression cannot be empty`);return{raw:n,selectors:r.map(e=>Le(e))}}function y(e){try{return v(e)}catch{return null}}function b(e){let t=e.trim();if(!t)return!1;if(t===`||`)return!0;let n=t.indexOf(`=`);if(n!==-1){let e=t.slice(0,n).trim().toLowerCase();return _.has(e)}return _.has(t.toLowerCase())}function Ie(e){let t=e.trim(),n=t.indexOf(`=`);if(n===-1)return null;let r=t.slice(0,n).trim().toLowerCase();if(!r||_.has(r))return null;let i=t.slice(n+1).trim();if(!i)return null;let a=S(i).trim();return a?{key:r,value:a}:null}function x(e,t={}){if(e.length===0)return null;let n=t.preferTrailingValue??!1,r=0,i=[];for(;r<e.length;){let t=e[r];if(t===void 0||!b(t))break;r+=1;let n=e.slice(0,r).join(` `).trim();n&&y(n)&&i.push(r)}if(i.length===0)return null;let a=i.at(-1);if(a===void 0)return null;let o=a;if(n)for(let t=i.length-1;t>=0;--t){let n=i[t];if(n!==void 0&&n<e.length){o=n;break}}let s=e.slice(0,o).join(` `).trim();return s?{selectorExpression:s,rest:e.slice(o)}:null}function Le(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Selector segment cannot be empty`);let r=Be(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Invalid selector segment: ${t}`);return{raw:n,terms:r.map(Re)}}function Re(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Empty selector term`);let r=n.indexOf(`=`);if(r===-1){let r=n.toLowerCase();if(!je.has(r))throw new e(`INVALID_ARGS`,`Invalid selector term "${t}", expected key=value`);return{key:r,value:!0}}let i=n.slice(0,r).trim().toLowerCase(),a=n.slice(r+1).trim();if(!_.has(i))throw new e(`INVALID_ARGS`,`Unknown selector key: ${i}`);if(!a)throw new e(`INVALID_ARGS`,`Missing selector value for key: ${i}`);if(je.has(i)){let t=We(a);if(t===null)throw new e(`INVALID_ARGS`,`Invalid boolean value for ${i}: ${a}`);return{key:i,value:t}}return{key:i,value:S(a)}}function ze(t){let n=[],r=``,i=null;for(let a=0;a<t.length;a+=1){let o=t[a];if((o===`"`||o===`'`)&&!Ge(t,a)){i=Ve(i,o),r+=o;continue}if(!i&&o===`|`&&t[a+1]===`|`){let i=r.trim();if(!i)throw new e(`INVALID_ARGS`,`Invalid selector fallback expression: ${t}`);n.push(i),r=``,a+=1;continue}r+=o}let a=r.trim();if(!a)throw new e(`INVALID_ARGS`,`Invalid selector fallback expression: ${t}`);return n.push(a),n}function Be(t){let n=[],r=``,i=null;for(let e=0;e<t.length;e+=1){let a=t.charAt(e);if((a===`"`||a===`'`)&&!Ge(t,e)){i=Ve(i,a),r+=a;continue}if(!i&&/\s/.test(a)){r.trim()&&n.push(r.trim()),r=``;continue}r+=a}if(i)throw new e(`INVALID_ARGS`,`Unclosed quote in selector: ${t}`);return r.trim()&&n.push(r.trim()),n}function Ve(e,t){return e?e===t?null:e:t}function S(e){let t=e.trim();return t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?He(t.slice(1,-1)):t}function He(e){let t=``,n=0;for(;n<e.length;){let r=e.charAt(n);if(r!==`\\`){t+=r,n+=1;continue}let i=e.charAt(n+1);if(!i){t+=r,n+=1;continue}let a=Ue(i);if(a!==null){t+=a,n+=2;continue}if(i===`u`){let r=e.slice(n+2,n+6);if(/^[0-9a-fA-F]{4}$/.test(r)){t+=String.fromCharCode(Number.parseInt(r,16)),n+=6;continue}}t+=r,n+=1}return t}function Ue(e){return Fe.get(e)??null}function We(e){let t=S(e).toLowerCase();return t===`true`||t!==`false`&&null}function Ge(e,t){let n=0;for(let r=t-1;r>=0&&e[r]===`\\`;--r)n+=1;return n%2==1}function C(e){return o.includes(e)}const Ke=`is requires predicate: ${o.join(`|`)}`;function qe(e){let t=e.toLowerCase();return C(t)?{ok:!0,predicate:t}:a(Ke,Je)}const Je=`Use "is <predicate> <selector>" or "is <selector> <predicate>". visible|hidden|editable|selected|focused double as selector keys: a bare predicate token after the selector is read as the predicate, so write key=true (e.g. visible=true) inside the selector to use it as a filter instead.`;function Ye(e){if(C((e[0]??``).toLowerCase()))return e;for(let t=1;t<e.length;t+=1){let n=(e[t]??``).toLowerCase();if(C(n)&&y(e.slice(0,t).join(` `)))return[n,...e.slice(0,t),...e.slice(t+1)]}return e}function Xe(e){let{predicate:t,node:n,visibility:r,expectedText:i,platform:a}=e,o=m(n),s=Oe(n,a),c=n.selected===!0,l=n.focused===!0,u=t===`text`?g(n):Qe(n,r,a),d=!1;switch(t){case`visible`:d=u;break;case`hidden`:d=!u;break;case`editable`:d=s;break;case`selected`:d=c;break;case`focused`:d=l;break;case`text`:d=o===(i??``);break;default:return Ze(t)}let ee=t===`text`?`expected="${i??``}" actual="${o}"`:`actual=${JSON.stringify({visible:u,editable:s,selected:c,focused:l})}`;return{pass:d,actualText:o,details:ee}}function Ze(e){throw Error(`Unhandled is predicate: ${String(e)}`)}function Qe(e,t,n){if(n===`android`&&e.visibleToUser===!1)return!1;if(l(e.rect))return t.isVisibleInEffectiveViewport(e);if(e.rect)return!1;if(n!==`android`&&e.hittable===!0)return!0;let r=$e(e,t,n);return r?l(r.rect)?t.isVisibleInEffectiveViewport(r):n!==`android`&&r.hittable===!0:!1}function $e(e,t,n){return t.findAncestor(e,e=>De(e,n)?e:null)}function et(e){let t=Ye(e),n=t[0]??``;return{predicate:n,split:x(t.slice(1),{preferTrailingValue:n===`text`})}}const tt=`is requires a selector expression`,nt=`is text requires expected text value`;function rt(e){let{predicate:t,split:n}=et([...e]),r=qe(t);if(!r.ok)return r;if(!n)return a(tt);let i=n.rest.join(` `).trim();return r.predicate===`text`&&!i?a(nt):r.predicate!==`text`&&n.rest.length>0?a(`is ${r.predicate} does not accept trailing values`):{ok:!0,predicate:r.predicate,selectorExpression:n.selectorExpression,expectedText:i}}function it(e){return e===`text`||e===`attrs`?{ok:!0,format:e}:a(`get only supports text or attrs`)}function at(e){let t=e[0];if(t?.startsWith(`@`)){let n=e.slice(1).join(` `).trim();return{ok:!0,ref:t,...n?{label:n}:{}}}let n=e.join(` `).trim();return n?{ok:!0,selector:n}:a(`get requires @ref or selector expression`)}function ot(e){return e?{ok:!0,text:e}:a(`wait requires text`)}function st(e){return Array.from(new Set(e))}function ct(e){return JSON.stringify(lt(e))}function lt(e){if(Array.isArray(e))return e.map(lt);if(!e||typeof e!=`object`)return e;let t=e;return Object.fromEntries(Object.keys(t).sort().map(e=>[e,lt(t[e])]))}function ut(e){let t=0,n=e.length;for(;t<n&&e[t]===`-`;)t+=1;for(;n>t&&e[n-1]===`-`;)--n;return e.slice(t,n)}const dt=/^#\s*agent-device:target-v(\d+)(?:\s+(\S.*))?$/,ft=/^#\s*agent-device:targets-v(\d+)(?:\s+(\S.*))?$/,pt=4096;function mt(e){return e.normalize(`NFC`)}function ht(e){if(e===void 0)return;let t=mt(e);return t.length>0?t:void 0}function gt(e){return mt(e)}function _t(e){if(e===void 0)return;let t=mt(e).trim().replaceAll(/\s+/g,` `);return t.length>0?t:void 0}function w(e){return Buffer.byteLength(e,`utf8`)}function T(e,t){if(w(e)<=t)return e;let n=e.length;for(;n>0&&w(e.slice(0,n))>t;)--n;if(n>0){let t=e.charCodeAt(n-1);t>=55296&&t<=56319&&--n}return e.slice(0,n)}function vt(e){let t={};return e.id!==void 0&&(t.id=e.id),t.role=e.role,e.label!==void 0&&(t.label=e.label),t.ancestry=e.ancestry.map(yt),t.sibling=e.sibling,t.viewportOrder=e.viewportOrder,e.scrollRegion&&(t.scrollRegion=bt(e.scrollRegion)),e.rect&&(t.rect=xt(e.rect)),t.verification=e.verification,t}function yt(e){let t={role:e.role};return e.label!==void 0&&(t.label=e.label),t}function bt(e){let t={role:e.role};return e.id!==void 0&&(t.id=e.id),e.label!==void 0&&(t.label=e.label),t}function xt(e){return{x:e.x,y:e.y,width:e.width,height:e.height}}function St(e){return JSON.stringify(vt(e))}function Ct(e){return`# agent-device:target-v1 ${St(e)}`}function wt(e){return JSON.stringify({source:vt(e.source),destination:vt(e.destination)})}function Tt(e){return`# agent-device:targets-v1 ${wt(e)}`}function Et(e){let t=e.trim(),n=ft.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:Dt((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function Dt(t){if(w(t)>8320)throw new e(`INVALID_ARGS`,`targets-v1 annotation exceeds the 8320-byte payload cap.`);let n;try{n=JSON.parse(t)}catch{throw new e(`INVALID_ARGS`,`targets-v1 annotation is not valid JSON.`)}if(typeof n!=`object`||!n||Array.isArray(n))throw new e(`INVALID_ARGS`,`targets-v1 annotation must be a JSON object.`);let r=n;if(r.source===void 0||r.destination===void 0)throw new e(`INVALID_ARGS`,`targets-v1 annotation requires source and destination evidence.`);return{source:kt(JSON.stringify(r.source)),destination:kt(JSON.stringify(r.destination))}}function Ot(e){let t=e.trim();if(!t.startsWith(`#`))return{kind:`none`};let n=dt.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:kt((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function kt(t){if(w(t)>4096)throw new e(`INVALID_ARGS`,`target-v1 annotation exceeds the ${pt}-byte payload cap.`);let n;try{n=JSON.parse(t)}catch{throw new e(`INVALID_ARGS`,`target-v1 annotation is not valid JSON.`)}if(typeof n!=`object`||!n||Array.isArray(n))throw new e(`INVALID_ARGS`,`target-v1 annotation must be a JSON object.`);let r=n,i=At(r.role,`role`),a=jt(r.id,`id`),o=Mt(r.label,`label`),s=Pt(r.ancestry),c=It(r.sibling,`sibling`,0),l=It(r.viewportOrder,`viewportOrder`,0),u=Lt(r.scrollRegion),d=Rt(r.rect),ee=zt(r.verification);return{...a===void 0?{}:{id:a},role:i,...o===void 0?{}:{label:o},ancestry:s,sibling:c,viewportOrder:l,...u?{scrollRegion:u}:{},...d?{rect:d}:{},verification:ee}}function At(t,n){if(t===void 0)throw new e(`INVALID_ARGS`,`target-v1 "${n}" is required.`);if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);return Nt(gt(t),n)}function jt(t,n){if(t===void 0)return;if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);let r=ht(t);return r===void 0?void 0:Nt(r,n)}function Mt(t,n){if(t===void 0)return;if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);let r=_t(t);return r===void 0?void 0:Nt(r,n)}function Nt(t,n){if(w(t)>256)throw new e(`INVALID_ARGS`,`target-v1 "${n}" exceeds the 256-byte field cap.`);return t}function Pt(t){if(t===void 0)return[];if(!Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "ancestry" must be an array.`);if(t.length>8)throw new e(`INVALID_ARGS`,`target-v1 "ancestry" exceeds the 8-entry cap.`);return t.map((e,t)=>Ft(e,t))}function Ft(t,n){if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "ancestry[${n}]" must be an object.`);let r=t,i=At(r.role,`ancestry[${n}].role`),a=Mt(r.label,`ancestry[${n}].label`);return{role:i,...a===void 0?{}:{label:a}}}function It(t,n,r){if(t===void 0)return r;if(typeof t!=`number`||!Number.isSafeInteger(t)||t<0)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a non-negative integer.`);return t}function Lt(t){if(t===void 0)return;if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "scrollRegion" must be an object.`);let n=t,r=At(n.role,`scrollRegion.role`),i=jt(n.id,`id`),a=Mt(n.label,`scrollRegion.label`);return{role:r,...i===void 0?{}:{id:i},...a===void 0?{}:{label:a}}}function Rt(t){if(t===void 0)return;if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "rect" must be an object.`);let n=t;return{x:E(n.x,`rect.x`),y:E(n.y,`rect.y`),width:E(n.width,`rect.width`),height:E(n.height,`rect.height`)}}function E(t,n){if(typeof t!=`number`||!Number.isFinite(t))throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a finite number.`);return t}function zt(t){if(t===`verified`||t===`unverifiable`)return t;throw new e(`INVALID_ARGS`,`target-v1 "verification" must be "verified" or "unverifiable".`)}function Bt(e){let t=gt(p(e.type??``)),n=ht(e.identifier),r=_t(e.label);return{...n===void 0?{}:{id:T(n,256)},role:T(t,256),...r===void 0?{}:{label:T(r,256)}}}function Vt(e,t){return e.id===t.id&&e.role===t.role&&e.label===t.label}function Ht(e,t){let n=0;for(let r of e)Bt(r).id===t&&(n+=1);return n}function Ut(e,t){if(e.id===void 0||Ht(t,e.id)<=1)return e;let{role:n,label:r}=e;return{role:n,...r===void 0?{}:{label:r}}}function Wt(e,t){let n=0;for(let r of e)if(r.parentIndex===t.parentIndex){if(r.index===t.index)return n;n+=1}return 0}function Gt(e,t){return{documentOrder:e.index,sibling:Wt(t,e)}}function Kt(e,t){return e.documentOrder===t.documentOrder&&e.sibling===t.sibling}function qt(e){return{...e.id===void 0?{}:{id:e.id},role:e.role,...e.label===void 0?{}:{label:e.label}}}function Jt(e,t){return t.id===void 0?e.role===t.role&&e.label===t.label:e.id===t.id}function Yt(e,t){if(e.length<t.length)return!1;for(let[n,r]of t.entries()){let t=e[n];if(!t||t.role!==r.role||r.label!==void 0&&t.label!==r.label)return!1}return!0}function Xt(e,t){let n=[];return e.id!==t.id&&n.push(`id: recorded=${e.id??`(none)`} observed=${t.id??`(none)`}`),e.role!==t.role&&n.push(`role: recorded=${e.role} observed=${t.role}`),e.label!==t.label&&n.push(`label: recorded=${e.label??`(none)`} observed=${t.label??`(none)`}`),n}function Zt(e){return e?`${e.role}${e.label?`/${e.label}`:``}`:`(missing)`}function Qt(e,t){return!t||t.role!==e.role||e.label!==void 0&&t.label!==e.label}function $t(e,t){for(let[n,r]of e.entries()){let e=t[n];if(Qt(r,e))return[`ancestry[${n}]: recorded=${Zt(r)} observed=${Zt(e)}`]}return[]}function en(e,t,n={}){let r=[],i=p(e.type??``),a=tn(e,n.nodes),o=O(e.label),s=O(e.value),c=O(m(e)),l=n.action===`fill`;a&&r.push(`id=${D(a)}`),i&&o&&r.push(l?`role=${D(i)} label=${D(o)} editable=true`:`role=${D(i)} label=${D(o)}`),o&&r.push(l?`label=${D(o)} editable=true`:`label=${D(o)}`),s&&r.push(l?`value=${D(s)} editable=true`:`value=${D(s)}`),c&&c!==o&&c!==s&&r.push(l?`text=${D(c)} editable=true`:`text=${D(c)}`),i&&l&&!r.some(e=>e.includes(`editable=true`))&&r.push(`role=${D(i)} editable=true`);let u=st(r);return u.length===0&&i&&u.push(l?`role=${D(i)} editable=true`:`role=${D(i)}`),u.length===0&&g(e)&&u.push(`visible=true`),u}function tn(e,t){let n=O(e.identifier);if(!n||!t)return n;let r=Bt(e).id;return r===void 0?n:Ht(t,r)>1?null:n}function D(e){return JSON.stringify(e)}function O(e){return e&&e.trim()||null}const nn=[`any`,`text`,`label`,`value`,`role`,`id`],rn=[`text`,`label`,`value`,`role`,`id`];function an(e){let t=e?.toLowerCase();return t===`press`||t===`tap`?`click`:t}function on(e){return e===`exists`||e===`wait`||e===`get_text`||e===`get_attrs`||e===`list`}function sn(e,t,n,r={}){let i=A(n);if(!i)return{matches:[],score:0};let a=0,o=[];for(let n of e){if(r.requireRect&&!n.rect)continue;let e=cn(n,t,i);if(!(e<=0)){if(e>a){a=e,o.length=0,o.push(n);continue}e===a&&o.push(n)}}return{matches:o,score:a}}function cn(e,t,n){switch(t){case`role`:return ln(e,n);case`label`:return k(e.label,n);case`value`:return k(e.value,n);case`id`:return k(e.identifier,n);default:return Math.max(k(e.label,n),k(e.value,n),k(e.identifier,n))}}function k(e,t){let n=A(e??``);return n?n===t?2:+!!n.includes(t):0}function ln(e,t){let n=ke(e);return n.some(e=>A(e)===t)?2:+!!n.some(e=>un(e).includes(t))}function un(e){let t=e.lastIndexOf(`.`);return t===-1?e:e.slice(t+1)}function A(e){return e.trim().toLowerCase().replaceAll(/\s+/g,` `)}const dn=`find requires a value`,fn=`find actions: click (default; press/tap are aliases), list, focus, fill, type, exists, wait, get text, get attrs — there is no longpress/swipe find action. Run find "<text>" list to inspect every match with its @ref without acting, then dispatch the gesture on the chosen ref, e.g. longpress @eNN.`;function pn(e,t){if(e.length===0)return{ok:!1,code:`INVALID_ARGS`,message:`find requires a locator or text`};let n=gn([...e]);return n.query?t?.findFirst&&t?.findLast?{ok:!1,code:`INVALID_ARGS`,message:`find accepts only one of --first or --last`}:{ok:!0,parsed:n}:{ok:!1,code:`INVALID_ARGS`,message:dn}}const mn=[`exists`,`list`,`click`,`focus`];function hn(e){return mn.includes(e)}function gn(t){let n=`any`,r=0;rn.includes(t[0])&&(n=t[0],r=1);let i=t[r]??``,a=t.slice(r+1);if(a.length===0)return{locator:n,query:i,action:`click`};let o=an(a[0]);if(hn(o))return{locator:n,query:i,action:o};if(o===`get`)return{locator:n,query:i,action:_n(a[1])};if(o===`wait`){let e=yn(a[1]);return{locator:n,query:i,action:`wait`,timeoutMs:e??void 0}}if(o===`fill`||o===`type`){let e=a.slice(1);return{locator:n,query:i,action:o,value:e.length===0?void 0:e.join(` `)}}throw new e(`INVALID_ARGS`,`Unsupported find action: ${a[0]}`,{hint:fn})}function _n(t){let n=t?.toLowerCase();if(n===`text`)return`get_text`;if(n===`attrs`)return`get_attrs`;throw new e(`INVALID_ARGS`,`find get only supports text or attrs`)}function vn(e,t){return e!==`any`||!t.includes(`=`)&&!t.includes(`||`)?null:y(t)?t:null}function yn(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}function bn(e,t,n){return t.terms.every(t=>xn(e,t,n))}function xn(e,t,n){switch(t.key){case`id`:return j(e.identifier,String(t.value));case`role`:return Sn(e,String(t.value));case`label`:return j(e.label,String(t.value));case`value`:return j(e.value,String(t.value));case`text`:return j(m(e),String(t.value));case`appname`:return j(e.appName,String(t.value));case`windowtitle`:return j(e.windowTitle,String(t.value));case`visible`:return g(e)===!!t.value;case`hidden`:return!g(e)==!!t.value;case`editable`:return Oe(e,n)===!!t.value;case`selected`:return e.selected===!0==!!t.value;case`focused`:return e.focused===!0==!!t.value;case`enabled`:return e.enabled!==!1==!!t.value;case`hittable`:return e.hittable===!0==!!t.value;default:return!1}}function j(e,t){return A(e??``)===A(t)}function Sn(e,t){let n=A(t);return ke(e).some(e=>A(e)===n)}function Cn(e,t,n){let r=n.requireRect??!1,i=n.requireUnique??!0,a=[],o=null;for(let[s,c]of t.selectors.entries()){let t=An(e,c,n.platform,r);if(a.push({selector:c.raw,matches:t.count}),!(t.count===0||!t.firstNode)){if(o??={selector:c,selectorIndex:s,matchedNodes:t.candidates},i&&t.count!==1){if(!n.disambiguateAmbiguous||!t.disambiguated||!t.tiebreak)continue;return{matchedNodes:t.candidates,firstMatch:o,resolution:{node:t.disambiguated,selector:c,selectorIndex:s,matches:t.count,diagnostics:a,disambiguation:{matchCount:t.count,tiebreak:t.tiebreak,alternatives:t.candidates.filter(e=>e!==t.disambiguated)}}}}return{matchedNodes:t.candidates,firstMatch:o,resolution:{node:t.firstNode,selector:c,selectorIndex:s,matches:t.count,diagnostics:a}}}}return{resolution:null,matchedNodes:o?.matchedNodes??[],firstMatch:o}}function wn(e,t,n){return Cn(e,t,n).resolution}function Tn(e,t,n){let r=n.requireRect??!1;for(let[i,a]of t.selectors.entries()){let t=e.filter(e=>r&&!e.rect?!1:bn(e,a,n.platform));if(t.length>0)return{selector:a,selectorIndex:i,matchedNodes:t}}return null}function En(e,t,n){let r=n.requireRect??!1,i=[];for(let[a,o]of t.selectors.entries()){let t=Pn(e,o,n.platform,r);if(i.push({selector:o.raw,matches:t}),t>0)return{selectorIndex:a,selector:o,matches:t,diagnostics:i}}return null}const Dn=`Snapshot refs expire when the UI changes. Run snapshot -i and retry with a fresh @ref.`;function On(e){return e.some(e=>e.matches>1)?`Add more terms to disambiguate (e.g. role=button text="Sign in"), use an @ref from snapshot -i, or use find <text> --first/--last.`:`Selector text/label values match exactly (quote multi-word values: text="Sign in"). Run snapshot -i to see current elements and refs, or use find <text> for contains matching.`}function kn(e,t,n){if(t.length===0)return`Selector did not match: ${e}`;let r=t.map(e=>`${e.selector} -> ${e.matches}`).join(`, `);return n.unique??!0?`Selector did not resolve uniquely (${r})`:`Selector did not match (${r})`}function An(e,t,n,r){let i=0,a=null,o=[],s={best:null,bestVisible:!1,tie:!1},c=be(e).isVisibleOnScreen;for(let l of e)r&&!l.rect||bn(l,t,n)&&(i+=1,a??=l,o.push(l),jn(s,l,c));return{count:i,firstNode:a,disambiguated:s.tie?null:s.best,tiebreak:s.tie?null:Mn(o,s.best,c),candidates:o}}function jn(e,t,n){if(!e.best){e.best=t;return}e.bestVisible||=n(e.best);let r=n(t);if(r!==e.bestVisible){r&&(e.best=t,e.bestVisible=!0,e.tie=!1);return}let i=Fn(t,e.best);i.result>0?(e.best=t,e.tie=!1):i.result===0&&(e.tie=!0)}function Mn(e,t,n){if(!t)return null;let r=null;for(let i of e)i!==t&&(!r||Nn(i,r,n).result>0)&&(r=i);return r?Nn(t,r,n).criterion:null}function Nn(e,t,n){let r=n(e);return r===n(t)?Fn(e,t):{result:r?1:-1,criterion:`visible`}}function Pn(e,t,n,r){let i=0;for(let a of e)r&&!a.rect||bn(a,t,n)&&(i+=1);return i}function Fn(e,t){let n=e.depth??0,r=t.depth??0;if(n!==r)return{result:n>r?1:-1,criterion:`deepest`};let i=In(e),a=In(t);return i===a?{result:0,criterion:null}:{result:i<a?1:-1,criterion:`smallest-area`}}function In(e){return e.rect?e.rect.width*e.rect.height:1/0}const Ln={act:{ambiguity:`reject-candidates`,requireRect:!0},actCoveredDiagnosis:{ambiguity:`first-match`,requireRect:!0},readText:{ambiguity:`disambiguate`,requireRect:!1},readUnique:{ambiguity:`fail-closed`,requireRect:!1},readAny:{ambiguity:`first-match`,requireRect:!1},wait:{ambiguity:`first-match`,requireRect:!1},findAct:{ambiguity:`reject-candidates`,requireRect:!0},readList:{ambiguity:`reject-candidates`,requireRect:!1},cropTarget:{ambiguity:`fail-closed`,requireRect:!0}};function Rn(e){return e.ambiguity===`first-match`?{requireRect:e.requireRect,requireUnique:!1}:{requireRect:e.requireRect,requireUnique:!0,disambiguateAmbiguous:e.ambiguity===`disambiguate`}}function zn(e,t){let n=e===`is`?et([...t]).split:x([...t]);return n?y(n.selectorExpression)?{kind:`expression`,expression:n.selectorExpression,rest:n.rest}:{kind:`invalid`}:{kind:`not-applicable`}}function Bn(e){return{platform:e.platform,...Rn({ambiguity:e.allowDisambiguation?`disambiguate`:`fail-closed`,requireRect:e.requireRect})}}function Vn(e,t,n){let r=y(e);if(!r)return{kind:`unresolved`,reason:`parse-invalid`,matchedNodes:[]};let{resolution:i,matchedNodes:a}=Cn(t,r,Bn(n));return i?{kind:`resolved`,winner:i.node,matchedNodes:a,matchCount:a.length,...i.disambiguation?{disambiguation:{tiebreak:i.disambiguation.tiebreak,matchCount:i.disambiguation.matchCount,alternatives:i.disambiguation.alternatives}}:{}}:{kind:`unresolved`,reason:a.length>0?`ambiguous`:`no-match`,matchedNodes:a}}function Hn(e,t,n={}){return en(e,t,n)}function Un(e,t,n){let r=y(e);if(!r)return;let i=wn(t,r,Bn(n));if(i)return{node:i.node,basis:Gn(i.selector)}}function Wn(e){if(!e)return;let t=y(e);if(!t)return;let n=t.selectors.flatMap(e=>e.terms.flatMap(e=>(e.key===`label`||e.key===`text`||e.key===`id`)&&typeof e.value==`string`?[e.value]:[]));if(n.length===0)return;let r=n[0];return r&&n.every(e=>e===r)?r:void 0}function Gn(e){let t=new Set(e.terms.map(e=>e.key));if(t.has(`id`))return`id`;let n=t.has(`role`),r=t.has(`label`)||t.has(`text`);return n&&r?`role-label`:r||t.has(`value`)?`label`:`other`}function Kn(e,t){let n=y(e);if(!n)return e.includes(`=`)||e.includes(`||`)?null:e;let r=new Set(t.textKeys),i=t.textAliases??{};return n.selectors.length>1?qn(n.selectors,r,i):Jn(n.selectors[0],r,new Set(t.booleanKeys),i)}function qn(e,t,n){let r=e.map(e=>{let r=e.terms.length===1?e.terms[0]:void 0;return r&&Yn(r.key,t,n)&&typeof r.value==`string`?r.value:void 0}),i=r[0];return i!==void 0&&r.every(e=>e===i)?i:null}function Jn(e,t,n,r){if(!e)return null;let i={},a=0;for(let o of e.terms){if(Yn(o.key,t,r)&&typeof o.value==`string`)a+=1;else if(!Xn(o,n,`boolean`))return null;i[r[o.key]??o.key]=o.value}return a<=1&&Object.keys(i).length>0?i:null}function Yn(e,t,n){return t.has(e)||n[e]!==void 0}function Xn(e,t,n){return t.has(e.key)&&typeof e.value===n}function Zn(e){let t=y(e);if(!t||t.selectors.length!==1)return null;let n=t.selectors[0];if(!n||n.terms.length!==1)return null;let r=n.terms[0];return!r||typeof r.value!=`string`||r.key!==`id`&&r.key!==`label`&&r.key!==`text`&&r.key!==`value`?null:{key:r.key,value:r.value,raw:n.raw}}function Qn(e,t){if(!t)return!1;let n=y(e);return n?n.selectors.some(e=>e.terms.some(e=>(e.key===`text`||e.key===`label`||e.key===`value`)&&typeof e.value==`string`&&e.value.includes(t))):!1}function $n(e,t){return y(e)?.selectors.some(e=>e.terms.some(e=>e.key===t))??!1}function er(e){return v(e).selectors.map(e=>e.raw)}function tr(e){return y(e)!==null}function nr(e){v(e)}function M(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}const rr=new Set([`exists`,`present`,`appears`,`gone`,`disappears`]);function ir(e){let t=e[0];if(t===void 0)return null;let n=M(t);if(n!==null)return{kind:`sleep`,durationMs:n};let r=M(e.at(-1));return t===`text`?ar(e,r):t===`stable`?or(e):t===`absent`?sr(e,r):t.startsWith(`@`)?{kind:`ref`,rawRef:t,timeoutMs:r}:lr(e,r)}function ar(e,t){return{kind:`text`,text:(t===null?e.slice(1).join(` `):e.slice(1,-1).join(` `)).trim(),timeoutMs:t}}function or(e){let t=e.slice(1),n=t.length>1?M(t[1]):null;return{kind:`stable`,quietMs:t.length>0?M(t[0]):null,timeoutMs:n}}function sr(e,t){let n=t===null?e.slice(1):e.slice(1,-1),r=x(n);return n.length>0&&r?.rest.length===0&&tr(r.selectorExpression)?{kind:`absent`,selectorExpression:r.selectorExpression,timeoutMs:t}:{kind:`invalid`,reason:`absent-selector-required`,message:cr(n)}}function cr(e){let t=e.join(` `);return t.length>0?`wait absent requires one valid selector; received "${t}". Use wait absent '<selector>' [timeoutMs].`:`wait absent requires <selector> [timeoutMs].`}function lr(e,t){let n=t===null?e.slice():e.slice(0,-1),r=x(n);return r&&r.rest.length===0&&tr(r.selectorExpression)?{kind:`selector`,selectorExpression:r.selectorExpression,timeoutMs:t}:ur(n,r)||{kind:`text`,text:(t===null?e.join(` `):e.slice(0,-1).join(` `)).trim(),timeoutMs:t}}function ur(e,t){for(let t of e){let n=Ie(t);if(n)return{kind:`invalid`,reason:`unknown-selector-key`,message:dr(n,e)}}return t&&t.rest.length>0?{kind:`invalid`,reason:`selector-shaped-text`,message:fr(t,e)}:e.some(e=>b(e))?{kind:`invalid`,reason:`selector-shaped-text`,message:pr(e)}:null}function dr(e,t){let n=t.join(` `),r=Pe(e.key)?`role=${e.key} label="${e.value}"`:`label="${e.value}"`;return`Unknown selector key "${e.key}" in "${n}". Supported: ${Me.join(`, `)}. Use wait '${r}' [timeoutMs] to wait for the selector, or wait text '${n}' [timeoutMs] to wait for the literal text "${n}".`}function fr(e,t){let n=t.join(` `);return`Selector ${e.selectorExpression} is followed by unexpected extra arguments: "${e.rest.join(` `)}". Selector values with spaces need quotes, e.g. label="Sign in". Use wait '<selector>' [timeoutMs], or wait text '${n}' [timeoutMs] to wait for the literal text "${n}".`}function pr(e){let t=e.join(` `),n=e.filter(e=>!b(e)),r=e.filter(e=>b(e));if(n.length>0){let e=n[0],i=rr.has(e.toLowerCase())?` "${e}" describes a condition, not a selector key. Use the selector form: `+(e.toLowerCase()===`gone`||e.toLowerCase()===`disappears`?`wait absent '${r.join(` `)}' [timeoutMs] to wait for zero matches.`:`wait '${r.join(` `)}' [timeoutMs] to wait for it to appear.`):` "${e}" is not a recognized selector key (${Me.join(`, `)}).`;return`"${t}" mixes plain word "${e}" with selector-shaped "${r.join(` `)}", so it is neither a valid selector nor safe as literal text.${i} Use wait '<selector>' [timeoutMs] for a selector, or wait text '${t}' [timeoutMs] to wait for the literal text "${t}".`}return`"${t}" looks like a selector key but is not a valid selector expression. Use wait '<selector>' [timeoutMs], e.g. wait '${e[0]}="value"' [timeoutMs], or wait text '${t}' [timeoutMs] to wait for the literal text "${t}".`}function mr(e){let t=ir(e);return t?t.kind===`sleep`?t.durationMs:t.kind===`invalid`?null:t.timeoutMs:null}const hr=3e4,gr=24e4,_r=3e5,N={budget:{source:`none`},envelopeMs:9e4,onTimeout:`reset-daemon`},vr={budget:{source:`none`},envelopeMs:255e3,onTimeout:`reset-daemon`};function yr(e,t){if(e.envelopeMs===`unbounded`)return;let n={...e,envelopeMs:e.envelopeMs};return(xr(n,t.positionals??[])??Sr(n,t.flags)??n.envelopeMs)+br(e,t.flags)}function br(e,t){if(e.targetReadiness!==`budgeted`)return 0;let n=t?.readinessTimeoutMs;return typeof n!=`number`||!Number.isInteger(n)||n<=0?0:Math.min(n,2e3)}function xr(e,t){if(e.budget.source!==`positional-parser`)return;let n=e.budget.parser(t);return n===null?void 0:Tr(e,n)}function Sr(e,t){if(e.budget.source===`flag`)return e.budget.envelope===`widen`?wr(e,e.budget,t):e.budget.envelope===`margin`?Cr(e,t):typeof t?.timeoutMs==`number`?t.timeoutMs:e.envelopeMs}function Cr(e,t){let n=typeof t?.timeoutMs==`number`?Tr(e,t.timeoutMs):e.envelopeMs;return typeof t?.waitMs==`number`?Er({...e,envelopeMs:n},t.waitMs):n}function wr(e,t,n){if(n?.settle!==!0)return e.envelopeMs;let r=typeof n.timeoutMs==`number`?n.timeoutMs:t.defaultBudgetMs;return typeof r==`number`?Er(e,r):e.envelopeMs}function Tr(e,t){return Math.max(e.envelopeMs,t+hr)}function Er(e,t){return Math.max(e.envelopeMs,e.envelopeMs+t+hr)}const Dr={click:`settle-and-verify`,press:`settle-and-verify`,fill:`settle-and-verify`,longpress:`settle`,hover:`settle`,scroll:`settle`,back:`settle`};function Or(e){if(e!==void 0)return Dr[e]}function P(t){return new e(`COMMAND_FAILED`,t,{reason:`runtime-contract-invalid`,hint:`This is an agent-device runtime contract bug; report the selected device and command.`})}function kr(e){if(!r(e))throw TypeError(`Unknown local runtime family: ${String(e)}`);return Object.freeze({kind:`local-family`,family:e})}function Ar(e,t){let n=e.trim(),r=t.trim();if(n.length===0||r.length===0)throw TypeError(`Provider runtime owner requires non-empty provider and instance identities`);return Object.freeze({kind:`provider-runtime`,provider:n,instance:r})}function jr(e){let t=e.trim();if(t.length===0)throw TypeError(`Managed local runtime owner requires a non-empty allocator instance identity`);return Object.freeze({kind:`managed-local`,instance:t})}function Mr(e){switch(e.kind){case`local-family`:return`local:${e.family}`;case`managed-local`:return`managed:${JSON.stringify([e.instance])}`;case`provider-runtime`:return`provider:${JSON.stringify([e.provider,e.instance])}`}}function Nr(e,t){return Mr(e)===Mr(t)}function Pr(e,t){return e.available?t():{}}function Fr(e){if(!F(e.requesterId)||!F(e.identityIncarnationId)||!Lr(e.requestGeneration))throw TypeError(`Managed binding fence requires non-empty requester and identity incarnation ids and a non-negative integer request generation`);return Object.freeze({token:JSON.stringify([e.requesterId,e.identityIncarnationId]),generation:e.requestGeneration})}function Ir(e){let t=Rr(e.token);if(!t||t.length!==2)return null;let[n,r]=t;if(!F(n)||!F(r)||!Lr(e.generation))return null;let i=Object.freeze({requesterId:n,requestGeneration:e.generation,identityIncarnationId:r});return Fr(i).token===e.token?i:null}function Lr(e){return Number.isInteger(e)&&e>=0}function F(e){return typeof e==`string`&&e.trim().length>0}function Rr(e){try{let t=JSON.parse(e);return Array.isArray(t)?t:null}catch{return null}}function zr(e,t){let n={},r={};for(let i of t.required){let t=Br(e.facts.operations,i);if(n[i]=t,!t.available)throw Gr(i,t);r[i]=Ur(e.operations,i)}for(let i of t.preferred){let t=Br(e.facts.operations,i);n[i]=t,t.available&&(r[i]=Ur(e.operations,i))}for(let i of t.conditional??[]){let t=Br(e.facts.operations,i);n[i]=t,t.available&&(r[i]=Ur(e.operations,i))}return Object.freeze({device:e.device,owner:e.owner,facts:Object.freeze(n),operations:Object.freeze(r)})}function Br(e,t){let n=e[t];if(!Vr(n))throw P(`Runtime owner omitted the ${t} fact`);let r=Hr(n);if(r)return r;throw P(`Runtime owner returned an invalid ${t} fact`)}function Vr(e){return typeof e==`object`&&!!e&&`available`in e}function Hr(e){if(e.available===!0)return Object.freeze({available:!0});if(e.available===!1&&Wr(e.reason)&&(e.hint===void 0||typeof e.hint==`string`))return Object.freeze({available:!1,reason:e.reason,...e.hint===void 0?{}:{hint:e.hint}})}function Ur(e,t){let n=e[t];if(typeof n!=`function`)throw P(`Runtime owner advertised ${t} without an implementation`);return n}function Wr(e){return e===`unsupported-platform-leaf`||e===`unsupported-device-kind`||e===`unsupported-device-backend`||e===`unsupported-device-scope`||e===`unsupported-provider-mode`||e===`owner-capability-missing`}function Gr(t,n){return new e(`UNSUPPORTED_OPERATION`,`Runtime operation ${t} is unavailable`,{reason:n.reason,hint:n.hint})}function Kr(e){return JSON.stringify({required:[...e.required].sort(),preferred:[...e.preferred].sort(),conditional:[...e.conditional??[]].sort()})}function qr(){return e=>{let t=Jr(e.required,`required`),n=Jr(e.preferred??[],`preferred`),r=Jr(e.conditional??[],`conditional`),i=[[`required`,t],[`preferred`,n],[`conditional`,r]];for(let e=0;e<i.length;e+=1){let t=i[e];if(t)for(let n of i.slice(e+1)){let e=n[1].find(e=>t[1].includes(e));if(e!==void 0)throw TypeError(`Runtime operation cannot be both ${t[0]} and ${n[0]}: ${e}`)}}return Object.freeze(r.length===0?{required:t,preferred:n}:{required:t,preferred:n,conditional:r})}}function Jr(e,t){let n=[...e];if(new Set(n).size!==n.length)throw TypeError(`Runtime use contains duplicate ${t} operations`);return Object.freeze(n)}const I=qr(),Yr=I({required:[`bootTarget`]}),Xr=I({required:[`bootTargetHeadless`]}),Zr=I({required:[`ensureReady`,`listApps`]}),Qr=I({required:[`captureSnapshot`]}),$r=I({required:[`setViewport`]}),ei=I({required:[`focusPoint`]}),ti=I({required:[`typeText`]}),ni=I({required:[`back`]}),ri=I({required:[`home`]}),ii=I({required:[`setOrientation`]}),ai=I({required:[`setFoldPose`]}),oi=I({required:[`tvRemote`]}),si=I({required:[`keyboardStatus`]}),ci=I({required:[`keyboardDismiss`]}),li=I({required:[`keyboardEnter`]}),ui=I({required:[`appSwitcher`]}),di=I({required:[`actionButton`]}),fi=I({required:[`triggerAppEvent`]}),pi=I({required:[`setSetting`]}),mi=I({required:[`readSetting`]}),hi=I({required:[`readAlert`]}),gi=I({required:[`awaitAlert`]}),_i=I({required:[`acceptAlert`]}),vi=I({required:[`dismissAlert`]}),yi=I({required:[`readClipboard`]}),bi=I({required:[`writeClipboard`]}),xi=I({required:[`perfFrames`]}),Si=I({required:[`perfMemorySample`]}),Ci=I({required:[`perfMemorySnapshot`]}),wi=I({required:[`perfNativeCaptureStart`]}),Ti=I({required:[`perfNativeCaptureReattach`,`perfNativeCaptureCleanup`]}),Ei=I({required:[`perfProfileReport`]}),Di=Object.freeze([xi,Si,Ci,wi,Ti,Ei]),L=I({required:[`tapPoint`]}),Oi=I({required:[`captureSnapshot`,`tapPoint`],preferred:[`tapRef`],conditional:[`tapElementSelector`]}),ki=I({required:[`longPressPoint`]}),Ai=I({required:[`captureSnapshot`,`longPressPoint`]}),ji=I({required:[`hoverPoint`]}),Mi=I({required:[`captureSnapshot`,`hoverPoint`],preferred:[`hoverRef`]}),Ni=I({required:[`fillPoint`]}),Pi=I({required:[`captureSnapshot`,`fillPoint`],preferred:[`fillRef`]}),Fi=Object.freeze([L,Oi]),Ii=Fi,Li=Object.freeze([ki,Ai]),Ri=Object.freeze([ji,Mi]),zi=Object.freeze([Ni,Pi]);function Bi(e,t){switch(e){case`click`:case`press`:return t?{kind:`captured-tap`,use:Oi}:{kind:`tap-point`,use:L};case`fill`:return t?{kind:`captured-fill`,use:Pi}:{kind:`fill-point`,use:Ni};case`longpress`:return t?{kind:`captured-long-press`,use:Ai}:{kind:`long-press-point`,use:ki};case`hover`:return t?{kind:`captured-hover`,use:Mi}:{kind:`hover-point`,use:ji}}}const Vi=I({required:[`performGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Hi=I({required:[`performDirectionalFlingPlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Ui=I({required:[`performMultiTouchGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Wi=I({required:[`performTargetAuthoredDrag`,`captureSnapshot`],preferred:[`gestureViewport`]}),Gi=I({required:[`gestureViewport`]}),Ki=I({required:[`scrollDirection`],conditional:[`captureSnapshot`]}),qi=I({required:[`scrollDirection`,`captureSnapshot`]}),Ji=Object.freeze({plan:Vi,"directional-fling":Hi,"multi-touch":Ui,"target-authored-drag":Wi}),Yi=Object.freeze([Vi,Hi,Ui,Wi]),Xi=Object.freeze([Vi]),Zi=Object.freeze([Ki,qi]);function Qi(e){return e.intent===`pan`?(`pointerCount`in e?e.pointerCount:1)===2:e.intent===`pinch`||e.intent===`rotate`||e.intent===`transform`}function $i(e){return e.intent===`drag`?`target-authored-drag`:Qi(e)?`multi-touch`:e.intent===`fling`&&`direction`in e?`directional-fling`:`plan`}function ea(e){let t=$i(e);switch(t){case`plan`:return R(t);case`directional-fling`:return R(t);case`multi-touch`:return R(t);case`target-authored-drag`:return R(t)}}function R(e){let t=Ji[e];return Object.freeze({tier:e,operation:t.required[0],use:t})}function ta(e){return e.until===void 0?e.edge===void 0?Object.freeze({kind:`direction`,use:Ki}):Object.freeze({kind:`edge`,edge:e.edge,use:qi}):Object.freeze({kind:`until`,until:e.until,use:qi})}const na=I({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`]}),ra=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),ia=I({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`,`captureSnapshotWithoutActiveApp`]}),aa=I({required:[`captureSnapshot`]}),oa=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),sa=I({required:[`captureSnapshot`],preferred:[`readTextAtPoint`]}),ca=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],preferred:[`readTextAtPoint`]}),la=I({required:[`captureSnapshot`],conditional:[`findText`]}),ua=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],conditional:[`findText`]}),da=Object.freeze([aa,oa]),fa=Object.freeze([sa,ca]),pa=I({required:[`captureSnapshot`,`focusPoint`]}),ma=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`]}),ha=I({required:[`captureSnapshot`,`focusPoint`,`typeText`]}),ga=I({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`,`typeText`]}),_a=Object.freeze([sa,ca,aa,oa,pa,ma,ha,ga]),va=Object.freeze([la,ua]),ya=Object.freeze([Qr,na,ra,ia]),z=Object.freeze({"capture-only":da,"element-text":fa,"wait-observation":va,"find-focus":Object.freeze([pa,ma]),"find-type":Object.freeze([ha,ga])});function ba(e){return e===`focus`?`find-focus`:e===`type`?`find-type`:`capture-only`}function xa(e){switch(e.intent){case`capture-only`:return B(e.hasActiveApp,e.intent,z[e.intent]);case`element-text`:return B(e.hasActiveApp,e.intent,z[e.intent]);case`wait-observation`:return B(e.hasActiveApp,e.intent,z[e.intent]);case`find-focus`:return B(e.hasActiveApp,e.intent,z[e.intent]);case`find-type`:return B(e.hasActiveApp,e.intent,z[e.intent])}}function B(e,t,n){return Object.freeze(e?{kind:`selector-active-app`,intent:t,operation:`captureSnapshot`,use:n[0]}:{kind:`selector-without-active-app`,intent:t,operation:`captureSnapshotWithoutActiveApp`,use:n[1]})}function Sa(e){return e.customActions?e.hasActiveApp?Object.freeze({kind:`custom-actions-active-app`,operation:`captureSnapshotWithCustomActions`,use:na}):Object.freeze({kind:`custom-actions-without-active-app`,operation:`captureSnapshotWithCustomActions`,use:ia}):e.hasActiveApp?Object.freeze({kind:`active-app`,operation:`captureSnapshot`,use:Qr}):Object.freeze({kind:`without-active-app`,operation:`captureSnapshotWithoutActiveApp`,use:ra})}const Ca=I({required:[`captureScreenshot`]}),wa=I({required:[`captureScreenshot`,`captureSnapshot`]}),Ta=Object.freeze([Ca,wa]);function Ea(e){return e.cropOn?Object.freeze({kind:`capture-with-crop-on`,use:wa}):e.overlayRefs?Object.freeze({kind:`capture-with-overlay-refs`,use:wa}):Object.freeze({kind:`capture`,use:Ca})}const Da=Object.freeze([Yr,Xr]),Oa=Object.freeze({kind:`boot-target`,operation:`bootTarget`,use:Yr}),ka=Object.freeze({kind:`boot-target-headless`,operation:`bootTargetHeadless`,use:Xr});function Aa(e){return e.headless?ka:Oa}const ja=I({required:[`ensureReady`,`appState`]}),Ma=Object.freeze([ja]),Na=I({required:[`shutdownTarget`]}),Pa=Object.freeze([yi,bi]),Fa=Object.freeze([pi,mi]),Ia=[`text-size`],La=Object.freeze({kind:`write`,use:pi});function Ra(e){let t=za(e?.[0]);return e?.length!==1||t===void 0?La:Ia.includes(t)?Object.freeze({kind:`read`,setting:t,use:mi}):La}function za(e){let t=e?.trim().toLowerCase();return Ia.find(e=>e===t)}const Ba=Object.freeze([hi,gi,_i,vi]),Va=Object.freeze([si,ci,li]),Ha=I({required:[`deployApp`]}),Ua=I({required:[`ensureReady`,`materializeAppSource`,`deployMaterializedApp`]}),Wa=I({required:[`ensureReady`,`sendPushNotification`]}),Ga=I({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`]}),Ka=I({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`]}),qa=I({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`clearRuntimeHints`]}),Ja=I({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`,`clearRuntimeHints`]});function Ya(e){return e.applyRuntimeHints&&e.clearRemovedRuntimeHints?Object.freeze({kind:`open-apply-and-clear-runtime-hints`,use:Ja}):e.applyRuntimeHints?Object.freeze({kind:`open-apply-runtime-hints`,use:Ka}):e.clearRemovedRuntimeHints?Object.freeze({kind:`open-clear-runtime-hints`,use:qa}):Object.freeze({kind:`open`,use:Ga})}const Xa=Object.freeze([Ga,Ka,qa,Ja]),Za=I({required:[`closeApplication`,`finalizeApplicationClose`]}),Qa=I({required:[`closeApplication`,`finalizeApplicationClose`,`clearRuntimeHints`]}),$a=Object.freeze([Za,Qa]),eo=I({required:[`finalizeApplicationClose`]}),to=I({required:[`finalizeApplicationClose`,`clearRuntimeHints`]}),no=I({required:[`prepareAppleRunner`]}),ro=I({required:[`clearRuntimeHints`]}),io=I({required:[`configureProviderPortReverse`]}),ao=Object.freeze([ro,io]),V=I({required:[`appLogInspect`]}),oo=I({required:[`appLogInspect`,`appLogDoctor`]}),so=I({required:[`appLogInspect`,`appLogStart`]}),co=I({required:[],preferred:[`appLogInspect`]}),lo=Object.freeze([V,oo,so]);function uo(t){let n=(t.action??`path`).toLowerCase();if(t.restart&&n!==`clear`)throw new e(`INVALID_ARGS`,`logs --restart is only supported with logs clear`);switch(n){case`path`:return Object.freeze({kind:`path`,requiresAppSession:!1,use:V});case`start`:return Object.freeze({kind:`start`,requiresAppSession:!0,use:so});case`stop`:return Object.freeze({kind:`stop`,requiresAppSession:!1,use:V});case`doctor`:return Object.freeze({kind:`doctor`,requiresAppSession:!1,use:oo});case`mark`:return Object.freeze({kind:`mark`,marker:t.marker??``,requiresAppSession:!1,use:V});case`clear`:return t.restart?Object.freeze({kind:`clear-restart`,requiresAppSession:!0,use:so}):Object.freeze({kind:`clear`,requiresAppSession:!1,use:V});default:throw new e(`INVALID_ARGS`,`logs requires path, start, stop, doctor, mark, or clear`)}}const fo=I({required:[`audioProbeStart`]}),po=I({required:[`audioProbeReattach`,`audioProbeCleanup`]}),mo=I({required:[`audioProbeQuery`]}),ho=Object.freeze([fo,po,mo]);function go(e){if(e.mode===`query`)return Object.freeze({kind:`query`,action:e.probeAction,use:mo});switch(e.probeAction){case`start`:return Object.freeze({kind:`capture-start`,use:fo});case`status`:return Object.freeze({kind:`capture-status`});case`stop`:return Object.freeze({kind:`capture-stop`})}}const _o=[`probe`],vo=[`start`,`status`,`stop`];function yo(t){let n=(t?.[0]??`probe`).toLowerCase();if(!_o.includes(n))throw new e(`INVALID_ARGS`,`audio requires probe`);let r=(t?.[1]??`status`).toLowerCase();if(!vo.includes(r))throw new e(`INVALID_ARGS`,`audio probe requires ${vo.join(`, `)}`);if(r!==`start`&&t&&t.length>2)throw new e(`INVALID_ARGS`,`audio probe duration and bucket are only supported with audio probe start`);return Object.freeze({probeAction:r,durationMs:bo(t?.[2],{defaultValue:1e4,min:100,max:12e4,message:`audio probe duration must be an integer in range 100..120000 ms`}),bucketMs:bo(t?.[3],{defaultValue:1e3,min:100,max:1e4,message:`audio probe bucket must be an integer in range 100..10000 ms`})})}function bo(t,n){if(t===void 0)return n.defaultValue;let r=Number.parseInt(t,10);if(!Number.isInteger(r)||String(r)!==t||r<n.min||r>n.max)throw new e(`INVALID_ARGS`,n.message);return r}const xo=I({required:[`networkDump`]}),So=I({required:[],preferred:[`networkDump`]}),Co=[`dump`,`log`],wo=[`summary`,`headers`,`body`,`all`];function To(t){let n=(t.action??`dump`).toLowerCase(),r=(t.include??`summary`).toLowerCase();if(!Eo(n))throw new e(`INVALID_ARGS`,`network requires dump or log`);if(!Do(r))throw new e(`INVALID_ARGS`,`network --include must be summary, headers, body, or all`);return Object.freeze({action:n,include:r,use:xo})}function Eo(e){return Co.some(t=>t===e)}function Do(e){return wo.some(t=>t===e)}function Oo(e){let t=new Map;for(let n of e){if(!r(n.family))throw TypeError(`Unknown platform family registration: ${String(n.family)}`);if(t.has(n.family))throw TypeError(`Duplicate platform family registration: ${n.family}`);t.set(n.family,ko(n))}let n=i.filter(e=>!t.has(e));if(n.length>0)throw TypeError(`Missing platform family registrations: ${n.join(`, `)}`);let a=Object.freeze([...i]),o=Object.freeze(a.map(e=>Ao(t,e)));return Object.freeze({families:a,modules:o,get:e=>Ao(t,e)})}function ko(e){return Object.freeze({...e})}function Ao(e,t){let n=e.get(t);if(!n)throw TypeError(`Missing platform family registration: ${t}`);return n}const jo=Object.freeze({kind:`device-inventory`});function Mo(e){if(typeof e!=`object`||!e)throw zo();let t=e,n=Object.keys(t).sort();if(!(t.kind===`none`&&H(n,[`kind`]))&&!(t.kind===`host`&&H(n,[`kind`]))&&!(t.kind===`inventory`&&H(n,[`kind`,`use`])&&Po(t.use))&&!(t.kind===`device-runtime`&&H(n,[`kind`,`use`])&&Fo(t.use))&&!(t.kind===`device-runtime`&&(H(n,[`kind`,`uses`])||H(n,[`kind`,`selectUses`,`uses`])&&typeof t.selectUses==`function`)&&No(t.uses)))throw zo()}function No(e){if(!Array.isArray(e)||e.length===0||!e.every(Fo))return!1;let t=e.map(Kr);return new Set(t).size===t.length}function Po(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.kind===`device-inventory`&&H(Object.keys(t).sort(),[`kind`])}function Fo(e){if(typeof e!=`object`||!e)return!1;let t=e,n=[Lo(t.required),Lo(t.preferred),Lo(t.conditional??[])];if(!Io(n))return!1;let r=n.flat();return new Set(r).size===r.length&&H(Object.keys(t).sort(),t.conditional===void 0?[`preferred`,`required`]:[`conditional`,`preferred`,`required`])}function Io(e){return e.every(e=>e!==null&&Ro(e))}function Lo(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?e:null}function Ro(e){return new Set(e).size===e.length}function H(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function zo(){return TypeError(`Command platform execution must declare exactly one of none, host, inventory, or device-runtime`)}const Bo=I({required:[`screenRecordingStart`]}),Vo=I({required:[`screenRecordingReattach`,`screenRecordingCleanup`]}),Ho=I({required:[]}),Uo=I({required:[],preferred:[`screenRecordingStart`]}),Wo=Object.freeze([Bo,Vo]);function Go(t){switch((t.action??``).toLowerCase()){case`start`:if(!Ko(t.scope??`app`))throw new e(`INVALID_ARGS`,`record scope must be app, device, or system`);return Object.freeze({kind:`start`,use:Bo});case`stop`:return t.hasLiveHandle===!0?Object.freeze({kind:`stop-live`,use:Ho}):Object.freeze({kind:`stop-recovery`,use:Vo});default:throw new e(`INVALID_ARGS`,`record requires start or stop`)}}function Ko(e){return e===`app`||e===`device`||e===`system`}function qo(e){if(Mo(e),e.kind!==`device-runtime`||!(`uses`in e))throw Jo();let t=e.uses.map(Kr),n=Wo.map(Kr),r=new Set(t),i=new Set(n);if(t.length!==n.length||r.size!==t.length||[...r].some(e=>!i.has(e)))throw Jo()}function Jo(){return TypeError(`Record runtime execution must declare exactly the uses selected by its two runtime-bearing plans`)}function Yo(e){let t=e.platformExecution;if(t===void 0)throw TypeError(`Command descriptor "${e.name}" must declare platformExecution (none, host, inventory, or device-runtime); there is no registry-entry default`);return Mo(t),t}const U={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0},W={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0,selectorValidationExempt:!0},Xo=()=>!0,Zo=e=>(e.positionals?.[0]??``).toLowerCase()===`start`,Qo=e=>e.command===`test`&&(typeof e.flags?.shardAll==`number`||typeof e.flags?.shardSplit==`number`),$o=e=>(e.positionals?.length??0)===0?{kind:`unconditional`}:void 0,es=e=>{let t=e.flags?.leaseProvider;return e.flags?.leaseId===void 0&&typeof t==`string`&&(e.flags?.platform===`android`||e.flags?.platform===`ios`)?{kind:`provider-app-catalog`,provider:t}:void 0},ts=new Set([`status`,`get`]),ns=e=>fs(e,ts,`status`),rs=new Set([`get`,`wait`]),is=e=>fs(e,rs,`get`),as=e=>G(e,ts,`status`),os=e=>G(e,rs,`get`),ss=e=>{try{return on(gn(e.positionals??[]).action)?`observes-app`:`mutates-app`}catch{return`mutates-app`}},cs=e=>G(e,new Set([`read`]),``),ls=e=>Ra(e.positionals).kind===`read`,us=e=>ls(e)?`observes-app`:`mutates-app`,ds=e=>ls(e)?`preserve`:`may-invalidate`;function fs(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`preserve`:`may-invalidate`}function G(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`observes-app`:`mutates-app`}const K={kind:`none`},ps={kind:`host`},q={recordsSessionAction:!0,recordingEffect:`mutates-app`,deviceClaimPolicy:`require-owner`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0},J={targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},recordsSessionAction:!0,recordingEffect:`mutates-app`,deviceClaimPolicy:`require-owner`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0}},Y={...N,onTimeout:`preserve-daemon`},ms={...N,envelopeMs:18e4},hs={...N,onTimeout:`preserve-daemon`},gs={...hs,envelopeMs:33e4},_s={...N,budget:{source:`flag`,envelope:`widen`,defaultBudgetMs:1e4},onTimeout:`preserve-daemon`},vs={fields:{count:{defaultValue:1,omitDefault:!0},intervalMs:{defaultValue:0,omitDefault:!0},holdMs:{defaultValue:0,omitDefault:!0},jitterPx:{defaultValue:0,omitDefault:!0},doubleTap:{defaultValue:!1,omitDefault:!0}}},ys={fields:{delayMs:{defaultValue:0}}};function X(e,t){return Or(e)===void 0?t:_s}function Z(e){let t=Or(e);if(t===void 0)throw Error(`Missing post-action observation descriptor support for ${e}`);return t}const bs={deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:Ha},timeoutPolicy:ms,batchable:!0},xs=e=>{let t=e.flags?.snapshotCustomActions===!0||e.input?.customActions===!0;return[!0,!1].map(e=>Sa({customActions:t,hasActiveApp:e}).use)},Ss=e=>{let t=ws(e);if(t===void 0||!Cs(t))return _a;let n=ba(t);return[!0,!1].map(e=>xa({hasActiveApp:e,intent:n}).use)};function Cs(e){return on(e)||e===`focus`||e===`type`}function ws(e){if(e.positionals===void 0)return;let t=pn(e.positionals,e.flags);return t.ok?t.parsed.action:void 0}const Ts=[{name:`human_control`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`humanControl`},recordsSessionAction:!1,daemon:{route:`humanControl`,refFrameEffect:`preserve`,selectorValidationExempt:!0,skipSessionlessProviderDevice:Xo},timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`lease_allocate`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseAllocate`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...U},timeoutPolicy:gs,batchable:!1,platformExecution:K},{name:`lease_heartbeat`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseHeartbeat`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...U,appLease:`allowed`},timeoutPolicy:hs,batchable:!1,platformExecution:K},{name:`lease_release`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseRelease`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...U,appLease:`allowed`},timeoutPolicy:hs,batchable:!1,platformExecution:K},{name:`artifacts`,deviceClaimPolicy:`none`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...U},timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`session_list`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`sessionList`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,...W},timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`session_save_script`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`sessionSaveScript`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`publication`},timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`devices`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,...W},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`inventory`,use:jo}},{name:`capabilities`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0,...W},timeoutPolicy:N,batchable:!0,platformExecution:K},{name:`doctor`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,allowSessionlessDefaultDevice:Xo,...W},timeoutPolicy:N,batchable:!0,platformExecution:ps},{name:`apps`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0,sessionlessLeaseAdmissionExemption:es},platformExecution:{kind:`device-runtime`,uses:[Zr]},timeoutPolicy:N,batchable:!0},{name:`boot`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`may-invalidate`,sessionKind:`state`},platformExecution:{kind:`device-runtime`,uses:Da},timeoutPolicy:{...N,budget:{source:`flag`,envelope:`margin`}},batchable:!0},{name:`shutdown`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`may-invalidate`,sessionKind:`state`},platformExecution:{kind:`device-runtime`,use:Na},timeoutPolicy:N,batchable:!0},{name:`appstate`,deviceClaimPolicy:`observe`,catalog:{group:`public`,key:`appState`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`state`},platformExecution:{kind:`device-runtime`,uses:Ma},timeoutPolicy:N,batchable:!0},{name:`perf`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Di}},{name:`logs`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},platformExecution:{kind:`device-runtime`,uses:lo},timeoutPolicy:N,batchable:!0},{name:`events`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`,allowInvalidRecording:!0,...W},timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`network`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},platformExecution:{kind:`device-runtime`,use:xo},timeoutPolicy:N,batchable:!0},{name:`audio`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ho}},{name:`replay`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,sessionKind:`replay`,skipSessionlessProviderDevice:Qo,saveScriptFlagOwner:!0},timeoutPolicy:{...N,budget:{source:`flag`}},batchable:!1,platformExecution:K},{name:`test`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,sessionKind:`replay`,skipSessionlessProviderDevice:Qo},timeoutPolicy:{...N,envelopeMs:`unbounded`},batchable:!0,platformExecution:K},{name:`runtime`,deviceClaimPolicy:`require-owner`,catalog:{group:`internal`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!1,platformExecution:{kind:`device-runtime`,uses:[...ao,Gi]}},{name:`clipboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:cs,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Pa}},{name:`keyboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:as,daemon:{route:`session`,refFrameEffect:ns,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Va}},{name:`install`,...bs},{name:`reinstall`,...bs},{name:`install_source`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`internal`,key:`installSource`,servesPublicCommand:`install-from-source`},recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:Ua},timeoutPolicy:ms,batchable:!1},{name:`release_materialized_paths`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`releaseMaterializedPaths`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,...W},timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`push`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:Wa},timeoutPolicy:N,batchable:!0},{name:`trigger-app-event`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`,key:`triggerAppEvent`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[fi]}},{name:`open`,deviceClaimPolicy:`acquire-session`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`,allowSessionlessDefaultDevice:Xo,saveScriptFlagOwner:!0,appLease:`allowed`},timeoutPolicy:{...N,budget:{source:`flag`,envelope:`margin`}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:Xa}},{name:`prepare`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:{budget:{source:`flag`,envelope:`margin`},envelopeMs:27e4,onTimeout:`reset-daemon`},batchable:!1,mcpExposed:!1,platformExecution:{kind:`device-runtime`,use:no}},{name:`batch`,deviceClaimPolicy:`none`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,appLease:`allowed`},timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`close`,deviceClaimPolicy:`release-session`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`,allowInvalidRecording:!0,saveScriptFlagOwner:!0,sessionlessLeaseAdmissionExemption:$o,appLease:`allowed`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:$a}},{name:`snapshot`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`snapshot`,refFrameEffect:`preserve`,appLease:`allowed`},timeoutPolicy:{...Y,budget:{source:`flag`}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:ya,selectUses:xs}},{name:`diff`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`snapshot`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ya,selectUses:xs}},{name:`wait`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,targetIdentityVerification:`post-resolution`,daemon:{route:`snapshot`,refFrameEffect:`preserve`,appLease:`allowed`},timeoutPolicy:{...Y,budget:{source:`positional-parser`,parser:mr}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:va}},{name:`alert`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:os,daemon:{route:`snapshot`,refFrameEffect:is},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ba}},{name:`settings`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:us,daemon:{route:`snapshot`,refFrameEffect:ds},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Fa}},{name:`react-native`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`,key:`reactNative`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`reactNative`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[L]}},{name:`record`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`recordTrace`,refFrameEffect:`preserve`,allowInvalidRecording:!0,allowSessionlessDefaultDevice:Zo},platformExecution:{kind:`device-runtime`,uses:Wo},timeoutPolicy:Y,batchable:!0},{name:`trace`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`recordTrace`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:K},{name:`find`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:ss,daemon:{route:`find`,refFrameEffect:`may-invalidate`,appLease:`allowed`},timeoutPolicy:Y,batchable:!0,platformExecution:{kind:`device-runtime`,uses:_a,selectUses:Ss}},{name:`click`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0,appLease:`allowed`},timeoutPolicy:X(`click`,Y),postActionObservation:Z(`click`),targetReadiness:`budgeted`,responseDataTransform:vs,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Fi}},{name:`fill`,...J,daemon:{...J.daemon,appLease:`allowed`},frameworkTier:`core`,timeoutPolicy:X(`fill`,Y),postActionObservation:Z(`fill`),responseDataTransform:ys,batchable:!0,platformExecution:{kind:`device-runtime`,uses:zi}},{name:`longpress`,...J,catalog:{group:`public`,key:`longPress`},frameworkTier:`extended`,timeoutPolicy:{..._s,envelopeMs:21e4},postActionObservation:Z(`longpress`),targetReadiness:`budgeted`,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Li}},{name:`hover`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`},timeoutPolicy:X(`hover`,Y),postActionObservation:Z(`hover`),batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ri}},{name:`press`,...J,daemon:{...J.daemon,appLease:`allowed`},frameworkTier:`core`,timeoutPolicy:X(`press`,Y),postActionObservation:Z(`press`),targetReadiness:`budgeted`,responseDataTransform:vs,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ii}},{name:`type`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0,appLease:`allowed`},timeoutPolicy:X(`type`,Y),batchable:!0,platformExecution:{kind:`device-runtime`,uses:[ti]}},{name:`get`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`interaction`,refFrameEffect:`preserve`,appLease:`allowed`},timeoutPolicy:X(`get`,Y),batchable:!0,platformExecution:{kind:`device-runtime`,uses:fa}},{name:`is`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`interaction`,refFrameEffect:`preserve`,appLease:`allowed`},timeoutPolicy:X(`is`,Y),batchable:!0,platformExecution:{kind:`device-runtime`,uses:da}},{name:`back`,catalog:{group:`public`},frameworkTier:`core`,...q,timeoutPolicy:X(`back`,N),postActionObservation:Z(`back`),platformExecution:{kind:`device-runtime`,uses:[ni]}},{name:`gesture`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,targetIdentityVerification:`pre-dispatch`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Yi}},{name:`home`,catalog:{group:`public`},frameworkTier:`extended`,...q,platformExecution:{kind:`device-runtime`,uses:[ri]}},{name:`tv-remote`,catalog:{group:`public`,key:`tvRemote`},frameworkTier:`extended`,...q,platformExecution:{kind:`device-runtime`,uses:[oi]}},{name:`orientation`,catalog:{group:`public`},frameworkTier:`extended`,...q,platformExecution:{kind:`device-runtime`,uses:[ii]}},{name:`fold`,catalog:{group:`public`},frameworkTier:`extended`,...q,timeoutPolicy:vr,platformExecution:{kind:`device-runtime`,uses:[ai]}},{name:`scroll`,catalog:{group:`public`},frameworkTier:`core`,...q,daemon:{...q.daemon,appLease:`allowed`},timeoutPolicy:X(`scroll`,N),postActionObservation:Z(`scroll`),platformExecution:{kind:`device-runtime`,uses:Zi}},{name:`swipe`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Xi}},{name:`focus`,catalog:{group:`public`},frameworkTier:`extended`,...q,daemon:{...q.daemon,appLease:`allowed`},platformExecution:{kind:`device-runtime`,uses:[ei]}},{name:`screenshot`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`generic`,refFrameEffect:`preserve`,appLease:`allowed`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ta}},{name:`viewport`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!1,platformExecution:{kind:`device-runtime`,uses:[$r]}},{name:`app-switcher`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`,key:`appSwitcher`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[ui]}},{name:`action-button`,catalog:{group:`public`,key:`actionButton`},frameworkTier:`extended`,...q,platformExecution:{kind:`device-runtime`,uses:[di]}},{name:`install-from-source`,deviceClaimPolicy:`none`,catalog:{group:`public`,key:`installFromSource`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,platformExecution:{kind:`device-runtime`,use:Ua},timeoutPolicy:N,batchable:!0},{name:`debug`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`daemon`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:ps},{name:`device`,deviceClaimPolicy:`observe`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`metro`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`session`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,platformExecution:K},{name:`cdp`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`auth`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`plugins`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`connect`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`connection`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`disconnect`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`mcp`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`proxy`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`takeover`,deviceClaimPolicy:`observe`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:{kind:`inventory`,use:jo}},{name:`react-devtools`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`,key:`reactDevtools`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`web`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:ps}],Es=new Set([`public`,`local-cli`]),Ds=new Set(Ts.filter(e=>Es.has(Fs(e))).map(e=>e.name)),Q=Ts.map(e=>{let t=Yo(e);return e.name===`record`&&qo(t),{...e,mcpExposed:Ns(e),platformExecution:t}});function Os(e){return Q.filter(t=>Fs(t)===e).map(e=>[Is(e),e.name])}function ks(){return Q.filter(e=>Ps(e)).map(e=>e.name).sort()}function As(e){let t=Q.find(t=>t.name===e)?.platformExecution;if(t?.kind===`device-runtime`)return(`uses`in t?t.uses:[t.use]).map(e=>e.required)}function js(){return Q.filter(e=>e.catalog.group===`public`&&e.platformExecution.kind===`device-runtime`).map(e=>e.name).sort()}const $=new Map(Q.map(e=>[e.name,e]));function Ms(e){return Ds.has(e)}function Ns(e){return e.mcpExposed??Ds.has(e.name)}function Ps(e){return e.mcpExposed&&Ms(e.name)}function Fs(e){return e.catalog.group}function Is(e){return e.catalog.key??e.name}const Ls=new Map(Array.from($.values(),e=>[e.name,e.targetReadiness?{...e.timeoutPolicy,targetReadiness:e.targetReadiness}:e.timeoutPolicy])),Rs=new Map(Q.map(e=>[e.name,e.deviceClaimPolicy])),zs=new Map(Array.from($.values()).flatMap(e=>e.responseDataTransform?[[e.name,e.responseDataTransform]]:[]));function Bs(e){if(e!==void 0)return $.get(e)?.postActionObservation}function Vs(e){return Bs(e)!==void 0}function Hs(e){return e!==void 0&&$.get(e)?.targetReadiness===`budgeted`}function Us(e){return Bs(e)===`settle-and-verify`}function Ws(e){return e===void 0?N:Ls.get(e)??N}function Gs(e){return e===void 0?`require-owner`:Rs.get(e)??`require-owner`}function Ks(e){if(e!==void 0)return zs.get(e)}function qs(e){return e===void 0?!1:$.get(e)?.recordsSessionAction??!1}function Js(e){if(e!==void 0)return $.get(e)?.frameworkTier}function Ys(e){return $.get(e)?.targetIdentityVerification}function Xs(e){let t=$.get(e.command);if(t?.recordsSessionAction)return typeof t.recordingEffect==`function`?t.recordingEffect(e):t.recordingEffect}function Zs(){return[...new Set(Array.from(zs.values()).flatMap(e=>Object.keys(e.fields)))].sort()}const Qs={apps:{appsFilter:`user-installed`}};function $s(e,t){if(!e||!Ms(e))return!1;let n=Qs[e];if(!n)return!1;let r=!1;for(let e of Object.keys(n))t[e]===void 0&&(t[e]=n[e],r=!0);return r}function ec(e){let t=[];for(let n of e)n.daemon&&t.push({command:n.name,...n.daemon,replayScopedAction:n.recordsSessionAction});return t}function tc(e){return e.filter(e=>e.batchable).map(e=>e.name)}const nc=tc(Q),rc=new Set([`batch`,`replay`]),ic=[`command`,`positionals`,`input`,`flags`,`runtime`],ac=[`platform`,`target`,`device`,`udid`,`serial`,`verbose`,`out`,`testIme`],oc=`Session, daemon, connection, and host tooling commands are excluded from batch — they own lifecycle a batch cannot carry — and batch and replay never nest. Run an excluded command on its own; every other device command is available as a step.`,sc=new Set(nc);function cc(e){return sc.has(e)}function lc(e){return typeof e==`string`?e.trim().toLowerCase():``}function uc(e){let t=lc(e);return cc(t)?t:void 0}function dc(t,n,r=oc){let i=uc(t);if(i!==void 0)return i;throw new e(`INVALID_ARGS`,`Batch step ${n} command is not available through command batch: ${String(t)}`,{hint:r})}function fc(t,n){if(rc.has(t))throw new e(`INVALID_ARGS`,`Batch step ${n} cannot run ${t}.`)}export{di as $,Tt as $n,ne as $r,Ar as $t,Oo as A,nn as An,De as Ar,Ci as At,Qa as B,O as Bn,me as Br,Sa as Bt,qs as C,Dn as Cn,x as Cr,ci as Ct,Go as D,wn as Dn,be as Dr,ii as Dt,Ys as E,Tn as En,g as Er,ki as Et,go as F,on as Fn,_e as Fr,ea as Ft,Ja as G,Vt as Gn,ce as Gr,L as Gt,eo as H,Ut as Hn,ue as Hr,mi as Ht,co as I,an as In,ve as Ir,Ea as It,no as J,Bt as Jn,ie as Jr,$r as Jt,Ka as K,Yt as Kn,se as Kr,oi as Kt,uo as L,gn as Ln,p as Lr,ta as Lt,To as M,fn as Mn,Ce as Mr,wi as Mt,po as N,pn as Nn,m as Nr,Ei as Nt,Uo as O,Cn as On,Ee as Or,xi as Ot,yo as P,sn as Pn,ge as Pr,Aa as Pt,Wa as Q,pt as Qn,ee as Qr,zr as Qt,ro as R,vn as Rn,pe as Rr,xa as Rt,Xs as S,Rn as Sn,v as Sr,ji as St,Ws as T,kn as Tn,Oe as Tr,si as Tt,to as U,$t as Un,le as Ur,pi as Ut,io as V,qt as Vn,de as Vr,Bi as Vt,Ga as W,Xt as Wn,fe as Wr,Na as Wt,Ha as X,Wt as Xn,ae as Xr,kr as Xt,Ya as Y,Gt as Yn,l as Yr,Ir as Yt,Ua as Z,Kt as Zn,f as Zr,jr as Zt,Os as _,Wn as _n,Ye as _r,ba as _t,fc as a,gr as an,w as ar,ja as at,Gs as b,Un as bn,Pe as br,Gi as bt,uc as c,M as cn,st as cr,ni as ct,Hs as d,er as dn,at as dr,Ai as dt,te as ei,Mr as en,Ct as er,_i as et,Q as f,Zn as fn,it as fr,Oi as ft,Zs as g,Hn as gn,Xe as gr,Ni as gt,Us as h,nr as hn,qe as hr,I as ht,nc as i,_r as in,T as ir,fi as it,So as j,dn as jn,xe as jr,Ti as jt,Vo as k,On as kn,Te as kr,Si as kt,ec as l,tr as ln,nt as lr,Pi as lt,Vs as m,Qn as mn,ot as mr,bi as mt,ic as n,o as ni,Pr as nn,Ot as nr,hi as nt,lc as o,yr as on,ct as or,ui as ot,As as p,$n as pn,rt as pr,yi as pt,qa as q,Jt as qn,re as qr,ti as qt,ac as r,P as rn,St as rr,gi as rt,dc as s,ir as sn,ut as sr,Zr as st,oc as t,d as ti,Nr as tn,Et as tr,vi as tt,$s as u,Kn as un,tt as ur,Mi as ut,ks as v,zn as vn,Me as vr,ei as vt,Ks as w,En as wn,y as wr,li as wt,Js as x,Ln as xn,b as xr,ri as xt,js as y,Vn as yn,Ie as yr,ai as yt,Za as z,en as zn,he as zr,Ra as zt};
|
|
@@ -368,6 +368,37 @@ type SnapshotKeyboardBandFact =
|
|
|
368
368
|
kind: 'unmeasurable';
|
|
369
369
|
reason: string;
|
|
370
370
|
};
|
|
371
|
+
/**
|
|
372
|
+
* The box a capture's node rects are measured in, published beside them so a reader never has to
|
|
373
|
+
* infer it from the tree (#3182). Two dimensions and no origin: the field answers "how big is the
|
|
374
|
+
* surface these numbers describe", which is the only question a consumer that places points on the
|
|
375
|
+
* tree cannot answer from the tree itself when the tree is empty or sparse.
|
|
376
|
+
*
|
|
377
|
+
* It is the box of the surface the producer read, which is not always the physical panel. iOS
|
|
378
|
+
* reports the app window in the app's orientation space (ADR 0004), which is smaller than the panel
|
|
379
|
+
* under iPad Split View and is never the foldable panel `fold` reports (ADR 0025); Android and the
|
|
380
|
+
* Apple TV runner report the screen the bounds were measured on. A producer that has no box of its
|
|
381
|
+
* own to answer with leaves the field off: the macOS desktop, whose rects are absolute in window
|
|
382
|
+
* space and answer to no single frame, and the web and Linux backends, which read a tree without
|
|
383
|
+
* reading a screen. A consumer that needs a *gesture* band inside those bounds still reads `keyboard`
|
|
384
|
+
* and the app window, which is #1821's remaining scope.
|
|
385
|
+
*
|
|
386
|
+
* Absent means the producer measured no box. Absence is never `0`: `snapshotViewportSizeFrom` from
|
|
387
|
+
* `@agent-device/kernel/rect` is the sole construction path and refuses a box
|
|
388
|
+
* `isPositiveFiniteRect` refuses. The brand makes that invariant part of the type: a plain
|
|
389
|
+
* `{ width, height }` literal — including one with a zero in it — is not assignable here, so only
|
|
390
|
+
* modules that import the brand token from `kernel/rect` can build one, and they build it through
|
|
391
|
+
* the guard.
|
|
392
|
+
*/
|
|
393
|
+
type SnapshotViewportSize = {
|
|
394
|
+
width: number;
|
|
395
|
+
height: number;
|
|
396
|
+
} & SnapshotViewportSizeBrand;
|
|
397
|
+
/** @internal Exported only so `kernel/rect` can mint values of {@link SnapshotViewportSize}. */
|
|
398
|
+
declare const SNAPSHOT_VIEWPORT_SIZE_BRAND: unique symbol;
|
|
399
|
+
type SnapshotViewportSizeBrand = {
|
|
400
|
+
readonly [SNAPSHOT_VIEWPORT_SIZE_BRAND]: 'validated';
|
|
401
|
+
};
|
|
371
402
|
type SnapshotNode = RawSnapshotNode & {
|
|
372
403
|
ref: string;
|
|
373
404
|
/**
|
|
@@ -504,6 +535,13 @@ type SnapshotState = {
|
|
|
504
535
|
* needs no geometry to be plausible (#2660). Absent means the guard measures the tree as before.
|
|
505
536
|
*/
|
|
506
537
|
keyboard?: SnapshotKeyboardBandFact;
|
|
538
|
+
/**
|
|
539
|
+
* The box these rects are measured in, as the producer measured it (#3182). The state is the carrier
|
|
540
|
+
* the response reads, so the stored tree and the published `viewport` are one fact rather than two:
|
|
541
|
+
* a consumer of a stored capture — a later diff, a re-read of the session's tree — gets the box the
|
|
542
|
+
* producer measured instead of inferring one from the largest rect still on screen.
|
|
543
|
+
*/
|
|
544
|
+
viewport?: SnapshotViewportSize;
|
|
507
545
|
/**
|
|
508
546
|
* iOS: this capture's own command found the session app out of foreground and the runner
|
|
509
547
|
* activated it before answering, so an earlier observation in the session described whatever held
|
|
@@ -568,6 +606,8 @@ type DeviceInfo = {
|
|
|
568
606
|
kind: DeviceKind;
|
|
569
607
|
target?: DeviceTarget;
|
|
570
608
|
appleOs?: AppleOS;
|
|
609
|
+
model?: string;
|
|
610
|
+
osVersion?: string;
|
|
571
611
|
booted?: boolean;
|
|
572
612
|
simulatorSetPath?: string;
|
|
573
613
|
iosPhysicalDeviceBackend?: 'coredevice' | 'xctest';
|
|
@@ -608,7 +648,7 @@ type LocalInstallSource = Extract<DaemonInstallSource, {
|
|
|
608
648
|
}>;
|
|
609
649
|
declare const DAEMON_LOCK_POLICIES: readonly ['reject', 'strip'];
|
|
610
650
|
type DaemonLockPolicy = (typeof DAEMON_LOCK_POLICIES)[number];
|
|
611
|
-
declare const LEASE_BACKENDS: readonly ['ios-simulator', 'ios-instance', 'android-instance', 'harmonyos-instance'];
|
|
651
|
+
declare const LEASE_BACKENDS: readonly ['ios-simulator', 'ios-instance', 'android-instance', 'harmonyos-instance', 'macos-app'];
|
|
612
652
|
type LeaseBackend = (typeof LEASE_BACKENDS)[number];
|
|
613
653
|
declare const DAEMON_SERVER_MODES: readonly ['socket', 'http', 'dual'];
|
|
614
654
|
type DaemonServerMode = (typeof DAEMON_SERVER_MODES)[number];
|
|
@@ -626,15 +666,20 @@ type DaemonRequestMeta = {
|
|
|
626
666
|
includeCost?: boolean;
|
|
627
667
|
responseLevel?: ResponseLevel;
|
|
628
668
|
cwd?: string;
|
|
669
|
+
/** The client's `DEVELOPER_DIR`, applied to the commands a local daemon spawns for this request. */
|
|
670
|
+
developerDir?: string;
|
|
629
671
|
sessionExplicit?: boolean;
|
|
630
672
|
tenantId?: string;
|
|
631
673
|
runId?: string;
|
|
632
674
|
leaseId?: string;
|
|
633
675
|
leaseTtlMs?: number;
|
|
676
|
+
leaseRetainOnClose?: boolean;
|
|
634
677
|
leaseBackend?: LeaseBackend;
|
|
635
678
|
leaseProvider?: string;
|
|
636
679
|
deviceKey?: string;
|
|
637
680
|
clientId?: string;
|
|
681
|
+
/** A local caller's digest of its lease-provider credential variables, compared on allocation. */
|
|
682
|
+
providerCredentialFingerprint?: string;
|
|
638
683
|
sessionIsolation?: SessionIsolationMode;
|
|
639
684
|
uploadedArtifactId?: string;
|
|
640
685
|
clientArtifactPaths?: Record<string, string>;
|
|
@@ -690,4 +735,4 @@ type JsonRpcRequestEnvelope<TParams = unknown> = {
|
|
|
690
735
|
params?: TParams;
|
|
691
736
|
};
|
|
692
737
|
//#endregion
|
|
693
|
-
export { Rect as A,
|
|
738
|
+
export { normalizeError as $, Rect as A, SnapshotViewportSize as B, Platform as C, IosTargetActivation as D, AppleApplicationState as E, SnapshotOptions as F, AppErrorDetails as G, centerOfRect as H, SnapshotProvenance as I, KnownAppErrorCode as J, DaemonError as K, SnapshotQualityVerdict as L, SnapshotCommandOptionFields as M, SnapshotKeyboardBandFact as N, Point as O, SnapshotNode as P, normalizeAgentDeviceError as Q, SnapshotState as R, DeviceTarget as S, PublicPlatform as T, AppError as U, SnapshotVisibility as V, AppErrorCode as W, defaultHintForCode as X, NormalizedError as Y, isAgentDeviceError as Z, SessionIsolationMode as _, DaemonRequest as a, DeviceInfo as b, DaemonServerMode as c, JsonRpcRequestEnvelope as d, LeaseBackend as f, ResponseLevel as g, ResponseCost as h, DaemonLockPolicy as i, ScreenshotOverlayRef as j, RawSnapshotNode as k, DaemonTransportPreference as l, NetworkIncludeMode as m, DaemonArtifactType as n, DaemonResponse as o, LocalInstallSource as p, ErrorCause as q, DaemonInstallSource as r, DaemonResponseData as s, DaemonArtifact as t, JsonRpcId as u, SessionRuntimeHints as v, PlatformSelector as w, DeviceKind as x, AppleOS as y, SnapshotUnchanged as z };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";const t=/(token|secret|password|authorization|cookie|api[_-]?key|access[_-]?key|private[_-]?key|user[_-]?code|device[_-]?code|refresh[_-]?credential)/i,n=/\b(?:bearer\s+[a-z0-9._-]+|adc_(?:agent|live|refresh|cli)_[a-z0-9._-]+)\b/gi,r=/\b([a-z0-9_-]*(?:api[_-]?key|token|secret|password|user[_-]?code|device[_-]?code|refresh[_-]?credential)[a-z0-9_-]*)(\s*[=:]\s*)("[^"]*"|'[^']*'|\S+)/gi,i=/https?:\/\/[^\s"'<>]+/gi
|
|
2
|
-
`)){let e=t.trim();if(!e||ae.some(t=>t.test(e)))continue;let n=e.replace(oe,``).trim();if(n)return n.length>200?`${n.slice(0,200)}...`:n}return null}function j(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function M(e){if(!e||typeof e!=`object`)return;let{session:t,requestId:n}=e;if(typeof t==`string`&&typeof n==`string`&&t.length!==0&&n.length!==0)return{session:t,requestId:n}}function ce(e,t){let n=e?.[t];return typeof n==`boolean`?n:void 0}const le=[`startupRuleMatched`,`startupHostDeadlineHit`];function ue(e){if(!e)return;let t={...e};for(let e of le)delete t[e];return delete t.hint,delete t.diagnosticId,delete t.logPath,delete t.logPathUnavailable,delete t.diagnosticsRecord,delete t.retriable,delete t.supportedOn,Object.keys(t).length>0?t:void 0}const de={DEVICE_IN_USE:!0};function fe(e){return m.includes(e)}function N(e){return fe(e)?de[e]:void 0}function P(e){switch(e){case`INVALID_ARGS`:return`Check command arguments and run --help for usage examples.`;case`SESSION_NOT_FOUND`:return`Run open first or pass an explicit device selector.`;case`TOOL_MISSING`:return`Install required platform tooling and ensure it is available in PATH.`;case`DEVICE_NOT_FOUND`:return`Verify the target device is booted/connected and selectors match.`;case`APP_NOT_INSTALLED`:return`Run apps to discover the exact installed package or bundle id, or install the app before open.`;case`UNSUPPORTED_OPERATION`:return`This command is not available for the selected platform/device.`;case`UNSUPPORTED_PLATFORM`:return`This platform is not supported for the requested operation; run devices to inspect available targets.`;case`AMBIGUOUS_MATCH`:return`Multiple candidates matched. Narrow the query or pass an exact identifier.`;case`DEVICE_IN_USE`:return`The device is busy with another agent-device request; retry once it frees up.`;case`REPLAY_DIVERGENCE`:return`Read details.divergence (screen/suggestions) for repair context, or rerun with --json for the full report.`;case`REPAIR_SESSION_EXPIRED`:return`The --save-script repair session was reaped before it was finalized; re-run replay <script> --save-script from the start.`;case`REPAIR_COMMIT_FAILED`:return`The repair transaction completed, but committing its healed script failed at teardown (no-clobber refusal or a filesystem error); inspect the target path/permissions, then re-run replay <script> --save-script to retry.`;case`NOT_IMPLEMENTED`:return`This command is part of the planned API but is not implemented yet.`;case`COMMAND_FAILED`:return`Retry with --debug and inspect diagnostics log for details.`;case`UNAUTHORIZED`:return`Refresh daemon metadata and retry the command.`;case`UNKNOWN`:return`Unexpected internal error. Retry with --debug and report the diagnostics log if it persists.`;default:return`Retry with --debug and inspect diagnostics log for details.`}}function F(e,t,n={}){return e.details={...e.details,...n,dispatched:t},e}function I(e,t){if(t===0)return e;let n=e?.dispatchedSteps;return{...e,dispatchedSteps:t+(typeof n==`number`?n:0),dispatched:`unknown`}}function L(e,t){return e instanceof y&&(e.details=I(e.details,t)),e}function R(e,t){return e.details?.dispatched===void 0?F(e,t):e}const z={interactiveOnly:`snapshotInteractiveOnly`,depth:`snapshotDepth`,scope:`snapshotScope`,raw:`snapshotRaw`,customActions:`snapshotCustomActions`,forceFull:`snapshotForceFull`,includeHiddenContentHints:`snapshotIncludeHiddenContentHints`,preferredBackend:`snapshotPreferredBackend`},pe=[`interactiveOnly`,`depth`,`scope`,`raw`,`customActions`,`forceFull`],me=[`interactiveOnly`,`preferredBackend`,`depth`,`scope`,`raw`,`customActions`,`includeHiddenContentHints`],he=[`depth`,`interactiveOnly`,`raw`,`scope`,`customActions`];function B(e,t){return Object.fromEntries(t.map(t=>[t,e?.[z[t]]]))}function ge(e,t){return Object.fromEntries(t.flatMap(t=>{let n=e?.[t];return n===void 0?[]:[[z[t],n]]}))}const V={application:`application`,navigationbar:`navigation-bar`,tabbar:`tab-bar`,button:`button`,imagebutton:`button`,link:`link`,cell:`cell`,statictext:`text`,checkedtextview:`text`,textbox:`text-field`,textfield:`text-field`,edittext:`text-field`,textarea:`text-view`,switch:`switch`,slider:`slider`,image:`image`,imageview:`image`,webview:`webview`,framelayout:`group`,linearlayout:`group`,relativelayout:`group`,constraintlayout:`group`,viewgroup:`group`,view:`group`,listview:`list`,recyclerview:`list`,collectionview:`collection`,searchfield:`search`,heading:`heading`,activityindicator:`activity-indicator`,progressindicator:`progress-indicator`,segmentedcontrol:`segmented-control`,group:`group`,window:`window`,checkbox:`checkbox`,radio:`radio`,menuitem:`menu-item`,toolbar:`toolbar`,scrollarea:`scroll-area`,scrollview:`scroll-area`,nestedscrollview:`scroll-area`,table:`table`};function _e(e){return Object.prototype.hasOwnProperty.call(V,e)?V[e]:void 0}function H(e){let t=e,n=e.replaceAll(/XCUIElementType/gi,``).toLowerCase(),r=t.includes(`.`)&&(t.startsWith(`android.`)||t.startsWith(`androidx.`)||t.startsWith(`com.`));return n.includes(`.`)&&(n=n.replace(/^android\.widget\./,``).replace(/^android\.view\./,``).replace(/^android\.webkit\./,``).replace(/^androidx\./,``).replace(/^com\.google\.android\./,``).replace(/^com\.android\./,``),r&&n.includes(`.`)&&(n=n.slice(n.lastIndexOf(`.`)+1))),n===`textview`?r?`text`:`text-view`:_e(n)||n||`element`}function ve(e){if(e===void 0||e.backend===void 0)return{};switch(e.backend){case`xctest`:return{backend:e.backend,producer:e.producer};case`android`:return{backend:e.backend,producer:e.producer};case`harmonyos-arkui`:return{backend:e.backend,producer:e.producer};case`macos-helper`:return{backend:e.backend,producer:e.producer};case`linux-atspi`:return{backend:e.backend,producer:e.producer};case`web`:return{backend:e.backend,producer:e.producer}}}function ye(e){return e===`xctest`||e===`android`||e===`harmonyos-arkui`||e===`macos-helper`||e===`linux-atspi`||e===`web`}function be(e){return e===void 0||e===`xctest`||e===`android`||e===`harmonyos-arkui`}const xe=[`bundle_changed`,`stale_target`,`missing_after_wait`,`interaction_foreground_guard`];function Se(e){return typeof e==`string`&&xe.includes(e)}const U=[`unknown`,`notRunning`,`runningBackgroundSuspended`,`runningBackground`,`runningForeground`];Object.freeze(U.filter(e=>e!==`runningForeground`));function Ce(e){return typeof e==`string`&&U.includes(e)}function we(e,t){return t.postGestureOutcome??=e.postGestureOutcome,t}function Te(e){return e.map((e,t)=>({...e,ref:e.ref??`e${t+1}`,kind:H(e.type??`Element`)}))}const Ee=/^~s(\d+)$/,De=`Refs look like @e12, optionally pinned to the snapshot generation that minted them: @e12~s3 (the ref, then "~s" and the refsGeneration reported by the issuing snapshot/find response).`;function W(e){let t=e.trim(),n=t.indexOf(`~`);if(n===-1)return{base:t};let r=Ee.exec(t.slice(n));return!r||n===0?null:{base:t.slice(0,n),generation:Number(r[1])}}function Oe(e){let t=W(e);if(!t)return null;let n=t.base;return n.startsWith(`@`)?n.slice(1)||null:n.startsWith(`e`)?n:null}function ke(e,t){return e.find(e=>e.ref===t)??null}function Ae(e){return JSON.stringify({interactiveOnly:e?.interactiveOnly===!0,depth:typeof e?.depth==`number`?e.depth:null,scope:e?.scope?.trim()||null,raw:e?.raw===!0,customActions:e?.customActions===!0})}function je(e){if(e)return B(e,he)}function Me(e){return{x:Math.round(e.x+e.width/2),y:Math.round(e.y+e.height/2)}}const G=[`ios`,`android`,`harmonyos`];function Ne(e){return G.some(t=>t===e)}const K={ios:`ios-instance`,android:`android-instance`,harmonyos:`harmonyos-instance`};function Pe(e){return e===void 0?void 0:K[e]}const Fe=new Map(Object.entries(K).flatMap(([e,t])=>t===void 0?[]:[[t,e]]));function Ie(e){return Fe.get(e)}const Le=[`summary`,`headers`,`body`,`all`],Re=[`digest`,`default`,`full`];function ze(e){return e!==void 0&&e!=="default"}function q(e,t,n,r){return{ok:!1,error:{code:e,message:t,...r?.hint?{hint:r.hint}:{},...r?.retriable===void 0?{}:{retriable:r.retriable},...n?{details:n}:{}}}}const J=`No active session. Run open first.`;function Be(){return q(`SESSION_NOT_FOUND`,J)}function Y(e){return{parse(t){return e(t,`$`)}}}function X(e,t){throw Error(`${e}: ${t}`)}function Z(e,t){return(!e||typeof e!=`object`||Array.isArray(e))&&X(t,`Expected an object`),e}function Ve(e,t){return typeof e!=`string`&&X(t,`Expected a string`),e}function He(e,t){return Number.isInteger(e)||X(t,`Expected an integer`),e}function Ue(e,t){return Array.isArray(e)||X(t,`Expected an array`),e}function Q(e,t,n){let r=e[t];return r===void 0?void 0:Ve(r,`${n}.${t}`)}function We(e,t,n){let r=e[t];if(r!==void 0)return Ue(r,`${n}.${t}`).map((e,r)=>Ve(e,`${n}.${t}[${String(r)}]`))}function Ge(e,t,n){let r=e[t];return r===void 0?void 0:He(r,`${n}.${t}`)}function $(e,t,n){let r=e[t];return r===void 0?void 0:Z(r,`${n}.${t}`)}function Ke(e,t,n,r){let i=e[t];if(i!==void 0)return(typeof i!=`string`||!n.includes(i))&&X(`${r}.${t}`,`Expected one of: ${n.join(`, `)}`),i}const qe=Y((e,t)=>{let n=Z(e,t);return{platform:Ke(n,`platform`,G,t),metroHost:Q(n,`metroHost`,t),metroPort:Ge(n,`metroPort`,t),bundleUrl:Q(n,`bundleUrl`,t),launchUrl:Q(n,`launchUrl`,t)}});function Je(e,t){let n=e.id;return n==null||typeof n!=`string`&&typeof n!=`number`&&X(`${t}.id`,`Expected a string, number, or null`),n}const Ye=Y((e,t)=>{let n=Z(e,t);return{jsonrpc:Q(n,`jsonrpc`,t),id:Je(n,t),method:Q(n,`method`,t),params:n.params}}),Xe=Y((e,t)=>{let n=Z(e,t);return{token:Q(n,`token`,t),session:Q(n,`session`,t),command:Q(n,`command`,t),positionals:We(n,`positionals`,t),input:$(n,`input`,t),flags:$(n,`flags`,t),runtime:$(n,`runtime`,t),meta:$(n,`meta`,t)}});export{b as $,ve as A,R as B,Ce as C,ge as D,Oe as E,C as F,T as G,p as H,P as I,M as J,k as K,I as L,be as M,y as N,B as O,D as P,ne as Q,F as R,we as S,ye as T,O as U,E as V,w as W,g as X,_ as Y,N as Z,Te as _,qe as a,ke as b,Ne as c,Be as d,h as et,Ie as f,pe as g,me as h,Xe as i,W as j,je as k,Ye as l,De as m,J as n,o as nt,q as o,U as p,A as q,Re as r,ze as s,Le as t,a as tt,Pe as u,Ae as v,Se as w,H as x,Me as y,L as z};
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";const t=/(token|secret|password|authorization|cookie|api[_-]?key|access[_-]?key|private[_-]?key|user[_-]?code|device[_-]?code|refresh[_-]?credential)/i,n=/\b(?:bearer\s+[a-z0-9._-]+|adc_(?:agent|live|refresh|cli)_[a-z0-9._-]+)\b/gi,r=/\b([a-z0-9_-]*(?:api[_-]?key|token|secret|password|user[_-]?code|device[_-]?code|refresh[_-]?credential)[a-z0-9_-]*)(\s*[=:]\s*)("[^"]*"|'[^']*'|\S+)/gi,i=/https?:\/\/[^\s"'<>]+/gi,a=8192,o=`...<truncated>`;function s(e){return c(e,new WeakSet)}function ee(e){if(!e||typeof e!=`object`)return;let t=e;if(typeof t.message==`string`&&t.message.length!==0)return s({message:t.message,...typeof t.code==`string`&&t.code.length>0?{code:t.code}:{}})}function c(e,n,r){if(e==null)return e;if(typeof e==`string`)return l(e,r);if(typeof e!=`object`)return e;if(n.has(e))return`[Circular]`;if(n.add(e),Array.isArray(e))return e.map(e=>c(e,n));let i={};for(let[r,a]of Object.entries(e)){if(t.test(r)){i[r]=`[REDACTED]`;continue}i[r]=c(a,n,r)}return i}function l(e,i){let a=e.trim();if(!a)return u(e,i);if(i&&t.test(i))return`[REDACTED]`;let o=d(a);return o=o.replace(n,`[REDACTED]`),o=o.replace(r,(e,t,n,r,i,a)=>p({key:t,separator:n,rawValue:r,offset:i,input:a})||f(r)?e:`${t}${n}[REDACTED]`),u(o,i)}function u(e,t){if(t===`stderr`){if(e.length<=a)return e;let t=`\n${o}\n`,n=a-t.length,r=Math.ceil(n/2);return`${e.slice(0,r)}${t}${e.slice(-(n-r))}`}return e.length<=400?e:`${e.slice(0,386)}${o}`}function d(e){return e.replace(i,e=>m(e)??e)}function f(e){return/^adc_(?:agent|live|refresh|cli)_\.\.\.$/i.test(e)}function p(e){if(e.key.toLowerCase()!==`token`||!e.separator.includes(`:`))return!1;try{return new URL(e.rawValue).pathname.replace(/\/+$/,``)===`/api-keys`&&/(?:^|\b)(?:service\/)?api\s+$/i.test(e.input.slice(0,e.offset))}catch{return!1}}function m(e){try{let t=new URL(e);return t.search&&=`?REDACTED`,(t.username||t.password)&&(t.username=`REDACTED`,t.password=`REDACTED`),t.toString()}catch{return null}}var te=e({AppError:()=>b,KNOWN_APP_ERROR_CODES:()=>h,PRE_DISPATCH_REFUSAL_REASONS:()=>S,asAppError:()=>D,createRequestCanceledError:()=>se,defaultHintForCode:()=>P,detailsAfterDispatchedSteps:()=>I,discloseDispatch:()=>F,discloseDispatchAfterSteps:()=>L,discloseUnclassifiedDispatch:()=>R,errorMessage:()=>T,isAgentDeviceError:()=>O,isRequestCanceledDetails:()=>C,isRequestCanceledError:()=>w,normalizeAgentDeviceError:()=>k,normalizeError:()=>A,readDiagnosticsRecordRef:()=>M,readElementMatchCandidateRefs:()=>v,readErrorCandidateViews:()=>_,retriableForErrorCode:()=>N,sessionAppRequiredDetails:()=>re,sessionOrDeviceSelectorRequiredDetails:()=>ie,summarizeCommandAttemptFailures:()=>E,throwDaemonError:()=>x,toAppErrorCode:()=>g});const h=[`INVALID_ARGS`,`DEVICE_NOT_FOUND`,`DEVICE_IN_USE`,`TOOL_MISSING`,`APP_NOT_INSTALLED`,`UNSUPPORTED_PLATFORM`,`UNSUPPORTED_OPERATION`,`NOT_IMPLEMENTED`,`COMMAND_FAILED`,`SESSION_NOT_FOUND`,`UNAUTHORIZED`,`AMBIGUOUS_MATCH`,`REPLAY_DIVERGENCE`,`REPAIR_SESSION_EXPIRED`,`REPAIR_COMMIT_FAILED`,`UNKNOWN`];function g(e,t=`COMMAND_FAILED`){return typeof e==`string`&&e.length>0?e:t}function _(e){let t=y(e?.candidates),n=[];if(t.length>0){let r=typeof e?.matches==`number`?e.matches:t.length,i=typeof e?.refsGeneration==`number`?e.refsGeneration:void 0;n.push({kind:`element-match`,candidates:t,matches:r,...i===void 0?{}:{refsGeneration:i}})}let r=ne(e?.devices);return r.length>0&&n.push({kind:`device`,devices:r}),n}function v(e){return y(e?.candidates).flatMap(e=>{let t=/^@(e\d+)(?:~s\d+)?(?:\s|$)/.exec(e);return t?.[1]?[t[1]]:[]})}function y(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function ne(e){return Array.isArray(e)?e.filter(e=>typeof e==`object`&&!!e&&typeof e.id==`string`&&typeof e.name==`string`):[]}var b=class extends Error{code;details;cause;constructor(e,t,n,r){super(t),this.code=e,this.details=n,this.cause=r}};function x(e){throw new b(g(e.code),e.message,{...e.details??{},hint:e.hint,diagnosticId:e.diagnosticId,logPath:e.logPath,logPathUnavailable:e.logPathUnavailable,diagnosticsRecord:e.diagnosticsRecord,retriable:e.retriable,supportedOn:e.supportedOn},e.cause)}const S={sessionAppRequired:`session_app_required`,sessionOrDeviceSelectorRequired:`session_or_device_selector_required`};function re(){return{reason:S.sessionAppRequired,dispatched:`no`}}function ie(){return{reason:S.sessionOrDeviceSelectorRequired,dispatched:`no`}}const ae=`request_canceled`,oe=`request canceled`;function se(e,t){return new b(`COMMAND_FAILED`,oe,{hint:`The request was canceled intentionally (explicit cancel or client disconnect) — no retry is needed unless the cancellation was unintended.`,...e,reason:ae},t)}function C(e){return e?.reason===ae}function w(e){return!(e instanceof b)||e.code!==`COMMAND_FAILED`?!1:C(e.details)?!0:e.message===oe}function T(e){return e instanceof Error?e.message:String(e)}function E(e){return e.map(e=>({args:e.args.join(` `),exitCode:e.exitCode,stderr:e.stderr.slice(0,400)}))}function D(e,t=`UNKNOWN`){return e instanceof b?e:e instanceof Error?new b(t,e.message,void 0,e):new b(t,`Unknown error`,{err:e})}function O(e){return e instanceof b}function k(e,t={}){return A(e,t)}function A(e,t={}){let n=D(e),r=n.details?s(n.details):void 0,i=j(r,`diagnosticId`)??t.diagnosticId,a=j(r,`logPath`)??t.logPath,o=j(r,`logPathUnavailable`),c=M(r?.diagnosticsRecord)??t.diagnosticsRecord,l=j(r,`hint`)??P(n.code),u=pe(r,`retriable`)??N(n.code),d=j(r,`supportedOn`),f=he(r),p=le(n.code,n.message,r),m=ee(n.cause);return{code:n.code,message:p,...m===void 0?{}:{cause:m},hint:l,diagnosticId:i,logPath:a,...o===void 0?{}:{logPathUnavailable:o},...c===void 0?{}:{diagnosticsRecord:c},...u===void 0?{}:{retriable:u},...d===void 0?{}:{supportedOn:d},details:f}}const ce=/^\S+ exited with code -?\d+$/;function le(e,t,n){if(e!==`COMMAND_FAILED`||n?.processExitError!==!0)return t;let r=fe(typeof n?.stderr==`string`?n.stderr:``);return r?ce.test(t)?r:t.includes(r)?t:`${t}: ${r}`:t}const ue=[/^an error was encountered processing the command/i,/^underlying error\b/i,/^simulator device failed to complete the requested operation/i],de=/^(?:(?:adb|xcrun|simctl):\s*)?(?:error:\s*)?/i;function fe(e){for(let t of e.split(`
|
|
2
|
+
`)){let e=t.trim();if(!e||ue.some(t=>t.test(e)))continue;let n=e.replace(de,``).trim();if(n)return n.length>200?`${n.slice(0,200)}...`:n}return null}function j(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function M(e){if(!e||typeof e!=`object`)return;let{session:t,requestId:n}=e;if(typeof t==`string`&&typeof n==`string`&&t.length!==0&&n.length!==0)return{session:t,requestId:n}}function pe(e,t){let n=e?.[t];return typeof n==`boolean`?n:void 0}const me=[`startupRuleMatched`,`startupHostDeadlineHit`];function he(e){if(!e)return;let t={...e};for(let e of me)delete t[e];return delete t.hint,delete t.diagnosticId,delete t.logPath,delete t.logPathUnavailable,delete t.diagnosticsRecord,delete t.retriable,delete t.supportedOn,Object.keys(t).length>0?t:void 0}const ge={DEVICE_IN_USE:!0};function _e(e){return h.includes(e)}function N(e){return _e(e)?ge[e]:void 0}function P(e){switch(e){case`INVALID_ARGS`:return`Check command arguments and run --help for usage examples.`;case`SESSION_NOT_FOUND`:return`Run open first or pass an explicit device selector.`;case`TOOL_MISSING`:return`Install required platform tooling and ensure it is available in PATH.`;case`DEVICE_NOT_FOUND`:return`Verify the target device is booted/connected and selectors match.`;case`APP_NOT_INSTALLED`:return`Run apps to discover the exact installed package or bundle id, or install the app before open.`;case`UNSUPPORTED_OPERATION`:return`This command is not available for the selected platform/device.`;case`UNSUPPORTED_PLATFORM`:return`This platform is not supported for the requested operation; run devices to inspect available targets.`;case`AMBIGUOUS_MATCH`:return`Multiple candidates matched. Narrow the query or pass an exact identifier.`;case`DEVICE_IN_USE`:return`The device is busy with another agent-device request; retry once it frees up.`;case`REPLAY_DIVERGENCE`:return`Read details.divergence (screen/suggestions) for repair context, or rerun with --json for the full report.`;case`REPAIR_SESSION_EXPIRED`:return`The --save-script repair session was reaped before it was finalized; re-run replay <script> --save-script from the start.`;case`REPAIR_COMMIT_FAILED`:return`The repair transaction completed, but committing its healed script failed at teardown (no-clobber refusal or a filesystem error); inspect the target path/permissions, then re-run replay <script> --save-script to retry.`;case`NOT_IMPLEMENTED`:return`This command is part of the planned API but is not implemented yet.`;case`COMMAND_FAILED`:return`Retry with --debug and inspect diagnostics log for details.`;case`UNAUTHORIZED`:return`Refresh daemon metadata and retry the command.`;case`UNKNOWN`:return`Unexpected internal error. Retry with --debug and report the diagnostics log if it persists.`;default:return`Retry with --debug and inspect diagnostics log for details.`}}function F(e,t,n={}){return e.details={...e.details,...n,dispatched:t},e}function I(e,t){if(t===0)return e;let n=e?.dispatchedSteps;return{...e,dispatchedSteps:t+(typeof n==`number`?n:0),dispatched:`unknown`}}function L(e,t){return e instanceof b&&(e.details=I(e.details,t)),e}function R(e,t){return e.details?.dispatched===void 0?F(e,t):e}const z={interactiveOnly:`snapshotInteractiveOnly`,depth:`snapshotDepth`,scope:`snapshotScope`,raw:`snapshotRaw`,customActions:`snapshotCustomActions`,forceFull:`snapshotForceFull`,includeHiddenContentHints:`snapshotIncludeHiddenContentHints`,preferredBackend:`snapshotPreferredBackend`},ve=[`interactiveOnly`,`depth`,`scope`,`raw`,`customActions`,`forceFull`],ye=[`interactiveOnly`,`preferredBackend`,`depth`,`scope`,`raw`,`customActions`,`includeHiddenContentHints`],be=[`depth`,`interactiveOnly`,`raw`,`scope`,`customActions`];function B(e,t){return Object.fromEntries(t.map(t=>[t,e?.[z[t]]]))}function xe(e,t){return Object.fromEntries(t.flatMap(t=>{let n=e?.[t];return n===void 0?[]:[[z[t],n]]}))}const V={application:`application`,navigationbar:`navigation-bar`,tabbar:`tab-bar`,button:`button`,imagebutton:`button`,link:`link`,cell:`cell`,statictext:`text`,checkedtextview:`text`,textbox:`text-field`,textfield:`text-field`,edittext:`text-field`,textarea:`text-view`,switch:`switch`,slider:`slider`,image:`image`,imageview:`image`,webview:`webview`,framelayout:`group`,linearlayout:`group`,relativelayout:`group`,constraintlayout:`group`,viewgroup:`group`,view:`group`,listview:`list`,recyclerview:`list`,collectionview:`collection`,searchfield:`search`,heading:`heading`,activityindicator:`activity-indicator`,progressindicator:`progress-indicator`,segmentedcontrol:`segmented-control`,group:`group`,window:`window`,checkbox:`checkbox`,radio:`radio`,menuitem:`menu-item`,toolbar:`toolbar`,scrollarea:`scroll-area`,scrollview:`scroll-area`,nestedscrollview:`scroll-area`,table:`table`};function Se(e){return Object.prototype.hasOwnProperty.call(V,e)?V[e]:void 0}function H(e){let t=e,n=e.replaceAll(/XCUIElementType/gi,``).toLowerCase(),r=t.includes(`.`)&&(t.startsWith(`android.`)||t.startsWith(`androidx.`)||t.startsWith(`com.`));return n.includes(`.`)&&(n=n.replace(/^android\.widget\./,``).replace(/^android\.view\./,``).replace(/^android\.webkit\./,``).replace(/^androidx\./,``).replace(/^com\.google\.android\./,``).replace(/^com\.android\./,``),r&&n.includes(`.`)&&(n=n.slice(n.lastIndexOf(`.`)+1))),n===`textview`?r?`text`:`text-view`:Se(n)||n||`element`}function Ce(e){if(e===void 0||e.backend===void 0)return{};switch(e.backend){case`xctest`:return{backend:e.backend,producer:e.producer};case`android`:return{backend:e.backend,producer:e.producer};case`harmonyos-arkui`:return{backend:e.backend,producer:e.producer};case`macos-helper`:return{backend:e.backend,producer:e.producer};case`linux-atspi`:return{backend:e.backend,producer:e.producer};case`web`:return{backend:e.backend,producer:e.producer}}}function we(e){return e===`xctest`||e===`android`||e===`harmonyos-arkui`||e===`macos-helper`||e===`linux-atspi`||e===`web`}function Te(e){return e===void 0||e===`xctest`||e===`android`||e===`harmonyos-arkui`}const Ee=[`bundle_changed`,`stale_target`,`missing_after_wait`,`interaction_foreground_guard`];function De(e){return typeof e==`string`&&Ee.includes(e)}const U=[`unknown`,`notRunning`,`runningBackgroundSuspended`,`runningBackground`,`runningForeground`];Object.freeze(U.filter(e=>e!==`runningForeground`));function Oe(e){return typeof e==`string`&&U.includes(e)}function ke(e,t){return t.postGestureOutcome??=e.postGestureOutcome,t}function Ae(e){return e.map((e,t)=>({...e,ref:e.ref??`e${t+1}`,kind:H(e.type??`Element`)}))}const je=/^~s(\d+)$/,Me=`Refs look like @e12, optionally pinned to the snapshot generation that minted them: @e12~s3 (the ref, then "~s" and the refsGeneration reported by the issuing snapshot/find response).`;function W(e){let t=e.trim(),n=t.indexOf(`~`);if(n===-1)return{base:t};let r=je.exec(t.slice(n));return!r||n===0?null:{base:t.slice(0,n),generation:Number(r[1])}}function Ne(e){let t=W(e);if(!t)return null;let n=t.base;return n.startsWith(`@`)?n.slice(1)||null:n.startsWith(`e`)?n:null}function Pe(e,t){return e.find(e=>e.ref===t)??null}function Fe(e){return JSON.stringify({interactiveOnly:e?.interactiveOnly===!0,depth:typeof e?.depth==`number`?e.depth:null,scope:e?.scope?.trim()||null,raw:e?.raw===!0,customActions:e?.customActions===!0})}function Ie(e){if(e)return B(e,be)}function Le(e){return{x:Math.round(e.x+e.width/2),y:Math.round(e.y+e.height/2)}}const G=[`ios`,`android`,`harmonyos`];function Re(e){return G.some(t=>t===e)}const ze=[`ios-simulator`,`ios-instance`,`android-instance`,`harmonyos-instance`,`macos-app`],K={ios:`ios-instance`,android:`android-instance`,harmonyos:`harmonyos-instance`};function Be(e){return e===void 0?void 0:K[e]}const Ve=new Map([...Object.entries(K).flatMap(([e,t])=>t===void 0?[]:[[t,e]]),[`macos-app`,`macos`]]);function He(e){return Ve.get(e)}const Ue=[`summary`,`headers`,`body`,`all`],We=[`digest`,`default`,`full`];function Ge(e){return e!==void 0&&e!=="default"}function q(e,t,n,r){return{ok:!1,error:{code:e,message:t,...r?.hint?{hint:r.hint}:{},...r?.retriable===void 0?{}:{retriable:r.retriable},...n?{details:n}:{}}}}const J=`No active session. Run open first.`;function Ke(){return q(`SESSION_NOT_FOUND`,J)}function Y(e){return{parse(t){return e(t,`$`)}}}function X(e,t){throw Error(`${e}: ${t}`)}function Z(e,t){return(!e||typeof e!=`object`||Array.isArray(e))&&X(t,`Expected an object`),e}function qe(e,t){return typeof e!=`string`&&X(t,`Expected a string`),e}function Je(e,t){return Number.isInteger(e)||X(t,`Expected an integer`),e}function Ye(e,t){return Array.isArray(e)||X(t,`Expected an array`),e}function Q(e,t,n){let r=e[t];return r===void 0?void 0:qe(r,`${n}.${t}`)}function Xe(e,t,n){let r=e[t];if(r!==void 0)return Ye(r,`${n}.${t}`).map((e,r)=>qe(e,`${n}.${t}[${String(r)}]`))}function Ze(e,t,n){let r=e[t];return r===void 0?void 0:Je(r,`${n}.${t}`)}function $(e,t,n){let r=e[t];return r===void 0?void 0:Z(r,`${n}.${t}`)}function Qe(e,t,n,r){let i=e[t];if(i!==void 0)return(typeof i!=`string`||!n.includes(i))&&X(`${r}.${t}`,`Expected one of: ${n.join(`, `)}`),i}const $e=Y((e,t)=>{let n=Z(e,t);return{platform:Qe(n,`platform`,G,t),metroHost:Q(n,`metroHost`,t),metroPort:Ze(n,`metroPort`,t),bundleUrl:Q(n,`bundleUrl`,t),launchUrl:Q(n,`launchUrl`,t)}});function et(e,t){let n=e.id;return n==null||typeof n!=`string`&&typeof n!=`number`&&X(`${t}.id`,`Expected a string, number, or null`),n}const tt=Y((e,t)=>{let n=Z(e,t);return{jsonrpc:Q(n,`jsonrpc`,t),id:et(n,t),method:Q(n,`method`,t),params:n.params}}),nt=Y((e,t)=>{let n=Z(e,t);return{token:Q(n,`token`,t),session:Q(n,`session`,t),command:Q(n,`command`,t),positionals:Xe(n,`positionals`,t),input:$(n,`input`,t),flags:$(n,`flags`,t),runtime:$(n,`runtime`,t),meta:$(n,`meta`,t)}});export{re as $,Ie as A,L as B,ke as C,Ne as D,we as E,D as F,C as G,T as H,se as I,A as J,w as K,P as L,W as M,Te as N,xe as O,b as P,N as Q,I as R,H as S,De as T,te as U,R as V,O as W,v as X,M as Y,_ as Z,ve as _,nt as a,ee as at,Le as b,Ge as c,Be as d,ie as et,Ke as f,ye as g,Me as h,We as i,s as it,Ce as j,B as k,Re as l,U as m,Ue as n,x as nt,$e as o,He as p,k as q,J as r,g as rt,q as s,ze as t,E as tt,tt as u,Ae as v,Oe as w,Pe as x,Fe as y,F as z};
|