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/internal/urls.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** URL normalization and origin policy helpers. */
|
|
2
2
|
import { ConfigurationError } from './errors.js';
|
|
3
3
|
import { testPattern } from './regexp.js';
|
|
4
|
-
import { toTextPattern } from './text.js';
|
|
4
|
+
import { toTextPattern, withIgnoreCase } from './text.js';
|
|
5
5
|
/**
|
|
6
6
|
* Parses and normalizes the app base URL. Rejects userinfo, query, and
|
|
7
7
|
* fragment. WHATWG parsing handles IDNA ASCII hosts, dot segments, and
|
|
@@ -94,12 +94,16 @@ export function isLoopbackHost(hostname) {
|
|
|
94
94
|
export function isImplicitTestHost(hostname) {
|
|
95
95
|
return isLoopbackHost(hostname) || hostname.endsWith('.test');
|
|
96
96
|
}
|
|
97
|
-
const
|
|
97
|
+
const NAVIGABLE_PROTOCOLS = new Set(['http:', 'https:']);
|
|
98
|
+
/** The one non-http(s) page navigation opens: empty, with no local or inline content. */
|
|
99
|
+
const BLANK_PAGE = 'about:blank';
|
|
98
100
|
/**
|
|
99
|
-
* Resolves a navigation URL against the base and refuses
|
|
100
|
-
*
|
|
101
|
-
* a click can reach one just as well, so a
|
|
102
|
-
* would guard nothing.
|
|
101
|
+
* Resolves a navigation URL against the base and refuses every scheme but
|
|
102
|
+
* http(s), except the exact `about:blank`. Returns the absolute URL string.
|
|
103
|
+
* Any http(s) origin is admitted: a click can reach one just as well, so a
|
|
104
|
+
* gate on typed navigation alone would guard nothing. The rule is an
|
|
105
|
+
* allowlist because a browser wraps and nests schemes (`view-source:file:`,
|
|
106
|
+
* `blob:`, `filesystem:`), and a list of forbidden ones misses the wrapper.
|
|
103
107
|
*/
|
|
104
108
|
export function resolveNavigationUrl(input, base) {
|
|
105
109
|
let url;
|
|
@@ -114,7 +118,7 @@ export function resolveNavigationUrl(input, base) {
|
|
|
114
118
|
}
|
|
115
119
|
throw new ConfigurationError('POLICY_DENIED', `malformed URL: ${input}`);
|
|
116
120
|
}
|
|
117
|
-
if (
|
|
121
|
+
if (!NAVIGABLE_PROTOCOLS.has(url.protocol) && url.href !== BLANK_PAGE) {
|
|
118
122
|
throw new ConfigurationError('POLICY_DENIED', `forbidden URL scheme: ${url.protocol}`);
|
|
119
123
|
}
|
|
120
124
|
return { url: url.href };
|
|
@@ -160,9 +164,11 @@ export function sameSite(url, site) {
|
|
|
160
164
|
* Relative expected strings resolve against the base URL; string comparison is
|
|
161
165
|
* exact after WHATWG serialization; regexps test the complete serialized URL.
|
|
162
166
|
* Anything else is `INVALID_ARGUMENT`, the `toTextPattern` rule.
|
|
167
|
+
* `ignoreCase` is Playwright's: `true` compares a string case-insensitively
|
|
168
|
+
* and adds the `i` flag to a regexp, `false` removes it.
|
|
163
169
|
*/
|
|
164
|
-
export function urlMatches(current, expected, baseHref) {
|
|
165
|
-
const pattern = toTextPattern(expected);
|
|
170
|
+
export function urlMatches(current, expected, baseHref, ignoreCase) {
|
|
171
|
+
const pattern = withIgnoreCase(toTextPattern(expected), ignoreCase);
|
|
166
172
|
if (pattern.kind === 'regexp') {
|
|
167
173
|
return testPattern(pattern.source, pattern.flags, serializeForComparison(current));
|
|
168
174
|
}
|
|
@@ -173,7 +179,10 @@ export function urlMatches(current, expected, baseHref) {
|
|
|
173
179
|
catch {
|
|
174
180
|
return false;
|
|
175
181
|
}
|
|
176
|
-
|
|
182
|
+
const actual = serializeForComparison(current);
|
|
183
|
+
return ignoreCase === true
|
|
184
|
+
? actual.toLowerCase() === expectedUrl.href.toLowerCase()
|
|
185
|
+
: actual === expectedUrl.href;
|
|
177
186
|
}
|
|
178
187
|
function serializeForComparison(url) {
|
|
179
188
|
try {
|
|
@@ -183,4 +192,3 @@ function serializeForComparison(url) {
|
|
|
183
192
|
return url;
|
|
184
193
|
}
|
|
185
194
|
}
|
|
186
|
-
//# sourceMappingURL=urls.js.map
|
package/dist/internal/vcs.d.ts
CHANGED
package/dist/internal/vcs.js
CHANGED
package/dist/internal/zip.d.ts
CHANGED
package/dist/internal/zip.js
CHANGED
package/dist/locator/engine.d.ts
CHANGED
|
@@ -18,6 +18,11 @@ export declare function attributeOf(node: SemanticNode, name: string): string |
|
|
|
18
18
|
* empty or absent.
|
|
19
19
|
*/
|
|
20
20
|
export declare function denySecureRead(nodes: readonly SemanticNode[], label: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* What a frame the engine reports missing means to a resolve: `wait` treats
|
|
23
|
+
* it like a node that is not there yet, `empty` answers zero matches.
|
|
24
|
+
*/
|
|
25
|
+
type MissingFrame = 'wait' | 'empty';
|
|
21
26
|
interface LocatorEngineOptions {
|
|
22
27
|
readonly session: TargetSession;
|
|
23
28
|
/** The running phase's signal and deadline, read per operation. */
|
|
@@ -95,8 +100,13 @@ export declare class LocatorEngine {
|
|
|
95
100
|
/** Reads every current match at once, for `allTextContents`: a missing frame reads as no matches. */
|
|
96
101
|
readAllNow(expression: LocatorExpression): Promise<readonly SemanticNode[]>;
|
|
97
102
|
private readEvery;
|
|
98
|
-
/**
|
|
99
|
-
|
|
103
|
+
/**
|
|
104
|
+
* Reads one node for polling surfaces; returns null while zero matches.
|
|
105
|
+
* A poll that waits for absence passes `missingFrame: 'empty'`: nothing
|
|
106
|
+
* under a frame that is not in the document is attached, so the sample is
|
|
107
|
+
* zero matches rather than a wait for the frame.
|
|
108
|
+
*/
|
|
109
|
+
tryRead(expression: LocatorExpression, deadline: Deadline, missingFrame?: MissingFrame): Promise<{
|
|
100
110
|
node: SemanticNode | null;
|
|
101
111
|
count: number;
|
|
102
112
|
}>;
|
|
@@ -150,4 +160,3 @@ export declare function locatorDetails(expression: LocatorExpression, waitedMs?:
|
|
|
150
160
|
/** Translates an engine error into the runner-owned public taxonomy. */
|
|
151
161
|
export declare function translateLocatorError(cause: unknown, expression?: LocatorExpression): E2EError;
|
|
152
162
|
export {};
|
|
153
|
-
//# sourceMappingURL=engine.d.ts.map
|
package/dist/locator/engine.js
CHANGED
|
@@ -213,9 +213,14 @@ export class LocatorEngine {
|
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
215
|
}
|
|
216
|
-
/**
|
|
217
|
-
|
|
218
|
-
|
|
216
|
+
/**
|
|
217
|
+
* Reads one node for polling surfaces; returns null while zero matches.
|
|
218
|
+
* A poll that waits for absence passes `missingFrame: 'empty'`: nothing
|
|
219
|
+
* under a frame that is not in the document is attached, so the sample is
|
|
220
|
+
* zero matches rather than a wait for the frame.
|
|
221
|
+
*/
|
|
222
|
+
async tryRead(expression, deadline, missingFrame = 'wait') {
|
|
223
|
+
return this.readOne(expression, deadline, missingFrame);
|
|
219
224
|
}
|
|
220
225
|
/**
|
|
221
226
|
* Reads the one current match at once, for `isVisible` and `isHidden`:
|
|
@@ -378,4 +383,3 @@ export function translateLocatorError(cause, expression) {
|
|
|
378
383
|
const suffix = expression === undefined ? '' : `: ${describeExpression(expression)}`;
|
|
379
384
|
return translateEngineError(cause, suffix);
|
|
380
385
|
}
|
|
381
|
-
//# sourceMappingURL=engine.js.map
|
|
@@ -28,4 +28,3 @@ export declare function indexExpression(source: LocatorExpression, index: number
|
|
|
28
28
|
export declare function expressionHints(expression: LocatorExpression): Pick<ErrorDetails, 'role' | 'name' | 'testId'>;
|
|
29
29
|
/** Renders an expression for diagnostics. */
|
|
30
30
|
export declare function describeExpression(expression: LocatorExpression): string;
|
|
31
|
-
//# sourceMappingURL=expression.d.ts.map
|
package/dist/locator/screen.d.ts
CHANGED
|
@@ -32,4 +32,3 @@ export declare function createScreen(context: ScreenContext): Screen;
|
|
|
32
32
|
export declare function createScopedScreen(context: ScreenContext, wrap: (expression: LocatorExpression) => LocatorExpression): Screen;
|
|
33
33
|
/** Creates a public locator from a raw expression (a contributed fixture's platform selector). */
|
|
34
34
|
export declare function createLocator(context: ScreenContext, expression: LocatorExpression): Locator;
|
|
35
|
-
//# sourceMappingURL=screen.d.ts.map
|
package/dist/locator/screen.js
CHANGED
|
@@ -55,6 +55,27 @@ const TEXT_OPTION_KEYS = ['exact', 'visible'];
|
|
|
55
55
|
const ROLE_FILTER_KEYS = [...TEXT_OPTION_KEYS, 'checked', 'disabled', 'selected', 'expanded', 'pressed', 'level'];
|
|
56
56
|
/** The keys of `RoleOptions`: the accessible name and the filters. */
|
|
57
57
|
const ROLE_OPTION_KEYS = ['name', ...ROLE_FILTER_KEYS];
|
|
58
|
+
/** The states `locator.waitFor` waits for, Playwright's four. */
|
|
59
|
+
const WAIT_FOR_STATES = ['attached', 'detached', 'visible', 'hidden'];
|
|
60
|
+
/** The states absence satisfies: a frame missing from the document reads as zero matches for them. */
|
|
61
|
+
const ABSENCE_STATES = new Set(['detached', 'hidden']);
|
|
62
|
+
/**
|
|
63
|
+
* Whether the one match, or its absence, is in `state`: `attached` is any
|
|
64
|
+
* match, `detached` none, `visible` a match that is not hidden, and `hidden`
|
|
65
|
+
* a hidden match or none.
|
|
66
|
+
*/
|
|
67
|
+
function inWaitForState(node, state) {
|
|
68
|
+
switch (state) {
|
|
69
|
+
case 'attached':
|
|
70
|
+
return node !== null;
|
|
71
|
+
case 'detached':
|
|
72
|
+
return node === null;
|
|
73
|
+
case 'visible':
|
|
74
|
+
return isNodeVisible(node);
|
|
75
|
+
case 'hidden':
|
|
76
|
+
return !isNodeVisible(node);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
58
79
|
class ScreenImpl {
|
|
59
80
|
context;
|
|
60
81
|
scope;
|
|
@@ -361,7 +382,11 @@ class LocatorImpl extends ScreenImpl {
|
|
|
361
382
|
return nodes.map((node) => normalizeText(node.text ?? ''));
|
|
362
383
|
}
|
|
363
384
|
async waitFor(options) {
|
|
364
|
-
|
|
385
|
+
rejectUnknownOptions('waitFor', options, ['state', 'timeout']);
|
|
386
|
+
const state = options?.state === undefined ? 'visible' : options.state;
|
|
387
|
+
if (!WAIT_FOR_STATES.includes(state)) {
|
|
388
|
+
throw new TestError('INVALID_ARGUMENT', `waitFor state must be one of ${WAIT_FOR_STATES.join(', ')}, got ${JSON.stringify(state)}`);
|
|
389
|
+
}
|
|
365
390
|
await this.context.steps.run('locator', 'locator.waitFor', `${this.label} → ${state}`, async () => {
|
|
366
391
|
const { engine } = this.context;
|
|
367
392
|
const deadline = engine.deadline(options?.timeout);
|
|
@@ -371,9 +396,8 @@ class LocatorImpl extends ScreenImpl {
|
|
|
371
396
|
signal: engine.signal,
|
|
372
397
|
negated: false,
|
|
373
398
|
evaluate: async () => {
|
|
374
|
-
const { node } = await engine.tryRead(this.expression, deadline);
|
|
375
|
-
|
|
376
|
-
return state === 'visible' ? visible : !visible;
|
|
399
|
+
const { node } = await engine.tryRead(this.expression, deadline, ABSENCE_STATES.has(state) ? 'empty' : 'wait');
|
|
400
|
+
return inWaitForState(node, state);
|
|
377
401
|
},
|
|
378
402
|
onTimeout: () => new TestError('LOCATOR_NOT_FOUND', `locator did not become ${state}: ${this.label}`, {
|
|
379
403
|
details: locatorDetails(this.expression, Date.now() - startedMs),
|
|
@@ -482,4 +506,3 @@ function requireModifiers(value, api) {
|
|
|
482
506
|
}
|
|
483
507
|
return modifiers.length === 0 ? {} : { modifiers };
|
|
484
508
|
}
|
|
485
|
-
//# sourceMappingURL=screen.js.map
|
package/dist/mcp/catalog.d.ts
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import type { ToolSet } from 'ai';
|
|
14
14
|
import type { StepExecutorContext } from '../agent/executor.ts';
|
|
15
|
+
import { type NodeRedaction } from '../agent/observation.ts';
|
|
15
16
|
import type { ScreenPresenter } from '../agent/screen-update.ts';
|
|
16
17
|
import type { LocatorExpression, SemanticNode, TargetSession } from '../engine/surface.ts';
|
|
17
18
|
import type { LocatorEngine } from '../locator/engine.ts';
|
|
@@ -24,6 +25,8 @@ export interface SessionCatalog {
|
|
|
24
25
|
readonly tools: ToolSet;
|
|
25
26
|
/** The tools that change nothing on the app. */
|
|
26
27
|
readonly readOnly: ReadonlySet<string>;
|
|
28
|
+
/** The project's own tools among them. */
|
|
29
|
+
readonly project: ReadonlySet<string>;
|
|
27
30
|
}
|
|
28
31
|
export interface CatalogOptions {
|
|
29
32
|
readonly context: StepExecutorContext;
|
|
@@ -33,10 +36,12 @@ export interface CatalogOptions {
|
|
|
33
36
|
/** The agent's project tools (`agents.<name>.tools`), served beside the built-in ones. */
|
|
34
37
|
readonly tools: Readonly<Record<string, AgentTool>>;
|
|
35
38
|
/** The attempt's secret ledger: what `locate` shows of a node passes through it, as `observe` does. */
|
|
36
|
-
readonly
|
|
39
|
+
readonly redaction: NodeRedaction;
|
|
37
40
|
/** The session's recorder, when the engine records video. */
|
|
38
41
|
readonly recorder: SessionRecorder | undefined;
|
|
39
42
|
readonly warn: (message: string) => void;
|
|
43
|
+
/** Told the cause of every grammar action that failed into a result. */
|
|
44
|
+
readonly onActionFailed?: ((cause: unknown) => void) | undefined;
|
|
40
45
|
}
|
|
41
46
|
/** Builds the session's catalog from the step context and the target. */
|
|
42
47
|
export declare function createSessionCatalog(options: CatalogOptions): SessionCatalog;
|
|
@@ -56,5 +61,4 @@ export interface LocateQuery {
|
|
|
56
61
|
/** Builds the expression and the matching `screen.*` call from the tool arguments. */
|
|
57
62
|
export declare function locateQuery(args: LocateArgs): LocateQuery;
|
|
58
63
|
/** Renders a locate result: the count, the verdict a test would get, and the nodes, each through the attempt's redactor. */
|
|
59
|
-
export declare function describeLocate(query: LocateQuery, count: number, nodes: readonly SemanticNode[],
|
|
60
|
-
//# sourceMappingURL=catalog.d.ts.map
|
|
64
|
+
export declare function describeLocate(query: LocateQuery, count: number, nodes: readonly SemanticNode[], redaction: NodeRedaction): string;
|
package/dist/mcp/catalog.js
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { z } from 'zod';
|
|
14
14
|
import { projectTools } from '../agent/default-agent.js';
|
|
15
|
-
import { projectTree } from '../agent/observation.js';
|
|
15
|
+
import { projectTree, redactNode } from '../agent/observation.js';
|
|
16
16
|
import { GRAMMAR_TOOL_NAMES } from '../agent/action-names.js';
|
|
17
17
|
import { createGrammarTools } from '../agent/primitives.js';
|
|
18
18
|
import { ConfigurationError } from '../internal/errors.js';
|
|
@@ -29,12 +29,12 @@ export function createSessionCatalog(options) {
|
|
|
29
29
|
const { context, screen } = options;
|
|
30
30
|
// The grammar's own observe reports a diff for the model loop; the
|
|
31
31
|
// session's shows the whole screen, so it replaces the grammar's.
|
|
32
|
-
const { observe: _diffObserve, ...verbs } = createGrammarTools(context, { screen });
|
|
32
|
+
const { observe: _diffObserve, ...verbs } = createGrammarTools(context, { screen, onActionFailed: options.onActionFailed });
|
|
33
33
|
const recording = options.recorder === undefined ? {} : recordingTools(options.recorder);
|
|
34
34
|
const builtIn = {
|
|
35
35
|
observe: fullObserveTool(context, screen),
|
|
36
36
|
...verbs,
|
|
37
|
-
locate: locateTool(options.locator, options.session, options.
|
|
37
|
+
locate: locateTool(options.locator, options.session, options.redaction),
|
|
38
38
|
...recording,
|
|
39
39
|
};
|
|
40
40
|
const defined = options.tools;
|
|
@@ -49,7 +49,7 @@ export function createSessionCatalog(options) {
|
|
|
49
49
|
if (defined[name]?.annotations.mutates === false)
|
|
50
50
|
readOnly.add(name);
|
|
51
51
|
}
|
|
52
|
-
return { tools: { ...builtIn, ...project }, readOnly };
|
|
52
|
+
return { tools: { ...builtIn, ...project }, readOnly, project: new Set(Object.keys(project)) };
|
|
53
53
|
}
|
|
54
54
|
/**
|
|
55
55
|
* The session's `observe`: the whole screen, every time. Action results
|
|
@@ -65,7 +65,7 @@ function fullObserveTool(context, screen) {
|
|
|
65
65
|
};
|
|
66
66
|
}
|
|
67
67
|
/** The session's `locate`: a semantic locator tried against the live screen, with the verdict a test would get. */
|
|
68
|
-
function locateTool(locator, session,
|
|
68
|
+
function locateTool(locator, session, redaction) {
|
|
69
69
|
return {
|
|
70
70
|
description: 'Try a semantic locator against the live screen before writing it into a test: screen.getByRole(role, name), getByText, getByLabel, getByPlaceholder, or getByTestId. Returns how many nodes match and which, plus the test code to use. Exactly one of role, text, label, placeholder, or testId; name narrows a role query. Matching is exact unless exact is false.',
|
|
71
71
|
inputSchema: z.object({
|
|
@@ -84,7 +84,7 @@ function locateTool(locator, session, redact) {
|
|
|
84
84
|
for (const ref of refs.slice(0, MAX_LOCATE_NODES)) {
|
|
85
85
|
read.push(await session.read(ref, locator.operation()));
|
|
86
86
|
}
|
|
87
|
-
return describeLocate(query, refs.length, read,
|
|
87
|
+
return describeLocate(query, refs.length, read, redaction);
|
|
88
88
|
},
|
|
89
89
|
};
|
|
90
90
|
}
|
|
@@ -115,7 +115,7 @@ export function locateQuery(args) {
|
|
|
115
115
|
return { expression: textQuery('placeholder', placeholder, { exact }, undefined), code: `screen.getByPlaceholder(${JSON.stringify(placeholder)}${options})` };
|
|
116
116
|
}
|
|
117
117
|
/** Renders a locate result: the count, the verdict a test would get, and the nodes, each through the attempt's redactor. */
|
|
118
|
-
export function describeLocate(query, count, nodes,
|
|
118
|
+
export function describeLocate(query, count, nodes, redaction) {
|
|
119
119
|
const lines = [`${count === 1 ? '1 node matches' : `${count} nodes match`} ${describeExpression(query.expression)}.`];
|
|
120
120
|
if (count === 1)
|
|
121
121
|
lines.push(`Use: ${query.code}`);
|
|
@@ -124,7 +124,7 @@ export function describeLocate(query, count, nodes, redact) {
|
|
|
124
124
|
else
|
|
125
125
|
lines.push(`A test action on ${query.code} would fail with LOCATOR_AMBIGUOUS. Narrow it with a name, getByRole(role, name), .filter({ hasText }), .first(), or .nth(i), or scope it under a container.`);
|
|
126
126
|
for (const node of nodes)
|
|
127
|
-
lines.push(`- ${describeNode(projectTree(node,
|
|
127
|
+
lines.push(`- ${describeNode(projectTree(redactNode(node, redaction)))}`);
|
|
128
128
|
if (count > nodes.length)
|
|
129
129
|
lines.push(`- and ${count - nodes.length} more`);
|
|
130
130
|
return lines.join('\n');
|
|
@@ -149,4 +149,3 @@ function describeNode(node) {
|
|
|
149
149
|
parts.push(`[${states.join(', ')}]`);
|
|
150
150
|
return parts.join(' ');
|
|
151
151
|
}
|
|
152
|
-
//# sourceMappingURL=catalog.js.map
|
package/dist/mcp/config.d.ts
CHANGED
|
@@ -20,4 +20,3 @@ export declare function locateProjectConfig(options: ProjectOptions): string;
|
|
|
20
20
|
* config. The project root is the config's directory.
|
|
21
21
|
*/
|
|
22
22
|
export declare function loadProjectConfig(configPath: string, env: NodeJS.ProcessEnv): Promise<LoadedConfig>;
|
|
23
|
-
//# sourceMappingURL=config.d.ts.map
|
package/dist/mcp/config.js
CHANGED
|
@@ -21,4 +21,3 @@ export async function loadProjectConfig(configPath, env) {
|
|
|
21
21
|
const raw = await loadConfigModule(configPath, { graph: true });
|
|
22
22
|
return { ...resolveConfig(raw, { projectRoot: path.dirname(configPath), configPath, env }), configPath };
|
|
23
23
|
}
|
|
24
|
-
//# sourceMappingURL=config.js.map
|
package/dist/mcp/recording.d.ts
CHANGED
|
@@ -74,4 +74,3 @@ export declare class SessionRecorder {
|
|
|
74
74
|
export declare function describeRecording(recording: FinishedRecording): string;
|
|
75
75
|
/** The session's `start_recording` and `stop_recording` tools. */
|
|
76
76
|
export declare function recordingTools(recorder: SessionRecorder): ToolSet;
|
|
77
|
-
//# sourceMappingURL=recording.d.ts.map
|
package/dist/mcp/recording.js
CHANGED
package/dist/mcp/server.d.ts
CHANGED
|
@@ -7,6 +7,12 @@
|
|
|
7
7
|
* it the process's and a test hands it pipes.
|
|
8
8
|
*/
|
|
9
9
|
import type { Readable, Writable } from 'node:stream';
|
|
10
|
+
import type { McpSessionSummary } from './usage.ts';
|
|
11
|
+
/** The client as it named itself in `initialize`. */
|
|
12
|
+
export interface McpClient {
|
|
13
|
+
readonly name: string;
|
|
14
|
+
readonly version: string;
|
|
15
|
+
}
|
|
10
16
|
export interface ServeOptions {
|
|
11
17
|
readonly cwd: string;
|
|
12
18
|
/** The config every session loads unless `open_session` names one. */
|
|
@@ -25,7 +31,8 @@ export interface ServeOptions {
|
|
|
25
31
|
readonly log: (line: string) => void;
|
|
26
32
|
/** Ends the server from outside: a process signal. */
|
|
27
33
|
readonly signal?: AbortSignal | undefined;
|
|
34
|
+
/** Told once per `open_session`, when its session closes or its open fails, with the client that asked; undefined before `initialize`. */
|
|
35
|
+
readonly onSessionEnd?: ((summary: McpSessionSummary, client: McpClient | undefined) => void) | undefined;
|
|
28
36
|
}
|
|
29
37
|
/** Serves until the client disconnects or `signal` aborts; resolves with the exit code. */
|
|
30
38
|
export declare function serveMcp(options: ServeOptions): Promise<number>;
|
|
31
|
-
//# sourceMappingURL=server.d.ts.map
|
package/dist/mcp/server.js
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* config the server started next to. Streams are injected, so the CLI hands
|
|
7
7
|
* it the process's and a test hands it pipes.
|
|
8
8
|
*/
|
|
9
|
-
import { McpServer, ResourceTemplate } from '@modelcontextprotocol/
|
|
10
|
-
import { StdioServerTransport } from '@modelcontextprotocol/
|
|
9
|
+
import { McpServer, ResourceTemplate } from '@modelcontextprotocol/server';
|
|
10
|
+
import { StdioServerTransport } from '@modelcontextprotocol/server/stdio';
|
|
11
11
|
import { readGuide, skillTopics } from '../cli/skill.js';
|
|
12
12
|
import { ConfigurationError, errorMessage } from '../internal/errors.js';
|
|
13
13
|
import { loadProjectConfig, locateProjectConfig } from './config.js';
|
|
@@ -34,16 +34,20 @@ export async function serveMcp(options) {
|
|
|
34
34
|
maxSessions: options.maxSessions,
|
|
35
35
|
defaultTarget: options.target,
|
|
36
36
|
log,
|
|
37
|
+
onSessionEnd: (summary) => {
|
|
38
|
+
const client = server.server.getClientVersion();
|
|
39
|
+
options.onSessionEnd?.(summary, client === undefined ? undefined : { name: client.name, version: client.version });
|
|
40
|
+
},
|
|
37
41
|
});
|
|
38
42
|
for (const spec of host.toolSpecs()) {
|
|
39
43
|
server.registerTool(spec.name, {
|
|
40
44
|
description: spec.description,
|
|
41
45
|
inputSchema: spec.inputSchema,
|
|
42
46
|
annotations: { readOnlyHint: spec.readOnly, openWorldHint: false },
|
|
43
|
-
}, async (args,
|
|
47
|
+
}, async (args, ctx) => {
|
|
44
48
|
// A failure is a result the agent can react to, never a protocol error.
|
|
45
49
|
try {
|
|
46
|
-
return await spec.call(args, { signal:
|
|
50
|
+
return await spec.call(args, { signal: ctx.mcpReq.signal });
|
|
47
51
|
}
|
|
48
52
|
catch (cause) {
|
|
49
53
|
return errorResult(cause);
|
|
@@ -100,4 +104,3 @@ function registerGuide(server) {
|
|
|
100
104
|
return { contents: [{ uri: uri.href, mimeType: 'text/markdown', text }] };
|
|
101
105
|
});
|
|
102
106
|
}
|
|
103
|
-
//# sourceMappingURL=server.js.map
|
package/dist/mcp/session.d.ts
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* restart and the client's tool list never changes.
|
|
13
13
|
*/
|
|
14
14
|
import type { LoadedConfig } from './config.ts';
|
|
15
|
+
import { type McpSessionSummary, type SessionEndedBy } from './usage.ts';
|
|
15
16
|
import { type McpToolCallExtra, type McpToolResult, type McpToolSpec } from './tools.ts';
|
|
16
17
|
/** How many sessions `e2e mcp --max-sessions` allows at once, each a browser or a device. */
|
|
17
18
|
export declare const SESSION_BOUNDS: {
|
|
@@ -39,6 +40,8 @@ export interface SessionHostOptions {
|
|
|
39
40
|
readonly ttlMs?: number | undefined;
|
|
40
41
|
/** How many sessions may be open at once, from `--max-sessions`; default `SESSION_BOUNDS.default`. */
|
|
41
42
|
readonly maxSessions?: number | undefined;
|
|
43
|
+
/** Told once per `open_session`, when its session closes or its open fails. */
|
|
44
|
+
readonly onSessionEnd?: ((summary: McpSessionSummary) => void) | undefined;
|
|
42
45
|
}
|
|
43
46
|
/** Owns the live sessions, up to the server's limit, and the fixed MCP tools that drive them. */
|
|
44
47
|
export declare class SessionHost {
|
|
@@ -60,7 +63,7 @@ export declare class SessionHost {
|
|
|
60
63
|
*/
|
|
61
64
|
open(options: OpenSessionOptions, signal?: AbortSignal): Promise<string>;
|
|
62
65
|
/** Closes one session, the only one when `session` is omitted, and returns what happened; a session already closing returns that close. */
|
|
63
|
-
close(reason: string, session?: string): Promise<string>;
|
|
66
|
+
close(reason: string, session?: string, endedBy?: SessionEndedBy): Promise<string>;
|
|
64
67
|
/** Closes every session, for a server that is shutting down; undefined when none was open. */
|
|
65
68
|
closeAll(reason: string): Promise<string | undefined>;
|
|
66
69
|
private teardown;
|
|
@@ -101,4 +104,3 @@ export declare class SessionHost {
|
|
|
101
104
|
private callSpec;
|
|
102
105
|
private closeSpec;
|
|
103
106
|
}
|
|
104
|
-
//# sourceMappingURL=session.d.ts.map
|
package/dist/mcp/session.js
CHANGED
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
* restart and the client's tool list never changes.
|
|
13
13
|
*/
|
|
14
14
|
import { z } from 'zod';
|
|
15
|
-
import {
|
|
15
|
+
import { loadAiSdkIfInstalled } from '../agent/ai-sdk.js';
|
|
16
16
|
import { openInteractiveStep } from '../agent/interactive-step.js';
|
|
17
17
|
import { ScreenPresenter } from '../agent/screen-update.js';
|
|
18
18
|
import { secretHandle } from '../secrets.js';
|
|
19
|
-
import { ConfigurationError, errorMessage, InfrastructureError } from '../internal/errors.js';
|
|
19
|
+
import { classifyError, ConfigurationError, errorMessage, InfrastructureError } from '../internal/errors.js';
|
|
20
20
|
import { LocatorEngine } from '../locator/engine.js';
|
|
21
21
|
import { allocateAppPorts } from '../run/app-ports.js';
|
|
22
22
|
import { SharedAppProcesses } from '../run/process-pool.js';
|
|
@@ -26,6 +26,7 @@ import { openStandaloneAttempt } from '../run/standalone.js';
|
|
|
26
26
|
import { createSessionCatalog, isGrammarVerb } from './catalog.js';
|
|
27
27
|
import { describeRecording, SessionRecorder } from './recording.js';
|
|
28
28
|
import { SessionRegistry } from './sessions.js';
|
|
29
|
+
import { SessionUsage } from './usage.js';
|
|
29
30
|
import { actionResult, catalogLine, defineMcpTool, describeToolDetail, errorResult, invokeTool, redactResult, textResult } from './tools.js';
|
|
30
31
|
/** How long one session may live, whatever happens. */
|
|
31
32
|
const SESSION_TTL_MS = 4 * 60 * 60 * 1000;
|
|
@@ -64,21 +65,25 @@ export class SessionHost {
|
|
|
64
65
|
* it, or disconnects, aborts the open and what it started.
|
|
65
66
|
*/
|
|
66
67
|
open(options, signal) {
|
|
67
|
-
|
|
68
|
+
const usage = new SessionUsage(this.sessions.liveCount, this.options.headed);
|
|
69
|
+
return this.sessions.admit((id) => this.openSession(id, options, usage, signal)).catch((cause) => {
|
|
70
|
+
this.options.onSessionEnd?.(usage.openFailed(classifyError(cause).code));
|
|
71
|
+
throw cause;
|
|
72
|
+
});
|
|
68
73
|
}
|
|
69
74
|
/** Closes one session, the only one when `session` is omitted, and returns what happened; a session already closing returns that close. */
|
|
70
|
-
async close(reason, session) {
|
|
75
|
+
async close(reason, session, endedBy = 'agent') {
|
|
71
76
|
if (session === undefined && !this.sessions.hasLive)
|
|
72
77
|
return 'No session is open.';
|
|
73
|
-
return this.sessions.close(session, reason, (live) => this.teardown(live, reason));
|
|
78
|
+
return this.sessions.close(session, reason, (live) => this.teardown(live, reason, endedBy));
|
|
74
79
|
}
|
|
75
80
|
/** Closes every session, for a server that is shutting down; undefined when none was open. */
|
|
76
81
|
async closeAll(reason) {
|
|
77
82
|
this.shutdown.abort();
|
|
78
|
-
const summaries = await this.sessions.closeAll(reason, (live) => this.teardown(live, reason));
|
|
83
|
+
const summaries = await this.sessions.closeAll(reason, (live) => this.teardown(live, reason, 'server'));
|
|
79
84
|
return summaries.length === 0 ? undefined : summaries.join('\n');
|
|
80
85
|
}
|
|
81
|
-
async teardown(live, reason) {
|
|
86
|
+
async teardown(live, reason, endedBy) {
|
|
82
87
|
if (live.idleTimer !== undefined)
|
|
83
88
|
clearTimeout(live.idleTimer);
|
|
84
89
|
const { value, cleanupErrors } = await this.closeAttempt(live.attempt, live.abort, async () => {
|
|
@@ -86,7 +91,7 @@ export class SessionHost {
|
|
|
86
91
|
const outcome = await live.step.done;
|
|
87
92
|
// The recorder runs this after a start or stop still in flight, even one the step's deadline abandoned.
|
|
88
93
|
return { outcome, saved: await this.saveRecording(live) };
|
|
89
|
-
});
|
|
94
|
+
}).finally(() => this.options.onSessionEnd?.(live.usage.closed(endedBy)));
|
|
90
95
|
const lines = [`Session ${live.id} closed (${reason}); ${live.actions} tool calls ran.`];
|
|
91
96
|
if (value.saved !== undefined)
|
|
92
97
|
lines.push(value.saved);
|
|
@@ -124,16 +129,31 @@ export class SessionHost {
|
|
|
124
129
|
call(session, name, args, extra) {
|
|
125
130
|
const live = this.sessions.resolve(session);
|
|
126
131
|
const tool = live.catalog.tools[name];
|
|
127
|
-
|
|
128
|
-
|
|
132
|
+
live.usage.called(name, live.catalog.project.has(name));
|
|
133
|
+
if (tool === undefined) {
|
|
134
|
+
const error = this.unknownTool(live, name);
|
|
135
|
+
live.usage.failed(error.code);
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
129
138
|
const redact = live.attempt.agentRuntime.redact;
|
|
130
|
-
return this.run(live, () => invokeTool(name, tool, args, extra)).then((result) =>
|
|
139
|
+
return this.run(live, () => invokeTool(name, tool, args, extra)).then((result) => {
|
|
140
|
+
if (!isGrammarVerb(name)) {
|
|
141
|
+
// A grammar action's failure was counted with its code as it happened; a project tool's result carries none.
|
|
142
|
+
if (result.isError === true)
|
|
143
|
+
live.usage.failed(undefined);
|
|
144
|
+
return redactResult(result, redact);
|
|
145
|
+
}
|
|
146
|
+
return redactResult(actionResult(name, result), redact);
|
|
147
|
+
}, (cause) => {
|
|
148
|
+
live.usage.failed(classifyError(cause).code);
|
|
149
|
+
return redactResult(errorResult(cause), redact);
|
|
150
|
+
});
|
|
131
151
|
}
|
|
132
|
-
async openSession(id, options, request) {
|
|
133
|
-
// The catalog
|
|
134
|
-
//
|
|
135
|
-
//
|
|
136
|
-
await
|
|
152
|
+
async openSession(id, options, usage, request) {
|
|
153
|
+
// The catalog renders synchronously, so the optional SDK is loaded once
|
|
154
|
+
// here when installed. Without it the catalog reads the tools' Standard
|
|
155
|
+
// Schemas, and only a model-backed call needs the package.
|
|
156
|
+
await loadAiSdkIfInstalled();
|
|
137
157
|
// The config is claimed before it evaluates: its top-level code resolves
|
|
138
158
|
// secrets against the registry an open session installed, which only
|
|
139
159
|
// knows that session's config.
|
|
@@ -143,6 +163,7 @@ export class SessionHost {
|
|
|
143
163
|
// A session is its own run: a URL declared with port 0 gets a port here.
|
|
144
164
|
const config = await allocateAppPorts(loaded);
|
|
145
165
|
const target = this.resolveTarget(config, options.target);
|
|
166
|
+
usage.resolved(target.platform, target.engine);
|
|
146
167
|
this.sessions.claimEngine(id, target.name, target.engine);
|
|
147
168
|
const ttlMs = this.options.ttlMs ?? SESSION_TTL_MS;
|
|
148
169
|
const abort = new AbortController();
|
|
@@ -186,7 +207,7 @@ export class SessionHost {
|
|
|
186
207
|
screen,
|
|
187
208
|
session: attempt.session,
|
|
188
209
|
tools: config.agent.tools,
|
|
189
|
-
redact: attempt.agentRuntime.redact,
|
|
210
|
+
redaction: { redact: attempt.agentRuntime.redact, redactCut: attempt.agentRuntime.redactCut },
|
|
190
211
|
recorder,
|
|
191
212
|
locator: new LocatorEngine({
|
|
192
213
|
session: attempt.session,
|
|
@@ -197,6 +218,7 @@ export class SessionHost {
|
|
|
197
218
|
assertionTimeout: config.assertionTimeout,
|
|
198
219
|
}),
|
|
199
220
|
warn: (message) => this.options.log('warning', message),
|
|
221
|
+
onActionFailed: (cause) => usage.failed(classifyError(cause).code),
|
|
200
222
|
});
|
|
201
223
|
const live = {
|
|
202
224
|
id,
|
|
@@ -210,6 +232,7 @@ export class SessionHost {
|
|
|
210
232
|
abort,
|
|
211
233
|
idleTimer: undefined,
|
|
212
234
|
actions: 0,
|
|
235
|
+
usage,
|
|
213
236
|
};
|
|
214
237
|
const text = this.openingText(live, config, await this.firstScreen(live));
|
|
215
238
|
// A first screen that came back despite the cancel must not become a live session nobody asked for.
|
|
@@ -218,7 +241,7 @@ export class SessionHost {
|
|
|
218
241
|
opening.removeEventListener('abort', cancel);
|
|
219
242
|
this.sessions.activate(live);
|
|
220
243
|
// A step that ends on its own (the TTL, a hard stop) ends the session.
|
|
221
|
-
void step.done.then((outcome) => this.endOnItsOwn(live, outcome.error === undefined ? 'the session step concluded' : errorMessage(outcome.error)));
|
|
244
|
+
void step.done.then((outcome) => this.endOnItsOwn(live, outcome.error === undefined ? 'the session step concluded' : errorMessage(outcome.error), 'step'));
|
|
222
245
|
this.touch(live);
|
|
223
246
|
return text;
|
|
224
247
|
}
|
|
@@ -231,11 +254,11 @@ export class SessionHost {
|
|
|
231
254
|
}
|
|
232
255
|
}
|
|
233
256
|
/** Closes a live session that ended without a close_session: its step concluded, or it sat idle. */
|
|
234
|
-
endOnItsOwn(live, why) {
|
|
257
|
+
endOnItsOwn(live, why, endedBy) {
|
|
235
258
|
if (!this.sessions.isLive(live.id))
|
|
236
259
|
return;
|
|
237
260
|
this.options.log('warning', `session ${live.id} ended: ${why}`);
|
|
238
|
-
this.close(why, live.id).catch((cause) => this.options.log('error', `closing session ${live.id} failed: ${errorMessage(cause)}`));
|
|
261
|
+
this.close(why, live.id, endedBy).catch((cause) => this.options.log('error', `closing session ${live.id} failed: ${errorMessage(cause)}`));
|
|
239
262
|
}
|
|
240
263
|
/** A recorder writing to `<output>/videos/<session>/`, when the engine records video. */
|
|
241
264
|
recorder(id, config, attempt) {
|
|
@@ -345,7 +368,7 @@ export class SessionHost {
|
|
|
345
368
|
if (live.idleTimer !== undefined)
|
|
346
369
|
clearTimeout(live.idleTimer);
|
|
347
370
|
const idleMs = this.options.idleMs ?? SESSION_IDLE_MS;
|
|
348
|
-
live.idleTimer = setTimeout(() => this.endOnItsOwn(live, `idle for ${Math.round(idleMs / 60_000)} minutes
|
|
371
|
+
live.idleTimer = setTimeout(() => this.endOnItsOwn(live, `idle for ${Math.round(idleMs / 60_000)} minutes`, 'idle'), idleMs);
|
|
349
372
|
live.idleTimer.unref();
|
|
350
373
|
}
|
|
351
374
|
/** Runs one tool body inside the live session's step. */
|
|
@@ -404,4 +427,3 @@ export class SessionHost {
|
|
|
404
427
|
});
|
|
405
428
|
}
|
|
406
429
|
}
|
|
407
|
-
//# sourceMappingURL=session.js.map
|
package/dist/mcp/sessions.d.ts
CHANGED
|
@@ -25,6 +25,8 @@ export declare class SessionRegistry<S extends NamedSession> {
|
|
|
25
25
|
constructor(limit: number);
|
|
26
26
|
/** Whether any session is live. */
|
|
27
27
|
get hasLive(): boolean;
|
|
28
|
+
/** How many sessions are live. */
|
|
29
|
+
get liveCount(): number;
|
|
28
30
|
/**
|
|
29
31
|
* Admits a session and runs `open` for it under a fresh id. A session whose
|
|
30
32
|
* open fails leaves once `open` has settled, after the host tore down what
|
|
@@ -63,4 +65,3 @@ export declare class SessionRegistry<S extends NamedSession> {
|
|
|
63
65
|
/** Keeps why a session ended, forgetting the oldest beyond `ENDED_KEPT`. */
|
|
64
66
|
private remember;
|
|
65
67
|
}
|
|
66
|
-
//# sourceMappingURL=sessions.d.ts.map
|