From 4a5422c1363ef384934ff16dcee5d52c692fd967 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Fri, 31 Jul 2026 15:14:59 +0200 Subject: [PATCH] fix(tests): align checks with runtime boundaries --- .../app/e2e/agent-consecutive-turns.spec.ts | 2 +- .../desktop/scripts/dev-runtime-config.mjs | 89 +++++++++++++++++++ packages/desktop/scripts/dev-runtime.mjs | 89 +------------------ packages/desktop/scripts/dev-runtime.test.mjs | 2 +- 4 files changed, 92 insertions(+), 90 deletions(-) create mode 100644 packages/desktop/scripts/dev-runtime-config.mjs diff --git a/packages/app/e2e/agent-consecutive-turns.spec.ts b/packages/app/e2e/agent-consecutive-turns.spec.ts index ff0d1b94fc..d80968965b 100644 --- a/packages/app/e2e/agent-consecutive-turns.spec.ts +++ b/packages/app/e2e/agent-consecutive-turns.spec.ts @@ -656,7 +656,7 @@ test("keeps the first prompt of a new agent in place through authoritative hydra const submittedRow = page.getByTestId("user-message").filter({ hasText: prompt }).first(); await expect(submittedRow).toBeVisible(); - await gate.waitForAgentStreamItem("user_message"); + await gate.waitForServerMessage("fetch_agent_timeline_response"); await recordPaintsFor(page, 80); expectAtomicFirstPromptTransition(await stopTurnFrameRecording(page)); } finally { diff --git a/packages/desktop/scripts/dev-runtime-config.mjs b/packages/desktop/scripts/dev-runtime-config.mjs new file mode 100644 index 0000000000..2c4bb87e19 --- /dev/null +++ b/packages/desktop/scripts/dev-runtime-config.mjs @@ -0,0 +1,89 @@ +import net from "node:net"; +import path from "node:path"; + +const DEFAULT_REMOTE_DEBUGGING_PORT = 9223; + +export function resolveDevUserDataDir({ devRoot, inheritedUserDataDir, fallbackRoot }) { + if (devRoot) { + return path.join(devRoot, ".dev", "user-data"); + } + if (inheritedUserDataDir) { + return inheritedUserDataDir; + } + if (!fallbackRoot) { + throw new Error("A dev root or fallback root is required"); + } + return path.join(fallbackRoot, ".dev", "user-data"); +} + +export function buildElectronFlags(inheritedFlags, remoteDebuggingPort) { + const flags = (inheritedFlags ?? "") + .split(/\s+/) + .filter(Boolean) + .filter((flag) => !flag.startsWith("--remote-debugging-port=")); + flags.push(`--remote-debugging-port=${remoteDebuggingPort}`); + return flags.join(" "); +} + +function parsePort(value, name) { + const port = Number(value); + if (!Number.isInteger(port) || port < 1 || port > 65_535) { + throw new Error(`${name} must be an integer between 1 and 65535`); + } + return port; +} + +export function findAvailablePort(preferredPort, host = "127.0.0.1") { + return new Promise((resolve, reject) => { + const server = net.createServer(); + server.unref(); + server.once("error", (error) => { + if (error.code === "EADDRINUSE" || error.code === "EACCES") { + resolve(findAvailablePort(0, host)); + return; + } + reject(error); + }); + server.listen(preferredPort, host, () => { + const address = server.address(); + if (!address || typeof address === "string") { + server.close(); + reject(new Error("Could not resolve an available CDP port")); + return; + } + server.close((error) => { + if (error) { + reject(error); + return; + } + resolve(address.port); + }); + }); + }); +} + +export async function selectRemoteDebuggingPort({ + configuredPort, + preferredPort = DEFAULT_REMOTE_DEBUGGING_PORT, + findAvailablePort: findPort = findAvailablePort, +} = {}) { + if (configuredPort) { + return parsePort(configuredPort, "PASEO_ELECTRON_REMOTE_DEBUGGING_PORT"); + } + return findPort(preferredPort); +} + +export async function resolveDevRuntime(env = process.env) { + const remoteDebuggingPort = await selectRemoteDebuggingPort({ + configuredPort: env.PASEO_ELECTRON_REMOTE_DEBUGGING_PORT, + }); + return { + electronFlags: buildElectronFlags(env.PASEO_ELECTRON_FLAGS, remoteDebuggingPort), + remoteDebuggingPort, + userDataDir: resolveDevUserDataDir({ + devRoot: env.PASEO_DEV_ROOT, + inheritedUserDataDir: env.PASEO_ELECTRON_USER_DATA_DIR, + fallbackRoot: env.PASEO_DEV_RUNTIME_FALLBACK_ROOT, + }), + }; +} diff --git a/packages/desktop/scripts/dev-runtime.mjs b/packages/desktop/scripts/dev-runtime.mjs index cba80fb536..ccb1905394 100644 --- a/packages/desktop/scripts/dev-runtime.mjs +++ b/packages/desktop/scripts/dev-runtime.mjs @@ -1,94 +1,7 @@ #!/usr/bin/env node -import net from "node:net"; import path from "node:path"; import { fileURLToPath } from "node:url"; - -const DEFAULT_REMOTE_DEBUGGING_PORT = 9223; - -export function resolveDevUserDataDir({ devRoot, inheritedUserDataDir, fallbackRoot }) { - if (devRoot) { - return path.join(devRoot, ".dev", "user-data"); - } - if (inheritedUserDataDir) { - return inheritedUserDataDir; - } - if (!fallbackRoot) { - throw new Error("A dev root or fallback root is required"); - } - return path.join(fallbackRoot, ".dev", "user-data"); -} - -export function buildElectronFlags(inheritedFlags, remoteDebuggingPort) { - const flags = (inheritedFlags ?? "") - .split(/\s+/) - .filter(Boolean) - .filter((flag) => !flag.startsWith("--remote-debugging-port=")); - flags.push(`--remote-debugging-port=${remoteDebuggingPort}`); - return flags.join(" "); -} - -function parsePort(value, name) { - const port = Number(value); - if (!Number.isInteger(port) || port < 1 || port > 65_535) { - throw new Error(`${name} must be an integer between 1 and 65535`); - } - return port; -} - -export function findAvailablePort(preferredPort, host = "127.0.0.1") { - return new Promise((resolve, reject) => { - const server = net.createServer(); - server.unref(); - server.once("error", (error) => { - if (error.code === "EADDRINUSE" || error.code === "EACCES") { - resolve(findAvailablePort(0, host)); - return; - } - reject(error); - }); - server.listen(preferredPort, host, () => { - const address = server.address(); - if (!address || typeof address === "string") { - server.close(); - reject(new Error("Could not resolve an available CDP port")); - return; - } - server.close((error) => { - if (error) { - reject(error); - return; - } - resolve(address.port); - }); - }); - }); -} - -export async function selectRemoteDebuggingPort({ - configuredPort, - preferredPort = DEFAULT_REMOTE_DEBUGGING_PORT, - findAvailablePort: findPort = findAvailablePort, -} = {}) { - if (configuredPort) { - return parsePort(configuredPort, "PASEO_ELECTRON_REMOTE_DEBUGGING_PORT"); - } - return findPort(preferredPort); -} - -export async function resolveDevRuntime(env = process.env) { - const remoteDebuggingPort = await selectRemoteDebuggingPort({ - configuredPort: env.PASEO_ELECTRON_REMOTE_DEBUGGING_PORT, - }); - return { - electronFlags: buildElectronFlags(env.PASEO_ELECTRON_FLAGS, remoteDebuggingPort), - remoteDebuggingPort, - userDataDir: resolveDevUserDataDir({ - devRoot: env.PASEO_DEV_ROOT, - inheritedUserDataDir: env.PASEO_ELECTRON_USER_DATA_DIR, - fallbackRoot: env.PASEO_DEV_RUNTIME_FALLBACK_ROOT, - }), - }; -} +import { resolveDevRuntime } from "./dev-runtime-config.mjs"; const isMain = process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url); if (isMain) { diff --git a/packages/desktop/scripts/dev-runtime.test.mjs b/packages/desktop/scripts/dev-runtime.test.mjs index 486a304489..c388081c13 100644 --- a/packages/desktop/scripts/dev-runtime.test.mjs +++ b/packages/desktop/scripts/dev-runtime.test.mjs @@ -4,7 +4,7 @@ import { buildElectronFlags, resolveDevUserDataDir, selectRemoteDebuggingPort, -} from "./dev-runtime.mjs"; +} from "./dev-runtime-config.mjs"; describe("desktop dev runtime isolation", () => { test("scopes inherited user data to the explicitly selected dev root", () => {