e2e 0.15.1 → 0.16.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 +51 -24
- package/dist/.build.json +1 -1
- package/dist/agent/act-validation.d.ts +10 -1
- package/dist/agent/act-validation.js +48 -1
- package/dist/agent/act.d.ts +1 -2
- package/dist/agent/act.js +25 -8
- package/dist/agent/action-dispatcher.d.ts +0 -1
- package/dist/agent/action-dispatcher.js +0 -1
- package/dist/agent/action-names.d.ts +0 -1
- package/dist/agent/action-names.js +0 -1
- package/dist/agent/actions.d.ts +0 -1
- package/dist/agent/actions.js +0 -1
- package/dist/agent/agent-brand.d.ts +0 -1
- package/dist/agent/agent-brand.js +0 -1
- package/dist/agent/ai-sdk.d.ts +7 -1
- package/dist/agent/ai-sdk.js +11 -1
- package/dist/agent/call-options.d.ts +0 -1
- package/dist/agent/call-options.js +0 -1
- package/dist/agent/default-agent.d.ts +0 -1
- package/dist/agent/default-agent.js +0 -1
- package/dist/agent/derived.d.ts +0 -1
- package/dist/agent/derived.js +0 -1
- package/dist/agent/error.d.ts +16 -4
- package/dist/agent/error.js +25 -7
- package/dist/agent/executor.d.ts +0 -1
- package/dist/agent/executor.js +0 -1
- package/dist/agent/index.d.ts +0 -1
- package/dist/agent/index.js +0 -1
- package/dist/agent/interactive-step.d.ts +0 -1
- package/dist/agent/interactive-step.js +0 -1
- package/dist/agent/invocation.d.ts +0 -1
- package/dist/agent/invocation.js +10 -5
- package/dist/agent/ledger.d.ts +0 -1
- package/dist/agent/ledger.js +0 -1
- package/dist/agent/loop-guards.d.ts +0 -1
- package/dist/agent/loop-guards.js +0 -1
- package/dist/agent/model/adapter.d.ts +0 -1
- package/dist/agent/model/adapter.js +0 -1
- package/dist/agent/model/overflow.d.ts +0 -1
- package/dist/agent/model/overflow.js +0 -1
- package/dist/agent/model/provider-hints.d.ts +0 -1
- package/dist/agent/model/provider-hints.js +0 -1
- package/dist/agent/model/schema.d.ts +0 -1
- package/dist/agent/model/schema.js +0 -1
- package/dist/agent/model/sdk.d.ts +0 -1
- package/dist/agent/model/sdk.js +0 -1
- package/dist/agent/model/stall.d.ts +0 -1
- package/dist/agent/model/stall.js +0 -1
- package/dist/agent/model/tool-choice.d.ts +24 -2
- package/dist/agent/model/tool-choice.js +27 -2
- package/dist/agent/observation-budget.d.ts +0 -1
- package/dist/agent/observation-budget.js +0 -1
- package/dist/agent/observation-feed.d.ts +0 -1
- package/dist/agent/observation-feed.js +0 -1
- package/dist/agent/observation.d.ts +0 -1
- package/dist/agent/observation.js +0 -1
- package/dist/agent/operation-queue.d.ts +0 -1
- package/dist/agent/operation-queue.js +0 -1
- package/dist/agent/phases.d.ts +0 -1
- package/dist/agent/phases.js +0 -1
- package/dist/agent/pixels.d.ts +0 -1
- package/dist/agent/pixels.js +0 -1
- package/dist/agent/point-tap.d.ts +0 -1
- package/dist/agent/point-tap.js +0 -1
- package/dist/agent/primitives.d.ts +6 -1
- package/dist/agent/primitives.js +4 -2
- package/dist/agent/prompts.d.ts +0 -1
- package/dist/agent/prompts.js +0 -1
- package/dist/agent/protocol.d.ts +0 -1
- package/dist/agent/protocol.js +0 -1
- package/dist/agent/public.d.ts +0 -1
- package/dist/agent/public.js +0 -1
- package/dist/agent/reading.d.ts +0 -1
- package/dist/agent/reading.js +0 -1
- package/dist/agent/replay.d.ts +0 -1
- package/dist/agent/replay.js +0 -1
- package/dist/agent/screen-update.d.ts +0 -1
- package/dist/agent/screen-update.js +0 -1
- package/dist/agent/scroll-target.d.ts +0 -1
- package/dist/agent/scroll-target.js +0 -1
- package/dist/agent/secrets.d.ts +0 -1
- package/dist/agent/secrets.js +0 -1
- package/dist/agent/settle-policy.d.ts +0 -1
- package/dist/agent/settle-policy.js +0 -1
- package/dist/agent/step-accounting.d.ts +0 -1
- package/dist/agent/step-accounting.js +0 -1
- package/dist/agent/step-cache.d.ts +14 -4
- package/dist/agent/step-cache.js +13 -4
- package/dist/agent/tool-loop.d.ts +0 -1
- package/dist/agent/tool-loop.js +62 -10
- package/dist/agent/tool-output.d.ts +0 -1
- package/dist/agent/tool-output.js +0 -1
- package/dist/agent/tool.d.ts +0 -1
- package/dist/agent/tool.js +0 -1
- package/dist/agent/transcript-compaction.d.ts +0 -1
- package/dist/agent/transcript-compaction.js +0 -1
- package/dist/agent/upload-paths.d.ts +0 -1
- package/dist/agent/upload-paths.js +0 -1
- package/dist/agent/usage.d.ts +0 -1
- package/dist/agent/usage.js +0 -1
- package/dist/cache/anchors.d.ts +0 -1
- package/dist/cache/anchors.js +0 -1
- package/dist/cache/context.d.ts +19 -7
- package/dist/cache/context.js +15 -22
- package/dist/cache/decide.d.ts +0 -1
- package/dist/cache/decide.js +0 -1
- package/dist/cache/identity.d.ts +0 -1
- package/dist/cache/identity.js +0 -1
- package/dist/cache/recorder.d.ts +0 -1
- package/dist/cache/recorder.js +0 -1
- package/dist/cache/relocate.d.ts +0 -1
- package/dist/cache/relocate.js +0 -1
- package/dist/cache/route.d.ts +0 -1
- package/dist/cache/route.js +0 -1
- package/dist/cache/store.d.ts +0 -1
- package/dist/cache/store.js +0 -1
- package/dist/cache/template.d.ts +0 -1
- package/dist/cache/template.js +0 -1
- package/dist/cache/trace.d.ts +0 -1
- package/dist/cache/trace.js +0 -1
- package/dist/cli/bin.d.ts +0 -1
- package/dist/cli/bin.js +0 -1
- package/dist/cli/cache.d.ts +0 -1
- package/dist/cli/cache.js +0 -1
- package/dist/cli/docs-url.d.ts +0 -1
- package/dist/cli/docs-url.js +0 -1
- package/dist/cli/feedback.d.ts +0 -1
- package/dist/cli/feedback.js +0 -1
- package/dist/cli/guide.d.ts +0 -1
- package/dist/cli/guide.js +0 -1
- package/dist/cli/index.d.ts +0 -1
- package/dist/cli/index.js +2 -3
- package/dist/cli/init/agent-skill.d.ts +0 -1
- package/dist/cli/init/agent-skill.js +0 -1
- package/dist/cli/init/engines.d.ts +0 -1
- package/dist/cli/init/engines.js +0 -1
- package/dist/cli/init/gateways.d.ts +0 -1
- package/dist/cli/init/gateways.js +0 -1
- package/dist/cli/init/mcp-config.d.ts +0 -1
- package/dist/cli/init/mcp-config.js +0 -1
- package/dist/cli/init/package.d.ts +0 -1
- package/dist/cli/init/package.js +0 -1
- package/dist/cli/init/scaffold.d.ts +1 -1
- package/dist/cli/init/scaffold.js +2 -2
- package/dist/cli/init/sibling-versions.json +1 -1
- package/dist/cli/init/versions.d.ts +0 -1
- package/dist/cli/init/versions.js +0 -1
- package/dist/cli/init.d.ts +0 -1
- package/dist/cli/init.js +0 -1
- package/dist/cli/mcp.d.ts +9 -2
- package/dist/cli/mcp.js +14 -2
- package/dist/cli/signals.d.ts +0 -1
- package/dist/cli/signals.js +0 -1
- package/dist/cli/skill.d.ts +0 -1
- package/dist/cli/skill.js +0 -1
- package/dist/cli/telemetry.d.ts +0 -1
- package/dist/cli/telemetry.js +1 -2
- package/dist/cli/wordmark.d.ts +0 -1
- package/dist/cli/wordmark.js +0 -1
- package/dist/collect/collect.d.ts +0 -1
- package/dist/collect/collect.js +3 -2
- package/dist/collect/registry.d.ts +6 -3
- package/dist/collect/registry.js +31 -14
- package/dist/collect/select.d.ts +0 -1
- package/dist/collect/select.js +0 -1
- package/dist/config/agent.d.ts +0 -1
- package/dist/config/agent.js +0 -1
- package/dist/config/app.d.ts +0 -1
- package/dist/config/app.js +0 -1
- package/dist/config/command.d.ts +0 -1
- package/dist/config/command.js +0 -1
- package/dist/config/diagnose.d.ts +0 -1
- package/dist/config/diagnose.js +0 -1
- package/dist/config/esm-hooks.d.ts +0 -1
- package/dist/config/esm-hooks.js +0 -1
- package/dist/config/load.d.ts +0 -1
- package/dist/config/load.js +0 -1
- package/dist/config/resolve.d.ts +0 -1
- package/dist/config/resolve.js +0 -1
- package/dist/config/secrets.d.ts +0 -1
- package/dist/config/secrets.js +0 -1
- package/dist/config/targets.d.ts +0 -1
- package/dist/config/targets.js +0 -1
- package/dist/config/validate.d.ts +0 -1
- package/dist/config/validate.js +0 -1
- package/dist/engine/contract.d.ts +0 -1
- package/dist/engine/contract.js +0 -1
- package/dist/engine/index.d.ts +1 -2
- package/dist/engine/index.js +4 -4
- package/dist/engine/manifest.d.ts +0 -1
- package/dist/engine/manifest.js +0 -1
- package/dist/engine/recording.d.ts +0 -1
- package/dist/engine/recording.js +0 -1
- package/dist/engine/resolve.d.ts +0 -1
- package/dist/engine/resolve.js +0 -1
- package/dist/engine/session.d.ts +0 -1
- package/dist/engine/session.js +0 -1
- package/dist/engine/surface.d.ts +0 -1
- package/dist/engine/surface.js +0 -1
- package/dist/engine/timing.d.ts +0 -1
- package/dist/engine/timing.js +0 -1
- package/dist/expect/async.d.ts +0 -1
- package/dist/expect/async.js +99 -58
- package/dist/expect/attempt.d.ts +0 -1
- package/dist/expect/attempt.js +0 -1
- package/dist/expect/index.d.ts +0 -1
- package/dist/expect/index.js +0 -1
- package/dist/expect/poll.d.ts +0 -1
- package/dist/expect/poll.js +0 -1
- package/dist/expect/soft.d.ts +0 -1
- package/dist/expect/soft.js +0 -1
- package/dist/expect/values.d.ts +0 -1
- package/dist/expect/values.js +1 -2
- package/dist/explore/body.d.ts +0 -1
- package/dist/explore/body.js +0 -1
- package/dist/explore/executor.d.ts +0 -1
- package/dist/explore/executor.js +0 -1
- package/dist/explore/index.d.ts +0 -1
- package/dist/explore/index.js +16 -2
- package/dist/explore/plan.d.ts +0 -1
- package/dist/explore/plan.js +0 -1
- package/dist/explore/progress.d.ts +0 -1
- package/dist/explore/progress.js +0 -1
- package/dist/explore/state.d.ts +0 -1
- package/dist/explore/state.js +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/internal/ai-trace.d.ts +0 -1
- package/dist/internal/ai-trace.js +0 -1
- package/dist/internal/atomic-write.d.ts +0 -1
- package/dist/internal/atomic-write.js +0 -1
- package/dist/internal/brands.d.ts +0 -1
- package/dist/internal/brands.js +0 -1
- package/dist/internal/debug.d.ts +0 -1
- package/dist/internal/debug.js +0 -1
- package/dist/internal/env.d.ts +0 -1
- package/dist/internal/env.js +0 -1
- package/dist/internal/errors.d.ts +0 -1
- package/dist/internal/errors.js +0 -1
- package/dist/internal/geometry.d.ts +0 -1
- package/dist/internal/geometry.js +0 -1
- package/dist/internal/git.d.ts +0 -1
- package/dist/internal/git.js +0 -1
- package/dist/internal/globs.d.ts +0 -1
- package/dist/internal/globs.js +0 -1
- package/dist/internal/ids.d.ts +0 -1
- package/dist/internal/ids.js +0 -1
- package/dist/internal/json-value.d.ts +0 -1
- package/dist/internal/json-value.js +0 -1
- package/dist/internal/keys.d.ts +0 -1
- package/dist/internal/keys.js +0 -1
- package/dist/internal/node-version.d.ts +0 -1
- package/dist/internal/node-version.js +0 -1
- package/dist/internal/objects.d.ts +0 -1
- package/dist/internal/objects.js +0 -1
- package/dist/internal/options.d.ts +0 -1
- package/dist/internal/options.js +0 -1
- package/dist/internal/package-manager.d.ts +0 -1
- package/dist/internal/package-manager.js +0 -1
- package/dist/internal/package-version.d.ts +0 -1
- package/dist/internal/package-version.js +0 -1
- package/dist/internal/paths.d.ts +0 -1
- package/dist/internal/paths.js +0 -1
- package/dist/internal/realm-slot.d.ts +0 -1
- package/dist/internal/realm-slot.js +0 -1
- package/dist/internal/recording-modes.d.ts +0 -1
- package/dist/internal/recording-modes.js +0 -1
- package/dist/internal/redact.d.ts +0 -1
- package/dist/internal/redact.js +0 -1
- package/dist/internal/regexp.d.ts +0 -1
- package/dist/internal/regexp.js +0 -1
- package/dist/internal/roles.d.ts +0 -1
- package/dist/internal/roles.js +0 -1
- package/dist/internal/skip.d.ts +0 -1
- package/dist/internal/skip.js +0 -1
- package/dist/internal/source.d.ts +0 -1
- package/dist/internal/source.js +0 -1
- package/dist/internal/standard-schema.d.ts +0 -1
- package/dist/internal/standard-schema.js +0 -1
- package/dist/internal/suggest.d.ts +0 -1
- package/dist/internal/suggest.js +0 -1
- package/dist/internal/text.d.ts +8 -1
- package/dist/internal/text.js +13 -2
- package/dist/internal/time.d.ts +0 -1
- package/dist/internal/time.js +0 -1
- package/dist/internal/urls.d.ts +0 -1
- package/dist/internal/urls.js +0 -1
- package/dist/internal/vcs.d.ts +0 -1
- package/dist/internal/vcs.js +0 -1
- package/dist/internal/zip.d.ts +0 -1
- package/dist/internal/zip.js +0 -1
- package/dist/locator/engine.d.ts +0 -1
- package/dist/locator/engine.js +0 -1
- package/dist/locator/expression.d.ts +0 -1
- package/dist/locator/expression.js +0 -1
- package/dist/locator/screen.d.ts +0 -1
- package/dist/locator/screen.js +0 -1
- package/dist/mcp/catalog.d.ts +4 -1
- package/dist/mcp/catalog.js +2 -3
- package/dist/mcp/config.d.ts +0 -1
- package/dist/mcp/config.js +0 -1
- package/dist/mcp/recording.d.ts +0 -1
- package/dist/mcp/recording.js +0 -1
- package/dist/mcp/server.d.ts +8 -1
- package/dist/mcp/server.js +8 -5
- package/dist/mcp/session.d.ts +4 -2
- package/dist/mcp/session.js +43 -21
- package/dist/mcp/sessions.d.ts +2 -1
- package/dist/mcp/sessions.js +5 -2
- package/dist/mcp/tools.d.ts +7 -6
- package/dist/mcp/tools.js +36 -11
- package/dist/mcp/usage.d.ts +61 -0
- package/dist/mcp/usage.js +73 -0
- package/dist/oauth/callback-server.d.ts +0 -1
- package/dist/oauth/callback-server.js +0 -1
- package/dist/oauth/chatgpt.d.ts +0 -1
- package/dist/oauth/chatgpt.js +0 -1
- package/dist/oauth/cli.d.ts +0 -1
- package/dist/oauth/cli.js +0 -1
- package/dist/oauth/copilot.d.ts +0 -1
- package/dist/oauth/copilot.js +0 -1
- package/dist/oauth/device-code.d.ts +0 -1
- package/dist/oauth/device-code.js +0 -1
- package/dist/oauth/errors.d.ts +0 -1
- package/dist/oauth/errors.js +0 -1
- package/dist/oauth/fetch.d.ts +0 -1
- package/dist/oauth/fetch.js +0 -1
- package/dist/oauth/grok.d.ts +0 -1
- package/dist/oauth/grok.js +0 -1
- package/dist/oauth/jwt.d.ts +0 -1
- package/dist/oauth/jwt.js +0 -1
- package/dist/oauth/login.d.ts +0 -1
- package/dist/oauth/login.js +0 -1
- package/dist/oauth/models.d.ts +0 -1
- package/dist/oauth/models.js +0 -1
- package/dist/oauth/pkce.d.ts +0 -1
- package/dist/oauth/pkce.js +0 -1
- package/dist/oauth/providers/github-copilot.d.ts +0 -1
- package/dist/oauth/providers/github-copilot.js +10 -3
- package/dist/oauth/providers/openai.d.ts +0 -1
- package/dist/oauth/providers/openai.js +1 -2
- package/dist/oauth/providers/xai.d.ts +0 -1
- package/dist/oauth/providers/xai.js +0 -1
- package/dist/oauth/providers.d.ts +0 -1
- package/dist/oauth/providers.js +0 -1
- package/dist/oauth/sse.d.ts +0 -1
- package/dist/oauth/sse.js +0 -1
- package/dist/oauth/store.d.ts +0 -1
- package/dist/oauth/store.js +0 -1
- package/dist/oauth/token-endpoint.d.ts +0 -1
- package/dist/oauth/token-endpoint.js +0 -1
- package/dist/oauth/types.d.ts +0 -1
- package/dist/oauth/types.js +0 -1
- package/dist/params.d.ts +0 -1
- package/dist/params.js +0 -1
- package/dist/report/build.d.ts +0 -1
- package/dist/report/build.js +0 -1
- package/dist/report/builtin.d.ts +0 -1
- package/dist/report/builtin.js +0 -1
- package/dist/report/code-frame.d.ts +0 -1
- package/dist/report/code-frame.js +0 -1
- package/dist/report/debug-steps.d.ts +0 -1
- package/dist/report/debug-steps.js +0 -1
- package/dist/report/explore-text.d.ts +0 -1
- package/dist/report/explore-text.js +0 -1
- package/dist/report/failure-text.d.ts +0 -1
- package/dist/report/failure-text.js +0 -1
- package/dist/report/format.d.ts +0 -1
- package/dist/report/format.js +0 -1
- package/dist/report/json.d.ts +0 -1
- package/dist/report/json.js +0 -1
- package/dist/report/junit.d.ts +0 -1
- package/dist/report/junit.js +0 -1
- package/dist/report/list-explore.d.ts +0 -1
- package/dist/report/list-explore.js +0 -1
- package/dist/report/list-model.d.ts +0 -1
- package/dist/report/list-model.js +0 -1
- package/dist/report/list-steps.d.ts +0 -1
- package/dist/report/list-steps.js +0 -1
- package/dist/report/list.d.ts +0 -1
- package/dist/report/list.js +0 -1
- package/dist/report/live-window.d.ts +0 -1
- package/dist/report/live-window.js +0 -1
- package/dist/report/markdown-text.d.ts +0 -1
- package/dist/report/markdown-text.js +0 -1
- package/dist/report/markdown.d.ts +0 -1
- package/dist/report/markdown.js +0 -1
- package/dist/report/outcome.d.ts +0 -1
- package/dist/report/outcome.js +0 -1
- package/dist/report/repeats.d.ts +0 -1
- package/dist/report/repeats.js +0 -1
- package/dist/report/running-tree.d.ts +0 -1
- package/dist/report/running-tree.js +0 -1
- package/dist/report/write.d.ts +0 -1
- package/dist/report/write.js +0 -1
- package/dist/run/app-ports.d.ts +0 -1
- package/dist/run/app-ports.js +0 -1
- package/dist/run/artifacts.d.ts +0 -1
- package/dist/run/artifacts.js +0 -1
- package/dist/run/budget.d.ts +0 -1
- package/dist/run/budget.js +0 -1
- package/dist/run/declared-processes.d.ts +0 -1
- package/dist/run/declared-processes.js +0 -1
- package/dist/run/events.d.ts +0 -1
- package/dist/run/events.js +0 -1
- package/dist/run/execute.d.ts +0 -1
- package/dist/run/execute.js +27 -13
- package/dist/run/extended-fixtures.d.ts +0 -1
- package/dist/run/extended-fixtures.js +0 -1
- package/dist/run/failure-evidence.d.ts +0 -1
- package/dist/run/failure-evidence.js +0 -1
- package/dist/run/fixture-recording.d.ts +0 -1
- package/dist/run/fixture-recording.js +0 -1
- package/dist/run/fixtures.d.ts +0 -1
- package/dist/run/fixtures.js +0 -1
- package/dist/run/in-process.d.ts +0 -1
- package/dist/run/in-process.js +0 -1
- package/dist/run/last-run.d.ts +0 -1
- package/dist/run/last-run.js +0 -1
- package/dist/run/managed-process.d.ts +0 -1
- package/dist/run/managed-process.js +0 -1
- package/dist/run/output.d.ts +0 -1
- package/dist/run/output.js +0 -1
- package/dist/run/process-pool.d.ts +0 -1
- package/dist/run/process-pool.js +0 -1
- package/dist/run/provision.d.ts +0 -1
- package/dist/run/provision.js +0 -1
- package/dist/run/realm.d.ts +2 -1
- package/dist/run/realm.js +1 -2
- package/dist/run/records.d.ts +0 -1
- package/dist/run/records.js +0 -1
- package/dist/run/retry.d.ts +0 -1
- package/dist/run/retry.js +0 -1
- package/dist/run/runner.d.ts +2 -1
- package/dist/run/runner.js +1 -2
- package/dist/run/scheduler.d.ts +0 -1
- package/dist/run/scheduler.js +0 -1
- package/dist/run/secrecy.d.ts +15 -1
- package/dist/run/secrecy.js +27 -2
- package/dist/run/serial.d.ts +0 -1
- package/dist/run/serial.js +0 -1
- package/dist/run/sessions.d.ts +0 -1
- package/dist/run/sessions.js +0 -1
- package/dist/run/standalone.d.ts +0 -1
- package/dist/run/standalone.js +3 -3
- package/dist/run/steps.d.ts +2 -3
- package/dist/run/steps.js +4 -2
- package/dist/run/trace-redaction.d.ts +0 -1
- package/dist/run/trace-redaction.js +0 -1
- package/dist/run/unit-runner.d.ts +0 -1
- package/dist/run/unit-runner.js +0 -1
- package/dist/run/units.d.ts +0 -1
- package/dist/run/units.js +0 -1
- package/dist/run/worker/entry.d.ts +0 -1
- package/dist/run/worker/entry.js +2 -3
- package/dist/run/worker/handle.d.ts +0 -1
- package/dist/run/worker/handle.js +0 -1
- package/dist/run/worker/protocol.d.ts +0 -1
- package/dist/run/worker/protocol.js +0 -1
- package/dist/run/worker/session.d.ts +0 -1
- package/dist/run/worker/session.js +0 -1
- package/dist/run/worker-models.d.ts +0 -1
- package/dist/run/worker-models.js +0 -1
- package/dist/secrets.d.ts +0 -1
- package/dist/secrets.js +0 -1
- package/dist/telemetry/checkout.d.ts +0 -1
- package/dist/telemetry/checkout.js +0 -1
- package/dist/telemetry/environment.d.ts +0 -1
- package/dist/telemetry/environment.js +0 -1
- package/dist/telemetry/events.d.ts +26 -10
- package/dist/telemetry/events.js +107 -13
- package/dist/telemetry/failure-kind.d.ts +0 -1
- package/dist/telemetry/failure-kind.js +0 -1
- package/dist/telemetry/posthog.d.ts +0 -1
- package/dist/telemetry/posthog.js +0 -1
- package/dist/telemetry/project.d.ts +0 -1
- package/dist/telemetry/project.js +0 -1
- package/dist/telemetry/store.d.ts +0 -1
- package/dist/telemetry/store.js +0 -1
- package/dist/telemetry/telemetry.d.ts +19 -8
- package/dist/telemetry/telemetry.js +26 -9
- package/dist/telemetry/token.d.ts +0 -1
- package/dist/telemetry/token.js +0 -1
- package/dist/types.d.ts +26 -24
- package/dist/types.js +0 -1
- package/docs/agent-steps.mdx +126 -0
- package/docs/agents.mdx +217 -0
- package/docs/api-testing.mdx +65 -0
- package/docs/authentication.mdx +345 -0
- package/docs/browser.mdx +440 -0
- package/docs/bug-bash.mdx +90 -0
- package/docs/cache.mdx +306 -0
- package/docs/ci.mdx +210 -0
- package/docs/coding-agents.mdx +183 -0
- package/docs/debugging.mdx +291 -0
- package/docs/executors.mdx +243 -0
- package/docs/explore.mdx +174 -0
- package/docs/github.mdx +184 -0
- package/docs/index.mdx +82 -0
- package/docs/integrations/eas.mdx +216 -0
- package/docs/integrations/index.mdx +24 -0
- package/docs/integrations/kernel.mdx +163 -0
- package/docs/migrate/cypress.mdx +124 -0
- package/docs/migrate/detox.mdx +140 -0
- package/docs/migrate/maestro.mdx +229 -0
- package/docs/migrate/playwright.mdx +430 -0
- package/docs/migrate/selenium.mdx +110 -0
- package/docs/mobile-ci.mdx +567 -0
- package/docs/mobile.mdx +595 -0
- package/docs/models.mdx +241 -0
- package/docs/quickstart.mdx +260 -0
- package/docs/reference/agent.mdx +524 -0
- package/docs/reference/app.mdx +72 -0
- package/docs/reference/cli.mdx +819 -0
- package/docs/reference/config.mdx +986 -0
- package/docs/reference/engine.mdx +1363 -0
- package/docs/reference/environment.mdx +113 -0
- package/docs/reference/errors.mdx +143 -0
- package/docs/reference/expect.mdx +546 -0
- package/docs/reference/mcp.mdx +205 -0
- package/docs/reference/mobile.mdx +522 -0
- package/docs/reference/reporters.mdx +216 -0
- package/docs/reference/screen.mdx +688 -0
- package/docs/reference/test.mdx +449 -0
- package/docs/reference/web.mdx +615 -0
- package/docs/security.mdx +308 -0
- package/docs/starting-your-app.mdx +231 -0
- package/docs/subscriptions.mdx +166 -0
- package/docs/telemetry.mdx +227 -0
- package/docs/tools.mdx +150 -0
- package/docs/viewports.mdx +146 -0
- package/docs/writing-an-engine.mdx +316 -0
- package/docs/writing-tests.mdx +256 -0
- package/package.json +5 -3
- package/skills/e2e/SKILL.md +4 -1
- package/skills/e2e/references/agent.md +3 -1
- package/skills/e2e/references/mcp.md +3 -0
- package/skills/e2e/references/setup.md +19 -4
- package/skills/e2e/references/writing-tests.md +11 -0
- package/dist/agent/act-validation.d.ts.map +0 -1
- package/dist/agent/act-validation.js.map +0 -1
- package/dist/agent/act.d.ts.map +0 -1
- package/dist/agent/act.js.map +0 -1
- package/dist/agent/action-dispatcher.d.ts.map +0 -1
- package/dist/agent/action-dispatcher.js.map +0 -1
- package/dist/agent/action-names.d.ts.map +0 -1
- package/dist/agent/action-names.js.map +0 -1
- package/dist/agent/actions.d.ts.map +0 -1
- package/dist/agent/actions.js.map +0 -1
- package/dist/agent/agent-brand.d.ts.map +0 -1
- package/dist/agent/agent-brand.js.map +0 -1
- package/dist/agent/ai-sdk.d.ts.map +0 -1
- package/dist/agent/ai-sdk.js.map +0 -1
- package/dist/agent/call-options.d.ts.map +0 -1
- package/dist/agent/call-options.js.map +0 -1
- package/dist/agent/default-agent.d.ts.map +0 -1
- package/dist/agent/default-agent.js.map +0 -1
- package/dist/agent/derived.d.ts.map +0 -1
- package/dist/agent/derived.js.map +0 -1
- package/dist/agent/error.d.ts.map +0 -1
- package/dist/agent/error.js.map +0 -1
- package/dist/agent/executor.d.ts.map +0 -1
- package/dist/agent/executor.js.map +0 -1
- package/dist/agent/index.d.ts.map +0 -1
- package/dist/agent/index.js.map +0 -1
- package/dist/agent/interactive-step.d.ts.map +0 -1
- package/dist/agent/interactive-step.js.map +0 -1
- package/dist/agent/invocation.d.ts.map +0 -1
- package/dist/agent/invocation.js.map +0 -1
- package/dist/agent/ledger.d.ts.map +0 -1
- package/dist/agent/ledger.js.map +0 -1
- package/dist/agent/loop-guards.d.ts.map +0 -1
- package/dist/agent/loop-guards.js.map +0 -1
- package/dist/agent/model/adapter.d.ts.map +0 -1
- package/dist/agent/model/adapter.js.map +0 -1
- package/dist/agent/model/overflow.d.ts.map +0 -1
- package/dist/agent/model/overflow.js.map +0 -1
- package/dist/agent/model/provider-hints.d.ts.map +0 -1
- package/dist/agent/model/provider-hints.js.map +0 -1
- package/dist/agent/model/schema.d.ts.map +0 -1
- package/dist/agent/model/schema.js.map +0 -1
- package/dist/agent/model/sdk.d.ts.map +0 -1
- package/dist/agent/model/sdk.js.map +0 -1
- package/dist/agent/model/stall.d.ts.map +0 -1
- package/dist/agent/model/stall.js.map +0 -1
- package/dist/agent/model/tool-choice.d.ts.map +0 -1
- package/dist/agent/model/tool-choice.js.map +0 -1
- package/dist/agent/observation-budget.d.ts.map +0 -1
- package/dist/agent/observation-budget.js.map +0 -1
- package/dist/agent/observation-feed.d.ts.map +0 -1
- package/dist/agent/observation-feed.js.map +0 -1
- package/dist/agent/observation.d.ts.map +0 -1
- package/dist/agent/observation.js.map +0 -1
- package/dist/agent/operation-queue.d.ts.map +0 -1
- package/dist/agent/operation-queue.js.map +0 -1
- package/dist/agent/phases.d.ts.map +0 -1
- package/dist/agent/phases.js.map +0 -1
- package/dist/agent/pixels.d.ts.map +0 -1
- package/dist/agent/pixels.js.map +0 -1
- package/dist/agent/point-tap.d.ts.map +0 -1
- package/dist/agent/point-tap.js.map +0 -1
- package/dist/agent/primitives.d.ts.map +0 -1
- package/dist/agent/primitives.js.map +0 -1
- package/dist/agent/prompts.d.ts.map +0 -1
- package/dist/agent/prompts.js.map +0 -1
- package/dist/agent/protocol.d.ts.map +0 -1
- package/dist/agent/protocol.js.map +0 -1
- package/dist/agent/public.d.ts.map +0 -1
- package/dist/agent/public.js.map +0 -1
- package/dist/agent/reading.d.ts.map +0 -1
- package/dist/agent/reading.js.map +0 -1
- package/dist/agent/replay.d.ts.map +0 -1
- package/dist/agent/replay.js.map +0 -1
- package/dist/agent/screen-update.d.ts.map +0 -1
- package/dist/agent/screen-update.js.map +0 -1
- package/dist/agent/scroll-target.d.ts.map +0 -1
- package/dist/agent/scroll-target.js.map +0 -1
- package/dist/agent/secrets.d.ts.map +0 -1
- package/dist/agent/secrets.js.map +0 -1
- package/dist/agent/settle-policy.d.ts.map +0 -1
- package/dist/agent/settle-policy.js.map +0 -1
- package/dist/agent/step-accounting.d.ts.map +0 -1
- package/dist/agent/step-accounting.js.map +0 -1
- package/dist/agent/step-cache.d.ts.map +0 -1
- package/dist/agent/step-cache.js.map +0 -1
- package/dist/agent/tool-loop.d.ts.map +0 -1
- package/dist/agent/tool-loop.js.map +0 -1
- package/dist/agent/tool-output.d.ts.map +0 -1
- package/dist/agent/tool-output.js.map +0 -1
- package/dist/agent/tool.d.ts.map +0 -1
- package/dist/agent/tool.js.map +0 -1
- package/dist/agent/transcript-compaction.d.ts.map +0 -1
- package/dist/agent/transcript-compaction.js.map +0 -1
- package/dist/agent/upload-paths.d.ts.map +0 -1
- package/dist/agent/upload-paths.js.map +0 -1
- package/dist/agent/usage.d.ts.map +0 -1
- package/dist/agent/usage.js.map +0 -1
- package/dist/cache/anchors.d.ts.map +0 -1
- package/dist/cache/anchors.js.map +0 -1
- package/dist/cache/context.d.ts.map +0 -1
- package/dist/cache/context.js.map +0 -1
- package/dist/cache/decide.d.ts.map +0 -1
- package/dist/cache/decide.js.map +0 -1
- package/dist/cache/identity.d.ts.map +0 -1
- package/dist/cache/identity.js.map +0 -1
- package/dist/cache/recorder.d.ts.map +0 -1
- package/dist/cache/recorder.js.map +0 -1
- package/dist/cache/relocate.d.ts.map +0 -1
- package/dist/cache/relocate.js.map +0 -1
- package/dist/cache/route.d.ts.map +0 -1
- package/dist/cache/route.js.map +0 -1
- package/dist/cache/store.d.ts.map +0 -1
- package/dist/cache/store.js.map +0 -1
- package/dist/cache/template.d.ts.map +0 -1
- package/dist/cache/template.js.map +0 -1
- package/dist/cache/trace.d.ts.map +0 -1
- package/dist/cache/trace.js.map +0 -1
- package/dist/cli/bin.d.ts.map +0 -1
- package/dist/cli/bin.js.map +0 -1
- package/dist/cli/cache.d.ts.map +0 -1
- package/dist/cli/cache.js.map +0 -1
- package/dist/cli/docs-url.d.ts.map +0 -1
- package/dist/cli/docs-url.js.map +0 -1
- package/dist/cli/feedback.d.ts.map +0 -1
- package/dist/cli/feedback.js.map +0 -1
- package/dist/cli/guide.d.ts.map +0 -1
- package/dist/cli/guide.js.map +0 -1
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/init/agent-skill.d.ts.map +0 -1
- package/dist/cli/init/agent-skill.js.map +0 -1
- package/dist/cli/init/engines.d.ts.map +0 -1
- package/dist/cli/init/engines.js.map +0 -1
- package/dist/cli/init/gateways.d.ts.map +0 -1
- package/dist/cli/init/gateways.js.map +0 -1
- package/dist/cli/init/mcp-config.d.ts.map +0 -1
- package/dist/cli/init/mcp-config.js.map +0 -1
- package/dist/cli/init/package.d.ts.map +0 -1
- package/dist/cli/init/package.js.map +0 -1
- package/dist/cli/init/scaffold.d.ts.map +0 -1
- package/dist/cli/init/scaffold.js.map +0 -1
- package/dist/cli/init/versions.d.ts.map +0 -1
- package/dist/cli/init/versions.js.map +0 -1
- package/dist/cli/init.d.ts.map +0 -1
- package/dist/cli/init.js.map +0 -1
- package/dist/cli/mcp.d.ts.map +0 -1
- package/dist/cli/mcp.js.map +0 -1
- package/dist/cli/signals.d.ts.map +0 -1
- package/dist/cli/signals.js.map +0 -1
- package/dist/cli/skill.d.ts.map +0 -1
- package/dist/cli/skill.js.map +0 -1
- package/dist/cli/telemetry.d.ts.map +0 -1
- package/dist/cli/telemetry.js.map +0 -1
- package/dist/cli/wordmark.d.ts.map +0 -1
- package/dist/cli/wordmark.js.map +0 -1
- package/dist/collect/collect.d.ts.map +0 -1
- package/dist/collect/collect.js.map +0 -1
- package/dist/collect/registry.d.ts.map +0 -1
- package/dist/collect/registry.js.map +0 -1
- package/dist/collect/select.d.ts.map +0 -1
- package/dist/collect/select.js.map +0 -1
- package/dist/config/agent.d.ts.map +0 -1
- package/dist/config/agent.js.map +0 -1
- package/dist/config/app.d.ts.map +0 -1
- package/dist/config/app.js.map +0 -1
- package/dist/config/command.d.ts.map +0 -1
- package/dist/config/command.js.map +0 -1
- package/dist/config/diagnose.d.ts.map +0 -1
- package/dist/config/diagnose.js.map +0 -1
- package/dist/config/esm-hooks.d.ts.map +0 -1
- package/dist/config/esm-hooks.js.map +0 -1
- package/dist/config/load.d.ts.map +0 -1
- package/dist/config/load.js.map +0 -1
- package/dist/config/resolve.d.ts.map +0 -1
- package/dist/config/resolve.js.map +0 -1
- package/dist/config/secrets.d.ts.map +0 -1
- package/dist/config/secrets.js.map +0 -1
- package/dist/config/targets.d.ts.map +0 -1
- package/dist/config/targets.js.map +0 -1
- package/dist/config/validate.d.ts.map +0 -1
- package/dist/config/validate.js.map +0 -1
- package/dist/engine/contract.d.ts.map +0 -1
- package/dist/engine/contract.js.map +0 -1
- package/dist/engine/index.d.ts.map +0 -1
- package/dist/engine/index.js.map +0 -1
- package/dist/engine/manifest.d.ts.map +0 -1
- package/dist/engine/manifest.js.map +0 -1
- package/dist/engine/recording.d.ts.map +0 -1
- package/dist/engine/recording.js.map +0 -1
- package/dist/engine/resolve.d.ts.map +0 -1
- package/dist/engine/resolve.js.map +0 -1
- package/dist/engine/session.d.ts.map +0 -1
- package/dist/engine/session.js.map +0 -1
- package/dist/engine/surface.d.ts.map +0 -1
- package/dist/engine/surface.js.map +0 -1
- package/dist/engine/timing.d.ts.map +0 -1
- package/dist/engine/timing.js.map +0 -1
- package/dist/expect/async.d.ts.map +0 -1
- package/dist/expect/async.js.map +0 -1
- package/dist/expect/attempt.d.ts.map +0 -1
- package/dist/expect/attempt.js.map +0 -1
- package/dist/expect/index.d.ts.map +0 -1
- package/dist/expect/index.js.map +0 -1
- package/dist/expect/poll.d.ts.map +0 -1
- package/dist/expect/poll.js.map +0 -1
- package/dist/expect/soft.d.ts.map +0 -1
- package/dist/expect/soft.js.map +0 -1
- package/dist/expect/values.d.ts.map +0 -1
- package/dist/expect/values.js.map +0 -1
- package/dist/explore/body.d.ts.map +0 -1
- package/dist/explore/body.js.map +0 -1
- package/dist/explore/executor.d.ts.map +0 -1
- package/dist/explore/executor.js.map +0 -1
- package/dist/explore/index.d.ts.map +0 -1
- package/dist/explore/index.js.map +0 -1
- package/dist/explore/plan.d.ts.map +0 -1
- package/dist/explore/plan.js.map +0 -1
- package/dist/explore/progress.d.ts.map +0 -1
- package/dist/explore/progress.js.map +0 -1
- package/dist/explore/state.d.ts.map +0 -1
- package/dist/explore/state.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/internal/ai-trace.d.ts.map +0 -1
- package/dist/internal/ai-trace.js.map +0 -1
- package/dist/internal/atomic-write.d.ts.map +0 -1
- package/dist/internal/atomic-write.js.map +0 -1
- package/dist/internal/brands.d.ts.map +0 -1
- package/dist/internal/brands.js.map +0 -1
- package/dist/internal/debug.d.ts.map +0 -1
- package/dist/internal/debug.js.map +0 -1
- package/dist/internal/env.d.ts.map +0 -1
- package/dist/internal/env.js.map +0 -1
- package/dist/internal/errors.d.ts.map +0 -1
- package/dist/internal/errors.js.map +0 -1
- package/dist/internal/geometry.d.ts.map +0 -1
- package/dist/internal/geometry.js.map +0 -1
- package/dist/internal/git.d.ts.map +0 -1
- package/dist/internal/git.js.map +0 -1
- package/dist/internal/globs.d.ts.map +0 -1
- package/dist/internal/globs.js.map +0 -1
- package/dist/internal/ids.d.ts.map +0 -1
- package/dist/internal/ids.js.map +0 -1
- package/dist/internal/json-value.d.ts.map +0 -1
- package/dist/internal/json-value.js.map +0 -1
- package/dist/internal/keys.d.ts.map +0 -1
- package/dist/internal/keys.js.map +0 -1
- package/dist/internal/node-version.d.ts.map +0 -1
- package/dist/internal/node-version.js.map +0 -1
- package/dist/internal/objects.d.ts.map +0 -1
- package/dist/internal/objects.js.map +0 -1
- package/dist/internal/options.d.ts.map +0 -1
- package/dist/internal/options.js.map +0 -1
- package/dist/internal/package-manager.d.ts.map +0 -1
- package/dist/internal/package-manager.js.map +0 -1
- package/dist/internal/package-version.d.ts.map +0 -1
- package/dist/internal/package-version.js.map +0 -1
- package/dist/internal/paths.d.ts.map +0 -1
- package/dist/internal/paths.js.map +0 -1
- package/dist/internal/realm-slot.d.ts.map +0 -1
- package/dist/internal/realm-slot.js.map +0 -1
- package/dist/internal/recording-modes.d.ts.map +0 -1
- package/dist/internal/recording-modes.js.map +0 -1
- package/dist/internal/redact.d.ts.map +0 -1
- package/dist/internal/redact.js.map +0 -1
- package/dist/internal/regexp.d.ts.map +0 -1
- package/dist/internal/regexp.js.map +0 -1
- package/dist/internal/roles.d.ts.map +0 -1
- package/dist/internal/roles.js.map +0 -1
- package/dist/internal/skip.d.ts.map +0 -1
- package/dist/internal/skip.js.map +0 -1
- package/dist/internal/source.d.ts.map +0 -1
- package/dist/internal/source.js.map +0 -1
- package/dist/internal/standard-schema.d.ts.map +0 -1
- package/dist/internal/standard-schema.js.map +0 -1
- package/dist/internal/suggest.d.ts.map +0 -1
- package/dist/internal/suggest.js.map +0 -1
- package/dist/internal/text.d.ts.map +0 -1
- package/dist/internal/text.js.map +0 -1
- package/dist/internal/time.d.ts.map +0 -1
- package/dist/internal/time.js.map +0 -1
- package/dist/internal/urls.d.ts.map +0 -1
- package/dist/internal/urls.js.map +0 -1
- package/dist/internal/vcs.d.ts.map +0 -1
- package/dist/internal/vcs.js.map +0 -1
- package/dist/internal/zip.d.ts.map +0 -1
- package/dist/internal/zip.js.map +0 -1
- package/dist/locator/engine.d.ts.map +0 -1
- package/dist/locator/engine.js.map +0 -1
- package/dist/locator/expression.d.ts.map +0 -1
- package/dist/locator/expression.js.map +0 -1
- package/dist/locator/screen.d.ts.map +0 -1
- package/dist/locator/screen.js.map +0 -1
- package/dist/mcp/catalog.d.ts.map +0 -1
- package/dist/mcp/catalog.js.map +0 -1
- package/dist/mcp/config.d.ts.map +0 -1
- package/dist/mcp/config.js.map +0 -1
- package/dist/mcp/recording.d.ts.map +0 -1
- package/dist/mcp/recording.js.map +0 -1
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/session.d.ts.map +0 -1
- package/dist/mcp/session.js.map +0 -1
- package/dist/mcp/sessions.d.ts.map +0 -1
- package/dist/mcp/sessions.js.map +0 -1
- package/dist/mcp/tools.d.ts.map +0 -1
- package/dist/mcp/tools.js.map +0 -1
- package/dist/oauth/callback-server.d.ts.map +0 -1
- package/dist/oauth/callback-server.js.map +0 -1
- package/dist/oauth/chatgpt.d.ts.map +0 -1
- package/dist/oauth/chatgpt.js.map +0 -1
- package/dist/oauth/cli.d.ts.map +0 -1
- package/dist/oauth/cli.js.map +0 -1
- package/dist/oauth/copilot.d.ts.map +0 -1
- package/dist/oauth/copilot.js.map +0 -1
- package/dist/oauth/device-code.d.ts.map +0 -1
- package/dist/oauth/device-code.js.map +0 -1
- package/dist/oauth/errors.d.ts.map +0 -1
- package/dist/oauth/errors.js.map +0 -1
- package/dist/oauth/fetch.d.ts.map +0 -1
- package/dist/oauth/fetch.js.map +0 -1
- package/dist/oauth/grok.d.ts.map +0 -1
- package/dist/oauth/grok.js.map +0 -1
- package/dist/oauth/jwt.d.ts.map +0 -1
- package/dist/oauth/jwt.js.map +0 -1
- package/dist/oauth/login.d.ts.map +0 -1
- package/dist/oauth/login.js.map +0 -1
- package/dist/oauth/models.d.ts.map +0 -1
- package/dist/oauth/models.js.map +0 -1
- package/dist/oauth/pkce.d.ts.map +0 -1
- package/dist/oauth/pkce.js.map +0 -1
- package/dist/oauth/providers/github-copilot.d.ts.map +0 -1
- package/dist/oauth/providers/github-copilot.js.map +0 -1
- package/dist/oauth/providers/openai.d.ts.map +0 -1
- package/dist/oauth/providers/openai.js.map +0 -1
- package/dist/oauth/providers/xai.d.ts.map +0 -1
- package/dist/oauth/providers/xai.js.map +0 -1
- package/dist/oauth/providers.d.ts.map +0 -1
- package/dist/oauth/providers.js.map +0 -1
- package/dist/oauth/sse.d.ts.map +0 -1
- package/dist/oauth/sse.js.map +0 -1
- package/dist/oauth/store.d.ts.map +0 -1
- package/dist/oauth/store.js.map +0 -1
- package/dist/oauth/token-endpoint.d.ts.map +0 -1
- package/dist/oauth/token-endpoint.js.map +0 -1
- package/dist/oauth/types.d.ts.map +0 -1
- package/dist/oauth/types.js.map +0 -1
- package/dist/params.d.ts.map +0 -1
- package/dist/params.js.map +0 -1
- package/dist/report/build.d.ts.map +0 -1
- package/dist/report/build.js.map +0 -1
- package/dist/report/builtin.d.ts.map +0 -1
- package/dist/report/builtin.js.map +0 -1
- package/dist/report/code-frame.d.ts.map +0 -1
- package/dist/report/code-frame.js.map +0 -1
- package/dist/report/debug-steps.d.ts.map +0 -1
- package/dist/report/debug-steps.js.map +0 -1
- package/dist/report/explore-text.d.ts.map +0 -1
- package/dist/report/explore-text.js.map +0 -1
- package/dist/report/failure-text.d.ts.map +0 -1
- package/dist/report/failure-text.js.map +0 -1
- package/dist/report/format.d.ts.map +0 -1
- package/dist/report/format.js.map +0 -1
- package/dist/report/json.d.ts.map +0 -1
- package/dist/report/json.js.map +0 -1
- package/dist/report/junit.d.ts.map +0 -1
- package/dist/report/junit.js.map +0 -1
- package/dist/report/list-explore.d.ts.map +0 -1
- package/dist/report/list-explore.js.map +0 -1
- package/dist/report/list-model.d.ts.map +0 -1
- package/dist/report/list-model.js.map +0 -1
- package/dist/report/list-steps.d.ts.map +0 -1
- package/dist/report/list-steps.js.map +0 -1
- package/dist/report/list.d.ts.map +0 -1
- package/dist/report/list.js.map +0 -1
- package/dist/report/live-window.d.ts.map +0 -1
- package/dist/report/live-window.js.map +0 -1
- package/dist/report/markdown-text.d.ts.map +0 -1
- package/dist/report/markdown-text.js.map +0 -1
- package/dist/report/markdown.d.ts.map +0 -1
- package/dist/report/markdown.js.map +0 -1
- package/dist/report/outcome.d.ts.map +0 -1
- package/dist/report/outcome.js.map +0 -1
- package/dist/report/repeats.d.ts.map +0 -1
- package/dist/report/repeats.js.map +0 -1
- package/dist/report/running-tree.d.ts.map +0 -1
- package/dist/report/running-tree.js.map +0 -1
- package/dist/report/write.d.ts.map +0 -1
- package/dist/report/write.js.map +0 -1
- package/dist/run/app-ports.d.ts.map +0 -1
- package/dist/run/app-ports.js.map +0 -1
- package/dist/run/artifacts.d.ts.map +0 -1
- package/dist/run/artifacts.js.map +0 -1
- package/dist/run/budget.d.ts.map +0 -1
- package/dist/run/budget.js.map +0 -1
- package/dist/run/declared-processes.d.ts.map +0 -1
- package/dist/run/declared-processes.js.map +0 -1
- package/dist/run/events.d.ts.map +0 -1
- package/dist/run/events.js.map +0 -1
- package/dist/run/execute.d.ts.map +0 -1
- package/dist/run/execute.js.map +0 -1
- package/dist/run/extended-fixtures.d.ts.map +0 -1
- package/dist/run/extended-fixtures.js.map +0 -1
- package/dist/run/failure-evidence.d.ts.map +0 -1
- package/dist/run/failure-evidence.js.map +0 -1
- package/dist/run/fixture-recording.d.ts.map +0 -1
- package/dist/run/fixture-recording.js.map +0 -1
- package/dist/run/fixtures.d.ts.map +0 -1
- package/dist/run/fixtures.js.map +0 -1
- package/dist/run/in-process.d.ts.map +0 -1
- package/dist/run/in-process.js.map +0 -1
- package/dist/run/last-run.d.ts.map +0 -1
- package/dist/run/last-run.js.map +0 -1
- package/dist/run/managed-process.d.ts.map +0 -1
- package/dist/run/managed-process.js.map +0 -1
- package/dist/run/output.d.ts.map +0 -1
- package/dist/run/output.js.map +0 -1
- package/dist/run/process-pool.d.ts.map +0 -1
- package/dist/run/process-pool.js.map +0 -1
- package/dist/run/provision.d.ts.map +0 -1
- package/dist/run/provision.js.map +0 -1
- package/dist/run/realm.d.ts.map +0 -1
- package/dist/run/realm.js.map +0 -1
- package/dist/run/records.d.ts.map +0 -1
- package/dist/run/records.js.map +0 -1
- package/dist/run/retry.d.ts.map +0 -1
- package/dist/run/retry.js.map +0 -1
- package/dist/run/runner.d.ts.map +0 -1
- package/dist/run/runner.js.map +0 -1
- package/dist/run/scheduler.d.ts.map +0 -1
- package/dist/run/scheduler.js.map +0 -1
- package/dist/run/secrecy.d.ts.map +0 -1
- package/dist/run/secrecy.js.map +0 -1
- package/dist/run/serial.d.ts.map +0 -1
- package/dist/run/serial.js.map +0 -1
- package/dist/run/sessions.d.ts.map +0 -1
- package/dist/run/sessions.js.map +0 -1
- package/dist/run/standalone.d.ts.map +0 -1
- package/dist/run/standalone.js.map +0 -1
- package/dist/run/steps.d.ts.map +0 -1
- package/dist/run/steps.js.map +0 -1
- package/dist/run/trace-redaction.d.ts.map +0 -1
- package/dist/run/trace-redaction.js.map +0 -1
- package/dist/run/unit-runner.d.ts.map +0 -1
- package/dist/run/unit-runner.js.map +0 -1
- package/dist/run/units.d.ts.map +0 -1
- package/dist/run/units.js.map +0 -1
- package/dist/run/worker/entry.d.ts.map +0 -1
- package/dist/run/worker/entry.js.map +0 -1
- package/dist/run/worker/handle.d.ts.map +0 -1
- package/dist/run/worker/handle.js.map +0 -1
- package/dist/run/worker/protocol.d.ts.map +0 -1
- package/dist/run/worker/protocol.js.map +0 -1
- package/dist/run/worker/session.d.ts.map +0 -1
- package/dist/run/worker/session.js.map +0 -1
- package/dist/run/worker-models.d.ts.map +0 -1
- package/dist/run/worker-models.js.map +0 -1
- package/dist/secrets.d.ts.map +0 -1
- package/dist/secrets.js.map +0 -1
- package/dist/telemetry/checkout.d.ts.map +0 -1
- package/dist/telemetry/checkout.js.map +0 -1
- package/dist/telemetry/environment.d.ts.map +0 -1
- package/dist/telemetry/environment.js.map +0 -1
- package/dist/telemetry/events.d.ts.map +0 -1
- package/dist/telemetry/events.js.map +0 -1
- package/dist/telemetry/failure-kind.d.ts.map +0 -1
- package/dist/telemetry/failure-kind.js.map +0 -1
- package/dist/telemetry/posthog.d.ts.map +0 -1
- package/dist/telemetry/posthog.js.map +0 -1
- package/dist/telemetry/project.d.ts.map +0 -1
- package/dist/telemetry/project.js.map +0 -1
- package/dist/telemetry/store.d.ts.map +0 -1
- package/dist/telemetry/store.js.map +0 -1
- package/dist/telemetry/telemetry.d.ts.map +0 -1
- package/dist/telemetry/telemetry.js.map +0 -1
- package/dist/telemetry/token.d.ts.map +0 -1
- package/dist/telemetry/token.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Security model
|
|
3
|
+
description: What the model can access, how the runner handles secrets, and the limits of its protections.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Test code and configuration run with your operating-system permissions.
|
|
7
|
+
This includes engines, tools, reporters, stores, secret providers, and app
|
|
8
|
+
commands. e2e does not sandbox them. Run untrusted pull request code in an
|
|
9
|
+
external sandbox without secrets or write tokens.
|
|
10
|
+
|
|
11
|
+
The model receives app content as untrusted evidence. It requests actions
|
|
12
|
+
through tools; the runner validates and performs those actions. Cached
|
|
13
|
+
actions also run with your permission, so review shared cache entries as
|
|
14
|
+
you would test code.
|
|
15
|
+
|
|
16
|
+
## What the model sees
|
|
17
|
+
|
|
18
|
+
Model requests separate runner policy and trusted project context from app
|
|
19
|
+
content. App content cannot grant tools, credentials, or a larger budget.
|
|
20
|
+
[How agent steps work](/agent-steps) explains what a step shows the model and
|
|
21
|
+
what it may do; this page lists the trust boundary.
|
|
22
|
+
|
|
23
|
+
| In the prompt | Form |
|
|
24
|
+
| --- | --- |
|
|
25
|
+
| Your instruction and params | Quoted inside `<instruction>` and marked as data. A `Secret` param is projected to its name and purpose. |
|
|
26
|
+
| The screen | An accessibility tree with node ids, roles, names, text, test ids, link targets, and states, cut at a size limit. No selectors. A link's query and fragment, where tokens ride, show only as `?…` and `#…`. |
|
|
27
|
+
| The location | The current URL, redacted. |
|
|
28
|
+
| A screenshot | When needed or requested, only if the engine proves secure fields are masked and no secret has been filled in the attempt. |
|
|
29
|
+
| Prior steps | `agent.act` receives bounded records from the same test or serial group. Judgments use the current screen and instruction, without prior-step records. |
|
|
30
|
+
|
|
31
|
+
Secure fields appear as `value=<secure>`. Known secret values in model input
|
|
32
|
+
and reports become `<secret:name>`. This [redaction](#redaction) has limits
|
|
33
|
+
for transformed values, images, and app logs.
|
|
34
|
+
|
|
35
|
+
## What the model may do
|
|
36
|
+
|
|
37
|
+
Built-in tools have closed schemas and are offered only when the engine
|
|
38
|
+
supports them. Project tools must use `defineTool` and cannot replace a
|
|
39
|
+
built-in name. Only read-only project tools may request an observation.
|
|
40
|
+
|
|
41
|
+
A call to a tool the step does not offer, or with an argument its schema does
|
|
42
|
+
not declare, never runs: the model reads the refusal and tries again. A node
|
|
43
|
+
id that is not on the current screen fails the action with
|
|
44
|
+
`LOCATOR_NOT_FOUND`. The runner never evaluates model text as code,
|
|
45
|
+
selectors, shell commands, or config.
|
|
46
|
+
|
|
47
|
+
A tool call that breaks a rule fails with `POLICY_DENIED`:
|
|
48
|
+
|
|
49
|
+
| Denied | Why |
|
|
50
|
+
| --- | --- |
|
|
51
|
+
| Navigation to `file:`, `data:`, or `javascript:` | These URL schemes are forbidden. |
|
|
52
|
+
| A malformed URL | Nothing is repaired. |
|
|
53
|
+
| A `Secret` reaching a JSON sink | Handles carry no value, and no value may be serialized. |
|
|
54
|
+
| Reading a value, text, or attribute from a secure field, with a getter or a `toHaveValue`, `toHaveText`, `toContainText`, or `toHaveAttribute` matcher | Assert the outcome, not the secret. A withheld value is redacted, not empty or absent. |
|
|
55
|
+
| `type_secret` with an undeclared name | Only secrets in the step's params can be filled. |
|
|
56
|
+
| `type_secret` into a disabled or non-editable node | Sinks are `textbox`, `searchbox`, and `combobox`. |
|
|
57
|
+
| A password into a field that is not a password field | Purpose must match; a generic secret fills any editable input. |
|
|
58
|
+
| A project tool not made with `defineTool`, or without `execute` | Undeclared semantics are not trusted. |
|
|
59
|
+
| A mutating project tool requesting an observation | Observe in a separate call. |
|
|
60
|
+
| `vision: 'only'` when pixels are withheld | There is nothing to fall back to. |
|
|
61
|
+
| `app.screenshot()` after a secret fill | The app may display the secret outside a secure field. |
|
|
62
|
+
|
|
63
|
+
## Navigation and origins
|
|
64
|
+
|
|
65
|
+
Navigation and secret fills have no origin allowlist. The agent can follow
|
|
66
|
+
the app to other sites and use the secrets supplied to the current step
|
|
67
|
+
there. Password fills still require a password field.
|
|
68
|
+
|
|
69
|
+
The browser engine uses a hostname-based site check for two purposes:
|
|
70
|
+
|
|
71
|
+
- Configured `headers` are added to requests on the target's site.
|
|
72
|
+
- Child frames outside that site, and `data:` frames, are omitted from
|
|
73
|
+
observations.
|
|
74
|
+
|
|
75
|
+
The site check approximates the registrable domain without a public suffix
|
|
76
|
+
list. Shared hosting domains such as `vercel.app` count as one site, so
|
|
77
|
+
headers can reach other hosts under that domain. `basicAuth` is broader:
|
|
78
|
+
it answers a `401` challenge from any origin.
|
|
79
|
+
|
|
80
|
+
The runner checks forbidden schemes on explicit navigation: `app.open`, the
|
|
81
|
+
agent's `navigate` verb, and `device.openLink`. `device.openApp` and the
|
|
82
|
+
`open_app` tool take an app id and refuse a link, since the device would
|
|
83
|
+
open one as a URL. The runner does not re-check redirects or attach to popup
|
|
84
|
+
pages. Register `browser.onDialog` to handle browser dialogs.
|
|
85
|
+
|
|
86
|
+
## Secrets
|
|
87
|
+
|
|
88
|
+
A `Secret` is an opaque handle with no plaintext accessor. Three sinks
|
|
89
|
+
accept one: a locator's `fill`, the params of an agent step, and an engine
|
|
90
|
+
option that declares it (`web({ basicAuth: { password } })`). The
|
|
91
|
+
[Signing in](/authentication) guide covers usage; the rules are here.
|
|
92
|
+
|
|
93
|
+
Before a model-directed fill, the runner checks that the step declared the
|
|
94
|
+
secret, the secret is configured, and the target is an enabled editable
|
|
95
|
+
input. Passwords require a password field. It then resolves the value on the
|
|
96
|
+
host and passes it to the engine. Replay repeats these checks.
|
|
97
|
+
|
|
98
|
+
A deterministic `fill(secret)` uses the field chosen by test code without
|
|
99
|
+
those model-directed field checks. It still registers the value for
|
|
100
|
+
redaction and disables pixels for the rest of the attempt.
|
|
101
|
+
|
|
102
|
+
### Screenshots after a secret fill
|
|
103
|
+
|
|
104
|
+
After any secret fill, for the rest of the attempt, screenshot and pixel
|
|
105
|
+
tools are unavailable, `app.screenshot()` is denied, and the runner omits
|
|
106
|
+
assertion and failure screenshots. The app could display the value anywhere,
|
|
107
|
+
beyond the field's masked rectangle.
|
|
108
|
+
|
|
109
|
+
A test that restores a [session](#sessions) whose setup filled a secret keeps
|
|
110
|
+
this protection. A setup that signs in without filling a secret, for example
|
|
111
|
+
by setting a session cookie with `browser.setCookies`, leaves screenshots
|
|
112
|
+
available to the tests that restore it. A value it uses that is not a
|
|
113
|
+
configured secret is not redacted.
|
|
114
|
+
|
|
115
|
+
### Secrets in engine options
|
|
116
|
+
|
|
117
|
+
A secret an engine option holds (`web({ basicAuth: { password: secrets.get(name) } })`)
|
|
118
|
+
is resolved on the host when each attempt starts and registered for redaction
|
|
119
|
+
then, together with what the engine derives from it (for basic auth, the
|
|
120
|
+
base64 `user:password` the `Authorization` header carries). It is not a fill
|
|
121
|
+
and is protected as text only: reports, `screen.txt`, failure pages, what the
|
|
122
|
+
model and an `e2e mcp` session read, text downloads, and the Playwright
|
|
123
|
+
trace's text (the options the browser opened with, and the `Authorization:
|
|
124
|
+
Basic` header of every request) are redacted, while screenshots, the trace's
|
|
125
|
+
screencast frames, and the model's pixels are kept. A page that renders the
|
|
126
|
+
password on screen is not masked in pixels.
|
|
127
|
+
|
|
128
|
+
### Redaction
|
|
129
|
+
|
|
130
|
+
The runner replaces every occurrence of a registered secret value with
|
|
131
|
+
`<secret:name>` in model input, reports, a worker process's console output,
|
|
132
|
+
and the trace text of a session a secret was filled on or an engine option
|
|
133
|
+
holds. That includes a value the test passes as a plain string rather than
|
|
134
|
+
a `secrets.get()` handle: test and `describe` titles, step labels (an
|
|
135
|
+
`app.open` URL, a locator's text), an `agent.act` or `agent.assert`
|
|
136
|
+
instruction, the strings in `agent.act` params, `agentContext`, and an
|
|
137
|
+
`e2e explore` goal. Titles are redacted as the test file is collected, so
|
|
138
|
+
the test id, `--grep`, the reporters, and the artifact and failure-page file
|
|
139
|
+
names all see `<secret:name>`, and two titles in one file that differ only
|
|
140
|
+
in a secret value are a duplicate title path. A custom executor's
|
|
141
|
+
`ctx.step` and the built-in agent's prompt carry the marker, so only a
|
|
142
|
+
handle can type the real value.
|
|
143
|
+
|
|
144
|
+
Matching covers the value as written, JSON-escaped, HTML-escaped, and
|
|
145
|
+
percent-encoded, in any letter case (so a CSS `text-transform` does not hide
|
|
146
|
+
it), and with its whitespace collapsed. Text cut at a length limit is masked
|
|
147
|
+
too when it ends with the first 8 or more characters of a value (half of a
|
|
148
|
+
value shorter than 16). Redaction rewrites only what the runner reports;
|
|
149
|
+
assertions still compare the text the page shows. Secret values never enter
|
|
150
|
+
cache entries.
|
|
151
|
+
|
|
152
|
+
A static value shorter than 6 characters is `INVALID_CONFIG`, and a provider
|
|
153
|
+
returning one fails the fill: every occurrence of so short a value would take
|
|
154
|
+
ordinary text with it.
|
|
155
|
+
|
|
156
|
+
### Where redaction stops
|
|
157
|
+
|
|
158
|
+
- A transformed form of the value, such as its last four characters, is not
|
|
159
|
+
the secret and passes through.
|
|
160
|
+
- A value encoded as a whole rather than character by character, base64 or
|
|
161
|
+
a hash, is a different string and passes through.
|
|
162
|
+
- A value the app renders in another Unicode normalization form, decomposed
|
|
163
|
+
accents where the secret has composed ones, passes through.
|
|
164
|
+
- Text that widens the whitespace inside the value, or drops it, passes
|
|
165
|
+
through.
|
|
166
|
+
- A value spread over several nodes, one character per cell as a PIN pad
|
|
167
|
+
shows it, is not one string in the tree and passes through.
|
|
168
|
+
- Text cut at a length limit is matched by its prefix only in the value's
|
|
169
|
+
own form: a case mapping that changes length (`ß` shown as `SS`) or
|
|
170
|
+
whitespace collapsed to one space escapes the prefix rule.
|
|
171
|
+
- A title is redacted when its file is collected, before any provider
|
|
172
|
+
runs, so a value a secret provider returns is not redacted from titles.
|
|
173
|
+
- A Playwright trace from a session no secret reached is kept as recorded,
|
|
174
|
+
so a value the test only spelled into a URL or a locator stays in its
|
|
175
|
+
text.
|
|
176
|
+
- When tests run in the runner's own process, with the config or tests
|
|
177
|
+
passed in memory by an embedding host, their console output is not
|
|
178
|
+
redacted.
|
|
179
|
+
- A Playwright trace from a session a secret reached, filled or held by the
|
|
180
|
+
engine, is rewritten before it is kept: any run of 8 or more characters of
|
|
181
|
+
a value becomes `<secret:name>`, so unrelated text that shares 8 characters
|
|
182
|
+
with a value is masked too. A base64 or base64url run that decodes to a
|
|
183
|
+
value or such a fragment (a basic-auth header, a cookie, a token segment)
|
|
184
|
+
is replaced whole. After a fill, screencast frames are dropped; with only
|
|
185
|
+
an engine-held secret they are kept. An image the app served that
|
|
186
|
+
draws the secret survives. A trace the runner cannot rewrite is deleted and
|
|
187
|
+
the attempt records `TRACE_WITHHELD`.
|
|
188
|
+
- A video masks nothing and is labeled `redaction: "incomplete"`. It is
|
|
189
|
+
never recorded unless you ask. A recording a hosted browser or
|
|
190
|
+
device service keeps stays with that service; the report holds only its
|
|
191
|
+
URL.
|
|
192
|
+
- A download is what the app served. Once a secret reached the session,
|
|
193
|
+
filled or held by the engine, a text download (`text/*` or JSON by file
|
|
194
|
+
extension) is rewritten the way trace text is and labeled
|
|
195
|
+
`redaction: "complete"`. Any other download, a binary or one from a
|
|
196
|
+
session no secret reached, is kept as served and labeled
|
|
197
|
+
`redaction: "incomplete"`.
|
|
198
|
+
- The `headers` a protected preview needs are recorded in the trace as
|
|
199
|
+
request headers. Share that trace as you would the bypass secret.
|
|
200
|
+
- `command.log` is captured as the process writes it.
|
|
201
|
+
The runner does not redact them. Keep secrets out of your app's stdout.
|
|
202
|
+
|
|
203
|
+
## Sessions
|
|
204
|
+
|
|
205
|
+
Saved sessions contain authentication state. They are encrypted and last
|
|
206
|
+
for one run. A session also carries the secret values the setup test resolved
|
|
207
|
+
from a provider before saving it, inside the same ciphertext, and whether a
|
|
208
|
+
secret was filled on it. The test that restores the session redacts those
|
|
209
|
+
values and keeps its pixels withheld, so a stored token the app echoes back
|
|
210
|
+
never reaches a failure message, a report, or the model. The envelope names
|
|
211
|
+
the secrets in the clear, authenticated; the values are never written
|
|
212
|
+
unencrypted.
|
|
213
|
+
|
|
214
|
+
| Property | Value |
|
|
215
|
+
| --- | --- |
|
|
216
|
+
| Location | `sessions/<runId>/` under the [output directory](/reference/config#output) (default `.e2e/sessions/<runId>/`), directory mode `0700`, files `0600` |
|
|
217
|
+
| Cipher | AES-256-GCM, a fresh 12-byte IV per save |
|
|
218
|
+
| Key | 32 random bytes generated per run and held in memory. Workers receive it over IPC, never through disk or the environment. |
|
|
219
|
+
| Bound to | Run id, target, engine name and version, platform, and app identity, all authenticated as additional data |
|
|
220
|
+
| Lifetime | At most 24 hours, sooner if the saved state declares an earlier expiry |
|
|
221
|
+
| Cleanup | The directory is removed when the run ends |
|
|
222
|
+
|
|
223
|
+
Invalid, expired, missing, or mismatched sessions are refused. See the
|
|
224
|
+
[session errors](/reference/errors) for the corresponding codes.
|
|
225
|
+
|
|
226
|
+
## Cache trust
|
|
227
|
+
|
|
228
|
+
Shared cache entries deserve the same review as test code. They can replay
|
|
229
|
+
actions without consulting a model and are not signed.
|
|
230
|
+
|
|
231
|
+
The runner validates entries before use. Invalid entries become misses.
|
|
232
|
+
Files are named by a hash of the expected key and refused if larger than
|
|
233
|
+
1 MiB. Entries store actions and a redacted summary; replay executes only
|
|
234
|
+
the actions. Secret fills store a name and authorize the fill again.
|
|
235
|
+
|
|
236
|
+
`e2e init` ignores `.e2e/cache/` in Git. If you choose to
|
|
237
|
+
[commit recordings](/cache#commit-the-replay-cache), review their actions and typed
|
|
238
|
+
values. CI defaults to read-only when no cache mode is configured.
|
|
239
|
+
|
|
240
|
+
## Artifacts and logs
|
|
241
|
+
|
|
242
|
+
By default everything a run writes lands under `.e2e/`. The
|
|
243
|
+
[`output`](/reference/config#output) option or `--output` moves it, the
|
|
244
|
+
replay cache stays at `cache.dir`, and `command.log` is whatever
|
|
245
|
+
project-relative path you configure.
|
|
246
|
+
|
|
247
|
+
| Path | Contents | Redaction |
|
|
248
|
+
| --- | --- | --- |
|
|
249
|
+
| `report.json` | The run record. Errors, reasoning excerpts, and action summaries pass the redactor. | complete |
|
|
250
|
+
| `artifacts/.../*.png` | Screenshots. Secure fields are masked before screenshots are returned or saved as artifacts. | complete |
|
|
251
|
+
| `artifacts/.../trace.zip` | Playwright trace, rewritten after a secret fill or when an engine option holds a secret; screencast frames are dropped after a fill only. | not-required, complete, or deleted |
|
|
252
|
+
| `artifacts/.../*.webm`, `*.mp4` | Video, opt-in through `video` or `--video`; `retain-on-failure` keeps only the attempts that did not pass. | incomplete |
|
|
253
|
+
| `artifacts/.../downloads/*` | Files the app served through a download. Text ones are rewritten after a secret fill or when an engine option holds a secret; the rest are kept as served. | complete or incomplete |
|
|
254
|
+
| `artifacts/.../failure/screen.txt` | The redacted tree at the moment of failure. | complete |
|
|
255
|
+
| `ai-trace.json` | Every model call, opt-in via `--ai-trace`. Prompts are the redacted ones the model saw; inline image bytes are replaced by their size. | as the prompt |
|
|
256
|
+
| `sessions/<runId>/` | Encrypted sessions, deleted at cleanup. | encrypted |
|
|
257
|
+
| `videos/<session>/*.webm`, `*.mp4` | Videos an `e2e mcp` session recorded with `start_recording`, kept until you delete them. Never handed to `artifacts.store`. | none |
|
|
258
|
+
| `cache.dir` (default `.e2e/cache/`) | Replay cache entries. Not under `output`. | secret-free by construction |
|
|
259
|
+
| The path in `command.log` | Your app's stdout and stderr, verbatim. Must be inside the project root. | none |
|
|
260
|
+
|
|
261
|
+
An `artifacts.store` receives each artifact's bytes as they are produced,
|
|
262
|
+
after trace and download redaction, with the `redaction` label the report
|
|
263
|
+
records, so a store can export only what the runner vouches for. A
|
|
264
|
+
`cache.store` receives every recorded entry and supplies every replayed one;
|
|
265
|
+
what comes back is validated again before use.
|
|
266
|
+
|
|
267
|
+
## Outbound connections
|
|
268
|
+
|
|
269
|
+
Built-in features may connect to:
|
|
270
|
+
|
|
271
|
+
- one telemetry request per CLI invocation to `eu.i.posthog.com`, plus at
|
|
272
|
+
most one per session that `e2e mcp` serves, unless opted out; see [Telemetry](/telemetry)
|
|
273
|
+
- one request to `eu.i.posthog.com` per `e2e feedback` you run; see
|
|
274
|
+
[Feedback](/telemetry#feedback)
|
|
275
|
+
- the provider endpoint used by your configured model. Deterministic tests
|
|
276
|
+
and fully replayed action steps make no model call.
|
|
277
|
+
- readiness probes against the `readyUrl` of the app the runner starts
|
|
278
|
+
- a Playwright browser download, once, when the browser is missing
|
|
279
|
+
- the DevTools endpoint you name in `web({ connect })`
|
|
280
|
+
- the GitHub API, only from the opt-in `@e2e-dev/github` reporter
|
|
281
|
+
- the Kernel API and its hosted browsers, only from
|
|
282
|
+
[`kernel()`](/integrations/kernel)
|
|
283
|
+
- the Expo API and the simulators' agent-device daemons, only from
|
|
284
|
+
[`easSimulators()`](/integrations/eas). It authenticates with `EXPO_TOKEN`,
|
|
285
|
+
else with the eas-cli login in `~/.expo/state.json`: on a CI runner, set
|
|
286
|
+
`EXPO_TOKEN` or keep that login out of the runner's home
|
|
287
|
+
- the app under test, and whatever that app itself loads
|
|
288
|
+
|
|
289
|
+
There is no crash reporting or update check. `--ai-trace` writes a local
|
|
290
|
+
file without uploading it. Your test code, plugins, and app can make
|
|
291
|
+
additional connections.
|
|
292
|
+
|
|
293
|
+
## MCP and explore
|
|
294
|
+
|
|
295
|
+
`e2e mcp` uses stdio and the same action authorization as a test run. It
|
|
296
|
+
allows four open sessions at once by default
|
|
297
|
+
([`--max-sessions`](/reference/mcp), 1 through 16) and closes idle sessions.
|
|
298
|
+
|
|
299
|
+
`e2e explore` offers every configured credential to every step; see
|
|
300
|
+
[Exploring without a test](/explore#your-config-applies).
|
|
301
|
+
|
|
302
|
+
## Reporting a vulnerability
|
|
303
|
+
|
|
304
|
+
Report privately through
|
|
305
|
+
[GitHub security advisories](https://github.com/tester-army/e2e/security/advisories/new)
|
|
306
|
+
or by mail to security@tester.army. The
|
|
307
|
+
[security policy](https://github.com/tester-army/e2e/blob/main/SECURITY.md)
|
|
308
|
+
states response times and supported versions.
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Starting your app
|
|
3
|
+
description: Point the runner at a running app, or let it start the app for the run.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Set your app's URL in the target's `app`. If you also provide a start
|
|
7
|
+
command, the runner starts the app, waits until it is ready, and stops it
|
|
8
|
+
when the run ends.
|
|
9
|
+
|
|
10
|
+
## Point at a running app
|
|
11
|
+
|
|
12
|
+
Import `web` from `@e2e-dev/web` and put this in the exported
|
|
13
|
+
config object:
|
|
14
|
+
|
|
15
|
+
```ts title="e2e.config.ts"
|
|
16
|
+
export default {
|
|
17
|
+
targets: [{
|
|
18
|
+
engine: web(),
|
|
19
|
+
app: { url: process.env.APP_URL ?? 'http://localhost:3000' },
|
|
20
|
+
}],
|
|
21
|
+
} satisfies E2EConfig;
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
`app.open('/path')` resolves against `app.url`. This config reads `APP_URL`, so
|
|
25
|
+
you can change the address for a run without editing the file. URLs without
|
|
26
|
+
a scheme use HTTPS, or HTTP for loopback hosts.
|
|
27
|
+
|
|
28
|
+
## Let the runner start it
|
|
29
|
+
|
|
30
|
+
Add `app.command` and the runner spawns the dev server, waits until `app.url`
|
|
31
|
+
answers, and stops it when the run ends, fails, or is interrupted:
|
|
32
|
+
|
|
33
|
+
```ts title="e2e.config.ts"
|
|
34
|
+
import type { E2EConfig } from 'e2e';
|
|
35
|
+
import { web } from '@e2e-dev/web';
|
|
36
|
+
import { gateway } from 'ai';
|
|
37
|
+
|
|
38
|
+
export default {
|
|
39
|
+
agents: {
|
|
40
|
+
default: {
|
|
41
|
+
model: gateway('openai/gpt-6-luna-fast'),
|
|
42
|
+
system: 'You are a thorough QA agent. Verify every outcome.',
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
targets: [{
|
|
46
|
+
engine: web(),
|
|
47
|
+
app: {
|
|
48
|
+
url: process.env.APP_URL ?? 'http://localhost:3000',
|
|
49
|
+
command: {
|
|
50
|
+
executable: 'npm',
|
|
51
|
+
args: ['run', 'dev'],
|
|
52
|
+
reuseExisting: true,
|
|
53
|
+
log: '.e2e/logs/app.log',
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
}],
|
|
57
|
+
} satisfies E2EConfig;
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
```text
|
|
61
|
+
✓ target "web" command ready 1.20s
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
The main command options are:
|
|
65
|
+
|
|
66
|
+
| Option | Purpose |
|
|
67
|
+
| --- | --- |
|
|
68
|
+
| `reuseExisting: true` | Use an already-running server locally. CI ignores this and reports `APP_ALREADY_RUNNING`. |
|
|
69
|
+
| `log` | Save the app's stdout and stderr to a project-relative file. Startup errors include the last 20 lines, with `command.env` values redacted. The log file itself is unredacted. |
|
|
70
|
+
| `env` | Environment variables for the app. The child inherits `PATH`, `HOME`, and the temp-directory variables, plus these. |
|
|
71
|
+
| `startupTimeout` | How long to wait for readiness, 60 seconds by default. |
|
|
72
|
+
|
|
73
|
+
To probe a health endpoint instead of the base URL, set `readyUrl` beside
|
|
74
|
+
`command`: `app: { url, command, readyUrl: 'http://localhost:3000/health' }`.
|
|
75
|
+
|
|
76
|
+
The command runs without a shell. `executable` is resolved on `PATH` and
|
|
77
|
+
`args` are passed as written. The child inherits only `PATH`, `HOME`, the
|
|
78
|
+
temp-directory variables, and `env`, so pass what the app needs explicitly.
|
|
79
|
+
See the
|
|
80
|
+
[command reference](/reference/config#command) for all options.
|
|
81
|
+
|
|
82
|
+
### Let the runner pick the port
|
|
83
|
+
|
|
84
|
+
Use port `0` to run multiple checkouts without a port conflict. The runner
|
|
85
|
+
chooses a free port and replaces `{port}` in the command's `args` and `env`.
|
|
86
|
+
Your app command must use that value:
|
|
87
|
+
|
|
88
|
+
```ts
|
|
89
|
+
engine: web(),
|
|
90
|
+
app: {
|
|
91
|
+
url: 'http://127.0.0.1:0',
|
|
92
|
+
command: { executable: 'pnpm', args: ['dev', '--port', '{port}'], env: { PORT: '{port}' } },
|
|
93
|
+
},
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Tests can read the allocated URL from `app.baseUrl`. Cache entries remain
|
|
97
|
+
valid when the port changes. Use `127.0.0.1` or `[::1]`, matching the address
|
|
98
|
+
the command binds; `localhost:0` is rejected. See
|
|
99
|
+
[free ports](/reference/config#free-ports) for details.
|
|
100
|
+
|
|
101
|
+
### Next.js dev targets
|
|
102
|
+
|
|
103
|
+
Next.js 16 blocks cross-origin requests to its dev resources. A target that
|
|
104
|
+
opens `127.0.0.1` or `[::1]` while `next dev` identifies as `localhost`
|
|
105
|
+
renders and never hydrates. Locators resolve and clicks land, but no React
|
|
106
|
+
handler runs, so the test fails and every retry fails the same way.
|
|
107
|
+
|
|
108
|
+
Add the host the target opens to `allowedDevOrigins`:
|
|
109
|
+
|
|
110
|
+
```ts title="next.config.ts"
|
|
111
|
+
import type { NextConfig } from 'next';
|
|
112
|
+
|
|
113
|
+
const nextConfig: NextConfig = {
|
|
114
|
+
allowedDevOrigins: ['127.0.0.1'],
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
export default nextConfig;
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Use `'[::1]'` in the list when `app.url` opens `http://[::1]:0`.
|
|
121
|
+
|
|
122
|
+
A target on `localhost` needs no entry, because `next dev` identifies as
|
|
123
|
+
`localhost`. A production `next start` target is unaffected either way.
|
|
124
|
+
|
|
125
|
+
## Dependencies
|
|
126
|
+
|
|
127
|
+
<Note>
|
|
128
|
+
This version starts only `app.command` (one process for every target that
|
|
129
|
+
declares the same command). Databases, mocks, and other processes the app
|
|
130
|
+
needs are not started by the runner yet: bring them up before the run, or
|
|
131
|
+
have `app.command` start a script that brings them up and serves the app. A
|
|
132
|
+
services API returns in a later release.
|
|
133
|
+
</Note>
|
|
134
|
+
|
|
135
|
+
## Several targets
|
|
136
|
+
|
|
137
|
+
Two browsers on one app are two targets that each name it:
|
|
138
|
+
|
|
139
|
+
```ts title="e2e.config.ts"
|
|
140
|
+
import type { E2EConfig } from 'e2e';
|
|
141
|
+
import { web } from '@e2e-dev/web';
|
|
142
|
+
|
|
143
|
+
const app = { url: 'http://localhost:3000' };
|
|
144
|
+
|
|
145
|
+
export default {
|
|
146
|
+
targets: [
|
|
147
|
+
{ name: 'chromium', engine: web(), app },
|
|
148
|
+
{ name: 'webkit-mobile', engine: web({ browser: 'webkit', viewport: { width: 390, height: 844 } }), app },
|
|
149
|
+
],
|
|
150
|
+
} satisfies E2EConfig;
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Two targets that declare the same `app.command` share one process. Every
|
|
154
|
+
test runs on every target unless it is scoped with `platforms` or
|
|
155
|
+
`requires`; `--target <name>` selects at run time. A device target sits
|
|
156
|
+
beside a browser target in the same list; see the
|
|
157
|
+
[Mobile engine reference](/reference/mobile). One target per screen size is
|
|
158
|
+
how a suite runs at several [viewports](/viewports).
|
|
159
|
+
|
|
160
|
+
## Protected previews
|
|
161
|
+
|
|
162
|
+
Use `headers` to access protected previews or skip a tunnel's interstitial
|
|
163
|
+
page. For example, a Vercel preview can use a protection bypass header:
|
|
164
|
+
|
|
165
|
+
```ts title="Target fragment"
|
|
166
|
+
engine: web({
|
|
167
|
+
headers: {
|
|
168
|
+
'x-vercel-protection-bypass': process.env.VERCEL_AUTOMATION_BYPASS_SECRET ?? '',
|
|
169
|
+
},
|
|
170
|
+
}),
|
|
171
|
+
app: {
|
|
172
|
+
url: process.env.PREVIEW_URL ?? 'http://localhost:3000',
|
|
173
|
+
identity: 'storefront',
|
|
174
|
+
},
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
`headers` apply to requests on the target's site, determined by its hostname.
|
|
178
|
+
The check also includes subdomains and treats shared suffixes such as
|
|
179
|
+
`vercel.app` as one site. See [header scope](/security#navigation-and-origins)
|
|
180
|
+
before using a bypass secret. For ngrok, use
|
|
181
|
+
`'ngrok-skip-browser-warning': '1'`.
|
|
182
|
+
|
|
183
|
+
`app.identity` gives the app a stable cache identity when its preview URL changes.
|
|
184
|
+
|
|
185
|
+
Use `basicAuth` for HTTP basic authentication. The browser sends these
|
|
186
|
+
credentials when any origin requests them with a `401` challenge:
|
|
187
|
+
|
|
188
|
+
```ts title="Target fragment"
|
|
189
|
+
engine: web({
|
|
190
|
+
basicAuth: { username: 'preview', password: process.env.PREVIEW_PASSWORD ?? '' },
|
|
191
|
+
}),
|
|
192
|
+
app: { url: 'https://staging.example.com' },
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
To keep the password out of reports, logs, and what the agent reads, declare
|
|
196
|
+
it under `secrets` and pass `secrets.get(name)`. The engine resolves it when
|
|
197
|
+
each attempt starts, and the runner redacts it like any configured secret; a
|
|
198
|
+
name that `secrets` does not declare fails the config load with `INVALID_CONFIG`:
|
|
199
|
+
|
|
200
|
+
```ts title="e2e.config.ts"
|
|
201
|
+
import type { E2EConfig } from 'e2e';
|
|
202
|
+
import { secrets } from 'e2e';
|
|
203
|
+
import { web } from '@e2e-dev/web';
|
|
204
|
+
|
|
205
|
+
export default {
|
|
206
|
+
targets: [
|
|
207
|
+
{
|
|
208
|
+
engine: web({
|
|
209
|
+
basicAuth: { username: 'preview', password: secrets.get('previewPassword') },
|
|
210
|
+
}),
|
|
211
|
+
app: { url: 'https://staging.example.com' },
|
|
212
|
+
},
|
|
213
|
+
],
|
|
214
|
+
secrets: { previewPassword: () => process.env.PREVIEW_PASSWORD ?? '' },
|
|
215
|
+
} satisfies E2EConfig;
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
<Note>
|
|
219
|
+
Setting `headers` disables the browser's HTTP cache and blocks service
|
|
220
|
+
workers. Playwright traces include request headers, so a protected-preview
|
|
221
|
+
trace can contain your bypass secret. Restrict access to those traces.
|
|
222
|
+
</Note>
|
|
223
|
+
|
|
224
|
+
<CardGroup cols={2}>
|
|
225
|
+
<Card title="Config reference" icon="sliders" href="/reference/config#the-app-under-test">
|
|
226
|
+
`app`, `command`, and every app key.
|
|
227
|
+
</Card>
|
|
228
|
+
<Card title="Web engine reference" icon="masks-theater" href="/reference/web">
|
|
229
|
+
Browser, viewport, `connect`, `headers`, `basicAuth`.
|
|
230
|
+
</Card>
|
|
231
|
+
</CardGroup>
|