@amaster.ai/pi-browser-use 0.1.2-beta.8 → 0.1.2-beta.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,92 +1,268 @@
1
- import { loadPiSettings } from '@amaster.ai/pi-shared/settings';
2
- import { complete } from '@earendil-works/pi-ai';
3
- import { getAgentDir } from '@earendil-works/pi-coding-agent';
4
- import { Client } from '@modelcontextprotocol/sdk/client/index.js';
5
- import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
1
+ import { createRequire } from 'node:module';
2
+ import { dirname, join } from 'node:path';
3
+ import { isProjectTrusted, loadPiSettings, } from '@amaster.ai/pi-shared/settings';
6
4
  import { Type } from 'typebox';
7
5
  import { handleAnalyzeScreenshot, VISUAL_SYSTEM_PROMPT, } from './analyze-screenshot.js';
8
6
  import { configToArgs, resolveConfig, } from './config.js';
7
+ import { prepareBrowserProfile } from './profile.js';
9
8
  import { augmentToolDescription, extractTextContent, postProcessToolResult, } from './tool-augment.js';
9
+ import { buildGroups, CORE_TOOLS, GROUP_SUMMARIES, loadCategoryMap } from './tool-groups.js';
10
10
  export { configToArgs, resolveConfig };
11
11
  // All upstream tools are re-exported with this prefix to avoid name collisions with other extensions.
12
12
  const TOOL_PREFIX = 'browser_';
13
- // These upstream tools are noisy or slow; skip them during registration.
14
- const EXCLUDED_TOOLS = new Set([
15
- 'lighthouse_audit',
16
- 'performance_analyze_insight',
17
- 'performance_start_trace',
18
- 'performance_stop_trace',
19
- 'screencast_start',
20
- 'screencast_stop',
21
- 'install_extension',
22
- 'list_extensions',
23
- 'reload_extension',
24
- 'trigger_extension_action',
25
- 'uninstall_extension',
26
- ]);
27
13
  const MCP_TIMEOUT_MS = 60_000;
14
+ const MCP_HEALTH_TIMEOUT_MS = 5_000;
15
+ const MCP_HEALTH_CHECK_INTERVAL_MS = 10_000;
16
+ const MCP_STDERR_LIMIT = 4_096;
17
+ const MCP_SYSTEM_ERROR_CODE_PATTERN = /^(?:EACCES|EADDRINUSE|ECONNREFUSED|ECONNRESET|EHOSTUNREACH|ENOENT|ENOTEMPTY|ENOTFOUND|EPERM|ETIMEDOUT)$/;
18
+ const require = createRequire(import.meta.url);
19
+ // Resolved lazily at connect time so extension load does no filesystem work.
20
+ function resolveChromeDevToolsMcpEntrypoint() {
21
+ const packagePath = require.resolve('chrome-devtools-mcp/package.json');
22
+ const pkg = require(packagePath);
23
+ const bin = pkg.bin?.['chrome-devtools-mcp'];
24
+ if (!bin) {
25
+ throw new Error('chrome-devtools-mcp package does not declare its chrome-devtools-mcp binary');
26
+ }
27
+ return join(dirname(packagePath), bin);
28
+ }
29
+ function requestOptions(timeout, signal) {
30
+ return signal ? { signal, timeout } : { timeout };
31
+ }
32
+ function safeMcpSystemErrorCode(value) {
33
+ return typeof value === 'string' && MCP_SYSTEM_ERROR_CODE_PATTERN.test(value) ? value : undefined;
34
+ }
35
+ function summarizeMcpFailure(stderr, errorName, errorCode) {
36
+ const systemError = safeMcpSystemErrorCode(errorCode) ??
37
+ stderr.match(/\b(EACCES|EADDRINUSE|ECONNREFUSED|ECONNRESET|EHOSTUNREACH|ENOENT|ENOTEMPTY|ENOTFOUND|EPERM|ETIMEDOUT)\b/)?.[1];
38
+ if (systemError)
39
+ return `MCP subprocess failed (${systemError}).`;
40
+ if (/could not find (?:chrome|browser)/i.test(stderr)) {
41
+ return 'Chrome executable was not found.';
42
+ }
43
+ if (/failed to launch (?:the )?(?:browser|chrome)/i.test(stderr)) {
44
+ return 'Chrome failed to launch.';
45
+ }
46
+ if (/(?:browser|chrome).+already running|profile.+in use/i.test(stderr)) {
47
+ return 'Chrome profile is already in use.';
48
+ }
49
+ const safeErrorName = /^[A-Za-z][A-Za-z0-9]{0,63}$/.test(errorName) ? errorName : 'UnknownError';
50
+ return `MCP transport failed (${safeErrorName}).`;
51
+ }
52
+ function pageRoutingGuidance(enabled) {
53
+ return enabled
54
+ ? {
55
+ promptSnippet: 'Use browser_list_pages first, then pass its numeric pageId.',
56
+ promptGuidelines: [
57
+ 'Call browser_list_pages before page-scoped tools to obtain the current numeric pageId.',
58
+ 'Pass pageId explicitly instead of relying on shared browser_select_page state.',
59
+ ],
60
+ }
61
+ : {};
62
+ }
28
63
  /**
29
64
  * MCP client that spawns chrome-devtools-mcp as a subprocess and communicates
30
65
  * over stdio. Owns the child-process lifecycle: connect() starts it, close() kills it.
31
66
  */
32
67
  export class DevToolsClient {
33
68
  client = null;
34
- transport = null;
35
69
  config;
70
+ state = 'disconnected';
71
+ connectPromise = null;
72
+ generation = 0;
73
+ hasConnected = false;
74
+ explicitlyClosed = false;
75
+ lastHealthCheckAt = 0;
36
76
  constructor(config) {
37
77
  this.config = resolveConfig(config);
38
78
  }
39
- async connect() {
79
+ getState() {
80
+ return this.state;
81
+ }
82
+ async connect(signal) {
83
+ if (this.state === 'ready')
84
+ return;
85
+ if (this.connectPromise)
86
+ return this.connectPromise;
87
+ this.explicitlyClosed = false;
88
+ this.connectPromise = this.openConnection(signal);
89
+ try {
90
+ await this.connectPromise;
91
+ }
92
+ finally {
93
+ this.connectPromise = null;
94
+ }
95
+ }
96
+ async openConnection(signal) {
97
+ this.state = this.hasConnected ? 'reconnecting' : 'connecting';
40
98
  const args = configToArgs(this.config);
41
- this.transport = new StdioClientTransport({
42
- command: 'npx',
43
- args: ['-y', 'chrome-devtools-mcp@latest', ...args],
44
- stderr: 'pipe',
45
- });
46
- this.client = new Client({ name: 'pi-browser-use', version: '0.1.0' }, { capabilities: {} });
47
- this.transport.onerror = (error) => {
48
- console.error(`[pi-browser-use] chrome-devtools-mcp transport error: ${error.message}`);
49
- };
50
- await this.client.connect(this.transport);
99
+ const generation = ++this.generation;
100
+ let client = null;
101
+ let stderr = '';
102
+ let transportErrorCode;
103
+ try {
104
+ // Imported lazily: the MCP SDK is heavy and only needed once a session actually connects.
105
+ const [{ Client }, { StdioClientTransport }] = await Promise.all([
106
+ import('@modelcontextprotocol/sdk/client/index.js'),
107
+ import('@modelcontextprotocol/sdk/client/stdio.js'),
108
+ ]);
109
+ const transport = new StdioClientTransport({
110
+ command: process.env.PI_BROWSER_USE_NODE?.trim() || process.execPath,
111
+ // SDK default env strips display/proxy vars a headful Chrome needs.
112
+ env: process.env,
113
+ args: [resolveChromeDevToolsMcpEntrypoint(), ...args],
114
+ stderr: 'pipe',
115
+ });
116
+ transport.stderr?.on('data', (chunk) => {
117
+ stderr = `${stderr}${String(chunk)}`.slice(-MCP_STDERR_LIMIT);
118
+ });
119
+ client = new Client({ name: 'pi-browser-use', version: '0.1.0' }, { capabilities: {} });
120
+ this.client = client;
121
+ transport.onerror = (error) => {
122
+ if (generation !== this.generation)
123
+ return;
124
+ transportErrorCode = safeMcpSystemErrorCode(error.code);
125
+ console.error(`[pi-browser-use] chrome-devtools-mcp transport error (${transportErrorCode ?? error.name})`);
126
+ void this.disconnectUnhealthyClient(generation);
127
+ };
128
+ transport.onclose = () => this.markDisconnected(generation);
129
+ await client.connect(transport, requestOptions(MCP_TIMEOUT_MS, signal));
130
+ if (generation !== this.generation)
131
+ return;
132
+ this.state = 'ready';
133
+ this.hasConnected = true;
134
+ this.lastHealthCheckAt = Date.now();
135
+ }
136
+ catch (error) {
137
+ if (generation === this.generation) {
138
+ ++this.generation;
139
+ this.client = null;
140
+ this.state = 'failed';
141
+ }
142
+ try {
143
+ await client?.close();
144
+ }
145
+ catch {
146
+ // The failed transport may already be closed.
147
+ }
148
+ if (signal?.aborted)
149
+ throw error;
150
+ const errorName = error instanceof Error ? error.name : 'UnknownError';
151
+ const errorCode = error instanceof Error
152
+ ? safeMcpSystemErrorCode(error.code)
153
+ : undefined;
154
+ const diagnostic = summarizeMcpFailure(stderr, errorName, transportErrorCode ?? errorCode);
155
+ console.error(`[pi-browser-use] browser connection failed: ${diagnostic}`);
156
+ throw new Error(`Browser connection failed. ${diagnostic}`);
157
+ }
158
+ }
159
+ markDisconnected(generation) {
160
+ if (generation !== this.generation || this.state === 'closing')
161
+ return;
162
+ ++this.generation;
163
+ this.client = null;
164
+ this.state = 'disconnected';
51
165
  }
52
- async listAllTools() {
53
- if (!this.client)
166
+ async disconnectUnhealthyClient(generation) {
167
+ if (generation !== this.generation || this.state === 'closing')
168
+ return;
169
+ const failedClient = this.client;
170
+ this.markDisconnected(generation);
171
+ if (!failedClient)
172
+ return;
173
+ try {
174
+ await failedClient.close();
175
+ }
176
+ catch {
177
+ console.error('[pi-browser-use] failed to close unhealthy MCP client');
178
+ }
179
+ }
180
+ async ping(signal) {
181
+ if (this.state !== 'ready' || !this.client)
182
+ return false;
183
+ const generation = this.generation;
184
+ try {
185
+ await this.client.ping(requestOptions(MCP_HEALTH_TIMEOUT_MS, signal));
186
+ if (generation !== this.generation)
187
+ return false;
188
+ this.lastHealthCheckAt = Date.now();
189
+ return true;
190
+ }
191
+ catch (error) {
192
+ if (signal?.aborted)
193
+ throw error;
194
+ await this.disconnectUnhealthyClient(generation);
195
+ return false;
196
+ }
197
+ }
198
+ async ensureReady(signal) {
199
+ if (this.explicitlyClosed)
200
+ throw new Error('Client not connected');
201
+ if (this.state === 'ready') {
202
+ const healthCheckIsFresh = Date.now() - this.lastHealthCheckAt < MCP_HEALTH_CHECK_INTERVAL_MS;
203
+ if (healthCheckIsFresh || (await this.ping(signal)))
204
+ return;
205
+ }
206
+ await this.connect(signal);
207
+ }
208
+ async listAllTools(signal) {
209
+ await this.ensureReady(signal);
210
+ const client = this.client;
211
+ if (!client)
54
212
  throw new Error('Client not connected');
55
213
  const allTools = [];
56
214
  let cursor;
57
215
  do {
58
- const result = await this.client.listTools(cursor ? { cursor } : undefined, {
59
- timeout: MCP_TIMEOUT_MS,
60
- });
216
+ const result = await client.listTools(cursor ? { cursor } : undefined, requestOptions(MCP_TIMEOUT_MS, signal));
61
217
  allTools.push(...result.tools);
62
218
  cursor = result.nextCursor;
63
219
  } while (cursor);
64
220
  return allTools;
65
221
  }
66
- async callTool(name, args) {
67
- if (!this.client)
222
+ async callTool(name, args, signal) {
223
+ await this.ensureReady(signal);
224
+ const client = this.client;
225
+ if (!client)
68
226
  throw new Error('Client not connected');
69
- return (await this.client.callTool({ name, arguments: args }, undefined, {
70
- timeout: MCP_TIMEOUT_MS,
71
- }));
227
+ try {
228
+ return (await client.callTool({ name, arguments: args }, undefined, requestOptions(MCP_TIMEOUT_MS, signal)));
229
+ }
230
+ catch (error) {
231
+ if (signal?.aborted)
232
+ throw error;
233
+ if (this.state !== 'ready' || this.client !== client) {
234
+ throw new Error('Browser connection lost; retry the tool.');
235
+ }
236
+ const errorName = error instanceof Error ? error.name : 'UnknownError';
237
+ console.error(`[pi-browser-use] upstream tool call failed (${errorName})`);
238
+ throw new Error('Browser tool call failed.');
239
+ }
72
240
  }
73
241
  async close() {
74
- if (this.client) {
75
- await this.client.close();
76
- this.client = null;
242
+ if (this.explicitlyClosed)
243
+ return;
244
+ this.explicitlyClosed = true;
245
+ this.state = 'closing';
246
+ const client = this.client;
247
+ ++this.generation;
248
+ this.client = null;
249
+ try {
250
+ if (client)
251
+ await client.close();
252
+ }
253
+ finally {
254
+ this.state = 'disconnected';
77
255
  }
78
- this.transport = null;
79
256
  }
80
257
  }
81
- /** Read the pi-browser-use section from .pi/settings.json. */
258
+ /** Read pi-browser-use settings, including the project layer only when trusted. */
82
259
  function loadConfigFromFile(options) {
83
260
  return loadPiSettings('pi-browser-use', {
84
- agentDir: getAgentDir(),
85
261
  ...options,
86
262
  });
87
263
  }
88
- /** Convert upstream MCP result into pi-agent TextContent[], applying post-processing. */
89
- function toTextContent(result, originalName) {
264
+ /** Convert upstream MCP result into pi-agent content, applying text post-processing. */
265
+ function toToolContent(result, originalName) {
90
266
  const textContent = extractTextContent(result.content);
91
267
  const processed = postProcessToolResult(originalName, textContent);
92
268
  const content = [];
@@ -100,6 +276,13 @@ function toTextContent(result, originalName) {
100
276
  }
101
277
  }
102
278
  }
279
+ if (result.content) {
280
+ for (const item of result.content) {
281
+ if (item.type === 'image' && item.data) {
282
+ content.push({ type: 'image', data: item.data, mimeType: item.mimeType ?? 'image/png' });
283
+ }
284
+ }
285
+ }
103
286
  if (content.length === 0) {
104
287
  content.push({ type: 'text', text: '' });
105
288
  }
@@ -118,41 +301,150 @@ function toTextContent(result, originalName) {
118
301
  export default function browserUseExtension(pi) {
119
302
  let config;
120
303
  let client;
121
- let connected = false;
122
- async function ensureConnected() {
304
+ const upstreamToolNames = new Set();
305
+ let toolGroups = new Map();
306
+ const TOOLS_META_TOOL = `${TOOL_PREFIX}tools`;
307
+ async function ensureConnected(signal) {
123
308
  if (!client)
124
309
  throw new Error('browser-use: session not started');
125
- if (!connected) {
126
- await client.connect();
127
- connected = true;
310
+ await client.ensureReady(signal);
311
+ }
312
+ function formatGroupList() {
313
+ const active = new Set(pi.getActiveTools());
314
+ const lines = ['Browser tool groups:'];
315
+ for (const [name, tools] of toolGroups) {
316
+ const activeCount = tools.filter((tool) => active.has(`${TOOL_PREFIX}${tool}`)).length;
317
+ const suffix = activeCount === 0
318
+ ? 'inactive'
319
+ : activeCount === tools.length
320
+ ? 'active'
321
+ : `${activeCount}/${tools.length} active`;
322
+ lines.push(`- ${name} (${tools.length} tools, ${suffix}): ${GROUP_SUMMARIES[name] ?? GROUP_SUMMARIES.other}`);
128
323
  }
324
+ lines.push(`Activate a group with ${TOOLS_META_TOOL} group=<name> or /browser-tools <name>.`);
325
+ return lines.join('\n');
326
+ }
327
+ function activateGroup(group) {
328
+ const wanted = (toolGroups.get(group) ?? []).map((tool) => `${TOOL_PREFIX}${tool}`);
329
+ const active = pi.getActiveTools();
330
+ const toAdd = wanted.filter((name) => !active.includes(name));
331
+ if (toAdd.length > 0)
332
+ pi.setActiveTools([...active, ...toAdd]);
333
+ return { activated: wanted, alreadyActive: toAdd.length === 0 && wanted.length > 0 };
334
+ }
335
+ function applyToolProfile() {
336
+ if (config?.slim || config?.toolProfile !== 'core')
337
+ return;
338
+ const core = new Set(CORE_TOOLS);
339
+ pi.setActiveTools(pi
340
+ .getActiveTools()
341
+ .filter((name) => !upstreamToolNames.has(name) || core.has(name.slice(TOOL_PREFIX.length))));
342
+ }
343
+ function registerToolGroupSurface() {
344
+ pi.registerTool({
345
+ name: TOOLS_META_TOOL,
346
+ label: TOOLS_META_TOOL,
347
+ description: 'List and activate additional browser tool groups (derived from chrome-devtools-mcp categories: input, navigation, debugging, network, emulation, memory, performance, ...). Call without arguments to list groups and their activation status.',
348
+ parameters: Type.Object({
349
+ group: Type.Optional(Type.String({ description: 'Tool group to activate. Omit to list available groups.' })),
350
+ }),
351
+ promptSnippet: 'List or activate extra browser tool groups when the core tools are insufficient',
352
+ promptGuidelines: [
353
+ `Only the core browser tools are active by default. When a task needs network inspection, console details, emulation, heap snapshots, or performance tracing, call ${TOOLS_META_TOOL} with the matching group first — the group's tools become available on the next turn.`,
354
+ ],
355
+ async execute(_toolCallId, params) {
356
+ const group = typeof params.group === 'string' ? params.group : undefined;
357
+ if (!group) {
358
+ return {
359
+ content: [{ type: 'text', text: formatGroupList() }],
360
+ details: undefined,
361
+ };
362
+ }
363
+ if (!toolGroups.has(group)) {
364
+ const available = [...toolGroups.keys()];
365
+ return {
366
+ content: [
367
+ {
368
+ type: 'text',
369
+ text: available.length === 0
370
+ ? 'No browser tool groups available — the browser bridge is not connected yet.'
371
+ : `Unknown group "${group}". Available: ${available.join(', ')}`,
372
+ },
373
+ ],
374
+ details: undefined,
375
+ isError: true,
376
+ };
377
+ }
378
+ const { activated, alreadyActive } = activateGroup(group);
379
+ return {
380
+ content: [
381
+ {
382
+ type: 'text',
383
+ text: `${alreadyActive ? 'Already active' : 'Activated'} group "${group}" (${activated.length} tools): ${activated.join(', ')}. These tools are available from the next turn.`,
384
+ },
385
+ ],
386
+ details: undefined,
387
+ };
388
+ },
389
+ });
390
+ pi.registerCommand('browser-tools', {
391
+ description: 'List or activate browser tool groups',
392
+ getArgumentCompletions: (argumentPrefix) => {
393
+ const prefix = argumentPrefix.trim().toLowerCase();
394
+ return [...toolGroups.keys()]
395
+ .filter((name) => name.startsWith(prefix))
396
+ .map((name) => ({
397
+ value: name,
398
+ label: name,
399
+ description: GROUP_SUMMARIES[name] ?? GROUP_SUMMARIES.other ?? '',
400
+ }));
401
+ },
402
+ async handler(args, ctx) {
403
+ const group = String(args ?? '')
404
+ .trim()
405
+ .toLowerCase();
406
+ if (!group) {
407
+ ctx.ui.notify(formatGroupList(), 'info');
408
+ return;
409
+ }
410
+ if (!toolGroups.has(group)) {
411
+ ctx.ui.notify(`pi-browser-use: unknown group "${group}". Available: ${[...toolGroups.keys()].join(', ') || '(none — browser not connected)'}`, 'warning');
412
+ return;
413
+ }
414
+ const { activated, alreadyActive } = activateGroup(group);
415
+ ctx.ui.notify(`pi-browser-use: ${alreadyActive ? 'already active' : 'activated'} "${group}" (${activated.length} tools).`, 'info');
416
+ },
417
+ });
129
418
  }
130
419
  async function registerUpstreamTools() {
131
420
  await ensureConnected();
132
421
  const upstreamTools = await client.listAllTools();
133
422
  for (const tool of upstreamTools) {
134
- if (EXCLUDED_TOOLS.has(tool.name))
135
- continue;
136
423
  const prefixedName = `${TOOL_PREFIX}${tool.name}`;
137
424
  const originalName = tool.name;
425
+ upstreamToolNames.add(prefixedName);
138
426
  const description = augmentToolDescription(originalName, tool.description ?? '');
427
+ const routingGuidance = pageRoutingGuidance(tool.inputSchema.required?.includes('pageId') ?? false);
139
428
  pi.registerTool({
140
429
  name: prefixedName,
141
430
  label: prefixedName,
142
431
  description,
432
+ ...routingGuidance,
143
433
  parameters: Type.Unsafe(tool.inputSchema),
144
- async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
145
- await ensureConnected();
146
- const result = await client.callTool(originalName, params);
147
- const { content } = toTextContent(result, originalName);
148
- return { content, details: undefined };
434
+ async execute(_toolCallId, params, signal, _onUpdate, _ctx) {
435
+ await ensureConnected(signal);
436
+ const result = await client.callTool(originalName, params, signal);
437
+ const toolContent = toToolContent(result, originalName);
438
+ return { ...toolContent, details: undefined };
149
439
  },
150
440
  });
151
441
  }
152
442
  }
153
443
  /** Create a VisionCaller that uses pi-ai's complete() with the model registry. */
154
444
  function createPiVisionCaller(visionConfig, ctx) {
155
- return async (instruction, imageBase64, mimeType) => {
445
+ return async (instruction, imageBase64, mimeType, signal) => {
446
+ // Imported lazily: pi-ai is heavy and only needed when a vision call actually runs.
447
+ const { complete } = await import('@earendil-works/pi-ai/compat');
156
448
  const model = ctx.modelRegistry.find(visionConfig.provider, visionConfig.model);
157
449
  if (!model) {
158
450
  throw new Error(`Vision model "${visionConfig.provider}/${visionConfig.model}" not found in model registry.`);
@@ -162,13 +454,14 @@ export default function browserUseExtension(pi) {
162
454
  throw new Error(`Auth failed for vision model: ${auth.error}`);
163
455
  }
164
456
  const options = {
165
- temperature: 0,
166
457
  maxTokens: 2048,
167
458
  };
168
459
  if (auth.apiKey)
169
460
  options.apiKey = auth.apiKey;
170
461
  if (auth.headers)
171
462
  options.headers = auth.headers;
463
+ if (signal)
464
+ options.signal = signal;
172
465
  const result = await complete(model, {
173
466
  systemPrompt: VISUAL_SYSTEM_PROMPT,
174
467
  messages: [
@@ -185,6 +478,9 @@ export default function browserUseExtension(pi) {
185
478
  },
186
479
  ],
187
480
  }, options);
481
+ if (result.stopReason === 'error') {
482
+ throw new Error(result.errorMessage || 'Vision model request failed');
483
+ }
188
484
  return result.content
189
485
  .filter((c) => c.type === 'text')
190
486
  .map((c) => c.text)
@@ -192,19 +488,29 @@ export default function browserUseExtension(pi) {
192
488
  };
193
489
  }
194
490
  async function registerVisionTool(visionConfig) {
491
+ const routingGuidance = pageRoutingGuidance(config?.experimentalPageIdRouting === true);
492
+ const pageIdParameter = config?.experimentalPageIdRouting
493
+ ? {
494
+ pageId: Type.Number({
495
+ description: 'Numeric page ID returned by browser_list_pages.',
496
+ }),
497
+ }
498
+ : {};
195
499
  pi.registerTool({
196
500
  name: `${TOOL_PREFIX}analyze_screenshot`,
197
501
  label: `${TOOL_PREFIX}analyze_screenshot`,
198
502
  description: 'Analyze the current page visually using a screenshot. Use when you need to identify elements by visual attributes (color, layout, position) not available in the accessibility tree, or when you need precise pixel coordinates for click_at.',
503
+ ...routingGuidance,
199
504
  parameters: Type.Object({
505
+ ...pageIdParameter,
200
506
  instruction: Type.Optional(Type.String({
201
507
  description: 'What to identify or analyze visually (e.g., "Find the coordinates of the blue submit button").',
202
508
  })),
203
509
  }),
204
- async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
205
- await ensureConnected();
510
+ async execute(_toolCallId, params, signal, _onUpdate, ctx) {
511
+ await ensureConnected(signal);
206
512
  const callVision = createPiVisionCaller(visionConfig, ctx);
207
- const result = await handleAnalyzeScreenshot(client, callVision, params);
513
+ const result = await handleAnalyzeScreenshot(client, callVision, params, signal);
208
514
  const content = [];
209
515
  if (result.content) {
210
516
  for (const item of result.content) {
@@ -216,23 +522,33 @@ export default function browserUseExtension(pi) {
216
522
  if (content.length === 0) {
217
523
  content.push({ type: 'text', text: '' });
218
524
  }
219
- return { content, details: undefined };
525
+ return result.isError
526
+ ? { content, isError: true, details: undefined }
527
+ : { content, details: undefined };
220
528
  },
221
529
  });
222
530
  }
531
+ registerToolGroupSurface();
223
532
  pi.on('session_start', async (_event, ctx) => {
224
- config = resolveConfig(loadConfigFromFile({ cwd: ctx.cwd }));
533
+ config = resolveConfig(loadConfigFromFile({
534
+ cwd: ctx.cwd,
535
+ projectTrusted: isProjectTrusted(ctx),
536
+ }));
537
+ prepareBrowserProfile(config);
225
538
  client = new DevToolsClient(config);
226
- connected = false;
539
+ upstreamToolNames.clear();
540
+ toolGroups = new Map();
227
541
  await registerUpstreamTools();
542
+ toolGroups = buildGroups([...upstreamToolNames].map((name) => name.slice(TOOL_PREFIX.length)), await loadCategoryMap());
228
543
  if (config.visionModel) {
229
544
  await registerVisionTool(config.visionModel);
230
545
  }
546
+ applyToolProfile();
231
547
  });
232
548
  pi.on('session_shutdown', async () => {
233
- if (connected && client) {
549
+ if (client) {
234
550
  await client.close();
235
- connected = false;
551
+ client = undefined;
236
552
  }
237
553
  });
238
554
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type BrowserUseConfig } from './config.js';
2
+ export declare function prepareBrowserProfile(config: BrowserUseConfig, managedProfileDir?: string): void;
3
+ //# sourceMappingURL=profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,gBAAgB,EAAuB,MAAM,aAAa,CAAC;AAgFzE,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,gBAAgB,EACxB,iBAAiB,SAAsB,GACtC,IAAI,CAYN"}