fix(agent-browser): restore bounded presentation lifecycle
This commit is contained in:
@@ -426,6 +426,21 @@ async function installCodingFirstChatHost(
|
||||
ok: true,
|
||||
data: { status, ok: status >= 200 && status < 300, json },
|
||||
});
|
||||
const browserSnapshot = (overrides: Record<string, unknown> = {}) => ({
|
||||
browserId: null,
|
||||
projectId: project.id,
|
||||
projectPath: null,
|
||||
state: 'closed',
|
||||
generation: 0,
|
||||
url: '',
|
||||
title: '',
|
||||
visible: false,
|
||||
bounds: null,
|
||||
canGoBack: false,
|
||||
canGoForward: false,
|
||||
eventCursor: 0,
|
||||
...overrides,
|
||||
});
|
||||
|
||||
ipcMain.removeHandler('hostapi:fetch');
|
||||
ipcMain.handle('hostapi:fetch', async (
|
||||
@@ -528,6 +543,47 @@ async function installCodingFirstChatHost(
|
||||
: [],
|
||||
});
|
||||
}
|
||||
if (path.startsWith('/api/agent-browser/state?')) {
|
||||
return respond({ success: true, browser: browserSnapshot() });
|
||||
}
|
||||
if (path === '/api/agent-browser/open' && method === 'POST') {
|
||||
return respond({
|
||||
success: true,
|
||||
browser: browserSnapshot({
|
||||
browserId: 'browser-e2e',
|
||||
state: 'attached',
|
||||
generation: 1,
|
||||
url: body?.url,
|
||||
visible: true,
|
||||
bounds: body?.bounds,
|
||||
}),
|
||||
});
|
||||
}
|
||||
if (path === '/api/agent-browser/present' && method === 'POST') {
|
||||
return respond({
|
||||
success: true,
|
||||
browser: browserSnapshot({
|
||||
browserId: 'browser-e2e',
|
||||
state: 'attached',
|
||||
generation: 1,
|
||||
url: 'http://127.0.0.1:4173/',
|
||||
visible: body?.visible === true,
|
||||
bounds: body?.bounds ?? null,
|
||||
}),
|
||||
});
|
||||
}
|
||||
if (path === '/api/agent-browser/diagnostics' && method === 'POST') {
|
||||
return respond({ success: true, browser: browserSnapshot() });
|
||||
}
|
||||
if (path === '/api/agent-browser/cdp/events' && method === 'POST') {
|
||||
return respond({
|
||||
success: true,
|
||||
page: { events: [], nextCursor: 0, hasMore: false },
|
||||
});
|
||||
}
|
||||
if (path === '/api/agent-browser/close' && method === 'POST') {
|
||||
return respond({ success: true, browser: browserSnapshot() });
|
||||
}
|
||||
if (path === '/api/coding/projects/conversations' && method === 'POST') {
|
||||
state.conversationCreated = true;
|
||||
return respond({ conversation }, 201);
|
||||
@@ -1039,6 +1095,20 @@ test('PI feature UI isolates Conversations and exposes queue, interaction, model
|
||||
await expect(conversationHeader.getByRole('button', { name: '归档' })).toHaveCount(0);
|
||||
await expect(conversationHeader.getByRole('button', { name: '智能体设置' })).toHaveCount(0);
|
||||
await expect(conversationHeader.getByRole('button', { name: '打开编程工具' })).toHaveCount(0);
|
||||
const browserToggle = conversationHeader.getByRole('button', { name: '打开开发浏览器' });
|
||||
await expect(browserToggle).toBeVisible();
|
||||
await browserToggle.click();
|
||||
await expect(page.getByTestId('agent-browser-panel')).toBeVisible();
|
||||
await expect(page.getByTestId('agent-browser-diagnostics')).toHaveAttribute('data-state', 'closed');
|
||||
await expect.poll(async () => {
|
||||
const state = await readState(electronApp);
|
||||
return state.captured.some((request) => request.path.startsWith('/api/agent-browser/state?'));
|
||||
}).toBe(true);
|
||||
expect((await readState(electronApp)).captured.some(
|
||||
(request) => request.path === '/api/agent-browser/diagnostics',
|
||||
)).toBe(false);
|
||||
await page.getByRole('button', { name: '关闭开发浏览器' }).last().click();
|
||||
await expect(page.getByTestId('agent-browser-panel')).toHaveCount(0);
|
||||
await expect(page.getByRole('button', { name: '项目设置' })).toHaveCount(1);
|
||||
await expect(page.getByTestId('coding-conversation-sidebar')).toBeVisible();
|
||||
const activeProcess = page.getByTestId('coding-process-group');
|
||||
|
||||
Reference in New Issue
Block a user