@amaster.ai/pi-browser-use 0.1.5 → 0.1.7
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 +40 -2
- package/dist/analyze-screenshot.d.ts +2 -2
- package/dist/analyze-screenshot.d.ts.map +1 -1
- package/dist/analyze-screenshot.js +20 -9
- 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 +253 -48
- package/dist/index.js.map +1 -1
- package/package.json +10 -6
package/README.md
CHANGED
|
@@ -8,6 +8,10 @@ pi-coding-agent extension that wraps [chrome-devtools-mcp](https://github.com/Ch
|
|
|
8
8
|
|
|
9
9
|
- **pi-coding-agent extension** — registers tools via `pi.registerTool()`, managed by the agent lifecycle
|
|
10
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
|
|
11
15
|
- **Tool description augmentation** — adds usage hints for key tools (click, fill, press_key, etc.)
|
|
12
16
|
- **Result post-processing** — strips embedded snapshots, detects overlay/stale element issues
|
|
13
17
|
- **Optional visual analysis** — `browser_analyze_screenshot` via configurable vision model
|
|
@@ -19,7 +23,11 @@ pi-coding-agent extension that wraps [chrome-devtools-mcp](https://github.com/Ch
|
|
|
19
23
|
bun add @amaster.ai/pi-browser-use
|
|
20
24
|
```
|
|
21
25
|
|
|
22
|
-
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.
|
|
23
31
|
|
|
24
32
|
## Usage
|
|
25
33
|
|
|
@@ -33,13 +41,17 @@ bun add @amaster.ai/pi-browser-use
|
|
|
33
41
|
|
|
34
42
|
Configure via `.pi/settings.json` (project-level) or `~/.pi/agent/settings.json` (user-level) under the `"pi-browser-use"` key:
|
|
35
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
|
+
|
|
36
47
|
```json
|
|
37
48
|
{
|
|
38
49
|
"pi-browser-use": {
|
|
39
50
|
"headless": true,
|
|
40
51
|
"channel": "stable",
|
|
41
52
|
"viewport": "1280x720",
|
|
42
|
-
"experimentalVision": true
|
|
53
|
+
"experimentalVision": true,
|
|
54
|
+
"blockedUrlPattern": ["https://ads.example/*"]
|
|
43
55
|
}
|
|
44
56
|
}
|
|
45
57
|
```
|
|
@@ -87,6 +99,7 @@ npx @amaster.ai/pi-browser-use --config path/to/config.json
|
|
|
87
99
|
| `isolated` | `boolean` | `false` | Use isolated browser profile |
|
|
88
100
|
| `userDataDir` | `string` | — | Custom user data directory |
|
|
89
101
|
| `autoConnect` | `boolean` | `false` | Auto-connect to running browser |
|
|
102
|
+
| `acceptInsecureCerts` | `boolean` | `false` | Ignore invalid or self-signed certificate errors; use with caution |
|
|
90
103
|
|
|
91
104
|
### Categories
|
|
92
105
|
|
|
@@ -104,6 +117,7 @@ npx @amaster.ai/pi-browser-use --config path/to/config.json
|
|
|
104
117
|
| `experimentalVision` | `boolean` | `true` | Enable vision tools (click_at) |
|
|
105
118
|
| `experimentalScreencast` | `boolean` | `false` | Enable screencast |
|
|
106
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 |
|
|
107
121
|
|
|
108
122
|
### Privacy
|
|
109
123
|
|
|
@@ -111,6 +125,24 @@ npx @amaster.ai/pi-browser-use --config path/to/config.json
|
|
|
111
125
|
|--------|------|---------|-------------|
|
|
112
126
|
| `usageStatistics` | `boolean` | `false` | Send usage statistics |
|
|
113
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.
|
|
114
146
|
|
|
115
147
|
### Vision Model (Optional)
|
|
116
148
|
|
|
@@ -129,6 +161,12 @@ Enable `browser_analyze_screenshot` by referencing a model already configured in
|
|
|
129
161
|
|
|
130
162
|
The extension resolves API key, base URL, and headers from the model registry automatically — no need to duplicate credentials here.
|
|
131
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
|
+
|
|
132
170
|
## Tool Augmentation
|
|
133
171
|
|
|
134
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;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,
|
|
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"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* Both extension mode and CLI mode resolve credentials from Pi's model registry.
|
|
10
10
|
*/
|
|
11
11
|
import { complete } from '@earendil-works/pi-ai/compat';
|
|
12
|
-
import {
|
|
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;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,
|
|
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":"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"}
|
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,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { isProjectTrusted, loadPiSettings, } from '@amaster.ai/pi-shared/settings';
|
|
2
4
|
import { complete } from '@earendil-works/pi-ai/compat';
|
|
3
5
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
4
6
|
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
@@ -24,67 +26,247 @@ const EXCLUDED_TOOLS = new Set([
|
|
|
24
26
|
'uninstall_extension',
|
|
25
27
|
]);
|
|
26
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
|
+
}
|
|
27
75
|
/**
|
|
28
76
|
* MCP client that spawns chrome-devtools-mcp as a subprocess and communicates
|
|
29
77
|
* over stdio. Owns the child-process lifecycle: connect() starts it, close() kills it.
|
|
30
78
|
*/
|
|
31
79
|
export class DevToolsClient {
|
|
32
80
|
client = null;
|
|
33
|
-
transport = null;
|
|
34
81
|
config;
|
|
82
|
+
state = 'disconnected';
|
|
83
|
+
connectPromise = null;
|
|
84
|
+
generation = 0;
|
|
85
|
+
hasConnected = false;
|
|
86
|
+
explicitlyClosed = false;
|
|
87
|
+
lastHealthCheckAt = 0;
|
|
35
88
|
constructor(config) {
|
|
36
89
|
this.config = resolveConfig(config);
|
|
37
90
|
}
|
|
38
|
-
|
|
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';
|
|
39
110
|
const args = configToArgs(this.config);
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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],
|
|
43
115
|
stderr: 'pipe',
|
|
44
116
|
});
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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);
|
|
48
130
|
};
|
|
49
|
-
|
|
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
|
+
}
|
|
50
183
|
}
|
|
51
|
-
async
|
|
52
|
-
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)
|
|
53
216
|
throw new Error('Client not connected');
|
|
54
217
|
const allTools = [];
|
|
55
218
|
let cursor;
|
|
56
219
|
do {
|
|
57
|
-
const result = await
|
|
58
|
-
timeout: MCP_TIMEOUT_MS,
|
|
59
|
-
});
|
|
220
|
+
const result = await client.listTools(cursor ? { cursor } : undefined, requestOptions(MCP_TIMEOUT_MS, signal));
|
|
60
221
|
allTools.push(...result.tools);
|
|
61
222
|
cursor = result.nextCursor;
|
|
62
223
|
} while (cursor);
|
|
63
224
|
return allTools;
|
|
64
225
|
}
|
|
65
|
-
async callTool(name, args) {
|
|
66
|
-
|
|
226
|
+
async callTool(name, args, signal) {
|
|
227
|
+
await this.ensureReady(signal);
|
|
228
|
+
const client = this.client;
|
|
229
|
+
if (!client)
|
|
67
230
|
throw new Error('Client not connected');
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
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
|
+
}
|
|
71
244
|
}
|
|
72
245
|
async close() {
|
|
73
|
-
if (this.
|
|
74
|
-
|
|
75
|
-
|
|
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';
|
|
76
259
|
}
|
|
77
|
-
this.transport = null;
|
|
78
260
|
}
|
|
79
261
|
}
|
|
80
|
-
/** Read
|
|
262
|
+
/** Read pi-browser-use settings, including the project layer only when trusted. */
|
|
81
263
|
function loadConfigFromFile(options) {
|
|
82
264
|
return loadPiSettings('pi-browser-use', {
|
|
83
265
|
...options,
|
|
84
266
|
});
|
|
85
267
|
}
|
|
86
|
-
/** Convert upstream MCP result into pi-agent
|
|
87
|
-
function
|
|
268
|
+
/** Convert upstream MCP result into pi-agent content, applying text post-processing. */
|
|
269
|
+
function toToolContent(result, originalName) {
|
|
88
270
|
const textContent = extractTextContent(result.content);
|
|
89
271
|
const processed = postProcessToolResult(originalName, textContent);
|
|
90
272
|
const content = [];
|
|
@@ -98,6 +280,13 @@ function toTextContent(result, originalName) {
|
|
|
98
280
|
}
|
|
99
281
|
}
|
|
100
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
|
+
}
|
|
101
290
|
if (content.length === 0) {
|
|
102
291
|
content.push({ type: 'text', text: '' });
|
|
103
292
|
}
|
|
@@ -116,14 +305,10 @@ function toTextContent(result, originalName) {
|
|
|
116
305
|
export default function browserUseExtension(pi) {
|
|
117
306
|
let config;
|
|
118
307
|
let client;
|
|
119
|
-
|
|
120
|
-
async function ensureConnected() {
|
|
308
|
+
async function ensureConnected(signal) {
|
|
121
309
|
if (!client)
|
|
122
310
|
throw new Error('browser-use: session not started');
|
|
123
|
-
|
|
124
|
-
await client.connect();
|
|
125
|
-
connected = true;
|
|
126
|
-
}
|
|
311
|
+
await client.ensureReady(signal);
|
|
127
312
|
}
|
|
128
313
|
async function registerUpstreamTools() {
|
|
129
314
|
await ensureConnected();
|
|
@@ -134,23 +319,25 @@ export default function browserUseExtension(pi) {
|
|
|
134
319
|
const prefixedName = `${TOOL_PREFIX}${tool.name}`;
|
|
135
320
|
const originalName = tool.name;
|
|
136
321
|
const description = augmentToolDescription(originalName, tool.description ?? '');
|
|
322
|
+
const routingGuidance = pageRoutingGuidance(tool.inputSchema.required?.includes('pageId') ?? false);
|
|
137
323
|
pi.registerTool({
|
|
138
324
|
name: prefixedName,
|
|
139
325
|
label: prefixedName,
|
|
140
326
|
description,
|
|
327
|
+
...routingGuidance,
|
|
141
328
|
parameters: Type.Unsafe(tool.inputSchema),
|
|
142
|
-
async execute(_toolCallId, params,
|
|
143
|
-
await ensureConnected();
|
|
144
|
-
const result = await client.callTool(originalName, params);
|
|
145
|
-
const
|
|
146
|
-
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 };
|
|
147
334
|
},
|
|
148
335
|
});
|
|
149
336
|
}
|
|
150
337
|
}
|
|
151
338
|
/** Create a VisionCaller that uses pi-ai's complete() with the model registry. */
|
|
152
339
|
function createPiVisionCaller(visionConfig, ctx) {
|
|
153
|
-
return async (instruction, imageBase64, mimeType) => {
|
|
340
|
+
return async (instruction, imageBase64, mimeType, signal) => {
|
|
154
341
|
const model = ctx.modelRegistry.find(visionConfig.provider, visionConfig.model);
|
|
155
342
|
if (!model) {
|
|
156
343
|
throw new Error(`Vision model "${visionConfig.provider}/${visionConfig.model}" not found in model registry.`);
|
|
@@ -160,13 +347,14 @@ export default function browserUseExtension(pi) {
|
|
|
160
347
|
throw new Error(`Auth failed for vision model: ${auth.error}`);
|
|
161
348
|
}
|
|
162
349
|
const options = {
|
|
163
|
-
temperature: 0,
|
|
164
350
|
maxTokens: 2048,
|
|
165
351
|
};
|
|
166
352
|
if (auth.apiKey)
|
|
167
353
|
options.apiKey = auth.apiKey;
|
|
168
354
|
if (auth.headers)
|
|
169
355
|
options.headers = auth.headers;
|
|
356
|
+
if (signal)
|
|
357
|
+
options.signal = signal;
|
|
170
358
|
const result = await complete(model, {
|
|
171
359
|
systemPrompt: VISUAL_SYSTEM_PROMPT,
|
|
172
360
|
messages: [
|
|
@@ -183,6 +371,9 @@ export default function browserUseExtension(pi) {
|
|
|
183
371
|
},
|
|
184
372
|
],
|
|
185
373
|
}, options);
|
|
374
|
+
if (result.stopReason === 'error') {
|
|
375
|
+
throw new Error(result.errorMessage || 'Vision model request failed');
|
|
376
|
+
}
|
|
186
377
|
return result.content
|
|
187
378
|
.filter((c) => c.type === 'text')
|
|
188
379
|
.map((c) => c.text)
|
|
@@ -190,19 +381,29 @@ export default function browserUseExtension(pi) {
|
|
|
190
381
|
};
|
|
191
382
|
}
|
|
192
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
|
+
: {};
|
|
193
392
|
pi.registerTool({
|
|
194
393
|
name: `${TOOL_PREFIX}analyze_screenshot`,
|
|
195
394
|
label: `${TOOL_PREFIX}analyze_screenshot`,
|
|
196
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,
|
|
197
397
|
parameters: Type.Object({
|
|
398
|
+
...pageIdParameter,
|
|
198
399
|
instruction: Type.Optional(Type.String({
|
|
199
400
|
description: 'What to identify or analyze visually (e.g., "Find the coordinates of the blue submit button").',
|
|
200
401
|
})),
|
|
201
402
|
}),
|
|
202
|
-
async execute(_toolCallId, params,
|
|
203
|
-
await ensureConnected();
|
|
403
|
+
async execute(_toolCallId, params, signal, _onUpdate, ctx) {
|
|
404
|
+
await ensureConnected(signal);
|
|
204
405
|
const callVision = createPiVisionCaller(visionConfig, ctx);
|
|
205
|
-
const result = await handleAnalyzeScreenshot(client, callVision, params);
|
|
406
|
+
const result = await handleAnalyzeScreenshot(client, callVision, params, signal);
|
|
206
407
|
const content = [];
|
|
207
408
|
if (result.content) {
|
|
208
409
|
for (const item of result.content) {
|
|
@@ -214,23 +415,27 @@ export default function browserUseExtension(pi) {
|
|
|
214
415
|
if (content.length === 0) {
|
|
215
416
|
content.push({ type: 'text', text: '' });
|
|
216
417
|
}
|
|
217
|
-
return
|
|
418
|
+
return result.isError
|
|
419
|
+
? { content, isError: true, details: undefined }
|
|
420
|
+
: { content, details: undefined };
|
|
218
421
|
},
|
|
219
422
|
});
|
|
220
423
|
}
|
|
221
424
|
pi.on('session_start', async (_event, ctx) => {
|
|
222
|
-
config = resolveConfig(loadConfigFromFile({
|
|
425
|
+
config = resolveConfig(loadConfigFromFile({
|
|
426
|
+
cwd: ctx.cwd,
|
|
427
|
+
projectTrusted: isProjectTrusted(ctx),
|
|
428
|
+
}));
|
|
223
429
|
client = new DevToolsClient(config);
|
|
224
|
-
connected = false;
|
|
225
430
|
await registerUpstreamTools();
|
|
226
431
|
if (config.visionModel) {
|
|
227
432
|
await registerVisionTool(config.visionModel);
|
|
228
433
|
}
|
|
229
434
|
});
|
|
230
435
|
pi.on('session_shutdown', async () => {
|
|
231
|
-
if (
|
|
436
|
+
if (client) {
|
|
232
437
|
await client.close();
|
|
233
|
-
|
|
438
|
+
client = undefined;
|
|
234
439
|
}
|
|
235
440
|
});
|
|
236
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.
|
|
3
|
+
"version": "0.1.7",
|
|
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",
|
|
@@ -49,16 +52,17 @@
|
|
|
49
52
|
},
|
|
50
53
|
"dependencies": {
|
|
51
54
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
52
|
-
"
|
|
55
|
+
"chrome-devtools-mcp": "^1.6.0",
|
|
56
|
+
"@amaster.ai/pi-shared": "0.1.7"
|
|
53
57
|
},
|
|
54
58
|
"peerDependencies": {
|
|
55
|
-
"@earendil-works/pi-ai": ">=0.80.
|
|
56
|
-
"@earendil-works/pi-coding-agent": ">=0.
|
|
59
|
+
"@earendil-works/pi-ai": ">=0.80.10",
|
|
60
|
+
"@earendil-works/pi-coding-agent": ">=0.80.10",
|
|
57
61
|
"typebox": "*"
|
|
58
62
|
},
|
|
59
63
|
"devDependencies": {
|
|
60
|
-
"@earendil-works/pi-ai": "0.80.
|
|
61
|
-
"@earendil-works/pi-coding-agent": "0.80.
|
|
64
|
+
"@earendil-works/pi-ai": "0.80.10",
|
|
65
|
+
"@earendil-works/pi-coding-agent": "0.80.10",
|
|
62
66
|
"tsup": "^8.4.0",
|
|
63
67
|
"typebox": "*",
|
|
64
68
|
"vitest": "^4.0.0"
|