@e2edev/e2e 0.5.0 → 0.6.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 +64 -25
- package/dist/agent/act.d.ts +2 -2
- package/dist/agent/act.js +14 -37
- package/dist/agent/act.js.map +1 -1
- package/dist/agent/actions.d.ts +2 -2
- package/dist/agent/actions.d.ts.map +1 -1
- package/dist/agent/actions.js +1 -1
- package/dist/agent/ai-sdk.d.ts +1 -2
- package/dist/agent/ai-sdk.d.ts.map +1 -1
- package/dist/agent/ai-sdk.js +1 -2
- package/dist/agent/ai-sdk.js.map +1 -1
- package/dist/agent/default-agent.d.ts +10 -32
- package/dist/agent/default-agent.d.ts.map +1 -1
- package/dist/agent/default-agent.js +6 -13
- package/dist/agent/default-agent.js.map +1 -1
- package/dist/agent/derived.d.ts +1 -1
- package/dist/agent/derived.js +1 -1
- package/dist/agent/error.d.ts +2 -4
- package/dist/agent/error.d.ts.map +1 -1
- package/dist/agent/error.js +3 -5
- package/dist/agent/error.js.map +1 -1
- package/dist/agent/executor.d.ts +23 -52
- package/dist/agent/executor.d.ts.map +1 -1
- package/dist/agent/executor.js +1 -2
- package/dist/agent/executor.js.map +1 -1
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +10 -7
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/invocation.d.ts +8 -6
- package/dist/agent/invocation.d.ts.map +1 -1
- package/dist/agent/invocation.js +9 -4
- package/dist/agent/invocation.js.map +1 -1
- package/dist/agent/ledger.d.ts +17 -12
- package/dist/agent/ledger.d.ts.map +1 -1
- package/dist/agent/ledger.js +6 -9
- package/dist/agent/ledger.js.map +1 -1
- package/dist/agent/model/adapter.d.ts +7 -4
- package/dist/agent/model/adapter.d.ts.map +1 -1
- package/dist/agent/model/adapter.js +2 -2
- package/dist/agent/model/adapter.js.map +1 -1
- package/dist/agent/model/router.d.ts +1 -1
- package/dist/agent/model/router.d.ts.map +1 -1
- package/dist/agent/model/router.js +1 -1
- package/dist/agent/model/router.js.map +1 -1
- package/dist/agent/model/sdk.d.ts +11 -1
- package/dist/agent/model/sdk.d.ts.map +1 -1
- package/dist/agent/model/sdk.js +54 -10
- package/dist/agent/model/sdk.js.map +1 -1
- package/dist/agent/observation.d.ts +7 -7
- package/dist/agent/observation.d.ts.map +1 -1
- package/dist/agent/observation.js +7 -7
- package/dist/agent/observation.js.map +1 -1
- package/dist/agent/phases.d.ts +3 -3
- package/dist/agent/phases.d.ts.map +1 -1
- package/dist/agent/phases.js +4 -4
- package/dist/agent/phases.js.map +1 -1
- package/dist/agent/primitives.d.ts +4 -25
- package/dist/agent/primitives.d.ts.map +1 -1
- package/dist/agent/primitives.js +3 -36
- package/dist/agent/primitives.js.map +1 -1
- package/dist/agent/prompts.d.ts +1 -1
- package/dist/agent/prompts.js +1 -1
- package/dist/agent/protocol.d.ts +2 -3
- package/dist/agent/protocol.d.ts.map +1 -1
- package/dist/agent/protocol.js +2 -3
- package/dist/agent/protocol.js.map +1 -1
- package/dist/agent/public.d.ts +8 -10
- package/dist/agent/public.d.ts.map +1 -1
- package/dist/agent/public.js +7 -8
- package/dist/agent/public.js.map +1 -1
- package/dist/agent/replay.d.ts +2 -2
- package/dist/agent/replay.d.ts.map +1 -1
- package/dist/agent/replay.js +1 -1
- package/dist/agent/secrets.d.ts +3 -3
- package/dist/agent/secrets.d.ts.map +1 -1
- package/dist/agent/secrets.js +4 -4
- package/dist/agent/secrets.js.map +1 -1
- package/dist/agent/step-cache.d.ts +1 -1
- package/dist/agent/step-cache.d.ts.map +1 -1
- package/dist/agent/step-cache.js +7 -1
- package/dist/agent/step-cache.js.map +1 -1
- package/dist/agent/tool-loop.d.ts +9 -33
- package/dist/agent/tool-loop.d.ts.map +1 -1
- package/dist/agent/tool-loop.js +15 -38
- package/dist/agent/tool-loop.js.map +1 -1
- package/dist/agent/tool.d.ts +4 -5
- package/dist/agent/tool.d.ts.map +1 -1
- package/dist/agent/tool.js +2 -7
- package/dist/agent/tool.js.map +1 -1
- package/dist/cache/anchors.d.ts +2 -2
- package/dist/cache/anchors.d.ts.map +1 -1
- package/dist/cache/anchors.js +1 -1
- package/dist/cache/context.d.ts +6 -1
- package/dist/cache/context.d.ts.map +1 -1
- package/dist/cache/context.js +2 -1
- package/dist/cache/context.js.map +1 -1
- package/dist/cache/decide.d.ts +1 -1
- package/dist/cache/decide.js +1 -1
- package/dist/cache/identity.d.ts +9 -9
- package/dist/cache/identity.d.ts.map +1 -1
- package/dist/cache/identity.js +6 -6
- package/dist/cache/identity.js.map +1 -1
- package/dist/cache/recorder.d.ts +4 -2
- package/dist/cache/recorder.d.ts.map +1 -1
- package/dist/cache/recorder.js +10 -1
- package/dist/cache/recorder.js.map +1 -1
- package/dist/cache/relocate.d.ts +2 -2
- package/dist/cache/relocate.d.ts.map +1 -1
- package/dist/cache/relocate.js +1 -1
- package/dist/cache/store.d.ts +1 -1
- package/dist/cache/store.js +1 -1
- package/dist/cache/trace.d.ts +16 -1
- package/dist/cache/trace.d.ts.map +1 -1
- package/dist/cache/trace.js +22 -1
- package/dist/cache/trace.js.map +1 -1
- package/dist/cli/bin.js +9 -1
- package/dist/cli/bin.js.map +1 -1
- package/dist/cli/cache.d.ts +25 -0
- package/dist/cli/cache.d.ts.map +1 -0
- package/dist/cli/cache.js +249 -0
- package/dist/cli/cache.js.map +1 -0
- package/dist/cli/docs-url.d.ts +3 -0
- package/dist/cli/docs-url.d.ts.map +1 -0
- package/dist/cli/docs-url.js +3 -0
- package/dist/cli/docs-url.js.map +1 -0
- package/dist/cli/guide.d.ts +4 -0
- package/dist/cli/guide.d.ts.map +1 -0
- package/dist/cli/guide.js +16 -0
- package/dist/cli/guide.js.map +1 -0
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +211 -42
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/agent-skill.d.ts +34 -0
- package/dist/cli/init/agent-skill.d.ts.map +1 -0
- package/dist/cli/init/agent-skill.js +44 -0
- package/dist/cli/init/agent-skill.js.map +1 -0
- package/dist/cli/init/{backends.d.ts → engines.d.ts} +39 -32
- package/dist/cli/init/engines.d.ts.map +1 -0
- package/dist/cli/init/{backends.js → engines.js} +43 -34
- package/dist/cli/init/engines.js.map +1 -0
- package/dist/cli/init/package.d.ts +19 -3
- package/dist/cli/init/package.d.ts.map +1 -1
- package/dist/cli/init/package.js +20 -20
- package/dist/cli/init/package.js.map +1 -1
- package/dist/cli/init/scaffold.d.ts +3 -3
- package/dist/cli/init/scaffold.d.ts.map +1 -1
- package/dist/cli/init/scaffold.js +13 -12
- package/dist/cli/init/scaffold.js.map +1 -1
- package/dist/cli/init.d.ts +14 -2
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +104 -25
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/signals.d.ts +5 -2
- package/dist/cli/signals.d.ts.map +1 -1
- package/dist/cli/signals.js +9 -3
- package/dist/cli/signals.js.map +1 -1
- package/dist/cli/skill.d.ts +16 -0
- package/dist/cli/skill.d.ts.map +1 -0
- package/dist/cli/skill.js +57 -0
- package/dist/cli/skill.js.map +1 -0
- package/dist/collect/collect.d.ts +40 -3
- package/dist/collect/collect.d.ts.map +1 -1
- package/dist/collect/collect.js +142 -19
- package/dist/collect/collect.js.map +1 -1
- package/dist/collect/registry.d.ts +1 -1
- package/dist/collect/registry.d.ts.map +1 -1
- package/dist/collect/registry.js +2 -2
- package/dist/collect/registry.js.map +1 -1
- package/dist/collect/select.d.ts +1 -1
- package/dist/collect/select.d.ts.map +1 -1
- package/dist/collect/select.js +81 -8
- package/dist/collect/select.js.map +1 -1
- package/dist/config/agent.d.ts +14 -2
- package/dist/config/agent.d.ts.map +1 -1
- package/dist/config/agent.js +36 -11
- package/dist/config/agent.js.map +1 -1
- package/dist/config/app.d.ts +76 -19
- package/dist/config/app.d.ts.map +1 -1
- package/dist/config/app.js +159 -104
- package/dist/config/app.js.map +1 -1
- package/dist/config/diagnose.d.ts +15 -0
- package/dist/config/diagnose.d.ts.map +1 -0
- package/dist/config/diagnose.js +122 -0
- package/dist/config/diagnose.js.map +1 -0
- package/dist/config/load.d.ts +9 -1
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +35 -3
- package/dist/config/load.js.map +1 -1
- package/dist/config/resolve.d.ts +8 -7
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +73 -40
- package/dist/config/resolve.js.map +1 -1
- package/dist/config/validate.d.ts +6 -2
- package/dist/config/validate.d.ts.map +1 -1
- package/dist/config/validate.js +20 -3
- package/dist/config/validate.js.map +1 -1
- package/dist/credentials.d.ts +1 -1
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +1 -1
- package/dist/credentials.js.map +1 -1
- package/dist/{backend → engine}/contract.d.ts +27 -19
- package/dist/engine/contract.d.ts.map +1 -0
- package/dist/{backend → engine}/contract.js +18 -18
- package/dist/engine/contract.js.map +1 -0
- package/dist/{backend → engine}/index.d.ts +141 -79
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/{backend → engine}/index.js +62 -37
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/session.d.ts +23 -0
- package/dist/engine/session.d.ts.map +1 -0
- package/dist/{backend → engine}/session.js +58 -51
- package/dist/engine/session.js.map +1 -0
- package/dist/{backend → engine}/surface.d.ts +11 -11
- package/dist/engine/surface.d.ts.map +1 -0
- package/dist/{backend → engine}/surface.js +2 -2
- package/dist/engine/surface.js.map +1 -0
- package/dist/engine/timing.d.ts.map +1 -0
- package/dist/engine/timing.js +8 -0
- package/dist/engine/timing.js.map +1 -0
- package/dist/expect/async.d.ts +1 -1
- package/dist/expect/async.d.ts.map +1 -1
- package/dist/expect/async.js +37 -1
- package/dist/expect/async.js.map +1 -1
- package/dist/expect/index.js +1 -1
- package/dist/expect/values.d.ts +1 -1
- package/dist/expect/values.d.ts.map +1 -1
- package/dist/expect/values.js +1 -1
- package/dist/expect/values.js.map +1 -1
- package/dist/index.d.ts +3 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -5
- package/dist/index.js.map +1 -1
- package/dist/internal/brands.d.ts +1 -1
- package/dist/internal/brands.d.ts.map +1 -1
- package/dist/internal/brands.js +1 -1
- package/dist/internal/brands.js.map +1 -1
- package/dist/internal/errors.d.ts +37 -19
- package/dist/internal/errors.d.ts.map +1 -1
- package/dist/internal/errors.js +94 -44
- package/dist/internal/errors.js.map +1 -1
- package/dist/internal/globs.d.ts +2 -2
- package/dist/internal/globs.d.ts.map +1 -1
- package/dist/internal/globs.js +2 -2
- package/dist/internal/globs.js.map +1 -1
- package/dist/internal/ids.d.ts +3 -3
- 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/node-version.d.ts +10 -0
- package/dist/internal/node-version.d.ts.map +1 -0
- package/dist/internal/node-version.js +28 -0
- package/dist/internal/node-version.js.map +1 -0
- package/dist/internal/objects.d.ts +21 -0
- package/dist/internal/objects.d.ts.map +1 -0
- package/dist/internal/objects.js +14 -0
- package/dist/internal/objects.js.map +1 -0
- package/dist/internal/package-manager.d.ts +10 -0
- package/dist/internal/package-manager.d.ts.map +1 -0
- package/dist/internal/package-manager.js +43 -0
- package/dist/internal/package-manager.js.map +1 -0
- package/dist/internal/redact.d.ts +1 -1
- package/dist/internal/redact.d.ts.map +1 -1
- package/dist/internal/redact.js +1 -1
- package/dist/internal/redact.js.map +1 -1
- package/dist/internal/suggest.d.ts +16 -0
- package/dist/internal/suggest.d.ts.map +1 -0
- package/dist/internal/suggest.js +61 -0
- package/dist/internal/suggest.js.map +1 -0
- package/dist/internal/text.d.ts +1 -1
- package/dist/internal/text.d.ts.map +1 -1
- package/dist/internal/text.js +1 -1
- package/dist/internal/text.js.map +1 -1
- package/dist/internal/urls.d.ts +3 -3
- package/dist/internal/urls.d.ts.map +1 -1
- package/dist/internal/urls.js +8 -3
- package/dist/internal/urls.js.map +1 -1
- package/dist/locator/engine.d.ts +7 -7
- package/dist/locator/engine.d.ts.map +1 -1
- package/dist/locator/engine.js +14 -14
- package/dist/locator/engine.js.map +1 -1
- package/dist/locator/expression.d.ts +5 -3
- package/dist/locator/expression.d.ts.map +1 -1
- package/dist/locator/expression.js +25 -5
- package/dist/locator/expression.js.map +1 -1
- package/dist/locator/screen.d.ts +1 -1
- package/dist/locator/screen.d.ts.map +1 -1
- package/dist/locator/screen.js +3 -3
- package/dist/locator/screen.js.map +1 -1
- package/dist/report/build.d.ts +10 -9
- package/dist/report/build.d.ts.map +1 -1
- package/dist/report/build.js +25 -22
- package/dist/report/build.js.map +1 -1
- package/dist/report/code-frame.d.ts +8 -4
- package/dist/report/code-frame.d.ts.map +1 -1
- package/dist/report/code-frame.js +23 -18
- package/dist/report/code-frame.js.map +1 -1
- package/dist/report/debug-steps.js +1 -1
- package/dist/report/debug-steps.js.map +1 -1
- package/dist/report/format.d.ts +73 -0
- package/dist/report/format.d.ts.map +1 -0
- package/dist/report/format.js +147 -0
- package/dist/report/format.js.map +1 -0
- package/dist/report/junit.d.ts +1 -1
- package/dist/report/junit.d.ts.map +1 -1
- package/dist/report/junit.js +1 -1
- package/dist/report/junit.js.map +1 -1
- package/dist/report/list.d.ts +96 -47
- package/dist/report/list.d.ts.map +1 -1
- package/dist/report/list.js +489 -244
- package/dist/report/list.js.map +1 -1
- package/dist/report/live-window.d.ts +28 -0
- package/dist/report/live-window.d.ts.map +1 -0
- package/dist/report/live-window.js +102 -0
- package/dist/report/live-window.js.map +1 -0
- package/dist/report/write.d.ts +1 -1
- package/dist/report/write.d.ts.map +1 -1
- package/dist/report/write.js +1 -1
- package/dist/report/write.js.map +1 -1
- package/dist/run/budget.d.ts +2 -2
- package/dist/run/budget.js +2 -2
- package/dist/run/declared-processes.d.ts +30 -0
- package/dist/run/declared-processes.d.ts.map +1 -0
- package/dist/run/declared-processes.js +61 -0
- package/dist/run/declared-processes.js.map +1 -0
- package/dist/run/events.d.ts +30 -2
- package/dist/run/events.d.ts.map +1 -1
- package/dist/run/events.js.map +1 -1
- package/dist/run/execute.d.ts +19 -16
- package/dist/run/execute.d.ts.map +1 -1
- package/dist/run/execute.js +65 -67
- package/dist/run/execute.js.map +1 -1
- package/dist/run/fixture-recording.d.ts +10 -4
- package/dist/run/fixture-recording.d.ts.map +1 -1
- package/dist/run/fixture-recording.js +19 -6
- package/dist/run/fixture-recording.js.map +1 -1
- package/dist/run/fixtures.d.ts +2 -2
- package/dist/run/fixtures.d.ts.map +1 -1
- package/dist/run/fixtures.js +72 -44
- package/dist/run/fixtures.js.map +1 -1
- package/dist/run/in-process.d.ts +1 -1
- package/dist/run/in-process.js +1 -1
- package/dist/run/managed-process.d.ts +46 -9
- package/dist/run/managed-process.d.ts.map +1 -1
- package/dist/run/managed-process.js +136 -50
- package/dist/run/managed-process.js.map +1 -1
- package/dist/run/realm.d.ts +2 -2
- package/dist/run/realm.js +2 -2
- package/dist/run/runner.d.ts +23 -1
- package/dist/run/runner.d.ts.map +1 -1
- package/dist/run/runner.js +111 -40
- package/dist/run/runner.js.map +1 -1
- package/dist/run/scheduler.d.ts +5 -5
- package/dist/run/scheduler.d.ts.map +1 -1
- package/dist/run/scheduler.js +7 -7
- package/dist/run/scheduler.js.map +1 -1
- package/dist/run/serial.d.ts +10 -2
- package/dist/run/serial.d.ts.map +1 -1
- package/dist/run/serial.js +5 -3
- package/dist/run/serial.js.map +1 -1
- package/dist/run/sessions.d.ts +10 -10
- package/dist/run/sessions.d.ts.map +1 -1
- package/dist/run/sessions.js +11 -11
- package/dist/run/sessions.js.map +1 -1
- package/dist/run/steps.d.ts +3 -3
- package/dist/run/steps.d.ts.map +1 -1
- package/dist/run/steps.js +1 -1
- package/dist/run/steps.js.map +1 -1
- package/dist/run/units.d.ts +1 -1
- package/dist/run/units.js +1 -1
- package/dist/run/worker/entry.d.ts +1 -1
- package/dist/run/worker/entry.js +2 -2
- package/dist/run/worker/entry.js.map +1 -1
- package/dist/run/worker/protocol.d.ts +18 -6
- package/dist/run/worker/protocol.d.ts.map +1 -1
- package/dist/run/worker/protocol.js +1 -1
- package/dist/run/worker/protocol.js.map +1 -1
- package/dist/run/worker/session.d.ts +2 -2
- package/dist/run/worker/session.d.ts.map +1 -1
- package/dist/run/worker/session.js +5 -3
- package/dist/run/worker/session.js.map +1 -1
- package/dist/types.d.ts +58 -41
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -2
- package/package.json +13 -12
- package/skills/e2e/SKILL.md +110 -0
- package/skills/e2e/references/agent.md +210 -0
- package/skills/e2e/references/debugging.md +81 -0
- package/skills/e2e/references/running.md +153 -0
- package/skills/e2e/references/setup.md +238 -0
- package/skills/e2e/references/writing-tests.md +289 -0
- package/dist/backend/contract.d.ts.map +0 -1
- package/dist/backend/contract.js.map +0 -1
- package/dist/backend/index.d.ts.map +0 -1
- package/dist/backend/index.js.map +0 -1
- package/dist/backend/session.d.ts +0 -23
- package/dist/backend/session.d.ts.map +0 -1
- package/dist/backend/session.js.map +0 -1
- package/dist/backend/surface.d.ts.map +0 -1
- package/dist/backend/surface.js.map +0 -1
- package/dist/backend/timing.d.ts.map +0 -1
- package/dist/backend/timing.js +0 -8
- package/dist/backend/timing.js.map +0 -1
- package/dist/cli/init/backends.d.ts.map +0 -1
- package/dist/cli/init/backends.js.map +0 -1
- package/dist/report/live-status.d.ts +0 -51
- package/dist/report/live-status.d.ts.map +0 -1
- package/dist/report/live-status.js +0 -163
- package/dist/report/live-status.js.map +0 -1
- package/dist/run/fixture-legacy.d.ts +0 -36
- package/dist/run/fixture-legacy.d.ts.map +0 -1
- package/dist/run/fixture-legacy.js +0 -143
- package/dist/run/fixture-legacy.js.map +0 -1
- /package/dist/{backend → engine}/timing.d.ts +0 -0
package/dist/cli/index.d.ts
CHANGED
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,eAAe;AA4Wf,4CAA4C;AAC5C,wBAAsB,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAcjE"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,8 +1,22 @@
|
|
|
1
|
-
/** e2e CLI
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
/** e2e CLI. */
|
|
2
|
+
import { resolve as resolvePath } from 'node:path';
|
|
3
|
+
import { Command, CommanderError, InvalidArgumentError, Option } from 'commander';
|
|
4
|
+
import picocolors from 'picocolors';
|
|
5
|
+
import { packageVersion } from '../internal/package-version.js';
|
|
6
|
+
import { classifyError, exitCodeForCategory } from '../internal/errors.js';
|
|
7
|
+
import { list, run } from '../run/runner.js';
|
|
8
|
+
import { cache } from './cache.js';
|
|
9
|
+
import { DOCS_URL } from './docs-url.js';
|
|
10
|
+
import { guide } from './guide.js';
|
|
4
11
|
import { init } from './init.js';
|
|
5
12
|
import { SignalLadder } from './signals.js';
|
|
13
|
+
import { skillTopics } from './skill.js';
|
|
14
|
+
/**
|
|
15
|
+
* Help text always carries color; commander strips it when the stream it
|
|
16
|
+
* writes to has none (not a TTY, `NO_COLOR`), so the decision is made once,
|
|
17
|
+
* per stream, by the writer.
|
|
18
|
+
*/
|
|
19
|
+
const pc = picocolors.createColors(true);
|
|
6
20
|
/** Shape check only; the config resolver applies each flag's bounds. */
|
|
7
21
|
function parseNonNegativeInt(value) {
|
|
8
22
|
const parsed = Number(value);
|
|
@@ -21,53 +35,144 @@ const REPORTERS = ['list', 'json', 'junit'];
|
|
|
21
35
|
function isReporter(value) {
|
|
22
36
|
return REPORTERS.includes(value);
|
|
23
37
|
}
|
|
24
|
-
|
|
25
|
-
|
|
38
|
+
/** Reporter ids, comma-separated; the CLI only rejects ids it does not know. */
|
|
39
|
+
function parseReporters(value) {
|
|
40
|
+
return parseList(value).map((id) => {
|
|
41
|
+
if (!isReporter(id)) {
|
|
42
|
+
throw new InvalidArgumentError(`unknown reporter "${id}"; expected ${REPORTERS.join(', ')}`);
|
|
43
|
+
}
|
|
44
|
+
return id;
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
const TAG_MODES = ['any', 'all'];
|
|
48
|
+
const LIST_REPORTERS = ['list', 'json'];
|
|
49
|
+
/** One `e2e list` line: `file › title [target]`, with the skip reason when there is one. */
|
|
50
|
+
function formatListedPair(pair) {
|
|
51
|
+
const line = `${pair.file} › ${pair.titlePath.join(' › ')} [${pair.target}]`;
|
|
52
|
+
return pair.disposition === 'skip' ? `${line} (skipped: ${pair.skipReason ?? 'skipped'})` : line;
|
|
53
|
+
}
|
|
54
|
+
/** The exit-code table of the CLI reference; the runner decides which one applies. */
|
|
55
|
+
const EXIT_CODES = [
|
|
56
|
+
['0', 'every selected test passed, was flaky, or was skipped'],
|
|
57
|
+
['1', 'a test failed or timed out'],
|
|
58
|
+
['2', 'CLI, config, or agent policy error'],
|
|
59
|
+
['3', 'engine, app process, model provider, or artifact failure'],
|
|
60
|
+
['4', 'internal runner error'],
|
|
61
|
+
['130', 'interrupted by Ctrl-C or a CI signal'],
|
|
62
|
+
];
|
|
63
|
+
/** A titled block indented like commander's own help sections. */
|
|
64
|
+
function helpSection(title, lines) {
|
|
65
|
+
return [pc.bold(title), ...lines.map((line) => ` ${line}`)].join('\n');
|
|
66
|
+
}
|
|
67
|
+
function examples(commands) {
|
|
68
|
+
return helpSection('Examples:', commands.map((command) => `${pc.dim('$')} ${command}`));
|
|
69
|
+
}
|
|
70
|
+
function docsLine(path = '') {
|
|
71
|
+
return `Docs: ${pc.underline(`${DOCS_URL}${path}`)}`;
|
|
26
72
|
}
|
|
27
73
|
/** Builds the commander program. */
|
|
28
74
|
function createProgram() {
|
|
75
|
+
const version = packageVersion(import.meta.url, '../../package.json', '0.0.0');
|
|
29
76
|
const program = new Command('e2e');
|
|
30
|
-
|
|
31
|
-
//
|
|
77
|
+
// The help option, the error hint, and the help styles are copied into each
|
|
78
|
+
// subcommand as it is created, so they are set before any `.command()`.
|
|
79
|
+
program
|
|
80
|
+
.usage('<command> [options]')
|
|
81
|
+
.version(version, '-v, --version', 'print the version')
|
|
82
|
+
.helpOption('-h, --help', 'show help')
|
|
83
|
+
.helpCommand('help [command]', 'show help for a command')
|
|
84
|
+
.showHelpAfterError('(add --help for usage)')
|
|
85
|
+
.configureHelp({
|
|
86
|
+
styleTitle: pc.bold,
|
|
87
|
+
styleCommandText: pc.cyan,
|
|
88
|
+
styleOptionTerm: pc.cyan,
|
|
89
|
+
styleSubcommandTerm: pc.cyan,
|
|
90
|
+
styleArgumentTerm: pc.cyan,
|
|
91
|
+
})
|
|
92
|
+
.addHelpText('before', `${pc.bold(`e2e v${version}`)} ${pc.dim('·')} an open framework for agentic end-to-end testing\n`)
|
|
93
|
+
.addHelpText('after', [
|
|
94
|
+
'',
|
|
95
|
+
examples([
|
|
96
|
+
'e2e init',
|
|
97
|
+
'e2e run',
|
|
98
|
+
'e2e run tests/signup.e2e.ts --headed',
|
|
99
|
+
'e2e run --tag smoke --reporter list,junit',
|
|
100
|
+
'e2e list --tag smoke',
|
|
101
|
+
'e2e cache ls',
|
|
102
|
+
'e2e guide',
|
|
103
|
+
]),
|
|
104
|
+
'',
|
|
105
|
+
`Run ${pc.cyan('e2e <command> --help')} for the flags of one command.`,
|
|
106
|
+
docsLine(),
|
|
107
|
+
].join('\n'));
|
|
108
|
+
// Commander would exit(1) on a usage error itself; the exit-code table reserves 1
|
|
32
109
|
// for product failures and 2 for CLI errors, so exits are decided in main.
|
|
33
110
|
program.exitOverride();
|
|
34
111
|
program
|
|
35
112
|
.command('init')
|
|
36
|
-
.
|
|
37
|
-
.
|
|
38
|
-
.
|
|
39
|
-
|
|
113
|
+
.summary('scaffold an ESM package, e2e.config.ts, an example test, .gitignore entries, and the agent skill')
|
|
114
|
+
.description('Scaffold a project without touching existing files: an ESM package.json, e2e.config.ts, tests/example.e2e.ts, .gitignore entries, and the e2e skill for coding agents. Prompts for the engine, for AI support, and for the skill directories, then offers to install the dependencies; --yes takes the defaults, with the skill in .agents/skills and .claude/skills.')
|
|
115
|
+
.argument('[directory]', 'project directory, created when missing (default: the current directory)')
|
|
116
|
+
.option('-y, --yes', 'skip the prompts: AI on, no engine, no installation')
|
|
117
|
+
.addHelpText('after', ['', examples(['e2e init', 'e2e init my-app', 'e2e init --yes']), '', docsLine('/reference/cli')].join('\n'))
|
|
118
|
+
.action(async (directory, options) => {
|
|
119
|
+
process.exitCode = await init(resolvePath(process.cwd(), directory ?? '.'), {
|
|
120
|
+
...options,
|
|
121
|
+
...(directory === undefined ? {} : { directory }),
|
|
122
|
+
// Prompts need a terminal on both ends; a pipe or a CI log has neither.
|
|
123
|
+
interactive: process.stdin.isTTY === true && process.stdout.isTTY === true,
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
program
|
|
127
|
+
.command('guide')
|
|
128
|
+
.summary('print the e2e skill for coding agents')
|
|
129
|
+
.description('Print the skill that init installs: how to set up e2e, write tests, use agent steps, run the CLI, and read a failing run. Without a topic, prints the overview and the topic list.')
|
|
130
|
+
.argument('[topic]', `one of ${skillTopics().join(', ')}`)
|
|
131
|
+
.addHelpText('after', ['', examples(['e2e guide', 'e2e guide writing-tests']), '', docsLine('/reference/cli#e2e-guide')].join('\n'))
|
|
132
|
+
.action((topic) => {
|
|
133
|
+
process.exitCode = guide(topic);
|
|
40
134
|
});
|
|
41
135
|
program
|
|
42
136
|
.command('run')
|
|
43
|
-
.
|
|
44
|
-
.
|
|
45
|
-
.
|
|
46
|
-
.
|
|
47
|
-
.option('--
|
|
48
|
-
.option('--
|
|
49
|
-
.option('--
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
.
|
|
54
|
-
.option('--no-
|
|
55
|
-
.
|
|
56
|
-
.option('--
|
|
57
|
-
.option('--
|
|
58
|
-
.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
137
|
+
.summary('run the tests')
|
|
138
|
+
.description('Run the tests the config discovers and write .e2e/report.json. Files, directories, and quoted globs narrow that selection, as do --tag and --target.')
|
|
139
|
+
.argument('[files...]', 'test files, directories, or globs relative to the project root')
|
|
140
|
+
.optionsGroup('Selection:')
|
|
141
|
+
.option('--config <path>', 'config file (default: the nearest e2e.config.ts)')
|
|
142
|
+
.option('--target <ids>', 'comma-separated target names (default: all targets)', parseList)
|
|
143
|
+
.option('--tag <tag>', 'only tests with this tag; repeat to combine', (value, previous = []) => [
|
|
144
|
+
...previous,
|
|
145
|
+
value,
|
|
146
|
+
])
|
|
147
|
+
.addOption(new Option('--tag-mode <mode>', 'how repeated tags combine').choices(TAG_MODES).default('any'))
|
|
148
|
+
.option('--pass-with-no-tests', 'exit 0 on an empty selection instead of NO_TESTS')
|
|
149
|
+
.optionsGroup('Execution:')
|
|
150
|
+
.option('--headed', 'show the UI while tests run, when the engine supports it')
|
|
151
|
+
.option('--workers <n>', 'parallel workers (default: from the config)', parseNonNegativeInt)
|
|
152
|
+
.option('--retries <n>', 'retries per failing test (default: from the config)', parseNonNegativeInt)
|
|
153
|
+
.option('--no-cache', 'run with the trace cache off, whatever the config says')
|
|
154
|
+
.optionsGroup('Output:')
|
|
155
|
+
.option('--reporter <ids>', 'comma-separated reporters: list, json, junit', parseReporters)
|
|
156
|
+
.option('--artifacts <dir>', 'artifact root (default: .e2e/artifacts)')
|
|
157
|
+
.option('--debug', 'print phase timings and the agent step table to stderr')
|
|
158
|
+
.option('--ai-trace', 'record every model call to .e2e/ai-trace.json (unbox-ai)')
|
|
159
|
+
.addHelpText('after', [
|
|
160
|
+
'',
|
|
161
|
+
examples([
|
|
162
|
+
'e2e run',
|
|
163
|
+
'e2e run tests/signup.e2e.ts --headed',
|
|
164
|
+
"e2e run 'tests/**/*.smoke.e2e.ts' --target web --tag smoke",
|
|
165
|
+
'e2e run --reporter list,junit --workers 4 --retries 2',
|
|
166
|
+
'E2E_MODEL=provider/model-id E2E_MODEL_API_KEY=... e2e run --no-cache',
|
|
167
|
+
]),
|
|
168
|
+
'',
|
|
169
|
+
helpSection('Exit codes:', EXIT_CODES.map(([code, meaning]) => `${pc.cyan(code.padEnd(3))} ${meaning}`)),
|
|
170
|
+
'',
|
|
171
|
+
docsLine('/reference/cli#exit-codes'),
|
|
172
|
+
].join('\n'))
|
|
173
|
+
.action(async (files,
|
|
174
|
+
// Each value is what its parser returned, so a bad one never reaches here.
|
|
175
|
+
options) => {
|
|
71
176
|
const signals = new SignalLadder();
|
|
72
177
|
const release = signals.arm();
|
|
73
178
|
try {
|
|
@@ -76,12 +181,11 @@ function createProgram() {
|
|
|
76
181
|
configPath: options.config,
|
|
77
182
|
targetIds: options.target,
|
|
78
183
|
tags: options.tag,
|
|
79
|
-
tagMode,
|
|
184
|
+
tagMode: options.tagMode,
|
|
80
185
|
headed: options.headed,
|
|
81
186
|
retries: options.retries,
|
|
82
187
|
workers: options.workers,
|
|
83
|
-
|
|
84
|
-
reporters: reporter?.filter(isReporter),
|
|
188
|
+
reporters: options.reporter,
|
|
85
189
|
artifactsDir: options.artifacts,
|
|
86
190
|
noCache: options.cache === false,
|
|
87
191
|
passWithNoTests: options.passWithNoTests,
|
|
@@ -96,6 +200,71 @@ function createProgram() {
|
|
|
96
200
|
release();
|
|
97
201
|
}
|
|
98
202
|
});
|
|
203
|
+
program
|
|
204
|
+
.command('list')
|
|
205
|
+
.summary('print the tests a run would select, without running them')
|
|
206
|
+
.description('Collect and select tests exactly as run does, print one line per test and target (file › title [target]), and exit. Nothing starts: no app process, no engine, no worker. The same files, --tag, and --target flags narrow the selection.')
|
|
207
|
+
.argument('[files...]', 'test files, directories, or globs relative to the project root')
|
|
208
|
+
.optionsGroup('Selection:')
|
|
209
|
+
.option('--config <path>', 'config file (default: the nearest e2e.config.ts)')
|
|
210
|
+
.option('--target <ids>', 'comma-separated target names (default: all targets)', parseList)
|
|
211
|
+
.option('--tag <tag>', 'only tests with this tag; repeat to combine', (value, previous = []) => [
|
|
212
|
+
...previous,
|
|
213
|
+
value,
|
|
214
|
+
])
|
|
215
|
+
.addOption(new Option('--tag-mode <mode>', 'how repeated tags combine').choices(TAG_MODES).default('any'))
|
|
216
|
+
.option('--pass-with-no-tests', 'exit 0 on an empty selection instead of NO_TESTS')
|
|
217
|
+
.optionsGroup('Output:')
|
|
218
|
+
.addOption(new Option('--reporter <id>', 'list prints one line per pair; json prints { pairs: [...] }')
|
|
219
|
+
.choices(LIST_REPORTERS)
|
|
220
|
+
.default('list'))
|
|
221
|
+
.addHelpText('after', [
|
|
222
|
+
'',
|
|
223
|
+
examples(['e2e list', 'e2e list tests/signup.e2e.ts', 'e2e list --tag smoke --target web', 'e2e list --reporter json']),
|
|
224
|
+
'',
|
|
225
|
+
docsLine('/reference/cli#e2e-list'),
|
|
226
|
+
].join('\n'))
|
|
227
|
+
.action(async (files, options) => {
|
|
228
|
+
let pairs;
|
|
229
|
+
try {
|
|
230
|
+
({ pairs } = await list({
|
|
231
|
+
files,
|
|
232
|
+
configPath: options.config,
|
|
233
|
+
targetIds: options.target,
|
|
234
|
+
tags: options.tag,
|
|
235
|
+
tagMode: options.tagMode,
|
|
236
|
+
passWithNoTests: options.passWithNoTests,
|
|
237
|
+
}));
|
|
238
|
+
}
|
|
239
|
+
catch (cause) {
|
|
240
|
+
const error = classifyError(cause);
|
|
241
|
+
process.stderr.write(`${error.code}: ${error.message}\n`);
|
|
242
|
+
process.exitCode = exitCodeForCategory(error.category);
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
process.stdout.write(options.reporter === 'json'
|
|
246
|
+
? `${JSON.stringify({ pairs }, null, 2)}\n`
|
|
247
|
+
: pairs.map((pair) => `${formatListedPair(pair)}\n`).join(''));
|
|
248
|
+
process.exitCode = 0;
|
|
249
|
+
});
|
|
250
|
+
const cacheCommand = program
|
|
251
|
+
.command('cache')
|
|
252
|
+
.summary('inspect, measure, and clear the trace cache')
|
|
253
|
+
.description('Read the trace cache the runs write under .e2e/cache: what a committed cache holds, how much room it takes, and how to empty it. Reads the same config as e2e run, so cache.dir and --config decide which store is meant.')
|
|
254
|
+
.addHelpText('after', ['', examples(['e2e cache ls', 'e2e cache stats', 'e2e cache clear']), '', docsLine('/reference/cli#e2e-cache')].join('\n'));
|
|
255
|
+
const cacheSubcommand = (name, summary, description) => {
|
|
256
|
+
cacheCommand
|
|
257
|
+
.command(name)
|
|
258
|
+
.summary(summary)
|
|
259
|
+
.description(description)
|
|
260
|
+
.option('--config <path>', 'config file (default: the nearest e2e.config.ts)')
|
|
261
|
+
.action(async (options) => {
|
|
262
|
+
process.exitCode = await cache(name, options);
|
|
263
|
+
});
|
|
264
|
+
};
|
|
265
|
+
cacheSubcommand('ls', 'list the cached traces', 'Print one row per cached trace: the test and target it was recorded for, the digest of its instruction, its age, and how many actions a replay would run.');
|
|
266
|
+
cacheSubcommand('clear', 'delete every cached trace', 'Delete the cache files and the directory itself; files the runner never wrote are left alone.');
|
|
267
|
+
cacheSubcommand('stats', 'print the entry count and size', 'Print the store directory, how many readable entries it holds, and how many bytes they take.');
|
|
99
268
|
return program;
|
|
100
269
|
}
|
|
101
270
|
/** CLI entry invoked by the bin wrapper. */
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** The `e2e init` step that installs the bundled skill for coding agents. */
|
|
2
|
+
import { type SkillFile } from '../skill.ts';
|
|
3
|
+
/** Where project skills live: most agents read `.agents/skills`; Claude Code reads `.claude/skills`. */
|
|
4
|
+
export declare const SKILL_LOCATIONS: readonly [{
|
|
5
|
+
readonly dir: '.agents/skills';
|
|
6
|
+
readonly hint: 'Codex, Cursor, Copilot, Gemini CLI, OpenCode, Zed, and most other agents';
|
|
7
|
+
}, {
|
|
8
|
+
readonly dir: '.claude/skills';
|
|
9
|
+
readonly hint: 'Claude Code';
|
|
10
|
+
}];
|
|
11
|
+
export interface SkillInstall {
|
|
12
|
+
/** Project-relative skill directory, e.g. `.agents/skills/e2e`. */
|
|
13
|
+
readonly relative: string;
|
|
14
|
+
/** True when the directory already held a copy, so the write is an update. */
|
|
15
|
+
readonly existing: boolean;
|
|
16
|
+
readonly files: readonly {
|
|
17
|
+
readonly absolute: string;
|
|
18
|
+
readonly content: string;
|
|
19
|
+
}[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Known locations that hold a copy of the skill. The directory is the marker,
|
|
23
|
+
* not `SKILL.md`, so a copy that lost files is repaired rather than ignored.
|
|
24
|
+
*/
|
|
25
|
+
export declare function findInstalledSkillDirs(cwd: string): string[];
|
|
26
|
+
/**
|
|
27
|
+
* Plans the writes for the given directories from the bundled files. A
|
|
28
|
+
* directory without the skill is created and one whose copy differs from the
|
|
29
|
+
* bundle is rewritten; an up-to-date copy needs nothing and is left out. Files
|
|
30
|
+
* the bundle does not ship are never removed. An empty bundle with somewhere
|
|
31
|
+
* to write is a broken installation, never a set of current copies.
|
|
32
|
+
*/
|
|
33
|
+
export declare function planSkillInstall(cwd: string, dirs: readonly string[], bundled: readonly SkillFile[]): SkillInstall[];
|
|
34
|
+
//# sourceMappingURL=agent-skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-skill.d.ts","sourceRoot":"","sources":["../../../src/cli/init/agent-skill.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAI7E,OAAO,EAAqC,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAShF,wGAAwG;AACxG,eAAO,MAAM,eAAe;kBACnB,gBAAgB;mBAAQ,0EAA0E;;kBAClG,gBAAgB;mBAAQ,aAAa;EACD,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACpF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAE5D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,SAAS,EAAE,GAAG,YAAY,EAAE,CAiBpH"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** The `e2e init` step that installs the bundled skill for coding agents. */
|
|
2
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { MISSING_SKILL_MESSAGE, SKILL_NAME } from '../skill.js';
|
|
5
|
+
/** Where project skills live: most agents read `.agents/skills`; Claude Code reads `.claude/skills`. */
|
|
6
|
+
export const SKILL_LOCATIONS = [
|
|
7
|
+
{ dir: '.agents/skills', hint: 'Codex, Cursor, Copilot, Gemini CLI, OpenCode, Zed, and most other agents' },
|
|
8
|
+
{ dir: '.claude/skills', hint: 'Claude Code' },
|
|
9
|
+
];
|
|
10
|
+
/**
|
|
11
|
+
* Known locations that hold a copy of the skill. The directory is the marker,
|
|
12
|
+
* not `SKILL.md`, so a copy that lost files is repaired rather than ignored.
|
|
13
|
+
*/
|
|
14
|
+
export function findInstalledSkillDirs(cwd) {
|
|
15
|
+
return SKILL_LOCATIONS.map((location) => location.dir).filter((dir) => existsSync(path.join(cwd, dir, SKILL_NAME)));
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Plans the writes for the given directories from the bundled files. A
|
|
19
|
+
* directory without the skill is created and one whose copy differs from the
|
|
20
|
+
* bundle is rewritten; an up-to-date copy needs nothing and is left out. Files
|
|
21
|
+
* the bundle does not ship are never removed. An empty bundle with somewhere
|
|
22
|
+
* to write is a broken installation, never a set of current copies.
|
|
23
|
+
*/
|
|
24
|
+
export function planSkillInstall(cwd, dirs, bundled) {
|
|
25
|
+
if (dirs.length > 0 && bundled.length === 0)
|
|
26
|
+
throw new Error(MISSING_SKILL_MESSAGE);
|
|
27
|
+
const installs = [];
|
|
28
|
+
for (const dir of dirs) {
|
|
29
|
+
const root = path.join(cwd, dir, SKILL_NAME);
|
|
30
|
+
const current = bundled.every((file) => {
|
|
31
|
+
const absolute = path.join(root, file.relative);
|
|
32
|
+
return existsSync(absolute) && readFileSync(absolute, 'utf8') === file.content;
|
|
33
|
+
});
|
|
34
|
+
if (current)
|
|
35
|
+
continue;
|
|
36
|
+
installs.push({
|
|
37
|
+
relative: `${dir}/${SKILL_NAME}`,
|
|
38
|
+
existing: existsSync(root),
|
|
39
|
+
files: bundled.map((file) => ({ absolute: path.join(root, file.relative), content: file.content })),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return installs;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=agent-skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-skill.js","sourceRoot":"","sources":["../../../src/cli/init/agent-skill.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAkB,MAAM,aAAa,CAAC;AAShF,wGAAwG;AACxG,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,0EAA0E,EAAE;IAC3G,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,aAAa,EAAE;CACH,CAAC;AAU9C;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AACtH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,IAAuB,EAAE,OAA6B;IAClG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChD,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC;QACjF,CAAC,CAAC,CAAC;QACH,IAAI,OAAO;YAAE,SAAS;QACtB,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,GAAG,GAAG,IAAI,UAAU,EAAE;YAChC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC;YAC1B,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;SACpG,CAAC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/** CLI scaffold presets.
|
|
2
|
-
export interface
|
|
1
|
+
/** CLI scaffold presets. Engine packages are referenced as generated source, never imported. */
|
|
2
|
+
export interface EnginePreset {
|
|
3
3
|
readonly id: string;
|
|
4
4
|
readonly label: string;
|
|
5
5
|
readonly hint: string;
|
|
@@ -11,48 +11,55 @@ export interface BackendPreset {
|
|
|
11
11
|
readonly runCommand: string;
|
|
12
12
|
}
|
|
13
13
|
/** Builds prompt choices and scaffolds with defaults for the machine running init. */
|
|
14
|
-
export declare function
|
|
15
|
-
readonly id: 'none';
|
|
16
|
-
readonly label: 'None';
|
|
17
|
-
readonly hint: 'HTTP tests or your own backend';
|
|
18
|
-
readonly dependencies: {};
|
|
19
|
-
readonly imports: readonly [];
|
|
20
|
-
readonly config: ` app: { url: process.env.APP_URL ?? 'http://localhost:3000' },
|
|
21
|
-
// Add a backend here when your tests need to drive an app.
|
|
22
|
-
targets: [{ name: 'default', platform: 'custom' }],`;
|
|
23
|
-
readonly example: `import { test, expect } from '@e2edev/e2e';
|
|
24
|
-
|
|
25
|
-
test('app responds', async () => {
|
|
26
|
-
const response = await fetch(process.env.APP_URL ?? 'http://localhost:3000');
|
|
27
|
-
expect(response.ok).toBe(true);
|
|
28
|
-
});
|
|
29
|
-
`;
|
|
30
|
-
readonly runCommand: 'APP_URL=http://localhost:3000 npx --no-install e2e run';
|
|
31
|
-
}, {
|
|
14
|
+
export declare function getEnginePresets(): readonly [{
|
|
32
15
|
readonly id: 'playwright';
|
|
33
16
|
readonly label: 'Playwright';
|
|
34
17
|
readonly hint: 'browser testing';
|
|
35
18
|
readonly dependencies: {
|
|
36
|
-
readonly '@e2edev/playwright':
|
|
19
|
+
readonly '@e2edev/playwright': "0.x";
|
|
37
20
|
};
|
|
38
21
|
readonly imports: readonly ["import { playwright } from '@e2edev/playwright';"];
|
|
39
|
-
readonly config: ` app
|
|
40
|
-
targets: [{
|
|
22
|
+
readonly config: ` // The engine declares the app it drives; APP_URL overrides the default at run time.
|
|
23
|
+
targets: [{
|
|
24
|
+
name: 'web',
|
|
25
|
+
platform: 'web',
|
|
26
|
+
engine: playwright({
|
|
27
|
+
url: process.env.APP_URL ?? 'http://localhost:3000',
|
|
28
|
+
// Let the runner start the dev server and wait for url to answer:
|
|
29
|
+
// command: { executable: 'npm', args: ['run', 'dev'] },
|
|
30
|
+
}),
|
|
31
|
+
}],`;
|
|
41
32
|
readonly example: `import { test } from '@e2edev/playwright';
|
|
42
33
|
import { expect } from '@e2edev/e2e';
|
|
43
34
|
|
|
44
35
|
test('app opens', async ({ app, web }) => {
|
|
45
|
-
await app.open();
|
|
46
|
-
await expect(web
|
|
36
|
+
await app.open('/');
|
|
37
|
+
await expect(web.locator('body')).toBeVisible();
|
|
47
38
|
});
|
|
48
39
|
`;
|
|
49
40
|
readonly aiExample: `
|
|
50
41
|
// Runs when E2E_MODEL and E2E_MODEL_API_KEY are set:
|
|
51
42
|
// test('the agent drives a flow', async ({ app, agent }) => {
|
|
52
|
-
// await app.open();
|
|
43
|
+
// await app.open('/');
|
|
53
44
|
// await agent.act('one goal in plain language');
|
|
54
45
|
// await agent.assert('one question about the screen');
|
|
55
46
|
// });
|
|
47
|
+
`;
|
|
48
|
+
readonly runCommand: 'APP_URL=http://localhost:3000 npx --no-install e2e run';
|
|
49
|
+
}, {
|
|
50
|
+
readonly id: 'none';
|
|
51
|
+
readonly label: 'None';
|
|
52
|
+
readonly hint: 'HTTP tests or your own engine';
|
|
53
|
+
readonly dependencies: {};
|
|
54
|
+
readonly imports: readonly [];
|
|
55
|
+
readonly config: ` // Add an engine here when your tests need to drive an app.
|
|
56
|
+
targets: [{ name: 'default', platform: 'custom' }],`;
|
|
57
|
+
readonly example: `import { test, expect } from '@e2edev/e2e';
|
|
58
|
+
|
|
59
|
+
test('app responds', async () => {
|
|
60
|
+
const response = await fetch(process.env.APP_URL ?? 'http://localhost:3000');
|
|
61
|
+
expect(response.ok).toBe(true);
|
|
62
|
+
});
|
|
56
63
|
`;
|
|
57
64
|
readonly runCommand: 'APP_URL=http://localhost:3000 npx --no-install e2e run';
|
|
58
65
|
}, {
|
|
@@ -60,16 +67,16 @@ test('app opens', async ({ app, web }) => {
|
|
|
60
67
|
readonly label: 'agent-device';
|
|
61
68
|
readonly hint: 'mobile testing: iOS and Android';
|
|
62
69
|
readonly dependencies: {
|
|
63
|
-
readonly '@e2edev/agent-device':
|
|
70
|
+
readonly '@e2edev/agent-device': "0.x";
|
|
64
71
|
};
|
|
65
72
|
readonly imports: readonly ["import { agentDevice } from '@e2edev/agent-device';"];
|
|
66
|
-
readonly config: " // Requires Xcode and an iOS simulator. Replace Settings with your app's bundle ID.\n targets: [{ name: 'ios', platform: 'ios',
|
|
73
|
+
readonly config: " // Requires Xcode and an iOS simulator. Replace Settings with your app's bundle ID.\n targets: [{ name: 'ios', platform: 'ios', engine: agentDevice({ platform: 'ios', app: 'Settings' }) }],\n workers: 1," | " // Requires the Android SDK and an emulator. Replace com.android.settings with your app's package.\n targets: [{ name: 'android', platform: 'android', engine: agentDevice({ platform: 'android', app: 'com.android.settings' }) }],\n workers: 1,";
|
|
67
74
|
readonly example: "import { test } from '@e2edev/agent-device';\nimport { expect } from '@e2edev/e2e';\n\ntest('Settings opens', async ({ screen }) => {\n await expect(screen.getByRole('button', { name: 'General' })).toBeVisible();\n});\n" | "import { test } from '@e2edev/agent-device';\nimport { expect } from '@e2edev/e2e';\n\ntest('Settings opens', async ({ screen }) => {\n await expect(screen.getByText('Network & internet')).toBeVisible();\n});\n";
|
|
68
75
|
readonly aiExample: "\n// Runs when E2E_MODEL and E2E_MODEL_API_KEY are set:\n// test('the agent opens General', async ({ agent, device }) => {\n// await agent.act('open General settings');\n// await expect(device.locator('role=NavigationBar id=General')).toBeVisible();\n// });\n" | "\n// Runs when E2E_MODEL and E2E_MODEL_API_KEY are set:\n// test('the agent opens Network settings', async ({ agent, device }) => {\n// await agent.act('open Network & internet settings');\n// await expect(device.locator('id=com.android.settings:id/collapsing_toolbar')).toHaveText('Network & internet');\n// });\n";
|
|
69
76
|
readonly runCommand: 'npx --no-install e2e run';
|
|
70
77
|
}];
|
|
71
|
-
export type
|
|
72
|
-
export declare const
|
|
78
|
+
export type EngineId = ReturnType<typeof getEnginePresets>[number]['id'];
|
|
79
|
+
export declare const DEFAULT_ENGINE_ID = "playwright";
|
|
73
80
|
/** Resolves a preset with the common shape used by scaffold generation. */
|
|
74
|
-
export declare function
|
|
75
|
-
//# sourceMappingURL=
|
|
81
|
+
export declare function getEnginePreset(id: EngineId): EnginePreset;
|
|
82
|
+
//# sourceMappingURL=engines.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engines.d.ts","sourceRoot":"","sources":["../../../src/cli/init/engines.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAIhG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAKD,sFAAsF;AACtF,wBAAgB,gBAAgB;iBAItB,YAAY;oBACT,YAAY;mBACb,iBAAiB;;iBACP,oBAAoB;;;qBAE5B;;;;;;;;;MASR;sBACS;;;;;;;CAOd;wBACgB;;;;;;;CAOhB;yBACiB,wDAAwD;;iBAGhE,MAAM;oBACH,MAAM;mBACP,+BAA+B;;;qBAG7B;sDACwC;sBACvC;;;;;;CAMd;yBACiB,wDAAwD;;iBAGhE,cAAc;oBACX,cAAc;mBACf,iCAAiC;;iBACvB,sBAAsB;;;;;;yBA+B1B,0BAA0B;GAG3C;AAED,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AACzE,eAAO,MAAM,iBAAiB,eAAkC,CAAC;AAEjE,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,GAAG,YAAY,CAI1D"}
|