diff --git a/packages/app/e2e/agent-scroll-submit-firefox.spec.ts b/packages/app/e2e/agent-scroll-submit-firefox.spec.ts index 693d6ad78..6129cbfe0 100644 --- a/packages/app/e2e/agent-scroll-submit-firefox.spec.ts +++ b/packages/app/e2e/agent-scroll-submit-firefox.spec.ts @@ -1,4 +1,8 @@ import { expect, test, type Page } from "@playwright/test"; +import { + buildCreateAgentPreferences, + buildSeededHost, +} from "./helpers/daemon-registry"; const SERVER_ID = process.env.PLAYWRIGHT_REPRO_SERVER_ID ?? "srv_ETXtcjYRGrCI"; @@ -26,33 +30,17 @@ function seedDaemonRegistryScript(params: { endpoint: string; nowIso: string; }) { - const daemon = { + const daemon = buildSeededHost({ serverId: params.serverId, - label: "localhost", - connections: [ - { - id: `direct:${params.endpoint}`, - type: "direct", - endpoint: params.endpoint, - }, - ], - preferredConnectionId: `direct:${params.endpoint}`, - createdAt: params.nowIso, - updatedAt: params.nowIso, - }; + endpoint: params.endpoint, + nowIso: params.nowIso, + }); localStorage.setItem("@paseo:e2e", "1"); localStorage.setItem("@paseo:daemon-registry", JSON.stringify([daemon])); localStorage.setItem( "@paseo:create-agent-preferences", - JSON.stringify({ - serverId: params.serverId, - provider: "codex", - providerPreferences: { - claude: { model: "haiku" }, - codex: { model: "gpt-5.1-codex-mini", thinkingOptionId: "low" }, - }, - }) + JSON.stringify(buildCreateAgentPreferences(params.serverId)) ); } diff --git a/packages/app/e2e/host-removal.spec.ts b/packages/app/e2e/host-removal.spec.ts index baa3bcc7e..31409e271 100644 --- a/packages/app/e2e/host-removal.spec.ts +++ b/packages/app/e2e/host-removal.spec.ts @@ -1,4 +1,7 @@ import { test, expect } from './fixtures'; +import { + buildSeededHost, +} from './helpers/daemon-registry'; test('host removal removes the host from UI and persists after reload', async ({ page }) => { const daemonPort = process.env.E2E_DAEMON_PORT; @@ -14,27 +17,18 @@ test('host removal removes the host from UI and persists after reload', async ({ const extraEndpoint = `127.0.0.1:${extraPort}`; const nowIso = new Date().toISOString(); - const extraDaemon = { + const extraDaemon = buildSeededHost({ serverId: 'srv_e2e_extra_daemon', + endpoint: extraEndpoint, label: 'extra', - connections: [ - { id: `direct:${extraEndpoint}`, type: 'direct', endpoint: extraEndpoint }, - ], - preferredConnectionId: `direct:${extraEndpoint}`, - createdAt: nowIso, - updatedAt: nowIso, - }; + nowIso, + }); - const seededTestDaemon = { + const seededTestDaemon = buildSeededHost({ serverId: seededServerId, - label: 'localhost', - connections: [ - { id: `direct:127.0.0.1:${daemonPort}`, type: 'direct', endpoint: `127.0.0.1:${daemonPort}` }, - ], - preferredConnectionId: `direct:127.0.0.1:${daemonPort}`, - createdAt: nowIso, - updatedAt: nowIso, - }; + endpoint: `127.0.0.1:${daemonPort}`, + nowIso, + }); const seedOnceKey = `@paseo:e2e-host-removal-seeded:${Math.random().toString(36).slice(2)}`; diff --git a/packages/app/e2e/host-selection.spec.ts b/packages/app/e2e/host-selection.spec.ts index efc225ea7..ab258f3d5 100644 --- a/packages/app/e2e/host-selection.spec.ts +++ b/packages/app/e2e/host-selection.spec.ts @@ -1,4 +1,8 @@ import { test, expect } from './fixtures'; +import { + buildCreateAgentPreferences, + buildSeededHost, +} from './helpers/daemon-registry'; import { ensureHostSelected, gotoHome } from './helpers/app'; test('new agent auto-selects the previous host', async ({ page }) => { @@ -25,28 +29,12 @@ test('new agent respects serverId in the URL', async ({ page }) => { // Ensure this test's storage is deterministic even under parallel load. const nowIso = new Date().toISOString(); - const testDaemon = { + const testDaemon = buildSeededHost({ serverId, - label: 'localhost', - connections: [ - { - id: `direct:127.0.0.1:${daemonPort}`, - type: 'direct', - endpoint: `127.0.0.1:${daemonPort}`, - }, - ], - preferredConnectionId: `direct:127.0.0.1:${daemonPort}`, - createdAt: nowIso, - updatedAt: nowIso, - }; - const createAgentPreferences = { - serverId: testDaemon.serverId, - provider: 'codex', - providerPreferences: { - claude: { model: 'haiku' }, - codex: { model: 'gpt-5.1-codex-mini', thinkingOptionId: 'low' }, - }, - }; + endpoint: `127.0.0.1:${daemonPort}`, + nowIso, + }); + const createAgentPreferences = buildCreateAgentPreferences(testDaemon.serverId); await page.goto('/settings'); await page.evaluate( @@ -60,7 +48,10 @@ test('new agent respects serverId in the URL', async ({ page }) => { { daemon: testDaemon, preferences: createAgentPreferences } ); await page.reload(); - await expect(page.getByText('New agent', { exact: true }).first()).toBeVisible({ timeout: 20000 }); + await expect(page.getByText('Settings', { exact: true }).first()).toBeVisible({ timeout: 20000 }); + await expect(page.locator(`[data-testid="daemon-card-${serverId}"]:visible`).first()).toBeVisible({ + timeout: 20000, + }); await page.goto(`/?serverId=${encodeURIComponent(serverId)}`); await expect(page.getByText('New agent', { exact: true }).first()).toBeVisible(); @@ -87,20 +78,11 @@ test('new agent auto-selects first online host when no preference is stored', as } const nowIso = new Date().toISOString(); - const testDaemon = { + const testDaemon = buildSeededHost({ serverId, - label: 'localhost', - connections: [ - { - id: `direct:127.0.0.1:${daemonPort}`, - type: 'direct', - endpoint: `127.0.0.1:${daemonPort}`, - }, - ], - preferredConnectionId: `direct:127.0.0.1:${daemonPort}`, - createdAt: nowIso, - updatedAt: nowIso, - }; + endpoint: `127.0.0.1:${daemonPort}`, + nowIso, + }); await gotoHome(page); await page.evaluate( diff --git a/packages/app/e2e/manual-host-port.spec.ts b/packages/app/e2e/manual-host-port.spec.ts index 5f042fd9e..b29b64aaf 100644 --- a/packages/app/e2e/manual-host-port.spec.ts +++ b/packages/app/e2e/manual-host-port.spec.ts @@ -72,7 +72,7 @@ test('manual host add accepts host:port only and persists a direct connection', entry?.serverId === serverId && Array.isArray(entry?.connections) && entry.connections.some( - (conn: any) => conn?.type === 'direct' && conn?.endpoint === `127.0.0.1:${port}` + (conn: any) => conn?.type === 'directTcp' && conn?.endpoint === `127.0.0.1:${port}` ) ); } catch { diff --git a/packages/app/e2e/relay-fallback-connect.spec.ts b/packages/app/e2e/relay-fallback-connect.spec.ts index 3e166e0f6..41224d3d9 100644 --- a/packages/app/e2e/relay-fallback-connect.spec.ts +++ b/packages/app/e2e/relay-fallback-connect.spec.ts @@ -1,4 +1,5 @@ import { test, expect } from './fixtures'; +import { buildDirectTcpConnection } from './helpers/daemon-registry'; import { gotoHome, openSettings } from './helpers/app'; test('connects via relay when direct endpoints fail', async ({ page }) => { @@ -18,7 +19,7 @@ test('connects via relay when direct endpoints fail', async ({ page }) => { serverId, label: 'relay-daemon', connections: [ - { id: 'direct:127.0.0.1:9', type: 'direct', endpoint: '127.0.0.1:9' }, + buildDirectTcpConnection('127.0.0.1:9'), { id: `relay:${relayEndpoint}`, type: 'relay', relayEndpoint, daemonPublicKeyB64 }, ], preferredConnectionId: 'direct:127.0.0.1:9', diff --git a/packages/app/e2e/relay-stability.spec.ts b/packages/app/e2e/relay-stability.spec.ts index 0ada78006..ff43e7785 100644 --- a/packages/app/e2e/relay-stability.spec.ts +++ b/packages/app/e2e/relay-stability.spec.ts @@ -1,4 +1,5 @@ import { test, expect } from './fixtures'; +import { buildDirectTcpConnection } from './helpers/daemon-registry'; import { gotoHome, openSettings } from './helpers/app'; test('relay connection stays stable across multiple tabs', async ({ page }) => { @@ -18,7 +19,7 @@ test('relay connection stays stable across multiple tabs', async ({ page }) => { serverId, label: 'relay-daemon', connections: [ - { id: 'direct:127.0.0.1:9', type: 'direct', endpoint: '127.0.0.1:9' }, + buildDirectTcpConnection('127.0.0.1:9'), { id: `relay:${relayEndpoint}`, type: 'relay', relayEndpoint, daemonPublicKeyB64 }, ], preferredConnectionId: 'direct:127.0.0.1:9',