agent-device 0.21.23 → 0.21.24
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.24.apk} +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.24.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.24.manifest.json} +4 -4
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.23.apk → agent-device-android-snapshot-helper-0.21.24.apk} +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.24.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.23.manifest.json → agent-device-android-snapshot-helper-0.21.24.manifest.json} +6 -6
- 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/AgentDeviceRunnerUITests/RunnerTests+CommandDispatch.swift +56 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +14 -5
- 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+SnapshotCaptureTarget.swift +1 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotExecution.swift +29 -5
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +34 -10
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +19 -5
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +3 -3
- package/dist/src/adapter.js +1 -1
- 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-device-client.js +2 -2
- package/dist/src/alert-runtime.js +1 -1
- package/dist/src/alert.js +1 -1
- package/dist/src/android-adb.d.ts +3 -2
- package/dist/src/android-input-ownership.js +1 -1
- package/dist/src/app-backend.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 +1 -1
- package/dist/src/app-log-runtime2.js +3 -3
- 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/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/browserstack-connection.js +1 -0
- package/dist/src/browserstack-device-features.js +1 -0
- package/dist/src/browserstack.js +1 -0
- package/dist/src/cache.js +1 -1
- package/dist/src/cli-config.js +1 -1
- package/dist/src/cli-help.js +35 -19
- package/dist/src/cli-runner.js +1 -1
- package/dist/src/cli.js +3 -4
- package/dist/src/client-companion-tunnel.js +1 -0
- package/dist/src/client-metro-companion.js +1 -1
- package/dist/src/client-metro.js +1 -1
- package/dist/src/client-types.d.ts +7 -5
- package/dist/src/cloud-artifacts.d.ts +3 -2
- package/dist/src/command-metadata.js +1 -1
- package/dist/src/command-schema.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/daemon-client-lease-beat.js +1 -1
- package/dist/src/daemon-client-lifecycle.js +1 -1
- package/dist/src/daemon-client-transport.js +1 -1
- package/dist/src/daemon-http.js +1 -1
- package/dist/src/daemon-policy-file.js +1 -1
- package/dist/src/daemon-registration-owner.js +1 -1
- package/dist/src/device-claim-inspection.js +1 -1
- package/dist/src/device-input-state.d.ts +2 -15
- package/dist/src/device-readiness-runtime.js +1 -1
- package/dist/src/device-selection-resolver.js +1 -1
- package/dist/src/device.js +1 -1
- package/dist/src/device2.js +1 -1
- package/dist/src/device3.js +1 -1
- package/dist/src/dispatch-resolve.js +3 -3
- 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/exec.js +1 -1
- package/dist/src/file.js +1 -1
- package/dist/src/find.js +1 -1
- package/dist/src/finders.js +1 -1
- package/dist/src/format.js +2 -1
- package/dist/src/gesture-admission.js +1 -1
- package/dist/src/gesture-plan-types.d.ts +2 -5
- package/dist/src/gesture-runtime.js +1 -1
- package/dist/src/human-control.js +1 -1
- package/dist/src/ime-rebind.js +1 -1
- package/dist/src/ime-settings-record.js +1 -0
- package/dist/src/ime-state.js +1 -1
- package/dist/src/index.d.ts +3 -3
- package/dist/src/input-actions.js +1 -1
- package/dist/src/input-actions2.js +1 -1
- package/dist/src/install-source2.js +1 -1
- package/dist/src/interaction-positionals.js +1 -1
- package/dist/src/interaction-ref-policy.js +1 -1
- package/dist/src/interaction.js +1 -1
- package/dist/src/interaction2.js +1 -1
- package/dist/src/interactor.js +5 -5
- package/dist/src/interactors.js +1 -1
- package/dist/src/internal/bin.js +1 -1
- package/dist/src/internal/daemon.js +1 -1
- package/dist/src/inventory2.js +1 -1
- package/dist/src/ios-snapshot-acquisition.js +1 -1
- package/dist/src/ios-snapshot-engine.js +1 -1
- package/dist/src/ios-snapshot-runtime.js +1 -1
- package/dist/src/launch-confirmation.js +1 -1
- package/dist/src/lease-scope.js +1 -1
- package/dist/src/lease.js +1 -1
- package/dist/src/limrun.d.ts +4 -555
- package/dist/src/load.js +1 -1
- package/dist/src/local-interactor-operation-set.js +1 -1
- package/dist/src/managed-device-scope.js +1 -1
- package/dist/src/manifest.js +1 -0
- package/dist/src/mechanics.js +16 -16
- package/dist/src/mobile-snapshot-semantics.js +1 -1
- package/dist/src/observation.js +1 -2
- package/dist/src/overlay.js +3 -3
- package/dist/src/owner-identity.js +3 -3
- package/dist/src/perf-facade.js +1 -1
- package/dist/src/perf-runtime-plan.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-open-target.js +1 -1
- package/dist/src/platform-runtime-operation-host.js +4 -4
- package/dist/src/platform-runtime-runtime-hints.js +1 -1
- package/dist/src/platform-runtime-screen-recording-finalizer-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/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/providers.js +1 -1
- package/dist/src/react-devtools.js +2 -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 +1 -1
- package/dist/src/registry.js +24 -24
- 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/remote-connection-state.js +1 -0
- package/dist/src/replay.js +2 -2
- package/dist/src/request-admission.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-metadata.js +2 -3
- 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-disposal.js +1 -1
- package/dist/src/runner-error-classification.js +1 -1
- 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-session-types.js +1 -1
- package/dist/src/runner-start-budget.js +1 -1
- package/dist/src/runner-toolchain-probe.js +2 -0
- package/dist/src/runner.js +1 -1
- package/dist/src/runtime-deployment.js +1 -0
- package/dist/src/runtime.js +1 -1
- package/dist/src/runtime10.js +1 -2
- package/dist/src/runtime11.js +2 -0
- package/dist/src/runtime2.js +2 -5
- package/dist/src/runtime3.js +5 -1
- package/dist/src/runtime4.js +1 -5
- package/dist/src/runtime5.js +5 -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/screenshot3.js +2 -2
- package/dist/src/script.js +1 -1
- package/dist/src/scroll-gesture.js +1 -1
- 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-remote-config.d.ts +4 -0
- package/dist/src/sdk-remote-config.js +1 -1
- package/dist/src/sdk-selectors.d.ts +1 -1
- 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-snapshot.js +1 -1
- package/dist/src/session2.js +5 -5
- 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-desktop-projection.js +1 -1
- package/dist/src/snapshot-private-evidence.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/snapshot4.js +1 -1
- package/dist/src/src2.js +1 -1
- package/dist/src/src3.js +1 -1
- package/dist/src/src4.js +1 -1
- package/dist/src/src5.js +1 -1
- package/dist/src/src6.js +1 -1
- package/dist/src/src7.js +1 -1
- package/dist/src/src8.js +20 -20
- package/dist/src/store.js +1 -1
- 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-runtime2.js +1 -1
- package/dist/src/tree.js +1 -1
- package/dist/src/type-text-runtime.js +1 -1
- package/dist/src/video.js +1 -1
- package/package.json +15 -10
- 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.sha256 +0 -1
- package/dist/src/capabilities.js +0 -1
- package/dist/src/compatibility-policy.js +0 -1
- package/dist/src/daemon-artifacts.js +0 -1
- package/dist/src/device-claim-rule.js +0 -1
- package/dist/src/human-control-contract.js +0 -1
- package/dist/src/prepare-kind.js +0 -1
- package/dist/src/provider-device-runtimes.js +0 -1
- package/dist/src/screen-recording-admission-ledger.js +0 -1
- package/dist/src/screenshot-runtime.js +0 -1
- package/dist/src/session-routing.js +0 -1
- package/dist/src/session-runtime-admission.js +0 -1
- package/dist/src/timeouts.js +0 -1
- package/dist/src/touch-reference-frame.js +0 -1
- package/dist/src/vars.js +0 -2
- package/dist/src/viewport.js +0 -1
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{Fn 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};
|
|
@@ -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.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{En 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{
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";import{Sn 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 +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,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{E as u,h as d}from"./sdk-device.js";import{In as f,Pn as p,Rt as m,fr as h,mr as g,pr as ee}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,l as oe,r as se,s as ce,v 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,N as pe,a as me,c as he,h as ge,i as _e,k as S,m as C,p as w,r as T,s as E,u as D,v as O,y as k}from"./session-snapshot.js";import{s as A}from"./quality-warnings.js";import{t as j}from"./backend-snapshot-options.js";import{t as M}from"./snapshot-runtime-binding.js";function N(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 P(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 F(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 I(e,t){let n=Array.isArray(e.selectorChain)?e.selectorChain:void 0,r=Se(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:xe(s)}}function ve(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 ye(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 be(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 xe(e){let t=e.trim();if(!(!t||t.length>80||/[\r\n]/.test(t)))return t}function Se(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 M({...e,plan:m({hasActiveApp:e.session?.appBundleId!==void 0,intent:Ce(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 Ce(e){switch(e){case`is`:return`capture-only`;case`find`:case`get`:return`element-text`;case`wait`:return`wait-observation`}}const we=[[`snapshotDepth`,`--depth`],[`snapshotScope`,`--scope`],[`snapshotRaw`,`--raw`]];function V(e,t){let n=we.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!De(r)&&!a?null:{expectedPackage:e.appBundleId,foregroundPackage:r,activity:n.activity,hint:Ee(a),...a?{permissionDialog:!0}:{}}}function Te(e){return e.permissionDialog?`Android permission dialog is blocking ${e.expectedPackage}`:`${e.foregroundPackage} is foreground instead of ${e.expectedPackage}`}function Ee(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 De(e){return e===`com.android.settings`||e===`com.android.systemui`||e.includes(`launcher`)}async function Oe(e){let{device:t,node:n,flags:r,appBundleId:i,traceOutPath:a,surface:o,contextFromFlags:s}=e,c=ae(n),u=e.readTextAtPoint;if(!u)return c;let f=ue(n.rect);if(!f||d(t)&&c&&!le(n.type??``))return c;let p=s(r,i,a),m=await u({point:f,options:{appBundleId:i,surface:o},execution:ge(p)});return m.status===`read`?m.text:(l({level:`warn`,phase:`interaction_read_fallback`,data:{reason:ke(m.reason),nodeRef:n.ref,surface:o,platform:t.platform}}),c)}function ke(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=Le(s,e.req.flags?.out),d=Ne({timestamp:l,lastSnapshotAt:r,lastSnapshotResult:i,lastSnapshotCacheKey:a,session:c,request:s,cacheKey:u});if(d)return o(d);let f=Pe({session:c,timestamp:l,request:s});if(f)return r=f.createdAt,i={snapshot:f},a=u,o(i);let p=await Ae({params:e,request:s});s.signal?.throwIfAborted();let m={snapshot:p};return ze({ref:n,sessionStore:t,snapshot:p}),r=l,i=m,a=u,o(m)}}}async function Ae(e){let{params:n,request:r}=e,i=await W(n,r,r.snapshotScope);return r.recovery?.legacyIosSparse&&oe(i)?t(i,await je({runtimeParams:n,request:r,policy:r.recovery.legacyIosSparse})):r.recovery?.sparseVerdictQueryScope?.shouldScope&&A(i.snapshotQuality)?t(i,await Me({runtimeParams:n,request:r,policy:r.recovery.sparseVerdictQueryScope,snapshot:i})):i}async function je(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 Me(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 D({device:e.device,session:i,flags:a,logPath:e.logPath??``,snapshotScope:n,includeRects:t.includeRects,signal:t.signal,captureData:async()=>await o(C({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 Ne(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 Pe(e){let{session:t,timestamp:n,request:r}=e,i=t?.snapshot;if(!(!i||fe(i))&&Fe(t,r)&&Ie(i,n)&&i.presentationKey===K(r))return i}function Fe(e,t){return t.cache?.forceFresh===!0||t.cache?.useSessionSnapshot!==!0||S(e)||G(e,t)?!1:e.snapshot?.postGestureOutcome?.kind!==`unsettled`}function Ie(e,t){return t-e.createdAt<750}function G(e,t){return t.cache?.bypassForPostGestureStabilization===!0&&k(e)}function K(t){return c(e(Re(t)))}function Le(e,t){return JSON.stringify({presentationKey:K(e),includeRects:e.includeRects===!0,outPath:e.outPath??t??null})}function Re(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function ze(e){let{ref:t,sessionStore:n,snapshot:r}=e;!t||A(r.snapshotQuality)||E(n.requireCurrent(t),r)}function q(e){return w({backend:Be(e),...ne(`selector commands`,{plural:!0}),sessions:he({sessionName:e.sessionName,sessionStore:e.sessionStore,ref:e.ref,recordOptions:{includeSnapshot:!0},setRecord:(e,t)=>{!t||!e.snapshot||E(t,e.snapshot)}}),signal:e.signal??de(e.req.meta?.requestId)})}async function J(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 Y(e,t){let n=await J(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)=>O(i??``,e,t,n)),c=e.bound?.readText,l=e.bound?.findText,d=C({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:u(r),captureSnapshot:p&&(async(e,n)=>{let i={...t.flags,...j(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 Oe({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:d,...e.signal?{signal:e.signal}:{}});return n&&pe(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 He(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 Y(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,P(n,a));let r=F(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(T(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 Ue(e){let{req:t}=e;if(t.command!==`get`)return null;let n=ee(t.positionals?.[0]);if(!n.ok)return s(n.code,n.message);let r=n.format,i=Ge(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 Y(e,{requireSession:!0,command:`get`});if(!o.ok)return o.response;let c=o.runtime,l=i.target.kind===`ref`?me({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,I(n,r),{node:n.node,preActionNodes:n.preActionNodes});let s=ve(n);return l?{...s,warning:l}:s},{ref:o.ref,sessionStore:e.sessionStore,consumed:e.consumedSnapshot});return v({response:u,consumedTree:X(e),captureProof:e.captureProof})}async function We(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=ce({depth:t.flags?.snapshotDepth,scope:t.flags?.snapshotScope});if(e){let t=se(e);return s(t.code,t.message,t.details)}}let o=t.internal?.replayTargetGuard,c=await Y(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),be(l)},{ref:c.ref,sessionStore:e.sessionStore,consumed:e.consumedSnapshot});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 Ge(e){let t=e.positionals?.[1]??``;if(t.startsWith(`@`)){let n=N(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=h(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 ${Te(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,N as g,ye as h,We as i,U as l,L as m,He as n,Z as o,R as p,Ue as r,Q as s,X as t,H as u};
|
package/dist/src/selectors.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Cr as e,Dn as t,Dr as n,Er as r,On as i,Sr as a,Tn as o,Tr as s}from"./sdk-batch.js";import{t as c}from"./sdk-selectors.js";export{o as findSelectorChainMatch,c as formatSelectorFailure,r as isNodeEditable,n as isNodeVisible,a as isSelectorToken,t as listSelectorChainMatches,e as parseSelectorChain,i as resolveSelectorChain,s 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{v as r}from"./sdk-batch.js";import{i}from"./catalog.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(r());return i().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{D as e,P as t,g as n,k as r,s as i,x as a}from"./sdk-contracts.js";import{u as o}from"./capture.js";import{r as s}from"./snapshot-capture-annotations.js";import{r as c}from"./snapshot-diagnostics.js";import{f as l}from"./android-input-ownership.js";import{a as u,r as d}from"./diagnostics.js";import"./diagnostics2.js";import{d as ee,h as f,w as te}from"./sdk-device.js";import{Cn as ne,jr as re}from"./sdk-batch.js";import{A as ie,C as ae,a as oe,g as se,j as ce,o as le,t as ue}from"./runtime.js";import{h as de,o as p}from"./overlay.js";import{i as fe}from"./click-button.js";import{t as pe}from"./timeouts.js";import"./retry.js";import{t as me}from"./snapshot-state.js";import{i as he}from"./lease-context.js";import{randomInt as ge}from"node:crypto";let m={resolve:async()=>{throw new t(`COMMAND_FAILED`,`Interactor resolution is not composed for this process.`,{reason:`interactor-resolution-missing`})}};function _e(e){m=e}function ve(){return m}var h=class e{#e;constructor(e){this.#e=e}get state(){return this.#e.state}get scope(){return this.#e.scope}get tree(){return this.#e.tree}get generation(){return this.#e.generation}static expire(t){return t.#e.state===`expired`?t:new e({...t.#e,state:`expired`})}};const ye=new h({state:`active`,scope:`all`,tree:void 0,generation:void 0});function be(e){return new h({state:`active`,...e})}function xe(e){return h.expire(e)}const g=new WeakMap,_=new WeakSet;function v(e){return e.refFrame??ye}function y(e){return v(e).generation??e.snapshotGeneration}function Se(e){return v(e).tree}function Ce(e){Te(e),b(e),e.refFrame=xe(v(e)),e.snapshotScopeSource=void 0}function b(e){e.snapshot&&_.add(e.snapshot)}function we(e){return _.has(e)}function Te(e){let t=x(e)+1;return g.set(e,t),t}function x(e){return g.get(e)??0}function Ee(e){S(e,`all`)}function De(e,t){S(e,t)}function S(e,t){e.refFrame=be({scope:t,tree:e.snapshot,generation:e.snapshotGeneration})}function C(e){return v(e).state}function w(e){return v(e).scope}function Oe(e){let t=e.ref.startsWith(`@`)?e.ref.slice(1):e.ref;return{admission:ke({session:e.session,refBody:t,mintedGeneration:e.mintedGeneration}),scope:w(e.session),currentGeneration:y(e.session)}}function ke(e){let{session:t,refBody:n,mintedGeneration:r}=e;if(C(t)===`expired`)return{admitted:!1,reason:`ref_frame_expired`};if(r!==void 0&&r!==y(t))return{admitted:!1,reason:`ref_generation_mismatch`};let i=w(t);if(i!==`all`){if(r===void 0)return{admitted:!1,reason:`plain_ref_requires_complete_frame`};if(!i.has(n))return{admitted:!1,reason:`ref_not_issued`}}return{admitted:!0}}const Ae=[250,400,600];function T(e){return e===`press`||e===`click`||e===`back`||e===`open`}function E(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 je(e,t){return e<12?!1:t<=Math.floor(e*.2)}function Me(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:je(t.baselineCount,e.snapshot.nodes.length)?Ne(e.snapshot)?null:`sharp-drop`:t.routeComparable&&T(t.action)&&Pe(t.baselineSignatures,e.snapshot.nodes)?`stuck-route`:null}function Ne(e){return e.nodes.some(e=>e.hittable===!0||!!e.label?.trim()||!!e.value?.trim()||!!e.identifier?.trim())}function Pe(e,t){if(!e||e.length===0)return!1;let n=Math.max(e.length,t.length);if(n<12)return!1;let r=E(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 Fe(e){let t=e.window.markedAt+e.retry.retryBudgetMs,n=await e.capture(),r=e.classify(n),i=0;for(let a of e.retry.delaysMs){if(!r)break;let o=t-Date.now();if(o<=0)break;await pe(Math.min(a,o)),n=await e.capture(),i+=1,r=e.classify(n)}r||e.onTrustworthyCapture?.();let a=i>0||r?{action:e.window.action,retryCount:i,staleAfterRetries:!!r,reason:r??void 0}:void 0;return{...n,annotations:{...n.annotations,...s({freshness:a})}}}function Ie(e,t,n=e.snapshot){if(e.device.platform!==`android`)return;let r=Le(e,n),i=r?.comparisonSafe===!0;e.androidSnapshotFreshness={action:t,markedAt:Date.now(),baselineCount:(r??n)?.nodes.length??0,baselineSignatures:i?E(r?.nodes??[]):void 0,routeComparable:i}}function Le(e,t){if(t?.comparisonSafe===!0)return t;let n=e.lastComparisonSafeSnapshot;return!n||n.comparisonSafe!==!0?t:Date.now()-n.createdAt<=5e3?n:t}function D(e){if(!e||e.device.platform!==`android`)return;let t=e.androidSnapshotFreshness;if(t){if(Date.now()-t.markedAt>2500){delete e.androidSnapshotFreshness;return}return t}}function O(e){!e||e.device.platform!==`android`||delete e.androidSnapshotFreshness}async function k(e,t){return Fe({capture:e.capture,classify:n=>Me({snapshot:n.snapshot,rawNodeCount:n.annotations.analysis?.rawNodeCount},t,{interactiveOnly:e.interactiveOnly,mode:e.androidFreshnessMode}),window:t,retry:{retryBudgetMs:1500,delaysMs:Ae},onTrustworthyCapture:()=>O(e.session)})}function A(e){let t=new Map,n=[],r=ce(e);for(let i of e){let e=Re(i,t,r);e&&n.push(e)}return n}function j(e){return e?.comparisonKey??e?.snapshotQuality?.backend}function M(e,t){return 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}function N(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){let r=e[n],i=t[n];if(!r||!i||r.key!==i.key||!M(r,i))return!1}return!0}function P(e,t){let n=F(e),r=F(t);if(n.size===0||r.size===0)return`ambiguous`;let i=0,a=!1;for(let[e,t]of n){let n=r.get(e);if(!n){a=!0;continue}if(i+=1,!M(t,n))return`changed`}if(i===0)return`ambiguous`;let o=r.size>i;return a&&o?`changed`:`unchanged`}function F(e){let t=new Map;for(let n of e)!n.identity||!n.discriminating||t.has(n.identity)||t.set(n.identity,n);return t}function I(e,t){let n=e.filter(e=>e.discriminating),r=t.filter(e=>e.discriminating);if(n.length===0||n.length!==r.length)return!1;let i=new Map(r.map(e=>[e.key,e]));for(let e of n){let t=i.get(e.key);if(!t||!M(e,t))return!1}return!0}function L(e,t){let n=new Map(t.filter(e=>e.discriminating).map(e=>[e.key,e])),r=0,i=0,a=0;for(let t of e){if(!t.discriminating)continue;let e=n.get(t.key);if(!e){r+=1;continue}n.delete(t.key),a+=1,M(t,e)||(i+=1)}return{onlyInBaseline:r,onlyInCurrent:n.size,rectMismatched:i,shared:a}}function R(e,t,n){let r=z(B(e,n)),i=z(B(t,n));for(let[e,t]of r){let n=i.get(e);if(!n||!M(t,n))return!0;i.delete(e)}return i.size>0}function z(e){let t=new Map,n=new Map;for(let r of e){let e=t.get(r.content)??0;t.set(r.content,e+1),n.set(`${r.content}|#${e}`,r)}return n}function B(e,t){return e.filter(e=>e.discriminating&&e.x<t.x+t.width&&t.x<e.x+e.width&&e.y<t.y+t.height&&t.y<e.y+e.height)}function Re(e,t,n){if(!e.rect||!Ue(e.rect)||We(e))return;let r=He(e);if(!r)return;let i=t.get(r)??0;t.set(r,i+1);let a=Be(e);return{key:`${r}|#${i}`,...a?{identity:a}:{},content:ze(e,a),x:Math.round(e.rect.x),y:Math.round(e.rect.y),width:Math.round(e.rect.width),height:Math.round(e.rect.height),discriminating:!Ve(e,n)}}function ze(e,t){return t??`${e.type??``}|${e.role??``}`}function Be(e){let t=[e.identifier,e.label,e.value].map(e=>typeof e==`string`?e.trim():``).join(`|`);if(t.replaceAll(`|`,``))return`${t}|${e.type??``}`}function Ve(e,t){return re(e)||e.ref!==void 0&&t.has(e.ref)}function He(e){let t=[e.identifier,e.label,e.value,e.type,e.role,...de(e),e.hittable===!0?`hittable`:`not-hittable`].map(e=>typeof e==`string`?e.trim():``).join(`|`);return t.replaceAll(`|`,``)?t:void 0}function Ue(e){return[e.x,e.y,e.width,e.height].every(e=>Number.isFinite(e))&&e.width>0&&e.height>0}function We(e){return`${e.label??``} ${e.identifier??``}`.toLowerCase().includes(`scroll bar`)}function Ge(e){let{session:t,command:n,action:r=n,positionals:i,flags:a,androidFreshnessBaseline:o}=e;T(r)&&Ie(t,r,o??t.snapshot),Ke(t,r,i,a)}function Ke(e,t,n=[],r){if(!H(e.device)||!et(t,n,r))return;let i=U(e.device)?A(e.snapshot?.nodes??[]):void 0;e.postGestureStabilization={action:t,positionals:n,markedAt:Date.now(),...i?.length?{baselineSignature:i,baselineBackend:j(e.snapshot)}:{}}}function qe(e){e?.postGestureStabilization&&(e.postGestureStabilization=void 0)}function V(e){return!!e?.postGestureStabilization}async function Je(e){if(f(e.device)&&e.session&&V(e.session))return await Ye({...e,session:e.session});let t=D(e.session);if(t&&e.device.platform===`android`){let n=await k(e,t);return{snapshot:n.snapshot,...n.annotations}}}async function Ye(e){return Qe(await Ze({session:e.session,capture:async()=>await Xe(e),readSnapshot:e=>e.snapshot}))}async function Xe(e){let t=D(e.session);return t&&e.device.platform===`android`?await k(e,t):await e.capture()}async function Ze(e){let{session:t,capture:n,readSnapshot:r}=e,i=t?.postGestureStabilization;if(!t||!H(t.device)||!i)return{value:e.initial??await n()};try{return await ie({pending:{action:i.action,positionals:i.positionals??[],baselineSignature:i.baselineSignature,baselineBackend:i.baselineBackend},needsBaselineDistrust:U(t.device),initial:e.initial,hooks:{capture:n,readSurface:e=>{let t=r(e);return{signature:A(t.nodes),backend:j(t)}},signaturesStable:N,classifyBaselineEvidence:P,surfacesIdentical:I,summarizeDivergence:L}})}finally{qe(t)}}function Qe(e){let{snapshot:t,annotations:n}=e.value;return e.postGestureOutcome&&(t.postGestureOutcome=e.postGestureOutcome),{snapshot:t,...n}}function $e(e){if(!e?.postGestureStabilization)return e;let{postGestureStabilization:t,...n}=e;return n}function et(e,t,n){return n?.postGestureStabilization===!1?!1:n?.postGestureStabilization===!0||e===`swipe`||e===`scroll`||e===`gesture`&&t[0]===`swipe`}function H(e){return f(e)}function U(e){return ee(e.platform)}const tt=`activity.launchConsole.launchArgs.clearAppState.verbose.iosXctestrunFile.iosXctestDerivedDataPath.iosXctestEnvDir.snapshotInteractiveOnly.snapshotPreferredBackend.snapshotDepth.snapshotScope.snapshotRaw.snapshotCustomActions.snapshotIncludeHiddenContentHints.count.intervalMs.delayMs.durationMs.holdMs.jitterPx.pixels.until.doubleTap.backMode.pauseMs.pattern`.split(`.`);function nt(e){return Object.fromEntries(tt.map(t=>[t,e?.[t]]))}function W(e,t,n,r,i,a){return{requestId:i??u().requestId,appBundleId:n,runnerLeaseContext:he({meta:a}),logPath:e,traceLogPath:r,...nt(t),screenshotCaptureBackend:t?.maestro?.screenshotCaptureBackend,...o(t),clickButton:fe(t)}}let G;async function K(){if(G)return G;let{createAppleSessionObservation:e}=await import(`./session-observation.js`),{listLocalDeviceInventory:t,shouldPropagateDeviceInventoryProbeError:n}=await import(`./device-inventory-context.js`).then(e=>e.t);return G??=e({listLocalDevices:t,shouldPropagateProbeError:n}),G}const rt=Object.freeze({async observeRunnerSession(e){return(await K()).observeRunnerSession(e)},async resolveSoleForegroundApp(e){return(await K()).resolveSoleForegroundApp(e)}});async function it(e,t,n,r){let{queryAppleRunnerSelector:i}=await import(`./runner-operations-facade.js`);return await i(e,t,n,r)}function at(e){let{flags:t,logPath:i,meta:a,session:o,snapshotScope:s}=e,{appBundleId:c,trace:l,surface:u}=o??{},d=e.context??W(i??``,t,c,l?.outPath,a?.requestId,a);return{options:{appBundleId:c,...r(t,n),scope:s,includeRects:e.includeRects,surface:u},execution:q(d),...e.signal===void 0?{}:{signal:e.signal}}}function q(e){return{requestId:e.requestId,verbose:e.verbose,logPath:e.logPath,traceLogPath:e.traceLogPath,iosXctestrunFile:e.iosXctestrunFile,iosXctestDerivedDataPath:e.iosXctestDerivedDataPath,iosXctestEnvDir:e.iosXctestEnvDir,runnerLeaseContext:e.runnerLeaseContext}}function ot(e){let t=ae(e);return{...t,capture:ue(t),selectors:le(t),interactions:oe(t)}}async function st(e){let t=await(await ve().resolve(e.device,e.runnerContext)).snapshot(e.options);if(!(`stage`in t))return t;let{presentIosSnapshotAcquisition:n}=await import(`./ios-snapshot-runtime.js`);return await n(t,e.options)}async function ct(e){let t=await Je({session:e.session,device:e.device,interactiveOnly:e.flags?.snapshotInteractiveOnly===!0,androidFreshnessMode:e.androidFreshnessMode,capture:()=>Y(e)});if(t)return t;let n=await Y(e);return O(e.session),{snapshot:n.snapshot,...n.annotations}}async function J(e){if(e.captureData)return await e.captureData();let{device:t,session:i,logPath:a}=e,o=W(a,X(e),i?.appBundleId,i?.trace?.outPath);return await st({device:t,runnerContext:{requestId:o.requestId,signal:e.signal,appBundleId:o.appBundleId,verbose:o.verbose,logPath:o.logPath,traceLogPath:o.traceLogPath,iosXctestrunFile:o.iosXctestrunFile,iosXctestDerivedDataPath:o.iosXctestDerivedDataPath,iosXctestEnvDir:o.iosXctestEnvDir,runnerLeaseContext:o.runnerLeaseContext},options:{appBundleId:o.appBundleId,signal:e.signal,...r(o,n),includeRects:e.includeRects,surface:i?.surface}})}async function Y(e){let t=Date.now(),n=await J(e);c(e.session,{durationMs:Date.now()-t,backend:n.backend,platform:te(e.device)});let r=s(n),i=l(n,me(n,X(e)));return r.androidSnapshot?.systemSurfaceOnly===!0&&(i.systemSurfaceOnly=!0),{data:n,snapshot:i,annotations:r}}function X(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function lt(t,n){if(!t||!t.trim().startsWith(`@`))return{ok:!0,scope:t};if(!n?.snapshot)return i(`INVALID_ARGS`,`Ref scope requires an existing snapshot in session.`);let r=e(t.trim());if(!r)return i(`INVALID_ARGS`,`Invalid ref scope: ${t}`);let o=[n.snapshot,...n.snapshotScopeSource?[n.snapshotScopeSource]:[]],s=!1,c;for(let e of o){let t=a(e.nodes,r);if(t&&(s=!0,c=se(t,e.nodes),c))break}return s?c?{ok:!0,scope:c}:i(`COMMAND_FAILED`,`Ref ${t} has no label to scope by`,{reason:p.refUnlabeled,ref:r}):i(`COMMAND_FAILED`,`Ref ${t} not found`,{reason:p.refNotFound,ref:r},{hint:ne})}function Z(e,t,n={}){if(!e)return;let r=Se(e);return{name:t,appBundleId:e.appBundleId,appName:e.appName,...n.includeSnapshot===!0?{snapshot:e.snapshot,...r&&n.omitRefFrameSnapshot!==!0?{refFrameSnapshot:r}:{}}:{},metadata:{surface:e.surface,...n.metadata??{}}}}function ut(e,t){return{get:n=>n===e?Z(t,e):void 0,set:()=>{}}}function dt(e){let t=e.ref;return{getRef:()=>t?e.sessionStore.refresh(t):void 0,get:n=>n===e.sessionName?Z(t?e.sessionStore.resolveCurrent(t):void 0,e.sessionName,e.recordOptions):void 0,set:n=>{if(n.name!==e.sessionName){d({level:`warn`,phase:`runtime_session_write_skipped`,data:{expected:e.sessionName,received:n.name}});return}let r=t?e.sessionStore.requireCurrent(t):void 0,i=e.setRecord(n,r,t);i&&(t=i)}}}function ft(e,t){e.snapshot!==t&&(e.snapshotGeneration=Q(e.snapshotGeneration)),e.snapshot=t,e.snapshotScopeSource=void 0,t.comparisonSafe===!0&&(e.lastComparisonSafeSnapshot=t)}function pt(e){e.snapshot=void 0}function mt(e,t){e.snapshot=t.snapshot,t.snapshot.comparisonSafe===!0&&(e.lastComparisonSafeSnapshot=t.snapshot),e.snapshotScopeSource=t.scopeSource,e.snapshotGeneration=t.keptCurrentSnapshot?t.previousGeneration:Q(t.previousGeneration)}function Q(e){return e===void 0?ge(1e5,1e6):e+1}function ht(e){let t=e.startsWith(`@`)?e.slice(1):e,n=t.indexOf(`~`);return n===-1?t:t.slice(0,n)}function $(e,t){let n=new Set;for(let e of t){let t=ht(e);t.length>0&&n.add(t)}n.size!==0&&De(e,n)}function gt(e,t,n){if(!e||!n?.diff)return;let r=t.resolveCurrent(e);if(r)return $(r,_t(n)),r.snapshotGeneration}function _t(e){let t=[];for(let n of e.diff?.lines??[])n.ref&&t.push(n.ref);for(let n of e.refs??[])t.push(n.ref);for(let n of e.tail??[])t.push(n.ref);return t}function vt(e){return`Ref @${e.ref.startsWith(`@`)?e.ref.slice(1):e.ref} was minted from snapshot s${e.mintedGeneration} but the session's ref frame is now s${e.currentFrameEpoch} — re-run snapshot -i.`}function yt(e){let{session:t,ref:n,mintedGeneration:r}=e;if(t&&C(t)===`expired`)return`The UI may have changed since these refs were issued, so they no longer represent current device state. Take a new snapshot before relying on or interacting with them.`;if(r!==void 0){let e=t?y(t)??0:0;if(r!==e)return vt({ref:n,mintedGeneration:r,currentFrameEpoch:e})}}export{Ce as A,P as C,L as D,j as E,v as F,C as I,_e as L,b as M,Oe as N,D as O,x as P,A as S,I as T,W as _,mt as a,$e as b,ut as c,lt as d,ot as f,it as g,rt as h,yt as i,we as j,Ee as k,ct as l,q as m,gt as n,ft as o,at as p,$ as r,dt as s,pt as t,J as u,V as v,R as w,N as x,Ge as y};
|
|
1
|
+
import{D as e,P as t,X as n,g as r,k as i,s as a,x as o}from"./sdk-contracts.js";import{u as s}from"./capture.js";import{i as c}from"./snapshot-capture-annotations.js";import{r as l}from"./snapshot-diagnostics.js";import{r as u}from"./snapshot-private-evidence.js";import{a as d,r as ee}from"./diagnostics.js";import"./diagnostics2.js";import{E as te,_ as f,f as ne}from"./sdk-device.js";import{Mr as re,wn as ie}from"./sdk-batch.js";import{A as ae,B as oe,C as se,F as ce,I as le,N as ue,R as de,a as fe,g as pe,j as me,o as he,t as ge,z as _e}from"./runtime.js";import{g as p,o as m}from"./overlay.js";import{i as ve}from"./click-button.js";import{t as ye}from"./snapshot-state.js";import{i as be}from"./lease-context.js";import{randomInt as xe}from"node:crypto";let h={resolve:async()=>{throw new t(`COMMAND_FAILED`,`Interactor resolution is not composed for this process.`,{reason:`interactor-resolution-missing`})}};function Se(e){h=e}function Ce(){return h}var g=class e{#e;constructor(e){this.#e=e}get state(){return this.#e.state}get scope(){return this.#e.scope}get tree(){return this.#e.tree}get generation(){return this.#e.generation}static expire(t){return t.#e.state===`expired`?t:new e({...t.#e,state:`expired`})}};const we=new g({state:`active`,scope:`all`,tree:void 0,generation:void 0});function Te(e){return new g({state:`active`,...e})}function Ee(e){return g.expire(e)}const _=new WeakMap,v=new WeakSet;function y(e){return e.refFrame??we}function b(e){return y(e).generation??e.snapshotGeneration}function De(e){return y(e).tree}function Oe(e){Ae(e),x(e),e.refFrame=Ee(y(e)),e.snapshotScopeSource=void 0}function x(e){e.snapshot&&v.add(e.snapshot)}function ke(e){return v.has(e)}function Ae(e){let t=S(e)+1;return _.set(e,t),t}function S(e){return _.get(e)??0}function C(e){w(e,`all`)}function je(e,t){w(e,t)}function w(e,t){e.refFrame=Te({scope:t,tree:e.snapshot,generation:e.snapshotGeneration})}function T(e){return y(e).state}function E(e){return y(e).scope}function Me(e){let t=e.ref.startsWith(`@`)?e.ref.slice(1):e.ref;return{admission:Ne({session:e.session,refBody:t,mintedGeneration:e.mintedGeneration}),scope:E(e.session),currentGeneration:b(e.session)}}function Ne(e){let{session:t,refBody:n,mintedGeneration:r}=e;if(T(t)===`expired`)return{admitted:!1,reason:`ref_frame_expired`};if(r!==void 0&&r!==b(t))return{admitted:!1,reason:`ref_generation_mismatch`};let i=E(t);if(i!==`all`){if(r===void 0)return{admitted:!1,reason:`plain_ref_requires_complete_frame`};if(!i.has(n))return{admitted:!1,reason:`ref_not_issued`}}return{admitted:!0}}function Pe(e,t,n=e.snapshot){if(e.device.platform!==`android`)return;let r=Fe(e,n),i=r?.comparisonSafe===!0;e.androidSnapshotFreshness={action:t,markedAt:Date.now(),baselineCount:(r??n)?.nodes.length??0,baselineSignatures:i?_e(r?.nodes??[]):void 0,routeComparable:i}}function Fe(e,t){if(t?.comparisonSafe===!0)return t;let n=e.lastComparisonSafeSnapshot;return!n||n.comparisonSafe!==!0?t:Date.now()-n.createdAt<=5e3?n:t}function D(e){if(!e||e.device.platform!==`android`)return;let t=e.androidSnapshotFreshness;if(t){if(Date.now()-t.markedAt>2500){delete e.androidSnapshotFreshness;return}return t}}function O(e){!e||e.device.platform!==`android`||delete e.androidSnapshotFreshness}async function k(e,t){return ue({capture:e.capture,classify:n=>de({snapshot:n.snapshot,rawNodeCount:n.annotations.analysis?.rawNodeCount},t,{interactiveOnly:e.interactiveOnly,mode:e.androidFreshnessMode}),window:t,retry:{retryBudgetMs:ce,delaysMs:le},onTrustworthyCapture:()=>O(e.session)})}function A(e){let t=new Map,n=[],r=me(e);for(let i of e){let e=Le(i,t,r);e&&n.push(e)}return n}function j(e){return e?.comparisonKey??e?.snapshotQuality?.backend}function M(e,t){return 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}function N(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){let r=e[n],i=t[n];if(!r||!i||r.key!==i.key||!M(r,i))return!1}return!0}function P(e,t){let n=F(e),r=F(t);if(n.size===0||r.size===0)return`ambiguous`;let i=0,a=!1;for(let[e,t]of n){let n=r.get(e);if(!n){a=!0;continue}if(i+=1,!M(t,n))return`changed`}if(i===0)return`ambiguous`;let o=r.size>i;return a&&o?`changed`:`unchanged`}function F(e){let t=new Map;for(let n of e)!n.identity||!n.discriminating||t.has(n.identity)||t.set(n.identity,n);return t}function I(e,t){let n=e.filter(e=>e.discriminating),r=t.filter(e=>e.discriminating);if(n.length===0||n.length!==r.length)return!1;let i=new Map(r.map(e=>[e.key,e]));for(let e of n){let t=i.get(e.key);if(!t||!M(e,t))return!1}return!0}function L(e,t){let n=new Map(t.filter(e=>e.discriminating).map(e=>[e.key,e])),r=0,i=0,a=0;for(let t of e){if(!t.discriminating)continue;let e=n.get(t.key);if(!e){r+=1;continue}n.delete(t.key),a+=1,M(t,e)||(i+=1)}return{onlyInBaseline:r,onlyInCurrent:n.size,rectMismatched:i,shared:a}}function Ie(e,t,n){let r=R(z(e,n)),i=R(z(t,n));for(let[e,t]of r){let n=i.get(e);if(!n||!M(t,n))return!0;i.delete(e)}return i.size>0}function R(e){let t=new Map,n=new Map;for(let r of e){let e=t.get(r.content)??0;t.set(r.content,e+1),n.set(`${r.content}|#${e}`,r)}return n}function z(e,t){return e.filter(e=>e.discriminating&&e.x<t.x+t.width&&t.x<e.x+e.width&&e.y<t.y+t.height&&t.y<e.y+e.height)}function Le(e,t,n){if(!e.rect||!Ve(e.rect)||He(e))return;let r=Be(e);if(!r)return;let i=t.get(r)??0;t.set(r,i+1);let a=ze(e);return{key:`${r}|#${i}`,...a?{identity:a}:{},content:Re(e,a),x:Math.round(e.rect.x),y:Math.round(e.rect.y),width:Math.round(e.rect.width),height:Math.round(e.rect.height),discriminating:!B(e,n)}}function Re(e,t){return t??`${e.type??``}|${e.role??``}`}function ze(e){let t=[e.identifier,e.label,e.value].map(e=>typeof e==`string`?e.trim():``).join(`|`);if(t.replaceAll(`|`,``))return`${t}|${e.type??``}`}function B(e,t){return re(e)||e.ref!==void 0&&t.has(e.ref)}function Be(e){let t=[e.identifier,e.label,e.value,e.type,e.role,...p(e),e.hittable===!0?`hittable`:`not-hittable`].map(e=>typeof e==`string`?e.trim():``).join(`|`);return t.replaceAll(`|`,``)?t:void 0}function Ve(e){return[e.x,e.y,e.width,e.height].every(e=>Number.isFinite(e))&&e.width>0&&e.height>0}function He(e){return`${e.label??``} ${e.identifier??``}`.toLowerCase().includes(`scroll bar`)}function Ue(e){let{session:t,command:n,action:r=n,positionals:i,flags:a,androidFreshnessBaseline:o}=e;oe(r)&&Pe(t,r,o??t.snapshot),We(t,r,i,a)}function We(e,t,n=[],r){if(!H(e.device)||!Qe(t,n,r))return;let i=U(e.device)?A(e.snapshot?.nodes??[]):void 0;e.postGestureStabilization={action:t,positionals:n,markedAt:Date.now(),...i?.length?{baselineSignature:i,baselineBackend:j(e.snapshot)}:{}}}function Ge(e){e?.postGestureStabilization&&(e.postGestureStabilization=void 0)}function V(e){return!!e?.postGestureStabilization}async function Ke(e){if(f(e.device)&&e.session&&V(e.session))return await qe({...e,session:e.session});let t=D(e.session);if(t&&e.device.platform===`android`){let n=await k(e,t);return{snapshot:n.snapshot,...n.annotations}}}async function qe(e){return Xe(await Ye({session:e.session,capture:async()=>await Je(e),readSnapshot:e=>e.snapshot}))}async function Je(e){let t=D(e.session);return t&&e.device.platform===`android`?await k(e,t):await e.capture()}async function Ye(e){let{session:t,capture:n,readSnapshot:r}=e,i=t?.postGestureStabilization;if(!t||!H(t.device)||!i)return{value:e.initial??await n()};try{return await ae({pending:{action:i.action,positionals:i.positionals??[],baselineSignature:i.baselineSignature,baselineBackend:i.baselineBackend},needsBaselineDistrust:U(t.device),initial:e.initial,hooks:{capture:n,readSurface:e=>{let t=r(e);return{signature:A(t.nodes),backend:j(t)}},signaturesStable:N,classifyBaselineEvidence:P,surfacesIdentical:I,summarizeDivergence:L}})}finally{Ge(t)}}function Xe(e){let{snapshot:t,annotations:n}=e.value;return e.postGestureOutcome&&(t.postGestureOutcome=e.postGestureOutcome),{snapshot:t,...n}}function Ze(e){if(!e?.postGestureStabilization)return e;let{postGestureStabilization:t,...n}=e;return n}function Qe(e,t,n){return n?.postGestureStabilization===!1?!1:n?.postGestureStabilization===!0||e===`swipe`||e===`scroll`||e===`gesture`&&t[0]===`swipe`}function H(e){return f(e)}function U(e){return ne(e.platform)}const $e=`activity.launchConsole.launchArgs.clearAppState.verbose.iosXctestrunFile.iosXctestDerivedDataPath.iosXctestEnvDir.snapshotInteractiveOnly.snapshotPreferredBackend.snapshotDepth.snapshotScope.snapshotRaw.snapshotCustomActions.snapshotIncludeHiddenContentHints.count.intervalMs.delayMs.durationMs.holdMs.jitterPx.pixels.until.doubleTap.backMode.pauseMs.pattern`.split(`.`);function et(e){return Object.fromEntries($e.map(t=>[t,e?.[t]]))}function W(e,t,n,r,i,a){return{requestId:i??d().requestId,appBundleId:n,runnerLeaseContext:be({meta:a}),logPath:e,traceLogPath:r,...et(t),screenshotCaptureBackend:t?.maestro?.screenshotCaptureBackend,...s(t),clickButton:ve(t)}}let G;async function K(){if(G)return G;let{createAppleSessionObservation:e}=await import(`./session-observation.js`),{listLocalDeviceInventory:t,shouldPropagateDeviceInventoryProbeError:n}=await import(`./device-inventory-context.js`).then(e=>e.t);return G??=e({listLocalDevices:t,shouldPropagateProbeError:n}),G}const tt=Object.freeze({async observeRunnerSession(e){return(await K()).observeRunnerSession(e)},async resolveSoleForegroundApp(e){return(await K()).resolveSoleForegroundApp(e)}});async function nt(e,t,n,r){let{queryAppleRunnerSelector:i}=await import(`./runner-operations-facade.js`);return await i(e,t,n,r)}function rt(e){let{flags:t,logPath:n,meta:a,session:o,snapshotScope:s}=e,{appBundleId:c,trace:l,surface:u}=o??{},d=e.context??W(n??``,t,c,l?.outPath,a?.requestId,a);return{options:{appBundleId:c,...i(t,r),scope:s,includeRects:e.includeRects,surface:u},execution:q(d),...e.signal===void 0?{}:{signal:e.signal}}}function q(e){return{requestId:e.requestId,verbose:e.verbose,logPath:e.logPath,traceLogPath:e.traceLogPath,iosXctestrunFile:e.iosXctestrunFile,iosXctestDerivedDataPath:e.iosXctestDerivedDataPath,iosXctestEnvDir:e.iosXctestEnvDir,runnerLeaseContext:e.runnerLeaseContext}}function it(e){let t=se(e);return{...t,capture:ge(t),selectors:he(t),interactions:fe(t)}}async function at(e){let t=await(await Ce().resolve(e.device,e.runnerContext)).snapshot(e.options);if(!(`stage`in t))return t;let{presentIosSnapshotAcquisition:n}=await import(`./ios-snapshot-runtime.js`);return await n(t,e.options)}async function ot(e){let t=await Ke({session:e.session,device:e.device,interactiveOnly:e.flags?.snapshotInteractiveOnly===!0,androidFreshnessMode:e.androidFreshnessMode,capture:()=>Y(e)});if(t)return t;let n=await Y(e);return O(e.session),{snapshot:n.snapshot,...n.annotations}}async function J(e){if(e.captureData)return await e.captureData();let{device:t,session:n,logPath:a}=e,o=W(a,X(e),n?.appBundleId,n?.trace?.outPath);return await at({device:t,runnerContext:{requestId:o.requestId,signal:e.signal,appBundleId:o.appBundleId,verbose:o.verbose,logPath:o.logPath,traceLogPath:o.traceLogPath,iosXctestrunFile:o.iosXctestrunFile,iosXctestDerivedDataPath:o.iosXctestDerivedDataPath,iosXctestEnvDir:o.iosXctestEnvDir,runnerLeaseContext:o.runnerLeaseContext},options:{appBundleId:o.appBundleId,signal:e.signal,...i(o,r),includeRects:e.includeRects,surface:n?.surface}})}async function Y(e){let t=Date.now(),n=await J(e);l(e.session,{durationMs:Date.now()-t,backend:n.backend,platform:te(e.device)});let r=c(n),i=u(n,ye(n,X(e)));return r.androidSnapshot?.systemSurfaceOnly===!0&&(i.systemSurfaceOnly=!0),{data:n,snapshot:i,annotations:r}}function X(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function st(t,n){if(!t||!t.trim().startsWith(`@`))return{ok:!0,scope:t};if(!n?.snapshot)return a(`INVALID_ARGS`,`Ref scope requires an existing snapshot in session.`);let r=e(t.trim());if(!r)return a(`INVALID_ARGS`,`Invalid ref scope: ${t}`);let i=[n.snapshot,...n.snapshotScopeSource?[n.snapshotScopeSource]:[]],s=!1,c;for(let e of i){let t=o(e.nodes,r);if(t&&(s=!0,c=pe(t,e.nodes),c))break}return s?c?{ok:!0,scope:c}:a(`COMMAND_FAILED`,`Ref ${t} has no label to scope by`,{reason:m.refUnlabeled,ref:r}):a(`COMMAND_FAILED`,`Ref ${t} not found`,{reason:m.refNotFound,ref:r},{hint:ie})}function Z(e,t,n={}){if(!e)return;let r=De(e);return{name:t,appBundleId:e.appBundleId,appName:e.appName,...n.includeSnapshot===!0?{snapshot:e.snapshot,...r&&n.omitRefFrameSnapshot!==!0?{refFrameSnapshot:r}:{}}:{},metadata:{surface:e.surface,...n.metadata??{}}}}function ct(e,t){return{get:n=>n===e?Z(t,e):void 0,set:()=>{}}}function lt(e){let t=e.ref;return{getRef:()=>t?e.sessionStore.refresh(t):void 0,get:n=>n===e.sessionName?Z(t?e.sessionStore.resolveCurrent(t):void 0,e.sessionName,e.recordOptions):void 0,set:n=>{if(n.name!==e.sessionName){ee({level:`warn`,phase:`runtime_session_write_skipped`,data:{expected:e.sessionName,received:n.name}});return}let r=t?e.sessionStore.requireCurrent(t):void 0,i=e.setRecord(n,r,t);i&&(t=i)}}}function ut(e,t){e.snapshot!==t&&(e.snapshotGeneration=Q(e.snapshotGeneration)),e.snapshot=t,e.snapshotScopeSource=void 0,t.comparisonSafe===!0&&(e.lastComparisonSafeSnapshot=t)}function dt(e){e.snapshot=void 0}function ft(e,t){e.snapshot=t.snapshot,t.snapshot.comparisonSafe===!0&&(e.lastComparisonSafeSnapshot=t.snapshot),e.snapshotScopeSource=t.scopeSource,e.snapshotGeneration=t.keptCurrentSnapshot?t.previousGeneration:Q(t.previousGeneration)}function Q(e){return e===void 0?xe(1e5,1e6):e+1}function pt(e){let t=e.startsWith(`@`)?e.slice(1):e,n=t.indexOf(`~`);return n===-1?t:t.slice(0,n)}function $(e,t){let n=new Set;for(let e of t){let t=pt(e);t.length>0&&n.add(t)}n.size!==0&&je(e,n)}function mt(e,t,n){if(!e||!n?.diff)return;let r=t.resolveCurrent(e);if(r)return $(r,_t(n)),r.snapshotGeneration}function ht(e,r,i,a){if(i.code!==`AMBIGUOUS_MATCH`)return i;let o=n(i.details);if(o.length===0)return i;let s=e?r.resolveCurrent(e):void 0;return s?.snapshot&&s.snapshotGeneration!==void 0&&a!==void 0&&a.nodes===s.snapshot.nodes?($(s,o),new t(i.code,i.message,{...i.details,refsGeneration:s.snapshotGeneration},i.cause)):gt(i)}function gt(e){let{candidates:n,refsGeneration:r,...i}=e.details??{};return new t(e.code,e.message,{...i,hint:`Narrow the selector with role/id/longer text and retry.`},e.cause)}function _t(e){let t=[];for(let n of e.diff?.lines??[])n.ref&&t.push(n.ref);for(let n of e.refs??[])t.push(n.ref);for(let n of e.tail??[])t.push(n.ref);return t}function vt(e){return`Ref @${e.ref.startsWith(`@`)?e.ref.slice(1):e.ref} was minted from snapshot s${e.mintedGeneration} but the session's ref frame is now s${e.currentFrameEpoch} — re-run snapshot -i.`}function yt(e){let{session:t,ref:n,mintedGeneration:r}=e;if(t&&T(t)===`expired`)return`The UI may have changed since these refs were issued, so they no longer represent current device state. Take a new snapshot before relying on or interacting with them.`;if(r!==void 0){let e=t?b(t)??0:0;if(r!==e)return vt({ref:n,mintedGeneration:r,currentFrameEpoch:e})}}export{C as A,A as C,j as D,I as E,S as F,y as I,T as L,ke as M,x as N,L as O,Me as P,Se as R,N as S,Ie as T,nt as _,yt as a,Ue as b,lt as c,J as d,st as f,tt as g,q as h,ht as i,Oe as j,D as k,ct as l,rt as m,mt as n,ft as o,it as p,$ as r,ut as s,dt as t,ot as u,W as v,P as w,Ze as x,V as y};
|