@amaster.ai/pi-browser-use 0.1.2-beta.5 → 0.1.2-beta.51
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/README.md +42 -2
- package/dist/analyze-screenshot.d.ts +2 -2
- package/dist/analyze-screenshot.d.ts.map +1 -1
- package/dist/analyze-screenshot.js +21 -10
- package/dist/analyze-screenshot.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +24 -7
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +24 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +16 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +254 -51
- package/dist/index.js.map +1 -1
- package/package.json +12 -6
- package/preview.png +0 -0
package/README.md
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
# @amaster.ai/pi-browser-use
|
|
2
2
|
|
|
3
|
+

|
|
4
|
+
|
|
3
5
|
pi-coding-agent extension that wraps [chrome-devtools-mcp](https://github.com/ChromeDevTools/chrome-devtools-mcp), exposing all browser automation tools with a unified `browser_` prefix.
|
|
4
6
|
|
|
5
7
|
## Features
|
|
6
8
|
|
|
7
9
|
- **pi-coding-agent extension** — registers tools via `pi.registerTool()`, managed by the agent lifecycle
|
|
8
10
|
- **Dynamic tool discovery** — automatically proxies all upstream chrome-devtools-mcp tools with `browser_` prefix
|
|
11
|
+
- **Reproducible MCP runtime** — launches the installed chrome-devtools-mcp entrypoint with the current Node executable instead of downloading `@latest` through ambient `npx`
|
|
12
|
+
- **Page-scoped routing** — routes page tools by explicit `pageId` instead of shared selected-page state
|
|
13
|
+
- **Connection recovery** — detects closed or unhealthy MCP transports and reconnects before the next call
|
|
14
|
+
- **Navigation safety** — supports URL allow/block patterns and redacts sensitive network headers by default
|
|
9
15
|
- **Tool description augmentation** — adds usage hints for key tools (click, fill, press_key, etc.)
|
|
10
16
|
- **Result post-processing** — strips embedded snapshots, detects overlay/stale element issues
|
|
11
17
|
- **Optional visual analysis** — `browser_analyze_screenshot` via configurable vision model
|
|
@@ -17,7 +23,11 @@ pi-coding-agent extension that wraps [chrome-devtools-mcp](https://github.com/Ch
|
|
|
17
23
|
bun add @amaster.ai/pi-browser-use
|
|
18
24
|
```
|
|
19
25
|
|
|
20
|
-
Requires Node.js >=
|
|
26
|
+
Requires Node.js `^20.19.0 || ^22.12.0 || >=23`, Chrome (stable or newer), and `@earendil-works/pi-coding-agent >= 0.74.0`.
|
|
27
|
+
|
|
28
|
+
`chrome-devtools-mcp` is a compatible runtime dependency and its installed entrypoint is resolved when the extension module loads. A missing or malformed installation fails extension loading immediately; the extension does not download a replacement at connection time. Connection failures expose only allowlisted system error codes or Chrome startup categories, not raw subprocess stderr.
|
|
29
|
+
|
|
30
|
+
Hosts where `process.execPath` is not a directly executable Node runtime can set `PI_BROWSER_USE_NODE` to the Node command used for the MCP subprocess.
|
|
21
31
|
|
|
22
32
|
## Usage
|
|
23
33
|
|
|
@@ -31,13 +41,17 @@ bun add @amaster.ai/pi-browser-use
|
|
|
31
41
|
|
|
32
42
|
Configure via `.pi/settings.json` (project-level) or `~/.pi/agent/settings.json` (user-level) under the `"pi-browser-use"` key:
|
|
33
43
|
|
|
44
|
+
Project settings are loaded only after project trust is accepted. `${ENV_VAR}`
|
|
45
|
+
interpolation is supported in user and agent settings, but not in project settings.
|
|
46
|
+
|
|
34
47
|
```json
|
|
35
48
|
{
|
|
36
49
|
"pi-browser-use": {
|
|
37
50
|
"headless": true,
|
|
38
51
|
"channel": "stable",
|
|
39
52
|
"viewport": "1280x720",
|
|
40
|
-
"experimentalVision": true
|
|
53
|
+
"experimentalVision": true,
|
|
54
|
+
"blockedUrlPattern": ["https://ads.example/*"]
|
|
41
55
|
}
|
|
42
56
|
}
|
|
43
57
|
```
|
|
@@ -85,6 +99,7 @@ npx @amaster.ai/pi-browser-use --config path/to/config.json
|
|
|
85
99
|
| `isolated` | `boolean` | `false` | Use isolated browser profile |
|
|
86
100
|
| `userDataDir` | `string` | — | Custom user data directory |
|
|
87
101
|
| `autoConnect` | `boolean` | `false` | Auto-connect to running browser |
|
|
102
|
+
| `acceptInsecureCerts` | `boolean` | `false` | Ignore invalid or self-signed certificate errors; use with caution |
|
|
88
103
|
|
|
89
104
|
### Categories
|
|
90
105
|
|
|
@@ -102,6 +117,7 @@ npx @amaster.ai/pi-browser-use --config path/to/config.json
|
|
|
102
117
|
| `experimentalVision` | `boolean` | `true` | Enable vision tools (click_at) |
|
|
103
118
|
| `experimentalScreencast` | `boolean` | `false` | Enable screencast |
|
|
104
119
|
| `experimentalMemory` | `boolean` | `false` | Enable memory snapshots |
|
|
120
|
+
| `experimentalPageIdRouting` | `boolean` | `true` | Add a required `pageId` to page-scoped tools and route directly to that page |
|
|
105
121
|
|
|
106
122
|
### Privacy
|
|
107
123
|
|
|
@@ -109,6 +125,24 @@ npx @amaster.ai/pi-browser-use --config path/to/config.json
|
|
|
109
125
|
|--------|------|---------|-------------|
|
|
110
126
|
| `usageStatistics` | `boolean` | `false` | Send usage statistics |
|
|
111
127
|
| `performanceCrux` | `boolean` | `false` | Enable CrUX performance data |
|
|
128
|
+
| `redactNetworkHeaders` | `boolean` | `true` | Redact sensitive headers in network tool results |
|
|
129
|
+
| `allowedUrlPattern` | `string[]` | — | Allow only matching URLPattern values; requires Chrome 149+ |
|
|
130
|
+
| `blockedUrlPattern` | `string[]` | — | Block matching navigation and subresource URLPattern values |
|
|
131
|
+
|
|
132
|
+
`allowedUrlPattern` and `blockedUrlPattern` are mutually exclusive. Page ID routing is disabled automatically in `slim` mode because upstream slim tools do not expose `pageId`.
|
|
133
|
+
|
|
134
|
+
### Page-scoped Tool Calls
|
|
135
|
+
|
|
136
|
+
With the default page ID routing enabled, call `browser_list_pages` first and pass the returned numeric page ID to subsequent page-scoped tools:
|
|
137
|
+
|
|
138
|
+
```text
|
|
139
|
+
browser_list_pages({})
|
|
140
|
+
browser_take_snapshot({ "pageId": 2 })
|
|
141
|
+
browser_click({ "pageId": 2, "uid": "12_4" })
|
|
142
|
+
browser_take_screenshot({ "pageId": 2 })
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
This avoids relying on `browser_select_page` when multiple browser calls or tabs are active. A single chrome-devtools-mcp process still serializes tool execution; page ID routing provides isolation rather than parallel throughput.
|
|
112
146
|
|
|
113
147
|
### Vision Model (Optional)
|
|
114
148
|
|
|
@@ -127,6 +161,12 @@ Enable `browser_analyze_screenshot` by referencing a model already configured in
|
|
|
127
161
|
|
|
128
162
|
The extension resolves API key, base URL, and headers from the model registry automatically — no need to duplicate credentials here.
|
|
129
163
|
|
|
164
|
+
With the default page ID routing enabled, visual analysis also targets a page explicitly:
|
|
165
|
+
|
|
166
|
+
```text
|
|
167
|
+
browser_analyze_screenshot({ "pageId": 2, "instruction": "Find the blue submit button" })
|
|
168
|
+
```
|
|
169
|
+
|
|
130
170
|
## Tool Augmentation
|
|
131
171
|
|
|
132
172
|
Key tools receive additional usage hints in their descriptions:
|
|
@@ -16,14 +16,14 @@ export declare const VISUAL_SYSTEM_PROMPT = "You are a Visual Analysis Agent. Yo
|
|
|
16
16
|
* Abstraction for calling a vision model.
|
|
17
17
|
* Extension mode and CLI mode each provide their own implementation.
|
|
18
18
|
*/
|
|
19
|
-
export type VisionCaller = (instruction: string, imageBase64: string, mimeType: string) => Promise<string>;
|
|
19
|
+
export type VisionCaller = (instruction: string, imageBase64: string, mimeType: string, signal?: AbortSignal) => Promise<string>;
|
|
20
20
|
/** Create a VisionCaller that resolves credentials from Pi's model registry. Used in CLI standalone mode. */
|
|
21
21
|
export declare function createFetchVisionCaller(visionConfig: VisionModelConfig): VisionCaller;
|
|
22
22
|
/**
|
|
23
23
|
* Capture a screenshot via the upstream tool and analyze it with the provided vision caller.
|
|
24
24
|
* The caller abstraction allows extension mode (pi-ai) and CLI mode (raw fetch) to share logic.
|
|
25
25
|
*/
|
|
26
|
-
export declare function handleAnalyzeScreenshot(client: DevToolsClient, callVision: VisionCaller, args: Record<string, unknown
|
|
26
|
+
export declare function handleAnalyzeScreenshot(client: DevToolsClient, callVision: VisionCaller, args: Record<string, unknown>, signal?: AbortSignal): Promise<{
|
|
27
27
|
content: Array<{
|
|
28
28
|
type: string;
|
|
29
29
|
text: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze-screenshot.d.ts","sourceRoot":"","sources":["../src/analyze-screenshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"analyze-screenshot.d.ts","sourceRoot":"","sources":["../src/analyze-screenshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,mDAAmD;AACnD,eAAO,MAAM,oBAAoB,24BAkBoC,CAAC;AAEtE;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,6GAA6G;AAC7G,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,iBAAiB,GAAG,YAAY,CA6DrF;AAMD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,YAAY,EACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAwEhF"}
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
*
|
|
9
9
|
* Both extension mode and CLI mode resolve credentials from Pi's model registry.
|
|
10
10
|
*/
|
|
11
|
-
import { complete } from '@earendil-works/pi-ai';
|
|
12
|
-
import {
|
|
11
|
+
import { complete } from '@earendil-works/pi-ai/compat';
|
|
12
|
+
import { ModelRegistry, ModelRuntime } from '@earendil-works/pi-coding-agent';
|
|
13
13
|
/** System prompt for the vision analysis model. */
|
|
14
14
|
export const VISUAL_SYSTEM_PROMPT = `You are a Visual Analysis Agent. You receive a screenshot of a browser page and an instruction.
|
|
15
15
|
|
|
@@ -32,9 +32,9 @@ IMPORTANT:
|
|
|
32
32
|
- If the element is not visible in the screenshot, say so explicitly`;
|
|
33
33
|
/** Create a VisionCaller that resolves credentials from Pi's model registry. Used in CLI standalone mode. */
|
|
34
34
|
export function createFetchVisionCaller(visionConfig) {
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
const registryPromise = ModelRuntime.create().then((modelRuntime) => new ModelRegistry(modelRuntime));
|
|
36
|
+
return async (instruction, imageBase64, mimeType, signal) => {
|
|
37
|
+
const registry = await registryPromise;
|
|
38
38
|
const model = registry.find(visionConfig.provider, visionConfig.model);
|
|
39
39
|
if (!model) {
|
|
40
40
|
throw new Error(`Vision model "${visionConfig.provider}/${visionConfig.model}" not found in model registry.`);
|
|
@@ -44,13 +44,14 @@ export function createFetchVisionCaller(visionConfig) {
|
|
|
44
44
|
throw new Error(`Auth failed for vision model: ${auth.error}`);
|
|
45
45
|
}
|
|
46
46
|
const options = {
|
|
47
|
-
temperature: 0,
|
|
48
47
|
maxTokens: 2048,
|
|
49
48
|
};
|
|
50
49
|
if (auth.apiKey)
|
|
51
50
|
options.apiKey = auth.apiKey;
|
|
52
51
|
if (auth.headers)
|
|
53
52
|
options.headers = auth.headers;
|
|
53
|
+
if (signal)
|
|
54
|
+
options.signal = signal;
|
|
54
55
|
const result = await complete(model, {
|
|
55
56
|
systemPrompt: VISUAL_SYSTEM_PROMPT,
|
|
56
57
|
messages: [
|
|
@@ -67,6 +68,9 @@ export function createFetchVisionCaller(visionConfig) {
|
|
|
67
68
|
},
|
|
68
69
|
],
|
|
69
70
|
}, options);
|
|
71
|
+
if (result.stopReason === 'error') {
|
|
72
|
+
throw new Error(result.errorMessage || 'Vision model request failed');
|
|
73
|
+
}
|
|
70
74
|
return result.content
|
|
71
75
|
.filter((c) => c.type === 'text')
|
|
72
76
|
.map((c) => c.text)
|
|
@@ -80,10 +84,11 @@ export function createFetchVisionCaller(visionConfig) {
|
|
|
80
84
|
* Capture a screenshot via the upstream tool and analyze it with the provided vision caller.
|
|
81
85
|
* The caller abstraction allows extension mode (pi-ai) and CLI mode (raw fetch) to share logic.
|
|
82
86
|
*/
|
|
83
|
-
export async function handleAnalyzeScreenshot(client, callVision, args) {
|
|
87
|
+
export async function handleAnalyzeScreenshot(client, callVision, args, signal) {
|
|
84
88
|
const instruction = String(args.instruction ?? '');
|
|
89
|
+
const screenshotArgs = typeof args.pageId === 'number' ? { pageId: args.pageId } : {};
|
|
85
90
|
try {
|
|
86
|
-
const screenshotResult = await client.callTool('take_screenshot',
|
|
91
|
+
const screenshotResult = await client.callTool('take_screenshot', screenshotArgs, signal);
|
|
87
92
|
let imageBase64 = '';
|
|
88
93
|
let mimeType = 'image/png';
|
|
89
94
|
if (screenshotResult.content && Array.isArray(screenshotResult.content)) {
|
|
@@ -106,7 +111,7 @@ export async function handleAnalyzeScreenshot(client, callVision, args) {
|
|
|
106
111
|
isError: true,
|
|
107
112
|
};
|
|
108
113
|
}
|
|
109
|
-
const analysis = await callVision(instruction, imageBase64, mimeType);
|
|
114
|
+
const analysis = await callVision(instruction, imageBase64, mimeType, signal);
|
|
110
115
|
if (!analysis) {
|
|
111
116
|
return {
|
|
112
117
|
content: [
|
|
@@ -123,14 +128,20 @@ export async function handleAnalyzeScreenshot(client, callVision, args) {
|
|
|
123
128
|
};
|
|
124
129
|
}
|
|
125
130
|
catch (error) {
|
|
131
|
+
if (signal?.aborted)
|
|
132
|
+
throw error;
|
|
126
133
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
127
134
|
const isModelError = errorMsg.includes('404') ||
|
|
128
135
|
errorMsg.includes('403') ||
|
|
129
136
|
errorMsg.includes('not found') ||
|
|
130
137
|
errorMsg.includes('permission');
|
|
138
|
+
if (!isModelError) {
|
|
139
|
+
const errorName = error instanceof Error ? error.name : 'UnknownError';
|
|
140
|
+
console.error(`[pi-browser-use] visual analysis failed (${errorName})`);
|
|
141
|
+
}
|
|
131
142
|
const fallbackMsg = isModelError
|
|
132
143
|
? 'Visual analysis model is not available. Use accessibility tree elements (uids from take_snapshot) for all interactions instead.'
|
|
133
|
-
:
|
|
144
|
+
: 'Visual analysis failed. Use accessibility tree elements instead.';
|
|
134
145
|
return {
|
|
135
146
|
content: [{ type: 'text', text: fallbackMsg }],
|
|
136
147
|
isError: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze-screenshot.js","sourceRoot":"","sources":["../src/analyze-screenshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"analyze-screenshot.js","sourceRoot":"","sources":["../src/analyze-screenshot.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -6,6 +6,6 @@
|
|
|
6
6
|
* Used when pi-browser-use is configured as an external MCP server (e.g. in mcp.json)
|
|
7
7
|
* rather than loaded as a pi-coding-agent extension.
|
|
8
8
|
*/
|
|
9
|
-
import type
|
|
9
|
+
import { type BrowserUseConfig } from './config.js';
|
|
10
10
|
export declare function parseArgs(argv: string[]): BrowserUseConfig;
|
|
11
11
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG;AAOH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG;AAOH,OAAO,EAAE,KAAK,gBAAgB,EAAiB,MAAM,aAAa,CAAC;AAwBnE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAyC1D"}
|
package/dist/cli.js
CHANGED
|
@@ -11,6 +11,7 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
|
11
11
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
12
12
|
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
13
13
|
import { createFetchVisionCaller, handleAnalyzeScreenshot } from './analyze-screenshot.js';
|
|
14
|
+
import { resolveConfig } from './config.js';
|
|
14
15
|
import { DevToolsClient } from './index.js';
|
|
15
16
|
import { augmentToolDescription, extractTextContent, postProcessToolResult, } from './tool-augment.js';
|
|
16
17
|
const TOOL_PREFIX = 'browser_';
|
|
@@ -27,6 +28,7 @@ const EXCLUDED_TOOLS = new Set([
|
|
|
27
28
|
'trigger_extension_action',
|
|
28
29
|
'uninstall_extension',
|
|
29
30
|
]);
|
|
31
|
+
const ARRAY_CONFIG_KEYS = new Set(['allowedUrlPattern', 'blockedUrlPattern']);
|
|
30
32
|
export function parseArgs(argv) {
|
|
31
33
|
const config = {};
|
|
32
34
|
let i = 0;
|
|
@@ -51,6 +53,13 @@ export function parseArgs(argv) {
|
|
|
51
53
|
else if (value === 'false') {
|
|
52
54
|
config[camelKey] = false;
|
|
53
55
|
}
|
|
56
|
+
else if (ARRAY_CONFIG_KEYS.has(camelKey)) {
|
|
57
|
+
const existing = config[camelKey];
|
|
58
|
+
config[camelKey] = [
|
|
59
|
+
...(Array.isArray(existing) ? existing : []),
|
|
60
|
+
value,
|
|
61
|
+
];
|
|
62
|
+
}
|
|
54
63
|
else {
|
|
55
64
|
config[camelKey] = value;
|
|
56
65
|
}
|
|
@@ -60,13 +69,13 @@ export function parseArgs(argv) {
|
|
|
60
69
|
return config;
|
|
61
70
|
}
|
|
62
71
|
async function main() {
|
|
63
|
-
const config = parseArgs(process.argv.slice(2));
|
|
72
|
+
const config = resolveConfig(parseArgs(process.argv.slice(2)));
|
|
64
73
|
const client = new DevToolsClient(config);
|
|
65
74
|
await client.connect();
|
|
66
75
|
const toolNameMap = new Map();
|
|
67
76
|
const server = new Server({ name: 'pi-browser-use', version: '0.1.0' }, { capabilities: { tools: {} } });
|
|
68
|
-
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
69
|
-
const upstreamTools = await client.listAllTools();
|
|
77
|
+
server.setRequestHandler(ListToolsRequestSchema, async (_request, extra) => {
|
|
78
|
+
const upstreamTools = await client.listAllTools(extra.signal);
|
|
70
79
|
const tools = [];
|
|
71
80
|
toolNameMap.clear();
|
|
72
81
|
for (const tool of upstreamTools) {
|
|
@@ -89,27 +98,35 @@ async function main() {
|
|
|
89
98
|
inputSchema: {
|
|
90
99
|
type: 'object',
|
|
91
100
|
properties: {
|
|
101
|
+
...(config.experimentalPageIdRouting
|
|
102
|
+
? {
|
|
103
|
+
pageId: {
|
|
104
|
+
type: 'number',
|
|
105
|
+
description: 'Numeric page ID returned by browser_list_pages.',
|
|
106
|
+
},
|
|
107
|
+
}
|
|
108
|
+
: {}),
|
|
92
109
|
instruction: {
|
|
93
110
|
type: 'string',
|
|
94
111
|
description: 'What to identify or analyze visually.',
|
|
95
112
|
},
|
|
96
113
|
},
|
|
97
|
-
required: ['
|
|
114
|
+
required: config.experimentalPageIdRouting ? ['pageId'] : [],
|
|
98
115
|
},
|
|
99
116
|
});
|
|
100
117
|
}
|
|
101
118
|
return { tools };
|
|
102
119
|
});
|
|
103
|
-
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
120
|
+
server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
|
|
104
121
|
const { name, arguments: args } = request.params;
|
|
105
122
|
const originalName = toolNameMap.get(name);
|
|
106
123
|
if (!originalName)
|
|
107
124
|
throw new Error(`Unknown tool: ${name}`);
|
|
108
125
|
if (originalName === 'analyze_screenshot' && config.visionModel) {
|
|
109
126
|
const callVision = createFetchVisionCaller(config.visionModel);
|
|
110
|
-
return await handleAnalyzeScreenshot(client, callVision, args ?? {});
|
|
127
|
+
return await handleAnalyzeScreenshot(client, callVision, args ?? {}, extra.signal);
|
|
111
128
|
}
|
|
112
|
-
const result = await client.callTool(originalName, args ?? {});
|
|
129
|
+
const result = await client.callTool(originalName, args ?? {}, extra.signal);
|
|
113
130
|
const textContent = extractTextContent(result.content);
|
|
114
131
|
const processed = postProcessToolResult(originalName, textContent);
|
|
115
132
|
if (processed !== textContent) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -24,9 +24,14 @@ export interface BrowserUseConfig {
|
|
|
24
24
|
experimentalVision?: boolean;
|
|
25
25
|
experimentalScreencast?: boolean;
|
|
26
26
|
experimentalMemory?: boolean;
|
|
27
|
+
experimentalPageIdRouting?: boolean;
|
|
27
28
|
visionModel?: VisionModelConfig;
|
|
28
29
|
usageStatistics?: boolean;
|
|
29
30
|
performanceCrux?: boolean;
|
|
31
|
+
redactNetworkHeaders?: boolean;
|
|
32
|
+
acceptInsecureCerts?: boolean;
|
|
33
|
+
allowedUrlPattern?: string[];
|
|
34
|
+
blockedUrlPattern?: string[];
|
|
30
35
|
slim?: boolean;
|
|
31
36
|
extraArgs?: string[];
|
|
32
37
|
}
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC;AAExE,kEAAkE;AAClE,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,kBAAkB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC;AAExE,kEAAkE;AAClE,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAEhC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAoBD,4CAA4C;AAC5C,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,CAiCzE;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAyC/D"}
|
package/dist/config.js
CHANGED
|
@@ -10,12 +10,24 @@ const DEFAULTS = {
|
|
|
10
10
|
experimentalVision: true,
|
|
11
11
|
experimentalScreencast: false,
|
|
12
12
|
experimentalMemory: false,
|
|
13
|
+
experimentalPageIdRouting: true,
|
|
13
14
|
usageStatistics: false,
|
|
14
15
|
performanceCrux: false,
|
|
16
|
+
redactNetworkHeaders: true,
|
|
17
|
+
acceptInsecureCerts: false,
|
|
15
18
|
};
|
|
16
19
|
/** Merge user config over sane defaults. */
|
|
17
20
|
export function resolveConfig(config) {
|
|
18
21
|
const resolved = { ...DEFAULTS, ...config };
|
|
22
|
+
if (resolved.allowedUrlPattern?.length && resolved.blockedUrlPattern?.length) {
|
|
23
|
+
throw new Error('allowedUrlPattern and blockedUrlPattern cannot be used together');
|
|
24
|
+
}
|
|
25
|
+
if (resolved.slim) {
|
|
26
|
+
if (config?.experimentalPageIdRouting === true) {
|
|
27
|
+
throw new Error('experimentalPageIdRouting cannot be used with slim mode');
|
|
28
|
+
}
|
|
29
|
+
resolved.experimentalPageIdRouting = false;
|
|
30
|
+
}
|
|
19
31
|
switch (resolved.sessionMode) {
|
|
20
32
|
case 'existing':
|
|
21
33
|
if (!resolved.autoConnect && !resolved.browserUrl && !resolved.wsEndpoint) {
|
|
@@ -75,10 +87,22 @@ export function configToArgs(config) {
|
|
|
75
87
|
args.push('--experimental-screencast');
|
|
76
88
|
if (resolved.experimentalMemory)
|
|
77
89
|
args.push('--experimental-memory');
|
|
90
|
+
if (resolved.experimentalPageIdRouting)
|
|
91
|
+
args.push('--experimental-page-id-routing');
|
|
78
92
|
if (resolved.usageStatistics === false)
|
|
79
93
|
args.push('--no-usage-statistics');
|
|
80
94
|
if (resolved.performanceCrux === false)
|
|
81
95
|
args.push('--no-performance-crux');
|
|
96
|
+
if (resolved.redactNetworkHeaders)
|
|
97
|
+
args.push('--redact-network-headers');
|
|
98
|
+
if (resolved.acceptInsecureCerts)
|
|
99
|
+
args.push('--accept-insecure-certs');
|
|
100
|
+
for (const pattern of resolved.allowedUrlPattern ?? []) {
|
|
101
|
+
args.push(`--allowed-url-pattern=${pattern}`);
|
|
102
|
+
}
|
|
103
|
+
for (const pattern of resolved.blockedUrlPattern ?? []) {
|
|
104
|
+
args.push(`--blocked-url-pattern=${pattern}`);
|
|
105
|
+
}
|
|
82
106
|
if (resolved.extraArgs)
|
|
83
107
|
args.push(...resolved.extraArgs);
|
|
84
108
|
return args;
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AA+CjC,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;AAEtE,MAAM,QAAQ,GAA8B;IAC1C,WAAW,EAAE,YAAY;IACzB,mBAAmB,EAAE,KAAK;IAC1B,eAAe,EAAE,IAAI;IACrB,iBAAiB,EAAE,IAAI;IACvB,kBAAkB,EAAE,KAAK;IACzB,kBAAkB,EAAE,IAAI;IACxB,sBAAsB,EAAE,KAAK;IAC7B,kBAAkB,EAAE,KAAK;IACzB,yBAAyB,EAAE,IAAI;IAC/B,eAAe,EAAE,KAAK;IACtB,eAAe,EAAE,KAAK;IACtB,oBAAoB,EAAE,IAAI;IAC1B,mBAAmB,EAAE,KAAK;CAC3B,CAAC;AAEF,4CAA4C;AAC5C,MAAM,UAAU,aAAa,CAAC,MAAyB;IACrD,MAAM,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC;IAE5C,IAAI,QAAQ,CAAC,iBAAiB,EAAE,MAAM,IAAI,QAAQ,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClB,IAAI,MAAM,EAAE,yBAAyB,KAAK,IAAI,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC7E,CAAC;QACD,QAAQ,CAAC,yBAAyB,GAAG,KAAK,CAAC;IAC7C,CAAC;IAED,QAAQ,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC7B,KAAK,UAAU;YACb,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAC1E,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;YAC9B,CAAC;YACD,MAAM;QACR,KAAK,UAAU;YACb,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACvB,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC3B,CAAC;YACD,MAAM;QACR;YACE,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAC1E,QAAQ,CAAC,WAAW,GAAG,mBAAmB,CAAC;YAC7C,CAAC;YACD,MAAM;IACV,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,YAAY,CAAC,MAAwB;IACnD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEvC,IAAI,QAAQ,CAAC,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/C,IAAI,QAAQ,CAAC,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACjE,IAAI,QAAQ,CAAC,UAAU;QAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3E,IAAI,QAAQ,CAAC,UAAU;QAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3E,IAAI,QAAQ,CAAC,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IACxE,IAAI,QAAQ,CAAC,cAAc;QAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;IACvF,IAAI,QAAQ,CAAC,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpE,IAAI,QAAQ,CAAC,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/C,IAAI,QAAQ,CAAC,WAAW;QAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/E,IAAI,QAAQ,CAAC,WAAW;QAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACtD,IAAI,QAAQ,CAAC,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEvC,IAAI,QAAQ,CAAC,mBAAmB,KAAK,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IACtF,IAAI,QAAQ,CAAC,eAAe,KAAK,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC9E,IAAI,QAAQ,CAAC,iBAAiB,KAAK,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAClF,IAAI,QAAQ,CAAC,kBAAkB,KAAK,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAElF,IAAI,QAAQ,CAAC,kBAAkB;QAAE,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACpE,IAAI,QAAQ,CAAC,sBAAsB;QAAE,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC5E,IAAI,QAAQ,CAAC,kBAAkB;QAAE,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACpE,IAAI,QAAQ,CAAC,yBAAyB;QAAE,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAEpF,IAAI,QAAQ,CAAC,eAAe,KAAK,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC3E,IAAI,QAAQ,CAAC,eAAe,KAAK,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC3E,IAAI,QAAQ,CAAC,oBAAoB;QAAE,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACzE,IAAI,QAAQ,CAAC,mBAAmB;QAAE,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAEvE,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,iBAAiB,IAAI,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,iBAAiB,IAAI,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,QAAQ,CAAC,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAEzD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,18 +3,30 @@ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
|
3
3
|
import { type BrowserSessionMode, type BrowserUseConfig, configToArgs, resolveConfig, type VisionModelConfig } from './config.js';
|
|
4
4
|
export type { BrowserSessionMode, BrowserUseConfig, VisionModelConfig };
|
|
5
5
|
export { configToArgs, resolveConfig };
|
|
6
|
+
export type ConnectionState = 'disconnected' | 'connecting' | 'ready' | 'reconnecting' | 'failed' | 'closing';
|
|
6
7
|
/**
|
|
7
8
|
* MCP client that spawns chrome-devtools-mcp as a subprocess and communicates
|
|
8
9
|
* over stdio. Owns the child-process lifecycle: connect() starts it, close() kills it.
|
|
9
10
|
*/
|
|
10
11
|
export declare class DevToolsClient {
|
|
11
12
|
private client;
|
|
12
|
-
private transport;
|
|
13
13
|
private config;
|
|
14
|
+
private state;
|
|
15
|
+
private connectPromise;
|
|
16
|
+
private generation;
|
|
17
|
+
private hasConnected;
|
|
18
|
+
private explicitlyClosed;
|
|
19
|
+
private lastHealthCheckAt;
|
|
14
20
|
constructor(config?: BrowserUseConfig);
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
getState(): ConnectionState;
|
|
22
|
+
connect(signal?: AbortSignal): Promise<void>;
|
|
23
|
+
private openConnection;
|
|
24
|
+
private markDisconnected;
|
|
25
|
+
private disconnectUnhealthyClient;
|
|
26
|
+
ping(signal?: AbortSignal): Promise<boolean>;
|
|
27
|
+
ensureReady(signal?: AbortSignal): Promise<void>;
|
|
28
|
+
listAllTools(signal?: AbortSignal): Promise<Tool[]>;
|
|
29
|
+
callTool(name: string, args: Record<string, unknown>, signal?: AbortSignal): Promise<{
|
|
18
30
|
content?: Array<{
|
|
19
31
|
type: string;
|
|
20
32
|
text?: string;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,iCAAiC,CAAC;AAGtF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAO/D,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,YAAY,EACZ,aAAa,EACb,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAOrB,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;AAgFvC,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,YAAY,GACZ,OAAO,GACP,cAAc,GACd,QAAQ,GACR,SAAS,CAAC;AAEd;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,iBAAiB,CAAK;gBAElB,MAAM,CAAC,EAAE,gBAAgB;IAIrC,QAAQ,IAAI,eAAe;IAIrB,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;YAapC,cAAc;IA0D5B,OAAO,CAAC,gBAAgB;YAOV,yBAAyB;IAajC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAgB5C,WAAW,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAWhD,YAAY,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAmBnD,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC;QACT,OAAO,CAAC,EAAE,KAAK,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC,CAAC;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IA8BI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAa7B;AA2DD;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAoLlE"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { isProjectTrusted, loadPiSettings, } from '@amaster.ai/pi-shared/settings';
|
|
4
|
+
import { complete } from '@earendil-works/pi-ai/compat';
|
|
4
5
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
5
6
|
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
6
7
|
import { Type } from 'typebox';
|
|
@@ -25,68 +26,247 @@ const EXCLUDED_TOOLS = new Set([
|
|
|
25
26
|
'uninstall_extension',
|
|
26
27
|
]);
|
|
27
28
|
const MCP_TIMEOUT_MS = 60_000;
|
|
29
|
+
const MCP_HEALTH_TIMEOUT_MS = 5_000;
|
|
30
|
+
const MCP_HEALTH_CHECK_INTERVAL_MS = 10_000;
|
|
31
|
+
const MCP_STDERR_LIMIT = 4_096;
|
|
32
|
+
const MCP_SYSTEM_ERROR_CODE_PATTERN = /^(?:EACCES|EADDRINUSE|ECONNREFUSED|ECONNRESET|EHOSTUNREACH|ENOENT|ENOTEMPTY|ENOTFOUND|EPERM|ETIMEDOUT)$/;
|
|
33
|
+
const require = createRequire(import.meta.url);
|
|
34
|
+
const chromeDevToolsMcpPackagePath = require.resolve('chrome-devtools-mcp/package.json');
|
|
35
|
+
const chromeDevToolsMcpPackage = require(chromeDevToolsMcpPackagePath);
|
|
36
|
+
const chromeDevToolsMcpBin = chromeDevToolsMcpPackage.bin?.['chrome-devtools-mcp'];
|
|
37
|
+
if (!chromeDevToolsMcpBin) {
|
|
38
|
+
throw new Error('chrome-devtools-mcp package does not declare its chrome-devtools-mcp binary');
|
|
39
|
+
}
|
|
40
|
+
const CHROME_DEVTOOLS_MCP_ENTRYPOINT = join(dirname(chromeDevToolsMcpPackagePath), chromeDevToolsMcpBin);
|
|
41
|
+
function requestOptions(timeout, signal) {
|
|
42
|
+
return signal ? { signal, timeout } : { timeout };
|
|
43
|
+
}
|
|
44
|
+
function safeMcpSystemErrorCode(value) {
|
|
45
|
+
return typeof value === 'string' && MCP_SYSTEM_ERROR_CODE_PATTERN.test(value) ? value : undefined;
|
|
46
|
+
}
|
|
47
|
+
function summarizeMcpFailure(stderr, errorName, errorCode) {
|
|
48
|
+
const systemError = safeMcpSystemErrorCode(errorCode) ??
|
|
49
|
+
stderr.match(/\b(EACCES|EADDRINUSE|ECONNREFUSED|ECONNRESET|EHOSTUNREACH|ENOENT|ENOTEMPTY|ENOTFOUND|EPERM|ETIMEDOUT)\b/)?.[1];
|
|
50
|
+
if (systemError)
|
|
51
|
+
return `MCP subprocess failed (${systemError}).`;
|
|
52
|
+
if (/could not find (?:chrome|browser)/i.test(stderr)) {
|
|
53
|
+
return 'Chrome executable was not found.';
|
|
54
|
+
}
|
|
55
|
+
if (/failed to launch (?:the )?(?:browser|chrome)/i.test(stderr)) {
|
|
56
|
+
return 'Chrome failed to launch.';
|
|
57
|
+
}
|
|
58
|
+
if (/(?:browser|chrome).+already running|profile.+in use/i.test(stderr)) {
|
|
59
|
+
return 'Chrome profile is already in use.';
|
|
60
|
+
}
|
|
61
|
+
const safeErrorName = /^[A-Za-z][A-Za-z0-9]{0,63}$/.test(errorName) ? errorName : 'UnknownError';
|
|
62
|
+
return `MCP transport failed (${safeErrorName}).`;
|
|
63
|
+
}
|
|
64
|
+
function pageRoutingGuidance(enabled) {
|
|
65
|
+
return enabled
|
|
66
|
+
? {
|
|
67
|
+
promptSnippet: 'Use browser_list_pages first, then pass its numeric pageId.',
|
|
68
|
+
promptGuidelines: [
|
|
69
|
+
'Call browser_list_pages before page-scoped tools to obtain the current numeric pageId.',
|
|
70
|
+
'Pass pageId explicitly instead of relying on shared browser_select_page state.',
|
|
71
|
+
],
|
|
72
|
+
}
|
|
73
|
+
: {};
|
|
74
|
+
}
|
|
28
75
|
/**
|
|
29
76
|
* MCP client that spawns chrome-devtools-mcp as a subprocess and communicates
|
|
30
77
|
* over stdio. Owns the child-process lifecycle: connect() starts it, close() kills it.
|
|
31
78
|
*/
|
|
32
79
|
export class DevToolsClient {
|
|
33
80
|
client = null;
|
|
34
|
-
transport = null;
|
|
35
81
|
config;
|
|
82
|
+
state = 'disconnected';
|
|
83
|
+
connectPromise = null;
|
|
84
|
+
generation = 0;
|
|
85
|
+
hasConnected = false;
|
|
86
|
+
explicitlyClosed = false;
|
|
87
|
+
lastHealthCheckAt = 0;
|
|
36
88
|
constructor(config) {
|
|
37
89
|
this.config = resolveConfig(config);
|
|
38
90
|
}
|
|
39
|
-
|
|
91
|
+
getState() {
|
|
92
|
+
return this.state;
|
|
93
|
+
}
|
|
94
|
+
async connect(signal) {
|
|
95
|
+
if (this.state === 'ready')
|
|
96
|
+
return;
|
|
97
|
+
if (this.connectPromise)
|
|
98
|
+
return this.connectPromise;
|
|
99
|
+
this.explicitlyClosed = false;
|
|
100
|
+
this.connectPromise = this.openConnection(signal);
|
|
101
|
+
try {
|
|
102
|
+
await this.connectPromise;
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
this.connectPromise = null;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async openConnection(signal) {
|
|
109
|
+
this.state = this.hasConnected ? 'reconnecting' : 'connecting';
|
|
40
110
|
const args = configToArgs(this.config);
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
111
|
+
const generation = ++this.generation;
|
|
112
|
+
const transport = new StdioClientTransport({
|
|
113
|
+
command: process.env.PI_BROWSER_USE_NODE?.trim() || process.execPath,
|
|
114
|
+
args: [CHROME_DEVTOOLS_MCP_ENTRYPOINT, ...args],
|
|
44
115
|
stderr: 'pipe',
|
|
45
116
|
});
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
117
|
+
let stderr = '';
|
|
118
|
+
let transportErrorCode;
|
|
119
|
+
transport.stderr?.on('data', (chunk) => {
|
|
120
|
+
stderr = `${stderr}${String(chunk)}`.slice(-MCP_STDERR_LIMIT);
|
|
121
|
+
});
|
|
122
|
+
const client = new Client({ name: 'pi-browser-use', version: '0.1.0' }, { capabilities: {} });
|
|
123
|
+
this.client = client;
|
|
124
|
+
transport.onerror = (error) => {
|
|
125
|
+
if (generation !== this.generation)
|
|
126
|
+
return;
|
|
127
|
+
transportErrorCode = safeMcpSystemErrorCode(error.code);
|
|
128
|
+
console.error(`[pi-browser-use] chrome-devtools-mcp transport error (${transportErrorCode ?? error.name})`);
|
|
129
|
+
void this.disconnectUnhealthyClient(generation);
|
|
49
130
|
};
|
|
50
|
-
|
|
131
|
+
transport.onclose = () => this.markDisconnected(generation);
|
|
132
|
+
try {
|
|
133
|
+
await client.connect(transport, requestOptions(MCP_TIMEOUT_MS, signal));
|
|
134
|
+
if (generation !== this.generation)
|
|
135
|
+
return;
|
|
136
|
+
this.state = 'ready';
|
|
137
|
+
this.hasConnected = true;
|
|
138
|
+
this.lastHealthCheckAt = Date.now();
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
if (generation === this.generation) {
|
|
142
|
+
++this.generation;
|
|
143
|
+
this.client = null;
|
|
144
|
+
this.state = 'failed';
|
|
145
|
+
}
|
|
146
|
+
try {
|
|
147
|
+
await client.close();
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
// The failed transport may already be closed.
|
|
151
|
+
}
|
|
152
|
+
if (signal?.aborted)
|
|
153
|
+
throw error;
|
|
154
|
+
const errorName = error instanceof Error ? error.name : 'UnknownError';
|
|
155
|
+
const errorCode = error instanceof Error
|
|
156
|
+
? safeMcpSystemErrorCode(error.code)
|
|
157
|
+
: undefined;
|
|
158
|
+
const diagnostic = summarizeMcpFailure(stderr, errorName, transportErrorCode ?? errorCode);
|
|
159
|
+
console.error(`[pi-browser-use] browser connection failed: ${diagnostic}`);
|
|
160
|
+
throw new Error(`Browser connection failed. ${diagnostic}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
markDisconnected(generation) {
|
|
164
|
+
if (generation !== this.generation || this.state === 'closing')
|
|
165
|
+
return;
|
|
166
|
+
++this.generation;
|
|
167
|
+
this.client = null;
|
|
168
|
+
this.state = 'disconnected';
|
|
169
|
+
}
|
|
170
|
+
async disconnectUnhealthyClient(generation) {
|
|
171
|
+
if (generation !== this.generation || this.state === 'closing')
|
|
172
|
+
return;
|
|
173
|
+
const failedClient = this.client;
|
|
174
|
+
this.markDisconnected(generation);
|
|
175
|
+
if (!failedClient)
|
|
176
|
+
return;
|
|
177
|
+
try {
|
|
178
|
+
await failedClient.close();
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
console.error('[pi-browser-use] failed to close unhealthy MCP client');
|
|
182
|
+
}
|
|
51
183
|
}
|
|
52
|
-
async
|
|
53
|
-
if (!this.client)
|
|
184
|
+
async ping(signal) {
|
|
185
|
+
if (this.state !== 'ready' || !this.client)
|
|
186
|
+
return false;
|
|
187
|
+
const generation = this.generation;
|
|
188
|
+
try {
|
|
189
|
+
await this.client.ping(requestOptions(MCP_HEALTH_TIMEOUT_MS, signal));
|
|
190
|
+
if (generation !== this.generation)
|
|
191
|
+
return false;
|
|
192
|
+
this.lastHealthCheckAt = Date.now();
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
if (signal?.aborted)
|
|
197
|
+
throw error;
|
|
198
|
+
await this.disconnectUnhealthyClient(generation);
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
async ensureReady(signal) {
|
|
203
|
+
if (this.explicitlyClosed)
|
|
204
|
+
throw new Error('Client not connected');
|
|
205
|
+
if (this.state === 'ready') {
|
|
206
|
+
const healthCheckIsFresh = Date.now() - this.lastHealthCheckAt < MCP_HEALTH_CHECK_INTERVAL_MS;
|
|
207
|
+
if (healthCheckIsFresh || (await this.ping(signal)))
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
await this.connect(signal);
|
|
211
|
+
}
|
|
212
|
+
async listAllTools(signal) {
|
|
213
|
+
await this.ensureReady(signal);
|
|
214
|
+
const client = this.client;
|
|
215
|
+
if (!client)
|
|
54
216
|
throw new Error('Client not connected');
|
|
55
217
|
const allTools = [];
|
|
56
218
|
let cursor;
|
|
57
219
|
do {
|
|
58
|
-
const result = await
|
|
59
|
-
timeout: MCP_TIMEOUT_MS,
|
|
60
|
-
});
|
|
220
|
+
const result = await client.listTools(cursor ? { cursor } : undefined, requestOptions(MCP_TIMEOUT_MS, signal));
|
|
61
221
|
allTools.push(...result.tools);
|
|
62
222
|
cursor = result.nextCursor;
|
|
63
223
|
} while (cursor);
|
|
64
224
|
return allTools;
|
|
65
225
|
}
|
|
66
|
-
async callTool(name, args) {
|
|
67
|
-
|
|
226
|
+
async callTool(name, args, signal) {
|
|
227
|
+
await this.ensureReady(signal);
|
|
228
|
+
const client = this.client;
|
|
229
|
+
if (!client)
|
|
68
230
|
throw new Error('Client not connected');
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
231
|
+
try {
|
|
232
|
+
return (await client.callTool({ name, arguments: args }, undefined, requestOptions(MCP_TIMEOUT_MS, signal)));
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
if (signal?.aborted)
|
|
236
|
+
throw error;
|
|
237
|
+
if (this.state !== 'ready' || this.client !== client) {
|
|
238
|
+
throw new Error('Browser connection lost; retry the tool.');
|
|
239
|
+
}
|
|
240
|
+
const errorName = error instanceof Error ? error.name : 'UnknownError';
|
|
241
|
+
console.error(`[pi-browser-use] upstream tool call failed (${errorName})`);
|
|
242
|
+
throw new Error('Browser tool call failed.');
|
|
243
|
+
}
|
|
72
244
|
}
|
|
73
245
|
async close() {
|
|
74
|
-
if (this.
|
|
75
|
-
|
|
76
|
-
|
|
246
|
+
if (this.explicitlyClosed)
|
|
247
|
+
return;
|
|
248
|
+
this.explicitlyClosed = true;
|
|
249
|
+
this.state = 'closing';
|
|
250
|
+
const client = this.client;
|
|
251
|
+
++this.generation;
|
|
252
|
+
this.client = null;
|
|
253
|
+
try {
|
|
254
|
+
if (client)
|
|
255
|
+
await client.close();
|
|
256
|
+
}
|
|
257
|
+
finally {
|
|
258
|
+
this.state = 'disconnected';
|
|
77
259
|
}
|
|
78
|
-
this.transport = null;
|
|
79
260
|
}
|
|
80
261
|
}
|
|
81
|
-
/** Read
|
|
262
|
+
/** Read pi-browser-use settings, including the project layer only when trusted. */
|
|
82
263
|
function loadConfigFromFile(options) {
|
|
83
264
|
return loadPiSettings('pi-browser-use', {
|
|
84
|
-
agentDir: getAgentDir(),
|
|
85
265
|
...options,
|
|
86
266
|
});
|
|
87
267
|
}
|
|
88
|
-
/** Convert upstream MCP result into pi-agent
|
|
89
|
-
function
|
|
268
|
+
/** Convert upstream MCP result into pi-agent content, applying text post-processing. */
|
|
269
|
+
function toToolContent(result, originalName) {
|
|
90
270
|
const textContent = extractTextContent(result.content);
|
|
91
271
|
const processed = postProcessToolResult(originalName, textContent);
|
|
92
272
|
const content = [];
|
|
@@ -100,6 +280,13 @@ function toTextContent(result, originalName) {
|
|
|
100
280
|
}
|
|
101
281
|
}
|
|
102
282
|
}
|
|
283
|
+
if (result.content) {
|
|
284
|
+
for (const item of result.content) {
|
|
285
|
+
if (item.type === 'image' && item.data) {
|
|
286
|
+
content.push({ type: 'image', data: item.data, mimeType: item.mimeType ?? 'image/png' });
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
103
290
|
if (content.length === 0) {
|
|
104
291
|
content.push({ type: 'text', text: '' });
|
|
105
292
|
}
|
|
@@ -118,14 +305,10 @@ function toTextContent(result, originalName) {
|
|
|
118
305
|
export default function browserUseExtension(pi) {
|
|
119
306
|
let config;
|
|
120
307
|
let client;
|
|
121
|
-
|
|
122
|
-
async function ensureConnected() {
|
|
308
|
+
async function ensureConnected(signal) {
|
|
123
309
|
if (!client)
|
|
124
310
|
throw new Error('browser-use: session not started');
|
|
125
|
-
|
|
126
|
-
await client.connect();
|
|
127
|
-
connected = true;
|
|
128
|
-
}
|
|
311
|
+
await client.ensureReady(signal);
|
|
129
312
|
}
|
|
130
313
|
async function registerUpstreamTools() {
|
|
131
314
|
await ensureConnected();
|
|
@@ -136,23 +319,25 @@ export default function browserUseExtension(pi) {
|
|
|
136
319
|
const prefixedName = `${TOOL_PREFIX}${tool.name}`;
|
|
137
320
|
const originalName = tool.name;
|
|
138
321
|
const description = augmentToolDescription(originalName, tool.description ?? '');
|
|
322
|
+
const routingGuidance = pageRoutingGuidance(tool.inputSchema.required?.includes('pageId') ?? false);
|
|
139
323
|
pi.registerTool({
|
|
140
324
|
name: prefixedName,
|
|
141
325
|
label: prefixedName,
|
|
142
326
|
description,
|
|
327
|
+
...routingGuidance,
|
|
143
328
|
parameters: Type.Unsafe(tool.inputSchema),
|
|
144
|
-
async execute(_toolCallId, params,
|
|
145
|
-
await ensureConnected();
|
|
146
|
-
const result = await client.callTool(originalName, params);
|
|
147
|
-
const
|
|
148
|
-
return {
|
|
329
|
+
async execute(_toolCallId, params, signal, _onUpdate, _ctx) {
|
|
330
|
+
await ensureConnected(signal);
|
|
331
|
+
const result = await client.callTool(originalName, params, signal);
|
|
332
|
+
const toolContent = toToolContent(result, originalName);
|
|
333
|
+
return { ...toolContent, details: undefined };
|
|
149
334
|
},
|
|
150
335
|
});
|
|
151
336
|
}
|
|
152
337
|
}
|
|
153
338
|
/** Create a VisionCaller that uses pi-ai's complete() with the model registry. */
|
|
154
339
|
function createPiVisionCaller(visionConfig, ctx) {
|
|
155
|
-
return async (instruction, imageBase64, mimeType) => {
|
|
340
|
+
return async (instruction, imageBase64, mimeType, signal) => {
|
|
156
341
|
const model = ctx.modelRegistry.find(visionConfig.provider, visionConfig.model);
|
|
157
342
|
if (!model) {
|
|
158
343
|
throw new Error(`Vision model "${visionConfig.provider}/${visionConfig.model}" not found in model registry.`);
|
|
@@ -162,13 +347,14 @@ export default function browserUseExtension(pi) {
|
|
|
162
347
|
throw new Error(`Auth failed for vision model: ${auth.error}`);
|
|
163
348
|
}
|
|
164
349
|
const options = {
|
|
165
|
-
temperature: 0,
|
|
166
350
|
maxTokens: 2048,
|
|
167
351
|
};
|
|
168
352
|
if (auth.apiKey)
|
|
169
353
|
options.apiKey = auth.apiKey;
|
|
170
354
|
if (auth.headers)
|
|
171
355
|
options.headers = auth.headers;
|
|
356
|
+
if (signal)
|
|
357
|
+
options.signal = signal;
|
|
172
358
|
const result = await complete(model, {
|
|
173
359
|
systemPrompt: VISUAL_SYSTEM_PROMPT,
|
|
174
360
|
messages: [
|
|
@@ -185,6 +371,9 @@ export default function browserUseExtension(pi) {
|
|
|
185
371
|
},
|
|
186
372
|
],
|
|
187
373
|
}, options);
|
|
374
|
+
if (result.stopReason === 'error') {
|
|
375
|
+
throw new Error(result.errorMessage || 'Vision model request failed');
|
|
376
|
+
}
|
|
188
377
|
return result.content
|
|
189
378
|
.filter((c) => c.type === 'text')
|
|
190
379
|
.map((c) => c.text)
|
|
@@ -192,19 +381,29 @@ export default function browserUseExtension(pi) {
|
|
|
192
381
|
};
|
|
193
382
|
}
|
|
194
383
|
async function registerVisionTool(visionConfig) {
|
|
384
|
+
const routingGuidance = pageRoutingGuidance(config?.experimentalPageIdRouting === true);
|
|
385
|
+
const pageIdParameter = config?.experimentalPageIdRouting
|
|
386
|
+
? {
|
|
387
|
+
pageId: Type.Number({
|
|
388
|
+
description: 'Numeric page ID returned by browser_list_pages.',
|
|
389
|
+
}),
|
|
390
|
+
}
|
|
391
|
+
: {};
|
|
195
392
|
pi.registerTool({
|
|
196
393
|
name: `${TOOL_PREFIX}analyze_screenshot`,
|
|
197
394
|
label: `${TOOL_PREFIX}analyze_screenshot`,
|
|
198
395
|
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.',
|
|
396
|
+
...routingGuidance,
|
|
199
397
|
parameters: Type.Object({
|
|
398
|
+
...pageIdParameter,
|
|
200
399
|
instruction: Type.Optional(Type.String({
|
|
201
400
|
description: 'What to identify or analyze visually (e.g., "Find the coordinates of the blue submit button").',
|
|
202
401
|
})),
|
|
203
402
|
}),
|
|
204
|
-
async execute(_toolCallId, params,
|
|
205
|
-
await ensureConnected();
|
|
403
|
+
async execute(_toolCallId, params, signal, _onUpdate, ctx) {
|
|
404
|
+
await ensureConnected(signal);
|
|
206
405
|
const callVision = createPiVisionCaller(visionConfig, ctx);
|
|
207
|
-
const result = await handleAnalyzeScreenshot(client, callVision, params);
|
|
406
|
+
const result = await handleAnalyzeScreenshot(client, callVision, params, signal);
|
|
208
407
|
const content = [];
|
|
209
408
|
if (result.content) {
|
|
210
409
|
for (const item of result.content) {
|
|
@@ -216,23 +415,27 @@ export default function browserUseExtension(pi) {
|
|
|
216
415
|
if (content.length === 0) {
|
|
217
416
|
content.push({ type: 'text', text: '' });
|
|
218
417
|
}
|
|
219
|
-
return
|
|
418
|
+
return result.isError
|
|
419
|
+
? { content, isError: true, details: undefined }
|
|
420
|
+
: { content, details: undefined };
|
|
220
421
|
},
|
|
221
422
|
});
|
|
222
423
|
}
|
|
223
424
|
pi.on('session_start', async (_event, ctx) => {
|
|
224
|
-
config = resolveConfig(loadConfigFromFile({
|
|
425
|
+
config = resolveConfig(loadConfigFromFile({
|
|
426
|
+
cwd: ctx.cwd,
|
|
427
|
+
projectTrusted: isProjectTrusted(ctx),
|
|
428
|
+
}));
|
|
225
429
|
client = new DevToolsClient(config);
|
|
226
|
-
connected = false;
|
|
227
430
|
await registerUpstreamTools();
|
|
228
431
|
if (config.visionModel) {
|
|
229
432
|
await registerVisionTool(config.visionModel);
|
|
230
433
|
}
|
|
231
434
|
});
|
|
232
435
|
pi.on('session_shutdown', async () => {
|
|
233
|
-
if (
|
|
436
|
+
if (client) {
|
|
234
437
|
await client.close();
|
|
235
|
-
|
|
438
|
+
client = undefined;
|
|
236
439
|
}
|
|
237
440
|
});
|
|
238
441
|
}
|
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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amaster.ai/pi-browser-use",
|
|
3
|
-
"version": "0.1.2-beta.
|
|
3
|
+
"version": "0.1.2-beta.51",
|
|
4
4
|
"description": "Pi extension for browser automation via chrome-devtools-mcp with browser_ prefixed tools",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|
|
@@ -13,6 +13,9 @@
|
|
|
13
13
|
],
|
|
14
14
|
"license": "Apache-2.0",
|
|
15
15
|
"type": "module",
|
|
16
|
+
"engines": {
|
|
17
|
+
"node": "^20.19.0 || ^22.12.0 || >=23"
|
|
18
|
+
},
|
|
16
19
|
"sideEffects": false,
|
|
17
20
|
"main": "./dist/index.js",
|
|
18
21
|
"types": "./dist/index.d.ts",
|
|
@@ -30,9 +33,11 @@
|
|
|
30
33
|
},
|
|
31
34
|
"files": [
|
|
32
35
|
"dist",
|
|
36
|
+
"preview.png",
|
|
33
37
|
"README.md"
|
|
34
38
|
],
|
|
35
39
|
"pi": {
|
|
40
|
+
"image": "https://raw.githubusercontent.com/TGYD-helige/pi/master/packages/pi-browser-use/preview.png",
|
|
36
41
|
"extensions": [
|
|
37
42
|
"./dist/index.js"
|
|
38
43
|
]
|
|
@@ -47,16 +52,17 @@
|
|
|
47
52
|
},
|
|
48
53
|
"dependencies": {
|
|
49
54
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
50
|
-
"
|
|
55
|
+
"chrome-devtools-mcp": "^1.6.0",
|
|
56
|
+
"@amaster.ai/pi-shared": "0.1.2-beta.51"
|
|
51
57
|
},
|
|
52
58
|
"peerDependencies": {
|
|
53
|
-
"@earendil-works/pi-ai": ">=0.
|
|
54
|
-
"@earendil-works/pi-coding-agent": ">=0.
|
|
59
|
+
"@earendil-works/pi-ai": ">=0.80.10",
|
|
60
|
+
"@earendil-works/pi-coding-agent": ">=0.80.10",
|
|
55
61
|
"typebox": "*"
|
|
56
62
|
},
|
|
57
63
|
"devDependencies": {
|
|
58
|
-
"@earendil-works/pi-ai": "0.
|
|
59
|
-
"@earendil-works/pi-coding-agent": "0.
|
|
64
|
+
"@earendil-works/pi-ai": "0.80.10",
|
|
65
|
+
"@earendil-works/pi-coding-agent": "0.80.10",
|
|
60
66
|
"tsup": "^8.4.0",
|
|
61
67
|
"typebox": "*",
|
|
62
68
|
"vitest": "^4.0.0"
|
package/preview.png
ADDED
|
Binary file
|