@amaster.ai/pi-browser-use 0.1.2-beta.8 → 0.1.2-beta.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -3
- package/dist/analyze-screenshot.d.ts +2 -2
- package/dist/analyze-screenshot.d.ts.map +1 -1
- package/dist/analyze-screenshot.js +23 -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 +26 -7
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +26 -1
- 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 +387 -71
- package/dist/index.js.map +1 -1
- package/dist/profile.d.ts +3 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +86 -0
- package/dist/profile.js.map +1 -0
- package/dist/tool-augment.js +1 -1
- package/dist/tool-augment.js.map +1 -1
- package/dist/tool-groups.d.ts +19 -0
- package/dist/tool-groups.d.ts.map +1 -0
- package/dist/tool-groups.js +82 -0
- package/dist/tool-groups.js.map +1 -0
- package/package.json +13 -7
- 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,13 @@ 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.
|
|
31
|
+
|
|
32
|
+
The MCP subprocess inherits the extension's full process environment rather than the MCP SDK's minimal default, so a headful Chrome can attach to the active Linux graphical session (`DISPLAY`, `XAUTHORITY`, ...) and honors settings carried by environment, such as proxy variables.
|
|
21
33
|
|
|
22
34
|
## Usage
|
|
23
35
|
|
|
@@ -31,13 +43,16 @@ bun add @amaster.ai/pi-browser-use
|
|
|
31
43
|
|
|
32
44
|
Configure via `.pi/settings.json` (project-level) or `~/.pi/agent/settings.json` (user-level) under the `"pi-browser-use"` key:
|
|
33
45
|
|
|
46
|
+
Project settings are loaded only after project trust is accepted. `${ENV_VAR}` interpolation is supported in user and agent settings, but not in project settings.
|
|
47
|
+
|
|
34
48
|
```json
|
|
35
49
|
{
|
|
36
50
|
"pi-browser-use": {
|
|
37
51
|
"headless": true,
|
|
38
52
|
"channel": "stable",
|
|
39
53
|
"viewport": "1280x720",
|
|
40
|
-
"experimentalVision": true
|
|
54
|
+
"experimentalVision": true,
|
|
55
|
+
"blockedUrlPattern": ["https://ads.example/*"]
|
|
41
56
|
}
|
|
42
57
|
}
|
|
43
58
|
```
|
|
@@ -64,6 +79,8 @@ npx @amaster.ai/pi-browser-use --config path/to/config.json
|
|
|
64
79
|
| `isolated` | Launches a fresh ephemeral browser profile each session. No state carried over. |
|
|
65
80
|
| `existing` | Connects to an already-running browser instance (via `browserUrl`, `wsEndpoint`, or auto-discovery). |
|
|
66
81
|
|
|
82
|
+
> **Note:** Do not run the agent (or anything that launches this browser) via `sudo` — the profile would be created with root-owned files, and Chrome then shows a "can't read your preferences" dialog on every launch. On startup the extension detects an inaccessible default profile, moves it aside to `~/.pi/browser-profile.inaccessible-<timestamp>`, and starts fresh; a custom `userDataDir` in this state fails fast with an ownership remediation hint instead.
|
|
83
|
+
|
|
67
84
|
```json
|
|
68
85
|
{
|
|
69
86
|
"pi-browser-use": {
|
|
@@ -85,6 +102,7 @@ npx @amaster.ai/pi-browser-use --config path/to/config.json
|
|
|
85
102
|
| `isolated` | `boolean` | `false` | Use isolated browser profile |
|
|
86
103
|
| `userDataDir` | `string` | — | Custom user data directory |
|
|
87
104
|
| `autoConnect` | `boolean` | `false` | Auto-connect to running browser |
|
|
105
|
+
| `acceptInsecureCerts` | `boolean` | `false` | Ignore invalid or self-signed certificate errors; use with caution |
|
|
88
106
|
|
|
89
107
|
### Categories
|
|
90
108
|
|
|
@@ -95,6 +113,16 @@ npx @amaster.ai/pi-browser-use --config path/to/config.json
|
|
|
95
113
|
| `categoryEmulation` | `boolean` | `true` | Enable emulation tools |
|
|
96
114
|
| `categoryExtensions` | `boolean` | `false` | Enable extension tools |
|
|
97
115
|
|
|
116
|
+
### Tool Profile
|
|
117
|
+
|
|
118
|
+
| Option | Type | Default | Description |
|
|
119
|
+
|--------|------|---------|-------------|
|
|
120
|
+
| `toolProfile` | `"core" \| "full"` | `"core"` | `"core"` activates only the everyday toolset at session start; `"full"` activates every discovered tool. Ignored in `slim` mode |
|
|
121
|
+
|
|
122
|
+
With the default `core` profile, only the core loop is visible to the model: `list_pages`, `new_page`, `navigate_page`, `select_page`, `close_page`, `wait_for`, `take_snapshot`, `take_screenshot`, `click`, `fill`, `fill_form`, `press_key`, `handle_dialog`, `evaluate_script`, and `list_console_messages`. Every other discovered tool stays registered but inactive, grouped by its upstream chrome-devtools-mcp category (`input`, `debugging`, `network`, `emulation`, `memory`, `performance`, ...). The model activates a group itself with the `browser_tools` tool (no argument lists the groups); users can do the same with `/browser-tools <group>`. Activated groups stay active until the end of the session.
|
|
123
|
+
|
|
124
|
+
Tools that used to be filtered out (`lighthouse_audit`, performance traces, screencast, extension management) are now registered and deferred instead — enabling their categories via the flags above makes them activatable through their group.
|
|
125
|
+
|
|
98
126
|
### Experimental
|
|
99
127
|
|
|
100
128
|
| Option | Type | Default | Description |
|
|
@@ -102,6 +130,7 @@ npx @amaster.ai/pi-browser-use --config path/to/config.json
|
|
|
102
130
|
| `experimentalVision` | `boolean` | `true` | Enable vision tools (click_at) |
|
|
103
131
|
| `experimentalScreencast` | `boolean` | `false` | Enable screencast |
|
|
104
132
|
| `experimentalMemory` | `boolean` | `false` | Enable memory snapshots |
|
|
133
|
+
| `experimentalPageIdRouting` | `boolean` | `true` | Add a required `pageId` to page-scoped tools and route directly to that page |
|
|
105
134
|
|
|
106
135
|
### Privacy
|
|
107
136
|
|
|
@@ -109,6 +138,24 @@ npx @amaster.ai/pi-browser-use --config path/to/config.json
|
|
|
109
138
|
|--------|------|---------|-------------|
|
|
110
139
|
| `usageStatistics` | `boolean` | `false` | Send usage statistics |
|
|
111
140
|
| `performanceCrux` | `boolean` | `false` | Enable CrUX performance data |
|
|
141
|
+
| `redactNetworkHeaders` | `boolean` | `true` | Redact sensitive headers in network tool results |
|
|
142
|
+
| `allowedUrlPattern` | `string[]` | — | Allow only matching URLPattern values; requires Chrome 149+ |
|
|
143
|
+
| `blockedUrlPattern` | `string[]` | — | Block matching navigation and subresource URLPattern values |
|
|
144
|
+
|
|
145
|
+
`allowedUrlPattern` and `blockedUrlPattern` are mutually exclusive. Page ID routing is disabled automatically in `slim` mode because upstream slim tools do not expose `pageId`.
|
|
146
|
+
|
|
147
|
+
### Page-scoped Tool Calls
|
|
148
|
+
|
|
149
|
+
With the default page ID routing enabled, call `browser_list_pages` first and pass the returned numeric page ID to subsequent page-scoped tools:
|
|
150
|
+
|
|
151
|
+
```text
|
|
152
|
+
browser_list_pages({})
|
|
153
|
+
browser_take_snapshot({ "pageId": 2 })
|
|
154
|
+
browser_click({ "pageId": 2, "uid": "12_4" })
|
|
155
|
+
browser_take_screenshot({ "pageId": 2 })
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
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
159
|
|
|
113
160
|
### Vision Model (Optional)
|
|
114
161
|
|
|
@@ -127,6 +174,12 @@ Enable `browser_analyze_screenshot` by referencing a model already configured in
|
|
|
127
174
|
|
|
128
175
|
The extension resolves API key, base URL, and headers from the model registry automatically — no need to duplicate credentials here.
|
|
129
176
|
|
|
177
|
+
With the default page ID routing enabled, visual analysis also targets a page explicitly:
|
|
178
|
+
|
|
179
|
+
```text
|
|
180
|
+
browser_analyze_screenshot({ "pageId": 2, "instruction": "Find the blue submit button" })
|
|
181
|
+
```
|
|
182
|
+
|
|
130
183
|
## Tool Augmentation
|
|
131
184
|
|
|
132
185
|
Key tools receive additional usage hints in their descriptions:
|
|
@@ -147,7 +200,7 @@ Key tools receive additional usage hints in their descriptions:
|
|
|
147
200
|
|
|
148
201
|
## Excluded Tools
|
|
149
202
|
|
|
150
|
-
|
|
203
|
+
None. Previously excluded upstream tools (`lighthouse_audit`, performance traces, screencast, extension management) are registered but inactive under the default `core` tool profile — see [Tool Profile](#tool-profile).
|
|
151
204
|
|
|
152
205
|
## License
|
|
153
206
|
|
|
@@ -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;AAGH,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,CAkErF;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,6 @@
|
|
|
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 { AuthStorage, ModelRegistry } from '@earendil-works/pi-coding-agent';
|
|
13
11
|
/** System prompt for the vision analysis model. */
|
|
14
12
|
export const VISUAL_SYSTEM_PROMPT = `You are a Visual Analysis Agent. You receive a screenshot of a browser page and an instruction.
|
|
15
13
|
|
|
@@ -32,9 +30,13 @@ IMPORTANT:
|
|
|
32
30
|
- If the element is not visible in the screenshot, say so explicitly`;
|
|
33
31
|
/** Create a VisionCaller that resolves credentials from Pi's model registry. Used in CLI standalone mode. */
|
|
34
32
|
export function createFetchVisionCaller(visionConfig) {
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
return async (instruction, imageBase64, mimeType) => {
|
|
33
|
+
// Imported lazily: pi-ai and pi-coding-agent are heavy and only needed on an actual vision call.
|
|
34
|
+
const registryPromise = import('@earendil-works/pi-coding-agent').then(({ ModelRegistry, ModelRuntime }) => ModelRuntime.create().then((modelRuntime) => new ModelRegistry(modelRuntime)));
|
|
35
|
+
return async (instruction, imageBase64, mimeType, signal) => {
|
|
36
|
+
const [registry, { complete }] = await Promise.all([
|
|
37
|
+
registryPromise,
|
|
38
|
+
import('@earendil-works/pi-ai/compat'),
|
|
39
|
+
]);
|
|
38
40
|
const model = registry.find(visionConfig.provider, visionConfig.model);
|
|
39
41
|
if (!model) {
|
|
40
42
|
throw new Error(`Vision model "${visionConfig.provider}/${visionConfig.model}" not found in model registry.`);
|
|
@@ -44,13 +46,14 @@ export function createFetchVisionCaller(visionConfig) {
|
|
|
44
46
|
throw new Error(`Auth failed for vision model: ${auth.error}`);
|
|
45
47
|
}
|
|
46
48
|
const options = {
|
|
47
|
-
temperature: 0,
|
|
48
49
|
maxTokens: 2048,
|
|
49
50
|
};
|
|
50
51
|
if (auth.apiKey)
|
|
51
52
|
options.apiKey = auth.apiKey;
|
|
52
53
|
if (auth.headers)
|
|
53
54
|
options.headers = auth.headers;
|
|
55
|
+
if (signal)
|
|
56
|
+
options.signal = signal;
|
|
54
57
|
const result = await complete(model, {
|
|
55
58
|
systemPrompt: VISUAL_SYSTEM_PROMPT,
|
|
56
59
|
messages: [
|
|
@@ -67,6 +70,9 @@ export function createFetchVisionCaller(visionConfig) {
|
|
|
67
70
|
},
|
|
68
71
|
],
|
|
69
72
|
}, options);
|
|
73
|
+
if (result.stopReason === 'error') {
|
|
74
|
+
throw new Error(result.errorMessage || 'Vision model request failed');
|
|
75
|
+
}
|
|
70
76
|
return result.content
|
|
71
77
|
.filter((c) => c.type === 'text')
|
|
72
78
|
.map((c) => c.text)
|
|
@@ -80,10 +86,11 @@ export function createFetchVisionCaller(visionConfig) {
|
|
|
80
86
|
* Capture a screenshot via the upstream tool and analyze it with the provided vision caller.
|
|
81
87
|
* The caller abstraction allows extension mode (pi-ai) and CLI mode (raw fetch) to share logic.
|
|
82
88
|
*/
|
|
83
|
-
export async function handleAnalyzeScreenshot(client, callVision, args) {
|
|
89
|
+
export async function handleAnalyzeScreenshot(client, callVision, args, signal) {
|
|
84
90
|
const instruction = String(args.instruction ?? '');
|
|
91
|
+
const screenshotArgs = typeof args.pageId === 'number' ? { pageId: args.pageId } : {};
|
|
85
92
|
try {
|
|
86
|
-
const screenshotResult = await client.callTool('take_screenshot',
|
|
93
|
+
const screenshotResult = await client.callTool('take_screenshot', screenshotArgs, signal);
|
|
87
94
|
let imageBase64 = '';
|
|
88
95
|
let mimeType = 'image/png';
|
|
89
96
|
if (screenshotResult.content && Array.isArray(screenshotResult.content)) {
|
|
@@ -106,7 +113,7 @@ export async function handleAnalyzeScreenshot(client, callVision, args) {
|
|
|
106
113
|
isError: true,
|
|
107
114
|
};
|
|
108
115
|
}
|
|
109
|
-
const analysis = await callVision(instruction, imageBase64, mimeType);
|
|
116
|
+
const analysis = await callVision(instruction, imageBase64, mimeType, signal);
|
|
110
117
|
if (!analysis) {
|
|
111
118
|
return {
|
|
112
119
|
content: [
|
|
@@ -123,14 +130,20 @@ export async function handleAnalyzeScreenshot(client, callVision, args) {
|
|
|
123
130
|
};
|
|
124
131
|
}
|
|
125
132
|
catch (error) {
|
|
133
|
+
if (signal?.aborted)
|
|
134
|
+
throw error;
|
|
126
135
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
127
136
|
const isModelError = errorMsg.includes('404') ||
|
|
128
137
|
errorMsg.includes('403') ||
|
|
129
138
|
errorMsg.includes('not found') ||
|
|
130
139
|
errorMsg.includes('permission');
|
|
140
|
+
if (!isModelError) {
|
|
141
|
+
const errorName = error instanceof Error ? error.name : 'UnknownError';
|
|
142
|
+
console.error(`[pi-browser-use] visual analysis failed (${errorName})`);
|
|
143
|
+
}
|
|
131
144
|
const fallbackMsg = isModelError
|
|
132
145
|
? 'Visual analysis model is not available. Use accessibility tree elements (uids from take_snapshot) for all interactions instead.'
|
|
133
|
-
:
|
|
146
|
+
: 'Visual analysis failed. Use accessibility tree elements instead.';
|
|
134
147
|
return {
|
|
135
148
|
content: [{ type: 'text', text: fallbackMsg }],
|
|
136
149
|
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;AAyBnE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAyC1D"}
|
package/dist/cli.js
CHANGED
|
@@ -11,7 +11,9 @@ 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';
|
|
16
|
+
import { prepareBrowserProfile } from './profile.js';
|
|
15
17
|
import { augmentToolDescription, extractTextContent, postProcessToolResult, } from './tool-augment.js';
|
|
16
18
|
const TOOL_PREFIX = 'browser_';
|
|
17
19
|
const EXCLUDED_TOOLS = new Set([
|
|
@@ -27,6 +29,7 @@ const EXCLUDED_TOOLS = new Set([
|
|
|
27
29
|
'trigger_extension_action',
|
|
28
30
|
'uninstall_extension',
|
|
29
31
|
]);
|
|
32
|
+
const ARRAY_CONFIG_KEYS = new Set(['allowedUrlPattern', 'blockedUrlPattern']);
|
|
30
33
|
export function parseArgs(argv) {
|
|
31
34
|
const config = {};
|
|
32
35
|
let i = 0;
|
|
@@ -51,6 +54,13 @@ export function parseArgs(argv) {
|
|
|
51
54
|
else if (value === 'false') {
|
|
52
55
|
config[camelKey] = false;
|
|
53
56
|
}
|
|
57
|
+
else if (ARRAY_CONFIG_KEYS.has(camelKey)) {
|
|
58
|
+
const existing = config[camelKey];
|
|
59
|
+
config[camelKey] = [
|
|
60
|
+
...(Array.isArray(existing) ? existing : []),
|
|
61
|
+
value,
|
|
62
|
+
];
|
|
63
|
+
}
|
|
54
64
|
else {
|
|
55
65
|
config[camelKey] = value;
|
|
56
66
|
}
|
|
@@ -60,13 +70,14 @@ export function parseArgs(argv) {
|
|
|
60
70
|
return config;
|
|
61
71
|
}
|
|
62
72
|
async function main() {
|
|
63
|
-
const config = parseArgs(process.argv.slice(2));
|
|
73
|
+
const config = resolveConfig(parseArgs(process.argv.slice(2)));
|
|
74
|
+
prepareBrowserProfile(config);
|
|
64
75
|
const client = new DevToolsClient(config);
|
|
65
76
|
await client.connect();
|
|
66
77
|
const toolNameMap = new Map();
|
|
67
78
|
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();
|
|
79
|
+
server.setRequestHandler(ListToolsRequestSchema, async (_request, extra) => {
|
|
80
|
+
const upstreamTools = await client.listAllTools(extra.signal);
|
|
70
81
|
const tools = [];
|
|
71
82
|
toolNameMap.clear();
|
|
72
83
|
for (const tool of upstreamTools) {
|
|
@@ -89,27 +100,35 @@ async function main() {
|
|
|
89
100
|
inputSchema: {
|
|
90
101
|
type: 'object',
|
|
91
102
|
properties: {
|
|
103
|
+
...(config.experimentalPageIdRouting
|
|
104
|
+
? {
|
|
105
|
+
pageId: {
|
|
106
|
+
type: 'number',
|
|
107
|
+
description: 'Numeric page ID returned by browser_list_pages.',
|
|
108
|
+
},
|
|
109
|
+
}
|
|
110
|
+
: {}),
|
|
92
111
|
instruction: {
|
|
93
112
|
type: 'string',
|
|
94
113
|
description: 'What to identify or analyze visually.',
|
|
95
114
|
},
|
|
96
115
|
},
|
|
97
|
-
required: ['
|
|
116
|
+
required: config.experimentalPageIdRouting ? ['pageId'] : [],
|
|
98
117
|
},
|
|
99
118
|
});
|
|
100
119
|
}
|
|
101
120
|
return { tools };
|
|
102
121
|
});
|
|
103
|
-
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
122
|
+
server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
|
|
104
123
|
const { name, arguments: args } = request.params;
|
|
105
124
|
const originalName = toolNameMap.get(name);
|
|
106
125
|
if (!originalName)
|
|
107
126
|
throw new Error(`Unknown tool: ${name}`);
|
|
108
127
|
if (originalName === 'analyze_screenshot' && config.visionModel) {
|
|
109
128
|
const callVision = createFetchVisionCaller(config.visionModel);
|
|
110
|
-
return await handleAnalyzeScreenshot(client, callVision, args ?? {});
|
|
129
|
+
return await handleAnalyzeScreenshot(client, callVision, args ?? {}, extra.signal);
|
|
111
130
|
}
|
|
112
|
-
const result = await client.callTool(originalName, args ?? {});
|
|
131
|
+
const result = await client.callTool(originalName, args ?? {}, extra.signal);
|
|
113
132
|
const textContent = extractTextContent(result.content);
|
|
114
133
|
const processed = postProcessToolResult(originalName, textContent);
|
|
115
134
|
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,12 +24,25 @@ 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[];
|
|
37
|
+
/**
|
|
38
|
+
* Which upstream tools are active at session start: 'core' activates only
|
|
39
|
+
* the everyday toolset (extra groups via the browser_tools tool or the
|
|
40
|
+
* /browser-tools command), 'full' activates every discovered tool.
|
|
41
|
+
* Ignored in slim mode. Default: 'core'
|
|
42
|
+
*/
|
|
43
|
+
toolProfile?: 'core' | 'full';
|
|
32
44
|
}
|
|
45
|
+
export declare const DEFAULT_PROFILE_DIR: string;
|
|
33
46
|
/** Merge user config over sane defaults. */
|
|
34
47
|
export declare function resolveConfig(config?: BrowserUseConfig): BrowserUseConfig;
|
|
35
48
|
/** Convert config into CLI flags for the chrome-devtools-mcp subprocess. */
|
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;IAErB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC/B;AAED,eAAO,MAAM,mBAAmB,QAA4C,CAAC;AAmB7E,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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { homedir } from 'node:os';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
-
const DEFAULT_PROFILE_DIR = join(homedir(), '.pi', 'browser-profile');
|
|
3
|
+
export const DEFAULT_PROFILE_DIR = join(homedir(), '.pi', 'browser-profile');
|
|
4
4
|
const DEFAULTS = {
|
|
5
5
|
sessionMode: 'persistent',
|
|
6
6
|
categoryPerformance: false,
|
|
@@ -10,12 +10,25 @@ 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,
|
|
18
|
+
toolProfile: 'core',
|
|
15
19
|
};
|
|
16
20
|
/** Merge user config over sane defaults. */
|
|
17
21
|
export function resolveConfig(config) {
|
|
18
22
|
const resolved = { ...DEFAULTS, ...config };
|
|
23
|
+
if (resolved.allowedUrlPattern?.length && resolved.blockedUrlPattern?.length) {
|
|
24
|
+
throw new Error('allowedUrlPattern and blockedUrlPattern cannot be used together');
|
|
25
|
+
}
|
|
26
|
+
if (resolved.slim) {
|
|
27
|
+
if (config?.experimentalPageIdRouting === true) {
|
|
28
|
+
throw new Error('experimentalPageIdRouting cannot be used with slim mode');
|
|
29
|
+
}
|
|
30
|
+
resolved.experimentalPageIdRouting = false;
|
|
31
|
+
}
|
|
19
32
|
switch (resolved.sessionMode) {
|
|
20
33
|
case 'existing':
|
|
21
34
|
if (!resolved.autoConnect && !resolved.browserUrl && !resolved.wsEndpoint) {
|
|
@@ -75,10 +88,22 @@ export function configToArgs(config) {
|
|
|
75
88
|
args.push('--experimental-screencast');
|
|
76
89
|
if (resolved.experimentalMemory)
|
|
77
90
|
args.push('--experimental-memory');
|
|
91
|
+
if (resolved.experimentalPageIdRouting)
|
|
92
|
+
args.push('--experimental-page-id-routing');
|
|
78
93
|
if (resolved.usageStatistics === false)
|
|
79
94
|
args.push('--no-usage-statistics');
|
|
80
95
|
if (resolved.performanceCrux === false)
|
|
81
96
|
args.push('--no-performance-crux');
|
|
97
|
+
if (resolved.redactNetworkHeaders)
|
|
98
|
+
args.push('--redact-network-headers');
|
|
99
|
+
if (resolved.acceptInsecureCerts)
|
|
100
|
+
args.push('--accept-insecure-certs');
|
|
101
|
+
for (const pattern of resolved.allowedUrlPattern ?? []) {
|
|
102
|
+
args.push(`--allowed-url-pattern=${pattern}`);
|
|
103
|
+
}
|
|
104
|
+
for (const pattern of resolved.blockedUrlPattern ?? []) {
|
|
105
|
+
args.push(`--blocked-url-pattern=${pattern}`);
|
|
106
|
+
}
|
|
82
107
|
if (resolved.extraArgs)
|
|
83
108
|
args.push(...resolved.extraArgs);
|
|
84
109
|
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":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,iCAAiC,CAAC;AAEtF,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;AASrB,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;AAgEvC,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;IAoE5B,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,CAiUlE"}
|