browser-debug-mcp-bridge 1.9.0 → 1.11.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.
Files changed (56) hide show
  1. package/README.md +271 -188
  2. package/apps/mcp-server/dist/db/automation-repository.js +199 -0
  3. package/apps/mcp-server/dist/db/automation-repository.js.map +1 -0
  4. package/apps/mcp-server/dist/db/connection.js +1 -5
  5. package/apps/mcp-server/dist/db/connection.js.map +1 -1
  6. package/apps/mcp-server/dist/db/events-repository.js +79 -10
  7. package/apps/mcp-server/dist/db/events-repository.js.map +1 -1
  8. package/apps/mcp-server/dist/db/index.js +2 -0
  9. package/apps/mcp-server/dist/db/index.js.map +1 -1
  10. package/apps/mcp-server/dist/db/migrations.js +493 -0
  11. package/apps/mcp-server/dist/db/migrations.js.map +1 -1
  12. package/apps/mcp-server/dist/db/schema.js +192 -1
  13. package/apps/mcp-server/dist/db/schema.js.map +1 -1
  14. package/apps/mcp-server/dist/document-response-rewriter.js +196 -0
  15. package/apps/mcp-server/dist/document-response-rewriter.js.map +1 -0
  16. package/apps/mcp-server/dist/json-rewrite.js +189 -0
  17. package/apps/mcp-server/dist/json-rewrite.js.map +1 -0
  18. package/apps/mcp-server/dist/main.js +375 -4
  19. package/apps/mcp-server/dist/main.js.map +1 -1
  20. package/apps/mcp-server/dist/mcp/server.js +4168 -310
  21. package/apps/mcp-server/dist/mcp/server.js.map +1 -1
  22. package/apps/mcp-server/dist/mcp-bridge.js +46 -3
  23. package/apps/mcp-server/dist/mcp-bridge.js.map +1 -1
  24. package/apps/mcp-server/dist/next-asset-mapper.js +701 -0
  25. package/apps/mcp-server/dist/next-asset-mapper.js.map +1 -0
  26. package/apps/mcp-server/dist/next-source-override-planner.js +601 -0
  27. package/apps/mcp-server/dist/next-source-override-planner.js.map +1 -0
  28. package/apps/mcp-server/dist/override-audit-contract.js +51 -0
  29. package/apps/mcp-server/dist/override-audit-contract.js.map +1 -0
  30. package/apps/mcp-server/dist/override-audit.js +740 -0
  31. package/apps/mcp-server/dist/override-audit.js.map +1 -0
  32. package/apps/mcp-server/dist/override-capabilities.js +136 -0
  33. package/apps/mcp-server/dist/override-capabilities.js.map +1 -0
  34. package/apps/mcp-server/dist/override-observed-assets.js +179 -0
  35. package/apps/mcp-server/dist/override-observed-assets.js.map +1 -0
  36. package/apps/mcp-server/dist/override-poc.js +336 -0
  37. package/apps/mcp-server/dist/override-poc.js.map +1 -0
  38. package/apps/mcp-server/dist/override-profile-generator.js +403 -0
  39. package/apps/mcp-server/dist/override-profile-generator.js.map +1 -0
  40. package/apps/mcp-server/dist/override-response-planner.js +557 -0
  41. package/apps/mcp-server/dist/override-response-planner.js.map +1 -0
  42. package/apps/mcp-server/dist/override-rule-types.js +32 -0
  43. package/apps/mcp-server/dist/override-rule-types.js.map +1 -0
  44. package/apps/mcp-server/dist/retention.js +4 -3
  45. package/apps/mcp-server/dist/retention.js.map +1 -1
  46. package/apps/mcp-server/dist/rsc-flight-patch-safety.js +269 -0
  47. package/apps/mcp-server/dist/rsc-flight-patch-safety.js.map +1 -0
  48. package/apps/mcp-server/dist/runtime-paths.js +33 -0
  49. package/apps/mcp-server/dist/runtime-paths.js.map +1 -0
  50. package/apps/mcp-server/dist/websocket/messages.js +13 -0
  51. package/apps/mcp-server/dist/websocket/messages.js.map +1 -1
  52. package/apps/mcp-server/dist/websocket/websocket-server.js +10 -0
  53. package/apps/mcp-server/dist/websocket/websocket-server.js.map +1 -1
  54. package/apps/mcp-server/package.json +1 -0
  55. package/package.json +16 -1
  56. package/scripts/mcp-start.cjs +201 -11
@@ -1,8 +1,11 @@
1
1
  import { pathToFileURL } from 'url';
2
2
  import { createMCPServer } from './mcp/server.js';
3
+ import { initializeDatabase, getConnection } from './db/index.js';
3
4
  let stopServerFn = null;
4
5
  let getWebSocketManager = null;
5
6
  let isShuttingDown = false;
7
+ const ATTACH_EXISTING_BRIDGE = process.env.MCP_ATTACH_EXISTING_BRIDGE === '1';
8
+ const BRIDGE_HTTP_BASE_URL = process.env.MCP_ATTACH_HTTP_BASE_URL || 'http://127.0.0.1:8065';
6
9
  function ensureWebSocketManager() {
7
10
  if (!getWebSocketManager) {
8
11
  throw new Error('WebSocket manager resolver is not initialized yet.');
@@ -20,6 +23,17 @@ async function bootstrapMainRuntime() {
20
23
  stopServerFn = mainRuntime.stopServer;
21
24
  getWebSocketManager = () => mainRuntime.wsManager;
22
25
  }
26
+ async function ensureAttachableRuntime() {
27
+ initializeDatabase(getConnection().db);
28
+ }
29
+ async function fetchBridgeJson(pathname, init) {
30
+ const response = await fetch(`${BRIDGE_HTTP_BASE_URL}${pathname}`, init);
31
+ const payload = await response.json();
32
+ if (!response.ok || payload.ok === false) {
33
+ throw new Error(typeof payload.error === 'string' ? payload.error : `Bridge request failed: ${pathname}`);
34
+ }
35
+ return payload;
36
+ }
23
37
  function writeStderr(message) {
24
38
  process.stderr.write(`${message}\n`);
25
39
  }
@@ -48,15 +62,39 @@ function registerLifecycleGuards() {
48
62
  process.on('disconnect', () => shutdownFromHostDisconnect('parent-disconnect'));
49
63
  }
50
64
  async function startBridge() {
51
- await bootstrapMainRuntime();
65
+ if (ATTACH_EXISTING_BRIDGE) {
66
+ await ensureAttachableRuntime();
67
+ writeStderr(`[MCPServer][Bridge] Attaching MCP stdio to existing bridge runtime at ${BRIDGE_HTTP_BASE_URL}.`);
68
+ }
69
+ else {
70
+ await bootstrapMainRuntime();
71
+ }
52
72
  const runtime = createMCPServer({}, {
53
73
  captureClient: {
54
74
  execute: async (sessionId, command, payload, timeoutMs) => {
75
+ if (ATTACH_EXISTING_BRIDGE) {
76
+ const response = await fetchBridgeJson('/internal/capture-command', {
77
+ method: 'POST',
78
+ headers: { 'Content-Type': 'application/json' },
79
+ body: JSON.stringify({ sessionId, command, payload, timeoutMs }),
80
+ });
81
+ return {
82
+ ok: response.ok === true,
83
+ payload: response.payload && typeof response.payload === 'object' && !Array.isArray(response.payload)
84
+ ? response.payload
85
+ : {},
86
+ truncated: response.truncated === true,
87
+ error: typeof response.error === 'string' ? response.error : undefined,
88
+ };
89
+ }
55
90
  const manager = ensureWebSocketManager();
56
91
  return manager.sendCaptureCommand(sessionId, command, payload, timeoutMs);
57
92
  },
58
93
  },
59
94
  getSessionConnectionState: (sessionId) => {
95
+ if (ATTACH_EXISTING_BRIDGE) {
96
+ return undefined;
97
+ }
60
98
  const manager = ensureWebSocketManager();
61
99
  const state = manager.getSessionConnectionState(sessionId);
62
100
  if (!state) {
@@ -72,8 +110,13 @@ async function startBridge() {
72
110
  },
73
111
  });
74
112
  await runtime.start();
75
- writeStderr('[MCPServer][Bridge] Ready: MCP stdio connected and HTTP/WebSocket ingest is active.');
76
- writeStderr('[MCPServer][Bridge] Health check: http://127.0.0.1:8065/health');
113
+ if (ATTACH_EXISTING_BRIDGE) {
114
+ writeStderr('[MCPServer][Bridge] Ready: MCP stdio attached to existing HTTP/WebSocket ingest runtime.');
115
+ }
116
+ else {
117
+ writeStderr('[MCPServer][Bridge] Ready: MCP stdio connected and HTTP/WebSocket ingest is active.');
118
+ writeStderr('[MCPServer][Bridge] Health check: http://127.0.0.1:8065/health');
119
+ }
77
120
  writeStderr('[MCPServer][Bridge] Next steps:');
78
121
  writeStderr('[MCPServer][Bridge] 1) Start a session in the Chrome extension');
79
122
  writeStderr('[MCPServer][Bridge] 2) Ask your MCP client to call list_sessions');
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-bridge.js","sourceRoot":"","sources":["../src/mcp-bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-bridge.js","sourceRoot":"","sources":["../src/mcp-bridge.ts"],"names":[],"mappings":"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"}