mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-12 07:20:45 +00:00
fix(browser-relay): fallback to cached targetId on target info lookup failure
This commit is contained in:
committed by
Peter Steinberger
parent
3ae8e5ee91
commit
591ff3c1c8
@@ -277,12 +277,24 @@ async function reannounceAttachedTabs() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Send fresh attach event to relay.
|
// Send fresh attach event to relay.
|
||||||
|
// Split into two try-catch blocks so debugger failures and relay send
|
||||||
|
// failures are handled independently. Previously, a relay send failure
|
||||||
|
// would fall into the outer catch and set the badge to 'on' even though
|
||||||
|
// the relay had no record of the tab — causing every subsequent browser
|
||||||
|
// tool call to fail with "no tab connected" until the next reconnect cycle.
|
||||||
|
let targetInfo
|
||||||
try {
|
try {
|
||||||
const info = /** @type {any} */ (
|
const info = /** @type {any} */ (
|
||||||
await chrome.debugger.sendCommand({ tabId }, 'Target.getTargetInfo')
|
await chrome.debugger.sendCommand({ tabId }, 'Target.getTargetInfo')
|
||||||
)
|
)
|
||||||
const targetInfo = info?.targetInfo
|
targetInfo = info?.targetInfo
|
||||||
|
} catch {
|
||||||
|
// Target.getTargetInfo failed. Preserve at least targetId from
|
||||||
|
// cached tab state so relay receives a stable identifier.
|
||||||
|
targetInfo = tab.targetId ? { targetId: tab.targetId } : undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
sendToRelay({
|
sendToRelay({
|
||||||
method: 'forwardCDPEvent',
|
method: 'forwardCDPEvent',
|
||||||
params: {
|
params: {
|
||||||
@@ -301,7 +313,15 @@ async function reannounceAttachedTabs() {
|
|||||||
title: 'OpenClaw Browser Relay: attached (click to detach)',
|
title: 'OpenClaw Browser Relay: attached (click to detach)',
|
||||||
})
|
})
|
||||||
} catch {
|
} catch {
|
||||||
setBadge(tabId, 'on')
|
// Relay send failed (e.g. WS closed in the gap between ensureRelayConnection
|
||||||
|
// resolving and this loop executing). The tab is still valid — leave badge
|
||||||
|
// as 'connecting' so the reconnect/keepalive cycle will retry rather than
|
||||||
|
// showing a false-positive 'on' that hides the broken state from the user.
|
||||||
|
setBadge(tabId, 'connecting')
|
||||||
|
void chrome.action.setTitle({
|
||||||
|
tabId,
|
||||||
|
title: 'OpenClaw Browser Relay: relay reconnecting…',
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -769,7 +789,11 @@ async function onDebuggerDetach(source, reason) {
|
|||||||
title: 'OpenClaw Browser Relay: re-attaching after navigation…',
|
title: 'OpenClaw Browser Relay: re-attaching after navigation…',
|
||||||
})
|
})
|
||||||
|
|
||||||
const delays = [300, 700, 1500]
|
// Extend re-attach window from 2.5 s to ~7.7 s (5 attempts).
|
||||||
|
// SPAs and pages with heavy JS can take >2.5 s before the Chrome debugger
|
||||||
|
// is attachable, causing all three original attempts to fail and leaving
|
||||||
|
// the badge permanently off after every navigation.
|
||||||
|
const delays = [200, 500, 1000, 2000, 4000]
|
||||||
for (let attempt = 0; attempt < delays.length; attempt++) {
|
for (let attempt = 0; attempt < delays.length; attempt++) {
|
||||||
await new Promise((r) => setTimeout(r, delays[attempt]))
|
await new Promise((r) => setTimeout(r, delays[attempt]))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user