@e2edev/e2e 0.11.0 → 0.12.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 +3 -3
- package/dist/agent/act.d.ts +30 -2
- package/dist/agent/act.d.ts.map +1 -1
- package/dist/agent/act.js +4 -4
- package/dist/agent/act.js.map +1 -1
- package/dist/agent/default-agent.d.ts +16 -7
- package/dist/agent/default-agent.d.ts.map +1 -1
- package/dist/agent/default-agent.js +35 -34
- package/dist/agent/default-agent.js.map +1 -1
- package/dist/agent/interactive-step.d.ts +38 -0
- package/dist/agent/interactive-step.d.ts.map +1 -0
- package/dist/agent/interactive-step.js +131 -0
- package/dist/agent/interactive-step.js.map +1 -0
- package/dist/agent/model/tool-choice.d.ts +21 -0
- package/dist/agent/model/tool-choice.d.ts.map +1 -0
- package/dist/agent/model/tool-choice.js +49 -0
- package/dist/agent/model/tool-choice.js.map +1 -0
- package/dist/agent/tool-loop.d.ts +4 -4
- package/dist/agent/tool-loop.d.ts.map +1 -1
- package/dist/agent/tool-loop.js +100 -23
- package/dist/agent/tool-loop.js.map +1 -1
- package/dist/cli/docs-url.d.ts +1 -1
- package/dist/cli/docs-url.d.ts.map +1 -1
- package/dist/cli/docs-url.js +1 -1
- package/dist/cli/docs-url.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +22 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/engine-versions.json +1 -1
- package/dist/cli/init/engines.d.ts +16 -15
- package/dist/cli/init/engines.d.ts.map +1 -1
- package/dist/cli/init/engines.js +23 -23
- package/dist/cli/init/engines.js.map +1 -1
- package/dist/cli/init/mcp-config.d.ts +31 -0
- package/dist/cli/init/mcp-config.d.ts.map +1 -0
- package/dist/cli/init/mcp-config.js +72 -0
- package/dist/cli/init/mcp-config.js.map +1 -0
- package/dist/cli/init/scaffold.d.ts +1 -1
- package/dist/cli/init/scaffold.js +1 -1
- package/dist/cli/init/scaffold.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +64 -28
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/mcp.d.ts +15 -0
- package/dist/cli/mcp.d.ts.map +1 -0
- package/dist/cli/mcp.js +63 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/collect/registry.d.ts.map +1 -1
- package/dist/collect/registry.js +23 -2
- package/dist/collect/registry.js.map +1 -1
- package/dist/collect/select.d.ts +9 -2
- package/dist/collect/select.d.ts.map +1 -1
- package/dist/collect/select.js +57 -11
- package/dist/collect/select.js.map +1 -1
- package/dist/config/resolve.d.ts +8 -5
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +11 -9
- package/dist/config/resolve.js.map +1 -1
- package/dist/credentials.d.ts +6 -0
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +9 -0
- package/dist/credentials.js.map +1 -1
- package/dist/explore/index.d.ts.map +1 -1
- package/dist/explore/index.js +6 -4
- package/dist/explore/index.js.map +1 -1
- package/dist/internal/ai-trace.d.ts +2 -0
- package/dist/internal/ai-trace.d.ts.map +1 -1
- package/dist/internal/ai-trace.js +3 -0
- package/dist/internal/ai-trace.js.map +1 -1
- package/dist/internal/ids.d.ts +2 -2
- package/dist/internal/ids.d.ts.map +1 -1
- package/dist/internal/ids.js +3 -3
- package/dist/internal/ids.js.map +1 -1
- package/dist/internal/package-manager.d.ts +4 -0
- package/dist/internal/package-manager.d.ts.map +1 -1
- package/dist/internal/package-manager.js +26 -0
- package/dist/internal/package-manager.js.map +1 -1
- package/dist/mcp/catalog.d.ts +50 -0
- package/dist/mcp/catalog.d.ts.map +1 -0
- package/dist/mcp/catalog.js +172 -0
- package/dist/mcp/catalog.js.map +1 -0
- package/dist/mcp/config.d.ts +11 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +16 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/server.d.ts +29 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +86 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/session.d.ts +68 -0
- package/dist/mcp/session.d.ts.map +1 -0
- package/dist/mcp/session.js +317 -0
- package/dist/mcp/session.js.map +1 -0
- package/dist/mcp/tools.d.ts +77 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +179 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/report/build.d.ts +8 -0
- package/dist/report/build.d.ts.map +1 -1
- package/dist/report/build.js +3 -1
- package/dist/report/build.js.map +1 -1
- package/dist/report/format.d.ts +19 -0
- package/dist/report/format.d.ts.map +1 -1
- package/dist/report/format.js +42 -0
- package/dist/report/format.js.map +1 -1
- package/dist/report/junit.d.ts.map +1 -1
- package/dist/report/junit.js +4 -1
- package/dist/report/junit.js.map +1 -1
- package/dist/report/list.d.ts +10 -1
- package/dist/report/list.d.ts.map +1 -1
- package/dist/report/list.js +35 -13
- package/dist/report/list.js.map +1 -1
- package/dist/run/events.d.ts +12 -3
- package/dist/run/events.d.ts.map +1 -1
- package/dist/run/events.js.map +1 -1
- package/dist/run/execute.d.ts +2 -2
- package/dist/run/execute.d.ts.map +1 -1
- package/dist/run/execute.js +19 -14
- package/dist/run/execute.js.map +1 -1
- package/dist/run/fixtures.d.ts +10 -4
- package/dist/run/fixtures.d.ts.map +1 -1
- package/dist/run/fixtures.js +23 -23
- package/dist/run/fixtures.js.map +1 -1
- package/dist/run/in-process.d.ts.map +1 -1
- package/dist/run/in-process.js +4 -3
- package/dist/run/in-process.js.map +1 -1
- package/dist/run/provision.d.ts +51 -0
- package/dist/run/provision.d.ts.map +1 -0
- package/dist/run/provision.js +94 -0
- package/dist/run/provision.js.map +1 -0
- package/dist/run/records.d.ts +4 -0
- package/dist/run/records.d.ts.map +1 -1
- package/dist/run/runner.d.ts +5 -2
- package/dist/run/runner.d.ts.map +1 -1
- package/dist/run/runner.js +21 -69
- package/dist/run/runner.js.map +1 -1
- package/dist/run/scheduler.d.ts +5 -2
- package/dist/run/scheduler.d.ts.map +1 -1
- package/dist/run/scheduler.js +13 -10
- package/dist/run/scheduler.js.map +1 -1
- package/dist/run/serial.d.ts +1 -1
- package/dist/run/serial.d.ts.map +1 -1
- package/dist/run/serial.js +7 -2
- package/dist/run/serial.js.map +1 -1
- package/dist/run/standalone.d.ts +63 -0
- package/dist/run/standalone.d.ts.map +1 -0
- package/dist/run/standalone.js +152 -0
- package/dist/run/standalone.js.map +1 -0
- package/dist/run/units.d.ts +6 -3
- package/dist/run/units.d.ts.map +1 -1
- package/dist/run/units.js +0 -0
- package/dist/run/units.js.map +1 -1
- package/dist/run/worker/entry.js +2 -2
- package/dist/run/worker/entry.js.map +1 -1
- package/dist/run/worker/protocol.d.ts +5 -0
- package/dist/run/worker/protocol.d.ts.map +1 -1
- package/dist/run/worker/protocol.js.map +1 -1
- package/dist/run/worker/session.d.ts +3 -4
- package/dist/run/worker/session.d.ts.map +1 -1
- package/dist/run/worker/session.js +5 -4
- package/dist/run/worker/session.js.map +1 -1
- package/dist/types.d.ts +8 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -6
- package/skills/e2e/SKILL.md +5 -2
- package/skills/e2e/references/agent.md +2 -2
- package/skills/e2e/references/explore.md +3 -3
- package/skills/e2e/references/mcp.md +88 -0
- package/skills/e2e/references/running.md +4 -3
- package/skills/e2e/references/setup.md +7 -6
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@e2edev/e2e",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "SDK, runner, and CLI for agentic end-to-end testing",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"e2e",
|
|
@@ -51,12 +51,13 @@
|
|
|
51
51
|
"skills"
|
|
52
52
|
],
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@clack/prompts": "1.
|
|
54
|
+
"@clack/prompts": "1.8.0",
|
|
55
|
+
"@modelcontextprotocol/sdk": "1.30.0",
|
|
55
56
|
"@vitest/expect": "5.0.0",
|
|
56
57
|
"commander": "15.0.0",
|
|
57
58
|
"picocolors": "1.1.1",
|
|
58
59
|
"tsx": "4.23.13",
|
|
59
|
-
"zod": "4.
|
|
60
|
+
"zod": "4.6.1"
|
|
60
61
|
},
|
|
61
62
|
"peerDependencies": {
|
|
62
63
|
"ai": "^7.0.0"
|
|
@@ -68,14 +69,14 @@
|
|
|
68
69
|
},
|
|
69
70
|
"devDependencies": {
|
|
70
71
|
"@ai-sdk/openai-compatible": "3.0.47",
|
|
72
|
+
"@e2edev/playwright": "0.9.0",
|
|
71
73
|
"@openrouter/ai-sdk-provider": "3.0.0",
|
|
72
74
|
"@types/node": "26.4.1",
|
|
73
|
-
"ai": "7.0.
|
|
75
|
+
"ai": "7.0.97",
|
|
74
76
|
"ajv": "8.20.0",
|
|
75
77
|
"ajv-formats": "3.0.1",
|
|
76
78
|
"typescript": "7.0.2",
|
|
77
|
-
"vitest": "5.0.0"
|
|
78
|
-
"@e2edev/playwright": "0.8.0"
|
|
79
|
+
"vitest": "5.0.0"
|
|
79
80
|
},
|
|
80
81
|
"engines": {
|
|
81
82
|
"node": ">=22.12.0"
|
package/skills/e2e/SKILL.md
CHANGED
|
@@ -66,6 +66,7 @@ one. Without them, the installed CLI prints the same text:
|
|
|
66
66
|
| `running` | [references/running.md](references/running.md) | CLI flags, reporters, `.e2e/report.json`, exit codes, CI |
|
|
67
67
|
| `explore` | [references/explore.md](references/explore.md) | Exploring an app toward a goal without a test file: `e2e explore`, its budgets, verdict, and `run.explore` |
|
|
68
68
|
| `debugging` | [references/debugging.md](references/debugging.md) | A run failed: error codes and their fixes, `--headed`, `--debug`, `--ai-trace` |
|
|
69
|
+
| `mcp` | [references/mcp.md](references/mcp.md) | Driving the live app from a coding agent over MCP: `e2e mcp`, its tools, and the explore-then-write loop |
|
|
69
70
|
|
|
70
71
|
## Workflow
|
|
71
72
|
|
|
@@ -74,8 +75,10 @@ one. Without them, the installed CLI prints the same text:
|
|
|
74
75
|
there: follow `setup`.
|
|
75
76
|
2. Learn the screens you will drive before writing a test: routes, labels,
|
|
76
77
|
roles, button text. Semantic locators need the accessible names the app
|
|
77
|
-
renders, so read the templates or components,
|
|
78
|
-
`--headed
|
|
78
|
+
renders, so read the templates or components, open the page with
|
|
79
|
+
`--headed`, or drive the live app through the `e2e mcp` server when it is
|
|
80
|
+
registered (topic `mcp`): `open_session`, `observe`, and `locate` show the
|
|
81
|
+
exact names and check a locator before you write it.
|
|
79
82
|
3. Write `tests/<feature>.e2e.ts`. Deterministic steps first. One `agent.act`
|
|
80
83
|
per goal where the flow varies, and an `expect` on its outcome right after.
|
|
81
84
|
4. Run one file: `npx --no-install e2e run tests/<feature>.e2e.ts`. Agent
|
|
@@ -6,7 +6,7 @@ transcript between calls. Deterministic tests never load a model.
|
|
|
6
6
|
|
|
7
7
|
## Configure a model
|
|
8
8
|
|
|
9
|
-
Agents live under `agents` by name; `default` is the one tests use, `e2e run --agent <name>` re-points that default, a test or describe pins one with `{ agent: 'name' }
|
|
9
|
+
Agents live under `agents` by name; `default` is the one tests use, `e2e run --agent <name>` re-points that default, a test or describe pins one with `{ agent: 'name' }` or several with `{ agent: ['buyer', 'admin'] }` (the test runs once per agent, one result each, tagged `[admin]` in the terminal and `agent` in the report), and any `agent.*` call can name one with `{ agent: 'name' }` (innermost wins). `--agent buyer,admin` runs every unpinned test once per agent; on a pinned list it narrows to the names both give and never overrides a pin it does not name. A signed-in persona pairs the pin with a `session`, one per describe block, so a loop over describe blocks sweeps signed-in personas. There is no default model. Pick one of three shapes for an entry:
|
|
10
10
|
|
|
11
11
|
```ts
|
|
12
12
|
// e2e.config.ts
|
|
@@ -222,7 +222,7 @@ arbitrary tool result JSON or other fields are preserved.
|
|
|
222
222
|
can be the `agent`; the runner still owns observations, actions, budgets,
|
|
223
223
|
and the report.
|
|
224
224
|
|
|
225
|
-
Full reference: https://e2e
|
|
225
|
+
Full reference: https://e2e.mintlify.app/agents
|
|
226
226
|
|
|
227
227
|
## In CI
|
|
228
228
|
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
`e2e explore` runs the agent against the app with a goal instead of a test
|
|
4
4
|
file. Use it to see what the agent can do with an app before tests exist, to
|
|
5
5
|
hunt for regressions on a branch, or to find what is worth turning into a
|
|
6
|
-
test. It needs a config with a target and
|
|
7
|
-
|
|
6
|
+
test. It needs a config with a target and an agent that holds a model,
|
|
7
|
+
nothing else.
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
npx --no-install e2e explore # goal: "Explore the app and find bugs"
|
|
11
11
|
npx --no-install e2e explore 'Explore checkout like a first-time buyer and report anything off'
|
|
12
12
|
npx --no-install e2e explore --target web --max-steps 4 --headed
|
|
13
|
-
|
|
13
|
+
npx --no-install e2e explore 'Hunt for broken forms' --video
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
## What a run does
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Driving the app over MCP
|
|
2
|
+
|
|
3
|
+
`e2e mcp` serves a project's live app to a coding agent over MCP (stdio).
|
|
4
|
+
It gives the agent the same hands the testing agent has on the app: look at
|
|
5
|
+
a screen before writing a test, and check a locator before committing to it.
|
|
6
|
+
Running tests and reading a failed run stay on the CLI (topics `running` and
|
|
7
|
+
`debugging`).
|
|
8
|
+
|
|
9
|
+
## Setup
|
|
10
|
+
|
|
11
|
+
The server ships with `@e2edev/e2e`. `e2e init` offers to register it; by
|
|
12
|
+
hand:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
claude mcp add e2e -- npx --no-install e2e mcp # Claude Code
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Or declare it in the client's project config (`.mcp.json` for Claude Code,
|
|
19
|
+
`.cursor/mcp.json` for Cursor, `.vscode/mcp.json` for VS Code):
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{ "mcpServers": { "e2e": { "command": "npx", "args": ["--no-install", "e2e", "mcp"] } } }
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Flags: `--config <path>` names the default config file, `--target <name>`
|
|
26
|
+
fixes the target every session opens on, `--headless` hides the browser or
|
|
27
|
+
simulator (sessions are headed by default outside CI, so the developer can
|
|
28
|
+
watch).
|
|
29
|
+
|
|
30
|
+
## Tools
|
|
31
|
+
|
|
32
|
+
The server has four tools, and the list never changes. Everything a session
|
|
33
|
+
can do is a catalog behind `call`.
|
|
34
|
+
|
|
35
|
+
| Tool | Does |
|
|
36
|
+
| --- | --- |
|
|
37
|
+
| `open_session` | Loads the config (`config` names another file; default the nearest `e2e.config.ts`), starts the declared app command if any, boots the engine, opens the app URL, and returns the session id, the catalog, and the first observation. `target` is required when the config declares several. One session at a time. |
|
|
38
|
+
| `tools` | The catalog: one line per tool with its argument names (`?` marks optional), the first sentence of its description, and `[read-only]` where it changes nothing. `tools {tool}` shows one tool's full description and the JSON Schema of its arguments. |
|
|
39
|
+
| `call` | Runs one catalog tool: `call {tool: "tap", args: {target: "n42"}}`. Arguments are checked against the tool's schema first; a wrong one fails with `INVALID_ARGUMENT` naming the field. |
|
|
40
|
+
| `close_session` | Ends the attempt, disposes the engine, stops the app processes the session started. |
|
|
41
|
+
|
|
42
|
+
The catalog, per session:
|
|
43
|
+
|
|
44
|
+
| Catalog tool | Does |
|
|
45
|
+
| --- | --- |
|
|
46
|
+
| `observe` | A fresh observation: one node per line as `#id role "name" ...`, plus the current path. |
|
|
47
|
+
| `tap`, `type`, `press`, `select`, `scroll`, `navigate` | The grammar verbs, exactly as the testing agent gets them. Each reports what changed on screen; `observe` shows the whole screen. A verb the engine cannot honor is not listed and fails with `UNSUPPORTED_CAPABILITY`. |
|
|
48
|
+
| `type_secret` | Fills a configured credential's password into a secure field by credential name; the plaintext never reaches the agent. Listed when the config declares `credentials`. |
|
|
49
|
+
| `locate` | Tries a semantic locator (`role` + `name`, `text`, `label`, `placeholder`, `testId`, `exact`) and returns how many nodes match, which, and the `screen.*` call to write. |
|
|
50
|
+
| `screenshot` | The masked pixels as an image, withheld once a secret was filled in the session. |
|
|
51
|
+
| Project tools | Every `defineTool` passed to `createAgent({ tools })` that applies to the target's platform, under its own name; an engine pack such as `agentDeviceTools` adds `open_app`, `swipe`, `type_text`, `alert`. |
|
|
52
|
+
|
|
53
|
+
Resources: `e2e://guide` and `e2e://guide/<topic>` hold this skill.
|
|
54
|
+
|
|
55
|
+
## Workflow
|
|
56
|
+
|
|
57
|
+
1. `open_session`, then `call {tool: "observe"}` and act until the screen you
|
|
58
|
+
want to test is in front of you. Node ids are valid only for the newest
|
|
59
|
+
observation; an action reports what changed, so observe again before
|
|
60
|
+
using new ids. The opening text lists every tool with its arguments;
|
|
61
|
+
`tools {tool}` when you need the full contract.
|
|
62
|
+
2. `call {tool: "locate", args: {...}}` for each locator you intend to write.
|
|
63
|
+
One match: use the printed `screen.getByRole(...)` call. Zero or several:
|
|
64
|
+
adjust before writing the test, the same failure would hit the test as
|
|
65
|
+
`LOCATOR_NOT_FOUND` or `LOCATOR_AMBIGUOUS`.
|
|
66
|
+
3. Write `tests/<feature>.e2e.ts` (topic `writing-tests`). Deterministic steps
|
|
67
|
+
where you saw exact names; `agent.act` where the flow varies.
|
|
68
|
+
4. Run it from the shell: `npx --no-install e2e run tests/<feature>.e2e.ts`,
|
|
69
|
+
read the failure (topic `debugging`), fix, repeat.
|
|
70
|
+
5. `close_session` when you are done exploring; an idle session closes on its
|
|
71
|
+
own after 30 minutes and never outlives 4 hours. To look at another
|
|
72
|
+
project or config, `open_session {config: "path/to/e2e.config.ts"}`; no
|
|
73
|
+
restart needed.
|
|
74
|
+
|
|
75
|
+
## Rules
|
|
76
|
+
|
|
77
|
+
- Sessions enforce the same policy as tests: navigation stays inside the
|
|
78
|
+
engine's allowed origins, secrets fill only through `type_secret`, and
|
|
79
|
+
pixels are withheld once a secret is on screen.
|
|
80
|
+
- Nothing a session does is recorded as a test or into the trace cache. A
|
|
81
|
+
session is for looking and trying; the test is what you write afterwards.
|
|
82
|
+
- A run from the shell and a live session can share the app only if the
|
|
83
|
+
engine's `command` uses `reuseExisting`; otherwise close the session before
|
|
84
|
+
running.
|
|
85
|
+
- `TARGET_REQUIRED`: pass `target` to `open_session` or start with `--target`.
|
|
86
|
+
`NO_SESSION`: call `open_session` first. `SESSION_OPEN`: one is already
|
|
87
|
+
open; use it or `close_session`. `UNKNOWN_TOOL`: the name is not in this
|
|
88
|
+
session's catalog; the message lists what is.
|
|
@@ -7,8 +7,9 @@ npx --no-install e2e run [files...] [options] # run tests
|
|
|
7
7
|
npx --no-install e2e explore [goal] [options] # explore the app toward a goal, no test file (see the explore topic)
|
|
8
8
|
npx --no-install e2e list [files...] [options] # print what run would select, without running
|
|
9
9
|
npx --no-install e2e init [--yes] # scaffold a project, refresh the agent skill
|
|
10
|
-
npx --no-install e2e guide [topic] # print this skill: setup, writing-tests, agent, running, explore, debugging
|
|
10
|
+
npx --no-install e2e guide [topic] # print this skill: setup, writing-tests, agent, running, explore, debugging, mcp
|
|
11
11
|
npx --no-install e2e cache ls|clear|stats # read or empty the trace cache
|
|
12
|
+
npx --no-install e2e mcp [--target <name>] # serve the project to a coding agent over MCP (topic mcp)
|
|
12
13
|
npx --no-install e2e telemetry [disable|enable] # anonymous usage telemetry: status, or the switch
|
|
13
14
|
```
|
|
14
15
|
|
|
@@ -21,7 +22,7 @@ npx --no-install e2e telemetry [disable|enable] # anonymous usage telemetry: sta
|
|
|
21
22
|
| `--target <ids>` | Comma-separated target names. Only selected targets start app commands and services; unknown names fail before startup. |
|
|
22
23
|
| `--tag <tag>` | Repeatable tag filter; `--tag-mode all` requires every tag. |
|
|
23
24
|
| `--headed` | Visible browser or simulator when the engine supports it. |
|
|
24
|
-
| `--agent <
|
|
25
|
+
| `--agent <names>` | Run unpinned tests as other configured agents (`agents.<name>`), comma-separated or repeated; several names run each such test once per agent. Default is `agents.default`. |
|
|
25
26
|
| `--workers <n>`, `--retries <n>` | Override the resolved values. |
|
|
26
27
|
| `--reporter <ids>` | `list`, `json`, `junit`, comma-separated. `json` cannot combine with `list`. |
|
|
27
28
|
| `--artifacts <dir>` | Artifact root, default `.e2e/artifacts`. |
|
|
@@ -71,7 +72,7 @@ recorded flow is stale — `--no-cache` only skips the cache for one run.
|
|
|
71
72
|
|
|
72
73
|
- `list` (default): one line per file and target, a `Failed Tests` section
|
|
73
74
|
with each error, its code, the failing line and a code frame, then a
|
|
74
|
-
summary (`Test Files`, `Tests`, `AI`, `Start at`, `Duration`, `Report`); setup steps (a first-run browser download, each service and app command) print above the tests and stay out of `Duration` or are split out of it as `(startup …)`.
|
|
75
|
+
summary (`Test Files`, `Tests`, `AI`, `Cache` when the trace cache was on: agent steps `replayed` whole, `handed off` to the model part-way, or `missed`, `Start at`, `Duration`, `Report`); setup steps (a first-run browser download, each service and app command) print above the tests and stay out of `Duration` or are split out of it as `(startup …)`.
|
|
75
76
|
- `.e2e/report.json` is written on every run whatever the reporters:
|
|
76
77
|
`run.status`, `run.exitCode`, `run.errors[]` (run-level failures such as
|
|
77
78
|
`APP_UNREACHABLE`), and `run.results[]`, one per test and target, with
|
|
@@ -21,14 +21,15 @@ pnpm dlx @e2edev/e2e@beta init # pnpm
|
|
|
21
21
|
When `@e2edev/e2e` is already installed, run `npx --no-install e2e init`
|
|
22
22
|
instead, so the installed version scaffolds.
|
|
23
23
|
|
|
24
|
-
The wizard asks for the engine (Playwright by default;
|
|
25
|
-
are the alternatives),
|
|
26
|
-
|
|
24
|
+
The wizard asks for the engine (Web with Playwright by default; Mobile with
|
|
25
|
+
agent-device and None are the alternatives), which model gateway agent steps
|
|
26
|
+
use (adds AI SDK v7 and the provider package), which agent directories receive this skill
|
|
27
27
|
(`.agents/skills/` and `.claude/skills/`), a confirmation of the files it
|
|
28
28
|
will write, and whether to install. `--yes` skips every prompt (use it from
|
|
29
|
-
scripts and from a shell without a TTY): Playwright,
|
|
30
|
-
skill in both directories. The closing line prints the run
|
|
31
|
-
|
|
29
|
+
scripts and from a shell without a TTY): Playwright, the Vercel AI Gateway,
|
|
30
|
+
no installation, skill in both directories. The closing line prints the run
|
|
31
|
+
command through the project's package manager,
|
|
32
|
+
`APP_URL=http://localhost:3000 npm run test:e2e` for Playwright under npm, and
|
|
32
33
|
suggests a `tsconfig.json` when the project has none.
|
|
33
34
|
|
|
34
35
|
Init writes `package.json` (a private ESM package when missing; otherwise
|