claude-chrome-parallel 2.1.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 (163) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +353 -0
  3. package/dist/cdp/client.d.ts +120 -0
  4. package/dist/cdp/client.d.ts.map +1 -0
  5. package/dist/cdp/client.js +345 -0
  6. package/dist/cdp/client.js.map +1 -0
  7. package/dist/chrome/launcher.d.ts +42 -0
  8. package/dist/chrome/launcher.d.ts.map +1 -0
  9. package/dist/chrome/launcher.js +256 -0
  10. package/dist/chrome/launcher.js.map +1 -0
  11. package/dist/cli/claude-session.d.ts +11 -0
  12. package/dist/cli/claude-session.js +349 -0
  13. package/dist/cli/claude-session.js.map +1 -0
  14. package/dist/cli/index.d.ts +14 -0
  15. package/dist/cli/index.js +562 -0
  16. package/dist/cli/index.js.map +1 -0
  17. package/dist/cli/install.d.ts +16 -0
  18. package/dist/cli/install.js +185 -0
  19. package/dist/cli/install.js.map +1 -0
  20. package/dist/cli/uninstall.d.ts +7 -0
  21. package/dist/cli/uninstall.js +126 -0
  22. package/dist/cli/uninstall.js.map +1 -0
  23. package/dist/config/config-recovery.d.ts +69 -0
  24. package/dist/config/config-recovery.d.ts.map +1 -0
  25. package/dist/config/config-recovery.js +302 -0
  26. package/dist/config/config-recovery.js.map +1 -0
  27. package/dist/config/index.d.ts +6 -0
  28. package/dist/config/index.d.ts.map +1 -0
  29. package/dist/config/index.js +22 -0
  30. package/dist/config/index.js.map +1 -0
  31. package/dist/config/session-isolator.d.ts +76 -0
  32. package/dist/config/session-isolator.d.ts.map +1 -0
  33. package/dist/config/session-isolator.js +268 -0
  34. package/dist/config/session-isolator.js.map +1 -0
  35. package/dist/index.d.ts +10 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +118 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/master/index.d.ts +18 -0
  40. package/dist/master/index.d.ts.map +1 -0
  41. package/dist/master/index.js +75 -0
  42. package/dist/master/index.js.map +1 -0
  43. package/dist/master/ipc-server.d.ts +21 -0
  44. package/dist/master/ipc-server.d.ts.map +1 -0
  45. package/dist/master/ipc-server.js +175 -0
  46. package/dist/master/ipc-server.js.map +1 -0
  47. package/dist/master/request-handler.d.ts +17 -0
  48. package/dist/master/request-handler.d.ts.map +1 -0
  49. package/dist/master/request-handler.js +134 -0
  50. package/dist/master/request-handler.js.map +1 -0
  51. package/dist/master/session-registry.d.ts +120 -0
  52. package/dist/master/session-registry.d.ts.map +1 -0
  53. package/dist/master/session-registry.js +247 -0
  54. package/dist/master/session-registry.js.map +1 -0
  55. package/dist/mcp-server.d.ts +69 -0
  56. package/dist/mcp-server.d.ts.map +1 -0
  57. package/dist/mcp-server.js +301 -0
  58. package/dist/mcp-server.js.map +1 -0
  59. package/dist/session-manager.d.ts +107 -0
  60. package/dist/session-manager.d.ts.map +1 -0
  61. package/dist/session-manager.js +322 -0
  62. package/dist/session-manager.js.map +1 -0
  63. package/dist/shared/ipc-constants.d.ts +16 -0
  64. package/dist/shared/ipc-constants.d.ts.map +1 -0
  65. package/dist/shared/ipc-constants.js +66 -0
  66. package/dist/shared/ipc-constants.js.map +1 -0
  67. package/dist/shared/ipc-protocol.d.ts +33 -0
  68. package/dist/shared/ipc-protocol.d.ts.map +1 -0
  69. package/dist/shared/ipc-protocol.js +20 -0
  70. package/dist/shared/ipc-protocol.js.map +1 -0
  71. package/dist/tools/computer.d.ts +6 -0
  72. package/dist/tools/computer.d.ts.map +1 -0
  73. package/dist/tools/computer.js +426 -0
  74. package/dist/tools/computer.js.map +1 -0
  75. package/dist/tools/find.d.ts +6 -0
  76. package/dist/tools/find.d.ts.map +1 -0
  77. package/dist/tools/find.js +242 -0
  78. package/dist/tools/find.js.map +1 -0
  79. package/dist/tools/form-input.d.ts +6 -0
  80. package/dist/tools/form-input.d.ts.map +1 -0
  81. package/dist/tools/form-input.js +181 -0
  82. package/dist/tools/form-input.js.map +1 -0
  83. package/dist/tools/index.d.ts +6 -0
  84. package/dist/tools/index.d.ts.map +1 -0
  85. package/dist/tools/index.js +26 -0
  86. package/dist/tools/index.js.map +1 -0
  87. package/dist/tools/javascript.d.ts +6 -0
  88. package/dist/tools/javascript.d.ts.map +1 -0
  89. package/dist/tools/javascript.js +134 -0
  90. package/dist/tools/javascript.js.map +1 -0
  91. package/dist/tools/navigate.d.ts +6 -0
  92. package/dist/tools/navigate.d.ts.map +1 -0
  93. package/dist/tools/navigate.js +155 -0
  94. package/dist/tools/navigate.js.map +1 -0
  95. package/dist/tools/read-page.d.ts +6 -0
  96. package/dist/tools/read-page.d.ts.map +1 -0
  97. package/dist/tools/read-page.js +182 -0
  98. package/dist/tools/read-page.js.map +1 -0
  99. package/dist/tools/tabs-context.d.ts +6 -0
  100. package/dist/tools/tabs-context.d.ts.map +1 -0
  101. package/dist/tools/tabs-context.js +73 -0
  102. package/dist/tools/tabs-context.js.map +1 -0
  103. package/dist/tools/tabs-create.d.ts +6 -0
  104. package/dist/tools/tabs-create.d.ts.map +1 -0
  105. package/dist/tools/tabs-create.js +49 -0
  106. package/dist/tools/tabs-create.js.map +1 -0
  107. package/dist/types/index.d.ts +3 -0
  108. package/dist/types/index.d.ts.map +1 -0
  109. package/dist/types/index.js +19 -0
  110. package/dist/types/index.js.map +1 -0
  111. package/dist/types/mcp.d.ts +54 -0
  112. package/dist/types/mcp.d.ts.map +1 -0
  113. package/dist/types/mcp.js +14 -0
  114. package/dist/types/mcp.js.map +1 -0
  115. package/dist/types/session.d.ts +28 -0
  116. package/dist/types/session.d.ts.map +1 -0
  117. package/dist/types/session.js +6 -0
  118. package/dist/types/session.js.map +1 -0
  119. package/dist/utils/atomic-file.d.ts +50 -0
  120. package/dist/utils/atomic-file.d.ts.map +1 -0
  121. package/dist/utils/atomic-file.js +217 -0
  122. package/dist/utils/atomic-file.js.map +1 -0
  123. package/dist/utils/index.d.ts +6 -0
  124. package/dist/utils/index.d.ts.map +1 -0
  125. package/dist/utils/index.js +22 -0
  126. package/dist/utils/index.js.map +1 -0
  127. package/dist/utils/json-validator.d.ts +40 -0
  128. package/dist/utils/json-validator.d.ts.map +1 -0
  129. package/dist/utils/json-validator.js +295 -0
  130. package/dist/utils/json-validator.js.map +1 -0
  131. package/dist/utils/ref-id-manager.d.ts +26 -0
  132. package/dist/utils/ref-id-manager.d.ts.map +1 -0
  133. package/dist/utils/ref-id-manager.js +81 -0
  134. package/dist/utils/ref-id-manager.js.map +1 -0
  135. package/dist/utils/request-queue.d.ts +37 -0
  136. package/dist/utils/request-queue.d.ts.map +1 -0
  137. package/dist/utils/request-queue.js +110 -0
  138. package/dist/utils/request-queue.js.map +1 -0
  139. package/dist/worker/auto-master.d.ts +24 -0
  140. package/dist/worker/auto-master.d.ts.map +1 -0
  141. package/dist/worker/auto-master.js +135 -0
  142. package/dist/worker/auto-master.js.map +1 -0
  143. package/dist/worker/index.d.ts +25 -0
  144. package/dist/worker/index.d.ts.map +1 -0
  145. package/dist/worker/index.js +93 -0
  146. package/dist/worker/index.js.map +1 -0
  147. package/dist/worker/ipc-client.d.ts +26 -0
  148. package/dist/worker/ipc-client.d.ts.map +1 -0
  149. package/dist/worker/ipc-client.js +211 -0
  150. package/dist/worker/ipc-client.js.map +1 -0
  151. package/dist/worker/remote-session-manager.d.ts +114 -0
  152. package/dist/worker/remote-session-manager.d.ts.map +1 -0
  153. package/dist/worker/remote-session-manager.js +151 -0
  154. package/dist/worker/remote-session-manager.js.map +1 -0
  155. package/dist/worker/tools.d.ts +7 -0
  156. package/dist/worker/tools.d.ts.map +1 -0
  157. package/dist/worker/tools.js +340 -0
  158. package/dist/worker/tools.js.map +1 -0
  159. package/dist/worker/worker-mcp-server.d.ts +70 -0
  160. package/dist/worker/worker-mcp-server.d.ts.map +1 -0
  161. package/dist/worker/worker-mcp-server.js +295 -0
  162. package/dist/worker/worker-mcp-server.js.map +1 -0
  163. package/package.json +73 -0
@@ -0,0 +1,247 @@
1
+ "use strict";
2
+ /**
3
+ * Session Registry - Central session management for Master process
4
+ * Wraps the existing SessionManager to add worker tracking
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SessionRegistry = void 0;
8
+ const session_manager_1 = require("../session-manager");
9
+ const client_1 = require("../cdp/client");
10
+ const ref_id_manager_1 = require("../utils/ref-id-manager");
11
+ class SessionRegistry {
12
+ sessionManager;
13
+ workerSessions = new Map(); // workerId -> sessionIds
14
+ sessionWorker = new Map(); // sessionId -> workerId
15
+ constructor(cdpClient) {
16
+ this.sessionManager = new session_manager_1.SessionManager(cdpClient || (0, client_1.getCDPClient)());
17
+ }
18
+ /**
19
+ * Ensure connected to Chrome
20
+ */
21
+ async ensureConnected() {
22
+ await this.sessionManager.ensureConnected();
23
+ }
24
+ /**
25
+ * Create a new session for a worker
26
+ */
27
+ async createSession(workerId, options) {
28
+ const session = await this.sessionManager.createSession(options);
29
+ // Track worker ownership
30
+ let workerSessionSet = this.workerSessions.get(workerId);
31
+ if (!workerSessionSet) {
32
+ workerSessionSet = new Set();
33
+ this.workerSessions.set(workerId, workerSessionSet);
34
+ }
35
+ workerSessionSet.add(session.id);
36
+ this.sessionWorker.set(session.id, workerId);
37
+ console.error(`[SessionRegistry] Created session ${session.id} for worker ${workerId}`);
38
+ return { id: session.id, name: session.name };
39
+ }
40
+ /**
41
+ * Get session info
42
+ */
43
+ getSession(sessionId) {
44
+ return this.sessionManager.getSessionInfo(sessionId);
45
+ }
46
+ /**
47
+ * List all sessions
48
+ */
49
+ listSessions() {
50
+ return this.sessionManager.getAllSessionInfos();
51
+ }
52
+ /**
53
+ * List sessions for a specific worker
54
+ */
55
+ listWorkerSessions(workerId) {
56
+ const sessionIds = this.workerSessions.get(workerId);
57
+ if (!sessionIds)
58
+ return [];
59
+ return Array.from(sessionIds)
60
+ .map(id => this.sessionManager.getSessionInfo(id))
61
+ .filter(info => info !== undefined);
62
+ }
63
+ /**
64
+ * Delete a session
65
+ */
66
+ async deleteSession(sessionId) {
67
+ const workerId = this.sessionWorker.get(sessionId);
68
+ if (workerId) {
69
+ const workerSessions = this.workerSessions.get(workerId);
70
+ if (workerSessions) {
71
+ workerSessions.delete(sessionId);
72
+ }
73
+ this.sessionWorker.delete(sessionId);
74
+ }
75
+ await this.sessionManager.deleteSession(sessionId);
76
+ }
77
+ /**
78
+ * Create a new target (tab) for a session
79
+ */
80
+ async createTarget(sessionId, url) {
81
+ const result = await this.sessionManager.createTarget(sessionId, url);
82
+ return {
83
+ targetId: result.targetId,
84
+ url: result.page.url(),
85
+ title: await result.page.title(),
86
+ };
87
+ }
88
+ /**
89
+ * List targets for a session
90
+ */
91
+ async listTargets(sessionId) {
92
+ const pages = await this.sessionManager.getSessionPages(sessionId);
93
+ const targets = [];
94
+ for (const page of pages) {
95
+ const target = page.target();
96
+ const targetId = target._targetId;
97
+ targets.push({
98
+ targetId,
99
+ url: page.url(),
100
+ title: await page.title(),
101
+ });
102
+ }
103
+ return targets;
104
+ }
105
+ /**
106
+ * Close a target
107
+ */
108
+ async closeTarget(sessionId, targetId) {
109
+ await this.sessionManager.removeTarget(sessionId, targetId);
110
+ await this.sessionManager.getCDPClient().closePage(targetId);
111
+ }
112
+ /**
113
+ * Navigate a page
114
+ */
115
+ async navigate(sessionId, targetId, url, options) {
116
+ const page = await this.sessionManager.getPage(sessionId, targetId);
117
+ if (!page)
118
+ throw new Error(`Page not found: ${targetId}`);
119
+ await page.goto(url, {
120
+ waitUntil: options?.waitUntil || 'domcontentloaded',
121
+ timeout: options?.timeout || 30000,
122
+ });
123
+ }
124
+ /**
125
+ * Take a screenshot
126
+ */
127
+ async screenshot(sessionId, targetId, options) {
128
+ const page = await this.sessionManager.getPage(sessionId, targetId);
129
+ if (!page)
130
+ throw new Error(`Page not found: ${targetId}`);
131
+ const buffer = await page.screenshot({
132
+ type: options?.format || 'png',
133
+ quality: options?.format === 'jpeg' ? (options?.quality || 80) : undefined,
134
+ fullPage: options?.fullPage || false,
135
+ encoding: 'base64',
136
+ });
137
+ return buffer;
138
+ }
139
+ /**
140
+ * Evaluate JavaScript
141
+ */
142
+ async evaluate(sessionId, targetId, script) {
143
+ const page = await this.sessionManager.getPage(sessionId, targetId);
144
+ if (!page)
145
+ throw new Error(`Page not found: ${targetId}`);
146
+ return page.evaluate(script);
147
+ }
148
+ /**
149
+ * Click at coordinates
150
+ */
151
+ async click(sessionId, targetId, x, y) {
152
+ const page = await this.sessionManager.getPage(sessionId, targetId);
153
+ if (!page)
154
+ throw new Error(`Page not found: ${targetId}`);
155
+ await page.mouse.click(x, y);
156
+ }
157
+ /**
158
+ * Type text
159
+ */
160
+ async type(sessionId, targetId, text) {
161
+ const page = await this.sessionManager.getPage(sessionId, targetId);
162
+ if (!page)
163
+ throw new Error(`Page not found: ${targetId}`);
164
+ await page.keyboard.type(text);
165
+ }
166
+ /**
167
+ * Scroll
168
+ */
169
+ async scroll(sessionId, targetId, x, y, direction, amount) {
170
+ const page = await this.sessionManager.getPage(sessionId, targetId);
171
+ if (!page)
172
+ throw new Error(`Page not found: ${targetId}`);
173
+ await page.mouse.move(x, y);
174
+ let deltaX = 0;
175
+ let deltaY = 0;
176
+ const scrollAmount = amount * 100;
177
+ switch (direction) {
178
+ case 'up':
179
+ deltaY = -scrollAmount;
180
+ break;
181
+ case 'down':
182
+ deltaY = scrollAmount;
183
+ break;
184
+ case 'left':
185
+ deltaX = -scrollAmount;
186
+ break;
187
+ case 'right':
188
+ deltaX = scrollAmount;
189
+ break;
190
+ }
191
+ await page.mouse.wheel({ deltaX, deltaY });
192
+ }
193
+ /**
194
+ * Execute CDP command
195
+ */
196
+ async executeCDP(sessionId, targetId, method, params) {
197
+ return this.sessionManager.executeCDP(sessionId, targetId, method, params);
198
+ }
199
+ /**
200
+ * Get accessibility tree
201
+ */
202
+ async getAccessibilityTree(sessionId, targetId) {
203
+ return this.sessionManager.executeCDP(sessionId, targetId, 'Accessibility.getFullAXTree');
204
+ }
205
+ /**
206
+ * Clean up all sessions for a disconnected worker
207
+ */
208
+ async cleanupWorker(workerId) {
209
+ const sessionIds = this.workerSessions.get(workerId);
210
+ if (!sessionIds)
211
+ return;
212
+ console.error(`[SessionRegistry] Cleaning up ${sessionIds.size} sessions for worker ${workerId}`);
213
+ for (const sessionId of sessionIds) {
214
+ try {
215
+ await this.sessionManager.deleteSession(sessionId);
216
+ this.sessionWorker.delete(sessionId);
217
+ }
218
+ catch (error) {
219
+ console.error(`[SessionRegistry] Error deleting session ${sessionId}:`, error);
220
+ }
221
+ }
222
+ this.workerSessions.delete(workerId);
223
+ }
224
+ /**
225
+ * Get ref ID manager
226
+ */
227
+ getRefIdManager() {
228
+ return (0, ref_id_manager_1.getRefIdManager)();
229
+ }
230
+ /**
231
+ * Get underlying session manager
232
+ */
233
+ getSessionManager() {
234
+ return this.sessionManager;
235
+ }
236
+ /**
237
+ * Get statistics
238
+ */
239
+ getStats() {
240
+ return {
241
+ sessions: this.sessionManager.sessionCount,
242
+ workers: this.workerSessions.size,
243
+ };
244
+ }
245
+ }
246
+ exports.SessionRegistry = SessionRegistry;
247
+ //# sourceMappingURL=session-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-registry.js","sourceRoot":"","sources":["../../src/master/session-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * MCP Server - Implements MCP protocol over stdio
3
+ */
4
+ import { MCPRequest, MCPResponse, MCPToolDefinition, ToolHandler } from './types/mcp';
5
+ import { SessionManager } from './session-manager';
6
+ export declare class MCPServer {
7
+ private tools;
8
+ private sessionManager;
9
+ private rl;
10
+ constructor(sessionManager?: SessionManager);
11
+ /**
12
+ * Register a tool
13
+ */
14
+ registerTool(name: string, handler: ToolHandler, definition: MCPToolDefinition): void;
15
+ /**
16
+ * Start the stdio server
17
+ */
18
+ start(): void;
19
+ /**
20
+ * Send response to stdout
21
+ */
22
+ private sendResponse;
23
+ /**
24
+ * Handle incoming MCP request
25
+ */
26
+ handleRequest(request: MCPRequest): Promise<MCPResponse>;
27
+ /**
28
+ * Handle initialize request
29
+ */
30
+ private handleInitialize;
31
+ /**
32
+ * Handle tools/list request
33
+ */
34
+ private handleToolsList;
35
+ /**
36
+ * Handle tools/call request
37
+ */
38
+ private handleToolsCall;
39
+ /**
40
+ * Handle sessions/list request
41
+ */
42
+ private handleSessionsList;
43
+ /**
44
+ * Handle sessions/create request
45
+ */
46
+ private handleSessionsCreate;
47
+ /**
48
+ * Handle sessions/delete request
49
+ */
50
+ private handleSessionsDelete;
51
+ /**
52
+ * Create an error response
53
+ */
54
+ private errorResponse;
55
+ /**
56
+ * Get the session manager
57
+ */
58
+ getSessionManager(): SessionManager;
59
+ /**
60
+ * Get registered tool names
61
+ */
62
+ getToolNames(): string[];
63
+ /**
64
+ * Stop the server
65
+ */
66
+ stop(): void;
67
+ }
68
+ export declare function getMCPServer(): MCPServer;
69
+ //# sourceMappingURL=mcp-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,UAAU,EACV,WAAW,EAGX,iBAAiB,EACjB,WAAW,EAGZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAqB,MAAM,mBAAmB,CAAC;AAEtE,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAwC;IACrD,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,EAAE,CAAmC;gBAEjC,cAAc,CAAC,EAAE,cAAc;IAI3C;;OAEG;IACH,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,iBAAiB,GAC5B,IAAI;IAIP;;OAEG;IACH,KAAK,IAAI,IAAI;IAqCb;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAmD9D;;OAEG;YACW,gBAAgB;IAa9B;;OAEG;YACW,eAAe;IAQ7B;;OAEG;YACW,eAAe;IAmC7B;;OAEG;YACW,kBAAkB;IAYhC;;OAEG;YACW,oBAAoB;IA2BlC;;OAEG;YACW,oBAAoB;IAkBlC;;OAEG;IACH,OAAO,CAAC,aAAa;IAiBrB;;OAEG;IACH,iBAAiB,IAAI,cAAc;IAInC;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAIxB;;OAEG;IACH,IAAI,IAAI,IAAI;CAMb;AAKD,wBAAgB,YAAY,IAAI,SAAS,CAKxC"}
@@ -0,0 +1,301 @@
1
+ "use strict";
2
+ /**
3
+ * MCP Server - Implements MCP protocol over stdio
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.MCPServer = void 0;
40
+ exports.getMCPServer = getMCPServer;
41
+ const readline = __importStar(require("readline"));
42
+ const mcp_1 = require("./types/mcp");
43
+ const session_manager_1 = require("./session-manager");
44
+ class MCPServer {
45
+ tools = new Map();
46
+ sessionManager;
47
+ rl = null;
48
+ constructor(sessionManager) {
49
+ this.sessionManager = sessionManager || (0, session_manager_1.getSessionManager)();
50
+ }
51
+ /**
52
+ * Register a tool
53
+ */
54
+ registerTool(name, handler, definition) {
55
+ this.tools.set(name, { name, handler, definition });
56
+ }
57
+ /**
58
+ * Start the stdio server
59
+ */
60
+ start() {
61
+ console.error('[MCPServer] Starting stdio server...');
62
+ this.rl = readline.createInterface({
63
+ input: process.stdin,
64
+ output: process.stdout,
65
+ terminal: false,
66
+ });
67
+ this.rl.on('line', async (line) => {
68
+ if (!line.trim())
69
+ return;
70
+ try {
71
+ const request = JSON.parse(line);
72
+ const response = await this.handleRequest(request);
73
+ this.sendResponse(response);
74
+ }
75
+ catch (error) {
76
+ const errorResponse = {
77
+ jsonrpc: '2.0',
78
+ id: 0,
79
+ error: {
80
+ code: mcp_1.MCPErrorCodes.PARSE_ERROR,
81
+ message: error instanceof Error ? error.message : 'Parse error',
82
+ },
83
+ };
84
+ this.sendResponse(errorResponse);
85
+ }
86
+ });
87
+ this.rl.on('close', () => {
88
+ console.error('[MCPServer] stdin closed, shutting down...');
89
+ process.exit(0);
90
+ });
91
+ console.error('[MCPServer] Ready, waiting for requests...');
92
+ }
93
+ /**
94
+ * Send response to stdout
95
+ */
96
+ sendResponse(response) {
97
+ console.log(JSON.stringify(response));
98
+ }
99
+ /**
100
+ * Handle incoming MCP request
101
+ */
102
+ async handleRequest(request) {
103
+ const { id, method, params } = request;
104
+ try {
105
+ let result;
106
+ switch (method) {
107
+ case 'initialize':
108
+ result = await this.handleInitialize(params);
109
+ break;
110
+ case 'initialized':
111
+ // Client acknowledgment, no response needed but we send confirmation
112
+ result = {};
113
+ break;
114
+ case 'tools/list':
115
+ result = await this.handleToolsList();
116
+ break;
117
+ case 'tools/call':
118
+ result = await this.handleToolsCall(params);
119
+ break;
120
+ case 'sessions/list':
121
+ result = await this.handleSessionsList();
122
+ break;
123
+ case 'sessions/create':
124
+ result = await this.handleSessionsCreate(params);
125
+ break;
126
+ case 'sessions/delete':
127
+ result = await this.handleSessionsDelete(params);
128
+ break;
129
+ default:
130
+ return this.errorResponse(id, mcp_1.MCPErrorCodes.METHOD_NOT_FOUND, `Unknown method: ${method}`);
131
+ }
132
+ return {
133
+ jsonrpc: '2.0',
134
+ id,
135
+ result,
136
+ };
137
+ }
138
+ catch (error) {
139
+ const message = error instanceof Error ? error.message : String(error);
140
+ return this.errorResponse(id, mcp_1.MCPErrorCodes.INTERNAL_ERROR, message);
141
+ }
142
+ }
143
+ /**
144
+ * Handle initialize request
145
+ */
146
+ async handleInitialize(_params) {
147
+ return {
148
+ protocolVersion: '2024-11-05',
149
+ capabilities: {
150
+ tools: {},
151
+ },
152
+ serverInfo: {
153
+ name: 'claude-chrome-parallel',
154
+ version: '2.0.0',
155
+ },
156
+ };
157
+ }
158
+ /**
159
+ * Handle tools/list request
160
+ */
161
+ async handleToolsList() {
162
+ const tools = [];
163
+ for (const registry of this.tools.values()) {
164
+ tools.push(registry.definition);
165
+ }
166
+ return { tools };
167
+ }
168
+ /**
169
+ * Handle tools/call request
170
+ */
171
+ async handleToolsCall(params) {
172
+ if (!params) {
173
+ throw new Error('Missing params for tools/call');
174
+ }
175
+ const toolName = params.name;
176
+ const toolArgs = (params.arguments || {});
177
+ const sessionId = (toolArgs.sessionId || params.sessionId);
178
+ if (!toolName) {
179
+ throw new Error('Missing tool name');
180
+ }
181
+ const tool = this.tools.get(toolName);
182
+ if (!tool) {
183
+ throw new Error(`Unknown tool: ${toolName}`);
184
+ }
185
+ // Ensure session exists
186
+ if (sessionId) {
187
+ await this.sessionManager.getOrCreateSession(sessionId);
188
+ }
189
+ try {
190
+ const result = await tool.handler(sessionId, toolArgs);
191
+ return result;
192
+ }
193
+ catch (error) {
194
+ const message = error instanceof Error ? error.message : String(error);
195
+ return {
196
+ content: [{ type: 'text', text: `Error: ${message}` }],
197
+ isError: true,
198
+ };
199
+ }
200
+ }
201
+ /**
202
+ * Handle sessions/list request
203
+ */
204
+ async handleSessionsList() {
205
+ const sessions = this.sessionManager.getAllSessionInfos();
206
+ return {
207
+ content: [
208
+ {
209
+ type: 'text',
210
+ text: JSON.stringify(sessions, null, 2),
211
+ },
212
+ ],
213
+ };
214
+ }
215
+ /**
216
+ * Handle sessions/create request
217
+ */
218
+ async handleSessionsCreate(params) {
219
+ const sessionId = params?.sessionId;
220
+ const name = params?.name;
221
+ const session = await this.sessionManager.createSession({
222
+ id: sessionId,
223
+ name,
224
+ });
225
+ return {
226
+ content: [
227
+ {
228
+ type: 'text',
229
+ text: JSON.stringify({
230
+ sessionId: session.id,
231
+ name: session.name,
232
+ targetCount: session.targets.size,
233
+ }, null, 2),
234
+ },
235
+ ],
236
+ };
237
+ }
238
+ /**
239
+ * Handle sessions/delete request
240
+ */
241
+ async handleSessionsDelete(params) {
242
+ const sessionId = params?.sessionId;
243
+ if (!sessionId) {
244
+ throw new Error('Missing sessionId');
245
+ }
246
+ await this.sessionManager.deleteSession(sessionId);
247
+ return {
248
+ content: [
249
+ {
250
+ type: 'text',
251
+ text: `Session ${sessionId} deleted`,
252
+ },
253
+ ],
254
+ };
255
+ }
256
+ /**
257
+ * Create an error response
258
+ */
259
+ errorResponse(id, code, message, data) {
260
+ const error = { code, message };
261
+ if (data !== undefined) {
262
+ error.data = data;
263
+ }
264
+ return {
265
+ jsonrpc: '2.0',
266
+ id,
267
+ error,
268
+ };
269
+ }
270
+ /**
271
+ * Get the session manager
272
+ */
273
+ getSessionManager() {
274
+ return this.sessionManager;
275
+ }
276
+ /**
277
+ * Get registered tool names
278
+ */
279
+ getToolNames() {
280
+ return Array.from(this.tools.keys());
281
+ }
282
+ /**
283
+ * Stop the server
284
+ */
285
+ stop() {
286
+ if (this.rl) {
287
+ this.rl.close();
288
+ this.rl = null;
289
+ }
290
+ }
291
+ }
292
+ exports.MCPServer = MCPServer;
293
+ // Singleton instance
294
+ let mcpServerInstance = null;
295
+ function getMCPServer() {
296
+ if (!mcpServerInstance) {
297
+ mcpServerInstance = new MCPServer();
298
+ }
299
+ return mcpServerInstance;
300
+ }
301
+ //# sourceMappingURL=mcp-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}