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/identity.js
CHANGED
|
@@ -7,10 +7,13 @@
|
|
|
7
7
|
* contributes only its stable name and purpose, exactly as the executor sees
|
|
8
8
|
* it in the projected params.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
10
|
+
* The agent a step runs with is part of the key: its configured name, since
|
|
11
|
+
* two agents of one test (`agent: ['buyer', 'admin']`) act as different
|
|
12
|
+
* people, and a digest of the context it reads, since a test's
|
|
13
|
+
* `agentContext` decides what the step does. The context is digested after
|
|
14
|
+
* redaction, so a registered secret in it contributes its name only. The
|
|
15
|
+
* executor that produced a trace stays provenance on the entry: the agent's
|
|
16
|
+
* name already keeps two configured agents apart.
|
|
14
17
|
*/
|
|
15
18
|
import { canonicalDigest, sha256Hex } from '../internal/ids.js';
|
|
16
19
|
import { TRACE_SCHEMA_VERSION } from './trace.js';
|
|
@@ -99,6 +102,8 @@ export function buildTraceCacheKey(parts) {
|
|
|
99
102
|
instructionDigest: parts.signature.instructionDigest,
|
|
100
103
|
paramsDigest: parts.signature.paramsDigest,
|
|
101
104
|
appIdentity: parts.target.appIdentity,
|
|
105
|
+
agent: parts.agent.name,
|
|
106
|
+
agentContextDigest: sha256Hex(parts.agent.context ?? ''),
|
|
102
107
|
policyVersion: parts.policyVersion,
|
|
103
108
|
};
|
|
104
109
|
}
|
|
@@ -106,4 +111,3 @@ export function buildTraceCacheKey(parts) {
|
|
|
106
111
|
export function traceCacheKeyHash(key) {
|
|
107
112
|
return canonicalDigest(key);
|
|
108
113
|
}
|
|
109
|
-
//# sourceMappingURL=identity.js.map
|
package/dist/cache/recorder.d.ts
CHANGED
|
@@ -20,12 +20,15 @@ import { type ActionTrace, type DerivedReason, type TraceProvenance, type TraceT
|
|
|
20
20
|
export interface TraceRecorderOptions {
|
|
21
21
|
/** The run's secret redactor; applied to every recorded string. */
|
|
22
22
|
readonly redact: (text: string) => string;
|
|
23
|
+
/** `redact` for a field cut at its observed limit (`SecretLedger.redactCut`). */
|
|
24
|
+
readonly redactCut: (text: string) => string;
|
|
23
25
|
readonly maxActions?: number;
|
|
24
26
|
}
|
|
25
27
|
export declare class TraceRecorder {
|
|
26
28
|
private readonly actions;
|
|
27
29
|
private truncated;
|
|
28
30
|
private readonly redact;
|
|
31
|
+
private readonly redactCut;
|
|
29
32
|
private readonly maxActions;
|
|
30
33
|
constructor(options: TraceRecorderOptions);
|
|
31
34
|
private lastActionAt;
|
|
@@ -61,8 +64,10 @@ export declare class TraceRecorder {
|
|
|
61
64
|
readonly summary: string;
|
|
62
65
|
readonly startPath?: string;
|
|
63
66
|
readonly endPath?: string;
|
|
64
|
-
/** Already projected and capped by `
|
|
67
|
+
/** Already projected and capped by `describeDelta`; recorded as given. */
|
|
65
68
|
readonly endAnchors?: readonly TraceTargetDescriptor[];
|
|
69
|
+
/** The other side of the same delta: what was on screen at the start and gone at the end. */
|
|
70
|
+
readonly goneAnchors?: readonly TraceTargetDescriptor[];
|
|
66
71
|
/** How long the recorded run took to reach its end state, plus margin. */
|
|
67
72
|
readonly endWaitMs?: number;
|
|
68
73
|
}): ActionTrace | undefined;
|
|
@@ -84,4 +89,12 @@ export declare class TraceRecorder {
|
|
|
84
89
|
private verbatim;
|
|
85
90
|
private push;
|
|
86
91
|
}
|
|
87
|
-
|
|
92
|
+
/**
|
|
93
|
+
* Provenance as an entry stores it. Harness identity rather than screen
|
|
94
|
+
* content, so the redactor here is belt and braces: a title or agent name
|
|
95
|
+
* that happened to carry a registered secret is masked like any other
|
|
96
|
+
* recorded string, and provenance is not replay input, so masking it poisons
|
|
97
|
+
* nothing. A step compares its own provenance in this form to the entries
|
|
98
|
+
* the store holds.
|
|
99
|
+
*/
|
|
100
|
+
export declare function recordedProvenance(provenance: TraceProvenance, redact: (text: string) => string): TraceProvenance;
|
package/dist/cache/recorder.js
CHANGED
|
@@ -24,9 +24,11 @@ export class TraceRecorder {
|
|
|
24
24
|
actions = [];
|
|
25
25
|
truncated = false;
|
|
26
26
|
redact;
|
|
27
|
+
redactCut;
|
|
27
28
|
maxActions;
|
|
28
29
|
constructor(options) {
|
|
29
30
|
this.redact = options.redact;
|
|
31
|
+
this.redactCut = options.redactCut;
|
|
30
32
|
this.maxActions = Math.min(options.maxActions ?? MAX_TRACE_ACTIONS, MAX_TRACE_ACTIONS);
|
|
31
33
|
}
|
|
32
34
|
lastActionAt;
|
|
@@ -40,7 +42,7 @@ export class TraceRecorder {
|
|
|
40
42
|
}
|
|
41
43
|
/** Records one committed grammar action. */
|
|
42
44
|
record(action) {
|
|
43
|
-
this.push(this.toRecorded(action, describeAction(action, this.redact)));
|
|
45
|
+
this.push(this.toRecorded(action, describeAction(action, { redact: this.redact, redactCut: this.redactCut })));
|
|
44
46
|
this.lastActionAt = Date.now();
|
|
45
47
|
}
|
|
46
48
|
/**
|
|
@@ -69,9 +71,10 @@ export class TraceRecorder {
|
|
|
69
71
|
if (this.actions.length === 0)
|
|
70
72
|
return undefined;
|
|
71
73
|
const summary = bound(this.redact(conclusion.summary), MAX_TRACE_SUMMARY_CHARS);
|
|
72
|
-
//
|
|
73
|
-
// the redactor alters carried a secret (a token in a query string)
|
|
74
|
-
//
|
|
74
|
+
// Locations are replay preconditions, so they follow the input rule: a
|
|
75
|
+
// path the redactor alters carried a secret (a token in a query string),
|
|
76
|
+
// and one too long to keep whole cannot be compared, so either marks the
|
|
77
|
+
// trace non-replayable rather than storing it bent.
|
|
75
78
|
const startPath = this.anchorPath(conclusion.startPath);
|
|
76
79
|
const endPath = this.anchorPath(conclusion.endPath);
|
|
77
80
|
return {
|
|
@@ -80,21 +83,16 @@ export class TraceRecorder {
|
|
|
80
83
|
name: conclusion.executor.name,
|
|
81
84
|
...(conclusion.executor.version === undefined ? {} : { version: conclusion.executor.version }),
|
|
82
85
|
},
|
|
83
|
-
recordedFor:
|
|
84
|
-
// Harness identity rather than screen content, so the redactor here is
|
|
85
|
-
// belt and braces: a title that happened to carry a registered secret
|
|
86
|
-
// is masked like any other recorded string, and provenance is not
|
|
87
|
-
// replay input, so masking it poisons nothing.
|
|
88
|
-
testId: bound(this.redact(conclusion.recordedFor.testId), MAX_TRACE_DESCRIPTOR_CHARS),
|
|
89
|
-
targetId: bound(this.redact(conclusion.recordedFor.targetId), MAX_TRACE_DESCRIPTOR_CHARS),
|
|
90
|
-
instructionDigest: conclusion.recordedFor.instructionDigest,
|
|
91
|
-
},
|
|
86
|
+
recordedFor: recordedProvenance(conclusion.recordedFor, this.redact),
|
|
92
87
|
summary: summary.trim() === '' ? 'step passed' : summary,
|
|
93
88
|
...(startPath === undefined ? {} : { startPath }),
|
|
94
89
|
...(endPath === undefined ? {} : { endPath }),
|
|
95
90
|
...(conclusion.endAnchors === undefined || conclusion.endAnchors.length === 0
|
|
96
91
|
? {}
|
|
97
92
|
: { endAnchors: conclusion.endAnchors }),
|
|
93
|
+
...(conclusion.goneAnchors === undefined || conclusion.goneAnchors.length === 0
|
|
94
|
+
? {}
|
|
95
|
+
: { goneAnchors: conclusion.goneAnchors }),
|
|
98
96
|
...(conclusion.endWaitMs === undefined
|
|
99
97
|
? {}
|
|
100
98
|
: { endWaitMs: Math.min(MAX_TRACE_END_WAIT_MS, Math.max(0, Math.round(conclusion.endWaitMs))) }),
|
|
@@ -102,12 +100,7 @@ export class TraceRecorder {
|
|
|
102
100
|
};
|
|
103
101
|
}
|
|
104
102
|
anchorPath(value) {
|
|
105
|
-
|
|
106
|
-
return undefined;
|
|
107
|
-
const redacted = this.redact(value);
|
|
108
|
-
if (redacted !== value)
|
|
109
|
-
this.truncated = true;
|
|
110
|
-
return bound(redacted, MAX_TRACE_DESCRIPTOR_CHARS);
|
|
103
|
+
return value === undefined || value === '' ? undefined : this.verbatim(value);
|
|
111
104
|
}
|
|
112
105
|
/**
|
|
113
106
|
* Builds the stored variant for one action. The descriptor and the prose
|
|
@@ -117,13 +110,15 @@ export class TraceRecorder {
|
|
|
117
110
|
* kept whole.
|
|
118
111
|
*/
|
|
119
112
|
toRecorded(action, { target, summary, destination }) {
|
|
120
|
-
// A targeted commit whose node yields no
|
|
121
|
-
// re-
|
|
113
|
+
// A targeted commit whose node yields no descriptor a replay could
|
|
114
|
+
// re-find it by (none at all, or an unnamed twin with no named row to
|
|
115
|
+
// tell it apart) cannot replay; the trace stays honest by poisoning
|
|
116
|
+
// instead of guessing.
|
|
122
117
|
const require = (descriptor) => {
|
|
123
|
-
if (descriptor !== undefined)
|
|
118
|
+
if (descriptor !== undefined && isRelocatableDescriptor(descriptor))
|
|
124
119
|
return descriptor;
|
|
125
120
|
this.truncated = true;
|
|
126
|
-
return { role: 'unknown' };
|
|
121
|
+
return descriptor ?? { role: 'unknown' };
|
|
127
122
|
};
|
|
128
123
|
const requireTarget = () => require(target);
|
|
129
124
|
if (isNodeAction(action))
|
|
@@ -240,4 +235,21 @@ function sameTarget(a, b) {
|
|
|
240
235
|
a.position?.index === b.position?.index &&
|
|
241
236
|
a.position?.of === b.position?.of);
|
|
242
237
|
}
|
|
243
|
-
|
|
238
|
+
/**
|
|
239
|
+
* Provenance as an entry stores it. Harness identity rather than screen
|
|
240
|
+
* content, so the redactor here is belt and braces: a title or agent name
|
|
241
|
+
* that happened to carry a registered secret is masked like any other
|
|
242
|
+
* recorded string, and provenance is not replay input, so masking it poisons
|
|
243
|
+
* nothing. A step compares its own provenance in this form to the entries
|
|
244
|
+
* the store holds.
|
|
245
|
+
*/
|
|
246
|
+
export function recordedProvenance(provenance, redact) {
|
|
247
|
+
return {
|
|
248
|
+
testId: bound(redact(provenance.testId), MAX_TRACE_DESCRIPTOR_CHARS),
|
|
249
|
+
targetId: bound(redact(provenance.targetId), MAX_TRACE_DESCRIPTOR_CHARS),
|
|
250
|
+
instructionDigest: provenance.instructionDigest,
|
|
251
|
+
...(provenance.paramsDigest === undefined ? {} : { paramsDigest: provenance.paramsDigest }),
|
|
252
|
+
...(provenance.callIndex === undefined ? {} : { callIndex: provenance.callIndex }),
|
|
253
|
+
...(provenance.agent === undefined ? {} : { agent: bound(redact(provenance.agent), MAX_TRACE_DESCRIPTOR_CHARS) }),
|
|
254
|
+
};
|
|
255
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recordings stored under a key the runner no longer derives.
|
|
3
|
+
*
|
|
4
|
+
* A key names everything that can change replay (`identity.ts`), so a new
|
|
5
|
+
* replay policy, an engine minor, or an agent's context changing turns every
|
|
6
|
+
* entry recorded before into a lookup miss, the same `no-entry` as a step
|
|
7
|
+
* that was never recorded. `cache.strict` lets a never-recorded step run
|
|
8
|
+
* live, so without this it would let a whole committed cache go quietly
|
|
9
|
+
* unused. The entries say which step they were recorded for
|
|
10
|
+
* (`TraceProvenance`), and a step whose own key misses while the store holds
|
|
11
|
+
* a recording made for exactly that step is stale, not new.
|
|
12
|
+
*
|
|
13
|
+
* Only the file store can be listed. The listing is read once per worker
|
|
14
|
+
* and target, on the first strict miss that asks, and kept: every entry
|
|
15
|
+
* written since has a key the run derives, so it is a hit rather than a
|
|
16
|
+
* candidate here.
|
|
17
|
+
*/
|
|
18
|
+
import type { ResolvedCacheConfig } from '../config/resolve.ts';
|
|
19
|
+
import { FileCacheStore } from './store.ts';
|
|
20
|
+
import type { TraceProvenance } from './trace.ts';
|
|
21
|
+
export declare class StoredRecordings {
|
|
22
|
+
private readonly store;
|
|
23
|
+
/** Key hashes by `stepKey` of the step each entry was recorded for. */
|
|
24
|
+
private listing;
|
|
25
|
+
constructor(store: FileCacheStore);
|
|
26
|
+
/**
|
|
27
|
+
* The key hash of an entry recorded for `step` under a key other than
|
|
28
|
+
* `keyHash`, or undefined when there is none or the store cannot be
|
|
29
|
+
* listed. `step` is in the form an entry stores it (`recordedProvenance`).
|
|
30
|
+
* Only an entry that records the whole step counts: one written before the
|
|
31
|
+
* params, occurrence, and agent were recorded could belong to another call
|
|
32
|
+
* of the same instruction, and a read-write run that replays it completes
|
|
33
|
+
* it (`flushStagedTraces`). A truncated entry never replays under any key,
|
|
34
|
+
* so it is never the reason a step is stale.
|
|
35
|
+
*/
|
|
36
|
+
underAnotherKey(keyHash: string, step: TraceProvenance): Promise<string | undefined>;
|
|
37
|
+
/** Every replayable entry that records its whole step, by `stepKey`. */
|
|
38
|
+
private list;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The listing `cache.strict` checks a run's misses against, for the file
|
|
42
|
+
* store only. Undefined when strict is off, the cache is off, or a custom
|
|
43
|
+
* `cache.store` replaced the file store, which `CacheStore` gives no way to
|
|
44
|
+
* list.
|
|
45
|
+
*/
|
|
46
|
+
export declare function storedRecordingsFor(cache: ResolvedCacheConfig): StoredRecordings | undefined;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recordings stored under a key the runner no longer derives.
|
|
3
|
+
*
|
|
4
|
+
* A key names everything that can change replay (`identity.ts`), so a new
|
|
5
|
+
* replay policy, an engine minor, or an agent's context changing turns every
|
|
6
|
+
* entry recorded before into a lookup miss, the same `no-entry` as a step
|
|
7
|
+
* that was never recorded. `cache.strict` lets a never-recorded step run
|
|
8
|
+
* live, so without this it would let a whole committed cache go quietly
|
|
9
|
+
* unused. The entries say which step they were recorded for
|
|
10
|
+
* (`TraceProvenance`), and a step whose own key misses while the store holds
|
|
11
|
+
* a recording made for exactly that step is stale, not new.
|
|
12
|
+
*
|
|
13
|
+
* Only the file store can be listed. The listing is read once per worker
|
|
14
|
+
* and target, on the first strict miss that asks, and kept: every entry
|
|
15
|
+
* written since has a key the run derives, so it is a hit rather than a
|
|
16
|
+
* candidate here.
|
|
17
|
+
*/
|
|
18
|
+
import { FileCacheStore, MAX_CACHE_WIRE_BYTES } from './store.js';
|
|
19
|
+
export class StoredRecordings {
|
|
20
|
+
store;
|
|
21
|
+
/** Key hashes by `stepKey` of the step each entry was recorded for. */
|
|
22
|
+
listing;
|
|
23
|
+
constructor(store) {
|
|
24
|
+
this.store = store;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* The key hash of an entry recorded for `step` under a key other than
|
|
28
|
+
* `keyHash`, or undefined when there is none or the store cannot be
|
|
29
|
+
* listed. `step` is in the form an entry stores it (`recordedProvenance`).
|
|
30
|
+
* Only an entry that records the whole step counts: one written before the
|
|
31
|
+
* params, occurrence, and agent were recorded could belong to another call
|
|
32
|
+
* of the same instruction, and a read-write run that replays it completes
|
|
33
|
+
* it (`flushStagedTraces`). A truncated entry never replays under any key,
|
|
34
|
+
* so it is never the reason a step is stale.
|
|
35
|
+
*/
|
|
36
|
+
async underAnotherKey(keyHash, step) {
|
|
37
|
+
const key = stepKey(step);
|
|
38
|
+
if (key === undefined)
|
|
39
|
+
return undefined;
|
|
40
|
+
let listing;
|
|
41
|
+
try {
|
|
42
|
+
this.listing ??= this.list();
|
|
43
|
+
listing = await this.listing;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
for (const candidate of listing.get(key) ?? []) {
|
|
49
|
+
if (candidate === keyHash)
|
|
50
|
+
continue;
|
|
51
|
+
// Listed once: an entry evicted since is no evidence.
|
|
52
|
+
const read = await this.store.read(candidate).catch(() => undefined);
|
|
53
|
+
if (read?.status === 'hit')
|
|
54
|
+
return candidate;
|
|
55
|
+
}
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
/** Every replayable entry that records its whole step, by `stepKey`. */
|
|
59
|
+
async list() {
|
|
60
|
+
const steps = new Map();
|
|
61
|
+
for (const keyHash of await this.store.keyHashes()) {
|
|
62
|
+
const read = await this.store.read(keyHash);
|
|
63
|
+
if (read.status !== 'hit' || read.entry.payload.truncated === true)
|
|
64
|
+
continue;
|
|
65
|
+
const key = read.entry.payload.recordedFor === undefined ? undefined : stepKey(read.entry.payload.recordedFor);
|
|
66
|
+
if (key !== undefined)
|
|
67
|
+
steps.set(key, [...(steps.get(key) ?? []), keyHash]);
|
|
68
|
+
}
|
|
69
|
+
return steps;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The listing `cache.strict` checks a run's misses against, for the file
|
|
74
|
+
* store only. Undefined when strict is off, the cache is off, or a custom
|
|
75
|
+
* `cache.store` replaced the file store, which `CacheStore` gives no way to
|
|
76
|
+
* list.
|
|
77
|
+
*/
|
|
78
|
+
export function storedRecordingsFor(cache) {
|
|
79
|
+
if (cache.strict === false || cache.mode === 'off' || cache.store !== undefined)
|
|
80
|
+
return undefined;
|
|
81
|
+
return new StoredRecordings(new FileCacheStore({ directory: cache.dir, maxBytes: MAX_CACHE_WIRE_BYTES, writable: false }));
|
|
82
|
+
}
|
|
83
|
+
/** The whole step as one map key, or undefined when the provenance does not record all of it. */
|
|
84
|
+
function stepKey(step) {
|
|
85
|
+
const { testId, targetId, instructionDigest, paramsDigest, callIndex, agent } = step;
|
|
86
|
+
if (paramsDigest === undefined || callIndex === undefined || agent === undefined)
|
|
87
|
+
return undefined;
|
|
88
|
+
return JSON.stringify([testId, targetId, instructionDigest, paramsDigest, callIndex, agent]);
|
|
89
|
+
}
|
package/dist/cache/relocate.d.ts
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* means — is exported so end anchors (`anchors.ts`) are checked by the same
|
|
15
15
|
* rules and can never drift from relocation.
|
|
16
16
|
*/
|
|
17
|
-
import type {
|
|
17
|
+
import type { RedactedNode } from '../agent/observation.ts';
|
|
18
18
|
import type { TracePosition, TraceTargetDescriptor } from './trace.ts';
|
|
19
19
|
/**
|
|
20
20
|
* Version of the replay/relocation policy, part of every cache key. Bumping
|
|
@@ -22,7 +22,7 @@ import type { TracePosition, TraceTargetDescriptor } from './trace.ts';
|
|
|
22
22
|
* change, because an entry recorded under different rules could relocate to a
|
|
23
23
|
* different node.
|
|
24
24
|
*/
|
|
25
|
-
export declare const REPLAY_POLICY_VERSION = "conservative/
|
|
25
|
+
export declare const REPLAY_POLICY_VERSION = "conservative/6";
|
|
26
26
|
/**
|
|
27
27
|
* The share of the viewport a scrolled node must have covered when it was
|
|
28
28
|
* addressed (`ScrollAction.spans`) to scroll as the viewport does once it
|
|
@@ -45,14 +45,16 @@ export type RelocationResult = {
|
|
|
45
45
|
readonly candidates: readonly string[];
|
|
46
46
|
};
|
|
47
47
|
export type DescriptorField = keyof TraceTargetDescriptor;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
48
|
+
/**
|
|
49
|
+
* Whether a descriptor can identify a node at all. Role or selector alone
|
|
50
|
+
* cannot: a wrong match acts on the wrong control, so such a descriptor is
|
|
51
|
+
* not relocatable and, as an anchor, would prove nothing. An anonymous one
|
|
52
|
+
* is relocatable by its recorded place only when that place means something
|
|
53
|
+
* on the next screen: it was the one unnamed control of its role, or it sits
|
|
54
|
+
* in a named container (`within`) that tells it from its twins. A place
|
|
55
|
+
* counted among twins with no container is an order, and rows that reorder
|
|
56
|
+
* would hand the action to the wrong one, so such a target hands off.
|
|
57
|
+
*/
|
|
56
58
|
export declare function isRelocatableDescriptor(descriptor: TraceTargetDescriptor): boolean;
|
|
57
59
|
/**
|
|
58
60
|
* The tiers a recorded descriptor is matched in, strictest first:
|
|
@@ -70,8 +72,6 @@ export declare function isRelocatableDescriptor(descriptor: TraceTargetDescripto
|
|
|
70
72
|
export declare function descriptorTiers(descriptor: TraceTargetDescriptor): readonly TraceTargetDescriptor[];
|
|
71
73
|
/** Every listed field the recording captured must be present and equal on the candidate. */
|
|
72
74
|
export declare function fieldsEqual(recorded: TraceTargetDescriptor, candidate: TraceTargetDescriptor, fields: readonly DescriptorField[]): boolean;
|
|
73
|
-
/** Projects every node of an observation the way the recorder described its targets. */
|
|
74
|
-
export declare function describeNodes(nodes: ReadonlyMap<string, SemanticNode>, options: DescriptorMatchOptions): readonly DescribedNode[];
|
|
75
75
|
/**
|
|
76
76
|
* Relocates one descriptor against the nodes of a fresh observation, tier by
|
|
77
77
|
* tier (`descriptorTiers`), each exactly-one-or-diverge. Ambiguity at any
|
|
@@ -81,12 +81,11 @@ export declare function describeNodes(nodes: ReadonlyMap<string, SemanticNode>,
|
|
|
81
81
|
* same twins and noted which one it acted on, so the same count of twins
|
|
82
82
|
* resolves to the same one; any other count diverges as before.
|
|
83
83
|
*/
|
|
84
|
-
export declare function relocateDescriptor(descriptor: TraceTargetDescriptor, nodes: ReadonlyMap<string,
|
|
84
|
+
export declare function relocateDescriptor(descriptor: TraceTargetDescriptor, nodes: ReadonlyMap<string, RedactedNode>): RelocationResult;
|
|
85
85
|
/**
|
|
86
86
|
* Where `node` stands among the controls its own description matches on the
|
|
87
87
|
* screen it was acted on, or undefined when the description already names it
|
|
88
88
|
* alone. Recorded with the target so a replay can tell one "Set up" button per
|
|
89
89
|
* card apart without an app change; a distinct label makes it unnecessary.
|
|
90
90
|
*/
|
|
91
|
-
export declare function describePosition(node:
|
|
92
|
-
//# sourceMappingURL=relocate.d.ts.map
|
|
91
|
+
export declare function describePosition(node: RedactedNode, within: string | undefined, nodes: ReadonlyMap<string, RedactedNode>): TracePosition | undefined;
|
package/dist/cache/relocate.js
CHANGED
|
@@ -21,7 +21,7 @@ import { containerKey, describeTarget, parentsOf } from '../agent/actions.js';
|
|
|
21
21
|
* change, because an entry recorded under different rules could relocate to a
|
|
22
22
|
* different node.
|
|
23
23
|
*/
|
|
24
|
-
export const REPLAY_POLICY_VERSION = 'conservative/
|
|
24
|
+
export const REPLAY_POLICY_VERSION = 'conservative/6';
|
|
25
25
|
/**
|
|
26
26
|
* The share of the viewport a scrolled node must have covered when it was
|
|
27
27
|
* addressed (`ScrollAction.spans`) to scroll as the viewport does once it
|
|
@@ -33,18 +33,13 @@ export const MAIN_LIST_SHARE = 0.5;
|
|
|
33
33
|
const IDENTITY_FIELDS = ['role', 'name', 'testId', 'placeholder', 'inputPurpose'];
|
|
34
34
|
/** Text is identity too when neither a test id nor a name was recorded. */
|
|
35
35
|
const IDENTITY_FIELDS_WITH_TEXT = [...IDENTITY_FIELDS, 'text'];
|
|
36
|
-
/**
|
|
37
|
-
* Whether a descriptor can identify a node at all. Role or selector alone
|
|
38
|
-
* cannot: a wrong match acts on the wrong control, so such a descriptor is
|
|
39
|
-
* not relocatable and, as an anchor, would prove nothing.
|
|
40
|
-
*/
|
|
41
36
|
/**
|
|
42
37
|
* A descriptor with nothing to identify the control by: no test id, name,
|
|
43
|
-
* text, or placeholder, only a role.
|
|
44
|
-
* these. Such a descriptor relocates by its place
|
|
45
|
-
* controls of its kind,
|
|
46
|
-
*
|
|
47
|
-
*
|
|
38
|
+
* text, or placeholder, only a role. An icon button and a form built
|
|
39
|
+
* without labels are made of these. Such a descriptor relocates by its place
|
|
40
|
+
* among the unnamed controls of its kind, and it is matched strictly
|
|
41
|
+
* (`fieldsIdentical`): an unnamed textbox must never stand in for a named
|
|
42
|
+
* one.
|
|
48
43
|
*/
|
|
49
44
|
function isAnonymous(descriptor) {
|
|
50
45
|
return (descriptor.testId === undefined &&
|
|
@@ -52,8 +47,21 @@ function isAnonymous(descriptor) {
|
|
|
52
47
|
descriptor.text === undefined &&
|
|
53
48
|
descriptor.placeholder === undefined);
|
|
54
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Whether a descriptor can identify a node at all. Role or selector alone
|
|
52
|
+
* cannot: a wrong match acts on the wrong control, so such a descriptor is
|
|
53
|
+
* not relocatable and, as an anchor, would prove nothing. An anonymous one
|
|
54
|
+
* is relocatable by its recorded place only when that place means something
|
|
55
|
+
* on the next screen: it was the one unnamed control of its role, or it sits
|
|
56
|
+
* in a named container (`within`) that tells it from its twins. A place
|
|
57
|
+
* counted among twins with no container is an order, and rows that reorder
|
|
58
|
+
* would hand the action to the wrong one, so such a target hands off.
|
|
59
|
+
*/
|
|
55
60
|
export function isRelocatableDescriptor(descriptor) {
|
|
56
|
-
|
|
61
|
+
if (!isAnonymous(descriptor))
|
|
62
|
+
return true;
|
|
63
|
+
const { position } = descriptor;
|
|
64
|
+
return descriptor.role !== undefined && position !== undefined && (position.of === 1 || descriptor.within !== undefined);
|
|
57
65
|
}
|
|
58
66
|
/** The semantic tier of a descriptor: every identity field but the test id. */
|
|
59
67
|
function withoutTestId(descriptor) {
|
|
@@ -102,17 +110,17 @@ function fieldsIdentical(recorded, candidate, fields) {
|
|
|
102
110
|
*/
|
|
103
111
|
const projections = new WeakMap();
|
|
104
112
|
/** Projects every node of an observation the way the recorder described its targets. */
|
|
105
|
-
|
|
113
|
+
function describeNodes(nodes) {
|
|
106
114
|
const cached = projections.get(nodes);
|
|
107
|
-
if (cached !== undefined
|
|
108
|
-
return cached
|
|
115
|
+
if (cached !== undefined)
|
|
116
|
+
return cached;
|
|
109
117
|
const described = [];
|
|
110
118
|
for (const [id, node] of nodes) {
|
|
111
|
-
const descriptor = describeTarget(node
|
|
119
|
+
const descriptor = describeTarget(node);
|
|
112
120
|
if (descriptor !== undefined)
|
|
113
121
|
described.push({ id, descriptor });
|
|
114
122
|
}
|
|
115
|
-
projections.set(nodes,
|
|
123
|
+
projections.set(nodes, described);
|
|
116
124
|
return described;
|
|
117
125
|
}
|
|
118
126
|
/**
|
|
@@ -124,8 +132,8 @@ export function describeNodes(nodes, options) {
|
|
|
124
132
|
* same twins and noted which one it acted on, so the same count of twins
|
|
125
133
|
* resolves to the same one; any other count diverges as before.
|
|
126
134
|
*/
|
|
127
|
-
export function relocateDescriptor(descriptor, nodes
|
|
128
|
-
const matches = matchingIds(descriptor, nodes
|
|
135
|
+
export function relocateDescriptor(descriptor, nodes) {
|
|
136
|
+
const matches = matchingIds(descriptor, nodes);
|
|
129
137
|
if (matches.length === 0)
|
|
130
138
|
return { kind: 'failed', failure: 'target-not-found' };
|
|
131
139
|
const { position } = descriptor;
|
|
@@ -146,8 +154,8 @@ export function relocateDescriptor(descriptor, nodes, options) {
|
|
|
146
154
|
* matches. The recorder uses the same projection to notice, before it writes a
|
|
147
155
|
* target, that the description alone would not tell the target from its twins.
|
|
148
156
|
*/
|
|
149
|
-
function matchingIds(descriptor, nodes
|
|
150
|
-
const candidates = describeNodes(nodes
|
|
157
|
+
function matchingIds(descriptor, nodes) {
|
|
158
|
+
const candidates = describeNodes(nodes);
|
|
151
159
|
// A recorded container key must hold: the same "Delete" in another row is
|
|
152
160
|
// a different control. Checked against the tree the candidates came from,
|
|
153
161
|
// never guessed.
|
|
@@ -155,7 +163,7 @@ function matchingIds(descriptor, nodes, options) {
|
|
|
155
163
|
? candidates
|
|
156
164
|
: (() => {
|
|
157
165
|
const parents = parentsOf(nodes);
|
|
158
|
-
return candidates.filter((candidate) => containerKey(candidate.id, nodes, parents
|
|
166
|
+
return candidates.filter((candidate) => containerKey(candidate.id, nodes, parents) === descriptor.within);
|
|
159
167
|
})();
|
|
160
168
|
for (const tier of descriptorTiers(descriptor)) {
|
|
161
169
|
const matches = tierMatches(tier, keyed);
|
|
@@ -183,8 +191,8 @@ const MAX_POSITIONED_TWINS = 1000;
|
|
|
183
191
|
* alone. Recorded with the target so a replay can tell one "Set up" button per
|
|
184
192
|
* card apart without an app change; a distinct label makes it unnecessary.
|
|
185
193
|
*/
|
|
186
|
-
export function describePosition(node, within, nodes
|
|
187
|
-
const described = describeTarget(node
|
|
194
|
+
export function describePosition(node, within, nodes) {
|
|
195
|
+
const described = describeTarget(node);
|
|
188
196
|
if (described === undefined || (described.role === undefined && isAnonymous(described)))
|
|
189
197
|
return undefined;
|
|
190
198
|
// An anonymous target has no identity to match alone; its position is what
|
|
@@ -192,10 +200,9 @@ export function describePosition(node, within, nodes, options) {
|
|
|
192
200
|
// it is the only one, and described with a placeholder position to do so.
|
|
193
201
|
const anonymous = isAnonymous(described);
|
|
194
202
|
const probe = { ...described, ...(within === undefined ? {} : { within }), ...(anonymous ? { position: { index: 0, of: 1 } } : {}) };
|
|
195
|
-
const ids = matchingIds(probe, nodes
|
|
203
|
+
const ids = matchingIds(probe, nodes);
|
|
196
204
|
if (ids.length < (anonymous ? 1 : 2) || ids.length > MAX_POSITIONED_TWINS)
|
|
197
205
|
return undefined;
|
|
198
206
|
const index = ids.indexOf(node.ref.id);
|
|
199
207
|
return index === -1 ? undefined : { index, of: ids.length };
|
|
200
208
|
}
|
|
201
|
-
//# sourceMappingURL=relocate.js.map
|
package/dist/cache/route.d.ts
CHANGED
|
@@ -4,44 +4,42 @@
|
|
|
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
|
-
export type Route = {
|
|
30
|
-
readonly kind: 'url';
|
|
31
|
-
readonly segments: readonly string[];
|
|
32
|
-
} | {
|
|
33
|
-
readonly kind: 'opaque';
|
|
34
|
-
readonly location: string;
|
|
35
|
-
};
|
|
36
|
-
export type RouteVerdict = 'same' | 'different' | 'undecided';
|
|
37
|
-
/** The route of a location. */
|
|
38
|
-
export declare function routeOf(location: string): Route;
|
|
39
|
-
/** A route as one line, for tests and diagnostics: `/companies/:id`, or the opaque location. */
|
|
40
|
-
export declare function routeKey(route: Route): string;
|
|
41
37
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
38
|
+
* A location as the cache compares it: a URL on the app's own origin as its
|
|
39
|
+
* path, query, and fragment, so a recording follows the app to another
|
|
40
|
+
* deployment of it; anything else (another origin, a device screen title)
|
|
41
|
+
* as it is.
|
|
45
42
|
*/
|
|
46
|
-
export declare function
|
|
47
|
-
|
|
43
|
+
export declare function appLocation(location: string, appOrigin: string | undefined): string;
|
|
44
|
+
/** Whether two locations name the same screen: one origin, and segments and query that read alike. */
|
|
45
|
+
export declare function sameRoute(recorded: string, live: string): boolean;
|