agent-device 0.12.3 → 0.12.5
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/dist/src/152.js +1 -1
- package/dist/src/320.js +1 -1
- package/dist/src/57.js +1 -1
- package/dist/src/641.js +38 -0
- package/dist/src/818.js +1 -1
- package/dist/src/974.js +2 -2
- package/dist/src/backend.d.ts +205 -0
- package/dist/src/backend.js +1 -0
- package/dist/src/bin.js +63 -63
- package/dist/src/commands/index.d.ts +908 -0
- package/dist/src/commands/index.js +1 -0
- package/dist/src/contracts.d.ts +1 -1
- package/dist/src/daemon.js +15 -15
- package/dist/src/index.d.ts +898 -3
- package/dist/src/index.js +3 -3
- package/dist/src/io.d.ts +85 -0
- package/dist/src/io.js +1 -0
- package/dist/src/metro-companion.js +1 -1
- package/dist/src/metro.d.ts +10 -0
- package/dist/src/metro.js +1 -1
- package/dist/src/selectors.js +1 -1
- package/dist/src/testing/conformance.d.ts +416 -0
- package/dist/src/testing/conformance.js +1 -0
- package/ios-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +12 -3
- package/ios-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +1 -0
- package/ios-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScreenRecorder.swift +24 -5
- package/ios-runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +2 -0
- package/ios-runner/AgentDeviceRunner/RecordingScripts/recording-resize.swift +182 -0
- package/ios-runner/RUNNER_PROTOCOL.md +1 -1
- package/package.json +17 -1
- package/skills/agent-device/references/bootstrap-install.md +13 -0
- package/skills/agent-device/references/remote-tenancy.md +15 -0
- package/skills/agent-device/references/verification.md +1 -0
- package/dist/src/155.js +0 -38
- package/dist/src/940.js +0 -1
package/dist/src/index.d.ts
CHANGED
|
@@ -1,3 +1,28 @@
|
|
|
1
|
+
export declare type AgentDevice = AgentDeviceRuntime & BoundAgentDeviceCommands;
|
|
2
|
+
|
|
3
|
+
export declare type AgentDeviceBackend = {
|
|
4
|
+
platform: AgentDeviceBackendPlatform;
|
|
5
|
+
capabilities?: BackendCapabilitySet;
|
|
6
|
+
escapeHatches?: BackendEscapeHatches;
|
|
7
|
+
captureSnapshot?(context: BackendCommandContext, options?: BackendSnapshotOptions): Promise<BackendSnapshotResult>;
|
|
8
|
+
captureScreenshot?(context: BackendCommandContext, outPath: string, options?: BackendScreenshotOptions): Promise<BackendScreenshotResult | void>;
|
|
9
|
+
readText?(context: BackendCommandContext, node: SnapshotNode): Promise<BackendReadTextResult>;
|
|
10
|
+
findText?(context: BackendCommandContext, text: string): Promise<BackendFindTextResult>;
|
|
11
|
+
tap?(context: BackendCommandContext, point: Point, options?: BackendTapOptions): Promise<BackendActionResult>;
|
|
12
|
+
fill?(context: BackendCommandContext, point: Point, text: string, options?: BackendFillOptions): Promise<BackendActionResult>;
|
|
13
|
+
typeText?(context: BackendCommandContext, text: string, options?: {
|
|
14
|
+
delayMs?: number;
|
|
15
|
+
}): Promise<BackendActionResult>;
|
|
16
|
+
pressKey?(context: BackendCommandContext, key: string, options?: {
|
|
17
|
+
modifiers?: string[];
|
|
18
|
+
}): Promise<BackendActionResult>;
|
|
19
|
+
openApp?(context: BackendCommandContext, target: BackendOpenTarget): Promise<BackendActionResult>;
|
|
20
|
+
closeApp?(context: BackendCommandContext, app?: string): Promise<BackendActionResult>;
|
|
21
|
+
installApp?(context: BackendCommandContext, target: BackendInstallTarget): Promise<BackendActionResult>;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export declare type AgentDeviceBackendPlatform = 'ios' | 'android' | 'macos' | 'linux';
|
|
25
|
+
|
|
1
26
|
export declare type AgentDeviceClient = {
|
|
2
27
|
command: AgentDeviceCommandClient;
|
|
3
28
|
devices: {
|
|
@@ -108,6 +133,38 @@ export declare type AgentDeviceCommandClient = {
|
|
|
108
133
|
clipboard: (options: ClipboardCommandOptions) => Promise<ClipboardCommandResult>;
|
|
109
134
|
};
|
|
110
135
|
|
|
136
|
+
declare type AgentDeviceCommands = {
|
|
137
|
+
capture: {
|
|
138
|
+
screenshot: RuntimeCommand<ScreenshotCommandOptions, ScreenshotCommandResult>;
|
|
139
|
+
diffScreenshot: RuntimeCommand<DiffScreenshotCommandOptions, DiffScreenshotCommandResult>;
|
|
140
|
+
snapshot: RuntimeCommand<SnapshotCommandOptions, SnapshotCommandResult>;
|
|
141
|
+
diffSnapshot: RuntimeCommand<DiffSnapshotCommandOptions, DiffSnapshotCommandResult>;
|
|
142
|
+
};
|
|
143
|
+
selectors: {
|
|
144
|
+
find: RuntimeCommand<FindReadCommandOptions, FindReadCommandResult>;
|
|
145
|
+
get: RuntimeCommand<GetCommandOptions, GetCommandResult>;
|
|
146
|
+
getText: RuntimeCommand<GetTextCommandOptions, Extract<GetCommandResult, {
|
|
147
|
+
kind: 'text';
|
|
148
|
+
}>>;
|
|
149
|
+
getAttrs: RuntimeCommand<GetAttrsCommandOptions, Extract<GetCommandResult, {
|
|
150
|
+
kind: 'attrs';
|
|
151
|
+
}>>;
|
|
152
|
+
is: RuntimeCommand<IsCommandOptions, IsCommandResult>;
|
|
153
|
+
isVisible: RuntimeCommand<IsSelectorCommandOptions, IsCommandResult>;
|
|
154
|
+
isHidden: RuntimeCommand<IsSelectorCommandOptions, IsCommandResult>;
|
|
155
|
+
wait: RuntimeCommand<WaitCommandOptions_2, WaitCommandResult_2>;
|
|
156
|
+
waitForText: RuntimeCommand<WaitForTextCommandOptions, Extract<WaitCommandResult_2, {
|
|
157
|
+
kind: 'text';
|
|
158
|
+
}>>;
|
|
159
|
+
};
|
|
160
|
+
interactions: {
|
|
161
|
+
click: RuntimeCommand<ClickCommandOptions, PressCommandResult>;
|
|
162
|
+
press: RuntimeCommand<PressCommandOptions, PressCommandResult>;
|
|
163
|
+
fill: RuntimeCommand<FillCommandOptions, FillCommandResult>;
|
|
164
|
+
typeText: RuntimeCommand<TypeTextCommandOptions, TypeTextCommandResult>;
|
|
165
|
+
};
|
|
166
|
+
};
|
|
167
|
+
|
|
111
168
|
export declare type AgentDeviceDaemonTransport = (req: Omit<DaemonRequest, 'token'>) => Promise<DaemonResponse>;
|
|
112
169
|
|
|
113
170
|
export declare type AgentDeviceDevice = {
|
|
@@ -139,6 +196,26 @@ export declare type AgentDeviceIdentifiers = {
|
|
|
139
196
|
|
|
140
197
|
export declare type AgentDeviceRequestOverrides = Pick<AgentDeviceClientConfig, 'session' | 'lockPolicy' | 'lockPlatform' | 'requestId' | 'daemonBaseUrl' | 'daemonAuthToken' | 'daemonTransport' | 'daemonServerMode' | 'tenant' | 'sessionIsolation' | 'runId' | 'leaseId' | 'leaseBackend' | 'cwd' | 'debug'>;
|
|
141
198
|
|
|
199
|
+
export declare type AgentDeviceRuntime = {
|
|
200
|
+
backend: AgentDeviceBackend;
|
|
201
|
+
artifacts: ArtifactAdapter;
|
|
202
|
+
sessions: CommandSessionStore;
|
|
203
|
+
policy: CommandPolicy;
|
|
204
|
+
diagnostics?: DiagnosticsSink;
|
|
205
|
+
clock?: CommandClock;
|
|
206
|
+
signal?: AbortSignal;
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
export declare type AgentDeviceRuntimeConfig = {
|
|
210
|
+
backend: AgentDeviceBackend;
|
|
211
|
+
artifacts: ArtifactAdapter;
|
|
212
|
+
sessions?: CommandSessionStore;
|
|
213
|
+
policy?: CommandPolicy;
|
|
214
|
+
diagnostics?: DiagnosticsSink;
|
|
215
|
+
clock?: CommandClock;
|
|
216
|
+
signal?: AbortSignal;
|
|
217
|
+
};
|
|
218
|
+
|
|
142
219
|
export declare type AgentDeviceSelectionOptions = {
|
|
143
220
|
platform?: PlatformSelector;
|
|
144
221
|
target?: DeviceTarget;
|
|
@@ -212,7 +289,7 @@ export declare class AppError extends Error {
|
|
|
212
289
|
constructor(code: AppErrorCode, message: string, details?: AppErrorDetails, cause?: unknown);
|
|
213
290
|
}
|
|
214
291
|
|
|
215
|
-
declare type AppErrorCode = 'INVALID_ARGS' | 'DEVICE_NOT_FOUND' | 'TOOL_MISSING' | 'APP_NOT_INSTALLED' | 'UNSUPPORTED_PLATFORM' | 'UNSUPPORTED_OPERATION' | 'COMMAND_FAILED' | 'SESSION_NOT_FOUND' | 'UNAUTHORIZED' | 'UNKNOWN';
|
|
292
|
+
export declare type AppErrorCode = 'INVALID_ARGS' | 'DEVICE_NOT_FOUND' | 'TOOL_MISSING' | 'APP_NOT_INSTALLED' | 'UNSUPPORTED_PLATFORM' | 'UNSUPPORTED_OPERATION' | 'NOT_IMPLEMENTED' | 'COMMAND_FAILED' | 'SESSION_NOT_FOUND' | 'UNAUTHORIZED' | 'UNKNOWN';
|
|
216
293
|
|
|
217
294
|
declare type AppErrorDetails = Record<string, unknown> & {
|
|
218
295
|
hint?: string;
|
|
@@ -293,6 +370,30 @@ export declare type AppTriggerEventOptions = ClientCommandBaseOptions & {
|
|
|
293
370
|
payload?: Record<string, unknown>;
|
|
294
371
|
};
|
|
295
372
|
|
|
373
|
+
export declare type ArtifactAdapter = {
|
|
374
|
+
resolveInput(ref: FileInputRef, options: ResolveInputOptions): Promise<ResolvedInputFile>;
|
|
375
|
+
reserveOutput(ref: FileOutputRef | undefined, options: ReserveOutputOptions): Promise<ReservedOutputFile>;
|
|
376
|
+
createTempFile(options: CreateTempFileOptions): Promise<TemporaryFile>;
|
|
377
|
+
};
|
|
378
|
+
|
|
379
|
+
export declare type ArtifactDescriptor = {
|
|
380
|
+
kind: 'localPath';
|
|
381
|
+
field: string;
|
|
382
|
+
path: string;
|
|
383
|
+
fileName?: string;
|
|
384
|
+
metadata?: Record<string, unknown>;
|
|
385
|
+
} | {
|
|
386
|
+
kind: 'artifact';
|
|
387
|
+
field: string;
|
|
388
|
+
artifactId: string;
|
|
389
|
+
fileName?: string;
|
|
390
|
+
url?: string;
|
|
391
|
+
clientPath?: string;
|
|
392
|
+
metadata?: Record<string, unknown>;
|
|
393
|
+
};
|
|
394
|
+
|
|
395
|
+
export declare function assertBackendCapabilityAllowed(runtime: Pick<AgentDeviceRuntime, 'backend' | 'policy'>, capability: BackendCapabilityName): void;
|
|
396
|
+
|
|
296
397
|
export declare type BackCommandOptions = DeviceCommandBaseOptions & {
|
|
297
398
|
mode?: 'in-app' | 'system';
|
|
298
399
|
};
|
|
@@ -301,6 +402,112 @@ export declare type BackCommandResult = CommandActionResult<'back'> & {
|
|
|
301
402
|
mode?: 'in-app' | 'system';
|
|
302
403
|
};
|
|
303
404
|
|
|
405
|
+
declare const BACKEND_CAPABILITY_NAMES: readonly ["android.shell", "ios.runnerCommand", "macos.desktopScreenshot"];
|
|
406
|
+
|
|
407
|
+
export declare type BackendActionResult = Record<string, unknown> | void;
|
|
408
|
+
|
|
409
|
+
export declare type BackendCapabilityName = (typeof BACKEND_CAPABILITY_NAMES)[number];
|
|
410
|
+
|
|
411
|
+
export declare type BackendCapabilitySet = readonly BackendCapabilityName[];
|
|
412
|
+
|
|
413
|
+
export declare type BackendCommandContext = {
|
|
414
|
+
session?: string;
|
|
415
|
+
requestId?: string;
|
|
416
|
+
appId?: string;
|
|
417
|
+
appBundleId?: string;
|
|
418
|
+
signal?: AbortSignal;
|
|
419
|
+
metadata?: Record<string, unknown>;
|
|
420
|
+
};
|
|
421
|
+
|
|
422
|
+
export declare type BackendEscapeHatches = {
|
|
423
|
+
androidShell?(context: BackendCommandContext, args: readonly string[]): Promise<BackendShellResult>;
|
|
424
|
+
iosRunnerCommand?(context: BackendCommandContext, command: BackendRunnerCommand): Promise<BackendActionResult>;
|
|
425
|
+
macosDesktopScreenshot?(context: BackendCommandContext, outPath: string, options?: BackendScreenshotOptions): Promise<BackendScreenshotResult | void>;
|
|
426
|
+
};
|
|
427
|
+
|
|
428
|
+
export declare type BackendFillOptions = {
|
|
429
|
+
delayMs?: number;
|
|
430
|
+
};
|
|
431
|
+
|
|
432
|
+
export declare type BackendFindTextResult = {
|
|
433
|
+
found: boolean;
|
|
434
|
+
};
|
|
435
|
+
|
|
436
|
+
export declare type BackendInstallTarget = {
|
|
437
|
+
app: string;
|
|
438
|
+
artifactPath: string;
|
|
439
|
+
};
|
|
440
|
+
|
|
441
|
+
export declare type BackendOpenTarget = {
|
|
442
|
+
app?: string;
|
|
443
|
+
url?: string;
|
|
444
|
+
activity?: string;
|
|
445
|
+
};
|
|
446
|
+
|
|
447
|
+
export declare type BackendReadTextResult = {
|
|
448
|
+
text: string;
|
|
449
|
+
};
|
|
450
|
+
|
|
451
|
+
export declare type BackendRunnerCommand = {
|
|
452
|
+
command: string;
|
|
453
|
+
args?: readonly string[];
|
|
454
|
+
payload?: Record<string, unknown>;
|
|
455
|
+
};
|
|
456
|
+
|
|
457
|
+
export declare type BackendScreenshotOptions = {
|
|
458
|
+
fullscreen?: boolean;
|
|
459
|
+
overlayRefs?: boolean;
|
|
460
|
+
surface?: 'app' | 'frontmost-app' | 'desktop' | 'menubar';
|
|
461
|
+
};
|
|
462
|
+
|
|
463
|
+
export declare type BackendScreenshotResult = {
|
|
464
|
+
path?: string;
|
|
465
|
+
overlayRefs?: ScreenshotOverlayRef[];
|
|
466
|
+
};
|
|
467
|
+
|
|
468
|
+
export declare type BackendShellResult = {
|
|
469
|
+
exitCode: number;
|
|
470
|
+
stdout: string;
|
|
471
|
+
stderr: string;
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
export declare type BackendSnapshotAnalysis = {
|
|
475
|
+
rawNodeCount?: number;
|
|
476
|
+
maxDepth?: number;
|
|
477
|
+
};
|
|
478
|
+
|
|
479
|
+
export declare type BackendSnapshotFreshness = {
|
|
480
|
+
action: string;
|
|
481
|
+
retryCount: number;
|
|
482
|
+
staleAfterRetries: boolean;
|
|
483
|
+
reason?: 'empty-interactive' | 'sharp-drop' | 'stuck-route';
|
|
484
|
+
};
|
|
485
|
+
|
|
486
|
+
export declare type BackendSnapshotOptions = SnapshotOptions & {
|
|
487
|
+
outPath?: string;
|
|
488
|
+
};
|
|
489
|
+
|
|
490
|
+
export declare type BackendSnapshotResult = {
|
|
491
|
+
nodes?: SnapshotNode[];
|
|
492
|
+
truncated?: boolean;
|
|
493
|
+
backend?: string;
|
|
494
|
+
snapshot?: SnapshotState;
|
|
495
|
+
analysis?: BackendSnapshotAnalysis;
|
|
496
|
+
freshness?: BackendSnapshotFreshness;
|
|
497
|
+
warnings?: string[];
|
|
498
|
+
appName?: string;
|
|
499
|
+
appBundleId?: string;
|
|
500
|
+
};
|
|
501
|
+
|
|
502
|
+
export declare type BackendTapOptions = {
|
|
503
|
+
button?: 'primary' | 'secondary' | 'middle';
|
|
504
|
+
count?: number;
|
|
505
|
+
intervalMs?: number;
|
|
506
|
+
holdMs?: number;
|
|
507
|
+
jitterPx?: number;
|
|
508
|
+
doubleTap?: boolean;
|
|
509
|
+
};
|
|
510
|
+
|
|
304
511
|
export declare type BatchRunOptions = AgentDeviceRequestOverrides & {
|
|
305
512
|
steps: BatchStep[];
|
|
306
513
|
onError?: 'stop';
|
|
@@ -314,6 +521,40 @@ export declare type BatchStep = {
|
|
|
314
521
|
flags?: Record<string, unknown>;
|
|
315
522
|
};
|
|
316
523
|
|
|
524
|
+
export declare type BoundAgentDeviceCommands = {
|
|
525
|
+
capture: {
|
|
526
|
+
screenshot: BoundRuntimeCommand<ScreenshotCommandOptions, ScreenshotCommandResult>;
|
|
527
|
+
diffScreenshot: BoundRuntimeCommand<DiffScreenshotCommandOptions, DiffScreenshotCommandResult>;
|
|
528
|
+
snapshot: BoundRuntimeCommand<SnapshotCommandOptions, SnapshotCommandResult>;
|
|
529
|
+
diffSnapshot: BoundRuntimeCommand<DiffSnapshotCommandOptions, DiffSnapshotCommandResult>;
|
|
530
|
+
};
|
|
531
|
+
selectors: {
|
|
532
|
+
find: BoundRuntimeCommand<FindReadCommandOptions, FindReadCommandResult>;
|
|
533
|
+
get: BoundRuntimeCommand<GetCommandOptions, GetCommandResult>;
|
|
534
|
+
getText: (target: ElementTarget_2, options?: Omit<GetTextCommandOptions, 'target'>) => Promise<Extract<GetCommandResult, {
|
|
535
|
+
kind: 'text';
|
|
536
|
+
}>>;
|
|
537
|
+
getAttrs: (target: ElementTarget_2, options?: Omit<GetAttrsCommandOptions, 'target'>) => Promise<Extract<GetCommandResult, {
|
|
538
|
+
kind: 'attrs';
|
|
539
|
+
}>>;
|
|
540
|
+
is: BoundRuntimeCommand<IsCommandOptions, IsCommandResult>;
|
|
541
|
+
isVisible: (target: SelectorTarget, options?: Omit<IsSelectorCommandOptions, 'target'>) => Promise<IsCommandResult>;
|
|
542
|
+
isHidden: (target: SelectorTarget, options?: Omit<IsSelectorCommandOptions, 'target'>) => Promise<IsCommandResult>;
|
|
543
|
+
wait: BoundRuntimeCommand<WaitCommandOptions_2, WaitCommandResult_2>;
|
|
544
|
+
waitForText: (text: string, options?: Omit<WaitForTextCommandOptions, 'text'>) => Promise<Extract<WaitCommandResult_2, {
|
|
545
|
+
kind: 'text';
|
|
546
|
+
}>>;
|
|
547
|
+
};
|
|
548
|
+
interactions: {
|
|
549
|
+
click: (target: InteractionTarget_2, options?: Omit<ClickCommandOptions, 'target'>) => Promise<PressCommandResult>;
|
|
550
|
+
press: (target: InteractionTarget_2, options?: Omit<PressCommandOptions, 'target'>) => Promise<PressCommandResult>;
|
|
551
|
+
fill: (target: InteractionTarget_2, text: string, options?: Omit<FillCommandOptions, 'target' | 'text'>) => Promise<FillCommandResult>;
|
|
552
|
+
typeText: (text: string, options?: Omit<TypeTextCommandOptions, 'text'>) => Promise<TypeTextCommandResult>;
|
|
553
|
+
};
|
|
554
|
+
};
|
|
555
|
+
|
|
556
|
+
export declare type BoundRuntimeCommand<TOptions = Record<string, unknown>, TResult = CommandResult> = (options: TOptions) => Promise<TResult>;
|
|
557
|
+
|
|
317
558
|
export declare type CaptureDiffOptions = ClientCommandBaseOptions & Pick<CaptureSnapshotOptions, 'interactiveOnly' | 'compact' | 'depth' | 'scope' | 'raw'> & {
|
|
318
559
|
kind: 'snapshot';
|
|
319
560
|
out?: string;
|
|
@@ -323,6 +564,7 @@ export declare type CaptureScreenshotOptions = AgentDeviceRequestOverrides & {
|
|
|
323
564
|
path?: string;
|
|
324
565
|
overlayRefs?: boolean;
|
|
325
566
|
fullscreen?: boolean;
|
|
567
|
+
surface?: 'app' | 'frontmost-app' | 'desktop' | 'menubar';
|
|
326
568
|
};
|
|
327
569
|
|
|
328
570
|
export declare type CaptureScreenshotResult = {
|
|
@@ -351,6 +593,8 @@ export declare type CaptureSnapshotResult = {
|
|
|
351
593
|
|
|
352
594
|
export declare function centerOfRect(rect: Rect): Point;
|
|
353
595
|
|
|
596
|
+
declare type ClickCommandOptions = PressCommandOptions;
|
|
597
|
+
|
|
354
598
|
export declare type ClickOptions = ClientCommandBaseOptions & SelectorSnapshotCommandOptions & InteractionTarget & RepeatedPressOptions & {
|
|
355
599
|
button?: 'primary' | 'secondary' | 'middle';
|
|
356
600
|
};
|
|
@@ -376,12 +620,143 @@ declare type CommandActionResult<T extends string> = DaemonResponseData & {
|
|
|
376
620
|
action?: T;
|
|
377
621
|
};
|
|
378
622
|
|
|
623
|
+
export declare const commandCatalog: readonly CommandCatalogEntry[];
|
|
624
|
+
|
|
625
|
+
export declare type CommandCatalogEntry = {
|
|
626
|
+
command: string;
|
|
627
|
+
category: 'portable-runtime' | 'backend-admin' | 'transport-session' | 'environment' | 'capability-gated';
|
|
628
|
+
status: 'implemented' | 'planned';
|
|
629
|
+
};
|
|
630
|
+
|
|
631
|
+
export declare type CommandClock = {
|
|
632
|
+
now(): number;
|
|
633
|
+
sleep(ms: number): Promise<void>;
|
|
634
|
+
};
|
|
635
|
+
|
|
636
|
+
export declare type CommandContext = {
|
|
637
|
+
session?: string;
|
|
638
|
+
requestId?: string;
|
|
639
|
+
signal?: AbortSignal;
|
|
640
|
+
metadata?: Record<string, unknown>;
|
|
641
|
+
};
|
|
642
|
+
|
|
643
|
+
export declare type CommandPolicy = {
|
|
644
|
+
allowLocalInputPaths: boolean;
|
|
645
|
+
allowLocalOutputPaths: boolean;
|
|
646
|
+
maxImagePixels: number;
|
|
647
|
+
allowNamedBackendCapabilities: readonly BackendCapabilityName[];
|
|
648
|
+
};
|
|
649
|
+
|
|
379
650
|
export declare type CommandRequestResult = DaemonResponseData;
|
|
380
651
|
|
|
652
|
+
export declare type CommandResult = Record<string, unknown>;
|
|
653
|
+
|
|
654
|
+
export declare type CommandRouter<TContext = unknown> = {
|
|
655
|
+
dispatch(request: CommandRouterRequest<TContext>): Promise<CommandRouterResponse>;
|
|
656
|
+
};
|
|
657
|
+
|
|
658
|
+
export declare type CommandRouterConfig<TContext = unknown> = {
|
|
659
|
+
createRuntime(request: CommandRouterRequest<TContext>): AgentDeviceRuntime | Promise<AgentDeviceRuntime>;
|
|
660
|
+
beforeDispatch?(request: CommandRouterRequest<TContext>): void | Promise<void>;
|
|
661
|
+
formatError?(error: unknown, request: CommandRouterRequest<TContext>): NormalizedError;
|
|
662
|
+
};
|
|
663
|
+
|
|
664
|
+
export declare type CommandRouterRequest<TContext = unknown> = {
|
|
665
|
+
command: 'capture.screenshot';
|
|
666
|
+
options: ScreenshotCommandOptions;
|
|
667
|
+
context?: TContext;
|
|
668
|
+
} | {
|
|
669
|
+
command: 'capture.diffScreenshot';
|
|
670
|
+
options: DiffScreenshotCommandOptions;
|
|
671
|
+
context?: TContext;
|
|
672
|
+
} | {
|
|
673
|
+
command: 'capture.snapshot';
|
|
674
|
+
options: SnapshotCommandOptions;
|
|
675
|
+
context?: TContext;
|
|
676
|
+
} | {
|
|
677
|
+
command: 'capture.diffSnapshot';
|
|
678
|
+
options: DiffSnapshotCommandOptions;
|
|
679
|
+
context?: TContext;
|
|
680
|
+
} | {
|
|
681
|
+
command: 'selectors.find';
|
|
682
|
+
options: FindReadCommandOptions;
|
|
683
|
+
context?: TContext;
|
|
684
|
+
} | {
|
|
685
|
+
command: 'selectors.get';
|
|
686
|
+
options: GetCommandOptions;
|
|
687
|
+
context?: TContext;
|
|
688
|
+
} | {
|
|
689
|
+
command: 'selectors.is';
|
|
690
|
+
options: IsCommandOptions;
|
|
691
|
+
context?: TContext;
|
|
692
|
+
} | {
|
|
693
|
+
command: 'selectors.wait';
|
|
694
|
+
options: WaitCommandOptions_2;
|
|
695
|
+
context?: TContext;
|
|
696
|
+
} | {
|
|
697
|
+
command: 'interactions.click';
|
|
698
|
+
options: ClickCommandOptions;
|
|
699
|
+
context?: TContext;
|
|
700
|
+
} | {
|
|
701
|
+
command: 'interactions.press';
|
|
702
|
+
options: PressCommandOptions;
|
|
703
|
+
context?: TContext;
|
|
704
|
+
} | {
|
|
705
|
+
command: 'interactions.fill';
|
|
706
|
+
options: FillCommandOptions;
|
|
707
|
+
context?: TContext;
|
|
708
|
+
} | {
|
|
709
|
+
command: 'interactions.typeText';
|
|
710
|
+
options: TypeTextCommandOptions;
|
|
711
|
+
context?: TContext;
|
|
712
|
+
};
|
|
713
|
+
|
|
714
|
+
export declare type CommandRouterResponse = {
|
|
715
|
+
ok: true;
|
|
716
|
+
data: CommandRouterResult;
|
|
717
|
+
} | {
|
|
718
|
+
ok: false;
|
|
719
|
+
error: NormalizedError;
|
|
720
|
+
};
|
|
721
|
+
|
|
722
|
+
export declare type CommandRouterResult = ScreenshotCommandResult | DiffScreenshotCommandResult | SnapshotCommandResult | DiffSnapshotCommandResult | FindReadCommandResult | GetCommandResult | IsCommandResult | WaitCommandResult_2 | PressCommandResult | FillCommandResult | TypeTextCommandResult;
|
|
723
|
+
|
|
724
|
+
export declare const commands: AgentDeviceCommands;
|
|
725
|
+
|
|
726
|
+
export declare type CommandSessionRecord = {
|
|
727
|
+
name: string;
|
|
728
|
+
appId?: string;
|
|
729
|
+
appBundleId?: string;
|
|
730
|
+
appName?: string;
|
|
731
|
+
backendSessionId?: string;
|
|
732
|
+
snapshot?: SnapshotState;
|
|
733
|
+
metadata?: Record<string, unknown>;
|
|
734
|
+
};
|
|
735
|
+
|
|
736
|
+
export declare type CommandSessionStore = {
|
|
737
|
+
get(name: string): CommandSessionRecord | undefined | Promise<CommandSessionRecord | undefined>;
|
|
738
|
+
set(record: CommandSessionRecord): void | Promise<void>;
|
|
739
|
+
delete?(name: string): void | Promise<void>;
|
|
740
|
+
list?(): readonly CommandSessionRecord[] | Promise<readonly CommandSessionRecord[]>;
|
|
741
|
+
};
|
|
742
|
+
|
|
743
|
+
export declare function createAgentDevice(config: AgentDeviceRuntimeConfig): AgentDevice;
|
|
744
|
+
|
|
381
745
|
export declare function createAgentDeviceClient(config?: AgentDeviceClientConfig, deps?: {
|
|
382
746
|
transport?: AgentDeviceDaemonTransport;
|
|
383
747
|
}): AgentDeviceClient;
|
|
384
748
|
|
|
749
|
+
export declare function createCommandRouter<TContext = unknown>(config: CommandRouterConfig<TContext>): CommandRouter<TContext>;
|
|
750
|
+
|
|
751
|
+
export declare function createLocalArtifactAdapter(options?: LocalArtifactAdapterOptions): ArtifactAdapter;
|
|
752
|
+
|
|
753
|
+
export declare function createMemorySessionStore(records?: readonly CommandSessionRecord[]): CommandSessionStore;
|
|
754
|
+
|
|
755
|
+
export declare type CreateTempFileOptions = {
|
|
756
|
+
prefix: string;
|
|
757
|
+
ext: string;
|
|
758
|
+
};
|
|
759
|
+
|
|
385
760
|
declare type DaemonArtifact = {
|
|
386
761
|
field: string;
|
|
387
762
|
artifactId?: string;
|
|
@@ -466,7 +841,41 @@ declare type DeviceKind = 'simulator' | 'emulator' | 'device';
|
|
|
466
841
|
|
|
467
842
|
declare type DeviceTarget = 'mobile' | 'tv' | 'desktop';
|
|
468
843
|
|
|
469
|
-
export declare type
|
|
844
|
+
export declare type DiagnosticsSink = {
|
|
845
|
+
emit(event: {
|
|
846
|
+
level: 'debug' | 'info' | 'warn' | 'error';
|
|
847
|
+
message: string;
|
|
848
|
+
data?: unknown;
|
|
849
|
+
}): void;
|
|
850
|
+
};
|
|
851
|
+
|
|
852
|
+
declare type DiffScreenshotCommandOptions = CommandContext & {
|
|
853
|
+
baseline: FileInputRef;
|
|
854
|
+
current?: FileInputRef | LiveScreenshotInputRef;
|
|
855
|
+
out?: FileOutputRef;
|
|
856
|
+
currentOverlayOut?: FileOutputRef;
|
|
857
|
+
threshold?: number;
|
|
858
|
+
overlayRefs?: boolean;
|
|
859
|
+
surface?: BackendScreenshotOptions['surface'];
|
|
860
|
+
};
|
|
861
|
+
|
|
862
|
+
declare type DiffScreenshotCommandResult = ScreenshotDiffResult & {
|
|
863
|
+
artifacts?: ArtifactDescriptor[];
|
|
864
|
+
};
|
|
865
|
+
|
|
866
|
+
declare type DiffSnapshotCommandOptions = SnapshotCommandOptions;
|
|
867
|
+
|
|
868
|
+
declare type DiffSnapshotCommandResult = {
|
|
869
|
+
mode: 'snapshot';
|
|
870
|
+
baselineInitialized: boolean;
|
|
871
|
+
summary: SnapshotDiffSummary;
|
|
872
|
+
lines: SnapshotDiffLine[];
|
|
873
|
+
warnings?: string[];
|
|
874
|
+
};
|
|
875
|
+
|
|
876
|
+
export declare type ElementTarget = RefTarget_2 | SelectorTarget_2;
|
|
877
|
+
|
|
878
|
+
declare type ElementTarget_2 = SelectorTarget | RefTarget;
|
|
470
879
|
|
|
471
880
|
export declare type EnsureSimulatorOptions = AgentDeviceRequestOverrides & {
|
|
472
881
|
device: string;
|
|
@@ -486,11 +895,61 @@ export declare type EnsureSimulatorResult = {
|
|
|
486
895
|
identifiers: AgentDeviceIdentifiers;
|
|
487
896
|
};
|
|
488
897
|
|
|
898
|
+
export declare type FileInputRef = {
|
|
899
|
+
kind: 'path';
|
|
900
|
+
path: string;
|
|
901
|
+
} | {
|
|
902
|
+
kind: 'uploadedArtifact';
|
|
903
|
+
id: string;
|
|
904
|
+
};
|
|
905
|
+
|
|
906
|
+
export declare type FileOutputRef = {
|
|
907
|
+
kind: 'path';
|
|
908
|
+
path: string;
|
|
909
|
+
} | {
|
|
910
|
+
kind: 'downloadableArtifact';
|
|
911
|
+
clientPath?: string;
|
|
912
|
+
fileName?: string;
|
|
913
|
+
};
|
|
914
|
+
|
|
915
|
+
declare type FillCommandOptions = CommandContext & {
|
|
916
|
+
target: InteractionTarget_2;
|
|
917
|
+
text: string;
|
|
918
|
+
delayMs?: number;
|
|
919
|
+
};
|
|
920
|
+
|
|
921
|
+
declare type FillCommandResult = ResolvedInteractionTarget & {
|
|
922
|
+
text: string;
|
|
923
|
+
warning?: string;
|
|
924
|
+
backendResult?: Record<string, unknown>;
|
|
925
|
+
};
|
|
926
|
+
|
|
489
927
|
export declare type FillOptions = ClientCommandBaseOptions & SelectorSnapshotCommandOptions & InteractionTarget & {
|
|
490
928
|
text: string;
|
|
491
929
|
delayMs?: number;
|
|
492
930
|
};
|
|
493
931
|
|
|
932
|
+
declare type FindAction = {
|
|
933
|
+
kind: 'click';
|
|
934
|
+
} | {
|
|
935
|
+
kind: 'focus';
|
|
936
|
+
} | {
|
|
937
|
+
kind: 'fill';
|
|
938
|
+
value: string;
|
|
939
|
+
} | {
|
|
940
|
+
kind: 'type';
|
|
941
|
+
value: string;
|
|
942
|
+
} | {
|
|
943
|
+
kind: 'get_text';
|
|
944
|
+
} | {
|
|
945
|
+
kind: 'get_attrs';
|
|
946
|
+
} | {
|
|
947
|
+
kind: 'exists';
|
|
948
|
+
} | {
|
|
949
|
+
kind: 'wait';
|
|
950
|
+
timeoutMs?: number;
|
|
951
|
+
};
|
|
952
|
+
|
|
494
953
|
declare type FindBaseOptions = ClientCommandBaseOptions & FindSnapshotCommandOptions & {
|
|
495
954
|
locator?: FindLocator;
|
|
496
955
|
query: string;
|
|
@@ -500,6 +959,8 @@ declare type FindBaseOptions = ClientCommandBaseOptions & FindSnapshotCommandOpt
|
|
|
500
959
|
|
|
501
960
|
export declare type FindLocator = 'any' | 'text' | 'label' | 'value' | 'role' | 'id';
|
|
502
961
|
|
|
962
|
+
declare type FindLocator_2 = 'any' | 'text' | 'label' | 'value' | 'role' | 'id';
|
|
963
|
+
|
|
503
964
|
export declare type FindOptions = (FindBaseOptions & {
|
|
504
965
|
action?: 'click' | 'focus' | 'exists' | 'getText' | 'getAttrs';
|
|
505
966
|
}) | (FindBaseOptions & {
|
|
@@ -510,6 +971,28 @@ export declare type FindOptions = (FindBaseOptions & {
|
|
|
510
971
|
value: string;
|
|
511
972
|
});
|
|
512
973
|
|
|
974
|
+
declare type FindReadCommandOptions = CommandContext & {
|
|
975
|
+
locator?: FindLocator_2;
|
|
976
|
+
query: string;
|
|
977
|
+
action: Extract<FindAction['kind'], 'exists' | 'wait' | 'get_text' | 'get_attrs'>;
|
|
978
|
+
timeoutMs?: number;
|
|
979
|
+
} & SelectorSnapshotOptions;
|
|
980
|
+
|
|
981
|
+
declare type FindReadCommandResult = {
|
|
982
|
+
kind: 'found';
|
|
983
|
+
found: true;
|
|
984
|
+
waitedMs?: number;
|
|
985
|
+
} | {
|
|
986
|
+
kind: 'text';
|
|
987
|
+
ref: string;
|
|
988
|
+
text: string;
|
|
989
|
+
node: SnapshotNode;
|
|
990
|
+
} | {
|
|
991
|
+
kind: 'attrs';
|
|
992
|
+
ref: string;
|
|
993
|
+
node: SnapshotNode;
|
|
994
|
+
};
|
|
995
|
+
|
|
513
996
|
declare type FindSnapshotCommandOptions = Pick<CaptureSnapshotOptions, 'depth' | 'raw'>;
|
|
514
997
|
|
|
515
998
|
declare type FocusOptions_2 = ClientCommandBaseOptions & {
|
|
@@ -518,18 +1001,67 @@ declare type FocusOptions_2 = ClientCommandBaseOptions & {
|
|
|
518
1001
|
};
|
|
519
1002
|
export { FocusOptions_2 as FocusOptions }
|
|
520
1003
|
|
|
1004
|
+
declare type GetAttrsCommandOptions = CommandContext & SelectorSnapshotOptions & {
|
|
1005
|
+
target: ElementTarget_2;
|
|
1006
|
+
};
|
|
1007
|
+
|
|
1008
|
+
declare type GetCommandOptions = CommandContext & SelectorSnapshotOptions & {
|
|
1009
|
+
property: 'text' | 'attrs';
|
|
1010
|
+
target: ElementTarget_2;
|
|
1011
|
+
};
|
|
1012
|
+
|
|
1013
|
+
declare type GetCommandResult = {
|
|
1014
|
+
kind: 'text';
|
|
1015
|
+
target: ResolvedTarget;
|
|
1016
|
+
text: string;
|
|
1017
|
+
node: SnapshotNode;
|
|
1018
|
+
selectorChain?: string[];
|
|
1019
|
+
} | {
|
|
1020
|
+
kind: 'attrs';
|
|
1021
|
+
target: ResolvedTarget;
|
|
1022
|
+
node: SnapshotNode;
|
|
1023
|
+
selectorChain?: string[];
|
|
1024
|
+
};
|
|
1025
|
+
|
|
521
1026
|
export declare type GetOptions = ClientCommandBaseOptions & SelectorSnapshotCommandOptions & ElementTarget & {
|
|
522
1027
|
format: 'text' | 'attrs';
|
|
523
1028
|
};
|
|
524
1029
|
|
|
1030
|
+
declare type GetTextCommandOptions = CommandContext & SelectorSnapshotOptions & {
|
|
1031
|
+
target: ElementTarget_2;
|
|
1032
|
+
};
|
|
1033
|
+
|
|
525
1034
|
export declare type HomeCommandOptions = DeviceCommandBaseOptions;
|
|
526
1035
|
|
|
527
1036
|
export declare type HomeCommandResult = CommandActionResult<'home'>;
|
|
528
1037
|
|
|
529
|
-
export declare type InteractionTarget =
|
|
1038
|
+
export declare type InteractionTarget = PointTarget_2 | RefTarget_2 | SelectorTarget_2;
|
|
1039
|
+
|
|
1040
|
+
declare type InteractionTarget_2 = ElementTarget_2 | PointTarget;
|
|
1041
|
+
|
|
1042
|
+
export declare function isAgentDeviceError(err: unknown): err is AppError;
|
|
1043
|
+
|
|
1044
|
+
declare type IsCommandOptions = CommandContext & SelectorSnapshotOptions & {
|
|
1045
|
+
predicate: 'visible' | 'hidden' | 'exists' | 'editable' | 'selected' | 'text';
|
|
1046
|
+
selector: string;
|
|
1047
|
+
expectedText?: string;
|
|
1048
|
+
};
|
|
1049
|
+
|
|
1050
|
+
declare type IsCommandResult = {
|
|
1051
|
+
predicate: IsCommandOptions['predicate'];
|
|
1052
|
+
pass: true;
|
|
1053
|
+
selector: string;
|
|
1054
|
+
matches?: number;
|
|
1055
|
+
text?: string;
|
|
1056
|
+
selectorChain?: string[];
|
|
1057
|
+
};
|
|
530
1058
|
|
|
531
1059
|
export declare type IsOptions = IsTextPredicateOptions | IsStatePredicateOptions;
|
|
532
1060
|
|
|
1061
|
+
declare type IsSelectorCommandOptions = CommandContext & SelectorSnapshotOptions & {
|
|
1062
|
+
target: SelectorTarget;
|
|
1063
|
+
};
|
|
1064
|
+
|
|
533
1065
|
declare type IsStatePredicateOptions = ClientCommandBaseOptions & SelectorSnapshotCommandOptions & {
|
|
534
1066
|
predicate: 'visible' | 'hidden' | 'exists' | 'editable' | 'selected';
|
|
535
1067
|
selector: string;
|
|
@@ -585,6 +1117,18 @@ declare type LeaseScopedOptions = LeaseOptions & {
|
|
|
585
1117
|
leaseId: string;
|
|
586
1118
|
};
|
|
587
1119
|
|
|
1120
|
+
declare type LiveScreenshotInputRef = {
|
|
1121
|
+
kind: 'live';
|
|
1122
|
+
};
|
|
1123
|
+
|
|
1124
|
+
export declare type LocalArtifactAdapterOptions = {
|
|
1125
|
+
cwd?: string;
|
|
1126
|
+
tempDir?: string;
|
|
1127
|
+
rootDir?: string;
|
|
1128
|
+
};
|
|
1129
|
+
|
|
1130
|
+
export declare function localCommandPolicy(overrides?: Partial<CommandPolicy>): CommandPolicy;
|
|
1131
|
+
|
|
588
1132
|
export declare type LogsOptions = AgentDeviceRequestOverrides & {
|
|
589
1133
|
action?: 'path' | 'start' | 'stop' | 'doctor' | 'mark' | 'clear';
|
|
590
1134
|
message?: string;
|
|
@@ -636,6 +1180,11 @@ export declare type MetroPrepareOptions = {
|
|
|
636
1180
|
publicBaseUrl: string;
|
|
637
1181
|
proxyBaseUrl?: string;
|
|
638
1182
|
bearerToken?: string;
|
|
1183
|
+
bridgeScope?: {
|
|
1184
|
+
tenantId: string;
|
|
1185
|
+
runId: string;
|
|
1186
|
+
leaseId: string;
|
|
1187
|
+
};
|
|
639
1188
|
launchUrl?: string;
|
|
640
1189
|
companionProfileKey?: string;
|
|
641
1190
|
companionConsumerKey?: string;
|
|
@@ -661,6 +1210,22 @@ export declare type NetworkOptions = AgentDeviceRequestOverrides & {
|
|
|
661
1210
|
include?: 'summary' | 'headers' | 'body' | 'all';
|
|
662
1211
|
};
|
|
663
1212
|
|
|
1213
|
+
export declare function normalizeAgentDeviceError(err: unknown, context?: {
|
|
1214
|
+
diagnosticId?: string;
|
|
1215
|
+
logPath?: string;
|
|
1216
|
+
}): NormalizedError;
|
|
1217
|
+
|
|
1218
|
+
export declare type NormalizedError = {
|
|
1219
|
+
code: string;
|
|
1220
|
+
message: string;
|
|
1221
|
+
hint?: string;
|
|
1222
|
+
diagnosticId?: string;
|
|
1223
|
+
logPath?: string;
|
|
1224
|
+
details?: Record<string, unknown>;
|
|
1225
|
+
};
|
|
1226
|
+
|
|
1227
|
+
export declare type OutputVisibility = 'client-visible' | 'internal';
|
|
1228
|
+
|
|
664
1229
|
export declare type PerfOptions = ClientCommandBaseOptions;
|
|
665
1230
|
|
|
666
1231
|
export declare type PermissionTarget = 'camera' | 'microphone' | 'photos' | 'contacts' | 'contacts-limited' | 'notifications' | 'calendar' | 'location' | 'location-always' | 'media-library' | 'motion' | 'reminders' | 'siri' | 'accessibility' | 'screen-recording' | 'input-monitoring';
|
|
@@ -681,6 +1246,12 @@ export declare type Point = {
|
|
|
681
1246
|
};
|
|
682
1247
|
|
|
683
1248
|
declare type PointTarget = {
|
|
1249
|
+
kind: 'point';
|
|
1250
|
+
x: number;
|
|
1251
|
+
y: number;
|
|
1252
|
+
};
|
|
1253
|
+
|
|
1254
|
+
declare type PointTarget_2 = {
|
|
684
1255
|
x: number;
|
|
685
1256
|
y: number;
|
|
686
1257
|
ref?: never;
|
|
@@ -704,6 +1275,20 @@ declare type PrepareMetroRuntimeResult = {
|
|
|
704
1275
|
bridge: MetroBridgeResult | null;
|
|
705
1276
|
};
|
|
706
1277
|
|
|
1278
|
+
declare type PressCommandOptions = CommandContext & {
|
|
1279
|
+
target: InteractionTarget_2;
|
|
1280
|
+
button?: 'primary' | 'secondary' | 'middle';
|
|
1281
|
+
count?: number;
|
|
1282
|
+
intervalMs?: number;
|
|
1283
|
+
holdMs?: number;
|
|
1284
|
+
jitterPx?: number;
|
|
1285
|
+
doubleTap?: boolean;
|
|
1286
|
+
};
|
|
1287
|
+
|
|
1288
|
+
declare type PressCommandResult = ResolvedInteractionTarget & {
|
|
1289
|
+
backendResult?: Record<string, unknown>;
|
|
1290
|
+
};
|
|
1291
|
+
|
|
707
1292
|
export declare type PressOptions = ClientCommandBaseOptions & SelectorSnapshotCommandOptions & InteractionTarget & RepeatedPressOptions;
|
|
708
1293
|
|
|
709
1294
|
declare type RawSnapshotNode = {
|
|
@@ -729,10 +1314,13 @@ declare type RawSnapshotNode = {
|
|
|
729
1314
|
hiddenContentBelow?: boolean;
|
|
730
1315
|
};
|
|
731
1316
|
|
|
1317
|
+
declare type RecordingQuality = 5 | 6 | 7 | 8 | 9 | 10;
|
|
1318
|
+
|
|
732
1319
|
export declare type RecordOptions = AgentDeviceRequestOverrides & {
|
|
733
1320
|
action: 'start' | 'stop';
|
|
734
1321
|
path?: string;
|
|
735
1322
|
fps?: number;
|
|
1323
|
+
quality?: RecordingQuality;
|
|
736
1324
|
hideTouches?: boolean;
|
|
737
1325
|
};
|
|
738
1326
|
|
|
@@ -743,7 +1331,17 @@ export declare type Rect = {
|
|
|
743
1331
|
height: number;
|
|
744
1332
|
};
|
|
745
1333
|
|
|
1334
|
+
export declare function ref(refInput: string, options?: {
|
|
1335
|
+
fallbackLabel?: string;
|
|
1336
|
+
}): RefTarget;
|
|
1337
|
+
|
|
746
1338
|
declare type RefTarget = {
|
|
1339
|
+
kind: 'ref';
|
|
1340
|
+
ref: string;
|
|
1341
|
+
fallbackLabel?: string;
|
|
1342
|
+
};
|
|
1343
|
+
|
|
1344
|
+
declare type RefTarget_2 = {
|
|
747
1345
|
ref: string;
|
|
748
1346
|
label?: string;
|
|
749
1347
|
x?: never;
|
|
@@ -774,8 +1372,65 @@ export declare type ReplayTestOptions = AgentDeviceRequestOverrides & AgentDevic
|
|
|
774
1372
|
reportJunit?: string;
|
|
775
1373
|
};
|
|
776
1374
|
|
|
1375
|
+
export declare type ReservedOutputFile = {
|
|
1376
|
+
path: string;
|
|
1377
|
+
visibility: OutputVisibility;
|
|
1378
|
+
publish: () => Promise<ArtifactDescriptor | undefined>;
|
|
1379
|
+
cleanup?: () => Promise<void>;
|
|
1380
|
+
};
|
|
1381
|
+
|
|
1382
|
+
export declare type ReserveOutputOptions = {
|
|
1383
|
+
field: string;
|
|
1384
|
+
ext: string;
|
|
1385
|
+
requestedClientPath?: string;
|
|
1386
|
+
visibility?: OutputVisibility;
|
|
1387
|
+
};
|
|
1388
|
+
|
|
1389
|
+
export declare type ResolvedInputFile = {
|
|
1390
|
+
path: string;
|
|
1391
|
+
cleanup?: () => Promise<void>;
|
|
1392
|
+
};
|
|
1393
|
+
|
|
1394
|
+
declare type ResolvedInteractionTarget = {
|
|
1395
|
+
kind: 'point';
|
|
1396
|
+
point: Point;
|
|
1397
|
+
} | {
|
|
1398
|
+
kind: 'ref';
|
|
1399
|
+
point: Point;
|
|
1400
|
+
target: Extract<ResolvedTarget, {
|
|
1401
|
+
kind: 'ref';
|
|
1402
|
+
}>;
|
|
1403
|
+
node: SnapshotNode;
|
|
1404
|
+
selectorChain: string[];
|
|
1405
|
+
refLabel?: string;
|
|
1406
|
+
} | {
|
|
1407
|
+
kind: 'selector';
|
|
1408
|
+
point: Point;
|
|
1409
|
+
target: Extract<ResolvedTarget, {
|
|
1410
|
+
kind: 'selector';
|
|
1411
|
+
}>;
|
|
1412
|
+
node: SnapshotNode;
|
|
1413
|
+
selectorChain: string[];
|
|
1414
|
+
refLabel?: string;
|
|
1415
|
+
};
|
|
1416
|
+
|
|
777
1417
|
declare type ResolvedMetroKind = Exclude<MetroPrepareKind, 'auto'>;
|
|
778
1418
|
|
|
1419
|
+
declare type ResolvedTarget = {
|
|
1420
|
+
kind: 'selector';
|
|
1421
|
+
selector: string;
|
|
1422
|
+
} | {
|
|
1423
|
+
kind: 'ref';
|
|
1424
|
+
ref: string;
|
|
1425
|
+
};
|
|
1426
|
+
|
|
1427
|
+
export declare type ResolveInputOptions = {
|
|
1428
|
+
usage: string;
|
|
1429
|
+
field?: string;
|
|
1430
|
+
};
|
|
1431
|
+
|
|
1432
|
+
export declare function restrictedCommandPolicy(overrides?: Partial<CommandPolicy>): CommandPolicy;
|
|
1433
|
+
|
|
779
1434
|
export declare type RotateCommandOptions = DeviceCommandBaseOptions & {
|
|
780
1435
|
orientation: 'portrait' | 'portrait-upside-down' | 'landscape-left' | 'landscape-right';
|
|
781
1436
|
};
|
|
@@ -784,6 +1439,131 @@ export declare type RotateCommandResult = CommandActionResult<'rotate'> & {
|
|
|
784
1439
|
orientation?: RotateCommandOptions['orientation'];
|
|
785
1440
|
};
|
|
786
1441
|
|
|
1442
|
+
export declare type RuntimeCommand<TOptions = Record<string, unknown>, TResult = CommandResult> = (runtime: AgentDeviceRuntime, options: TOptions) => Promise<TResult>;
|
|
1443
|
+
|
|
1444
|
+
declare type ScreenshotCommandOptions = CommandContext & {
|
|
1445
|
+
out?: FileOutputRef;
|
|
1446
|
+
fullscreen?: boolean;
|
|
1447
|
+
overlayRefs?: boolean;
|
|
1448
|
+
appId?: string;
|
|
1449
|
+
appBundleId?: string;
|
|
1450
|
+
surface?: 'app' | 'frontmost-app' | 'desktop' | 'menubar';
|
|
1451
|
+
};
|
|
1452
|
+
|
|
1453
|
+
declare type ScreenshotCommandResult = {
|
|
1454
|
+
path: string;
|
|
1455
|
+
artifacts?: ArtifactDescriptor[];
|
|
1456
|
+
message?: string;
|
|
1457
|
+
};
|
|
1458
|
+
|
|
1459
|
+
declare type ScreenshotDiffRegion = {
|
|
1460
|
+
index: number;
|
|
1461
|
+
rect: {
|
|
1462
|
+
x: number;
|
|
1463
|
+
y: number;
|
|
1464
|
+
width: number;
|
|
1465
|
+
height: number;
|
|
1466
|
+
};
|
|
1467
|
+
normalizedRect: {
|
|
1468
|
+
x: number;
|
|
1469
|
+
y: number;
|
|
1470
|
+
width: number;
|
|
1471
|
+
height: number;
|
|
1472
|
+
};
|
|
1473
|
+
differentPixels: number;
|
|
1474
|
+
shareOfDiffPercentage: number;
|
|
1475
|
+
densityPercentage: number;
|
|
1476
|
+
shape: 'compact' | 'horizontal-band' | 'vertical-band' | 'large-area';
|
|
1477
|
+
size: 'small' | 'medium' | 'large';
|
|
1478
|
+
location: string;
|
|
1479
|
+
averageBaselineColorHex: string;
|
|
1480
|
+
averageCurrentColorHex: string;
|
|
1481
|
+
baselineLuminance: number;
|
|
1482
|
+
currentLuminance: number;
|
|
1483
|
+
dominantChange: 'brighter' | 'darker' | 'color-shift' | 'mixed';
|
|
1484
|
+
currentOverlayMatches?: ScreenshotDiffRegionOverlayMatch[];
|
|
1485
|
+
};
|
|
1486
|
+
|
|
1487
|
+
declare type ScreenshotDiffRegionOverlayMatch = {
|
|
1488
|
+
ref: string;
|
|
1489
|
+
label?: string;
|
|
1490
|
+
regionCoveragePercentage: number;
|
|
1491
|
+
rect: {
|
|
1492
|
+
x: number;
|
|
1493
|
+
y: number;
|
|
1494
|
+
width: number;
|
|
1495
|
+
height: number;
|
|
1496
|
+
};
|
|
1497
|
+
};
|
|
1498
|
+
|
|
1499
|
+
declare type ScreenshotDiffResult = {
|
|
1500
|
+
diffPath?: string;
|
|
1501
|
+
totalPixels: number;
|
|
1502
|
+
differentPixels: number;
|
|
1503
|
+
mismatchPercentage: number;
|
|
1504
|
+
match: boolean;
|
|
1505
|
+
dimensionMismatch?: ScreenshotDimensionMismatch;
|
|
1506
|
+
regions?: ScreenshotDiffRegion[];
|
|
1507
|
+
currentOverlayPath?: string;
|
|
1508
|
+
currentOverlayRefCount?: number;
|
|
1509
|
+
ocr?: ScreenshotOcrSummary;
|
|
1510
|
+
nonTextDeltas?: ScreenshotNonTextDelta[];
|
|
1511
|
+
};
|
|
1512
|
+
|
|
1513
|
+
declare type ScreenshotDimensionMismatch = {
|
|
1514
|
+
expected: {
|
|
1515
|
+
width: number;
|
|
1516
|
+
height: number;
|
|
1517
|
+
};
|
|
1518
|
+
actual: {
|
|
1519
|
+
width: number;
|
|
1520
|
+
height: number;
|
|
1521
|
+
};
|
|
1522
|
+
};
|
|
1523
|
+
|
|
1524
|
+
declare type ScreenshotNonTextDelta = {
|
|
1525
|
+
index: number;
|
|
1526
|
+
regionIndex?: number;
|
|
1527
|
+
slot: 'leading' | 'trailing' | 'background' | 'separator' | 'unknown';
|
|
1528
|
+
likelyKind: 'icon' | 'toggle' | 'chevron' | 'separator' | 'visual';
|
|
1529
|
+
rect: Rect;
|
|
1530
|
+
nearestText?: string;
|
|
1531
|
+
};
|
|
1532
|
+
|
|
1533
|
+
declare type ScreenshotOcrMovementCluster = {
|
|
1534
|
+
texts: string[];
|
|
1535
|
+
xRange: {
|
|
1536
|
+
min: number;
|
|
1537
|
+
max: number;
|
|
1538
|
+
};
|
|
1539
|
+
yRange: {
|
|
1540
|
+
min: number;
|
|
1541
|
+
max: number;
|
|
1542
|
+
};
|
|
1543
|
+
};
|
|
1544
|
+
|
|
1545
|
+
declare type ScreenshotOcrSummary = {
|
|
1546
|
+
provider: 'tesseract';
|
|
1547
|
+
baselineBlocks: number;
|
|
1548
|
+
currentBlocks: number;
|
|
1549
|
+
matches: ScreenshotOcrTextMatch[];
|
|
1550
|
+
movementClusters?: ScreenshotOcrMovementCluster[];
|
|
1551
|
+
};
|
|
1552
|
+
|
|
1553
|
+
declare type ScreenshotOcrTextMatch = {
|
|
1554
|
+
text: string;
|
|
1555
|
+
baselineRect: Rect;
|
|
1556
|
+
currentRect: Rect;
|
|
1557
|
+
delta: {
|
|
1558
|
+
x: number;
|
|
1559
|
+
y: number;
|
|
1560
|
+
width: number;
|
|
1561
|
+
height: number;
|
|
1562
|
+
};
|
|
1563
|
+
confidence: number;
|
|
1564
|
+
possibleTextMetricMismatch: boolean;
|
|
1565
|
+
};
|
|
1566
|
+
|
|
787
1567
|
export declare type ScreenshotOverlayRef = {
|
|
788
1568
|
ref: string;
|
|
789
1569
|
label?: string;
|
|
@@ -799,9 +1579,22 @@ declare type ScrollOptions_2 = ClientCommandBaseOptions & {
|
|
|
799
1579
|
};
|
|
800
1580
|
export { ScrollOptions_2 as ScrollOptions }
|
|
801
1581
|
|
|
1582
|
+
export declare function selector(expression: string): SelectorTarget;
|
|
1583
|
+
|
|
802
1584
|
declare type SelectorSnapshotCommandOptions = Pick<CaptureSnapshotOptions, 'depth' | 'scope' | 'raw'>;
|
|
803
1585
|
|
|
1586
|
+
export declare type SelectorSnapshotOptions = {
|
|
1587
|
+
depth?: number;
|
|
1588
|
+
scope?: string;
|
|
1589
|
+
raw?: boolean;
|
|
1590
|
+
};
|
|
1591
|
+
|
|
804
1592
|
declare type SelectorTarget = {
|
|
1593
|
+
kind: 'selector';
|
|
1594
|
+
selector: string;
|
|
1595
|
+
};
|
|
1596
|
+
|
|
1597
|
+
declare type SelectorTarget_2 = {
|
|
805
1598
|
selector: string;
|
|
806
1599
|
x?: never;
|
|
807
1600
|
y?: never;
|
|
@@ -844,10 +1637,56 @@ export declare type SettingsUpdateOptions = (ClientCommandBaseOptions & {
|
|
|
844
1637
|
mode?: 'full' | 'limited';
|
|
845
1638
|
});
|
|
846
1639
|
|
|
1640
|
+
declare type SnapshotBackend = 'xctest' | 'android' | 'macos-helper' | 'linux-atspi';
|
|
1641
|
+
|
|
1642
|
+
declare type SnapshotCommandOptions = CommandContext & {
|
|
1643
|
+
interactiveOnly?: boolean;
|
|
1644
|
+
compact?: boolean;
|
|
1645
|
+
depth?: number;
|
|
1646
|
+
scope?: string;
|
|
1647
|
+
raw?: boolean;
|
|
1648
|
+
};
|
|
1649
|
+
|
|
1650
|
+
declare type SnapshotCommandResult = {
|
|
1651
|
+
nodes: SnapshotNode[];
|
|
1652
|
+
truncated: boolean;
|
|
1653
|
+
appName?: string;
|
|
1654
|
+
appBundleId?: string;
|
|
1655
|
+
visibility?: SnapshotVisibility;
|
|
1656
|
+
warnings?: string[];
|
|
1657
|
+
};
|
|
1658
|
+
|
|
1659
|
+
declare type SnapshotDiffLine = {
|
|
1660
|
+
kind: 'added' | 'removed' | 'unchanged';
|
|
1661
|
+
text: string;
|
|
1662
|
+
};
|
|
1663
|
+
|
|
1664
|
+
declare type SnapshotDiffSummary = {
|
|
1665
|
+
additions: number;
|
|
1666
|
+
removals: number;
|
|
1667
|
+
unchanged: number;
|
|
1668
|
+
};
|
|
1669
|
+
|
|
847
1670
|
export declare type SnapshotNode = RawSnapshotNode & {
|
|
848
1671
|
ref: string;
|
|
849
1672
|
};
|
|
850
1673
|
|
|
1674
|
+
declare type SnapshotOptions = {
|
|
1675
|
+
interactiveOnly?: boolean;
|
|
1676
|
+
compact?: boolean;
|
|
1677
|
+
depth?: number;
|
|
1678
|
+
scope?: string;
|
|
1679
|
+
raw?: boolean;
|
|
1680
|
+
};
|
|
1681
|
+
|
|
1682
|
+
declare type SnapshotState = {
|
|
1683
|
+
nodes: SnapshotNode[];
|
|
1684
|
+
createdAt: number;
|
|
1685
|
+
truncated?: boolean;
|
|
1686
|
+
backend?: SnapshotBackend;
|
|
1687
|
+
comparisonSafe?: boolean;
|
|
1688
|
+
};
|
|
1689
|
+
|
|
851
1690
|
export declare type SnapshotVisibility = {
|
|
852
1691
|
partial: boolean;
|
|
853
1692
|
visibleNodeCount: number;
|
|
@@ -880,11 +1719,30 @@ export declare type SwipeOptions = ClientCommandBaseOptions & {
|
|
|
880
1719
|
pattern?: 'one-way' | 'ping-pong';
|
|
881
1720
|
};
|
|
882
1721
|
|
|
1722
|
+
export declare type TemporaryFile = {
|
|
1723
|
+
path: string;
|
|
1724
|
+
visibility: 'internal';
|
|
1725
|
+
cleanup: () => Promise<void>;
|
|
1726
|
+
};
|
|
1727
|
+
|
|
883
1728
|
export declare type TraceOptions = AgentDeviceRequestOverrides & {
|
|
884
1729
|
action: 'start' | 'stop';
|
|
885
1730
|
path?: string;
|
|
886
1731
|
};
|
|
887
1732
|
|
|
1733
|
+
export declare type TypeTextCommandOptions = CommandContext & {
|
|
1734
|
+
text: string;
|
|
1735
|
+
delayMs?: number;
|
|
1736
|
+
};
|
|
1737
|
+
|
|
1738
|
+
export declare type TypeTextCommandResult = {
|
|
1739
|
+
kind: 'text';
|
|
1740
|
+
text: string;
|
|
1741
|
+
delayMs: number;
|
|
1742
|
+
backendResult?: Record<string, unknown>;
|
|
1743
|
+
message?: string;
|
|
1744
|
+
};
|
|
1745
|
+
|
|
888
1746
|
export declare type TypeTextOptions = ClientCommandBaseOptions & {
|
|
889
1747
|
text: string;
|
|
890
1748
|
delayMs?: number;
|
|
@@ -892,12 +1750,44 @@ export declare type TypeTextOptions = ClientCommandBaseOptions & {
|
|
|
892
1750
|
|
|
893
1751
|
export declare type WaitCommandOptions = DeviceCommandBaseOptions & WaitCommandTarget;
|
|
894
1752
|
|
|
1753
|
+
declare type WaitCommandOptions_2 = CommandContext & SelectorSnapshotOptions & {
|
|
1754
|
+
target: {
|
|
1755
|
+
kind: 'sleep';
|
|
1756
|
+
durationMs: number;
|
|
1757
|
+
} | {
|
|
1758
|
+
kind: 'text';
|
|
1759
|
+
text: string;
|
|
1760
|
+
timeoutMs?: number | null;
|
|
1761
|
+
} | {
|
|
1762
|
+
kind: 'ref';
|
|
1763
|
+
ref: string;
|
|
1764
|
+
timeoutMs?: number | null;
|
|
1765
|
+
} | {
|
|
1766
|
+
kind: 'selector';
|
|
1767
|
+
selector: string;
|
|
1768
|
+
timeoutMs?: number | null;
|
|
1769
|
+
};
|
|
1770
|
+
};
|
|
1771
|
+
|
|
895
1772
|
export declare type WaitCommandResult = DaemonResponseData & {
|
|
896
1773
|
waitedMs?: number;
|
|
897
1774
|
text?: string;
|
|
898
1775
|
selector?: string;
|
|
899
1776
|
};
|
|
900
1777
|
|
|
1778
|
+
declare type WaitCommandResult_2 = {
|
|
1779
|
+
kind: 'sleep';
|
|
1780
|
+
waitedMs: number;
|
|
1781
|
+
} | {
|
|
1782
|
+
kind: 'text';
|
|
1783
|
+
waitedMs: number;
|
|
1784
|
+
text: string;
|
|
1785
|
+
} | {
|
|
1786
|
+
kind: 'selector';
|
|
1787
|
+
waitedMs: number;
|
|
1788
|
+
selector: string;
|
|
1789
|
+
};
|
|
1790
|
+
|
|
901
1791
|
declare type WaitCommandTarget = {
|
|
902
1792
|
durationMs: number;
|
|
903
1793
|
text?: never;
|
|
@@ -924,6 +1814,11 @@ declare type WaitCommandTarget = {
|
|
|
924
1814
|
timeoutMs?: number;
|
|
925
1815
|
});
|
|
926
1816
|
|
|
1817
|
+
declare type WaitForTextCommandOptions = CommandContext & SelectorSnapshotOptions & {
|
|
1818
|
+
text: string;
|
|
1819
|
+
timeoutMs?: number | null;
|
|
1820
|
+
};
|
|
1821
|
+
|
|
927
1822
|
declare type WaitSnapshotOptions = Pick<CaptureSnapshotOptions, 'depth' | 'scope' | 'raw'>;
|
|
928
1823
|
|
|
929
1824
|
export { }
|