agent-device 0.21.2 → 0.21.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.
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.2.apk → agent-device-android-ime-helper-0.21.3.apk} +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.3.apk.sha256 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.2.manifest.json → agent-device-android-ime-helper-0.21.3.manifest.json} +4 -4
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.2.apk → agent-device-android-snapshot-helper-0.21.3.apk} +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.3.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.2.manifest.json → agent-device-android-snapshot-helper-0.21.3.manifest.json} +7 -7
- package/dist/src/agent-device-client.js +1 -1
- package/dist/src/app-launch.js +1 -1
- package/dist/src/auth.js +1 -1
- package/dist/src/back-mode.js +1 -1
- package/dist/src/cli.js +2 -2
- package/dist/src/client-types.d.ts +1 -1
- package/dist/src/command-schema.js +1 -1
- package/dist/src/config.js +1 -1
- package/dist/src/connection-runtime.js +1 -1
- package/dist/src/connection.js +1 -1
- package/dist/src/daemon-client-lifecycle.js +1 -1
- package/dist/src/daemon-registration.js +1 -1
- package/dist/src/daemon-resolution.js +1 -0
- package/dist/src/daemon.js +1 -1
- package/dist/src/device-claim-rule.js +1 -1
- package/dist/src/harmonyos.js +1 -1
- package/dist/src/human-control-contract.js +1 -1
- package/dist/src/human-control.js +1 -1
- package/dist/src/interaction.js +1 -1
- package/dist/src/interactor.js +1 -1
- package/dist/src/interactors.js +1 -1
- package/dist/src/internal/bin.js +1 -1
- package/dist/src/internal/daemon.js +2 -2
- package/dist/src/lease-scope.js +1 -1
- package/dist/src/mechanics.js +16 -16
- package/dist/src/perf-runtime-plan.js +1 -1
- package/dist/src/physical-device-control.js +1 -1
- package/dist/src/platform-request-scope.js +1 -1
- package/dist/src/platform-runtime-host.js +1 -1
- package/dist/src/platform-runtime-operation-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-harmony-host.js +1 -1
- package/dist/src/platform-runtime.js +1 -1
- package/dist/src/provider-webdriver.js +1 -1
- package/dist/src/record-runtime.js +1 -1
- package/dist/src/register-builtins.js +1 -1
- package/dist/src/registry.js +3 -3
- package/dist/src/request-providers.js +1 -1
- package/dist/src/runner-cache-metadata.js +2 -2
- package/dist/src/runner-client.js +1 -1
- package/dist/src/runner-disposal.js +1 -1
- package/dist/src/runtime.js +1 -1
- package/dist/src/runtime2.js +1 -1
- package/dist/src/runtime4.js +5 -5
- package/dist/src/runtime6.js +1 -1
- package/dist/src/runtime9.js +1 -1
- package/dist/src/screen-recording-resource-recovery.js +1 -1
- package/dist/src/screen-recording-runtime.js +1 -1
- package/dist/src/screenshot-runtime.js +1 -1
- package/dist/src/sdk-batch.js +2 -2
- package/dist/src/sdk-remote-config.d.ts +1 -0
- package/dist/src/sdk-remote-config.js +1 -1
- package/dist/src/selector-runtime.js +1 -1
- package/dist/src/session-routing.js +1 -1
- package/dist/src/session-snapshot.js +1 -1
- package/dist/src/session2.js +5 -5
- package/dist/src/simulator.js +1 -1
- package/dist/src/snapshot-runtime-binding.js +1 -1
- package/dist/src/snapshot-runtime.js +1 -1
- package/dist/src/snapshot4.js +1 -1
- package/dist/src/src3.js +1 -1
- package/dist/src/src4.js +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.2.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.2.apk.sha256 +0 -1
- package/dist/src/config2.js +0 -1
- package/dist/src/provider-device-runtime.js +0 -1
package/dist/src/simulator.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e}from"./sdk-contracts.js";import{a as t,n}from"./exec.js";import"./command.js";import{i as r,n as i}from"./retry.js";import{t as a}from"./ttl-memo.js";import{n as o,t as s}from"./boot-diagnostics.js";import{t as c}from"./scoped-provider.js";import{n as l,o as u}from"./
|
|
1
|
+
import{C as e}from"./sdk-contracts.js";import{a as t,n}from"./exec.js";import"./command.js";import{i as r,n as i}from"./retry.js";import{t as a}from"./ttl-memo.js";import{n as o,t as s}from"./boot-diagnostics.js";import{t as c}from"./scoped-provider.js";import{n as l,o as u}from"./config.js";import{a as d,o as f}from"./tool-provider.js";import{t as p}from"./simctl.js";const m=[`Simulator`],h=[`Device Hub`,`Simulator`],g=c(void 0);async function _(e,t){return await g.run(e,t)}const v=a({ttlMs:5e3});function y(e){return`${e.id}|${e.simulatorSetPath??``}`}function b(e){return v.get(y(e))===!0}function x(e){v.set(y(e),!0)}function S(t,n){if(t.kind!==`simulator`)throw new e(`UNSUPPORTED_OPERATION`,`${n} is only supported on iOS simulators`)}async function C(e={}){let t=e.deviceHub?h:m,n=e.background?[`-g`,`-a`]:[`-a`];for(let r of t)if((await d(`open`,[...n,r],{allowFailure:!0,signal:e.signal,timeoutMs:1e4})).exitCode===0)return}async function w(a,c={}){if(a.kind!==`simulator`)return;c.signal?.throwIfAborted();let u=g.resolve();if(u){await u(a),c.signal?.throwIfAborted();return}if((b(a)?`Booted`:await T(a,c.signal))===`Booted`){x(a),c.focusExisting&&await C({background:c.deviceHub,deviceHub:c.deviceHub,signal:c.signal});return}c.onColdBootStart?.(a);let d=i.fromTimeoutMs(l),m,h;try{await r(async({deadline:r})=>{if(r?.isExpired())throw new e(`COMMAND_FAILED`,`iOS simulator boot deadline exceeded`,{timeoutMs:l});let i=Math.max(1e3,r?.remainingMs()??18e4);m=await f(p(a,[`boot`,a.id]),{allowFailure:!0,signal:c.signal,timeoutMs:i});let o=`${m.stdout}\n${m.stderr}`.toLowerCase(),s=o.includes(`already booted`)||o.includes(`current state: booted`);if(m.exitCode!==0&&!s)throw new e(`COMMAND_FAILED`,`simctl boot failed`,n(m));h=await f(p(a,[`bootstatus`,a.id,`-b`]),{allowFailure:!0,signal:c.signal,timeoutMs:i}),t(h,`simctl bootstatus failed`);let u=await T(a,c.signal);if(u!==`Booted`)throw new e(`COMMAND_FAILED`,`Simulator is still booting`,{state:u})},{maxAttempts:3,baseDelayMs:500,maxDelayMs:2e3,jitter:.2,shouldRetry:e=>{let t=o({error:e,stdout:h?.stdout??m?.stdout,stderr:h?.stderr??m?.stderr,context:{platform:`ios`,phase:`boot`}});return t!==`IOS_BOOT_TIMEOUT`&&t!==`CI_RESOURCE_STARVATION_SUSPECTED`}},{deadline:d,phase:`boot`,signal:c.signal,classifyReason:e=>o({error:e,stdout:h?.stdout??m?.stdout,stderr:h?.stderr??m?.stderr,context:{platform:`ios`,phase:`boot`}})})}catch(t){let n=o({error:t,stdout:h?.stdout??m?.stdout,stderr:h?.stderr??m?.stderr,context:{platform:`ios`,phase:`boot`}});throw new e(`COMMAND_FAILED`,`iOS simulator failed to boot`,{platform:`ios`,deviceId:a.id,timeoutMs:l,elapsedMs:d.elapsedMs(),reason:n,hint:s(n),boot:m,bootstatus:h})}x(a),await C({deviceHub:c.deviceHub,signal:c.signal})}async function T(e,t){let n=p(e,[`list`,`devices`,`-j`]),r=await f(n,{allowFailure:!0,signal:t,timeoutMs:u});if(r.exitCode!==0)return null;try{let t=JSON.parse(r.stdout);for(let n of Object.values(t.devices??{})){let t=n.find(t=>t.udid===e.id);if(t)return t.state}return null}catch{return null}}export{_ as a,b as i,x as n,S as r,w as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{l as e}from"./sdk-device.js";import{It as t}from"./sdk-batch.js";import"./session-store.js";import{r as n}from"./command.js";import{i as r,n as i,s as a}from"./request-runtime-binding.js";import{
|
|
1
|
+
import{l as e}from"./sdk-device.js";import{It as t}from"./sdk-batch.js";import"./session-store.js";import{r as n}from"./command.js";import{i as r,n as i,s as a}from"./request-runtime-binding.js";import{l as o,p as s,v as c}from"./session-snapshot.js";import{n as l}from"./dispatch-resolve.js";import{a as u,i as d,n as f,t as p}from"./session-runtime-admission.js";async function m(e,t,n){let r=e.get(t);return{session:r,device:r?.device??await l(n??{})}}async function h(e,t,n,r){if(!e&&!r)throw Error(`Platform resource cleanup was not injected`);try{return await n()}finally{!e&&!a(t)&&await r.cleanupSessionlessExecutionHost(t)}}function g(e,t,n,r){t&&e.recordAction(t,{command:n.command,positionals:n.positionals??[],flags:n.flags??{},result:r})}function _(e){let{session:t,sessionName:n,sessionScope:r,device:i,snapshot:a,appBundleId:o}=e;return t?{...t,snapshot:a,lastComparisonSafeSnapshot:a?.comparisonSafe===!0?a:t.lastComparisonSafeSnapshot}:{name:n,sessionScope:r,device:i,createdAt:Date.now(),appBundleId:o,snapshot:a,...a?.comparisonSafe===!0?{lastComparisonSafeSnapshot:a}:{},actions:[]}}async function v(t){if(!e(t)||t.kind!==`simulator`)return;let n=await c.resolveSoleForegroundApp({simulatorSetPath:t.simulatorSetPath});if(!n)return;let r=y(n.device,n.app.bundleId),i=`One booted device found ("${n.device.name}", udid ${n.device.id}) with ${n.app.bundleId} running. Run: ${r}`;return i.length<=350?i:void 0}function y(e,t){let r=e.simulatorSetPath?` --ios-simulator-device-set ${n(e.simulatorSetPath)}`:``;return`agent-device open ${t} --platform ios --udid ${e.id}${r}`}function b(e){let{readTextAtPoint:t}=e.operations,n=t?{operations:{readTextAtPoint:t}}:void 0;return Object.freeze(n?{readTextAtPoint:async e=>await n.operations.readTextAtPoint(e)}:{})}function x(e){let{findText:t}=e.operations;return Object.freeze(t?{findText:async e=>{e.signal?.throwIfAborted();try{let n=await t(e);return e.signal?.throwIfAborted(),n}catch{return e.signal?.throwIfAborted(),{found:!1}}}}:{})}function S(e){let{focusPoint:t,typeText:n}=e.operations;return Object.freeze({...t?{focusPoint:t}:{},...n?{typeText:n}:{}})}async function C(e){let{command:t,device:n,session:r,plan:i}=e,a=await p({device:n,plan:i,inspectFacts:e.inspectFacts});if(!a.admitted)return{ok:!1,response:await j({operation:a.operation,fact:a.fact,session:r,device:n,command:t})};let o=await T(e.bindDevice,a,e.readiness);return Object.freeze({ok:!0,capture:async e=>await o.captureSnapshot(e),...o.readTextAtPoint?{readTextAtPoint:o.readTextAtPoint}:{},...o.findText?{findText:o.findText}:{},...o.focusPoint?{focusPoint:o.focusPoint}:{},...o.typeText?{typeText:o.typeText}:{}})}async function w(e,n){let{req:r,sessionName:i,sessionStore:a}=e,{session:c,device:l}=await m(a,i,r.flags),u=o(r.flags?.snapshotScope,c);if(!u.ok)return{ok:!1,response:u};let d=await C({command:n,device:l,session:c,plan:t({customActions:r.flags?.snapshotCustomActions===!0,hasActiveApp:c?.appBundleId!==void 0}),inspectFacts:e.inspectFacts,bindDevice:e.bindDevice,...c?{}:{readiness:{}}});if(!d.ok)return d;let f=s({flags:r.flags,logPath:e.logPath,meta:r.meta,session:c,snapshotScope:u.scope});return Object.freeze({ok:!0,session:c,device:l,snapshotScope:u.scope,captureSnapshot:async()=>await d.capture(f)})}async function T(e,t,n){let r=f(e),a=async(e,t)=>{let a=await r(e,t);return n!==void 0&&await i(a,n),a},{device:o,plan:s}=u(t);switch(s.kind){case`active-app`:return O(await a(o,s.use));case`selector-active-app`:return await E(a,o,s);case`custom-actions-active-app`:return k(await a(o,s.use));case`without-active-app`:return A(await a(o,s.use));case`selector-without-active-app`:return await D(a,o,s);case`custom-actions-without-active-app`:return k(await a(o,s.use))}}async function E(e,t,n){switch(n.intent){case`capture-only`:return O(await e(t,n.use));case`element-text`:{let r=await e(t,n.use);return{...O(r),...b(r)}}case`wait-observation`:{let r=await e(t,n.use);return{...O(r),...x(r)}}case`find-focus`:{let r=await e(t,n.use);return{...O(r),...S(r)}}case`find-type`:{let r=await e(t,n.use);return{...O(r),...S(r)}}}}async function D(e,t,n){switch(n.intent){case`capture-only`:return A(await e(t,n.use));case`element-text`:{let r=await e(t,n.use);return{...A(r),...b(r)}}case`wait-observation`:{let r=await e(t,n.use);return{...A(r),...x(r)}}case`find-focus`:{let r=await e(t,n.use);return{...A(r),...S(r)}}case`find-type`:{let r=await e(t,n.use);return{...A(r),...S(r)}}}}function O(e){return Object.freeze({captureSnapshot:async t=>await e.operations.captureSnapshot(t)})}function k(e){return Object.freeze({captureSnapshot:async t=>await e.operations.captureSnapshotWithCustomActions(t)})}function A(e){return Object.freeze({captureSnapshot:async t=>await e.operations.captureSnapshotWithoutActiveApp(t)})}async function j(e){if(e.operation===`captureSnapshot`||e.operation===`focusPoint`||e.operation===`typeText`)return d(e.command,e.fact);if(e.operation===`captureSnapshotWithCustomActions`)return M(e);let t=await v(e.device);return r(`SESSION_NOT_FOUND`,`iOS ${e.command} requires an active app session on the target device. Run open first (for example: open --session ${e.session?.name??`sim`} --platform ios --device "<name>" <app>).`,{reason:`ios_app_session_required`,...t?{hint:t}:{}})}function M(e){let t=e.command===`diff`?`--actions requires an iOS simulator: custom actions are read through the private accessibility snapshot backend, which ${e.device.platform}/${e.device.kind} targets do not have.`:`--actions requires an iOS simulator: custom actions are unavailable on this ${e.device.platform}/${e.device.kind} target.`;return r(`UNSUPPORTED_OPERATION`,t,{reason:e.fact.available?void 0:e.fact.reason},{hint:e.command===`diff`||e.fact.available||!e.fact.hint?`Re-run without --actions, or target an iOS simulator.`:e.fact.hint})}export{m as a,g as i,w as n,h as o,_ as r,C as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e,M as t,u as n,v as r}from"./sdk-contracts.js";import"./capture.js";import{r as i}from"./snapshot-capture-annotations.js";import{i as a}from"./snapshot-diagnostics.js";import{f as o}from"./android-input-ownership.js";import{v as s}from"./sdk-device.js";import{s as c}from"./session-store.js";import{s as l}from"./session-target-evidence.js";import{r as u}from"./diagnostics.js";import"./diagnostics2.js";import{i as d,s as f}from"./android-system-chrome.js";import{r as p}from"./request-cancel.js";import"./request.js";import{
|
|
1
|
+
import{C as e,M as t,u as n,v as r}from"./sdk-contracts.js";import"./capture.js";import{r as i}from"./snapshot-capture-annotations.js";import{i as a}from"./snapshot-diagnostics.js";import{f as o}from"./android-input-ownership.js";import{v as s}from"./sdk-device.js";import{s as c}from"./session-store.js";import{s as l}from"./session-target-evidence.js";import{r as u}from"./diagnostics.js";import"./diagnostics2.js";import{i as d,s as f}from"./android-system-chrome.js";import{r as p}from"./request-cancel.js";import"./request.js";import{C as m,T as h,a as g,f as _,o as v,s as y}from"./session-snapshot.js";import{a as b,i as x,r as S,t as C}from"./screenshot-runtime.js";import{a as w}from"./session-routing.js";import{p as T,t as E}from"./quality-warnings.js";import{n as D,o as O,r as k}from"./snapshot-runtime-binding.js";import A from"node:path";import{promises as j}from"node:fs";import M from"node:os";function N(e){return{captureFailed:!0,error:e}}function P(e){return{path:e,overlayRefsRequested:!0,overlayRefsAnnotated:!1,overlayRefSource:`unavailable`}}function F(e,t){let n={path:e,overlayRefsRequested:!0,overlayRefSource:`session-snapshot`};return I(t)?{...n,overlayRefsAnnotated:!0,overlayRefs:t}:{...n,overlayRefsAnnotated:!1,overlayRefs:[]}}function I(e){return e.length>0}function L(e,t){return{path:e,overlayRefsRequested:!0,overlayRefsAnnotated:!1,overlayRefSource:`session-snapshot`,overlayAnnotationError:t}}function R(e){return`captureFailed`in e?{overlayRefCount:void 0,overlayRefsAnnotated:void 0}:{overlayRefCount:`overlayRefs`in e?e.overlayRefs.length:0,overlayRefsAnnotated:e.overlayRefsAnnotated}}function z(e){return f(e)===`accessibility-timeout`}async function ee(e){if(e.command!==`snapshot`||e.device.platform!==`android`)return;let n=t(e.error);if(z(n))return{ok:!1,error:{...n,details:{...n.details??{},androidSnapshotTimeoutScreenshot:await B(e)}}}}async function B(n){try{let t=await x({device:n.device,overlayRefs:!1,inspectFacts:n.inspectFacts,bindDevice:n.bindDevice});if(!t.ok)throw new e(`UNSUPPORTED_OPERATION`,`The target does not support screenshot capture, so no timeout evidence was taken.`);let r=await j.mkdtemp(A.join(M.tmpdir(),`agent-device-android-snapshot-timeout-`)),i=A.join(r,`snapshot-timeout-overlay-refs.png`);await t.runtime.captureScreenshot({outPath:i,options:{appBundleId:n.session?.appBundleId,stabilize:!1,surface:n.session?.surface},execution:S(m(n.logPath,{screenshotNoStabilize:!0},n.session?.appBundleId,n.session?.trace?.outPath))}),await j.access(i);let a=await V(i,n.session);return u({level:`warn`,phase:`android_snapshot_timeout_screenshot_captured`,data:{path:i,...R(a)}}),a}catch(e){let n=t(e);return u({level:`warn`,phase:`android_snapshot_timeout_screenshot_failed`,data:{error:n.message}}),N(n.message)}}async function V(e,n){if(!n?.snapshot)return P(e);try{return F(e,await b({screenshotPath:e,snapshot:n.snapshot}))}catch(n){let r=t(n);return u({level:`warn`,phase:`android_snapshot_timeout_screenshot_overlay_failed`,data:{path:e,error:r.message}}),L(e,r.message)}}function H(e){let{verdict:t,appBundleId:n,latch:r}=e;return!t||t.backend===`android-helper`?{latch:r}:t.state===`healthy`?{latch:void 0}:t.state!==`recovered`||t.reasonCode===`requested-backend`?{latch:r}:t.reasonCode===`deferred`?r!==void 0&&r.appBundleId===n?{latch:r}:{warning:E(t.backend),latch:{appBundleId:n}}:{latch:{appBundleId:n}}}function U(e){let{session:t,data:n,verdict:r,internalObservation:i}=e;if(i||!t)return n;let a=H({verdict:r,appBundleId:t.appBundleId,latch:t.recoveredSnapshotWarningLatch});if(t.recoveredSnapshotWarningLatch=a.latch,!a.warning)return n;let o=Array.isArray(n.warnings)?n.warnings:[];return{...n,warnings:[a.warning,...o]}}async function W(e){let t=await D(e,e.command);if(!t.ok)return t.response;let{session:n,device:r,snapshotScope:i}=t;return await O(n,r,async()=>{let{req:a,sessionName:s,logPath:c,sessionStore:l}=e,u={},d=G({req:a,sessionName:s,logPath:c,sessionStore:l,session:n,device:r,snapshotScope:i,capturedQuality:u,captureSnapshotData:t.captureSnapshot,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice}),f;try{f=await e.execute({runtime:d,sessionName:s,req:a,snapshotScope:i})}catch(t){let i=await ee({error:t,command:e.command,logPath:c,session:n,device:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!i)throw t;return i}Q({req:a,sessionName:s,sessionStore:l,result:f.record});let p=U({session:l.get(s),data:f.data,verdict:u.value,internalObservation:a.internal?.observationOnly===!0});return{ok:!0,data:o(f.data,p)}},e.platformResourceCleanup)}function G(e){let{req:t,sessionName:n,logPath:r,sessionStore:i,session:a,device:o,snapshotScope:s}=e;return _({backend:Z({req:t,logPath:r,session:a,device:o,snapshotScope:s,capturedQuality:e.capturedQuality,captureSnapshotData:e.captureSnapshotData,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice}),...l(`snapshot`),signal:p(t.meta?.requestId),sessions:v({sessionName:n,getSession:()=>i.get(n),recordOptions:{includeSnapshot:!0},setRecord:e=>{let r=$(e),a=i.get(n);i.set(n,K({current:a,sessionName:n,sessionScope:w(t),device:o,record:r,refScopedSnapshot:q(t),issuesRefsToClient:t.command===`snapshot`&&t.internal?.observationOnly!==!0}))}})})}function K(e){let{current:t,sessionName:n,sessionScope:r,device:i,record:a,refScopedSnapshot:o}=e,s=J(t,a,o),c=s?t.snapshot:a.snapshot,l=k({session:t,sessionName:n,sessionScope:r,device:i,snapshot:c,appBundleId:a.appBundleId});return g(l,{scopeSource:X({current:t,keepCurrentSnapshot:s,refScopedSnapshot:o}),keptCurrentSnapshot:s,previousGeneration:t?.snapshotGeneration}),Y(l,s,e.issuesRefsToClient),a.appName&&(l.appName=a.appName),l}function q(e){return e.flags?.snapshotScope?.trim().startsWith(`@`)===!0}function J(e,t,n){return n&&t.snapshot?.nodes.length===0&&e?.snapshot!==void 0}function Y(e,t,n){!t&&n&&h(e)}function X(e){let{current:t,keepCurrentSnapshot:n,refScopedSnapshot:r}=e;if(r)return n?t?.snapshotScopeSource:t?.snapshotScopeSource??t?.snapshot}function Z(e){let{req:t,logPath:n,session:r,device:o,snapshotScope:c}=e;return{platform:s(o),captureSnapshot:async(s,l)=>{let u=await y({device:o,session:r,flags:t.flags,outPath:l?.outPath??t.flags?.out,logPath:n,snapshotScope:c,signal:s.signal,captureData:e.captureSnapshotData,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice}),d=i(u);e.capturedQuality.value=d.quality;let f=a(r);return{snapshot:u.snapshot,...d,...f?{snapshotDiagnostics:f}:{},appName:r?.appBundleId?r.appName??r.appBundleId:void 0,appBundleId:r?.appBundleId}}}}function Q(e){let t=e.sessionStore.get(e.sessionName);t&&e.sessionStore.recordAction(t,{command:e.req.command,positionals:e.req.positionals??[],flags:e.req.flags??{},result:te(e.result),interactiveObservation:c(e.req)})}function $(t){if(!t.snapshot)throw new e(`UNKNOWN`,`snapshot runtime did not produce session state`);return t}function te(e){return e.kind===`snapshot`?{nodes:e.nodes,truncated:e.truncated}:{mode:e.mode,baselineInitialized:e.baselineInitialized,summary:e.summary}}async function ne(e){let t=e.session;if(!t||!T(e.verdict)||e.req.internal?.observationOnly===!0)return;let n=await re({...e,session:t});if(n!==void 0)return{path:n,artifact:{field:`fallbackScreenshotPath`,artifactType:`screenshot`,path:n,fileName:`snapshot-fallback.png`}}}async function re(e){let{req:t,session:n}=e;try{let r=await x({device:n.device,overlayRefs:!1,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return r.ok?(await C({session:n,sessionName:e.sessionName,captureScreenshot:r.runtime.captureScreenshot,dispatchContext:m(e.logPath,t.flags,n.appBundleId,n.trace?.outPath,t.meta?.requestId,t.meta)})).path:void 0}catch{return}}async function ie(e){return await W({...e,command:`snapshot`,execute:async({runtime:t,sessionName:i,req:a,snapshotScope:s})=>{let c=await t.capture.snapshot({session:i,...r(a.flags,n),scope:s}),l=ae(a,e.sessionStore.get(i)),u=d(c.nodes),f=o(c,u===c.nodes?c:{...c,nodes:u}),p=await ne({req:a,session:e.sessionStore.get(i),sessionName:i,logPath:e.logPath,verdict:c.snapshotQuality,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice}),m=o(f,p?{...f,fallbackScreenshotPath:p.path,artifacts:[p.artifact]}:f);return{data:l===void 0?m:o(m,{...m,refsGeneration:l}),record:{kind:`snapshot`,nodes:c.nodes.length,truncated:c.truncated}}}})}function ae(e,t){return e.internal?.observationOnly===!0?void 0:t?.snapshotGeneration}export{W as n,ie as t};
|
package/dist/src/snapshot4.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e}from"./sdk-contracts.js";import{u as t}from"./sdk-device.js";import{$ as n,Mr as r,Q as i,Rt as a,et as o,lr as s,nn as c,rn as l,tt as u}from"./sdk-batch.js";import"./session-store.js";import{l as d}from"./runtime.js";import{n as f,r as p}from"./success-text.js";import"./alert-contract.js";import{a as m,o as ee,r as h,t as g}from"./location-coordinates.js";import{a as _,t as v}from"./absence-observation-errors.js";import{r as y}from"./diagnostics.js";import"./diagnostics2.js";import{i as b}from"./request-runtime-binding.js";import{m as te}from"./screenshot-runtime.js";import{C as x,E as S,g as C,m as w,p as ne,r as re,s as ie}from"./session-snapshot.js";import{n as ae,t as oe}from"./snapshot-runtime.js";import{a as T,i as E,o as D}from"./snapshot-runtime-binding.js";import{_ as O,a as k,c as A,g as j,h as M,m as N,o as P,p as F,s as I,t as L,u as R}from"./selector-runtime.js";async function z(e){let{device:t,action:r,inspectFacts:a,bindDevice:s}=e,c={command:`alert`,device:t,inspectFacts:a,bindDevice:s,...e.session?{}:{readiness:{}}};if(r===`wait`){let e=await C({...c,use:u});if(e.type===`response`)return{ok:!1,response:e.response};let t=e.runtime;return{ok:!0,execute:e=>V(t,e)}}if(r===`accept`){let e=await C({...c,use:i});if(e.type===`response`)return{ok:!1,response:e.response};let t=e.runtime;return{ok:!0,execute:e=>H(t,e)}}if(r===`dismiss`){let e=await C({...c,use:n});if(e.type===`response`)return{ok:!1,response:e.response};let t=e.runtime;return{ok:!0,execute:e=>U(t,e)}}let l=await C({...c,use:o});if(l.type===`response`)return{ok:!1,response:l.response};let d=l.runtime;return{ok:!0,execute:e=>B(d,e)}}async function B(e,t){return await e.operations.readAlert(t)}async function V(e,t){return await e.operations.awaitAlert(t)}async function H(e,t){return await e.operations.acceptAlert(t)}async function U(e,t){return await e.operations.dismissAlert(t)}async function W(e){let{req:t,logPath:n,sessionStore:r,session:i,device:a,inspectFacts:o,bindDevice:s}=e,c=await z({device:a,action:K(t.positionals?.[0]),session:i,inspectFacts:o,bindDevice:s});if(!c.ok)return c.response;i&&te(t)===`may-invalidate`&&S(i);let u=x(n,t.flags,i?.appBundleId,i?.trace?.outPath),d=await c.execute({timeoutMs:l(t.positionals?.[1])??1e4,...G(i),execution:w(u)});return E(r,i,t,d),{ok:!0,data:d}}function G(e){return{...e?.appBundleId===void 0?{}:{appBundleId:e.appBundleId},...e?.surface===void 0?{}:{surface:e.surface}}}function K(e){return e===`accept`||e===`dismiss`||e===`wait`?e:`get`}function q(e){let t=e.positionals?.[0]?.toLowerCase(),n=e.positionals?.[1]?.toLowerCase(),r=e.positionals?.[2]?.toLowerCase();return t===`clear-app-state`?{ok:!0,parsed:{setting:t,state:`clear`,appBundleId:n===`clear`?e.positionals?.[2]:e.positionals?.[1]}}:!t||!n||t===`permission`&&!r||t===`location`&&n===`set`&&(!e.positionals?.[2]||!e.positionals?.[3])||t===`reset-keychain`&&e.positionals?.[2]!==void 0?b(`INVALID_ARGS`,h):{ok:!0,parsed:{setting:t,state:n,permissionTarget:r,permissionMode:e.positionals?.[3],latitude:e.positionals?.[2],longitude:e.positionals?.[3]}}}function se(e){if(e.setting===`permission`)return{permissionTarget:e.permissionTarget,permissionMode:e.permissionMode};if(e.setting===`location`&&e.state===`set`)return{latitude:g(e.latitude,`latitude`),longitude:g(e.longitude,`longitude`)}}function ce(e,t,n){let{setting:r,state:i}=e;return r===`clear-app-state`?{setting:`clear-app-state`,state:`clear`,appBundleId:t,platform:n}:r===`location`&&i===`set`?{setting:r,state:i,latitude:e.latitude,longitude:e.longitude,platform:n}:r===`permission`?{setting:r,state:i,permissionTarget:e.permissionTarget,permissionMode:e.permissionMode,platform:n}:{setting:r,state:i,appBundleId:t,platform:n}}function le(e){return typeof e.message==`string`&&e.message.length>0?e.message:void 0}async function ue(e,t,n){let{setting:r,state:i}=t,a=await e.operations.setSetting(t);return a&&typeof a==`object`?p({setting:r,state:i,...a},le(a)??n):{setting:r,state:i,...f(n)}}async function de(e){let{req:n,logPath:r,sessionStore:i,session:o,device:s,parsed:c,inspectFacts:l,bindDevice:u}=e,{setting:d,state:f}=c,p=await C({command:`settings`,device:s,use:a,inspectFacts:l,bindDevice:u,...o?{}:{readiness:{}}});if(p.type===`response`)return p.response;if(t(s)&&!ee(d))return b(`INVALID_ARGS`,m(d));let h=c.appBundleId??o?.appBundleId;if(d===`clear-app-state`&&!h)return b(`INVALID_ARGS`,`settings clear-app-state requires an app id when no app is bound to the session`);o&&S(o),y({level:`debug`,phase:`settings_apply`,data:ce(c,h,s.platform)});let g=se(c),_=x(r,n.flags,h,o?.trace?.outPath),v=await ue(p.runtime,{setting:d,state:f,...h===void 0?{}:{appBundleId:h},...g===void 0?{}:{options:g},execution:w(_)},d===`clear-app-state`?`Cleared user data for ${h}`:`Updated setting: ${d}`);return E(i,o,n,v),{ok:!0,data:v}}async function fe(e){return await ae({...e,command:`diff`,execute:async({runtime:e,sessionName:t,req:n,snapshotScope:r})=>{let i=await e.capture.diffSnapshot({session:t,interactiveOnly:n.flags?.snapshotInteractiveOnly,depth:n.flags?.snapshotDepth,scope:r,raw:n.flags?.snapshotRaw});return{data:i,record:{kind:`diff`,mode:`snapshot`,baselineInitialized:i.baselineInitialized,summary:i.summary}}}})}function pe(e){return e!==`sleep`}const me=[`application`,`window`,`tabbar`,`scrollbar`,`image`],he=new Set([`tab bar`]);async function ge(e,t){if(t.ok||!_e(t.error.details?.reason)||t.error.details?.captureStalled===!0||t.error.details?.captureTruncated===!0)return t;let n=await ve(e).catch(()=>null);return n?b(t.error.code,`${t.error.message}. Current surface: ${n.summary}.`,{...t.error.details??{},currentSurface:n.details}):t}function _e(e){return e===d.targetAbsent||e===d.stableTimeout}async function ve(e){let t={...e.req.flags,snapshotInteractiveOnly:!0},n=[...(await ie({device:e.device,session:e.session,flags:t,logPath:e.logPath??``,captureData:async()=>await e.capture(ne({flags:t,logPath:e.logPath??``,meta:e.req.meta,session:e.session,snapshotScope:void 0}))})).snapshot.nodes].sort(ye),r=J(n,6,{includeIdentifiers:!0});if(r.length===0)return null;let i=J(n.filter(e=>!Z(e)),4,{includeIdentifiers:!1}),a=J(n.filter(xe),4,{includeIdentifiers:!0});return{summary:(i.length>0?i:r.slice(0,4)).join(`, `),details:{labels:r,...a.length>0?{buttons:a}:{}}}}function J(e,t,n){let r=new Set,i=[];for(let a of e){let e=X(a,n);if(!(!e||r.has(e))&&(r.add(e),i.push(e),i.length>=t))break}return i}function ye(e,t){return Y(e)-Y(t)||be(e,t)}function Y(e){let t=!!X(e,{includeIdentifiers:!1});return(Z(e)?2:0)+ +!t}function be(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 X(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.replaceAll(/\s+/g,` `).slice(0,80):``}function Z(e){let t=r(`${e.type??``} ${e.role??``} ${e.subrole??``}`),n=`${e.label??``} ${e.value??``}`.trim().toLowerCase();return me.some(e=>t.includes(e))||he.has(n)||n.endsWith(`.fill`)}function xe(e){let t=`${e.type??``} ${e.role??``} ${e.subrole??``}`;return r(t).includes(`button`)}async function Q(e){let{req:t,sessionName:n,sessionStore:r}=e,i=Se(t);if(`ok`in i)return i;let a=i,{session:o,device:s}=await T(r,n,t.flags),c=await Ce(e,a,o,s);if(c&&`ok`in c)return c;let l=c,u=t.internal?.replayLandmarkGuard,d=we(a,o);if(`ok`in d)return d;let{waitParsed:f,staleRefsWarning:p}=d;return e.consumedSnapshot??={},a.kind===`sleep`?await $(e,f,o,s,l,p,u):R(await D(o,s,()=>$(e,f,o,s,l,p,u),e.platformResourceCleanup),L(e))}function Se(e){let t=c(e.positionals??[]);if(!t)return b(`INVALID_ARGS`,`wait requires a duration or text`);if(t.kind===`invalid`)return b(`INVALID_ARGS`,t.message);if(t.kind!==`absent`)return t;let n=_({depth:e.flags?.snapshotDepth,scope:e.flags?.snapshotScope});if(!n)return t;let r=v(n,`wait`);return b(r.code,r.message,r.details)}async function Ce(e,t,n,r){if(!pe(t.kind))return;let i=await F({command:`wait`,device:r,session:n,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?i.operations:i.response}function we(e,t){if(e.kind!==`ref`)return{waitParsed:e};let n=O(e.rawRef);return n.ok?{waitParsed:{...e,rawRef:n.ref},staleRefsWarning:re({session:t,ref:n.ref,mintedGeneration:n.generation})}:n.response}async function $(e,t,n,r,i,a,o){let{req:s,sessionName:c,sessionStore:l}=e,u=A({...e,session:n,device:r,bound:i}),d=await I(async()=>{let e=await u.selectors.wait({session:c,requestId:s.meta?.requestId,target:Te(t,n,o)}),r=P(e);N(l,c,s,M(e),r,`landmark`);let i=j(e);return a?{...i,warning:a}:i}),f=i?await ge({req:s,logPath:e.logPath,session:n,device:r,capture:i.capture},d):d;return await k(e,f,`wait`)}function Te(e,t,n){switch(e.kind){case`sleep`:return{kind:`sleep`,durationMs:e.durationMs};case`selector`:return{kind:`selector`,selector:e.selectorExpression,timeoutMs:e.timeoutMs,...n?{recordedLandmark:n}:{}};case`absent`:return{kind:`absent`,selector:e.selectorExpression,timeoutMs:e.timeoutMs};case`ref`:return De(e,t);case`stable`:return{kind:`stable`,quietMs:e.quietMs,timeoutMs:e.timeoutMs};case`text`:return Oe(e);default:return Ee(e)}}function Ee(e){throw Error(`Unsupported wait positional target: ${String(e)}`)}function De(t,n){if(!n?.snapshot)throw new e(`INVALID_ARGS`,`Ref wait requires an existing snapshot in session.`);return{kind:`ref`,ref:t.rawRef,timeoutMs:t.timeoutMs}}function Oe(t){let n=s(t.text);if(!n.ok)throw new e(n.code,n.message);return{kind:`text`,text:n.text,timeoutMs:t.timeoutMs}}const ke={snapshot:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>await oe({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o}),diff:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>e.positionals?.[0]===`snapshot`?await fe({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o}):b(`INVALID_ARGS`,`diff currently supports only: diff snapshot`),wait:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>await Q({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o}),alert:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>{let{session:s,device:c}=await T(r,t,e.flags);return await D(s,c,async()=>await W({req:e,logPath:n,sessionStore:r,session:s,device:c,inspectFacts:i,bindDevice:a}),o)},settings:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>{let s=q(e);if(!s.ok)return s;let{session:c,device:l}=await T(r,t,e.flags);return await D(c,l,async()=>await de({req:e,logPath:n,sessionStore:r,session:c,device:l,parsed:s.parsed,inspectFacts:i,bindDevice:a}),o)}};async function Ae(e){let t=e.req.command,n=ke[t];return n?await n(e):null}export{Ae as handleSnapshotCommands};
|
|
1
|
+
import{C as e}from"./sdk-contracts.js";import{u as t}from"./sdk-device.js";import{$ as n,Mr as r,Q as i,Rt as a,et as o,lr as s,nn as c,rn as l,tt as u}from"./sdk-batch.js";import"./session-store.js";import{l as d}from"./runtime.js";import{n as f,r as p}from"./success-text.js";import"./alert-contract.js";import{a as m,o as h,r as g,t as _}from"./location-coordinates.js";import{a as v,t as y}from"./absence-observation-errors.js";import{r as ee}from"./diagnostics.js";import"./diagnostics2.js";import{i as b}from"./request-runtime-binding.js";import{C as x,E as S,g as C,m as w,p as te,r as ne,s as re}from"./session-snapshot.js";import{h as ie}from"./screenshot-runtime.js";import{n as ae,t as oe}from"./snapshot-runtime.js";import{a as T,i as E,o as D}from"./snapshot-runtime-binding.js";import{_ as O,a as k,c as A,g as j,h as M,m as N,o as P,p as F,s as I,t as L,u as R}from"./selector-runtime.js";async function z(e){let{device:t,action:r,inspectFacts:a,bindDevice:s}=e,c={command:`alert`,device:t,inspectFacts:a,bindDevice:s,...e.session?{}:{readiness:{}}};if(r===`wait`){let e=await C({...c,use:u});if(e.type===`response`)return{ok:!1,response:e.response};let t=e.runtime;return{ok:!0,execute:e=>V(t,e)}}if(r===`accept`){let e=await C({...c,use:i});if(e.type===`response`)return{ok:!1,response:e.response};let t=e.runtime;return{ok:!0,execute:e=>H(t,e)}}if(r===`dismiss`){let e=await C({...c,use:n});if(e.type===`response`)return{ok:!1,response:e.response};let t=e.runtime;return{ok:!0,execute:e=>U(t,e)}}let l=await C({...c,use:o});if(l.type===`response`)return{ok:!1,response:l.response};let d=l.runtime;return{ok:!0,execute:e=>B(d,e)}}async function B(e,t){return await e.operations.readAlert(t)}async function V(e,t){return await e.operations.awaitAlert(t)}async function H(e,t){return await e.operations.acceptAlert(t)}async function U(e,t){return await e.operations.dismissAlert(t)}async function W(e){let{req:t,logPath:n,sessionStore:r,session:i,device:a,inspectFacts:o,bindDevice:s}=e,c=await z({device:a,action:K(t.positionals?.[0]),session:i,inspectFacts:o,bindDevice:s});if(!c.ok)return c.response;i&&ie(t)===`may-invalidate`&&S(i);let u=x(n,t.flags,i?.appBundleId,i?.trace?.outPath),d=await c.execute({timeoutMs:l(t.positionals?.[1])??1e4,...G(i),execution:w(u)});return E(r,i,t,d),{ok:!0,data:d}}function G(e){return{...e?.appBundleId===void 0?{}:{appBundleId:e.appBundleId},...e?.surface===void 0?{}:{surface:e.surface}}}function K(e){return e===`accept`||e===`dismiss`||e===`wait`?e:`get`}function q(e){let t=e.positionals?.[0]?.toLowerCase(),n=e.positionals?.[1]?.toLowerCase(),r=e.positionals?.[2]?.toLowerCase();return t===`clear-app-state`?{ok:!0,parsed:{setting:t,state:`clear`,appBundleId:n===`clear`?e.positionals?.[2]:e.positionals?.[1]}}:!t||!n||t===`permission`&&!r||t===`location`&&n===`set`&&(!e.positionals?.[2]||!e.positionals?.[3])||t===`reset-keychain`&&e.positionals?.[2]!==void 0?b(`INVALID_ARGS`,g):{ok:!0,parsed:{setting:t,state:n,permissionTarget:r,permissionMode:e.positionals?.[3],latitude:e.positionals?.[2],longitude:e.positionals?.[3]}}}function se(e){if(e.setting===`permission`)return{permissionTarget:e.permissionTarget,permissionMode:e.permissionMode};if(e.setting===`location`&&e.state===`set`)return{latitude:_(e.latitude,`latitude`),longitude:_(e.longitude,`longitude`)}}function ce(e,t,n){let{setting:r,state:i}=e;return r===`clear-app-state`?{setting:`clear-app-state`,state:`clear`,appBundleId:t,platform:n}:r===`location`&&i===`set`?{setting:r,state:i,latitude:e.latitude,longitude:e.longitude,platform:n}:r===`permission`?{setting:r,state:i,permissionTarget:e.permissionTarget,permissionMode:e.permissionMode,platform:n}:{setting:r,state:i,appBundleId:t,platform:n}}function le(e){return typeof e.message==`string`&&e.message.length>0?e.message:void 0}async function ue(e,t,n){let{setting:r,state:i}=t,a=await e.operations.setSetting(t);return a&&typeof a==`object`?p({setting:r,state:i,...a},le(a)??n):{setting:r,state:i,...f(n)}}async function de(e){let{req:n,logPath:r,sessionStore:i,session:o,device:s,parsed:c,inspectFacts:l,bindDevice:u}=e,{setting:d,state:f}=c,p=await C({command:`settings`,device:s,use:a,inspectFacts:l,bindDevice:u,...o?{}:{readiness:{}}});if(p.type===`response`)return p.response;if(t(s)&&!h(d))return b(`INVALID_ARGS`,m(d));let g=c.appBundleId??o?.appBundleId;if(d===`clear-app-state`&&!g)return b(`INVALID_ARGS`,`settings clear-app-state requires an app id when no app is bound to the session`);o&&S(o),ee({level:`debug`,phase:`settings_apply`,data:ce(c,g,s.platform)});let _=se(c),v=x(r,n.flags,g,o?.trace?.outPath),y=await ue(p.runtime,{setting:d,state:f,...g===void 0?{}:{appBundleId:g},..._===void 0?{}:{options:_},execution:w(v)},d===`clear-app-state`?`Cleared user data for ${g}`:`Updated setting: ${d}`);return E(i,o,n,y),{ok:!0,data:y}}async function fe(e){return await ae({...e,command:`diff`,execute:async({runtime:e,sessionName:t,req:n,snapshotScope:r})=>{let i=await e.capture.diffSnapshot({session:t,interactiveOnly:n.flags?.snapshotInteractiveOnly,depth:n.flags?.snapshotDepth,scope:r,raw:n.flags?.snapshotRaw});return{data:i,record:{kind:`diff`,mode:`snapshot`,baselineInitialized:i.baselineInitialized,summary:i.summary}}}})}function pe(e){return e!==`sleep`}const me=[`application`,`window`,`tabbar`,`scrollbar`,`image`],he=new Set([`tab bar`]);async function ge(e,t){if(t.ok||!_e(t.error.details?.reason)||t.error.details?.captureStalled===!0||t.error.details?.captureTruncated===!0)return t;let n=await ve(e).catch(()=>null);return n?b(t.error.code,`${t.error.message}. Current surface: ${n.summary}.`,{...t.error.details??{},currentSurface:n.details}):t}function _e(e){return e===d.targetAbsent||e===d.stableTimeout}async function ve(e){let t={...e.req.flags,snapshotInteractiveOnly:!0},n=[...(await re({device:e.device,session:e.session,flags:t,logPath:e.logPath??``,captureData:async()=>await e.capture(te({flags:t,logPath:e.logPath??``,meta:e.req.meta,session:e.session,snapshotScope:void 0}))})).snapshot.nodes].sort(ye),r=J(n,6,{includeIdentifiers:!0});if(r.length===0)return null;let i=J(n.filter(e=>!Z(e)),4,{includeIdentifiers:!1}),a=J(n.filter(xe),4,{includeIdentifiers:!0});return{summary:(i.length>0?i:r.slice(0,4)).join(`, `),details:{labels:r,...a.length>0?{buttons:a}:{}}}}function J(e,t,n){let r=new Set,i=[];for(let a of e){let e=X(a,n);if(!(!e||r.has(e))&&(r.add(e),i.push(e),i.length>=t))break}return i}function ye(e,t){return Y(e)-Y(t)||be(e,t)}function Y(e){let t=!!X(e,{includeIdentifiers:!1});return(Z(e)?2:0)+ +!t}function be(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 X(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.replaceAll(/\s+/g,` `).slice(0,80):``}function Z(e){let t=r(`${e.type??``} ${e.role??``} ${e.subrole??``}`),n=`${e.label??``} ${e.value??``}`.trim().toLowerCase();return me.some(e=>t.includes(e))||he.has(n)||n.endsWith(`.fill`)}function xe(e){let t=`${e.type??``} ${e.role??``} ${e.subrole??``}`;return r(t).includes(`button`)}async function Q(e){let{req:t,sessionName:n,sessionStore:r}=e,i=Se(t);if(`ok`in i)return i;let a=i,{session:o,device:s}=await T(r,n,t.flags),c=await Ce(e,a,o,s);if(c&&`ok`in c)return c;let l=c,u=t.internal?.replayLandmarkGuard,d=we(a,o);if(`ok`in d)return d;let{waitParsed:f,staleRefsWarning:p}=d;return e.consumedSnapshot??={},a.kind===`sleep`?await $(e,f,o,s,l,p,u):R(await D(o,s,()=>$(e,f,o,s,l,p,u),e.platformResourceCleanup),L(e))}function Se(e){let t=c(e.positionals??[]);if(!t)return b(`INVALID_ARGS`,`wait requires a duration or text`);if(t.kind===`invalid`)return b(`INVALID_ARGS`,t.message);if(t.kind!==`absent`)return t;let n=v({depth:e.flags?.snapshotDepth,scope:e.flags?.snapshotScope});if(!n)return t;let r=y(n,`wait`);return b(r.code,r.message,r.details)}async function Ce(e,t,n,r){if(!pe(t.kind))return;let i=await F({command:`wait`,device:r,session:n,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?i.operations:i.response}function we(e,t){if(e.kind!==`ref`)return{waitParsed:e};let n=O(e.rawRef);return n.ok?{waitParsed:{...e,rawRef:n.ref},staleRefsWarning:ne({session:t,ref:n.ref,mintedGeneration:n.generation})}:n.response}async function $(e,t,n,r,i,a,o){let{req:s,sessionName:c,sessionStore:l}=e,u=A({...e,session:n,device:r,bound:i}),d=await I(async()=>{let e=await u.selectors.wait({session:c,requestId:s.meta?.requestId,target:Te(t,n,o)}),r=P(e);N(l,c,s,M(e),r,`landmark`);let i=j(e);return a?{...i,warning:a}:i}),f=i?await ge({req:s,logPath:e.logPath,session:n,device:r,capture:i.capture},d):d;return await k(e,f,`wait`)}function Te(e,t,n){switch(e.kind){case`sleep`:return{kind:`sleep`,durationMs:e.durationMs};case`selector`:return{kind:`selector`,selector:e.selectorExpression,timeoutMs:e.timeoutMs,...n?{recordedLandmark:n}:{}};case`absent`:return{kind:`absent`,selector:e.selectorExpression,timeoutMs:e.timeoutMs};case`ref`:return De(e,t);case`stable`:return{kind:`stable`,quietMs:e.quietMs,timeoutMs:e.timeoutMs};case`text`:return Oe(e);default:return Ee(e)}}function Ee(e){throw Error(`Unsupported wait positional target: ${String(e)}`)}function De(t,n){if(!n?.snapshot)throw new e(`INVALID_ARGS`,`Ref wait requires an existing snapshot in session.`);return{kind:`ref`,ref:t.rawRef,timeoutMs:t.timeoutMs}}function Oe(t){let n=s(t.text);if(!n.ok)throw new e(n.code,n.message);return{kind:`text`,text:n.text,timeoutMs:t.timeoutMs}}const ke={snapshot:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>await oe({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o}),diff:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>e.positionals?.[0]===`snapshot`?await fe({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o}):b(`INVALID_ARGS`,`diff currently supports only: diff snapshot`),wait:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>await Q({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o}),alert:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>{let{session:s,device:c}=await T(r,t,e.flags);return await D(s,c,async()=>await W({req:e,logPath:n,sessionStore:r,session:s,device:c,inspectFacts:i,bindDevice:a}),o)},settings:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>{let s=q(e);if(!s.ok)return s;let{session:c,device:l}=await T(r,t,e.flags);return await D(c,l,async()=>await de({req:e,logPath:n,sessionStore:r,session:c,device:l,parsed:s.parsed,inspectFacts:i,bindDevice:a}),o)}};async function Ae(e){let t=e.req.command,n=ke[t];return n?await n(e):null}export{Ae as handleSnapshotCommands};
|
package/dist/src/src3.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";var t=e({
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";var t=e({inventoryModule:()=>a,runtimeModule:()=>i,vegaPlugin:()=>o,vegaToolchainCheck:()=>s,withVegaToolProvider:()=>c});function n(e){return(async(...t)=>await(await e())(...t))}const r=Object.freeze({family:`vega`}),i=Object.freeze({...r,loadRuntime:async e=>{let{createVegaPlatformRuntime:t}=await import(`./runtime8.js`);return t(e)}}),a=Object.freeze({...r,loadInventory:async e=>{let{createVegaInventory:t}=await import(`./inventory5.js`);return t(e)}}),o={id:`vega`,platforms:[`vega`],providers:{platformGatedResolvers:[`vegaToolProvider`]},createInteractor:async(e,t)=>{let{createVegaInteractor:n}=await import(`./interactor2.js`);return n(e,t)}},s=n(async()=>(await import(`./doctor2.js`)).vegaToolchainCheck);async function c(e,t){let{withVegaToolProvider:n}=await import(`./tool-provider3.js`).then(e=>e.n);return await n(e,t)}export{o as i,i as n,t as r,a as t};
|
package/dist/src/src4.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";var t=e({
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";var t=e({appSwitcherHarmony:()=>v,backHarmony:()=>g,closeHarmonyApp:()=>o,createHarmonyInventoryModule:()=>D,doubleClickHarmony:()=>u,ensureHarmonyToolchainPathConfigured:()=>c,fillHarmony:()=>p,harmonyToolchainCheck:()=>E,homeHarmony:()=>_,longPressHarmony:()=>d,openHarmonyApp:()=>a,performHarmonyGesture:()=>h,pressHarmony:()=>l,pressHarmonyKeyboardKey:()=>y,readHarmonyGestureViewport:()=>w,runHarmonyHdc:()=>s,runtimeModule:()=>i,sampleHarmonyMemoryPerf:()=>T,screenshotHarmony:()=>x,scrollHarmony:()=>m,setHarmonyOrientation:()=>b,setHarmonySetting:()=>S,snapshotHarmony:()=>C,typeHarmony:()=>f});function n(e){return(async(...t)=>await(await e())(...t))}const r=Object.freeze({family:`harmonyos`}),i=Object.freeze({...r,loadRuntime:async e=>{let{createHarmonyPlatformRuntime:t}=await import(`./runtime6.js`);return t(e)}}),a=n(async()=>(await import(`./app-lifecycle2.js`)).openHarmonyApp),o=n(async()=>(await import(`./app-lifecycle2.js`)).closeHarmonyApp),s=n(async()=>(await import(`./hdc.js`)).runHarmonyHdc),c=n(async()=>(await import(`./hdc.js`)).ensureHarmonyToolchainPathConfigured),l=n(async()=>(await import(`./input-actions.js`)).pressHarmony),u=n(async()=>(await import(`./input-actions.js`)).doubleClickHarmony),d=n(async()=>(await import(`./input-actions.js`)).longPressHarmony),f=n(async()=>(await import(`./input-actions.js`)).typeHarmony),p=n(async()=>(await import(`./input-actions.js`)).fillHarmony),m=n(async()=>(await import(`./input-actions.js`)).scrollHarmony),h=n(async()=>(await import(`./input-actions.js`)).performHarmonyGesture),g=n(async()=>(await import(`./input-actions.js`)).backHarmony),_=n(async()=>(await import(`./input-actions.js`)).homeHarmony),v=n(async()=>(await import(`./input-actions.js`)).appSwitcherHarmony),y=n(async()=>(await import(`./input-actions.js`)).pressHarmonyKeyboardKey),b=n(async()=>(await import(`./input-actions.js`)).setHarmonyOrientation),x=n(async()=>(await import(`./screenshot.js`)).screenshotHarmony),S=n(async()=>(await import(`./settings.js`)).setHarmonySetting),C=n(async()=>(await import(`./snapshot2.js`)).snapshotHarmony),w=n(async()=>(await import(`./snapshot2.js`)).readHarmonyGestureViewport),T=n(async()=>(await import(`./perf.js`)).sampleHarmonyMemoryPerf),E=n(async()=>(await import(`./doctor.js`)).harmonyToolchainCheck);function D(e){let t=Object.freeze({hdcSdkPath:O(e.hdcSdkPath),devecoSdkHome:O(e.devecoSdkHome),commandLineToolsHome:O(e.commandLineToolsHome)});return Object.freeze({...r,loadInventory:async e=>{let{createHarmonyInventory:n}=await import(`./inventory3.js`);return n(e,t)}})}function O(e){return e?.trim()||void 0}export{b as _,u as a,t as b,d as c,l as d,y as f,m as g,x as h,D as i,a as l,i as m,g as n,p as o,w as p,o as r,_ as s,v as t,h as u,S as v,f as x,C as y};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-device",
|
|
3
|
-
"version": "0.21.
|
|
3
|
+
"version": "0.21.3",
|
|
4
4
|
"description": "Mobile app automation and verification for AI coding agents. CLI, MCP server, and typed Node.js API for iOS, Android, HarmonyOS, TV, web, macOS, and Linux.",
|
|
5
5
|
"mcpName": "io.github.callstack/agent-device",
|
|
6
6
|
"license": "MIT",
|
package/server.json
CHANGED
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
"url": "https://github.com/callstack/agent-device",
|
|
8
8
|
"source": "github"
|
|
9
9
|
},
|
|
10
|
-
"version": "0.21.
|
|
10
|
+
"version": "0.21.3",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"identifier": "agent-device",
|
|
15
|
-
"version": "0.21.
|
|
15
|
+
"version": "0.21.3",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
},
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
17a3645b2baca245adaa37e025a89eb35da7c5c6d53ae2d2d84862474f402cf0 agent-device-android-ime-helper-0.21.2.apk
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ee5d763221ede67f2b6e33e56d3487f3c05aab65a9a6999e456b273c7ccfecec agent-device-android-snapshot-helper-0.21.2.apk
|
package/dist/src/config2.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=18e4,t=6e4,n=6e4,r=2e4,i=12e4,a=1e4,o=15e3,s=2e4,c=15e3,l=2e4,u=1e3,d=5e3;export{l as a,u as c,s as d,o as f,i,d as l,e as n,t as o,r,a as s,n as t,c as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as e}from"./sdk-contracts.js";import{AsyncLocalStorage as t}from"node:async_hooks";let n=[];const r=new t;async function i(e,t){return await r.run([...e],t)}function a(e,t){for(let n of s()){if(!n.ownsDevice(e))continue;let r=n.getInteractor(e,t);if(r)return r}}function o(e){return s().some(t=>t.ownsDevice(e))}function s(){return r.getStore()??n}function c(e,t={}){y(e);let n=e.map(e=>e.provider);return{providerRuntimes:Object.freeze([...e]),providerRuntimeIds:n,providerRuntimeRequiredIds:m([...n,...t.providerRuntimeRequiredIds??[]]),leaseLifecycleProvider:h(e),recoverableProviderIds:e.filter(e=>e.recoverExpiredLease!==void 0).map(e=>e.provider),recoverExpiredLease:p(e),cloudArtifactProvider:g(e),providerAppCatalog:_(e),deviceInventorySource:v(e),appleRunnerProvider:u(e),appleRunnerScreenRecordingTransport:l(e),providerDeviceRuntimeScope:async t=>await i(e,t)}}function l(e){if(e.some(f))return t=>{for(let n of e){if(!f(n)||!n.ownsDevice(t.device))continue;let e=n.getAppleRunnerScreenRecordingTransport(t.device);if(e)return e}}}function u(e){if(e.some(d))return t=>{for(let n of e){if(!d(n)||!n.ownsDevice(t.device))continue;let e=n.getAppleRunnerProvider(t.device);if(e)return e}}}function d(e){return`getAppleRunnerProvider`in e&&typeof e.getAppleRunnerProvider==`function`}function f(e){return`getAppleRunnerScreenRecordingTransport`in e&&typeof e.getAppleRunnerScreenRecordingTransport==`function`}function p(t){if(t.some(e=>e.recoverExpiredLease!==void 0))return async n=>{let r=t.find(e=>S(e,n.leaseProvider));if(!r?.recoverExpiredLease)throw new e(`UNSUPPORTED_OPERATION`,`Provider ${n.leaseProvider??`unknown`} cannot recover an expired lease.`,{provider:n.leaseProvider,leaseId:n.leaseId});await r.recoverExpiredLease(n)}}function m(e){return[...new Set(e)]}function h(e){if(e.length!==0)return{allocate:async(t,n)=>await x(e,`allocate`,t,n),heartbeat:async(t,n)=>await x(e,`heartbeat`,t,n),release:async(t,n)=>await x(e,`release`,t,n)}}function g(e){if(e.length!==0)return{listCloudArtifacts:async t=>await b(e,t)}}function _(t){let n=t.filter(e=>e.appCatalog!==void 0);if(n.length!==0)return{supports:e=>n.some(t=>S(t,e)),list:async(t,r)=>{let i=n.find(e=>S(e,t.provider));if(!i?.appCatalog)throw new e(`UNSUPPORTED_OPERATION`,`Provider ${t.provider} does not expose an app catalog.`,{provider:t.provider});return await i.appCatalog(t,r)}}}function v(e){if(e.length!==0)return{discover:async(t,n)=>{n.throwIfAborted();for(let r of e){if(!S(r,t.leaseProvider))continue;let e=await r.deviceInventoryProvider(t,n);if(n.throwIfAborted(),e!=null)return{kind:`inventory`,devices:e}}return{kind:`declined`}}}}function y(e){let t=new Set;for(let n of e){if(t.has(n.provider))throw TypeError(`Duplicate provider device runtime: ${n.provider}`);t.add(n.provider)}}async function b(e,t){for(let n of e){if(!S(n,t.provider))continue;let e=await n.cloudArtifacts?.listCloudArtifacts?.(t);if(e)return e}}async function x(e,t,n,r){for(let i of e){if(!S(i,n.leaseProvider))continue;let e=i.leaseLifecycle[t],a=e?await e(n,r):void 0;if(a)return a}}function S(e,t){return e.provider===t}export{a as n,o as r,c as t};
|