@eidra-umain/greenlight 0.1.0 → 0.3.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 +66 -3
- package/dist/browser/browser.d.ts +14 -4
- package/dist/browser/browser.d.ts.map +1 -1
- package/dist/browser/browser.js +89 -8
- package/dist/browser/browser.js.map +1 -1
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +161 -118
- package/dist/cli/run.js.map +1 -1
- package/dist/map/adapters/maplibre.d.ts +23 -0
- package/dist/map/adapters/maplibre.d.ts.map +1 -0
- package/dist/map/adapters/maplibre.js +367 -0
- package/dist/map/adapters/maplibre.js.map +1 -0
- package/dist/map/index.d.ts +36 -0
- package/dist/map/index.d.ts.map +1 -0
- package/dist/map/index.js +82 -0
- package/dist/map/index.js.map +1 -0
- package/dist/map/types.d.ts +96 -0
- package/dist/map/types.d.ts.map +1 -0
- package/dist/map/types.js +14 -0
- package/dist/map/types.js.map +1 -0
- package/dist/pilot/a11y-parser.d.ts.map +1 -1
- package/dist/pilot/a11y-parser.js +6 -3
- package/dist/pilot/a11y-parser.js.map +1 -1
- package/dist/pilot/assertions.d.ts +6 -6
- package/dist/pilot/assertions.d.ts.map +1 -1
- package/dist/pilot/assertions.js +267 -40
- package/dist/pilot/assertions.js.map +1 -1
- package/dist/pilot/executor.d.ts +6 -2
- package/dist/pilot/executor.d.ts.map +1 -1
- package/dist/pilot/executor.js +71 -36
- package/dist/pilot/executor.js.map +1 -1
- package/dist/pilot/llm.d.ts.map +1 -1
- package/dist/pilot/llm.js +1 -0
- package/dist/pilot/llm.js.map +1 -1
- package/dist/pilot/locator.d.ts +14 -2
- package/dist/pilot/locator.d.ts.map +1 -1
- package/dist/pilot/locator.js +95 -35
- package/dist/pilot/locator.js.map +1 -1
- package/dist/pilot/message-builder.d.ts.map +1 -1
- package/dist/pilot/message-builder.js +19 -0
- package/dist/pilot/message-builder.js.map +1 -1
- package/dist/pilot/pilot.d.ts +3 -1
- package/dist/pilot/pilot.d.ts.map +1 -1
- package/dist/pilot/pilot.js +106 -14
- package/dist/pilot/pilot.js.map +1 -1
- package/dist/pilot/prompts.d.ts +37 -3
- package/dist/pilot/prompts.d.ts.map +1 -1
- package/dist/pilot/prompts.js +167 -93
- package/dist/pilot/prompts.js.map +1 -1
- package/dist/pilot/providers/anthropic.d.ts +1 -1
- package/dist/pilot/providers/anthropic.d.ts.map +1 -1
- package/dist/pilot/providers/anthropic.js +2 -1
- package/dist/pilot/providers/anthropic.js.map +1 -1
- package/dist/pilot/providers/gemini.d.ts +1 -1
- package/dist/pilot/providers/gemini.d.ts.map +1 -1
- package/dist/pilot/providers/gemini.js +2 -1
- package/dist/pilot/providers/gemini.js.map +1 -1
- package/dist/pilot/providers/index.d.ts +1 -0
- package/dist/pilot/providers/index.d.ts.map +1 -1
- package/dist/pilot/providers/index.js +1 -0
- package/dist/pilot/providers/index.js.map +1 -1
- package/dist/pilot/providers/openai-compatible.d.ts +1 -1
- package/dist/pilot/providers/openai-compatible.d.ts.map +1 -1
- package/dist/pilot/providers/openai-compatible.js +2 -1
- package/dist/pilot/providers/openai-compatible.js.map +1 -1
- package/dist/pilot/providers/types.d.ts +9 -0
- package/dist/pilot/providers/types.d.ts.map +1 -1
- package/dist/pilot/providers/types.js +13 -1
- package/dist/pilot/providers/types.js.map +1 -1
- package/dist/pilot/response-parser.d.ts +13 -1
- package/dist/pilot/response-parser.d.ts.map +1 -1
- package/dist/pilot/response-parser.js +85 -2
- package/dist/pilot/response-parser.js.map +1 -1
- package/dist/pilot/state.d.ts +2 -0
- package/dist/pilot/state.d.ts.map +1 -1
- package/dist/pilot/state.js +12 -1
- package/dist/pilot/state.js.map +1 -1
- package/dist/planner/plan-runner.d.ts +2 -1
- package/dist/planner/plan-runner.d.ts.map +1 -1
- package/dist/planner/plan-runner.js +118 -18
- package/dist/planner/plan-runner.js.map +1 -1
- package/dist/planner/plan-types.d.ts +1 -0
- package/dist/planner/plan-types.d.ts.map +1 -1
- package/dist/reporter/types.d.ts +37 -2
- package/dist/reporter/types.d.ts.map +1 -1
- package/package.json +4 -3
- package/dist/parser/steps.d.ts +0 -13
- package/dist/parser/steps.d.ts.map +0 -1
- package/dist/parser/steps.js +0 -44
- package/dist/parser/steps.js.map +0 -1
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pluggable map adapter interface.
|
|
3
|
+
*
|
|
4
|
+
* Each adapter knows how to detect a specific map library on the page,
|
|
5
|
+
* extract its state, wait for it to be ready, and query rendered features.
|
|
6
|
+
* Implementations live in ./adapters/.
|
|
7
|
+
*
|
|
8
|
+
* All map interaction MUST go through this interface — never access
|
|
9
|
+
* window.__greenlight_map_instance or library-specific APIs directly
|
|
10
|
+
* from outside the adapter. This ensures new map libraries (Leaflet,
|
|
11
|
+
* Mapbox GL, etc.) can be added without changing consuming code.
|
|
12
|
+
*/
|
|
13
|
+
import type { Page } from "playwright";
|
|
14
|
+
/** Geographic coordinate (longitude, latitude). */
|
|
15
|
+
export interface LngLat {
|
|
16
|
+
lng: number;
|
|
17
|
+
lat: number;
|
|
18
|
+
}
|
|
19
|
+
/** Geographic bounding box. */
|
|
20
|
+
export interface LngLatBounds {
|
|
21
|
+
sw: LngLat;
|
|
22
|
+
ne: LngLat;
|
|
23
|
+
}
|
|
24
|
+
/** A feature returned by the map's spatial query API. */
|
|
25
|
+
export interface MapFeature {
|
|
26
|
+
/** Layer ID the feature belongs to. */
|
|
27
|
+
layer: string;
|
|
28
|
+
/** Feature properties (key-value pairs from the source data). */
|
|
29
|
+
properties: Record<string, unknown>;
|
|
30
|
+
/** Geometry type (Point, LineString, Polygon, etc.). */
|
|
31
|
+
geometryType?: string;
|
|
32
|
+
}
|
|
33
|
+
/** Snapshot of the map's current viewport and layer state. */
|
|
34
|
+
export interface MapState {
|
|
35
|
+
/** Which adapter produced this state (e.g. "maplibre", "leaflet", "mapbox"). */
|
|
36
|
+
adapter: string;
|
|
37
|
+
/** Map center coordinate. */
|
|
38
|
+
center: LngLat;
|
|
39
|
+
/** Current zoom level. */
|
|
40
|
+
zoom: number;
|
|
41
|
+
/** Camera bearing in degrees (0 = north). */
|
|
42
|
+
bearing: number;
|
|
43
|
+
/** Camera pitch in degrees (0 = straight down). */
|
|
44
|
+
pitch: number;
|
|
45
|
+
/** Visible bounds of the viewport. */
|
|
46
|
+
bounds: LngLatBounds;
|
|
47
|
+
/** IDs of all layers in the current style. */
|
|
48
|
+
layers: string[];
|
|
49
|
+
/** Whether the map style is fully loaded. */
|
|
50
|
+
styleLoaded: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* A map adapter encapsulates all browser-side interaction with a specific
|
|
54
|
+
* map library. All methods receive a Playwright Page and execute logic
|
|
55
|
+
* inside the browser via page.evaluate().
|
|
56
|
+
*/
|
|
57
|
+
export interface MapAdapter {
|
|
58
|
+
/** Short identifier (e.g. "maplibre", "leaflet", "mapbox"). */
|
|
59
|
+
readonly name: string;
|
|
60
|
+
/**
|
|
61
|
+
* Detect whether this map library is present and has an active instance.
|
|
62
|
+
* Returns true if the map is found on the page.
|
|
63
|
+
*/
|
|
64
|
+
detect(page: Page): Promise<boolean>;
|
|
65
|
+
/**
|
|
66
|
+
* Attach to the map instance on the page.
|
|
67
|
+
* After this call, the adapter can extract state and interact with the map.
|
|
68
|
+
* Throws if no map instance is found.
|
|
69
|
+
*/
|
|
70
|
+
attach(page: Page): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Wait for the map to finish loading tiles and rendering.
|
|
73
|
+
* Resolves when the map is idle and safe to query/screenshot.
|
|
74
|
+
*/
|
|
75
|
+
waitForIdle(page: Page): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Extract the current map viewport state.
|
|
78
|
+
*/
|
|
79
|
+
getState(page: Page): Promise<MapState>;
|
|
80
|
+
/**
|
|
81
|
+
* Query features rendered at a specific pixel coordinate on the canvas.
|
|
82
|
+
* If layers is provided, restrict the query to those layer IDs.
|
|
83
|
+
*/
|
|
84
|
+
queryFeatures(page: Page, point: {
|
|
85
|
+
x: number;
|
|
86
|
+
y: number;
|
|
87
|
+
}, layers?: string[]): Promise<MapFeature[]>;
|
|
88
|
+
/**
|
|
89
|
+
* Query ALL features currently rendered in the viewport.
|
|
90
|
+
* Returns features across all layers (or filtered by layer IDs).
|
|
91
|
+
* Used for assertions like "map shows Örebro" — searches feature
|
|
92
|
+
* properties (e.g. name) across everything visible on the canvas.
|
|
93
|
+
*/
|
|
94
|
+
queryRenderedFeatures(page: Page, layers?: string[]): Promise<MapFeature[]>;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/map/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtC,mDAAmD;AACnD,MAAM,WAAW,MAAM;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;CACX;AAED,+BAA+B;AAC/B,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;CACV;AAED,yDAAyD;AACzD,MAAM,WAAW,UAAU;IAC1B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,8DAA8D;AAC9D,MAAM,WAAW,QAAQ;IACxB,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAA;IACf,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAA;IACf,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAA;IACb,sCAAsC;IACtC,MAAM,EAAE,YAAY,CAAA;IACpB,8CAA8C;IAC9C,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,6CAA6C;IAC7C,WAAW,EAAE,OAAO,CAAA;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IAC1B,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAEpC;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEjC;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEtC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAEvC;;;OAGG;IACH,aAAa,CACZ,IAAI,EAAE,IAAI,EACV,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAC/B,MAAM,CAAC,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IAExB;;;;;OAKG;IACH,qBAAqB,CACpB,IAAI,EAAE,IAAI,EACV,MAAM,CAAC,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;CACxB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pluggable map adapter interface.
|
|
3
|
+
*
|
|
4
|
+
* Each adapter knows how to detect a specific map library on the page,
|
|
5
|
+
* extract its state, wait for it to be ready, and query rendered features.
|
|
6
|
+
* Implementations live in ./adapters/.
|
|
7
|
+
*
|
|
8
|
+
* All map interaction MUST go through this interface — never access
|
|
9
|
+
* window.__greenlight_map_instance or library-specific APIs directly
|
|
10
|
+
* from outside the adapter. This ensures new map libraries (Leaflet,
|
|
11
|
+
* Mapbox GL, etc.) can be added without changing consuming code.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/map/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a11y-parser.d.ts","sourceRoot":"","sources":["../../src/pilot/a11y-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAsBpD,2DAA2D;AAC3D,wBAAgB,eAAe,IAAI,IAAI,CAGtC;AA0CD,MAAM,WAAW,UAAU;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACX;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAuEzD;
|
|
1
|
+
{"version":3,"file":"a11y-parser.d.ts","sourceRoot":"","sources":["../../src/pilot/a11y-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAsBpD,2DAA2D;AAC3D,wBAAgB,eAAe,IAAI,IAAI,CAGtC;AA0CD,MAAM,WAAW,UAAU;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACX;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAuEzD;AA4DD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,MAAM,SAAI,GAAG,MAAM,CAkBpE"}
|
|
@@ -111,7 +111,7 @@ export function parseA11ySnapshot(raw) {
|
|
|
111
111
|
const siblingIndex = siblingCounts.get(siblingKey) ?? 0;
|
|
112
112
|
siblingCounts.set(siblingKey, siblingIndex + 1);
|
|
113
113
|
const structuralPath = `${pathPrefix}/${parsed.role}:${parsed.name}[${String(siblingIndex)}]`;
|
|
114
|
-
const node = buildNode(parsed, structuralPath);
|
|
114
|
+
const node = buildNode(parsed, structuralPath, parent?.node.role);
|
|
115
115
|
if (!parent) {
|
|
116
116
|
rootNodes.push(node);
|
|
117
117
|
}
|
|
@@ -158,8 +158,11 @@ function parseLine(line) {
|
|
|
158
158
|
...(levelAttr ? {} : {}),
|
|
159
159
|
};
|
|
160
160
|
}
|
|
161
|
-
function buildNode(parsed, structuralPath) {
|
|
162
|
-
|
|
161
|
+
function buildNode(parsed, structuralPath, parentRole) {
|
|
162
|
+
// A node is interactive if it has an interactive role, OR if it's a
|
|
163
|
+
// text node inside a radiogroup/listbox (custom radio cards, option lists).
|
|
164
|
+
const isInteractive = INTERACTIVE_ROLES.has(parsed.role)
|
|
165
|
+
|| (parsed.role === "text" && (parentRole === "radiogroup" || parentRole === "listbox"));
|
|
163
166
|
const ref = isInteractive ? getStableRef(structuralPath) : `_${parsed.role}`;
|
|
164
167
|
const node = {
|
|
165
168
|
ref,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a11y-parser.js","sourceRoot":"","sources":["../../src/pilot/a11y-parser.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"a11y-parser.js","sourceRoot":"","sources":["../../src/pilot/a11y-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Assertion execution — validates page state against expected conditions.
|
|
3
3
|
*/
|
|
4
4
|
import type { Page } from "playwright";
|
|
5
|
-
import type { Action, A11yNode } from "../reporter/types.js";
|
|
5
|
+
import type { Action, A11yNode, MapState } from "../reporter/types.js";
|
|
6
|
+
import type { MapAdapter } from "../map/types.js";
|
|
6
7
|
/**
|
|
7
8
|
* Poll an assertion until it passes or the timeout expires.
|
|
8
9
|
* This handles cases where the page is still updating (e.g. dropdown
|
|
@@ -15,13 +16,12 @@ export declare function pollAssertion(check: () => Promise<void>, timeoutMs?: nu
|
|
|
15
16
|
* a timeout to handle async page updates (dropdowns, navigation, etc.).
|
|
16
17
|
* Negative assertions (checking something is absent) run once immediately.
|
|
17
18
|
*/
|
|
18
|
-
export declare function executeAssertion(page: Page, action: Action, a11yTree: A11yNode[]
|
|
19
|
+
export declare function executeAssertion(page: Page, action: Action, a11yTree: A11yNode[], mapContext?: {
|
|
20
|
+
state?: MapState;
|
|
21
|
+
adapter?: MapAdapter;
|
|
22
|
+
}): Promise<void>;
|
|
19
23
|
/** Extract a numeric value from a text string. */
|
|
20
24
|
export declare function extractNumber(text: string): number | null;
|
|
21
|
-
/**
|
|
22
|
-
* Execute a compare assertion: read a current value from the page,
|
|
23
|
-
* compare it against a remembered value using the specified operator.
|
|
24
|
-
*/
|
|
25
25
|
export declare function executeCompareAssertion(page: Page, action: Action, a11yTree: A11yNode[]): Promise<void>;
|
|
26
26
|
export declare function buildAssertionCheck(page: Page, assertion: {
|
|
27
27
|
type: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertions.d.ts","sourceRoot":"","sources":["../../src/pilot/assertions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"assertions.d.ts","sourceRoot":"","sources":["../../src/pilot/assertions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,YAAY,CAAA;AAG/C,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAIjD;;;;GAIG;AACH,wBAAsB,aAAa,CAClC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC1B,SAAS,SAAO,GACd,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACrC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAAE,EACpB,UAAU,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,QAAQ,CAAC;IAAC,OAAO,CAAC,EAAE,UAAU,CAAA;CAAE,GACrD,OAAO,CAAC,IAAI,CAAC,CAoCf;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKzD;AAmFD,wBAAsB,uBAAuB,CAC5C,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAAE,GAClB,OAAO,CAAC,IAAI,CAAC,CAsFf;AAkBD,wBAAgB,mBAAmB,CAClC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC3C,MAAM,OAAO,CAAC,IAAI,CAAC,CAuGrB"}
|
package/dist/pilot/assertions.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Assertion execution — validates page state against expected conditions.
|
|
3
3
|
*/
|
|
4
|
+
import { extractQuotedText, stripQuotes } from "./locator.js";
|
|
4
5
|
import { globals } from "../globals.js";
|
|
5
6
|
import { resolveActionTarget } from "./locator.js";
|
|
6
7
|
/**
|
|
@@ -29,7 +30,7 @@ export async function pollAssertion(check, timeoutMs = 5000) {
|
|
|
29
30
|
* a timeout to handle async page updates (dropdowns, navigation, etc.).
|
|
30
31
|
* Negative assertions (checking something is absent) run once immediately.
|
|
31
32
|
*/
|
|
32
|
-
export async function executeAssertion(page, action, a11yTree) {
|
|
33
|
+
export async function executeAssertion(page, action, a11yTree, mapContext) {
|
|
33
34
|
const assertion = action.assertion;
|
|
34
35
|
if (!assertion) {
|
|
35
36
|
throw new Error("executeAssertion called without an assertion");
|
|
@@ -39,12 +40,19 @@ export async function executeAssertion(page, action, a11yTree) {
|
|
|
39
40
|
await executeCompareAssertion(page, action, a11yTree);
|
|
40
41
|
return;
|
|
41
42
|
}
|
|
43
|
+
// Handle map state assertions — evaluate against captured map viewport + features
|
|
44
|
+
if (assertion.type === "map_state") {
|
|
45
|
+
await executeMapAssertion(page, assertion.expected, mapContext);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
42
48
|
const check = buildAssertionCheck(page, assertion);
|
|
43
49
|
// Positive assertions benefit from polling (content may still be loading).
|
|
44
50
|
// Negative assertions and URL checks should fail immediately.
|
|
45
51
|
const shouldPoll = assertion.type === "contains_text" ||
|
|
46
52
|
assertion.type === "element_visible" ||
|
|
47
53
|
assertion.type === "element_exists" ||
|
|
54
|
+
assertion.type === "element_enabled" ||
|
|
55
|
+
assertion.type === "element_disabled" ||
|
|
48
56
|
assertion.type === "link_exists" ||
|
|
49
57
|
assertion.type === "field_exists";
|
|
50
58
|
if (shouldPoll) {
|
|
@@ -65,57 +73,135 @@ export function extractNumber(text) {
|
|
|
65
73
|
* Execute a compare assertion: read a current value from the page,
|
|
66
74
|
* compare it against a remembered value using the specified operator.
|
|
67
75
|
*/
|
|
76
|
+
/**
|
|
77
|
+
* Search the page for a numeric value near keywords extracted from the hint.
|
|
78
|
+
*
|
|
79
|
+
* Strategy:
|
|
80
|
+
* 1. Try to find a single text segment that contains both a number and a keyword.
|
|
81
|
+
* 2. If that fails, search the full page text for a number appearing within a
|
|
82
|
+
* short window (±80 chars) of a keyword match. This handles cases where the
|
|
83
|
+
* number and label are in separate DOM elements (adjacent lines).
|
|
84
|
+
*/
|
|
85
|
+
async function findValueByKeyword(page, hint) {
|
|
86
|
+
const keywords = hint
|
|
87
|
+
.replace(/_/g, " ")
|
|
88
|
+
.split(/\s+/)
|
|
89
|
+
.map((w) => stripQuotes(w))
|
|
90
|
+
.filter((w) => w.length > 2 && !/^(check|that|the|is|are|than|greater|less|equal|least|most|more|fewer|not)$/i.test(w))
|
|
91
|
+
.map((w) => w.toLowerCase());
|
|
92
|
+
const innerText = await page.locator("body").innerText();
|
|
93
|
+
// Strategy 1: single segment containing both a number and a keyword
|
|
94
|
+
const segments = innerText
|
|
95
|
+
.split(/[\n\t]+/)
|
|
96
|
+
.map((s) => s.trim())
|
|
97
|
+
.filter(Boolean);
|
|
98
|
+
let best = "";
|
|
99
|
+
for (const seg of segments) {
|
|
100
|
+
if (!/\d/.test(seg))
|
|
101
|
+
continue;
|
|
102
|
+
const lower = seg.toLowerCase();
|
|
103
|
+
if (keywords.some((kw) => lower.includes(kw))) {
|
|
104
|
+
if (!best || seg.length < best.length) {
|
|
105
|
+
best = seg;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (best) {
|
|
110
|
+
if (globals.debug) {
|
|
111
|
+
console.log(` [compare] Found current value by keyword search: "${best}"`);
|
|
112
|
+
}
|
|
113
|
+
return best;
|
|
114
|
+
}
|
|
115
|
+
// Strategy 2: find a number near a keyword in the full page text
|
|
116
|
+
const fullLower = innerText.toLowerCase();
|
|
117
|
+
let closestNumber = "";
|
|
118
|
+
let closestDistance = Infinity;
|
|
119
|
+
for (const kw of keywords) {
|
|
120
|
+
let searchFrom = 0;
|
|
121
|
+
for (;;) {
|
|
122
|
+
const kwIdx = fullLower.indexOf(kw, searchFrom);
|
|
123
|
+
if (kwIdx === -1)
|
|
124
|
+
break;
|
|
125
|
+
searchFrom = kwIdx + 1;
|
|
126
|
+
// Look for numbers within ±80 characters of the keyword
|
|
127
|
+
const windowStart = Math.max(0, kwIdx - 80);
|
|
128
|
+
const windowEnd = Math.min(innerText.length, kwIdx + kw.length + 80);
|
|
129
|
+
const window = innerText.slice(windowStart, windowEnd);
|
|
130
|
+
const numberMatches = window.matchAll(/\b(\d+\.?\d*)\b/g);
|
|
131
|
+
for (const m of numberMatches) {
|
|
132
|
+
const numIdx = windowStart + m.index;
|
|
133
|
+
const dist = Math.abs(numIdx - kwIdx);
|
|
134
|
+
if (dist < closestDistance) {
|
|
135
|
+
closestDistance = dist;
|
|
136
|
+
closestNumber = m[1];
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (closestNumber) {
|
|
142
|
+
if (globals.debug) {
|
|
143
|
+
console.log(` [compare] Found current value by proximity search: "${closestNumber}" (distance: ${String(closestDistance)})`);
|
|
144
|
+
}
|
|
145
|
+
return closestNumber;
|
|
146
|
+
}
|
|
147
|
+
throw new Error(`compare assertion: could not find a value on the page matching "${hint}"`);
|
|
148
|
+
}
|
|
68
149
|
export async function executeCompareAssertion(page, action, a11yTree) {
|
|
69
150
|
if (!action.compare) {
|
|
70
151
|
throw new Error("executeCompareAssertion called without compare metadata");
|
|
71
152
|
}
|
|
72
|
-
const { variable, operator } = action.compare;
|
|
73
|
-
// Get the
|
|
74
|
-
|
|
75
|
-
|
|
153
|
+
const { variable, operator, literal } = action.compare;
|
|
154
|
+
// Get the baseline value: literal, remembered variable, or inferred from expected.
|
|
155
|
+
// The LLM sometimes omits "literal" and puts the number in assertion.expected
|
|
156
|
+
// (e.g. expected:"0" with a made-up variable name). Detect and recover.
|
|
157
|
+
let rememberedText;
|
|
158
|
+
if (literal !== undefined) {
|
|
159
|
+
rememberedText = literal;
|
|
76
160
|
}
|
|
77
|
-
|
|
78
|
-
|
|
161
|
+
else if (globals.valueStore.has(variable)) {
|
|
162
|
+
rememberedText = globals.valueStore.get(variable) ?? "";
|
|
163
|
+
}
|
|
164
|
+
else if (action.assertion?.expected && /^-?\d+\.?\d*$/.test(action.assertion.expected.trim())) {
|
|
165
|
+
// Fallback: expected is a pure number — treat as literal comparison
|
|
166
|
+
rememberedText = action.assertion.expected.trim();
|
|
167
|
+
if (globals.debug) {
|
|
168
|
+
console.log(` [compare] No remembered "${variable}", using assertion.expected "${rememberedText}" as literal`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
79
172
|
throw new Error(`No remembered value found for "${variable}"`);
|
|
80
173
|
}
|
|
81
|
-
// Get the current value from the page
|
|
174
|
+
// Get the current value from the page.
|
|
175
|
+
// Try the element ref/text first; if the ref is stale, fall back to keyword search.
|
|
82
176
|
let currentText;
|
|
177
|
+
const searchHint = action.assertion?.expected ?? variable;
|
|
83
178
|
if (action.ref || action.text) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
.split(" ")
|
|
94
|
-
.filter((w) => w.length > 2);
|
|
95
|
-
const innerText = await page.locator("body").innerText();
|
|
96
|
-
const segments = innerText
|
|
97
|
-
.split(/[\n\t]+/)
|
|
98
|
-
.map((s) => s.trim())
|
|
99
|
-
.filter(Boolean);
|
|
100
|
-
let best = "";
|
|
101
|
-
for (const seg of segments) {
|
|
102
|
-
if (!/\d/.test(seg))
|
|
103
|
-
continue;
|
|
104
|
-
const lower = seg.toLowerCase();
|
|
105
|
-
if (keywords.some((kw) => lower.includes(kw.toLowerCase()))) {
|
|
106
|
-
if (!best || seg.length < best.length) {
|
|
107
|
-
best = seg;
|
|
179
|
+
try {
|
|
180
|
+
const locator = await resolveActionTarget(page, action, a11yTree);
|
|
181
|
+
currentText = (await locator.textContent() ?? "").trim();
|
|
182
|
+
// If the element was found but contains no number, the LLM likely
|
|
183
|
+
// picked a nearby element (e.g. a heading instead of the count).
|
|
184
|
+
// Fall back to keyword search.
|
|
185
|
+
if (!/\d/.test(currentText)) {
|
|
186
|
+
if (globals.debug) {
|
|
187
|
+
console.log(` [compare] Element text "${currentText}" has no number, falling back to keyword search`);
|
|
108
188
|
}
|
|
189
|
+
currentText = await findValueByKeyword(page, searchHint);
|
|
109
190
|
}
|
|
110
191
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
console.log(` [compare] Found current value by keyword search: "${currentText}"`);
|
|
192
|
+
catch {
|
|
193
|
+
if (globals.debug) {
|
|
194
|
+
console.log(` [compare] Element target failed, falling back to keyword search`);
|
|
195
|
+
}
|
|
196
|
+
currentText = await findValueByKeyword(page, searchHint);
|
|
117
197
|
}
|
|
118
198
|
}
|
|
199
|
+
else {
|
|
200
|
+
// Use assertion.expected as hint (the step description) when the
|
|
201
|
+
// variable name is useless (e.g. "_" for literal comparisons).
|
|
202
|
+
const hint = (variable === "_" ? action.assertion?.expected : null) ?? variable;
|
|
203
|
+
currentText = await findValueByKeyword(page, hint);
|
|
204
|
+
}
|
|
119
205
|
const rememberedNum = extractNumber(rememberedText);
|
|
120
206
|
const currentNum = extractNumber(currentText);
|
|
121
207
|
if (rememberedNum === null) {
|
|
@@ -124,8 +210,9 @@ export async function executeCompareAssertion(page, action, a11yTree) {
|
|
|
124
210
|
if (currentNum === null) {
|
|
125
211
|
throw new Error(`Cannot extract number from current value "${currentText}"`);
|
|
126
212
|
}
|
|
213
|
+
const baselineLabel = literal !== undefined ? `literal ${String(rememberedNum)}` : `"${variable}" (${String(rememberedNum)})`;
|
|
127
214
|
if (globals.debug) {
|
|
128
|
-
console.log(` [compare]
|
|
215
|
+
console.log(` [compare] baseline = ${baselineLabel}, current = ${String(currentNum)}, operator = ${operator}`);
|
|
129
216
|
}
|
|
130
217
|
let passed;
|
|
131
218
|
switch (operator) {
|
|
@@ -150,8 +237,25 @@ export async function executeCompareAssertion(page, action, a11yTree) {
|
|
|
150
237
|
default: throw new Error(`Unknown comparison operator: ${String(operator)}`);
|
|
151
238
|
}
|
|
152
239
|
if (!passed) {
|
|
153
|
-
throw new Error(`Comparison failed: current value ${String(currentNum)} is not ${operator.replace(/_/g, " ")}
|
|
240
|
+
throw new Error(`Comparison failed: current value ${String(currentNum)} is not ${operator.replace(/_/g, " ")} ${baselineLabel}`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Find an interactive element by text, trying multiple roles.
|
|
245
|
+
* Throws if no matching element is found.
|
|
246
|
+
*/
|
|
247
|
+
async function findInteractiveElement(page, text) {
|
|
248
|
+
const roles = ["button", "link", "radio", "checkbox", "tab", "menuitem"];
|
|
249
|
+
for (const role of roles) {
|
|
250
|
+
const el = page.getByRole(role, { name: text });
|
|
251
|
+
if (await el.count() > 0)
|
|
252
|
+
return el.first();
|
|
154
253
|
}
|
|
254
|
+
// Fallback: any element with matching text
|
|
255
|
+
const byText = page.getByText(text, { exact: true });
|
|
256
|
+
if (await byText.count() > 0)
|
|
257
|
+
return byText.first();
|
|
258
|
+
throw new Error(`No interactive element found with text "${text}"`);
|
|
155
259
|
}
|
|
156
260
|
export function buildAssertionCheck(page, assertion) {
|
|
157
261
|
return async () => {
|
|
@@ -211,9 +315,132 @@ export function buildAssertionCheck(page, assertion) {
|
|
|
211
315
|
}
|
|
212
316
|
break;
|
|
213
317
|
}
|
|
318
|
+
case "element_disabled": {
|
|
319
|
+
const el = await findInteractiveElement(page, assertion.expected);
|
|
320
|
+
const disabled = await el.isDisabled();
|
|
321
|
+
if (!disabled) {
|
|
322
|
+
throw new Error(`Element "${assertion.expected}" is not disabled`);
|
|
323
|
+
}
|
|
324
|
+
break;
|
|
325
|
+
}
|
|
326
|
+
case "element_enabled": {
|
|
327
|
+
const el = await findInteractiveElement(page, assertion.expected);
|
|
328
|
+
const enabled = await el.isEnabled();
|
|
329
|
+
if (!enabled) {
|
|
330
|
+
throw new Error(`Element "${assertion.expected}" is not enabled`);
|
|
331
|
+
}
|
|
332
|
+
break;
|
|
333
|
+
}
|
|
214
334
|
default:
|
|
215
335
|
throw new Error(`Unknown assertion type: ${assertion.type}`);
|
|
216
336
|
}
|
|
217
337
|
};
|
|
218
338
|
}
|
|
339
|
+
// ── Map state assertions ─────────────────────────────────────────────
|
|
340
|
+
/**
|
|
341
|
+
* Query all rendered features via the adapter and search for one whose
|
|
342
|
+
* "name" property matches the search term (case-insensitive).
|
|
343
|
+
*/
|
|
344
|
+
async function findFeatureByName(page, adapter, searchName) {
|
|
345
|
+
const features = await adapter.queryRenderedFeatures(page);
|
|
346
|
+
const lower = searchName.toLowerCase();
|
|
347
|
+
for (const f of features) {
|
|
348
|
+
const name = f.properties.name;
|
|
349
|
+
if (typeof name === "string" && name.toLowerCase().includes(lower)) {
|
|
350
|
+
return { found: true, layer: f.layer, name };
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
return { found: false };
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Evaluate a map state assertion.
|
|
357
|
+
*
|
|
358
|
+
* Supports three categories:
|
|
359
|
+
* 1. **Feature search** — "map shows Örebro" → queries rendered features
|
|
360
|
+
* for a name match. This is the primary approach for location assertions.
|
|
361
|
+
* 2. **Zoom checks** — "zoom level is at least 10"
|
|
362
|
+
* 3. **Layer checks** — "layer hospitals is visible"
|
|
363
|
+
*/
|
|
364
|
+
async function executeMapAssertion(page, expected, mapContext) {
|
|
365
|
+
const mapState = mapContext?.state;
|
|
366
|
+
if (!mapState) {
|
|
367
|
+
throw new Error("Map state assertion failed: no map state available (was MAP_DETECT successful?)");
|
|
368
|
+
}
|
|
369
|
+
const lower = expected.toLowerCase();
|
|
370
|
+
if (globals.debug) {
|
|
371
|
+
console.log(` [map-assert] Evaluating: "${expected}"`);
|
|
372
|
+
console.log(` [map-assert] Map center: ${mapState.center.lng.toFixed(4)}, ${mapState.center.lat.toFixed(4)} zoom: ${mapState.zoom.toFixed(2)}`);
|
|
373
|
+
}
|
|
374
|
+
// ── Zoom checks ──
|
|
375
|
+
const zoomMatch = /zoom\s*(?:level)?\s*(?:is\s+)?(?:(?:at\s+least|>=?|greater\s+than\s+or\s+equal)\s+(\d+(?:\.\d+)?)|(?:at\s+most|<=?|less\s+than\s+or\s+equal)\s+(\d+(?:\.\d+)?)|(?:exactly|=|equals?)\s+(\d+(?:\.\d+)?)|(?:greater\s+than|>)\s+(\d+(?:\.\d+)?)|(?:less\s+than|<)\s+(\d+(?:\.\d+)?))/i.exec(lower);
|
|
376
|
+
if (zoomMatch) {
|
|
377
|
+
const [, atLeast, atMost, exactly, greaterThan, lessThan] = zoomMatch;
|
|
378
|
+
if (atLeast && mapState.zoom < parseFloat(atLeast)) {
|
|
379
|
+
throw new Error(`Map zoom ${mapState.zoom.toFixed(2)} is less than expected minimum ${atLeast}`);
|
|
380
|
+
}
|
|
381
|
+
if (atMost && mapState.zoom > parseFloat(atMost)) {
|
|
382
|
+
throw new Error(`Map zoom ${mapState.zoom.toFixed(2)} is greater than expected maximum ${atMost}`);
|
|
383
|
+
}
|
|
384
|
+
if (exactly && Math.abs(mapState.zoom - parseFloat(exactly)) > 0.5) {
|
|
385
|
+
throw new Error(`Map zoom ${mapState.zoom.toFixed(2)} does not match expected ${exactly}`);
|
|
386
|
+
}
|
|
387
|
+
if (greaterThan && mapState.zoom <= parseFloat(greaterThan)) {
|
|
388
|
+
throw new Error(`Map zoom ${mapState.zoom.toFixed(2)} is not greater than ${greaterThan}`);
|
|
389
|
+
}
|
|
390
|
+
if (lessThan && mapState.zoom >= parseFloat(lessThan)) {
|
|
391
|
+
throw new Error(`Map zoom ${mapState.zoom.toFixed(2)} is not less than ${lessThan}`);
|
|
392
|
+
}
|
|
393
|
+
if (globals.debug) {
|
|
394
|
+
console.log(` [map-assert] Zoom check passed`);
|
|
395
|
+
}
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
// ── Layer checks ──
|
|
399
|
+
const layerMatch = /(?:layer|layers?)\s+["']?([^"']+)["']?\s+(?:is\s+)?(?:visible|exists?|present|shown|active)/i.exec(expected);
|
|
400
|
+
if (layerMatch) {
|
|
401
|
+
const layerName = layerMatch[1].trim().toLowerCase();
|
|
402
|
+
const found = mapState.layers.some((l) => l.toLowerCase().includes(layerName));
|
|
403
|
+
if (!found) {
|
|
404
|
+
throw new Error(`Layer "${layerMatch[1].trim()}" not found in map layers: ${mapState.layers.slice(0, 20).join(", ")}`);
|
|
405
|
+
}
|
|
406
|
+
if (globals.debug) {
|
|
407
|
+
console.log(` [map-assert] Layer check passed`);
|
|
408
|
+
}
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
// ── Feature search (default) ──
|
|
412
|
+
// Extract the search term: text in quotes, or after "shows"/"displays"/"contains",
|
|
413
|
+
// or the entire expected string as a fallback.
|
|
414
|
+
let searchTerm = null;
|
|
415
|
+
const quotedMatch = extractQuotedText(expected);
|
|
416
|
+
if (quotedMatch) {
|
|
417
|
+
searchTerm = quotedMatch;
|
|
418
|
+
}
|
|
419
|
+
else {
|
|
420
|
+
const verbMatch = /(?:shows?|displays?|contains?|includes?|has|visible)\s+(.+)/i.exec(expected);
|
|
421
|
+
if (verbMatch) {
|
|
422
|
+
searchTerm = verbMatch[1].trim();
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
if (searchTerm) {
|
|
426
|
+
const adapter = mapContext.adapter;
|
|
427
|
+
if (!adapter) {
|
|
428
|
+
throw new Error("Map feature assertion failed: no map adapter available (was MAP_DETECT successful?)");
|
|
429
|
+
}
|
|
430
|
+
if (globals.debug) {
|
|
431
|
+
console.log(` [map-assert] Searching rendered features for "${searchTerm}"`);
|
|
432
|
+
}
|
|
433
|
+
const result = await findFeatureByName(page, adapter, searchTerm);
|
|
434
|
+
if (!result.found) {
|
|
435
|
+
throw new Error(`Map does not show "${searchTerm}" — no rendered feature with a matching name found in the current viewport`);
|
|
436
|
+
}
|
|
437
|
+
if (globals.debug) {
|
|
438
|
+
console.log(` [map-assert] Found feature "${result.name ?? ""}" in layer "${result.layer ?? ""}"`);
|
|
439
|
+
}
|
|
440
|
+
return;
|
|
441
|
+
}
|
|
442
|
+
throw new Error(`Could not evaluate map assertion: "${expected}". ` +
|
|
443
|
+
`Map state: center=(${mapState.center.lng.toFixed(4)}, ${mapState.center.lat.toFixed(4)}), ` +
|
|
444
|
+
`zoom=${mapState.zoom.toFixed(2)}`);
|
|
445
|
+
}
|
|
219
446
|
//# sourceMappingURL=assertions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertions.js","sourceRoot":"","sources":["../../src/pilot/assertions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"assertions.js","sourceRoot":"","sources":["../../src/pilot/assertions.ts"],"names":[],"mappings":"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"}
|