Focus browser automation new tabs

This commit is contained in:
Mohamed Boudra
2026-07-02 18:46:57 +02:00
parent adc0c01782
commit 172de4fbc2
2 changed files with 18 additions and 10 deletions
@@ -125,7 +125,7 @@ describe("mountBrowserAutomationHandler", () => {
useWorkspaceLayoutStore.setState({ layoutByWorkspace: {} }); useWorkspaceLayoutStore.setState({ layoutByWorkspace: {} });
}); });
test("creates an unfocused workspace browser tab for browser_new_tab", async () => { test("creates a focused workspace browser tab for browser_new_tab", async () => {
const client = new FakeDaemonClient(); const client = new FakeDaemonClient();
const setWorkspaceActiveBrowser = vi.fn(async () => undefined); const setWorkspaceActiveBrowser = vi.fn(async () => undefined);
const setAgentActiveBrowser = vi.fn(async () => undefined); const setAgentActiveBrowser = vi.fn(async () => undefined);
@@ -164,25 +164,32 @@ describe("mountBrowserAutomationHandler", () => {
if (!payload?.ok) throw new Error("expected success"); if (!payload?.ok) throw new Error("expected success");
expect(payload.result.command).toBe("new_tab"); expect(payload.result.command).toBe("new_tab");
if (payload.result.command !== "new_tab") throw new Error("expected new_tab result"); if (payload.result.command !== "new_tab") throw new Error("expected new_tab result");
const browserId = payload.result.browserId;
expect(payload.result.url).toBe("https://example.com"); expect(payload.result.url).toBe("https://example.com");
expect(useWorkspaceLayoutStore.getState().getWorkspaceTabs(workspaceKey)).toContainEqual( const browserTab = useWorkspaceLayoutStore
expect.objectContaining({ target: { kind: "browser", browserId: payload.result.browserId } }), .getState()
); .getWorkspaceTabs(workspaceKey)
.find((tab) => tab.target.kind === "browser" && tab.target.browserId === browserId);
expect(browserTab).toBeDefined();
const layout = useWorkspaceLayoutStore.getState().layoutByWorkspace[workspaceKey]; const layout = useWorkspaceLayoutStore.getState().layoutByWorkspace[workspaceKey];
expect(layout?.root.kind).toBe("pane"); expect(layout?.root.kind).toBe("pane");
if (layout?.root.kind !== "pane") throw new Error("expected root pane"); if (layout?.root.kind !== "pane") throw new Error("expected root pane");
expect(layout.root.pane.focusedTabId).toBe(focusedTabId); expect(layout.root.pane.focusedTabId).toBe(browserTab?.tabId);
expect(layout.root.pane.focusedTabId).not.toBe(focusedTabId);
expect(registerWorkspaceBrowser).toHaveBeenCalledWith({ expect(registerWorkspaceBrowser).toHaveBeenCalledWith({
browserId: payload.result.browserId, browserId,
workspaceId: "wks_workspace_a", workspaceId: "wks_workspace_a",
}); });
expect(setAgentActiveBrowser).toHaveBeenCalledWith({ expect(setAgentActiveBrowser).toHaveBeenCalledWith({
agentId: "agent-1", agentId: "agent-1",
browserId: payload.result.browserId, browserId,
});
expect(setWorkspaceActiveBrowser).toHaveBeenCalledWith({
browserId,
workspaceId: "wks_workspace_a",
}); });
expect(setWorkspaceActiveBrowser).not.toHaveBeenCalled();
expect(ensureResidentBrowserWebview).toHaveBeenCalledWith({ expect(ensureResidentBrowserWebview).toHaveBeenCalledWith({
browserId: payload.result.browserId, browserId,
url: "https://example.com", url: "https://example.com",
}); });
expect(executeAutomationCommand).toHaveBeenCalledTimes(1); expect(executeAutomationCommand).toHaveBeenCalledTimes(1);
@@ -178,12 +178,13 @@ async function openBrowserTabForRequest(params: {
message: "Cannot create a browser tab without a workspace context.", message: "Cannot create a browser tab without a workspace context.",
}); });
} }
useWorkspaceLayoutStore.getState().openTabInBackground(workspaceKey, { useWorkspaceLayoutStore.getState().openTabFocused(workspaceKey, {
kind: "browser", kind: "browser",
browserId, browserId,
}); });
await browserHost?.registerWorkspaceBrowser?.({ browserId, workspaceId }); await browserHost?.registerWorkspaceBrowser?.({ browserId, workspaceId });
await browserHost?.setWorkspaceActiveBrowser?.({ browserId, workspaceId });
if (request.agentId) { if (request.agentId) {
await browserHost?.setAgentActiveBrowser?.({ agentId: request.agentId, browserId }); await browserHost?.setAgentActiveBrowser?.({ agentId: request.agentId, browserId });
} }