agent-device 0.21.23 → 0.21.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.23.apk → agent-device-android-ime-helper-0.21.25.apk} +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.25.apk.sha256 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.23.manifest.json → agent-device-android-ime-helper-0.21.25.manifest.json} +4 -4
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.manifest.json +16 -0
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/SnapshotTraversal.swift +12 -6
- package/apple/macos-helper/Tests/AgentDeviceMacOSHelperTests/RectResponseTests.swift +21 -0
- package/apple/snapshot-bridge/README.md +9 -7
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +159 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerHttpRequestFraming.swift +139 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerListenerPeer.swift +41 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerListenerToken.swift +25 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandDispatch.swift +56 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +14 -5
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Environment.swift +18 -11
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +8 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +12 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +25 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCaptureTarget.swift +1 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotExecution.swift +29 -5
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +0 -3
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +35 -13
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryConfirmation.swift +59 -26
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +19 -5
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +50 -106
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +142 -54
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TypeExecution.swift +4 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +21 -19
- package/dist/src/absence-observation-errors.js +1 -0
- package/dist/src/adapter.js +1 -1
- package/dist/src/adb-executor.js +2 -2
- package/dist/src/adb-failure.js +2 -2
- package/dist/src/adb.js +1 -1
- package/dist/src/agent-browser-lifecycle.js +1 -1
- package/dist/src/agent-browser-process-record.js +1 -1
- package/dist/src/agent-browser-provider.js +1 -1
- package/dist/src/agent-browser-tool.js +1 -1
- package/dist/src/agent-device-client.js +2 -2
- package/dist/src/alert.js +1 -1
- package/dist/src/android-adb.d.ts +3 -2
- package/dist/src/android-adb.js +1 -1
- package/dist/src/android-input-ownership.js +1 -1
- package/dist/src/android-system-surface-disclosure.js +1 -0
- package/dist/src/android-text-entry.js +1 -0
- package/dist/src/android.js +1 -1
- package/dist/src/app-backend.js +1 -1
- package/dist/src/app-helpers.js +1 -1
- package/dist/src/app-inventory.d.ts +4 -0
- package/dist/src/app-launch.js +1 -1
- package/dist/src/app-lifecycle.js +4 -3
- package/dist/src/app-lifecycle2.js +2 -2
- package/dist/src/app-log-files.js +1 -1
- package/dist/src/app-log-reconnect.js +1 -1
- package/dist/src/app-log-runtime2.js +3 -3
- package/dist/src/app-resolution-facade.js +1 -1
- package/dist/src/app-resolution.js +2 -2
- package/dist/src/app-state-runtime.d.ts +15 -0
- package/dist/src/apple-runner-platform.js +1 -1
- package/dist/src/application-lifecycle-interaction.js +1 -1
- package/dist/src/artifact-download.js +1 -1
- package/dist/src/auth.js +1 -1
- package/dist/src/aws-device-farm-connection.js +1 -0
- package/dist/src/back-mode.js +1 -1
- package/dist/src/backend-snapshot-options.js +1 -1
- package/dist/src/boot-diagnostics.js +1 -1
- package/dist/src/browserstack-connection.js +1 -0
- package/dist/src/capture-disclosure.js +1 -0
- package/dist/src/cli-config.js +1 -1
- package/dist/src/cli-help.js +36 -17
- package/dist/src/cli-output.js +1 -1
- package/dist/src/cli-runner.js +3 -1
- package/dist/src/cli.js +3 -4
- package/dist/src/client-companion-tunnel.js +1 -0
- package/dist/src/client-metro.js +1 -1
- package/dist/src/client-types.d.ts +15 -7
- package/dist/src/cloud-artifacts.d.ts +3 -2
- package/dist/src/code-signature-cache.js +1 -1
- package/dist/src/code-signature.js +1 -1
- package/dist/src/command-metadata.js +73 -1
- package/dist/src/command-policy.js +1 -0
- package/dist/src/command-schema.js +3 -3
- package/dist/src/command-surface.js +1 -1
- package/dist/src/command-tools.js +2 -2
- package/dist/src/connection-runtime.js +1 -1
- package/dist/src/connection-verification.js +1 -0
- package/dist/src/connection.js +5 -5
- package/dist/src/contracts.d.ts +1 -1
- package/dist/src/contracts.js +1 -1
- package/dist/src/daemon-client-lease-beat.js +1 -1
- package/dist/src/daemon-client-lifecycle.js +1 -1
- package/dist/src/daemon-client-liveness-probe.js +1 -1
- package/dist/src/daemon-policy-file.js +1 -1
- package/dist/src/daemon-registration-owner.js +1 -1
- package/dist/src/daemon-registration.js +1 -1
- package/dist/src/daemon-resolution.js +3 -1
- package/dist/src/debug-symbols-facade.js +1 -1
- package/dist/src/device-claim-inspection.js +1 -1
- package/dist/src/device-input-state.d.ts +6 -17
- package/dist/src/device-inventory-context.js +1 -1
- package/dist/src/device-readiness-runtime.js +1 -1
- package/dist/src/device-release.js +1 -1
- package/dist/src/device-selection-resolver.js +1 -1
- package/dist/src/device-shell.js +1 -1
- package/dist/src/device.js +3 -1
- package/dist/src/devicectl.js +1 -1
- package/dist/src/diagnostics.js +1 -1
- package/dist/src/doctor-facade.js +1 -1
- package/dist/src/durable-capture-resource.js +1 -1
- package/dist/src/durable-resource.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/expo-dev-client-launch.js +1 -0
- package/dist/src/file.js +3 -1
- package/dist/src/find.js +1 -1
- package/dist/src/finders.js +1 -1
- package/dist/src/generic-settle.js +1 -1
- package/dist/src/generic.js +1 -1
- package/dist/src/gesture-admission.js +1 -1
- package/dist/src/gesture-plan-types.d.ts +2 -5
- package/dist/src/gesture-plan.js +1 -1
- package/dist/src/gesture-runtime.js +1 -1
- package/dist/src/harmonyos.js +1 -1
- package/dist/src/hdc.js +1 -1
- package/dist/src/helper.js +2 -2
- package/dist/src/human-control.js +1 -1
- package/dist/src/ime-rebind.js +1 -1
- package/dist/src/ime-state.js +1 -1
- package/dist/src/index.d.ts +4 -4
- package/dist/src/index.js +1 -1
- package/dist/src/input-actions.js +1 -1
- package/dist/src/input-actions2.js +2 -2
- package/dist/src/install-source-network-transport.js +1 -1
- package/dist/src/install-source2.js +1 -1
- package/dist/src/interaction-error.js +1 -0
- package/dist/src/interaction-positionals.js +1 -1
- package/dist/src/interaction.js +1 -1
- package/dist/src/interaction2.js +1 -1
- package/dist/src/interactor-operation-catalog.js +1 -1
- package/dist/src/interactor.js +5 -5
- package/dist/src/interactor2.js +1 -1
- package/dist/src/interactors.js +1 -1
- package/dist/src/internal/bin.js +1 -1
- package/dist/src/internal/daemon.js +5 -1
- package/dist/src/internal/png-worker.js +1 -1
- package/dist/src/inventory.js +2 -2
- package/dist/src/inventory2.js +1 -1
- package/dist/src/inventory6.js +1 -1
- package/dist/src/io.d.ts +2 -2
- package/dist/src/ios-client.js +1 -1
- package/dist/src/ios-settings.js +1 -1
- package/dist/src/ios-snapshot-acquisition.js +1 -1
- package/dist/src/ios-snapshot-adapter.js +1 -1
- package/dist/src/ios-snapshot-engine.js +1 -1
- package/dist/src/ios-snapshot-runtime.js +1 -1
- package/dist/src/keyed-lock.js +1 -1
- package/dist/src/launch-confirmation.js +1 -1
- package/dist/src/lease.js +1 -1
- package/dist/src/limrun-runtime-dependencies.js +1 -1
- package/dist/src/limrun.d.ts +5 -564
- package/dist/src/limrun.js +1 -1
- package/dist/src/linux.js +1 -1
- package/dist/src/load.js +1 -1
- package/dist/src/local-interactor-operation-set.js +1 -1
- package/dist/src/log-stream.js +9 -9
- package/dist/src/mechanics.js +16 -16
- package/dist/src/metro.js +1 -1
- package/dist/src/metro2.js +1 -1
- package/dist/src/mobile-snapshot-semantics.js +1 -1
- package/dist/src/observability.js +1 -1
- package/dist/src/observation.js +1 -2
- package/dist/src/open-target-resolution.js +1 -1
- package/dist/src/output-path.js +1 -1
- package/dist/src/overlay.js +1 -3
- package/dist/src/perf-facade.js +1 -1
- package/dist/src/perf-runtime-operation-builder.js +1 -1
- package/dist/src/perf-runtime.js +1 -1
- package/dist/src/perf-target.js +1 -1
- package/dist/src/physical-device-control.js +1 -1
- package/dist/src/platform-request-scope.js +1 -1
- package/dist/src/platform-runtime-android-adb-host.js +1 -1
- package/dist/src/platform-runtime-app-log-android-transport.js +1 -1
- package/dist/src/platform-runtime-apple-resources.js +1 -0
- package/dist/src/platform-runtime-claim-recovery.js +1 -0
- package/dist/src/platform-runtime-daemon-services.js +1 -0
- package/dist/src/platform-runtime-host.js +1 -1
- package/dist/src/platform-runtime-network-web-transport.js +1 -1
- package/dist/src/platform-runtime-open-target.js +1 -1
- package/dist/src/platform-runtime-operation-host.js +4 -4
- package/dist/src/platform-runtime-runtime-hints.js +2 -2
- package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-runner-transport.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-harmony-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-web-host.js +1 -1
- package/dist/src/platform-runtime-unavailable.js +1 -1
- package/dist/src/platform-runtime.js +1 -1
- package/dist/src/platform-runtime2.js +1 -1
- package/dist/src/plugin.js +1 -0
- package/dist/src/plugins/webdriver.d.ts +111 -0
- package/dist/src/plugins/webdriver.js +1 -0
- package/dist/src/plugins.d.ts +2 -1
- package/dist/src/plugins2.js +1 -1
- package/dist/src/png-crop-bytes.js +1 -1
- package/dist/src/png-resize.js +1 -0
- package/dist/src/png-worker-client.js +1 -1
- package/dist/src/png-worker-contract.js +1 -1
- package/dist/src/process-entry.js +1 -1
- package/dist/src/process-exit.js +1 -1
- package/dist/src/process.js +1 -1
- package/dist/src/provider-credential-fingerprint.js +1 -1
- package/dist/src/provider-device-admission.js +1 -1
- package/dist/src/provider-device-runtime.d.ts +556 -0
- package/dist/src/provider-policy.js +1 -0
- package/dist/src/provider-profile-fields.js +1 -1
- package/dist/src/provider-webdriver.js +1 -2
- package/dist/src/proxy.js +2 -2
- package/dist/src/quality-warnings.js +1 -1
- package/dist/src/react-devtools.js +2 -0
- package/dist/src/react-native-overlay2.js +3 -0
- package/dist/src/react-native.js +1 -1
- package/dist/src/record-runtime.js +1 -1
- package/dist/src/record-trace.js +1 -1
- package/dist/src/recording.js +2 -2
- package/dist/src/register-builtins.js +1 -1
- package/dist/src/remote-bridge.js +1 -0
- package/dist/src/remote-config-core.js +1 -0
- package/dist/src/remote-config.js +1 -1
- package/dist/src/remote-config2.js +1 -1
- package/dist/src/replay-backend-registry.js +1 -0
- package/dist/src/replay-divergence.js +1 -1
- package/dist/src/replay-maestro-backend.js +117 -0
- package/dist/src/replay-script-selection.js +1 -0
- package/dist/src/replay.js +1 -3
- package/dist/src/replay2.js +1 -0
- package/dist/src/reporting.js +3 -3
- package/dist/src/request-cancel.js +1 -1
- package/dist/src/request-providers.js +1 -1
- package/dist/src/request-runtime-binding.js +1 -1
- package/dist/src/result-serialization.js +1 -1
- package/dist/src/retry.js +1 -1
- package/dist/src/retry2.js +1 -0
- package/dist/src/runner-artifact-manifest.js +1 -1
- package/dist/src/runner-cache-retention.js +1 -0
- package/dist/src/runner-cache-trim.js +1 -0
- 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-device-set.js +1 -0
- package/dist/src/runner-error-classification.js +3 -3
- package/dist/src/runner-exchange.js +1 -1
- package/dist/src/runner-lease.js +1 -0
- package/dist/src/runner-operations-facade.js +1 -1
- package/dist/src/runner-retention.js +1 -0
- package/dist/src/runner-start-budget.js +1 -1
- package/dist/src/runner-startup-transport.js +1 -0
- package/dist/src/runner-toolchain-probe.js +2 -0
- package/dist/src/runner.js +2 -1
- package/dist/src/runtime-command-surface.js +1 -0
- package/dist/src/runtime-deployment.js +1 -0
- package/dist/src/runtime-factory.js +1 -0
- package/dist/src/runtime-session.js +1 -0
- package/dist/src/runtime-transport-hints.js +1 -1
- package/dist/src/runtime.js +2 -1
- 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-transport.js +1 -1
- package/dist/src/screenshot-density.js +1 -1
- package/dist/src/screenshot-image.js +1 -1
- package/dist/src/screenshot-runtime.js +1 -1
- package/dist/src/screenshot3.js +5 -5
- package/dist/src/sdk-batch-runner.js +2 -2
- package/dist/src/sdk-batch.js +2 -2
- package/dist/src/sdk-contracts.d.ts +20 -29
- package/dist/src/sdk-contracts.js +2 -2
- package/dist/src/sdk-device.js +1 -1
- package/dist/src/sdk-finders.d.ts +1 -1
- package/dist/src/sdk-finders.js +1 -1
- package/dist/src/sdk-io.d.ts +4 -2
- package/dist/src/sdk-remote-config.d.ts +4 -0
- package/dist/src/sdk-remote-config.js +1 -1
- package/dist/src/sdk-selectors.d.ts +5 -6
- package/dist/src/sdk-selectors.js +1 -1
- package/dist/src/selection.js +0 -0
- package/dist/src/selector-pipeline-policy.js +1 -1
- package/dist/src/selector-runtime.js +1 -1
- package/dist/src/selectors.js +1 -1
- package/dist/src/server.js +2 -2
- package/dist/src/session-allocation.js +1 -1
- package/dist/src/session-replay-runtime-failure-response.js +1 -0
- package/dist/src/session-runtime-admission.js +1 -1
- package/dist/src/session.js +1 -1
- package/dist/src/session2.js +5 -5
- package/dist/src/settings.js +1 -1
- package/dist/src/settings2.js +1 -1
- package/dist/src/simctl-settings.js +1 -1
- package/dist/src/simctl.js +1 -1
- package/dist/src/simulator-boot.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-chrome.js +1 -0
- package/dist/src/snapshot-desktop-projection.js +1 -1
- package/dist/src/snapshot-evidence.js +1 -0
- package/dist/src/snapshot-node-lookup.js +1 -0
- package/dist/src/snapshot-occlusion.js +1 -0
- package/dist/src/snapshot-quality-verdict.js +1 -0
- 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/snapshot.js +1 -1
- package/dist/src/snapshot2.js +1 -1
- package/dist/src/snapshot3.js +1 -1
- package/dist/src/src.js +5 -1
- package/dist/src/src2.js +1 -1
- package/dist/src/src3.js +2 -1
- package/dist/src/store.js +1 -1
- package/dist/src/surface-snapshot2.js +1 -1
- package/dist/src/target-evidence-tree.js +1 -0
- package/dist/src/target-evidence.js +1 -1
- package/dist/src/text-entry-focus.js +1 -1
- package/dist/src/tool-provider2.js +1 -1
- package/dist/src/touch-runtime.js +1 -1
- package/dist/src/touch-runtime2.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/undici.js +8 -8
- package/dist/src/update-check.js +1 -1
- package/dist/src/vars.js +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/video.js +2 -2
- package/dist/src/wait.js +1 -0
- package/dist/src/web.js +1 -1
- package/dist/src/web2.js +1 -1
- package/package.json +22 -19
- package/server.json +2 -2
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.23.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.23.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.23.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.23.manifest.json +0 -16
- package/dist/src/adb-transport.js +0 -1
- package/dist/src/alert-runtime.js +0 -1
- package/dist/src/app-deployment-resolution.js +0 -2
- package/dist/src/app-inventory-contract.js +0 -1
- package/dist/src/app-log-session-resource.js +0 -1
- package/dist/src/application-lifecycle-runtime.js +0 -1
- package/dist/src/auth-session.js +0 -1
- package/dist/src/cache.js +0 -1
- package/dist/src/capabilities.js +0 -1
- package/dist/src/capture.js +0 -1
- package/dist/src/catalog.js +0 -1
- package/dist/src/click-button.js +0 -1
- package/dist/src/client-metro-companion.js +0 -1
- package/dist/src/client-options.js +0 -3
- package/dist/src/compatibility-policy.js +0 -1
- package/dist/src/daemon-artifacts.js +0 -1
- package/dist/src/daemon-client-transport.js +0 -1
- package/dist/src/daemon-http.js +0 -1
- package/dist/src/device-claim-rule.js +0 -1
- package/dist/src/device-rotation.js +0 -1
- package/dist/src/device-session.js +0 -3
- package/dist/src/device2.js +0 -1
- package/dist/src/device3.js +0 -3
- package/dist/src/dispatch-resolve.js +0 -4
- package/dist/src/format.js +0 -1
- package/dist/src/gesture-plan-types.js +0 -1
- package/dist/src/host.js +0 -1
- package/dist/src/human-control-contract.js +0 -1
- package/dist/src/interaction-ref-policy.js +0 -1
- package/dist/src/interactor-operation-binding.js +0 -1
- package/dist/src/keyboard-actions.js +0 -1
- package/dist/src/lease-context.js +0 -1
- package/dist/src/lease-registry-scope.js +0 -1
- package/dist/src/lease-scope.js +0 -1
- package/dist/src/managed-device-scope.js +0 -1
- package/dist/src/observe-until.js +0 -1
- package/dist/src/output-common.js +0 -5
- package/dist/src/owner-identity.js +0 -3
- package/dist/src/path-resolution.js +0 -1
- package/dist/src/perf-runtime-plan.js +0 -1
- package/dist/src/platform-runtime-app-log-process.js +0 -1
- package/dist/src/platform-runtime-managed-owner.js +0 -1
- package/dist/src/platform-runtime-screen-recording-process-host.js +0 -1
- package/dist/src/png.js +0 -1
- package/dist/src/prepare-kind.js +0 -1
- package/dist/src/provider-device-runtimes.js +0 -1
- package/dist/src/provider-session-ownership.js +0 -2
- package/dist/src/providers.js +0 -1
- package/dist/src/registry.js +0 -68
- package/dist/src/request-admission.js +0 -1
- package/dist/src/request-cancellation.js +0 -1
- package/dist/src/request-progress-protocol.js +0 -1
- package/dist/src/runner-cache-metadata.js +0 -3
- package/dist/src/runner-disposal.js +0 -1
- package/dist/src/runner-session-types.js +0 -1
- package/dist/src/runtime-admission.js +0 -1
- package/dist/src/screen-recording-admission-ledger.js +0 -1
- package/dist/src/screen-recording-resource-recovery.js +0 -1
- package/dist/src/screenshot-result.js +0 -1
- package/dist/src/script.js +0 -1
- package/dist/src/scroll-command.js +0 -1
- package/dist/src/scroll-gesture.js +0 -1
- package/dist/src/scroll-indicator.js +0 -1
- package/dist/src/session-artifact-paths.js +0 -1
- package/dist/src/session-paths.js +0 -1
- package/dist/src/session-repair-tombstone.js +0 -1
- package/dist/src/session-routing.js +0 -1
- package/dist/src/session-snapshot.js +0 -1
- package/dist/src/snapshot4.js +0 -1
- package/dist/src/src4.js +0 -1
- package/dist/src/src5.js +0 -1
- package/dist/src/src6.js +0 -1
- package/dist/src/src7.js +0 -2
- package/dist/src/src8.js +0 -115
- package/dist/src/string-enum.js +0 -1
- package/dist/src/success-text.js +0 -1
- package/dist/src/timeouts.js +0 -1
- package/dist/src/touch-reference-frame.js +0 -1
- package/dist/src/transport.js +0 -3
- package/dist/src/ttl-memo.js +0 -1
- package/dist/src/verified-file.js +0 -1
- package/dist/src/viewport.js +0 -1
- package/dist/src/window-state.js +0 -1
- /package/dist/src/{doctor-output.js → doctor-lines.js} +0 -0
package/dist/src/sdk-device.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";import{P as t}from"./sdk-contracts.js";function n(e){return Object.freeze({family:e.platform,...e.appleOs===void 0?{}:{appleOs:e.appleOs},kind:e.kind,...e.target===void 0?{}:{target:e.target},...e.iosPhysicalDeviceBackend===void 0?{}:{iosPhysicalDeviceBackend:e.iosPhysicalDeviceBackend}})}function r(e){return Object.freeze({id:e.id,...n(e)})}function i(e){return JSON.stringify([e.id,...s(e)])}function a(e,t){return i(e)===i(t)}function o(e,t){return JSON.stringify(s(e))===JSON.stringify(s(t))}function s(e){return[e.family,e.appleOs??null,e.kind,e.target??null,e.iosPhysicalDeviceBackend??null]}var ee=e({DEVICE_KINDS:()=>f,DEVICE_TARGETS:()=>p,PLATFORMS:()=>l,PLATFORM_SELECTORS:()=>d,PUBLIC_PLATFORMS:()=>u,deviceFieldsFromPublicPlatform:()=>S,deviceIdentityFlag:()=>R,hasAppleActionButton:()=>E,hasExplicitDeviceIdentitySelector:()=>m,isAppleOs:()=>k,isApplePlatform:()=>h,isHandheldAppleDevice:()=>y,isHandheldAppleSimulator:()=>v,isIosFamily:()=>_,isMacOs:()=>g,isMobilePlatform:()=>b,isPlatform:()=>D,isPublicPlatform:()=>O,isSerialAddressablePlatform:()=>q,isTvOsDevice:()=>C,matchesDeviceNameSelector:()=>Y,matchesDeviceSelector:()=>G,matchesPlatformSelector:()=>A,platformSelectorsConflict:()=>j,publicPlatformString:()=>x,resolveApplePlatformName:()=>M,resolveAppleSimulatorSetPathForSelector:()=>N,resolveDevice:()=>F,resolveDeviceAppleOs:()=>T,runnerSynthesizesTap:()=>w,sortAppleDevicesForSelection:()=>P});const c=[`ios`,`ipados`,`tvos`,`watchos`,`visionos`,`macos`],l=[`apple`,`android`,`harmonyos`,`vega`,`linux`,`web`],u=[`ios`,`macos`,`android`,`harmonyos`,`vega`,`linux`,`web`],d=[...l,`ios`,`macos`],f=[`simulator`,`emulator`,`device`],p=[`mobile`,`tv`,`desktop`];function m(e){return[e.deviceName,e.udid,e.serial].some(e=>typeof e==`string`&&e.trim().length>0)}function h(e){return e===`apple`||e===`ios`||e===`macos`}function g(e){return e.appleOs===`macos`||e.platform===`macos`}function _(e){return h(e.platform)&&!g(e)}function v(e){if(e.kind!==`simulator`)return!1;let t=T(e);return t===`ios`||t===`ipados`}function y(e){if(!_(e))return!1;let t=T(e);return t===`ios`||t===`ipados`}function b(e){return e.platform===`android`||e.platform===`harmonyos`||h(e.platform)&&!g(e)}function x(e){return h(e.platform)?g(e)?`macos`:`ios`:e.platform}function S(e){return e===`macos`?{platform:`apple`,appleOs:`macos`}:e===`ios`?{platform:`apple`}:{platform:e}}function C(e){return h(e.platform)&&e.target===`tv`}function w(e){return _(e)&&!C(e)&&e.appleOs!==`visionos`}function T(e){return e.appleOs?e.appleOs:e.platform===`macos`?`macos`:C(e)?`tvos`:`ios`}function E(e){let t=T(e);return t===`ios`||t===`ipados`}function D(e){return l.includes(e)}function O(e){return u.includes(e)}function k(e){return c.includes(e)}function A(e,t){return t?t===`apple`?h(e.platform):t===`ios`?h(e.platform)&&!g(e):t===`macos`?h(e.platform)&&g(e):e.platform===t:!0}function j(e,t){return!e||!t||e===t?!1:e===`apple`?!h(t):t!==`apple`||!h(e)}function M(e,t){return t?te(t):e===`macos`||e===`desktop`?`macOS`:e===`tv`?`tvOS`:`iOS`}function te(e){switch(e){case`tvos`:return`tvOS`;case`macos`:return`macOS`;case`visionos`:return`visionOS`;default:return`iOS`}}function N(e){let{simulatorSetPath:t,platform:n,target:r}=e;if(t&&n!==`macos`&&r!==`desktop`)return t}function P(e){return e.map((e,t)=>({device:e,index:t})).sort((e,t)=>ce(e,t)).map(({device:e})=>e)}function ne(e){return!e||e===`apple`||e===`ios`}async function F(e,t,n={}){let r=e.filter(e=>G(e,t));return re(r,t)||I(r,t.deviceName)||($(r)&&(r=P(r)),z(r,t,n))}function re(e,t){if(ie(t),t.udid)return ae(e,t.udid);if(t.serial)return oe(e,t)}function ie(e){let n=e.platform;if(n){if(e.udid&&q(n))throw new t(`INVALID_ARGS`,`--udid selects Apple devices, but this request selected --platform ${n}.`,{hint:`Use --serial ${e.udid} for ${n} devices.`});if(e.serial&&h(n))throw new t(`INVALID_ARGS`,`--serial selects Android and HarmonyOS devices, but this request selected --platform ${n}.`,{hint:`Use --udid ${e.serial} for Apple devices.`})}}function ae(e,n){let r=e.find(e=>e.id===n&&h(e.platform));if(!r)throw new t(`DEVICE_NOT_FOUND`,`No Apple device with UDID ${n}`);return r}function oe(e,n){let r=e.find(e=>e.id===n.serial&&q(e.platform));if(!r)throw new t(`DEVICE_NOT_FOUND`,se(n));return r}function I(e,n){if(!n)return;let r=e.find(e=>Y(e,n));if(!r){let r=L(e,n);throw new t(`DEVICE_NOT_FOUND`,`No device named ${n}`,r===void 0?void 0:{hint:r})}return r}function L(e,t){let n=e.find(e=>e.id===t);if(!n)return;let r=R(n.platform);if(r)return`${t} is the id of ${JSON.stringify(n.name)}, not its name. Did you mean --${r} ${t}?`}function R(e){if(h(e))return`udid`;if(q(e))return`serial`}function z(e,t,n){let r=e[0];if(r!==void 0&&e.length===1)return r;e.length===0&&J(t,n);let i=H(e);i.length>1&&B(i);let a=i[0];return a||J(t,n),a}function B(e){let n=e.slice(0,10);throw new t(`AMBIGUOUS_MATCH`,`${e.length} devices match this request equally; select one explicitly.`,{devices:n.map(e=>({id:e.id,name:e.name})),matches:e.length,hint:V(n)})}function V(e){let t=e[0];return`Select the intended device explicitly, for example ${t?`--${R(t.platform)??`udid`} ${t.id}`:`--udid <id>`} or --device ${JSON.stringify(t?.name??`<name>`)}. Run agent-device devices to list them.`}function H(e){let t=$(e)?W(e):U(e),n=t.filter(e=>e.booted);return n.length>0?n:t}function U(e){let t=e.filter(e=>e.kind!==`device`);return t.length>0?t:e}function W(e){let t=Math.min(...e.map(e=>Z(e)));return e.filter(e=>Z(e)===t)}function G(e,t,n={}){return A(e,t.platform)&&(!t.target||(e.target??`mobile`)===t.target)&&(!n.includeExplicitSelectors||K(e,t))}function K(e,t){return!(t.udid&&!(e.id===t.udid&&h(e.platform))||t.serial&&!(e.id===t.serial&&q(e.platform))||t.deviceName&&!Y(e,t.deviceName))}function q(e){return e===`android`||e===`harmonyos`||e===`vega`}function se(e){return e.platform===`android`?`No Android device with serial ${e.serial}`:e.platform===`vega`?`No Vega VVD with serial ${e.serial}`:e.platform===`harmonyos`?`No HarmonyOS device with serial ${e.serial}`:`No Android, HarmonyOS device, or Vega VVD with serial ${e.serial}`}function J(e,n){let r=n.simulatorSetPath;throw r&&ne(e.platform)?new t(`DEVICE_NOT_FOUND`,`No devices found in the scoped simulator set`,{simulatorSetPath:r,hint:`The simulator set at "${r}" appears to be empty. Create a compatible simulator first with xcrun simctl --set "${r}" create, or remove the scoped simulator set.`,selector:e}):new t(`DEVICE_NOT_FOUND`,`No devices found`,{selector:e})}function Y(e,t){return X(e.name)===X(t)}function X(e){return e.toLowerCase().replaceAll(`_`,` `).replaceAll(/\s+/g,` `).trim()}function ce(e,t){return Z(e.device)-Z(t.device)||Number(t.device.booted===!0)-Number(e.device.booted===!0)||e.device.name.localeCompare(t.device.name)||e.index-t.index}function Z(e){return e.kind===`simulator`?Q(e,0,1,2,3):e.kind===`device`&&h(e.platform)&&!g(e)?Q(e,10,11,12,13):14}function Q(e,t,n,r,i){return{mobile:le(e.name)?n:t,tv:r,desktop:i}[e.target??`mobile`]}function $(e){return e.length>0&&e.every(e=>h(e.platform))}function le(e){return/\bipad\b/i.test(e)}export{T as A,G as C,M as D,x as E,n as F,a as I,o as L,P as M,r as N,N as O,i as P,Y as S,j as T,b as _,u as a,q as b,ee as c,k as d,h as f,g,_ as h,d as i,w as j,F as k,E as l,v as m,p as n,S as o,y as p,l as r,R as s,f as t,m as u,D as v,A as w,C as x,O as y};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { F as SnapshotNode } from "./sdk-contracts.js";
|
|
2
2
|
//#region packages/selectors/src/internal/find.d.ts
|
|
3
3
|
declare const FIND_LOCATORS: readonly ['any', 'text', 'label', 'value', 'role', 'id'];
|
|
4
4
|
type FindLocator = (typeof FIND_LOCATORS)[number];
|
package/dist/src/sdk-finders.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Nn as e}from"./sdk-batch.js";function t(t,n,r,i){return e(t,n,r,typeof i==`boolean`?{requireRect:i}:i)}export{t};
|
package/dist/src/sdk-io.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as DaemonArtifactType } from "./sdk-contracts.js";
|
|
2
|
-
//#region src/
|
|
2
|
+
//#region packages/contracts/src/artifact-adapter.d.ts
|
|
3
3
|
type FileInputRef = {
|
|
4
4
|
kind: 'path';
|
|
5
5
|
path: string;
|
|
@@ -73,6 +73,8 @@ type LocalArtifactAdapterOptions = {
|
|
|
73
73
|
tempDir?: string;
|
|
74
74
|
rootDir?: string;
|
|
75
75
|
};
|
|
76
|
+
//#endregion
|
|
77
|
+
//#region src/io.d.ts
|
|
76
78
|
declare function createLocalArtifactAdapter(options?: LocalArtifactAdapterOptions): ArtifactAdapter;
|
|
77
79
|
//#endregion
|
|
78
|
-
export {
|
|
80
|
+
export { FileInputRef as a, OutputVisibility as c, ResolveInputOptions as d, ResolvedInputFile as f, CreateTempFileOptions as i, ReserveOutputOptions as l, ArtifactAdapter as n, FileOutputRef as o, TemporaryFile as p, ArtifactDescriptor as r, LocalArtifactAdapterOptions as s, createLocalArtifactAdapter as t, ReservedOutputFile as u };
|
|
@@ -107,9 +107,13 @@ type MetroReloadResult = ReloadMetroResult;
|
|
|
107
107
|
*/
|
|
108
108
|
declare const PROVIDER_DEVICE_ORIENTATIONS: readonly ['portrait', 'landscape'];
|
|
109
109
|
type ProviderDeviceOrientation = (typeof PROVIDER_DEVICE_ORIENTATIONS)[number];
|
|
110
|
+
/** Device pool a hosted provider session is created in: physical devices or emulators/simulators. */
|
|
111
|
+
declare const PROVIDER_DEVICE_TYPES: readonly ['real', 'virtual'];
|
|
112
|
+
type ProviderDeviceType = (typeof PROVIDER_DEVICE_TYPES)[number];
|
|
110
113
|
type CloudProviderProfileFields = {
|
|
111
114
|
providerApp?: string;
|
|
112
115
|
providerOsVersion?: string;
|
|
116
|
+
providerDeviceType?: ProviderDeviceType;
|
|
113
117
|
providerProject?: string;
|
|
114
118
|
providerBuild?: string;
|
|
115
119
|
providerSessionName?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{P as e,t}from"./sdk-contracts.js";import{i as n}from"./sdk-device.js";const r=[`portrait`,`landscape`],i={providerApp:`--provider-app`,providerOsVersion:`--provider-os-version`,providerProject:`--provider-project`,providerBuild:`--provider-build`,providerSessionName:`--provider-session-name`,providerDeviceOrientation:`--provider-device-orientation`,providerGeoLocation:`--provider-geo-location`,providerTimezone:`--provider-timezone`,providerAppiumVersion:`--provider-appium-version`,providerLanguage:`--provider-language`,providerLocale:`--provider-locale`,providerNetworkProfile:`--provider-network-profile`,providerCustomNetwork:`--provider-custom-network`,providerNoResignApp:`--provider-no-resign-app`,awsProjectArn:`--aws-project-arn`,awsDeviceArn:`--aws-device-arn`,awsAppArn:`--aws-app-arn`,awsRegion:`--aws-region`,awsInteractionMode:`--aws-interaction-mode`},
|
|
1
|
+
import{P as e,t}from"./sdk-contracts.js";import{i as n}from"./sdk-device.js";const r=[`portrait`,`landscape`],i=[`real`,`virtual`],a={providerApp:`--provider-app`,providerOsVersion:`--provider-os-version`,providerDeviceType:`--provider-device-type`,providerProject:`--provider-project`,providerBuild:`--provider-build`,providerSessionName:`--provider-session-name`,providerDeviceOrientation:`--provider-device-orientation`,providerGeoLocation:`--provider-geo-location`,providerTimezone:`--provider-timezone`,providerAppiumVersion:`--provider-appium-version`,providerLanguage:`--provider-language`,providerLocale:`--provider-locale`,providerNetworkProfile:`--provider-network-profile`,providerCustomNetwork:`--provider-custom-network`,providerNoResignApp:`--provider-no-resign-app`,awsProjectArn:`--aws-project-arn`,awsDeviceArn:`--aws-device-arn`,awsAppArn:`--aws-app-arn`,awsRegion:`--aws-region`,awsInteractionMode:`--aws-interaction-mode`},o={providerOsVersion:[`--os-version`],providerDeviceOrientation:[`--device-orientation`],providerGeoLocation:[`--geo-location`],providerTimezone:[`--timezone`],providerAppiumVersion:[`--appium-version`],providerLanguage:[`--language`],providerLocale:[`--locale`],providerNetworkProfile:[`--network-profile`],providerCustomNetwork:[`--custom-network`]},s=new Set([`1`,`true`,`yes`,`on`]),c=new Set([`0`,`false`,`no`,`off`]);function l(e){return`AGENT_DEVICE_${e.replaceAll(/([A-Z])/g,`_$1`).replaceAll(/[^A-Za-z0-9_]/g,`_`).toUpperCase()}`}function u(t,n,r,i){if(t.multiple)return(Array.isArray(n)?n:[n]).map(e=>u({...t,multiple:!1},e,r,i));if(t.type===`boolean`)return d(n,r,i);if(t.type===`booleanOrString`){if(typeof n==`boolean`)return n;if(typeof n==`string`&&f(n)!==void 0)return f(n);if(typeof n==`string`&&n.trim().length>0)return n;throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected boolean or non-empty string.`)}if(t.type===`string`){if(typeof n==`string`&&n.trim().length>0)return n;throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected non-empty string.`)}if(t.type===`enum`){if(t.setValue!==void 0)return p(t,n,r,i);if(typeof n!=`string`||!t.enumValues?.includes(n))throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected one of: ${t.enumValues?.join(`, `)}.`);return n}let a=typeof n==`number`?n:typeof n==`string`?Number(n):NaN;if(!Number.isFinite(a)||t.type===`int`&&!Number.isInteger(a))throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected ${t.type===`int`?`integer`:`number`}.`);if(typeof t.min==`number`&&a<t.min)throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Must be >= ${t.min}.`);if(typeof t.max==`number`&&a>t.max)throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Must be <= ${t.max}.`);return a}function d(t,n,r){if(typeof t==`boolean`)return t;if(typeof t==`string`){let e=f(t);if(e!==void 0)return e}throw new e(`INVALID_ARGS`,`Invalid value for "${r}" in ${n}. Expected boolean.`)}function f(e){let t=e.trim().toLowerCase();if(s.has(t))return!0;if(c.has(t))return!1}function p(t,n,r,i){let a=t.setValue;if(n===a)return a;if(typeof n==`string`){let e=n.trim();if(e===``||e===`true`||e===`1`)return a;if(e===`false`||e===`0`)return}if(n===!0)return a;if(n!==!1)throw new e(`INVALID_ARGS`,`Invalid value for "${i}" in ${r}. Expected boolean-like value for enum flag.`)}const m=[{key:`stateDir`,type:`string`,path:!0},{key:`daemonBaseUrl`,type:`string`},{key:`daemonAuthToken`,type:`string`},{key:`daemonTransport`,type:`enum`,enumValues:[`auto`,`socket`,`http`]},{key:`daemonServerMode`,type:`enum`,enumValues:[`socket`,`http`,`dual`]},{key:`tenant`,type:`string`},{key:`sessionIsolation`,type:`enum`,enumValues:[`none`,`tenant`]},{key:`runId`,type:`string`},{key:`leaseId`,type:`string`},{key:`leaseBackend`,type:`enum`,enumValues:t},{key:`platform`,type:`enum`,enumValues:n},{key:`target`,type:`enum`,enumValues:[`mobile`,`tv`,`desktop`]},{key:`device`,type:`string`},{key:`udid`,type:`string`},{key:`serial`,type:`string`},{key:`iosSimulatorDeviceSet`,type:`string`,path:!0,env:!1},{key:`androidDeviceAllowlist`,type:`string`},{key:`session`,type:`string`},{key:`providerApp`,type:`string`},{key:`providerOsVersion`,type:`string`},{key:`providerDeviceType`,type:`enum`,enumValues:i},{key:`providerProject`,type:`string`},{key:`providerBuild`,type:`string`},{key:`providerSessionName`,type:`string`},{key:`providerDeviceOrientation`,type:`enum`,enumValues:r},{key:`providerGeoLocation`,type:`string`},{key:`providerTimezone`,type:`string`},{key:`providerAppiumVersion`,type:`string`},{key:`providerLanguage`,type:`string`},{key:`providerLocale`,type:`string`},{key:`providerNetworkProfile`,type:`string`},{key:`providerCustomNetwork`,type:`string`},{key:`providerNoResignApp`,type:`boolean`},{key:`awsProjectArn`,type:`string`},{key:`awsDeviceArn`,type:`string`},{key:`awsAppArn`,type:`string`},{key:`awsRegion`,type:`string`},{key:`awsInteractionMode`,type:`enum`,enumValues:[`INTERACTIVE`,`NO_VIDEO`,`VIDEO_ONLY`]},{key:`metroProjectRoot`,type:`string`,path:!0},{key:`metroKind`,type:`enum`,enumValues:[`auto`,`react-native`,`expo`,`repack`]},{key:`metroPublicBaseUrl`,type:`string`},{key:`metroProxyBaseUrl`,type:`string`},{key:`metroBearerToken`,type:`string`},{key:`metroPreparePort`,type:`int`,min:1,max:65535},{key:`metroListenHost`,type:`string`},{key:`metroStatusHost`,type:`string`},{key:`metroStartupTimeoutMs`,type:`int`,min:1},{key:`metroProbeTimeoutMs`,type:`int`,min:1},{key:`metroRuntimeFile`,type:`string`,path:!0},{key:`metroNoReuseExisting`,type:`boolean`},{key:`metroNoInstallDeps`,type:`boolean`},{key:`launchUrl`,type:`string`}],h=[{key:`leaseProvider`,type:`string`,env:!1},{key:`deviceKey`,type:`string`,env:!1},{key:`clientId`,type:`string`,env:!1}],g=[...m,...h],_=new Map(g.map(e=>[e.key,e]));function v(e){return _.get(e)}function y(e){return v(e)?.env===!1?[]:[l(e)]}export{l as a,r as c,o as d,v as i,i as l,g as n,f as o,y as r,u as s,m as t,a as u};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { C as Platform, F as SnapshotNode, T as PublicPlatform, h as ResponseCost, j as Rect, z as SnapshotState } from "./sdk-contracts.js";
|
|
2
2
|
//#region packages/contracts/src/fill-evidence.d.ts
|
|
3
3
|
/**
|
|
4
4
|
* The evidence a `fill` carries when it changed a field but could not confirm the text it sent.
|
|
@@ -15,11 +15,10 @@ type FillVerificationTarget = {
|
|
|
15
15
|
rect: Rect;
|
|
16
16
|
};
|
|
17
17
|
/**
|
|
18
|
-
* Target-bound evidence
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* it re-laid out, cannot borrow this evidence.
|
|
18
|
+
* Target-bound read-back evidence when a fill could not confirm the requested text. The observed
|
|
19
|
+
* value may reflect app-owned formatting or altered input; this evidence makes no correctness
|
|
20
|
+
* claim. Bound to the {@link FillVerificationTarget} it was collected against so a different
|
|
21
|
+
* field cannot borrow the observation.
|
|
23
22
|
*/
|
|
24
23
|
type FillUnconfirmedVerification = {
|
|
25
24
|
verification: 'unconfirmed';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{wn as e}from"./sdk-batch.js";function t(t,n,r){return e(typeof t==`string`?t:t.raw,n,r)}export{t};
|
package/dist/src/selection.js
CHANGED
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";import{xn as t}from"./sdk-batch.js";var n=e({SELECTOR_PIPELINE_POLICIES:()=>i,readinessScheduleFor:()=>a});const r={defaultTimeoutMs:1e4,intervalMs:300},i={promotedTarget:{resolution:t.act,occlusion:`exclude-and-refuse`,offscreen:`refuse`,promotion:`hittable-ancestor`,poll:{maxTimeoutMs:2e3,intervalMs:200}},resolvedTarget:{resolution:t.act,occlusion:`exclude-and-refuse`,offscreen:`refuse`,promotion:`none`,poll:`none`},coveredDiagnosis:{resolution:t.actCoveredDiagnosis,occlusion:`refuse`,offscreen:`ignore`,promotion:`none`,poll:`none`},readText:{resolution:t.readText,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`},readUnique:{resolution:t.readUnique,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`},readAny:{resolution:t.readAny,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`},findWait:{resolution:t.readAny,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:r},wait:{resolution:t.wait,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:r},readList:{resolution:t.readList,occlusion:`ignore`},findAct:{resolution:t.findAct,occlusion:`refuse`,offscreen:`ignore`,promotion:`hittable-ancestor-below-root`,poll:`none`},cropTarget:{resolution:t.cropTarget,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`}};function a(e,t){if(e!==`none`&&!(t===void 0||!Number.isInteger(t))&&!(t<=0))return{intervalMs:e.intervalMs,budgetMs:Math.min(t,e.maxTimeoutMs),budgetFrom:`first-capture`}}export{a as n,n as r,i as t};
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";import{L as t,P as n}from"./sdk-contracts.js";import"./tv-remote.js";import{i as r}from"./snapshot-capture-annotations.js";import{r as i}from"./diagnostics.js";import"./diagnostics2.js";import{Ar as a,Dn as o,Ir as s,Rr as c,Tn as l,bn as u,jr as d,xn as f,xr as p,zr as m}from"./sdk-batch.js";import{i as h}from"./retry.js";import"./retry2.js";import{i as g,n as _,t as v}from"./rect-center.js";import{r as y}from"./snapshot-occlusion.js";const ee=2500,te=5e3,ne=1500,re=[250,400,600];function b(e){return e===`press`||e===`click`||e===`back`||e===`open`}function x(e){return e.map(e=>[e.depth??0,e.type??``,e.label??``,e.value??``,e.identifier??``,e.enabled===!1?`disabled`:`enabled`,e.hittable===!0?`hittable`:`not-hittable`].join(`|`))}function S(e,t){return e<12?!1:t<=Math.floor(e*.2)}function ie(e,t,n){return n.interactiveOnly&&e.snapshot.nodes.length===0&&e.rawNodeCount!==void 0&&e.rawNodeCount>=12?`empty-interactive`:n.mode===`ref-refresh`?null:S(t.baselineCount,e.snapshot.nodes.length)?ae(e.snapshot)?null:`sharp-drop`:t.routeComparable&&b(t.action)&&oe(t.baselineSignatures,e.snapshot.nodes)?`stuck-route`:null}function ae(e){return e.nodes.some(e=>e.hittable===!0||!!e.label?.trim()||!!e.value?.trim()||!!e.identifier?.trim())}function oe(e,t){if(!e||e.length===0)return!1;let n=Math.max(e.length,t.length);if(n<12)return!1;let r=x(t),i=Math.min(e.length,r.length),a=0;for(let t=0;t<i;t+=1)e[t]===r[t]&&(a+=1);let o=Math.max(0,r.length-e.length),s=Math.max(0,e.length-r.length),c=Math.max(3,Math.floor(n*.15));return a>=Math.floor(n*.9)&&o<=c&&s<=c}async function se(e){let t=e.window.markedAt+e.retry.retryBudgetMs,n=await e.capture(),i=e.classify(n),a=0;for(let r of e.retry.delaysMs){if(!i)break;let o=t-Date.now();if(o<=0)break;await h(Math.min(r,o)),n=await e.capture(),a+=1,i=e.classify(n)}i||e.onTrustworthyCapture?.();let o=a>0||i?{action:e.window.action,retryCount:a,staleAfterRetries:!!i,reason:i??void 0}:void 0;return{...n,annotations:{...n.annotations,...r({freshness:o})}}}var ce=e({observeUntil:()=>C});const le={now:()=>Date.now(),sleep:e=>new Promise(t=>setTimeout(t,e))};async function C(e){let n=e.clock??le,r=n.now(),i={params:e,clock:n,state:{startedMs:r,budgetStartedMs:r,budgetMs:e.schedule.budgetMs,observations:0,polls:[],previous:void 0,last:void 0,lastError:void 0}};if(e.initial!==void 0){i.state.observations+=1;let t=T(i,e.initial);if(t)return t}for(;;){if(e.signal?.aborted)throw t();let n=await de(i);if(n)return n;if(e.signal?.aborted)throw t();let r=await fe(i);if(r)return r}}function w({state:e,clock:t}){return e.budgetStartedMs+e.budgetMs-t.now()}function ue({params:e,state:t}){return t.observations<(e.schedule.minPolls??1)}async function de(e){let{state:t,clock:n,params:r}=e;if(t.observations===0)return;let i=ue(e);if(!i&&w(e)<=0)return E(e,{kind:`expired`,last:t.last,lastError:t.lastError});let{intervalMs:a}=r.schedule;await n.sleep(i?a:Math.max(0,Math.min(a,w(e))))}async function fe(e){let{params:t,clock:n,state:r}=e,i=t.schedule.budgetFrom===`first-capture`&&r.polls.length===0,a=n.now(),o=await me(!i&&t.schedule.captureDeadline===`cancel`?Math.max(w(e),t.schedule.intervalMs):void 0,t.signal,t.capture,n);r.observations+=1,i&&(r.budgetStartedMs=n.now());let s=pe(e,o);if(r.polls.push({startedMs:a-r.startedMs,durationMs:n.now()-a,outcome:s}),o.kind===`observed`)return T(e,o.value);if(s===`rode-out`){r.lastError=o.error;return}return o.kind===`stalled`?E(e,{kind:`stalled`,last:r.last,lastError:r.lastError,error:o.error}):E(e,{kind:`failed`,last:r.last,error:o.error})}function pe(e,t){return t.kind===`stalled`?`stalled`:t.kind===`failed`?e.params.rideOut?.(t.error)?`rode-out`:`failed`:`observed`}function T(e,t){let{params:n,state:r}=e,i=n.verdict(t,r.previous,r.polls.length);if(r.previous=t,r.last=t,i.kind===`done`)return E(e,{kind:`done`,result:i.result,value:t});i.budgetMs!==void 0&&(r.budgetMs=Math.max(r.budgetMs,i.budgetMs))}function E(e,t){let{params:n,state:r,clock:a}=e,o={...t,polls:r.polls,waitedMs:a.now()-r.startedMs};return n.phase&&i({level:`debug`,phase:n.phase,data:{end:o.kind,polls:r.polls.length,waitedMs:o.waitedMs}}),o}async function me(e,t,n,r){let i=he(e,r),a=t?AbortSignal.any([t,i.signal]):i.signal;try{let e=await n(a);return D(t,i.expired(),void 0)??{kind:`observed`,value:e}}catch(e){return D(t,i.expired(),e)??{kind:`failed`,error:e}}finally{i.dispose()}}function D(e,n,r){if(e?.aborted)throw t();return n?{kind:`stalled`,error:r}:void 0}function he(e,t){let n=new AbortController,r=e===void 0?void 0:t.now()+e,i=!1,a=e===void 0?void 0:setTimeout(()=>{i=!0,n.abort(new DOMException(`Observation deadline exceeded`,`TimeoutError`))},Math.max(0,e));return a?.unref(),{signal:n.signal,expired:()=>i||r!==void 0&&t.now()>=r,dispose:()=>{a!==void 0&&clearTimeout(a)}}}const O={intervalMs:200,budgetMs:1500,minPolls:2},k=O.budgetMs+2e3;function ge({kind:e,gesture:t}){let n=[t.action,...t.positionals].join(` `).trim();return e===`unsettled`?`The surface was still changing after ${n} when this tree was read, so it may not match where the surface comes to rest: an element missing from it is not proof of absence.`:`${n} produced no visible change: the tree still matches its pre-gesture state. Either the container is already at its edge, or it ignores synthesized scrolls — a raw drag moves such lists: swipe x1 y1 x2 y2 (start inside the list).`}function A(e,t){return{kind:e,gesture:{action:t.action,positionals:t.positionals}}}function _e(e){let{needsBaselineDistrust:t,baselineSignature:n,quietSignature:r,elapsedMs:i,distrustCapMs:a}=e;return!t||!n?.length||e.classifyBaselineEvidence(n,r)!==`unchanged`?`trust`:i<a?`distrust`:`accept-stale`}async function ve(e){let{pending:t,needsBaselineDistrust:n,hooks:r,clock:a}=e,o=()=>a?.now()??Date.now(),s=o(),c=0,l=t.baselineSignature,u=t.baselineBackend,d=!1,f=!1,p,m=e=>(p?.value===e||(p={value:e,...r.readSurface(e)}),p),h=await C({...e.initial===void 0?{}:{initial:e.initial},capture:()=>r.capture(),schedule:O,...a?{clock:a}:{},verdict:(e,a)=>{c+=1;let p=m(e);if(a===void 0)return{kind:`continue`};let h=m(a);if(f=r.signaturesStable(h.signature,p.signature),!f)return{kind:`continue`};let g=o()-s;if(l&&u!==p.backend)return i({level:`debug`,phase:`post_gesture_snapshot_baseline_rebased`,data:{action:t.action,from:u,to:p.backend,attempts:c}}),l=p.signature,u=p.backend,d=!0,{kind:`continue`};let _=_e({needsBaselineDistrust:n,baselineSignature:l,quietSignature:p.signature,elapsedMs:g,distrustCapMs:k,classifyBaselineEvidence:r.classifyBaselineEvidence});return _===`distrust`?{kind:`continue`,budgetMs:k}:(ye(_,t.action,c,g),{kind:`done`,result:j(_,t,p,r,d)})}});if(h.kind===`done`)return h.result;if(h.kind===`failed`)throw h.error;i({level:`warn`,phase:`post_gesture_snapshot_stabilization_timeout`,data:{action:t.action,attempts:c,durationMs:h.waitedMs,lastPairAgreed:f}});let g=h.last;return f?{value:g}:{value:g,postGestureOutcome:A(`unsettled`,t)}}function ye(e,t,n,r){if(e===`accept-stale`){i({level:`warn`,phase:`post_gesture_snapshot_stale_accept`,data:{action:t,attempts:n,durationMs:r,matchedPreGestureBaseline:!0}});return}i({level:n>2?`info`:`debug`,phase:`post_gesture_snapshot_stabilized`,data:{action:t,attempts:n,durationMs:r}})}function j(e,t,n,r,a){if(e!==`accept-stale`)return{value:n.value};let o=t.baselineSignature;return o!==void 0&&r.surfacesIdentical(o,n.signature)?{value:n.value,postGestureOutcome:A(`no-effect`,t)}:(i({level:`info`,phase:`post_gesture_no_effect_vetoed`,data:{action:t.action,backend:n.backend,...a?{reason:`baseline_rebased`}:{reason:`surface_divergence`,...o===void 0?{}:r.summarizeDivergence(o,n.signature)}}}),{value:n.value})}function M(e,t,r,i){if(!Number.isFinite(e)||!Number.isInteger(e)||e<r||e>i)throw new n(`INVALID_ARGS`,`${t} must be an integer between ${r} and ${i}`);return e}function N(e,t,r){let i=Number(e[0]),a=Number(e[1]);if(Number.isNaN(i)||Number.isNaN(a))throw new n(`INVALID_ARGS`,t,r);return{x:i,y:a}}function P(e,t,n,r){let i=n.ambiguity;if(i===`first-match`||i===`reject-candidates`){let a=l(e,t,{...r,requireRect:n.requireRect});return!a||a.matchedNodes.length===0?{kind:`none`}:i===`first-match`?I(a):a.matchedNodes.length>1?F(a):I(a)}let a=o(e,t,{...r,...f({ambiguity:i,requireRect:n.requireRect})});return a.firstMatch?a.resolution?{kind:`resolved`,resolution:a.resolution,matchedNodes:a.firstMatch.matchedNodes}:F(a.firstMatch):{kind:`none`}}function F(e){return{kind:`ambiguous`,selector:e.selector.raw,selectorIndex:e.selectorIndex,matchedNodes:e.matchedNodes}}function I(e){let t=e.matchedNodes[0];return t?{kind:`resolved`,matchedNodes:e.matchedNodes,resolution:{node:t,selector:e.selector,selectorIndex:e.selectorIndex,matches:e.matchedNodes.length,diagnostics:[{selector:e.selector.raw,matches:e.matchedNodes.length}]}}:{kind:`none`}}function be(e,t,n){let r=l(e,p(t),n);return r?{...r,selector:r.selector.raw}:null}function xe(e,t,n,r){let i=P(e,p(t),n,r);return i.kind===`resolved`?{...i,resolution:{...i.resolution,selector:i.resolution.selector.raw}}:i}function Se(e){return e}function L(e,t){let n=Math.max(e.x,t.x),r=Math.max(e.y,t.y),i=Math.min(e.x+e.width,t.x+t.width),a=Math.min(e.y+e.height,t.y+t.height);return i<=n||a<=r?0:(i-n)*(a-r)}const Ce=[`button`,`link`,`menuitem`,`tabitem`,`textfield`,`searchfield`,`securetextfield`,`checkbox`,`radio`,`switch`,`cell`];function R(e){return[e.type,e.role,e.subrole].map(e=>s(e??``)).some(e=>e===`tab`||Ce.some(t=>e.includes(t)))}function we(e,t){let n=t[0];if(!n)return{kind:`ambiguous`,candidates:t};let r=K(e);if(!z(t,r.nodesByIndex))return{kind:`ambiguous`,candidates:t};let i=G(e,n,r).node;for(let n of t.slice(1))if(G(e,n,r).node.index!==i.index){let e=V(t,r);return e?{kind:`equivalent`,node:e}:{kind:`ambiguous`,candidates:t}}return{kind:`equivalent`,node:i}}function z(e,t){for(let n=0;n<e.length;n+=1)for(let r=n+1;r<e.length;r+=1){let i=e[n],a=e[r];if(!B(i,a,t)&&!B(a,i,t))return!1}return!0}function B(e,t,n){let r=t,i=new Set;for(;r.parentIndex!==void 0&&!i.has(r.index);){if(i.add(r.index),r.parentIndex===e.index)return!0;let t=n.get(r.parentIndex);if(!t)return!1;r=t}return!1}function V(e,t){if(e.length<2||!z(e,t.nodesByIndex)||e.some(e=>e.hittable!==void 0))return null;let n=e.reduce((e,t)=>(t.depth??0)>(e.depth??0)?t:e);if(!R(n)||!e.every(e=>e===n||!R(e)))return null;let r=_(n.rect);return r&&e.every(e=>U(_(e.rect),r))?n:null}function Te(e){return[e.type,e.role,e.subrole].map(e=>s(e??``)).some(e=>e.includes(`accessibilityelement`))}function Ee(e,t){if(e.length<2||!z(e,t.nodesByIndex)||e.some(e=>R(e)))return null;let n=e.reduce((e,t)=>(t.depth??0)<(e.depth??0)?t:e),r=n.label?.trim();if(!r)return null;let i=_(n.rect);return i&&e.every(e=>(e===n||Te(e))&&e.label?.trim()===r&&U(_(e.rect),i))?n:null}function H(e,t){let n=K(e);return V(t,n)??Ee(t,n)}function U(e,t){return e?Math.abs(e.x-t.x)<=1&&Math.abs(e.y-t.y)<=1&&Math.abs(e.width-t.width)<=1&&Math.abs(e.height-t.height)<=1:!1}function W(e,t){if(!t?.rect||!e.rect||!a(e))return!1;let n=e.rect,r=t.rect;return n.x===r.x&&n.y===r.y&&n.width===r.width&&n.height===r.height}function De(e,t){return G(e,t)}function Oe(e){let t=K(e);return n=>G(e,n,t)}function G(e,t,n){return y(t)?{node:t,reason:`covered`}:ke(e,t,n)??Ae(t)??je(e,t,n)??{node:t,reason:`original`}}function ke(e,t,n){let r=Ne(e,t,n);return r?.rect&&g(r.rect)?{node:r,reason:`same-rect-descendant`}:null}function Ae(e){return R(e)&&e.rect&&g(e.rect)?{node:e,reason:`semantic-target`}:null}function je(e,t,n){let r=Me(e,t,n);return!r?.rect||y(r)||!g(r.rect)?null:Pe(t,r,e,n)?{node:t,reason:`overly-broad-ancestor`}:{node:r,reason:`hittable-ancestor`}}function Me(e,t,n){if(t.hittable)return t;let r=e=>e.hittable===!0;return n?m(e,t,n.nodesByIndex,e=>r(e)?e:null):c(e,t,r)}function Ne(e,t,n){let r=_(t.rect);if(!r)return null;let i=t,a=new Set;for(;!a.has(i.ref);){a.add(i.ref);let t=(n?n.childrenByParentIndex.get(i.index)??[]:e.filter(e=>e.parentIndex===i.index)).filter(e=>{if(!e.hittable||y(e))return!1;let t=_(e.rect);return t?v(t,r):!1});if(t.length!==1)break;i=t[0]}return i===t?null:i}function Pe(e,t,n,r){let i=_(e.rect),a=_(t.rect);if(!i||!a)return!1;if(Fe(t)&&!v(i,a))return!0;let o=d(n,i,r?.viewportRootRects);return!o||!Ie(a,o)?!1:!v(i,a)}function Fe(e){let t=s(e.type??``);return t.includes(`scrollview`)||t.includes(`scrollarea`)||t.includes(`listview`)||t.includes(`recyclerview`)||t.includes(`collectionview`)||t===`list`||t===`table`||t===`collection`}function K(e){let t=new Map,n=new Map,r=[];for(let i of e){if(t.set(i.index,i),typeof i.parentIndex==`number`){let e=n.get(i.parentIndex);e?e.push(i):n.set(i.parentIndex,[i])}if(a(i)){let e=_(i.rect);e&&r.push(e)}}return{nodesByIndex:t,childrenByParentIndex:n,viewportRootRects:r}}function Ie(e,t){let n=L(e,t),r=e.width*e.height,i=t.width*t.height;if(n<=0||r<=0||i<=0)return!1;let a=n/i,o=n/r;return a>=.9&&o>=.8}async function Le(e,t,n,r,i={}){let a=xe(Y(e,t),n,e.resolution,r);if(a.kind===`none`)return{kind:`none`};if(a.kind===`resolved`)return await q(e,t,{node:a.resolution.node,selector:a.resolution.selector,selectorIndex:a.resolution.selectorIndex,matches:a.resolution.matches,matchedNodes:a.matchedNodes},i);let o=Re(t,a);return o?await q(e,t,o,i):a}function Re(e,t){let n=H(e,t.matchedNodes);return n?{node:n,selector:t.selector,selectorIndex:t.selectorIndex,matches:t.matchedNodes.length,matchedNodes:t.matchedNodes}:null}async function q(e,t,n,r){let i=await J(e,t,n.node,r);return i.kind===`occluded`?{kind:`occluded`,node:i.node,selector:n.selector}:{...n,kind:`target`,node:i.node}}function ze(e,t,n,r){let i=Y(e,t);return{candidates:i,list:be(i,n,{...r,requireRect:e.resolution.requireRect})}}async function J(e,t,n,r={}){r.onResolved?.(n,t);let i=Be(e.promotion,t,n);return e.occlusion!==`ignore`&&(i.covered||y(i.node))?{kind:`occluded`,node:i.node}:{kind:`target`,node:await X(e,t,i.node,r)}}function Y(e,t){return e.occlusion===`exclude-and-refuse`?t.filter(e=>!y(e)):t}function Be(e,t,n){if(e===`none`)return{node:n,covered:!1};let r=De(t,n);return r.reason===`covered`?{node:r.node,covered:!0}:e===`hittable-ancestor-below-root`&&W(r.node,t[0])&&n.rect?{node:n,covered:!1}:{node:r.node,covered:!1}}async function X(e,t,n,r){if(e.offscreen!==`refuse`)return n;if(!r.offscreen)throw Error(`selector pipeline row declares an off-screen refusal but this route supplies no refusal shape`);return await r.offscreen(n,t)}function Ve(e){if(e.poll===`none`)throw Error(`selector pipeline row resolves against one capture and declares no poll budget`);if(!(`defaultTimeoutMs`in e.poll))throw Error(`selector pipeline row polls under a caller-capped readiness budget, not a caller-default one`);return e.poll}var He=e({SELECTOR_PIPELINE_POLICIES:()=>Q,readinessScheduleFor:()=>$});const Z={defaultTimeoutMs:1e4,intervalMs:300},Q={promotedTarget:{resolution:u.act,occlusion:`exclude-and-refuse`,offscreen:`refuse`,promotion:`hittable-ancestor`,poll:{maxTimeoutMs:2e3,intervalMs:200}},resolvedTarget:{resolution:u.act,occlusion:`exclude-and-refuse`,offscreen:`refuse`,promotion:`none`,poll:`none`},coveredDiagnosis:{resolution:u.actCoveredDiagnosis,occlusion:`refuse`,offscreen:`ignore`,promotion:`none`,poll:`none`},readText:{resolution:u.readText,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`},readUnique:{resolution:u.readUnique,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`},readAny:{resolution:u.readAny,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`},findWait:{resolution:u.readAny,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:Z},wait:{resolution:u.wait,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:Z},readList:{resolution:u.readList,occlusion:`ignore`},findAct:{resolution:u.findAct,occlusion:`refuse`,offscreen:`ignore`,promotion:`hittable-ancestor-below-root`,poll:`none`},cropTarget:{resolution:u.cropTarget,occlusion:`ignore`,offscreen:`ignore`,promotion:`none`,poll:`none`}};function $(e,t){if(e!==`none`&&!(t===void 0||!Number.isInteger(t))&&!(t<=0))return{intervalMs:e.intervalMs,budgetMs:Math.min(t,e.maxTimeoutMs),budgetFrom:`first-capture`}}export{ne as C,x as D,ie as E,S as O,te as S,ee as T,ge as _,Le as a,ce as b,we as c,H as d,R as f,M as g,N as h,ze as i,b as k,Oe as l,Se as m,$ as n,J as o,L as p,He as r,Ve as s,Q as t,W as u,ve as v,re as w,se as x,C as y};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as e,C as t,F as n,M as r,P as i,f as a,h as o,s,y as c}from"./sdk-contracts.js";import{r as l}from"./diagnostics.js";import"./diagnostics2.js";import{p as u,w as d}from"./sdk-device.js";import{Fn as f,Nn as p,Rt as m,dr as ee,fr as h,pr as g}from"./sdk-batch.js";import{d as te,n as _}from"./dispatch-resolve.js";import{c as v,i as y,s as b,u as ne}from"./target-evidence.js";import{n as re,p as ie}from"./provider-device-admission.js";import{_ as ae,g as oe,l as se,r as ce,s as le}from"./overlay.js";import{i as ue}from"./rect-center.js";import{a as x}from"./android-system-chrome.js";import{r as de}from"./request-cancel.js";import"./request.js";import{M as fe,O as S,_ as pe,f as me,i as he,j as ge,l as _e,m as C,o as w,p as T,r as E,s as D,v as O}from"./session-snapshot.js";import{s as k}from"./quality-warnings.js";import{t as A}from"./backend-snapshot-options.js";import{t as j}from"./snapshot-runtime-binding.js";function M(e){let t=r(e);return t?{ok:!0,ref:t.base,generation:t.generation}:{ok:!1,response:s(`INVALID_ARGS`,`Invalid ref "${e}" — malformed generation suffix.`,{hint:o})}}function N(e,t){if(t===`exists`)return{found:!0};if(t===`wait`)return{found:!0,waitedMs:e.waitedMs};if(t===`list`)return{action:`list`,matches:Array.isArray(e.matches)?e.matches.length:0};let n=typeof e.ref==`string`?e.ref:void 0;return t===`get_attrs`?{ref:n,action:`get attrs`}:{ref:n,action:`get text`,text:typeof e.text==`string`?e.text:``}}function P(e){return e.kind===`found`?{found:!0,...typeof e.waitedMs==`number`?{waitedMs:e.waitedMs}:{}}:e.kind===`list`?{matches:e.matches.map(e=>({ref:e.ref,node:x(e.node)}))}:{ref:e.ref,...e.kind===`text`?{text:e.text}:{},node:x(e.node)}}function F(e,t){let n=Array.isArray(e.selectorChain)?e.selectorChain:void 0,r=xe(e),i=r?.kind===`ref`?z(r.ref):void 0,a=r?.kind===`selector`?r.selector:void 0,o={...i?{ref:i}:{},...a?{selector:a}:{},...n?{selectorChain:n}:{}};if(t===`attrs`)return o;let s=typeof e.text==`string`?e.text:``;return{...o,text:s,refLabel:be(s)}}function I(e){let{target:t}=e;return{...t.kind===`ref`?{ref:z(t.ref)}:{},...t.kind===`selector`?{selector:t.selector}:{},...typeof e.text==`string`?{text:e.text}:{},node:x(e.node)}}function L(e){let{node:t,preActionNodes:n,...r}=e;return r}function ve(e){return{waitedMs:e.waitedMs,...typeof e.text==`string`?{text:e.text}:{},...typeof e.selector==`string`?{selector:e.selector}:{},...typeof e.captures==`number`?{captures:e.captures}:{},...typeof e.nodeCount==`number`?{nodeCount:e.nodeCount}:{},...typeof e.hint==`string`?{hint:e.hint}:{}}}function ye(e){let{selectorChain:t,...n}=e;return n}function R(e,t,n,r,i,a){if(!t)return;let o=e.resolveCurrent(t);if(!o)return;let s=ie(o)&&i?y(i,{mode:a}):void 0;e.recordAction(t,{command:n.command,positionals:n.positionals??[],flags:n.flags??{},result:r,interactiveObservation:te(n),...s?{targetEvidence:s,targetEvidenceMode:a??`action`}:{}})}function be(e){let t=e.trim();if(!(!t||t.length>80||/[\r\n]/.test(t)))return t}function xe(e){let t=e.target;if(!t||typeof t!=`object`)return;let n=t;if(n.kind===`ref`&&typeof n.ref==`string`)return{kind:`ref`,ref:n.ref};if(n.kind===`selector`&&typeof n.selector==`string`)return{kind:`selector`,selector:n.selector}}function z(e){return e.startsWith(`@`)?e.slice(1):e}async function B(e){let t=await j({...e,plan:m({hasActiveApp:e.session?.appBundleId!==void 0,intent:Se(e.command)}),readiness:!e.session});return t.ok?{ok:!0,operations:{capture:t.capture,...t.readTextAtPoint?{readText:t.readTextAtPoint}:{},...t.findText?{findText:t.findText}:{}}}:t}function Se(e){switch(e){case`is`:return`capture-only`;case`find`:case`get`:return`element-text`;case`wait`:return`wait-observation`}}const Ce=[[`snapshotDepth`,`--depth`],[`snapshotScope`,`--scope`],[`snapshotRaw`,`--raw`]];function V(e,t){let n=Ce.filter(([e])=>t?.[e]!==void 0).map(([,e])=>e);return n.length===0?null:s(`INVALID_ARGS`,`${e} @ref does not support ${n.join(`, `)}.`)}async function H(e,t){if(e.device.platform!==`android`||!e.appBundleId||e.lease?.leaseProvider||re(e.device))return null;if(!t)throw new i(`INTERNAL_ERROR`,`Android observation was not supplied by root runtime composition`);let n=await t.readAppState(e.device),r=n.package?.trim();if(!r||r===e.appBundleId)return null;let a=await t.isPermissionPackage(r);return!Ee(r)&&!a?null:{expectedPackage:e.appBundleId,foregroundPackage:r,activity:n.activity,hint:Te(a),...a?{permissionDialog:!0}:{}}}function we(e){return e.permissionDialog?`Android permission dialog is blocking ${e.expectedPackage}`:`${e.foregroundPackage} is foreground instead of ${e.expectedPackage}`}function Te(e){return e?`Use "alert get" to inspect it, then "alert accept" or "alert dismiss" to respond.`:`Use screenshot as visual truth, then take a fresh snapshot -i before retrying.`}function Ee(e){return e===`com.android.settings`||e===`com.android.systemui`||e.includes(`launcher`)}async function De(e){let{device:t,node:n,flags:r,appBundleId:i,traceOutPath:a,surface:o,contextFromFlags:s}=e,c=oe(n),d=e.readTextAtPoint;if(!d)return c;let f=ue(n.rect);if(!f||u(t)&&c&&!ae(n.type??``))return c;let p=s(r,i,a),m=await d({point:f,options:{appBundleId:i,surface:o},execution:C(p)});return m.status===`read`?m.text:(l({level:`warn`,phase:`interaction_read_fallback`,data:{reason:Oe(m.reason),nodeRef:n.ref,surface:o,platform:t.platform}}),c)}function Oe(e){switch(e){case`no-text-at-point`:return`no_text_at_point`;default:return e}}function U(e){let{sessionStore:t,ref:n}=e,r=0,i,a,o=t=>(e.consumedSnapshot&&(e.consumedSnapshot.state=t.snapshot),t);return{capture:async s=>{let c=n?t.requireCurrent(n):void 0,l=Date.now(),u=Ie(s,e.req.flags?.out),d=Me({timestamp:l,lastSnapshotAt:r,lastSnapshotResult:i,lastSnapshotCacheKey:a,session:c,request:s,cacheKey:u});if(d)return o(d);let f=Ne({session:c,timestamp:l,request:s});if(f)return r=f.createdAt,i={snapshot:f},a=u,o(i);let p=await ke({params:e,request:s});s.signal?.throwIfAborted();let m={snapshot:p};return Re({ref:n,sessionStore:t,snapshot:p}),r=l,i=m,a=u,o(m)}}}async function ke(e){let{params:n,request:r}=e,i=await W(n,r,r.snapshotScope);return r.recovery?.legacyIosSparse&&se(i)?t(i,await Ae({runtimeParams:n,request:r,policy:r.recovery.legacyIosSparse})):r.recovery?.sparseVerdictQueryScope?.shouldScope&&k(i.snapshotQuality)?t(i,await je({runtimeParams:n,request:r,policy:r.recovery.sparseVerdictQueryScope,snapshot:i})):i}async function Ae(e){let{runtimeParams:t,request:n,policy:r}=e;try{return await W(t,n,void 0,!1)}catch(e){if(!r.shouldScope)throw e;return await W(t,n,r.query,!1)}}async function je(e){let{runtimeParams:t,request:n,policy:r,snapshot:i}=e;try{return await W(t,n,r.query,!1)}catch{return i}}async function W(e,t,n,r=t.flags?.snapshotInteractiveOnly){let i=e.ref?e.sessionStore.requireCurrent(e.ref):void 0,a={...t.flags,snapshotInteractiveOnly:r},o=e.capture,s=await _e({device:e.device,session:i,flags:a,outPath:t.outPath??e.req.flags?.out,logPath:e.logPath??``,snapshotScope:n,includeRects:t.includeRects,signal:t.signal,captureData:async()=>await o(T({flags:a,logPath:e.logPath??``,meta:e.req.meta,session:i,snapshotScope:n,includeRects:t.includeRects,signal:t.signal}))});return b(e.captureProof,s.snapshot)}function Me(e){let{timestamp:t,lastSnapshotAt:n,lastSnapshotResult:r,lastSnapshotCacheKey:i,session:a,request:o,cacheKey:s}=e;if(o.cache?.forceFresh!==!0&&r&&i===s&&!(t-n>=750)&&!S(a)&&!G(a,o))return r}function Ne(e){let{session:t,timestamp:n,request:r}=e,i=t?.snapshot;if(!(!i||ge(i))&&Pe(t,r)&&Fe(i,n)&&i.presentationKey===K(r))return i}function Pe(e,t){return t.cache?.forceFresh===!0||t.cache?.useSessionSnapshot!==!0||S(e)||G(e,t)?!1:e.snapshot?.postGestureOutcome?.kind!==`unsettled`}function Fe(e,t){return t-e.createdAt<750}function G(e,t){return t.cache?.bypassForPostGestureStabilization===!0&&O(e)}function K(t){return c(e(Le(t)))}function Ie(e,t){return JSON.stringify({presentationKey:K(e),includeRects:e.includeRects===!0,outPath:e.outPath??t??null})}function Le(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function Re(e){let{ref:t,sessionStore:n,snapshot:r}=e;!t||k(r.snapshotQuality)||w(n.requireCurrent(t),r)}function q(e){return me({backend:Be(e),...ne(`selector commands`,{plural:!0}),sessions:D({sessionName:e.sessionName,sessionStore:e.sessionStore,ref:e.ref,recordOptions:{includeSnapshot:!0},setRecord:(e,t)=>{!t||!e.snapshot||w(t,e.snapshot)}}),signal:e.signal??de(e.req.meta?.requestId)})}async function ze(e,t){e.consumedSnapshot??={},e.captureProof??={};let n=e.sessionStore.lookup(e.sessionName),r=n?.session;return!r&&t?{ok:!1,response:a()}:{ok:!0,ref:n,session:r,device:r?.device??await _(e.req.flags??{})}}async function J(e,t){let n=await ze(e,t.requireSession);if(!n.ok)return n;let r=await B({command:t.command,device:n.device,session:n.session,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return r.ok?{ok:!0,ref:n.ref,runtime:q({...e,ref:n.ref,session:n.session,device:n.device,bound:r.operations})}:{ok:!1,response:r.response}}function Be(e){let{req:t,session:n,device:r,logPath:i,sessionName:a,sessionStore:o}=e,s=e.contextFromFlags??((e,t,n)=>pe(i??``,e,t,n)),c=e.bound?.readText,l=e.bound?.findText,u=T({flags:t.flags,logPath:i??``,meta:t.meta,session:n,snapshotScope:void 0}).execution,f=e.bound,p=f===void 0?void 0:U({ref:e.ref,device:r,sessionStore:o,sessionName:a,req:t,consumedSnapshot:e.consumedSnapshot,captureProof:e.captureProof,logPath:i,capture:f.capture});return{platform:d(r),captureSnapshot:p&&(async(e,n)=>{let i={...t.flags,...A(n)},a=n?.includeRects===!0,o=n?.scope??t.flags?.snapshotScope,s=t.command===`wait`||t.command===`find`||Ve(t)||a&&r.platform===`web`;return await p.capture({flags:i,signal:e.signal,snapshotScope:o,includeRects:a,cache:{forceFresh:s,useSessionSnapshot:!0,bypassForPostGestureStabilization:!0}})}),readText:async(e,i)=>({text:await De({readTextAtPoint:c,device:r,node:i,flags:t.flags,appBundleId:n?.appBundleId,traceOutPath:n?.trace?.outPath,surface:n?.surface,contextFromFlags:s})}),...l?{findText:async(e,t)=>{let{found:r}=await l({text:t,options:{appBundleId:n?.appBundleId,surface:n?.surface},execution:u,...e.signal?{signal:e.signal}:{}});return n&&fe(n),{found:r}}}:{}}}function Ve(e){if(e.command!==`is`)return!1;let t=g(e.positionals??[]);return t.ok&&t.predicate===`absent`}async function Y(e){let{req:t}=e;if(t.command!==`find`)return null;let n=t.positionals??[],r=p(n,t.flags);if(!r.ok)return s(r.code,r.message);let i=r.parsed,a=i.action;if(!f(a))return null;let o=await J(e,{requireSession:!1,command:`find`});if(!o.ok)return o.response;let c=await Q(async()=>{let n=await o.runtime.selectors.find({session:e.sessionName,requestId:t.meta?.requestId,locator:i.locator,query:i.query,action:a,timeoutMs:i.timeoutMs});R(e.sessionStore,o.ref,t,N(n,a));let r=P(n),s=typeof r.ref==`string`?[r.ref]:Array.isArray(r.matches)?r.matches.map(e=>e.ref).filter(e=>typeof e==`string`):[];if(s.length>0){let t=o.ref;if(t){let n=e.sessionStore.requireCurrent(t);if(E(n,s),n.snapshotGeneration!==void 0)return{...r,refsGeneration:n.snapshotGeneration}}}return r});return v({response:c,consumedTree:X(e),captureProof:e.captureProof})}function X(e){return e.consumedSnapshot?.state??e.sessionStore.get(e.sessionName)?.snapshot}async function He(e){let{req:t}=e;if(t.command!==`get`)return null;let n=h(t.positionals?.[0]);if(!n.ok)return s(n.code,n.message);let r=n.format,i=We(t);if(!i.ok)return i.response;if(i.target.kind===`ref`){let e=V(`get`,t.flags);if(e)return e}let a=t.internal?.replayTargetGuard,o=await J(e,{requireSession:!0,command:`get`});if(!o.ok)return o.response;let c=o.runtime,l=i.target.kind===`ref`?he({session:e.sessionStore.get(e.sessionName),ref:i.target.ref,mintedGeneration:i.refGeneration}):void 0,u=await Q(async()=>{let n=await c.selectors.get({session:e.sessionName,requestId:t.meta?.requestId,property:r,target:i.target,expectedResolvedTarget:a});R(e.sessionStore,o.ref,t,F(n,r),{node:n.node,preActionNodes:n.preActionNodes});let s=I(n);return l?{...s,warning:l}:s});return v({response:u,consumedTree:X(e),captureProof:e.captureProof})}async function Ue(e){let{req:t}=e;if(t.command!==`is`)return null;let n=g(t.positionals??[]);if(!n.ok)return s(n.code,n.message,n.hint?{hint:n.hint}:void 0);let{predicate:r,selectorExpression:i,expectedText:a}=n;if(r===`absent`){let e=le({depth:t.flags?.snapshotDepth,scope:t.flags?.snapshotScope});if(e){let t=ce(e);return s(t.code,t.message,t.details)}}let o=t.internal?.replayTargetGuard,c=await J(e,{requireSession:!0,command:`is`});if(!c.ok)return c.response;let l=await Q(async()=>{let n=await c.runtime.selectors.is({session:e.sessionName,requestId:t.meta?.requestId,predicate:r,selector:i,expectedText:a,expectedResolvedTarget:o}),s=Z(n),l=L(n);return R(e.sessionStore,c.ref,t,l,s),ye(l)});return v({response:await $(e,l,`is ${r}`),consumedTree:X(e),captureProof:e.captureProof})}function Z(e){let t=e.node,n=e.preActionNodes;if(!(!t||typeof t!=`object`||!Array.isArray(n)))return{node:t,preActionNodes:n}}function We(e){let t=e.positionals?.[1]??``;if(t.startsWith(`@`)){let n=M(t);return n.ok?{ok:!0,target:{kind:`ref`,ref:n.ref,fallbackLabel:e.positionals.length>2?e.positionals.slice(2).join(` `).trim():``},refGeneration:n.generation}:{ok:!1,response:n.response}}let n=ee(e.positionals?.slice(1)??[]);return n.ok?{ok:!0,target:{kind:`selector`,selector:`selector`in n?n.selector:``}}:{ok:!1,response:s(n.code,n.message)}}async function Q(e){try{return{ok:!0,data:await e()}}catch(e){let t=n(e);return s(t.code,t.message,t.details)}}async function $(e,t,n){if(t.ok)return t;let r=e.sessionStore.get(e.sessionName);if(!r)return t;let i;try{if(!e.androidObservation)return t;i=await H(r,e.androidObservation)}catch{return t}return i?s(t.error.code,`${n} failed because ${we(i)}.`,{...t.error.details??{},...i,blockedBy:`android_foreground_surface`,originalMessage:t.error.message}):t}export{$ as a,q as c,V as d,B as f,M as g,ve as h,Ue as i,U as l,L as m,Y as n,Z as o,R as p,He as r,Q as s,X as t,H as u};
|
|
1
|
+
import{A as e,C as t,I as n,M as r,P as i,f as a,h as o,s,y as c}from"./sdk-contracts.js";import{c as l,u,v as d,y as f}from"./back-mode.js";import{r as p}from"./diagnostics.js";import"./diagnostics2.js";import{E as m,h as ee}from"./sdk-device.js";import{Mn as h,Pn as te,Rt as ne,dr as re,fr as g,ur as ie}from"./sdk-batch.js";import{i as _}from"./target-evidence.js";import{t as v}from"./absence-observation-errors.js";import{i as ae}from"./rect-center.js";import{a as y}from"./android-system-chrome.js";import{d as oe}from"./replay-script-selection.js";import{r as se}from"./request-cancel.js";import"./request.js";import{n as ce}from"./provider-device-admission.js";import{Dt as le,H as ue,Ut as de,W as fe,X as b,a as pe,i as x,nt as me,rt as he}from"./internal/daemon.js";import{t as S}from"./snapshot-quality-verdict.js";import{c as ge,f as C,l as _e,r as w,t as T,u as E}from"./runtime-session.js";import{t as D}from"./backend-snapshot-options.js";import{i as O,n as k,t as A}from"./capture-disclosure.js";import{t as j}from"./snapshot-runtime-binding.js";function M(e){let t=r(e);return t?{ok:!0,ref:t.base,generation:t.generation}:{ok:!1,response:s(`INVALID_ARGS`,`Invalid ref "${e}" — malformed generation suffix.`,{hint:o})}}function N(e,t){if(t===`exists`)return{found:!0};if(t===`wait`)return{found:!0,waitedMs:e.waitedMs};if(t===`list`)return{action:`list`,matches:Array.isArray(e.matches)?e.matches.length:0};let n=typeof e.ref==`string`?e.ref:void 0;return t===`get_attrs`?{ref:n,action:`get attrs`}:{ref:n,action:`get text`,text:typeof e.text==`string`?e.text:``}}function P(e){return e.kind===`found`?{found:!0,...typeof e.waitedMs==`number`?{waitedMs:e.waitedMs}:{}}:e.kind===`list`?{matches:e.matches.map(e=>({ref:e.ref,node:y(e.node)}))}:{ref:e.ref,...e.kind===`text`?{text:e.text}:{},node:y(e.node)}}function F(e,t){let n=Array.isArray(e.selectorChain)?e.selectorChain:void 0,r=xe(e),i=r?.kind===`ref`?z(r.ref):void 0,a=r?.kind===`selector`?r.selector:void 0,o={...i?{ref:i}:{},...a?{selector:a}:{},...n?{selectorChain:n}:{}};if(t===`attrs`)return o;let s=typeof e.text==`string`?e.text:``;return{...o,text:s,refLabel:be(s)}}function I(e){let{target:t}=e;return{...t.kind===`ref`?{ref:z(t.ref)}:{},...t.kind===`selector`?{selector:t.selector}:{},...typeof e.text==`string`?{text:e.text}:{},node:y(e.node)}}function L(e){let{node:t,preActionNodes:n,...r}=e;return r}function ve(e){return{waitedMs:e.waitedMs,...typeof e.text==`string`?{text:e.text}:{},...typeof e.selector==`string`?{selector:e.selector}:{},...typeof e.captures==`number`?{captures:e.captures}:{},...typeof e.nodeCount==`number`?{nodeCount:e.nodeCount}:{},...typeof e.hint==`string`?{hint:e.hint}:{}}}function ye(e){let{selectorChain:t,...n}=e;return n}function R(e,t,n,r,i,a){if(!t)return;let o=e.resolveCurrent(t);if(!o)return;let s=de(o)&&i?_(i,{mode:a}):void 0;e.recordAction(t,{command:n.command,positionals:n.positionals??[],flags:n.flags??{},result:r,interactiveObservation:le(n),...s?{targetEvidence:s,targetEvidenceMode:a??`action`}:{}})}function be(e){let t=e.trim();if(!(!t||t.length>80||/[\r\n]/.test(t)))return t}function xe(e){let t=e.target;if(!t||typeof t!=`object`)return;let n=t;if(n.kind===`ref`&&typeof n.ref==`string`)return{kind:`ref`,ref:n.ref};if(n.kind===`selector`&&typeof n.selector==`string`)return{kind:`selector`,selector:n.selector}}function z(e){return e.startsWith(`@`)?e.slice(1):e}async function B(e){let t=await j({...e,plan:ne({hasActiveApp:e.session?.appBundleId!==void 0,intent:Se(e.command)}),readiness:!e.session});return t.ok?{ok:!0,operations:{capture:t.capture,...t.readTextAtPoint?{readText:t.readTextAtPoint}:{},...t.findText?{findText:t.findText}:{}}}:t}function Se(e){switch(e){case`is`:return`capture-only`;case`find`:case`get`:return`element-text`;case`wait`:return`wait-observation`}}const Ce=[[`snapshotDepth`,`--depth`],[`snapshotScope`,`--scope`],[`snapshotRaw`,`--raw`]];function V(e,t){let n=Ce.filter(([e])=>t?.[e]!==void 0).map(([,e])=>e);return n.length===0?null:s(`INVALID_ARGS`,`${e} @ref does not support ${n.join(`, `)}.`)}async function H(e,t){if(e.device.platform!==`android`||!e.appBundleId||e.lease?.leaseProvider||ce(e.device))return null;if(!t)throw new i(`INTERNAL_ERROR`,`Android observation was not supplied by root runtime composition`);let n=await t.readAppState(e.device),r=n.package?.trim();if(!r||r===e.appBundleId)return null;let a=await t.isPermissionPackage(r);return!Ee(r)&&!a?null:{expectedPackage:e.appBundleId,foregroundPackage:r,activity:n.activity,hint:Te(a),...a?{permissionDialog:!0}:{}}}function we(e){return e.permissionDialog?`Android permission dialog is blocking ${e.expectedPackage}`:`${e.foregroundPackage} is foreground instead of ${e.expectedPackage}`}function Te(e){return e?`Use "alert get" to inspect it, then "alert accept" or "alert dismiss" to respond.`:`Use screenshot as visual truth, then take a fresh snapshot -i before retrying.`}function Ee(e){return e===`com.android.settings`||e===`com.android.systemui`||e.includes(`launcher`)}async function De(e){let{device:t,node:n,flags:r,appBundleId:i,traceOutPath:a,surface:o,contextFromFlags:s}=e,c=d(n),l=e.readTextAtPoint;if(!l)return c;let u=ae(n.rect);if(!u||ee(t)&&c&&!f(n.type??``))return c;let m=s(r,i,a),h=await l({point:u,options:{appBundleId:i,surface:o},execution:pe(m)});return h.status===`read`?h.text:(p({level:`warn`,phase:`interaction_read_fallback`,data:{reason:Oe(h.reason),nodeRef:n.ref,surface:o,platform:t.platform}}),c)}function Oe(e){switch(e){case`no-text-at-point`:return`no_text_at_point`;default:return e}}function U(e){let{sessionStore:t,ref:n}=e,r=0,i,a,o=t=>(e.consumedSnapshot&&(e.consumedSnapshot.state=t.snapshot),t);return{capture:async s=>{let c=n?t.requireCurrent(n):void 0,l=Date.now(),u=Ie(s,e.req.flags?.out),d=Me({timestamp:l,lastSnapshotAt:r,lastSnapshotResult:i,lastSnapshotCacheKey:a,session:c,request:s,cacheKey:u});if(d)return o(d);let f=Ne({session:c,timestamp:l,request:s});if(f)return r=f.createdAt,i={snapshot:f},a=u,o(i);let p=await ke({params:e,request:s});s.signal?.throwIfAborted();let m={snapshot:p};return Re({ref:n,sessionStore:t,snapshot:p}),r=l,i=m,a=u,o(m)}}}async function ke(e){let{params:n,request:r}=e,i=await W(n,r,r.snapshotScope);return r.recovery?.legacyIosSparse&&u(i)?t(i,await Ae({runtimeParams:n,request:r,policy:r.recovery.legacyIosSparse})):r.recovery?.sparseVerdictQueryScope?.shouldScope&&S(i.snapshotQuality)?t(i,await je({runtimeParams:n,request:r,policy:r.recovery.sparseVerdictQueryScope,snapshot:i})):i}async function Ae(e){let{runtimeParams:t,request:n,policy:r}=e;try{return await W(t,n,void 0,!1)}catch(e){if(!r.shouldScope)throw e;return await W(t,n,r.query,!1)}}async function je(e){let{runtimeParams:t,request:n,policy:r,snapshot:i}=e;try{return await W(t,n,r.query,!1)}catch{return i}}async function W(e,t,n,r=t.flags?.snapshotInteractiveOnly){let i=e.ref?e.sessionStore.requireCurrent(e.ref):void 0,a={...t.flags,snapshotInteractiveOnly:r},o=e.capture,s=await w({device:e.device,session:i,flags:a,logPath:e.logPath??``,snapshotScope:n,includeRects:t.includeRects,signal:t.signal,captureData:async()=>await o(x({flags:a,logPath:e.logPath??``,meta:e.req.meta,session:i,snapshotScope:n,includeRects:t.includeRects,signal:t.signal}))});return A(e.captureProof,s.snapshot)}function Me(e){let{timestamp:t,lastSnapshotAt:n,lastSnapshotResult:r,lastSnapshotCacheKey:i,session:a,request:o,cacheKey:s}=e;if(o.cache?.forceFresh!==!0&&r&&i===s&&!(t-n>=750)&&!b(a)&&!G(a,o))return r}function Ne(e){let{session:t,timestamp:n,request:r}=e,i=t?.snapshot;if(!(!i||me(i))&&Pe(t,r)&&Fe(i,n)&&i.presentationKey===K(r))return i}function Pe(e,t){return t.cache?.forceFresh===!0||t.cache?.useSessionSnapshot!==!0||b(e)||G(e,t)?!1:e.snapshot?.postGestureOutcome?.kind!==`unsettled`}function Fe(e,t){return t-e.createdAt<750}function G(e,t){return t.cache?.bypassForPostGestureStabilization===!0&&fe(e)}function K(t){return c(e(Le(t)))}function Ie(e,t){return JSON.stringify({presentationKey:K(e),includeRects:e.includeRects===!0,outPath:e.outPath??t??null})}function Le(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function Re(e){let{ref:t,sessionStore:n,snapshot:r}=e;!t||S(r.snapshotQuality)||C(n.requireCurrent(t),r)}async function q(e){return await e.createCommandSurface({backend:Be(e),...O(`selector commands`,{plural:!0}),sessions:T({sessionName:e.sessionName,sessionStore:e.sessionStore,ref:e.ref,recordOptions:{includeSnapshot:!0},setRecord:(e,t)=>{!t||!e.snapshot||C(t,e.snapshot)}}),signal:e.signal??se(e.req.meta?.requestId)})}async function ze(e,t){e.consumedSnapshot??={},e.captureProof??={};let n=e.sessionStore.lookup(e.sessionName),r=n?.session;return!r&&t?{ok:!1,response:a()}:{ok:!0,ref:n,session:r,device:r?.device??await oe(e.req.flags??{})}}async function J(e,t){let n=await ze(e,t.requireSession);if(!n.ok)return n;let r=await B({command:t.command,device:n.device,session:n.session,inspectFacts:e.inspectFacts,platformServices:e.platformServices,bindDevice:e.bindDevice});return r.ok?{ok:!0,ref:n.ref,runtime:await q({...e,ref:n.ref,session:n.session,device:n.device,bound:r.operations})}:{ok:!1,response:r.response}}function Be(e){let{req:t,session:n,device:r,logPath:i,sessionName:a,sessionStore:o}=e,s=e.contextFromFlags??((e,t,n)=>ue(i??``,e,t,n)),c=e.bound?.readText,l=e.bound?.findText,u=x({flags:t.flags,logPath:i??``,meta:t.meta,session:n,snapshotScope:void 0}).execution,d=e.bound,f=d===void 0?void 0:U({ref:e.ref,device:r,sessionStore:o,sessionName:a,req:t,consumedSnapshot:e.consumedSnapshot,captureProof:e.captureProof,logPath:i,capture:d.capture});return{platform:m(r),captureSnapshot:f&&(async(e,n)=>{let i={...t.flags,...D(n)},a=n?.includeRects===!0,o=n?.scope??t.flags?.snapshotScope,s=t.command===`wait`||t.command===`find`||Ve(t)||a&&r.platform===`web`;return await f.capture({flags:i,signal:e.signal,snapshotScope:o,includeRects:a,cache:{forceFresh:s,useSessionSnapshot:!0,bypassForPostGestureStabilization:!0}})}),readText:async(e,i)=>({text:await De({readTextAtPoint:c,device:r,node:i,flags:t.flags,appBundleId:n?.appBundleId,traceOutPath:n?.trace?.outPath,surface:n?.surface,contextFromFlags:s})}),...l?{findText:async(e,t)=>{let{found:r}=await l({text:t,options:{appBundleId:n?.appBundleId,surface:n?.surface},execution:u,...e.signal?{signal:e.signal}:{}});return n&&he(n),{found:r}}}:{}}}function Ve(e){if(e.command!==`is`)return!1;let t=g(e.positionals??[]);return t.ok&&t.predicate===`absent`}async function Y(e){let{req:t}=e;if(t.command!==`find`)return null;let n=t.positionals??[],r=h(n,t.flags);if(!r.ok)return s(r.code,r.message);let i=r.parsed,a=i.action;if(!te(a))return null;let o=await J(e,{requireSession:!1,command:`find`});if(!o.ok)return o.response;let c=await Q(async()=>{let n=await o.runtime.selectors.find({session:e.sessionName,requestId:t.meta?.requestId,locator:i.locator,query:i.query,action:a,timeoutMs:i.timeoutMs});R(e.sessionStore,o.ref,t,N(n,a));let r=P(n),s=typeof r.ref==`string`?[r.ref]:Array.isArray(r.matches)?r.matches.map(e=>e.ref).filter(e=>typeof e==`string`):[];if(s.length>0){let t=o.ref;if(t){let n=e.sessionStore.requireCurrent(t);if(ge(n,s),n.snapshotGeneration!==void 0)return{...r,refsGeneration:n.snapshotGeneration}}}return r});return k({response:c,consumedTree:X(e),captureProof:e.captureProof})}function X(e){return e.consumedSnapshot?.state??e.sessionStore.get(e.sessionName)?.snapshot}async function He(e){let{req:t}=e;if(t.command!==`get`)return null;let n=re(t.positionals?.[0]);if(!n.ok)return s(n.code,n.message);let r=n.format,i=We(t);if(!i.ok)return i.response;if(i.target.kind===`ref`){let e=V(`get`,t.flags);if(e)return e}let a=t.internal?.replayTargetGuard,o=await J(e,{requireSession:!0,command:`get`});if(!o.ok)return o.response;let c=o.runtime,l=i.target.kind===`ref`?E({session:e.sessionStore.get(e.sessionName),ref:i.target.ref,mintedGeneration:i.refGeneration}):void 0,u=await Q(async()=>{let n=await c.selectors.get({session:e.sessionName,requestId:t.meta?.requestId,property:r,target:i.target,expectedResolvedTarget:a});R(e.sessionStore,o.ref,t,F(n,r),{node:n.node,preActionNodes:n.preActionNodes});let s=I(n);return l?{...s,warning:l}:s},{ref:o.ref,sessionStore:e.sessionStore,consumed:e.consumedSnapshot});return k({response:u,consumedTree:X(e),captureProof:e.captureProof})}async function Ue(e){let{req:t}=e;if(t.command!==`is`)return null;let n=g(t.positionals??[]);if(!n.ok)return s(n.code,n.message,n.hint?{hint:n.hint}:void 0);let{predicate:r,selectorExpression:i,expectedText:a}=n;if(r===`absent`){let e=l({depth:t.flags?.snapshotDepth,scope:t.flags?.snapshotScope});if(e){let t=v(e);return s(t.code,t.message,t.details)}}let o=t.internal?.replayTargetGuard,c=await J(e,{requireSession:!0,command:`is`});if(!c.ok)return c.response;let u=await Q(async()=>{let n=await c.runtime.selectors.is({session:e.sessionName,requestId:t.meta?.requestId,predicate:r,selector:i,expectedText:a,expectedResolvedTarget:o}),s=Z(n),l=L(n);return R(e.sessionStore,c.ref,t,l,s),ye(l)},{ref:c.ref,sessionStore:e.sessionStore,consumed:e.consumedSnapshot});return k({response:await $(e,u,`is ${r}`),consumedTree:X(e),captureProof:e.captureProof})}function Z(e){let t=e.node,n=e.preActionNodes;if(!(!t||typeof t!=`object`||!Array.isArray(n)))return{node:t,preActionNodes:n}}function We(e){let t=e.positionals?.[1]??``;if(t.startsWith(`@`)){let n=M(t);return n.ok?{ok:!0,target:{kind:`ref`,ref:n.ref,fallbackLabel:e.positionals.length>2?e.positionals.slice(2).join(` `).trim():``},refGeneration:n.generation}:{ok:!1,response:n.response}}let n=ie(e.positionals?.slice(1)??[]);return n.ok?{ok:!0,target:{kind:`selector`,selector:`selector`in n?n.selector:``}}:{ok:!1,response:s(n.code,n.message)}}async function Q(e,t){try{return{ok:!0,data:await e()}}catch(e){let r=t?_e(t.ref,t.sessionStore,n(e),t.consumed?.state):n(e);return s(r.code,r.message,r.details)}}async function $(e,t,n){if(t.ok)return t;let r=e.sessionStore.get(e.sessionName);if(!r)return t;let i;try{if(!e.androidObservation)return t;i=await H(r,e.androidObservation)}catch{return t}return i?s(t.error.code,`${n} failed because ${we(i)}.`,{...t.error.details??{},...i,blockedBy:`android_foreground_surface`,originalMessage:t.error.message}):t}export{$ as a,q as c,V as d,B as f,M as g,ve as h,Ue as i,U as l,L as m,Y as n,Z as o,R as p,He as r,Q as s,X as t,H as u};
|
package/dist/src/selectors.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Cn as e,Cr as t,En as n,Tn as r,Tr as i,br as a,wr as o,xr as s}from"./sdk-batch.js";import{t as c}from"./sdk-selectors.js";export{e as findSelectorChainMatch,c as formatSelectorFailure,o as isNodeEditable,i as isNodeVisible,a as isSelectorToken,r as listSelectorChainMatches,s as parseSelectorChain,n as resolveSelectorChain,t as tryParseSelectorChain};
|
package/dist/src/server.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{P as e,u as t}from"./sdk-contracts.js";import{v as n}from"./sdk-batch.js";import{
|
|
1
|
+
import{P as e,u as t}from"./sdk-contracts.js";import{v as n}from"./sdk-batch-runner.js";import{O as r}from"./back-mode.js";import{v as i}from"./sdk-batch.js";import{a}from"./version.js";import{a as o,i as s,r as c,t as ee}from"./command-tools.js";import{i as l,r as u,t as d}from"./cli-help.js";const f=`agent-device drives iOS, Android, tvOS, Android TV, macOS, Linux, and web apps. Tools mirror CLI commands of the same name; CLI flags are camelCase properties (--settle -> settle: true).
|
|
2
2
|
|
|
3
3
|
Start: known app -> call open {app, foreground: true} at once; do not probe with devices, apps, appstate, snapshot, or screenshot first. open returns the initial interactive snapshot with @refs. Unknown app id: devices, then apps, then open the discovered id; never invent ids. Existing session: continue from its state, do not reopen.
|
|
4
4
|
|
|
@@ -6,5 +6,5 @@ Loop: press/click/fill/longpress/hover/scroll/back with settle: true; the respon
|
|
|
6
6
|
|
|
7
7
|
Targets: copy refs byte-for-byte (@e12, @e12~s4; keep @ and any ~sN). Refs go stale after mutations. Prefer refs, then id/label/role selectors; coordinates last. On a sparse/AX-unavailable warning its refs and selectors are invalid: screenshot, read the image, press {x, y}, then snapshot the changed screen.
|
|
8
8
|
|
|
9
|
-
Errors carry hints; follow them instead of re-planning. Call help only for specialized work (gestures, scripting, TV, macOS, web, remote, debugging) or an unclear command shape, never at startup.`;function
|
|
9
|
+
Errors carry hints; follow them instead of re-planning. Call help only for specialized work (gestures, scripting, TV, macOS, web, remote, debugging) or an unclear command shape, never at startup.`;function p(){let e=new Set(i());return r().filter(t=>!e.has(t))}const m={name:`help`,description:`Usage guides. No topic: the full workflow card. topic = one of ${u().join(`, `)} for that guide, or a tool name for its complete flag reference. For specialized work or an unclear command shape only; not a startup step, not needed after an error that carries a hint.`,inputSchema:{type:`object`,properties:{topic:{type:`string`,description:`Guide topic or tool name; omit for the card.`}},additionalProperties:!1}},te=`CLI syntax over MCP: \`agent-device <command> <positionals> --flag\` = tool <command>; positionals are named properties (target, text, direction), flags camelCase (--settle -> settle: true, -i -> interactiveOnly: true). Terminal-only (no MCP tool; run in a shell): ${p().join(`, `)}.\n\n`;function ne(e){let t=e.topic;if(t!==void 0&&typeof t!=`string`)return h(`Expected topic to be a string.`,!0);let n=t?l(t):d();return n===null?h(`Unknown help topic: ${t}. ${m.description}`,!0):h(te+n)}function h(e,t=!1){return{isError:t,content:[{type:`text`,text:e}]}}const g=`2026-07-28`,_=[g],v=[`2025-11-25`,`2025-06-18`],y=[..._,...v],b=`server/discover`,x=new Set([`initialize`,`ping`]),S=`io.modelcontextprotocol/protocolVersion`,C=`io.modelcontextprotocol/clientCapabilities`,w=`io.modelcontextprotocol/clientInfo`,T=36e5;var E=class extends Error{requested;constructor(e){super(`Unsupported MCP protocol version: ${e}. Supported: ${y.join(`, `)}.`),this.requested=e}get data(){return{supported:y,requested:this.requested}}};function D(t,r){let i=I(I(r)._meta),a=L(i,S);if(a===void 0){if(t===b)throw new e(`INVALID_ARGS`,`Expected _meta["${S}"] on ${b}.`);return`legacy`}if(!y.includes(a))throw new E(a);if(!n(i[C]))throw new e(`INVALID_ARGS`,`Expected _meta["${C}"] to be an object.`);let o=i[w];if(o!==void 0&&!j(o))throw new e(`INVALID_ARGS`,`Expected _meta["${w}"] to be a valid Implementation.`);if(!_.includes(a)){if(t===b)throw new E(a);return`legacy`}return`modern`}function O(e){let t=L(I(e),`protocolVersion`);return t!==void 0&&v.includes(t)?t:`2025-11-25`}function re(e,t){return t===`modern`&&x.has(e)}function k(){return{name:`agent-device`,version:a()}}function ie(e,t){return t===`legacy`||typeof e!=`object`||!e?e:{resultType:`complete`,...e,_meta:{...e._meta,"io.modelcontextprotocol/serverInfo":k()}}}function A(e,t){return e===`modern`?{ttlMs:t,cacheScope:`public`}:void 0}function j(e){return!n(e)||!P(e.name)||!P(e.version)?!1:N(e.title,P)&&N(e.description,P)&&N(e.websiteUrl,P)&&N(e.icons,e=>Array.isArray(e)&&e.every(M))}function M(e){return!n(e)||!P(e.src)?!1:N(e.mimeType,P)&&N(e.sizes,F)&&N(e.theme,e=>e===`light`||e===`dark`)}function N(e,t){return e===void 0||t(e)}function P(e){return typeof e==`string`}function F(e){return Array.isArray(e)&&e.every(P)}function I(e){return n(e)?e:{}}function L(e,t){let n=e[t];return typeof n==`string`&&n.length>0?n:void 0}async function R(e){if(e.jsonrpc!==`2.0`||typeof e.method!=`string`)return U(e.id??null,-32600,`Invalid JSON-RPC request.`);if(e.id===void 0)return null;try{let t=D(e.method,e.params),n=await z(e.method,e.params,t);return H(e.id,ie(n,t))}catch(t){return t instanceof E?U(e.id,-32022,t.message,t.data):t instanceof q?U(e.id,-32601,t.message):U(e.id,-32602,t instanceof Error?t.message:String(t))}}async function z(e,t,n){if(re(e,n))throw new q(`${e} was removed in MCP ${g}.`);switch(e){case`server/discover`:return{supportedVersions:y,capabilities:{tools:{}},instructions:f,ttlMs:T,cacheScope:`public`};case`initialize`:return{protocolVersion:O(t),capabilities:{tools:{}},serverInfo:k(),instructions:f};case`ping`:return{};case`tools/list`:return{tools:[...c(),m],...A(n,T)};case`tools/call`:return await B(t);default:throw new q(`Unsupported MCP method: ${e}`)}}async function B(e){let t=W(e),n=K(t,`name`);try{return n===`help`?ne(G(t.arguments)):await ee.execute(n,G(t.arguments))}catch(e){return V(s(o(e)),!0)}}function V(e,t=!1){return{isError:t,content:[{type:`text`,text:e}]}}function H(e,t){return{jsonrpc:`2.0`,id:e,result:t}}function U(e,t,n,r){return{jsonrpc:`2.0`,id:e,error:{code:t,message:n,...r?{data:r}:{}}}}function W(t){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`Expected object parameters.`);return t}function G(e){return e===void 0?{}:W(e)}function K(t,n){let r=t[n];if(typeof r!=`string`||r.length===0)throw new e(`INVALID_ARGS`,`Expected ${n} to be a non-empty string.`);return r}var q=class extends Error{};async function J(){let e=Y(),t=new ce(t=>{e.push(t)});process.stdin.setEncoding(`utf8`),process.stdin.on(`data`,e=>{try{t.push(e)}catch(e){$({jsonrpc:`2.0`,id:null,error:{code:-32700,message:e instanceof Error?e.message:String(e)}})}}),await new Promise(e=>{process.stdin.on(`end`,e),process.stdin.on(`close`,e),process.stdin.resume()}),await e.idle()}function Y(e={}){let t=e.handlePayload??X,n=e.write??$,r=Promise.resolve();return{push:e=>{let i=se(e);r=r.then(async()=>{let r=await t(e);r&&n(r)}).catch(e=>{n({jsonrpc:`2.0`,id:i,error:{code:-32603,message:e instanceof Error?e.message:String(e)}})})},idle:async()=>{await r}}}function X(e){return Array.isArray(e)?ae(e):Z(e)}async function ae(e){let t=[];for(let n of e)t.push(...le(await Z(n)));return t.length>0?t:null}async function Z(e){let n;try{n=t.parse(e)}catch{return oe(Q(e))}return R(n)}function oe(e){return{jsonrpc:`2.0`,id:e,error:{code:-32600,message:`Invalid JSON-RPC request.`}}}function se(e){return Array.isArray(e)?e.length===1?Q(e[0]):null:Q(e)}function Q(e){if(e&&typeof e==`object`&&!Array.isArray(e)){let t=e.id;if(typeof t==`string`||typeof t==`number`||t===null)return t}return null}var ce=class{buffer=``;sink;constructor(e){this.sink=e}push(e){for(this.buffer+=e;;){let e=this.tryReadLineMessage();if(e!==void 0){this.emit(e);continue}break}}tryReadLineMessage(){let e=this.buffer.indexOf(`
|
|
10
10
|
`);if(e===-1)return;let t=this.buffer.slice(0,e).trim();return this.buffer=this.buffer.slice(e+1),t.length>0?t:void 0}emit(e){this.sink(JSON.parse(e))}};function le(e){return e?[e]:[]}function $(e){process.stdout.write(`${JSON.stringify(e)}\n`)}export{Y as createMcpPayloadQueue,X as handleMcpPayload,J as runAgentDeviceMcpServer};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{P as e}from"./sdk-contracts.js";import{
|
|
1
|
+
import{P as e}from"./sdk-contracts.js";import{a as t,g as n,o as r,p as i,u as a}from"./src.js";import{n as o}from"./provider-profile-fields.js";import{assertLimrunUploadedAppAccess as s,resolveInstalledAppIdForAsset as c,resolveLimrunAppAsset as l}from"./app-catalog.js";function u(e){o(e?.flags,i)}async function d(e,t,n){let r=n?.initialApp,i=typeof r==`string`?r.trim():``;if(i)return s(n?.publicNetworkOnly),await l(e,t,i,n?.signal)}async function f(n,r){let i=await t(n).listApps(`user-installed`),a=c(r.name,i);if(a)return a;throw new e(`COMMAND_FAILED`,`Limrun installed ${r.name}, but its application identifier could not be resolved unambiguously.`,{asset:r.name,installedApps:i.map(e=>e.id)})}async function p(t){let i=await t.limrun.iosInstances.create({wait:!0,metadata:t.metadata,spec:{...t.region?{region:t.region}:{},...t.app?{initialAssets:[{kind:`App`,source:`AssetID`,assetId:t.app.id,launchMode:`RelaunchIfRunning`}]}:{}}});try{if(!i.status.apiUrl)throw new e(`COMMAND_FAILED`,`Limrun iOS instance did not expose apiUrl`);return await r({lease:t.lease,instanceId:i.metadata.id,ownership:`created`,device:n(`ios`,t.lease,i.metadata.id),apiUrl:i.status.apiUrl,token:i.status.token},t.dependencies)}catch(e){throw await t.limrun.iosInstances.delete(i.metadata.id).catch(()=>{}),e}}async function m(t){let r=await t.limrun.androidInstances.create({wait:!0,metadata:t.metadata,spec:{...t.region?{region:t.region}:{},...t.app?{initialAssets:[{kind:`App`,source:`AssetIDs`,assetIds:[t.app.id]}]}:{}}});try{if(!r.status.apiUrl||!r.status.adbWebSocketUrl)throw new e(`COMMAND_FAILED`,`Limrun Android instance did not expose API and ADB websocket endpoints`);return await a({lease:t.lease,instanceId:r.metadata.id,ownership:`created`,device:n(`android`,t.lease,r.metadata.id),apiUrl:r.status.apiUrl,token:r.status.token,adbUrl:r.status.adbWebSocketUrl},t.dependencies)}catch(e){throw await t.limrun.androidInstances.delete(r.metadata.id).catch(()=>{}),e}}export{m as allocateLimrunAndroidSession,p as allocateLimrunIosSession,u as rejectRefusedLimrunProfileFields,f as resolvePreinstalledAppId,d as resolveRequestedLimrunAppAsset};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{S as e,at as t}from"./sdk-contracts.js";import"./sdk-batch-runner.js";import{G as n,Y as r,m as i}from"./back-mode.js";import{r as a}from"./diagnostics.js";import"./diagnostics2.js";import{Gn as o,_n as s,hn as c,sr as l,yn as u}from"./sdk-batch.js";import{n as d,o as f}from"./target-evidence.js";import{n as p,t as m}from"./target-evidence-tree.js";import{i as h}from"./retry.js";import"./retry2.js";import{t as g}from"./android-snapshot-quality.js";import{a as _,n as ee,t as v}from"./replay-divergence.js";import{n as y}from"./snapshot-chrome.js";import{g as b}from"./replay-script-selection.js";import{t as x}from"./snapshot-quality-verdict.js";import S from"node:fs";import C from"node:path";function te(e){let{req:t,sessionName:n,metadata:r,resolvedPath:i}=e,a=t.flags??{},o={AD_SESSION:n,AD_FILENAME:w(t,i)};return E(o,`AD_PLATFORM`,a.platform??r.platform),E(o,`AD_TARGET`,a.target??r.target),E(o,`AD_DEVICE`,a.device),E(o,`AD_DEVICE_ID`,T(a)),D(o,`AD_SHARD_INDEX`,a.shardIndex),D(o,`AD_SHARD_COUNT`,a.shardCount),E(o,`AD_ARTIFACTS`,a.artifactsDir),o}function w(e,t){let n=e.meta?.cwd??process.cwd();return C.relative(n,t)||t}function T(e){return typeof e.serial==`string`?e.serial:e.udid}function E(e,t,n){typeof n==`string`&&n.length>0&&(e[t]=n)}function D(e,t,n){typeof n==`number`&&(e[t]=String(n))}function O(e,n){if(e)try{S.appendFileSync(e,`${JSON.stringify(t(n))}\n`)}catch(t){a({level:`warn`,phase:`replay_trace_write_failed`,data:{path:e,error:t instanceof Error?t.message:String(t)}})}}const k={id:0,"role-label":1,label:2,other:3};function A(e){let t=new Map;for(let n of e){let e=t.get(n.nodeIndex);(!e||j(n.basis)<j(e.basis))&&t.set(n.nodeIndex,n)}return[...t.values()].sort((e,t)=>j(e.basis)-j(t.basis)||e.nodeIndex-t.nodeIndex)}function j(e){return k[e]}function M(e){if(e.length===0)return{selectorExpression:null,selectorTimeout:null};let t=e.at(-1),n=t!==void 0&&/^\d+$/.test(t)?t:null,r=n===null?e.slice():e.slice(0,-1),i=s(`positional`,r);return i.kind!==`expression`||i.rest.length>0?{selectorExpression:null,selectorTimeout:null}:{selectorExpression:i.expression,selectorTimeout:n}}function ne(e){let t=[],n=Array.isArray(e.result?.selectorChain)&&e.result?.selectorChain.every(e=>typeof e==`string`)?e.result.selectorChain:[];if(t.push(...n),r(e.command)){let n=re(e),r=n[0]??``;r&&!r.startsWith(`@`)&&t.push(n.join(` `))}if(e.command===`fill`){let n=e.positionals?.[0]??``;n&&!n.startsWith(`@`)&&Number.isNaN(Number(n))&&t.push(n)}if(e.command===`get`){let n=e.positionals?.[1]??``;n&&!n.startsWith(`@`)&&t.push(e.positionals.slice(1).join(` `))}if(e.command===`is`){let n=s(`is`,[...e.positionals]);n.kind===`expression`&&t.push(n.expression)}if(e.command===`wait`){let{selectorExpression:n}=M([...e.positionals]);n&&t.push(n)}return l(t).filter(e=>e.trim().length>0)}function re(e){let t=e.positionals;if(e.command!==`longpress`)return t;let n=t.at(-1);return t.length>1&&ie(n)?t.slice(0,-1):t}function ie(e){return e===void 0||e.trim()===``?!1:Number.isFinite(Number(e))}function ae(e){let t=C.dirname(e),n=C.basename(e,C.extname(e));return C.join(t,`${n}.healed.ad`)}function N(e){let t=oe({failedIndex:e.failedIndex,actions:e.actions,planDigest:e.planDigest,repairHint:e.repairHint,sessionExists:e.resumeStamper.sessionExists()});return e.resumeStamper.stampCorrectiveWatermark({resume:t,repairHint:e.repairHint,failedIndex:e.failedIndex,actions:e.actions}),t}function oe(e){let{failedIndex:t,actions:n,planDigest:r,repairHint:i,sessionExists:a}=e,o=i===`record-and-heal`?t+1:t,s=se({failedIndex:t,actions:n,repairHint:i,sessionExists:a});return{allowed:!0,from:o,planDigest:r,...s===void 0?{}:{alternateFrom:s}}}function se(e){let{failedIndex:t,actions:n,repairHint:r,sessionExists:i}=e;if(r!==`caution`&&r!==`manual`)return;let a=t+1;if(!(a>n.length&&!i))return a}function P(e){let{kind:t,targetEvidence:n,capture:r}=e;if(t===`identity-mismatch`)return`caution`;if(t===`identity-unverifiable`||!n||r.state!==`available`||!ce(n))return`manual`;let i=le(n,r.nodes);return t===`selector-miss`?i?`record-and-heal`:`state-repair`:i?`record-and-heal`:`manual`}function ce(e){return e.ancestry.length>0||e.scrollRegion!==void 0&&F(e.scrollRegion)}function le(e,t){let n=p(t),r=L(e.ancestry,n,t),i=e.scrollRegion;return i&&F(i)?r&&I(i,n,t):r}function F(e){return e.id!==void 0||e.label!==void 0}function I(e,t,n){return n.some(n=>f(d(n,t),e))}function L(e,t,n){return e.length===0?n.length>0:n.some(n=>{let r=m(n,t,e.length);return!r.broken&&o(r.chain,e)})}function R(e){let{sessionStore:n,observationStore:r,divergence:i,responseLevel:a}=e,o,s,c=v({divergence:i,level:a,writeOverflowArtifact:e=>{let r=t(e),i=V(n,r);return`artifactPath`in i&&(o=r,s=i.artifactPath),i}}),l=(o??c).screen;if(l.state!==`available`||l.refs.length===0)return e.evidence&&r.bindAuthority(e.signal).finalize(e.evidence,{refsGeneration:l.state===`available`?l.refsGeneration:void 0,refs:[]}),c;if(!e.evidence)return B(s),z(c,`missing-evidence`);let u=r.bindAuthority(e.signal).finalize(e.evidence,{refsGeneration:l.refsGeneration,refs:l.refs.map(e=>e.ref)});return u.published===!0?c:(B(s),z(c,u.reason))}function z(e,t){let{overflow:n,...r}=e;return{...r,screen:{state:`unavailable`,reason:`ref-publication-${t}`,hint:`The replay observation changed before its refs could be published. Take a new snapshot before targeting an element.`},suggestions:e.suggestions.map(({ref:e,...t})=>t),...e.targetBinding?{targetBinding:{...e.targetBinding,candidates:e.targetBinding.candidates.map(({ref:e,...t})=>t)}}:{}}}function B(e){if(e)try{S.unlinkSync(e)}catch{}}function V(e,t){try{let n=C.join(e.ensureSessionDir(),`replay-divergence`);S.mkdirSync(n,{recursive:!0});let r=`${Date.now()}-step${t.step.index}.json`,i=C.join(n,r);return S.writeFileSync(i,`${JSON.stringify(t,null,2)}\n`),{artifactPath:i}}catch{return{artifactUnavailable:!0}}}async function H(e){let{error:t,action:r,index:i,sourcePath:a,sourceLine:o,session:s,sessionStore:c,observationStore:l,resumeStamper:u,logPath:d,responseLevel:f,scrubVars:p=[],planActions:m,planDigest:h,signal:g}=e,_=ee(p),v={code:t.code,message:_(t.message),...t.hint?{hint:_(t.hint)}:{}},y=s?await W({session:s,observationStore:l,logPath:d,action:r}):{state:`unavailable`,reason:`no-session`,hint:`The session closed before a post-failure screen could be captured.`},b=K(y,_),x=y.state===`available`&&s?ge({action:r,session:s,nodes:y.nodes,sanitize:_}):[],S=P({kind:`action-failure`,targetEvidence:r.targetEvidence,capture:U(y)}),C=N({failedIndex:i+1,actions:m,planDigest:h,repairHint:S,resumeStamper:u});return R({sessionStore:c,observationStore:l,divergence:{version:1,kind:`action-failure`,step:{index:i+1,source:{path:_(a),line:o}},action:_(n(r)),cause:v,screen:b,suggestions:x.slice(0,5),suggestionCount:x.length,resume:C,repairHint:S},responseLevel:f,evidence:y.state===`available`?y.evidence:void 0,...g?{signal:g}:{}})}function U(e){return e.state===`available`?{state:`available`,nodes:e.nodes}:{state:`unavailable`}}const ue=[300,500,800,1200,2e3,3e3,4e3];async function W(e){let{session:t,observationStore:n,logPath:r,action:i,retryLaunchRace:a=!1}=e,o=de(i),s=Date.now()+12e3,c=n.bindAuthority(),l=await G({session:t,observation:c,logPath:r,flags:o});if(!a)return l.observation;for(let e of ue){if(l.observation.state===`available`||!l.retryable)break;let n=s-Date.now();if(n<=0)break;await h(Math.min(e,n)),l=await G({session:t,observation:c,logPath:r,flags:o})}return l.observation}async function G(e){let{session:t,observation:n,logPath:r,flags:i}=e;try{let e=(await n.capture({flags:i,logPath:r})).snapshot;if(x(e.snapshotQuality))return{observation:{state:`unavailable`,reason:`sparse-snapshot`,hint:`The post-failure snapshot was sparse or unavailable; run snapshot -i to observe the current screen.`},retryable:!0};let a=n.store(e);return{observation:{state:`available`,nodes:e.nodes,refsGeneration:a.refsGeneration,evidence:a.evidence,appBundleId:t.appBundleId},retryable:!1}}catch(e){return{observation:{state:`unavailable`,reason:`capture-failed`,hint:`Post-failure snapshot capture failed (${e instanceof Error?e.message:String(e)}); the original replay failure is unaffected.`},retryable:g(e)}}}function de(e){return{snapshotInteractiveOnly:fe(e)}}function fe(e){return!J(e.command)||Y(e).requiresRect}function K(e,t){if(e.state===`unavailable`)return{state:`unavailable`,reason:t(e.reason),hint:t(e.hint)};let{refs:n,truncated:r}=he(e.nodes,t,e.appBundleId);return{state:`available`,refsGeneration:e.refsGeneration,refs:n,...r?{truncated:!0}:{}}}function pe(t){return!!i(t,e(t.type??`Element`))||t.hittable===!0}function q(e,t){return t!==void 0&&e.bundleId!==void 0&&e.bundleId!==t&&e.hittable===!0}function me(e,t){let n=y(e,t),r=e.filter(e=>e.ref&&!n.has(e.ref)&&pe(e)),i=r.length>0?r:e.filter(e=>e.ref&&e.hittable===!0),a=i.filter(e=>e.interactionBlocked!==`covered`),o=a.length>0?a:i,s=[...o.filter(e=>q(e,t)),...o.filter(e=>!q(e,t))],c=s.slice(0,20);return{nodes:c,truncated:s.length>c.length}}function he(t,n,r){let{nodes:a,truncated:o}=me(t,r);return{refs:a.map(t=>{let r=e(t.type??`Element`),a=i(t,r);return{ref:t.ref,role:n(r),...a?{label:n(a)}:{}}}),truncated:o}}function ge(e){let{action:t,session:n,nodes:r,sanitize:i}=e;if(!J(t.command))return[];let a=ne(t);return a.length===0?[]:X({candidates:a,nodes:r,session:n,action:t,matching:Y(t),sanitize:i})}function J(e){return r(e)||[`fill`,`get`,`is`,`wait`].includes(e)}function Y(e){let t=r(e.command);return{requiresRect:t||e.command===`fill`,allowDisambiguation:t||e.command===`fill`||e.command===`get`&&e.positionals?.[0]===`text`}}function X(e){let{candidates:t,nodes:n,session:r,action:i,matching:a,sanitize:o}=e,s=[];for(let e of t){let t=_e({candidate:e,nodes:n,session:r,action:i,matching:a,sanitize:o});t&&s.push(t)}return A(s).map(e=>e.suggestion)}function _e(e){let{candidate:t,nodes:n,session:r,action:i,matching:a,sanitize:o}=e,s=u(t,n,{platform:r.device.platform,requireRect:a.requiresRect,allowDisambiguation:a.allowDisambiguation});if(s)return{suggestion:Z({node:s.node,nodes:n,session:r,action:i,basis:s.basis,sanitize:o}),basis:s.basis,nodeIndex:s.node.index}}function Z(t){let{node:n,nodes:a,session:o,action:s,basis:l,sanitize:u}=t,d=c(n,o.device.platform,{action:s.command===`fill`?`fill`:r(s.command)?`click`:`get`,nodes:a}),f=e(n.type??`Element`),p=i(n,f);return{selector:u(d.join(` || `)),basis:l,...n.ref?{ref:n.ref}:{},role:u(f),...p?{label:u(p)}:{}}}function ve(e){return ye({...e,hint:e.hint??$(e.details,`hint`),diagnosticId:e.diagnosticId??$(e.details,`diagnosticId`),logPath:e.logPath??$(e.details,`logPath`)})}function ye(e){return e.details?.reason===`android_shell_text_unsupported`?{...e,hint:"On emulators the test IME activates automatically; on real devices pass `--test-ime` to this test/replay run to enable it for the sessions the flow opens (see `agent-device doctor` for the current IME state)."}:e}function be(e){let{error:t,action:r,step:i,replayPath:a,artifactPaths:o,snapshotDiagnostics:s,divergence:c,scrubVars:l}=e;return Q({error:t,actionLabel:n(r),action:r.command,positionals:b(r)??[],step:i,replayPath:a,artifactPaths:o,snapshotDiagnostics:s,divergence:c,scrubVars:l})}function Q(e){let{error:t,actionLabel:n,action:r,positionals:i,step:a,replayPath:o,artifactPaths:s,snapshotDiagnostics:c,divergence:l,scrubVars:u,warnings:d}=e;return{ok:!1,error:{code:`REPLAY_DIVERGENCE`,message:_(`Replay failed at step ${a} (${n}): ${t.message}`,u),hint:t.hint===void 0?void 0:_(t.hint,u),diagnosticId:t.diagnosticId,logPath:t.logPath,...t.retriable===void 0?{}:{retriable:t.retriable},...t.supportedOn===void 0?{}:{supportedOn:t.supportedOn},details:{...Se(t.details),replayPath:o,step:a,action:r,positionals:i,artifactPaths:s,...c?{snapshotDiagnostics:c}:{},...d&&d.length>0?{warnings:d.map(e=>_(e,u))}:{},divergence:l}}}}function $(e,t){let n=e?.[t];return typeof n==`string`&&n.length>0?n:void 0}const xe=[`readiness`,`reason`,`recovery`,`retriable`,`snapshotQuality`,`supportedOn`,`systemSurface`];function Se(e){if(!e)return{};let t={};for(let n of xe)e[n]!==void 0&&(t[n]=e[n]);return t}export{Z as a,Y as c,P as d,N as f,te as g,O as h,K as i,U as l,A as m,Q as n,H as o,ae as p,ve as r,W as s,be as t,R as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{P as e}from"./sdk-contracts.js";import{
|
|
1
|
+
import{P as e}from"./sdk-contracts.js";import{c as t}from"./internal/daemon.js";function n(e,n){return n.available?void 0:t(e,n)}function r(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime facts inspection is unavailable.`,{reason:`runtime-gateway-missing`})}const i=new WeakMap;let a;(class e{static{a=(t,n)=>{let r=new e;return i.set(r,{device:Object.freeze({...t}),plan:n}),Object.freeze(r),r}}#e;constructor(){this.#e=void 0}get admitted(){return this.#e,!0}});function o(t){let n=i.get(t);if(n===void 0)throw new e(`COMMAND_FAILED`,`Runtime plan admission is not one minted by admitRuntimePlan; refusing to bind.`);return n}async function s(e){let t=await r(e.inspectFacts)(e.device);for(let n of e.plan.use.required){let e=t.operations[n];if(!e.available)return{admitted:!1,operation:n,fact:e}}return a(e.device,e.plan)}function c(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime binding is unavailable.`,{reason:`runtime-gateway-missing`})}export{o as a,n as i,c as n,r,s as t};
|
package/dist/src/session.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ct as e}from"./tv-remote.js";const t=[`app`,`frontmost-app`,`desktop`,`menubar`],n=e(t,{normalize:e=>e.trim().toLowerCase(),message:e=>`Invalid surface: ${e}. Use ${t.join(`|`)}.`});function r(e){return n.parse(e)}const i=[`xctest`,`native`],a=`AGENT_DEVICE_MACOS_APP_BACKEND`,o=e(i,{normalize:e=>e.trim().toLowerCase(),message:e=>`Invalid ${a}: ${e}. Use ${i.join(`|`)}.`});function s(e){let t=e(a);return t===void 0||t.trim()===``?`xctest`:o.parse(t)}const c={"frontmost-app":`macos-helper`,desktop:`macos-helper`,menubar:`macos-helper`};function l(e,t){let n=e??`app`;return n===`app`?t===`native`?`macos-helper`:`xctest`:c[n]}function u(e,t){let n=e??`app`;return l(n,t)===`macos-helper`?n:void 0}export{s as a,r as i,u as n,l as r,t};
|