@amaster.ai/pi-browser-use 0.1.4 → 0.1.6
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 +31 -1
- 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 +204 -44
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -8,6 +8,9 @@ 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
|
+
- **Page-scoped routing** — routes page tools by explicit `pageId` instead of shared selected-page state
|
|
12
|
+
- **Connection recovery** — detects closed or unhealthy MCP transports and reconnects before the next call
|
|
13
|
+
- **Navigation safety** — supports URL allow/block patterns and redacts sensitive network headers by default
|
|
11
14
|
- **Tool description augmentation** — adds usage hints for key tools (click, fill, press_key, etc.)
|
|
12
15
|
- **Result post-processing** — strips embedded snapshots, detects overlay/stale element issues
|
|
13
16
|
- **Optional visual analysis** — `browser_analyze_screenshot` via configurable vision model
|
|
@@ -39,7 +42,8 @@ Configure via `.pi/settings.json` (project-level) or `~/.pi/agent/settings.json`
|
|
|
39
42
|
"headless": true,
|
|
40
43
|
"channel": "stable",
|
|
41
44
|
"viewport": "1280x720",
|
|
42
|
-
"experimentalVision": true
|
|
45
|
+
"experimentalVision": true,
|
|
46
|
+
"blockedUrlPattern": ["https://ads.example/*"]
|
|
43
47
|
}
|
|
44
48
|
}
|
|
45
49
|
```
|
|
@@ -87,6 +91,7 @@ npx @amaster.ai/pi-browser-use --config path/to/config.json
|
|
|
87
91
|
| `isolated` | `boolean` | `false` | Use isolated browser profile |
|
|
88
92
|
| `userDataDir` | `string` | — | Custom user data directory |
|
|
89
93
|
| `autoConnect` | `boolean` | `false` | Auto-connect to running browser |
|
|
94
|
+
| `acceptInsecureCerts` | `boolean` | `false` | Ignore invalid or self-signed certificate errors; use with caution |
|
|
90
95
|
|
|
91
96
|
### Categories
|
|
92
97
|
|
|
@@ -104,6 +109,7 @@ npx @amaster.ai/pi-browser-use --config path/to/config.json
|
|
|
104
109
|
| `experimentalVision` | `boolean` | `true` | Enable vision tools (click_at) |
|
|
105
110
|
| `experimentalScreencast` | `boolean` | `false` | Enable screencast |
|
|
106
111
|
| `experimentalMemory` | `boolean` | `false` | Enable memory snapshots |
|
|
112
|
+
| `experimentalPageIdRouting` | `boolean` | `true` | Add a required `pageId` to page-scoped tools and route directly to that page |
|
|
107
113
|
|
|
108
114
|
### Privacy
|
|
109
115
|
|
|
@@ -111,6 +117,24 @@ npx @amaster.ai/pi-browser-use --config path/to/config.json
|
|
|
111
117
|
|--------|------|---------|-------------|
|
|
112
118
|
| `usageStatistics` | `boolean` | `false` | Send usage statistics |
|
|
113
119
|
| `performanceCrux` | `boolean` | `false` | Enable CrUX performance data |
|
|
120
|
+
| `redactNetworkHeaders` | `boolean` | `true` | Redact sensitive headers in network tool results |
|
|
121
|
+
| `allowedUrlPattern` | `string[]` | — | Allow only matching URLPattern values; requires Chrome 149+ |
|
|
122
|
+
| `blockedUrlPattern` | `string[]` | — | Block matching navigation and subresource URLPattern values |
|
|
123
|
+
|
|
124
|
+
`allowedUrlPattern` and `blockedUrlPattern` are mutually exclusive. Page ID routing is disabled automatically in `slim` mode because upstream slim tools do not expose `pageId`.
|
|
125
|
+
|
|
126
|
+
### Page-scoped Tool Calls
|
|
127
|
+
|
|
128
|
+
With the default page ID routing enabled, call `browser_list_pages` first and pass the returned numeric page ID to subsequent page-scoped tools:
|
|
129
|
+
|
|
130
|
+
```text
|
|
131
|
+
browser_list_pages({})
|
|
132
|
+
browser_take_snapshot({ "pageId": 2 })
|
|
133
|
+
browser_click({ "pageId": 2, "uid": "12_4" })
|
|
134
|
+
browser_take_screenshot({ "pageId": 2 })
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
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
138
|
|
|
115
139
|
### Vision Model (Optional)
|
|
116
140
|
|
|
@@ -129,6 +153,12 @@ Enable `browser_analyze_screenshot` by referencing a model already configured in
|
|
|
129
153
|
|
|
130
154
|
The extension resolves API key, base URL, and headers from the model registry automatically — no need to duplicate credentials here.
|
|
131
155
|
|
|
156
|
+
With the default page ID routing enabled, visual analysis also targets a page explicitly:
|
|
157
|
+
|
|
158
|
+
```text
|
|
159
|
+
browser_analyze_screenshot({ "pageId": 2, "instruction": "Find the blue submit button" })
|
|
160
|
+
```
|
|
161
|
+
|
|
132
162
|
## Tool Augmentation
|
|
133
163
|
|
|
134
164
|
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":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAI9E,mDAAmD;AACnD,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;qEAkBiC,CAAC;AAatE,6GAA6G;AAC7G,MAAM,UAAU,uBAAuB,CAAC,YAA+B;IACrE,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,CAChD,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,YAAY,CAAC,CAClD,CAAC;IAEF,OAAO,KAAK,EACV,WAAmB,EACnB,WAAmB,EACnB,QAAgB,EAChB,MAAoB,EACH,EAAE;QACnB,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC;QACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACvE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,iBAAiB,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC,KAAK,gCAAgC,CAC7F,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,OAAO,GAA4B;YACvC,SAAS,EAAE,IAAI;SAChB,CAAC;QACF,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9C,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QACjD,IAAI,MAAM;YAAE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;QAEpC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B,KAAK,EACL;YACE,YAAY,EAAE,oBAAoB;YAClC,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,wEAAwE,WAAW,EAAE;yBAC5F;wBACD,EAAE,IAAI,EAAE,OAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE;qBACxD;oBACD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB;aACF;SACF,EACD,OAAO,CACR,CAAC;QAEF,IAAI,MAAM,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,IAAI,6BAA6B,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,MAAM,CAAC,OAAO;aAClB,MAAM,CAAC,CAAC,CAAC,EAAsB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;aACpD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAClB,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,oCAAoC;AACpC,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAsB,EACtB,UAAwB,EACxB,IAA6B,EAC7B,MAAoB;IAEpB,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IACnD,MAAM,cAAc,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtF,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;QAE1F,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,QAAQ,GAAG,WAAW,CAAC;QAC3B,IAAI,gBAAgB,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;YACxE,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACvC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;oBACxB,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC;oBACxC,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,4FAA4F;qBACnG;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE9E,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,6EAA6E;qBACpF;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,QAAQ,EAAE,EAAE,CAAC;SAC1E,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM,KAAK,CAAC;QACjC,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAExE,MAAM,YAAY,GAChB,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;YACxB,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;YACxB,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC9B,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAElC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,4CAA4C,SAAS,GAAG,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,WAAW,GAAG,YAAY;YAC9B,CAAC,CAAC,iIAAiI;YACnI,CAAC,CAAC,kEAAkE,CAAC;QAEvE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;YAC9C,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
|
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":"AAGA,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;AAwCvC,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;IA6C5B,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,CA+KlE"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { loadPiSettings } from '@amaster.ai/pi-shared/settings';
|
|
2
|
-
import { complete } from '@earendil-works/pi-ai';
|
|
2
|
+
import { complete } from '@earendil-works/pi-ai/compat';
|
|
3
3
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
4
4
|
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
5
5
|
import { Type } from 'typebox';
|
|
@@ -24,57 +24,197 @@ const EXCLUDED_TOOLS = new Set([
|
|
|
24
24
|
'uninstall_extension',
|
|
25
25
|
]);
|
|
26
26
|
const MCP_TIMEOUT_MS = 60_000;
|
|
27
|
+
const MCP_HEALTH_TIMEOUT_MS = 5_000;
|
|
28
|
+
const MCP_HEALTH_CHECK_INTERVAL_MS = 10_000;
|
|
29
|
+
function requestOptions(timeout, signal) {
|
|
30
|
+
return signal ? { signal, timeout } : { timeout };
|
|
31
|
+
}
|
|
32
|
+
function pageRoutingGuidance(enabled) {
|
|
33
|
+
return enabled
|
|
34
|
+
? {
|
|
35
|
+
promptSnippet: 'Use browser_list_pages first, then pass its numeric pageId.',
|
|
36
|
+
promptGuidelines: [
|
|
37
|
+
'Call browser_list_pages before page-scoped tools to obtain the current numeric pageId.',
|
|
38
|
+
'Pass pageId explicitly instead of relying on shared browser_select_page state.',
|
|
39
|
+
],
|
|
40
|
+
}
|
|
41
|
+
: {};
|
|
42
|
+
}
|
|
27
43
|
/**
|
|
28
44
|
* MCP client that spawns chrome-devtools-mcp as a subprocess and communicates
|
|
29
45
|
* over stdio. Owns the child-process lifecycle: connect() starts it, close() kills it.
|
|
30
46
|
*/
|
|
31
47
|
export class DevToolsClient {
|
|
32
48
|
client = null;
|
|
33
|
-
transport = null;
|
|
34
49
|
config;
|
|
50
|
+
state = 'disconnected';
|
|
51
|
+
connectPromise = null;
|
|
52
|
+
generation = 0;
|
|
53
|
+
hasConnected = false;
|
|
54
|
+
explicitlyClosed = false;
|
|
55
|
+
lastHealthCheckAt = 0;
|
|
35
56
|
constructor(config) {
|
|
36
57
|
this.config = resolveConfig(config);
|
|
37
58
|
}
|
|
38
|
-
|
|
59
|
+
getState() {
|
|
60
|
+
return this.state;
|
|
61
|
+
}
|
|
62
|
+
async connect(signal) {
|
|
63
|
+
if (this.state === 'ready')
|
|
64
|
+
return;
|
|
65
|
+
if (this.connectPromise)
|
|
66
|
+
return this.connectPromise;
|
|
67
|
+
this.explicitlyClosed = false;
|
|
68
|
+
this.connectPromise = this.openConnection(signal);
|
|
69
|
+
try {
|
|
70
|
+
await this.connectPromise;
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
this.connectPromise = null;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async openConnection(signal) {
|
|
77
|
+
this.state = this.hasConnected ? 'reconnecting' : 'connecting';
|
|
39
78
|
const args = configToArgs(this.config);
|
|
40
|
-
|
|
79
|
+
const generation = ++this.generation;
|
|
80
|
+
const transport = new StdioClientTransport({
|
|
41
81
|
command: 'npx',
|
|
42
82
|
args: ['-y', 'chrome-devtools-mcp@latest', ...args],
|
|
43
83
|
stderr: 'pipe',
|
|
44
84
|
});
|
|
45
|
-
|
|
46
|
-
this.
|
|
47
|
-
|
|
85
|
+
const client = new Client({ name: 'pi-browser-use', version: '0.1.0' }, { capabilities: {} });
|
|
86
|
+
this.client = client;
|
|
87
|
+
transport.onerror = (error) => {
|
|
88
|
+
if (generation !== this.generation)
|
|
89
|
+
return;
|
|
90
|
+
console.error(`[pi-browser-use] chrome-devtools-mcp transport error (${error.name})`);
|
|
91
|
+
void this.disconnectUnhealthyClient(generation);
|
|
48
92
|
};
|
|
49
|
-
|
|
93
|
+
transport.onclose = () => this.markDisconnected(generation);
|
|
94
|
+
try {
|
|
95
|
+
await client.connect(transport, requestOptions(MCP_TIMEOUT_MS, signal));
|
|
96
|
+
if (generation !== this.generation)
|
|
97
|
+
return;
|
|
98
|
+
this.state = 'ready';
|
|
99
|
+
this.hasConnected = true;
|
|
100
|
+
this.lastHealthCheckAt = Date.now();
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
if (generation === this.generation) {
|
|
104
|
+
++this.generation;
|
|
105
|
+
this.client = null;
|
|
106
|
+
this.state = 'failed';
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
await client.close();
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
// The failed transport may already be closed.
|
|
113
|
+
}
|
|
114
|
+
if (signal?.aborted)
|
|
115
|
+
throw error;
|
|
116
|
+
const errorName = error instanceof Error ? error.name : 'UnknownError';
|
|
117
|
+
console.error(`[pi-browser-use] browser connection failed (${errorName})`);
|
|
118
|
+
throw new Error('Browser connection failed.');
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
markDisconnected(generation) {
|
|
122
|
+
if (generation !== this.generation || this.state === 'closing')
|
|
123
|
+
return;
|
|
124
|
+
++this.generation;
|
|
125
|
+
this.client = null;
|
|
126
|
+
this.state = 'disconnected';
|
|
127
|
+
}
|
|
128
|
+
async disconnectUnhealthyClient(generation) {
|
|
129
|
+
if (generation !== this.generation || this.state === 'closing')
|
|
130
|
+
return;
|
|
131
|
+
const failedClient = this.client;
|
|
132
|
+
this.markDisconnected(generation);
|
|
133
|
+
if (!failedClient)
|
|
134
|
+
return;
|
|
135
|
+
try {
|
|
136
|
+
await failedClient.close();
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
console.error('[pi-browser-use] failed to close unhealthy MCP client');
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
async ping(signal) {
|
|
143
|
+
if (this.state !== 'ready' || !this.client)
|
|
144
|
+
return false;
|
|
145
|
+
const generation = this.generation;
|
|
146
|
+
try {
|
|
147
|
+
await this.client.ping(requestOptions(MCP_HEALTH_TIMEOUT_MS, signal));
|
|
148
|
+
if (generation !== this.generation)
|
|
149
|
+
return false;
|
|
150
|
+
this.lastHealthCheckAt = Date.now();
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
if (signal?.aborted)
|
|
155
|
+
throw error;
|
|
156
|
+
await this.disconnectUnhealthyClient(generation);
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
50
159
|
}
|
|
51
|
-
async
|
|
52
|
-
if (
|
|
160
|
+
async ensureReady(signal) {
|
|
161
|
+
if (this.explicitlyClosed)
|
|
162
|
+
throw new Error('Client not connected');
|
|
163
|
+
if (this.state === 'ready') {
|
|
164
|
+
const healthCheckIsFresh = Date.now() - this.lastHealthCheckAt < MCP_HEALTH_CHECK_INTERVAL_MS;
|
|
165
|
+
if (healthCheckIsFresh || (await this.ping(signal)))
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
await this.connect(signal);
|
|
169
|
+
}
|
|
170
|
+
async listAllTools(signal) {
|
|
171
|
+
await this.ensureReady(signal);
|
|
172
|
+
const client = this.client;
|
|
173
|
+
if (!client)
|
|
53
174
|
throw new Error('Client not connected');
|
|
54
175
|
const allTools = [];
|
|
55
176
|
let cursor;
|
|
56
177
|
do {
|
|
57
|
-
const result = await
|
|
58
|
-
timeout: MCP_TIMEOUT_MS,
|
|
59
|
-
});
|
|
178
|
+
const result = await client.listTools(cursor ? { cursor } : undefined, requestOptions(MCP_TIMEOUT_MS, signal));
|
|
60
179
|
allTools.push(...result.tools);
|
|
61
180
|
cursor = result.nextCursor;
|
|
62
181
|
} while (cursor);
|
|
63
182
|
return allTools;
|
|
64
183
|
}
|
|
65
|
-
async callTool(name, args) {
|
|
66
|
-
|
|
184
|
+
async callTool(name, args, signal) {
|
|
185
|
+
await this.ensureReady(signal);
|
|
186
|
+
const client = this.client;
|
|
187
|
+
if (!client)
|
|
67
188
|
throw new Error('Client not connected');
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
189
|
+
try {
|
|
190
|
+
return (await client.callTool({ name, arguments: args }, undefined, requestOptions(MCP_TIMEOUT_MS, signal)));
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
if (signal?.aborted)
|
|
194
|
+
throw error;
|
|
195
|
+
if (this.state !== 'ready' || this.client !== client) {
|
|
196
|
+
throw new Error('Browser connection lost; retry the tool.');
|
|
197
|
+
}
|
|
198
|
+
const errorName = error instanceof Error ? error.name : 'UnknownError';
|
|
199
|
+
console.error(`[pi-browser-use] upstream tool call failed (${errorName})`);
|
|
200
|
+
throw new Error('Browser tool call failed.');
|
|
201
|
+
}
|
|
71
202
|
}
|
|
72
203
|
async close() {
|
|
73
|
-
if (this.
|
|
74
|
-
|
|
75
|
-
|
|
204
|
+
if (this.explicitlyClosed)
|
|
205
|
+
return;
|
|
206
|
+
this.explicitlyClosed = true;
|
|
207
|
+
this.state = 'closing';
|
|
208
|
+
const client = this.client;
|
|
209
|
+
++this.generation;
|
|
210
|
+
this.client = null;
|
|
211
|
+
try {
|
|
212
|
+
if (client)
|
|
213
|
+
await client.close();
|
|
214
|
+
}
|
|
215
|
+
finally {
|
|
216
|
+
this.state = 'disconnected';
|
|
76
217
|
}
|
|
77
|
-
this.transport = null;
|
|
78
218
|
}
|
|
79
219
|
}
|
|
80
220
|
/** Read the pi-browser-use section from .pi/settings.json. */
|
|
@@ -83,8 +223,8 @@ function loadConfigFromFile(options) {
|
|
|
83
223
|
...options,
|
|
84
224
|
});
|
|
85
225
|
}
|
|
86
|
-
/** Convert upstream MCP result into pi-agent
|
|
87
|
-
function
|
|
226
|
+
/** Convert upstream MCP result into pi-agent content, applying text post-processing. */
|
|
227
|
+
function toToolContent(result, originalName) {
|
|
88
228
|
const textContent = extractTextContent(result.content);
|
|
89
229
|
const processed = postProcessToolResult(originalName, textContent);
|
|
90
230
|
const content = [];
|
|
@@ -98,6 +238,13 @@ function toTextContent(result, originalName) {
|
|
|
98
238
|
}
|
|
99
239
|
}
|
|
100
240
|
}
|
|
241
|
+
if (result.content) {
|
|
242
|
+
for (const item of result.content) {
|
|
243
|
+
if (item.type === 'image' && item.data) {
|
|
244
|
+
content.push({ type: 'image', data: item.data, mimeType: item.mimeType ?? 'image/png' });
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
101
248
|
if (content.length === 0) {
|
|
102
249
|
content.push({ type: 'text', text: '' });
|
|
103
250
|
}
|
|
@@ -116,14 +263,10 @@ function toTextContent(result, originalName) {
|
|
|
116
263
|
export default function browserUseExtension(pi) {
|
|
117
264
|
let config;
|
|
118
265
|
let client;
|
|
119
|
-
|
|
120
|
-
async function ensureConnected() {
|
|
266
|
+
async function ensureConnected(signal) {
|
|
121
267
|
if (!client)
|
|
122
268
|
throw new Error('browser-use: session not started');
|
|
123
|
-
|
|
124
|
-
await client.connect();
|
|
125
|
-
connected = true;
|
|
126
|
-
}
|
|
269
|
+
await client.ensureReady(signal);
|
|
127
270
|
}
|
|
128
271
|
async function registerUpstreamTools() {
|
|
129
272
|
await ensureConnected();
|
|
@@ -134,23 +277,25 @@ export default function browserUseExtension(pi) {
|
|
|
134
277
|
const prefixedName = `${TOOL_PREFIX}${tool.name}`;
|
|
135
278
|
const originalName = tool.name;
|
|
136
279
|
const description = augmentToolDescription(originalName, tool.description ?? '');
|
|
280
|
+
const routingGuidance = pageRoutingGuidance(tool.inputSchema.required?.includes('pageId') ?? false);
|
|
137
281
|
pi.registerTool({
|
|
138
282
|
name: prefixedName,
|
|
139
283
|
label: prefixedName,
|
|
140
284
|
description,
|
|
285
|
+
...routingGuidance,
|
|
141
286
|
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 {
|
|
287
|
+
async execute(_toolCallId, params, signal, _onUpdate, _ctx) {
|
|
288
|
+
await ensureConnected(signal);
|
|
289
|
+
const result = await client.callTool(originalName, params, signal);
|
|
290
|
+
const toolContent = toToolContent(result, originalName);
|
|
291
|
+
return { ...toolContent, details: undefined };
|
|
147
292
|
},
|
|
148
293
|
});
|
|
149
294
|
}
|
|
150
295
|
}
|
|
151
296
|
/** Create a VisionCaller that uses pi-ai's complete() with the model registry. */
|
|
152
297
|
function createPiVisionCaller(visionConfig, ctx) {
|
|
153
|
-
return async (instruction, imageBase64, mimeType) => {
|
|
298
|
+
return async (instruction, imageBase64, mimeType, signal) => {
|
|
154
299
|
const model = ctx.modelRegistry.find(visionConfig.provider, visionConfig.model);
|
|
155
300
|
if (!model) {
|
|
156
301
|
throw new Error(`Vision model "${visionConfig.provider}/${visionConfig.model}" not found in model registry.`);
|
|
@@ -160,13 +305,14 @@ export default function browserUseExtension(pi) {
|
|
|
160
305
|
throw new Error(`Auth failed for vision model: ${auth.error}`);
|
|
161
306
|
}
|
|
162
307
|
const options = {
|
|
163
|
-
temperature: 0,
|
|
164
308
|
maxTokens: 2048,
|
|
165
309
|
};
|
|
166
310
|
if (auth.apiKey)
|
|
167
311
|
options.apiKey = auth.apiKey;
|
|
168
312
|
if (auth.headers)
|
|
169
313
|
options.headers = auth.headers;
|
|
314
|
+
if (signal)
|
|
315
|
+
options.signal = signal;
|
|
170
316
|
const result = await complete(model, {
|
|
171
317
|
systemPrompt: VISUAL_SYSTEM_PROMPT,
|
|
172
318
|
messages: [
|
|
@@ -183,6 +329,9 @@ export default function browserUseExtension(pi) {
|
|
|
183
329
|
},
|
|
184
330
|
],
|
|
185
331
|
}, options);
|
|
332
|
+
if (result.stopReason === 'error') {
|
|
333
|
+
throw new Error(result.errorMessage || 'Vision model request failed');
|
|
334
|
+
}
|
|
186
335
|
return result.content
|
|
187
336
|
.filter((c) => c.type === 'text')
|
|
188
337
|
.map((c) => c.text)
|
|
@@ -190,19 +339,29 @@ export default function browserUseExtension(pi) {
|
|
|
190
339
|
};
|
|
191
340
|
}
|
|
192
341
|
async function registerVisionTool(visionConfig) {
|
|
342
|
+
const routingGuidance = pageRoutingGuidance(config?.experimentalPageIdRouting === true);
|
|
343
|
+
const pageIdParameter = config?.experimentalPageIdRouting
|
|
344
|
+
? {
|
|
345
|
+
pageId: Type.Number({
|
|
346
|
+
description: 'Numeric page ID returned by browser_list_pages.',
|
|
347
|
+
}),
|
|
348
|
+
}
|
|
349
|
+
: {};
|
|
193
350
|
pi.registerTool({
|
|
194
351
|
name: `${TOOL_PREFIX}analyze_screenshot`,
|
|
195
352
|
label: `${TOOL_PREFIX}analyze_screenshot`,
|
|
196
353
|
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.',
|
|
354
|
+
...routingGuidance,
|
|
197
355
|
parameters: Type.Object({
|
|
356
|
+
...pageIdParameter,
|
|
198
357
|
instruction: Type.Optional(Type.String({
|
|
199
358
|
description: 'What to identify or analyze visually (e.g., "Find the coordinates of the blue submit button").',
|
|
200
359
|
})),
|
|
201
360
|
}),
|
|
202
|
-
async execute(_toolCallId, params,
|
|
203
|
-
await ensureConnected();
|
|
361
|
+
async execute(_toolCallId, params, signal, _onUpdate, ctx) {
|
|
362
|
+
await ensureConnected(signal);
|
|
204
363
|
const callVision = createPiVisionCaller(visionConfig, ctx);
|
|
205
|
-
const result = await handleAnalyzeScreenshot(client, callVision, params);
|
|
364
|
+
const result = await handleAnalyzeScreenshot(client, callVision, params, signal);
|
|
206
365
|
const content = [];
|
|
207
366
|
if (result.content) {
|
|
208
367
|
for (const item of result.content) {
|
|
@@ -214,23 +373,24 @@ export default function browserUseExtension(pi) {
|
|
|
214
373
|
if (content.length === 0) {
|
|
215
374
|
content.push({ type: 'text', text: '' });
|
|
216
375
|
}
|
|
217
|
-
return
|
|
376
|
+
return result.isError
|
|
377
|
+
? { content, isError: true, details: undefined }
|
|
378
|
+
: { content, details: undefined };
|
|
218
379
|
},
|
|
219
380
|
});
|
|
220
381
|
}
|
|
221
382
|
pi.on('session_start', async (_event, ctx) => {
|
|
222
383
|
config = resolveConfig(loadConfigFromFile({ cwd: ctx.cwd }));
|
|
223
384
|
client = new DevToolsClient(config);
|
|
224
|
-
connected = false;
|
|
225
385
|
await registerUpstreamTools();
|
|
226
386
|
if (config.visionModel) {
|
|
227
387
|
await registerVisionTool(config.visionModel);
|
|
228
388
|
}
|
|
229
389
|
});
|
|
230
390
|
pi.on('session_shutdown', async () => {
|
|
231
|
-
if (
|
|
391
|
+
if (client) {
|
|
232
392
|
await client.close();
|
|
233
|
-
|
|
393
|
+
client = undefined;
|
|
234
394
|
}
|
|
235
395
|
});
|
|
236
396
|
}
|
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":"AAAA,OAAO,EAAE,cAAc,EAA0B,MAAM,gCAAgC,CAAC;AAExF,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EACL,uBAAuB,EACvB,oBAAoB,GAErB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAGL,YAAY,EACZ,aAAa,GAEd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;AAEvC,sGAAsG;AACtG,MAAM,WAAW,GAAG,UAAU,CAAC;AAE/B,yEAAyE;AACzE,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,kBAAkB;IAClB,6BAA6B;IAC7B,yBAAyB;IACzB,wBAAwB;IACxB,kBAAkB;IAClB,iBAAiB;IACjB,mBAAmB;IACnB,iBAAiB;IACjB,kBAAkB;IAClB,0BAA0B;IAC1B,qBAAqB;CACtB,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,MAAM,CAAC;AAC9B,MAAM,qBAAqB,GAAG,KAAK,CAAC;AACpC,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAE5C,SAAS,cAAc,CAAC,OAAe,EAAE,MAAoB;IAC3D,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAgB;IAC3C,OAAO,OAAO;QACZ,CAAC,CAAC;YACE,aAAa,EAAE,6DAA6D;YAC5E,gBAAgB,EAAE;gBAChB,wFAAwF;gBACxF,gFAAgF;aACjF;SACF;QACH,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAUD;;;GAGG;AACH,MAAM,OAAO,cAAc;IACjB,MAAM,GAAkB,IAAI,CAAC;IAC7B,MAAM,CAAmB;IACzB,KAAK,GAAoB,cAAc,CAAC;IACxC,cAAc,GAAyB,IAAI,CAAC;IAC5C,UAAU,GAAG,CAAC,CAAC;IACf,YAAY,GAAG,KAAK,CAAC;IACrB,gBAAgB,GAAG,KAAK,CAAC;IACzB,iBAAiB,GAAG,CAAC,CAAC;IAE9B,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAoB;QAChC,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO;YAAE,OAAO;QACnC,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAC,cAAc,CAAC;QAEpD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,CAAC;QAC5B,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,MAAoB;QAC/C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC;QAC/D,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC;QAErC,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAC;YACzC,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,4BAA4B,EAAE,GAAG,IAAI,CAAC;YACnD,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9F,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,SAAS,CAAC,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE;YACnC,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU;gBAAE,OAAO;YAC3C,OAAO,CAAC,KAAK,CAAC,yDAAyD,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;YACtF,KAAK,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;QAClD,CAAC,CAAC;QACF,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAE5D,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;YACxE,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU;gBAAE,OAAO;YAC3C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;YACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;gBACnC,EAAE,IAAI,CAAC,UAAU,CAAC;gBAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YACxB,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,8CAA8C;YAChD,CAAC;YACD,IAAI,MAAM,EAAE,OAAO;gBAAE,MAAM,KAAK,CAAC;YACjC,MAAM,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,+CAA+C,SAAS,GAAG,CAAC,CAAC;YAC3E,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,UAAkB;QACzC,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO;QACvE,EAAE,IAAI,CAAC,UAAU,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,yBAAyB,CAAC,UAAkB;QACxD,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO;QACvE,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;QACjC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAClC,IAAI,CAAC,YAAY;YAAE,OAAO;QAE1B,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAoB;QAC7B,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAEzD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC;YACtE,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU;gBAAE,OAAO,KAAK,CAAC;YACjD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,MAAM,EAAE,OAAO;gBAAE,MAAM,KAAK,CAAC;YACjC,MAAM,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;YACjD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAoB;QACpC,IAAI,IAAI,CAAC,gBAAgB;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAEnE,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YAC3B,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,iBAAiB,GAAG,4BAA4B,CAAC;YAC9F,IAAI,kBAAkB,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAAE,OAAO;QAC9D,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAoB;QACrC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAErD,MAAM,QAAQ,GAAW,EAAE,CAAC;QAC5B,IAAI,MAA0B,CAAC;QAC/B,GAAG,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CACnC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,EAC/B,cAAc,CAAC,cAAc,EAAE,MAAM,CAAC,CACvC,CAAC;YACF,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;QAC7B,CAAC,QAAQ,MAAM,EAAE;QAEjB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,IAAY,EACZ,IAA6B,EAC7B,MAAoB;QAUpB,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAErD,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,MAAM,CAAC,QAAQ,CAC3B,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EACzB,SAAS,EACT,cAAc,CAAC,cAAc,EAAE,MAAM,CAAC,CACvC,CAQA,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,MAAM,EAAE,OAAO;gBAAE,MAAM,KAAK,CAAC;YACjC,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACrD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YACD,MAAM,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,+CAA+C,SAAS,GAAG,CAAC,CAAC;YAC3E,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,gBAAgB;YAAE,OAAO;QAClC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,EAAE,IAAI,CAAC,UAAU,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC;YACH,IAAI,MAAM;gBAAE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACnC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAED,8DAA8D;AAC9D,SAAS,kBAAkB,CAAC,OAA2B;IACrD,OAAO,cAAc,CAAmB,gBAAgB,EAAE;QACxD,GAAG,OAAO;KACX,CAAC,CAAC;AACL,CAAC;AAED,wFAAwF;AACxF,SAAS,aAAa,CACpB,MAQC,EACD,YAAoB;IAOpB,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,qBAAqB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAEnE,MAAM,OAAO,GAET,EAAE,CAAC;IAEP,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAClD,CAAC;SAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACtC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACvC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,WAAW,EAAE,CAAC,CAAC;YAC3F,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;AACnE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAgB;IAC1D,IAAI,MAAoC,CAAC;IACzC,IAAI,MAAkC,CAAC;IAEvC,KAAK,UAAU,eAAe,CAAC,MAAoB;QACjD,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACjE,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,UAAU,qBAAqB;QAClC,MAAM,eAAe,EAAE,CAAC;QACxB,MAAM,aAAa,GAAG,MAAM,MAAO,CAAC,YAAY,EAAE,CAAC;QAEnD,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YAE5C,MAAM,YAAY,GAAG,GAAG,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAClD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;YAC/B,MAAM,WAAW,GAAG,sBAAsB,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YACjF,MAAM,eAAe,GAAG,mBAAmB,CACzC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CACvD,CAAC;YAEF,EAAE,CAAC,YAAY,CAAC;gBACd,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,YAAY;gBACnB,WAAW;gBACX,GAAG,eAAe;gBAClB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;gBACzC,KAAK,CAAC,OAAO,CACX,WAAmB,EACnB,MAA+B,EAC/B,MAA+B,EAC/B,SAAkB,EAClB,IAAsB;oBAEtB,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;oBAC9B,MAAM,MAAM,GAAG,MAAM,MAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;oBACpE,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;oBACxD,OAAO,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;gBAChD,CAAC;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,kFAAkF;IAClF,SAAS,oBAAoB,CAC3B,YAA+B,EAC/B,GAAqB;QAErB,OAAO,KAAK,EACV,WAAmB,EACnB,WAAmB,EACnB,QAAgB,EAChB,MAAoB,EACH,EAAE;YACnB,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAChF,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CACb,iBAAiB,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC,KAAK,gCAAgC,CAC7F,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAChE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,MAAM,OAAO,GAA4B;gBACvC,SAAS,EAAE,IAAI;aAChB,CAAC;YACF,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC9C,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YACjD,IAAI,MAAM;gBAAE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;YAEpC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B,KAAK,EACL;gBACE,YAAY,EAAE,oBAAoB;gBAClC,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAe;wBACrB,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,wEAAwE,WAAW,EAAE;6BAC5F;4BACD,EAAE,IAAI,EAAE,OAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE;yBACxD;wBACD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;qBACtB;iBACF;aACF,EACD,OAAO,CACR,CAAC;YAEF,IAAI,MAAM,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,IAAI,6BAA6B,CAAC,CAAC;YACxE,CAAC;YAED,OAAO,MAAM,CAAC,OAAO;iBAClB,MAAM,CAAC,CAAC,CAAC,EAAsB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;iBACpD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAClB,IAAI,CAAC,EAAE,CAAC,CAAC;QACd,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,UAAU,kBAAkB,CAAC,YAA+B;QAC/D,MAAM,eAAe,GAAG,mBAAmB,CAAC,MAAM,EAAE,yBAAyB,KAAK,IAAI,CAAC,CAAC;QACxF,MAAM,eAAe,GAAG,MAAM,EAAE,yBAAyB;YACvD,CAAC,CAAC;gBACE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;oBAClB,WAAW,EAAE,iDAAiD;iBAC/D,CAAC;aACH;YACH,CAAC,CAAC,EAAE,CAAC;QAEP,EAAE,CAAC,YAAY,CAAC;YACd,IAAI,EAAE,GAAG,WAAW,oBAAoB;YACxC,KAAK,EAAE,GAAG,WAAW,oBAAoB;YACzC,WAAW,EACT,+OAA+O;YACjP,GAAG,eAAe;YAClB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;gBACtB,GAAG,eAAe;gBAClB,WAAW,EAAE,IAAI,CAAC,QAAQ,CACxB,IAAI,CAAC,MAAM,CAAC;oBACV,WAAW,EACT,gGAAgG;iBACnG,CAAC,CACH;aACF,CAAC;YACF,KAAK,CAAC,OAAO,CACX,WAAmB,EACnB,MAA+B,EAC/B,MAA+B,EAC/B,SAAkB,EAClB,GAAqB;gBAErB,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;gBAC9B,MAAM,UAAU,GAAG,oBAAoB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;gBAC3D,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,MAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBAClF,MAAM,OAAO,GAA0C,EAAE,CAAC;gBAC1D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;wBAClC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;4BACtC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;wBAClD,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC3C,CAAC;gBACD,OAAO,MAAM,CAAC,OAAO;oBACnB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE;oBAChD,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YACtC,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC3C,MAAM,GAAG,aAAa,CAAC,kBAAkB,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7D,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,qBAAqB,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,MAAM,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QACnC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,GAAG,SAAS,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
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.6",
|
|
4
4
|
"description": "Pi extension for browser automation via chrome-devtools-mcp with browser_ prefixed tools",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|
|
@@ -49,16 +49,16 @@
|
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
52
|
-
"@amaster.ai/pi-shared": "0.1.
|
|
52
|
+
"@amaster.ai/pi-shared": "0.1.6"
|
|
53
53
|
},
|
|
54
54
|
"peerDependencies": {
|
|
55
|
-
"@earendil-works/pi-ai": ">=0.
|
|
56
|
-
"@earendil-works/pi-coding-agent": ">=0.
|
|
55
|
+
"@earendil-works/pi-ai": ">=0.80.10",
|
|
56
|
+
"@earendil-works/pi-coding-agent": ">=0.80.10",
|
|
57
57
|
"typebox": "*"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
|
-
"@earendil-works/pi-ai": "0.
|
|
61
|
-
"@earendil-works/pi-coding-agent": "0.
|
|
60
|
+
"@earendil-works/pi-ai": "0.80.10",
|
|
61
|
+
"@earendil-works/pi-coding-agent": "0.80.10",
|
|
62
62
|
"tsup": "^8.4.0",
|
|
63
63
|
"typebox": "*",
|
|
64
64
|
"vitest": "^4.0.0"
|