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/cache/route.js
CHANGED
|
@@ -4,43 +4,66 @@
|
|
|
4
4
|
* The replay precondition asks "is the app on the screen this recording
|
|
5
5
|
* began on", and the postcondition "did we land where the recording landed".
|
|
6
6
|
* A URL answers neither directly: it carries the id the app minted for this
|
|
7
|
-
* run's record,
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* run's record, a cache buster, a session token, a fragment. All of that
|
|
8
|
+
* changes between two visits to the same screen, and none of it is the
|
|
9
|
+
* screen.
|
|
10
10
|
*
|
|
11
|
-
* So a location is reduced to its route: the
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
11
|
+
* So a location is reduced to its route: the origin it is on, the pathname's
|
|
12
|
+
* segments, and the query's parameters, with every segment or parameter
|
|
13
|
+
* value that looks minted per record (a uuid, a hex or digit run, a long
|
|
14
|
+
* token mixing letters and digits, a prefixed record id, text with
|
|
15
|
+
* whitespace) replaced by `:id`.
|
|
16
|
+
* Every other query value is part of the screen: `?mode=unsafe` is not
|
|
17
|
+
* `?mode=safe`, and `?tab=notes` shows other controls than no tab. The
|
|
18
|
+
* fragment is dropped, except that an app routing in the fragment
|
|
19
|
+
* (`#/companies/1`) routes by that path and its query. A value the call
|
|
20
|
+
* marked with `unique()` needs no rule here: the recording spells it as a
|
|
17
21
|
* placeholder in every spelling a URL gives it, its slug included
|
|
18
22
|
* (`cache/template.ts`), and replay fills in this run's value on both sides.
|
|
19
23
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
24
|
+
* The origin is relative to the app (`appLocation`): a location on the app's
|
|
25
|
+
* own origin is kept as its path, so a recording made against one deployment
|
|
26
|
+
* of the app replays on another that shares its `app.identity`, while a
|
|
27
|
+
* screen on any other origin keeps its origin and is another route.
|
|
28
|
+
*
|
|
29
|
+
* Two routes are the same screen only when they read alike. A literal that
|
|
30
|
+
* differs, a slug the runner never saw the value of, is another screen at
|
|
31
|
+
* both ends of a step: nothing recorded can tell a record's slug from a
|
|
32
|
+
* route word, and a screen that looks alike on another route (a settings
|
|
33
|
+
* page and a profile page sharing one layout) is exactly where a wrong link
|
|
34
|
+
* lands. A device engine reports a screen title in place of a URL, which is
|
|
35
|
+
* already a route and compares as itself.
|
|
28
36
|
*/
|
|
29
37
|
const PARAM = ':id';
|
|
30
38
|
/**
|
|
31
39
|
* A segment shaped like a value the app mints per record: a uuid, a hex or
|
|
32
40
|
* digit run, a long token carrying letters and at least two digits (a route
|
|
33
|
-
* word such as `companies-v2` has one),
|
|
34
|
-
*
|
|
35
|
-
*
|
|
41
|
+
* word such as `companies-v2` has one), a prefixed record id (letters, a
|
|
42
|
+
* dash, then a digit tail of two or more: `PROJ-016`, `INV-2041`; a single
|
|
43
|
+
* digit as in `page-2` is a route word), or text with whitespace, which no
|
|
44
|
+
* router puts in a path. Any other capitalized or dashed word is none of
|
|
45
|
+
* these.
|
|
36
46
|
*/
|
|
37
47
|
const MINTED_SEGMENT = [
|
|
38
48
|
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,
|
|
39
49
|
/^[0-9a-f]{8,}$/i,
|
|
40
50
|
/^\d+$/,
|
|
41
51
|
/^(?=(?:[^\d]*\d){2})(?=.*[A-Za-z])[A-Za-z0-9_-]{12,}$/,
|
|
52
|
+
/^[A-Za-z]+-\d{2,}$/,
|
|
42
53
|
/\s/,
|
|
43
54
|
];
|
|
55
|
+
/**
|
|
56
|
+
* A query value is minted on the same rules, with the wider alphabet a
|
|
57
|
+
* value carries that a path segment cannot: a signed token or a timestamp
|
|
58
|
+
* (`eyJhbGciOi.x1.y2`, `2026-10-01T10:00:00Z`) has dots, colons, and base64,
|
|
59
|
+
* and a date (`?from=2026-10-01`, a default an app fills in with today) has
|
|
60
|
+
* no letter at all.
|
|
61
|
+
*/
|
|
62
|
+
const MINTED_VALUE = [
|
|
63
|
+
...MINTED_SEGMENT,
|
|
64
|
+
/^(?=(?:[^\d]*\d){2})(?=.*[A-Za-z])[\w.~+/=:-]{12,}$/,
|
|
65
|
+
/^\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:?\d{2})?)?$/,
|
|
66
|
+
];
|
|
44
67
|
function decodeSegment(raw) {
|
|
45
68
|
try {
|
|
46
69
|
return decodeURIComponent(raw);
|
|
@@ -50,15 +73,30 @@ function decodeSegment(raw) {
|
|
|
50
73
|
}
|
|
51
74
|
}
|
|
52
75
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
76
|
+
* A location as the cache compares it: a URL on the app's own origin as its
|
|
77
|
+
* path, query, and fragment, so a recording follows the app to another
|
|
78
|
+
* deployment of it; anything else (another origin, a device screen title)
|
|
79
|
+
* as it is.
|
|
80
|
+
*/
|
|
81
|
+
export function appLocation(location, appOrigin) {
|
|
82
|
+
if (appOrigin === undefined || !URL.canParse(location))
|
|
83
|
+
return location;
|
|
84
|
+
const url = new URL(location);
|
|
85
|
+
return url.origin === appOrigin ? `${url.pathname}${url.search}${url.hash}` : location;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The parts of a location its route is made of, or undefined when the
|
|
89
|
+
* location is not a web address (a device engine's screen title, a
|
|
90
|
+
* browser's own page).
|
|
55
91
|
*/
|
|
56
|
-
function
|
|
92
|
+
function locationParts(location) {
|
|
93
|
+
let origin;
|
|
57
94
|
let rest = location;
|
|
58
95
|
if (URL.canParse(location)) {
|
|
59
96
|
const url = new URL(location);
|
|
60
97
|
if (url.protocol !== 'http:' && url.protocol !== 'https:')
|
|
61
98
|
return undefined;
|
|
99
|
+
origin = url.origin;
|
|
62
100
|
rest = `${url.pathname}${url.search}${url.hash}`;
|
|
63
101
|
}
|
|
64
102
|
else if (!location.startsWith('/')) {
|
|
@@ -66,43 +104,48 @@ function pathnameOf(location) {
|
|
|
66
104
|
}
|
|
67
105
|
const hashAt = rest.indexOf('#');
|
|
68
106
|
const fragment = hashAt === -1 ? '' : rest.slice(hashAt + 1);
|
|
69
|
-
const
|
|
70
|
-
|
|
107
|
+
const [documentPath, documentSearch] = splitOnce(hashAt === -1 ? rest : rest.slice(0, hashAt), '?');
|
|
108
|
+
if (!fragment.startsWith('/'))
|
|
109
|
+
return { ...(origin === undefined ? {} : { origin }), pathname: documentPath, search: documentSearch };
|
|
110
|
+
const [fragmentPath, fragmentSearch] = splitOnce(fragment, '?');
|
|
111
|
+
return {
|
|
112
|
+
...(origin === undefined ? {} : { origin }),
|
|
113
|
+
pathname: fragmentPath,
|
|
114
|
+
search: [documentSearch, fragmentSearch].filter((part) => part !== '').join('&'),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function splitOnce(text, separator) {
|
|
118
|
+
const at = text.indexOf(separator);
|
|
119
|
+
return at === -1 ? [text, ''] : [text.slice(0, at), text.slice(at + 1)];
|
|
120
|
+
}
|
|
121
|
+
/** A query's parameters as route terms, `key=value` with a minted key or value as `:id`, sorted. */
|
|
122
|
+
function queryTerms(search) {
|
|
123
|
+
const terms = [];
|
|
124
|
+
for (const [key, value] of new URLSearchParams(search)) {
|
|
125
|
+
const minted = (text) => text !== '' && MINTED_VALUE.some((pattern) => pattern.test(text));
|
|
126
|
+
terms.push(`${minted(key) ? PARAM : key}=${minted(value) ? PARAM : value}`);
|
|
127
|
+
}
|
|
128
|
+
return terms.toSorted();
|
|
71
129
|
}
|
|
72
130
|
/** The route of a location. */
|
|
73
|
-
|
|
74
|
-
const
|
|
75
|
-
if (
|
|
131
|
+
function routeOf(location) {
|
|
132
|
+
const parts = locationParts(location);
|
|
133
|
+
if (parts === undefined)
|
|
76
134
|
return { kind: 'opaque', location };
|
|
77
|
-
const segments = pathname
|
|
135
|
+
const segments = parts.pathname
|
|
78
136
|
.split('/')
|
|
79
137
|
.filter((raw) => raw !== '')
|
|
80
138
|
.map((raw) => {
|
|
81
139
|
const text = decodeSegment(raw);
|
|
82
140
|
return MINTED_SEGMENT.some((pattern) => pattern.test(text)) ? PARAM : text;
|
|
83
141
|
});
|
|
84
|
-
return { kind: 'url', segments };
|
|
142
|
+
return { kind: 'url', ...(parts.origin === undefined ? {} : { origin: parts.origin }), segments, query: queryTerms(parts.search) };
|
|
85
143
|
}
|
|
86
|
-
/**
|
|
87
|
-
export function
|
|
88
|
-
return
|
|
144
|
+
/** Whether two locations name the same screen: one origin, and segments and query that read alike. */
|
|
145
|
+
export function sameRoute(recorded, live) {
|
|
146
|
+
return routeIdentity(routeOf(recorded)) === routeIdentity(routeOf(live));
|
|
89
147
|
}
|
|
90
|
-
/**
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
* the screen must settle, and `different` otherwise.
|
|
94
|
-
*/
|
|
95
|
-
export function compareRoutes(recorded, live) {
|
|
96
|
-
if (recorded.kind === 'opaque' || live.kind === 'opaque') {
|
|
97
|
-
return recorded.kind === 'opaque' && live.kind === 'opaque' && recorded.location === live.location ? 'same' : 'different';
|
|
98
|
-
}
|
|
99
|
-
if (recorded.segments.length !== live.segments.length)
|
|
100
|
-
return 'different';
|
|
101
|
-
let differing = 0;
|
|
102
|
-
for (const [index, segment] of recorded.segments.entries()) {
|
|
103
|
-
if (segment !== live.segments[index])
|
|
104
|
-
differing += 1;
|
|
105
|
-
}
|
|
106
|
-
return differing === 0 ? 'same' : differing === 1 ? 'undecided' : 'different';
|
|
148
|
+
/** A route's parts as one comparable string, a slash inside a segment kept inside it. */
|
|
149
|
+
function routeIdentity(route) {
|
|
150
|
+
return JSON.stringify(route.kind === 'opaque' ? [route.location] : [route.origin ?? null, route.segments, route.query]);
|
|
107
151
|
}
|
|
108
|
-
//# sourceMappingURL=route.js.map
|
package/dist/cache/store.d.ts
CHANGED
|
@@ -59,6 +59,12 @@ export declare class FileCacheStore implements CacheStore {
|
|
|
59
59
|
bytes: number;
|
|
60
60
|
} | undefined>;
|
|
61
61
|
delete(keyHash: string): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* The key hashes of the digest-named files in the directory, readable or
|
|
64
|
+
* not; none when the directory does not exist. Not part of `CacheStore`:
|
|
65
|
+
* only `cache.strict` lists a store, and only this one.
|
|
66
|
+
*/
|
|
67
|
+
keyHashes(): Promise<string[]>;
|
|
62
68
|
/**
|
|
63
69
|
* Resolves one entry path. The key hash is the only caller-supplied path
|
|
64
70
|
* component and must be a bare digest, so traversal is impossible by
|
|
@@ -66,4 +72,3 @@ export declare class FileCacheStore implements CacheStore {
|
|
|
66
72
|
*/
|
|
67
73
|
private entryPath;
|
|
68
74
|
}
|
|
69
|
-
//# sourceMappingURL=store.d.ts.map
|
package/dist/cache/store.js
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* The interface exists so a remote store — the cloud's shared cache — can
|
|
14
14
|
* replace the filesystem without the harness noticing.
|
|
15
15
|
*/
|
|
16
|
-
import { mkdir, readFile, stat, unlink } from 'node:fs/promises';
|
|
16
|
+
import { mkdir, readdir, readFile, stat, unlink } from 'node:fs/promises';
|
|
17
17
|
import { join } from 'node:path';
|
|
18
18
|
import { writeFileAtomic } from '../internal/atomic-write.js';
|
|
19
19
|
import { errorMessage } from '../internal/errors.js';
|
|
@@ -83,6 +83,26 @@ export class FileCacheStore {
|
|
|
83
83
|
return;
|
|
84
84
|
await unlink(path).catch(() => undefined);
|
|
85
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* The key hashes of the digest-named files in the directory, readable or
|
|
88
|
+
* not; none when the directory does not exist. Not part of `CacheStore`:
|
|
89
|
+
* only `cache.strict` lists a store, and only this one.
|
|
90
|
+
*/
|
|
91
|
+
async keyHashes() {
|
|
92
|
+
let names;
|
|
93
|
+
try {
|
|
94
|
+
names = await readdir(this.directory);
|
|
95
|
+
}
|
|
96
|
+
catch (cause) {
|
|
97
|
+
if (cause.code === 'ENOENT')
|
|
98
|
+
return [];
|
|
99
|
+
throw cause;
|
|
100
|
+
}
|
|
101
|
+
return names.flatMap((name) => {
|
|
102
|
+
const keyHash = name.endsWith('.json') ? name.slice(0, -'.json'.length) : undefined;
|
|
103
|
+
return keyHash !== undefined && KEY_HASH.test(keyHash) ? [keyHash] : [];
|
|
104
|
+
});
|
|
105
|
+
}
|
|
86
106
|
/**
|
|
87
107
|
* Resolves one entry path. The key hash is the only caller-supplied path
|
|
88
108
|
* component and must be a bare digest, so traversal is impossible by
|
|
@@ -92,4 +112,3 @@ export class FileCacheStore {
|
|
|
92
112
|
return KEY_HASH.test(keyHash) ? join(this.directory, `${keyHash}.json`) : undefined;
|
|
93
113
|
}
|
|
94
114
|
}
|
|
95
|
-
//# sourceMappingURL=store.js.map
|
package/dist/cache/template.d.ts
CHANGED
|
@@ -81,4 +81,3 @@ export declare function templateTrace(trace: ActionTrace, templates: readonly Pa
|
|
|
81
81
|
* or undefined when the entry names a parameter this call did not mark.
|
|
82
82
|
*/
|
|
83
83
|
export declare function expandTrace(trace: ActionTrace, templates: readonly ParamTemplate[]): ActionTrace | undefined;
|
|
84
|
-
//# sourceMappingURL=template.d.ts.map
|
package/dist/cache/template.js
CHANGED
package/dist/cache/trace.d.ts
CHANGED
|
@@ -32,26 +32,36 @@ export declare const MAX_TRACE_INPUT_CHARS = 4096;
|
|
|
32
32
|
/** Caps prose at `maxChars`, marking the cut with an ellipsis. */
|
|
33
33
|
export declare function bound(text: string, maxChars: number): string;
|
|
34
34
|
/**
|
|
35
|
-
* Cap on recorded
|
|
36
|
-
* appeared on screen between the first observation and the
|
|
37
|
-
* a same-screen mutation rarely has more
|
|
38
|
-
* the whole screen keeps the first few
|
|
35
|
+
* Cap on recorded anchors, per side of the delta. Anchors are the step's own
|
|
36
|
+
* delta, what appeared on screen between the first observation and the
|
|
37
|
+
* passing one and what vanished, so a same-screen mutation rarely has more
|
|
38
|
+
* than a handful; a step that changes the whole screen keeps the first few,
|
|
39
|
+
* announcements first (`cache/anchors.ts`).
|
|
39
40
|
*/
|
|
40
41
|
export declare const MAX_TRACE_ANCHORS = 8;
|
|
41
42
|
/** Longest a replay waits for the recorded end state to return. */
|
|
42
43
|
export declare const MAX_TRACE_END_WAIT_MS = 120000;
|
|
43
44
|
/**
|
|
44
45
|
* What a trace was recorded for, in the terms a person uses: the test, the
|
|
45
|
-
* target,
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
46
|
+
* target, the digest of the instruction, and, on entries recorded since they
|
|
47
|
+
* were added, the rest of what names the step within its test. None of it is
|
|
48
|
+
* replay input — every one of these fields is already in the key, so a
|
|
49
|
+
* mismatch is a miss before an entry is ever read — and none of it is trusted
|
|
50
|
+
* as such. It exists so a file named after a digest can say which step it
|
|
51
|
+
* belongs to, and so `cache.strict` can tell a step whose key changed under
|
|
52
|
+
* its recording from a step that was never recorded.
|
|
49
53
|
*/
|
|
50
54
|
export interface TraceProvenance {
|
|
51
55
|
readonly testId: string;
|
|
52
56
|
readonly targetId: string;
|
|
53
57
|
/** SHA-256 of the normalized instruction (`cache/identity.ts`). */
|
|
54
58
|
readonly instructionDigest: string;
|
|
59
|
+
/** SHA-256/JCS of the step's params as the key digests them, a placeholder for each `unique()` value. */
|
|
60
|
+
readonly paramsDigest?: string;
|
|
61
|
+
/** Zero-based occurrence of the step among its repeats in the attempt. */
|
|
62
|
+
readonly callIndex?: number;
|
|
63
|
+
/** Name of the configured agent the step ran with. */
|
|
64
|
+
readonly agent?: string;
|
|
55
65
|
}
|
|
56
66
|
/**
|
|
57
67
|
* How a recorded action addressed its node, independent of observation ids.
|
|
@@ -82,7 +92,23 @@ export interface TraceTargetDescriptor {
|
|
|
82
92
|
* twin that appeared or vanished still diverges instead of guessing.
|
|
83
93
|
*/
|
|
84
94
|
readonly position?: TracePosition;
|
|
95
|
+
/**
|
|
96
|
+
* An anchor's states that were on, sorted; anchors only. A switch turned
|
|
97
|
+
* on is the same control before and after, so its state is what tells
|
|
98
|
+
* the step's effect from a tap that did nothing.
|
|
99
|
+
*/
|
|
100
|
+
readonly states?: readonly TraceAnchorState[];
|
|
101
|
+
/**
|
|
102
|
+
* An anchor's current input value, redacted and bounded like its text;
|
|
103
|
+
* anchors only, and never a secure field's, which is never observed. A
|
|
104
|
+
* field typed into or an option selected is the same control before and
|
|
105
|
+
* after, so its value is the step's effect.
|
|
106
|
+
*/
|
|
107
|
+
readonly value?: string;
|
|
85
108
|
}
|
|
109
|
+
/** The node states an anchor records: the ones a step sets on a control it leaves on screen. */
|
|
110
|
+
export declare const TRACE_ANCHOR_STATES: readonly ['checked', 'expanded', 'pressed', 'selected'];
|
|
111
|
+
export type TraceAnchorState = (typeof TRACE_ANCHOR_STATES)[number];
|
|
86
112
|
interface ActionBase {
|
|
87
113
|
/** One-line prose summary — the only view a mid-step hand-off notice shows. */
|
|
88
114
|
readonly summary: string;
|
|
@@ -245,7 +271,7 @@ export interface ToolGapAction extends ActionBase {
|
|
|
245
271
|
export type RecordedAction = NodeAction | TypeAction | TypeSecretAction | PressAction | SelectAction | CheckAction | UploadAction | DragAction | ScrollAction | ScrollUntilAction | NavigateAction | BackAction | PointAction | TypeTextAction | PressKeyAction | DismissKeyboardAction | ToolGapAction;
|
|
246
272
|
export interface ActionTrace {
|
|
247
273
|
readonly actions: readonly RecordedAction[];
|
|
248
|
-
/** Executor that produced the trace
|
|
274
|
+
/** Executor that produced the trace: provenance, never part of the key, which names the agent instead. */
|
|
249
275
|
readonly executor: {
|
|
250
276
|
readonly name: string;
|
|
251
277
|
readonly version?: string;
|
|
@@ -254,12 +280,17 @@ export interface ActionTrace {
|
|
|
254
280
|
readonly recordedFor?: TraceProvenance;
|
|
255
281
|
/** The recorded run's verdict summary. */
|
|
256
282
|
readonly summary: string;
|
|
257
|
-
/**
|
|
283
|
+
/**
|
|
284
|
+
* Location when the step began, as the cache compares it (`appLocation`):
|
|
285
|
+
* a path on the app's own origin, else the whole location. A precondition
|
|
286
|
+
* unless the trace opens with navigate.
|
|
287
|
+
*/
|
|
258
288
|
readonly startPath?: string;
|
|
259
289
|
/**
|
|
260
|
-
* Location
|
|
261
|
-
* A full replay self-finalizes only while
|
|
262
|
-
* a recorded flow whose destination changed
|
|
290
|
+
* Location when the step passed, spelled like `startPath`: the trace's
|
|
291
|
+
* deterministic postcondition. A full replay self-finalizes only while
|
|
292
|
+
* the live route still matches; a recorded flow whose destination changed
|
|
293
|
+
* hands off instead of passing.
|
|
263
294
|
*/
|
|
264
295
|
readonly endPath?: string;
|
|
265
296
|
/**
|
|
@@ -271,6 +302,14 @@ export interface ActionTrace {
|
|
|
271
302
|
* instead of passing on mechanics alone.
|
|
272
303
|
*/
|
|
273
304
|
readonly endAnchors?: readonly TraceTargetDescriptor[];
|
|
305
|
+
/**
|
|
306
|
+
* Descriptors of nodes that were on screen when the step began and were
|
|
307
|
+
* gone when it passed: a delete, a dismissed dialog, a cleared draft. A
|
|
308
|
+
* full replay self-finalizes only while every one of them is gone again,
|
|
309
|
+
* so a removal that did not happen hands off instead of passing with no
|
|
310
|
+
* anchor to check.
|
|
311
|
+
*/
|
|
312
|
+
readonly goneAnchors?: readonly TraceTargetDescriptor[];
|
|
274
313
|
/**
|
|
275
314
|
* How long the recorded run took from its first action to its passing
|
|
276
315
|
* verdict, plus a margin. A replay waits up to this long for the anchors to
|
|
@@ -295,7 +334,7 @@ export declare function buildTraceEntry(payload: ActionTrace): TraceEntry;
|
|
|
295
334
|
*/
|
|
296
335
|
export declare function readTraceEntry(document: unknown): TraceEntry | undefined;
|
|
297
336
|
/** Every field of a target descriptor; two descriptors equal on all of them name the same target. */
|
|
298
|
-
export declare const DESCRIPTOR_FIELDS: readonly ['role', 'name', 'text', 'testId', 'placeholder', 'selector', 'inputPurpose', 'within'];
|
|
337
|
+
export declare const DESCRIPTOR_FIELDS: readonly ['role', 'name', 'text', 'testId', 'placeholder', 'selector', 'inputPurpose', 'within', 'value'];
|
|
299
338
|
/** A string rewrite; `undefined` means the text cannot be rewritten and the whole trace is unusable. */
|
|
300
339
|
export type TraceTextMap = (text: string) => string | undefined;
|
|
301
340
|
/**
|
|
@@ -308,4 +347,3 @@ export type TraceTextMap = (text: string) => string | undefined;
|
|
|
308
347
|
*/
|
|
309
348
|
export declare function mapTraceText(trace: ActionTrace, map: TraceTextMap): ActionTrace | undefined;
|
|
310
349
|
export {};
|
|
311
|
-
//# sourceMappingURL=trace.d.ts.map
|
package/dist/cache/trace.js
CHANGED
|
@@ -34,10 +34,11 @@ export function bound(text, maxChars) {
|
|
|
34
34
|
return text.length <= maxChars ? text : `${text.slice(0, maxChars - 1)}…`;
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
|
-
* Cap on recorded
|
|
38
|
-
* appeared on screen between the first observation and the
|
|
39
|
-
* a same-screen mutation rarely has more
|
|
40
|
-
* the whole screen keeps the first few
|
|
37
|
+
* Cap on recorded anchors, per side of the delta. Anchors are the step's own
|
|
38
|
+
* delta, what appeared on screen between the first observation and the
|
|
39
|
+
* passing one and what vanished, so a same-screen mutation rarely has more
|
|
40
|
+
* than a handful; a step that changes the whole screen keeps the first few,
|
|
41
|
+
* announcements first (`cache/anchors.ts`).
|
|
41
42
|
*/
|
|
42
43
|
export const MAX_TRACE_ANCHORS = 8;
|
|
43
44
|
/** Longest a replay waits for the recorded end state to return. */
|
|
@@ -66,6 +67,9 @@ function each(items, read) {
|
|
|
66
67
|
const SHA256_HEX = /^[a-f0-9]{64}$/u;
|
|
67
68
|
/** Most twins a positional recording distinguishes between; beyond it a list is data, not a control set. */
|
|
68
69
|
const MAX_TRACE_POSITION_OF = 1000;
|
|
70
|
+
/** The node states an anchor records: the ones a step sets on a control it leaves on screen. */
|
|
71
|
+
export const TRACE_ANCHOR_STATES = ['checked', 'expanded', 'pressed', 'selected'];
|
|
72
|
+
const isTraceAnchorState = oneOf(TRACE_ANCHOR_STATES);
|
|
69
73
|
/** The verbs that act on one node and carry no input: tap and its variants, hover, scroll into view. */
|
|
70
74
|
const NODE_ACTION_NAMES = ['tap', 'doubleTap', 'longPress', 'secondaryTap', 'hover', 'scrollTo'];
|
|
71
75
|
const isNodeActionName = oneOf(NODE_ACTION_NAMES);
|
|
@@ -131,18 +135,13 @@ function readActionTrace(document) {
|
|
|
131
135
|
const summary = readBoundedText(raw['summary'], MAX_TRACE_SUMMARY_CHARS);
|
|
132
136
|
if (summary === undefined)
|
|
133
137
|
return undefined;
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
if (endPath !== undefined) {
|
|
142
|
-
if (typeof endPath !== 'string' || endPath === '' || endPath.length > MAX_TRACE_DESCRIPTOR_CHARS) {
|
|
143
|
-
return undefined;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
138
|
+
// A location is a replay precondition, kept whole like a typed value.
|
|
139
|
+
const startPath = raw['startPath'] === undefined ? undefined : readInputText(raw['startPath']);
|
|
140
|
+
if (raw['startPath'] !== undefined && startPath === undefined)
|
|
141
|
+
return undefined;
|
|
142
|
+
const endPath = raw['endPath'] === undefined ? undefined : readInputText(raw['endPath']);
|
|
143
|
+
if (raw['endPath'] !== undefined && endPath === undefined)
|
|
144
|
+
return undefined;
|
|
146
145
|
const truncated = raw['truncated'];
|
|
147
146
|
if (truncated !== undefined && typeof truncated !== 'boolean')
|
|
148
147
|
return undefined;
|
|
@@ -151,15 +150,12 @@ function readActionTrace(document) {
|
|
|
151
150
|
(typeof endWaitMs !== 'number' || !Number.isInteger(endWaitMs) || endWaitMs < 0 || endWaitMs > MAX_TRACE_END_WAIT_MS)) {
|
|
152
151
|
return undefined;
|
|
153
152
|
}
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
if (endAnchors === undefined)
|
|
161
|
-
return undefined;
|
|
162
|
-
}
|
|
153
|
+
const endAnchors = readAnchors(raw['endAnchors']);
|
|
154
|
+
if (endAnchors === undefined)
|
|
155
|
+
return undefined;
|
|
156
|
+
const goneAnchors = readAnchors(raw['goneAnchors']);
|
|
157
|
+
if (goneAnchors === undefined)
|
|
158
|
+
return undefined;
|
|
163
159
|
const actionsRaw = raw['actions'];
|
|
164
160
|
if (!Array.isArray(actionsRaw) || actionsRaw.length === 0 || actionsRaw.length > MAX_TRACE_ACTIONS) {
|
|
165
161
|
return undefined;
|
|
@@ -177,11 +173,20 @@ function readActionTrace(document) {
|
|
|
177
173
|
summary,
|
|
178
174
|
...(startPath === undefined ? {} : { startPath }),
|
|
179
175
|
...(endPath === undefined ? {} : { endPath }),
|
|
180
|
-
...(endAnchors
|
|
176
|
+
...(endAnchors.length === 0 ? {} : { endAnchors }),
|
|
177
|
+
...(goneAnchors.length === 0 ? {} : { goneAnchors }),
|
|
181
178
|
...(endWaitMs === undefined ? {} : { endWaitMs }),
|
|
182
179
|
...(truncated === undefined ? {} : { truncated }),
|
|
183
180
|
};
|
|
184
181
|
}
|
|
182
|
+
/** One side of the recorded delta: absent reads as empty, anything malformed or over the cap as undefined. */
|
|
183
|
+
function readAnchors(document) {
|
|
184
|
+
if (document === undefined)
|
|
185
|
+
return [];
|
|
186
|
+
if (!Array.isArray(document) || document.length > MAX_TRACE_ANCHORS)
|
|
187
|
+
return undefined;
|
|
188
|
+
return each(document, readDescriptor);
|
|
189
|
+
}
|
|
185
190
|
function readRecordedAction(document) {
|
|
186
191
|
if (typeof document !== 'object' || document === null || Array.isArray(document)) {
|
|
187
192
|
return undefined;
|
|
@@ -370,13 +375,14 @@ export const DESCRIPTOR_FIELDS = [
|
|
|
370
375
|
'selector',
|
|
371
376
|
'inputPurpose',
|
|
372
377
|
'within',
|
|
378
|
+
'value',
|
|
373
379
|
];
|
|
374
380
|
/**
|
|
375
381
|
* The descriptor fields that carry text read off the screen, where a value
|
|
376
382
|
* a test supplied can reappear. `role`, `selector`, and `inputPurpose` are
|
|
377
383
|
* vocabulary, never screen text.
|
|
378
384
|
*/
|
|
379
|
-
const DESCRIPTOR_TEXT_FIELDS = ['name', 'text', 'testId', 'placeholder', 'within'];
|
|
385
|
+
const DESCRIPTOR_TEXT_FIELDS = ['name', 'text', 'testId', 'placeholder', 'within', 'value'];
|
|
380
386
|
function mapDescriptorText(descriptor, map) {
|
|
381
387
|
const changes = {};
|
|
382
388
|
for (const field of DESCRIPTOR_TEXT_FIELDS) {
|
|
@@ -486,6 +492,9 @@ export function mapTraceText(trace, map) {
|
|
|
486
492
|
const endAnchors = trace.endAnchors === undefined ? undefined : mapDescriptors(trace.endAnchors, map);
|
|
487
493
|
if (trace.endAnchors !== undefined && endAnchors === undefined)
|
|
488
494
|
return undefined;
|
|
495
|
+
const goneAnchors = trace.goneAnchors === undefined ? undefined : mapDescriptors(trace.goneAnchors, map);
|
|
496
|
+
if (trace.goneAnchors !== undefined && goneAnchors === undefined)
|
|
497
|
+
return undefined;
|
|
489
498
|
return {
|
|
490
499
|
...trace,
|
|
491
500
|
actions,
|
|
@@ -493,6 +502,7 @@ export function mapTraceText(trace, map) {
|
|
|
493
502
|
...(startPath === undefined ? {} : { startPath }),
|
|
494
503
|
...(endPath === undefined ? {} : { endPath }),
|
|
495
504
|
...(endAnchors === undefined ? {} : { endAnchors }),
|
|
505
|
+
...(goneAnchors === undefined ? {} : { goneAnchors }),
|
|
496
506
|
};
|
|
497
507
|
}
|
|
498
508
|
function mapDescriptors(descriptors, map) {
|
|
@@ -521,8 +531,23 @@ function readDescriptor(document) {
|
|
|
521
531
|
return undefined;
|
|
522
532
|
descriptor['position'] = position;
|
|
523
533
|
}
|
|
534
|
+
if (raw['states'] !== undefined) {
|
|
535
|
+
const states = readStates(raw['states']);
|
|
536
|
+
if (states === undefined)
|
|
537
|
+
return undefined;
|
|
538
|
+
descriptor['states'] = states;
|
|
539
|
+
}
|
|
524
540
|
return descriptor;
|
|
525
541
|
}
|
|
542
|
+
/** Known anchor states, each once, in sorted order, as `anchors.ts` writes them; an empty list is never written. */
|
|
543
|
+
function readStates(document) {
|
|
544
|
+
if (!Array.isArray(document) || document.length === 0)
|
|
545
|
+
return undefined;
|
|
546
|
+
const states = each(document, (state) => (isTraceAnchorState(state) ? state : undefined));
|
|
547
|
+
if (states === undefined)
|
|
548
|
+
return undefined;
|
|
549
|
+
return states.every((state, index) => index === 0 || states[index - 1] < state) ? states : undefined;
|
|
550
|
+
}
|
|
526
551
|
/** A well-formed position: two safe integers with the index inside the count. */
|
|
527
552
|
function readPosition(document) {
|
|
528
553
|
if (typeof document !== 'object' || document === null || Array.isArray(document))
|
|
@@ -549,7 +574,24 @@ function readProvenance(document) {
|
|
|
549
574
|
return undefined;
|
|
550
575
|
if (typeof instructionDigest !== 'string' || !SHA256_HEX.test(instructionDigest))
|
|
551
576
|
return undefined;
|
|
552
|
-
|
|
577
|
+
const paramsDigest = raw['paramsDigest'];
|
|
578
|
+
if (paramsDigest !== undefined && (typeof paramsDigest !== 'string' || !SHA256_HEX.test(paramsDigest)))
|
|
579
|
+
return undefined;
|
|
580
|
+
const callIndex = raw['callIndex'];
|
|
581
|
+
if (callIndex !== undefined && (typeof callIndex !== 'number' || !Number.isSafeInteger(callIndex) || callIndex < 0)) {
|
|
582
|
+
return undefined;
|
|
583
|
+
}
|
|
584
|
+
const agent = raw['agent'] === undefined ? undefined : readBoundedText(raw['agent'], MAX_TRACE_DESCRIPTOR_CHARS);
|
|
585
|
+
if (raw['agent'] !== undefined && agent === undefined)
|
|
586
|
+
return undefined;
|
|
587
|
+
return {
|
|
588
|
+
testId,
|
|
589
|
+
targetId,
|
|
590
|
+
instructionDigest,
|
|
591
|
+
...(paramsDigest === undefined ? {} : { paramsDigest }),
|
|
592
|
+
...(callIndex === undefined ? {} : { callIndex }),
|
|
593
|
+
...(agent === undefined ? {} : { agent }),
|
|
594
|
+
};
|
|
553
595
|
}
|
|
554
596
|
function readBoundedText(value, maxChars) {
|
|
555
597
|
if (typeof value !== 'string' || value.trim() === '' || value.length > maxChars) {
|
|
@@ -570,4 +612,3 @@ function readInputText(value) {
|
|
|
570
612
|
}
|
|
571
613
|
return value;
|
|
572
614
|
}
|
|
573
|
-
//# sourceMappingURL=trace.js.map
|
package/dist/cli/bin.d.ts
CHANGED
package/dist/cli/bin.js
CHANGED
package/dist/cli/cache.d.ts
CHANGED
package/dist/cli/cache.js
CHANGED
package/dist/cli/docs-url.d.ts
CHANGED
package/dist/cli/docs-url.js
CHANGED
package/dist/cli/feedback.d.ts
CHANGED
package/dist/cli/feedback.js
CHANGED
package/dist/cli/guide.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
/** `e2e guide`: prints the bundled agent skill for agents and people who do not have it installed. */
|
|
2
2
|
/** Prints the overview or one topic to stdout; an unknown topic exits 2. */
|
|
3
3
|
export declare function guide(topic: string | undefined): number;
|
|
4
|
-
//# sourceMappingURL=guide.d.ts.map
|
package/dist/cli/guide.js
CHANGED