agent-device 0.16.10 → 0.16.11

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 (44) hide show
  1. package/android-multitouch-helper/dist/{agent-device-android-multitouch-helper-0.16.10.apk → agent-device-android-multitouch-helper-0.16.11.apk} +0 -0
  2. package/android-multitouch-helper/dist/agent-device-android-multitouch-helper-0.16.11.apk.sha256 +1 -0
  3. package/android-multitouch-helper/dist/{agent-device-android-multitouch-helper-0.16.10.manifest.json → agent-device-android-multitouch-helper-0.16.11.manifest.json} +4 -4
  4. package/android-snapshot-helper/README.md +6 -0
  5. package/android-snapshot-helper/dist/agent-device-android-snapshot-helper-0.16.11.apk +0 -0
  6. package/android-snapshot-helper/dist/agent-device-android-snapshot-helper-0.16.11.apk.sha256 +1 -0
  7. package/android-snapshot-helper/dist/{agent-device-android-snapshot-helper-0.16.10.manifest.json → agent-device-android-snapshot-helper-0.16.11.manifest.json} +6 -6
  8. package/dist/src/1352.js +1 -1
  9. package/dist/src/221.js +6 -6
  10. package/dist/src/2415.js +27 -27
  11. package/dist/src/2805.js +1 -1
  12. package/dist/src/4778.js +1 -0
  13. package/dist/src/5792.js +1 -1
  14. package/dist/src/6085.js +1 -1
  15. package/dist/src/6232.js +1 -1
  16. package/dist/src/8699.js +1 -1
  17. package/dist/src/9238.js +4 -0
  18. package/dist/src/9533.js +1 -1
  19. package/dist/src/9542.js +3 -3
  20. package/dist/src/apple.js +1 -1
  21. package/dist/src/args.js +54 -25
  22. package/dist/src/batch.d.ts +1 -0
  23. package/dist/src/cli.js +19 -19
  24. package/dist/src/command-metadata.js +1 -1
  25. package/dist/src/command-surface.js +1 -1
  26. package/dist/src/contracts.d.ts +1 -0
  27. package/dist/src/contracts.js +1 -1
  28. package/dist/src/generic.js +10 -10
  29. package/dist/src/index.d.ts +9 -0
  30. package/dist/src/record-trace.js +3 -3
  31. package/dist/src/session.js +9 -9
  32. package/ios-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.h +7 -0
  33. package/ios-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.m +109 -0
  34. package/ios-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +123 -32
  35. package/ios-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Interaction.swift +36 -0
  36. package/ios-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +11 -1
  37. package/package.json +1 -1
  38. package/server.json +2 -2
  39. package/skills/dogfood/SKILL.md +1 -1
  40. package/android-multitouch-helper/dist/agent-device-android-multitouch-helper-0.16.10.apk.sha256 +0 -1
  41. package/android-snapshot-helper/dist/agent-device-android-snapshot-helper-0.16.10.apk +0 -0
  42. package/android-snapshot-helper/dist/agent-device-android-snapshot-helper-0.16.10.apk.sha256 +0 -1
  43. package/dist/src/2842.js +0 -1
  44. package/dist/src/8114.js +0 -4
package/dist/src/2805.js CHANGED
@@ -1 +1 @@
1
- let e={devices:"List available devices.",boot:"Boot or prepare a selected device without using CLI positional arguments.",apps:"List installed apps.",session:"List active sessions.",open:"Open an app, deep link, URL, or platform surface.",close:"Close an app or end the active session.",install:"Install an app binary.",reinstall:"Reinstall an app binary.","install-from-source":"Install an app from a structured source.",push:"Deliver a push payload.","trigger-app-event":"Trigger an app-defined event.",snapshot:"Capture an accessibility snapshot.",screenshot:"Capture a screenshot.",diff:"Diff accessibility snapshots.",wait:"Wait for duration, text, ref, or selector.",alert:"Inspect or handle platform alerts.",appstate:"Show foreground app or activity.",back:"Navigate back.",home:"Go to the home screen.",rotate:"Rotate device orientation.","app-switcher":"Open the app switcher.",keyboard:"Inspect or dismiss the keyboard.",clipboard:"Read or write clipboard text.","react-native":"Run supported React Native app automation helpers.",replay:"Replay a recorded session.",test:"Run one or more replay scripts.",perf:"Show session performance metrics.",logs:"Manage session app logs.",network:"Show recent HTTP traffic.",record:"Start or stop screen recording.",trace:"Start or stop trace capture.",settings:"Change OS settings and app permissions.",metro:"Prepare Metro runtime or reload React Native apps.",click:"Click or tap a semantic UI target by ref, selector, or point.",press:"Press a semantic UI target by ref, selector, or point.",fill:"Fill text into a semantic UI target by ref, selector, or point.",longpress:"Long press by ref, selector, or point.",swipe:"Swipe between two points.",focus:"Focus input at coordinates.",type:"Type text in the focused field.",scroll:"Scroll in a direction or to an edge.",get:"Get element text or attributes.",is:"Assert UI state.",find:"Find an element and optionally act on it.",gesture:"Run a structured gesture.",batch:"Run multiple structured command steps in one daemon request."};function t(t){let r=e[t];if(!r)throw Error(`Missing command description for ${t}`);return r}function r(){return Object.entries(e).map(([e,t])=>({name:e,description:t}))}export{r as listCommandDescriptionMetadata,t as requireCommandDescription};
1
+ let e={devices:"List available devices.",boot:"Boot or prepare a selected device without using CLI positional arguments.",apps:"List installed apps.",session:"List active sessions.",open:"Open an app, deep link, URL, or platform surface.",prepare:"Prepare platform helper infrastructure.",close:"Close an app or end the active session.",install:"Install an app binary.",reinstall:"Reinstall an app binary.","install-from-source":"Install an app from a structured source.",push:"Deliver a push payload.","trigger-app-event":"Trigger an app-defined event.",snapshot:"Capture an accessibility snapshot.",screenshot:"Capture a screenshot.",diff:"Diff accessibility snapshots.",wait:"Wait for duration, text, ref, or selector.",alert:"Inspect or handle platform alerts.",appstate:"Show foreground app or activity.",back:"Navigate back.",home:"Go to the home screen.",rotate:"Rotate device orientation.","app-switcher":"Open the app switcher.",keyboard:"Inspect or dismiss the keyboard.",clipboard:"Read or write clipboard text.","react-native":"Run supported React Native app automation helpers.",replay:"Replay a recorded session.",test:"Run one or more replay scripts.",perf:"Show session performance metrics.",logs:"Manage session app logs.",network:"Show recent HTTP traffic.",record:"Start or stop screen recording.",trace:"Start or stop trace capture.",settings:"Change OS settings and app permissions.",metro:"Prepare Metro runtime or reload React Native apps.",click:"Click or tap a semantic UI target by ref, selector, or point.",press:"Press a semantic UI target by ref, selector, or point.",fill:"Fill text into a semantic UI target by ref, selector, or point.",longpress:"Long press by ref, selector, or point.",swipe:"Swipe between two points.",focus:"Focus input at coordinates.",type:"Type text in the focused field.",scroll:"Scroll in a direction or to an edge.",get:"Get element text or attributes.",is:"Assert UI state.",find:"Find an element and optionally act on it.",gesture:"Run a structured gesture.",batch:"Run multiple structured command steps in one daemon request."};function t(t){let r=e[t];if(!r)throw Error(`Missing command description for ${t}`);return r}function r(){return Object.entries(e).map(([e,t])=>({name:e,description:t}))}export{r as listCommandDescriptionMetadata,t as requireCommandDescription};
@@ -0,0 +1 @@
1
+ function t(t){let e=`${t??""}`.toLowerCase();return e.includes("scroll")||e.includes("recyclerview")||e.includes("listview")||e.includes("gridview")||e.includes("collectionview")||"table"===e}function e(e){return!!t(e.type)||`${e.role??""} ${e.subrole??""}`.toLowerCase().includes("scroll")}function i(t){let e=1/0,i=1/0,n=-1/0,r=-1/0;for(let h of t)e=Math.min(e,h.x),i=Math.min(i,h.y),n=Math.max(n,h.x+h.width),r=Math.max(r,h.y+h.height);return{x:e,y:i,width:n-e,height:r-i}}function n(t,e){return{x:t.x-e,y:t.y-e,width:t.width+2*e,height:t.height+2*e}}function r(t,e){let i=Math.max(t.x,e.x),n=Math.max(t.y,e.y),r=Math.min(t.x+t.width,e.x+e.width),h=Math.min(t.y+t.height,e.y+e.height);return r<=i||h<=n?0:(r-i)*(h-n)}function h(t){return{x:t.x+t.width/2,y:t.y+t.height/2}}function c(t,e){return(t.x-e.x)**2+(t.y-e.y)**2}function l(t,e,i){return Math.min(Math.max(t,e),i)}export{l as clamp,n as expandRect,r as intersectArea,e as isScrollableNodeLike,t as isScrollableType,h as rectCenter,c as squaredDistance,i as unionRects};
package/dist/src/5792.js CHANGED
@@ -1 +1 @@
1
- let e={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"},t={installSource:"install_source",leaseAllocate:"lease_allocate",leaseHeartbeat:"lease_heartbeat",leaseRelease:"lease_release",releaseMaterializedPaths:"release_materialized_paths",runtime:"runtime",sessionList:"session_list"},s={auth:"auth",connect:"connect",connection:"connection",disconnect:"disconnect",mcp:"mcp",metro:"metro",reactDevtools:"react-devtools",session:"session"},a="gesture requires one of: pan, fling, swipe, pinch, rotate, transform",r=[e.devices,e.boot,e.apps,e.open,e.close,e.install,e.reinstall,e.installFromSource,e.push,e.triggerAppEvent,e.snapshot,e.screenshot,e.diff,e.wait,e.alert,e.settings,e.click,e.press,e.longPress,e.swipe,e.focus,e.type,e.fill,e.scroll,e.get,e.gesture,e.is,e.find,e.perf,e.logs,e.network,e.record,e.trace,e.test,e.appState,e.back,e.home,e.rotate,e.appSwitcher,e.keyboard,e.clipboard,e.reactNative],o=l(s.auth,s.connect,s.connection,s.disconnect,s.mcp,s.reactDevtools);l(s.auth,s.connect,s.connection,s.disconnect,s.mcp,s.metro,s.reactDevtools,s.session,e.appState,e.batch,e.devices,e.gesture,e.replay,e.test,e.trace);let i={inventory:l(t.sessionList,e.devices,e.apps),state:l(e.boot,e.appState),observability:l(e.perf,e.logs,e.network),replay:l(e.replay,e.test),snapshot:l(e.snapshot,e.diff,e.wait,e.alert,e.settings),replayScopedAction:l(e.alert,e.back,e.click,e.clipboard,e.diff,e.fill,e.find,e.gesture,e.get,e.home,e.is,e.keyboard,e.longPress,"pinch",e.press,e.record,e.reactNative,e.rotate,e.screenshot,e.scroll,e.settings,e.snapshot,e.swipe,e.type,e.wait),androidBlockingDialogGuardedAction:l(e.back,e.click,e.fill,e.focus,e.gesture,e.home,e.keyboard,e.longPress,"fling","pan","pinch",e.press,e.rotate,"rotate-gesture",e.scroll,e.swipe,"transform-gesture",e.type),selectorValidationExempt:l(t.sessionList,e.devices,t.releaseMaterializedPaths),leaseAdmissionExempt:l(t.sessionList,e.devices,t.releaseMaterializedPaths,t.leaseAllocate,t.leaseHeartbeat,t.leaseRelease),leaseHandler:l(t.leaseAllocate,t.leaseHeartbeat,t.leaseRelease),sessionHandler:l(t.installSource,t.releaseMaterializedPaths,t.sessionList,e.appState,e.apps,e.batch,e.boot,e.clipboard,e.close,e.devices,e.install,e.keyboard,e.logs,e.network,e.open,e.perf,e.push,e.reinstall,e.replay,e.test,e.triggerAppEvent,t.runtime),reactNativeHandler:l(e.reactNative),recordTraceHandler:l(e.record,e.trace),findHandler:l(e.find),interactionHandler:l(e.click,e.fill,e.get,e.is,e.longPress,e.press,e.type)};function l(...e){return new Set(e)}function n(){return[...Object.values(e),...Object.values(s)].sort()}function c(t){return Object.values(e).includes(t)||t===s.metro||t===s.session}function p(){return n().filter(e=>!o.has(e))}export{r as BATCH_COMMAND_NAMES,i as DAEMON_COMMAND_GROUPS,a as GESTURE_SUBCOMMAND_ERROR,t as INTERNAL_COMMANDS,e as PUBLIC_COMMANDS,c as isClientBackedCliCommandName,n as listCliCommandNames,p as listMcpExposedCommandNames};
1
+ let e={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",prepare:"prepare",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"},t={installSource:"install_source",leaseAllocate:"lease_allocate",leaseHeartbeat:"lease_heartbeat",leaseRelease:"lease_release",releaseMaterializedPaths:"release_materialized_paths",runtime:"runtime",sessionList:"session_list"},s={auth:"auth",connect:"connect",connection:"connection",disconnect:"disconnect",mcp:"mcp",metro:"metro",reactDevtools:"react-devtools",session:"session"},a="gesture requires one of: pan, fling, swipe, pinch, rotate, transform",r=[e.devices,e.boot,e.apps,e.open,e.close,e.install,e.reinstall,e.installFromSource,e.push,e.triggerAppEvent,e.snapshot,e.screenshot,e.diff,e.wait,e.alert,e.settings,e.click,e.press,e.longPress,e.swipe,e.focus,e.type,e.fill,e.scroll,e.get,e.gesture,e.is,e.find,e.perf,e.logs,e.network,e.record,e.trace,e.test,e.appState,e.back,e.home,e.rotate,e.appSwitcher,e.keyboard,e.clipboard,e.reactNative],o=l(s.auth,s.connect,s.connection,s.disconnect,s.mcp,s.reactDevtools,e.prepare);l(s.auth,s.connect,s.connection,s.disconnect,s.mcp,s.metro,s.reactDevtools,s.session,e.appState,e.prepare,e.batch,e.devices,e.gesture,e.replay,e.test,e.trace);let i={inventory:l(t.sessionList,e.devices,e.apps),state:l(e.boot,e.appState),observability:l(e.perf,e.logs,e.network),replay:l(e.replay,e.test),snapshot:l(e.snapshot,e.diff,e.wait,e.alert,e.settings),replayScopedAction:l(e.alert,e.back,e.click,e.clipboard,e.diff,e.fill,e.find,e.gesture,e.get,e.home,e.is,e.keyboard,e.longPress,"pinch",e.press,e.record,e.reactNative,e.rotate,e.screenshot,e.scroll,e.settings,e.snapshot,e.swipe,e.type,e.wait),androidBlockingDialogGuardedAction:l(e.back,e.click,e.fill,e.focus,e.gesture,e.home,e.keyboard,e.longPress,"fling","pan","pinch",e.press,e.rotate,"rotate-gesture",e.scroll,e.swipe,"transform-gesture",e.type),selectorValidationExempt:l(t.sessionList,e.devices,t.releaseMaterializedPaths),leaseAdmissionExempt:l(t.sessionList,e.devices,t.releaseMaterializedPaths,t.leaseAllocate,t.leaseHeartbeat,t.leaseRelease),leaseHandler:l(t.leaseAllocate,t.leaseHeartbeat,t.leaseRelease),sessionHandler:l(t.installSource,t.releaseMaterializedPaths,t.sessionList,e.appState,e.apps,e.batch,e.boot,e.clipboard,e.close,e.devices,e.install,e.keyboard,e.logs,e.network,e.open,e.perf,e.prepare,e.push,e.reinstall,e.replay,e.test,e.triggerAppEvent,t.runtime),reactNativeHandler:l(e.reactNative),recordTraceHandler:l(e.record,e.trace),findHandler:l(e.find),interactionHandler:l(e.click,e.fill,e.get,e.is,e.longPress,e.press,e.type)};function l(...e){return new Set(e)}function n(){return[...Object.values(e),...Object.values(s)].sort()}function c(t){return Object.values(e).includes(t)||t===s.metro||t===s.session}function p(){return n().filter(e=>!o.has(e))}export{r as BATCH_COMMAND_NAMES,i as DAEMON_COMMAND_GROUPS,a as GESTURE_SUBCOMMAND_ERROR,t as INTERNAL_COMMANDS,e as PUBLIC_COMMANDS,c as isClientBackedCliCommandName,n as listCliCommandNames,p as listMcpExposedCommandNames};
package/dist/src/6085.js CHANGED
@@ -1 +1 @@
1
- import{splitSelectorFromArgs as t,tryParseSelectorChain as e}from"./940.js";import{AppError as r}from"./9152.js";import{compactRecord as i}from"./9404.js";import{PUBLIC_COMMANDS as n}from"./5792.js";import{readLocationCoordinate as o}from"./1998.js";import{screenshotOptionsFromFlags as s,screenshotFlagsFromOptions as a}from"./5310.js";function l(t,e){return r=>u(t,e?e(r):[],r)}function u(t,e,r){return{command:t,positionals:e,options:function(t){var e;let r="mobile"===(e=t.deviceTarget??t.target)||"tv"===e||"desktop"===e?e:void 0;if(void 0===r&&void 0===t.target)return t;let{target:i,...n}=t;return void 0===r?n:{...n,target:r}}(r)}}function c(t){return i({session:t.session,platform:t.platform,deviceTarget:t.target,device:t.device,udid:t.udid,serial:t.serial,iosSimulatorDeviceSet:t.iosSimulatorDeviceSet,androidDeviceAllowlist:t.androidDeviceAllowlist})}function f(t){return{platform:t.platform,target:t.target,device:t.device,udid:t.udid,serial:t.serial,iosSimulatorDeviceSet:t.iosSimulatorDeviceSet,androidDeviceAllowlist:t.androidDeviceAllowlist}}function d(t){return i({depth:t.snapshotDepth,scope:t.snapshotScope,raw:t.snapshotRaw})}function p(t){return{depth:t.snapshotDepth,scope:t.snapshotScope,raw:t.snapshotRaw}}function m(t){return i({count:t.count,intervalMs:t.intervalMs,holdMs:t.holdMs,jitterPx:t.jitterPx,doubleTap:t.doubleTap})}function h(t){return"ref"in t&&void 0!==t.ref?i({kind:"ref",ref:t.ref,label:t.label}):"selector"in t&&void 0!==t.selector?{kind:"selector",selector:t.selector}:{kind:"point",x:t.x,y:t.y}}function g(t){let e=S(t);if("string"==typeof e.ref)return[e.ref,...A(e.label)];if("string"==typeof e.selector)return[e.selector];if("point"===e.kind||void 0!==e.x||void 0!==e.y)return[String(v(e.x,"x")),String(v(e.y,"y"))];throw new r("INVALID_ARGS","interaction requires @ref, selector, or point target")}function w(t){let e=S(t);if("string"==typeof e.ref)return[e.ref,...A(e.label)];if("string"==typeof e.selector)return[e.selector];throw new r("INVALID_ARGS","element command requires @ref or selector target")}function S(t){if(!t||"object"!=typeof t||Array.isArray(t))throw new r("INVALID_ARGS","Expected target object.");let e=t.target;return e&&"object"==typeof e&&!Array.isArray(e)?e:t}function v(t,e){if("number"!=typeof t||!Number.isFinite(t))throw new r("INVALID_ARGS",`point target requires numeric ${e}.`);return t}function A(t){return"string"==typeof t&&t.length>0?[t]:[]}function _(t){if(t[0]?.startsWith("@"))return{ref:t[0],label:D(t.slice(1))};let e=t.join(" ").trim();if(!e)throw new r("INVALID_ARGS","get requires @ref or selector expression");return{selector:e}}function I(t){if("text"===t||"attrs"===t)return t;throw new r("INVALID_ARGS","get only supports text or attrs")}function N(e,i={}){let n=t(e,i);if(!n)throw new r("INVALID_ARGS","is requires a selector expression");return n}function x(t,e){try{let e=JSON.parse(t);if(e&&"object"==typeof e&&!Array.isArray(e))return e}catch{}throw new r("INVALID_ARGS",`${e} must be a JSON object`)}function D(t){return t.join(" ").trim()||void 0}function R(...t){return new Set(t)}function b(t){return new Set(t)}function y(t,e){return void 0!==t&&e.has(t)}function M(t){return void 0!==t&&""!==t.trim()&&Number.isFinite(Number(t))}function G(t){return void 0===t?void 0:Number(t)}function L(t){return void 0===t?[]:[t]}function F(t){return void 0===t?[]:[String(t)]}function V(t,e){if(void 0===t||""===t)throw new r("INVALID_ARGS",e);return t}function C(t,e){if("string"!=typeof t||0===t.length)throw new r("INVALID_ARGS",e);return t}function k(t){if(!t)return null;let e=Number(t);return Number.isFinite(e)?e:null}let j={snapshot:(t,e)=>({...c(e),interactiveOnly:e.snapshotInteractiveOnly,compact:e.snapshotCompact,depth:e.snapshotDepth,scope:e.snapshotScope,raw:e.snapshotRaw,forceFull:e.snapshotForceFull}),screenshot:(t,e)=>({...c(e),path:t[0]??e.out,...s(e)}),diff:(t,e)=>{if("snapshot"!==t[0])throw new r("INVALID_ARGS","Only diff snapshot is available through this parser.");return{...c(e),kind:"snapshot",out:e.out,interactiveOnly:e.snapshotInteractiveOnly,compact:e.snapshotCompact,depth:e.snapshotDepth,scope:e.snapshotScope,raw:e.snapshotRaw}},wait:(t,e)=>(function(t,e){let i=E(t);if(!i)throw new r("INVALID_ARGS","wait requires <ms>, text <text>, @ref, or <selector> [timeoutMs].");let n={...f(e),...p(e)};if("sleep"===i.kind)return{...n,durationMs:i.durationMs};if("text"===i.kind){if(!i.text)throw new r("INVALID_ARGS","wait requires text.");return{...n,text:i.text,...K(i.timeoutMs)}}return"ref"===i.kind?{...n,ref:i.rawRef,...K(i.timeoutMs)}:{...n,selector:i.selectorExpression,...K(i.timeoutMs)}})(t,e),alert:(t,e)=>({...c(e),...function(t){if(t.length>2)throw new r("INVALID_ARGS","alert accepts at most action and timeout arguments.");return i({action:function(t){let e=t?.toLowerCase();if(void 0===e||"get"===e||"accept"===e||"dismiss"===e||"wait"===e)return e;throw new r("INVALID_ARGS","alert action must be get, accept, dismiss, or wait.")}(t[0]),timeoutMs:function(t,e){if(void 0===t)return;let i=Number(t);if(Number.isFinite(i))return i;throw new r("INVALID_ARGS",`${e} must be a finite number.`)}(t[1],"alert timeout")})}(t)}),settings:(t,e)=>(function(t,e){let i=f(e),n=t[0],s=t[1];if(y(n,P)&&y(s,T))return{...i,setting:n,state:s};if("location"===n&&"set"===s)return{...i,setting:n,state:s,latitude:o(t[2],"latitude"),longitude:o(t[3],"longitude")};if("appearance"===n&&y(s,O)||y(n,H)&&y(s,U)||"fingerprint"===n&&y(s,W))return{...i,setting:n,state:s};if("permission"===n&&y(s,$))return{...i,setting:n,state:s,permission:function(t){if(y(t,J))return t;throw new r("INVALID_ARGS","settings permission requires a permission target.")}(t[2]),mode:function(t){if(void 0===t||"full"===t||"limited"===t)return t;throw new r("INVALID_ARGS","settings permission mode must be full or limited.")}(t[3])};if("clear-app-state"===n){let e="clear"===s?t[2]:s;return{...i,setting:n,state:"clear",app:e}}throw new r("INVALID_ARGS","Invalid settings arguments.")})(t,e)},q={snapshot:l(n.snapshot),screenshot:t=>u(n.screenshot,L(t.path),{...t,...a(t)}),diff:l(n.diff,t=>[C(t.kind,"diff requires kind")]),wait:l(n.wait,t=>(function(t){if(1!==[void 0!==t.durationMs?"durationMs":void 0,void 0!==t.text?"text":void 0,void 0!==t.ref?"ref":void 0,void 0!==t.selector?"selector":void 0].filter(Boolean).length)throw new r("INVALID_ARGS","wait command requires exactly one of durationMs, text, ref, or selector.");if(void 0!==t.durationMs)return[String(t.durationMs)];let i=F(t.timeoutMs);if(void 0!==t.text)return["text",t.text,...i];if(void 0!==t.ref)return[t.ref,...i];let n=t.selector;if(!e(n))throw new r("INVALID_ARGS",`Invalid wait selector: ${n}`);return[n,...i]})(t)),alert:l(n.alert,t=>{var e;return[(e=t).action??"get",...F(e.timeoutMs)]}),settings:l(n.settings,t=>{var e;return"clear-app-state"===(e=t).setting?[e.setting,...L(e.app)]:"location"===e.setting&&"set"===e.state?[e.setting,e.state,String(e.latitude),String(e.longitude)]:"permission"===e.setting?[e.setting,e.state,e.permission,...L(e.mode)]:[e.setting,e.state]})};function E(r){let i=r[0];if(void 0===i)return null;let n=k(i);if(null!==n)return{kind:"sleep",durationMs:n};let o=k(r[r.length-1]);if("text"===i)return{kind:"text",text:(null!==o?r.slice(1,-1).join(" "):r.slice(1).join(" ")).trim(),timeoutMs:o};if(i.startsWith("@"))return{kind:"ref",rawRef:i,timeoutMs:o};let s=t(null!==o?r.slice(0,-1):r.slice());return s&&0===s.rest.length&&e(s.selectorExpression)?{kind:"selector",selectorExpression:s.selectorExpression,timeoutMs:o}:{kind:"text",text:(null!==o?r.slice(0,-1).join(" "):r.join(" ")).trim(),timeoutMs:o}}function K(t){return null===t?{}:{timeoutMs:t}}let P=R("wifi","airplane","location","animations"),T=R("on","off"),O=R("light","dark","toggle"),H=R("faceid","touchid"),U=R("match","nonmatch","enroll","unenroll"),W=R("match","nonmatch"),$=R("grant","deny","reset"),J=R("camera","microphone","photos","contacts","contacts-limited","notifications","calendar","location","location-always","media-library","motion","reminders","siri","accessibility","screen-recording","input-monitoring");export{j as captureCliReaders,q as captureDaemonWriters,b as commandNameSet,c as commonInputFromFlags,l as direct,w as elementTargetPositionals,g as interactionTargetPositionals,M as isFiniteNumberString,G as optionalCliNumber,F as optionalNumber,L as optionalString,D as optionalTrimmedText,k as parseTimeout,E as parseWaitPositionals,_ as readElementTargetFromPositionals,I as readGetFormat,x as readJsonObject,m as repeatedInputFromFlags,u as request,C as requiredDaemonString,V as requiredString,f as selectionOptionsFromFlags,d as selectorSnapshotInputFromFlags,p as selectorSnapshotOptionsFromFlags,N as splitRequiredSelector,h as targetInputFromClientTarget};
1
+ import{splitSelectorFromArgs as t,tryParseSelectorChain as e}from"./940.js";import{AppError as r}from"./9152.js";import{compactRecord as i}from"./9404.js";import{PUBLIC_COMMANDS as n}from"./5792.js";import{readLocationCoordinate as o}from"./1998.js";import{screenshotOptionsFromFlags as s,screenshotFlagsFromOptions as a}from"./5310.js";function l(t,e){return r=>u(t,e?e(r):[],r)}function u(t,e,r){return{command:t,positionals:e,options:function(t){var e;let r="mobile"===(e=t.deviceTarget??t.target)||"tv"===e||"desktop"===e?e:void 0;if(void 0===r&&void 0===t.target)return t;let{target:i,...n}=t;return void 0===r?n:{...n,target:r}}(r)}}function c(t){return i({session:t.session,platform:t.platform,deviceTarget:t.target,device:t.device,udid:t.udid,serial:t.serial,iosSimulatorDeviceSet:t.iosSimulatorDeviceSet,androidDeviceAllowlist:t.androidDeviceAllowlist})}function f(t){return{platform:t.platform,target:t.target,device:t.device,udid:t.udid,serial:t.serial,iosSimulatorDeviceSet:t.iosSimulatorDeviceSet,androidDeviceAllowlist:t.androidDeviceAllowlist}}function d(t){return i({depth:t.snapshotDepth,scope:t.snapshotScope,raw:t.snapshotRaw})}function p(t){return{depth:t.snapshotDepth,scope:t.snapshotScope,raw:t.snapshotRaw}}function m(t){return i({count:t.count,intervalMs:t.intervalMs,holdMs:t.holdMs,jitterPx:t.jitterPx,doubleTap:t.doubleTap})}function h(t){return"ref"in t&&void 0!==t.ref?i({kind:"ref",ref:t.ref,label:t.label}):"selector"in t&&void 0!==t.selector?{kind:"selector",selector:t.selector}:{kind:"point",x:t.x,y:t.y}}function g(t){let e=S(t);if("string"==typeof e.ref)return[e.ref,...A(e.label)];if("string"==typeof e.selector)return[e.selector];if("point"===e.kind||void 0!==e.x||void 0!==e.y)return[String(v(e.x,"x")),String(v(e.y,"y"))];throw new r("INVALID_ARGS","interaction requires @ref, selector, or point target")}function w(t){let e=S(t);if("string"==typeof e.ref)return[e.ref,...A(e.label)];if("string"==typeof e.selector)return[e.selector];throw new r("INVALID_ARGS","element command requires @ref or selector target")}function S(t){if(!t||"object"!=typeof t||Array.isArray(t))throw new r("INVALID_ARGS","Expected target object.");let e=t.target;return e&&"object"==typeof e&&!Array.isArray(e)?e:t}function v(t,e){if("number"!=typeof t||!Number.isFinite(t))throw new r("INVALID_ARGS",`point target requires numeric ${e}.`);return t}function A(t){return"string"==typeof t&&t.length>0?[t]:[]}function _(t){if(t[0]?.startsWith("@"))return{ref:t[0],label:D(t.slice(1))};let e=t.join(" ").trim();if(!e)throw new r("INVALID_ARGS","get requires @ref or selector expression");return{selector:e}}function I(t){if("text"===t||"attrs"===t)return t;throw new r("INVALID_ARGS","get only supports text or attrs")}function N(e,i={}){let n=t(e,i);if(!n)throw new r("INVALID_ARGS","is requires a selector expression");return n}function x(t,e){try{let e=JSON.parse(t);if(e&&"object"==typeof e&&!Array.isArray(e))return e}catch{}throw new r("INVALID_ARGS",`${e} must be a JSON object`)}function D(t){return t.join(" ").trim()||void 0}function R(...t){return new Set(t)}function b(t){return new Set(t)}function y(t,e){return void 0!==t&&e.has(t)}function M(t){return void 0!==t&&""!==t.trim()&&Number.isFinite(Number(t))}function G(t){return void 0===t?void 0:Number(t)}function L(t){return void 0===t?[]:[t]}function F(t){return void 0===t?[]:[String(t)]}function V(t,e){if(void 0===t||""===t)throw new r("INVALID_ARGS",e);return t}function C(t,e){if("string"!=typeof t||0===t.length)throw new r("INVALID_ARGS",e);return t}function k(t){if(!t)return null;let e=Number(t);return Number.isFinite(e)?e:null}let j={snapshot:(t,e)=>({...c(e),interactiveOnly:e.snapshotInteractiveOnly,compact:e.snapshotCompact,depth:e.snapshotDepth,scope:e.snapshotScope,raw:e.snapshotRaw,forceFull:e.snapshotForceFull,timeoutMs:e.timeoutMs}),screenshot:(t,e)=>({...c(e),path:t[0]??e.out,...s(e)}),diff:(t,e)=>{if("snapshot"!==t[0])throw new r("INVALID_ARGS","Only diff snapshot is available through this parser.");return{...c(e),kind:"snapshot",out:e.out,interactiveOnly:e.snapshotInteractiveOnly,compact:e.snapshotCompact,depth:e.snapshotDepth,scope:e.snapshotScope,raw:e.snapshotRaw}},wait:(t,e)=>(function(t,e){let i=E(t);if(!i)throw new r("INVALID_ARGS","wait requires <ms>, text <text>, @ref, or <selector> [timeoutMs].");let n={...f(e),...p(e)};if("sleep"===i.kind)return{...n,durationMs:i.durationMs};if("text"===i.kind){if(!i.text)throw new r("INVALID_ARGS","wait requires text.");return{...n,text:i.text,...K(i.timeoutMs)}}return"ref"===i.kind?{...n,ref:i.rawRef,...K(i.timeoutMs)}:{...n,selector:i.selectorExpression,...K(i.timeoutMs)}})(t,e),alert:(t,e)=>({...c(e),...function(t){if(t.length>2)throw new r("INVALID_ARGS","alert accepts at most action and timeout arguments.");return i({action:function(t){let e=t?.toLowerCase();if(void 0===e||"get"===e||"accept"===e||"dismiss"===e||"wait"===e)return e;throw new r("INVALID_ARGS","alert action must be get, accept, dismiss, or wait.")}(t[0]),timeoutMs:function(t,e){if(void 0===t)return;let i=Number(t);if(Number.isFinite(i))return i;throw new r("INVALID_ARGS",`${e} must be a finite number.`)}(t[1],"alert timeout")})}(t)}),settings:(t,e)=>(function(t,e){let i=f(e),n=t[0],s=t[1];if(y(n,P)&&y(s,T))return{...i,setting:n,state:s};if("location"===n&&"set"===s)return{...i,setting:n,state:s,latitude:o(t[2],"latitude"),longitude:o(t[3],"longitude")};if("appearance"===n&&y(s,O)||y(n,H)&&y(s,U)||"fingerprint"===n&&y(s,W))return{...i,setting:n,state:s};if("permission"===n&&y(s,$))return{...i,setting:n,state:s,permission:function(t){if(y(t,J))return t;throw new r("INVALID_ARGS","settings permission requires a permission target.")}(t[2]),mode:function(t){if(void 0===t||"full"===t||"limited"===t)return t;throw new r("INVALID_ARGS","settings permission mode must be full or limited.")}(t[3])};if("clear-app-state"===n){let e="clear"===s?t[2]:s;return{...i,setting:n,state:"clear",app:e}}throw new r("INVALID_ARGS","Invalid settings arguments.")})(t,e)},q={snapshot:l(n.snapshot),screenshot:t=>u(n.screenshot,L(t.path),{...t,...a(t)}),diff:l(n.diff,t=>[C(t.kind,"diff requires kind")]),wait:l(n.wait,t=>(function(t){if(1!==[void 0!==t.durationMs?"durationMs":void 0,void 0!==t.text?"text":void 0,void 0!==t.ref?"ref":void 0,void 0!==t.selector?"selector":void 0].filter(Boolean).length)throw new r("INVALID_ARGS","wait command requires exactly one of durationMs, text, ref, or selector.");if(void 0!==t.durationMs)return[String(t.durationMs)];let i=F(t.timeoutMs);if(void 0!==t.text)return["text",t.text,...i];if(void 0!==t.ref)return[t.ref,...i];let n=t.selector;if(!e(n))throw new r("INVALID_ARGS",`Invalid wait selector: ${n}`);return[n,...i]})(t)),alert:l(n.alert,t=>{var e;return[(e=t).action??"get",...F(e.timeoutMs)]}),settings:l(n.settings,t=>{var e;return"clear-app-state"===(e=t).setting?[e.setting,...L(e.app)]:"location"===e.setting&&"set"===e.state?[e.setting,e.state,String(e.latitude),String(e.longitude)]:"permission"===e.setting?[e.setting,e.state,e.permission,...L(e.mode)]:[e.setting,e.state]})};function E(r){let i=r[0];if(void 0===i)return null;let n=k(i);if(null!==n)return{kind:"sleep",durationMs:n};let o=k(r[r.length-1]);if("text"===i)return{kind:"text",text:(null!==o?r.slice(1,-1).join(" "):r.slice(1).join(" ")).trim(),timeoutMs:o};if(i.startsWith("@"))return{kind:"ref",rawRef:i,timeoutMs:o};let s=t(null!==o?r.slice(0,-1):r.slice());return s&&0===s.rest.length&&e(s.selectorExpression)?{kind:"selector",selectorExpression:s.selectorExpression,timeoutMs:o}:{kind:"text",text:(null!==o?r.slice(0,-1).join(" "):r.join(" ")).trim(),timeoutMs:o}}function K(t){return null===t?{}:{timeoutMs:t}}let P=R("wifi","airplane","location","animations"),T=R("on","off"),O=R("light","dark","toggle"),H=R("faceid","touchid"),U=R("match","nonmatch","enroll","unenroll"),W=R("match","nonmatch"),$=R("grant","deny","reset"),J=R("camera","microphone","photos","contacts","contacts-limited","notifications","calendar","location","location-always","media-library","motion","reminders","siri","accessibility","screen-recording","input-monitoring");export{j as captureCliReaders,q as captureDaemonWriters,b as commandNameSet,c as commonInputFromFlags,l as direct,w as elementTargetPositionals,g as interactionTargetPositionals,M as isFiniteNumberString,G as optionalCliNumber,F as optionalNumber,L as optionalString,D as optionalTrimmedText,k as parseTimeout,E as parseWaitPositionals,_ as readElementTargetFromPositionals,I as readGetFormat,x as readJsonObject,m as repeatedInputFromFlags,u as request,C as requiredDaemonString,V as requiredString,f as selectionOptionsFromFlags,d as selectorSnapshotInputFromFlags,p as selectorSnapshotOptionsFromFlags,N as splitRequiredSelector,h as targetInputFromClientTarget};
package/dist/src/6232.js CHANGED
@@ -1 +1 @@
1
- import{withSuccessText as e,successText as a}from"./1998.js";function n(e){let a=e.appId??e.bundleId??e.packageName;return{session:e.session,appId:a,appBundleId:e.bundleId,package:e.packageName}}function i(e,a,n){return{deviceId:a,deviceName:n,..."android"===e?{serial:a}:"ios"===e?{udid:a}:{}}}function t(e,a={}){let n=a.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&&n?{serial:e.android?.serial??e.id}:{}}}function d(e){return{name:e.name,...t(e.device,{includeAndroidSerial:!1}),createdAt:e.createdAt}}function p(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 r(e){return e.bundleId??e.package??e.app}function l(a){return e({app:a.app,appPath:a.appPath,platform:a.platform,...a.appId?{appId:a.appId}:{},...a.bundleId?{bundleId:a.bundleId}:{},...a.package?{package:a.package}:{}},`Installed: ${r(a)}`)}function s(e){return e.appName??e.bundleId??e.packageName??e.launchTarget}function o(a){return e({launchTarget:a.launchTarget,...a.appName?{appName:a.appName}:{},...a.appId?{appId:a.appId}:{},...a.bundleId?{bundleId:a.bundleId}:{},...a.packageName?{package:a.packageName}:{},...a.installablePath?{installablePath:a.installablePath}:{},...a.archivePath?{archivePath:a.archivePath}:{},...a.materializationId?{materializationId:a.materializationId}:{},...a.materializationExpiresAt?{materializationExpiresAt:a.materializationExpiresAt}:{}},`Installed: ${s(a)}`)}function u(a){let n=a.appName??a.appBundleId??a.session;return e({session:a.session,...a.appName?{appName:a.appName}:{},...a.appBundleId?{appBundleId:a.appBundleId}:{},...a.startup?{startup:a.startup}:{},...a.runtime?{runtime:a.runtime}:{},...a.device?t(a.device):{}},n?`Opened: ${n}`:"Opened")}function c(e){return{session:e.session,...e.shutdown?{shutdown:e.shutdown}:{},...a(e.session?`Closed: ${e.session}`:"Closed")}}function m(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}:{}}}export{n as buildAppIdentifiers,i as buildDeviceIdentifiers,r as resolveDeployResultTarget,s as resolveInstallFromSourceResultTarget,c as serializeCloseResult,l as serializeDeployResult,p as serializeDevice,o as serializeInstallFromSourceResult,u as serializeOpenResult,d as serializeSessionListEntry,m as serializeSnapshotResult};
1
+ import{withSuccessText as e,successText as a}from"./1998.js";function i(e){let a=e.appId??e.bundleId??e.packageName;return{session:e.session,appId:a,appBundleId:e.bundleId,package:e.packageName}}function n(e,a,i){return{deviceId:a,deviceName:i,..."android"===e?{serial:a}:"ios"===e?{udid:a}:{}}}function t(e,a={}){let i=a.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&&i?{serial:e.android?.serial??e.id}:{}}}function d(e){return{name:e.name,...t(e.device,{includeAndroidSerial:!1}),createdAt:e.createdAt}}function r(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 p(e){return e.bundleId??e.package??e.app}function s(a){return e({app:a.app,appPath:a.appPath,platform:a.platform,...a.appId?{appId:a.appId}:{},...a.bundleId?{bundleId:a.bundleId}:{},...a.package?{package:a.package}:{}},`Installed: ${p(a)}`)}function l(e){return e.appName??e.bundleId??e.packageName??e.launchTarget}function o(a){return e({launchTarget:a.launchTarget,...a.appName?{appName:a.appName}:{},...a.appId?{appId:a.appId}:{},...a.bundleId?{bundleId:a.bundleId}:{},...a.packageName?{package:a.packageName}:{},...a.installablePath?{installablePath:a.installablePath}:{},...a.archivePath?{archivePath:a.archivePath}:{},...a.materializationId?{materializationId:a.materializationId}:{},...a.materializationExpiresAt?{materializationExpiresAt:a.materializationExpiresAt}:{}},`Installed: ${l(a)}`)}function u(a){let i=a.appName??a.appBundleId??a.session;return e({session:a.session,...a.sessionStateDir?{sessionStateDir:a.sessionStateDir}:{},...a.appName?{appName:a.appName}:{},...a.appBundleId?{appBundleId:a.appBundleId}:{},...a.startup?{startup:a.startup}:{},...a.runtime?{runtime:a.runtime}:{},...a.device?t(a.device):{}},i?`Opened: ${i}`:"Opened")}function c(e){return{session:e.session,...e.shutdown?{shutdown:e.shutdown}:{},...a(e.session?`Closed: ${e.session}`:"Closed")}}function m(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}:{}}}export{i as buildAppIdentifiers,n as buildDeviceIdentifiers,p as resolveDeployResultTarget,l as resolveInstallFromSourceResultTarget,c as serializeCloseResult,s as serializeDeployResult,r as serializeDevice,o as serializeInstallFromSourceResult,u as serializeOpenResult,d as serializeSessionListEntry,m as serializeSnapshotResult};
package/dist/src/8699.js CHANGED
@@ -1 +1 @@
1
- import{screenshotFlagsFromOptions as e}from"./5310.js";import{AppError as t}from"./9152.js";import{readRequiredString as r,readRequiredPlatform as i,readRequiredDeviceKind as a,readNullableString as n,readDeviceTarget as o,readRect as s,asRecord as l,stripUndefined as u,isRecord as c,readRequiredNumber as d,readPoint as p,readOptionalString as f}from"./7455.js";import{buildAppIdentifiers as m,buildDeviceIdentifiers as h}from"./6232.js";import{INTERNAL_COMMANDS as g,BATCH_COMMAND_NAMES as y,PUBLIC_COMMANDS as v}from"./5792.js";import{assertResolvedAppsFilter as S}from"./1393.js";import{request as b,selectorSnapshotOptionsFromFlags as w,direct as A,requiredString as I,commonInputFromFlags as _,optionalString as N,readJsonObject as R,optionalNumber as M,optionalCliNumber as x,selectionOptionsFromFlags as k,commandNameSet as D,captureDaemonWriters as L,requiredDaemonString as P,splitRequiredSelector as q}from"./6085.js";import{parseDeviceRotation as C}from"./1998.js";import{compactRecord as V}from"./9404.js";import{interactionDaemonWriters as G}from"./8502.js";function E(e,t){let a=f(e,"bundleId"),n=f(e,"package");return{app:r(e,"app"),appPath:r(e,"appPath"),platform:i(e,"platform"),appId:a??n,bundleId:a,package:n,identifiers:m({session:t,bundleId:a,packageName:n})}}function U(e,r){let i=f(e,"bundleId"),a=f(e,"packageName"),n=i??a??f(e,"appId"),o=f(e,"launchTarget")??a??i??n;if(!o)throw new t("COMMAND_FAILED",'Daemon response is missing "launchTarget".',{response:e});return{appName:f(e,"appName"),appId:n,bundleId:i,packageName:a,launchTarget:o,installablePath:f(e,"installablePath"),archivePath:f(e,"archivePath"),materializationId:f(e,"materializationId"),materializationExpiresAt:f(e,"materializationExpiresAt"),identifiers:m({session:r,bundleId:i,packageName:a,appId:n})}}function $(e){return{released:!0===e.released,materializationId:r(e,"materializationId"),identifiers:{}}}function z(e){let{record:t,platform:r,id:i,name:n,target:o}=T(e,"name");return{platform:r,target:o,kind:a(t,"kind"),id:i,name:n,booted:"boolean"==typeof t.booted?t.booted:void 0,identifiers:h(r,i,n),...F(r,i)}}function K(e){let{record:t,platform:i,id:a,name:o,target:s}=T(e,"name"),l=r(t,"device"),u={session:o,...h(i,a,l)};return{name:o,createdAt:d(t,"createdAt"),device:{platform:i,target:s,id:a,name:l,identifiers:u,...F(i,a,n(t,"ios_simulator_device_set"))},identifiers:u}}function T(e,t){let a=l(e);return{record:a,platform:i(a,"platform"),id:r(a,"id"),name:r(a,t),target:o(a,"target")}}function F(e,t,r){return{ios:"ios"===e?{udid:t,...void 0!==r?{simulatorSetPath:r}:{}}:void 0,android:"android"===e?{serial:t}:void 0}}function B(e){if(!c(e))return;let t=e.platform,r=f(e,"metroHost"),i="number"==typeof e.metroPort?e.metroPort:void 0;return{platform:"ios"===t||"android"===t?t:void 0,metroHost:r,metroPort:i,bundleUrl:f(e,"bundleUrl"),launchUrl:f(e,"launchUrl")}}function O(e){let t=e.platform,r=f(e,"id"),i=f(e,"device");if("ios"!==t&&"macos"!==t&&"android"!==t&&"linux"!==t||!r||!i)return;let a=o(e,"target"),s=h(t,r,i);return{platform:t,target:a,id:r,name:i,identifiers:s,ios:"ios"===t?{udid:f(e,"device_udid")??r,simulatorSetPath:n(e,"ios_simulator_device_set")}:void 0,android:"android"===t?{serial:f(e,"serial")??r}:void 0}}function H(e){if(c(e)&&"number"==typeof e.durationMs&&"string"==typeof e.measuredAt&&"string"==typeof e.method)return{durationMs:e.durationMs,measuredAt:e.measuredAt,method:e.method,appTarget:f(e,"appTarget"),appBundleId:f(e,"appBundleId")}}function j(e){return Array.isArray(e)?e:[]}function J(e){let t=e.overlayRefs;if(!Array.isArray(t))return;let r=[];for(let e of t){if(!c(e))continue;let t=f(e,"ref"),i=s(e,"rect"),a=s(e,"overlayRect"),n=p(e,"center");t&&i&&a&&n&&r.push({ref:t,label:f(e,"label"),rect:i,overlayRect:a,center:n})}return r}function W(t){return u({stateDir:t.stateDir,daemonBaseUrl:t.daemonBaseUrl,daemonAuthToken:t.daemonAuthToken,daemonTransport:t.daemonTransport,daemonServerMode:t.daemonServerMode,tenant:t.tenant,sessionIsolation:t.sessionIsolation,runId:t.runId,leaseId:t.leaseId,leaseBackend:t.leaseBackend,platform:t.platform,target:t.target,device:t.device,udid:t.udid,serial:t.serial,iosSimulatorDeviceSet:t.iosSimulatorDeviceSet,androidDeviceAllowlist:t.androidDeviceAllowlist,surface:t.surface,activity:t.activity,launchConsole:t.launchConsole,launchArgs:t.launchArgs,relaunch:t.relaunch,shutdown:t.shutdown,saveScript:t.saveScript,noRecord:t.noRecord,backMode:t.backMode,metroHost:t.metroHost,metroPort:t.metroPort,bundleUrl:t.bundleUrl,launchUrl:t.launchUrl,snapshotInteractiveOnly:t.interactiveOnly,snapshotCompact:t.compact,snapshotDepth:t.depth,snapshotScope:t.scope,snapshotRaw:t.raw,snapshotForceFull:t.forceFull,...e(t),appsFilter:t.appsFilter,out:t.out,count:t.count,fps:t.fps,quality:t.quality,hideTouches:t.hideTouches,intervalMs:t.intervalMs,delayMs:t.delayMs,holdMs:t.holdMs,jitterPx:t.jitterPx,pixels:t.pixels,doubleTap:t.doubleTap,clickButton:t.clickButton,pauseMs:t.pauseMs,pattern:t.pattern,headless:t.headless,restart:t.restart,replayUpdate:t.replayUpdate,replayBackend:t.replayBackend,replayEnv:t.replayEnv,replayShellEnv:t.replayShellEnv,failFast:t.failFast,timeoutMs:t.timeoutMs,retries:t.retries,artifactsDir:t.artifactsDir,reportJunit:t.reportJunit,findFirst:t.findFirst,findLast:t.findLast,networkInclude:t.networkInclude,batchOnError:t.batchOnError,batchMaxSteps:t.batchMaxSteps,batchSteps:t.batchSteps,verbose:t.debug})}function Q(e){return u({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 X(e){return e??"default"}function Y(e,r){if(!e||"object"!=typeof e||Array.isArray(e))throw new t("INVALID_ARGS",`${r} installSource must be an object.`);if("github-actions-artifact"!==et(e.type,`${r} installSource.type`))throw new t("INVALID_ARGS",`${r} installSource.type must be "github-actions-artifact".`);let{owner:i,repo:a}=ee(et(e.repo,`${r} installSource.repo`),`${r} installSource.repo`);return Z(i,a,e.artifact,`${r} installSource.artifact`)}function Z(e,r,i,a){var n;return"number"==typeof i||"string"==typeof(n=i)&&/^\d+$/.test(n.trim())?{kind:"github-actions-artifact",owner:e,repo:r,artifactId:function(e,r){let i="number"==typeof e?e:"string"==typeof e?Number(e):NaN;if(!Number.isInteger(i))throw new t("INVALID_ARGS",`${r} must be an integer.`);return i}(i,a)}:{kind:"github-actions-artifact",owner:e,repo:r,artifactName:et(i,a)}}function ee(e,r){let i=e.indexOf("/");if(i<=0||i===e.length-1||-1!==e.indexOf("/",i+1))throw new t("INVALID_ARGS",`${r} must use owner/repo.`);let a={owner:e.slice(0,i).trim(),repo:e.slice(i+1).trim()};if(!a.owner||!a.repo)throw new t("INVALID_ARGS",`${r} must use owner/repo.`);return a}function et(e,r){let i="string"==typeof e&&e.trim().length>0?e.trim():void 0;if(!i)throw new t("INVALID_ARGS",`${r} must be a non-empty string.`);return i}let er={devices:(e,t)=>_(t),apps:(e,t)=>({..._(t),appsFilter:S(t.appsFilter)}),session:(e,r)=>({..._(r),action:function(e){let r=e??"list";if("list"===r)return r;throw new t("INVALID_ARGS","session only supports list")}(e[0])}),boot:(e,t)=>({..._(t),headless:t.headless}),open:(e,t)=>({..._(t),app:e[0],url:e[1],surface:t.surface,activity:t.activity,launchConsole:t.launchConsole,launchArgs:t.launchArgs,relaunch:t.relaunch,saveScript:t.saveScript,noRecord:t.noRecord}),close:(e,t)=>({..._(t),app:e[0],shutdown:t.shutdown,saveScript:t.saveScript}),install:ea,reinstall:ea,"install-from-source":(e,r)=>({..._(r),source:function(e,r){let i=e[0]?.trim();if(e.length>1)throw new t("INVALID_ARGS","install-from-source accepts either one <url> positional or --github-actions-artifact");let a=r.githubActionsArtifact?function(e,r="--github-actions-artifact"){let i=e.indexOf(":");if(i<=0||i===e.length-1)throw new t("INVALID_ARGS",`${r} must use owner/repo:artifact, for example thymikee/RNCLI83:6635342232`);let{owner:a,repo:n}=ee(e.slice(0,i),r);return Z(a,n,e.slice(i+1),`${r} artifact`)}(r.githubActionsArtifact):void 0,n=r.installSource;if(1!=+!!i+ +!!a+ +!!n)throw new t("INVALID_ARGS","install-from-source requires exactly one source: <url>, --github-actions-artifact, or config installSource");if(!i&&r.header&&r.header.length>0)throw new t("INVALID_ARGS","install-from-source --header is only supported for URL sources");return a||n||{kind:"url",url:i,headers:function(e){if(!e||0===e.length)return;let r={};for(let i of e){let e=i.indexOf(":");if(e<=0)throw new t("INVALID_ARGS",`Invalid --header value "${i}". Expected "name:value".`);let a=i.slice(0,e).trim(),n=i.slice(e+1).trim();if(!a)throw new t("INVALID_ARGS",`Invalid --header value "${i}". Header name cannot be empty.`);r[a]=n}return r}(r.header)}}(e,r),retainPaths:r.retainPaths,retentionMs:r.retentionMs}),push:(e,t)=>({..._(t),app:I(e[0],"push requires bundleOrPackage"),payload:I(e[1],"push requires payloadOrJson")}),"trigger-app-event":(e,t)=>({..._(t),event:I(e[0],"trigger-app-event requires event"),payload:e[1]?R(e[1],"trigger-app-event payload"):void 0})},ei={devices:A(v.devices),boot:A(v.boot),apps:A(v.apps),open:A(v.open,function(e){return e.app?e.url?[e.app,e.url]:[e.app]:[]}),close:A(v.close,e=>N(e.app)),install:A(v.install,e=>en(e.app,e.appPath)),reinstall:A(v.reinstall,e=>en(e.app,e.appPath)),"install-from-source":e=>b(g.installSource,[],{...e,installSource:e.source,retainMaterializedPaths:e.retainPaths,materializedPathRetentionMs:e.retentionMs}),push:A(v.push,e=>{var t;return[(t=e).app,"string"==typeof t.payload?t.payload:JSON.stringify(t.payload)]}),"trigger-app-event":A(v.triggerAppEvent,e=>{var t;return[(t=e).event,...t.payload?[JSON.stringify(t.payload)]:[]]})};function ea(e,t,r="install"){return{..._(t),app:I(e[0],`${r} requires app`),appPath:I(e[1],`${r} requires path`)}}function en(e,t){return[P(e,"missing first positional"),P(t,"missing second positional")]}let eo={gesture:function(e,r){let i=e[0],a=e.slice(1),n=_(r);switch(i){case"pan":return{...n,kind:i,origin:{x:Number(a[0]),y:Number(a[1])},delta:{x:Number(a[2]),y:Number(a[3])},durationMs:x(a[4])};case"fling":return{...n,kind:i,direction:a[0],origin:{x:Number(a[1]),y:Number(a[2])},distance:x(a[3]),durationMs:x(a[4])};case"swipe":return{...n,kind:i,preset:a[0],durationMs:x(a[1])};case"pinch":return{...n,kind:i,scale:Number(a[0]),origin:void 0===a[1]||void 0===a[2]?void 0:{x:Number(a[1]),y:Number(a[2])}};case"rotate":return{...n,kind:i,degrees:Number(a[0]),origin:void 0===a[1]||void 0===a[2]?void 0:{x:Number(a[1]),y:Number(a[2])},velocity:x(a[3])};case"transform":return{...n,kind:i,origin:{x:Number(a[0]),y:Number(a[1])},delta:{x:Number(a[2]),y:Number(a[3])},scale:Number(a[4]),degrees:Number(a[5]),durationMs:x(a[6])};default:throw new t("INVALID_ARGS","gesture requires pan, fling, swipe, pinch, rotate, or transform")}}},es={gesture:A(v.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),...M(e.durationMs)];case"fling":return["fling",P(e.direction,"gesture fling requires direction"),String(e.origin?.x),String(e.origin?.y),...M(e.distance),...M(e.durationMs)];case"swipe":return el(e);case"pinch":return["pinch",String(e.scale),...M(e.origin?.x),...M(e.origin?.y)];case"rotate":return["rotate",String(e.degrees),...M(e.origin?.x),...M(e.origin?.y),...M(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),...M(e.durationMs)];default:throw new t("INVALID_ARGS","gesture requires pan, fling, swipe, pinch, rotate, or transform")}}),"gesture-pan":A(v.gesture,function(e){return["pan",String(e.x),String(e.y),String(e.dx),String(e.dy),...M(e.durationMs)]}),"gesture-fling":A(v.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),...M(r),...M(t.durationMs)]}),"gesture-swipe":A(v.gesture,el),"gesture-pinch":A(v.gesture,function(e){return["pinch",String(e.scale),...M(e.x),...M(e.y)]}),"gesture-rotate":A(v.gesture,e=>(function(e){var r=e;if(void 0===r.x&&void 0!==r.y||void 0!==r.x&&void 0===r.y)throw new t("INVALID_ARGS","gesture rotate center requires both x and y");let i=void 0===e.x||void 0===e.y?[]:[String(e.x),String(e.y)];return["rotate",String(e.degrees),...i,...M(e.velocity)]})(e)),"gesture-transform":A(v.gesture,function(e){return["transform",String(e.x),String(e.y),String(e.dx),String(e.dy),String(e.scale),String(e.degrees),...M(e.durationMs)]})};function el(e){return["swipe",P(e.preset,"gesture swipe requires preset"),...M(e.durationMs)]}let eu={perf:(e,t)=>_(t),logs:(e,r)=>({..._(r),action:function(e){if(void 0!==e){if("path"===e||"start"===e||"stop"===e||"doctor"===e||"mark"===e||"clear"===e)return e;throw new t("INVALID_ARGS","logs requires path, start, stop, doctor, mark, or clear")}}(e[0]),message:e.slice(1).join(" ")||void 0,restart:r.restart}),network:(e,r)=>({..._(r),action:function(e){if(void 0!==e){if("dump"===e||"log"===e)return e;throw new t("INVALID_ARGS","network requires dump or log")}}(e[0]),limit:x(e[1]),include:r.networkInclude??function(e){if(void 0!==e){if("summary"===e||"headers"===e||"body"===e||"all"===e)return e;throw new t("INVALID_ARGS","network include mode must be summary, headers, body, or all")}}(e[2])}),record:(e,t)=>({..._(t),action:ep(e[0],"record"),path:e[1],fps:t.fps,quality:t.quality,hideTouches:t.hideTouches}),trace:(e,t)=>({..._(t),action:ep(e[0],"trace"),path:e[1]})},ec={perf:A(v.perf),logs:A(v.logs,e=>{var t;return[(t=e).action??"path",...N(t.message)]}),network:e=>{var t;return b(v.network,[...(t=e).action?[t.action]:[],...M(t.limit)],{...e,networkInclude:e.include})},record:A(v.record,e=>ed(e)),trace:A(v.trace,e=>ed(e))};function ed(e){return[e.action,...N(e.path)]}function ep(e,r){if("start"===e||"stop"===e)return e;throw new t("INVALID_ARGS",`${r} requires start|stop`)}let ef={replay:(e,t)=>({..._(t),path:I(e[0],"replay requires path"),update:t.replayUpdate,backend:t.replayMaestro?"maestro":void 0,env:t.replayEnv}),test:(e,t)=>({..._(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 em(e){return e.backend??(!0===e.maestro?"maestro":void 0)}function eh(e){let t={};for(let[r,i]of Object.entries(e))"string"==typeof i&&r.startsWith("AD_VAR_")&&(t[r]=i);return t}let eg={find:(e,r)=>(function(e,r){var i;let a={...{depth:(i=r).snapshotDepth,raw:i.snapshotRaw},...k(r),first:r.findFirst,last:r.findLast},n=function(e){if("text"===e||"label"===e||"value"===e||"role"===e||"id"===e)return e}(e[0]),o=void 0!==n,s=o?e[1]:e[0],l=o?2:1,u=e[l];if(void 0===u)return{...a,locator:n,query:ev(s)};if("get"===u){let r=e[l+1];if("text"===r)return{...a,locator:n,query:ev(s),action:"getText"};if("attrs"===r)return{...a,locator:n,query:ev(s),action:"getAttrs"};throw new t("INVALID_ARGS","find get only supports text or attrs")}if("wait"===u)return{...a,locator:n,query:ev(s),action:"wait",timeoutMs:x(e[l+1])};if("fill"===u||"type"===u)return{...a,locator:n,query:ev(s),action:u,value:e.slice(l+1).join(" ")};if("click"===u||"focus"===u||"exists"===u)return{...a,locator:n,query:ev(s),action:u};throw new t("INVALID_ARGS",`Unsupported find action: ${u}`)})(e,r),is:(e,r)=>(function(e,r){let i={...w(r),...k(r)},a=e[0],n=q(e.slice(1),{preferTrailingValue:"text"===a});if("text"===a)return{...i,predicate:a,selector:n.selectorExpression,value:n.rest.join(" ")};if("visible"===a||"hidden"===a||"exists"===a||"editable"===a||"selected"===a)return{...i,predicate:a,selector:n.selectorExpression};throw new t("INVALID_ARGS","is requires predicate: visible|hidden|exists|editable|selected|text")})(e,r)},ey={is:A(v.is,e=>{var t;return[(t=e).predicate,t.selector,..."text"===t.predicate?[t.value]:[]]}),find:e=>b(v.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",...M(e.timeoutMs)];case"fill":case"type":return[...t,e.action,e.value]}}(e),{...e,findFirst:e.first,findLast:e.last})};function ev(e){if(void 0===e||""===e)throw new t("INVALID_ARGS","find requires query");return e}let eS={appstate:(e,t)=>_(t),home:(e,t)=>_(t),"app-switcher":(e,t)=>_(t),back:(e,t)=>({..._(t),mode:t.backMode}),rotate:(e,t)=>({..._(t),orientation:C(e[0])}),keyboard:(e,r)=>({..._(r),...function(e){if(e.length>1)throw new t("INVALID_ARGS","keyboard accepts at most one action argument.");return V({action:function(e){let r=e?.toLowerCase();if("get"===r)return"status";if(void 0===r||"status"===r||"dismiss"===r||"enter"===r||"return"===r)return r;throw new t("INVALID_ARGS","keyboard action must be status, get, dismiss, enter, or return.")}(e[0])})}(e)}),clipboard:(e,r)=>({..._(r),...function(e){let r=e[0]?.toLowerCase();if("read"!==r&&"write"!==r)throw new t("INVALID_ARGS","clipboard requires a subcommand: read or write.");if("read"===r){if(1!==e.length)throw new t("INVALID_ARGS","clipboard read does not accept additional arguments.");return{action:r}}if(e.length<2)throw new t("INVALID_ARGS","clipboard write requires text.");return{action:r,text:e.slice(1).join(" ")}}(e)}),"react-native":(e,r)=>({..._(r),action:function(e){if("dismiss-overlay"===e)return e;throw new t("INVALID_ARGS","react-native supports only: dismiss-overlay")}(e[0])})},eb={appstate:A(v.appState),back:e=>{var t;return b(v.back,[],{...e,backMode:"in-app"===(t=e.mode)||"system"===t?t:void 0})},home:A(v.home),rotate:A(v.rotate,e=>[P(e.orientation,"rotate requires orientation")]),"app-switcher":A(v.appSwitcher),keyboard:A(v.keyboard,e=>N(e.action)),clipboard:A(v.clipboard,e=>{var t;return"read"===(t=e).action?["read"]:["write",t.text]}),"react-native":A(v.reactNative,e=>[P(e.action,"react-native requires action")])},ew={...ei,...L,...G,...es,...ey,...ec,replay:e=>b(v.replay,[P(e.path,"replay requires path")],{...e,replayUpdate:e.update,replayBackend:em(e),replayEnv:e.env,replayShellEnv:eh(process.env)}),test:e=>b(v.test,e.paths??[],{...e,replayUpdate:e.update,replayBackend:em(e),replayEnv:e.env,replayShellEnv:eh(process.env)}),...eb,batch:e=>b(v.batch,[],{...e,batchSteps:function(e){if(!Array.isArray(e)||0===e.length)throw new t("INVALID_ARGS","batch requires a non-empty steps array.");return e.map((e,r)=>{var i;let a,n,o,s,l,u;return o=function(e,r){let i="string"==typeof e.command?e.command.trim().toLowerCase():"";if(eI.has(i))return i;throw new t("INVALID_ARGS",`Batch step ${r} command is not available through command batch: ${String(e.command)}`)}(n=function(e,r){if(!e||"object"!=typeof e||Array.isArray(e))throw new t("INVALID_ARGS",`Invalid batch step ${r}.`);return e}(e,i=r+1),i),s=function(e,r){let i=e.input;if(!i||"object"!=typeof i||Array.isArray(i))throw new t("INVALID_ARGS",`Batch step ${r} input must be an object.`);return i}(n,i),l=function(e,r){let i=e.runtime;if(void 0!==i&&(!i||"object"!=typeof i||Array.isArray(i)))throw new t("INVALID_ARGS",`Batch step ${r} runtime must be an object.`);return i}(n,i),{...u={command:(a=e_(o,s)).command,positionals:a.positionals,flags:W(a.options),runtime:a.options.runtime},runtime:l??u.runtime}})}(e.steps),batchOnError:e.onError,batchMaxSteps:e.maxSteps})},eA=y,eI=D(eA);function e_(e,t){return ew[e](t)}export{er as appCliReaders,eA as batchCommandNames,W as buildFlags,Q as buildMeta,eo as gestureCliReaders,E as normalizeDeployResult,z as normalizeDevice,U as normalizeInstallFromSourceResult,$ as normalizeMaterializationReleaseResult,O as normalizeOpenDevice,B as normalizeRuntimeHints,K as normalizeSession,H as normalizeStartupSample,eu as observabilityCliReaders,Y as parseInstallSourceConfig,e_ as prepareDaemonCommandRequest,J as readScreenshotOverlayRefs,j as readSnapshotNodes,ef as replayCliReaders,X as resolveSessionName,eg as selectorCliReaders,eS as systemCliReaders};
1
+ import{screenshotFlagsFromOptions as e}from"./5310.js";import{AppError as t}from"./9152.js";import{readRequiredString as r,readRequiredPlatform as i,readRequiredDeviceKind as a,readNullableString as n,readDeviceTarget as o,readRect as s,asRecord as l,stripUndefined as u,isRecord as c,readRequiredNumber as d,readPoint as p,readOptionalString as f}from"./7455.js";import{buildAppIdentifiers as m,buildDeviceIdentifiers as h}from"./6232.js";import{INTERNAL_COMMANDS as g,BATCH_COMMAND_NAMES as y,PUBLIC_COMMANDS as v}from"./5792.js";import{assertResolvedAppsFilter as S}from"./1393.js";import{request as b,selectorSnapshotOptionsFromFlags as w,direct as A,requiredString as I,commonInputFromFlags as _,optionalString as N,readJsonObject as R,optionalNumber as M,optionalCliNumber as x,selectionOptionsFromFlags as k,commandNameSet as D,captureDaemonWriters as L,requiredDaemonString as q,splitRequiredSelector as P}from"./6085.js";import{parseDeviceRotation as C}from"./1998.js";import{compactRecord as V}from"./9404.js";import{interactionDaemonWriters as G}from"./8502.js";function E(e,t){let a=f(e,"bundleId"),n=f(e,"package");return{app:r(e,"app"),appPath:r(e,"appPath"),platform:i(e,"platform"),appId:a??n,bundleId:a,package:n,identifiers:m({session:t,bundleId:a,packageName:n})}}function U(e,r){let i=f(e,"bundleId"),a=f(e,"packageName"),n=i??a??f(e,"appId"),o=f(e,"launchTarget")??a??i??n;if(!o)throw new t("COMMAND_FAILED",'Daemon response is missing "launchTarget".',{response:e});return{appName:f(e,"appName"),appId:n,bundleId:i,packageName:a,launchTarget:o,installablePath:f(e,"installablePath"),archivePath:f(e,"archivePath"),materializationId:f(e,"materializationId"),materializationExpiresAt:f(e,"materializationExpiresAt"),identifiers:m({session:r,bundleId:i,packageName:a,appId:n})}}function $(e){return{released:!0===e.released,materializationId:r(e,"materializationId"),identifiers:{}}}function z(e){let{record:t,platform:r,id:i,name:n,target:o}=T(e,"name");return{platform:r,target:o,kind:a(t,"kind"),id:i,name:n,booted:"boolean"==typeof t.booted?t.booted:void 0,identifiers:h(r,i,n),...F(r,i)}}function K(e){let{record:t,platform:i,id:a,name:o,target:s}=T(e,"name"),l=r(t,"device"),u={session:o,...h(i,a,l)};return{name:o,createdAt:d(t,"createdAt"),device:{platform:i,target:s,id:a,name:l,identifiers:u,...F(i,a,n(t,"ios_simulator_device_set"))},identifiers:u}}function T(e,t){let a=l(e);return{record:a,platform:i(a,"platform"),id:r(a,"id"),name:r(a,t),target:o(a,"target")}}function F(e,t,r){return{ios:"ios"===e?{udid:t,...void 0!==r?{simulatorSetPath:r}:{}}:void 0,android:"android"===e?{serial:t}:void 0}}function B(e){if(!c(e))return;let t=e.platform,r=f(e,"metroHost"),i="number"==typeof e.metroPort?e.metroPort:void 0;return{platform:"ios"===t||"android"===t?t:void 0,metroHost:r,metroPort:i,bundleUrl:f(e,"bundleUrl"),launchUrl:f(e,"launchUrl")}}function O(e){let t=e.platform,r=f(e,"id"),i=f(e,"device");if("ios"!==t&&"macos"!==t&&"android"!==t&&"linux"!==t||!r||!i)return;let a=o(e,"target"),s=h(t,r,i);return{platform:t,target:a,id:r,name:i,identifiers:s,ios:"ios"===t?{udid:f(e,"device_udid")??r,simulatorSetPath:n(e,"ios_simulator_device_set")}:void 0,android:"android"===t?{serial:f(e,"serial")??r}:void 0}}function H(e){if(c(e)&&"number"==typeof e.durationMs&&"string"==typeof e.measuredAt&&"string"==typeof e.method)return{durationMs:e.durationMs,measuredAt:e.measuredAt,method:e.method,appTarget:f(e,"appTarget"),appBundleId:f(e,"appBundleId")}}function j(e){return Array.isArray(e)?e:[]}function J(e){let t=e.overlayRefs;if(!Array.isArray(t))return;let r=[];for(let e of t){if(!c(e))continue;let t=f(e,"ref"),i=s(e,"rect"),a=s(e,"overlayRect"),n=p(e,"center");t&&i&&a&&n&&r.push({ref:t,label:f(e,"label"),rect:i,overlayRect:a,center:n})}return r}function W(t){return u({stateDir:t.stateDir,daemonBaseUrl:t.daemonBaseUrl,daemonAuthToken:t.daemonAuthToken,daemonTransport:t.daemonTransport,daemonServerMode:t.daemonServerMode,tenant:t.tenant,sessionIsolation:t.sessionIsolation,runId:t.runId,leaseId:t.leaseId,leaseBackend:t.leaseBackend,platform:t.platform,target:t.target,device:t.device,udid:t.udid,serial:t.serial,iosSimulatorDeviceSet:t.iosSimulatorDeviceSet,androidDeviceAllowlist:t.androidDeviceAllowlist,surface:t.surface,activity:t.activity,launchConsole:t.launchConsole,launchArgs:t.launchArgs,relaunch:t.relaunch,shutdown:t.shutdown,saveScript:t.saveScript,noRecord:t.noRecord,backMode:t.backMode,metroHost:t.metroHost,metroPort:t.metroPort,bundleUrl:t.bundleUrl,launchUrl:t.launchUrl,snapshotInteractiveOnly:t.interactiveOnly,snapshotCompact:t.compact,snapshotDepth:t.depth,snapshotScope:t.scope,snapshotRaw:t.raw,snapshotForceFull:t.forceFull,...e(t),appsFilter:t.appsFilter,out:t.out,count:t.count,fps:t.fps,quality:t.quality,hideTouches:t.hideTouches,intervalMs:t.intervalMs,delayMs:t.delayMs,holdMs:t.holdMs,jitterPx:t.jitterPx,pixels:t.pixels,doubleTap:t.doubleTap,clickButton:t.clickButton,pauseMs:t.pauseMs,pattern:t.pattern,headless:t.headless,restart:t.restart,replayUpdate:t.replayUpdate,replayBackend:t.replayBackend,replayEnv:t.replayEnv,replayShellEnv:t.replayShellEnv,failFast:t.failFast,timeoutMs:t.timeoutMs,retries:t.retries,artifactsDir:t.artifactsDir,reportJunit:t.reportJunit,findFirst:t.findFirst,findLast:t.findLast,networkInclude:t.networkInclude,batchOnError:t.batchOnError,batchMaxSteps:t.batchMaxSteps,batchSteps:t.batchSteps,verbose:t.debug})}function Q(e){return u({requestId:e.requestId,cwd:e.cwd,sessionExplicit:void 0!==e.session,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 X(e){return e??"default"}function Y(e,r){if(!e||"object"!=typeof e||Array.isArray(e))throw new t("INVALID_ARGS",`${r} installSource must be an object.`);if("github-actions-artifact"!==et(e.type,`${r} installSource.type`))throw new t("INVALID_ARGS",`${r} installSource.type must be "github-actions-artifact".`);let{owner:i,repo:a}=ee(et(e.repo,`${r} installSource.repo`),`${r} installSource.repo`);return Z(i,a,e.artifact,`${r} installSource.artifact`)}function Z(e,r,i,a){var n;return"number"==typeof i||"string"==typeof(n=i)&&/^\d+$/.test(n.trim())?{kind:"github-actions-artifact",owner:e,repo:r,artifactId:function(e,r){let i="number"==typeof e?e:"string"==typeof e?Number(e):NaN;if(!Number.isInteger(i))throw new t("INVALID_ARGS",`${r} must be an integer.`);return i}(i,a)}:{kind:"github-actions-artifact",owner:e,repo:r,artifactName:et(i,a)}}function ee(e,r){let i=e.indexOf("/");if(i<=0||i===e.length-1||-1!==e.indexOf("/",i+1))throw new t("INVALID_ARGS",`${r} must use owner/repo.`);let a={owner:e.slice(0,i).trim(),repo:e.slice(i+1).trim()};if(!a.owner||!a.repo)throw new t("INVALID_ARGS",`${r} must use owner/repo.`);return a}function et(e,r){let i="string"==typeof e&&e.trim().length>0?e.trim():void 0;if(!i)throw new t("INVALID_ARGS",`${r} must be a non-empty string.`);return i}let er={devices:(e,t)=>_(t),apps:(e,t)=>({..._(t),appsFilter:S(t.appsFilter)}),session:(e,r)=>({..._(r),action:function(e){let r=e??"list";if("list"===r)return r;throw new t("INVALID_ARGS","session only supports list")}(e[0])}),boot:(e,t)=>({..._(t),headless:t.headless}),prepare:(e,t)=>({..._(t),action:I(e[0],"prepare requires subcommand"),timeoutMs:t.timeoutMs}),open:(e,t)=>({..._(t),app:e[0],url:e[1],surface:t.surface,activity:t.activity,launchConsole:t.launchConsole,launchArgs:t.launchArgs,relaunch:t.relaunch,saveScript:t.saveScript,noRecord:t.noRecord}),close:(e,t)=>({..._(t),app:e[0],shutdown:t.shutdown,saveScript:t.saveScript}),install:ea,reinstall:ea,"install-from-source":(e,r)=>({..._(r),source:function(e,r){let i=e[0]?.trim();if(e.length>1)throw new t("INVALID_ARGS","install-from-source accepts either one <url> positional or --github-actions-artifact");let a=r.githubActionsArtifact?function(e,r="--github-actions-artifact"){let i=e.indexOf(":");if(i<=0||i===e.length-1)throw new t("INVALID_ARGS",`${r} must use owner/repo:artifact, for example thymikee/RNCLI83:6635342232`);let{owner:a,repo:n}=ee(e.slice(0,i),r);return Z(a,n,e.slice(i+1),`${r} artifact`)}(r.githubActionsArtifact):void 0,n=r.installSource;if(1!=+!!i+ +!!a+ +!!n)throw new t("INVALID_ARGS","install-from-source requires exactly one source: <url>, --github-actions-artifact, or config installSource");if(!i&&r.header&&r.header.length>0)throw new t("INVALID_ARGS","install-from-source --header is only supported for URL sources");return a||n||{kind:"url",url:i,headers:function(e){if(!e||0===e.length)return;let r={};for(let i of e){let e=i.indexOf(":");if(e<=0)throw new t("INVALID_ARGS",`Invalid --header value "${i}". Expected "name:value".`);let a=i.slice(0,e).trim(),n=i.slice(e+1).trim();if(!a)throw new t("INVALID_ARGS",`Invalid --header value "${i}". Header name cannot be empty.`);r[a]=n}return r}(r.header)}}(e,r),retainPaths:r.retainPaths,retentionMs:r.retentionMs}),push:(e,t)=>({..._(t),app:I(e[0],"push requires bundleOrPackage"),payload:I(e[1],"push requires payloadOrJson")}),"trigger-app-event":(e,t)=>({..._(t),event:I(e[0],"trigger-app-event requires event"),payload:e[1]?R(e[1],"trigger-app-event payload"):void 0})},ei={devices:A(v.devices),boot:A(v.boot),prepare:A(v.prepare,e=>[q(e.action,"prepare requires subcommand")]),apps:A(v.apps),open:A(v.open,function(e){return e.app?e.url?[e.app,e.url]:[e.app]:[]}),close:A(v.close,e=>N(e.app)),install:A(v.install,e=>en(e.app,e.appPath)),reinstall:A(v.reinstall,e=>en(e.app,e.appPath)),"install-from-source":e=>b(g.installSource,[],{...e,installSource:e.source,retainMaterializedPaths:e.retainPaths,materializedPathRetentionMs:e.retentionMs}),push:A(v.push,e=>{var t;return[(t=e).app,"string"==typeof t.payload?t.payload:JSON.stringify(t.payload)]}),"trigger-app-event":A(v.triggerAppEvent,e=>{var t;return[(t=e).event,...t.payload?[JSON.stringify(t.payload)]:[]]})};function ea(e,t,r="install"){return{..._(t),app:I(e[0],`${r} requires app`),appPath:I(e[1],`${r} requires path`)}}function en(e,t){return[q(e,"missing first positional"),q(t,"missing second positional")]}let eo={gesture:function(e,r){let i=e[0],a=e.slice(1),n=_(r);switch(i){case"pan":return{...n,kind:i,origin:{x:Number(a[0]),y:Number(a[1])},delta:{x:Number(a[2]),y:Number(a[3])},durationMs:x(a[4])};case"fling":return{...n,kind:i,direction:a[0],origin:{x:Number(a[1]),y:Number(a[2])},distance:x(a[3]),durationMs:x(a[4])};case"swipe":return{...n,kind:i,preset:a[0],durationMs:x(a[1])};case"pinch":return{...n,kind:i,scale:Number(a[0]),origin:void 0===a[1]||void 0===a[2]?void 0:{x:Number(a[1]),y:Number(a[2])}};case"rotate":return{...n,kind:i,degrees:Number(a[0]),origin:void 0===a[1]||void 0===a[2]?void 0:{x:Number(a[1]),y:Number(a[2])},velocity:x(a[3])};case"transform":return{...n,kind:i,origin:{x:Number(a[0]),y:Number(a[1])},delta:{x:Number(a[2]),y:Number(a[3])},scale:Number(a[4]),degrees:Number(a[5]),durationMs:x(a[6])};default:throw new t("INVALID_ARGS","gesture requires pan, fling, swipe, pinch, rotate, or transform")}}},es={gesture:A(v.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),...M(e.durationMs)];case"fling":return["fling",q(e.direction,"gesture fling requires direction"),String(e.origin?.x),String(e.origin?.y),...M(e.distance),...M(e.durationMs)];case"swipe":return el(e);case"pinch":return["pinch",String(e.scale),...M(e.origin?.x),...M(e.origin?.y)];case"rotate":return["rotate",String(e.degrees),...M(e.origin?.x),...M(e.origin?.y),...M(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),...M(e.durationMs)];default:throw new t("INVALID_ARGS","gesture requires pan, fling, swipe, pinch, rotate, or transform")}}),"gesture-pan":A(v.gesture,function(e){return["pan",String(e.x),String(e.y),String(e.dx),String(e.dy),...M(e.durationMs)]}),"gesture-fling":A(v.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),...M(r),...M(t.durationMs)]}),"gesture-swipe":A(v.gesture,el),"gesture-pinch":A(v.gesture,function(e){return["pinch",String(e.scale),...M(e.x),...M(e.y)]}),"gesture-rotate":A(v.gesture,e=>(function(e){var r=e;if(void 0===r.x&&void 0!==r.y||void 0!==r.x&&void 0===r.y)throw new t("INVALID_ARGS","gesture rotate center requires both x and y");let i=void 0===e.x||void 0===e.y?[]:[String(e.x),String(e.y)];return["rotate",String(e.degrees),...i,...M(e.velocity)]})(e)),"gesture-transform":A(v.gesture,function(e){return["transform",String(e.x),String(e.y),String(e.dx),String(e.dy),String(e.scale),String(e.degrees),...M(e.durationMs)]})};function el(e){return["swipe",q(e.preset,"gesture swipe requires preset"),...M(e.durationMs)]}let eu={perf:(e,t)=>_(t),logs:(e,r)=>({..._(r),action:function(e){if(void 0!==e){if("path"===e||"start"===e||"stop"===e||"doctor"===e||"mark"===e||"clear"===e)return e;throw new t("INVALID_ARGS","logs requires path, start, stop, doctor, mark, or clear")}}(e[0]),message:e.slice(1).join(" ")||void 0,restart:r.restart}),network:(e,r)=>({..._(r),action:function(e){if(void 0!==e){if("dump"===e||"log"===e)return e;throw new t("INVALID_ARGS","network requires dump or log")}}(e[0]),limit:x(e[1]),include:r.networkInclude??function(e){if(void 0!==e){if("summary"===e||"headers"===e||"body"===e||"all"===e)return e;throw new t("INVALID_ARGS","network include mode must be summary, headers, body, or all")}}(e[2])}),record:(e,t)=>({..._(t),action:ep(e[0],"record"),path:e[1],fps:t.fps,quality:t.quality,hideTouches:t.hideTouches}),trace:(e,t)=>({..._(t),action:ep(e[0],"trace"),path:e[1]})},ec={perf:A(v.perf),logs:A(v.logs,e=>{var t;return[(t=e).action??"path",...N(t.message)]}),network:e=>{var t;return b(v.network,[...(t=e).action?[t.action]:[],...M(t.limit)],{...e,networkInclude:e.include})},record:A(v.record,e=>ed(e)),trace:A(v.trace,e=>ed(e))};function ed(e){return[e.action,...N(e.path)]}function ep(e,r){if("start"===e||"stop"===e)return e;throw new t("INVALID_ARGS",`${r} requires start|stop`)}let ef={replay:(e,t)=>({..._(t),path:I(e[0],"replay requires path"),update:t.replayUpdate,backend:t.replayMaestro?"maestro":void 0,env:t.replayEnv}),test:(e,t)=>({..._(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 em(e){return e.backend??(!0===e.maestro?"maestro":void 0)}function eh(e){let t={};for(let[r,i]of Object.entries(e))"string"==typeof i&&r.startsWith("AD_VAR_")&&(t[r]=i);return t}let eg={find:(e,r)=>(function(e,r){var i;let a={...{depth:(i=r).snapshotDepth,raw:i.snapshotRaw},...k(r),first:r.findFirst,last:r.findLast},n=function(e){if("text"===e||"label"===e||"value"===e||"role"===e||"id"===e)return e}(e[0]),o=void 0!==n,s=o?e[1]:e[0],l=o?2:1,u=e[l];if(void 0===u)return{...a,locator:n,query:ev(s)};if("get"===u){let r=e[l+1];if("text"===r)return{...a,locator:n,query:ev(s),action:"getText"};if("attrs"===r)return{...a,locator:n,query:ev(s),action:"getAttrs"};throw new t("INVALID_ARGS","find get only supports text or attrs")}if("wait"===u)return{...a,locator:n,query:ev(s),action:"wait",timeoutMs:x(e[l+1])};if("fill"===u||"type"===u)return{...a,locator:n,query:ev(s),action:u,value:e.slice(l+1).join(" ")};if("click"===u||"focus"===u||"exists"===u)return{...a,locator:n,query:ev(s),action:u};throw new t("INVALID_ARGS",`Unsupported find action: ${u}`)})(e,r),is:(e,r)=>(function(e,r){let i={...w(r),...k(r)},a=e[0],n=P(e.slice(1),{preferTrailingValue:"text"===a});if("text"===a)return{...i,predicate:a,selector:n.selectorExpression,value:n.rest.join(" ")};if("visible"===a||"hidden"===a||"exists"===a||"editable"===a||"selected"===a)return{...i,predicate:a,selector:n.selectorExpression};throw new t("INVALID_ARGS","is requires predicate: visible|hidden|exists|editable|selected|text")})(e,r)},ey={is:A(v.is,e=>{var t;return[(t=e).predicate,t.selector,..."text"===t.predicate?[t.value]:[]]}),find:e=>b(v.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",...M(e.timeoutMs)];case"fill":case"type":return[...t,e.action,e.value]}}(e),{...e,findFirst:e.first,findLast:e.last})};function ev(e){if(void 0===e||""===e)throw new t("INVALID_ARGS","find requires query");return e}let eS={appstate:(e,t)=>_(t),home:(e,t)=>_(t),"app-switcher":(e,t)=>_(t),back:(e,t)=>({..._(t),mode:t.backMode}),rotate:(e,t)=>({..._(t),orientation:C(e[0])}),keyboard:(e,r)=>({..._(r),...function(e){if(e.length>1)throw new t("INVALID_ARGS","keyboard accepts at most one action argument.");return V({action:function(e){let r=e?.toLowerCase();if("get"===r)return"status";if(void 0===r||"status"===r||"dismiss"===r||"enter"===r||"return"===r)return r;throw new t("INVALID_ARGS","keyboard action must be status, get, dismiss, enter, or return.")}(e[0])})}(e)}),clipboard:(e,r)=>({..._(r),...function(e){let r=e[0]?.toLowerCase();if("read"!==r&&"write"!==r)throw new t("INVALID_ARGS","clipboard requires a subcommand: read or write.");if("read"===r){if(1!==e.length)throw new t("INVALID_ARGS","clipboard read does not accept additional arguments.");return{action:r}}if(e.length<2)throw new t("INVALID_ARGS","clipboard write requires text.");return{action:r,text:e.slice(1).join(" ")}}(e)}),"react-native":(e,r)=>({..._(r),action:function(e){if("dismiss-overlay"===e)return e;throw new t("INVALID_ARGS","react-native supports only: dismiss-overlay")}(e[0])})},eb={appstate:A(v.appState),back:e=>{var t;return b(v.back,[],{...e,backMode:"in-app"===(t=e.mode)||"system"===t?t:void 0})},home:A(v.home),rotate:A(v.rotate,e=>[q(e.orientation,"rotate requires orientation")]),"app-switcher":A(v.appSwitcher),keyboard:A(v.keyboard,e=>N(e.action)),clipboard:A(v.clipboard,e=>{var t;return"read"===(t=e).action?["read"]:["write",t.text]}),"react-native":A(v.reactNative,e=>[q(e.action,"react-native requires action")])},ew={...ei,...L,...G,...es,...ey,...ec,replay:e=>b(v.replay,[q(e.path,"replay requires path")],{...e,replayUpdate:e.update,replayBackend:em(e),replayEnv:e.env,replayShellEnv:eh(process.env)}),test:e=>b(v.test,e.paths??[],{...e,replayUpdate:e.update,replayBackend:em(e),replayEnv:e.env,replayShellEnv:eh(process.env)}),...eb,batch:e=>b(v.batch,[],{...e,batchSteps:function(e){if(!Array.isArray(e)||0===e.length)throw new t("INVALID_ARGS","batch requires a non-empty steps array.");return e.map((e,r)=>{var i;let a,n,o,s,l,u;return o=function(e,r){let i="string"==typeof e.command?e.command.trim().toLowerCase():"";if(eI.has(i))return i;throw new t("INVALID_ARGS",`Batch step ${r} command is not available through command batch: ${String(e.command)}`)}(n=function(e,r){if(!e||"object"!=typeof e||Array.isArray(e))throw new t("INVALID_ARGS",`Invalid batch step ${r}.`);return e}(e,i=r+1),i),s=function(e,r){let i=e.input;if(!i||"object"!=typeof i||Array.isArray(i))throw new t("INVALID_ARGS",`Batch step ${r} input must be an object.`);return i}(n,i),l=function(e,r){let i=e.runtime;if(void 0!==i&&(!i||"object"!=typeof i||Array.isArray(i)))throw new t("INVALID_ARGS",`Batch step ${r} runtime must be an object.`);return i}(n,i),{...u={command:(a=e_(o,s)).command,positionals:a.positionals,flags:W(a.options),runtime:a.options.runtime},runtime:l??u.runtime}})}(e.steps),batchOnError:e.onError,batchMaxSteps:e.maxSteps})},eA=y,eI=D(eA);function e_(e,t){return ew[e](t)}export{er as appCliReaders,eA as batchCommandNames,W as buildFlags,Q as buildMeta,eo as gestureCliReaders,E as normalizeDeployResult,z as normalizeDevice,U as normalizeInstallFromSourceResult,$ as normalizeMaterializationReleaseResult,O as normalizeOpenDevice,B as normalizeRuntimeHints,K as normalizeSession,H as normalizeStartupSample,eu as observabilityCliReaders,Y as parseInstallSourceConfig,e_ as prepareDaemonCommandRequest,J as readScreenshotOverlayRefs,j as readSnapshotNodes,ef as replayCliReaders,X as resolveSessionName,eg as selectorCliReaders,eS as systemCliReaders};
@@ -0,0 +1,4 @@
1
+ import e from"node:path";import t from"node:crypto";import n from"node:fs";import{resolveUserPath as r,expandUserHomePath as o}from"./3267.js";import{findProjectRoot as s}from"./9671.js";function i(e,t){let n=[],r=e+t.toString(),o=r.indexOf("\n");for(;-1!==o;){let e=r.slice(0,o).trim();r=r.slice(o+1),e&&n.push(e),o=r.indexOf("\n")}return{lines:n,buffer:r}}function a(t){let n,s=(n=(t??"").trim())?r(n):e.join(o("~"),".agent-device");return{baseDir:s,infoPath:e.join(s,"daemon.json"),lockPath:e.join(s,"daemon.lock"),logPath:e.join(s,"daemon.log"),sessionsDir:e.join(s,"sessions")}}function l(e){let t=(e??"").trim().toLowerCase();return"http"===t?"http":"dual"===t?"dual":"socket"}function u(e){let t=(e??"").trim().toLowerCase();return"auto"===t?"auto":"socket"===t?"socket":"http"===t?"http":"auto"}function f(e){return"tenant"===(e??"").trim().toLowerCase()?"tenant":"none"}function p(e){if(!e)return;let t=e.trim();if(t&&/^[a-zA-Z0-9._-]{1,128}$/.test(t))return t}let m=/(?:^|[^\w$.])(?:import|export)\s+(?:type\s+)?(?:[^'"`]*?\s+from\s+)?['"]([^'"]+)['"]/gm,c=/import\(\s*['"]([^'"]+)['"]\s*\)/gm,d=[".ts",".tsx",".js",".jsx",".mjs",".cjs"];function $(){let e=process.argv[1];return e?g(e):"unknown"}function g(r,o=s()){try{let s=e.resolve(o),i=[e.resolve(r)],a=new Set,l=[];for(;i.length>0;){let t=i.pop();if(!t||a.has(t))continue;a.add(t);let r=n.statSync(t);if(!r.isFile())continue;let o=e.relative(s,t)||t;l.push(`${o}:${r.size}:${Math.trunc(r.mtimeMs)}`);let u=n.readFileSync(t,"utf8");for(let n of function(e){let t=new Set;return h(e,m,t),h(e,c,t),[...t]}(u)){let r=function(t,n){let r=e.resolve(e.dirname(t),n),o=y(r);if(o)return o;for(let e of d){let t=y(`${r}${e}`);if(t)return t}for(let t of d){let n=y(e.join(r,`index${t}`));if(n)return n}return null}(t,n);r&&i.push(r)}}let u=l.sort().join("|"),f=t.createHash("sha1").update(u).digest("hex");return`graph:${l.length}:${f}`}catch{return"unknown"}}function h(e,t,n){t.lastIndex=0;let r=null;for(;null!==(r=t.exec(e));){let e=r[1]?.trim();e?.startsWith(".")&&n.add(e)}}function y(e){try{return n.statSync(e).isFile()?e:null}catch{return null}}let v=/^[A-Za-z0-9_@%+=:,./-]+$/;function S(e){return`'${e.replaceAll("'","'\\''")}'`}function x(e){return v.test(e)?e:S(e)}function j(e){let t=Math.max(0,e)/1e3;return t>=10?`${t.toFixed(1)}s`:t>=1?`${t.toFixed(2)}s`:`${t.toFixed(3).replace(/0+$/,"").replace(/\.$/,"")}s`}function D(e){return e.meta?.requestProgress==="replay-test"}function P(e){return!!e&&"object"==typeof e&&"progress"===e.type&&!!e.event}function _(e){return!!e&&"object"==typeof e&&"response"===e.type&&!!e.response}function A(e){return`${JSON.stringify({type:"progress",event:e})}
2
+ `}function C(e){return`${JSON.stringify({type:"response",response:e})}
3
+ `}function M(e){return`${JSON.stringify({type:"response",response:e})}
4
+ `}function k(t){var n,r,o;let s,i;if("replay-test"!==t.type)return;let a=(n=t,(s=n.title?.trim())?JSON.stringify(s):e.basename(n.file)),l=void 0!==t.durationMs?` (${i=j((r=t).durationMs??0),r.attempt&&r.attempt>1&&!r.retrying?`total ${i}`:i})`:"",u=void 0===(o=t).attempt?"":"fail"===o.status&&o.retrying&&void 0!==o.maxAttempts?` attempt ${o.attempt}/${o.maxAttempts} retrying`:o.attempt>1?` after ${o.attempt} attempts`:"",f=t.message?.replace(/\s+/g," ").trim();return"pass"===t.status?`PASS ${a}${u}${l}`:"skip"===t.status?[`SKIP ${a}`,f?` ${f}`:""].filter(Boolean).join("\n"):[`FAIL ${a}${u}${l}`,f?` ${f}`:"",t.artifactsDir?` artifacts: ${t.artifactsDir}`:""].filter(Boolean).join("\n")}export{g as computeDaemonCodeSignature,i as consumeTextLines,j as formatDurationSeconds,k as formatRequestProgressEvent,P as isDaemonProgressEnvelope,_ as isDaemonResponseEnvelope,p as normalizeTenantId,$ as resolveDaemonCodeSignature,a as resolveDaemonPaths,l as resolveDaemonServerMode,u as resolveDaemonTransportPreference,f as resolveSessionIsolationMode,A as serializeDaemonProgressEnvelope,C as serializeDaemonResponseEnvelope,M as serializeDaemonRpcResponseEnvelope,S as shellQuote,x as shellQuoteIfNeeded,D as shouldStreamRequestProgress};