agent-device 0.21.13 → 0.21.15
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.13.apk → agent-device-android-ime-helper-0.21.15.apk} +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.15.apk.sha256 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.13.manifest.json → agent-device-android-ime-helper-0.21.15.manifest.json} +4 -4
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.15.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.15.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.13.manifest.json → agent-device-android-snapshot-helper-0.21.15.manifest.json} +6 -6
- package/apple/snapshot-bridge/SnapshotBridgeRuntime.m +11 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +110 -2
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAXSnapshotBridge.m +4 -2
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerMainOwnedState.swift +27 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedTextEntry.h +8 -2
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedTextEntry.m +26 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AXSnapshotFallback.swift +12 -19
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +59 -20
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AlertObservation.swift +2 -3
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandDispatch.swift +179 -91
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +21 -24
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +1 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+GestureExecution.swift +9 -13
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +36 -49
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+MainThreadWork.swift +11 -15
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +136 -29
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +20 -21
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+PrivateAXPresentation.swift +3 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScreenRecorder.swift +6 -5
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScrollDragExecution.swift +12 -24
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SequenceExecution.swift +22 -42
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +15 -18
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotAcquisition.swift +73 -31
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCapturePlan.swift +20 -11
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCaptureTarget.swift +9 -7
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotExecution.swift +5 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotTiming.swift +2 -2
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedGesturePolicy.swift +51 -19
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift +5 -2
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +78 -10
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +32 -2
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +7 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +23 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +17 -10
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TvRemote.swift +8 -9
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TypeExecution.swift +9 -15
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +12 -11
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotCoordinateSpace.swift +16 -19
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotGeometry.swift +24 -9
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotModels.swift +66 -10
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationInvariant.swift +12 -10
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationProjection.swift +1 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFold.swift +27 -5
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFoldProjection.swift +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/adb-transport.js +1 -1
- package/dist/src/agent-browser-provider.js +1 -1
- package/dist/src/agent-browser-tool.js +1 -1
- package/dist/src/agent-device-client.js +2 -2
- package/dist/src/ai-sdk.js +1 -1
- package/dist/src/alert-runtime.js +1 -1
- package/dist/src/android-adb.d.ts +1 -8
- package/dist/src/android-input-ownership.js +1 -1
- package/dist/src/android-snapshot-quality.js +1 -0
- package/dist/src/android-system-chrome.js +1 -1
- package/dist/src/android.js +1 -1
- package/dist/src/app-catalog.js +1 -1
- package/dist/src/app-deployment-resolution.js +1 -1
- package/dist/src/app-inventory.js +1 -1
- package/dist/src/app-launch.js +1 -1
- package/dist/src/app-lifecycle.js +1 -1
- package/dist/src/app-lifecycle2.js +1 -1
- package/dist/src/app-log-files.js +1 -1
- package/dist/src/app-log-runtime2.js +1 -1
- package/dist/src/app-resolution.js +2 -2
- package/dist/src/apple-runner-platform.js +1 -1
- package/dist/src/application-lifecycle-interaction.js +1 -1
- package/dist/src/archive.js +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/backend-snapshot-options.js +1 -1
- package/dist/src/boot-diagnostics.js +1 -1
- package/dist/src/capture-disclosure.js +1 -1
- package/dist/src/capture.js +1 -1
- package/dist/src/cli-config.js +1 -1
- package/dist/src/cli-help.js +2 -2
- package/dist/src/cli.js +4 -4
- package/dist/src/click-button.js +1 -1
- package/dist/src/client-metro.js +1 -1
- package/dist/src/client-types.d.ts +102 -95
- package/dist/src/clipboard-shell-response.js +1 -1
- package/dist/src/command-schema.js +1 -1
- package/dist/src/command-tools.js +3 -3
- package/dist/src/connection-runtime.js +1 -1
- package/dist/src/connection.js +1 -1
- package/dist/src/contracts.d.ts +1 -1
- package/dist/src/contracts.js +1 -1
- package/dist/src/daemon-client-lifecycle.js +1 -1
- package/dist/src/daemon.js +1 -1
- package/dist/src/debug-symbols-facade.js +1 -1
- package/dist/src/device-claim-rule.js +2 -2
- package/dist/src/device-input-state.d.ts +15 -2
- package/dist/src/device-inventory-context.js +1 -1
- package/dist/src/device-rotation.js +1 -1
- package/dist/src/device-selection-resolver.js +1 -1
- package/dist/src/device-session.js +1 -1
- package/dist/src/device-shell.js +1 -1
- package/dist/src/device2.js +1 -1
- package/dist/src/devicectl.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/engine-eval-script.js +1 -1
- package/dist/src/error.js +1 -1
- package/dist/src/exec.js +1 -1
- package/dist/src/file.js +1 -1
- package/dist/src/find.js +1 -1
- package/dist/src/format.js +1 -1
- package/dist/src/gesture-plan-types.d.ts +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/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 +7 -3
- package/dist/src/index.js +1 -1
- package/dist/src/input-actions.js +1 -1
- package/dist/src/input-actions2.js +1 -1
- package/dist/src/install-artifact-facade.js +1 -1
- package/dist/src/install-source-network-transport.js +1 -1
- package/dist/src/install-source2.js +1 -1
- package/dist/src/interaction-positionals.js +1 -1
- package/dist/src/interaction-ref-policy.js +1 -1
- package/dist/src/interaction2.js +1 -1
- package/dist/src/interactor-operation-binding.js +1 -1
- package/dist/src/interactor.js +4 -4
- 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.js +1 -1
- package/dist/src/internal/run-script-http-child.js +1 -1
- package/dist/src/inventory.js +1 -1
- 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-engine.js +1 -0
- package/dist/src/ios-snapshot-runtime.js +1 -1
- package/dist/src/lease.js +1 -1
- package/dist/src/limrun-download-file.js +1 -1
- package/dist/src/limrun-runtime-dependencies.js +1 -1
- package/dist/src/limrun.d.ts +16 -3
- package/dist/src/linux.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 +17 -17
- package/dist/src/mobile-snapshot-semantics.js +1 -1
- package/dist/src/multitouch-support.js +1 -1
- package/dist/src/native-build-cache.js +1 -0
- package/dist/src/observation.js +1 -1
- package/dist/src/overlay.js +3 -0
- package/dist/src/parameterized-recorded-fill.js +1 -1
- package/dist/src/perf-facade.js +1 -1
- package/dist/src/perf-runtime-operation-builder.js +1 -1
- package/dist/src/perf-runtime-plan.js +1 -1
- package/dist/src/perf-target.js +2 -2
- package/dist/src/perf.js +1 -1
- package/dist/src/physical-device-control.js +1 -1
- package/dist/src/platform-runtime-host.js +1 -1
- package/dist/src/platform-runtime-managed-owner.js +1 -1
- package/dist/src/platform-runtime-open-target.js +1 -1
- package/dist/src/platform-runtime-operation-host.js +4 -4
- package/dist/src/platform-runtime-runtime-hints.js +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.js +1 -1
- package/dist/src/platform-runtime2.js +1 -1
- package/dist/src/png-crop-bytes.js +1 -1
- package/dist/src/png-size.js +1 -1
- package/dist/src/png-worker-client.js +1 -1
- package/dist/src/png.js +1 -1
- package/dist/src/prepare-kind.js +1 -1
- package/dist/src/provider-session-ownership.js +1 -1
- package/dist/src/provider-webdriver.js +1 -1
- package/dist/src/proxy.js +1 -1
- package/dist/src/quality-warnings.js +1 -1
- package/dist/src/react-native.js +1 -1
- package/dist/src/record-runtime.js +1 -1
- package/dist/src/recording.js +1 -1
- package/dist/src/rect-center.js +1 -1
- package/dist/src/register-builtins.js +1 -1
- package/dist/src/registry.js +36 -36
- package/dist/src/remote-config2.js +1 -1
- package/dist/src/replay-divergence.js +1 -1
- package/dist/src/replay.js +1 -1
- package/dist/src/reporting.js +1 -1
- package/dist/src/request-admission.js +1 -1
- package/dist/src/request-cancel.js +1 -1
- package/dist/src/request-runtime-binding.js +1 -1
- package/dist/src/retry.js +1 -1
- package/dist/src/runner-cache-metadata.js +1 -1
- package/dist/src/runner-client.js +1 -1
- package/dist/src/runner-dev-tools-security.js +1 -1
- package/dist/src/runner-device-readiness.js +1 -1
- package/dist/src/runner-disposal.js +1 -1
- package/dist/src/runner-error-classification.js +1 -1
- package/dist/src/runner.js +1 -1
- package/dist/src/runtime-transport-hints.js +1 -1
- package/dist/src/runtime.js +1 -3
- package/dist/src/runtime10.js +2 -2
- package/dist/src/runtime2.js +4 -4
- package/dist/src/runtime3.js +1 -1
- package/dist/src/runtime4.js +5 -5
- package/dist/src/runtime5.js +1 -1
- package/dist/src/runtime6.js +1 -1
- package/dist/src/runtime7.js +1 -1
- package/dist/src/runtime8.js +1 -1
- package/dist/src/runtime9.js +1 -1
- package/dist/src/screen-recording-admission-ledger.js +1 -1
- package/dist/src/screen-recording-completion.js +1 -1
- package/dist/src/screen-recording-options.js +1 -1
- package/dist/src/screen-recording-resource-recovery.js +1 -1
- package/dist/src/screenshot-density.js +1 -1
- package/dist/src/screenshot-image.js +1 -1
- package/dist/src/screenshot-overlay-draw.js +1 -1
- package/dist/src/screenshot-runtime.js +1 -1
- package/dist/src/screenshot.js +1 -1
- package/dist/src/screenshot3.js +1 -1
- package/dist/src/script.js +1 -1
- package/dist/src/scroll-command.d.ts +13 -6
- 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 +59 -12
- 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-io.js +1 -1
- package/dist/src/sdk-remote-config.js +1 -1
- package/dist/src/sdk-selectors.d.ts +1 -1
- package/dist/src/selection.js +0 -0
- package/dist/src/selector-runtime.js +1 -1
- package/dist/src/server.js +1 -1
- package/dist/src/session-allocation.js +1 -1
- package/dist/src/session-routing.js +1 -1
- package/dist/src/session-runtime-admission.js +1 -1
- package/dist/src/session-snapshot.js +1 -1
- package/dist/src/session-store.js +1 -1
- package/dist/src/session.js +1 -1
- package/dist/src/session2.js +4 -4
- package/dist/src/settings.js +1 -1
- package/dist/src/settings2.js +1 -0
- package/dist/src/simctl.js +1 -1
- package/dist/src/simulator-state.js +1 -1
- package/dist/src/simulator.js +1 -1
- package/dist/src/snapshot-capture-annotations.js +1 -1
- package/dist/src/snapshot-desktop-projection.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/src4.js +1 -1
- package/dist/src/src7.js +1 -1
- package/dist/src/src8.js +1 -1
- package/dist/src/string-enum.js +1 -1
- package/dist/src/surface-snapshot.js +1 -1
- package/dist/src/takeover.js +1 -1
- package/dist/src/text-entry-focus.js +1 -1
- package/dist/src/tool-provider-facade.js +1 -1
- package/dist/src/tool-provider.js +2 -2
- package/dist/src/tool-provider2.js +1 -1
- package/dist/src/touch-runtime.js +1 -1
- package/dist/src/transport.js +1 -1
- package/dist/src/tree.js +1 -1
- package/dist/src/tv-remote.js +1 -1
- package/dist/src/type-text-runtime.js +1 -1
- package/dist/src/verified-file.js +1 -1
- package/dist/src/video.js +1 -1
- package/dist/src/viewport.js +1 -1
- package/dist/src/web.js +1 -1
- package/dist/src/web2.js +1 -1
- package/dist/src/webdriver-source.js +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.13.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.13.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.13.apk.sha256 +0 -1
- package/dist/src/absence-observation-errors.js +0 -1
- package/dist/src/runner-presentation.js +0 -1
- package/dist/src/semantic-index.js +0 -1
- package/dist/src/snapshot-process.js +0 -1
- package/dist/src/snapshot-scope.js +0 -1
package/dist/src/sdk-batch.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
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=De(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Selector expression cannot be empty`);return{raw:n,selectors:r.map(e=>Te(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 _.has(e)}return _.has(t.toLowerCase())}function we(e){let t=e.trim(),n=t.indexOf(`=`);if(n===-1)return null;let r=t.slice(0,n).trim().toLowerCase();if(!r||_.has(r))return null;let i=t.slice(n+1).trim();if(!i)return null;let a=Ae(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 Te(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Selector segment cannot be empty`);let r=Oe(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Invalid selector segment: ${t}`);return{raw:n,terms:r.map(Ee)}}function Ee(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(!be.has(r))throw new e(`INVALID_ARGS`,`Invalid selector term "${t}", expected key=value`);return{key:r,value:!0}}let i=n.slice(0,r).trim().toLowerCase(),a=n.slice(r+1).trim();if(!_.has(i))throw new e(`INVALID_ARGS`,`Unknown selector key: ${i}`);if(!a)throw new e(`INVALID_ARGS`,`Missing selector value for key: ${i}`);if(be.has(i)){let t=Ne(a);if(t===null)throw new e(`INVALID_ARGS`,`Invalid boolean value for ${i}: ${a}`);return{key:i,value:t}}return{key:i,value:Ae(a)}}function De(t){let n=[],r=``,i=null;for(let a=0;a<t.length;a+=1){let o=t[a];if((o===`"`||o===`'`)&&!Pe(t,a)){i=ke(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 Oe(t){let n=[],r=``,i=null;for(let e=0;e<t.length;e+=1){let a=t.charAt(e);if((a===`"`||a===`'`)&&!Pe(t,e)){i=ke(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 ke(e,t){return e?e===t?null:e:t}function Ae(e){let t=e.trim();return t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?je(t.slice(1,-1)):t}function je(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=Me(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 Me(e){return Ce.get(e)??null}function Ne(e){let t=Ae(e).toLowerCase();return t===`true`||t!==`false`&&null}function Pe(e,t){let n=0;for(let r=t-1;r>=0&&e[r]===`\\`;--r)n+=1;return n%2==1}function Fe(e){return a.includes(e)}const Ie=`is requires predicate: ${a.join(`|`)}`;function Le(e){let t=e.toLowerCase();return Fe(t)?{ok:!0,predicate:t}:i(Ie,Re)}const Re=`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 ze(e){if(Fe((e[0]??``).toLowerCase()))return e;for(let t=1;t<e.length;t+=1){let n=(e[t]??``).toLowerCase();if(Fe(n)&&b(e.slice(0,t).join(` `)))return[n,...e.slice(0,t),...e.slice(t+1)]}return e}function Be(e){let{predicate:t,node:n,visibility:r,expectedText:i,platform:a}=e,o=h(n),s=ve(n,a),c=n.selected===!0,l=n.focused===!0,u=t===`text`?g(n):He(n,r,a),d=!1;switch(t){case`visible`:d=u;break;case`hidden`:d=!u;break;case`editable`:d=s;break;case`selected`:d=c;break;case`focused`:d=l;break;case`text`:d=o===(i??``);break;default:return Ve(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 Ve(e){throw Error(`Unhandled is predicate: ${String(e)}`)}function He(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=Ue(e,t,n);return r?o(r.rect)?t.isVisibleInEffectiveViewport(r):n!==`android`&&r.hittable===!0:!1}function Ue(e,t,n){return t.findAncestor(e,e=>_e(e,n)?e:null)}function We(e){let t=ze(e),n=t[0]??``;return{predicate:n,split:S(t.slice(1),{preferTrailingValue:n===`text`})}}const Ge=`is requires a selector expression`,Ke=`is text requires expected text value`;function qe(e){let{predicate:t,split:n}=We([...e]),r=Le(t);if(!r.ok)return r;if(!n)return i(Ge);let a=n.rest.join(` `).trim();return r.predicate===`text`&&!a?i(Ke):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 Je(e){return e===`text`||e===`attrs`?{ok:!0,format:e}:i(`get only supports text or attrs`)}function Ye(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 Xe(e){return e?{ok:!0,text:e}:i(`wait requires text`)}function Ze(e){return Array.from(new Set(e))}function Qe(e){return JSON.stringify($e(e))}function $e(e){if(Array.isArray(e))return e.map($e);if(!e||typeof e!=`object`)return e;let t=e;return Object.fromEntries(Object.keys(t).sort().map(e=>[e,$e(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 it(e){return e.normalize(`NFC`)}function at(e){if(e===void 0)return;let t=it(e);return t.length>0?t:void 0}function ot(e){return it(e)}function st(e){if(e===void 0)return;let t=it(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 ct(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(lt),t.sibling=e.sibling,t.viewportOrder=e.viewportOrder,e.scrollRegion&&(t.scrollRegion=ut(e.scrollRegion)),e.rect&&(t.rect=dt(e.rect)),t.verification=e.verification,t}function lt(e){let t={role:e.role};return e.label!==void 0&&(t.label=e.label),t}function ut(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 dt(e){return{x:e.x,y:e.y,width:e.width,height:e.height}}function ft(e){return JSON.stringify(ct(e))}function pt(e){return`# agent-device:target-v1 ${ft(e)}`}function mt(e){return JSON.stringify({source:ct(e.source),destination:ct(e.destination)})}function ht(e){return`# agent-device:targets-v1 ${mt(e)}`}function gt(e){let t=e.trim(),n=nt.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:_t((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function _t(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:yt(JSON.stringify(r.source)),destination:yt(JSON.stringify(r.destination))}}function vt(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:yt((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function yt(t){if(C(t)>4096)throw new e(`INVALID_ARGS`,`target-v1 annotation exceeds the ${rt}-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=bt(r.role,`role`),a=xt(r.id,`id`),o=St(r.label,`label`),s=wt(r.ancestry),c=Et(r.sibling,`sibling`,0),l=Et(r.viewportOrder,`viewportOrder`,0),u=Dt(r.scrollRegion),d=Ot(r.rect),f=kt(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 bt(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 Ct(ot(t),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=at(t);return r===void 0?void 0:Ct(r,n)}function St(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=st(t);return r===void 0?void 0:Ct(r,n)}function Ct(t,n){if(C(t)>256)throw new e(`INVALID_ARGS`,`target-v1 "${n}" exceeds the 256-byte field cap.`);return t}function wt(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)=>Tt(e,t))}function Tt(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=bt(r.role,`ancestry[${n}].role`),a=St(r.label,`ancestry[${n}].label`);return{role:i,...a===void 0?{}:{label:a}}}function Et(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 Dt(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=bt(n.role,`scrollRegion.role`),i=xt(n.id,`id`),a=St(n.label,`scrollRegion.label`);return{role:r,...i===void 0?{}:{id:i},...a===void 0?{}:{label:a}}}function Ot(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 kt(t){if(t===`verified`||t===`unverifiable`)return t;throw new e(`INVALID_ARGS`,`target-v1 "verification" must be "verified" or "unverifiable".`)}function At(e){let t=ot(m(e.type??``)),n=at(e.identifier),r=st(e.label);return{...n===void 0?{}:{id:w(n,256)},role:w(t,256),...r===void 0?{}:{label:w(r,256)}}}function jt(e,t){return e.id===t.id&&e.role===t.role&&e.label===t.label}function Mt(e,t){let n=0;for(let r of e)At(r).id===t&&(n+=1);return n}function Nt(e,t){if(e.id===void 0||Mt(t,e.id)<=1)return e;let{role:n,label:r}=e;return{role:n,...r===void 0?{}:{label:r}}}function Pt(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 Ft(e,t){return{documentOrder:e.index,sibling:Pt(t,e)}}function It(e,t){return e.documentOrder===t.documentOrder&&e.sibling===t.sibling}function Lt(e){return{...e.id===void 0?{}:{id:e.id},role:e.role,...e.label===void 0?{}:{label:e.label}}}function Rt(e,t){return t.id===void 0?e.role===t.role&&e.label===t.label:e.id===t.id}function zt(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 Bt(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 Vt(e){return e?`${e.role}${e.label?`/${e.label}`:``}`:`(missing)`}function Ht(e,t){return!t||t.role!==e.role||e.label!==void 0&&t.label!==e.label}function Ut(e,t){for(let[n,r]of e.entries()){let e=t[n];if(Ht(r,e))return[`ancestry[${n}]: recorded=${Vt(r)} observed=${Vt(e)}`]}return[]}function Wt(e,t,n={}){let r=[],i=m(e.type??``),a=Gt(e,n.nodes),o=D(e.label),s=D(e.value),c=D(h(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=Ze(r);return u.length===0&&i&&u.push(l?`role=${E(i)} editable=true`:`role=${E(i)}`),u.length===0&&g(e)&&u.push(`visible=true`),u}function Gt(e,t){let n=D(e.identifier);if(!n||!t)return n;let r=At(e).id;return r===void 0?n:Mt(t,r)>1?null:n}function E(e){return JSON.stringify(e)}function D(e){return e&&e.trim()||null}const Kt=[`any`,`text`,`label`,`value`,`role`,`id`],qt=[`text`,`label`,`value`,`role`,`id`];function Jt(e){let t=e?.toLowerCase();return t===`press`||t===`tap`?`click`:t}function Yt(e){return e===`exists`||e===`wait`||e===`get_text`||e===`get_attrs`||e===`list`}function Xt(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=Zt(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 Zt(e,t,n){switch(t){case`role`:return Qt(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 Qt(e,t){let n=$t(e??``);return n?n===t?2:+!!n.includes(t):0}function k(e){return e.trim().toLowerCase().replaceAll(/\s+/g,` `)}function $t(e){let t=e.trim();return t?(t=(t.split(`.`).pop()??t).replaceAll(/XCUIElementType/gi,``).toLowerCase(),t):``}const en=`find requires a value`,tn=`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 nn(e,t){if(e.length===0)return{ok:!1,code:`INVALID_ARGS`,message:`find requires a locator or text`};let n=on([...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:en}}const rn=[`exists`,`list`,`click`,`focus`];function an(e){return rn.includes(e)}function on(t){let n=`any`,r=0;qt.includes(t[0])&&(n=t[0],r=1);let i=t[r]??``,a=t.slice(r+1);if(a.length===0)return{locator:n,query:i,action:`click`};let o=Jt(a[0]);if(an(o))return{locator:n,query:i,action:o};if(o===`get`)return{locator:n,query:i,action:sn(a[1])};if(o===`wait`){let e=ln(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:tn})}function sn(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 cn(e,t){return e!==`any`||!t.includes(`=`)&&!t.includes(`||`)?null:b(t)?t:null}function ln(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}function un(e,t,n){return t.terms.every(t=>dn(e,t,n))}function dn(e,t,n){switch(t.key){case`id`:return A(e.identifier,String(t.value));case`role`:return A(m(e.type??``),String(t.value));case`label`:return A(e.label,String(t.value));case`value`:return A(e.value,String(t.value));case`text`:return A(h(e),String(t.value));case`appname`:return A(e.appName,String(t.value));case`windowtitle`:return A(e.windowTitle,String(t.value));case`visible`:return g(e)===!!t.value;case`hidden`:return!g(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 A(e,t){return k(e??``)===k(t)}function fn(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=yn(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 pn(e,t,n){return fn(e,t,n).resolution}function mn(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:un(e,a,n.platform));if(t.length>0)return{selector:a,selectorIndex:i,matchedNodes:t}}return null}function hn(e,t,n){let r=n.requireRect??!1,i=[];for(let[a,o]of t.selectors.entries()){let t=Cn(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 gn=`Snapshot refs expire when the UI changes. Run snapshot -i and retry with a fresh @ref.`;function _n(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 vn(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 yn(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||un(l,t,n)&&(i+=1,a??=l,o.push(l),bn(s,l,c));return{count:i,firstNode:a,disambiguated:s.tie?null:s.best,tiebreak:s.tie?null:xn(o,s.best,c),candidates:o}}function bn(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=wn(t,e.best);i.result>0?(e.best=t,e.tie=!1):i.result===0&&(e.tie=!0)}function xn(e,t,n){if(!t)return null;let r=null;for(let i of e)i!==t&&(!r||Sn(i,r,n).result>0)&&(r=i);return r?Sn(t,r,n).criterion:null}function Sn(e,t,n){let r=n(e);return r===n(t)?wn(e,t):{result:r?1:-1,criterion:`visible`}}function Cn(e,t,n,r){let i=0;for(let a of e)r&&!a.rect||un(a,t,n)&&(i+=1);return i}function wn(e,t){let n=e.depth??0,r=t.depth??0;if(n!==r)return{result:n>r?1:-1,criterion:`deepest`};let i=Tn(e),a=Tn(t);return i===a?{result:0,criterion:null}:{result:i<a?1:-1,criterion:`smallest-area`}}function Tn(e){return e.rect?e.rect.width*e.rect.height:1/0}const En={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 Dn(e){return e.ambiguity===`first-match`?{requireRect:e.requireRect,requireUnique:!1}:{requireRect:e.requireRect,requireUnique:!0,disambiguateAmbiguous:e.ambiguity===`disambiguate`}}function On(e,t){let n=e===`is`?We([...t]).split:S([...t]);return n?b(n.selectorExpression)?{kind:`expression`,expression:n.selectorExpression,rest:n.rest}:{kind:`invalid`}:{kind:`not-applicable`}}function kn(e){return{platform:e.platform,...Dn({ambiguity:e.allowDisambiguation?`disambiguate`:`fail-closed`,requireRect:e.requireRect})}}function An(e,t,n){let r=b(e);if(!r)return{kind:`unresolved`,reason:`parse-invalid`,matchedNodes:[]};let{resolution:i,matchedNodes:a}=fn(t,r,kn(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 jn(e,t,n={}){return Wt(e,t,n)}function Mn(e,t,n){let r=b(e);if(!r)return;let i=pn(t,r,kn(n));if(i)return{node:i.node,basis:Pn(i.selector)}}function Nn(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 Pn(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 Fn(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?In(n.selectors,r,i):Ln(n.selectors[0],r,new Set(t.booleanKeys),i)}function In(e,t,n){let r=e.map(e=>{let r=e.terms.length===1?e.terms[0]:void 0;return r&&Rn(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 Ln(e,t,n,r){if(!e)return null;let i={},a=0;for(let o of e.terms){if(Rn(o.key,t,r)&&typeof o.value==`string`)a+=1;else if(!zn(o,n,`boolean`))return null;i[r[o.key]??o.key]=o.value}return a<=1&&Object.keys(i).length>0?i:null}function Rn(e,t,n){return t.has(e)||n[e]!==void 0}function zn(e,t,n){return t.has(e.key)&&typeof e.value===n}function Bn(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 Vn(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 Hn(e,t){return b(e)?.selectors.some(e=>e.terms.some(e=>e.key===t))??!1}function Un(e){return y(e).selectors.map(e=>e.raw)}function Wn(e){return b(e)!==null}function Gn(e){y(e)}function j(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}const Kn=new Set([`exists`,`present`,`appears`,`gone`,`disappears`]);function qn(e){let t=e[0];if(t===void 0)return null;let n=j(t);if(n!==null)return{kind:`sleep`,durationMs:n};let r=j(e.at(-1));return t===`text`?Jn(e,r):t===`stable`?Yn(e):t===`absent`?Xn(e,r):t.startsWith(`@`)?{kind:`ref`,rawRef:t,timeoutMs:r}:Qn(e,r)}function Jn(e,t){return{kind:`text`,text:(t===null?e.slice(1).join(` `):e.slice(1,-1).join(` `)).trim(),timeoutMs:t}}function Yn(e){let t=e.slice(1),n=t.length>1?j(t[1]):null;return{kind:`stable`,quietMs:t.length>0?j(t[0]):null,timeoutMs:n}}function Xn(e,t){let n=t===null?e.slice(1):e.slice(1,-1),r=S(n);return n.length>0&&r?.rest.length===0&&Wn(r.selectorExpression)?{kind:`absent`,selectorExpression:r.selectorExpression,timeoutMs:t}:{kind:`invalid`,reason:`absent-selector-required`,message:Zn(n)}}function Zn(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 Qn(e,t){let n=t===null?e.slice():e.slice(0,-1),r=S(n);return r&&r.rest.length===0&&Wn(r.selectorExpression)?{kind:`selector`,selectorExpression:r.selectorExpression,timeoutMs:t}:$n(n,r)||{kind:`text`,text:(t===null?e.join(` `):e.slice(0,-1).join(` `)).trim(),timeoutMs:t}}function $n(e,t){for(let t of e){let n=we(t);if(n)return{kind:`invalid`,reason:`unknown-selector-key`,message:er(n,e)}}return t&&t.rest.length>0?{kind:`invalid`,reason:`selector-shaped-text`,message:tr(t,e)}:e.some(e=>x(e))?{kind:`invalid`,reason:`selector-shaped-text`,message:nr(e)}:null}function er(e,t){let n=t.join(` `),r=Se(e.key)?`role=${e.key} label="${e.value}"`:`label="${e.value}"`;return`Unknown selector key "${e.key}" in "${n}". Supported: ${v.join(`, `)}. Use wait '${r}' [timeoutMs] to wait for the selector, or wait text '${n}' [timeoutMs] to wait for the literal text "${n}".`}function tr(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 nr(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=Kn.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 (${v.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 rr(e){let t=qn(e);return t?t.kind===`sleep`?t.durationMs:t.kind===`invalid`?null:t.timeoutMs:null}const ir=24e4,ar=3e4,or=3e5,M={budget:{source:`none`},envelopeMs:9e4,onTimeout:`reset-daemon`},sr={budget:{source:`none`},envelopeMs:21e4,onTimeout:`reset-daemon`};function cr(e,t){if(e.envelopeMs===`unbounded`)return;let n={...e,envelopeMs:e.envelopeMs};return lr(n,t.positionals??[])??ur(n,t.flags)??n.envelopeMs}function lr(e,t){if(e.budget.source!==`positional-parser`)return;let n=e.budget.parser(t);return n===null?void 0:pr(e,n)}function ur(e,t){if(e.budget.source===`flag`)return e.budget.envelope===`widen`?fr(e,e.budget,t):e.budget.envelope===`margin`?dr(e,t):typeof t?.timeoutMs==`number`?t.timeoutMs:e.envelopeMs}function dr(e,t){let n=typeof t?.timeoutMs==`number`?pr(e,t.timeoutMs):e.envelopeMs;return typeof t?.waitMs==`number`?mr({...e,envelopeMs:n},t.waitMs):n}function fr(e,t,n){if(n?.settle!==!0)return e.envelopeMs;let r=typeof n.timeoutMs==`number`?n.timeoutMs:t.defaultBudgetMs;return typeof r==`number`?mr(e,r):e.envelopeMs}function pr(e,t){return Math.max(e.envelopeMs,t+ar)}function mr(e,t){return Math.max(e.envelopeMs,e.envelopeMs+t+ar)}const hr={click:`settle-and-verify`,press:`settle-and-verify`,fill:`settle-and-verify`,longpress:`settle`,hover:`settle`,scroll:`settle`,back:`settle`};function gr(e){if(e!==void 0)return hr[e]}function N(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 _r(e){if(!n(e))throw TypeError(`Unknown local runtime family: ${String(e)}`);return Object.freeze({kind:`local-family`,family:e})}function vr(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 yr(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 P(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 br(e,t){return P(e)===P(t)}function xr(e,t){return e.available?t():{}}function Sr(e){if(!F(e.requesterId)||!F(e.identityIncarnationId)||!wr(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 Cr(e){let t=Tr(e.token);if(!t||t.length!==2)return null;let[n,r]=t;if(!F(n)||!F(r)||!wr(e.generation))return null;let i=Object.freeze({requesterId:n,requestGeneration:e.generation,identityIncarnationId:r});return Sr(i).token===e.token?i:null}function wr(e){return Number.isInteger(e)&&e>=0}function F(e){return typeof e==`string`&&e.trim().length>0}function Tr(e){try{let t=JSON.parse(e);return Array.isArray(t)?t:null}catch{return null}}function Er(e,t){let n={},r={};for(let i of t.required){let t=I(e.facts.operations,i);if(n[i]=t,!t.available)throw jr(i,t);r[i]=kr(e.operations,i)}for(let i of t.preferred){let t=I(e.facts.operations,i);n[i]=t,t.available&&(r[i]=kr(e.operations,i))}for(let i of t.conditional??[]){let t=I(e.facts.operations,i);n[i]=t,t.available&&(r[i]=kr(e.operations,i))}return Object.freeze({device:e.device,owner:e.owner,facts:Object.freeze(n),operations:Object.freeze(r)})}function I(e,t){let n=e[t];if(!Dr(n))throw N(`Runtime owner omitted the ${t} fact`);let r=Or(n);if(r)return r;throw N(`Runtime owner returned an invalid ${t} fact`)}function Dr(e){return typeof e==`object`&&!!e&&`available`in e}function Or(e){if(e.available===!0)return Object.freeze({available:!0});if(e.available===!1&&Ar(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 kr(e,t){let n=e[t];if(typeof n!=`function`)throw N(`Runtime owner advertised ${t} without an implementation`);return n}function Ar(e){return e===`unsupported-platform-leaf`||e===`unsupported-device-kind`||e===`unsupported-device-backend`||e===`unsupported-provider-mode`||e===`owner-capability-missing`}function jr(t,n){return new e(`UNSUPPORTED_OPERATION`,`Runtime operation ${t} is unavailable`,{reason:n.reason,hint:n.hint})}function Mr(e){return JSON.stringify({required:[...e.required].sort(),preferred:[...e.preferred].sort(),conditional:[...e.conditional??[]].sort()})}function Nr(){return e=>{let t=Pr(e.required,`required`),n=Pr(e.preferred??[],`preferred`),r=Pr(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 Pr(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=Nr(),Fr=L({required:[`bootTarget`]}),Ir=L({required:[`bootTargetHeadless`]}),Lr=L({required:[`ensureReady`,`listApps`]}),Rr=L({required:[`captureSnapshot`]}),zr=L({required:[`setViewport`]}),Br=L({required:[`focusPoint`]}),Vr=L({required:[`typeText`]}),Hr=L({required:[`back`]}),Ur=L({required:[`home`]}),Wr=L({required:[`setOrientation`]}),Gr=L({required:[`setFoldPose`]}),Kr=L({required:[`tvRemote`]}),qr=L({required:[`keyboardStatus`]}),Jr=L({required:[`keyboardDismiss`]}),Yr=L({required:[`keyboardEnter`]}),Xr=L({required:[`appSwitcher`]}),Zr=L({required:[`actionButton`]}),Qr=L({required:[`triggerAppEvent`]}),$r=L({required:[`setSetting`]}),ei=L({required:[`readSetting`]}),ti=L({required:[`readAlert`]}),ni=L({required:[`awaitAlert`]}),ri=L({required:[`acceptAlert`]}),ii=L({required:[`dismissAlert`]}),ai=L({required:[`readClipboard`]}),oi=L({required:[`writeClipboard`]}),si=L({required:[`perfFrames`]}),ci=L({required:[`perfMemorySample`]}),li=L({required:[`perfMemorySnapshot`]}),ui=L({required:[`perfNativeCaptureStart`]}),di=L({required:[`perfNativeCaptureReattach`,`perfNativeCaptureCleanup`]}),fi=L({required:[`perfProfileReport`]}),pi=Object.freeze([si,ci,li,ui,di,fi]),R=L({required:[`tapPoint`]}),mi=L({required:[`captureSnapshot`,`tapPoint`],preferred:[`tapRef`],conditional:[`tapElementSelector`]}),hi=L({required:[`longPressPoint`]}),gi=L({required:[`captureSnapshot`,`longPressPoint`]}),_i=L({required:[`hoverPoint`]}),vi=L({required:[`captureSnapshot`,`hoverPoint`],preferred:[`hoverRef`]}),yi=L({required:[`fillPoint`]}),bi=L({required:[`captureSnapshot`,`fillPoint`],preferred:[`fillRef`]}),xi=Object.freeze([R,mi]),Si=xi,Ci=Object.freeze([hi,gi]),wi=Object.freeze([_i,vi]),Ti=Object.freeze([yi,bi]);function Ei(e,t){switch(e){case`click`:case`press`:return t?{kind:`captured-tap`,use:mi}:{kind:`tap-point`,use:R};case`fill`:return t?{kind:`captured-fill`,use:bi}:{kind:`fill-point`,use:yi};case`longpress`:return t?{kind:`captured-long-press`,use:gi}:{kind:`long-press-point`,use:hi};case`hover`:return t?{kind:`captured-hover`,use:vi}:{kind:`hover-point`,use:_i}}}const Di=L({required:[`performGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Oi=L({required:[`performDirectionalFlingPlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),ki=L({required:[`performMultiTouchGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Ai=L({required:[`performTargetAuthoredDrag`,`captureSnapshot`],preferred:[`gestureViewport`]}),ji=L({required:[`gestureViewport`]}),Mi=L({required:[`scrollDirection`],conditional:[`captureSnapshot`]}),Ni=L({required:[`scrollDirection`,`captureSnapshot`]}),Pi=Object.freeze({plan:Di,"directional-fling":Oi,"multi-touch":ki,"target-authored-drag":Ai}),Fi=Object.freeze([Di,Oi,ki,Ai]),Ii=Object.freeze([Di]),Li=Object.freeze([Mi,Ni]);function Ri(e){return e.intent===`pan`?(`pointerCount`in e?e.pointerCount:1)===2:e.intent===`pinch`||e.intent===`rotate`||e.intent===`transform`}function zi(e){return e.intent===`drag`?`target-authored-drag`:Ri(e)?`multi-touch`:e.intent===`fling`&&`direction`in e?`directional-fling`:`plan`}function Bi(e){let t=zi(e);switch(t){case`plan`:return z(t);case`directional-fling`:return z(t);case`multi-touch`:return z(t);case`target-authored-drag`:return z(t)}}function z(e){let t=Pi[e];return Object.freeze({tier:e,operation:t.required[0],use:t})}function Vi(e){return e.until===void 0?e.edge===void 0?Object.freeze({kind:`direction`,use:Mi}):Object.freeze({kind:`edge`,edge:e.edge,use:Ni}):Object.freeze({kind:`until`,until:e.until,use:Ni})}const Hi=L({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`]}),Ui=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),Wi=L({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`,`captureSnapshotWithoutActiveApp`]}),Gi=L({required:[`captureSnapshot`]}),Ki=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),qi=L({required:[`captureSnapshot`],preferred:[`readTextAtPoint`]}),Ji=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],preferred:[`readTextAtPoint`]}),Yi=L({required:[`captureSnapshot`],conditional:[`findText`]}),Xi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],conditional:[`findText`]}),Zi=Object.freeze([Gi,Ki]),Qi=Object.freeze([qi,Ji]),$i=L({required:[`captureSnapshot`,`focusPoint`]}),ea=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`]}),ta=L({required:[`captureSnapshot`,`focusPoint`,`typeText`]}),na=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`,`typeText`]}),ra=Object.freeze([qi,Ji,Gi,Ki,$i,ea,ta,na]),ia=Object.freeze([Yi,Xi]),aa=Object.freeze([Rr,Hi,Ui,Wi]),B=Object.freeze({"capture-only":Zi,"element-text":Qi,"wait-observation":ia,"find-focus":Object.freeze([$i,ea]),"find-type":Object.freeze([ta,na])});function oa(e){return e===`focus`?`find-focus`:e===`type`?`find-type`:`capture-only`}function sa(e){switch(e.intent){case`capture-only`:return V(e.hasActiveApp,e.intent,B[e.intent]);case`element-text`:return V(e.hasActiveApp,e.intent,B[e.intent]);case`wait-observation`:return V(e.hasActiveApp,e.intent,B[e.intent]);case`find-focus`:return V(e.hasActiveApp,e.intent,B[e.intent]);case`find-type`:return V(e.hasActiveApp,e.intent,B[e.intent])}}function V(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 ca(e){return e.customActions?e.hasActiveApp?Object.freeze({kind:`custom-actions-active-app`,operation:`captureSnapshotWithCustomActions`,use:Hi}):Object.freeze({kind:`custom-actions-without-active-app`,operation:`captureSnapshotWithCustomActions`,use:Wi}):e.hasActiveApp?Object.freeze({kind:`active-app`,operation:`captureSnapshot`,use:Rr}):Object.freeze({kind:`without-active-app`,operation:`captureSnapshotWithoutActiveApp`,use:Ui})}const la=L({required:[`captureScreenshot`]}),ua=L({required:[`captureScreenshot`,`captureSnapshot`]}),da=Object.freeze([la,ua]);function fa(e){return e.cropOn?Object.freeze({kind:`capture-with-crop-on`,use:ua}):e.overlayRefs?Object.freeze({kind:`capture-with-overlay-refs`,use:ua}):Object.freeze({kind:`capture`,use:la})}const pa=Object.freeze([Fr,Ir]),ma=Object.freeze({kind:`boot-target`,operation:`bootTarget`,use:Fr}),ha=Object.freeze({kind:`boot-target-headless`,operation:`bootTargetHeadless`,use:Ir});function ga(e){return e.headless?ha:ma}const _a=L({required:[`ensureReady`,`appState`]}),va=Object.freeze([_a]),ya=L({required:[`shutdownTarget`]}),ba=Object.freeze([ai,oi]),xa=Object.freeze([$r,ei]),Sa=[`text-size`],Ca=Object.freeze({kind:`write`,use:$r});function wa(e){let t=Ta(e?.[0]);return e?.length!==1||t===void 0?Ca:Sa.includes(t)?Object.freeze({kind:`read`,setting:t,use:ei}):Ca}function Ta(e){let t=e?.trim().toLowerCase();return Sa.find(e=>e===t)}const Ea=Object.freeze([ti,ni,ri,ii]),Da=Object.freeze([qr,Jr,Yr]),Oa=L({required:[`deployApp`]}),ka=L({required:[`ensureReady`,`materializeAppSource`,`deployMaterializedApp`]}),Aa=L({required:[`ensureReady`,`sendPushNotification`]}),ja=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`]}),Ma=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`]}),Na=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`clearRuntimeHints`]}),Pa=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`,`clearRuntimeHints`]});function Fa(e){return e.applyRuntimeHints&&e.clearRemovedRuntimeHints?Object.freeze({kind:`open-apply-and-clear-runtime-hints`,use:Pa}):e.applyRuntimeHints?Object.freeze({kind:`open-apply-runtime-hints`,use:Ma}):e.clearRemovedRuntimeHints?Object.freeze({kind:`open-clear-runtime-hints`,use:Na}):Object.freeze({kind:`open`,use:ja})}const Ia=Object.freeze([ja,Ma,Na,Pa]),La=L({required:[`closeApplication`,`finalizeApplicationClose`]}),Ra=L({required:[`closeApplication`,`finalizeApplicationClose`,`clearRuntimeHints`]}),za=Object.freeze([La,Ra]),Ba=L({required:[`finalizeApplicationClose`]}),Va=L({required:[`finalizeApplicationClose`,`clearRuntimeHints`]}),Ha=L({required:[`prepareAppleRunner`]}),Ua=L({required:[`clearRuntimeHints`]}),Wa=L({required:[`configureProviderPortReverse`]}),Ga=Object.freeze([Ua,Wa]),H=L({required:[`appLogInspect`]}),Ka=L({required:[`appLogInspect`,`appLogDoctor`]}),qa=L({required:[`appLogInspect`,`appLogStart`]}),Ja=L({required:[],preferred:[`appLogInspect`]}),Ya=Object.freeze([H,Ka,qa]);function Xa(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:H});case`start`:return Object.freeze({kind:`start`,requiresAppSession:!0,use:qa});case`stop`:return Object.freeze({kind:`stop`,requiresAppSession:!1,use:H});case`doctor`:return Object.freeze({kind:`doctor`,requiresAppSession:!1,use:Ka});case`mark`:return Object.freeze({kind:`mark`,marker:t.marker??``,requiresAppSession:!1,use:H});case`clear`:return t.restart?Object.freeze({kind:`clear-restart`,requiresAppSession:!0,use:qa}):Object.freeze({kind:`clear`,requiresAppSession:!1,use:H});default:throw new e(`INVALID_ARGS`,`logs requires path, start, stop, doctor, mark, or clear`)}}const Za=L({required:[`audioProbeStart`]}),Qa=L({required:[`audioProbeReattach`,`audioProbeCleanup`]}),$a=L({required:[`audioProbeQuery`]}),eo=Object.freeze([Za,Qa,$a]);function to(e){if(e.mode===`query`)return Object.freeze({kind:`query`,action:e.probeAction,use:$a});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 no=[`probe`],ro=[`start`,`status`,`stop`];function io(t){let n=(t?.[0]??`probe`).toLowerCase();if(!no.includes(n))throw new e(`INVALID_ARGS`,`audio requires probe`);let r=(t?.[1]??`status`).toLowerCase();if(!ro.includes(r))throw new e(`INVALID_ARGS`,`audio probe requires ${ro.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:ao(t?.[2],{defaultValue:1e4,min:100,max:12e4,message:`audio probe duration must be an integer in range 100..120000 ms`}),bucketMs:ao(t?.[3],{defaultValue:1e3,min:100,max:1e4,message:`audio probe bucket must be an integer in range 100..10000 ms`})})}function ao(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 oo=L({required:[`networkDump`]}),so=L({required:[],preferred:[`networkDump`]}),co=[`dump`,`log`],lo=[`summary`,`headers`,`body`,`all`];function uo(t){let n=(t.action??`dump`).toLowerCase(),r=(t.include??`summary`).toLowerCase();if(!fo(n))throw new e(`INVALID_ARGS`,`network requires dump or log`);if(!po(r))throw new e(`INVALID_ARGS`,`network --include must be summary, headers, body, or all`);return Object.freeze({action:n,include:r,use:oo})}function fo(e){return co.some(t=>t===e)}function po(e){return lo.some(t=>t===e)}function mo(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,ho(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=>go(t,e)));return Object.freeze({families:a,modules:o,get:e=>go(t,e)})}function ho(e){return Object.freeze({...e})}function go(e,t){let n=e.get(t);if(!n)throw TypeError(`Missing platform family registration: ${t}`);return n}const _o=Object.freeze({kind:`device-inventory`});function vo(e){if(typeof e!=`object`||!e)throw To();let t=e,n=Object.keys(t).sort();if(!(t.kind===`none`&&U(n,[`kind`]))&&!(t.kind===`host`&&U(n,[`kind`]))&&!(t.kind===`inventory`&&U(n,[`kind`,`use`])&&bo(t.use))&&!(t.kind===`device-runtime`&&U(n,[`kind`,`use`])&&xo(t.use))&&!(t.kind===`device-runtime`&&(U(n,[`kind`,`uses`])||U(n,[`kind`,`selectUses`,`uses`])&&typeof t.selectUses==`function`)&&yo(t.uses)))throw To()}function yo(e){if(!Array.isArray(e)||e.length===0||!e.every(xo))return!1;let t=e.map(Mr);return new Set(t).size===t.length}function bo(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.kind===`device-inventory`&&U(Object.keys(t).sort(),[`kind`])}function xo(e){if(typeof e!=`object`||!e)return!1;let t=e,n=[Co(t.required),Co(t.preferred),Co(t.conditional??[])];if(!So(n))return!1;let r=n.flat();return new Set(r).size===r.length&&U(Object.keys(t).sort(),t.conditional===void 0?[`preferred`,`required`]:[`conditional`,`preferred`,`required`])}function So(e){return e.every(e=>e!==null&&wo(e))}function Co(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?e:null}function wo(e){return new Set(e).size===e.length}function U(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function To(){return TypeError(`Command platform execution must declare exactly one of none, host, inventory, or device-runtime`)}const Eo=L({required:[`screenRecordingStart`]}),Do=L({required:[`screenRecordingReattach`,`screenRecordingCleanup`]}),Oo=L({required:[]}),ko=L({required:[],preferred:[`screenRecordingStart`]}),Ao=Object.freeze([Eo,Do]);function jo(t){switch((t.action??``).toLowerCase()){case`start`:if(!Mo(t.scope??`app`))throw new e(`INVALID_ARGS`,`record scope must be app, device, or system`);return Object.freeze({kind:`start`,use:Eo});case`stop`:return t.hasLiveHandle===!0?Object.freeze({kind:`stop-live`,use:Oo}):Object.freeze({kind:`stop-recovery`,use:Do});default:throw new e(`INVALID_ARGS`,`record requires start or stop`)}}function Mo(e){return e===`app`||e===`device`||e===`system`}function No(e){if(vo(e),e.kind!==`device-runtime`||!(`uses`in e))throw Po();let t=e.uses.map(Mr),n=Ao.map(Mr),r=new Set(t),i=new Set(n);if(t.length!==n.length||r.size!==t.length||[...r].some(e=>!i.has(e)))throw Po()}function Po(){return TypeError(`Record runtime execution must declare exactly the uses selected by its two runtime-bearing plans`)}function Fo(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 vo(t),t}const W={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0},G={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0,selectorValidationExempt:!0},Io=()=>!0,Lo=e=>(e.positionals?.[0]??``).toLowerCase()===`start`,Ro=e=>e.command===`test`&&(typeof e.flags?.shardAll==`number`||typeof e.flags?.shardSplit==`number`),zo=e=>(e.positionals?.length??0)===0?{kind:`unconditional`}:void 0,Bo=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},Vo=new Set([`status`,`get`]),Ho=e=>Qo(e,Vo,`status`),Uo=new Set([`get`,`wait`]),Wo=e=>Qo(e,Uo,`get`),Go=e=>$o(e,Vo,`status`),Ko=e=>$o(e,Uo,`get`),qo=e=>{try{return Yt(on(e.positionals??[]).action)?`observes-app`:`mutates-app`}catch{return`mutates-app`}},Jo=e=>$o(e,new Set([`read`]),``),Yo=e=>wa(e.positionals).kind===`read`,Xo=e=>Yo(e)?`observes-app`:`mutates-app`,Zo=e=>Yo(e)?`preserve`:`may-invalidate`;function Qo(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`preserve`:`may-invalidate`}function $o(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`observes-app`:`mutates-app`}const K={kind:`none`},q={kind:`host`},J={recordsSessionAction:!0,recordingEffect:`mutates-app`,deviceClaimPolicy:`require-owner`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:M,batchable:!0},es={targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},recordsSessionAction:!0,recordingEffect:`mutates-app`,deviceClaimPolicy:`require-owner`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0}},Y={...M,onTimeout:`preserve-daemon`},ts={...M,envelopeMs:18e4},ns={...M,onTimeout:`preserve-daemon`},rs={...ns,envelopeMs:33e4},is={...M,budget:{source:`flag`,envelope:`widen`,defaultBudgetMs:1e4},onTimeout:`preserve-daemon`},as={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}}},os={fields:{delayMs:{defaultValue:0}}};function X(e,t){return gr(e)===void 0?t:is}function Z(e){let t=gr(e);if(t===void 0)throw Error(`Missing post-action observation descriptor support for ${e}`);return t}const ss={deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:Oa},timeoutPolicy:ts,batchable:!0},cs=e=>{let t=e.flags?.snapshotCustomActions===!0||e.input?.customActions===!0;return[!0,!1].map(e=>ca({customActions:t,hasActiveApp:e}).use)},ls=e=>{let t=ds(e);if(t===void 0||!us(t))return ra;let n=oa(t);return[!0,!1].map(e=>sa({hasActiveApp:e,intent:n}).use)};function us(e){return Yt(e)||e===`focus`||e===`type`}function ds(e){if(e.positionals===void 0)return;let t=nn(e.positionals,e.flags);return t.ok?t.parsed.action:void 0}const fs=[{name:`human_control`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`humanControl`},recordsSessionAction:!1,daemon:{route:`humanControl`,refFrameEffect:`preserve`,selectorValidationExempt:!0,skipSessionlessProviderDevice:Io},timeoutPolicy:M,batchable:!1,platformExecution:K},{name:`lease_allocate`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseAllocate`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...W},timeoutPolicy:rs,batchable:!1,platformExecution:K},{name:`lease_heartbeat`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseHeartbeat`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...W},timeoutPolicy:ns,batchable:!1,platformExecution:K},{name:`lease_release`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseRelease`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...W},timeoutPolicy:ns,batchable:!1,platformExecution:K},{name:`artifacts`,deviceClaimPolicy:`none`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...W},timeoutPolicy:M,batchable:!1,platformExecution:K},{name:`session_list`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`sessionList`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,...G},timeoutPolicy:M,batchable:!1,platformExecution:K},{name:`session_save_script`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`sessionSaveScript`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`publication`},timeoutPolicy:M,batchable:!1,platformExecution:K},{name:`devices`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,...G},timeoutPolicy:M,batchable:!0,platformExecution:{kind:`inventory`,use:_o}},{name:`capabilities`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0,...G},timeoutPolicy:M,batchable:!0,platformExecution:K},{name:`doctor`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,allowSessionlessDefaultDevice:Io,...G},timeoutPolicy:M,batchable:!0,platformExecution:q},{name:`apps`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0,sessionlessLeaseAdmissionExemption:Bo},platformExecution:{kind:`device-runtime`,uses:[Lr]},timeoutPolicy:M,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:pa},timeoutPolicy:M,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:ya},timeoutPolicy:M,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:va},timeoutPolicy:M,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:M,batchable:!0,platformExecution:{kind:`device-runtime`,uses:pi}},{name:`logs`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},platformExecution:{kind:`device-runtime`,uses:Ya},timeoutPolicy:M,batchable:!0},{name:`events`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`,allowInvalidRecording:!0,...G},timeoutPolicy:M,batchable:!1,platformExecution:K},{name:`network`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},platformExecution:{kind:`device-runtime`,use:oo},timeoutPolicy:M,batchable:!0},{name:`audio`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},timeoutPolicy:M,batchable:!0,platformExecution:{kind:`device-runtime`,uses:eo}},{name:`replay`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,sessionKind:`replay`,skipSessionlessProviderDevice:Ro,saveScriptFlagOwner:!0},timeoutPolicy:{...M,budget:{source:`flag`}},batchable:!1,platformExecution:K},{name:`test`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,sessionKind:`replay`,skipSessionlessProviderDevice:Ro},timeoutPolicy:{...M,envelopeMs:`unbounded`},batchable:!0,platformExecution:K},{name:`runtime`,deviceClaimPolicy:`require-owner`,catalog:{group:`internal`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:M,batchable:!1,platformExecution:{kind:`device-runtime`,uses:[...Ga,ji]}},{name:`clipboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:Jo,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:M,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ba}},{name:`keyboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:Go,daemon:{route:`session`,refFrameEffect:Ho,androidBlockingDialogGuard:!0},timeoutPolicy:M,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Da}},{name:`install`,...ss},{name:`reinstall`,...ss},{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:ka},timeoutPolicy:ts,batchable:!1},{name:`release_materialized_paths`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`releaseMaterializedPaths`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,...G},timeoutPolicy:M,batchable:!1,platformExecution:K},{name:`push`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:Aa},timeoutPolicy:M,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:M,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:Io,saveScriptFlagOwner:!0},timeoutPolicy:{...M,budget:{source:`flag`,envelope:`margin`}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ia}},{name:`prepare`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:{budget:{source:`flag`,envelope:`margin`},envelopeMs:ir,onTimeout:`reset-daemon`},batchable:!1,mcpExposed:!1,platformExecution:{kind:`device-runtime`,use:Ha}},{name:`batch`,deviceClaimPolicy:`none`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`},timeoutPolicy:M,batchable:!1,platformExecution:K},{name:`close`,deviceClaimPolicy:`release-session`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`,allowInvalidRecording:!0,saveScriptFlagOwner:!0,sessionlessLeaseAdmissionExemption:zo},timeoutPolicy:M,batchable:!0,platformExecution:{kind:`device-runtime`,uses:za}},{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:aa,selectUses:cs}},{name:`diff`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`snapshot`,refFrameEffect:`preserve`},timeoutPolicy:M,batchable:!0,platformExecution:{kind:`device-runtime`,uses:aa,selectUses:cs}},{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:rr}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:ia}},{name:`alert`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:Ko,daemon:{route:`snapshot`,refFrameEffect:Wo},timeoutPolicy:M,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ea}},{name:`settings`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:Xo,daemon:{route:`snapshot`,refFrameEffect:Zo},timeoutPolicy:M,batchable:!0,platformExecution:{kind:`device-runtime`,uses:xa}},{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:M,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:Lo},platformExecution:{kind:`device-runtime`,uses:Ao},timeoutPolicy:M,batchable:!0},{name:`trace`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`recordTrace`,refFrameEffect:`preserve`},timeoutPolicy:M,batchable:!0,platformExecution:K},{name:`find`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:qo,daemon:{route:`find`,refFrameEffect:`may-invalidate`},timeoutPolicy:Y,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ra,selectUses:ls}},{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:as,batchable:!0,platformExecution:{kind:`device-runtime`,uses:xi}},{name:`fill`,...es,frameworkTier:`core`,timeoutPolicy:X(`fill`,Y),postActionObservation:Z(`fill`),responseDataTransform:os,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ti}},{name:`longpress`,...es,catalog:{group:`public`,key:`longPress`},frameworkTier:`extended`,timeoutPolicy:{...is,envelopeMs:21e4},postActionObservation:Z(`longpress`),batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ci}},{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:wi}},{name:`press`,...es,frameworkTier:`core`,timeoutPolicy:X(`press`,Y),postActionObservation:Z(`press`),responseDataTransform:as,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Si}},{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:[Vr]}},{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:Qi}},{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:Zi}},{name:`back`,catalog:{group:`public`},frameworkTier:`core`,...J,timeoutPolicy:X(`back`,M),postActionObservation:Z(`back`),platformExecution:{kind:`device-runtime`,uses:[Hr]}},{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:M,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Fi}},{name:`home`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Ur]}},{name:`tv-remote`,catalog:{group:`public`,key:`tvRemote`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Kr]}},{name:`orientation`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Wr]}},{name:`fold`,catalog:{group:`public`},frameworkTier:`extended`,...J,timeoutPolicy:sr,platformExecution:{kind:`device-runtime`,uses:[Gr]}},{name:`scroll`,catalog:{group:`public`},frameworkTier:`core`,...J,timeoutPolicy:X(`scroll`,M),postActionObservation:Z(`scroll`),platformExecution:{kind:`device-runtime`,uses:Li}},{name:`swipe`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:M,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ii}},{name:`focus`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Br]}},{name:`screenshot`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`generic`,refFrameEffect:`preserve`},timeoutPolicy:M,batchable:!0,platformExecution:{kind:`device-runtime`,uses:da}},{name:`viewport`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`},timeoutPolicy:M,batchable:!1,platformExecution:{kind:`device-runtime`,uses:[zr]}},{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:M,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[Xr]}},{name:`action-button`,catalog:{group:`public`,key:`actionButton`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Zr]}},{name:`install-from-source`,deviceClaimPolicy:`none`,catalog:{group:`public`,key:`installFromSource`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,platformExecution:{kind:`device-runtime`,use:ka},timeoutPolicy:M,batchable:!0},{name:`debug`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:M,batchable:!1,platformExecution:K},{name:`daemon`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:M,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`device`,deviceClaimPolicy:`observe`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:M,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`metro`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:M,batchable:!1,platformExecution:K},{name:`session`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:M,batchable:!1,platformExecution:K},{name:`cdp`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:M,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`auth`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:M,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`connect`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:M,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`connection`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:M,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`disconnect`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:M,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`mcp`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:M,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`proxy`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:M,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`takeover`,deviceClaimPolicy:`observe`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:M,batchable:!1,mcpExposed:!1,platformExecution:{kind:`inventory`,use:_o}},{name:`react-devtools`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`,key:`reactDevtools`},recordsSessionAction:!1,timeoutPolicy:M,batchable:!1,mcpExposed:!1,platformExecution:K},{name:`web`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:M,batchable:!1,mcpExposed:!1,platformExecution:q}],ps=new Set([`public`,`local-cli`]),ms=new Set(fs.filter(e=>ps.has(Ss(e))).map(e=>e.name)),Q=fs.map(e=>{let t=Fo(e);return e.name===`record`&&No(t),{...e,mcpExposed:bs(e),platformExecution:t}});function hs(e){return Q.filter(t=>Ss(t)===e).map(e=>[Cs(e),e.name])}function gs(){return Q.filter(e=>xs(e)).map(e=>e.name).sort()}function _s(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 vs(){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 ys(e){return ms.has(e)}function bs(e){return e.mcpExposed??ms.has(e.name)}function xs(e){return e.mcpExposed&&ys(e.name)}function Ss(e){return e.catalog.group}function Cs(e){return e.catalog.key??e.name}const ws=new Map(Q.map(e=>[e.name,e.timeoutPolicy])),Ts=new Map(Q.map(e=>[e.name,e.deviceClaimPolicy])),Es=new Map(Array.from($.values()).flatMap(e=>e.responseDataTransform?[[e.name,e.responseDataTransform]]:[]));function Ds(e){if(e!==void 0)return $.get(e)?.postActionObservation}function Os(e){return Ds(e)!==void 0}function ks(e){return Ds(e)===`settle-and-verify`}function As(e){return e===void 0?M:ws.get(e)??M}function js(e){return e===void 0?`require-owner`:Ts.get(e)??`require-owner`}function Ms(e){if(e!==void 0)return Es.get(e)}function Ns(e){return e===void 0?!1:$.get(e)?.recordsSessionAction??!1}function Ps(e){if(e!==void 0)return $.get(e)?.frameworkTier}function Fs(e){return $.get(e)?.targetIdentityVerification}function Is(e){let t=$.get(e.command);if(t?.recordsSessionAction)return typeof t.recordingEffect==`function`?t.recordingEffect(e):t.recordingEffect}function Ls(){return[...new Set(Array.from(Es.values()).flatMap(e=>Object.keys(e.fields)))].sort()}const Rs={apps:{appsFilter:`user-installed`}};function zs(e,t){if(!e||!ys(e))return!1;let n=Rs[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 Bs(e){let t=[];for(let n of e)n.daemon&&t.push({command:n.name,...n.daemon,replayScopedAction:n.recordsSessionAction});return t}function Vs(e){return e.filter(e=>e.batchable).map(e=>e.name)}const Hs=Vs(Q),Us=new Set([`batch`,`replay`]),Ws=[`command`,`positionals`,`input`,`flags`,`runtime`],Gs=[`platform`,`target`,`device`,`udid`,`serial`,`verbose`,`out`],Ks=`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.`,qs=new Set(Hs);function Js(e){return qs.has(e)}function Ys(e){return typeof e==`string`?e.trim().toLowerCase():``}function Xs(e){let t=Ys(e);return Js(t)?t:void 0}function Zs(t,n,r=Ks){let i=Xs(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 Qs(t,n){if(Us.has(t))throw new e(`INVALID_ARGS`,`Batch step ${n} cannot run ${t}.`)}export{ri as $,pt as $n,P as $t,so as A,en as An,ue as Ar,di as At,Wa as B,Lt as Bn,ne as Br,Ei as Bt,Ms as C,hn as Cn,b as Cr,Yr as Ct,ko as D,fn as Dn,ge as Dr,si as Dt,jo as E,pn as En,le as Er,Wr as Et,Ja as F,Jt as Fn,se as Fr,fa as Ft,Ma as G,zt as Gn,f as Gr,Kr as Gt,Va as H,Ut as Hn,l as Hr,$r as Ht,Xa as I,on as In,m as Ir,Vi as It,Fa as J,Ft as Jn,s as Jr,Cr as Jt,Na as K,Rt as Kn,d as Kr,Vr as Kt,Ua as L,cn as Ln,re as Lr,sa as Lt,Qa as M,nn as Mn,h as Mr,fi as Mt,io as N,Xt as Nn,ae as Nr,ga as Nt,Do as O,_n as On,he as Or,ci as Ot,to as P,Yt as Pn,oe as Pr,Bi as Pt,Zr as Q,ht as Qn,vr as Qt,La as R,Wt as Rn,ie as Rr,wa as Rt,Ns as S,gn as Sn,S as Sr,Jr as St,Fs as T,mn as Tn,g as Tr,hi as Tt,ja as U,Bt as Un,u as Ur,ya as Ut,Ba as V,Nt as Vn,te as Vr,ei as Vt,Pa as W,jt as Wn,o as Wr,R as Wt,ka as X,It as Xn,yr as Xt,Oa as Y,Pt as Yn,a as Yr,_r as Yt,Aa as Z,rt as Zn,Er as Zt,gs as _,On as _n,v as _r,Br as _t,Qs as a,cr as an,Qe as ar,Xr as at,Ps as b,En as bn,x as br,Ur as bt,Xs as c,Wn as cn,Ke as cr,bi as ct,Q as d,Bn as dn,Je as dr,mi as dt,br as en,gt as er,ii as et,_s as f,Hn as fn,qe as fr,ai as ft,hs as g,Nn as gn,ze as gr,oa as gt,Ls as h,jn as hn,Be as hr,yi as ht,Hs as i,ir as in,C as ir,_a as it,uo as j,tn as jn,fe as jr,ui as jt,mo as k,Kt as kn,_e as kr,li as kt,Bs as l,Fn as ln,Ge as lr,vi as lt,ks as m,Gn as mn,Le as mr,L as mt,Ws as n,N as nn,ft as nr,ni as nt,Ys as o,qn as on,et as or,Lr as ot,Os as p,Vn as pn,Xe as pr,oi as pt,Ha as q,At as qn,c as qr,zr as qt,Gs as r,or as rn,w as rr,Qr as rt,Zs as s,j as sn,Ze as sr,Hr as st,Ks as t,xr as tn,vt as tr,ti as tt,zs as u,Un as un,Ye as ur,gi as ut,vs as v,An as vn,we as vr,Gr as vt,As as w,vn as wn,ve as wr,qr as wt,Is as x,Dn as xn,y as xr,_i as xt,js as y,Mn as yn,Se as yr,ji as yt,Ra as z,D as zn,p as zr,ca as zt};
|
|
1
|
+
import{A as e,_ as t}from"./sdk-contracts.js";import{m 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`],o={x:-Number.MAX_VALUE/2,y:-Number.MAX_VALUE/2,width:Number.MAX_VALUE,height:Number.MAX_VALUE};function s(e){return e.x===o.x&&e.y===o.y&&e.width===o.width&&e.height===o.height}function c(e){if(!e)return!1;let{x:t,y:n,width:r,height:i}=e;return![t,n,r,i].every(Number.isFinite)||!Number.isFinite(t+r)||!Number.isFinite(n+i)||r<=0||i<=0?!1:!s(e)}function l(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 u(e){return e.width*e.height}function d(e,t,n){return t>=e.x&&t<=e.x+e.width&&n>=e.y&&n<=e.y+e.height}function ee(e,t,n){if(!e||!c(t))return!1;let r=t.x+t.width/2,i=t.y+t.height/2;return r>=n.x&&r<n.x+n.width&&i>=n.y&&i<n.y+n.height}function f(e){let t=null,n=-1;for(let r of e){let e=r.width*r.height;e>n&&(t=r,n=e)}return t}function te(e,t){return ne(e.x,e.x+e.width,t.x,t.x+t.width)&&ne(e.y,e.y+e.height,t.y,t.y+t.height)}function ne(e,t,n,r){return Math.max(e,n)<=Math.min(t,r)}function re(e){let t=`${e??``}`.toLowerCase();return t.includes(`scroll`)||t.includes(`recyclerview`)||t.includes(`listview`)||t.includes(`gridview`)||t.includes(`collectionview`)||t===`table`}function ie(e){return re(e.type)?!0:`${e.role??``} ${e.subrole??``}`.toLowerCase().includes(`scroll`)}function ae(e){return e?.trim().toLowerCase()||null}function oe(e,t){let n=ae(t);return n?[e.label,e.value,e.identifier].some(e=>(e??``).toLowerCase().includes(n)):!1}function se(e,t,n=()=>!0){if(!ae(t))return null;for(let[r,i]of e.entries()){if(!oe(i,t))continue;let a=i.depth??0,o=r+1;for(;o<e.length&&(e[o]?.depth??0)>a;)o+=1;let s={start:r,end:o};if(n(s))return s}return null}function ce(e,t=0){let n=new Map;for(let[t,r]of e.entries())n.set(r.index,t);return e.map((e,r)=>({...e,index:r,depth:Math.max(0,(e.depth??0)-t),parentIndex:typeof e.parentIndex==`number`?n.get(e.parentIndex):void 0}))}function p(e){return new Map(e.map(e=>[e.index,e]))}function le(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 ue(e,t,n){return le(e,t,p(e),e=>n(e)?e:null)}function m(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 de(e,t){let n=m(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 fe(e){let t=e.trim();return!(!t||/^(true|false)$/i.test(t)||/^\d+$/.test(t))}function pe(e){if(typeof e!=`string`)return!1;let t=e.trim();return t?!/^(true|false)$/i.test(t):!1}function h(e){return[e.label,e.value,e.identifier].map(e=>typeof e==`string`?e.trim():``).filter(e=>e.length>0)[0]??``}const me=Symbol(`SnapshotVisibility`);function he(e,t={}){let n,r,i=()=>(n||(n=p(e),t.onNodeMapBuilt?.()),n),a=()=>(r||(r=_e(e),t.onViewportRectsCollected?.()),r),o=n=>ye(e,n,a(),t.onContainingRectFallback),s=n=>{let r=Se(n,i(),e=>!!e.rect)?.rect;if(r)return r;let o=a();return o.length===0?null:ye(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||te(e.rect,t)},l=e=>e.rect?c(e)?xe(e.rect,o(e.rect)):!1:!0;return{[me]:!0,get nodeByIndex(){return i()},get viewportRects(){return a()},findAncestor(t,n){return le(e,t,i(),n)},isVisibleInEffectiveViewport:c,isVisibleOnScreen:l,resolveEffectiveViewport:s,resolveViewport:o}}function ge(e){let t=[e.type,e.role,e.subrole].map(e=>m(e??``)).join(` `);return t.includes(`application`)||t.includes(`window`)}function _e(e){return e.flatMap(e=>ge(e)&&c(e.rect)?[e.rect]:[])}function ve(e,t,n){return ye(e,t,n??_e(e))}function ye(e,n,r,i){let a=t(n),o=e=>d(e,a.x,a.y);return(f(r.filter(o))??f(r))||(i?.(),f(e.flatMap(e=>be(e.rect)&&o(e.rect)?[e.rect]:[])))}function be(e){return e?Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.width)&&Number.isFinite(e.height):!1}function xe(e,t){return!t||t.width<=0||t.height<=0||d(t,e.x+e.width/2,e.y+e.height/2)}function Se(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)&&ie(r))return r;r=typeof r.parentIndex==`number`?t.get(r.parentIndex):void 0}return null}function Ce(e,t){if(t===`android`&&e.visibleToUser===!1)return!1;let n=m(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&&c(e.rect):e.hittable===!0||c(e.rect)}function g(e){return e.hittable===!0?!0:e.rect?e.rect.width>0&&e.rect.height>0:!1}function we(e,t){return de(e.type??``,t)&&e.enabled!==!1}const Te=new Set([`id`,`role`,`text`,`label`,`value`,`appname`,`windowtitle`]),Ee=new Set([`visible`,`hidden`,`editable`,`selected`,`focused`,`enabled`,`hittable`]),_=new Set([...Te,...Ee]),De=[..._],Oe=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 ke(e){return Oe.has(e.trim().toLowerCase())}const Ae=new Map([[`"`,`"`],[`'`,`'`],[`\\`,`\\`],[`/`,`/`],[`b`,`\b`],[`f`,`\f`],[`n`,`
|
|
2
|
+
`],[`r`,`\r`],[`t`,` `]]);function v(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Selector expression cannot be empty`);let r=Pe(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Selector expression cannot be empty`);return{raw:n,selectors:r.map(e=>Me(e))}}function y(e){try{return v(e)}catch{return null}}function b(e){let t=e.trim();if(!t)return!1;if(t===`||`)return!0;let n=t.indexOf(`=`);if(n!==-1){let e=t.slice(0,n).trim().toLowerCase();return _.has(e)}return _.has(t.toLowerCase())}function je(e){let t=e.trim(),n=t.indexOf(`=`);if(n===-1)return null;let r=t.slice(0,n).trim().toLowerCase();if(!r||_.has(r))return null;let i=t.slice(n+1).trim();if(!i)return null;let a=Le(i).trim();return a?{key:r,value:a}:null}function x(e,t={}){if(e.length===0)return null;let n=t.preferTrailingValue??!1,r=0,i=[];for(;r<e.length;){let t=e[r];if(t===void 0||!b(t))break;r+=1;let n=e.slice(0,r).join(` `).trim();n&&y(n)&&i.push(r)}if(i.length===0)return null;let a=i.at(-1);if(a===void 0)return null;let o=a;if(n)for(let t=i.length-1;t>=0;--t){let n=i[t];if(n!==void 0&&n<e.length){o=n;break}}let s=e.slice(0,o).join(` `).trim();return s?{selectorExpression:s,rest:e.slice(o)}:null}function Me(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Selector segment cannot be empty`);let r=Fe(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Invalid selector segment: ${t}`);return{raw:n,terms:r.map(Ne)}}function Ne(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Empty selector term`);let r=n.indexOf(`=`);if(r===-1){let r=n.toLowerCase();if(!Ee.has(r))throw new e(`INVALID_ARGS`,`Invalid selector term "${t}", expected key=value`);return{key:r,value:!0}}let i=n.slice(0,r).trim().toLowerCase(),a=n.slice(r+1).trim();if(!_.has(i))throw new e(`INVALID_ARGS`,`Unknown selector key: ${i}`);if(!a)throw new e(`INVALID_ARGS`,`Missing selector value for key: ${i}`);if(Ee.has(i)){let t=Be(a);if(t===null)throw new e(`INVALID_ARGS`,`Invalid boolean value for ${i}: ${a}`);return{key:i,value:t}}return{key:i,value:Le(a)}}function Pe(t){let n=[],r=``,i=null;for(let a=0;a<t.length;a+=1){let o=t[a];if((o===`"`||o===`'`)&&!Ve(t,a)){i=Ie(i,o),r+=o;continue}if(!i&&o===`|`&&t[a+1]===`|`){let i=r.trim();if(!i)throw new e(`INVALID_ARGS`,`Invalid selector fallback expression: ${t}`);n.push(i),r=``,a+=1;continue}r+=o}let a=r.trim();if(!a)throw new e(`INVALID_ARGS`,`Invalid selector fallback expression: ${t}`);return n.push(a),n}function Fe(t){let n=[],r=``,i=null;for(let e=0;e<t.length;e+=1){let a=t.charAt(e);if((a===`"`||a===`'`)&&!Ve(t,e)){i=Ie(i,a),r+=a;continue}if(!i&&/\s/.test(a)){r.trim()&&n.push(r.trim()),r=``;continue}r+=a}if(i)throw new e(`INVALID_ARGS`,`Unclosed quote in selector: ${t}`);return r.trim()&&n.push(r.trim()),n}function Ie(e,t){return e?e===t?null:e:t}function Le(e){let t=e.trim();return t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?Re(t.slice(1,-1)):t}function Re(e){let t=``,n=0;for(;n<e.length;){let r=e.charAt(n);if(r!==`\\`){t+=r,n+=1;continue}let i=e.charAt(n+1);if(!i){t+=r,n+=1;continue}let a=ze(i);if(a!==null){t+=a,n+=2;continue}if(i===`u`){let r=e.slice(n+2,n+6);if(/^[0-9a-fA-F]{4}$/.test(r)){t+=String.fromCharCode(Number.parseInt(r,16)),n+=6;continue}}t+=r,n+=1}return t}function ze(e){return Ae.get(e)??null}function Be(e){let t=Le(e).toLowerCase();return t===`true`||t!==`false`&&null}function Ve(e,t){let n=0;for(let r=t-1;r>=0&&e[r]===`\\`;--r)n+=1;return n%2==1}function He(e){return a.includes(e)}const Ue=`is requires predicate: ${a.join(`|`)}`;function We(e){let t=e.toLowerCase();return He(t)?{ok:!0,predicate:t}:i(Ue,Ge)}const Ge=`Use "is <predicate> <selector>" or "is <selector> <predicate>". visible|hidden|editable|selected|focused double as selector keys: a bare predicate token after the selector is read as the predicate, so write key=true (e.g. visible=true) inside the selector to use it as a filter instead.`;function Ke(e){if(He((e[0]??``).toLowerCase()))return e;for(let t=1;t<e.length;t+=1){let n=(e[t]??``).toLowerCase();if(He(n)&&y(e.slice(0,t).join(` `)))return[n,...e.slice(0,t),...e.slice(t+1)]}return e}function qe(e){let{predicate:t,node:n,visibility:r,expectedText:i,platform:a}=e,o=h(n),s=we(n,a),c=n.selected===!0,l=n.focused===!0,u=t===`text`?g(n):Ye(n,r,a),d=!1;switch(t){case`visible`:d=u;break;case`hidden`:d=!u;break;case`editable`:d=s;break;case`selected`:d=c;break;case`focused`:d=l;break;case`text`:d=o===(i??``);break;default:return Je(t)}let ee=t===`text`?`expected="${i??``}" actual="${o}"`:`actual=${JSON.stringify({visible:u,editable:s,selected:c,focused:l})}`;return{pass:d,actualText:o,details:ee}}function Je(e){throw Error(`Unhandled is predicate: ${String(e)}`)}function Ye(e,t,n){if(n===`android`&&e.visibleToUser===!1)return!1;if(c(e.rect))return t.isVisibleInEffectiveViewport(e);if(e.rect)return!1;if(n!==`android`&&e.hittable===!0)return!0;let r=Xe(e,t,n);return r?c(r.rect)?t.isVisibleInEffectiveViewport(r):n!==`android`&&r.hittable===!0:!1}function Xe(e,t,n){return t.findAncestor(e,e=>Ce(e,n)?e:null)}function Ze(e){let t=Ke(e),n=t[0]??``;return{predicate:n,split:x(t.slice(1),{preferTrailingValue:n===`text`})}}const Qe=`is requires a selector expression`,$e=`is text requires expected text value`;function et(e){let{predicate:t,split:n}=Ze([...e]),r=We(t);if(!r.ok)return r;if(!n)return i(Qe);let a=n.rest.join(` `).trim();return r.predicate===`text`&&!a?i($e):r.predicate!==`text`&&n.rest.length>0?i(`is ${r.predicate} does not accept trailing values`):{ok:!0,predicate:r.predicate,selectorExpression:n.selectorExpression,expectedText:a}}function tt(e){return e===`text`||e===`attrs`?{ok:!0,format:e}:i(`get only supports text or attrs`)}function nt(e){let t=e[0];if(t?.startsWith(`@`)){let n=e.slice(1).join(` `).trim();return{ok:!0,ref:t,...n?{label:n}:{}}}let n=e.join(` `).trim();return n?{ok:!0,selector:n}:i(`get requires @ref or selector expression`)}function rt(e){return e?{ok:!0,text:e}:i(`wait requires text`)}function it(e){return Array.from(new Set(e))}function at(e){return JSON.stringify(ot(e))}function ot(e){if(Array.isArray(e))return e.map(ot);if(!e||typeof e!=`object`)return e;let t=e;return Object.fromEntries(Object.keys(t).sort().map(e=>[e,ot(t[e])]))}function st(e){let t=0,n=e.length;for(;t<n&&e[t]===`-`;)t+=1;for(;n>t&&e[n-1]===`-`;)--n;return e.slice(t,n)}const ct=/^#\s*agent-device:target-v(\d+)(?:\s+(\S.*))?$/,lt=/^#\s*agent-device:targets-v(\d+)(?:\s+(\S.*))?$/,ut=4096;function dt(e){return e.normalize(`NFC`)}function ft(e){if(e===void 0)return;let t=dt(e);return t.length>0?t:void 0}function pt(e){return dt(e)}function mt(e){if(e===void 0)return;let t=dt(e).trim().replaceAll(/\s+/g,` `);return t.length>0?t:void 0}function S(e){return Buffer.byteLength(e,`utf8`)}function C(e,t){if(S(e)<=t)return e;let n=e.length;for(;n>0&&S(e.slice(0,n))>t;)--n;if(n>0){let t=e.charCodeAt(n-1);t>=55296&&t<=56319&&--n}return e.slice(0,n)}function w(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(ht),t.sibling=e.sibling,t.viewportOrder=e.viewportOrder,e.scrollRegion&&(t.scrollRegion=gt(e.scrollRegion)),e.rect&&(t.rect=_t(e.rect)),t.verification=e.verification,t}function ht(e){let t={role:e.role};return e.label!==void 0&&(t.label=e.label),t}function gt(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 _t(e){return{x:e.x,y:e.y,width:e.width,height:e.height}}function vt(e){return JSON.stringify(w(e))}function yt(e){return`# agent-device:target-v1 ${vt(e)}`}function bt(e){return JSON.stringify({source:w(e.source),destination:w(e.destination)})}function xt(e){return`# agent-device:targets-v1 ${bt(e)}`}function St(e){let t=e.trim(),n=lt.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:Ct((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function Ct(t){if(S(t)>8320)throw new e(`INVALID_ARGS`,`targets-v1 annotation exceeds the 8320-byte payload cap.`);let n;try{n=JSON.parse(t)}catch{throw new e(`INVALID_ARGS`,`targets-v1 annotation is not valid JSON.`)}if(typeof n!=`object`||!n||Array.isArray(n))throw new e(`INVALID_ARGS`,`targets-v1 annotation must be a JSON object.`);let r=n;if(r.source===void 0||r.destination===void 0)throw new e(`INVALID_ARGS`,`targets-v1 annotation requires source and destination evidence.`);return{source:T(JSON.stringify(r.source)),destination:T(JSON.stringify(r.destination))}}function wt(e){let t=e.trim();if(!t.startsWith(`#`))return{kind:`none`};let n=ct.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:T((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function T(t){if(S(t)>4096)throw new e(`INVALID_ARGS`,`target-v1 annotation exceeds the ${ut}-byte payload cap.`);let n;try{n=JSON.parse(t)}catch{throw new e(`INVALID_ARGS`,`target-v1 annotation is not valid JSON.`)}if(typeof n!=`object`||!n||Array.isArray(n))throw new e(`INVALID_ARGS`,`target-v1 annotation must be a JSON object.`);let r=n,i=Tt(r.role,`role`),a=Et(r.id,`id`),o=Dt(r.label,`label`),s=kt(r.ancestry),c=jt(r.sibling,`sibling`,0),l=jt(r.viewportOrder,`viewportOrder`,0),u=Mt(r.scrollRegion),d=Nt(r.rect),ee=Pt(r.verification);return{...a===void 0?{}:{id:a},role:i,...o===void 0?{}:{label:o},ancestry:s,sibling:c,viewportOrder:l,...u?{scrollRegion:u}:{},...d?{rect:d}:{},verification:ee}}function Tt(t,n){if(t===void 0)throw new e(`INVALID_ARGS`,`target-v1 "${n}" is required.`);if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);return Ot(pt(t),n)}function Et(t,n){if(t===void 0)return;if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);let r=ft(t);return r===void 0?void 0:Ot(r,n)}function Dt(t,n){if(t===void 0)return;if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);let r=mt(t);return r===void 0?void 0:Ot(r,n)}function Ot(t,n){if(S(t)>256)throw new e(`INVALID_ARGS`,`target-v1 "${n}" exceeds the 256-byte field cap.`);return t}function kt(t){if(t===void 0)return[];if(!Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "ancestry" must be an array.`);if(t.length>8)throw new e(`INVALID_ARGS`,`target-v1 "ancestry" exceeds the 8-entry cap.`);return t.map((e,t)=>At(e,t))}function At(t,n){if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "ancestry[${n}]" must be an object.`);let r=t,i=Tt(r.role,`ancestry[${n}].role`),a=Dt(r.label,`ancestry[${n}].label`);return{role:i,...a===void 0?{}:{label:a}}}function jt(t,n,r){if(t===void 0)return r;if(typeof t!=`number`||!Number.isSafeInteger(t)||t<0)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a non-negative integer.`);return t}function Mt(t){if(t===void 0)return;if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "scrollRegion" must be an object.`);let n=t,r=Tt(n.role,`scrollRegion.role`),i=Et(n.id,`id`),a=Dt(n.label,`scrollRegion.label`);return{role:r,...i===void 0?{}:{id:i},...a===void 0?{}:{label:a}}}function Nt(t){if(t===void 0)return;if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "rect" must be an object.`);let n=t;return{x:E(n.x,`rect.x`),y:E(n.y,`rect.y`),width:E(n.width,`rect.width`),height:E(n.height,`rect.height`)}}function E(t,n){if(typeof t!=`number`||!Number.isFinite(t))throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a finite number.`);return t}function Pt(t){if(t===`verified`||t===`unverifiable`)return t;throw new e(`INVALID_ARGS`,`target-v1 "verification" must be "verified" or "unverifiable".`)}function Ft(e){let t=pt(m(e.type??``)),n=ft(e.identifier),r=mt(e.label);return{...n===void 0?{}:{id:C(n,256)},role:C(t,256),...r===void 0?{}:{label:C(r,256)}}}function It(e,t){return e.id===t.id&&e.role===t.role&&e.label===t.label}function Lt(e,t){let n=0;for(let r of e)Ft(r).id===t&&(n+=1);return n}function Rt(e,t){if(e.id===void 0||Lt(t,e.id)<=1)return e;let{role:n,label:r}=e;return{role:n,...r===void 0?{}:{label:r}}}function zt(e,t){let n=0;for(let r of e)if(r.parentIndex===t.parentIndex){if(r.index===t.index)return n;n+=1}return 0}function Bt(e,t){return{documentOrder:e.index,sibling:zt(t,e)}}function Vt(e,t){return e.documentOrder===t.documentOrder&&e.sibling===t.sibling}function Ht(e){return{...e.id===void 0?{}:{id:e.id},role:e.role,...e.label===void 0?{}:{label:e.label}}}function Ut(e,t){return t.id===void 0?e.role===t.role&&e.label===t.label:e.id===t.id}function Wt(e,t){if(e.length<t.length)return!1;for(let[n,r]of t.entries()){let t=e[n];if(!t||t.role!==r.role||r.label!==void 0&&t.label!==r.label)return!1}return!0}function Gt(e,t){let n=[];return e.id!==t.id&&n.push(`id: recorded=${e.id??`(none)`} observed=${t.id??`(none)`}`),e.role!==t.role&&n.push(`role: recorded=${e.role} observed=${t.role}`),e.label!==t.label&&n.push(`label: recorded=${e.label??`(none)`} observed=${t.label??`(none)`}`),n}function Kt(e){return e?`${e.role}${e.label?`/${e.label}`:``}`:`(missing)`}function qt(e,t){return!t||t.role!==e.role||e.label!==void 0&&t.label!==e.label}function Jt(e,t){for(let[n,r]of e.entries()){let e=t[n];if(qt(r,e))return[`ancestry[${n}]: recorded=${Kt(r)} observed=${Kt(e)}`]}return[]}function Yt(e,t,n={}){let r=[],i=m(e.type??``),a=Xt(e,n.nodes),o=O(e.label),s=O(e.value),c=O(h(e)),l=n.action===`fill`;a&&r.push(`id=${D(a)}`),i&&o&&r.push(l?`role=${D(i)} label=${D(o)} editable=true`:`role=${D(i)} label=${D(o)}`),o&&r.push(l?`label=${D(o)} editable=true`:`label=${D(o)}`),s&&r.push(l?`value=${D(s)} editable=true`:`value=${D(s)}`),c&&c!==o&&c!==s&&r.push(l?`text=${D(c)} editable=true`:`text=${D(c)}`),i&&l&&!r.some(e=>e.includes(`editable=true`))&&r.push(`role=${D(i)} editable=true`);let u=it(r);return u.length===0&&i&&u.push(l?`role=${D(i)} editable=true`:`role=${D(i)}`),u.length===0&&g(e)&&u.push(`visible=true`),u}function Xt(e,t){let n=O(e.identifier);if(!n||!t)return n;let r=Ft(e).id;return r===void 0?n:Lt(t,r)>1?null:n}function D(e){return JSON.stringify(e)}function O(e){return e&&e.trim()||null}const Zt=[`any`,`text`,`label`,`value`,`role`,`id`],Qt=[`text`,`label`,`value`,`role`,`id`];function $t(e){let t=e?.toLowerCase();return t===`press`||t===`tap`?`click`:t}function en(e){return e===`exists`||e===`wait`||e===`get_text`||e===`get_attrs`||e===`list`}function tn(e,t,n,r={}){let i=A(n);if(!i)return{matches:[],score:0};let a=0,o=[];for(let n of e){if(r.requireRect&&!n.rect)continue;let e=nn(n,t,i);if(!(e<=0)){if(e>a){a=e,o.length=0,o.push(n);continue}e===a&&o.push(n)}}return{matches:o,score:a}}function nn(e,t,n){switch(t){case`role`:return rn(e.type,n);case`label`:return k(e.label,n);case`value`:return k(e.value,n);case`id`:return k(e.identifier,n);default:return Math.max(k(e.label,n),k(e.value,n),k(e.identifier,n))}}function k(e,t){let n=A(e??``);return n?n===t?2:+!!n.includes(t):0}function rn(e,t){let n=an(e??``);return n?n===t?2:+!!n.includes(t):0}function A(e){return e.trim().toLowerCase().replaceAll(/\s+/g,` `)}function an(e){let t=e.trim();return t?(t=(t.split(`.`).pop()??t).replaceAll(/XCUIElementType/gi,``).toLowerCase(),t):``}const on=`find requires a value`,sn=`find actions: click (default; press/tap are aliases), list, focus, fill, type, exists, wait, get text, get attrs — there is no longpress/swipe find action. Run find "<text>" list to inspect every match with its @ref without acting, then dispatch the gesture on the chosen ref, e.g. longpress @eNN.`;function cn(e,t){if(e.length===0)return{ok:!1,code:`INVALID_ARGS`,message:`find requires a locator or text`};let n=dn([...e]);return n.query?t?.findFirst&&t?.findLast?{ok:!1,code:`INVALID_ARGS`,message:`find accepts only one of --first or --last`}:{ok:!0,parsed:n}:{ok:!1,code:`INVALID_ARGS`,message:on}}const ln=[`exists`,`list`,`click`,`focus`];function un(e){return ln.includes(e)}function dn(t){let n=`any`,r=0;Qt.includes(t[0])&&(n=t[0],r=1);let i=t[r]??``,a=t.slice(r+1);if(a.length===0)return{locator:n,query:i,action:`click`};let o=$t(a[0]);if(un(o))return{locator:n,query:i,action:o};if(o===`get`)return{locator:n,query:i,action:fn(a[1])};if(o===`wait`){let e=mn(a[1]);return{locator:n,query:i,action:`wait`,timeoutMs:e??void 0}}if(o===`fill`||o===`type`){let e=a.slice(1);return{locator:n,query:i,action:o,value:e.length===0?void 0:e.join(` `)}}throw new e(`INVALID_ARGS`,`Unsupported find action: ${a[0]}`,{hint:sn})}function fn(t){let n=t?.toLowerCase();if(n===`text`)return`get_text`;if(n===`attrs`)return`get_attrs`;throw new e(`INVALID_ARGS`,`find get only supports text or attrs`)}function pn(e,t){return e!==`any`||!t.includes(`=`)&&!t.includes(`||`)?null:y(t)?t:null}function mn(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}function hn(e,t,n){return t.terms.every(t=>gn(e,t,n))}function gn(e,t,n){switch(t.key){case`id`:return j(e.identifier,String(t.value));case`role`:return j(m(e.type??``),String(t.value));case`label`:return j(e.label,String(t.value));case`value`:return j(e.value,String(t.value));case`text`:return j(h(e),String(t.value));case`appname`:return j(e.appName,String(t.value));case`windowtitle`:return j(e.windowTitle,String(t.value));case`visible`:return g(e)===!!t.value;case`hidden`:return!g(e)==!!t.value;case`editable`:return we(e,n)===!!t.value;case`selected`:return e.selected===!0==!!t.value;case`focused`:return e.focused===!0==!!t.value;case`enabled`:return e.enabled!==!1==!!t.value;case`hittable`:return e.hittable===!0==!!t.value;default:return!1}}function j(e,t){return A(e??``)===A(t)}function _n(e,t,n){let r=n.requireRect??!1,i=n.requireUnique??!0,a=[],o=null;for(let[s,c]of t.selectors.entries()){let t=wn(e,c,n.platform,r);if(a.push({selector:c.raw,matches:t.count}),!(t.count===0||!t.firstNode)){if(o??={selector:c,selectorIndex:s,matchedNodes:t.candidates},i&&t.count!==1){if(!n.disambiguateAmbiguous||!t.disambiguated||!t.tiebreak)continue;return{matchedNodes:t.candidates,firstMatch:o,resolution:{node:t.disambiguated,selector:c,selectorIndex:s,matches:t.count,diagnostics:a,disambiguation:{matchCount:t.count,tiebreak:t.tiebreak,alternatives:t.candidates.filter(e=>e!==t.disambiguated)}}}}return{matchedNodes:t.candidates,firstMatch:o,resolution:{node:t.firstNode,selector:c,selectorIndex:s,matches:t.count,diagnostics:a}}}}return{resolution:null,matchedNodes:o?.matchedNodes??[],firstMatch:o}}function vn(e,t,n){return _n(e,t,n).resolution}function yn(e,t,n){let r=n.requireRect??!1;for(let[i,a]of t.selectors.entries()){let t=e.filter(e=>r&&!e.rect?!1:hn(e,a,n.platform));if(t.length>0)return{selector:a,selectorIndex:i,matchedNodes:t}}return null}function bn(e,t,n){let r=n.requireRect??!1,i=[];for(let[a,o]of t.selectors.entries()){let t=On(e,o,n.platform,r);if(i.push({selector:o.raw,matches:t}),t>0)return{selectorIndex:a,selector:o,matches:t,diagnostics:i}}return null}const xn=`Snapshot refs expire when the UI changes. Run snapshot -i and retry with a fresh @ref.`;function Sn(e){return e.some(e=>e.matches>1)?`Add more terms to disambiguate (e.g. role=button text="Sign in"), use an @ref from snapshot -i, or use find <text> --first/--last.`:`Selector text/label values match exactly (quote multi-word values: text="Sign in"). Run snapshot -i to see current elements and refs, or use find <text> for contains matching.`}function Cn(e,t,n){if(t.length===0)return`Selector did not match: ${e}`;let r=t.map(e=>`${e.selector} -> ${e.matches}`).join(`, `);return n.unique??!0?`Selector did not resolve uniquely (${r})`:`Selector did not match (${r})`}function wn(e,t,n,r){let i=0,a=null,o=[],s={best:null,bestVisible:!1,tie:!1},c=he(e).isVisibleOnScreen;for(let l of e)r&&!l.rect||hn(l,t,n)&&(i+=1,a??=l,o.push(l),Tn(s,l,c));return{count:i,firstNode:a,disambiguated:s.tie?null:s.best,tiebreak:s.tie?null:En(o,s.best,c),candidates:o}}function Tn(e,t,n){if(!e.best){e.best=t;return}e.bestVisible||=n(e.best);let r=n(t);if(r!==e.bestVisible){r&&(e.best=t,e.bestVisible=!0,e.tie=!1);return}let i=kn(t,e.best);i.result>0?(e.best=t,e.tie=!1):i.result===0&&(e.tie=!0)}function En(e,t,n){if(!t)return null;let r=null;for(let i of e)i!==t&&(!r||Dn(i,r,n).result>0)&&(r=i);return r?Dn(t,r,n).criterion:null}function Dn(e,t,n){let r=n(e);return r===n(t)?kn(e,t):{result:r?1:-1,criterion:`visible`}}function On(e,t,n,r){let i=0;for(let a of e)r&&!a.rect||hn(a,t,n)&&(i+=1);return i}function kn(e,t){let n=e.depth??0,r=t.depth??0;if(n!==r)return{result:n>r?1:-1,criterion:`deepest`};let i=An(e),a=An(t);return i===a?{result:0,criterion:null}:{result:i<a?1:-1,criterion:`smallest-area`}}function An(e){return e.rect?e.rect.width*e.rect.height:1/0}const jn={act:{ambiguity:`reject-candidates`,requireRect:!0},actCoveredDiagnosis:{ambiguity:`first-match`,requireRect:!0},readText:{ambiguity:`disambiguate`,requireRect:!1},readUnique:{ambiguity:`fail-closed`,requireRect:!1},readAny:{ambiguity:`first-match`,requireRect:!1},wait:{ambiguity:`first-match`,requireRect:!1},findAct:{ambiguity:`reject-candidates`,requireRect:!0},readList:{ambiguity:`reject-candidates`,requireRect:!1},cropTarget:{ambiguity:`fail-closed`,requireRect:!0}};function Mn(e){return e.ambiguity===`first-match`?{requireRect:e.requireRect,requireUnique:!1}:{requireRect:e.requireRect,requireUnique:!0,disambiguateAmbiguous:e.ambiguity===`disambiguate`}}function Nn(e,t){let n=e===`is`?Ze([...t]).split:x([...t]);return n?y(n.selectorExpression)?{kind:`expression`,expression:n.selectorExpression,rest:n.rest}:{kind:`invalid`}:{kind:`not-applicable`}}function Pn(e){return{platform:e.platform,...Mn({ambiguity:e.allowDisambiguation?`disambiguate`:`fail-closed`,requireRect:e.requireRect})}}function Fn(e,t,n){let r=y(e);if(!r)return{kind:`unresolved`,reason:`parse-invalid`,matchedNodes:[]};let{resolution:i,matchedNodes:a}=_n(t,r,Pn(n));return i?{kind:`resolved`,winner:i.node,matchedNodes:a,matchCount:a.length,...i.disambiguation?{disambiguation:{tiebreak:i.disambiguation.tiebreak,matchCount:i.disambiguation.matchCount,alternatives:i.disambiguation.alternatives}}:{}}:{kind:`unresolved`,reason:a.length>0?`ambiguous`:`no-match`,matchedNodes:a}}function In(e,t,n={}){return Yt(e,t,n)}function Ln(e,t,n){let r=y(e);if(!r)return;let i=vn(t,r,Pn(n));if(i)return{node:i.node,basis:zn(i.selector)}}function Rn(e){if(!e)return;let t=y(e);if(!t)return;let n=t.selectors.flatMap(e=>e.terms.flatMap(e=>(e.key===`label`||e.key===`text`||e.key===`id`)&&typeof e.value==`string`?[e.value]:[]));if(n.length===0)return;let r=n[0];return r&&n.every(e=>e===r)?r:void 0}function zn(e){let t=new Set(e.terms.map(e=>e.key));if(t.has(`id`))return`id`;let n=t.has(`role`),r=t.has(`label`)||t.has(`text`);return n&&r?`role-label`:r||t.has(`value`)?`label`:`other`}function Bn(e,t){let n=y(e);if(!n)return e.includes(`=`)||e.includes(`||`)?null:e;let r=new Set(t.textKeys),i=t.textAliases??{};return n.selectors.length>1?Vn(n.selectors,r,i):Hn(n.selectors[0],r,new Set(t.booleanKeys),i)}function Vn(e,t,n){let r=e.map(e=>{let r=e.terms.length===1?e.terms[0]:void 0;return r&&Un(r.key,t,n)&&typeof r.value==`string`?r.value:void 0}),i=r[0];return i!==void 0&&r.every(e=>e===i)?i:null}function Hn(e,t,n,r){if(!e)return null;let i={},a=0;for(let o of e.terms){if(Un(o.key,t,r)&&typeof o.value==`string`)a+=1;else if(!Wn(o,n,`boolean`))return null;i[r[o.key]??o.key]=o.value}return a<=1&&Object.keys(i).length>0?i:null}function Un(e,t,n){return t.has(e)||n[e]!==void 0}function Wn(e,t,n){return t.has(e.key)&&typeof e.value===n}function Gn(e){let t=y(e);if(!t||t.selectors.length!==1)return null;let n=t.selectors[0];if(!n||n.terms.length!==1)return null;let r=n.terms[0];return!r||typeof r.value!=`string`||r.key!==`id`&&r.key!==`label`&&r.key!==`text`&&r.key!==`value`?null:{key:r.key,value:r.value,raw:n.raw}}function Kn(e,t){if(!t)return!1;let n=y(e);return n?n.selectors.some(e=>e.terms.some(e=>(e.key===`text`||e.key===`label`||e.key===`value`)&&typeof e.value==`string`&&e.value.includes(t))):!1}function qn(e,t){return y(e)?.selectors.some(e=>e.terms.some(e=>e.key===t))??!1}function Jn(e){return v(e).selectors.map(e=>e.raw)}function Yn(e){return y(e)!==null}function Xn(e){v(e)}function M(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}const Zn=new Set([`exists`,`present`,`appears`,`gone`,`disappears`]);function Qn(e){let t=e[0];if(t===void 0)return null;let n=M(t);if(n!==null)return{kind:`sleep`,durationMs:n};let r=M(e.at(-1));return t===`text`?$n(e,r):t===`stable`?er(e):t===`absent`?tr(e,r):t.startsWith(`@`)?{kind:`ref`,rawRef:t,timeoutMs:r}:rr(e,r)}function $n(e,t){return{kind:`text`,text:(t===null?e.slice(1).join(` `):e.slice(1,-1).join(` `)).trim(),timeoutMs:t}}function er(e){let t=e.slice(1),n=t.length>1?M(t[1]):null;return{kind:`stable`,quietMs:t.length>0?M(t[0]):null,timeoutMs:n}}function tr(e,t){let n=t===null?e.slice(1):e.slice(1,-1),r=x(n);return n.length>0&&r?.rest.length===0&&Yn(r.selectorExpression)?{kind:`absent`,selectorExpression:r.selectorExpression,timeoutMs:t}:{kind:`invalid`,reason:`absent-selector-required`,message:nr(n)}}function nr(e){let t=e.join(` `);return t.length>0?`wait absent requires one valid selector; received "${t}". Use wait absent '<selector>' [timeoutMs].`:`wait absent requires <selector> [timeoutMs].`}function rr(e,t){let n=t===null?e.slice():e.slice(0,-1),r=x(n);return r&&r.rest.length===0&&Yn(r.selectorExpression)?{kind:`selector`,selectorExpression:r.selectorExpression,timeoutMs:t}:ir(n,r)||{kind:`text`,text:(t===null?e.join(` `):e.slice(0,-1).join(` `)).trim(),timeoutMs:t}}function ir(e,t){for(let t of e){let n=je(t);if(n)return{kind:`invalid`,reason:`unknown-selector-key`,message:ar(n,e)}}return t&&t.rest.length>0?{kind:`invalid`,reason:`selector-shaped-text`,message:or(t,e)}:e.some(e=>b(e))?{kind:`invalid`,reason:`selector-shaped-text`,message:sr(e)}:null}function ar(e,t){let n=t.join(` `),r=ke(e.key)?`role=${e.key} label="${e.value}"`:`label="${e.value}"`;return`Unknown selector key "${e.key}" in "${n}". Supported: ${De.join(`, `)}. Use wait '${r}' [timeoutMs] to wait for the selector, or wait text '${n}' [timeoutMs] to wait for the literal text "${n}".`}function or(e,t){let n=t.join(` `);return`Selector ${e.selectorExpression} is followed by unexpected extra arguments: "${e.rest.join(` `)}". Selector values with spaces need quotes, e.g. label="Sign in". Use wait '<selector>' [timeoutMs], or wait text '${n}' [timeoutMs] to wait for the literal text "${n}".`}function sr(e){let t=e.join(` `),n=e.filter(e=>!b(e)),r=e.filter(e=>b(e));if(n.length>0){let e=n[0],i=Zn.has(e.toLowerCase())?` "${e}" describes a condition, not a selector key. Use the selector form: `+(e.toLowerCase()===`gone`||e.toLowerCase()===`disappears`?`wait absent '${r.join(` `)}' [timeoutMs] to wait for zero matches.`:`wait '${r.join(` `)}' [timeoutMs] to wait for it to appear.`):` "${e}" is not a recognized selector key (${De.join(`, `)}).`;return`"${t}" mixes plain word "${e}" with selector-shaped "${r.join(` `)}", so it is neither a valid selector nor safe as literal text.${i} Use wait '<selector>' [timeoutMs] for a selector, or wait text '${t}' [timeoutMs] to wait for the literal text "${t}".`}return`"${t}" looks like a selector key but is not a valid selector expression. Use wait '<selector>' [timeoutMs], e.g. wait '${e[0]}="value"' [timeoutMs], or wait text '${t}' [timeoutMs] to wait for the literal text "${t}".`}function cr(e){let t=Qn(e);return t?t.kind===`sleep`?t.durationMs:t.kind===`invalid`?null:t.timeoutMs:null}const lr=3e4,ur=24e4,dr=3e5,N={budget:{source:`none`},envelopeMs:9e4,onTimeout:`reset-daemon`},fr={budget:{source:`none`},envelopeMs:255e3,onTimeout:`reset-daemon`};function pr(e,t){if(e.envelopeMs===`unbounded`)return;let n={...e,envelopeMs:e.envelopeMs};return mr(n,t.positionals??[])??hr(n,t.flags)??n.envelopeMs}function mr(e,t){if(e.budget.source!==`positional-parser`)return;let n=e.budget.parser(t);return n===null?void 0:vr(e,n)}function hr(e,t){if(e.budget.source===`flag`)return e.budget.envelope===`widen`?_r(e,e.budget,t):e.budget.envelope===`margin`?gr(e,t):typeof t?.timeoutMs==`number`?t.timeoutMs:e.envelopeMs}function gr(e,t){let n=typeof t?.timeoutMs==`number`?vr(e,t.timeoutMs):e.envelopeMs;return typeof t?.waitMs==`number`?yr({...e,envelopeMs:n},t.waitMs):n}function _r(e,t,n){if(n?.settle!==!0)return e.envelopeMs;let r=typeof n.timeoutMs==`number`?n.timeoutMs:t.defaultBudgetMs;return typeof r==`number`?yr(e,r):e.envelopeMs}function vr(e,t){return Math.max(e.envelopeMs,t+lr)}function yr(e,t){return Math.max(e.envelopeMs,e.envelopeMs+t+lr)}const br={click:`settle-and-verify`,press:`settle-and-verify`,fill:`settle-and-verify`,longpress:`settle`,hover:`settle`,scroll:`settle`,back:`settle`};function xr(e){if(e!==void 0)return br[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 Sr(e){if(!n(e))throw TypeError(`Unknown local runtime family: ${String(e)}`);return Object.freeze({kind:`local-family`,family:e})}function Cr(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 wr(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 Tr(e,t){return F(e)===F(t)}function Er(e,t){return e.available?t():{}}function Dr(e){if(!I(e.requesterId)||!I(e.identityIncarnationId)||!kr(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 Or(e){let t=Ar(e.token);if(!t||t.length!==2)return null;let[n,r]=t;if(!I(n)||!I(r)||!kr(e.generation))return null;let i=Object.freeze({requesterId:n,requestGeneration:e.generation,identityIncarnationId:r});return Dr(i).token===e.token?i:null}function kr(e){return Number.isInteger(e)&&e>=0}function I(e){return typeof e==`string`&&e.trim().length>0}function Ar(e){try{let t=JSON.parse(e);return Array.isArray(t)?t:null}catch{return null}}function jr(e,t){let n={},r={};for(let i of t.required){let t=Mr(e.facts.operations,i);if(n[i]=t,!t.available)throw Lr(i,t);r[i]=Fr(e.operations,i)}for(let i of t.preferred){let t=Mr(e.facts.operations,i);n[i]=t,t.available&&(r[i]=Fr(e.operations,i))}for(let i of t.conditional??[]){let t=Mr(e.facts.operations,i);n[i]=t,t.available&&(r[i]=Fr(e.operations,i))}return Object.freeze({device:e.device,owner:e.owner,facts:Object.freeze(n),operations:Object.freeze(r)})}function Mr(e,t){let n=e[t];if(!Nr(n))throw P(`Runtime owner omitted the ${t} fact`);let r=Pr(n);if(r)return r;throw P(`Runtime owner returned an invalid ${t} fact`)}function Nr(e){return typeof e==`object`&&!!e&&`available`in e}function Pr(e){if(e.available===!0)return Object.freeze({available:!0});if(e.available===!1&&Ir(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 Fr(e,t){let n=e[t];if(typeof n!=`function`)throw P(`Runtime owner advertised ${t} without an implementation`);return n}function Ir(e){return e===`unsupported-platform-leaf`||e===`unsupported-device-kind`||e===`unsupported-device-backend`||e===`unsupported-device-scope`||e===`unsupported-provider-mode`||e===`owner-capability-missing`}function Lr(t,n){return new e(`UNSUPPORTED_OPERATION`,`Runtime operation ${t} is unavailable`,{reason:n.reason,hint:n.hint})}function Rr(e){return JSON.stringify({required:[...e.required].sort(),preferred:[...e.preferred].sort(),conditional:[...e.conditional??[]].sort()})}function zr(){return e=>{let t=Br(e.required,`required`),n=Br(e.preferred??[],`preferred`),r=Br(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 Br(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=zr(),Vr=L({required:[`bootTarget`]}),Hr=L({required:[`bootTargetHeadless`]}),Ur=L({required:[`ensureReady`,`listApps`]}),Wr=L({required:[`captureSnapshot`]}),Gr=L({required:[`setViewport`]}),Kr=L({required:[`focusPoint`]}),qr=L({required:[`typeText`]}),Jr=L({required:[`back`]}),Yr=L({required:[`home`]}),Xr=L({required:[`setOrientation`]}),Zr=L({required:[`setFoldPose`]}),Qr=L({required:[`tvRemote`]}),$r=L({required:[`keyboardStatus`]}),ei=L({required:[`keyboardDismiss`]}),ti=L({required:[`keyboardEnter`]}),ni=L({required:[`appSwitcher`]}),ri=L({required:[`actionButton`]}),ii=L({required:[`triggerAppEvent`]}),ai=L({required:[`setSetting`]}),oi=L({required:[`readSetting`]}),si=L({required:[`readAlert`]}),ci=L({required:[`awaitAlert`]}),li=L({required:[`acceptAlert`]}),ui=L({required:[`dismissAlert`]}),di=L({required:[`readClipboard`]}),fi=L({required:[`writeClipboard`]}),pi=L({required:[`perfFrames`]}),mi=L({required:[`perfMemorySample`]}),hi=L({required:[`perfMemorySnapshot`]}),gi=L({required:[`perfNativeCaptureStart`]}),_i=L({required:[`perfNativeCaptureReattach`,`perfNativeCaptureCleanup`]}),vi=L({required:[`perfProfileReport`]}),yi=Object.freeze([pi,mi,hi,gi,_i,vi]),R=L({required:[`tapPoint`]}),bi=L({required:[`captureSnapshot`,`tapPoint`],preferred:[`tapRef`],conditional:[`tapElementSelector`]}),xi=L({required:[`longPressPoint`]}),z=L({required:[`captureSnapshot`,`longPressPoint`]}),Si=L({required:[`hoverPoint`]}),Ci=L({required:[`captureSnapshot`,`hoverPoint`],preferred:[`hoverRef`]}),wi=L({required:[`fillPoint`]}),Ti=L({required:[`captureSnapshot`,`fillPoint`],preferred:[`fillRef`]}),Ei=Object.freeze([R,bi]),Di=Ei,Oi=Object.freeze([xi,z]),ki=Object.freeze([Si,Ci]),Ai=Object.freeze([wi,Ti]);function ji(e,t){switch(e){case`click`:case`press`:return t?{kind:`captured-tap`,use:bi}:{kind:`tap-point`,use:R};case`fill`:return t?{kind:`captured-fill`,use:Ti}:{kind:`fill-point`,use:wi};case`longpress`:return t?{kind:`captured-long-press`,use:z}:{kind:`long-press-point`,use:xi};case`hover`:return t?{kind:`captured-hover`,use:Ci}:{kind:`hover-point`,use:Si}}}const Mi=L({required:[`performGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Ni=L({required:[`performDirectionalFlingPlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Pi=L({required:[`performMultiTouchGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Fi=L({required:[`performTargetAuthoredDrag`,`captureSnapshot`],preferred:[`gestureViewport`]}),Ii=L({required:[`gestureViewport`]}),Li=L({required:[`scrollDirection`],conditional:[`captureSnapshot`]}),Ri=L({required:[`scrollDirection`,`captureSnapshot`]}),zi=Object.freeze({plan:Mi,"directional-fling":Ni,"multi-touch":Pi,"target-authored-drag":Fi}),Bi=Object.freeze([Mi,Ni,Pi,Fi]),Vi=Object.freeze([Mi]),Hi=Object.freeze([Li,Ri]);function Ui(e){return e.intent===`pan`?(`pointerCount`in e?e.pointerCount:1)===2:e.intent===`pinch`||e.intent===`rotate`||e.intent===`transform`}function Wi(e){return e.intent===`drag`?`target-authored-drag`:Ui(e)?`multi-touch`:e.intent===`fling`&&`direction`in e?`directional-fling`:`plan`}function Gi(e){let t=Wi(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=zi[e];return Object.freeze({tier:e,operation:t.required[0],use:t})}function Ki(e){return e.until===void 0?e.edge===void 0?Object.freeze({kind:`direction`,use:Li}):Object.freeze({kind:`edge`,edge:e.edge,use:Ri}):Object.freeze({kind:`until`,until:e.until,use:Ri})}const qi=L({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`]}),Ji=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),Yi=L({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`,`captureSnapshotWithoutActiveApp`]}),Xi=L({required:[`captureSnapshot`]}),Zi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),Qi=L({required:[`captureSnapshot`],preferred:[`readTextAtPoint`]}),$i=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],preferred:[`readTextAtPoint`]}),ea=L({required:[`captureSnapshot`],conditional:[`findText`]}),ta=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],conditional:[`findText`]}),na=Object.freeze([Xi,Zi]),ra=Object.freeze([Qi,$i]),ia=L({required:[`captureSnapshot`,`focusPoint`]}),aa=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`]}),oa=L({required:[`captureSnapshot`,`focusPoint`,`typeText`]}),sa=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`,`typeText`]}),ca=Object.freeze([Qi,$i,Xi,Zi,ia,aa,oa,sa]),la=Object.freeze([ea,ta]),ua=Object.freeze([Wr,qi,Ji,Yi]),V=Object.freeze({"capture-only":na,"element-text":ra,"wait-observation":la,"find-focus":Object.freeze([ia,aa]),"find-type":Object.freeze([oa,sa])});function da(e){return e===`focus`?`find-focus`:e===`type`?`find-type`:`capture-only`}function fa(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 pa(e){return e.customActions?e.hasActiveApp?Object.freeze({kind:`custom-actions-active-app`,operation:`captureSnapshotWithCustomActions`,use:qi}):Object.freeze({kind:`custom-actions-without-active-app`,operation:`captureSnapshotWithCustomActions`,use:Yi}):e.hasActiveApp?Object.freeze({kind:`active-app`,operation:`captureSnapshot`,use:Wr}):Object.freeze({kind:`without-active-app`,operation:`captureSnapshotWithoutActiveApp`,use:Ji})}const ma=L({required:[`captureScreenshot`]}),ha=L({required:[`captureScreenshot`,`captureSnapshot`]}),ga=Object.freeze([ma,ha]);function _a(e){return e.cropOn?Object.freeze({kind:`capture-with-crop-on`,use:ha}):e.overlayRefs?Object.freeze({kind:`capture-with-overlay-refs`,use:ha}):Object.freeze({kind:`capture`,use:ma})}const va=Object.freeze([Vr,Hr]),ya=Object.freeze({kind:`boot-target`,operation:`bootTarget`,use:Vr}),ba=Object.freeze({kind:`boot-target-headless`,operation:`bootTargetHeadless`,use:Hr});function xa(e){return e.headless?ba:ya}const Sa=L({required:[`ensureReady`,`appState`]}),Ca=Object.freeze([Sa]),wa=L({required:[`shutdownTarget`]}),Ta=Object.freeze([di,fi]),Ea=Object.freeze([ai,oi]),Da=[`text-size`],Oa=Object.freeze({kind:`write`,use:ai});function ka(e){let t=Aa(e?.[0]);return e?.length!==1||t===void 0?Oa:Da.includes(t)?Object.freeze({kind:`read`,setting:t,use:oi}):Oa}function Aa(e){let t=e?.trim().toLowerCase();return Da.find(e=>e===t)}const ja=Object.freeze([si,ci,li,ui]),Ma=Object.freeze([$r,ei,ti]),Na=L({required:[`deployApp`]}),Pa=L({required:[`ensureReady`,`materializeAppSource`,`deployMaterializedApp`]}),Fa=L({required:[`ensureReady`,`sendPushNotification`]}),Ia=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`]}),La=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`]}),Ra=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`clearRuntimeHints`]}),za=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`,`clearRuntimeHints`]});function Ba(e){return e.applyRuntimeHints&&e.clearRemovedRuntimeHints?Object.freeze({kind:`open-apply-and-clear-runtime-hints`,use:za}):e.applyRuntimeHints?Object.freeze({kind:`open-apply-runtime-hints`,use:La}):e.clearRemovedRuntimeHints?Object.freeze({kind:`open-clear-runtime-hints`,use:Ra}):Object.freeze({kind:`open`,use:Ia})}const Va=Object.freeze([Ia,La,Ra,za]),Ha=L({required:[`closeApplication`,`finalizeApplicationClose`]}),Ua=L({required:[`closeApplication`,`finalizeApplicationClose`,`clearRuntimeHints`]}),Wa=Object.freeze([Ha,Ua]),Ga=L({required:[`finalizeApplicationClose`]}),Ka=L({required:[`finalizeApplicationClose`,`clearRuntimeHints`]}),qa=L({required:[`prepareAppleRunner`]}),Ja=L({required:[`clearRuntimeHints`]}),Ya=L({required:[`configureProviderPortReverse`]}),Xa=Object.freeze([Ja,Ya]),U=L({required:[`appLogInspect`]}),Za=L({required:[`appLogInspect`,`appLogDoctor`]}),Qa=L({required:[`appLogInspect`,`appLogStart`]}),$a=L({required:[],preferred:[`appLogInspect`]}),eo=Object.freeze([U,Za,Qa]);function to(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:Qa});case`stop`:return Object.freeze({kind:`stop`,requiresAppSession:!1,use:U});case`doctor`:return Object.freeze({kind:`doctor`,requiresAppSession:!1,use:Za});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:Qa}):Object.freeze({kind:`clear`,requiresAppSession:!1,use:U});default:throw new e(`INVALID_ARGS`,`logs requires path, start, stop, doctor, mark, or clear`)}}const no=L({required:[`audioProbeStart`]}),ro=L({required:[`audioProbeReattach`,`audioProbeCleanup`]}),io=L({required:[`audioProbeQuery`]}),ao=Object.freeze([no,ro,io]);function oo(e){if(e.mode===`query`)return Object.freeze({kind:`query`,action:e.probeAction,use:io});switch(e.probeAction){case`start`:return Object.freeze({kind:`capture-start`,use:no});case`status`:return Object.freeze({kind:`capture-status`});case`stop`:return Object.freeze({kind:`capture-stop`})}}const so=[`probe`],co=[`start`,`status`,`stop`];function lo(t){let n=(t?.[0]??`probe`).toLowerCase();if(!so.includes(n))throw new e(`INVALID_ARGS`,`audio requires probe`);let r=(t?.[1]??`status`).toLowerCase();if(!co.includes(r))throw new e(`INVALID_ARGS`,`audio probe requires ${co.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:uo(t?.[2],{defaultValue:1e4,min:100,max:12e4,message:`audio probe duration must be an integer in range 100..120000 ms`}),bucketMs:uo(t?.[3],{defaultValue:1e3,min:100,max:1e4,message:`audio probe bucket must be an integer in range 100..10000 ms`})})}function uo(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 fo=L({required:[`networkDump`]}),po=L({required:[],preferred:[`networkDump`]}),mo=[`dump`,`log`],ho=[`summary`,`headers`,`body`,`all`];function go(t){let n=(t.action??`dump`).toLowerCase(),r=(t.include??`summary`).toLowerCase();if(!_o(n))throw new e(`INVALID_ARGS`,`network requires dump or log`);if(!vo(r))throw new e(`INVALID_ARGS`,`network --include must be summary, headers, body, or all`);return Object.freeze({action:n,include:r,use:fo})}function _o(e){return mo.some(t=>t===e)}function vo(e){return ho.some(t=>t===e)}function yo(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,bo(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=>xo(t,e)));return Object.freeze({families:a,modules:o,get:e=>xo(t,e)})}function bo(e){return Object.freeze({...e})}function xo(e,t){let n=e.get(t);if(!n)throw TypeError(`Missing platform family registration: ${t}`);return n}const So=Object.freeze({kind:`device-inventory`});function Co(e){if(typeof e!=`object`||!e)throw Ao();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`])&&To(t.use))&&!(t.kind===`device-runtime`&&W(n,[`kind`,`use`])&&Eo(t.use))&&!(t.kind===`device-runtime`&&(W(n,[`kind`,`uses`])||W(n,[`kind`,`selectUses`,`uses`])&&typeof t.selectUses==`function`)&&wo(t.uses)))throw Ao()}function wo(e){if(!Array.isArray(e)||e.length===0||!e.every(Eo))return!1;let t=e.map(Rr);return new Set(t).size===t.length}function To(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.kind===`device-inventory`&&W(Object.keys(t).sort(),[`kind`])}function Eo(e){if(typeof e!=`object`||!e)return!1;let t=e,n=[Oo(t.required),Oo(t.preferred),Oo(t.conditional??[])];if(!Do(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 Do(e){return e.every(e=>e!==null&&ko(e))}function Oo(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?e:null}function ko(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 Ao(){return TypeError(`Command platform execution must declare exactly one of none, host, inventory, or device-runtime`)}const jo=L({required:[`screenRecordingStart`]}),Mo=L({required:[`screenRecordingReattach`,`screenRecordingCleanup`]}),No=L({required:[]}),Po=L({required:[],preferred:[`screenRecordingStart`]}),Fo=Object.freeze([jo,Mo]);function Io(t){switch((t.action??``).toLowerCase()){case`start`:if(!Lo(t.scope??`app`))throw new e(`INVALID_ARGS`,`record scope must be app, device, or system`);return Object.freeze({kind:`start`,use:jo});case`stop`:return t.hasLiveHandle===!0?Object.freeze({kind:`stop-live`,use:No}):Object.freeze({kind:`stop-recovery`,use:Mo});default:throw new e(`INVALID_ARGS`,`record requires start or stop`)}}function Lo(e){return e===`app`||e===`device`||e===`system`}function Ro(e){if(Co(e),e.kind!==`device-runtime`||!(`uses`in e))throw zo();let t=e.uses.map(Rr),n=Fo.map(Rr),r=new Set(t),i=new Set(n);if(t.length!==n.length||r.size!==t.length||[...r].some(e=>!i.has(e)))throw zo()}function zo(){return TypeError(`Record runtime execution must declare exactly the uses selected by its two runtime-bearing plans`)}function Bo(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 Co(t),t}const G={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0},K={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0,selectorValidationExempt:!0},Vo=()=>!0,Ho=e=>(e.positionals?.[0]??``).toLowerCase()===`start`,Uo=e=>e.command===`test`&&(typeof e.flags?.shardAll==`number`||typeof e.flags?.shardSplit==`number`),Wo=e=>(e.positionals?.length??0)===0?{kind:`unconditional`}:void 0,Go=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`]),qo=e=>rs(e,Ko,`status`),Jo=new Set([`get`,`wait`]),Yo=e=>rs(e,Jo,`get`),Xo=e=>is(e,Ko,`status`),Zo=e=>is(e,Jo,`get`),Qo=e=>{try{return en(dn(e.positionals??[]).action)?`observes-app`:`mutates-app`}catch{return`mutates-app`}},$o=e=>is(e,new Set([`read`]),``),es=e=>ka(e.positionals).kind===`read`,ts=e=>es(e)?`observes-app`:`mutates-app`,ns=e=>es(e)?`preserve`:`may-invalidate`;function rs(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`preserve`:`may-invalidate`}function is(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`observes-app`:`mutates-app`}const q={kind:`none`},as={kind:`host`},J={recordsSessionAction:!0,recordingEffect:`mutates-app`,deviceClaimPolicy:`require-owner`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0},os={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`},ss={...N,envelopeMs:18e4},cs={...N,onTimeout:`preserve-daemon`},ls={...cs,envelopeMs:33e4},us={...N,budget:{source:`flag`,envelope:`widen`,defaultBudgetMs:1e4},onTimeout:`preserve-daemon`},ds={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}}},fs={fields:{delayMs:{defaultValue:0}}};function X(e,t){return xr(e)===void 0?t:us}function Z(e){let t=xr(e);if(t===void 0)throw Error(`Missing post-action observation descriptor support for ${e}`);return t}const ps={deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:Na},timeoutPolicy:ss,batchable:!0},ms=e=>{let t=e.flags?.snapshotCustomActions===!0||e.input?.customActions===!0;return[!0,!1].map(e=>pa({customActions:t,hasActiveApp:e}).use)},hs=e=>{let t=_s(e);if(t===void 0||!gs(t))return ca;let n=da(t);return[!0,!1].map(e=>fa({hasActiveApp:e,intent:n}).use)};function gs(e){return en(e)||e===`focus`||e===`type`}function _s(e){if(e.positionals===void 0)return;let t=cn(e.positionals,e.flags);return t.ok?t.parsed.action:void 0}const vs=[{name:`human_control`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`humanControl`},recordsSessionAction:!1,daemon:{route:`humanControl`,refFrameEffect:`preserve`,selectorValidationExempt:!0,skipSessionlessProviderDevice:Vo},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:ls,batchable:!1,platformExecution:q},{name:`lease_heartbeat`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseHeartbeat`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...G},timeoutPolicy:cs,batchable:!1,platformExecution:q},{name:`lease_release`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseRelease`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...G},timeoutPolicy:cs,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:So}},{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:Vo,...K},timeoutPolicy:N,batchable:!0,platformExecution:as},{name:`apps`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0,sessionlessLeaseAdmissionExemption:Go},platformExecution:{kind:`device-runtime`,uses:[Ur]},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:va},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:wa},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:Ca},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:yi}},{name:`logs`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},platformExecution:{kind:`device-runtime`,uses:eo},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:fo},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:ao}},{name:`replay`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,sessionKind:`replay`,skipSessionlessProviderDevice:Uo,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:Uo},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:[...Xa,Ii]}},{name:`clipboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:$o,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ta}},{name:`keyboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:Xo,daemon:{route:`session`,refFrameEffect:qo,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ma}},{name:`install`,...ps},{name:`reinstall`,...ps},{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:Pa},timeoutPolicy:ss,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:Fa},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:[ii]}},{name:`open`,deviceClaimPolicy:`acquire-session`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`,allowSessionlessDefaultDevice:Vo,saveScriptFlagOwner:!0},timeoutPolicy:{...N,budget:{source:`flag`,envelope:`margin`}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:Va}},{name:`prepare`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:{budget:{source:`flag`,envelope:`margin`},envelopeMs:27e4,onTimeout:`reset-daemon`},batchable:!1,mcpExposed:!1,platformExecution:{kind:`device-runtime`,use:qa}},{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:Wo},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Wa}},{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:ua,selectUses:ms}},{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:ua,selectUses:ms}},{name:`wait`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,targetIdentityVerification:`post-resolution`,daemon:{route:`snapshot`,refFrameEffect:`preserve`},timeoutPolicy:{...Y,budget:{source:`positional-parser`,parser:cr}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:la}},{name:`alert`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:Zo,daemon:{route:`snapshot`,refFrameEffect:Yo},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ja}},{name:`settings`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:ts,daemon:{route:`snapshot`,refFrameEffect:ns},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ea}},{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:Ho},platformExecution:{kind:`device-runtime`,uses:Fo},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:Qo,daemon:{route:`find`,refFrameEffect:`may-invalidate`},timeoutPolicy:Y,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ca,selectUses:hs}},{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:ds,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ei}},{name:`fill`,...os,frameworkTier:`core`,timeoutPolicy:X(`fill`,Y),postActionObservation:Z(`fill`),responseDataTransform:fs,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ai}},{name:`longpress`,...os,catalog:{group:`public`,key:`longPress`},frameworkTier:`extended`,timeoutPolicy:{...us,envelopeMs:21e4},postActionObservation:Z(`longpress`),batchable:!0,platformExecution:{kind:`device-runtime`,uses:Oi}},{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:ki}},{name:`press`,...os,frameworkTier:`core`,timeoutPolicy:X(`press`,Y),postActionObservation:Z(`press`),responseDataTransform:ds,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Di}},{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:[qr]}},{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:ra}},{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:na}},{name:`back`,catalog:{group:`public`},frameworkTier:`core`,...J,timeoutPolicy:X(`back`,N),postActionObservation:Z(`back`),platformExecution:{kind:`device-runtime`,uses:[Jr]}},{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:Bi}},{name:`home`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Yr]}},{name:`tv-remote`,catalog:{group:`public`,key:`tvRemote`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Qr]}},{name:`orientation`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Xr]}},{name:`fold`,catalog:{group:`public`},frameworkTier:`extended`,...J,timeoutPolicy:fr,platformExecution:{kind:`device-runtime`,uses:[Zr]}},{name:`scroll`,catalog:{group:`public`},frameworkTier:`core`,...J,timeoutPolicy:X(`scroll`,N),postActionObservation:Z(`scroll`),platformExecution:{kind:`device-runtime`,uses:Hi}},{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:Vi}},{name:`focus`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Kr]}},{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:ga}},{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:[Gr]}},{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:[ni]}},{name:`action-button`,catalog:{group:`public`,key:`actionButton`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[ri]}},{name:`install-from-source`,deviceClaimPolicy:`none`,catalog:{group:`public`,key:`installFromSource`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,platformExecution:{kind:`device-runtime`,use:Pa},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:as},{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:So}},{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:as}],ys=new Set([`public`,`local-cli`]),bs=new Set(vs.filter(e=>ys.has(Os(e))).map(e=>e.name)),Q=vs.map(e=>{let t=Bo(e);return e.name===`record`&&Ro(t),{...e,mcpExposed:Es(e),platformExecution:t}});function xs(e){return Q.filter(t=>Os(t)===e).map(e=>[ks(e),e.name])}function Ss(){return Q.filter(e=>Ds(e)).map(e=>e.name).sort()}function Cs(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 ws(){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 Ts(e){return bs.has(e)}function Es(e){return e.mcpExposed??bs.has(e.name)}function Ds(e){return e.mcpExposed&&Ts(e.name)}function Os(e){return e.catalog.group}function ks(e){return e.catalog.key??e.name}const As=new Map(Q.map(e=>[e.name,e.timeoutPolicy])),js=new Map(Q.map(e=>[e.name,e.deviceClaimPolicy])),Ms=new Map(Array.from($.values()).flatMap(e=>e.responseDataTransform?[[e.name,e.responseDataTransform]]:[]));function Ns(e){if(e!==void 0)return $.get(e)?.postActionObservation}function Ps(e){return Ns(e)!==void 0}function Fs(e){return Ns(e)===`settle-and-verify`}function Is(e){return e===void 0?N:As.get(e)??N}function Ls(e){return e===void 0?`require-owner`:js.get(e)??`require-owner`}function Rs(e){if(e!==void 0)return Ms.get(e)}function zs(e){return e===void 0?!1:$.get(e)?.recordsSessionAction??!1}function Bs(e){if(e!==void 0)return $.get(e)?.frameworkTier}function Vs(e){return $.get(e)?.targetIdentityVerification}function Hs(e){let t=$.get(e.command);if(t?.recordsSessionAction)return typeof t.recordingEffect==`function`?t.recordingEffect(e):t.recordingEffect}function Us(){return[...new Set(Array.from(Ms.values()).flatMap(e=>Object.keys(e.fields)))].sort()}const Ws={apps:{appsFilter:`user-installed`}};function Gs(e,t){if(!e||!Ts(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 Ks(e){let t=[];for(let n of e)n.daemon&&t.push({command:n.name,...n.daemon,replayScopedAction:n.recordsSessionAction});return t}function qs(e){return e.filter(e=>e.batchable).map(e=>e.name)}const Js=qs(Q),Ys=new Set([`batch`,`replay`]),Xs=[`command`,`positionals`,`input`,`flags`,`runtime`],Zs=[`platform`,`target`,`device`,`udid`,`serial`,`verbose`,`out`],Qs=`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.`,$s=new Set(Js);function ec(e){return $s.has(e)}function tc(e){return typeof e==`string`?e.trim().toLowerCase():``}function nc(e){let t=tc(e);return ec(t)?t:void 0}function rc(t,n,r=Qs){let i=nc(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 ic(t,n){if(Ys.has(t))throw new e(`INVALID_ARGS`,`Batch step ${n} cannot run ${t}.`)}export{li as $,yt as $n,a as $r,F as $t,po as A,on as An,ge as Ar,_i as At,Ya as B,Ht as Bn,se as Br,ji as Bt,Rs as C,bn as Cn,y as Cr,ti as Ct,Po as D,_n as Dn,Se as Dr,pi as Dt,Io as E,vn as En,he as Er,Xr as Et,$a as F,$t as Fn,pe as Fr,_a as Ft,La as G,Wt as Gn,re as Gr,Qr as Gt,Ka as H,Jt as Hn,ae as Hr,ai as Ht,to as I,dn as In,m as Ir,Ki as It,Ba as J,Bt as Jn,c as Jr,Or as Jt,Ra as K,Ut as Kn,d as Kr,qr as Kt,Ja as L,pn as Ln,p as Lr,fa as Lt,ro as M,cn as Mn,h as Mr,vi as Mt,lo as N,tn as Nn,de as Nr,xa as Nt,Mo as O,Sn as On,xe as Or,mi as Ot,oo as P,en as Pn,fe as Pr,Gi as Pt,ri as Q,xt as Qn,l as Qr,Cr as Qt,Ha as R,Yt as Rn,ue as Rr,ka as Rt,zs as S,xn as Sn,x as Sr,ei as St,Vs as T,yn as Tn,g as Tr,xi as Tt,Ia as U,Gt as Un,ce as Ur,wa as Ut,Ga as V,Rt as Vn,oe as Vr,oi as Vt,za as W,It as Wn,ie as Wr,R as Wt,Pa as X,Vt as Xn,f as Xr,wr as Xt,Na as Y,zt as Yn,te as Yr,Sr as Yt,Fa as Z,ut as Zn,u as Zr,jr as Zt,Ss as _,Nn as _n,De as _r,Kr as _t,ic as a,pr as an,at as ar,ni as at,Bs as b,jn as bn,b as br,Yr as bt,nc as c,Yn as cn,$e as cr,Ti as ct,Q as d,Gn as dn,tt as dr,bi as dt,Tr as en,St as er,ui as et,Cs as f,qn as fn,et as fr,di as ft,xs as g,Rn as gn,Ke as gr,da as gt,Us as h,In as hn,qe as hr,wi as ht,Js as i,ur as in,S as ir,Sa as it,go as j,sn as jn,ve as jr,gi as jt,yo as k,Zt as kn,Ce as kr,hi as kt,Ks as l,Bn as ln,Qe as lr,Ci as lt,Fs as m,Xn as mn,We as mr,L as mt,Xs as n,P as nn,vt as nr,ci as nt,tc as o,Qn as on,st as or,Ur as ot,Ps as p,Kn as pn,rt as pr,fi as pt,qa as q,Ft as qn,ee as qr,Gr as qt,Zs as r,dr as rn,C as rr,ii as rt,rc as s,M as sn,it as sr,Jr as st,Qs as t,Er as tn,wt as tr,si as tt,Gs as u,Jn as un,nt as ur,z as ut,ws as v,Fn as vn,je as vr,Zr as vt,Is as w,Cn as wn,we as wr,$r as wt,Hs as x,Mn as xn,v as xr,Si as xt,Ls as y,Ln as yn,ke as yr,Ii as yt,Ua as z,O as zn,le as zr,pa as zt};
|
|
@@ -131,8 +131,9 @@ declare function defaultHintForCode(code: string): string | undefined;
|
|
|
131
131
|
* The daemon renders it; it never re-derives degradation from node shapes.
|
|
132
132
|
*
|
|
133
133
|
* Defined here (the foundational snapshot type module) rather than in
|
|
134
|
-
* snapshot-quality
|
|
135
|
-
*
|
|
134
|
+
* capture-kit's snapshot-quality-verdict.ts so SnapshotNode can reference it without a cyclic
|
|
135
|
+
* import. Ownership splits three ways: this module owns the vocabularies below, capture-kit parses
|
|
136
|
+
* an untrusted runner payload into them, and contracts re-hydrates a verdict this repo published.
|
|
136
137
|
*/
|
|
137
138
|
/**
|
|
138
139
|
* Which capture STRATEGY produced a snapshot, within one platform's plan —
|
|
@@ -148,8 +149,19 @@ type SnapshotQualityTiming = {
|
|
|
148
149
|
acquisitionMs: number;
|
|
149
150
|
presentationMs: number;
|
|
150
151
|
};
|
|
152
|
+
/**
|
|
153
|
+
* The verdict states a capture plan may stamp. This tuple is the ONE declaration of that
|
|
154
|
+
* vocabulary, and `SnapshotQualityVerdict['state']` is its projection; readers hold exhaustive maps
|
|
155
|
+
* over the union instead of importing this module, because the eager-closure gate freezes their
|
|
156
|
+
* loading shape (#2872). This tuple and the Apple runner's `SnapshotQualityState.allCases` are each
|
|
157
|
+
* pinned as a set to `contracts/fixtures/ios-snapshot-quality-states.json`, so a state one side
|
|
158
|
+
* renames, adds, or deletes without the other goes red there instead of arriving as a verdict the
|
|
159
|
+
* host cannot name — which reads as verdict-absent and drops the disclosure with it.
|
|
160
|
+
*/
|
|
161
|
+
declare const SNAPSHOT_QUALITY_STATES: readonly ['healthy', 'recovered', 'sparse'];
|
|
162
|
+
type SnapshotQualityState = (typeof SNAPSHOT_QUALITY_STATES)[number];
|
|
151
163
|
type SnapshotQualityVerdict = {
|
|
152
|
-
state:
|
|
164
|
+
state: SnapshotQualityState;
|
|
153
165
|
backend: SnapshotCaptureBackend;
|
|
154
166
|
reason?: string;
|
|
155
167
|
reasonCode?: 'ax-rejected' | 'sparse-tree' | 'budget' | 'no-nodes' | 'capture-failed' | 'presentation-failed' | 'deferred' | 'requested-backend';
|
|
@@ -243,15 +255,33 @@ type RawSnapshotNode = {
|
|
|
243
255
|
subrole?: string;
|
|
244
256
|
label?: string;
|
|
245
257
|
value?: string;
|
|
258
|
+
/**
|
|
259
|
+
* Android content description when it is not already the `label`. An Android node is
|
|
260
|
+
* labelled by its text and falls back to the content description only when it has none,
|
|
261
|
+
* so an accessibility label the app set beside visible text (a labelled text view, a
|
|
262
|
+
* filled or hinted field) is carried here for consumers that want the accessible name.
|
|
263
|
+
*/
|
|
264
|
+
contentDescription?: string;
|
|
246
265
|
identifier?: string;
|
|
247
266
|
rect?: Rect;
|
|
248
267
|
enabled?: boolean;
|
|
249
268
|
selected?: boolean;
|
|
269
|
+
/** Checked state of a checkable control (switch, checkbox, radio); absent means not checkable or unavailable. */
|
|
270
|
+
checked?: boolean;
|
|
250
271
|
focused?: boolean;
|
|
272
|
+
/** Accessibility heading flag an app set on the node; absent means not a heading or unavailable. */
|
|
273
|
+
heading?: boolean;
|
|
274
|
+
/** Localized role description an app set beside the native class, verbatim (`Tab`, `Tab List`, `Link`). */
|
|
275
|
+
roleDescription?: string;
|
|
251
276
|
/** Native accessibility facts; absent means unavailable, not false. */
|
|
252
277
|
editable?: boolean;
|
|
253
278
|
password?: boolean;
|
|
254
279
|
hintShowing?: boolean;
|
|
280
|
+
/**
|
|
281
|
+
* Placeholder text of a text field (the Android hint), whether or not the field is showing it.
|
|
282
|
+
* Absent when the field has none or the producer did not read it.
|
|
283
|
+
*/
|
|
284
|
+
placeholder?: string;
|
|
255
285
|
/** Accessibility selection offsets, never a character count or proof of value equality. */
|
|
256
286
|
selectionStart?: number;
|
|
257
287
|
selectionEnd?: number;
|
|
@@ -392,13 +422,22 @@ type SnapshotStateProvenance = OptionalProducerProvenance<SnapshotProvenance> |
|
|
|
392
422
|
declare const IOS_TARGET_ACTIVATION_REASONS: readonly ['bundle_changed', 'stale_target', 'missing_after_wait', 'interaction_foreground_guard'];
|
|
393
423
|
type IosTargetActivationReason = (typeof IOS_TARGET_ACTIVATION_REASONS)[number];
|
|
394
424
|
/**
|
|
395
|
-
*
|
|
396
|
-
* notRunning 1, suspended 2, plain background 3 — the SDK declares suspended on
|
|
397
|
-
* only.
|
|
398
|
-
*
|
|
399
|
-
*
|
|
425
|
+
* How XCTest reports an app running (`XCUIApplication.State`), in the SDK's raw order: unknown 0,
|
|
426
|
+
* notRunning 1, suspended 2, plain background 3, foreground 4 — the SDK declares suspended on
|
|
427
|
+
* non-macOS platforms only. This is the one declaration of those names; the `appState` runner
|
|
428
|
+
* command answers the session app's state with them, and `RunnerTests+ApplicationStateRawValueTests`
|
|
429
|
+
* ties them to the SDK enum. The `appState` path names states, so nothing here assigns a raw value;
|
|
430
|
+
* only the activation decoder's raw table does.
|
|
400
431
|
*/
|
|
401
|
-
declare const
|
|
432
|
+
declare const APPLE_APPLICATION_STATES: readonly ['unknown', 'notRunning', 'runningBackgroundSuspended', 'runningBackground', 'runningForeground'];
|
|
433
|
+
type AppleApplicationState = (typeof APPLE_APPLICATION_STATES)[number];
|
|
434
|
+
/**
|
|
435
|
+
* States an activation could have been needed for: every Apple state except the foreground one,
|
|
436
|
+
* which the runner skips `activate()` in and therefore stamps no fact about. Derived from the full
|
|
437
|
+
* list so the two cannot drift, and in the SDK's raw order — a state added to the full list lands
|
|
438
|
+
* here and must then be pinned natively before the decoder tie accepts it.
|
|
439
|
+
*/
|
|
440
|
+
declare const IOS_TARGET_ACTIVATION_PRIOR_STATES: readonly ("notRunning" | "runningBackground" | "runningBackgroundSuspended" | "unknown")[];
|
|
402
441
|
type IosTargetActivationPriorState = (typeof IOS_TARGET_ACTIVATION_PRIOR_STATES)[number];
|
|
403
442
|
/**
|
|
404
443
|
* Foreground repair the Apple runner performed while serving one command (#2682). `priorState` is
|
|
@@ -447,14 +486,22 @@ type SnapshotState = {
|
|
|
447
486
|
* the foreground instead (#2682). Consumers that surface this tree disclose the repair.
|
|
448
487
|
*/
|
|
449
488
|
targetActivation?: IosTargetActivation;
|
|
450
|
-
/**
|
|
451
|
-
|
|
489
|
+
/** What post-gesture stabilization proved about the gesture before this capture. */
|
|
490
|
+
postGestureOutcome?: PostGestureOutcome;
|
|
452
491
|
} & SnapshotStateProvenance;
|
|
453
492
|
/** The gesture a post-gesture outcome fact names: the command and its positionals. */
|
|
454
493
|
type PostGestureAction = {
|
|
455
494
|
action: string;
|
|
456
495
|
positionals: string[];
|
|
457
496
|
};
|
|
497
|
+
/**
|
|
498
|
+
* `unsettled`: the surface was still changing when the stabilization deadline expired.
|
|
499
|
+
* `no-effect`: the settled surface still matches the pre-gesture tree (#1600).
|
|
500
|
+
*/
|
|
501
|
+
type PostGestureOutcome = {
|
|
502
|
+
kind: 'unsettled' | 'no-effect';
|
|
503
|
+
gesture: PostGestureAction;
|
|
504
|
+
};
|
|
458
505
|
type SnapshotUnchanged = {
|
|
459
506
|
ageMs: number;
|
|
460
507
|
nodeCount: number;
|
|
@@ -619,4 +666,4 @@ type JsonRpcRequestEnvelope<TParams = unknown> = {
|
|
|
619
666
|
params?: TParams;
|
|
620
667
|
};
|
|
621
668
|
//#endregion
|
|
622
|
-
export {
|
|
669
|
+
export { Rect as A, SnapshotVisibility as B, Platform as C, IosTargetActivation as D, AppleApplicationState as E, SnapshotOptions as F, DaemonError as G, AppError as H, SnapshotProvenance as I, NormalizedError as J, ErrorCause as K, SnapshotQualityVerdict as L, SnapshotCommandOptionFields as M, SnapshotKeyboardBandFact as N, Point as O, SnapshotNode as P, normalizeError as Q, SnapshotState as R, DeviceTarget as S, PublicPlatform as T, AppErrorCode as U, centerOfRect as V, AppErrorDetails as W, isAgentDeviceError as X, defaultHintForCode as Y, normalizeAgentDeviceError as Z, SessionIsolationMode as _, DaemonRequest as a, DeviceInfo as b, DaemonServerMode as c, JsonRpcRequestEnvelope as d, LeaseBackend as f, ResponseLevel as g, ResponseCost as h, DaemonLockPolicy as i, ScreenshotOverlayRef as j, RawSnapshotNode as k, DaemonTransportPreference as l, NetworkIncludeMode as m, DaemonArtifactType as n, DaemonResponse as o, LocalInstallSource as p, KnownAppErrorCode as q, DaemonInstallSource as r, DaemonResponseData as s, DaemonArtifact as t, JsonRpcId as u, SessionRuntimeHints as v, PlatformSelector as w, DeviceKind as x, AppleOS as y, SnapshotUnchanged as z };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";const t=/(token|secret|password|authorization|cookie|api[_-]?key|access[_-]?key|private[_-]?key|user[_-]?code|device[_-]?code|refresh[_-]?credential)/i,n=/\b(?:bearer\s+[a-z0-9._-]+|adc_(?:agent|live|refresh|cli)_[a-z0-9._-]+)\b/gi,r=/\b([a-z0-9_-]*(?:api[_-]?key|token|secret|password|user[_-]?code|device[_-]?code|refresh[_-]?credential)[a-z0-9_-]*)(\s*[=:]\s*)("[^"]*"|'[^']*'|\S+)/gi,i=/https?:\/\/[^\s"'<>]+/gi;function a(e){return s(e,new WeakSet)}function o(e){if(!e||typeof e!=`object`)return;let t=e;if(typeof t.message==`string`&&t.message.length!==0)return a({message:t.message,...typeof t.code==`string`&&t.code.length>0?{code:t.code}:{}})}function s(e,n,r){if(e==null)return e;if(typeof e==`string`)return c(e,r);if(typeof e!=`object`)return e;if(n.has(e))return`[Circular]`;if(n.add(e),Array.isArray(e))return e.map(e=>s(e,n));let i={};for(let[r,a]of Object.entries(e)){if(t.test(r)){i[r]=`[REDACTED]`;continue}i[r]=s(a,n,r)}return i}function c(e,i){let a=e.trim();if(!a)return l(e);if(i&&t.test(i))return`[REDACTED]`;let o=u(a);return o=o.replace(n,`[REDACTED]`),o=o.replace(r,(e,t,n,r,i,a)=>f({key:t,separator:n,rawValue:r,offset:i,input:a})||d(r)?e:`${t}${n}[REDACTED]`),l(o)}function l(e){return e.length<=400?e:`${e.slice(0,386)}...<truncated>`}function u(e){return e.replace(i,e=>p(e)??e)}function d(e){return/^adc_(?:agent|live|refresh|cli)_\.\.\.$/i.test(e)}function f(e){if(e.key.toLowerCase()!==`token`||!e.separator.includes(`:`))return!1;try{return new URL(e.rawValue).pathname.replace(/\/+$/,``)===`/api-keys`&&/(?:^|\b)(?:service\/)?api\s+$/i.test(e.input.slice(0,e.offset))}catch{return!1}}function p(e){try{let t=new URL(e);return t.search&&=`?REDACTED`,(t.username||t.password)&&(t.username=`REDACTED`,t.password=`REDACTED`),t.toString()}catch{return null}}var m=e({AppError:()=>b,KNOWN_APP_ERROR_CODES:()=>h,asAppError:()=>
|
|
2
|
-
`)){let e=t.trim();if(!e||re.some(t=>t.test(e)))continue;let n=e.replace(ie,``).trim();if(n)return n.length>200?`${n.slice(0,200)}...`:n}return null}function
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";const t=/(token|secret|password|authorization|cookie|api[_-]?key|access[_-]?key|private[_-]?key|user[_-]?code|device[_-]?code|refresh[_-]?credential)/i,n=/\b(?:bearer\s+[a-z0-9._-]+|adc_(?:agent|live|refresh|cli)_[a-z0-9._-]+)\b/gi,r=/\b([a-z0-9_-]*(?:api[_-]?key|token|secret|password|user[_-]?code|device[_-]?code|refresh[_-]?credential)[a-z0-9_-]*)(\s*[=:]\s*)("[^"]*"|'[^']*'|\S+)/gi,i=/https?:\/\/[^\s"'<>]+/gi;function a(e){return s(e,new WeakSet)}function o(e){if(!e||typeof e!=`object`)return;let t=e;if(typeof t.message==`string`&&t.message.length!==0)return a({message:t.message,...typeof t.code==`string`&&t.code.length>0?{code:t.code}:{}})}function s(e,n,r){if(e==null)return e;if(typeof e==`string`)return c(e,r);if(typeof e!=`object`)return e;if(n.has(e))return`[Circular]`;if(n.add(e),Array.isArray(e))return e.map(e=>s(e,n));let i={};for(let[r,a]of Object.entries(e)){if(t.test(r)){i[r]=`[REDACTED]`;continue}i[r]=s(a,n,r)}return i}function c(e,i){let a=e.trim();if(!a)return l(e);if(i&&t.test(i))return`[REDACTED]`;let o=u(a);return o=o.replace(n,`[REDACTED]`),o=o.replace(r,(e,t,n,r,i,a)=>f({key:t,separator:n,rawValue:r,offset:i,input:a})||d(r)?e:`${t}${n}[REDACTED]`),l(o)}function l(e){return e.length<=400?e:`${e.slice(0,386)}...<truncated>`}function u(e){return e.replace(i,e=>p(e)??e)}function d(e){return/^adc_(?:agent|live|refresh|cli)_\.\.\.$/i.test(e)}function f(e){if(e.key.toLowerCase()!==`token`||!e.separator.includes(`:`))return!1;try{return new URL(e.rawValue).pathname.replace(/\/+$/,``)===`/api-keys`&&/(?:^|\b)(?:service\/)?api\s+$/i.test(e.input.slice(0,e.offset))}catch{return!1}}function p(e){try{let t=new URL(e);return t.search&&=`?REDACTED`,(t.username||t.password)&&(t.username=`REDACTED`,t.password=`REDACTED`),t.toString()}catch{return null}}var m=e({AppError:()=>b,KNOWN_APP_ERROR_CODES:()=>h,asAppError:()=>k,createRequestCanceledError:()=>w,defaultHintForCode:()=>L,errorMessage:()=>D,isAgentDeviceError:()=>A,isRequestCanceledDetails:()=>T,isRequestCanceledError:()=>E,normalizeAgentDeviceError:()=>j,normalizeError:()=>M,readDiagnosticsRecordRef:()=>F,readElementMatchCandidateRefs:()=>v,readErrorCandidateViews:()=>_,retriableForErrorCode:()=>I,summarizeCommandAttemptFailures:()=>O,throwDaemonError:()=>x,toAppErrorCode:()=>g});const h=[`INVALID_ARGS`,`DEVICE_NOT_FOUND`,`DEVICE_IN_USE`,`TOOL_MISSING`,`APP_NOT_INSTALLED`,`UNSUPPORTED_PLATFORM`,`UNSUPPORTED_OPERATION`,`NOT_IMPLEMENTED`,`COMMAND_FAILED`,`SESSION_NOT_FOUND`,`UNAUTHORIZED`,`AMBIGUOUS_MATCH`,`REPLAY_DIVERGENCE`,`REPAIR_SESSION_EXPIRED`,`REPAIR_COMMIT_FAILED`,`UNKNOWN`];function g(e,t=`COMMAND_FAILED`){return typeof e==`string`&&e.length>0?e:t}function _(e){let t=y(e?.candidates),n=[];if(t.length>0){let r=typeof e?.matches==`number`?e.matches:t.length,i=typeof e?.refsGeneration==`number`?e.refsGeneration:void 0;n.push({kind:`element-match`,candidates:t,matches:r,...i===void 0?{}:{refsGeneration:i}})}let r=ee(e?.devices);return r.length>0&&n.push({kind:`device`,devices:r}),n}function v(e){return y(e?.candidates).flatMap(e=>{let t=/^@(e\d+)(?:~s\d+)?(?:\s|$)/.exec(e);return t?.[1]?[t[1]]:[]})}function y(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function ee(e){return Array.isArray(e)?e.filter(e=>typeof e==`object`&&!!e&&typeof e.id==`string`&&typeof e.name==`string`):[]}var b=class extends Error{code;details;cause;constructor(e,t,n,r){super(t),this.code=e,this.details=n,this.cause=r}};function x(e){throw new b(g(e.code),e.message,{...e.details??{},hint:e.hint,diagnosticId:e.diagnosticId,logPath:e.logPath,logPathUnavailable:e.logPathUnavailable,diagnosticsRecord:e.diagnosticsRecord,retriable:e.retriable,supportedOn:e.supportedOn},e.cause)}const S=`request_canceled`,C=`request canceled`;function w(e,t){return new b(`COMMAND_FAILED`,C,{hint:`The request was canceled intentionally (explicit cancel or client disconnect) — no retry is needed unless the cancellation was unintended.`,...e,reason:S},t)}function T(e){return e?.reason===S}function E(e){return!(e instanceof b)||e.code!==`COMMAND_FAILED`?!1:T(e.details)?!0:e.message===C}function D(e){return e instanceof Error?e.message:String(e)}function O(e){return e.map(e=>({args:e.args.join(` `),exitCode:e.exitCode,stderr:e.stderr.slice(0,400)}))}function k(e,t=`UNKNOWN`){return e instanceof b?e:e instanceof Error?new b(t,e.message,void 0,e):new b(t,`Unknown error`,{err:e})}function A(e){return e instanceof b}function j(e,t={}){return M(e,t)}function M(e,t={}){let n=k(e),r=n.details?a(n.details):void 0,i=P(r,`diagnosticId`)??t.diagnosticId,s=P(r,`logPath`)??t.logPath,c=P(r,`logPathUnavailable`),l=F(r?.diagnosticsRecord)??t.diagnosticsRecord,u=P(r,`hint`)??L(n.code),d=ae(r,`retriable`)??I(n.code),f=P(r,`supportedOn`),p=se(r),m=ne(n.code,n.message,r),h=o(n.cause);return{code:n.code,message:m,...h===void 0?{}:{cause:h},hint:u,diagnosticId:i,logPath:s,...c===void 0?{}:{logPathUnavailable:c},...l===void 0?{}:{diagnosticsRecord:l},...d===void 0?{}:{retriable:d},...f===void 0?{}:{supportedOn:f},details:p}}const te=/^\S+ exited with code -?\d+$/;function ne(e,t,n){if(e!==`COMMAND_FAILED`||n?.processExitError!==!0)return t;let r=N(typeof n?.stderr==`string`?n.stderr:``);return r?te.test(t)?r:t.includes(r)?t:`${t}: ${r}`:t}const re=[/^an error was encountered processing the command/i,/^underlying error\b/i,/^simulator device failed to complete the requested operation/i],ie=/^(?:(?:adb|xcrun|simctl):\s*)?(?:error:\s*)?/i;function N(e){for(let t of e.split(`
|
|
2
|
+
`)){let e=t.trim();if(!e||re.some(t=>t.test(e)))continue;let n=e.replace(ie,``).trim();if(n)return n.length>200?`${n.slice(0,200)}...`:n}return null}function P(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function F(e){if(!e||typeof e!=`object`)return;let{session:t,requestId:n}=e;if(typeof t==`string`&&typeof n==`string`&&t.length!==0&&n.length!==0)return{session:t,requestId:n}}function ae(e,t){let n=e?.[t];return typeof n==`boolean`?n:void 0}const oe=[`startupRuleMatched`,`startupHostDeadlineHit`];function se(e){if(!e)return;let t={...e};for(let e of oe)delete t[e];return delete t.hint,delete t.diagnosticId,delete t.logPath,delete t.logPathUnavailable,delete t.diagnosticsRecord,delete t.retriable,delete t.supportedOn,Object.keys(t).length>0?t:void 0}const ce={DEVICE_IN_USE:!0};function le(e){return h.includes(e)}function I(e){return le(e)?ce[e]:void 0}function L(e){switch(e){case`INVALID_ARGS`:return`Check command arguments and run --help for usage examples.`;case`SESSION_NOT_FOUND`:return`Run open first or pass an explicit device selector.`;case`TOOL_MISSING`:return`Install required platform tooling and ensure it is available in PATH.`;case`DEVICE_NOT_FOUND`:return`Verify the target device is booted/connected and selectors match.`;case`APP_NOT_INSTALLED`:return`Run apps to discover the exact installed package or bundle id, or install the app before open.`;case`UNSUPPORTED_OPERATION`:return`This command is not available for the selected platform/device.`;case`UNSUPPORTED_PLATFORM`:return`This platform is not supported for the requested operation; run devices to inspect available targets.`;case`AMBIGUOUS_MATCH`:return`Multiple candidates matched. Narrow the query or pass an exact identifier.`;case`DEVICE_IN_USE`:return`The device is busy with another agent-device request; retry once it frees up.`;case`REPLAY_DIVERGENCE`:return`Read details.divergence (screen/suggestions) for repair context, or rerun with --json for the full report.`;case`REPAIR_SESSION_EXPIRED`:return`The --save-script repair session was reaped before it was finalized; re-run replay <script> --save-script from the start.`;case`REPAIR_COMMIT_FAILED`:return`The repair transaction completed, but committing its healed script failed at teardown (no-clobber refusal or a filesystem error); inspect the target path/permissions, then re-run replay <script> --save-script to retry.`;case`NOT_IMPLEMENTED`:return`This command is part of the planned API but is not implemented yet.`;case`COMMAND_FAILED`:return`Retry with --debug and inspect diagnostics log for details.`;case`UNAUTHORIZED`:return`Refresh daemon metadata and retry the command.`;case`UNKNOWN`:return`Unexpected internal error. Retry with --debug and report the diagnostics log if it persists.`;default:return`Retry with --debug and inspect diagnostics log for details.`}}const R={interactiveOnly:`snapshotInteractiveOnly`,depth:`snapshotDepth`,scope:`snapshotScope`,raw:`snapshotRaw`,customActions:`snapshotCustomActions`,forceFull:`snapshotForceFull`,includeHiddenContentHints:`snapshotIncludeHiddenContentHints`,preferredBackend:`snapshotPreferredBackend`},ue=[`interactiveOnly`,`depth`,`scope`,`raw`,`customActions`,`forceFull`],de=[`interactiveOnly`,`preferredBackend`,`depth`,`scope`,`raw`,`customActions`,`includeHiddenContentHints`],fe=[`depth`,`interactiveOnly`,`raw`,`scope`,`customActions`];function z(e,t){return Object.fromEntries(t.map(t=>[t,e?.[R[t]]]))}function B(e,t){return Object.fromEntries(t.flatMap(t=>{let n=e?.[t];return n===void 0?[]:[[R[t],n]]}))}function V(e){if(e===void 0||e.backend===void 0)return{};switch(e.backend){case`xctest`:return{backend:e.backend,producer:e.producer};case`android`:return{backend:e.backend,producer:e.producer};case`harmonyos-arkui`:return{backend:e.backend,producer:e.producer};case`macos-helper`:return{backend:e.backend,producer:e.producer};case`linux-atspi`:return{backend:e.backend,producer:e.producer};case`web`:return{backend:e.backend,producer:e.producer}}}function pe(e){return e===`xctest`||e===`android`||e===`harmonyos-arkui`||e===`macos-helper`||e===`linux-atspi`||e===`web`}function me(e){return e===void 0||e===`xctest`||e===`android`||e===`harmonyos-arkui`}const he=[`bundle_changed`,`stale_target`,`missing_after_wait`,`interaction_foreground_guard`];function ge(e){return typeof e==`string`&&he.includes(e)}const H=[`unknown`,`notRunning`,`runningBackgroundSuspended`,`runningBackground`,`runningForeground`];Object.freeze(H.filter(e=>e!==`runningForeground`));function _e(e){return typeof e==`string`&&H.includes(e)}function ve(e,t){return t.postGestureOutcome??=e.postGestureOutcome,t}function ye(e){return e.map((e,t)=>({...e,ref:e.ref??`e${t+1}`}))}const be=/^~s(\d+)$/,xe=`Refs look like @e12, optionally pinned to the snapshot generation that minted them: @e12~s3 (the ref, then "~s" and the refsGeneration reported by the issuing snapshot/find response).`;function U(e){let t=e.trim(),n=t.indexOf(`~`);if(n===-1)return{base:t};let r=be.exec(t.slice(n));return!r||n===0?null:{base:t.slice(0,n),generation:Number(r[1])}}function Se(e){let t=U(e);if(!t)return null;let n=t.base;return n.startsWith(`@`)?n.slice(1)||null:n.startsWith(`e`)?n:null}function Ce(e,t){return e.find(e=>e.ref===t)??null}function we(e){return JSON.stringify({interactiveOnly:e?.interactiveOnly===!0,depth:typeof e?.depth==`number`?e.depth:null,scope:e?.scope?.trim()||null,raw:e?.raw===!0,customActions:e?.customActions===!0})}function Te(e){if(e)return z(e,fe)}function Ee(e){return{x:Math.round(e.x+e.width/2),y:Math.round(e.y+e.height/2)}}const W=[`ios`,`android`,`harmonyos`];function De(e){return W.some(t=>t===e)}const Oe=[`summary`,`headers`,`body`,`all`],ke=[`digest`,`default`,`full`];function Ae(e){return e!==void 0&&e!=="default"}function G(e,t,n,r){return{ok:!1,error:{code:e,message:t,...r?.hint?{hint:r.hint}:{},...r?.retriable===void 0?{}:{retriable:r.retriable},...n?{details:n}:{}}}}const K=`No active session. Run open first.`;function je(){return G(`SESSION_NOT_FOUND`,K)}function q(e){return{parse(t){return e(t,`$`)}}}function J(e,t){throw Error(`${e}: ${t}`)}function Y(e,t){return(!e||typeof e!=`object`||Array.isArray(e))&&J(t,`Expected an object`),e}function X(e,t){return typeof e!=`string`&&J(t,`Expected a string`),e}function Me(e,t){return Number.isInteger(e)||J(t,`Expected an integer`),e}function Ne(e,t){return Array.isArray(e)||J(t,`Expected an array`),e}function Z(e,t,n){let r=e[t];return r===void 0?void 0:X(r,`${n}.${t}`)}function Pe(e,t,n){let r=e[t];if(r!==void 0)return Ne(r,`${n}.${t}`).map((e,r)=>X(e,`${n}.${t}[${String(r)}]`))}function Fe(e,t,n){let r=e[t];return r===void 0?void 0:Me(r,`${n}.${t}`)}function Q(e,t,n){let r=e[t];return r===void 0?void 0:Y(r,`${n}.${t}`)}function Ie(e,t,n,r){let i=e[t];if(i!==void 0)return(typeof i!=`string`||!n.includes(i))&&J(`${r}.${t}`,`Expected one of: ${n.join(`, `)}`),i}const Le=q((e,t)=>{let n=Y(e,t);return{platform:Ie(n,`platform`,W,t),metroHost:Z(n,`metroHost`,t),metroPort:Fe(n,`metroPort`,t),bundleUrl:Z(n,`bundleUrl`,t),launchUrl:Z(n,`launchUrl`,t)}});function Re(e,t){let n=e.id;return n==null||typeof n!=`string`&&typeof n!=`number`&&J(`${t}.id`,`Expected a string, number, or null`),n}const $=q((e,t)=>{let n=Y(e,t);return{jsonrpc:Z(n,`jsonrpc`,t),id:Re(n,t),method:Z(n,`method`,t),params:n.params}}),ze=q((e,t)=>{let n=Y(e,t);return{token:Z(n,`token`,t),session:Z(n,`session`,t),command:Z(n,`command`,t),positionals:Pe(n,`positionals`,t),input:Q(n,`input`,t),flags:Q(n,`flags`,t),runtime:Q(n,`runtime`,t),meta:Q(n,`meta`,t)}});export{b as A,M as B,Se as C,V as D,Te as E,m as F,O as G,v as H,A as I,a as J,x as K,T as L,w as M,L as N,U as O,D as P,E as R,pe as S,z as T,_ as U,F as V,I as W,o as Y,Ee as _,Le as a,_e as b,De as c,H as d,xe as f,we as g,ye as h,ze as i,k as j,me as k,$ as l,ue as m,K as n,G as o,de as p,g as q,ke as r,Ae as s,Oe as t,je as u,Ce as v,B as w,ge as x,ve as y,j as z};
|