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
|
@@ -4,8 +4,10 @@
|
|
|
4
4
|
* One instance lives for one CLI invocation. Commands hand it events; at the
|
|
5
5
|
* end of the invocation `flush` sends them in a single bounded request, so a
|
|
6
6
|
* command never waits on telemetry for more than the flush budget and never
|
|
7
|
-
* fails because of it.
|
|
8
|
-
*
|
|
7
|
+
* fails because of it. A long-lived command (`e2e mcp`) sends what it has
|
|
8
|
+
* queued as it goes with `sendQueued`, so a client that kills it loses only
|
|
9
|
+
* what was still in progress. Telemetry is a CLI concern only: the runner
|
|
10
|
+
* never constructs this class.
|
|
9
11
|
*
|
|
10
12
|
* Off means off at every step. `E2E_TELEMETRY_DISABLED`, `DO_NOT_TRACK`, a
|
|
11
13
|
* source checkout of the repository, an `e2e telemetry disable`, or a
|
|
@@ -34,13 +36,13 @@ import { postBatch } from './posthog.js';
|
|
|
34
36
|
import { anonymousProjectId } from './project.js';
|
|
35
37
|
import { preferencesPath, TelemetryStore, telemetryConfigDir } from './store.js';
|
|
36
38
|
/** Bumped when what is collected changes enough that the notice must show again. */
|
|
37
|
-
export const NOTICE_VERSION =
|
|
39
|
+
export const NOTICE_VERSION = 3;
|
|
38
40
|
/** The longest a flush may hold the process; the project lookup and the request share it. */
|
|
39
41
|
const DEFAULT_FLUSH_MS = 2_000;
|
|
40
42
|
/** The one-time notice: what is collected, and the two ways out. */
|
|
41
43
|
function noticeText() {
|
|
42
44
|
return [
|
|
43
|
-
`${picocolors.bold('e2e collects anonymous usage telemetry')} to improve the framework: the command, the versions, the OS, and
|
|
45
|
+
`${picocolors.bold('e2e collects anonymous usage telemetry')} to improve the framework: the command, the versions, the OS, and summaries of runs and MCP sessions. Never test names, app data, or credentials.`,
|
|
44
46
|
`Opt out with ${picocolors.cyan('e2e telemetry disable')} or ${picocolors.cyan('E2E_TELEMETRY_DISABLED=1')}. What is sent: ${picocolors.underline(`${DOCS_URL}/telemetry`)}`,
|
|
45
47
|
'',
|
|
46
48
|
'',
|
|
@@ -74,6 +76,8 @@ export class Telemetry {
|
|
|
74
76
|
command;
|
|
75
77
|
failure;
|
|
76
78
|
exitCode;
|
|
79
|
+
/** Sends `sendQueued` started that have not settled; the flush waits for them. */
|
|
80
|
+
sending = new Set();
|
|
77
81
|
constructor(options) {
|
|
78
82
|
this.version = options.version;
|
|
79
83
|
this.env = options.env ?? process.env;
|
|
@@ -200,14 +204,28 @@ export class Telemetry {
|
|
|
200
204
|
return [cliSessionEvent(this.command.name, this.command.flags, ended)];
|
|
201
205
|
}
|
|
202
206
|
/**
|
|
203
|
-
* Sends everything queued in one request, or prints it under debug
|
|
204
|
-
*
|
|
205
|
-
*
|
|
206
|
-
* telemetry.
|
|
207
|
+
* Sends everything queued in one request, or prints it under debug, and
|
|
208
|
+
* waits for the sends `sendQueued` started. One deadline covers the
|
|
209
|
+
* project lookup still running and the request; a lost batch is the
|
|
210
|
+
* accepted cost of a command that never waits on telemetry.
|
|
207
211
|
*/
|
|
208
212
|
async flush(maxWaitMs = DEFAULT_FLUSH_MS) {
|
|
209
213
|
const events = [...this.sessionEvent(), ...this.queue.splice(0)];
|
|
210
214
|
this.command = undefined;
|
|
215
|
+
await Promise.all([this.send(events, maxWaitMs), ...this.sending]);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Sends what is queued now, without the session event, which only the
|
|
219
|
+
* flush at the end can complete. For a command that runs until its client
|
|
220
|
+
* goes away; the caller need not wait, the flush does.
|
|
221
|
+
*/
|
|
222
|
+
sendQueued(maxWaitMs = DEFAULT_FLUSH_MS) {
|
|
223
|
+
const sending = this.send(this.queue.splice(0), maxWaitMs).finally(() => this.sending.delete(sending));
|
|
224
|
+
this.sending.add(sending);
|
|
225
|
+
return sending;
|
|
226
|
+
}
|
|
227
|
+
/** Sends `events` in one bounded request, or prints them under debug; nothing when off. */
|
|
228
|
+
async send(events, maxWaitMs) {
|
|
211
229
|
if (events.length === 0)
|
|
212
230
|
return;
|
|
213
231
|
// A choice saved from another process while this command ran wins over the snapshot taken at its start.
|
|
@@ -250,4 +268,3 @@ export class Telemetry {
|
|
|
250
268
|
await postBatch(items, { signal: deadline, fetch: this.fetchImpl });
|
|
251
269
|
}
|
|
252
270
|
}
|
|
253
|
-
//# sourceMappingURL=telemetry.js.map
|
package/dist/telemetry/token.js
CHANGED
package/dist/types.d.ts
CHANGED
|
@@ -198,7 +198,7 @@ export interface TextMatchOptions {
|
|
|
198
198
|
/**
|
|
199
199
|
* Role query options. A role query never matches a node hidden from the
|
|
200
200
|
* accessibility tree, on every engine; `visible` (inherited) is the one knob
|
|
201
|
-
* that narrows the other query kinds the
|
|
201
|
+
* that narrows the other query kinds, to the nodes `toBeVisible()` accepts.
|
|
202
202
|
*/
|
|
203
203
|
export interface RoleOptions extends TextMatchOptions {
|
|
204
204
|
/** Accessible name filter. */
|
|
@@ -377,9 +377,13 @@ export interface Locator extends Screen {
|
|
|
377
377
|
all(): Promise<Locator[]>;
|
|
378
378
|
/** Reads the normalized text of every current match, without auto-waiting; empty when nothing matches. */
|
|
379
379
|
allTextContents(): Promise<string[]>;
|
|
380
|
-
/**
|
|
380
|
+
/**
|
|
381
|
+
* Waits for the requested locator state, `visible` by default: `attached`
|
|
382
|
+
* for one match, visible or not; `detached` for none; `hidden` for none or
|
|
383
|
+
* a hidden one.
|
|
384
|
+
*/
|
|
381
385
|
waitFor(options?: {
|
|
382
|
-
state?: 'visible' | 'hidden';
|
|
386
|
+
state?: 'attached' | 'detached' | 'visible' | 'hidden';
|
|
383
387
|
timeout?: number;
|
|
384
388
|
}): Promise<void>;
|
|
385
389
|
/** Adds deterministic locator filters. */
|
|
@@ -585,31 +589,39 @@ export interface TestAPI<Fixtures = TestFixtures> {
|
|
|
585
589
|
/** Registers a suite-instance teardown hook. */
|
|
586
590
|
afterAll(fn: SuiteHookFn): void;
|
|
587
591
|
}
|
|
592
|
+
/**
|
|
593
|
+
* The locator matchers. An option a matcher does not take, or a flag that is
|
|
594
|
+
* not a boolean, is `INVALID_ARGUMENT` before the first read.
|
|
595
|
+
*/
|
|
588
596
|
export interface AsyncExpectation {
|
|
589
597
|
/** Inverts the matcher. A negated matcher passes after 1000 ms of continuous truth. */
|
|
590
598
|
readonly not: AsyncExpectation;
|
|
591
|
-
/** Waits for visibility
|
|
599
|
+
/** Waits for visibility; `visible: false` waits for hidden or absent state, as `toBeHidden`. */
|
|
592
600
|
toBeVisible(options?: {
|
|
601
|
+
visible?: boolean;
|
|
593
602
|
timeout?: number;
|
|
594
603
|
}): Promise<void>;
|
|
595
604
|
/** Waits for hidden or absent state. */
|
|
596
605
|
toBeHidden(options?: {
|
|
597
606
|
timeout?: number;
|
|
598
607
|
}): Promise<void>;
|
|
599
|
-
/** Waits for one match to exist, visible or not. */
|
|
608
|
+
/** Waits for one match to exist, visible or not; `attached: false` waits for none. */
|
|
600
609
|
toBeAttached(options?: {
|
|
610
|
+
attached?: boolean;
|
|
601
611
|
timeout?: number;
|
|
602
612
|
}): Promise<void>;
|
|
603
|
-
/** Waits for enabled state. */
|
|
613
|
+
/** Waits for enabled state; `enabled: false` waits for disabled state. */
|
|
604
614
|
toBeEnabled(options?: {
|
|
615
|
+
enabled?: boolean;
|
|
605
616
|
timeout?: number;
|
|
606
617
|
}): Promise<void>;
|
|
607
618
|
/** Waits for disabled state. */
|
|
608
619
|
toBeDisabled(options?: {
|
|
609
620
|
timeout?: number;
|
|
610
621
|
}): Promise<void>;
|
|
611
|
-
/** Waits for checked state. */
|
|
622
|
+
/** Waits for checked state; `checked: false` waits for unchecked state. */
|
|
612
623
|
toBeChecked(options?: {
|
|
624
|
+
checked?: boolean;
|
|
613
625
|
timeout?: number;
|
|
614
626
|
}): Promise<void>;
|
|
615
627
|
/** Waits for selected state. */
|
|
@@ -625,19 +637,11 @@ export interface AsyncExpectation {
|
|
|
625
637
|
timeout?: number;
|
|
626
638
|
}): Promise<void>;
|
|
627
639
|
/** Waits for exact normalized text; a list waits for exactly that many matches, each with its entry's text, in order. */
|
|
628
|
-
toHaveText(expected: TextMatch, options?:
|
|
629
|
-
|
|
630
|
-
}): Promise<void>;
|
|
631
|
-
toHaveText(expected: readonly TextMatch[], options?: {
|
|
632
|
-
timeout?: number;
|
|
633
|
-
}): Promise<void>;
|
|
640
|
+
toHaveText(expected: TextMatch, options?: TextMatcherOptions): Promise<void>;
|
|
641
|
+
toHaveText(expected: readonly TextMatch[], options?: TextMatcherOptions): Promise<void>;
|
|
634
642
|
/** Waits for contained normalized text; a list waits for each entry to be contained by a distinct match, in order, extra matches allowed. */
|
|
635
|
-
toContainText(expected: TextMatch, options?:
|
|
636
|
-
|
|
637
|
-
}): Promise<void>;
|
|
638
|
-
toContainText(expected: readonly TextMatch[], options?: {
|
|
639
|
-
timeout?: number;
|
|
640
|
-
}): Promise<void>;
|
|
643
|
+
toContainText(expected: TextMatch, options?: TextMatcherOptions): Promise<void>;
|
|
644
|
+
toContainText(expected: readonly TextMatch[], options?: TextMatcherOptions): Promise<void>;
|
|
641
645
|
/** Waits for a form control's value, compared as it is. */
|
|
642
646
|
toHaveValue(expected: TextMatch, options?: {
|
|
643
647
|
timeout?: number;
|
|
@@ -646,17 +650,20 @@ export interface AsyncExpectation {
|
|
|
646
650
|
toHaveAttribute(name: string, options?: {
|
|
647
651
|
timeout?: number;
|
|
648
652
|
}): Promise<void>;
|
|
649
|
-
toHaveAttribute(name: string, value: TextMatch, options?:
|
|
650
|
-
timeout?: number;
|
|
651
|
-
}): Promise<void>;
|
|
653
|
+
toHaveAttribute(name: string, value: TextMatch, options?: TextMatcherOptions): Promise<void>;
|
|
652
654
|
/** Waits for an exact match count. */
|
|
653
655
|
toHaveCount(expected: number, options?: {
|
|
654
656
|
timeout?: number;
|
|
655
657
|
}): Promise<void>;
|
|
656
658
|
/** Waits for an accessible name. */
|
|
657
|
-
toHaveAccessibleName(expected: TextMatch, options?:
|
|
658
|
-
|
|
659
|
-
|
|
659
|
+
toHaveAccessibleName(expected: TextMatch, options?: TextMatcherOptions): Promise<void>;
|
|
660
|
+
}
|
|
661
|
+
/** Options of a locator matcher that compares text. */
|
|
662
|
+
export interface TextMatcherOptions {
|
|
663
|
+
/** Compares a string case-insensitively; on a RegExp, `true` adds the `i` flag and `false` removes it. */
|
|
664
|
+
ignoreCase?: boolean;
|
|
665
|
+
/** Assertion budget in milliseconds. */
|
|
666
|
+
timeout?: number;
|
|
660
667
|
}
|
|
661
668
|
/**
|
|
662
669
|
* An object that carries its own expectation surface, so `expect(object)`
|
|
@@ -1247,6 +1254,8 @@ export interface E2EConfig {
|
|
|
1247
1254
|
cleanupTimeout?: number;
|
|
1248
1255
|
/** Retries per test, 0 through 10; default 1 in CI, else 0. */
|
|
1249
1256
|
retries?: number;
|
|
1257
|
+
/** Fail the run when a test skips itself after a soft failure or an earlier failed attempt; default false. */
|
|
1258
|
+
failOnSkippedFailure?: boolean;
|
|
1250
1259
|
/** Parallel workers, 1 through 1024; default 1 in CI, else half the cores. An engine may cap it lower. */
|
|
1251
1260
|
workers?: number;
|
|
1252
1261
|
/** `{ store }` hands every artifact to a host store as it is produced. */
|
|
@@ -1313,4 +1322,3 @@ export interface E2EConfig {
|
|
|
1313
1322
|
*/
|
|
1314
1323
|
secrets?: Readonly<Record<string, SecretConfig>>;
|
|
1315
1324
|
}
|
|
1316
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.js
CHANGED
package/docs/agents.mdx
CHANGED
|
@@ -109,9 +109,12 @@ agent if the problem affects several tests:
|
|
|
109
109
|
5. Compare models or `providerOptions` by running the same tests with
|
|
110
110
|
`--agent <name>`.
|
|
111
111
|
|
|
112
|
-
Named agents can use the [replay cache](/cache).
|
|
113
|
-
|
|
114
|
-
and
|
|
112
|
+
Named agents can use the [replay cache](/cache). Each agent records its
|
|
113
|
+
own entries, keyed by its name and its context, so a test that runs as
|
|
114
|
+
`buyer` and as `admin` never replays one persona's steps for the other, and
|
|
115
|
+
changing `agentContext` records again. Custom tools and executors have their
|
|
116
|
+
own replay constraints, described under [project tools](/tools) and
|
|
117
|
+
[custom executors](/executors#replay-cache).
|
|
115
118
|
|
|
116
119
|
## Pick an agent per run
|
|
117
120
|
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Assertions
|
|
3
|
+
description: Check the screen with agent.assert, wait for a condition, and extract data.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
An assertion checks what is on screen. The agent has three judgment calls:
|
|
7
|
+
`assert` checks the screen now, `waitFor` waits until a condition holds, and
|
|
8
|
+
`extract` reads structured data. When you know the exact value, use an
|
|
9
|
+
`expect` [locator assertion](#locator-assertions) instead, with no model call.
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
await agent.assert('the dashboard shows a trial badge');
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## `agent.assert`
|
|
16
|
+
|
|
17
|
+
`assert` checks a statement against the current screen. A false statement
|
|
18
|
+
fails with `ASSERTION_FAILED`. If the screen does not provide enough evidence,
|
|
19
|
+
it fails with `ASSERTION_INCONCLUSIVE`.
|
|
20
|
+
|
|
21
|
+
The judging model sees the statement and the current screen. It does not see
|
|
22
|
+
earlier steps or the acting agent's summaries.
|
|
23
|
+
|
|
24
|
+
## `agent.waitFor`
|
|
25
|
+
|
|
26
|
+
`assert` checks the screen now. Use `waitFor` when the condition may become true
|
|
27
|
+
later. It polls the screen and only calls the model when the observation changes.
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
await agent.waitFor('the export finishes and a download link appears', {
|
|
31
|
+
interval: 500,
|
|
32
|
+
timeout: 120_000,
|
|
33
|
+
});
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## `agent.extract`
|
|
37
|
+
|
|
38
|
+
`extract` reads structured data from the screen. Provide a
|
|
39
|
+
[Standard Schema](https://standardschema.dev) validator, such as Zod, to define
|
|
40
|
+
the result.
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
import { expect } from 'e2e';
|
|
44
|
+
import { z } from 'zod';
|
|
45
|
+
|
|
46
|
+
const data = await agent.extract('every todo title and how many remain', {
|
|
47
|
+
schema: z.object({ titles: z.array(z.string()), remaining: z.number().int() }),
|
|
48
|
+
});
|
|
49
|
+
expect(data.titles).toContain('Buy milk');
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
<Tip>
|
|
53
|
+
For model-generated descriptions, check the relevant meaning rather than the
|
|
54
|
+
entire sentence. Use a [locator assertion](/locators) when the exact text matters.
|
|
55
|
+
</Tip>
|
|
56
|
+
|
|
57
|
+
## Judging pixels
|
|
58
|
+
|
|
59
|
+
By default, judgments read a redacted text snapshot of the screen. Add
|
|
60
|
+
`vision: true` for visual checks, such as charts or layout. Use
|
|
61
|
+
`vision: 'only'` to judge the screenshot alone.
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
await agent.assert('the chart trends upward', { vision: true });
|
|
65
|
+
await agent.assert('the search form is not covered by a banner', { vision: 'only' });
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Images add input tokens. Screenshots are withheld for the rest of an attempt
|
|
69
|
+
after a secret is filled. The [agent reference](/reference/agent#vision)
|
|
70
|
+
lists the modes and restrictions.
|
|
71
|
+
|
|
72
|
+
## Locator assertions
|
|
73
|
+
|
|
74
|
+
`expect` on a locator checks an exact value and calls no model. It retries
|
|
75
|
+
until the check passes or the assertion timeout runs out.
|
|
76
|
+
|
|
77
|
+
```ts
|
|
78
|
+
await expect(screen.getByRole('status')).toHaveText('2 remaining');
|
|
79
|
+
await expect(screen.getByRole('heading', 'Dashboard')).toBeVisible();
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
[Locators](/locators) covers queries and actions. The
|
|
83
|
+
[expect reference](/reference/expect#locator-matchers) lists every matcher.
|
|
84
|
+
|
|
85
|
+
## Next
|
|
86
|
+
|
|
87
|
+
<CardGroup cols={2}>
|
|
88
|
+
<Card title="Locators" icon="crosshairs" href="/locators">
|
|
89
|
+
Exact actions and checks with `screen` and `expect`.
|
|
90
|
+
</Card>
|
|
91
|
+
<Card title="How agent steps work" icon="list-check" href="/agent-steps">
|
|
92
|
+
Verdicts, exit codes, and what the model sees.
|
|
93
|
+
</Card>
|
|
94
|
+
</CardGroup>
|
package/docs/authentication.mdx
CHANGED
|
@@ -211,7 +211,9 @@ export default {
|
|
|
211
211
|
```
|
|
212
212
|
|
|
213
213
|
`E2E_SECRET_<NAME>` overrides an entry per run, with the same uppercasing rule
|
|
214
|
-
as credentials, so a CI job can supply the value without touching the config
|
|
214
|
+
as credentials, so a CI job can supply the value without touching the config.
|
|
215
|
+
Two entries that map to one variable, like `stripe-key` and `stripe_key`, fail
|
|
216
|
+
the config load with `INVALID_CONFIG`, as two such credentials do:
|
|
215
217
|
|
|
216
218
|
<CodeGroup>
|
|
217
219
|
```bash npm
|
package/docs/browser.mdx
CHANGED
|
@@ -39,7 +39,9 @@ await app.open('/checkout');
|
|
|
39
39
|
await expect(screen.getByText('$42.00')).toBeVisible();
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
Each handler must call exactly one of `fulfill`, `continue`,
|
|
42
|
+
Each handler must call exactly one of `fulfill`, `continue`, `fallback`, or
|
|
43
|
+
`abort`. The newest route runs first; `continue` sends the request straight to
|
|
44
|
+
the network, while `fallback` passes it to the route registered before. An
|
|
43
45
|
`expect` that fails inside the handler fails the test, at the next step or at
|
|
44
46
|
the end of the test when nothing follows. To inspect a real response, start
|
|
45
47
|
waiting before the action that sends it:
|
|
@@ -114,14 +116,33 @@ const flag = await browser.evaluate((name: string) => window.localStorage.getIte
|
|
|
114
116
|
Use `evaluate` for state that `screen` cannot read. Prefer locators and
|
|
115
117
|
assertions for visible UI so tests depend less on the DOM structure.
|
|
116
118
|
|
|
119
|
+
## Run a script before the page
|
|
120
|
+
|
|
121
|
+
An init script runs in every document before the page's own scripts: mock a
|
|
122
|
+
browser API, seed `Math.random`, or set a flag the app reads at boot. For every
|
|
123
|
+
test:
|
|
124
|
+
|
|
125
|
+
```ts
|
|
126
|
+
web({ initScripts: [{ path: 'tests/init.js' }] })
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
For one test, before the page opens:
|
|
130
|
+
|
|
131
|
+
```ts
|
|
132
|
+
await browser.addInitScript((value) => { Math.random = () => value; }, 0.5);
|
|
133
|
+
await app.open('/raffle');
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
See [init scripts](/reference/web#init-scripts).
|
|
137
|
+
|
|
117
138
|
## Cookies
|
|
118
139
|
|
|
119
140
|
```ts
|
|
120
141
|
await browser.setCookies([{ url: 'http://localhost:3000', name: 'tz', value: 'UTC' }]);
|
|
121
142
|
```
|
|
122
143
|
|
|
123
|
-
A cookie URL that does not parse, or uses
|
|
124
|
-
`
|
|
144
|
+
A cookie URL that does not parse, or uses a scheme other than `http:` or
|
|
145
|
+
`https:` (`about:blank` included), is `POLICY_DENIED`; a domain cookie is checked as the origin
|
|
125
146
|
it would be sent to. If any entry is refused, no cookies are set. To resize
|
|
126
147
|
the page, see [Testing viewports](/viewports).
|
|
127
148
|
|
|
@@ -144,8 +165,23 @@ export default {
|
|
|
144
165
|
} satisfies E2EConfig;
|
|
145
166
|
```
|
|
146
167
|
|
|
147
|
-
|
|
148
|
-
|
|
168
|
+
In CI, provision the extra browser with the [install command](/reference/web#installing-browsers):
|
|
169
|
+
|
|
170
|
+
<CodeGroup>
|
|
171
|
+
```bash npm
|
|
172
|
+
npx @e2e-dev/web install webkit --with-deps
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
```bash pnpm
|
|
176
|
+
pnpm exec e2e-web install webkit --with-deps
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
```bash bun
|
|
180
|
+
bunx @e2e-dev/web install webkit --with-deps
|
|
181
|
+
```
|
|
182
|
+
</CodeGroup>
|
|
183
|
+
|
|
184
|
+
`connect` attaches to a remote Chromium over CDP instead of launching
|
|
149
185
|
one; a [browser provider](#hosted-browsers) does the same and also leases
|
|
150
186
|
and releases the browser. [Testing viewports](/viewports) covers sizes.
|
|
151
187
|
|
|
@@ -237,7 +273,7 @@ The attempt runs in the browser's persistent default context, on the
|
|
|
237
273
|
browser's own first tab, so the remote must contain only that context, and
|
|
238
274
|
the limits of
|
|
239
275
|
[`connect.reconnectEndpoint`](/reference/web#recovering-a-cdp-transport)
|
|
240
|
-
apply: no `headers`, `basicAuth`, or `
|
|
276
|
+
apply: no `headers`, `basicAuth`, `userAgent`, `locale`, or `timezoneId` (each is `INVALID_CONFIG`), no
|
|
241
277
|
`app.clearState()` (`UNSUPPORTED_CAPABILITY` naming the scope), and no session
|
|
242
278
|
state capture or restore, so a run whose tests consume a
|
|
243
279
|
[session](/authentication) on the target fails with `COLLECTION_ERROR`
|
package/docs/cache.mdx
CHANGED
|
@@ -45,27 +45,60 @@ bunx e2e run --no-cache
|
|
|
45
45
|
|
|
46
46
|
## How a replay works
|
|
47
47
|
|
|
48
|
-
1. Check the starting screen: the same route, whatever the record id
|
|
49
|
-
|
|
48
|
+
1. Check the starting screen: the same route, whatever the record id or the
|
|
49
|
+
fragment. Retries always run live.
|
|
50
50
|
2. Find each recorded control and repeat its action. The runner matches
|
|
51
51
|
controls by their role, name, test id, and surrounding context. It waits
|
|
52
52
|
for missing controls and stops if a match is ambiguous. A control with no
|
|
53
|
-
name is found by its place among the unnamed controls of its kind
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
name is found by its place among the unnamed controls of its kind inside
|
|
54
|
+
the same named row, list item, or group; with no such container to tell
|
|
55
|
+
it from its twins, the agent takes the step.
|
|
56
|
+
3. Check the final route and what the original step changed: the controls
|
|
57
|
+
that appeared, with their checked, selected, expanded, or pressed state,
|
|
58
|
+
and the ones that went away. At least one of those changes must happen
|
|
59
|
+
during the replay, counted from the first screen the replay saw on the
|
|
60
|
+
route it ended on, so an outcome already on screen before the actions
|
|
61
|
+
that should produce it proves nothing; a step whose last action moved to
|
|
62
|
+
another route has that move as its evidence. An alert the replay raised
|
|
63
|
+
that the recording never saw stops it too. Text that reads differently on
|
|
64
|
+
every run, a date, a time, a duration, an id, is not used, except in an
|
|
65
|
+
alert, where it is read as a placeholder.
|
|
56
66
|
4. Finish without a model call, or let the agent continue with a record of
|
|
57
67
|
what ran and why replay stopped.
|
|
58
68
|
|
|
69
|
+
A route is the origin, the path, and the query. Ids, tokens, timestamps,
|
|
70
|
+
and cache busters in either the path or the query are read as an id
|
|
71
|
+
placeholder, so `/orders/42?t=1727780000` and `/orders/7?t=1727780999` are
|
|
72
|
+
one route. Every other query value is part of it: `?mode=safe` and
|
|
73
|
+
`?mode=unsafe`, or `/companies` and `/companies?tab=notes`, are different
|
|
74
|
+
screens, and so is a tracking parameter that was not there when the step
|
|
75
|
+
was recorded. Two routes that differ in one word, `/products/summer-sneaker`
|
|
76
|
+
and `/products/winter-boot`, are different screens too, even when they look
|
|
77
|
+
alike. A location on the app's own origin is compared by its path, so a
|
|
78
|
+
recording follows the app to a preview deployment that shares its
|
|
79
|
+
`app.identity`; a page on any other origin is another route.
|
|
80
|
+
|
|
81
|
+
A count that names what it counts, `3 records imported` or `Showing 1 to 9
|
|
82
|
+
of 9 results`, is part of the effect when the step made it appear on the
|
|
83
|
+
screen it acted on, and must read the same on replay. A count that was
|
|
84
|
+
already on screen and only moved, `41 items` to `42 items`, or one on a
|
|
85
|
+
screen the step navigated to, is not used, since leftover data from earlier
|
|
86
|
+
runs moves it again. A bare number such as a badge is never used.
|
|
87
|
+
|
|
59
88
|
Typed values replay as recorded, even when an earlier run left the same
|
|
60
89
|
value on screen. Secret fills resolve the current value by name and run
|
|
61
90
|
through authorization again.
|
|
62
91
|
|
|
63
92
|
## What must match
|
|
64
93
|
|
|
65
|
-
A cache entry belongs to a specific test, target, instruction,
|
|
66
|
-
params. Renaming the test or target, changing the instruction or
|
|
67
|
-
param,
|
|
68
|
-
|
|
94
|
+
A cache entry belongs to a specific test, target, instruction, set of
|
|
95
|
+
params, and agent. Renaming the test or target, changing the instruction or
|
|
96
|
+
an ordinary param, running with another configured agent, changing the
|
|
97
|
+
agent's `context` or the test's `agentContext`, or upgrading the engine's
|
|
98
|
+
major or minor version causes a miss. A test that runs once per agent
|
|
99
|
+
(`agent: ['buyer', 'admin']`) records once per agent. Changing the model
|
|
100
|
+
does not. The agent context enters the key as a hash of its redacted text,
|
|
101
|
+
so a secret in it contributes only its name.
|
|
69
102
|
|
|
70
103
|
A timestamp or a fresh email address would cause a miss on every run. Wrap
|
|
71
104
|
values like these in `unique()` so the runner substitutes the current value
|
|
@@ -96,7 +129,9 @@ identity. On devices, replay uses the
|
|
|
96
129
|
|
|
97
130
|
In `read-write` mode, the runner saves a recording at the end of the
|
|
98
131
|
attempt when a later verification step passed. A step that took no action
|
|
99
|
-
records nothing
|
|
132
|
+
records nothing, and neither does one that changed nothing the replay could
|
|
133
|
+
check: no control appeared, went away, or changed state, and the route
|
|
134
|
+
stayed the same.
|
|
100
135
|
|
|
101
136
|
| Counts as verification | Does not count |
|
|
102
137
|
| --- | --- |
|
|
@@ -145,14 +180,14 @@ such as an `afterEach` assertion.
|
|
|
145
180
|
| `retry` | Retries never replay. | Nothing. |
|
|
146
181
|
| `invalid-entry` | The file is unreadable, over 1 MiB, or from another schema version. | `npx e2e cache clear`. |
|
|
147
182
|
| `truncated` | The recording hit a limit, see [below](#limits-and-gaps). | Split the step, or pass the secret as a `Secret`. |
|
|
148
|
-
| `wrong-context` | The app was on another screen than when the step was recorded: a different
|
|
149
|
-
| `target-not-found` | A recorded control did not appear within 15 seconds. | The UI changed
|
|
183
|
+
| `wrong-context` | The app was on another screen than when the step was recorded: a different origin, path, or query, not a different record id or fragment. | Open the same screen before the step. |
|
|
184
|
+
| `target-not-found` | A recorded control did not appear within 15 seconds, or it has no name and no named container to tell it from its twins. | The UI changed: the next passing run re-records. For an unnamed control, give it a label or put it in a named row or group. |
|
|
150
185
|
| `target-ambiguous` | The number of matching controls changed. | Give repeated controls distinct names or use unique test data. |
|
|
151
186
|
| `gap` | An action cannot be replayed, see [below](#limits-and-gaps). | The agent continues this part live. Put stable values in `params`. |
|
|
152
187
|
| `action-failed` | The app rejected a replayed action. | Check the app. |
|
|
153
188
|
| `action-uncertain` | A replayed action failed with an unknown commit state. The agent is told to check before acting again. | Check the app. |
|
|
154
189
|
| `viewport-changed` | A bare-point tap or hover was recorded on a viewport of another size. | Keep the viewport fixed. |
|
|
155
|
-
| `end-mismatch` | Every action ran, but the recorded
|
|
190
|
+
| `end-mismatch` | Every action ran, but the recorded route, a control that should have appeared or gone away, or a recorded state did not come back; the outcome was already on screen before the replay; or the replay raised an alert the recording never saw. | Leftover data from an earlier run, a banner that comes and goes, or a regression. |
|
|
156
191
|
|
|
157
192
|
A stop before any action ran is a miss. After replay starts, it is a
|
|
158
193
|
hand-off. Unique test data and cleanup in `afterEach` help avoid stale
|
|
@@ -176,8 +211,9 @@ the instruction or `params`, or ones the agent composed itself, replay.
|
|
|
176
211
|
|
|
177
212
|
Each entry is a JSON file under `.e2e/cache/`, named by a hash of its key.
|
|
178
213
|
It contains actions, target descriptions, typed text, a step summary, and
|
|
179
|
-
checks for the final state. Those checks include the
|
|
180
|
-
controls that appeared during the step
|
|
214
|
+
checks for the final state. Those checks include the route, up to eight
|
|
215
|
+
controls that appeared during the step, alerts and status messages first,
|
|
216
|
+
and up to eight that went away.
|
|
181
217
|
|
|
182
218
|
Entries contain no prompts, conversations, screenshots, observed trees, or
|
|
183
219
|
secret values. A secret fill stores only the secret's name. Other typed
|
|
@@ -220,12 +256,16 @@ Local runs leave a committed directory clean unless something changed. A
|
|
|
220
256
|
replayed step never rewrites its entry, and a live re-recording with the same
|
|
221
257
|
actions, paths, and anchors is not written: the summary, the measured end
|
|
222
258
|
wait, and the rule that flagged a typed run-time value differ between two
|
|
223
|
-
live runs of the same flow and do not count.
|
|
259
|
+
live runs of the same flow and do not count. Upgrading `e2e` to a version
|
|
260
|
+
that changes how entries are matched re-keys every entry, so the first run
|
|
261
|
+
after it records them again. A file changes when:
|
|
224
262
|
|
|
225
263
|
- a step records for the first time,
|
|
226
264
|
- the agent finishes a step after a hand-off, re-recording what it saw,
|
|
227
265
|
- a step fails after replaying, or ends in an `end-mismatch` the agent had
|
|
228
266
|
to repair, which deletes the entry,
|
|
267
|
+
- a step with an entry passes without leaving anything to record, which
|
|
268
|
+
deletes the entry,
|
|
229
269
|
- no verification step confirmed the entry by the end of the attempt, which
|
|
230
270
|
deletes it.
|
|
231
271
|
|
|
@@ -257,8 +297,14 @@ CI=1 bunx e2e run --strict-cache
|
|
|
257
297
|
The reasons that fail are the ones that mean the app or the entry changed:
|
|
258
298
|
`invalid-entry`, `wrong-context`, `target-not-found`, `target-ambiguous`,
|
|
259
299
|
`viewport-changed`, `action-failed`, `action-uncertain`, and `end-mismatch`.
|
|
260
|
-
A
|
|
261
|
-
|
|
300
|
+
A `no-entry` miss fails too when the cache directory holds a recording of the
|
|
301
|
+
same step under another key, from before an `e2e` or engine upgrade or a
|
|
302
|
+
change to the project id, the app's identity, or the agent's context. The
|
|
303
|
+
message names that file; delete it once nothing replays it. A custom
|
|
304
|
+
`cache.store` is not checked this way. Entries recorded before this check
|
|
305
|
+
existed are covered once a `read-write` run replays or re-records them. A
|
|
306
|
+
step never recorded (a new or edited instruction or params), a retry, a
|
|
307
|
+
`gap`, and a `truncated` recording still run live. `REPLAY_STALE` exits 2 and is not retried, since a
|
|
262
308
|
retry never replays and would pass live. The entry stays where it is, even
|
|
263
309
|
in `read-write` mode, so every strict run fails on it until it is re-recorded:
|
|
264
310
|
run the test in `read-write` mode without the flag, and with `cache.strict`
|
package/docs/ci.mdx
CHANGED
|
@@ -35,7 +35,7 @@ jobs:
|
|
|
35
35
|
- run: pnpm install --frozen-lockfile
|
|
36
36
|
|
|
37
37
|
- name: Install browsers
|
|
38
|
-
run:
|
|
38
|
+
run: pnpm exec e2e-web install chromium --with-deps
|
|
39
39
|
|
|
40
40
|
- name: Run e2e
|
|
41
41
|
run: npx e2e run --reporter list,junit
|
|
@@ -66,7 +66,9 @@ jobs:
|
|
|
66
66
|
```
|
|
67
67
|
|
|
68
68
|
The workflow pins actions to commit SHAs and installs dependencies from the
|
|
69
|
-
lockfile. `npx e2e` runs the installed version.
|
|
69
|
+
lockfile. `npx e2e` runs the installed version. The
|
|
70
|
+
[install command](/reference/web#installing-browsers) downloads the browsers
|
|
71
|
+
for the Playwright version the engine pins, with their system libraries.
|
|
70
72
|
|
|
71
73
|
Artifacts upload on every run that is not cancelled, so a test that failed
|
|
72
74
|
and then passed on retry still has its evidence.
|
|
@@ -139,10 +141,12 @@ implemented yet.
|
|
|
139
141
|
|
|
140
142
|
`--last-failed` runs only the tests the previous run did not pass, read from
|
|
141
143
|
`report.json` in the [`output`](/reference/config#output) directory (`.e2e`
|
|
142
|
-
by default). The rerun
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
144
|
+
by default). The rerun keeps the artifacts the first run's report names and
|
|
145
|
+
writes its own under `artifacts/rerun-1/`, so one upload after both steps
|
|
146
|
+
holds the evidence of each. A test another filter keeps out of the rerun
|
|
147
|
+
stays owed: the next `--last-failed` runs it. The
|
|
148
|
+
[CLI reference](/reference/cli#flags) lists what counts as not passed.
|
|
149
|
+
Locally it is the loop after a red run:
|
|
146
150
|
|
|
147
151
|
<CodeGroup>
|
|
148
152
|
```bash npm
|
|
@@ -193,7 +197,7 @@ flaky, so you can identify flows that need investigation.
|
|
|
193
197
|
`--max-failures <n>` stops the run once that many tests have failed, so a
|
|
194
198
|
broken deploy does not spend a model call on every remaining agent step. The
|
|
195
199
|
tests not started are skipped with cause `failure-limit`, the ones running
|
|
196
|
-
end as `interrupted`, and the job exits 1.
|
|
200
|
+
end as `interrupted`, counted apart from the failures, and the job exits 1.
|
|
197
201
|
|
|
198
202
|
## Exit codes
|
|
199
203
|
|
package/docs/debugging.mdx
CHANGED
|
@@ -91,7 +91,9 @@ failed result:
|
|
|
91
91
|
|
|
92
92
|
Artifacts land under `.e2e/artifacts/` (`<output>/artifacts/` when the
|
|
93
93
|
[`output`](/reference/config#output) is moved), one directory per attempt.
|
|
94
|
-
Each run empties it first, so it holds the latest run's evidence
|
|
94
|
+
Each run empties it first, so it holds the latest run's evidence. A
|
|
95
|
+
`--last-failed` rerun instead empties it down to the files the report it
|
|
96
|
+
reruns names, and writes its own under `rerun-<n>/`:
|
|
95
97
|
|
|
96
98
|
- **Screenshots.** Failed attempts capture one whenever the engine can and
|
|
97
99
|
pixels are allowed. The built-in `agent.assert` also captures one after
|
|
@@ -99,8 +101,9 @@ Each run empties it first, so it holds the latest run's evidence:
|
|
|
99
101
|
be withheld. Use `app.screenshot('label')` to capture one explicitly.
|
|
100
102
|
- **Playwright traces** on the attempts the [`trace`](/reference/config#trace)
|
|
101
103
|
mode records: every attempt locally, the first retry in CI. Open one with
|
|
102
|
-
`npx playwright show-trace <file
|
|
103
|
-
run, `--trace` records every attempt
|
|
104
|
+
`npx playwright-core@1.63.0 show-trace <file>` (`pnpm dlx` under pnpm);
|
|
105
|
+
`--trace off` skips the cost for one run, `--trace` records every attempt
|
|
106
|
+
of a CI run.
|
|
104
107
|
- **Downloads** saved through `browser.waitForDownload`, recorded with kind
|
|
105
108
|
`download`. They are the app's bytes: `redaction: "incomplete"` unless a
|
|
106
109
|
secret reached the session (filled, or held by the engine for basic auth)
|