From 544c47e0d21435a4d0847611f9de3c98d9d3ba79 Mon Sep 17 00:00:00 2001 From: sovushik Date: Thu, 12 Feb 2026 21:31:25 +0500 Subject: [PATCH] fix(browser): clarify stale targetId errors (tab not found) --- src/browser/client-fetch.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/browser/client-fetch.ts b/src/browser/client-fetch.ts index 1a5a835d1be..9cda6c928ce 100644 --- a/src/browser/client-fetch.ts +++ b/src/browser/client-fetch.ts @@ -15,6 +15,21 @@ function enhanceBrowserFetchError(url: string, err: unknown, timeoutMs: number): : `Start (or restart) the OpenClaw gateway (OpenClaw.app menubar, or \`${formatCliCommand("openclaw gateway")}\`) and try again.`; const msg = String(err); const msgLower = msg.toLowerCase(); + + // The control service is often healthy, but the targetId/tab becomes stale (e.g., after a + // profile restart or transient CDP disconnect). Surface that explicitly to avoid misleading + // users with a generic "can't reach the control service" error. + const looksLikeMissingTarget = + msgLower.includes("tab not found") || + msgLower.includes("target not found") || + msgLower.includes("no such target") || + msgLower.includes("target closed"); + if (looksLikeMissingTarget) { + return new Error( + `OpenClaw browser tab/target was not found (stale targetId). Re-open the page to get a new targetId and retry. (${msg})`, + ); + } + const looksLikeTimeout = msgLower.includes("timed out") || msgLower.includes("timeout") ||