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/agent/step-cache.js
CHANGED
|
@@ -11,17 +11,17 @@
|
|
|
11
11
|
* for the route precondition. The initial capture can also serve the executor
|
|
12
12
|
* when replay performed no action.
|
|
13
13
|
*/
|
|
14
|
-
import {
|
|
14
|
+
import { deltaEvidenced, deltaHolds, describeDelta } from '../cache/anchors.js';
|
|
15
15
|
import { decideTraceReplay, opensWithNavigate } from '../cache/decide.js';
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import { TraceRecorder } from '../cache/recorder.js';
|
|
16
|
+
import { sameRoute } from '../cache/route.js';
|
|
17
|
+
import { recordedProvenance, TraceRecorder } from '../cache/recorder.js';
|
|
19
18
|
import { expandTrace, templateParams, templatesCollide, templateTrace } from '../cache/template.js';
|
|
20
19
|
import { readTraceEntry } from '../cache/trace.js';
|
|
21
20
|
import { sleep } from '../internal/time.js';
|
|
22
21
|
import { AgentError, isAgentError, isModelUnreachable } from './error.js';
|
|
23
22
|
import { isRuntimeHardStop } from './executor.js';
|
|
24
|
-
import { replayTrace,
|
|
23
|
+
import { replayTrace, verifyEndState, } from './replay.js';
|
|
24
|
+
import { redactNodesAgain } from './observation.js';
|
|
25
25
|
/** The outcome of a step that threw `cause`. */
|
|
26
26
|
export function failedStepOutcome(cause) {
|
|
27
27
|
if (isModelUnreachable(cause))
|
|
@@ -48,9 +48,8 @@ const STALE_REASONS = new Set([
|
|
|
48
48
|
const END_WAIT_MARGIN_MS = 10_000;
|
|
49
49
|
/**
|
|
50
50
|
* How long a replay waits for a recorded destination path to be the current
|
|
51
|
-
* one.
|
|
52
|
-
*
|
|
53
|
-
* before the new document commits. Reading the path once, right after the
|
|
51
|
+
* one. The replayed tap that starts a navigation returns before the new
|
|
52
|
+
* document commits. Reading the path once, right after the
|
|
54
53
|
* tap, hands every navigation off as an end-mismatch; polling with the
|
|
55
54
|
* settling backoff lets the destination arrive. Bounded like anchor polling.
|
|
56
55
|
*/
|
|
@@ -60,8 +59,11 @@ export class StepTraceSession {
|
|
|
60
59
|
host;
|
|
61
60
|
cache;
|
|
62
61
|
keyHash;
|
|
62
|
+
/** The claimed key and the step it names, which an entry records as its provenance. */
|
|
63
|
+
claim;
|
|
63
64
|
recorder;
|
|
64
65
|
options;
|
|
66
|
+
redaction;
|
|
65
67
|
info;
|
|
66
68
|
prefix;
|
|
67
69
|
startPath;
|
|
@@ -85,6 +87,8 @@ export class StepTraceSession {
|
|
|
85
87
|
replayedWhole = false;
|
|
86
88
|
/** True once a cached entry's actions were run this step, fully or partly. */
|
|
87
89
|
consumedReplay = false;
|
|
90
|
+
/** True once the store returned an entry for this step, whether or not it replayed. */
|
|
91
|
+
readEntryHit = false;
|
|
88
92
|
/** True once `cache.strict` failed the step on its recording, which is then kept for review rather than evicted. */
|
|
89
93
|
failedStale = false;
|
|
90
94
|
/** Grammar actions recorded so far when an end-mismatch hand-off happened. */
|
|
@@ -92,13 +96,15 @@ export class StepTraceSession {
|
|
|
92
96
|
constructor(host, options) {
|
|
93
97
|
this.host = host;
|
|
94
98
|
this.options = options;
|
|
99
|
+
this.redaction = { redact: options.redact, redactCut: options.redactCut };
|
|
95
100
|
this.cache = options.cache;
|
|
96
101
|
// The key digests the params as the recording spells them, a placeholder
|
|
97
102
|
// where each `unique()` value was, so every run's value finds one entry.
|
|
98
|
-
this.
|
|
103
|
+
this.claim = options.cache.claimKey('act', options.instruction, templateParams(options.params, options.templates), options.agent);
|
|
104
|
+
this.keyHash = this.claim.keyHash;
|
|
99
105
|
if (options.cache.mode === 'read-write') {
|
|
100
106
|
this.recorder = new TraceRecorder({
|
|
101
|
-
|
|
107
|
+
...this.redaction,
|
|
102
108
|
maxActions: options.maxActions,
|
|
103
109
|
});
|
|
104
110
|
}
|
|
@@ -144,6 +150,8 @@ export class StepTraceSession {
|
|
|
144
150
|
this.info = this.missed(read.reason, 0);
|
|
145
151
|
if (read.unavailable !== true)
|
|
146
152
|
this.failIfStale();
|
|
153
|
+
if (read.reason === 'no-entry')
|
|
154
|
+
await this.failIfRekeyed();
|
|
147
155
|
return undefined;
|
|
148
156
|
}
|
|
149
157
|
// With an entry in hand the step is the cache's from its first moment: the
|
|
@@ -151,6 +159,7 @@ export class StepTraceSession {
|
|
|
151
159
|
// replay finishes stays the cache's through its verdict and the re-stage,
|
|
152
160
|
// so a reporter never shows a model turn that is not coming. Only a replay
|
|
153
161
|
// that cannot finish the step hands it to the model.
|
|
162
|
+
this.readEntryHit = true;
|
|
154
163
|
this.host.replaying(true);
|
|
155
164
|
const verdict = await this.replayEntry(read.entry);
|
|
156
165
|
if (verdict === undefined) {
|
|
@@ -173,6 +182,23 @@ export class StepTraceSession {
|
|
|
173
182
|
this.failedStale = true;
|
|
174
183
|
throw new AgentError('REPLAY_STALE', `the recording of this step no longer replays (${reason}), and cache.strict hands no step to the agent; ${strict.advice}`);
|
|
175
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* Under `cache.strict`, ends a step whose key found no entry while the
|
|
187
|
+
* store holds a recording made for the same step under another key: the
|
|
188
|
+
* runner, the engine, the app, or the agent's context changed since, and
|
|
189
|
+
* the recording no longer replays as surely as one that diverged. A step
|
|
190
|
+
* whose instruction or params changed is a new step and still runs live.
|
|
191
|
+
*/
|
|
192
|
+
async failIfRekeyed() {
|
|
193
|
+
const { strict } = this.cache;
|
|
194
|
+
if (strict === false || strict.recordings === undefined)
|
|
195
|
+
return;
|
|
196
|
+
const previous = await strict.recordings.underAnotherKey(this.keyHash, recordedProvenance(this.claim.step, this.options.redact));
|
|
197
|
+
if (previous === undefined)
|
|
198
|
+
return;
|
|
199
|
+
this.failedStale = true;
|
|
200
|
+
throw new AgentError('REPLAY_STALE', `the recording of this step no longer replays: the store holds it under another cache key (${previous}.json), since the runner, the engine, the app, or the agent's context changed after it was recorded, and cache.strict hands no step to the agent; ${strict.advice}`);
|
|
201
|
+
}
|
|
176
202
|
/**
|
|
177
203
|
* Closes the session once the step has settled. The whole write-side
|
|
178
204
|
* decision lives here, in read-write mode only:
|
|
@@ -192,6 +218,10 @@ export class StepTraceSession {
|
|
|
192
218
|
* anchor, or end wait, so drift is repaired only once a relocation fails
|
|
193
219
|
* and the hand-off that follows re-records.
|
|
194
220
|
* - passed otherwise: stage the recorded trace for attempt-end settlement.
|
|
221
|
+
* When this pass leaves nothing to stage (it changed nothing a replay
|
|
222
|
+
* could check) and an entry was read for the step, evict that entry: it
|
|
223
|
+
* did not serve this pass, and nothing recorded will replace it, so
|
|
224
|
+
* keeping it would hand every later run off the same way.
|
|
195
225
|
* - failed after consuming a replay: evict. Without this, a diverged replay
|
|
196
226
|
* whose step then fails stages nothing — and the poisoned entry would
|
|
197
227
|
* replay its bad prefix on every future first attempt.
|
|
@@ -219,10 +249,15 @@ export class StepTraceSession {
|
|
|
219
249
|
if (this.repairedAfterEndMismatch(recorder))
|
|
220
250
|
await this.evict();
|
|
221
251
|
else if (this.replayedWhole) {
|
|
222
|
-
this.cache.staged.push({
|
|
252
|
+
this.cache.staged.push({
|
|
253
|
+
kind: 'keep',
|
|
254
|
+
keyHash: this.keyHash,
|
|
255
|
+
stepIndex: this.options.stepIndex,
|
|
256
|
+
recordedFor: recordedProvenance(this.claim.step, this.options.redact),
|
|
257
|
+
});
|
|
223
258
|
}
|
|
224
|
-
else
|
|
225
|
-
await this.
|
|
259
|
+
else if (!(await this.stage(recorder, verdictSummary)) && this.readEntryHit)
|
|
260
|
+
await this.evict();
|
|
226
261
|
return;
|
|
227
262
|
}
|
|
228
263
|
}
|
|
@@ -289,10 +324,33 @@ export class StepTraceSession {
|
|
|
289
324
|
this.info = this.missed(decision.reason, trace.actions.length);
|
|
290
325
|
return undefined;
|
|
291
326
|
}
|
|
292
|
-
|
|
327
|
+
// Every screen the replay looks at, in order, from the start: the end
|
|
328
|
+
// check measures the recorded delta from the first of them on the route
|
|
329
|
+
// the replay ends on, so a free action is preceded by a look until one
|
|
330
|
+
// on the recorded end route has been seen.
|
|
331
|
+
const screens = start === undefined ? [] : [start];
|
|
332
|
+
const onEndRoute = (screen) => screen !== undefined && (trace.endPath === undefined || (screen.path !== undefined && sameRoute(screen.path, trace.endPath)));
|
|
333
|
+
const host = this.host;
|
|
334
|
+
const watched = {
|
|
335
|
+
get traceEligible() {
|
|
336
|
+
return host.traceEligible;
|
|
337
|
+
},
|
|
338
|
+
observe: async (mode) => {
|
|
339
|
+
const screen = await host.observe(mode);
|
|
340
|
+
screens.push(screen);
|
|
341
|
+
return screen;
|
|
342
|
+
},
|
|
343
|
+
actions: host.actions,
|
|
344
|
+
signal: host.signal,
|
|
345
|
+
remainingMs: () => host.remainingMs(),
|
|
346
|
+
};
|
|
347
|
+
const outcome = await replayTrace(watched, trace, {
|
|
348
|
+
...(start?.kind === 'semantic' ? { initial: start } : {}),
|
|
349
|
+
looksBeforeFree: () => !onEndRoute(screens.at(-1)),
|
|
350
|
+
});
|
|
293
351
|
this.consumedReplay = true;
|
|
294
352
|
const stopReason = outcome.completed
|
|
295
|
-
? (await this.endStateMatches(trace))
|
|
353
|
+
? start?.kind === 'semantic' && (await this.endStateMatches(trace, start, screens))
|
|
296
354
|
? undefined
|
|
297
355
|
: 'end-mismatch'
|
|
298
356
|
: (outcome.stopReason ?? 'action-failed');
|
|
@@ -309,57 +367,59 @@ export class StepTraceSession {
|
|
|
309
367
|
}
|
|
310
368
|
/**
|
|
311
369
|
* The trace's postcondition against the live screen: the recorded end
|
|
312
|
-
* route
|
|
313
|
-
*
|
|
314
|
-
*
|
|
370
|
+
* route when the live location is known, the recorded delta on the
|
|
371
|
+
* screen (`deltaHolds`), and evidence that the replay produced it rather
|
|
372
|
+
* than finding it there (`deltaEvidenced`). The evidence is measured from
|
|
373
|
+
* the first screen the replay saw on the route it ended on (`screens`, in
|
|
374
|
+
* order): the start for a step that stays on one screen, the page a
|
|
375
|
+
* recorded navigate opened before the switch on it was tapped. An outcome
|
|
376
|
+
* already showing there proves nothing, and neither does a recording with
|
|
377
|
+
* no delta at all.
|
|
315
378
|
*/
|
|
316
|
-
async endStateMatches(trace) {
|
|
379
|
+
async endStateMatches(trace, start, screens) {
|
|
317
380
|
if (!this.host.traceEligible)
|
|
318
381
|
return false;
|
|
319
382
|
const arrived = await this.endScreen(trace);
|
|
320
383
|
if (arrived === undefined)
|
|
321
384
|
return false;
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
385
|
+
// Both captures may predate a secret the replay resolved; read with the
|
|
386
|
+
// ledger as it is now, an unchanged node is no change.
|
|
387
|
+
const baseline = baselineScreen(screens, arrived.path);
|
|
388
|
+
const baselineNodes = baseline === undefined ? undefined : redactNodesAgain(baseline.nodes, this.redaction);
|
|
389
|
+
if (!deltaEvidenced(trace, baselineNodes, inputTargets(trace)))
|
|
390
|
+
return false;
|
|
391
|
+
const beforeNodes = baselineNodes ?? redactNodesAgain(start.nodes, this.redaction);
|
|
392
|
+
// Every look the wait takes must still be on the recorded end route: a
|
|
393
|
+
// screen that moved on after the route first matched is another screen.
|
|
394
|
+
const holds = (screen) => (trace.endPath === undefined || screen.path === undefined || sameRoute(screen.path, trace.endPath)) &&
|
|
395
|
+
deltaHolds(trace, screen.nodes, beforeNodes);
|
|
396
|
+
return (await verifyEndState(this.host, holds, {
|
|
397
|
+
initial: arrived,
|
|
326
398
|
...(trace.endWaitMs === undefined ? {} : { waitMs: trace.endWaitMs }),
|
|
327
399
|
})) && this.host.traceEligible;
|
|
328
400
|
}
|
|
329
401
|
/**
|
|
330
402
|
* Captures the semantic end state once its route matches the recording,
|
|
331
|
-
* polling while a navigation the last action started commits.
|
|
332
|
-
*
|
|
333
|
-
*
|
|
334
|
-
*
|
|
335
|
-
* the recording, is the one that decides it, as for a route that matched.
|
|
403
|
+
* polling while a navigation the last action started commits. A route
|
|
404
|
+
* that never matches is another screen, whatever it shows: a link that
|
|
405
|
+
* now lands on a page sharing the recorded one's layout is exactly the
|
|
406
|
+
* flow that went wrong.
|
|
336
407
|
*/
|
|
337
408
|
async endScreen(trace) {
|
|
338
409
|
const startedMs = Date.now();
|
|
339
|
-
const recorded = trace.endPath
|
|
340
|
-
const anchors = trace.endAnchors ?? [];
|
|
410
|
+
const recorded = trace.endPath;
|
|
341
411
|
for (let attempt = 0;; attempt += 1) {
|
|
342
412
|
const observation = await probeScreen(this.host, 'raw');
|
|
343
413
|
if (observation?.kind !== 'semantic' || !this.host.traceEligible)
|
|
344
414
|
return undefined;
|
|
345
|
-
if (recorded === undefined || observation.path === undefined)
|
|
346
|
-
return
|
|
347
|
-
const verdict = compareRoutes(recorded, routeOf(observation.path));
|
|
348
|
-
if (verdict === 'same')
|
|
349
|
-
return { screen: observation, anchorsSeen: false };
|
|
350
|
-
// A path the runner cannot recognize as the recorded route is the
|
|
351
|
-
// recorded screen only if the recorded effect is visibly on it; with
|
|
352
|
-
// no anchors recorded there is nothing to see, and it is another screen.
|
|
353
|
-
const undecided = verdict === 'undecided' && anchors.length > 0;
|
|
354
|
-
if (undecided && anchorsPresent(anchors, observation.nodes, { redact: this.options.redact })) {
|
|
355
|
-
return { screen: observation, anchorsSeen: true };
|
|
356
|
-
}
|
|
415
|
+
if (recorded === undefined || observation.path === undefined || sameRoute(recorded, observation.path))
|
|
416
|
+
return observation;
|
|
357
417
|
const delay = END_PATH_DELAYS_MS[attempt];
|
|
358
418
|
if (delay === undefined ||
|
|
359
419
|
Date.now() - startedMs + delay > END_PATH_TIMEOUT_MS ||
|
|
360
420
|
this.host.remainingMs() <= delay ||
|
|
361
421
|
this.host.signal.aborted) {
|
|
362
|
-
return
|
|
422
|
+
return undefined;
|
|
363
423
|
}
|
|
364
424
|
await sleep(delay, this.host.signal);
|
|
365
425
|
}
|
|
@@ -401,32 +461,36 @@ export class StepTraceSession {
|
|
|
401
461
|
*
|
|
402
462
|
* The end path and a fresh settled observation are the trace's
|
|
403
463
|
* postcondition — the state the step passed in. The delta between the
|
|
404
|
-
* baseline and the passing observation becomes the
|
|
405
|
-
* step moved to another pathname the whole new
|
|
406
|
-
* first stable anchors back the path check,
|
|
407
|
-
* record's page up to the id the app minted for
|
|
408
|
-
* cannot be captured stages nothing
|
|
409
|
-
* replay
|
|
464
|
+
* baseline and the passing observation becomes the anchors: what appeared
|
|
465
|
+
* and what vanished. When the step moved to another pathname the whole new
|
|
466
|
+
* screen is the delta, and its first stable anchors back the path check,
|
|
467
|
+
* which matches a created record's page up to the id the app minted for
|
|
468
|
+
* it. A postcondition that cannot be captured stages nothing, and neither
|
|
469
|
+
* does a step that changed nothing a replay could check, no node and no
|
|
470
|
+
* route: a trace without its check would replay on mechanics alone.
|
|
410
471
|
*/
|
|
411
472
|
async stage(recorder, verdictSummary) {
|
|
412
473
|
if (!this.host.traceEligible || this.startNodes === undefined || recorder.recordedCount === 0)
|
|
413
|
-
return;
|
|
474
|
+
return false;
|
|
414
475
|
const observation = await probeScreen(this.host, 'held-still');
|
|
415
476
|
if (!this.host.traceEligible || observation?.kind !== 'semantic')
|
|
416
|
-
return;
|
|
477
|
+
return false;
|
|
417
478
|
const { nodes: endNodes, path: endPath } = observation;
|
|
418
|
-
|
|
479
|
+
// The start capture may predate a secret this step resolved; read with
|
|
480
|
+
// the ledger as it is now, an unchanged node is no delta.
|
|
481
|
+
const startNodes = redactNodesAgain(this.startNodes, this.redaction);
|
|
482
|
+
const routeMoved = this.startPath !== undefined && endPath !== undefined && !sameRoute(this.startPath, endPath);
|
|
483
|
+
const delta = describeDelta(startNodes, endNodes, routeMoved);
|
|
484
|
+
if (delta.appeared.length === 0 && delta.gone.length === 0 && !routeMoved)
|
|
485
|
+
return false;
|
|
419
486
|
const trace = recorder.finalize({
|
|
420
487
|
executor: this.options.executor,
|
|
421
|
-
recordedFor:
|
|
422
|
-
testId: this.cache.identity.testId,
|
|
423
|
-
targetId: this.cache.identity.targetId,
|
|
424
|
-
instructionDigest: instructionDigest(this.options.instruction),
|
|
425
|
-
},
|
|
488
|
+
recordedFor: this.claim.step,
|
|
426
489
|
summary: verdictSummary ?? 'step passed',
|
|
427
490
|
...(this.startPath === undefined ? {} : { startPath: this.startPath }),
|
|
428
491
|
...(endPath === undefined ? {} : { endPath }),
|
|
429
|
-
endAnchors,
|
|
492
|
+
endAnchors: delta.appeared,
|
|
493
|
+
goneAnchors: delta.gone,
|
|
430
494
|
// How long the app took to show its end state after the last action,
|
|
431
495
|
// plus room for a slower day: the budget a replay waits for the anchors
|
|
432
496
|
// to return. Measured from the last action, not the step's start: the
|
|
@@ -435,12 +499,12 @@ export class StepTraceSession {
|
|
|
435
499
|
endWaitMs: Date.now() - (recorder.lastActionAtMs ?? this.startedMs) + END_WAIT_MARGIN_MS,
|
|
436
500
|
});
|
|
437
501
|
if (trace === undefined)
|
|
438
|
-
return;
|
|
502
|
+
return false;
|
|
439
503
|
// A trace with no start anchor — no recorded path (a surface without a URL)
|
|
440
504
|
// and no opening navigate — could never replay: `wrong-context` forever.
|
|
441
505
|
// Writing it would be pure store traffic, so it is not written at all.
|
|
442
506
|
if (trace.startPath === undefined && !opensWithNavigate(trace))
|
|
443
|
-
return;
|
|
507
|
+
return false;
|
|
444
508
|
// Stored with a slot where each `unique()` value appeared, so the next
|
|
445
509
|
// run's values — a fresh timestamped name — replay the same flow. A
|
|
446
510
|
// recording that cannot be templated safely is not written at all; when
|
|
@@ -448,12 +512,13 @@ export class StepTraceSession {
|
|
|
448
512
|
if (templatesCollide(this.options.params, this.options.templates)) {
|
|
449
513
|
if (this.info !== undefined)
|
|
450
514
|
this.info = { ...this.info, notRecorded: 'param-collision' };
|
|
451
|
-
return;
|
|
515
|
+
return false;
|
|
452
516
|
}
|
|
453
517
|
const templated = templateTrace(trace, this.options.templates);
|
|
454
518
|
if (templated === undefined)
|
|
455
|
-
return;
|
|
519
|
+
return false;
|
|
456
520
|
this.cache.staged.push({ kind: 'write', keyHash: this.keyHash, trace: templated, stepIndex: this.options.stepIndex });
|
|
521
|
+
return true;
|
|
457
522
|
}
|
|
458
523
|
/**
|
|
459
524
|
* Awaited so the step does not close — and a later read cannot be served
|
|
@@ -476,6 +541,26 @@ export class StepTraceSession {
|
|
|
476
541
|
};
|
|
477
542
|
}
|
|
478
543
|
}
|
|
544
|
+
/** The controls a trace's input actions set a value or a state on: their changed anchors echo the input. */
|
|
545
|
+
function inputTargets(trace) {
|
|
546
|
+
return trace.actions.flatMap((action) => ('target' in action && action.target !== undefined ? [action.target] : []));
|
|
547
|
+
}
|
|
548
|
+
/**
|
|
549
|
+
* The first semantic screen of the replay's last stretch on the route it
|
|
550
|
+
* ended on (`endPath`), or undefined when its last screen before the end
|
|
551
|
+
* was on another route, so the last action moved it. A screen or an end
|
|
552
|
+
* without a location counts as on the route: there is nothing to compare.
|
|
553
|
+
*/
|
|
554
|
+
function baselineScreen(screens, endPath) {
|
|
555
|
+
let baseline;
|
|
556
|
+
for (const screen of screens) {
|
|
557
|
+
if (endPath !== undefined && screen.path !== undefined && !sameRoute(screen.path, endPath))
|
|
558
|
+
baseline = undefined;
|
|
559
|
+
else if (screen.kind === 'semantic')
|
|
560
|
+
baseline ??= screen;
|
|
561
|
+
}
|
|
562
|
+
return baseline;
|
|
563
|
+
}
|
|
479
564
|
/**
|
|
480
565
|
* One cache capture, settled as far as `mode` asks, or undefined when the
|
|
481
566
|
* surface cannot be observed right now, which is the executor's business,
|
|
@@ -511,4 +596,3 @@ export function recordedVerdictOf(summary) {
|
|
|
511
596
|
const at = summary.indexOf(RECORDED_VERDICT_SEPARATOR);
|
|
512
597
|
return at === -1 ? summary : summary.slice(at + RECORDED_VERDICT_SEPARATOR.length);
|
|
513
598
|
}
|
|
514
|
-
//# sourceMappingURL=step-cache.js.map
|
package/dist/agent/tool-loop.js
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* - model-call accounting and a step transcript for `--debug`.
|
|
12
12
|
*/
|
|
13
13
|
import { asSdkLanguageModel, loadAiSdk } from './ai-sdk.js';
|
|
14
|
+
import { MODEL_REQUEST_HEADERS } from '../internal/client-identity.js';
|
|
14
15
|
import { ConfigurationError, withHint } from '../internal/errors.js';
|
|
15
16
|
import { failureHint, isAbort, TRANSPORT_RETRIES } from './model/sdk.js';
|
|
16
17
|
import { isContextOverflow } from './model/overflow.js';
|
|
@@ -241,6 +242,7 @@ class LoopRun {
|
|
|
241
242
|
toolChoice: this.toolChoice,
|
|
242
243
|
...(providerOptions === undefined ? {} : { providerOptions: providerOptions }),
|
|
243
244
|
maxRetries: TRANSPORT_RETRIES,
|
|
245
|
+
headers: MODEL_REQUEST_HEADERS,
|
|
244
246
|
stopWhen: [
|
|
245
247
|
() => this.conclusion.concluded() || this.hardStop !== undefined,
|
|
246
248
|
// Counted across every generate call of the step, so a retry after an
|
|
@@ -632,4 +634,3 @@ function safeJson(value) {
|
|
|
632
634
|
return String(value);
|
|
633
635
|
}
|
|
634
636
|
}
|
|
635
|
-
//# sourceMappingURL=tool-loop.js.map
|
package/dist/agent/tool.d.ts
CHANGED
|
@@ -35,4 +35,3 @@ export type ToolContext = Pick<StepExecutorContext, 'observe' | 'attachScreensho
|
|
|
35
35
|
export declare function getToolContext(options: object): ToolContext;
|
|
36
36
|
/** Carries harness capabilities alongside SDK options without replacing the project's SDK context. */
|
|
37
37
|
export declare function withToolContext(options: ToolExecutionOptions<unknown>, context: ToolContext): ToolExecutionOptions<unknown>;
|
|
38
|
-
//# sourceMappingURL=tool.d.ts.map
|
package/dist/agent/tool.js
CHANGED
|
@@ -35,4 +35,3 @@ export interface CompactScreenshotHistoryOptions {
|
|
|
35
35
|
* array unchanged when nothing qualifies.
|
|
36
36
|
*/
|
|
37
37
|
export declare function compactScreenshotHistory(messages: ModelMessage[], options?: CompactScreenshotHistoryOptions): ModelMessage[];
|
|
38
|
-
//# sourceMappingURL=transcript-compaction.d.ts.map
|
package/dist/agent/usage.d.ts
CHANGED
package/dist/agent/usage.js
CHANGED
package/dist/cache/anchors.d.ts
CHANGED
|
@@ -1,37 +1,85 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Anchors: the step's recorded delta.
|
|
3
3
|
*
|
|
4
4
|
* A recording run does not end when its last action commits; it ends when the
|
|
5
5
|
* executor looks at the screen and judges the step done. The trace used to
|
|
6
6
|
* keep only the actions and drop that look, so a replay could run every
|
|
7
7
|
* recorded action mechanically — a fill that never committed, a save that
|
|
8
8
|
* produced an unnamed record — and self-finalize with nothing checking the
|
|
9
|
-
* effect. Anchors restore the check as data: the descriptors of nodes
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
9
|
+
* effect. Anchors restore the check as data: the descriptors of nodes the
|
|
10
|
+
* step made appear (`endAnchors`) and of nodes it made vanish
|
|
11
|
+
* (`goneAnchors`), each with the states a step sets on a control it leaves
|
|
12
|
+
* on screen (a switch turned on, a field typed into). They are checked by
|
|
13
|
+
* the relocation vocabulary (`relocate.ts`) with two deliberate differences:
|
|
14
|
+
* every recorded field must be equal, text, value, and states included, and
|
|
15
|
+
* presence is enough, uniqueness is not asked.
|
|
16
|
+
*
|
|
17
|
+
* A replay passes on its own only when the delta happened again: everything
|
|
18
|
+
* that appeared is there, everything that vanished is gone, and at least one
|
|
19
|
+
* of those changes, or the route, actually moved during the replay
|
|
20
|
+
* (`deltaEvidenced`), so a status that already read "Submitted" before a
|
|
21
|
+
* submit that did nothing is no proof. An alert the replay raised that the
|
|
22
|
+
* recording never saw is an outcome the recording did not have, whatever
|
|
23
|
+
* else matched (`deltaHolds`).
|
|
14
24
|
*/
|
|
15
|
-
import type {
|
|
16
|
-
import { type DescriptorMatchOptions } from './relocate.ts';
|
|
25
|
+
import type { RedactedNode } from '../agent/observation.ts';
|
|
17
26
|
import { type TraceTargetDescriptor } from './trace.ts';
|
|
18
|
-
|
|
27
|
+
/** The two sides of one step's delta, each projected, deduplicated, ordered, and capped. */
|
|
28
|
+
export interface StepDelta {
|
|
29
|
+
/** On screen when the step passed, not when it began. */
|
|
30
|
+
readonly appeared: TraceTargetDescriptor[];
|
|
31
|
+
/** On screen when the step began, not when it passed. */
|
|
32
|
+
readonly gone: TraceTargetDescriptor[];
|
|
33
|
+
}
|
|
34
|
+
/** The recorded delta a replay checks, as a trace carries it. */
|
|
35
|
+
export interface RecordedDelta {
|
|
36
|
+
readonly endAnchors?: readonly TraceTargetDescriptor[];
|
|
37
|
+
readonly goneAnchors?: readonly TraceTargetDescriptor[];
|
|
38
|
+
}
|
|
19
39
|
/**
|
|
20
|
-
* Derives
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
40
|
+
* Derives one step's delta between its starting observation and its passing
|
|
41
|
+
* one. Each side is ordered announcements first, then leaves, then
|
|
42
|
+
* containers, each in document order: a container's accessible name is
|
|
43
|
+
* usually the concatenation of its children's, so it repeats what the
|
|
44
|
+
* leaves already say, and on a list-heavy screen those repeats would crowd
|
|
45
|
+
* the one status line that names the effect out of the cap. `routeMoved`
|
|
46
|
+
* says the step ended on another route than it began on, whose counts are
|
|
47
|
+
* that screen's data rather than the step's result (`COUNT_TEXT`).
|
|
48
|
+
*
|
|
49
|
+
* A node counts as gone only when no end node matches its anchor the way
|
|
50
|
+
* `deltaHolds` checks one, on the recorded fields alone: a radio label
|
|
51
|
+
* "Express" the pick replaced with a status reading "Express" vanished, but
|
|
52
|
+
* an anchor of that text would still match the status, and the recording
|
|
53
|
+
* would fail its own check on every replay.
|
|
27
54
|
*/
|
|
28
|
-
export declare function
|
|
55
|
+
export declare function describeDelta(startNodes: ReadonlyMap<string, RedactedNode>, endNodes: ReadonlyMap<string, RedactedNode>, routeMoved: boolean): StepDelta;
|
|
29
56
|
/**
|
|
30
|
-
* Whether
|
|
31
|
-
* anchor (`descriptorTiers
|
|
32
|
-
* forgiven when the remaining fields still
|
|
33
|
-
*
|
|
34
|
-
*
|
|
57
|
+
* Whether the recorded end state holds on a fresh observation: every
|
|
58
|
+
* appeared anchor present (some tier of it, `descriptorTiers`, so a test id
|
|
59
|
+
* that churned per render is forgiven when the remaining fields still
|
|
60
|
+
* identify the node, equal on every anchor field and state), no gone anchor
|
|
61
|
+
* present, and no alert on screen that was not on `beforeNodes` and is not
|
|
62
|
+
* one the recording saw appear. Two nodes matching one anchor are the effect
|
|
63
|
+
* twice over, not an ambiguity.
|
|
64
|
+
*/
|
|
65
|
+
export declare function deltaHolds(delta: RecordedDelta, nodes: ReadonlyMap<string, RedactedNode>, beforeNodes: ReadonlyMap<string, RedactedNode>): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Whether the replay itself produced some of the recorded delta, measured
|
|
68
|
+
* from `baselineNodes`, the first screen the replay saw on the route it
|
|
69
|
+
* ended on: an anchor that appeared was absent there, or a gone one was
|
|
70
|
+
* there. Without that, every check `deltaHolds` makes could have held before
|
|
71
|
+
* the actions that should have produced it: the screen already read the
|
|
72
|
+
* outcome, and nothing the replay did is proven to have done anything. A
|
|
73
|
+
* recording with no delta at all is never evidence. Undefined `baselineNodes`
|
|
74
|
+
* means the replay saw no screen on that route before its last action, so
|
|
75
|
+
* that action moved the route, which is the evidence.
|
|
76
|
+
*
|
|
77
|
+
* A control one of the trace's own actions targeted (`inputTargets`) that
|
|
78
|
+
* shows on both sides of the delta, a field typed into or a switch flipped,
|
|
79
|
+
* echoes the input: the replay typed, so the value is there, whatever the
|
|
80
|
+
* step was for. Such echoes are evidence only when the delta holds nothing
|
|
81
|
+
* else; otherwise the rest of the delta must have moved, so a subscribe
|
|
82
|
+
* form typed into on a page that already read "You're subscribed" proves
|
|
83
|
+
* nothing.
|
|
35
84
|
*/
|
|
36
|
-
export declare function
|
|
37
|
-
//# sourceMappingURL=anchors.d.ts.map
|
|
85
|
+
export declare function deltaEvidenced(delta: RecordedDelta, baselineNodes: ReadonlyMap<string, RedactedNode> | undefined, inputTargets: readonly TraceTargetDescriptor[]): boolean;
|