@eidra-umain/greenlight 0.1.0 → 0.2.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.
Files changed (76) hide show
  1. package/README.md +66 -3
  2. package/dist/browser/browser.d.ts +14 -4
  3. package/dist/browser/browser.d.ts.map +1 -1
  4. package/dist/browser/browser.js +89 -8
  5. package/dist/browser/browser.js.map +1 -1
  6. package/dist/cli/run.d.ts.map +1 -1
  7. package/dist/cli/run.js +141 -100
  8. package/dist/cli/run.js.map +1 -1
  9. package/dist/map/adapters/maplibre.d.ts +23 -0
  10. package/dist/map/adapters/maplibre.d.ts.map +1 -0
  11. package/dist/map/adapters/maplibre.js +367 -0
  12. package/dist/map/adapters/maplibre.js.map +1 -0
  13. package/dist/map/diagnose.d.ts +7 -0
  14. package/dist/map/diagnose.d.ts.map +1 -0
  15. package/dist/map/diagnose.js +140 -0
  16. package/dist/map/diagnose.js.map +1 -0
  17. package/dist/map/index.d.ts +36 -0
  18. package/dist/map/index.d.ts.map +1 -0
  19. package/dist/map/index.js +82 -0
  20. package/dist/map/index.js.map +1 -0
  21. package/dist/map/types.d.ts +96 -0
  22. package/dist/map/types.d.ts.map +1 -0
  23. package/dist/map/types.js +14 -0
  24. package/dist/map/types.js.map +1 -0
  25. package/dist/pilot/assertions.d.ts +6 -2
  26. package/dist/pilot/assertions.d.ts.map +1 -1
  27. package/dist/pilot/assertions.js +113 -1
  28. package/dist/pilot/assertions.js.map +1 -1
  29. package/dist/pilot/executor.d.ts +6 -2
  30. package/dist/pilot/executor.d.ts.map +1 -1
  31. package/dist/pilot/executor.js +22 -2
  32. package/dist/pilot/executor.js.map +1 -1
  33. package/dist/pilot/message-builder.d.ts.map +1 -1
  34. package/dist/pilot/message-builder.js +19 -0
  35. package/dist/pilot/message-builder.js.map +1 -1
  36. package/dist/pilot/pilot.d.ts.map +1 -1
  37. package/dist/pilot/pilot.js +83 -5
  38. package/dist/pilot/pilot.js.map +1 -1
  39. package/dist/pilot/prompts.d.ts +2 -2
  40. package/dist/pilot/prompts.d.ts.map +1 -1
  41. package/dist/pilot/prompts.js +13 -0
  42. package/dist/pilot/prompts.js.map +1 -1
  43. package/dist/pilot/providers/anthropic.d.ts +1 -1
  44. package/dist/pilot/providers/anthropic.d.ts.map +1 -1
  45. package/dist/pilot/providers/anthropic.js +2 -1
  46. package/dist/pilot/providers/anthropic.js.map +1 -1
  47. package/dist/pilot/providers/gemini.d.ts +1 -1
  48. package/dist/pilot/providers/gemini.d.ts.map +1 -1
  49. package/dist/pilot/providers/gemini.js +2 -1
  50. package/dist/pilot/providers/gemini.js.map +1 -1
  51. package/dist/pilot/providers/index.d.ts +1 -0
  52. package/dist/pilot/providers/index.d.ts.map +1 -1
  53. package/dist/pilot/providers/index.js +1 -0
  54. package/dist/pilot/providers/index.js.map +1 -1
  55. package/dist/pilot/providers/openai-compatible.d.ts +1 -1
  56. package/dist/pilot/providers/openai-compatible.d.ts.map +1 -1
  57. package/dist/pilot/providers/openai-compatible.js +2 -1
  58. package/dist/pilot/providers/openai-compatible.js.map +1 -1
  59. package/dist/pilot/providers/types.d.ts +9 -0
  60. package/dist/pilot/providers/types.d.ts.map +1 -1
  61. package/dist/pilot/providers/types.js +13 -1
  62. package/dist/pilot/providers/types.js.map +1 -1
  63. package/dist/pilot/response-parser.d.ts +2 -0
  64. package/dist/pilot/response-parser.d.ts.map +1 -1
  65. package/dist/pilot/response-parser.js +6 -1
  66. package/dist/pilot/response-parser.js.map +1 -1
  67. package/dist/pilot/state.d.ts +2 -0
  68. package/dist/pilot/state.d.ts.map +1 -1
  69. package/dist/pilot/state.js +12 -1
  70. package/dist/pilot/state.js.map +1 -1
  71. package/dist/planner/plan-runner.d.ts.map +1 -1
  72. package/dist/planner/plan-runner.js +55 -3
  73. package/dist/planner/plan-runner.js.map +1 -1
  74. package/dist/reporter/types.d.ts +33 -0
  75. package/dist/reporter/types.d.ts.map +1 -1
  76. package/package.json +4 -3
package/README.md CHANGED
@@ -10,7 +10,7 @@ No selectors. No XPaths. No test IDs, drivers or glue code. Just describe what a
10
10
 
11
11
  ---
12
12
 
13
- **[How it works](#how-it-works)** | **[Quick start](#quick-start)** | **[Project configuration](#project-configuration)** | **[CLI](#cli)** | **[Test syntax](#test-syntax)** | **[Cached plans](#cached-plans)** | **[LLM setup](#llm-setup)** | **[Architecture](#architecture)** | **[CI/CD](#cicd)**
13
+ **[How it works](#how-it-works)** | **[Quick start](#quick-start)** | **[Project configuration](#project-configuration)** | **[CLI](#cli)** | **[Test syntax](#test-syntax)** | **[Cached plans](#cached-plans)** | **[LLM setup](#llm-setup)** | **[Architecture](#architecture)** | **[Avoiding side effects](#avoiding-side-effects-in-your-app)** | **[CI/CD](#cicd)**
14
14
 
15
15
  ---
16
16
 
@@ -34,7 +34,7 @@ tests:
34
34
  - check that you see "Thanks for your inquiry"
35
35
  ```
36
36
 
37
- GreenLight understands form wizards, custom dropdowns, autocomplete fields, and checkbox consent flows. It fills in forms with realistic test data, handles before/after value comparisons, and works with any UI framework.
37
+ GreenLight understands form wizards, custom dropdowns, autocomplete fields, checkbox consent flows, and interactive maps. It fills in forms with realistic test data, handles before/after value comparisons, and works with any UI framework.
38
38
 
39
39
  The first run uses an LLM to discover the right actions (the **discovery run**). After that, GreenLight caches a concrete action plan and replays it without LLM calls — making subsequent runs fast and deterministic.
40
40
 
@@ -185,6 +185,7 @@ Tests are plain English. The Pilot interprets intent, so phrasing is flexible. C
185
185
  | Remember | `remember the number of search results` |
186
186
  | Compare | `check that the number of results is less than before` |
187
187
  | Assert | `check that page contains "Order Confirmed"` |
188
+ | Map assert | `check that the map shows "Stockholm"` or `check that zoom level is at least 10` |
188
189
  | Multi-step | `Select Red - Green - Blue in the color picker` (auto-split into 3 clicks) |
189
190
 
190
191
  ### Form filling
@@ -202,6 +203,31 @@ steps:
202
203
  - check that the total has decreased
203
204
  ```
204
205
 
206
+ ### Map testing
207
+
208
+ GreenLight has built-in support for testing pages with interactive WebGL maps. When a test step mentions maps, markers, layers, or zoom levels, GreenLight automatically detects the map library, attaches to its instance, and queries the map's rendered features and viewport state directly — bypassing the DOM entirely, since WebGL canvas content is invisible to the accessibility tree.
209
+
210
+ Currently supported: **MapLibre GL JS**. The architecture is pluggable — Mapbox GL and Leaflet adapters can be added without changing test syntax.
211
+
212
+ ```yaml
213
+ steps:
214
+ - navigate to the map view
215
+ - check that the map shows "Stockholm"
216
+ - check that the zoom level is at least 10
217
+ - check that the "hospitals" layer is visible on the map
218
+ ```
219
+
220
+ **How it works:** When the planner sees map-related language in a step, it inserts a `MAP_DETECT` step that finds and attaches to the map instance. Subsequent map assertions query the map's actual rendered features (place names, road labels, etc. from vector tile data) and viewport state (center, zoom, bounds, layers). This means "check that the map shows Stockholm" searches for a feature with `name: "Stockholm"` among the thousands of features currently rendered on the canvas — it doesn't just check for the word in the page text.
221
+
222
+ **Map instance detection** works automatically for most setups:
223
+
224
+ 1. **React apps** (react-map-gl, etc.) — walks the React fiber tree from the `.maplibregl-map` container to find the map instance in component refs and hook state
225
+ 2. **Vue apps** — checks `__vue_app__` (Vue 3) and `__vue__` (Vue 2) component trees
226
+ 3. **Global variables** — scans `window.map`, `window.mapInstance`, and similar common names
227
+ 4. **Explicit exposure** — for maximum reliability, set `window.__greenlight_map = map` in your app
228
+
229
+ Map detection, state capture, and feature queries all work in both discovery and cached plan runs.
230
+
205
231
  ### Reusable steps
206
232
 
207
233
  Define common sequences at the suite level and invoke by name:
@@ -325,7 +351,7 @@ greenlight run --provider openai --llm-base-url http://localhost:11434/v1 --mode
325
351
  | Layer | Technology |
326
352
  |-------|-----------|
327
353
  | Browser automation | Playwright (Chromium) |
328
- | Page representation | Accessibility tree with stable element refs |
354
+ | Page representation | Accessibility tree with stable element refs + map viewport state |
329
355
  | AI | OpenRouter (any OpenAI-compatible provider) |
330
356
  | Plan caching | SHA-256 hash-based invalidation, `.greenlight/plans/` |
331
357
  | Test definitions | YAML |
@@ -379,6 +405,43 @@ flowchart TD
379
405
  - [Specifications](docs/specifications.md) — full feature spec, technology decisions, MCP strategy
380
406
  - [Implementation Plan](docs/implementation.md) — step-by-step build plan
381
407
 
408
+ ## Avoiding side effects in your app
409
+
410
+ GreenLight provides two signals that your application can use to detect when it's running under a test and suppress side effects like analytics, chat widgets, cookie banners, or third-party scripts that interfere with testing.
411
+
412
+ ### `window.__E2E_TEST__`
413
+
414
+ A global boolean set to `true` on every page before any app JavaScript runs. Use it in your frontend code:
415
+
416
+ ```js
417
+ if (!window.__E2E_TEST__) {
418
+ initAnalytics()
419
+ loadIntercom()
420
+ showCookieBanner()
421
+ }
422
+ ```
423
+
424
+ ### `X-E2E-Test` HTTP header
425
+
426
+ The header `X-E2E-Test: true` is sent on all same-origin requests (navigation, fetch, XHR). Use it server-side to skip side effects:
427
+
428
+ ```js
429
+ // Express middleware example
430
+ app.use((req, res, next) => {
431
+ if (req.headers['x-e2e-test'] === 'true') {
432
+ req.isE2ETest = true
433
+ }
434
+ next()
435
+ })
436
+
437
+ // Skip sending emails during E2E tests
438
+ if (!req.isE2ETest) {
439
+ await sendConfirmationEmail(order)
440
+ }
441
+ ```
442
+
443
+ The header is only added to same-origin requests — cross-origin requests to CDNs, tile servers, and third-party APIs are not affected. This avoids triggering CORS preflight requests on external services.
444
+
382
445
  ## CI/CD
383
446
 
384
447
  ```yaml
@@ -13,12 +13,22 @@ export interface BrowserOptions {
13
13
  }
14
14
  /** Launch a Chromium browser instance. */
15
15
  export declare function launchBrowser(config: BrowserOptions): Promise<Browser>;
16
- /** Create an isolated browser context with configured viewport and test mode headers. */
16
+ /** Create an isolated browser context with configured viewport. */
17
17
  export declare function createContext(browser: Browser, config: BrowserOptions): Promise<BrowserContext>;
18
+ /**
19
+ * Launch a persistent browser context with the zoom extension loaded.
20
+ * Used in headed mode to get real 75% browser zoom.
21
+ * Returns a BrowserContext that the caller can create pages from.
22
+ */
23
+ export declare function launchPersistentContextWithZoom(config: BrowserOptions): Promise<{
24
+ context: BrowserContext;
25
+ }>;
18
26
  /** Create a new page within a browser context and inject test mode global. */
19
- export declare function createPage(context: BrowserContext): Promise<Page>;
20
- /** Close the browser and all its contexts. */
21
- export declare function closeBrowser(browser: Browser): Promise<void>;
27
+ export declare function createPage(context: BrowserContext, options?: {
28
+ headed?: boolean;
29
+ }): Promise<Page>;
30
+ /** Close a browser or persistent context. */
31
+ export declare function closeBrowser(browserOrContext: Browser | BrowserContext): Promise<void>;
22
32
  /** Extract browser options from RunConfig. */
23
33
  export declare function toBrowserOptions(config: RunConfig): BrowserOptions;
24
34
  //# sourceMappingURL=browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser/browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAY,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAA;AACnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAC3C;AAED,0CAA0C;AAC1C,wBAAsB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAI5E;AAED,yFAAyF;AACzF,wBAAsB,aAAa,CAClC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,cAAc,GACpB,OAAO,CAAC,cAAc,CAAC,CAOzB;AAED,8EAA8E;AAC9E,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAUvE;AAED,8CAA8C;AAC9C,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAElE;AAED,8CAA8C;AAC9C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,cAAc,CAKlE"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser/browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAY,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAA;AACnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAC3C;AAeD,0CAA0C;AAC1C,wBAAsB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAU5E;AAED,mEAAmE;AACnE,wBAAsB,aAAa,CAClC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,cAAc,GACpB,OAAO,CAAC,cAAc,CAAC,CAIzB;AAgBD;;;;GAIG;AACH,wBAAsB,+BAA+B,CACpD,MAAM,EAAE,cAAc,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,cAAc,CAAA;CAAE,CAAC,CAsBtC;AAED,8EAA8E;AAC9E,wBAAsB,UAAU,CAC/B,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5B,OAAO,CAAC,IAAI,CAAC,CAyCf;AAED,6CAA6C;AAC7C,wBAAsB,YAAY,CAAC,gBAAgB,EAAE,OAAO,GAAG,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5F;AAED,8CAA8C;AAC9C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,cAAc,CAKlE"}
@@ -2,24 +2,76 @@
2
2
  * Playwright browser lifecycle management.
3
3
  * Wraps launch, context creation, page creation, and cleanup.
4
4
  */
5
+ import path from "path";
6
+ import { createRequire } from "module";
5
7
  import { chromium } from "playwright";
8
+ /** Zoom level applied in headed mode (75%). */
9
+ const BROWSER_ZOOM = 75;
10
+ /**
11
+ * Resolve the path to the playwright-zoom extension directory.
12
+ * Uses createRequire because playwright-zoom is a CJS package.
13
+ */
14
+ function zoomExtensionPath() {
15
+ const require = createRequire(import.meta.url);
16
+ const pwZoomDir = path.dirname(require.resolve("playwright-zoom"));
17
+ return path.join(pwZoomDir, "lib", "zoom-extension");
18
+ }
6
19
  /** Launch a Chromium browser instance. */
7
20
  export async function launchBrowser(config) {
8
21
  return chromium.launch({
9
22
  headless: !config.headed,
23
+ args: [
24
+ "--enable-webgl",
25
+ "--enable-webgl2-compute-context",
26
+ "--enable-gpu-rasterization",
27
+ "--ignore-gpu-blocklist",
28
+ ],
10
29
  });
11
30
  }
12
- /** Create an isolated browser context with configured viewport and test mode headers. */
31
+ /** Create an isolated browser context with configured viewport. */
13
32
  export async function createContext(browser, config) {
14
33
  return browser.newContext({
15
34
  viewport: config.viewport,
16
- extraHTTPHeaders: {
17
- "X-E2E-Test": "true",
18
- },
19
35
  });
20
36
  }
37
+ /**
38
+ * Set browser zoom via the playwright-zoom extension.
39
+ * The extension's content script listens for a postMessage and relays
40
+ * it to its service worker which calls chrome.tabs.setZoom().
41
+ */
42
+ async function applyBrowserZoom(page, zoom) {
43
+ await page.evaluate((browserZoom) => window.postMessage({ type: "setTabZoom", browserZoom }, "*"), zoom);
44
+ // Small delay for the extension round-trip
45
+ await page.waitForTimeout(200);
46
+ }
47
+ /**
48
+ * Launch a persistent browser context with the zoom extension loaded.
49
+ * Used in headed mode to get real 75% browser zoom.
50
+ * Returns a BrowserContext that the caller can create pages from.
51
+ */
52
+ export async function launchPersistentContextWithZoom(config) {
53
+ const extPath = zoomExtensionPath();
54
+ const context = await chromium.launchPersistentContext("", {
55
+ headless: false,
56
+ viewport: config.viewport,
57
+ args: [
58
+ "--enable-webgl",
59
+ "--enable-webgl2-compute-context",
60
+ "--enable-gpu-rasterization",
61
+ "--ignore-gpu-blocklist",
62
+ `--disable-extensions-except=${extPath}`,
63
+ `--load-extension=${extPath}`,
64
+ ],
65
+ });
66
+ // The zoom extension opens a tab on load — close it
67
+ const existingPages = context.pages();
68
+ for (const p of existingPages) {
69
+ await p.close().catch(() => { });
70
+ }
71
+ return { context };
72
+ }
21
73
  /** Create a new page within a browser context and inject test mode global. */
22
- export async function createPage(context) {
74
+ export async function createPage(context, options) {
23
75
  const page = await context.newPage();
24
76
  await page.addInitScript(() => {
25
77
  Object.defineProperty(window, "__E2E_TEST__", {
@@ -28,11 +80,40 @@ export async function createPage(context) {
28
80
  configurable: false,
29
81
  });
30
82
  });
83
+ // IMPORTANT: Custom headers must ONLY be added to same-origin requests.
84
+ // Never use extraHTTPHeaders on the browser context — it adds headers
85
+ // to ALL requests including cross-origin tile/CDN fetches (e.g.
86
+ // DigitalOcean Spaces PMTiles). Non-standard headers trigger CORS
87
+ // preflight (OPTIONS) requests that tile servers don't handle,
88
+ // breaking map tile loading entirely.
89
+ await page.route("**/*", async (route) => {
90
+ const request = route.request();
91
+ if (request.isNavigationRequest() || request.resourceType() === "fetch" || request.resourceType() === "xhr") {
92
+ try {
93
+ const reqUrl = new URL(request.url());
94
+ const pageUrl = new URL(page.url());
95
+ if (reqUrl.origin === pageUrl.origin) {
96
+ await route.continue({
97
+ headers: { ...request.headers(), "X-E2E-Test": "true" },
98
+ });
99
+ return;
100
+ }
101
+ }
102
+ catch { /* page.url() can throw before first navigation */ }
103
+ }
104
+ await route.continue();
105
+ });
106
+ // Apply 75% zoom in headed mode after the first navigation
107
+ if (options?.headed) {
108
+ page.once("load", () => {
109
+ applyBrowserZoom(page, BROWSER_ZOOM).catch(() => { });
110
+ });
111
+ }
31
112
  return page;
32
113
  }
33
- /** Close the browser and all its contexts. */
34
- export async function closeBrowser(browser) {
35
- await browser.close();
114
+ /** Close a browser or persistent context. */
115
+ export async function closeBrowser(browserOrContext) {
116
+ await browserOrContext.close();
36
117
  }
37
118
  /** Extract browser options from RunConfig. */
38
119
  export function toBrowserOptions(config) {
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser/browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAgD,MAAM,YAAY,CAAA;AAQnF,0CAA0C;AAC1C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAsB;IACzD,OAAO,QAAQ,CAAC,MAAM,CAAC;QACtB,QAAQ,EAAE,CAAC,MAAM,CAAC,MAAM;KACxB,CAAC,CAAA;AACH,CAAC;AAED,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,OAAgB,EAChB,MAAsB;IAEtB,OAAO,OAAO,CAAC,UAAU,CAAC;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,gBAAgB,EAAE;YACjB,YAAY,EAAE,MAAM;SACpB;KACD,CAAC,CAAA;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAuB;IACvD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;IACpC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;QAC7B,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE;YAC7C,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,KAAK;SACnB,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;IACF,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,8CAA8C;AAC9C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAgB;IAClD,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;AACtB,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IACjD,OAAO;QACN,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;KACzB,CAAA;AACF,CAAC"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser/browser.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAuC5C,6DAA6D;AAC7D,wBAAsB,cAAc,CACnC,UAAU,EAAE,MAAM,EAAE,EACpB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,SAAS,GACf,OAAO,CAAC,IAAI,CAAC,CAgDf;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC/B,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC,CAuQf"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAwC5C,6DAA6D;AAC7D,wBAAsB,cAAc,CACnC,UAAU,EAAE,MAAM,EAAE,EACpB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,SAAS,GACf,OAAO,CAAC,IAAI,CAAC,CAgDf;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC/B,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC,CAqSf"}
package/dist/cli/run.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { loadSuite } from "../parser/loader.js";
2
- import { launchBrowser, createContext, createPage, closeBrowser, toBrowserOptions, } from "../browser/browser.js";
2
+ import { launchBrowser, launchPersistentContextWithZoom, createContext, createPage, closeBrowser, toBrowserOptions, } from "../browser/browser.js";
3
3
  import { attachConsoleCollector, attachNetworkTracker, } from "../pilot/network.js";
4
4
  import { resolveLLMConfig, createLLMClient, } from "../pilot/llm.js";
5
5
  import { runTestCase } from "../pilot/pilot.js";
@@ -9,6 +9,7 @@ import { createPlanRecorder } from "../planner/plan-generator.js";
9
9
  import { runCachedPlan } from "../planner/plan-runner.js";
10
10
  import { resolveModelConfig } from "../types.js";
11
11
  import { globals } from "../globals.js";
12
+ import { LLMApiError } from "../pilot/providers/index.js";
12
13
  /** Print step-by-step results for a test case. */
13
14
  function printStepResults(result) {
14
15
  for (const stepResult of result.steps) {
@@ -132,11 +133,20 @@ export async function runCommand(config, resolvedFiles) {
132
133
  }
133
134
  return llm;
134
135
  }
135
- // Launch browser
136
+ // Launch browser — in headed mode use a persistent context with the
137
+ // zoom extension for real 75% browser zoom. In headless mode use the
138
+ // normal browser + context flow.
136
139
  const browserOpts = toBrowserOptions(config);
137
- let browser;
140
+ let browser = null;
141
+ let persistentContext = null;
138
142
  try {
139
- browser = await launchBrowser(browserOpts);
143
+ if (browserOpts.headed) {
144
+ const result = await launchPersistentContextWithZoom(browserOpts);
145
+ persistentContext = result.context;
146
+ }
147
+ else {
148
+ browser = await launchBrowser(browserOpts);
149
+ }
140
150
  }
141
151
  catch (err) {
142
152
  const msg = err instanceof Error ? err.message : String(err);
@@ -150,127 +160,158 @@ export async function runCommand(config, resolvedFiles) {
150
160
  ? suite.tests.filter((t) => t.name === config.testFilter)
151
161
  : suite.tests;
152
162
  for (const test of tests) {
153
- const testSlug = slugify(test.name);
154
- const testHash = computeTestHash(test);
155
- const hashKey = `${suiteSlug}/${testSlug}`;
156
- const cachedHash = hashIndex[hashKey];
157
- // Determine execution mode
158
- let useCachedPlan = false;
159
- let cachedPlan = null;
160
- if (!config.discover && cachedHash === testHash) {
161
- cachedPlan = await loadPlan(cwd, suiteSlug, testSlug);
162
- if (cachedPlan) {
163
- useCachedPlan = true;
164
- }
165
- }
166
- const modeLabel = useCachedPlan
167
- ? "\x1b[36mcached\x1b[0m"
168
- : "\x1b[33mdiscovery\x1b[0m";
169
- console.log(`\n Test: ${test.name} [${modeLabel}]`);
170
- if (!config.discover &&
171
- cachedHash &&
172
- cachedHash !== testHash) {
173
- console.log(` \x1b[33mPlan stale, re-discovering\x1b[0m`);
174
- }
175
- // Fresh context per test case
176
- const context = await createContext(browser, browserOpts);
177
- const page = await createPage(context);
178
- const { drain } = attachConsoleCollector(page);
179
- const { waitForNetworkIdle } = attachNetworkTracker(page);
180
- globals.trace.attachToPage(page);
181
163
  try {
182
- globals.trace.log("goto", suite.base_url);
183
- await page.goto(suite.base_url);
184
- }
185
- catch (err) {
186
- const msg = err instanceof Error ? err.message : String(err);
187
- console.error(`\n \x1b[31m\u2717\x1b[0m Failed to navigate to ${suite.base_url}: ${msg}`);
188
- globals.trace.detachFromPage(page);
189
- await context.close();
190
- continue;
191
- }
192
- let result;
193
- if (useCachedPlan && cachedPlan) {
194
- // Fast run — replay cached plan
195
- result = await runCachedPlan(page, cachedPlan, test.name, { waitForNetworkIdle });
196
- // Handle plan drift
197
- if (result.drifted && config.onDrift === "rerun") {
198
- console.log(` \x1b[33mPlan drift detected, re-running with LLM\x1b[0m`);
199
- // Close and re-create context for fresh state
164
+ const testSlug = slugify(test.name);
165
+ const testHash = computeTestHash(test);
166
+ const hashKey = `${suiteSlug}/${testSlug}`;
167
+ const cachedHash = hashIndex[hashKey];
168
+ // Determine execution mode
169
+ let useCachedPlan = false;
170
+ let cachedPlan = null;
171
+ if (!config.discover && cachedHash === testHash) {
172
+ cachedPlan = await loadPlan(cwd, suiteSlug, testSlug);
173
+ if (cachedPlan) {
174
+ useCachedPlan = true;
175
+ }
176
+ }
177
+ const modeLabel = useCachedPlan
178
+ ? "\x1b[36mcached\x1b[0m"
179
+ : "\x1b[33mdiscovery\x1b[0m";
180
+ console.log(`\n Test: ${test.name} [${modeLabel}]`);
181
+ if (!config.discover &&
182
+ cachedHash &&
183
+ cachedHash !== testHash) {
184
+ console.log(` \x1b[33mPlan stale, re-discovering\x1b[0m`);
185
+ }
186
+ // Fresh context per test case (reuse persistent context in headed mode)
187
+ const context = persistentContext ?? await createContext(browser, browserOpts);
188
+ const page = await createPage(context, { headed: browserOpts.headed });
189
+ const { drain } = attachConsoleCollector(page);
190
+ const { waitForNetworkIdle } = attachNetworkTracker(page);
191
+ globals.trace.attachToPage(page);
192
+ try {
193
+ globals.trace.log("goto", suite.base_url);
194
+ await page.goto(suite.base_url);
195
+ }
196
+ catch (err) {
197
+ const msg = err instanceof Error ? err.message : String(err);
198
+ console.error(`\n \x1b[31m\u2717\x1b[0m Failed to navigate to ${suite.base_url}: ${msg}`);
200
199
  globals.trace.detachFromPage(page);
201
- await context.close();
202
- const ctx2 = await createContext(browser, browserOpts);
203
- const page2 = await createPage(ctx2);
204
- const { drain: drain2 } = attachConsoleCollector(page2);
205
- const { waitForNetworkIdle: waitForNetworkIdle2 } = attachNetworkTracker(page2);
206
- globals.trace.attachToPage(page2);
207
- await page2.goto(suite.base_url);
208
- const modelLabel = typeof effectiveModel === "string"
200
+ if (persistentContext) {
201
+ // Persistent context is shared — close pages only
202
+ for (const p of context.pages())
203
+ await p.close().catch(() => { });
204
+ }
205
+ else {
206
+ await context.close();
207
+ }
208
+ continue;
209
+ }
210
+ let result;
211
+ if (useCachedPlan && cachedPlan) {
212
+ // Fast run — replay cached plan
213
+ result = await runCachedPlan(page, cachedPlan, test.name, { waitForNetworkIdle });
214
+ // Handle plan drift
215
+ if (result.drifted && config.onDrift === "rerun") {
216
+ console.log(` \x1b[33mPlan drift detected, re-running with LLM\x1b[0m`);
217
+ // Close and re-create context for fresh state
218
+ globals.trace.detachFromPage(page);
219
+ if (persistentContext) {
220
+ // Persistent context is shared — close pages only
221
+ for (const p of context.pages())
222
+ await p.close().catch(() => { });
223
+ }
224
+ else {
225
+ await context.close();
226
+ }
227
+ const ctx2 = persistentContext ?? await createContext(browser, browserOpts);
228
+ const page2 = await createPage(ctx2, { headed: browserOpts.headed });
229
+ const { drain: drain2 } = attachConsoleCollector(page2);
230
+ const { waitForNetworkIdle: waitForNetworkIdle2 } = attachNetworkTracker(page2);
231
+ globals.trace.attachToPage(page2);
232
+ await page2.goto(suite.base_url);
233
+ const modelLabel = typeof effectiveModel === "string"
234
+ ? effectiveModel
235
+ : `${effectiveModel.planner}/${effectiveModel.pilot}`;
236
+ const recorder = createPlanRecorder(suiteSlug, testSlug, testHash, modelLabel);
237
+ result = await runTestCase(page2, test, getOrCreateLLM(), {
238
+ timeout: config.timeout,
239
+ consoleDrain: drain2,
240
+ recorder,
241
+ waitForNetworkIdle: waitForNetworkIdle2,
242
+ });
243
+ result.mode = "discovery";
244
+ if (result.status === "passed") {
245
+ const plan = recorder.finalize();
246
+ await savePlan(cwd, plan);
247
+ hashIndex[hashKey] = testHash;
248
+ hashIndexDirty = true;
249
+ await ensureGitignore(cwd);
250
+ console.log(` \x1b[32mCached plan updated\x1b[0m`);
251
+ }
252
+ globals.trace.detachFromPage(page2);
253
+ await ctx2.close();
254
+ printStepResults(result);
255
+ printTestSummary(result);
256
+ if (config.headed) {
257
+ await new Promise((r) => setTimeout(r, 2000));
258
+ }
259
+ continue;
260
+ }
261
+ }
262
+ else {
263
+ // Discovery run — full LLM loop with recorder
264
+ const discoveryModelLabel = typeof effectiveModel === "string"
209
265
  ? effectiveModel
210
266
  : `${effectiveModel.planner}/${effectiveModel.pilot}`;
211
- const recorder = createPlanRecorder(suiteSlug, testSlug, testHash, modelLabel);
212
- result = await runTestCase(page2, test, getOrCreateLLM(), {
267
+ const recorder = createPlanRecorder(suiteSlug, testSlug, testHash, discoveryModelLabel);
268
+ result = await runTestCase(page, test, getOrCreateLLM(), {
213
269
  timeout: config.timeout,
214
- consoleDrain: drain2,
270
+ consoleDrain: drain,
215
271
  recorder,
216
- waitForNetworkIdle: waitForNetworkIdle2,
272
+ waitForNetworkIdle,
217
273
  });
218
274
  result.mode = "discovery";
275
+ // Save plan only if the test passed
219
276
  if (result.status === "passed") {
220
277
  const plan = recorder.finalize();
221
278
  await savePlan(cwd, plan);
222
279
  hashIndex[hashKey] = testHash;
223
280
  hashIndexDirty = true;
224
281
  await ensureGitignore(cwd);
225
- console.log(` \x1b[32mCached plan updated\x1b[0m`);
226
- }
227
- globals.trace.detachFromPage(page2);
228
- await ctx2.close();
229
- printStepResults(result);
230
- printTestSummary(result);
231
- if (config.headed) {
232
- await new Promise((r) => setTimeout(r, 2000));
282
+ console.log(` \x1b[32mCached plan generated for: ${test.name}\x1b[0m`);
233
283
  }
234
- continue;
235
284
  }
236
- }
237
- else {
238
- // Discovery run — full LLM loop with recorder
239
- const discoveryModelLabel = typeof effectiveModel === "string"
240
- ? effectiveModel
241
- : `${effectiveModel.planner}/${effectiveModel.pilot}`;
242
- const recorder = createPlanRecorder(suiteSlug, testSlug, testHash, discoveryModelLabel);
243
- result = await runTestCase(page, test, getOrCreateLLM(), {
244
- timeout: config.timeout,
245
- consoleDrain: drain,
246
- recorder,
247
- waitForNetworkIdle,
248
- });
249
- result.mode = "discovery";
250
- // Save plan only if the test passed
251
- if (result.status === "passed") {
252
- const plan = recorder.finalize();
253
- await savePlan(cwd, plan);
254
- hashIndex[hashKey] = testHash;
255
- hashIndexDirty = true;
256
- await ensureGitignore(cwd);
257
- console.log(` \x1b[32mCached plan generated for: ${test.name}\x1b[0m`);
285
+ printStepResults(result);
286
+ printTestSummary(result);
287
+ if (config.headed) {
288
+ await new Promise((r) => setTimeout(r, 2000));
289
+ }
290
+ globals.trace.detachFromPage(page);
291
+ if (persistentContext) {
292
+ // Persistent context is shared close pages only
293
+ for (const p of context.pages())
294
+ await p.close().catch(() => { });
295
+ }
296
+ else {
297
+ await context.close();
258
298
  }
259
299
  }
260
- printStepResults(result);
261
- printTestSummary(result);
262
- if (config.headed) {
263
- await new Promise((r) => setTimeout(r, 2000));
300
+ catch (err) {
301
+ if (err instanceof LLMApiError) {
302
+ console.error(`\n \x1b[31mLLM API returned ${String(err.status)} — aborting test run.\x1b[0m`);
303
+ console.error(` ${err.message}\n`);
304
+ break;
305
+ }
306
+ throw err;
264
307
  }
265
- globals.trace.detachFromPage(page);
266
- await context.close();
267
308
  }
268
309
  }
269
310
  finally {
270
311
  if (hashIndexDirty) {
271
312
  await saveHashIndex(cwd, hashIndex);
272
313
  }
273
- await closeBrowser(browser);
314
+ await closeBrowser(persistentContext ?? browser);
274
315
  }
275
316
  }
276
317
  }
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}