e2e 0.15.2 → 0.17.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/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 +29 -9
- package/dist/agent/action-dispatcher.d.ts +0 -1
- package/dist/agent/action-dispatcher.js +4 -6
- package/dist/agent/action-names.d.ts +0 -1
- package/dist/agent/action-names.js +0 -1
- package/dist/agent/actions.d.ts +32 -24
- package/dist/agent/actions.js +38 -25
- 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 +0 -1
- package/dist/agent/error.js +0 -1
- 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 +2 -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 +0 -1
- package/dist/agent/model/tool-choice.js +0 -1
- package/dist/agent/observation-budget.d.ts +0 -1
- package/dist/agent/observation-budget.js +0 -1
- package/dist/agent/observation-feed.d.ts +5 -7
- package/dist/agent/observation-feed.js +5 -8
- package/dist/agent/observation.d.ts +40 -12
- package/dist/agent/observation.js +109 -60
- 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 +8 -9
- package/dist/agent/point-tap.js +1 -2
- 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 +19 -9
- package/dist/agent/replay.js +11 -15
- package/dist/agent/screen-update.d.ts +0 -1
- package/dist/agent/screen-update.js +0 -1
- package/dist/agent/scroll-target.d.ts +2 -4
- 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 +41 -15
- package/dist/agent/step-cache.js +147 -63
- package/dist/agent/tool-loop.d.ts +0 -1
- package/dist/agent/tool-loop.js +2 -1
- 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 +72 -24
- package/dist/cache/anchors.js +233 -61
- package/dist/cache/context.d.ts +25 -15
- package/dist/cache/context.js +50 -9
- package/dist/cache/decide.d.ts +2 -3
- package/dist/cache/decide.js +4 -7
- package/dist/cache/identity.d.ts +18 -5
- package/dist/cache/identity.js +9 -5
- package/dist/cache/recorder.d.ts +15 -2
- package/dist/cache/recorder.js +36 -24
- package/dist/cache/rekeyed.d.ts +46 -0
- package/dist/cache/rekeyed.js +89 -0
- package/dist/cache/relocate.d.ts +14 -15
- package/dist/cache/relocate.js +33 -26
- package/dist/cache/route.d.ts +32 -34
- package/dist/cache/route.js +94 -51
- package/dist/cache/store.d.ts +6 -1
- package/dist/cache/store.js +21 -2
- package/dist/cache/template.d.ts +0 -1
- package/dist/cache/template.js +0 -1
- package/dist/cache/trace.d.ts +53 -15
- package/dist/cache/trace.js +70 -29
- 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 +10 -11
- 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 +1 -4
- package/dist/cli/init/engines.js +2 -3
- package/dist/cli/init/gateways.d.ts +1 -2
- package/dist/cli/init/gateways.js +11 -2
- 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 +0 -1
- package/dist/cli/init/scaffold.js +0 -1
- package/dist/cli/init/sibling-versions.json +1 -1
- package/dist/cli/init/versions.d.ts +0 -9
- package/dist/cli/init/versions.js +1 -11
- 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 +1 -1
- package/dist/config/resolve.js +33 -2
- 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 +3 -4
- 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 +101 -59
- 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-scope.d.ts +52 -0
- package/dist/expect/poll-scope.js +113 -0
- package/dist/expect/poll.d.ts +0 -1
- package/dist/expect/poll.js +31 -5
- 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 +11 -5
- 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/abandoned.d.ts +11 -0
- package/dist/internal/abandoned.js +23 -0
- 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 +2 -1
- package/dist/internal/brands.js +2 -1
- package/dist/internal/client-identity.d.ts +9 -0
- package/dist/internal/client-identity.js +14 -0
- 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 +7 -5
- package/dist/internal/redact.js +116 -24
- 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 +6 -1
- package/dist/internal/time.js +25 -14
- package/dist/internal/urls.d.ts +9 -6
- package/dist/internal/urls.js +19 -11
- 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 +12 -3
- package/dist/locator/engine.js +8 -4
- 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 +28 -5
- package/dist/mcp/catalog.d.ts +7 -3
- package/dist/mcp/catalog.js +8 -9
- 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 +44 -22
- 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 +3 -24
- package/dist/oauth/cli.d.ts +0 -1
- package/dist/oauth/cli.js +1 -1
- package/dist/oauth/copilot.d.ts +5 -5
- package/dist/oauth/copilot.js +80 -8
- 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 +2 -2
- 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 +2 -2
- package/dist/oauth/opencode-console.d.ts +10 -0
- package/dist/oauth/opencode-console.js +133 -0
- package/dist/oauth/pkce.d.ts +0 -1
- package/dist/oauth/pkce.js +0 -1
- package/dist/oauth/providers/github-copilot.d.ts +12 -1
- package/dist/oauth/providers/github-copilot.js +80 -19
- package/dist/oauth/providers/openai.d.ts +0 -1
- package/dist/oauth/providers/openai.js +1 -2
- package/dist/oauth/providers/opencode-console.d.ts +31 -0
- package/dist/oauth/providers/opencode-console.js +148 -0
- package/dist/oauth/providers/xai.d.ts +0 -1
- package/dist/oauth/providers/xai.js +0 -1
- package/dist/oauth/providers.d.ts +2 -7
- package/dist/oauth/providers.js +3 -8
- package/dist/oauth/responses.d.ts +9 -0
- package/dist/oauth/responses.js +23 -0
- 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 +26 -1
- package/dist/report/build.js +16 -9
- 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 +6 -2
- package/dist/report/failure-text.js +14 -5
- package/dist/report/format.d.ts +10 -6
- package/dist/report/format.js +12 -6
- 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 +11 -13
- 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 +1 -1
- package/dist/report/list.js +38 -19
- 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 +1 -2
- package/dist/report/markdown.js +37 -15
- package/dist/report/outcome.d.ts +0 -1
- package/dist/report/outcome.js +0 -1
- package/dist/report/repeats.d.ts +6 -2
- package/dist/report/repeats.js +12 -4
- 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 +18 -1
- package/dist/run/artifacts.js +68 -2
- 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 +9 -1
- package/dist/run/execute.js +55 -29
- package/dist/run/extended-fixtures.d.ts +0 -1
- package/dist/run/extended-fixtures.js +6 -3
- package/dist/run/failure-evidence.d.ts +0 -1
- package/dist/run/failure-evidence.js +4 -3
- 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 +6 -9
- package/dist/run/in-process.d.ts +2 -1
- package/dist/run/in-process.js +1 -1
- package/dist/run/last-run.d.ts +42 -9
- package/dist/run/last-run.js +121 -15
- 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 +6 -2
- package/dist/run/realm.js +21 -8
- package/dist/run/records.d.ts +16 -1
- package/dist/run/records.js +26 -1
- package/dist/run/retry.d.ts +3 -2
- package/dist/run/retry.js +4 -3
- package/dist/run/runner.d.ts +3 -2
- package/dist/run/runner.js +70 -32
- 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 +2 -1
- package/dist/run/serial.js +8 -6
- 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 -9
- package/dist/run/steps.js +7 -22
- 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 +7 -7
- package/dist/run/worker/handle.d.ts +0 -1
- package/dist/run/worker/handle.js +0 -1
- package/dist/run/worker/protocol.d.ts +2 -1
- package/dist/run/worker/protocol.js +0 -1
- package/dist/run/worker/session.d.ts +2 -1
- package/dist/run/worker/session.js +1 -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 +108 -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 +34 -26
- package/dist/types.js +0 -1
- package/docs/agents.mdx +6 -3
- package/docs/assertions.mdx +94 -0
- package/docs/authentication.mdx +3 -1
- package/docs/browser.mdx +42 -6
- package/docs/cache.mdx +64 -18
- package/docs/ci.mdx +11 -7
- package/docs/debugging.mdx +6 -3
- package/docs/executors.mdx +5 -3
- package/docs/github.mdx +12 -4
- package/docs/{writing-tests.mdx → goals.mdx} +21 -101
- package/docs/index.mdx +4 -4
- package/docs/integrations/kernel.mdx +1 -1
- package/docs/locators.mdx +64 -0
- package/docs/migrate/cypress.mdx +2 -2
- package/docs/migrate/maestro.mdx +2 -2
- package/docs/migrate/playwright.mdx +22 -16
- package/docs/migrate/selenium.mdx +2 -2
- package/docs/mobile.mdx +61 -4
- package/docs/models.mdx +53 -7
- package/docs/physical-devices.mdx +76 -0
- package/docs/quickstart.mdx +4 -3
- package/docs/reference/app.mdx +1 -1
- package/docs/reference/cli.mdx +30 -11
- package/docs/reference/config.mdx +25 -7
- package/docs/reference/engine.mdx +4 -3
- package/docs/reference/environment.mdx +8 -1
- package/docs/reference/errors.mdx +5 -5
- package/docs/reference/expect.mdx +79 -24
- package/docs/reference/mcp.mdx +3 -0
- package/docs/reference/mobile.mdx +23 -13
- package/docs/reference/reporters.mdx +8 -2
- package/docs/reference/screen.mdx +30 -7
- package/docs/reference/test.mdx +11 -4
- package/docs/reference/web.mdx +131 -23
- package/docs/security.mdx +45 -19
- package/docs/subscriptions.mdx +97 -9
- package/docs/telemetry.mdx +48 -6
- package/package.json +18 -4
- package/schema/report-v1.schema.json +14 -1
- package/skills/e2e/SKILL.md +2 -2
- package/skills/e2e/references/agent.md +22 -11
- package/skills/e2e/references/debugging.md +4 -4
- package/skills/e2e/references/mcp.md +3 -0
- package/skills/e2e/references/running.md +13 -8
- package/skills/e2e/references/setup.md +42 -15
- package/skills/e2e/references/writing-tests.md +43 -15
- 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
package/docs/executors.mdx
CHANGED
|
@@ -128,7 +128,7 @@ The executor receives this context:
|
|
|
128
128
|
|
|
129
129
|
| Member | What it is |
|
|
130
130
|
| --- | --- |
|
|
131
|
-
| `ctx.step` | The instruction, params, and `index` in the attempt's timeline |
|
|
131
|
+
| `ctx.step` | The instruction, params, and `index` in the attempt's timeline. A registered secret value the test spelled into the instruction or a param string reads `<secret:name>`; a `secrets.get()` handle is a placeholder you fill with `typeSecret` |
|
|
132
132
|
| `ctx.observe({ tree, pixels })` | Redacted screen text, with an optional node tree and masked screenshot |
|
|
133
133
|
| `ctx.actions` | Checked and recorded actions: `tap`, `doubleTap`, `longPress`, `secondaryTap`, `hover`, `type`, `typeSecret`, `press`, `select`, `check`, `drag`, `scrollTo`, `scrollUntil`, `upload`, `scroll`, `navigate`, `back`, and the point and keyboard verbs below |
|
|
134
134
|
| `ctx.target` | The target's `name` and `platform`, and `verbs`, the actions its engine supports. Offer only these to the model. |
|
|
@@ -215,8 +215,10 @@ default, follows the configured cache mode. A recorded step replays without
|
|
|
215
215
|
calling `runStep`. A replay that stops partway calls `runStep` with
|
|
216
216
|
`ctx.replayedPrefix`: continue from the current screen and do not redo the
|
|
217
217
|
replayed actions. What a step does through `ctx.actions` is recorded; a
|
|
218
|
-
mutating tool call leaves a gap the executor fills on replay. Entries are
|
|
219
|
-
keyed by
|
|
218
|
+
mutating tool call leaves a gap the executor fills on replay. Entries are
|
|
219
|
+
keyed by the configured agent and its context, so an entry one agent
|
|
220
|
+
recorded never replays for another; the executor itself is not part of the
|
|
221
|
+
key, so changing an agent's executor keeps its entries.
|
|
220
222
|
|
|
221
223
|
`'off'` never replays or records the executor's steps, so every step reaches
|
|
222
224
|
`runStep`. Use it for a brain whose own history or memory is the source of
|
package/docs/github.mdx
CHANGED
|
@@ -63,7 +63,10 @@ Upload artifacts even when a retry passes. Each failure's evidence links open
|
|
|
63
63
|
the run's Artifacts section; inside the download, every test has a directory
|
|
64
64
|
named after it and the agent that ran it
|
|
65
65
|
(`web/tests_billing.e2e.ts__upgrades/default/attempt-0/`), so keep
|
|
66
|
-
`path: .e2e/artifacts` and the download lines up with the report. A
|
|
66
|
+
`path: .e2e/artifacts` and the download lines up with the report. A
|
|
67
|
+
`--last-failed` rerun keeps the first run's directories and puts its own
|
|
68
|
+
under `rerun-1/`, so a flaky test's failed attempt still links to its own
|
|
69
|
+
files. A project
|
|
67
70
|
below the checkout root, such as `packages/e2e-tests`, gets source links under
|
|
68
71
|
that path. The checkout root is the nearest directory holding `.git` inside
|
|
69
72
|
`GITHUB_WORKSPACE`, so `actions/checkout` with a `path` input works too.
|
|
@@ -143,9 +146,14 @@ passes:
|
|
|
143
146
|
|
|
144
147
|
The comment covers the whole suite, not only the tests the rerun ran again.
|
|
145
148
|
A test that failed and then passed shows as flaky, a test that failed twice
|
|
146
|
-
stays failed,
|
|
147
|
-
|
|
148
|
-
|
|
149
|
+
stays failed, one that was interrupted and then passed shows as passed, and
|
|
150
|
+
the rest keep their first-pass results. The comment stays red while the
|
|
151
|
+
rerun left out something it owed: a failed test, one `--max-failures` stopped
|
|
152
|
+
before it ran, or a failed `beforeAll` or `afterAll` whose tests another
|
|
153
|
+
filter kept out of the rerun. It shows ⏹️ when the rerun left out a test the
|
|
154
|
+
first pass never finished. The rerun's own exit code counts only what it ran.
|
|
155
|
+
A failed attempt's evidence links to the first run's files, which the rerun
|
|
156
|
+
keeps.
|
|
149
157
|
|
|
150
158
|
## Matrix jobs
|
|
151
159
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
title:
|
|
3
|
-
description:
|
|
2
|
+
title: Goals
|
|
3
|
+
description: Write test steps as goals with agent.act, and structure the tests around them.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Use agent calls for goals and questions about the screen. Use
|
|
7
|
-
|
|
6
|
+
Use agent calls for goals and questions about the screen. Use
|
|
7
|
+
[locators](/locators) when you know the exact action or value to check. A test
|
|
8
|
+
can freely mix both.
|
|
8
9
|
|
|
9
10
|
```ts title="tests/todos.e2e.ts"
|
|
10
11
|
import { test, expect } from 'e2e';
|
|
@@ -23,7 +24,9 @@ test('todos survive a filter round-trip', async ({ app, agent, screen }) => {
|
|
|
23
24
|
## Goals: `agent.act`
|
|
24
25
|
|
|
25
26
|
Give `act` one goal. The agent chooses and performs the actions, then returns
|
|
26
|
-
when the goal passes or throws when it fails.
|
|
27
|
+
when the goal passes or throws when it fails. Await every agent and screen
|
|
28
|
+
call, and every `expect.poll`; a test that returns while one is still running
|
|
29
|
+
fails with `STEP_NOT_AWAITED`.
|
|
27
30
|
|
|
28
31
|
```ts
|
|
29
32
|
await agent.act('complete checkout with the test card');
|
|
@@ -68,60 +71,9 @@ A step can pass, fail, or be blocked by something such as missing credentials.
|
|
|
68
71
|
[How agent steps work](/agent-steps#how-a-step-ends) explains the verdicts and
|
|
69
72
|
exit codes.
|
|
70
73
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
fails with `ASSERTION_FAILED`. If the screen does not provide enough evidence,
|
|
75
|
-
it fails with `ASSERTION_INCONCLUSIVE`.
|
|
76
|
-
|
|
77
|
-
The judging model sees the statement and the current screen. It does not see
|
|
78
|
-
earlier steps or the acting agent's summaries.
|
|
79
|
-
|
|
80
|
-
```ts
|
|
81
|
-
await agent.assert('the dashboard shows a trial badge');
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
`assert` checks the screen now. Use `waitFor` when the condition may become true
|
|
85
|
-
later. It polls the screen and only calls the model when the observation changes.
|
|
86
|
-
|
|
87
|
-
```ts
|
|
88
|
-
await agent.waitFor('the export finishes and a download link appears', {
|
|
89
|
-
interval: 500,
|
|
90
|
-
timeout: 120_000,
|
|
91
|
-
});
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
`extract` reads structured data from the screen. Provide a
|
|
95
|
-
[Standard Schema](https://standardschema.dev) validator, such as Zod, to define
|
|
96
|
-
the result.
|
|
97
|
-
|
|
98
|
-
```ts
|
|
99
|
-
import { z } from 'zod';
|
|
100
|
-
|
|
101
|
-
const data = await agent.extract('every todo title and how many remain', {
|
|
102
|
-
schema: z.object({ titles: z.array(z.string()), remaining: z.number().int() }),
|
|
103
|
-
});
|
|
104
|
-
expect(data.titles).toContain('Buy milk');
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
<Tip>
|
|
108
|
-
For model-generated descriptions, check the relevant meaning rather than the
|
|
109
|
-
entire sentence. Use a locator assertion when the exact text matters.
|
|
110
|
-
</Tip>
|
|
111
|
-
|
|
112
|
-
### Judging pixels
|
|
113
|
-
|
|
114
|
-
By default, judgments read a redacted text snapshot of the screen. Add
|
|
115
|
-
`vision: true` for visual checks, such as charts or layout. Use
|
|
116
|
-
`vision: 'only'` to judge the screenshot alone.
|
|
117
|
-
|
|
118
|
-
```ts
|
|
119
|
-
await agent.assert('the chart trends upward', { vision: true });
|
|
120
|
-
await agent.assert('the search form is not covered by a banner', { vision: 'only' });
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
`act` requests screenshots itself when it needs them, so it has no `vision`
|
|
124
|
-
option. On supported engines, it can tap and type at points in the image:
|
|
74
|
+
`act` requests screenshots itself when it needs them, so unlike the
|
|
75
|
+
[judgments](/assertions#judging-pixels) it has no `vision` option. On
|
|
76
|
+
supported engines, it can tap and type at points in the image:
|
|
125
77
|
|
|
126
78
|
```ts
|
|
127
79
|
await agent.act('enter the code 3141 on the drawn keypad and press OK');
|
|
@@ -131,44 +83,8 @@ Images add input tokens. Screenshots are withheld for the rest of an attempt
|
|
|
131
83
|
after a secret is filled. The [agent reference](/reference/agent#vision)
|
|
132
84
|
lists the modes and restrictions.
|
|
133
85
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
Use locators to interact with known controls and check exact values.
|
|
137
|
-
An `expect` after `act` checks the exact result. It is also what lets the
|
|
138
|
-
[replay cache](/cache) record the step and keep it.
|
|
139
|
-
|
|
140
|
-
```ts
|
|
141
|
-
// Semantic queries: role and name first, label second, test ID last.
|
|
142
|
-
await screen.getByRole('button', 'Sign in').tap();
|
|
143
|
-
await screen.getByLabel('Email').fill('ada@example.test');
|
|
144
|
-
await screen.getByTestId('todo').first().tap();
|
|
145
|
-
|
|
146
|
-
// Scope into a row, gesture like a user:
|
|
147
|
-
const row = screen.getByRole('listitem').filter({ hasText: 'Design review' });
|
|
148
|
-
await row.getByRole('button', 'Archive').tap();
|
|
149
|
-
await screen.swipe({ direction: 'up', momentum: 'fast' });
|
|
150
|
-
|
|
151
|
-
// Coordinates, for what the tree does not list:
|
|
152
|
-
await screen.getByRole('image', 'Seat map').tap({ position: { x: 120, y: 48 } });
|
|
153
|
-
await screen.swipe({ from: { x: 300, y: 400 }, to: { x: 40, y: 400 } });
|
|
154
|
-
|
|
155
|
-
// Polling assertions:
|
|
156
|
-
await expect(screen.getByRole('status')).toHaveText('2 remaining');
|
|
157
|
-
await expect(screen.getByRole('heading', 'Dashboard')).toBeVisible();
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
Actions and single-node reads or assertions fail when a query matches more
|
|
161
|
-
than one node. Narrow it with `.filter()`, `.first()`, or `.nth()`.
|
|
162
|
-
Locator assertions retry until they pass or time out. Direct reads such as
|
|
163
|
-
`textContent()` do not retry a mismatched value.
|
|
164
|
-
|
|
165
|
-
Use the `browser` fixture for browser features such as routes, cookies, dialogs,
|
|
166
|
-
frames, and downloads; see [Working with the browser](/browser). The
|
|
167
|
-
[screen reference](/reference/screen) lists every query and action.
|
|
168
|
-
|
|
169
|
-
Share setup and cleanup through `test.extend`. A fixture can create a test
|
|
170
|
-
workspace before the test and delete it afterward, including when the test
|
|
171
|
-
fails. See [Your own fixtures](/reference/test#your-own-fixtures).
|
|
86
|
+
To check what a goal left on screen, follow it with an
|
|
87
|
+
[assertion](/assertions) or a [locator check](/locators).
|
|
172
88
|
|
|
173
89
|
## Tests without a screen
|
|
174
90
|
|
|
@@ -220,6 +136,10 @@ fixtures or hooks. When a flow must span several tests, mark the group
|
|
|
220
136
|
`{ serial: true }`. Members share app state, run in order on one worker,
|
|
221
137
|
and retry as a whole.
|
|
222
138
|
|
|
139
|
+
Share setup and cleanup through `test.extend`. A fixture can create a test
|
|
140
|
+
workspace before the test and delete it afterward, including when the test
|
|
141
|
+
fails. See [Your own fixtures](/reference/test#your-own-fixtures).
|
|
142
|
+
|
|
223
143
|
## Run one test
|
|
224
144
|
|
|
225
145
|
<CodeGroup>
|
|
@@ -247,10 +167,10 @@ The [CLI reference](/reference/cli#e2e-run) lists every flag.
|
|
|
247
167
|
## Next
|
|
248
168
|
|
|
249
169
|
<CardGroup cols={2}>
|
|
250
|
-
<Card title="
|
|
251
|
-
|
|
170
|
+
<Card title="Assertions" icon="circle-check" href="/assertions">
|
|
171
|
+
Check the screen with `assert`, `waitFor`, and `extract`.
|
|
252
172
|
</Card>
|
|
253
|
-
<Card title="
|
|
254
|
-
|
|
173
|
+
<Card title="Locators" icon="crosshairs" href="/locators">
|
|
174
|
+
Exact actions and checks with `screen` and `expect`.
|
|
255
175
|
</Card>
|
|
256
176
|
</CardGroup>
|
package/docs/index.mdx
CHANGED
|
@@ -9,9 +9,9 @@ e2e is a next-generation testing framework for web and mobile
|
|
|
9
9
|
apps, built to keep up with the speed we ship software today.
|
|
10
10
|
|
|
11
11
|
You choose how agentic each test is: fully deterministic with
|
|
12
|
-
[locators](/
|
|
12
|
+
[locators](/locators) and
|
|
13
13
|
[assertions](/reference/expect#locator-matchers), fully driven by an agent
|
|
14
|
-
from [goals](/
|
|
14
|
+
from [goals](/goals) in natural language, or a mix of
|
|
15
15
|
both in the same test.
|
|
16
16
|
|
|
17
17
|
<VideoCard
|
|
@@ -70,8 +70,8 @@ you shipped.
|
|
|
70
70
|
<Card title="Quickstart" icon="rocket" href="/quickstart">
|
|
71
71
|
One prompt for your coding agent, or set up by hand.
|
|
72
72
|
</Card>
|
|
73
|
-
<Card title="
|
|
74
|
-
Write
|
|
73
|
+
<Card title="Goals" icon="pen-to-square" href="/goals">
|
|
74
|
+
Write test steps as goals in natural language.
|
|
75
75
|
</Card>
|
|
76
76
|
<Card title="Coding agents" icon="robot" href="/coding-agents">
|
|
77
77
|
Let your coding agent write, run, and debug tests.
|
|
@@ -90,7 +90,7 @@ cookies and storage are not there.
|
|
|
90
90
|
that browser's default context, on its own first tab, so a `profile` applies
|
|
91
91
|
and the live view shows one tab. It costs a browser start per test and
|
|
92
92
|
carries the limits of a [per-attempt lease](/browser#hosted-browsers): no
|
|
93
|
-
`headers`, `basicAuth`, or `
|
|
93
|
+
`headers`, `basicAuth`, `userAgent`, `locale`, or `timezoneId`, no `app.clearState()`, and no
|
|
94
94
|
[sessions](/authentication), which fail the run before any test.
|
|
95
95
|
|
|
96
96
|
## Recordings
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Locators
|
|
3
|
+
description: Deterministic actions and checks with screen and expect.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use locators to interact with known controls and check exact values. Locator
|
|
7
|
+
steps call no model.
|
|
8
|
+
|
|
9
|
+
```ts title="tests/todos.e2e.ts"
|
|
10
|
+
import { test, expect } from 'e2e';
|
|
11
|
+
|
|
12
|
+
test('adds a todo', async ({ app, screen }) => {
|
|
13
|
+
await app.open('/todos');
|
|
14
|
+
await screen.getByLabel('New todo').fill('Buy milk');
|
|
15
|
+
await screen.getByRole('button', 'Add').tap();
|
|
16
|
+
await expect(screen.getByTestId('todo')).toHaveCount(1);
|
|
17
|
+
});
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
An `expect` after an [`agent.act` goal](/goals) checks the exact result. It is
|
|
21
|
+
also what lets the [replay cache](/cache) record the step and keep it.
|
|
22
|
+
|
|
23
|
+
## Queries, actions, and assertions
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
// Semantic queries: role and name first, label second, test ID last.
|
|
27
|
+
await screen.getByRole('button', 'Sign in').tap();
|
|
28
|
+
await screen.getByLabel('Email').fill('ada@example.test');
|
|
29
|
+
await screen.getByTestId('todo').first().tap();
|
|
30
|
+
|
|
31
|
+
// Scope into a row, gesture like a user:
|
|
32
|
+
const row = screen.getByRole('listitem').filter({ hasText: 'Design review' });
|
|
33
|
+
await row.getByRole('button', 'Archive').tap();
|
|
34
|
+
await screen.swipe({ direction: 'up', momentum: 'fast' });
|
|
35
|
+
|
|
36
|
+
// Coordinates, for what the tree does not list:
|
|
37
|
+
await screen.getByRole('image', 'Seat map').tap({ position: { x: 120, y: 48 } });
|
|
38
|
+
await screen.swipe({ from: { x: 300, y: 400 }, to: { x: 40, y: 400 } });
|
|
39
|
+
|
|
40
|
+
// Polling assertions:
|
|
41
|
+
await expect(screen.getByRole('status')).toHaveText('2 remaining');
|
|
42
|
+
await expect(screen.getByRole('heading', 'Dashboard')).toBeVisible();
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Actions and single-node reads or assertions fail when a query matches more
|
|
46
|
+
than one node. Narrow it with `.filter()`, `.first()`, or `.nth()`.
|
|
47
|
+
Locator assertions retry until they pass or time out. Direct reads such as
|
|
48
|
+
`textContent()` do not retry a mismatched value.
|
|
49
|
+
|
|
50
|
+
Use the `browser` fixture for browser features such as routes, cookies, dialogs,
|
|
51
|
+
frames, and downloads; see [Working with the browser](/browser). The
|
|
52
|
+
[screen reference](/reference/screen) lists every query and action, and the
|
|
53
|
+
[expect reference](/reference/expect#locator-matchers) lists every matcher.
|
|
54
|
+
|
|
55
|
+
## Next
|
|
56
|
+
|
|
57
|
+
<CardGroup cols={2}>
|
|
58
|
+
<Card title="Signing in" icon="key" href="/authentication">
|
|
59
|
+
Sessions and secrets.
|
|
60
|
+
</Card>
|
|
61
|
+
<Card title="Agents and personas" icon="users" href="/agents">
|
|
62
|
+
Several agents in one suite, and running a flow as each of them.
|
|
63
|
+
</Card>
|
|
64
|
+
</CardGroup>
|
package/docs/migrate/cypress.mdx
CHANGED
|
@@ -115,8 +115,8 @@ Start with a spec that often breaks and whose fixed `cy.wait` calls can
|
|
|
115
115
|
become assertions on the condition the test needs.
|
|
116
116
|
|
|
117
117
|
<CardGroup cols={2}>
|
|
118
|
-
<Card title="
|
|
119
|
-
|
|
118
|
+
<Card title="Goals" icon="pen-to-square" href="/goals">
|
|
119
|
+
Write test steps as goals instead of scripted selectors.
|
|
120
120
|
</Card>
|
|
121
121
|
<Card title="Working with the browser" icon="globe" href="/browser">
|
|
122
122
|
Routes, dialogs, downloads, iframes, and page evaluation.
|
package/docs/migrate/maestro.mdx
CHANGED
|
@@ -223,7 +223,7 @@ often need updating.
|
|
|
223
223
|
<Card title="Testing iOS and Android" icon="mobile-screen" href="/mobile">
|
|
224
224
|
Configure your app and devices.
|
|
225
225
|
</Card>
|
|
226
|
-
<Card title="
|
|
227
|
-
|
|
226
|
+
<Card title="Goals" icon="pen-to-square" href="/goals">
|
|
227
|
+
Write test steps as goals instead of scripted selectors.
|
|
228
228
|
</Card>
|
|
229
229
|
</CardGroup>
|
|
@@ -3,8 +3,8 @@ title: From Playwright
|
|
|
3
3
|
description: Run e2e alongside Playwright and migrate tests one file at a time.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
`@e2e-dev/web`
|
|
7
|
-
|
|
6
|
+
`@e2e-dev/web` brings its own pinned `playwright-core`, so your
|
|
7
|
+
`@playwright/test` version is yours to keep. Both runners can stay in one
|
|
8
8
|
project. e2e reads `e2e.config.ts` and finds `tests/**/*.e2e.ts` by default,
|
|
9
9
|
so keep the two file patterns apart.
|
|
10
10
|
|
|
@@ -59,7 +59,8 @@ A Playwright key the runner recognizes (`testDir`, `baseURL`, `webServer`,
|
|
|
59
59
|
| `use.trace` | `trace` with the same modes (`'off'`, `'on'`, `'retain-on-failure'`, `'on-first-retry'`, `'on-all-retries'`), at the top of the config, per target, `test('x', { trace }, ...)`, or `--trace [mode]` for one run; the default differs, see [below](#defaults-that-differ) | same |
|
|
60
60
|
| `use.video` | `video` with the same modes as `trace`, at the top of the config, per target in place of a project, `test('x', { video }, ...)` in place of `test.use`, or `--video [mode]` for one run | same |
|
|
61
61
|
| `use.headless: false` | `--headed` on the CLI | renamed |
|
|
62
|
-
| `use.locale`, `timezoneId
|
|
62
|
+
| `use.locale`, `use.timezoneId` | `web({ locale, timezoneId })` | renamed |
|
|
63
|
+
| `colorScheme`, `geolocation`, `permissions` | not yet | missing |
|
|
63
64
|
| `use.userAgent` | `web({ userAgent })` | renamed |
|
|
64
65
|
| `devices['iPhone 15']`, `deviceScaleFactor`, `isMobile`, `hasTouch` | not yet; `web({ viewport })` sets the size only | missing |
|
|
65
66
|
| `ignoreHTTPSErrors`, `bypassCSP`, `offline`, `launchOptions`, `proxy` | not yet | missing |
|
|
@@ -139,7 +140,9 @@ what to do today.
|
|
|
139
140
|
| `fill(value)` | the same; also takes a `Secret` | same |
|
|
140
141
|
| `pressSequentially(text, { delay })` | the same; keystrokes through the platform keyboard, a `Secret` is refused | same |
|
|
141
142
|
| `press(key)` | the same; modifiers join with `+`, see the [key grammar](/reference/engine#keys) | same |
|
|
142
|
-
| `clear()`, `
|
|
143
|
+
| `clear()`, `focus()`, `hover()`, `setInputFiles()`, `dragTo()` | the same | same |
|
|
144
|
+
| `check()`, `uncheck()` | the same, except for a control the click removes or navigates away from, such as a radio the app replaces with its selected view: the click landed, so the action passes, even when the app renders an unchecked control in its place. Playwright fails it because it cannot read the state back. Assert on what replaced the control | by design |
|
|
145
|
+
| `selectOption('pro')` | `selectOption('Pro')`: a string matches the option's label only, where Playwright matches its value or its label; `selectOption({ value: 'pro' })` for the value | by design |
|
|
143
146
|
| `selectOption(['a', 'b'])` | not yet; one option per call. An array is `INVALID_ARGUMENT` | missing |
|
|
144
147
|
| `setInputFiles({ name, buffer })` | not yet; paths only, resolved from the project root | missing |
|
|
145
148
|
| `scrollIntoViewIfNeeded()` | `scrollIntoView()` | renamed |
|
|
@@ -149,8 +152,7 @@ what to do today.
|
|
|
149
152
|
| `isChecked()` | the same on a checkbox, radio, or `aria-checked` node; `false` on any other node, where Playwright throws | by design |
|
|
150
153
|
| `isHidden()`, `isDisabled()` | the same | same |
|
|
151
154
|
| `isEditable()` | not yet | missing |
|
|
152
|
-
| `waitFor({ state: 'visible' })`, `'hidden'` | the same | same |
|
|
153
|
-
| `waitFor({ state: 'attached' })`, `'detached'` | not yet; `expect(locator).toBeAttached()` and `.not.toBeAttached()` | missing |
|
|
155
|
+
| `waitFor({ state: 'visible' })`, `'hidden'`, `'attached'`, `'detached'` | the same | same |
|
|
154
156
|
| `locator.evaluate(fn)`, `evaluateAll(fn)` | not yet; `browser.evaluate(fn, selector)` with a CSS selector argument | missing |
|
|
155
157
|
| `locator.screenshot()` | not yet; `app.screenshot(label)` captures the viewport | missing |
|
|
156
158
|
| `innerHTML()`, `dispatchEvent()`, `selectText()`, `blur()`, `highlight()` | not yet; `browser.evaluate` | missing |
|
|
@@ -171,13 +173,16 @@ what to do today.
|
|
|
171
173
|
| `toHaveText()`, `toContainText()` | compare the rendered text, as `{ useInnerText: true }` does in Playwright | by design |
|
|
172
174
|
| `toHaveValue()`, `toHaveAttribute()`, `toHaveCount()`, `toHaveAccessibleName()` | the same | same |
|
|
173
175
|
| `toHaveText(['a', 'b'])`, `toContainText([...])` on several matches | the same: `toHaveText` needs the count to match, `toContainText` an ordered subsequence | same |
|
|
176
|
+
| `toBeChecked({ checked: false })`, `toBeEnabled({ enabled })`, `toBeVisible({ visible })`, `toBeAttached({ attached })` | the same | same |
|
|
177
|
+
| `{ ignoreCase }` on `toHaveText()`, `toContainText()`, `toHaveAccessibleName()`, `toHaveAttribute(name, value)` | the same | same |
|
|
178
|
+
| `toBeChecked({ indeterminate })`, `{ useInnerText }` | not yet; `INVALID_ARGUMENT`, so the matcher never passes on its default | missing |
|
|
174
179
|
| `toHaveAttribute('aria-selected', 'true')`, `'aria-expanded'` | `toBeSelected()`, `toBeExpanded()` | renamed |
|
|
175
180
|
| a positive matcher on several matches | `LOCATOR_AMBIGUOUS` at once; narrow with `filter`, `first`, or `{ visible: true }` | by design |
|
|
176
181
|
| `toBeAttached()` | the same; passes on a hidden match too | same |
|
|
177
182
|
| `toBeEmpty()`, `toBeInViewport()`, `toBeEditable()`, `toHaveRole()`, `toHaveAccessibleDescription()` | not yet | missing |
|
|
178
183
|
| `expect(locator).toHaveClass(cls)` | `expect(browser).toHaveClass(locator, cls)`; a DOM fact is asserted through `browser`; reads the `class` attribute, so `''` matches `class=""` and not a missing attribute | web only |
|
|
179
184
|
| `toHaveCSS()`, `toHaveId()`, `toHaveJSProperty()`, `toContainClass()`, `toHaveValues()` | not yet; `browser.evaluate` plus a value matcher | missing |
|
|
180
|
-
| `expect(page).toHaveURL()`, `toHaveTitle()` | `expect(browser).toHaveURL()`, `toHaveTitle()` | web only |
|
|
185
|
+
| `expect(page).toHaveURL()`, `toHaveTitle()` | `expect(browser).toHaveURL()`, `toHaveTitle()`; `toHaveURL` takes `ignoreCase` | web only |
|
|
181
186
|
| `toHaveScreenshot()`, `toMatchSnapshot()` | not yet; `agent.assert('...', { vision: true })` is a judgment, not a pixel diff | missing |
|
|
182
187
|
| `toMatchAriaSnapshot()` | not yet | missing |
|
|
183
188
|
| `expect(value).toBe()`, `toEqual()`, `toMatch()`, `toBeTruthy()`, `toBeCloseTo()` and the rest | the same, except `toContain`, below, see [value matchers](/reference/expect#value-matchers) | same |
|
|
@@ -201,7 +206,7 @@ what to do today.
|
|
|
201
206
|
| `page.goBack()` | `app.back()`, or `browser.back()` | renamed |
|
|
202
207
|
| `page.goForward()`, `page.reload()` | `browser.forward()`, `browser.reload()` | web only |
|
|
203
208
|
| `page.url()`, `page.title()` | `browser.url()`, `browser.title()` | web only |
|
|
204
|
-
| `page.waitForURL()` | `browser.waitForURL()`; a string or `RegExp`, no predicate function | web only |
|
|
209
|
+
| `page.waitForURL()` | `browser.waitForURL()`; a string or `RegExp`, no predicate function, and `timeout` is its only option, so `waitUntil` is `INVALID_ARGUMENT` | web only |
|
|
205
210
|
| `page.waitForLoadState()` | not yet; `browser.goto(url, { waitUntil })` on the navigation itself | missing |
|
|
206
211
|
| `page.waitForFunction(fn)` | `expect.poll(() => browser.evaluate(fn)).toBeTruthy()` | missing |
|
|
207
212
|
| `page.waitForTimeout(ms)` | a locator assertion on the state you are waiting for: `toBeVisible()` on what appears, `toBeHidden()` on what goes away | by design |
|
|
@@ -216,9 +221,9 @@ what to do today.
|
|
|
216
221
|
| Playwright | e2e | Status |
|
|
217
222
|
| --- | --- | --- |
|
|
218
223
|
| `page.route(pattern, handler)` | `browser.route(pattern, handler)`; a string or `RegExp` pattern, no predicate function; the handler decides exactly once | web only |
|
|
219
|
-
| `route.fulfill({ json, body, status, headers })` | the same; `json` or `
|
|
220
|
-
| `route.
|
|
221
|
-
| `route.
|
|
224
|
+
| `route.fulfill({ json, body, path, status, headers, contentType })` | the same; one of `json`, `body`, or `path`, and `path` is relative to the project root | web only |
|
|
225
|
+
| `route.continue({ url, method, headers, postData })`, `route.fallback()` | the same; a `url` goes through the navigation rule, and `fallback()` takes no overrides | web only |
|
|
226
|
+
| `route.fetch()`, `route.abort(code)`, `route.fallback(overrides)` | not yet; `abort()` takes no error code | missing |
|
|
222
227
|
| `page.unroute()` | `browser.unroute()` | web only |
|
|
223
228
|
| `page.waitForResponse(pattern)` | `browser.waitForResponse(pattern)`: a string or `RegExp`, no predicate function; `url`, `status`, `headers`, `json()`, `text()` | web only |
|
|
224
229
|
| `response.ok()`, `response.body()`, `response.request()` | not yet; `status` and `text()` | missing |
|
|
@@ -229,7 +234,8 @@ what to do today.
|
|
|
229
234
|
| `page.waitForEvent('popup')`, `context.on('page')` | not yet; a window the app opens is not driven | missing |
|
|
230
235
|
| `page.on('console')`, `page.on('pageerror')` | not yet; assert on what the page shows | missing |
|
|
231
236
|
| `page.evaluate(fn, arg)` | `browser.evaluate(fn, arg)`; JSON in and out, no handles | web only |
|
|
232
|
-
| `page.
|
|
237
|
+
| `page.addInitScript(script, arg)`, `context.addInitScript()` | `browser.addInitScript(script, arg)`, or `web({ initScripts })` for every test; pass `{ content }` as a plain string | web only |
|
|
238
|
+
| `page.exposeFunction()`, `addStyleTag()`, `setExtraHTTPHeaders()`, `emulateMedia()`, `clock` | not yet; `browser.evaluate` appends a `<style>` once the page is open, and returns `null` since its result must be JSON | missing |
|
|
233
239
|
| `context.addCookies()`, `context.cookies()` | `browser.setCookies()`, `browser.cookies()` | web only |
|
|
234
240
|
| `context.clearCookies()` | not yet; `app.clearState()` also clears other persisted state and recreates the context | missing |
|
|
235
241
|
| `request` fixture | Node `fetch`, see [Testing APIs](/api-testing) | by design |
|
|
@@ -281,9 +287,9 @@ what to do today.
|
|
|
281
287
|
| `--update-snapshots` | no equivalent; there is no pixel assertion | missing |
|
|
282
288
|
| `--list` | `npx e2e list`, with the same selection flags | renamed |
|
|
283
289
|
| `npx playwright codegen` | `npx e2e explore` walks the app from a goal and reports what it found; `npx e2e mcp` gives a coding agent a live session so it writes the test while driving the app, see [Coding agents](/coding-agents) | renamed |
|
|
284
|
-
| `npx playwright show-trace` |
|
|
290
|
+
| `npx playwright show-trace` | `npx playwright-core@1.63.0 show-trace` (`pnpm dlx` under pnpm), on `trace/<name>.zip` under the attempt's artifact directory | renamed |
|
|
285
291
|
| `npx playwright show-report` | not yet; `.e2e/summary.md` from the `markdown` reporter | missing |
|
|
286
|
-
| `npx playwright install` |
|
|
292
|
+
| `npx playwright install` | `npx @e2e-dev/web install`, for the Playwright version the engine pins; the engine also installs a missing browser once per run, before the run's clock starts | renamed |
|
|
287
293
|
|
|
288
294
|
## Page objects
|
|
289
295
|
|
|
@@ -418,8 +424,8 @@ Start with a flow whose interaction sequence changes often, such as a wizard
|
|
|
418
424
|
or checkout; stable Playwright tests can stay where they are.
|
|
419
425
|
|
|
420
426
|
<CardGroup cols={2}>
|
|
421
|
-
<Card title="
|
|
422
|
-
|
|
427
|
+
<Card title="Goals" icon="pen-to-square" href="/goals">
|
|
428
|
+
Write test steps as goals instead of scripted selectors.
|
|
423
429
|
</Card>
|
|
424
430
|
<Card title="Web engine reference" icon="masks-theater" href="/reference/web">
|
|
425
431
|
Every option and every `browser` method.
|
|
@@ -101,8 +101,8 @@ Start with one page object and the flows that use it; its setup code can
|
|
|
101
101
|
become a fixture.
|
|
102
102
|
|
|
103
103
|
<CardGroup cols={2}>
|
|
104
|
-
<Card title="
|
|
105
|
-
|
|
104
|
+
<Card title="Goals" icon="pen-to-square" href="/goals">
|
|
105
|
+
Write test steps as goals instead of scripted selectors.
|
|
106
106
|
</Card>
|
|
107
107
|
<Card title="screen reference" icon="crosshairs" href="/reference/screen">
|
|
108
108
|
Every query, refinement, action, and read.
|
package/docs/mobile.mdx
CHANGED
|
@@ -3,8 +3,8 @@ title: Testing iOS and Android
|
|
|
3
3
|
description: Set up a simulator or emulator target, write a device test, and know what differs from the web.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
`@e2e-dev/mobile` runs tests on iOS simulators
|
|
7
|
-
built on [agent-device](https://github.com/callstack/agent-device).
|
|
6
|
+
`@e2e-dev/mobile` runs tests on iOS simulators, Android emulators, and
|
|
7
|
+
phones connected to your machine. It is built on [agent-device](https://github.com/callstack/agent-device).
|
|
8
8
|
Tests use the same `agent`, `screen`, and `expect` APIs as browser tests.
|
|
9
9
|
A test launches the configured app with `app.open()`; between tests the app
|
|
10
10
|
stays where the last one left it.
|
|
@@ -106,6 +106,46 @@ One test launches with its own through `device.openApp`:
|
|
|
106
106
|
await device.openApp('com.example.app', { relaunch: true, permissions: { camera: 'deny' } });
|
|
107
107
|
```
|
|
108
108
|
|
|
109
|
+
### Expo development builds
|
|
110
|
+
|
|
111
|
+
A development build (`expo-dev-client`) opens on the dev launcher and loads
|
|
112
|
+
its JavaScript from a dev server. On an iOS simulator, launch arguments open
|
|
113
|
+
the server directly and turn off the dev menu, its onboarding sheet, and its
|
|
114
|
+
floating action button, so nothing covers the app. `app.command` starts the
|
|
115
|
+
server for the run:
|
|
116
|
+
|
|
117
|
+
```ts title="e2e.config.ts"
|
|
118
|
+
import type { E2EConfig } from 'e2e';
|
|
119
|
+
import { mobile } from '@e2e-dev/mobile';
|
|
120
|
+
|
|
121
|
+
export default {
|
|
122
|
+
targets: [
|
|
123
|
+
{
|
|
124
|
+
engine: mobile({ platform: 'ios' }),
|
|
125
|
+
app: {
|
|
126
|
+
bundleId: 'com.example.app',
|
|
127
|
+
launchArguments: [
|
|
128
|
+
'--initialUrl', 'http://localhost:8081',
|
|
129
|
+
'-EXDevMenuShowsAtLaunch', 'NO',
|
|
130
|
+
'-EXDevMenuIsOnboardingFinished', 'YES',
|
|
131
|
+
'-EXDevMenuShowFloatingActionButton', 'NO',
|
|
132
|
+
],
|
|
133
|
+
command: { executable: 'npx', args: ['expo', 'start', '--port', '8081'] },
|
|
134
|
+
readyUrl: 'http://localhost:8081/status',
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
],
|
|
138
|
+
} satisfies E2EConfig;
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Start each test with `app.open()`: the warm-up in `prepare` passes no launch
|
|
142
|
+
arguments, so it rests on the dev launcher. The first launch waits for the dev
|
|
143
|
+
server to bundle the app; a test's first check may need a longer timeout than
|
|
144
|
+
the rest. A test that relaunches with its own `launchArguments` replaces the
|
|
145
|
+
target's, so it lists these again. expo-dev-launcher on Android does not read
|
|
146
|
+
`--initialUrl`: open the server there with `device.openLink` and the build's
|
|
147
|
+
`exp+<slug>://expo-development-client/?url=<encoded server URL>` link.
|
|
148
|
+
|
|
109
149
|
## Several devices
|
|
110
150
|
|
|
111
151
|
Add a target for each platform:
|
|
@@ -138,6 +178,12 @@ mobile({ platform: 'ios', device: ['iPhone 17', 'iPhone 17 Pro'] })
|
|
|
138
178
|
Without `device`, the engine uses booted devices up to the worker limit.
|
|
139
179
|
If none are booted, it boots one. Two workers never drive the same device.
|
|
140
180
|
|
|
181
|
+
## Physical devices
|
|
182
|
+
|
|
183
|
+
A phone connected to your machine works as a device too: name it in
|
|
184
|
+
`device`. Setup and the controls that need a simulator are on
|
|
185
|
+
[Physical devices](/physical-devices).
|
|
186
|
+
|
|
141
187
|
## Hosted devices
|
|
142
188
|
|
|
143
189
|
A `device` can also be a `DeviceProvider`: an object that leases one hosted
|
|
@@ -520,6 +566,17 @@ daemon (`npx agent-device daemon stop`) and reboot the simulator
|
|
|
520
566
|
|
|
521
567
|
Do what it says.
|
|
522
568
|
|
|
569
|
+
**`device.installApp()` on Android reports no bundle id or package.** The
|
|
570
|
+
build installed, but agent-device could not say which package it is, so
|
|
571
|
+
`app.open()` would have nothing to launch. agent-device 0.21.18 cannot parse
|
|
572
|
+
the manifest of an APK built with aapt2 (every current Android build), so it
|
|
573
|
+
falls back to the Android SDK's `aapt`, which it looks for under
|
|
574
|
+
`ANDROID_SDK_ROOT`, `ANDROID_HOME`, or `~/Android/Sdk`, not the macOS default
|
|
575
|
+
`~/Library/Android/sdk`. Without `aapt` it names only a package the install
|
|
576
|
+
added, and a build already on the emulator adds none. Set the target's
|
|
577
|
+
`app.bundleId`, or export `ANDROID_HOME` and stop the agent-device daemon
|
|
578
|
+
(`daemon stop` below) so the next run starts it with the variable.
|
|
579
|
+
|
|
523
580
|
**A timeout on the device.** A simulator boot, runner connection, or app
|
|
524
581
|
launch that times out on the device is `ENGINE_FAILURE` with agent-device's
|
|
525
582
|
message and hint, never one of e2e's own timeout codes (`LAUNCH_TIMEOUT`,
|
|
@@ -549,7 +606,7 @@ xcrun simctl shutdown <udid> && xcrun simctl boot <udid>
|
|
|
549
606
|
<Card title="Mobile engine reference" icon="mobile-screen" href="/reference/mobile">
|
|
550
607
|
Every option, the `device` fixture, and the tool pack.
|
|
551
608
|
</Card>
|
|
552
|
-
<Card title="
|
|
553
|
-
|
|
609
|
+
<Card title="Locators" icon="crosshairs" href="/locators">
|
|
610
|
+
Exact taps, swipes, and checks with `screen` and `expect`, on any platform.
|
|
554
611
|
</Card>
|
|
555
612
|
</CardGroup>
|