@e2edev/e2e 0.5.0 → 0.6.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/README.md +64 -25
- package/dist/agent/act.d.ts +2 -2
- package/dist/agent/act.js +14 -37
- package/dist/agent/act.js.map +1 -1
- package/dist/agent/actions.d.ts +2 -2
- package/dist/agent/actions.d.ts.map +1 -1
- package/dist/agent/actions.js +1 -1
- package/dist/agent/ai-sdk.d.ts +1 -2
- package/dist/agent/ai-sdk.d.ts.map +1 -1
- package/dist/agent/ai-sdk.js +1 -2
- package/dist/agent/ai-sdk.js.map +1 -1
- package/dist/agent/default-agent.d.ts +10 -32
- package/dist/agent/default-agent.d.ts.map +1 -1
- package/dist/agent/default-agent.js +6 -13
- package/dist/agent/default-agent.js.map +1 -1
- package/dist/agent/derived.d.ts +1 -1
- package/dist/agent/derived.js +1 -1
- package/dist/agent/error.d.ts +2 -4
- package/dist/agent/error.d.ts.map +1 -1
- package/dist/agent/error.js +3 -5
- package/dist/agent/error.js.map +1 -1
- package/dist/agent/executor.d.ts +23 -52
- package/dist/agent/executor.d.ts.map +1 -1
- package/dist/agent/executor.js +1 -2
- package/dist/agent/executor.js.map +1 -1
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +10 -7
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/invocation.d.ts +8 -6
- package/dist/agent/invocation.d.ts.map +1 -1
- package/dist/agent/invocation.js +9 -4
- package/dist/agent/invocation.js.map +1 -1
- package/dist/agent/ledger.d.ts +17 -12
- package/dist/agent/ledger.d.ts.map +1 -1
- package/dist/agent/ledger.js +6 -9
- package/dist/agent/ledger.js.map +1 -1
- package/dist/agent/model/adapter.d.ts +7 -4
- package/dist/agent/model/adapter.d.ts.map +1 -1
- package/dist/agent/model/adapter.js +2 -2
- package/dist/agent/model/adapter.js.map +1 -1
- package/dist/agent/model/router.d.ts +1 -1
- package/dist/agent/model/router.d.ts.map +1 -1
- package/dist/agent/model/router.js +1 -1
- package/dist/agent/model/router.js.map +1 -1
- package/dist/agent/model/sdk.d.ts +11 -1
- package/dist/agent/model/sdk.d.ts.map +1 -1
- package/dist/agent/model/sdk.js +54 -10
- package/dist/agent/model/sdk.js.map +1 -1
- package/dist/agent/observation.d.ts +7 -7
- package/dist/agent/observation.d.ts.map +1 -1
- package/dist/agent/observation.js +7 -7
- package/dist/agent/observation.js.map +1 -1
- package/dist/agent/phases.d.ts +3 -3
- package/dist/agent/phases.d.ts.map +1 -1
- package/dist/agent/phases.js +4 -4
- package/dist/agent/phases.js.map +1 -1
- package/dist/agent/primitives.d.ts +4 -25
- package/dist/agent/primitives.d.ts.map +1 -1
- package/dist/agent/primitives.js +3 -36
- package/dist/agent/primitives.js.map +1 -1
- package/dist/agent/prompts.d.ts +1 -1
- package/dist/agent/prompts.js +1 -1
- package/dist/agent/protocol.d.ts +2 -3
- package/dist/agent/protocol.d.ts.map +1 -1
- package/dist/agent/protocol.js +2 -3
- package/dist/agent/protocol.js.map +1 -1
- package/dist/agent/public.d.ts +8 -10
- package/dist/agent/public.d.ts.map +1 -1
- package/dist/agent/public.js +7 -8
- package/dist/agent/public.js.map +1 -1
- package/dist/agent/replay.d.ts +2 -2
- package/dist/agent/replay.d.ts.map +1 -1
- package/dist/agent/replay.js +1 -1
- package/dist/agent/secrets.d.ts +3 -3
- package/dist/agent/secrets.d.ts.map +1 -1
- package/dist/agent/secrets.js +4 -4
- package/dist/agent/secrets.js.map +1 -1
- package/dist/agent/step-cache.d.ts +1 -1
- package/dist/agent/step-cache.d.ts.map +1 -1
- package/dist/agent/step-cache.js +7 -1
- package/dist/agent/step-cache.js.map +1 -1
- package/dist/agent/tool-loop.d.ts +9 -33
- package/dist/agent/tool-loop.d.ts.map +1 -1
- package/dist/agent/tool-loop.js +15 -38
- package/dist/agent/tool-loop.js.map +1 -1
- package/dist/agent/tool.d.ts +4 -5
- package/dist/agent/tool.d.ts.map +1 -1
- package/dist/agent/tool.js +2 -7
- package/dist/agent/tool.js.map +1 -1
- package/dist/cache/anchors.d.ts +2 -2
- package/dist/cache/anchors.d.ts.map +1 -1
- package/dist/cache/anchors.js +1 -1
- package/dist/cache/context.d.ts +6 -1
- package/dist/cache/context.d.ts.map +1 -1
- package/dist/cache/context.js +2 -1
- package/dist/cache/context.js.map +1 -1
- package/dist/cache/decide.d.ts +1 -1
- package/dist/cache/decide.js +1 -1
- package/dist/cache/identity.d.ts +9 -9
- package/dist/cache/identity.d.ts.map +1 -1
- package/dist/cache/identity.js +6 -6
- package/dist/cache/identity.js.map +1 -1
- package/dist/cache/recorder.d.ts +4 -2
- package/dist/cache/recorder.d.ts.map +1 -1
- package/dist/cache/recorder.js +10 -1
- package/dist/cache/recorder.js.map +1 -1
- package/dist/cache/relocate.d.ts +2 -2
- package/dist/cache/relocate.d.ts.map +1 -1
- package/dist/cache/relocate.js +1 -1
- package/dist/cache/store.d.ts +1 -1
- package/dist/cache/store.js +1 -1
- package/dist/cache/trace.d.ts +16 -1
- package/dist/cache/trace.d.ts.map +1 -1
- package/dist/cache/trace.js +22 -1
- package/dist/cache/trace.js.map +1 -1
- package/dist/cli/bin.js +9 -1
- package/dist/cli/bin.js.map +1 -1
- package/dist/cli/cache.d.ts +25 -0
- package/dist/cli/cache.d.ts.map +1 -0
- package/dist/cli/cache.js +249 -0
- package/dist/cli/cache.js.map +1 -0
- package/dist/cli/docs-url.d.ts +3 -0
- package/dist/cli/docs-url.d.ts.map +1 -0
- package/dist/cli/docs-url.js +3 -0
- package/dist/cli/docs-url.js.map +1 -0
- package/dist/cli/guide.d.ts +4 -0
- package/dist/cli/guide.d.ts.map +1 -0
- package/dist/cli/guide.js +16 -0
- package/dist/cli/guide.js.map +1 -0
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +211 -42
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/agent-skill.d.ts +34 -0
- package/dist/cli/init/agent-skill.d.ts.map +1 -0
- package/dist/cli/init/agent-skill.js +44 -0
- package/dist/cli/init/agent-skill.js.map +1 -0
- package/dist/cli/init/{backends.d.ts → engines.d.ts} +39 -32
- package/dist/cli/init/engines.d.ts.map +1 -0
- package/dist/cli/init/{backends.js → engines.js} +43 -34
- package/dist/cli/init/engines.js.map +1 -0
- package/dist/cli/init/package.d.ts +19 -3
- package/dist/cli/init/package.d.ts.map +1 -1
- package/dist/cli/init/package.js +20 -20
- package/dist/cli/init/package.js.map +1 -1
- package/dist/cli/init/scaffold.d.ts +3 -3
- package/dist/cli/init/scaffold.d.ts.map +1 -1
- package/dist/cli/init/scaffold.js +13 -12
- package/dist/cli/init/scaffold.js.map +1 -1
- package/dist/cli/init.d.ts +14 -2
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +104 -25
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/signals.d.ts +5 -2
- package/dist/cli/signals.d.ts.map +1 -1
- package/dist/cli/signals.js +9 -3
- package/dist/cli/signals.js.map +1 -1
- package/dist/cli/skill.d.ts +16 -0
- package/dist/cli/skill.d.ts.map +1 -0
- package/dist/cli/skill.js +57 -0
- package/dist/cli/skill.js.map +1 -0
- package/dist/collect/collect.d.ts +40 -3
- package/dist/collect/collect.d.ts.map +1 -1
- package/dist/collect/collect.js +142 -19
- package/dist/collect/collect.js.map +1 -1
- package/dist/collect/registry.d.ts +1 -1
- package/dist/collect/registry.d.ts.map +1 -1
- package/dist/collect/registry.js +2 -2
- package/dist/collect/registry.js.map +1 -1
- package/dist/collect/select.d.ts +1 -1
- package/dist/collect/select.d.ts.map +1 -1
- package/dist/collect/select.js +81 -8
- package/dist/collect/select.js.map +1 -1
- package/dist/config/agent.d.ts +14 -2
- package/dist/config/agent.d.ts.map +1 -1
- package/dist/config/agent.js +36 -11
- package/dist/config/agent.js.map +1 -1
- package/dist/config/app.d.ts +76 -19
- package/dist/config/app.d.ts.map +1 -1
- package/dist/config/app.js +159 -104
- package/dist/config/app.js.map +1 -1
- package/dist/config/diagnose.d.ts +15 -0
- package/dist/config/diagnose.d.ts.map +1 -0
- package/dist/config/diagnose.js +122 -0
- package/dist/config/diagnose.js.map +1 -0
- package/dist/config/load.d.ts +9 -1
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +35 -3
- package/dist/config/load.js.map +1 -1
- package/dist/config/resolve.d.ts +8 -7
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +73 -40
- package/dist/config/resolve.js.map +1 -1
- package/dist/config/validate.d.ts +6 -2
- package/dist/config/validate.d.ts.map +1 -1
- package/dist/config/validate.js +20 -3
- package/dist/config/validate.js.map +1 -1
- package/dist/credentials.d.ts +1 -1
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +1 -1
- package/dist/credentials.js.map +1 -1
- package/dist/{backend → engine}/contract.d.ts +27 -19
- package/dist/engine/contract.d.ts.map +1 -0
- package/dist/{backend → engine}/contract.js +18 -18
- package/dist/engine/contract.js.map +1 -0
- package/dist/{backend → engine}/index.d.ts +141 -79
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/{backend → engine}/index.js +62 -37
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/session.d.ts +23 -0
- package/dist/engine/session.d.ts.map +1 -0
- package/dist/{backend → engine}/session.js +58 -51
- package/dist/engine/session.js.map +1 -0
- package/dist/{backend → engine}/surface.d.ts +11 -11
- package/dist/engine/surface.d.ts.map +1 -0
- package/dist/{backend → engine}/surface.js +2 -2
- package/dist/engine/surface.js.map +1 -0
- package/dist/engine/timing.d.ts.map +1 -0
- package/dist/engine/timing.js +8 -0
- package/dist/engine/timing.js.map +1 -0
- package/dist/expect/async.d.ts +1 -1
- package/dist/expect/async.d.ts.map +1 -1
- package/dist/expect/async.js +37 -1
- package/dist/expect/async.js.map +1 -1
- package/dist/expect/index.js +1 -1
- package/dist/expect/values.d.ts +1 -1
- package/dist/expect/values.d.ts.map +1 -1
- package/dist/expect/values.js +1 -1
- package/dist/expect/values.js.map +1 -1
- package/dist/index.d.ts +3 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -5
- package/dist/index.js.map +1 -1
- package/dist/internal/brands.d.ts +1 -1
- package/dist/internal/brands.d.ts.map +1 -1
- package/dist/internal/brands.js +1 -1
- package/dist/internal/brands.js.map +1 -1
- package/dist/internal/errors.d.ts +37 -19
- package/dist/internal/errors.d.ts.map +1 -1
- package/dist/internal/errors.js +94 -44
- package/dist/internal/errors.js.map +1 -1
- package/dist/internal/globs.d.ts +2 -2
- package/dist/internal/globs.d.ts.map +1 -1
- package/dist/internal/globs.js +2 -2
- package/dist/internal/globs.js.map +1 -1
- package/dist/internal/ids.d.ts +3 -3
- package/dist/internal/ids.d.ts.map +1 -1
- package/dist/internal/ids.js +3 -3
- package/dist/internal/ids.js.map +1 -1
- package/dist/internal/node-version.d.ts +10 -0
- package/dist/internal/node-version.d.ts.map +1 -0
- package/dist/internal/node-version.js +28 -0
- package/dist/internal/node-version.js.map +1 -0
- package/dist/internal/objects.d.ts +21 -0
- package/dist/internal/objects.d.ts.map +1 -0
- package/dist/internal/objects.js +14 -0
- package/dist/internal/objects.js.map +1 -0
- package/dist/internal/package-manager.d.ts +10 -0
- package/dist/internal/package-manager.d.ts.map +1 -0
- package/dist/internal/package-manager.js +43 -0
- package/dist/internal/package-manager.js.map +1 -0
- package/dist/internal/redact.d.ts +1 -1
- package/dist/internal/redact.d.ts.map +1 -1
- package/dist/internal/redact.js +1 -1
- package/dist/internal/redact.js.map +1 -1
- package/dist/internal/suggest.d.ts +16 -0
- package/dist/internal/suggest.d.ts.map +1 -0
- package/dist/internal/suggest.js +61 -0
- package/dist/internal/suggest.js.map +1 -0
- package/dist/internal/text.d.ts +1 -1
- package/dist/internal/text.d.ts.map +1 -1
- package/dist/internal/text.js +1 -1
- package/dist/internal/text.js.map +1 -1
- package/dist/internal/urls.d.ts +3 -3
- package/dist/internal/urls.d.ts.map +1 -1
- package/dist/internal/urls.js +8 -3
- package/dist/internal/urls.js.map +1 -1
- package/dist/locator/engine.d.ts +7 -7
- package/dist/locator/engine.d.ts.map +1 -1
- package/dist/locator/engine.js +14 -14
- package/dist/locator/engine.js.map +1 -1
- package/dist/locator/expression.d.ts +5 -3
- package/dist/locator/expression.d.ts.map +1 -1
- package/dist/locator/expression.js +25 -5
- package/dist/locator/expression.js.map +1 -1
- package/dist/locator/screen.d.ts +1 -1
- package/dist/locator/screen.d.ts.map +1 -1
- package/dist/locator/screen.js +3 -3
- package/dist/locator/screen.js.map +1 -1
- package/dist/report/build.d.ts +10 -9
- package/dist/report/build.d.ts.map +1 -1
- package/dist/report/build.js +25 -22
- package/dist/report/build.js.map +1 -1
- package/dist/report/code-frame.d.ts +8 -4
- package/dist/report/code-frame.d.ts.map +1 -1
- package/dist/report/code-frame.js +23 -18
- package/dist/report/code-frame.js.map +1 -1
- package/dist/report/debug-steps.js +1 -1
- package/dist/report/debug-steps.js.map +1 -1
- package/dist/report/format.d.ts +73 -0
- package/dist/report/format.d.ts.map +1 -0
- package/dist/report/format.js +147 -0
- package/dist/report/format.js.map +1 -0
- package/dist/report/junit.d.ts +1 -1
- package/dist/report/junit.d.ts.map +1 -1
- package/dist/report/junit.js +1 -1
- package/dist/report/junit.js.map +1 -1
- package/dist/report/list.d.ts +96 -47
- package/dist/report/list.d.ts.map +1 -1
- package/dist/report/list.js +489 -244
- package/dist/report/list.js.map +1 -1
- package/dist/report/live-window.d.ts +28 -0
- package/dist/report/live-window.d.ts.map +1 -0
- package/dist/report/live-window.js +102 -0
- package/dist/report/live-window.js.map +1 -0
- package/dist/report/write.d.ts +1 -1
- package/dist/report/write.d.ts.map +1 -1
- package/dist/report/write.js +1 -1
- package/dist/report/write.js.map +1 -1
- package/dist/run/budget.d.ts +2 -2
- package/dist/run/budget.js +2 -2
- package/dist/run/declared-processes.d.ts +30 -0
- package/dist/run/declared-processes.d.ts.map +1 -0
- package/dist/run/declared-processes.js +61 -0
- package/dist/run/declared-processes.js.map +1 -0
- package/dist/run/events.d.ts +30 -2
- package/dist/run/events.d.ts.map +1 -1
- package/dist/run/events.js.map +1 -1
- package/dist/run/execute.d.ts +19 -16
- package/dist/run/execute.d.ts.map +1 -1
- package/dist/run/execute.js +65 -67
- package/dist/run/execute.js.map +1 -1
- package/dist/run/fixture-recording.d.ts +10 -4
- package/dist/run/fixture-recording.d.ts.map +1 -1
- package/dist/run/fixture-recording.js +19 -6
- package/dist/run/fixture-recording.js.map +1 -1
- package/dist/run/fixtures.d.ts +2 -2
- package/dist/run/fixtures.d.ts.map +1 -1
- package/dist/run/fixtures.js +72 -44
- package/dist/run/fixtures.js.map +1 -1
- package/dist/run/in-process.d.ts +1 -1
- package/dist/run/in-process.js +1 -1
- package/dist/run/managed-process.d.ts +46 -9
- package/dist/run/managed-process.d.ts.map +1 -1
- package/dist/run/managed-process.js +136 -50
- package/dist/run/managed-process.js.map +1 -1
- package/dist/run/realm.d.ts +2 -2
- package/dist/run/realm.js +2 -2
- package/dist/run/runner.d.ts +23 -1
- package/dist/run/runner.d.ts.map +1 -1
- package/dist/run/runner.js +111 -40
- package/dist/run/runner.js.map +1 -1
- package/dist/run/scheduler.d.ts +5 -5
- package/dist/run/scheduler.d.ts.map +1 -1
- package/dist/run/scheduler.js +7 -7
- package/dist/run/scheduler.js.map +1 -1
- package/dist/run/serial.d.ts +10 -2
- package/dist/run/serial.d.ts.map +1 -1
- package/dist/run/serial.js +5 -3
- package/dist/run/serial.js.map +1 -1
- package/dist/run/sessions.d.ts +10 -10
- package/dist/run/sessions.d.ts.map +1 -1
- package/dist/run/sessions.js +11 -11
- package/dist/run/sessions.js.map +1 -1
- package/dist/run/steps.d.ts +3 -3
- package/dist/run/steps.d.ts.map +1 -1
- package/dist/run/steps.js +1 -1
- package/dist/run/steps.js.map +1 -1
- package/dist/run/units.d.ts +1 -1
- package/dist/run/units.js +1 -1
- package/dist/run/worker/entry.d.ts +1 -1
- package/dist/run/worker/entry.js +2 -2
- package/dist/run/worker/entry.js.map +1 -1
- package/dist/run/worker/protocol.d.ts +18 -6
- package/dist/run/worker/protocol.d.ts.map +1 -1
- package/dist/run/worker/protocol.js +1 -1
- package/dist/run/worker/protocol.js.map +1 -1
- package/dist/run/worker/session.d.ts +2 -2
- package/dist/run/worker/session.d.ts.map +1 -1
- package/dist/run/worker/session.js +5 -3
- package/dist/run/worker/session.js.map +1 -1
- package/dist/types.d.ts +58 -41
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -2
- package/package.json +13 -12
- package/skills/e2e/SKILL.md +110 -0
- package/skills/e2e/references/agent.md +210 -0
- package/skills/e2e/references/debugging.md +81 -0
- package/skills/e2e/references/running.md +153 -0
- package/skills/e2e/references/setup.md +238 -0
- package/skills/e2e/references/writing-tests.md +289 -0
- package/dist/backend/contract.d.ts.map +0 -1
- package/dist/backend/contract.js.map +0 -1
- package/dist/backend/index.d.ts.map +0 -1
- package/dist/backend/index.js.map +0 -1
- package/dist/backend/session.d.ts +0 -23
- package/dist/backend/session.d.ts.map +0 -1
- package/dist/backend/session.js.map +0 -1
- package/dist/backend/surface.d.ts.map +0 -1
- package/dist/backend/surface.js.map +0 -1
- package/dist/backend/timing.d.ts.map +0 -1
- package/dist/backend/timing.js +0 -8
- package/dist/backend/timing.js.map +0 -1
- package/dist/cli/init/backends.d.ts.map +0 -1
- package/dist/cli/init/backends.js.map +0 -1
- package/dist/report/live-status.d.ts +0 -51
- package/dist/report/live-status.d.ts.map +0 -1
- package/dist/report/live-status.js +0 -163
- package/dist/report/live-status.js.map +0 -1
- package/dist/run/fixture-legacy.d.ts +0 -36
- package/dist/run/fixture-legacy.d.ts.map +0 -1
- package/dist/run/fixture-legacy.js +0 -143
- package/dist/run/fixture-legacy.js.map +0 -1
- /package/dist/{backend → engine}/timing.d.ts +0 -0
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
2
|
+
* The engine contract: the typed, model-free body of one target.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* An engine never talks to a model. It declares capabilities - observation,
|
|
5
5
|
* actions, location, state, artifacts, contributed fixtures - and the harness
|
|
6
|
-
* grades what a target can do from what its
|
|
6
|
+
* grades what a target can do from what its engine declares: observation
|
|
7
7
|
* unlocks the judgment tier and prompt snapshots, `perform` unlocks the
|
|
8
8
|
* harness-routed node actions (the agent's grammar verbs and the `screen`
|
|
9
9
|
* tier's actions alike), location unlocks `screen`/`expect`. Every piece of
|
|
10
10
|
* model-facing vocabulary is an agent-side `defineTool`; a target with no
|
|
11
|
-
*
|
|
11
|
+
* engine at all is valid and simply runs everything opaque.
|
|
12
12
|
*
|
|
13
|
-
* Core knows this contract and never
|
|
14
|
-
* appears here. A document
|
|
13
|
+
* Core knows this contract and never an engine's internals: no platform noun
|
|
14
|
+
* appears here. A document engine, a simulator engine, and a desktop engine
|
|
15
15
|
* fill in the same members with different bodies.
|
|
16
16
|
*
|
|
17
|
-
* `
|
|
18
|
-
* synchronously, at config load - a malformed
|
|
17
|
+
* `defineEngine` is the loud manifest: capability detection happens here,
|
|
18
|
+
* synchronously, at config load - a malformed engine fails the run instead
|
|
19
19
|
* of silently demoting itself to a lower tier.
|
|
20
20
|
*/
|
|
21
|
-
import {
|
|
21
|
+
import { engineBrand } from '../internal/brands.js';
|
|
22
22
|
import { ConfigurationError } from '../internal/errors.js';
|
|
23
|
-
// Semantics the spec requires every
|
|
24
|
-
// reproduce exactly, exported so
|
|
25
|
-
// runner error taxonomy
|
|
26
|
-
// URL matching
|
|
23
|
+
// Semantics the spec requires every engine and contributed fixture to
|
|
24
|
+
// reproduce exactly, exported so an engine never carries its own copy: the
|
|
25
|
+
// runner error taxonomy, text-pattern matching,
|
|
26
|
+
// URL matching, assertion polling, and
|
|
27
27
|
// the JSON-value rules for data a fixture returns.
|
|
28
28
|
export { ConfigurationError, InfrastructureError, TestError } from '../internal/errors.js';
|
|
29
29
|
export { validateJsonValue } from '../internal/json-value.js';
|
|
@@ -31,9 +31,10 @@ export { describePattern, matchesText, toTextPattern } from '../internal/text.js
|
|
|
31
31
|
export { raceAbort } from './timing.js';
|
|
32
32
|
export { Deadline, pollCondition, withTimeout, withinCleanupBudget } from '../internal/time.js';
|
|
33
33
|
export { urlMatches } from '../internal/urls.js';
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
export { obj } from '../internal/objects.js';
|
|
35
|
+
import { ENGINE_SPI_VERSION, } from './contract.js';
|
|
36
|
+
export { ENGINE_ERROR_CODES, ENGINE_SPI_VERSION, EngineError, OBSERVED_NAME_LIMIT, OBSERVED_TEXT_LIMIT, RETRYABLE_ENGINE_ERROR_CODES, } from './contract.js';
|
|
37
|
+
/** Every key an engine may declare; anything else is rejected at config load. */
|
|
37
38
|
const KNOWN_KEYS = [
|
|
38
39
|
'name',
|
|
39
40
|
'version',
|
|
@@ -59,6 +60,20 @@ const NESTED_KEYS = {
|
|
|
59
60
|
artifacts: ['screenshot', 'startTrace', 'stopTrace'],
|
|
60
61
|
app: ['navigate', 'back', 'restart', 'clearState'],
|
|
61
62
|
};
|
|
63
|
+
/**
|
|
64
|
+
* Declarative members of the `app` manifest: facts about the app under test,
|
|
65
|
+
* copied through as data. Their values are validated when the config resolves
|
|
66
|
+
* the target, where an error can name it.
|
|
67
|
+
*/
|
|
68
|
+
const APP_DECLARATION_KEYS = [
|
|
69
|
+
'url',
|
|
70
|
+
'allowedOrigins',
|
|
71
|
+
'environment',
|
|
72
|
+
'identity',
|
|
73
|
+
'command',
|
|
74
|
+
'readyUrl',
|
|
75
|
+
'services',
|
|
76
|
+
];
|
|
62
77
|
const FUNCTION_MEMBERS = [
|
|
63
78
|
'observe',
|
|
64
79
|
'locate',
|
|
@@ -75,26 +90,36 @@ const FUNCTION_MEMBERS = [
|
|
|
75
90
|
const RESERVED_FIXTURES = new Set(['agent', 'app', 'screen', 'platform', 'session']);
|
|
76
91
|
const FIXTURE_NAME_PATTERN = /^[a-z][A-Za-z0-9]*$/;
|
|
77
92
|
function invalid(name, detail) {
|
|
78
|
-
return new ConfigurationError('INVALID_CONFIG', `
|
|
93
|
+
return new ConfigurationError('INVALID_CONFIG', `engine "${name}": ${detail}`);
|
|
79
94
|
}
|
|
80
95
|
/**
|
|
81
96
|
* Validates one nested manifest (`state`, `artifacts`, `app`): a plain object
|
|
82
|
-
* whose keys are closed and whose declared members are functions
|
|
83
|
-
*
|
|
97
|
+
* whose keys are closed and whose declared members are functions, except the
|
|
98
|
+
* `app` declaration's data members, which are copied through. Returns a copy
|
|
99
|
+
* with every function bound to the manifest, so class-based bodies work.
|
|
84
100
|
*/
|
|
85
101
|
function nestedManifest(name, key, value, required = []) {
|
|
86
|
-
if (typeof value !== 'object' || value === null) {
|
|
102
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
87
103
|
throw invalid(name, `${key} must be an object`);
|
|
88
104
|
}
|
|
89
|
-
const
|
|
105
|
+
const hooks = NESTED_KEYS[key];
|
|
106
|
+
const data = key === 'app' ? APP_DECLARATION_KEYS : [];
|
|
90
107
|
const source = value;
|
|
91
108
|
for (const member of Object.keys(source)) {
|
|
92
|
-
if (!
|
|
93
|
-
throw invalid(name, `${key} has unknown key "${member}"; expected one of ${
|
|
109
|
+
if (!hooks.includes(member) && !data.includes(member)) {
|
|
110
|
+
throw invalid(name, `${key} has unknown key "${member}"; expected one of ${[...data, ...hooks].join(', ')}`);
|
|
94
111
|
}
|
|
95
112
|
}
|
|
96
113
|
const bound = {};
|
|
97
|
-
for (const member of
|
|
114
|
+
for (const member of data) {
|
|
115
|
+
const fact = source[member];
|
|
116
|
+
if (fact === undefined)
|
|
117
|
+
continue;
|
|
118
|
+
if (typeof fact === 'function')
|
|
119
|
+
throw invalid(name, `${key}.${member} is a declaration, not a hook`);
|
|
120
|
+
bound[member] = fact;
|
|
121
|
+
}
|
|
122
|
+
for (const member of hooks) {
|
|
98
123
|
const fn = source[member];
|
|
99
124
|
if (fn === undefined) {
|
|
100
125
|
if (required.includes(member))
|
|
@@ -108,7 +133,7 @@ function nestedManifest(name, key, value, required = []) {
|
|
|
108
133
|
return bound;
|
|
109
134
|
}
|
|
110
135
|
/**
|
|
111
|
-
* Validates
|
|
136
|
+
* Validates an engine and computes its capability set. Runs synchronously at
|
|
112
137
|
* config load and fails loud: a misspelled member or an undeclared dependency
|
|
113
138
|
* is `INVALID_CONFIG`, never a silent demotion to a lower tier.
|
|
114
139
|
*
|
|
@@ -116,19 +141,19 @@ function nestedManifest(name, key, value, required = []) {
|
|
|
116
141
|
* through the prototype chain and binding every function to the spec, so a
|
|
117
142
|
* class instance (own state fields included) is as valid a body as a literal.
|
|
118
143
|
*/
|
|
119
|
-
export function
|
|
144
|
+
export function defineEngine(spec) {
|
|
120
145
|
if (typeof spec !== 'object' || spec === null) {
|
|
121
|
-
throw new ConfigurationError('INVALID_CONFIG', '
|
|
146
|
+
throw new ConfigurationError('INVALID_CONFIG', 'defineEngine requires an engine object');
|
|
122
147
|
}
|
|
123
148
|
if (typeof spec.name !== 'string' || spec.name.trim() === '') {
|
|
124
|
-
throw new ConfigurationError('INVALID_CONFIG', '
|
|
149
|
+
throw new ConfigurationError('INVALID_CONFIG', 'engine.name must be a non-empty string');
|
|
125
150
|
}
|
|
126
151
|
const name = spec.name;
|
|
127
152
|
if (typeof spec.version !== 'string' || spec.version.trim() === '') {
|
|
128
153
|
throw invalid(name, 'version must be a non-empty string; it is provenance and keys the trace cache');
|
|
129
154
|
}
|
|
130
|
-
if (spec.spiVersion !==
|
|
131
|
-
throw invalid(name, `declares spiVersion ${String(spec.spiVersion)}; this runner supports ${
|
|
155
|
+
if (spec.spiVersion !== ENGINE_SPI_VERSION) {
|
|
156
|
+
throw invalid(name, `declares spiVersion ${String(spec.spiVersion)}; this runner supports ${ENGINE_SPI_VERSION}`);
|
|
132
157
|
}
|
|
133
158
|
// A literal's unknown key is a misspelling or a misplaced tool; a class
|
|
134
159
|
// instance's own fields are its state, so only literals are checked.
|
|
@@ -136,7 +161,7 @@ export function defineBackend(spec) {
|
|
|
136
161
|
const known = KNOWN_KEYS;
|
|
137
162
|
for (const key of Object.keys(spec)) {
|
|
138
163
|
if (!known.includes(key)) {
|
|
139
|
-
throw invalid(name, `unknown key "${key}" - tools belong on the agent, not the
|
|
164
|
+
throw invalid(name, `unknown key "${key}" - tools belong on the agent, not the engine`);
|
|
140
165
|
}
|
|
141
166
|
}
|
|
142
167
|
}
|
|
@@ -185,7 +210,7 @@ export function defineBackend(spec) {
|
|
|
185
210
|
}
|
|
186
211
|
capabilities.add(fixture);
|
|
187
212
|
}
|
|
188
|
-
// Bound like every other member, so a class-based
|
|
213
|
+
// Bound like every other member, so a class-based engine keeps `this`
|
|
189
214
|
// in its fixture factories too.
|
|
190
215
|
handle['fixtures'] = Object.freeze(Object.fromEntries(Object.entries(spec.fixtures).map(([fixture, factory]) => [
|
|
191
216
|
fixture,
|
|
@@ -206,17 +231,17 @@ export function defineBackend(spec) {
|
|
|
206
231
|
}
|
|
207
232
|
if (spec.app !== undefined)
|
|
208
233
|
handle['app'] = nestedManifest(name, 'app', spec.app);
|
|
209
|
-
// Assembled key by key above, so the record is
|
|
234
|
+
// Assembled key by key above, so the record is an Engine by construction.
|
|
210
235
|
return Object.freeze({
|
|
211
236
|
...handle,
|
|
212
|
-
[
|
|
237
|
+
[engineBrand]: true,
|
|
213
238
|
capabilities,
|
|
214
239
|
});
|
|
215
240
|
}
|
|
216
|
-
/** True for a
|
|
217
|
-
export function
|
|
241
|
+
/** True for a defineEngine-branded handle, across realms. */
|
|
242
|
+
export function isEngineHandle(value) {
|
|
218
243
|
return (typeof value === 'object' &&
|
|
219
244
|
value !== null &&
|
|
220
|
-
value[
|
|
245
|
+
value[engineBrand] === true);
|
|
221
246
|
}
|
|
222
247
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The engine-to-session adapter. One adapter per attempt satisfies
|
|
3
|
+
* the internal `TargetSession` surface over the engine contract, so the agent
|
|
4
|
+
* tier, the judgment tier, the trace cache, and the fixture graph program
|
|
5
|
+
* against one shape. It is the single seam every engine call crosses, which
|
|
6
|
+
* makes it the one place two rules are enforced: a capability the engine does
|
|
7
|
+
* not declare fails loud with `UNSUPPORTED_CAPABILITY` at the moment of use,
|
|
8
|
+
* and anything an engine throws that is not an `EngineError` is normalized to
|
|
9
|
+
* a non-retryable `ENGINE_FAILURE`, so a crashed engine is an infrastructure
|
|
10
|
+
* failure everywhere and never a retry-eligible test failure.
|
|
11
|
+
*/
|
|
12
|
+
import type { EngineHandle } from './index.ts';
|
|
13
|
+
import { type TargetSession } from './surface.ts';
|
|
14
|
+
export interface EngineSessionOptions {
|
|
15
|
+
readonly engine: EngineHandle | undefined;
|
|
16
|
+
readonly targetName: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Builds one session over an engine. One adapter per attempt; revisions are
|
|
20
|
+
* minted per adapter, so refs can never leak across attempts.
|
|
21
|
+
*/
|
|
22
|
+
export declare function createEngineSession(options: EngineSessionOptions): TargetSession;
|
|
23
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/engine/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAmED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAuJhF"}
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
* the internal `TargetSession` surface over the
|
|
2
|
+
* The engine-to-session adapter. One adapter per attempt satisfies
|
|
3
|
+
* the internal `TargetSession` surface over the engine contract, so the agent
|
|
4
4
|
* tier, the judgment tier, the trace cache, and the fixture graph program
|
|
5
|
-
* against one shape. It is the single seam every
|
|
6
|
-
* makes it the one place two rules are enforced: a capability the
|
|
5
|
+
* against one shape. It is the single seam every engine call crosses, which
|
|
6
|
+
* makes it the one place two rules are enforced: a capability the engine does
|
|
7
7
|
* not declare fails loud with `UNSUPPORTED_CAPABILITY` at the moment of use,
|
|
8
|
-
* and anything
|
|
9
|
-
* a non-retryable `
|
|
8
|
+
* and anything an engine throws that is not an `EngineError` is normalized to
|
|
9
|
+
* a non-retryable `ENGINE_FAILURE`, so a crashed engine is an infrastructure
|
|
10
10
|
* failure everywhere and never a retry-eligible test failure.
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
12
|
+
import { asEngineError, ConfigurationError, E2EError, errorMessage, isForeignE2EError, } from '../internal/errors.js';
|
|
13
|
+
import { EngineError, } from './surface.js';
|
|
14
14
|
/** Located refs are pruned oldest-first past this bound so the map cannot grow unboundedly. */
|
|
15
15
|
const MAX_LOCATED_REFS = 2048;
|
|
16
16
|
/** Revision prefixes: the adapter mints `l<n>` for locate and `b<n>` for observe. */
|
|
17
17
|
const LOCATE_REVISION_PREFIX = 'l';
|
|
18
18
|
const OBSERVE_REVISION_PREFIX = 'b';
|
|
19
19
|
/**
|
|
20
|
-
* Stamps the adapter's revision onto every ref.
|
|
20
|
+
* Stamps the adapter's revision onto every ref. Engines mint stable ids;
|
|
21
21
|
* the adapter owns revisions, so the staleness rule (act on the newest
|
|
22
|
-
* observation only) holds without every
|
|
22
|
+
* observation only) holds without every engine reimplementing it.
|
|
23
23
|
*/
|
|
24
24
|
function stampRevision(node, revision) {
|
|
25
25
|
return {
|
|
@@ -30,7 +30,7 @@ function stampRevision(node, revision) {
|
|
|
30
30
|
: { children: node.children.map((child) => stampRevision(child, revision)) }),
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
|
-
/** Wraps
|
|
33
|
+
/** Wraps an engine snapshot's root nodes into the single-root observation tree. */
|
|
34
34
|
function toTree(nodes, revision) {
|
|
35
35
|
const stamped = nodes.map((node) => stampRevision(node, revision));
|
|
36
36
|
const first = stamped[0];
|
|
@@ -49,46 +49,49 @@ function countSecure(nodes) {
|
|
|
49
49
|
return count;
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
52
|
-
* Normalizes what
|
|
52
|
+
* Normalizes what an engine threw onto the error contract. `EngineError`
|
|
53
53
|
* (from any module copy) and runner errors pass through; anything else is the
|
|
54
|
-
*
|
|
54
|
+
* engine failing outside its contract, reported as infrastructure.
|
|
55
55
|
*/
|
|
56
56
|
function normalize(cause, label) {
|
|
57
|
-
if (cause instanceof E2EError || isForeignE2EError(cause) ||
|
|
57
|
+
if (cause instanceof E2EError || isForeignE2EError(cause) || asEngineError(cause) !== undefined) {
|
|
58
58
|
throw cause;
|
|
59
59
|
}
|
|
60
|
-
throw new
|
|
60
|
+
throw new EngineError('ENGINE_FAILURE', `${label} failed: ${errorMessage(cause)}`, {
|
|
61
61
|
retryable: false,
|
|
62
62
|
cause,
|
|
63
63
|
});
|
|
64
64
|
}
|
|
65
|
-
/** The grammar verbs
|
|
66
|
-
function declaredVerbs(
|
|
65
|
+
/** The grammar verbs an engine declaration can honor. */
|
|
66
|
+
function declaredVerbs(engine) {
|
|
67
67
|
const verbs = new Set();
|
|
68
|
-
if (
|
|
68
|
+
if (engine?.perform !== undefined) {
|
|
69
69
|
for (const verb of ['tap', 'type', 'typeSecret', 'press', 'select'])
|
|
70
70
|
verbs.add(verb);
|
|
71
71
|
}
|
|
72
|
-
if (
|
|
72
|
+
if (engine?.swipe !== undefined)
|
|
73
73
|
verbs.add('scroll');
|
|
74
|
-
if (
|
|
74
|
+
if (engine?.app?.navigate !== undefined)
|
|
75
75
|
verbs.add('navigate');
|
|
76
76
|
return verbs;
|
|
77
77
|
}
|
|
78
78
|
/**
|
|
79
|
-
* Builds one session over
|
|
79
|
+
* Builds one session over an engine. One adapter per attempt; revisions are
|
|
80
80
|
* minted per adapter, so refs can never leak across attempts.
|
|
81
81
|
*/
|
|
82
|
-
export function
|
|
83
|
-
const {
|
|
82
|
+
export function createEngineSession(options) {
|
|
83
|
+
const { engine, targetName } = options;
|
|
84
84
|
let revision = 0;
|
|
85
85
|
let viewport = { width: 1, height: 1, scale: 1 };
|
|
86
86
|
const unsupported = (what) => {
|
|
87
|
-
|
|
87
|
+
const remedy = engine === undefined
|
|
88
|
+
? 'the target declares no engine; add one, such as playwright({ url }) from @e2edev/playwright or agentDevice({ platform, app }) from @e2edev/agent-device'
|
|
89
|
+
: `engine ${engine.name} does not implement it`;
|
|
90
|
+
throw new ConfigurationError('UNSUPPORTED_CAPABILITY', `target "${targetName}" has no engine capability for ${what}: ${remedy}`);
|
|
88
91
|
};
|
|
89
92
|
/**
|
|
90
93
|
* One declared member as a guarded call: capability-checked at the moment of
|
|
91
|
-
* use and error-normalized. `
|
|
94
|
+
* use and error-normalized. `defineEngine` bound every member to its body,
|
|
92
95
|
* so the function is called as is.
|
|
93
96
|
*/
|
|
94
97
|
const guard = (what, fn) => async (...args) => {
|
|
@@ -103,14 +106,14 @@ export function createBackendSession(options) {
|
|
|
103
106
|
};
|
|
104
107
|
// Located nodes, cached by id so `read(ref)` answers from the resolution
|
|
105
108
|
// that minted the ref. A read against an older resolution is NODE_STALE,
|
|
106
|
-
// which the engine treats as retryable: it re-resolves and reads again.
|
|
109
|
+
// which the locator engine treats as retryable: it re-resolves and reads again.
|
|
107
110
|
let locateRevision = 0;
|
|
108
111
|
const located = new Map();
|
|
109
|
-
const stale = (ref) => new
|
|
112
|
+
const stale = (ref) => new EngineError('NODE_STALE', `node ${ref.id} is stale; re-resolve`, { retryable: true });
|
|
110
113
|
/**
|
|
111
|
-
* A located ref from a superseded resolution never reaches the
|
|
112
|
-
* Observation refs are exempt: they are checked by the
|
|
113
|
-
* newest observation, and
|
|
114
|
+
* A located ref from a superseded resolution never reaches the engine.
|
|
115
|
+
* Observation refs are exempt: they are checked by the engine against its
|
|
116
|
+
* newest observation, and an engine with stable ids may legitimately hand
|
|
114
117
|
* the same id to both tiers.
|
|
115
118
|
*/
|
|
116
119
|
const rejectSupersededLocate = (ref) => {
|
|
@@ -120,35 +123,35 @@ export function createBackendSession(options) {
|
|
|
120
123
|
if (known !== undefined && known.ref.revision !== ref.revision)
|
|
121
124
|
throw stale(ref);
|
|
122
125
|
};
|
|
123
|
-
const locateRaw = guard('locators (screen)',
|
|
124
|
-
const observeRaw = guard('observation',
|
|
126
|
+
const locateRaw = guard('locators (screen)', engine?.locate);
|
|
127
|
+
const observeRaw = guard('observation', engine?.observe);
|
|
125
128
|
const app = {
|
|
126
|
-
open: guard('navigation',
|
|
127
|
-
back: guard('back navigation',
|
|
128
|
-
restart: guard('app restart',
|
|
129
|
-
clearState: guard('app state clearing',
|
|
129
|
+
open: guard('navigation', engine?.app?.navigate),
|
|
130
|
+
back: guard('back navigation', engine?.app?.back),
|
|
131
|
+
restart: guard('app restart', engine?.app?.restart),
|
|
132
|
+
clearState: guard('app state clearing', engine?.app?.clearState),
|
|
130
133
|
};
|
|
131
134
|
const artifacts = {
|
|
132
|
-
screenshot: guard('screenshots',
|
|
133
|
-
...(
|
|
135
|
+
screenshot: guard('screenshots', engine?.artifacts?.screenshot),
|
|
136
|
+
...(engine?.artifacts?.startTrace === undefined || engine.artifacts.stopTrace === undefined
|
|
134
137
|
? {}
|
|
135
138
|
: {
|
|
136
|
-
startTrace: guard('traces',
|
|
137
|
-
stopTrace: guard('traces',
|
|
139
|
+
startTrace: guard('traces', engine.artifacts.startTrace),
|
|
140
|
+
stopTrace: guard('traces', engine.artifacts.stopTrace),
|
|
138
141
|
}),
|
|
139
142
|
};
|
|
140
143
|
let ended = false;
|
|
141
144
|
return {
|
|
142
|
-
verbs: declaredVerbs(
|
|
145
|
+
verbs: declaredVerbs(engine),
|
|
143
146
|
app,
|
|
144
147
|
artifacts,
|
|
145
|
-
...(
|
|
148
|
+
...(engine?.state === undefined
|
|
146
149
|
? {}
|
|
147
150
|
: {
|
|
148
|
-
captureState: guard('state capture',
|
|
149
|
-
restoreState: guard('state restore',
|
|
151
|
+
captureState: guard('state capture', engine.state.capture),
|
|
152
|
+
restoreState: guard('state restore', engine.state.restore),
|
|
150
153
|
}),
|
|
151
|
-
...(
|
|
154
|
+
...(engine?.url === undefined ? {} : { url: guard('the current URL', engine.url) }),
|
|
152
155
|
async observe(operation, observeOptions) {
|
|
153
156
|
const snapshot = await observeRaw(operation, observeOptions?.pixels === true ? { pixels: true } : {});
|
|
154
157
|
if (snapshot.viewport !== undefined)
|
|
@@ -169,7 +172,11 @@ export function createBackendSession(options) {
|
|
|
169
172
|
};
|
|
170
173
|
},
|
|
171
174
|
async locate(expression, operation) {
|
|
172
|
-
|
|
175
|
+
// An engine answers `visible` inside scopes, filters, and indices, where
|
|
176
|
+
// only it can; the harness holds a top-level query to the same predicate
|
|
177
|
+
// so a direct query never resolves to a node its own state calls hidden.
|
|
178
|
+
const nodes = (await locateRaw(expression, operation)).filter((node) => !(expression.kind === 'query' && expression.query.visible === true) ||
|
|
179
|
+
node.states?.hidden !== true);
|
|
173
180
|
locateRevision += 1;
|
|
174
181
|
const locateRev = `${LOCATE_REVISION_PREFIX}${locateRevision}`;
|
|
175
182
|
const refs = [];
|
|
@@ -187,7 +194,7 @@ export function createBackendSession(options) {
|
|
|
187
194
|
return refs;
|
|
188
195
|
},
|
|
189
196
|
async read(ref) {
|
|
190
|
-
if (
|
|
197
|
+
if (engine?.locate === undefined)
|
|
191
198
|
unsupported('locators (screen)');
|
|
192
199
|
const node = located.get(ref.id);
|
|
193
200
|
if (node === undefined || node.ref.revision !== ref.revision)
|
|
@@ -198,16 +205,16 @@ export function createBackendSession(options) {
|
|
|
198
205
|
rejectSupersededLocate(ref);
|
|
199
206
|
if (action.kind === 'dragTo')
|
|
200
207
|
rejectSupersededLocate(action.target);
|
|
201
|
-
await guard(`the "${action.kind}" action`,
|
|
208
|
+
await guard(`the "${action.kind}" action`, engine?.perform)(ref, action, operation);
|
|
202
209
|
},
|
|
203
|
-
swipe: guard('swipe gestures',
|
|
204
|
-
// The
|
|
210
|
+
swipe: guard('swipe gestures', engine?.swipe),
|
|
211
|
+
// The engine outlives the attempt; only the per-attempt isolation ends
|
|
205
212
|
// here, exactly once. dispose() belongs to the worker.
|
|
206
213
|
close: guard('attempt end', async (operation) => {
|
|
207
214
|
if (ended)
|
|
208
215
|
return;
|
|
209
216
|
ended = true;
|
|
210
|
-
await
|
|
217
|
+
await engine?.endAttempt?.({ signal: operation.signal, timeoutMs: operation.timeoutMs });
|
|
211
218
|
}),
|
|
212
219
|
};
|
|
213
220
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/engine/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The internal session surface the harness consumes for one attempt. It is
|
|
3
|
-
* produced only by `
|
|
3
|
+
* produced only by `createEngineSession` (the engine-to-session adapter) and
|
|
4
4
|
* is never part of the public API: the locator engine, the agent tiers, and
|
|
5
5
|
* the attempt executor program against it so that revision minting, staleness
|
|
6
6
|
* checks, and capability gating exist exactly once.
|
|
@@ -9,17 +9,17 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import type { Momentum, ScrollDirection } from '../types.ts';
|
|
11
11
|
import type { LocatorAction, LocatorExpression, NodeRef, ObservationPixels, OperationContext, SemanticNode } from './contract.ts';
|
|
12
|
-
import type {
|
|
12
|
+
import type { EngineObserveOptions, EngineState } from './index.ts';
|
|
13
13
|
export type * from './contract.ts';
|
|
14
|
-
export {
|
|
15
|
-
export type {
|
|
14
|
+
export { EngineError } from './contract.ts';
|
|
15
|
+
export type { EngineObserveOptions, EngineState } from './index.ts';
|
|
16
16
|
/**
|
|
17
17
|
* The agent's action grammar, by verb. A session declares which verbs its
|
|
18
|
-
*
|
|
18
|
+
* engine can honor so the agent offers the model exactly that vocabulary.
|
|
19
19
|
*/
|
|
20
20
|
export type GrammarVerb = 'tap' | 'type' | 'typeSecret' | 'press' | 'select' | 'scroll' | 'navigate';
|
|
21
21
|
export interface Observation {
|
|
22
|
-
/** Location captured with this tree, when the
|
|
22
|
+
/** Location captured with this tree, when the engine can provide it. */
|
|
23
23
|
readonly url?: string;
|
|
24
24
|
readonly revision: string;
|
|
25
25
|
readonly capturedAt: string;
|
|
@@ -31,7 +31,7 @@ export interface Observation {
|
|
|
31
31
|
readonly scale: number;
|
|
32
32
|
};
|
|
33
33
|
/**
|
|
34
|
-
* What the
|
|
34
|
+
* What the engine masked against what it saw. Pixel completeness is judged
|
|
35
35
|
* downstream from these counts: fewer masked regions than secure nodes
|
|
36
36
|
* withholds the pixels and keeps the tree.
|
|
37
37
|
*/
|
|
@@ -59,10 +59,10 @@ export interface SessionArtifacts {
|
|
|
59
59
|
stopTrace?(operation: OperationContext): Promise<string>;
|
|
60
60
|
}
|
|
61
61
|
export interface TargetSession {
|
|
62
|
-
/** Grammar verbs the
|
|
62
|
+
/** Grammar verbs the engine can honor, read from its declaration. */
|
|
63
63
|
readonly verbs: ReadonlySet<GrammarVerb>;
|
|
64
64
|
/** Captures one atomic agent observation; the harness redacts it downstream. */
|
|
65
|
-
observe(operation: OperationContext, options?:
|
|
65
|
+
observe(operation: OperationContext, options?: EngineObserveOptions): Promise<Observation>;
|
|
66
66
|
/** Resolves immediately; the runner owns query polling and strictness. */
|
|
67
67
|
locate(expression: LocatorExpression, operation: OperationContext): Promise<readonly NodeRef[]>;
|
|
68
68
|
/** Reads one node from the resolution that minted its ref. */
|
|
@@ -74,9 +74,9 @@ export interface TargetSession {
|
|
|
74
74
|
readonly app: SessionApp;
|
|
75
75
|
readonly artifacts: SessionArtifacts;
|
|
76
76
|
/** Captures immutable app state for a session envelope. */
|
|
77
|
-
captureState?(operation: OperationContext): Promise<
|
|
77
|
+
captureState?(operation: OperationContext): Promise<EngineState>;
|
|
78
78
|
/** Replaces current app state with an immutable captured state. */
|
|
79
|
-
restoreState?(state:
|
|
79
|
+
restoreState?(state: EngineState, operation: OperationContext): Promise<void>;
|
|
80
80
|
/** Current top-level URL of the surface, when the platform has one. */
|
|
81
81
|
url?(operation: OperationContext): Promise<string>;
|
|
82
82
|
/** Ends the attempt's isolation within the operation's budget. Idempotent. */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../../src/engine/surface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The internal session surface the harness consumes for one attempt. It is
|
|
3
|
-
* produced only by `
|
|
3
|
+
* produced only by `createEngineSession` (the engine-to-session adapter) and
|
|
4
4
|
* is never part of the public API: the locator engine, the agent tiers, and
|
|
5
5
|
* the attempt executor program against it so that revision minting, staleness
|
|
6
6
|
* checks, and capability gating exist exactly once.
|
|
7
7
|
*
|
|
8
8
|
* Re-exports the contract vocabulary so internal modules import one path.
|
|
9
9
|
*/
|
|
10
|
-
export {
|
|
10
|
+
export { EngineError } from './contract.js';
|
|
11
11
|
//# sourceMappingURL=surface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface.js","sourceRoot":"","sources":["../../src/engine/surface.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAcH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../src/engine/timing.ts"],"names":[],"mappings":"AAIA,uFAAuF;AACvF,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAElH"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Cancellation with the engine error taxonomy and shared lifecycle mechanics. */
|
|
2
|
+
import { withAbort } from '../internal/time.js';
|
|
3
|
+
import { EngineError } from './contract.js';
|
|
4
|
+
/** Checks cancellation before dispatching a thunk, then abandons the wait on abort. */
|
|
5
|
+
export function raceAbort(work, signal, label) {
|
|
6
|
+
return withAbort(work, signal, () => new EngineError('CANCELLED', `${label} cancelled`, { retryable: false }));
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=timing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timing.js","sourceRoot":"","sources":["../../src/engine/timing.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,uFAAuF;AACvF,MAAM,UAAU,SAAS,CAAI,IAAqC,EAAE,MAAmB,EAAE,KAAa;IACpG,OAAO,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC,WAAW,EAAE,GAAG,KAAK,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACjH,CAAC"}
|
package/dist/expect/async.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Runner-owned polling locator assertions
|
|
1
|
+
/** Runner-owned polling locator assertions. */
|
|
2
2
|
import type { LocatorInternals } from '../locator/screen.ts';
|
|
3
3
|
import type { AsyncExpectation } from '../types.ts';
|
|
4
4
|
export declare function createAsyncExpectation(internals: LocatorInternals): AsyncExpectation;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../../src/expect/async.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../../src/expect/async.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAQ/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAa,MAAM,aAAa,CAAC;AAsS/D,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,gBAAgB,GAAG,gBAAgB,CAEpF"}
|