From bafbf406c97df4b09c7748f9bdccaa1c5a66e155 Mon Sep 17 00:00:00 2001 From: Kelvin Amoaba <97001695+AmoabaKelvin@users.noreply.github.com> Date: Fri, 30 Oct 2026 07:24:24 +0000 Subject: [PATCH] fix(browser): keep snapshot refs on server browsers that use an external Chromium (#36276) Every command re-selected its tab first, and agent-browser drops the last snapshot's refs on any tab select, so each @ref failed as Unknown ref. Select the tab only when it is not already active. --- .../external-chromium-browser-session.test.ts | 26 +++++++++++++++++++ .../external-chromium-browser-session.ts | 4 +++ 2 files changed, 30 insertions(+) diff --git a/src/main/orcad/external-chromium-browser-session.test.ts b/src/main/orcad/external-chromium-browser-session.test.ts index 300874fb7de..e8ccf981c8c 100644 --- a/src/main/orcad/external-chromium-browser-session.test.ts +++ b/src/main/orcad/external-chromium-browser-session.test.ts @@ -167,6 +167,32 @@ describe('orcad external-chromium agent-browser environment', () => { expect(issued).not.toContain('open') }) + it('selects a tab only when it is not already active, keeping the snapshot refs', async () => { + runProcessMock.mockImplementation(() => { + const tabs = [ + { active: true, tabId: 't1', title: 'a', url: 'about:blank' }, + { active: false, tabId: 't2', title: 'b', url: 'about:blank' } + ] + return Promise.resolve({ + code: 0, + signal: null, + stdout: JSON.stringify({ success: true, data: { tabs } }), + stderr: '', + timedOut: false + }) + }) + const session = new ExternalChromiumBrowserSession( + '/opt/orca/agent-browser', + { executablePath: BASE.executablePath, provider: 'chromium' }, + '/state' + ) + + await session.selectPage('t1') + expect(commands()).toEqual([['tab']]) + await session.selectPage('t2') + expect(commands()).toEqual([['tab'], ['tab'], ['tab', 't2']]) + }) + it('reclaims a session that answers nothing, then opens', async () => { let listed = 0 runProcessMock.mockImplementation((spec: Spec) => { diff --git a/src/main/orcad/external-chromium-browser-session.ts b/src/main/orcad/external-chromium-browser-session.ts index 0df599dc033..02522c03966 100644 --- a/src/main/orcad/external-chromium-browser-session.ts +++ b/src/main/orcad/external-chromium-browser-session.ts @@ -138,6 +138,10 @@ export class ExternalChromiumBrowserSession { } async selectPage(agentPageId: string): Promise { + // Selecting any tab, even the active one, discards the refs of the last snapshot. + if ((await this.readTabs()).some((tab) => tab.tabId === agentPageId && tab.active)) { + return + } await this.run(['tab', agentPageId]) }