agent-device 0.20.7 → 0.20.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.20.7.apk → agent-device-android-ime-helper-0.20.8.apk} +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.20.8.apk.sha256 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.20.7.manifest.json → agent-device-android-ime-helper-0.20.8.manifest.json} +4 -4
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.20.7.apk → agent-device-android-snapshot-helper-0.20.8.apk} +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.20.8.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.20.7.manifest.json → agent-device-android-snapshot-helper-0.20.8.manifest.json} +6 -6
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +5 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+RecordingTests.swift +4 -0
- package/dist/src/agent-browser-tool.js +1 -1
- package/dist/src/agent-device-client.js +2 -2
- package/dist/src/android.js +1 -1
- package/dist/src/app-lifecycle.js +7 -7
- package/dist/src/app-lifecycle2.js +1 -1
- package/dist/src/app-log-reconnect.js +1 -1
- package/dist/src/app-log-runtime.js +3 -3
- package/dist/src/app-resolution.js +2 -2
- package/dist/src/apps.js +5 -5
- package/dist/src/auth-session.js +1 -1
- package/dist/src/boot-diagnostics.js +1 -1
- package/dist/src/cli-config.js +1 -1
- package/dist/src/cli-help.js +1 -1
- package/dist/src/cli.js +4 -4
- package/dist/src/client-metro.js +1 -1
- package/dist/src/connection-runtime.js +1 -1
- package/dist/src/debug-symbols.js +3 -3
- package/dist/src/device-claim-inspection.js +1 -1
- package/dist/src/device-input-state.js +1 -1
- package/dist/src/device-ready.js +1 -0
- package/dist/src/dispatch.js +1 -0
- package/dist/src/find.js +1 -1
- package/dist/src/finders.js +1 -1
- package/dist/src/generic-settle.js +1 -1
- package/dist/src/handler-utils.js +1 -0
- package/dist/src/harmonyos.js +1 -1
- package/dist/src/hdc.js +1 -0
- package/dist/src/helper.js +1 -1
- package/dist/src/host-process.js +3 -2
- package/dist/src/ime-lifecycle.js +5 -5
- package/dist/src/index.d.ts +21 -21
- package/dist/src/input-actions.js +4 -4
- package/dist/src/input-actions2.js +1 -1
- package/dist/src/install-artifact.js +1 -1
- package/dist/src/interaction-runtime.js +1 -1
- package/dist/src/interaction-snapshot.js +1 -1
- package/dist/src/interaction-touch-reference-frame.js +1 -1
- package/dist/src/interaction.js +1 -1
- package/dist/src/interactor.js +1 -1
- package/dist/src/interactor2.js +1 -1
- package/dist/src/internal/bin.js +1 -1
- package/dist/src/internal/daemon.js +7 -29
- package/dist/src/inventory2.js +1 -1
- package/dist/src/lease-context.js +1 -1
- package/dist/src/lease.js +1 -1
- package/dist/src/limrun-runtime-dependencies.js +1 -1
- package/dist/src/linux.js +1 -1
- package/dist/src/manifest.js +1 -1
- package/dist/src/notifications.js +1 -1
- package/dist/src/output-path.js +1 -0
- package/dist/src/owner-identity.js +1 -1
- package/dist/src/physical-device-control.js +1 -1
- package/dist/src/platform-runtime-app-log-process.js +1 -1
- package/dist/src/platform-runtime-host.js +1 -1
- package/dist/src/platform-runtime-network-web-transport.js +1 -1
- package/dist/src/platform-runtime-operation-host.js +4 -4
- package/dist/src/platform-runtime-screen-recording-android-host.js +1 -0
- package/dist/src/platform-runtime-screen-recording-apple-host.js +1 -0
- package/dist/src/platform-runtime-screen-recording-apple-runner-host.js +1 -0
- package/dist/src/platform-runtime-screen-recording-apple-runner-transport.js +1 -0
- package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -0
- package/dist/src/platform-runtime-screen-recording-apple-transport.js +1 -0
- package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -0
- package/dist/src/platform-runtime-screen-recording-harmony-host.js +1 -0
- package/dist/src/platform-runtime-screen-recording-output-host.js +1 -0
- package/dist/src/platform-runtime-screen-recording-web-host.js +1 -0
- package/dist/src/platform-runtime-toolchain-host.js +1 -1
- package/dist/src/platform-runtime.js +1 -1
- package/dist/src/prepare-kind.js +13 -13
- package/dist/src/provider-webdriver.js +1 -1
- package/dist/src/proxy.js +1 -1
- package/dist/src/react-native.js +1 -1
- package/dist/src/record-runtime.js +1 -0
- package/dist/src/record-trace.js +1 -1
- package/dist/src/recording-telemetry.js +1 -0
- package/dist/src/registry.js +4 -4
- package/dist/src/remote-config2.js +1 -1
- package/dist/src/replay.js +2 -2
- package/dist/src/runner-disposal.js +1 -1
- package/dist/src/runner-lease.js +1 -1
- package/dist/src/runtime.js +3 -3
- package/dist/src/runtime2.js +3 -3
- package/dist/src/runtime3.js +3 -3
- package/dist/src/runtime4.js +1 -1
- package/dist/src/runtime7.js +1 -1
- package/dist/src/screenshot-result.js +4 -4
- package/dist/src/sdk-android-adb.js +4 -4
- package/dist/src/sdk-batch-runner.js +2 -2
- package/dist/src/sdk-finders.js +1 -1
- package/dist/src/sdk-remote-config.js +1 -1
- package/dist/src/sdk-selectors.d.ts +5 -1
- package/dist/src/sdk-selectors.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-target-evidence.js +1 -1
- package/dist/src/session.js +10 -10
- package/dist/src/simulator.js +1 -1
- package/dist/src/snapshot-runtime.js +1 -1
- package/dist/src/snapshot-session.js +1 -1
- package/dist/src/snapshot.js +1 -1
- package/dist/src/snapshot2.js +1 -1
- package/dist/src/src.js +1 -1
- package/dist/src/src2.js +2 -2
- package/dist/src/src3.js +1 -1
- package/dist/src/text-surface.js +1 -1
- package/dist/src/tool-provider.js +3 -3
- package/dist/src/tool-provider2.js +1 -1
- package/dist/src/tool-provider3.js +1 -1
- package/dist/src/update-check.js +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/video.js +23 -0
- package/dist/src/web.js +1 -1
- package/package.json +2 -4
- package/server.json +2 -2
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.20.7.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.20.7.apk.sha256 +0 -1
- package/dist/src/context.js +0 -1
- package/dist/src/provider.js +0 -1
- package/dist/src/runner-client.js +0 -1
- package/dist/src/runner-provider.js +0 -1
- package/skills/agent-device/SKILL.md +0 -20
- package/skills/dogfood/SKILL.md +0 -27
package/dist/src/interaction.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{S as e,_ as t,h as n,s as r,v as i}from"./sdk-contracts.js";import{G as a,K as o,V as s,X as c,dt as l,et as u,ft as d,nt as f,q as p,ut as ee}from"./version.js";import{C as m,Ht as h,_ as g,g as _,v}from"./sdk-batch-runner.js";import{_ as te,l as y,s as b}from"./sdk-device.js";import{Xt as x,at as S,gn as C,kt as ne,z as re}from"./prepare-kind.js";import{F as ie}from"./screenshot-result.js";import{i as ae}from"./runtime.js";import{A as w}from"./sdk-android-adb.js";import{t as oe}from"./timeouts.js";import{N as se}from"./runner-disposal.js";import{D as ce,c as T,f as E,l as D,n as le,s as O}from"./context.js";import{$t as ue,Bt as k,Gt as A,Qt as de,Ut as j,Vt as fe,Wt as pe,Xt as me,Yt as he,sn as ge}from"./internal/daemon.js";import{S as M,_ as _e,b as N,c as ve,d as ye,f as be,g as xe,h as Se,l as Ce,m as we,n as Te,p as Ee,r as De,v as Oe,x as ke}from"./selector-runtime.js";import{t as P}from"./interaction-runtime.js";import{t as F}from"./interaction-snapshot.js";import{n as Ae,r as I,t as L}from"./interaction-touch-reference-frame.js";const je=new Set(v());function Me(e){return Pe({fields:Ne(e.command),input:e.input??{},data:e.data,controlledFields:je})}function Ne(e){let t=m(e);if(!t)throw Error(`Missing response data transform descriptor for ${e}`);return t.fields}function Pe(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))}const Fe=new Set([`currentUptimeMs`,`gestureEndUptimeMs`,`gestureStartUptimeMs`,`sequenceResults`]);function Ie(e){if(e)return Object.fromEntries(Object.entries(e).filter(([e])=>!Fe.has(e)))}function Le(e){let n=e.flags?.recordAs;if(n!==void 0){if(ie(n),e.flags?.noRecord)throw new t(`INVALID_ARGS`,`fill --record-as cannot be combined with --no-record because no script step would be published.`);if(!e.session.recordSession&&!e.replayPlanStep)throw new t(`INVALID_ARGS`,`fill --record-as requires an armed script recording. Start a fresh session with open --save-script, then retry the fill.`)}}function R(e){try{return z(e),null}catch(e){if(e instanceof t)return O(e.code,e.message,e.details);throw e}}function z(e){let n=e.ref.startsWith(`@`)?e.ref.slice(1):e.ref,r=he({session:e.session,refBody:n,mintedGeneration:e.mintedGeneration});if(r.admitted)return;let i=ue(e.session);throw new t(`COMMAND_FAILED`,ze(r.reason,e.ref),{reason:r.reason,ref:e.ref,currentGeneration:de(e.session),scope:i===`all`?`all`:Array.from(i),...e.mintedGeneration===void 0?{}:{mintedGeneration:e.mintedGeneration},hint:e.staleRefsWarning??Re})}const Re=`Capture a fresh interactive snapshot (snapshot -i) or use a stable selector, then retry.`;function ze(e,t){switch(e){case`ref_frame_expired`:return`Ref ${t} belongs to an expired ref frame — a device action since the snapshot invalidated it`;case`ref_generation_mismatch`:return`Ref ${t} was minted from a superseded snapshot generation`;case`plain_ref_requires_complete_frame`:return`Ref ${t} needs a complete snapshot — the current frame only authorizes its emitted refs`;case`ref_not_issued`:return`Ref ${t} was not issued by the current ref frame`}}function B(e,t){return!y(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 Be={source:`direct-ios`,kind:`not-observed`};function V(e,t){if(!Ve(e))return t;let{resolution:n,...r}=t;return r}function Ve(e){return e.maestroCoordinateFallbackDispatched===!0}function H(e){return U({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 U(e){let{source:t,referenceFrame:n,extra:r}=e;if(t.kind===`runner-payload`||t.kind===`corroborated-tap`){let e={targetKind:t.targetKind,...V(t,{resolution:t.kind===`runner-payload`?Be:t.resolution}),...r??{}};return{result:G({data:t.data,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e}),responseData:G({data:t.publicData,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e})}}let{result:i}=t,a={targetKind:i.kind,...V(t,Se(i)),...We(i.settle,e.settleRefsGeneration),...r??{}},o=G({data:i.backendResult,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:{...a,...Ue(i)}}),s=G({data:t.publicData,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:a}),c=Ge(`warning`in i?i.warning:void 0,e.staleRefsWarning);return c&&(o.warning=c,s.warning=c),{result:o,responseData:s,...He(i)}}function He(e){let t=W(e)?.node??(`node`in e?e.node:void 0),n=`preActionNodes`in e?e.preActionNodes:void 0;return t&&n?{recordedTarget:{node:t,preActionNodes:n}}:{}}function Ue(e){let t=W(e);return t?{selectorChain:t.selectorChain,refLabel:t.refLabel}:{}}function W(e){return`recordingTarget`in e?e.recordingTarget:void 0}function We(e,t){return!e?.diff||t===void 0?{}:{settle:{...e,refsGeneration:t}}}function Ge(e,t){return t?e?`${e} ${t}`:t:e}function G(e){let{data:t,fallbackX:n,fallbackY:r,referenceFrame:i,extra:a}=e,o=qe(a,n,r)??(typeof t?.message==`string`?t.message:void 0);return Ke({...t??{},...n===void 0||r===void 0?{}:{x:n,y:r},...i??{},...a??{},...C(o)})}function Ke(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function qe(e,t,n){let r=K(e,`text`);if(r!==void 0)return`Filled ${Array.from(r).length} chars`;let i=Je(t,n),a=Ye(e);if(a)return Ze(a,e??{},i);if(i)return Xe(e,i)}function K(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function Je(e,t){return e===void 0||t===void 0?``:` (${e}, ${t})`}function Ye(e){let t=K(e,`ref`);return t===void 0?K(e,`selector`):`@${t}`}function Xe(e,t){return e?.gesture===`longpress`?`Long pressed${t}`:`Tapped${t}`}function Ze(e,t,n){let r=typeof t.button==`string`?t.button:void 0;return t.gesture===`longpress`?`Long pressed ${e}${n}`:r&&r!==`primary`?`Clicked ${r} ${e}${n}`:`Tapped ${e}${n}`}async function q(e){if(!Qe(e))return;let t=et(e.session.snapshot);if(!t)return;let n=await tt(e,t.snapshot.snapshotQuality?.backend,t.presentation);if(!(!n||!nt(t.snapshot,n,e.command)))return rt(t.snapshot,n,e.command)}function Qe(e){return $e(e.command)&&i(e.error).code===`XCTEST_RECORDED_FAILURE`&&be(e.session,{skipPendingPostGestureStabilization:!1})}function $e(e){return e===`click`||e===`press`}function et(e){if(!J(e))return;let t=Date.now()-e.createdAt;if(t<0||t>15e3){w({level:`debug`,phase:`ios_tap_failure_corroboration_stale_baseline`,data:{ageMs:t}});return}let n=it(e.presentationKey);if(n){if(n.raw){w({level:`debug`,phase:`ios_tap_failure_corroboration_raw_baseline`,data:{presentationKey:e.presentationKey}});return}return{snapshot:e,presentation:n}}}async function tt(e,t,n){try{return await e.captureSnapshotForSession(e.session,lt(e.flags,n),e.sessionStore,e.contextFromFlags,{interactiveOnly:n?.interactiveOnly??!0,...t===`private-ax`?{preferredBackend:`private-ax`}:{},signal:se(e.requestId)})}catch(t){w({level:`debug`,phase:`ios_tap_failure_corroboration_capture_failed`,data:{command:e.command,error:t instanceof Error?t.message:String(t)}});return}}function nt(e,t,n){let r=e.snapshotQuality?.backend,i=t.snapshotQuality?.backend;return!r||r!==i?(w({level:`debug`,phase:`ios_tap_failure_corroboration_backend_mismatch`,data:{command:n,baselineBackend:r,afterBackend:i}}),!1):e.presentationKey===t.presentationKey?!0:(w({level:`debug`,phase:`ios_tap_failure_corroboration_scope_mismatch`,data:{command:n,baselinePresentationKey:e.presentationKey,afterPresentationKey:t.presentationKey}}),!1)}function rt(e,t,n){if(!J(t))return;let r=S(e.nodes),i=S(t.nodes);if(r.digest!==i.digest)return w({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 J(e){return!!(e&&e.nodes.length>0&&!re(e.snapshotQuality))}function it(e){if(!e)return;let t;try{t=JSON.parse(e)}catch{return}return at(t)}function at(e){let t=ot(e);if(!(!t||typeof t.interactiveOnly!=`boolean`||typeof t.raw!=`boolean`)&&!(!st(t.depth)||!ct(t.scope)))return{interactiveOnly:t.interactiveOnly,...typeof t.depth==`number`?{depth:t.depth}:{},...typeof t.scope==`string`?{scope:t.scope}:{},raw:t.raw}}function ot(e){return typeof e==`object`&&e?e:void 0}function st(e){return e==null||typeof e==`number`}function ct(e){return e==null||typeof e==`string`}function lt(e,t){if(!(!e&&!t))return{...e??{},out:void 0,...t?{snapshotDepth:t.depth,snapshotScope:t.scope,snapshotRaw:t.raw}:{}}}function ut(e){return e.kind===`selector`?{selector:e.selector}:e.kind===`ref`?{ref:e.ref.startsWith(`@`)?e.ref.slice(1):e.ref}:{}}function dt(e,n){if(n.code!==`AMBIGUOUS_MATCH`)return n;let r=ne(n.details);return r.length===0||e.snapshotGeneration===void 0?n:(pe(e,r),new t(n.code,n.message,{...n.details,refsGeneration:e.snapshotGeneration},n.cause))}async function ft(e){switch(e.req.command){case`press`:return await Y(e,`press`);case`click`:return await Y(e,`click`);case`longpress`:return await Y(e,`longpress`);case`fill`:return await Tt(e);default:return null}}async function Y(e,t){let{req:n,sessionName:r,sessionStore:i}=e,a=i.get(r);if(!a)return T();let o=t===`click`?`click`:t,s=t===`longpress`?`longpress`:`press`,c=B(a,o);if(c)return c;let u=D(s,a.device);if(u)return u;let f=M(t,n.flags);if(f)return f;let p=d(n.flags),m=ee(p);if(t!==`longpress`&&p!==`primary`){let e=l({commandLabel:o,platform:te(a.device),button:p,count:n.flags?.count,intervalMs:n.flags?.intervalMs,holdMs:n.flags?.holdMs,jitterPx:n.flags?.jitterPx,doubleTap:n.flags?.doubleTap});if(e)return O(e.code,e.message,e.details)}let h=t===`longpress`?_e(n.positionals??[]):Oe(n.positionals??[],o);if(!h.ok)return h.response;let g=h.target.kind===`ref`&&n.internal?.findResolvedTarget===void 0?A({session:a,ref:h.target.ref,mintedGeneration:h.refGeneration}):void 0,_;if(h.target.kind===`ref`){let r=e.refSnapshotFlagGuardResponse(t===`longpress`?`longpress`:`press`,n.flags);if(r)return r;let i=n.internal?.findResolvedTarget?null:R({session:a,ref:h.target.ref,mintedGeneration:h.refGeneration,staleRefsWarning:g});if(i)return i;_=await Mt(e,a)}let v=n.internal?.replayTargetGuard,y=v?null:gt({session:a,commandLabel:o,target:h.target,flags:n.flags});if(y){let t=await yt(e,a,y);if(t)return t}let b=t===`longpress`?h.durationMs:void 0;return await Q(e,{androidFreshnessBaseline:_,refContext:h.target.kind===`ref`&&n.internal?.findResolvedTarget===void 0?{ref:h.target.ref,mintedGeneration:h.refGeneration,staleRefsWarning:g}:void 0,iosTapCorroboration:{target:h.target,extra:t===`longpress`?{...b===void 0?{}:{durationMs:b},gesture:`longpress`}:m},run:async e=>await pt({runtime:e,command:t,target:h.target,sessionName:r,requestId:n.meta?.requestId,clickButton:p,flags:n.flags,durationMs:b,expectedResolvedTarget:v,preresolvedTarget:n.internal?.findResolvedTarget}),afterRun:async e=>{if(!a.lease?.leaseProvider)return await ve(a,we(h.target,e))},buildPayloads:async r=>{let i=ht(r);return await mt({params:e,session:a,result:r,staleRefsWarning:g,publicData:X({session:a,command:t===`longpress`?void 0:t,flags:n.flags,data:r.backendResult}),extra:t===`longpress`?{...i===void 0?{}:{durationMs:i},gesture:`longpress`}:m})}})}async function pt(e){let{runtime:t,command:n,target:r,sessionName:i,requestId:a,flags:o,expectedResolvedTarget:s}=e,c=N(o);if(n===`longpress`)return await t.interactions.longPress(r,{session:i,requestId:a,durationMs:e.durationMs,settle:c,expectedResolvedTarget:s});let l={session:i,requestId:a,button:e.clickButton,count:o?.count,intervalMs:o?.intervalMs,holdMs:o?.holdMs,jitterPx:o?.jitterPx,doubleTap:o?.doubleTap,verify:o?.verify,settle:c,expectedResolvedTarget:s,preresolvedTarget:e.preresolvedTarget};return n===`click`?await t.interactions.click(r,l):await t.interactions.press(r,l)}async function mt(e){let{params:t,session:n,result:r,publicData:i,extra:a}=e,o=r.kind===`point`?await Ae({session:n,flags:t.req.flags,sessionStore:t.sessionStore,contextFromFlags:t.contextFromFlags,captureSnapshotForSession:t.captureSnapshotForSession}):L(n.snapshot?.nodes??[]);return U({source:{kind:`runtime`,result:r,publicData:i},referenceFrame:o,extra:a,staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:j(n,r.settle)})}function ht(e){return`durationMs`in e?e.durationMs:void 0}function gt(e){let{session:t,commandLabel:n,target:r,flags:i}=e;return n!==`click`||r.kind!==`selector`||t.recordSession||vt(i)||g(n)&&i?.verify===!0||_(n)&&i?.settle===!0?null:_t(t,r.selector,i)}function _t(e,t,n){let r=Ee({session:e,selectorExpression:t});return r?{...r,...n?.maestro?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},...n?.maestro?.expectedTapPoint?{expectedPoint:n.maestro.expectedTapPoint}:{}}:null}function vt(e){return e?.count!==void 0||e?.intervalMs!==void 0||e?.holdMs!==void 0||e?.jitterPx!==void 0||e?.doubleTap!==void 0||e?.clickButton!==void 0&&e.clickButton!==`primary`}async function yt(e,t,n){return await bt({params:e,session:t,selector:n,command:`press`,positionals:[],extra:{selector:n.raw},fallbackPhase:`ios_direct_selector_tap_fallback`})}async function bt(t){let{params:n,session:r,selector:i,command:a,positionals:o,extra:s,fallbackPhase:c}=t,l=Date.now();me(r);try{let e=await le(r.device,a,o,n.req.flags?.out,{...n.contextFromFlags(n.req.flags,r.appBundleId,r.trace?.outPath),directElementSelector:i,surface:r.surface})??{},t=Date.now(),c=Ct(e),u=X({session:r,command:St(n.req.command,a),flags:n.req.flags,data:e}),d=Z(i.allowNonHittableCoordinateFallback===!0,e),{result:f,responseData:p}=U({source:{kind:`runner-payload`,targetKind:`selector`,data:e,publicData:u,point:c,maestroCoordinateFallbackDispatched:d.used},referenceFrame:wt(e),extra:{...s,...d.extra}});return I({session:r,sessionStore:n.sessionStore,command:n.req.command,positionals:n.req.positionals??[],retryPositionals:Ft(c),flags:n.req.flags,result:f,responseData:p,actionStartedAt:l,actionFinishedAt:t})}catch(t){return await xt({error:t,handlerParams:n,session:r,extra:s,positionals:o,actionStartedAt:l})||(ye(t,{delegateSemanticFailures:i.allowNonHittableCoordinateFallback!==!0})?(w({level:`debug`,phase:c,data:{selector:i.raw,error:t instanceof Error?t.message:String(t)}}),null):{ok:!1,error:e(t)})}}async function xt(e){let{error:t,handlerParams:n,session:r,extra:i,positionals:a,actionStartedAt:o}=e,s=await q({error:t,command:n.req.command,requestId:n.req.meta?.requestId,flags:n.req.flags,session:r,sessionStore:n.sessionStore,contextFromFlags:n.contextFromFlags,captureSnapshotForSession:n.captureSnapshotForSession});if(!s)return;let{result:c,responseData:l}=H({targetKind:`selector`,warning:s.warning,resolution:{source:`direct-ios`,kind:`not-observed`},extra:i});return I({session:r,sessionStore:n.sessionStore,command:n.req.command,positionals:n.req.positionals??a,flags:n.req.flags,result:c,responseData:l,scheduleInteractionOutcomeRetry:!1,actionStartedAt:o,actionFinishedAt:Date.now()})}function X(e){let t=b(e.session.device.platform)?Ie(e.data):e.data;return e.command?Me({command:e.command,input:e.flags,data:t}):t}function St(e,t){return e===`click`||e===`press`||e===`fill`?e:t}function Z(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 Ct(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}async function Tt(e){let{req:t,sessionName:n,sessionStore:r}=e,i=r.get(n);if(i){let e=B(i,`fill`);if(e)return e;let t=D(`fill`,i.device);if(t)return t}if(!i)return T();Le({session:i,flags:t.flags,replayPlanStep:t.internal?.replayPlanStep===!0});let a=M(`fill`,t.flags);if(a)return a;let o=xe(t.positionals??[]);if(!o.ok)return o.response;let s=await Et(e,i,o.target,o.refGeneration);if(s.response)return s.response;let{staleRefsWarning:c}=s,l=t.internal?.replayTargetGuard;return await Q(e,{refContext:o.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0?{ref:o.target.ref,mintedGeneration:o.refGeneration,staleRefsWarning:c}:void 0,run:async e=>await e.interactions.fill(o.target,o.text,{session:n,requestId:t.meta?.requestId,delayMs:t.flags?.delayMs,allowNonHittableCoordinateFallback:t.flags?.maestro?.allowNonHittableCoordinateFallback,verify:t.flags?.verify,settle:N(t.flags),expectedResolvedTarget:l,preresolvedTarget:t.internal?.findResolvedTarget}),buildPayloads:e=>Dt({session:i,result:e,text:o.text,flags:t.flags,staleRefsWarning:c})})}async function Et(e,t,n,r){if(n.kind!==`ref`)return{};let i=e.req.internal?.findResolvedTarget===void 0?A({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:R({session:t,ref:n.ref,mintedGeneration:r,staleRefsWarning:i});return o?{response:o,staleRefsWarning:i}:(await Mt(e,t),{staleRefsWarning:i})}function Dt(e){let{session:t,result:n}=e,r=Z(e.flags?.maestro?.allowNonHittableCoordinateFallback===!0,n.backendResult),i=n.kind===`point`?void 0:L(t.snapshot?.nodes??[]);return U({source:{kind:`runtime`,result:n,publicData:X({session:t,command:`fill`,flags:e.flags,data:n.backendResult}),maestroCoordinateFallbackDispatched:r.used},referenceFrame:i,extra:{text:e.text,...r.extra},staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:j(t,n.settle)})}async function Q(e,t){let n=e.sessionStore.get(e.sessionName);if(!n)return T();let r=P(e),a=Date.now();try{let i,o=await jt(n,e.req.command,{refContext:t.refContext},async()=>{let e=await t.run(r);return i=await t.afterRun?.(e),e});if(o.aborted)return o.response;let{readiness:s,runtimeResult:c}=o,l=Date.now(),{result:u,responseData:d,recordedTarget:f}=await t.buildPayloads(c),p=[...s.status===`recovered`?[s.warning]:[],...i?[i]:[]];if(p.length>0){let e=[...typeof d.warning==`string`?[d.warning]:[],...p].join(` `);u.warning=e,d.warning=e}return I({session:n,sessionStore:e.sessionStore,command:e.req.command,positionals:e.req.positionals??[],retryPositionals:Pt(e.req.command,c),flags:e.req.flags,result:u,responseData:d,recordedTarget:f,actionStartedAt:a,actionFinishedAt:l,androidFreshnessBaseline:t.androidFreshnessBaseline})}catch(r){let o=dt(n,i(r));if(Ce(o))throw o;return o.code===`AMBIGUOUS_MATCH`?Nt(o):await Ot({error:o,handlerParams:e,session:n,target:t.iosTapCorroboration?.target,extra:t.iosTapCorroboration?.extra,actionStartedAt:a,androidFreshnessBaseline:t.androidFreshnessBaseline})||Nt(o)}}async function Ot(e){if(!e.target)return;let t=ae(e.error);if(!t&&e.session.recordSession)return;let n=await q({error:e.error,command:e.handlerParams.req.command,requestId:e.handlerParams.req.meta?.requestId,flags:e.handlerParams.req.flags,session:e.session,sessionStore:e.handlerParams.sessionStore,contextFromFlags:e.handlerParams.contextFromFlags,captureSnapshotForSession:e.handlerParams.captureSnapshotForSession});if(!n)return;let r=kt({target:e.target,resolvedTarget:t,warning:n.warning,referenceFrame:L(e.session.snapshot?.nodes??[]),extra:e.extra});return I({session:e.session,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,scheduleInteractionOutcomeRetry:!1,actionStartedAt:e.actionStartedAt,actionFinishedAt:Date.now(),androidFreshnessBaseline:e.androidFreshnessBaseline})}function kt(e){return e.resolvedTarget?U({source:{kind:`runtime`,result:{...e.resolvedTarget,warning:e.warning}},referenceFrame:e.referenceFrame,extra:e.extra}):H({targetKind:e.target.kind,point:At(e.target),warning:e.warning,referenceFrame:e.referenceFrame,extra:{...ut(e.target),...e.extra??{}}})}function At(e){return e.kind===`point`?{x:e.x,y:e.y}:void 0}async function jt(e,t,n,r){if(e.lease?.leaseProvider)return{aborted:!1,readiness:{status:`clear`},runtimeResult:await r()};let i=await k({session:e,command:t,phase:`before-command`});if(n.refContext&&i.status===`recovered`){let t=R({session:e,ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration,staleRefsWarning:n.refContext.staleRefsWarning});if(t)return{aborted:!0,response:t}}let a=await r();return await k({session:e,command:t,phase:`after-command`}),{aborted:!1,readiness:i,runtimeResult:a}}async function Mt(e,t){if(!ge(t))return;let n=t.snapshot?.comparisonSafe===!0?t.snapshot:void 0;try{await e.captureSnapshotForSession(t,e.req.flags,e.sessionStore,e.contextFromFlags,{interactiveOnly:!0,androidFreshnessMode:`ref-refresh`})}catch(t){w({level:`warn`,phase:`android_ref_snapshot_refresh_failed`,data:{command:e.req.command,error:t instanceof Error?t.message:String(t)}})}return n}function Nt(t){return{ok:!1,error:e(t)}}function Pt(e,t){if(!(t.kind===`ref`&&!t.node)&&(e===`click`||e===`press`))return t.point?Ft(t.point):void 0}function Ft(e){return[String(e.x),String(e.y)]}function It(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}}async function Lt(e){return await Ut(e,`gesture`,async t=>Rt(e,t))}async function Rt(e,t){let n=c(e.req.input),r=Gt(n,t);return r.intent===`pan`&&e.req.internal?.gestureExecutionProfile&&(r.executionProfile=e.req.internal.gestureExecutionProfile),E(r,t.device),Bt(n,r,await zt(Ht(e),{session:e.sessionName,requestId:e.req.meta?.requestId},r,e.req.internal),e.req.flags)}async function zt(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 Bt(e,t,n,r){let i=n.kind===`drag`?n.recording:void 0,a=i?.sourceTarget,o=i?.destinationTarget;return{positionals:qt(e,i),flags:$t(e,r),responseData:It(n,{executionProfile:Wt(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 Vt(e){return await Ut(e,`swipe`,async t=>{let n=Jt(e.req.input);E(p(n).gesture,t.device);let r=n.count??1,i=n.pauseMs??0,a=n.pattern??`one-way`,o=await Zt(Ht(e),e,n,r,i,a);return{positionals:Xt(n),flags:e.req.flags,responseData:It(o,{from:n.from,to:n.to,x1:n.from.x,y1:n.from.y,x2:n.to.x,y2:n.to.y,effectiveDurationMs:o.durationMs,timingMode:`direct`,executionProfile:`endpoint-hold`,count:r,pauseMs:i,pattern:a})}})}function Ht(e){return P({...e,pairedGestureViewport:e.req.internal?.gestureViewport})}async function Ut(t,n,r){let i=t.sessionStore.get(t.sessionName);if(!i)return T();let a=Date.now();try{let e=ce(i.device),o=e?{status:`clear`}:await k({session:i,command:n,phase:`before-command`}),s=await r(i);e||await k({session:i,command:n,phase:`after-command`});let c={...s.responseData};return o.status===`recovered`&&(c.warning=`${typeof c.warning==`string`?`${c.warning} `:``}${o.warning}`),I({session:i,sessionStore:t.sessionStore,command:n,actionCommand:n,positionals:s.positionals,flags:s.flags,result:{...c,...s.recordingResultExtra??{}},responseData:c,recordedTargets:s.recordedTargets,actionStartedAt:a,actionFinishedAt:Date.now()})}catch(t){return{ok:!1,error:e(t)}}}function Wt(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 Gt(e,t){let n=o(e);return n.intent===`drag`?{...n,source:Kt(n.source,t),destination:Kt(n.destination,t)}:n}function Kt(e,i){if(!e.startsWith(`@`))return e;let a=n(e);if(!a)throw new t(`INVALID_ARGS`,`Invalid ref "${e}" — malformed generation suffix.`,{hint:r});return z({session:i,ref:a.base,mintedGeneration:a.generation}),a.base}function qt(e,t){return e.kind!==`drag`||!t?a(e):a({...e,source:t.sourceSelector??e.source,destination:t.destinationSelector??e.destination})}function Jt(e){if(!e||typeof e!=`object`||Array.isArray(e))throw new t(`INVALID_ARGS`,`swipe requires structured object input`);s(e);let n=e,r=n.pattern;if(r!==void 0&&r!==`one-way`&&r!==`ping-pong`)throw new t(`INVALID_ARGS`,`swipe pattern must be one-way or ping-pong`);let i={from:$(n.from,`swipe from`),to:$(n.to,`swipe to`),count:h(n,`count`,{min:1,max:200}),pauseMs:h(n,`pauseMs`,{min:0,max:u}),pattern:r};return Yt(i),i}function Yt(e){let n=e.count??1,r=e.pauseMs??0,i=n*100+Math.max(0,n-1)*r;if(!(i<=6e4))throw new t(`INVALID_ARGS`,`Swipe series must fit within ${f}ms.`,{count:n,pauseMs:r,gestureDurationMs:100,scheduledDurationMs:i,hint:`Reduce --count or --pause-ms.`})}function $(e,n){if(!e||typeof e!=`object`||Array.isArray(e))throw new t(`INVALID_ARGS`,`${n} must be a point`);let r=e;if(typeof r.x!=`number`||!Number.isFinite(r.x))throw new t(`INVALID_ARGS`,`${n} x must be finite`);if(typeof r.y!=`number`||!Number.isFinite(r.y))throw new t(`INVALID_ARGS`,`${n} y must be finite`);return{x:r.x,y:r.y}}function Xt(e){return[String(e.from.x),String(e.from.y),String(e.to.x),String(e.to.y)]}async function Zt(e,t,n,r,i,a){let o;for(let s=0;s<r;s+=1){let c=p(Qt(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 oe(i)}if(!o)throw Error(`Swipe orchestration did not execute a gesture.`);return o}function Qt(e,t,n){return t===`ping-pong`&&n%2==1?{...e,from:e.to,to:e.from}:e}function $t(e,t){return e.kind!==`pan`||e.pointerCount===void 0?t:{...t,pointerCount:e.pointerCount}}async function en(e){let t=await ft({...e,captureSnapshotForSession:F,refSnapshotFlagGuardResponse:ke});if(t)return t;switch(e.req.command){case x.gesture:return await Lt({...e,captureSnapshotForSession:F});case x.swipe:return await Vt({...e,captureSnapshotForSession:F});case x.type:return await tn({...e,captureSnapshotForSession:F});case`get`:return await Te(e);case`is`:return await De(e);default:return null}}async function tn(e){let{sessionName:t,sessionStore:n}=e,r=n.get(t);return r?D(x.type,r.device)||await nn(r)||await rn(e,r):T()}async function nn(e){return e.device.platform===`android`&&e.recording&&(await fe({session:e})).status===`failed`?O(`COMMAND_FAILED`,`Android system dialog blocked the recording session`):null}async function rn(t,n){let{req:r,sessionName:i,sessionStore:a}=t,o=(r.positionals??[]).join(` `),s=P(t),c=Date.now();try{let e=await k({session:n,command:r.command,phase:`before-command`}),t=await s.interactions.typeText(o,{session:i,requestId:r.meta?.requestId,delayMs:r.flags?.delayMs});await k({session:n,command:r.command,phase:`after-command`});let l=Date.now(),u={...t.backendResult??{},text:t.text,delayMs:t.delayMs,...C(t.message??`Typed ${Array.from(t.text).length} chars`)};return e.status===`recovered`&&(u.warning=e.warning),I({session:n,sessionStore:a,command:r.command,positionals:r.positionals??[],flags:r.flags,result:u,responseData:u,actionStartedAt:c,actionFinishedAt:l})}catch(t){return{ok:!1,error:e(t)}}}export{en as handleInteractionCommands};
|
|
1
|
+
import{S as e,_ as t,h as n,s as r,v as i}from"./sdk-contracts.js";import{G as a,K as o,V as s,X as c,dt as l,et as u,ft as d,nt as f,q as p,ut as ee}from"./version.js";import{C as m,Ht as h,_ as g,g as _,v}from"./sdk-batch-runner.js";import{_ as te,l as y,s as b}from"./sdk-device.js";import{Xt as x,at as S,gn as C,kt as ne,z as re}from"./prepare-kind.js";import{F as ie,X as w}from"./screenshot-result.js";import{i as ae}from"./runtime.js";import{j as T}from"./sdk-android-adb.js";import{t as oe}from"./timeouts.js";import{N as se}from"./runner-disposal.js";import{E as ce,c as E,d as D,o as O,s as k,t as le}from"./dispatch.js";import{Gt as A,Jt as j,Kt as ue,Xt as M,Yt as de,en as fe,in as pe,pn as me,rn as he,tn as ge}from"./internal/daemon.js";import{S as N,_ as _e,b as P,c as ve,d as ye,f as be,g as xe,h as Se,l as Ce,m as we,n as Te,p as Ee,r as De,v as Oe,x as ke}from"./selector-runtime.js";import{t as F}from"./interaction-runtime.js";import{t as I}from"./interaction-snapshot.js";import{n as Ae,r as L,t as R}from"./interaction-touch-reference-frame.js";const je=new Set(v());function Me(e){return Pe({fields:Ne(e.command),input:e.input??{},data:e.data,controlledFields:je})}function Ne(e){let t=m(e);if(!t)throw Error(`Missing response data transform descriptor for ${e}`);return t.fields}function Pe(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))}const Fe=new Set([`currentUptimeMs`,`gestureEndUptimeMs`,`gestureStartUptimeMs`,`sequenceResults`]);function Ie(e){if(e)return Object.fromEntries(Object.entries(e).filter(([e])=>!Fe.has(e)))}function Le(e){let n=e.flags?.recordAs;if(n!==void 0){if(ie(n),e.flags?.noRecord)throw new t(`INVALID_ARGS`,`fill --record-as cannot be combined with --no-record because no script step would be published.`);if(!w(e.session)&&!e.replayPlanStep)throw new t(`INVALID_ARGS`,`fill --record-as requires an armed script recording. Start a fresh session with open --save-script, then retry the fill.`)}}function z(e){try{return B(e),null}catch(e){if(e instanceof t)return O(e.code,e.message,e.details);throw e}}function B(e){let n=e.ref.startsWith(`@`)?e.ref.slice(1):e.ref,r=fe({session:e.session,refBody:n,mintedGeneration:e.mintedGeneration});if(r.admitted)return;let i=pe(e.session);throw new t(`COMMAND_FAILED`,ze(r.reason,e.ref),{reason:r.reason,ref:e.ref,currentGeneration:he(e.session),scope:i===`all`?`all`:Array.from(i),...e.mintedGeneration===void 0?{}:{mintedGeneration:e.mintedGeneration},hint:e.staleRefsWarning??Re})}const Re=`Capture a fresh interactive snapshot (snapshot -i) or use a stable selector, then retry.`;function ze(e,t){switch(e){case`ref_frame_expired`:return`Ref ${t} belongs to an expired ref frame — a device action since the snapshot invalidated it`;case`ref_generation_mismatch`:return`Ref ${t} was minted from a superseded snapshot generation`;case`plain_ref_requires_complete_frame`:return`Ref ${t} needs a complete snapshot — the current frame only authorizes its emitted refs`;case`ref_not_issued`:return`Ref ${t} was not issued by the current ref frame`}}function V(e,t){return!y(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 Be={source:`direct-ios`,kind:`not-observed`};function H(e,t){if(!Ve(e))return t;let{resolution:n,...r}=t;return r}function Ve(e){return e.maestroCoordinateFallbackDispatched===!0}function U(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,...H(t,{resolution:t.kind===`runner-payload`?Be:t.resolution}),...r??{}};return{result:K({data:t.data,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e}),responseData:K({data:t.publicData,fallbackX:t.point?.x,fallbackY:t.point?.y,referenceFrame:n,extra:e})}}let{result:i}=t,a={targetKind:i.kind,...H(t,Se(i)),...We(i.settle,e.settleRefsGeneration),...r??{}},o=K({data:i.backendResult,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:{...a,...Ue(i)}}),s=K({data:t.publicData,fallbackX:i.point?.x,fallbackY:i.point?.y,referenceFrame:n,extra:a}),c=Ge(`warning`in i?i.warning:void 0,e.staleRefsWarning);return c&&(o.warning=c,s.warning=c),{result:o,responseData:s,...He(i)}}function He(e){let t=G(e)?.node??(`node`in e?e.node:void 0),n=`preActionNodes`in e?e.preActionNodes:void 0;return t&&n?{recordedTarget:{node:t,preActionNodes:n}}:{}}function Ue(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 We(e,t){return!e?.diff||t===void 0?{}:{settle:{...e,refsGeneration:t}}}function Ge(e,t){return t?e?`${e} ${t}`:t:e}function K(e){let{data:t,fallbackX:n,fallbackY:r,referenceFrame:i,extra:a}=e,o=qe(a,n,r)??(typeof t?.message==`string`?t.message:void 0);return Ke({...t??{},...n===void 0||r===void 0?{}:{x:n,y:r},...i??{},...a??{},...C(o)})}function Ke(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function qe(e,t,n){let r=q(e,`text`);if(r!==void 0)return`Filled ${Array.from(r).length} chars`;let i=Je(t,n),a=Ye(e);if(a)return Ze(a,e??{},i);if(i)return Xe(e,i)}function q(e,t){let n=e?.[t];return typeof n==`string`?n:void 0}function Je(e,t){return e===void 0||t===void 0?``:` (${e}, ${t})`}function Ye(e){let t=q(e,`ref`);return t===void 0?q(e,`selector`):`@${t}`}function Xe(e,t){return e?.gesture===`longpress`?`Long pressed${t}`:`Tapped${t}`}function Ze(e,t,n){let r=typeof t.button==`string`?t.button:void 0;return t.gesture===`longpress`?`Long pressed ${e}${n}`:r&&r!==`primary`?`Clicked ${r} ${e}${n}`:`Tapped ${e}${n}`}async function J(e){if(!Qe(e))return;let t=et(e.session.snapshot);if(!t)return;let n=await tt(e,t.snapshot.snapshotQuality?.backend,t.presentation);if(!(!n||!nt(t.snapshot,n,e.command)))return rt(t.snapshot,n,e.command)}function Qe(e){return $e(e.command)&&i(e.error).code===`XCTEST_RECORDED_FAILURE`&&be(e.session,{skipPendingPostGestureStabilization:!1})}function $e(e){return e===`click`||e===`press`}function et(e){if(!Y(e))return;let t=Date.now()-e.createdAt;if(t<0||t>15e3){T({level:`debug`,phase:`ios_tap_failure_corroboration_stale_baseline`,data:{ageMs:t}});return}let n=it(e.presentationKey);if(n){if(n.raw){T({level:`debug`,phase:`ios_tap_failure_corroboration_raw_baseline`,data:{presentationKey:e.presentationKey}});return}return{snapshot:e,presentation:n}}}async function tt(e,t,n){try{return await e.captureSnapshotForSession(e.session,lt(e.flags,n),e.sessionStore,e.contextFromFlags,{interactiveOnly:n?.interactiveOnly??!0,...t===`private-ax`?{preferredBackend:`private-ax`}:{},signal:se(e.requestId)})}catch(t){T({level:`debug`,phase:`ios_tap_failure_corroboration_capture_failed`,data:{command:e.command,error:t instanceof Error?t.message:String(t)}});return}}function nt(e,t,n){let r=e.snapshotQuality?.backend,i=t.snapshotQuality?.backend;return!r||r!==i?(T({level:`debug`,phase:`ios_tap_failure_corroboration_backend_mismatch`,data:{command:n,baselineBackend:r,afterBackend:i}}),!1):e.presentationKey===t.presentationKey?!0:(T({level:`debug`,phase:`ios_tap_failure_corroboration_scope_mismatch`,data:{command:n,baselinePresentationKey:e.presentationKey,afterPresentationKey:t.presentationKey}}),!1)}function rt(e,t,n){if(!Y(t))return;let r=S(e.nodes),i=S(t.nodes);if(r.digest!==i.digest)return T({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&&!re(e.snapshotQuality))}function it(e){if(!e)return;let t;try{t=JSON.parse(e)}catch{return}return at(t)}function at(e){let t=ot(e);if(!(!t||typeof t.interactiveOnly!=`boolean`||typeof t.raw!=`boolean`)&&!(!st(t.depth)||!ct(t.scope)))return{interactiveOnly:t.interactiveOnly,...typeof t.depth==`number`?{depth:t.depth}:{},...typeof t.scope==`string`?{scope:t.scope}:{},raw:t.raw}}function ot(e){return typeof e==`object`&&e?e:void 0}function st(e){return e==null||typeof e==`number`}function ct(e){return e==null||typeof e==`string`}function lt(e,t){if(!(!e&&!t))return{...e??{},out:void 0,...t?{snapshotDepth:t.depth,snapshotScope:t.scope,snapshotRaw:t.raw}:{}}}function ut(e){return e.kind===`selector`?{selector:e.selector}:e.kind===`ref`?{ref:e.ref.startsWith(`@`)?e.ref.slice(1):e.ref}:{}}function dt(e,n){if(n.code!==`AMBIGUOUS_MATCH`)return n;let r=ne(n.details);return r.length===0||e.snapshotGeneration===void 0?n:(de(e,r),new t(n.code,n.message,{...n.details,refsGeneration:e.snapshotGeneration},n.cause))}async function ft(e){switch(e.req.command){case`press`:return await X(e,`press`);case`click`:return await X(e,`click`);case`longpress`:return await X(e,`longpress`);case`fill`:return await Et(e);default:return null}}async function X(e,t){let{req:n,sessionName:r,sessionStore:i}=e,a=i.get(r);if(!a)return k();let o=t===`click`?`click`:t,s=t===`longpress`?`longpress`:`press`,c=V(a,o);if(c)return c;let u=E(s,a.device);if(u)return u;let f=N(t,n.flags);if(f)return f;let p=d(n.flags),m=ee(p);if(t!==`longpress`&&p!==`primary`){let e=l({commandLabel:o,platform:te(a.device),button:p,count:n.flags?.count,intervalMs:n.flags?.intervalMs,holdMs:n.flags?.holdMs,jitterPx:n.flags?.jitterPx,doubleTap:n.flags?.doubleTap});if(e)return O(e.code,e.message,e.details)}let h=t===`longpress`?_e(n.positionals??[]):Oe(n.positionals??[],o);if(!h.ok)return h.response;let g=h.target.kind===`ref`&&n.internal?.findResolvedTarget===void 0?M({session:a,ref:h.target.ref,mintedGeneration:h.refGeneration}):void 0,_;if(h.target.kind===`ref`){let r=e.refSnapshotFlagGuardResponse(t===`longpress`?`longpress`:`press`,n.flags);if(r)return r;let i=n.internal?.findResolvedTarget?null:z({session:a,ref:h.target.ref,mintedGeneration:h.refGeneration,staleRefsWarning:g});if(i)return i;_=await Q(e,a)}let v=n.internal?.replayTargetGuard,y=v?null:gt({session:a,commandLabel:o,target:h.target,flags:n.flags});if(y){let t=await yt(e,a,y);if(t)return t}let b=t===`longpress`?h.durationMs:void 0;return await kt(e,{androidFreshnessBaseline:_,refContext:h.target.kind===`ref`&&n.internal?.findResolvedTarget===void 0?{ref:h.target.ref,mintedGeneration:h.refGeneration,staleRefsWarning:g}:void 0,iosTapCorroboration:{target:h.target,extra:t===`longpress`?{...b===void 0?{}:{durationMs:b},gesture:`longpress`}:m},run:async e=>await pt({runtime:e,command:t,target:h.target,sessionName:r,requestId:n.meta?.requestId,clickButton:p,flags:n.flags,durationMs:b,expectedResolvedTarget:v,preresolvedTarget:n.internal?.findResolvedTarget}),afterRun:async e=>{if(!a.lease?.leaseProvider)return await ve(a,we(h.target,e))},buildPayloads:async r=>{let i=ht(r);return await mt({params:e,session:a,result:r,staleRefsWarning:g,publicData:Z({session:a,command:t===`longpress`?void 0:t,flags:n.flags,data:r.backendResult}),extra:t===`longpress`?{...i===void 0?{}:{durationMs:i},gesture:`longpress`}:m})}})}async function pt(e){let{runtime:t,command:n,target:r,sessionName:i,requestId:a,flags:o,expectedResolvedTarget:s}=e,c=P(o);if(n===`longpress`)return await t.interactions.longPress(r,{session:i,requestId:a,durationMs:e.durationMs,settle:c,expectedResolvedTarget:s});let l={session:i,requestId:a,button:e.clickButton,count:o?.count,intervalMs:o?.intervalMs,holdMs:o?.holdMs,jitterPx:o?.jitterPx,doubleTap:o?.doubleTap,verify:o?.verify,settle:c,expectedResolvedTarget:s,preresolvedTarget:e.preresolvedTarget};return n===`click`?await t.interactions.click(r,l):await t.interactions.press(r,l)}async function mt(e){let{params:t,session:n,result:r,publicData:i,extra:a}=e,o=r.kind===`point`?await Ae({session:n,flags:t.req.flags,sessionStore:t.sessionStore,contextFromFlags:t.contextFromFlags,captureSnapshotForSession:t.captureSnapshotForSession}):R(n.snapshot?.nodes??[]);return W({source:{kind:`runtime`,result:r,publicData:i},referenceFrame:o,extra:a,staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:j(n,r.settle)})}function ht(e){return`durationMs`in e?e.durationMs:void 0}function gt(e){let{session:t,commandLabel:n,target:r,flags:i}=e;return n!==`click`||r.kind!==`selector`||w(t)||vt(i)||g(n)&&i?.verify===!0||_(n)&&i?.settle===!0?null:_t(t,r.selector,i)}function _t(e,t,n){let r=Ee({session:e,selectorExpression:t});return r?{...r,...n?.maestro?.allowNonHittableCoordinateFallback?{allowNonHittableCoordinateFallback:!0}:{},...n?.maestro?.expectedTapPoint?{expectedPoint:n.maestro.expectedTapPoint}:{}}:null}function vt(e){return e?.count!==void 0||e?.intervalMs!==void 0||e?.holdMs!==void 0||e?.jitterPx!==void 0||e?.doubleTap!==void 0||e?.clickButton!==void 0&&e.clickButton!==`primary`}async function yt(e,t,n){return await bt({params:e,session:t,selector:n,command:`press`,positionals:[],extra:{selector:n.raw},fallbackPhase:`ios_direct_selector_tap_fallback`})}async function bt(t){let{params:n,session:r,selector:i,command:a,positionals:o,extra:s,fallbackPhase:c}=t,l=Date.now();ge(r);try{let e=await le(r.device,a,o,n.req.flags?.out,{...n.contextFromFlags(n.req.flags,r.appBundleId,r.trace?.outPath),directElementSelector:i,surface:r.surface})??{},t=Date.now(),c=wt(e),u=Z({session:r,command:St(n.req.command,a),flags:n.req.flags,data:e}),d=Ct(i.allowNonHittableCoordinateFallback===!0,e),{result:f,responseData:p}=W({source:{kind:`runner-payload`,targetKind:`selector`,data:e,publicData:u,point:c,maestroCoordinateFallbackDispatched:d.used},referenceFrame:Tt(e),extra:{...s,...d.extra}});return L({session:r,sessionStore:n.sessionStore,command:n.req.command,positionals:n.req.positionals??[],retryPositionals:It(c),flags:n.req.flags,result:f,responseData:p,actionStartedAt:l,actionFinishedAt:t})}catch(t){return await xt({error:t,handlerParams:n,session:r,extra:s,positionals:o,actionStartedAt:l})||(ye(t,{delegateSemanticFailures:i.allowNonHittableCoordinateFallback!==!0})?(T({level:`debug`,phase:c,data:{selector:i.raw,error:t instanceof Error?t.message:String(t)}}),null):{ok:!1,error:e(t)})}}async function xt(e){let{error:t,handlerParams:n,session:r,extra:i,positionals:a,actionStartedAt:o}=e,s=await J({error:t,command:n.req.command,requestId:n.req.meta?.requestId,flags:n.req.flags,session:r,sessionStore:n.sessionStore,contextFromFlags:n.contextFromFlags,captureSnapshotForSession:n.captureSnapshotForSession});if(!s)return;let{result:c,responseData:l}=U({targetKind:`selector`,warning:s.warning,resolution:{source:`direct-ios`,kind:`not-observed`},extra:i});return L({session:r,sessionStore:n.sessionStore,command:n.req.command,positionals:n.req.positionals??a,flags:n.req.flags,result:c,responseData:l,scheduleInteractionOutcomeRetry:!1,actionStartedAt:o,actionFinishedAt:Date.now()})}function Z(e){let t=b(e.session.device.platform)?Ie(e.data):e.data;return e.command?Me({command:e.command,input:e.flags,data:t}):t}function St(e,t){return e===`click`||e===`press`||e===`fill`?e:t}function Ct(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 wt(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 Tt(e){return typeof e.referenceWidth==`number`&&typeof e.referenceHeight==`number`?{referenceWidth:e.referenceWidth,referenceHeight:e.referenceHeight}:void 0}async function Et(e){let{req:t,sessionName:n,sessionStore:r}=e,i=r.get(n);if(i){let e=V(i,`fill`);if(e)return e;let t=E(`fill`,i.device);if(t)return t}if(!i)return k();Le({session:i,flags:t.flags,replayPlanStep:t.internal?.replayPlanStep===!0});let a=N(`fill`,t.flags);if(a)return a;let o=xe(t.positionals??[]);if(!o.ok)return o.response;let s=await Dt(e,i,o.target,o.refGeneration);if(s.response)return s.response;let{staleRefsWarning:c}=s,l=t.internal?.replayTargetGuard;return await kt(e,{refContext:o.target.kind===`ref`&&t.internal?.findResolvedTarget===void 0?{ref:o.target.ref,mintedGeneration:o.refGeneration,staleRefsWarning:c}:void 0,run:async e=>await e.interactions.fill(o.target,o.text,{session:n,requestId:t.meta?.requestId,delayMs:t.flags?.delayMs,allowNonHittableCoordinateFallback:t.flags?.maestro?.allowNonHittableCoordinateFallback,verify:t.flags?.verify,settle:P(t.flags),expectedResolvedTarget:l,preresolvedTarget:t.internal?.findResolvedTarget}),buildPayloads:e=>Ot({session:i,result:e,text:o.text,flags:t.flags,staleRefsWarning:c})})}async function Dt(e,t,n,r){if(n.kind!==`ref`)return{};let i=e.req.internal?.findResolvedTarget===void 0?M({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:z({session:t,ref:n.ref,mintedGeneration:r,staleRefsWarning:i});return o?{response:o,staleRefsWarning:i}:(await Q(e,t),{staleRefsWarning:i})}function Ot(e){let{session:t,result:n}=e,r=Ct(e.flags?.maestro?.allowNonHittableCoordinateFallback===!0,n.backendResult),i=n.kind===`point`?void 0:R(t.snapshot?.nodes??[]);return W({source:{kind:`runtime`,result:n,publicData:Z({session:t,command:`fill`,flags:e.flags,data:n.backendResult}),maestroCoordinateFallbackDispatched:r.used},referenceFrame:i,extra:{text:e.text,...r.extra},staleRefsWarning:e.staleRefsWarning,settleRefsGeneration:j(t,n.settle)})}async function kt(e,t){let n=e.sessionStore.get(e.sessionName);if(!n)return k();let r=F(e),a=Date.now();try{let i,o=await Nt(n,e.req.command,{refContext:t.refContext},async()=>{let e=await t.run(r);return i=await t.afterRun?.(e),e});if(o.aborted)return o.response;let{readiness:s,runtimeResult:c}=o,l=Date.now(),{result:u,responseData:d,recordedTarget:f}=await t.buildPayloads(c),p=[...s.status===`recovered`?[s.warning]:[],...i?[i]:[]];if(p.length>0){let e=[...typeof d.warning==`string`?[d.warning]:[],...p].join(` `);u.warning=e,d.warning=e}return L({session:n,sessionStore:e.sessionStore,command:e.req.command,positionals:e.req.positionals??[],retryPositionals:Ft(e.req.command,c),flags:e.req.flags,result:u,responseData:d,recordedTarget:f,actionStartedAt:a,actionFinishedAt:l,androidFreshnessBaseline:t.androidFreshnessBaseline})}catch(r){let o=dt(n,i(r));if(Ce(o))throw o;return o.code===`AMBIGUOUS_MATCH`?Pt(o):await At({error:o,handlerParams:e,session:n,target:t.iosTapCorroboration?.target,extra:t.iosTapCorroboration?.extra,actionStartedAt:a,androidFreshnessBaseline:t.androidFreshnessBaseline})||Pt(o)}}async function At(e){if(!e.target)return;let t=ae(e.error);if(!t&&w(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,session:e.session,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:R(e.session.snapshot?.nodes??[]),extra:e.extra});return L({session:e.session,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,scheduleInteractionOutcomeRetry:!1,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}):U({targetKind:e.target.kind,point:Mt(e.target),warning:e.warning,referenceFrame:e.referenceFrame,extra:{...ut(e.target),...e.extra??{}}})}function Mt(e){return e.kind===`point`?{x:e.x,y:e.y}:void 0}async function Nt(e,t,n,r){if(e.lease?.leaseProvider)return{aborted:!1,readiness:{status:`clear`},runtimeResult:await r()};let i=await A({session:e,command:t,phase:`before-command`});if(n.refContext&&i.status===`recovered`){let t=z({session:e,ref:n.refContext.ref,mintedGeneration:n.refContext.mintedGeneration,staleRefsWarning:n.refContext.staleRefsWarning});if(t)return{aborted:!0,response:t}}let a=await r();return await A({session:e,command:t,phase:`after-command`}),{aborted:!1,readiness:i,runtimeResult:a}}async function Q(e,t){if(!me(t))return;let n=t.snapshot?.comparisonSafe===!0?t.snapshot:void 0;try{await e.captureSnapshotForSession(t,e.req.flags,e.sessionStore,e.contextFromFlags,{interactiveOnly:!0,androidFreshnessMode:`ref-refresh`})}catch(t){T({level:`warn`,phase:`android_ref_snapshot_refresh_failed`,data:{command:e.req.command,error:t instanceof Error?t.message:String(t)}})}return n}function Pt(t){return{ok:!1,error:e(t)}}function Ft(e,t){if(!(t.kind===`ref`&&!t.node)&&(e===`click`||e===`press`))return t.point?It(t.point):void 0}function It(e){return[String(e.x),String(e.y)]}function Lt(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}}async function Rt(e){return await Wt(e,`gesture`,async t=>zt(e,t))}async function zt(e,t){let n=c(e.req.input),r=Kt(n,t);return r.intent===`pan`&&e.req.internal?.gestureExecutionProfile&&(r.executionProfile=e.req.internal.gestureExecutionProfile),D(r,t.device),Vt(n,r,await Bt(Ut(e),{session:e.sessionName,requestId:e.req.meta?.requestId},r,e.req.internal),e.req.flags)}async function Bt(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 Vt(e,t,n,r){let i=n.kind===`drag`?n.recording:void 0,a=i?.sourceTarget,o=i?.destinationTarget;return{positionals:Jt(e,i),flags:en(e,r),responseData:Lt(n,{executionProfile:Gt(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 Ht(e){return await Wt(e,`swipe`,async t=>{let n=Yt(e.req.input);D(p(n).gesture,t.device);let r=n.count??1,i=n.pauseMs??0,a=n.pattern??`one-way`,o=await Qt(Ut(e),e,n,r,i,a);return{positionals:Zt(n),flags:e.req.flags,responseData:Lt(o,{from:n.from,to:n.to,x1:n.from.x,y1:n.from.y,x2:n.to.x,y2:n.to.y,effectiveDurationMs:o.durationMs,timingMode:`direct`,executionProfile:`endpoint-hold`,count:r,pauseMs:i,pattern:a})}})}function Ut(e){return F({...e,pairedGestureViewport:e.req.internal?.gestureViewport})}async function Wt(t,n,r){let i=t.sessionStore.get(t.sessionName);if(!i)return k();let a=Date.now();try{let e=ce(i.device),o=e?{status:`clear`}:await A({session:i,command:n,phase:`before-command`}),s=await r(i);e||await A({session:i,command:n,phase:`after-command`});let c={...s.responseData};return o.status===`recovered`&&(c.warning=`${typeof c.warning==`string`?`${c.warning} `:``}${o.warning}`),L({session:i,sessionStore:t.sessionStore,command:n,actionCommand:n,positionals:s.positionals,flags:s.flags,result:{...c,...s.recordingResultExtra??{}},responseData:c,recordedTargets:s.recordedTargets,actionStartedAt:a,actionFinishedAt:Date.now()})}catch(t){return{ok:!1,error:e(t)}}}function Gt(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 Kt(e,t){let n=o(e);return n.intent===`drag`?{...n,source:qt(n.source,t),destination:qt(n.destination,t)}:n}function qt(e,i){if(!e.startsWith(`@`))return e;let a=n(e);if(!a)throw new t(`INVALID_ARGS`,`Invalid ref "${e}" — malformed generation suffix.`,{hint:r});return B({session:i,ref:a.base,mintedGeneration:a.generation}),a.base}function Jt(e,t){return e.kind!==`drag`||!t?a(e):a({...e,source:t.sourceSelector??e.source,destination:t.destinationSelector??e.destination})}function Yt(e){if(!e||typeof e!=`object`||Array.isArray(e))throw new t(`INVALID_ARGS`,`swipe requires structured object input`);s(e);let n=e,r=n.pattern;if(r!==void 0&&r!==`one-way`&&r!==`ping-pong`)throw new t(`INVALID_ARGS`,`swipe pattern must be one-way or ping-pong`);let i={from:$(n.from,`swipe from`),to:$(n.to,`swipe to`),count:h(n,`count`,{min:1,max:200}),pauseMs:h(n,`pauseMs`,{min:0,max:u}),pattern:r};return Xt(i),i}function Xt(e){let n=e.count??1,r=e.pauseMs??0,i=n*100+Math.max(0,n-1)*r;if(!(i<=6e4))throw new t(`INVALID_ARGS`,`Swipe series must fit within ${f}ms.`,{count:n,pauseMs:r,gestureDurationMs:100,scheduledDurationMs:i,hint:`Reduce --count or --pause-ms.`})}function $(e,n){if(!e||typeof e!=`object`||Array.isArray(e))throw new t(`INVALID_ARGS`,`${n} must be a point`);let r=e;if(typeof r.x!=`number`||!Number.isFinite(r.x))throw new t(`INVALID_ARGS`,`${n} x must be finite`);if(typeof r.y!=`number`||!Number.isFinite(r.y))throw new t(`INVALID_ARGS`,`${n} y must be finite`);return{x:r.x,y:r.y}}function Zt(e){return[String(e.from.x),String(e.from.y),String(e.to.x),String(e.to.y)]}async function Qt(e,t,n,r,i,a){let o;for(let s=0;s<r;s+=1){let c=p($t(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 oe(i)}if(!o)throw Error(`Swipe orchestration did not execute a gesture.`);return o}function $t(e,t,n){return t===`ping-pong`&&n%2==1?{...e,from:e.to,to:e.from}:e}function en(e,t){return e.kind!==`pan`||e.pointerCount===void 0?t:{...t,pointerCount:e.pointerCount}}async function tn(e){let t=await ft({...e,captureSnapshotForSession:I,refSnapshotFlagGuardResponse:ke});if(t)return t;switch(e.req.command){case x.gesture:return await Rt({...e,captureSnapshotForSession:I});case x.swipe:return await Ht({...e,captureSnapshotForSession:I});case x.type:return await nn({...e,captureSnapshotForSession:I});case`get`:return await Te(e);case`is`:return await De(e);default:return null}}async function nn(e){let{sessionName:t,sessionStore:n}=e,r=n.get(t);return r?E(x.type,r.device)||await rn(r)||await an(e,r):k()}async function rn(e){return e.device.platform===`android`&&e.screenRecording&&(await ue({session:e})).status===`failed`?O(`COMMAND_FAILED`,`Android system dialog blocked the recording session`):null}async function an(t,n){let{req:r,sessionName:i,sessionStore:a}=t,o=(r.positionals??[]).join(` `),s=F(t),c=Date.now();try{let e=await A({session:n,command:r.command,phase:`before-command`}),t=await s.interactions.typeText(o,{session:i,requestId:r.meta?.requestId,delayMs:r.flags?.delayMs});await A({session:n,command:r.command,phase:`after-command`});let l=Date.now(),u={...t.backendResult??{},text:t.text,delayMs:t.delayMs,...C(t.message??`Typed ${Array.from(t.text).length} chars`)};return e.status===`recovered`&&(u.warning=e.warning),L({session:n,sessionStore:a,command:r.command,positionals:r.positionals??[],flags:r.flags,result:u,responseData:u,actionStartedAt:c,actionFinishedAt:l})}catch(t){return{ok:!1,error:e(t)}}}export{tn as handleInteractionCommands};
|
package/dist/src/interactor.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{_ as e}from"./sdk-contracts.js";import{B as t,E as n,F as r,M as i,at as a,k as o,rt as s}from"./version.js";import{
|
|
1
|
+
import{_ as e}from"./sdk-contracts.js";import{B as t,E as n,F as r,M as i,at as a,k as o,rt as s}from"./version.js";import{Y as c}from"./sdk-batch-runner.js";import{c as l,l as u,m as d}from"./sdk-device.js";import{V as f}from"./prepare-kind.js";import{t as p}from"./device.js";import{I as m}from"./sdk-android-adb.js";import{t as h}from"./method-scope.js";import{o as g}from"./helper.js";import{ct as _,ut as v}from"./internal/daemon.js";import{a as y,c as b,i as x,l as S,n as C,o as w,r as T,s as E}from"./apps.js";import{n as D,t as O}from"./runner-sequence.js";function k(e,t,n,r={includeDuration:!0}){let i=j(e.referenceWidth),o=j(e.referenceHeight);if(i===void 0||o===void 0)return M(e,{amount:n?.amount});let s=a({direction:t,amount:n?.amount,pixels:n?.pixels,referenceWidth:i,referenceHeight:o});return M(e,{amount:n?.amount,pixels:s.pixels,durationMs:r?.includeDuration?n?.durationMs:void 0,preferProvidedPixels:!0})}function A(e,t={includeDuration:!0}){return{...e?.amount===void 0?{}:{amount:e.amount},...e?.pixels===void 0?{}:{pixels:e.pixels},...t?.includeDuration&&e?.durationMs!==void 0?{durationMs:e.durationMs}:{}}}function j(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function M(e,t){let{x1:n,y1:r,x2:i,y2:a}=P(e),o=j(e.referenceWidth),s=j(e.referenceHeight),c=N(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);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},...t?.amount===void 0?{}:{amount:t.amount},...c===void 0?{}:{pixels:c},...t?.durationMs===void 0?{}:{durationMs:t.durationMs}}}function N(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 P(e){let t=j(e.x),n=j(e.y),r=j(e.x2),i=j(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 F(e,t,n,r,i,a){return k(await e(t,{command:`desktopScroll`,direction:i,...A(a,{includeDuration:!0}),appBundleId:n.appBundleId},r),i,a,{includeDuration:!0})}function I(e,t,n){return{command:`remotePress`,remoteButton:e,...n===void 0?{}:{durationMs:n},...t===void 0?{}:{appBundleId:t}}}function L(e){return e===`system`?`backSystem`:`backInApp`}function ee(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,W(e,t,r,i),n),tapElementSelector:async r=>await _(e,{command:`tap`,selectorKey:r.key,selectorValue:r.value,allowNonHittableCoordinateFallback:r.allowNonHittableCoordinateFallback,...r.expectedPoint?{x:r.expectedPoint.x,y:r.expectedPoint.y}:{},...G(e)?{synthesized:!0}:{},appBundleId:t.appBundleId},n),doubleTap:async(r,i)=>{let a=await _(e,O([{kind:`doubleTap`,x:r,y:i}],t.appBundleId),n);return D(a),a},longPress:async(r,i,a)=>await _(e,{command:`longPress`,x:r,y:i,durationMs:a,appBundleId:t.appBundleId},n),focus:async(r,i)=>await _(e,W(e,t,r,i),n),type:async(r,i)=>R(await _(e,{command:`type`,text:r,delayMs:i,textEntryMode:r===`
|
|
2
2
|
`?void 0:`append`,appBundleId:t.appBundleId},n)),fillElementSelector:async(r,i,a)=>await _(e,{command:`type`,selectorKey:r.key,selectorValue:r.value,allowNonHittableCoordinateFallback:r.allowNonHittableCoordinateFallback,text:i,delayMs:a,textEntryMode:`replace`,appBundleId:t.appBundleId},n),fill:async(r,i,a,o,s)=>await _(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 K(_,e,t,n,r,i),performGesture:async r=>await H(e,t,n,r),gestureViewport:async()=>B(await _(e,{command:`gestureViewport`,appBundleId:t.appBundleId},n))}}}function R(e){let t=e.textEntryRoute;return z(t)?{textEntryRoute:t}:{}}function z(e){return typeof e==`string`&&r.includes(e)}function B(t){let n=V(t.x),r=V(t.y),i=V(t.x2),a=V(t.y2);if(n===void 0||r===void 0||i===void 0||a===void 0||i<=0||a<=0)throw new e(`COMMAND_FAILED`,`Apple runner returned an invalid gesture viewport`);return{x:n,y:r,width:i,height:a}}function V(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}async function H(e,n,r,i){if(i.topology===`two`&&c(e,i.intent),i.topology===`single`&&u(e)){let{start:a,end:o}=t(i);return await _(e,{command:`drag`,x:a.x,y:a.y,x2:o.x,y2:o.y,durationMs:i.durationMs,appBundleId:n.appBundleId},r)}if(i.topology===`single`&&d(e)){let{start:a,end:o}=t(i);return await _(e,{command:`swipe`,direction:U(a,o),appBundleId:n.appBundleId},r)}return await _(e,{command:`gesture`,gesturePlan:i,appBundleId:n.appBundleId},r)}function U(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 W(e,t,n,r){return{command:`tap`,x:n,y:r,...G(e)?{synthesized:!0}:{},appBundleId:t.appBundleId}}function G(e){return l(e)&&!d(e)}async function K(e,t,n,r,a,c){return i(c?.durationMs,{invalidMessage:`scroll durationMs must be a non-negative integer at most ${o}`}),d(t)?M(await e(t,I(a,n.appBundleId,c?.durationMs),r),{amount:c?.amount,durationMs:c?.durationMs}):(s(c??{}),u(t)?await F(e,t,n,r,a,c):k(await e(t,{command:`scroll`,direction:a,...A(c),appBundleId:n.appBundleId},r),a,c))}function q(t,r,i){if(t.appleOs===`watchos`)throw new e(`UNSUPPORTED_PLATFORM`,`watchOS is not supported: XCUITest cannot drive watchOS UI, so this device has no runner backend.`);let{overrides:a,runnerOpts:o}=ee(t,r),s={open:(e,n)=>w(t,e,{appBundleId:n?.appBundleId,launchConsole:n?.launchConsole,launchArgs:n?.launchArgs,terminateRunningApp:n?.terminateRunningApp,url:n?.url,runnerOptions:o}),openDevice:()=>E(t),close:e=>y(t,e,o),screenshot:(e,n)=>Q(t,e,n,o),snapshot:async n=>{let r=te(await m(`snapshot_capture`,async()=>await _(t,{command:`snapshot`,appBundleId:n?.appBundleId,interactiveOnly:n?.interactiveOnly,preferredBackend:n?.preferredBackend,customActions:n?.customActions,depth:n?.depth,scope:n?.scope,raw:n?.raw},J(o,n?.signal)),{backend:`xctest`})),i=r.nodes??[];if(i.length===0&&t.kind===`simulator`)throw new e(`COMMAND_FAILED`,`XCTest snapshot returned 0 nodes on iOS simulator.`);return{nodes:i,truncated:r.truncated??!1,backend:`xctest`,...r.quality?{quality:r.quality}:{},...!r.quality&&r.message?{warnings:[r.message]}:{}}},back:async e=>{if(d(t)){await _(t,I(`menu`,r.appBundleId),o);return}await _(t,{command:L(e),appBundleId:r.appBundleId},o)},home:async()=>{if(d(t)){await _(t,I(`home`,r.appBundleId),o);return}await _(t,{command:`home`,appBundleId:r.appBundleId},o)},setOrientation:async n=>{let i=Y(await _(t,{command:`rotate`,orientation:n,appBundleId:r.appBundleId},o));if(i!==n)throw new e(`COMMAND_FAILED`,`iOS runner observed ${i} after requesting ${n}`,{requestedOrientation:n,observedOrientation:i});return{orientation:i}},appSwitcher:async()=>{await _(t,{command:`appSwitcher`,appBundleId:r.appBundleId},o)},tvRemote:async(e,i)=>{await _(t,I(n(e),r.appBundleId,i),o)},readClipboard:()=>T(t),writeClipboard:e=>x(t,e),setSetting:(e,n,r,i)=>C(t,e,n,r,i),...a};return i?X(t,r,s,i):s}function J(e,t){return t?{...e,signal:e.signal?AbortSignal.any([e.signal,t]):t}:e}function Y(t){let n=t.orientation;if(typeof n==`string`&&p.includes(n))return n;throw new e(`COMMAND_FAILED`,`iOS runner returned an invalid orientation result`,{orientation:n})}function X(e,t,n,r){return h({...n,open:async()=>Z(`open`),openDevice:async()=>Z(`openDevice`),close:async()=>Z(`close`),screenshot:async()=>Z(`screenshot`),readClipboard:async()=>Z(`readClipboard`),writeClipboard:async()=>Z(`writeClipboard`),setSetting:async()=>Z(`setSetting`)},n=>v(r,{deviceId:e.id,requestId:t.requestId},n))}function Z(t){throw new e(`UNSUPPORTED_OPERATION`,`${t} uses local Apple tooling (simctl/devicectl), which an injected runner transport cannot reach; the provider session must supply its own ${t} implementation.`)}async function Q(e,t,n={},r){if($(e,n.surface)){await g(t,{surface:n.surface,fullscreen:n.fullscreen});return}if(n.captureBackend===`runner`){await b(e,t,n.appBundleId,n.fullscreen,r);return}await S(e,t,{appBundleId:n.appBundleId,pixelDensity:n.pixelDensity,fullscreen:n.fullscreen,runnerOptions:r,normalizeStatusBar:n.normalizeStatusBar,skipIosSimulatorBootCheck:n.skipIosSimulatorBootCheck})}function $(e,t){return u(e)&&t!==void 0&&t!==`app`}function te(e){return{nodes:Array.isArray(e.nodes)?e.nodes:void 0,truncated:typeof e.truncated==`boolean`?e.truncated:void 0,quality:f(e.snapshotQuality),message:typeof e.message==`string`&&e.message.trim().length>0?e.message:void 0}}export{q as createAppleInteractor};
|
package/dist/src/interactor2.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e}from"./sdk-contracts.js";import{D as t}from"./version.js";import{s as n}from"./sdk-batch-runner.js";import{
|
|
1
|
+
import{_ as e}from"./sdk-contracts.js";import{D as t}from"./version.js";import{s as n}from"./sdk-batch-runner.js";import{h as r}from"./sdk-android-adb.js";import{t as i}from"./unsupported-interactor.js";import{t as a}from"./tool-provider3.js";const o={allowFailure:!0,timeoutMs:3e4};async function s(e,t){r(await a().launchApp(e.id,t,o),`Failed to launch Vega app ${t}`,{appName:t,deviceId:e.id})}async function c(e){r(await a().checkConnected(e.id,o),`Vega device is not connected`,{deviceId:e.id})}async function l(e,t){r(await a().terminateApp(e.id,t,o),`Failed to terminate Vega app ${t}`,{appName:t,deviceId:e.id})}async function u(e,n,i){let o=t(n);r(await a().pressRemote(e.id,o,i,{allowFailure:!0,timeoutMs:1e4+(i??0)}),`Failed to press Vega TV remote ${n}`,{button:n,deviceId:e.id})}const d=[{matches:(e,t)=>n(e)||!!t?.url,message:`Vega open does not support URLs or deep links.`,hint:`Use open <component-id> with an installed Vega app component ID.`},{matches:(e,t)=>!!t?.activity,message:`Vega open does not support Android activity selection.`,hint:`Remove --activity and use the Vega component ID as the open target.`},{matches:(e,t)=>!!t?.launchConsole,message:`Vega open does not support launch-console output.`,hint:`Remove --launch-console and open the Vega component ID directly.`},{matches:(e,t)=>!!t?.terminateRunningApp,message:`Vega open does not support terminating the running app before launch.`,hint:`Close the Vega component explicitly before opening it again.`},{matches:(e,t)=>!!t?.launchArgs?.length,message:`Vega open does not support launch arguments.`,hint:`Remove --launch-arg values and open the Vega component ID directly.`}];function f(e,t){return{...i(`Vega OS`),open:async(t,n)=>{p(t,n),await s(e,t)},openDevice:()=>c(e),close:t=>l(e,t),back:()=>u(e,`back`),home:()=>u(e,`home`),tvRemote:(t,n)=>u(e,t,n)}}function p(t,n){let r=d.find(({matches:e})=>e(t,n));if(r)throw new e(`UNSUPPORTED_OPERATION`,r.message,{hint:r.hint})}export{f as createVegaInteractor};
|
package/dist/src/internal/bin.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=new Map([{alias:`long-press`,command:`longpress`},{alias:`metrics`,command:`perf`},{alias:`tap`,command:`press`},{alias:`launch`,command:`open`},{alias:`relaunch`,command:`open`,impliedFlags:[`relaunch`]}].map(e=>[e.alias,e]));function t(t){return e.get(t.toLowerCase())?.command??t}function n(t){return e.get(t.toLowerCase())}const r=process.argv.slice(2);i(r)||(r[0]===`mcp`&&!r.includes(`--help`)&&!r.includes(`-h`)?import(`../server.js`).then(({runAgentDeviceMcpServer:e})=>e()).catch(g):h(r));function i(e){return a(e)||o(e)||s(e)}function a(e){return e.length!==1||!m(e[0])?!1:(process.stdout.write(`0.20.
|
|
1
|
+
const e=new Map([{alias:`long-press`,command:`longpress`},{alias:`metrics`,command:`perf`},{alias:`tap`,command:`press`},{alias:`launch`,command:`open`},{alias:`relaunch`,command:`open`,impliedFlags:[`relaunch`]}].map(e=>[e.alias,e]));function t(t){return e.get(t.toLowerCase())?.command??t}function n(t){return e.get(t.toLowerCase())}const r=process.argv.slice(2);i(r)||(r[0]===`mcp`&&!r.includes(`--help`)&&!r.includes(`-h`)?import(`../server.js`).then(({runAgentDeviceMcpServer:e})=>e()).catch(g):h(r));function i(e){return a(e)||o(e)||s(e)}function a(e){return e.length!==1||!m(e[0])?!1:(process.stdout.write(`0.20.8
|
|
2
2
|
`),!0)}function o(e){return e.length===0?(import(`../cli-help.js`).then(async({buildUsageText:e})=>{process.stdout.write(`${e()}\n`);let{exitAfterFlush:t}=await import(`../process-exit.js`);await t(1)}).catch(g),!0):!1}function s(e){let n=c(e);return n===void 0?!1:(import(`../cli-help.js`).then(({buildCommandUsageText:r,buildUsageText:i})=>{if(n===null){process.stdout.write(`${i()}\n`);return}let a=r(t(n));if(a){process.stdout.write(a);return}h(e)}).catch(g),!0)}function c(e){switch(e.length){case 1:return l(e[0]);case 2:return u(e[0],e[1]);default:return}}function l(e){return e===`help`||p(e)?null:void 0}function u(e,t){return f(e)?t:d(e,t)}function d(e,t){return p(t)?e:void 0}function f(e){return e===`help`}function p(e){return e===`--help`||e===`-h`}function m(e){return e===`--version`||e===`-V`}function h(e){import(`../process-entry.js`).then(({runCliProcess:t})=>t(e)).catch(g)}function g(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),import(`../process-exit.js`).then(({exitAfterFlush:e})=>e(1)).catch(()=>process.exit(1))}export{t as n,n as t};
|