diff --git a/extensions/browser/src/browser/chrome.diagnostics.ts b/extensions/browser/src/browser/chrome.diagnostics.ts index ca9d8e6bd54..ee59875461f 100644 --- a/extensions/browser/src/browser/chrome.diagnostics.ts +++ b/extensions/browser/src/browser/chrome.diagnostics.ts @@ -178,7 +178,7 @@ async function diagnoseCdpHealthCommand( : `WebSocket handshake did not complete within ${timeoutMs}ms`, }); }, - Math.max(50, timeoutMs + 25), + Math.max(1, timeoutMs + Math.min(25, timeoutMs)), ); ws.once("open", () => { diff --git a/extensions/browser/src/browser/chrome.test.ts b/extensions/browser/src/browser/chrome.test.ts index 94749598024..c28332e0273 100644 --- a/extensions/browser/src/browser/chrome.test.ts +++ b/extensions/browser/src/browser/chrome.test.ts @@ -430,7 +430,7 @@ describe("browser chrome helpers", () => { // Simulate a stale command channel: WS opens but never responds to commands. onConnection: (wss) => wss.on("connection", (_ws) => {}), run: async (baseUrl) => { - await expect(isChromeCdpReady(baseUrl, 300, 150)).resolves.toBe(false); + await expect(isChromeCdpReady(baseUrl, 300, 5)).resolves.toBe(false); }, }); }); @@ -440,7 +440,7 @@ describe("browser chrome helpers", () => { wsPath: "/devtools/browser/stale-diagnostic", onConnection: (wss) => wss.on("connection", (_ws) => {}), run: async (baseUrl) => { - const diagnostic = await diagnoseChromeCdp(baseUrl, 300, 150); + const diagnostic = await diagnoseChromeCdp(baseUrl, 300, 5); expect(diagnostic).toMatchObject({ ok: false, code: "websocket_health_command_timeout", diff --git a/extensions/browser/src/browser/chrome.ts b/extensions/browser/src/browser/chrome.ts index b5c00791366..7b82ea89059 100644 --- a/extensions/browser/src/browser/chrome.ts +++ b/extensions/browser/src/browser/chrome.ts @@ -433,7 +433,8 @@ export async function stopOpenClawChrome( if (!(await isChromeReachable(cdpUrlForPort(running.cdpPort), CHROME_STOP_PROBE_TIMEOUT_MS))) { return; } - await new Promise((r) => setTimeout(r, 100)); + const remainingMs = timeoutMs - (Date.now() - start); + await new Promise((r) => setTimeout(r, Math.max(1, Math.min(100, remainingMs)))); } try {