From 6b9de10c737af5865631395db2eba8e2f14064d8 Mon Sep 17 00:00:00 2001 From: leeguooooo Date: Sat, 13 Jun 2026 16:50:07 +0900 Subject: [PATCH] fix(ab-connect): transparently re-attach a stale cb-tab session before failing (0.4.6, #20.1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a tab navigates across render processes (e.g. an SSO redirect to another origin like login.account.rakuten.com), the debugger handle detaches and the session drops out of the relay maps, so the next command dead-ends with 'stale sessionId ... its tab is gone' — even open/navigate, which should always be able to drive the tab. But cb-tab- encodes the STABLE Chrome tabId (#17), and the tab itself usually survives the nav. So before throwing, recoverSessionTab() parses the tabId out of the session, checks the tab still exists + is eligible, and re-attaches (attachTab re-mints the identical cb-tab- session, keeping the daemon's binding valid), then the in-flight command retries against the recovered tab. Complements the 0.4.5 onDetach proactive re-attach: that heals on the detach event, this heals lazily on the next command if the event was missed. Falls back to the original error only when the tab is genuinely gone (closed/restricted). --- extensions/ab-connect.crx | Bin 30195 -> 31733 bytes extensions/ab-connect.zip | Bin 29594 -> 31149 bytes extensions/ab-connect/background.js | 40 ++++++++++++++++++++++++---- extensions/ab-connect/manifest.json | 2 +- 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/extensions/ab-connect.crx b/extensions/ab-connect.crx index c54c22178673e31df24cac4a1be1a8dd7fbc4d9a..08b5b32a823929ffbc6a7418d5570583349b1f50 100644 GIT binary patch delta 9955 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 diff --git a/extensions/ab-connect.zip b/extensions/ab-connect.zip index 45c2a58ee40b7fc3a91910e9058e294a951d8e93..d6f98664b215b94402f9e4dd22c3b79f8a946f78 100644 GIT binary patch delta 10020 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 delta 8361 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 WD;)uUFPeYv#s_aoM8&ti` session: the handle is gone +// from our maps, but if the underlying Chrome tab still exists and is eligible, +// re-attach to it and return its id so the in-flight command can be retried. +// Returns null when the tab is genuinely gone (closed / restricted), in which +// case the caller surfaces the stale-session error. (issue #20.1) +async function recoverSessionTab(sessionId) { + const m = /^cb-tab-(\d+)$/.exec(sessionId) + if (!m) return null + const tabId = Number(m[1]) + const tab = await chrome.tabs.get(tabId).catch(() => null) + if (!eligible(tab)) return null + try { + await attachTab(tabId) + } catch { + return null + } + return tabs.has(tabId) ? tabId : null +} + function anyConnectedTab() { const it = tabs.keys().next() return it.done ? null : it.value @@ -209,11 +228,22 @@ async function handleForwardCdpCommand(msg) { if (sessionId) { tabId = tabForSession(sessionId) if (!tabId) { - throw new Error( - `stale sessionId ${sessionId} for ${method}: its tab is gone (closed, ` + - `navigated across processes, or lost after an extension restart). ` + - `Re-attach by re-opening your target URL before retrying.`, - ) + // The session's debugger handle is gone, but `cb-tab-` encodes the + // STABLE Chrome tabId (#17). A cross-process navigation (e.g. an SSO + // redirect to another origin), a service-worker restart, or DevTools + // briefly stealing the debugger all tear the handle down while the tab + // itself lives on. Before failing, try to transparently re-attach to that + // same tab and retry — so `open`/`navigate`/`eval` self-heal instead of + // dead-ending the agent (issue #20.1). attachTab re-mints the identical + // `cb-tab-` session, so the daemon's binding stays valid. + tabId = await recoverSessionTab(sessionId) + if (!tabId) { + throw new Error( + `stale sessionId ${sessionId} for ${method}: its tab is gone (closed, ` + + `navigated across processes, or lost after an extension restart). ` + + `Re-attach by re-opening your target URL before retrying.`, + ) + } } } else if (typeof params?.targetId === 'string') { tabId = tabForTarget(params.targetId) diff --git a/extensions/ab-connect/manifest.json b/extensions/ab-connect/manifest.json index a1edb1b..228d276 100644 --- a/extensions/ab-connect/manifest.json +++ b/extensions/ab-connect/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "chrome-use", - "version": "0.4.5", + "version": "0.4.6", "description": "Let chrome-use drive your logged-in Chrome \u2014 install once, no token, no per-use confirmation.", "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6vQIyscGIPYPZdSpPwPL0+0gxUROyRgCpmvCSDoc8XUm4qm97VbKnD9Ijc1lV22lNWZtE78gaRjt6BeSfuMgnBymnhLKjN1gU6AI5QUU0mrJyeHdWKvrKQR5FmsM2A7Xr1ykE2SiiS8zNUS3Y/6O5l+Nva7wrVy6E4a2dkBVQkOsu+DV+nEZvhIyuDY5D5SPXqNwUTWTaglwj5mjvHz36xSwCWlPmrtJ+ED0AUyrb2z4GIOmvk4kqtBVrh/UD058klLo4CkYOnIybB5aV6WYuwarfPY4bF/dLggPem+ewLNTUNBuwrxj/A4nUv0LJTuRO8rR7f8WR9qnRCY0Ic5saQIDAQAB", "icons": {