@e2edev/e2e 0.6.1 → 0.8.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 -11
- package/dist/agent/act-validation.d.ts +9 -3
- package/dist/agent/act-validation.d.ts.map +1 -1
- package/dist/agent/act-validation.js +23 -4
- package/dist/agent/act-validation.js.map +1 -1
- package/dist/agent/act.d.ts +2 -2
- package/dist/agent/act.d.ts.map +1 -1
- package/dist/agent/act.js +231 -41
- package/dist/agent/act.js.map +1 -1
- package/dist/agent/actions.d.ts +14 -14
- package/dist/agent/actions.d.ts.map +1 -1
- package/dist/agent/actions.js +12 -2
- package/dist/agent/actions.js.map +1 -1
- package/dist/agent/default-agent.d.ts +1 -1
- package/dist/agent/default-agent.d.ts.map +1 -1
- package/dist/agent/default-agent.js +19 -84
- package/dist/agent/default-agent.js.map +1 -1
- package/dist/agent/executor.d.ts +14 -0
- package/dist/agent/executor.d.ts.map +1 -1
- package/dist/agent/executor.js.map +1 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +14 -6
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/invocation.d.ts +1 -8
- package/dist/agent/invocation.d.ts.map +1 -1
- package/dist/agent/invocation.js +7 -51
- package/dist/agent/invocation.js.map +1 -1
- package/dist/agent/ledger.d.ts.map +1 -1
- package/dist/agent/ledger.js +10 -1
- package/dist/agent/ledger.js.map +1 -1
- package/dist/agent/loop-guards.d.ts +21 -0
- package/dist/agent/loop-guards.d.ts.map +1 -1
- package/dist/agent/loop-guards.js +48 -0
- package/dist/agent/loop-guards.js.map +1 -1
- package/dist/agent/model/sdk.d.ts +18 -0
- package/dist/agent/model/sdk.d.ts.map +1 -1
- package/dist/agent/model/sdk.js +10 -4
- package/dist/agent/model/sdk.js.map +1 -1
- package/dist/agent/observation-budget.d.ts +27 -0
- package/dist/agent/observation-budget.d.ts.map +1 -0
- package/dist/agent/observation-budget.js +43 -0
- package/dist/agent/observation-budget.js.map +1 -0
- package/dist/agent/observation.d.ts +40 -7
- package/dist/agent/observation.d.ts.map +1 -1
- package/dist/agent/observation.js +56 -11
- package/dist/agent/observation.js.map +1 -1
- package/dist/agent/phases.d.ts +1 -1
- package/dist/agent/phases.d.ts.map +1 -1
- package/dist/agent/phases.js +11 -13
- package/dist/agent/phases.js.map +1 -1
- package/dist/agent/primitives.d.ts +14 -2
- package/dist/agent/primitives.d.ts.map +1 -1
- package/dist/agent/primitives.js +98 -54
- package/dist/agent/primitives.js.map +1 -1
- package/dist/agent/screen-update.d.ts +47 -0
- package/dist/agent/screen-update.d.ts.map +1 -0
- package/dist/agent/screen-update.js +222 -0
- package/dist/agent/screen-update.js.map +1 -0
- package/dist/agent/step-cache.d.ts +46 -18
- package/dist/agent/step-cache.d.ts.map +1 -1
- package/dist/agent/step-cache.js +100 -60
- package/dist/agent/step-cache.js.map +1 -1
- package/dist/agent/tool-loop.d.ts.map +1 -1
- package/dist/agent/tool-loop.js +28 -4
- package/dist/agent/tool-loop.js.map +1 -1
- package/dist/cache/anchors.d.ts.map +1 -1
- package/dist/cache/anchors.js +21 -1
- package/dist/cache/anchors.js.map +1 -1
- package/dist/cache/decide.d.ts +13 -3
- package/dist/cache/decide.d.ts.map +1 -1
- package/dist/cache/decide.js +35 -0
- package/dist/cache/decide.js.map +1 -1
- package/dist/cache/relocate.d.ts +11 -1
- package/dist/cache/relocate.d.ts.map +1 -1
- package/dist/cache/relocate.js +48 -17
- package/dist/cache/relocate.js.map +1 -1
- package/dist/cache/store.d.ts.map +1 -1
- package/dist/cache/store.js +3 -14
- package/dist/cache/store.js.map +1 -1
- package/dist/cache/trace.d.ts +12 -0
- package/dist/cache/trace.d.ts.map +1 -1
- package/dist/cache/trace.js +21 -0
- package/dist/cache/trace.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 +60 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/engines.d.ts +2 -3
- package/dist/cli/init/engines.d.ts.map +1 -1
- package/dist/cli/init/engines.js +3 -4
- package/dist/cli/init/engines.js.map +1 -1
- package/dist/cli/init/scaffold.d.ts.map +1 -1
- package/dist/cli/init/scaffold.js +2 -0
- package/dist/cli/init/scaffold.js.map +1 -1
- package/dist/cli/signals.d.ts +3 -3
- package/dist/cli/signals.js +3 -3
- package/dist/cli/telemetry.d.ts +12 -0
- package/dist/cli/telemetry.d.ts.map +1 -0
- package/dist/cli/telemetry.js +40 -0
- package/dist/cli/telemetry.js.map +1 -0
- package/dist/collect/select.d.ts +2 -0
- package/dist/collect/select.d.ts.map +1 -1
- package/dist/collect/select.js +15 -11
- package/dist/collect/select.js.map +1 -1
- package/dist/config/agent.d.ts +6 -2
- package/dist/config/agent.d.ts.map +1 -1
- package/dist/config/agent.js +30 -3
- package/dist/config/agent.js.map +1 -1
- package/dist/config/diagnose.d.ts.map +1 -1
- package/dist/config/diagnose.js +1 -0
- package/dist/config/diagnose.js.map +1 -1
- package/dist/config/load.d.ts +2 -2
- package/dist/config/load.js +2 -2
- package/dist/config/resolve.d.ts +16 -4
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +107 -44
- package/dist/config/resolve.js.map +1 -1
- package/dist/engine/contract.d.ts +6 -1
- package/dist/engine/contract.d.ts.map +1 -1
- package/dist/engine/contract.js.map +1 -1
- package/dist/engine/index.d.ts +61 -6
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +25 -5
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/session.d.ts.map +1 -1
- package/dist/engine/session.js +6 -0
- package/dist/engine/session.js.map +1 -1
- package/dist/engine/surface.d.ts +6 -2
- package/dist/engine/surface.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/ai-trace.d.ts +1 -5
- package/dist/internal/ai-trace.d.ts.map +1 -1
- package/dist/internal/ai-trace.js +82 -11
- package/dist/internal/ai-trace.js.map +1 -1
- package/dist/internal/atomic-write.d.ts +17 -0
- package/dist/internal/atomic-write.d.ts.map +1 -0
- package/dist/internal/atomic-write.js +44 -0
- package/dist/internal/atomic-write.js.map +1 -0
- package/dist/internal/env.d.ts +6 -0
- package/dist/internal/env.d.ts.map +1 -0
- package/dist/internal/env.js +12 -0
- package/dist/internal/env.js.map +1 -0
- package/dist/internal/options.d.ts +9 -0
- package/dist/internal/options.d.ts.map +1 -0
- package/dist/internal/options.js +27 -0
- package/dist/internal/options.js.map +1 -0
- package/dist/locator/expression.js +1 -1
- package/dist/locator/expression.js.map +1 -1
- package/dist/locator/screen.d.ts.map +1 -1
- package/dist/locator/screen.js +4 -2
- package/dist/locator/screen.js.map +1 -1
- package/dist/report/build.d.ts +2 -1
- package/dist/report/build.d.ts.map +1 -1
- package/dist/report/build.js +11 -4
- package/dist/report/build.js.map +1 -1
- package/dist/report/list-model.d.ts +14 -5
- package/dist/report/list-model.d.ts.map +1 -1
- package/dist/report/list.d.ts +59 -5
- package/dist/report/list.d.ts.map +1 -1
- package/dist/report/list.js +171 -31
- package/dist/report/list.js.map +1 -1
- package/dist/report/running-tree.d.ts +7 -6
- package/dist/report/running-tree.d.ts.map +1 -1
- package/dist/report/running-tree.js +13 -8
- package/dist/report/running-tree.js.map +1 -1
- package/dist/report/write.d.ts +1 -1
- package/dist/report/write.d.ts.map +1 -1
- package/dist/report/write.js +3 -6
- package/dist/report/write.js.map +1 -1
- package/dist/run/artifacts.d.ts.map +1 -1
- package/dist/run/artifacts.js +20 -2
- package/dist/run/artifacts.js.map +1 -1
- package/dist/run/events.d.ts +73 -15
- package/dist/run/events.d.ts.map +1 -1
- package/dist/run/events.js +7 -7
- package/dist/run/events.js.map +1 -1
- package/dist/run/execute.d.ts +31 -5
- package/dist/run/execute.d.ts.map +1 -1
- package/dist/run/execute.js +73 -25
- package/dist/run/execute.js.map +1 -1
- package/dist/run/fixtures.d.ts +9 -1
- package/dist/run/fixtures.d.ts.map +1 -1
- package/dist/run/fixtures.js +5 -4
- package/dist/run/fixtures.js.map +1 -1
- package/dist/run/in-process.d.ts +1 -1
- package/dist/run/in-process.d.ts.map +1 -1
- package/dist/run/in-process.js +6 -3
- package/dist/run/in-process.js.map +1 -1
- package/dist/run/managed-process.d.ts +8 -2
- package/dist/run/managed-process.d.ts.map +1 -1
- package/dist/run/managed-process.js +12 -0
- package/dist/run/managed-process.js.map +1 -1
- package/dist/run/records.d.ts +15 -1
- package/dist/run/records.d.ts.map +1 -1
- package/dist/run/runner.d.ts +16 -7
- package/dist/run/runner.d.ts.map +1 -1
- package/dist/run/runner.js +182 -98
- package/dist/run/runner.js.map +1 -1
- package/dist/run/scheduler.d.ts +6 -6
- package/dist/run/scheduler.d.ts.map +1 -1
- package/dist/run/scheduler.js +54 -23
- package/dist/run/scheduler.js.map +1 -1
- package/dist/run/serial.d.ts +2 -4
- package/dist/run/serial.d.ts.map +1 -1
- package/dist/run/serial.js +4 -2
- package/dist/run/serial.js.map +1 -1
- package/dist/run/sessions.d.ts.map +1 -1
- package/dist/run/sessions.js +3 -4
- package/dist/run/sessions.js.map +1 -1
- package/dist/run/steps.d.ts +28 -1
- package/dist/run/steps.d.ts.map +1 -1
- package/dist/run/steps.js +14 -0
- package/dist/run/steps.js.map +1 -1
- package/dist/run/unit-runner.d.ts +7 -2
- package/dist/run/unit-runner.d.ts.map +1 -1
- package/dist/run/units.d.ts +8 -0
- package/dist/run/units.d.ts.map +1 -1
- package/dist/run/units.js +11 -0
- package/dist/run/units.js.map +1 -1
- package/dist/run/worker/entry.js +1 -0
- package/dist/run/worker/entry.js.map +1 -1
- package/dist/run/worker/handle.d.ts +1 -1
- package/dist/run/worker/handle.d.ts.map +1 -1
- package/dist/run/worker/handle.js +1 -1
- package/dist/run/worker/handle.js.map +1 -1
- package/dist/run/worker/protocol.d.ts +12 -1
- 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 +2 -0
- package/dist/run/worker/session.d.ts.map +1 -1
- package/dist/run/worker/session.js +5 -0
- package/dist/run/worker/session.js.map +1 -1
- package/dist/run/worker-models.d.ts +27 -0
- package/dist/run/worker-models.d.ts.map +1 -0
- package/dist/run/worker-models.js +49 -0
- package/dist/run/worker-models.js.map +1 -0
- package/dist/telemetry/environment.d.ts +33 -0
- package/dist/telemetry/environment.d.ts.map +1 -0
- package/dist/telemetry/environment.js +96 -0
- package/dist/telemetry/environment.js.map +1 -0
- package/dist/telemetry/events.d.ts +25 -0
- package/dist/telemetry/events.d.ts.map +1 -0
- package/dist/telemetry/events.js +107 -0
- package/dist/telemetry/events.js.map +1 -0
- package/dist/telemetry/posthog.d.ts +31 -0
- package/dist/telemetry/posthog.d.ts.map +1 -0
- package/dist/telemetry/posthog.js +29 -0
- package/dist/telemetry/posthog.js.map +1 -0
- package/dist/telemetry/project.d.ts +18 -0
- package/dist/telemetry/project.d.ts.map +1 -0
- package/dist/telemetry/project.js +55 -0
- package/dist/telemetry/project.js.map +1 -0
- package/dist/telemetry/store.d.ts +53 -0
- package/dist/telemetry/store.d.ts.map +1 -0
- package/dist/telemetry/store.js +153 -0
- package/dist/telemetry/store.js.map +1 -0
- package/dist/telemetry/telemetry.d.ts +89 -0
- package/dist/telemetry/telemetry.d.ts.map +1 -0
- package/dist/telemetry/telemetry.js +187 -0
- package/dist/telemetry/telemetry.js.map +1 -0
- package/dist/types.d.ts +103 -38
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -6
- package/skills/e2e/SKILL.md +0 -2
- package/skills/e2e/references/agent.md +33 -15
- package/skills/e2e/references/debugging.md +4 -2
- package/skills/e2e/references/running.md +7 -5
- package/skills/e2e/references/setup.md +16 -10
- package/skills/e2e/references/writing-tests.md +6 -5
- package/dist/internal/trace.d.ts +0 -18
- package/dist/internal/trace.d.ts.map +0 -1
- package/dist/internal/trace.js +0 -46
- package/dist/internal/trace.js.map +0 -1
- package/dist/run/public.d.ts +0 -19
- package/dist/run/public.d.ts.map +0 -1
- package/dist/run/public.js +0 -11
- package/dist/run/public.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@e2edev/e2e",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "SDK, runner, and CLI for agentic end-to-end testing",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"e2e",
|
|
@@ -41,10 +41,6 @@
|
|
|
41
41
|
"./engine": {
|
|
42
42
|
"types": "./dist/engine/index.d.ts",
|
|
43
43
|
"default": "./dist/engine/index.js"
|
|
44
|
-
},
|
|
45
|
-
"./run": {
|
|
46
|
-
"types": "./dist/run/public.d.ts",
|
|
47
|
-
"default": "./dist/run/public.js"
|
|
48
44
|
}
|
|
49
45
|
},
|
|
50
46
|
"bin": {
|
|
@@ -77,7 +73,7 @@
|
|
|
77
73
|
"ajv-formats": "3.0.1",
|
|
78
74
|
"typescript": "7.0.2",
|
|
79
75
|
"vitest": "5.0.0",
|
|
80
|
-
"@e2edev/playwright": "0.
|
|
76
|
+
"@e2edev/playwright": "0.7.0"
|
|
81
77
|
},
|
|
82
78
|
"engines": {
|
|
83
79
|
"node": ">=22.12.0"
|
package/skills/e2e/SKILL.md
CHANGED
|
@@ -38,8 +38,12 @@ E2E_MODEL=anthropic/claude-sonnet-4.5 E2E_MODEL_API_KEY=... npx --no-install e2e
|
|
|
38
38
|
- `context` in the config and `agentContext` on a test or group add trusted
|
|
39
39
|
project vocabulary to every prompt.
|
|
40
40
|
- `visionModel` (or `E2E_VISION_MODEL`) serves the calls that send pixels.
|
|
41
|
-
-
|
|
42
|
-
|
|
41
|
+
- The model passed to `createAgent({ model })` is the one model for every
|
|
42
|
+
`agent.*` call, `act` and the judgments alike, and outranks `E2E_MODEL`.
|
|
43
|
+
An `agent.model` naming a different model is `INVALID_CONFIG`.
|
|
44
|
+
- Missing model or key: checked once per run when the first test acquires
|
|
45
|
+
the `agent` fixture. One run-level `MODEL_UNAVAILABLE` (exit 2) stops the
|
|
46
|
+
run; the remaining tests are skipped, not failed one by one.
|
|
43
47
|
|
|
44
48
|
## act: one goal
|
|
45
49
|
|
|
@@ -47,17 +51,20 @@ E2E_MODEL=anthropic/claude-sonnet-4.5 E2E_MODEL_API_KEY=... npx --no-install e2e
|
|
|
47
51
|
import { credentials } from '@e2edev/e2e';
|
|
48
52
|
|
|
49
53
|
await agent.act('add a todo named "Buy milk" and mark it done');
|
|
50
|
-
await agent.act('invite {email} as an editor', { email: 'ada@example.test' });
|
|
54
|
+
await agent.act('invite {email} as an editor', { params: { email: 'ada@example.test' } });
|
|
51
55
|
|
|
52
56
|
const member = credentials.user('member');
|
|
53
57
|
await agent.act('sign in with the given credentials', {
|
|
54
|
-
|
|
55
|
-
|
|
58
|
+
params: {
|
|
59
|
+
username: member.username,
|
|
60
|
+
password: member.password, // a Secret: the model sees its name, the runner fills the field
|
|
61
|
+
},
|
|
56
62
|
});
|
|
57
63
|
```
|
|
58
64
|
|
|
59
|
-
`act(instruction,
|
|
60
|
-
|
|
65
|
+
`act(instruction, options?)` plans and performs a multi-action flow and ends
|
|
66
|
+
in a verdict. Passed resolves with what the step did: `summary`, `modelCalls`,
|
|
67
|
+
`actions`, and `cache` (how the trace cache took part). Failed or blocked
|
|
61
68
|
throws an `AgentError` whose `code` says why: `ACTION_FAILED` for a plain
|
|
62
69
|
failure, `STEP_BUDGET_EXHAUSTED` or `STEP_TIMEOUT` when the budget or the
|
|
63
70
|
clock ran out, and a blocked code (`AUTH_CREDENTIAL_UNAVAILABLE`,
|
|
@@ -65,10 +72,11 @@ clock ran out, and a blocked code (`AUTH_CREDENTIAL_UNAVAILABLE`,
|
|
|
65
72
|
`AUTOMATION_UNSUPPORTED`) when something outside the product prevented a
|
|
66
73
|
verdict.
|
|
67
74
|
|
|
68
|
-
Options: `
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
75
|
+
Options: `params` (the values the instruction refers to; a `Secret` is filled
|
|
76
|
+
by the runner), `timeout` (default the test timeout), `maxSteps` (default 25
|
|
77
|
+
actions), `maxModelCalls` (default 25). Per-call budgets can only lower the
|
|
78
|
+
configured limits. `act` takes no `schema` and no `vision`: structured output
|
|
79
|
+
is `extract({ schema })`, and `vision` belongs to the judgments.
|
|
72
80
|
|
|
73
81
|
## assert, waitFor, extract: one question
|
|
74
82
|
|
|
@@ -78,7 +86,7 @@ import { z } from 'zod';
|
|
|
78
86
|
await agent.assert('the dashboard shows a trial badge'); // one look, one judgment
|
|
79
87
|
|
|
80
88
|
await agent.waitFor('the export finished and a download link appeared', { // polls
|
|
81
|
-
|
|
89
|
+
interval: 500,
|
|
82
90
|
timeout: 120_000,
|
|
83
91
|
});
|
|
84
92
|
|
|
@@ -91,7 +99,7 @@ expect(data.titles).toContain('Buy milk');
|
|
|
91
99
|
- `assert` does not poll. A false judgment is `ASSERTION_FAILED` with the
|
|
92
100
|
model's explanation and a screenshot in the report. Malformed output gets
|
|
93
101
|
one repair round, then `MODEL_OUTPUT_INVALID`.
|
|
94
|
-
- `waitFor` observes every `
|
|
102
|
+
- `waitFor` observes every `interval` (default 3 s) and spends a judgment
|
|
95
103
|
only when the screen changed; `STEP_TIMEOUT` after `timeout` (default
|
|
96
104
|
30 s).
|
|
97
105
|
- `extract` accepts any Standard Schema validator (zod works). Invalid output
|
|
@@ -132,7 +140,11 @@ the end state may not), and it is what lets the trace cache record the step.
|
|
|
132
140
|
## What the model sees
|
|
133
141
|
|
|
134
142
|
A redacted snapshot of the screen (roles, names, text, states), a summary of
|
|
135
|
-
prior steps, and your context.
|
|
143
|
+
prior steps, and your context. The first screen of a step arrives whole;
|
|
144
|
+
every action result after it reports what changed, keyed by node ids that
|
|
145
|
+
stay stable while an element exists, or the whole screen again when most of
|
|
146
|
+
it changed, and is read after the action's effect landed. Never raw HTML,
|
|
147
|
+
cookies, headers, environment
|
|
136
148
|
values, or a `Secret`'s value; password fields arrive masked. Pixels only
|
|
137
149
|
with `vision`, and only while no secret has been filled. Nothing the model
|
|
138
150
|
returns runs as code or selectors: the runner validates and authorizes every
|
|
@@ -169,6 +181,8 @@ state is not on screen after the replay.
|
|
|
169
181
|
- An entry is written only after a later verification step passes
|
|
170
182
|
(`expect`, `locator.waitFor`, `agent.assert`, `agent.waitFor`). An `act`
|
|
171
183
|
nothing checks is never replayed.
|
|
184
|
+
- A step that records no actions creates no entry and skips the cache's
|
|
185
|
+
end-state observation.
|
|
172
186
|
- `e2e init` gitignores `.e2e/cache/`; committing entries is opt-in. Remove
|
|
173
187
|
that line to share replays with CI and teammates (CI stays `read-only`
|
|
174
188
|
unless `cache: 'read-write'` is set explicitly).
|
|
@@ -188,6 +202,10 @@ Never read `.e2e/ai-trace.json` directly; it is megabytes of resent context.
|
|
|
188
202
|
Use `--no-cache` when the whole flow should be traced, since replayed steps
|
|
189
203
|
make no model calls.
|
|
190
204
|
|
|
205
|
+
The trace replaces inline bytes and base64 in SDK image and file message
|
|
206
|
+
parts with decoded byte counts. URLs and text remain; encoded strings in
|
|
207
|
+
arbitrary tool result JSON or other fields are preserved.
|
|
208
|
+
|
|
191
209
|
## Beyond the built-in agent
|
|
192
210
|
|
|
193
211
|
- `createAgent({ tools: { seedCart } })` adds AI SDK tools wrapped with
|
|
@@ -199,7 +217,7 @@ make no model calls.
|
|
|
199
217
|
can be the `agent`; the runner still owns observations, actions, budgets,
|
|
200
218
|
and the report.
|
|
201
219
|
|
|
202
|
-
Full reference: https://e2e
|
|
220
|
+
Full reference: https://e2e-docs.vercel.app/agents
|
|
203
221
|
|
|
204
222
|
## In CI
|
|
205
223
|
|
|
@@ -16,7 +16,8 @@ jq '.run.results[] | select(.status != "passed") | .attempts[-1]
|
|
|
16
16
|
|
|
17
17
|
3. Artifacts named there live under `.e2e/artifacts/`: screenshots, a
|
|
18
18
|
Playwright `trace.zip` per attempt (`npx playwright show-trace <file>`),
|
|
19
|
-
downloads,
|
|
19
|
+
downloads, with `--video` a `video/video.webm` per attempt, and with
|
|
20
|
+
`--debug` the transcript of every agent step.
|
|
20
21
|
|
|
21
22
|
## Error codes and what to do
|
|
22
23
|
|
|
@@ -35,7 +36,7 @@ jq '.run.results[] | select(.status != "passed") | .attempts[-1]
|
|
|
35
36
|
| `ASSERTION_FAILED` | The expectation is wrong, or the state settles later than 5 s; for `agent.assert`, the judgment was false (explanation in the report) | Compare with the actual text in the report or screenshot; `{ timeout }` on the matcher; rewrite the question |
|
|
36
37
|
| `ACTION_FAILED` | Element not actionable (covered, disabled, detached) or an operation timed out | Wait on the right condition with `expect` first; close overlays; check `actionTimeout` |
|
|
37
38
|
| `TEST_TIMEOUT` | The attempt exceeded `timeout` (120 s) | Split the test, or raise `timeout` for slow flows and agent steps |
|
|
38
|
-
| `MODEL_UNAVAILABLE` | No `
|
|
39
|
+
| `MODEL_UNAVAILABLE` | No model (`createAgent({ model })`, `agent.model`, or `E2E_MODEL`), no key, or an unknown provider. Reported once for the run under `run.errors`; the run stops | Export `E2E_MODEL=provider/model-id` and `E2E_MODEL_API_KEY`, or pass a model to `createAgent`; confirm the model id |
|
|
39
40
|
| `MODEL_PROVIDER_FAILED` | Network, 5xx, rate limit, or no credits after the transport retries | Check the key and the quota; retry; exit code 3 |
|
|
40
41
|
| `STEP_TIMEOUT`, `STEP_BUDGET_EXHAUSTED` | The goal was too big or ambiguous, or the provider slow | Split the goal, use on-screen wording, add `context`, raise `timeout` and `actionTimeout`, `--debug` to read the transcript |
|
|
41
42
|
| `POLICY_DENIED` | Navigation outside `allowedOrigins`; a `Secret` given to a sink that is not a password field; reading a secure field | Add the origin to `allowedOrigins`; fill secrets only into password inputs; assert the outcome instead of the value |
|
|
@@ -54,6 +55,7 @@ jq '.run.results[] | select(.status != "passed") | .attempts[-1]
|
|
|
54
55
|
| `--no-cache` | Rule out a stale `agent.act` replay |
|
|
55
56
|
| `--debug` | Read each agent step's duration, model calls, cost, and transcript |
|
|
56
57
|
| `--ai-trace`, then `npx unbox-ai runs .e2e/ai-trace.json` | See exactly what the model was shown and called |
|
|
58
|
+
| `--video` | Watch the failed attempt; `step.startedAt` minus the video artifact's `startedAt` is the step's offset into it |
|
|
57
59
|
| `command.log: '.e2e/logs/app.log'` | Read the app's own output when it never becomes ready or errors mid-test |
|
|
58
60
|
| `await app.screenshot('before-submit')` | Attach evidence at a chosen point |
|
|
59
61
|
| `CI=1 npx --no-install e2e run` | Reproduce CI-only behaviour: `ONLY_IN_CI`, read-only cache, `reuseExisting` ignored |
|
|
@@ -8,6 +8,7 @@ npx --no-install e2e list [files...] [options] # print what run would select, w
|
|
|
8
8
|
npx --no-install e2e init [--yes] # scaffold a project, refresh the agent skill
|
|
9
9
|
npx --no-install e2e guide [topic] # print this skill: setup, writing-tests, agent, running, debugging
|
|
10
10
|
npx --no-install e2e cache ls|clear|stats # read or empty the trace cache
|
|
11
|
+
npx --no-install e2e telemetry [disable|enable] # anonymous usage telemetry: status, or the switch
|
|
11
12
|
```
|
|
12
13
|
|
|
13
14
|
`run` flags:
|
|
@@ -16,7 +17,7 @@ npx --no-install e2e cache ls|clear|stats # read or empty the trace cache
|
|
|
16
17
|
| --- | --- |
|
|
17
18
|
| `[files...]` | Files, directories, or quoted globs relative to the project root. They narrow the config `tests` glob, never bypass it. |
|
|
18
19
|
| `--config <path>` | Explicit config file. Default: `e2e.config.ts` or `.mts` found upward from the working directory. |
|
|
19
|
-
| `--target <ids>` | Comma-separated target names. |
|
|
20
|
+
| `--target <ids>` | Comma-separated target names. Only selected targets start app commands and services; unknown names fail before startup. |
|
|
20
21
|
| `--tag <tag>` | Repeatable tag filter; `--tag-mode all` requires every tag. |
|
|
21
22
|
| `--headed` | Visible browser or simulator when the engine supports it. |
|
|
22
23
|
| `--workers <n>`, `--retries <n>` | Override the resolved values. |
|
|
@@ -26,6 +27,7 @@ npx --no-install e2e cache ls|clear|stats # read or empty the trace cache
|
|
|
26
27
|
| `--pass-with-no-tests` | Exit 0 when nothing matches instead of `NO_TESTS`. |
|
|
27
28
|
| `--debug` | Phase timings and an agent step table on stderr; step transcripts saved as artifacts. |
|
|
28
29
|
| `--ai-trace` | Record every model call to `.e2e/ai-trace.json`. |
|
|
30
|
+
| `--video` | Record every attempt (WebM on a browser engine, MP4 on a device engine) under its artifact directory; the failure recap names the file. Fails with `UNSUPPORTED_ARTIFACT` when the engine cannot record. |
|
|
29
31
|
|
|
30
32
|
```bash
|
|
31
33
|
npx --no-install e2e run tests/signup.e2e.ts
|
|
@@ -67,7 +69,7 @@ recorded flow is stale — `--no-cache` only skips the cache for one run.
|
|
|
67
69
|
|
|
68
70
|
- `list` (default): one line per file and target, a `Failed Tests` section
|
|
69
71
|
with each error, its code, the failing line and a code frame, then a
|
|
70
|
-
summary (`Test Files`, `Tests`, `AI`, `Duration`, `Report`)
|
|
72
|
+
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 …)`.
|
|
71
73
|
- `.e2e/report.json` is written on every run whatever the reporters:
|
|
72
74
|
`run.status`, `run.exitCode`, `run.errors[]` (run-level failures such as
|
|
73
75
|
`APP_UNREACHABLE`), and `run.results[]`, one per test and target, with
|
|
@@ -76,9 +78,9 @@ recorded flow is stale — `--no-cache` only skips the cache for one run.
|
|
|
76
78
|
- `junit`: `.e2e/junit.xml` beside the report, for CI test summaries.
|
|
77
79
|
Combine it with the terminal output: `--reporter list,junit`.
|
|
78
80
|
- `json`: the report document on stdout.
|
|
79
|
-
- Artifacts (screenshots, Playwright traces, `--
|
|
80
|
-
downloads) live under `.e2e/artifacts/`; every path is
|
|
81
|
-
report.
|
|
81
|
+
- Artifacts (screenshots, Playwright traces, `--video` recordings, `--debug`
|
|
82
|
+
transcripts, downloads) live under `.e2e/artifacts/`; every path is
|
|
83
|
+
recorded in the report.
|
|
82
84
|
|
|
83
85
|
## Exit codes
|
|
84
86
|
|
|
@@ -62,8 +62,6 @@ export default {
|
|
|
62
62
|
tests: 'tests/**/*.e2e.ts',
|
|
63
63
|
targets: [
|
|
64
64
|
{
|
|
65
|
-
name: 'web',
|
|
66
|
-
platform: 'web',
|
|
67
65
|
engine: playwright({
|
|
68
66
|
url: 'http://127.0.0.1:3000',
|
|
69
67
|
command: { executable: 'pnpm', args: ['dev'], log: '.e2e/logs/app.log' },
|
|
@@ -80,19 +78,19 @@ export default {
|
|
|
80
78
|
|
|
81
79
|
| Key | Default | Notes |
|
|
82
80
|
| --- | --- | --- |
|
|
83
|
-
| `targets` | required | Non-empty. Each target: `
|
|
81
|
+
| `targets` | required | Non-empty. Each target: `platform` (`web`, `ios`, `android`, or any label), `engine`, and an optional `name` (defaults to the platform; used by `--target` and in reports). |
|
|
84
82
|
| `tests` | `'tests/**/*.e2e.ts'` | A glob or an array of globs, `/` separators. |
|
|
85
83
|
| `timeout` | `120000` | Per test attempt, in ms. Also the default `agent.act` deadline. |
|
|
86
84
|
| `actionTimeout` | `30000` | Every locator action and engine operation, including each observation inside an agent step. Raise it for slow model providers. |
|
|
87
85
|
| `assertionTimeout` | `5000` | `expect` polling window. |
|
|
88
86
|
| `retries` | `0`, `1` in CI | 0 to 10. |
|
|
89
|
-
| `workers` | half the cores, `1` in CI | Test files run in parallel across workers
|
|
87
|
+
| `workers` | half the cores, `1` in CI | Test files run in parallel across workers, at most the `workers` the engine declares per target (a device target: one per device). |
|
|
90
88
|
| `reporters` | `['list']` | `list`, `json`, `junit`. `json` excludes `list`. |
|
|
91
89
|
| `cache` | `'read-write'`, `'read-only'` in CI | The trace cache for `agent.act`; `'off'` disables it. |
|
|
92
|
-
| `agent` | unset | `createAgent(...)`, an options block `{ model, context, visionModel, maxSteps, maxModelCalls, vision, providerOptions }`, or a custom `StepExecutor`. Omitted, the built-in agent runs with `E2E_MODEL`. |
|
|
90
|
+
| `agent` | unset | `createAgent(...)`, an options block `{ model, context, visionModel, maxSteps, maxModelCalls, vision, providerOptions }`, or a custom `StepExecutor`. Omitted, the built-in agent runs with `E2E_MODEL`. A model passed to `createAgent({ model })` is the one model for `act` and the judgments, over `E2E_MODEL`. |
|
|
93
91
|
| `credentials` | `{}` | Named `{ username, password, allowedOrigins? }` entries; `password` may be a function returning the value. |
|
|
94
92
|
| `screen.testIdAttribute` | `'data-testid'` | Attribute read by `getByTestId`. |
|
|
95
|
-
| `artifacts` | `['screenshot', 'trace']` | Kinds to keep, or `{ kinds, store }
|
|
93
|
+
| `artifacts` | `['screenshot', 'trace']` | Kinds to keep (`screenshot`, `trace`, and the opt-in `video`), or `{ kinds, store, video }`; `video: { retain: 'on-failure' }` keeps only the recordings of attempts that did not pass. |
|
|
96
94
|
| `projectId` | the package name | Report and cache identity. |
|
|
97
95
|
|
|
98
96
|
## The app under test
|
|
@@ -119,8 +117,8 @@ Two browsers are two targets sharing one app declaration:
|
|
|
119
117
|
const app = { url: 'http://127.0.0.1:3000' };
|
|
120
118
|
export default {
|
|
121
119
|
targets: [
|
|
122
|
-
{ name: 'chromium',
|
|
123
|
-
{ name: 'mobile-webkit',
|
|
120
|
+
{ name: 'chromium', engine: playwright(app) },
|
|
121
|
+
{ name: 'mobile-webkit', engine: playwright({ ...app, browser: 'webkit', viewport: { width: 390, height: 844 } }) },
|
|
124
122
|
],
|
|
125
123
|
} satisfies E2EConfig;
|
|
126
124
|
```
|
|
@@ -191,6 +189,7 @@ or read the address from the environment:
|
|
|
191
189
|
| `E2E_VISION_MODEL` | Model for calls with `vision`; falls back to the main model. |
|
|
192
190
|
| `E2E_USER_<NAME>_USERNAME`, `E2E_USER_<NAME>_PASSWORD` | Override `credentials.<name>`. `<NAME>` is the credential name uppercased, other characters as `_`. |
|
|
193
191
|
| `CI` | Turns on CI defaults: `retries: 1`, `workers: 1`, `test.only` rejected, cache read-only, `reuseExisting` ignored. |
|
|
192
|
+
| `E2E_TELEMETRY_DISABLED`, `DO_NOT_TRACK` | Turn anonymous usage telemetry off; `e2e telemetry disable` saves the same choice. `E2E_TELEMETRY_DEBUG=1` prints each event instead of sending it. |
|
|
194
193
|
|
|
195
194
|
## Mobile targets
|
|
196
195
|
|
|
@@ -208,7 +207,7 @@ import { agentDeviceTools } from '@e2edev/agent-device/tools';
|
|
|
208
207
|
const iphone = agentDevice({ platform: 'ios', app: 'com.example.app' });
|
|
209
208
|
|
|
210
209
|
export default {
|
|
211
|
-
targets: [{
|
|
210
|
+
targets: [{ engine: iphone }],
|
|
212
211
|
workers: 1,
|
|
213
212
|
agent: createAgent({ tools: agentDeviceTools(iphone) }),
|
|
214
213
|
} satisfies E2EConfig;
|
|
@@ -217,7 +216,14 @@ export default {
|
|
|
217
216
|
- `app` is a bundle id, package name, or display name opened fresh per
|
|
218
217
|
attempt. `appPath` installs a `.app` or `.apk` once per worker; without
|
|
219
218
|
`app`, the installed bundle is the one opened.
|
|
220
|
-
-
|
|
219
|
+
- The engine declares one worker per device, so a single `device` target
|
|
220
|
+
runs one worker whatever `workers` says. To run on several at once, pass a
|
|
221
|
+
pool, `device: ['iPhone 17', 'iPhone 17 Pro']`; each worker slot drives one
|
|
222
|
+
entry and the test files spread across them. Devices boot in `prepare`,
|
|
223
|
+
before the run's clock starts.
|
|
224
|
+
- Cancelled device commands keep running; the next attempt waits for them.
|
|
225
|
+
Raw screenshot files are removed when capture finishes, including after
|
|
226
|
+
cancellation.
|
|
221
227
|
- `screen`, `expect`, `app`, and `agent` work unchanged. Import `test` from
|
|
222
228
|
`@e2edev/agent-device` to type the `device` fixture (`setAppearance`,
|
|
223
229
|
`setNetwork`, `setPermission`, `installApp`, `locator('role=... id=...')`,
|
|
@@ -93,7 +93,6 @@ Fixtures are lazy; destructure them in the callback.
|
|
|
93
93
|
| `back()` | One history step back. |
|
|
94
94
|
| `restart()` | Recreates the context and keeps persisted state, including a restored session. |
|
|
95
95
|
| `clearState()` | Clears cookies and storage, then relaunches. Not inside a serial group. |
|
|
96
|
-
| `deepLink(url)` | Opens an allowed deep or universal link. |
|
|
97
96
|
| `screenshot(label?)` | Saves a redacted screenshot as an artifact and returns its path. |
|
|
98
97
|
|
|
99
98
|
## Locators
|
|
@@ -104,7 +103,7 @@ subtree.
|
|
|
104
103
|
|
|
105
104
|
| Query | Matches |
|
|
106
105
|
| --- | --- |
|
|
107
|
-
| `getByRole(role, { name?, exact?, checked?, disabled?, selected?, expanded?,
|
|
106
|
+
| `getByRole(role, { name?, exact?, checked?, disabled?, selected?, expanded?, visible? })` | Semantic role, optionally by accessible name and state. First choice. |
|
|
108
107
|
| `getByLabel(text, { exact?, visible? })` | Form controls by label. |
|
|
109
108
|
| `getByPlaceholder(text)` | Inputs by placeholder. |
|
|
110
109
|
| `getByText(text, { exact?, visible? })` | Visible text. |
|
|
@@ -118,7 +117,9 @@ Roles: `button`, `link`, `textbox`, `searchbox`, `combobox`, `listbox`,
|
|
|
118
117
|
`contentinfo`, `complementary`, `region`. The union is closed; anything else
|
|
119
118
|
is a type error.
|
|
120
119
|
|
|
121
|
-
Text matching is exact by default after whitespace normalization
|
|
120
|
+
Text matching is exact by default after whitespace normalization, and
|
|
121
|
+
`getByText` returns the innermost match: a container that echoes its child's
|
|
122
|
+
text (an iOS Text host view around its StaticText) does not count twice.
|
|
122
123
|
`exact: false` is a case-insensitive substring match; a `RegExp` matches as
|
|
123
124
|
written.
|
|
124
125
|
|
|
@@ -146,9 +147,9 @@ await screen.scrollUntilVisible(screen.getByRole('button', { name: 'Accept' }));
|
|
|
146
147
|
Each action resolves one node, waits for it to be actionable within
|
|
147
148
|
`config.actionTimeout` (30 s, or `{ timeout }`), and performs one operation.
|
|
148
149
|
|
|
149
|
-
`tap()` (alias `click()`), `doubleTap()`, `longPress({
|
|
150
|
+
`tap()` (alias `click()`), `doubleTap()`, `longPress({ duration? })`,
|
|
150
151
|
`fill(value | Secret)`, `clear()`, `press(key)`, `check()`, `uncheck()`,
|
|
151
|
-
`selectOption(label | { label } | { index })`, `focus()`, `hover()`,
|
|
152
|
+
`selectOption(label | { label } | { value } | { index })`, `focus()`, `hover()`,
|
|
152
153
|
`setInputFiles(paths)` (relative to the project root), `dragTo(locator)`,
|
|
153
154
|
`scrollIntoView()`, `swipe({ direction, momentum? })`.
|
|
154
155
|
|
package/dist/internal/trace.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Live agent tracing for iterating on agentic tests: `E2E_DEBUG=agent` streams
|
|
3
|
-
* every invocation phase, model selection, and locate-candidate outcome to
|
|
4
|
-
* stderr as it happens, from whichever process runs the attempt. This is a
|
|
5
|
-
* debugging aid, not telemetry: the report stays the canonical record.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Writes one bounded, sanitized trace line when agent tracing is on. Takes a
|
|
9
|
-
* thunk so call sites in polling loops pay nothing while tracing is off.
|
|
10
|
-
*/
|
|
11
|
-
export declare function agentTrace(message: () => string): void;
|
|
12
|
-
/**
|
|
13
|
-
* Dumps one full observation as the model will receive it. The text is
|
|
14
|
-
* already redacted and size-bounded by the observation pipeline, so the dump
|
|
15
|
-
* needs no further truncation to stay safe.
|
|
16
|
-
*/
|
|
17
|
-
export declare function observationTrace(header: () => string, text: string): void;
|
|
18
|
-
//# sourceMappingURL=trace.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/internal/trace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6BH;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,MAAM,GAAG,IAAI,CAGtD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAGzE"}
|
package/dist/internal/trace.js
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Live agent tracing for iterating on agentic tests: `E2E_DEBUG=agent` streams
|
|
3
|
-
* every invocation phase, model selection, and locate-candidate outcome to
|
|
4
|
-
* stderr as it happens, from whichever process runs the attempt. This is a
|
|
5
|
-
* debugging aid, not telemetry: the report stays the canonical record.
|
|
6
|
-
*/
|
|
7
|
-
import { sanitizeText, truncateUtf8 } from './errors.js';
|
|
8
|
-
/**
|
|
9
|
-
* Parsed on first use, not at import, so tests and embedders can set
|
|
10
|
-
* `E2E_DEBUG` after this module loads but before the first trace call.
|
|
11
|
-
*/
|
|
12
|
-
let cachedFlags;
|
|
13
|
-
function flags() {
|
|
14
|
-
cachedFlags ??= new Set((process.env['E2E_DEBUG'] ?? '')
|
|
15
|
-
.split(',')
|
|
16
|
-
.map((flag) => flag.trim())
|
|
17
|
-
.filter((flag) => flag !== ''));
|
|
18
|
-
return cachedFlags;
|
|
19
|
-
}
|
|
20
|
-
function agentTraceEnabled() {
|
|
21
|
-
return flags().has('agent') || flags().has('all');
|
|
22
|
-
}
|
|
23
|
-
/** `E2E_DEBUG=observations` additionally dumps every observation the model sees. */
|
|
24
|
-
function observationTraceEnabled() {
|
|
25
|
-
return flags().has('observations') || flags().has('all');
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Writes one bounded, sanitized trace line when agent tracing is on. Takes a
|
|
29
|
-
* thunk so call sites in polling loops pay nothing while tracing is off.
|
|
30
|
-
*/
|
|
31
|
-
export function agentTrace(message) {
|
|
32
|
-
if (!agentTraceEnabled())
|
|
33
|
-
return;
|
|
34
|
-
process.stderr.write(`[e2e agent] ${truncateUtf8(sanitizeText(message()), 2_000)}\n`);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Dumps one full observation as the model will receive it. The text is
|
|
38
|
-
* already redacted and size-bounded by the observation pipeline, so the dump
|
|
39
|
-
* needs no further truncation to stay safe.
|
|
40
|
-
*/
|
|
41
|
-
export function observationTrace(header, text) {
|
|
42
|
-
if (!observationTraceEnabled())
|
|
43
|
-
return;
|
|
44
|
-
process.stderr.write(`[e2e observation] ${header()}\n${text}\n[e2e observation] end\n`);
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=trace.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/internal/trace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEzD;;;GAGG;AACH,IAAI,WAA4C,CAAC;AAEjD,SAAS,KAAK;IACZ,WAAW,KAAK,IAAI,GAAG,CACrB,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;SAC7B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CACjC,CAAC;IACF,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,KAAK,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACpD,CAAC;AAED,oFAAoF;AACpF,SAAS,uBAAuB;IAC9B,OAAO,KAAK,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,OAAqB;IAC9C,IAAI,CAAC,iBAAiB,EAAE;QAAE,OAAO;IACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACxF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAoB,EAAE,IAAY;IACjE,IAAI,CAAC,uBAAuB,EAAE;QAAE,OAAO;IACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,MAAM,EAAE,KAAK,IAAI,2BAA2B,CAAC,CAAC;AAC1F,CAAC"}
|
package/dist/run/public.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Programmatic host surface (`@e2edev/e2e/run`): run the runner in-process and stream
|
|
3
|
-
* structured events, without shelling out to the CLI. This is how an
|
|
4
|
-
* embedding host — a hosted platform, a CI wrapper, an IDE — drives runs.
|
|
5
|
-
*
|
|
6
|
-
* The CLI is a thin consumer of exactly this surface; nothing here is
|
|
7
|
-
* CLI-only. The surface is host tooling, not part of sdk-0.1: it can grow in
|
|
8
|
-
* minors, and `report.json` (report-1) stays the canonical record of a run.
|
|
9
|
-
*/
|
|
10
|
-
export { run } from './runner.ts';
|
|
11
|
-
export type { RunOptions, RunOutcome } from './runner.ts';
|
|
12
|
-
export type { RunEvent, RunEventFact, RunEventHeader, RunEventOf, RunEventResult, RunEventSink, RunExitCode, } from './events.ts';
|
|
13
|
-
export type { ArtifactProducer, ArtifactRecord, AttemptRecord, ResultRecord, ResultStatus, RunError, SerialAttemptRecord, SerialGroupRecord, SerialMemberRecord, } from './records.ts';
|
|
14
|
-
export type { StepAgentDetails, StepCacheInfo, StepEvent, StepKind, StepMetrics, StepModelInfo, StepProgress, StepRecord, } from './steps.ts';
|
|
15
|
-
export type { Report1Document } from '../report/build.ts';
|
|
16
|
-
export type { ErrorCategory, ErrorPhase, SerializedError } from '../internal/errors.ts';
|
|
17
|
-
export type { TestIdentity } from '../collect/collect.ts';
|
|
18
|
-
export type { SkipInfo } from '../collect/select.ts';
|
|
19
|
-
//# sourceMappingURL=public.d.ts.map
|
package/dist/run/public.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/run/public.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC1D,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,UAAU,EACV,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,SAAS,EACT,QAAQ,EACR,WAAW,EACX,aAAa,EACb,YAAY,EACZ,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1D,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxF,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/run/public.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Programmatic host surface (`@e2edev/e2e/run`): run the runner in-process and stream
|
|
3
|
-
* structured events, without shelling out to the CLI. This is how an
|
|
4
|
-
* embedding host — a hosted platform, a CI wrapper, an IDE — drives runs.
|
|
5
|
-
*
|
|
6
|
-
* The CLI is a thin consumer of exactly this surface; nothing here is
|
|
7
|
-
* CLI-only. The surface is host tooling, not part of sdk-0.1: it can grow in
|
|
8
|
-
* minors, and `report.json` (report-1) stays the canonical record of a run.
|
|
9
|
-
*/
|
|
10
|
-
export { run } from './runner.js';
|
|
11
|
-
//# sourceMappingURL=public.js.map
|
package/dist/run/public.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/run/public.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC"}
|