@webmcp-bridge/local-mcp 0.5.4 → 0.8.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.
@@ -0,0 +1,580 @@
1
+ /**
2
+ * This module persists profile-scoped overlay tool definitions, resolves override ownership, and exports draft adapters.
3
+ * It depends on filesystem APIs plus page-context evaluation so local-mcp can evolve draft tools without widening the shared gateway contract.
4
+ */
5
+ import { mkdir, readdir, readFile, rm, writeFile } from "node:fs/promises";
6
+ import { dirname, join } from "node:path";
7
+ const OVERLAY_DIR = ".webmcp-bridge/overlays";
8
+ const OVERLAY_EXPORT_DIR = ".webmcp-bridge/exports";
9
+ const OVERLAY_FILE_SUFFIX = ".json";
10
+ const OVERLAY_ID_PATTERN = /^[a-z0-9][a-z0-9_-]*$/;
11
+ const TOOL_NAME_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/;
12
+ const OVERLAY_EXPORT_PACKAGE_VERSION = "^0.7.0";
13
+ function isRecord(value) {
14
+ return typeof value === "object" && value !== null && !Array.isArray(value);
15
+ }
16
+ function cloneJsonValue(value) {
17
+ return JSON.parse(JSON.stringify(value));
18
+ }
19
+ function timestamp() {
20
+ return new Date().toISOString();
21
+ }
22
+ function overlayDirectory(profilePath) {
23
+ return join(profilePath, OVERLAY_DIR);
24
+ }
25
+ function overlayFilePath(profilePath, overlayId) {
26
+ return join(overlayDirectory(profilePath), `${overlayId}${OVERLAY_FILE_SUFFIX}`);
27
+ }
28
+ function overlayExportDirectory(profilePath, overlayId) {
29
+ return join(profilePath, OVERLAY_EXPORT_DIR, overlayId);
30
+ }
31
+ function assertOverlayId(id) {
32
+ if (!OVERLAY_ID_PATTERN.test(id)) {
33
+ throw new Error("INVALID_ARGUMENT: overlay id must match ^[a-z0-9][a-z0-9_-]*$ so it can be stored and exposed as overlay.<id>.*");
34
+ }
35
+ }
36
+ function assertToolName(name) {
37
+ if (!TOOL_NAME_PATTERN.test(name) || name.startsWith("bridge.") || name.startsWith("overlay.")) {
38
+ throw new Error("INVALID_ARGUMENT: overlay tool name must be a non-empty MCP-style name and must not start with bridge. or overlay.");
39
+ }
40
+ }
41
+ function normalizeActivation(value) {
42
+ if (value === undefined) {
43
+ return "namespaced";
44
+ }
45
+ if (value === "namespaced" || value === "override") {
46
+ return value;
47
+ }
48
+ throw new Error("OVERLAY_CONTRACT_ERROR: overlay activation must be namespaced or override");
49
+ }
50
+ function normalizeToolRecord(tool) {
51
+ if (!isRecord(tool)) {
52
+ throw new Error("OVERLAY_CONTRACT_ERROR: overlay tool entries must be objects");
53
+ }
54
+ if (typeof tool.name !== "string") {
55
+ throw new Error("OVERLAY_CONTRACT_ERROR: overlay tool name must be a string");
56
+ }
57
+ if (typeof tool.script !== "string") {
58
+ throw new Error(`OVERLAY_CONTRACT_ERROR: overlay tool ${tool.name} script must be a string`);
59
+ }
60
+ const name = tool.name.trim();
61
+ assertToolName(name);
62
+ const script = tool.script.trim();
63
+ if (!script) {
64
+ throw new Error(`INVALID_ARGUMENT: overlay tool ${name} requires a non-empty script`);
65
+ }
66
+ const output = {
67
+ name,
68
+ script,
69
+ };
70
+ if (typeof tool.description === "string" && tool.description.trim()) {
71
+ output.description = tool.description.trim();
72
+ }
73
+ if (tool.inputSchema !== undefined) {
74
+ output.inputSchema = cloneJsonValue(tool.inputSchema);
75
+ }
76
+ if (tool.annotations !== undefined) {
77
+ if (!isRecord(tool.annotations)) {
78
+ throw new Error(`OVERLAY_CONTRACT_ERROR: overlay tool ${name} annotations must be an object`);
79
+ }
80
+ const readOnlyHint = tool.annotations.readOnlyHint;
81
+ if (readOnlyHint !== undefined && typeof readOnlyHint !== "boolean") {
82
+ throw new Error(`OVERLAY_CONTRACT_ERROR: overlay tool ${name} annotations.readOnlyHint must be a boolean`);
83
+ }
84
+ output.annotations = {
85
+ ...(readOnlyHint !== undefined ? { readOnlyHint } : {}),
86
+ };
87
+ }
88
+ return output;
89
+ }
90
+ function normalizeOverlayRecord(value, siteId) {
91
+ if (!isRecord(value)) {
92
+ throw new Error("OVERLAY_CONTRACT_ERROR: overlay file must be a JSON object");
93
+ }
94
+ if (typeof value.id !== "string") {
95
+ throw new Error("OVERLAY_CONTRACT_ERROR: overlay id must be a string");
96
+ }
97
+ assertOverlayId(value.id);
98
+ const rawSiteId = typeof value.siteId === "string" ? value.siteId.trim() : "";
99
+ if (!rawSiteId) {
100
+ throw new Error("OVERLAY_CONTRACT_ERROR: overlay siteId must be a non-empty string");
101
+ }
102
+ if (rawSiteId !== siteId) {
103
+ throw new Error(`OVERLAY_SITE_MISMATCH: overlay ${value.id} targets ${rawSiteId}, expected ${siteId}`);
104
+ }
105
+ if (!Array.isArray(value.tools)) {
106
+ throw new Error(`OVERLAY_CONTRACT_ERROR: overlay ${value.id} must define a tools array`);
107
+ }
108
+ const normalizedTools = value.tools.map((tool) => normalizeToolRecord(tool));
109
+ const createdAt = typeof value.createdAt === "string" && value.createdAt.trim() ? value.createdAt : timestamp();
110
+ const updatedAt = typeof value.updatedAt === "string" && value.updatedAt.trim() ? value.updatedAt : createdAt;
111
+ const output = {
112
+ id: value.id,
113
+ siteId: rawSiteId,
114
+ enabled: typeof value.enabled === "boolean" ? value.enabled : true,
115
+ activation: normalizeActivation(value.activation),
116
+ tools: normalizedTools,
117
+ createdAt,
118
+ updatedAt,
119
+ };
120
+ if (typeof value.description === "string" && value.description.trim()) {
121
+ output.description = value.description.trim();
122
+ }
123
+ return output;
124
+ }
125
+ async function ensureOverlayDirectory(profilePath) {
126
+ const dirPath = overlayDirectory(profilePath);
127
+ await mkdir(dirPath, { recursive: true });
128
+ return dirPath;
129
+ }
130
+ async function persistOverlay(profilePath, overlay) {
131
+ await ensureOverlayDirectory(profilePath);
132
+ const filePath = overlayFilePath(profilePath, overlay.id);
133
+ await writeFile(filePath, `${JSON.stringify(overlay, null, 2)}\n`, "utf8");
134
+ }
135
+ async function executePageFunction(page, script, args) {
136
+ const evaluatePage = page;
137
+ const serialized = await evaluatePage.evaluate(async ({ scriptSource, scriptArgs }) => {
138
+ const evaluator = globalThis.eval;
139
+ const candidate = evaluator(`(${scriptSource})`);
140
+ if (typeof candidate !== "function") {
141
+ throw new Error("script must evaluate to a function");
142
+ }
143
+ const value = await candidate(scriptArgs);
144
+ const json = JSON.stringify(value);
145
+ if (json === undefined) {
146
+ throw new Error("script result must be JSON-serializable");
147
+ }
148
+ return json;
149
+ }, {
150
+ scriptSource: script,
151
+ scriptArgs: args,
152
+ });
153
+ return JSON.parse(serialized);
154
+ }
155
+ export async function evaluateDebugScript(page, script, args) {
156
+ const normalizedScript = script.trim();
157
+ if (!normalizedScript) {
158
+ throw new Error("INVALID_ARGUMENT: script must be a non-empty string");
159
+ }
160
+ try {
161
+ return await executePageFunction(page, normalizedScript, args);
162
+ }
163
+ catch (error) {
164
+ const message = error instanceof Error ? error.message : String(error);
165
+ throw new Error(`DEBUG_EVAL_FAILED: ${message}`);
166
+ }
167
+ }
168
+ export async function evaluateOverlayTool(page, overlay, tool, input) {
169
+ try {
170
+ return await executePageFunction(page, tool.script, input);
171
+ }
172
+ catch (error) {
173
+ const message = error instanceof Error ? error.message : String(error);
174
+ throw new Error(`OVERLAY_TOOL_FAILED: overlay ${overlay.id} tool ${tool.name} failed: ${message}`);
175
+ }
176
+ }
177
+ function toAliasToolDefinitions(overlays) {
178
+ return overlays.flatMap((overlay) => overlay.enabled
179
+ ? overlay.tools.map((tool) => ({
180
+ name: `overlay.${overlay.id}.${tool.name}`,
181
+ ...(tool.description !== undefined ? { description: tool.description } : {}),
182
+ ...(tool.inputSchema !== undefined ? { inputSchema: tool.inputSchema } : { inputSchema: { type: "object" } }),
183
+ ...(tool.annotations !== undefined ? { annotations: tool.annotations } : {}),
184
+ }))
185
+ : []);
186
+ }
187
+ function overlayAliasPrefix(overlayId) {
188
+ return `overlay.${overlayId}`;
189
+ }
190
+ function toCanonicalToolDefinition(tool) {
191
+ return {
192
+ name: tool.name,
193
+ ...(tool.description !== undefined ? { description: tool.description } : {}),
194
+ ...(tool.inputSchema !== undefined ? { inputSchema: tool.inputSchema } : { inputSchema: { type: "object" } }),
195
+ ...(tool.annotations !== undefined ? { annotations: tool.annotations } : {}),
196
+ };
197
+ }
198
+ function toExportSafeIdentifier(value) {
199
+ return value.replace(/[^a-zA-Z0-9]+/g, "_").replace(/^_+|_+$/g, "") || "draft";
200
+ }
201
+ function toPackageName(siteId, overlayId) {
202
+ return `webmcp-overlay-${toExportSafeIdentifier(siteId).toLowerCase()}-${toExportSafeIdentifier(overlayId).toLowerCase()}-draft`;
203
+ }
204
+ function toDisplayName(siteDisplayName, overlayId) {
205
+ return `${siteDisplayName} ${overlayId} Draft`;
206
+ }
207
+ function buildAdapterDraftSource(overlay, targetUrl, siteDisplayName, hostPatterns) {
208
+ const toolDefinitions = overlay.tools.map((tool) => ({
209
+ name: tool.name,
210
+ ...(tool.description !== undefined ? { description: tool.description } : {}),
211
+ ...(tool.inputSchema !== undefined ? { inputSchema: tool.inputSchema } : { inputSchema: { type: "object" } }),
212
+ ...(tool.annotations !== undefined ? { annotations: tool.annotations } : {}),
213
+ }));
214
+ const toolScripts = Object.fromEntries(overlay.tools.map((tool) => [tool.name, tool.script]));
215
+ const toolNames = overlay.tools.map((tool) => tool.name);
216
+ return `/**
217
+ * This module provides an exported adapter draft generated from a persisted local-mcp overlay.
218
+ * It depends on the playwright adapter contract so the draft can be reviewed locally and promoted into a formal adapter package.
219
+ */
220
+
221
+ import type { JsonValue } from "@webmcp-bridge/core";
222
+ import type { AdapterManifest, SiteAdapter, WebMcpToolDefinition } from "@webmcp-bridge/playwright";
223
+
224
+ const TOOL_DEFINITIONS: WebMcpToolDefinition[] = ${JSON.stringify(toolDefinitions, null, 2)} as WebMcpToolDefinition[];
225
+ const TOOL_SCRIPTS: Record<string, string> = ${JSON.stringify(toolScripts, null, 2)};
226
+
227
+ function errorResult(code: string, message: string): JsonValue {
228
+ return {
229
+ error: {
230
+ code,
231
+ message,
232
+ },
233
+ };
234
+ }
235
+
236
+ async function executePageFunction(
237
+ page: { evaluate: (fn: (payload: { scriptSource: string; scriptArgs: JsonValue }) => Promise<string>, payload: { scriptSource: string; scriptArgs: JsonValue }) => Promise<string> },
238
+ scriptSource: string,
239
+ scriptArgs: JsonValue,
240
+ ): Promise<JsonValue> {
241
+ const serialized = await page.evaluate(
242
+ async ({ scriptSource, scriptArgs }) => {
243
+ const evaluator = globalThis.eval as (source: string) => unknown;
244
+ const candidate = evaluator(\`(\${scriptSource})\`);
245
+ if (typeof candidate !== "function") {
246
+ throw new Error("script must evaluate to a function");
247
+ }
248
+ const value = await candidate(scriptArgs);
249
+ const json = JSON.stringify(value);
250
+ if (json === undefined) {
251
+ throw new Error("script result must be JSON-serializable");
252
+ }
253
+ return json;
254
+ },
255
+ { scriptSource, scriptArgs },
256
+ );
257
+ return JSON.parse(serialized) as JsonValue;
258
+ }
259
+
260
+ export const manifest: AdapterManifest = {
261
+ id: ${JSON.stringify(overlay.siteId)},
262
+ displayName: ${JSON.stringify(toDisplayName(siteDisplayName, overlay.id))},
263
+ version: "0.1.0",
264
+ bridgeApiVersion: "1.0.0",
265
+ defaultUrl: ${JSON.stringify(targetUrl)},
266
+ hostPatterns: ${JSON.stringify(hostPatterns)},
267
+ };
268
+
269
+ export function createAdapter(): SiteAdapter {
270
+ return {
271
+ name: ${JSON.stringify(`overlay-${overlay.id}-draft`)},
272
+ listTools: async () => TOOL_DEFINITIONS,
273
+ callTool: async ({ name, input }, context) => {
274
+ if (!${JSON.stringify(toolNames)}.includes(name)) {
275
+ return errorResult("TOOL_NOT_FOUND", \`unknown tool: \${name}\`);
276
+ }
277
+ const script = TOOL_SCRIPTS[name];
278
+ try {
279
+ return await executePageFunction(context.page, script, input);
280
+ } catch (error) {
281
+ const message = error instanceof Error ? error.message : String(error);
282
+ return errorResult("OVERLAY_DRAFT_TOOL_FAILED", \`overlay draft tool \${name} failed: \${message}\`);
283
+ }
284
+ },
285
+ };
286
+ }
287
+ `;
288
+ }
289
+ function buildAdapterDraftReadme(overlay, outputDir) {
290
+ return `# ${overlay.id} adapter draft
291
+
292
+ This directory was generated from the persisted overlay \`${overlay.id}\`.
293
+
294
+ ## What it contains
295
+
296
+ - \`src/index.ts\`: adapter draft source
297
+ - \`package.json\`: minimal package metadata
298
+ - \`tsconfig.json\`: local build config
299
+
300
+ ## Notes
301
+
302
+ - This is a local draft artifact, not a published adapter package.
303
+ - The source keeps the current overlay tool schemas and page-context scripts.
304
+ - Review and refine the generated draft before promoting it into a formal adapter.
305
+
306
+ Generated output directory: \`${outputDir}\`
307
+ `;
308
+ }
309
+ export class OverlayStore {
310
+ siteId;
311
+ profilePath;
312
+ overlays = new Map();
313
+ constructor(siteId, profilePath) {
314
+ this.siteId = siteId;
315
+ this.profilePath = profilePath;
316
+ }
317
+ validateOverrideConflicts(overlays) {
318
+ const owners = new Map();
319
+ for (const overlay of overlays) {
320
+ if (!overlay.enabled || overlay.activation !== "override") {
321
+ continue;
322
+ }
323
+ for (const tool of overlay.tools) {
324
+ const owner = owners.get(tool.name);
325
+ if (owner && owner !== overlay.id) {
326
+ throw new Error(`OVERLAY_OVERRIDE_CONFLICT: tool ${tool.name} is already overridden by overlay ${owner}`);
327
+ }
328
+ owners.set(tool.name, overlay.id);
329
+ }
330
+ }
331
+ }
332
+ snapshot(overrides) {
333
+ return Array.from((overrides ?? this.overlays).values()).sort((a, b) => a.id.localeCompare(b.id));
334
+ }
335
+ commit(overlays) {
336
+ this.validateOverrideConflicts(this.snapshot(overlays));
337
+ this.overlays = overlays;
338
+ }
339
+ summarizeOverlays(baseToolNames) {
340
+ const baseToolSet = new Set(baseToolNames);
341
+ return this.snapshot().map((overlay) => ({
342
+ ...cloneJsonValue(overlay),
343
+ aliasPrefix: overlayAliasPrefix(overlay.id),
344
+ toolNames: overlay.tools.map((tool) => tool.name),
345
+ shadowedTools: overlay.enabled && overlay.activation === "override"
346
+ ? overlay.tools.map((tool) => tool.name).filter((name) => baseToolSet.has(name))
347
+ : [],
348
+ }));
349
+ }
350
+ async load() {
351
+ const nextOverlays = new Map();
352
+ if (!this.profilePath) {
353
+ this.commit(nextOverlays);
354
+ return;
355
+ }
356
+ const dirPath = overlayDirectory(this.profilePath);
357
+ let entries;
358
+ try {
359
+ entries = await readdir(dirPath);
360
+ }
361
+ catch (error) {
362
+ const message = error instanceof Error ? error.message : String(error);
363
+ if (message.includes("ENOENT")) {
364
+ this.commit(nextOverlays);
365
+ return;
366
+ }
367
+ throw error;
368
+ }
369
+ const fileNames = entries.filter((entry) => entry.endsWith(OVERLAY_FILE_SUFFIX)).sort();
370
+ for (const entry of fileNames) {
371
+ const raw = await readFile(join(dirPath, entry), "utf8");
372
+ const overlay = normalizeOverlayRecord(JSON.parse(raw), this.siteId);
373
+ nextOverlays.set(overlay.id, overlay);
374
+ }
375
+ this.commit(nextOverlays);
376
+ }
377
+ list(baseToolNames = []) {
378
+ const overlays = this.summarizeOverlays(baseToolNames);
379
+ if (!this.profilePath) {
380
+ return {
381
+ overlays,
382
+ persistence: {
383
+ available: false,
384
+ reason: "managed_profile_required",
385
+ },
386
+ };
387
+ }
388
+ return {
389
+ overlays,
390
+ persistence: {
391
+ available: true,
392
+ profilePath: this.profilePath,
393
+ },
394
+ };
395
+ }
396
+ listEnabledAliasToolDefinitions() {
397
+ return toAliasToolDefinitions(this.snapshot());
398
+ }
399
+ applyOverrideToolDefinitions(baseTools) {
400
+ const tools = new Map(baseTools.map((tool) => [tool.name, tool]));
401
+ for (const overlay of this.snapshot()) {
402
+ if (!overlay.enabled || overlay.activation !== "override") {
403
+ continue;
404
+ }
405
+ for (const tool of overlay.tools) {
406
+ tools.set(tool.name, toCanonicalToolDefinition(tool));
407
+ }
408
+ }
409
+ return Array.from(tools.values());
410
+ }
411
+ getOverlayTool(name) {
412
+ if (!name.startsWith("overlay.")) {
413
+ return undefined;
414
+ }
415
+ const remainder = name.slice("overlay.".length);
416
+ const separatorIndex = remainder.indexOf(".");
417
+ if (separatorIndex <= 0) {
418
+ return undefined;
419
+ }
420
+ const overlayId = remainder.slice(0, separatorIndex);
421
+ const toolName = remainder.slice(separatorIndex + 1);
422
+ const overlay = this.overlays.get(overlayId);
423
+ if (!overlay || !overlay.enabled) {
424
+ return undefined;
425
+ }
426
+ const tool = overlay.tools.find((entry) => entry.name === toolName);
427
+ if (!tool) {
428
+ return undefined;
429
+ }
430
+ return { overlay, tool };
431
+ }
432
+ getOverrideTool(name) {
433
+ for (const overlay of this.snapshot()) {
434
+ if (!overlay.enabled || overlay.activation !== "override") {
435
+ continue;
436
+ }
437
+ const tool = overlay.tools.find((entry) => entry.name === name);
438
+ if (tool) {
439
+ return { overlay, tool };
440
+ }
441
+ }
442
+ return undefined;
443
+ }
444
+ assertPersistentStore() {
445
+ if (!this.profilePath) {
446
+ throw new Error("CONFIG_ERROR: overlays require a managed profile session");
447
+ }
448
+ return this.profilePath;
449
+ }
450
+ async install(options) {
451
+ const id = options.id.trim();
452
+ assertOverlayId(id);
453
+ if (this.overlays.has(id)) {
454
+ throw new Error(`OVERLAY_ALREADY_EXISTS: overlay ${id} already exists`);
455
+ }
456
+ if (!Array.isArray(options.tools) || options.tools.length === 0) {
457
+ throw new Error("INVALID_ARGUMENT: overlay tools must be a non-empty array");
458
+ }
459
+ const overlay = {
460
+ id,
461
+ siteId: this.siteId,
462
+ enabled: options.enabled ?? true,
463
+ activation: options.activation ?? "namespaced",
464
+ ...(options.description?.trim() ? { description: options.description.trim() } : {}),
465
+ tools: options.tools.map((tool) => normalizeToolRecord(tool)),
466
+ createdAt: timestamp(),
467
+ updatedAt: timestamp(),
468
+ };
469
+ const profilePath = this.assertPersistentStore();
470
+ const nextOverlays = new Map(this.overlays);
471
+ nextOverlays.set(overlay.id, overlay);
472
+ this.validateOverrideConflicts(this.snapshot(nextOverlays));
473
+ await persistOverlay(profilePath, overlay);
474
+ this.commit(nextOverlays);
475
+ return cloneJsonValue(overlay);
476
+ }
477
+ async update(options) {
478
+ const existing = this.overlays.get(options.id);
479
+ if (!existing) {
480
+ throw new Error(`OVERLAY_NOT_FOUND: overlay ${options.id} does not exist`);
481
+ }
482
+ const updated = {
483
+ ...existing,
484
+ ...(options.description !== undefined
485
+ ? options.description.trim()
486
+ ? { description: options.description.trim() }
487
+ : {}
488
+ : {}),
489
+ ...(options.enabled !== undefined ? { enabled: options.enabled } : {}),
490
+ ...(options.activation !== undefined ? { activation: options.activation } : {}),
491
+ ...(options.tools !== undefined ? { tools: options.tools.map((tool) => normalizeToolRecord(tool)) } : {}),
492
+ updatedAt: timestamp(),
493
+ };
494
+ if (options.description !== undefined && !options.description.trim()) {
495
+ delete updated.description;
496
+ }
497
+ const profilePath = this.assertPersistentStore();
498
+ const nextOverlays = new Map(this.overlays);
499
+ nextOverlays.set(updated.id, updated);
500
+ this.validateOverrideConflicts(this.snapshot(nextOverlays));
501
+ await persistOverlay(profilePath, updated);
502
+ this.commit(nextOverlays);
503
+ return cloneJsonValue(updated);
504
+ }
505
+ async enable(id) {
506
+ return await this.update({ id, enabled: true });
507
+ }
508
+ async disable(id) {
509
+ return await this.update({ id, enabled: false });
510
+ }
511
+ async delete(id) {
512
+ if (!this.overlays.has(id)) {
513
+ throw new Error(`OVERLAY_NOT_FOUND: overlay ${id} does not exist`);
514
+ }
515
+ const profilePath = this.assertPersistentStore();
516
+ await rm(overlayFilePath(profilePath, id), { force: true });
517
+ const nextOverlays = new Map(this.overlays);
518
+ nextOverlays.delete(id);
519
+ this.commit(nextOverlays);
520
+ }
521
+ async exportAdapterDraft(options) {
522
+ const profilePath = this.assertPersistentStore();
523
+ const overlay = this.overlays.get(options.id);
524
+ if (!overlay) {
525
+ throw new Error(`OVERLAY_NOT_FOUND: overlay ${options.id} does not exist`);
526
+ }
527
+ const outputDir = overlayExportDirectory(profilePath, overlay.id);
528
+ const srcDir = join(outputDir, "src");
529
+ await rm(outputDir, { recursive: true, force: true });
530
+ await mkdir(srcDir, { recursive: true });
531
+ const packageName = toPackageName(this.siteId, overlay.id);
532
+ const files = ["README.md", "package.json", "src/index.ts", "tsconfig.json"];
533
+ const entryFile = join(outputDir, "src", "index.ts");
534
+ await writeFile(entryFile, buildAdapterDraftSource(overlay, options.targetUrl, options.siteDisplayName, options.hostPatterns), "utf8");
535
+ await writeFile(join(outputDir, "package.json"), `${JSON.stringify({
536
+ name: packageName,
537
+ private: true,
538
+ version: "0.1.0",
539
+ type: "module",
540
+ scripts: {
541
+ build: "tsc -p tsconfig.json",
542
+ typecheck: "tsc --noEmit -p tsconfig.json",
543
+ },
544
+ dependencies: {
545
+ "@webmcp-bridge/core": OVERLAY_EXPORT_PACKAGE_VERSION,
546
+ "@webmcp-bridge/playwright": OVERLAY_EXPORT_PACKAGE_VERSION,
547
+ },
548
+ }, null, 2)}\n`, "utf8");
549
+ await writeFile(join(outputDir, "tsconfig.json"), `${JSON.stringify({
550
+ compilerOptions: {
551
+ outDir: "dist",
552
+ rootDir: "src",
553
+ module: "NodeNext",
554
+ moduleResolution: "NodeNext",
555
+ target: "ES2022",
556
+ strict: true,
557
+ declaration: true,
558
+ sourceMap: true,
559
+ },
560
+ include: ["src/**/*.ts"],
561
+ }, null, 2)}\n`, "utf8");
562
+ await writeFile(join(outputDir, "README.md"), buildAdapterDraftReadme(overlay, outputDir), "utf8");
563
+ return {
564
+ overlay: cloneJsonValue(overlay),
565
+ format: "adapter-draft",
566
+ outputDir,
567
+ entryFile,
568
+ files: files.map((file) => join(outputDir, file)),
569
+ };
570
+ }
571
+ }
572
+ export async function readOverlayFile(profilePath, overlayId, siteId) {
573
+ const raw = await readFile(overlayFilePath(profilePath, overlayId), "utf8");
574
+ return normalizeOverlayRecord(JSON.parse(raw), siteId);
575
+ }
576
+ export async function writeOverlayFile(profilePath, overlay) {
577
+ await mkdir(dirname(overlayFilePath(profilePath, overlay.id)), { recursive: true });
578
+ await persistOverlay(profilePath, normalizeOverlayRecord(overlay, overlay.siteId));
579
+ }
580
+ //# sourceMappingURL=overlays.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlays.js","sourceRoot":"","sources":["../src/overlays.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * This module resolves stable managed-profile paths for local-mcp sessions.
3
+ * It depends on site-definition metadata and target URLs so bridge startup can default to reusable profiles without CLI-only logic.
4
+ */
5
+ import type { SiteDefinition } from "./sites.js";
6
+ export declare const DEFAULT_PROFILE_ROOT: string;
7
+ export declare function resolveDefaultUserDataDir(siteDefinition: SiteDefinition, targetUrl: string): string;
8
+ //# sourceMappingURL=profiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,eAAO,MAAM,oBAAoB,QAA4C,CAAC;AAmB9E,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGnG"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * This module resolves stable managed-profile paths for local-mcp sessions.
3
+ * It depends on site-definition metadata and target URLs so bridge startup can default to reusable profiles without CLI-only logic.
4
+ */
5
+ import { homedir } from "node:os";
6
+ import { join } from "node:path";
7
+ export const DEFAULT_PROFILE_ROOT = join(homedir(), ".uxc", "webmcp-profile");
8
+ function slugify(value) {
9
+ const slug = value
10
+ .trim()
11
+ .toLowerCase()
12
+ .replace(/[^a-z0-9]+/g, "-")
13
+ .replace(/^-+|-+$/g, "");
14
+ return slug || "site";
15
+ }
16
+ function resolveNativeProfileSlug(targetUrl) {
17
+ if (targetUrl === "about:blank") {
18
+ return "about-blank";
19
+ }
20
+ const parsed = new URL(targetUrl);
21
+ return slugify(parsed.hostname || parsed.protocol.replace(/:$/, ""));
22
+ }
23
+ export function resolveDefaultUserDataDir(siteDefinition, targetUrl) {
24
+ const slug = siteDefinition.source === "native" ? resolveNativeProfileSlug(targetUrl) : slugify(siteDefinition.id);
25
+ return join(DEFAULT_PROFILE_ROOT, slug);
26
+ }
27
+ //# sourceMappingURL=profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAE9E,SAAS,OAAO,CAAC,KAAa;IAC5B,MAAM,IAAI,GAAG,KAAK;SACf,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC3B,OAAO,IAAI,IAAI,MAAM,CAAC;AACxB,CAAC;AAED,SAAS,wBAAwB,CAAC,SAAiB;IACjD,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;QAChC,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAClC,OAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,cAA8B,EAAE,SAAiB;IACzF,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACnH,OAAO,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC"}