@e2edev/e2e 0.12.0 → 0.14.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 +4 -4
- package/dist/agent/act.d.ts +13 -7
- package/dist/agent/act.d.ts.map +1 -1
- package/dist/agent/act.js +125 -730
- 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 +1 -1
- package/dist/agent/default-agent.d.ts.map +1 -1
- package/dist/agent/default-agent.js +30 -9
- package/dist/agent/default-agent.js.map +1 -1
- package/dist/agent/error.d.ts.map +1 -1
- package/dist/agent/error.js +1 -0
- package/dist/agent/error.js.map +1 -1
- package/dist/agent/executor.d.ts +33 -5
- 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/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/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/phases.js +1 -1
- package/dist/agent/phases.js.map +1 -1
- 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 +99 -27
- 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/secrets.d.ts.map +1 -1
- package/dist/agent/secrets.js +13 -9
- package/dist/agent/secrets.js.map +1 -1
- package/dist/agent/step-accounting.d.ts +106 -0
- package/dist/agent/step-accounting.d.ts.map +1 -0
- package/dist/agent/step-accounting.js +216 -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.map +1 -1
- package/dist/agent/tool-loop.js +9 -2
- 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/index.d.ts.map +1 -1
- package/dist/cli/index.js +55 -32
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/engine-versions.json +1 -1
- package/dist/cli/init/engines.d.ts +29 -10
- package/dist/cli/init/engines.d.ts.map +1 -1
- package/dist/cli/init/engines.js +34 -12
- package/dist/cli/init/engines.js.map +1 -1
- package/dist/cli/init/gateways.js +3 -3
- package/dist/cli/init/mcp-config.js +1 -1
- package/dist/cli/init/mcp-config.js.map +1 -1
- package/dist/cli/init/scaffold.d.ts.map +1 -1
- package/dist/cli/init/scaffold.js +1 -3
- package/dist/cli/init/scaffold.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +3 -2
- package/dist/cli/init.js.map +1 -1
- 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 +139 -54
- package/dist/collect/registry.js.map +1 -1
- package/dist/collect/select.js +3 -1
- 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/diagnose.d.ts.map +1 -1
- package/dist/config/diagnose.js +2 -0
- package/dist/config/diagnose.js.map +1 -1
- package/dist/config/resolve.d.ts +26 -3
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +66 -23
- package/dist/config/resolve.js.map +1 -1
- package/dist/config/secrets.d.ts +89 -0
- package/dist/config/secrets.d.ts.map +1 -0
- package/dist/config/secrets.js +67 -0
- package/dist/config/secrets.js.map +1 -0
- package/dist/engine/contract.d.ts +17 -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 +3 -1
- 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 +5 -5
- 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/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.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/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/locator/engine.d.ts.map +1 -1
- package/dist/locator/engine.js +1 -0
- package/dist/locator/engine.js.map +1 -1
- package/dist/mcp/catalog.d.ts +5 -4
- package/dist/mcp/catalog.d.ts.map +1 -1
- package/dist/mcp/catalog.js +5 -36
- package/dist/mcp/catalog.js.map +1 -1
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session.d.ts +1 -1
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +12 -6
- package/dist/mcp/session.js.map +1 -1
- package/dist/report/builtin.d.ts +14 -0
- package/dist/report/builtin.d.ts.map +1 -0
- package/dist/report/builtin.js +22 -0
- package/dist/report/builtin.js.map +1 -0
- package/dist/report/explore-text.d.ts +17 -0
- package/dist/report/explore-text.d.ts.map +1 -0
- package/dist/report/explore-text.js +37 -0
- package/dist/report/explore-text.js.map +1 -0
- package/dist/report/format.d.ts +2 -0
- package/dist/report/format.d.ts.map +1 -1
- package/dist/report/format.js +1 -1
- package/dist/report/format.js.map +1 -1
- package/dist/report/junit.d.ts +2 -4
- package/dist/report/junit.d.ts.map +1 -1
- package/dist/report/junit.js +7 -40
- 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 +368 -0
- package/dist/report/list-explore.js.map +1 -0
- package/dist/report/list.d.ts +21 -0
- package/dist/report/list.d.ts.map +1 -1
- package/dist/report/list.js +79 -3
- package/dist/report/list.js.map +1 -1
- package/dist/report/markdown.d.ts +39 -0
- package/dist/report/markdown.d.ts.map +1 -0
- package/dist/report/markdown.js +426 -0
- package/dist/report/markdown.js.map +1 -0
- package/dist/report/outcome.d.ts +29 -0
- package/dist/report/outcome.d.ts.map +1 -0
- package/dist/report/outcome.js +36 -0
- package/dist/report/outcome.js.map +1 -0
- 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/report/write.d.ts +10 -1
- package/dist/report/write.d.ts.map +1 -1
- package/dist/report/write.js +22 -1
- package/dist/report/write.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 +10 -5
- package/dist/run/events.d.ts.map +1 -1
- package/dist/run/events.js.map +1 -1
- package/dist/run/execute.d.ts.map +1 -1
- package/dist/run/execute.js +24 -7
- 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.map +1 -1
- package/dist/run/fixtures.js +39 -11
- package/dist/run/fixtures.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/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/runner.d.ts +9 -3
- package/dist/run/runner.d.ts.map +1 -1
- package/dist/run/runner.js +15 -12
- package/dist/run/runner.js.map +1 -1
- package/dist/run/secrecy.d.ts +3 -3
- package/dist/run/secrecy.d.ts.map +1 -1
- package/dist/run/secrecy.js +4 -4
- package/dist/run/secrecy.js.map +1 -1
- package/dist/run/standalone.js +6 -6
- package/dist/run/standalone.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 +7 -1
- package/dist/run/worker/protocol.d.ts.map +1 -1
- package/dist/run/worker/protocol.js.map +1 -1
- package/dist/secrets.d.ts +21 -0
- package/dist/secrets.d.ts.map +1 -0
- package/dist/secrets.js +66 -0
- package/dist/secrets.js.map +1 -0
- package/dist/types.d.ts +90 -50
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -3
- package/skills/e2e/SKILL.md +42 -25
- package/skills/e2e/references/agent.md +80 -24
- package/skills/e2e/references/debugging.md +6 -5
- package/skills/e2e/references/explore.md +13 -7
- package/skills/e2e/references/mcp.md +4 -4
- package/skills/e2e/references/running.md +32 -21
- package/skills/e2e/references/setup.md +42 -16
- package/skills/e2e/references/writing-tests.md +32 -16
- 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/credentials.d.ts +0 -13
- package/dist/credentials.d.ts.map +0 -1
- package/dist/credentials.js +0 -51
- package/dist/credentials.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
package/dist/config/app.d.ts
CHANGED
|
@@ -26,6 +26,16 @@ export interface ResolvedService extends ResolvedCommand {
|
|
|
26
26
|
readonly readiness: Readiness;
|
|
27
27
|
readonly teardown: ResolvedCommand | undefined;
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* A declared URL with port 0 asks the run for a free port on its loopback
|
|
31
|
+
* host. `port` is the one the run assigned, undefined until it did: a config
|
|
32
|
+
* resolved outside a run (`e2e list`, the cache CLI) keeps the `:0` URL.
|
|
33
|
+
*/
|
|
34
|
+
export interface PortRequest {
|
|
35
|
+
/** The hostname to bind, as the URL spelled it. */
|
|
36
|
+
readonly host: string;
|
|
37
|
+
readonly port: number | undefined;
|
|
38
|
+
}
|
|
29
39
|
/**
|
|
30
40
|
* The app one target drives, as the harness resolved the engine's `app`
|
|
31
41
|
* declaration. Navigation policy, cache and session identity, the report's
|
|
@@ -35,6 +45,8 @@ export interface ResolvedService extends ResolvedCommand {
|
|
|
35
45
|
export interface ResolvedApp {
|
|
36
46
|
/** Normalized base URL; undefined for a surface without addressable locations. */
|
|
37
47
|
readonly base: NormalizedBaseUrl | undefined;
|
|
48
|
+
/** The free-port request the declared URL made; undefined when it names a port or there is no URL. */
|
|
49
|
+
readonly portRequest: PortRequest | undefined;
|
|
38
50
|
readonly allowedOrigins: readonly string[];
|
|
39
51
|
readonly environment: 'test' | 'staging' | 'production';
|
|
40
52
|
/**
|
|
@@ -55,8 +67,16 @@ export interface ResolvedApp {
|
|
|
55
67
|
* origins, a command needs something to poll, services need one readiness
|
|
56
68
|
* contract each, and the identity defaults to where the app is served when
|
|
57
69
|
* the engine gives none. `projectRoot` anchors every command's `log` path.
|
|
70
|
+
* `port` is the free port the run assigned to a URL declared with port 0: it
|
|
71
|
+
* replaces the 0 in the base URL, the default origin and readiness probe, and
|
|
72
|
+
* any explicit origin spelled with the same host and `:0`. The default
|
|
73
|
+
* identity keeps the declared `:0`, so cache and session entries survive the
|
|
74
|
+
* port changing every run. `{port}` in the command, the services, and their
|
|
75
|
+
* readiness URLs expands to the port the app is served on, assigned or fixed.
|
|
58
76
|
*/
|
|
59
|
-
export declare function resolveTargetApp(targetName: string, engine: EngineHandle | undefined, projectRoot: string): ResolvedApp;
|
|
77
|
+
export declare function resolveTargetApp(targetName: string, engine: EngineHandle | undefined, projectRoot: string, port?: number): ResolvedApp;
|
|
78
|
+
/** Substitutes `{port}` in one configured value, given where the value came from for the error. */
|
|
79
|
+
type PortExpander = (value: string, label: string) => string;
|
|
60
80
|
/**
|
|
61
81
|
* Resolves a declaration's `services`: every service is a command with exactly
|
|
62
82
|
* one readiness contract (`readyUrl` or `waitForExit`), and a `teardown` is a
|
|
@@ -65,8 +85,10 @@ export declare function resolveTargetApp(targetName: string, engine: EngineHandl
|
|
|
65
85
|
* command; `reuseExisting` stays on it, and only a `readyUrl` service may set it.
|
|
66
86
|
* `projectRoot` anchors each `log` path; `prefix` names the declaring target
|
|
67
87
|
* in errors, so a failing service is traceable to the engine that declared it.
|
|
88
|
+
* `expand` substitutes `{port}` in each service's args, env, readiness URL,
|
|
89
|
+
* and teardown; the default leaves values as written.
|
|
68
90
|
*/
|
|
69
|
-
export declare function resolveServices(raw: EngineAppDeclaration['services'], projectRoot: string, prefix?: string): readonly ResolvedService[];
|
|
91
|
+
export declare function resolveServices(raw: EngineAppDeclaration['services'], projectRoot: string, prefix?: string, expand?: PortExpander): readonly ResolvedService[];
|
|
70
92
|
/** A command's env as it enters the config digest: values reduced to their names. */
|
|
71
93
|
interface DigestedEnv {
|
|
72
94
|
readonly env?: Readonly<Record<string, {
|
package/dist/config/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/config/app.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG7E,OAAO,
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/config/app.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG7E,OAAO,EAML,KAAK,iBAAiB,EACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,aAAa,CAAC;AAGhE;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAA;CAAE,CAAC;AAEvF,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;CACjC;AAED,wEAAwE;AACxE,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,0FAA0F;IAC1F,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,SAAS,CAAC;CAChD;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,kFAAkF;IAClF,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC7C,sGAAsG;IACtG,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC;IACxD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,CAAC;IAC5C,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,6FAA6F;IAC7F,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;CAC/C;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,MAAM,GACZ,WAAW,CA8Eb;AAWD,mGAAmG;AACnG,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;AAiJ7D;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,oBAAoB,CAAC,UAAU,CAAC,EACrC,WAAW,EAAE,MAAM,EACnB,MAAM,SAAiB,EACvB,MAAM,GAAE,YAA+B,GACtC,SAAS,eAAe,EAAE,CAuC5B;AAED,qFAAqF;AACrF,UAAU,WAAW;IACnB,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CAC9D;AAQD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,oBAAoB;;;;;;;;cAf7C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;;;;;;;;;;;;;GA+B7D"}
|
package/dist/config/app.js
CHANGED
|
@@ -6,7 +6,7 @@ import fs from 'node:fs';
|
|
|
6
6
|
import path from 'node:path';
|
|
7
7
|
import { ConfigurationError } from '../internal/errors.js';
|
|
8
8
|
import { obj } from '../internal/objects.js';
|
|
9
|
-
import { isImplicitTestHost, normalizeBaseUrl } from '../internal/urls.js';
|
|
9
|
+
import { isImplicitTestHost, normalizeBaseUrl, portOf, requestsFreePort, withPort, } from '../internal/urls.js';
|
|
10
10
|
import { httpUrl, positiveInt } from './validate.js';
|
|
11
11
|
const ENVIRONMENTS = new Set(['test', 'staging', 'production']);
|
|
12
12
|
/**
|
|
@@ -15,21 +15,34 @@ const ENVIRONMENTS = new Set(['test', 'staging', 'production']);
|
|
|
15
15
|
* origins, a command needs something to poll, services need one readiness
|
|
16
16
|
* contract each, and the identity defaults to where the app is served when
|
|
17
17
|
* the engine gives none. `projectRoot` anchors every command's `log` path.
|
|
18
|
+
* `port` is the free port the run assigned to a URL declared with port 0: it
|
|
19
|
+
* replaces the 0 in the base URL, the default origin and readiness probe, and
|
|
20
|
+
* any explicit origin spelled with the same host and `:0`. The default
|
|
21
|
+
* identity keeps the declared `:0`, so cache and session entries survive the
|
|
22
|
+
* port changing every run. `{port}` in the command, the services, and their
|
|
23
|
+
* readiness URLs expands to the port the app is served on, assigned or fixed.
|
|
18
24
|
*/
|
|
19
|
-
export function resolveTargetApp(targetName, engine, projectRoot) {
|
|
25
|
+
export function resolveTargetApp(targetName, engine, projectRoot, port) {
|
|
20
26
|
const declared = engine?.app ?? {};
|
|
21
27
|
const where = `target "${targetName}" engine ${engine?.name ?? 'none'}`;
|
|
22
|
-
const
|
|
28
|
+
const declaredBase = declared.url === undefined ? undefined : normalizeBaseUrl(declared.url);
|
|
29
|
+
const portRequest = declaredBase === undefined ? undefined : freePortRequest(declaredBase, port);
|
|
30
|
+
const base = declaredBase !== undefined && portRequest?.port !== undefined ? withPort(declaredBase, portRequest.port) : declaredBase;
|
|
31
|
+
// What `{port}` expands to. While a requested port is unassigned this is 0,
|
|
32
|
+
// the port the base URL still carries, so the config resolves and validates
|
|
33
|
+
// the same way before and after assignment.
|
|
34
|
+
const appPort = base === undefined ? undefined : portOf(base);
|
|
35
|
+
const expand = (value, label) => expandPort(value, appPort, label);
|
|
23
36
|
const environment = declared.environment ??
|
|
24
37
|
(base !== undefined && !isImplicitTestHost(new URL(base.href).hostname) ? 'production' : 'test');
|
|
25
38
|
if (!ENVIRONMENTS.has(environment)) {
|
|
26
39
|
throw new ConfigurationError('INVALID_CONFIG', `${where} declares invalid app.environment "${String(environment)}"`);
|
|
27
40
|
}
|
|
28
|
-
const
|
|
29
|
-
if (!Array.isArray(
|
|
41
|
+
const declaredOrigins = declared.allowedOrigins ?? (base === undefined ? [] : [base.origin]);
|
|
42
|
+
if (!Array.isArray(declaredOrigins)) {
|
|
30
43
|
throw new ConfigurationError('INVALID_CONFIG', `${where} app.allowedOrigins must be an array`);
|
|
31
44
|
}
|
|
32
|
-
|
|
45
|
+
const allowedOrigins = declaredOrigins.map((origin) => {
|
|
33
46
|
let parsed;
|
|
34
47
|
try {
|
|
35
48
|
parsed = new URL(origin);
|
|
@@ -40,26 +53,76 @@ export function resolveTargetApp(targetName, engine, projectRoot) {
|
|
|
40
53
|
if (parsed.origin !== origin) {
|
|
41
54
|
throw new ConfigurationError('INVALID_CONFIG', `${where} allowed origin must be a serialized origin, got ${origin} (expected ${parsed.origin})`);
|
|
42
55
|
}
|
|
43
|
-
|
|
56
|
+
// An explicit origin spelled like the declared URL follows its port.
|
|
57
|
+
if (portRequest?.port !== undefined && parsed.port === '0' && parsed.hostname === portRequest.host) {
|
|
58
|
+
parsed.port = String(portRequest.port);
|
|
59
|
+
return parsed.origin;
|
|
60
|
+
}
|
|
61
|
+
return origin;
|
|
62
|
+
});
|
|
44
63
|
const identity = declared.identity;
|
|
45
64
|
if (identity !== undefined && (typeof identity !== 'string' || identity.trim() === '')) {
|
|
46
65
|
throw new ConfigurationError('INVALID_CONFIG', `${where} app.identity must be a non-empty string`);
|
|
47
66
|
}
|
|
48
|
-
const command = declared.command;
|
|
67
|
+
const command = declared.command === undefined ? undefined : expandCommandPort(declared.command, `${where} app.command`, expand);
|
|
49
68
|
if (command !== undefined)
|
|
50
69
|
validateCommand(command, `${where} app.command`, projectRoot);
|
|
51
|
-
const readyUrl = httpUrl(declared.readyUrl, `${where} app.readyUrl`) ?? base?.href;
|
|
70
|
+
const readyUrl = httpUrl(declared.readyUrl === undefined ? undefined : expand(declared.readyUrl, `${where} app.readyUrl`), `${where} app.readyUrl`) ?? base?.href;
|
|
52
71
|
if (command !== undefined && readyUrl === undefined) {
|
|
53
72
|
throw new ConfigurationError('APP_URL_REQUIRED', `${where} declares app.command without a URL to poll: declare url or readyUrl beside it`);
|
|
54
73
|
}
|
|
55
74
|
return {
|
|
56
75
|
base,
|
|
76
|
+
portRequest,
|
|
57
77
|
allowedOrigins,
|
|
58
78
|
environment,
|
|
59
|
-
identity: identity ?? (
|
|
79
|
+
identity: identity ?? (declaredBase === undefined ? undefined : `${declaredBase.origin}${declaredBase.basePath}`),
|
|
60
80
|
command,
|
|
61
81
|
readyUrl: command === undefined ? undefined : readyUrl,
|
|
62
|
-
services: resolveServices(declared.services, projectRoot, `${where} app.services
|
|
82
|
+
services: resolveServices(declared.services, projectRoot, `${where} app.services`, expand),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/** The request a URL declared with port 0 makes, carrying the port the run assigned it so far. */
|
|
86
|
+
function freePortRequest(declaredBase, port) {
|
|
87
|
+
if (!requestsFreePort(declaredBase))
|
|
88
|
+
return undefined;
|
|
89
|
+
return { host: new URL(declaredBase.href).hostname, port };
|
|
90
|
+
}
|
|
91
|
+
/** The token a command, a service, or a readiness URL writes where the app's port goes. */
|
|
92
|
+
const PORT_TOKEN = '{port}';
|
|
93
|
+
/**
|
|
94
|
+
* Substitutes `{port}` in one configured string. A target without a URL has
|
|
95
|
+
* no port to offer, so the token there is a config error naming the field.
|
|
96
|
+
*/
|
|
97
|
+
function expandPort(value, port, label) {
|
|
98
|
+
if (!value.includes(PORT_TOKEN))
|
|
99
|
+
return value;
|
|
100
|
+
if (port === undefined) {
|
|
101
|
+
throw new ConfigurationError('INVALID_CONFIG', `${label} uses ${PORT_TOKEN}, but the target declares no url to take the port from`);
|
|
102
|
+
}
|
|
103
|
+
return value.replaceAll(PORT_TOKEN, String(port));
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* The command with `{port}` expanded in every `args` entry and `env` value.
|
|
107
|
+
* Malformed shapes pass through untouched for `validateCommand` to name.
|
|
108
|
+
*/
|
|
109
|
+
function expandCommandPort(command, label, expand) {
|
|
110
|
+
if (typeof command !== 'object' || command === null)
|
|
111
|
+
return command;
|
|
112
|
+
const { args, env } = command;
|
|
113
|
+
return {
|
|
114
|
+
...command,
|
|
115
|
+
...(Array.isArray(args)
|
|
116
|
+
? { args: args.map((arg) => (typeof arg === 'string' ? expand(arg, `${label}.args`) : arg)) }
|
|
117
|
+
: {}),
|
|
118
|
+
...(typeof env === 'object' && env !== null
|
|
119
|
+
? {
|
|
120
|
+
env: Object.fromEntries(Object.entries(env).map(([key, value]) => [
|
|
121
|
+
key,
|
|
122
|
+
typeof value === 'string' ? expand(value, `${label}.env.${key}`) : value,
|
|
123
|
+
])),
|
|
124
|
+
}
|
|
125
|
+
: {}),
|
|
63
126
|
};
|
|
64
127
|
}
|
|
65
128
|
/**
|
|
@@ -159,19 +222,23 @@ function serviceName(service, position, taken) {
|
|
|
159
222
|
* command; `reuseExisting` stays on it, and only a `readyUrl` service may set it.
|
|
160
223
|
* `projectRoot` anchors each `log` path; `prefix` names the declaring target
|
|
161
224
|
* in errors, so a failing service is traceable to the engine that declared it.
|
|
225
|
+
* `expand` substitutes `{port}` in each service's args, env, readiness URL,
|
|
226
|
+
* and teardown; the default leaves values as written.
|
|
162
227
|
*/
|
|
163
|
-
export function resolveServices(raw, projectRoot, prefix = 'app.services') {
|
|
228
|
+
export function resolveServices(raw, projectRoot, prefix = 'app.services', expand = (value) => value) {
|
|
164
229
|
if (raw === undefined)
|
|
165
230
|
return [];
|
|
166
231
|
if (!Array.isArray(raw)) {
|
|
167
232
|
throw new ConfigurationError('INVALID_CONFIG', `${prefix} must be an array`);
|
|
168
233
|
}
|
|
169
234
|
const names = new Set();
|
|
170
|
-
return raw.map((
|
|
235
|
+
return raw.map((declaredService, index) => {
|
|
171
236
|
const position = `${prefix}[${index}]`;
|
|
237
|
+
const service = expandCommandPort(declaredService, position, expand);
|
|
172
238
|
validateCommand(service, position, projectRoot);
|
|
173
|
-
const { name: _name, readyUrl: rawReadyUrl, waitForExit, teardown, ...command } = service;
|
|
174
|
-
const readyUrl = httpUrl(rawReadyUrl, `${position}.readyUrl`);
|
|
239
|
+
const { name: _name, readyUrl: rawReadyUrl, waitForExit, teardown: declaredTeardown, ...command } = service;
|
|
240
|
+
const readyUrl = httpUrl(rawReadyUrl === undefined ? undefined : expand(rawReadyUrl, `${position}.readyUrl`), `${position}.readyUrl`);
|
|
241
|
+
const teardown = declaredTeardown === undefined ? undefined : expandCommandPort(declaredTeardown, `${position}.teardown`, expand);
|
|
175
242
|
if ((readyUrl !== undefined) === (waitForExit === true)) {
|
|
176
243
|
throw new ConfigurationError('INVALID_CONFIG', `${position} needs exactly one readiness contract: set readyUrl or waitForExit: true`);
|
|
177
244
|
}
|
package/dist/config/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/config/app.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/config/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnose.d.ts","sourceRoot":"","sources":["../../src/config/diagnose.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,kGAAkG;AAClG,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"diagnose.d.ts","sourceRoot":"","sources":["../../src/config/diagnose.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,kGAAkG;AAClG,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAY5C,CAAC;AASF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG3E"}
|
package/dist/config/diagnose.js
CHANGED
|
@@ -14,12 +14,14 @@ export const RUNTIME_EXPORTS = [
|
|
|
14
14
|
'test',
|
|
15
15
|
'expect',
|
|
16
16
|
'credentials',
|
|
17
|
+
'secrets',
|
|
17
18
|
'AgentError',
|
|
18
19
|
'isAgentError',
|
|
19
20
|
'BLOCKABLE_CODES',
|
|
20
21
|
'RUNTIME_CODES',
|
|
21
22
|
'buildTraceEntry',
|
|
22
23
|
'readTraceEntry',
|
|
24
|
+
'renderMarkdownReport',
|
|
23
25
|
];
|
|
24
26
|
/**
|
|
25
27
|
* The message of a failed import of `importer`, extended with what to do
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../src/config/diagnose.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAE7D,kGAAkG;AAClG,MAAM,CAAC,MAAM,eAAe,GAAsB;IAChD,MAAM;IACN,QAAQ;IACR,aAAa;IACb,YAAY;IACZ,cAAc;IACd,iBAAiB;IACjB,eAAe;IACf,iBAAiB;IACjB,gBAAgB;
|
|
1
|
+
{"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../src/config/diagnose.ts"],"names":[],"mappings":"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"}
|
package/dist/config/resolve.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Config validation, defaults, and resolution. */
|
|
2
|
-
import type { ArtifactStore, BuiltinReporter, CacheMode, ConfiguredArtifactKind, E2EConfig, Platform, Reporter, SecretProvider, TraceCacheStore } from '../types.ts';
|
|
2
|
+
import type { ArtifactStore, BuiltinReporter, CacheMode, ConfiguredArtifactKind, E2EConfig, Platform, Reporter, SecretProvider, SecretPurpose, TraceCacheStore } from '../types.ts';
|
|
3
3
|
import { type EngineHandle } from '../engine/index.ts';
|
|
4
4
|
import { type ResolvedAgentConfig, type ResolvedLimits } from './agent.ts';
|
|
5
5
|
import { type ResolvedApp } from './app.ts';
|
|
@@ -14,11 +14,18 @@ export interface ResolvedTarget {
|
|
|
14
14
|
/** The app under test, resolved from the engine's declaration. */
|
|
15
15
|
readonly app: ResolvedApp;
|
|
16
16
|
}
|
|
17
|
+
/** A named account; its password is the `ResolvedSecret` of the same name. */
|
|
17
18
|
export interface ResolvedCredential {
|
|
18
19
|
readonly name: string;
|
|
19
20
|
readonly username: string;
|
|
21
|
+
}
|
|
22
|
+
/** One value the model never sees, from `config.secrets` or a credential's password. */
|
|
23
|
+
export interface ResolvedSecret {
|
|
24
|
+
readonly name: string;
|
|
25
|
+
readonly purpose: SecretPurpose;
|
|
20
26
|
/** A static value, or a provider resolved fresh on every authorized fill. */
|
|
21
|
-
readonly
|
|
27
|
+
readonly value: string | SecretProvider;
|
|
28
|
+
/** Narrows the target's origin policy for this secret; undefined leaves it as is. */
|
|
22
29
|
readonly allowedOrigins: readonly string[] | undefined;
|
|
23
30
|
}
|
|
24
31
|
/**
|
|
@@ -68,6 +75,8 @@ export interface ResolvedConfig {
|
|
|
68
75
|
readonly cache: ResolvedCacheConfig;
|
|
69
76
|
readonly limits: ResolvedLimits;
|
|
70
77
|
readonly credentials: ReadonlyMap<string, ResolvedCredential>;
|
|
78
|
+
/** Every secret by name: `config.secrets` entries and every credential's password. */
|
|
79
|
+
readonly secrets: ReadonlyMap<string, ResolvedSecret>;
|
|
71
80
|
readonly configDigest: string;
|
|
72
81
|
}
|
|
73
82
|
/**
|
|
@@ -100,11 +109,25 @@ export interface CliOverrides {
|
|
|
100
109
|
}
|
|
101
110
|
/** True when CI mode is active. */
|
|
102
111
|
export declare function isCiMode(env?: NodeJS.ProcessEnv): boolean;
|
|
103
|
-
/**
|
|
112
|
+
/** The free port the run assigned to each target whose URL asked for one, by target name. */
|
|
113
|
+
export type PortAssignments = Readonly<Record<string, number>>;
|
|
114
|
+
/**
|
|
115
|
+
* Resolves a raw config object plus environment into an immutable resolved
|
|
116
|
+
* config. `ports` are the free ports the runner already assigned, so a worker
|
|
117
|
+
* re-resolving the same file lands on the same app URLs.
|
|
118
|
+
*/
|
|
104
119
|
export declare function resolveConfig(raw: E2EConfig, options: {
|
|
105
120
|
projectRoot: string;
|
|
106
121
|
configPath?: string;
|
|
107
122
|
env?: NodeJS.ProcessEnv;
|
|
108
123
|
cli?: CliOverrides;
|
|
124
|
+
ports?: PortAssignments;
|
|
109
125
|
}): ResolvedConfig;
|
|
126
|
+
/**
|
|
127
|
+
* The config with every target's app re-resolved against the port the run
|
|
128
|
+
* assigned it. Pure, so the runner and each worker reach the same URLs from
|
|
129
|
+
* the same declaration and ports; the digest stands, because the ports never
|
|
130
|
+
* enter it.
|
|
131
|
+
*/
|
|
132
|
+
export declare function assignPorts(config: ResolvedConfig, ports: PortAssignments): ResolvedConfig;
|
|
110
133
|
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAAA,mDAAmD;
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"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"}
|
package/dist/config/resolve.js
CHANGED
|
@@ -6,11 +6,13 @@ import { envFlag } from '../internal/env.js';
|
|
|
6
6
|
import { ConfigurationError } from '../internal/errors.js';
|
|
7
7
|
import { canonicalDigest, sha256Hex } from '../internal/ids.js';
|
|
8
8
|
import { didYouMean } from '../internal/suggest.js';
|
|
9
|
+
import { BUILTIN_REPORTER_LIST, BUILTIN_REPORTERS, isBuiltinReporter } from '../report/builtin.js';
|
|
9
10
|
import { isStepExecutor } from '../agent/executor.js';
|
|
10
11
|
import { boundedInt, positiveInt } from './validate.js';
|
|
11
12
|
import { isEngineHandle } from '../engine/index.js';
|
|
12
13
|
import { isModelInstance, resolveAgentConfig, resolveLimits, } from './agent.js';
|
|
13
14
|
import { digestAppDeclaration, resolveTargetApp } from './app.js';
|
|
15
|
+
import { envName, isSecretValue, normalizeSecretConfig, validateAllowedOrigins, validateSecretDeclaration } from './secrets.js';
|
|
14
16
|
const TARGET_NAME_PATTERN = /^[A-Za-z0-9_.-]+$/;
|
|
15
17
|
const TARGET_KEYS = new Set(['name', 'platform', 'engine']);
|
|
16
18
|
const TOP_LEVEL_KEYS = new Set([
|
|
@@ -32,6 +34,7 @@ const TOP_LEVEL_KEYS = new Set([
|
|
|
32
34
|
'cache',
|
|
33
35
|
'limits',
|
|
34
36
|
'credentials',
|
|
37
|
+
'secrets',
|
|
35
38
|
]);
|
|
36
39
|
const CACHE_KEYS = new Set(['mode', 'store', 'dir']);
|
|
37
40
|
const CACHE_MODES = new Set(['off', 'read-only', 'read-write']);
|
|
@@ -70,7 +73,11 @@ function unknownTopLevelKeyHint(key) {
|
|
|
70
73
|
export function isCiMode(env = process.env) {
|
|
71
74
|
return envFlag(env, 'CI');
|
|
72
75
|
}
|
|
73
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* Resolves a raw config object plus environment into an immutable resolved
|
|
78
|
+
* config. `ports` are the free ports the runner already assigned, so a worker
|
|
79
|
+
* re-resolving the same file lands on the same app URLs.
|
|
80
|
+
*/
|
|
74
81
|
export function resolveConfig(raw, options) {
|
|
75
82
|
const env = options.env ?? process.env;
|
|
76
83
|
const cli = options.cli ?? {};
|
|
@@ -86,7 +93,7 @@ export function resolveConfig(raw, options) {
|
|
|
86
93
|
if (raw.specVersion !== undefined && raw.specVersion !== '0.1') {
|
|
87
94
|
throw new ConfigurationError('INVALID_CONFIG', `unsupported specVersion ${JSON.stringify(raw.specVersion)}; this runner implements 0.1`);
|
|
88
95
|
}
|
|
89
|
-
const targets = resolveTargets(raw, options.projectRoot);
|
|
96
|
+
const targets = resolveTargets(raw, options.projectRoot, options.ports ?? {});
|
|
90
97
|
const tests = normalizeTests(raw.tests);
|
|
91
98
|
const timeout = positiveInt(raw.timeout, 'timeout', 'milliseconds') ?? 120_000;
|
|
92
99
|
const launchTimeout = positiveInt(raw.launchTimeout, 'launchTimeout', 'milliseconds') ?? 60_000;
|
|
@@ -105,7 +112,7 @@ export function resolveConfig(raw, options) {
|
|
|
105
112
|
const { reporters, customReporters } = resolveReporters(raw, cli);
|
|
106
113
|
const testIdAttribute = raw.screen?.testIdAttribute ?? 'data-testid';
|
|
107
114
|
const projectId = resolveProjectId(raw.projectId, options.projectRoot);
|
|
108
|
-
const credentials =
|
|
115
|
+
const { credentials, secrets } = resolveSecrets(raw, env);
|
|
109
116
|
// Limits first: the agent context budget is a limits key, and the resolved
|
|
110
117
|
// observation budget is agent-owned, so the dependency runs one way.
|
|
111
118
|
const baseLimits = resolveLimits(raw);
|
|
@@ -145,10 +152,26 @@ export function resolveConfig(raw, options) {
|
|
|
145
152
|
cache,
|
|
146
153
|
limits,
|
|
147
154
|
credentials,
|
|
155
|
+
secrets,
|
|
148
156
|
configDigest: computeConfigDigest(raw, projectId),
|
|
149
157
|
};
|
|
150
158
|
return resolved;
|
|
151
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* The config with every target's app re-resolved against the port the run
|
|
162
|
+
* assigned it. Pure, so the runner and each worker reach the same URLs from
|
|
163
|
+
* the same declaration and ports; the digest stands, because the ports never
|
|
164
|
+
* enter it.
|
|
165
|
+
*/
|
|
166
|
+
export function assignPorts(config, ports) {
|
|
167
|
+
return {
|
|
168
|
+
...config,
|
|
169
|
+
targets: config.targets.map((target) => ({
|
|
170
|
+
...target,
|
|
171
|
+
app: resolveTargetApp(target.name, target.engine, config.projectRoot, ports[target.name]),
|
|
172
|
+
})),
|
|
173
|
+
};
|
|
174
|
+
}
|
|
152
175
|
/**
|
|
153
176
|
* Resolves the `cache` key. The cache is opt-out: an unset key means
|
|
154
177
|
* `read-write`, so a project earns replay speed without asking for it, and
|
|
@@ -283,7 +306,6 @@ function resolveVideoRetain(value) {
|
|
|
283
306
|
function isArtifactsObject(value) {
|
|
284
307
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
285
308
|
}
|
|
286
|
-
const BUILTIN_REPORTERS = ['list', 'json', 'junit'];
|
|
287
309
|
/**
|
|
288
310
|
* Splits `reporters` into the built-in ids and the reporter objects.
|
|
289
311
|
* `--reporter` replaces the ids only: an object has no id to name on the
|
|
@@ -299,8 +321,8 @@ function resolveReporters(raw, cli) {
|
|
|
299
321
|
const customReporters = [];
|
|
300
322
|
for (const reporter of configured) {
|
|
301
323
|
if (typeof reporter === 'string') {
|
|
302
|
-
if (!
|
|
303
|
-
throw new ConfigurationError('INVALID_CONFIG', `unknown reporter "${reporter}"; reporters are
|
|
324
|
+
if (!isBuiltinReporter(reporter)) {
|
|
325
|
+
throw new ConfigurationError('INVALID_CONFIG', `unknown reporter "${reporter}"; reporters are ${BUILTIN_REPORTER_LIST}${didYouMean(reporter, BUILTIN_REPORTERS)}`);
|
|
304
326
|
}
|
|
305
327
|
ids.push(reporter);
|
|
306
328
|
}
|
|
@@ -308,7 +330,7 @@ function resolveReporters(raw, cli) {
|
|
|
308
330
|
customReporters.push(reporter);
|
|
309
331
|
}
|
|
310
332
|
else {
|
|
311
|
-
throw new ConfigurationError('INVALID_CONFIG',
|
|
333
|
+
throw new ConfigurationError('INVALID_CONFIG', `a reporter is a built-in id (${BUILTIN_REPORTERS.join(', ')}) or an object with a name and an onEvent or onRunFinished method`);
|
|
312
334
|
}
|
|
313
335
|
}
|
|
314
336
|
const reporters = cli.reporters ?? ids;
|
|
@@ -341,7 +363,7 @@ function isTraceCacheStore(value) {
|
|
|
341
363
|
typeof candidate['read'] === 'function' &&
|
|
342
364
|
typeof candidate['write'] === 'function');
|
|
343
365
|
}
|
|
344
|
-
function resolveTargets(raw, projectRoot) {
|
|
366
|
+
function resolveTargets(raw, projectRoot, ports) {
|
|
345
367
|
if (raw.targets === undefined) {
|
|
346
368
|
throw new ConfigurationError('INVALID_CONFIG', 'targets is required: declare at least one target and the engine that drives it, ' +
|
|
347
369
|
'e.g. targets: [{ engine }]');
|
|
@@ -386,7 +408,7 @@ function resolveTargets(raw, projectRoot) {
|
|
|
386
408
|
index,
|
|
387
409
|
platform,
|
|
388
410
|
engine: target.engine,
|
|
389
|
-
app: resolveTargetApp(name, target.engine, projectRoot),
|
|
411
|
+
app: resolveTargetApp(name, target.engine, projectRoot, ports[name]),
|
|
390
412
|
};
|
|
391
413
|
});
|
|
392
414
|
}
|
|
@@ -438,25 +460,41 @@ function resolveProjectId(explicit, projectRoot) {
|
|
|
438
460
|
}
|
|
439
461
|
return `unportable-${sha256Hex(projectRoot).slice(0, 32)}`;
|
|
440
462
|
}
|
|
441
|
-
|
|
442
|
-
|
|
463
|
+
/**
|
|
464
|
+
* Credentials and secrets resolve together because they share one namespace:
|
|
465
|
+
* a credential's password is the secret of the credential's name, so
|
|
466
|
+
* `typeSecret`, the ledger, and the trace all key on one map.
|
|
467
|
+
*/
|
|
468
|
+
function resolveSecrets(raw, env) {
|
|
469
|
+
const credentials = new Map();
|
|
470
|
+
const secrets = new Map();
|
|
443
471
|
for (const [name, credential] of Object.entries(raw.credentials ?? {})) {
|
|
444
|
-
const
|
|
445
|
-
const username = env[`${
|
|
472
|
+
const prefix = envName('E2E_USER', name);
|
|
473
|
+
const username = env[`${prefix}_USERNAME`] ?? credential.username;
|
|
446
474
|
// An env override always wins, including over a provider: the operator
|
|
447
475
|
// rotating a credential must not need to know how it was configured.
|
|
448
|
-
const password = env[`${
|
|
449
|
-
if ((
|
|
476
|
+
const password = env[`${prefix}_PASSWORD`] ?? credential.password;
|
|
477
|
+
if (!isSecretValue(password)) {
|
|
450
478
|
throw new ConfigurationError('INVALID_CONFIG', `credential "${name}" password must be a non-empty string or a provider function`);
|
|
451
479
|
}
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
password,
|
|
456
|
-
allowedOrigins: credential.allowedOrigins,
|
|
457
|
-
});
|
|
480
|
+
validateAllowedOrigins(`credential "${name}"`, credential.allowedOrigins);
|
|
481
|
+
credentials.set(name, { name, username });
|
|
482
|
+
secrets.set(name, { name, purpose: 'password', value: password, allowedOrigins: credential.allowedOrigins });
|
|
458
483
|
}
|
|
459
|
-
|
|
484
|
+
for (const [name, entry] of Object.entries(raw.secrets ?? {})) {
|
|
485
|
+
if (secrets.has(name)) {
|
|
486
|
+
throw new ConfigurationError('INVALID_CONFIG', `secret "${name}" is also a credential; a credential's password is the secret of its name, so declare one or the other`);
|
|
487
|
+
}
|
|
488
|
+
const declared = normalizeSecretConfig(entry);
|
|
489
|
+
if (declared === entry)
|
|
490
|
+
validateSecretDeclaration(`secret "${name}"`, declared);
|
|
491
|
+
const value = env[envName('E2E_SECRET', name)] ?? declared.value;
|
|
492
|
+
if (!isSecretValue(value)) {
|
|
493
|
+
throw new ConfigurationError('INVALID_CONFIG', `secret "${name}" must be a non-empty string or a provider function, or { value, allowedOrigins? }`);
|
|
494
|
+
}
|
|
495
|
+
secrets.set(name, { name, purpose: 'generic-secret', value, allowedOrigins: declared.allowedOrigins });
|
|
496
|
+
}
|
|
497
|
+
return { credentials, secrets };
|
|
460
498
|
}
|
|
461
499
|
/**
|
|
462
500
|
* SHA-256/JCS digest of resolved config after replacing credential material
|
|
@@ -541,7 +579,6 @@ function computeConfigDigest(raw, projectId) {
|
|
|
541
579
|
: {
|
|
542
580
|
...entry,
|
|
543
581
|
...(isModelInstance(entry.model) ? { model: modelIdentity(entry.model) } : {}),
|
|
544
|
-
...(isModelInstance(entry.visionModel) ? { visionModel: modelIdentity(entry.visionModel) } : {}),
|
|
545
582
|
},
|
|
546
583
|
])),
|
|
547
584
|
}),
|
|
@@ -562,6 +599,12 @@ function computeConfigDigest(raw, projectId) {
|
|
|
562
599
|
},
|
|
563
600
|
]));
|
|
564
601
|
}
|
|
602
|
+
if (raw.secrets !== undefined) {
|
|
603
|
+
sanitized['secrets'] = Object.fromEntries(Object.entries(raw.secrets).map(([name, entry]) => [
|
|
604
|
+
name,
|
|
605
|
+
{ ...normalizeSecretConfig(entry), value: { secretName: name } },
|
|
606
|
+
]));
|
|
607
|
+
}
|
|
565
608
|
if (raw.targets !== undefined) {
|
|
566
609
|
sanitized['targets'] = raw.targets.map((target) => {
|
|
567
610
|
// An engine handle holds live functions; its digest identity is the
|