@e2edev/e2e 0.11.0 → 0.13.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 +7 -7
- package/dist/agent/act.d.ts +43 -9
- package/dist/agent/act.d.ts.map +1 -1
- package/dist/agent/act.js +126 -734
- package/dist/agent/act.js.map +1 -1
- package/dist/agent/action-dispatcher.d.ts +98 -0
- package/dist/agent/action-dispatcher.d.ts.map +1 -0
- package/dist/agent/action-dispatcher.js +319 -0
- package/dist/agent/action-dispatcher.js.map +1 -0
- package/dist/agent/actions.d.ts +16 -1
- package/dist/agent/actions.d.ts.map +1 -1
- package/dist/agent/actions.js +5 -1
- package/dist/agent/actions.js.map +1 -1
- package/dist/agent/default-agent.d.ts +17 -8
- package/dist/agent/default-agent.d.ts.map +1 -1
- package/dist/agent/default-agent.js +65 -43
- package/dist/agent/default-agent.js.map +1 -1
- package/dist/agent/executor.d.ts +30 -2
- package/dist/agent/executor.d.ts.map +1 -1
- package/dist/agent/executor.js.map +1 -1
- package/dist/agent/index.js +1 -1
- package/dist/agent/index.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/invocation.d.ts +4 -9
- package/dist/agent/invocation.d.ts.map +1 -1
- package/dist/agent/invocation.js +1 -6
- package/dist/agent/invocation.js.map +1 -1
- package/dist/agent/model/sdk.d.ts +1 -1
- package/dist/agent/model/sdk.js +1 -1
- 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/observation-feed.d.ts +123 -0
- package/dist/agent/observation-feed.d.ts.map +1 -0
- package/dist/agent/observation-feed.js +281 -0
- package/dist/agent/observation-feed.js.map +1 -0
- package/dist/agent/observation.d.ts +14 -1
- package/dist/agent/observation.d.ts.map +1 -1
- package/dist/agent/observation.js +58 -2
- package/dist/agent/observation.js.map +1 -1
- package/dist/agent/operation-queue.d.ts +21 -0
- package/dist/agent/operation-queue.d.ts.map +1 -0
- package/dist/agent/operation-queue.js +27 -0
- package/dist/agent/operation-queue.js.map +1 -0
- package/dist/agent/pixels.d.ts +21 -0
- package/dist/agent/pixels.d.ts.map +1 -0
- package/dist/agent/pixels.js +85 -0
- package/dist/agent/pixels.js.map +1 -0
- package/dist/agent/point-tap.d.ts +52 -0
- package/dist/agent/point-tap.d.ts.map +1 -0
- package/dist/agent/point-tap.js +88 -0
- package/dist/agent/point-tap.js.map +1 -0
- package/dist/agent/primitives.d.ts +7 -1
- package/dist/agent/primitives.d.ts.map +1 -1
- package/dist/agent/primitives.js +96 -25
- package/dist/agent/primitives.js.map +1 -1
- package/dist/agent/replay.d.ts +8 -3
- package/dist/agent/replay.d.ts.map +1 -1
- package/dist/agent/replay.js +44 -15
- package/dist/agent/replay.js.map +1 -1
- package/dist/agent/screen-update.d.ts +50 -18
- package/dist/agent/screen-update.d.ts.map +1 -1
- package/dist/agent/screen-update.js +76 -94
- package/dist/agent/screen-update.js.map +1 -1
- package/dist/agent/step-accounting.d.ts +95 -0
- package/dist/agent/step-accounting.d.ts.map +1 -0
- package/dist/agent/step-accounting.js +201 -0
- package/dist/agent/step-accounting.js.map +1 -0
- package/dist/agent/step-cache.d.ts.map +1 -1
- package/dist/agent/step-cache.js +2 -2
- package/dist/agent/step-cache.js.map +1 -1
- 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 +109 -25
- package/dist/agent/tool-loop.js.map +1 -1
- package/dist/agent/transcript-compaction.d.ts +38 -0
- package/dist/agent/transcript-compaction.d.ts.map +1 -0
- package/dist/agent/transcript-compaction.js +165 -0
- package/dist/agent/transcript-compaction.js.map +1 -0
- package/dist/cache/recorder.d.ts.map +1 -1
- package/dist/cache/recorder.js +20 -0
- package/dist/cache/recorder.js.map +1 -1
- package/dist/cache/trace.d.ts +28 -1
- package/dist/cache/trace.d.ts.map +1 -1
- package/dist/cache/trace.js +44 -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 +71 -26
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/engine-versions.json +1 -1
- package/dist/cli/init/engines.d.ts +26 -16
- package/dist/cli/init/engines.d.ts.map +1 -1
- package/dist/cli/init/engines.js +33 -24
- package/dist/cli/init/engines.js.map +1 -1
- package/dist/cli/init/gateways.js +3 -3
- 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 +2 -2
- package/dist/cli/init/scaffold.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +65 -29
- 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/collect.d.ts +8 -3
- package/dist/collect/collect.d.ts.map +1 -1
- package/dist/collect/collect.js +29 -5
- package/dist/collect/collect.js.map +1 -1
- package/dist/collect/registry.d.ts +20 -5
- package/dist/collect/registry.d.ts.map +1 -1
- package/dist/collect/registry.js +162 -56
- 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 +60 -12
- package/dist/collect/select.js.map +1 -1
- package/dist/config/agent.d.ts +1 -7
- package/dist/config/agent.d.ts.map +1 -1
- package/dist/config/agent.js +5 -8
- package/dist/config/agent.js.map +1 -1
- package/dist/config/app.d.ts +24 -2
- package/dist/config/app.d.ts.map +1 -1
- package/dist/config/app.js +82 -15
- package/dist/config/app.js.map +1 -1
- package/dist/config/resolve.d.ts +23 -6
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +34 -14
- 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/engine/contract.d.ts +9 -2
- package/dist/engine/contract.d.ts.map +1 -1
- package/dist/engine/contract.js.map +1 -1
- package/dist/engine/index.d.ts +18 -4
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +8 -0
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/session.d.ts.map +1 -1
- package/dist/engine/session.js +3 -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/engine/surface.js.map +1 -1
- package/dist/expect/attempt.d.ts +15 -0
- package/dist/expect/attempt.d.ts.map +1 -0
- package/dist/expect/attempt.js +33 -0
- package/dist/expect/attempt.js.map +1 -0
- package/dist/expect/index.d.ts +7 -5
- package/dist/expect/index.d.ts.map +1 -1
- package/dist/expect/index.js +8 -1
- package/dist/expect/index.js.map +1 -1
- package/dist/expect/poll.d.ts +5 -0
- package/dist/expect/poll.d.ts.map +1 -0
- package/dist/expect/poll.js +118 -0
- package/dist/expect/poll.js.map +1 -0
- package/dist/expect/values.d.ts.map +1 -1
- package/dist/expect/values.js +6 -1
- package/dist/expect/values.js.map +1 -1
- package/dist/explore/body.d.ts.map +1 -1
- package/dist/explore/body.js +2 -0
- package/dist/explore/body.js.map +1 -1
- package/dist/explore/executor.js +16 -11
- package/dist/explore/executor.js.map +1 -1
- package/dist/explore/index.d.ts +3 -2
- package/dist/explore/index.d.ts.map +1 -1
- package/dist/explore/index.js +11 -9
- package/dist/explore/index.js.map +1 -1
- package/dist/explore/plan.d.ts.map +1 -1
- package/dist/explore/plan.js +16 -5
- package/dist/explore/plan.js.map +1 -1
- package/dist/explore/progress.d.ts +43 -0
- package/dist/explore/progress.d.ts.map +1 -0
- package/dist/explore/progress.js +9 -0
- package/dist/explore/progress.js.map +1 -0
- package/dist/explore/state.d.ts +13 -12
- package/dist/explore/state.d.ts.map +1 -1
- package/dist/explore/state.js +28 -11
- package/dist/explore/state.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/brands.d.ts +2 -0
- package/dist/internal/brands.d.ts.map +1 -1
- package/dist/internal/brands.js +2 -0
- package/dist/internal/brands.js.map +1 -1
- package/dist/internal/geometry.d.ts +13 -0
- package/dist/internal/geometry.d.ts.map +1 -0
- package/dist/internal/geometry.js +16 -0
- package/dist/internal/geometry.js.map +1 -0
- 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/internal/urls.d.ts +6 -0
- package/dist/internal/urls.d.ts.map +1 -1
- package/dist/internal/urls.js +28 -0
- package/dist/internal/urls.js.map +1 -1
- package/dist/mcp/catalog.d.ts +51 -0
- package/dist/mcp/catalog.d.ts.map +1 -0
- package/dist/mcp/catalog.js +141 -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 +319 -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-explore.d.ts +109 -0
- package/dist/report/list-explore.d.ts.map +1 -0
- package/dist/report/list-explore.js +388 -0
- package/dist/report/list-explore.js.map +1 -0
- package/dist/report/list.d.ts +31 -1
- package/dist/report/list.d.ts.map +1 -1
- package/dist/report/list.js +114 -16
- package/dist/report/list.js.map +1 -1
- package/dist/report/running-tree.d.ts +7 -7
- package/dist/report/running-tree.d.ts.map +1 -1
- package/dist/report/running-tree.js +12 -13
- package/dist/report/running-tree.js.map +1 -1
- package/dist/run/app-ports.d.ts +17 -0
- package/dist/run/app-ports.d.ts.map +1 -0
- package/dist/run/app-ports.js +74 -0
- package/dist/run/app-ports.js.map +1 -0
- package/dist/run/events.d.ts +21 -7
- 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 +42 -20
- package/dist/run/execute.js.map +1 -1
- package/dist/run/extended-fixtures.d.ts +33 -0
- package/dist/run/extended-fixtures.d.ts.map +1 -0
- package/dist/run/extended-fixtures.js +91 -0
- package/dist/run/extended-fixtures.js.map +1 -0
- package/dist/run/fixtures.d.ts +10 -4
- package/dist/run/fixtures.d.ts.map +1 -1
- package/dist/run/fixtures.js +40 -27
- 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/managed-process.d.ts +18 -0
- package/dist/run/managed-process.d.ts.map +1 -1
- package/dist/run/managed-process.js +101 -6
- package/dist/run/managed-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/realm.d.ts +5 -4
- package/dist/run/realm.d.ts.map +1 -1
- package/dist/run/realm.js +8 -7
- package/dist/run/realm.js.map +1 -1
- package/dist/run/records.d.ts +4 -0
- package/dist/run/records.d.ts.map +1 -1
- package/dist/run/runner.d.ts +14 -5
- package/dist/run/runner.d.ts.map +1 -1
- package/dist/run/runner.js +28 -71
- 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 +4 -3
- package/dist/run/worker/entry.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 +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 +77 -17
- package/dist/types.d.ts.map +1 -1
- package/package.json +11 -7
- package/skills/e2e/SKILL.md +9 -7
- package/skills/e2e/references/agent.md +27 -12
- package/skills/e2e/references/debugging.md +5 -5
- package/skills/e2e/references/explore.md +15 -9
- package/skills/e2e/references/mcp.md +88 -0
- package/skills/e2e/references/running.md +23 -18
- package/skills/e2e/references/setup.md +32 -18
- package/skills/e2e/references/writing-tests.md +12 -5
- package/dist/agent/model/router.d.ts +0 -36
- package/dist/agent/model/router.d.ts.map +0 -1
- package/dist/agent/model/router.js +0 -45
- package/dist/agent/model/router.js.map +0 -1
- package/dist/explore/reporter.d.ts +0 -11
- package/dist/explore/reporter.d.ts.map +0 -1
- package/dist/explore/reporter.js +0 -54
- package/dist/explore/reporter.js.map +0 -1
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A standalone attempt: one engine session on one target, with the full
|
|
3
|
+
* fixture graph, and no test body. This is what a dev-loop host (`e2e mcp`)
|
|
4
|
+
* opens so a coding agent can drive the live app through the same `agent`,
|
|
5
|
+
* `screen`, and `app` surfaces a test would, under the same launch budgets,
|
|
6
|
+
* origin policy, secret handling, and cleanup as a test attempt. The runner
|
|
7
|
+
* proper (`execute.ts`) keeps owning retries, sessions, and records; this
|
|
8
|
+
* module only borrows its session lifecycle.
|
|
9
|
+
*/
|
|
10
|
+
import path from 'node:path';
|
|
11
|
+
import { releaseCredentialRegistry, setCredentialRegistry } from '../credentials.js';
|
|
12
|
+
import { DebugTrace } from '../internal/debug.js';
|
|
13
|
+
import { classifyError, serializeError } from '../internal/errors.js';
|
|
14
|
+
import { uuidv7 } from '../internal/ids.js';
|
|
15
|
+
import { Deadline } from '../internal/time.js';
|
|
16
|
+
import { createAttemptArtifacts } from './artifacts.js';
|
|
17
|
+
import { AttemptBudget } from './budget.js';
|
|
18
|
+
import { TargetExecutor } from './execute.js';
|
|
19
|
+
import { createFixtures } from './fixtures.js';
|
|
20
|
+
import { prepareEngine, startDeclaredProcesses, validateEngine } from './provision.js';
|
|
21
|
+
import { SessionStore } from './sessions.js';
|
|
22
|
+
import { StepRecorder } from './steps.js';
|
|
23
|
+
import { WorkerModels } from './worker-models.js';
|
|
24
|
+
/**
|
|
25
|
+
* Opens one attempt on the target: grades and prepares the engine, starts the
|
|
26
|
+
* declared app processes, boots the engine, and starts the attempt. On any
|
|
27
|
+
* failure everything that did start is torn down before the error surfaces.
|
|
28
|
+
*/
|
|
29
|
+
export async function openStandaloneAttempt(options) {
|
|
30
|
+
const { config, target, signal } = options;
|
|
31
|
+
const debug = options.debug ?? new DebugTrace(false);
|
|
32
|
+
const notice = options.notice ?? (() => undefined);
|
|
33
|
+
const runId = uuidv7();
|
|
34
|
+
const attemptId = uuidv7();
|
|
35
|
+
validateEngine(target, config);
|
|
36
|
+
// The credential registry is process-wide, as in a run: `credentials.user()`
|
|
37
|
+
// resolves while the attempt is open.
|
|
38
|
+
setCredentialRegistry(config.credentials);
|
|
39
|
+
let processes;
|
|
40
|
+
try {
|
|
41
|
+
// One worker on one target: one slot to provision.
|
|
42
|
+
await prepareEngine(target, 1, { runId, env: options.env, signal }, (line) => notice(target.name, line));
|
|
43
|
+
const hooks = { ci: config.ci, notice: (message) => notice('app', message) };
|
|
44
|
+
processes = await startDeclaredProcesses([target], config.projectRoot, () => hooks, signal, debug);
|
|
45
|
+
}
|
|
46
|
+
catch (cause) {
|
|
47
|
+
releaseCredentialRegistry(config.credentials);
|
|
48
|
+
throw cause;
|
|
49
|
+
}
|
|
50
|
+
const sessionStore = SessionStore.create(runId, path.join(config.projectRoot, '.e2e', 'sessions'));
|
|
51
|
+
const executor = new TargetExecutor({
|
|
52
|
+
config,
|
|
53
|
+
target,
|
|
54
|
+
runId,
|
|
55
|
+
artifactsRoot: options.artifactsRoot,
|
|
56
|
+
sessionStore,
|
|
57
|
+
headed: options.headed,
|
|
58
|
+
workerSlot: 0,
|
|
59
|
+
isolated: false,
|
|
60
|
+
interruptSignal: signal,
|
|
61
|
+
debug,
|
|
62
|
+
...(options.onProgress === undefined ? {} : { events: { onProgress: (_testId, progress) => options.onProgress?.(progress) } }),
|
|
63
|
+
});
|
|
64
|
+
const steps = new StepRecorder(attemptId, {
|
|
65
|
+
maxEventsPerStep: config.limits.maxEventsPerStep,
|
|
66
|
+
...(options.onProgress === undefined ? {} : { onProgress: options.onProgress }),
|
|
67
|
+
});
|
|
68
|
+
const artifacts = createAttemptArtifacts({
|
|
69
|
+
artifactsRoot: options.artifactsRoot,
|
|
70
|
+
segments: [target.name, 'sessions', attemptId],
|
|
71
|
+
attemptId,
|
|
72
|
+
currentStepId: () => steps.currentStepId,
|
|
73
|
+
...(config.artifactStore === undefined ? {} : { store: config.artifactStore }),
|
|
74
|
+
identity: { runId, testId: `session:${target.name}`, attemptId },
|
|
75
|
+
});
|
|
76
|
+
const cleanupErrors = [];
|
|
77
|
+
const recordCleanupFailure = (cause) => {
|
|
78
|
+
cleanupErrors.push(serializeError(classifyError(cause), { phase: 'cleanup' }));
|
|
79
|
+
};
|
|
80
|
+
const teardownProcesses = async () => {
|
|
81
|
+
await processes.stop(recordCleanupFailure);
|
|
82
|
+
try {
|
|
83
|
+
sessionStore.cleanup();
|
|
84
|
+
}
|
|
85
|
+
catch (cause) {
|
|
86
|
+
recordCleanupFailure(cause);
|
|
87
|
+
}
|
|
88
|
+
releaseCredentialRegistry(config.credentials);
|
|
89
|
+
};
|
|
90
|
+
let session;
|
|
91
|
+
try {
|
|
92
|
+
session = await executor.launchSession(undefined, attemptId, artifacts.dir, signal);
|
|
93
|
+
}
|
|
94
|
+
catch (cause) {
|
|
95
|
+
await executor.dispose();
|
|
96
|
+
await teardownProcesses();
|
|
97
|
+
throw cause;
|
|
98
|
+
}
|
|
99
|
+
const attemptEnd = new AbortController();
|
|
100
|
+
const attempt = {
|
|
101
|
+
testId: `session:${target.name}`,
|
|
102
|
+
attemptId,
|
|
103
|
+
index: 0,
|
|
104
|
+
signal: attemptEnd.signal,
|
|
105
|
+
memory: new Map(),
|
|
106
|
+
};
|
|
107
|
+
const budget = new AttemptBudget(signal, new Deadline(options.timeoutMs));
|
|
108
|
+
const { fixtures, agentRuntime } = createFixtures({
|
|
109
|
+
config,
|
|
110
|
+
target,
|
|
111
|
+
session,
|
|
112
|
+
steps,
|
|
113
|
+
budget,
|
|
114
|
+
runId,
|
|
115
|
+
attemptId,
|
|
116
|
+
attempt,
|
|
117
|
+
artifacts: artifacts.sink,
|
|
118
|
+
priorSteps: () => steps.completed(),
|
|
119
|
+
agent: options.agent,
|
|
120
|
+
agentContext: undefined,
|
|
121
|
+
saveSession: undefined,
|
|
122
|
+
// A model preflight failure is a run abort in a test; here it is one more
|
|
123
|
+
// reason the attempt reports at close.
|
|
124
|
+
models: new WorkerModels((error) => cleanupErrors.push(serializeError(error))),
|
|
125
|
+
debug,
|
|
126
|
+
});
|
|
127
|
+
let closing;
|
|
128
|
+
return {
|
|
129
|
+
runId,
|
|
130
|
+
attemptId,
|
|
131
|
+
fixtures,
|
|
132
|
+
agentRuntime,
|
|
133
|
+
session,
|
|
134
|
+
steps,
|
|
135
|
+
budget,
|
|
136
|
+
artifactsDir: artifacts.dir,
|
|
137
|
+
close: () => {
|
|
138
|
+
closing ??= (async () => {
|
|
139
|
+
attemptEnd.abort();
|
|
140
|
+
const record = { status: 'passed', cleanup: 'complete' };
|
|
141
|
+
await executor.closeSession(session, attemptId, record, artifacts.sink, cleanupErrors);
|
|
142
|
+
await executor.dispose();
|
|
143
|
+
cleanupErrors.push(...executor.collectedRunErrors().map((runError) => runError.error));
|
|
144
|
+
await artifacts.settle();
|
|
145
|
+
await teardownProcesses();
|
|
146
|
+
return cleanupErrors;
|
|
147
|
+
})();
|
|
148
|
+
return closing;
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=standalone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standalone.js","sourceRoot":"","sources":["../../src/run/standalone.ts"],"names":[],"mappings":"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"}
|
package/dist/run/units.d.ts
CHANGED
|
@@ -4,10 +4,11 @@
|
|
|
4
4
|
* pair goes through `pairResult`, which narrows the pair's collected test to
|
|
5
5
|
* its serializable identity.
|
|
6
6
|
*/
|
|
7
|
-
import type { Collection
|
|
7
|
+
import type { Collection } from '../collect/collect.ts';
|
|
8
8
|
import type { Selection, SkipInfo, TestTargetPair } from '../collect/select.ts';
|
|
9
9
|
import type { ResolvedTarget } from '../config/resolve.ts';
|
|
10
10
|
import type { ResultRecord } from './records.ts';
|
|
11
|
+
import type { WirePair } from './worker/protocol.ts';
|
|
11
12
|
/**
|
|
12
13
|
* One schedulable unit: either a single setup pair or every runnable ordinary
|
|
13
14
|
* pair of one file for one target. Units execute on exactly one worker.
|
|
@@ -50,11 +51,13 @@ export declare const INTERRUPTED_BEFORE_START: SkipInfo;
|
|
|
50
51
|
* Builds a result for one pair, narrowing the collected test to its identity
|
|
51
52
|
* so no test function or realm state can reach a record or the wire.
|
|
52
53
|
*/
|
|
53
|
-
export declare function pairResult(pair: TestTargetPair, fields: Omit<ResultRecord, 'test' | 'target'>): ResultRecord;
|
|
54
|
+
export declare function pairResult(pair: TestTargetPair, fields: Omit<ResultRecord, 'test' | 'target' | 'agent'>): ResultRecord;
|
|
55
|
+
/** The identity of one pair among a unit's: a test runs once per agent it is pinned to. */
|
|
56
|
+
export declare function pairKey(testId: string, agent: string): string;
|
|
54
57
|
/** Result for a pair reported skipped or unselected without ever dispatching. */
|
|
55
58
|
export declare function nonRunResult(pair: TestTargetPair): ResultRecord;
|
|
56
59
|
/** Result for a runnable pair the run never started. */
|
|
57
60
|
export declare function unstartedResult(pair: TestTargetPair, skip: SkipInfo): ResultRecord;
|
|
58
61
|
/** Result for a test that vanished between planning and execution. */
|
|
59
|
-
export declare function disappearedResult(
|
|
62
|
+
export declare function disappearedResult(pair: WirePair, target: ResolvedTarget): ResultRecord;
|
|
60
63
|
//# sourceMappingURL=units.d.ts.map
|
package/dist/run/units.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../../src/run/units.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../../src/run/units.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;CAC3C;AAED,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,SAAS,QAAQ,EAAE,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IACxC,wEAAwE;IACxE,QAAQ,CAAC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IAC9C,kFAAkF;IAClF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,MAAM,GAClB,cAAc,EAAE,CA2ClB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAG7E;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,QAAQ,CAM9E;AAED,4EAA4E;AAC5E,eAAO,MAAM,wBAAwB,EAAE,QAGtC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,GACtD,YAAY,CAEd;AAED,2FAA2F;AAC3F,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,YAAY,CAU/D;AAED,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,GAAG,YAAY,CAOlF;AAED,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAG,YAAY,CAEtF"}
|
package/dist/run/units.js
CHANGED
|
Binary file
|
package/dist/run/units.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"units.js","sourceRoot":"","sources":["../../src/run/units.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"units.js","sourceRoot":"","sources":["../../src/run/units.ts"],"names":[],"mappings":"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"}
|
package/dist/run/worker/entry.js
CHANGED
|
@@ -62,6 +62,7 @@ async function bootstrap(message, debug, aiTrace) {
|
|
|
62
62
|
configPath: message.configPath,
|
|
63
63
|
env: process.env,
|
|
64
64
|
cli: message.cli,
|
|
65
|
+
ports: message.ports,
|
|
65
66
|
});
|
|
66
67
|
if (config.configDigest !== message.configDigest) {
|
|
67
68
|
throw new ConfigurationError('CONFIG_NOT_DETERMINISTIC', 'worker resolved a different config digest than the runner; config must be deterministic');
|
|
@@ -74,7 +75,7 @@ async function bootstrap(message, debug, aiTrace) {
|
|
|
74
75
|
let collectCounter = 0;
|
|
75
76
|
const resolvePairs = async (unit) => {
|
|
76
77
|
collectCounter += 1;
|
|
77
|
-
const registration = await collectModule(() => importModule(unit.absolutePath, `worker-collect-${collectCounter}`));
|
|
78
|
+
const registration = await collectModule(() => importModule(unit.absolutePath, `worker-collect-${collectCounter}`), unit.absolutePath);
|
|
78
79
|
const collected = collectFromRegistration(config.projectRoot, unit.absolutePath, registration);
|
|
79
80
|
const byId = new Map(collected.tests.map((test) => [test.id, test]));
|
|
80
81
|
const pairs = [];
|
|
@@ -82,10 +83,10 @@ async function bootstrap(message, debug, aiTrace) {
|
|
|
82
83
|
for (const wire of unit.pairs) {
|
|
83
84
|
const test = byId.get(wire.test.id);
|
|
84
85
|
if (test === undefined) {
|
|
85
|
-
missing.push(wire
|
|
86
|
+
missing.push(wire);
|
|
86
87
|
continue;
|
|
87
88
|
}
|
|
88
|
-
pairs.push({ test, target, options: wire.options, disposition: 'run', skip: undefined });
|
|
89
|
+
pairs.push({ test, target, agent: wire.agent, options: wire.options, disposition: 'run', skip: undefined });
|
|
89
90
|
}
|
|
90
91
|
return { pairs, missing, registration };
|
|
91
92
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../../../src/run/worker/entry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../../../src/run/worker/entry.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import type { TestIdentity } from '../../collect/collect.ts';
|
|
10
10
|
import type { ResolvedTestOptions } from '../../collect/select.ts';
|
|
11
|
-
import type { CliOverrides, ResolvedTarget } from '../../config/resolve.ts';
|
|
11
|
+
import type { CliOverrides, PortAssignments, ResolvedTarget } from '../../config/resolve.ts';
|
|
12
12
|
import type { AiTraceSnapshot } from '../../internal/ai-trace.ts';
|
|
13
13
|
import type { DebugSnapshot } from '../../internal/debug.ts';
|
|
14
14
|
import type { SerializedError } from '../../internal/errors.ts';
|
|
@@ -17,6 +17,8 @@ import type { StepProgress } from '../steps.ts';
|
|
|
17
17
|
/** One runnable pair on the wire; the worker resolves the test function. */
|
|
18
18
|
export interface WirePair {
|
|
19
19
|
readonly test: TestIdentity;
|
|
20
|
+
/** The configured agent this pair runs as; one test may appear once per agent. */
|
|
21
|
+
readonly agent: string;
|
|
20
22
|
readonly options: ResolvedTestOptions;
|
|
21
23
|
}
|
|
22
24
|
/**
|
|
@@ -41,6 +43,12 @@ export interface WorkerBootstrap {
|
|
|
41
43
|
* catch it.
|
|
42
44
|
*/
|
|
43
45
|
readonly cli: CliOverrides;
|
|
46
|
+
/**
|
|
47
|
+
* The free ports the runner assigned to app URLs declared with port 0, by
|
|
48
|
+
* target name. Chosen once in the runner and outside the digest, so a
|
|
49
|
+
* worker must be told them to resolve the same URLs.
|
|
50
|
+
*/
|
|
51
|
+
readonly ports: PortAssignments;
|
|
44
52
|
readonly targetName: string;
|
|
45
53
|
/** This worker's slot among the target's workers; see `EngineInitInfo.workerSlot`. */
|
|
46
54
|
readonly workerSlot: number;
|
|
@@ -89,6 +97,8 @@ export interface ReadyMessage {
|
|
|
89
97
|
/** One pair about to execute, as reporters see it. */
|
|
90
98
|
export interface PairStart {
|
|
91
99
|
readonly testId: string;
|
|
100
|
+
/** The configured agent the pair runs as; with the test id, the pair's identity. */
|
|
101
|
+
readonly agent: string;
|
|
92
102
|
/** Joined title path, so reporters need no side lookup by test ID. */
|
|
93
103
|
readonly title: string;
|
|
94
104
|
/** Project-root-relative test file. */
|
|
@@ -108,6 +118,7 @@ export interface PairStartMessage extends PairStart {
|
|
|
108
118
|
export interface ProgressMessage {
|
|
109
119
|
readonly type: 'progress';
|
|
110
120
|
readonly testId: string;
|
|
121
|
+
readonly agent: string;
|
|
111
122
|
readonly progress: StepProgress;
|
|
112
123
|
}
|
|
113
124
|
export interface ResultMessage {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/run/worker/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/run/worker/protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/run/worker/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/run/worker/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA+LH,0DAA0D;AAC1D,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAC5C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,YAAY,CAAC,IAAsB,EAAE,MAAsB;IACzE,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -4,18 +4,17 @@
|
|
|
4
4
|
* in-process) drive this class, so unit execution, interrupt handling, and
|
|
5
5
|
* run-error forwarding exist exactly once.
|
|
6
6
|
*/
|
|
7
|
-
import type { TestIdentity } from '../../collect/collect.ts';
|
|
8
7
|
import type { ModuleRegistration } from '../../collect/registry.ts';
|
|
9
8
|
import type { TestTargetPair } from '../../collect/select.ts';
|
|
10
9
|
import type { ResolvedConfig, ResolvedTarget } from '../../config/resolve.ts';
|
|
11
10
|
import { DebugTrace } from '../../internal/debug.ts';
|
|
12
11
|
import type { SessionStore } from '../sessions.ts';
|
|
13
|
-
import { type MainToWorker, type RunUnitMessage, type WorkerToMain } from './protocol.ts';
|
|
12
|
+
import { type MainToWorker, type RunUnitMessage, type WirePair, type WorkerToMain } from './protocol.ts';
|
|
14
13
|
/** Pairs resolved locally for one unit, plus identities that vanished. */
|
|
15
14
|
export interface ResolvedUnitPairs {
|
|
16
15
|
readonly pairs: readonly TestTargetPair[];
|
|
17
|
-
/** Planned
|
|
18
|
-
readonly missing: readonly
|
|
16
|
+
/** Planned pairs whose test is absent from this worker's view of the file. */
|
|
17
|
+
readonly missing: readonly WirePair[];
|
|
19
18
|
/**
|
|
20
19
|
* The module registration the resolver imported to resolve the pairs, when
|
|
21
20
|
* it imported one. Nothing has run in it, so the executor adopts it as the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/run/worker/session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/run/worker/session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAgB,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAEvH,0EAA0E;AAC1E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;IACtC;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,kBAAkB,CAAC;CAC5C;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEpF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yFAAyF;IACzF,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,gBAAgB,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;CAC7B;AAED,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,4EAA4E;IAC5E,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,mDAAmD;IACnD,QAAQ,IAAI,IAAI,CAAC;CAClB;AAED,qBAAa,YAAY;IAWrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAX5B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAyB;IAC7D,OAAO,CAAC,IAAI,CAA+B;IAC3C,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,iBAAiB,CAAK;IAC9B,wEAAwE;IACxE,OAAO,CAAC,KAAK,CAAoC;IACjD,4EAA4E;IAC5E,OAAO,CAAC,YAAY,CAA4B;IAEhD,YACmB,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,EACzD;IAEJ,8EAA8E;IAC9E,KAAK,IAAI,IAAI,CAqCZ;IAED,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAelC;IAED;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,OAAO;YAMD,OAAO;IAsCrB,wEAAwE;IACxE,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,QAAQ;YAKF,gBAAgB;CAY/B"}
|
|
@@ -45,11 +45,12 @@ export class TargetWorker {
|
|
|
45
45
|
onPairStart: (pair) => this.host.emit({
|
|
46
46
|
type: 'pair-start',
|
|
47
47
|
testId: pair.test.id,
|
|
48
|
+
agent: pair.agent,
|
|
48
49
|
title: pair.test.titlePath.join(' > '),
|
|
49
50
|
file: pair.test.file,
|
|
50
51
|
serialId: pair.test.serialId,
|
|
51
52
|
}),
|
|
52
|
-
onProgress: (
|
|
53
|
+
onProgress: (pair, progress) => this.host.emit({ type: 'progress', testId: pair.test.id, agent: pair.agent, progress }),
|
|
53
54
|
onRunAbort: (runError) => {
|
|
54
55
|
this.interruptController.abort();
|
|
55
56
|
this.host.emit({ type: 'run-abort', error: runError.error });
|
|
@@ -104,9 +105,9 @@ export class TargetWorker {
|
|
|
104
105
|
// failed results for every pair it never heard about. Reporting the unit
|
|
105
106
|
// done first would clear that bookkeeping and drop those tests silently.
|
|
106
107
|
const { pairs, missing, registration } = await deps.resolvePairs(message);
|
|
107
|
-
for (const
|
|
108
|
-
executor.recordDisappeared(`test ${test.id} disappeared before execution; registration must be deterministic`);
|
|
109
|
-
executor.emit(disappearedResult(
|
|
108
|
+
for (const wire of missing) {
|
|
109
|
+
executor.recordDisappeared(`test ${wire.test.id} disappeared before execution; registration must be deterministic`);
|
|
110
|
+
executor.emit(disappearedResult(wire, deps.target));
|
|
110
111
|
}
|
|
111
112
|
if (message.kind === 'setup') {
|
|
112
113
|
// The imported registration has run nothing yet, so only the first
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/run/worker/session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/run/worker/session.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -81,8 +81,6 @@ export type AgentParams = Readonly<Record<string, AgentParam>>;
|
|
|
81
81
|
*
|
|
82
82
|
* - `false` — the tree.
|
|
83
83
|
* - `true` — the tree and a screenshot, on every call.
|
|
84
|
-
* - `'fallback'` — the tree, escalating to add a screenshot once the tree turns
|
|
85
|
-
* out not to describe the target.
|
|
86
84
|
* - `'only'` — the screenshot, and not the tree.
|
|
87
85
|
*
|
|
88
86
|
* `'only'` exists because a tree sent alongside pixels is a cheaper path to an
|
|
@@ -92,16 +90,12 @@ export type AgentParams = Readonly<Record<string, AgentParam>>;
|
|
|
92
90
|
* what the screen presents, the tree is a distractor, so the mode that means it
|
|
93
91
|
* removes it. It also costs fewer input tokens than `true`, not more.
|
|
94
92
|
*
|
|
95
|
-
* A judgment always produces an answer from the tree, so `'fallback'` behaves
|
|
96
|
-
* like `false` for `assert`, `waitFor`, and `extract`; use `true` or `'only'`
|
|
97
|
-
* to have pixels judged.
|
|
98
|
-
*
|
|
99
93
|
* In every mode that sends pixels but also the tree, pixel evidence degrades
|
|
100
94
|
* away rather than failing the call when it cannot be proven redacted. `'only'`
|
|
101
95
|
* has nothing to degrade to, so it fails with `POLICY_DENIED` instead of
|
|
102
96
|
* answering the wrong question from the tree.
|
|
103
97
|
*/
|
|
104
|
-
export type VisionMode = boolean | '
|
|
98
|
+
export type VisionMode = boolean | 'only';
|
|
105
99
|
export interface VisionOption {
|
|
106
100
|
vision?: VisionMode;
|
|
107
101
|
}
|
|
@@ -315,6 +309,12 @@ export interface Locator extends Screen {
|
|
|
315
309
|
nth(index: number): Locator;
|
|
316
310
|
}
|
|
317
311
|
export interface App {
|
|
312
|
+
/**
|
|
313
|
+
* The resolved base URL of the target's app, with the port the run
|
|
314
|
+
* allocated when the engine declared port 0; undefined for a surface whose
|
|
315
|
+
* engine declares no `url`.
|
|
316
|
+
*/
|
|
317
|
+
readonly baseUrl: string | undefined;
|
|
318
318
|
/** Opens the app: the declared URL, a path relative to it, or an absolute URL within the allowed origins. */
|
|
319
319
|
open(path?: string): Promise<void>;
|
|
320
320
|
/** Recreates the execution context while preserving persisted state. */
|
|
@@ -354,22 +354,42 @@ export interface TestOptions {
|
|
|
354
354
|
agentContext?: string;
|
|
355
355
|
/**
|
|
356
356
|
* The configured agent (`agents.<name>`) this test or group runs with, in
|
|
357
|
-
* place of the run's
|
|
358
|
-
*
|
|
357
|
+
* place of the run's agents. A list runs the test once per agent named, as
|
|
358
|
+
* one result each. Innermost wins; a call's own `agent` option wins over
|
|
359
|
+
* it. `--agent` narrows a list to the names both name and never overrides
|
|
360
|
+
* a pin the flag does not name.
|
|
359
361
|
*/
|
|
360
|
-
agent?: string;
|
|
362
|
+
agent?: string | readonly string[];
|
|
361
363
|
}
|
|
362
364
|
export interface DescribeOptions extends Omit<TestOptions, 'only'> {
|
|
363
365
|
serial?: boolean;
|
|
364
366
|
}
|
|
365
|
-
export interface SetupOptions extends Omit<TestOptions, 'session' | 'only' | 'skip'> {
|
|
367
|
+
export interface SetupOptions extends Omit<TestOptions, 'session' | 'only' | 'skip' | 'agent'> {
|
|
366
368
|
/** Session names this setup test MUST save. */
|
|
367
369
|
sessions: readonly string[];
|
|
370
|
+
/** A setup test runs once per target, so it pins at most one agent. */
|
|
371
|
+
agent?: string;
|
|
368
372
|
}
|
|
369
373
|
export type TestFn<Fixtures = TestFixtures> = (fixtures: Fixtures) => void | Promise<void>;
|
|
370
374
|
export type SetupFn<Fixtures = TestFixtures> = (fixtures: Fixtures & SetupFixtures) => void | Promise<void>;
|
|
371
375
|
export type TestHookFn<Fixtures = TestFixtures> = (fixtures: Fixtures) => void | Promise<void>;
|
|
372
376
|
export type SuiteHookFn = (fixtures: SuiteFixtures) => void | Promise<void>;
|
|
377
|
+
/**
|
|
378
|
+
* Defines one fixture: everything before `await use(value)` is its setup,
|
|
379
|
+
* everything after is its teardown. The body, its hooks, and later fixtures
|
|
380
|
+
* run while `use` is pending; it resolves once they are done, whether or not
|
|
381
|
+
* the body failed.
|
|
382
|
+
*/
|
|
383
|
+
export type FixtureFn<Fixtures, Value> = (fixtures: Fixtures, use: (value: Value) => Promise<void>) => Promise<void>;
|
|
384
|
+
/**
|
|
385
|
+
* One definition per fixture `test.extend()` adds. A definition sees the
|
|
386
|
+
* fixtures of the `test` it extends, not its siblings: a fixture that needs
|
|
387
|
+
* another one goes in a chained `extend()`. A name the base already has is a
|
|
388
|
+
* type error (and a `COLLECTION_ERROR` at runtime).
|
|
389
|
+
*/
|
|
390
|
+
export type FixtureDefinitions<Base, Extra> = {
|
|
391
|
+
readonly [K in keyof Extra]: K extends keyof Base ? never : FixtureFn<Base, Extra[K]>;
|
|
392
|
+
};
|
|
373
393
|
export type SynchronousBody<Result> = Extract<Result, PromiseLike<unknown>> extends never ? () => Result : never;
|
|
374
394
|
export interface TestCase {
|
|
375
395
|
readonly [testCaseBrand]: true;
|
|
@@ -387,13 +407,28 @@ export interface TestAPI<Fixtures = TestFixtures> {
|
|
|
387
407
|
setup(title: string, options: SetupOptions, fn: SetupFn<Fixtures>): TestCase;
|
|
388
408
|
/**
|
|
389
409
|
* Returns the same runtime `test`, typed with an engine's contributed
|
|
390
|
-
* fixtures. A pure type refinement
|
|
391
|
-
* target's engine at runtime
|
|
410
|
+
* fixtures. A pure type refinement, the fixtures still resolve from the
|
|
411
|
+
* target's engine at runtime, so a project types its device/desktop/web
|
|
392
412
|
* surface without a global `declare module` augmentation:
|
|
393
413
|
*
|
|
394
414
|
* export const test = base.extend<{ device: Device }>();
|
|
395
415
|
*/
|
|
396
416
|
extend<Extra>(): TestAPI<Fixtures & Extra>;
|
|
417
|
+
/**
|
|
418
|
+
* Returns a new `test` whose registrations carry these fixture
|
|
419
|
+
* definitions on top of the ones it already had. Each attempt sets them up
|
|
420
|
+
* in declaration order after the engine's fixtures, runs the hooks and the
|
|
421
|
+
* body with them, and tears them down in reverse order after `afterEach`:
|
|
422
|
+
*
|
|
423
|
+
* export const test = base.extend<{ workspace: Workspace }>({
|
|
424
|
+
* workspace: async ({ web }, use) => {
|
|
425
|
+
* const workspace = await createWorkspace();
|
|
426
|
+
* await use(workspace);
|
|
427
|
+
* await workspace.cleanup();
|
|
428
|
+
* },
|
|
429
|
+
* });
|
|
430
|
+
*/
|
|
431
|
+
extend<Extra>(fixtures: FixtureDefinitions<Fixtures, Extra>): TestAPI<Fixtures & Extra>;
|
|
397
432
|
/** Declares a group synchronously. */
|
|
398
433
|
describe<Result>(title: string, body: SynchronousBody<Result>): void;
|
|
399
434
|
/** Declares a configured group synchronously. */
|
|
@@ -503,6 +538,32 @@ export interface ValueExpectation<T> {
|
|
|
503
538
|
/** Requires a numeric upper bound. */
|
|
504
539
|
toBeLessThan(expected: number): void;
|
|
505
540
|
}
|
|
541
|
+
export interface PollOptions {
|
|
542
|
+
/** Deadline in milliseconds. Default 5000. */
|
|
543
|
+
timeout?: number;
|
|
544
|
+
/** Pause between reads in milliseconds. Default 100. */
|
|
545
|
+
interval?: number;
|
|
546
|
+
/** Extra line in the timeout error, after the matcher line. */
|
|
547
|
+
message?: string;
|
|
548
|
+
}
|
|
549
|
+
/**
|
|
550
|
+
* The asynchronous form of every `ValueExpectation<T>` matcher: the same
|
|
551
|
+
* names and parameters, each resolving once the re-read value passes.
|
|
552
|
+
* Derived from `ValueExpectation<T>` so the two cannot drift.
|
|
553
|
+
*/
|
|
554
|
+
export type PollExpectation<T> = {
|
|
555
|
+
readonly not: PollExpectation<T>;
|
|
556
|
+
} & {
|
|
557
|
+
readonly [K in Exclude<keyof ValueExpectation<T>, 'not'>]: (...args: Parameters<ValueExpectation<T>[K]>) => Promise<void>;
|
|
558
|
+
};
|
|
559
|
+
/** The `expect` entry: dispatch on the argument, plus `expect.poll`. */
|
|
560
|
+
export interface Expect {
|
|
561
|
+
(actual: Locator): AsyncExpectation;
|
|
562
|
+
<E extends object>(actual: Expectable<E>): E;
|
|
563
|
+
<T>(actual: T): ValueExpectation<T>;
|
|
564
|
+
/** Re-reads a value until the chosen matcher holds or `timeout` passes. */
|
|
565
|
+
poll<T>(read: () => T | Promise<T>, options?: PollOptions): PollExpectation<T>;
|
|
566
|
+
}
|
|
506
567
|
export interface CommandConfig {
|
|
507
568
|
executable: string;
|
|
508
569
|
args?: readonly string[];
|
|
@@ -564,7 +625,7 @@ export interface Target {
|
|
|
564
625
|
engine?: EngineHandle;
|
|
565
626
|
}
|
|
566
627
|
/**
|
|
567
|
-
* A live AI SDK language model instance: `gateway('openai/gpt-5.
|
|
628
|
+
* A live AI SDK language model instance: `gateway('openai/gpt-5.6-luna')`
|
|
568
629
|
* from `ai`, `openrouter(...)` from `@openrouter/ai-sdk-provider`,
|
|
569
630
|
* `openai('gpt-4o')` from `@ai-sdk/openai`, or any other provider
|
|
570
631
|
* implementing the AI SDK `LanguageModelV2+` specification. The instance owns
|
|
@@ -675,8 +736,6 @@ export interface AgentConfig {
|
|
|
675
736
|
executor?: StepExecutor;
|
|
676
737
|
/** An AI SDK model instance; no implicit default. */
|
|
677
738
|
model?: ModelInstance;
|
|
678
|
-
/** Model used by calls with `vision`; falls back to `model`. */
|
|
679
|
-
visionModel?: ModelInstance;
|
|
680
739
|
maxSteps?: number;
|
|
681
740
|
maxModelCalls?: number;
|
|
682
741
|
maxObservationBytes?: number;
|
|
@@ -718,7 +777,8 @@ export type ReporterSummary = readonly {
|
|
|
718
777
|
* A reporter in `reporters`, the contract the built-in `list`, `json`, and
|
|
719
778
|
* `junit` reporters implement too. `onEvent` sees every run event as it
|
|
720
779
|
* happens, exactly what the `list` reporter renders, and must not block: a
|
|
721
|
-
* throw quarantines it for the rest of the run.
|
|
780
|
+
* throw quarantines it for the rest of the run. Event types are added over
|
|
781
|
+
* time; a reporter handles the ones it knows and ignores the rest. `onRunFinished` runs once
|
|
722
782
|
* `report.json` is written and the summary has printed; it is awaited within
|
|
723
783
|
* a fixed budget, and the rows it resolves with print under the summary. Its
|
|
724
784
|
* `signal` aborts when that budget runs out or the run is forced to stop, so
|