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,166 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Subscriptions
|
|
3
|
+
description: Use your ChatGPT, GitHub Copilot, or SuperGrok subscription for agent steps.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use an existing subscription without a separate API key. Choose your plan
|
|
7
|
+
in `e2e init`, install dependencies, then sign in:
|
|
8
|
+
|
|
9
|
+
| Subscription | Command |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| ChatGPT Plus or Pro | `npx e2e login openai` |
|
|
12
|
+
| GitHub Copilot | `npx e2e login github-copilot` |
|
|
13
|
+
| SuperGrok or X Premium+ | `npx e2e login spacexai` |
|
|
14
|
+
|
|
15
|
+
Follow the terminal prompts, then run `npx e2e run`. Agent calls use your
|
|
16
|
+
plan's usage limits. For a new project, start with the [quickstart](/quickstart).
|
|
17
|
+
|
|
18
|
+
Claude subscriptions are not supported. To use Claude, configure an
|
|
19
|
+
[API provider](/models) or a model available through your Copilot plan.
|
|
20
|
+
|
|
21
|
+
## Set up an existing project
|
|
22
|
+
|
|
23
|
+
`e2e init` leaves existing configs intact. To switch an existing project to
|
|
24
|
+
a subscription, install the AI SDK provider package the model wraps and
|
|
25
|
+
replace the model in your config. The sign-in flows ship with `e2e` itself:
|
|
26
|
+
|
|
27
|
+
<Tabs>
|
|
28
|
+
<Tab title="ChatGPT">
|
|
29
|
+
<CodeGroup>
|
|
30
|
+
```bash npm
|
|
31
|
+
npm install -D ai @ai-sdk/openai
|
|
32
|
+
npx e2e login openai
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```bash pnpm
|
|
36
|
+
pnpm add -D ai @ai-sdk/openai
|
|
37
|
+
pnpm exec e2e login openai
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
```bash bun
|
|
41
|
+
bun add -d ai @ai-sdk/openai
|
|
42
|
+
bunx e2e login openai
|
|
43
|
+
```
|
|
44
|
+
</CodeGroup>
|
|
45
|
+
|
|
46
|
+
```ts title="Model setup"
|
|
47
|
+
import { chatgpt } from 'e2e/oauth/chatgpt';
|
|
48
|
+
|
|
49
|
+
const agent = { model: chatgpt('gpt-6-luna') };
|
|
50
|
+
```
|
|
51
|
+
</Tab>
|
|
52
|
+
<Tab title="GitHub Copilot">
|
|
53
|
+
<CodeGroup>
|
|
54
|
+
```bash npm
|
|
55
|
+
npm install -D ai @ai-sdk/openai-compatible
|
|
56
|
+
npx e2e login github-copilot
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```bash pnpm
|
|
60
|
+
pnpm add -D ai @ai-sdk/openai-compatible
|
|
61
|
+
pnpm exec e2e login github-copilot
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
```bash bun
|
|
65
|
+
bun add -d ai @ai-sdk/openai-compatible
|
|
66
|
+
bunx e2e login github-copilot
|
|
67
|
+
```
|
|
68
|
+
</CodeGroup>
|
|
69
|
+
|
|
70
|
+
```ts title="Model setup"
|
|
71
|
+
import { copilot } from 'e2e/oauth/copilot';
|
|
72
|
+
|
|
73
|
+
const agent = { model: copilot('claude-sonnet-5') };
|
|
74
|
+
```
|
|
75
|
+
</Tab>
|
|
76
|
+
<Tab title="SuperGrok">
|
|
77
|
+
<CodeGroup>
|
|
78
|
+
```bash npm
|
|
79
|
+
npm install -D ai @ai-sdk/xai
|
|
80
|
+
npx e2e login spacexai
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
```bash pnpm
|
|
84
|
+
pnpm add -D ai @ai-sdk/xai
|
|
85
|
+
pnpm exec e2e login spacexai
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
```bash bun
|
|
89
|
+
bun add -d ai @ai-sdk/xai
|
|
90
|
+
bunx e2e login spacexai
|
|
91
|
+
```
|
|
92
|
+
</CodeGroup>
|
|
93
|
+
|
|
94
|
+
```ts title="Model setup"
|
|
95
|
+
import { grok } from 'e2e/oauth/grok';
|
|
96
|
+
|
|
97
|
+
const agent = { model: grok('grok-4') };
|
|
98
|
+
```
|
|
99
|
+
</Tab>
|
|
100
|
+
</Tabs>
|
|
101
|
+
|
|
102
|
+
Set `agents: { default: agent }` in `e2e.config.ts`. Choose a model
|
|
103
|
+
available to your account.
|
|
104
|
+
|
|
105
|
+
## Pick a model
|
|
106
|
+
|
|
107
|
+
The constructor takes the id the vendor uses, which is not always the name
|
|
108
|
+
the app shows. Ask the vendor which ids your login serves:
|
|
109
|
+
|
|
110
|
+
<CodeGroup>
|
|
111
|
+
```bash npm
|
|
112
|
+
npx e2e models # every stored login
|
|
113
|
+
npx e2e models openai # one provider
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
```bash pnpm
|
|
117
|
+
pnpm exec e2e models # every stored login
|
|
118
|
+
pnpm exec e2e models openai # one provider
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
```bash bun
|
|
122
|
+
bunx e2e models # every stored login
|
|
123
|
+
bunx e2e models openai # one provider
|
|
124
|
+
```
|
|
125
|
+
</CodeGroup>
|
|
126
|
+
|
|
127
|
+
Each line is the id to pass to `chatgpt()`, `copilot()`, or `grok()`, the
|
|
128
|
+
vendor's display name, and what it says about the model: reasoning levels,
|
|
129
|
+
vision, preview, or hidden. ChatGPT lists what the Codex backend serves your
|
|
130
|
+
plan; Copilot lists the chat models of your plan; SuperGrok lists the
|
|
131
|
+
language models the token reaches.
|
|
132
|
+
|
|
133
|
+
Copilot also lists models that `copilot()` cannot call, and marks them:
|
|
134
|
+
|
|
135
|
+
- `not enabled`: the model is off for your plan. Turn it on in your Copilot
|
|
136
|
+
settings on GitHub, or ask your organization admin if they manage your
|
|
137
|
+
seat.
|
|
138
|
+
- `no chat completions`: Copilot serves the model only over other APIs,
|
|
139
|
+
mostly its Responses API. `copilot()` uses chat completions, so pick
|
|
140
|
+
another model.
|
|
141
|
+
|
|
142
|
+
## Sign-in help
|
|
143
|
+
|
|
144
|
+
- ChatGPT opens a browser to sign in. Use `npx e2e login openai --device`
|
|
145
|
+
to sign in with a device code instead.
|
|
146
|
+
- Copilot reuses your GitHub CLI login. If you do not use `gh`, pass
|
|
147
|
+
`--client-id` for your own GitHub OAuth app with device flow enabled.
|
|
148
|
+
Use `--enterprise-url` for GitHub Enterprise.
|
|
149
|
+
- SuperGrok prints a device code and the URL where you enter it.
|
|
150
|
+
|
|
151
|
+
Run `npx e2e login` to choose a provider and see which accounts are signed
|
|
152
|
+
in. Run `npx e2e logout` to remove a saved login.
|
|
153
|
+
|
|
154
|
+
## Saved credentials and CI
|
|
155
|
+
|
|
156
|
+
Logins are stored in `~/.config/e2e/oauth.json`, or under
|
|
157
|
+
`$XDG_CONFIG_HOME`, with file permissions restricted to your user. Tokens
|
|
158
|
+
refresh automatically. When a vendor rejects the saved token, or its refresh
|
|
159
|
+
token, the run fails with `LOGIN_REQUIRED` and names the
|
|
160
|
+
`npx e2e login <provider>` command to run.
|
|
161
|
+
|
|
162
|
+
Use API keys in CI. `E2E_OAUTH_CREDENTIALS` can supply credential JSON
|
|
163
|
+
instead of the local file, but refreshed tokens are not saved back to that
|
|
164
|
+
variable. A value containing a rotating refresh token cannot be reused
|
|
165
|
+
indefinitely. See [CLI reference](/reference/cli#e2e-login) for all sign-in
|
|
166
|
+
options.
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Telemetry
|
|
3
|
+
description: What the CLI sends, what it never sends, and how to turn it off.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The `e2e` CLI sends anonymous usage data so we can see which commands,
|
|
7
|
+
engines, and features are used and where runs fail. It is on by default.
|
|
8
|
+
Telemetry includes counts and version information, but no test content, app
|
|
9
|
+
content, or credentials.
|
|
10
|
+
|
|
11
|
+
## Opt out
|
|
12
|
+
|
|
13
|
+
Any one of these turns it off:
|
|
14
|
+
|
|
15
|
+
<CodeGroup>
|
|
16
|
+
```bash npm
|
|
17
|
+
npx e2e telemetry disable # saved in ~/.config/e2e/telemetry.json
|
|
18
|
+
export E2E_TELEMETRY_DISABLED=1 # for a shell or a CI job
|
|
19
|
+
export DO_NOT_TRACK=1 # the cross-tool convention
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
```bash pnpm
|
|
23
|
+
pnpm exec e2e telemetry disable # saved in ~/.config/e2e/telemetry.json
|
|
24
|
+
export E2E_TELEMETRY_DISABLED=1 # for a shell or a CI job
|
|
25
|
+
export DO_NOT_TRACK=1 # the cross-tool convention
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
```bash bun
|
|
29
|
+
bunx e2e telemetry disable # saved in ~/.config/e2e/telemetry.json
|
|
30
|
+
export E2E_TELEMETRY_DISABLED=1 # for a shell or a CI job
|
|
31
|
+
export DO_NOT_TRACK=1 # the cross-tool convention
|
|
32
|
+
```
|
|
33
|
+
</CodeGroup>
|
|
34
|
+
|
|
35
|
+
`npx e2e telemetry` prints the status and, when it is off, why.
|
|
36
|
+
`enable` reverses a saved `disable`. Environment variables take precedence.
|
|
37
|
+
Running commands check the saved setting again before sending, so disabling
|
|
38
|
+
telemetry also applies to commands already running in another terminal.
|
|
39
|
+
|
|
40
|
+
## See what would be sent
|
|
41
|
+
|
|
42
|
+
<CodeGroup>
|
|
43
|
+
```bash npm
|
|
44
|
+
E2E_TELEMETRY_DEBUG=1 npx e2e run
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
```bash pnpm
|
|
48
|
+
E2E_TELEMETRY_DEBUG=1 pnpm exec e2e run
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
```bash bun
|
|
52
|
+
E2E_TELEMETRY_DEBUG=1 bunx e2e run
|
|
53
|
+
```
|
|
54
|
+
</CodeGroup>
|
|
55
|
+
|
|
56
|
+
This prints the exact event payloads to stderr as `[telemetry] {...}` and
|
|
57
|
+
sends nothing.
|
|
58
|
+
|
|
59
|
+
## What is sent
|
|
60
|
+
|
|
61
|
+
Each command sends a session event. `run` and `explore` also send a run event,
|
|
62
|
+
`init` an init event, and `mcp` one event per MCP session. `--help` and
|
|
63
|
+
`--version` send nothing, also when asked on a command. Events go in one
|
|
64
|
+
request when the command ends, with a two-second deadline for all telemetry
|
|
65
|
+
work. `e2e mcp` runs as long as its client does, so it sends each MCP session
|
|
66
|
+
event in its own request when that session ends, with the same deadline.
|
|
67
|
+
|
|
68
|
+
Every event carries these properties.
|
|
69
|
+
|
|
70
|
+
Who ran it:
|
|
71
|
+
|
|
72
|
+
| Property | Value |
|
|
73
|
+
| --- | --- |
|
|
74
|
+
| `distinct_id` | A random id stored in the preferences file. CI uses `ci:<vendor>` instead, and a platform that runs e2e for its users uses `fleet:<name>` when it sets `E2E_TELEMETRY_FLEET` |
|
|
75
|
+
| `project_id` | A hash derived from the repository's root commit, shared across full clones. Outside git or in a shallow clone, a hash of the project path with a random local salt. `null` in CI when no root commit is available |
|
|
76
|
+
| `session_id` | A random id for this one invocation |
|
|
77
|
+
| `first_run`, `days_since_first_run` | Whether this command created the preferences file, and whole days since it was created. `null` in CI and in a fleet, where no machine persists, and for a preferences file from before the time was recorded |
|
|
78
|
+
|
|
79
|
+
Where it ran:
|
|
80
|
+
|
|
81
|
+
| Property | Value |
|
|
82
|
+
| --- | --- |
|
|
83
|
+
| `os`, `os_release`, `arch`, `cpu_count`, `memory_gb`, `docker`, `wsl`, `tty` | The machine class |
|
|
84
|
+
| `sandbox` | The microVM the kernel announces itself as (`firecracker`), else `null` |
|
|
85
|
+
| `ci`, `ci_name` | Whether `CI` is set, and the vendor when one announces itself (`github-actions`, `gitlab`, `circleci`, ...) |
|
|
86
|
+
| `fleet` | The value of `E2E_TELEMETRY_FLEET` when it is a plain token, `other` when it is not, `null` when unset |
|
|
87
|
+
| `coding_agent` | The coding agent whose shell ran the command, when one announces itself (`claude-code`, `cursor`, `codex`, ...) |
|
|
88
|
+
|
|
89
|
+
Versions:
|
|
90
|
+
|
|
91
|
+
| Property | Value |
|
|
92
|
+
| --- | --- |
|
|
93
|
+
| `e2e_version`, `package_manager` | The e2e version and the package manager that invoked the CLI |
|
|
94
|
+
| `runtime`, `runtime_version`, `node_version` | `node`, `bun`, or `deno`, and its version; `node_version` is Node's own version, or the Node compatibility version under Bun or Deno |
|
|
95
|
+
| `$lib`, `$lib_version`, `$process_person_profile`, `$geoip_disable` | `e2e`, its version, `false`, and `true`: PostHog keeps no person profile and derives no location |
|
|
96
|
+
|
|
97
|
+
`e2e_cli_session`, once per command:
|
|
98
|
+
|
|
99
|
+
| Property | Value |
|
|
100
|
+
| --- | --- |
|
|
101
|
+
| `command` | `init`, `run`, `list`, `cache ls`, `guide`, `telemetry`, ... |
|
|
102
|
+
| `flags` | The names of the flags given, such as `--headed` or `--tag`. Never their values |
|
|
103
|
+
| `exit_code`, `duration_ms` | How the command ended and how long it took |
|
|
104
|
+
| `error_code` | The runner code of the failure that ended the command before it could run (`CONFIG_NOT_FOUND`, `INVALID_CONFIG`, ...), `CLI_USAGE` for a flag or argument the CLI rejected, `null` otherwise. A code that is not an upper-case token is reported as `OTHER` |
|
|
105
|
+
|
|
106
|
+
`e2e_init_completed`, once per `e2e init`:
|
|
107
|
+
|
|
108
|
+
| Property | Value |
|
|
109
|
+
| --- | --- |
|
|
110
|
+
| `result` | `scaffolded`, `already-initialized`, `cancelled`, `install-failed`, `not-interactive`, or `invalid-project` |
|
|
111
|
+
| `yes`, `existing_config` | Whether `--yes` was given, and whether a config already existed so no engine or gateway was asked |
|
|
112
|
+
| `engine`, `gateway` | The ids of the engine and the model gateway chosen for a new config (`web`, `mobile`, `none`; `vercel`, `openrouter`, `openai-compatible`, `chatgpt`, `copilot`, `grok`, `none`), `null` when not asked. Never the endpoint typed for an OpenAI-compatible gateway |
|
|
113
|
+
| `skill`, `mcp`, `install` | Whether the agent skill, the MCP registration, and the dependency install were chosen |
|
|
114
|
+
|
|
115
|
+
`e2e_run_completed`, once per `e2e run` or `e2e explore`, built from the numbers in `report.json` and the resolved config:
|
|
116
|
+
|
|
117
|
+
| Property | Value |
|
|
118
|
+
| --- | --- |
|
|
119
|
+
| `command` | `run` or `explore` |
|
|
120
|
+
| `status`, `exit_code`, `duration_ms` | The run's outcome |
|
|
121
|
+
| `flags` | The names of the flags given to the run command, never their values |
|
|
122
|
+
| `tests_discovered`, `tests_selected`, `tests_executed`, `tests_passed`, `tests_failed`, `tests_flaky`, `tests_skipped` | The summary counts |
|
|
123
|
+
| `attempts_total`, `tests_retried` | How many attempts the run made across tests and serial groups, and how many of them needed more than one |
|
|
124
|
+
| `targets`, `platforms`, `engines` | How many targets, on which platforms, and with which engines and versions, as your config declares them: `web`, `ios`, `web@0.6.1`, or your own engine's name and version. A name that is not a plain token of letters, digits, dots, dashes, and underscores is reported as `other` |
|
|
125
|
+
| `steps_total`, `steps_agent`, `steps_locator`, `steps_assertion`, `steps_screen`, `steps_app`, `steps_session`, `steps_resource` | Step counts by kind |
|
|
126
|
+
| `agent_steps_replayed`, `agent_steps_partial`, `agent_steps_missed`, `agent_steps_vision` | How the replay cache served the agent steps, and how many used pixel evidence |
|
|
127
|
+
| `agent_actions` | How often the agent took each action, by the runner's own names: `{"tap": 12, "typeText": 3, "scroll": 2}`. A project's own tools are counted together as `tool` and anything else as `other`; no other name is sent |
|
|
128
|
+
| `model_gateway`, `model_provider`, `model_id`, `model_calls`, `model_tokens`, `model_cached_tokens`, `estimated_cost_usd` | For the first model-backed step: the AI SDK provider that served it (`gateway` for the Vercel AI Gateway, `openrouter.chat`, `openai.chat`, ...), the vendor (the first segment of a `vendor/model` id, else the provider), and the public model id (a fine-tuned or routed id is reported as `other`); then the run's totals |
|
|
129
|
+
| `cost_source` | `provider` when the provider priced the calls, `none` when the run made model calls nobody priced, `null` for a run without model calls |
|
|
130
|
+
| `artifact_bytes` | Size of the artifacts the run wrote |
|
|
131
|
+
| `errors`, `error_codes` | How many run-level errors, and the distinct error codes seen anywhere in the run (`LOCATOR_NOT_FOUND`, `APP_UNREACHABLE`, ...), at most 20. A code that is not an upper-case token, the shape of every runner code, is reported as `OTHER` |
|
|
132
|
+
| `primary_error_code` | The first error the run recorded, which is the one that decided its status: a run-level error, else the failed attempt's verdict, else a step's; `null` for a clean run |
|
|
133
|
+
| `error_kinds` | For `ENGINE_FAILURE`, `MODEL_PROVIDER_FAILED`, and `ERROR`, whose code says where a failure surfaced but not what it was: the code and a kind read off the message against a closed list (`auth`, `rate-limit`, `overloaded`, `timeout`, `network`, `server`, `bad-request`, `device`, `daemon`, `browser`, `permission`, `not-found`, `memory`, `other`), as `MODEL_PROVIDER_FAILED:rate-limit`. Only the kind's name leaves the machine, never the message |
|
|
134
|
+
|
|
135
|
+
Which config features the run used, absent when the config did not load. Each
|
|
136
|
+
is a count, a boolean, or one of the runner's own option values, never a name,
|
|
137
|
+
a path, or free text you wrote:
|
|
138
|
+
|
|
139
|
+
| Property | Value |
|
|
140
|
+
| --- | --- |
|
|
141
|
+
| `config_workers`, `config_retries` | The worker count and retries the run resolved |
|
|
142
|
+
| `config_agents`, `config_custom_executor`, `config_separate_judge`, `config_project_tools` | How many agents are configured, whether any has a custom executor or a judge model of its own, and how many distinct project tools they declare |
|
|
143
|
+
| `config_credentials`, `config_secrets` | How many credentials and secrets are configured |
|
|
144
|
+
| `config_cache_mode`, `config_cache_store`, `config_cache_strict` | `off`, `read-only`, or `read-write`; `file` or `custom`; whether strict replay is on |
|
|
145
|
+
| `config_reporters`, `config_custom_reporters`, `config_artifact_store` | The built-in reporter ids (`list`, `json`, `junit`, `markdown`), how many reporter objects the config adds, and whether an artifact store is set |
|
|
146
|
+
| `config_trace_modes`, `config_video_modes` | The distinct recording modes across targets (`off`, `on`, `retain-on-failure`, `on-first-retry`, `on-all-retries`) |
|
|
147
|
+
| `config_app_commands`, `config_environments` | How many targets start an app command, and the distinct app environments (`test`, `staging`, `production`) |
|
|
148
|
+
|
|
149
|
+
On `e2e explore` only, what the exploration was given and found, by count.
|
|
150
|
+
Never the goal, a step's charter, or a finding's words:
|
|
151
|
+
|
|
152
|
+
| Property | Value |
|
|
153
|
+
| --- | --- |
|
|
154
|
+
| `explore_ended` | Why it stopped: `finished`, `step-limit`, `time`, `stuck`, or `aborted` |
|
|
155
|
+
| `explore_max_steps`, `explore_timeout_ms` | The budgets it ran with |
|
|
156
|
+
| `explore_steps`, `explore_steps_passed`, `explore_steps_failed`, `explore_steps_blocked`, `explore_steps_exhausted` | Exploration steps, by how each ended |
|
|
157
|
+
| `explore_assessed` | Whether the agent gave a closing assessment |
|
|
158
|
+
| `explore_issues`, `explore_warnings`, `explore_findings_by_severity` | Findings by kind, and by severity: `{"1": 0, "2": 1, "3": 0, "4": 0, "5": 1}` |
|
|
159
|
+
|
|
160
|
+
`e2e_mcp_session`, once per `open_session` an `e2e mcp` server receives, sent when the session closes or the open fails. A session still open when the client kills the server is not sent:
|
|
161
|
+
|
|
162
|
+
| Property | Value |
|
|
163
|
+
| --- | --- |
|
|
164
|
+
| `client`, `client_version` | The name and version the MCP client gives itself (`claude-code`, `cursor-vscode`, ...). A value that is not a plain token is reported as `other`; `null` before the client introduced itself |
|
|
165
|
+
| `outcome`, `error_code` | `closed` for a session that opened, `open-failed` with the runner code it failed with (`APP_UNREACHABLE`, `ENGINE_FAILURE`, ...) |
|
|
166
|
+
| `ended_by` | `agent` for `close_session`, `idle`, `step` for the session's time limit, `server` when the server shut down; `null` for a failed open |
|
|
167
|
+
| `platform`, `engine`, `headed` | The target's platform and engine with its version, as for a run, and whether the UI was shown |
|
|
168
|
+
| `duration_ms`, `sessions_open` | How long the session lived, and how many other sessions were open when it opened |
|
|
169
|
+
| `calls_total`, `calls_failed`, `calls` | Tool calls, failed calls, and calls by the session's own tool names: `{"observe": 4, "tap": 9, "locate": 2, "screenshot": 1}`. A project's own tools are counted together as `tool` and anything else as `other`; no other name is sent |
|
|
170
|
+
| `error_codes` | How often each runner code failed a call: `{"LOCATOR_NOT_FOUND": 2}`, at most 20 codes. A code that is not an upper-case token is reported as `OTHER` |
|
|
171
|
+
|
|
172
|
+
## What is never sent
|
|
173
|
+
|
|
174
|
+
Test titles, file paths, URLs, origins, instructions, observations, page
|
|
175
|
+
content, screenshots, error messages, stack traces, environment variable
|
|
176
|
+
values, credentials, or file contents. Nor the names of targets, agents,
|
|
177
|
+
credentials, secrets, or project tools, the arguments or results of MCP tool
|
|
178
|
+
calls, an exploration's goal, or its findings. Events include only the properties
|
|
179
|
+
listed above.
|
|
180
|
+
|
|
181
|
+
## In CI
|
|
182
|
+
|
|
183
|
+
CI runs are attributed to the CI vendor rather than to a machine, no
|
|
184
|
+
preferences file is written on the runner, and no notice is printed. Set
|
|
185
|
+
`E2E_TELEMETRY_DISABLED: '1'` in the job's `env` to send nothing from CI.
|
|
186
|
+
|
|
187
|
+
## In a fleet
|
|
188
|
+
|
|
189
|
+
A platform that runs e2e on its users' behalf starts each run on a fresh
|
|
190
|
+
machine, and every fresh machine would otherwise count as a new user. Set
|
|
191
|
+
`E2E_TELEMETRY_FLEET=<name>` in those machines and they are attributed to
|
|
192
|
+
`fleet:<name>` instead, like CI: no preferences file, no notice, and no
|
|
193
|
+
project id outside git. Or set `E2E_TELEMETRY_DISABLED=1` and send nothing.
|
|
194
|
+
|
|
195
|
+
## Where it goes
|
|
196
|
+
|
|
197
|
+
Events go to a PostHog project we operate, in one request to
|
|
198
|
+
`eu.i.posthog.com`. PostHog keeps no person profile for the ids and stores
|
|
199
|
+
no request address; every event also asks it to skip its GeoIP step, so no
|
|
200
|
+
country, city, or coordinates are derived from where the request came from.
|
|
201
|
+
The data is read in aggregate. Telemetry falls under the
|
|
202
|
+
[security policy](https://github.com/tester-army/e2e/blob/main/SECURITY.md).
|
|
203
|
+
[Outbound connections](/security#outbound-connections) lists every other
|
|
204
|
+
connection a run can make.
|
|
205
|
+
|
|
206
|
+
## Feedback
|
|
207
|
+
|
|
208
|
+
[`e2e feedback`](/reference/cli#e2e-feedback) is not telemetry. It sends
|
|
209
|
+
nothing until you, or the coding agent in your shell, run it, and then it
|
|
210
|
+
sends the words written into its flags as one `e2e_feedback` event to the
|
|
211
|
+
same PostHog project, with the machine facts above. Because it is an explicit
|
|
212
|
+
request, a saved `e2e telemetry disable` does not stop it, but
|
|
213
|
+
`E2E_TELEMETRY_DISABLED=1` and `DO_NOT_TRACK=1` do: an environment that set
|
|
214
|
+
either sends nothing, feedback included. `E2E_TELEMETRY_DEBUG=1` and
|
|
215
|
+
`--dry-run` print it instead of sending it. When telemetry is on, the
|
|
216
|
+
event carries the same anonymous id as your telemetry events. Secret-named
|
|
217
|
+
environment variable values and well-known token shapes are redacted before
|
|
218
|
+
it is sent.
|
|
219
|
+
|
|
220
|
+
## The notice
|
|
221
|
+
|
|
222
|
+
The first command prints a notice on stderr explaining how to opt out.
|
|
223
|
+
`e2e init` is exempt, so a scaffold starts with its prompts rather than a
|
|
224
|
+
disclaimer; the first command after it prints the notice. `e2e telemetry`
|
|
225
|
+
is exempt too, since it is where you act on the notice. The notice leaves
|
|
226
|
+
`--reporter json` output intact. The notice appears again after a
|
|
227
|
+
material change to the data collected.
|
package/docs/tools.mdx
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Project tools
|
|
3
|
+
description: Add tools for test APIs, data setup, and device operations.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Put tools in an agent's `tools` so the agent can call your test API or perform
|
|
7
|
+
other project-specific operations during a goal. Wrap each AI SDK tool with
|
|
8
|
+
`defineTool` to declare whether it changes state and which platforms support it.
|
|
9
|
+
|
|
10
|
+
```ts title="e2e.config.ts"
|
|
11
|
+
import type { E2EConfig } from 'e2e';
|
|
12
|
+
import { defineTool } from 'e2e/agent';
|
|
13
|
+
import { web } from '@e2e-dev/web';
|
|
14
|
+
import { gateway, tool } from 'ai';
|
|
15
|
+
import { z } from 'zod';
|
|
16
|
+
|
|
17
|
+
const APP_URL = process.env.APP_URL ?? 'http://localhost:3000';
|
|
18
|
+
|
|
19
|
+
const seedCart = defineTool(
|
|
20
|
+
tool({
|
|
21
|
+
description: 'Seed the cart with a SKU via the store test API',
|
|
22
|
+
inputSchema: z.object({ sku: z.string() }),
|
|
23
|
+
execute: async ({ sku }) => {
|
|
24
|
+
const response = await fetch(`${APP_URL}/api/test/cart?sku=${encodeURIComponent(sku)}`);
|
|
25
|
+
if (!response.ok) throw new Error(`Cart seeding failed: HTTP ${response.status}`);
|
|
26
|
+
return response.text();
|
|
27
|
+
},
|
|
28
|
+
}),
|
|
29
|
+
{ mutates: true },
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
export default {
|
|
33
|
+
targets: [{ engine: web(), app: { url: APP_URL } }],
|
|
34
|
+
agents: { default: { model: gateway('openai/gpt-6-luna-fast'), tools: { seedCart } } },
|
|
35
|
+
} satisfies E2EConfig;
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The agent can now seed a cart before checking out:
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
await agent.act('seed the cart with SKU {sku}, then check out', {
|
|
42
|
+
params: { sku: 'SHIRT-BLUE-M' },
|
|
43
|
+
});
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Built-in tool names are reserved. Loading the config fails with
|
|
47
|
+
`INVALID_CONFIG` for a project tool named like a grammar verb (`tap`,
|
|
48
|
+
`screenshot`), a tool the harness adds (`complete_step` in every step,
|
|
49
|
+
`locate`, `start_recording`, and `stop_recording` in an `e2e mcp` session,
|
|
50
|
+
`report_finding` under `e2e explore`), and for a value `defineTool` did not
|
|
51
|
+
build. Tools belong to
|
|
52
|
+
the built-in agent: an entry with a custom `executor` cannot also set
|
|
53
|
+
`tools`.
|
|
54
|
+
|
|
55
|
+
## Declare what a tool does
|
|
56
|
+
|
|
57
|
+
`defineTool` takes the AI SDK tool and these annotations:
|
|
58
|
+
|
|
59
|
+
| Annotation | Meaning |
|
|
60
|
+
| --- | --- |
|
|
61
|
+
| `mutates: true` | Changes state. The call counts against the step's action budget and runs in order with the other actions. The [replay cache](/cache) cannot replay it, so the agent runs that part of the step live. |
|
|
62
|
+
| `mutates: false` | Read-only. Runs without an action slot and may observe the screen. |
|
|
63
|
+
| `platforms: ['ios', 'android']` | Offers the tool only on those platforms. Omit this to offer it on every target. |
|
|
64
|
+
|
|
65
|
+
A failed call still consumes its action slot. The runner checks the budget
|
|
66
|
+
before dispatch, including when the model requests several calls at once.
|
|
67
|
+
|
|
68
|
+
## Observe from a tool
|
|
69
|
+
|
|
70
|
+
A read-only tool can observe the redacted screen. This example saves a
|
|
71
|
+
masked screenshot as report evidence when pixels are available:
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
import { randomUUID } from 'node:crypto';
|
|
75
|
+
import { defineTool, getToolContext } from 'e2e/agent';
|
|
76
|
+
import { tool } from 'ai';
|
|
77
|
+
import { z } from 'zod';
|
|
78
|
+
|
|
79
|
+
const captureEvidence = defineTool(
|
|
80
|
+
tool({
|
|
81
|
+
description: 'Save a screenshot as evidence in the report',
|
|
82
|
+
inputSchema: z.object({}),
|
|
83
|
+
execute: async (_input, executionOptions) => {
|
|
84
|
+
const context = getToolContext(executionOptions);
|
|
85
|
+
const observation = await context.observe({ pixels: true });
|
|
86
|
+
const pixels = observation.pixels;
|
|
87
|
+
if (pixels === undefined) {
|
|
88
|
+
return { withheld: observation.pixelsWithheld ?? 'UNSUPPORTED_CAPABILITY' };
|
|
89
|
+
}
|
|
90
|
+
const id = await context.attachScreenshot(pixels, `evidence-${randomUUID()}`);
|
|
91
|
+
return { evidence: id };
|
|
92
|
+
},
|
|
93
|
+
}),
|
|
94
|
+
{ mutates: false },
|
|
95
|
+
);
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
`observe()` returns a redacted text snapshot. Request `tree: true` for the
|
|
99
|
+
node tree or `pixels: true` for a masked screenshot. The built-in agent's
|
|
100
|
+
restrictions apply, including no pixels
|
|
101
|
+
[after a secret fill](/security#screenshots-after-a-secret-fill).
|
|
102
|
+
|
|
103
|
+
Observe in a separate read-only tool. A mutating tool already occupies the
|
|
104
|
+
action queue, so observing from inside it would wait on its own operation.
|
|
105
|
+
|
|
106
|
+
`attachScreenshot(pixels, label)` adds the image to the step's artifacts and
|
|
107
|
+
returns its artifact id. Use a unique label for each capture to avoid
|
|
108
|
+
overwriting an earlier image.
|
|
109
|
+
|
|
110
|
+
## Device toolkits
|
|
111
|
+
|
|
112
|
+
`@e2e-dev/mobile` ships a ready tool pack for its engine. Pass every device
|
|
113
|
+
engine to one `mobileTools` call, and spread the pack to add your own tools
|
|
114
|
+
beside it:
|
|
115
|
+
|
|
116
|
+
```ts
|
|
117
|
+
import type { E2EConfig } from 'e2e';
|
|
118
|
+
import { mobile } from '@e2e-dev/mobile';
|
|
119
|
+
import { mobileTools } from '@e2e-dev/mobile/tools';
|
|
120
|
+
import { gateway } from 'ai';
|
|
121
|
+
|
|
122
|
+
const iphone = mobile({ platform: 'ios' });
|
|
123
|
+
const pixel = mobile({ platform: 'android' });
|
|
124
|
+
|
|
125
|
+
export default {
|
|
126
|
+
targets: [
|
|
127
|
+
{ name: 'iphone', engine: iphone, app: { bundleId: 'Settings' } },
|
|
128
|
+
{ name: 'pixel', engine: pixel, app: { bundleId: 'com.android.settings' } },
|
|
129
|
+
],
|
|
130
|
+
agents: {
|
|
131
|
+
default: {
|
|
132
|
+
model: gateway('openai/gpt-6-luna-fast'),
|
|
133
|
+
tools: { ...mobileTools(iphone, pixel) /* , ...your own tools */ },
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
} satisfies E2EConfig;
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
The pack adds `open_app`, `swipe`, and `alert` on device targets.
|
|
140
|
+
Screenshots and point actions come from the engine's built-in tools.
|
|
141
|
+
See the [Mobile engine reference](/reference/mobile#agent-tools).
|
|
142
|
+
|
|
143
|
+
<CardGroup cols={2}>
|
|
144
|
+
<Card title="Custom executors" icon="gears" href="/executors">
|
|
145
|
+
Replace the prompt or decision loop.
|
|
146
|
+
</Card>
|
|
147
|
+
<Card title="How agent steps work" icon="stairs" href="/agent-steps">
|
|
148
|
+
What the model sees and what it may do.
|
|
149
|
+
</Card>
|
|
150
|
+
</CardGroup>
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Testing viewports
|
|
3
|
+
description: Run a suite at several sizes, resize inside a test, and know what the agent sees at each.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Set a viewport on the target to run a suite at that size. Use
|
|
7
|
+
`browser.setViewport()` to resize during a test. The agent uses the current size
|
|
8
|
+
and cannot resize it.
|
|
9
|
+
|
|
10
|
+
## One size per target
|
|
11
|
+
|
|
12
|
+
`viewport` sets the initial size of each attempt, in pixels. The default is
|
|
13
|
+
1280 by 720. Add one target for each size you want to test:
|
|
14
|
+
|
|
15
|
+
```ts title="e2e.config.ts"
|
|
16
|
+
import type { E2EConfig } from 'e2e';
|
|
17
|
+
import { web } from '@e2e-dev/web';
|
|
18
|
+
|
|
19
|
+
const app = { url: 'http://localhost:3000' };
|
|
20
|
+
|
|
21
|
+
export default {
|
|
22
|
+
targets: [
|
|
23
|
+
{ name: 'desktop', engine: web(), app },
|
|
24
|
+
{ name: 'tablet', engine: web({ viewport: { width: 820, height: 1180 } }), app },
|
|
25
|
+
{ name: 'phone', engine: web({ browser: 'webkit', viewport: { width: 390, height: 844 } }), app },
|
|
26
|
+
],
|
|
27
|
+
} satisfies E2EConfig;
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Each test runs once per target, with a separate result labeled `desktop`,
|
|
31
|
+
`tablet`, or `phone`. Run one size with `npx e2e run --target phone`, or list
|
|
32
|
+
the selected test-target pairs with `npx e2e list`.
|
|
33
|
+
|
|
34
|
+
To have the runner start one dev server for every size, give every target
|
|
35
|
+
the same `app.command`: targets declaring one command share one process; see
|
|
36
|
+
[several targets](/starting-your-app#several-targets). Every retry starts at
|
|
37
|
+
the target's configured size.
|
|
38
|
+
|
|
39
|
+
## Fill the window
|
|
40
|
+
|
|
41
|
+
`viewport: null` sets no size, so the page fills the browser window. The
|
|
42
|
+
agent, screenshots, and videos use that size. Use it in a headed run, or
|
|
43
|
+
with a hosted browser whose live view would show a fixed 1280 by 720 page
|
|
44
|
+
in one corner:
|
|
45
|
+
|
|
46
|
+
```ts title="e2e.config.ts"
|
|
47
|
+
{ name: 'window', engine: web({ viewport: null }), app }
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
The page takes the window's size, minus the toolbar in a headed browser. A
|
|
51
|
+
local headed launch opens a small window; a hosted browser uses the window
|
|
52
|
+
size you requested from the service. `browser.setViewport` still works.
|
|
53
|
+
|
|
54
|
+
## Resize inside a test
|
|
55
|
+
|
|
56
|
+
`browser.setViewport` resizes the page for the rest of the attempt, through
|
|
57
|
+
`app.restart()` and `app.clearState()`:
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
import { test } from '@e2e-dev/web';
|
|
61
|
+
import { expect } from 'e2e';
|
|
62
|
+
|
|
63
|
+
test('the menu collapses on a narrow screen', async ({ app, screen, browser }) => {
|
|
64
|
+
await app.open('/');
|
|
65
|
+
await expect(screen.getByRole('navigation')).toBeVisible();
|
|
66
|
+
|
|
67
|
+
await browser.setViewport({ width: 390, height: 844 });
|
|
68
|
+
await expect(screen.getByRole('button', 'Menu')).toBeVisible();
|
|
69
|
+
await expect(screen.getByRole('navigation')).toBeHidden();
|
|
70
|
+
});
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Use this when one test needs to check a layout before and after resizing.
|
|
74
|
+
For a whole suite, configure separate targets instead.
|
|
75
|
+
|
|
76
|
+
Call it before `app.open` to load the first page at that size, so the app
|
|
77
|
+
never renders its desktop layout first:
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
await browser.setViewport({ width: 390, height: 844 });
|
|
81
|
+
await app.open('/');
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
The resize appears as a step in the report. To check the exact width, read
|
|
85
|
+
it from the page:
|
|
86
|
+
|
|
87
|
+
```ts
|
|
88
|
+
const width = await browser.evaluate(() => window.innerWidth);
|
|
89
|
+
expect(width).toBe(390);
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## What the agent sees
|
|
93
|
+
|
|
94
|
+
The agent receives the current viewport size with each observation.
|
|
95
|
+
Screenshots cover that viewport. Off-screen elements can still appear in
|
|
96
|
+
the tree, and tapping them scrolls them into view. The agent can scroll to
|
|
97
|
+
reveal lazy-loaded content.
|
|
98
|
+
|
|
99
|
+
Resize before calling `agent.act`:
|
|
100
|
+
|
|
101
|
+
```ts
|
|
102
|
+
test('the mobile menu reaches pricing', async ({ app, agent, browser }) => {
|
|
103
|
+
await browser.setViewport({ width: 390, height: 844 });
|
|
104
|
+
await app.open('/');
|
|
105
|
+
await agent.act('open the navigation menu and go to Pricing');
|
|
106
|
+
await expect(browser).toHaveURL('/pricing');
|
|
107
|
+
});
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Scoping a test to one size
|
|
111
|
+
|
|
112
|
+
`platforms` and `requires` cannot select a viewport; all Playwright targets
|
|
113
|
+
use platform `web`. To skip a test at some sizes, check the width in the
|
|
114
|
+
test:
|
|
115
|
+
|
|
116
|
+
```ts
|
|
117
|
+
test('the sidebar stays open', async ({ app, screen, browser }) => {
|
|
118
|
+
await app.open('/');
|
|
119
|
+
test.skip((await browser.evaluate(() => window.innerWidth)) < 768, 'desktop layout only');
|
|
120
|
+
await expect(screen.getByRole('complementary')).toBeVisible();
|
|
121
|
+
});
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
To keep a whole group of size-specific tests apart, give them their own
|
|
125
|
+
config and run it with `--config`.
|
|
126
|
+
|
|
127
|
+
## Limits
|
|
128
|
+
|
|
129
|
+
A narrow viewport tests responsive layout. It still uses a desktop browser
|
|
130
|
+
with a scale factor of 1, desktop pointer behavior, and its usual user agent.
|
|
131
|
+
It does not emulate touch, color scheme, or reduced-motion preferences.
|
|
132
|
+
Use the [device engine](/mobile) for tests on a simulator or emulator.
|
|
133
|
+
|
|
134
|
+
A video keeps the size the page had when it started recording; set
|
|
135
|
+
`web({ screencast: { size } })` for one fixed size. A browser provider that
|
|
136
|
+
records, such as [Kernel](/integrations/kernel#recordings), records the whole
|
|
137
|
+
screen instead.
|
|
138
|
+
|
|
139
|
+
<CardGroup cols={2}>
|
|
140
|
+
<Card title="Working with the browser" icon="globe" href="/browser">
|
|
141
|
+
Routes, cookies, dialogs, downloads, and the rest of the `browser` fixture.
|
|
142
|
+
</Card>
|
|
143
|
+
<Card title="Web engine reference" icon="masks-theater" href="/reference/web">
|
|
144
|
+
Every engine option and `browser` method, with timeouts and errors.
|
|
145
|
+
</Card>
|
|
146
|
+
</CardGroup>
|