@e2edev/agent-device 0.1.0 → 0.2.1
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/README.md +15 -3
- package/dist/device.d.ts +8 -1
- package/dist/device.d.ts.map +1 -1
- package/dist/device.js +44 -20
- package/dist/device.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/png.d.ts +1 -19
- package/dist/png.d.ts.map +1 -1
- package/dist/png.js +15 -162
- package/dist/png.js.map +1 -1
- package/dist/support.d.ts +0 -16
- package/dist/support.d.ts.map +1 -1
- package/dist/support.js +0 -39
- package/dist/support.js.map +1 -1
- package/dist/surface.d.ts +39 -8
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +81 -34
- package/dist/surface.js.map +1 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +14 -15
- package/dist/tools.js.map +1 -1
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -8,6 +8,11 @@ on a device target unchanged; nothing in `e2e` core knows this package exists.
|
|
|
8
8
|
|
|
9
9
|
## Install
|
|
10
10
|
|
|
11
|
+
Run `npx @e2edev/e2e@beta init` and choose **agent-device** for a Settings
|
|
12
|
+
example with optional AI testing. Init defaults to iOS on macOS and Android
|
|
13
|
+
elsewhere; change the platform in `e2e.config.ts` when needed.
|
|
14
|
+
Or add the packages to an existing project:
|
|
15
|
+
|
|
11
16
|
```bash
|
|
12
17
|
npm install --save-dev @e2edev/e2e @e2edev/agent-device
|
|
13
18
|
```
|
|
@@ -46,6 +51,7 @@ Options:
|
|
|
46
51
|
| --- | --- |
|
|
47
52
|
| `platform` | `'ios'` or `'android'`. |
|
|
48
53
|
| `app` | Bundle id, package, or display name opened fresh at the start of every attempt. Also unlocks `app.restart()` and `app.clearState()`. |
|
|
54
|
+
| `appPath` | An iOS `.app` bundle or Android `.apk` installed once per worker before the first attempt, resolved against the project root. Without `app`, the installed bundle id or package is the app opened per attempt. |
|
|
49
55
|
| `device` | Simulator or emulator name or id; a booted one is picked otherwise. |
|
|
50
56
|
| `session` | agent-device session name; defaults to `e2e-<target name>`. One run per session at a time. |
|
|
51
57
|
| `snapshot` | `'full'` (default, includes static text) or `'interactive'` (actionable nodes only). |
|
|
@@ -104,9 +110,15 @@ test('shows the version offline in dark mode', async ({ agent, device, screen })
|
|
|
104
110
|
|
|
105
111
|
Methods: `setNetwork`, `setAirplaneMode`, `setPermission`, `setLocation`,
|
|
106
112
|
`clearLocation`, `setAppearance`, `setOrientation`, `setBiometrics`,
|
|
107
|
-
`enrollBiometrics`, `openApp`, `closeApp`, `foregroundApp`,
|
|
108
|
-
`alert`, `dismissKeyboard`, `clipboard`, `setClipboard`, and
|
|
109
|
-
accessor.
|
|
113
|
+
`enrollBiometrics`, `installApp`, `openApp`, `closeApp`, `foregroundApp`,
|
|
114
|
+
`home`, `back`, `alert`, `dismissKeyboard`, `clipboard`, `setClipboard`, and
|
|
115
|
+
the `locator` accessor.
|
|
116
|
+
|
|
117
|
+
`installApp(appPath, { app, reinstall })` puts a build on the device from a
|
|
118
|
+
test, for upgrade and fresh-install paths the `appPath` option cannot express.
|
|
119
|
+
A plain install replaces the binary and keeps its data; `reinstall: true`
|
|
120
|
+
removes the app named by `app` (default: the pinned app) first. It resolves to
|
|
121
|
+
the bundle id or package to `openApp` the build by.
|
|
110
122
|
|
|
111
123
|
## Agent tools
|
|
112
124
|
|
package/dist/device.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* `device.<method>` step bounded by the action timeout.
|
|
6
6
|
*/
|
|
7
7
|
import type { BackendFixtureContext, Locator } from '@e2edev/e2e/backend';
|
|
8
|
-
import type { AgentDeviceSurface } from './surface.ts';
|
|
8
|
+
import type { AgentDeviceSurface, InstallAppOptions, InstalledApp } from './surface.ts';
|
|
9
9
|
/** Permissions agent-device can grant, deny, or reset on an open app. */
|
|
10
10
|
export type DevicePermission = 'camera' | 'microphone' | 'photos' | 'contacts' | 'notifications' | 'calendar' | 'location' | 'reminders' | 'motion' | 'siri' | 'media-library';
|
|
11
11
|
export type DeviceOrientation = 'portrait' | 'portrait-upside-down' | 'landscape-left' | 'landscape-right';
|
|
@@ -43,6 +43,13 @@ export interface Device {
|
|
|
43
43
|
setBiometrics(sensor: BiometricSensor, result: 'match' | 'nonmatch'): Promise<void>;
|
|
44
44
|
/** Enrolls or unenrolls the simulator's Face ID or Touch ID. */
|
|
45
45
|
enrollBiometrics(sensor: 'faceid' | 'touchid', enrolled: boolean): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Installs a build (an iOS `.app` bundle or an Android `.apk`, resolved
|
|
48
|
+
* against the project root) on the device. `reinstall: true` removes
|
|
49
|
+
* the app first so it starts with no data; a plain install replaces the
|
|
50
|
+
* binary and keeps its data. Resolves to the identity to `openApp` it by.
|
|
51
|
+
*/
|
|
52
|
+
installApp(appPath: string, options?: InstallAppOptions): Promise<InstalledApp>;
|
|
46
53
|
/** Brings an app to the foreground; `relaunch` restarts it fresh. */
|
|
47
54
|
openApp(app: string, options?: {
|
|
48
55
|
relaunch?: boolean;
|
package/dist/device.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"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"}
|
package/dist/device.js
CHANGED
|
@@ -6,46 +6,48 @@
|
|
|
6
6
|
*/
|
|
7
7
|
/** Builds the device fixture for one attempt. */
|
|
8
8
|
export function createDeviceFixture(surface, context) {
|
|
9
|
-
const
|
|
10
|
-
return {
|
|
9
|
+
const device = {
|
|
11
10
|
locator: (selector) => context.locator({ kind: 'selector', selector }),
|
|
12
11
|
async setNetwork(state) {
|
|
13
|
-
await surface.command('device.setNetwork', (client) => client.settings.update({ setting: 'wifi', state: state === 'offline' ? 'off' : 'on' }), signal);
|
|
12
|
+
await surface.command('device.setNetwork', (client) => client.settings.update({ setting: 'wifi', state: state === 'offline' ? 'off' : 'on' }), context.signal);
|
|
14
13
|
},
|
|
15
14
|
async setAirplaneMode(enabled) {
|
|
16
|
-
await surface.command('device.setAirplaneMode', (client) => client.settings.update({ setting: 'airplane', state: enabled ? 'on' : 'off' }), signal);
|
|
15
|
+
await surface.command('device.setAirplaneMode', (client) => client.settings.update({ setting: 'airplane', state: enabled ? 'on' : 'off' }), context.signal);
|
|
17
16
|
},
|
|
18
17
|
async setPermission(permission, state) {
|
|
19
|
-
await surface.command('device.setPermission', (client) => client.settings.update({ setting: 'permission', permission, state }), signal);
|
|
18
|
+
await surface.command('device.setPermission', (client) => client.settings.update({ setting: 'permission', permission, state }), context.signal);
|
|
20
19
|
},
|
|
21
20
|
async setLocation({ latitude, longitude }) {
|
|
22
|
-
await surface.command('device.setLocation', (client) => client.settings.update({ setting: 'location', state: 'set', latitude, longitude }), signal);
|
|
21
|
+
await surface.command('device.setLocation', (client) => client.settings.update({ setting: 'location', state: 'set', latitude, longitude }), context.signal);
|
|
23
22
|
},
|
|
24
23
|
async clearLocation() {
|
|
25
|
-
await surface.command('device.clearLocation', (client) => client.settings.update({ setting: 'location', state: 'off' }), signal);
|
|
24
|
+
await surface.command('device.clearLocation', (client) => client.settings.update({ setting: 'location', state: 'off' }), context.signal);
|
|
26
25
|
},
|
|
27
26
|
async setAppearance(mode) {
|
|
28
|
-
await surface.command('device.setAppearance', (client) => client.settings.update({ setting: 'appearance', state: mode }), signal);
|
|
27
|
+
await surface.command('device.setAppearance', (client) => client.settings.update({ setting: 'appearance', state: mode }), context.signal);
|
|
29
28
|
},
|
|
30
29
|
async setOrientation(orientation) {
|
|
31
|
-
await surface.command('device.setOrientation', (client) => client.command.orientation({ orientation }), signal);
|
|
30
|
+
await surface.command('device.setOrientation', (client) => client.command.orientation({ orientation }), context.signal);
|
|
32
31
|
},
|
|
33
32
|
async setBiometrics(sensor, result) {
|
|
34
33
|
await surface.command('device.setBiometrics', (client) => sensor === 'fingerprint'
|
|
35
34
|
? client.settings.update({ setting: 'fingerprint', state: result })
|
|
36
|
-
: client.settings.update({ setting: sensor, state: result }), signal);
|
|
35
|
+
: client.settings.update({ setting: sensor, state: result }), context.signal);
|
|
37
36
|
},
|
|
38
37
|
async enrollBiometrics(sensor, enrolled) {
|
|
39
|
-
await surface.command('device.enrollBiometrics', (client) => client.settings.update({ setting: sensor, state: enrolled ? 'enroll' : 'unenroll' }), signal);
|
|
38
|
+
await surface.command('device.enrollBiometrics', (client) => client.settings.update({ setting: sensor, state: enrolled ? 'enroll' : 'unenroll' }), context.signal);
|
|
39
|
+
},
|
|
40
|
+
async installApp(appPath, options) {
|
|
41
|
+
return surface.installApp(appPath, options ?? {}, context.signal);
|
|
40
42
|
},
|
|
41
43
|
async openApp(app, options) {
|
|
42
|
-
await surface.openApp(app, options?.relaunch === true, signal);
|
|
44
|
+
await surface.openApp(app, options?.relaunch === true, context.signal);
|
|
43
45
|
},
|
|
44
46
|
async closeApp() {
|
|
45
|
-
await surface.command('device.closeApp', (client) => client.apps.close({}), signal);
|
|
47
|
+
await surface.command('device.closeApp', (client) => client.apps.close({}), context.signal);
|
|
46
48
|
},
|
|
47
49
|
async foregroundApp() {
|
|
48
|
-
const state = await surface.command('device.foregroundApp', (client) => client.command.appState({}), signal);
|
|
50
|
+
const state = await surface.command('device.foregroundApp', (client) => client.command.appState({}), context.signal);
|
|
49
51
|
if ('package' in state)
|
|
50
52
|
return { name: state.package, bundleId: state.package };
|
|
51
53
|
return {
|
|
@@ -54,24 +56,46 @@ export function createDeviceFixture(surface, context) {
|
|
|
54
56
|
};
|
|
55
57
|
},
|
|
56
58
|
async home() {
|
|
57
|
-
await surface.command('device.home', (client) => client.command.home({}), signal);
|
|
59
|
+
await surface.command('device.home', (client) => client.command.home({}), context.signal);
|
|
58
60
|
},
|
|
59
61
|
async back() {
|
|
60
|
-
await surface.command('device.back', (client) => client.command.back({ settle: true }), signal);
|
|
62
|
+
await surface.command('device.back', (client) => client.command.back({ settle: true }), context.signal);
|
|
61
63
|
},
|
|
62
64
|
async alert(action) {
|
|
63
|
-
await surface.command('device.alert', (client) => client.command.alert({ action }), signal);
|
|
65
|
+
await surface.command('device.alert', (client) => client.command.alert({ action }), context.signal);
|
|
64
66
|
},
|
|
65
67
|
async dismissKeyboard() {
|
|
66
|
-
await surface.command('device.dismissKeyboard', (client) => client.command.keyboard({ action: 'dismiss' }), signal);
|
|
68
|
+
await surface.command('device.dismissKeyboard', (client) => client.command.keyboard({ action: 'dismiss' }), context.signal);
|
|
67
69
|
},
|
|
68
70
|
async clipboard() {
|
|
69
|
-
const result = await surface.command('device.clipboard', (client) => client.command.clipboard({ action: 'read' }), signal);
|
|
71
|
+
const result = await surface.command('device.clipboard', (client) => client.command.clipboard({ action: 'read' }), context.signal);
|
|
70
72
|
return result.action === 'read' ? result.text : '';
|
|
71
73
|
},
|
|
72
74
|
async setClipboard(text) {
|
|
73
|
-
await surface.command('device.setClipboard', (client) => client.command.clipboard({ action: 'write', text }), signal);
|
|
75
|
+
await surface.command('device.setClipboard', (client) => client.command.clipboard({ action: 'write', text }), context.signal);
|
|
74
76
|
},
|
|
75
77
|
};
|
|
78
|
+
const action = { kind: 'resource' };
|
|
79
|
+
return context.fixture('device', device, {
|
|
80
|
+
setNetwork: { ...action, label: (state) => state },
|
|
81
|
+
setAirplaneMode: action,
|
|
82
|
+
setPermission: { ...action, label: (permission) => permission },
|
|
83
|
+
setLocation: action,
|
|
84
|
+
clearLocation: action,
|
|
85
|
+
setAppearance: { ...action, label: (mode) => mode },
|
|
86
|
+
setOrientation: { ...action, label: (orientation) => orientation },
|
|
87
|
+
setBiometrics: action,
|
|
88
|
+
enrollBiometrics: action,
|
|
89
|
+
installApp: { ...action, label: (appPath) => appPath },
|
|
90
|
+
openApp: { ...action, label: (app) => app },
|
|
91
|
+
closeApp: action,
|
|
92
|
+
foregroundApp: action,
|
|
93
|
+
home: action,
|
|
94
|
+
back: action,
|
|
95
|
+
alert: { ...action, label: (value) => value },
|
|
96
|
+
dismissKeyboard: action,
|
|
97
|
+
clipboard: action,
|
|
98
|
+
setClipboard: { ...action, label: (text) => `${text.length} chars` },
|
|
99
|
+
});
|
|
76
100
|
}
|
|
77
101
|
//# sourceMappingURL=device.js.map
|
package/dist/device.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.js","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"device.js","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import type { Device } from './device.ts';
|
|
8
8
|
export { agentDevice } from './backend.ts';
|
|
9
|
-
export type { AgentDeviceOptions, AgentDevicePlatform } from './surface.ts';
|
|
9
|
+
export type { AgentDeviceOptions, AgentDevicePlatform, InstallAppOptions, InstalledApp } from './surface.ts';
|
|
10
10
|
export type { BiometricSensor, Device, DeviceOrientation, DevicePermission, ForegroundApp } from './device.ts';
|
|
11
11
|
/**
|
|
12
12
|
* `test` typed with this backend's contributed `device` fixture. The same
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC7G,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE/G;;;GAGG;AACH,eAAO,MAAM,IAAI;YAAyB,MAAM;EAAK,CAAC"}
|
package/dist/png.d.ts
CHANGED
|
@@ -1,22 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Minimal PNG codec for masking secure regions in device screenshots: 8-bit
|
|
3
|
-
* RGB or RGBA, non-interlaced, which is what a simulator or emulator
|
|
4
|
-
* screenshot is. Anything else is refused loudly, and the caller withholds
|
|
5
|
-
* the image rather than shipping pixels it could not redact.
|
|
6
|
-
*/
|
|
7
1
|
import type { Rect } from './support.ts';
|
|
8
|
-
|
|
9
|
-
readonly width: number;
|
|
10
|
-
readonly height: number;
|
|
11
|
-
/** 3 for RGB, 4 for RGBA. */
|
|
12
|
-
readonly channels: number;
|
|
13
|
-
/** Row-major samples, `width * channels` per row, mutable. */
|
|
14
|
-
readonly pixels: Uint8Array;
|
|
15
|
-
}
|
|
16
|
-
/** Decodes PNG bytes into mutable samples; throws for formats this codec does not read. */
|
|
17
|
-
export declare function decodePng(bytes: Uint8Array): DecodedPng;
|
|
18
|
-
/** Encodes samples as a PNG with unfiltered rows; size is not the goal, fidelity is. */
|
|
19
|
-
export declare function encodePng(image: DecodedPng): Uint8Array;
|
|
20
|
-
/** Decodes, masks, and re-encodes in one step. */
|
|
2
|
+
/** Paints each requested rectangle opaque black, rounding outward and clipping to the image. */
|
|
21
3
|
export declare function maskPng(bytes: Uint8Array, rects: readonly Rect[]): Uint8Array;
|
|
22
4
|
//# sourceMappingURL=png.d.ts.map
|
package/dist/png.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"png.d.ts","sourceRoot":"","sources":["../src/png.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"png.d.ts","sourceRoot":"","sources":["../src/png.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEzC,gGAAgG;AAChG,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,UAAU,CAmB7E"}
|
package/dist/png.js
CHANGED
|
@@ -1,172 +1,25 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const SIGNATURE = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];
|
|
9
|
-
function paeth(a, b, c) {
|
|
10
|
-
const p = a + b - c;
|
|
11
|
-
const pa = Math.abs(p - a);
|
|
12
|
-
const pb = Math.abs(p - b);
|
|
13
|
-
const pc = Math.abs(p - c);
|
|
14
|
-
if (pa <= pb && pa <= pc)
|
|
15
|
-
return a;
|
|
16
|
-
return pb <= pc ? b : c;
|
|
17
|
-
}
|
|
18
|
-
/** Decodes PNG bytes into mutable samples; throws for formats this codec does not read. */
|
|
19
|
-
export function decodePng(bytes) {
|
|
20
|
-
if (bytes.byteLength < 8 || !SIGNATURE.every((byte, index) => bytes[index] === byte)) {
|
|
21
|
-
throw new Error('not a PNG');
|
|
22
|
-
}
|
|
23
|
-
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
24
|
-
let offset = 8;
|
|
25
|
-
let width = 0;
|
|
26
|
-
let height = 0;
|
|
27
|
-
let channels = 0;
|
|
28
|
-
const idat = [];
|
|
29
|
-
while (offset + 8 <= bytes.byteLength) {
|
|
30
|
-
const length = view.getUint32(offset);
|
|
31
|
-
const type = String.fromCharCode(...bytes.subarray(offset + 4, offset + 8));
|
|
32
|
-
const data = bytes.subarray(offset + 8, offset + 8 + length);
|
|
33
|
-
if (type === 'IHDR') {
|
|
34
|
-
width = view.getUint32(offset + 8);
|
|
35
|
-
height = view.getUint32(offset + 12);
|
|
36
|
-
const bitDepth = data[8];
|
|
37
|
-
const colorType = data[9];
|
|
38
|
-
const interlace = data[12];
|
|
39
|
-
if (bitDepth !== 8 || interlace !== 0 || (colorType !== 2 && colorType !== 6)) {
|
|
40
|
-
throw new Error(`unsupported PNG: depth ${String(bitDepth)} type ${String(colorType)}`);
|
|
41
|
-
}
|
|
42
|
-
channels = colorType === 6 ? 4 : 3;
|
|
43
|
-
}
|
|
44
|
-
else if (type === 'IDAT') {
|
|
45
|
-
idat.push(data);
|
|
46
|
-
}
|
|
47
|
-
else if (type === 'IEND') {
|
|
48
|
-
break;
|
|
49
|
-
}
|
|
50
|
-
offset += 12 + length;
|
|
51
|
-
}
|
|
52
|
-
if (channels === 0)
|
|
53
|
-
throw new Error('PNG without IHDR');
|
|
54
|
-
const raw = inflateSync(Buffer.concat(idat));
|
|
55
|
-
const stride = width * channels;
|
|
56
|
-
const pixels = new Uint8Array(stride * height);
|
|
57
|
-
for (let y = 0; y < height; y += 1) {
|
|
58
|
-
const filter = raw[y * (stride + 1)];
|
|
59
|
-
const row = raw.subarray(y * (stride + 1) + 1, (y + 1) * (stride + 1));
|
|
60
|
-
const out = pixels.subarray(y * stride, (y + 1) * stride);
|
|
61
|
-
const prior = y === 0 ? new Uint8Array(stride) : pixels.subarray((y - 1) * stride, y * stride);
|
|
62
|
-
for (let i = 0; i < stride; i += 1) {
|
|
63
|
-
const left = i >= channels ? out[i - channels] : 0;
|
|
64
|
-
const up = prior[i];
|
|
65
|
-
const upLeft = i >= channels ? prior[i - channels] : 0;
|
|
66
|
-
const value = row[i];
|
|
67
|
-
let predicted;
|
|
68
|
-
switch (filter) {
|
|
69
|
-
case 0:
|
|
70
|
-
predicted = 0;
|
|
71
|
-
break;
|
|
72
|
-
case 1:
|
|
73
|
-
predicted = left;
|
|
74
|
-
break;
|
|
75
|
-
case 2:
|
|
76
|
-
predicted = up;
|
|
77
|
-
break;
|
|
78
|
-
case 3:
|
|
79
|
-
predicted = Math.floor((left + up) / 2);
|
|
80
|
-
break;
|
|
81
|
-
case 4:
|
|
82
|
-
predicted = paeth(left, up, upLeft);
|
|
83
|
-
break;
|
|
84
|
-
default:
|
|
85
|
-
throw new Error(`unsupported PNG filter ${String(filter)}`);
|
|
86
|
-
}
|
|
87
|
-
out[i] = (value + predicted) & 0xff;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return { width, height, channels, pixels };
|
|
91
|
-
}
|
|
92
|
-
const CRC_TABLE = new Uint32Array(256).map((_value, n) => {
|
|
93
|
-
let c = n;
|
|
94
|
-
for (let k = 0; k < 8; k += 1)
|
|
95
|
-
c = (c & 1) === 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
|
|
96
|
-
return c >>> 0;
|
|
97
|
-
});
|
|
98
|
-
function crc32(bytes) {
|
|
99
|
-
let crc = 0xffffffff;
|
|
100
|
-
for (const byte of bytes)
|
|
101
|
-
crc = CRC_TABLE[(crc ^ byte) & 0xff] ^ (crc >>> 8);
|
|
102
|
-
return (crc ^ 0xffffffff) >>> 0;
|
|
103
|
-
}
|
|
104
|
-
function chunk(type, data) {
|
|
105
|
-
const out = new Uint8Array(12 + data.byteLength);
|
|
106
|
-
const view = new DataView(out.buffer);
|
|
107
|
-
view.setUint32(0, data.byteLength);
|
|
108
|
-
const typed = new Uint8Array(4 + data.byteLength);
|
|
109
|
-
typed.set([...type].map((char) => char.charCodeAt(0)), 0);
|
|
110
|
-
typed.set(data, 4);
|
|
111
|
-
out.set(typed, 4);
|
|
112
|
-
view.setUint32(8 + data.byteLength, crc32(typed));
|
|
113
|
-
return out;
|
|
114
|
-
}
|
|
115
|
-
/** Encodes samples as a PNG with unfiltered rows; size is not the goal, fidelity is. */
|
|
116
|
-
export function encodePng(image) {
|
|
117
|
-
const { width, height, channels, pixels } = image;
|
|
118
|
-
const stride = width * channels;
|
|
119
|
-
const raw = new Uint8Array((stride + 1) * height);
|
|
120
|
-
for (let y = 0; y < height; y += 1) {
|
|
121
|
-
raw[y * (stride + 1)] = 0;
|
|
122
|
-
raw.set(pixels.subarray(y * stride, (y + 1) * stride), y * (stride + 1) + 1);
|
|
123
|
-
}
|
|
124
|
-
const ihdr = new Uint8Array(13);
|
|
125
|
-
const view = new DataView(ihdr.buffer);
|
|
126
|
-
view.setUint32(0, width);
|
|
127
|
-
view.setUint32(4, height);
|
|
128
|
-
ihdr[8] = 8;
|
|
129
|
-
ihdr[9] = channels === 4 ? 6 : 2;
|
|
130
|
-
ihdr[10] = 0;
|
|
131
|
-
ihdr[11] = 0;
|
|
132
|
-
ihdr[12] = 0;
|
|
133
|
-
return Buffer.concat([
|
|
134
|
-
Uint8Array.from(SIGNATURE),
|
|
135
|
-
chunk('IHDR', ihdr),
|
|
136
|
-
chunk('IDAT', deflateSync(raw)),
|
|
137
|
-
chunk('IEND', new Uint8Array(0)),
|
|
138
|
-
]);
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Paints every rect opaque black, in image pixels. Rects are clamped to the
|
|
142
|
-
* image; a rect entirely outside it masks nothing but still counts as
|
|
143
|
-
* handled, because the field it covers is not on screen either.
|
|
144
|
-
*/
|
|
145
|
-
function maskRects(image, rects) {
|
|
146
|
-
const { width, height, channels, pixels } = image;
|
|
1
|
+
/** Screenshot masking policy; PNG parsing and encoding belong to pngjs. */
|
|
2
|
+
import { PNG } from 'pngjs';
|
|
3
|
+
/** Paints each requested rectangle opaque black, rounding outward and clipping to the image. */
|
|
4
|
+
export function maskPng(bytes, rects) {
|
|
5
|
+
if (rects.length === 0)
|
|
6
|
+
return bytes;
|
|
7
|
+
const image = PNG.sync.read(Buffer.from(bytes));
|
|
147
8
|
for (const rect of rects) {
|
|
148
9
|
const x0 = Math.max(0, Math.floor(rect.x));
|
|
149
10
|
const y0 = Math.max(0, Math.floor(rect.y));
|
|
150
|
-
const x1 = Math.min(width, Math.ceil(rect.x + rect.width));
|
|
151
|
-
const y1 = Math.min(height, Math.ceil(rect.y + rect.height));
|
|
11
|
+
const x1 = Math.min(image.width, Math.ceil(rect.x + rect.width));
|
|
12
|
+
const y1 = Math.min(image.height, Math.ceil(rect.y + rect.height));
|
|
152
13
|
for (let y = y0; y < y1; y += 1) {
|
|
153
14
|
for (let x = x0; x < x1; x += 1) {
|
|
154
|
-
const at = (y * width + x) *
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
pixels[at + 3] = 255;
|
|
15
|
+
const at = (y * image.width + x) * 4;
|
|
16
|
+
image.data[at] = 0;
|
|
17
|
+
image.data[at + 1] = 0;
|
|
18
|
+
image.data[at + 2] = 0;
|
|
19
|
+
image.data[at + 3] = 255;
|
|
160
20
|
}
|
|
161
21
|
}
|
|
162
22
|
}
|
|
163
|
-
|
|
164
|
-
/** Decodes, masks, and re-encodes in one step. */
|
|
165
|
-
export function maskPng(bytes, rects) {
|
|
166
|
-
if (rects.length === 0)
|
|
167
|
-
return bytes;
|
|
168
|
-
const image = decodePng(bytes);
|
|
169
|
-
maskRects(image, rects);
|
|
170
|
-
return encodePng(image);
|
|
23
|
+
return PNG.sync.write(image);
|
|
171
24
|
}
|
|
172
25
|
//# sourceMappingURL=png.js.map
|
package/dist/png.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"png.js","sourceRoot":"","sources":["../src/png.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"png.js","sourceRoot":"","sources":["../src/png.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5B,gGAAgG;AAChG,MAAM,UAAU,OAAO,CAAC,KAAiB,EAAE,KAAsB;IAC/D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACrC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"}
|
package/dist/support.d.ts
CHANGED
|
@@ -14,22 +14,6 @@ export declare function cancelled(text: string): BackendError;
|
|
|
14
14
|
export declare function invalidState(text: string): BackendError;
|
|
15
15
|
export declare function notActionable(text: string): BackendError;
|
|
16
16
|
export declare function unsupported(text: string): BackendError;
|
|
17
|
-
/**
|
|
18
|
-
* Awaits `promise` unless `signal` aborts first, in which case the wait ends
|
|
19
|
-
* with `CANCELLED`. agent-device commands take no signal, so the in-flight
|
|
20
|
-
* call is not stopped; its eventual settlement is absorbed instead of
|
|
21
|
-
* surfacing as an unhandled rejection.
|
|
22
|
-
*/
|
|
23
|
-
export declare function raceAbort<T>(promise: Promise<T>, signal: AbortSignal, label: string): Promise<T>;
|
|
24
|
-
/**
|
|
25
|
-
* Best-effort cleanup wait: resolves when `promise` settles, when `signal`
|
|
26
|
-
* aborts, or when `timeoutMs` elapses, whichever comes first. Cleanup never
|
|
27
|
-
* throws through here; a close that outlives its budget is abandoned.
|
|
28
|
-
*/
|
|
29
|
-
export declare function withinCleanupBudget(promise: Promise<unknown>, budget: {
|
|
30
|
-
readonly signal: AbortSignal;
|
|
31
|
-
readonly timeoutMs: number;
|
|
32
|
-
}): Promise<void>;
|
|
33
17
|
/** Constrains a caller-supplied artifact label to a safe filename. */
|
|
34
18
|
export declare function sanitizeFilename(name: string): string;
|
|
35
19
|
/** Reads the dimensions out of a PNG's IHDR chunk; undefined for anything else. */
|
package/dist/support.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"support.d.ts","sourceRoot":"","sources":["../src/support.ts"],"names":[],"mappings":"AAAA,iHAAiH;AAEjH,OAAO,EAAE,YAAY,EAAE,KAAK,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAExF,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAEpD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAEvD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAExD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAEtD;AAED
|
|
1
|
+
{"version":3,"file":"support.d.ts","sourceRoot":"","sources":["../src/support.ts"],"names":[],"mappings":"AAAA,iHAAiH;AAEjH,OAAO,EAAE,YAAY,EAAE,KAAK,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAExF,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAEpD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAEvD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAExD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAEtD;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAID,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAO3F;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAC7B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,KAAK,CAAA;CAAE,CAe5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAIpF"}
|
package/dist/support.js
CHANGED
|
@@ -12,45 +12,6 @@ export function notActionable(text) {
|
|
|
12
12
|
export function unsupported(text) {
|
|
13
13
|
return new BackendError('UNSUPPORTED_CAPABILITY', text, { retryable: false });
|
|
14
14
|
}
|
|
15
|
-
/**
|
|
16
|
-
* Awaits `promise` unless `signal` aborts first, in which case the wait ends
|
|
17
|
-
* with `CANCELLED`. agent-device commands take no signal, so the in-flight
|
|
18
|
-
* call is not stopped; its eventual settlement is absorbed instead of
|
|
19
|
-
* surfacing as an unhandled rejection.
|
|
20
|
-
*/
|
|
21
|
-
export function raceAbort(promise, signal, label) {
|
|
22
|
-
if (signal.aborted) {
|
|
23
|
-
promise.catch(() => undefined);
|
|
24
|
-
return Promise.reject(cancelled(`${label} cancelled`));
|
|
25
|
-
}
|
|
26
|
-
return new Promise((resolve, reject) => {
|
|
27
|
-
const onAbort = () => {
|
|
28
|
-
promise.catch(() => undefined);
|
|
29
|
-
reject(cancelled(`${label} cancelled`));
|
|
30
|
-
};
|
|
31
|
-
signal.addEventListener('abort', onAbort, { once: true });
|
|
32
|
-
promise.then(resolve, reject).finally(() => {
|
|
33
|
-
signal.removeEventListener('abort', onAbort);
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Best-effort cleanup wait: resolves when `promise` settles, when `signal`
|
|
39
|
-
* aborts, or when `timeoutMs` elapses, whichever comes first. Cleanup never
|
|
40
|
-
* throws through here; a close that outlives its budget is abandoned.
|
|
41
|
-
*/
|
|
42
|
-
export function withinCleanupBudget(promise, budget) {
|
|
43
|
-
return new Promise((resolve) => {
|
|
44
|
-
const settle = () => {
|
|
45
|
-
clearTimeout(timer);
|
|
46
|
-
budget.signal.removeEventListener('abort', settle);
|
|
47
|
-
resolve();
|
|
48
|
-
};
|
|
49
|
-
const timer = setTimeout(settle, Math.max(0, budget.timeoutMs));
|
|
50
|
-
budget.signal.addEventListener('abort', settle, { once: true });
|
|
51
|
-
promise.then(settle, settle);
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
15
|
/** Constrains a caller-supplied artifact label to a safe filename. */
|
|
55
16
|
export function sanitizeFilename(name) {
|
|
56
17
|
return name.replaceAll(/[^A-Za-z0-9._-]/g, '_').slice(0, 64) || 'artifact';
|
package/dist/support.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"support.js","sourceRoot":"","sources":["../src/support.ts"],"names":[],"mappings":"AAAA,iHAAiH;AAEjH,OAAO,EAAE,YAAY,EAAuC,MAAM,qBAAqB,CAAC;AAcxF,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI,YAAY,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI,YAAY,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,YAAY,CAAC,gBAAgB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,IAAI,YAAY,CAAC,wBAAwB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AAChF,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"support.js","sourceRoot":"","sources":["../src/support.ts"],"names":[],"mappings":"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"}
|
package/dist/surface.d.ts
CHANGED
|
@@ -22,6 +22,13 @@ export interface AgentDeviceOptions {
|
|
|
22
22
|
* `app.clearState` are not declared.
|
|
23
23
|
*/
|
|
24
24
|
readonly app?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Build to install on the device once per worker, before the first attempt:
|
|
27
|
+
* an iOS `.app` bundle or an Android `.apk`, resolved against the project
|
|
28
|
+
* root (the config's directory). Without `app`, the installed bundle id or
|
|
29
|
+
* package becomes the app opened fresh at the start of every attempt.
|
|
30
|
+
*/
|
|
31
|
+
readonly appPath?: string;
|
|
25
32
|
/** Simulator or emulator to use, by name or id; agent-device picks a booted one otherwise. */
|
|
26
33
|
readonly device?: string;
|
|
27
34
|
/**
|
|
@@ -36,6 +43,22 @@ export interface AgentDeviceOptions {
|
|
|
36
43
|
*/
|
|
37
44
|
readonly snapshot?: 'full' | 'interactive';
|
|
38
45
|
}
|
|
46
|
+
/** How `installApp` puts a build on the device. */
|
|
47
|
+
export interface InstallAppOptions {
|
|
48
|
+
/**
|
|
49
|
+
* Bundle id or package of the build. `reinstall` needs one: agent-device
|
|
50
|
+
* removes that app before installing. Defaults to the pinned app.
|
|
51
|
+
*/
|
|
52
|
+
readonly app?: string;
|
|
53
|
+
/** Remove the installed app first so the build starts with no data. */
|
|
54
|
+
readonly reinstall?: boolean;
|
|
55
|
+
}
|
|
56
|
+
/** What an install put on the device, as agent-device identified it. */
|
|
57
|
+
export interface InstalledApp {
|
|
58
|
+
/** The bundle id or package to open the app by. */
|
|
59
|
+
readonly app: string;
|
|
60
|
+
readonly bundleId?: string;
|
|
61
|
+
}
|
|
39
62
|
export declare class AgentDeviceSurface {
|
|
40
63
|
readonly options: AgentDeviceOptions;
|
|
41
64
|
private readonly createClient;
|
|
@@ -43,8 +66,13 @@ export declare class AgentDeviceSurface {
|
|
|
43
66
|
private testIdAttribute;
|
|
44
67
|
private attempt;
|
|
45
68
|
private generation;
|
|
69
|
+
private readonly located;
|
|
46
70
|
private idCounter;
|
|
47
71
|
private appIdentity;
|
|
72
|
+
/** The app `appPath` installed at init, when no `app` option names one. */
|
|
73
|
+
private installedApp;
|
|
74
|
+
/** Where relative build paths resolve; the run's project root once init has told us. */
|
|
75
|
+
private projectRoot;
|
|
48
76
|
/**
|
|
49
77
|
* Commands still running on the device. agent-device takes no abort
|
|
50
78
|
* signal, so a cancelled or timed-out call is only abandoned by its
|
|
@@ -55,6 +83,8 @@ export declare class AgentDeviceSurface {
|
|
|
55
83
|
constructor(options: AgentDeviceOptions, createClient: ClientFactory);
|
|
56
84
|
/** Whether the manifest declares app restart and state clearing. */
|
|
57
85
|
get managesApp(): boolean;
|
|
86
|
+
/** The app opened fresh per attempt: the `app` option, else the build `appPath` installed. */
|
|
87
|
+
get pinnedApp(): string | undefined;
|
|
58
88
|
/** Whether an attempt is running on this surface right now. */
|
|
59
89
|
get attemptRunning(): boolean;
|
|
60
90
|
/** The live client; INVALID_STATE before init or after dispose. */
|
|
@@ -79,6 +109,12 @@ export declare class AgentDeviceSurface {
|
|
|
79
109
|
dispose(context: BackendCleanupContext): Promise<void>;
|
|
80
110
|
/** Opens an app in the session, remembering its identity for the path anchor. */
|
|
81
111
|
openApp(app: string, relaunch: boolean, signal: AbortSignal): Promise<void>;
|
|
112
|
+
/**
|
|
113
|
+
* Installs a build on the session's device. `reinstall` removes the app
|
|
114
|
+
* named by `options.app` (else the pinned app) first, so the build starts
|
|
115
|
+
* with no data; a plain install replaces the binary and keeps its data.
|
|
116
|
+
*/
|
|
117
|
+
installApp(appPath: string, options: InstallAppOptions, signal: AbortSignal): Promise<InstalledApp>;
|
|
82
118
|
private snapshot;
|
|
83
119
|
/**
|
|
84
120
|
* Snapshot for an observation. Without a pinned app, an observation before
|
|
@@ -88,12 +124,7 @@ export declare class AgentDeviceSurface {
|
|
|
88
124
|
private snapshotOrEmpty;
|
|
89
125
|
private project;
|
|
90
126
|
observe(operation: OperationContext, options?: BackendObserveOptions): Promise<BackendSnapshot>;
|
|
91
|
-
/**
|
|
92
|
-
* The located snapshot joins the current generation instead of replacing
|
|
93
|
-
* it, so an observation's ids stay valid across a `screen` query in the
|
|
94
|
-
* same step. The whole snapshot joins, not only the matches: a later action
|
|
95
|
-
* on a match may need its descendants (`controlOf`).
|
|
96
|
-
*/
|
|
127
|
+
/** Retains only action bindings for matches, independently of the observation generation. */
|
|
97
128
|
locate(expression: LocatorExpression, operation: OperationContext): Promise<readonly SemanticNode[]>;
|
|
98
129
|
private resolveRef;
|
|
99
130
|
private actionTarget;
|
|
@@ -105,6 +136,8 @@ export declare class AgentDeviceSurface {
|
|
|
105
136
|
* descendant with a ref is the control; a node without one is its own.
|
|
106
137
|
*/
|
|
107
138
|
private controlOf;
|
|
139
|
+
/** Copies the fields actions use and pre-resolves a toggle's inner control. */
|
|
140
|
+
private bind;
|
|
108
141
|
perform(ref: NodeRef, action: LocatorAction, operation: OperationContext): Promise<void>;
|
|
109
142
|
/**
|
|
110
143
|
* Keys on a touch surface: Enter submits through the soft keyboard, a
|
|
@@ -126,8 +159,6 @@ export declare class AgentDeviceSurface {
|
|
|
126
159
|
* written at all.
|
|
127
160
|
*/
|
|
128
161
|
screenshot(label: string | undefined, operation: OperationContext): Promise<string>;
|
|
129
|
-
/** Redacted screen pixels as a PNG, for the agent's screenshot tool. */
|
|
130
|
-
screenshotBytes(signal?: AbortSignal): Promise<Uint8Array>;
|
|
131
162
|
/** Raw device pixels; the caller owns redaction. */
|
|
132
163
|
private rawScreenshot;
|
|
133
164
|
/**
|
package/dist/surface.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,
|
|
1
|
+
{"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"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"}
|
package/dist/surface.js
CHANGED
|
@@ -9,12 +9,13 @@
|
|
|
9
9
|
import { mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
10
10
|
import { tmpdir } from 'node:os';
|
|
11
11
|
import path from 'node:path';
|
|
12
|
-
import { BackendError, } from '@e2edev/e2e/backend';
|
|
12
|
+
import { BackendError, raceAbort, withinCleanupBudget, } from '@e2edev/e2e/backend';
|
|
13
13
|
import { staleOr, translateError } from './errors.js';
|
|
14
14
|
import { resolveExpression } from './locate.js';
|
|
15
15
|
import { isWithin, projectSnapshot, screenTitle } from './nodes.js';
|
|
16
16
|
import { maskPng } from './png.js';
|
|
17
|
-
import { invalidState, notActionable,
|
|
17
|
+
import { invalidState, notActionable, readPngSize, sanitizeFilename, screenUrl, swipeWithin, unsupported, } from './support.js';
|
|
18
|
+
const MAX_LOCATED_REFS = 2048;
|
|
18
19
|
/**
|
|
19
20
|
* The Apple runner defers a full snapshot after slow accessibility work and
|
|
20
21
|
* returns a sparse one-node tree. Retrying device-side costs under a second;
|
|
@@ -49,8 +50,13 @@ export class AgentDeviceSurface {
|
|
|
49
50
|
testIdAttribute = 'data-testid';
|
|
50
51
|
attempt;
|
|
51
52
|
generation = new Map();
|
|
53
|
+
located = new Map();
|
|
52
54
|
idCounter = 0;
|
|
53
55
|
appIdentity;
|
|
56
|
+
/** The app `appPath` installed at init, when no `app` option names one. */
|
|
57
|
+
installedApp;
|
|
58
|
+
/** Where relative build paths resolve; the run's project root once init has told us. */
|
|
59
|
+
projectRoot = process.cwd();
|
|
54
60
|
/**
|
|
55
61
|
* Commands still running on the device. agent-device takes no abort
|
|
56
62
|
* signal, so a cancelled or timed-out call is only abandoned by its
|
|
@@ -64,7 +70,11 @@ export class AgentDeviceSurface {
|
|
|
64
70
|
}
|
|
65
71
|
/** Whether the manifest declares app restart and state clearing. */
|
|
66
72
|
get managesApp() {
|
|
67
|
-
return this.options.app !== undefined;
|
|
73
|
+
return this.options.app !== undefined || this.options.appPath !== undefined;
|
|
74
|
+
}
|
|
75
|
+
/** The app opened fresh per attempt: the `app` option, else the build `appPath` installed. */
|
|
76
|
+
get pinnedApp() {
|
|
77
|
+
return this.options.app ?? this.installedApp;
|
|
68
78
|
}
|
|
69
79
|
/** Whether an attempt is running on this surface right now. */
|
|
70
80
|
get attemptRunning() {
|
|
@@ -84,8 +94,7 @@ export class AgentDeviceSurface {
|
|
|
84
94
|
async command(label, run, signal) {
|
|
85
95
|
const client = this.requireClient();
|
|
86
96
|
try {
|
|
87
|
-
|
|
88
|
-
return await (signal === undefined ? pending : raceAbort(pending, signal, label));
|
|
97
|
+
return await raceAbort(() => this.track(run(client)), signal ?? new AbortController().signal, label);
|
|
89
98
|
}
|
|
90
99
|
catch (cause) {
|
|
91
100
|
throw translateError(cause, label);
|
|
@@ -109,11 +118,17 @@ export class AgentDeviceSurface {
|
|
|
109
118
|
}
|
|
110
119
|
async init(info) {
|
|
111
120
|
this.testIdAttribute = info.testIdAttribute;
|
|
121
|
+
this.projectRoot = info.projectRoot;
|
|
112
122
|
this.client ??= this.createClient(this.options.session ?? `e2e-${info.targetName}`);
|
|
113
123
|
await this.command('boot', (client) => client.devices.boot({
|
|
114
124
|
platform: this.options.platform,
|
|
115
125
|
...(this.options.device === undefined ? {} : { device: this.options.device }),
|
|
116
126
|
}), info.signal);
|
|
127
|
+
if (this.options.appPath === undefined)
|
|
128
|
+
return;
|
|
129
|
+
const installed = await this.installApp(this.options.appPath, this.options.app === undefined ? {} : { app: this.options.app }, info.signal);
|
|
130
|
+
if (this.options.app === undefined)
|
|
131
|
+
this.installedApp = installed.app;
|
|
117
132
|
}
|
|
118
133
|
async startAttempt(context) {
|
|
119
134
|
if (this.attempt !== undefined) {
|
|
@@ -122,20 +137,25 @@ export class AgentDeviceSurface {
|
|
|
122
137
|
await this.settleInflight(context.signal);
|
|
123
138
|
this.attempt = { artifactsDir: context.artifactsDir, screenshots: 0 };
|
|
124
139
|
this.generation = new Map();
|
|
125
|
-
|
|
140
|
+
this.located.clear();
|
|
141
|
+
const app = this.pinnedApp;
|
|
142
|
+
if (app === undefined)
|
|
126
143
|
return;
|
|
127
|
-
await this.openApp(
|
|
144
|
+
await this.openApp(app, true, context.signal);
|
|
128
145
|
}
|
|
129
146
|
async endAttempt(_context) {
|
|
130
147
|
this.attempt = undefined;
|
|
131
148
|
this.generation = new Map();
|
|
149
|
+
this.located.clear();
|
|
132
150
|
}
|
|
133
151
|
async dispose(context) {
|
|
134
152
|
const client = this.client;
|
|
135
153
|
this.client = undefined;
|
|
136
154
|
this.attempt = undefined;
|
|
137
155
|
this.generation = new Map();
|
|
156
|
+
this.located.clear();
|
|
138
157
|
this.appIdentity = undefined;
|
|
158
|
+
this.installedApp = undefined;
|
|
139
159
|
if (client === undefined)
|
|
140
160
|
return;
|
|
141
161
|
await withinCleanupBudget(client.sessions.close().catch(() => undefined), context);
|
|
@@ -150,6 +170,28 @@ export class AgentDeviceSurface {
|
|
|
150
170
|
}), signal);
|
|
151
171
|
this.appIdentity = result.appBundleId ?? result.appName ?? app;
|
|
152
172
|
this.generation = new Map();
|
|
173
|
+
this.located.clear();
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Installs a build on the session's device. `reinstall` removes the app
|
|
177
|
+
* named by `options.app` (else the pinned app) first, so the build starts
|
|
178
|
+
* with no data; a plain install replaces the binary and keeps its data.
|
|
179
|
+
*/
|
|
180
|
+
async installApp(appPath, options, signal) {
|
|
181
|
+
const resolved = path.resolve(this.projectRoot, appPath);
|
|
182
|
+
const selection = {
|
|
183
|
+
platform: this.options.platform,
|
|
184
|
+
...(this.options.device === undefined ? {} : { device: this.options.device }),
|
|
185
|
+
};
|
|
186
|
+
const app = options.app ?? (options.reinstall === true ? this.pinnedApp : undefined);
|
|
187
|
+
if (options.reinstall === true && app === undefined) {
|
|
188
|
+
throw invalidState('reinstall needs an app: pass `app`, or pin one with the backend option `app` or `appPath`');
|
|
189
|
+
}
|
|
190
|
+
const result = (await this.command(`install ${resolved}`, (client) => options.reinstall === true && app !== undefined
|
|
191
|
+
? client.apps.reinstall({ ...selection, app, appPath: resolved })
|
|
192
|
+
: client.apps.install({ ...selection, ...(app === undefined ? {} : { app }), appPath: resolved }), signal));
|
|
193
|
+
const identity = result.bundleId ?? result.package ?? result.appId;
|
|
194
|
+
return { app: identity ?? result.app, ...(identity === undefined ? {} : { bundleId: identity }) };
|
|
153
195
|
}
|
|
154
196
|
async snapshot(operation, interactiveOnly) {
|
|
155
197
|
let last = {};
|
|
@@ -194,39 +236,42 @@ export class AgentDeviceSurface {
|
|
|
194
236
|
async observe(operation, options) {
|
|
195
237
|
const raw = await this.snapshotOrEmpty(operation, this.options.snapshot === 'interactive');
|
|
196
238
|
const projected = this.project(raw);
|
|
197
|
-
this.generation = new Map(projected.index.map((entry) => [entry.id, entry]));
|
|
239
|
+
this.generation = new Map(projected.index.map((entry) => [entry.id, this.bind(entry, projected.index)]));
|
|
240
|
+
const identity = raw.appBundleId ?? raw.appName ?? this.appIdentity;
|
|
198
241
|
const capture = options?.pixels === true ? await this.capturePixels(operation, projected) : undefined;
|
|
199
242
|
return {
|
|
200
243
|
nodes: projected.roots,
|
|
244
|
+
...(identity === undefined ? {} : { url: screenUrl(identity, screenTitle(projected)) }),
|
|
201
245
|
...(projected.viewport === undefined ? {} : { viewport: projected.viewport }),
|
|
202
246
|
...(capture === undefined ? {} : { pixels: capture.pixels, maskedRegionCount: capture.masked }),
|
|
203
247
|
};
|
|
204
248
|
}
|
|
205
|
-
/**
|
|
206
|
-
* The located snapshot joins the current generation instead of replacing
|
|
207
|
-
* it, so an observation's ids stay valid across a `screen` query in the
|
|
208
|
-
* same step. The whole snapshot joins, not only the matches: a later action
|
|
209
|
-
* on a match may need its descendants (`controlOf`).
|
|
210
|
-
*/
|
|
249
|
+
/** Retains only action bindings for matches, independently of the observation generation. */
|
|
211
250
|
async locate(expression, operation) {
|
|
212
251
|
const raw = await this.snapshotOrEmpty(operation, false);
|
|
213
252
|
const projected = this.project(raw);
|
|
214
253
|
const matches = resolveExpression(expression, projected.index, { testIdAttribute: this.testIdAttribute });
|
|
215
|
-
for (const entry of
|
|
216
|
-
this.
|
|
254
|
+
for (const entry of matches)
|
|
255
|
+
this.located.set(entry.id, this.bind(entry, projected.index));
|
|
256
|
+
for (const oldest of this.located.keys()) {
|
|
257
|
+
if (this.located.size <= MAX_LOCATED_REFS)
|
|
258
|
+
break;
|
|
259
|
+
this.located.delete(oldest);
|
|
260
|
+
}
|
|
217
261
|
return matches.map((entry) => entry.node);
|
|
218
262
|
}
|
|
219
263
|
resolveRef(ref) {
|
|
220
|
-
const entry = this.generation.get(ref.id);
|
|
264
|
+
const entry = this.located.get(ref.id) ?? this.generation.get(ref.id);
|
|
221
265
|
if (entry === undefined) {
|
|
222
266
|
throw new BackendError('NODE_STALE', `node ${ref.id} is not part of the newest observation`, { retryable: true });
|
|
223
267
|
}
|
|
224
268
|
return entry;
|
|
225
269
|
}
|
|
226
|
-
actionTarget(entry) {
|
|
227
|
-
|
|
270
|
+
actionTarget(entry, control = false) {
|
|
271
|
+
const ref = control ? entry.controlRef : entry.ref;
|
|
272
|
+
if (ref === '')
|
|
228
273
|
throw notActionable(`node ${entry.id} has no agent-device ref to act on`);
|
|
229
|
-
return { ref: `@${
|
|
274
|
+
return { ref: `@${ref}` };
|
|
230
275
|
}
|
|
231
276
|
/**
|
|
232
277
|
* The node a toggle press must land on. UIKit reports a settings row as a
|
|
@@ -235,13 +280,13 @@ export class AgentDeviceSurface {
|
|
|
235
280
|
* centre hits the label and changes nothing. The innermost same-role
|
|
236
281
|
* descendant with a ref is the control; a node without one is its own.
|
|
237
282
|
*/
|
|
238
|
-
controlOf(entry) {
|
|
283
|
+
controlOf(entry, snapshot) {
|
|
239
284
|
const role = entry.node.role;
|
|
240
285
|
if (role !== 'switch' && role !== 'checkbox')
|
|
241
286
|
return entry;
|
|
242
287
|
let control = entry;
|
|
243
288
|
let depth = 0;
|
|
244
|
-
for (const candidate of
|
|
289
|
+
for (const candidate of snapshot) {
|
|
245
290
|
if (candidate.ref === '' || candidate.node.role !== role || !isWithin(candidate, entry))
|
|
246
291
|
continue;
|
|
247
292
|
const candidateDepth = depthBelow(candidate, entry);
|
|
@@ -252,6 +297,11 @@ export class AgentDeviceSurface {
|
|
|
252
297
|
}
|
|
253
298
|
return control;
|
|
254
299
|
}
|
|
300
|
+
/** Copies the fields actions use and pre-resolves a toggle's inner control. */
|
|
301
|
+
bind(entry, snapshot) {
|
|
302
|
+
const { children: _children, ...node } = entry.node;
|
|
303
|
+
return { id: entry.id, ref: entry.ref, node, controlRef: this.controlOf(entry, snapshot).ref };
|
|
304
|
+
}
|
|
255
305
|
async perform(ref, action, operation) {
|
|
256
306
|
const entry = this.resolveRef(ref);
|
|
257
307
|
const label = `perform ${action.kind}`;
|
|
@@ -262,7 +312,7 @@ export class AgentDeviceSurface {
|
|
|
262
312
|
// observation that follows describes the screen the action produced,
|
|
263
313
|
// not a frame of its transition. Best-effort on agent-device's side.
|
|
264
314
|
case 'tap':
|
|
265
|
-
return client.interactions.press({ ...this.actionTarget(
|
|
315
|
+
return client.interactions.press({ ...this.actionTarget(entry, true), settle: true });
|
|
266
316
|
case 'focus':
|
|
267
317
|
// A touch surface focuses by tapping, and a tap on anything but an
|
|
268
318
|
// editable field activates it; focus is offered for fields only.
|
|
@@ -297,7 +347,7 @@ export class AgentDeviceSurface {
|
|
|
297
347
|
}
|
|
298
348
|
if (checked === wanted)
|
|
299
349
|
return undefined;
|
|
300
|
-
return client.interactions.press({ ...this.actionTarget(
|
|
350
|
+
return client.interactions.press({ ...this.actionTarget(entry, true), settle: true });
|
|
301
351
|
}
|
|
302
352
|
case 'press':
|
|
303
353
|
return this.pressKey(client, entry, action.key);
|
|
@@ -321,7 +371,7 @@ export class AgentDeviceSurface {
|
|
|
321
371
|
}
|
|
322
372
|
};
|
|
323
373
|
try {
|
|
324
|
-
await raceAbort(this.track(run()), operation.signal, label);
|
|
374
|
+
await raceAbort(() => this.track(run()), operation.signal, label);
|
|
325
375
|
}
|
|
326
376
|
catch (cause) {
|
|
327
377
|
throw staleOr(cause, label);
|
|
@@ -351,14 +401,15 @@ export class AgentDeviceSurface {
|
|
|
351
401
|
await this.command('back', (client) => client.command.back({ settle: true }), operation.signal);
|
|
352
402
|
}
|
|
353
403
|
async restart(operation) {
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
404
|
+
const app = this.pinnedApp;
|
|
405
|
+
if (app === undefined)
|
|
406
|
+
throw unsupported('app.restart needs the backend option `app` or `appPath`');
|
|
407
|
+
await this.openApp(app, true, operation.signal);
|
|
357
408
|
}
|
|
358
409
|
async clearState(operation) {
|
|
359
|
-
const app = this.
|
|
410
|
+
const app = this.pinnedApp;
|
|
360
411
|
if (app === undefined)
|
|
361
|
-
throw unsupported('app.clearState needs the backend option `app`');
|
|
412
|
+
throw unsupported('app.clearState needs the backend option `app` or `appPath`');
|
|
362
413
|
await this.command('clear app state', (client) => client.settings.update({ setting: 'clear-app-state', state: 'clear', app }), operation.signal);
|
|
363
414
|
await this.openApp(app, true, operation.signal);
|
|
364
415
|
}
|
|
@@ -387,10 +438,6 @@ export class AgentDeviceSurface {
|
|
|
387
438
|
writeFileSync(path.join(attempt.artifactsDir, relative), masked.data);
|
|
388
439
|
return relative;
|
|
389
440
|
}
|
|
390
|
-
/** Redacted screen pixels as a PNG, for the agent's screenshot tool. */
|
|
391
|
-
async screenshotBytes(signal) {
|
|
392
|
-
return (await this.maskedScreenshot(signal)).data;
|
|
393
|
-
}
|
|
394
441
|
/** Raw device pixels; the caller owns redaction. */
|
|
395
442
|
async rawScreenshot(signal) {
|
|
396
443
|
const file = path.join(tmpdir(), `e2e-agent-device-${process.pid}-${Date.now()}.png`);
|
package/dist/surface.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surface.js","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,YAAY,GAcb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAA4D,MAAM,YAAY,CAAC;AAC9H,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,WAAW,EACX,mBAAmB,GAEpB,MAAM,cAAc,CAAC;AA+CtB;;;;GAIG;AACH,MAAM,uBAAuB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAE3D,2DAA2D;AAC3D,SAAS,UAAU,CAAC,KAAoB,EAAE,QAAuB;IAC/D,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACjF,IAAI,IAAI,CAAC,CAAC;QACV,IAAI,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,KAAK,CAAC,EAAU,EAAE,MAAmB;IAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnC,SAAS,IAAI;YACX,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC1C,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,kBAAkB;IAgBlB,OAAO;IACC,YAAY;IAhBvB,MAAM,CAAgC;IACtC,eAAe,GAAG,aAAa,CAAC;IAChC,OAAO,CAAsB;IAC7B,UAAU,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC9C,SAAS,GAAG,CAAC,CAAC;IACd,WAAW,CAAqB;IACxC;;;;;OAKG;IACc,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;IAExD,YACW,OAA2B,EACnB,YAA2B;uBADnC,OAAO;4BACC,YAAY;IAC5B,CAAC;IAEJ,oEAAoE;IACpE,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC;IACxC,CAAC;IAED,+DAA+D;IAC/D,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC;IACpC,CAAC;IAED,mEAAmE;IACnE,aAAa;QACX,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,MAAM,YAAY,CAAC,6CAA6C,CAAC,CAAC;QACjG,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAI,KAAa,EAAE,GAA8C,EAAE,MAAoB;QAClG,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YACxC,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QACpF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,kEAAkE;IAC1D,KAAK,CAAI,OAAmB;QAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,CAAC,IAAI,CACV,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EACnC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CACpC,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,cAAc,CAAC,MAAmB;QAC9C,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,oCAAoC,CAAC,CAAC;QACnG,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAqB;QAC9B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC5C,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACpF,MAAM,IAAI,CAAC,OAAO,CAChB,MAAM,EACN,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;YAClB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC/B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;SAC9E,CAAC,EACJ,IAAI,CAAC,MAAM,CACZ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAA8B;QAC/C,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,YAAY,CAAC,4DAA4D,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS;YAAE,OAAO;QAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAA+B;QAC9C,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAA8B;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,MAAM,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;IACrF,CAAC;IAED,iFAAiF;IACjF,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,QAAiB,EAAE,MAAmB;QAC/D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,QAAQ,GAAG,EAAE,EACb,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACf,GAAG;YACH,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC/B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC7E,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxC,CAAC,EACJ,MAAM,CACP,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC;QAC/D,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,SAA2B,EAAE,eAAwB;QAC1E,IAAI,IAAI,GAAgB,EAAE,CAAC;QAC3B,KAAK,MAAM,SAAS,IAAI,uBAAuB,EAAE,CAAC;YAChD,IAAI,SAAS,GAAG,CAAC;gBAAE,MAAM,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;YAC5D,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,oBAAoB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9G,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CACxB,UAAU,EACV,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC,EACxD,SAAS,CAAC,MAAM,CACjB,CAAgB,CAAC;YAClB,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACjE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC;YACtD,CAAC;YACD,IAAI,IAAI,CAAC,eAAe,EAAE,KAAK,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,eAAe,CAAC,SAA2B,EAAE,eAAwB;QACjF,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe;gBAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YAC9G,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,GAAgB;QAC9B,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE;YACtC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,MAAM,EAAE,GAAG,EAAE;gBACX,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;gBACpB,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC9B,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,SAA2B,EAAE,OAA+B;QACxE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC;QAC3F,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,OAAO,GAAG,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtG,OAAO;YACL,KAAK,EAAE,SAAS,CAAC,KAAK;YACtB,GAAG,CAAC,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC;YAC7E,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;SAChG,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAC,UAA6B,EAAE,SAA2B;QACrE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,iBAAiB,CAAC,UAAU,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAC1G,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,KAAK;YAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC1E,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAEO,UAAU,CAAC,GAAY;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,YAAY,CAAC,YAAY,EAAE,QAAQ,GAAG,CAAC,EAAE,wCAAwC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,YAAY,CAAC,KAAoB;QACvC,IAAI,KAAK,CAAC,GAAG,KAAK,EAAE;YAAE,MAAM,aAAa,CAAC,QAAQ,KAAK,CAAC,EAAE,oCAAoC,CAAC,CAAC;QAChG,OAAO,EAAE,GAAG,EAAE,IAAI,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;IAClC,CAAC;IAED;;;;;;OAMG;IACK,SAAS,CAAC,KAAoB;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,UAAU;YAAE,OAAO,KAAK,CAAC;QAC3D,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,IAAI,SAAS,CAAC,GAAG,KAAK,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC;gBAAE,SAAS;YAClG,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACpD,IAAI,cAAc,GAAG,KAAK,EAAE,CAAC;gBAC3B,OAAO,GAAG,SAAS,CAAC;gBACpB,KAAK,GAAG,cAAc,CAAC;YACzB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAY,EAAE,MAAqB,EAAE,SAA2B;QAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,WAAW,MAAM,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,KAAK,IAAsB,EAAE;YACvC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;gBACpB,sEAAsE;gBACtE,qEAAqE;gBACrE,qEAAqE;gBACrE,KAAK,KAAK;oBACR,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClG,KAAK,OAAO;oBACV,mEAAmE;oBACnE,iEAAiE;oBACjE,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBAClC,MAAM,WAAW,CAAC,qDAAqD,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;oBACxH,CAAC;oBACD,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClF,KAAK,WAAW;oBACd,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnG,KAAK,WAAW;oBACd,OAAO,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;wBACnC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;wBAC3B,MAAM,EAAE,IAAI;wBACZ,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;qBAC9E,CAAC,CAAC;gBACL,KAAK,OAAO;oBACV,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC7D,KAAK,MAAM;oBACT,0GAA0G;oBAC1G,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACrG,KAAK,OAAO;oBACV,0GAA0G;oBAC1G,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3F,KAAK,OAAO,CAAC;gBACb,KAAK,SAAS,EAAE,CAAC;oBACf,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC;oBACvC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;oBAC3C,mEAAmE;oBACnE,0EAA0E;oBAC1E,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;wBAC1B,MAAM,WAAW,CAAC,yCAAyC,KAAK,CAAC,EAAE,6BAA6B,CAAC,CAAC;oBACpG,CAAC;oBACD,IAAI,OAAO,KAAK,MAAM;wBAAE,OAAO,SAAS,CAAC;oBACzC,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClG,CAAC;gBACD,KAAK,OAAO;oBACV,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;gBAClD,KAAK,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC7B,IAAI,IAAI,KAAK,SAAS;wBAAE,MAAM,aAAa,CAAC,QAAQ,KAAK,CAAC,EAAE,gCAAgC,CAAC,CAAC;oBAC9F,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACzF,CAAC;gBACD,KAAK,QAAQ,EAAE,CAAC;oBACd,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACnD,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;wBAC9B,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG;wBACpC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,GAAG;qBAChD,CAAC,CAAC;gBACL,CAAC;gBACD,KAAK,gBAAgB,CAAC;gBACtB,KAAK,cAAc,CAAC;gBACpB,KAAK,eAAe;oBAClB,MAAM,WAAW,CAAC,gCAAgC,MAAM,CAAC,IAAI,uBAAuB,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC,CAAC;QACF,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,QAAQ,CAAC,MAAyB,EAAE,KAAoB,EAAE,GAAW;QACjF,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACxC,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;gBACzE,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACjF,CAAC;YACD,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,WAAW,CAAC,8BAA8B,GAAG,uEAAuE,CAAC,CAAC;IAC9H,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAA0B,EAAE,SAA+B,EAAE,SAA2B;QAClG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACvG,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAA2B;QACpC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAClG,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,SAA2B;QACvC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS;YAAE,MAAM,WAAW,CAAC,4CAA4C,CAAC,CAAC;QACpG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAA2B;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QAC7B,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,WAAW,CAAC,+CAA+C,CAAC,CAAC;QAC1F,MAAM,IAAI,CAAC,OAAO,CAChB,iBAAiB,EACjB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EACvF,SAAS,CAAC,MAAM,CACjB,CAAC;QACF,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,sEAAsE;IACtE,KAAK,CAAC,GAAG,CAAC,SAA2B;QACnC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtH,OAAO,SAAS,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/F,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,UAAU,CAAC,KAAyB,EAAE,SAA2B;QACrE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM,YAAY,CAAC,+BAA+B,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC7D,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,gBAAgB,CAAC,KAAK,IAAI,YAAY,CAAC,MAAM,CAAC;QAC9G,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAChD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACtE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,wEAAwE;IACxE,KAAK,CAAC,eAAe,CAAC,MAAoB;QACxC,OAAO,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,CAAC;IAED,oDAAoD;IAC5C,KAAK,CAAC,aAAa,CAAC,MAAoB;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,oBAAoB,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACtF,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;YAC7G,OAAO,IAAI,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;QACzD,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,gBAAgB,CAAC,MAAoB;QACjD,MAAM,SAAS,GAAqB;YAClC,MAAM,EAAE,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC,MAAM;YAC9C,SAAS,EAAE,MAAM;YACjB,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,EAAE;SACd,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC7C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,YAAY,CAAC,iBAAiB,EAAE,mEAAmE,EAAE;gBAC7G,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,aAAa,CACzB,SAA2B,EAC3B,SAA4B;QAE5B,IAAI,GAAe,CAAC;QACpB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC9C,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC7C,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACzC,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,MAAM,KAAK,GAAG,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7F,OAAO;YACL,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE;YACtG,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,IAAgB,EAAE,SAA4B;IAClE,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC;IACrF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACpD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;IACpC,MAAM,KAAK,GAAG,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC;IAC/G,CAAC;IACD,IAAI,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"surface.js","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAA8B,KAAK,WAAW,EAAwB,MAAM,mBAAmB,CAAC;AACvG,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAmBvE;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,QAAQ,EAAE,SAAS,CAAC,aAAa,EAAE,GAAG,aAAa,EAAE,CAAC,GACxD,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAiGvC"}
|
package/dist/tools.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { tool } from 'ai';
|
|
10
10
|
import { z } from 'zod';
|
|
11
|
-
import { defineTool } from '@e2edev/e2e/agent';
|
|
11
|
+
import { defineTool, getToolContext } from '@e2edev/e2e/agent';
|
|
12
12
|
import { BackendError } from '@e2edev/e2e/backend';
|
|
13
13
|
import { surfaceOf } from './backend.js';
|
|
14
14
|
function requireSurface(backend) {
|
|
@@ -45,10 +45,8 @@ export function agentDeviceTools(...backends) {
|
|
|
45
45
|
}
|
|
46
46
|
return surface;
|
|
47
47
|
};
|
|
48
|
-
const annotate = (
|
|
49
|
-
replay,
|
|
48
|
+
const annotate = (mutates) => ({
|
|
50
49
|
mutates,
|
|
51
|
-
secrets: false,
|
|
52
50
|
platforms,
|
|
53
51
|
});
|
|
54
52
|
const abort = (options) => options.abortSignal;
|
|
@@ -60,7 +58,7 @@ export function agentDeviceTools(...backends) {
|
|
|
60
58
|
await active().openApp(app, relaunch === true, abort(options) ?? new AbortController().signal);
|
|
61
59
|
return `Opened ${app}.`;
|
|
62
60
|
},
|
|
63
|
-
}), annotate(
|
|
61
|
+
}), annotate(true)),
|
|
64
62
|
swipe: defineTool(tool({
|
|
65
63
|
description: 'Swipe from one screen point to another in logical pixels, e.g. to reveal a row action (swipe the row far left) or to dismiss a sheet.',
|
|
66
64
|
inputSchema: z.object({
|
|
@@ -71,7 +69,7 @@ export function agentDeviceTools(...backends) {
|
|
|
71
69
|
await active().command('swipe', (client) => client.interactions.swipe({ from, to }), abort(options));
|
|
72
70
|
return `Swiped from (${from.x}, ${from.y}) to (${to.x}, ${to.y}).`;
|
|
73
71
|
},
|
|
74
|
-
}), annotate(
|
|
72
|
+
}), annotate(true)),
|
|
75
73
|
type_text: defineTool(tool({
|
|
76
74
|
description: 'Type text into whatever field currently has keyboard focus, then optionally press Return. Use only when the focused field is missing from the observation (some editors hide it); otherwise use the type verb on a node.',
|
|
77
75
|
inputSchema: z.object({ text: z.string().min(1), submit: z.boolean().optional() }),
|
|
@@ -83,7 +81,7 @@ export function agentDeviceTools(...backends) {
|
|
|
83
81
|
}
|
|
84
82
|
return submit === true ? `Typed ${JSON.stringify(text)} and pressed Return.` : `Typed ${JSON.stringify(text)}.`;
|
|
85
83
|
},
|
|
86
|
-
}), annotate(
|
|
84
|
+
}), annotate(true)),
|
|
87
85
|
alert: defineTool(tool({
|
|
88
86
|
description: 'Accept or dismiss a visible system alert or permission prompt.',
|
|
89
87
|
inputSchema: z.object({ action: z.enum(['accept', 'dismiss']) }),
|
|
@@ -91,20 +89,21 @@ export function agentDeviceTools(...backends) {
|
|
|
91
89
|
await active().command('alert', (client) => client.command.alert({ action }), abort(options));
|
|
92
90
|
return `Alert ${action}ed.`;
|
|
93
91
|
},
|
|
94
|
-
}), annotate(
|
|
92
|
+
}), annotate(true)),
|
|
95
93
|
screenshot: defineTool(tool({
|
|
96
94
|
description: 'Look at the actual screen pixels. Use when the observation tree is sparse or contradicts what you expect.',
|
|
97
95
|
inputSchema: z.object({}),
|
|
98
96
|
execute: async (_input, options) => {
|
|
99
|
-
const
|
|
100
|
-
return
|
|
97
|
+
const observation = await getToolContext(options).observe({ pixels: true });
|
|
98
|
+
return observation.pixels === undefined
|
|
99
|
+
? { withheld: observation.pixelsWithheld ?? 'UNSUPPORTED_CAPABILITY' }
|
|
100
|
+
: { png: Buffer.from(observation.pixels.data).toString('base64') };
|
|
101
101
|
},
|
|
102
102
|
// The model gets the image itself, not a file path it cannot open.
|
|
103
|
-
toModelOutput: ({ output }) =>
|
|
104
|
-
type: '
|
|
105
|
-
value: [{ type: 'file', data: { type: 'data', data: output.png }, mediaType: 'image/png' }],
|
|
106
|
-
|
|
107
|
-
}), annotate('none', false)),
|
|
103
|
+
toModelOutput: ({ output }) => output.png === undefined
|
|
104
|
+
? { type: 'text', value: `Screenshot withheld: ${output.withheld}` }
|
|
105
|
+
: { type: 'content', value: [{ type: 'file', data: { type: 'data', data: output.png }, mediaType: 'image/png' }] },
|
|
106
|
+
}), annotate(false)),
|
|
108
107
|
};
|
|
109
108
|
}
|
|
110
109
|
//# sourceMappingURL=tools.js.map
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAA0C,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@e2edev/agent-device",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "agent-device mobile backend (iOS and Android) for the e2e agentic end-to-end testing standard",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"e2e",
|
|
@@ -48,11 +48,12 @@
|
|
|
48
48
|
],
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"agent-device": "0.20.10",
|
|
51
|
+
"pngjs": "7.0.0",
|
|
51
52
|
"zod": "4.4.3"
|
|
52
53
|
},
|
|
53
54
|
"peerDependencies": {
|
|
54
55
|
"ai": "^7.0.0",
|
|
55
|
-
"@e2edev/e2e": ">=0.
|
|
56
|
+
"@e2edev/e2e": ">=0.4.0 <1"
|
|
56
57
|
},
|
|
57
58
|
"peerDependenciesMeta": {
|
|
58
59
|
"ai": {
|
|
@@ -61,10 +62,11 @@
|
|
|
61
62
|
},
|
|
62
63
|
"devDependencies": {
|
|
63
64
|
"@types/node": "26.1.1",
|
|
65
|
+
"@types/pngjs": "6.0.5",
|
|
64
66
|
"ai": "7.0.37",
|
|
65
67
|
"typescript": "7.0.2",
|
|
66
68
|
"vitest": "4.1.10",
|
|
67
|
-
"@e2edev/e2e": "0.
|
|
69
|
+
"@e2edev/e2e": "0.4.0"
|
|
68
70
|
},
|
|
69
71
|
"engines": {
|
|
70
72
|
"node": ">=22.12.0"
|