agent-device 0.18.2 → 0.19.0
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-multitouch-helper/dist/{agent-device-android-multitouch-helper-0.18.2.apk → agent-device-android-multitouch-helper-0.19.0.apk} +0 -0
- package/android-multitouch-helper/dist/agent-device-android-multitouch-helper-0.19.0.apk.sha256 +1 -0
- package/android-multitouch-helper/dist/{agent-device-android-multitouch-helper-0.18.2.manifest.json → agent-device-android-multitouch-helper-0.19.0.manifest.json} +4 -4
- package/android-snapshot-helper/dist/{agent-device-android-snapshot-helper-0.18.2.apk → agent-device-android-snapshot-helper-0.19.0.apk} +0 -0
- package/android-snapshot-helper/dist/agent-device-android-snapshot-helper-0.19.0.apk.sha256 +1 -0
- package/android-snapshot-helper/dist/{agent-device-android-snapshot-helper-0.18.2.manifest.json → agent-device-android-snapshot-helper-0.19.0.manifest.json} +6 -6
- package/dist/apple-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTapPointPolicy.swift +28 -0
- package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AXSnapshotFallback.swift +9 -120
- package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +132 -66
- package/dist/apple-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +155 -0
- package/dist/apple-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+FlatSnapshotFiltering.swift +67 -0
- package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Interaction.swift +20 -74
- package/dist/apple-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScrollGesture.swift +64 -0
- package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SequenceExecution.swift +0 -177
- package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +81 -48
- package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCapturePlan.swift +102 -129
- package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +208 -46
- package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +82 -11
- package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +72 -0
- package/dist/src/agent-browser-tool.js +1 -0
- package/dist/src/android-adb.d.ts +64 -234
- package/dist/src/android-adb.js +1 -1
- package/dist/src/android.js +1 -5
- package/dist/src/app-lifecycle.js +7 -0
- package/dist/src/apple-runner-options.js +1 -0
- package/dist/src/apps.js +5 -11
- package/dist/src/artifacts.d.ts +4 -3
- package/dist/src/artifacts.js +1 -1
- package/dist/src/audio-probe.js +1 -1
- package/dist/src/batch.d.ts +2 -177
- package/dist/src/batch.js +1 -1
- package/dist/src/cli-help.js +64 -38
- package/dist/src/cli-output.js +1 -1
- package/dist/src/cli-runner.js +2 -0
- package/dist/src/cli.js +12 -41
- package/dist/src/client-metro-companion.js +1 -0
- package/dist/src/client.js +3 -0
- package/dist/src/command-metadata.js +1 -0
- package/dist/src/command-schema.js +22 -0
- package/dist/src/command-surface.js +1 -1
- package/dist/src/contracts.d.ts +2 -213
- package/dist/src/contracts.js +1 -1
- package/dist/src/debug-symbols.js +5 -3
- package/dist/src/device-input-state.js +2 -0
- package/dist/src/device-rotation.js +14 -0
- package/dist/src/devices.js +1 -1
- package/dist/src/devices2.js +1 -0
- package/dist/src/devices3.js +1 -0
- package/dist/src/find.js +1 -1
- package/dist/src/finders.d.ts +2 -81
- package/dist/src/finders.js +1 -1
- package/dist/src/generic.js +1 -1
- package/dist/src/handler-utils.js +1 -1
- package/dist/src/helper.js +2 -0
- package/dist/src/host-process.js +2 -0
- package/dist/src/index.d.ts +1265 -1768
- package/dist/src/index.js +1 -1
- package/dist/src/input-actions.js +3 -1
- package/dist/src/input-actions2.js +1 -0
- package/dist/src/install-source.d.ts +13 -14
- package/dist/src/install-source.js +1 -1
- package/dist/src/install-source2.js +1 -0
- package/dist/src/interaction-snapshot.js +1 -0
- package/dist/src/interaction.js +1 -1
- package/dist/src/interactor.js +2 -1
- package/dist/src/internal/bin.d.ts +1 -1
- package/dist/src/internal/bin.js +2 -5
- package/dist/src/internal/companion-tunnel.d.ts +1 -1
- package/dist/src/internal/companion-tunnel.js +1 -1
- package/dist/src/internal/daemon.d.ts +1 -1
- package/dist/src/internal/daemon.js +16 -1
- package/dist/src/internal/png-worker.d.ts +29 -26
- package/dist/src/internal/png-worker.js +1 -1
- package/dist/src/internal/update-check-entry.d.ts +1 -1
- package/dist/src/internal/update-check-entry.js +1 -1
- package/dist/src/io.d.ts +2 -85
- package/dist/src/io.js +1 -1
- package/dist/src/lease.js +1 -1
- package/dist/src/linux.js +1 -1
- package/dist/src/logcat.js +6 -0
- package/dist/src/manifest.js +1 -0
- package/dist/src/metro.d.ts +70 -113
- package/dist/src/metro.js +1 -1
- package/dist/src/metro2.js +1 -0
- package/dist/src/notifications.js +1 -1
- package/dist/src/output-path.js +1 -0
- package/dist/src/path-resolution.js +1 -0
- package/dist/src/png-worker-contract.js +1 -0
- package/dist/src/points.js +4 -0
- package/dist/src/project-runtime.js +1 -0
- package/dist/src/provider.js +1 -1
- package/dist/src/providers.js +1 -0
- package/dist/src/react-native.js +1 -1
- package/dist/src/record-trace-recording.js +2 -5
- package/dist/src/record-trace.js +1 -1
- package/dist/src/recording-provider.js +1 -1
- package/dist/src/registry.js +37 -0
- package/dist/src/remote-config.d.ts +2 -83
- package/dist/src/reporting.js +9 -0
- package/dist/src/rolldown-runtime.js +1 -0
- package/dist/src/runner-client.js +1 -0
- package/dist/src/runner-provider.js +1 -0
- package/dist/src/runner-sequence.js +1 -1
- package/dist/src/runtime-transport.js +1 -0
- package/dist/src/runtime.js +3 -0
- package/dist/src/scoped-provider.js +1 -0
- package/dist/src/sdk-android-adb.d.ts +144 -0
- package/dist/src/sdk-android-adb.js +4 -0
- package/dist/src/sdk-app-inventory.d.ts +4 -0
- package/dist/src/sdk-app-inventory.js +1 -0
- package/dist/src/sdk-batch-runner.d.ts +40 -0
- package/dist/src/sdk-batch-runner.js +2 -0
- package/dist/src/sdk-batch.js +2 -0
- package/dist/src/sdk-contracts.d.ts +386 -0
- package/dist/src/sdk-contracts.js +2 -0
- package/dist/src/sdk-finders.d.ts +61 -0
- package/dist/src/sdk-finders.js +1 -0
- package/dist/src/sdk-io.d.ts +79 -0
- package/dist/src/sdk-io.js +1 -0
- package/dist/src/sdk-remote-config.d.ts +140 -0
- package/dist/src/sdk-remote-config.js +1 -0
- package/dist/src/sdk-selectors.js +1 -0
- package/dist/src/selector-runtime.js +1 -1
- package/dist/src/selectors.d.ts +39 -137
- package/dist/src/selectors.js +1 -1
- package/dist/src/selectors2.js +1 -0
- package/dist/src/server.js +3 -2
- package/dist/src/session.js +10 -11
- package/dist/src/setting-state.js +1 -0
- package/dist/src/simctl.js +1 -0
- package/dist/src/simulator.js +1 -2
- package/dist/src/snapshot-diagnostics.js +3 -0
- package/dist/src/snapshot-helper.js +5 -0
- package/dist/src/snapshot-quality.js +1 -0
- package/dist/src/snapshot.js +1 -2
- package/dist/src/snapshot2.js +2 -0
- package/dist/src/{5560.js → timeouts.js} +1 -1
- package/dist/src/tool-provider.js +3 -0
- package/dist/src/tool-provider2.js +1 -0
- package/dist/src/ttl-memo.js +1 -0
- package/dist/src/update-check.js +1 -0
- package/dist/src/url.js +1 -0
- package/dist/src/version.js +1 -0
- package/dist/src/web.js +1 -1
- package/dist/src/xml.js +2 -0
- package/package.json +12 -19
- package/server.json +2 -2
- package/skills/agent-device/SKILL.md +2 -0
- package/android-multitouch-helper/dist/agent-device-android-multitouch-helper-0.18.2.apk.sha256 +0 -1
- package/android-snapshot-helper/dist/agent-device-android-snapshot-helper-0.18.2.apk.sha256 +0 -1
- package/apple-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +0 -443
- package/apple-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+FlatSnapshotFiltering.swift +0 -169
- package/apple-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScrollGesture.swift +0 -220
- package/dist/src/1404.js +0 -1
- package/dist/src/1986.js +0 -1
- package/dist/src/2748.js +0 -1
- package/dist/src/2948.js +0 -30
- package/dist/src/3006.js +0 -1
- package/dist/src/314.js +0 -1
- package/dist/src/3340.js +0 -8
- package/dist/src/4418.js +0 -1
- package/dist/src/4428.js +0 -3
- package/dist/src/485.js +0 -1
- package/dist/src/4917.js +0 -1
- package/dist/src/495.js +0 -5
- package/dist/src/5448.js +0 -3
- package/dist/src/5484.js +0 -1
- package/dist/src/5643.js +0 -1
- package/dist/src/587.js +0 -1
- package/dist/src/5913.js +0 -4
- package/dist/src/6849.js +0 -1
- package/dist/src/6918.js +0 -1
- package/dist/src/6967.js +0 -1
- package/dist/src/760.js +0 -1
- package/dist/src/7871.js +0 -1
- package/dist/src/8184.js +0 -1
- package/dist/src/8225.js +0 -1
- package/dist/src/8391.js +0 -1
- package/dist/src/8404.js +0 -2
- package/dist/src/8414.js +0 -2
- package/dist/src/8875.js +0 -4
- package/dist/src/893.js +0 -1
- package/dist/src/8936.js +0 -1
- package/dist/src/9414.js +0 -1
- package/dist/src/9581.js +0 -22
- package/dist/src/9612.js +0 -1
- package/dist/src/9624.js +0 -1
- package/dist/src/9722.js +0 -38
- package/dist/src/devices~1.js +0 -1
- package/dist/src/devices~2.js +0 -1
- package/dist/src/input-actions~1.js +0 -1
- package/dist/src/rslib-runtime.js +0 -1
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunner.xcodeproj/project.pbxproj +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunner.xcodeproj/xcshareddata/xcschemes/AgentDeviceRunner.xcscheme +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/AgentDeviceRunnerUITests-Bridging-Header.h +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/AgentDeviceRunnerUITests.entitlements +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAXSnapshotBridge.h +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAXSnapshotBridge.m +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerObjCExceptionCatcher.h +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerObjCExceptionCatcher.m +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.h +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.m +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Environment.swift +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Exceptions.swift +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScreenRecorder.swift +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SystemModal.swift +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TvRemote.swift +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/AgentDeviceRunnerUITests.xctestplan +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/RecordingScripts/recording-overlay.swift +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/RecordingScripts/recording-resize.swift +0 -0
- /package/{apple-runner → dist/apple-runner}/AgentDeviceRunner/RecordingScripts/recording-trim.swift +0 -0
package/dist/src/7871.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import e from"node:crypto";import t,{promises as n}from"node:fs";import a from"node:path";import{Worker as r}from"node:worker_threads";import{fileURLToPath as i}from"node:url";import{intersectArea as s,isSparseSnapshotQualityVerdict as o,clamp as l,isNodeVisibleInEffectiveViewport as d,publicSnapshotCaptureAnnotations as u,now as c,sleep as p,scrollCommand as h,longPressCommand as f,appendScreenshotScriptFlags as m,focusCommand as w,recordingQualityInputToExportQuality as g,displayLabel as b,squaredDistance as y,buildMobileSnapshotPresentation as k,renderSnapshotQualityWarnings as v,buildSnapshotDisplayLines as x,rectCenter as A,formatRole as M,toBackendResult as I,successText as R,normalizedRect as P,swipeCommand as N,expandRect as S,resolveInteractionTarget as O,unionRects as D,toBackendContext as _,snapshotCaptureAnnotationsFrom as E,requireIntInRange as T,formatReactNativeOverlayWarning as C,pinchCommand as U,formatSnapshotLine as L}from"./2948.js";import{runCmd as $,whichCmd as B,emitDiagnostic as q}from"./8875.js";import{asAppError as G,toAppErrorCode as X,AppError as Y}from"./485.js";import{computeScreenshotDiffPixels as F,PNG as K,toBuffer as V,decodePng as z}from"./4418.js";import{normalizeRef as j,findNodeByRef as H,buildSnapshotPresentationKey as W,usesMobileSnapshotPresentation as J}from"./6849.js";import{findSelectorChainMatch as Z,extractNodeText as Q,findSnapshotAncestor as ee,buildSelectorChainForNode as et,resolveSelectorChain as en,findNodeByLabel as ea,resolveRefLabel as er,isNodeVisible as ei,extractReadableText as es,buildSnapshotNodeByIndex as eo,formatSelectorFailure as el,normalizeType as ed,isNodeEditable as eu,isFillableType as ec}from"./893.js";import{parseFindSelectorExpression as ep,findBestMatchesByLocator as eh,parseSelectorChain as ef}from"./587.js";import{resolveAppsFilter as em,assertResolvedAppsFilter as ew}from"./2748.js";let eg=/^-?\d+(\.\d+)?$/,eb=/^[^\s"\\]+$/,ey=new Map([["--count","count"],["--interval-ms","intervalMs"],["--hold-ms","holdMs"],["--jitter-px","jitterPx"]]),ek=new Map([["--count","count"],["--pause-ms","pauseMs"]]),ev=new Map([["--delay-ms","delayMs"]]);function ex(e){return"click"===e||"press"===e}function eA(e){return ex(e)||"longpress"===e}function eM(e){return"type"===e||"fill"===e}function eI(e){return eP(e,eN)}function eR(e){return JSON.stringify(e)}function eP(e,t){return t(e)?e:eR(e)}function eN(e){return eS(e)&&e.startsWith("@")||eg.test(e)}function eS(e){return eb.test(e)}function eO(e){let t=(e.positionals??[]).map(e=>eI(e));return[e.command,...t].join(" ")}function eD(e,t){let n=t.flags??{};if(ex(t.command)){"number"==typeof n.count&&e.push("--count",String(n.count)),"number"==typeof n.intervalMs&&e.push("--interval-ms",String(n.intervalMs)),"number"==typeof n.holdMs&&e.push("--hold-ms",String(n.holdMs)),"number"==typeof n.jitterPx&&e.push("--jitter-px",String(n.jitterPx)),!0===n.doubleTap&&e.push("--double-tap");let t=n.clickButton;t&&"primary"!==t&&e.push("--button",t);return}if("swipe"===t.command){"number"==typeof n.count&&e.push("--count",String(n.count)),"number"==typeof n.pauseMs&&e.push("--pause-ms",String(n.pauseMs)),("one-way"===n.pattern||"ping-pong"===n.pattern)&&e.push("--pattern",n.pattern);return}eM(t.command)&&"number"==typeof n.delayMs&&e.push("--delay-ms",String(n.delayMs))}function e_(e,t){t&&(("ios"===t.platform||"android"===t.platform)&&e.push("--platform",t.platform),"string"==typeof t.metroHost&&t.metroHost.length>0&&e.push("--metro-host",eP(t.metroHost,eS)),"number"==typeof t.metroPort&&e.push("--metro-port",String(t.metroPort)),"string"==typeof t.bundleUrl&&t.bundleUrl.length>0&&e.push("--bundle-url",eP(t.bundleUrl,eS)),"string"==typeof t.launchUrl&&t.launchUrl.length>0&&e.push("--launch-url",eP(t.launchUrl,eS)))}function eE(e,t){let n=[],a={},r=ex(e)?ey:"swipe"===e?ek:eM(e)?ev:void 0;for(let i=0;i<t.length;i+=1){let s=t[i];if(ex(e)&&"--double-tap"===s){a.doubleTap=!0;continue}let o=t[i+1];if(ex(e)&&"--button"===s&&void 0!==o){("primary"===o||"secondary"===o||"middle"===o)&&(a.clickButton=o),i+=1;continue}let l=r?.get(s);if(l&&void 0!==o){let e=eC(o);if(null!==e){a[l]=e,i+=1;continue}}if("swipe"===e&&"--pattern"===s&&void 0!==o){("one-way"===o||"ping-pong"===o)&&(a.pattern=o),i+=1;continue}n.push(s)}return{positionals:n,flags:a}}function eT(e){let t=[],n={};for(let a=0;a<e.length;a+=1){let r=e[a],i=e[a+1];if("--platform"===r&&void 0!==i){("ios"===i||"android"===i)&&(n.platform=i),a+=1;continue}if("--metro-host"===r&&void 0!==i){n.metroHost=i,a+=1;continue}if("--metro-port"===r&&void 0!==i){let e=eC(i);null!==e&&(n.metroPort=e),a+=1;continue}if("--bundle-url"===r&&void 0!==i){n.bundleUrl=i,a+=1;continue}if("--launch-url"===r&&void 0!==i){n.launchUrl=i,a+=1;continue}t.push(r)}return{positionals:t,flags:n}}function eC(e){if(!e)return null;let t=Number(e);return!Number.isFinite(t)||t<0?null:Math.floor(t)}function eU(e){var t;let n=[],a={};for(let t of e){if("--relaunch"===t){a.relaunch=!0;continue}n.push(t)}let r=eT(n);return{positionals:r.positionals,flags:a,runtime:(t=r.flags).platform||t.metroHost||void 0!==t.metroPort||t.bundleUrl||t.launchUrl?r.flags:void 0}}function eL(e,t={}){let n=[e.command];if("snapshot"===e.command)e.flags?.snapshotInteractiveOnly&&n.push("-i"),"number"==typeof e.flags?.snapshotDepth&&n.push("-d",String(e.flags.snapshotDepth)),e.flags?.snapshotScope&&n.push("-s",eI(e.flags.snapshotScope)),e.flags?.snapshotRaw&&n.push("--raw");else if("open"===e.command){for(let t of e.positionals??[])n.push(eI(t));e.flags?.relaunch&&n.push("--relaunch"),e_(n,e.runtime)}else if("runtime"===e.command)!function(e,t,n={}){let a=t.positionals??[];for(let t of n.includeAllPositionals?a:a.slice(0,1))e.push(eP(t,eS));e_(e,t.flags)}(n,e,{includeAllPositionals:t.runtimeIncludeAllPositionals});else if("record"===e.command)!function(e,t){let[n,...a]=t.positionals??[];for(let t of(n&&e.push(eP(n,eS)),a))e.push(eI(t));"number"==typeof t.flags?.fps&&e.push("--fps",String(t.flags.fps)),"number"==typeof t.flags?.screenshotMaxSize&&e.push("--max-size",String(t.flags.screenshotMaxSize)),("number"==typeof t.flags?.quality||"string"==typeof t.flags?.quality)&&e.push("--quality",String(t.flags.quality)),t.flags?.hideTouches&&e.push("--hide-touches")}(n,e);else if("screenshot"===e.command){for(let t of e.positionals??[])n.push(eI(t));m(n,e.flags)}else{for(let t of e.positionals??[])n.push(eI(t));eD(n,e)}return n.join(" ")}function e$(t,n){let a=e.createHash("sha256").update(t).digest(),r=e.createHash("sha256").update(n).digest();return e.timingSafeEqual(a,r)}let eB={browserStack:"browserstack",awsDeviceFarm:"aws-device-farm"},eq=new Set(Object.values(eB));function eG(e){return void 0!==e&&eq.has(e)}let eX=["status","get","dismiss","enter","return"];function eY(e){return eX.includes(e)}function eF(e){let t=e?.trim().split(/\s+/,1)[0];if(!t||!t.startsWith("@")||t.length<3)return null;let n=t.slice(1);return/^[A-Za-z_-]*\d[\w-]*$/i.test(n)||/^(?:ref|node|element|el)[\w-]*$/i.test(n)?t:null}class eK extends Error{}let eV=null,ez=!1,ej=!1,eH=0,eW=new Map;function eJ(e){ez=!0,ej||(ej=!0,q({level:"warn",phase:"png_worker_unavailable",data:{reason:e}}),process.emitWarning(`PNG worker unavailable, falling back to in-process PNG processing: ${e}`))}function eZ(e){let t=eW.get(e.id);t&&(eW.delete(e.id),e1(),e.ok?t.resolve(e.result):t.reject(new Y(X(e.error.code),e.error.message,e.error.details)))}function eQ(e,t){eV===e&&(eJ(t.message),eV=null,e.terminate().catch(()=>{}),e0(new eK(`PNG worker failed: ${t.message}`)))}function e0(e){let t=[...eW.values()];for(let n of(eW.clear(),t))n.reject(e)}function e1(){eV&&(eW.size>0?eV.ref():eV.unref())}function e2(){if(ez)return null;if(eV)return eV;let e=function(e,n){try{let r=i(e),s=a.extname(r)||".js";return[a.join(a.dirname(r),`${n}${s}`),a.join(a.dirname(r),"internal",`${n}${s}`)].find(e=>t.existsSync(e))??null}catch{return null}}(import.meta.url,"png-worker");if(!e)return eJ("worker entry module not found next to the current module"),null;try{let t=new r(e,{execArgv:e.endsWith(".ts")?["--experimental-strip-types"]:[]});return t.on("message",eZ),t.on("error",e=>{eQ(t,e)}),t.on("exit",e=>{eQ(t,Error(`PNG worker exited with code ${e}`))}),t.unref(),eV=t,t}catch(e){return eJ(`failed to spawn worker: ${e instanceof Error?e.message:String(e)}`),null}}async function e4(e,t){try{return await function(e){let t=e2();if(!t)return Promise.reject(new eK("PNG worker is unavailable"));let n=eH+=1;return new Promise((a,r)=>{eW.set(n,{resolve:a,reject:r}),e1();try{t.postMessage({...e,id:n})}catch(e){eW.delete(n),e1(),r(new eK(`failed to post job to PNG worker: ${e instanceof Error?e.message:String(e)}`))}})}(e)}catch(e){if(e instanceof eK)return t();throw e}}function e5(){e2()}async function e3(){let e=eV;eV=null,e0(new eK("PNG worker terminated")),e&&await e.terminate()}async function e8(e,t){let n=await e4({kind:"decode",png:e,label:t},()=>{let n=z(e,t);return{kind:"decode",width:n.width,height:n.height,data:n.data}});return new K({width:n.width,height:n.height,data:V(n.data)})}async function e6(e){return V((await e4({kind:"encode",width:e.width,height:e.height,data:e.data},()=>({kind:"encode",png:K.sync.write(e)}))).png)}async function e9(e){let{kind:t,...n}=await e4({kind:"diff-pixels",...e},()=>({kind:"diff-pixels",...F(e)}));return{...n,diffData:V(n.diffData)}}let e7=[0,187,255,255];function te(e,t,n,a){if(t<0||t>=e.width||n<0||n>=e.height)return;let r=(n*e.width+t)*4;e.data[r]=a[0],e.data[r+1]=a[1],e.data[r+2]=a[2],e.data[r+3]=a[3]}function tt(e,t,n){return Math.min(Math.max(e,t),n)}let tn=[{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:-1,y:0},{x:1,y:0},{x:-1,y:1},{x:0,y:1},{x:1,y:1}];function ta(e){let{mask:t,width:n,height:a,hooks:r}=e,i=new Uint8Array(t.length),s=new Int32Array(t.length),o=[];for(let e=0;e<t.length;e+=1){var l,d;if(!tr(t,i,e))continue;let u=0,c=(l=s,i[d=e]=1,l[0]=d,1),p=r.create(e);for(;u<c;){let e=s[u];u+=1,r.visit(p,e),c=function(e){let{mask:t,visited:n,queue:a,width:r,height:i,pixelIndex:s}=e,o=s%r,l=Math.floor(s/r),d=e.queueEnd;for(let e of tn){var u,c,p,h;let s=o+e.x,f=l+e.y;if(u=s,c=f,p=r,h=i,!(u>=0)||!(u<p)||!(c>=0)||!(c<h))continue;let m=f*r+s;tr(t,n,m)&&(d=function(e,t,n,a){return t[a]=1,e[n]=a,n+1}(a,n,d,m))}return d}({mask:t,visited:i,queue:s,queueEnd:c,width:n,height:a,pixelIndex:e})}o.push(p)}return o}function tr(e,t,n){return 1===e[n]&&1!==t[n]}let ti={icon:90,toggle:90,chevron:75,separator:45,visual:35,background:10},ts={leading:20,trailing:20,separator:10,unknown:0,background:-30};function to(e){return"background"!==e.likelyKind}function tl(e,t){return e.width>=.25*t.width||e.height>=.06*t.height}function td(e,t){let n,a=0;for(let r of t){let t=tf(e,r.rect);t<=a||(a=t,n=r)}return n}function tu(e){let t=[];for(let n of[...e].sort((e,t)=>e.rect.y-t.rect.y)){let e=t.find(e=>{var t,a;return t=e.rect,tf(t,a=n.rect)>0||Math.abs(A(t).y-A(a).y)<=.5*Math.max(t.height,a.height)});if(!e){t.push({rect:n.rect,blocks:[n]});continue}e.blocks.push(n),e.blocks.sort((e,t)=>e.rect.x-t.rect.x),e.rect=D([e.rect,n.rect])}return t}function tc(e,t){let n,a=A(e);for(let e of t){let t=Math.sqrt(y(a,A(e.rect)));n&&t>=n.distance||(n={block:e,distance:t})}return n}function tp(e){let t=th(e);return e.differentPixels>=24&&t.width>=3&&t.height>=3}function th(e){return{x:e.minX,y:e.minY,width:e.maxX-e.minX+1,height:e.maxY-e.minY+1}}function tf(e,t){return Math.max(0,Math.min(e.y+e.height,t.y+t.height)-Math.max(e.y,t.y))}async function tm(e){if(await B("tesseract"))try{let[t,n]=await Promise.all([tg(e.baselinePath),tg(e.currentPath)]);if(0!==t.exitCode||0!==n.exitCode)return;let a=tw(t.stdout,e.width,e.height),r=tw(n.stdout,e.width,e.height),i=function(e,t){let n=new Set,a=[];for(let i of e){var r;let e=tA(i.text),s=function(e,t,n,a){let r=null,i=1/0;for(let s=0;s<n.length;s+=1){if(a.has(s))continue;let o=n[s];if(tA(o.text)!==t)continue;let l=A(e.normalizedRect),d=y(l,A(o.normalizedRect));d>=i||(r=s,i=d)}return r}(i,e,t,n);if(null===s)continue;n.add(s);let o=function(e,t){let n={x:t.rect.x-e.rect.x,y:t.rect.y-e.rect.y,width:t.rect.width-e.rect.width,height:t.rect.height-e.rect.height},a=tR(t.rect.width/e.rect.width),r=tR(t.rect.height/e.rect.height),i=Math.abs(a-1)>=.08||Math.abs(r-1)>=.12;return{text:e.text,baselineRect:e.rect,currentRect:t.rect,delta:n,confidence:Math.round(100*Math.min(e.confidence,t.confidence))/100,possibleTextMetricMismatch:i}}(i,t[s]);r=o,(Math.abs(r.delta.x)>=2||Math.abs(r.delta.y)>=2||Math.abs(r.delta.width)>=2||Math.abs(r.delta.height)>=2||r.possibleTextMetricMismatch)&&a.push(o)}return a.sort((e,t)=>tb(t)-tb(e)).slice(0,12)}(a,r),s=function(e){let t=[];for(let n of[...e].sort((e,t)=>e.currentRect.y-t.currentRect.y)){let e=t.find(e=>32>=Math.abs(n.delta.x-tM(e.map(e=>e.delta.x))));e?e.push(n):t.push([n])}return t.filter(e=>e.length>=2).map(ty).filter(e=>e.yRange.max-e.yRange.min<=60).sort((e,t)=>tk(t)-tk(e)).slice(0,4)}(i);if(0===a.length&&0===r.length)return;return{provider:"tesseract",baselineBlocks:a.length,currentBlocks:r.length,baselineBlocksRaw:a,currentBlocksRaw:r,matches:i,...s.length>0?{movementClusters:s}:{}}}catch{return}}function tw(e,t,n){let[a,...r]=e.split(/\r?\n/);if(!a)return[];let i=new Map(a.split(" ").map((e,t)=>[e,t])),s=[];for(let e of r){var o;if(!e.trim())continue;let t=e.split(" "),n=tx(t,i,"level"),a=tv(t,i,"text").trim(),r=tx(t,i,"conf");if(5!==n||(o=a,!/[\p{L}\p{N}]/u.test(o))||r<0)continue;let l=tx(t,i,"left"),d=tx(t,i,"top"),u=tx(t,i,"width"),c=tx(t,i,"height");u<=0||c<=0||s.push({key:[tv(t,i,"page_num"),tv(t,i,"block_num"),tv(t,i,"par_num"),tv(t,i,"line_num")].join(":"),text:a,confidence:r,rect:{x:l,y:d,width:u,height:c}})}let l=new Map;for(let e of s){let t=l.get(e.key);t?t.push(e):l.set(e.key,[e])}return Array.from(l.values()).flatMap(e=>(function(e){let t=[...e].sort((e,t)=>e.rect.x-t.rect.x),n=[],a=[];for(let e of t){let t=a.at(-1);if(!t){a.push(e);continue}if(e.rect.x-(t.rect.x+t.rect.width)>Math.max(48,2.5*Math.max(t.rect.height,e.rect.height))){n.push(a),a=[e];continue}a.push(e)}return a.length>0&&n.push(a),n})(e)).map(e=>(function(e,t,n){if(0===e.length)return null;let a=[...e].sort((e,t)=>e.rect.x-t.rect.x),r=D(a.map(e=>e.rect)),i=Math.round(100*tM(a.map(e=>e.confidence)))/100;return{text:a.map(e=>e.text).join(" "),confidence:i,rect:r,normalizedRect:P({x:tI(r.x/t),y:tI(r.y/n),width:tI(r.width/t),height:tI(r.height/n)})}})(e,t,n)).filter(e=>null!==e)}function tg(e){return $("tesseract",[e,"stdout","-l","eng","tsv"],{allowFailure:!0,timeoutMs:1e4})}function tb(e){return Math.abs(e.delta.x)+Math.abs(e.delta.y)+Math.abs(e.delta.width)+Math.abs(e.delta.height)+25*!!e.possibleTextMetricMismatch}function ty(e){let t=e.map(e=>e.delta.x),n=e.map(e=>e.delta.y);return{texts:e.map(e=>e.text),xRange:{min:Math.min(...t),max:Math.max(...t)},yRange:{min:Math.min(...n),max:Math.max(...n)}}}function tk(e){return 2*Math.abs((e.xRange.min+e.xRange.max)/2)+Math.abs((e.yRange.min+e.yRange.max)/2)}function tv(e,t,n){let a=t.get(n);return void 0===a?"":e[a]??""}function tx(e,t,n){let a=Number(tv(e,t,n));return Number.isFinite(a)?a:0}function tA(e){return e.trim().replace(/\s+/g," ").toLowerCase()}function tM(e){return e.reduce((e,t)=>e+t,0)/e.length}function tI(e){return Math.round(100*e*100)/100}function tR(e){return Math.round(1e3*e)/1e3}function tP(e,t,n,a){return{r:Math.round(e/a),g:Math.round(t/a),b:Math.round(n/a)}}function tN(e){return .2126*e.r+.7152*e.g+.0722*e.b}function tS(e){return`#${tO(e.r)}${tO(e.g)}${tO(e.b)}`}function tO(e){return e.toString(16).padStart(2,"0")}function tD(e){return Math.round(100*e*100)/100}let t_=255*Math.sqrt(3);async function tE(e,t,r={}){var i,o,d,u,c;let p,h,f,m;await tT(e,"Baseline image not found"),await tT(t,"Current screenshot not found");let w=r.outputPath,[g,b]=await Promise.all([n.readFile(e),n.readFile(t)]),[y,k]=await Promise.all([e8(g,"baseline screenshot"),e8(b,"current screenshot")]);tC(y.width,y.height,"baseline screenshot",r.maxPixels),tC(k.width,k.height,"current screenshot",r.maxPixels);let v=r.threshold??.1;if(y.width!==k.width||y.height!==k.height){let e=y.width*y.height;return await tU(r.outputPath),{match:!1,mismatchPercentage:100,totalPixels:e,differentPixels:e,dimensionMismatch:{expected:{width:y.width,height:y.height},actual:{width:k.width,height:k.height}}}}let x=y.width*y.height,{diffData:A,diffMask:M,differentPixels:I}=await e9({width:y.width,height:y.height,baselineData:y.data,currentData:k.data,maxColorDistance:v*t_}),R=I>0?(o=(p=function(e){let{diffMask:t,baseline:n,current:a}=e,{width:r,height:i}=n;return ta({mask:t,width:r,height:i,hooks:{create:e=>{var t,n;let a,i;return a=(t=e)%(n=r),{minX:a,minY:i=Math.floor(t/n),maxX:a,maxY:i,differentPixels:0,baselineRed:0,baselineGreen:0,baselineBlue:0,currentRed:0,currentGreen:0,currentBlue:0}},visit:(e,t)=>{var i,s,o,l,d;let u,c,p;return i=e,s=t,o=r,l=n,d=a,u=s%o,c=Math.floor(s/o),p=4*s,void(i.minX=Math.min(i.minX,u),i.minY=Math.min(i.minY,c),i.maxX=Math.max(i.maxX,u),i.maxY=Math.max(i.maxY,c),i.differentPixels+=1,i.baselineRed+=l.data[p],i.baselineGreen+=l.data[p+1],i.baselineBlue+=l.data[p+2],i.currentRed+=d.data[p],i.currentGreen+=d.data[p+1],i.currentBlue+=d.data[p+2])}}})}(i={diffMask:M,baseline:y,current:k,totalPixels:x,differentPixels:I,maxRegions:r.maxRegions})).length<=2e3?function(e){let t=[];for(let r of e.sort((e,t)=>{let n=e.minY-t.minY;return 0!==n?n:e.minX-t.minX})){var n,a;let e=t.find(e=>{var t,n,a;return t=e,n=r,a=12,t.minX-a<=n.maxX&&n.minX-a<=t.maxX&&t.minY-a<=n.maxY&&n.minY-a<=t.maxY});if(!e){t.push({...r});continue}n=e,a=r,n.minX=Math.min(n.minX,a.minX),n.minY=Math.min(n.minY,a.minY),n.maxX=Math.max(n.maxX,a.maxX),n.maxY=Math.max(n.maxY,a.maxY),n.differentPixels+=a.differentPixels,n.baselineRed+=a.baselineRed,n.baselineGreen+=a.baselineGreen,n.baselineBlue+=a.baselineBlue,n.currentRed+=a.currentRed,n.currentGreen+=a.currentGreen,n.currentBlue+=a.currentBlue}return t}(p):p,o.flatMap(e=>{var t,n,a;let r;return(t=e,n=i.baseline.width,a=i.baseline.height,r=t.maxX-t.minX+1,t.maxY-t.minY+1>=Math.max(48,Math.round(.07*a))&&r>=.35*n)?function(e,t,n){var a;let r=function(e,t){let n=[],a=null;for(let r=0;r<e.length;r+=1){if(e[r]<=t){a??=r;continue}null!==a&&(r-a>=6&&n.push([a,r-1]),a=null)}return null!==a&&e.length-a>=6&&n.push([a,e.length-1]),n}((a=function(e,t,n){let a=[];for(let r=e.minY;r<=e.maxY;r+=1){let i=0;for(let a=e.minX;a<=e.maxX;a+=1)1===t[r*n+a]&&(i+=1);a.push(i)}return a}(e,t.diffMask,t.baseline.width)).map((e,t)=>{let n=0,r=0,i=Math.max(0,t-3),s=Math.min(a.length-1,t+3);for(let e=i;e<=s;e+=1)n+=a[e],r+=1;return Math.round(n/r)}),Math.max(1,Math.round((e.maxX-e.minX+1)*.08))),i=function(e,t,n){let a=[],r=e.minY;for(let[i,s]of t){let t=e.minY+Math.round((i+s)/2);t-r+1<n||e.maxY-t<n||(a.push([r,t]),r=t+1)}return a.push([r,e.maxY]),a}(e,r,n);if(i.length<=1)return[e];let s=i.map(([n,a])=>(function(e,t,n,a){let r=null;for(let o=t;o<=n;o+=1)for(let t=e.minX;t<=e.maxX;t+=1){var i,s;let e=o*a.baseline.width+t;1===a.diffMask[e]&&function(e,t,n,a,r,i){let s=4*t;e.minX=Math.min(e.minX,n),e.minY=Math.min(e.minY,a),e.maxX=Math.max(e.maxX,n),e.maxY=Math.max(e.maxY,a),e.differentPixels+=1,e.baselineRed+=r.data[s],e.baselineGreen+=r.data[s+1],e.baselineBlue+=r.data[s+2],e.currentRed+=i.data[s],e.currentGreen+=i.data[s+1],e.currentBlue+=i.data[s+2]}(r??={minX:i=t,minY:s=o,maxX:i,maxY:s,differentPixels:0,baselineRed:0,baselineGreen:0,baselineBlue:0,currentRed:0,currentGreen:0,currentBlue:0},e,t,o,a.baseline,a.current)}return r})(e,n,a,t)).filter(e=>null!==e);return s.length>1?s:[e]}(e,i,Math.max(24,Math.round(.03*i.baseline.height))):[e]})).sort((e,t)=>{let n=t.differentPixels-e.differentPixels;if(0!==n)return n;let a=e.minY-t.minY;return 0!==a?a:e.minX-t.minX}).slice(0,Math.max(0,i.maxRegions??8)).map((e,t)=>{var n,a,r,s,o,l,d,u,c,p,h;let f,m,w,g,b,y,k,v,x,A,M,I,R,N,S,O,D;return n=e,a=t+1,r={width:i.baseline.width,height:i.baseline.height,totalPixels:i.totalPixels,differentPixels:i.differentPixels},y={x:n.minX,y:n.minY,width:n.maxX-n.minX+1,height:n.maxY-n.minY+1},k={x:Math.round(n.minX+y.width/2),y:Math.round(n.minY+y.height/2)},v=tP(n.baselineRed,n.baselineGreen,n.baselineBlue,n.differentPixels),x=tP(n.currentRed,n.currentGreen,n.currentBlue,n.differentPixels),A=y.width*y.height,M=tD(n.differentPixels/A),I=Math.round(tN(v)),R=Math.round(tN(x)),N=(s=y,o=r.width,l=r.height,s.width>=.55*o&&s.height>=.12*l?"large-area":s.width>=2.5*s.height?"horizontal-band":s.height>=2.5*s.width?"vertical-band":"compact"),S=(f=A/r.totalPixels)>=.04?"large":f>=.01?"medium":"small",O=(d=v,u=x,m=tN(d),Math.abs(w=tN(u)-m)>=12?w>0?"brighter":"darker":Math.max(Math.abs(u.r-d.r),Math.abs(u.g-d.g),Math.abs(u.b-d.b))>=12?"color-shift":"mixed"),D=(c=k,p=r.width,h=r.height,g=c.x<p/3?"left":c.x>2*p/3?"right":"center",b=c.y<h/3?"top":c.y>2*h/3?"bottom":"middle","center"===g&&"middle"===b?"center":`${b}-${g}`),{index:a,rect:y,normalizedRect:P({x:tD(y.x/r.width),y:tD(y.y/r.height),width:tD(y.width/r.width),height:tD(y.height/r.height)}),differentPixels:n.differentPixels,shareOfDiffPercentage:tD(n.differentPixels/r.differentPixels),densityPercentage:M,shape:N,size:S,location:D,averageBaselineColorHex:tS(v),averageCurrentColorHex:tS(x),baselineLuminance:I,currentLuminance:R,dominantChange:O}}):[];if(I>0&&w){let e=new K({width:y.width,height:y.height,data:A});for(let t of R)t.rect.width<4||t.rect.height<4||function(e,t){let n=tt(t.x,0,e.width-1),a=tt(t.y,0,e.height-1),r=tt(t.x+t.width-1,0,e.width-1),i=tt(t.y+t.height-1,0,e.height-1);for(let t=0;t<2;t+=1){for(let s=n;s<=r;s+=1)te(e,s,a+t,e7),te(e,s,i-t,e7);for(let s=a;s<=i;s+=1)te(e,n+t,s,e7),te(e,r-t,s,e7)}}(e,t.rect);await n.mkdir(a.dirname(w),{recursive:!0}),await n.writeFile(w,await e6(e))}else await tU(r.outputPath);let N=I>0?await tm({baselinePath:e,currentPath:t,width:y.width,height:y.height}):void 0,O=N&&(N.matches.length>0||(N.movementClusters?.length??0)>0)?{provider:N.provider,baselineBlocks:N.baselineBlocks,currentBlocks:N.currentBlocks,matches:N.matches,...N.movementClusters?{movementClusters:N.movementClusters}:{}}:void 0,D=I>0&&N?(h=function(e){let t=[];for(let n of e.sort((e,t)=>e.minY-t.minY||e.minX-t.minX)){let e=t.find(e=>{var t,a,r;return t=e,a=n,r=10,t.minX-r<=a.maxX&&a.minX-r<=t.maxX&&t.minY-r<=a.maxY&&a.minY-r<=t.maxY});if(!e){t.push({...n});continue}e.minX=Math.min(e.minX,n.minX),e.minY=Math.min(e.minY,n.minY),e.maxX=Math.max(e.maxX,n.maxX),e.maxY=Math.max(e.maxY,n.maxY),e.differentPixels+=n.differentPixels}return t}((u=function(e,t,n,a){let r=new Uint8Array(e);if(!a)return r;for(let e of[...a.baselineBlocksRaw,...a.currentBlocksRaw])!function(e,t,n,a){let r=l(Math.floor(a.x),0,t-1),i=l(Math.floor(a.y),0,n-1),s=l(Math.ceil(a.x+a.width),0,t),o=l(Math.ceil(a.y+a.height),0,n);for(let n=i;n<o;n+=1)for(let a=r;a<s;a+=1)e[n*t+a]=0}(r,t,n,S(e.rect,8));return r}((d={diffMask:M,width:y.width,height:y.height,regions:R,ocr:N}).diffMask,d.width,d.height,d.ocr),c=d.width,ta({mask:u,width:c,height:d.height,hooks:{create:e=>{var t,n;let a,r;return a=(t=e)%(n=c),{minX:a,minY:r=Math.floor(t/n),maxX:a,maxY:r,differentPixels:0}},visit:(e,t)=>{var n,a,r;let i,s;return n=e,i=(a=t)%(r=c),s=Math.floor(a/r),void(n.minX=Math.min(n.minX,i),n.minY=Math.min(n.minY,s),n.maxX=Math.max(n.maxX,i),n.maxY=Math.max(n.maxY,s),n.differentPixels+=1)}}}))),f=tu(d.ocr?.currentBlocksRaw??[]),m=tu(d.ocr?.baselineBlocksRaw??[]),h.filter(tp).map(e=>{var t,n,a,r,i,o,l,u,c,p,h;let w,g,b,y,k,v,x,A,M,I;return t=e,n=d,a=f,r=m,y=function(e,t){let n,a=0;for(let r of t){let t=s(e,r.rect);t<=a||(a=t,n=r)}return n?.index}(b=th(t),n.regions),k=function(e,t,n){let a=td(e,t);if(a)return tc(e,a.blocks);let r=td(e,n);return r?tc(e,r.blocks):void 0}(b,a,r),v=function(e,t,n){if(e.height<=3&&e.width>=.12*n)return"separator";if(!t)return e.width>=.4*n?"background":"unknown";if(e.width>=.4*n)return"background";let a=e.x+e.width/2,r=t.x+t.width/2;return a<r-t.width/2?"leading":a>r+t.width/2?"trailing":e.width>=.35*n?"background":"unknown"}(b,k?.block.rect,n.width),x=(i=b,o=v,l=t.differentPixels,u=n,w=i.width/i.height,g=l/(i.width*i.height),"separator"===o?"separator":"background"===o?"background":"trailing"===o&&w>=1.5&&w<=3.8&&g>=.35?"toggle":"trailing"===o&&i.width<=.06*u.width&&i.height<=.04*u.height?"chevron":"leading"===o&&w>=.55&&w<=1.8?"icon":tl(i,u)?"background":"visual"),A={...y?{regionIndex:y}:{},slot:v,likelyKind:x,rect:b},{...y?{regionIndex:y}:{},slot:v,likelyKind:x,rect:b,...k?{nearestText:k.block.text.trim().replace(/^[^\p{L}\p{N}]+/u,"").replace(/^\p{L}\s+/u,"")}:{},score:(c=A,p=t.differentPixels,h=n,M=tl(c.rect,h)?-35:0,I=20*!!c.regionIndex,ti[c.likelyKind]+ts[c.slot]+I+M+Math.min(20,p/200))}}).filter(e=>e.rect.y>=.08*d.height).filter(to).sort((e,t)=>t.score-e.score).slice(0,Math.max(0,d.maxDeltas??12)).map((e,t)=>{var n;return n=e,{index:t+1,...n.regionIndex?{regionIndex:n.regionIndex}:{},slot:n.slot,likelyKind:n.likelyKind,rect:n.rect,...n.nearestText?{nearestText:n.nearestText}:{}}})):[],_=x>0?Math.round(I/x*1e4)/100:0;return{...I>0&&w?{diffPath:w}:{},...R.length>0?{regions:R}:{},...O?{ocr:O}:{},...D.length>0?{nonTextDeltas:D}:{},totalPixels:x,differentPixels:I,mismatchPercentage:_,match:0===I}}async function tT(e,t){try{await n.access(e)}catch{throw new Y("INVALID_ARGS",`${t}: ${e}`)}}function tC(e,t,n,a){if(null==a||a<=0)return;let r=e*t;if(!(r<=a))throw new Y("INVALID_ARGS",`${n} is ${r} pixels, which exceeds the configured maxImagePixels limit of ${a}`)}async function tU(e){if(e)try{await n.unlink(e)}catch(e){var t;if(!("object"==typeof(t=e)&&null!==t&&"code"in t&&"ENOENT"===t.code))throw e}}function tL(e){return e.width*e.height}function t$(e){return Math.round(100*e*100)/100}async function tB(e,t,n){if("path"===t.kind&&!e.policy.allowLocalInputPaths)throw new Y("INVALID_ARGS",`Local ${n.field??"input"} paths are not allowed by command policy`);try{return await e.artifacts.resolveInput(t,n)}catch(e){throw G(e)}}async function tq(e,t,n){if(t?.kind==="path"&&!e.policy.allowLocalOutputPaths)throw new Y("INVALID_ARGS","Local output paths are not allowed by command policy");try{return await e.artifacts.reserveOutput(t,{...n,visibility:n.visibility??"client-visible",requestedClientPath:t?.kind==="downloadableArtifact"?t.clientPath??n.requestedClientPath:n.requestedClientPath})}catch(e){throw G(e)}}async function tG(e,t){try{return await e.artifacts.createTempFile(t)}catch(e){throw G(e)}}let tX=async(e,t)=>{let n,a,r;if(!t.baseline)throw new Y("INVALID_ARGS","diff screenshot requires a baseline image");let i=function(e){if(null==e||""===e)return .1;let t=Number(e);if(Number.isNaN(t)||t<0||t>1)throw new Y("INVALID_ARGS","--threshold must be a number between 0 and 1");return t}(t.threshold),s=t.current??{kind:"live"};if(t.overlayRefs&&!tH(s))throw new Y("INVALID_ARGS","diff screenshot <current.png> cannot use --overlay-refs because saved-image comparisons have no live accessibility refs");let o=await tB(e,t.baseline,{usage:"diff screenshot baseline",field:"baseline"}),l=[];try{let d;d=tH(s)?(a=await tY(e,t)).path:(n=await tB(e,s,{usage:"diff screenshot current",field:"current"})).path,r=t.out?await tq(e,t.out,{field:"diffPath",ext:".png"}):void 0;let u=await tE(o.path,d,{threshold:i,outputPath:r?.path,maxPixels:e.policy.maxImagePixels});tH(s)&&(u=await tF(e,t,r?.path,u,l));let c=u.diffPath?await r?.publish():void 0;return c&&l.push(c),u.diffPath||await r?.cleanup?.(),{...u,...l.length>0?{artifacts:l}:{}}}catch(e){throw await r?.cleanup?.(),e}finally{await o.cleanup?.(),await n?.cleanup?.(),await a?.cleanup?.()}};async function tY(e,t){let n=await tG(e,{prefix:"agent-device-diff-current",ext:".png"});try{await tK(e,t,n.path,tV(t))}catch(e){throw await n.cleanup(),e}return n}async function tF(e,t,n,a,r){var i,o,l,d;if(!t.overlayRefs)return a;if(a.match||a.dimensionMismatch)return n&&await tj(n),a;let u=(i=t,o=n,i.currentOverlayOut?i.currentOverlayOut:i.out?.kind==="path"?{kind:"path",path:tz(o??i.out.path)}:i.out?.kind==="downloadableArtifact"?{kind:"downloadableArtifact",...i.out.clientPath?{clientPath:tz(i.out.clientPath)}:{},...i.out.fileName?{fileName:tz(i.out.fileName)}:{}}:void 0),c=await tq(e,u,{field:"currentOverlayPath",ext:".png"});try{let n=await tK(e,t,c.path,{overlayRefs:!0,...tV(t)}),i=await c.publish();return i&&r.push(i),{...a,currentOverlayPath:n.path??c.path,...n.overlayRefs?{currentOverlayRefCount:n.overlayRefs.length}:{},...a.regions&&n.overlayRefs?{regions:(l=a.regions,d=n.overlayRefs,l.map(e=>{var t,n;let a,r=(t=e,n=d,a=tL(t.rect),n.map(e=>{let n=e.overlayRect,r=s(t.rect,n);return r<=0?null:{ref:e.ref,...e.label?{label:e.label}:{},rect:n,overlayCoveragePercentage:t$(r/tL(n)),regionCoveragePercentage:t$(r/a)}}).filter(e=>null!==e).sort((e,t)=>{let n=t.regionCoveragePercentage-e.regionCoveragePercentage;return 0!==n?n:t.overlayCoveragePercentage-e.overlayCoveragePercentage}).slice(0,3).map(e=>({ref:e.ref,...e.label?{label:e.label}:{},rect:e.rect,regionCoveragePercentage:e.regionCoveragePercentage})));return r.length>0?{...e,currentOverlayMatches:r}:e}))}:{}}}catch(e){throw await c.cleanup?.(),e}}async function tK(e,t,n,a={}){if(!e.backend.captureScreenshot)throw new Y("UNSUPPORTED_OPERATION","screenshot is not supported by this backend");return await e.backend.captureScreenshot({session:t.session,requestId:t.requestId,signal:t.signal??e.signal,metadata:t.metadata},n,a)??{}}function tV(e){return{normalizeStatusBar:e.normalizeStatusBar??!0,...e.surface?{surface:e.surface}:{}}}function tz(e){let t=a.extname(e),n=t?e.slice(0,-t.length):e;return`${n}.current-overlay${t||".png"}`}async function tj(e){try{await n.unlink(tz(e))}catch(e){var t;if(!("object"==typeof(t=e)&&null!==t&&"code"in t&&"ENOENT"===t.code))throw e}}function tH(e){return"live"===e.kind}async function tW(e,t){if(!Number.isInteger(t)||t<1)throw new Y("INVALID_ARGS","Screenshot max size must be a positive integer");let a=await e8(await n.readFile(e),"screenshot"),r=Math.max(a.width,a.height);if(r<=t)return;let i=t/r,s=Math.max(1,Math.round(a.width*i)),o=Math.max(1,Math.round(a.height*i)),l=function(e,t,n){let a=new K({width:t,height:n});for(let r=0;r<n;r+=1){let i=r*e.height/n,s=(r+1)*e.height/n;for(let n=0;n<t;n+=1){let o=n*e.width/t,l=(n+1)*e.width/t,d=0,u=0,c=0,p=0,h=0;for(let t=Math.floor(i);t<Math.ceil(s);t+=1){let n=Math.min(t+1,s)-Math.max(t,i);for(let a=Math.floor(o);a<Math.ceil(l);a+=1){let r=n*(Math.min(a+1,l)-Math.max(a,o)),i=(t*e.width+a)*4;d+=(e.data[i]??0)*r,u+=(e.data[i+1]??0)*r,c+=(e.data[i+2]??0)*r,p+=(e.data[i+3]??0)*r,h+=r}}let f=(r*a.width+n)*4;a.data[f]=Math.round(d/h),a.data[f+1]=Math.round(u/h),a.data[f+2]=Math.round(c/h),a.data[f+3]=Math.round(p/h)}}return a}(a,s,o);await n.writeFile(e,await e6(l))}let tJ=async(e,t)=>{let n;if(!e.backend.captureScreenshot)throw new Y("UNSUPPORTED_OPERATION","screenshot is not supported by this backend");let a=await tq(e,t.out,{field:"path",ext:".png"});try{await e.backend.captureScreenshot({session:t.session,requestId:t.requestId,appId:t.appId,appBundleId:t.appBundleId,signal:t.signal??e.signal,metadata:t.metadata},a.path,{fullscreen:t.fullscreen,overlayRefs:t.overlayRefs,stabilize:t.stabilize,normalizeStatusBar:t.normalizeStatusBar,surface:t.surface}),void 0!==t.maxSize&&await tW(a.path,t.maxSize),n=await a.publish()}catch(e){throw await a.cleanup?.(),e}return{path:a.path,...n?{artifacts:[n]}:{},...R(`Saved screenshot: ${a.path}`)}};function tZ(e,t){let n=M(e.type??"Element"),a=b(e,n),r=!1===e.enabled?"disabled":"enabled",i=!0===e.selected?"selected":"unselected",s=!0===e.hittable?"hittable":"not-hittable";return[String(t??e.depth??0),n,a,r,i,s].join("|")}function tQ(e,t){return t.flatten?e.map(e=>({text:L(e,0,!1),comparable:tZ(e,0)})):x(e).map(e=>({text:e.text,comparable:tZ(e.node,e.depth)}))}function t0(e,t){return e.get(t)??0}function t1(e){return e.map(e=>({index:e.index,depth:e.depth,parentIndex:e.parentIndex,type:e.type,role:e.role,subrole:e.subrole,label:e.label,value:e.value,identifier:e.identifier,enabled:e.enabled,selected:e.selected,focused:e.focused,hittable:e.hittable,rect:e.rect,bundleId:e.bundleId,appName:e.appName,windowTitle:e.windowTitle,surface:e.surface,hiddenContentAbove:e.hiddenContentAbove,hiddenContentBelow:e.hiddenContentBelow,interactionBlocked:e.interactionBlocked,presentationHints:e.presentationHints}))}let t2=async(e,t)=>{var n;let a,r,i=await t5(e,t),s=function(e){var t,n,a,r,i;let{previous:s,current:o,options:l,identity:d}=e;if(!0===l.forceFull||!0===l.raw||!s||!1===s.comparisonSafe||!1===o.comparisonSafe||(t=s,n=o,a=d,t.backend&&n.backend&&t.backend!==n.backend||a?.previousAppBundleId&&a.currentAppBundleId&&a.previousAppBundleId!==a.currentAppBundleId)||!s.presentationKey||s.presentationKey!==o.presentationKey||(r=s,i=o,r.truncated!==i.truncated||JSON.stringify(t1(r.nodes))!==JSON.stringify(t1(i.nodes))))return;let u=l.scope?.trim();return{ageMs:Math.max(0,o.createdAt-s.createdAt),nodeCount:o.nodes.length,...!0===l.interactiveOnly?{interactiveOnly:!0}:{},...u?{scope:u}:{}}}({previous:i.session?.snapshot,current:i.snapshot,options:t,identity:{previousAppBundleId:i.session?.appBundleId,currentAppBundleId:i.result.appBundleId??i.session?.appBundleId}});return await e.sessions.set(t3(t.session,i)),{nodes:i.snapshot.nodes,truncated:i.snapshot.truncated??!1,visibility:function(e){let{nodes:t,backend:n,snapshotRaw:a}=e;if(a||!J(n))return{partial:!1,visibleNodeCount:t.length,totalNodeCount:t.length,reasons:[]};let r=k(t),i=new Set;return r.hiddenCount>0&&i.add("offscreen-nodes"),r.nodes.some(e=>e.hiddenContentAbove)&&i.add("scroll-hidden-above"),r.nodes.some(e=>e.hiddenContentBelow)&&i.add("scroll-hidden-below"),{partial:i.size>0,visibleNodeCount:r.nodes.length,totalNodeCount:t.length,reasons:[...i]}}({nodes:i.snapshot.nodes,backend:i.snapshot.backend,snapshotRaw:t.raw}),...u({...i.annotations,warnings:i.warnings}),...s?{unchanged:s}:{},...i.result.snapshotDiagnostics?{snapshotDiagnostics:i.result.snapshotDiagnostics}:{},...(a=(n=i).result.appName??n.session?.appName,r=n.result.appBundleId??n.session?.appBundleId,{...a||r?{appName:a??r}:{},...r?{appBundleId:r}:{}})}},t4=async(e,t)=>{let n=await t5(e,t),a=!0===t.interactiveOnly,r=n.session?.snapshot,i=t3(t.session,n);if(!r){let t=function(e,t={}){return tQ(e,t).length}(n.snapshot.nodes,{flatten:a});return await e.sessions.set(i),{mode:"snapshot",baselineInitialized:!0,summary:{additions:0,removals:0,unchanged:t},lines:[],...n.warnings.length>0?{warnings:n.warnings}:{}}}let s=function(e,t,n={}){let a=function(e,t){let n=e.length,a=t.length,r=n+a,i=new Map,s=[];i.set(1,0);for(let o=0;o<=r;o+=1){s.push(new Map(i));for(let r=-o;r<=o;r+=2){let l=r===-o||r!==o&&t0(i,r-1)<t0(i,r+1)?t0(i,r+1):t0(i,r-1)+1,d=l-r;for(;l<n&&d<a&&e[l].comparable===t[d].comparable;)l+=1,d+=1;if(i.set(r,l),l>=n&&d>=a)return function(e,t,n,a,r){let i=[],s=a,o=r;for(let a=e.length-1;a>=0;a-=1){let r=e[a],l=s-o,d=l===-a||l!==a&&t0(r,l-1)<t0(r,l+1)?l+1:l-1,u=t0(r,d),c=u-d;for(;s>u&&o>c;)i.push({kind:"unchanged",text:n[o-1].text}),s-=1,o-=1;if(0===a)break;s===u?(i.push({kind:"added",text:n[c].text}),o=c):(i.push({kind:"removed",text:t[u].text}),s=u)}return i.reverse(),i}(s,e,t,n,a)}}return[]}(tQ(e,n),tQ(t,n)),r={additions:0,removals:0,unchanged:0};for(let e of a)"added"===e.kind&&(r.additions+=1),"removed"===e.kind&&(r.removals+=1),"unchanged"===e.kind&&(r.unchanged+=1);return{summary:r,lines:a}}(r.nodes,n.snapshot.nodes,{flatten:a});return await e.sessions.set(i),{mode:"snapshot",baselineInitialized:!1,summary:s.summary,lines:s.lines,...n.warnings.length>0?{warnings:n.warnings}:{}}};async function t5(e,t){var n,a,r,i,s,o,l;let d,u,p,h,f;if(!e.backend.captureSnapshot)throw new Y("UNSUPPORTED_OPERATION","snapshot is not supported by this backend");let m=t.session??"default",w=await e.sessions.get(m),g=await e.backend.captureSnapshot({session:m,requestId:t.requestId,appId:w?.appId,appBundleId:w?.appBundleId,signal:t.signal??e.signal,metadata:t.metadata},{interactiveOnly:t.interactiveOnly,depth:t.depth,scope:t.scope,raw:t.raw}),b=(a=g,r=e,n=a.snapshot?a.snapshot:{nodes:a.nodes??[],truncated:a.truncated,backend:a.backend,createdAt:c(r)},n.presentationKey?n:{...n,presentationKey:W(t)}),y=E(g),k=c(e);return{snapshot:b,result:g,session:w,annotations:y,warnings:(d=[...(i={result:g,annotations:y,snapshot:b,options:t,session:w,capturedAt:b.createdAt??k,runtimeNow:k}).annotations.warnings??[]],i.annotations.quality&&d.push(...v(i.annotations.quality,i.snapshot.nodes)),d.push(...function(e){let t=e.annotations.analysis;if("android"!==e.snapshot.backend||!0!==e.options.interactiveOnly||e.snapshot.nodes.length>0||!t||(t.rawNodeCount??0)<12)return[];let n=[`Interactive snapshot is empty after filtering ${t.rawNodeCount} raw Android nodes. Likely causes: the app content is not accessibility-visible yet, a transient route change, or depth/filter options hid the target.`];return"number"==typeof e.options.depth&&"number"==typeof t.maxDepth&&t.maxDepth>=e.options.depth+2&&n.push(`Interactive output is empty at depth ${e.options.depth}; retry without -d.`),n}(i)),i.annotations.quality||(d.push(...function(e){if("xctest"!==e.snapshot.backend||!0!==e.options.interactiveOnly||1!==e.snapshot.nodes.length)return[];let t=e.snapshot.nodes[0];return t?.type!=="Application"?[]:["iOS interactive snapshot exposed only the application root. XCTest accessibility queries can fail to enumerate some simulator UI trees even when screenshots and direct gestures still work. Use screenshot as visual truth, try a scoped/full snapshot for diagnostics, and prefer direct selectors when known."]}(i)),d.push(...(u=new Set((s=i.snapshot.nodes).map(e=>e.parentIndex).filter(e=>void 0!==e)),s.filter(e=>!(u.has(e.index)||(e.type?.toLowerCase()??"").includes("text"))&&(e.label??"").split(", ").length>10).map(e=>{let t=(e.label??"").split(", ").length,n=e.identifier?` (${e.identifier})`:"";return`@${e.ref} [${e.type??"element"}]${n} merges ~${t} labels into a single accessibility element. The app likely marks a container as accessible, which hides every descendant from assistive tech and automation — the children cannot be addressed individually. Fix the app's accessibility (mark the rows, not the container); until then use screenshot as visual truth and coordinate taps.`})))),(p=function(e){if(e?.backend!=="uiautomator-dump")return;let t=e.fallbackReason?` Reason: ${e.fallbackReason}`:"";return`Android snapshot helper unavailable; using stock UIAutomator dump, which can time out on busy React Native UIs.${t}`}(i.annotations.androidSnapshot))&&d.push(p),(h=C(i.snapshot.nodes))&&d.push(h),(f=function(e){var t,n,a,r,i,s;let o=e.session?.snapshot;if(!e.annotations.freshness&&o&&(t=o,n=e.snapshot,void 0===t.presentationKey||void 0===n.presentationKey||t.presentationKey===n.presentationKey)&&(a=o,r=e.capturedAt,[r,e.runtimeNow].some(e=>{let t=e-a.createdAt;return t>=0&&t<=2e3}))&&(i=o.nodes.length,s=e.snapshot.nodes.length,!(i<12)&&s<=Math.floor(.2*i)))return t8}(i))&&d.push(f),d.push(...(o=i.annotations.freshness,l=i.snapshot.backend,o?.staleAfterRetries&&"android"===l?"stuck-route"===o.reason?[`Recent ${o.action} was followed by a nearly identical snapshot after ${o.retryCount} automatic retr${1===o.retryCount?"y":"ies"}. If you expected navigation or submit, the tree may still be stale. Use screenshot as visual truth, wait briefly, then re-snapshot once.`]:"sharp-drop"===o.reason?[t8]:[]:[])),Array.from(new Set(d)))}}function t3(e,t){let n=t.session?.name??e??"default";return{...t.session??{name:n},name:n,snapshot:t.snapshot,appName:t.result.appName??t.session?.appName,appBundleId:t.result.appBundleId??t.session?.appBundleId}}let t8="Recent snapshots dropped sharply in node count, which suggests stale or mid-transition UI. Use screenshot as visual truth, wait briefly, then re-snapshot once.",t6=async(e,t)=>await nt(e,t,"press"),t9=async(e,t)=>await nt(e,t,"click"),t7=async(e,t)=>{var n;if(!t.text)throw new Y("INVALID_ARGS","fill requires text");let a=await nr(e,t);if(a)return a;let r=await O(e,t,{action:"fill",requireInteractive:!0,promoteToHittableAncestor:!1});if(!e.backend.fill)throw new Y("UNSUPPORTED_OPERATION","fill is not supported by this backend");let i=nn(r),s=I(await e.backend.fill(_(e,t),i,t.text,{delayMs:t.delayMs})),o="node"in r?r.node?.type??"":"",l=o&&!ec(o,e.backend.platform)?`fill target ${n=r,n.target?.kind==="ref"?n.target.ref:n.target?.kind==="selector"?n.target.selector:"point"} resolved to "${o}", attempting fill anyway.`:void 0;return{...r,text:t.text,...l?{warning:l}:{},...s?{backendResult:s}:{}}},ne=async(e,t)=>{let n=t.text;if(!n)throw new Y("INVALID_ARGS","type requires text");let a=eF(n);if(a)throw new Y("INVALID_ARGS",`type does not accept a target ref like "${a}"`,{hint:`Use fill ${a} "text" to target that field, or press ${a} then type "text" to append.`});if(!e.backend.typeText)throw new Y("UNSUPPORTED_OPERATION","type is not supported by this backend");let r=T(t.delayMs??0,"delay-ms",0,1e4),i=I(await e.backend.typeText(_(e,t),n,{delayMs:r}));return{kind:"text",text:n,delayMs:r,...i?{backendResult:i}:{},...R(`Typed ${Array.from(n).length} chars`)}};async function nt(e,t,n){let a=await na(e,t,n);if(a)return a;let r=await O(e,t,{action:n,requireInteractive:!0,promoteToHittableAncestor:!0});if(!e.backend.tap)throw new Y("UNSUPPORTED_OPERATION","tap is not supported by this backend");let i=nn(r),s=I(await e.backend.tap(_(e,t),i,{button:t.button,count:t.count,intervalMs:t.intervalMs,holdMs:t.holdMs,jitterPx:t.jitterPx,doubleTap:t.doubleTap}));return{...r,...s?{backendResult:s}:{}}}function nn(e){if(!e.point)throw new Y("COMMAND_FAILED","Interaction target resolved without coordinates");return e.point}async function na(e,t,n){var a;if("click"!==n||"ref"!==t.target.kind||!e.backend.tapTarget||void 0!==(a=t).count||void 0!==a.intervalMs||void 0!==a.holdMs||void 0!==a.jitterPx||void 0!==a.doubleTap||void 0!==a.button&&"primary"!==a.button)return null;let r=I(await e.backend.tapTarget(_(e,t),{kind:"ref",ref:t.target.ref,...t.target.fallbackLabel?{fallbackLabel:t.target.fallbackLabel}:{}}));return{kind:"ref",target:{kind:"ref",ref:t.target.ref},...r?{backendResult:r}:{}}}async function nr(e,t){if("ref"!==t.target.kind||!e.backend.fillTarget)return null;let n=I(await e.backend.fillTarget(_(e,t),{kind:"ref",ref:t.target.ref,...t.target.fallbackLabel?{fallbackLabel:t.target.fallbackLabel}:{}},t.text,{delayMs:t.delayMs}));return{kind:"ref",target:{kind:"ref",ref:t.target.ref},text:t.text,...n?{backendResult:n}:{}}}function ni(e){return["visible","hidden","exists","editable","selected","text"].includes(e)}function ns(e){let{predicate:t,node:n,nodes:a,expectedText:r,platform:i}=e,s=Q(n),o=eu(n,i),l=!0===n.selected,u="text"===t?ei(n):function(e,t,n){var a,r,i;let s;if("android"===n&&!1===e.visibleToUser)return!1;if(no(e.rect))return function(e,t){return d(e,t)}(e,t);if(e.rect)return!1;if("android"!==n&&!0===e.hittable)return!0;let o=(a=e,r=t,i=n,s=eo(r),ee(r,a,s,e=>!function(e,t){if("android"===t&&!1===e.visibleToUser)return!1;let n=ed(e.type??"");return!(n.includes("application")||n.includes("window")||n.includes("scrollview")||n.includes("tableview")||n.includes("collectionview"))&&"table"!==n&&"list"!==n&&"listview"!==n&&("android"===t?!0===e.hittable&&no(e.rect):!0===e.hittable||no(e.rect))}(e,i)?null:e));return!!o&&(no(o.rect)?function(e,t){return d(e,t)}(o,t):"android"!==n&&!0===o.hittable)}(n,a,i),c=!1;switch(t){case"visible":c=u;break;case"hidden":c=!u;break;case"editable":c=o;break;case"selected":c=l;break;case"text":c=s===(r??"")}let p="text"===t?`expected="${r??""}" actual="${s}"`:`actual=${JSON.stringify({visible:u,editable:o,selected:l})}`;return{pass:c,actualText:s,details:p}}function no(e){return!!(e&&Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.width)&&Number.isFinite(e.height)&&e.width>0&&e.height>0)}async function nl(e,t){let n=t??"default",a=await e.sessions.get(n);if(!a)throw new Y("SESSION_NOT_FOUND","No active session. Run open first.");if(!a.snapshot)throw new Y("INVALID_ARGS","No snapshot in session. Run snapshot first.");return{sessionName:n,session:a,snapshot:a.snapshot}}async function nd(e,t,n={updateSession:!0}){let a=e.backend.captureSnapshot;if(!a)throw new Y("UNSUPPORTED_OPERATION","snapshot is not supported by this backend");let r=t.session??"default",i=await e.sessions.get(r),s=await a(_(e,t),{interactiveOnly:!1,depth:t.depth,scope:n.scope??t.scope,raw:t.raw,includeRects:n.includeRects}),l=s.snapshot??{nodes:s.nodes??[],truncated:s.truncated,backend:s.backend,...s.quality?{snapshotQuality:s.quality}:{},createdAt:c(e)};return n.updateSession&&i&&!o(l.snapshotQuality)&&await e.sessions.set({...i,snapshot:l}),{sessionName:r,session:i,snapshot:l}}async function nu(e,t,n){if(e.backend.readText){let a=await e.backend.readText(_(e,{session:t.sessionName}),n);if(a.text.trim())return a.text}return es(n)}let nc=async(e,t)=>{let n=t.locator??"any";if(!t.query)throw new Y("INVALID_ARGS","find requires a value");if("wait"===t.action)return await nk(e,t,n);let{capture:a,match:r}=await nv(e,t,n);if(!r)throw new Y("COMMAND_FAILED","find did not match any element");if("exists"===t.action)return{kind:"found",found:!0};let i=`@${r.ref}`;return"get_attrs"===t.action?{kind:"attrs",ref:i,node:r}:{kind:"text",ref:i,text:await nu(e,a,r),node:r}},np=async(e,t)=>{if("ref"===t.target.kind){let n=await nl(e,t.session),a=function(e,t,n){let a=j(t);if(!a)throw new Y("INVALID_ARGS",n.invalidRefMessage);let r=H(e,a)??(n.fallbackLabel.length>0?ea(e,n.fallbackLabel):null);if(!r)throw new Y("COMMAND_FAILED",n.notFoundMessage);return{ref:a,node:r}}(n.snapshot.nodes,t.target.ref,{fallbackLabel:t.target.fallbackLabel??"",invalidRefMessage:"get text requires a ref like @e2",notFoundMessage:`Ref ${t.target.ref} not found`}),r=et(a.node,e.backend.platform,{action:"get"}),i={kind:"ref",ref:`@${a.ref}`};return"attrs"===t.property?{kind:"attrs",target:i,node:a.node,selectorChain:r}:{kind:"text",target:i,text:await nu(e,n,a.node),node:a.node,selectorChain:r}}let n=await nI(e,t,t.session??"default",{selector:t.target.selector,disambiguateAmbiguous:"text"===t.property}),a=et(n.node,e.backend.platform,{action:"get"});if("attrs"===t.property)return{kind:"attrs",target:{kind:"selector",selector:n.selector},node:n.node,selectorChain:a};let r=await nu(e,n.capture,n.node);return{kind:"text",target:{kind:"selector",selector:n.selector},text:r,node:n.node,selectorChain:a}},nh=async(e,t)=>{let n=await np(e,{...t,property:"text",target:t.target});if("text"!==n.kind)throw new Y("COMMAND_FAILED","getText returned non-text result");return n},nf=async(e,t)=>{let n=await np(e,{...t,property:"attrs",target:t.target});if("attrs"!==n.kind)throw new Y("COMMAND_FAILED","getAttrs returned non-attrs result");return n},nm=async(e,t)=>{var n;if(!ni(t.predicate))throw new Y("INVALID_ARGS","is requires predicate: visible|hidden|exists|editable|selected|text");if("text"===t.predicate&&!t.expectedText)throw new Y("INVALID_ARGS","is text requires expected text value");let a="visible"===(n=t.predicate)||"hidden"===n,r=await nd(e,t,{updateSession:!0,includeRects:a}),i=ef(t.selector);if("exists"===t.predicate){let n=Z(r.snapshot.nodes,i,{platform:e.backend.platform});if(!n)throw new Y("COMMAND_FAILED",el(i,[],{unique:!1}));return{predicate:t.predicate,pass:!0,selector:n.selector.raw,matches:n.matches,selectorChain:i.selectors.map(e=>e.raw)}}let s=en(r.snapshot.nodes,i,{platform:e.backend.platform,requireRect:!1,requireUnique:!0,disambiguateAmbiguous:!1});if(!s)throw new Y("COMMAND_FAILED",el(i,[],{unique:!0}),{command:"is",reason:"selector_not_found",predicate:t.predicate,selector:i.raw});let o=ns({predicate:t.predicate,node:s.node,nodes:r.snapshot.nodes,expectedText:t.expectedText,platform:e.backend.platform});if(!o.pass)throw new Y("COMMAND_FAILED",`is ${t.predicate} failed for selector ${s.selector.raw}: ${o.details}`,{command:"is",reason:"predicate_failed",predicate:t.predicate,selector:s.selector.raw,predicateDetails:o.details});return{predicate:t.predicate,pass:!0,selector:s.selector.raw,..."text"===t.predicate?{text:o.actualText}:{},selectorChain:i.selectors.map(e=>e.raw)}},nw=async(e,t)=>await nm(e,{...t,predicate:"visible",selector:t.target.selector}),ng=async(e,t)=>await nm(e,{...t,predicate:"hidden",selector:t.target.selector}),nb=async(e,t)=>{if("sleep"===t.target.kind)return await p(e,t.target.durationMs),{kind:"sleep",waitedMs:t.target.durationMs};if("ref"===t.target.kind){let n=await nl(e,t.session),a=j(t.target.ref);if(!a)throw new Y("INVALID_ARGS",`Invalid ref: ${t.target.ref}`);let r=H(n.snapshot.nodes,a),i=r?er(r,n.snapshot.nodes):void 0;if(!i)throw new Y("COMMAND_FAILED",`Ref ${t.target.ref} not found or has no label`);return await nA(e,t,i,t.target.timeoutMs)}if("selector"===t.target.kind)return await nx(e,t,t.target.selector,t.target.timeoutMs);if(!t.target.text)throw new Y("INVALID_ARGS","wait requires text");return await nA(e,t,t.target.text,t.target.timeoutMs)},ny=async(e,t)=>{let n=await nb(e,{...t,target:{kind:"text",text:t.text,timeoutMs:t.timeoutMs}});if("text"!==n.kind)throw new Y("COMMAND_FAILED","waitForText returned non-text result");return n};async function nk(e,t,n){let a=t.timeoutMs??1e4,r=c(e);for(;c(e)-r<a;){let{match:a}=await nv(e,t,n);if(a)return{kind:"found",found:!0,waitedMs:c(e)-r};await p(e,300)}throw new Y("COMMAND_FAILED","find wait timed out")}async function nv(e,t,n){let a=ep(n,t.query),r=await nd(e,t,{updateSession:!0,scope:function(e,t,n,a){if(!a&&"web"!==e.backend.platform)return"text"===t||"label"===t||"any"===t?n:void 0}(e,n,t.query,a)});if(o(r.snapshot.snapshotQuality))throw new Y("COMMAND_FAILED","find could not read the current accessibility tree",{reason:r.snapshot.snapshotQuality.reason,hint:"The snapshot quality verdict is sparse. Use screenshot as visual truth, navigate with coordinates if needed, then retry find after reaching a readable screen."});if(a){let t=en(r.snapshot.nodes,a,{platform:e.backend.platform,requireRect:!1,requireUnique:!1});return{capture:r,match:t?.node}}let i=eh(r.snapshot.nodes,n,t.query,{requireRect:!1}).matches[0];return{capture:r,match:i}}async function nx(e,t,n,a){let r=a??1e4,i=c(e),s=ef(n);for(;c(e)-i<r;){let n=Z((await nd(e,t,{updateSession:!0})).snapshot.nodes,s,{platform:e.backend.platform});if(n)return{kind:"selector",selector:n.selector.raw,waitedMs:c(e)-i};await p(e,300)}throw new Y("COMMAND_FAILED",`wait timed out for selector: ${n}`)}async function nA(e,t,n,a){let r=a??1e4,i=c(e);for(;c(e)-i<r;){if(e.backend.findText?(await e.backend.findText(_(e,t),n)).found:await nM(e,t,n))return{kind:"text",text:n,waitedMs:c(e)-i};await p(e,300)}throw new Y("COMMAND_FAILED",`wait timed out for text: ${n}`)}async function nM(e,t,n){return!!ea((await nd(e,t,{updateSession:!0})).snapshot.nodes,n)}async function nI(e,t,n,a){let r=await nd(e,{...t,session:n},{updateSession:!0}),i=ef(a.selector),s=en(r.snapshot.nodes,i,{platform:e.backend.platform,requireRect:!1,requireUnique:!0,disambiguateAmbiguous:a.disambiguateAmbiguous});if(!s)throw new Y("COMMAND_FAILED",el(i,[],{unique:!0}));return{capture:r,node:s.node,selector:s.selector.raw,ref:`@${s.node.ref}`}}function nR(e,t){if(void 0!==e)return nP(e,t)}function nP(e,t){let n=e?.trim();if(!n)throw new Y("INVALID_ARGS",`${t} must be a non-empty string`);return n}let nN=async(e,t={})=>{if(!e.backend.listDevices)throw new Y("UNSUPPORTED_OPERATION","admin.devices is not supported by this backend");return{kind:"adminDevices",devices:await e.backend.listDevices(_(e,t),t.filter)}},nS=async(e,t={})=>{if(!e.backend.bootDevice)throw new Y("UNSUPPORTED_OPERATION","admin.boot is not supported by this backend");let n=n$(t.target),a=I(await e.backend.bootDevice(_(e,t),n));return{kind:"deviceBooted",...n?{target:n}:{},...a?{backendResult:a}:{},...R("Booted device")}},nO=async(e,t={})=>{if(!e.backend.shutdownDevice)throw new Y("UNSUPPORTED_OPERATION","admin.shutdown is not supported by this backend");let n=n$(t.target),a=I(await e.backend.shutdownDevice(_(e,t),n));return{kind:"deviceShutdown",...n?{target:n}:{},...a?{backendResult:a}:{},...R("Shutdown device")}},nD=async(e,t)=>await nT(e,t,"install"),n_=async(e,t)=>await nT(e,t,"reinstall"),nE=async(e,t)=>await nT(e,t,"installFromSource");async function nT(e,t,n){let a="reinstall"===n?"reinstallApp":"installApp",r=e.backend[a];if(!r)throw new Y("UNSUPPORTED_OPERATION",`admin.${n} is not supported by this backend`);let i="app"in t&&void 0!==t.app?nP(t.app,"app"):void 0;if("installFromSource"!==n&&!i)throw new Y("INVALID_ARGS",`admin.${n} requires app`);let s=_(e,t),o=await nC(e,s,t.source);try{var l,d,u,c,p;let t,a,h,f,m,w,g,b,y=await r.call(e.backend,s,{...i?{app:i}:{},source:o.source});return l=n,d=i,u=o.source,c=y,t=I(c),a=nB(c,"appName"),h=nB(c,"appId"),f=nB(c,"bundleId"),m=nB(c,"packageName"),w=nB(c,"launchTarget"),g=nB(c,"installablePath"),b=nB(c,"archivePath"),{kind:"reinstall"===l?"appReinstalled":"installFromSource"===l?"appInstalledFromSource":"appInstalled",...d?{app:d}:{},source:u,...h?{appId:h}:{},...a?{appName:a}:{},...f?{bundleId:f}:{},...m?{packageName:m}:{},...w?{launchTarget:w}:{},...g?{installablePath:g}:{},...b?{archivePath:b}:{},...t?{backendResult:t}:{},...R(`${"reinstall"===l?"Reinstalled":"Installed"}: ${a??w??d??(p=u,"path"===p.kind?p.path:"uploadedArtifact"===p.kind?p.id:p.url)}`)}}finally{await o.cleanup?.()}}async function nC(e,t,n){let a=nL(n),r=await nU(e,a);try{let n=e.backend.resolveInstallSource?await e.backend.resolveInstallSource(t,r.source):r.source;return{source:nL(n),...r.cleanup?{cleanup:r.cleanup}:{}}}catch(e){if(r.cleanup)try{await r.cleanup()}catch{}throw e}}async function nU(e,t){if("url"===t.kind)return{source:t};let n=await tB(e,t,{usage:"admin.install",field:"source"});return{source:{kind:"path",path:n.path},...n.cleanup?{cleanup:n.cleanup}:{}}}function nL(e){if(!e||"object"!=typeof e)throw new Y("INVALID_ARGS","install source is required");if("path"===e.kind)return{kind:"path",path:nP(e.path,"source.path")};if("uploadedArtifact"===e.kind)return{kind:"uploadedArtifact",id:nP(e.id,"source.id")};if("url"===e.kind){let t=nP(e.url,"source.url");return function(e){let t;try{t=new URL(e)}catch{throw new Y("INVALID_ARGS",`Invalid install source URL: ${e}`)}if("http:"!==t.protocol&&"https:"!==t.protocol)throw new Y("INVALID_ARGS","Install source URL must use http or https")}(t),{kind:"url",url:t}}throw new Y("INVALID_ARGS","install source kind must be path, uploadedArtifact, or url")}function n$(e){if(!e)return;let t=nR(e.id,"target.id"),n=nR(e.name,"target.name"),a={...t?{id:t}:{},...n?{name:n}:{},...e.platform?{platform:e.platform}:{},...e.target?{target:e.target}:{},...void 0!==e.headless?{headless:e.headless}:{}};return Object.keys(a).length>0?a:void 0}function nB(e,t){let n=e[t];return"string"==typeof n&&n.length>0?n:void 0}let nq=/^[A-Za-z0-9_.:-]{1,64}$/,nG=async(e,t)=>{var n;if(!e.backend.openApp)throw new Y("UNSUPPORTED_OPERATION","apps.open is not supported by this backend");let a=function(e){var t;let n=nR(e.app,"app"),a=nR(e.appId,"appId"),r=nR(e.bundleId,"bundleId"),i=nR(e.packageName,"packageName"),s=nR(e.url,"url"),o=nR(e.activity,"activity"),l={...n?{app:n}:{},...a?{appId:a}:{},...r?{bundleId:r}:{},...i?{packageName:i}:{},...s?{url:s}:{},...o?{activity:o}:{}};if(!((t=l).app??t.appId??t.bundleId??t.packageName??t.url??t.activity))throw new Y("INVALID_ARGS","apps.open requires app, appId, bundleId, packageName, url, or activity");return l}(t),r=I(await e.backend.openApp(nH(e,t),a,{launchArgs:t.launchArgs,relaunch:t.relaunch}));return{kind:"appOpened",target:a,relaunch:!0===t.relaunch,...r?{backendResult:r}:{},...R(`Opened: ${(n=a).app??n.appId??n.bundleId??n.packageName??n.url??n.activity??"app"}`)}},nX=async(e,t={})=>{if(!e.backend.closeApp)throw new Y("UNSUPPORTED_OPERATION","apps.close is not supported by this backend");let n=nR(t.app,"app"),a=I(await e.backend.closeApp(nH(e,t),n));return{kind:"appClosed",...n?{app:n}:{},...a?{backendResult:a}:{},...R(n?`Closed: ${n}`:"Closed app")}},nY=async(e,t={})=>{if(!e.backend.listApps)throw new Y("UNSUPPORTED_OPERATION","apps.list is not supported by this backend");return{kind:"appsList",apps:await e.backend.listApps(nH(e,t),ew(t.filter))}},nF=async(e,t)=>{if(!e.backend.getAppState)throw new Y("UNSUPPORTED_OPERATION","apps.state is not supported by this backend");let n=nP(t.app,"app"),a=await e.backend.getAppState(nH(e,t),n);return{kind:"appState",app:n,state:a}},nK=async(e,t)=>{if(!e.backend.pushFile)throw new Y("UNSUPPORTED_OPERATION","apps.push is not supported by this backend");let n=nP(t.app,"app"),a=await nz(e,t.input);try{let r=await e.backend.pushFile(nH(e,t),a.backendInput,n),i=I(r);return{kind:"appPushed",app:n,inputKind:a.inputKind,...i?{backendResult:i}:{},...R(`Pushed to ${n}`)}}finally{await a.cleanup?.()}},nV=async(e,t)=>{var n,a;if(!e.backend.triggerAppEvent)throw new Y("UNSUPPORTED_OPERATION","apps.triggerEvent is not supported by this backend");let r=function(e){let t=nP(e,"name");if(!nq.test(t))throw new Y("INVALID_ARGS",`Invalid apps.triggerEvent name: ${t}`,{hint:"Use 1-64 chars: letters, numbers, underscore, dot, colon, or dash."});return t}(t.name);n=t.payload,a=`apps.triggerEvent payload for "${r}"`,void 0!==n&&nj(n,a,8192);let i=I(await e.backend.triggerAppEvent(nH(e,t),{name:r,...t.payload?{payload:t.payload}:{}}));return{kind:"appEventTriggered",name:r,...t.payload?{payload:t.payload}:{},...i?{backendResult:i}:{},...R(`Triggered app event: ${r}`)}};async function nz(e,t){if(!t||"object"!=typeof t)throw new Y("INVALID_ARGS","apps.push requires an input");if("json"===t.kind)return nj(t.payload,"apps.push JSON payload",8192),{backendInput:{kind:"json",payload:t.payload},inputKind:"json"};let n=await tB(e,t,{usage:"apps.push",field:"input"});return{backendInput:{kind:"file",path:n.path},inputKind:"file",...n.cleanup?{cleanup:n.cleanup}:{}}}function nj(e,t,n){if(function(e,t){if(!e||"object"!=typeof e||Array.isArray(e))throw new Y("INVALID_ARGS",`${t} must be a JSON object`)}(e,t),Buffer.byteLength(function(e,t){try{let n=JSON.stringify(e);if("string"!=typeof n)throw new Y("INVALID_ARGS",`${t} must be JSON-serializable`);return n}catch{throw new Y("INVALID_ARGS",`${t} must be JSON-serializable`)}}(e,t),"utf8")>n)throw new Y("INVALID_ARGS",`${t} exceeds ${n} bytes`)}function nH(e,t){return{session:t.session,requestId:t.requestId,signal:t.signal??e.signal,metadata:t.metadata}}let nW=/(?:authorization|cookie|token|secret|password|passwd|api[-_]?key)/i,nJ=/\b[A-Za-z0-9_-]{16,}\.[A-Za-z0-9_-]{16,}\.[A-Za-z0-9_-]{16,}\b/g;function nZ(e){var t,n;let a=!1,r=e;return{value:(t=r=(r=(r=(r=(r=r.replaceAll(/(authorization|token|secret|password|passwd|api[-_]?key)=([^&\s]+)/gi,(e,t)=>(a=!0,`${String(t)}=[REDACTED]`))).replaceAll(/("(?:authorization|cookie|token|secret|password|passwd|api[-_]?key)"\s*:\s*")([^"]*)(")/gi,(e,t,n,r)=>(a=!0,`${String(t)}[REDACTED]${String(r)}`))).replaceAll(/\b(Bearer\s+)([^\s",;]+)/gi,(e,t)=>(a=!0,`${String(t)}[REDACTED]`))).replaceAll(/((?:authorization|cookie|token|secret|password|passwd|api[-_]?key)\s*[:=]\s*)([^\s,;&]+)/gi,(e,t)=>(a=!0,`${String(t)}[REDACTED]`))).replaceAll(nJ,()=>(a=!0,"[REDACTED]")),n=()=>{a=!0},r=/(https?:\/\/|token|secret|password|authorization|cookie|api[-_]?key)/i.test(t)?t.replaceAll(/https?:\/\/[^\s"'<>)]+/gi,e=>{let t=nQ(e);return t?(t.redacted&&n(),t.value):e}):t),redacted:a}}function nQ(e){try{let t=new URL(e),n=function(e){let t=!1;for(let n of Array.from(e.searchParams.keys()))nW.test(n)&&(e.searchParams.set(n,"[REDACTED]"),t=!0);return t}(t);return(t.username||t.password)&&(t.username="REDACTED",t.password="REDACTED",n=!0),{value:t.toString(),redacted:n}}catch{return}}let n0=/(?:authorization|cookie|token|secret|password|passwd|api[-_]?key)/i;function n1(e){if(!e)return{redacted:!1};let t=!1,n={};for(let[a,r]of Object.entries(e))if(n0.test(a))n[a]="[REDACTED]",t=!0;else{let e=n3(r,2048);n[a]=e.value??"",t||=e.redacted}return{value:n,redacted:t}}function n2(e){return void 0===e?{redacted:!1}:function(e){try{let t=JSON.parse(e),n=n5(t,nZ);return n8(JSON.stringify(n.value),2048,n.redacted)}catch{return}}(e)??n3(e,2048)}function n4(e){return n5(e,e=>n3(e,2048))}function n5(e,t){if(void 0===e)return{redacted:!1};if("string"==typeof e)return t(e);if(!e||"object"!=typeof e)return{value:e,redacted:!1};if(Array.isArray(e)){let n=!1;return{value:e.map(e=>{let a=n5(e,t);return n||=a.redacted,a.value}),redacted:n}}let n=!1,a={};for(let[r,i]of Object.entries(e)){if(n0.test(r)){a[r]="[REDACTED]",n=!0;continue}let e=n5(i,t);a[r]=e.value,n||=e.redacted}return{value:a,redacted:n}}function n3(e,t){if(void 0===e)return{redacted:!1};let n=nZ(e);return n8(n.value,t,n.redacted)}function n8(e,t,n){if(void 0===e)return{redacted:n};let a=e;return a.length>t&&(a=`${a.slice(0,t)}...[truncated]`,n=!0),{value:a,redacted:n}}let n6=async(e,t={})=>{var n,a;let r;if(!e.backend.readLogs)throw new Y("UNSUPPORTED_OPERATION","diagnostics.logs is not supported by this backend");return r=!0===(n=await e.backend.readLogs(await ae(e,t),{...at(a=t,100,500,"logs limit"),...void 0!==a.levels?{levels:aa(a.levels,"levels")}:{},...void 0!==a.search?{search:nP(a.search,"search")}:{},...void 0!==a.source?{source:nP(a.source,"source")}:{}})).redacted,{kind:"diagnosticsLogs",entries:n.entries.map(e=>{let t=n3(e.message,4096),n=n4(e.metadata);return r||=t.redacted||n.redacted,{...e.timestamp?{timestamp:e.timestamp}:{},...e.level?{level:e.level}:{},message:t.value??"",...e.source?{source:e.source}:{},...n.value?{metadata:n.value}:{}}}),...n.nextCursor?{nextCursor:n.nextCursor}:{},...n.timeWindow?{timeWindow:n.timeWindow}:{},...n.backend?{backend:n.backend}:{},redacted:r,...n.notes?{notes:n.notes}:{}}},n9=async(e,t={})=>{var n,a,r;let i;if(!e.backend.dumpNetwork)throw new Y("UNSUPPORTED_OPERATION","diagnostics.network is not supported by this backend");let s={...at(r=t,25,200,"network limit"),include:function(e){if(void 0===e)return"summary";if("summary"===e||"headers"===e||"body"===e||"all"===e)return e;throw new Y("INVALID_ARGS","network include must be summary, headers, body, or all")}(r.include)};return n=await e.backend.dumpNetwork(await ae(e,t),s),a=s.include??"summary",i=!0===n.redacted,{kind:"diagnosticsNetwork",entries:n.entries.map(e=>{var t;let n=e.url?nQ(t=e.url)??n3(t,2048):void 0,r="headers"===a||"all"===a?n1(e.requestHeaders):void 0,s="headers"===a||"all"===a?n1(e.responseHeaders):void 0,o="body"===a||"all"===a?n2(e.requestBody):void 0,l="body"===a||"all"===a?n2(e.responseBody):void 0,d=n4(e.metadata);return i||=(n?.redacted??!1)||(r?.redacted??!1)||(s?.redacted??!1)||(o?.redacted??!1)||(l?.redacted??!1)||d.redacted,{...e.timestamp?{timestamp:e.timestamp}:{},...e.method?{method:e.method}:{},...n?{url:n.value}:{},...void 0!==e.status?{status:e.status}:{},...void 0!==e.durationMs?{durationMs:e.durationMs}:{},...r?.value?{requestHeaders:r.value}:{},...s?.value?{responseHeaders:s.value}:{},...o?.value!==void 0?{requestBody:o.value}:{},...l?.value!==void 0?{responseBody:l.value}:{},...d.value?{metadata:d.value}:{}}}),...n.nextCursor?{nextCursor:n.nextCursor}:{},...n.timeWindow?{timeWindow:n.timeWindow}:{},...n.backend?{backend:n.backend}:{},redacted:i,...n.notes?{notes:n.notes}:{}}},n7=async(e,t={})=>{var n,a;let r;if(!e.backend.measurePerf)throw new Y("UNSUPPORTED_OPERATION","diagnostics.perf is not supported by this backend");return r=!0===(n=await e.backend.measurePerf(await ae(e,t),{...an(a=t),...void 0!==a.sampleMs?{sampleMs:T(a.sampleMs,"sampleMs",100,6e4)}:{},...void 0!==a.metrics?{metrics:aa(a.metrics,"metrics",20)}:{}})).redacted,{kind:"diagnosticsPerf",metrics:n.metrics.map(e=>{let t=n3(e.message,4096),n=n4(e.metadata);return r||=t.redacted||n.redacted,{name:e.name,...void 0!==e.value?{value:e.value}:{},...e.unit?{unit:e.unit}:{},...e.status?{status:e.status}:{},...void 0!==t.value?{message:t.value}:{},...n.value?{metadata:n.value}:{}}}),...n.startedAt?{startedAt:n.startedAt}:{},...n.endedAt?{endedAt:n.endedAt}:{},...n.backend?{backend:n.backend}:{},redacted:r,...n.notes?{notes:n.notes}:{}}};async function ae(e,t){let n=_(e,t),a=t.session?await e.sessions.get(t.session):void 0;return{...n,...t.appId??a?.appId?{appId:t.appId??a?.appId}:{},...t.appBundleId??a?.appBundleId?{appBundleId:t.appBundleId??a?.appBundleId}:{}}}function at(e,t,n,a){return{...an(e),...void 0!==e.cursor?{cursor:nP(e.cursor,"cursor")}:{},limit:void 0===e.limit?t:T(e.limit,a,1,n)}}function an(e){return{...void 0!==e.since?{since:nP(e.since,"since")}:{},...void 0!==e.until?{until:nP(e.until,"until")}:{}}}function aa(e,t,n=50){if(!Array.isArray(e))throw new Y("INVALID_ARGS",`${t} must be an array of strings`);if(e.length>n)throw new Y("INVALID_ARGS",`${t} must contain at most ${n} entries`);return e.map((e,n)=>nP(e,`${t}[${n}]`))}let ar=async(e,t)=>{let n=as(t.action,"record"),a="start"===n?e.backend.startRecording:e.backend.stopRecording;if(!a)throw new Y("UNSUPPORTED_OPERATION",`record ${n} is not supported by this backend`);let r=t.out?await tq(e,t.out,{field:"path",ext:".mp4"}):void 0;try{var i,s,o,l,d,u,c;let p,h,f,m,w=(i=t,s=r?.path,p={},s&&(p.outPath=s),h=(o=i.fps,void 0===o?void 0:T(o,"fps",1,60)),void 0!==h&&(p.fps=h),f=(l=i.maxSize,void 0===l?void 0:T(l,"maxSize",1,Number.MAX_SAFE_INTEGER)),void 0!==f&&(p.maxSize=f),m=function(e){if(void 0===e)return;let t=g(e);if(void 0===t)throw new Y("INVALID_ARGS","quality must be one of: medium, high (legacy numeric values 5-10 are accepted)");return t}(i.quality),void 0!==m&&(p.quality=m),void 0!==i.hideTouches&&(p.showTouches=!0!==i.hideTouches),p),b=await a.call(e.backend,_(e,t),w),y=await r?.publish();return d=n,u=b,c=y,{..."string"==typeof u.path?{path:u.path}:{},..."string"==typeof u.telemetryPath?{telemetryPath:u.telemetryPath}:{},..."string"==typeof u.warning?{warning:u.warning}:{},...ao(d,u,c,{startKind:"recordingStarted",stopKind:"recordingStopped",startMessage:"Recording started",stopMessage:"Recording stopped"})}}catch(e){throw await r?.cleanup?.(),e}},ai=async(e,t)=>{let n=as(t.action,"trace"),a="start"===n?e.backend.startTrace:e.backend.stopTrace;if(!a)throw new Y("UNSUPPORTED_OPERATION",`trace ${n} is not supported by this backend`);let r=t.out?await tq(e,t.out,{field:"outPath",ext:".trace"}):void 0;try{var i,s,o;let l={...r?.path?{outPath:r.path}:{}},d=await a.call(e.backend,_(e,t),l),u=await r?.publish();return i=n,s=d,o=u,{..."string"==typeof s.outPath?{outPath:s.outPath}:{},...ao(i,s,o,{startKind:"traceStarted",stopKind:"traceStopped",startMessage:"Trace started",stopMessage:"Trace stopped"})}}catch(e){throw await r?.cleanup?.(),e}};function as(e,t){if("start"===e||"stop"===e)return e;throw new Y("INVALID_ARGS",`${t} action must be start or stop`)}function ao(e,t,n,a){return{kind:"start"===e?a.startKind:a.stopKind,action:e,...n?{artifact:n}:{},backendResult:t,...R("start"===e?a.startMessage:a.stopMessage)}}let al=async(e,t={})=>{if(!e.backend.pressBack)throw new Y("UNSUPPORTED_OPERATION","system.back is not supported by this backend");let n=t.mode??"in-app";if("in-app"!==n&&"system"!==n)throw new Y("INVALID_ARGS","system.back mode must be in-app or system");let a=I(await e.backend.pressBack(_(e,t),{mode:n}));return{kind:"systemBack",mode:n,...a?{backendResult:a}:{},...R("Back")}},ad=async(e,t={})=>{if(!e.backend.pressHome)throw new Y("UNSUPPORTED_OPERATION","system.home is not supported by this backend");let n=I(await e.backend.pressHome(_(e,t)));return{kind:"systemHome",...n?{backendResult:n}:{},...R("Home")}},au=async(e,t)=>{if(!e.backend.rotate)throw new Y("UNSUPPORTED_OPERATION","system.rotate is not supported by this backend");let n=function(e){switch(e){case"portrait":case"portrait-upside-down":case"landscape-left":case"landscape-right":return e;default:throw new Y("INVALID_ARGS","system.rotate orientation must be portrait, portrait-upside-down, landscape-left, or landscape-right")}}(t.orientation),a=I(await e.backend.rotate(_(e,t),n));return{kind:"systemRotated",orientation:n,...a?{backendResult:a}:{},...R(`Rotated to ${n}`)}},ac=async(e,t={})=>{var n,a,r,i,s,o,l;if(!e.backend.setKeyboard)throw new Y("UNSUPPORTED_OPERATION","system.keyboard is not supported by this backend");let d=t.action??"status";if(!eY(d))throw new Y("INVALID_ARGS","system.keyboard action must be status, get, dismiss, enter, or return");let u=await e.backend.setKeyboard(_(e,t),{action:d}),c=I(u),p=(n=u)&&"object"==typeof n?u:{};return"enter"===d||"return"===d?{kind:"keyboardEnterPressed",action:"enter",state:p,...(a=c)?{backendResult:a}:{},...R("Keyboard enter pressed")}:"dismiss"===d?(r=d,{kind:"keyboardDismissed",action:r,state:i=p,...(s=c)?{backendResult:s}:{},...R(!1===i.dismissed?"Keyboard already hidden":"Keyboard dismissed")}):(o=d,{kind:"keyboardState",action:o,state:p,...(l=c)?{backendResult:l}:{}})},ap=async(e,t)=>{if("read"===t.action){if(!e.backend.getClipboard)throw new Y("UNSUPPORTED_OPERATION","system.clipboard read is not supported by this backend");let n=await e.backend.getClipboard(_(e,t));return{kind:"clipboardText",action:"read",text:"string"==typeof n?n:n.text}}if("write"!==t.action)throw new Y("INVALID_ARGS","system.clipboard action must be read or write");if(!e.backend.setClipboard)throw new Y("UNSUPPORTED_OPERATION","system.clipboard write is not supported by this backend");if("string"!=typeof t.text)throw new Y("INVALID_ARGS","system.clipboard write requires text");let n=I(await e.backend.setClipboard(_(e,t),t.text));return{kind:"clipboardUpdated",action:"write",textLength:Array.from(t.text).length,...n?{backendResult:n}:{},...R("Clipboard updated")}},ah=async(e,t={})=>{if(!e.backend.openSettings)throw new Y("UNSUPPORTED_OPERATION","system.settings is not supported by this backend");let n=nR(t.target,"target"),a=I(await e.backend.openSettings(_(e,t),n));return{kind:"settingsOpened",...n?{target:n}:{},...a?{backendResult:a}:{},...R(n?`Opened settings: ${n}`:"Opened settings")}},af=async(e,t={})=>{var n,a;if(!e.backend.handleAlert)throw new Y("UNSUPPORTED_OPERATION","system.alert is not supported by this backend");let r=t.action??"get";if("get"!==r&&"accept"!==r&&"dismiss"!==r&&"wait"!==r)throw new Y("INVALID_ARGS","system.alert action must be get, accept, dismiss, or wait");let i=void 0===t.timeoutMs?void 0:T(t.timeoutMs,"timeoutMs",0,12e4),s=await e.backend.handleAlert(_(e,t),r,{timeoutMs:i});return n=r,a=s,"get"===n?function(e){if("alertStatus"!==e.kind)throw new Y("COMMAND_FAILED","system.alert get returned an invalid backend result");return{kind:"alertStatus",action:"get",alert:e.alert}}(a):"wait"===n?function(e){if("alertWait"!==e.kind)throw new Y("COMMAND_FAILED","system.alert wait returned an invalid backend result");return{kind:"alertWait",action:"wait",alert:e.alert,...void 0!==e.waitedMs?{waitedMs:e.waitedMs}:{},...void 0!==e.timedOut?{timedOut:e.timedOut}:{},...R(e.alert?"Alert visible":"Alert wait timed out")}}(a):function(e,t){if("alertHandled"!==t.kind)throw new Y("COMMAND_FAILED",`system.alert ${e} returned an invalid backend result`);return{kind:"alertHandled",action:e,handled:t.handled,...t.alert?{alert:t.alert}:{},...t.button?{button:t.button}:{},...R(t.handled?`Alert ${e}ed`:"No alert handled")}}(n,a)},am=async(e,t={})=>{if(!e.backend.openAppSwitcher)throw new Y("UNSUPPORTED_OPERATION","system.appSwitcher is not supported by this backend");let n=I(await e.backend.openAppSwitcher(_(e,t)));return{kind:"appSwitcherOpened",...n?{backendResult:n}:{},...R("Opened app switcher")}};function aw(e){let t={backend:e.backend,artifacts:e.artifacts,sessions:e.sessions??function(e=[]){let t=new Map(e.map(e=>[e.name,ag(e)]));return{get:e=>ag(t.get(e)),set:e=>{t.set(e.name,ag(e))},delete:e=>{t.delete(e)},list:()=>Array.from(t.values(),e=>ag(e))}}(),policy:e.policy??function(e={}){return{allowLocalInputPaths:!1,allowLocalOutputPaths:!1,maxImagePixels:2e7,allowNamedBackendCapabilities:[],...e}}(),diagnostics:e.diagnostics,clock:e.clock,signal:e.signal};return{...t,capture:{screenshot:e=>tJ(t,e),diffScreenshot:e=>tX(t,e),snapshot:e=>t2(t,e),diffSnapshot:e=>t4(t,e)},selectors:{find:e=>nc(t,e),get:e=>np(t,e),getText:(e,n={})=>nh(t,{...n,target:e}),getAttrs:(e,n={})=>nf(t,{...n,target:e}),is:e=>nm(t,e),isVisible:(e,n={})=>nw(t,{...n,target:e}),isHidden:(e,n={})=>ng(t,{...n,target:e}),wait:e=>nb(t,e),waitForText:(e,n={})=>ny(t,{...n,text:e})},interactions:{click:(e,n={})=>t9(t,{...n,target:e}),press:(e,n={})=>t6(t,{...n,target:e}),fill:(e,n,a={})=>t7(t,{...a,target:e,text:n}),typeText:(e,n={})=>ne(t,{...n,text:e}),focus:(e,n={})=>w(t,{...n,target:e}),longPress:(e,n={})=>f(t,{...n,target:e}),swipe:e=>N(t,e),scroll:e=>h(t,e),pinch:e=>U(t,e)},system:{back:e=>al(t,e),home:e=>ad(t,e),rotate:e=>au(t,e),keyboard:e=>ac(t,e),clipboard:e=>ap(t,e),settings:e=>ah(t,e),alert:e=>af(t,e),appSwitcher:e=>am(t,e)},apps:{open:e=>nG(t,e),close:e=>nX(t,e),list:(e={})=>nY(t,{...e,filter:em(e.filter)}),state:e=>nF(t,e),push:e=>nK(t,e),triggerEvent:e=>nV(t,e)},admin:{devices:e=>nN(t,e),boot:e=>nS(t,e),shutdown:e=>nO(t,e),install:e=>nD(t,e),reinstall:e=>n_(t,e),installFromSource:e=>nE(t,e)},recording:{record:e=>ar(t,e),trace:e=>ai(t,e)},observability:{logs:e=>n6(t,e),network:e=>n9(t,e),perf:e=>n7(t,e)}}}function ag(e){if(e)return{...e,...e.snapshot?{snapshot:structuredClone(e.snapshot)}:{},...e.metadata?{metadata:function(e){try{return structuredClone(e)}catch{return{...e}}}(e.metadata)}:{}}}function ab(e={}){return{allowLocalInputPaths:!0,allowLocalOutputPaths:!0,maxImagePixels:2e7,allowNamedBackendCapabilities:[],...e}}export{eB as CLOUD_WEBDRIVER_PROVIDERS,eD as appendScriptSeriesFlags,aw as createAgentDevice,e8 as decodePngAsync,e6 as encodePngAsync,ns as evaluateIsPredicate,eF as findMistargetedTypeRefToken,eL as formatPortableActionLine,eO as formatScriptActionSummary,eI as formatScriptArg,eR as formatScriptStringLiteral,ex as isClickLikeCommand,eG as isCloudWebDriverProviderName,eY as isKeyboardAction,ni as isSupportedPredicate,eA as isTouchTargetCommand,ab as localCommandPolicy,eU as parseReplayOpenFlags,eT as parseReplayRuntimeFlags,eE as parseReplaySeriesFlags,e5 as prewarmPngWorker,e3 as terminatePngWorker,e$ as timingSafeStringEqual};
|
package/dist/src/8184.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{setSessionSnapshot as e,captureSnapshot as r,isNavigationSensitiveAction as t,markPendingInteractionOutcome as n,markPostGestureStabilization as o,getSnapshotReferenceFrame as i,recordTouchVisualizationEvent as a,markAndroidSnapshotFreshness as c,stripInternalInteractionFlags as s}from"./9722.js";import{isSparseSnapshotQualityVerdict as d,successText as f}from"./2948.js";import{getAndroidScreenSize as u}from"./input-actions.js";import{emitDiagnostic as l}from"./8875.js";async function h(t,n,o,i,a){let c={...n??{},snapshotInteractiveOnly:a.interactiveOnly},s=i(c,t.appBundleId,t.trace?.outPath),{snapshot:f}=await r({device:t.device,session:t,flags:c,outPath:c.out,logPath:s.logPath??"",includeRects:a.includeRects,androidFreshnessMode:a.androidFreshnessMode});return d(f.snapshotQuality)||(e(t,f),o.set(t.name,t)),f}function p(e){var r,t,n;let o,i,a,c,{data:s,fallbackX:d,fallbackY:u,referenceFrame:l,extra:h}=e,p=(r=h,t=d,n=u,o="string"==typeof r?.ref?r.ref:void 0,i="string"==typeof r?.button?r.button:void 0,a="string"==typeof r?.gesture?r.gesture:void 0,c=void 0===t||void 0===n?"":` (${t}, ${n})`,("string"==typeof r?.text?`Filled ${Array.from(r.text).length} chars`:o?"longpress"===a?`Long pressed @${o}${c}`:i&&"primary"!==i?`Clicked ${i} @${o}${c}`:`Tapped @${o}${c}`:void 0)??("string"==typeof s?.message?s.message:void 0));return{...void 0===d||void 0===u?{}:{x:d,y:u},...l??{},...h??{},...s??{},...f(p)}}function g(e){let{session:r,sessionStore:i,command:d,positionals:f,retryPositionals:u,flags:l,result:h,responseData:p,actionStartedAt:g,actionFinishedAt:_,androidFreshnessBaseline:m}=e,v=s(l);return i.recordAction(r,{command:d,positionals:f,flags:v??{},result:h}),n({session:r,command:d,positionals:u??f,flags:l,preSnapshot:r.snapshot}),t(d)&&c(r,d,m??r.snapshot),o(r,d,u??f,l),a(r,d,f,h,v??{},g,_),{ok:!0,data:p}}async function _(e){let{session:r,flags:t,sessionStore:n,contextFromFlags:o,captureSnapshotForSession:a}=e;if(!r.recording)return;if(r.recording.touchReferenceFrame)return r.recording.touchReferenceFrame;if("android"===r.device.platform){let e=await u(r.device),t={referenceWidth:e.width,referenceHeight:e.height};return r.recording&&(r.recording.touchReferenceFrame=t),t}let c=i(r.snapshot);if(c)return r.recording&&(r.recording.touchReferenceFrame=c),c;if(!r.recording)return;let s=i(await a(r,t,n,o,{interactiveOnly:!0}));return s&&r.recording&&(r.recording.touchReferenceFrame=s),s}async function m(e){try{return await _(e)}catch(r){l({level:"warn",phase:"touch_reference_frame_resolve_failed",data:{platform:e.session.device.platform,error:r instanceof Error?r.message:String(r)}});return}}function v(e){return i({nodes:e,createdAt:0})}export{p as buildTouchVisualizationResult,g as finalizeTouchInteraction,h as interaction_snapshot_captureSnapshotForSession,v as readSnapshotNodesReferenceFrame,m as resolveDirectTouchReferenceFrameSafely};
|
package/dist/src/8225.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{AppError as t}from"./485.js";function e(t){return t.map(t=>({args:t.args.join(" "),exitCode:t.exitCode,stderr:t.stderr.slice(0,400)}))}let r=["camera","microphone","photos","contacts","contacts-limited","notifications","calendar","location","location-always","media-library","motion","reminders","siri"];function i(e){let r=e.trim().toLowerCase();if("grant"===r)return"grant";if("deny"===r)return"deny";if("reset"===r)return"reset";throw new t("INVALID_ARGS",`Invalid permission action: ${e}. Use grant|deny|reset.`)}function n(e){let i=e?.trim().toLowerCase();if("camera"===i||"microphone"===i||"photos"===i||"contacts"===i||"contacts-limited"===i||"notifications"===i||"calendar"===i||"location"===i||"location-always"===i||"media-library"===i||"motion"===i||"reminders"===i||"siri"===i)return i;throw new t("INVALID_ARGS",`permission setting requires a target: ${r.join("|")}`)}function o(e){let r=e.trim().toLowerCase();if("light"===r)return"light";if("dark"===r)return"dark";if("toggle"===r)return"toggle";throw new t("INVALID_ARGS",`Invalid appearance state: ${e}. Use light|dark|toggle.`)}function a(e){let r=e.toLowerCase();if("on"===r||"true"===r||"1"===r)return!0;if("off"===r||"false"===r||"0"===r)return!1;throw new t("INVALID_ARGS",`Invalid setting state: ${e}`)}export{o as parseAppearanceAction,i as parsePermissionAction,n as parsePermissionTarget,a as parseSettingState,e as summarizeCommandAttemptFailures};
|
package/dist/src/8391.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import e from"node:fs";import r from"node:path";import t from"node:crypto";import n from"node:os";import{asAppError as i,AppError as o}from"./485.js";import{isProcessAlive as a,readProcessStartTime as s}from"./9414.js";import{sleep as c}from"./5560.js";import{runCmd as u}from"./8875.js";async function l(t){let{lockDirPath:n,owner:i}=t,u=r.join(n,"owner.json"),l=Date.now()+(t.timeoutMs??3e4),d=t.pollMs??100,p=t.ownerGraceMs??5e3,w=t.description??"process lock";for(e.mkdirSync(r.dirname(n),{recursive:!0});Date.now()<l;)try{e.mkdirSync(n),function(r,t){let n=`${r}.${process.pid}.${Date.now()}.tmp`;e.writeFileSync(n,JSON.stringify(t),"utf8"),e.renameSync(n,r)}(u,i);let r=!1;return async()=>{r||(r=!0,e.rmSync(n,{recursive:!0,force:!0}))}}catch(r){if("EEXIST"!==r.code)throw r;if(function(r,t,n){let i=null;try{i=e.statSync(r)}catch{return!0}let o=m(t);if(o){var c;return!(Number.isInteger((c=o).pid)&&!(c.pid<=0)&&a(c.pid)&&(!c.startTime||s(c.pid)===c.startTime))&&(e.rmSync(r,{recursive:!0,force:!0}),!0)}return!(Date.now()-i.mtimeMs<n)&&(e.rmSync(r,{recursive:!0,force:!0}),!0)}(n,u,p))continue;await c(d)}throw new o("COMMAND_FAILED",`Timed out waiting for ${w}`,{lockDirPath:n,...function(r,t){let n,i=Date.now(),o=m(t);try{n=Math.max(0,Math.round(i-e.statSync(r).mtimeMs))}catch{}return{...void 0!==n?{lockAgeMs:n}:{},...o?{ownerPid:o.pid,ownerStartTime:o.startTime,ownerAgeMs:Math.max(0,Math.round(i-o.acquiredAtMs))}:{}}}(n,u)})}function m(r){try{return JSON.parse(e.readFileSync(r,"utf8"))}catch{return null}}let d="0.27.1",p="agent-browser";async function w(e){let r=S(e);if(r.installed){var t=r;if(!t.installed)throw g(t);return{command:t.binaryPath,env:D(t,process.env)}}throw g(r)}async function f(t){let n=S(t);var i,a=n.nodeMajor;if(!(a>=24))throw new o("UNSUPPORTED_OPERATION","Web automation requires Node 24 or newer.",{currentNode:process.version,requiredNodeMajor:24,hint:"Run agent-device with Node 24+ for web setup and web automation."});let c=await l({lockDirPath:r.join(n.installDir,"..",".agent-browser-install.lock"),owner:{pid:process.pid,startTime:s(process.pid),acquiredAtMs:Date.now()},timeoutMs:3e5,description:"managed agent-browser setup"});try{let n=S(t);if(n.installed)return n;return e.mkdirSync(n.installDir,{recursive:!0}),await h(n),await v(n,["install"],{timeoutMs:3e5}),await v(n,["doctor","--offline","--quick"],{timeoutMs:6e4}),i=n,e.writeFileSync(r.join(i.installDir,"manifest.json"),JSON.stringify({package:p,version:d,node:process.version,installedAt:new Date().toISOString()},null,2),"utf8"),S(t)}finally{await c()}}async function y(e){let r=S(e);if(!r.installed)throw g(r);let t=await v(r,["doctor","--offline","--quick"],{timeoutMs:6e4,allowFailure:!0});return{status:r,...t}}function S(i){var o,a,s;let c,u,l=i.stateDir??process.env.AGENT_DEVICE_STATE_DIR??r.join(process.env.HOME??process.cwd(),".agent-device"),m=r.join(l,"tools","agent-browser",d),p=(o=m,c=r.join(o,"package"),r.join(c,"node_modules",".bin","win32"===process.platform?"agent-browser.cmd":"agent-browser")),w=r.join(m,"home"),f=function(e){if("win32"===process.platform)return r.join(e,"home");let i=t.createHash("sha1").update(e).digest("hex").slice(0,12);return r.join(n.tmpdir(),"agent-device-web",i)}(m),y=(a=m,u=t.createHash("sha1").update(a).digest("hex").slice(0,12),r.join(n.tmpdir(),"adw",u)),S=function(r){try{return e.accessSync(r,e.constants.X_OK),!0}catch{return!1}}(p)&&(s=m,e.existsSync(r.join(s,"manifest.json"))),h=Number.parseInt(process.versions.node.split(".")[0]??"0",10);return{version:d,stateDir:l,installDir:m,binaryPath:p,homeDir:w,runtimeHomeDir:f,socketDir:y,installed:S,nodeMajor:h,nodeSupported:h>=24}}async function h(t){let n=r.join(t.installDir,"package");e.mkdirSync(n,{recursive:!0}),await u("npm",["install","--prefix",n,"--no-audit","--no-fund","--no-save",`${p}@${d}`],{env:process.env,timeoutMs:3e5})}async function v(e,r,t){return await u(e.binaryPath,r,{allowFailure:t.allowFailure,env:D(e,process.env),timeoutMs:t.timeoutMs})}function D(t,n){return e.mkdirSync(t.homeDir,{recursive:!0}),function(t){if(t.runtimeHomeDir!==t.homeDir){e.mkdirSync(r.dirname(t.runtimeHomeDir),{recursive:!0});try{let r=e.lstatSync(t.runtimeHomeDir);if(r.isSymbolicLink()&&e.readlinkSync(t.runtimeHomeDir)===t.homeDir||r.isDirectory())return;r.isSymbolicLink()&&e.unlinkSync(t.runtimeHomeDir)}catch(e){var n;if(!("object"==typeof(n=e)&&null!==n&&"code"in n&&"ENOENT"===n.code))throw e}try{e.symlinkSync(t.homeDir,t.runtimeHomeDir,"dir")}catch{e.mkdirSync(t.runtimeHomeDir,{recursive:!0})}}}(t),e.mkdirSync(t.socketDir,{recursive:!0}),{...n,HOME:t.runtimeHomeDir,AGENT_BROWSER_SOCKET_DIR:t.socketDir}}function g(e){return new o("TOOL_MISSING","Managed web browser backend is not installed.",{version:d,installDir:e.installDir,hint:!1===e.nodeSupported?`Web automation requires Node 24+; current Node is ${process.version}.`:"Run `agent-device web setup` to install the managed web backend."})}function M(e){let r=i(e);return"TOOL_MISSING"!==r.code?r:new o(r.code,r.message,{...r.details??{},hint:"string"==typeof r.details?.hint?r.details.hint:"Run `agent-device web setup` to install the managed web backend."})}export{l as acquireProcessLock,y as doctorManagedAgentBrowser,M as mapManagedAgentBrowserError,w as resolveAgentBrowserTool,f as setupManagedAgentBrowser};
|
package/dist/src/8404.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{createHash as e}from"node:crypto";import t from"node:fs";import r from"node:path";import{fileURLToPath as n}from"node:url";import{runCmdDetached as i}from"./8875.js";import{readProcessCommand as o,waitForProcessExit as a,isProcessAlive as s,readProcessStartTime as l}from"./9414.js";import{normalizeBaseUrl as c,METRO_COMPANION_RUN_ARG as d,ENV_COMPANION_TUNNEL_BEARER_TOKEN as u,ENV_COMPANION_TUNNEL_SERVER_BASE_URL as p,ENV_COMPANION_TUNNEL_STATE_PATH as h,ENV_COMPANION_TUNNEL_SCOPE_RUN_ID as m,ENV_COMPANION_TUNNEL_LAUNCH_URL as f,ENV_COMPANION_TUNNEL_REGISTER_PATH as g,ENV_COMPANION_TUNNEL_SCOPE_LEASE_ID as P,ENV_COMPANION_TUNNEL_SCOPE_TENANT_ID as y,ENV_COMPANION_TUNNEL_DEVICE_PORT as v,ENV_COMPANION_TUNNEL_SESSION as S,ENV_COMPANION_TUNNEL_LOCAL_BASE_URL as U,ENV_COMPANION_TUNNEL_UNREGISTER_PATH as I}from"./4917.js";let b="companion-tunnel";function k(t){return e("sha256").update(t).digest("hex")}function w(e){return e?.trim()?e.trim():void 0}function B(e,t,n,i){let o=i??r.join(e,".agent-device");if(!n)return{statePath:r.join(o,`${t.slug}.json`),logPath:r.join(o,`${t.slug}.log`)};let a=k(n).slice(0,12),s=r.join(o,t.slug);return{statePath:r.join(s,`${t.slug}-${a}.json`),logPath:r.join(s,`${t.slug}-${a}.log`)}}function j(e){try{let r=JSON.parse(t.readFileSync(e,"utf8"));if(!Number.isInteger(r.pid)||0>=Number(r.pid)||"string"!=typeof r.serverBaseUrl||"string"!=typeof r.localBaseUrl||"string"!=typeof r.tokenHash||0===r.tokenHash.length)return null;let n=Array.isArray(r.consumers)?r.consumers.filter(e=>"string"==typeof e&&e.length>0):[];return{pid:Number(r.pid),startTime:"string"==typeof r.startTime?r.startTime:void 0,command:"string"==typeof r.command?r.command:void 0,serverBaseUrl:r.serverBaseUrl,localBaseUrl:r.localBaseUrl,launchUrl:w("string"==typeof r.launchUrl?r.launchUrl:void 0),registerPath:w("string"==typeof r.registerPath?r.registerPath:void 0),unregisterPath:w("string"==typeof r.unregisterPath?r.unregisterPath:void 0),devicePort:Number.isInteger(r.devicePort)?Number(r.devicePort):void 0,session:w("string"==typeof r.session?r.session:void 0),bridgeScope:function(e){if(!(!e||"object"!=typeof e||Array.isArray(e))&&"string"==typeof e.tenantId&&"string"==typeof e.runId&&"string"==typeof e.leaseId)return{tenantId:e.tenantId,runId:e.runId,leaseId:e.leaseId}}(r.bridgeScope),tokenHash:r.tokenHash,consumers:n}}catch{return null}}function _(e,n){t.mkdirSync(r.dirname(e),{recursive:!0}),t.writeFileSync(e,`${JSON.stringify(n,null,2)}
|
|
2
|
-
`,"utf8")}function N(e){try{let r=t.readdirSync(e);0===r.length&&t.rmdirSync(e)}catch{}}function $(e,n){let i=r.dirname(e.statePath),o=r.dirname(e.logPath);var a=e.statePath;try{t.unlinkSync(a)}catch{}var s=e.logPath;try{t.unlinkSync(s)}catch{}N(i),o!==i&&N(o),r.basename(i)===n.slug&&N(r.dirname(i))}function C(e,t){return e.includes(t.runArg)}function E(e){return w(e.consumerKey)??w(e.profileKey)??null}function K(e,t){return!t||e.consumers.includes(t)?e:{...e,consumers:[...e.consumers,t]}}async function R(e,t){if(!s(e.pid))return;let r=o(e.pid);if(r&&C(r,t)){try{process.kill(e.pid,"SIGTERM")}catch(t){let e=t.code;if("ESRCH"===e||"EPERM"===e)return;throw t}if(!await a(e.pid,1e3)){try{process.kill(e.pid,"SIGKILL")}catch(t){let e=t.code;if("ESRCH"===e||"EPERM"===e)return;throw t}await a(e.pid,1e3)}}}async function T(e){var a;let d,N=E(e),T=B(e.projectRoot,e.definition,e.profileKey,e.stateDir),H=j(T.statePath);if(H&&function(e,t){var r,n;if(!s(e.pid))return!1;if(e.startTime){let t=l(e.pid);if(!t||t!==e.startTime)return!1}let i=o(e.pid);return!!i&&!!C(i,t.definition)&&!!e.bridgeScope&&e.serverBaseUrl===c(t.serverBaseUrl)&&e.localBaseUrl===c(t.localBaseUrl)&&e.launchUrl===w(t.launchUrl)&&e.registerPath===w(t.registerPath)&&e.unregisterPath===w(t.unregisterPath)&&e.devicePort===t.devicePort&&e.session===w(t.session)&&(r=e.bridgeScope,n=t.bridgeScope,r.tenantId===n.tenantId&&r.runId===n.runId&&r.leaseId===n.leaseId)&&e.tokenHash===k(t.bearerToken)}(H,e)){let e=K(H,N);return e!==H&&_(T.statePath,e),{pid:H.pid,spawned:!1,statePath:T.statePath,logPath:T.logPath}}H&&(await R(H,e.definition),$(T,e.definition)),a=T.statePath,t.mkdirSync(r.dirname(a),{recursive:!0}),t.closeSync(t.openSync(a,"a"));try{d=function(e,a){let s=function(e){let i=n(import.meta.url),o=r.extname(i)||".js",a=[r.join(r.dirname(i),`${b}${o}`),r.join(r.dirname(i),"internal",`${b}${o}`)].find(e=>t.existsSync(e));if(!a)throw Error(`${e.displayName} entrypoint not found. Rebuild the package to include the companion worker entry.`);return a}(e.definition),d=s.endsWith(".ts")?["--experimental-strip-types"]:[];t.mkdirSync(r.dirname(a),{recursive:!0});let j=t.openSync(a,"a"),_=0;try{let t;_=i(process.execPath,[...d,s,e.definition.runArg],{env:((t={...e.env??process.env})[p]=c(e.serverBaseUrl),t[u]=e.bearerToken,t[U]=c(e.localBaseUrl),t[h]=B(e.projectRoot,e.definition,e.profileKey,e.stateDir).statePath,t[y]=e.bridgeScope.tenantId,t[m]=e.bridgeScope.runId,t[P]=e.bridgeScope.leaseId,e.launchUrl?.trim()?t[f]=e.launchUrl.trim():delete t[f],e.registerPath?.trim()?t[g]=e.registerPath.trim():delete t[g],e.unregisterPath?.trim()?t[I]=e.unregisterPath.trim():delete t[I],void 0!==e.devicePort?t[v]=String(e.devicePort):delete t[v],e.session?.trim()?t[S]=e.session.trim():delete t[S],t),stdio:["ignore",j,j]})}finally{t.closeSync(j)}if(!Number.isInteger(_)||_<=0)throw Error(`Failed to start ${e.definition.displayName} process.`);return{pid:_,startTime:l(_)??void 0,command:o(_)??void 0,serverBaseUrl:c(e.serverBaseUrl),localBaseUrl:c(e.localBaseUrl),launchUrl:w(e.launchUrl),registerPath:w(e.registerPath),unregisterPath:w(e.unregisterPath),devicePort:e.devicePort,session:w(e.session),bridgeScope:e.bridgeScope,tokenHash:k(e.bearerToken),consumers:[]}}(e,T.logPath),_(T.statePath,K(d,N))}catch(t){throw d&&await R(d,e.definition).catch(()=>{}),$(T,e.definition),t}return{pid:d.pid,spawned:!0,statePath:T.statePath,logPath:T.logPath}}async function H(e){let t=E(e),r=B(e.projectRoot,e.definition,e.profileKey,e.stateDir),n=j(r.statePath);if(!n)return $(r,e.definition),{stopped:!1,statePath:r.statePath};let i=t?{...n,consumers:n.consumers.filter(e=>e!==t)}:{...n,consumers:[]};return i.consumers.length>0?(_(r.statePath,i),{stopped:!1,statePath:r.statePath}):(await R(n,e.definition),$(r,e.definition),{stopped:!0,statePath:r.statePath})}let A={slug:"metro-companion",runArg:d,displayName:"Metro companion"};async function M(e){return await T({...e,definition:A,registerPath:e.registerPath??"/api/metro/companion/register"})}async function x(e){return await H({...e,definition:A})}export{T as ensureCompanionTunnel,M as ensureMetroCompanion,H as stopCompanionTunnel,x as stopMetroCompanion};
|
package/dist/src/8414.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import e from"node:os";import t from"node:path";import{promises as i}from"node:fs";import{runXcrun as n,IOS_DEVICECTL_DEFAULT_HINT as r,prewarmAppleRunnerCache as o,resolveIosDevicectlHint as a,isActiveProviderDevice as s,context_contextFromFlags as d}from"./9722.js";import{isIosFamily as c}from"./6849.js";import{isDeepLinkTarget as l}from"./3340.js";import{AppError as u}from"./485.js";function f(e){let{req:t,logPath:i,traceLogPath:n}=e;return{verbose:t.flags?.verbose,logPath:i,traceLogPath:n,requestId:t.meta?.requestId,iosXctestrunFile:t.flags?.iosXctestrunFile,iosXctestDerivedDataPath:t.flags?.iosXctestDerivedDataPath,iosXctestEnvDir:t.flags?.iosXctestEnvDir}}function p(e){let{req:t,logPath:i,appBundleId:n,traceLogPath:r}=e;return{...f({req:t,logPath:i,traceLogPath:r}),runnerLeaseContext:d(i,t.flags,n,r,t.meta?.requestId,t.meta).runnerLeaseContext}}function m(e){let{req:t,logPath:i,device:n,traceLogPath:r,enabled:a}=e;if(a&&c(n)&&"simulator"===n.kind)return e=>o(e,f({req:t,logPath:i,traceLogPath:r}))}function S(e){let{req:t,logPath:i,device:n,surface:r,openTarget:o,traceLogPath:a}=e;return m({req:t,logPath:i,device:n,traceLogPath:a,enabled:"app"===r&&!!o&&!l(o??"")})}let _=new Map;async function v(e,t={}){var i;let n;if(s(e))return;let r=(n="simulator"===(i=e).kind?i.simulatorSetPath??"":"",JSON.stringify([i.platform,i.kind,i.id,i.target??"",n])),o=_.get(r);if(void 0!==o){if(o>Date.now()&&!t.focusExisting)return;_.delete(r)}if(c(e)){if("simulator"===e.kind){let{ensureBootedSimulator:i}=await import("./simulator.js");await i(e,{deviceHub:t.deviceHub,focusExisting:t.focusExisting,onColdBootStart:t.onIosSimulatorColdBootStart}),C(r);return}if("device"===e.kind){await w(e.id),C(r);return}}if("android"===e.platform){let{waitForAndroidBoot:t}=await import("./3340.js");await t(e.id),C(r)}}function C(e){_.set(e,Date.now()+5e3)}async function w(r){let o=t.join(e.tmpdir(),`agent-device-ready-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}.json`),a=Math.max(1,Math.ceil(15));try{let e=await n(["devicectl","device","info","details","--device",r,"--json-output",o,"--timeout",String(a)],{allowFailure:!0,timeoutMs:18e3}),t=String(e.stdout??""),i=String(e.stderr??""),s=await h(o);if(0===e.exitCode){if(!s.parsed)throw new u("COMMAND_FAILED","iOS device readiness probe failed",{kind:"probe_inconclusive",deviceId:r,stdout:t,stderr:i,hint:"CoreDevice returned success but readiness JSON output was missing or invalid. Retry; if it persists restart Xcode and the iOS device."});let e=s?.tunnelState?.toLowerCase();if("connecting"===e)throw new u("COMMAND_FAILED","iOS device is not ready for automation",{kind:"not_ready",deviceId:r,tunnelState:e,hint:"Device tunnel is still connecting. Keep the device unlocked and connected by cable until it is fully available in Xcode Devices, then retry."});return}throw new u("COMMAND_FAILED","iOS device is not ready for automation",{kind:"not_ready",deviceId:r,stdout:t,stderr:i,exitCode:e.exitCode,tunnelState:s?.tunnelState,hint:g(t,i)})}catch(e){if(e instanceof u&&"COMMAND_FAILED"===e.code){if("not_ready"===("string"==typeof e.details?.kind?e.details.kind:""))throw e;let t=e.details??{},i=String(t.stdout??""),n=String(t.stderr??""),o=Number(t.timeoutMs??15e3),a=`CoreDevice did not respond within ${o}ms. Keep the device unlocked and trusted, then retry; if it persists restart Xcode and the iOS device.`;throw new u("COMMAND_FAILED","iOS device readiness probe failed",{deviceId:r,cause:e.message,timeoutMs:o,stdout:i,stderr:n,hint:i||n?g(i,n):a},e)}throw new u("COMMAND_FAILED","iOS device readiness probe failed",{deviceId:r,hint:"Reconnect the device, keep it unlocked, and retry."},e instanceof Error?e:void 0)}finally{await i.rm(o,{force:!0}).catch(()=>{})}}async function h(e){try{let t=await i.readFile(e,"utf8"),n=JSON.parse(t),r=function(e){let t=e?.result;if(!t||"object"!=typeof t)return{};let i=t.connectionProperties?.tunnelState,n=t.device?.connectionProperties?.tunnelState,r="string"==typeof i?i:"string"==typeof n?n:void 0;return r?{tunnelState:r}:{}}(n);return{parsed:!0,tunnelState:r.tunnelState}}catch{return{parsed:!1}}}function g(e,t){let i=a(e,t);return i||(`${e}
|
|
2
|
-
${t}`.toLowerCase().includes("timed out waiting for all destinations")?"Xcode destination did not become available in time. Keep device unlocked and retry.":r)}export{f as buildAppleRunnerRequestOptions,p as buildAppleRunnerSessionOptions,S as createAppleRunnerCacheColdBootPrewarmForOpen,m as createAppleRunnerCachePrewarmOnColdBoot,v as ensureDeviceReady};
|
package/dist/src/8875.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{AsyncLocalStorage as e}from"node:async_hooks";import t from"node:crypto";import n,{constants as r}from"node:fs";import o from"node:os";import i from"node:path";import{access as a,stat as s}from"node:fs/promises";import{spawn as u,spawnSync as d}from"node:child_process";import{Readable as l}from"node:stream";import{pipeline as c}from"node:stream/promises";import{redactDiagnosticData as f,AppError as m}from"./485.js";let p=new e;function g(){return t.randomBytes(8).toString("hex")}async function w(e,n){let r={...e,diagnosticId:`${Date.now().toString(36)}-${t.randomBytes(4).toString("hex")}`,events:[],liveWrittenEventCount:0,phaseCounts:new Map};return await p.run(r,n)}function h(e){let t=p.getStore();t&&Object.assign(t,e)}function v(){let e=p.getStore();return e?{diagnosticId:e.diagnosticId,requestId:e.requestId,session:e.session,command:e.command,debug:e.debug,flushOnSuccess:e.flushOnSuccess}:{}}function S(e){let t=p.getStore();if(!t)return 0;let n=0;for(let r of e)n+=t.phaseCounts.get(r)??0;return n}function y(e){let t=p.getStore();if(!t)return;let n={ts:new Date().toISOString(),level:e.level??"info",phase:e.phase,session:t.session,requestId:t.requestId,command:t.command,durationMs:e.durationMs,data:e.data?f(e.data):void 0};if(t.events.push(n),t.phaseCounts.set(e.phase,(t.phaseCounts.get(e.phase)??0)+1),!t.debug)return;let r=`${JSON.stringify(n)}
|
|
2
|
-
`;try{t.logPath&&(b(t.logPath,r),t.liveWrittenEventCount=t.events.length),t.traceLogPath&&b(t.traceLogPath,r),t.logPath||t.traceLogPath||process.stderr.write(`[agent-device][diag] ${r}`)}catch{}}async function I(e,t,n){let r=Date.now();try{let o=await t();return y({level:"info",phase:e,durationMs:Date.now()-r,data:n}),o}catch(t){throw y({level:"error",phase:e,durationMs:Date.now()-r,data:{...n??{},error:t instanceof Error?t.message:String(t)}}),t}}function A(e={}){let t=p.getStore();if(!t||!e.force&&!t.debug&&!t.flushOnSuccess||0===t.events.length)return null;try{if(t.logPath){let e=t.events.slice(t.liveWrittenEventCount);if(e.length>0){let n=e.map(e=>JSON.stringify(f(e)));b(t.logPath,`${n.join("\n")}
|
|
3
|
-
`)}let n=t.logPath;return t.events=[],t.liveWrittenEventCount=0,n}let e=(t.session??"default").replace(/[^a-zA-Z0-9._-]/g,"_"),r=new Date().toISOString().slice(0,10),a=i.join(o.homedir(),".agent-device","logs",e,r);n.mkdirSync(a,{recursive:!0});let s=new Date().toISOString().replace(/[:.]/g,"-"),u=i.join(a,`${s}-${t.diagnosticId}.ndjson`),d=t.events.map(e=>JSON.stringify(f(e)));return n.writeFileSync(u,`${d.join("\n")}
|
|
4
|
-
`),t.events=[],u}catch{return null}}function b(e,t){n.mkdirSync(i.dirname(e),{recursive:!0}),n.appendFileSync(e,t,"utf8")}let E=new Set(["1","true","yes","on"]),$=new Set(["0","false","no","off"]);function C(e){return`AGENT_DEVICE_${e.replace(/([A-Z])/g,"_$1").replace(/[^A-Za-z0-9_]/g,"_").toUpperCase()}`}function D(e,t,n,r){if(e.multiple)return(Array.isArray(t)?t:[t]).map(t=>D({...e,multiple:!1},t,n,r));if("boolean"===e.type){var o=t,i=n,a=r;if("boolean"==typeof o)return o;if("string"==typeof o){let e=_(o);if(void 0!==e)return e}throw new m("INVALID_ARGS",`Invalid value for "${a}" in ${i}. Expected boolean.`)}if("booleanOrString"===e.type){if("boolean"==typeof t)return t;if("string"==typeof t&&void 0!==_(t))return _(t);if("string"==typeof t&&t.trim().length>0)return t;throw new m("INVALID_ARGS",`Invalid value for "${r}" in ${n}. Expected boolean or non-empty string.`)}if("string"===e.type){if("string"==typeof t&&t.trim().length>0)return t;throw new m("INVALID_ARGS",`Invalid value for "${r}" in ${n}. Expected non-empty string.`)}if("enum"===e.type){if(void 0!==e.setValue){var s=e,u=t,d=n,l=r;let o=s.setValue;if(u===o)return o;if("string"==typeof u){let e=u.trim();if(""===e||"true"===e||"1"===e)return o;if("false"===e||"0"===e)return}if(!0===u)return o;if(!1!==u)throw new m("INVALID_ARGS",`Invalid value for "${l}" in ${d}. Expected boolean-like value for enum flag.`);return}if("string"!=typeof t||!e.enumValues?.includes(t))throw new m("INVALID_ARGS",`Invalid value for "${r}" in ${n}. Expected one of: ${e.enumValues?.join(", ")}.`);return t}let c="number"==typeof t?t:"string"==typeof t?Number(t):NaN;if(!Number.isFinite(c)||!Number.isInteger(c))throw new m("INVALID_ARGS",`Invalid value for "${r}" in ${n}. Expected integer.`);if("number"==typeof e.min&&c<e.min)throw new m("INVALID_ARGS",`Invalid value for "${r}" in ${n}. Must be >= ${e.min}.`);if("number"==typeof e.max&&c>e.max)throw new m("INVALID_ARGS",`Invalid value for "${r}" in ${n}. Must be <= ${e.max}.`);return c}function _(e){let t=e.trim().toLowerCase();return!!E.has(t)||!$.has(t)&&void 0}let N=/^[A-Za-z0-9][A-Za-z0-9._+-]*$/,O=[".com",".exe",".bat",".cmd"],M=new e;async function L(e,t){return e?await M.run(e,t):await t()}async function x(e){return await M.run(void 0,e)}async function P(e,t,n={}){let r=M.getStore()?.(e,t,n);return r?await r:await F(e,t,n)}async function B(e,t,n={}){let r=M.getStore()?.(e,t,n);return r?await r:await F(e,t,n)}function F(e,t,n={}){let r=J(e),o=q();return new Promise((i,a)=>{let s=u(r,t,{cwd:n.cwd,env:n.env,stdio:["pipe","pipe","pipe"],detached:n.detached,windowsHide:!0,shell:!1});n.onSpawn?.(s);let d="",l=n.binaryStdout?[]:void 0,c="",f=!1,p=er(n.timeoutMs),g=p?setTimeout(()=>{f=!0,ei(s,n.detached)},p):null,w=eo(s,n);n.binaryStdout||s.stdout.setEncoding("utf8"),s.stderr.setEncoding("utf8"),ea(s,n.stdin).catch(o=>{var i,u,d,l;w.didAbort||f||(i=o)instanceof Error&&"code"in i&&"EPIPE"===i.code||(a((u=r,d=e,new m("COMMAND_FAILED",`Failed to write stdin for ${u}`,{cmd:d,args:t},(l=o)instanceof Error?l:void 0))),ei(s,n.detached))}),s.stdout.on("data",e=>{if(n.binaryStdout)return void l?.push(Buffer.isBuffer(e)?e:Buffer.from(e));let t=String(e);d+=t,n.onStdoutChunk?.(t)}),s.stderr.on("data",e=>{let t=String(e);c+=t,n.onStderrChunk?.(t)}),s.on("error",n=>{g&&clearTimeout(g),w.dispose(),o.emitForegroundCompletion(e,t),a(X(w,r,e,t,n))}),s.on("close",s=>{g&&clearTimeout(g),w.dispose(),o.emitForegroundCompletion(e,t);let u=s??1;if(!w.didAbort&&f&&p){var h,v,S,y,I,A;return void a((h=r,v=e,S=t,y=p,I=u,A=d,new m("COMMAND_FAILED",`${h} timed out after ${y}ms`,{cmd:v,args:S,stdout:A,stderr:c,exitCode:I,timeoutMs:y})))}let b=Q(w,r,e,t,u,n.allowFailure,d,c);b?a(b):i({stdout:d,stderr:c,exitCode:u,stdoutBuffer:l?Buffer.concat(l):void 0})})})}async function T(e){let t=ee(e);if(!t)return!1;if(i.isAbsolute(t))return et(t);let n=process.env.PATH;if(!n)return!1;let r=function(){if("win32"!==process.platform)return[""];let e=process.env.PATHEXT;if(!e)return O;let t=e.split(";").map(e=>e.trim().toLowerCase()).filter(e=>e.length>0);return t.length>0?t:O}();for(let e of n.split(i.delimiter)){let n=e.trim();if(n){for(let e of function(e,t){if("win32"!==process.platform)return[e];let n=e.toLowerCase();return t.some(e=>n.endsWith(e))?[e]:t.map(t=>`${e}${t}`)}(t,r))if(await et(i.join(n,e)))return!0}}return!1}async function V(e,t){let n=Y(e,t,"executable");if(n){if(!await et(n))throw new m("TOOL_MISSING",`${t} points to a missing or non-executable file: ${n}`,{envName:t,path:n});return n}}async function G(e,t){let n=Y(e,t,"file");if(n){if(!await en(n))throw new m("TOOL_MISSING",`${t} points to a missing or non-file path: ${n}`,{envName:t,path:n});return n}}function k(e,t,n={}){let r=J(e),o=d(r,t,{cwd:n.cwd,env:n.env,stdio:["pipe","pipe","pipe"],encoding:n.binaryStdout?void 0:"utf8",input:n.stdin,timeout:er(n.timeoutMs),windowsHide:!0,shell:!1,...void 0!==n.maxBuffer?{maxBuffer:n.maxBuffer}:{}});if(o.error){let i=o.error.code;if("ETIMEDOUT"===i)throw new m("COMMAND_FAILED",`${r} timed out after ${er(n.timeoutMs)}ms`,{cmd:e,args:t,timeoutMs:er(n.timeoutMs)},o.error);if("ENOENT"===i)throw W(r,e,o.error);throw Z(r,e,t,o.error)}let i=n.binaryStdout?Buffer.isBuffer(o.stdout)?o.stdout:Buffer.from(o.stdout??""):void 0,a=n.binaryStdout?"":"string"==typeof o.stdout?o.stdout:(o.stdout??"").toString(),s="string"==typeof o.stderr?o.stderr:(o.stderr??"").toString(),u=o.status??1;if(0!==u&&!n.allowFailure)throw U(r,e,t,u,a,s);return{stdout:a,stderr:s,exitCode:u,stdoutBuffer:i}}function R(e,t,n={}){return H(e,t,n).pid}function H(e,t,n={}){let r=u(J(e),t,{cwd:n.cwd,env:n.env,stdio:n.stdio??"ignore",detached:!0,windowsHide:!0,shell:!1}),o=r.pid??0,i=new Promise(e=>{r.once("error",t=>{e({pid:o,error:t.message})}),r.once("exit",(t,n)=>{e({pid:o,..."number"==typeof t?{exitCode:t}:{},...n?{signal:n}:{}})})});return r.unref(),{pid:o,exited:i}}function j(e,t,n={}){let r=J(e),o=q(),i=u(r,t,{cwd:n.cwd,env:n.env,stdio:n.stdio??["ignore","pipe","pipe"],detached:n.detached,windowsHide:!0,shell:!1});o.emitBackgroundSpawn(e,t);let a="",s="",d=n.captureOutput??!0,l=eo(i,n);d&&(i.stdout?.setEncoding("utf8"),i.stderr?.setEncoding("utf8"),i.stdout?.on("data",e=>{a+=e}),i.stderr?.on("data",e=>{s+=e}));let c=new Promise((u,d)=>{i.on("error",n=>{l.dispose(),o.emitBackgroundCompletion(e,t,"error"),d(X(l,r,e,t,n))}),i.on("close",i=>{l.dispose(),o.emitBackgroundCompletion(e,t,"exit");let c=i??1,f=Q(l,r,e,t,c,n.allowFailure,a,s);f?d(f):u({stdout:a,stderr:s,exitCode:c})})});return{child:i,wait:c}}function q(){let e=v(),t=!0===e.debug,n=!0===_(process.env.AGENT_DEVICE_EXEC_TRACE??"");if(!t&&!n)return{emitForegroundCompletion:()=>{},emitBackgroundSpawn:()=>{},emitBackgroundCompletion:()=>{}};n&&!0!==e.flushOnSuccess&&h({flushOnSuccess:!0});let r=Date.now(),o=!1;return{emitForegroundCompletion:(e,t)=>{o||(o=!0,K({cmd:e,args:t,startedAtMs:r}))},emitBackgroundSpawn:(e,t)=>{K({cmd:e,args:t,data:{event:"spawn"}})},emitBackgroundCompletion:(e,t,n)=>{o||(o=!0,K({cmd:e,args:t,startedAtMs:r,data:{event:n}}))}}}function K(e){let t=e.args.slice(0,6);y({level:"debug",phase:"exec_command",durationMs:void 0===e.startedAtMs?void 0:Math.max(0,Date.now()-e.startedAtMs),data:{command:e.cmd,argsPrefix:t,...e.args.length>t.length?{omittedArgCount:e.args.length-t.length}:{},...e.data??{}}})}function J(e){let t=ee(e);if(!t)throw new m("INVALID_ARGS",`Invalid executable command: ${JSON.stringify(e)}`,{cmd:e,hint:"Use a bare command name from PATH or an absolute executable path."});return t}function W(e,t,n){return new m("TOOL_MISSING",`${e} not found in PATH`,{cmd:t},n)}function Z(e,t,n,r){return new m("COMMAND_FAILED",`Failed to run ${e}`,{cmd:t,args:n},r)}function z(e,t,n){return new m("COMMAND_FAILED","request canceled",{cmd:t,args:n,executable:e,reason:"request_canceled"})}function U(e,t,n,r,o,i){return new m("COMMAND_FAILED",`${e} exited with code ${r}`,{cmd:t,args:n,stdout:o,stderr:i,exitCode:r,processExitError:!0})}function X(e,t,n,r,o){return e.didAbort?z(t,n,r):"ENOENT"===o.code?W(t,n,o):Z(t,n,r,o)}function Q(e,t,n,r,o,i,a,s){return e.didAbort?z(t,n,r):0===o||i?null:U(t,n,r,o,a,s)}function Y(e,t,n){let r=e?.trim();if(r){if(!i.isAbsolute(r)||r.includes("\0"))throw new m("INVALID_ARGS",`${t} must be an absolute ${n} path, not ${JSON.stringify(e)}`,{envName:t,path:e});return r}}function ee(e){let t=e.trim();return!t||t.includes("\0")?null:i.isAbsolute(t)?t:t.includes("/")||t.includes("\\")?null:N.test(t)?t:null}async function et(e){try{if(!await en(e))return!1;return await a(e,"win32"===process.platform?r.F_OK:r.X_OK),!0}catch{return!1}}async function en(e){try{return(await s(e)).isFile()}catch{return!1}}function er(e){if(!Number.isFinite(e))return;let t=Math.floor(e);if(!(t<=0))return t}function eo(e,t){let n=!1,r=()=>{n=!0,ei(e,t.detached)};return t.signal?.aborted?r():t.signal?.addEventListener("abort",r,{once:!0}),{get didAbort(){return n},dispose:()=>{t.signal?.removeEventListener("abort",r)}}}function ei(e,t){if(t&&e.pid&&"win32"!==process.platform)try{process.kill(-e.pid,"SIGKILL");return}catch{}e.kill("SIGKILL")}async function ea(e,t){if(e.stdin){if(void 0===t)return void e.stdin?.end();await c(l.from([t]),e.stdin)}}export{C as buildPrimaryEnvVarName,S as countDiagnosticEventsByPhase,g as createRequestId,y as emitDiagnostic,A as flushDiagnosticsToSessionFile,v as getDiagnosticsMeta,et as isExecutablePath,_ as parseBooleanLiteral,D as parseSourceValue,V as resolveExecutableOverridePath,G as resolveFileOverridePath,P as runCmd,j as runCmdBackground,R as runCmdDetached,H as runCmdDetachedMonitored,B as runCmdStreaming,k as runCmdSync,h as updateDiagnosticsScope,T as whichCmd,L as withCommandExecutorOverride,I as withDiagnosticTimer,w as withDiagnosticsScope,x as withoutCommandExecutorOverride};
|
package/dist/src/893.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{splitSelectorFromArgs as e,normalizeText as t}from"./587.js";function n(e){var t;let n=l(e.label),r=l(e.value),i=l(e.identifier),u=(t=i)&&!/^[\w.]+:id\/[\w.-]+$/i.test(t)&&!/^_?NS:\d+$/i.test(t)?i:"";return a(e.type??"")?r||n||u:n||r||u}function r(e){let t=e.replace(/\s+/g," ").trim();return t.length<=48?t:`${t.slice(0,45)}...`}function i(e,t){var r;let i=n(e),l=function(e,t){if("text-view"===t||"text-field"===t||"search"===t)return!0;let n=u(e.type??""),r=`${e.role??""} ${e.subrole??""}`.toLowerCase();return n.includes("textview")||n.includes("textarea")||n.includes("textfield")||n.includes("securetextfield")||n.includes("searchfield")||n.includes("edittext")||r.includes("text area")||r.includes("text field")}(e,t);return{text:i,isLargeSurface:l,shouldSummarize:l&&!!(r=i)&&(r.length>80||/[\r\n]/.test(r))}}function l(e){return"string"==typeof e?e.trim():""}function u(e){let t=e.trim().replace(/XCUIElementType/gi,"").replace(/^AX/,"").toLowerCase(),n=Math.max(t.lastIndexOf("."),t.lastIndexOf("/"));return -1!==n&&(t=t.slice(n+1)),t}function a(e){let t=u(e);return t.includes("textfield")||t.includes("securetextfield")||t.includes("searchfield")||t.includes("edittext")||t.includes("textview")||t.includes("textarea")}function c(t){let n=t[0]??"",r=e(t.slice(1),{preferTrailingValue:"text"===n});return{predicate:n,split:r}}function o(e,t){let n=t.toLowerCase();return e.find(e=>{let t=(e.label??"").toLowerCase(),r=(e.value??"").toLowerCase(),i=(e.identifier??"").toLowerCase();return t.includes(n)||r.includes(n)||i.includes(n)})??null}function s(e,t){let n=[e.label,e.value,e.identifier].map(e=>"string"==typeof e?e.trim():"").find(e=>e&&e.length>0);return n&&d(n)?n:function(e,t){if(!e.rect)return;let n=e.rect.y+e.rect.height/2,r=null;for(let e of t){if(!e.rect)continue;let t=[e.label,e.value,e.identifier].map(e=>"string"==typeof e?e.trim():"").find(e=>e&&e.length>0);if(!t||!d(t))continue;let i=Math.abs(e.rect.y+e.rect.height/2-n);(!r||i<r.distance)&&(r={label:t,distance:i})}return r?.label}(e,t)??(n&&d(n)?n:void 0)}function d(e){let t=e.trim();return!(!t||/^(true|false)$/i.test(t)||/^\d+$/.test(t))}function f(e){let t=[],n=[];for(let r of e){let e=r.depth??0;for(;t.length>0&&e<=t[t.length-1];)t.pop();let i=u(r.type??""),l=[r.label,r.value,r.identifier].map(e=>"string"==typeof e?e.trim():"").find(e=>e&&e.length>0),a=!!l&&d(l);if(("group"===i||"ioscontentgroup"===i)&&!a){t.push(e);continue}let c=Math.max(0,e-t.length);n.push({...r,depth:c})}return n}function h(e,t){let n=u(e);return!n||("android"===t?n.includes("edittext")||n.includes("autocompletetextview"):n.includes("textfield")||n.includes("securetextfield")||n.includes("searchfield")||n.includes("textview")||n.includes("textarea")||"search"===n)}function p(e,t){return t.hittable?t:g(e,t,e=>!0===e.hittable)}function b(e){return new Map(e.map(e=>[e.index,e]))}function x(e,t,n,r){let i=t,l=new Set;for(;"number"==typeof i.parentIndex&&!l.has(i.index)&&(l.add(i.index),i=n.get(i.parentIndex)??e[i.parentIndex]);){let e=r(i);if(null!==e)return e}return null}function m(e,t,n,r){return!!x(e,t,r,e=>e===n||e.index===n.index?e:null)}function g(e,t,n){let r=b(e);return x(e,t,r,e=>n(e)?e:null)}function v(e){return[e.label,e.value,e.identifier].map(e=>"string"==typeof e?e.trim():"").filter(e=>e.length>0)[0]??""}function w(e){return n(e)}function S(e){return!0===e.hittable||!!e.rect&&e.rect.width>0&&e.rect.height>0}function $(e,t){return h(e.type??"",t)&&!1!==e.enabled}function y(e,t,n){return t.terms.every(t=>(function(e,t,n){switch(t.key){case"id":return N(e.identifier,String(t.value));case"role":return N(u(e.type??""),String(t.value));case"label":return N(e.label,String(t.value));case"value":return N(e.value,String(t.value));case"text":return N(v(e),String(t.value));case"appname":return N(e.appName,String(t.value));case"windowtitle":return N(e.windowTitle,String(t.value));case"visible":return S(e)===!!t.value;case"hidden":return!S(e)==!!t.value;case"editable":return $(e,n)===!!t.value;case"selected":return!0===e.selected==!!t.value;case"enabled":return!1!==e.enabled==!!t.value;case"hittable":return!0===e.hittable==!!t.value;default:return!1}})(e,t,n))}function N(e,n){return t(e??"")===t(n)}function C(e,t,n){let r=n.requireRect??!1,i=n.requireUnique??!0,l=[];for(let[u,a]of t.selectors.entries()){let t=function(e,t,n,r){let i=0,l=null,u=null,a=!1;for(let c of e){if(r&&!c.rect||!y(c,t,n))continue;if(i+=1,l??=c,!u){u=c;continue}let e=function(e,t){let n=e.depth??0,r=t.depth??0;if(n!==r)return n>r?1:-1;let i=A(e),l=A(t);return i!==l?i<l?1:-1:0}(c,u);e>0?(u=c,a=!1):0===e&&(a=!0)}return{count:i,firstNode:l,disambiguated:a?null:u}}(e,a,n.platform,r);if(l.push({selector:a.raw,matches:t.count}),0!==t.count&&t.firstNode){if(i&&1!==t.count){if(!n.disambiguateAmbiguous||!t.disambiguated)continue;return{node:t.disambiguated,selector:a,selectorIndex:u,matches:t.count,diagnostics:l}}return{node:t.firstNode,selector:a,selectorIndex:u,matches:t.count,diagnostics:l}}}return null}function T(e,t,n){let r=n.requireRect??!1,i=[];for(let[l,u]of t.selectors.entries()){let t=function(e,t,n,r){let i=0;for(let l of e)(!r||l.rect)&&y(l,t,n)&&(i+=1);return i}(e,u,n.platform,r);if(i.push({selector:u.raw,matches:t}),t>0)return{selectorIndex:l,selector:u,matches:t,diagnostics:i}}return null}function I(e,t,n){if(0===t.length)return`Selector did not match: ${e.raw}`;let r=t.map(e=>`${e.selector} -> ${e.matches}`).join(", ");return n.unique??!0?`Selector did not resolve uniquely (${r})`:`Selector did not match (${r})`}function A(e){return e.rect?e.rect.width*e.rect.height:1/0}function L(e,t,n={}){let r=[],i=u(e.type??""),l=q(e.identifier),a=q(e.label),c=q(e.value),o=q(v(e)),s="fill"===n.action;l&&r.push(`id=${R(l)}`),i&&a&&r.push(s?`role=${R(i)} label=${R(a)} editable=true`:`role=${R(i)} label=${R(a)}`),a&&r.push(s?`label=${R(a)} editable=true`:`label=${R(a)}`),c&&r.push(s?`value=${R(c)} editable=true`:`value=${R(c)}`),o&&o!==a&&o!==c&&r.push(s?`text=${R(o)} editable=true`:`text=${R(o)}`),i&&s&&!r.some(e=>e.includes("editable=true"))&&r.push(`role=${R(i)} editable=true`);let d=Array.from(new Set(r));return 0===d.length&&i&&d.push(s?`role=${R(i)} editable=true`:`role=${R(i)}`),0===d.length&&S(e)&&d.push("visible=true"),d}function R(e){return JSON.stringify(e)}function q(e){if(!e)return null;let t=e.trim();return t||null}export{L as buildSelectorChainForNode,b as buildSnapshotNodeByIndex,r as buildTextPreview,i as describeTextSurface,w as extractNodeReadText,v as extractNodeText,n as extractReadableText,g as findNearestAncestor,p as findNearestHittableAncestor,o as findNodeByLabel,T as findSelectorChainMatch,x as findSnapshotAncestor,I as formatSelectorFailure,m as isDescendantOfSnapshotNode,h as isFillableType,$ as isNodeEditable,S as isNodeVisible,y as matchesSelector,u as normalizeType,a as prefersValueForReadableText,f as pruneGroupNodes,s as resolveRefLabel,C as resolveSelectorChain,c as splitIsSelectorArgs,l as trimText};
|
package/dist/src/8936.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{URL as t}from"node:url";import{AppError as r}from"./485.js";function o(o){if(!o)return;let i=e(o.metroHost),p=n(o.metroPort),l="http",u=e(o.bundleUrl);if(u){var m;let o;try{o=new t(u)}catch(t){throw new r("INVALID_ARGS",`Invalid runtime bundle URL: ${u}`,{},t)}("http:"===o.protocol||"https:"===o.protocol)&&(i??=e(o.hostname),p??=n(o.port.length>0?Number(o.port):"https:"===(m=o.protocol)?443:"http:"===m?80:void 0),l="https:"===o.protocol?"https":"http")}if(i&&p)return{host:i,port:p,scheme:l}}function e(t){let r=t?.trim();return r&&r.length>0?r:void 0}function n(t){if(Number.isInteger(t)&&!(t<=0)&&!(t>65535))return t}export{o as resolveRuntimeTransportHints,e as trimRuntimeValue};
|
package/dist/src/9414.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{runCmdSync as e}from"./8875.js";import{sleep as r}from"./5560.js";let t=[/(^|[/\s"'=])dist\/src\/daemon\.js($|[\s"'])/,/(^|[/\s"'=])dist\/src\/internal\/daemon\.js($|[\s"'])/,/(^|[/\s"'=])src\/daemon\.ts($|[\s"'])/];function n(e){if(!Number.isInteger(e)||e<=0)return!1;try{return process.kill(e,0),!0}catch(e){return"EPERM"===e.code}}function i(e){if(!Number.isInteger(e)||e<=0)return!1;try{return process.kill(-e,0),!0}catch(e){return"EPERM"===e.code}}function s(r){if(!Number.isInteger(r)||r<=0)return null;try{let t=e("ps",["-p",String(r),"-o","lstart="],{allowFailure:!0,timeoutMs:1e3});if(0!==t.exitCode)return null;let n=t.stdout.trim();return n.length>0?n:null}catch{return null}}function o(r){if(!Number.isInteger(r)||r<=0)return null;try{let t=e("ps",["-p",String(r),"-o","command="],{allowFailure:!0,timeoutMs:1e3});if(0!==t.exitCode)return null;let n=t.stdout.trim();return n.length>0?n:null}catch{return null}}function u(e,r){let i;if(!n(e))return!1;if(r){let t=s(e);if(!t||t!==r)return!1}let u=o(e);return!!u&&!!(i=u.toLowerCase().replaceAll("\\","/")).includes("agent-device")&&t.some(e=>e.test(i))}function l(e,r){try{return process.kill(e,r),!0}catch(r){let e=r.code;if("ESRCH"===e||"EPERM"===e)return!1;throw r}}async function c(e,t){if(!n(e))return!0;let i=Date.now();for(;Date.now()-i<t;)if(await r(50),!n(e))return!0;return!n(e)}async function a(e,r){!u(e,r.expectedStartTime)||!l(e,"SIGTERM")||await c(e,r.termTimeoutMs)||l(e,"SIGKILL")&&await c(e,r.killTimeoutMs)}export{u as isAgentDeviceDaemonProcess,n as isProcessAlive,i as isProcessGroupAlive,o as readProcessCommand,s as readProcessStartTime,a as stopProcessForTakeover,c as waitForProcessExit};
|
package/dist/src/9581.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import{COMMON_COMMAND_SUPPORTED_FLAG_KEYS as e,listCommandFamilyCliSchemas as t,METRO_PREPARE_FLAGS as o,listCommandMetadata as a}from"./2948.js";let n={cdp:{usageOverride:"cdp [...args]",listUsageOverride:"cdp",helpDescription:"Run CDP commands for React Native diagnostics, JS heap usage, heap snapshots, and leak analysis",summary:"Inspect React Native CDP targets, JS heap growth, heap snapshots, retainers, and leak signals",positionalArgs:["args?"],allowsExtraPositionals:!0,supportedFlags:e},auth:{usageOverride:"auth status|login|logout",listUsageOverride:"auth",helpDescription:"Manage cloud login state used by remote daemon and cloud device workflows.",summary:"Manage cloud login state used by remote daemon and cloud device workflows",positionalArgs:["status|login|logout"],supportedFlags:["remoteConfig","stateDir"]},connect:{usageOverride:"connect [cloud|proxy|browserstack|aws-device-farm] [--remote-config <path>] [--daemon-base-url <url>] [--tenant <id>] [--run-id <id>] [--lease-id <id>] [--lease-backend <backend>] [--force] [--no-login]",helpDescription:"Connect to a remote daemon, authenticate when needed, and save remote session state. AGENT_DEVICE_CLOUD_BASE_URL is the bridge/control-plane API origin; use AGENT_DEVICE_DAEMON_AUTH_TOKEN=adc_live_... for CI/service-token automation.",listUsageOverride:"connect",summary:"Attach CLI commands to a saved remote daemon/cloud lease; inspect for remote runs, tenants, or service-token CI",allowedFlags:["remoteConfig","daemonBaseUrl","tenant","runId","leaseId","leaseBackend","providerApp","providerOsVersion","providerProject","providerBuild","providerSessionName","awsProjectArn","awsDeviceArn","awsAppArn","awsRegion","awsInteractionMode","force","noLogin"],supportedFlags:["stateDir","daemonAuthToken","session","platform","device",...o,"launchUrl"]},connection:{usageOverride:"connection status",listUsageOverride:"connection",helpDescription:"Inspect active remote connection state",summary:"Inspect the active saved remote connection before assuming commands are local",positionalArgs:["status"],supportedFlags:["remoteConfig","stateDir","session"]},disconnect:{helpDescription:"Disconnect remote daemon state, stop owned Metro companion, and release lease",listUsageOverride:"disconnect",summary:"Clear remote connection state, stop owned Metro companions, and release remote leases",allowedFlags:["shutdown"],supportedFlags:["remoteConfig","stateDir","session"]},mcp:{helpDescription:"Start the official stdio MCP server. It exposes structured command tools backed by the agent-device client.",summary:"Start MCP server"},proxy:{usageOverride:"proxy [--host <host>] [--port <port>] [--daemon-auth-token <token>] [--state-dir <path>]",listUsageOverride:"proxy",helpDescription:`Expose the local daemon HTTP contract through a tunnel-friendly reverse proxy.
|
|
2
|
-
|
|
3
|
-
Run this on the host that has access to simulators/devices, expose the printed local proxy URL through a tunnel, then point another machine at the tunnel URL with connect proxy.
|
|
4
|
-
|
|
5
|
-
The proxy starts or reuses a local HTTP daemon, accepts /health, /rpc, /upload and resumable /upload/* routes, and /artifacts/*, and also accepts the same routes under /agent-device/*. Health is unauthenticated for reachability probes. Other routes require the generated bearer token printed at startup, or the explicit --daemon-auth-token value when provided. The proxy rewrites authorized client requests to the upstream daemon token instead of exposing the local daemon token.
|
|
6
|
-
|
|
7
|
-
Use the /agent-device base path when connecting through cloudflared, ngrok, or another shared origin. Treat the bearer token as a secret; anyone with it can control the proxied daemon. This direct proxy flow does not use agent-device auth.
|
|
8
|
-
|
|
9
|
-
Examples:
|
|
10
|
-
agent-device proxy --port 4310
|
|
11
|
-
cloudflared tunnel --url http://127.0.0.1:4310
|
|
12
|
-
agent-device connect proxy --daemon-base-url https://example.trycloudflare.com/agent-device --daemon-auth-token <token>`,summary:"Expose a local daemon through cloudflared, ngrok, or another HTTP tunnel",allowedFlags:["proxyHost","proxyPort","daemonAuthToken","stateDir"]},"react-devtools":{usageOverride:"react-devtools [...args]",listUsageOverride:"react-devtools",helpDescription:"Run pinned agent-react-devtools commands for React Native performance profiling, component trees, props/state/hooks, and render analysis",summary:"Inspect React Native components, props, hooks, errors, slow renders, and rerender profiles",positionalArgs:["args?"],allowsExtraPositionals:!0,supportedFlags:e},web:{usageOverride:"web setup | web doctor",listUsageOverride:"web setup|doctor",helpDescription:`Install and inspect the managed web automation backend used by --platform web.
|
|
13
|
-
|
|
14
|
-
First-run flow:
|
|
15
|
-
agent-device web setup
|
|
16
|
-
agent-device open "https://example.com" --platform web
|
|
17
|
-
agent-device snapshot -i --platform web
|
|
18
|
-
agent-device close --platform web
|
|
19
|
-
|
|
20
|
-
Runtime web commands do not install the backend implicitly. If the managed backend is missing, run agent-device web setup. The backend is resolved only from the managed install in the effective agent-device state dir.
|
|
21
|
-
|
|
22
|
-
Use web setup to install or reuse the pinned backend. Use web doctor after setup to verify browser backend health.`,summary:"Manage web automation backend",positionalArgs:["setup|doctor"],supportedFlags:["stateDir"]}},r=t(),s=new Map(a().map(t=>[t.name,{helpDescription:t.description,supportedFlags:e}]));function i(e){if(e)return c(e)}function d(e){let t=c(e);if(!t)throw Error(`Missing command schema for ${e}`);return t}function c(e){let t=Object.hasOwn(n,e)?n[e]:void 0;if(t)return t;let o=s.get(e),a=Object.hasOwn(r,e)?r[e]:void 0;if(o)return a?{...o,...a}:o}function l(e,t){let o=i(e);if(!o?.defaults)return!1;let a=!1;for(let[e,n]of Object.entries(o.defaults))void 0===t[e]&&(t[e]=n,a=!0);return a}export{l as applyCommandDefaults,d as getCliCommandSchema,i as getCommandSchema};
|
package/dist/src/9612.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import e from"node:os";import r from"node:path";function o(r){return r?.HOME?.trim()||e.homedir()}function t(e,n={}){return"~"===e?o(n.env):e.startsWith("~/")?r.join(o(n.env),e.slice(2)):e}function n(e,o={}){let s=t(e,o);return r.isAbsolute(s)?s:r.resolve(o.cwd??process.cwd(),s)}export{t as expandUserHomePath,n as resolveUserPath};
|
package/dist/src/9624.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{emitDiagnostic as e}from"./8875.js";import{AppError as t}from"./485.js";import{isClipboardShellUnsupported as i,resolveAndroidAdbExecutor as n}from"./3340.js";import{sleep as r}from"./5560.js";let o=new Set(["com.google.android.inputmethod.latin","com.samsung.android.honeyboard","com.touchtype.swiftkey","com.microsoft.swiftkey"]);function a(e){let t=u(e.packageName),i=(e.resourceId??"").toLowerCase(),n=u(e.activeInputMethodPackage);if(t&&n&&t===n)return{inputMethodOwned:!0,source:"active-input-method"};if(n&&i.startsWith(`${n}:id/`))return{inputMethodOwned:!0,source:"active-input-method-resource"};if(t&&o.has(t))return{inputMethodOwned:!0,source:"known-ime-package"};for(let e of o)if(i.startsWith(`${e}:id/`))return{inputMethodOwned:!0,source:"known-ime-resource"};return{inputMethodOwned:!1,source:"app"}}function d(e){return a(e).inputMethodOwned}function u(e){return(e??"").trim().toLowerCase()||void 0}let s=["mInputShown","mIsInputViewShown","isInputViewShown","mDecorViewVisible","mWindowVisible","mInShowWindow"],c=new Map([[2,"number"],[3,"phone"],[4,"datetime"]]),l=new Set([32,208]),p=new Set([128,224,144]);async function w(e){return await f(n(e))}async function f(i){var n,r,d;let w,f,h,m,I,y,g,_,C=await i(["shell","dumpsys","input_method"],{allowFailure:!0});if(0!==C.exitCode)throw new t("COMMAND_FAILED","Failed to query Android keyboard state",{stdout:C.stdout,stderr:C.stderr,exitCode:C.exitCode});return f=function(e){var t=function(e,t){let i=new Map,n=RegExp(`\\b(${t.join("|")})=([a-zA-Z]+)\\b`,"g");for(let t of e.matchAll(n)){let e=t[1],n=t[2]?.toLowerCase();e&&("true"===n||"false"===n)&&i.set(e,"true"===n)}return i}(e,s);if(0===t.size)return null;let i=A(t,["mWindowVisible","mDecorViewVisible","mInShowWindow"]);if(void 0!==i)return i;let n=t.get("mInputShown");return void 0!==n?n:A(t,["mIsInputViewShown","isInputViewShown"])??null}(n=C.stdout)??function(e){let t=e.match(/\bmImeWindowVis=0x([0-9a-fA-F]+)\b/),i=t?.[1];if(!i)return null;let n=Number.parseInt(i,16);return Number.isNaN(n)?null:(1&n)!=0}(n),h=(w=b(n,/\binputType=0x([0-9a-fA-F]+)\b/gi))?`0x${w.toLowerCase()}`:void 0,m=b(n,/\bpackageName=([A-Za-z0-9_.]+)\b/g),I=b(n,/\b(?:resourceId|resource-id)=([^\s,}]+)/g),g=function(e,t,i){return e||t?a({packageName:e,resourceId:t,activeInputMethodPackage:i}).inputMethodOwned?"ime":"app":"unknown"}(m,I,y=function(e){for(let t of[/\bmCurMethodId=([^\s]+)/i,/\bmCurId=([^\s]+)/i,/\bmCurrentInputMethodId=([^\s]+)/i,/\bcurMethodId=([^\s]+)/i]){let i=e.match(t),n=function(e){let t=(e??"").trim();if(!t)return;let i=(t.split("/")[0]??"").match(/[a-zA-Z0-9_.]+/);return u(i?.[0])}(i?.[1]);if(n)return n}}(n)),r=m,d=I,!y&&((_=u(r))&&o.has(_)||function(e){let t=(e??"").toLowerCase();for(let e of o)if(t.startsWith(`${e}:id/`))return!0;return!1}(d))&&e({level:"warn",phase:"android_input_ownership_fallback",data:{focusedPackage:r,focusedResourceId:d}}),{visible:f??!1,inputType:h,type:h?function(e){let t=Number.parseInt(e.replace(/^0x/i,""),16);if(Number.isNaN(t))return"unknown";let i=15&t,n=c.get(i);if(n)return n;if(1!==i)return"unknown";let r=4080&t;return l.has(r)?"email":p.has(r)?"password":"text"}(h):void 0,inputMethodPackage:y,focusedPackage:m,focusedResourceId:I,inputOwner:g}}async function h(e){return await m(n(e))}async function m(e){let i=await f(e),n=i,o=0;for(;n.visible&&o<2;)await e(["shell","input","keyevent","111"]),o+=1,await r(120),n=await f(e);if(i.visible&&n.visible)throw new t("UNSUPPORTED_OPERATION","Android keyboard dismiss is unavailable for the current IME without back navigation.",{attempts:o,inputType:n.inputType,type:n.type,inputMethodPackage:n.inputMethodPackage,focusedPackage:n.focusedPackage,focusedResourceId:n.focusedResourceId,inputOwner:n.inputOwner});return{attempts:o,wasVisible:i.visible,dismissed:i.visible&&!n.visible,visible:n.visible,inputType:n.inputType,type:n.type,inputMethodPackage:n.inputMethodPackage,focusedPackage:n.focusedPackage,focusedResourceId:n.focusedResourceId,inputOwner:n.inputOwner}}function b(e,t){let i;for(let n of e.matchAll(t))i=n[1];return i}function A(e,t){for(let i of t){let t=e.get(i);if(void 0!==t)return t}}async function I(e){return await y(n(e))}async function y(e){let t,i;return(i=(t=(await C(e,["shell","cmd","clipboard","get","text"],"read")).replace(/\r\n/g,"\n").replace(/\n$/,"")).match(/^clipboard text:\s*(.*)$/i))?i[1]??"":"null"===t.trim().toLowerCase()?"":t}async function g(e,t){await _(n(e),t)}async function _(e,t){await C(e,["shell","cmd","clipboard","set","text",t],"write")}async function C(e,n,r){let o=await e(n,{allowFailure:!0});if(i(o.stdout,o.stderr))throw new t("UNSUPPORTED_OPERATION",`Android shell clipboard ${r} is not supported on this device.`);if(0!==o.exitCode)throw new t("COMMAND_FAILED",`Failed to ${r} Android clipboard text`,{stdout:o.stdout,stderr:o.stderr,exitCode:o.exitCode});return o.stdout}export{h as dismissAndroidKeyboard,m as dismissAndroidKeyboardWithAdb,w as getAndroidKeyboardState,f as getAndroidKeyboardStatusWithAdb,d as isAndroidInputMethodOwnedNode,I as readAndroidClipboardText,y as readAndroidClipboardWithAdb,g as writeAndroidClipboardText,_ as writeAndroidClipboardWithAdb};
|