agent-device 0.18.1 → 0.18.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android-multitouch-helper/dist/{agent-device-android-multitouch-helper-0.18.1.apk → agent-device-android-multitouch-helper-0.18.2.apk} +0 -0
- package/android-multitouch-helper/dist/agent-device-android-multitouch-helper-0.18.2.apk.sha256 +1 -0
- package/android-multitouch-helper/dist/{agent-device-android-multitouch-helper-0.18.1.manifest.json → agent-device-android-multitouch-helper-0.18.2.manifest.json} +4 -4
- package/android-snapshot-helper/dist/{agent-device-android-snapshot-helper-0.18.1.apk → agent-device-android-snapshot-helper-0.18.2.apk} +0 -0
- package/android-snapshot-helper/dist/agent-device-android-snapshot-helper-0.18.2.apk.sha256 +1 -0
- package/android-snapshot-helper/dist/{agent-device-android-snapshot-helper-0.18.1.manifest.json → agent-device-android-snapshot-helper-0.18.2.manifest.json} +6 -6
- package/apple-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +2 -1
- package/dist/src/1986.js +1 -1
- package/dist/src/2948.js +16 -16
- package/dist/src/3340.js +8 -8
- package/dist/src/4428.js +3 -3
- package/dist/src/495.js +5 -5
- package/dist/src/6849.js +1 -1
- package/dist/src/7871.js +1 -1
- package/dist/src/8184.js +1 -1
- package/dist/src/8414.js +2 -2
- package/dist/src/8875.js +4 -1
- package/dist/src/9624.js +1 -1
- package/dist/src/9722.js +36 -36
- package/dist/src/android.js +1 -1
- package/dist/src/apps.js +9 -9
- package/dist/src/audio-probe.js +1 -1
- package/dist/src/batch.d.ts +1 -1
- package/dist/src/cli-help.js +9 -7
- package/dist/src/cli.js +23 -23
- package/dist/src/contracts.d.ts +1 -1
- package/dist/src/devices.js +1 -1
- package/dist/src/devices~1.js +1 -1
- package/dist/src/index.d.ts +42 -15
- package/dist/src/input-actions.js +1 -1
- package/dist/src/interaction.js +1 -1
- package/dist/src/interactor.js +1 -1
- package/dist/src/internal/bin.js +1 -1
- package/dist/src/linux.js +1 -1
- package/dist/src/record-trace-recording.js +3 -3
- package/dist/src/remote-config.d.ts +1 -1
- package/dist/src/selector-runtime.js +1 -1
- package/dist/src/selectors.d.ts +8 -4
- package/dist/src/session.js +11 -11
- package/dist/src/simulator.js +2 -2
- package/dist/src/snapshot.js +2 -2
- package/dist/src/web.js +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
- package/android-multitouch-helper/dist/agent-device-android-multitouch-helper-0.18.1.apk.sha256 +0 -1
- package/android-snapshot-helper/dist/agent-device-android-snapshot-helper-0.18.1.apk.sha256 +0 -1
- package/dist/src/432.js +0 -4
|
Binary file
|
package/android-multitouch-helper/dist/agent-device-android-multitouch-helper-0.18.2.apk.sha256
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1c8e6f04f5453ecea2e26281896faf7d940237c0011ba8d50b436c0b7ba82c4e agent-device-android-multitouch-helper-0.18.2.apk
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "android-multitouch-helper",
|
|
3
|
-
"version": "0.18.
|
|
4
|
-
"assetName": "agent-device-android-multitouch-helper-0.18.
|
|
5
|
-
"sha256": "
|
|
3
|
+
"version": "0.18.2",
|
|
4
|
+
"assetName": "agent-device-android-multitouch-helper-0.18.2.apk",
|
|
5
|
+
"sha256": "1c8e6f04f5453ecea2e26281896faf7d940237c0011ba8d50b436c0b7ba82c4e",
|
|
6
6
|
"packageName": "com.callstack.agentdevice.multitouchhelper",
|
|
7
|
-
"versionCode":
|
|
7
|
+
"versionCode": 18002,
|
|
8
8
|
"instrumentationRunner": "com.callstack.agentdevice.multitouchhelper/.MultiTouchInstrumentation",
|
|
9
9
|
"statusProtocol": "android-multitouch-helper-v1"
|
|
10
10
|
}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
a91e0b0b4d8b5b1dc6d1e25abe1491efefa8b8d89cc5c406f1fd84a302e56ebf agent-device-android-snapshot-helper-0.18.2.apk
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "android-snapshot-helper",
|
|
3
|
-
"version": "0.18.
|
|
4
|
-
"releaseTag": "v0.18.
|
|
5
|
-
"assetName": "agent-device-android-snapshot-helper-0.18.
|
|
3
|
+
"version": "0.18.2",
|
|
4
|
+
"releaseTag": "v0.18.2",
|
|
5
|
+
"assetName": "agent-device-android-snapshot-helper-0.18.2.apk",
|
|
6
6
|
"apkUrl": null,
|
|
7
|
-
"sha256": "
|
|
8
|
-
"checksumName": "agent-device-android-snapshot-helper-0.18.
|
|
7
|
+
"sha256": "a91e0b0b4d8b5b1dc6d1e25abe1491efefa8b8d89cc5c406f1fd84a302e56ebf",
|
|
8
|
+
"checksumName": "agent-device-android-snapshot-helper-0.18.2.apk.sha256",
|
|
9
9
|
"packageName": "com.callstack.agentdevice.snapshothelper",
|
|
10
|
-
"versionCode":
|
|
10
|
+
"versionCode": 18002,
|
|
11
11
|
"instrumentationRunner": "com.callstack.agentdevice.snapshothelper/.SnapshotInstrumentation",
|
|
12
12
|
"minSdk": 23,
|
|
13
13
|
"targetSdk": 36,
|
|
@@ -46,7 +46,8 @@ final class RunnerTests: XCTestCase {
|
|
|
46
46
|
let firstInteractionAfterActivateDelay: TimeInterval = 0.25
|
|
47
47
|
let scrollInteractionIdleTimeoutDefault: TimeInterval = 1.0
|
|
48
48
|
let tvRemoteDoublePressDelayDefault: TimeInterval = 0.0
|
|
49
|
-
|
|
49
|
+
// Keep a periodic XCTest liveness marker in runner.log without flooding long-lived sessions.
|
|
50
|
+
let xctestIdleKeepaliveInterval: TimeInterval = 60.0
|
|
50
51
|
let minRecordingFps = 1
|
|
51
52
|
let maxRecordingFps = 120
|
|
52
53
|
var needsPostSnapshotInteractionDelay = false
|
package/dist/src/1986.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{AppError as e}from"./485.js";import{daemonRuntimeSchema as a}from"./6849.js";let n={alert:"alert",audio:"audio",appState:"appstate",appSwitcher:"app-switcher",artifacts:"artifacts",apps:"apps",back:"back",batch:"batch",boot:"boot",click:"click",close:"close",clipboard:"clipboard",devices:"devices",doctor:"doctor",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",shutdown:"shutdown",snapshot:"snapshot",swipe:"swipe",test:"test",trace:"trace",triggerAppEvent:"trigger-app-event",type:"type",viewport:"viewport",wait:"wait"},t={installSource:"install_source",leaseAllocate:"lease_allocate",leaseHeartbeat:"lease_heartbeat",leaseRelease:"lease_release",releaseMaterializedPaths:"release_materialized_paths",runtime:"runtime",sessionList:"session_list"},i={cdp:"cdp",auth:"auth",connect:"connect",connection:"connection",debug:"debug",disconnect:"disconnect",mcp:"mcp",metro:"metro",proxy:"proxy",reactDevtools:"react-devtools",session:"session",web:"web"},o=["pan","fling","swipe","pinch","rotate","transform"],r=`gesture requires one of: ${o.join(", ")}`,l=s(i.auth,i.cdp,i.connect,i.connection,i.disconnect,i.mcp,i.proxy,i.reactDevtools,i.web,n.prepare);function s(...e){return new Set(e)}function c(){return[...Object.values(n),...Object.values(i)].sort()}function d(e){return Object.values(n).includes(e)||e===i.debug||e===i.metro||e===i.session}function p(){return c().filter(e=>!l.has(e))}function u(a,n,t,i){let o=t(a[n]);if(void 0===o)throw new e("COMMAND_FAILED",i,{response:a});return o}function m(e,a){return u(e,a,D,`Daemon response is missing "${a}".`)}function b(e,a){return D(e[a])}function h(e,a){var n;let t;return n=D,null===(t=e[a])?null:n(t)}function y(e,a){return u(e,a,w,`Daemon response is missing numeric "${a}".`)}function f(e,a){return u(e,a,k,`Daemon response has invalid "${a}".`)}function g(e,a){return u(e,a,_,`Daemon response has invalid "${a}".`)}function S(e,a){return function(e){return"tv"===e||"mobile"===e||"desktop"===e?e:void 0}(e[a])??"mobile"}function v(e){if(!E(e))return;let a=x(e,"x"),n=x(e,"y"),t=x(e,"width"),i=x(e,"height");if(void 0!==a&&void 0!==n&&void 0!==t&&void 0!==i)return{x:a,y:n,width:t,height:i}}function A(e){if(!E(e))return;let a=x(e,"x"),n=x(e,"y");if(void 0!==a&&void 0!==n)return{x:a,y:n}}function x(e,a){let n=e[a];return"number"==typeof n?n:void 0}function D(e){return"string"==typeof e&&e.length>0?e:void 0}function w(e){return"number"==typeof e&&Number.isFinite(e)?e:void 0}function k(e){return"ios"===e||"macos"===e||"android"===e||"linux"===e||"web"===e?e:void 0}function _(e){return"simulator"===e||"emulator"===e||"device"===e?e:void 0}s(i.auth,i.cdp,i.connect,i.connection,i.debug,i.disconnect,i.mcp,i.metro,i.proxy,i.reactDevtools,i.session,i.web,n.artifacts,n.appState,n.prepare,n.batch,n.devices,n.doctor,n.gesture,n.replay,n.test,n.trace);function B(a){if(!E(a))throw new e("COMMAND_FAILED","Daemon returned an unexpected response shape.",{value:a});return a}function E(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function N(e){let a={};for(let[n,t]of Object.entries(e))void 0!==t&&(a[n]=t);return a}function R(e){return e.split("\n").map(e=>e.trim()).filter(e=>e.length>0)}let C=a=>new e("INVALID_ARGS",a);function G(e){return Number.isInteger(e)&&e>=1&&e<=1e3}function K(e,a,n=C){if(e>a)throw n(`batch has ${e} steps; max allowed is ${a}.`)}function M(e,a,n=C){if(!E(e))throw n(`Invalid batch step ${a}.`);return e}function I(e,a,n=C){let t=e.input;if(!E(t))throw n(`Batch step ${a} input must be an object.`);return t}function O(e,n,t=C){if(void 0!==e)try{return a.parse(e)}catch(e){throw t(`Batch step ${n} runtime is invalid: ${e instanceof Error?e.message:String(e)}`)}}function P(e){let a=[];for(let n of e)n.daemon&&a.push({command:n.name,...n.daemon});return a}function L(e){let a={};for(let n of e)n.capability&&(a[n.name]=n.capability);return a}let $={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0},T={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0,selectorValidationExempt:!0},U=()=>!0,j=e=>e.command===n.test&&("number"==typeof e.flags?.shardAll||"number"==typeof e.flags?.shardSplit),H={simulator:!0,device:!0},F={emulator:!0,device:!0,unknown:!0},q={device:!0},V={},z={apple:H,android:F,linux:q},Y={apple:H,android:F,linux:V},J=[{name:t.leaseAllocate,daemon:{route:"lease",...$},batchable:!1},{name:t.leaseHeartbeat,daemon:{route:"lease",...$},batchable:!1},{name:t.leaseRelease,daemon:{route:"lease",...$},batchable:!1},{name:n.artifacts,daemon:{route:"lease",...$},batchable:!1},{name:t.sessionList,daemon:{route:"session",sessionKind:"inventory",...T},batchable:!1},{name:n.devices,daemon:{route:"session",sessionKind:"inventory",lockPolicySelectorOverride:!0,...T},batchable:!0},{name:n.doctor,daemon:{route:"session",sessionKind:"inventory",lockPolicySelectorOverride:!0,allowSessionlessDefaultDevice:U,...T},batchable:!0},{name:n.apps,daemon:{route:"session",sessionKind:"inventory",lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.boot,daemon:{route:"session",sessionKind:"state"},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.shutdown,daemon:{route:"session",sessionKind:"state"},capability:{apple:{simulator:!0},android:{emulator:!0},linux:V},batchable:!0},{name:n.appState,daemon:{route:"session",sessionKind:"state"},batchable:!0},{name:n.perf,daemon:{route:"session",sessionKind:"observability"},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.logs,daemon:{route:"session",sessionKind:"observability"},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.network,daemon:{route:"session",sessionKind:"observability"},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.audio,daemon:{route:"session",sessionKind:"observability"},capability:{apple:H,android:{emulator:!0},linux:V},batchable:!0},{name:n.replay,daemon:{route:"session",sessionKind:"replay",skipSessionlessProviderDevice:j},batchable:!1},{name:n.test,daemon:{route:"session",sessionKind:"replay",skipSessionlessProviderDevice:j},batchable:!0},{name:t.runtime,daemon:{route:"session"},batchable:!1},{name:n.clipboard,daemon:{route:"session",replayScopedAction:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:n.keyboard,daemon:{route:"session",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.install,daemon:{route:"session"},capability:Y,batchable:!0},{name:n.reinstall,daemon:{route:"session"},capability:Y,batchable:!0},{name:t.installSource,daemon:{route:"session"},batchable:!1},{name:t.releaseMaterializedPaths,daemon:{route:"session",...T},batchable:!1},{name:n.push,daemon:{route:"session"},capability:{apple:{simulator:!0},android:F,linux:V},batchable:!0},{name:n.triggerAppEvent,daemon:{route:"session"},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.open,daemon:{route:"session",allowSessionlessDefaultDevice:U},capability:z,batchable:!0},{name:n.prepare,daemon:{route:"session"},batchable:!1},{name:n.batch,daemon:{route:"session"},batchable:!1},{name:n.close,daemon:{route:"session",allowInvalidRecording:!0},capability:z,batchable:!0},{name:n.snapshot,daemon:{route:"snapshot",replayScopedAction:!0},capability:z,batchable:!0},{name:n.diff,daemon:{route:"snapshot",replayScopedAction:!0},capability:z,batchable:!0},{name:n.wait,daemon:{route:"snapshot",replayScopedAction:!0},capability:z,batchable:!0},{name:n.alert,daemon:{route:"snapshot",replayScopedAction:!0},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.settings,daemon:{route:"snapshot",replayScopedAction:!0},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.reactNative,daemon:{route:"reactNative",replayScopedAction:!0},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.record,daemon:{route:"recordTrace",replayScopedAction:!0,allowInvalidRecording:!0,allowSessionlessDefaultDevice:e=>"start"===(e.positionals?.[0]??"").toLowerCase()},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.trace,daemon:{route:"recordTrace"},batchable:!0},{name:n.find,daemon:{route:"find",replayScopedAction:!0},capability:z,batchable:!0},{name:n.click,daemon:{route:"interaction",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:n.fill,daemon:{route:"interaction",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:n.longPress,daemon:{route:"interaction",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:n.press,daemon:{route:"interaction",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:n.type,daemon:{route:"interaction",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:z,batchable:!0},{name:n.get,daemon:{route:"interaction",replayScopedAction:!0},capability:z,batchable:!0},{name:n.is,daemon:{route:"interaction",replayScopedAction:!0},capability:z,batchable:!0},{name:n.back,daemon:{route:"generic",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:n.gesture,daemon:{route:"generic",replayScopedAction:!0,androidBlockingDialogGuard:!0},batchable:!0},{name:n.home,daemon:{route:"generic",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:n.rotate,daemon:{route:"generic",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.scroll,daemon:{route:"generic",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:n.swipe,daemon:{route:"generic",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:"pinch",daemon:{route:"generic",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:V},batchable:!1},{name:n.focus,daemon:{route:"generic",androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:n.screenshot,daemon:{route:"generic",replayScopedAction:!0},capability:z,batchable:!0},{name:n.viewport,daemon:{route:"generic",replayScopedAction:!0},capability:{apple:H,android:F,linux:V},batchable:!1},{name:"pan",daemon:{route:"generic",androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!1},{name:"fling",daemon:{route:"generic",androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:V},batchable:!1},{name:"rotate-gesture",daemon:{route:"generic",androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:V},batchable:!1},{name:"transform-gesture",daemon:{route:"generic",androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:V},batchable:!1},{name:n.appSwitcher,capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.installFromSource,capability:Y,batchable:!0}],Q=new Set(p()),W=J.map(e=>({...e,mcpExposed:Q.has(e.name)})),X=W.filter(e=>e.batchable).map(e=>e.name),Z=new Set(["batch","replay"]),ee=["command","positionals","flags","runtime"],ea=["platform","target","device","udid","serial","verbose","out"],en=new Set(X);function et(e){return"string"==typeof e?e.trim().toLowerCase():""}function ei(a,n){let t=et(a);if(en.has(t))return t;throw new e("INVALID_ARGS",`Batch step ${n} command is not available through command batch: ${String(a)}`)}function eo(a,n){if(Z.has(a))throw new e("INVALID_ARGS",`Batch step ${n} cannot run ${a}.`)}export{ee as BATCH_DAEMON_STEP_KEYS,o as GESTURE_KINDS,r as GESTURE_SUBCOMMAND_ERROR,ea as INHERITED_PARENT_FLAG_KEYS,t as INTERNAL_COMMANDS,n as PUBLIC_COMMANDS,X as STRUCTURED_BATCH_COMMAND_NAMES,B as asRecord,eo as assertBatchRuntimeCommandAllowed,K as assertBatchStepCount,W as commandDescriptors,L as deriveCapabilityMatrix,P as deriveDaemonCommandDescriptors,d as isClientBackedCliCommandName,E as isRecord,G as isValidBatchMaxSteps,c as listCliCommandNames,p as listMcpExposedCommandNames,et as normalizeBatchCommandName,O as parseBatchStepRuntime,A as parsePoint,v as parseRect,I as readBatchStepInputObject,M as readBatchStepRecord,S as readDeviceTarget,h as readNullableString,b as readOptionalString,g as readRequiredDeviceKind,y as readRequiredNumber,f as readRequiredPlatform,m as readRequiredString,ei as readStructuredBatchCommandName,R as splitNonEmptyTrimmedLines,N as stripUndefined};
|
|
1
|
+
import{AppError as e}from"./485.js";import{daemonRuntimeSchema as a}from"./6849.js";let n={alert:"alert",audio:"audio",appState:"appstate",appSwitcher:"app-switcher",artifacts:"artifacts",apps:"apps",back:"back",batch:"batch",boot:"boot",click:"click",close:"close",clipboard:"clipboard",devices:"devices",doctor:"doctor",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",shutdown:"shutdown",snapshot:"snapshot",swipe:"swipe",test:"test",trace:"trace",triggerAppEvent:"trigger-app-event",type:"type",viewport:"viewport",wait:"wait"},i={installSource:"install_source",leaseAllocate:"lease_allocate",leaseHeartbeat:"lease_heartbeat",leaseRelease:"lease_release",releaseMaterializedPaths:"release_materialized_paths",runtime:"runtime",sessionList:"session_list"},t={cdp:"cdp",auth:"auth",connect:"connect",connection:"connection",debug:"debug",disconnect:"disconnect",mcp:"mcp",metro:"metro",proxy:"proxy",reactDevtools:"react-devtools",session:"session",web:"web"},o=["pan","fling","swipe","pinch","rotate","transform"],r=`gesture requires one of: ${o.join(", ")}`,l=s(t.auth,t.cdp,t.connect,t.connection,t.disconnect,t.mcp,t.proxy,t.reactDevtools,t.web,n.prepare);function s(...e){return new Set(e)}function c(){return[...Object.values(n),...Object.values(t)].sort()}function d(e){return Object.values(n).includes(e)||e===t.debug||e===t.metro||e===t.session}function p(){return c().filter(e=>!l.has(e))}function u(a,n,i,t){let o=i(a[n]);if(void 0===o)throw new e("COMMAND_FAILED",t,{response:a});return o}function m(e,a){return u(e,a,D,`Daemon response is missing "${a}".`)}function b(e,a){return D(e[a])}function h(e,a){var n;let i;return n=D,null===(i=e[a])?null:n(i)}function y(e,a){return u(e,a,w,`Daemon response is missing numeric "${a}".`)}function f(e,a){return u(e,a,k,`Daemon response has invalid "${a}".`)}function g(e,a){return u(e,a,_,`Daemon response has invalid "${a}".`)}function S(e,a){return function(e){return"tv"===e||"mobile"===e||"desktop"===e?e:void 0}(e[a])??"mobile"}function v(e){if(!E(e))return;let a=x(e,"x"),n=x(e,"y"),i=x(e,"width"),t=x(e,"height");if(void 0!==a&&void 0!==n&&void 0!==i&&void 0!==t)return{x:a,y:n,width:i,height:t}}function A(e){if(!E(e))return;let a=x(e,"x"),n=x(e,"y");if(void 0!==a&&void 0!==n)return{x:a,y:n}}function x(e,a){let n=e[a];return"number"==typeof n?n:void 0}function D(e){return"string"==typeof e&&e.length>0?e:void 0}function w(e){return"number"==typeof e&&Number.isFinite(e)?e:void 0}function k(e){return"apple"===e?"ios":"ios"===e||"macos"===e||"android"===e||"linux"===e||"web"===e?e:void 0}function _(e){return"simulator"===e||"emulator"===e||"device"===e?e:void 0}s(t.auth,t.cdp,t.connect,t.connection,t.debug,t.disconnect,t.mcp,t.metro,t.proxy,t.reactDevtools,t.session,t.web,n.artifacts,n.appState,n.prepare,n.batch,n.devices,n.doctor,n.gesture,n.replay,n.test,n.trace);function B(a){if(!E(a))throw new e("COMMAND_FAILED","Daemon returned an unexpected response shape.",{value:a});return a}function E(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function N(e){let a={};for(let[n,i]of Object.entries(e))void 0!==i&&(a[n]=i);return a}function R(e){return e.split("\n").map(e=>e.trim()).filter(e=>e.length>0)}let C=a=>new e("INVALID_ARGS",a);function G(e){return Number.isInteger(e)&&e>=1&&e<=1e3}function K(e,a,n=C){if(e>a)throw n(`batch has ${e} steps; max allowed is ${a}.`)}function M(e,a,n=C){if(!E(e))throw n(`Invalid batch step ${a}.`);return e}function I(e,a,n=C){let i=e.input;if(!E(i))throw n(`Batch step ${a} input must be an object.`);return i}function O(e,n,i=C){if(void 0!==e)try{return a.parse(e)}catch(e){throw i(`Batch step ${n} runtime is invalid: ${e instanceof Error?e.message:String(e)}`)}}function P(e){let a=[];for(let n of e)n.daemon&&a.push({command:n.name,...n.daemon});return a}function L(e){let a={};for(let n of e)n.capability&&(a[n.name]=n.capability);return a}let $={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0},T={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0,selectorValidationExempt:!0},U=()=>!0,j=e=>e.command===n.test&&("number"==typeof e.flags?.shardAll||"number"==typeof e.flags?.shardSplit),H={simulator:!0,device:!0},F={emulator:!0,device:!0,unknown:!0},q={device:!0},V={},z={apple:H,android:F,linux:q},Y={apple:H,android:F,linux:V},J=[{name:i.leaseAllocate,daemon:{route:"lease",...$},batchable:!1},{name:i.leaseHeartbeat,daemon:{route:"lease",...$},batchable:!1},{name:i.leaseRelease,daemon:{route:"lease",...$},batchable:!1},{name:n.artifacts,daemon:{route:"lease",...$},batchable:!1},{name:i.sessionList,daemon:{route:"session",sessionKind:"inventory",...T},batchable:!1},{name:n.devices,daemon:{route:"session",sessionKind:"inventory",lockPolicySelectorOverride:!0,...T},batchable:!0},{name:n.doctor,daemon:{route:"session",sessionKind:"inventory",lockPolicySelectorOverride:!0,allowSessionlessDefaultDevice:U,...T},batchable:!0},{name:n.apps,daemon:{route:"session",sessionKind:"inventory",lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.boot,daemon:{route:"session",sessionKind:"state"},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.shutdown,daemon:{route:"session",sessionKind:"state"},capability:{apple:{simulator:!0},android:{emulator:!0},linux:V},batchable:!0},{name:n.appState,daemon:{route:"session",sessionKind:"state"},batchable:!0},{name:n.perf,daemon:{route:"session",sessionKind:"observability"},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.logs,daemon:{route:"session",sessionKind:"observability"},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.network,daemon:{route:"session",sessionKind:"observability"},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.audio,daemon:{route:"session",sessionKind:"observability"},capability:{apple:H,android:{emulator:!0},linux:V},batchable:!0},{name:n.replay,daemon:{route:"session",sessionKind:"replay",skipSessionlessProviderDevice:j},batchable:!1},{name:n.test,daemon:{route:"session",sessionKind:"replay",skipSessionlessProviderDevice:j},batchable:!0},{name:i.runtime,daemon:{route:"session"},batchable:!1},{name:n.clipboard,daemon:{route:"session",replayScopedAction:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:n.keyboard,daemon:{route:"session",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.install,daemon:{route:"session"},capability:Y,batchable:!0},{name:n.reinstall,daemon:{route:"session"},capability:Y,batchable:!0},{name:i.installSource,daemon:{route:"session"},batchable:!1},{name:i.releaseMaterializedPaths,daemon:{route:"session",...T},batchable:!1},{name:n.push,daemon:{route:"session"},capability:{apple:{simulator:!0},android:F,linux:V},batchable:!0},{name:n.triggerAppEvent,daemon:{route:"session"},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.open,daemon:{route:"session",allowSessionlessDefaultDevice:U},capability:z,batchable:!0},{name:n.prepare,daemon:{route:"session"},batchable:!1},{name:n.batch,daemon:{route:"session"},batchable:!1},{name:n.close,daemon:{route:"session",allowInvalidRecording:!0},capability:z,batchable:!0},{name:n.snapshot,daemon:{route:"snapshot",replayScopedAction:!0},capability:z,batchable:!0},{name:n.diff,daemon:{route:"snapshot",replayScopedAction:!0},capability:z,batchable:!0},{name:n.wait,daemon:{route:"snapshot",replayScopedAction:!0},capability:z,batchable:!0},{name:n.alert,daemon:{route:"snapshot",replayScopedAction:!0},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.settings,daemon:{route:"snapshot",replayScopedAction:!0},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.reactNative,daemon:{route:"reactNative",replayScopedAction:!0},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.record,daemon:{route:"recordTrace",replayScopedAction:!0,allowInvalidRecording:!0,allowSessionlessDefaultDevice:e=>"start"===(e.positionals?.[0]??"").toLowerCase()},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.trace,daemon:{route:"recordTrace"},batchable:!0},{name:n.find,daemon:{route:"find",replayScopedAction:!0},capability:z,batchable:!0},{name:n.click,daemon:{route:"interaction",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:n.fill,daemon:{route:"interaction",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:n.longPress,daemon:{route:"interaction",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:n.press,daemon:{route:"interaction",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:n.type,daemon:{route:"interaction",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:z,batchable:!0},{name:n.get,daemon:{route:"interaction",replayScopedAction:!0},capability:z,batchable:!0},{name:n.is,daemon:{route:"interaction",replayScopedAction:!0},capability:z,batchable:!0},{name:n.back,daemon:{route:"generic",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:n.gesture,daemon:{route:"generic",replayScopedAction:!0,androidBlockingDialogGuard:!0},batchable:!0},{name:n.home,daemon:{route:"generic",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:n.rotate,daemon:{route:"generic",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.scroll,daemon:{route:"generic",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:n.swipe,daemon:{route:"generic",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:"pinch",daemon:{route:"generic",replayScopedAction:!0,androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:V},batchable:!1},{name:n.focus,daemon:{route:"generic",androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!0},{name:n.screenshot,daemon:{route:"generic",replayScopedAction:!0},capability:z,batchable:!0},{name:n.viewport,daemon:{route:"generic",replayScopedAction:!0},capability:{apple:H,android:F,linux:V},batchable:!1},{name:"pan",daemon:{route:"generic",androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:q},batchable:!1},{name:"fling",daemon:{route:"generic",androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:V},batchable:!1},{name:"rotate-gesture",daemon:{route:"generic",androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:V},batchable:!1},{name:"transform-gesture",daemon:{route:"generic",androidBlockingDialogGuard:!0},capability:{apple:H,android:F,linux:V},batchable:!1},{name:n.appSwitcher,capability:{apple:H,android:F,linux:V},batchable:!0},{name:n.installFromSource,capability:Y,batchable:!0}],Q=new Set(p()),W=J.map(e=>({...e,mcpExposed:Q.has(e.name)})),X=W.filter(e=>e.batchable).map(e=>e.name),Z=new Set(["batch","replay"]),ee=["command","positionals","flags","runtime"],ea=["platform","target","device","udid","serial","verbose","out"],en=new Set(X);function ei(e){return"string"==typeof e?e.trim().toLowerCase():""}function et(a,n){let i=ei(a);if(en.has(i))return i;throw new e("INVALID_ARGS",`Batch step ${n} command is not available through command batch: ${String(a)}`)}function eo(a,n){if(Z.has(a))throw new e("INVALID_ARGS",`Batch step ${n} cannot run ${a}.`)}export{ee as BATCH_DAEMON_STEP_KEYS,o as GESTURE_KINDS,r as GESTURE_SUBCOMMAND_ERROR,ea as INHERITED_PARENT_FLAG_KEYS,i as INTERNAL_COMMANDS,n as PUBLIC_COMMANDS,X as STRUCTURED_BATCH_COMMAND_NAMES,B as asRecord,eo as assertBatchRuntimeCommandAllowed,K as assertBatchStepCount,W as commandDescriptors,L as deriveCapabilityMatrix,P as deriveDaemonCommandDescriptors,d as isClientBackedCliCommandName,E as isRecord,G as isValidBatchMaxSteps,c as listCliCommandNames,p as listMcpExposedCommandNames,ei as normalizeBatchCommandName,O as parseBatchStepRuntime,A as parsePoint,v as parseRect,I as readBatchStepInputObject,M as readBatchStepRecord,S as readDeviceTarget,h as readNullableString,b as readOptionalString,g as readRequiredDeviceKind,y as readRequiredNumber,f as readRequiredPlatform,m as readRequiredString,et as readStructuredBatchCommandName,R as splitNonEmptyTrimmedLines,N as stripUndefined};
|