chore: checkpoint browser tooling and routing updates

This commit is contained in:
William Valentin
2026-02-17 15:18:37 -08:00
parent 0a4cfda787
commit 9a2f1e2bb2
15 changed files with 499 additions and 67 deletions
+9 -1
View File
@@ -55,7 +55,8 @@ describe('Browser tools', () => {
expect(names).toContain('browser.type');
expect(names).toContain('browser.content');
expect(names).toContain('browser.eval');
expect(names).toHaveLength(6);
expect(names).toContain('browser.evaluate');
expect(names).toHaveLength(7);
});
it('browser.navigate navigates to URL', async () => {
@@ -147,6 +148,13 @@ describe('Browser tools', () => {
expect(result.output).toBe('hello world');
});
it('browser.evaluate aliases browser.eval behavior', async () => {
const tool = getTool('browser.evaluate');
const result = await tool.execute({ expression: '1 + 1' });
expect(result.success).toBe(true);
expect(result.output).toContain('42');
});
it('handles navigation errors gracefully', async () => {
mockGoto.mockRejectedValueOnce(new Error('Navigation failed'));
const tool = getTool('browser.navigate');
+19 -2
View File
@@ -64,6 +64,7 @@ export function createBrowserTools(manager: BrowserManager): Tool[] {
createBrowserTypeTool(manager),
createBrowserContentTool(manager),
createBrowserEvalTool(manager),
createBrowserEvaluateTool(manager),
];
}
@@ -294,9 +295,25 @@ function createBrowserContentTool(manager: BrowserManager): Tool {
}
function createBrowserEvalTool(manager: BrowserManager): Tool {
return createBrowserEvalLikeTool(
manager,
'browser.eval',
'Evaluate JavaScript in the browser page context. Returns the result as a string.',
);
}
function createBrowserEvaluateTool(manager: BrowserManager): Tool {
return createBrowserEvalLikeTool(
manager,
'browser.evaluate',
'Alias of browser.eval for compatibility. Evaluates JavaScript in the browser page context.',
);
}
function createBrowserEvalLikeTool(manager: BrowserManager, name: 'browser.eval' | 'browser.evaluate', description: string): Tool {
return {
name: 'browser.eval',
description: 'Evaluate JavaScript in the browser page context. Returns the result as a string.',
name,
description,
inputSchema: {
type: 'object',
properties: {
+2 -1
View File
@@ -98,6 +98,7 @@ const PROFILE_TOOLS: Record<ToolProfile, Set<string>> = {
'browser.type',
'browser.content',
'browser.eval',
'browser.evaluate',
'agent.delegate',
'agents.list',
]),
@@ -110,7 +111,7 @@ const PROFILE_TOOLS: Record<ToolProfile, Set<string>> = {
export const TOOL_GROUPS: Record<string, string[]> = {
'group:fs': ['file.read', 'file.write', 'file.edit', 'file.patch', 'file.list'],
'group:runtime': ['shell.exec', 'process.start', 'process.output', 'process.status', 'process.kill', 'process.list', 'screen.capture', 'camera.capture'],
'group:web': ['web.fetch', 'web.search', 'browser.navigate', 'browser.screenshot', 'browser.click', 'browser.type', 'browser.content', 'browser.eval'],
'group:web': ['web.fetch', 'web.search', 'browser.navigate', 'browser.screenshot', 'browser.click', 'browser.type', 'browser.content', 'browser.eval', 'browser.evaluate'],
'group:memory': ['memory.read', 'memory.write', 'memory.search'],
'group:gmail': ['gmail.list', 'gmail.search', 'gmail.read'],
'group:gcal': ['calendar.today', 'calendar.list', 'calendar.search'],