agent-device 0.16.2 → 0.16.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/android-multitouch-helper/dist/{agent-device-android-multitouch-helper-0.16.2.apk → agent-device-android-multitouch-helper-0.16.4.apk} +0 -0
  2. package/android-multitouch-helper/dist/agent-device-android-multitouch-helper-0.16.4.apk.sha256 +1 -0
  3. package/android-multitouch-helper/dist/{agent-device-android-multitouch-helper-0.16.2.manifest.json → agent-device-android-multitouch-helper-0.16.4.manifest.json} +4 -4
  4. package/android-snapshot-helper/dist/agent-device-android-snapshot-helper-0.16.4.apk +0 -0
  5. package/android-snapshot-helper/dist/agent-device-android-snapshot-helper-0.16.4.apk.sha256 +1 -0
  6. package/android-snapshot-helper/dist/{agent-device-android-snapshot-helper-0.16.2.manifest.json → agent-device-android-snapshot-helper-0.16.4.manifest.json} +6 -6
  7. package/dist/src/1393.js +1 -0
  8. package/dist/src/1769.js +7 -7
  9. package/dist/src/221.js +6 -4
  10. package/dist/src/6277.js +2 -2
  11. package/dist/src/7519.js +1 -1
  12. package/dist/src/7599.js +3 -0
  13. package/dist/src/9542.js +1 -1
  14. package/dist/src/android-adb.js +1 -1
  15. package/dist/src/android-snapshot-helper.d.ts +10 -1
  16. package/dist/src/android-snapshot-helper.js +1 -1
  17. package/dist/src/cli.js +15 -13
  18. package/dist/src/index.d.ts +2 -0
  19. package/dist/src/internal/daemon.js +51 -51
  20. package/ios-runner/AgentDeviceRunner/AgentDeviceRunner/Assets.xcassets/AppIcon.appiconset/logo.jpg +0 -0
  21. package/ios-runner/AgentDeviceRunner/AgentDeviceRunner/Assets.xcassets/Logo.imageset/logo.jpg +0 -0
  22. package/ios-runner/AgentDeviceRunner/AgentDeviceRunner.xcodeproj/project.pbxproj +0 -4
  23. package/package.json +1 -1
  24. package/server.json +2 -2
  25. package/android-multitouch-helper/dist/agent-device-android-multitouch-helper-0.16.2.apk.sha256 +0 -1
  26. package/android-snapshot-helper/dist/agent-device-android-snapshot-helper-0.16.2.apk +0 -0
  27. package/android-snapshot-helper/dist/agent-device-android-snapshot-helper-0.16.2.apk.sha256 +0 -1
  28. package/dist/src/3622.js +0 -3
  29. package/ios-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -14
  30. package/ios-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/Assets.xcassets/AppIcon.appiconset/logo-tinted.jpg +0 -0
  31. package/ios-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/Assets.xcassets/Contents.json +0 -6
package/dist/src/6277.js CHANGED
@@ -1,4 +1,4 @@
1
- import e from"node:fs";import t from"node:path";import{fileURLToPath as r}from"node:url";import n from"node:crypto";import{resolveUserPath as i,expandUserHomePath as o}from"./3267.js";import{AppError as a}from"./9152.js";import{splitSelectorFromArgs as s,tryParseSelectorChain as l}from"./940.js";import{assertResolvedAppsFilter as u}from"./3622.js";function c(e,t){let r=[],n=e+t.toString(),i=n.indexOf("\n");for(;-1!==i;){let e=n.slice(0,i).trim();n=n.slice(i+1),e&&r.push(e),i=n.indexOf("\n")}return{lines:r,buffer:n}}function d(){try{let r=p();return JSON.parse(e.readFileSync(t.join(r,"package.json"),"utf8")).version??"0.0.0"}catch{return"0.0.0"}}function p(){let n=t.dirname(r(import.meta.url)),i=n;for(let r=0;r<6;r+=1){let r=t.join(i,"package.json");if(e.existsSync(r))return i;i=t.dirname(i)}return n}function f(e){let r,n=(r=(e??"").trim())?i(r):t.join(o("~"),".agent-device");return{baseDir:n,infoPath:t.join(n,"daemon.json"),lockPath:t.join(n,"daemon.lock"),logPath:t.join(n,"daemon.log"),sessionsDir:t.join(n,"sessions")}}function m(e){let t=(e??"").trim().toLowerCase();return"http"===t?"http":"dual"===t?"dual":"socket"}function h(e){let t=(e??"").trim().toLowerCase();return"auto"===t?"auto":"socket"===t?"socket":"http"===t?"http":"auto"}function g(e){return"tenant"===(e??"").trim().toLowerCase()?"tenant":"none"}function v(e){if(!e)return;let t=e.trim();if(t&&/^[a-zA-Z0-9._-]{1,128}$/.test(t))return t}let y=/(?:^|[^\w$.])(?:import|export)\s+(?:type\s+)?(?:[^'"`]*?\s+from\s+)?['"]([^'"]+)['"]/gm,b=/import\(\s*['"]([^'"]+)['"]\s*\)/gm,w=[".ts",".tsx",".js",".jsx",".mjs",".cjs"];function S(){let e=process.argv[1];return e?I(e):"unknown"}function I(r,i=p()){try{let o=t.resolve(i),a=[t.resolve(r)],s=new Set,l=[];for(;a.length>0;){let r=a.pop();if(!r||s.has(r))continue;s.add(r);let n=e.statSync(r);if(!n.isFile())continue;let i=t.relative(o,r)||r;l.push(`${i}:${n.size}:${Math.trunc(n.mtimeMs)}`);let u=e.readFileSync(r,"utf8");for(let e of function(e){let t=new Set;return A(e,y,t),A(e,b,t),[...t]}(u)){let n=function(e,r){let n=t.resolve(t.dirname(e),r),i=x(n);if(i)return i;for(let e of w){let t=x(`${n}${e}`);if(t)return t}for(let e of w){let r=x(t.join(n,`index${e}`));if(r)return r}return null}(r,e);n&&a.push(n)}}let u=l.sort().join("|"),c=n.createHash("sha1").update(u).digest("hex");return`graph:${l.length}:${c}`}catch{return"unknown"}}function A(e,t,r){t.lastIndex=0;let n=null;for(;null!==(n=t.exec(e));){let e=n[1]?.trim();e?.startsWith(".")&&r.add(e)}}function x(t){try{return e.statSync(t).isFile()?t:null}catch{return null}}let N={alert:"alert",appState:"appstate",appSwitcher:"app-switcher",apps:"apps",back:"back",batch:"batch",boot:"boot",click:"click",close:"close",clipboard:"clipboard",devices:"devices",diff:"diff",fill:"fill",find:"find",focus:"focus",gesture:"gesture",get:"get",home:"home",install:"install",installFromSource:"install-from-source",is:"is",keyboard:"keyboard",logs:"logs",longPress:"longpress",network:"network",open:"open",perf:"perf",press:"press",push:"push",record:"record",reactNative:"react-native",reinstall:"reinstall",replay:"replay",rotate:"rotate",scroll:"scroll",screenshot:"screenshot",settings:"settings",snapshot:"snapshot",swipe:"swipe",test:"test",trace:"trace",triggerAppEvent:"trigger-app-event",type:"type",wait:"wait"},k={installSource:"install_source",leaseAllocate:"lease_allocate",leaseHeartbeat:"lease_heartbeat",leaseRelease:"lease_release",releaseMaterializedPaths:"release_materialized_paths",sessionList:"session_list"},D={auth:"auth",connect:"connect",connection:"connection",disconnect:"disconnect",mcp:"mcp",metro:"metro",reactDevtools:"react-devtools",session:"session"},R="gesture requires one of: pan, fling, pinch, rotate, transform",M=E(D.auth,D.connect,D.connection,D.disconnect,D.mcp,D.reactDevtools);E(D.auth,D.connect,D.connection,D.disconnect,D.mcp,D.metro,D.reactDevtools,D.session,N.appState,N.batch,N.devices,N.gesture,N.replay,N.test,N.trace);let _={inventory:E(k.sessionList,N.devices,N.apps),state:E(N.boot,N.appState),observability:E(N.perf,N.logs,N.network),replay:E(N.replay,N.test),snapshot:E(N.snapshot,N.diff,N.wait,N.alert,N.settings),replayScopedAction:E(N.alert,N.back,N.click,N.clipboard,N.diff,N.fill,N.find,N.gesture,N.get,N.home,N.is,N.keyboard,N.longPress,"pinch",N.press,N.record,N.reactNative,N.rotate,N.screenshot,N.scroll,N.settings,N.snapshot,N.swipe,N.type,N.wait),androidBlockingDialogGuardedAction:E(N.back,N.click,N.fill,N.focus,N.gesture,N.home,N.keyboard,N.longPress,"fling","pan","pinch",N.press,N.rotate,"rotate-gesture",N.scroll,N.swipe,"transform-gesture",N.type),selectorValidationExempt:E(k.sessionList,N.devices,k.releaseMaterializedPaths),leaseAdmissionExempt:E(k.sessionList,N.devices,k.releaseMaterializedPaths,k.leaseAllocate,k.leaseHeartbeat,k.leaseRelease)};function E(...e){return new Set(e)}function L(){return[...Object.values(N),...Object.values(D)].sort()}function j(){return L().filter(e=>!M.has(e))}function P(e){return e.meta?.requestProgress==="replay-test"}function $(e){return!!e&&"object"==typeof e&&"progress"===e.type&&!!e.event}function F(e){return!!e&&"object"==typeof e&&"response"===e.type&&!!e.response}function z(e){return`${JSON.stringify({type:"progress",event:e})}
1
+ import e from"node:fs";import t from"node:path";import{fileURLToPath as r}from"node:url";import n from"node:crypto";import{resolveUserPath as i,expandUserHomePath as o}from"./3267.js";import{AppError as a}from"./9152.js";import{splitSelectorFromArgs as s,tryParseSelectorChain as l}from"./940.js";import{assertResolvedAppsFilter as u}from"./1393.js";function c(e,t){let r=[],n=e+t.toString(),i=n.indexOf("\n");for(;-1!==i;){let e=n.slice(0,i).trim();n=n.slice(i+1),e&&r.push(e),i=n.indexOf("\n")}return{lines:r,buffer:n}}function d(){try{let r=p();return JSON.parse(e.readFileSync(t.join(r,"package.json"),"utf8")).version??"0.0.0"}catch{return"0.0.0"}}function p(){let n=t.dirname(r(import.meta.url)),i=n;for(let r=0;r<6;r+=1){let r=t.join(i,"package.json");if(e.existsSync(r))return i;i=t.dirname(i)}return n}function f(e){let r,n=(r=(e??"").trim())?i(r):t.join(o("~"),".agent-device");return{baseDir:n,infoPath:t.join(n,"daemon.json"),lockPath:t.join(n,"daemon.lock"),logPath:t.join(n,"daemon.log"),sessionsDir:t.join(n,"sessions")}}function m(e){let t=(e??"").trim().toLowerCase();return"http"===t?"http":"dual"===t?"dual":"socket"}function h(e){let t=(e??"").trim().toLowerCase();return"auto"===t?"auto":"socket"===t?"socket":"http"===t?"http":"auto"}function g(e){return"tenant"===(e??"").trim().toLowerCase()?"tenant":"none"}function v(e){if(!e)return;let t=e.trim();if(t&&/^[a-zA-Z0-9._-]{1,128}$/.test(t))return t}let y=/(?:^|[^\w$.])(?:import|export)\s+(?:type\s+)?(?:[^'"`]*?\s+from\s+)?['"]([^'"]+)['"]/gm,b=/import\(\s*['"]([^'"]+)['"]\s*\)/gm,w=[".ts",".tsx",".js",".jsx",".mjs",".cjs"];function S(){let e=process.argv[1];return e?I(e):"unknown"}function I(r,i=p()){try{let o=t.resolve(i),a=[t.resolve(r)],s=new Set,l=[];for(;a.length>0;){let r=a.pop();if(!r||s.has(r))continue;s.add(r);let n=e.statSync(r);if(!n.isFile())continue;let i=t.relative(o,r)||r;l.push(`${i}:${n.size}:${Math.trunc(n.mtimeMs)}`);let u=e.readFileSync(r,"utf8");for(let e of function(e){let t=new Set;return A(e,y,t),A(e,b,t),[...t]}(u)){let n=function(e,r){let n=t.resolve(t.dirname(e),r),i=x(n);if(i)return i;for(let e of w){let t=x(`${n}${e}`);if(t)return t}for(let e of w){let r=x(t.join(n,`index${e}`));if(r)return r}return null}(r,e);n&&a.push(n)}}let u=l.sort().join("|"),c=n.createHash("sha1").update(u).digest("hex");return`graph:${l.length}:${c}`}catch{return"unknown"}}function A(e,t,r){t.lastIndex=0;let n=null;for(;null!==(n=t.exec(e));){let e=n[1]?.trim();e?.startsWith(".")&&r.add(e)}}function x(t){try{return e.statSync(t).isFile()?t:null}catch{return null}}let N={alert:"alert",appState:"appstate",appSwitcher:"app-switcher",apps:"apps",back:"back",batch:"batch",boot:"boot",click:"click",close:"close",clipboard:"clipboard",devices:"devices",diff:"diff",fill:"fill",find:"find",focus:"focus",gesture:"gesture",get:"get",home:"home",install:"install",installFromSource:"install-from-source",is:"is",keyboard:"keyboard",logs:"logs",longPress:"longpress",network:"network",open:"open",perf:"perf",press:"press",push:"push",record:"record",reactNative:"react-native",reinstall:"reinstall",replay:"replay",rotate:"rotate",scroll:"scroll",screenshot:"screenshot",settings:"settings",snapshot:"snapshot",swipe:"swipe",test:"test",trace:"trace",triggerAppEvent:"trigger-app-event",type:"type",wait:"wait"},k={installSource:"install_source",leaseAllocate:"lease_allocate",leaseHeartbeat:"lease_heartbeat",leaseRelease:"lease_release",releaseMaterializedPaths:"release_materialized_paths",sessionList:"session_list"},D={auth:"auth",connect:"connect",connection:"connection",disconnect:"disconnect",mcp:"mcp",metro:"metro",reactDevtools:"react-devtools",session:"session"},R="gesture requires one of: pan, fling, pinch, rotate, transform",M=E(D.auth,D.connect,D.connection,D.disconnect,D.mcp,D.reactDevtools);E(D.auth,D.connect,D.connection,D.disconnect,D.mcp,D.metro,D.reactDevtools,D.session,N.appState,N.batch,N.devices,N.gesture,N.replay,N.test,N.trace);let _={inventory:E(k.sessionList,N.devices,N.apps),state:E(N.boot,N.appState),observability:E(N.perf,N.logs,N.network),replay:E(N.replay,N.test),snapshot:E(N.snapshot,N.diff,N.wait,N.alert,N.settings),replayScopedAction:E(N.alert,N.back,N.click,N.clipboard,N.diff,N.fill,N.find,N.gesture,N.get,N.home,N.is,N.keyboard,N.longPress,"pinch",N.press,N.record,N.reactNative,N.rotate,N.screenshot,N.scroll,N.settings,N.snapshot,N.swipe,N.type,N.wait),androidBlockingDialogGuardedAction:E(N.back,N.click,N.fill,N.focus,N.gesture,N.home,N.keyboard,N.longPress,"fling","pan","pinch",N.press,N.rotate,"rotate-gesture",N.scroll,N.swipe,"transform-gesture",N.type),selectorValidationExempt:E(k.sessionList,N.devices,k.releaseMaterializedPaths),leaseAdmissionExempt:E(k.sessionList,N.devices,k.releaseMaterializedPaths,k.leaseAllocate,k.leaseHeartbeat,k.leaseRelease)};function E(...e){return new Set(e)}function L(){return[...Object.values(N),...Object.values(D)].sort()}function j(){return L().filter(e=>!M.has(e))}function P(e){return e.meta?.requestProgress==="replay-test"}function $(e){return!!e&&"object"==typeof e&&"progress"===e.type&&!!e.event}function F(e){return!!e&&"object"==typeof e&&"response"===e.type&&!!e.response}function z(e){return`${JSON.stringify({type:"progress",event:e})}
2
2
  `}function O(e){return`${JSON.stringify({type:"response",response:e})}
3
3
  `}function q(e){return`${JSON.stringify({type:"response",response:e})}
4
- `}function G(e){var t;if("replay-test"!==e.type)return;let r=[e.status,`${e.index}/${e.total}`,e.file];void 0!==e.attempt&&void 0!==e.maxAttempts&&r.push(`attempt=${e.attempt}/${e.maxAttempts}`),e.retrying&&r.push("retry=true"),void 0!==e.durationMs&&r.push(`duration=${(t=e.durationMs,`${(Math.max(0,t)/1e3).toFixed(2)}s`)}`),e.artifactsDir&&"fail"===e.status&&r.push(`artifacts=${e.artifactsDir}`);let n=e.message?.replace(/\s+/g," ").trim();return n&&r.push(n),r.join(" ")}let T=["out","overlayRefs","screenshotFullscreen","screenshotMaxSize","screenshotNoStabilize"],V=["screenshotFullscreen","screenshotMaxSize","screenshotNoStabilize"],C=[{key:"screenshotFullscreen",names:["--fullscreen"],type:"boolean",usageLabel:"--fullscreen",usageDescription:"Screenshot: capture the full screen instead of the app window"},{key:"screenshotMaxSize",names:["--max-size"],type:"int",min:1,usageLabel:"--max-size <px>",usageDescription:"Screenshot: downscale so the longest edge is at most <px>"},{key:"screenshotNoStabilize",names:["--no-stabilize"],type:"boolean",usageLabel:"--no-stabilize",usageDescription:"Screenshot: skip Android demo-mode/status-bar stabilization and settle delay for low-latency capture loops"}];function U(e){return K({overlayRefs:e?.overlayRefs,fullscreen:e?.screenshotFullscreen,maxSize:e?.screenshotMaxSize,stabilize:!e?.screenshotNoStabilize&&void 0})}function B(e={}){return K({overlayRefs:e.overlayRefs,screenshotFullscreen:e.screenshotFullscreen??e.fullscreen,screenshotMaxSize:e.screenshotMaxSize??e.maxSize,screenshotNoStabilize:e.screenshotNoStabilize??(!1===e.stabilize||void 0)})}function H(e,t){t?.screenshotFullscreen&&e.push("--fullscreen"),"number"==typeof t?.screenshotMaxSize&&e.push("--max-size",String(t.screenshotMaxSize)),t?.screenshotNoStabilize&&e.push("--no-stabilize")}function J(e){let{args:t,flags:r,index:n}=e,i=t[n];if("--fullscreen"===i)return r.screenshotFullscreen=!0,{handled:!0,nextIndex:n};if("--no-stabilize"===i)return r.screenshotNoStabilize=!0,{handled:!0,nextIndex:n};if("--max-size"===i){let e=t[n+1],i=void 0===e?NaN:Number(e);if(!Number.isInteger(i)||i<1)throw new a("INVALID_ARGS","screenshot --max-size requires a positive integer");return r.screenshotMaxSize=i,{handled:!0,nextIndex:n+1}}return{handled:!1}}function K(e){return Object.fromEntries(Object.entries(e).filter(e=>void 0!==e[1]))}function W(e){return e?{message:e}:{}}function Y(e,t){return t?{...e,message:t}:e}function Z(e){return"string"==typeof e?.message&&e.message.length>0?e.message:null}function Q(e){let t=e.appId??e.bundleId??e.packageName;return{session:e.session,appId:t,appBundleId:e.bundleId,package:e.packageName}}function X(e,t,r){return{deviceId:t,deviceName:r,..."android"===e?{serial:t}:"ios"===e?{udid:t}:{}}}function ee(e,t={}){let r=t.includeAndroidSerial??!0;return{platform:e.platform,target:e.target,device:e.name,id:e.id,..."ios"===e.platform?{device_udid:e.ios?.udid??e.id,ios_simulator_device_set:e.ios?.simulatorSetPath??null}:{},..."android"===e.platform&&r?{serial:e.android?.serial??e.id}:{}}}function et(e){return{name:e.name,...ee(e.device,{includeAndroidSerial:!1}),createdAt:e.createdAt}}function er(e){return{platform:e.platform,id:e.id,name:e.name,kind:e.kind,target:e.target,..."boolean"==typeof e.booted?{booted:e.booted}:{}}}function en(e){return e.bundleId??e.package??e.app}function ei(e){return Y({app:e.app,appPath:e.appPath,platform:e.platform,...e.appId?{appId:e.appId}:{},...e.bundleId?{bundleId:e.bundleId}:{},...e.package?{package:e.package}:{}},`Installed: ${en(e)}`)}function eo(e){return e.appName??e.bundleId??e.packageName??e.launchTarget}function ea(e){return Y({launchTarget:e.launchTarget,...e.appName?{appName:e.appName}:{},...e.appId?{appId:e.appId}:{},...e.bundleId?{bundleId:e.bundleId}:{},...e.packageName?{package:e.packageName}:{},...e.installablePath?{installablePath:e.installablePath}:{},...e.archivePath?{archivePath:e.archivePath}:{},...e.materializationId?{materializationId:e.materializationId}:{},...e.materializationExpiresAt?{materializationExpiresAt:e.materializationExpiresAt}:{}},`Installed: ${eo(e)}`)}function es(e){let t=e.appName??e.appBundleId??e.session;return Y({session:e.session,...e.appName?{appName:e.appName}:{},...e.appBundleId?{appBundleId:e.appBundleId}:{},...e.startup?{startup:e.startup}:{},...e.runtime?{runtime:e.runtime}:{},...e.device?ee(e.device):{}},t?`Opened: ${t}`:"Opened")}function el(e){return{session:e.session,...e.shutdown?{shutdown:e.shutdown}:{},...W(e.session?`Closed: ${e.session}`:"Closed")}}function eu(e){return{nodes:e.nodes,truncated:e.truncated,...e.appName?{appName:e.appName}:{},...e.appBundleId?{appBundleId:e.appBundleId}:{},...e.visibility?{visibility:e.visibility}:{},...e.androidSnapshot?{androidSnapshot:e.androidSnapshot}:{},...e.warnings&&e.warnings.length>0?{warnings:e.warnings}:{},...e.unchanged?{unchanged:e.unchanged}:{}}}function ec(e,t,r,n){let i=r(e[t]);if(void 0===i)throw new a("COMMAND_FAILED",n,{response:e});return i}function ed(e,t){return ec(e,t,ey,`Daemon response is missing "${t}".`)}function ep(e,t){return ey(e[t])}function ef(e,t){var r;let n;return r=ey,null===(n=e[t])?null:r(n)}function em(e,t){return ec(e,t,ew,`Daemon response has invalid "${t}".`)}function eh(e,t){return function(e){return"tv"===e||"mobile"===e||"desktop"===e?e:void 0}(e[t])??"mobile"}function eg(e,t){let r=e[t];if(!eI(r))return;let n=ev(r,"x"),i=ev(r,"y"),o=ev(r,"width"),a=ev(r,"height");if(void 0!==n&&void 0!==i&&void 0!==o&&void 0!==a)return{x:n,y:i,width:o,height:a}}function ev(e,t){let r=e[t];return"number"==typeof r?r:void 0}function ey(e){return"string"==typeof e&&e.length>0?e:void 0}function eb(e){return"number"==typeof e&&Number.isFinite(e)?e:void 0}function ew(e){return"ios"===e||"macos"===e||"android"===e||"linux"===e?e:void 0}function eS(e){return"simulator"===e||"emulator"===e||"device"===e?e:void 0}function eI(e){return"object"==typeof e&&null!==e}function eA(e){let t={};for(let[r,n]of Object.entries(e))void 0!==n&&(t[r]=n);return t}function ex(e){return e.split("\n").map(e=>e.trim()).filter(e=>e.length>0)}function eN(e,t){let r=ep(e,"bundleId"),n=ep(e,"package");return{app:ed(e,"app"),appPath:ed(e,"appPath"),platform:em(e,"platform"),appId:r??n,bundleId:r,package:n,identifiers:Q({session:t,bundleId:r,packageName:n})}}function ek(e,t){let r=ep(e,"bundleId"),n=ep(e,"packageName"),i=r??n??ep(e,"appId"),o=ep(e,"launchTarget")??n??r??i;if(!o)throw new a("COMMAND_FAILED",'Daemon response is missing "launchTarget".',{response:e});return{appName:ep(e,"appName"),appId:i,bundleId:r,packageName:n,launchTarget:o,installablePath:ep(e,"installablePath"),archivePath:ep(e,"archivePath"),materializationId:ep(e,"materializationId"),materializationExpiresAt:ep(e,"materializationExpiresAt"),identifiers:Q({session:t,bundleId:r,packageName:n,appId:i})}}function eD(e){return{released:!0===e.released,materializationId:ed(e,"materializationId"),identifiers:{}}}function eR(e){let{record:t,platform:r,id:n,name:i,target:o}=e_(e,"name");return{platform:r,target:o,kind:ec(t,"kind",eS,'Daemon response has invalid "kind".'),id:n,name:i,booted:"boolean"==typeof t.booted?t.booted:void 0,identifiers:X(r,n,i),...eE(r,n)}}function eM(e){let{record:t,platform:r,id:n,name:i,target:o}=e_(e,"name"),a=ed(t,"device"),s={session:i,...X(r,n,a)};return{name:i,createdAt:ec(t,"createdAt",eb,'Daemon response is missing numeric "createdAt".'),device:{platform:r,target:o,id:n,name:a,identifiers:s,...eE(r,n,ef(t,"ios_simulator_device_set"))},identifiers:s}}function e_(e,t){let r=function(e){if(!eI(e))throw new a("COMMAND_FAILED","Daemon returned an unexpected response shape.",{value:e});return e}(e);return{record:r,platform:em(r,"platform"),id:ed(r,"id"),name:ed(r,t),target:eh(r,"target")}}function eE(e,t,r){return{ios:"ios"===e?{udid:t,...void 0!==r?{simulatorSetPath:r}:{}}:void 0,android:"android"===e?{serial:t}:void 0}}function eL(e){if(!eI(e))return;let t=e.platform,r=ep(e,"metroHost"),n="number"==typeof e.metroPort?e.metroPort:void 0;return{platform:"ios"===t||"android"===t?t:void 0,metroHost:r,metroPort:n,bundleUrl:ep(e,"bundleUrl"),launchUrl:ep(e,"launchUrl")}}function ej(e){let t=e.platform,r=ep(e,"id"),n=ep(e,"device");if("ios"!==t&&"macos"!==t&&"android"!==t&&"linux"!==t||!r||!n)return;let i=eh(e,"target"),o=X(t,r,n);return{platform:t,target:i,id:r,name:n,identifiers:o,ios:"ios"===t?{udid:ep(e,"device_udid")??r,simulatorSetPath:ef(e,"ios_simulator_device_set")}:void 0,android:"android"===t?{serial:ep(e,"serial")??r}:void 0}}function eP(e){if(eI(e)&&"number"==typeof e.durationMs&&"string"==typeof e.measuredAt&&"string"==typeof e.method)return{durationMs:e.durationMs,measuredAt:e.measuredAt,method:e.method,appTarget:ep(e,"appTarget"),appBundleId:ep(e,"appBundleId")}}function e$(e){return Array.isArray(e)?e:[]}function eF(e){let t=e.overlayRefs;if(!Array.isArray(t))return;let r=[];for(let e of t){if(!eI(e))continue;let t=ep(e,"ref"),n=eg(e,"rect"),i=eg(e,"overlayRect"),o=function(e,t){let r=e[t];if(!eI(r))return;let n=ev(r,"x"),i=ev(r,"y");if(void 0!==n&&void 0!==i)return{x:n,y:i}}(e,"center");t&&n&&i&&o&&r.push({ref:t,label:ep(e,"label"),rect:n,overlayRect:i,center:o})}return r}function ez(e){return eA({stateDir:e.stateDir,daemonBaseUrl:e.daemonBaseUrl,daemonAuthToken:e.daemonAuthToken,daemonTransport:e.daemonTransport,daemonServerMode:e.daemonServerMode,tenant:e.tenant,sessionIsolation:e.sessionIsolation,runId:e.runId,leaseId:e.leaseId,leaseBackend:e.leaseBackend,platform:e.platform,target:e.target,device:e.device,udid:e.udid,serial:e.serial,iosSimulatorDeviceSet:e.iosSimulatorDeviceSet,androidDeviceAllowlist:e.androidDeviceAllowlist,surface:e.surface,activity:e.activity,launchConsole:e.launchConsole,relaunch:e.relaunch,shutdown:e.shutdown,saveScript:e.saveScript,noRecord:e.noRecord,backMode:e.backMode,metroHost:e.metroHost,metroPort:e.metroPort,bundleUrl:e.bundleUrl,launchUrl:e.launchUrl,snapshotInteractiveOnly:e.interactiveOnly,snapshotCompact:e.compact,snapshotDepth:e.depth,snapshotScope:e.scope,snapshotRaw:e.raw,snapshotForceFull:e.forceFull,...B(e),appsFilter:e.appsFilter,out:e.out,count:e.count,fps:e.fps,quality:e.quality,hideTouches:e.hideTouches,intervalMs:e.intervalMs,delayMs:e.delayMs,holdMs:e.holdMs,jitterPx:e.jitterPx,pixels:e.pixels,doubleTap:e.doubleTap,clickButton:e.clickButton,pauseMs:e.pauseMs,pattern:e.pattern,headless:e.headless,restart:e.restart,replayUpdate:e.replayUpdate,replayBackend:e.replayBackend,replayEnv:e.replayEnv,replayShellEnv:e.replayShellEnv,failFast:e.failFast,timeoutMs:e.timeoutMs,retries:e.retries,artifactsDir:e.artifactsDir,reportJunit:e.reportJunit,findFirst:e.findFirst,findLast:e.findLast,networkInclude:e.networkInclude,batchOnError:e.batchOnError,batchMaxSteps:e.batchMaxSteps,batchSteps:e.batchSteps,verbose:e.debug})}function eO(e){return eA({requestId:e.requestId,cwd:e.cwd,debug:e.debug,lockPolicy:e.lockPolicy,lockPlatform:e.lockPlatform,tenantId:e.tenant,runId:e.runId,leaseId:e.leaseId,leaseBackend:e.leaseBackend,leaseTtlMs:e.leaseTtlMs,sessionIsolation:e.sessionIsolation,installSource:e.installSource,retainMaterializedPaths:e.retainMaterializedPaths,materializedPathRetentionMs:e.materializedPathRetentionMs,materializationId:e.materializationId})}function eq(e){return e??"default"}function eG(e,t){if(!e||"object"!=typeof e||Array.isArray(e))throw new a("INVALID_ARGS",`${t} installSource must be an object.`);if("github-actions-artifact"!==eC(e.type,`${t} installSource.type`))throw new a("INVALID_ARGS",`${t} installSource.type must be "github-actions-artifact".`);let{owner:r,repo:n}=eV(eC(e.repo,`${t} installSource.repo`),`${t} installSource.repo`);return eT(r,n,e.artifact,`${t} installSource.artifact`)}function eT(e,t,r,n){var i;return"number"==typeof r||"string"==typeof(i=r)&&/^\d+$/.test(i.trim())?{kind:"github-actions-artifact",owner:e,repo:t,artifactId:function(e,t){let r="number"==typeof e?e:"string"==typeof e?Number(e):NaN;if(!Number.isInteger(r))throw new a("INVALID_ARGS",`${t} must be an integer.`);return r}(r,n)}:{kind:"github-actions-artifact",owner:e,repo:t,artifactName:eC(r,n)}}function eV(e,t){let r=e.indexOf("/");if(r<=0||r===e.length-1||-1!==e.indexOf("/",r+1))throw new a("INVALID_ARGS",`${t} must use owner/repo.`);let n={owner:e.slice(0,r).trim(),repo:e.slice(r+1).trim()};if(!n.owner||!n.repo)throw new a("INVALID_ARGS",`${t} must use owner/repo.`);return n}function eC(e,t){let r="string"==typeof e&&e.trim().length>0?e.trim():void 0;if(!r)throw new a("INVALID_ARGS",`${t} must be a non-empty string.`);return r}let eU=["ios","android","macos","linux","apple"],eB=["mobile","tv","desktop"],eH=["ref","selector","point"];function eJ(e){return{type:"string",...e?{description:e}:{}}}function eK(e){return{type:"integer",...e?{description:e}:{}}}function eW(e){return{type:"boolean",...e?{description:e}:{}}}function eY(e){return{type:"object",additionalProperties:!0,...e?{description:e}:{}}}function eZ(e){return{...e,required:!0}}function eQ(e){return tI(eJ(e),tl)}function eX(e){return tI({type:"number",...e?{description:e}:{}},tc)}function e0(e,t={}){var r,n;return tI((r=e,n=t,{...eK(r),...void 0===n.min?{}:{minimum:n.min},...void 0===n.max?{}:{maximum:n.max}}),(e,r)=>td(e,r,t))}function e1(e){return tI(eW(e),tp)}function e2(e,t){return tI({type:"string",enum:e,...t?{description:t}:{}},(t,r)=>tm(t,r,e))}function e3(e){return tI(eY(e),tA)}function e8(e){return tI({type:"array",items:{type:"string"},...e?{description:e}:{}},tx)}function e4(e){return tI(e,(e,t)=>e[t])}function e6(e,t){return tI(e,t)}function e9(){return tI({oneOf:[...tN(),{type:"object",properties:{kind:{type:"string",const:"point"},x:{type:"number"},y:{type:"number"}},required:["kind","x","y"],additionalProperties:!1}],description:"UI target. This is separate from deviceTarget, which selects the device form."},(e,t)=>void 0===e[t]?void 0:function(e,t){let r=tk(e,t),n=tf(r,"kind",eH);switch(n){case"ref":return{kind:n,ref:ts(r,"ref"),label:tl(r,"label")};case"selector":return{kind:n,selector:ts(r,"selector")};case"point":return{kind:n,x:tu(r,"x"),y:tu(r,"y")}}}(e,t))}function e5(){return tI({oneOf:tN(),description:"UI element target by snapshot ref or selector expression."},(e,t)=>{let r,n;return void 0===e[t]?void 0:"ref"===(n=tf(r=tk(e,t),"kind",["ref","selector"]))?{kind:n,ref:ts(r,"ref"),label:tl(r,"label")}:{kind:n,selector:ts(r,"selector")}})}function e7(e){return tI({type:"object",description:e,properties:{x:{type:"number"},y:{type:"number"}},required:["x","y"],additionalProperties:!1},(e,t)=>void 0===e[t]?void 0:ta(e,t))}function te(){return{depth:e0("Snapshot traversal depth.",{min:0}),scope:eQ("Snapshot scope selector used before resolution."),raw:e1("Use raw snapshot data during selector resolution.")}}function tt(){return{count:e0("Number of press/click repetitions.",{min:1}),intervalMs:e0("Delay between repeated press/click actions.",{min:0}),holdMs:e0("Hold duration for each action.",{min:0}),jitterPx:e0("Randomization radius in pixels.",{min:0}),doubleTap:e1("Request a double-tap action.")}}function tr(e){return function(e,t=[]){return{type:"object",properties:{session:{type:"string",description:"Agent-device session name."},platform:{type:"string",enum:eU,description:"Platform selector used to resolve a device."},deviceTarget:{type:"string",enum:eB,description:"Device target form. Maps to the CLI --target flag."},target:{type:"string",enum:eB,description:"Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element."},device:{type:"string",description:"Device name selector."},udid:{type:"string",description:"iOS device UDID selector."},serial:{type:"string",description:"Android serial selector."},iosSimulatorDeviceSet:{type:"string",description:"iOS simulator device-set path used for device resolution."},androidDeviceAllowlist:{type:"string",description:"Android serial allowlist used for device resolution."},daemonBaseUrl:{type:"string",description:"Remote daemon base URL."},daemonAuthToken:{type:"string",description:"Remote daemon auth token."},tenant:{type:"string",description:"Remote tenant identifier."},runId:{type:"string",description:"Lease run identifier."},leaseId:{type:"string",description:"Existing lease identifier."},cwd:{type:"string",description:"Working directory for command execution."},debug:{type:"boolean",description:"Enable debug diagnostics."},...e},...t.length>0?{required:t}:{},additionalProperties:!1}}(Object.fromEntries(Object.entries(e).map(([e,t])=>[e,t.schema])),Object.entries(e).flatMap(([e,t])=>t.required?[e]:[]))}function tn(e,t){let r=ti(e),n=Object.fromEntries(Object.entries(t).flatMap(([e,t])=>{let n=t.read(r,e);if(t.required&&void 0===n)throw Error(`Expected ${e} to be set.`);return void 0===n?[]:[[e,n]]})),i=to(r,{readTargetAlias:!Object.hasOwn(t,"target")});return tS({...i,...th(i),...n})}function ti(e){if(null==e)return{};if(!e||"object"!=typeof e||Array.isArray(e))throw Error("Expected object arguments.");return e}function to(e,t={}){return{session:tl(e,"session"),platform:tm(e,"platform",eU),deviceTarget:function(e,t){let r=tm(e,"deviceTarget",eB);if(!1===t.readTargetAlias||void 0===e.target)return r;let n=tm(e,"target",eB);if(void 0!==r&&n!==r)throw Error("Expected target alias to match deviceTarget when both are set.");return r??n}(e,t),device:tl(e,"device"),udid:tl(e,"udid"),serial:tl(e,"serial"),iosSimulatorDeviceSet:tl(e,"iosSimulatorDeviceSet"),androidDeviceAllowlist:tl(e,"androidDeviceAllowlist"),daemonBaseUrl:tl(e,"daemonBaseUrl"),daemonAuthToken:tl(e,"daemonAuthToken"),tenant:tl(e,"tenant"),runId:tl(e,"runId"),leaseId:tl(e,"leaseId"),cwd:tl(e,"cwd"),debug:tp(e,"debug")}}function ta(e,t){let r=tk(e,t);return{x:tu(r,"x"),y:tu(r,"y")}}function ts(e,t){let r=e[t];if("string"!=typeof r||0===r.length)throw Error(`Expected ${t} to be a non-empty string.`);return r}function tl(e,t){let r=e[t];if(void 0!==r){if("string"!=typeof r||0===r.length)throw Error(`Expected ${t} to be a non-empty string.`);return r}}function tu(e,t){let r=e[t];if("number"!=typeof r||!Number.isFinite(r))throw Error(`Expected ${t} to be a finite number.`);return r}function tc(e,t){let r=e[t];if(void 0!==r){if("number"!=typeof r||!Number.isFinite(r))throw Error(`Expected ${t} to be a finite number.`);return r}}function td(e,t,r={}){let n=e[t];if(void 0!==n){if(!Number.isInteger(n))throw Error(`Expected ${t} to be an integer.`);if(void 0!==r.min&&n<r.min)throw Error(`Expected ${t} to be at least ${r.min}.`);if(void 0!==r.max&&n>r.max)throw Error(`Expected ${t} to be at most ${r.max}.`);return n}}function tp(e,t){let r=e[t];if(void 0!==r){if("boolean"!=typeof r)throw Error(`Expected ${t} to be a boolean.`);return r}}function tf(e,t,r){let n=e[t];if("string"!=typeof n||!r.includes(n))throw Error(`Expected ${t} to be one of: ${r.join(", ")}.`);return n}function tm(e,t,r){let n=e[t];if(void 0!==n){if("string"!=typeof n||!r.includes(n))throw Error(`Expected ${t} to be one of: ${r.join(", ")}.`);return n}}function th(e){return{session:e.session,platform:e.platform,target:e.deviceTarget,device:e.device,udid:e.udid,serial:e.serial,iosSimulatorDeviceSet:e.iosSimulatorDeviceSet,androidDeviceAllowlist:e.androidDeviceAllowlist,daemonBaseUrl:e.daemonBaseUrl,daemonAuthToken:e.daemonAuthToken,tenant:e.tenant,runId:e.runId,leaseId:e.leaseId,cwd:e.cwd,debug:e.debug}}function tg(e){switch(e.kind){case"ref":return{ref:e.ref,label:e.label};case"selector":return{selector:e.selector};case"point":return{x:e.x,y:e.y}}}function tv(e){switch(e.kind){case"ref":return{ref:e.ref,label:e.label};case"selector":return{selector:e.selector}}}function ty(e){return{count:e.count,intervalMs:e.intervalMs,holdMs:e.holdMs,jitterPx:e.jitterPx,doubleTap:e.doubleTap}}function tb(e){return{depth:e.depth,scope:e.scope,raw:e.raw}}function tw(e,t,r){let n=new Set(t),i=Object.keys(e).filter(e=>!n.has(e));if(i.length>0)throw Error(`${r} has unknown field(s): ${i.join(", ")}.`)}function tS(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>void 0!==e))}function tI(e,t){return{schema:e,required:!1,read:t}}function tA(e,t){let r=e[t];if(void 0!==r){if(!r||"object"!=typeof r||Array.isArray(r))throw Error(`Expected ${t} to be an object.`);return r}}function tx(e,t){let r=e[t];if(void 0!==r){if(!Array.isArray(r)||r.some(e=>"string"!=typeof e))throw Error(`Expected ${t} to be an array of strings.`);return r}}function tN(){return[{type:"object",properties:{kind:{type:"string",const:"ref"},ref:{type:"string",description:"Snapshot element ref such as @e12."},label:{type:"string",description:"Optional human label for the ref."}},required:["kind","ref"],additionalProperties:!1},{type:"object",properties:{kind:{type:"string",const:"selector"},selector:{type:"string",description:"Agent-device selector expression."}},required:["kind","selector"],additionalProperties:!1}]}function tk(e,t){let r=e[t];if(!r||"object"!=typeof r||Array.isArray(r))throw Error(`Expected ${t} to be an object.`);return r}function tD(e,t){return r=>tR(e,t?t(r):[],r)}function tR(e,t,r){return{command:e,positionals:t,options:function(e){var t;let r="mobile"===(t=e.deviceTarget??e.target)||"tv"===t||"desktop"===t?t:void 0;if(void 0===r&&void 0===e.target)return e;let{target:n,...i}=e;return void 0===r?i:{...i,target:r}}(r)}}function tM(e){return tS({session:e.session,platform:e.platform,deviceTarget:e.target,device:e.device,udid:e.udid,serial:e.serial,iosSimulatorDeviceSet:e.iosSimulatorDeviceSet,androidDeviceAllowlist:e.androidDeviceAllowlist})}function t_(e){return{platform:e.platform,target:e.target,device:e.device,udid:e.udid,serial:e.serial,iosSimulatorDeviceSet:e.iosSimulatorDeviceSet,androidDeviceAllowlist:e.androidDeviceAllowlist}}function tE(e){return tS({depth:e.snapshotDepth,scope:e.snapshotScope,raw:e.snapshotRaw})}function tL(e){return{depth:e.snapshotDepth,scope:e.snapshotScope,raw:e.snapshotRaw}}function tj(e){return tS({count:e.count,intervalMs:e.intervalMs,holdMs:e.holdMs,jitterPx:e.jitterPx,doubleTap:e.doubleTap})}function tP(e){return"ref"in e&&void 0!==e.ref?tS({kind:"ref",ref:e.ref,label:e.label}):"selector"in e&&void 0!==e.selector?{kind:"selector",selector:e.selector}:{kind:"point",x:e.x,y:e.y}}function t$(e){let t=tF(e);if("string"==typeof t.ref)return[t.ref,...tO(t.label)];if("string"==typeof t.selector)return[t.selector];if("point"===t.kind||void 0!==t.x||void 0!==t.y)return[String(tz(t.x,"x")),String(tz(t.y,"y"))];throw new a("INVALID_ARGS","interaction requires @ref, selector, or point target")}function tF(e){if(!e||"object"!=typeof e||Array.isArray(e))throw new a("INVALID_ARGS","Expected target object.");let t=e.target;return t&&"object"==typeof t&&!Array.isArray(t)?t:e}function tz(e,t){if("number"!=typeof e||!Number.isFinite(e))throw new a("INVALID_ARGS",`point target requires numeric ${t}.`);return e}function tO(e){return"string"==typeof e&&e.length>0?[e]:[]}function tq(e){return e.join(" ").trim()||void 0}function tG(...e){return new Set(e)}function tT(e,t){return void 0!==e&&t.has(e)}function tV(e){return void 0!==e&&""!==e.trim()&&Number.isFinite(Number(e))}function tC(e){return void 0===e?void 0:Number(e)}function tU(e){return void 0===e?[]:[e]}function tB(e){return void 0===e?[]:[String(e)]}function tH(e,t){if(void 0===e||""===e)throw new a("INVALID_ARGS",t);return e}function tJ(e,t){if("string"!=typeof e||0===e.length)throw new a("INVALID_ARGS",t);return e}let tK={devices:(e,t)=>tM(t),apps:(e,t)=>({...tM(t),appsFilter:u(t.appsFilter)}),session:(e,t)=>({...tM(t),action:function(e){let t=e??"list";if("list"===t)return t;throw new a("INVALID_ARGS","session only supports list")}(e[0])}),boot:(e,t)=>({...tM(t),headless:t.headless}),open:(e,t)=>({...tM(t),app:e[0],url:e[1],surface:t.surface,activity:t.activity,launchConsole:t.launchConsole,relaunch:t.relaunch,saveScript:t.saveScript,noRecord:t.noRecord}),close:(e,t)=>({...tM(t),app:e[0],shutdown:t.shutdown,saveScript:t.saveScript}),install:tY,reinstall:tY,"install-from-source":(e,t)=>({...tM(t),source:function(e,t){let r=e[0]?.trim();if(e.length>1)throw new a("INVALID_ARGS","install-from-source accepts either one <url> positional or --github-actions-artifact");let n=t.githubActionsArtifact?function(e,t="--github-actions-artifact"){let r=e.indexOf(":");if(r<=0||r===e.length-1)throw new a("INVALID_ARGS",`${t} must use owner/repo:artifact, for example thymikee/RNCLI83:6635342232`);let{owner:n,repo:i}=eV(e.slice(0,r),t);return eT(n,i,e.slice(r+1),`${t} artifact`)}(t.githubActionsArtifact):void 0,i=t.installSource;if(1!=+!!r+ +!!n+ +!!i)throw new a("INVALID_ARGS","install-from-source requires exactly one source: <url>, --github-actions-artifact, or config installSource");if(!r&&t.header&&t.header.length>0)throw new a("INVALID_ARGS","install-from-source --header is only supported for URL sources");return n||i||{kind:"url",url:r,headers:function(e){if(!e||0===e.length)return;let t={};for(let r of e){let e=r.indexOf(":");if(e<=0)throw new a("INVALID_ARGS",`Invalid --header value "${r}". Expected "name:value".`);let n=r.slice(0,e).trim(),i=r.slice(e+1).trim();if(!n)throw new a("INVALID_ARGS",`Invalid --header value "${r}". Header name cannot be empty.`);t[n]=i}return t}(t.header)}}(e,t),retainPaths:t.retainPaths,retentionMs:t.retentionMs}),push:(e,t)=>({...tM(t),app:tH(e[0],"push requires bundleOrPackage"),payload:tH(e[1],"push requires payloadOrJson")}),"trigger-app-event":(e,t)=>({...tM(t),event:tH(e[0],"trigger-app-event requires event"),payload:e[1]?function(e,t){try{let t=JSON.parse(e);if(t&&"object"==typeof t&&!Array.isArray(t))return t}catch{}throw new a("INVALID_ARGS",`${t} must be a JSON object`)}(e[1],"trigger-app-event payload"):void 0})},tW={devices:tD(N.devices),boot:tD(N.boot),apps:tD(N.apps),open:tD(N.open,function(e){return e.app?e.url?[e.app,e.url]:[e.app]:[]}),close:tD(N.close,e=>tU(e.app)),install:tD(N.install,e=>tZ(e.app,e.appPath)),reinstall:tD(N.reinstall,e=>tZ(e.app,e.appPath)),"install-from-source":e=>tR(k.installSource,[],{...e,installSource:e.source,retainMaterializedPaths:e.retainPaths,materializedPathRetentionMs:e.retentionMs}),push:tD(N.push,e=>{var t;return[(t=e).app,"string"==typeof t.payload?t.payload:JSON.stringify(t.payload)]}),"trigger-app-event":tD(N.triggerAppEvent,e=>{var t;return[(t=e).event,...t.payload?[JSON.stringify(t.payload)]:[]]})};function tY(e,t,r="install"){return{...tM(t),app:tH(e[0],`${r} requires app`),appPath:tH(e[1],`${r} requires path`)}}function tZ(e,t){return[tJ(e,"missing first positional"),tJ(t,"missing second positional")]}function tQ(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}function tX(e,t){if(void 0===e||""===e.trim())throw new a("INVALID_ARGS",`settings location set requires ${t}`);return t1(Number(e),t)}function t0(e){return{latitude:t1(e?.latitude,"latitude"),longitude:t1(e?.longitude,"longitude")}}function t1(e,t){let r="latitude"===t?-90:-180,n="latitude"===t?90:180;if("number"!=typeof e||!Number.isFinite(e)||e<r||e>n)throw new a("INVALID_ARGS",`${t} must be a number from ${r} to ${n}`);return e}let t2={snapshot:(e,t)=>({...tM(t),interactiveOnly:t.snapshotInteractiveOnly,compact:t.snapshotCompact,depth:t.snapshotDepth,scope:t.snapshotScope,raw:t.snapshotRaw,forceFull:t.snapshotForceFull}),screenshot:(e,t)=>({...tM(t),path:e[0]??t.out,...U(t)}),diff:(e,t)=>{if("snapshot"!==e[0])throw new a("INVALID_ARGS","Only diff snapshot is available through this parser.");return{...tM(t),kind:"snapshot",out:t.out,interactiveOnly:t.snapshotInteractiveOnly,compact:t.snapshotCompact,depth:t.snapshotDepth,scope:t.snapshotScope,raw:t.snapshotRaw}},wait:(e,t)=>(function(e,t){let r=t8(e);if(!r)throw new a("INVALID_ARGS","wait requires <ms>, text <text>, @ref, or <selector> [timeoutMs].");let n={...t_(t),...tL(t)};if("sleep"===r.kind)return{...n,durationMs:r.durationMs};if("text"===r.kind){if(!r.text)throw new a("INVALID_ARGS","wait requires text.");return{...n,text:r.text,...t4(r.timeoutMs)}}return"ref"===r.kind?{...n,ref:r.rawRef,...t4(r.timeoutMs)}:{...n,selector:r.selectorExpression,...t4(r.timeoutMs)}})(e,t),alert:(e,t)=>({...tM(t),...function(e){if(e.length>2)throw new a("INVALID_ARGS","alert accepts at most action and timeout arguments.");return tS({action:function(e){let t=e?.toLowerCase();if(void 0===t||"get"===t||"accept"===t||"dismiss"===t||"wait"===t)return t;throw new a("INVALID_ARGS","alert action must be get, accept, dismiss, or wait.")}(e[0]),timeoutMs:function(e,t){if(void 0===e)return;let r=Number(e);if(Number.isFinite(r))return r;throw new a("INVALID_ARGS",`${t} must be a finite number.`)}(e[1],"alert timeout")})}(e)}),settings:(e,t)=>(function(e,t){let r=t_(t),n=e[0],i=e[1];if(tT(n,t6)&&tT(i,t9))return{...r,setting:n,state:i};if("location"===n&&"set"===i)return{...r,setting:n,state:i,latitude:tX(e[2],"latitude"),longitude:tX(e[3],"longitude")};if("appearance"===n&&tT(i,t5)||tT(n,t7)&&tT(i,re)||"fingerprint"===n&&tT(i,rt))return{...r,setting:n,state:i};if("permission"===n&&tT(i,rr))return{...r,setting:n,state:i,permission:function(e){if(tT(e,rn))return e;throw new a("INVALID_ARGS","settings permission requires a permission target.")}(e[2]),mode:function(e){if(void 0===e||"full"===e||"limited"===e)return e;throw new a("INVALID_ARGS","settings permission mode must be full or limited.")}(e[3])};throw new a("INVALID_ARGS","Invalid settings arguments.")})(e,t)},t3={snapshot:tD(N.snapshot),screenshot:e=>tR(N.screenshot,tU(e.path),{...e,...B(e)}),diff:tD(N.diff,e=>[tJ(e.kind,"diff requires kind")]),wait:tD(N.wait,e=>(function(e){if(1!==[void 0!==e.durationMs?"durationMs":void 0,void 0!==e.text?"text":void 0,void 0!==e.ref?"ref":void 0,void 0!==e.selector?"selector":void 0].filter(Boolean).length)throw new a("INVALID_ARGS","wait command requires exactly one of durationMs, text, ref, or selector.");if(void 0!==e.durationMs)return[String(e.durationMs)];let t=tB(e.timeoutMs);if(void 0!==e.text)return["text",e.text,...t];if(void 0!==e.ref)return[e.ref,...t];let r=e.selector;if(!l(r))throw new a("INVALID_ARGS",`Invalid wait selector: ${r}`);return[r,...t]})(e)),alert:tD(N.alert,e=>{var t;return[(t=e).action??"get",...tB(t.timeoutMs)]}),settings:tD(N.settings,e=>{var t;return"location"===(t=e).setting&&"set"===t.state?[t.setting,t.state,String(t.latitude),String(t.longitude)]:"permission"===t.setting?[t.setting,t.state,t.permission,...tU(t.mode)]:[t.setting,t.state]})};function t8(e){let t=e[0];if(void 0===t)return null;let r=tQ(t);if(null!==r)return{kind:"sleep",durationMs:r};let n=tQ(e[e.length-1]);if("text"===t)return{kind:"text",text:(null!==n?e.slice(1,-1).join(" "):e.slice(1).join(" ")).trim(),timeoutMs:n};if(t.startsWith("@"))return{kind:"ref",rawRef:t,timeoutMs:n};let i=s(null!==n?e.slice(0,-1):e.slice());return i&&0===i.rest.length&&l(i.selectorExpression)?{kind:"selector",selectorExpression:i.selectorExpression,timeoutMs:n}:{kind:"text",text:(null!==n?e.slice(0,-1).join(" "):e.join(" ")).trim(),timeoutMs:n}}function t4(e){return null===e?{}:{timeoutMs:e}}let t6=tG("wifi","airplane","location","animations"),t9=tG("on","off"),t5=tG("light","dark","toggle"),t7=tG("faceid","touchid"),re=tG("match","nonmatch","enroll","unenroll"),rt=tG("match","nonmatch"),rr=tG("grant","deny","reset"),rn=tG("camera","microphone","photos","contacts","contacts-limited","notifications","calendar","location","location-always","media-library","motion","reminders","siri","accessibility","screen-recording","input-monitoring"),ri={gesture:function(e,t){let r=e[0],n=e.slice(1),i=tM(t);switch(r){case"pan":return{...i,kind:r,origin:{x:Number(n[0]),y:Number(n[1])},delta:{x:Number(n[2]),y:Number(n[3])},durationMs:tC(n[4])};case"fling":return{...i,kind:r,direction:n[0],origin:{x:Number(n[1]),y:Number(n[2])},distance:tC(n[3]),durationMs:tC(n[4])};case"pinch":return{...i,kind:r,scale:Number(n[0]),origin:void 0===n[1]||void 0===n[2]?void 0:{x:Number(n[1]),y:Number(n[2])}};case"rotate":return{...i,kind:r,degrees:Number(n[0]),origin:void 0===n[1]||void 0===n[2]?void 0:{x:Number(n[1]),y:Number(n[2])},velocity:tC(n[3])};case"transform":return{...i,kind:r,origin:{x:Number(n[0]),y:Number(n[1])},delta:{x:Number(n[2]),y:Number(n[3])},scale:Number(n[4]),degrees:Number(n[5]),durationMs:tC(n[6])};default:throw new a("INVALID_ARGS","gesture requires pan, fling, pinch, rotate, or transform")}}},ro={gesture:tD(N.gesture,function(e){switch(e.kind){case"pan":return["pan",String(e.origin?.x),String(e.origin?.y),String(e.delta?.x),String(e.delta?.y),...tB(e.durationMs)];case"fling":return["fling",tJ(e.direction,"gesture fling requires direction"),String(e.origin?.x),String(e.origin?.y),...tB(e.distance),...tB(e.durationMs)];case"pinch":return["pinch",String(e.scale),...tB(e.origin?.x),...tB(e.origin?.y)];case"rotate":return["rotate",String(e.degrees),...tB(e.origin?.x),...tB(e.origin?.y),...tB(e.velocity)];case"transform":return["transform",String(e.origin?.x),String(e.origin?.y),String(e.delta?.x),String(e.delta?.y),String(e.scale),String(e.degrees),...tB(e.durationMs)];default:throw new a("INVALID_ARGS","gesture requires pan, fling, pinch, rotate, or transform")}}),"gesture-pan":tD(N.gesture,function(e){return["pan",String(e.x),String(e.y),String(e.dx),String(e.dy),...tB(e.durationMs)]}),"gesture-fling":tD(N.gesture,e=>{var t;let r;return r=void 0!==(t=e).durationMs?t.distance??180:t.distance,["fling",t.direction,String(t.x),String(t.y),...tB(r),...tB(t.durationMs)]}),"gesture-pinch":tD(N.gesture,function(e){return["pinch",String(e.scale),...tB(e.x),...tB(e.y)]}),"gesture-rotate":tD(N.gesture,e=>(function(e){var t=e;if(void 0===t.x&&void 0!==t.y||void 0!==t.x&&void 0===t.y)throw new a("INVALID_ARGS","gesture rotate center requires both x and y");let r=void 0===e.x||void 0===e.y?[]:[String(e.x),String(e.y)];return["rotate",String(e.degrees),...r,...tB(e.velocity)]})(e)),"gesture-transform":tD(N.gesture,function(e){return["transform",String(e.x),String(e.y),String(e.dx),String(e.dy),String(e.scale),String(e.degrees),...tB(e.durationMs)]})},ra={click:(e,t)=>({...tM(t),...tE(t),...tj(t),target:tP(rl(e)),button:t.clickButton}),press:(e,t)=>({...tM(t),...tE(t),...tj(t),target:tP(rl(e))}),longpress:(e,t)=>{let r,n={...rl((r=function(e){if(tV(e[0])&&tV(e[1]))return{target:e.slice(0,2),...void 0!==e[2]?{durationMs:Number(e[2])}:{}};let t=e.at(-1);return e.length>1&&tV(t)?{target:e.slice(0,-1),durationMs:Number(t)}:{target:e}}(e)).target),...void 0!==r.durationMs?{durationMs:r.durationMs}:{}};return{...tM(t),...tE(t),target:tP(n),durationMs:n.durationMs}},swipe:(e,t)=>({...tM(t),from:{x:Number(e[0]),y:Number(e[1])},to:{x:Number(e[2]),y:Number(e[3])},durationMs:tC(e[4]),count:t.count,pauseMs:t.pauseMs,pattern:t.pattern}),focus:(e,t)=>({...tM(t),x:Number(e[0]),y:Number(e[1])}),type:(e,t)=>({...tM(t),text:e.join(" "),delayMs:t.delayMs}),fill:(e,t)=>{let r=ru(e);return{...tM(t),...tE(t),target:tP(r.target),text:r.text,delayMs:t.delayMs}},scroll:(e,t)=>({...tM(t),direction:function(e){if("up"===e||"down"===e||"left"===e||"right"===e||"top"===e||"bottom"===e)return e;throw new a("INVALID_ARGS",`Unknown direction: ${String(e)}`)}(e[0]),amount:tC(e[1]),pixels:t.pixels}),get:(e,t)=>({...tM(t),...tE(t),format:function(e){if("text"===e||"attrs"===e)return e;throw new a("INVALID_ARGS","get only supports text or attrs")}(e[0]),target:tP(function(e){if(e[0]?.startsWith("@"))return{ref:e[0],label:tq(e.slice(1))};let t=e.join(" ").trim();if(!t)throw new a("INVALID_ARGS","get requires @ref or selector expression");return{selector:t}}(e.slice(1)))})},rs={click:e=>tR(N.click,t$(e),{...e,clickButton:e.button}),press:tD(N.press,e=>t$(e)),longpress:tD(N.longPress,e=>{var t;return[...t$(t=e),...tB(t.durationMs)]}),swipe:tD(N.swipe,function(e){return[String(e.from?.x),String(e.from?.y),String(e.to?.x),String(e.to?.y),...tB(e.durationMs)]}),focus:tD(N.focus,e=>[String(e.x),String(e.y)]),type:tD(N.type,e=>[e.text]),fill:tD(N.fill,e=>{var t;return[...t$(t=e),t.text]}),scroll:tD(N.scroll,e=>[tJ(e.direction,"scroll requires direction"),...tB(e.amount)]),get:tD(N.get,e=>[tJ(e.format,"get requires format"),...function(e){let t=tF(e);if("string"==typeof t.ref)return[t.ref,...tO(t.label)];if("string"==typeof t.selector)return[t.selector];throw new a("INVALID_ARGS","element command requires @ref or selector target")}(e)])};function rl(e){if(e[0]?.startsWith("@")){let t=tq(e.slice(1));return{ref:e[0],...void 0===t?{}:{label:t}}}let t=s(e);return t?{selector:t.selectorExpression}:{x:Number(e[0]),y:Number(e[1])}}function ru(e){let t=e[0];if(t?.startsWith("@")){let r=e.length>=3?e.slice(2).join(" "):e.slice(1).join(" ");return{kind:"ref",target:{ref:t,label:e.length>=3?tq(e.slice(1,2)):void 0},text:r}}let r=s(e,{preferTrailingValue:!0});return r?{kind:"selector",target:{selector:r.selectorExpression},text:r.rest.join(" ")}:{kind:"point",target:{x:Number(e[0]),y:Number(e[1])},text:e.slice(2).join(" ")}}let rc={perf:(e,t)=>tM(t),logs:(e,t)=>({...tM(t),action:function(e){if(void 0!==e){if("path"===e||"start"===e||"stop"===e||"doctor"===e||"mark"===e||"clear"===e)return e;throw new a("INVALID_ARGS","logs requires path, start, stop, doctor, mark, or clear")}}(e[0]),message:e.slice(1).join(" ")||void 0,restart:t.restart}),network:(e,t)=>({...tM(t),action:function(e){if(void 0!==e){if("dump"===e||"log"===e)return e;throw new a("INVALID_ARGS","network requires dump or log")}}(e[0]),limit:tC(e[1]),include:t.networkInclude??function(e){if(void 0!==e){if("summary"===e||"headers"===e||"body"===e||"all"===e)return e;throw new a("INVALID_ARGS","network include mode must be summary, headers, body, or all")}}(e[2])}),record:(e,t)=>({...tM(t),action:rf(e[0],"record"),path:e[1],fps:t.fps,quality:t.quality,hideTouches:t.hideTouches}),trace:(e,t)=>({...tM(t),action:rf(e[0],"trace"),path:e[1]})},rd={perf:tD(N.perf),logs:tD(N.logs,e=>{var t;return[(t=e).action??"path",...tU(t.message)]}),network:e=>{var t;return tR(N.network,[...(t=e).action?[t.action]:[],...tB(t.limit)],{...e,networkInclude:e.include})},record:tD(N.record,e=>rp(e)),trace:tD(N.trace,e=>rp(e))};function rp(e){return[e.action,...tU(e.path)]}function rf(e,t){if("start"===e||"stop"===e)return e;throw new a("INVALID_ARGS",`${t} requires start|stop`)}let rm={replay:(e,t)=>({...tM(t),path:tH(e[0],"replay requires path"),update:t.replayUpdate,backend:t.replayMaestro?"maestro":void 0,env:t.replayEnv}),test:(e,t)=>({...tM(t),paths:e,update:t.replayUpdate,backend:t.replayMaestro?"maestro":void 0,env:t.replayEnv,failFast:t.failFast,timeoutMs:t.timeoutMs,retries:t.retries,artifactsDir:t.artifactsDir,reportJunit:t.reportJunit})};function rh(e){return e.backend??(!0===e.maestro?"maestro":void 0)}function rg(e){let t={};for(let[r,n]of Object.entries(e))"string"==typeof n&&r.startsWith("AD_VAR_")&&(t[r]=n);return t}let rv={find:(e,t)=>(function(e,t){var r;let n={...{depth:(r=t).snapshotDepth,raw:r.snapshotRaw},...t_(t),first:t.findFirst,last:t.findLast},i=function(e){if("text"===e||"label"===e||"value"===e||"role"===e||"id"===e)return e}(e[0]),o=void 0!==i,s=o?e[1]:e[0],l=o?2:1,u=e[l];if(void 0===u)return{...n,locator:i,query:rb(s)};if("get"===u){let t=e[l+1];if("text"===t)return{...n,locator:i,query:rb(s),action:"getText"};if("attrs"===t)return{...n,locator:i,query:rb(s),action:"getAttrs"};throw new a("INVALID_ARGS","find get only supports text or attrs")}if("wait"===u)return{...n,locator:i,query:rb(s),action:"wait",timeoutMs:tC(e[l+1])};if("fill"===u||"type"===u)return{...n,locator:i,query:rb(s),action:u,value:e.slice(l+1).join(" ")};if("click"===u||"focus"===u||"exists"===u)return{...n,locator:i,query:rb(s),action:u};throw new a("INVALID_ARGS",`Unsupported find action: ${u}`)})(e,t),is:(e,t)=>(function(e,t){let r={...tL(t),...t_(t)},n=e[0],i=function(e,t={}){let r=s(e,t);if(!r)throw new a("INVALID_ARGS","is requires a selector expression");return r}(e.slice(1),{preferTrailingValue:"text"===n});if("text"===n)return{...r,predicate:n,selector:i.selectorExpression,value:i.rest.join(" ")};if("visible"===n||"hidden"===n||"exists"===n||"editable"===n||"selected"===n)return{...r,predicate:n,selector:i.selectorExpression};throw new a("INVALID_ARGS","is requires predicate: visible|hidden|exists|editable|selected|text")})(e,t)},ry={is:tD(N.is,e=>{var t;return[(t=e).predicate,t.selector,..."text"===t.predicate?[t.value]:[]]}),find:e=>tR(N.find,function(e){let t=e.locator&&"any"!==e.locator?[e.locator,e.query]:[e.query];switch(e.action){case void 0:case"click":case"focus":case"exists":return e.action?[...t,e.action]:t;case"getText":return[...t,"get","text"];case"getAttrs":return[...t,"get","attrs"];case"wait":return[...t,"wait",...tB(e.timeoutMs)];case"fill":case"type":return[...t,e.action,e.value]}}(e),{...e,findFirst:e.first,findLast:e.last})};function rb(e){if(void 0===e||""===e)throw new a("INVALID_ARGS","find requires query");return e}function rw(e){if(void 0===e)throw new a("INVALID_ARGS","rotate requires an orientation argument. Use portrait|portrait-upside-down|landscape-left|landscape-right.");switch(e?.trim().toLowerCase()){case"portrait":return"portrait";case"portrait-upside-down":case"upside-down":return"portrait-upside-down";case"landscape-left":case"left":return"landscape-left";case"landscape-right":case"right":return"landscape-right";default:throw new a("INVALID_ARGS",`Invalid rotation: ${e}. Use portrait|portrait-upside-down|landscape-left|landscape-right.`)}}let rS={appstate:(e,t)=>tM(t),home:(e,t)=>tM(t),"app-switcher":(e,t)=>tM(t),back:(e,t)=>({...tM(t),mode:t.backMode}),rotate:(e,t)=>({...tM(t),orientation:rw(e[0])}),keyboard:(e,t)=>({...tM(t),...function(e){if(e.length>1)throw new a("INVALID_ARGS","keyboard accepts at most one action argument.");return tS({action:function(e){let t=e?.toLowerCase();if("get"===t)return"status";if(void 0===t||"status"===t||"dismiss"===t||"enter"===t||"return"===t)return t;throw new a("INVALID_ARGS","keyboard action must be status, get, dismiss, enter, or return.")}(e[0])})}(e)}),clipboard:(e,t)=>({...tM(t),...function(e){let t=e[0]?.toLowerCase();if("read"!==t&&"write"!==t)throw new a("INVALID_ARGS","clipboard requires a subcommand: read or write.");if("read"===t){if(1!==e.length)throw new a("INVALID_ARGS","clipboard read does not accept additional arguments.");return{action:t}}if(e.length<2)throw new a("INVALID_ARGS","clipboard write requires text.");return{action:t,text:e.slice(1).join(" ")}}(e)}),"react-native":(e,t)=>({...tM(t),action:function(e){if("dismiss-overlay"===e)return e;throw new a("INVALID_ARGS","react-native supports only: dismiss-overlay")}(e[0])})},rI={appstate:tD(N.appState),back:e=>{var t;return tR(N.back,[],{...e,backMode:"in-app"===(t=e.mode)||"system"===t?t:void 0})},home:tD(N.home),rotate:tD(N.rotate,e=>[tJ(e.orientation,"rotate requires orientation")]),"app-switcher":tD(N.appSwitcher),keyboard:tD(N.keyboard,e=>tU(e.action)),clipboard:tD(N.clipboard,e=>{var t;return"read"===(t=e).action?["read"]:["write",t.text]}),"react-native":tD(N.reactNative,e=>[tJ(e.action,"react-native requires action")])},rA={...tW,...t3,...rs,...ro,...ry,...rd,replay:e=>tR(N.replay,[tJ(e.path,"replay requires path")],{...e,replayUpdate:e.update,replayBackend:rh(e),replayEnv:e.env,replayShellEnv:rg(process.env)}),test:e=>tR(N.test,e.paths??[],{...e,replayUpdate:e.update,replayBackend:rh(e),replayEnv:e.env,replayShellEnv:rg(process.env)}),...rI,batch:e=>tR(N.batch,[],{...e,batchSteps:function(e){if(!Array.isArray(e)||0===e.length)throw new a("INVALID_ARGS","batch requires a non-empty steps array.");return e.map((e,t)=>{var r;let n,i,o,s,l,u;return o=function(e,t){let r="string"==typeof e.command?e.command.trim().toLowerCase():"";if(rk.has(r))return r;throw new a("INVALID_ARGS",`Batch step ${t} command is not available through command batch: ${String(e.command)}`)}(i=function(e,t){if(!e||"object"!=typeof e||Array.isArray(e))throw new a("INVALID_ARGS",`Invalid batch step ${t}.`);return e}(e,r=t+1),r),s=function(e,t){let r=e.input;if(!r||"object"!=typeof r||Array.isArray(r))throw new a("INVALID_ARGS",`Batch step ${t} input must be an object.`);return r}(i,r),l=function(e,t){let r=e.runtime;if(void 0!==r&&(!r||"object"!=typeof r||Array.isArray(r)))throw new a("INVALID_ARGS",`Batch step ${t} runtime must be an object.`);return r}(i,r),{...u={command:(n=rD(o,s)).command,positionals:n.positionals,flags:ez(n.options),runtime:n.options.runtime},runtime:l??u.runtime}})}(e.steps),batchOnError:e.onError,batchMaxSteps:e.maxSteps})},rx=new Set(["replay","batch","gesture-pan","gesture-fling","gesture-pinch","gesture-rotate","gesture-transform"]),rN=Object.keys(rA).filter(e=>!rx.has(e)),rk=new Set(rN);function rD(e,t){return rA[e](t)}export{_ as DAEMON_COMMAND_GROUPS,R as GESTURE_SUBCOMMAND_ERROR,k as INTERNAL_COMMANDS,N as PUBLIC_COMMANDS,V as SCREENSHOT_ACTION_FLAG_KEYS,T as SCREENSHOT_COMMAND_FLAG_KEYS,C as SCREENSHOT_SPECIFIC_FLAG_DEFINITIONS,tK as appCliReaders,H as appendScreenshotScriptFlags,tw as assertAllowedKeys,rN as batchCommandNames,e1 as booleanField,eW as booleanSchema,ez as buildFlags,eO as buildMeta,t2 as captureCliReaders,ta as command_input_readPoint,tM as commonInputFromFlags,th as commonToClientOptions,I as computeDaemonCodeSignature,c as consumeTextLines,e6 as customField,e5 as elementTargetField,e2 as enumField,tr as fieldsInputSchema,p as findProjectRoot,G as formatRequestProgressEvent,ri as gestureCliReaders,e0 as integerField,eK as integerSchema,ra as interactionCliReaders,e9 as interactionTargetField,$ as isDaemonProgressEnvelope,F as isDaemonResponseEnvelope,e4 as jsonSchemaField,L as listCliCommandNames,j as listMcpExposedCommandNames,e3 as looseObjectField,eY as looseObjectSchema,eN as normalizeDeployResult,eR as normalizeDevice,ek as normalizeInstallFromSourceResult,eD as normalizeMaterializationReleaseResult,ej as normalizeOpenDevice,eL as normalizeRuntimeHints,eM as normalizeSession,eP as normalizeStartupSample,v as normalizeTenantId,eX as numberField,rc as observabilityCliReaders,tm as optionalEnum,td as optionalInteger,rw as parseDeviceRotation,eG as parseInstallSourceConfig,tQ as parseTimeout,t8 as parseWaitPositionals,e7 as pointField,rD as prepareDaemonCommandRequest,Z as readCommandMessage,to as readCommonInput,tn as readFieldInput,ru as readFillTargetFromPositionals,ti as readInputRecord,rl as readInteractionTargetFromPositionals,tX as readLocationCoordinate,ep as readOptionalString,ed as readRequiredString,eF as readScreenshotOverlayRefs,J as readScreenshotScriptFlag,e$ as readSnapshotNodes,d as readVersion,tt as repeatedFields,rm as replayCliReaders,t0 as requireLocationCoordinates,tf as requiredEnum,eZ as requiredField,tu as requiredNumber,S as resolveDaemonCodeSignature,f as resolveDaemonPaths,m as resolveDaemonServerMode,h as resolveDaemonTransportPreference,en as resolveDeployResultTarget,eo as resolveInstallFromSourceResultTarget,g as resolveSessionIsolationMode,eq as resolveSessionName,B as screenshotFlagsFromOptions,U as screenshotOptionsFromFlags,rv as selectorCliReaders,te as selectorSnapshotFields,el as serializeCloseResult,z as serializeDaemonProgressEnvelope,O as serializeDaemonResponseEnvelope,q as serializeDaemonRpcResponseEnvelope,ei as serializeDeployResult,er as serializeDevice,ea as serializeInstallFromSourceResult,es as serializeOpenResult,et as serializeSessionListEntry,eu as serializeSnapshotResult,P as shouldStreamRequestProgress,ex as splitNonEmptyTrimmedLines,e8 as stringArrayField,eQ as stringField,eJ as stringSchema,W as successText,rS as systemCliReaders,tv as toClientElementTarget,tg as toClientInteractionTarget,ty as toRepeatedOptions,tb as toSelectorSnapshotOptions,Y as withSuccessText};
4
+ `}function G(e){var t;if("replay-test"!==e.type)return;let r=[e.status,`${e.index}/${e.total}`,e.file];void 0!==e.attempt&&void 0!==e.maxAttempts&&r.push(`attempt=${e.attempt}/${e.maxAttempts}`),e.retrying&&r.push("retry=true"),void 0!==e.durationMs&&r.push(`duration=${(t=e.durationMs,`${(Math.max(0,t)/1e3).toFixed(2)}s`)}`),e.artifactsDir&&"fail"===e.status&&r.push(`artifacts=${e.artifactsDir}`);let n=e.message?.replace(/\s+/g," ").trim();return n&&r.push(n),r.join(" ")}let T=["out","overlayRefs","screenshotFullscreen","screenshotMaxSize","screenshotNoStabilize"],V=["screenshotFullscreen","screenshotMaxSize","screenshotNoStabilize"],C=[{key:"screenshotFullscreen",names:["--fullscreen"],type:"boolean",usageLabel:"--fullscreen",usageDescription:"Screenshot: capture the full screen instead of the app window"},{key:"screenshotMaxSize",names:["--max-size"],type:"int",min:1,usageLabel:"--max-size <px>",usageDescription:"Screenshot: downscale so the longest edge is at most <px>"},{key:"screenshotNoStabilize",names:["--no-stabilize"],type:"boolean",usageLabel:"--no-stabilize",usageDescription:"Screenshot: skip Android demo-mode/status-bar stabilization and settle delay for low-latency capture loops"}];function U(e){return K({overlayRefs:e?.overlayRefs,fullscreen:e?.screenshotFullscreen,maxSize:e?.screenshotMaxSize,stabilize:!e?.screenshotNoStabilize&&void 0})}function B(e={}){return K({overlayRefs:e.overlayRefs,screenshotFullscreen:e.screenshotFullscreen??e.fullscreen,screenshotMaxSize:e.screenshotMaxSize??e.maxSize,screenshotNoStabilize:e.screenshotNoStabilize??(!1===e.stabilize||void 0)})}function H(e,t){t?.screenshotFullscreen&&e.push("--fullscreen"),"number"==typeof t?.screenshotMaxSize&&e.push("--max-size",String(t.screenshotMaxSize)),t?.screenshotNoStabilize&&e.push("--no-stabilize")}function J(e){let{args:t,flags:r,index:n}=e,i=t[n];if("--fullscreen"===i)return r.screenshotFullscreen=!0,{handled:!0,nextIndex:n};if("--no-stabilize"===i)return r.screenshotNoStabilize=!0,{handled:!0,nextIndex:n};if("--max-size"===i){let e=t[n+1],i=void 0===e?NaN:Number(e);if(!Number.isInteger(i)||i<1)throw new a("INVALID_ARGS","screenshot --max-size requires a positive integer");return r.screenshotMaxSize=i,{handled:!0,nextIndex:n+1}}return{handled:!1}}function K(e){return Object.fromEntries(Object.entries(e).filter(e=>void 0!==e[1]))}function W(e){return e?{message:e}:{}}function Y(e,t){return t?{...e,message:t}:e}function Z(e){return"string"==typeof e?.message&&e.message.length>0?e.message:null}function Q(e){let t=e.appId??e.bundleId??e.packageName;return{session:e.session,appId:t,appBundleId:e.bundleId,package:e.packageName}}function X(e,t,r){return{deviceId:t,deviceName:r,..."android"===e?{serial:t}:"ios"===e?{udid:t}:{}}}function ee(e,t={}){let r=t.includeAndroidSerial??!0;return{platform:e.platform,target:e.target,device:e.name,id:e.id,..."ios"===e.platform?{device_udid:e.ios?.udid??e.id,ios_simulator_device_set:e.ios?.simulatorSetPath??null}:{},..."android"===e.platform&&r?{serial:e.android?.serial??e.id}:{}}}function et(e){return{name:e.name,...ee(e.device,{includeAndroidSerial:!1}),createdAt:e.createdAt}}function er(e){return{platform:e.platform,id:e.id,name:e.name,kind:e.kind,target:e.target,..."boolean"==typeof e.booted?{booted:e.booted}:{}}}function en(e){return e.bundleId??e.package??e.app}function ei(e){return Y({app:e.app,appPath:e.appPath,platform:e.platform,...e.appId?{appId:e.appId}:{},...e.bundleId?{bundleId:e.bundleId}:{},...e.package?{package:e.package}:{}},`Installed: ${en(e)}`)}function eo(e){return e.appName??e.bundleId??e.packageName??e.launchTarget}function ea(e){return Y({launchTarget:e.launchTarget,...e.appName?{appName:e.appName}:{},...e.appId?{appId:e.appId}:{},...e.bundleId?{bundleId:e.bundleId}:{},...e.packageName?{package:e.packageName}:{},...e.installablePath?{installablePath:e.installablePath}:{},...e.archivePath?{archivePath:e.archivePath}:{},...e.materializationId?{materializationId:e.materializationId}:{},...e.materializationExpiresAt?{materializationExpiresAt:e.materializationExpiresAt}:{}},`Installed: ${eo(e)}`)}function es(e){let t=e.appName??e.appBundleId??e.session;return Y({session:e.session,...e.appName?{appName:e.appName}:{},...e.appBundleId?{appBundleId:e.appBundleId}:{},...e.startup?{startup:e.startup}:{},...e.runtime?{runtime:e.runtime}:{},...e.device?ee(e.device):{}},t?`Opened: ${t}`:"Opened")}function el(e){return{session:e.session,...e.shutdown?{shutdown:e.shutdown}:{},...W(e.session?`Closed: ${e.session}`:"Closed")}}function eu(e){return{nodes:e.nodes,truncated:e.truncated,...e.appName?{appName:e.appName}:{},...e.appBundleId?{appBundleId:e.appBundleId}:{},...e.visibility?{visibility:e.visibility}:{},...e.androidSnapshot?{androidSnapshot:e.androidSnapshot}:{},...e.warnings&&e.warnings.length>0?{warnings:e.warnings}:{},...e.unchanged?{unchanged:e.unchanged}:{}}}function ec(e,t,r,n){let i=r(e[t]);if(void 0===i)throw new a("COMMAND_FAILED",n,{response:e});return i}function ed(e,t){return ec(e,t,ey,`Daemon response is missing "${t}".`)}function ep(e,t){return ey(e[t])}function ef(e,t){var r;let n;return r=ey,null===(n=e[t])?null:r(n)}function em(e,t){return ec(e,t,ew,`Daemon response has invalid "${t}".`)}function eh(e,t){return function(e){return"tv"===e||"mobile"===e||"desktop"===e?e:void 0}(e[t])??"mobile"}function eg(e,t){let r=e[t];if(!eI(r))return;let n=ev(r,"x"),i=ev(r,"y"),o=ev(r,"width"),a=ev(r,"height");if(void 0!==n&&void 0!==i&&void 0!==o&&void 0!==a)return{x:n,y:i,width:o,height:a}}function ev(e,t){let r=e[t];return"number"==typeof r?r:void 0}function ey(e){return"string"==typeof e&&e.length>0?e:void 0}function eb(e){return"number"==typeof e&&Number.isFinite(e)?e:void 0}function ew(e){return"ios"===e||"macos"===e||"android"===e||"linux"===e?e:void 0}function eS(e){return"simulator"===e||"emulator"===e||"device"===e?e:void 0}function eI(e){return"object"==typeof e&&null!==e}function eA(e){let t={};for(let[r,n]of Object.entries(e))void 0!==n&&(t[r]=n);return t}function ex(e){return e.split("\n").map(e=>e.trim()).filter(e=>e.length>0)}function eN(e,t){let r=ep(e,"bundleId"),n=ep(e,"package");return{app:ed(e,"app"),appPath:ed(e,"appPath"),platform:em(e,"platform"),appId:r??n,bundleId:r,package:n,identifiers:Q({session:t,bundleId:r,packageName:n})}}function ek(e,t){let r=ep(e,"bundleId"),n=ep(e,"packageName"),i=r??n??ep(e,"appId"),o=ep(e,"launchTarget")??n??r??i;if(!o)throw new a("COMMAND_FAILED",'Daemon response is missing "launchTarget".',{response:e});return{appName:ep(e,"appName"),appId:i,bundleId:r,packageName:n,launchTarget:o,installablePath:ep(e,"installablePath"),archivePath:ep(e,"archivePath"),materializationId:ep(e,"materializationId"),materializationExpiresAt:ep(e,"materializationExpiresAt"),identifiers:Q({session:t,bundleId:r,packageName:n,appId:i})}}function eD(e){return{released:!0===e.released,materializationId:ed(e,"materializationId"),identifiers:{}}}function eR(e){let{record:t,platform:r,id:n,name:i,target:o}=e_(e,"name");return{platform:r,target:o,kind:ec(t,"kind",eS,'Daemon response has invalid "kind".'),id:n,name:i,booted:"boolean"==typeof t.booted?t.booted:void 0,identifiers:X(r,n,i),...eE(r,n)}}function eM(e){let{record:t,platform:r,id:n,name:i,target:o}=e_(e,"name"),a=ed(t,"device"),s={session:i,...X(r,n,a)};return{name:i,createdAt:ec(t,"createdAt",eb,'Daemon response is missing numeric "createdAt".'),device:{platform:r,target:o,id:n,name:a,identifiers:s,...eE(r,n,ef(t,"ios_simulator_device_set"))},identifiers:s}}function e_(e,t){let r=function(e){if(!eI(e))throw new a("COMMAND_FAILED","Daemon returned an unexpected response shape.",{value:e});return e}(e);return{record:r,platform:em(r,"platform"),id:ed(r,"id"),name:ed(r,t),target:eh(r,"target")}}function eE(e,t,r){return{ios:"ios"===e?{udid:t,...void 0!==r?{simulatorSetPath:r}:{}}:void 0,android:"android"===e?{serial:t}:void 0}}function eL(e){if(!eI(e))return;let t=e.platform,r=ep(e,"metroHost"),n="number"==typeof e.metroPort?e.metroPort:void 0;return{platform:"ios"===t||"android"===t?t:void 0,metroHost:r,metroPort:n,bundleUrl:ep(e,"bundleUrl"),launchUrl:ep(e,"launchUrl")}}function ej(e){let t=e.platform,r=ep(e,"id"),n=ep(e,"device");if("ios"!==t&&"macos"!==t&&"android"!==t&&"linux"!==t||!r||!n)return;let i=eh(e,"target"),o=X(t,r,n);return{platform:t,target:i,id:r,name:n,identifiers:o,ios:"ios"===t?{udid:ep(e,"device_udid")??r,simulatorSetPath:ef(e,"ios_simulator_device_set")}:void 0,android:"android"===t?{serial:ep(e,"serial")??r}:void 0}}function eP(e){if(eI(e)&&"number"==typeof e.durationMs&&"string"==typeof e.measuredAt&&"string"==typeof e.method)return{durationMs:e.durationMs,measuredAt:e.measuredAt,method:e.method,appTarget:ep(e,"appTarget"),appBundleId:ep(e,"appBundleId")}}function e$(e){return Array.isArray(e)?e:[]}function eF(e){let t=e.overlayRefs;if(!Array.isArray(t))return;let r=[];for(let e of t){if(!eI(e))continue;let t=ep(e,"ref"),n=eg(e,"rect"),i=eg(e,"overlayRect"),o=function(e,t){let r=e[t];if(!eI(r))return;let n=ev(r,"x"),i=ev(r,"y");if(void 0!==n&&void 0!==i)return{x:n,y:i}}(e,"center");t&&n&&i&&o&&r.push({ref:t,label:ep(e,"label"),rect:n,overlayRect:i,center:o})}return r}function ez(e){return eA({stateDir:e.stateDir,daemonBaseUrl:e.daemonBaseUrl,daemonAuthToken:e.daemonAuthToken,daemonTransport:e.daemonTransport,daemonServerMode:e.daemonServerMode,tenant:e.tenant,sessionIsolation:e.sessionIsolation,runId:e.runId,leaseId:e.leaseId,leaseBackend:e.leaseBackend,platform:e.platform,target:e.target,device:e.device,udid:e.udid,serial:e.serial,iosSimulatorDeviceSet:e.iosSimulatorDeviceSet,androidDeviceAllowlist:e.androidDeviceAllowlist,surface:e.surface,activity:e.activity,launchConsole:e.launchConsole,relaunch:e.relaunch,shutdown:e.shutdown,saveScript:e.saveScript,noRecord:e.noRecord,backMode:e.backMode,metroHost:e.metroHost,metroPort:e.metroPort,bundleUrl:e.bundleUrl,launchUrl:e.launchUrl,snapshotInteractiveOnly:e.interactiveOnly,snapshotCompact:e.compact,snapshotDepth:e.depth,snapshotScope:e.scope,snapshotRaw:e.raw,snapshotForceFull:e.forceFull,...B(e),appsFilter:e.appsFilter,out:e.out,count:e.count,fps:e.fps,quality:e.quality,hideTouches:e.hideTouches,intervalMs:e.intervalMs,delayMs:e.delayMs,holdMs:e.holdMs,jitterPx:e.jitterPx,pixels:e.pixels,doubleTap:e.doubleTap,clickButton:e.clickButton,pauseMs:e.pauseMs,pattern:e.pattern,headless:e.headless,restart:e.restart,replayUpdate:e.replayUpdate,replayBackend:e.replayBackend,replayEnv:e.replayEnv,replayShellEnv:e.replayShellEnv,failFast:e.failFast,timeoutMs:e.timeoutMs,retries:e.retries,artifactsDir:e.artifactsDir,reportJunit:e.reportJunit,findFirst:e.findFirst,findLast:e.findLast,networkInclude:e.networkInclude,batchOnError:e.batchOnError,batchMaxSteps:e.batchMaxSteps,batchSteps:e.batchSteps,verbose:e.debug})}function eO(e){return eA({requestId:e.requestId,cwd:e.cwd,debug:e.debug,lockPolicy:e.lockPolicy,lockPlatform:e.lockPlatform,tenantId:e.tenant,runId:e.runId,leaseId:e.leaseId,leaseBackend:e.leaseBackend,leaseTtlMs:e.leaseTtlMs,sessionIsolation:e.sessionIsolation,installSource:e.installSource,retainMaterializedPaths:e.retainMaterializedPaths,materializedPathRetentionMs:e.materializedPathRetentionMs,materializationId:e.materializationId})}function eq(e){return e??"default"}function eG(e,t){if(!e||"object"!=typeof e||Array.isArray(e))throw new a("INVALID_ARGS",`${t} installSource must be an object.`);if("github-actions-artifact"!==eC(e.type,`${t} installSource.type`))throw new a("INVALID_ARGS",`${t} installSource.type must be "github-actions-artifact".`);let{owner:r,repo:n}=eV(eC(e.repo,`${t} installSource.repo`),`${t} installSource.repo`);return eT(r,n,e.artifact,`${t} installSource.artifact`)}function eT(e,t,r,n){var i;return"number"==typeof r||"string"==typeof(i=r)&&/^\d+$/.test(i.trim())?{kind:"github-actions-artifact",owner:e,repo:t,artifactId:function(e,t){let r="number"==typeof e?e:"string"==typeof e?Number(e):NaN;if(!Number.isInteger(r))throw new a("INVALID_ARGS",`${t} must be an integer.`);return r}(r,n)}:{kind:"github-actions-artifact",owner:e,repo:t,artifactName:eC(r,n)}}function eV(e,t){let r=e.indexOf("/");if(r<=0||r===e.length-1||-1!==e.indexOf("/",r+1))throw new a("INVALID_ARGS",`${t} must use owner/repo.`);let n={owner:e.slice(0,r).trim(),repo:e.slice(r+1).trim()};if(!n.owner||!n.repo)throw new a("INVALID_ARGS",`${t} must use owner/repo.`);return n}function eC(e,t){let r="string"==typeof e&&e.trim().length>0?e.trim():void 0;if(!r)throw new a("INVALID_ARGS",`${t} must be a non-empty string.`);return r}let eU=["ios","android","macos","linux","apple"],eB=["mobile","tv","desktop"],eH=["ref","selector","point"];function eJ(e){return{type:"string",...e?{description:e}:{}}}function eK(e){return{type:"integer",...e?{description:e}:{}}}function eW(e){return{type:"boolean",...e?{description:e}:{}}}function eY(e){return{type:"object",additionalProperties:!0,...e?{description:e}:{}}}function eZ(e){return{...e,required:!0}}function eQ(e){return tI(eJ(e),tl)}function eX(e){return tI({type:"number",...e?{description:e}:{}},tc)}function e0(e,t={}){var r,n;return tI((r=e,n=t,{...eK(r),...void 0===n.min?{}:{minimum:n.min},...void 0===n.max?{}:{maximum:n.max}}),(e,r)=>td(e,r,t))}function e1(e){return tI(eW(e),tp)}function e2(e,t){return tI({type:"string",enum:e,...t?{description:t}:{}},(t,r)=>tm(t,r,e))}function e3(e){return tI(eY(e),tA)}function e8(e){return tI({type:"array",items:{type:"string"},...e?{description:e}:{}},tx)}function e4(e){return tI(e,(e,t)=>e[t])}function e9(e,t){return tI(e,t)}function e6(){return tI({oneOf:[...tN(),{type:"object",properties:{kind:{type:"string",const:"point"},x:{type:"number"},y:{type:"number"}},required:["kind","x","y"],additionalProperties:!1}],description:"UI target. This is separate from deviceTarget, which selects the device form."},(e,t)=>void 0===e[t]?void 0:function(e,t){let r=tk(e,t),n=tf(r,"kind",eH);switch(n){case"ref":return{kind:n,ref:ts(r,"ref"),label:tl(r,"label")};case"selector":return{kind:n,selector:ts(r,"selector")};case"point":return{kind:n,x:tu(r,"x"),y:tu(r,"y")}}}(e,t))}function e5(){return tI({oneOf:tN(),description:"UI element target by snapshot ref or selector expression."},(e,t)=>{let r,n;return void 0===e[t]?void 0:"ref"===(n=tf(r=tk(e,t),"kind",["ref","selector"]))?{kind:n,ref:ts(r,"ref"),label:tl(r,"label")}:{kind:n,selector:ts(r,"selector")}})}function e7(e){return tI({type:"object",description:e,properties:{x:{type:"number"},y:{type:"number"}},required:["x","y"],additionalProperties:!1},(e,t)=>void 0===e[t]?void 0:ta(e,t))}function te(){return{depth:e0("Snapshot traversal depth.",{min:0}),scope:eQ("Snapshot scope selector used before resolution."),raw:e1("Use raw snapshot data during selector resolution.")}}function tt(){return{count:e0("Number of press/click repetitions.",{min:1}),intervalMs:e0("Delay between repeated press/click actions.",{min:0}),holdMs:e0("Hold duration for each action.",{min:0}),jitterPx:e0("Randomization radius in pixels.",{min:0}),doubleTap:e1("Request a double-tap action.")}}function tr(e){return function(e,t=[]){return{type:"object",properties:{session:{type:"string",description:"Agent-device session name."},platform:{type:"string",enum:eU,description:"Platform selector used to resolve a device."},deviceTarget:{type:"string",enum:eB,description:"Device target form. Maps to the CLI --target flag."},target:{type:"string",enum:eB,description:"Alias for deviceTarget on commands without a UI target field. Interaction commands reserve target for the UI element."},device:{type:"string",description:"Device name selector."},udid:{type:"string",description:"iOS device UDID selector."},serial:{type:"string",description:"Android serial selector."},iosSimulatorDeviceSet:{type:"string",description:"iOS simulator device-set path used for device resolution."},androidDeviceAllowlist:{type:"string",description:"Android serial allowlist used for device resolution."},daemonBaseUrl:{type:"string",description:"Remote daemon base URL."},daemonAuthToken:{type:"string",description:"Remote daemon auth token."},tenant:{type:"string",description:"Remote tenant identifier."},runId:{type:"string",description:"Lease run identifier."},leaseId:{type:"string",description:"Existing lease identifier."},cwd:{type:"string",description:"Working directory for command execution."},debug:{type:"boolean",description:"Enable debug diagnostics."},...e},...t.length>0?{required:t}:{},additionalProperties:!1}}(Object.fromEntries(Object.entries(e).map(([e,t])=>[e,t.schema])),Object.entries(e).flatMap(([e,t])=>t.required?[e]:[]))}function tn(e,t){let r=ti(e),n=Object.fromEntries(Object.entries(t).flatMap(([e,t])=>{let n=t.read(r,e);if(t.required&&void 0===n)throw Error(`Expected ${e} to be set.`);return void 0===n?[]:[[e,n]]})),i=to(r,{readTargetAlias:!Object.hasOwn(t,"target")});return tS({...i,...th(i),...n})}function ti(e){if(null==e)return{};if(!e||"object"!=typeof e||Array.isArray(e))throw Error("Expected object arguments.");return e}function to(e,t={}){return{session:tl(e,"session"),platform:tm(e,"platform",eU),deviceTarget:function(e,t){let r=tm(e,"deviceTarget",eB);if(!1===t.readTargetAlias||void 0===e.target)return r;let n=tm(e,"target",eB);if(void 0!==r&&n!==r)throw Error("Expected target alias to match deviceTarget when both are set.");return r??n}(e,t),device:tl(e,"device"),udid:tl(e,"udid"),serial:tl(e,"serial"),iosSimulatorDeviceSet:tl(e,"iosSimulatorDeviceSet"),androidDeviceAllowlist:tl(e,"androidDeviceAllowlist"),daemonBaseUrl:tl(e,"daemonBaseUrl"),daemonAuthToken:tl(e,"daemonAuthToken"),tenant:tl(e,"tenant"),runId:tl(e,"runId"),leaseId:tl(e,"leaseId"),cwd:tl(e,"cwd"),debug:tp(e,"debug")}}function ta(e,t){let r=tk(e,t);return{x:tu(r,"x"),y:tu(r,"y")}}function ts(e,t){let r=e[t];if("string"!=typeof r||0===r.length)throw Error(`Expected ${t} to be a non-empty string.`);return r}function tl(e,t){let r=e[t];if(void 0!==r){if("string"!=typeof r||0===r.length)throw Error(`Expected ${t} to be a non-empty string.`);return r}}function tu(e,t){let r=e[t];if("number"!=typeof r||!Number.isFinite(r))throw Error(`Expected ${t} to be a finite number.`);return r}function tc(e,t){let r=e[t];if(void 0!==r){if("number"!=typeof r||!Number.isFinite(r))throw Error(`Expected ${t} to be a finite number.`);return r}}function td(e,t,r={}){let n=e[t];if(void 0!==n){if(!Number.isInteger(n))throw Error(`Expected ${t} to be an integer.`);if(void 0!==r.min&&n<r.min)throw Error(`Expected ${t} to be at least ${r.min}.`);if(void 0!==r.max&&n>r.max)throw Error(`Expected ${t} to be at most ${r.max}.`);return n}}function tp(e,t){let r=e[t];if(void 0!==r){if("boolean"!=typeof r)throw Error(`Expected ${t} to be a boolean.`);return r}}function tf(e,t,r){let n=e[t];if("string"!=typeof n||!r.includes(n))throw Error(`Expected ${t} to be one of: ${r.join(", ")}.`);return n}function tm(e,t,r){let n=e[t];if(void 0!==n){if("string"!=typeof n||!r.includes(n))throw Error(`Expected ${t} to be one of: ${r.join(", ")}.`);return n}}function th(e){return{session:e.session,platform:e.platform,target:e.deviceTarget,device:e.device,udid:e.udid,serial:e.serial,iosSimulatorDeviceSet:e.iosSimulatorDeviceSet,androidDeviceAllowlist:e.androidDeviceAllowlist,daemonBaseUrl:e.daemonBaseUrl,daemonAuthToken:e.daemonAuthToken,tenant:e.tenant,runId:e.runId,leaseId:e.leaseId,cwd:e.cwd,debug:e.debug}}function tg(e){switch(e.kind){case"ref":return{ref:e.ref,label:e.label};case"selector":return{selector:e.selector};case"point":return{x:e.x,y:e.y}}}function tv(e){switch(e.kind){case"ref":return{ref:e.ref,label:e.label};case"selector":return{selector:e.selector}}}function ty(e){return{count:e.count,intervalMs:e.intervalMs,holdMs:e.holdMs,jitterPx:e.jitterPx,doubleTap:e.doubleTap}}function tb(e){return{depth:e.depth,scope:e.scope,raw:e.raw}}function tw(e,t,r){let n=new Set(t),i=Object.keys(e).filter(e=>!n.has(e));if(i.length>0)throw Error(`${r} has unknown field(s): ${i.join(", ")}.`)}function tS(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>void 0!==e))}function tI(e,t){return{schema:e,required:!1,read:t}}function tA(e,t){let r=e[t];if(void 0!==r){if(!r||"object"!=typeof r||Array.isArray(r))throw Error(`Expected ${t} to be an object.`);return r}}function tx(e,t){let r=e[t];if(void 0!==r){if(!Array.isArray(r)||r.some(e=>"string"!=typeof e))throw Error(`Expected ${t} to be an array of strings.`);return r}}function tN(){return[{type:"object",properties:{kind:{type:"string",const:"ref"},ref:{type:"string",description:"Snapshot element ref such as @e12."},label:{type:"string",description:"Optional human label for the ref."}},required:["kind","ref"],additionalProperties:!1},{type:"object",properties:{kind:{type:"string",const:"selector"},selector:{type:"string",description:"Agent-device selector expression."}},required:["kind","selector"],additionalProperties:!1}]}function tk(e,t){let r=e[t];if(!r||"object"!=typeof r||Array.isArray(r))throw Error(`Expected ${t} to be an object.`);return r}function tD(e,t){return r=>tR(e,t?t(r):[],r)}function tR(e,t,r){return{command:e,positionals:t,options:function(e){var t;let r="mobile"===(t=e.deviceTarget??e.target)||"tv"===t||"desktop"===t?t:void 0;if(void 0===r&&void 0===e.target)return e;let{target:n,...i}=e;return void 0===r?i:{...i,target:r}}(r)}}function tM(e){return tS({session:e.session,platform:e.platform,deviceTarget:e.target,device:e.device,udid:e.udid,serial:e.serial,iosSimulatorDeviceSet:e.iosSimulatorDeviceSet,androidDeviceAllowlist:e.androidDeviceAllowlist})}function t_(e){return{platform:e.platform,target:e.target,device:e.device,udid:e.udid,serial:e.serial,iosSimulatorDeviceSet:e.iosSimulatorDeviceSet,androidDeviceAllowlist:e.androidDeviceAllowlist}}function tE(e){return tS({depth:e.snapshotDepth,scope:e.snapshotScope,raw:e.snapshotRaw})}function tL(e){return{depth:e.snapshotDepth,scope:e.snapshotScope,raw:e.snapshotRaw}}function tj(e){return tS({count:e.count,intervalMs:e.intervalMs,holdMs:e.holdMs,jitterPx:e.jitterPx,doubleTap:e.doubleTap})}function tP(e){return"ref"in e&&void 0!==e.ref?tS({kind:"ref",ref:e.ref,label:e.label}):"selector"in e&&void 0!==e.selector?{kind:"selector",selector:e.selector}:{kind:"point",x:e.x,y:e.y}}function t$(e){let t=tF(e);if("string"==typeof t.ref)return[t.ref,...tO(t.label)];if("string"==typeof t.selector)return[t.selector];if("point"===t.kind||void 0!==t.x||void 0!==t.y)return[String(tz(t.x,"x")),String(tz(t.y,"y"))];throw new a("INVALID_ARGS","interaction requires @ref, selector, or point target")}function tF(e){if(!e||"object"!=typeof e||Array.isArray(e))throw new a("INVALID_ARGS","Expected target object.");let t=e.target;return t&&"object"==typeof t&&!Array.isArray(t)?t:e}function tz(e,t){if("number"!=typeof e||!Number.isFinite(e))throw new a("INVALID_ARGS",`point target requires numeric ${t}.`);return e}function tO(e){return"string"==typeof e&&e.length>0?[e]:[]}function tq(e){return e.join(" ").trim()||void 0}function tG(...e){return new Set(e)}function tT(e,t){return void 0!==e&&t.has(e)}function tV(e){return void 0!==e&&""!==e.trim()&&Number.isFinite(Number(e))}function tC(e){return void 0===e?void 0:Number(e)}function tU(e){return void 0===e?[]:[e]}function tB(e){return void 0===e?[]:[String(e)]}function tH(e,t){if(void 0===e||""===e)throw new a("INVALID_ARGS",t);return e}function tJ(e,t){if("string"!=typeof e||0===e.length)throw new a("INVALID_ARGS",t);return e}let tK={devices:(e,t)=>tM(t),apps:(e,t)=>({...tM(t),appsFilter:u(t.appsFilter)}),session:(e,t)=>({...tM(t),action:function(e){let t=e??"list";if("list"===t)return t;throw new a("INVALID_ARGS","session only supports list")}(e[0])}),boot:(e,t)=>({...tM(t),headless:t.headless}),open:(e,t)=>({...tM(t),app:e[0],url:e[1],surface:t.surface,activity:t.activity,launchConsole:t.launchConsole,relaunch:t.relaunch,saveScript:t.saveScript,noRecord:t.noRecord}),close:(e,t)=>({...tM(t),app:e[0],shutdown:t.shutdown,saveScript:t.saveScript}),install:tY,reinstall:tY,"install-from-source":(e,t)=>({...tM(t),source:function(e,t){let r=e[0]?.trim();if(e.length>1)throw new a("INVALID_ARGS","install-from-source accepts either one <url> positional or --github-actions-artifact");let n=t.githubActionsArtifact?function(e,t="--github-actions-artifact"){let r=e.indexOf(":");if(r<=0||r===e.length-1)throw new a("INVALID_ARGS",`${t} must use owner/repo:artifact, for example thymikee/RNCLI83:6635342232`);let{owner:n,repo:i}=eV(e.slice(0,r),t);return eT(n,i,e.slice(r+1),`${t} artifact`)}(t.githubActionsArtifact):void 0,i=t.installSource;if(1!=+!!r+ +!!n+ +!!i)throw new a("INVALID_ARGS","install-from-source requires exactly one source: <url>, --github-actions-artifact, or config installSource");if(!r&&t.header&&t.header.length>0)throw new a("INVALID_ARGS","install-from-source --header is only supported for URL sources");return n||i||{kind:"url",url:r,headers:function(e){if(!e||0===e.length)return;let t={};for(let r of e){let e=r.indexOf(":");if(e<=0)throw new a("INVALID_ARGS",`Invalid --header value "${r}". Expected "name:value".`);let n=r.slice(0,e).trim(),i=r.slice(e+1).trim();if(!n)throw new a("INVALID_ARGS",`Invalid --header value "${r}". Header name cannot be empty.`);t[n]=i}return t}(t.header)}}(e,t),retainPaths:t.retainPaths,retentionMs:t.retentionMs}),push:(e,t)=>({...tM(t),app:tH(e[0],"push requires bundleOrPackage"),payload:tH(e[1],"push requires payloadOrJson")}),"trigger-app-event":(e,t)=>({...tM(t),event:tH(e[0],"trigger-app-event requires event"),payload:e[1]?function(e,t){try{let t=JSON.parse(e);if(t&&"object"==typeof t&&!Array.isArray(t))return t}catch{}throw new a("INVALID_ARGS",`${t} must be a JSON object`)}(e[1],"trigger-app-event payload"):void 0})},tW={devices:tD(N.devices),boot:tD(N.boot),apps:tD(N.apps),open:tD(N.open,function(e){return e.app?e.url?[e.app,e.url]:[e.app]:[]}),close:tD(N.close,e=>tU(e.app)),install:tD(N.install,e=>tZ(e.app,e.appPath)),reinstall:tD(N.reinstall,e=>tZ(e.app,e.appPath)),"install-from-source":e=>tR(k.installSource,[],{...e,installSource:e.source,retainMaterializedPaths:e.retainPaths,materializedPathRetentionMs:e.retentionMs}),push:tD(N.push,e=>{var t;return[(t=e).app,"string"==typeof t.payload?t.payload:JSON.stringify(t.payload)]}),"trigger-app-event":tD(N.triggerAppEvent,e=>{var t;return[(t=e).event,...t.payload?[JSON.stringify(t.payload)]:[]]})};function tY(e,t,r="install"){return{...tM(t),app:tH(e[0],`${r} requires app`),appPath:tH(e[1],`${r} requires path`)}}function tZ(e,t){return[tJ(e,"missing first positional"),tJ(t,"missing second positional")]}function tQ(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}function tX(e,t){if(void 0===e||""===e.trim())throw new a("INVALID_ARGS",`settings location set requires ${t}`);return t1(Number(e),t)}function t0(e){return{latitude:t1(e?.latitude,"latitude"),longitude:t1(e?.longitude,"longitude")}}function t1(e,t){let r="latitude"===t?-90:-180,n="latitude"===t?90:180;if("number"!=typeof e||!Number.isFinite(e)||e<r||e>n)throw new a("INVALID_ARGS",`${t} must be a number from ${r} to ${n}`);return e}let t2={snapshot:(e,t)=>({...tM(t),interactiveOnly:t.snapshotInteractiveOnly,compact:t.snapshotCompact,depth:t.snapshotDepth,scope:t.snapshotScope,raw:t.snapshotRaw,forceFull:t.snapshotForceFull}),screenshot:(e,t)=>({...tM(t),path:e[0]??t.out,...U(t)}),diff:(e,t)=>{if("snapshot"!==e[0])throw new a("INVALID_ARGS","Only diff snapshot is available through this parser.");return{...tM(t),kind:"snapshot",out:t.out,interactiveOnly:t.snapshotInteractiveOnly,compact:t.snapshotCompact,depth:t.snapshotDepth,scope:t.snapshotScope,raw:t.snapshotRaw}},wait:(e,t)=>(function(e,t){let r=t8(e);if(!r)throw new a("INVALID_ARGS","wait requires <ms>, text <text>, @ref, or <selector> [timeoutMs].");let n={...t_(t),...tL(t)};if("sleep"===r.kind)return{...n,durationMs:r.durationMs};if("text"===r.kind){if(!r.text)throw new a("INVALID_ARGS","wait requires text.");return{...n,text:r.text,...t4(r.timeoutMs)}}return"ref"===r.kind?{...n,ref:r.rawRef,...t4(r.timeoutMs)}:{...n,selector:r.selectorExpression,...t4(r.timeoutMs)}})(e,t),alert:(e,t)=>({...tM(t),...function(e){if(e.length>2)throw new a("INVALID_ARGS","alert accepts at most action and timeout arguments.");return tS({action:function(e){let t=e?.toLowerCase();if(void 0===t||"get"===t||"accept"===t||"dismiss"===t||"wait"===t)return t;throw new a("INVALID_ARGS","alert action must be get, accept, dismiss, or wait.")}(e[0]),timeoutMs:function(e,t){if(void 0===e)return;let r=Number(e);if(Number.isFinite(r))return r;throw new a("INVALID_ARGS",`${t} must be a finite number.`)}(e[1],"alert timeout")})}(e)}),settings:(e,t)=>(function(e,t){let r=t_(t),n=e[0],i=e[1];if(tT(n,t9)&&tT(i,t6))return{...r,setting:n,state:i};if("location"===n&&"set"===i)return{...r,setting:n,state:i,latitude:tX(e[2],"latitude"),longitude:tX(e[3],"longitude")};if("appearance"===n&&tT(i,t5)||tT(n,t7)&&tT(i,re)||"fingerprint"===n&&tT(i,rt))return{...r,setting:n,state:i};if("permission"===n&&tT(i,rr))return{...r,setting:n,state:i,permission:function(e){if(tT(e,rn))return e;throw new a("INVALID_ARGS","settings permission requires a permission target.")}(e[2]),mode:function(e){if(void 0===e||"full"===e||"limited"===e)return e;throw new a("INVALID_ARGS","settings permission mode must be full or limited.")}(e[3])};throw new a("INVALID_ARGS","Invalid settings arguments.")})(e,t)},t3={snapshot:tD(N.snapshot),screenshot:e=>tR(N.screenshot,tU(e.path),{...e,...B(e)}),diff:tD(N.diff,e=>[tJ(e.kind,"diff requires kind")]),wait:tD(N.wait,e=>(function(e){if(1!==[void 0!==e.durationMs?"durationMs":void 0,void 0!==e.text?"text":void 0,void 0!==e.ref?"ref":void 0,void 0!==e.selector?"selector":void 0].filter(Boolean).length)throw new a("INVALID_ARGS","wait command requires exactly one of durationMs, text, ref, or selector.");if(void 0!==e.durationMs)return[String(e.durationMs)];let t=tB(e.timeoutMs);if(void 0!==e.text)return["text",e.text,...t];if(void 0!==e.ref)return[e.ref,...t];let r=e.selector;if(!l(r))throw new a("INVALID_ARGS",`Invalid wait selector: ${r}`);return[r,...t]})(e)),alert:tD(N.alert,e=>{var t;return[(t=e).action??"get",...tB(t.timeoutMs)]}),settings:tD(N.settings,e=>{var t;return"location"===(t=e).setting&&"set"===t.state?[t.setting,t.state,String(t.latitude),String(t.longitude)]:"permission"===t.setting?[t.setting,t.state,t.permission,...tU(t.mode)]:[t.setting,t.state]})};function t8(e){let t=e[0];if(void 0===t)return null;let r=tQ(t);if(null!==r)return{kind:"sleep",durationMs:r};let n=tQ(e[e.length-1]);if("text"===t)return{kind:"text",text:(null!==n?e.slice(1,-1).join(" "):e.slice(1).join(" ")).trim(),timeoutMs:n};if(t.startsWith("@"))return{kind:"ref",rawRef:t,timeoutMs:n};let i=s(null!==n?e.slice(0,-1):e.slice());return i&&0===i.rest.length&&l(i.selectorExpression)?{kind:"selector",selectorExpression:i.selectorExpression,timeoutMs:n}:{kind:"text",text:(null!==n?e.slice(0,-1).join(" "):e.join(" ")).trim(),timeoutMs:n}}function t4(e){return null===e?{}:{timeoutMs:e}}let t9=tG("wifi","airplane","location","animations"),t6=tG("on","off"),t5=tG("light","dark","toggle"),t7=tG("faceid","touchid"),re=tG("match","nonmatch","enroll","unenroll"),rt=tG("match","nonmatch"),rr=tG("grant","deny","reset"),rn=tG("camera","microphone","photos","contacts","contacts-limited","notifications","calendar","location","location-always","media-library","motion","reminders","siri","accessibility","screen-recording","input-monitoring"),ri={gesture:function(e,t){let r=e[0],n=e.slice(1),i=tM(t);switch(r){case"pan":return{...i,kind:r,origin:{x:Number(n[0]),y:Number(n[1])},delta:{x:Number(n[2]),y:Number(n[3])},durationMs:tC(n[4])};case"fling":return{...i,kind:r,direction:n[0],origin:{x:Number(n[1]),y:Number(n[2])},distance:tC(n[3]),durationMs:tC(n[4])};case"pinch":return{...i,kind:r,scale:Number(n[0]),origin:void 0===n[1]||void 0===n[2]?void 0:{x:Number(n[1]),y:Number(n[2])}};case"rotate":return{...i,kind:r,degrees:Number(n[0]),origin:void 0===n[1]||void 0===n[2]?void 0:{x:Number(n[1]),y:Number(n[2])},velocity:tC(n[3])};case"transform":return{...i,kind:r,origin:{x:Number(n[0]),y:Number(n[1])},delta:{x:Number(n[2]),y:Number(n[3])},scale:Number(n[4]),degrees:Number(n[5]),durationMs:tC(n[6])};default:throw new a("INVALID_ARGS","gesture requires pan, fling, pinch, rotate, or transform")}}},ro={gesture:tD(N.gesture,function(e){switch(e.kind){case"pan":return["pan",String(e.origin?.x),String(e.origin?.y),String(e.delta?.x),String(e.delta?.y),...tB(e.durationMs)];case"fling":return["fling",tJ(e.direction,"gesture fling requires direction"),String(e.origin?.x),String(e.origin?.y),...tB(e.distance),...tB(e.durationMs)];case"pinch":return["pinch",String(e.scale),...tB(e.origin?.x),...tB(e.origin?.y)];case"rotate":return["rotate",String(e.degrees),...tB(e.origin?.x),...tB(e.origin?.y),...tB(e.velocity)];case"transform":return["transform",String(e.origin?.x),String(e.origin?.y),String(e.delta?.x),String(e.delta?.y),String(e.scale),String(e.degrees),...tB(e.durationMs)];default:throw new a("INVALID_ARGS","gesture requires pan, fling, pinch, rotate, or transform")}}),"gesture-pan":tD(N.gesture,function(e){return["pan",String(e.x),String(e.y),String(e.dx),String(e.dy),...tB(e.durationMs)]}),"gesture-fling":tD(N.gesture,e=>{var t;let r;return r=void 0!==(t=e).durationMs?t.distance??180:t.distance,["fling",t.direction,String(t.x),String(t.y),...tB(r),...tB(t.durationMs)]}),"gesture-pinch":tD(N.gesture,function(e){return["pinch",String(e.scale),...tB(e.x),...tB(e.y)]}),"gesture-rotate":tD(N.gesture,e=>(function(e){var t=e;if(void 0===t.x&&void 0!==t.y||void 0!==t.x&&void 0===t.y)throw new a("INVALID_ARGS","gesture rotate center requires both x and y");let r=void 0===e.x||void 0===e.y?[]:[String(e.x),String(e.y)];return["rotate",String(e.degrees),...r,...tB(e.velocity)]})(e)),"gesture-transform":tD(N.gesture,function(e){return["transform",String(e.x),String(e.y),String(e.dx),String(e.dy),String(e.scale),String(e.degrees),...tB(e.durationMs)]})},ra={click:(e,t)=>({...tM(t),...tE(t),...tj(t),target:tP(rl(e)),button:t.clickButton}),press:(e,t)=>({...tM(t),...tE(t),...tj(t),target:tP(rl(e))}),longpress:(e,t)=>{let r,n={...rl((r=function(e){if(tV(e[0])&&tV(e[1]))return{target:e.slice(0,2),...void 0!==e[2]?{durationMs:Number(e[2])}:{}};let t=e.at(-1);return e.length>1&&tV(t)?{target:e.slice(0,-1),durationMs:Number(t)}:{target:e}}(e)).target),...void 0!==r.durationMs?{durationMs:r.durationMs}:{}};return{...tM(t),...tE(t),target:tP(n),durationMs:n.durationMs}},swipe:(e,t)=>({...tM(t),from:{x:Number(e[0]),y:Number(e[1])},to:{x:Number(e[2]),y:Number(e[3])},durationMs:tC(e[4]),count:t.count,pauseMs:t.pauseMs,pattern:t.pattern}),focus:(e,t)=>({...tM(t),x:Number(e[0]),y:Number(e[1])}),type:(e,t)=>({...tM(t),text:e.join(" "),delayMs:t.delayMs}),fill:(e,t)=>{let r=ru(e);return{...tM(t),...tE(t),target:tP(r.target),text:r.text,delayMs:t.delayMs}},scroll:(e,t)=>({...tM(t),direction:function(e){if("up"===e||"down"===e||"left"===e||"right"===e||"top"===e||"bottom"===e)return e;throw new a("INVALID_ARGS",`Unknown direction: ${String(e)}`)}(e[0]),amount:tC(e[1]),pixels:t.pixels}),get:(e,t)=>({...tM(t),...tE(t),format:function(e){if("text"===e||"attrs"===e)return e;throw new a("INVALID_ARGS","get only supports text or attrs")}(e[0]),target:tP(function(e){if(e[0]?.startsWith("@"))return{ref:e[0],label:tq(e.slice(1))};let t=e.join(" ").trim();if(!t)throw new a("INVALID_ARGS","get requires @ref or selector expression");return{selector:t}}(e.slice(1)))})},rs={click:e=>tR(N.click,t$(e),{...e,clickButton:e.button}),press:tD(N.press,e=>t$(e)),longpress:tD(N.longPress,e=>{var t;return[...t$(t=e),...tB(t.durationMs)]}),swipe:tD(N.swipe,function(e){return[String(e.from?.x),String(e.from?.y),String(e.to?.x),String(e.to?.y),...tB(e.durationMs)]}),focus:tD(N.focus,e=>[String(e.x),String(e.y)]),type:tD(N.type,e=>[e.text]),fill:tD(N.fill,e=>{var t;return[...t$(t=e),t.text]}),scroll:tD(N.scroll,e=>[tJ(e.direction,"scroll requires direction"),...tB(e.amount)]),get:tD(N.get,e=>[tJ(e.format,"get requires format"),...function(e){let t=tF(e);if("string"==typeof t.ref)return[t.ref,...tO(t.label)];if("string"==typeof t.selector)return[t.selector];throw new a("INVALID_ARGS","element command requires @ref or selector target")}(e)])};function rl(e){if(e[0]?.startsWith("@")){let t=tq(e.slice(1));return{ref:e[0],...void 0===t?{}:{label:t}}}let t=s(e);return t?{selector:t.selectorExpression}:{x:Number(e[0]),y:Number(e[1])}}function ru(e){let t=e[0];if(t?.startsWith("@")){let r=e.length>=3?e.slice(2).join(" "):e.slice(1).join(" ");return{kind:"ref",target:{ref:t,label:e.length>=3?tq(e.slice(1,2)):void 0},text:r}}let r=s(e,{preferTrailingValue:!0});return r?{kind:"selector",target:{selector:r.selectorExpression},text:r.rest.join(" ")}:{kind:"point",target:{x:Number(e[0]),y:Number(e[1])},text:e.slice(2).join(" ")}}let rc={perf:(e,t)=>tM(t),logs:(e,t)=>({...tM(t),action:function(e){if(void 0!==e){if("path"===e||"start"===e||"stop"===e||"doctor"===e||"mark"===e||"clear"===e)return e;throw new a("INVALID_ARGS","logs requires path, start, stop, doctor, mark, or clear")}}(e[0]),message:e.slice(1).join(" ")||void 0,restart:t.restart}),network:(e,t)=>({...tM(t),action:function(e){if(void 0!==e){if("dump"===e||"log"===e)return e;throw new a("INVALID_ARGS","network requires dump or log")}}(e[0]),limit:tC(e[1]),include:t.networkInclude??function(e){if(void 0!==e){if("summary"===e||"headers"===e||"body"===e||"all"===e)return e;throw new a("INVALID_ARGS","network include mode must be summary, headers, body, or all")}}(e[2])}),record:(e,t)=>({...tM(t),action:rf(e[0],"record"),path:e[1],fps:t.fps,quality:t.quality,hideTouches:t.hideTouches}),trace:(e,t)=>({...tM(t),action:rf(e[0],"trace"),path:e[1]})},rd={perf:tD(N.perf),logs:tD(N.logs,e=>{var t;return[(t=e).action??"path",...tU(t.message)]}),network:e=>{var t;return tR(N.network,[...(t=e).action?[t.action]:[],...tB(t.limit)],{...e,networkInclude:e.include})},record:tD(N.record,e=>rp(e)),trace:tD(N.trace,e=>rp(e))};function rp(e){return[e.action,...tU(e.path)]}function rf(e,t){if("start"===e||"stop"===e)return e;throw new a("INVALID_ARGS",`${t} requires start|stop`)}let rm={replay:(e,t)=>({...tM(t),path:tH(e[0],"replay requires path"),update:t.replayUpdate,backend:t.replayMaestro?"maestro":void 0,env:t.replayEnv}),test:(e,t)=>({...tM(t),paths:e,update:t.replayUpdate,backend:t.replayMaestro?"maestro":void 0,env:t.replayEnv,failFast:t.failFast,timeoutMs:t.timeoutMs,retries:t.retries,artifactsDir:t.artifactsDir,reportJunit:t.reportJunit})};function rh(e){return e.backend??(!0===e.maestro?"maestro":void 0)}function rg(e){let t={};for(let[r,n]of Object.entries(e))"string"==typeof n&&r.startsWith("AD_VAR_")&&(t[r]=n);return t}let rv={find:(e,t)=>(function(e,t){var r;let n={...{depth:(r=t).snapshotDepth,raw:r.snapshotRaw},...t_(t),first:t.findFirst,last:t.findLast},i=function(e){if("text"===e||"label"===e||"value"===e||"role"===e||"id"===e)return e}(e[0]),o=void 0!==i,s=o?e[1]:e[0],l=o?2:1,u=e[l];if(void 0===u)return{...n,locator:i,query:rb(s)};if("get"===u){let t=e[l+1];if("text"===t)return{...n,locator:i,query:rb(s),action:"getText"};if("attrs"===t)return{...n,locator:i,query:rb(s),action:"getAttrs"};throw new a("INVALID_ARGS","find get only supports text or attrs")}if("wait"===u)return{...n,locator:i,query:rb(s),action:"wait",timeoutMs:tC(e[l+1])};if("fill"===u||"type"===u)return{...n,locator:i,query:rb(s),action:u,value:e.slice(l+1).join(" ")};if("click"===u||"focus"===u||"exists"===u)return{...n,locator:i,query:rb(s),action:u};throw new a("INVALID_ARGS",`Unsupported find action: ${u}`)})(e,t),is:(e,t)=>(function(e,t){let r={...tL(t),...t_(t)},n=e[0],i=function(e,t={}){let r=s(e,t);if(!r)throw new a("INVALID_ARGS","is requires a selector expression");return r}(e.slice(1),{preferTrailingValue:"text"===n});if("text"===n)return{...r,predicate:n,selector:i.selectorExpression,value:i.rest.join(" ")};if("visible"===n||"hidden"===n||"exists"===n||"editable"===n||"selected"===n)return{...r,predicate:n,selector:i.selectorExpression};throw new a("INVALID_ARGS","is requires predicate: visible|hidden|exists|editable|selected|text")})(e,t)},ry={is:tD(N.is,e=>{var t;return[(t=e).predicate,t.selector,..."text"===t.predicate?[t.value]:[]]}),find:e=>tR(N.find,function(e){let t=e.locator&&"any"!==e.locator?[e.locator,e.query]:[e.query];switch(e.action){case void 0:case"click":case"focus":case"exists":return e.action?[...t,e.action]:t;case"getText":return[...t,"get","text"];case"getAttrs":return[...t,"get","attrs"];case"wait":return[...t,"wait",...tB(e.timeoutMs)];case"fill":case"type":return[...t,e.action,e.value]}}(e),{...e,findFirst:e.first,findLast:e.last})};function rb(e){if(void 0===e||""===e)throw new a("INVALID_ARGS","find requires query");return e}function rw(e){if(void 0===e)throw new a("INVALID_ARGS","rotate requires an orientation argument. Use portrait|portrait-upside-down|landscape-left|landscape-right.");switch(e?.trim().toLowerCase()){case"portrait":return"portrait";case"portrait-upside-down":case"upside-down":return"portrait-upside-down";case"landscape-left":case"left":return"landscape-left";case"landscape-right":case"right":return"landscape-right";default:throw new a("INVALID_ARGS",`Invalid rotation: ${e}. Use portrait|portrait-upside-down|landscape-left|landscape-right.`)}}let rS={appstate:(e,t)=>tM(t),home:(e,t)=>tM(t),"app-switcher":(e,t)=>tM(t),back:(e,t)=>({...tM(t),mode:t.backMode}),rotate:(e,t)=>({...tM(t),orientation:rw(e[0])}),keyboard:(e,t)=>({...tM(t),...function(e){if(e.length>1)throw new a("INVALID_ARGS","keyboard accepts at most one action argument.");return tS({action:function(e){let t=e?.toLowerCase();if("get"===t)return"status";if(void 0===t||"status"===t||"dismiss"===t||"enter"===t||"return"===t)return t;throw new a("INVALID_ARGS","keyboard action must be status, get, dismiss, enter, or return.")}(e[0])})}(e)}),clipboard:(e,t)=>({...tM(t),...function(e){let t=e[0]?.toLowerCase();if("read"!==t&&"write"!==t)throw new a("INVALID_ARGS","clipboard requires a subcommand: read or write.");if("read"===t){if(1!==e.length)throw new a("INVALID_ARGS","clipboard read does not accept additional arguments.");return{action:t}}if(e.length<2)throw new a("INVALID_ARGS","clipboard write requires text.");return{action:t,text:e.slice(1).join(" ")}}(e)}),"react-native":(e,t)=>({...tM(t),action:function(e){if("dismiss-overlay"===e)return e;throw new a("INVALID_ARGS","react-native supports only: dismiss-overlay")}(e[0])})},rI={appstate:tD(N.appState),back:e=>{var t;return tR(N.back,[],{...e,backMode:"in-app"===(t=e.mode)||"system"===t?t:void 0})},home:tD(N.home),rotate:tD(N.rotate,e=>[tJ(e.orientation,"rotate requires orientation")]),"app-switcher":tD(N.appSwitcher),keyboard:tD(N.keyboard,e=>tU(e.action)),clipboard:tD(N.clipboard,e=>{var t;return"read"===(t=e).action?["read"]:["write",t.text]}),"react-native":tD(N.reactNative,e=>[tJ(e.action,"react-native requires action")])},rA={...tW,...t3,...rs,...ro,...ry,...rd,replay:e=>tR(N.replay,[tJ(e.path,"replay requires path")],{...e,replayUpdate:e.update,replayBackend:rh(e),replayEnv:e.env,replayShellEnv:rg(process.env)}),test:e=>tR(N.test,e.paths??[],{...e,replayUpdate:e.update,replayBackend:rh(e),replayEnv:e.env,replayShellEnv:rg(process.env)}),...rI,batch:e=>tR(N.batch,[],{...e,batchSteps:function(e){if(!Array.isArray(e)||0===e.length)throw new a("INVALID_ARGS","batch requires a non-empty steps array.");return e.map((e,t)=>{var r;let n,i,o,s,l,u;return o=function(e,t){let r="string"==typeof e.command?e.command.trim().toLowerCase():"";if(rk.has(r))return r;throw new a("INVALID_ARGS",`Batch step ${t} command is not available through command batch: ${String(e.command)}`)}(i=function(e,t){if(!e||"object"!=typeof e||Array.isArray(e))throw new a("INVALID_ARGS",`Invalid batch step ${t}.`);return e}(e,r=t+1),r),s=function(e,t){let r=e.input;if(!r||"object"!=typeof r||Array.isArray(r))throw new a("INVALID_ARGS",`Batch step ${t} input must be an object.`);return r}(i,r),l=function(e,t){let r=e.runtime;if(void 0!==r&&(!r||"object"!=typeof r||Array.isArray(r)))throw new a("INVALID_ARGS",`Batch step ${t} runtime must be an object.`);return r}(i,r),{...u={command:(n=rD(o,s)).command,positionals:n.positionals,flags:ez(n.options),runtime:n.options.runtime},runtime:l??u.runtime}})}(e.steps),batchOnError:e.onError,batchMaxSteps:e.maxSteps})},rx=new Set(["replay","batch","gesture-pan","gesture-fling","gesture-pinch","gesture-rotate","gesture-transform"]),rN=Object.keys(rA).filter(e=>!rx.has(e)),rk=new Set(rN);function rD(e,t){return rA[e](t)}export{_ as DAEMON_COMMAND_GROUPS,R as GESTURE_SUBCOMMAND_ERROR,k as INTERNAL_COMMANDS,N as PUBLIC_COMMANDS,V as SCREENSHOT_ACTION_FLAG_KEYS,T as SCREENSHOT_COMMAND_FLAG_KEYS,C as SCREENSHOT_SPECIFIC_FLAG_DEFINITIONS,tK as appCliReaders,H as appendScreenshotScriptFlags,tw as assertAllowedKeys,rN as batchCommandNames,e1 as booleanField,eW as booleanSchema,ez as buildFlags,eO as buildMeta,t2 as captureCliReaders,ta as command_input_readPoint,tM as commonInputFromFlags,th as commonToClientOptions,I as computeDaemonCodeSignature,c as consumeTextLines,e9 as customField,e5 as elementTargetField,e2 as enumField,tr as fieldsInputSchema,p as findProjectRoot,G as formatRequestProgressEvent,ri as gestureCliReaders,e0 as integerField,eK as integerSchema,ra as interactionCliReaders,e6 as interactionTargetField,$ as isDaemonProgressEnvelope,F as isDaemonResponseEnvelope,e4 as jsonSchemaField,L as listCliCommandNames,j as listMcpExposedCommandNames,e3 as looseObjectField,eY as looseObjectSchema,eN as normalizeDeployResult,eR as normalizeDevice,ek as normalizeInstallFromSourceResult,eD as normalizeMaterializationReleaseResult,ej as normalizeOpenDevice,eL as normalizeRuntimeHints,eM as normalizeSession,eP as normalizeStartupSample,v as normalizeTenantId,eX as numberField,rc as observabilityCliReaders,tm as optionalEnum,td as optionalInteger,rw as parseDeviceRotation,eG as parseInstallSourceConfig,tQ as parseTimeout,t8 as parseWaitPositionals,e7 as pointField,rD as prepareDaemonCommandRequest,Z as readCommandMessage,to as readCommonInput,tn as readFieldInput,ru as readFillTargetFromPositionals,ti as readInputRecord,rl as readInteractionTargetFromPositionals,tX as readLocationCoordinate,ep as readOptionalString,ed as readRequiredString,eF as readScreenshotOverlayRefs,J as readScreenshotScriptFlag,e$ as readSnapshotNodes,d as readVersion,tt as repeatedFields,rm as replayCliReaders,t0 as requireLocationCoordinates,tf as requiredEnum,eZ as requiredField,tu as requiredNumber,S as resolveDaemonCodeSignature,f as resolveDaemonPaths,m as resolveDaemonServerMode,h as resolveDaemonTransportPreference,en as resolveDeployResultTarget,eo as resolveInstallFromSourceResultTarget,g as resolveSessionIsolationMode,eq as resolveSessionName,B as screenshotFlagsFromOptions,U as screenshotOptionsFromFlags,rv as selectorCliReaders,te as selectorSnapshotFields,el as serializeCloseResult,z as serializeDaemonProgressEnvelope,O as serializeDaemonResponseEnvelope,q as serializeDaemonRpcResponseEnvelope,ei as serializeDeployResult,er as serializeDevice,ea as serializeInstallFromSourceResult,es as serializeOpenResult,et as serializeSessionListEntry,eu as serializeSnapshotResult,P as shouldStreamRequestProgress,ex as splitNonEmptyTrimmedLines,e8 as stringArrayField,eQ as stringField,eJ as stringSchema,W as successText,rS as systemCliReaders,tv as toClientElementTarget,tg as toClientInteractionTarget,ty as toRepeatedOptions,tb as toSelectorSnapshotOptions,Y as withSuccessText};