@webmcp-bridge/local-mcp 0.5.4 → 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/dist/bridge.d.ts +4 -4
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js +146 -581
- package/dist/bridge.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +14 -0
- package/dist/cli.js.map +1 -1
- package/dist/overlays.d.ts +72 -0
- package/dist/overlays.d.ts.map +1 -0
- package/dist/overlays.js +323 -0
- package/dist/overlays.js.map +1 -0
- package/dist/profiles.d.ts +8 -0
- package/dist/profiles.d.ts.map +1 -0
- package/dist/profiles.js +27 -0
- package/dist/profiles.js.map +1 -0
- package/dist/runtime.d.ts +2 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +21 -5
- package/dist/runtime.js.map +1 -1
- package/dist/server.d.ts +10 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +340 -0
- package/dist/server.js.map +1 -1
- package/dist/session.d.ts +3 -83
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +3 -602
- package/dist/session.js.map +1 -1
- package/package.json +8 -7
package/dist/session.js
CHANGED
|
@@ -1,605 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* This module
|
|
3
|
-
* It depends on
|
|
2
|
+
* This module re-exports browser session primitives from agent-browser-core for local-mcp.
|
|
3
|
+
* It depends on agent-browser-core so local-mcp can keep its existing import surface while shedding lifecycle ownership.
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
import { spawn } from "node:child_process";
|
|
7
|
-
import { dirname, join } from "node:path";
|
|
8
|
-
import { createServer } from "node:net";
|
|
9
|
-
const SESSION_METADATA_VERSION = 2;
|
|
10
|
-
const SESSION_METADATA_PATH = ".webmcp-bridge/session.json";
|
|
11
|
-
const CDP_READY_TIMEOUT_MS = 10_000;
|
|
12
|
-
const CDP_READY_POLL_INTERVAL_MS = 250;
|
|
13
|
-
const PROCESS_EXIT_TIMEOUT_MS = 5_000;
|
|
14
|
-
const PROCESS_EXIT_POLL_INTERVAL_MS = 100;
|
|
15
|
-
function timestamp() {
|
|
16
|
-
return new Date().toISOString();
|
|
17
|
-
}
|
|
18
|
-
async function pathExists(path) {
|
|
19
|
-
try {
|
|
20
|
-
await access(path);
|
|
21
|
-
return true;
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
function getSessionMetadataPath(userDataDir) {
|
|
28
|
-
return join(userDataDir, SESSION_METADATA_PATH);
|
|
29
|
-
}
|
|
30
|
-
function isRecord(value) {
|
|
31
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
32
|
-
}
|
|
33
|
-
function isBridgeAuthState(value) {
|
|
34
|
-
return (value === "unknown" ||
|
|
35
|
-
value === "authenticated" ||
|
|
36
|
-
value === "auth_required" ||
|
|
37
|
-
value === "challenge_required");
|
|
38
|
-
}
|
|
39
|
-
function isBridgeSessionState(value) {
|
|
40
|
-
return (value === "profile_missing" ||
|
|
41
|
-
value === "profile_present_unverified" ||
|
|
42
|
-
value === "bootstrap_active" ||
|
|
43
|
-
value === "auth_required" ||
|
|
44
|
-
value === "challenge_required" ||
|
|
45
|
-
value === "authenticated" ||
|
|
46
|
-
value === "runtime_active");
|
|
47
|
-
}
|
|
48
|
-
function isBridgeControlMode(value) {
|
|
49
|
-
return value === "none" || value === "bootstrap" || value === "launch" || value === "attach";
|
|
50
|
-
}
|
|
51
|
-
function isBridgeSessionOwnership(value) {
|
|
52
|
-
return value === "none" || value === "managed" || value === "external";
|
|
53
|
-
}
|
|
54
|
-
function isBridgePresentationMode(value) {
|
|
55
|
-
return value === "headed" || value === "headless";
|
|
56
|
-
}
|
|
57
|
-
function toPresentationMode(headless) {
|
|
58
|
-
return headless ? "headless" : "headed";
|
|
59
|
-
}
|
|
60
|
-
function normalizeMetadata(value, fallback) {
|
|
61
|
-
const base = {
|
|
62
|
-
version: SESSION_METADATA_VERSION,
|
|
63
|
-
site: fallback.site,
|
|
64
|
-
profilePath: fallback.profilePath,
|
|
65
|
-
targetUrl: fallback.targetUrl,
|
|
66
|
-
authPolicyMode: fallback.authPolicy.mode,
|
|
67
|
-
...(fallback.authPolicy.authProbeTool !== undefined ? { authProbeTool: fallback.authPolicy.authProbeTool } : {}),
|
|
68
|
-
allowAnonymousTools: fallback.authPolicy.allowAnonymousTools,
|
|
69
|
-
presentationMode: "headed",
|
|
70
|
-
preferredPresentationMode: "headed",
|
|
71
|
-
sessionState: fallback.profileExists ? "profile_present_unverified" : "profile_missing",
|
|
72
|
-
authState: "unknown",
|
|
73
|
-
controlMode: "none",
|
|
74
|
-
ownership: "none",
|
|
75
|
-
updatedAt: timestamp(),
|
|
76
|
-
};
|
|
77
|
-
if (!isRecord(value)) {
|
|
78
|
-
return base;
|
|
79
|
-
}
|
|
80
|
-
const metadata = { ...base };
|
|
81
|
-
if (typeof value.site === "string" && value.site.trim()) {
|
|
82
|
-
metadata.site = value.site;
|
|
83
|
-
}
|
|
84
|
-
if (typeof value.profilePath === "string" && value.profilePath.trim()) {
|
|
85
|
-
metadata.profilePath = value.profilePath;
|
|
86
|
-
}
|
|
87
|
-
if (typeof value.targetUrl === "string" && value.targetUrl.trim()) {
|
|
88
|
-
metadata.targetUrl = value.targetUrl;
|
|
89
|
-
}
|
|
90
|
-
if (value.authPolicyMode === "none" || value.authPolicyMode === "bootstrap_then_attach") {
|
|
91
|
-
metadata.authPolicyMode = value.authPolicyMode;
|
|
92
|
-
}
|
|
93
|
-
if (typeof value.authProbeTool === "string" && value.authProbeTool.trim()) {
|
|
94
|
-
metadata.authProbeTool = value.authProbeTool;
|
|
95
|
-
}
|
|
96
|
-
if (typeof value.allowAnonymousTools === "boolean") {
|
|
97
|
-
metadata.allowAnonymousTools = value.allowAnonymousTools;
|
|
98
|
-
}
|
|
99
|
-
if (isBridgePresentationMode(value.presentationMode)) {
|
|
100
|
-
metadata.presentationMode = value.presentationMode;
|
|
101
|
-
}
|
|
102
|
-
else if (typeof value.headless === "boolean") {
|
|
103
|
-
metadata.presentationMode = toPresentationMode(value.headless);
|
|
104
|
-
}
|
|
105
|
-
if (isBridgePresentationMode(value.preferredPresentationMode)) {
|
|
106
|
-
metadata.preferredPresentationMode = value.preferredPresentationMode;
|
|
107
|
-
}
|
|
108
|
-
else if (typeof value.headless === "boolean") {
|
|
109
|
-
metadata.preferredPresentationMode = toPresentationMode(value.headless);
|
|
110
|
-
}
|
|
111
|
-
if (isBridgeSessionState(value.sessionState)) {
|
|
112
|
-
metadata.sessionState = value.sessionState;
|
|
113
|
-
}
|
|
114
|
-
if (isBridgeAuthState(value.authState)) {
|
|
115
|
-
metadata.authState = value.authState;
|
|
116
|
-
}
|
|
117
|
-
if (isBridgeControlMode(value.controlMode)) {
|
|
118
|
-
metadata.controlMode = value.controlMode;
|
|
119
|
-
}
|
|
120
|
-
if (isBridgeSessionOwnership(value.ownership)) {
|
|
121
|
-
metadata.ownership = value.ownership;
|
|
122
|
-
}
|
|
123
|
-
if (typeof value.browserUrl === "string" && value.browserUrl.trim()) {
|
|
124
|
-
metadata.browserUrl = value.browserUrl;
|
|
125
|
-
}
|
|
126
|
-
if (typeof value.browserPid === "number" && Number.isInteger(value.browserPid) && value.browserPid > 0) {
|
|
127
|
-
metadata.browserPid = value.browserPid;
|
|
128
|
-
}
|
|
129
|
-
if (typeof value.lastBackupPath === "string" && value.lastBackupPath.trim()) {
|
|
130
|
-
metadata.lastBackupPath = value.lastBackupPath;
|
|
131
|
-
}
|
|
132
|
-
if (typeof value.updatedAt === "string" && value.updatedAt.trim()) {
|
|
133
|
-
metadata.updatedAt = value.updatedAt;
|
|
134
|
-
}
|
|
135
|
-
if (metadata.controlMode === "bootstrap") {
|
|
136
|
-
metadata.presentationMode = "headed";
|
|
137
|
-
}
|
|
138
|
-
return metadata;
|
|
139
|
-
}
|
|
140
|
-
export function resolveAuthPolicy(manifest) {
|
|
141
|
-
const declared = manifest.authPolicy;
|
|
142
|
-
if (declared) {
|
|
143
|
-
return {
|
|
144
|
-
mode: declared.mode,
|
|
145
|
-
...(declared.authProbeTool !== undefined ? { authProbeTool: declared.authProbeTool } : {}),
|
|
146
|
-
allowAnonymousTools: declared.allowAnonymousTools ?? false,
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
const mode = manifest.deferBridgeUntilAuthenticated === true ? "bootstrap_then_attach" : "none";
|
|
150
|
-
return {
|
|
151
|
-
mode,
|
|
152
|
-
...(manifest.authProbeTool !== undefined ? { authProbeTool: manifest.authProbeTool } : {}),
|
|
153
|
-
allowAnonymousTools: manifest.deferBridgeUntilAuthenticated === true,
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
export async function ensureManagedProfile(userDataDir) {
|
|
157
|
-
await mkdir(userDataDir, { recursive: true });
|
|
158
|
-
}
|
|
159
|
-
export async function readSessionMetadata(userDataDir, fallback) {
|
|
160
|
-
const profileExists = await pathExists(userDataDir);
|
|
161
|
-
const metadataPath = getSessionMetadataPath(userDataDir);
|
|
162
|
-
if (!(await pathExists(metadataPath))) {
|
|
163
|
-
return normalizeMetadata(undefined, {
|
|
164
|
-
site: fallback.site,
|
|
165
|
-
profilePath: userDataDir,
|
|
166
|
-
targetUrl: fallback.targetUrl,
|
|
167
|
-
authPolicy: fallback.authPolicy,
|
|
168
|
-
profileExists,
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
try {
|
|
172
|
-
const parsed = JSON.parse(await readFile(metadataPath, "utf8"));
|
|
173
|
-
return normalizeMetadata(parsed, {
|
|
174
|
-
site: fallback.site,
|
|
175
|
-
profilePath: userDataDir,
|
|
176
|
-
targetUrl: fallback.targetUrl,
|
|
177
|
-
authPolicy: fallback.authPolicy,
|
|
178
|
-
profileExists,
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
catch {
|
|
182
|
-
return normalizeMetadata(undefined, {
|
|
183
|
-
site: fallback.site,
|
|
184
|
-
profilePath: userDataDir,
|
|
185
|
-
targetUrl: fallback.targetUrl,
|
|
186
|
-
authPolicy: fallback.authPolicy,
|
|
187
|
-
profileExists,
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
export async function writeSessionMetadata(userDataDir, metadata) {
|
|
192
|
-
const metadataPath = getSessionMetadataPath(userDataDir);
|
|
193
|
-
await mkdir(dirname(metadataPath), { recursive: true });
|
|
194
|
-
await writeFile(metadataPath, `${JSON.stringify({ ...metadata, version: SESSION_METADATA_VERSION }, null, 2)}\n`, "utf8");
|
|
195
|
-
}
|
|
196
|
-
export async function updateSessionMetadata(userDataDir, fallback, patch) {
|
|
197
|
-
const current = await readSessionMetadata(userDataDir, fallback);
|
|
198
|
-
const normalizedPatch = { ...patch };
|
|
199
|
-
if (normalizedPatch.browserUrl === null) {
|
|
200
|
-
delete normalizedPatch.browserUrl;
|
|
201
|
-
}
|
|
202
|
-
if (normalizedPatch.browserPid === null) {
|
|
203
|
-
delete normalizedPatch.browserPid;
|
|
204
|
-
}
|
|
205
|
-
if (normalizedPatch.lastBackupPath === null) {
|
|
206
|
-
delete normalizedPatch.lastBackupPath;
|
|
207
|
-
}
|
|
208
|
-
const next = {
|
|
209
|
-
...current,
|
|
210
|
-
...normalizedPatch,
|
|
211
|
-
updatedAt: timestamp(),
|
|
212
|
-
};
|
|
213
|
-
if ("browserUrl" in patch && patch.browserUrl === null) {
|
|
214
|
-
delete next.browserUrl;
|
|
215
|
-
}
|
|
216
|
-
if ("browserPid" in patch && patch.browserPid === null) {
|
|
217
|
-
delete next.browserPid;
|
|
218
|
-
}
|
|
219
|
-
if ("lastBackupPath" in patch && patch.lastBackupPath === null) {
|
|
220
|
-
delete next.lastBackupPath;
|
|
221
|
-
}
|
|
222
|
-
await writeSessionMetadata(userDataDir, next);
|
|
223
|
-
return next;
|
|
224
|
-
}
|
|
225
|
-
export async function backupAndResetProfile(userDataDir, fallback) {
|
|
226
|
-
let backupPath;
|
|
227
|
-
if (await pathExists(userDataDir)) {
|
|
228
|
-
const profileStat = await stat(userDataDir).catch(() => undefined);
|
|
229
|
-
if (profileStat?.isDirectory()) {
|
|
230
|
-
backupPath = `${userDataDir}-backup-${timestamp().replace(/[:.]/g, "-")}`;
|
|
231
|
-
await rename(userDataDir, backupPath);
|
|
232
|
-
}
|
|
233
|
-
else {
|
|
234
|
-
await rm(userDataDir, { force: true, recursive: true });
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
await mkdir(userDataDir, { recursive: true });
|
|
238
|
-
const resetPatch = {
|
|
239
|
-
sessionState: "profile_missing",
|
|
240
|
-
authState: "unknown",
|
|
241
|
-
controlMode: "none",
|
|
242
|
-
ownership: "none",
|
|
243
|
-
browserUrl: null,
|
|
244
|
-
browserPid: null,
|
|
245
|
-
};
|
|
246
|
-
if (backupPath !== undefined) {
|
|
247
|
-
resetPatch.lastBackupPath = backupPath;
|
|
248
|
-
}
|
|
249
|
-
const metadata = await updateSessionMetadata(userDataDir, fallback, resetPatch);
|
|
250
|
-
return { metadata, ...(backupPath !== undefined ? { backupPath } : {}) };
|
|
251
|
-
}
|
|
252
|
-
function getChromiumCandidates(channel) {
|
|
253
|
-
if (process.env.WEBMCP_CHROMIUM_EXECUTABLE) {
|
|
254
|
-
return [process.env.WEBMCP_CHROMIUM_EXECUTABLE];
|
|
255
|
-
}
|
|
256
|
-
const normalizedChannel = channel ?? "chrome";
|
|
257
|
-
if (process.platform === "darwin") {
|
|
258
|
-
const appNames = {
|
|
259
|
-
chrome: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
|
|
260
|
-
"chrome-beta": "/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta",
|
|
261
|
-
"chrome-dev": "/Applications/Google Chrome Dev.app/Contents/MacOS/Google Chrome Dev",
|
|
262
|
-
"chrome-canary": "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary",
|
|
263
|
-
msedge: "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge",
|
|
264
|
-
"msedge-beta": "/Applications/Microsoft Edge Beta.app/Contents/MacOS/Microsoft Edge Beta",
|
|
265
|
-
"msedge-dev": "/Applications/Microsoft Edge Dev.app/Contents/MacOS/Microsoft Edge Dev",
|
|
266
|
-
"msedge-canary": "/Applications/Microsoft Edge Canary.app/Contents/MacOS/Microsoft Edge Canary",
|
|
267
|
-
};
|
|
268
|
-
const fallback = [appNames.chrome, "/Applications/Chromium.app/Contents/MacOS/Chromium"];
|
|
269
|
-
return [appNames[normalizedChannel], ...fallback].filter(Boolean);
|
|
270
|
-
}
|
|
271
|
-
if (process.platform === "win32") {
|
|
272
|
-
const localAppData = process.env.LOCALAPPDATA ?? "";
|
|
273
|
-
const programFiles = process.env.PROGRAMFILES ?? "C:\\Program Files";
|
|
274
|
-
const programFilesX86 = process.env["PROGRAMFILES(X86)"] ?? "C:\\Program Files (x86)";
|
|
275
|
-
const candidates = {
|
|
276
|
-
chrome: [
|
|
277
|
-
`${programFiles}\\Google\\Chrome\\Application\\chrome.exe`,
|
|
278
|
-
`${programFilesX86}\\Google\\Chrome\\Application\\chrome.exe`,
|
|
279
|
-
`${localAppData}\\Google\\Chrome\\Application\\chrome.exe`,
|
|
280
|
-
],
|
|
281
|
-
"chrome-beta": [
|
|
282
|
-
`${programFiles}\\Google\\Chrome Beta\\Application\\chrome.exe`,
|
|
283
|
-
`${programFilesX86}\\Google\\Chrome Beta\\Application\\chrome.exe`,
|
|
284
|
-
`${localAppData}\\Google\\Chrome Beta\\Application\\chrome.exe`,
|
|
285
|
-
],
|
|
286
|
-
"chrome-dev": [`${localAppData}\\Google\\Chrome Dev\\Application\\chrome.exe`],
|
|
287
|
-
"chrome-canary": [`${localAppData}\\Google\\Chrome SxS\\Application\\chrome.exe`],
|
|
288
|
-
msedge: [
|
|
289
|
-
`${programFiles}\\Microsoft\\Edge\\Application\\msedge.exe`,
|
|
290
|
-
`${programFilesX86}\\Microsoft\\Edge\\Application\\msedge.exe`,
|
|
291
|
-
],
|
|
292
|
-
"msedge-beta": [
|
|
293
|
-
`${programFiles}\\Microsoft\\Edge Beta\\Application\\msedge.exe`,
|
|
294
|
-
`${programFilesX86}\\Microsoft\\Edge Beta\\Application\\msedge.exe`,
|
|
295
|
-
],
|
|
296
|
-
"msedge-dev": [
|
|
297
|
-
`${programFiles}\\Microsoft\\Edge Dev\\Application\\msedge.exe`,
|
|
298
|
-
`${programFilesX86}\\Microsoft\\Edge Dev\\Application\\msedge.exe`,
|
|
299
|
-
],
|
|
300
|
-
"msedge-canary": [`${localAppData}\\Microsoft\\Edge SxS\\Application\\msedge.exe`],
|
|
301
|
-
};
|
|
302
|
-
return candidates[normalizedChannel];
|
|
303
|
-
}
|
|
304
|
-
const commands = {
|
|
305
|
-
chrome: ["google-chrome", "google-chrome-stable", "chromium-browser", "chromium"],
|
|
306
|
-
"chrome-beta": ["google-chrome-beta"],
|
|
307
|
-
"chrome-dev": ["google-chrome-unstable"],
|
|
308
|
-
"chrome-canary": ["google-chrome-canary"],
|
|
309
|
-
msedge: ["microsoft-edge", "microsoft-edge-stable"],
|
|
310
|
-
"msedge-beta": ["microsoft-edge-beta"],
|
|
311
|
-
"msedge-dev": ["microsoft-edge-dev"],
|
|
312
|
-
"msedge-canary": ["microsoft-edge-canary"],
|
|
313
|
-
};
|
|
314
|
-
return commands[normalizedChannel];
|
|
315
|
-
}
|
|
316
|
-
async function resolveChromiumExecutable(channel) {
|
|
317
|
-
const candidates = getChromiumCandidates(channel);
|
|
318
|
-
for (const candidate of candidates) {
|
|
319
|
-
if (!candidate) {
|
|
320
|
-
continue;
|
|
321
|
-
}
|
|
322
|
-
if (candidate.includes("/") || candidate.includes("\\") || candidate.endsWith(".exe")) {
|
|
323
|
-
if (await pathExists(candidate)) {
|
|
324
|
-
return candidate;
|
|
325
|
-
}
|
|
326
|
-
continue;
|
|
327
|
-
}
|
|
328
|
-
return candidate;
|
|
329
|
-
}
|
|
330
|
-
throw new Error("BROWSER_NOT_FOUND: unable to locate a Chromium browser for bootstrap/attach. Set WEBMCP_CHROMIUM_EXECUTABLE or install a supported browser channel.");
|
|
331
|
-
}
|
|
332
|
-
function getChromiumAppName(channel) {
|
|
333
|
-
const normalizedChannel = channel ?? "chrome";
|
|
334
|
-
if (process.platform !== "darwin") {
|
|
335
|
-
return undefined;
|
|
336
|
-
}
|
|
337
|
-
const appNames = {
|
|
338
|
-
chrome: "Google Chrome",
|
|
339
|
-
"chrome-beta": "Google Chrome Beta",
|
|
340
|
-
"chrome-dev": "Google Chrome Dev",
|
|
341
|
-
"chrome-canary": "Google Chrome Canary",
|
|
342
|
-
msedge: "Microsoft Edge",
|
|
343
|
-
"msedge-beta": "Microsoft Edge Beta",
|
|
344
|
-
"msedge-dev": "Microsoft Edge Dev",
|
|
345
|
-
"msedge-canary": "Microsoft Edge Canary",
|
|
346
|
-
};
|
|
347
|
-
return appNames[normalizedChannel];
|
|
348
|
-
}
|
|
349
|
-
function buildBootstrapArgs(options) {
|
|
350
|
-
return [
|
|
351
|
-
`--user-data-dir=${options.userDataDir}`,
|
|
352
|
-
"--disable-extensions",
|
|
353
|
-
"--no-first-run",
|
|
354
|
-
"--no-default-browser-check",
|
|
355
|
-
"--new-window",
|
|
356
|
-
options.targetUrl,
|
|
357
|
-
];
|
|
358
|
-
}
|
|
359
|
-
async function reservePort() {
|
|
360
|
-
return await new Promise((resolve, reject) => {
|
|
361
|
-
const server = createServer();
|
|
362
|
-
server.once("error", reject);
|
|
363
|
-
server.listen(0, "127.0.0.1", () => {
|
|
364
|
-
const address = server.address();
|
|
365
|
-
if (!address || typeof address === "string") {
|
|
366
|
-
server.close(() => {
|
|
367
|
-
reject(new Error("PORT_RESERVATION_FAILED: unable to allocate a debugging port"));
|
|
368
|
-
});
|
|
369
|
-
return;
|
|
370
|
-
}
|
|
371
|
-
const { port } = address;
|
|
372
|
-
server.close((error) => {
|
|
373
|
-
if (error) {
|
|
374
|
-
reject(error);
|
|
375
|
-
return;
|
|
376
|
-
}
|
|
377
|
-
resolve(port);
|
|
378
|
-
});
|
|
379
|
-
});
|
|
380
|
-
});
|
|
381
|
-
}
|
|
382
|
-
async function waitForCdp(browserUrl, timeoutMs = CDP_READY_TIMEOUT_MS) {
|
|
383
|
-
const deadline = Date.now() + timeoutMs;
|
|
384
|
-
const versionEndpoint = `${browserUrl}/json/version`;
|
|
385
|
-
while (Date.now() < deadline) {
|
|
386
|
-
try {
|
|
387
|
-
const response = await fetch(versionEndpoint);
|
|
388
|
-
if (response.ok) {
|
|
389
|
-
return;
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
catch {
|
|
393
|
-
// Retry until timeout while the browser starts.
|
|
394
|
-
}
|
|
395
|
-
await new Promise((resolve) => setTimeout(resolve, CDP_READY_POLL_INTERVAL_MS));
|
|
396
|
-
}
|
|
397
|
-
throw new Error(`BROWSER_ATTACH_TIMEOUT: timed out waiting for remote debugging at ${browserUrl}`);
|
|
398
|
-
}
|
|
399
|
-
async function listBrowserProcesses() {
|
|
400
|
-
if (process.platform === "win32") {
|
|
401
|
-
return [];
|
|
402
|
-
}
|
|
403
|
-
return await new Promise((resolve) => {
|
|
404
|
-
let stdout = "";
|
|
405
|
-
const child = spawn("ps", ["-ax", "-o", "pid=,command="], {
|
|
406
|
-
stdio: ["ignore", "pipe", "ignore"],
|
|
407
|
-
});
|
|
408
|
-
child.stdout?.setEncoding("utf8");
|
|
409
|
-
child.stdout?.on("data", (chunk) => {
|
|
410
|
-
stdout += chunk;
|
|
411
|
-
});
|
|
412
|
-
child.once("error", () => resolve([]));
|
|
413
|
-
child.once("close", () => {
|
|
414
|
-
const entries = stdout
|
|
415
|
-
.split("\n")
|
|
416
|
-
.map((line) => line.trim())
|
|
417
|
-
.filter(Boolean)
|
|
418
|
-
.map((line) => {
|
|
419
|
-
const match = line.match(/^(\d+)\s+(.*)$/);
|
|
420
|
-
if (!match) {
|
|
421
|
-
return undefined;
|
|
422
|
-
}
|
|
423
|
-
return {
|
|
424
|
-
pid: Number.parseInt(match[1] ?? "", 10),
|
|
425
|
-
command: match[2] ?? "",
|
|
426
|
-
};
|
|
427
|
-
})
|
|
428
|
-
.filter((entry) => entry !== undefined && Number.isInteger(entry.pid));
|
|
429
|
-
resolve(entries);
|
|
430
|
-
});
|
|
431
|
-
});
|
|
432
|
-
}
|
|
433
|
-
function isRootBrowserProcessForProfile(command, userDataDir) {
|
|
434
|
-
return command.includes(`--user-data-dir=${userDataDir}`) && !command.includes("--type=");
|
|
435
|
-
}
|
|
436
|
-
function spawnDetachedBrowser(executable, args) {
|
|
437
|
-
const child = spawn(executable, args, {
|
|
438
|
-
detached: true,
|
|
439
|
-
stdio: "ignore",
|
|
440
|
-
});
|
|
441
|
-
child.unref();
|
|
442
|
-
return child.pid ?? undefined;
|
|
443
|
-
}
|
|
444
|
-
function sendProcessSignal(pid, signal) {
|
|
445
|
-
if (process.platform === "win32") {
|
|
446
|
-
void signal;
|
|
447
|
-
return;
|
|
448
|
-
}
|
|
449
|
-
try {
|
|
450
|
-
process.kill(-pid, signal);
|
|
451
|
-
return;
|
|
452
|
-
}
|
|
453
|
-
catch {
|
|
454
|
-
try {
|
|
455
|
-
process.kill(pid, signal);
|
|
456
|
-
}
|
|
457
|
-
catch {
|
|
458
|
-
// Ignore missing/stale processes during cleanup.
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
async function waitForProcessExitInternal(pid, timeoutMs) {
|
|
463
|
-
const deadline = Date.now() + timeoutMs;
|
|
464
|
-
while (Date.now() < deadline) {
|
|
465
|
-
if (!(await isProcessRunning(pid))) {
|
|
466
|
-
return true;
|
|
467
|
-
}
|
|
468
|
-
await new Promise((resolve) => setTimeout(resolve, PROCESS_EXIT_POLL_INTERVAL_MS));
|
|
469
|
-
}
|
|
470
|
-
return !(await isProcessRunning(pid));
|
|
471
|
-
}
|
|
472
|
-
async function waitForBrowserProcessForProfile(userDataDir, timeoutMs) {
|
|
473
|
-
const deadline = Date.now() + timeoutMs;
|
|
474
|
-
while (Date.now() < deadline) {
|
|
475
|
-
const entries = await listBrowserProcesses();
|
|
476
|
-
const match = entries
|
|
477
|
-
.filter((entry) => isRootBrowserProcessForProfile(entry.command, userDataDir))
|
|
478
|
-
.sort((left, right) => right.pid - left.pid)[0];
|
|
479
|
-
if (match) {
|
|
480
|
-
return match.pid;
|
|
481
|
-
}
|
|
482
|
-
await new Promise((resolve) => setTimeout(resolve, CDP_READY_POLL_INTERVAL_MS));
|
|
483
|
-
}
|
|
484
|
-
return undefined;
|
|
485
|
-
}
|
|
486
|
-
export async function launchBootstrapBrowser(options) {
|
|
487
|
-
const executable = await resolveChromiumExecutable(options.browserChannel);
|
|
488
|
-
const pid = spawnDetachedBrowser(executable, buildBootstrapArgs(options));
|
|
489
|
-
const trackedPid = (await waitForBrowserProcessForProfile(options.userDataDir, CDP_READY_TIMEOUT_MS)) ?? pid;
|
|
490
|
-
return { ...(trackedPid !== undefined ? { pid: trackedPid } : {}) };
|
|
491
|
-
}
|
|
492
|
-
export async function launchManagedAttachBrowser(options) {
|
|
493
|
-
const executable = await resolveChromiumExecutable(options.browserChannel);
|
|
494
|
-
const port = await reservePort();
|
|
495
|
-
const browserUrl = `http://127.0.0.1:${port}`;
|
|
496
|
-
const pid = spawnDetachedBrowser(executable, [
|
|
497
|
-
`--user-data-dir=${options.userDataDir}`,
|
|
498
|
-
"--disable-extensions",
|
|
499
|
-
"--no-first-run",
|
|
500
|
-
"--no-default-browser-check",
|
|
501
|
-
`--remote-debugging-port=${port}`,
|
|
502
|
-
...(options.presentationMode === "headless" ? ["--headless=new"] : []),
|
|
503
|
-
"--new-window",
|
|
504
|
-
options.targetUrl,
|
|
505
|
-
]);
|
|
506
|
-
await waitForCdp(browserUrl);
|
|
507
|
-
const trackedPid = (await waitForBrowserProcessForProfile(options.userDataDir, CDP_READY_TIMEOUT_MS)) ?? pid;
|
|
508
|
-
return {
|
|
509
|
-
browserUrl,
|
|
510
|
-
...(trackedPid !== undefined ? { pid: trackedPid } : {}),
|
|
511
|
-
};
|
|
512
|
-
}
|
|
513
|
-
export async function isProcessRunning(pid) {
|
|
514
|
-
if (!pid) {
|
|
515
|
-
return false;
|
|
516
|
-
}
|
|
517
|
-
try {
|
|
518
|
-
process.kill(pid, 0);
|
|
519
|
-
return true;
|
|
520
|
-
}
|
|
521
|
-
catch {
|
|
522
|
-
return false;
|
|
523
|
-
}
|
|
524
|
-
}
|
|
525
|
-
export async function stopBrowserProcess(pid) {
|
|
526
|
-
if (!(await isProcessRunning(pid))) {
|
|
527
|
-
return;
|
|
528
|
-
}
|
|
529
|
-
if (process.platform === "win32") {
|
|
530
|
-
await new Promise((resolve) => {
|
|
531
|
-
const child = spawn("taskkill", ["/PID", String(pid), "/T", "/F"], {
|
|
532
|
-
stdio: "ignore",
|
|
533
|
-
});
|
|
534
|
-
child.once("exit", () => resolve());
|
|
535
|
-
child.once("error", () => resolve());
|
|
536
|
-
});
|
|
537
|
-
return;
|
|
538
|
-
}
|
|
539
|
-
sendProcessSignal(pid, "SIGTERM");
|
|
540
|
-
}
|
|
541
|
-
export async function waitForProcessExit(pid, timeoutMs = PROCESS_EXIT_TIMEOUT_MS) {
|
|
542
|
-
if (!pid) {
|
|
543
|
-
return true;
|
|
544
|
-
}
|
|
545
|
-
if (await waitForProcessExitInternal(pid, timeoutMs)) {
|
|
546
|
-
return true;
|
|
547
|
-
}
|
|
548
|
-
if (process.platform !== "win32" && (await isProcessRunning(pid))) {
|
|
549
|
-
sendProcessSignal(pid, "SIGKILL");
|
|
550
|
-
return await waitForProcessExitInternal(pid, PROCESS_EXIT_TIMEOUT_MS);
|
|
551
|
-
}
|
|
552
|
-
return false;
|
|
553
|
-
}
|
|
554
|
-
export async function focusBrowserWindow(browserChannel) {
|
|
555
|
-
const appName = getChromiumAppName(browserChannel);
|
|
556
|
-
if (!appName) {
|
|
557
|
-
return false;
|
|
558
|
-
}
|
|
559
|
-
return await new Promise((resolve) => {
|
|
560
|
-
const child = spawn("open", ["-a", appName], {
|
|
561
|
-
stdio: "ignore",
|
|
562
|
-
});
|
|
563
|
-
child.once("exit", (code) => resolve(code === 0));
|
|
564
|
-
child.once("error", () => resolve(false));
|
|
565
|
-
});
|
|
566
|
-
}
|
|
567
|
-
export async function findBrowserProcessForProfile(userDataDir) {
|
|
568
|
-
const entries = await listBrowserProcesses();
|
|
569
|
-
return entries
|
|
570
|
-
.filter((entry) => isRootBrowserProcessForProfile(entry.command, userDataDir))
|
|
571
|
-
.sort((left, right) => right.pid - left.pid)[0]?.pid;
|
|
572
|
-
}
|
|
573
|
-
export async function stopManagedBrowser(metadata) {
|
|
574
|
-
if (metadata.ownership !== "managed") {
|
|
575
|
-
return;
|
|
576
|
-
}
|
|
577
|
-
const browserPid = metadata.browserPid ?? (await findBrowserProcessForProfile(metadata.profilePath));
|
|
578
|
-
if (!(await isProcessRunning(browserPid))) {
|
|
579
|
-
return;
|
|
580
|
-
}
|
|
581
|
-
await stopBrowserProcess(browserPid);
|
|
582
|
-
await waitForProcessExit(browserPid);
|
|
583
|
-
}
|
|
584
|
-
export function assertAuthSensitiveBrowserSupport(browser, userDataDir) {
|
|
585
|
-
const browserEngine = browser ?? "chromium";
|
|
586
|
-
if (browserEngine !== "chromium") {
|
|
587
|
-
throw new Error(`CONFIG_ERROR: auth-sensitive bootstrap/attach sessions require --browser chromium (received ${browserEngine})`);
|
|
588
|
-
}
|
|
589
|
-
if (!userDataDir) {
|
|
590
|
-
throw new Error("CONFIG_ERROR: auth-sensitive bootstrap/attach sessions require --user-data-dir");
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
export function describeSessionStateFromAuth(authState) {
|
|
594
|
-
if (authState === "authenticated") {
|
|
595
|
-
return "authenticated";
|
|
596
|
-
}
|
|
597
|
-
if (authState === "challenge_required") {
|
|
598
|
-
return "challenge_required";
|
|
599
|
-
}
|
|
600
|
-
if (authState === "auth_required") {
|
|
601
|
-
return "auth_required";
|
|
602
|
-
}
|
|
603
|
-
return "profile_present_unverified";
|
|
604
|
-
}
|
|
5
|
+
export * from "@webmcp-bridge/agent-browser-core";
|
|
605
6
|
//# sourceMappingURL=session.js.map
|
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,mCAAmC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webmcp-bridge/local-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Local stdio MCP server that bridges local agents to browser WebMCP through Playwright.",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -44,12 +44,13 @@
|
|
|
44
44
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
45
45
|
"playwright": "^1.58.2",
|
|
46
46
|
"zod": "^4.3.6",
|
|
47
|
-
"@webmcp-bridge/
|
|
48
|
-
"@webmcp-bridge/adapter-
|
|
49
|
-
"@webmcp-bridge/adapter-
|
|
50
|
-
"@webmcp-bridge/adapter-
|
|
51
|
-
"@webmcp-bridge/
|
|
52
|
-
"@webmcp-bridge/
|
|
47
|
+
"@webmcp-bridge/agent-browser-core": "0.7.0",
|
|
48
|
+
"@webmcp-bridge/adapter-fixture": "0.7.0",
|
|
49
|
+
"@webmcp-bridge/adapter-google": "0.7.0",
|
|
50
|
+
"@webmcp-bridge/adapter-weibo": "0.7.0",
|
|
51
|
+
"@webmcp-bridge/adapter-x": "0.7.0",
|
|
52
|
+
"@webmcp-bridge/core": "0.7.0",
|
|
53
|
+
"@webmcp-bridge/playwright": "0.7.0"
|
|
53
54
|
},
|
|
54
55
|
"license": "MIT",
|
|
55
56
|
"scripts": {
|