@e2edev/e2e 0.12.0 → 0.13.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 +4 -4
- package/dist/agent/act.d.ts +13 -7
- package/dist/agent/act.d.ts.map +1 -1
- package/dist/agent/act.js +122 -730
- package/dist/agent/act.js.map +1 -1
- package/dist/agent/action-dispatcher.d.ts +98 -0
- package/dist/agent/action-dispatcher.d.ts.map +1 -0
- package/dist/agent/action-dispatcher.js +319 -0
- package/dist/agent/action-dispatcher.js.map +1 -0
- package/dist/agent/actions.d.ts +16 -1
- package/dist/agent/actions.d.ts.map +1 -1
- package/dist/agent/actions.js +5 -1
- package/dist/agent/actions.js.map +1 -1
- package/dist/agent/default-agent.d.ts +1 -1
- package/dist/agent/default-agent.d.ts.map +1 -1
- package/dist/agent/default-agent.js +30 -9
- package/dist/agent/default-agent.js.map +1 -1
- package/dist/agent/executor.d.ts +30 -2
- package/dist/agent/executor.d.ts.map +1 -1
- package/dist/agent/executor.js.map +1 -1
- package/dist/agent/index.js +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/invocation.d.ts +4 -9
- package/dist/agent/invocation.d.ts.map +1 -1
- package/dist/agent/invocation.js +1 -6
- package/dist/agent/invocation.js.map +1 -1
- package/dist/agent/model/sdk.d.ts +1 -1
- package/dist/agent/model/sdk.js +1 -1
- package/dist/agent/observation-feed.d.ts +123 -0
- package/dist/agent/observation-feed.d.ts.map +1 -0
- package/dist/agent/observation-feed.js +281 -0
- package/dist/agent/observation-feed.js.map +1 -0
- package/dist/agent/observation.d.ts +14 -1
- package/dist/agent/observation.d.ts.map +1 -1
- package/dist/agent/observation.js +58 -2
- package/dist/agent/observation.js.map +1 -1
- package/dist/agent/operation-queue.d.ts +21 -0
- package/dist/agent/operation-queue.d.ts.map +1 -0
- package/dist/agent/operation-queue.js +27 -0
- package/dist/agent/operation-queue.js.map +1 -0
- package/dist/agent/pixels.d.ts +21 -0
- package/dist/agent/pixels.d.ts.map +1 -0
- package/dist/agent/pixels.js +85 -0
- package/dist/agent/pixels.js.map +1 -0
- package/dist/agent/point-tap.d.ts +52 -0
- package/dist/agent/point-tap.d.ts.map +1 -0
- package/dist/agent/point-tap.js +88 -0
- package/dist/agent/point-tap.js.map +1 -0
- package/dist/agent/primitives.d.ts +7 -1
- package/dist/agent/primitives.d.ts.map +1 -1
- package/dist/agent/primitives.js +96 -25
- package/dist/agent/primitives.js.map +1 -1
- package/dist/agent/replay.d.ts +8 -3
- package/dist/agent/replay.d.ts.map +1 -1
- package/dist/agent/replay.js +44 -15
- package/dist/agent/replay.js.map +1 -1
- package/dist/agent/screen-update.d.ts +50 -18
- package/dist/agent/screen-update.d.ts.map +1 -1
- package/dist/agent/screen-update.js +76 -94
- package/dist/agent/screen-update.js.map +1 -1
- package/dist/agent/step-accounting.d.ts +95 -0
- package/dist/agent/step-accounting.d.ts.map +1 -0
- package/dist/agent/step-accounting.js +201 -0
- package/dist/agent/step-accounting.js.map +1 -0
- package/dist/agent/step-cache.d.ts.map +1 -1
- package/dist/agent/step-cache.js +2 -2
- package/dist/agent/step-cache.js.map +1 -1
- package/dist/agent/tool-loop.d.ts.map +1 -1
- package/dist/agent/tool-loop.js +9 -2
- package/dist/agent/tool-loop.js.map +1 -1
- package/dist/agent/transcript-compaction.d.ts +38 -0
- package/dist/agent/transcript-compaction.d.ts.map +1 -0
- package/dist/agent/transcript-compaction.js +165 -0
- package/dist/agent/transcript-compaction.js.map +1 -0
- package/dist/cache/recorder.d.ts.map +1 -1
- package/dist/cache/recorder.js +20 -0
- package/dist/cache/recorder.js.map +1 -1
- package/dist/cache/trace.d.ts +28 -1
- package/dist/cache/trace.d.ts.map +1 -1
- package/dist/cache/trace.js +44 -0
- package/dist/cache/trace.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +51 -25
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/engine-versions.json +1 -1
- package/dist/cli/init/engines.d.ts +10 -1
- package/dist/cli/init/engines.d.ts.map +1 -1
- package/dist/cli/init/engines.js +10 -1
- package/dist/cli/init/engines.js.map +1 -1
- package/dist/cli/init/gateways.js +3 -3
- package/dist/cli/init/mcp-config.js +1 -1
- package/dist/cli/init/mcp-config.js.map +1 -1
- package/dist/cli/init/scaffold.js +1 -1
- package/dist/cli/init.js +2 -2
- package/dist/cli/init.js.map +1 -1
- package/dist/collect/collect.d.ts +8 -3
- package/dist/collect/collect.d.ts.map +1 -1
- package/dist/collect/collect.js +29 -5
- package/dist/collect/collect.js.map +1 -1
- package/dist/collect/registry.d.ts +20 -5
- package/dist/collect/registry.d.ts.map +1 -1
- package/dist/collect/registry.js +139 -54
- package/dist/collect/registry.js.map +1 -1
- package/dist/collect/select.js +3 -1
- package/dist/collect/select.js.map +1 -1
- package/dist/config/agent.d.ts +1 -7
- package/dist/config/agent.d.ts.map +1 -1
- package/dist/config/agent.js +5 -8
- package/dist/config/agent.js.map +1 -1
- package/dist/config/app.d.ts +24 -2
- package/dist/config/app.d.ts.map +1 -1
- package/dist/config/app.js +82 -15
- package/dist/config/app.js.map +1 -1
- package/dist/config/resolve.d.ts +15 -1
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +23 -5
- package/dist/config/resolve.js.map +1 -1
- package/dist/engine/contract.d.ts +9 -2
- package/dist/engine/contract.d.ts.map +1 -1
- package/dist/engine/contract.js.map +1 -1
- package/dist/engine/index.d.ts +18 -4
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +8 -0
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/session.d.ts.map +1 -1
- package/dist/engine/session.js +3 -0
- package/dist/engine/session.js.map +1 -1
- package/dist/engine/surface.d.ts +6 -2
- package/dist/engine/surface.d.ts.map +1 -1
- package/dist/engine/surface.js.map +1 -1
- package/dist/expect/attempt.d.ts +15 -0
- package/dist/expect/attempt.d.ts.map +1 -0
- package/dist/expect/attempt.js +33 -0
- package/dist/expect/attempt.js.map +1 -0
- package/dist/expect/index.d.ts +7 -5
- package/dist/expect/index.d.ts.map +1 -1
- package/dist/expect/index.js +8 -1
- package/dist/expect/index.js.map +1 -1
- package/dist/expect/poll.d.ts +5 -0
- package/dist/expect/poll.d.ts.map +1 -0
- package/dist/expect/poll.js +118 -0
- package/dist/expect/poll.js.map +1 -0
- package/dist/expect/values.d.ts.map +1 -1
- package/dist/expect/values.js +6 -1
- package/dist/expect/values.js.map +1 -1
- package/dist/explore/body.d.ts.map +1 -1
- package/dist/explore/body.js +2 -0
- package/dist/explore/body.js.map +1 -1
- package/dist/explore/executor.js +16 -11
- package/dist/explore/executor.js.map +1 -1
- package/dist/explore/index.d.ts +3 -2
- package/dist/explore/index.d.ts.map +1 -1
- package/dist/explore/index.js +5 -5
- package/dist/explore/index.js.map +1 -1
- package/dist/explore/plan.d.ts.map +1 -1
- package/dist/explore/plan.js +16 -5
- package/dist/explore/plan.js.map +1 -1
- package/dist/explore/progress.d.ts +43 -0
- package/dist/explore/progress.d.ts.map +1 -0
- package/dist/explore/progress.js +9 -0
- package/dist/explore/progress.js.map +1 -0
- package/dist/explore/state.d.ts +13 -12
- package/dist/explore/state.d.ts.map +1 -1
- package/dist/explore/state.js +28 -11
- package/dist/explore/state.js.map +1 -1
- package/dist/internal/brands.d.ts +2 -0
- package/dist/internal/brands.d.ts.map +1 -1
- package/dist/internal/brands.js +2 -0
- package/dist/internal/brands.js.map +1 -1
- package/dist/internal/geometry.d.ts +13 -0
- package/dist/internal/geometry.d.ts.map +1 -0
- package/dist/internal/geometry.js +16 -0
- package/dist/internal/geometry.js.map +1 -0
- package/dist/internal/urls.d.ts +6 -0
- package/dist/internal/urls.d.ts.map +1 -1
- package/dist/internal/urls.js +28 -0
- package/dist/internal/urls.js.map +1 -1
- package/dist/mcp/catalog.d.ts +5 -4
- package/dist/mcp/catalog.d.ts.map +1 -1
- package/dist/mcp/catalog.js +5 -36
- package/dist/mcp/catalog.js.map +1 -1
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +4 -2
- package/dist/mcp/session.js.map +1 -1
- package/dist/report/list-explore.d.ts +109 -0
- package/dist/report/list-explore.d.ts.map +1 -0
- package/dist/report/list-explore.js +388 -0
- package/dist/report/list-explore.js.map +1 -0
- package/dist/report/list.d.ts +21 -0
- package/dist/report/list.d.ts.map +1 -1
- package/dist/report/list.js +79 -3
- package/dist/report/list.js.map +1 -1
- package/dist/report/running-tree.d.ts +7 -7
- package/dist/report/running-tree.d.ts.map +1 -1
- package/dist/report/running-tree.js +12 -13
- package/dist/report/running-tree.js.map +1 -1
- package/dist/run/app-ports.d.ts +17 -0
- package/dist/run/app-ports.d.ts.map +1 -0
- package/dist/run/app-ports.js +74 -0
- package/dist/run/app-ports.js.map +1 -0
- package/dist/run/events.d.ts +10 -5
- package/dist/run/events.d.ts.map +1 -1
- package/dist/run/events.js.map +1 -1
- package/dist/run/execute.d.ts.map +1 -1
- package/dist/run/execute.js +23 -6
- package/dist/run/execute.js.map +1 -1
- package/dist/run/extended-fixtures.d.ts +33 -0
- package/dist/run/extended-fixtures.d.ts.map +1 -0
- package/dist/run/extended-fixtures.js +91 -0
- package/dist/run/extended-fixtures.js.map +1 -0
- package/dist/run/fixtures.d.ts.map +1 -1
- package/dist/run/fixtures.js +17 -4
- package/dist/run/fixtures.js.map +1 -1
- package/dist/run/managed-process.d.ts +18 -0
- package/dist/run/managed-process.d.ts.map +1 -1
- package/dist/run/managed-process.js +101 -6
- package/dist/run/managed-process.js.map +1 -1
- package/dist/run/realm.d.ts +5 -4
- package/dist/run/realm.d.ts.map +1 -1
- package/dist/run/realm.js +8 -7
- package/dist/run/realm.js.map +1 -1
- package/dist/run/runner.d.ts +9 -3
- package/dist/run/runner.d.ts.map +1 -1
- package/dist/run/runner.js +10 -5
- package/dist/run/runner.js.map +1 -1
- package/dist/run/worker/entry.js +2 -1
- package/dist/run/worker/entry.js.map +1 -1
- package/dist/run/worker/protocol.d.ts +7 -1
- package/dist/run/worker/protocol.d.ts.map +1 -1
- package/dist/run/worker/protocol.js.map +1 -1
- package/dist/types.d.ts +69 -13
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -3
- package/skills/e2e/SKILL.md +4 -5
- package/skills/e2e/references/agent.md +25 -10
- package/skills/e2e/references/debugging.md +5 -5
- package/skills/e2e/references/explore.md +13 -7
- package/skills/e2e/references/mcp.md +3 -3
- package/skills/e2e/references/running.md +21 -17
- package/skills/e2e/references/setup.md +25 -12
- package/skills/e2e/references/writing-tests.md +12 -5
- package/dist/agent/model/router.d.ts +0 -36
- package/dist/agent/model/router.d.ts.map +0 -1
- package/dist/agent/model/router.js +0 -45
- package/dist/agent/model/router.js.map +0 -1
- package/dist/explore/reporter.d.ts +0 -11
- package/dist/explore/reporter.d.ts.map +0 -1
- package/dist/explore/reporter.js +0 -54
- package/dist/explore/reporter.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pixels.js","sourceRoot":"","sources":["../../src/agent/pixels.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Point taps: how a viewport point an executor names is routed onto the
|
|
3
|
+
* tree, and how the result reads back. A point that a listed, enabled
|
|
4
|
+
* control contains is tapped by that control's id, so policy, stale
|
|
5
|
+
* relocation, and the trace cache see an ordinary tap; a point on nothing
|
|
6
|
+
* listed goes to the engine as a bare point. Coordinates read off a
|
|
7
|
+
* screenshot are scaled into the observation's CSS pixels first.
|
|
8
|
+
*/
|
|
9
|
+
import type { SemanticNode, ViewportPoint } from '../engine/surface.ts';
|
|
10
|
+
import type { ExecutorPixels } from './executor.ts';
|
|
11
|
+
import { type AgentObservation } from './observation.ts';
|
|
12
|
+
/**
|
|
13
|
+
* Scales a point read off a screenshot into the observation's CSS pixels and
|
|
14
|
+
* clamps it to the viewport. `pixels.scale` is image pixels per CSS pixel
|
|
15
|
+
* (3 on a device screenshot, 1 on a CSS-scale capture); the observation's
|
|
16
|
+
* own `viewport.scale` is not consulted, because a device engine reports its
|
|
17
|
+
* geometry in logical points regardless of the image.
|
|
18
|
+
*/
|
|
19
|
+
export declare function imagePointToViewport(point: {
|
|
20
|
+
readonly x: number;
|
|
21
|
+
readonly y: number;
|
|
22
|
+
}, pixels: Pick<ExecutorPixels, 'width' | 'height' | 'scale'>, viewport: {
|
|
23
|
+
readonly width: number;
|
|
24
|
+
readonly height: number;
|
|
25
|
+
}): ViewportPoint;
|
|
26
|
+
export interface HitTest {
|
|
27
|
+
/** The innermost enabled control whose box contains the point, if any. */
|
|
28
|
+
readonly control: SemanticNode | undefined;
|
|
29
|
+
/** The innermost listed node of any role whose box contains the point, if any. */
|
|
30
|
+
readonly under: SemanticNode | undefined;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Finds what the newest observation lists at a viewport point. Innermost
|
|
34
|
+
* wins (deepest in the tree, then the smallest box); hidden nodes and nodes
|
|
35
|
+
* without a box are skipped. Every box is in the top-level viewport's CSS
|
|
36
|
+
* pixels, nested documents included (`SemanticNode.rect`), so a control
|
|
37
|
+
* inside an iframe is found like any other. Only an enabled interactive
|
|
38
|
+
* role counts as the control: tapping a node taps its center, which is what
|
|
39
|
+
* the caller asked for only when the node is the control itself, not a
|
|
40
|
+
* paragraph or region that happens to contain the point.
|
|
41
|
+
*/
|
|
42
|
+
export declare function hitTest(observation: AgentObservation, point: ViewportPoint): HitTest;
|
|
43
|
+
/** The observation's own line for a node, as the model already reads it; the id alone when the line was cut. */
|
|
44
|
+
export declare function nodeLine(observation: Pick<AgentObservation, 'text'>, id: string): string;
|
|
45
|
+
/** What one point tap did, for the model that named the point. */
|
|
46
|
+
export declare function describePointTap(input: {
|
|
47
|
+
readonly point: ViewportPoint;
|
|
48
|
+
readonly control: SemanticNode | undefined;
|
|
49
|
+
readonly under: SemanticNode | undefined;
|
|
50
|
+
readonly observation: Pick<AgentObservation, 'text'>;
|
|
51
|
+
}): string;
|
|
52
|
+
//# sourceMappingURL=point-tap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"point-tap.d.ts","sourceRoot":"","sources":["../../src/agent/point-tap.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE5E;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE;IAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EACjD,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,EAC1D,QAAQ,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5D,aAAa,CASf;AAED,MAAM,WAAW,OAAO;IACtB,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC;IAC3C,kFAAkF;IAClF,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,CAAC;CAC1C;AAED;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAgBpF;AAiBD,gHAAgH;AAChH,wBAAgB,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAMxF;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;CACtD,GAAG,MAAM,CAOT"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Point taps: how a viewport point an executor names is routed onto the
|
|
3
|
+
* tree, and how the result reads back. A point that a listed, enabled
|
|
4
|
+
* control contains is tapped by that control's id, so policy, stale
|
|
5
|
+
* relocation, and the trace cache see an ordinary tap; a point on nothing
|
|
6
|
+
* listed goes to the engine as a bare point. Coordinates read off a
|
|
7
|
+
* screenshot are scaled into the observation's CSS pixels first.
|
|
8
|
+
*/
|
|
9
|
+
import { clamp, clampToViewport } from '../internal/geometry.js';
|
|
10
|
+
import { INTERACTIVE_ROLES } from './observation.js';
|
|
11
|
+
/**
|
|
12
|
+
* Scales a point read off a screenshot into the observation's CSS pixels and
|
|
13
|
+
* clamps it to the viewport. `pixels.scale` is image pixels per CSS pixel
|
|
14
|
+
* (3 on a device screenshot, 1 on a CSS-scale capture); the observation's
|
|
15
|
+
* own `viewport.scale` is not consulted, because a device engine reports its
|
|
16
|
+
* geometry in logical points regardless of the image.
|
|
17
|
+
*/
|
|
18
|
+
export function imagePointToViewport(point, pixels, viewport) {
|
|
19
|
+
const scale = pixels.scale > 0 ? pixels.scale : 1;
|
|
20
|
+
return clampToViewport({
|
|
21
|
+
x: clamp(point.x, 0, Math.max(0, pixels.width - 1)) / scale,
|
|
22
|
+
y: clamp(point.y, 0, Math.max(0, pixels.height - 1)) / scale,
|
|
23
|
+
}, viewport);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Finds what the newest observation lists at a viewport point. Innermost
|
|
27
|
+
* wins (deepest in the tree, then the smallest box); hidden nodes and nodes
|
|
28
|
+
* without a box are skipped. Every box is in the top-level viewport's CSS
|
|
29
|
+
* pixels, nested documents included (`SemanticNode.rect`), so a control
|
|
30
|
+
* inside an iframe is found like any other. Only an enabled interactive
|
|
31
|
+
* role counts as the control: tapping a node taps its center, which is what
|
|
32
|
+
* the caller asked for only when the node is the control itself, not a
|
|
33
|
+
* paragraph or region that happens to contain the point.
|
|
34
|
+
*/
|
|
35
|
+
export function hitTest(observation, point) {
|
|
36
|
+
let control;
|
|
37
|
+
let under;
|
|
38
|
+
for (const node of observation.nodes.values()) {
|
|
39
|
+
const rect = node.rect;
|
|
40
|
+
if (rect === undefined || rect.width <= 0 || rect.height <= 0)
|
|
41
|
+
continue;
|
|
42
|
+
if (node.states?.hidden === true)
|
|
43
|
+
continue;
|
|
44
|
+
if (point.x < rect.x || point.x >= rect.x + rect.width)
|
|
45
|
+
continue;
|
|
46
|
+
if (point.y < rect.y || point.y >= rect.y + rect.height)
|
|
47
|
+
continue;
|
|
48
|
+
const candidate = { node, depth: depthOf(node.ref.id, observation.parents), area: rect.width * rect.height };
|
|
49
|
+
if (inner(candidate, under))
|
|
50
|
+
under = candidate;
|
|
51
|
+
if (INTERACTIVE_ROLES.has(node.role ?? '') && node.states?.disabled !== true && inner(candidate, control)) {
|
|
52
|
+
control = candidate;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return { control: control?.node, under: under?.node };
|
|
56
|
+
}
|
|
57
|
+
function inner(candidate, best) {
|
|
58
|
+
if (best === undefined)
|
|
59
|
+
return true;
|
|
60
|
+
if (candidate.depth !== best.depth)
|
|
61
|
+
return candidate.depth > best.depth;
|
|
62
|
+
return candidate.area < best.area;
|
|
63
|
+
}
|
|
64
|
+
function depthOf(id, parents) {
|
|
65
|
+
let depth = 0;
|
|
66
|
+
for (let cursor = parents.get(id); cursor !== undefined; cursor = parents.get(cursor))
|
|
67
|
+
depth += 1;
|
|
68
|
+
return depth;
|
|
69
|
+
}
|
|
70
|
+
/** The observation's own line for a node, as the model already reads it; the id alone when the line was cut. */
|
|
71
|
+
export function nodeLine(observation, id) {
|
|
72
|
+
for (const line of observation.text.split('\n')) {
|
|
73
|
+
const trimmed = line.trimStart();
|
|
74
|
+
if (trimmed.startsWith(`#${id} `) || trimmed === `#${id}`)
|
|
75
|
+
return trimmed;
|
|
76
|
+
}
|
|
77
|
+
return `#${id}`;
|
|
78
|
+
}
|
|
79
|
+
/** What one point tap did, for the model that named the point. */
|
|
80
|
+
export function describePointTap(input) {
|
|
81
|
+
const at = `(${String(input.point.x)}, ${String(input.point.y)})`;
|
|
82
|
+
if (input.control !== undefined) {
|
|
83
|
+
return `Tapped ${nodeLine(input.observation, input.control.ref.id)}, the control at ${at}.`;
|
|
84
|
+
}
|
|
85
|
+
const under = input.under === undefined ? '' : ` (under it: ${nodeLine(input.observation, input.under.ref.id)})`;
|
|
86
|
+
return `Tapped the point ${at}; no listed control is there${under}.`;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=point-tap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"point-tap.js","sourceRoot":"","sources":["../../src/agent/point-tap.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,7 +35,7 @@ export interface GrammarToolOptions {
|
|
|
35
35
|
* (budget, timeout, cancel) propagates out of the tool; the chassis's guard
|
|
36
36
|
* instead turns it into text and ends the loop.
|
|
37
37
|
*/
|
|
38
|
-
readonly guard?: (body: () => Promise<
|
|
38
|
+
readonly guard?: <T>(body: () => Promise<T>) => Promise<T | string>;
|
|
39
39
|
/**
|
|
40
40
|
* Renders screens for the model and remembers what it has seen, so every
|
|
41
41
|
* result after the first reports the changes rather than the whole tree.
|
|
@@ -44,6 +44,12 @@ export interface GrammarToolOptions {
|
|
|
44
44
|
*/
|
|
45
45
|
readonly screen?: ScreenPresenter;
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Every name `createGrammarTools` may hand out. The grammar owns these in the
|
|
49
|
+
* model's vocabulary whatever the engine declares, so a project tool cannot
|
|
50
|
+
* take one: it would be silently shadowed on one engine and live on another.
|
|
51
|
+
*/
|
|
52
|
+
export declare const GRAMMAR_TOOL_NAMES: ReadonlySet<string>;
|
|
47
53
|
/**
|
|
48
54
|
* AI SDK tools over the harness action grammar, limited to the verbs the
|
|
49
55
|
* target's engine declared. A verb the surface cannot honor is not offered
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/agent/primitives.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAGpD,OAAO,EAAsC,KAAK,mBAAmB,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/agent/primitives.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAGpD,OAAO,EAAsC,KAAK,mBAAmB,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAI/G,OAAO,EAAE,eAAe,EAAqB,MAAM,oBAAoB,CAAC;AA2CxE,wEAAwE;AACxE,eAAO,MAAM,aAAa,umBAG4N,CAAC;AAqDvP,wDAAwD;AACxD,MAAM,WAAW,WAAW;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,uEAAuE;IACvE,OAAO,IAAI,WAAW,GAAG,SAAS,CAAC;IACnC,yEAAyE;IACzE,SAAS,IAAI,OAAO,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,CA4C/C;AAED,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IACpE;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;CACnC;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAWjD,CAAC;AAEH;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAsLT;AAED,+EAA+E;AAC/E,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,WAAW,IAAI,IAAI,CAAC;IACpB;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,kBAAkB,CAAC,GAAG,IAAI,CAAC;CAChF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,mBAAmB,EAC5B,KAAK,CAAC,EAAE;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAChE,gBAAgB,CAoBlB"}
|
package/dist/agent/primitives.js
CHANGED
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
import { z } from 'zod';
|
|
12
12
|
import { isRuntimeHardStop, BLOCKABLE_CODES } from './executor.js';
|
|
13
13
|
import { cacheTokenFields, readCost } from './model/sdk.js';
|
|
14
|
+
import { OperationQueue } from './operation-queue.js';
|
|
15
|
+
import { imagePointToViewport } from './point-tap.js';
|
|
14
16
|
import { ScreenPresenter } from './screen-update.js';
|
|
15
17
|
/** Codes the model may pick when concluding; runtime codes are runtime-assigned. */
|
|
16
18
|
const MODEL_ERROR_CODES = [
|
|
@@ -59,6 +61,30 @@ export const VERDICT_RULES = `Verdict rules:
|
|
|
59
61
|
function schemaTool(definition) {
|
|
60
62
|
return definition;
|
|
61
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* A grammar tool: its result is a rendered screen, text or text with the
|
|
66
|
+
* screenshot attached as a file part, so every one encodes its output the
|
|
67
|
+
* same way. A tool that skipped the encoder would hand the model the image
|
|
68
|
+
* bytes as JSON the first time an action ran in pixel mode.
|
|
69
|
+
*/
|
|
70
|
+
function screenTool(definition) {
|
|
71
|
+
return schemaTool({ ...definition, toModelOutput: screenModelOutput });
|
|
72
|
+
}
|
|
73
|
+
function screenModelOutput({ output }) {
|
|
74
|
+
if (typeof output === 'string')
|
|
75
|
+
return { type: 'text', value: output };
|
|
76
|
+
return {
|
|
77
|
+
type: 'content',
|
|
78
|
+
value: [
|
|
79
|
+
{ type: 'text', text: output.text },
|
|
80
|
+
{
|
|
81
|
+
type: 'file',
|
|
82
|
+
data: { type: 'data', data: Buffer.from(output.pixels.data).toString('base64') },
|
|
83
|
+
mediaType: output.pixels.mediaType,
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
};
|
|
87
|
+
}
|
|
62
88
|
/**
|
|
63
89
|
* The `complete_step` verdict tool. A blocked verdict without a blockable
|
|
64
90
|
* code is rejected back to the model, a passed verdict never carries a code,
|
|
@@ -103,6 +129,23 @@ export function createVerdictTool() {
|
|
|
103
129
|
concluded: () => verdict !== undefined,
|
|
104
130
|
};
|
|
105
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* Every name `createGrammarTools` may hand out. The grammar owns these in the
|
|
134
|
+
* model's vocabulary whatever the engine declares, so a project tool cannot
|
|
135
|
+
* take one: it would be silently shadowed on one engine and live on another.
|
|
136
|
+
*/
|
|
137
|
+
export const GRAMMAR_TOOL_NAMES = new Set([
|
|
138
|
+
'observe',
|
|
139
|
+
'tap',
|
|
140
|
+
'type',
|
|
141
|
+
'type_secret',
|
|
142
|
+
'press',
|
|
143
|
+
'select',
|
|
144
|
+
'scroll',
|
|
145
|
+
'navigate',
|
|
146
|
+
'screenshot',
|
|
147
|
+
'tap_at',
|
|
148
|
+
]);
|
|
106
149
|
/**
|
|
107
150
|
* AI SDK tools over the harness action grammar, limited to the verbs the
|
|
108
151
|
* target's engine declared. A verb the surface cannot honor is not offered
|
|
@@ -117,71 +160,71 @@ export function createGrammarTools(context, options = {}) {
|
|
|
117
160
|
const guard = options.guard ?? ((body) => body());
|
|
118
161
|
const screen = options.screen ?? new ScreenPresenter();
|
|
119
162
|
const { verbs } = context.target;
|
|
120
|
-
//
|
|
121
|
-
//
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
};
|
|
163
|
+
// One queue for the tool bodies: an action and its look at the result run
|
|
164
|
+
// together, so a batched turn gets one coherent result per action.
|
|
165
|
+
const queue = new OperationQueue();
|
|
166
|
+
const inOrder = (body) => queue.run(body);
|
|
167
|
+
/**
|
|
168
|
+
* The screen after an action, as the model reads it: the changes since the
|
|
169
|
+
* screen it holds and, once the step is showing pixels, a fresh screenshot.
|
|
170
|
+
*/
|
|
171
|
+
const present = async (lead, expectChange) => screen.present(await context.observe({ pixels: screen.showingPixels }), { lead, expectChange });
|
|
129
172
|
/**
|
|
130
173
|
* Performs one action and reads its result. A failed action still returns
|
|
131
174
|
* the screen, so the model can act on a stale-id or not-found failure at
|
|
132
175
|
* once instead of spending a turn to observe; runtime hard stops propagate
|
|
133
176
|
* to the guard, which ends the loop. The guard runs inside the queue, so a
|
|
134
177
|
* batched call that queued behind a hard stop or a verdict is skipped when
|
|
135
|
-
* its turn comes rather than acted on because it was queued in time.
|
|
178
|
+
* its turn comes rather than acted on because it was queued in time. The
|
|
179
|
+
* action may return its own lead line, for a result only it can describe.
|
|
136
180
|
*/
|
|
137
181
|
const acting = (description, action, expectChange = true) => inOrder(() => guard(async () => {
|
|
182
|
+
let lead = description;
|
|
138
183
|
try {
|
|
139
|
-
await action();
|
|
184
|
+
lead = (await action()) ?? description;
|
|
140
185
|
}
|
|
141
186
|
catch (cause) {
|
|
142
187
|
if (isRuntimeHardStop(cause))
|
|
143
188
|
throw cause;
|
|
144
189
|
const message = cause instanceof Error ? cause.message : String(cause);
|
|
145
|
-
|
|
146
|
-
return screen.update(observation, { lead: `${description} failed: ${message}` });
|
|
190
|
+
return present(`${description} failed: ${message}`);
|
|
147
191
|
}
|
|
148
|
-
|
|
149
|
-
return screen.update(observation, { lead: description, expectChange });
|
|
192
|
+
return present(lead, expectChange);
|
|
150
193
|
}));
|
|
151
194
|
const target = z
|
|
152
195
|
.string()
|
|
153
196
|
.min(1)
|
|
154
197
|
.describe('Node id from any screen in this conversation that is still present, e.g. "n42"');
|
|
155
198
|
const tools = {
|
|
156
|
-
observe:
|
|
199
|
+
observe: screenTool({
|
|
157
200
|
description: 'Look at the screen again and get what changed since the screen you last received. Action results already include their changes, so call this only after waiting for something in progress, never right after an action.',
|
|
158
201
|
inputSchema: z.object({}),
|
|
159
|
-
execute: () => inOrder(() => guard(
|
|
202
|
+
execute: () => inOrder(() => guard(() => present('Observed.', false))),
|
|
160
203
|
}),
|
|
161
204
|
};
|
|
162
205
|
if (verbs.has('tap')) {
|
|
163
|
-
tools['tap'] =
|
|
206
|
+
tools['tap'] = screenTool({
|
|
164
207
|
description: 'Tap or click one node. The result waits for the effect (a navigation, a route change, a submit) and reports what changed.',
|
|
165
208
|
inputSchema: z.object({ target }),
|
|
166
209
|
execute: ({ target: id }) => acting(`Tapped #${id}.`, () => context.actions.tap({ id })),
|
|
167
210
|
});
|
|
168
211
|
}
|
|
169
212
|
if (verbs.has('type')) {
|
|
170
|
-
tools['type'] =
|
|
213
|
+
tools['type'] = screenTool({
|
|
171
214
|
description: 'Type a plain-text value into one input node, replacing its current value. Several fields can be typed in one turn.',
|
|
172
215
|
inputSchema: z.object({ target, value: z.string() }),
|
|
173
216
|
execute: ({ target: id, value }) => acting(`Typed into #${id}.`, () => context.actions.type({ id }, value)),
|
|
174
217
|
});
|
|
175
218
|
}
|
|
176
219
|
if (verbs.has('press')) {
|
|
177
|
-
tools['press'] =
|
|
220
|
+
tools['press'] = screenTool({
|
|
178
221
|
description: 'Send one key (e.g. "Enter", "Escape", "Tab") to one node.',
|
|
179
222
|
inputSchema: z.object({ target, key: z.string().min(1).max(64) }),
|
|
180
223
|
execute: ({ target: id, key }) => acting(`Pressed ${key} on #${id}.`, () => context.actions.press({ id }, key), !movesFocusOnly(key)),
|
|
181
224
|
});
|
|
182
225
|
}
|
|
183
226
|
if (verbs.has('select')) {
|
|
184
|
-
tools['select'] =
|
|
227
|
+
tools['select'] = screenTool({
|
|
185
228
|
description: 'Pick one option from a select-like control by its visible label.',
|
|
186
229
|
inputSchema: z.object({ target, value: z.string().min(1) }),
|
|
187
230
|
execute: ({ target: id, value }) => acting(`Selected "${value}" in #${id}.`, () => context.actions.select({ id }, value)),
|
|
@@ -208,28 +251,56 @@ export function createGrammarTools(context, options = {}) {
|
|
|
208
251
|
const scrolled = (way, count) => count === 1 ? `Scrolled ${way}.` : `Scrolled ${way} ${String(count)} screens.`;
|
|
209
252
|
// Node-targeted scrolling rides `perform`; without it only the viewport scrolls.
|
|
210
253
|
tools['scroll'] = verbs.has('tap')
|
|
211
|
-
?
|
|
254
|
+
? screenTool({
|
|
212
255
|
description: 'Scroll the viewport, or one scrollable node when target is given. The result reports the rows that came into or left the tree.',
|
|
213
256
|
inputSchema: z.object({ direction, target: target.optional(), times }),
|
|
214
257
|
execute: ({ direction: way, target: id, times: count }) => acting(scrolled(way, count ?? 1), () => scrolling(way, id, count ?? 1), false),
|
|
215
258
|
})
|
|
216
|
-
:
|
|
259
|
+
: screenTool({
|
|
217
260
|
description: 'Scroll the viewport. The result reports the rows that came into or left the tree.',
|
|
218
261
|
inputSchema: z.object({ direction, times }),
|
|
219
262
|
execute: ({ direction: way, times: count }) => acting(scrolled(way, count ?? 1), () => scrolling(way, undefined, count ?? 1), false),
|
|
220
263
|
});
|
|
221
264
|
}
|
|
222
265
|
if (verbs.has('navigate')) {
|
|
223
|
-
tools['navigate'] =
|
|
266
|
+
tools['navigate'] = screenTool({
|
|
224
267
|
description: 'Navigate to a URL or app-relative path within the allowed origins.',
|
|
225
268
|
inputSchema: z.object({ url: z.string().min(1) }),
|
|
226
269
|
execute: ({ url }) => acting(`Navigated to ${url}.`, () => context.actions.navigate(url)),
|
|
227
270
|
});
|
|
228
271
|
}
|
|
272
|
+
// The pixel verbs are offered while pixels can still leave the runner. Once
|
|
273
|
+
// a secret was filled in the attempt they could only decline, and a verb
|
|
274
|
+
// that is absent costs the model nothing where one that declines costs a
|
|
275
|
+
// turn. tap_at lands either as a tap by id or as a bare point, so it needs
|
|
276
|
+
// one of the two; screenshot needs only the observation every step has.
|
|
277
|
+
if (!context.pixelsTainted) {
|
|
278
|
+
tools['screenshot'] = screenTool({
|
|
279
|
+
description: 'Attach a screenshot of the current viewport. Use it when the screen lists too little to act on (a canvas, a map, an image, a game, a system sheet) or contradicts what you expect. From then on every action result carries a fresh screenshot too, so you can see what each action did.',
|
|
280
|
+
inputSchema: z.object({}),
|
|
281
|
+
execute: () => inOrder(() => guard(async () => screen.present(await context.observe({ pixels: true })))),
|
|
282
|
+
});
|
|
283
|
+
if (verbs.has('tap') || verbs.has('tapAt')) {
|
|
284
|
+
tools['tap_at'] = screenTool({
|
|
285
|
+
description: 'Tap a point in the latest screenshot, given as pixel coordinates in that image (x from the left edge, y from the top edge). Aim for the center of the target. A listed control under the point is tapped by its id; otherwise the bare point is tapped' +
|
|
286
|
+
(verbs.has('tapAt') ? '.' : ', which this engine cannot do: the point must land on a listed control.') +
|
|
287
|
+
' Last resort: when the screen lists the target, tap it by id.',
|
|
288
|
+
inputSchema: z.object({ x: z.number(), y: z.number() }),
|
|
289
|
+
execute: ({ x, y }) => {
|
|
290
|
+
const shot = screen.latestScreenshot;
|
|
291
|
+
if (shot === undefined) {
|
|
292
|
+
return Promise.resolve('No screenshot has been taken in this step: tap_at coordinates are pixels of the latest screenshot. Call screenshot first, or tap a listed node by id.');
|
|
293
|
+
}
|
|
294
|
+
const point = imagePointToViewport({ x, y }, shot.pixels, shot.viewport);
|
|
295
|
+
return acting(`tap_at (${String(x)}, ${String(y)})`, async () => (await context.actions.tapAt(point)).summary);
|
|
296
|
+
},
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
}
|
|
229
300
|
// Offered only when the step declared secrets and the surface can fill: an
|
|
230
301
|
// empty vocabulary is better than a tool the model can only be rejected on.
|
|
231
302
|
if (verbs.has('typeSecret') && context.step.secrets.length > 0) {
|
|
232
|
-
tools['type_secret'] =
|
|
303
|
+
tools['type_secret'] = screenTool({
|
|
233
304
|
description: 'Fill one declared secret credential into a secure input field; the plaintext never passes through you and never shows on screen. Available: ' +
|
|
234
305
|
context.step.secrets.map((secret) => `"${secret.name}" (${secret.purpose})`).join(', ') +
|
|
235
306
|
'.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/agent/primitives.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/agent/primitives.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/replay.d.ts
CHANGED
|
@@ -11,21 +11,26 @@
|
|
|
11
11
|
* timeout, cancellation) rethrow untouched; they are the step's truth, not a
|
|
12
12
|
* divergence.
|
|
13
13
|
*/
|
|
14
|
-
import type { ActionTrace, TraceTargetDescriptor } from '../cache/trace.ts';
|
|
14
|
+
import type { ActionTrace, TraceTargetDescriptor, TraceViewport } from '../cache/trace.ts';
|
|
15
15
|
import type { SemanticNode } from '../engine/surface.ts';
|
|
16
16
|
import { type ExecutorActions, type ReplayHandOffReason } from './executor.ts';
|
|
17
17
|
/** The nodes of one observation, keyed by their per-observation ids. */
|
|
18
18
|
export type ObservedNodes = ReadonlyMap<string, SemanticNode>;
|
|
19
|
+
/** One look at the screen: its nodes, and the viewport they were laid out in. */
|
|
20
|
+
export interface ObservedScreen {
|
|
21
|
+
readonly nodes: ObservedNodes;
|
|
22
|
+
readonly viewport: TraceViewport;
|
|
23
|
+
}
|
|
19
24
|
/** What the replay engine needs from the dispatch, and nothing more. */
|
|
20
25
|
export interface ReplayHost {
|
|
21
26
|
/** One raw capture, for the looks between retries. */
|
|
22
|
-
observe(): Promise<
|
|
27
|
+
observe(): Promise<ObservedScreen>;
|
|
23
28
|
/**
|
|
24
29
|
* One settled capture — the dispatch's own, so a replayed action never
|
|
25
30
|
* lands on a screen still reacting to the previous one, and the pacing can
|
|
26
31
|
* never drift from the executor-facing observe.
|
|
27
32
|
*/
|
|
28
|
-
observeSettled(): Promise<
|
|
33
|
+
observeSettled(): Promise<ObservedScreen>;
|
|
29
34
|
/** The step's policed action grammar; targets are fresh-observation ids. */
|
|
30
35
|
readonly actions: ExecutorActions;
|
|
31
36
|
readonly signal: AbortSignal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/agent/replay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAkB,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/agent/replay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAkB,qBAAqB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3G,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAEL,KAAK,eAAe,EAEpB,KAAK,mBAAmB,EACzB,MAAM,eAAe,CAAC;AAQvB,wEAAwE;AACxE,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAE9D,iFAAiF;AACjF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC;AAED,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,sDAAsD;IACtD,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;IACnC;;;;OAIG;IACH,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1C,4EAA4E;IAC5E,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,WAAW,IAAI,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,iDAAiD;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;IAC1C,4EAA4E;IAC5E,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAmED,wDAAwD;AACxD,wBAAsB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAwD9F;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,SAAS,qBAAqB,EAAE,EACzC,MAAM,SAAI,GACT,OAAO,CAAC,OAAO,CAAC,CAsBlB"}
|
package/dist/agent/replay.js
CHANGED
|
@@ -59,6 +59,10 @@ function planCall(action, actions) {
|
|
|
59
59
|
};
|
|
60
60
|
case 'navigate':
|
|
61
61
|
return { kind: 'free', invoke: () => actions.navigate(action.url) };
|
|
62
|
+
case 'tapAt':
|
|
63
|
+
return action.within === undefined
|
|
64
|
+
? { kind: 'point', point: action.point, viewport: action.viewport }
|
|
65
|
+
: { kind: 'within', descriptor: action.within.target, fx: action.within.fx, fy: action.within.fy };
|
|
62
66
|
}
|
|
63
67
|
}
|
|
64
68
|
/** Replays one trace until it completes or diverges. */
|
|
@@ -77,14 +81,36 @@ export async function replayTrace(host, trace) {
|
|
|
77
81
|
if (planned.kind === 'gap')
|
|
78
82
|
return stop('gap');
|
|
79
83
|
try {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
84
|
+
switch (planned.kind) {
|
|
85
|
+
case 'targeted': {
|
|
86
|
+
const relocated = await relocate(host, planned.descriptor);
|
|
87
|
+
if (relocated.kind === 'failed')
|
|
88
|
+
return stop(relocated.failure);
|
|
89
|
+
await planned.invoke({ id: relocated.id });
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
case 'free':
|
|
93
|
+
await planned.invoke();
|
|
94
|
+
break;
|
|
95
|
+
case 'point': {
|
|
96
|
+
const { viewport } = await host.observeSettled();
|
|
97
|
+
if (viewport.width !== planned.viewport.width || viewport.height !== planned.viewport.height) {
|
|
98
|
+
return stop('viewport-changed');
|
|
99
|
+
}
|
|
100
|
+
await host.actions.tapAt(planned.point);
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
case 'within': {
|
|
104
|
+
const relocated = await relocate(host, planned.descriptor);
|
|
105
|
+
if (relocated.kind === 'failed')
|
|
106
|
+
return stop(relocated.failure);
|
|
107
|
+
const box = relocated.node.rect;
|
|
108
|
+
// A re-found node without a box gives the point nowhere to land.
|
|
109
|
+
if (box === undefined || box.width <= 0 || box.height <= 0)
|
|
110
|
+
return stop('target-not-found');
|
|
111
|
+
await host.actions.tapAt({ x: box.x + planned.fx * box.width, y: box.y + planned.fy * box.height });
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
88
114
|
}
|
|
89
115
|
}
|
|
90
116
|
catch (cause) {
|
|
@@ -117,7 +143,7 @@ export async function verifyAnchors(host, anchors, waitMs = 0) {
|
|
|
117
143
|
return true;
|
|
118
144
|
const startedMs = Date.now();
|
|
119
145
|
try {
|
|
120
|
-
const present = await pollSettled(host, (nodes) => anchorsPresent(anchors, nodes, host) ? true : undefined);
|
|
146
|
+
const present = await pollSettled(host, ({ nodes }) => anchorsPresent(anchors, nodes, host) ? true : undefined);
|
|
121
147
|
if (present === true)
|
|
122
148
|
return true;
|
|
123
149
|
// The settling backoff covers a slow re-render; the recorded run may have
|
|
@@ -127,7 +153,7 @@ export async function verifyAnchors(host, anchors, waitMs = 0) {
|
|
|
127
153
|
const deadline = startedMs + Math.min(waitMs, Math.max(0, host.remainingMs() - END_WAIT_RESERVE_MS));
|
|
128
154
|
while (Date.now() < deadline && !host.signal.aborted) {
|
|
129
155
|
await sleep(Math.min(END_WAIT_POLL_MS, deadline - Date.now()), host.signal);
|
|
130
|
-
if (anchorsPresent(anchors, await host.observe(), host))
|
|
156
|
+
if (anchorsPresent(anchors, (await host.observe()).nodes, host))
|
|
131
157
|
return true;
|
|
132
158
|
}
|
|
133
159
|
return false;
|
|
@@ -149,9 +175,12 @@ const END_WAIT_RESERVE_MS = 20_000;
|
|
|
149
175
|
*/
|
|
150
176
|
async function relocate(host, descriptor) {
|
|
151
177
|
const options = { redact: host.redact, testIdAttribute: host.testIdAttribute };
|
|
152
|
-
const settled = await pollSettled(host, (nodes) => {
|
|
178
|
+
const settled = await pollSettled(host, ({ nodes }) => {
|
|
153
179
|
const result = relocateDescriptor(descriptor, nodes, options);
|
|
154
|
-
|
|
180
|
+
if (result.kind === 'failed')
|
|
181
|
+
return result.failure === 'target-not-found' ? undefined : result;
|
|
182
|
+
const node = nodes.get(result.id);
|
|
183
|
+
return node === undefined ? undefined : { kind: 'found', id: result.id, node };
|
|
155
184
|
});
|
|
156
185
|
return settled ?? { kind: 'failed', failure: 'target-not-found' };
|
|
157
186
|
}
|
|
@@ -166,9 +195,9 @@ async function relocate(host, descriptor) {
|
|
|
166
195
|
*/
|
|
167
196
|
async function pollSettled(host, probe) {
|
|
168
197
|
const startedMs = Date.now();
|
|
169
|
-
let
|
|
198
|
+
let screen = await host.observeSettled();
|
|
170
199
|
for (let attempt = 0;; attempt += 1) {
|
|
171
|
-
const answer = probe(
|
|
200
|
+
const answer = probe(screen);
|
|
172
201
|
if (answer !== undefined)
|
|
173
202
|
return answer;
|
|
174
203
|
const delay = RETRY_DELAYS_MS[attempt];
|
|
@@ -178,7 +207,7 @@ async function pollSettled(host, probe) {
|
|
|
178
207
|
return undefined;
|
|
179
208
|
}
|
|
180
209
|
await sleep(delay, host.signal);
|
|
181
|
-
|
|
210
|
+
screen = await host.observe();
|
|
182
211
|
}
|
|
183
212
|
}
|
|
184
213
|
/** True when any error in the cause chain reports an unknown commit state. */
|