agent-device 0.14.2 → 0.14.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,190 @@
1
+ import fs from 'node:fs';
2
+ import type { Readable } from 'node:stream';
3
+ import { SpawnOptions } from 'node:child_process';
4
+ import type { Writable } from 'node:stream';
5
+
6
+ /**
7
+ * Runs device-scoped adb arguments after the device serial has already been selected.
8
+ * Implementations must be safe to call concurrently for one request.
9
+ */
10
+ export declare type AndroidAdbExecutor = (args: string[], options?: AndroidAdbExecutorOptions) => Promise<AndroidAdbExecutorResult>;
11
+
12
+ export declare type AndroidAdbExecutorOptions = Pick<ExecOptions, 'allowFailure' | 'timeoutMs' | 'binaryStdout' | 'stdin' | 'signal'>;
13
+
14
+ export declare type AndroidAdbExecutorResult = Pick<ExecResult, 'exitCode' | 'stdout' | 'stderr' | 'stdoutBuffer'>;
15
+
16
+ /**
17
+ * Installs an APK path. Implementations are responsible for honoring semantic
18
+ * install options such as replace/test/downgrade/grant-permissions.
19
+ */
20
+ export declare type AndroidAdbInstaller = (apkPath: string, options?: AndroidAdbInstallOptions) => Promise<AndroidAdbExecutorResult>;
21
+
22
+ export declare type AndroidAdbInstallOptions = AndroidAdbTransferOptions & {
23
+ replace?: boolean;
24
+ allowTestPackages?: boolean;
25
+ allowDowngrade?: boolean;
26
+ grantPermissions?: boolean;
27
+ };
28
+
29
+ export declare type AndroidAdbProcess = {
30
+ pid?: number;
31
+ stdin: Writable | null;
32
+ stdout: Readable | null;
33
+ stderr: Readable | null;
34
+ killed: boolean;
35
+ kill(signal?: NodeJS.Signals | number): boolean;
36
+ once(event: 'exit' | 'close', listener: (code: number | null, signal: NodeJS.Signals | null) => void): unknown;
37
+ on(event: 'error', listener: (error: Error) => void): unknown;
38
+ on(event: 'exit' | 'close', listener: (code: number | null, signal: NodeJS.Signals | null) => void): unknown;
39
+ };
40
+
41
+ export declare type AndroidAdbProvider = {
42
+ /**
43
+ * Fallback executor for device-scoped adb arguments. Providers may omit explicit
44
+ * methods to keep the legacy exec-shaped pull/install fallback.
45
+ */
46
+ exec: AndroidAdbExecutor;
47
+ spawn?: AndroidAdbSpawner;
48
+ reverse?: AndroidPortReverseProvider;
49
+ pull?: AndroidAdbPuller;
50
+ install?: AndroidAdbInstaller;
51
+ };
52
+
53
+ export declare type AndroidAdbPuller = (remotePath: string, localPath: string, options?: AndroidAdbTransferOptions) => Promise<AndroidAdbExecutorResult>;
54
+
55
+ export declare type AndroidAdbSpawner = (args: string[], options?: SpawnOptions) => AndroidAdbProcess;
56
+
57
+ export declare type AndroidAdbTransferOptions = AndroidAdbExecutorOptions;
58
+
59
+ export declare type AndroidAppListFilter = 'user-installed' | 'all';
60
+
61
+ export declare type AndroidAppListOptions = {
62
+ filter?: AndroidAppListFilter;
63
+ target?: AndroidAppListTarget;
64
+ };
65
+
66
+ export declare type AndroidAppListTarget = 'mobile' | 'tv' | 'auto';
67
+
68
+ declare type AndroidForegroundApp = {
69
+ package?: string;
70
+ activity?: string;
71
+ };
72
+
73
+ export declare type AndroidKeyboardState = {
74
+ visible: boolean;
75
+ inputType?: string;
76
+ type?: AndroidKeyboardType;
77
+ };
78
+
79
+ declare type AndroidKeyboardType = 'text' | 'number' | 'email' | 'phone' | 'password' | 'datetime' | 'unknown';
80
+
81
+ export declare type AndroidLogcatCaptureOptions = {
82
+ lines?: number;
83
+ timeoutMs?: number;
84
+ signal?: AbortSignal;
85
+ };
86
+
87
+ export declare type AndroidLogcatStreamOptions = {
88
+ pid?: string;
89
+ signal?: AbortSignal;
90
+ output?: fs.WriteStream;
91
+ };
92
+
93
+ export declare type AndroidOpenAppWithAdbOptions = {
94
+ activity?: string;
95
+ category?: string;
96
+ };
97
+
98
+ export declare type AndroidPortReverseEndpoint = `tcp:${number}` | `localabstract:${string}`;
99
+
100
+ export declare type AndroidPortReverseMapping = {
101
+ local: AndroidPortReverseEndpoint;
102
+ remote: AndroidPortReverseEndpoint;
103
+ ownerId?: string;
104
+ };
105
+
106
+ export declare type AndroidPortReverseOptions = {
107
+ signal?: AbortSignal;
108
+ timeoutMs?: number;
109
+ };
110
+
111
+ export declare type AndroidPortReverseProvider = {
112
+ ensure(mapping: AndroidPortReverseMapping, options?: AndroidPortReverseOptions): Promise<void>;
113
+ remove(local: AndroidPortReverseEndpoint, options?: AndroidPortReverseOptions): Promise<void>;
114
+ removeAllOwned(ownerId: string, options?: AndroidPortReverseOptions): Promise<void>;
115
+ list?(options?: AndroidPortReverseOptions): Promise<AndroidPortReverseMapping[]>;
116
+ };
117
+
118
+ declare type ApplePlatform = 'ios' | 'macos';
119
+
120
+ export declare function captureAndroidLogcatWithAdb(adb: AndroidAdbExecutor, options?: AndroidLogcatCaptureOptions): Promise<string>;
121
+
122
+ export declare function createAndroidPortReverseManager(provider: AndroidAdbProvider | AndroidAdbExecutor): AndroidPortReverseProvider;
123
+
124
+ export declare function createLocalAndroidAdbProvider(device: DeviceInfo): AndroidAdbProvider;
125
+
126
+ declare type DeviceInfo = {
127
+ platform: Platform;
128
+ id: string;
129
+ name: string;
130
+ kind: DeviceKind;
131
+ target?: DeviceTarget;
132
+ booted?: boolean;
133
+ simulatorSetPath?: string;
134
+ };
135
+
136
+ declare type DeviceKind = 'simulator' | 'emulator' | 'device';
137
+
138
+ declare type DeviceTarget = 'mobile' | 'tv' | 'desktop';
139
+
140
+ export declare function dismissAndroidKeyboardWithAdb(adb: AndroidAdbExecutor): Promise<{
141
+ attempts: number;
142
+ wasVisible: boolean;
143
+ dismissed: boolean;
144
+ visible: boolean;
145
+ inputType?: string;
146
+ type?: AndroidKeyboardType;
147
+ }>;
148
+
149
+ declare type ExecOptions = {
150
+ cwd?: string;
151
+ env?: NodeJS.ProcessEnv;
152
+ allowFailure?: boolean;
153
+ binaryStdout?: boolean;
154
+ stdin?: string | Buffer;
155
+ timeoutMs?: number;
156
+ detached?: boolean;
157
+ signal?: AbortSignal;
158
+ };
159
+
160
+ declare type ExecResult = {
161
+ stdout: string;
162
+ stderr: string;
163
+ exitCode: number;
164
+ stdoutBuffer?: Buffer;
165
+ };
166
+
167
+ export declare function forceStopAndroidAppWithAdb(adb: AndroidAdbExecutor, packageName: string): Promise<void>;
168
+
169
+ export declare function getAndroidAppStateWithAdb(adb: AndroidAdbExecutor): Promise<AndroidForegroundApp>;
170
+
171
+ export declare function getAndroidKeyboardStatusWithAdb(adb: AndroidAdbExecutor): Promise<AndroidKeyboardState>;
172
+
173
+ export declare function listAndroidAppsWithAdb(adb: AndroidAdbExecutor, options?: AndroidAppListOptions): Promise<Array<{
174
+ package: string;
175
+ name: string;
176
+ }>>;
177
+
178
+ export declare function openAndroidAppWithAdb(adb: AndroidAdbExecutor, packageName: string, options?: AndroidOpenAppWithAdbOptions): Promise<void>;
179
+
180
+ declare type Platform = ApplePlatform | 'android' | 'linux';
181
+
182
+ export declare function readAndroidClipboardWithAdb(adb: AndroidAdbExecutor): Promise<string>;
183
+
184
+ export declare function resolveAndroidLaunchComponentWithAdb(adb: AndroidAdbExecutor, packageName: string, categories?: string[]): Promise<string | null>;
185
+
186
+ export declare function streamAndroidLogcatWithAdb(provider: Pick<AndroidAdbProvider, 'spawn'>, options?: AndroidLogcatStreamOptions): AndroidAdbProcess;
187
+
188
+ export declare function writeAndroidClipboardWithAdb(adb: AndroidAdbExecutor, text: string): Promise<void>;
189
+
190
+ export { }
@@ -0,0 +1 @@
1
+ import{AppError as t}from"./9152.js";import{parseAndroidForegroundApp as e,parseAndroidLaunchablePackages as i,parseAndroidUserInstalledPackages as a,inferAndroidAppName as r,parseAndroidLaunchComponent as o,isAmStartError as n}from"./8809.js";let d="android.intent.category.LAUNCHER",l="android.intent.category.LEANBACK_LAUNCHER";async function s(t,e={}){let i=await u(t,e.target??"auto");return("user-installed"===e.filter?(await A(t)).filter(t=>i.has(t)):Array.from(i)).map(t=>({package:t,name:r(t)})).sort((t,e)=>t.package.localeCompare(e.package))}async function c(t){let e=await p(t,[["shell","dumpsys","window","windows"],["shell","dumpsys","window"]]);if(e)return e;let i=await p(t,[["shell","dumpsys","activity","activities"],["shell","dumpsys","activity"]]);return i||{}}async function u(t,e){return new Set((await Promise.all((function(t){switch(t){case"mobile":return[d];case"tv":return[l];default:return[d,l]}})(e).map(async e=>{var a;let r=await t(["shell","cmd","package","query-activities","--brief","-a","android.intent.action.MAIN","-c",e],{allowFailure:!0});return 0===r.exitCode?0===(a=r.stdout).trim().length?[]:i(a):[]}))).flat())}async function A(e){let i=await e(["shell","pm","list","packages","-3"],{allowFailure:!0});if(0!==i.exitCode)throw new t("COMMAND_FAILED","Failed to list Android user-installed apps",{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode});return a(i.stdout)}async function p(t,i){for(let a of i){let i=e((await t(a,{allowFailure:!0})).stdout??"");if(i)return i}return null}let f="android.intent.category.LAUNCHER",w="android.intent.category.DEFAULT";async function h(t,e){await t(["shell","am","force-stop",e])}async function m(t,e,i=[f]){for(let a of i){let i=await t(["shell","cmd","package","resolve-activity","--brief","-a","android.intent.action.MAIN","-c",a,e],{allowFailure:!0});if(0!==i.exitCode)continue;let r=o(i.stdout);if(r)return r}return null}async function C(e,i,a={}){let r=a.category??f;if(a.activity){var o,d;return void await e(["shell","am","start","-W","-a","android.intent.action.MAIN","-c",w,"-c",r,"-n",(o=i,(d=a.activity).includes("/")?d:`${o}/${d.startsWith(".")?d:`.${d}`}`)])}let l=await e(["shell","am","start","-W","-a","android.intent.action.MAIN","-c",w,"-c",r,"-p",i],{allowFailure:!0});if(0===l.exitCode&&!n(l.stdout,l.stderr))return;let s=await m(e,i,[r]);if(!s)throw new t("COMMAND_FAILED",`Failed to resolve Android launch component for ${i}`,{stdout:l.stdout,stderr:l.stderr,exitCode:l.exitCode});await e(["shell","am","start","-W","-a","android.intent.action.MAIN","-c",w,"-c",r,"-n",s])}export{captureAndroidLogcatWithAdb,streamAndroidLogcatWithAdb}from"./6642.js";export{createAndroidPortReverseManager,createLocalAndroidAdbProvider}from"./9639.js";export{dismissAndroidKeyboardWithAdb,getAndroidKeyboardStatusWithAdb,readAndroidClipboardWithAdb,writeAndroidClipboardWithAdb}from"./8809.js";export{h as forceStopAndroidAppWithAdb,c as getAndroidAppStateWithAdb,s as listAndroidAppsWithAdb,C as openAndroidAppWithAdb,m as resolveAndroidLaunchComponentWithAdb};
@@ -1,3 +1,7 @@
1
+ import type { Readable } from 'node:stream';
2
+ import { SpawnOptions } from 'node:child_process';
3
+ import type { Writable } from 'node:stream';
4
+
1
5
  export declare const ANDROID_SNAPSHOT_HELPER_NAME = "android-snapshot-helper";
2
6
 
3
7
  export declare const ANDROID_SNAPSHOT_HELPER_OUTPUT_FORMAT = "uiautomator-xml";
@@ -10,14 +14,78 @@ export declare const ANDROID_SNAPSHOT_HELPER_RUNNER = "com.callstack.agentdevice
10
14
 
11
15
  export declare const ANDROID_SNAPSHOT_HELPER_WAIT_FOR_IDLE_TIMEOUT_MS = 500;
12
16
 
13
- export declare type AndroidAdbExecutor = (args: string[], options?: {
14
- allowFailure?: boolean;
17
+ /**
18
+ * Runs device-scoped adb arguments after the device serial has already been selected.
19
+ * Implementations must be safe to call concurrently for one request.
20
+ */
21
+ export declare type AndroidAdbExecutor = (args: string[], options?: AndroidAdbExecutorOptions) => Promise<AndroidAdbExecutorResult>;
22
+
23
+ declare type AndroidAdbExecutorOptions = Pick<ExecOptions, 'allowFailure' | 'timeoutMs' | 'binaryStdout' | 'stdin' | 'signal'>;
24
+
25
+ declare type AndroidAdbExecutorResult = Pick<ExecResult, 'exitCode' | 'stdout' | 'stderr' | 'stdoutBuffer'>;
26
+
27
+ /**
28
+ * Installs an APK path. Implementations are responsible for honoring semantic
29
+ * install options such as replace/test/downgrade/grant-permissions.
30
+ */
31
+ declare type AndroidAdbInstaller = (apkPath: string, options?: AndroidAdbInstallOptions) => Promise<AndroidAdbExecutorResult>;
32
+
33
+ declare type AndroidAdbInstallOptions = AndroidAdbTransferOptions & {
34
+ replace?: boolean;
35
+ allowTestPackages?: boolean;
36
+ allowDowngrade?: boolean;
37
+ grantPermissions?: boolean;
38
+ };
39
+
40
+ declare type AndroidAdbProcess = {
41
+ pid?: number;
42
+ stdin: Writable | null;
43
+ stdout: Readable | null;
44
+ stderr: Readable | null;
45
+ killed: boolean;
46
+ kill(signal?: NodeJS.Signals | number): boolean;
47
+ once(event: 'exit' | 'close', listener: (code: number | null, signal: NodeJS.Signals | null) => void): unknown;
48
+ on(event: 'error', listener: (error: Error) => void): unknown;
49
+ on(event: 'exit' | 'close', listener: (code: number | null, signal: NodeJS.Signals | null) => void): unknown;
50
+ };
51
+
52
+ declare type AndroidAdbProvider = {
53
+ /**
54
+ * Fallback executor for device-scoped adb arguments. Providers may omit explicit
55
+ * methods to keep the legacy exec-shaped pull/install fallback.
56
+ */
57
+ exec: AndroidAdbExecutor;
58
+ spawn?: AndroidAdbSpawner;
59
+ reverse?: AndroidPortReverseProvider;
60
+ pull?: AndroidAdbPuller;
61
+ install?: AndroidAdbInstaller;
62
+ };
63
+
64
+ declare type AndroidAdbPuller = (remotePath: string, localPath: string, options?: AndroidAdbTransferOptions) => Promise<AndroidAdbExecutorResult>;
65
+
66
+ declare type AndroidAdbSpawner = (args: string[], options?: SpawnOptions) => AndroidAdbProcess;
67
+
68
+ declare type AndroidAdbTransferOptions = AndroidAdbExecutorOptions;
69
+
70
+ declare type AndroidPortReverseEndpoint = `tcp:${number}` | `localabstract:${string}`;
71
+
72
+ declare type AndroidPortReverseMapping = {
73
+ local: AndroidPortReverseEndpoint;
74
+ remote: AndroidPortReverseEndpoint;
75
+ ownerId?: string;
76
+ };
77
+
78
+ declare type AndroidPortReverseOptions = {
79
+ signal?: AbortSignal;
15
80
  timeoutMs?: number;
16
- }) => Promise<{
17
- exitCode: number;
18
- stdout: string;
19
- stderr: string;
20
- }>;
81
+ };
82
+
83
+ declare type AndroidPortReverseProvider = {
84
+ ensure(mapping: AndroidPortReverseMapping, options?: AndroidPortReverseOptions): Promise<void>;
85
+ remove(local: AndroidPortReverseEndpoint, options?: AndroidPortReverseOptions): Promise<void>;
86
+ removeAllOwned(ownerId: string, options?: AndroidPortReverseOptions): Promise<void>;
87
+ list?(options?: AndroidPortReverseOptions): Promise<AndroidPortReverseMapping[]>;
88
+ };
21
89
 
22
90
  declare type AndroidSnapshotAnalysis = {
23
91
  rawNodeCount: number;
@@ -121,12 +189,31 @@ export declare function captureAndroidSnapshotWithHelper(options: AndroidSnapsho
121
189
 
122
190
  export declare function ensureAndroidSnapshotHelper(options: {
123
191
  adb: AndroidAdbExecutor;
192
+ adbProvider?: AndroidAdbProvider | AndroidAdbExecutor;
124
193
  artifact: AndroidSnapshotHelperArtifact;
125
194
  deviceKey?: string;
126
195
  installPolicy?: AndroidSnapshotHelperInstallPolicy;
127
196
  timeoutMs?: number;
128
197
  }): Promise<AndroidSnapshotHelperInstallResult>;
129
198
 
199
+ declare type ExecOptions = {
200
+ cwd?: string;
201
+ env?: NodeJS.ProcessEnv;
202
+ allowFailure?: boolean;
203
+ binaryStdout?: boolean;
204
+ stdin?: string | Buffer;
205
+ timeoutMs?: number;
206
+ detached?: boolean;
207
+ signal?: AbortSignal;
208
+ };
209
+
210
+ declare type ExecResult = {
211
+ stdout: string;
212
+ stderr: string;
213
+ exitCode: number;
214
+ stdoutBuffer?: Buffer;
215
+ };
216
+
130
217
  export declare function parseAndroidSnapshotHelperManifest(value: unknown): AndroidSnapshotHelperManifest;
131
218
 
132
219
  export declare function parseAndroidSnapshotHelperOutput(output: string): AndroidSnapshotHelperOutput;