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/interaction2.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{F as e,J as t,M as n,P as r,X as i,f as a,h as o,s}from"./sdk-contracts.js";import{m as c}from"./sdk-batch-runner.js";import{r as l}from"./diagnostics.js";import"./diagnostics2.js";import{m as u,w as d}from"./sdk-device.js";import{g as f,h as p,m as ee,w as te}from"./sdk-batch.js";import{c as ne,o as re}from"./scroll-gesture.js";import{C as m,E as ie,S as ae,v as oe,x as h}from"./script.js";import{c as se}from"./target-evidence.js";import{F as ce,n as g,p as _}from"./provider-device-admission.js";import{S as le,v as ue}from"./runtime.js";import{n as v}from"./catalog.js";import{r as de}from"./success-text.js";import{i as y,n as fe,r as pe}from"./click-button.js";import{r as me,t as he}from"./interaction-positionals.js";import{t as ge}from"./timeouts.js";import"./retry.js";import"./gesture-plan.js";import{r as _e}from"./request-cancel.js";import"./request.js";import{A as b,N as x,O as ve,i as S,n as C,r as ye}from"./session-snapshot.js";import{n as w,t as T}from"./touch-reference-frame.js";import{c as be,s as xe}from"./quality-warnings.js";import{a as E,n as D,o as Se,t as O}from"./internal/daemon.js";import{a as k,c as Ce,i as we,l as Te,n as A,o as j,r as M,s as Ee,t as De,u as N}from"./interaction-ref-policy.js";import{n as Oe,t as ke}from"./touch-runtime2.js";import{t as P}from"./gesture-runtime.js";import{d as Ae,g as F,i as je,r as Me,u as Ne}from"./selector-runtime.js";import{n as Pe}from"./type-text-runtime.js";function Fe(e){let t=e.flags?.recordAs;if(t!==void 0){if(ce(t),e.flags?.noRecord)throw new r(`INVALID_ARGS`,`fill --record-as cannot be combined with --no-record because no script step would be published.`);if(!e.isSessionRecording&&!e.replayPlanStep)throw new r(`INVALID_ARGS`,`fill --record-as requires an armed script recording. Start a fresh session with open --save-script, then retry the fill.`)}}async function I(e,t){if(!ve(t))return;let n=t.snapshot?.comparisonSafe===!0?t.snapshot:void 0;try{await e.captureSnapshotForSession(e.sessionRef,e.req.flags,e.sessionStore,e.contextFromFlags,{interactiveOnly:!0,androidFreshnessMode:`ref-refresh`})}catch(t){l({level:`warn`,phase:`android_ref_snapshot_refresh_failed`,data:{command:e.req.command,error:t instanceof Error?t.message:String(t)}})}return n}function L(e,t){return!u(e.device)||e.surface!==`desktop`&&e.surface!==`menubar`||e.surface===`menubar`&&(t===`click`||t===`press`)?null:s(`UNSUPPORTED_OPERATION`,`${t} is not supported on macOS ${e.surface} sessions yet. Open an app session to act, or use the ${e.surface} surface to inspect.`)}const Ie=new Set(f()),Le=new Set([`currentUptimeMs`,`gestureEndUptimeMs`,`gestureStartUptimeMs`,`sequenceResults`]);function R(e){if(e)return Object.fromEntries(Object.entries(e).filter(([e])=>!Le.has(e)))}function Re(e){return Be({fields:ze(e.command),input:e.input??{},data:R(e.data),controlledFields:Ie})}function ze(e){let t=te(e);if(!t)throw Error(`Missing response data transform descriptor for ${e}`);return t.fields}function Be(e){let t=Object.fromEntries(Object.entries(e.data??{}).filter(([t])=>!e.controlledFields.has(t)));for(let[n,r]of Object.entries(e.fields)){let i=e.input[n]===void 0?r.defaultValue:e.input[n];if(i===void 0||r.omitDefault===!0&&i===r.defaultValue){delete t[n];continue}t[n]=i}return Object.fromEntries(Object.entries(t).filter(([,e])=>e!==void 0))}async function Ve(e){let{ref:t,flags:n,sessionStore:r,contextFromFlags:i,captureSnapshotForSession:a,observation:o}=e,s=r.resolveCurrent(t);if(!s)return;let c=s.screenRecording;if(!c)return;let l=c.handle,u=e=>{if(!(!e||r.resolveCurrent(t)?.screenRecording!==c))return l.setTouchReferenceFrame(e),e},d=l.inspect().touchReferenceFrame;if(d)return d;if(s.device.platform===`android`&&!s.lease?.leaseProvider&&!g(s.device)){if(!o)throw Error(`Android observation was not injected into the request`);let e=await o.readScreenSize(s.device);return u({referenceWidth:e.width,referenceHeight:e.height})}let f=T(s.snapshot);if(f)return u(f);let p=await a(t,n,r,i,{interactiveOnly:!0});return u(T(p))}async function He(e){try{return await Ve(e)}catch(t){let n=e.sessionStore.resolveCurrent(e.ref);if(!n)return;l({level:`warn`,phase:`touch_reference_frame_resolve_failed`,data:{platform:n.device.platform,error:t instanceof Error?t.message:String(t)}});return}}function z(e){let{data:t,fallbackX:n,fallbackY:r,referenceFrame:i,extra:a}=e,o=We(a,n,r)??(typeof t?.message==`string`?t.message:void 0);return Ue({...t??{},...n===void 0||r===void 0?{}:{x:n,y:r},...i??{},...a??{},...de(o)})}function Ue(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function We(e,t,n){let r=B(e,`text`);if(r!==void 0)return`Filled ${Array.from(r).length} chars`;let i=Ge(t,n),a=Ke(e);if(a)return Je(a,e??{},i);if(i)return qe(e,i)}function B(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function Ge(e,t){return e===void 0||t===void 0?``:` (${e}, ${t})`}function Ke(e){let t=B(e,`ref`);return t===void 0?B(e,`selector`):`@${t}`}function qe(e,t){return e?.gesture===`longpress`?`Long pressed${t}`:e?.gesture===`hover`?`Hovered${t}`:`Tapped${t}`}function Je(e,t,n){let r=typeof t.button==`string`?t.button:void 0;return t.gesture===`longpress`?`Long pressed ${e}${n}`:t.gesture===`hover`?`Hovered ${e}${n}`:r&&r!==`primary`?`Clicked ${r} ${e}${n}`:`Tapped ${e}${n}`}function V(e){if(e.length<2)return null;let t=Number(e[0]),n=Number(e[1]);return!Number.isFinite(t)||!Number.isFinite(n)?null:{x:t,y:n}}function H(e,t){let n=V(e);if(n)return{ok:!0,target:{kind:`point`,x:n.x,y:n.y}};let r=e[0]??``;if(r.startsWith(`@`)){let t=F(r);return t.ok?{ok:!0,target:{kind:`ref`,ref:t.ref,fallbackLabel:e.slice(1).join(` `).trim()},refGeneration:t.generation}:{ok:!1,response:t.response}}let i=e.join(` `).trim();return i?{ok:!0,target:{kind:`selector`,selector:i}}:{ok:!1,response:s(`INVALID_ARGS`,`${t} requires @ref, selector expression, or x y coordinates`)}}function Ye(e){let t=V(e);if(t)return{ok:!0,target:{kind:`point`,x:t.x,y:t.y},...tt(e[2])};let n=et(e),r=H(n.targetPositionals,`longpress`);return r.ok?{ok:!0,target:r.target,refGeneration:r.refGeneration,...n.duration}:r}function U(e){return{ok:!1,response:s(`INVALID_ARGS`,`fill requires text after ${e} (use "" to clear the field)`)}}function Xe(e){let t=Ze(e);if(!t)return{ok:!1,response:s(`INVALID_ARGS`,`fill requires x y text, @ref text, or selector text`)};switch(t.kind){case`ref`:{let n=F(e[0]??``);return n.ok?t.text===void 0?U(`ref`):{ok:!0,target:{kind:`ref`,ref:n.ref},refGeneration:n.generation,text:t.text}:{ok:!1,response:n.response}}case`point`:return t.text===void 0?U(`coordinates`):{ok:!0,target:{kind:`point`,x:t.target.x,y:t.target.y},text:t.text};case`selector`:return t.text===void 0||t.text.length>0&&!t.text.trim()?U(`selector`):{ok:!0,target:{kind:`selector`,selector:t.target.selector},text:t.text}}}function Ze(e){try{return he(e)}catch{return null}}function Qe(e){let t=`evidence`in e?e.evidence:void 0,n=e.settle;return e.kind===`ref`?{ref:me(e.target?.kind===`ref`?e.target.ref:void 0),refLabel:e.refLabel,selectorChain:e.selectorChain,targetHittable:e.targetHittable,hint:e.hint,evidence:t,settle:n,resolution:e.resolution}:e.kind===`selector`?{selector:e.target?.kind===`selector`?e.target.selector:void 0,selectorChain:e.selectorChain,refLabel:e.refLabel,targetHittable:e.targetHittable,hint:e.hint,evidence:t,settle:n,resolution:e.resolution}:{evidence:t,settle:n}}function $e(e,t){return e.kind===`point`?`coordinate tap`:t.kind===`ref`&&t.target?.kind===`ref`?t.target.ref:t.kind===`selector`&&t.target?.kind===`selector`?t.target.selector:`target`}function et(e){let t=e.at(-1);return e.length>1&&nt(t)?{targetPositionals:e.slice(0,-1),duration:{durationMs:Number(t)}}:{targetPositionals:e,duration:{}}}function tt(e){return e===void 0?{}:{durationMs:Number(e)}}function nt(e){return e===void 0||e.trim()===``?!1:Number.isFinite(Number(e))}const rt={source:`direct-ios`,kind:`not-observed`};function W(e,t){if(!it(e))return t;let{resolution:n,...r}=t;return r}function it(e){return`dispatchPath`in e&&e.dispatchPath===`maestro-non-hittable-fallback`}function at(e){return G({source:{kind:`corroborated-tap`,targetKind:e.targetKind,data:{warning:e.warning},publicData:{warning:e.warning},point:e.point,resolution:e.resolution},referenceFrame:e.referenceFrame,extra:e.extra})}function G(e){let{source:t,referenceFrame:n,extra:r}=e;if(t.kind===`runner-payload`||t.kind===`corroborated-tap`){let e={targetKind:t.targetKind,...W(t,{resolution:t.kind===`runner-payload`?rt:t.resolution}),...r??{}};return{result:z({data:t.data,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e}),responseData:z({data:t.publicData,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e})}}let{result:i}=t,a={targetKind:i.kind,...W(t,Qe(i)),...ct(i.settle,e.settleRefsGeneration),...r??{}},o=z({data:i.backendResult,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:{...a,...st(i)}}),s=z({data:t.publicData,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:a}),c=lt(`warning`in i?i.warning:void 0,e.staleRefsWarning);return c&&(o.warning=c,s.warning=c),`readiness`in i&&i.readiness&&(s.readiness=i.readiness),{result:o,responseData:s,...ot(i)}}function ot(e){let t=K(e)?.node??(`node`in e?e.node:void 0),n=`preAction`in e?e.preAction?.nodes:void 0;return t&&n?{recordedTarget:{node:t,preActionNodes:n}}:{}}function st(e){let t=K(e);return t?{selectorChain:t.selectorChain,refLabel:t.refLabel}:{}}function K(e){return`recordingTarget`in e?e.recordingTarget:void 0}function ct(e,t){return!e?.diff||t===void 0?{}:{settle:{...e,refsGeneration:t}}}function lt(e,t){return t?e?`${e} ${t}`:t:e}async function ut(e){let{params:t,result:n,publicData:r,extra:i}=e,a=n.kind===`point`?await He({ref:t.sessionRef,flags:t.req.flags,sessionStore:t.sessionStore,contextFromFlags:t.contextFromFlags,captureSnapshotForSession:t.captureSnapshotForSession,observation:t.androidObservation}):void 0,o=t.sessionStore.resolveCurrent(t.sessionRef),s=o?n.kind===`point`?a:w(o.snapshot?.nodes??[]):void 0,c=o?n:{...n,settle:void 0};return G({source:{kind:`runtime`,result:c,publicData:r},referenceFrame:s,extra:i,staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:C(t.sessionRef,t.sessionStore,c.settle)})}function q(e){return e.command?Re({command:e.command,input:e.flags,data:e.data}):R(e.data)}function dt(e,t){return e===`click`||e===`press`||e===`fill`?e:t}function J(e,t){if(!e)return{used:!1,extra:{}};let n=t?.maestroNonHittableCoordinateFallbackUsed===!0;return{used:n,extra:{maestroNonHittableCoordinateFallbackAllowed:!0,maestroNonHittableCoordinateFallbackUsed:n,...n?{maestroFallbackReason:`non-hittable-coordinate`}:{}}}}function ft(e){let{error:t,snapshotGeneration:n,publishPartialRefs:a}=e;if(t.code!==`AMBIGUOUS_MATCH`)return t;let o=i(t.details);return o.length===0||n===void 0?t:(a(o),new r(t.code,t.message,{...t.details,refsGeneration:n},t.cause))}async function pt(e,t,n){let i=await Ne(e,n);if(i){if(i.permissionDialog)return`press ${t} opened an Android permission dialog (${i.foregroundPackage}) over ${i.expectedPackage}. ${i.hint}`;throw new r(`COMMAND_FAILED`,`press ${t} left ${e.appBundleId} and foregrounded ${i.foregroundPackage}. The tap likely escaped the app.`,i)}}function mt(e){return e.code===`COMMAND_FAILED`&&typeof e.details?.expectedPackage==`string`&&typeof e.details?.foregroundPackage==`string`}async function Y(e){let t=e.sessionStore.resolveCurrent(e.ref);if(!t||!ht(e,t))return;let n=_t(t.snapshot);if(!n)return;let r=await vt(e,n.snapshot.snapshotQuality,n.presentation);if(!(!r||!yt(n.snapshot,r,e.command)))return St(n.snapshot,r,e.command)}function ht(t,n){return gt(t.command)&&e(t.error).code===`XCTEST_RECORDED_FAILURE`&&Ce(n,{skipPendingPostGestureStabilization:!1})}function gt(e){return e===`click`||e===`press`}function _t(e){if(!X(e))return;let t=Date.now()-e.createdAt;if(t<0||t>15e3){l({level:`debug`,phase:`ios_tap_failure_corroboration_stale_baseline`,data:{ageMs:t}});return}let n=Ct(e.presentationKey);if(n){if(n.raw){l({level:`debug`,phase:`ios_tap_failure_corroboration_raw_baseline`,data:{presentationKey:e.presentationKey}});return}return{snapshot:e,presentation:n}}}async function vt(e,t,n){try{let r=be(t);return await e.captureSnapshotForSession(e.ref,Ot(e.flags,n),e.sessionStore,e.contextFromFlags,{interactiveOnly:n?.interactiveOnly??!0,...r?{preferredBackend:r}:{},signal:_e(e.requestId)})}catch(t){l({level:`debug`,phase:`ios_tap_failure_corroboration_capture_failed`,data:{command:e.command,error:t instanceof Error?t.message:String(t)}});return}}function yt(e,t,n){let r=bt(e,t);return r===void 0?xt(e,t,n):r?!0:(l({level:`debug`,phase:`ios_tap_failure_corroboration_identity_mismatch`,data:{command:n}}),!1)}function bt(e,t){if(e.comparisonKey!==void 0||t.comparisonKey!==void 0)return e.comparisonKey!==void 0&&e.comparisonKey===t.comparisonKey}function xt(e,t,n){let r=e.snapshotQuality?.backend,i=t.snapshotQuality?.backend;return!r||r!==i?(l({level:`debug`,phase:`ios_tap_failure_corroboration_backend_mismatch`,data:{command:n,baselineBackend:r,afterBackend:i}}),!1):e.presentationKey===t.presentationKey||(l({level:`debug`,phase:`ios_tap_failure_corroboration_scope_mismatch`,data:{command:n,baselinePresentationKey:e.presentationKey,afterPresentationKey:t.presentationKey}}),!1)}function St(e,t,n){if(!X(t))return;let r=ue(e.nodes),i=ue(t.nodes);if(r.digest!==i.digest)return l({level:`warn`,phase:`ios_tap_failure_corroborated`,data:{command:n,beforeNodeCount:r.nodeCount,afterNodeCount:i.nodeCount}}),{warning:`XCTest reported the tap as failed, but a same-scope post-action accessibility capture changed; treating the tap as landed. Observe the current screen before issuing another tap.`}}function X(e){return!!(e&&e.nodes.length>0&&!xe(e.snapshotQuality))}function Ct(e){if(!e)return;let t;try{t=JSON.parse(e)}catch{return}return wt(t)}function wt(e){let t=Tt(e);if(!(!t||typeof t.interactiveOnly!=`boolean`||typeof t.raw!=`boolean`)&&!(!Et(t.depth)||!Dt(t.scope)))return{interactiveOnly:t.interactiveOnly,...typeof t.depth==`number`?{depth:t.depth}:{},...typeof t.scope==`string`?{scope:t.scope}:{},raw:t.raw}}function Tt(e){return typeof e==`object`&&e?e:void 0}function Et(e){return e==null||typeof e==`number`}function Dt(e){return e==null||typeof e==`string`}function Ot(e,t){if(!(!e&&!t))return{...e??{},out:void 0,...t?{snapshotDepth:t.depth,snapshotScope:t.scope,snapshotRaw:t.raw}:{}}}function kt(e){return e.kind===`selector`?{selector:e.selector}:e.kind===`ref`?{ref:e.ref.startsWith(`@`)?e.ref.slice(1):e.ref}:{}}async function At(e,t,n,r,i){if(e.lease?.leaseProvider)return{aborted:!1,readiness:{status:`clear`},runtimeResult:await r()};let a=await E({session:e,command:t,phase:`before-command`,observation:i});if(n.refContext&&a.status===`recovered`){let t=A({ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration,staleRefsWarning:n.refContext.staleRefsWarning,frame:x({session:e,ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration})});if(t)return{aborted:!0,response:t}}let o=await r();return await E({session:e,command:t,phase:`after-command`,observation:i}),{aborted:!1,readiness:a,runtimeResult:o}}async function Z(t,n){if(t=N(t),!t.sessionRef)return a();let r=t.sessionStore.requireCurrent(t.sessionRef),i=k({...t,touchExecutor:n.touchExecutor}),o=Date.now();try{let e,a=await At(r,t.req.command,{refContext:n.refContext},async()=>{let t=await n.run(i);return e=await n.afterRun?.(t),t},t.androidObservation);if(a.aborted)return a.response;let{readiness:s,runtimeResult:c}=a,l=Date.now(),{result:u,responseData:d,recordedTarget:f}=await n.buildPayloads(c),p=[...s.status===`recovered`?[s.warning]:[],...e?[e]:[]];if(p.length>0){let e=[...typeof d.warning==`string`?[d.warning]:[],...p].join(` `);u.warning=e,d.warning=e}return j({ref:t.sessionRef,sessionStore:t.sessionStore,command:t.req.command,positionals:t.req.positionals??[],flags:t.req.flags,result:u,responseData:d,recordedTarget:f,actionStartedAt:o,actionFinishedAt:l,androidFreshnessBaseline:n.androidFreshnessBaseline})}catch(i){let a=ft({error:e(i),snapshotGeneration:r.snapshotGeneration,publishPartialRefs:e=>ye(r,e)});if(mt(a))throw a;return a.code===`AMBIGUOUS_MATCH`?Q(a):await jt({error:a,handlerParams:t,session:r,target:n.iosTapCorroboration?.target,extra:n.iosTapCorroboration?.extra,actionStartedAt:o,androidFreshnessBaseline:n.androidFreshnessBaseline})||Q(a)}}async function jt(e){if(!e.target)return;let t=le(e.error);if(!t&&_(e.session))return;let n=await Y({error:e.error,command:e.handlerParams.req.command,requestId:e.handlerParams.req.meta?.requestId,flags:e.handlerParams.req.flags,ref:e.handlerParams.sessionRef,sessionStore:e.handlerParams.sessionStore,contextFromFlags:e.handlerParams.contextFromFlags,captureSnapshotForSession:e.handlerParams.captureSnapshotForSession});if(!n)return;let r=Mt({target:e.target,resolvedTarget:t,warning:n.warning,referenceFrame:w(e.session.snapshot?.nodes??[]),extra:e.extra});return j({ref:e.handlerParams.sessionRef,sessionStore:e.handlerParams.sessionStore,command:e.handlerParams.req.command,positionals:e.handlerParams.req.positionals??[],flags:e.handlerParams.req.flags,result:r.result,responseData:r.responseData,recordedTarget:r.recordedTarget,actionStartedAt:e.actionStartedAt,actionFinishedAt:Date.now(),androidFreshnessBaseline:e.androidFreshnessBaseline})}function Mt(e){return e.resolvedTarget?G({source:{kind:`runtime`,result:{...e.resolvedTarget,warning:e.warning}},referenceFrame:e.referenceFrame,extra:e.extra}):at({targetKind:e.target.kind,point:Nt(e.target),warning:e.warning,referenceFrame:e.referenceFrame,extra:{...kt(e.target),...e.extra??{}}})}function Nt(e){return e.kind===`point`?{x:e.x,y:e.y}:void 0}function Q(e){return{ok:!1,error:t(e)}}async function Pt(e,t,n,r){let i=await Oe({device:t.device,command:n,requiresCapture:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?{ok:!0,touchExecutor:ke(i.runtime,e.contextFromFlags(e.req.flags,t.appBundleId,t.trace?.outPath))}:{ok:!1,response:O(i.response)}}async function Ft(e){e=N(e);let t=await It(e);if(`response`in t)return t.response;let{parsedTarget:n,touchExecutor:r,staleRefsWarning:i}=t.admitted,{req:a,sessionName:o}=e,s=a.internal?.replayTargetGuard;return await Z(e,{touchExecutor:r,refContext:n.target.kind===`ref`&&a.internal?.findResolvedTarget===void 0?{ref:n.target.ref,mintedGeneration:n.refGeneration,staleRefsWarning:i}:void 0,run:async e=>await e.interactions.fill(n.target,n.text,{session:o,requestId:a.meta?.requestId,delayMs:a.flags?.delayMs,allowNonHittableCoordinateFallback:a.flags?.maestro?.allowNonHittableCoordinateFallback,verify:a.flags?.verify,settle:M(a.flags),expectedResolvedTarget:s,preresolvedTarget:a.internal?.findResolvedTarget}),buildPayloads:t=>Bt({ref:e.sessionRef,sessionStore:e.sessionStore,result:t,text:n.text,flags:a.flags,staleRefsWarning:i})})}async function It(e){try{let t=await Lt(e);return`response`in t?{response:O(t.response)}:t}catch(e){throw D(e)}}async function Lt(e){let{req:t}=e,n=Rt(e);if(`response`in n)return n;let{session:r,parsedTarget:i}=n,a=await Pt(e,r,`fill`,i.target.kind!==`point`);if(!a.ok)return{response:a.response};Fe({flags:t.flags,replayPlanStep:t.internal?.replayPlanStep===!0,isSessionRecording:_(r)});let o=we(`fill`,t.flags);if(o)return{response:o};let s=await zt(e,r,i.target,i.refGeneration);return s.response?{response:s.response}:{admitted:{session:r,parsedTarget:i,touchExecutor:a.touchExecutor,staleRefsWarning:s.staleRefsWarning}}}function Rt(e){let t=e.sessionStore.get(e.sessionName);if(!t)return{response:a()};let n=L(t,`fill`);if(n)return{response:n};let r=Xe(e.req.positionals??[]);return r.ok?{session:t,parsedTarget:r}:{response:r.response}}async function zt(e,t,n,r){if(n.kind!==`ref`)return{};let i=e.req.internal?.findResolvedTarget===void 0?S({session:t,ref:n.ref,mintedGeneration:r}):void 0,a=e.refSnapshotFlagGuardResponse(`fill`,e.req.flags);if(a)return{response:a,staleRefsWarning:i};let o=e.req.internal?.findResolvedTarget?null:A({ref:n.ref,mintedGeneration:r,staleRefsWarning:i,frame:x({session:t,ref:n.ref,mintedGeneration:r})});return o?{response:o,staleRefsWarning:i}:(await I(e,t),{staleRefsWarning:i})}function Bt(e){let{result:t,ref:n,sessionStore:r}=e,i=r.requireCurrent(n),a=J(e.flags?.maestro?.allowNonHittableCoordinateFallback===!0,t.backendResult),o=t.kind===`point`?void 0:w(i.snapshot?.nodes??[]);return G({source:{kind:`runtime`,result:t,publicData:q({command:`fill`,flags:e.flags,data:t.backendResult}),...a.used?{dispatchPath:`maestro-non-hittable-fallback`}:{}},referenceFrame:o,extra:{text:e.text,...a.extra},staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:C(n,r,t.settle)})}async function Vt(e,n,r,i){let a=e,o={selector:r.raw},s=Date.now();b(n);try{let e=await i(r)??{},t=Date.now(),n=Ut(e),c=q({command:dt(a.req.command,`press`),flags:a.req.flags,data:e}),l=J(r.allowNonHittableCoordinateFallback===!0,e),{result:u,responseData:d}=G({source:{kind:`runner-payload`,targetKind:`selector`,data:e,publicData:c,point:n,dispatchPath:l.used?`maestro-non-hittable-fallback`:`maestro-direct-selector`},referenceFrame:Wt(e),extra:{...o,...l.extra}});return j({ref:a.sessionRef,sessionStore:a.sessionStore,command:a.req.command,positionals:a.req.positionals??[],flags:a.req.flags,result:u,responseData:d,actionStartedAt:s,actionFinishedAt:t})}catch(e){return await Ht({error:e,handlerParams:a,extra:o,positionals:[],actionStartedAt:s})||(Ee(e,{delegateSemanticFailures:r.allowNonHittableCoordinateFallback!==!0})?(l({level:`debug`,phase:`ios_direct_selector_tap_fallback`,data:{selector:r.raw,error:e instanceof Error?e.message:String(e)}}),null):{ok:!1,error:t(e)})}}async function Ht(e){let{error:t,handlerParams:n,extra:r,positionals:i,actionStartedAt:a}=e,o=await Y({error:t,command:n.req.command,requestId:n.req.meta?.requestId,flags:n.req.flags,ref:n.sessionRef,sessionStore:n.sessionStore,contextFromFlags:n.contextFromFlags,captureSnapshotForSession:n.captureSnapshotForSession});if(!o)return;let{result:s,responseData:c}=at({targetKind:`selector`,warning:o.warning,resolution:{source:`direct-ios`,kind:`not-observed`},extra:r});return j({ref:n.sessionRef,sessionStore:n.sessionStore,command:n.req.command,positionals:n.req.positionals??i,flags:n.req.flags,result:s,responseData:c,actionStartedAt:a,actionFinishedAt:Date.now()})}function Ut(e){let t=typeof e.x==`number`?e.x:void 0,n=typeof e.y==`number`?e.y:void 0;return t!==void 0&&n!==void 0?{x:t,y:n}:{x:0,y:0}}function Wt(e){return typeof e.referenceWidth==`number`&&typeof e.referenceHeight==`number`?{referenceWidth:e.referenceWidth,referenceHeight:e.referenceHeight}:void 0}function Gt(e){let{session:t,commandLabel:n,target:r,flags:i}=e;return!e.tapElementSelectorAvailable||i?.maestro?.allowNonHittableCoordinateFallback!==!0||n!==`click`||r.kind!==`selector`||_(t)||Jt(i)||p(n)&&i?.verify===!0||ee(n)&&i?.settle===!0?null:Kt(t,r.selector,i)}function Kt(e,t,n){let r=Te({session:e,selectorExpression:t});return r?{...r,...n?.maestro?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},...n?.maestro?.expectedTapPoint?{expectedPoint:n.maestro.expectedTapPoint}:{}}:null}const qt=[`count`,`intervalMs`,`holdMs`,`jitterPx`,`doubleTap`];function Jt(e){return qt.some(t=>e?.[t]!==void 0)?!0:e?.clickButton!==void 0&&e.clickButton!==`primary`}const Yt=new Set([`press`,`click`]);async function Xt(e,t){let n=await Zt(e,t);return`response`in n?{response:O(n.response)}:n}async function Zt(e,t){let{req:n,sessionStore:r,sessionName:i}=e,o=r.get(i);if(!o)return{response:a()};let s=t===`click`?`click`:t,c=Qt(o,t,s,n.flags);if(c)return{response:c};let l=n.positionals??[],u=t===`longpress`?Ye(l):H(l,s);if(!u.ok)return{response:u.response};let d=en(o,n,u),f=nn(e,o,t,u,d);if(f.response)return{response:f.response};let p=y(n.flags);return{admitted:{session:o,commandLabel:s,clickButton:p,resultButtonTag:fe(p),target:u.target,durationMs:t===`longpress`?u.durationMs:void 0,staleRefsWarning:d,refContext:tn(n,u,d)}}}function Qt(e,t,n,r){return L(e,n)||we(t,r)||$t(e,t,n,r)}function $t(e,t,n,r){let i=y(r);if(!Yt.has(t)||i===`primary`)return;let a=pe({commandLabel:n,platform:d(e.device),button:i,count:r?.count,intervalMs:r?.intervalMs,holdMs:r?.holdMs,jitterPx:r?.jitterPx,doubleTap:r?.doubleTap});if(a)return s(a.code,a.message,a.details)}function en(e,t,n){if(n.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0)return S({session:e,ref:n.target.ref,mintedGeneration:n.refGeneration})}function tn(e,t,n){if(t.target.kind===`ref`&&e.internal?.findResolvedTarget===void 0)return{ref:t.target.ref,mintedGeneration:t.refGeneration,staleRefsWarning:n}}function nn(e,t,n,r,i){let{req:a}=e;if(r.target.kind!==`ref`)return{};let o=e.refSnapshotFlagGuardResponse(n===`click`?`press`:n,a.flags);if(o)return{response:o};let s=a.internal?.findResolvedTarget?null:A({ref:r.target.ref,mintedGeneration:r.refGeneration,staleRefsWarning:i,frame:x({session:t,ref:r.target.ref,mintedGeneration:r.refGeneration})});return s?{response:s}:{}}async function $(e,t){e=N(e);let n=await Xt(e,t);if(`response`in n)return n.response;let{admitted:r}=n,i=await Pt(e,r.session,t,r.target.kind!==`point`);if(!i.ok)return i.response;let{touchExecutor:a}=i,o=r.target.kind===`ref`?await I(e,r.session):void 0,s={...r,androidFreshnessBaseline:o},c=e.req.internal?.replayTargetGuard?null:Gt({session:s.session,commandLabel:s.commandLabel,target:s.target,flags:e.req.flags,tapElementSelectorAvailable:a.tapElementSelector!==void 0});if(c&&a.tapElementSelector){let t=await Vt(e,s.session,c,a.tapElementSelector);if(t)return t}return await Z(e,{...rn(e,t,s),touchExecutor:a})}function rn(e,t,n){let{req:r,sessionName:i}=e,{session:a,target:o,durationMs:s,staleRefsWarning:c,resultButtonTag:l}=n,u=t===`longpress`?{...s===void 0?{}:{durationMs:s},gesture:`longpress`}:t===`hover`?{gesture:`hover`}:l;return{androidFreshnessBaseline:n.androidFreshnessBaseline,refContext:n.refContext,iosTapCorroboration:{target:o,extra:u},run:async e=>await an({runtime:e,command:t,target:o,sessionName:i,requestId:r.meta?.requestId,clickButton:n.clickButton,flags:r.flags,durationMs:s,expectedResolvedTarget:r.internal?.replayTargetGuard,preresolvedTarget:r.internal?.findResolvedTarget}),afterRun:async t=>{if(!a.lease?.leaseProvider)return await pt(a,$e(o,t),e.androidObservation)},buildPayloads:async n=>{let i=sn(n);return await ut({params:e,result:n,staleRefsWarning:c,publicData:q({command:t===`longpress`||t===`hover`?void 0:t,flags:r.flags,data:n.backendResult}),extra:t===`longpress`?{...i===void 0?{}:{durationMs:i},gesture:`longpress`}:t===`hover`?{gesture:`hover`}:l})}}}async function an(e){let{runtime:t,command:n,target:r,sessionName:i,requestId:a,flags:o,expectedResolvedTarget:s}=e,c={session:i,requestId:a,settle:M(o),expectedResolvedTarget:s};switch(n){case`longpress`:return await t.interactions.longPress(r,{...c,durationMs:e.durationMs,readinessTimeoutMs:o?.readinessTimeoutMs});case`hover`:return await t.interactions.hover(r,c);case`click`:return await t.interactions.click(r,on(e,c));case`press`:return await t.interactions.press(r,on(e,c))}}function on(e,t){let{flags:n}=e;return{...t,button:e.clickButton,count:n?.count,intervalMs:n?.intervalMs,holdMs:n?.holdMs,jitterPx:n?.jitterPx,doubleTap:n?.doubleTap,verify:n?.verify,readinessTimeoutMs:n?.readinessTimeoutMs,preresolvedTarget:e.preresolvedTarget}}function sn(e){return`durationMs`in e?e.durationMs:void 0}function cn(e,t={}){let n=typeof t.executionProfile==`string`?t.executionProfile:void 0;return{kind:e.kind,durationMs:e.durationMs,pointerCount:e.pointerCount,from:e.from,to:e.to,...e.kind===`drag`?{targets:e.targets}:{},...e.backendResult??{},...t,...n?{timing:{executionProfile:n,gestureDurationMs:e.durationMs}}:{},message:e.message}}function ln(e){return`refused`in e}async function un(e){return e=N(e),await gn(e,`gesture`,async(t,n)=>dn(e,t,n))}async function dn(e,t,n){let r=ie(e.req.input),i=vn(r,t,n);i.intent===`pan`&&e.req.internal?.gestureExecutionProfile&&(i.executionProfile=e.req.internal.gestureExecutionProfile);let a=await P({device:t.device,input:i,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return a.ok?pn(r,i,await fn(hn(e,a.gestures),{session:e.sessionName,requestId:e.req.meta?.requestId},i,e.req.internal),e.req.flags):{refused:a.response}}async function fn(e,t,n,r){if(n.intent!==`drag`)return await e.interactions.gesture({...t,gesture:n});let i=r?.replayTargetGuards??(r?.replayTargetGuard?{source:r.replayTargetGuard}:void 0);return await e.interactions.gesture({...t,gesture:n,...i?{expectedResolvedTargets:i}:{}})}function pn(e,t,n,r){let i=n.kind===`drag`?n.recording:void 0,a=i?.sourceTarget,o=i?.destinationTarget;return{positionals:bn(e,i),flags:Dn(e,r),responseData:cn(n,{executionProfile:_n(t)}),...e.kind===`pinch`?{recordingResultExtra:{scale:e.scale}}:a?{recordingResultExtra:{selectorChain:a.selectorChain}}:{},...a&&o?{recordedTargets:{source:{node:a.node,preActionNodes:a.preActionNodes},destination:{node:o.node,preActionNodes:o.preActionNodes}}}:{}}}async function mn(e){return e=N(e),await gn(e,`swipe`,async t=>{let n=xn(e.req.input),r=await P({device:t.device,input:m(n).gesture,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!r.ok)return{refused:r.response};let i=n.count??1,a=n.pauseMs??0,o=n.pattern??`one-way`,s=await Tn(hn(e,r.gestures),e,n,i,a,o);return{positionals:wn(n),flags:e.req.flags,responseData:cn(s,{from:n.from,to:n.to,x1:n.from.x,y1:n.from.y,x2:n.to.x,y2:n.to.y,effectiveDurationMs:s.durationMs,timingMode:`direct`,executionProfile:`endpoint-hold`,count:i,pauseMs:a,pattern:o})}})}function hn(e,t){return k({...e,gestures:t,pairedGestureViewport:e.req.internal?.gestureViewport})}async function gn(e,n,r){let i=e.sessionStore.get(e.sessionName);if(!i)return a();let o=Date.now();try{let t=g(i.device),a=t?{status:`clear`}:await E({session:i,command:n,phase:`before-command`,observation:e.androidObservation}),s=await r(i,a);if(ln(s))return s.refused;t||await E({session:i,command:n,phase:`after-command`,observation:e.androidObservation});let c={...s.responseData};return a.status===`recovered`&&(c.warning=`${typeof c.warning==`string`?`${c.warning} `:``}${a.warning}`),j({ref:e.sessionRef,sessionStore:e.sessionStore,command:n,actionCommand:n,positionals:s.positionals,flags:s.flags,result:{...c,...s.recordingResultExtra??{}},responseData:c,recordedTargets:s.recordedTargets,actionStartedAt:o,actionFinishedAt:Date.now()})}catch(e){return{ok:!1,error:t(e)}}}function _n(e){if(e.intent===`fling`)return`endpoint-hold`;if(e.intent===`pan`)return e.executionProfile??`timed-pan`;if(e.intent===`drag`)return`timed-pan`}function vn(t,n,r){let i=ae(t);if(i.intent!==`drag`)return i;try{return{...i,source:yn(i.source,n),destination:yn(i.destination,n)}}catch(t){if(r.status===`recovered`){let n=e(t),i=typeof n.details?.warning==`string`?n.details.warning+` `:``;throw n.details={...n.details,warning:i+r.warning},n}throw D(t)}}function yn(e,t){if(!e.startsWith(`@`))return e;let i=n(e);if(!i)throw new r(`INVALID_ARGS`,`Invalid ref "${e}" — malformed generation suffix.`,{hint:o});return De({ref:i.base,mintedGeneration:i.generation,frame:x({session:t,ref:i.base,mintedGeneration:i.generation})}),i.base}function bn(e,t){return e.kind!==`drag`||!t?h(e):h({...e,source:t.sourceSelector??e.source,destination:t.destinationSelector??e.destination})}function xn(e){if(!e||typeof e!=`object`||Array.isArray(e))throw new r(`INVALID_ARGS`,`swipe requires structured object input`);oe(e);let t=e,n=t.pattern;if(n!==void 0&&n!==`one-way`&&n!==`ping-pong`)throw new r(`INVALID_ARGS`,`swipe pattern must be one-way or ping-pong`);let i={from:Cn(t.from,`swipe from`),to:Cn(t.to,`swipe to`),count:c(t,`count`,{min:1,max:200}),pauseMs:c(t,`pauseMs`,{min:0,max:re}),pattern:n};return Sn(i),i}function Sn(e){let t=e.count??1,n=e.pauseMs??0,i=t*100+Math.max(0,t-1)*n;if(!(i<=6e4))throw new r(`INVALID_ARGS`,`Swipe series must fit within ${ne}ms.`,{count:t,pauseMs:n,gestureDurationMs:100,scheduledDurationMs:i,hint:`Reduce --count or --pause-ms.`})}function Cn(e,t){if(!e||typeof e!=`object`||Array.isArray(e))throw new r(`INVALID_ARGS`,`${t} must be a point`);let n=e;if(typeof n.x!=`number`||!Number.isFinite(n.x))throw new r(`INVALID_ARGS`,`${t} x must be finite`);if(typeof n.y!=`number`||!Number.isFinite(n.y))throw new r(`INVALID_ARGS`,`${t} y must be finite`);return{x:n.x,y:n.y}}function wn(e){return[String(e.from.x),String(e.from.y),String(e.to.x),String(e.to.y)]}async function Tn(e,t,n,r,i,a){let o;for(let s=0;s<r;s+=1){let c=m(En(n,a,s));o=await e.interactions.gesture({session:t.sessionName,requestId:t.req.meta?.requestId,gesture:c.gesture}),i>0&&s+1<r&&await ge(i)}if(!o)throw Error(`Swipe orchestration did not execute a gesture.`);return o}function En(e,t,n){return t!==`ping-pong`||n%2!=1?e:{...e,from:e.to,to:e.from}}function Dn(e,t){return e.kind!==`pan`||e.pointerCount===void 0?t:{...t,pointerCount:e.pointerCount}}async function On(e){let t={},n=e.sessionRef,r=await kn({...e,sessionRef:n,refSnapshotFlagGuardResponse:Ae,captureProof:t});return r&&se({response:r,consumedTree:t,captureProof:t})}async function kn(e){switch(e.req.command){case`press`:return await $(e,`press`);case`click`:return await $(e,`click`);case`longpress`:return await $(e,`longpress`);case`hover`:return await $(e,`hover`);case`fill`:return await Ft(e);default:return await An(e)}}async function An(e){switch(e.req.command){case v.gesture:return await un(e);case v.swipe:return await mn(e);case v.type:return await jn(e);case`get`:return await Me(e);case`is`:return await je(e);default:return null}}async function jn(e){let{sessionName:t,sessionStore:n}=e,r=n.get(t);if(!r)return a();let i=await Pe({device:r.device,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!i.ok)return i.response;let o=await Mn(r,e.androidObservation);return o.response?o.response:await Nn(e,r,i.typeText,o.warning)}async function Mn(e,t){if(e.device.platform===`android`&&e.screenRecording){let n=await Se({session:e,observation:t});if(n.status===`failed`)return{response:s(`COMMAND_FAILED`,`Android system dialog blocked the recording session`)};if(n.status===`unknown`)return{warning:n.warning}}return{}}async function Nn(e,n,r,i){let{req:a,sessionStore:o}=e,s=Date.now();try{let t=await E({session:n,command:a.command,phase:`before-command`,observation:e.androidObservation});b(n);let c=await r(a.positionals??[],e.contextFromFlags(a.flags,n.appBundleId,n.trace?.outPath));await E({session:n,command:a.command,phase:`after-command`,observation:e.androidObservation});let l=Date.now(),u={...c};return Pn(u,i,t),j({ref:e.sessionRef,sessionStore:o,command:a.command,positionals:a.positionals??[],flags:a.flags,result:u,responseData:u,actionStartedAt:s,actionFinishedAt:l})}catch(e){return{ok:!1,error:t(e)}}}function Pn(e,t,n){let r=[typeof e.warning==`string`?e.warning:void 0,t];n.status===`recovered`&&r.push(n.warning);let i=r.filter(e=>typeof e==`string`&&e.length>0).join(` `);i.length>0&&(e.warning=i)}export{On as handleInteractionCommands};
|
|
1
|
+
import{F as e,J as t,M as n,P as r,f as i,h as a,s as o}from"./sdk-contracts.js";import{m as s}from"./sdk-batch-runner.js";import{r as c}from"./diagnostics.js";import"./diagnostics2.js";import{E as l,g as u}from"./sdk-device.js";import{g as d,h as f,m as p,w as ee}from"./sdk-batch.js";import{c as te,o as ne}from"./scroll-gesture.js";import{C as m,E as re,S as ie,v as ae,x as oe}from"./script.js";import{c as se}from"./target-evidence.js";import{F as ce,n as h,p as g}from"./provider-device-admission.js";import{S as le,v as ue}from"./runtime.js";import{n as _}from"./catalog.js";import{r as de}from"./success-text.js";import{i as v,n as fe,r as pe}from"./click-button.js";import{r as me,t as he}from"./interaction-positionals.js";import{i as ge}from"./retry.js";import"./retry2.js";import"./gesture-plan.js";import{r as _e}from"./request-cancel.js";import"./request.js";import{P as y,a as b,i as ve,j as x,k as ye,n as S}from"./session-snapshot.js";import{c as be,s as xe}from"./quality-warnings.js";import{$ as C,et as w,n as T,nt as Se,t as E,tt as D}from"./internal/daemon.js";import{a as Ce,c as we,i as O,l as Te,n as k,o as A,r as j,s as Ee,t as De,u as M}from"./interaction-ref-policy.js";import{n as Oe,t as ke}from"./touch-runtime2.js";import{t as N}from"./gesture-runtime.js";import{d as Ae,g as P,i as je,r as Me,u as Ne}from"./selector-runtime.js";import{n as Pe}from"./type-text-runtime.js";function Fe(e){let t=e.flags?.recordAs;if(t!==void 0){if(ce(t),e.flags?.noRecord)throw new r(`INVALID_ARGS`,`fill --record-as cannot be combined with --no-record because no script step would be published.`);if(!e.isSessionRecording&&!e.replayPlanStep)throw new r(`INVALID_ARGS`,`fill --record-as requires an armed script recording. Start a fresh session with open --save-script, then retry the fill.`)}}async function F(e,t){if(!ye(t))return;let n=t.snapshot?.comparisonSafe===!0?t.snapshot:void 0;try{await e.captureSnapshotForSession(e.sessionRef,e.req.flags,e.sessionStore,e.contextFromFlags,{interactiveOnly:!0,androidFreshnessMode:`ref-refresh`})}catch(t){c({level:`warn`,phase:`android_ref_snapshot_refresh_failed`,data:{command:e.req.command,error:t instanceof Error?t.message:String(t)}})}return n}function I(e,t){return!u(e.device)||e.surface!==`desktop`&&e.surface!==`menubar`||e.surface===`menubar`&&(t===`click`||t===`press`)?null:o(`UNSUPPORTED_OPERATION`,`${t} is not supported on macOS ${e.surface} sessions yet. Open an app session to act, or use the ${e.surface} surface to inspect.`)}const Ie=new Set(d()),Le=new Set([`currentUptimeMs`,`gestureEndUptimeMs`,`gestureStartUptimeMs`,`sequenceResults`]);function L(e){if(e)return Object.fromEntries(Object.entries(e).filter(([e])=>!Le.has(e)))}function Re(e){return Be({fields:ze(e.command),input:e.input??{},data:L(e.data),controlledFields:Ie})}function ze(e){let t=ee(e);if(!t)throw Error(`Missing response data transform descriptor for ${e}`);return t.fields}function Be(e){let t=Object.fromEntries(Object.entries(e.data??{}).filter(([t])=>!e.controlledFields.has(t)));for(let[n,r]of Object.entries(e.fields)){let i=e.input[n]===void 0?r.defaultValue:e.input[n];if(i===void 0||r.omitDefault===!0&&i===r.defaultValue){delete t[n];continue}t[n]=i}return Object.fromEntries(Object.entries(t).filter(([,e])=>e!==void 0))}async function Ve(e){let{ref:t,flags:n,sessionStore:r,contextFromFlags:i,captureSnapshotForSession:a,observation:o}=e,s=r.resolveCurrent(t);if(!s)return;let c=s.screenRecording;if(!c)return;let l=c.handle,u=e=>{if(!(!e||r.resolveCurrent(t)?.screenRecording!==c))return l.setTouchReferenceFrame(e),e},d=l.inspect().touchReferenceFrame;if(d)return d;if(s.device.platform===`android`&&!s.lease?.leaseProvider&&!h(s.device)){if(!o)throw Error(`Android observation was not injected into the request`);let e=await o.readScreenSize(s.device);return u({referenceWidth:e.width,referenceHeight:e.height})}let f=C(s.snapshot);if(f)return u(f);let p=await a(t,n,r,i,{interactiveOnly:!0});return u(C(p))}async function He(e){try{return await Ve(e)}catch(t){let n=e.sessionStore.resolveCurrent(e.ref);if(!n)return;c({level:`warn`,phase:`touch_reference_frame_resolve_failed`,data:{platform:n.device.platform,error:t instanceof Error?t.message:String(t)}});return}}function R(e){let{data:t,fallbackX:n,fallbackY:r,referenceFrame:i,extra:a}=e,o=We(a,n,r)??(typeof t?.message==`string`?t.message:void 0);return Ue({...t??{},...n===void 0||r===void 0?{}:{x:n,y:r},...i??{},...a??{},...de(o)})}function Ue(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function We(e,t,n){let r=z(e,`text`);if(r!==void 0)return`Filled ${Array.from(r).length} chars`;let i=Ge(t,n),a=Ke(e);if(a)return Je(a,e??{},i);if(i)return qe(e,i)}function z(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function Ge(e,t){return e===void 0||t===void 0?``:` (${e}, ${t})`}function Ke(e){let t=z(e,`ref`);return t===void 0?z(e,`selector`):`@${t}`}function qe(e,t){return e?.gesture===`longpress`?`Long pressed${t}`:e?.gesture===`hover`?`Hovered${t}`:`Tapped${t}`}function Je(e,t,n){let r=typeof t.button==`string`?t.button:void 0;return t.gesture===`longpress`?`Long pressed ${e}${n}`:t.gesture===`hover`?`Hovered ${e}${n}`:r&&r!==`primary`?`Clicked ${r} ${e}${n}`:`Tapped ${e}${n}`}function B(e){if(e.length<2)return null;let t=Number(e[0]),n=Number(e[1]);return!Number.isFinite(t)||!Number.isFinite(n)?null:{x:t,y:n}}function V(e,t){let n=B(e);if(n)return{ok:!0,target:{kind:`point`,x:n.x,y:n.y}};let r=e[0]??``;if(r.startsWith(`@`)){let t=P(r);return t.ok?{ok:!0,target:{kind:`ref`,ref:t.ref,fallbackLabel:e.slice(1).join(` `).trim()},refGeneration:t.generation}:{ok:!1,response:t.response}}let i=e.join(` `).trim();return i?{ok:!0,target:{kind:`selector`,selector:i}}:{ok:!1,response:o(`INVALID_ARGS`,`${t} requires @ref, selector expression, or x y coordinates`)}}function Ye(e){let t=B(e);if(t)return{ok:!0,target:{kind:`point`,x:t.x,y:t.y},...tt(e[2])};let n=et(e),r=V(n.targetPositionals,`longpress`);return r.ok?{ok:!0,target:r.target,refGeneration:r.refGeneration,...n.duration}:r}function H(e){return{ok:!1,response:o(`INVALID_ARGS`,`fill requires text after ${e} (use "" to clear the field)`)}}function Xe(e){let t=Ze(e);if(!t)return{ok:!1,response:o(`INVALID_ARGS`,`fill requires x y text, @ref text, or selector text`)};switch(t.kind){case`ref`:{let n=P(e[0]??``);return n.ok?t.text===void 0?H(`ref`):{ok:!0,target:{kind:`ref`,ref:n.ref},refGeneration:n.generation,text:t.text}:{ok:!1,response:n.response}}case`point`:return t.text===void 0?H(`coordinates`):{ok:!0,target:{kind:`point`,x:t.target.x,y:t.target.y},text:t.text};case`selector`:return t.text===void 0||t.text.length>0&&!t.text.trim()?H(`selector`):{ok:!0,target:{kind:`selector`,selector:t.target.selector},text:t.text}}}function Ze(e){try{return he(e)}catch{return null}}function Qe(e){let t=`evidence`in e?e.evidence:void 0,n=e.settle;return e.kind===`ref`?{ref:me(e.target?.kind===`ref`?e.target.ref:void 0),refLabel:e.refLabel,selectorChain:e.selectorChain,targetHittable:e.targetHittable,hint:e.hint,evidence:t,settle:n,resolution:e.resolution}:e.kind===`selector`?{selector:e.target?.kind===`selector`?e.target.selector:void 0,selectorChain:e.selectorChain,refLabel:e.refLabel,targetHittable:e.targetHittable,hint:e.hint,evidence:t,settle:n,resolution:e.resolution}:{evidence:t,settle:n}}function $e(e,t){return e.kind===`point`?`coordinate tap`:t.kind===`ref`&&t.target?.kind===`ref`?t.target.ref:t.kind===`selector`&&t.target?.kind===`selector`?t.target.selector:`target`}function et(e){let t=e.at(-1);return e.length>1&&nt(t)?{targetPositionals:e.slice(0,-1),duration:{durationMs:Number(t)}}:{targetPositionals:e,duration:{}}}function tt(e){return e===void 0?{}:{durationMs:Number(e)}}function nt(e){return e===void 0||e.trim()===``?!1:Number.isFinite(Number(e))}const rt={source:`direct-ios`,kind:`not-observed`};function U(e,t){if(!it(e))return t;let{resolution:n,...r}=t;return r}function it(e){return`dispatchPath`in e&&e.dispatchPath===`maestro-non-hittable-fallback`}function at(e){return W({source:{kind:`corroborated-tap`,targetKind:e.targetKind,data:{warning:e.warning},publicData:{warning:e.warning},point:e.point,resolution:e.resolution},referenceFrame:e.referenceFrame,extra:e.extra})}function W(e){let{source:t,referenceFrame:n,extra:r}=e;if(t.kind===`runner-payload`||t.kind===`corroborated-tap`){let e={targetKind:t.targetKind,...U(t,{resolution:t.kind===`runner-payload`?rt:t.resolution}),...r??{}};return{result:R({data:t.data,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e}),responseData:R({data:t.publicData,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e})}}let{result:i}=t,a={targetKind:i.kind,...U(t,Qe(i)),...ct(i.settle,e.settleRefsGeneration),...r??{}},o=R({data:i.backendResult,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:{...a,...st(i)}}),s=R({data:t.publicData,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:a}),c=lt(`warning`in i?i.warning:void 0,e.staleRefsWarning);return c&&(o.warning=c,s.warning=c),`readiness`in i&&i.readiness&&(s.readiness=i.readiness),{result:o,responseData:s,...ot(i)}}function ot(e){let t=G(e)?.node??(`node`in e?e.node:void 0),n=`preAction`in e?e.preAction?.nodes:void 0;return t&&n?{recordedTarget:{node:t,preActionNodes:n}}:{}}function st(e){let t=G(e);return t?{selectorChain:t.selectorChain,refLabel:t.refLabel}:{}}function G(e){return`recordingTarget`in e?e.recordingTarget:void 0}function ct(e,t){return!e?.diff||t===void 0?{}:{settle:{...e,refsGeneration:t}}}function lt(e,t){return t?e?`${e} ${t}`:t:e}async function ut(e){let{params:t,result:n,publicData:r,extra:i}=e,a=n.kind===`point`?await He({ref:t.sessionRef,flags:t.req.flags,sessionStore:t.sessionStore,contextFromFlags:t.contextFromFlags,captureSnapshotForSession:t.captureSnapshotForSession,observation:t.androidObservation}):void 0,o=t.sessionStore.resolveCurrent(t.sessionRef),s=o?n.kind===`point`?a:w(o.snapshot?.nodes??[]):void 0,c=o?n:{...n,settle:void 0};return W({source:{kind:`runtime`,result:c,publicData:r},referenceFrame:s,extra:i,staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:S(t.sessionRef,t.sessionStore,c.settle)})}function K(e){return e.command?Re({command:e.command,input:e.flags,data:e.data}):L(e.data)}function dt(e,t){return e===`click`||e===`press`||e===`fill`?e:t}function q(e,t){if(!e)return{used:!1,extra:{}};let n=t?.maestroNonHittableCoordinateFallbackUsed===!0;return{used:n,extra:{maestroNonHittableCoordinateFallbackAllowed:!0,maestroNonHittableCoordinateFallbackUsed:n,...n?{maestroFallbackReason:`non-hittable-coordinate`}:{}}}}async function ft(e,t,n){let i=await Ne(e,n);if(i){if(i.permissionDialog)return`press ${t} opened an Android permission dialog (${i.foregroundPackage}) over ${i.expectedPackage}. ${i.hint}`;throw new r(`COMMAND_FAILED`,`press ${t} left ${e.appBundleId} and foregrounded ${i.foregroundPackage}. The tap likely escaped the app.`,i)}}function pt(e){return e.code===`COMMAND_FAILED`&&typeof e.details?.expectedPackage==`string`&&typeof e.details?.foregroundPackage==`string`}async function J(e){let t=e.sessionStore.resolveCurrent(e.ref);if(!t||!mt(e,t))return;let n=gt(t.snapshot);if(!n)return;let r=await _t(e,n.snapshot.snapshotQuality,n.presentation);if(!(!r||!vt(n.snapshot,r,e.command)))return xt(n.snapshot,r,e.command)}function mt(t,n){return ht(t.command)&&e(t.error).code===`XCTEST_RECORDED_FAILURE`&&we(n,{skipPendingPostGestureStabilization:!1})}function ht(e){return e===`click`||e===`press`}function gt(e){if(!Y(e))return;let t=Date.now()-e.createdAt;if(t<0||t>15e3){c({level:`debug`,phase:`ios_tap_failure_corroboration_stale_baseline`,data:{ageMs:t}});return}let n=St(e.presentationKey);if(n){if(n.raw){c({level:`debug`,phase:`ios_tap_failure_corroboration_raw_baseline`,data:{presentationKey:e.presentationKey}});return}return{snapshot:e,presentation:n}}}async function _t(e,t,n){try{let r=be(t);return await e.captureSnapshotForSession(e.ref,Dt(e.flags,n),e.sessionStore,e.contextFromFlags,{interactiveOnly:n?.interactiveOnly??!0,...r?{preferredBackend:r}:{},signal:_e(e.requestId)})}catch(t){c({level:`debug`,phase:`ios_tap_failure_corroboration_capture_failed`,data:{command:e.command,error:t instanceof Error?t.message:String(t)}});return}}function vt(e,t,n){let r=yt(e,t);return r===void 0?bt(e,t,n):r?!0:(c({level:`debug`,phase:`ios_tap_failure_corroboration_identity_mismatch`,data:{command:n}}),!1)}function yt(e,t){if(e.comparisonKey!==void 0||t.comparisonKey!==void 0)return e.comparisonKey!==void 0&&e.comparisonKey===t.comparisonKey}function bt(e,t,n){let r=e.snapshotQuality?.backend,i=t.snapshotQuality?.backend;return!r||r!==i?(c({level:`debug`,phase:`ios_tap_failure_corroboration_backend_mismatch`,data:{command:n,baselineBackend:r,afterBackend:i}}),!1):e.presentationKey===t.presentationKey||(c({level:`debug`,phase:`ios_tap_failure_corroboration_scope_mismatch`,data:{command:n,baselinePresentationKey:e.presentationKey,afterPresentationKey:t.presentationKey}}),!1)}function xt(e,t,n){if(!Y(t))return;let r=ue(e.nodes),i=ue(t.nodes);if(r.digest!==i.digest)return c({level:`warn`,phase:`ios_tap_failure_corroborated`,data:{command:n,beforeNodeCount:r.nodeCount,afterNodeCount:i.nodeCount}}),{warning:`XCTest reported the tap as failed, but a same-scope post-action accessibility capture changed; treating the tap as landed. Observe the current screen before issuing another tap.`}}function Y(e){return!!(e&&e.nodes.length>0&&!xe(e.snapshotQuality))}function St(e){if(!e)return;let t;try{t=JSON.parse(e)}catch{return}return Ct(t)}function Ct(e){let t=wt(e);if(!(!t||typeof t.interactiveOnly!=`boolean`||typeof t.raw!=`boolean`)&&!(!Tt(t.depth)||!Et(t.scope)))return{interactiveOnly:t.interactiveOnly,...typeof t.depth==`number`?{depth:t.depth}:{},...typeof t.scope==`string`?{scope:t.scope}:{},raw:t.raw}}function wt(e){return typeof e==`object`&&e?e:void 0}function Tt(e){return e==null||typeof e==`number`}function Et(e){return e==null||typeof e==`string`}function Dt(e,t){if(!(!e&&!t))return{...e??{},out:void 0,...t?{snapshotDepth:t.depth,snapshotScope:t.scope,snapshotRaw:t.raw}:{}}}function Ot(e){return e.kind===`selector`?{selector:e.selector}:e.kind===`ref`?{ref:e.ref.startsWith(`@`)?e.ref.slice(1):e.ref}:{}}async function kt(e,t,n,r,i){if(e.lease?.leaseProvider)return{aborted:!1,readiness:{status:`clear`},runtimeResult:await r()};let a=await D({session:e,command:t,phase:`before-command`,observation:i});if(n.refContext&&a.status===`recovered`){let t=k({ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration,staleRefsWarning:n.refContext.staleRefsWarning,frame:y({session:e,ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration})});if(t)return{aborted:!0,response:t}}let o=await r();return await D({session:e,command:t,phase:`after-command`,observation:i}),{aborted:!1,readiness:a,runtimeResult:o}}async function X(t,n){if(t=M(t),!t.sessionRef)return i();let r=t.sessionStore.requireCurrent(t.sessionRef),a={},o=Ce({...t,touchExecutor:n.touchExecutor,consumedCapture:a}),s=Date.now();try{let e,i=await kt(r,t.req.command,{refContext:n.refContext},async()=>{let t=await n.run(o);return e=await n.afterRun?.(t),t},t.androidObservation);if(i.aborted)return i.response;let{readiness:a,runtimeResult:c}=i,l=Date.now(),{result:u,responseData:d,recordedTarget:f}=await n.buildPayloads(c),p=[...a.status===`recovered`?[a.warning]:[],...e?[e]:[]];if(p.length>0){let e=[...typeof d.warning==`string`?[d.warning]:[],...p].join(` `);u.warning=e,d.warning=e}return A({ref:t.sessionRef,sessionStore:t.sessionStore,command:t.req.command,positionals:t.req.positionals??[],flags:t.req.flags,result:u,responseData:d,recordedTarget:f,actionStartedAt:s,actionFinishedAt:l,androidFreshnessBaseline:n.androidFreshnessBaseline})}catch(i){let o=ve(t.sessionRef,t.sessionStore,e(i),a.state);if(pt(o))throw o;return o.code===`AMBIGUOUS_MATCH`?Z(o):await At({error:o,handlerParams:t,session:r,target:n.iosTapCorroboration?.target,extra:n.iosTapCorroboration?.extra,actionStartedAt:s,androidFreshnessBaseline:n.androidFreshnessBaseline})||Z(o)}}async function At(e){if(!e.target)return;let t=le(e.error);if(!t&&g(e.session))return;let n=await J({error:e.error,command:e.handlerParams.req.command,requestId:e.handlerParams.req.meta?.requestId,flags:e.handlerParams.req.flags,ref:e.handlerParams.sessionRef,sessionStore:e.handlerParams.sessionStore,contextFromFlags:e.handlerParams.contextFromFlags,captureSnapshotForSession:e.handlerParams.captureSnapshotForSession});if(!n)return;let r=jt({target:e.target,resolvedTarget:t,warning:n.warning,referenceFrame:w(e.session.snapshot?.nodes??[]),extra:e.extra});return A({ref:e.handlerParams.sessionRef,sessionStore:e.handlerParams.sessionStore,command:e.handlerParams.req.command,positionals:e.handlerParams.req.positionals??[],flags:e.handlerParams.req.flags,result:r.result,responseData:r.responseData,recordedTarget:r.recordedTarget,actionStartedAt:e.actionStartedAt,actionFinishedAt:Date.now(),androidFreshnessBaseline:e.androidFreshnessBaseline})}function jt(e){return e.resolvedTarget?W({source:{kind:`runtime`,result:{...e.resolvedTarget,warning:e.warning}},referenceFrame:e.referenceFrame,extra:e.extra}):at({targetKind:e.target.kind,point:Mt(e.target),warning:e.warning,referenceFrame:e.referenceFrame,extra:{...Ot(e.target),...e.extra??{}}})}function Mt(e){return e.kind===`point`?{x:e.x,y:e.y}:void 0}function Z(e){return{ok:!1,error:t(e)}}async function Nt(e,t,n,r){let i=await Oe({device:t.device,command:n,requiresCapture:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?{ok:!0,touchExecutor:ke(i.runtime,e.contextFromFlags(e.req.flags,t.appBundleId,t.trace?.outPath))}:{ok:!1,response:E(i.response)}}async function Pt(e){e=M(e);let t=await Ft(e);if(`response`in t)return t.response;let{parsedTarget:n,touchExecutor:r,staleRefsWarning:i}=t.admitted,{req:a,sessionName:o}=e,s=a.internal?.replayTargetGuard;return await X(e,{touchExecutor:r,refContext:n.target.kind===`ref`&&a.internal?.findResolvedTarget===void 0?{ref:n.target.ref,mintedGeneration:n.refGeneration,staleRefsWarning:i}:void 0,run:async e=>await e.interactions.fill(n.target,n.text,{session:o,requestId:a.meta?.requestId,delayMs:a.flags?.delayMs,allowNonHittableCoordinateFallback:a.flags?.maestro?.allowNonHittableCoordinateFallback,verify:a.flags?.verify,settle:j(a.flags),expectedResolvedTarget:s,preresolvedTarget:a.internal?.findResolvedTarget}),buildPayloads:t=>zt({ref:e.sessionRef,sessionStore:e.sessionStore,result:t,text:n.text,flags:a.flags,staleRefsWarning:i})})}async function Ft(e){try{let t=await It(e);return`response`in t?{response:E(t.response)}:t}catch(e){throw T(e)}}async function It(e){let{req:t}=e,n=Lt(e);if(`response`in n)return n;let{session:r,parsedTarget:i}=n,a=await Nt(e,r,`fill`,i.target.kind!==`point`);if(!a.ok)return{response:a.response};Fe({flags:t.flags,replayPlanStep:t.internal?.replayPlanStep===!0,isSessionRecording:g(r)});let o=O(`fill`,t.flags);if(o)return{response:o};let s=await Rt(e,r,i.target,i.refGeneration);return s.response?{response:s.response}:{admitted:{session:r,parsedTarget:i,touchExecutor:a.touchExecutor,staleRefsWarning:s.staleRefsWarning}}}function Lt(e){let t=e.sessionStore.get(e.sessionName);if(!t)return{response:i()};let n=I(t,`fill`);if(n)return{response:n};let r=Xe(e.req.positionals??[]);return r.ok?{session:t,parsedTarget:r}:{response:r.response}}async function Rt(e,t,n,r){if(n.kind!==`ref`)return{};let i=e.req.internal?.findResolvedTarget===void 0?b({session:t,ref:n.ref,mintedGeneration:r}):void 0,a=e.refSnapshotFlagGuardResponse(`fill`,e.req.flags);if(a)return{response:a,staleRefsWarning:i};let o=e.req.internal?.findResolvedTarget?null:k({ref:n.ref,mintedGeneration:r,staleRefsWarning:i,frame:y({session:t,ref:n.ref,mintedGeneration:r})});return o?{response:o,staleRefsWarning:i}:(await F(e,t),{staleRefsWarning:i})}function zt(e){let{result:t,ref:n,sessionStore:r}=e,i=r.requireCurrent(n),a=q(e.flags?.maestro?.allowNonHittableCoordinateFallback===!0,t.backendResult),o=t.kind===`point`?void 0:w(i.snapshot?.nodes??[]);return W({source:{kind:`runtime`,result:t,publicData:K({command:`fill`,flags:e.flags,data:t.backendResult}),...a.used?{dispatchPath:`maestro-non-hittable-fallback`}:{}},referenceFrame:o,extra:{text:e.text,...a.extra},staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:S(n,r,t.settle)})}async function Bt(e,n,r,i){let a=e,o={selector:r.raw},s=Date.now();x(n);try{let e=await i(r)??{},t=Date.now(),n=Ht(e),c=K({command:dt(a.req.command,`press`),flags:a.req.flags,data:e}),l=q(r.allowNonHittableCoordinateFallback===!0,e),{result:u,responseData:d}=W({source:{kind:`runner-payload`,targetKind:`selector`,data:e,publicData:c,point:n,dispatchPath:l.used?`maestro-non-hittable-fallback`:`maestro-direct-selector`},referenceFrame:Ut(e),extra:{...o,...l.extra}});return A({ref:a.sessionRef,sessionStore:a.sessionStore,command:a.req.command,positionals:a.req.positionals??[],flags:a.req.flags,result:u,responseData:d,actionStartedAt:s,actionFinishedAt:t})}catch(e){return await Vt({error:e,handlerParams:a,extra:o,positionals:[],actionStartedAt:s})||(Ee(e,{delegateSemanticFailures:r.allowNonHittableCoordinateFallback!==!0})?(c({level:`debug`,phase:`ios_direct_selector_tap_fallback`,data:{selector:r.raw,error:e instanceof Error?e.message:String(e)}}),null):{ok:!1,error:t(e)})}}async function Vt(e){let{error:t,handlerParams:n,extra:r,positionals:i,actionStartedAt:a}=e,o=await J({error:t,command:n.req.command,requestId:n.req.meta?.requestId,flags:n.req.flags,ref:n.sessionRef,sessionStore:n.sessionStore,contextFromFlags:n.contextFromFlags,captureSnapshotForSession:n.captureSnapshotForSession});if(!o)return;let{result:s,responseData:c}=at({targetKind:`selector`,warning:o.warning,resolution:{source:`direct-ios`,kind:`not-observed`},extra:r});return A({ref:n.sessionRef,sessionStore:n.sessionStore,command:n.req.command,positionals:n.req.positionals??i,flags:n.req.flags,result:s,responseData:c,actionStartedAt:a,actionFinishedAt:Date.now()})}function Ht(e){let t=typeof e.x==`number`?e.x:void 0,n=typeof e.y==`number`?e.y:void 0;return t!==void 0&&n!==void 0?{x:t,y:n}:{x:0,y:0}}function Ut(e){return typeof e.referenceWidth==`number`&&typeof e.referenceHeight==`number`?{referenceWidth:e.referenceWidth,referenceHeight:e.referenceHeight}:void 0}function Wt(e){let{session:t,commandLabel:n,target:r,flags:i}=e;return!e.tapElementSelectorAvailable||i?.maestro?.allowNonHittableCoordinateFallback!==!0||n!==`click`||r.kind!==`selector`||g(t)||qt(i)||f(n)&&i?.verify===!0||p(n)&&i?.settle===!0?null:Gt(t,r.selector,i)}function Gt(e,t,n){let r=Te({session:e,selectorExpression:t});return r?{...r,...n?.maestro?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},...n?.maestro?.expectedTapPoint?{expectedPoint:n.maestro.expectedTapPoint}:{}}:null}const Kt=[`count`,`intervalMs`,`holdMs`,`jitterPx`,`doubleTap`];function qt(e){return Kt.some(t=>e?.[t]!==void 0)?!0:e?.clickButton!==void 0&&e.clickButton!==`primary`}const Jt=new Set([`press`,`click`]);async function Yt(e,t){let n=await Xt(e,t);return`response`in n?{response:E(n.response)}:n}async function Xt(e,t){let{req:n,sessionStore:r,sessionName:a}=e,o=r.get(a);if(!o)return{response:i()};let s=t===`click`?`click`:t,c=Zt(o,t,s,n.flags);if(c)return{response:c};let l=n.positionals??[],u=t===`longpress`?Ye(l):V(l,s);if(!u.ok)return{response:u.response};let d=$t(o,n,u),f=tn(e,o,t,u,d);if(f.response)return{response:f.response};let p=v(n.flags);return{admitted:{session:o,commandLabel:s,clickButton:p,resultButtonTag:fe(p),target:u.target,durationMs:t===`longpress`?u.durationMs:void 0,staleRefsWarning:d,refContext:en(n,u,d)}}}function Zt(e,t,n,r){return I(e,n)||O(t,r)||Qt(e,t,n,r)}function Qt(e,t,n,r){let i=v(r);if(!Jt.has(t)||i===`primary`)return;let a=pe({commandLabel:n,platform:l(e.device),button:i,count:r?.count,intervalMs:r?.intervalMs,holdMs:r?.holdMs,jitterPx:r?.jitterPx,doubleTap:r?.doubleTap});if(a)return o(a.code,a.message,a.details)}function $t(e,t,n){if(n.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0)return b({session:e,ref:n.target.ref,mintedGeneration:n.refGeneration})}function en(e,t,n){if(t.target.kind===`ref`&&e.internal?.findResolvedTarget===void 0)return{ref:t.target.ref,mintedGeneration:t.refGeneration,staleRefsWarning:n}}function tn(e,t,n,r,i){let{req:a}=e;if(r.target.kind!==`ref`)return{};let o=e.refSnapshotFlagGuardResponse(n===`click`?`press`:n,a.flags);if(o)return{response:o};let s=a.internal?.findResolvedTarget?null:k({ref:r.target.ref,mintedGeneration:r.refGeneration,staleRefsWarning:i,frame:y({session:t,ref:r.target.ref,mintedGeneration:r.refGeneration})});return s?{response:s}:{}}async function Q(e,t){e=M(e);let n=await Yt(e,t);if(`response`in n)return n.response;let{admitted:r}=n,i=await Nt(e,r.session,t,r.target.kind!==`point`);if(!i.ok)return i.response;let{touchExecutor:a}=i,o=r.target.kind===`ref`?await F(e,r.session):void 0,s={...r,androidFreshnessBaseline:o},c=e.req.internal?.replayTargetGuard?null:Wt({session:s.session,commandLabel:s.commandLabel,target:s.target,flags:e.req.flags,tapElementSelectorAvailable:a.tapElementSelector!==void 0});if(c&&a.tapElementSelector){let t=await Bt(e,s.session,c,a.tapElementSelector);if(t)return t}return await X(e,{...nn(e,t,s),touchExecutor:a})}function nn(e,t,n){let{req:r,sessionName:i}=e,{session:a,target:o,durationMs:s,staleRefsWarning:c,resultButtonTag:l}=n,u=t===`longpress`?{...s===void 0?{}:{durationMs:s},gesture:`longpress`}:t===`hover`?{gesture:`hover`}:l;return{androidFreshnessBaseline:n.androidFreshnessBaseline,refContext:n.refContext,iosTapCorroboration:{target:o,extra:u},run:async e=>await rn({runtime:e,command:t,target:o,sessionName:i,requestId:r.meta?.requestId,clickButton:n.clickButton,flags:r.flags,durationMs:s,expectedResolvedTarget:r.internal?.replayTargetGuard,preresolvedTarget:r.internal?.findResolvedTarget}),afterRun:async t=>{if(!a.lease?.leaseProvider)return await ft(a,$e(o,t),e.androidObservation)},buildPayloads:async n=>{let i=on(n);return await ut({params:e,result:n,staleRefsWarning:c,publicData:K({command:t===`longpress`||t===`hover`?void 0:t,flags:r.flags,data:n.backendResult}),extra:t===`longpress`?{...i===void 0?{}:{durationMs:i},gesture:`longpress`}:t===`hover`?{gesture:`hover`}:l})}}}async function rn(e){let{runtime:t,command:n,target:r,sessionName:i,requestId:a,flags:o,expectedResolvedTarget:s}=e,c={session:i,requestId:a,settle:j(o),expectedResolvedTarget:s};switch(n){case`longpress`:return await t.interactions.longPress(r,{...c,durationMs:e.durationMs,readinessTimeoutMs:o?.readinessTimeoutMs});case`hover`:return await t.interactions.hover(r,c);case`click`:return await t.interactions.click(r,an(e,c));case`press`:return await t.interactions.press(r,an(e,c))}}function an(e,t){let{flags:n}=e;return{...t,button:e.clickButton,count:n?.count,intervalMs:n?.intervalMs,holdMs:n?.holdMs,jitterPx:n?.jitterPx,doubleTap:n?.doubleTap,verify:n?.verify,readinessTimeoutMs:n?.readinessTimeoutMs,preresolvedTarget:e.preresolvedTarget}}function on(e){return`durationMs`in e?e.durationMs:void 0}function sn(e,t={}){let n=typeof t.executionProfile==`string`?t.executionProfile:void 0;return{kind:e.kind,durationMs:e.durationMs,pointerCount:e.pointerCount,from:e.from,to:e.to,...e.kind===`drag`?{targets:e.targets}:{},...e.backendResult??{},...t,...n?{timing:{executionProfile:n,gestureDurationMs:e.durationMs}}:{},message:e.message}}function cn(e){return`refused`in e}async function ln(e){return e=M(e),await hn(e,`gesture`,async(t,n)=>un(e,t,n))}async function un(e,t,n){let r=re(e.req.input),i=_n(r,t,n);i.intent===`pan`&&e.req.internal?.gestureExecutionProfile&&(i.executionProfile=e.req.internal.gestureExecutionProfile);let a=await N({device:t.device,input:i,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return a.ok?fn(r,i,await dn(mn(e,a.gestures),{session:e.sessionName,requestId:e.req.meta?.requestId},i,e.req.internal),e.req.flags):{refused:a.response}}async function dn(e,t,n,r){if(n.intent!==`drag`)return await e.interactions.gesture({...t,gesture:n});let i=r?.replayTargetGuards??(r?.replayTargetGuard?{source:r.replayTargetGuard}:void 0);return await e.interactions.gesture({...t,gesture:n,...i?{expectedResolvedTargets:i}:{}})}function fn(e,t,n,r){let i=n.kind===`drag`?n.recording:void 0,a=i?.sourceTarget,o=i?.destinationTarget;return{positionals:yn(e,i),flags:Tn(e,r),responseData:sn(n,{executionProfile:gn(t)}),...e.kind===`pinch`?{recordingResultExtra:{scale:e.scale}}:a?{recordingResultExtra:{selectorChain:a.selectorChain}}:{},...a&&o?{recordedTargets:{source:{node:a.node,preActionNodes:a.preActionNodes},destination:{node:o.node,preActionNodes:o.preActionNodes}}}:{}}}async function pn(e){return e=M(e),await hn(e,`swipe`,async t=>{let n=bn(e.req.input),r=await N({device:t.device,input:m(n).gesture,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!r.ok)return{refused:r.response};let i=n.count??1,a=n.pauseMs??0,o=n.pattern??`one-way`,s=await Cn(mn(e,r.gestures),e,n,i,a,o);return{positionals:Sn(n),flags:e.req.flags,responseData:sn(s,{from:n.from,to:n.to,x1:n.from.x,y1:n.from.y,x2:n.to.x,y2:n.to.y,effectiveDurationMs:s.durationMs,timingMode:`direct`,executionProfile:`endpoint-hold`,count:i,pauseMs:a,pattern:o})}})}function mn(e,t){return Ce({...e,gestures:t,pairedGestureViewport:e.req.internal?.gestureViewport})}async function hn(e,n,r){let a=e.sessionStore.get(e.sessionName);if(!a)return i();let o=Date.now();try{let t=h(a.device),i=t?{status:`clear`}:await D({session:a,command:n,phase:`before-command`,observation:e.androidObservation}),s=await r(a,i);if(cn(s))return s.refused;t||await D({session:a,command:n,phase:`after-command`,observation:e.androidObservation});let c={...s.responseData};return i.status===`recovered`&&(c.warning=`${typeof c.warning==`string`?`${c.warning} `:``}${i.warning}`),A({ref:e.sessionRef,sessionStore:e.sessionStore,command:n,actionCommand:n,positionals:s.positionals,flags:s.flags,result:{...c,...s.recordingResultExtra??{}},responseData:c,recordedTargets:s.recordedTargets,actionStartedAt:o,actionFinishedAt:Date.now()})}catch(e){return{ok:!1,error:t(e)}}}function gn(e){if(e.intent===`fling`)return`endpoint-hold`;if(e.intent===`pan`)return e.executionProfile??`timed-pan`;if(e.intent===`drag`)return`timed-pan`}function _n(t,n,r){let i=ie(t);if(i.intent!==`drag`)return i;try{return{...i,source:vn(i.source,n),destination:vn(i.destination,n)}}catch(t){if(r.status===`recovered`){let n=e(t),i=typeof n.details?.warning==`string`?n.details.warning+` `:``;throw n.details={...n.details,warning:i+r.warning},n}throw T(t)}}function vn(e,t){if(!e.startsWith(`@`))return e;let i=n(e);if(!i)throw new r(`INVALID_ARGS`,`Invalid ref "${e}" — malformed generation suffix.`,{hint:a});return De({ref:i.base,mintedGeneration:i.generation,frame:y({session:t,ref:i.base,mintedGeneration:i.generation})}),i.base}function yn(e,t){return e.kind!==`drag`||!t?oe(e):oe({...e,source:t.sourceSelector??e.source,destination:t.destinationSelector??e.destination})}function bn(e){if(!e||typeof e!=`object`||Array.isArray(e))throw new r(`INVALID_ARGS`,`swipe requires structured object input`);ae(e);let t=e,n=t.pattern;if(n!==void 0&&n!==`one-way`&&n!==`ping-pong`)throw new r(`INVALID_ARGS`,`swipe pattern must be one-way or ping-pong`);let i={from:$(t.from,`swipe from`),to:$(t.to,`swipe to`),count:s(t,`count`,{min:1,max:200}),pauseMs:s(t,`pauseMs`,{min:0,max:ne}),pattern:n};return xn(i),i}function xn(e){let t=e.count??1,n=e.pauseMs??0,i=t*100+Math.max(0,t-1)*n;if(!(i<=6e4))throw new r(`INVALID_ARGS`,`Swipe series must fit within ${te}ms.`,{count:t,pauseMs:n,gestureDurationMs:100,scheduledDurationMs:i,hint:`Reduce --count or --pause-ms.`})}function $(e,t){if(!e||typeof e!=`object`||Array.isArray(e))throw new r(`INVALID_ARGS`,`${t} must be a point`);let n=e;if(typeof n.x!=`number`||!Number.isFinite(n.x))throw new r(`INVALID_ARGS`,`${t} x must be finite`);if(typeof n.y!=`number`||!Number.isFinite(n.y))throw new r(`INVALID_ARGS`,`${t} y must be finite`);return{x:n.x,y:n.y}}function Sn(e){return[String(e.from.x),String(e.from.y),String(e.to.x),String(e.to.y)]}async function Cn(e,t,n,r,i,a){let o;for(let s=0;s<r;s+=1){let c=m(wn(n,a,s));o=await e.interactions.gesture({session:t.sessionName,requestId:t.req.meta?.requestId,gesture:c.gesture}),i>0&&s+1<r&&await ge(i)}if(!o)throw Error(`Swipe orchestration did not execute a gesture.`);return o}function wn(e,t,n){return t!==`ping-pong`||n%2!=1?e:{...e,from:e.to,to:e.from}}function Tn(e,t){return e.kind!==`pan`||e.pointerCount===void 0?t:{...t,pointerCount:e.pointerCount}}async function En(e){let t={},n=e.sessionRef,r=await Dn({...e,sessionRef:n,refSnapshotFlagGuardResponse:Ae,captureProof:t});return r&&se({response:r,consumedTree:t,captureProof:t})}async function Dn(e){switch(e.req.command){case`press`:return await Q(e,`press`);case`click`:return await Q(e,`click`);case`longpress`:return await Q(e,`longpress`);case`hover`:return await Q(e,`hover`);case`fill`:return await Pt(e);default:return await On(e)}}async function On(e){switch(e.req.command){case _.gesture:return await ln(e);case _.swipe:return await pn(e);case _.type:return await kn(e);case`get`:return await Me(e);case`is`:return await je(e);default:return null}}async function kn(e){let{sessionName:t,sessionStore:n}=e,r=n.get(t);if(!r)return i();let a=await Pe({device:r.device,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!a.ok)return a.response;let o=await An(r,e.androidObservation);return o.response?o.response:await jn(e,r,a.typeText,o.warning)}async function An(e,t){if(e.device.platform===`android`&&e.screenRecording){let n=await Se({session:e,observation:t});if(n.status===`failed`)return{response:o(`COMMAND_FAILED`,`Android system dialog blocked the recording session`)};if(n.status===`unknown`)return{warning:n.warning}}return{}}async function jn(e,n,r,i){let{req:a,sessionStore:o}=e,s=Date.now();try{let t=await D({session:n,command:a.command,phase:`before-command`,observation:e.androidObservation});x(n);let c=await r(a.positionals??[],e.contextFromFlags(a.flags,n.appBundleId,n.trace?.outPath));await D({session:n,command:a.command,phase:`after-command`,observation:e.androidObservation});let l=Date.now(),u={...c};return Mn(u,i,t),A({ref:e.sessionRef,sessionStore:o,command:a.command,positionals:a.positionals??[],flags:a.flags,result:u,responseData:u,actionStartedAt:s,actionFinishedAt:l})}catch(e){return{ok:!1,error:t(e)}}}function Mn(e,t,n){let r=[typeof e.warning==`string`?e.warning:void 0,t];n.status===`recovered`&&r.push(n.warning);let i=r.filter(e=>typeof e==`string`&&e.length>0).join(` `);i.length>0&&(e.warning=i)}export{En as handleInteractionCommands};
|
package/dist/src/interactor.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{$ as e,P as t,T as n,tt as r,w as i}from"./sdk-contracts.js";import{i as a}from"./capture.js";import{
|
|
1
|
+
import{$ as e,P as t,T as n,tt as r,w as i}from"./sdk-contracts.js";import{i as a}from"./capture.js";import{r as o}from"./snapshot-capture-annotations.js";import{O as s,v as c}from"./sdk-batch-runner.js";import{c as l,r as u}from"./diagnostics.js";import"./diagnostics2.js";import{A as ee,g as d,h as te,j as ne,m as re,x as f}from"./sdk-device.js";import{Wr as ie,ni as ae}from"./sdk-batch.js";import{d as oe,i as se,l as ce}from"./scroll-gesture.js";import{n as p}from"./session.js";import{S as le,T as ue,b as m,m as de,n as fe,r as pe,v as me,x as he}from"./settings.js";import{c as ge,n as _e,t as ve}from"./scroll-command.js";import"./device.js";import{t as ye}from"./device-rotation.js";import{o as h}from"./exec.js";import{r as be,t as xe}from"./retry.js";import{a as Se}from"./tv-remote.js";import"./command.js";import"./retry2.js";import{a as Ce}from"./gesture-plan.js";import{n as we}from"./scoped-provider.js";import{n as Te,r as Ee}from"./ios-snapshot-planning.js";import{n as De,r as Oe}from"./ios-system-surface.js";import{a as ke,l as Ae,n as je,s as Me}from"./quality-warnings.js";import{r as Ne}from"./ios-snapshot-acquisition.js";import{t as Pe}from"./png-size.js";import{n as Fe}from"./screenshot-density.js";import{i as g,n as Ie,r as _}from"./ios-snapshot-engine.js";import{C as Le,g as Re,o as ze,r as v}from"./host-file.js";import{c as y,f as Be,h as Ve,m as He,p as Ue}from"./config.js";import{o as We}from"./tool-provider.js";import{n as Ge,r as b,t as x}from"./physical-device-control.js";import{i as Ke,n as S,r as C,s as qe}from"./runner.js";import{u as Je}from"./host.js";import{t as Ye}from"./runner-cache-metadata.js";import{n as w,o as T,r as Xe}from"./simctl.js";import{c as E}from"./runner-client.js";import"./runner-error-classification.js";import{n as Ze,r as Qe,t as $e}from"./app-launch.js";import{r as D,t as O}from"./simulator.js";import{c as et,d as tt,l as nt,o as rt,s as it,t as at,u as ot}from"./helper.js";import{a as st,d as ct,f as lt,p as ut}from"./app-resolution.js";import{i as dt,t as ft}from"./display-inventory.js";import{t as pt}from"./simctl-settings.js";import{n as mt}from"./interactor-types.js";import{r as ht,t as gt}from"./app-backend.js";import{i as _t,r as vt,t as yt}from"./alert.js";import{t as bt}from"./surface-snapshot.js";import{t as xt}from"./ios-target-activation.js";import k from"node:path";async function St(e){return d(e)?await ct():(D(e,`clipboard`),await O(e),h(await T(e,[`pbpaste`,e.id],{allowFailure:!0}),`Failed to read iOS simulator clipboard`).stdout.replaceAll(`\r
|
|
2
2
|
`,`
|
|
3
|
-
`).replace(/\n$/,``))}async function
|
|
4
|
-
`).map(e=>e.trim()).filter(e=>e.length>0&&e!==`Current Status Bar Overrides:`&&!/^=+$/.test(e));for(let e of r){let r=/^DataNetworkType:\s+(\d+)$/.exec(e);if(r){let e=Number(r[1]),i=
|
|
5
|
-
`).map(e=>e.trim().split(/\s+/)).find(e=>e[0]===R)?.[1];return{args:t,stderr:n.stderr,stdout:n.stdout,exitCode:n.exitCode,state:n.exitCode===0?r:void 0}}function
|
|
6
|
-
`?void 0:`append`,appBundleId:t.appBundleId},n)),fill:async(r,i,a,o,s)=>await k(e,{command:`type`,x:r,y:i,text:a,delayMs:o,textEntryMode:`replace`,...s?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},appBundleId:t.appBundleId},n),scroll:async(r,i)=>await On(k,e,t,n,r,i),performGesture:async r=>await En(e,t,n,r),gestureViewport:async()=>Tn(await k(e,{command:`gestureViewport`,appBundleId:t.appBundleId},n))}}}async function vn(e,t,n,r,i){let a=d(e)?p(i.surface,`xctest`):void 0;return a?await yn(t,r,i,a):i.button===`primary`?i.count===1?await xn(e,t,n,r,i):await Ve(e,r,i,t.appBundleId,async t=>await k(e,t,n)):await bn(e,t,n,r,i.button)}async function yn(e,n,r,i){if(r.button!==`primary`)throw new t(`UNSUPPORTED_OPERATION`,`${r.button} click is not supported on macOS ${i} sessions.`);let{runMacOsPressAction:a}=await import(`./helper.js`).then(e=>e.n),o=await a(n.x,n.y,{bundleId:e.appBundleId,surface:i,holdMs:r.holdMs,clicks:r.count,doubleClick:r.doubleTap,intervalMs:r.intervalMs,signal:e.signal});return o.holdMs===void 0?{}:{holdMs:o.holdMs}}async function bn(e,t,n,r,i){return await k(e,{command:`mouseClick`,x:r.x,y:r.y,button:i,appBundleId:t.appBundleId},n)}async function xn(e,t,n,r,i){if(i.doubleTap){let i=await k(e,T([{kind:`doubleTap`,x:r.x,y:r.y}],t.appBundleId),n);return E(i),i}return i.holdMs>0?await k(e,{command:`longPress`,x:r.x,y:r.y,durationMs:i.holdMs,appBundleId:t.appBundleId},n):await k(e,q(e,t,r.x,r.y),n)}function Sn(e){let t=e.textEntryRoute;return wn(t)?{textEntryRoute:t}:{}}function Cn(e){let t=e.applicationState;return i(t)?{applicationState:t}:{}}function wn(e){return typeof e==`string`&&st.includes(e)}function Tn(e){let n=K(e.x),r=K(e.y),i=K(e.x2),a=K(e.y2);if(n===void 0||r===void 0||i===void 0||a===void 0||i<=0||a<=0)throw new t(`COMMAND_FAILED`,`Apple runner returned an invalid gesture viewport`);return{x:n,y:r,width:i,height:a}}function K(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}async function En(e,t,n,r){if(r.topology===`two`&&ct(e,r.intent),r.topology===`single`&&d(e)){let{start:i,end:a}=h(r);return await k(e,{command:`drag`,x:i.x,y:i.y,x2:a.x,y2:a.y,durationMs:r.durationMs,appBundleId:t.appBundleId},n)}if(r.topology===`single`&&f(e)){let{start:i,end:a}=h(r);return await k(e,{command:`swipe`,direction:Dn(i,a),appBundleId:t.appBundleId},n)}return await k(e,{command:`gesture`,gesturePlan:r,appBundleId:t.appBundleId},n)}function Dn(e,t){let n=t.x-e.x,r=t.y-e.y;return Math.abs(n)>=Math.abs(r)?n>=0?`right`:`left`:r>=0?`down`:`up`}function q(e,t,n,r){return{command:`tap`,x:n,y:r,...u(e)?{synthesized:!0}:{},appBundleId:t.appBundleId}}async function On(e,t,n,r,i,a){if(he(a?.durationMs,{invalidMessage:`scroll durationMs must be a non-negative integer at most ${ge}`}),f(t))return W(await e(t,G(i,n.appBundleId,a?.durationMs),r),{amount:a?.amount,durationMs:a?.durationMs});if(oe(a??{}),d(t))return await hn(e,t,n,r,i,a);let o=dn(a),s;try{s=await e(t,{command:`scroll`,direction:i,...fn(o),appBundleId:n.appBundleId},r)}catch(e){throw un(e)}return H(s,i,o)}const kn=p(`app`,`native`),An=`The native macOS app backend acts through accessibility actions only. Unset AGENT_DEVICE_MACOS_APP_BACKEND to drive this app with XCTest.`,jn=new Set(Qe);function Mn(e,t){let n=()=>{if(t.appBundleId)return t.appBundleId;throw J(`an action on a session that names no app`)},r=async(e,r={})=>Nn(await Y(qe(e.x,e.y,{surface:kn,bundleId:n(),clicks:r.count,intervalMs:r.intervalMs,signal:t.signal})));return{open:e.open,openDevice:e.openDevice,close:e.close,screenshot:e.screenshot,snapshot:e.snapshot,readTextAtPoint:e.readTextAtPoint,readClipboard:e.readClipboard,writeClipboard:e.writeClipboard,setSetting:e.setSetting,readAlert:e.readAlert,awaitAlert:e.awaitAlert,acceptAlert:e.acceptAlert,dismissAlert:e.dismissAlert,tap:async(e,t)=>await r({x:e,y:t}),pressPoint:async(t,n)=>{if(n.surface!==void 0&&n.surface!==`app`)return await e.pressPoint(t,n);if(n.button!==`primary`)throw J(`${n.button} click`);if(n.doubleTap)throw J(`double-click`);if(n.holdMs>0)throw J(`press and hold`);return await r(t,n)},longPress:async()=>{throw J(`press and hold`)},focus:async(e,t)=>await r({x:e,y:t}),type:async(e,r)=>{await Y(Je(e,{bundleId:n(),delayMs:r,signal:t.signal}))},fill:async(e,r,i)=>Nn(await Y(Xe(e,r,i,{bundleId:n(),signal:t.signal}))),scroll:async(e,r)=>{oe(r??{});let i=await Y($e(e,{bundleId:n(),amount:r?.amount,pixels:r?.pixels,signal:t.signal}));return{...H(i,e,r,{includeDuration:!1}),mechanism:i.mechanism}},back:async()=>{throw J(`back`)},setOrientation:async()=>{throw J(`orientation`)}}}function Nn(e){return{mechanism:e.mechanism,...e.windowTitle===void 0?{}:{windowTitle:e.windowTitle}}}function J(e){return new t(`UNSUPPORTED_OPERATION`,`${e} is not supported by the native macOS app backend.`,{reason:`unsupported-device-backend`,hint:An})}async function Y(e){try{return await e}catch(e){if(!(e instanceof t))throw e;let n=e.details?.reason;throw typeof n!=`string`||!jn.has(n)?e:new t(`UNSUPPORTED_OPERATION`,e.message,{...e.details,reason:`unsupported-device-backend`,helperReason:n,hint:An},e)}}const Pn={0:`unknown`,1:`notRunning`,2:`runningBackgroundSuspended`,3:`runningBackground`};function Fn(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return;let r={...e},i=r.reason;if(!n(i))return;let a=r.priorState;if(typeof a!=`number`||!Number.isInteger(a))return;let o=Pn[a];o===void 0&&t?.({reason:i,rawPriorState:a});let s=r.otherActiveApplicationPid;return{reason:i,priorState:o??`unknown`,...typeof s==`number`&&Number.isInteger(s)&&s>0?{otherActiveApplicationPid:s}:{}}}function In(e){let t=Ln(e.systemSurface),n=o(e.keyboard),r=Fn(e.targetActivation,e=>Ue({level:`debug`,phase:`ios_runner_target_activation_prior_state_unmapped`,data:e}));return{nodes:Array.isArray(e.nodes)?e.nodes:void 0,truncated:typeof e.truncated==`boolean`?e.truncated:void 0,quality:Oe(e.snapshotQuality),qualityPayload:Vn(e.qualityPayload,t),runnerFatal:e.runnerFatal===!0,...n?{keyboard:n}:{},...t?{systemSurface:t}:{},...r?{targetActivation:r}:{},message:typeof e.message==`string`&&e.message.trim().length>0?e.message:void 0}}function Ln(e){if(!X(e)||typeof e.bundleId!=`string`)return;let t=Ee(e.bundleId);return t&&{bundleId:t.bundleId,kind:t.kind}}function Rn(e,t,n){let r=n.nodes??[],i=Hn(r,n.qualityPayload?.nodes);if(n.runnerFatal===!0||r.length===0&&n.qualityPayload===void 0)return{nodes:r};let a=we({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions}),o={stage:`presented`,presentation:{producer:`apple-runner`,intent:`full`,payload:{nodes:r,truncated:n.truncated??!1,...n.quality?.effectiveDepth===void 0?{}:{effectiveDepth:n.quality.effectiveDepth}},...n.qualityPayload?{qualityPayload:n.qualityPayload}:{}},validation:{presentationKey:Ce(a),viewport:i,hittability:{kind:`available`},lineage:{targetId:e},residue:[]}};try{let e=Ne(o,a),t=re(e.validatedViewport);return{nodes:e.nodes,...t?{viewport:t}:{}}}catch(e){zn(e,n)}}function zn(e,n){let r=n.quality;if(e instanceof v&&Ae(r))throw new t(`COMMAND_FAILED`,e.message,{..._(e),...n.systemSurface?{systemSurface:n.systemSurface}:{},snapshotQuality:{state:r.state,backend:r.backend,...r.reason?{reason:r.reason}:{},...r.reasonCode?{reasonCode:r.reasonCode}:{}},hint:Bn(n.systemSurface,r)},e);Z(e,n.systemSurface)}function Bn(e,t){return[e?`${e.bundleId} hosts the surface presented over the app, and this capture targeted that surface.`:void 0,...ke(t,[])].filter(e=>e!==void 0).join(` `)}function Vn(e,t){if(e!==void 0)return(!X(e)||!Array.isArray(e.nodes)||typeof e.truncated!=`boolean`)&&Z(new v(`invalid-quality-payload`,`iOS runner returned an invalid quality payload`),t),e.scope!==void 0&&e.scope!==null&&Z(new v(`invalid-quality-payload`,`iOS runner quality payload must be unscoped`,{field:`scope`}),t),{nodes:e.nodes,truncated:e.truncated,scope:null}}function Hn(e,t){return g(Un(t),{fallbackToLargestRoot:!0})??g(Un(e),{fallbackToLargestRoot:!0})??{kind:`missing`,reason:`not-provided`}}function Un(e){return e?.filter(e=>e.parentIndex===void 0)??[]}function X(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Z(e,n){throw e instanceof v?new t(`COMMAND_FAILED`,e.message,{..._(e),...n?{systemSurface:n}:{}},e):e}function Wn(e,n,r){if(e.appleOs===`watchos`)throw new t(`UNSUPPORTED_PLATFORM`,`watchOS is not supported: XCUITest cannot drive watchOS UI, so this device has no runner backend.`);let{overrides:i,runnerOpts:a}=_n(e,n),o=d(e)?lt():`xctest`,s=t=>d(e)?p(t,o):void 0,c={open:(t,n)=>Ge(e,t,{appBundleId:n?.appBundleId,launchConsole:n?.launchConsole,launchArgs:n?.launchArgs,terminateRunningApp:n?.terminateRunningApp,url:n?.url,runnerOptions:a}),openDevice:()=>Ke(e),close:t=>A(e,t,a),screenshot:(t,n)=>tr(e,t,n,a,s(n?.surface)),snapshot:async t=>await Gn(e,t,a,s(t?.surface)),readTextAtPoint:async(t,n)=>{let r=s(n?.surface);return r?await nr(t,r,n?.appBundleId,n?.signal):await rr(e,t,n,a)},findText:async(t,n)=>({found:(await k(e,{command:`findText`,text:t,appBundleId:n?.appBundleId},n?.signal?{...a,signal:n.signal}:a))?.found===!0}),back:async t=>{if(f(e)){await k(e,G(`menu`,n.appBundleId),a);return}await k(e,{command:gn(t),appBundleId:n.appBundleId},a)},home:async()=>{if(f(e)){await k(e,G(`home`,n.appBundleId),a);return}await k(e,{command:`home`,appBundleId:n.appBundleId},a)},setOrientation:async r=>{let i=$n(await k(e,{command:`rotate`,orientation:r,appBundleId:n.appBundleId},a));if(i!==r)throw new t(`COMMAND_FAILED`,`iOS runner observed ${i} after requesting ${r}`,{requestedOrientation:r,observedOrientation:i});return{orientation:i}},appSwitcher:async()=>{await k(e,{command:`appSwitcher`,appBundleId:n.appBundleId},a)},actionButton:async()=>{await k(e,{command:`actionButton`,appBundleId:n.appBundleId},a)},tvRemote:async(t,r)=>{await k(e,G(ye(t),n.appBundleId,r),a)},keyboardDismiss:async()=>{let t=await k(e,{command:`keyboardDismiss`,appBundleId:n.appBundleId},a);return{kind:`mechanism`,wasVisible:Q(t,`wasVisible`),dismissed:Q(t,`dismissed`),visible:Q(t,`visible`),mechanism:Qn(t,`keyboardDismissMechanism`)}},keyboardEnter:async()=>{let t=await k(e,{command:`keyboardReturn`,appBundleId:n.appBundleId},a);return{kind:`visibility-echo`,visible:Q(t,`visible`),wasVisible:Q(t,`wasVisible`)}},readClipboard:()=>ht(e),writeClipboard:t=>gt(e,t,a),setSetting:(t,n,r,i)=>Pt(e,t,n,r,i),readSetting:t=>It(e,t),readAlert:t=>ut(e,a,t),awaitAlert:t=>dt(e,a,t),acceptAlert:t=>ft(e,a,`accept`,t),dismissAlert:t=>ft(e,a,`dismiss`,t),...i},l=o===`native`?Mn(c,n):c;return r?er(e,n,l,r):l}async function Gn(e,t,n,r){return r?await pt({...t,surface:r},t?.signal):await Kn(e,t,n)}async function Kn(e,t,n){let r=In(await s(`snapshot_capture`,async()=>await k(e,{command:`snapshot`,appBundleId:t?.appBundleId,interactiveOnly:t?.interactiveOnly,preferredBackend:t?.preferredBackend,customActions:t?.customActions,depth:t?.depth,scope:t?.scope,raw:t?.raw},Zn(n,t?.signal)),{backend:`xctest`}));qn(e,t,r);let i=Jn(r),a=Yn(e,t,r);return{nodes:a.nodes,truncated:r.truncated??!1,backend:`xctest`,producer:`apple-runner`,...a.viewport?{viewport:a.viewport}:{},...r.quality?{quality:r.quality}:{},...r.systemSurface?{systemSurface:r.systemSurface}:{},...r.keyboard?{keyboard:r.keyboard}:{},...r.targetActivation?{targetActivation:r.targetActivation}:{},...i.length>0?{warnings:i}:{}}}function qn(e,n,r){if(!((r.nodes?.length??0)>0)&&!Xn(n,r.quality)&&e.kind===`simulator`)throw new t(`COMMAND_FAILED`,`XCTest snapshot returned 0 nodes on iOS simulator.`)}function Jn(e){let t=[];return!e.quality&&e.message&&t.push(e.message),e.systemSurface&&t.push(Te(e.systemSurface.bundleId)),e.targetActivation&&t.push(mt(e.targetActivation)),t}function Yn(e,t,n){return d(e)?{nodes:n.nodes??[]}:Rn(e.id,t,n)}function Xn(e,t){return ne(e?.scope)!==null&&t!==void 0&&t.state!==`sparse`}function Zn(e,t){return t?{...e,signal:e.signal?AbortSignal.any([e.signal,t]):t}:e}function Q(e,t){let n=e[t];return typeof n==`boolean`?n:void 0}function Qn(e,t){let n=e[t];return typeof n==`string`?n:void 0}function $n(e){let n=e.orientation;if(typeof n==`string`&&ve.includes(n))return n;throw new t(`COMMAND_FAILED`,`iOS runner returned an invalid orientation result`,{orientation:n})}function er(e,t,n,r){let i={...n,open:async()=>$(`open`),openDevice:async()=>$(`openDevice`),close:async()=>$(`close`),screenshot:async()=>$(`screenshot`),readClipboard:async()=>$(`readClipboard`),setSetting:async()=>$(`setSetting`),readSetting:async()=>$(`readSetting`)};return Se(i,n=>He(r,{deviceId:e.id,requestId:t.requestId},n))}function $(e){throw new t(`UNSUPPORTED_OPERATION`,`${e} uses local Apple tooling (simctl/devicectl), which an injected runner transport cannot reach; the provider session must supply its own ${e} implementation.`)}async function tr(e,n,r={},i,o){if(o){if(r.fullscreen)throw new t(`INVALID_ARGS`,`screenshot --fullscreen is not accepted on the macOS ${o} surface: its capture frame is fixed`,{reason:a.macOsHelperSurfaceFixedFrame,surface:o});return await Ye(n,{surface:o,...o===`app`?{bundleId:r.appBundleId}:{},signal:i.signal}),{}}return r.captureBackend===`runner`?(await V(e,n,r.appBundleId,r.fullscreen,i),{}):await Xt(e,n,{appBundleId:r.appBundleId,pixelDensity:r.pixelDensity,fullscreen:r.fullscreen,runnerOptions:i,normalizeStatusBar:r.normalizeStatusBar,skipIosSimulatorBootCheck:r.skipIosSimulatorBootCheck})}async function nr(e,t,n,r){let{runMacOsReadTextAction:i}=await import(`./helper.js`).then(e=>e.n);return(await i(e.x,e.y,{bundleId:n,surface:t,signal:r})).text}async function rr(e,t,n,r){let i=await k(e,{command:`readText`,x:t.x,y:t.y,appBundleId:n?.appBundleId},n?.signal?{...r,signal:n.signal}:r);return typeof i.text==`string`?i.text:typeof i.message==`string`?i.message:void 0}export{Wn as createAppleInteractor};
|
|
3
|
+
`).replace(/\n$/,``))}async function Ct(e,t,n){if(d(e)){await ut(t);return}if(D(e,`clipboard`),f(e)){let r=n?.signal;await O(e,{signal:r}),h(await T(e,[`pbcopy`,e.id],{allowFailure:!0,stdin:t,signal:r}),`Failed to write tvOS simulator clipboard`);return}await E(e,{command:`pasteboardWrite`,text:t},n)}function A(e,n){if(!re(e))throw new t(`UNSUPPORTED_OPERATION`,n.message,{deviceId:e.id,appleOs:ee(e),deviceKind:e.kind,reason:n.reason,hint:n.hint})}async function wt(e,t){A(e,pe);let n=he(t);return await T(e,[`ui`,e.id,`content_size`,n]),ue(n,n)}async function Tt(e){A(e,pe),await O(e);let n=h(await T(e,[`ui`,e.id,`content_size`],{allowFailure:!0}),`Failed to read iOS content size category`),r=n.stdout.trim(),i=le(r);if(i===void 0)throw new t(`COMMAND_FAILED`,`iOS simulator reported an unknown text size: ${r||`(empty)`}`,{deviceId:e.id,stdout:n.stdout,stderr:n.stderr,hint:"Boot the simulator, or run `xcrun simctl ui <device> content_size` to see what it reports."});return ue(i,r)}const Et=[`--time`,`9:41`,`--dataNetwork`,`wifi`,`--wifiMode`,`active`,`--wifiBars`,`3`,`--batteryState`,`charged`,`--batteryLevel`,`100`],Dt={0:`hide`,1:`wifi`,6:`3g`,7:`4g`,8:`lte`,9:`lte-a`,10:`lte+`,11:`5g`,12:`5g+`,13:`5g-uwb`,14:`5g-uc`},Ot={1:`searching`,2:`failed`,3:`active`},kt={0:`notSupported`,1:`searching`,2:`failed`,3:`active`},j=new Set;async function At(e){let t=null,n=!1;if(Mt(e))n=!0;else try{t=await Nt(e),n=!0}catch(t){L(e,`snapshot_failed`,t)}try{(!n||t)&&await F(e),await I(e,Et)}catch(t){L(e,`prepare_failed`,t)}return async()=>{await jt(e,n?t:null)}}async function jt(e,t){if(await F(e),!t){N(e);return}await I(e,Ft(t)),M(e)}function M(e){j.delete(P(e))}function N(e){j.add(P(e))}function Mt(e){return j.has(P(e))}function P(e){return`${e.platform}:${e.kind}:${e.id}`}async function Nt(e){return Pt(h(await T(e,[`status_bar`,e.id,`list`],{allowFailure:!0}),`Failed to read simulator status bar overrides`).stdout)}async function F(e){await T(e,[`status_bar`,e.id,`clear`])}async function I(e,t){t.length!==0&&await T(e,[`status_bar`,e.id,`override`,...t])}function Pt(e){let n={},r=e.split(`
|
|
4
|
+
`).map(e=>e.trim()).filter(e=>e.length>0&&e!==`Current Status Bar Overrides:`&&!/^=+$/.test(e));for(let e of r){let r=/^DataNetworkType:\s+(\d+)$/.exec(e);if(r){let e=Number(r[1]),i=Dt[e];if(!i)throw new t(`COMMAND_FAILED`,`Unsupported simulator data network type: ${e}`);n.dataNetwork=i;continue}let i=/^WiFi Mode:\s+(\d+),\s+WiFi Bars:\s+(\d+)$/.exec(e);if(i){let e=Ot[Number(i[1])];e&&(n.wifiMode=e),n.wifiBars=i[2];continue}let a=/^Cell Mode:\s+(\d+),\s+Cell Bars:\s+(\d+)$/.exec(e);if(a){let e=Number(a[1]),r=kt[e];if(!r)throw new t(`COMMAND_FAILED`,`Unsupported simulator cellular mode: ${e}`);n.cellularMode=r,n.cellularBars=a[2];continue}let o=/^Operator Name:\s*(.*)$/.exec(e);if(o){n.operatorName=o[1]??``;continue}}return Object.keys(n).length===0?null:n}function Ft(e){let t=[];return e.dataNetwork&&t.push(`--dataNetwork`,e.dataNetwork),e.wifiMode&&t.push(`--wifiMode`,e.wifiMode),e.wifiBars!==void 0&&(e.dataNetwork===`wifi`||e.wifiMode)&&t.push(`--wifiBars`,e.wifiBars),e.cellularMode&&t.push(`--cellularMode`,e.cellularMode),e.cellularBars!==void 0&&(e.cellularMode||It(e.dataNetwork)||e.operatorName!==void 0)&&t.push(`--cellularBars`,e.cellularBars),e.operatorName!==void 0&&t.push(`--operatorName`,e.operatorName),t}function It(e){return!!(e&&e!==`hide`&&e!==`wifi`)}function L(e,t,n){u({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...b(n)}})}async function Lt(n,r,i,a,o){if(d(n)){let e=r.toLowerCase();if(e===`appearance`){await lt(i);return}if(e===`permission`){let e=me(i);if(e===`deny`)throw new t(`INVALID_ARGS`,de(`permission`));let n=Ut(o?.permissionTarget);return await it(e,n)}throw new t(`INVALID_ARGS`,de(r))}D(n,`settings`),await O(n);let s=r.toLowerCase();switch(s){case`clear-app-state`:{if(i.toLowerCase()!==`clear`)throw new t(`INVALID_ARGS`,`settings clear-app-state only supports clear.`);if(!a)throw new t(`INVALID_ARGS`,`settings clear-app-state requires an app id or an active app session.`,e());let r=await Ht(n,a);return{bundleId:r.bundleId,containerPath:r.containerPath,cleared:!0}}case`reset-keychain`:if(i.toLowerCase()!==`clear`)throw new t(`INVALID_ARGS`,`settings reset-keychain only supports clear.`);return await T(n,[`keychain`,n.id,`reset`]),{scope:`simulator`,cleared:!0,message:`Reset the whole iOS simulator keychain. This clears keychain-backed credentials for every installed app, not just the app under test.`};case`wifi`:{let e=m(i)?`active`:`failed`;await T(n,[`status_bar`,n.id,`override`,`--wifiMode`,e]),M(n);return}case`airplane`:m(i)?(await T(n,[`status_bar`,n.id,`override`,`--dataNetwork`,`hide`,`--wifiMode`,`failed`,`--wifiBars`,`0`,`--cellularMode`,`failed`,`--cellularBars`,`0`,`--operatorName`,``]),M(n)):(await T(n,[`status_bar`,n.id,`clear`]),N(n));return;case`faceid`:case`touchid`:{A(n,fe);let e=s,t=Wt[e];await Kt(n,Gt(i,e),{settingName:e,notificationModality:t.notificationModality});return}case`text-size`:return await wt(n,i);case`appearance`:case`permission`:case`location`:return await pt({runSimctl:e=>T(n,e),udid:n.id,deviceId:n.id,setting:s,state:i,appBundleId:a,options:o});default:throw new t(`INVALID_ARGS`,`Unsupported setting: ${r}`)}}const Rt={"text-size":Tt};async function zt(e,t){return await Rt[t](e)}const Bt=[`Documents`,`Library/Caches`,`Library/Preferences`,`SystemData`,`tmp`];function Vt(e){return`${e} has no data container to clear. Apps shipped in the simulator runtime, such as system apps, own no data container, so there is no app state here to remove.`}async function Ht(e,n){if(!te(e)||e.kind!==`simulator`)throw new t(`UNSUPPORTED_OPERATION`,`Clearing app state is currently supported only on iOS simulators.`);let r=await st(e,n);await O(e),await $e(e,r);let i=h(await T(e,[`get_app_container`,e.id,r,`data`],{allowFailure:!0}),`simctl get_app_container failed for ${r}`),a=Xe(i.stdout);if(a===void 0)throw new t(`UNSUPPORTED_OPERATION`,Vt(r),{reason:`app-no-data-container`,appBundleId:r,deviceId:e.id,hint:`Clear the app under test instead. A runtime-shipped app keeps no data container, so this command has no app state to remove; to reset it, erase or recreate the simulator device, or uninstall and reinstall the app if you installed it yourself.`});let o=await Re(a);return await Promise.all(o.filter(e=>e!==`.com.apple.mobile_container_manager.metadata.plist`).map(e=>Le(k.join(a,e)))),await Promise.all(Bt.map(e=>ze(k.join(a,e)))),{bundleId:r,containerPath:a}}function Ut(e){let n=e?.trim().toLowerCase();if(n===`accessibility`||n===`screen-recording`||n===`input-monitoring`)return n;throw new t(`INVALID_ARGS`,`Unsupported macOS permission target. Use accessibility|screen-recording|input-monitoring.`)}const Wt={faceid:{notificationModality:`pearl`},touchid:{notificationModality:`fingerTouch`}};function Gt(e,n){let r=e.trim().toLowerCase();if(r===`match`)return`match`;if(r===`nonmatch`)return`nonmatch`;if(r===`enroll`)return`enroll`;if(r===`unenroll`)return`unenroll`;throw new t(`INVALID_ARGS`,`Invalid ${n} state: ${e}. Use match|nonmatch|enroll|unenroll.`)}async function Kt(e,n,i){let a=w(e,Yt(e.id,n,i.notificationModality)),o=await We(a,{allowFailure:!0}),s=[];if(o.exitCode!==0)s.push({args:a,stderr:o.stderr,stdout:o.stdout,exitCode:o.exitCode});else{let t=qt(n);if(t!==void 0){let n=await Jt(e);if(n.state===t)return;s.push({args:n.args,stderr:n.stderr,stdout:n.stdout,exitCode:n.exitCode})}else return}throw new t(`COMMAND_FAILED`,`Failed to simulate ${i.settingName}.`,{deviceId:e.id,action:n,setting:i.settingName,attempts:r(s)})}const R=`com.apple.BiometricKit.enrollmentChanged`;function qt(e){if(e===`enroll`)return`1`;if(e===`unenroll`)return`0`}async function Jt(e){let t=w(e,[`spawn`,e.id,`notifyutil`,`-g`,R]),n=await We(t,{allowFailure:!0}),r=n.stdout.split(`
|
|
5
|
+
`).map(e=>e.trim().split(/\s+/)).find(e=>e[0]===R)?.[1];return{args:t,stderr:n.stderr,stdout:n.stdout,exitCode:n.exitCode,state:n.exitCode===0?r:void 0}}function Yt(e,t,n){let r=[`spawn`,e,`notifyutil`];switch(t){case`match`:return[...r,`-p`,`com.apple.BiometricKit_Sim.${n}.match`];case`nonmatch`:return[...r,`-p`,`com.apple.BiometricKit_Sim.${n}.nomatch`];case`enroll`:return[...r,`-s`,R,`1`,`-p`,R];case`unenroll`:return[...r,`-s`,R,`0`,`-p`,R]}}function Xt(e){let t=e.screenshotMetadata;if(!t||typeof t!=`object`||Array.isArray(t))return;let n=t,r=z(n.displayID),i=z(n.pixelWidth),a=z(n.pixelHeight),o=Zt(n.pixelsPerPoint);if(r!==void 0&&i!==void 0&&a!==void 0&&o!==void 0)return Object.freeze({displayID:r,pixelWidth:i,pixelHeight:a,pixelsPerPoint:o})}function z(e){return typeof e==`number`&&Number.isInteger(e)&&e>0?e:void 0}function Zt(e){return typeof e==`number`&&Number.isFinite(e)&&e>0?e:void 0}const Qt={ensureBooted:O,prepareStatusBarForScreenshot:At,resolveCaptureTarget:dt,captureWithRetry:tn,normalizeDensity:dn,captureWithRunner:H,shouldFallbackToRunner:ln},B=new Map,V=new Map;async function $t(e,t,n={}){return d(e)?(await H(e,t,n.appBundleId,n.fullscreen,n.runnerOptions),{}):e.kind===`simulator`?await en(e,t,n):(await x(e).captureScreenshot(e,t,{appBundleId:n.appBundleId,fullscreen:n.fullscreen,runnerOptions:n.runnerOptions,runRunnerCommand:E}),{})}async function en(e,n,r={}){if(e.kind!==`simulator`)throw new t(`UNSUPPORTED_OPERATION`,`Simulator screenshot fallback flow supports only iOS simulators`);let i={...Qt,...r.deps??{}};r.skipIosSimulatorBootCheck||await i.ensureBooted(e);let{display:a,displayRotation:o}=await i.resolveCaptureTarget(e),s=o?{displayRotation:o}:{},c=async()=>{await i.captureWithRetry(e,n,a),await i.normalizeDensity(e,n,r.pixelDensity,a?.pointScale)},l=async()=>{};if(r.normalizeStatusBar===!0)try{l=await i.prepareStatusBarForScreenshot(e)}catch(t){sn(e,`prepare_failed`,t)}try{try{return await c(),s}catch(t){let n=t;if(r.skipIosSimulatorBootCheck&&un(t)){await i.ensureBooted(e);try{return await c(),s}catch(e){n=e}}if(!i.shouldFallbackToRunner(n))throw n;on(e,`simctl_screenshot`,n)}let t=await i.captureWithRunner(e,n,r.appBundleId,r.fullscreen,r.runnerOptions);return await i.normalizeDensity(e,n,r.pixelDensity,t?.pixelsPerPoint),s}finally{await l().catch(t=>sn(e,`restore_failed`,t))}}async function tn(e,t,n){let r=xe.fromTimeoutMs(Ve),i=[`io`,e.id,`screenshot`,...ft(n),t];await be(async({deadline:t})=>{await T(e,i,{timeoutMs:Math.max(1e3,t?.remainingMs()??2e4)})},{maxAttempts:5,baseDelayMs:Be,maxDelayMs:Ue,jitter:.2,shouldRetry:e=>ln(e)},{deadline:r,phase:`ios_simulator_screenshot`})}async function H(e,n,r,i,a){if(e.kind===`device`&&!d(e)){await x(e).captureScreenshot(e,n,{appBundleId:r,fullscreen:i,runnerOptions:a,preferRunner:!0,runRunnerCommand:E});return}let o=await E(e,{command:`screenshot`,appBundleId:r,fullscreen:i,inlineScreenshot:!1},a),s=o.message;if(!s)throw new t(`COMMAND_FAILED`,`Failed to capture iOS screenshot: runner returned no file path`);let c=Xt(o);if(d(e))return await v(s,n),c;if(e.kind===`simulator`)return await nn(e,s,n),c;throw new t(`COMMAND_FAILED`,`Unsupported Apple screenshot target`)}async function nn(e,n,r){let i=xe.fromTimeoutMs(y),a=`Unable to locate runner container for simulator screenshot`,o=V.get(e.id);if(o){let t=await rn(o,n,r);if(t.copied)return;a=t.error,V.delete(e.id)}for(let t of Ye){let o=await T(e,[`get_app_container`,e.id,t,`data`],{allowFailure:!0,timeoutMs:an(i,y,`runner screenshot container lookup`)});if(o.exitCode!==0){let e=o.stderr.trim();e&&(a=e);continue}let s=Xe(o.stdout);if(s===void 0){a=`simctl get_app_container returned no data container path`;continue}let c=await rn(s,n,r);if(c.copied){V.set(e.id,s);return}a=c.error}throw new t(`COMMAND_FAILED`,`Failed to capture iOS screenshot: ${a}`)}async function rn(e,t,n){let r=`Runner screenshot was not found in the simulator container`;for(let i of cn(e,t))try{return await v(i,n),{copied:!0}}catch(e){r=e instanceof Error?e.message:String(e)}return{copied:!1,error:r}}function an(e,n,r){let i=e.remainingMs();if(i>0)return i;throw new t(`COMMAND_FAILED`,`iOS ${r} timed out after ${n}ms`,{timeoutMs:n,step:r})}function on(e,t,n){let r=b(n);u({level:`warn`,phase:`ios_screenshot_fallback`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,from:t,to:`runner`,...r}})}function sn(e,t,n){u({level:`warn`,phase:`ios_screenshot_status_bar_${t}`,data:{platform:e.platform,deviceKind:e.kind,deviceId:e.id,...b(n)}})}function cn(e,t){let n=k.resolve(e),r=t.trim();if(!r)return[];let i=[],a=new Set,o=e=>{let t=k.normalize(e);a.has(t)||(a.add(t),i.push(t))},s=r.replace(/^\/+/,``),c=s.replaceAll(`\\`,`/`);if(s&&o(k.join(n,s)),k.isAbsolute(r)&&o(k.normalize(r)),c.startsWith(`tmp/`))o(k.join(n,c));else{let e=c.lastIndexOf(`/tmp/`);if(e>=0){let t=c.slice(e+1);o(k.join(n,t))}}let l=k.basename(r);return l&&o(k.join(n,`tmp`,l)),i}function ln(e){if(!(e instanceof t)||e.code!==`COMMAND_FAILED`)return!1;let n=Ge(e);return n.includes(`timeout waiting for screen surfaces`)||n.includes(`nsposixerrordomain`)&&n.includes(`code=60`)&&n.includes(`screenshot`)||n.includes(`timed out`)&&n.includes(`screenshot`)}function un(e){if(!(e instanceof t)||e.code!==`COMMAND_FAILED`)return!1;let n=Ge(e);return n.includes(`not booted`)||n.includes(`current state: shutdown`)||n.includes(`current state is shutdown`)||n.includes(`current state=shutdown`)||n.includes(`state: shutdown`)||n.includes(`state=shutdown`)}async function dn(e,t,n,r){let i=r??await fn(e),a=Fe(await Pe(t),i,n);a&&await ke(t,a.width,a.height)}async function fn(e){let n=B.get(e.id);if(n!==void 0)return n;let r=await T(e,[`getenv`,e.id,`SIMULATOR_MAINSCREEN_SCALE`],{timeoutMs:He}),i=Number(r.stdout.trim());if(!Number.isFinite(i)||i<=0)throw new t(`COMMAND_FAILED`,`Failed to read iOS simulator screenshot scale from SIMULATOR_MAINSCREEN_SCALE`);return B.set(e.id,i),i}function pn(e){return!(e instanceof t)||e.details?.runnerErrorCode!==`SCROLL_KEYBOARD_OCCLUDES_SURFACE`?e:new t(e.code,e.message,{...e.details,...se})}function mn(e){let t=e?.amount!==void 0||e?.pixels!==void 0;return{...e,...t?{}:{amount:ve},durationMs:e?.durationMs??400,releaseBehavior:e?.releaseBehavior??`controlled`}}function U(e,t,n,r={includeDuration:!0}){let i=W(e.referenceWidth),a=W(e.referenceHeight);if(i===void 0||a===void 0)return G(e,{amount:n?.amount});let o=oe({direction:t,amount:n?.amount,pixels:n?.pixels,referenceWidth:i,referenceHeight:a});return G(e,{amount:n?.amount,pixels:o.pixels,durationMs:r?.includeDuration?n?.durationMs:void 0,preferProvidedPixels:!0})}function hn(e,t={}){return{...e?.amount===void 0?{}:{amount:e.amount},...e?.pixels===void 0?{}:{pixels:e.pixels},...t.includeDuration!==!1&&e?.durationMs!==void 0?{durationMs:e.durationMs}:{},...t.includeReleaseBehavior!==!1&&e?.releaseBehavior!==void 0?{scrollReleaseBehavior:e.releaseBehavior}:{}}}function W(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function G(e,t){let{x1:n,y1:r,x2:i,y2:a}=_n(e),o=W(e.referenceWidth),s=W(e.referenceHeight),c=gn(t,n!==void 0&&i!==void 0?Math.round(Math.abs(i-n)):void 0,r!==void 0&&a!==void 0?Math.round(Math.abs(a-r)):void 0),l=W(e.keyboardMinY);return{...n===void 0?{}:{x1:n},...r===void 0?{}:{y1:r},...i===void 0?{}:{x2:i},...a===void 0?{}:{y2:a},...o===void 0?{}:{referenceWidth:o},...s===void 0?{}:{referenceHeight:s},...e.keyboardAvoided===!0?{keyboardAvoided:!0}:{},...l===void 0?{}:{keyboardMinY:l},...t?.amount===void 0?{}:{amount:t.amount},...c===void 0?{}:{pixels:c},...t?.durationMs===void 0?{}:{durationMs:t.durationMs}}}function gn(e,t,n){if(e?.preferProvidedPixels&&e.pixels!==void 0)return e.pixels;if(t!==void 0&&t>0)return t;if(n!==void 0&&n>0)return n}function _n(e){let t=W(e.x),n=W(e.y),r=W(e.x2),i=W(e.y2);return{...t===void 0?{}:{x1:t},...n===void 0?{}:{y1:n},...r===void 0?{}:{x2:r},...i===void 0?{}:{y2:i}}}async function vn(e,t,n,r,i,a){return U(await e(t,{command:`desktopScroll`,direction:i,...hn(a,{includeDuration:!0,includeReleaseBehavior:!1}),appBundleId:n.appBundleId},r),i,a,{includeDuration:!0})}function K(e,t,n){return{command:`remotePress`,remoteButton:e,...n===void 0?{}:{durationMs:n},...t===void 0?{}:{appBundleId:t}}}function yn(e){return e===`system`?`backSystem`:`backInApp`}function bn(e,t){let n={signal:t.signal,verbose:t.verbose,logPath:t.logPath,traceLogPath:t.traceLogPath,requestId:t.requestId,iosXctestrunFile:t.iosXctestrunFile,iosXctestDerivedDataPath:t.iosXctestDerivedDataPath,iosXctestEnvDir:t.iosXctestEnvDir,runnerLeaseContext:t.runnerLeaseContext};return{runnerOpts:n,overrides:{tap:async(r,i)=>await E(e,J(e,t,r,i),n),pressPoint:async(r,i)=>await xn(e,t,n,r,i),tapElementSelector:async r=>await E(e,{command:`tap`,selectorKey:r.key,selectorValue:r.value,allowNonHittableCoordinateFallback:r.allowNonHittableCoordinateFallback,...r.expectedPoint?{x:r.expectedPoint.x,y:r.expectedPoint.y}:{},...ne(e)?{synthesized:!0}:{},appBundleId:t.appBundleId},n),doubleTap:async(r,i)=>{let a=await E(e,S([{kind:`doubleTap`,x:r,y:i}],t.appBundleId),n);return C(a),a},appState:async()=>En(await E(e,{command:`appState`,appBundleId:t.appBundleId},n)),longPress:async(r,i,a)=>await E(e,{command:`longPress`,x:r,y:i,durationMs:a,appBundleId:t.appBundleId},n),focus:async(r,i)=>await E(e,J(e,t,r,i),n),type:async(r,i)=>Tn(await E(e,{command:`type`,text:r,delayMs:i,textEntryMode:r===`
|
|
6
|
+
`?void 0:`append`,appBundleId:t.appBundleId},n)),fill:async(r,i,a,o,s)=>await E(e,{command:`type`,x:r,y:i,text:a,delayMs:o,textEntryMode:`replace`,...s?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},appBundleId:t.appBundleId},n),scroll:async(r,i)=>await jn(E,e,t,n,r,i),performGesture:async r=>await kn(e,t,n,r),gestureViewport:async()=>On(await E(e,{command:`gestureViewport`,appBundleId:t.appBundleId},n))}}}async function xn(e,t,n,r,i){let a=d(e)?p(i.surface,`xctest`):void 0;return a?await Sn(t,r,i,a):i.button===`primary`?i.count===1?await wn(e,t,n,r,i):await Ke(e,r,i,t.appBundleId,async t=>await E(e,t,n)):await Cn(e,t,n,r,i.button)}async function Sn(e,n,r,i){if(r.button!==`primary`)throw new t(`UNSUPPORTED_OPERATION`,`${r.button} click is not supported on macOS ${i} sessions.`);let{runMacOsPressAction:a}=await import(`./helper.js`).then(e=>e.n),o=await a(n.x,n.y,{bundleId:e.appBundleId,surface:i,holdMs:r.holdMs,clicks:r.count,doubleClick:r.doubleTap,intervalMs:r.intervalMs,signal:e.signal});return o.holdMs===void 0?{}:{holdMs:o.holdMs}}async function Cn(e,t,n,r,i){return await E(e,{command:`mouseClick`,x:r.x,y:r.y,button:i,appBundleId:t.appBundleId},n)}async function wn(e,t,n,r,i){if(i.doubleTap){let i=await E(e,S([{kind:`doubleTap`,x:r.x,y:r.y}],t.appBundleId),n);return C(i),i}return i.holdMs>0?await E(e,{command:`longPress`,x:r.x,y:r.y,durationMs:i.holdMs,appBundleId:t.appBundleId},n):await E(e,J(e,t,r.x,r.y),n)}function Tn(e){let t=e.textEntryRoute;return Dn(t)?{textEntryRoute:t}:{}}function En(e){let t=e.applicationState;return i(t)?{applicationState:t}:{}}function Dn(e){return typeof e==`string`&&mt.includes(e)}function On(e){let n=q(e.x),r=q(e.y),i=q(e.x2),a=q(e.y2);if(n===void 0||r===void 0||i===void 0||a===void 0||i<=0||a<=0)throw new t(`COMMAND_FAILED`,`Apple runner returned an invalid gesture viewport`);return{x:n,y:r,width:i,height:a}}function q(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}async function kn(e,t,n,r){if(r.topology===`two`&&ht(e,r.intent),r.topology===`single`&&d(e)){let{start:i,end:a}=Ce(r);return await E(e,{command:`drag`,x:i.x,y:i.y,x2:a.x,y2:a.y,durationMs:r.durationMs,appBundleId:t.appBundleId},n)}if(r.topology===`single`&&f(e)){let{start:i,end:a}=Ce(r);return await E(e,{command:`swipe`,direction:An(i,a),appBundleId:t.appBundleId},n)}return await E(e,{command:`gesture`,gesturePlan:r,appBundleId:t.appBundleId},n)}function An(e,t){let n=t.x-e.x,r=t.y-e.y;return Math.abs(n)>=Math.abs(r)?n>=0?`right`:`left`:r>=0?`down`:`up`}function J(e,t,n,r){return{command:`tap`,x:n,y:r,...ne(e)?{synthesized:!0}:{},appBundleId:t.appBundleId}}async function jn(e,t,n,r,i,a){if(ge(a?.durationMs,{invalidMessage:`scroll durationMs must be a non-negative integer at most ${_e}`}),f(t))return G(await e(t,K(i,n.appBundleId,a?.durationMs),r),{amount:a?.amount,durationMs:a?.durationMs});if(ce(a??{}),d(t))return await vn(e,t,n,r,i,a);let o=mn(a),s;try{s=await e(t,{command:`scroll`,direction:i,...hn(o),appBundleId:n.appBundleId},r)}catch(e){throw pn(e)}return U(s,i,o)}const Mn=p(`app`,`native`),Nn=`The native macOS app backend acts through accessibility actions only. Unset AGENT_DEVICE_MACOS_APP_BACKEND to drive this app with XCTest.`,Pn=new Set(at);function Fn(e,t){let n=()=>{if(t.appBundleId)return t.appBundleId;throw Y(`an action on a session that names no app`)},r=async(e,r={})=>In(await X(et(e.x,e.y,{surface:Mn,bundleId:n(),clicks:r.count,intervalMs:r.intervalMs,signal:t.signal})));return{open:e.open,openDevice:e.openDevice,close:e.close,screenshot:e.screenshot,snapshot:e.snapshot,readTextAtPoint:e.readTextAtPoint,readClipboard:e.readClipboard,writeClipboard:e.writeClipboard,setSetting:e.setSetting,readAlert:e.readAlert,awaitAlert:e.awaitAlert,acceptAlert:e.acceptAlert,dismissAlert:e.dismissAlert,tap:async(e,t)=>await r({x:e,y:t}),pressPoint:async(t,n)=>{if(n.surface!==void 0&&n.surface!==`app`)return await e.pressPoint(t,n);if(n.button!==`primary`)throw Y(`${n.button} click`);if(n.doubleTap)throw Y(`double-click`);if(n.holdMs>0)throw Y(`press and hold`);return await r(t,n)},longPress:async()=>{throw Y(`press and hold`)},focus:async(e,t)=>await r({x:e,y:t}),type:async(e,r)=>{await X(tt(e,{bundleId:n(),delayMs:r,signal:t.signal}))},fill:async(e,r,i)=>In(await X(rt(e,r,i,{bundleId:n(),signal:t.signal}))),scroll:async(e,r)=>{ce(r??{});let i=await X(ot(e,{bundleId:n(),amount:r?.amount,pixels:r?.pixels,signal:t.signal}));return{...U(i,e,r,{includeDuration:!1}),mechanism:i.mechanism}},back:async()=>{throw Y(`back`)},setOrientation:async()=>{throw Y(`orientation`)}}}function In(e){return{mechanism:e.mechanism,...e.windowTitle===void 0?{}:{windowTitle:e.windowTitle}}}function Y(e){return new t(`UNSUPPORTED_OPERATION`,`${e} is not supported by the native macOS app backend.`,{reason:`unsupported-device-backend`,hint:Nn})}async function X(e){try{return await e}catch(e){if(!(e instanceof t))throw e;let n=e.details?.reason;throw typeof n!=`string`||!Pn.has(n)?e:new t(`UNSUPPORTED_OPERATION`,e.message,{...e.details,reason:`unsupported-device-backend`,helperReason:n,hint:Nn},e)}}const Ln={0:`unknown`,1:`notRunning`,2:`runningBackgroundSuspended`,3:`runningBackground`};function Rn(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return;let r={...e},i=r.reason;if(!n(i))return;let a=r.priorState;if(typeof a!=`number`||!Number.isInteger(a))return;let o=Ln[a];o===void 0&&t?.({reason:i,rawPriorState:a});let s=r.otherActiveApplicationPid;return{reason:i,priorState:o??`unknown`,...typeof s==`number`&&Number.isInteger(s)&&s>0?{otherActiveApplicationPid:s}:{}}}function zn(e){let t=Bn(e.systemSurface),n=s(e.keyboard),r=o(e.observation),i=Rn(e.targetActivation,e=>Je({level:`debug`,phase:`ios_runner_target_activation_prior_state_unmapped`,data:e}));return{nodes:Array.isArray(e.nodes)?e.nodes:void 0,truncated:typeof e.truncated==`boolean`?e.truncated:void 0,quality:Ae(e.snapshotQuality),qualityPayload:Wn(e.qualityPayload,t),runnerFatal:e.runnerFatal===!0,...n?{keyboard:n}:{},...t?{systemSurface:t}:{},...i?{targetActivation:i}:{},...r?{observation:r}:{},message:typeof e.message==`string`&&e.message.trim().length>0?e.message:void 0}}function Bn(e){if(!c(e)||typeof e.bundleId!=`string`)return;let t=Oe(e.bundleId);return t&&{bundleId:t.bundleId,kind:t.kind}}function Vn(e,t,n){let r=n.nodes??[],i=Gn(r,n.qualityPayload?.nodes);if(n.runnerFatal===!0||r.length===0&&n.qualityPayload===void 0)return{nodes:r};let a=Ee({raw:t?.raw,interactiveOnly:t?.interactiveOnly,depth:t?.depth,scope:t?.scope,customActions:t?.customActions}),o={stage:`presented`,presentation:{producer:`apple-runner`,intent:`full`,payload:{nodes:r,truncated:n.truncated??!1,...n.quality?.effectiveDepth===void 0?{}:{effectiveDepth:n.quality.effectiveDepth}},...n.qualityPayload?{qualityPayload:n.qualityPayload}:{}},validation:{presentationKey:Te(a),viewport:i,hittability:{kind:`available`},lineage:{targetId:e},residue:[]}};try{let e=Ie(o,a),t=ae(e.validatedViewport);return{nodes:e.nodes,...t?{viewport:t}:{}}}catch(e){Hn(e,n)}}function Hn(e,n){let r=n.quality;if(e instanceof _&&Me(r))throw new t(`COMMAND_FAILED`,e.message,{...g(e),...n.systemSurface?{systemSurface:n.systemSurface}:{},snapshotQuality:{state:r.state,backend:r.backend,...r.reason?{reason:r.reason}:{},...r.reasonCode?{reasonCode:r.reasonCode}:{}},hint:Un(n.systemSurface,r)},e);Z(e,n.systemSurface)}function Un(e,t){return[e?`${e.bundleId} hosts the surface presented over the app, and this capture targeted that surface.`:void 0,...je(t,[])].filter(e=>e!==void 0).join(` `)}function Wn(e,t){if(e!==void 0)return(!c(e)||!Array.isArray(e.nodes)||typeof e.truncated!=`boolean`)&&Z(new _(`invalid-quality-payload`,`iOS runner returned an invalid quality payload`),t),e.scope!==void 0&&e.scope!==null&&Z(new _(`invalid-quality-payload`,`iOS runner quality payload must be unscoped`,{field:`scope`}),t),{nodes:e.nodes,truncated:e.truncated,scope:null}}function Gn(e,t){return Ne(Kn(t),{fallbackToLargestRoot:!0})??Ne(Kn(e),{fallbackToLargestRoot:!0})??{kind:`missing`,reason:`not-provided`}}function Kn(e){return e?.filter(e=>e.parentIndex===void 0)??[]}function Z(e,n){throw e instanceof _?new t(`COMMAND_FAILED`,e.message,{...g(e),...n?{systemSurface:n}:{}},e):e}function qn(e,n,r){if(e.appleOs===`watchos`)throw new t(`UNSUPPORTED_PLATFORM`,`watchOS is not supported: XCUITest cannot drive watchOS UI, so this device has no runner backend.`);let{overrides:i,runnerOpts:a}=bn(e,n),o=d(e)?gt():`xctest`,s=t=>d(e)?p(t,o):void 0,c={open:(t,n)=>Ze(e,t,{appBundleId:n?.appBundleId,launchConsole:n?.launchConsole,launchArgs:n?.launchArgs,terminateRunningApp:n?.terminateRunningApp,url:n?.url,runnerOptions:a}),openDevice:()=>Qe(e),close:t=>$e(e,t,a),screenshot:(t,n)=>or(e,t,n,a,s(n?.surface)),snapshot:async t=>await Jn(e,t,a,s(t?.surface)),readTextAtPoint:async(t,n)=>{let r=s(n?.surface);return r?await sr(t,r,n?.appBundleId,n?.signal):await cr(e,t,n,a)},findText:async(t,n)=>({found:(await E(e,{command:`findText`,text:t,appBundleId:n?.appBundleId},n?.signal?{...a,signal:n.signal}:a))?.found===!0}),back:async t=>{if(f(e)){await E(e,K(`menu`,n.appBundleId),a);return}await E(e,{command:yn(t),appBundleId:n.appBundleId},a)},home:async()=>{if(f(e)){await E(e,K(`home`,n.appBundleId),a);return}await E(e,{command:`home`,appBundleId:n.appBundleId},a)},setOrientation:async r=>{let i=ir(await E(e,{command:`rotate`,orientation:r,appBundleId:n.appBundleId},a));if(i!==r)throw new t(`COMMAND_FAILED`,`iOS runner observed ${i} after requesting ${r}`,{requestedOrientation:r,observedOrientation:i});return{orientation:i}},appSwitcher:async()=>{await E(e,{command:`appSwitcher`,appBundleId:n.appBundleId},a)},actionButton:async()=>{await E(e,{command:`actionButton`,appBundleId:n.appBundleId},a)},tvRemote:async(t,r)=>{await E(e,K(Se(t),n.appBundleId,r),a)},keyboardDismiss:async()=>{let t=await E(e,{command:`keyboardDismiss`,appBundleId:n.appBundleId},a);return{kind:`mechanism`,wasVisible:Q(t,`wasVisible`),dismissed:Q(t,`dismissed`),visible:Q(t,`visible`),mechanism:rr(t,`keyboardDismissMechanism`)}},keyboardEnter:async()=>{let t=await E(e,{command:`keyboardReturn`,appBundleId:n.appBundleId},a);return{kind:`visibility-echo`,visible:Q(t,`visible`),wasVisible:Q(t,`wasVisible`)}},readClipboard:()=>St(e),writeClipboard:t=>Ct(e,t,a),setSetting:(t,n,r,i)=>Lt(e,t,n,r,i),readSetting:t=>zt(e,t),readAlert:t=>_t(e,a,t),awaitAlert:t=>vt(e,a,t),acceptAlert:t=>yt(e,a,`accept`,t),dismissAlert:t=>yt(e,a,`dismiss`,t),...i},l=o===`native`?Fn(c,n):c;return r?ar(e,n,l,r):l}async function Jn(e,t,n,r){return r?await bt({...t,surface:r},t?.signal):await Yn(e,t,n)}async function Yn(e,t,n){let r=zn(await l(`snapshot_capture`,async()=>await E(e,Xn(t),nr(n,t?.signal)),{backend:`xctest`}));Zn(t,r),Qn(e,t,r);let i=$n(r),a=er(e,t,r);return{nodes:a.nodes,truncated:r.truncated??!1,backend:`xctest`,producer:`apple-runner`,...a.viewport?{viewport:a.viewport}:{},...r.quality?{quality:r.quality}:{},...r.systemSurface?{systemSurface:r.systemSurface}:{},...r.keyboard?{keyboard:r.keyboard}:{},...r.targetActivation?{targetActivation:r.targetActivation}:{},...r.observation?{observation:r.observation}:{},...i.length>0?{warnings:i}:{}}}function Xn(e){let{appBundleId:t,interactiveOnly:n,preferredBackend:r,customActions:i,depth:a,scope:o,raw:s}=e??{};return{command:`snapshot`,appBundleId:t,interactiveOnly:n,preferredBackend:r,customActions:i,...e?.observeOnly===!0?{observeOnly:!0}:{},depth:a,scope:o,raw:s}}function Zn(e,n){if(e?.observeOnly===!0&&!(n.observation&&!n.targetActivation))throw new t(`COMMAND_FAILED`,`Runner did not return an observe-only snapshot.`,{reason:`observation-unavailable`})}function Qn(e,n,r){if(!((r.nodes?.length??0)>0)&&!tr(n,r.quality)&&e.kind===`simulator`)throw new t(`COMMAND_FAILED`,`XCTest snapshot returned 0 nodes on iOS simulator.`)}function $n(e){let t=[];return!e.quality&&e.message&&t.push(e.message),e.systemSurface&&t.push(De(e.systemSurface.bundleId)),e.targetActivation&&t.push(xt(e.targetActivation)),t}function er(e,t,n){return d(e)?{nodes:n.nodes??[]}:Vn(e.id,t,n)}function tr(e,t){return ie(e?.scope)!==null&&t!==void 0&&t.state!==`sparse`}function nr(e,t){return t?{...e,signal:e.signal?AbortSignal.any([e.signal,t]):t}:e}function Q(e,t){let n=e[t];return typeof n==`boolean`?n:void 0}function rr(e,t){let n=e[t];return typeof n==`string`?n:void 0}function ir(e){let n=e.orientation;if(typeof n==`string`&&ye.includes(n))return n;throw new t(`COMMAND_FAILED`,`iOS runner returned an invalid orientation result`,{orientation:n})}function ar(e,t,n,r){let i={...n,open:async()=>$(`open`),openDevice:async()=>$(`openDevice`),close:async()=>$(`close`),screenshot:async()=>$(`screenshot`),readClipboard:async()=>$(`readClipboard`),setSetting:async()=>$(`setSetting`),readSetting:async()=>$(`readSetting`)};return we(i,n=>qe(r,{deviceId:e.id,requestId:t.requestId},n))}function $(e){throw new t(`UNSUPPORTED_OPERATION`,`${e} uses local Apple tooling (simctl/devicectl), which an injected runner transport cannot reach; the provider session must supply its own ${e} implementation.`)}async function or(e,n,r={},i,o){if(o){if(r.fullscreen)throw new t(`INVALID_ARGS`,`screenshot --fullscreen is not accepted on the macOS ${o} surface: its capture frame is fixed`,{reason:a.macOsHelperSurfaceFixedFrame,surface:o});return await nt(n,{surface:o,...o===`app`?{bundleId:r.appBundleId}:{},signal:i.signal}),{}}return r.captureBackend===`runner`?(await H(e,n,r.appBundleId,r.fullscreen,i),{}):await $t(e,n,{appBundleId:r.appBundleId,pixelDensity:r.pixelDensity,fullscreen:r.fullscreen,runnerOptions:i,normalizeStatusBar:r.normalizeStatusBar,skipIosSimulatorBootCheck:r.skipIosSimulatorBootCheck})}async function sr(e,t,n,r){let{runMacOsReadTextAction:i}=await import(`./helper.js`).then(e=>e.n);return(await i(e.x,e.y,{bundleId:n,surface:t,signal:r})).text}async function cr(e,t,n,r){let i=await E(e,{command:`readText`,x:t.x,y:t.y,appBundleId:n?.appBundleId},n?.signal?{...r,signal:n.signal}:r);return typeof i.text==`string`?i.text:typeof i.message==`string`?i.message:void 0}export{qn as createAppleInteractor};
|
package/dist/src/interactors.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";import{P as t}from"./sdk-contracts.js";import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";import{P as t}from"./sdk-contracts.js";import{E as n}from"./sdk-device.js";import{n as r,t as i}from"./register-builtins.js";import{AsyncLocalStorage as a}from"node:async_hooks";let o=[];const s=new a;async function c(e,t){return await s.run([...e],t)}function l(e,t){for(let n of d()){if(!n.ownsDevice(e))continue;let r=n.getInteractor(e,t);if(r)return r}}function u(e){return d().some(t=>t.ownsDevice(e))}function d(){return s.getStore()??o}function f(e,t={}){C(e);let n=e.map(e=>e.provider);return{providerRuntimes:Object.freeze([...e]),providerRuntimeIds:n,providerRuntimeRequiredIds:v([...n,...t.providerRuntimeRequiredIds??[]]),leaseLifecycleProvider:y(e),recoverableProviderIds:e.filter(e=>e.recoverExpiredLease!==void 0).map(e=>e.provider),recoverExpiredLease:_(e),cloudArtifactProvider:b(e),providerAppCatalog:x(e),deviceInventorySource:S(e),appleRunnerProvider:m(e),appleRunnerScreenRecordingTransport:p(e),providerDeviceRuntimeScope:async t=>await c(e,t)}}function p(e){if(e.some(g))return t=>{for(let n of e){if(!g(n)||!n.ownsDevice(t.device))continue;let e=n.getAppleRunnerScreenRecordingTransport(t.device);if(e)return e}}}function m(e){if(e.some(h))return t=>{for(let n of e){if(!h(n)||!n.ownsDevice(t.device))continue;let e=n.getAppleRunnerProvider(t.device);if(e)return e}}}function h(e){return`getAppleRunnerProvider`in e&&typeof e.getAppleRunnerProvider==`function`}function g(e){return`getAppleRunnerScreenRecordingTransport`in e&&typeof e.getAppleRunnerScreenRecordingTransport==`function`}function _(e){if(e.some(e=>e.recoverExpiredLease!==void 0))return async n=>{let r=e.find(e=>E(e,n.leaseProvider));if(!r?.recoverExpiredLease)throw new t(`UNSUPPORTED_OPERATION`,`Provider ${n.leaseProvider??`unknown`} cannot recover an expired lease.`,{provider:n.leaseProvider,leaseId:n.leaseId});await r.recoverExpiredLease(n)}}function v(e){return[...new Set(e)]}function y(e){if(e.length!==0)return{allocate:async(t,n)=>await T(e,`allocate`,t,n),heartbeat:async(t,n)=>await T(e,`heartbeat`,t,n),release:async(t,n)=>await T(e,`release`,t,n)}}function b(e){if(e.length!==0)return{listCloudArtifacts:async t=>await w(e,t)}}function x(e){let n=e.filter(e=>e.appCatalog!==void 0);if(n.length!==0)return{supports:e=>n.some(t=>E(t,e)),list:async(e,r)=>{let i=n.find(t=>E(t,e.provider));if(!i?.appCatalog)throw new t(`UNSUPPORTED_OPERATION`,`Provider ${e.provider} does not expose an app catalog.`,{provider:e.provider});return await i.appCatalog(e,r)}}}function S(e){if(e.length!==0)return{discover:async(t,n)=>{n.throwIfAborted();for(let r of e){if(!E(r,t.leaseProvider))continue;let e=await r.deviceInventoryProvider(t,n);if(n.throwIfAborted(),e!=null)return{kind:`inventory`,devices:e}}return{kind:`declined`}}}}function C(e){let t=new Set;for(let n of e){if(t.has(n.provider))throw TypeError(`Duplicate provider device runtime: ${n.provider}`);t.add(n.provider)}}async function w(e,t){for(let n of e){if(!E(n,t.provider))continue;let e=await n.cloudArtifacts?.listCloudArtifacts?.(t);if(e)return e}}async function T(e,t,n,r){for(let i of e){if(!E(i,n.leaseProvider))continue;let e=i.leaseLifecycle[t],a=e?await e(n,r):void 0;if(a)return a}}function E(e,t){return e.provider===t}var D=e({getInteractor:()=>O,getLocalInteractor:()=>k});i();async function O(e,r){if(u(e)){let i=l(e,r);if(i)return i;throw new t(`UNSUPPORTED_OPERATION`,`Provider device runtime does not have an active interactor for this device.`,{deviceId:e.id,platform:n(e)})}return await k(e,r)}async function k(e,t){return await r(e.platform).createInteractor(e,t)}export{u as i,D as n,f as r,O as t};
|
package/dist/src/internal/bin.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
async function e(e,n,r){try{await t(e,n,r)}catch(e){r.stderr(`${e instanceof Error?e.message:String(e)}\n`),await(await n.processExit()).exitAfterFlush(1)}}async function t(e,t,l){if(e.length===0)return await n(t,l);if(o(e))return await r(t,l);let u=c(e);if(u!==void 0)return await i(u,e,t,l);if(s(e))return await(await t.mcp()).runAgentDeviceMcpServer();await a(e,t)}async function n(e,t){t.stdout(`${(await e.help()).buildUsageText()}\n`),await(await e.processExit()).exitAfterFlush(1)}async function r(e,t){t.stdout(`${t.bundledVersion??(await e.version()).readVersion()}\n`)}async function i(e,t,n,r){let i=await n.help(),o=e===null?`${i.buildUsageText()}\n`:i.resolveHelpTargetUsageText(e);if(o===null)return await a(t,n);r.stdout(o)}async function a(e,t){await(await t.cli()).runCliProcess(e)}function o(e){return e.length===1&&(e[0]===`--version`||e[0]===`-V`)}function s(e){return e[0]===`mcp`&&!e.some(l)}function c(e){let[t,n]=e;if(e.length===1)return t===`help`||l(t)?null:void 0;if(e.length===2)return t===`help`?n:l(n)?t:void 0}function l(e){return e===`--help`||e===`-h`}e(process.argv.slice(2),{help:()=>import(`../cli-help.js`).then(e=>e.n),cli:()=>import(`../process-entry.js`),mcp:()=>import(`../server.js`),version:()=>import(`../version.js`).then(e=>e.t),processExit:()=>import(`../process-exit.js`)},{bundledVersion:`0.21.
|
|
1
|
+
async function e(e,n,r){try{await t(e,n,r)}catch(e){r.stderr(`${e instanceof Error?e.message:String(e)}\n`),await(await n.processExit()).exitAfterFlush(1)}}async function t(e,t,l){if(e.length===0)return await n(t,l);if(o(e))return await r(t,l);let u=c(e);if(u!==void 0)return await i(u,e,t,l);if(s(e))return await(await t.mcp()).runAgentDeviceMcpServer();await a(e,t)}async function n(e,t){t.stdout(`${(await e.help()).buildUsageText()}\n`),await(await e.processExit()).exitAfterFlush(1)}async function r(e,t){t.stdout(`${t.bundledVersion??(await e.version()).readVersion()}\n`)}async function i(e,t,n,r){let i=await n.help(),o=e===null?`${i.buildUsageText()}\n`:i.resolveHelpTargetUsageText(e);if(o===null)return await a(t,n);r.stdout(o)}async function a(e,t){await(await t.cli()).runCliProcess(e)}function o(e){return e.length===1&&(e[0]===`--version`||e[0]===`-V`)}function s(e){return e[0]===`mcp`&&!e.some(l)}function c(e){let[t,n]=e;if(e.length===1)return t===`help`||l(t)?null:void 0;if(e.length===2)return t===`help`?n:l(n)?t:void 0}function l(e){return e===`--help`||e===`-h`}e(process.argv.slice(2),{help:()=>import(`../cli-help.js`).then(e=>e.n),cli:()=>import(`../process-entry.js`),mcp:()=>import(`../server.js`),version:()=>import(`../version.js`).then(e=>e.t),processExit:()=>import(`../process-exit.js`)},{bundledVersion:`0.21.24`,stdout:e=>{process.stdout.write(e)},stderr:e=>{process.stderr.write(e)}}).catch(()=>process.exit(1));export{};
|