pi-browser-use 0.6.0 → 0.7.0
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 +39 -11
- package/dist/auth-verifiers.d.ts +60 -0
- package/dist/auth-verifiers.d.ts.map +1 -0
- package/dist/auth-verifiers.js +92 -0
- package/dist/auth-verifiers.js.map +1 -0
- package/dist/chrome-launcher.d.ts +100 -0
- package/dist/chrome-launcher.d.ts.map +1 -0
- package/dist/chrome-launcher.js +268 -0
- package/dist/chrome-launcher.js.map +1 -0
- package/dist/config.d.ts +3 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +28 -5
- package/dist/config.js.map +1 -1
- package/dist/doctor.d.ts +8 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +16 -6
- package/dist/doctor.js.map +1 -1
- package/dist/existing-flow.d.ts +68 -0
- package/dist/existing-flow.d.ts.map +1 -0
- package/dist/existing-flow.js +128 -0
- package/dist/existing-flow.js.map +1 -0
- package/dist/focus-policy.d.ts +28 -0
- package/dist/focus-policy.d.ts.map +1 -0
- package/dist/focus-policy.js +28 -0
- package/dist/focus-policy.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +497 -39
- package/dist/index.js.map +1 -1
- package/dist/named-profile.d.ts +47 -0
- package/dist/named-profile.d.ts.map +1 -0
- package/dist/named-profile.js +123 -0
- package/dist/named-profile.js.map +1 -0
- package/dist/persistent-backend.d.ts +77 -0
- package/dist/persistent-backend.d.ts.map +1 -0
- package/dist/persistent-backend.js +166 -0
- package/dist/persistent-backend.js.map +1 -0
- package/dist/persistent-store.d.ts +35 -0
- package/dist/persistent-store.d.ts.map +1 -0
- package/dist/persistent-store.js +98 -0
- package/dist/persistent-store.js.map +1 -0
- package/dist/profile-lock.d.ts +40 -0
- package/dist/profile-lock.d.ts.map +1 -0
- package/dist/profile-lock.js +165 -0
- package/dist/profile-lock.js.map +1 -0
- package/dist/profile.d.ts +3 -1
- package/dist/profile.d.ts.map +1 -1
- package/dist/profile.js +15 -6
- package/dist/profile.js.map +1 -1
- package/dist/session-manager.d.ts +125 -0
- package/dist/session-manager.d.ts.map +1 -0
- package/dist/session-manager.js +275 -0
- package/dist/session-manager.js.map +1 -0
- package/dist/session.d.ts +92 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +29 -0
- package/dist/session.js.map +1 -0
- package/dist/setup-flow.d.ts +78 -0
- package/dist/setup-flow.d.ts.map +1 -0
- package/dist/setup-flow.js +97 -0
- package/dist/setup-flow.js.map +1 -0
- package/dist/tab-bridge.d.ts +71 -0
- package/dist/tab-bridge.d.ts.map +1 -0
- package/dist/tab-bridge.js +198 -0
- package/dist/tab-bridge.js.map +1 -0
- package/extension/README.md +33 -0
- package/extension/background.js +185 -0
- package/extension/manifest.json +12 -0
- package/package.json +2 -1
- package/skills/auth-bootstrap/SKILL.md +13 -0
- package/skills/browser-policy/SKILL.md +29 -4
- package/skills/gmail-auth/SKILL.md +51 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chrome-launcher.js","sourceRoot":"","sources":["../src/chrome-launcher.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -47,13 +47,15 @@ export interface BrowserUseConfig {
|
|
|
47
47
|
allowedUrlPattern?: string[];
|
|
48
48
|
blockedUrlPattern?: string[];
|
|
49
49
|
slim?: boolean;
|
|
50
|
+
/** Loopback port for the Existing-mode tab-broker bridge. Default 31973; set 0 to disable the bridge. */
|
|
51
|
+
tabBridgePort?: number;
|
|
50
52
|
/** First-class Chrome flags, forwarded as --chrome-arg=<flag>. Only applies when Chrome is launched by chrome-devtools-mcp (not with autoConnect/browserUrl). */
|
|
51
53
|
chromeArgs?: string[];
|
|
52
54
|
/** Raw escape hatch: extra CLI flags forwarded verbatim to chrome-devtools-mcp. */
|
|
53
55
|
extraArgs?: string[];
|
|
54
56
|
}
|
|
55
57
|
/** In-session backend target for browser_switch_mode. */
|
|
56
|
-
export type BrowserMode = 'fresh' | 'persistent';
|
|
58
|
+
export type BrowserMode = 'fresh' | 'persistent' | 'existing';
|
|
57
59
|
/**
|
|
58
60
|
* Build the config for a mode switch from the session base config.
|
|
59
61
|
* fresh means an isolated clean room; persistent means the saved profile
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,mBAAmB,QAA4C,CAAA;AAE5E,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,UAAU,GAAG,UAAU,CAAA;AAEvE,4GAA4G;AAC5G,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,iFAAiF;AACjF,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,YAAY,GAAG,UAAU,CAAA;AAEnE,2GAA2G;AAC3G,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,IAAI,CAAC,EAAE,iBAAiB,CAAA;IACxB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,kBAAkB,CAAA;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,yBAAyB,CAAC,EAAE,OAAO,CAAA;IACnC,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,yGAAyG;IACzG,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,iKAAiK;IACjK,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB;AA0BD,yDAAyD;AACzD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,YAAY,GAAG,UAAU,CAAA;AAE7D;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,gBAAgB,EACtB,IAAI,EAAE,WAAW,EACjB,MAAM,UAAQ,GACb,gBAAgB,CAmClB;AAED,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,CAqDzE;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE,CA8C/D"}
|
package/dist/config.js
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { homedir } from 'node:os';
|
|
2
2
|
import { join, resolve } from 'node:path';
|
|
3
|
+
import { PI_PROFILE_NAME } from './named-profile.js';
|
|
3
4
|
export const DEFAULT_PROFILE_DIR = join(homedir(), '.pi', 'browser-profile');
|
|
4
5
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* daily Chrome (intrusive:
|
|
6
|
+
* Persistent headless by default: Pi-owned profile, no window, never steals
|
|
7
|
+
* focus, no consent popups (log in once via browser_setup, cookies persist).
|
|
8
|
+
* Set sessionMode "isolated" (or mode "fresh") for an anonymous clean room,
|
|
9
|
+
* or "existing" + autoConnect to drive your daily Chrome (intrusive:
|
|
10
|
+
* consent popup every session, windows may pop and steal focus).
|
|
9
11
|
*/
|
|
10
12
|
const DEFAULTS = {
|
|
11
|
-
sessionMode: '
|
|
13
|
+
sessionMode: 'persistent',
|
|
12
14
|
headless: true,
|
|
13
15
|
categoryPerformance: false,
|
|
14
16
|
categoryNetwork: true,
|
|
@@ -41,6 +43,15 @@ export function resolveModeTarget(base, mode, headed = false) {
|
|
|
41
43
|
void _userDataDir;
|
|
42
44
|
return { ...freshRest, sessionMode: 'isolated', headless: !headed, isolated: true };
|
|
43
45
|
}
|
|
46
|
+
if (mode === 'existing') {
|
|
47
|
+
// Attach to the user's running Chrome: drop Pi-owned launch fields so
|
|
48
|
+
// MCP auto-connects instead of starting its own browser.
|
|
49
|
+
const { userDataDir: _userDataDir, isolated: _isolated, ...existingRest } = rest;
|
|
50
|
+
void _userDataDir;
|
|
51
|
+
void _isolated;
|
|
52
|
+
// Existing attaches to the user's visible Chrome: always headed.
|
|
53
|
+
return { ...existingRest, sessionMode: 'existing', headless: false, autoConnect: true };
|
|
54
|
+
}
|
|
44
55
|
return {
|
|
45
56
|
...rest,
|
|
46
57
|
sessionMode: 'persistent',
|
|
@@ -78,6 +89,11 @@ export function resolveConfig(config) {
|
|
|
78
89
|
else if (headed !== undefined) {
|
|
79
90
|
resolved.headless = !headed;
|
|
80
91
|
}
|
|
92
|
+
// Existing attaches to the user's visible Chrome: always headed, so a
|
|
93
|
+
// stale headless default never leaks into flags or status output.
|
|
94
|
+
if (resolved.sessionMode === 'existing') {
|
|
95
|
+
resolved.headless = false;
|
|
96
|
+
}
|
|
81
97
|
if (resolved.allowedUrlPattern?.length && resolved.blockedUrlPattern?.length) {
|
|
82
98
|
throw new Error('allowedUrlPattern and blockedUrlPattern cannot be used together');
|
|
83
99
|
}
|
|
@@ -165,6 +181,13 @@ export function configToArgs(config) {
|
|
|
165
181
|
for (const flag of resolved.chromeArgs ?? []) {
|
|
166
182
|
args.push(`--chrome-arg=${flag}`);
|
|
167
183
|
}
|
|
184
|
+
if (resolved.sessionMode === 'persistent' &&
|
|
185
|
+
!resolved.browserUrl &&
|
|
186
|
+
!resolved.wsEndpoint &&
|
|
187
|
+
!resolved.autoConnect) {
|
|
188
|
+
// MCP-launched persistent Chrome must use the same named Pi profile.
|
|
189
|
+
args.push(`--chrome-arg=--profile-directory=${PI_PROFILE_NAME}`);
|
|
190
|
+
}
|
|
168
191
|
if (resolved.extraArgs)
|
|
169
192
|
args.push(...resolved.extraArgs);
|
|
170
193
|
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,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor.d.ts
CHANGED
|
@@ -3,6 +3,10 @@ export interface DoctorReport {
|
|
|
3
3
|
mode: string;
|
|
4
4
|
headless: boolean;
|
|
5
5
|
launchesChrome: boolean;
|
|
6
|
+
/** Who owns the Chrome process: Pi self-launch, MCP launch, or user attach. */
|
|
7
|
+
backend?: 'pi-owned' | 'mcp-launched' | 'attached-external';
|
|
8
|
+
/** Tab-bridge base URL when the Existing broker bridge is running. */
|
|
9
|
+
bridgeUrl?: string | null;
|
|
6
10
|
profile: {
|
|
7
11
|
dir: string | null;
|
|
8
12
|
exists: boolean;
|
|
@@ -17,6 +21,9 @@ export interface DoctorReport {
|
|
|
17
21
|
* session launches its own Chrome or attaches elsewhere, profile health,
|
|
18
22
|
* and upstream tool availability. No pages touched.
|
|
19
23
|
*/
|
|
20
|
-
export declare function diagnose(config: BrowserUseConfig, listToolNames: () => Promise<string[]
|
|
24
|
+
export declare function diagnose(config: BrowserUseConfig, listToolNames: () => Promise<string[]>, extra?: {
|
|
25
|
+
backend?: DoctorReport['backend'];
|
|
26
|
+
bridgeUrl?: string | null;
|
|
27
|
+
}): Promise<DoctorReport>;
|
|
21
28
|
export declare function formatDoctorReport(report: DoctorReport, home?: string): string;
|
|
22
29
|
//# sourceMappingURL=doctor.d.ts.map
|
package/dist/doctor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAExE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,EAAE,OAAO,CAAA;IACvB,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAA;IACnE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,IAAI,EAAE,MAAM,CAAA;CACb;AAcD;;;;GAIG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,gBAAgB,EACxB,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAExE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,EAAE,OAAO,CAAA;IACvB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,mBAAmB,CAAA;IAC3D,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAA;IACnE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,IAAI,EAAE,MAAM,CAAA;CACb;AAcD;;;;GAIG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,gBAAgB,EACxB,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,EACtC,KAAK,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACvE,OAAO,CAAC,YAAY,CAAC,CAsBvB;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,MAAkB,GAAG,MAAM,CAuBzF"}
|
package/dist/doctor.js
CHANGED
|
@@ -20,13 +20,20 @@ function profileStatus(dir) {
|
|
|
20
20
|
* session launches its own Chrome or attaches elsewhere, profile health,
|
|
21
21
|
* and upstream tool availability. No pages touched.
|
|
22
22
|
*/
|
|
23
|
-
export async function diagnose(config, listToolNames) {
|
|
23
|
+
export async function diagnose(config, listToolNames, extra) {
|
|
24
24
|
const launchesChrome = !config.browserUrl && !config.wsEndpoint && !config.autoConnect;
|
|
25
25
|
const dir = config.userDataDir ?? (config.sessionMode === 'persistent' ? DEFAULT_PROFILE_DIR : null);
|
|
26
26
|
return {
|
|
27
27
|
mode: config.sessionMode ?? 'isolated',
|
|
28
28
|
headless: config.headless ?? true,
|
|
29
29
|
launchesChrome,
|
|
30
|
+
backend: extra?.backend ??
|
|
31
|
+
(config.browserUrl || config.wsEndpoint
|
|
32
|
+
? 'attached-external'
|
|
33
|
+
: launchesChrome
|
|
34
|
+
? 'mcp-launched'
|
|
35
|
+
: 'attached-external'),
|
|
36
|
+
bridgeUrl: extra?.bridgeUrl ?? null,
|
|
30
37
|
profile: { dir, ...profileStatus(dir) },
|
|
31
38
|
endpoint: config.browserUrl ?? config.wsEndpoint ?? (config.autoConnect ? 'auto-discovered' : null),
|
|
32
39
|
upstreamTools: (await listToolNames()).length,
|
|
@@ -34,12 +41,15 @@ export async function diagnose(config, listToolNames) {
|
|
|
34
41
|
};
|
|
35
42
|
}
|
|
36
43
|
export function formatDoctorReport(report, home = homedir()) {
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
report.launchesChrome
|
|
44
|
+
const backendLine = report.backend === 'pi-owned'
|
|
45
|
+
? 'Chrome: Pi-owned process for this session (self-launched profile, MCP attached).'
|
|
46
|
+
: report.launchesChrome
|
|
40
47
|
? 'Chrome: launched by chrome-devtools-mcp for this session.'
|
|
41
|
-
: `Chrome: attached externally (${report.endpoint ?? 'unknown endpoint'}). Launch flags do not apply
|
|
42
|
-
];
|
|
48
|
+
: `Chrome: attached externally (${report.endpoint ?? 'unknown endpoint'}). Launch flags do not apply.`;
|
|
49
|
+
const lines = [`Mode: ${report.mode} (headless: ${report.headless ? 'yes' : 'no'})`, backendLine];
|
|
50
|
+
if (report.bridgeUrl) {
|
|
51
|
+
lines.push(`Tab bridge: ${report.bridgeUrl} (Existing-mode broker).`);
|
|
52
|
+
}
|
|
43
53
|
if (report.profile.dir) {
|
|
44
54
|
const display = report.profile.dir.replace(home, '~');
|
|
45
55
|
lines.push(`Profile: ${display} (exists: ${report.profile.exists ? 'yes' : 'no'}, writable: ${report.profile.writable ? 'yes' : 'NO — check ownership'}).`);
|
package/dist/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,mBAAmB,EAAyB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Existing-mode page opening (spec sections 18-20).
|
|
3
|
+
*
|
|
4
|
+
* Pi-created tabs in the user's Chrome are brokered by the Pi extension
|
|
5
|
+
* (see extension/background.js) through the loopback TabBridge, then
|
|
6
|
+
* correlated with MCP's page list — never by "first tab whose URL matches".
|
|
7
|
+
*
|
|
8
|
+
* Flow:
|
|
9
|
+
* 1. snapshot MCP's page ids (before),
|
|
10
|
+
* 2. bridge.requestTab(url) → token,
|
|
11
|
+
* 3. extension creates the inactive grouped tab, completes the token,
|
|
12
|
+
* 4. bridge.waitForTab(token) → { tabId },
|
|
13
|
+
* 5. diff MCP's page list (after) against before → exact new page.
|
|
14
|
+
*
|
|
15
|
+
* When the bridge/extension is unavailable, fail clearly instead of opening
|
|
16
|
+
* unmanaged foreground tabs (spec 25).
|
|
17
|
+
*/
|
|
18
|
+
import { TabBridge } from './tab-bridge.js';
|
|
19
|
+
export interface McpPageEntry {
|
|
20
|
+
pageId: number;
|
|
21
|
+
url?: string;
|
|
22
|
+
title?: string;
|
|
23
|
+
}
|
|
24
|
+
/** URLs Pi opened or navigated to in Existing mode: the only close targets. */
|
|
25
|
+
export declare function normalizeTabUrl(url: string): string;
|
|
26
|
+
/** Refuse to close Existing-mode tabs Pi did not open (spec 19). */
|
|
27
|
+
export declare function checkExistingCloseAllowed(entries: McpPageEntry[], pageId: number, piOwnedUrls: ReadonlySet<string>): {
|
|
28
|
+
ok: true;
|
|
29
|
+
} | {
|
|
30
|
+
ok: false;
|
|
31
|
+
reason: string;
|
|
32
|
+
};
|
|
33
|
+
export interface ExistingFlowDeps {
|
|
34
|
+
bridge: TabBridge;
|
|
35
|
+
/** List MCP-visible pages (browser_list_pages equivalent). */
|
|
36
|
+
listPages: () => Promise<McpPageEntry[]>;
|
|
37
|
+
requestTab?: (url: string) => string;
|
|
38
|
+
waitForTab?: (token: string, options?: {
|
|
39
|
+
timeoutMs?: number;
|
|
40
|
+
signal?: AbortSignal;
|
|
41
|
+
}) => Promise<{
|
|
42
|
+
tabId?: number;
|
|
43
|
+
error?: string;
|
|
44
|
+
}>;
|
|
45
|
+
}
|
|
46
|
+
export interface ExistingOpenResult {
|
|
47
|
+
/** Correlation token (also the bridge token). */
|
|
48
|
+
token: string;
|
|
49
|
+
/** Chrome tab id reported by the extension. */
|
|
50
|
+
tabId?: number;
|
|
51
|
+
/** MCP page id correlated by before/after diff, when unambiguous. */
|
|
52
|
+
pageId?: number;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Best-effort MCP page list → entries. Prefers structured content, then
|
|
56
|
+
* parses the `N: title (url)` text lines list_pages emits. Never throws:
|
|
57
|
+
* unparseable results yield an empty list (correlation then stays silent
|
|
58
|
+
* instead of guessing).
|
|
59
|
+
*/
|
|
60
|
+
export declare function parseMcpPageList(result: unknown): McpPageEntry[];
|
|
61
|
+
/** Diff page lists by id; returns the single new id, or undefined when the
|
|
62
|
+
* diff is empty or ambiguous (never guess). */
|
|
63
|
+
export declare function correlateNewPage(before: McpPageEntry[], after: McpPageEntry[]): number | undefined;
|
|
64
|
+
export declare function openExistingPage(url: string, deps: ExistingFlowDeps, options?: {
|
|
65
|
+
timeoutMs?: number;
|
|
66
|
+
signal?: AbortSignal;
|
|
67
|
+
}): Promise<ExistingOpenResult>;
|
|
68
|
+
//# sourceMappingURL=existing-flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"existing-flow.d.ts","sourceRoot":"","sources":["../src/existing-flow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,oEAAoE;AACpE,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,GAC/B;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAmB9C;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,SAAS,CAAA;IACjB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IACxC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IACpC,UAAU,CAAC,EAAE,CACX,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KACnD,OAAO,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAC,CAAA;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAA;IACb,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,EAAE,CAmChE;AAED;+CAC+C;AAC/C,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EAAE,EACtB,KAAK,EAAE,YAAY,EAAE,GACpB,MAAM,GAAG,SAAS,CAKpB;AAED,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,gBAAgB,EACtB,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GACrD,OAAO,CAAC,kBAAkB,CAAC,CA2B7B"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Existing-mode page opening (spec sections 18-20).
|
|
3
|
+
*
|
|
4
|
+
* Pi-created tabs in the user's Chrome are brokered by the Pi extension
|
|
5
|
+
* (see extension/background.js) through the loopback TabBridge, then
|
|
6
|
+
* correlated with MCP's page list — never by "first tab whose URL matches".
|
|
7
|
+
*
|
|
8
|
+
* Flow:
|
|
9
|
+
* 1. snapshot MCP's page ids (before),
|
|
10
|
+
* 2. bridge.requestTab(url) → token,
|
|
11
|
+
* 3. extension creates the inactive grouped tab, completes the token,
|
|
12
|
+
* 4. bridge.waitForTab(token) → { tabId },
|
|
13
|
+
* 5. diff MCP's page list (after) against before → exact new page.
|
|
14
|
+
*
|
|
15
|
+
* When the bridge/extension is unavailable, fail clearly instead of opening
|
|
16
|
+
* unmanaged foreground tabs (spec 25).
|
|
17
|
+
*/
|
|
18
|
+
import { TabBridge } from './tab-bridge.js';
|
|
19
|
+
/** URLs Pi opened or navigated to in Existing mode: the only close targets. */
|
|
20
|
+
export function normalizeTabUrl(url) {
|
|
21
|
+
return url.endsWith('/') && url.length > 1 ? url.slice(0, -1) : url;
|
|
22
|
+
}
|
|
23
|
+
/** Refuse to close Existing-mode tabs Pi did not open (spec 19). */
|
|
24
|
+
export function checkExistingCloseAllowed(entries, pageId, piOwnedUrls) {
|
|
25
|
+
const target = entries.find((entry) => entry.pageId === pageId);
|
|
26
|
+
if (!target) {
|
|
27
|
+
return {
|
|
28
|
+
ok: false,
|
|
29
|
+
reason: `No page ${pageId} is currently open. Re-list pages; page IDs shift when tabs close.`,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const url = target.url ?? '';
|
|
33
|
+
if (url !== '' && (piOwnedUrls.has(url) || piOwnedUrls.has(normalizeTabUrl(url)))) {
|
|
34
|
+
return { ok: true };
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
ok: false,
|
|
38
|
+
reason: `Refusing to close page ${pageId} (${target.title ?? url ?? 'unknown tab'}): ` +
|
|
39
|
+
`Pi did not open it, and closing unrelated user tabs is forbidden. ` +
|
|
40
|
+
`Pass force:true only if the user explicitly asked for this exact tab.`,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Best-effort MCP page list → entries. Prefers structured content, then
|
|
45
|
+
* parses the `N: title (url)` text lines list_pages emits. Never throws:
|
|
46
|
+
* unparseable results yield an empty list (correlation then stays silent
|
|
47
|
+
* instead of guessing).
|
|
48
|
+
*/
|
|
49
|
+
export function parseMcpPageList(result) {
|
|
50
|
+
const entries = [];
|
|
51
|
+
if (typeof result !== 'object' || result === null)
|
|
52
|
+
return entries;
|
|
53
|
+
const structured = result.structuredContent;
|
|
54
|
+
const candidates = Array.isArray(structured)
|
|
55
|
+
? structured
|
|
56
|
+
: Array.isArray(structured?.pages)
|
|
57
|
+
? structured.pages
|
|
58
|
+
: [];
|
|
59
|
+
for (const candidate of candidates) {
|
|
60
|
+
const entry = candidate;
|
|
61
|
+
const id = typeof entry.pageId === 'number' ? entry.pageId : entry.id;
|
|
62
|
+
if (typeof id === 'number') {
|
|
63
|
+
entries.push(typeof entry.url === 'string' ? { pageId: id, url: entry.url } : { pageId: id });
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (entries.length > 0)
|
|
67
|
+
return entries;
|
|
68
|
+
const text = Array.isArray(result.content)
|
|
69
|
+
? result.content
|
|
70
|
+
.filter((item) => item.type === 'text' && typeof item.text === 'string')
|
|
71
|
+
.map((item) => item.text)
|
|
72
|
+
.join('\n')
|
|
73
|
+
: '';
|
|
74
|
+
for (const line of text.split('\n')) {
|
|
75
|
+
const match = line.match(/^\s*(\d+)\s*:(.*?)(?:\((https?:[^)]*)\))?\s*(?:\[selected\])?\s*$/);
|
|
76
|
+
if (match) {
|
|
77
|
+
const entry = { pageId: Number(match[1]) };
|
|
78
|
+
const title = (match[2] ?? '').trim();
|
|
79
|
+
if (title)
|
|
80
|
+
entry.title = title;
|
|
81
|
+
const url = (match[3] ?? '').trim();
|
|
82
|
+
if (url)
|
|
83
|
+
entry.url = url;
|
|
84
|
+
entries.push(entry);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return entries;
|
|
88
|
+
}
|
|
89
|
+
/** Diff page lists by id; returns the single new id, or undefined when the
|
|
90
|
+
* diff is empty or ambiguous (never guess). */
|
|
91
|
+
export function correlateNewPage(before, after) {
|
|
92
|
+
const known = new Set(before.map((p) => p.pageId));
|
|
93
|
+
const fresh = after.filter((p) => !known.has(p.pageId));
|
|
94
|
+
if (fresh.length !== 1)
|
|
95
|
+
return undefined;
|
|
96
|
+
return fresh[0]?.pageId;
|
|
97
|
+
}
|
|
98
|
+
export async function openExistingPage(url, deps, options) {
|
|
99
|
+
if (typeof url !== 'string' || url.length === 0)
|
|
100
|
+
throw new Error('A URL is required.');
|
|
101
|
+
let before;
|
|
102
|
+
try {
|
|
103
|
+
before = await deps.listPages();
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
before = [];
|
|
107
|
+
}
|
|
108
|
+
const token = deps.requestTab ? deps.requestTab(url) : deps.bridge.requestTab(url);
|
|
109
|
+
const wait = deps.waitForTab ?? ((t, o) => deps.bridge.waitForTab(t, o));
|
|
110
|
+
let completion;
|
|
111
|
+
try {
|
|
112
|
+
completion = await wait(token, { timeoutMs: options?.timeoutMs, signal: options?.signal });
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
throw new Error(`Pi extension did not open the tab (token ${token}). ` +
|
|
116
|
+
`Is the extension installed and polling the tab bridge? (${error instanceof Error ? error.message : String(error)})`);
|
|
117
|
+
}
|
|
118
|
+
let pageId;
|
|
119
|
+
try {
|
|
120
|
+
const after = await deps.listPages();
|
|
121
|
+
pageId = correlateNewPage(before, after);
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
pageId = undefined;
|
|
125
|
+
}
|
|
126
|
+
return { token, tabId: completion.tabId, pageId };
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=existing-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"existing-flow.js","sourceRoot":"","sources":["../src/existing-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP navigation focus policy (spec section 9, layer 1 + section 20).
|
|
3
|
+
*
|
|
4
|
+
* Every Pi-created MCP page defaults to background; every page selection
|
|
5
|
+
* defaults to no foreground activation. Foreground is reserved for explicit
|
|
6
|
+
* user requests ("show me what Pi is doing") and authentication handoffs.
|
|
7
|
+
*/
|
|
8
|
+
export declare const PI_GROUP_TITLE = "pi-browser-use";
|
|
9
|
+
export interface NewPageParams {
|
|
10
|
+
url?: string;
|
|
11
|
+
background?: boolean;
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
}
|
|
14
|
+
export interface SelectPageParams {
|
|
15
|
+
pageId?: number;
|
|
16
|
+
bringToFront?: boolean;
|
|
17
|
+
[key: string]: unknown;
|
|
18
|
+
}
|
|
19
|
+
/** Default `new_page` to background unless the caller explicitly opted out. */
|
|
20
|
+
export declare function applyNewPageDefaults<T extends NewPageParams>(params: T): T;
|
|
21
|
+
/** Default `select_page` to no foreground activation. */
|
|
22
|
+
export declare function applySelectPageDefaults<T extends SelectPageParams>(params: T): T;
|
|
23
|
+
/**
|
|
24
|
+
* Foreground is allowed only when the user explicitly asked to view the page
|
|
25
|
+
* or Pi is intentionally handing control over for authentication.
|
|
26
|
+
*/
|
|
27
|
+
export declare function isForegroundAllowed(reason: unknown): boolean;
|
|
28
|
+
//# sourceMappingURL=focus-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focus-policy.d.ts","sourceRoot":"","sources":["../src/focus-policy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,cAAc,mBAAmB,CAAA;AAE9C,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,aAAa,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAG1E;AAED,yDAAyD;AACzD,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,gBAAgB,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAGhF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAE5D"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP navigation focus policy (spec section 9, layer 1 + section 20).
|
|
3
|
+
*
|
|
4
|
+
* Every Pi-created MCP page defaults to background; every page selection
|
|
5
|
+
* defaults to no foreground activation. Foreground is reserved for explicit
|
|
6
|
+
* user requests ("show me what Pi is doing") and authentication handoffs.
|
|
7
|
+
*/
|
|
8
|
+
export const PI_GROUP_TITLE = 'pi-browser-use';
|
|
9
|
+
/** Default `new_page` to background unless the caller explicitly opted out. */
|
|
10
|
+
export function applyNewPageDefaults(params) {
|
|
11
|
+
if (params.background === undefined)
|
|
12
|
+
return { ...params, background: true };
|
|
13
|
+
return params;
|
|
14
|
+
}
|
|
15
|
+
/** Default `select_page` to no foreground activation. */
|
|
16
|
+
export function applySelectPageDefaults(params) {
|
|
17
|
+
if (params.bringToFront === undefined)
|
|
18
|
+
return { ...params, bringToFront: false };
|
|
19
|
+
return params;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Foreground is allowed only when the user explicitly asked to view the page
|
|
23
|
+
* or Pi is intentionally handing control over for authentication.
|
|
24
|
+
*/
|
|
25
|
+
export function isForegroundAllowed(reason) {
|
|
26
|
+
return reason === 'user-requested-view' || reason === 'auth-handoff';
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=focus-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focus-policy.js","sourceRoot":"","sources":["../src/focus-policy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAA;AAc9C,+EAA+E;AAC/E,MAAM,UAAU,oBAAoB,CAA0B,MAAS;IACrE,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;IAC3E,OAAO,MAAM,CAAA;AACf,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,uBAAuB,CAA6B,MAAS;IAC3E,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAA;IAChF,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAe;IACjD,OAAO,MAAM,KAAK,qBAAqB,IAAI,MAAM,KAAK,cAAc,CAAA;AACtE,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -39,8 +39,8 @@ interface Pi {
|
|
|
39
39
|
* discovers upstream tools, and registers each as browser_*. On
|
|
40
40
|
* session_shutdown tears the subprocess down. Nothing runs persistently.
|
|
41
41
|
*
|
|
42
|
-
* Defaults are
|
|
43
|
-
*
|
|
42
|
+
* Defaults are persistent headless (Pi-owned profile, no window, no consent
|
|
43
|
+
* popups). Set mode "fresh" for an isolated clean room, or "existing" with
|
|
44
44
|
* autoConnect/browserUrl to drive an already-running Chrome.
|
|
45
45
|
*/
|
|
46
46
|
export default function browserUseExtension(pi: Pi): void;
|
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":"AA2DA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAkCzD,UAAU,aAAa;IACrB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;IAChD,mBAAmB,CACjB,KAAK,EAAE,OAAO,GACb,OAAO,CACR;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAC/F,CAAA;CACF;AAED,UAAU,aAAa;IACrB,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;AAED,UAAU,EAAE;IACV,YAAY,CAAC,GAAG,EAAE;QAChB,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,WAAW,EAAE,MAAM,CAAA;QACnB,UAAU,EAAE,OAAO,CAAA;QACnB,OAAO,EAAE,CACP,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,OAAO,EAClB,GAAG,CAAC,EAAE,aAAa,KAChB,OAAO,CAAC;YACX,OAAO,EAAE,KAAK,CAAC;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;YACjF,OAAO,CAAC,EAAE,OAAO,CAAA;YACjB,OAAO,CAAC,EAAE,SAAS,CAAA;SACpB,CAAC,CAAA;KACH,GAAG,IAAI,CAAA;IACR,EAAE,CACA,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GACzF,IAAI,CAAA;CACR;AA8BD;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAE,EAAE,EAAE,QA42BjD"}
|