agent-device 0.20.2 → 0.20.3

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.
Files changed (35) hide show
  1. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.20.2.apk → agent-device-android-ime-helper-0.20.3.apk} +0 -0
  2. package/android/ime-helper/dist/agent-device-android-ime-helper-0.20.3.apk.sha256 +1 -0
  3. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.20.2.manifest.json → agent-device-android-ime-helper-0.20.3.manifest.json} +4 -4
  4. package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.20.2.apk → agent-device-android-snapshot-helper-0.20.3.apk} +0 -0
  5. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.20.3.apk.sha256 +1 -0
  6. package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.20.2.manifest.json → agent-device-android-snapshot-helper-0.20.3.manifest.json} +6 -6
  7. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Interaction.swift +0 -176
  8. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Keyboard.swift +184 -0
  9. package/dist/src/android-adb.d.ts +3 -26
  10. package/dist/src/android-adb.js +1 -1
  11. package/dist/src/app-helpers.js +1 -0
  12. package/dist/src/apps.js +5 -5
  13. package/dist/src/context.js +1 -1
  14. package/dist/src/device-input-state.d.ts +26 -0
  15. package/dist/src/find.js +1 -1
  16. package/dist/src/index.d.ts +1 -1
  17. package/dist/src/interaction-snapshot.js +1 -1
  18. package/dist/src/interaction.js +1 -1
  19. package/dist/src/internal/bin.js +1 -1
  20. package/dist/src/internal/daemon.js +14 -14
  21. package/dist/src/lease.js +1 -1
  22. package/dist/src/limrun.d.ts +78 -2
  23. package/dist/src/logcat.js +1 -1
  24. package/dist/src/recording-export-quality.js +2 -3
  25. package/dist/src/runtime2.js +1 -1
  26. package/dist/src/sdk-android-adb.d.ts +1 -1
  27. package/dist/src/selector-runtime.js +1 -1
  28. package/dist/src/session-target-evidence.js +1 -1
  29. package/dist/src/session.js +8 -8
  30. package/dist/src/snapshot2.js +1 -1
  31. package/dist/src/tv-remote.d.ts +1 -1
  32. package/package.json +14 -15
  33. package/server.json +2 -2
  34. package/android/ime-helper/dist/agent-device-android-ime-helper-0.20.2.apk.sha256 +0 -1
  35. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.20.2.apk.sha256 +0 -1
@@ -1 +1 @@
1
- import{S as e,_ as t,h as n,l as r,m as i,s as a,v as o}from"./sdk-contracts.js";import{j as s}from"./sdk-android-adb.js";import{H as c,R as l,W as u,et as d}from"./sdk-batch-runner.js";import{o as f}from"./recording-export-quality.js";import{q as p}from"./snapshot-diagnostics.js";import{c as m,h as ee,o as te,s as h}from"./sdk-device.js";import{C as ne,E as re,F as ie,S as ae,b as oe,it as se,j as ce,rt as le,x as ue}from"./sdk-selectors.js";import{_ as de,o as fe}from"./gesture-plan-types.js";import{u as pe}from"./android-input-method-overlays.js";import{i as me,n as he,t as ge}from"./runtime.js";import{r as _e}from"./app-lifecycle.js";import{C as g,c as ve,g as _,l as v,n as ye,s as y,t as be}from"./context.js";import{C as xe}from"./physical-device-control.js";import{a as b,l as Se}from"./runner-client.js";import{At as x,Ot as Ce,Rt as S,g as C,jt as w,kt as we,qt as T,u as E}from"./internal/daemon.js";import{a as Te}from"./apps.js";import{i as Ee}from"./session-target-evidence.js";function D(e,t){let n=me(t);if(!n)return e;if(e.ok){let t=O(e.data?.warning,n);return{...e,data:{...e.data,warning:t}}}let r=e.error.details??{};return{...e,error:{...e.error,details:{...r,hint:O(r.hint,n)}}}}function O(e,t){return typeof e==`string`&&e.trim()!==``?`${e}\n${t}`:t}async function k(e,t,n){let r=e.get(t),i=r?.device??await _(n??{});return r||await C(i),{session:r,device:i}}async function A(e,t,n){let r=!e&&h(t);try{return await n()}finally{r&&(await Se(t.id),await De(t))}}async function De(e){let t=xe();await Te(e,t).catch(n=>{s({level:`debug`,phase:`ios_sessionless_runner_host_close_failed`,data:{deviceId:e.id,bundleId:t,error:n instanceof Error?n.message:String(n)}})})}function Oe(e,t,n,r){t&&e.recordAction(t,{command:n.command,positionals:n.positionals??[],flags:n.flags??{},result:r})}function ke(e){let{session:t,sessionName:n,device:r,snapshot:i,appBundleId:a}=e;return t?{...t,snapshot:i,lastComparisonSafeSnapshot:i?.comparisonSafe===!0?i:t.lastComparisonSafeSnapshot}:{name:n,device:r,createdAt:Date.now(),appBundleId:a,snapshot:i,...i?.comparisonSafe===!0?{lastComparisonSafeSnapshot:i}:{},actions:[]}}const Ae=[[`snapshotDepth`,`--depth`],[`snapshotScope`,`--scope`],[`snapshotRaw`,`--raw`]];function j(e,t){let n=je(t);return n.length===0?null:y(`INVALID_ARGS`,`${e} @ref does not support ${n.join(`, `)}.`)}function je(e){if(!e)return[];let t=[];for(let[n,r]of Ae)e[n]!==void 0&&t.push(r);return t}function Me(e,t){if(!t||t.settle===!0)return null;let n=[];return t.settleQuietMs!==void 0&&n.push(`--settle-quiet`),n.length===0?null:y(`INVALID_ARGS`,`${e}: ${n.join(`, `)} require${n.length===1?`s`:``} --settle.`)}function Ne(e){if(e?.settle===!0)return{...e.settleQuietMs===void 0?{}:{quietMs:e.settleQuietMs},...e.timeoutMs===void 0?{}:{timeoutMs:e.timeoutMs}}}function M(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 N(e){let t=n(e);return t?{ok:!0,ref:t.base,generation:t.generation}:{ok:!1,response:y(`INVALID_ARGS`,`Invalid ref "${e}" — malformed generation suffix.`,{hint:a})}}function P(e,t){let n=M(e);if(n)return{ok:!0,target:{kind:`point`,x:n.x,y:n.y}};let r=e[0]??``;if(r.startsWith(`@`)){let t=N(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:y(`INVALID_ARGS`,`${t} requires @ref, selector expression, or x y coordinates`)}}function Pe(e){let t=M(e);if(t)return{ok:!0,target:{kind:`point`,x:t.x,y:t.y},...He(e[2])};let n=Ve(e),r=P(n.targetPositionals,`longpress`);return r.ok?{ok:!0,target:r.target,refGeneration:r.refGeneration,...n.duration}:r}function Fe(e){let t=e[0]??``;if(t.startsWith(`@`)){let n=N(t);if(!n.ok)return{ok:!1,response:n.response};let r=f(e).text;return r?{ok:!0,target:{kind:`ref`,ref:n.ref,fallbackLabel:Be(e)},refGeneration:n.generation,text:r}:{ok:!1,response:y(`INVALID_ARGS`,`fill requires text after ref`)}}let n=M(e);if(n){let t=e.slice(2).join(` `);return t?{ok:!0,target:{kind:`point`,x:n.x,y:n.y},text:t}:{ok:!1,response:y(`INVALID_ARGS`,`fill requires text after coordinates`)}}let r=Ie(e);return!r||r.kind!==`selector`?{ok:!1,response:y(`INVALID_ARGS`,`fill requires x y text, @ref text, or selector text`)}:r.text.trim()?{ok:!0,target:{kind:`selector`,selector:r.target.selector},text:r.text}:{ok:!1,response:y(`INVALID_ARGS`,`fill requires text after selector`)}}function Ie(e){try{return f(e)}catch{return null}}function Le(e){let t=`evidence`in e?e.evidence:void 0,n=e.settle;return e.kind===`ref`?{ref:ze(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 Re(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 ze(e){return e?.startsWith(`@`)?e.slice(1):e}function Be(e){return e.length>=3&&e[1]?.trim()||``}function Ve(e){let t=e.at(-1);return e.length>1&&Ue(t)?{targetPositionals:e.slice(0,-1),duration:{durationMs:Number(t)}}:{targetPositionals:e,duration:{}}}function He(e){return e===void 0?{}:{durationMs:Number(e)}}function Ue(e){return e===void 0||e.trim()===``?!1:Number.isFinite(Number(e))}async function We(e,n){let r=await F(e);if(r)throw new t(`COMMAND_FAILED`,`press ${n} left ${e.appBundleId} and foregrounded ${r.foregroundPackage}. The tap likely escaped the app.`,r)}async function F(e){if(e.device.platform!==`android`||!e.appBundleId)return null;let t=await _e(e.device),n=t.package?.trim();return!n||n===e.appBundleId||!Je(n)?null:{expectedPackage:e.appBundleId,foregroundPackage:n,activity:t.activity,hint:qe(n)}}function Ge(e){return e.foregroundPackage===`com.google.android.permissioncontroller`?`Android permission dialog is blocking ${e.expectedPackage}`:`${e.foregroundPackage} is foreground instead of ${e.expectedPackage}`}function Ke(e){return e.code===`COMMAND_FAILED`&&typeof e.details?.expectedPackage==`string`&&typeof e.details?.foregroundPackage==`string`}function qe(e){return e===`com.google.android.permissioncontroller`?`Dismiss or allow the permission prompt, then retry the smoke assertion.`:`Use screenshot as visual truth, then take a fresh snapshot -i before retrying.`}function Je(e){return e===`com.android.settings`||e===`com.android.systemui`||e===`com.google.android.permissioncontroller`||e.includes(`launcher`)}function Ye(e,t){if(t===`exists`)return{found:!0};if(t===`wait`)return{found:!0,waitedMs:e.waitedMs};let n=typeof e.ref==`string`?e.ref:void 0;return t===`get_attrs`?{ref:n,action:`get attrs`}:{ref:n,action:`get text`,text:typeof e.text==`string`?e.text:``}}function Xe(e){return e.kind===`found`?{found:!0,...typeof e.waitedMs==`number`?{waitedMs:e.waitedMs}:{}}:{ref:e.ref,...e.kind===`text`?{text:e.text}:{},node:fe(e.node)}}function I(e,t){let n=Array.isArray(e.selectorChain)?e.selectorChain:void 0,r=$e(e),i=r?.kind===`ref`?V(r.ref):void 0,a=r?.kind===`selector`?r.selector:void 0,o={...i?{ref:i}:{},...a?{selector:a}:{},...n?{selectorChain:n}:{}};if(t===`attrs`)return o;let s=typeof e.text==`string`?e.text:``;return{...o,text:s,refLabel:Qe(s)}}function L(e){let{target:t}=e;return{...t.kind===`ref`?{ref:V(t.ref)}:{},...t.kind===`selector`?{selector:t.selector}:{},...typeof e.text==`string`?{text:e.text}:{},node:fe(e.node)}}function R(e){let{node:t,preActionNodes:n,...r}=e;return r}function Ze(e){return{waitedMs:e.waitedMs,...typeof e.text==`string`?{text:e.text}:{},...typeof e.selector==`string`?{selector:e.selector}:{},...typeof e.captures==`number`?{captures:e.captures}:{},...typeof e.nodeCount==`number`?{nodeCount:e.nodeCount}:{},...typeof e.hint==`string`?{hint:e.hint}:{}}}function z(e){let{selectorChain:t,...n}=e;return n}function B(e,t,n,r,i,a){let o=e.get(t);if(!o)return;let s=o.recordSession&&i?Ee(i,{mode:a}):void 0;e.recordAction(o,{command:n.command,positionals:n.positionals??[],flags:n.flags??{},result:r,interactiveObservation:p(n),...s?{targetEvidence:s}:{}})}function Qe(e){let t=e.trim();if(!(!t||t.length>80||/[\r\n]/.test(t)))return t}function $e(e){let t=e.target;if(!t||typeof t!=`object`)return;let n=t;if(n.kind===`ref`&&typeof n.ref==`string`)return{kind:`ref`,ref:n.ref};if(n.kind===`selector`&&typeof n.selector==`string`)return{kind:`selector`,selector:n.selector}}function V(e){return e.startsWith(`@`)?e.slice(1):e}const et=[`application`,`window`,`tabbar`,`scrollbar`,`image`],tt=new Set([`tab bar`]);async function H(e,t){if(t.ok||!nt(t.error.message)||t.error.details?.captureStalled===!0)return t;let n=await rt(e).catch(()=>null);return n?y(t.error.code,`${t.error.message}. Current surface: ${n.summary}.`,{...t.error.details??{},currentSurface:n.details}):t}function nt(e){return/^wait timed out (?:for (?:selector|text): |waiting for a stable UI)/i.test(e)}async function rt(e){let t=[...(await S({device:e.device,session:e.session,flags:{...e.req.flags,snapshotInteractiveOnly:!0},logPath:e.logPath??``})).snapshot.nodes].sort(it),n=U(t,6,{includeIdentifiers:!0});if(n.length===0)return null;let r=U(t.filter(e=>!st(e)),4,{includeIdentifiers:!1}),i=U(t.filter(ct),4,{includeIdentifiers:!0});return{summary:(r.length>0?r:n.slice(0,4)).join(`, `),details:{labels:n,...i.length>0?{buttons:i}:{}}}}function U(e,t,n){let r=new Set,i=[];for(let a of e){let e=ot(a,n);if(!(!e||r.has(e))&&(r.add(e),i.push(e),i.length>=t))break}return i}function it(e,t){return W(e)-W(t)||at(e,t)}function W(e){let t=!!ot(e,{includeIdentifiers:!1});return(st(e)?2:0)+ +!t}function at(e,t){return e.rect&&t.rect?e.rect.y-t.rect.y||e.rect.x-t.rect.x:e.rect?-1:t.rect?1:(e.depth??0)-(t.depth??0)||e.index-t.index}function ot(e,t){let n=(t.includeIdentifiers?[e.label,e.value,e.identifier]:[e.label,e.value]).map(e=>typeof e==`string`?e.trim():``).find(e=>e.length>0);return n?n.replace(/\s+/g,` `).slice(0,80):``}function st(e){let t=le(`${e.type??``} ${e.role??``} ${e.subrole??``}`),n=`${e.label??``} ${e.value??``}`.trim().toLowerCase();return et.some(e=>t.includes(e))||tt.has(n)||n.endsWith(`.fill`)}function ct(e){return le(`${e.type??``} ${e.role??``} ${e.subrole??``}`).includes(`button`)}function G(e){let{session:t,selectorExpression:n}=e;if(!t||!h(t.device)||g(t.device)||t.postGestureStabilization)return null;let r=d(n);if(!r||r.selectors.length!==1)return null;let i=r.selectors[0];if(!i||i.terms.length!==1)return null;let a=i.terms[0];return!a||typeof a.value!=`string`||!lt(a.key)?null:{key:a.key,value:a.value,raw:i.raw}}function lt(e){return e===`id`||e===`label`||e===`text`||e===`value`}function ut(e,t={}){let n=o(e);if(n.code===`ELEMENT_NOT_FOUND`)return t.delegateSemanticFailures===!0||t.allowElementNotFound===!0;if(n.code===`AMBIGUOUS_MATCH`)return t.delegateSemanticFailures===!0;if(n.code===`ELEMENT_OFFSCREEN`)return t.delegateSemanticFailures!==!1;if(n.code!==`COMMAND_FAILED`)return!1;let r=n.message.toLowerCase();return r.includes(`fetch failed`)||r.includes(`timed out`)||r.includes(`timeout`)||r.includes(`runner did not accept connection`)||r.includes(`invalid runner response`)}function dt(e,n={}){let r=n.plural===!0?`do`:`does`;return{resolveInput:async()=>{throw new t(`UNSUPPORTED_OPERATION`,`${e} ${r} not resolve input artifacts`)},reserveOutput:async()=>{throw new t(`UNSUPPORTED_OPERATION`,`${e} ${r} not reserve output artifacts`)},createTempFile:async()=>{throw new t(`UNSUPPORTED_OPERATION`,`${e} ${r} not create temporary files`)}}}function ft(e,t={}){return{artifacts:dt(e,t),policy:he()}}async function pt(e){let{device:t,node:n,flags:r,appBundleId:i,traceOutPath:a,surface:o,contextFromFlags:c}=e,l=ce(n),u=pe(n.rect);if(!u||h(t)&&l&&!se(n.type??``))return l;try{let e=await ye(t,`read`,[String(u.x),String(u.y)],void 0,{...c(r,i,a),surface:o}),d=e&&typeof e==`object`?e:void 0,f=typeof d?.text==`string`?d.text:``;return f.trim()?f:(s({level:`warn`,phase:`interaction_read_fallback`,data:{reason:`empty_backend_text`,nodeRef:n.ref,surface:o,platform:t.platform}}),l)}catch(e){return s({level:`warn`,phase:`interaction_read_fallback`,data:{reason:`backend_read_failed`,nodeRef:n.ref,surface:o,platform:t.platform,error:e instanceof Error?e.message:String(e)}}),l}}function K(e){let{session:t,sessionStore:n,sessionName:r}=e,i=0,a,o,s=t=>(e.consumedSnapshot&&(e.consumedSnapshot.state=t.snapshot),t);return{capture:async c=>{let l=Date.now(),u=Ct(c,e.req.flags?.out),d=_t({timestamp:l,lastSnapshotAt:i,lastSnapshotResult:a,lastSnapshotCacheKey:o,session:t,request:c,cacheKey:u});if(d)return s(d);let f=vt({session:t,timestamp:l,request:c});if(f)return i=f.createdAt,a={snapshot:f},o=u,s(a);let p=await mt({params:e,request:c}),m={snapshot:p};return Tt({session:t,sessionStore:n,sessionName:r,snapshot:p}),i=l,a=m,o=u,s(m)}}}async function mt(e){let{params:t,request:n}=e,r=await q(t,n,n.snapshotScope);return n.recovery?.legacyIosSparse&&Et(r)?await ht({runtimeParams:t,request:n,policy:n.recovery.legacyIosSparse}):n.recovery?.sparseVerdictQueryScope?.shouldScope&&de(r.snapshotQuality)?await gt({runtimeParams:t,request:n,policy:n.recovery.sparseVerdictQueryScope,snapshot:r}):r}async function ht(e){let{runtimeParams:t,request:n,policy:r}=e;try{return await q(t,n,void 0,!1)}catch(e){if(!r.shouldScope)throw e;return await q(t,n,r.query,!1)}}async function gt(e){let{runtimeParams:t,request:n,policy:r,snapshot:i}=e;try{return await q(t,n,r.query,!1)}catch{return i}}async function q(e,t,n,r=t.flags?.snapshotInteractiveOnly){return(await S({device:e.device,session:e.session,flags:{...t.flags,snapshotInteractiveOnly:r},outPath:t.outPath??e.req.flags?.out,logPath:e.logPath??``,snapshotScope:n,includeRects:t.includeRects})).snapshot}function _t(e){let{timestamp:t,lastSnapshotAt:n,lastSnapshotResult:r,lastSnapshotCacheKey:i,session:a,request:o,cacheKey:s}=e;if(o.cache?.forceFresh!==!0&&r&&i===s&&!(t-n>=750)&&!T(a)&&!xt(a,o))return r}function vt(e){let{session:t,timestamp:n,request:r}=e,i=t?.snapshot;if(i&&yt(t,r)&&bt(i,n)&&i.presentationKey===St(r))return i}function yt(e,t){return!(t.cache?.forceFresh===!0||t.cache?.useSessionSnapshot!==!0||T(e)||xt(e,t))}function bt(e,t){return t-e.createdAt<750}function xt(e,t){return t.cache?.bypassForPostGestureStabilization===!0&&!!e?.postGestureStabilization}function St(e){return r(i(wt(e)))}function Ct(e,t){return JSON.stringify({presentationKey:St(e),includeRects:e.includeRects===!0,outPath:e.outPath??t??null})}function wt(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function Tt(e){let{session:t,sessionStore:n,sessionName:r,snapshot:i}=e;!t||de(i.snapshotQuality)||(w(t,i),n.set(r,t))}function Et(e){return e.snapshotQuality||e.backend!==`xctest`||e.nodes.length!==1?!1:e.nodes[0]?.type===`Application`}function Dt(e){return ge({backend:Ot(e),...ft(`selector commands`,{plural:!0}),sessions:Ce({sessionName:e.sessionName,getSession:()=>e.session,recordOptions:{includeSnapshot:!0},setRecord:t=>{!e.session||!t.snapshot||(w(e.session,t.snapshot),e.sessionStore.set(e.sessionName,e.session))}})})}async function J(e,t){e.consumedSnapshot??={};let n=e.sessionStore.get(e.sessionName);if(!n&&t.requireSession)return{ok:!1,response:ve()};let r=n?.device??await _(e.req.flags??{});n||await C(r);let i=v(t.capability,r);return i?{ok:!1,response:i}:{ok:!0,runtime:Dt({...e,session:n,device:r})}}function Ot(e){let{req:t,session:n,device:r,logPath:i,sessionName:a,sessionStore:o}=e,s=K({device:r,session:n,sessionStore:o,sessionName:a,req:t,consumedSnapshot:e.consumedSnapshot,logPath:i});return{platform:ee(r),captureSnapshot:async(e,n)=>{let i={...t.flags,...kt(n)},a=n?.includeRects===!0,o=n?.scope??t.flags?.snapshotScope,c=t.command===`wait`||t.command===`find`||a&&r.platform===`web`;return await s.capture({flags:i,snapshotScope:o,includeRects:a,cache:{forceFresh:c,useSessionSnapshot:!0,bypassForPostGestureStabilization:!0}})},readText:async(a,o)=>({text:await pt({device:r,node:o,flags:t.flags,appBundleId:n?.appBundleId,traceOutPath:n?.trace?.outPath,surface:n?.surface,contextFromFlags:e.contextFromFlags??((e,t,n)=>be(i??``,e,t,n))})}),findText:async(t,n)=>({found:await At(e,n)})}}function kt(e){let{interactiveOnly:t,scope:n,depth:r,raw:i,includeHiddenContentHints:a}=e??{},o={};return t!==void 0&&(o.snapshotInteractiveOnly=t),n!==void 0&&(o.snapshotScope=n),r!==void 0&&(o.snapshotDepth=r),i!==void 0&&(o.snapshotRaw=i),a!==void 0&&(o.snapshotIncludeHiddenContentHints=a),o}async function At(e,t){let n=await jt(e,t);if(n!==null)return n;let r=await Mt(e,t);return r===null?await Ft(e,t):r}async function jt(e,t){return!m(e.device)||!e.session?.surface||e.session.surface===`app`?null:await Ft(e,t)}async function Mt(e,t){let n=Nt(e);return n?(await b(n.device,{command:`findText`,text:t,appBundleId:n.appBundleId},Pt(e,n)))?.found===!0:null}function Nt(e){return!te(e.device.platform)||g(e.device)||!e.session?.appBundleId?null:{device:e.device,appBundleId:e.session.appBundleId,traceLogPath:e.session.trace?.outPath}}function Pt(e,t){return E({req:e.req,logPath:e.logPath,traceLogPath:t.traceLogPath})}async function Ft(e,t){return!!ie((await It(e)).nodes,t)}async function It(e){let{snapshot:t}=await K({device:e.device,session:e.session,sessionStore:e.sessionStore,sessionName:e.sessionName,req:e.req,logPath:e.logPath,consumedSnapshot:e.consumedSnapshot}).capture({flags:{...e.req.flags,snapshotInteractiveOnly:!1,snapshotIncludeHiddenContentHints:!1},cache:{forceFresh:!0,bypassForPostGestureStabilization:!0}});return t}async function Lt(e){let{req:t}=e;if(t.command!==`find`)return null;let n=c(t.positionals??[],t.flags);if(!n.ok)return y(n.code,n.message);let r=n.parsed,i=r.action;if(!u(i))return null;let a=await J(e,{requireSession:!1,capability:`find`});return a.ok?D(await Q(async()=>{let n=await a.runtime.selectors.find({session:e.sessionName,requestId:t.meta?.requestId,locator:r.locator,query:r.query,action:i,timeoutMs:r.timeoutMs});B(e.sessionStore,e.sessionName,t,Ye(n,i));let o=Xe(n);if(typeof o.ref==`string`){let t=e.sessionStore.get(e.sessionName);if(t&&(we(t,[o.ref]),e.sessionStore.set(e.sessionName,t),t.snapshotGeneration!==void 0))return{...o,refsGeneration:t.snapshotGeneration}}return o}),Y(e)):a.response}function Y(e){return e.consumedSnapshot?.state??e.sessionStore.get(e.sessionName)?.snapshot}async function Rt(e){let{req:t}=e;if(t.command!==`get`)return null;let n=ue(t.positionals?.[0]);if(!n.ok)return y(n.code,n.message);let r=n.format,i=Zt(t);if(!i.ok)return i.response;if(i.target.kind===`ref`){let e=j(`get`,t.flags);if(e)return e}let a=t.internal?.replayTargetGuard;if(i.target.kind===`selector`&&!a){let t=await Ut(e,r,i.target.selector);if(t)return t}let o=await J(e,{requireSession:!0,capability:`get`});if(!o.ok)return o.response;let s=i.target.kind===`ref`?x({session:e.sessionStore.get(e.sessionName),ref:i.target.ref,mintedGeneration:i.refGeneration}):void 0;return D(await Q(async()=>{let n=await o.runtime.selectors.get({session:e.sessionName,requestId:t.meta?.requestId,property:r,target:i.target,expectedResolvedTarget:a});B(e.sessionStore,e.sessionName,t,I(n,r),{node:n.node,preActionNodes:n.preActionNodes});let c=L(n);return s?{...c,warning:s}:c}),Y(e))}async function zt(e){let{req:t}=e;if(t.command!==`is`)return null;let n=ae(t.positionals??[]);if(!n.ok)return y(n.code,n.message,n.hint?{hint:n.hint}:void 0);let{predicate:r,expectedText:i}=n,a={selectorExpression:n.selectorExpression},o=t.internal?.replayTargetGuard,s=e.sessionStore.get(e.sessionName)?.recordSession===!0;if(!o&&!s){let t=await Wt(e,r,a.selectorExpression,i);if(t)return t}let c=await J(e,{requireSession:!0,capability:`is`});return c.ok?D(await $(e,await Q(async()=>{let n=await c.runtime.selectors.is({session:e.sessionName,requestId:t.meta?.requestId,predicate:r,selector:a.selectorExpression,expectedText:i,expectedResolvedTarget:o}),s=Vt(n),l=R(n);return B(e.sessionStore,e.sessionName,t,l,s),z(l)}),`is ${r}`),Y(e)):c.response}async function Bt(e){let{req:t,sessionName:n,sessionStore:r}=e,i=l(t.positionals??[]);if(!i)return y(`INVALID_ARGS`,`wait requires a duration or text`);let{session:a,device:o}=await k(r,n,t.flags);if(i.kind!==`sleep`){let e=v(`wait`,o);if(e)return e}let s=t.internal?.replayLandmarkGuard;if(i.kind===`selector`&&!s&&!a?.recordSession){let t=await Gt({...e,session:a,device:o,selectorExpression:i.selectorExpression,timeoutMs:i.timeoutMs});if(t)return t}let c=i,u;if(i.kind===`ref`){let e=N(i.rawRef);if(!e.ok)return e.response;c={...i,rawRef:e.ref},u=x({session:a,ref:e.ref,mintedGeneration:e.generation})}e.consumedSnapshot??={};let d=async()=>{let i=Dt({...e,session:a,device:o}),l=await Q(async()=>{let e=await i.selectors.wait({session:n,requestId:t.meta?.requestId,target:Qt(c,a,s)}),o=Vt(e);B(r,n,t,R(e),o,`landmark`);let l=Ze(e);return u?{...l,warning:u}:l});return await $(e,await H({req:t,logPath:e.logPath,session:a,device:o},l),`wait`)};return i.kind===`sleep`?await d():D(await A(a,o,d),Y(e))}function Vt(e){let t=e.node,n=e.preActionNodes;if(!(!t||typeof t!=`object`||!Array.isArray(n)))return{node:t,preActionNodes:n}}function Ht(e,t,n){if(!e||e.recordSession)return null;let r=G({session:e,selectorExpression:n});return t===`text`&&r?.key!==`id`?null:r}async function Ut(e,t,n){let r=e.sessionStore.get(e.sessionName),i=Ht(r,t,n);if(!r||!i)return null;let a=await X(e,r,i);if(Z(a))return a.response;if(!a)return null;let o=Jt(t,i.raw,a);return o?(B(e.sessionStore,e.sessionName,e.req,I(o,t)),{ok:!0,data:L(o)}):null}async function Wt(e,t,n,r){if(t===`hidden`)return null;let i=await Kt(e,n);if(Z(i))return i.response;if(!i?.result.found||!i.result.node)return null;let a=t===`exists`?{predicate:t,pass:!0,selector:i.selector.raw,matches:1,selectorChain:[i.selector.raw]}:Yt(t,r,i.selector.raw,i.session,i.result.node);return a?(B(e.sessionStore,e.sessionName,e.req,a),{ok:!0,data:z(a)}):null}async function Gt(e){let t=G({session:e.session,selectorExpression:e.selectorExpression});if(!e.session||!t)return null;let n=Date.now(),r=await X(e,e.session,t);if(Z(r))return r.response;if(!r?.found)return null;let i={kind:`selector`,selector:t.raw,waitedMs:Date.now()-n,selectorChain:[t.raw]};B(e.sessionStore,e.sessionName,e.req,i);let a={ok:!0,data:z(i)};return await H({req:e.req,logPath:e.logPath,session:e.session,device:e.device},a)}async function Kt(e,t){let n=e.sessionStore.get(e.sessionName),r=G({session:n,selectorExpression:t});if(!n||!r)return null;let i=await X(e,n,r);return Z(i)?i:i?{session:n,selector:r,result:i}:null}async function qt(e,t,n){let r=await b(t.device,{command:`querySelector`,selectorKey:n.key,selectorValue:n.value,appBundleId:t.appBundleId},E({req:e.req,logPath:e.logPath,traceLogPath:t.trace?.outPath})),i=r.found===!0,a=Xt(r);return{found:i,...typeof r.text==`string`?{text:r.text}:{},...a?{node:a}:{}}}async function X(t,n,r){try{return await qt(t,n,r)}catch(t){return ut(t,{allowElementNotFound:!0})?null:{kind:`error`,response:{ok:!1,error:e(t)}}}}function Z(e){return e!==null&&`kind`in e&&e.kind===`error`}function Jt(e,t,n){if(!n.found||!n.node)return null;let r={target:{kind:`selector`,selector:t},node:n.node,selectorChain:[t]};return e===`attrs`?{kind:`attrs`,...r}:typeof n.text==`string`?{kind:`text`,...r,text:n.text}:null}function Yt(e,t,n,r,i){let a=re({predicate:e,node:i,nodes:[i],expectedText:t,platform:r.device.platform});return{predicate:e,pass:a.pass,selector:n,...e===`text`?{text:a.actualText}:{},selectorChain:[n]}}function Xt(e){let t=e.nodes;if(!Array.isArray(t))return;let n=t[0];if(!(!n||typeof n!=`object`))return n}function Zt(e){let t=e.positionals?.[1]??``;if(t.startsWith(`@`)){let n=N(t);return n.ok?{ok:!0,target:{kind:`ref`,ref:n.ref,fallbackLabel:e.positionals.length>2?e.positionals.slice(2).join(` `).trim():``},refGeneration:n.generation}:{ok:!1,response:n.response}}let n=oe(e.positionals?.slice(1)??[]);return n.ok?{ok:!0,target:{kind:`selector`,selector:`selector`in n?n.selector:``}}:{ok:!1,response:y(n.code,n.message)}}function Qt(e,n,r){if(e.kind===`sleep`)return{kind:`sleep`,durationMs:e.durationMs};if(e.kind===`selector`)return{kind:`selector`,selector:e.selectorExpression,timeoutMs:e.timeoutMs,...r?{recordedLandmark:r}:{}};if(e.kind===`ref`){if(!n?.snapshot)throw new t(`INVALID_ARGS`,`Ref wait requires an existing snapshot in session.`);return{kind:`ref`,ref:e.rawRef,timeoutMs:e.timeoutMs}}if(e.kind===`stable`)return{kind:`stable`,quietMs:e.quietMs,timeoutMs:e.timeoutMs};let i=ne(e.text);if(!i.ok)throw new t(i.code,i.message);return{kind:`text`,text:i.text,timeoutMs:e.timeoutMs}}async function Q(e){try{return{ok:!0,data:await e()}}catch(e){let t=o(e);return y(t.code,t.message,t.details)}}async function $(e,t,n){if(t.ok)return t;let r=e.sessionStore.get(e.sessionName);if(!r)return t;let i;try{i=await F(r)}catch{return t}return i?y(t.error.code,`${n} failed because ${Ge(i)}.`,{...t.error.details??{},...i,blockedBy:`android_foreground_surface`,originalMessage:t.error.message}):t}export{A as C,k as S,Ne as _,K as a,ke as b,G as c,Re as d,Le as f,ze as g,P as h,Bt as i,We as l,Pe as m,Rt as n,ft as o,Fe as p,zt as r,ut as s,Lt as t,Ke as u,j as v,D as w,Oe as x,Me as y};
1
+ import{S as e,_ as t,h as n,l as r,m as i,s as a,v as o}from"./sdk-contracts.js";import{j as s}from"./sdk-android-adb.js";import{H as c,R as l,W as u,et as d}from"./sdk-batch-runner.js";import{o as f}from"./recording-export-quality.js";import{q as p}from"./snapshot-diagnostics.js";import{c as m,h as ee,o as te,s as h}from"./sdk-device.js";import{C as ne,E as re,F as ie,S as ae,b as oe,it as se,j as ce,rt as le,x as ue}from"./sdk-selectors.js";import{_ as de,o as fe}from"./gesture-plan-types.js";import{u as pe}from"./android-input-method-overlays.js";import{i as me,n as he,t as ge}from"./runtime.js";import{r as _e}from"./app-lifecycle.js";import{C as g,c as ve,g as _,l as v,n as ye,s as y,t as be}from"./context.js";import{C as xe}from"./physical-device-control.js";import{a as b,l as Se}from"./runner-client.js";import{At as x,Jt as S,Ot as Ce,g as C,jt as w,kt as we,u as T,zt as E}from"./internal/daemon.js";import{a as Te}from"./apps.js";import{i as Ee}from"./session-target-evidence.js";function D(e,t){let n=me(t);if(!n)return e;if(e.ok){let t=O(e.data?.warning,n);return{...e,data:{...e.data,warning:t}}}let r=e.error.details??{};return{...e,error:{...e.error,details:{...r,hint:O(r.hint,n)}}}}function O(e,t){return typeof e==`string`&&e.trim()!==``?`${e}\n${t}`:t}async function k(e,t,n){let r=e.get(t),i=r?.device??await _(n??{});return r||await C(i),{session:r,device:i}}async function A(e,t,n){let r=!e&&h(t);try{return await n()}finally{r&&(await Se(t.id),await De(t))}}async function De(e){let t=xe();await Te(e,t).catch(n=>{s({level:`debug`,phase:`ios_sessionless_runner_host_close_failed`,data:{deviceId:e.id,bundleId:t,error:n instanceof Error?n.message:String(n)}})})}function Oe(e,t,n,r){t&&e.recordAction(t,{command:n.command,positionals:n.positionals??[],flags:n.flags??{},result:r})}function ke(e){let{session:t,sessionName:n,device:r,snapshot:i,appBundleId:a}=e;return t?{...t,snapshot:i,lastComparisonSafeSnapshot:i?.comparisonSafe===!0?i:t.lastComparisonSafeSnapshot}:{name:n,device:r,createdAt:Date.now(),appBundleId:a,snapshot:i,...i?.comparisonSafe===!0?{lastComparisonSafeSnapshot:i}:{},actions:[]}}const Ae=[[`snapshotDepth`,`--depth`],[`snapshotScope`,`--scope`],[`snapshotRaw`,`--raw`]];function j(e,t){let n=je(t);return n.length===0?null:y(`INVALID_ARGS`,`${e} @ref does not support ${n.join(`, `)}.`)}function je(e){if(!e)return[];let t=[];for(let[n,r]of Ae)e[n]!==void 0&&t.push(r);return t}function Me(e,t){if(!t||t.settle===!0)return null;let n=[];return t.settleQuietMs!==void 0&&n.push(`--settle-quiet`),n.length===0?null:y(`INVALID_ARGS`,`${e}: ${n.join(`, `)} require${n.length===1?`s`:``} --settle.`)}function Ne(e){if(e?.settle===!0)return{...e.settleQuietMs===void 0?{}:{quietMs:e.settleQuietMs},...e.timeoutMs===void 0?{}:{timeoutMs:e.timeoutMs}}}function M(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 N(e){let t=n(e);return t?{ok:!0,ref:t.base,generation:t.generation}:{ok:!1,response:y(`INVALID_ARGS`,`Invalid ref "${e}" — malformed generation suffix.`,{hint:a})}}function P(e,t){let n=M(e);if(n)return{ok:!0,target:{kind:`point`,x:n.x,y:n.y}};let r=e[0]??``;if(r.startsWith(`@`)){let t=N(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:y(`INVALID_ARGS`,`${t} requires @ref, selector expression, or x y coordinates`)}}function Pe(e){let t=M(e);if(t)return{ok:!0,target:{kind:`point`,x:t.x,y:t.y},...He(e[2])};let n=Ve(e),r=P(n.targetPositionals,`longpress`);return r.ok?{ok:!0,target:r.target,refGeneration:r.refGeneration,...n.duration}:r}function Fe(e){let t=e[0]??``;if(t.startsWith(`@`)){let n=N(t);if(!n.ok)return{ok:!1,response:n.response};let r=f(e).text;return r?{ok:!0,target:{kind:`ref`,ref:n.ref,fallbackLabel:Be(e)},refGeneration:n.generation,text:r}:{ok:!1,response:y(`INVALID_ARGS`,`fill requires text after ref`)}}let n=M(e);if(n){let t=e.slice(2).join(` `);return t?{ok:!0,target:{kind:`point`,x:n.x,y:n.y},text:t}:{ok:!1,response:y(`INVALID_ARGS`,`fill requires text after coordinates`)}}let r=Ie(e);return!r||r.kind!==`selector`?{ok:!1,response:y(`INVALID_ARGS`,`fill requires x y text, @ref text, or selector text`)}:r.text.trim()?{ok:!0,target:{kind:`selector`,selector:r.target.selector},text:r.text}:{ok:!1,response:y(`INVALID_ARGS`,`fill requires text after selector`)}}function Ie(e){try{return f(e)}catch{return null}}function Le(e){let t=`evidence`in e?e.evidence:void 0,n=e.settle;return e.kind===`ref`?{ref:ze(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 Re(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 ze(e){return e?.startsWith(`@`)?e.slice(1):e}function Be(e){return e.length>=3&&e[1]?.trim()||``}function Ve(e){let t=e.at(-1);return e.length>1&&Ue(t)?{targetPositionals:e.slice(0,-1),duration:{durationMs:Number(t)}}:{targetPositionals:e,duration:{}}}function He(e){return e===void 0?{}:{durationMs:Number(e)}}function Ue(e){return e===void 0||e.trim()===``?!1:Number.isFinite(Number(e))}async function We(e,n){let r=await F(e);if(r)throw new t(`COMMAND_FAILED`,`press ${n} left ${e.appBundleId} and foregrounded ${r.foregroundPackage}. The tap likely escaped the app.`,r)}async function F(e){if(e.device.platform!==`android`||!e.appBundleId)return null;let t=await _e(e.device),n=t.package?.trim();return!n||n===e.appBundleId||!Je(n)?null:{expectedPackage:e.appBundleId,foregroundPackage:n,activity:t.activity,hint:qe(n)}}function Ge(e){return e.foregroundPackage===`com.google.android.permissioncontroller`?`Android permission dialog is blocking ${e.expectedPackage}`:`${e.foregroundPackage} is foreground instead of ${e.expectedPackage}`}function Ke(e){return e.code===`COMMAND_FAILED`&&typeof e.details?.expectedPackage==`string`&&typeof e.details?.foregroundPackage==`string`}function qe(e){return e===`com.google.android.permissioncontroller`?`Dismiss or allow the permission prompt, then retry the smoke assertion.`:`Use screenshot as visual truth, then take a fresh snapshot -i before retrying.`}function Je(e){return e===`com.android.settings`||e===`com.android.systemui`||e===`com.google.android.permissioncontroller`||e.includes(`launcher`)}function Ye(e,t){if(t===`exists`)return{found:!0};if(t===`wait`)return{found:!0,waitedMs:e.waitedMs};let n=typeof e.ref==`string`?e.ref:void 0;return t===`get_attrs`?{ref:n,action:`get attrs`}:{ref:n,action:`get text`,text:typeof e.text==`string`?e.text:``}}function Xe(e){return e.kind===`found`?{found:!0,...typeof e.waitedMs==`number`?{waitedMs:e.waitedMs}:{}}:{ref:e.ref,...e.kind===`text`?{text:e.text}:{},node:fe(e.node)}}function I(e,t){let n=Array.isArray(e.selectorChain)?e.selectorChain:void 0,r=$e(e),i=r?.kind===`ref`?V(r.ref):void 0,a=r?.kind===`selector`?r.selector:void 0,o={...i?{ref:i}:{},...a?{selector:a}:{},...n?{selectorChain:n}:{}};if(t===`attrs`)return o;let s=typeof e.text==`string`?e.text:``;return{...o,text:s,refLabel:Qe(s)}}function L(e){let{target:t}=e;return{...t.kind===`ref`?{ref:V(t.ref)}:{},...t.kind===`selector`?{selector:t.selector}:{},...typeof e.text==`string`?{text:e.text}:{},node:fe(e.node)}}function R(e){let{node:t,preActionNodes:n,...r}=e;return r}function Ze(e){return{waitedMs:e.waitedMs,...typeof e.text==`string`?{text:e.text}:{},...typeof e.selector==`string`?{selector:e.selector}:{},...typeof e.captures==`number`?{captures:e.captures}:{},...typeof e.nodeCount==`number`?{nodeCount:e.nodeCount}:{},...typeof e.hint==`string`?{hint:e.hint}:{}}}function z(e){let{selectorChain:t,...n}=e;return n}function B(e,t,n,r,i,a){let o=e.get(t);if(!o)return;let s=o.recordSession&&i?Ee(i,{mode:a}):void 0;e.recordAction(o,{command:n.command,positionals:n.positionals??[],flags:n.flags??{},result:r,interactiveObservation:p(n),...s?{targetEvidence:s}:{}})}function Qe(e){let t=e.trim();if(!(!t||t.length>80||/[\r\n]/.test(t)))return t}function $e(e){let t=e.target;if(!t||typeof t!=`object`)return;let n=t;if(n.kind===`ref`&&typeof n.ref==`string`)return{kind:`ref`,ref:n.ref};if(n.kind===`selector`&&typeof n.selector==`string`)return{kind:`selector`,selector:n.selector}}function V(e){return e.startsWith(`@`)?e.slice(1):e}const et=[`application`,`window`,`tabbar`,`scrollbar`,`image`],tt=new Set([`tab bar`]);async function H(e,t){if(t.ok||!nt(t.error.message)||t.error.details?.captureStalled===!0)return t;let n=await rt(e).catch(()=>null);return n?y(t.error.code,`${t.error.message}. Current surface: ${n.summary}.`,{...t.error.details??{},currentSurface:n.details}):t}function nt(e){return/^wait timed out (?:for (?:selector|text): |waiting for a stable UI)/i.test(e)}async function rt(e){let t=[...(await E({device:e.device,session:e.session,flags:{...e.req.flags,snapshotInteractiveOnly:!0},logPath:e.logPath??``})).snapshot.nodes].sort(it),n=U(t,6,{includeIdentifiers:!0});if(n.length===0)return null;let r=U(t.filter(e=>!st(e)),4,{includeIdentifiers:!1}),i=U(t.filter(ct),4,{includeIdentifiers:!0});return{summary:(r.length>0?r:n.slice(0,4)).join(`, `),details:{labels:n,...i.length>0?{buttons:i}:{}}}}function U(e,t,n){let r=new Set,i=[];for(let a of e){let e=ot(a,n);if(!(!e||r.has(e))&&(r.add(e),i.push(e),i.length>=t))break}return i}function it(e,t){return W(e)-W(t)||at(e,t)}function W(e){let t=!!ot(e,{includeIdentifiers:!1});return(st(e)?2:0)+ +!t}function at(e,t){return e.rect&&t.rect?e.rect.y-t.rect.y||e.rect.x-t.rect.x:e.rect?-1:t.rect?1:(e.depth??0)-(t.depth??0)||e.index-t.index}function ot(e,t){let n=(t.includeIdentifiers?[e.label,e.value,e.identifier]:[e.label,e.value]).map(e=>typeof e==`string`?e.trim():``).find(e=>e.length>0);return n?n.replace(/\s+/g,` `).slice(0,80):``}function st(e){let t=le(`${e.type??``} ${e.role??``} ${e.subrole??``}`),n=`${e.label??``} ${e.value??``}`.trim().toLowerCase();return et.some(e=>t.includes(e))||tt.has(n)||n.endsWith(`.fill`)}function ct(e){return le(`${e.type??``} ${e.role??``} ${e.subrole??``}`).includes(`button`)}function G(e){let{session:t,selectorExpression:n}=e;if(!t||!h(t.device)||g(t.device)||t.postGestureStabilization)return null;let r=d(n);if(!r||r.selectors.length!==1)return null;let i=r.selectors[0];if(!i||i.terms.length!==1)return null;let a=i.terms[0];return!a||typeof a.value!=`string`||!lt(a.key)?null:{key:a.key,value:a.value,raw:i.raw}}function lt(e){return e===`id`||e===`label`||e===`text`||e===`value`}function ut(e,t={}){let n=o(e);if(n.code===`ELEMENT_NOT_FOUND`)return t.delegateSemanticFailures===!0||t.allowElementNotFound===!0;if(n.code===`AMBIGUOUS_MATCH`)return t.delegateSemanticFailures===!0;if(n.code===`ELEMENT_OFFSCREEN`)return t.delegateSemanticFailures!==!1;if(n.code!==`COMMAND_FAILED`)return!1;let r=n.message.toLowerCase();return r.includes(`fetch failed`)||r.includes(`timed out`)||r.includes(`timeout`)||r.includes(`runner did not accept connection`)||r.includes(`invalid runner response`)}function dt(e,n={}){let r=n.plural===!0?`do`:`does`;return{resolveInput:async()=>{throw new t(`UNSUPPORTED_OPERATION`,`${e} ${r} not resolve input artifacts`)},reserveOutput:async()=>{throw new t(`UNSUPPORTED_OPERATION`,`${e} ${r} not reserve output artifacts`)},createTempFile:async()=>{throw new t(`UNSUPPORTED_OPERATION`,`${e} ${r} not create temporary files`)}}}function ft(e,t={}){return{artifacts:dt(e,t),policy:he()}}async function pt(e){let{device:t,node:n,flags:r,appBundleId:i,traceOutPath:a,surface:o,contextFromFlags:c}=e,l=ce(n),u=pe(n.rect);if(!u||h(t)&&l&&!se(n.type??``))return l;try{let e=await ye(t,`read`,[String(u.x),String(u.y)],void 0,{...c(r,i,a),surface:o}),d=e&&typeof e==`object`?e:void 0,f=typeof d?.text==`string`?d.text:``;return f.trim()?f:(s({level:`warn`,phase:`interaction_read_fallback`,data:{reason:`empty_backend_text`,nodeRef:n.ref,surface:o,platform:t.platform}}),l)}catch(e){return s({level:`warn`,phase:`interaction_read_fallback`,data:{reason:`backend_read_failed`,nodeRef:n.ref,surface:o,platform:t.platform,error:e instanceof Error?e.message:String(e)}}),l}}function K(e){let{session:t,sessionStore:n,sessionName:r}=e,i=0,a,o,s=t=>(e.consumedSnapshot&&(e.consumedSnapshot.state=t.snapshot),t);return{capture:async c=>{let l=Date.now(),u=Ct(c,e.req.flags?.out),d=_t({timestamp:l,lastSnapshotAt:i,lastSnapshotResult:a,lastSnapshotCacheKey:o,session:t,request:c,cacheKey:u});if(d)return s(d);let f=vt({session:t,timestamp:l,request:c});if(f)return i=f.createdAt,a={snapshot:f},o=u,s(a);let p=await mt({params:e,request:c}),m={snapshot:p};return Tt({session:t,sessionStore:n,sessionName:r,snapshot:p}),i=l,a=m,o=u,s(m)}}}async function mt(e){let{params:t,request:n}=e,r=await q(t,n,n.snapshotScope);return n.recovery?.legacyIosSparse&&Et(r)?await ht({runtimeParams:t,request:n,policy:n.recovery.legacyIosSparse}):n.recovery?.sparseVerdictQueryScope?.shouldScope&&de(r.snapshotQuality)?await gt({runtimeParams:t,request:n,policy:n.recovery.sparseVerdictQueryScope,snapshot:r}):r}async function ht(e){let{runtimeParams:t,request:n,policy:r}=e;try{return await q(t,n,void 0,!1)}catch(e){if(!r.shouldScope)throw e;return await q(t,n,r.query,!1)}}async function gt(e){let{runtimeParams:t,request:n,policy:r,snapshot:i}=e;try{return await q(t,n,r.query,!1)}catch{return i}}async function q(e,t,n,r=t.flags?.snapshotInteractiveOnly){return(await E({device:e.device,session:e.session,flags:{...t.flags,snapshotInteractiveOnly:r},outPath:t.outPath??e.req.flags?.out,logPath:e.logPath??``,snapshotScope:n,includeRects:t.includeRects})).snapshot}function _t(e){let{timestamp:t,lastSnapshotAt:n,lastSnapshotResult:r,lastSnapshotCacheKey:i,session:a,request:o,cacheKey:s}=e;if(o.cache?.forceFresh!==!0&&r&&i===s&&!(t-n>=750)&&!S(a)&&!xt(a,o))return r}function vt(e){let{session:t,timestamp:n,request:r}=e,i=t?.snapshot;if(i&&yt(t,r)&&bt(i,n)&&i.presentationKey===St(r))return i}function yt(e,t){return!(t.cache?.forceFresh===!0||t.cache?.useSessionSnapshot!==!0||S(e)||xt(e,t))}function bt(e,t){return t-e.createdAt<750}function xt(e,t){return t.cache?.bypassForPostGestureStabilization===!0&&!!e?.postGestureStabilization}function St(e){return r(i(wt(e)))}function Ct(e,t){return JSON.stringify({presentationKey:St(e),includeRects:e.includeRects===!0,outPath:e.outPath??t??null})}function wt(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function Tt(e){let{session:t,sessionStore:n,sessionName:r,snapshot:i}=e;!t||de(i.snapshotQuality)||(w(t,i),n.set(r,t))}function Et(e){return e.snapshotQuality||e.backend!==`xctest`||e.nodes.length!==1?!1:e.nodes[0]?.type===`Application`}function Dt(e){return ge({backend:Ot(e),...ft(`selector commands`,{plural:!0}),sessions:Ce({sessionName:e.sessionName,getSession:()=>e.session,recordOptions:{includeSnapshot:!0},setRecord:t=>{!e.session||!t.snapshot||(w(e.session,t.snapshot),e.sessionStore.set(e.sessionName,e.session))}})})}async function J(e,t){e.consumedSnapshot??={};let n=e.sessionStore.get(e.sessionName);if(!n&&t.requireSession)return{ok:!1,response:ve()};let r=n?.device??await _(e.req.flags??{});n||await C(r);let i=v(t.capability,r);return i?{ok:!1,response:i}:{ok:!0,runtime:Dt({...e,session:n,device:r})}}function Ot(e){let{req:t,session:n,device:r,logPath:i,sessionName:a,sessionStore:o}=e,s=K({device:r,session:n,sessionStore:o,sessionName:a,req:t,consumedSnapshot:e.consumedSnapshot,logPath:i});return{platform:ee(r),captureSnapshot:async(e,n)=>{let i={...t.flags,...kt(n)},a=n?.includeRects===!0,o=n?.scope??t.flags?.snapshotScope,c=t.command===`wait`||t.command===`find`||a&&r.platform===`web`;return await s.capture({flags:i,snapshotScope:o,includeRects:a,cache:{forceFresh:c,useSessionSnapshot:!0,bypassForPostGestureStabilization:!0}})},readText:async(a,o)=>({text:await pt({device:r,node:o,flags:t.flags,appBundleId:n?.appBundleId,traceOutPath:n?.trace?.outPath,surface:n?.surface,contextFromFlags:e.contextFromFlags??((e,t,n)=>be(i??``,e,t,n))})}),findText:async(t,n)=>({found:await At(e,n)})}}function kt(e){let{interactiveOnly:t,scope:n,depth:r,raw:i,includeHiddenContentHints:a}=e??{},o={};return t!==void 0&&(o.snapshotInteractiveOnly=t),n!==void 0&&(o.snapshotScope=n),r!==void 0&&(o.snapshotDepth=r),i!==void 0&&(o.snapshotRaw=i),a!==void 0&&(o.snapshotIncludeHiddenContentHints=a),o}async function At(e,t){let n=await jt(e,t);return n===null?await Mt(e,t)===!0?!0:await Ft(e,t):n}async function jt(e,t){return!m(e.device)||!e.session?.surface||e.session.surface===`app`?null:await Ft(e,t)}async function Mt(e,t){let n=Nt(e);return n?(await b(n.device,{command:`findText`,text:t,appBundleId:n.appBundleId},Pt(e,n)))?.found===!0:null}function Nt(e){return!te(e.device.platform)||g(e.device)||!e.session?.appBundleId?null:{device:e.device,appBundleId:e.session.appBundleId,traceLogPath:e.session.trace?.outPath}}function Pt(e,t){return T({req:e.req,logPath:e.logPath,traceLogPath:t.traceLogPath})}async function Ft(e,t){return!!ie((await It(e)).nodes,t)}async function It(e){let{snapshot:t}=await K({device:e.device,session:e.session,sessionStore:e.sessionStore,sessionName:e.sessionName,req:e.req,logPath:e.logPath,consumedSnapshot:e.consumedSnapshot}).capture({flags:{...e.req.flags,snapshotInteractiveOnly:!1,snapshotIncludeHiddenContentHints:!1},cache:{forceFresh:!0,bypassForPostGestureStabilization:!0}});return t}async function Lt(e){let{req:t}=e;if(t.command!==`find`)return null;let n=c(t.positionals??[],t.flags);if(!n.ok)return y(n.code,n.message);let r=n.parsed,i=r.action;if(!u(i))return null;let a=await J(e,{requireSession:!1,capability:`find`});return a.ok?D(await Q(async()=>{let n=await a.runtime.selectors.find({session:e.sessionName,requestId:t.meta?.requestId,locator:r.locator,query:r.query,action:i,timeoutMs:r.timeoutMs});B(e.sessionStore,e.sessionName,t,Ye(n,i));let o=Xe(n);if(typeof o.ref==`string`){let t=e.sessionStore.get(e.sessionName);if(t&&(we(t,[o.ref]),e.sessionStore.set(e.sessionName,t),t.snapshotGeneration!==void 0))return{...o,refsGeneration:t.snapshotGeneration}}return o}),Y(e)):a.response}function Y(e){return e.consumedSnapshot?.state??e.sessionStore.get(e.sessionName)?.snapshot}async function Rt(e){let{req:t}=e;if(t.command!==`get`)return null;let n=ue(t.positionals?.[0]);if(!n.ok)return y(n.code,n.message);let r=n.format,i=Zt(t);if(!i.ok)return i.response;if(i.target.kind===`ref`){let e=j(`get`,t.flags);if(e)return e}let a=t.internal?.replayTargetGuard;if(i.target.kind===`selector`&&!a){let t=await Ut(e,r,i.target.selector);if(t)return t}let o=await J(e,{requireSession:!0,capability:`get`});if(!o.ok)return o.response;let s=i.target.kind===`ref`?x({session:e.sessionStore.get(e.sessionName),ref:i.target.ref,mintedGeneration:i.refGeneration}):void 0;return D(await Q(async()=>{let n=await o.runtime.selectors.get({session:e.sessionName,requestId:t.meta?.requestId,property:r,target:i.target,expectedResolvedTarget:a});B(e.sessionStore,e.sessionName,t,I(n,r),{node:n.node,preActionNodes:n.preActionNodes});let c=L(n);return s?{...c,warning:s}:c}),Y(e))}async function zt(e){let{req:t}=e;if(t.command!==`is`)return null;let n=ae(t.positionals??[]);if(!n.ok)return y(n.code,n.message,n.hint?{hint:n.hint}:void 0);let{predicate:r,expectedText:i}=n,a={selectorExpression:n.selectorExpression},o=t.internal?.replayTargetGuard,s=e.sessionStore.get(e.sessionName)?.recordSession===!0;if(!o&&!s){let t=await Wt(e,r,a.selectorExpression,i);if(t)return t}let c=await J(e,{requireSession:!0,capability:`is`});return c.ok?D(await $(e,await Q(async()=>{let n=await c.runtime.selectors.is({session:e.sessionName,requestId:t.meta?.requestId,predicate:r,selector:a.selectorExpression,expectedText:i,expectedResolvedTarget:o}),s=Vt(n),l=R(n);return B(e.sessionStore,e.sessionName,t,l,s),z(l)}),`is ${r}`),Y(e)):c.response}async function Bt(e){let{req:t,sessionName:n,sessionStore:r}=e,i=l(t.positionals??[]);if(!i)return y(`INVALID_ARGS`,`wait requires a duration or text`);let{session:a,device:o}=await k(r,n,t.flags);if(i.kind!==`sleep`){let e=v(`wait`,o);if(e)return e}let s=t.internal?.replayLandmarkGuard;if(i.kind===`selector`&&!s&&!a?.recordSession){let t=await Gt({...e,session:a,device:o,selectorExpression:i.selectorExpression,timeoutMs:i.timeoutMs});if(t)return t}let c=i,u;if(i.kind===`ref`){let e=N(i.rawRef);if(!e.ok)return e.response;c={...i,rawRef:e.ref},u=x({session:a,ref:e.ref,mintedGeneration:e.generation})}e.consumedSnapshot??={};let d=async()=>{let i=Dt({...e,session:a,device:o}),l=await Q(async()=>{let e=await i.selectors.wait({session:n,requestId:t.meta?.requestId,target:Qt(c,a,s)}),o=Vt(e);B(r,n,t,R(e),o,`landmark`);let l=Ze(e);return u?{...l,warning:u}:l});return await $(e,await H({req:t,logPath:e.logPath,session:a,device:o},l),`wait`)};return i.kind===`sleep`?await d():D(await A(a,o,d),Y(e))}function Vt(e){let t=e.node,n=e.preActionNodes;if(!(!t||typeof t!=`object`||!Array.isArray(n)))return{node:t,preActionNodes:n}}function Ht(e,t,n){if(!e||e.recordSession)return null;let r=G({session:e,selectorExpression:n});return t===`text`&&r?.key!==`id`?null:r}async function Ut(e,t,n){let r=e.sessionStore.get(e.sessionName),i=Ht(r,t,n);if(!r||!i)return null;let a=await X(e,r,i);if(Z(a))return a.response;if(!a)return null;let o=Jt(t,i.raw,a);return o?(B(e.sessionStore,e.sessionName,e.req,I(o,t)),{ok:!0,data:L(o)}):null}async function Wt(e,t,n,r){if(t===`hidden`)return null;let i=await Kt(e,n);if(Z(i))return i.response;if(!i?.result.found||!i.result.node)return null;let a=t===`exists`?{predicate:t,pass:!0,selector:i.selector.raw,matches:1,selectorChain:[i.selector.raw]}:Yt(t,r,i.selector.raw,i.session,i.result.node);return a?(B(e.sessionStore,e.sessionName,e.req,a),{ok:!0,data:z(a)}):null}async function Gt(e){let t=G({session:e.session,selectorExpression:e.selectorExpression});if(!e.session||!t)return null;let n=Date.now(),r=await X(e,e.session,t);if(Z(r))return r.response;if(!r?.found)return null;let i={kind:`selector`,selector:t.raw,waitedMs:Date.now()-n,selectorChain:[t.raw]};B(e.sessionStore,e.sessionName,e.req,i);let a={ok:!0,data:z(i)};return await H({req:e.req,logPath:e.logPath,session:e.session,device:e.device},a)}async function Kt(e,t){let n=e.sessionStore.get(e.sessionName),r=G({session:n,selectorExpression:t});if(!n||!r)return null;let i=await X(e,n,r);return Z(i)?i:i?{session:n,selector:r,result:i}:null}async function qt(e,t,n){let r=await b(t.device,{command:`querySelector`,selectorKey:n.key,selectorValue:n.value,appBundleId:t.appBundleId},T({req:e.req,logPath:e.logPath,traceLogPath:t.trace?.outPath})),i=r.found===!0,a=Xt(r);return{found:i,...typeof r.text==`string`?{text:r.text}:{},...a?{node:a}:{}}}async function X(t,n,r){try{return await qt(t,n,r)}catch(t){return ut(t,{allowElementNotFound:!0})?null:{kind:`error`,response:{ok:!1,error:e(t)}}}}function Z(e){return e!==null&&`kind`in e&&e.kind===`error`}function Jt(e,t,n){if(!n.found||!n.node)return null;let r={target:{kind:`selector`,selector:t},node:n.node,selectorChain:[t]};return e===`attrs`?{kind:`attrs`,...r}:typeof n.text==`string`?{kind:`text`,...r,text:n.text}:null}function Yt(e,t,n,r,i){let a=re({predicate:e,node:i,nodes:[i],expectedText:t,platform:r.device.platform});return{predicate:e,pass:a.pass,selector:n,...e===`text`?{text:a.actualText}:{},selectorChain:[n]}}function Xt(e){let t=e.nodes;if(!Array.isArray(t))return;let n=t[0];if(!(!n||typeof n!=`object`))return n}function Zt(e){let t=e.positionals?.[1]??``;if(t.startsWith(`@`)){let n=N(t);return n.ok?{ok:!0,target:{kind:`ref`,ref:n.ref,fallbackLabel:e.positionals.length>2?e.positionals.slice(2).join(` `).trim():``},refGeneration:n.generation}:{ok:!1,response:n.response}}let n=oe(e.positionals?.slice(1)??[]);return n.ok?{ok:!0,target:{kind:`selector`,selector:`selector`in n?n.selector:``}}:{ok:!1,response:y(n.code,n.message)}}function Qt(e,n,r){if(e.kind===`sleep`)return{kind:`sleep`,durationMs:e.durationMs};if(e.kind===`selector`)return{kind:`selector`,selector:e.selectorExpression,timeoutMs:e.timeoutMs,...r?{recordedLandmark:r}:{}};if(e.kind===`ref`){if(!n?.snapshot)throw new t(`INVALID_ARGS`,`Ref wait requires an existing snapshot in session.`);return{kind:`ref`,ref:e.rawRef,timeoutMs:e.timeoutMs}}if(e.kind===`stable`)return{kind:`stable`,quietMs:e.quietMs,timeoutMs:e.timeoutMs};let i=ne(e.text);if(!i.ok)throw new t(i.code,i.message);return{kind:`text`,text:i.text,timeoutMs:e.timeoutMs}}async function Q(e){try{return{ok:!0,data:await e()}}catch(e){let t=o(e);return y(t.code,t.message,t.details)}}async function $(e,t,n){if(t.ok)return t;let r=e.sessionStore.get(e.sessionName);if(!r)return t;let i;try{i=await F(r)}catch{return t}return i?y(t.error.code,`${n} failed because ${Ge(i)}.`,{...t.error.details??{},...i,blockedBy:`android_foreground_surface`,originalMessage:t.error.message}):t}export{A as C,k as S,Ne as _,K as a,ke as b,G as c,Re as d,Le as f,ze as g,P as h,Bt as i,We as l,Pe as m,Rt as n,ft as o,Fe as p,zt as r,ut as s,Lt as t,Ke as u,j as v,D as w,Oe as x,Me as y};
@@ -1 +1 @@
1
- import{a as e,dt as t,gt as n,l as r,pt as i,s as a,vt as o,yt as s}from"./sdk-selectors.js";import{a as c,i as l,o as u,u as d}from"./android-input-method-overlays.js";import{Ht as f}from"./internal/daemon.js";function p(e,t={}){let n=t.mode??`action`,{node:r,preActionNodes:i}=e;if(typeof r.index!=`number`)return;let a=c(i),o=S(_(r),i);if(n===`landmark`&&o.id===void 0&&o.label===void 0)return;let s=l(r,a,8),u=s.chain,d=v(i,r),f=y(r,a),p=x(r),b=+(u.length>0),w=e=>{let t=u.slice(0,e),n=C({nodes:i,byIndex:a,node:r,identity:o,ancestry:t,sibling:d,scrollRegion:f});return{candidate:{...o,ancestry:t,sibling:d,viewportOrder:n.viewportOrder,...f?{scrollRegion:f}:{},...p?{rect:p}:{},verification:`verified`},domain:n}};for(let e=u.length;e>=b;--e){let{candidate:t,domain:i}=w(e);if(h(t))return t.verification=m({node:r,domain:i,mode:n,brokenWalk:s.broken}),t;if(e===b)return g(t)}}function m(e){return e.brokenWalk?`unverifiable`:e.mode===`landmark`?`verified`:T({node:e.node,domain:e.domain})}function h(e){return s(o({...e,verification:`unverifiable`}))<=t}function g(e){return e.verification=`unverifiable`,s(o(e))>4096&&delete e.rect,e}const _=a;function v(e,t){return r(e,t)}function y(e,t){let n=f(e,t);if(!n)return;let r=_(n);return{role:r.role,...r.id===void 0?r.label===void 0?{}:{label:r.label}:{id:r.id}}}function b(e,t){return!e&&!t?!0:!e||!t?!1:n(e,t)}function x(e){let t=e.rect;if(t)return{x:t.x,y:t.y,width:t.width,height:t.height}}function S(t,n){return e(t,n)}function C(e){let{nodes:t,byIndex:n,node:r,identity:i,ancestry:a,sibling:o,scrollRegion:s}=e,c=u(t,n,i,a),l=c.filter(e=>v(t,e)===o),d=c.length>0?c.filter(e=>b(y(e,n),s)):void 0,f=d?w(d):[];return{identitySet:c,siblingMatches:l,regionMembers:d,orderedRegion:f,viewportOrder:Math.max(f.findIndex(e=>e.index===r.index),0)}}function w(e){return e.map((e,t)=>({node:e,documentOrder:t,center:d(e.rect)})).sort((e,t)=>!e.center&&!t.center?e.documentOrder-t.documentOrder:e.center?t.center?e.center.y===t.center.y?e.center.x===t.center.x?e.documentOrder-t.documentOrder:e.center.x-t.center.x:e.center.y-t.center.y:-1:1).map(e=>e.node)}function T(e){let{node:t,domain:n}=e,r=t.ref,a=n.identitySet.map(e=>e.ref);return i({winnerRef:r,matchedRefs:a,identitySetRefs:a,siblingMatchRefs:n.siblingMatches.map(e=>e.ref),regionMemberRefs:n.regionMembers?.map(e=>e.ref),viewportCandidateRef:n.orderedRegion[n.viewportOrder]?.ref}).outcome}export{w as a,p as i,y as n,b as o,v as r,_ as t};
1
+ import{a as e,dt as t,gt as n,l as r,pt as i,s as a,vt as o,yt as s}from"./sdk-selectors.js";import{a as c,i as l,o as u,u as d}from"./android-input-method-overlays.js";import{Ut as f}from"./internal/daemon.js";function p(e,t={}){let n=t.mode??`action`,{node:r,preActionNodes:i}=e;if(typeof r.index!=`number`)return;let a=c(i),o=S(_(r),i);if(n===`landmark`&&o.id===void 0&&o.label===void 0)return;let s=l(r,a,8),u=s.chain,d=v(i,r),f=y(r,a),p=x(r),b=+(u.length>0),w=e=>{let t=u.slice(0,e),n=C({nodes:i,byIndex:a,node:r,identity:o,ancestry:t,sibling:d,scrollRegion:f});return{candidate:{...o,ancestry:t,sibling:d,viewportOrder:n.viewportOrder,...f?{scrollRegion:f}:{},...p?{rect:p}:{},verification:`verified`},domain:n}};for(let e=u.length;e>=b;--e){let{candidate:t,domain:i}=w(e);if(h(t))return t.verification=m({node:r,domain:i,mode:n,brokenWalk:s.broken}),t;if(e===b)return g(t)}}function m(e){return e.brokenWalk?`unverifiable`:e.mode===`landmark`?`verified`:T({node:e.node,domain:e.domain})}function h(e){return s(o({...e,verification:`unverifiable`}))<=t}function g(e){return e.verification=`unverifiable`,s(o(e))>4096&&delete e.rect,e}const _=a;function v(e,t){return r(e,t)}function y(e,t){let n=f(e,t);if(!n)return;let r=_(n);return{role:r.role,...r.id===void 0?r.label===void 0?{}:{label:r.label}:{id:r.id}}}function b(e,t){return!e&&!t?!0:!e||!t?!1:n(e,t)}function x(e){let t=e.rect;if(t)return{x:t.x,y:t.y,width:t.width,height:t.height}}function S(t,n){return e(t,n)}function C(e){let{nodes:t,byIndex:n,node:r,identity:i,ancestry:a,sibling:o,scrollRegion:s}=e,c=u(t,n,i,a),l=c.filter(e=>v(t,e)===o),d=c.length>0?c.filter(e=>b(y(e,n),s)):void 0,f=d?w(d):[];return{identitySet:c,siblingMatches:l,regionMembers:d,orderedRegion:f,viewportOrder:Math.max(f.findIndex(e=>e.index===r.index),0)}}function w(e){return e.map((e,t)=>({node:e,documentOrder:t,center:d(e.rect)})).sort((e,t)=>!e.center&&!t.center?e.documentOrder-t.documentOrder:e.center?t.center?e.center.y===t.center.y?e.center.x===t.center.x?e.documentOrder-t.documentOrder:e.center.x-t.center.x:e.center.y-t.center.y:-1:1).map(e=>e.node)}function T(e){let{node:t,domain:n}=e,r=t.ref,a=n.identitySet.map(e=>e.ref);return i({winnerRef:r,matchedRefs:a,identitySetRefs:a,siblingMatchRefs:n.siblingMatches.map(e=>e.ref),regionMemberRefs:n.regionMembers?.map(e=>e.ref),viewportCandidateRef:n.orderedRegion[n.viewportOrder]?.ref}).outcome}export{w as a,p as i,y as n,b as o,v as r,_ as t};