agent-device 0.16.1 → 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 (37) hide show
  1. package/android-multitouch-helper/dist/{agent-device-android-multitouch-helper-0.16.1.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.1.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.1.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 +4 -0
  11. package/dist/src/7519.js +1 -1
  12. package/dist/src/7599.js +3 -0
  13. package/dist/src/89.js +1 -1
  14. package/dist/src/9542.js +3 -2
  15. package/dist/src/android-adb.js +1 -1
  16. package/dist/src/android-snapshot-helper.d.ts +10 -1
  17. package/dist/src/android-snapshot-helper.js +1 -1
  18. package/dist/src/batch.d.ts +1 -0
  19. package/dist/src/cli.js +15 -13
  20. package/dist/src/contracts.d.ts +1 -0
  21. package/dist/src/contracts.js +1 -1
  22. package/dist/src/index.d.ts +3 -0
  23. package/dist/src/internal/daemon.js +52 -52
  24. package/dist/src/server.js +1 -1
  25. package/ios-runner/AgentDeviceRunner/AgentDeviceRunner/Assets.xcassets/AppIcon.appiconset/logo.jpg +0 -0
  26. package/ios-runner/AgentDeviceRunner/AgentDeviceRunner/Assets.xcassets/Logo.imageset/logo.jpg +0 -0
  27. package/ios-runner/AgentDeviceRunner/AgentDeviceRunner.xcodeproj/project.pbxproj +0 -4
  28. package/package.json +1 -4
  29. package/server.json +2 -2
  30. package/android-multitouch-helper/dist/agent-device-android-multitouch-helper-0.16.1.apk.sha256 +0 -1
  31. package/android-snapshot-helper/dist/agent-device-android-snapshot-helper-0.16.1.apk +0 -0
  32. package/android-snapshot-helper/dist/agent-device-android-snapshot-helper-0.16.1.apk.sha256 +0 -1
  33. package/dist/src/2099.js +0 -1
  34. package/dist/src/3622.js +0 -3
  35. package/ios-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -14
  36. package/ios-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/Assets.xcassets/AppIcon.appiconset/logo-tinted.jpg +0 -0
  37. package/ios-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/Assets.xcassets/Contents.json +0 -6
@@ -1,2 +1,2 @@
1
- import{createAgentDeviceClient as r}from"./9542.js";import{runCommand as e,isCommandName as t,listMcpToolDefinitions as n}from"./89.js";import{readVersion as i}from"./2099.js";let s=function(n={createClient:r,runCommand:e}){return{execute:async(r,e)=>{var i;if(!t(r))throw Error(`Unknown command tool: ${r}`);let s=n.createClient(function(r){if(!r||"object"!=typeof r||Array.isArray(r))return{};let e=r.stateDir;if(void 0===e)return{};if("string"!=typeof e||0===e.length)throw Error("Expected stateDir to be a non-empty string.");return{stateDir:e}}(e)),o=await n.runCommand(s,r,function(r){if(!r||"object"!=typeof r||Array.isArray(r))return r;let{stateDir:e,...t}=r;return t}(e));return{isError:!1,structuredContent:o,content:[{type:"text",text:"string"==typeof(i=o)?i:JSON.stringify(i,null,2)}]}}}}();async function o(r){if("2.0"!==r.jsonrpc||"string"!=typeof r.method)return u(r.id??null,-32600,"Invalid JSON-RPC request.");if(void 0===r.id)return null;try{var e,t;return e=r.id,t=await a(r.method,r.params),{jsonrpc:"2.0",id:e,result:t}}catch(e){if(e instanceof f)return u(r.id,-32601,e.message);return u(r.id,-32602,e instanceof Error?e.message:String(e))}}async function a(r,e){switch(r){case"initialize":return{protocolVersion:"2025-11-25",capabilities:{tools:{}},serverInfo:{name:"agent-device",version:i()}};case"ping":return{};case"tools/list":return{tools:n().map(r=>{var e;return{name:r.name,description:r.description,inputSchema:{...e=r.inputSchema,properties:{...e.properties,stateDir:{type:"string",description:"Agent-device state directory."}}}}})};case"tools/call":return await c(e);default:throw new f(`Unsupported MCP method: ${r}`)}}async function c(r){let e=function(r){if(!r||"object"!=typeof r||Array.isArray(r))throw Error("Expected object parameters.");return r}(r),t=function(r,e){let t=r[e];if("string"!=typeof t||0===t.length)throw Error(`Expected ${e} to be a non-empty string.`);return t}(e,"name");try{return await s.execute(t,e.arguments)}catch(r){return function(r,e=!1){return{isError:e,content:[{type:"text",text:r}]}}(r instanceof Error?r.message:String(r),!0)}}function u(r,e,t){return{jsonrpc:"2.0",id:r,error:{code:e,message:t}}}class f extends Error{}async function l(){let r=function(r={}){let e=r.handlePayload??p,t=r.write??m,n=Promise.resolve();return{push:r=>{var i;let s=Array.isArray(i=r)?1===i.length?i[0]?.id??null:null:i.id??null;n=n.then(async()=>{let n=await e(r);n&&t(n)}).catch(r=>{t({jsonrpc:"2.0",id:s,error:{code:-32603,message:r instanceof Error?r.message:String(r)}})})},idle:async()=>{await n}}}(),e=new y(e=>{r.push(e)});process.stdin.setEncoding("utf8"),process.stdin.on("data",r=>{try{e.push(r)}catch(r){m({jsonrpc:"2.0",id:null,error:{code:-32700,message:r instanceof Error?r.message:String(r)}})}}),await new Promise(r=>{process.stdin.on("end",r),process.stdin.on("close",r),process.stdin.resume()}),await r.idle()}function p(r){return Array.isArray(r)?d(r):o(r)}async function d(r){let e=[];for(let n of r){var t;e.push(...(t=await o(n))?[t]:[])}return e.length>0?e:null}class y{buffer="";sink;constructor(r){this.sink=r}push(r){for(this.buffer+=r;;){let r=this.tryReadLineMessage();if(void 0!==r){this.emit(r);continue}break}}tryReadLineMessage(){let r=this.buffer.indexOf("\n");if(-1===r)return;let e=this.buffer.slice(0,r).trim();return this.buffer=this.buffer.slice(r+1),e.length>0?e:void 0}emit(r){let e=JSON.parse(r);Array.isArray(e),this.sink(e)}}function m(r){process.stdout.write(`${JSON.stringify(r)}
1
+ import{createAgentDeviceClient as r}from"./9542.js";import{runCommand as e,isCommandName as t,listMcpToolDefinitions as n}from"./89.js";import{readVersion as i}from"./6277.js";let s=function(n={createClient:r,runCommand:e}){return{execute:async(r,e)=>{var i;if(!t(r))throw Error(`Unknown command tool: ${r}`);let s=n.createClient(function(r){if(!r||"object"!=typeof r||Array.isArray(r))return{};let e=r.stateDir;if(void 0===e)return{};if("string"!=typeof e||0===e.length)throw Error("Expected stateDir to be a non-empty string.");return{stateDir:e}}(e)),o=await n.runCommand(s,r,function(r){if(!r||"object"!=typeof r||Array.isArray(r))return r;let{stateDir:e,...t}=r;return t}(e));return{isError:!1,structuredContent:o,content:[{type:"text",text:"string"==typeof(i=o)?i:JSON.stringify(i,null,2)}]}}}}();async function o(r){if("2.0"!==r.jsonrpc||"string"!=typeof r.method)return u(r.id??null,-32600,"Invalid JSON-RPC request.");if(void 0===r.id)return null;try{var e,t;return e=r.id,t=await a(r.method,r.params),{jsonrpc:"2.0",id:e,result:t}}catch(e){if(e instanceof f)return u(r.id,-32601,e.message);return u(r.id,-32602,e instanceof Error?e.message:String(e))}}async function a(r,e){switch(r){case"initialize":return{protocolVersion:"2025-11-25",capabilities:{tools:{}},serverInfo:{name:"agent-device",version:i()}};case"ping":return{};case"tools/list":return{tools:n().map(r=>{var e;return{name:r.name,description:r.description,inputSchema:{...e=r.inputSchema,properties:{...e.properties,stateDir:{type:"string",description:"Agent-device state directory."}}}}})};case"tools/call":return await c(e);default:throw new f(`Unsupported MCP method: ${r}`)}}async function c(r){let e=function(r){if(!r||"object"!=typeof r||Array.isArray(r))throw Error("Expected object parameters.");return r}(r),t=function(r,e){let t=r[e];if("string"!=typeof t||0===t.length)throw Error(`Expected ${e} to be a non-empty string.`);return t}(e,"name");try{return await s.execute(t,e.arguments)}catch(r){return function(r,e=!1){return{isError:e,content:[{type:"text",text:r}]}}(r instanceof Error?r.message:String(r),!0)}}function u(r,e,t){return{jsonrpc:"2.0",id:r,error:{code:e,message:t}}}class f extends Error{}async function l(){let r=function(r={}){let e=r.handlePayload??p,t=r.write??m,n=Promise.resolve();return{push:r=>{var i;let s=Array.isArray(i=r)?1===i.length?i[0]?.id??null:null:i.id??null;n=n.then(async()=>{let n=await e(r);n&&t(n)}).catch(r=>{t({jsonrpc:"2.0",id:s,error:{code:-32603,message:r instanceof Error?r.message:String(r)}})})},idle:async()=>{await n}}}(),e=new y(e=>{r.push(e)});process.stdin.setEncoding("utf8"),process.stdin.on("data",r=>{try{e.push(r)}catch(r){m({jsonrpc:"2.0",id:null,error:{code:-32700,message:r instanceof Error?r.message:String(r)}})}}),await new Promise(r=>{process.stdin.on("end",r),process.stdin.on("close",r),process.stdin.resume()}),await r.idle()}function p(r){return Array.isArray(r)?d(r):o(r)}async function d(r){let e=[];for(let n of r){var t;e.push(...(t=await o(n))?[t]:[])}return e.length>0?e:null}class y{buffer="";sink;constructor(r){this.sink=r}push(r){for(this.buffer+=r;;){let r=this.tryReadLineMessage();if(void 0!==r){this.emit(r);continue}break}}tryReadLineMessage(){let r=this.buffer.indexOf("\n");if(-1===r)return;let e=this.buffer.slice(0,r).trim();return this.buffer=this.buffer.slice(r+1),e.length>0?e:void 0}emit(r){let e=JSON.parse(r);Array.isArray(e),this.sink(e)}}function m(r){process.stdout.write(`${JSON.stringify(r)}
2
2
  `)}export{l as runAgentDeviceMcpServer};
@@ -402,8 +402,6 @@
402
402
  20EA2EEE2F2CFC7C001CF0EF /* Debug */ = {
403
403
  isa = XCBuildConfiguration;
404
404
  buildSettings = {
405
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
406
- ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
407
405
  "CODE_SIGN_ENTITLEMENTS[sdk=macosx*]" = AgentDeviceRunnerUITests/AgentDeviceRunnerUITests.entitlements;
408
406
  CODE_SIGN_STYLE = Automatic;
409
407
  CURRENT_PROJECT_VERSION = 1;
@@ -430,8 +428,6 @@
430
428
  20EA2EEF2F2CFC7C001CF0EF /* Release */ = {
431
429
  isa = XCBuildConfiguration;
432
430
  buildSettings = {
433
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
434
- ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
435
431
  "CODE_SIGN_ENTITLEMENTS[sdk=macosx*]" = AgentDeviceRunnerUITests/AgentDeviceRunnerUITests.entitlements;
436
432
  CODE_SIGN_STYLE = Automatic;
437
433
  CURRENT_PROJECT_VERSION = 1;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-device",
3
- "version": "0.16.1",
3
+ "version": "0.16.4",
4
4
  "description": "Agent-native CLI for AI mobile testing and app automation across iOS, Android, tvOS, Android TV, macOS, and Linux.",
5
5
  "mcpName": "io.github.callstackincubator/agent-device",
6
6
  "license": "MIT",
@@ -204,15 +204,12 @@
204
204
  "detox"
205
205
  ],
206
206
  "dependencies": {
207
- "fast-xml-parser": "^5.7.2",
208
- "pngjs": "^7.0.0",
209
207
  "yaml": "^2.9.0"
210
208
  },
211
209
  "devDependencies": {
212
210
  "@microsoft/api-extractor": "^7.58.7",
213
211
  "@rslib/core": "0.20.1",
214
212
  "@types/node": "^22.0.0",
215
- "@types/pngjs": "^6.0.5",
216
213
  "@vitest/coverage-v8": "4.1.2",
217
214
  "fallow": "^2.52.0",
218
215
  "oxfmt": "^0.42.0",
package/server.json CHANGED
@@ -7,12 +7,12 @@
7
7
  "url": "https://github.com/callstackincubator/agent-device",
8
8
  "source": "github"
9
9
  },
10
- "version": "0.16.1",
10
+ "version": "0.16.4",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "agent-device",
15
- "version": "0.16.1",
15
+ "version": "0.16.4",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  }
@@ -1 +0,0 @@
1
- 3feeee326a4b94a45d9097ac66cd5a7b2d09b02be88c38cd6a6e8be587adc9b2 agent-device-android-multitouch-helper-0.16.1.apk
@@ -1 +0,0 @@
1
- d59fb15b0ff87e7997fb24e281ebe4a4bb14323273f2a5c70616dbfcda26cd18 agent-device-android-snapshot-helper-0.16.1.apk
package/dist/src/2099.js DELETED
@@ -1 +0,0 @@
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(){try{let r=d();return JSON.parse(e.readFileSync(t.join(r,"package.json"),"utf8")).version??"0.0.0"}catch{return"0.0.0"}}function d(){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 p(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 f(e){let t=(e??"").trim().toLowerCase();return"http"===t?"http":"dual"===t?"dual":"socket"}function m(e){let t=(e??"").trim().toLowerCase();return"auto"===t?"auto":"socket"===t?"socket":"http"===t?"http":"auto"}function h(e){return"tenant"===(e??"").trim().toLowerCase()?"tenant":"none"}function g(e){if(!e)return;let t=e.trim();if(t&&/^[a-zA-Z0-9._-]{1,128}$/.test(t))return t}let v=/(?:^|[^\w$.])(?:import|export)\s+(?:type\s+)?(?:[^'"`]*?\s+from\s+)?['"]([^'"]+)['"]/gm,b=/import\(\s*['"]([^'"]+)['"]\s*\)/gm,y=[".ts",".tsx",".js",".jsx",".mjs",".cjs"];function w(){let e=process.argv[1];return e?S(e):"unknown"}function S(r,i=d()){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 I(e,v,t),I(e,b,t),[...t]}(u)){let n=function(e,r){let n=t.resolve(t.dirname(e),r),i=A(n);if(i)return i;for(let e of y){let t=A(`${n}${e}`);if(t)return t}for(let e of y){let r=A(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 I(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 A(t){try{return e.statSync(t).isFile()?t:null}catch{return null}}let x={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"},N={installSource:"install_source",leaseAllocate:"lease_allocate",leaseHeartbeat:"lease_heartbeat",leaseRelease:"lease_release",releaseMaterializedPaths:"release_materialized_paths",sessionList:"session_list"},k={auth:"auth",connect:"connect",connection:"connection",disconnect:"disconnect",mcp:"mcp",metro:"metro",reactDevtools:"react-devtools",session:"session"},D="gesture requires one of: pan, fling, pinch, rotate, transform",R=_(k.auth,k.connect,k.connection,k.disconnect,k.mcp,k.reactDevtools);_(k.auth,k.connect,k.connection,k.disconnect,k.mcp,k.metro,k.reactDevtools,k.session,x.appState,x.batch,x.devices,x.gesture,x.replay,x.test,x.trace);let M={inventory:_(N.sessionList,x.devices,x.apps),state:_(x.boot,x.appState),observability:_(x.perf,x.logs,x.network),replay:_(x.replay,x.test),snapshot:_(x.snapshot,x.diff,x.wait,x.alert,x.settings),replayScopedAction:_(x.alert,x.back,x.click,x.clipboard,x.diff,x.fill,x.find,x.gesture,x.get,x.home,x.is,x.keyboard,x.longPress,"pinch",x.press,x.record,x.reactNative,x.rotate,x.screenshot,x.scroll,x.settings,x.snapshot,x.swipe,x.type,x.wait),androidBlockingDialogGuardedAction:_(x.back,x.click,x.fill,x.focus,x.gesture,x.home,x.keyboard,x.longPress,"fling","pan","pinch",x.press,x.rotate,"rotate-gesture",x.scroll,x.swipe,"transform-gesture",x.type),selectorValidationExempt:_(N.sessionList,x.devices,N.releaseMaterializedPaths),leaseAdmissionExempt:_(N.sessionList,x.devices,N.releaseMaterializedPaths,N.leaseAllocate,N.leaseHeartbeat,N.leaseRelease)};function _(...e){return new Set(e)}function E(){return[...Object.values(x),...Object.values(k)].sort()}function L(){return E().filter(e=>!R.has(e))}let j=["out","overlayRefs","screenshotFullscreen","screenshotMaxSize","screenshotNoStabilize"],F=["screenshotFullscreen","screenshotMaxSize","screenshotNoStabilize"],z=[{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 P(e){return G({overlayRefs:e?.overlayRefs,fullscreen:e?.screenshotFullscreen,maxSize:e?.screenshotMaxSize,stabilize:!e?.screenshotNoStabilize&&void 0})}function O(e={}){return G({overlayRefs:e.overlayRefs,screenshotFullscreen:e.screenshotFullscreen??e.fullscreen,screenshotMaxSize:e.screenshotMaxSize??e.maxSize,screenshotNoStabilize:e.screenshotNoStabilize??(!1===e.stabilize||void 0)})}function $(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 q(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 G(e){return Object.fromEntries(Object.entries(e).filter(e=>void 0!==e[1]))}function T(e){return e?{message:e}:{}}function V(e,t){return t?{...e,message:t}:e}function C(e){return"string"==typeof e?.message&&e.message.length>0?e.message:null}function U(e){let t=e.appId??e.bundleId??e.packageName;return{session:e.session,appId:t,appBundleId:e.bundleId,package:e.packageName}}function B(e,t,r){return{deviceId:t,deviceName:r,..."android"===e?{serial:t}:"ios"===e?{udid:t}:{}}}function H(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 K(e){return{name:e.name,...H(e.device,{includeAndroidSerial:!1}),createdAt:e.createdAt}}function J(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 W(e){return e.bundleId??e.package??e.app}function Y(e){return V({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: ${W(e)}`)}function Z(e){return e.appName??e.bundleId??e.packageName??e.launchTarget}function Q(e){return V({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: ${Z(e)}`)}function X(e){let t=e.appName??e.appBundleId??e.session;return V({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?H(e.device):{}},t?`Opened: ${t}`:"Opened")}function ee(e){return{session:e.session,...e.shutdown?{shutdown:e.shutdown}:{},...T(e.session?`Closed: ${e.session}`:"Closed")}}function et(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 er(e,t,r,n){let i=r(e[t]);if(void 0===i)throw new a("COMMAND_FAILED",n,{response:e});return i}function en(e,t){return er(e,t,ec,`Daemon response is missing "${t}".`)}function ei(e,t){return ec(e[t])}function eo(e,t){var r;let n;return r=ec,null===(n=e[t])?null:r(n)}function ea(e,t){return er(e,t,ep,`Daemon response has invalid "${t}".`)}function es(e,t){return function(e){return"tv"===e||"mobile"===e||"desktop"===e?e:void 0}(e[t])??"mobile"}function el(e,t){let r=e[t];if(!em(r))return;let n=eu(r,"x"),i=eu(r,"y"),o=eu(r,"width"),a=eu(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 eu(e,t){let r=e[t];return"number"==typeof r?r:void 0}function ec(e){return"string"==typeof e&&e.length>0?e:void 0}function ed(e){return"number"==typeof e&&Number.isFinite(e)?e:void 0}function ep(e){return"ios"===e||"macos"===e||"android"===e||"linux"===e?e:void 0}function ef(e){return"simulator"===e||"emulator"===e||"device"===e?e:void 0}function em(e){return"object"==typeof e&&null!==e}function eh(e){let t={};for(let[r,n]of Object.entries(e))void 0!==n&&(t[r]=n);return t}function eg(e){return e.split("\n").map(e=>e.trim()).filter(e=>e.length>0)}function ev(e,t){let r=ei(e,"bundleId"),n=ei(e,"package");return{app:en(e,"app"),appPath:en(e,"appPath"),platform:ea(e,"platform"),appId:r??n,bundleId:r,package:n,identifiers:U({session:t,bundleId:r,packageName:n})}}function eb(e,t){let r=ei(e,"bundleId"),n=ei(e,"packageName"),i=r??n??ei(e,"appId"),o=ei(e,"launchTarget")??n??r??i;if(!o)throw new a("COMMAND_FAILED",'Daemon response is missing "launchTarget".',{response:e});return{appName:ei(e,"appName"),appId:i,bundleId:r,packageName:n,launchTarget:o,installablePath:ei(e,"installablePath"),archivePath:ei(e,"archivePath"),materializationId:ei(e,"materializationId"),materializationExpiresAt:ei(e,"materializationExpiresAt"),identifiers:U({session:t,bundleId:r,packageName:n,appId:i})}}function ey(e){return{released:!0===e.released,materializationId:en(e,"materializationId"),identifiers:{}}}function ew(e){let{record:t,platform:r,id:n,name:i,target:o}=eI(e,"name");return{platform:r,target:o,kind:er(t,"kind",ef,'Daemon response has invalid "kind".'),id:n,name:i,booted:"boolean"==typeof t.booted?t.booted:void 0,identifiers:B(r,n,i),...eA(r,n)}}function eS(e){let{record:t,platform:r,id:n,name:i,target:o}=eI(e,"name"),a=en(t,"device"),s={session:i,...B(r,n,a)};return{name:i,createdAt:er(t,"createdAt",ed,'Daemon response is missing numeric "createdAt".'),device:{platform:r,target:o,id:n,name:a,identifiers:s,...eA(r,n,eo(t,"ios_simulator_device_set"))},identifiers:s}}function eI(e,t){let r=function(e){if(!em(e))throw new a("COMMAND_FAILED","Daemon returned an unexpected response shape.",{value:e});return e}(e);return{record:r,platform:ea(r,"platform"),id:en(r,"id"),name:en(r,t),target:es(r,"target")}}function eA(e,t,r){return{ios:"ios"===e?{udid:t,...void 0!==r?{simulatorSetPath:r}:{}}:void 0,android:"android"===e?{serial:t}:void 0}}function ex(e){if(!em(e))return;let t=e.platform,r=ei(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:ei(e,"bundleUrl"),launchUrl:ei(e,"launchUrl")}}function eN(e){let t=e.platform,r=ei(e,"id"),n=ei(e,"device");if("ios"!==t&&"macos"!==t&&"android"!==t&&"linux"!==t||!r||!n)return;let i=es(e,"target"),o=B(t,r,n);return{platform:t,target:i,id:r,name:n,identifiers:o,ios:"ios"===t?{udid:ei(e,"device_udid")??r,simulatorSetPath:eo(e,"ios_simulator_device_set")}:void 0,android:"android"===t?{serial:ei(e,"serial")??r}:void 0}}function ek(e){if(em(e)&&"number"==typeof e.durationMs&&"string"==typeof e.measuredAt&&"string"==typeof e.method)return{durationMs:e.durationMs,measuredAt:e.measuredAt,method:e.method,appTarget:ei(e,"appTarget"),appBundleId:ei(e,"appBundleId")}}function eD(e){return Array.isArray(e)?e:[]}function eR(e){let t=e.overlayRefs;if(!Array.isArray(t))return;let r=[];for(let e of t){if(!em(e))continue;let t=ei(e,"ref"),n=el(e,"rect"),i=el(e,"overlayRect"),o=function(e,t){let r=e[t];if(!em(r))return;let n=eu(r,"x"),i=eu(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:ei(e,"label"),rect:n,overlayRect:i,center:o})}return r}function eM(e){return eh({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,...O(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 e_(e){return eh({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 eE(e){return e??"default"}function eL(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"!==ez(e.type,`${t} installSource.type`))throw new a("INVALID_ARGS",`${t} installSource.type must be "github-actions-artifact".`);let{owner:r,repo:n}=eF(ez(e.repo,`${t} installSource.repo`),`${t} installSource.repo`);return ej(r,n,e.artifact,`${t} installSource.artifact`)}function ej(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:ez(r,n)}}function eF(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 ez(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 eP=["ios","android","macos","linux","apple"],eO=["mobile","tv","desktop"],e$=["ref","selector","point"];function eq(e){return{type:"string",...e?{description:e}:{}}}function eG(e){return{type:"integer",...e?{description:e}:{}}}function eT(e){return{type:"boolean",...e?{description:e}:{}}}function eV(e){return{type:"object",additionalProperties:!0,...e?{description:e}:{}}}function eC(e){return{...e,required:!0}}function eU(e){return tm(eq(e),te)}function eB(e){return tm({type:"number",...e?{description:e}:{}},tr)}function eH(e,t={}){var r,n;return tm((r=e,n=t,{...eG(r),...void 0===n.min?{}:{minimum:n.min},...void 0===n.max?{}:{maximum:n.max}}),(e,r)=>tn(e,r,t))}function eK(e){return tm(eT(e),ti)}function eJ(e,t){return tm({type:"string",enum:e,...t?{description:t}:{}},(t,r)=>ta(t,r,e))}function eW(e){return tm(eV(e),th)}function eY(e){return tm({type:"array",items:{type:"string"},...e?{description:e}:{}},tg)}function eZ(e){return tm(e,(e,t)=>e[t])}function eQ(e,t){return tm(e,t)}function eX(){return tm({oneOf:[...tv(),{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=tb(e,t),n=to(r,"kind",e$);switch(n){case"ref":return{kind:n,ref:e7(r,"ref"),label:te(r,"label")};case"selector":return{kind:n,selector:e7(r,"selector")};case"point":return{kind:n,x:tt(r,"x"),y:tt(r,"y")}}}(e,t))}function e0(){return tm({oneOf:tv(),description:"UI element target by snapshot ref or selector expression."},(e,t)=>{let r,n;return void 0===e[t]?void 0:"ref"===(n=to(r=tb(e,t),"kind",["ref","selector"]))?{kind:n,ref:e7(r,"ref"),label:te(r,"label")}:{kind:n,selector:e7(r,"selector")}})}function e1(e){return tm({type:"object",description:e,properties:{x:{type:"number"},y:{type:"number"}},required:["x","y"],additionalProperties:!1},(e,t)=>void 0===e[t]?void 0:e5(e,t))}function e2(){return{depth:eH("Snapshot traversal depth.",{min:0}),scope:eU("Snapshot scope selector used before resolution."),raw:eK("Use raw snapshot data during selector resolution.")}}function e3(){return{count:eH("Number of press/click repetitions.",{min:1}),intervalMs:eH("Delay between repeated press/click actions.",{min:0}),holdMs:eH("Hold duration for each action.",{min:0}),jitterPx:eH("Randomization radius in pixels.",{min:0}),doubleTap:eK("Request a double-tap action.")}}function e8(e){return function(e,t=[]){return{type:"object",properties:{session:{type:"string",description:"Agent-device session name."},platform:{type:"string",enum:eP,description:"Platform selector used to resolve a device."},deviceTarget:{type:"string",enum:eO,description:"Device target form. Maps to the CLI --target flag."},target:{type:"string",enum:eO,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 e4(e,t){let r=e6(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=e9(r,{readTargetAlias:!Object.hasOwn(t,"target")});return tf({...i,...ts(i),...n})}function e6(e){if(null==e)return{};if(!e||"object"!=typeof e||Array.isArray(e))throw Error("Expected object arguments.");return e}function e9(e,t={}){return{session:te(e,"session"),platform:ta(e,"platform",eP),deviceTarget:function(e,t){let r=ta(e,"deviceTarget",eO);if(!1===t.readTargetAlias||void 0===e.target)return r;let n=ta(e,"target",eO);if(void 0!==r&&n!==r)throw Error("Expected target alias to match deviceTarget when both are set.");return r??n}(e,t),device:te(e,"device"),udid:te(e,"udid"),serial:te(e,"serial"),iosSimulatorDeviceSet:te(e,"iosSimulatorDeviceSet"),androidDeviceAllowlist:te(e,"androidDeviceAllowlist"),daemonBaseUrl:te(e,"daemonBaseUrl"),daemonAuthToken:te(e,"daemonAuthToken"),tenant:te(e,"tenant"),runId:te(e,"runId"),leaseId:te(e,"leaseId"),cwd:te(e,"cwd"),debug:ti(e,"debug")}}function e5(e,t){let r=tb(e,t);return{x:tt(r,"x"),y:tt(r,"y")}}function e7(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 te(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 tt(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 tr(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 tn(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 ti(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 to(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 ta(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 ts(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 tl(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 tu(e){switch(e.kind){case"ref":return{ref:e.ref,label:e.label};case"selector":return{selector:e.selector}}}function tc(e){return{count:e.count,intervalMs:e.intervalMs,holdMs:e.holdMs,jitterPx:e.jitterPx,doubleTap:e.doubleTap}}function td(e){return{depth:e.depth,scope:e.scope,raw:e.raw}}function tp(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 tf(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>void 0!==e))}function tm(e,t){return{schema:e,required:!1,read:t}}function th(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 tg(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 tv(){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 tb(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 ty(e,t){return r=>tw(e,t?t(r):[],r)}function tw(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 tS(e){return tf({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 tI(e){return{platform:e.platform,target:e.target,device:e.device,udid:e.udid,serial:e.serial,iosSimulatorDeviceSet:e.iosSimulatorDeviceSet,androidDeviceAllowlist:e.androidDeviceAllowlist}}function tA(e){return tf({depth:e.snapshotDepth,scope:e.snapshotScope,raw:e.snapshotRaw})}function tx(e){return{depth:e.snapshotDepth,scope:e.snapshotScope,raw:e.snapshotRaw}}function tN(e){return tf({count:e.count,intervalMs:e.intervalMs,holdMs:e.holdMs,jitterPx:e.jitterPx,doubleTap:e.doubleTap})}function tk(e){return"ref"in e&&void 0!==e.ref?tf({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 tD(e){let t=tR(e);if("string"==typeof t.ref)return[t.ref,...t_(t.label)];if("string"==typeof t.selector)return[t.selector];if("point"===t.kind||void 0!==t.x||void 0!==t.y)return[String(tM(t.x,"x")),String(tM(t.y,"y"))];throw new a("INVALID_ARGS","interaction requires @ref, selector, or point target")}function tR(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 tM(e,t){if("number"!=typeof e||!Number.isFinite(e))throw new a("INVALID_ARGS",`point target requires numeric ${t}.`);return e}function t_(e){return"string"==typeof e&&e.length>0?[e]:[]}function tE(e){return e.join(" ").trim()||void 0}function tL(...e){return new Set(e)}function tj(e,t){return void 0!==e&&t.has(e)}function tF(e){return void 0!==e&&""!==e.trim()&&Number.isFinite(Number(e))}function tz(e){return void 0===e?void 0:Number(e)}function tP(e){return void 0===e?[]:[e]}function tO(e){return void 0===e?[]:[String(e)]}function t$(e,t){if(void 0===e||""===e)throw new a("INVALID_ARGS",t);return e}function tq(e,t){if("string"!=typeof e||0===e.length)throw new a("INVALID_ARGS",t);return e}let tG={devices:(e,t)=>tS(t),apps:(e,t)=>({...tS(t),appsFilter:u(t.appsFilter)}),session:(e,t)=>({...tS(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)=>({...tS(t),headless:t.headless}),open:(e,t)=>({...tS(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)=>({...tS(t),app:e[0],shutdown:t.shutdown,saveScript:t.saveScript}),install:tV,reinstall:tV,"install-from-source":(e,t)=>({...tS(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}=eF(e.slice(0,r),t);return ej(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)=>({...tS(t),app:t$(e[0],"push requires bundleOrPackage"),payload:t$(e[1],"push requires payloadOrJson")}),"trigger-app-event":(e,t)=>({...tS(t),event:t$(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})},tT={devices:ty(x.devices),boot:ty(x.boot),apps:ty(x.apps),open:ty(x.open,function(e){return e.app?e.url?[e.app,e.url]:[e.app]:[]}),close:ty(x.close,e=>tP(e.app)),install:ty(x.install,e=>tC(e.app,e.appPath)),reinstall:ty(x.reinstall,e=>tC(e.app,e.appPath)),"install-from-source":e=>tw(N.installSource,[],{...e,installSource:e.source,retainMaterializedPaths:e.retainPaths,materializedPathRetentionMs:e.retentionMs}),push:ty(x.push,e=>{var t;return[(t=e).app,"string"==typeof t.payload?t.payload:JSON.stringify(t.payload)]}),"trigger-app-event":ty(x.triggerAppEvent,e=>{var t;return[(t=e).event,...t.payload?[JSON.stringify(t.payload)]:[]]})};function tV(e,t,r="install"){return{...tS(t),app:t$(e[0],`${r} requires app`),appPath:t$(e[1],`${r} requires path`)}}function tC(e,t){return[tq(e,"missing first positional"),tq(t,"missing second positional")]}function tU(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}function tB(e,t){if(void 0===e||""===e.trim())throw new a("INVALID_ARGS",`settings location set requires ${t}`);return tK(Number(e),t)}function tH(e){return{latitude:tK(e?.latitude,"latitude"),longitude:tK(e?.longitude,"longitude")}}function tK(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 tJ={snapshot:(e,t)=>({...tS(t),interactiveOnly:t.snapshotInteractiveOnly,compact:t.snapshotCompact,depth:t.snapshotDepth,scope:t.snapshotScope,raw:t.snapshotRaw,forceFull:t.snapshotForceFull}),screenshot:(e,t)=>({...tS(t),path:e[0]??t.out,...P(t)}),diff:(e,t)=>{if("snapshot"!==e[0])throw new a("INVALID_ARGS","Only diff snapshot is available through this parser.");return{...tS(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=tY(e);if(!r)throw new a("INVALID_ARGS","wait requires <ms>, text <text>, @ref, or <selector> [timeoutMs].");let n={...tI(t),...tx(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,...tZ(r.timeoutMs)}}return"ref"===r.kind?{...n,ref:r.rawRef,...tZ(r.timeoutMs)}:{...n,selector:r.selectorExpression,...tZ(r.timeoutMs)}})(e,t),alert:(e,t)=>({...tS(t),...function(e){if(e.length>2)throw new a("INVALID_ARGS","alert accepts at most action and timeout arguments.");return tf({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=tI(t),n=e[0],i=e[1];if(tj(n,tQ)&&tj(i,tX))return{...r,setting:n,state:i};if("location"===n&&"set"===i)return{...r,setting:n,state:i,latitude:tB(e[2],"latitude"),longitude:tB(e[3],"longitude")};if("appearance"===n&&tj(i,t0)||tj(n,t1)&&tj(i,t2)||"fingerprint"===n&&tj(i,t3))return{...r,setting:n,state:i};if("permission"===n&&tj(i,t8))return{...r,setting:n,state:i,permission:function(e){if(tj(e,t4))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)},tW={snapshot:ty(x.snapshot),screenshot:e=>tw(x.screenshot,tP(e.path),{...e,...O(e)}),diff:ty(x.diff,e=>[tq(e.kind,"diff requires kind")]),wait:ty(x.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=tO(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:ty(x.alert,e=>{var t;return[(t=e).action??"get",...tO(t.timeoutMs)]}),settings:ty(x.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,...tP(t.mode)]:[t.setting,t.state]})};function tY(e){let t=e[0];if(void 0===t)return null;let r=tU(t);if(null!==r)return{kind:"sleep",durationMs:r};let n=tU(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 tZ(e){return null===e?{}:{timeoutMs:e}}let tQ=tL("wifi","airplane","location","animations"),tX=tL("on","off"),t0=tL("light","dark","toggle"),t1=tL("faceid","touchid"),t2=tL("match","nonmatch","enroll","unenroll"),t3=tL("match","nonmatch"),t8=tL("grant","deny","reset"),t4=tL("camera","microphone","photos","contacts","contacts-limited","notifications","calendar","location","location-always","media-library","motion","reminders","siri","accessibility","screen-recording","input-monitoring"),t6={gesture:function(e,t){let r=e[0],n=e.slice(1),i=tS(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:tz(n[4])};case"fling":return{...i,kind:r,direction:n[0],origin:{x:Number(n[1]),y:Number(n[2])},distance:tz(n[3]),durationMs:tz(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:tz(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:tz(n[6])};default:throw new a("INVALID_ARGS","gesture requires pan, fling, pinch, rotate, or transform")}}},t9={gesture:ty(x.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),...tO(e.durationMs)];case"fling":return["fling",tq(e.direction,"gesture fling requires direction"),String(e.origin?.x),String(e.origin?.y),...tO(e.distance),...tO(e.durationMs)];case"pinch":return["pinch",String(e.scale),...tO(e.origin?.x),...tO(e.origin?.y)];case"rotate":return["rotate",String(e.degrees),...tO(e.origin?.x),...tO(e.origin?.y),...tO(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),...tO(e.durationMs)];default:throw new a("INVALID_ARGS","gesture requires pan, fling, pinch, rotate, or transform")}}),"gesture-pan":ty(x.gesture,function(e){return["pan",String(e.x),String(e.y),String(e.dx),String(e.dy),...tO(e.durationMs)]}),"gesture-fling":ty(x.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),...tO(r),...tO(t.durationMs)]}),"gesture-pinch":ty(x.gesture,function(e){return["pinch",String(e.scale),...tO(e.x),...tO(e.y)]}),"gesture-rotate":ty(x.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,...tO(e.velocity)]})(e)),"gesture-transform":ty(x.gesture,function(e){return["transform",String(e.x),String(e.y),String(e.dx),String(e.dy),String(e.scale),String(e.degrees),...tO(e.durationMs)]})},t5={click:(e,t)=>({...tS(t),...tA(t),...tN(t),target:tk(re(e)),button:t.clickButton}),press:(e,t)=>({...tS(t),...tA(t),...tN(t),target:tk(re(e))}),longpress:(e,t)=>{let r,n={...re((r=function(e){if(tF(e[0])&&tF(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&&tF(t)?{target:e.slice(0,-1),durationMs:Number(t)}:{target:e}}(e)).target),...void 0!==r.durationMs?{durationMs:r.durationMs}:{}};return{...tS(t),...tA(t),target:tk(n),durationMs:n.durationMs}},swipe:(e,t)=>({...tS(t),from:{x:Number(e[0]),y:Number(e[1])},to:{x:Number(e[2]),y:Number(e[3])},durationMs:tz(e[4]),count:t.count,pauseMs:t.pauseMs,pattern:t.pattern}),focus:(e,t)=>({...tS(t),x:Number(e[0]),y:Number(e[1])}),type:(e,t)=>({...tS(t),text:e.join(" "),delayMs:t.delayMs}),fill:(e,t)=>{let r=rt(e);return{...tS(t),...tA(t),target:tk(r.target),text:r.text,delayMs:t.delayMs}},scroll:(e,t)=>({...tS(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:tz(e[1]),pixels:t.pixels}),get:(e,t)=>({...tS(t),...tA(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:tk(function(e){if(e[0]?.startsWith("@"))return{ref:e[0],label:tE(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)))})},t7={click:e=>tw(x.click,tD(e),{...e,clickButton:e.button}),press:ty(x.press,e=>tD(e)),longpress:ty(x.longPress,e=>{var t;return[...tD(t=e),...tO(t.durationMs)]}),swipe:ty(x.swipe,function(e){return[String(e.from?.x),String(e.from?.y),String(e.to?.x),String(e.to?.y),...tO(e.durationMs)]}),focus:ty(x.focus,e=>[String(e.x),String(e.y)]),type:ty(x.type,e=>[e.text]),fill:ty(x.fill,e=>{var t;return[...tD(t=e),t.text]}),scroll:ty(x.scroll,e=>[tq(e.direction,"scroll requires direction"),...tO(e.amount)]),get:ty(x.get,e=>[tq(e.format,"get requires format"),...function(e){let t=tR(e);if("string"==typeof t.ref)return[t.ref,...t_(t.label)];if("string"==typeof t.selector)return[t.selector];throw new a("INVALID_ARGS","element command requires @ref or selector target")}(e)])};function re(e){if(e[0]?.startsWith("@")){let t=tE(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 rt(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?tE(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 rr={perf:(e,t)=>tS(t),logs:(e,t)=>({...tS(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)=>({...tS(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:tz(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)=>({...tS(t),action:ro(e[0],"record"),path:e[1],fps:t.fps,quality:t.quality,hideTouches:t.hideTouches}),trace:(e,t)=>({...tS(t),action:ro(e[0],"trace"),path:e[1]})},rn={perf:ty(x.perf),logs:ty(x.logs,e=>{var t;return[(t=e).action??"path",...tP(t.message)]}),network:e=>{var t;return tw(x.network,[...(t=e).action?[t.action]:[],...tO(t.limit)],{...e,networkInclude:e.include})},record:ty(x.record,e=>ri(e)),trace:ty(x.trace,e=>ri(e))};function ri(e){return[e.action,...tP(e.path)]}function ro(e,t){if("start"===e||"stop"===e)return e;throw new a("INVALID_ARGS",`${t} requires start|stop`)}let ra={replay:(e,t)=>({...tS(t),path:t$(e[0],"replay requires path"),update:t.replayUpdate,backend:t.replayMaestro?"maestro":void 0,env:t.replayEnv}),test:(e,t)=>({...tS(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 rs(e){return e.backend??(!0===e.maestro?"maestro":void 0)}function rl(e){let t={};for(let[r,n]of Object.entries(e))"string"==typeof n&&r.startsWith("AD_VAR_")&&(t[r]=n);return t}let ru={find:(e,t)=>(function(e,t){var r;let n={...{depth:(r=t).snapshotDepth,raw:r.snapshotRaw},...tI(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:rd(s)};if("get"===u){let t=e[l+1];if("text"===t)return{...n,locator:i,query:rd(s),action:"getText"};if("attrs"===t)return{...n,locator:i,query:rd(s),action:"getAttrs"};throw new a("INVALID_ARGS","find get only supports text or attrs")}if("wait"===u)return{...n,locator:i,query:rd(s),action:"wait",timeoutMs:tz(e[l+1])};if("fill"===u||"type"===u)return{...n,locator:i,query:rd(s),action:u,value:e.slice(l+1).join(" ")};if("click"===u||"focus"===u||"exists"===u)return{...n,locator:i,query:rd(s),action:u};throw new a("INVALID_ARGS",`Unsupported find action: ${u}`)})(e,t),is:(e,t)=>(function(e,t){let r={...tx(t),...tI(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)},rc={is:ty(x.is,e=>{var t;return[(t=e).predicate,t.selector,..."text"===t.predicate?[t.value]:[]]}),find:e=>tw(x.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",...tO(e.timeoutMs)];case"fill":case"type":return[...t,e.action,e.value]}}(e),{...e,findFirst:e.first,findLast:e.last})};function rd(e){if(void 0===e||""===e)throw new a("INVALID_ARGS","find requires query");return e}function rp(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 rf={appstate:(e,t)=>tS(t),home:(e,t)=>tS(t),"app-switcher":(e,t)=>tS(t),back:(e,t)=>({...tS(t),mode:t.backMode}),rotate:(e,t)=>({...tS(t),orientation:rp(e[0])}),keyboard:(e,t)=>({...tS(t),...function(e){if(e.length>1)throw new a("INVALID_ARGS","keyboard accepts at most one action argument.");return tf({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)=>({...tS(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)=>({...tS(t),action:function(e){if("dismiss-overlay"===e)return e;throw new a("INVALID_ARGS","react-native supports only: dismiss-overlay")}(e[0])})},rm={appstate:ty(x.appState),back:e=>{var t;return tw(x.back,[],{...e,backMode:"in-app"===(t=e.mode)||"system"===t?t:void 0})},home:ty(x.home),rotate:ty(x.rotate,e=>[tq(e.orientation,"rotate requires orientation")]),"app-switcher":ty(x.appSwitcher),keyboard:ty(x.keyboard,e=>tP(e.action)),clipboard:ty(x.clipboard,e=>{var t;return"read"===(t=e).action?["read"]:["write",t.text]}),"react-native":ty(x.reactNative,e=>[tq(e.action,"react-native requires action")])},rh={...tT,...tW,...t7,...t9,...rc,...rn,replay:e=>tw(x.replay,[tq(e.path,"replay requires path")],{...e,replayUpdate:e.update,replayBackend:rs(e),replayEnv:e.env,replayShellEnv:rl(process.env)}),test:e=>tw(x.test,e.paths??[],{...e,replayUpdate:e.update,replayBackend:rs(e),replayEnv:e.env,replayShellEnv:rl(process.env)}),...rm,batch:e=>tw(x.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(rb.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=ry(o,s)).command,positionals:n.positionals,flags:eM(n.options),runtime:n.options.runtime},runtime:l??u.runtime}})}(e.steps),batchOnError:e.onError,batchMaxSteps:e.maxSteps})},rg=new Set(["replay","batch","gesture-pan","gesture-fling","gesture-pinch","gesture-rotate","gesture-transform"]),rv=Object.keys(rh).filter(e=>!rg.has(e)),rb=new Set(rv);function ry(e,t){return rh[e](t)}export{M as DAEMON_COMMAND_GROUPS,D as GESTURE_SUBCOMMAND_ERROR,N as INTERNAL_COMMANDS,x as PUBLIC_COMMANDS,F as SCREENSHOT_ACTION_FLAG_KEYS,j as SCREENSHOT_COMMAND_FLAG_KEYS,z as SCREENSHOT_SPECIFIC_FLAG_DEFINITIONS,tG as appCliReaders,$ as appendScreenshotScriptFlags,tp as assertAllowedKeys,rv as batchCommandNames,eK as booleanField,eT as booleanSchema,eM as buildFlags,e_ as buildMeta,tJ as captureCliReaders,e5 as command_input_readPoint,tS as commonInputFromFlags,ts as commonToClientOptions,S as computeDaemonCodeSignature,eQ as customField,e0 as elementTargetField,eJ as enumField,e8 as fieldsInputSchema,d as findProjectRoot,t6 as gestureCliReaders,eH as integerField,eG as integerSchema,t5 as interactionCliReaders,eX as interactionTargetField,eZ as jsonSchemaField,E as listCliCommandNames,L as listMcpExposedCommandNames,eW as looseObjectField,eV as looseObjectSchema,ev as normalizeDeployResult,ew as normalizeDevice,eb as normalizeInstallFromSourceResult,ey as normalizeMaterializationReleaseResult,eN as normalizeOpenDevice,ex as normalizeRuntimeHints,eS as normalizeSession,ek as normalizeStartupSample,g as normalizeTenantId,eB as numberField,rr as observabilityCliReaders,ta as optionalEnum,tn as optionalInteger,rp as parseDeviceRotation,eL as parseInstallSourceConfig,tU as parseTimeout,tY as parseWaitPositionals,e1 as pointField,ry as prepareDaemonCommandRequest,C as readCommandMessage,e9 as readCommonInput,e4 as readFieldInput,rt as readFillTargetFromPositionals,e6 as readInputRecord,re as readInteractionTargetFromPositionals,tB as readLocationCoordinate,ei as readOptionalString,en as readRequiredString,eR as readScreenshotOverlayRefs,q as readScreenshotScriptFlag,eD as readSnapshotNodes,c as readVersion,e3 as repeatedFields,ra as replayCliReaders,tH as requireLocationCoordinates,to as requiredEnum,eC as requiredField,tt as requiredNumber,w as resolveDaemonCodeSignature,p as resolveDaemonPaths,f as resolveDaemonServerMode,m as resolveDaemonTransportPreference,W as resolveDeployResultTarget,Z as resolveInstallFromSourceResultTarget,h as resolveSessionIsolationMode,eE as resolveSessionName,O as screenshotFlagsFromOptions,P as screenshotOptionsFromFlags,ru as selectorCliReaders,e2 as selectorSnapshotFields,ee as serializeCloseResult,Y as serializeDeployResult,J as serializeDevice,Q as serializeInstallFromSourceResult,X as serializeOpenResult,K as serializeSessionListEntry,et as serializeSnapshotResult,eg as splitNonEmptyTrimmedLines,eY as stringArrayField,eU as stringField,eq as stringSchema,T as successText,rf as systemCliReaders,tu as toClientElementTarget,tl as toClientInteractionTarget,tc as toRepeatedOptions,td as toSelectorSnapshotOptions,V as withSuccessText};
package/dist/src/3622.js DELETED
@@ -1,3 +0,0 @@
1
- import{AsyncLocalStorage as e}from"node:async_hooks";import t from"node:crypto";import n from"node:fs";import r from"node:os";import o from"node:path";import{redactDiagnosticData as i,AppError as s}from"./9152.js";let a=new e;function d(){return t.randomBytes(8).toString("hex")}async function c(e,n){let r={...e,diagnosticId:`${Date.now().toString(36)}-${t.randomBytes(4).toString("hex")}`,events:[]};return await a.run(r,n)}function l(){let e=a.getStore();return e?{diagnosticId:e.diagnosticId,requestId:e.requestId,session:e.session,command:e.command,debug:e.debug}:{}}function u(e){let t=a.getStore();if(!t)return;let r={ts:new Date().toISOString(),level:e.level??"info",phase:e.phase,session:t.session,requestId:t.requestId,command:t.command,durationMs:e.durationMs,data:e.data?i(e.data):void 0};if(t.events.push(r),!t.debug)return;let o=`[agent-device][diag] ${JSON.stringify(r)}
2
- `;try{t.logPath&&n.appendFile(t.logPath,o,()=>{}),t.traceLogPath&&n.appendFile(t.traceLogPath,o,()=>{}),t.logPath||t.traceLogPath||process.stderr.write(o)}catch{}}async function g(e,t,n){let r=Date.now();try{let o=await t();return u({level:"info",phase:e,durationMs:Date.now()-r,data:n}),o}catch(t){throw u({level:"error",phase:e,durationMs:Date.now()-r,data:{...n??{},error:t instanceof Error?t.message:String(t)}}),t}}function m(e={}){let t=a.getStore();if(!t||!e.force&&!t.debug||0===t.events.length)return null;try{let e=(t.session??"default").replace(/[^a-zA-Z0-9._-]/g,"_"),s=new Date().toISOString().slice(0,10),a=o.join(r.homedir(),".agent-device","logs",e,s);n.mkdirSync(a,{recursive:!0});let d=new Date().toISOString().replace(/[:.]/g,"-"),c=o.join(a,`${d}-${t.diagnosticId}.ndjson`),l=t.events.map(e=>JSON.stringify(i(e)));return n.writeFileSync(c,`${l.join("\n")}
3
- `),t.events=[],c}catch{return null}}let p="user-installed";function f(e){return e??p}function h(e){if(void 0===e)throw new s("INVALID_ARGS","appsFilter must be resolved before executing the apps command");return e}export{p as DEFAULT_APPS_FILTER,h as assertResolvedAppsFilter,d as createRequestId,u as emitDiagnostic,m as flushDiagnosticsToSessionFile,l as getDiagnosticsMeta,f as resolveAppsFilter,g as withDiagnosticTimer,c as withDiagnosticsScope};
@@ -1,14 +0,0 @@
1
- {
2
- "images" : [
3
- {
4
- "filename" : "logo-tinted.jpg",
5
- "idiom" : "universal",
6
- "platform" : "ios",
7
- "size" : "1024x1024"
8
- }
9
- ],
10
- "info" : {
11
- "author" : "xcode",
12
- "version" : 1
13
- }
14
- }
@@ -1,6 +0,0 @@
1
- {
2
- "info" : {
3
- "author" : "xcode",
4
- "version" : 1
5
- }
6
- }