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/provision.d.ts
CHANGED
|
@@ -103,4 +103,3 @@ export type ProcessHooks = () => ManagedProcessHooks;
|
|
|
103
103
|
* aborted; what was acquired is returned for release either way.
|
|
104
104
|
*/
|
|
105
105
|
export declare function startDeclaredProcesses(targets: readonly ResolvedTarget[], projectRoot: string, hooks: ProcessHooks, signal: AbortSignal, debug: DebugTrace, pool?: ProcessPool): Promise<AppProcesses>;
|
|
106
|
-
//# sourceMappingURL=provision.d.ts.map
|
package/dist/run/provision.js
CHANGED
package/dist/run/realm.d.ts
CHANGED
|
@@ -33,7 +33,10 @@ export declare function findRegistered(realm: Realm, test: CollectedTest): Regis
|
|
|
33
33
|
/**
|
|
34
34
|
* Runs one hook, or a fixture teardown, within its budget. One that overruns
|
|
35
35
|
* fails with the runner's timeout error naming `label`; `onTimeout` lets the
|
|
36
|
-
* caller cancel what it started.
|
|
36
|
+
* caller cancel what it started. The hook owns the `expect.poll` calls it
|
|
37
|
+
* starts: one still running when it returns fails it with
|
|
38
|
+
* `STEP_NOT_AWAITED` and is cancelled, and one left by a hook that failed is
|
|
39
|
+
* cancelled beside that failure.
|
|
37
40
|
*/
|
|
38
41
|
export declare function runHook(label: string, run: () => void | Promise<void>, timeoutMs: number, onTimeout?: () => void): Promise<void>;
|
|
39
42
|
export interface RealmManagerOptions {
|
|
@@ -43,6 +46,8 @@ export interface RealmManagerOptions {
|
|
|
43
46
|
readonly cleanupTimeout: number;
|
|
44
47
|
/** Run-level error sink for hook failures. */
|
|
45
48
|
readonly runErrors: RunError[];
|
|
49
|
+
/** What collection rewrites titles with (`collectModule`), so a realm's tests match the collected ids. */
|
|
50
|
+
readonly redactTitle: (title: string) => string;
|
|
46
51
|
readonly debug?: DebugTrace;
|
|
47
52
|
}
|
|
48
53
|
/** Creates realms and runs suite-scope hooks with per-realm entry tracking. */
|
|
@@ -94,4 +99,3 @@ export declare class RealmManager {
|
|
|
94
99
|
private suiteFixtures;
|
|
95
100
|
}
|
|
96
101
|
export {};
|
|
97
|
-
//# sourceMappingURL=realm.d.ts.map
|
package/dist/run/realm.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** Suite realm lifecycle: module re-import, beforeAll/afterAll scope tracking. */
|
|
2
2
|
import { importModule } from '../config/load.js';
|
|
3
|
+
import { PollScope, runInPollScope } from '../expect/poll-scope.js';
|
|
3
4
|
import { classifyError, E2EError, serializeError, TestTimeoutError, } from '../internal/errors.js';
|
|
4
5
|
import { DebugTrace } from '../internal/debug.js';
|
|
5
6
|
import { titlePathKey } from '../internal/ids.js';
|
|
@@ -12,13 +13,26 @@ export function findRegistered(realm, test) {
|
|
|
12
13
|
/**
|
|
13
14
|
* Runs one hook, or a fixture teardown, within its budget. One that overruns
|
|
14
15
|
* fails with the runner's timeout error naming `label`; `onTimeout` lets the
|
|
15
|
-
* caller cancel what it started.
|
|
16
|
+
* caller cancel what it started. The hook owns the `expect.poll` calls it
|
|
17
|
+
* starts: one still running when it returns fails it with
|
|
18
|
+
* `STEP_NOT_AWAITED` and is cancelled, and one left by a hook that failed is
|
|
19
|
+
* cancelled beside that failure.
|
|
16
20
|
*/
|
|
17
|
-
export function runHook(label, run, timeoutMs, onTimeout) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
export async function runHook(label, run, timeoutMs, onTimeout) {
|
|
22
|
+
const polls = new PollScope(`the ${label}`);
|
|
23
|
+
try {
|
|
24
|
+
await withTimeout(runInPollScope(polls, () => Promise.resolve().then(run)), timeoutMs, () => {
|
|
25
|
+
onTimeout?.();
|
|
26
|
+
return new TestTimeoutError(`${label} timed out`);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
catch (cause) {
|
|
30
|
+
polls.close();
|
|
31
|
+
throw cause;
|
|
32
|
+
}
|
|
33
|
+
const notAwaited = polls.close();
|
|
34
|
+
if (notAwaited !== undefined)
|
|
35
|
+
throw notAwaited;
|
|
22
36
|
}
|
|
23
37
|
/** Creates realms and runs suite-scope hooks with per-realm entry tracking. */
|
|
24
38
|
export class RealmManager {
|
|
@@ -32,7 +46,7 @@ export class RealmManager {
|
|
|
32
46
|
/** Re-imports one test module in a fresh realm. */
|
|
33
47
|
async create(file) {
|
|
34
48
|
this.realmCounter += 1;
|
|
35
|
-
const registration = await this.debug.time('realm.import', () => collectModule(() => importModule(file.absolutePath, `${this.options.targetName}-${this.realmCounter}`), file.absolutePath));
|
|
49
|
+
const registration = await this.debug.time('realm.import', () => collectModule(() => importModule(file.absolutePath, `${this.options.targetName}-${this.realmCounter}`), file.absolutePath, this.options.redactTitle));
|
|
36
50
|
return this.adopt(registration, file);
|
|
37
51
|
}
|
|
38
52
|
/**
|
|
@@ -152,4 +166,3 @@ function scopeId(scope) {
|
|
|
152
166
|
function scopeChainFor(test) {
|
|
153
167
|
return [undefined, ...groupChain(test.group)];
|
|
154
168
|
}
|
|
155
|
-
//# sourceMappingURL=realm.js.map
|
package/dist/run/records.d.ts
CHANGED
|
@@ -148,9 +148,24 @@ export interface ResultRecord {
|
|
|
148
148
|
* every other field is plain data.
|
|
149
149
|
*/
|
|
150
150
|
export type WireResultRecord = Omit<ResultRecord, 'target'>;
|
|
151
|
+
/** The failure a runtime skip followed, with the evidence its attempt captured. */
|
|
152
|
+
export interface FailureBeforeSkip {
|
|
153
|
+
readonly error: SerializedError;
|
|
154
|
+
readonly failure: FailureEvidence | undefined;
|
|
155
|
+
/** The failing attempt's artifacts; for a serial member, the group attempt's. */
|
|
156
|
+
readonly artifacts: readonly ArtifactRecord[];
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* The failure a test's `test.skip(...)` followed: the last attempt that
|
|
160
|
+
* failed before a skipped retry, or a soft failure the skipping attempt kept.
|
|
161
|
+
* Engine cleanup diagnostics after the skip are not one. A serial member's
|
|
162
|
+
* attempts live on its group, which `groupOf` looks up only for such a member.
|
|
163
|
+
*/
|
|
164
|
+
export declare function failureBeforeSkip(result: Pick<ResultRecord, 'status' | 'skip' | 'attempts' | 'serialGroupId' | 'test'>, groupOf: (id: string) => SerialGroupRecord | undefined): FailureBeforeSkip | undefined;
|
|
165
|
+
/** Whether any skipped result followed a failure: what `failOnSkippedFailure` fails a run for. */
|
|
166
|
+
export declare function someSkippedAfterFailure(results: readonly ResultRecord[], serialGroups: readonly SerialGroupRecord[]): boolean;
|
|
151
167
|
/** Strips the live target from a result for transport. */
|
|
152
168
|
export declare function encodeResult(record: ResultRecord): WireResultRecord;
|
|
153
169
|
export interface RunError {
|
|
154
170
|
error: SerializedError;
|
|
155
171
|
}
|
|
156
|
-
//# sourceMappingURL=records.d.ts.map
|
package/dist/run/records.js
CHANGED
|
@@ -7,9 +7,34 @@
|
|
|
7
7
|
export function isFailedStatus(status) {
|
|
8
8
|
return status !== 'passed' && status !== 'skipped' && status !== 'flaky';
|
|
9
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* The failure a test's `test.skip(...)` followed: the last attempt that
|
|
12
|
+
* failed before a skipped retry, or a soft failure the skipping attempt kept.
|
|
13
|
+
* Engine cleanup diagnostics after the skip are not one. A serial member's
|
|
14
|
+
* attempts live on its group, which `groupOf` looks up only for such a member.
|
|
15
|
+
*/
|
|
16
|
+
export function failureBeforeSkip(result, groupOf) {
|
|
17
|
+
if (result.status !== 'skipped' || result.skip?.cause !== 'explicit')
|
|
18
|
+
return undefined;
|
|
19
|
+
const runs = result.serialGroupId === undefined
|
|
20
|
+
? result.attempts
|
|
21
|
+
: (groupOf(result.serialGroupId)?.attempts ?? []).flatMap((attempt) => attempt.members
|
|
22
|
+
.filter((member) => member.testId === result.test.id)
|
|
23
|
+
.map((member) => ({ ...member, artifacts: attempt.artifacts })));
|
|
24
|
+
for (const run of runs.toReversed()) {
|
|
25
|
+
const error = run.error ?? run.secondaryErrors.find((secondary) => secondary.phase !== 'cleanup');
|
|
26
|
+
if (error !== undefined)
|
|
27
|
+
return { error, failure: run.failure, artifacts: run.artifacts };
|
|
28
|
+
}
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
/** Whether any skipped result followed a failure: what `failOnSkippedFailure` fails a run for. */
|
|
32
|
+
export function someSkippedAfterFailure(results, serialGroups) {
|
|
33
|
+
const groups = new Map(serialGroups.map((group) => [group.id, group]));
|
|
34
|
+
return results.some((result) => failureBeforeSkip(result, (id) => groups.get(id)) !== undefined);
|
|
35
|
+
}
|
|
10
36
|
/** Strips the live target from a result for transport. */
|
|
11
37
|
export function encodeResult(record) {
|
|
12
38
|
const { target: _target, ...rest } = record;
|
|
13
39
|
return rest;
|
|
14
40
|
}
|
|
15
|
-
//# sourceMappingURL=records.js.map
|
package/dist/run/retry.d.ts
CHANGED
|
@@ -12,7 +12,8 @@ export declare function isRetryEligible(attempt: RetryAttempt): boolean;
|
|
|
12
12
|
* Runs up to `maxAttempts` attempts, stopping on pass, interrupt, or a
|
|
13
13
|
* failure that does not consume retry budget. `runOnce` returns the
|
|
14
14
|
* finished attempt, or undefined when the attempt could not start (the
|
|
15
|
-
* loop stops and the last observed status stands).
|
|
15
|
+
* loop stops and the last observed status stands). An interrupt during a
|
|
16
|
+
* retry keeps the verdict the failed attempt before it reached: the test
|
|
17
|
+
* did fail, and only its second chance was cut short.
|
|
16
18
|
*/
|
|
17
19
|
export declare function runWithRetries(maxAttempts: number, interruptSignal: AbortSignal, runOnce: (attemptIndex: number) => Promise<RetryAttempt | undefined>): Promise<ResultStatus>;
|
|
18
|
-
//# sourceMappingURL=retry.d.ts.map
|
package/dist/run/retry.js
CHANGED
|
@@ -8,7 +8,9 @@ export function isRetryEligible(attempt) {
|
|
|
8
8
|
* Runs up to `maxAttempts` attempts, stopping on pass, interrupt, or a
|
|
9
9
|
* failure that does not consume retry budget. `runOnce` returns the
|
|
10
10
|
* finished attempt, or undefined when the attempt could not start (the
|
|
11
|
-
* loop stops and the last observed status stands).
|
|
11
|
+
* loop stops and the last observed status stands). An interrupt during a
|
|
12
|
+
* retry keeps the verdict the failed attempt before it reached: the test
|
|
13
|
+
* did fail, and only its second chance was cut short.
|
|
12
14
|
*/
|
|
13
15
|
export async function runWithRetries(maxAttempts, interruptSignal, runOnce) {
|
|
14
16
|
let finalStatus = 'failed';
|
|
@@ -23,7 +25,7 @@ export async function runWithRetries(maxAttempts, interruptSignal, runOnce) {
|
|
|
23
25
|
if (attempt.status === 'passed')
|
|
24
26
|
return attemptCount > 1 ? 'flaky' : 'passed';
|
|
25
27
|
if (attempt.status === 'interrupted')
|
|
26
|
-
return 'interrupted';
|
|
28
|
+
return attemptCount > 1 ? finalStatus : 'interrupted';
|
|
27
29
|
// A body that skipped itself has decided; a retry would only ask again.
|
|
28
30
|
if (attempt.status === 'skipped')
|
|
29
31
|
return 'skipped';
|
|
@@ -33,4 +35,3 @@ export async function runWithRetries(maxAttempts, interruptSignal, runOnce) {
|
|
|
33
35
|
}
|
|
34
36
|
return finalStatus;
|
|
35
37
|
}
|
|
36
|
-
//# sourceMappingURL=retry.js.map
|
package/dist/run/runner.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { type Shard, type TagMode } from '../collect/select.ts';
|
|
|
5
5
|
import type { ExploreProgress } from '../explore/progress.ts';
|
|
6
6
|
import { type Report1Document, type ReportExplore } from '../report/build.ts';
|
|
7
7
|
import { type RunEventSink, type RunExitCode, type RunStatus } from './events.ts';
|
|
8
|
-
import type
|
|
8
|
+
import { type ResultRecord } from './records.ts';
|
|
9
9
|
import type { BuiltinReporter, E2EConfig, RecordingMode } from '../types.ts';
|
|
10
10
|
export interface RunOptions {
|
|
11
11
|
cwd?: string | undefined;
|
|
@@ -169,7 +169,8 @@ export interface RunOutcome {
|
|
|
169
169
|
/** Where the AI trace was written; undefined unless `aiTrace` was requested. */
|
|
170
170
|
aiTracePath: string | undefined;
|
|
171
171
|
results: readonly ResultRecord[];
|
|
172
|
+
/** The config the run resolved; undefined when it failed to load. */
|
|
173
|
+
config: ResolvedConfig | undefined;
|
|
172
174
|
}
|
|
173
175
|
/** Executes one complete run and returns the outcome without exiting. */
|
|
174
176
|
export declare function run(options?: RunOptions): Promise<RunOutcome>;
|
|
175
|
-
//# sourceMappingURL=runner.d.ts.map
|
package/dist/run/runner.js
CHANGED
|
@@ -18,11 +18,13 @@ import { writeJsonReport } from '../report/write.js';
|
|
|
18
18
|
import { createRunEventEmitter, toEventResult } from './events.js';
|
|
19
19
|
import { allocateAppPorts } from './app-ports.js';
|
|
20
20
|
import { inProcessSpawner } from './in-process.js';
|
|
21
|
+
import { someSkippedAfterFailure } from './records.js';
|
|
21
22
|
import { runUnits } from './scheduler.js';
|
|
22
23
|
import { buildWorkPlans, plannedSlots } from './units.js';
|
|
23
24
|
import { SessionStore } from './sessions.js';
|
|
24
25
|
import { outputLayout } from './output.js';
|
|
25
|
-
import {
|
|
26
|
+
import { claimRerunDir, pruneArtifacts } from './artifacts.js';
|
|
27
|
+
import { carryForward, lastFailedIds, readLastRun, reportArtifactPaths } from './last-run.js';
|
|
26
28
|
import { childProcessSpawner } from './worker/handle.js';
|
|
27
29
|
import { setSecretRegistry } from '../secrets.js';
|
|
28
30
|
import { withAbort } from '../internal/time.js';
|
|
@@ -187,25 +189,38 @@ export async function run(options = {}) {
|
|
|
187
189
|
*/
|
|
188
190
|
const currentExitCode = () => combineExitCodes([
|
|
189
191
|
...resultExitCodes(results),
|
|
192
|
+
...(loaded.config?.failOnSkippedFailure === true && someSkippedAfterFailure(results, serialGroups) ? [1] : []),
|
|
190
193
|
...runErrors.map((runError) => exitCodeForCategory(runError.error.category)),
|
|
191
194
|
...(interruptController.signal.aborted ? [130] : []),
|
|
192
195
|
].filter((code) => code !== 130 || !(runAborted || stoppedEarly)));
|
|
193
196
|
// Detected once the config names the project root; a report written before
|
|
194
197
|
// that (a config failure) has no checkout to describe.
|
|
195
198
|
let vcs;
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
199
|
+
// The report `--last-failed` selected from, once collection has read it;
|
|
200
|
+
// reporters get it beside this run's report to fold the rerun into it, and
|
|
201
|
+
// this run's report carries what it owed that this run left out.
|
|
202
|
+
let lastRun;
|
|
203
|
+
// The ids of every test collection found, a setup no selected test needed
|
|
204
|
+
// among them, and the files it could not collect: what a rerun can still
|
|
205
|
+
// carry when the report lists no row.
|
|
206
|
+
let rerunCollection = { testIds: new Set(), uncollectedFiles: new Set() };
|
|
207
|
+
const buildRunReport = (exitCode) => {
|
|
208
|
+
const document = buildReport({
|
|
209
|
+
runId,
|
|
210
|
+
config: loaded.config,
|
|
211
|
+
vcs,
|
|
212
|
+
startedAt,
|
|
213
|
+
status: statusOf(exitCode),
|
|
214
|
+
exitCode,
|
|
215
|
+
results,
|
|
216
|
+
serialGroups,
|
|
217
|
+
runErrors,
|
|
218
|
+
targetProvenance,
|
|
219
|
+
explore: options.tests?.explore?.snapshot(),
|
|
220
|
+
});
|
|
221
|
+
const carried = lastRun === undefined ? undefined : carryForward(lastRun, document, rerunCollection);
|
|
222
|
+
return carried === undefined ? document : { ...document, run: { ...document.run, carried } };
|
|
223
|
+
};
|
|
209
224
|
/**
|
|
210
225
|
* Writes the canonical report and returns its path only once the file
|
|
211
226
|
* exists: a host must never be handed a path to a report that was not
|
|
@@ -249,9 +264,6 @@ export async function run(options = {}) {
|
|
|
249
264
|
return undefined;
|
|
250
265
|
}
|
|
251
266
|
};
|
|
252
|
-
// The report `--last-failed` selected from, once collection has read it;
|
|
253
|
-
// reporters get it beside this run's report to fold the rerun into it.
|
|
254
|
-
let lastRun;
|
|
255
267
|
/**
|
|
256
268
|
* Whether the run got as far as its tests. Only such a run writes into the
|
|
257
269
|
* output directory: one that stopped before leaves the previous run's
|
|
@@ -300,7 +312,7 @@ export async function run(options = {}) {
|
|
|
300
312
|
...(lastRun === undefined ? {} : { lastRun }),
|
|
301
313
|
}, options.reporterTimeout ?? REPORTER_TIMEOUT_MS, forceController.signal);
|
|
302
314
|
listReporter?.rows(rows);
|
|
303
|
-
return { exitCode, status, report, reportPath, aiTracePath, results };
|
|
315
|
+
return { exitCode, status, report, reportPath, aiTracePath, results, config: loaded.config };
|
|
304
316
|
};
|
|
305
317
|
if (loaded.config === undefined) {
|
|
306
318
|
recordFailure(loaded.error, 'config');
|
|
@@ -364,6 +376,10 @@ export async function run(options = {}) {
|
|
|
364
376
|
: collectInMemory(config.projectRoot, options.tests.file, options.tests.registration, consumesSession(options.tests.registration) ? await collectSetups(config) : undefined);
|
|
365
377
|
const inputs = await selectionInputs(options, config);
|
|
366
378
|
lastRun = inputs.lastRun;
|
|
379
|
+
rerunCollection = {
|
|
380
|
+
testIds: new Set(collection.tests.map((test) => test.id)),
|
|
381
|
+
uncollectedFiles: new Set(collection.uncollected.map((skipped) => skipped.file)),
|
|
382
|
+
};
|
|
367
383
|
const selection = repeatEach(select(collection, config, inputs.filters, options.passWithNoTests !== undefined ? { passWithNoTests: options.passWithNoTests } : {}), options.repeatEach ?? 1);
|
|
368
384
|
return { collection, selection };
|
|
369
385
|
}));
|
|
@@ -450,15 +466,26 @@ export async function run(options = {}) {
|
|
|
450
466
|
// Tests are about to start, and only now is the previous run's evidence
|
|
451
467
|
// given up: the artifact tree is emptied, so what is there once this run
|
|
452
468
|
// ends is its own and nothing a report no longer names, and this run's
|
|
453
|
-
// report replaces the last. A
|
|
454
|
-
//
|
|
455
|
-
//
|
|
469
|
+
// report replaces the last. A `--last-failed` rerun keeps the evidence
|
|
470
|
+
// the report it reruns names instead, since that report's results fold
|
|
471
|
+
// into the rerun's and its carried tests do not run again, and files its
|
|
472
|
+
// own attempts in a fresh `rerun-<n>` directory beside it, so no attempt
|
|
473
|
+
// overwrites an earlier one's files. A run that stopped before here (no
|
|
474
|
+
// test selected, a collection error, a target that cannot record what it
|
|
475
|
+
// asks, an app that failed to start, an interrupt) leaves both, and
|
|
456
476
|
// `--last-failed` still reads the run that executed. A wipe that fails
|
|
457
477
|
// part way has already given up the old evidence, so this run's report
|
|
458
478
|
// records the failure.
|
|
459
479
|
testsStarted = true;
|
|
480
|
+
let rerunDir;
|
|
460
481
|
try {
|
|
461
|
-
|
|
482
|
+
if (lastRun === undefined) {
|
|
483
|
+
await rm(layout.artifacts, { recursive: true, force: true });
|
|
484
|
+
}
|
|
485
|
+
else {
|
|
486
|
+
await pruneArtifacts(layout.artifacts, reportArtifactPaths(lastRun));
|
|
487
|
+
rerunDir = await claimRerunDir(layout.artifacts);
|
|
488
|
+
}
|
|
462
489
|
}
|
|
463
490
|
catch (cause) {
|
|
464
491
|
recordFailure(cause, 'launch');
|
|
@@ -482,6 +509,7 @@ export async function run(options = {}) {
|
|
|
482
509
|
inMemory: options.tests,
|
|
483
510
|
runId,
|
|
484
511
|
artifactsRoot,
|
|
512
|
+
rerunDir,
|
|
485
513
|
sessionStore: store,
|
|
486
514
|
headed: options.headed ?? false,
|
|
487
515
|
debug,
|
|
@@ -495,6 +523,7 @@ export async function run(options = {}) {
|
|
|
495
523
|
ports: config.ports,
|
|
496
524
|
runId,
|
|
497
525
|
artifactsRoot,
|
|
526
|
+
rerunDir,
|
|
498
527
|
headed: options.headed ?? false,
|
|
499
528
|
sessionsRoot: layout.sessions,
|
|
500
529
|
sessionKeyBase64: store.exportKeyForWorker(),
|
|
@@ -747,13 +776,21 @@ function resultExitCodes(results) {
|
|
|
747
776
|
/** Why a reporter's `onRunFinished` was given up on: the message is the stderr line. */
|
|
748
777
|
class ReporterAbandoned extends Error {
|
|
749
778
|
}
|
|
779
|
+
/**
|
|
780
|
+
* The built-in reporters that write files beside `report.json`. A forced
|
|
781
|
+
* interrupt never abandons them: they are local writes, and giving one up
|
|
782
|
+
* would leave the previous run's `summary.md` or `junit.xml` beside this
|
|
783
|
+
* run's report, where CI reads it as this run's.
|
|
784
|
+
*/
|
|
785
|
+
const FILE_REPORTERS = new Set([STATELESS_REPORTERS.junit, STATELESS_REPORTERS.markdown]);
|
|
750
786
|
/**
|
|
751
787
|
* Awaits every reporter's `onRunFinished` at once, each within `timeoutMs`
|
|
752
|
-
* and until a forced interrupt, and
|
|
753
|
-
* with. Each reporter gets a signal
|
|
754
|
-
*
|
|
755
|
-
* reporter that throws, runs out of
|
|
756
|
-
* rows is one line on stderr; it can
|
|
788
|
+
* and, except the built-in file reporters, until a forced interrupt, and
|
|
789
|
+
* collects the summary rows they resolve with. Each reporter gets a signal
|
|
790
|
+
* that aborts on either, so a well-behaved one cancels its own work and
|
|
791
|
+
* leaves no handle holding the process. A reporter that throws, runs out of
|
|
792
|
+
* time, or returns something other than rows is one line on stderr; it can
|
|
793
|
+
* never change the run's outcome.
|
|
757
794
|
*/
|
|
758
795
|
async function runReporters(reporters, finished, timeoutMs, force) {
|
|
759
796
|
const warn = (reporter, detail) => {
|
|
@@ -767,10 +804,12 @@ async function runReporters(reporters, finished, timeoutMs, force) {
|
|
|
767
804
|
const abandon = new AbortController();
|
|
768
805
|
const timer = setTimeout(() => abandon.abort(new ReporterAbandoned(`did not finish within ${budget}`)), timeoutMs);
|
|
769
806
|
const onForce = () => abandon.abort(new ReporterAbandoned('abandoned: the run was forced to stop'));
|
|
770
|
-
if (
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
807
|
+
if (!FILE_REPORTERS.has(reporter)) {
|
|
808
|
+
if (force.aborted)
|
|
809
|
+
onForce();
|
|
810
|
+
else
|
|
811
|
+
force.addEventListener('abort', onForce, { once: true });
|
|
812
|
+
}
|
|
774
813
|
try {
|
|
775
814
|
const result = await withAbort(() => Promise.resolve(onRunFinished.call(reporter, finished, abandon.signal)), abandon.signal, () => abandon.signal.reason);
|
|
776
815
|
if (result === undefined)
|
|
@@ -803,4 +842,3 @@ function isSummaryRow(value) {
|
|
|
803
842
|
const { label, text } = value;
|
|
804
843
|
return typeof label === 'string' && label.length > 0 && typeof text === 'string' && text.length > 0;
|
|
805
844
|
}
|
|
806
|
-
//# sourceMappingURL=runner.js.map
|
package/dist/run/scheduler.d.ts
CHANGED
package/dist/run/scheduler.js
CHANGED
package/dist/run/secrecy.d.ts
CHANGED
|
@@ -47,6 +47,15 @@ export declare class SecretExposure {
|
|
|
47
47
|
* learns them; provider-backed values join as they resolve.
|
|
48
48
|
*/
|
|
49
49
|
export declare const processSecrets: SecretLedger;
|
|
50
|
+
/**
|
|
51
|
+
* A ledger of the static values of `secrets` alone, built once per map. What
|
|
52
|
+
* text produced before any session exists is redacted with, such as a test
|
|
53
|
+
* title at collection: every process resolving the same config redacts it
|
|
54
|
+
* alike, so a test's id agrees between the runner and its workers. A
|
|
55
|
+
* provider-backed value is not known yet and is not in it. Shared, so it is
|
|
56
|
+
* handed out read-only: nothing registers into it.
|
|
57
|
+
*/
|
|
58
|
+
export declare function staticSecretLedger(secrets: ResolvedConfig['allSecrets']): Pick<SecretLedger, 'redact' | 'entries'>;
|
|
50
59
|
/** Seeds `processSecrets` with the static values of `secrets`, so output before any session opens is covered too. */
|
|
51
60
|
export declare function registerStaticSecrets(secrets: ResolvedConfig['allSecrets']): void;
|
|
52
61
|
/**
|
|
@@ -70,6 +79,12 @@ export declare function registerDerivedSecrets(name: string, derived: readonly s
|
|
|
70
79
|
* values join through the resolver at fill time.
|
|
71
80
|
*/
|
|
72
81
|
export declare function sessionSecrecy(session: TargetSession, secrets: ResolvedConfig['allSecrets']): SessionSecrecy;
|
|
82
|
+
/**
|
|
83
|
+
* Redacts `text` with every value `session` has seen, or with the static
|
|
84
|
+
* values while no session is open yet, so text an attempt produces before
|
|
85
|
+
* its session exists (a step label, a fixture error) is covered too.
|
|
86
|
+
*/
|
|
87
|
+
export declare function redactForSession(session: TargetSession | undefined, secrets: ResolvedConfig['allSecrets'], text: string): string;
|
|
73
88
|
/** What a saved session carries of the secrecy of the attempt that saved it. */
|
|
74
89
|
export interface SavedSecrecy {
|
|
75
90
|
/** Name and value pairs the saving session learned beyond the static config values; travels only inside the encrypted payload. */
|
|
@@ -86,4 +101,3 @@ export interface SavedSecrecy {
|
|
|
86
101
|
export declare function carriedSecrecy(secrecy: SessionSecrecy, secrets: ResolvedConfig['allSecrets']): SavedSecrecy;
|
|
87
102
|
/** Seeds a restored session's secrecy with what the saving session knew, so a value the restored state echoes back is still redacted and withheld. */
|
|
88
103
|
export declare function adoptSecrecy(secrecy: SessionSecrecy, saved: SavedSecrecy): void;
|
|
89
|
-
//# sourceMappingURL=secrecy.d.ts.map
|
package/dist/run/secrecy.js
CHANGED
|
@@ -43,6 +43,24 @@ export class SecretExposure {
|
|
|
43
43
|
* learns them; provider-backed values join as they resolve.
|
|
44
44
|
*/
|
|
45
45
|
export const processSecrets = new SecretLedger();
|
|
46
|
+
/** The static ledger of each secrets map, built once. */
|
|
47
|
+
const staticLedgers = new WeakMap();
|
|
48
|
+
/**
|
|
49
|
+
* A ledger of the static values of `secrets` alone, built once per map. What
|
|
50
|
+
* text produced before any session exists is redacted with, such as a test
|
|
51
|
+
* title at collection: every process resolving the same config redacts it
|
|
52
|
+
* alike, so a test's id agrees between the runner and its workers. A
|
|
53
|
+
* provider-backed value is not known yet and is not in it. Shared, so it is
|
|
54
|
+
* handed out read-only: nothing registers into it.
|
|
55
|
+
*/
|
|
56
|
+
export function staticSecretLedger(secrets) {
|
|
57
|
+
let ledger = staticLedgers.get(secrets);
|
|
58
|
+
if (ledger === undefined) {
|
|
59
|
+
ledger = new SecretLedger([...secrets].flatMap(([name, { value }]) => (typeof value === 'string' ? [[name, value]] : [])));
|
|
60
|
+
staticLedgers.set(secrets, ledger);
|
|
61
|
+
}
|
|
62
|
+
return ledger;
|
|
63
|
+
}
|
|
46
64
|
/** Seeds `processSecrets` with the static values of `secrets`, so output before any session opens is covered too. */
|
|
47
65
|
export function registerStaticSecrets(secrets) {
|
|
48
66
|
for (const [name, { value }] of secrets) {
|
|
@@ -97,13 +115,21 @@ export function sessionSecrecy(session, secrets) {
|
|
|
97
115
|
if (secrecy === undefined) {
|
|
98
116
|
registerStaticSecrets(secrets);
|
|
99
117
|
secrecy = {
|
|
100
|
-
ledger: new SecretLedger(
|
|
118
|
+
ledger: new SecretLedger(staticSecretLedger(secrets).entries()),
|
|
101
119
|
exposure: new SecretExposure(),
|
|
102
120
|
};
|
|
103
121
|
secrecyBySession.set(session, secrecy);
|
|
104
122
|
}
|
|
105
123
|
return secrecy;
|
|
106
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Redacts `text` with every value `session` has seen, or with the static
|
|
127
|
+
* values while no session is open yet, so text an attempt produces before
|
|
128
|
+
* its session exists (a step label, a fixture error) is covered too.
|
|
129
|
+
*/
|
|
130
|
+
export function redactForSession(session, secrets, text) {
|
|
131
|
+
return (session === undefined ? staticSecretLedger(secrets) : sessionSecrecy(session, secrets).ledger).redact(text);
|
|
132
|
+
}
|
|
107
133
|
/**
|
|
108
134
|
* The secrecy a session envelope carries: the provider-resolved values the
|
|
109
135
|
* session learned, which the consumer's session cannot learn again on its
|
|
@@ -127,4 +153,3 @@ export function adoptSecrecy(secrecy, saved) {
|
|
|
127
153
|
if (saved.tainted)
|
|
128
154
|
secrecy.exposure.raise('filled');
|
|
129
155
|
}
|
|
130
|
-
//# sourceMappingURL=secrecy.js.map
|
package/dist/run/serial.d.ts
CHANGED
|
@@ -37,6 +37,8 @@ export interface SharedSerialSession {
|
|
|
37
37
|
export interface SerialHost {
|
|
38
38
|
readonly target: ResolvedTarget;
|
|
39
39
|
readonly artifactsRoot: string;
|
|
40
|
+
/** See `TargetExecutorOptions.rerunDir`. */
|
|
41
|
+
readonly rerunDir: string | undefined;
|
|
40
42
|
readonly runId: string;
|
|
41
43
|
/** The configured artifact store, so group-owned artifacts (the shared trace) upload like any other. */
|
|
42
44
|
readonly artifactStore: ArtifactStore | undefined;
|
|
@@ -57,4 +59,3 @@ export interface SerialHost {
|
|
|
57
59
|
}
|
|
58
60
|
/** Runs one serial unit to completion and emits every member result. */
|
|
59
61
|
export declare function runSerialUnit(host: SerialHost, members: readonly TestTargetPair[], file: FileRef): Promise<SerialGroupRecord>;
|
|
60
|
-
//# sourceMappingURL=serial.d.ts.map
|
package/dist/run/serial.js
CHANGED
|
@@ -3,7 +3,7 @@ import { classifyError, ConfigurationError, serializeError, } from '../internal/
|
|
|
3
3
|
import { canonicalDigest, timestamp, uuidv7 } from '../internal/ids.js';
|
|
4
4
|
import { groupTitles } from '../collect/registry.js';
|
|
5
5
|
import { pairRecordings } from '../collect/select.js';
|
|
6
|
-
import { createAttemptArtifacts, sanitizePathSegment } from './artifacts.js';
|
|
6
|
+
import { attemptSegments, createAttemptArtifacts, sanitizePathSegment } from './artifacts.js';
|
|
7
7
|
import { findRegistered, RealmManager } from './realm.js';
|
|
8
8
|
import { isFailedStatus } from './records.js';
|
|
9
9
|
import { runWithRetries } from './retry.js';
|
|
@@ -35,8 +35,11 @@ export async function runSerialUnit(host, members, file) {
|
|
|
35
35
|
const finalStatus = await runWithRetries(first.options.retries + 1, host.interruptSignal, async (attemptIndex) => {
|
|
36
36
|
const attempt = await runSerialAttempt(host, members, file, attemptIndex);
|
|
37
37
|
group.attempts.push(attempt);
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
// A retry the run interrupted keeps the verdict before it, so each member keeps what that attempt said.
|
|
39
|
+
const cutRetry = attemptIndex > 0 && attempt.status === 'interrupted';
|
|
40
|
+
if (!cutRetry)
|
|
41
|
+
for (const member of attempt.members)
|
|
42
|
+
memberFinalStatus.set(member.testId, member);
|
|
40
43
|
// A beforeAll failure is not retry-eligible: the
|
|
41
44
|
// attempt stands as recorded and the retry loop stops here.
|
|
42
45
|
if (attempt.error?.code === 'HOOK_FAILED')
|
|
@@ -88,13 +91,13 @@ async function runSerialAttempt(host, members, file, attemptIndex) {
|
|
|
88
91
|
const memberRecords = [];
|
|
89
92
|
const first = members[0];
|
|
90
93
|
const recordings = pairRecordings(first, attemptIndex);
|
|
91
|
-
const artifactSegments = [
|
|
94
|
+
const artifactSegments = attemptSegments(host.rerunDir, [
|
|
92
95
|
host.target.name,
|
|
93
96
|
sanitizePathSegment(first.test.serialId ?? first.test.id),
|
|
94
97
|
first.agent,
|
|
95
98
|
...repeatSegment(first.repeat),
|
|
96
99
|
`attempt-${attemptIndex}`,
|
|
97
|
-
];
|
|
100
|
+
]);
|
|
98
101
|
const artifacts = createAttemptArtifacts({
|
|
99
102
|
artifactsRoot: host.artifactsRoot,
|
|
100
103
|
segments: artifactSegments,
|
|
@@ -275,4 +278,3 @@ function serialTitlePath(test) {
|
|
|
275
278
|
const titles = groupTitles(test.serialRoot);
|
|
276
279
|
return titles.length === 0 ? [test.title] : titles;
|
|
277
280
|
}
|
|
278
|
-
//# sourceMappingURL=serial.js.map
|
package/dist/run/sessions.d.ts
CHANGED
package/dist/run/sessions.js
CHANGED
package/dist/run/standalone.d.ts
CHANGED
|
@@ -61,4 +61,3 @@ export interface StandaloneAttempt {
|
|
|
61
61
|
* failure everything that did start is torn down before the error surfaces.
|
|
62
62
|
*/
|
|
63
63
|
export declare function openStandaloneAttempt(options: StandaloneAttemptOptions): Promise<StandaloneAttempt>;
|
|
64
|
-
//# sourceMappingURL=standalone.d.ts.map
|
package/dist/run/standalone.js
CHANGED
|
@@ -18,7 +18,7 @@ import { TargetExecutor } from './execute.js';
|
|
|
18
18
|
import { createFixtures } from './fixtures.js';
|
|
19
19
|
import { PreparedEngines, recordingNotices, startDeclaredProcesses, validateEngine } from './provision.js';
|
|
20
20
|
import { attemptRecording } from '../internal/recording-modes.js';
|
|
21
|
-
import { sessionSecrecy } from './secrecy.js';
|
|
21
|
+
import { redactForSession, sessionSecrecy } from './secrecy.js';
|
|
22
22
|
import { SessionStore } from './sessions.js';
|
|
23
23
|
import { outputLayout } from './output.js';
|
|
24
24
|
import { StepRecorder } from './steps.js';
|
|
@@ -84,12 +84,13 @@ export async function openStandaloneAttempt(options) {
|
|
|
84
84
|
...(options.onProgress === undefined ? {} : { onProgress: (_testId, progress) => options.onProgress?.(progress) }),
|
|
85
85
|
},
|
|
86
86
|
});
|
|
87
|
+
let session;
|
|
87
88
|
const steps = new StepRecorder(attemptId, {
|
|
88
89
|
maxEventsPerStep: config.limits.maxEventsPerStep,
|
|
89
90
|
projectRoot: config.projectRoot,
|
|
91
|
+
redact: (text) => redactForSession(session, config.allSecrets, text),
|
|
90
92
|
...(options.onProgress === undefined ? {} : { onProgress: options.onProgress }),
|
|
91
93
|
});
|
|
92
|
-
let session;
|
|
93
94
|
const artifacts = createAttemptArtifacts({
|
|
94
95
|
artifactsRoot: layout.artifacts,
|
|
95
96
|
segments: [target.name, 'sessions', attemptId],
|
|
@@ -190,4 +191,3 @@ function sessionRecording(recording) {
|
|
|
190
191
|
const planned = attemptRecording(recording, 0);
|
|
191
192
|
return planned?.keep === 'on-failure' ? undefined : planned;
|
|
192
193
|
}
|
|
193
|
-
//# sourceMappingURL=standalone.js.map
|
package/dist/run/steps.d.ts
CHANGED
|
@@ -268,15 +268,9 @@ export interface StepRecorderOptions {
|
|
|
268
268
|
readonly onProgress?: (progress: StepProgress) => void;
|
|
269
269
|
/** The project root; with it, every step and step error names the test line it came from. */
|
|
270
270
|
readonly projectRoot?: string;
|
|
271
|
-
/** Replaces secret values in a step error's message and details before the record keeps them. */
|
|
271
|
+
/** Replaces secret values in a step's label, and in its error's message and details, before the record keeps them. */
|
|
272
272
|
readonly redact?: (text: string) => string;
|
|
273
273
|
}
|
|
274
|
-
/**
|
|
275
|
-
* Whether an unhandled rejection is an abandoned step's: already recorded as
|
|
276
|
-
* `STEP_NOT_AWAITED`, reaching the process only because the promise the
|
|
277
|
-
* test did not await rejected with it. Such a rejection is not a fault.
|
|
278
|
-
*/
|
|
279
|
-
export declare function isAbandonedStepRejection(cause: unknown): boolean;
|
|
280
274
|
export declare class StepRecorder {
|
|
281
275
|
private readonly attemptId;
|
|
282
276
|
private readonly attempt;
|
|
@@ -306,7 +300,7 @@ export declare class StepRecorder {
|
|
|
306
300
|
/** Highest timeline index among passed verification steps, or -1 when none has. */
|
|
307
301
|
get lastVerifiedStepIndex(): number;
|
|
308
302
|
/** Runs one public API call as a recorded top-level step. */
|
|
309
|
-
run<T>(kind: StepKind, api: string,
|
|
303
|
+
run<T>(kind: StepKind, api: string, rawLabel: string, body: () => Promise<T>, options?: StepRunOptions): Promise<T>;
|
|
310
304
|
private execute;
|
|
311
305
|
/**
|
|
312
306
|
* Fails every step still running once the test body has settled, and
|
|
@@ -357,4 +351,3 @@ export declare class StepRecorder {
|
|
|
357
351
|
private publish;
|
|
358
352
|
}
|
|
359
353
|
export {};
|
|
360
|
-
//# sourceMappingURL=steps.d.ts.map
|