agent-device 0.21.0 → 0.21.2
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.0.apk → agent-device-android-ime-helper-0.21.2.apk} +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.2.apk.sha256 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.0.manifest.json → agent-device-android-ime-helper-0.21.2.manifest.json} +4 -4
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.2.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.2.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.0.manifest.json → agent-device-android-snapshot-helper-0.21.2.manifest.json} +6 -6
- package/apple/snapshot-bridge/README.md +58 -1
- package/apple/snapshot-bridge/SnapshotBridge.m +6 -0
- package/apple/snapshot-bridge/SnapshotBridgeCapture.h +25 -0
- package/apple/snapshot-bridge/SnapshotBridgeCapture.m +138 -0
- package/apple/snapshot-bridge/SnapshotBridgeRuntime.h +1 -0
- package/apple/snapshot-bridge/SnapshotBridgeRuntime.m +32 -3
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAXSnapshotBridge.h +12 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAXSnapshotBridge.m +20 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerScrollViewportPolicy.swift +413 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSelectorMatchPolicy.swift +15 -15
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSystemSurfaceHostPolicy.swift +72 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTapPointPolicy.swift +63 -14
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AXSnapshotFallback.swift +668 -82
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +48 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+BlockingSystemModalResolution.swift +39 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +1078 -211
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +290 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Environment.swift +1 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Exceptions.swift +10 -10
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Interaction.swift +250 -74
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Keyboard.swift +101 -42
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +13 -13
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +55 -43
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +71 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+PrivateAXPresentation.swift +144 -7
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScreenRecorder.swift +13 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScrollGesture.swift +216 -17
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SequenceExecution.swift +206 -22
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +289 -42
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotBackendCapabilities.swift +92 -22
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCapturePlan.swift +617 -122
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotTiming.swift +79 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedCommitDeadline.swift +71 -71
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedGesturePolicy.swift +92 -6
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +67 -67
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SystemModal.swift +4 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +17 -17
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +30 -30
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryReadiness.swift +31 -31
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextInputCandidatePolicy.swift +28 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextInputProbe.swift +101 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +19 -19
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +55 -17
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TvRemote.swift +26 -5
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +126 -75
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/RecordingExportSupport.swift +8 -12
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-overlay.swift +9 -9
- package/dist/src/absence-observation-errors.js +1 -0
- package/dist/src/adapter.js +1 -1
- package/dist/src/adb-executor.js +1 -1
- package/dist/src/adb-failure.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.d.ts +1 -1
- package/dist/src/ai-sdk.js +1 -1
- package/dist/src/alert-runtime.js +1 -1
- package/dist/src/android-input-ownership.js +1 -1
- package/dist/src/app-catalog.js +1 -1
- package/dist/src/app-deployment-resolution.js +1 -1
- package/dist/src/app-helpers.js +1 -1
- package/dist/src/app-inventory-contract.js +1 -1
- package/dist/src/app-inventory.js +1 -1
- package/dist/src/app-launch.js +2 -2
- package/dist/src/app-lifecycle.js +3 -3
- package/dist/src/app-lifecycle2.js +1 -1
- package/dist/src/app-log-files.js +1 -1
- package/dist/src/app-log-runtime2.js +3 -3
- package/dist/src/app-resolution.js +1 -1
- package/dist/src/apple-runner-platform.js +1 -0
- package/dist/src/application-lifecycle-interaction.js +1 -1
- package/dist/src/archive.js +1 -1
- package/dist/src/artifact-download.js +1 -1
- package/dist/src/auth-session.js +1 -1
- package/dist/src/auth.js +1 -1
- package/dist/src/back-mode.js +1 -1
- package/dist/src/backend-snapshot-options.js +1 -1
- package/dist/src/boot-diagnostics.js +1 -1
- package/dist/src/browser-launch.js +1 -0
- package/dist/src/capture.js +1 -1
- package/dist/src/catalog.js +1 -1
- package/dist/src/cli-config.js +1 -1
- package/dist/src/cli-help.js +30 -26
- 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-types.d.ts +28 -13
- package/dist/src/code-signature-cache.js +1 -1
- package/dist/src/code-signature.js +1 -1
- package/dist/src/command-metadata.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 +3 -3
- package/dist/src/contracts.d.ts +1 -1
- package/dist/src/contracts.js +1 -1
- package/dist/src/daemon-client-lifecycle.js +1 -1
- package/dist/src/daemon-process.js +1 -1
- package/dist/src/daemon-shutdown-report.js +1 -1
- package/dist/src/daemon.js +1 -1
- package/dist/src/debug-symbols-facade.js +1 -1
- package/dist/src/device-boot.js +1 -0
- package/dist/src/device-claim-inspection.js +1 -1
- package/dist/src/device-claim-rule.js +1 -1
- package/dist/src/device-input-state.d.ts +1 -1
- package/dist/src/device-inventory-context.js +1 -1
- package/dist/src/device-rotation.js +1 -1
- package/dist/src/device-selection-resolver.js +1 -1
- package/dist/src/device-session.js +1 -1
- package/dist/src/device2.js +1 -1
- package/dist/src/diagnostics.js +1 -1
- package/dist/src/dispatch-resolve.js +1 -1
- package/dist/src/doctor2.js +1 -1
- package/dist/src/durable-resource.js +1 -1
- package/dist/src/engine-eval-script.js +1 -0
- package/dist/src/error.js +1 -1
- package/dist/src/exec.js +1 -1
- package/dist/src/file.js +1 -1
- package/dist/src/find.js +1 -1
- package/dist/src/finders.js +1 -1
- package/dist/src/format.js +1 -2
- package/dist/src/generic-settle.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/human-control-contract.js +1 -1
- package/dist/src/human-control.js +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/input-actions.js +1 -1
- package/dist/src/input-actions2.js +2 -2
- package/dist/src/install-artifact-facade.js +1 -1
- package/dist/src/install-source-network-transport.js +1 -1
- package/dist/src/install-source2.js +1 -1
- package/dist/src/interaction-positionals.js +1 -1
- package/dist/src/interaction-ref-policy.js +1 -1
- package/dist/src/interaction.js +1 -1
- package/dist/src/interaction2.js +1 -1
- package/dist/src/interactor.js +5 -5
- package/dist/src/interactor2.js +1 -1
- package/dist/src/interactors.js +1 -1
- package/dist/src/internal/bin.js +1 -1
- package/dist/src/internal/daemon.js +2 -2
- package/dist/src/internal/png-worker.d.ts +3 -0
- 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 +2 -2
- 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-snapshot-acquisition.js +1 -1
- package/dist/src/ios-snapshot-planning.js +1 -1
- package/dist/src/ios-snapshot-runtime.js +1 -1
- package/dist/src/ios-system-surface.js +1 -0
- package/dist/src/lease-scope.js +1 -1
- package/dist/src/lease.js +1 -1
- package/dist/src/limrun-runtime-dependencies.js +1 -1
- package/dist/src/limrun.d.ts +1 -1
- package/dist/src/linux.js +1 -1
- package/dist/src/local-interactor-operation-set.js +1 -1
- package/dist/src/location-coordinates.js +1 -1
- package/dist/src/managed-device-scope.js +1 -1
- package/dist/src/mechanics.js +16 -16
- package/dist/src/mobile-snapshot-semantics.js +1 -1
- package/dist/src/mp4-atoms.js +1 -0
- package/dist/src/multitouch-support.js +1 -1
- package/dist/src/observation.js +1 -1
- package/dist/src/open-target-resolution.js +1 -0
- package/dist/src/owner-identity.js +3 -3
- package/dist/src/parameterized-recorded-fill.js +1 -1
- package/dist/src/perf-facade.js +2 -2
- package/dist/src/perf-process-identity.js +1 -0
- package/dist/src/perf-runtime-operation-builder.js +1 -1
- package/dist/src/perf-runtime-plan.js +1 -1
- package/dist/src/perf.js +1 -1
- package/dist/src/physical-device-control.js +1 -1
- package/dist/src/platform-request-scope.js +1 -1
- package/dist/src/platform-runtime-android-adb-host.js +1 -1
- package/dist/src/platform-runtime-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-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-process-host.js +1 -1
- package/dist/src/platform-runtime-unavailable.js +1 -1
- package/dist/src/platform-runtime.js +1 -1
- package/dist/src/platform-runtime2.js +1 -1
- package/dist/src/png-crop-bytes.js +1 -0
- package/dist/src/png-worker-contract.js +1 -1
- package/dist/src/png.js +1 -0
- package/dist/src/prepare-kind.js +1 -1
- package/dist/src/process.js +1 -1
- package/dist/src/provider-device-runtime.js +1 -1
- package/dist/src/provider-session-ownership.js +1 -1
- package/dist/src/provider-webdriver.js +1 -1
- package/dist/src/proxy.js +1 -1
- package/dist/src/quality-warnings.js +1 -0
- package/dist/src/react-native.js +1 -1
- package/dist/src/record-runtime.js +1 -1
- package/dist/src/rect-center.js +1 -1
- package/dist/src/register-builtins.js +1 -1
- package/dist/src/registry.js +36 -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 +9 -8
- 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/retry.js +1 -1
- package/dist/src/runner-cache-metadata.js +2 -2
- package/dist/src/runner-client.js +1 -1
- package/dist/src/runner-disposal.js +1 -1
- package/dist/src/runner-operations-facade.js +1 -1
- package/dist/src/runner-presentation.js +1 -1
- package/dist/src/runner.js +1 -1
- package/dist/src/runtime-transport-hints.js +1 -1
- package/dist/src/runtime.js +3 -3
- package/dist/src/runtime10.js +1 -0
- package/dist/src/runtime2.js +4 -4
- package/dist/src/runtime3.js +1 -1
- package/dist/src/runtime4.js +5 -4
- 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-live-handle.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/screenshot-density.js +1 -1
- package/dist/src/screenshot-runtime.js +1 -1
- package/dist/src/screenshot.js +1 -1
- package/dist/src/screenshot3.js +3 -3
- 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 +69 -26
- package/dist/src/sdk-contracts.js +2 -2
- package/dist/src/sdk-device.js +1 -1
- package/dist/src/sdk-finders.d.ts +1 -1
- package/dist/src/sdk-finders.js +1 -1
- package/dist/src/sdk-io.js +1 -1
- package/dist/src/sdk-remote-config.d.ts +1 -1
- package/dist/src/sdk-remote-config.js +1 -1
- package/dist/src/sdk-selectors.d.ts +80 -16
- package/dist/src/sdk-selectors.js +1 -1
- package/dist/src/selection.js +0 -0
- package/dist/src/selector-runtime.js +1 -1
- package/dist/src/selectors.js +1 -1
- package/dist/src/semantic-index.js +1 -1
- package/dist/src/server.js +3 -3
- package/dist/src/session-allocation.js +1 -1
- package/dist/src/session-observation.js +1 -0
- package/dist/src/session-routing.js +1 -1
- package/dist/src/session-runtime-admission.js +1 -1
- package/dist/src/session-snapshot.js +1 -1
- package/dist/src/session-store.js +3 -3
- package/dist/src/session-target-evidence.js +1 -1
- package/dist/src/session2.js +5 -5
- package/dist/src/settings.js +1 -1
- package/dist/src/simulator-boot.js +3 -0
- package/dist/src/simulator.js +1 -1
- package/dist/src/snapshot-quality-backend-capabilities.js +1 -1
- package/dist/src/snapshot-runtime-binding.js +1 -1
- package/dist/src/snapshot-runtime.js +1 -1
- package/dist/src/snapshot-state.js +1 -1
- package/dist/src/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 +2 -2
- package/dist/src/src8.js +2 -2
- package/dist/src/string-enum.js +1 -1
- package/dist/src/takeover.js +1 -1
- package/dist/src/telemetry.js +1 -1
- package/dist/src/tool-provider.js +2 -2
- package/dist/src/tool-provider2.js +1 -1
- package/dist/src/tool-provider3.js +1 -1
- package/dist/src/toolchain-probe.js +1 -1
- package/dist/src/touch-reference-frame.js +1 -0
- package/dist/src/touch-runtime.js +1 -1
- package/dist/src/transport.js +1 -1
- package/dist/src/tree.js +1 -1
- package/dist/src/tv-remote.js +1 -1
- package/dist/src/type-text-runtime.js +1 -1
- package/dist/src/update-check.js +1 -1
- package/dist/src/vars.js +2 -0
- package/dist/src/verified-file.js +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/video.js +2 -2
- package/dist/src/viewport.js +1 -0
- package/dist/src/web.js +1 -1
- package/dist/src/web2.js +1 -1
- package/dist/src/webdriver-ios-snapshot.js +1 -1
- package/dist/src/webdriver-source.js +1 -1
- package/dist/src/window-state.js +1 -0
- package/package.json +4 -2
- package/server.json +2 -2
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.0.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.0.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.0.apk.sha256 +0 -1
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-trim.swift +0 -93
- package/dist/src/platform-runtime-apple-resources.js +0 -1
- package/dist/src/runner-selector-query.js +0 -1
- package/dist/src/snapshot-quality-verdict.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{C as e}from"./sdk-contracts.js";import{Er as t}from"./sdk-batch.js";import{t as n}from"./string-enum.js";const r=[`up`,`down`,`left`,`right`,`top`,`bottom`],i=[`up`,`down`,`left`,`right`],a=[`left`,`right`,`left-edge`,`right-edge`],o=[`one-way`,`ping-pong`],s=1e4,c=6e4,l=n(i,{message:e=>`Unknown direction: ${e}`}),u=.6;function d(e){let t=e.direction,n=t===`up`||t===`down`?e.referenceHeight:e.referenceWidth,r=S(e.amount),i=e.pixels===void 0?Math.round(n*r):C(e.pixels),a=Math.max(1,Math.round(n*.1)),o=Math.max(1,n-a*2),s=Math.max(1,Math.min(i,o)),c=Math.round(s/2),l=Math.round(e.referenceWidth/2),u=Math.round(e.referenceHeight/2),d=(n,r,i,a)=>({direction:t,x1:n,y1:r,x2:i,y2:a,referenceWidth:e.referenceWidth,referenceHeight:e.referenceHeight,amount:e.amount,pixels:s});switch(t){case`up`:return d(l,u-c,l,u+c);case`down`:return d(l,u+c,l,u-c);case`left`:return d(l-c,u,l+c,u);case`right`:return d(l+c,u,l-c,u)}}function f(e){S(e.amount),e.pixels!==void 0&&C(e.pixels)}function p(e,t){if(e===`left`||e===`right`){let n=h(e,t);return{preset:e,x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2,referenceWidth:n.referenceWidth,referenceHeight:n.referenceHeight}}let[n,r]=e===`left-edge`?[99,15]:[1,85],i=v(_(t,n,50),t,8),a=v(_(t,r,50),t,8);return{preset:e,x1:i.x,y1:i.y,x2:a.x,y2:a.y,referenceWidth:t.referenceWidth,referenceHeight:t.referenceHeight}}function m(e,t){switch(e){case`up`:return{x:0,y:-t};case`down`:return{x:0,y:t};case`left`:return{x:-t,y:0};case`right`:return{x:t,y:0}}}function h(e,t){let n=e===`left`||e===`up`,r=n?85:15,i=n?15:85,a=e===`up`||e===`down`,o=v(_(t,a?50:r,a?r:50),t,8),s=v(_(t,a?50:i,a?i:50),t,8);return{direction:e,x1:o.x,y1:o.y,x2:s.x,y2:s.y,referenceWidth:t.referenceWidth,referenceHeight:t.referenceHeight}}function g(e){let t=b(e);if(t)return{referenceWidth:t.width,referenceHeight:t.height}}function _(e,t,n){let r=Math.trunc(e.referenceWidth*t/100),i=Math.trunc(e.referenceHeight*n/100);return{x:Number.isFinite(r)?r:0,y:Number.isFinite(i)?i:0}}function v(e,t,n){return{x:w(e.x,n,t.referenceWidth),y:w(e.y,n,t.referenceHeight)}}function y(e){return l.parse(e)}function b(e){let n=e.filter(e=>t(e)&&x(e.rect)).map(e=>e.rect).sort((e,t)=>(t?.width??0)*(t?.height??0)-(e?.width??0)*(e?.height??0))[0];if(n)return n;let r=e.map(e=>e.rect).filter(x);if(r.length===0)return;let i=Math.max(...r.map(e=>e.x+e.width)),a=Math.max(...r.map(e=>e.y+e.height));if(!(i<=0||a<=0))return{x:0,y:0,width:i,height:a}}function x(e){return!!e&&e.width>0&&e.height>0}function S(t){if(t===void 0)return u;if(!Number.isFinite(t)||t<=0)throw new e(`INVALID_ARGS`,`scroll amount must be a positive number`);return t}function C(t){if(!Number.isFinite(t)||t<=0)throw new e(`INVALID_ARGS`,`scroll pixels must be a positive integer`);return Math.max(1,Math.round(t))}function w(e,t,n){let r=Math.round(t);if(!Number.isFinite(r))return 0;let i=Math.max(r,Math.round(n-t));return!Number.isFinite(i)||!Number.isFinite(e)?r:Math.min(i,Math.max(r,Math.round(e)))}const T=Object.freeze({reason:`scroll_keyboard_occludes_surface`,hint:"The on-screen keyboard covers the surface this scroll would swipe, so it cannot reach it. Run `keyboard dismiss` and retry, accepting that it drops focus (re-tap the field to keep typing), or scroll before focusing the field."});function E(e,t){if(!O(e)||!O(t))return{kind:`unobstructed`};let n=e.x+e.width/2;if(n<t.x||n>=t.x+t.width)return{kind:`unobstructed`};let r=t.y;if(r>=e.y+e.height||t.y+t.height<=e.y)return{kind:`unobstructed`};let i=Math.max(0,r-12-e.y);return i<.15*e.height?{kind:`occluded`,keyboardMinY:r,visibleHeight:i}:{kind:`avoided`,viewport:{...e,height:i},keyboardMinY:r}}function D(t,n){return new e(`COMMAND_FAILED`,`scroll ${t} refused: the keyboard leaves ${n.visibleHeight}px of ${n.viewportHeight}px visible, below the 15% needed for a swipe`,{keyboardMinY:n.keyboardMinY,visibleHeight:n.visibleHeight,viewportHeight:n.viewportHeight,minVisibleFraction:.15,...T})}function O(e){return[e.x,e.y,e.width,e.height].every(e=>Number.isFinite(e))&&e.width>0&&e.height>0}export{D as _,o as a,c,d,p as f,y as g,g as h,T as i,f as l,m,i as n,s as o,E as p,r,a as s,u as t,h as u};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
`).map(e=>e.trim()).filter(e=>e.length>0)}function M(
|
|
1
|
+
import{C as e,a as t,i as n,w as r}from"./sdk-contracts.js";import{a as i,n as a,o,r as s}from"./sdk-batch.js";function c(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function l(t,n,r,i){let a=r(t[n]);if(a===void 0)throw new e(`COMMAND_FAILED`,i,{response:t});return a}function u(e,t,n){return n(e[t])}function d(e,t,n){let r=e[t];return r===null?null:n(r)}function f(e,t){return l(e,t,S,`Daemon response is missing "${t}".`)}function p(e,t){return u(e,t,S)}function m(e,t){return d(e,t,S)}function h(e,t){return l(e,t,C,`Daemon response is missing numeric "${t}".`)}function g(e,t){return l(e,t,w,`Daemon response has invalid "${t}".`)}function _(e,t){return l(e,t,T,`Daemon response has invalid "${t}".`)}function v(e,t){return u(e,t,E)??`mobile`}function y(e){if(!O(e))return;let t=x(e,`x`),n=x(e,`y`),r=x(e,`width`),i=x(e,`height`);if(t!==void 0&&n!==void 0&&r!==void 0&&i!==void 0)return{x:t,y:n,width:r,height:i}}function b(e){if(!O(e))return;let t=x(e,`x`),n=x(e,`y`);if(t!==void 0&&n!==void 0)return{x:t,y:n}}function x(e,t){let n=e[t];return typeof n==`number`?n:void 0}function S(e){return typeof e==`string`&&e.length>0?e:void 0}function C(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function w(e){return e===`apple`?`ios`:e===`ios`||e===`macos`||e===`android`||e===`harmonyos`||e===`vega`||e===`linux`||e===`web`?e:void 0}function T(e){return e===`simulator`||e===`emulator`||e===`device`?e:void 0}function E(e){return e===`tv`||e===`mobile`||e===`desktop`?e:void 0}function D(t){if(!O(t))throw new e(`COMMAND_FAILED`,`Daemon returned an unexpected response shape.`,{value:t});return t}function O(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function k(e){return O(e)?e:void 0}function A(e){let t={};for(let[n,r]of Object.entries(e))r!==void 0&&(t[n]=r);return t}function j(e){return e.split(`
|
|
2
|
+
`).map(e=>e.trim()).filter(e=>e.length>0)}function M(t,n,r={}){let i=t[n];if(i===void 0)return;if(!Number.isInteger(i))throw new e(`INVALID_ARGS`,`Expected ${n} to be an integer.`);let a=i;if(r.min!==void 0&&a<r.min)throw new e(`INVALID_ARGS`,`Expected ${n} to be at least ${r.min}.`);if(r.max!==void 0&&a>r.max)throw new e(`INVALID_ARGS`,`Expected ${n} to be at most ${r.max}.`);return a}function N(t,n,r={}){let i=t[n];if(i!==void 0){if(typeof i!=`number`||!Number.isFinite(i))throw new e(`INVALID_ARGS`,`Expected ${n} to be a finite number.`);if(r.min!==void 0&&i<r.min)throw new e(`INVALID_ARGS`,`Expected ${n} to be at least ${r.min}.`);if(r.max!==void 0&&i>r.max)throw new e(`INVALID_ARGS`,`Expected ${n} to be at most ${r.max}.`);return i}}function P(e){return Number.isInteger(e)&&e>=1&&e<=1e3}function F(t,n){if(t>n)throw new e(`INVALID_ARGS`,`batch has ${t} steps; max allowed is ${n}.`)}const I=`Each batch step is {"command":"<name>","input":{...}}, where input is that command's own structured input object, keyed by field name. There is no positional step form: args, argv, positionals, and flags are not step fields.`;function L(t,n,r=I){if(!c(t))throw new e(`INVALID_ARGS`,`Invalid batch step ${n}.`,{hint:r});return t}function R(t,n,r=I){let i=t.input;if(!c(i))throw new e(`INVALID_ARGS`,`Batch step ${n} input must be an object.`,{hint:r});return i}function z(t,r){if(t!==void 0)try{return n.parse(t)}catch(t){throw new e(`INVALID_ARGS`,`Batch step ${r} runtime is invalid: ${t instanceof Error?t.message:String(t)}`)}}function B(e){let t=e.trim();if(!t||/\s/.test(t))return!1;let n=/^([A-Za-z][A-Za-z0-9+.-]*):(.+)$/.exec(t);if(!n)return!1;let r=n[1]?.toLowerCase(),i=n[2]??``;return r===`http`||r===`https`||r===`ws`||r===`wss`||r===`ftp`||r===`ftps`?i.startsWith(`//`):!0}function V(e){let t=e.trim().split(`:`)[0]?.toLowerCase();return t===`http`||t===`https`}function H(e,t){let n=e?.trim();if(n)return n;if(V(t))return`com.apple.mobilesafari`}const U=new Set(a);async function W(e,t,n){let i=Z(e.flags),a=i?.batchOnError??`stop`;if(a!==`stop`)return Q(`INVALID_ARGS`,`Unsupported batch on-error mode: ${a}.`);let o=i?.batchMaxSteps??100;if(!P(o))return Q(`INVALID_ARGS`,`Invalid batch max-steps: ${String(i?.batchMaxSteps)}`);try{let r=G(i?.batchSteps,o),a=Date.now(),s=[];for(let[i,a]of r.entries()){let o=await X(e,t,a,n,{stepNumber:i+1,totalSteps:r.length,remainingSteps:r.slice(i+1).map(e=>({command:e.command,positionals:e.positionals,flags:e.flags,...e.input===void 0?{}:{input:e.input}}))});if(!o.ok)return{ok:!1,error:{code:o.error.code,message:`Batch failed at step ${o.step} (${a.command}): ${o.error.message}`,hint:o.error.hint,diagnosticId:o.error.diagnosticId,logPath:o.error.logPath,...o.error.retriable===void 0?{}:{retriable:o.error.retriable},...o.error.supportedOn===void 0?{}:{supportedOn:o.error.supportedOn},details:{...o.error.details??{},step:o.step,command:a.command,positionals:a.positionals,executed:i,total:r.length,partialResults:s}}};s.push(o.result)}return{ok:!0,data:{total:r.length,executed:r.length,totalDurationMs:Date.now()-a,results:s}}}catch(e){let t=r(e);return Q(t.code,t.message,t.details)}}function G(t,n){if(!Array.isArray(t)||t.length===0)throw new e(`INVALID_ARGS`,`batch requires a non-empty batchSteps array.`);F(t.length,n);let r=[];for(let n=0;n<t.length;n+=1){let a=t[n];if(!O(a))throw new e(`INVALID_ARGS`,`Invalid batch step at index ${n}.`);let s=Object.keys(a).filter(e=>!U.has(e));if(s.length>0){let t=s.map(e=>`"${e}"`).join(`, `);throw new e(`INVALID_ARGS`,`Batch step ${n+1} has unknown field(s): ${t}. Allowed fields: command, positionals, input, flags, runtime.`)}let c=o(a.command);if(!c)throw new e(`INVALID_ARGS`,`Batch step ${n+1} requires command.`);if(i(c,n+1),a.positionals!==void 0&&!Array.isArray(a.positionals))throw new e(`INVALID_ARGS`,`Batch step ${n+1} positionals must be an array.`);let l=a.positionals??[];if(l.some(e=>typeof e!=`string`))throw new e(`INVALID_ARGS`,`Batch step ${n+1} positionals must contain only strings.`);if(a.flags!==void 0&&!O(a.flags))throw new e(`INVALID_ARGS`,`Batch step ${n+1} flags must be an object.`);if(a.input!==void 0&&!O(a.input))throw new e(`INVALID_ARGS`,`Batch step ${n+1} input must be an object.`);r.push({command:c,positionals:l,input:a.input,flags:a.flags??{},runtime:z(a.runtime,n+1)})}return r}function K(e,t){let{batchSteps:n,batchOnError:r,batchMaxSteps:i,...a}=t??{};return q(Z(e),a)}function q(e,t){let n=Z(e)??{},r=t;for(let e of s)r[e]===void 0&&n[e]!==void 0&&(r[e]=n[e]);return t}function J(e,n){return t(e)?n?e:`digest`:e}function Y(e,t){let n=e?.responseLevel,r=J(n,t);return r===n?e:{...e,responseLevel:r}}async function X(e,t,n,r,i){let{stepNumber:a,totalSteps:o}=i,s=a===o,c=Date.now(),l=K(e.flags,n.flags);l.session===void 0&&(l.session=t);let u=await r({token:e.token,session:t,command:n.command,positionals:n.positionals,input:n.input,flags:l,runtime:n.runtime===void 0?e.runtime:n.runtime,meta:Y(e.meta,s)},i),d=Date.now()-c;return u.ok?{ok:!0,step:a,result:{step:a,command:n.command,ok:!0,data:u.data??{},durationMs:d}}:{ok:!1,step:a,error:u.error}}function Z(e){return e}function Q(e,t,n){return{ok:!1,error:{code:e,message:t,...n?{details:n}:{}}}}export{h as C,A as D,j as E,c as O,_ as S,f as T,b as _,H as a,m as b,P as c,L as d,M as f,O as g,D as h,V as i,z as l,k as m,W as n,I as o,N as p,B as r,F as s,q as t,R as u,y as v,g as w,p as x,v as y};
|
package/dist/src/sdk-batch.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
`],[`r`,`\r`],[`t`,` `]]);function _(e){let n=e.trim();if(!n)throw new t(`INVALID_ARGS`,`Selector expression cannot be empty`);let r=Oe(n);if(r.length===0)throw new t(`INVALID_ARGS`,`Selector expression cannot be empty`);return{raw:n,selectors:r.map(e=>Ee(e))}}function v(e){try{return _(e)}catch{return null}}function y(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 g.has(e)}return g.has(t.toLowerCase())}function Te(e){let t=e.trim(),n=t.indexOf(`=`);if(n===-1)return null;let r=t.slice(0,n).trim().toLowerCase();if(!r||g.has(r))return null;let i=t.slice(n+1).trim();if(!i)return null;let a=je(i).trim();return a?{key:r,value:a}:null}function b(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||!y(t))break;r+=1;let n=e.slice(0,r).join(` `).trim();n&&v(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 Ee(e){let n=e.trim();if(!n)throw new t(`INVALID_ARGS`,`Selector segment cannot be empty`);let r=ke(n);if(r.length===0)throw new t(`INVALID_ARGS`,`Invalid selector segment: ${e}`);return{raw:n,terms:r.map(De)}}function De(e){let n=e.trim();if(!n)throw new t(`INVALID_ARGS`,`Empty selector term`);let r=n.indexOf(`=`);if(r===-1){let r=n.toLowerCase();if(!be.has(r))throw new t(`INVALID_ARGS`,`Invalid selector term "${e}", expected key=value`);return{key:r,value:!0}}let i=n.slice(0,r).trim().toLowerCase(),a=n.slice(r+1).trim();if(!g.has(i))throw new t(`INVALID_ARGS`,`Unknown selector key: ${i}`);if(!a)throw new t(`INVALID_ARGS`,`Missing selector value for key: ${i}`);if(be.has(i)){let e=Pe(a);if(e===null)throw new t(`INVALID_ARGS`,`Invalid boolean value for ${i}: ${a}`);return{key:i,value:e}}return{key:i,value:je(a)}}function Oe(e){let n=[],r=``,i=null;for(let a=0;a<e.length;a+=1){let o=e[a];if((o===`"`||o===`'`)&&!Fe(e,a)){i=Ae(i,o),r+=o;continue}if(!i&&o===`|`&&e[a+1]===`|`){let i=r.trim();if(!i)throw new t(`INVALID_ARGS`,`Invalid selector fallback expression: ${e}`);n.push(i),r=``,a+=1;continue}r+=o}let a=r.trim();if(!a)throw new t(`INVALID_ARGS`,`Invalid selector fallback expression: ${e}`);return n.push(a),n}function ke(e){let n=[],r=``,i=null;for(let t=0;t<e.length;t+=1){let a=e.charAt(t);if((a===`"`||a===`'`)&&!Fe(e,t)){i=Ae(i,a),r+=a;continue}if(!i&&/\s/.test(a)){r.trim()&&n.push(r.trim()),r=``;continue}r+=a}if(i)throw new t(`INVALID_ARGS`,`Unclosed quote in selector: ${e}`);return r.trim()&&n.push(r.trim()),n}function Ae(e,t){return e?e===t?null:e:t}function je(e){let t=e.trim();return t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?Me(t.slice(1,-1)):t}function Me(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=Ne(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 Ne(e){return we.get(e)??null}function Pe(e){let t=je(e).toLowerCase();return t===`true`||t!==`false`&&null}function Fe(e,t){let n=0;for(let r=t-1;r>=0&&e[r]===`\\`;--r)n+=1;return n%2==1}function Ie(e){return a.includes(e)}const Le=`is requires predicate: ${a.join(`|`)}`;function Re(e){let t=e.toLowerCase();return Ie(t)?{ok:!0,predicate:t}:i(Le,ze)}const ze=`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 Be(e){if(Ie((e[0]??``).toLowerCase()))return e;for(let t=1;t<e.length;t+=1){let n=(e[t]??``).toLowerCase();if(Ie(n)&&v(e.slice(0,t).join(` `)))return[n,...e.slice(0,t),...e.slice(t+1)]}return e}function Ve(e){let{predicate:t,node:n,nodes:r,expectedText:i,platform:a}=e,o=m(n),s=ve(n,a),c=n.selected===!0,l=n.focused===!0,u=t===`text`?h(n):Ue(n,le(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 He(t)}let f=t===`text`?`expected="${i??``}" actual="${o}"`:`actual=${JSON.stringify({visible:u,editable:s,selected:c,focused:l})}`;return{pass:d,actualText:o,details:f}}function He(e){throw Error(`Unhandled is predicate: ${String(e)}`)}function Ue(e,t,n){if(n===`android`&&e.visibleToUser===!1)return!1;if(o(e.rect))return t.isVisibleInEffectiveViewport(e);if(e.rect)return!1;if(n!==`android`&&e.hittable===!0)return!0;let r=We(e,t,n);return r?o(r.rect)?t.isVisibleInEffectiveViewport(r):n!==`android`&&r.hittable===!0:!1}function We(e,t,n){return t.findAncestor(e,e=>_e(e,n)?e:null)}function Ge(e){let t=Be(e),n=t[0]??``;return{predicate:n,split:b(t.slice(1),{preferTrailingValue:n===`text`})}}const Ke=`is requires a selector expression`,qe=`is text requires expected text value`;function Je(e){let{predicate:t,split:n}=Ge([...e]),r=Re(t);if(!r.ok)return r;if(!n)return i(Ke);let a=n.rest.join(` `).trim();return r.predicate===`text`&&!a?i(qe):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 Ye(e){return e===`text`||e===`attrs`?{ok:!0,format:e}:i(`get only supports text or attrs`)}function Xe(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 Ze(e){return e?{ok:!0,text:e}:i(`wait requires text`)}function Qe(e){return Array.from(new Set(e))}function $e(e){return JSON.stringify(x(e))}function x(e){if(Array.isArray(e))return e.map(x);if(!e||typeof e!=`object`)return e;let t=e;return Object.fromEntries(Object.keys(t).sort().map(e=>[e,x(t[e])]))}function et(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 tt=/^#\s*agent-device:target-v(\d+)(?:\s+(\S.*))?$/,nt=/^#\s*agent-device:targets-v(\d+)(?:\s+(\S.*))?$/,rt=4096;function S(e){return e.normalize(`NFC`)}function it(e){if(e===void 0)return;let t=S(e);return t.length>0?t:void 0}function at(e){return S(e)}function ot(e){if(e===void 0)return;let t=S(e).trim().replaceAll(/\s+/g,` `);return t.length>0?t:void 0}function C(e){return Buffer.byteLength(e,`utf8`)}function w(e,t){if(C(e)<=t)return e;let n=e.length;for(;n>0&&C(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 st(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(ct),t.sibling=e.sibling,t.viewportOrder=e.viewportOrder,e.scrollRegion&&(t.scrollRegion=lt(e.scrollRegion)),e.rect&&(t.rect=ut(e.rect)),t.verification=e.verification,t}function ct(e){let t={role:e.role};return e.label!==void 0&&(t.label=e.label),t}function lt(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 ut(e){return{x:e.x,y:e.y,width:e.width,height:e.height}}function dt(e){return JSON.stringify(st(e))}function ft(e){return`# agent-device:target-v1 ${dt(e)}`}function pt(e){return JSON.stringify({source:st(e.source),destination:st(e.destination)})}function mt(e){return`# agent-device:targets-v1 ${pt(e)}`}function ht(e){let t=e.trim(),n=nt.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:gt((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function gt(e){if(C(e)>8320)throw new t(`INVALID_ARGS`,`targets-v1 annotation exceeds the 8320-byte payload cap.`);let n;try{n=JSON.parse(e)}catch{throw new t(`INVALID_ARGS`,`targets-v1 annotation is not valid JSON.`)}if(typeof n!=`object`||!n||Array.isArray(n))throw new t(`INVALID_ARGS`,`targets-v1 annotation must be a JSON object.`);let r=n;if(r.source===void 0||r.destination===void 0)throw new t(`INVALID_ARGS`,`targets-v1 annotation requires source and destination evidence.`);return{source:vt(JSON.stringify(r.source)),destination:vt(JSON.stringify(r.destination))}}function _t(e){let t=e.trim();if(!t.startsWith(`#`))return{kind:`none`};let n=tt.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:vt((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function vt(e){if(C(e)>4096)throw new t(`INVALID_ARGS`,`target-v1 annotation exceeds the ${rt}-byte payload cap.`);let n;try{n=JSON.parse(e)}catch{throw new t(`INVALID_ARGS`,`target-v1 annotation is not valid JSON.`)}if(typeof n!=`object`||!n||Array.isArray(n))throw new t(`INVALID_ARGS`,`target-v1 annotation must be a JSON object.`);let r=n,i=yt(r.role,`role`),a=bt(r.id,`id`),o=xt(r.label,`label`),s=Ct(r.ancestry),c=Tt(r.sibling,`sibling`,0),l=Tt(r.viewportOrder,`viewportOrder`,0),u=Et(r.scrollRegion),d=Dt(r.rect),f=Ot(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:f}}function yt(e,n){if(e===void 0)throw new t(`INVALID_ARGS`,`target-v1 "${n}" is required.`);if(typeof e!=`string`)throw new t(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);return St(at(e),n)}function bt(e,n){if(e===void 0)return;if(typeof e!=`string`)throw new t(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);let r=it(e);return r===void 0?void 0:St(r,n)}function xt(e,n){if(e===void 0)return;if(typeof e!=`string`)throw new t(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);let r=ot(e);return r===void 0?void 0:St(r,n)}function St(e,n){if(C(e)>256)throw new t(`INVALID_ARGS`,`target-v1 "${n}" exceeds the 256-byte field cap.`);return e}function Ct(e){if(e===void 0)return[];if(!Array.isArray(e))throw new t(`INVALID_ARGS`,`target-v1 "ancestry" must be an array.`);if(e.length>8)throw new t(`INVALID_ARGS`,`target-v1 "ancestry" exceeds the 8-entry cap.`);return e.map((e,t)=>wt(e,t))}function wt(e,n){if(typeof e!=`object`||!e||Array.isArray(e))throw new t(`INVALID_ARGS`,`target-v1 "ancestry[${n}]" must be an object.`);let r=e,i=yt(r.role,`ancestry[${n}].role`),a=xt(r.label,`ancestry[${n}].label`);return{role:i,...a===void 0?{}:{label:a}}}function Tt(e,n,r){if(e===void 0)return r;if(typeof e!=`number`||!Number.isSafeInteger(e)||e<0)throw new t(`INVALID_ARGS`,`target-v1 "${n}" must be a non-negative integer.`);return e}function Et(e){if(e===void 0)return;if(typeof e!=`object`||!e||Array.isArray(e))throw new t(`INVALID_ARGS`,`target-v1 "scrollRegion" must be an object.`);let n=e,r=yt(n.role,`scrollRegion.role`),i=bt(n.id,`id`),a=xt(n.label,`scrollRegion.label`);return{role:r,...i===void 0?{}:{id:i},...a===void 0?{}:{label:a}}}function Dt(e){if(e===void 0)return;if(typeof e!=`object`||!e||Array.isArray(e))throw new t(`INVALID_ARGS`,`target-v1 "rect" must be an object.`);let n=e;return{x:T(n.x,`rect.x`),y:T(n.y,`rect.y`),width:T(n.width,`rect.width`),height:T(n.height,`rect.height`)}}function T(e,n){if(typeof e!=`number`||!Number.isFinite(e))throw new t(`INVALID_ARGS`,`target-v1 "${n}" must be a finite number.`);return e}function Ot(e){if(e===`verified`||e===`unverifiable`)return e;throw new t(`INVALID_ARGS`,`target-v1 "verification" must be "verified" or "unverifiable".`)}function kt(e){let t=at(p(e.type??``)),n=it(e.identifier),r=ot(e.label);return{...n===void 0?{}:{id:w(n,256)},role:w(t,256),...r===void 0?{}:{label:w(r,256)}}}function At(e,t){return e.id===t.id&&e.role===t.role&&e.label===t.label}function jt(e,t){let n=0;for(let r of e)kt(r).id===t&&(n+=1);return n}function Mt(e,t){if(e.id===void 0||jt(t,e.id)<=1)return e;let{role:n,label:r}=e;return{role:n,...r===void 0?{}:{label:r}}}function Nt(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 Pt(e,t){return{documentOrder:e.index,sibling:Nt(t,e)}}function Ft(e,t){return e.documentOrder===t.documentOrder&&e.sibling===t.sibling}function It(e){return{...e.id===void 0?{}:{id:e.id},role:e.role,...e.label===void 0?{}:{label:e.label}}}function Lt(e,t){return t.id===void 0?e.role===t.role&&e.label===t.label:e.id===t.id}function Rt(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 zt(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 Bt(e){return e?`${e.role}${e.label?`/${e.label}`:``}`:`(missing)`}function Vt(e,t){return!t||t.role!==e.role||e.label!==void 0&&t.label!==e.label}function Ht(e,t){for(let[n,r]of e.entries()){let e=t[n];if(Vt(r,e))return[`ancestry[${n}]: recorded=${Bt(r)} observed=${Bt(e)}`]}return[]}function Ut(e,t,n={}){let r=[],i=p(e.type??``),a=Wt(e,n.nodes),o=D(e.label),s=D(e.value),c=D(m(e)),l=n.action===`fill`;a&&r.push(`id=${E(a)}`),i&&o&&r.push(l?`role=${E(i)} label=${E(o)} editable=true`:`role=${E(i)} label=${E(o)}`),o&&r.push(l?`label=${E(o)} editable=true`:`label=${E(o)}`),s&&r.push(l?`value=${E(s)} editable=true`:`value=${E(s)}`),c&&c!==o&&c!==s&&r.push(l?`text=${E(c)} editable=true`:`text=${E(c)}`),i&&l&&!r.some(e=>e.includes(`editable=true`))&&r.push(`role=${E(i)} editable=true`);let u=Qe(r);return u.length===0&&i&&u.push(l?`role=${E(i)} editable=true`:`role=${E(i)}`),u.length===0&&h(e)&&u.push(`visible=true`),u}function Wt(e,t){let n=D(e.identifier);if(!n||!t)return n;let r=kt(e).id;return r===void 0?n:jt(t,r)>1?null:n}function E(e){return JSON.stringify(e)}function D(e){return e&&e.trim()||null}const Gt=[`any`,`text`,`label`,`value`,`role`,`id`],Kt=[`text`,`label`,`value`,`role`,`id`];function qt(e){let t=e?.toLowerCase();return t===`press`||t===`tap`?`click`:t}function Jt(e){return e===`exists`||e===`wait`||e===`get_text`||e===`get_attrs`||e===`list`}function Yt(e,t,n,r={}){let i=k(n);if(!i)return{matches:[],score:0};let a=0,o=[];for(let n of e){if(r.requireRect&&!n.rect)continue;let e=Xt(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 Xt(e,t,n){switch(t){case`role`:return Zt(e.type,n);case`label`:return O(e.label,n);case`value`:return O(e.value,n);case`id`:return O(e.identifier,n);default:return Math.max(O(e.label,n),O(e.value,n),O(e.identifier,n))}}function O(e,t){let n=k(e??``);return n?n===t?2:+!!n.includes(t):0}function Zt(e,t){let n=Qt(e??``);return n?n===t?2:+!!n.includes(t):0}function k(e){return e.trim().toLowerCase().replaceAll(/\s+/g,` `)}function Qt(e){let t=e.trim();return t?(t=(t.split(`.`).pop()??t).replaceAll(/XCUIElementType/gi,``).toLowerCase(),t):``}const $t=`find requires a value`,en=`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 tn(e,t){if(e.length===0)return{ok:!1,code:`INVALID_ARGS`,message:`find requires a locator or text`};let n=A([...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:$t}}const nn=[`exists`,`list`,`click`,`focus`];function rn(e){return nn.includes(e)}function A(e){let n=`any`,r=0;Kt.includes(e[0])&&(n=e[0],r=1);let i=e[r]??``,a=e.slice(r+1);if(a.length===0)return{locator:n,query:i,action:`click`};let o=qt(a[0]);if(rn(o))return{locator:n,query:i,action:o};if(o===`get`)return{locator:n,query:i,action:an(a[1])};if(o===`wait`){let e=sn(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 t(`INVALID_ARGS`,`Unsupported find action: ${a[0]}`,{hint:en})}function an(e){let n=e?.toLowerCase();if(n===`text`)return`get_text`;if(n===`attrs`)return`get_attrs`;throw new t(`INVALID_ARGS`,`find get only supports text or attrs`)}function on(e,t){return e!==`any`||!t.includes(`=`)&&!t.includes(`||`)?null:v(t)?t:null}function sn(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}function cn(e,t,n){return t.terms.every(t=>ln(e,t,n))}function ln(e,t,n){switch(t.key){case`id`:return j(e.identifier,String(t.value));case`role`:return j(p(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(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 h(e)===!!t.value;case`hidden`:return!h(e)==!!t.value;case`editable`:return ve(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 k(e??``)===k(t)}function un(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=_n(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 dn(e,t,n){return un(e,t,n).resolution}function fn(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:cn(e,a,n.platform));if(t.length>0)return{selector:a,selectorIndex:i,matchedNodes:t}}return null}function pn(e,t,n){let r=n.requireRect??!1,i=[];for(let[a,o]of t.selectors.entries()){let t=xn(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 mn=`Snapshot refs expire when the UI changes. Run snapshot -i and retry with a fresh @ref.`;function hn(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 gn(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 _n(e,t,n,r){let i=0,a=null,o=[],s={best:null,bestVisible:!1,tie:!1},c=le(e).isVisibleOnScreen;for(let l of e)r&&!l.rect||cn(l,t,n)&&(i+=1,a??=l,o.push(l),vn(s,l,c));return{count:i,firstNode:a,disambiguated:s.tie?null:s.best,tiebreak:s.tie?null:yn(o,s.best,c),candidates:o}}function vn(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=Sn(t,e.best);i.result>0?(e.best=t,e.tie=!1):i.result===0&&(e.tie=!0)}function yn(e,t,n){if(!t)return null;let r=null;for(let i of e)i!==t&&(!r||bn(i,r,n).result>0)&&(r=i);return r?bn(t,r,n).criterion:null}function bn(e,t,n){let r=n(e);return r===n(t)?Sn(e,t):{result:r?1:-1,criterion:`visible`}}function xn(e,t,n,r){let i=0;for(let a of e)r&&!a.rect||cn(a,t,n)&&(i+=1);return i}function Sn(e,t){let n=e.depth??0,r=t.depth??0;if(n!==r)return{result:n>r?1:-1,criterion:`deepest`};let i=Cn(e),a=Cn(t);return i===a?{result:0,criterion:null}:{result:i<a?1:-1,criterion:`smallest-area`}}function Cn(e){return e.rect?e.rect.width*e.rect.height:1/0}const wn={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 Tn(e){return e.ambiguity===`first-match`?{requireRect:e.requireRect,requireUnique:!1}:{requireRect:e.requireRect,requireUnique:!0,disambiguateAmbiguous:e.ambiguity===`disambiguate`}}function En(e,t){let n=e===`is`?Ge([...t]).split:b([...t]);return n?v(n.selectorExpression)?{kind:`expression`,expression:n.selectorExpression,rest:n.rest}:{kind:`invalid`}:{kind:`not-applicable`}}function Dn(e){return{platform:e.platform,...Tn({ambiguity:e.allowDisambiguation?`disambiguate`:`fail-closed`,requireRect:e.requireRect})}}function On(e,t,n){let r=v(e);if(!r)return{kind:`unresolved`,reason:`parse-invalid`,matchedNodes:[]};let{resolution:i,matchedNodes:a}=un(t,r,Dn(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 kn(e,t,n={}){return Ut(e,t,n)}function An(e,t,n){let r=v(e);if(!r)return;let i=dn(t,r,Dn(n));if(i)return{node:i.node,basis:Mn(i.selector)}}function jn(e){if(!e)return;let t=v(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 Mn(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 Nn(e,t){let n=v(e);if(!n)return e.includes(`=`)||e.includes(`||`)?null:e;let r=new Set(t.textKeys),i=t.textAliases??{};return n.selectors.length>1?Pn(n.selectors,r,i):Fn(n.selectors[0],r,new Set(t.booleanKeys),i)}function Pn(e,t,n){let r=e.map(e=>{let r=e.terms.length===1?e.terms[0]:void 0;return r&&In(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 Fn(e,t,n,r){if(!e)return null;let i={},a=0;for(let o of e.terms){if(In(o.key,t,r)&&typeof o.value==`string`)a+=1;else if(!Ln(o,n,`boolean`))return null;i[r[o.key]??o.key]=o.value}return a<=1&&Object.keys(i).length>0?i:null}function In(e,t,n){return t.has(e)||n[e]!==void 0}function Ln(e,t,n){return t.has(e.key)&&typeof e.value===n}function Rn(e){let t=v(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 zn(e,t){if(!t)return!1;let n=v(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 Bn(e,t){return v(e)?.selectors.some(e=>e.terms.some(e=>e.key===t))??!1}function Vn(e){return _(e).selectors.map(e=>e.raw)}function Hn(e){return v(e)!==null}function Un(e){_(e)}function M(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}const Wn=new Set([`exists`,`present`,`appears`,`gone`,`disappears`]);function Gn(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`?Kn(e,r):t===`stable`?qn(e):t===`absent`?Jn(e,r):t.startsWith(`@`)?{kind:`ref`,rawRef:t,timeoutMs:r}:Xn(e,r)}function Kn(e,t){return{kind:`text`,text:(t===null?e.slice(1).join(` `):e.slice(1,-1).join(` `)).trim(),timeoutMs:t}}function qn(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 Jn(e,t){let n=t===null?e.slice(1):e.slice(1,-1),r=b(n);return n.length>0&&r?.rest.length===0&&Hn(r.selectorExpression)?{kind:`absent`,selectorExpression:r.selectorExpression,timeoutMs:t}:{kind:`invalid`,reason:`absent-selector-required`,message:Yn(n)}}function Yn(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 Xn(e,t){let n=t===null?e.slice():e.slice(0,-1),r=b(n);return r&&r.rest.length===0&&Hn(r.selectorExpression)?{kind:`selector`,selectorExpression:r.selectorExpression,timeoutMs:t}:Zn(n,r)||{kind:`text`,text:(t===null?e.join(` `):e.slice(0,-1).join(` `)).trim(),timeoutMs:t}}function Zn(e,t){for(let t of e){let n=Te(t);if(n)return{kind:`invalid`,reason:`unknown-selector-key`,message:Qn(n,e)}}return t&&t.rest.length>0?{kind:`invalid`,reason:`selector-shaped-text`,message:$n(t,e)}:e.some(e=>y(e))?{kind:`invalid`,reason:`selector-shaped-text`,message:er(e)}:null}function Qn(e,t){let n=t.join(` `),r=Ce(e.key)?`role=${e.key} label="${e.value}"`:`label="${e.value}"`;return`Unknown selector key "${e.key}" in "${n}". Supported: ${xe.join(`, `)}. Use wait '${r}' [timeoutMs] to wait for the selector, or wait text '${n}' [timeoutMs] to wait for the literal text "${n}".`}function $n(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 er(e){let t=e.join(` `),n=e.filter(e=>!y(e)),r=e.filter(e=>y(e));if(n.length>0){let e=n[0],i=Wn.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 (${xe.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 tr(e){let t=Gn(e);return t?t.kind===`sleep`?t.durationMs:t.kind===`invalid`?null:t.timeoutMs:null}const nr=24e4,rr=3e4,ir=3e5,N={budget:{source:`none`},envelopeMs:9e4,onTimeout:`reset-daemon`};function ar(e,t){if(e.envelopeMs===`unbounded`)return;let n={...e,envelopeMs:e.envelopeMs};return or(n,t.positionals??[])??sr(n,t.flags)??n.envelopeMs}function or(e,t){if(e.budget.source!==`positional-parser`)return;let n=e.budget.parser(t);return n===null?void 0:lr(e,n)}function sr(e,t){if(e.budget.source===`flag`)return e.budget.envelope===`widen`?cr(e,e.budget,t):e.budget.envelope===`margin`?typeof t?.timeoutMs==`number`?lr(e,t.timeoutMs):e.envelopeMs:typeof t?.timeoutMs==`number`?t.timeoutMs:e.envelopeMs}function cr(e,t,n){if(n?.settle!==!0)return e.envelopeMs;let r=typeof n.timeoutMs==`number`?n.timeoutMs:t.defaultBudgetMs;return typeof r==`number`?ur(e,r):e.envelopeMs}function lr(e,t){return Math.max(e.envelopeMs,t+rr)}function ur(e,t){return Math.max(e.envelopeMs,e.envelopeMs+t+rr)}const dr={click:`settle-and-verify`,press:`settle-and-verify`,fill:`settle-and-verify`,longpress:`settle`,hover:`settle`,scroll:`settle`,back:`settle`};function fr(e){if(e!==void 0)return dr[e]}function P(e){return new t(`COMMAND_FAILED`,e,{reason:`runtime-contract-invalid`,hint:`This is an agent-device runtime contract bug; report the selected device and command.`})}function pr(e){if(!n(e))throw TypeError(`Unknown local runtime family: ${String(e)}`);return Object.freeze({kind:`local-family`,family:e})}function mr(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 hr(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 gr(e,t){return F(e)===F(t)}function _r(e,t){return e.available?t():{}}function vr(e){if(!I(e.requesterId)||!I(e.identityIncarnationId)||!br(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 yr(e){let t=xr(e.token);if(!t||t.length!==2)return null;let[n,r]=t;if(!I(n)||!I(r)||!br(e.generation))return null;let i=Object.freeze({requesterId:n,requestGeneration:e.generation,identityIncarnationId:r});return vr(i).token===e.token?i:null}function br(e){return Number.isInteger(e)&&e>=0}function I(e){return typeof e==`string`&&e.trim().length>0}function xr(e){try{let t=JSON.parse(e);return Array.isArray(t)?t:null}catch{return null}}function Sr(e,t){let n={},r={};for(let i of t.required){let t=Cr(e.facts.operations,i);if(n[i]=t,!t.available)throw Or(i,t);r[i]=Er(e.operations,i)}for(let i of t.preferred){let t=Cr(e.facts.operations,i);n[i]=t,t.available&&(r[i]=Er(e.operations,i))}for(let i of t.conditional??[]){let t=Cr(e.facts.operations,i);n[i]=t,t.available&&(r[i]=Er(e.operations,i))}return Object.freeze({device:e.device,owner:e.owner,facts:Object.freeze(n),operations:Object.freeze(r)})}function Cr(e,t){let n=e[t];if(!wr(n))throw P(`Runtime owner omitted the ${t} fact`);let r=Tr(n);if(r)return r;throw P(`Runtime owner returned an invalid ${t} fact`)}function wr(e){return typeof e==`object`&&!!e&&`available`in e}function Tr(e){if(e.available===!0)return Object.freeze({available:!0});if(e.available===!1&&Dr(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 Er(e,t){let n=e[t];if(typeof n!=`function`)throw P(`Runtime owner advertised ${t} without an implementation`);return n}function Dr(e){return e===`unsupported-platform-leaf`||e===`unsupported-device-kind`||e===`unsupported-device-backend`||e===`unsupported-provider-mode`||e===`owner-capability-missing`}function Or(e,n){return new t(`UNSUPPORTED_OPERATION`,`Runtime operation ${e} 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 Ar(){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 L=Ar(),Mr=L({required:[`bootTarget`]}),Nr=L({required:[`bootTargetHeadless`]}),Pr=L({required:[`ensureReady`,`listApps`]}),Fr=L({required:[`captureSnapshot`]}),Ir=L({required:[`setViewport`]}),Lr=L({required:[`focusPoint`]}),Rr=L({required:[`typeText`]}),zr=L({required:[`back`]}),Br=L({required:[`home`]}),Vr=L({required:[`setOrientation`]}),Hr=L({required:[`tvRemote`]}),Ur=L({required:[`keyboardStatus`]}),Wr=L({required:[`keyboardDismiss`]}),Gr=L({required:[`keyboardEnter`]}),Kr=L({required:[`appSwitcher`]}),qr=L({required:[`triggerAppEvent`]}),Jr=L({required:[`setSetting`]}),Yr=L({required:[`readAlert`]}),Xr=L({required:[`awaitAlert`]}),Zr=L({required:[`acceptAlert`]}),Qr=L({required:[`dismissAlert`]}),$r=L({required:[`readClipboard`]}),ei=L({required:[`writeClipboard`]}),ti=L({required:[`perfFrames`]}),ni=L({required:[`perfMemorySample`]}),ri=L({required:[`perfMemorySnapshot`]}),ii=L({required:[`perfNativeCaptureStart`]}),ai=L({required:[`perfNativeCaptureReattach`,`perfNativeCaptureCleanup`]}),oi=L({required:[`perfProfileReport`]}),si=Object.freeze([ti,ni,ri,ii,ai,oi]),R=L({required:[`tapPoint`]}),ci=L({required:[`captureSnapshot`,`tapPoint`],preferred:[`tapRef`],conditional:[`tapElementSelector`]}),li=L({required:[`longPressPoint`]}),ui=L({required:[`captureSnapshot`,`longPressPoint`]}),di=L({required:[`hoverPoint`]}),fi=L({required:[`captureSnapshot`,`hoverPoint`],preferred:[`hoverRef`]}),pi=L({required:[`fillPoint`]}),z=L({required:[`captureSnapshot`,`fillPoint`],preferred:[`fillRef`]}),mi=Object.freeze([R,ci]),hi=mi,gi=Object.freeze([li,ui]),_i=Object.freeze([di,fi]),vi=Object.freeze([pi,z]);function yi(e,t){switch(e){case`click`:case`press`:return t?{kind:`captured-tap`,use:ci}:{kind:`tap-point`,use:R};case`fill`:return t?{kind:`captured-fill`,use:z}:{kind:`fill-point`,use:pi};case`longpress`:return t?{kind:`captured-long-press`,use:ui}:{kind:`long-press-point`,use:li};case`hover`:return t?{kind:`captured-hover`,use:fi}:{kind:`hover-point`,use:di}}}const bi=L({required:[`performGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),xi=L({required:[`performDirectionalFlingPlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Si=L({required:[`performMultiTouchGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Ci=L({required:[`performTargetAuthoredDrag`,`captureSnapshot`],preferred:[`gestureViewport`]}),wi=L({required:[`gestureViewport`]}),Ti=L({required:[`scrollDirection`]}),Ei=L({required:[`scrollDirection`,`captureSnapshot`]}),Di=Object.freeze({plan:bi,"directional-fling":xi,"multi-touch":Si,"target-authored-drag":Ci}),Oi=Object.freeze([bi,xi,Si,Ci]),ki=Object.freeze([bi]),Ai=Object.freeze([Ti,Ei]);function ji(e){return e.intent===`pan`?(`pointerCount`in e?e.pointerCount:1)===2:e.intent===`pinch`||e.intent===`rotate`||e.intent===`transform`}function Mi(e){return e.intent===`drag`?`target-authored-drag`:ji(e)?`multi-touch`:e.intent===`fling`&&`direction`in e?`directional-fling`:`plan`}function Ni(e){let t=Mi(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=Di[e];return Object.freeze({tier:e,operation:t.required[0],use:t})}function Pi(e){return e.edge===void 0?Object.freeze({kind:`direction`,use:Ti}):Object.freeze({kind:`edge`,edge:e.edge,use:Ei})}const Fi=L({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`]}),Ii=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),Li=L({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`,`captureSnapshotWithoutActiveApp`]}),Ri=L({required:[`captureSnapshot`]}),zi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),Bi=L({required:[`captureSnapshot`],preferred:[`readTextAtPoint`]}),Vi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],preferred:[`readTextAtPoint`]}),Hi=L({required:[`captureSnapshot`],conditional:[`findText`,`findSelector`]}),Ui=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],conditional:[`findText`,`findSelector`]}),Wi=Object.freeze([Ri,zi]),Gi=Object.freeze([Bi,Vi]),Ki=L({required:[`captureSnapshot`,`focusPoint`]}),qi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`]}),Ji=L({required:[`captureSnapshot`,`focusPoint`,`typeText`]}),Yi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`,`typeText`]}),Xi=Object.freeze([Bi,Vi,Ri,zi,Ki,qi,Ji,Yi]),Zi=Object.freeze([Hi,Ui]),Qi=Object.freeze([Fr,Fi,Ii,Li]),V=Object.freeze({"capture-only":Wi,"element-text":Gi,"wait-observation":Zi,"find-focus":Object.freeze([Ki,qi]),"find-type":Object.freeze([Ji,Yi])});function $i(e){return e===`focus`?`find-focus`:e===`type`?`find-type`:`capture-only`}function ea(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 ta(e){return e.customActions?e.hasActiveApp?Object.freeze({kind:`custom-actions-active-app`,operation:`captureSnapshotWithCustomActions`,use:Fi}):Object.freeze({kind:`custom-actions-without-active-app`,operation:`captureSnapshotWithCustomActions`,use:Li}):e.hasActiveApp?Object.freeze({kind:`active-app`,operation:`captureSnapshot`,use:Fr}):Object.freeze({kind:`without-active-app`,operation:`captureSnapshotWithoutActiveApp`,use:Ii})}const na=L({required:[`captureScreenshot`]}),ra=L({required:[`captureScreenshot`,`captureSnapshot`]}),ia=Object.freeze([na,ra]);function aa(e){return e.cropOn?Object.freeze({kind:`capture-with-crop-on`,use:ra}):e.overlayRefs?Object.freeze({kind:`capture-with-overlay-refs`,use:ra}):Object.freeze({kind:`capture`,use:na})}const oa=Object.freeze([Mr,Nr]),sa=Object.freeze({kind:`boot-target`,operation:`bootTarget`,use:Mr}),ca=Object.freeze({kind:`boot-target-headless`,operation:`bootTargetHeadless`,use:Nr});function la(e){return e.headless?ca:sa}const ua=L({required:[`ensureReady`,`appState`]}),da=Object.freeze([ua]),fa=L({required:[`shutdownTarget`]}),pa=Object.freeze([$r,ei]),ma=Object.freeze([Yr,Xr,Zr,Qr]),ha=Object.freeze([Ur,Wr,Gr]),ga=L({required:[`deployApp`]}),_a=L({required:[`ensureReady`,`materializeAppSource`,`deployMaterializedApp`]}),va=L({required:[`ensureReady`,`sendPushNotification`]}),ya=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`]}),ba=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`]}),xa=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`clearRuntimeHints`]}),Sa=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`,`clearRuntimeHints`]});function Ca(e){return e.applyRuntimeHints&&e.clearRemovedRuntimeHints?Object.freeze({kind:`open-apply-and-clear-runtime-hints`,use:Sa}):e.applyRuntimeHints?Object.freeze({kind:`open-apply-runtime-hints`,use:ba}):e.clearRemovedRuntimeHints?Object.freeze({kind:`open-clear-runtime-hints`,use:xa}):Object.freeze({kind:`open`,use:ya})}const wa=Object.freeze([ya,ba,xa,Sa]),Ta=L({required:[`closeApplication`,`finalizeApplicationClose`]}),Ea=L({required:[`closeApplication`,`finalizeApplicationClose`,`clearRuntimeHints`]}),Da=Object.freeze([Ta,Ea]),Oa=L({required:[`finalizeApplicationClose`]}),ka=L({required:[`finalizeApplicationClose`,`clearRuntimeHints`]}),Aa=L({required:[`prepareAppleRunner`]}),ja=L({required:[`clearRuntimeHints`]}),Ma=L({required:[`configureProviderPortReverse`]}),Na=Object.freeze([ja,Ma]),U=L({required:[`appLogInspect`]}),Pa=L({required:[`appLogInspect`,`appLogDoctor`]}),Fa=L({required:[`appLogInspect`,`appLogStart`]}),Ia=L({required:[],preferred:[`appLogInspect`]}),La=Object.freeze([U,Pa,Fa]);function Ra(e){let n=(e.action??`path`).toLowerCase();if(e.restart&&n!==`clear`)throw new t(`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:Fa});case`stop`:return Object.freeze({kind:`stop`,requiresAppSession:!1,use:U});case`doctor`:return Object.freeze({kind:`doctor`,requiresAppSession:!1,use:Pa});case`mark`:return Object.freeze({kind:`mark`,marker:e.marker??``,requiresAppSession:!1,use:U});case`clear`:return e.restart?Object.freeze({kind:`clear-restart`,requiresAppSession:!0,use:Fa}):Object.freeze({kind:`clear`,requiresAppSession:!1,use:U});default:throw new t(`INVALID_ARGS`,`logs requires path, start, stop, doctor, mark, or clear`)}}const za=L({required:[`audioProbeStart`]}),Ba=L({required:[`audioProbeReattach`,`audioProbeCleanup`]}),Va=L({required:[`audioProbeQuery`]}),Ha=Object.freeze([za,Ba,Va]);function Ua(e){if(e.mode===`query`)return Object.freeze({kind:`query`,action:e.probeAction,use:Va});switch(e.probeAction){case`start`:return Object.freeze({kind:`capture-start`,use:za});case`status`:return Object.freeze({kind:`capture-status`});case`stop`:return Object.freeze({kind:`capture-stop`})}}const Wa=[`probe`],Ga=[`start`,`status`,`stop`];function Ka(e){let n=(e?.[0]??`probe`).toLowerCase();if(!Wa.includes(n))throw new t(`INVALID_ARGS`,`audio requires probe`);let r=(e?.[1]??`status`).toLowerCase();if(!Ga.includes(r))throw new t(`INVALID_ARGS`,`audio probe requires ${Ga.join(`, `)}`);if(r!==`start`&&e&&e.length>2)throw new t(`INVALID_ARGS`,`audio probe duration and bucket are only supported with audio probe start`);return Object.freeze({probeAction:r,durationMs:qa(e?.[2],{defaultValue:1e4,min:100,max:12e4,message:`audio probe duration must be an integer in range 100..120000 ms`}),bucketMs:qa(e?.[3],{defaultValue:1e3,min:100,max:1e4,message:`audio probe bucket must be an integer in range 100..10000 ms`})})}function qa(e,n){if(e===void 0)return n.defaultValue;let r=Number.parseInt(e,10);if(!Number.isInteger(r)||String(r)!==e||r<n.min||r>n.max)throw new t(`INVALID_ARGS`,n.message);return r}const Ja=L({required:[`networkDump`]}),Ya=L({required:[],preferred:[`networkDump`]}),Xa=[`dump`,`log`],Za=[`summary`,`headers`,`body`,`all`];function Qa(e){let n=(e.action??`dump`).toLowerCase(),r=(e.include??`summary`).toLowerCase();if(!$a(n))throw new t(`INVALID_ARGS`,`network requires dump or log`);if(!eo(r))throw new t(`INVALID_ARGS`,`network --include must be summary, headers, body, or all`);return Object.freeze({action:n,include:r,use:Ja})}function $a(e){return Xa.some(t=>t===e)}function eo(e){return Za.some(t=>t===e)}function to(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,no(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=>ro(t,e)));return Object.freeze({families:a,modules:o,get:e=>ro(t,e)})}function no(e){return Object.freeze({...e})}function ro(e,t){let n=e.get(t);if(!n)throw TypeError(`Missing platform family registration: ${t}`);return n}const io=Object.freeze({kind:`device-inventory`});function ao(e){if(typeof e!=`object`||!e)throw po();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`])&&so(t.use))&&!(t.kind===`device-runtime`&&W(n,[`kind`,`use`])&&co(t.use))&&!(t.kind===`device-runtime`&&(W(n,[`kind`,`uses`])||W(n,[`kind`,`selectUses`,`uses`])&&typeof t.selectUses==`function`)&&oo(t.uses)))throw po()}function oo(e){if(!Array.isArray(e)||e.length===0||!e.every(co))return!1;let t=e.map(kr);return new Set(t).size===t.length}function so(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.kind===`device-inventory`&&W(Object.keys(t).sort(),[`kind`])}function co(e){if(typeof e!=`object`||!e)return!1;let t=e,n=[uo(t.required),uo(t.preferred),uo(t.conditional??[])];if(!lo(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 lo(e){return e.every(e=>e!==null&&fo(e))}function uo(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?e:null}function fo(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 po(){return TypeError(`Command platform execution must declare exactly one of none, host, inventory, or device-runtime`)}const mo=L({required:[`screenRecordingStart`]}),ho=L({required:[`screenRecordingReattach`,`screenRecordingCleanup`]}),go=L({required:[]}),_o=L({required:[],preferred:[`screenRecordingStart`]}),vo=Object.freeze([mo,ho]);function yo(e){switch((e.action??``).toLowerCase()){case`start`:if(!bo(e.scope??`app`))throw new t(`INVALID_ARGS`,`record scope must be app, device, or system`);return Object.freeze({kind:`start`,use:mo});case`stop`:return e.hasLiveHandle===!0?Object.freeze({kind:`stop-live`,use:go}):Object.freeze({kind:`stop-recovery`,use:ho});default:throw new t(`INVALID_ARGS`,`record requires start or stop`)}}function bo(e){return e===`app`||e===`device`||e===`system`}function xo(e){if(ao(e),e.kind!==`device-runtime`||!(`uses`in e))throw So();let t=e.uses.map(kr),n=vo.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 So()}function So(){return TypeError(`Record runtime execution must declare exactly the uses selected by its two runtime-bearing plans`)}function Co(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 ao(t),t}const G={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0},K={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0,selectorValidationExempt:!0},wo=()=>!0,To=e=>(e.positionals?.[0]??``).toLowerCase()===`start`,Eo=e=>e.command===`test`&&(typeof e.flags?.shardAll==`number`||typeof e.flags?.shardSplit==`number`),Do=e=>(e.positionals?.length??0)===0?{kind:`unconditional`}:void 0,Oo=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},ko=new Set([`status`,`get`]),Ao=e=>Lo(e,ko,`status`),jo=new Set([`get`,`wait`]),Mo=e=>Lo(e,jo,`get`),No=e=>Ro(e,ko,`status`),Po=e=>Ro(e,jo,`get`),Fo=e=>{try{return Jt(A(e.positionals??[]).action)?`observes-app`:`mutates-app`}catch{return`mutates-app`}},Io=e=>Ro(e,new Set([`read`]),``);function Lo(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`preserve`:`may-invalidate`}function Ro(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`observes-app`:`mutates-app`}const q={kind:`none`},zo={kind:`host`},J={recordsSessionAction:!0,recordingEffect:`mutates-app`,deviceClaimPolicy:`require-owner`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0},Bo={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`},Vo={...N,envelopeMs:18e4},Ho={...N,onTimeout:`preserve-daemon`},Uo={...Ho,envelopeMs:33e4},Wo={...N,budget:{source:`flag`,envelope:`widen`,defaultBudgetMs:1e4},onTimeout:`preserve-daemon`},Go={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}}},Ko={fields:{delayMs:{defaultValue:0}}};function X(e,t){return fr(e)===void 0?t:Wo}function Z(e){let t=fr(e);if(t===void 0)throw Error(`Missing post-action observation descriptor support for ${e}`);return t}const qo={deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:ga},timeoutPolicy:Vo,batchable:!0},Jo=e=>{let t=e.flags?.snapshotCustomActions===!0||e.input?.customActions===!0;return[!0,!1].map(e=>ta({customActions:t,hasActiveApp:e}).use)},Yo=e=>{let t=Zo(e);if(t===void 0||!Xo(t))return Xi;let n=$i(t);return[!0,!1].map(e=>ea({hasActiveApp:e,intent:n}).use)};function Xo(e){return Jt(e)||e===`focus`||e===`type`}function Zo(e){if(e.positionals===void 0)return;let t=tn(e.positionals,e.flags);return t.ok?t.parsed.action:void 0}const Qo=[{name:`human_control`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`humanControl`},recordsSessionAction:!1,daemon:{route:`humanControl`,refFrameEffect:`preserve`,selectorValidationExempt:!0,skipSessionlessProviderDevice:wo},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:Uo,batchable:!1,platformExecution:q},{name:`lease_heartbeat`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseHeartbeat`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...G},timeoutPolicy:Ho,batchable:!1,platformExecution:q},{name:`lease_release`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseRelease`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...G},timeoutPolicy:Ho,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:io}},{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:wo,...K},timeoutPolicy:N,batchable:!0,platformExecution:zo},{name:`apps`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0,sessionlessLeaseAdmissionExemption:Oo},platformExecution:{kind:`device-runtime`,uses:[Pr]},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:oa},timeoutPolicy:N,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:fa},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:da},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:si}},{name:`logs`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},platformExecution:{kind:`device-runtime`,uses:La},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:Ja},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:Ha}},{name:`replay`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,sessionKind:`replay`,skipSessionlessProviderDevice:Eo,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:Eo},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:[...Na,wi]}},{name:`clipboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:Io,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:No,daemon:{route:`session`,refFrameEffect:Ao,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ha}},{name:`install`,...qo},{name:`reinstall`,...qo},{name:`install_source`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`internal`,key:`installSource`},recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:_a},timeoutPolicy:Vo,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:va},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:[qr]}},{name:`open`,deviceClaimPolicy:`acquire-session`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`,allowSessionlessDefaultDevice:wo,saveScriptFlagOwner:!0},timeoutPolicy:{...N,budget:{source:`flag`,envelope:`margin`}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:wa}},{name:`prepare`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:{budget:{source:`flag`,envelope:`margin`},envelopeMs:nr,onTimeout:`reset-daemon`},batchable:!1,mcpExposed:!1,platformExecution:{kind:`device-runtime`,use:Aa}},{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:Do},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Da}},{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:Qi,selectUses:Jo}},{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:Qi,selectUses:Jo}},{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:tr}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:Zi}},{name:`alert`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:Po,daemon:{route:`snapshot`,refFrameEffect:Mo},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ma}},{name:`settings`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`snapshot`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[Jr]}},{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:To},platformExecution:{kind:`device-runtime`,uses:vo},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:Fo,daemon:{route:`find`,refFrameEffect:`may-invalidate`},timeoutPolicy:Y,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Xi,selectUses:Yo}},{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`),responseDataTransform:Go,batchable:!0,platformExecution:{kind:`device-runtime`,uses:mi}},{name:`fill`,...Bo,frameworkTier:`core`,timeoutPolicy:X(`fill`,Y),postActionObservation:Z(`fill`),responseDataTransform:Ko,batchable:!0,platformExecution:{kind:`device-runtime`,uses:vi}},{name:`longpress`,...Bo,catalog:{group:`public`,key:`longPress`},frameworkTier:`extended`,timeoutPolicy:{...Wo,envelopeMs:21e4},postActionObservation:Z(`longpress`),batchable:!0,platformExecution:{kind:`device-runtime`,uses:gi}},{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:_i}},{name:`press`,...Bo,frameworkTier:`core`,timeoutPolicy:X(`press`,Y),postActionObservation:Z(`press`),responseDataTransform:Go,batchable:!0,platformExecution:{kind:`device-runtime`,uses:hi}},{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:[Rr]}},{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:Gi}},{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:Wi}},{name:`back`,catalog:{group:`public`},frameworkTier:`core`,...J,timeoutPolicy:X(`back`,N),postActionObservation:Z(`back`),platformExecution:{kind:`device-runtime`,uses:[zr]}},{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:Oi}},{name:`home`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Br]}},{name:`tv-remote`,catalog:{group:`public`,key:`tvRemote`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Hr]}},{name:`orientation`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Vr]}},{name:`scroll`,catalog:{group:`public`},frameworkTier:`core`,...J,timeoutPolicy:X(`scroll`,N),postActionObservation:Z(`scroll`),platformExecution:{kind:`device-runtime`,uses:Ai}},{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:ki}},{name:`focus`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Lr]}},{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:ia}},{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:[Ir]}},{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:[Kr]}},{name:`install-from-source`,deviceClaimPolicy:`none`,catalog:{group:`public`,key:`installFromSource`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,platformExecution:{kind:`device-runtime`,use:_a},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:zo},{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:io}},{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:zo}],$o=new Set([`public`,`local-cli`]),es=new Set(Qo.filter(e=>$o.has(cs(e))).map(e=>e.name)),Q=Qo.map(e=>{let t=Co(e);return e.name===`record`&&xo(t),{...e,mcpExposed:os(e),platformExecution:t}});function ts(e){return Q.filter(t=>cs(t)===e).map(e=>[ls(e),e.name])}function ns(){return Q.filter(e=>ss(e)).map(e=>e.name).sort()}function rs(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 is(){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 as(e){return es.has(e)}function os(e){return e.mcpExposed??es.has(e.name)}function ss(e){return e.mcpExposed&&as(e.name)}function cs(e){return e.catalog.group}function ls(e){return e.catalog.key??e.name}const us=new Map(Q.map(e=>[e.name,e.timeoutPolicy])),ds=new Map(Q.map(e=>[e.name,e.deviceClaimPolicy])),fs=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 ms(e){return ps(e)!==void 0}function hs(e){return ps(e)===`settle-and-verify`}function gs(e){return e===void 0?N:us.get(e)??N}function _s(e){return e===void 0?`require-owner`:ds.get(e)??`require-owner`}function vs(e){if(e!==void 0)return fs.get(e)}function ys(e){return e===void 0?!1:$.get(e)?.recordsSessionAction??!1}function bs(e){if(e!==void 0)return $.get(e)?.frameworkTier}function xs(e){return $.get(e)?.targetIdentityVerification}function Ss(e){let t=$.get(e.command);if(t?.recordsSessionAction)return typeof t.recordingEffect==`function`?t.recordingEffect(e):t.recordingEffect}function Cs(){return[...new Set(Array.from(fs.values()).flatMap(e=>Object.keys(e.fields)))].sort()}function ws(e){let t=[];for(let n of e)n.daemon&&t.push({command:n.name,...n.daemon,replayScopedAction:n.recordsSessionAction});return t}function Ts(e){return e.filter(e=>e.batchable).map(e=>e.name)}const Es=Ts(Q),Ds=new Set([`batch`,`replay`]),Os=[`command`,`positionals`,`input`,`flags`,`runtime`],ks=[`platform`,`target`,`device`,`udid`,`serial`,`verbose`,`out`],As=`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.`,js=new Set(Es);function Ms(e){return js.has(e)}function Ns(e){return typeof e==`string`?e.trim().toLowerCase():``}function Ps(e){let t=Ns(e);return Ms(t)?t:void 0}function Fs(e,n,r=As){let i=Ps(e);if(i!==void 0)return i;throw new t(`INVALID_ARGS`,`Batch step ${n} command is not available through command batch: ${String(e)}`,{hint:r})}function Is(e,n){if(Ds.has(e))throw new t(`INVALID_ARGS`,`Batch step ${n} cannot run ${e}.`)}export{Yr as $,C as $n,nr as $t,Qa as A,qt as An,se as Ar,la as At,Oa as B,Rt as Bn,u as Br,Hr as Bt,gs as C,hn as Cn,he as Cr,Vr as Ct,ho as D,tn as Dn,m as Dr,ai as Dt,_o as E,en as En,fe as Er,ri as Et,Ra as F,It as Fn,te as Fr,ta as Ft,xa as G,Ft as Gn,hr as Gt,ya as H,kt as Hn,s as Hr,Ir as Ht,ja as I,Mt as In,ee as Ir,yi as It,ga as J,ft as Jn,F as Jt,Aa as K,rt as Kn,Sr as Kt,Ta as L,Ht as Ln,l as Lr,Jr as Lt,Ka as M,on as Mn,ne as Mr,aa as Mt,Ua as N,Ut as Nn,ie as Nr,Pi as Nt,to as O,Yt as On,ae as Or,ii as Ot,Ia as P,D as Pn,re as Pr,ea as Pt,Qr as Q,w as Qn,ir as Qt,Ea as R,zt as Rn,o as Rr,fa as Rt,vs as S,un as Sn,ge as Sr,li as St,yo as T,$t as Tn,ue as Tr,ni as Tt,Sa as U,Pt as Un,a as Ur,yr as Ut,ka as V,Lt as Vn,c as Vr,Rr as Vt,ba as W,Nt as Wn,pr as Wt,va as X,_t as Xn,_r as Xt,_a as Y,ht as Yn,gr as Yt,Zr as Z,dt as Zn,P as Zt,is as _,mn as _n,b as _r,Br as _t,Is as a,Vn as an,Xe as ar,zr as at,Ss as b,fn as bn,h as br,Gr as bt,Ps as c,zn as cn,Ze as cr,ui as ct,rs as d,jn as dn,Be as dr,ei as dt,ar as en,$e as er,Xr as et,ms as f,En as fn,xe as fr,L as ft,ns as g,Tn as gn,_ as gr,wi as gt,ts as h,wn as hn,y as hr,Lr as ht,Es as i,Nn as in,Ke as ir,Pr as it,Ba as j,A as jn,p as jr,Ni as jt,Ya as k,Jt as kn,oe as kr,oi as kt,ws as l,Un as ln,Re as lr,ci as lt,Cs as m,An as mn,Ce as mr,$i as mt,Os as n,M as nn,Qe as nr,ua as nt,Ns as o,Rn as on,Ye as or,z as ot,hs as p,On as pn,Te as pr,pi as pt,Ca as q,mt as qn,mr as qt,ks as r,Hn as rn,qe as rr,Kr as rt,Fs as s,Bn as sn,Je as sr,fi as st,As as t,Gn as tn,et as tr,qr as tt,Q as u,kn as un,Ve as ur,$r as ut,_s as v,pn as vn,v as vr,di as vt,xs as w,Gt as wn,_e as wr,ti as wt,ys as x,dn as xn,le as xr,Ur as xt,bs as y,gn as yn,ve as yr,Wr as yt,Ma as z,At as zn,d as zr,R as zt};
|
|
1
|
+
import{C as e,p as t}from"./sdk-contracts.js";import{f as n,n as r}from"./sdk-device.js";function i(e,t){return{ok:!1,code:`INVALID_ARGS`,message:e,...t?{hint:t}:{}}}const a=[`visible`,`hidden`,`exists`,`absent`,`editable`,`selected`,`focused`,`text`];function o(e){return!!(e&&[e.x,e.y,e.width,e.height].every(Number.isFinite)&&e.width>0&&e.height>0)}function s(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 c(e){return e.width*e.height}function l(e,t,n){return t>=e.x&&t<=e.x+e.width&&n>=e.y&&n<=e.y+e.height}function u(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 d(e,t){return f(e.x,e.x+e.width,t.x,t.x+t.width)&&f(e.y,e.y+e.height,t.y,t.y+t.height)}function f(e,t,n,r){return Math.max(e,n)<=Math.min(t,r)}function ee(e){let t=`${e??``}`.toLowerCase();return t.includes(`scroll`)||t.includes(`recyclerview`)||t.includes(`listview`)||t.includes(`gridview`)||t.includes(`collectionview`)||t===`table`}function te(e){return ee(e.type)?!0:`${e.role??``} ${e.subrole??``}`.toLowerCase().includes(`scroll`)}function ne(e){return new Map(e.map(e=>[e.index,e]))}function re(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 ie(e,t,n){return re(e,t,ne(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 ae(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 oe(e){let t=e.trim();return!(!t||/^(true|false)$/i.test(t)||/^\d+$/.test(t))}function se(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 ce=Symbol(`SnapshotVisibility`);function le(e,t={}){let n,r,i=()=>(n||(n=ne(e),t.onNodeMapBuilt?.()),n),a=()=>(r||(r=de(e),t.onViewportRectsCollected?.()),r),o=n=>pe(e,n,a(),t.onContainingRectFallback),s=n=>{let r=ge(n,i(),e=>!!e.rect)?.rect;if(r)return r;let o=a();return o.length===0?null:pe(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||d(e.rect,t)},l=e=>e.rect?c(e)?he(e.rect,o(e.rect)):!1:!0;return{[ce]:!0,get nodeByIndex(){return i()},get viewportRects(){return a()},findAncestor(t,n){return re(e,t,i(),n)},isVisibleInEffectiveViewport:c,isVisibleOnScreen:l,resolveEffectiveViewport:s,resolveViewport:o}}function ue(e){let t=[e.type,e.role,e.subrole].map(e=>p(e??``)).join(` `);return t.includes(`application`)||t.includes(`window`)}function de(e){return e.flatMap(e=>ue(e)&&o(e.rect)?[e.rect]:[])}function fe(e,t,n){return pe(e,t,n??de(e))}function pe(e,n,r,i){let a=t(n),o=e=>l(e,a.x,a.y);return(u(r.filter(o))??u(r))||(i?.(),u(e.flatMap(e=>me(e.rect)&&o(e.rect)?[e.rect]:[])))}function me(e){return e?Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.width)&&Number.isFinite(e.height):!1}function he(e,t){return!t||t.width<=0||t.height<=0||l(t,e.x+e.width/2,e.y+e.height/2)}function ge(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)&&te(r))return r;r=typeof r.parentIndex==`number`?t.get(r.parentIndex):void 0}return null}function _e(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&&o(e.rect):e.hittable===!0||o(e.rect)}function h(e){return e.hittable===!0?!0:e.rect?e.rect.width>0&&e.rect.height>0:!1}function g(e,t){return ae(e.type??``,t)&&e.enabled!==!1}const ve=new Set([`id`,`role`,`text`,`label`,`value`,`appname`,`windowtitle`]),_=new Set([`visible`,`hidden`,`editable`,`selected`,`focused`,`enabled`,`hittable`]),v=new Set([...ve,..._]),ye=[...v],be=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 xe(e){return be.has(e.trim().toLowerCase())}const Se=new Map([[`"`,`"`],[`'`,`'`],[`\\`,`\\`],[`/`,`/`],[`b`,`\b`],[`f`,`\f`],[`n`,`
|
|
2
|
+
`],[`r`,`\r`],[`t`,` `]]);function y(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Selector expression cannot be empty`);let r=Ee(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Selector expression cannot be empty`);return{raw:n,selectors:r.map(e=>we(e))}}function b(e){try{return y(e)}catch{return null}}function x(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 v.has(e)}return v.has(t.toLowerCase())}function Ce(e){let t=e.trim(),n=t.indexOf(`=`);if(n===-1)return null;let r=t.slice(0,n).trim().toLowerCase();if(!r||v.has(r))return null;let i=t.slice(n+1).trim();if(!i)return null;let a=ke(i).trim();return a?{key:r,value:a}:null}function S(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||!x(t))break;r+=1;let n=e.slice(0,r).join(` `).trim();n&&b(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 we(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Selector segment cannot be empty`);let r=De(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Invalid selector segment: ${t}`);return{raw:n,terms:r.map(Te)}}function Te(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(!_.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(!v.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(_.has(i)){let t=Me(a);if(t===null)throw new e(`INVALID_ARGS`,`Invalid boolean value for ${i}: ${a}`);return{key:i,value:t}}return{key:i,value:ke(a)}}function Ee(t){let n=[],r=``,i=null;for(let a=0;a<t.length;a+=1){let o=t[a];if((o===`"`||o===`'`)&&!Ne(t,a)){i=Oe(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 De(t){let n=[],r=``,i=null;for(let e=0;e<t.length;e+=1){let a=t.charAt(e);if((a===`"`||a===`'`)&&!Ne(t,e)){i=Oe(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 Oe(e,t){return e?e===t?null:e:t}function ke(e){let t=e.trim();return t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?Ae(t.slice(1,-1)):t}function Ae(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=je(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 je(e){return Se.get(e)??null}function Me(e){let t=ke(e).toLowerCase();return t===`true`||t!==`false`&&null}function Ne(e,t){let n=0;for(let r=t-1;r>=0&&e[r]===`\\`;--r)n+=1;return n%2==1}function Pe(e){return a.includes(e)}const Fe=`is requires predicate: ${a.join(`|`)}`;function Ie(e){let t=e.toLowerCase();return Pe(t)?{ok:!0,predicate:t}:i(Fe,Le)}const Le=`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 Re(e){if(Pe((e[0]??``).toLowerCase()))return e;for(let t=1;t<e.length;t+=1){let n=(e[t]??``).toLowerCase();if(Pe(n)&&b(e.slice(0,t).join(` `)))return[n,...e.slice(0,t),...e.slice(t+1)]}return e}function ze(e){let{predicate:t,node:n,nodes:r,expectedText:i,platform:a}=e,o=m(n),s=g(n,a),c=n.selected===!0,l=n.focused===!0,u=t===`text`?h(n):Ve(n,le(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 Be(t)}let f=t===`text`?`expected="${i??``}" actual="${o}"`:`actual=${JSON.stringify({visible:u,editable:s,selected:c,focused:l})}`;return{pass:d,actualText:o,details:f}}function Be(e){throw Error(`Unhandled is predicate: ${String(e)}`)}function Ve(e,t,n){if(n===`android`&&e.visibleToUser===!1)return!1;if(o(e.rect))return t.isVisibleInEffectiveViewport(e);if(e.rect)return!1;if(n!==`android`&&e.hittable===!0)return!0;let r=He(e,t,n);return r?o(r.rect)?t.isVisibleInEffectiveViewport(r):n!==`android`&&r.hittable===!0:!1}function He(e,t,n){return t.findAncestor(e,e=>_e(e,n)?e:null)}function Ue(e){let t=Re(e),n=t[0]??``;return{predicate:n,split:S(t.slice(1),{preferTrailingValue:n===`text`})}}const We=`is requires a selector expression`,Ge=`is text requires expected text value`;function Ke(e){let{predicate:t,split:n}=Ue([...e]),r=Ie(t);if(!r.ok)return r;if(!n)return i(We);let a=n.rest.join(` `).trim();return r.predicate===`text`&&!a?i(Ge):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 qe(e){return e===`text`||e===`attrs`?{ok:!0,format:e}:i(`get only supports text or attrs`)}function Je(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 Ye(e){return e?{ok:!0,text:e}:i(`wait requires text`)}function Xe(e){return Array.from(new Set(e))}function Ze(e){return JSON.stringify(Qe(e))}function Qe(e){if(Array.isArray(e))return e.map(Qe);if(!e||typeof e!=`object`)return e;let t=e;return Object.fromEntries(Object.keys(t).sort().map(e=>[e,Qe(t[e])]))}function $e(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 et=/^#\s*agent-device:target-v(\d+)(?:\s+(\S.*))?$/,tt=/^#\s*agent-device:targets-v(\d+)(?:\s+(\S.*))?$/,nt=4096;function rt(e){return e.normalize(`NFC`)}function it(e){if(e===void 0)return;let t=rt(e);return t.length>0?t:void 0}function at(e){return rt(e)}function ot(e){if(e===void 0)return;let t=rt(e).trim().replaceAll(/\s+/g,` `);return t.length>0?t:void 0}function C(e){return Buffer.byteLength(e,`utf8`)}function w(e,t){if(C(e)<=t)return e;let n=e.length;for(;n>0&&C(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 st(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(ct),t.sibling=e.sibling,t.viewportOrder=e.viewportOrder,e.scrollRegion&&(t.scrollRegion=lt(e.scrollRegion)),e.rect&&(t.rect=ut(e.rect)),t.verification=e.verification,t}function ct(e){let t={role:e.role};return e.label!==void 0&&(t.label=e.label),t}function lt(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 ut(e){return{x:e.x,y:e.y,width:e.width,height:e.height}}function dt(e){return JSON.stringify(st(e))}function ft(e){return`# agent-device:target-v1 ${dt(e)}`}function pt(e){return JSON.stringify({source:st(e.source),destination:st(e.destination)})}function mt(e){return`# agent-device:targets-v1 ${pt(e)}`}function ht(e){let t=e.trim(),n=tt.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:gt((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function gt(t){if(C(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:vt(JSON.stringify(r.source)),destination:vt(JSON.stringify(r.destination))}}function _t(e){let t=e.trim();if(!t.startsWith(`#`))return{kind:`none`};let n=et.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:vt((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function vt(t){if(C(t)>4096)throw new e(`INVALID_ARGS`,`target-v1 annotation exceeds the ${nt}-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=yt(r.role,`role`),a=bt(r.id,`id`),o=xt(r.label,`label`),s=Ct(r.ancestry),c=Tt(r.sibling,`sibling`,0),l=Tt(r.viewportOrder,`viewportOrder`,0),u=Et(r.scrollRegion),d=Dt(r.rect),f=Ot(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:f}}function yt(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 St(at(t),n)}function bt(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=it(t);return r===void 0?void 0:St(r,n)}function xt(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=ot(t);return r===void 0?void 0:St(r,n)}function St(t,n){if(C(t)>256)throw new e(`INVALID_ARGS`,`target-v1 "${n}" exceeds the 256-byte field cap.`);return t}function Ct(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)=>wt(e,t))}function wt(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=yt(r.role,`ancestry[${n}].role`),a=xt(r.label,`ancestry[${n}].label`);return{role:i,...a===void 0?{}:{label:a}}}function Tt(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 Et(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=yt(n.role,`scrollRegion.role`),i=bt(n.id,`id`),a=xt(n.label,`scrollRegion.label`);return{role:r,...i===void 0?{}:{id:i},...a===void 0?{}:{label:a}}}function Dt(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:T(n.x,`rect.x`),y:T(n.y,`rect.y`),width:T(n.width,`rect.width`),height:T(n.height,`rect.height`)}}function T(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 Ot(t){if(t===`verified`||t===`unverifiable`)return t;throw new e(`INVALID_ARGS`,`target-v1 "verification" must be "verified" or "unverifiable".`)}function kt(e){let t=at(p(e.type??``)),n=it(e.identifier),r=ot(e.label);return{...n===void 0?{}:{id:w(n,256)},role:w(t,256),...r===void 0?{}:{label:w(r,256)}}}function At(e,t){return e.id===t.id&&e.role===t.role&&e.label===t.label}function jt(e,t){let n=0;for(let r of e)kt(r).id===t&&(n+=1);return n}function Mt(e,t){if(e.id===void 0||jt(t,e.id)<=1)return e;let{role:n,label:r}=e;return{role:n,...r===void 0?{}:{label:r}}}function Nt(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 Pt(e,t){return{documentOrder:e.index,sibling:Nt(t,e)}}function Ft(e,t){return e.documentOrder===t.documentOrder&&e.sibling===t.sibling}function It(e){return{...e.id===void 0?{}:{id:e.id},role:e.role,...e.label===void 0?{}:{label:e.label}}}function Lt(e,t){return t.id===void 0?e.role===t.role&&e.label===t.label:e.id===t.id}function Rt(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 zt(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 Bt(e){return e?`${e.role}${e.label?`/${e.label}`:``}`:`(missing)`}function Vt(e,t){return!t||t.role!==e.role||e.label!==void 0&&t.label!==e.label}function Ht(e,t){for(let[n,r]of e.entries()){let e=t[n];if(Vt(r,e))return[`ancestry[${n}]: recorded=${Bt(r)} observed=${Bt(e)}`]}return[]}function Ut(e,t,n={}){let r=[],i=p(e.type??``),a=Wt(e,n.nodes),o=D(e.label),s=D(e.value),c=D(m(e)),l=n.action===`fill`;a&&r.push(`id=${E(a)}`),i&&o&&r.push(l?`role=${E(i)} label=${E(o)} editable=true`:`role=${E(i)} label=${E(o)}`),o&&r.push(l?`label=${E(o)} editable=true`:`label=${E(o)}`),s&&r.push(l?`value=${E(s)} editable=true`:`value=${E(s)}`),c&&c!==o&&c!==s&&r.push(l?`text=${E(c)} editable=true`:`text=${E(c)}`),i&&l&&!r.some(e=>e.includes(`editable=true`))&&r.push(`role=${E(i)} editable=true`);let u=Xe(r);return u.length===0&&i&&u.push(l?`role=${E(i)} editable=true`:`role=${E(i)}`),u.length===0&&h(e)&&u.push(`visible=true`),u}function Wt(e,t){let n=D(e.identifier);if(!n||!t)return n;let r=kt(e).id;return r===void 0?n:jt(t,r)>1?null:n}function E(e){return JSON.stringify(e)}function D(e){return e&&e.trim()||null}const Gt=[`any`,`text`,`label`,`value`,`role`,`id`],Kt=[`text`,`label`,`value`,`role`,`id`];function qt(e){let t=e?.toLowerCase();return t===`press`||t===`tap`?`click`:t}function O(e){return e===`exists`||e===`wait`||e===`get_text`||e===`get_attrs`||e===`list`}function Jt(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=Yt(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 Yt(e,t,n){switch(t){case`role`:return Xt(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 Xt(e,t){let n=Zt(e??``);return n?n===t?2:+!!n.includes(t):0}function A(e){return e.trim().toLowerCase().replaceAll(/\s+/g,` `)}function Zt(e){let t=e.trim();return t?(t=(t.split(`.`).pop()??t).replaceAll(/XCUIElementType/gi,``).toLowerCase(),t):``}const Qt=`find requires a value`,$t=`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 en(e,t){if(e.length===0)return{ok:!1,code:`INVALID_ARGS`,message:`find requires a locator or text`};let n=rn([...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:Qt}}const tn=[`exists`,`list`,`click`,`focus`];function nn(e){return tn.includes(e)}function rn(t){let n=`any`,r=0;Kt.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=qt(a[0]);if(nn(o))return{locator:n,query:i,action:o};if(o===`get`)return{locator:n,query:i,action:an(a[1])};if(o===`wait`){let e=sn(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:$t})}function an(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 on(e,t){return e!==`any`||!t.includes(`=`)&&!t.includes(`||`)?null:b(t)?t:null}function sn(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}function cn(e,t,n){return t.terms.every(t=>ln(e,t,n))}function ln(e,t,n){switch(t.key){case`id`:return j(e.identifier,String(t.value));case`role`:return j(p(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(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 h(e)===!!t.value;case`hidden`:return!h(e)==!!t.value;case`editable`:return g(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 un(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=_n(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 dn(e,t,n){return un(e,t,n).resolution}function fn(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:cn(e,a,n.platform));if(t.length>0)return{selector:a,selectorIndex:i,matchedNodes:t}}return null}function pn(e,t,n){let r=n.requireRect??!1,i=[];for(let[a,o]of t.selectors.entries()){let t=xn(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 mn=`Snapshot refs expire when the UI changes. Run snapshot -i and retry with a fresh @ref.`;function hn(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 gn(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 _n(e,t,n,r){let i=0,a=null,o=[],s={best:null,bestVisible:!1,tie:!1},c=le(e).isVisibleOnScreen;for(let l of e)r&&!l.rect||cn(l,t,n)&&(i+=1,a??=l,o.push(l),vn(s,l,c));return{count:i,firstNode:a,disambiguated:s.tie?null:s.best,tiebreak:s.tie?null:yn(o,s.best,c),candidates:o}}function vn(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=Sn(t,e.best);i.result>0?(e.best=t,e.tie=!1):i.result===0&&(e.tie=!0)}function yn(e,t,n){if(!t)return null;let r=null;for(let i of e)i!==t&&(!r||bn(i,r,n).result>0)&&(r=i);return r?bn(t,r,n).criterion:null}function bn(e,t,n){let r=n(e);return r===n(t)?Sn(e,t):{result:r?1:-1,criterion:`visible`}}function xn(e,t,n,r){let i=0;for(let a of e)r&&!a.rect||cn(a,t,n)&&(i+=1);return i}function Sn(e,t){let n=e.depth??0,r=t.depth??0;if(n!==r)return{result:n>r?1:-1,criterion:`deepest`};let i=Cn(e),a=Cn(t);return i===a?{result:0,criterion:null}:{result:i<a?1:-1,criterion:`smallest-area`}}function Cn(e){return e.rect?e.rect.width*e.rect.height:1/0}const wn={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 Tn(e){return e.ambiguity===`first-match`?{requireRect:e.requireRect,requireUnique:!1}:{requireRect:e.requireRect,requireUnique:!0,disambiguateAmbiguous:e.ambiguity===`disambiguate`}}function En(e,t){let n=e===`is`?Ue([...t]).split:S([...t]);return n?b(n.selectorExpression)?{kind:`expression`,expression:n.selectorExpression,rest:n.rest}:{kind:`invalid`}:{kind:`not-applicable`}}function Dn(e){return{platform:e.platform,...Tn({ambiguity:e.allowDisambiguation?`disambiguate`:`fail-closed`,requireRect:e.requireRect})}}function On(e,t,n){let r=b(e);if(!r)return{kind:`unresolved`,reason:`parse-invalid`,matchedNodes:[]};let{resolution:i,matchedNodes:a}=un(t,r,Dn(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 kn(e,t,n={}){return Ut(e,t,n)}function An(e,t,n){let r=b(e);if(!r)return;let i=dn(t,r,Dn(n));if(i)return{node:i.node,basis:Mn(i.selector)}}function jn(e){if(!e)return;let t=b(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 Mn(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 Nn(e,t){let n=b(e);if(!n)return e.includes(`=`)||e.includes(`||`)?null:e;let r=new Set(t.textKeys),i=t.textAliases??{};return n.selectors.length>1?Pn(n.selectors,r,i):Fn(n.selectors[0],r,new Set(t.booleanKeys),i)}function Pn(e,t,n){let r=e.map(e=>{let r=e.terms.length===1?e.terms[0]:void 0;return r&&In(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 Fn(e,t,n,r){if(!e)return null;let i={},a=0;for(let o of e.terms){if(In(o.key,t,r)&&typeof o.value==`string`)a+=1;else if(!Ln(o,n,`boolean`))return null;i[r[o.key]??o.key]=o.value}return a<=1&&Object.keys(i).length>0?i:null}function In(e,t,n){return t.has(e)||n[e]!==void 0}function Ln(e,t,n){return t.has(e.key)&&typeof e.value===n}function Rn(e){let t=b(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 zn(e,t){if(!t)return!1;let n=b(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 Bn(e,t){return b(e)?.selectors.some(e=>e.terms.some(e=>e.key===t))??!1}function Vn(e){return y(e).selectors.map(e=>e.raw)}function Hn(e){return b(e)!==null}function Un(e){y(e)}function M(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}const Wn=new Set([`exists`,`present`,`appears`,`gone`,`disappears`]);function Gn(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`?Kn(e,r):t===`stable`?qn(e):t===`absent`?Jn(e,r):t.startsWith(`@`)?{kind:`ref`,rawRef:t,timeoutMs:r}:Xn(e,r)}function Kn(e,t){return{kind:`text`,text:(t===null?e.slice(1).join(` `):e.slice(1,-1).join(` `)).trim(),timeoutMs:t}}function qn(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 Jn(e,t){let n=t===null?e.slice(1):e.slice(1,-1),r=S(n);return n.length>0&&r?.rest.length===0&&Hn(r.selectorExpression)?{kind:`absent`,selectorExpression:r.selectorExpression,timeoutMs:t}:{kind:`invalid`,reason:`absent-selector-required`,message:Yn(n)}}function Yn(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 Xn(e,t){let n=t===null?e.slice():e.slice(0,-1),r=S(n);return r&&r.rest.length===0&&Hn(r.selectorExpression)?{kind:`selector`,selectorExpression:r.selectorExpression,timeoutMs:t}:Zn(n,r)||{kind:`text`,text:(t===null?e.join(` `):e.slice(0,-1).join(` `)).trim(),timeoutMs:t}}function Zn(e,t){for(let t of e){let n=Ce(t);if(n)return{kind:`invalid`,reason:`unknown-selector-key`,message:Qn(n,e)}}return t&&t.rest.length>0?{kind:`invalid`,reason:`selector-shaped-text`,message:$n(t,e)}:e.some(e=>x(e))?{kind:`invalid`,reason:`selector-shaped-text`,message:er(e)}:null}function Qn(e,t){let n=t.join(` `),r=xe(e.key)?`role=${e.key} label="${e.value}"`:`label="${e.value}"`;return`Unknown selector key "${e.key}" in "${n}". Supported: ${ye.join(`, `)}. Use wait '${r}' [timeoutMs] to wait for the selector, or wait text '${n}' [timeoutMs] to wait for the literal text "${n}".`}function $n(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 er(e){let t=e.join(` `),n=e.filter(e=>!x(e)),r=e.filter(e=>x(e));if(n.length>0){let e=n[0],i=Wn.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 (${ye.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 tr(e){let t=Gn(e);return t?t.kind===`sleep`?t.durationMs:t.kind===`invalid`?null:t.timeoutMs:null}const nr=24e4,rr=3e4,ir=3e5,N={budget:{source:`none`},envelopeMs:9e4,onTimeout:`reset-daemon`};function ar(e,t){if(e.envelopeMs===`unbounded`)return;let n={...e,envelopeMs:e.envelopeMs};return or(n,t.positionals??[])??sr(n,t.flags)??n.envelopeMs}function or(e,t){if(e.budget.source!==`positional-parser`)return;let n=e.budget.parser(t);return n===null?void 0:lr(e,n)}function sr(e,t){if(e.budget.source===`flag`)return e.budget.envelope===`widen`?cr(e,e.budget,t):e.budget.envelope===`margin`?typeof t?.timeoutMs==`number`?lr(e,t.timeoutMs):e.envelopeMs:typeof t?.timeoutMs==`number`?t.timeoutMs:e.envelopeMs}function cr(e,t,n){if(n?.settle!==!0)return e.envelopeMs;let r=typeof n.timeoutMs==`number`?n.timeoutMs:t.defaultBudgetMs;return typeof r==`number`?ur(e,r):e.envelopeMs}function lr(e,t){return Math.max(e.envelopeMs,t+rr)}function ur(e,t){return Math.max(e.envelopeMs,e.envelopeMs+t+rr)}const dr={click:`settle-and-verify`,press:`settle-and-verify`,fill:`settle-and-verify`,longpress:`settle`,hover:`settle`,scroll:`settle`,back:`settle`};function fr(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 pr(e){if(!n(e))throw TypeError(`Unknown local runtime family: ${String(e)}`);return Object.freeze({kind:`local-family`,family:e})}function mr(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 hr(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 gr(e,t){return F(e)===F(t)}function _r(e,t){return e.available?t():{}}function vr(e){if(!I(e.requesterId)||!I(e.identityIncarnationId)||!br(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 yr(e){let t=xr(e.token);if(!t||t.length!==2)return null;let[n,r]=t;if(!I(n)||!I(r)||!br(e.generation))return null;let i=Object.freeze({requesterId:n,requestGeneration:e.generation,identityIncarnationId:r});return vr(i).token===e.token?i:null}function br(e){return Number.isInteger(e)&&e>=0}function I(e){return typeof e==`string`&&e.trim().length>0}function xr(e){try{let t=JSON.parse(e);return Array.isArray(t)?t:null}catch{return null}}function Sr(e,t){let n={},r={};for(let i of t.required){let t=Cr(e.facts.operations,i);if(n[i]=t,!t.available)throw Or(i,t);r[i]=Er(e.operations,i)}for(let i of t.preferred){let t=Cr(e.facts.operations,i);n[i]=t,t.available&&(r[i]=Er(e.operations,i))}for(let i of t.conditional??[]){let t=Cr(e.facts.operations,i);n[i]=t,t.available&&(r[i]=Er(e.operations,i))}return Object.freeze({device:e.device,owner:e.owner,facts:Object.freeze(n),operations:Object.freeze(r)})}function Cr(e,t){let n=e[t];if(!wr(n))throw P(`Runtime owner omitted the ${t} fact`);let r=Tr(n);if(r)return r;throw P(`Runtime owner returned an invalid ${t} fact`)}function wr(e){return typeof e==`object`&&!!e&&`available`in e}function Tr(e){if(e.available===!0)return Object.freeze({available:!0});if(e.available===!1&&Dr(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 Er(e,t){let n=e[t];if(typeof n!=`function`)throw P(`Runtime owner advertised ${t} without an implementation`);return n}function Dr(e){return e===`unsupported-platform-leaf`||e===`unsupported-device-kind`||e===`unsupported-device-backend`||e===`unsupported-provider-mode`||e===`owner-capability-missing`}function Or(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 Ar(){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 L=Ar(),Mr=L({required:[`bootTarget`]}),Nr=L({required:[`bootTargetHeadless`]}),Pr=L({required:[`ensureReady`,`listApps`]}),Fr=L({required:[`captureSnapshot`]}),Ir=L({required:[`setViewport`]}),Lr=L({required:[`focusPoint`]}),Rr=L({required:[`typeText`]}),zr=L({required:[`back`]}),Br=L({required:[`home`]}),Vr=L({required:[`setOrientation`]}),Hr=L({required:[`tvRemote`]}),Ur=L({required:[`keyboardStatus`]}),Wr=L({required:[`keyboardDismiss`]}),Gr=L({required:[`keyboardEnter`]}),Kr=L({required:[`appSwitcher`]}),qr=L({required:[`triggerAppEvent`]}),Jr=L({required:[`setSetting`]}),Yr=L({required:[`readAlert`]}),Xr=L({required:[`awaitAlert`]}),Zr=L({required:[`acceptAlert`]}),Qr=L({required:[`dismissAlert`]}),$r=L({required:[`readClipboard`]}),ei=L({required:[`writeClipboard`]}),ti=L({required:[`perfFrames`]}),ni=L({required:[`perfMemorySample`]}),ri=L({required:[`perfMemorySnapshot`]}),ii=L({required:[`perfNativeCaptureStart`]}),ai=L({required:[`perfNativeCaptureReattach`,`perfNativeCaptureCleanup`]}),oi=L({required:[`perfProfileReport`]}),si=Object.freeze([ti,ni,ri,ii,ai,oi]),R=L({required:[`tapPoint`]}),ci=L({required:[`captureSnapshot`,`tapPoint`],preferred:[`tapRef`],conditional:[`tapElementSelector`]}),li=L({required:[`longPressPoint`]}),ui=L({required:[`captureSnapshot`,`longPressPoint`]}),di=L({required:[`hoverPoint`]}),fi=L({required:[`captureSnapshot`,`hoverPoint`],preferred:[`hoverRef`]}),pi=L({required:[`fillPoint`]}),z=L({required:[`captureSnapshot`,`fillPoint`],preferred:[`fillRef`]}),mi=Object.freeze([R,ci]),hi=mi,gi=Object.freeze([li,ui]),_i=Object.freeze([di,fi]),vi=Object.freeze([pi,z]);function yi(e,t){switch(e){case`click`:case`press`:return t?{kind:`captured-tap`,use:ci}:{kind:`tap-point`,use:R};case`fill`:return t?{kind:`captured-fill`,use:z}:{kind:`fill-point`,use:pi};case`longpress`:return t?{kind:`captured-long-press`,use:ui}:{kind:`long-press-point`,use:li};case`hover`:return t?{kind:`captured-hover`,use:fi}:{kind:`hover-point`,use:di}}}const bi=L({required:[`performGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),xi=L({required:[`performDirectionalFlingPlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Si=L({required:[`performMultiTouchGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Ci=L({required:[`performTargetAuthoredDrag`,`captureSnapshot`],preferred:[`gestureViewport`]}),wi=L({required:[`gestureViewport`]}),Ti=L({required:[`scrollDirection`]}),Ei=L({required:[`scrollDirection`,`captureSnapshot`]}),Di=Object.freeze({plan:bi,"directional-fling":xi,"multi-touch":Si,"target-authored-drag":Ci}),Oi=Object.freeze([bi,xi,Si,Ci]),ki=Object.freeze([bi]),Ai=Object.freeze([Ti,Ei]);function ji(e){return e.intent===`pan`?(`pointerCount`in e?e.pointerCount:1)===2:e.intent===`pinch`||e.intent===`rotate`||e.intent===`transform`}function Mi(e){return e.intent===`drag`?`target-authored-drag`:ji(e)?`multi-touch`:e.intent===`fling`&&`direction`in e?`directional-fling`:`plan`}function Ni(e){let t=Mi(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=Di[e];return Object.freeze({tier:e,operation:t.required[0],use:t})}function Pi(e){return e.until===void 0?e.edge===void 0?Object.freeze({kind:`direction`,use:Ti}):Object.freeze({kind:`edge`,edge:e.edge,use:Ei}):Object.freeze({kind:`until`,until:e.until,use:Ei})}const Fi=L({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`]}),Ii=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),Li=L({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`,`captureSnapshotWithoutActiveApp`]}),Ri=L({required:[`captureSnapshot`]}),zi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),Bi=L({required:[`captureSnapshot`],preferred:[`readTextAtPoint`]}),Vi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],preferred:[`readTextAtPoint`]}),Hi=L({required:[`captureSnapshot`],conditional:[`findText`]}),Ui=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],conditional:[`findText`]}),Wi=Object.freeze([Ri,zi]),Gi=Object.freeze([Bi,Vi]),Ki=L({required:[`captureSnapshot`,`focusPoint`]}),qi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`]}),Ji=L({required:[`captureSnapshot`,`focusPoint`,`typeText`]}),Yi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`,`typeText`]}),Xi=Object.freeze([Bi,Vi,Ri,zi,Ki,qi,Ji,Yi]),Zi=Object.freeze([Hi,Ui]),Qi=Object.freeze([Fr,Fi,Ii,Li]),V=Object.freeze({"capture-only":Wi,"element-text":Gi,"wait-observation":Zi,"find-focus":Object.freeze([Ki,qi]),"find-type":Object.freeze([Ji,Yi])});function $i(e){return e===`focus`?`find-focus`:e===`type`?`find-type`:`capture-only`}function ea(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 ta(e){return e.customActions?e.hasActiveApp?Object.freeze({kind:`custom-actions-active-app`,operation:`captureSnapshotWithCustomActions`,use:Fi}):Object.freeze({kind:`custom-actions-without-active-app`,operation:`captureSnapshotWithCustomActions`,use:Li}):e.hasActiveApp?Object.freeze({kind:`active-app`,operation:`captureSnapshot`,use:Fr}):Object.freeze({kind:`without-active-app`,operation:`captureSnapshotWithoutActiveApp`,use:Ii})}const na=L({required:[`captureScreenshot`]}),ra=L({required:[`captureScreenshot`,`captureSnapshot`]}),ia=Object.freeze([na,ra]);function aa(e){return e.cropOn?Object.freeze({kind:`capture-with-crop-on`,use:ra}):e.overlayRefs?Object.freeze({kind:`capture-with-overlay-refs`,use:ra}):Object.freeze({kind:`capture`,use:na})}const oa=Object.freeze([Mr,Nr]),sa=Object.freeze({kind:`boot-target`,operation:`bootTarget`,use:Mr}),ca=Object.freeze({kind:`boot-target-headless`,operation:`bootTargetHeadless`,use:Nr});function la(e){return e.headless?ca:sa}const ua=L({required:[`ensureReady`,`appState`]}),da=Object.freeze([ua]),fa=L({required:[`shutdownTarget`]}),pa=Object.freeze([$r,ei]),ma=Object.freeze([Yr,Xr,Zr,Qr]),ha=Object.freeze([Ur,Wr,Gr]),ga=L({required:[`deployApp`]}),_a=L({required:[`ensureReady`,`materializeAppSource`,`deployMaterializedApp`]}),va=L({required:[`ensureReady`,`sendPushNotification`]}),ya=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`]}),ba=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`]}),xa=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`clearRuntimeHints`]}),Sa=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`,`clearRuntimeHints`]});function Ca(e){return e.applyRuntimeHints&&e.clearRemovedRuntimeHints?Object.freeze({kind:`open-apply-and-clear-runtime-hints`,use:Sa}):e.applyRuntimeHints?Object.freeze({kind:`open-apply-runtime-hints`,use:ba}):e.clearRemovedRuntimeHints?Object.freeze({kind:`open-clear-runtime-hints`,use:xa}):Object.freeze({kind:`open`,use:ya})}const wa=Object.freeze([ya,ba,xa,Sa]),Ta=L({required:[`closeApplication`,`finalizeApplicationClose`]}),Ea=L({required:[`closeApplication`,`finalizeApplicationClose`,`clearRuntimeHints`]}),Da=Object.freeze([Ta,Ea]),Oa=L({required:[`finalizeApplicationClose`]}),ka=L({required:[`finalizeApplicationClose`,`clearRuntimeHints`]}),Aa=L({required:[`prepareAppleRunner`]}),ja=L({required:[`clearRuntimeHints`]}),Ma=L({required:[`configureProviderPortReverse`]}),Na=Object.freeze([ja,Ma]),U=L({required:[`appLogInspect`]}),Pa=L({required:[`appLogInspect`,`appLogDoctor`]}),Fa=L({required:[`appLogInspect`,`appLogStart`]}),Ia=L({required:[],preferred:[`appLogInspect`]}),La=Object.freeze([U,Pa,Fa]);function Ra(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:Fa});case`stop`:return Object.freeze({kind:`stop`,requiresAppSession:!1,use:U});case`doctor`:return Object.freeze({kind:`doctor`,requiresAppSession:!1,use:Pa});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:Fa}):Object.freeze({kind:`clear`,requiresAppSession:!1,use:U});default:throw new e(`INVALID_ARGS`,`logs requires path, start, stop, doctor, mark, or clear`)}}const za=L({required:[`audioProbeStart`]}),Ba=L({required:[`audioProbeReattach`,`audioProbeCleanup`]}),Va=L({required:[`audioProbeQuery`]}),Ha=Object.freeze([za,Ba,Va]);function Ua(e){if(e.mode===`query`)return Object.freeze({kind:`query`,action:e.probeAction,use:Va});switch(e.probeAction){case`start`:return Object.freeze({kind:`capture-start`,use:za});case`status`:return Object.freeze({kind:`capture-status`});case`stop`:return Object.freeze({kind:`capture-stop`})}}const Wa=[`probe`],Ga=[`start`,`status`,`stop`];function Ka(t){let n=(t?.[0]??`probe`).toLowerCase();if(!Wa.includes(n))throw new e(`INVALID_ARGS`,`audio requires probe`);let r=(t?.[1]??`status`).toLowerCase();if(!Ga.includes(r))throw new e(`INVALID_ARGS`,`audio probe requires ${Ga.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:qa(t?.[2],{defaultValue:1e4,min:100,max:12e4,message:`audio probe duration must be an integer in range 100..120000 ms`}),bucketMs:qa(t?.[3],{defaultValue:1e3,min:100,max:1e4,message:`audio probe bucket must be an integer in range 100..10000 ms`})})}function qa(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 Ja=L({required:[`networkDump`]}),Ya=L({required:[],preferred:[`networkDump`]}),Xa=[`dump`,`log`],Za=[`summary`,`headers`,`body`,`all`];function Qa(t){let n=(t.action??`dump`).toLowerCase(),r=(t.include??`summary`).toLowerCase();if(!$a(n))throw new e(`INVALID_ARGS`,`network requires dump or log`);if(!eo(r))throw new e(`INVALID_ARGS`,`network --include must be summary, headers, body, or all`);return Object.freeze({action:n,include:r,use:Ja})}function $a(e){return Xa.some(t=>t===e)}function eo(e){return Za.some(t=>t===e)}function to(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,no(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=>ro(t,e)));return Object.freeze({families:a,modules:o,get:e=>ro(t,e)})}function no(e){return Object.freeze({...e})}function ro(e,t){let n=e.get(t);if(!n)throw TypeError(`Missing platform family registration: ${t}`);return n}const io=Object.freeze({kind:`device-inventory`});function ao(e){if(typeof e!=`object`||!e)throw po();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`])&&so(t.use))&&!(t.kind===`device-runtime`&&W(n,[`kind`,`use`])&&co(t.use))&&!(t.kind===`device-runtime`&&(W(n,[`kind`,`uses`])||W(n,[`kind`,`selectUses`,`uses`])&&typeof t.selectUses==`function`)&&oo(t.uses)))throw po()}function oo(e){if(!Array.isArray(e)||e.length===0||!e.every(co))return!1;let t=e.map(kr);return new Set(t).size===t.length}function so(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.kind===`device-inventory`&&W(Object.keys(t).sort(),[`kind`])}function co(e){if(typeof e!=`object`||!e)return!1;let t=e,n=[uo(t.required),uo(t.preferred),uo(t.conditional??[])];if(!lo(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 lo(e){return e.every(e=>e!==null&&fo(e))}function uo(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?e:null}function fo(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 po(){return TypeError(`Command platform execution must declare exactly one of none, host, inventory, or device-runtime`)}const mo=L({required:[`screenRecordingStart`]}),ho=L({required:[`screenRecordingReattach`,`screenRecordingCleanup`]}),go=L({required:[]}),_o=L({required:[],preferred:[`screenRecordingStart`]}),vo=Object.freeze([mo,ho]);function yo(t){switch((t.action??``).toLowerCase()){case`start`:if(!bo(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:go}):Object.freeze({kind:`stop-recovery`,use:ho});default:throw new e(`INVALID_ARGS`,`record requires start or stop`)}}function bo(e){return e===`app`||e===`device`||e===`system`}function xo(e){if(ao(e),e.kind!==`device-runtime`||!(`uses`in e))throw So();let t=e.uses.map(kr),n=vo.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 So()}function So(){return TypeError(`Record runtime execution must declare exactly the uses selected by its two runtime-bearing plans`)}function Co(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 ao(t),t}const G={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0},K={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0,selectorValidationExempt:!0},wo=()=>!0,To=e=>(e.positionals?.[0]??``).toLowerCase()===`start`,Eo=e=>e.command===`test`&&(typeof e.flags?.shardAll==`number`||typeof e.flags?.shardSplit==`number`),Do=e=>(e.positionals?.length??0)===0?{kind:`unconditional`}:void 0,Oo=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},ko=new Set([`status`,`get`]),Ao=e=>Lo(e,ko,`status`),jo=new Set([`get`,`wait`]),Mo=e=>Lo(e,jo,`get`),No=e=>Ro(e,ko,`status`),Po=e=>Ro(e,jo,`get`),Fo=e=>{try{return O(rn(e.positionals??[]).action)?`observes-app`:`mutates-app`}catch{return`mutates-app`}},Io=e=>Ro(e,new Set([`read`]),``);function Lo(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`preserve`:`may-invalidate`}function Ro(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`observes-app`:`mutates-app`}const q={kind:`none`},zo={kind:`host`},J={recordsSessionAction:!0,recordingEffect:`mutates-app`,deviceClaimPolicy:`require-owner`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0},Bo={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`},Vo={...N,envelopeMs:18e4},Ho={...N,onTimeout:`preserve-daemon`},Uo={...Ho,envelopeMs:33e4},Wo={...N,budget:{source:`flag`,envelope:`widen`,defaultBudgetMs:1e4},onTimeout:`preserve-daemon`},Go={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}}},Ko={fields:{delayMs:{defaultValue:0}}};function X(e,t){return fr(e)===void 0?t:Wo}function Z(e){let t=fr(e);if(t===void 0)throw Error(`Missing post-action observation descriptor support for ${e}`);return t}const qo={deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:ga},timeoutPolicy:Vo,batchable:!0},Jo=e=>{let t=e.flags?.snapshotCustomActions===!0||e.input?.customActions===!0;return[!0,!1].map(e=>ta({customActions:t,hasActiveApp:e}).use)},Yo=e=>{let t=Zo(e);if(t===void 0||!Xo(t))return Xi;let n=$i(t);return[!0,!1].map(e=>ea({hasActiveApp:e,intent:n}).use)};function Xo(e){return O(e)||e===`focus`||e===`type`}function Zo(e){if(e.positionals===void 0)return;let t=en(e.positionals,e.flags);return t.ok?t.parsed.action:void 0}const Qo=[{name:`human_control`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`humanControl`},recordsSessionAction:!1,daemon:{route:`humanControl`,refFrameEffect:`preserve`,selectorValidationExempt:!0,skipSessionlessProviderDevice:wo},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:Uo,batchable:!1,platformExecution:q},{name:`lease_heartbeat`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseHeartbeat`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...G},timeoutPolicy:Ho,batchable:!1,platformExecution:q},{name:`lease_release`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseRelease`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...G},timeoutPolicy:Ho,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:io}},{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:wo,...K},timeoutPolicy:N,batchable:!0,platformExecution:zo},{name:`apps`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0,sessionlessLeaseAdmissionExemption:Oo},platformExecution:{kind:`device-runtime`,uses:[Pr]},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:oa},timeoutPolicy:N,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:fa},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:da},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:si}},{name:`logs`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},platformExecution:{kind:`device-runtime`,uses:La},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:Ja},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:Ha}},{name:`replay`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,sessionKind:`replay`,skipSessionlessProviderDevice:Eo,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:Eo},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:[...Na,wi]}},{name:`clipboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:Io,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:No,daemon:{route:`session`,refFrameEffect:Ao,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ha}},{name:`install`,...qo},{name:`reinstall`,...qo},{name:`install_source`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`internal`,key:`installSource`},recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:_a},timeoutPolicy:Vo,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:va},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:[qr]}},{name:`open`,deviceClaimPolicy:`acquire-session`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`,allowSessionlessDefaultDevice:wo,saveScriptFlagOwner:!0},timeoutPolicy:{...N,budget:{source:`flag`,envelope:`margin`}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:wa}},{name:`prepare`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:{budget:{source:`flag`,envelope:`margin`},envelopeMs:nr,onTimeout:`reset-daemon`},batchable:!1,mcpExposed:!1,platformExecution:{kind:`device-runtime`,use:Aa}},{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:Do},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Da}},{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:Qi,selectUses:Jo}},{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:Qi,selectUses:Jo}},{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:tr}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:Zi}},{name:`alert`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:Po,daemon:{route:`snapshot`,refFrameEffect:Mo},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ma}},{name:`settings`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`snapshot`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[Jr]}},{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:To},platformExecution:{kind:`device-runtime`,uses:vo},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:Fo,daemon:{route:`find`,refFrameEffect:`may-invalidate`},timeoutPolicy:Y,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Xi,selectUses:Yo}},{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`),responseDataTransform:Go,batchable:!0,platformExecution:{kind:`device-runtime`,uses:mi}},{name:`fill`,...Bo,frameworkTier:`core`,timeoutPolicy:X(`fill`,Y),postActionObservation:Z(`fill`),responseDataTransform:Ko,batchable:!0,platformExecution:{kind:`device-runtime`,uses:vi}},{name:`longpress`,...Bo,catalog:{group:`public`,key:`longPress`},frameworkTier:`extended`,timeoutPolicy:{...Wo,envelopeMs:21e4},postActionObservation:Z(`longpress`),batchable:!0,platformExecution:{kind:`device-runtime`,uses:gi}},{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:_i}},{name:`press`,...Bo,frameworkTier:`core`,timeoutPolicy:X(`press`,Y),postActionObservation:Z(`press`),responseDataTransform:Go,batchable:!0,platformExecution:{kind:`device-runtime`,uses:hi}},{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:[Rr]}},{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:Gi}},{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:Wi}},{name:`back`,catalog:{group:`public`},frameworkTier:`core`,...J,timeoutPolicy:X(`back`,N),postActionObservation:Z(`back`),platformExecution:{kind:`device-runtime`,uses:[zr]}},{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:Oi}},{name:`home`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Br]}},{name:`tv-remote`,catalog:{group:`public`,key:`tvRemote`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Hr]}},{name:`orientation`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Vr]}},{name:`scroll`,catalog:{group:`public`},frameworkTier:`core`,...J,timeoutPolicy:X(`scroll`,N),postActionObservation:Z(`scroll`),platformExecution:{kind:`device-runtime`,uses:Ai}},{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:ki}},{name:`focus`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Lr]}},{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:ia}},{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:[Ir]}},{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:[Kr]}},{name:`install-from-source`,deviceClaimPolicy:`none`,catalog:{group:`public`,key:`installFromSource`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,platformExecution:{kind:`device-runtime`,use:_a},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:zo},{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:io}},{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:zo}],$o=new Set([`public`,`local-cli`]),es=new Set(Qo.filter(e=>$o.has(cs(e))).map(e=>e.name)),Q=Qo.map(e=>{let t=Co(e);return e.name===`record`&&xo(t),{...e,mcpExposed:os(e),platformExecution:t}});function ts(e){return Q.filter(t=>cs(t)===e).map(e=>[ls(e),e.name])}function ns(){return Q.filter(e=>ss(e)).map(e=>e.name).sort()}function rs(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 is(){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 as(e){return es.has(e)}function os(e){return e.mcpExposed??es.has(e.name)}function ss(e){return e.mcpExposed&&as(e.name)}function cs(e){return e.catalog.group}function ls(e){return e.catalog.key??e.name}const us=new Map(Q.map(e=>[e.name,e.timeoutPolicy])),ds=new Map(Q.map(e=>[e.name,e.deviceClaimPolicy])),fs=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 ms(e){return ps(e)!==void 0}function hs(e){return ps(e)===`settle-and-verify`}function gs(e){return e===void 0?N:us.get(e)??N}function _s(e){return e===void 0?`require-owner`:ds.get(e)??`require-owner`}function vs(e){if(e!==void 0)return fs.get(e)}function ys(e){return e===void 0?!1:$.get(e)?.recordsSessionAction??!1}function bs(e){if(e!==void 0)return $.get(e)?.frameworkTier}function xs(e){return $.get(e)?.targetIdentityVerification}function Ss(e){let t=$.get(e.command);if(t?.recordsSessionAction)return typeof t.recordingEffect==`function`?t.recordingEffect(e):t.recordingEffect}function Cs(){return[...new Set(Array.from(fs.values()).flatMap(e=>Object.keys(e.fields)))].sort()}const ws={apps:{appsFilter:`user-installed`}};function Ts(e,t){if(!e||!as(e))return!1;let n=ws[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 Es(e){let t=[];for(let n of e)n.daemon&&t.push({command:n.name,...n.daemon,replayScopedAction:n.recordsSessionAction});return t}function Ds(e){return e.filter(e=>e.batchable).map(e=>e.name)}const Os=Ds(Q),ks=new Set([`batch`,`replay`]),As=[`command`,`positionals`,`input`,`flags`,`runtime`],js=[`platform`,`target`,`device`,`udid`,`serial`,`verbose`,`out`],Ms=`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.`,Ns=new Set(Os);function Ps(e){return Ns.has(e)}function Fs(e){return typeof e==`string`?e.trim().toLowerCase():``}function Is(e){let t=Fs(e);return Ps(t)?t:void 0}function Ls(t,n,r=Ms){let i=Is(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 Rs(t,n){if(ks.has(t))throw new e(`INVALID_ARGS`,`Batch step ${n} cannot run ${t}.`)}export{Qr as $,w as $n,ir as $t,Ya as A,O as An,oe as Ar,oi as At,Ma as B,At as Bn,d as Br,R as Bt,vs as C,un as Cn,ge as Cr,li as Ct,_o as D,$t as Dn,fe as Dr,ri as Dt,yo as E,Qt as En,ue as Er,ni as Et,Ia as F,D as Fn,re as Fr,ea as Ft,ba as G,Nt as Gn,pr as Gt,ka as H,Lt as Hn,c as Hr,Rr as Ht,Ra as I,It as In,te as Ir,ta as It,Ca as J,mt as Jn,mr as Jt,xa as K,Ft as Kn,hr as Kt,ja as L,Mt as Ln,ee as Lr,yi as Lt,Ba as M,rn as Mn,p as Mr,Ni as Mt,Ka as N,on as Nn,ne as Nr,aa as Nt,ho as O,en as On,m as Or,ai as Ot,Ua as P,Ut as Pn,ie as Pr,Pi as Pt,Zr as Q,dt as Qn,P as Qt,Ta as R,Ht as Rn,l as Rr,Jr as Rt,ys as S,dn as Sn,le as Sr,Ur as St,xs as T,Gt as Tn,_e as Tr,ti as Tt,ya as U,kt as Un,s as Ur,Ir as Ut,Oa as V,Rt as Vn,u as Vr,Hr as Vt,Sa as W,Pt as Wn,a as Wr,yr as Wt,_a as X,ht as Xn,gr as Xt,ga as Y,ft as Yn,F as Yt,va as Z,_t as Zn,_r as Zt,ns as _,Tn as _n,y as _r,wi as _t,Rs as a,Nn as an,We as ar,Pr as at,bs as b,gn as bn,g as br,Wr as bt,Is as c,Bn as cn,Ke as cr,fi as ct,Q as d,kn as dn,ze as dr,$r as dt,nr as en,C as er,Yr as et,rs as f,jn as fn,Re as fr,ei as ft,ts as g,wn as gn,x as gr,Lr as gt,Cs as h,An as hn,xe as hr,$i as ht,Os as i,Hn as in,Ge as ir,Kr as it,Qa as j,qt as jn,se as jr,la as jt,to as k,Jt as kn,ae as kr,ii as kt,Es as l,zn as ln,Ye as lr,ui as lt,hs as m,On as mn,Ce as mr,pi as mt,As as n,Gn as nn,$e as nr,qr as nt,Fs as o,Vn as on,Je as or,zr as ot,ms as p,En as pn,ye as pr,L as pt,Aa as q,nt as qn,Sr as qt,js as r,M as rn,Xe as rr,ua as rt,Ls as s,Rn as sn,qe as sr,z as st,Ms as t,ar as tn,Ze as tr,Xr as tt,Ts as u,Un as un,Ie as ur,ci as ut,is as v,mn as vn,S as vr,Br as vt,gs as w,hn as wn,he as wr,Vr as wt,Ss as x,fn as xn,h as xr,Gr as xt,_s as y,pn as yn,b as yr,di as yt,Ea as z,zt as zn,o as zr,fa as zt};
|
|
@@ -125,31 +125,6 @@ declare function normalizeAgentDeviceError(err: unknown, context?: NormalizeErro
|
|
|
125
125
|
declare function normalizeError(err: unknown, context?: NormalizeErrorContext): NormalizedError;
|
|
126
126
|
declare function defaultHintForCode(code: string): string | undefined;
|
|
127
127
|
//#endregion
|
|
128
|
-
//#region packages/kernel/src/device.d.ts
|
|
129
|
-
declare const APPLE_OS_VALUES: readonly ['ios', 'ipados', 'tvos', 'watchos', 'visionos', 'macos'];
|
|
130
|
-
type AppleOS = (typeof APPLE_OS_VALUES)[number];
|
|
131
|
-
declare const PLATFORMS: readonly ['apple', 'android', 'harmonyos', 'vega', 'linux', 'web'];
|
|
132
|
-
type Platform = (typeof PLATFORMS)[number];
|
|
133
|
-
declare const PUBLIC_PLATFORMS: readonly ['ios', 'macos', 'android', 'harmonyos', 'vega', 'linux', 'web'];
|
|
134
|
-
type PublicPlatform = (typeof PUBLIC_PLATFORMS)[number];
|
|
135
|
-
declare const PLATFORM_SELECTORS: readonly ["apple", "android", "harmonyos", "vega", "linux", "web", "ios", "macos"];
|
|
136
|
-
type PlatformSelector = (typeof PLATFORM_SELECTORS)[number];
|
|
137
|
-
declare const DEVICE_KINDS: readonly ['simulator', 'emulator', 'device'];
|
|
138
|
-
type DeviceKind = (typeof DEVICE_KINDS)[number];
|
|
139
|
-
declare const DEVICE_TARGETS: readonly ['mobile', 'tv', 'desktop'];
|
|
140
|
-
type DeviceTarget = (typeof DEVICE_TARGETS)[number];
|
|
141
|
-
type DeviceInfo = {
|
|
142
|
-
platform: Platform;
|
|
143
|
-
id: string;
|
|
144
|
-
name: string;
|
|
145
|
-
kind: DeviceKind;
|
|
146
|
-
target?: DeviceTarget;
|
|
147
|
-
appleOs?: AppleOS;
|
|
148
|
-
booted?: boolean;
|
|
149
|
-
simulatorSetPath?: string;
|
|
150
|
-
iosPhysicalDeviceBackend?: 'coredevice' | 'xctest';
|
|
151
|
-
};
|
|
152
|
-
//#endregion
|
|
153
128
|
//#region packages/kernel/src/snapshot.d.ts
|
|
154
129
|
/**
|
|
155
130
|
* Structured quality verdict computed once by a platform snapshot capture/presentation plan.
|
|
@@ -224,6 +199,43 @@ type SnapshotOptions = {
|
|
|
224
199
|
*/
|
|
225
200
|
customActions?: boolean;
|
|
226
201
|
};
|
|
202
|
+
/** The CLI/daemon flag key for each snapshot capture option, by option name. */
|
|
203
|
+
declare const SNAPSHOT_OPTION_FLAGS: {
|
|
204
|
+
readonly interactiveOnly: 'snapshotInteractiveOnly';
|
|
205
|
+
readonly depth: 'snapshotDepth';
|
|
206
|
+
readonly scope: 'snapshotScope';
|
|
207
|
+
readonly raw: 'snapshotRaw';
|
|
208
|
+
readonly customActions: 'snapshotCustomActions';
|
|
209
|
+
readonly forceFull: 'snapshotForceFull';
|
|
210
|
+
readonly includeHiddenContentHints: 'snapshotIncludeHiddenContentHints';
|
|
211
|
+
readonly preferredBackend: 'snapshotPreferredBackend';
|
|
212
|
+
};
|
|
213
|
+
type SnapshotOptionKey = keyof typeof SNAPSHOT_OPTION_FLAGS;
|
|
214
|
+
type SnapshotOptionValues = {
|
|
215
|
+
interactiveOnly: boolean;
|
|
216
|
+
depth: number;
|
|
217
|
+
scope: string;
|
|
218
|
+
raw: boolean;
|
|
219
|
+
customActions: boolean;
|
|
220
|
+
forceFull: boolean;
|
|
221
|
+
includeHiddenContentHints: boolean;
|
|
222
|
+
preferredBackend: SnapshotPreferredBackend;
|
|
223
|
+
};
|
|
224
|
+
/** The option-vocabulary view of the declared pairs, narrowed to `TKeys`. */
|
|
225
|
+
type SnapshotOptionFields<TKeys extends SnapshotOptionKey = SnapshotOptionKey> = { [TKey in TKeys]?: SnapshotOptionValues[TKey]; };
|
|
226
|
+
/**
|
|
227
|
+
* Option keys a `snapshot`/`diff` command request carries end to end. `scope` is
|
|
228
|
+
* resolved against the session before capture, so seams that resolve it spread
|
|
229
|
+
* this projection and then override that one key.
|
|
230
|
+
*/
|
|
231
|
+
declare const SNAPSHOT_COMMAND_OPTION_KEYS: readonly ['interactiveOnly', 'depth', 'scope', 'raw', 'customActions', 'forceFull'];
|
|
232
|
+
/**
|
|
233
|
+
* The snapshot capture options a `snapshot`/`diff` request is stated in, in
|
|
234
|
+
* every vocabulary that names them: the public SDK type, the internal request
|
|
235
|
+
* bag and the command runtime options each reference THIS type instead of
|
|
236
|
+
* re-listing the same six keys.
|
|
237
|
+
*/
|
|
238
|
+
type SnapshotCommandOptionFields = SnapshotOptionFields<(typeof SNAPSHOT_COMMAND_OPTION_KEYS)[number]>;
|
|
227
239
|
type RawSnapshotNode = {
|
|
228
240
|
index: number;
|
|
229
241
|
type?: string;
|
|
@@ -350,6 +362,12 @@ type SnapshotState = {
|
|
|
350
362
|
* occlusion (see `@agent-device/contracts/android-system-surface-disclosure`).
|
|
351
363
|
*/
|
|
352
364
|
systemSurfaceOnly?: boolean;
|
|
365
|
+
/**
|
|
366
|
+
* iOS: the bundle id of the in-place system surface this capture describes (a web sign-in sheet
|
|
367
|
+
* presented over the app, #2438). Two captures that disagree here describe different surfaces and
|
|
368
|
+
* must never be compared as the same presentation; consumers that surface the tree disclose it.
|
|
369
|
+
*/
|
|
370
|
+
iosSystemSurfaceBundleId?: string;
|
|
353
371
|
} & SnapshotStateProvenance;
|
|
354
372
|
type SnapshotUnchanged = {
|
|
355
373
|
ageMs: number;
|
|
@@ -373,6 +391,31 @@ type ScreenshotOverlayRef = {
|
|
|
373
391
|
};
|
|
374
392
|
declare function centerOfRect(rect: Rect): Point;
|
|
375
393
|
//#endregion
|
|
394
|
+
//#region packages/kernel/src/device.d.ts
|
|
395
|
+
declare const APPLE_OS_VALUES: readonly ['ios', 'ipados', 'tvos', 'watchos', 'visionos', 'macos'];
|
|
396
|
+
type AppleOS = (typeof APPLE_OS_VALUES)[number];
|
|
397
|
+
declare const PLATFORMS: readonly ['apple', 'android', 'harmonyos', 'vega', 'linux', 'web'];
|
|
398
|
+
type Platform = (typeof PLATFORMS)[number];
|
|
399
|
+
declare const PUBLIC_PLATFORMS: readonly ['ios', 'macos', 'android', 'harmonyos', 'vega', 'linux', 'web'];
|
|
400
|
+
type PublicPlatform = (typeof PUBLIC_PLATFORMS)[number];
|
|
401
|
+
declare const PLATFORM_SELECTORS: readonly ["apple", "android", "harmonyos", "vega", "linux", "web", "ios", "macos"];
|
|
402
|
+
type PlatformSelector = (typeof PLATFORM_SELECTORS)[number];
|
|
403
|
+
declare const DEVICE_KINDS: readonly ['simulator', 'emulator', 'device'];
|
|
404
|
+
type DeviceKind = (typeof DEVICE_KINDS)[number];
|
|
405
|
+
declare const DEVICE_TARGETS: readonly ['mobile', 'tv', 'desktop'];
|
|
406
|
+
type DeviceTarget = (typeof DEVICE_TARGETS)[number];
|
|
407
|
+
type DeviceInfo = {
|
|
408
|
+
platform: Platform;
|
|
409
|
+
id: string;
|
|
410
|
+
name: string;
|
|
411
|
+
kind: DeviceKind;
|
|
412
|
+
target?: DeviceTarget;
|
|
413
|
+
appleOs?: AppleOS;
|
|
414
|
+
booted?: boolean;
|
|
415
|
+
simulatorSetPath?: string;
|
|
416
|
+
iosPhysicalDeviceBackend?: 'coredevice' | 'xctest';
|
|
417
|
+
};
|
|
418
|
+
//#endregion
|
|
376
419
|
//#region packages/kernel/src/contracts.d.ts
|
|
377
420
|
declare const SESSION_RUNTIME_PLATFORMS: readonly ['ios', 'android', 'harmonyos'];
|
|
378
421
|
type SessionRuntimePlatform = (typeof SESSION_RUNTIME_PLATFORMS)[number];
|
|
@@ -490,4 +533,4 @@ type JsonRpcRequestEnvelope<TParams = unknown> = {
|
|
|
490
533
|
params?: TParams;
|
|
491
534
|
};
|
|
492
535
|
//#endregion
|
|
493
|
-
export {
|
|
536
|
+
export { SnapshotCommandOptionFields as A, DaemonError as B, Platform as C, RawSnapshotNode as D, Point as E, SnapshotState as F, normalizeError as G, defaultHintForCode as H, SnapshotUnchanged as I, SnapshotVisibility as L, SnapshotOptions as M, SnapshotProvenance as N, Rect as O, SnapshotQualityVerdict as P, centerOfRect as R, DeviceTarget as S, PublicPlatform as T, isAgentDeviceError as U, NormalizedError as V, normalizeAgentDeviceError as W, 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, SnapshotNode as j, ScreenshotOverlayRef as k, DaemonTransportPreference as l, NetworkIncludeMode as m, DaemonArtifactType as n, DaemonResponse as o, LocalInstallSource as p, DaemonInstallSource as r, DaemonResponseData as s, DaemonArtifact as t, JsonRpcId as u, SessionRuntimeHints as v, PlatformSelector as w, DeviceKind as x, AppleOS as y, AppError as z };
|