@e2edev/agent-device 0.2.0 → 0.3.0
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 -10
- package/dist/device.d.ts +3 -3
- package/dist/device.d.ts.map +1 -1
- package/dist/device.js +24 -2
- package/dist/device.js.map +1 -1
- package/dist/engine.d.ts +16 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/{backend.js → engine.js} +25 -14
- package/dist/engine.js.map +1 -0
- package/dist/errors.d.ts +3 -3
- package/dist/errors.js +12 -12
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/locate.d.ts +1 -1
- package/dist/locate.d.ts.map +1 -1
- package/dist/locate.js +7 -4
- package/dist/locate.js.map +1 -1
- package/dist/nodes.d.ts +2 -2
- package/dist/nodes.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/selector.js +2 -2
- package/dist/selector.js.map +1 -1
- package/dist/support.d.ts +7 -23
- package/dist/support.d.ts.map +1 -1
- package/dist/support.js +7 -46
- package/dist/support.js.map +1 -1
- package/dist/surface.d.ts +19 -15
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +45 -36
- package/dist/surface.js.map +1 -1
- package/dist/tools.d.ts +8 -8
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +28 -29
- package/dist/tools.js.map +1 -1
- package/package.json +7 -5
- package/dist/backend.d.ts +0 -16
- package/dist/backend.d.ts.map +0 -1
- package/dist/backend.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
# @e2edev/agent-device
|
|
2
2
|
|
|
3
|
-
The mobile
|
|
3
|
+
The mobile engine for [`e2e`](https://www.npmjs.com/package/e2e), built on
|
|
4
4
|
[agent-device](https://github.com/callstack/agent-device): iOS simulators and
|
|
5
|
-
Android emulators through the same `@e2edev/e2e/
|
|
5
|
+
Android emulators through the same `@e2edev/e2e/engine` contract the browser engine
|
|
6
6
|
implements. A test written against `screen`, `expect`, `app`, and `agent` runs
|
|
7
7
|
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
|
```
|
|
@@ -27,8 +32,8 @@ const pixel = agentDevice({ platform: 'android', app: 'com.android.settings' });
|
|
|
27
32
|
|
|
28
33
|
export default defineConfig({
|
|
29
34
|
targets: [
|
|
30
|
-
{ name: 'iphone', platform: 'ios',
|
|
31
|
-
{ name: 'pixel', platform: 'android',
|
|
35
|
+
{ name: 'iphone', platform: 'ios', engine: iphone },
|
|
36
|
+
{ name: 'pixel', platform: 'android', engine: pixel },
|
|
32
37
|
],
|
|
33
38
|
workers: 1,
|
|
34
39
|
agent: { executor: createAgent({ tools: agentDeviceTools(iphone, pixel) }) },
|
|
@@ -51,7 +56,7 @@ Options:
|
|
|
51
56
|
| `session` | agent-device session name; defaults to `e2e-<target name>`. One run per session at a time. |
|
|
52
57
|
| `snapshot` | `'full'` (default, includes static text) or `'interactive'` (actionable nodes only). |
|
|
53
58
|
|
|
54
|
-
## What the
|
|
59
|
+
## What the engine declares
|
|
55
60
|
|
|
56
61
|
- **Observation**: the accessibility tree, projected onto the role vocabulary
|
|
57
62
|
(iOS `Button` becomes `button`, `TextField` becomes `textbox`, `Cell` becomes
|
|
@@ -75,7 +80,7 @@ Options:
|
|
|
75
80
|
## Trace cache
|
|
76
81
|
|
|
77
82
|
The runner caches `agent.act` steps by their location anchor, and a device has
|
|
78
|
-
no address bar. This
|
|
83
|
+
no address bar. This engine reports one anyway: `app://device/<bundle
|
|
79
84
|
id>/<screen title>`, with the title read off the navigation bar on iOS and the
|
|
80
85
|
collapsing toolbar on Android. The cache compares pathnames, so the app
|
|
81
86
|
identity is part of the path and two apps with a "General" screen never share
|
|
@@ -117,13 +122,13 @@ the bundle id or package to `openApp` the build by.
|
|
|
117
122
|
|
|
118
123
|
## Agent tools
|
|
119
124
|
|
|
120
|
-
`@e2edev/agent-device/tools` exports `agentDeviceTools(...
|
|
125
|
+
`@e2edev/agent-device/tools` exports `agentDeviceTools(...engines)`:
|
|
121
126
|
`open_app`, `swipe` (free-form, in logical pixels), `type_text` (into the
|
|
122
127
|
focused field, for editors that hide it from the tree), `alert`, and
|
|
123
|
-
`screenshot` (the model sees the image). Pass every device
|
|
128
|
+
`screenshot` (the model sees the image). Pass every device engine the config
|
|
124
129
|
declares: tool names are fixed, so two packs cannot be merged, and the pack
|
|
125
|
-
dispatches each call to the
|
|
126
|
-
to the platforms of those
|
|
130
|
+
dispatches each call to the engine whose attempt is running. Tools are scoped
|
|
131
|
+
to the platforms of those engines, so a suite that mixes web and device
|
|
127
132
|
targets can hand the pack to one `createAgent`.
|
|
128
133
|
|
|
129
134
|
## Secrets
|
package/dist/device.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The `device` fixture: deterministic device management this
|
|
2
|
+
* The `device` fixture: deterministic device management this engine
|
|
3
3
|
* contributes. Not an agent tool; a test calls these directly to arrange or
|
|
4
4
|
* assert device state, and the harness records each call as a
|
|
5
5
|
* `device.<method>` step bounded by the action timeout.
|
|
6
6
|
*/
|
|
7
|
-
import type {
|
|
7
|
+
import type { EngineFixtureContext, Locator } from '@e2edev/e2e/engine';
|
|
8
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';
|
|
@@ -72,5 +72,5 @@ export interface Device {
|
|
|
72
72
|
setClipboard(text: string): Promise<void>;
|
|
73
73
|
}
|
|
74
74
|
/** Builds the device fixture for one attempt. */
|
|
75
|
-
export declare function createDeviceFixture(surface: AgentDeviceSurface, context:
|
|
75
|
+
export declare function createDeviceFixture(surface: AgentDeviceSurface, context: EngineFixtureContext): Device;
|
|
76
76
|
//# sourceMappingURL=device.d.ts.map
|
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,
|
|
1
|
+
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"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"}
|
package/dist/device.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The `device` fixture: deterministic device management this
|
|
2
|
+
* The `device` fixture: deterministic device management this engine
|
|
3
3
|
* contributes. Not an agent tool; a test calls these directly to arrange or
|
|
4
4
|
* assert device state, and the harness records each call as a
|
|
5
5
|
* `device.<method>` step bounded by the action timeout.
|
|
6
6
|
*/
|
|
7
7
|
/** Builds the device fixture for one attempt. */
|
|
8
8
|
export function createDeviceFixture(surface, context) {
|
|
9
|
-
|
|
9
|
+
const device = {
|
|
10
10
|
locator: (selector) => context.locator({ kind: 'selector', selector }),
|
|
11
11
|
async setNetwork(state) {
|
|
12
12
|
await surface.command('device.setNetwork', (client) => client.settings.update({ setting: 'wifi', state: state === 'offline' ? 'off' : 'on' }), context.signal);
|
|
@@ -75,5 +75,27 @@ export function createDeviceFixture(surface, context) {
|
|
|
75
75
|
await surface.command('device.setClipboard', (client) => client.command.clipboard({ action: 'write', text }), context.signal);
|
|
76
76
|
},
|
|
77
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
|
+
});
|
|
78
100
|
}
|
|
79
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;AAiFH,iDAAiD;AACjD,MAAM,UAAU,mBAAmB,CAAC,OAA2B,EAAE,
|
|
1
|
+
{"version":3,"file":"device.js","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"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"}
|
package/dist/engine.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The agent-device engine for e2e (RFC0002): a mobile body built with the
|
|
3
|
+
* public `defineEngine`, validated by the same rules and graded by the same
|
|
4
|
+
* capabilities as any other engine. Core imports nothing from here; this
|
|
5
|
+
* package imports the contract from `@e2edev/e2e/engine` and contributes the
|
|
6
|
+
* `device` fixture the way the browser engine contributes `web`.
|
|
7
|
+
*/
|
|
8
|
+
import { type EngineHandle } from '@e2edev/e2e/engine';
|
|
9
|
+
import { AgentDeviceSurface, type AgentDeviceOptions } from './surface.ts';
|
|
10
|
+
/** Assembles the manifest for one surface. Exported for tests that script the client. */
|
|
11
|
+
export declare function buildEngine(surface: AgentDeviceSurface): EngineHandle;
|
|
12
|
+
/** Creates one agent-device engine: one device session per worker, one fresh app launch per attempt. */
|
|
13
|
+
export declare function agentDevice(options: AgentDeviceOptions): EngineHandle;
|
|
14
|
+
/** The surface behind a handle this package created; undefined for any other engine. */
|
|
15
|
+
export declare function surfaceOf(engine: EngineHandle): AgentDeviceSurface | undefined;
|
|
16
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAgD,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAErG,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAsB,MAAM,cAAc,CAAC;AAI/F,yFAAyF;AACzF,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,YAAY,CAiCrE;AAED,wGAAwG;AACxG,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,YAAY,CAGrE;AAaD,wFAAwF;AACxF,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,kBAAkB,GAAG,SAAS,CAE9E"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The agent-device
|
|
3
|
-
* public `
|
|
4
|
-
* capabilities as any other
|
|
5
|
-
* package imports the contract from `@e2edev/e2e/
|
|
6
|
-
* `device` fixture the way the browser
|
|
2
|
+
* The agent-device engine for e2e (RFC0002): a mobile body built with the
|
|
3
|
+
* public `defineEngine`, validated by the same rules and graded by the same
|
|
4
|
+
* capabilities as any other engine. Core imports nothing from here; this
|
|
5
|
+
* package imports the contract from `@e2edev/e2e/engine` and contributes the
|
|
6
|
+
* `device` fixture the way the browser engine contributes `web`.
|
|
7
7
|
*/
|
|
8
8
|
import { createRequire } from 'node:module';
|
|
9
9
|
import { createAgentDeviceClient } from 'agent-device';
|
|
10
|
-
import {
|
|
10
|
+
import { defineEngine, obj } from '@e2edev/e2e/engine';
|
|
11
11
|
import { createDeviceFixture } from './device.js';
|
|
12
12
|
import { AgentDeviceSurface } from './surface.js';
|
|
13
13
|
const surfaces = new WeakMap();
|
|
14
14
|
/** Assembles the manifest for one surface. Exported for tests that script the client. */
|
|
15
|
-
export function
|
|
16
|
-
const handle =
|
|
15
|
+
export function buildEngine(surface) {
|
|
16
|
+
const handle = defineEngine({
|
|
17
17
|
name: 'agent-device',
|
|
18
18
|
version: ownVersion(),
|
|
19
19
|
spiVersion: 1,
|
|
@@ -26,6 +26,7 @@ export function buildBackend(surface) {
|
|
|
26
26
|
perform: (ref, action, operation) => surface.perform(ref, action, operation),
|
|
27
27
|
swipe: (direction, momentum, operation) => surface.swipe(direction, momentum, operation),
|
|
28
28
|
app: {
|
|
29
|
+
...declaredApp(surface.options),
|
|
29
30
|
back: (operation) => surface.back(operation),
|
|
30
31
|
...(surface.managesApp
|
|
31
32
|
? {
|
|
@@ -45,14 +46,24 @@ export function buildBackend(surface) {
|
|
|
45
46
|
surfaces.set(handle, surface);
|
|
46
47
|
return handle;
|
|
47
48
|
}
|
|
48
|
-
/** Creates one agent-device
|
|
49
|
+
/** Creates one agent-device engine: one device session per worker, one fresh app launch per attempt. */
|
|
49
50
|
export function agentDevice(options) {
|
|
50
51
|
const factory = (session) => createAgentDeviceClient({ session });
|
|
51
|
-
return
|
|
52
|
+
return buildEngine(new AgentDeviceSurface(options, factory));
|
|
52
53
|
}
|
|
53
|
-
/**
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
/**
|
|
55
|
+
* What the device engine declares about its app: the pinned app (else the
|
|
56
|
+
* build it installs) is the identity cache and session entries key on.
|
|
57
|
+
*/
|
|
58
|
+
function declaredApp(options) {
|
|
59
|
+
return obj({
|
|
60
|
+
identity: options.identity ?? options.app ?? options.appPath,
|
|
61
|
+
environment: options.environment,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/** The surface behind a handle this package created; undefined for any other engine. */
|
|
65
|
+
export function surfaceOf(engine) {
|
|
66
|
+
return surfaces.get(engine);
|
|
56
67
|
}
|
|
57
68
|
/** This package's published version, read through require resolution. */
|
|
58
69
|
function ownVersion() {
|
|
@@ -63,4 +74,4 @@ function ownVersion() {
|
|
|
63
74
|
return 'unknown';
|
|
64
75
|
}
|
|
65
76
|
}
|
|
66
|
-
//# sourceMappingURL=
|
|
77
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,GAAG,EAAgD,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAA+C,MAAM,cAAc,CAAC;AAE/F,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAoC,CAAC;AAEjE,yFAAyF;AACzF,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,MAAM,MAAM,GAAG,YAAY,CAAC;QAC1B,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,UAAU,EAAE;QACrB,UAAU,EAAE,CAAC;QACb,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;QACxD,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;QACpD,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAC9C,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;QACpE,MAAM,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC;QACxE,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC;QAC5E,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC;QACxF,GAAG,EAAE;YACH,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;YAC/B,IAAI,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;YAC5C,GAAG,CAAC,OAAO,CAAC,UAAU;gBACpB,CAAC,CAAC;oBACE,OAAO,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;oBAClD,UAAU,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC;iBACzD;gBACH,CAAC,CAAC,EAAE,CAAC;SACR;QACD,SAAS,EAAE;YACT,UAAU,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC;SACvE;QACD,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QAC1C,QAAQ,EAAE;YACR,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;SAC3D;KACF,CAAC,CAAC;IACH,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,MAAM,OAAO,GAAkB,CAAC,OAAO,EAAE,EAAE,CAAC,uBAAuB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACjF,OAAO,WAAW,CAAC,IAAI,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,OAA2B;IAC9C,OAAO,GAAG,CAAC;QACT,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,OAAO;QAC5D,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC,CAAC;AACL,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED,yEAAyE;AACzE,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,OAAQ,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAyB,CAAC,OAAO,CAAC;IAC5F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Translation of agent-device failures onto the
|
|
2
|
+
* Translation of agent-device failures onto the engine error contract.
|
|
3
3
|
*
|
|
4
4
|
* | agent-device failure | Code |
|
|
5
5
|
* | ----------------------------------------------------------- | ---------------------------- |
|
|
6
|
-
* | already
|
|
6
|
+
* | already an EngineError / runner error | passed through untouched |
|
|
7
7
|
* | AbortError | CANCELLED |
|
|
8
8
|
* | no active session / session not found | INVALID_STATE |
|
|
9
9
|
* | UNSUPPORTED_OPERATION, NOT_IMPLEMENTED, UNSUPPORTED_PLATFORM | UNSUPPORTED_CAPABILITY |
|
|
10
10
|
* | "not supported on this device" under any code | UNSUPPORTED_CAPABILITY |
|
|
11
11
|
* | a ref the daemon no longer knows (action paths only) | NODE_STALE (retryable) |
|
|
12
12
|
* | timed out | OPERATION_TIMEOUT |
|
|
13
|
-
* | anything else |
|
|
13
|
+
* | anything else | ENGINE_FAILURE |
|
|
14
14
|
*/
|
|
15
15
|
/** A failure's message in agent-device's normalized form. */
|
|
16
16
|
export declare function message(cause: unknown): string;
|
package/dist/errors.js
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Translation of agent-device failures onto the
|
|
2
|
+
* Translation of agent-device failures onto the engine error contract.
|
|
3
3
|
*
|
|
4
4
|
* | agent-device failure | Code |
|
|
5
5
|
* | ----------------------------------------------------------- | ---------------------------- |
|
|
6
|
-
* | already
|
|
6
|
+
* | already an EngineError / runner error | passed through untouched |
|
|
7
7
|
* | AbortError | CANCELLED |
|
|
8
8
|
* | no active session / session not found | INVALID_STATE |
|
|
9
9
|
* | UNSUPPORTED_OPERATION, NOT_IMPLEMENTED, UNSUPPORTED_PLATFORM | UNSUPPORTED_CAPABILITY |
|
|
10
10
|
* | "not supported on this device" under any code | UNSUPPORTED_CAPABILITY |
|
|
11
11
|
* | a ref the daemon no longer knows (action paths only) | NODE_STALE (retryable) |
|
|
12
12
|
* | timed out | OPERATION_TIMEOUT |
|
|
13
|
-
* | anything else |
|
|
13
|
+
* | anything else | ENGINE_FAILURE |
|
|
14
14
|
*/
|
|
15
15
|
import { normalizeAgentDeviceError } from 'agent-device';
|
|
16
|
-
import {
|
|
16
|
+
import { EngineError, ConfigurationError, InfrastructureError, TestError } from '@e2edev/e2e/engine';
|
|
17
17
|
import { cancelled } from './support.js';
|
|
18
18
|
/**
|
|
19
|
-
* True for an error that already carries its classification:
|
|
19
|
+
* True for an error that already carries its classification: an `EngineError`
|
|
20
20
|
* from any module copy, or a runner error. Those cross the boundary untouched;
|
|
21
21
|
* re-wrapping one would turn a `POLICY_DENIED` into an infrastructure failure.
|
|
22
22
|
*/
|
|
23
23
|
function isClassified(cause) {
|
|
24
|
-
if (cause instanceof
|
|
24
|
+
if (cause instanceof EngineError || cause instanceof TestError)
|
|
25
25
|
return true;
|
|
26
26
|
if (cause instanceof ConfigurationError || cause instanceof InfrastructureError)
|
|
27
27
|
return true;
|
|
28
|
-
return cause instanceof Error && cause.name === '
|
|
28
|
+
return cause instanceof Error && cause.name === 'EngineError';
|
|
29
29
|
}
|
|
30
30
|
/** A failure's message in agent-device's normalized form. */
|
|
31
31
|
export function message(cause) {
|
|
@@ -46,14 +46,14 @@ export function translateError(cause, operation) {
|
|
|
46
46
|
const text = `${operation} failed: ${normalized.message}`;
|
|
47
47
|
const options = { retryable: false, cause };
|
|
48
48
|
if (normalized.code === 'SESSION_NOT_FOUND' || NO_SESSION_PATTERN.test(normalized.message)) {
|
|
49
|
-
return new
|
|
49
|
+
return new EngineError('INVALID_STATE', text, options);
|
|
50
50
|
}
|
|
51
51
|
if (UNSUPPORTED_CODES.has(normalized.code) || UNSUPPORTED_PATTERN.test(normalized.message)) {
|
|
52
|
-
return new
|
|
52
|
+
return new EngineError('UNSUPPORTED_CAPABILITY', text, options);
|
|
53
53
|
}
|
|
54
54
|
if (TIMEOUT_PATTERN.test(normalized.message))
|
|
55
|
-
return new
|
|
56
|
-
return new
|
|
55
|
+
return new EngineError('OPERATION_TIMEOUT', text, options);
|
|
56
|
+
return new EngineError('ENGINE_FAILURE', text, options);
|
|
57
57
|
}
|
|
58
58
|
/**
|
|
59
59
|
* Like translateError, but a ref the daemon no longer binds becomes retryable
|
|
@@ -65,7 +65,7 @@ export function staleOr(cause, operation) {
|
|
|
65
65
|
return cause;
|
|
66
66
|
const normalized = normalizeAgentDeviceError(cause);
|
|
67
67
|
if (STALE_PATTERN.test(normalized.message)) {
|
|
68
|
-
return new
|
|
68
|
+
return new EngineError('NODE_STALE', `${operation}: ${normalized.message}`, { retryable: true, cause });
|
|
69
69
|
}
|
|
70
70
|
return translateError(cause, operation);
|
|
71
71
|
}
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `@e2edev/agent-device` public surface: the `agentDevice()`
|
|
2
|
+
* `@e2edev/agent-device` public surface: the `agentDevice()` engine factory,
|
|
3
3
|
* the `device` fixture types, and a `test` typed with that fixture. `expect`
|
|
4
4
|
* and `credentials` still come from `e2e`; the agent-side tool pack lives on
|
|
5
5
|
* the `@e2edev/agent-device/tools` subpath so this entry never loads the AI SDK.
|
|
6
6
|
*/
|
|
7
7
|
import type { Device } from './device.ts';
|
|
8
|
-
export { agentDevice } from './
|
|
8
|
+
export { agentDevice } from './engine.ts';
|
|
9
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
|
-
* `test` typed with this
|
|
12
|
+
* `test` typed with this engine's contributed `device` fixture. The same
|
|
13
13
|
* runtime `test` as `e2e`'s; only the fixture types differ.
|
|
14
14
|
*/
|
|
15
15
|
export declare const test: import("@e2edev/e2e").TestAPI<import("@e2edev/e2e").TestFixtures & {
|
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,
|
|
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,aAAa,CAAC;AAC1C,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/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `@e2edev/agent-device` public surface: the `agentDevice()`
|
|
2
|
+
* `@e2edev/agent-device` public surface: the `agentDevice()` engine factory,
|
|
3
3
|
* the `device` fixture types, and a `test` typed with that fixture. `expect`
|
|
4
4
|
* and `credentials` still come from `e2e`; the agent-side tool pack lives on
|
|
5
5
|
* the `@e2edev/agent-device/tools` subpath so this entry never loads the AI SDK.
|
|
6
6
|
*/
|
|
7
7
|
import { test as base } from '@e2edev/e2e';
|
|
8
|
-
export { agentDevice } from './
|
|
8
|
+
export { agentDevice } from './engine.js';
|
|
9
9
|
/**
|
|
10
|
-
* `test` typed with this
|
|
10
|
+
* `test` typed with this engine's contributed `device` fixture. The same
|
|
11
11
|
* runtime `test` as `e2e`'s; only the fixture types differ.
|
|
12
12
|
*/
|
|
13
13
|
export const test = base.extend();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI1C;;;GAGG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAsB,CAAC"}
|
package/dist/locate.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* device just reported. One immediate pass, every match in document order;
|
|
5
5
|
* polling, strictness, and staleness stay with the runner.
|
|
6
6
|
*/
|
|
7
|
-
import { type LocatorExpression } from '@e2edev/e2e/
|
|
7
|
+
import { type LocatorExpression } from '@e2edev/e2e/engine';
|
|
8
8
|
import { type ProjectedNode } from './nodes.ts';
|
|
9
9
|
export interface LocateOptions {
|
|
10
10
|
readonly testIdAttribute: string;
|
package/dist/locate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locate.d.ts","sourceRoot":"","sources":["../src/locate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"locate.d.ts","sourceRoot":"","sources":["../src/locate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAA4B,KAAK,iBAAiB,EAAsB,MAAM,oBAAoB,CAAC;AAC1G,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAG1D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,iBAAiB,EAC7B,KAAK,EAAE,SAAS,aAAa,EAAE,EAC/B,OAAO,EAAE,aAAa,GACrB,aAAa,EAAE,CAgCjB"}
|
package/dist/locate.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* device just reported. One immediate pass, every match in document order;
|
|
5
5
|
* polling, strictness, and staleness stay with the runner.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
7
|
+
import { EngineError, matchesText } from '@e2edev/e2e/engine';
|
|
8
8
|
import { isWithin } from './nodes.js';
|
|
9
9
|
import { compileSelector } from './selector.js';
|
|
10
10
|
/** Resolves one expression to the nodes it currently matches. */
|
|
@@ -36,7 +36,7 @@ export function resolveExpression(expression, index, options) {
|
|
|
36
36
|
case 'selector':
|
|
37
37
|
return compileSelector(expression.selector)(index);
|
|
38
38
|
case 'frame':
|
|
39
|
-
throw new
|
|
39
|
+
throw new EngineError('FRAME_NOT_FOUND', 'a device surface has no nested documents to scope a query into', {
|
|
40
40
|
retryable: false,
|
|
41
41
|
});
|
|
42
42
|
}
|
|
@@ -57,14 +57,17 @@ const STATE_KEYS = ['checked', 'disabled', 'selected', 'expanded'];
|
|
|
57
57
|
/**
|
|
58
58
|
* One node against one semantic query. Role queries skip hidden nodes unless
|
|
59
59
|
* the query asks for them, as a browser's role query does; the other kinds
|
|
60
|
-
* answer with every node and leave visibility to the action or assertion
|
|
60
|
+
* answer with every node and leave visibility to the action or assertion,
|
|
61
|
+
* unless the query says `visible`, which drops hidden nodes for every kind.
|
|
61
62
|
*/
|
|
62
63
|
function matchesQuery(entry, query, options) {
|
|
63
64
|
const node = entry.node;
|
|
65
|
+
if (query.visible === true && node.states?.hidden === true)
|
|
66
|
+
return false;
|
|
64
67
|
switch (query.kind) {
|
|
65
68
|
case 'role': {
|
|
66
69
|
if (query.value.kind !== 'string') {
|
|
67
|
-
throw new
|
|
70
|
+
throw new EngineError('ENGINE_FAILURE', 'role query value must be a string', { retryable: false });
|
|
68
71
|
}
|
|
69
72
|
if ((node.role ?? '') !== query.value.value)
|
|
70
73
|
return false;
|
package/dist/locate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locate.js","sourceRoot":"","sources":["../src/locate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"locate.js","sourceRoot":"","sources":["../src/locate.ts"],"names":[],"mappings":"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"}
|
package/dist/nodes.d.ts
CHANGED
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
* vocabulary `screen.getByRole` and trace relocation speak, and mints the
|
|
7
7
|
* ids the surface owns.
|
|
8
8
|
*/
|
|
9
|
-
import type { SemanticNode } from '@e2edev/e2e/
|
|
9
|
+
import type { SemanticNode } from '@e2edev/e2e/engine';
|
|
10
10
|
import type { Rect } from './support.ts';
|
|
11
|
-
/** The subset of an agent-device snapshot node this
|
|
11
|
+
/** The subset of an agent-device snapshot node this engine reads. */
|
|
12
12
|
export interface RawNode {
|
|
13
13
|
readonly ref?: string;
|
|
14
14
|
readonly index?: number;
|
package/dist/nodes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../src/nodes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../src/nodes.ts"],"names":[],"mappings":"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"}
|
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"}
|