From d1b4b30eb6c6d57d96f88ce9683ddf5a12f696ed Mon Sep 17 00:00:00 2001 From: zeroaltitude Date: Sat, 28 Feb 2026 22:44:11 -0700 Subject: [PATCH] refactor(browser): let withRouteTabContext wrapper handle url/targetId injection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove redundant url: tab.url and targetId: tab.targetId from individual action/debug route responses. The withRouteTabContext wrapper already resolves the live Playwright URL and injects both fields into any response where they're missing. Hardcoding tab.url in handlers prevented the wrapper from correcting stale relay metadata — the exact scenario it was designed to fix. Addresses Codex review on openclaw/openclaw#30323. --- src/browser/routes/agent.act.ts | 31 +++++++++++++------------------ src/browser/routes/agent.debug.ts | 2 +- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/src/browser/routes/agent.act.ts b/src/browser/routes/agent.act.ts index 1c731d91ba2..4d453c630e0 100644 --- a/src/browser/routes/agent.act.ts +++ b/src/browser/routes/agent.act.ts @@ -558,7 +558,7 @@ export function registerBrowserAgentActRoutes( clickRequest.timeoutMs = timeoutMs; } await pw.clickViaPlaywright(clickRequest); - return res.json({ ok: true, targetId: tab.targetId, url: tab.url }); + return res.json({ ok: true }); } case "type": { const ref = toStringOrEmpty(body.ref) || undefined; @@ -626,7 +626,7 @@ export function registerBrowserAgentActRoutes( typeRequest.timeoutMs = timeoutMs; } await pw.typeViaPlaywright(typeRequest); - return res.json({ ok: true, targetId: tab.targetId, url: tab.url }); + return res.json({ ok: true }); } case "press": { const key = toStringOrEmpty(body.key); @@ -656,7 +656,7 @@ export function registerBrowserAgentActRoutes( key, delayMs: delayMs ?? undefined, }); - return res.json({ ok: true, targetId: tab.targetId, url: tab.url }); + return res.json({ ok: true }); } case "hover": { const ref = toStringOrEmpty(body.ref) || undefined; @@ -699,7 +699,7 @@ export function registerBrowserAgentActRoutes( selector, timeoutMs: timeoutMs ?? undefined, }); - return res.json({ ok: true, targetId: tab.targetId, url: tab.url }); + return res.json({ ok: true }); } case "scrollIntoView": { const ref = toStringOrEmpty(body.ref) || undefined; @@ -750,7 +750,7 @@ export function registerBrowserAgentActRoutes( scrollRequest.timeoutMs = timeoutMs; } await pw.scrollIntoViewViaPlaywright(scrollRequest); - return res.json({ ok: true, targetId: tab.targetId, url: tab.url }); + return res.json({ ok: true }); } case "drag": { const startRef = toStringOrEmpty(body.startRef) || undefined; @@ -801,7 +801,7 @@ export function registerBrowserAgentActRoutes( endSelector, timeoutMs: timeoutMs ?? undefined, }); - return res.json({ ok: true, targetId: tab.targetId, url: tab.url }); + return res.json({ ok: true }); } case "select": { const ref = toStringOrEmpty(body.ref) || undefined; @@ -854,7 +854,7 @@ export function registerBrowserAgentActRoutes( values, timeoutMs: timeoutMs ?? undefined, }); - return res.json({ ok: true, targetId: tab.targetId, url: tab.url }); + return res.json({ ok: true }); } case "fill": { const rawFields = Array.isArray(body.fields) ? body.fields : []; @@ -899,7 +899,7 @@ export function registerBrowserAgentActRoutes( fields, timeoutMs: timeoutMs ?? undefined, }); - return res.json({ ok: true, targetId: tab.targetId, url: tab.url }); + return res.json({ ok: true }); } case "resize": { const width = toNumber(body.width); @@ -927,7 +927,7 @@ export function registerBrowserAgentActRoutes( width, height, }); - return res.json({ ok: true, targetId: tab.targetId, url: tab.url }); + return res.json({ ok: true }); } case "wait": { const timeMs = toNumber(body.timeMs); @@ -1001,7 +1001,7 @@ export function registerBrowserAgentActRoutes( fn, timeoutMs, }); - return res.json({ ok: true, targetId: tab.targetId, url: tab.url }); + return res.json({ ok: true }); } case "evaluate": { if (!evaluateEnabled) { @@ -1050,12 +1050,7 @@ export function registerBrowserAgentActRoutes( evalRequest.timeoutMs = evalTimeoutMs; } const result = await pw.evaluateViaPlaywright(evalRequest); - return res.json({ - ok: true, - targetId: tab.targetId, - url: tab.url, - result, - }); + return res.json({ ok: true, result }); } case "close": { if (isExistingSession) { @@ -1152,7 +1147,7 @@ export function registerBrowserAgentActRoutes( timeoutMs: timeoutMs ?? undefined, maxChars: maxChars ?? undefined, }); - res.json({ ok: true, targetId: tab.targetId, url: tab.url, response: result }); + res.json({ ok: true, response: result }); }, }); }); @@ -1204,7 +1199,7 @@ export function registerBrowserAgentActRoutes( targetId: tab.targetId, ref, }); - res.json({ ok: true, targetId: tab.targetId, url: tab.url }); + res.json({ ok: true }); }, }); }); diff --git a/src/browser/routes/agent.debug.ts b/src/browser/routes/agent.debug.ts index 888bdd5576a..14caeced279 100644 --- a/src/browser/routes/agent.debug.ts +++ b/src/browser/routes/agent.debug.ts @@ -32,7 +32,7 @@ export function registerBrowserAgentDebugRoutes( targetId: tab.targetId, level: level.trim() || undefined, }); - res.json({ ok: true, messages, targetId: tab.targetId, url: tab.url }); + res.json({ ok: true, messages }); }, }); });