From b0e446fee8ca71ede76e863d42be1ecbbb28de7e Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Sat, 11 Apr 2026 00:46:46 +0000 Subject: [PATCH] app: fix Playwright e2e helpers using import.meta.url in CJS context Revert dynamic import path resolution from `new URL(..., import.meta.url)` to `path.resolve(__dirname, ...)` + `pathToFileURL(...)` in three e2e helpers. Playwright's TS loader emits CommonJS, where import.meta.url is undefined, causing "exports is not defined in ES module scope" and blocking all e2e test discovery. Co-Authored-By: Claude Opus 4.6 --- packages/app/e2e/helpers/agent-bottom-anchor.ts | 7 ++++++- packages/app/e2e/helpers/archive-tab.ts | 7 ++++++- packages/app/e2e/helpers/terminal-perf.ts | 7 ++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/app/e2e/helpers/agent-bottom-anchor.ts b/packages/app/e2e/helpers/agent-bottom-anchor.ts index 559186b82..a0d2fd0c0 100644 --- a/packages/app/e2e/helpers/agent-bottom-anchor.ts +++ b/packages/app/e2e/helpers/agent-bottom-anchor.ts @@ -1,4 +1,6 @@ import { expect, type Page } from "@playwright/test"; +import path from "node:path"; +import { pathToFileURL } from "node:url"; import { randomUUID } from "node:crypto"; import { buildHostWorkspaceRoute } from "../../src/utils/host-routes"; @@ -88,7 +90,10 @@ async function loadDaemonClientConstructor(): Promise< clientType: "cli"; }) => DaemonClientInstance > { - const moduleUrl = new URL("../../../server/dist/server/server/exports.js", import.meta.url).href; + const repoRoot = path.resolve(__dirname, "../../../../"); + const moduleUrl = pathToFileURL( + path.join(repoRoot, "packages/server/dist/server/server/exports.js"), + ).href; const mod = (await import(moduleUrl)) as { DaemonClient: new (config: { url: string; diff --git a/packages/app/e2e/helpers/archive-tab.ts b/packages/app/e2e/helpers/archive-tab.ts index baedbe81d..f75d7d60c 100644 --- a/packages/app/e2e/helpers/archive-tab.ts +++ b/packages/app/e2e/helpers/archive-tab.ts @@ -1,4 +1,6 @@ import { randomUUID } from "node:crypto"; +import path from "node:path"; +import { pathToFileURL } from "node:url"; import { expect, type Page } from "@playwright/test"; import { buildCreateAgentPreferences, buildSeededHost } from "./daemon-registry"; import { waitForWorkspaceTabsVisible } from "./workspace-tabs"; @@ -72,7 +74,10 @@ async function loadDaemonClientConstructor(): Promise< clientType: "cli"; }) => ArchiveTabDaemonClient > { - const moduleUrl = new URL("../../../server/dist/server/server/exports.js", import.meta.url).href; + const repoRoot = path.resolve(__dirname, "../../../../"); + const moduleUrl = pathToFileURL( + path.join(repoRoot, "packages/server/dist/server/server/exports.js"), + ).href; const mod = (await import(moduleUrl)) as { DaemonClient: new (config: { url: string; diff --git a/packages/app/e2e/helpers/terminal-perf.ts b/packages/app/e2e/helpers/terminal-perf.ts index b00783e6c..062562ce4 100644 --- a/packages/app/e2e/helpers/terminal-perf.ts +++ b/packages/app/e2e/helpers/terminal-perf.ts @@ -1,4 +1,6 @@ import type { Page } from "@playwright/test"; +import path from "node:path"; +import { pathToFileURL } from "node:url"; import { randomUUID } from "node:crypto"; import { buildHostWorkspaceRoute } from "../../src/utils/host-routes"; @@ -48,7 +50,10 @@ async function loadDaemonClientConstructor(): Promise< clientType: "cli"; }) => TerminalPerfDaemonClient > { - const moduleUrl = new URL("../../../server/dist/server/server/exports.js", import.meta.url).href; + const repoRoot = path.resolve(__dirname, "../../../../"); + const moduleUrl = pathToFileURL( + path.join(repoRoot, "packages/server/dist/server/server/exports.js"), + ).href; const mod = (await import(moduleUrl)) as { DaemonClient: new (config: { url: string;