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/dist/run/execute.js
CHANGED
|
@@ -10,21 +10,23 @@ import { timestamp, uuidv7 } from '../internal/ids.js';
|
|
|
10
10
|
import { engineAppInfo } from '../config/app.js';
|
|
11
11
|
import { Deadline, NEVER_ABORTS, withAbort, withScopedBudget, withTimeout } from '../internal/time.js';
|
|
12
12
|
import { createAgentCacheContext, flushStagedTraces } from '../cache/context.js';
|
|
13
|
+
import { storedRecordingsFor } from '../cache/rekeyed.js';
|
|
13
14
|
import { pairRecordings } from '../collect/select.js';
|
|
14
|
-
import { createAttemptArtifacts, sanitizePathSegment } from './artifacts.js';
|
|
15
|
+
import { attemptSegments, createAttemptArtifacts, sanitizePathSegment } from './artifacts.js';
|
|
15
16
|
import { AttemptBudget } from './budget.js';
|
|
16
17
|
import { createEngineSession } from '../engine/session.js';
|
|
17
18
|
import { createExtendedFixtures } from './extended-fixtures.js';
|
|
18
19
|
import { captureFailureEvidence } from './failure-evidence.js';
|
|
19
20
|
import { createFixtures } from './fixtures.js';
|
|
20
21
|
import { publishAttempt } from '../expect/attempt.js';
|
|
22
|
+
import { PollScope, runInPollScope } from '../expect/poll-scope.js';
|
|
21
23
|
import { SoftFailures } from '../expect/soft.js';
|
|
22
24
|
import { findRegistered, RealmManager, runHook } from './realm.js';
|
|
23
25
|
import { isFailedStatus } from './records.js';
|
|
24
26
|
import { runWithRetries } from './retry.js';
|
|
25
27
|
import { runSerialUnit } from './serial.js';
|
|
26
28
|
import { interruptedSkip, pairKey, pairResult, repeatSegment, unstartedResult } from './units.js';
|
|
27
|
-
import { adoptSecrecy, carriedSecrecy, processSecrets, registerDerivedSecrets, resolveSecretValue, sessionSecrecy } from './secrecy.js';
|
|
29
|
+
import { adoptSecrecy, carriedSecrecy, processSecrets, registerDerivedSecrets, redactForSession, resolveSecretValue, sessionSecrecy, staticSecretLedger } from './secrecy.js';
|
|
28
30
|
import { isSecret } from '../secrets.js';
|
|
29
31
|
import { SessionStaging, SessionStore, targetIdentity } from './sessions.js';
|
|
30
32
|
import { redactTraceArchives } from './trace-redaction.js';
|
|
@@ -43,6 +45,7 @@ export class TargetExecutor {
|
|
|
43
45
|
return this.config.artifactStore;
|
|
44
46
|
}
|
|
45
47
|
artifactsRoot;
|
|
48
|
+
rerunDir;
|
|
46
49
|
interruptSignal;
|
|
47
50
|
realms;
|
|
48
51
|
debug;
|
|
@@ -53,12 +56,15 @@ export class TargetExecutor {
|
|
|
53
56
|
lastAttemptTestId;
|
|
54
57
|
models;
|
|
55
58
|
sessionIdentity;
|
|
59
|
+
/** The file store's listing under `cache.strict`, read once for every attempt here. */
|
|
60
|
+
storedRecordings;
|
|
56
61
|
/** Resolves once the engine's init hook completed for this worker. */
|
|
57
62
|
engineReady;
|
|
58
63
|
constructor(options) {
|
|
59
64
|
this.options = options;
|
|
60
65
|
this.target = options.target;
|
|
61
66
|
this.artifactsRoot = options.artifactsRoot;
|
|
67
|
+
this.rerunDir = options.rerunDir;
|
|
62
68
|
this.interruptSignal = options.interruptSignal;
|
|
63
69
|
this.debug = options.debug ?? new DebugTrace(false);
|
|
64
70
|
this.models = new WorkerModels((error) => {
|
|
@@ -70,9 +76,11 @@ export class TargetExecutor {
|
|
|
70
76
|
timeout: options.config.timeout,
|
|
71
77
|
cleanupTimeout: options.config.cleanupTimeout,
|
|
72
78
|
runErrors: this.runErrors,
|
|
79
|
+
redactTitle: staticSecretLedger(options.config.allSecrets).redact,
|
|
73
80
|
debug: this.debug,
|
|
74
81
|
});
|
|
75
82
|
this.sessionIdentity = targetIdentity(options.target);
|
|
83
|
+
this.storedRecordings = storedRecordingsFor(options.config.cache);
|
|
76
84
|
}
|
|
77
85
|
get config() {
|
|
78
86
|
return this.options.config;
|
|
@@ -544,9 +552,10 @@ export class TargetExecutor {
|
|
|
544
552
|
const shared = context.kind === 'serial' ? context.shared : undefined;
|
|
545
553
|
const onProgress = this.options.events?.onProgress;
|
|
546
554
|
let openSession = null;
|
|
547
|
-
// Secret values the session has seen never enter an error record
|
|
548
|
-
// ledger is live, so a value resolved mid-attempt is
|
|
549
|
-
|
|
555
|
+
// Secret values the session has seen never enter an error record or a
|
|
556
|
+
// step label; the ledger is live, so a value resolved mid-attempt is
|
|
557
|
+
// covered too. Before a session opens, the static values still are.
|
|
558
|
+
const redact = (text) => redactForSession(openSession ?? undefined, this.config.allSecrets, text);
|
|
550
559
|
const steps = new StepRecorder(attemptId, {
|
|
551
560
|
attempt: { id: shared?.attemptId ?? attemptId, index: attemptIndex },
|
|
552
561
|
maxEventsPerStep: this.config.limits.maxEventsPerStep,
|
|
@@ -586,7 +595,13 @@ export class TargetExecutor {
|
|
|
586
595
|
// agent and repeat segments keep a test run as several agents, or
|
|
587
596
|
// several times, from overwriting itself.
|
|
588
597
|
segments: shared?.artifactSegments ??
|
|
589
|
-
|
|
598
|
+
attemptSegments(this.rerunDir, [
|
|
599
|
+
this.target.name,
|
|
600
|
+
sanitizePathSegment(registered.artifactName ?? pair.test.id),
|
|
601
|
+
pair.agent,
|
|
602
|
+
...repeatSegment(pair.repeat),
|
|
603
|
+
`attempt-${attemptIndex}`,
|
|
604
|
+
]),
|
|
590
605
|
attemptId,
|
|
591
606
|
currentStepId: () => steps.currentStepId,
|
|
592
607
|
...(this.config.artifactStore === undefined ? {} : { store: this.config.artifactStore }),
|
|
@@ -612,6 +627,8 @@ export class TargetExecutor {
|
|
|
612
627
|
let skipped;
|
|
613
628
|
let phase = 'launch';
|
|
614
629
|
let timedOut = false;
|
|
630
|
+
// The polls the fixtures, the beforeEach hooks, and the body start.
|
|
631
|
+
const bodyPolls = new PollScope('the test body');
|
|
615
632
|
// Captured the moment the primary failure lands: steps that pass later —
|
|
616
633
|
// afterEach cleanup, teardown — must not confirm traces the failure
|
|
617
634
|
// implicated (a cleanup assertion says nothing about the failed flow).
|
|
@@ -662,6 +679,7 @@ export class TargetExecutor {
|
|
|
662
679
|
testId: pair.test.id,
|
|
663
680
|
target: this.sessionIdentity,
|
|
664
681
|
attemptIndex,
|
|
682
|
+
recordings: this.storedRecordings,
|
|
665
683
|
})
|
|
666
684
|
: undefined;
|
|
667
685
|
// A rejection nobody caught, handed in by the process while this attempt
|
|
@@ -720,22 +738,25 @@ export class TargetExecutor {
|
|
|
720
738
|
// object, whichever `test` they were registered through.
|
|
721
739
|
const extended = createExtendedFixtures(registered.fixtures, fixtures, this.target.engine?.name ?? 'none');
|
|
722
740
|
/**
|
|
723
|
-
* Steps the body left running when it settled were not
|
|
724
|
-
* is recorded as failed at its call, cancelled through
|
|
725
|
-
* signal the way a timeout cancels the body, and waited for
|
|
726
|
-
* cleanup budget, so teardown starts on a quiet session.
|
|
727
|
-
* such a step would fail once the session closed with
|
|
728
|
-
* it and take the worker down.
|
|
741
|
+
* Steps and polls the body left running when it settled were not
|
|
742
|
+
* awaited. A step is recorded as failed at its call, cancelled through
|
|
743
|
+
* the attempt signal the way a timeout cancels the body, and waited for
|
|
744
|
+
* within one cleanup budget, so teardown starts on a quiet session.
|
|
745
|
+
* Left alone, such a step would fail once the session closed with
|
|
746
|
+
* nobody to catch it and take the worker down. A poll is cancelled
|
|
747
|
+
* alone; left alone, its timeout would fail whatever ran then.
|
|
748
|
+
* Returns their errors, steps first.
|
|
729
749
|
*/
|
|
730
750
|
const abandonNotAwaited = async () => {
|
|
731
751
|
if (attemptEnd.signal.aborted)
|
|
732
|
-
return
|
|
733
|
-
const
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
752
|
+
return [];
|
|
753
|
+
const pollsNotAwaited = bodyPolls.close();
|
|
754
|
+
const stepsNotAwaited = steps.abandonRunning();
|
|
755
|
+
if (stepsNotAwaited !== undefined) {
|
|
756
|
+
attemptAbort.abort();
|
|
757
|
+
await withTimeout(steps.settleAbandoned(), this.config.cleanupTimeout, () => new Error('abandoned steps did not settle')).catch(() => undefined);
|
|
758
|
+
}
|
|
759
|
+
return [stepsNotAwaited, pollsNotAwaited].filter((error) => error !== undefined);
|
|
739
760
|
};
|
|
740
761
|
const mainWork = async () => {
|
|
741
762
|
try {
|
|
@@ -749,19 +770,22 @@ export class TargetExecutor {
|
|
|
749
770
|
}
|
|
750
771
|
catch (cause) {
|
|
751
772
|
// The body's own failure stays the verdict; the step it abandoned
|
|
752
|
-
// and the soft failures it kept are noted beside it.
|
|
773
|
+
// and the soft failures it kept are noted beside it. A skip keeps
|
|
774
|
+
// only the soft failures: a step or poll it left running is not one.
|
|
753
775
|
const notAwaited = await abandonNotAwaited();
|
|
754
776
|
const softFailure = soft.close();
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
}
|
|
777
|
+
const kept = isRuntimeSkip(cause) ? [softFailure] : [...notAwaited, softFailure];
|
|
778
|
+
for (const secondary of kept) {
|
|
779
|
+
if (secondary !== undefined) {
|
|
780
|
+
secondaryErrors.push(serializeError(secondary, { phase: 'body', projectRoot: this.config.projectRoot, redact }));
|
|
760
781
|
}
|
|
761
782
|
}
|
|
762
783
|
throw cause;
|
|
763
784
|
}
|
|
764
|
-
const notAwaited = await abandonNotAwaited();
|
|
785
|
+
const [notAwaited, ...moreNotAwaited] = await abandonNotAwaited();
|
|
786
|
+
for (const secondary of moreNotAwaited) {
|
|
787
|
+
secondaryErrors.push(serializeError(secondary, { phase: 'body', projectRoot: this.config.projectRoot, redact }));
|
|
788
|
+
}
|
|
765
789
|
if (notAwaited !== undefined)
|
|
766
790
|
throw notAwaited;
|
|
767
791
|
// Soft failures fail the attempt once the body has settled, before
|
|
@@ -777,8 +801,8 @@ export class TargetExecutor {
|
|
|
777
801
|
// down with the worker process; the attempt records the interrupt and
|
|
778
802
|
// moves to cleanup.
|
|
779
803
|
const work = this.options.isolated
|
|
780
|
-
? withAbort(mainWork
|
|
781
|
-
: mainWork
|
|
804
|
+
? withAbort(runInPollScope(bodyPolls, mainWork), this.interruptSignal, () => new E2EError('interrupted', 'INTERRUPTED', `run interrupted in phase ${phase}`))
|
|
805
|
+
: runInPollScope(bodyPolls, mainWork);
|
|
782
806
|
const body = Promise.race([
|
|
783
807
|
work,
|
|
784
808
|
new Promise((_, reject) => {
|
|
@@ -796,6 +820,8 @@ export class TargetExecutor {
|
|
|
796
820
|
// The race has settled: a rejection surfacing while the evidence is
|
|
797
821
|
// captured is recorded, not aimed at it.
|
|
798
822
|
cutBody = undefined;
|
|
823
|
+
// A body cut short may have been awaiting its polls; they end with it.
|
|
824
|
+
bodyPolls.close();
|
|
799
825
|
// `skipRunningTest` has already refused the cases that may not skip.
|
|
800
826
|
if (isRuntimeSkip(cause))
|
|
801
827
|
skipped = cause;
|
|
@@ -857,6 +883,7 @@ export class TargetExecutor {
|
|
|
857
883
|
recordFailure(cause, phase);
|
|
858
884
|
}
|
|
859
885
|
finally {
|
|
886
|
+
bodyPolls.close();
|
|
860
887
|
this.strayFailure = undefined;
|
|
861
888
|
this.lastAttemptTestId = pair.test.id;
|
|
862
889
|
attemptEnd.abort();
|
|
@@ -937,4 +964,3 @@ function registerVideos(sink, segments) {
|
|
|
937
964
|
throw new EngineError('ENGINE_FAILURE', `the engine returned a video link that is not an http(s) URL: ${rejected.join(', ')}`, { retryable: false });
|
|
938
965
|
}
|
|
939
966
|
}
|
|
940
|
-
//# sourceMappingURL=execute.js.map
|
|
@@ -30,4 +30,3 @@ export interface ExtendedFixtures {
|
|
|
30
30
|
* fixture is the one the body would otherwise read.
|
|
31
31
|
*/
|
|
32
32
|
export declare function createExtendedFixtures(definitions: readonly FixtureDefinition[], fixtures: object, engineName: string): ExtendedFixtures;
|
|
33
|
-
//# sourceMappingURL=extended-fixtures.d.ts.map
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/** The fixtures a test's `test.extend()` chain adds to one attempt. */
|
|
2
|
+
import { pollLineage } from '../expect/poll-scope.js';
|
|
2
3
|
import { ConfigurationError } from '../internal/errors.js';
|
|
3
4
|
/**
|
|
4
5
|
* Binds a chain of fixture definitions to one attempt's fixture object. The
|
|
@@ -50,8 +51,10 @@ export function createExtendedFixtures(definitions, fixtures, engineName) {
|
|
|
50
51
|
ready();
|
|
51
52
|
return released;
|
|
52
53
|
};
|
|
54
|
+
// The function's polls are the body's until `use` returns, then its teardown's.
|
|
55
|
+
const polls = pollLineage();
|
|
53
56
|
const run = Promise.resolve()
|
|
54
|
-
.then(() => definition.fn(fixtures, use))
|
|
57
|
+
.then(() => polls.run(() => definition.fn(fixtures, use)))
|
|
55
58
|
.then(() => {
|
|
56
59
|
if (!used) {
|
|
57
60
|
failed(new ConfigurationError('TEST_SETUP_FAILED', `fixture "${name}" returned without calling use(); a fixture awaits use(value) to hand its value to the test`));
|
|
@@ -66,7 +69,7 @@ export function createExtendedFixtures(definitions, fixtures, engineName) {
|
|
|
66
69
|
run.catch(() => undefined);
|
|
67
70
|
await provided;
|
|
68
71
|
if (!abandoned)
|
|
69
|
-
active.push({ name, run, release, misuse: () => misuse });
|
|
72
|
+
active.push({ name, run, release, polls, misuse: () => misuse });
|
|
70
73
|
};
|
|
71
74
|
return {
|
|
72
75
|
async setUp() {
|
|
@@ -78,6 +81,7 @@ export function createExtendedFixtures(definitions, fixtures, engineName) {
|
|
|
78
81
|
return active.toReversed().map((state) => ({
|
|
79
82
|
name: state.name,
|
|
80
83
|
run: async () => {
|
|
84
|
+
state.polls.handOver();
|
|
81
85
|
state.release();
|
|
82
86
|
await state.run;
|
|
83
87
|
const misuse = state.misuse();
|
|
@@ -88,4 +92,3 @@ export function createExtendedFixtures(definitions, fixtures, engineName) {
|
|
|
88
92
|
},
|
|
89
93
|
};
|
|
90
94
|
}
|
|
91
|
-
//# sourceMappingURL=extended-fixtures.js.map
|
|
@@ -33,4 +33,3 @@ export interface FailureEvidenceOptions {
|
|
|
33
33
|
* captured, so the record carries no empty block.
|
|
34
34
|
*/
|
|
35
35
|
export declare function captureFailureEvidence(options: FailureEvidenceOptions): Promise<FailureEvidence | undefined>;
|
|
36
|
-
//# sourceMappingURL=failure-evidence.d.ts.map
|
|
@@ -109,7 +109,9 @@ function locatorCandidates(error, observation, redact, appOrigin) {
|
|
|
109
109
|
return [];
|
|
110
110
|
if (error.code !== 'LOCATOR_NOT_FOUND' && error.code !== 'LOCATOR_AMBIGUOUS')
|
|
111
111
|
return [];
|
|
112
|
-
const
|
|
112
|
+
const details = error.details ?? {};
|
|
113
|
+
// The nodes are redacted; the query is compared in the same form, so a secret test id still finds its node.
|
|
114
|
+
const [role, testId, name] = [details.role, details.testId, details.name].map((value) => (value === undefined ? undefined : redact(value)));
|
|
113
115
|
const words = tokens(name ?? '');
|
|
114
116
|
if (role === undefined && testId === undefined && words.length === 0)
|
|
115
117
|
return [];
|
|
@@ -139,7 +141,7 @@ function locatorCandidates(error, observation, redact, appOrigin) {
|
|
|
139
141
|
return scored
|
|
140
142
|
.toSorted((a, b) => b.score - a.score)
|
|
141
143
|
.slice(0, MAX_CANDIDATES)
|
|
142
|
-
.map(({ node }) => truncateUtf8(formatNode(node, 0,
|
|
144
|
+
.map(({ node }) => truncateUtf8(formatNode(node, 0, appOrigin), MAX_CANDIDATE_BYTES));
|
|
143
145
|
}
|
|
144
146
|
/**
|
|
145
147
|
* Whether a word on screen is a near miss for one asked for: a typo or an
|
|
@@ -157,4 +159,3 @@ function tokens(text) {
|
|
|
157
159
|
.split(/[^\p{L}\p{N}]+/u)
|
|
158
160
|
.filter((word) => word.length > 1);
|
|
159
161
|
}
|
|
160
|
-
//# sourceMappingURL=failure-evidence.js.map
|
package/dist/run/fixtures.d.ts
CHANGED
package/dist/run/fixtures.js
CHANGED
|
@@ -311,20 +311,18 @@ function createApp(environment, engine, exposure) {
|
|
|
311
311
|
* `app.open()` on a target with no URL and no `navigate`, a device: it
|
|
312
312
|
* launches the pinned app fresh, the way Maestro's `launchApp` does, and is
|
|
313
313
|
* what a test calls before it looks at the screen. A path has nowhere to
|
|
314
|
-
* go there; a link goes through `device.openLink`.
|
|
314
|
+
* go there; a link goes through `device.openLink`. An engine without a
|
|
315
|
+
* relaunch hook is refused here; one with a hook reports its own reason it
|
|
316
|
+
* cannot launch, such as a build not installed yet.
|
|
315
317
|
*/
|
|
316
318
|
const launchPinnedApp = (openPath) => steps.run('app', 'app.open', '', async () => {
|
|
317
319
|
if (openPath !== undefined) {
|
|
318
320
|
throw new ConfigurationError('APP_URL_REQUIRED', `app.open("${openPath}") needs an app URL and target "${target.name}" has none: on a device app.open() launches the pinned app, and a link goes through device.openLink`);
|
|
319
321
|
}
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
}
|
|
323
|
-
catch (cause) {
|
|
324
|
-
if (cause.code !== 'UNSUPPORTED_CAPABILITY')
|
|
325
|
-
throw cause;
|
|
326
|
-
throw new ConfigurationError('UNSUPPORTED_CAPABILITY', `app.open() has no app to launch on target "${target.name}": pin one with the target's app.bundleId or app.appPath, or bring one up with device.openApp`);
|
|
322
|
+
if (target.engine?.session?.restart === undefined) {
|
|
323
|
+
throw new ConfigurationError('UNSUPPORTED_CAPABILITY', `app.open() has nothing to open on target "${target.name}": it has no app URL, and engine ${target.engine?.name ?? 'none'} does not relaunch a pinned app`);
|
|
327
324
|
}
|
|
325
|
+
await engine.session.app.restart(engine.operation(config.timeout));
|
|
328
326
|
});
|
|
329
327
|
return {
|
|
330
328
|
baseUrl: target.app.base?.href,
|
|
@@ -355,4 +353,3 @@ function lazily(build) {
|
|
|
355
353
|
let built;
|
|
356
354
|
return () => (built ??= { value: build() }).value;
|
|
357
355
|
}
|
|
358
|
-
//# sourceMappingURL=fixtures.js.map
|
package/dist/run/in-process.d.ts
CHANGED
|
@@ -28,6 +28,8 @@ export interface InProcessRunnerOptions {
|
|
|
28
28
|
}) | undefined;
|
|
29
29
|
readonly runId: string;
|
|
30
30
|
readonly artifactsRoot: string;
|
|
31
|
+
/** See `TargetExecutorOptions.rerunDir`. */
|
|
32
|
+
readonly rerunDir: string | undefined;
|
|
31
33
|
readonly sessionStore: SessionStore;
|
|
32
34
|
readonly headed: boolean;
|
|
33
35
|
readonly debug: DebugTrace;
|
|
@@ -36,4 +38,3 @@ export interface InProcessRunnerOptions {
|
|
|
36
38
|
}
|
|
37
39
|
/** Creates the spawn factory the scheduler uses for in-process execution. */
|
|
38
40
|
export declare function inProcessSpawner(options: InProcessRunnerOptions): SpawnUnitRunner;
|
|
39
|
-
//# sourceMappingURL=in-process.d.ts.map
|
package/dist/run/in-process.js
CHANGED
|
@@ -101,6 +101,7 @@ class InProcessRunner {
|
|
|
101
101
|
sessionStore: this.options.sessionStore,
|
|
102
102
|
runId: this.options.runId,
|
|
103
103
|
artifactsRoot: this.options.artifactsRoot,
|
|
104
|
+
rerunDir: this.options.rerunDir,
|
|
104
105
|
headed: this.options.headed,
|
|
105
106
|
workerSlot: this.workerSlot,
|
|
106
107
|
env: this.options.envFor(this.targetName),
|
|
@@ -132,4 +133,3 @@ async function resolveFromSelection(selection, target, unit, registration) {
|
|
|
132
133
|
export function inProcessSpawner(options) {
|
|
133
134
|
return (targetName, workerSlot, events) => new InProcessRunner(targetName, workerSlot, events, options);
|
|
134
135
|
}
|
|
135
|
-
//# sourceMappingURL=in-process.js.map
|
package/dist/run/last-run.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** What `--last-failed` reads back from the previous run's report. */
|
|
2
2
|
import type { Report1Document } from '../report/build.ts';
|
|
3
|
+
type ReportCarried = NonNullable<Report1Document['run']['carried']>;
|
|
3
4
|
/**
|
|
4
5
|
* The previous run's report, read from where this run will write its own. It
|
|
5
6
|
* is what `--last-failed` selects from, and reporters receive it as
|
|
@@ -9,14 +10,46 @@ import type { Report1Document } from '../report/build.ts';
|
|
|
9
10
|
export declare function readLastRun(reportPath: string): Promise<Report1Document>;
|
|
10
11
|
/**
|
|
11
12
|
* The result ids of a report's tests that did not pass: failed, timed out,
|
|
12
|
-
* interrupted, or skipped because a setup, a serial predecessor, a hook,
|
|
13
|
-
* the
|
|
14
|
-
* `afterAll` that failed, until a run where that hook
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
13
|
+
* interrupted, or skipped because a setup, a serial predecessor, a hook, the
|
|
14
|
+
* worker, or the failure limit stopped it, every selected test in the scope
|
|
15
|
+
* of a `beforeAll` or `afterAll` that failed, until a run where that hook
|
|
16
|
+
* passes, and every test the report carries from an earlier run that it did
|
|
17
|
+
* not run again. A report older than `selected` counts every result as
|
|
18
|
+
* selected. An explicit skip and a filtered test passed in the sense that
|
|
19
|
+
* matters here: nothing to run again. The ids are
|
|
20
|
+
* `resultId(testId, target, agent)`, so a test is named per target and agent
|
|
21
|
+
* whichever of its `--repeat-each` runs did not pass.
|
|
20
22
|
*/
|
|
21
23
|
export declare function lastFailedIds(document: Report1Document): ReadonlySet<string>;
|
|
22
|
-
|
|
24
|
+
/** What a rerun's collection found: the tests it collected by id, and the files it discovered but could not collect. */
|
|
25
|
+
export interface RerunCollection {
|
|
26
|
+
readonly testIds: ReadonlySet<string>;
|
|
27
|
+
readonly uncollectedFiles: ReadonlySet<string>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* What a `--last-failed` rerun carries forward from the report it selected
|
|
31
|
+
* from: every result that report owed a rerun and this run did not run, as
|
|
32
|
+
* the run that last ran it reported it; the serial groups those results'
|
|
33
|
+
* attempts live on; and the suite hook failures whose scope still holds one
|
|
34
|
+
* of them. A result is owed when it did not pass, or when it is in the scope
|
|
35
|
+
* of a failed `beforeAll` or `afterAll` this run did not see pass: a hook
|
|
36
|
+
* whose scope this run ran again without it failing is resolved, and one
|
|
37
|
+
* that failed again is this run's own error, which still makes its left-out
|
|
38
|
+
* tests owed. A test this run did not run is one it collected (`collected`,
|
|
39
|
+
* by test id), on a target the config still has, that it did not select:
|
|
40
|
+
* left out by a filter, on a target or agent the run did not ask for, or a
|
|
41
|
+
* setup no selected test needed, which the report lists no row for. A test in
|
|
42
|
+
* a file the run found but could not collect (`uncollectedFiles`, a narrowed
|
|
43
|
+
* run past a file that fails to import) is still there and stays carried. A
|
|
44
|
+
* test the run no longer collects cannot run again and is dropped. A test
|
|
45
|
+
* this run selected is no longer carried, whatever its outcome: its own
|
|
46
|
+
* result says it now. Undefined when nothing is carried.
|
|
47
|
+
*/
|
|
48
|
+
export declare function carryForward(lastRun: Report1Document, current: Report1Document, collected: RerunCollection): ReportCarried | undefined;
|
|
49
|
+
/**
|
|
50
|
+
* The artifact paths a report names, relative to the artifacts root: every
|
|
51
|
+
* attempt's of its results and serial groups, and of what it carries. What a
|
|
52
|
+
* `--last-failed` rerun keeps of the tree when it starts.
|
|
53
|
+
*/
|
|
54
|
+
export declare function reportArtifactPaths(document: Report1Document): ReadonlySet<string>;
|
|
55
|
+
export {};
|
package/dist/run/last-run.js
CHANGED
|
@@ -8,7 +8,16 @@ const UNDELIVERED_SKIPS = new Set([
|
|
|
8
8
|
'serial-predecessor-failed',
|
|
9
9
|
'hook-failed',
|
|
10
10
|
'infrastructure-unavailable',
|
|
11
|
+
'failure-limit',
|
|
11
12
|
]);
|
|
13
|
+
/** The id `--last-failed` names a result by: its test, target, and agent, whichever its repeat. */
|
|
14
|
+
function rerunId(result) {
|
|
15
|
+
return resultId(result.testId, result.targetId, result.agent);
|
|
16
|
+
}
|
|
17
|
+
/** Whether a run error is a failed `beforeAll` or `afterAll`, the failures `--last-failed` runs the scope of again. */
|
|
18
|
+
function isSuiteHookFailure(error) {
|
|
19
|
+
return error.phase === 'beforeAll' || error.phase === 'afterAll';
|
|
20
|
+
}
|
|
12
21
|
/** Whether a result is one `--last-failed` runs again: it did not pass, or the run never got to it. */
|
|
13
22
|
function didNotPass(result) {
|
|
14
23
|
switch (result.status) {
|
|
@@ -72,19 +81,88 @@ export async function readLastRun(reportPath) {
|
|
|
72
81
|
}
|
|
73
82
|
/**
|
|
74
83
|
* The result ids of a report's tests that did not pass: failed, timed out,
|
|
75
|
-
* interrupted, or skipped because a setup, a serial predecessor, a hook,
|
|
76
|
-
* the
|
|
77
|
-
* `afterAll` that failed, until a run where that hook
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
84
|
+
* interrupted, or skipped because a setup, a serial predecessor, a hook, the
|
|
85
|
+
* worker, or the failure limit stopped it, every selected test in the scope
|
|
86
|
+
* of a `beforeAll` or `afterAll` that failed, until a run where that hook
|
|
87
|
+
* passes, and every test the report carries from an earlier run that it did
|
|
88
|
+
* not run again. A report older than `selected` counts every result as
|
|
89
|
+
* selected. An explicit skip and a filtered test passed in the sense that
|
|
90
|
+
* matters here: nothing to run again. The ids are
|
|
91
|
+
* `resultId(testId, target, agent)`, so a test is named per target and agent
|
|
92
|
+
* whichever of its `--repeat-each` runs did not pass.
|
|
83
93
|
*/
|
|
84
94
|
export function lastFailedIds(document) {
|
|
85
|
-
const hookFailures = document.run.errors.filter(
|
|
95
|
+
const hookFailures = document.run.errors.filter(isSuiteHookFailure);
|
|
86
96
|
const rerun = (result) => didNotPass(result) || (result.selected !== false && hookFailures.some((error) => inHookScope(result, error)));
|
|
87
|
-
|
|
97
|
+
const ids = new Set(document.run.results.filter(rerun).map(rerunId));
|
|
98
|
+
for (const result of document.run.carried?.results ?? [])
|
|
99
|
+
ids.add(rerunId(result));
|
|
100
|
+
return ids;
|
|
101
|
+
}
|
|
102
|
+
/** Whether two suite hook failures are the same hook's: one phase, one scope. */
|
|
103
|
+
function sameHook(a, b) {
|
|
104
|
+
if (a.phase !== b.phase)
|
|
105
|
+
return false;
|
|
106
|
+
if (a.scope === undefined || b.scope === undefined)
|
|
107
|
+
return a.scope === b.scope;
|
|
108
|
+
return (a.scope.file === b.scope.file &&
|
|
109
|
+
a.scope.targetId === b.scope.targetId &&
|
|
110
|
+
a.scope.titlePath.length === b.scope.titlePath.length &&
|
|
111
|
+
a.scope.titlePath.every((title, index) => b.scope.titlePath[index] === title));
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* What a `--last-failed` rerun carries forward from the report it selected
|
|
115
|
+
* from: every result that report owed a rerun and this run did not run, as
|
|
116
|
+
* the run that last ran it reported it; the serial groups those results'
|
|
117
|
+
* attempts live on; and the suite hook failures whose scope still holds one
|
|
118
|
+
* of them. A result is owed when it did not pass, or when it is in the scope
|
|
119
|
+
* of a failed `beforeAll` or `afterAll` this run did not see pass: a hook
|
|
120
|
+
* whose scope this run ran again without it failing is resolved, and one
|
|
121
|
+
* that failed again is this run's own error, which still makes its left-out
|
|
122
|
+
* tests owed. A test this run did not run is one it collected (`collected`,
|
|
123
|
+
* by test id), on a target the config still has, that it did not select:
|
|
124
|
+
* left out by a filter, on a target or agent the run did not ask for, or a
|
|
125
|
+
* setup no selected test needed, which the report lists no row for. A test in
|
|
126
|
+
* a file the run found but could not collect (`uncollectedFiles`, a narrowed
|
|
127
|
+
* run past a file that fails to import) is still there and stays carried. A
|
|
128
|
+
* test the run no longer collects cannot run again and is dropped. A test
|
|
129
|
+
* this run selected is no longer carried, whatever its outcome: its own
|
|
130
|
+
* result says it now. Undefined when nothing is carried.
|
|
131
|
+
*/
|
|
132
|
+
export function carryForward(lastRun, current, collected) {
|
|
133
|
+
const selected = new Set(current.run.results.filter((result) => result.selected !== false).map(rerunId));
|
|
134
|
+
const targets = new Set(current.run.targets.map((target) => target.id));
|
|
135
|
+
const stillThere = (result) => collected.testIds.has(result.testId) || collected.uncollectedFiles.has(result.file);
|
|
136
|
+
const notRun = (result) => !selected.has(rerunId(result)) && stillThere(result) && targets.has(result.targetId);
|
|
137
|
+
const failedAgain = current.run.errors.filter(isSuiteHookFailure);
|
|
138
|
+
const hooks = [...lastRun.run.errors.filter(isSuiteHookFailure), ...(lastRun.run.carried?.errors ?? [])];
|
|
139
|
+
const reportedAgain = (error) => failedAgain.some((again) => sameHook(again, error));
|
|
140
|
+
const passedAgain = (error) => !reportedAgain(error) &&
|
|
141
|
+
current.run.results.some((result) => result.selected !== false && result.status !== 'skipped' && inHookScope(result, error));
|
|
142
|
+
const unresolved = hooks.filter((error) => !passedAgain(error));
|
|
143
|
+
// A test the run before left out is known by the row it carried, not by its filtered one.
|
|
144
|
+
const history = [...lastRun.run.results.filter((result) => result.selected !== false), ...(lastRun.run.carried?.results ?? [])];
|
|
145
|
+
const results = history.filter((result) => notRun(result) && (didNotPass(result) || unresolved.some((error) => inHookScope(result, error))));
|
|
146
|
+
if (results.length === 0)
|
|
147
|
+
return undefined;
|
|
148
|
+
const groupIds = new Set(results.flatMap((result) => (result.serialGroupId === undefined ? [] : [result.serialGroupId])));
|
|
149
|
+
const currentGroupIds = new Set(current.run.serialGroups.map((group) => group.id));
|
|
150
|
+
const serialGroups = [...lastRun.run.serialGroups, ...(lastRun.run.carried?.serialGroups ?? [])].filter((group) => groupIds.has(group.id) && !currentGroupIds.has(group.id));
|
|
151
|
+
const errors = unresolved.filter((error) => !reportedAgain(error) && results.some((result) => inHookScope(result, error)));
|
|
152
|
+
return { results, serialGroups, errors };
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* The artifact paths a report names, relative to the artifacts root: every
|
|
156
|
+
* attempt's of its results and serial groups, and of what it carries. What a
|
|
157
|
+
* `--last-failed` rerun keeps of the tree when it starts.
|
|
158
|
+
*/
|
|
159
|
+
export function reportArtifactPaths(document) {
|
|
160
|
+
const parts = [document.run, ...(document.run.carried === undefined ? [] : [document.run.carried])];
|
|
161
|
+
const attempts = parts.flatMap((part) => [
|
|
162
|
+
...part.results.flatMap((result) => result.attempts),
|
|
163
|
+
...part.serialGroups.flatMap((group) => group.attempts),
|
|
164
|
+
]);
|
|
165
|
+
return new Set(attempts.flatMap((attempt) => attempt.artifacts.flatMap((artifact) => (artifact.path === undefined ? [] : [artifact.path]))));
|
|
88
166
|
}
|
|
89
167
|
/**
|
|
90
168
|
* The shape the read relies on: a report-1 envelope whose every result has
|
|
@@ -96,10 +174,38 @@ function isReport(value) {
|
|
|
96
174
|
return false;
|
|
97
175
|
const document = value;
|
|
98
176
|
return (document.schemaVersion === 'report-1' &&
|
|
99
|
-
|
|
100
|
-
document.run.
|
|
101
|
-
|
|
102
|
-
|
|
177
|
+
isRunPart(document.run) &&
|
|
178
|
+
(document.run.carried === undefined || isRunPart(document.run.carried)));
|
|
179
|
+
}
|
|
180
|
+
/** A run, or what one carries: results and errors of the shape read here, and its serial groups. */
|
|
181
|
+
function isRunPart(value) {
|
|
182
|
+
if (typeof value !== 'object' || value === null)
|
|
183
|
+
return false;
|
|
184
|
+
const part = value;
|
|
185
|
+
return (Array.isArray(part.results) &&
|
|
186
|
+
part.results.every(isResult) &&
|
|
187
|
+
Array.isArray(part.errors) &&
|
|
188
|
+
part.errors.every(isError) &&
|
|
189
|
+
Array.isArray(part.serialGroups) &&
|
|
190
|
+
part.serialGroups.every((group) => typeof group === 'object' && group !== null && hasAttempts(group)));
|
|
191
|
+
}
|
|
192
|
+
/** Whether a result or serial group lists its attempts, each with its artifacts, the way a rerun reads them. */
|
|
193
|
+
function hasAttempts(value) {
|
|
194
|
+
const { attempts } = value;
|
|
195
|
+
return Array.isArray(attempts) && attempts.every(hasArtifacts);
|
|
196
|
+
}
|
|
197
|
+
/** Whether an attempt lists its artifacts as records whose path, when there is one, is a string. */
|
|
198
|
+
function hasArtifacts(attempt) {
|
|
199
|
+
if (typeof attempt !== 'object' || attempt === null)
|
|
200
|
+
return false;
|
|
201
|
+
const { artifacts } = attempt;
|
|
202
|
+
return (Array.isArray(artifacts) &&
|
|
203
|
+
artifacts.every((artifact) => {
|
|
204
|
+
if (typeof artifact !== 'object' || artifact === null)
|
|
205
|
+
return false;
|
|
206
|
+
const { path } = artifact;
|
|
207
|
+
return path === undefined || typeof path === 'string';
|
|
208
|
+
}));
|
|
103
209
|
}
|
|
104
210
|
function isResult(value) {
|
|
105
211
|
if (typeof value !== 'object' || value === null)
|
|
@@ -110,6 +216,7 @@ function isResult(value) {
|
|
|
110
216
|
typeof result.status === 'string' &&
|
|
111
217
|
typeof result.file === 'string' &&
|
|
112
218
|
Array.isArray(result.titlePath) &&
|
|
219
|
+
hasAttempts(result) &&
|
|
113
220
|
(skip === undefined || (typeof skip === 'object' && skip !== null && typeof skip.cause === 'string')));
|
|
114
221
|
}
|
|
115
222
|
function isError(value) {
|
|
@@ -124,4 +231,3 @@ function isError(value) {
|
|
|
124
231
|
typeof scope.targetId === 'string' &&
|
|
125
232
|
Array.isArray(scope.titlePath))));
|
|
126
233
|
}
|
|
127
|
-
//# sourceMappingURL=last-run.js.map
|
package/dist/run/output.d.ts
CHANGED
package/dist/run/output.js
CHANGED
package/dist/run/process-pool.js
CHANGED