browser-use 0.1.0 → 0.3.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 (258) hide show
  1. package/README.md +301 -636
  2. package/dist/actor/element.d.ts +19 -0
  3. package/dist/actor/element.js +46 -0
  4. package/dist/actor/index.d.ts +4 -0
  5. package/dist/actor/index.js +4 -0
  6. package/dist/actor/mouse.d.ts +19 -0
  7. package/dist/actor/mouse.js +39 -0
  8. package/dist/actor/page.d.ts +29 -0
  9. package/dist/actor/page.js +88 -0
  10. package/dist/actor/utils.d.ts +4 -0
  11. package/dist/actor/utils.js +35 -0
  12. package/dist/agent/cloud-events.d.ts +18 -0
  13. package/dist/agent/cloud-events.js +65 -2
  14. package/dist/agent/gif.d.ts +1 -0
  15. package/dist/agent/gif.js +24 -2
  16. package/dist/agent/judge.d.ts +17 -0
  17. package/dist/agent/judge.js +197 -0
  18. package/dist/agent/message-manager/service.d.ts +12 -4
  19. package/dist/agent/message-manager/service.js +205 -39
  20. package/dist/agent/message-manager/utils.js +0 -1
  21. package/dist/agent/message-manager/views.d.ts +4 -0
  22. package/dist/agent/message-manager/views.js +11 -7
  23. package/dist/agent/prompts.d.ts +24 -3
  24. package/dist/agent/prompts.js +274 -59
  25. package/dist/agent/service.d.ts +99 -40
  26. package/dist/agent/service.js +2282 -474
  27. package/dist/agent/variable-detector.d.ts +12 -0
  28. package/dist/agent/variable-detector.js +211 -0
  29. package/dist/agent/views.d.ts +237 -17
  30. package/dist/agent/views.js +446 -32
  31. package/dist/browser/cloud/cloud.d.ts +20 -0
  32. package/dist/browser/cloud/cloud.js +129 -0
  33. package/dist/browser/cloud/index.d.ts +2 -0
  34. package/dist/browser/cloud/index.js +2 -0
  35. package/dist/browser/cloud/views.d.ts +41 -0
  36. package/dist/browser/cloud/views.js +35 -0
  37. package/dist/browser/events.d.ts +345 -0
  38. package/dist/browser/events.js +566 -0
  39. package/dist/browser/extensions.js +17 -17
  40. package/dist/browser/index.d.ts +4 -0
  41. package/dist/browser/index.js +4 -0
  42. package/dist/browser/profile.d.ts +8 -2
  43. package/dist/browser/profile.js +79 -12
  44. package/dist/browser/session-manager.d.ts +85 -0
  45. package/dist/browser/session-manager.js +208 -0
  46. package/dist/browser/session.d.ts +100 -8
  47. package/dist/browser/session.js +1102 -63
  48. package/dist/browser/types.d.ts +0 -2
  49. package/dist/browser/views.d.ts +39 -0
  50. package/dist/browser/views.js +32 -0
  51. package/dist/browser/watchdogs/aboutblank-watchdog.d.ts +12 -0
  52. package/dist/browser/watchdogs/aboutblank-watchdog.js +131 -0
  53. package/dist/browser/watchdogs/base.d.ts +21 -0
  54. package/dist/browser/watchdogs/base.js +81 -0
  55. package/dist/browser/watchdogs/cdp-session-watchdog.d.ts +14 -0
  56. package/dist/browser/watchdogs/cdp-session-watchdog.js +177 -0
  57. package/dist/browser/watchdogs/crash-watchdog.d.ts +38 -0
  58. package/dist/browser/watchdogs/crash-watchdog.js +296 -0
  59. package/dist/browser/watchdogs/default-action-watchdog.d.ts +49 -0
  60. package/dist/browser/watchdogs/default-action-watchdog.js +212 -0
  61. package/dist/browser/watchdogs/dom-watchdog.d.ts +8 -0
  62. package/dist/browser/watchdogs/dom-watchdog.js +31 -0
  63. package/dist/browser/watchdogs/downloads-watchdog.d.ts +77 -0
  64. package/dist/browser/watchdogs/downloads-watchdog.js +409 -0
  65. package/dist/browser/watchdogs/har-recording-watchdog.d.ts +19 -0
  66. package/dist/browser/watchdogs/har-recording-watchdog.js +317 -0
  67. package/dist/browser/watchdogs/index.d.ts +15 -0
  68. package/dist/browser/watchdogs/index.js +15 -0
  69. package/dist/browser/watchdogs/local-browser-watchdog.d.ts +10 -0
  70. package/dist/browser/watchdogs/local-browser-watchdog.js +32 -0
  71. package/dist/browser/watchdogs/permissions-watchdog.d.ts +8 -0
  72. package/dist/browser/watchdogs/permissions-watchdog.js +73 -0
  73. package/dist/browser/watchdogs/popups-watchdog.d.ts +13 -0
  74. package/dist/browser/watchdogs/popups-watchdog.js +77 -0
  75. package/dist/browser/watchdogs/recording-watchdog.d.ts +27 -0
  76. package/dist/browser/watchdogs/recording-watchdog.js +249 -0
  77. package/dist/browser/watchdogs/screenshot-watchdog.d.ts +6 -0
  78. package/dist/browser/watchdogs/screenshot-watchdog.js +13 -0
  79. package/dist/browser/watchdogs/security-watchdog.d.ts +10 -0
  80. package/dist/browser/watchdogs/security-watchdog.js +84 -0
  81. package/dist/browser/watchdogs/storage-state-watchdog.d.ts +24 -0
  82. package/dist/browser/watchdogs/storage-state-watchdog.js +288 -0
  83. package/dist/cli.d.ts +41 -0
  84. package/dist/cli.js +820 -10
  85. package/dist/code-use/formatting.d.ts +3 -0
  86. package/dist/code-use/formatting.js +18 -0
  87. package/dist/code-use/index.d.ts +6 -0
  88. package/dist/code-use/index.js +6 -0
  89. package/dist/code-use/namespace.d.ts +5 -0
  90. package/dist/code-use/namespace.js +81 -0
  91. package/dist/code-use/notebook-export.d.ts +3 -0
  92. package/dist/code-use/notebook-export.js +56 -0
  93. package/dist/code-use/service.d.ts +24 -0
  94. package/dist/code-use/service.js +104 -0
  95. package/dist/code-use/utils.d.ts +4 -0
  96. package/dist/code-use/utils.js +98 -0
  97. package/dist/code-use/views.d.ts +108 -0
  98. package/dist/code-use/views.js +165 -0
  99. package/dist/config.d.ts +13 -0
  100. package/dist/config.js +69 -3
  101. package/dist/controller/registry/service.d.ts +10 -1
  102. package/dist/controller/registry/service.js +266 -10
  103. package/dist/controller/registry/views.d.ts +4 -1
  104. package/dist/controller/registry/views.js +25 -2
  105. package/dist/controller/service.d.ts +10 -1
  106. package/dist/controller/service.js +1849 -288
  107. package/dist/controller/views.d.ts +78 -155
  108. package/dist/controller/views.js +61 -12
  109. package/dist/dom/history-tree-processor/service.d.ts +5 -0
  110. package/dist/dom/history-tree-processor/service.js +169 -14
  111. package/dist/dom/history-tree-processor/view.d.ts +7 -1
  112. package/dist/dom/history-tree-processor/view.js +10 -1
  113. package/dist/dom/markdown-extractor.d.ts +37 -0
  114. package/dist/dom/markdown-extractor.js +345 -0
  115. package/dist/dom/service.d.ts +3 -1
  116. package/dist/dom/service.js +76 -0
  117. package/dist/dom/views.d.ts +1 -0
  118. package/dist/dom/views.js +45 -0
  119. package/dist/event-bus.d.ts +107 -7
  120. package/dist/event-bus.js +313 -10
  121. package/dist/filesystem/file-system.d.ts +18 -0
  122. package/dist/filesystem/file-system.js +530 -42
  123. package/dist/index.d.ts +7 -0
  124. package/dist/index.js +6 -0
  125. package/dist/integrations/gmail/actions.d.ts +3 -3
  126. package/dist/integrations/gmail/actions.js +5 -5
  127. package/dist/llm/anthropic/chat.d.ts +18 -1
  128. package/dist/llm/anthropic/chat.js +123 -55
  129. package/dist/llm/anthropic/serializer.d.ts +2 -0
  130. package/dist/llm/anthropic/serializer.js +81 -9
  131. package/dist/llm/aws/chat-anthropic.d.ts +17 -0
  132. package/dist/llm/aws/chat-anthropic.js +129 -40
  133. package/dist/llm/aws/chat-bedrock.d.ts +28 -1
  134. package/dist/llm/aws/chat-bedrock.js +161 -34
  135. package/dist/llm/aws/serializer.d.ts +13 -1
  136. package/dist/llm/aws/serializer.js +56 -17
  137. package/dist/llm/azure/chat.d.ts +53 -2
  138. package/dist/llm/azure/chat.js +366 -53
  139. package/dist/llm/base.d.ts +2 -0
  140. package/dist/llm/browser-use/chat.d.ts +40 -0
  141. package/dist/llm/browser-use/chat.js +305 -0
  142. package/dist/llm/browser-use/index.d.ts +1 -0
  143. package/dist/llm/browser-use/index.js +1 -0
  144. package/dist/llm/cerebras/chat.d.ts +39 -0
  145. package/dist/llm/cerebras/chat.js +178 -0
  146. package/dist/llm/cerebras/index.d.ts +2 -0
  147. package/dist/llm/cerebras/index.js +2 -0
  148. package/dist/llm/cerebras/serializer.d.ts +7 -0
  149. package/dist/llm/cerebras/serializer.js +82 -0
  150. package/dist/llm/deepseek/chat.d.ts +19 -2
  151. package/dist/llm/deepseek/chat.js +138 -25
  152. package/dist/llm/google/chat.d.ts +46 -2
  153. package/dist/llm/google/chat.js +268 -63
  154. package/dist/llm/google/serializer.d.ts +9 -1
  155. package/dist/llm/google/serializer.js +141 -34
  156. package/dist/llm/groq/chat.d.ts +21 -2
  157. package/dist/llm/groq/chat.js +125 -26
  158. package/dist/llm/groq/parser.js +3 -1
  159. package/dist/llm/messages.d.ts +4 -4
  160. package/dist/llm/mistral/chat.d.ts +43 -0
  161. package/dist/llm/mistral/chat.js +154 -0
  162. package/dist/llm/mistral/index.d.ts +2 -0
  163. package/dist/llm/mistral/index.js +2 -0
  164. package/dist/llm/mistral/schema.d.ts +8 -0
  165. package/dist/llm/mistral/schema.js +27 -0
  166. package/dist/llm/models.d.ts +2 -0
  167. package/dist/llm/models.js +317 -0
  168. package/dist/llm/ollama/chat.d.ts +13 -1
  169. package/dist/llm/ollama/chat.js +110 -19
  170. package/dist/llm/ollama/serializer.d.ts +1 -0
  171. package/dist/llm/ollama/serializer.js +34 -12
  172. package/dist/llm/openai/chat.d.ts +16 -0
  173. package/dist/llm/openai/chat.js +94 -44
  174. package/dist/llm/openai/like.d.ts +5 -3
  175. package/dist/llm/openai/like.js +7 -3
  176. package/dist/llm/openai/responses-serializer.d.ts +18 -0
  177. package/dist/llm/openai/responses-serializer.js +72 -0
  178. package/dist/llm/openrouter/chat.d.ts +28 -2
  179. package/dist/llm/openrouter/chat.js +115 -29
  180. package/dist/llm/schema.d.ts +11 -1
  181. package/dist/llm/schema.js +81 -1
  182. package/dist/llm/vercel/chat.d.ts +50 -0
  183. package/dist/llm/vercel/chat.js +276 -0
  184. package/dist/llm/vercel/index.d.ts +1 -0
  185. package/dist/llm/vercel/index.js +1 -0
  186. package/dist/llm/vercel/serializer.d.ts +5 -0
  187. package/dist/llm/vercel/serializer.js +7 -0
  188. package/dist/llm/views.d.ts +2 -1
  189. package/dist/llm/views.js +3 -1
  190. package/dist/logging-config.d.ts +2 -0
  191. package/dist/logging-config.js +82 -29
  192. package/dist/mcp/client.d.ts +10 -5
  193. package/dist/mcp/client.js +21 -15
  194. package/dist/mcp/controller.d.ts +42 -3
  195. package/dist/mcp/controller.js +56 -31
  196. package/dist/mcp/server.d.ts +14 -0
  197. package/dist/mcp/server.js +257 -51
  198. package/dist/observability.js +10 -4
  199. package/dist/sandbox/index.d.ts +2 -0
  200. package/dist/sandbox/index.js +2 -0
  201. package/dist/sandbox/sandbox.d.ts +19 -0
  202. package/dist/sandbox/sandbox.js +140 -0
  203. package/dist/sandbox/views.d.ts +67 -0
  204. package/dist/sandbox/views.js +121 -0
  205. package/dist/skill-cli/index.d.ts +3 -0
  206. package/dist/skill-cli/index.js +3 -0
  207. package/dist/skill-cli/protocol.d.ts +30 -0
  208. package/dist/skill-cli/protocol.js +48 -0
  209. package/dist/skill-cli/server.d.ts +11 -0
  210. package/dist/skill-cli/server.js +85 -0
  211. package/dist/skill-cli/sessions.d.ts +24 -0
  212. package/dist/skill-cli/sessions.js +47 -0
  213. package/dist/skills/index.d.ts +3 -0
  214. package/dist/skills/index.js +3 -0
  215. package/dist/skills/service.d.ts +27 -0
  216. package/dist/skills/service.js +266 -0
  217. package/dist/skills/utils.d.ts +6 -0
  218. package/dist/skills/utils.js +53 -0
  219. package/dist/skills/views.d.ts +40 -0
  220. package/dist/skills/views.js +10 -0
  221. package/dist/sync/auth.js +8 -3
  222. package/dist/sync/service.d.ts +6 -6
  223. package/dist/sync/service.js +54 -89
  224. package/dist/telemetry/views.d.ts +20 -6
  225. package/dist/telemetry/views.js +23 -5
  226. package/dist/tokens/custom-pricing.d.ts +2 -0
  227. package/dist/tokens/custom-pricing.js +22 -0
  228. package/dist/tokens/index.d.ts +2 -0
  229. package/dist/tokens/index.js +2 -0
  230. package/dist/tokens/mappings.d.ts +1 -0
  231. package/dist/tokens/mappings.js +3 -0
  232. package/dist/tokens/service.js +30 -12
  233. package/dist/tools/extraction/index.d.ts +2 -0
  234. package/dist/tools/extraction/index.js +2 -0
  235. package/dist/tools/extraction/schema-utils.d.ts +6 -0
  236. package/dist/tools/extraction/schema-utils.js +237 -0
  237. package/dist/tools/extraction/views.d.ts +7 -0
  238. package/dist/tools/index.d.ts +5 -0
  239. package/dist/tools/index.js +5 -0
  240. package/dist/tools/registry/index.d.ts +2 -0
  241. package/dist/tools/registry/index.js +2 -0
  242. package/dist/tools/registry/service.d.ts +1 -0
  243. package/dist/tools/registry/service.js +1 -0
  244. package/dist/tools/registry/views.d.ts +1 -0
  245. package/dist/tools/registry/views.js +1 -0
  246. package/dist/tools/service.d.ts +2 -0
  247. package/dist/tools/service.js +1 -0
  248. package/dist/tools/utils.d.ts +2 -0
  249. package/dist/tools/utils.js +57 -0
  250. package/dist/tools/views.d.ts +1 -0
  251. package/dist/tools/views.js +1 -0
  252. package/dist/utils.d.ts +10 -1
  253. package/dist/utils.js +70 -3
  254. package/package.json +265 -28
  255. package/dist/dom/playground/process-dom.js +0 -5
  256. package/dist/dom/playground/test-accessibility.d.ts +0 -44
  257. package/dist/dom/playground/test-accessibility.js +0 -111
  258. /package/dist/{dom/playground/process-dom.d.ts → tools/extraction/views.js} +0 -0
@@ -5,10 +5,10 @@
5
5
  * MCP tools are dynamically discovered and registered as browser-use actions.
6
6
  *
7
7
  * Example usage:
8
- * import { Controller } from './controller/service.js';
8
+ * import { Tools } from './tools/service.js';
9
9
  * import { MCPClient } from './mcp/client.js';
10
10
  *
11
- * const controller = new Controller();
11
+ * const tools = new Tools();
12
12
  *
13
13
  * // Connect to an MCP server
14
14
  * const mcpClient = new MCPClient(
@@ -18,7 +18,7 @@
18
18
  * );
19
19
  *
20
20
  * // Register all MCP tools as browser-use actions
21
- * await mcpClient.registerToController(controller);
21
+ * await mcpClient.registerToTools(tools);
22
22
  *
23
23
  * // Now use with Agent as normal - MCP tools are available as actions
24
24
  */
@@ -145,19 +145,20 @@ export class MCPClient {
145
145
  }
146
146
  }
147
147
  async _connectWithTimeout(transport, timeoutSeconds) {
148
- return new Promise(async (resolve, reject) => {
148
+ return new Promise((resolve, reject) => {
149
149
  const timeoutHandle = setTimeout(() => {
150
150
  reject(new Error(`Failed to connect to MCP server '${this.serverName}' after ${timeoutSeconds} seconds`));
151
151
  }, timeoutSeconds * 1000);
152
- try {
153
- await this.client.connect(transport);
152
+ this.client
153
+ .connect(transport)
154
+ .then(() => {
154
155
  clearTimeout(timeoutHandle);
155
156
  resolve();
156
- }
157
- catch (error) {
157
+ })
158
+ .catch((error) => {
158
159
  clearTimeout(timeoutHandle);
159
160
  reject(error);
160
- }
161
+ });
161
162
  });
162
163
  }
163
164
  /**
@@ -249,17 +250,17 @@ export class MCPClient {
249
250
  }
250
251
  }
251
252
  /**
252
- * Register MCP tools as actions in the browser-use controller
253
+ * Register MCP tools as actions in browser-use tools.
253
254
  *
254
- * @param controller - Browser-use controller to register actions to
255
+ * @param tools - Browser-use tools to register actions to
255
256
  * @param toolFilter - Optional list of tool names to register (undefined = all tools)
256
257
  * @param prefix - Optional prefix to add to action names (e.g., "playwright_")
257
258
  */
258
- async registerToController(controller, toolFilter, prefix) {
259
+ async registerToTools(tools, toolFilter, prefix) {
259
260
  if (!this._connected) {
260
261
  await this.connect();
261
262
  }
262
- const registry = controller.registry;
263
+ const registry = tools.registry;
263
264
  for (const [toolName, tool] of this._tools.entries()) {
264
265
  // Skip if not in filter
265
266
  if (toolFilter && !toolFilter.includes(toolName)) {
@@ -277,6 +278,12 @@ export class MCPClient {
277
278
  }
278
279
  logger.info(`✅ Registered ${this._registeredActions.size} MCP tools from '${this.serverName}' as browser-use actions`);
279
280
  }
281
+ /**
282
+ * @deprecated Use `registerToTools` instead.
283
+ */
284
+ async registerToController(controller, toolFilter, prefix) {
285
+ await this.registerToTools(controller, toolFilter, prefix);
286
+ }
280
287
  _registerToolAsAction(registry, actionName, tool) {
281
288
  /**
282
289
  * Register a single MCP tool as a browser-use action
@@ -290,7 +297,6 @@ export class MCPClient {
290
297
  });
291
298
  }
292
299
  const startTime = Date.now() / 1000;
293
- let errorMsg = null;
294
300
  try {
295
301
  // Call the MCP tool
296
302
  const result = await this.callTool(tool.name, params || {});
@@ -302,7 +308,7 @@ export class MCPClient {
302
308
  });
303
309
  }
304
310
  catch (error) {
305
- errorMsg = error instanceof Error ? error.message : String(error);
311
+ const errorMsg = error instanceof Error ? error.message : String(error);
306
312
  logger.error(`MCP tool '${tool.name}' failed: ${errorMsg}`);
307
313
  return new ActionResult({
308
314
  error: `MCP tool '${tool.name}' failed: ${errorMsg}`,
@@ -1,6 +1,45 @@
1
+ import type { Registry } from '../tools/registry/service.js';
2
+ import type { Tools } from '../tools/service.js';
3
+ import { MCPClient, type MCPClientOptions } from './client.js';
4
+ export interface MCPToolWrapperOptions {
5
+ serverName?: string;
6
+ env?: Record<string, string>;
7
+ clientOptions?: MCPClientOptions;
8
+ }
9
+ export declare class MCPToolWrapper {
10
+ private registry;
11
+ private client;
12
+ constructor(registry: Registry, mcpCommand: string, mcpArgs?: string[], options?: MCPToolWrapperOptions);
13
+ connect(toolFilter?: string[], prefix?: string, tools?: Pick<Tools, 'registry'>): Promise<void>;
14
+ disconnect(): Promise<void>;
15
+ getClient(): MCPClient;
16
+ getStats(): {
17
+ serverName: string;
18
+ connected: boolean;
19
+ toolsDiscovered: number;
20
+ promptsDiscovered: number;
21
+ toolCallCount: number;
22
+ errorCount: number;
23
+ successRate: number;
24
+ uptime?: number;
25
+ lastHealthCheck?: number;
26
+ };
27
+ }
28
+ export declare function registerMcpTools(registry: Registry, mcpCommand: string, mcpArgs?: string[], options?: MCPToolWrapperOptions): Promise<MCPToolWrapper>;
29
+ export interface AddMCPServerOptions {
30
+ serverName?: string;
31
+ env?: Record<string, string>;
32
+ clientOptions?: MCPClientOptions;
33
+ toolFilter?: string[];
34
+ prefix?: string;
35
+ tools?: Pick<Tools, 'registry'>;
36
+ }
1
37
  export declare class MCPController {
2
38
  private clients;
3
- constructor();
4
- addServer(command: string, args: string[]): Promise<void>;
5
- private registerTools;
39
+ private tools;
40
+ constructor(tools?: Pick<Tools, 'registry'> | null);
41
+ setTools(tools: Pick<Tools, 'registry'>): void;
42
+ addServer(command: string, args?: string[], options?: AddMCPServerOptions): Promise<MCPClient>;
43
+ getClients(): MCPClient[];
44
+ disconnectAll(): Promise<void>;
6
45
  }
@@ -1,38 +1,63 @@
1
+ import { createLogger } from '../logging-config.js';
1
2
  import { MCPClient } from './client.js';
2
- import { z } from 'zod';
3
- // This controller integrates MCP tools into the browser-use registry
3
+ const logger = createLogger('browser_use.mcp.controller');
4
+ export class MCPToolWrapper {
5
+ registry;
6
+ client;
7
+ constructor(registry, mcpCommand, mcpArgs = [], options = {}) {
8
+ this.registry = registry;
9
+ this.client = new MCPClient(options.serverName ?? 'browser-use-mcp-tools', mcpCommand, mcpArgs, options.env, options.clientOptions);
10
+ }
11
+ async connect(toolFilter, prefix, tools) {
12
+ if (!this.client.isConnected()) {
13
+ await this.client.connect();
14
+ }
15
+ const targetTools = tools ?? { registry: this.registry };
16
+ await this.client.registerToTools(targetTools, toolFilter, prefix);
17
+ }
18
+ async disconnect() {
19
+ await this.client.disconnect();
20
+ }
21
+ getClient() {
22
+ return this.client;
23
+ }
24
+ getStats() {
25
+ return this.client.getStats();
26
+ }
27
+ }
28
+ export async function registerMcpTools(registry, mcpCommand, mcpArgs = [], options = {}) {
29
+ const wrapper = new MCPToolWrapper(registry, mcpCommand, mcpArgs, options);
30
+ await wrapper.connect();
31
+ return wrapper;
32
+ }
33
+ // Backward-compatible helper that can manage multiple MCP clients.
4
34
  export class MCPController {
5
35
  clients = [];
6
- constructor() { }
7
- async addServer(command, args) {
8
- const client = new MCPClient('browser-use-client', command, args);
36
+ tools;
37
+ constructor(tools = null) {
38
+ this.tools = tools;
39
+ }
40
+ setTools(tools) {
41
+ this.tools = tools;
42
+ }
43
+ async addServer(command, args = [], options = {}) {
44
+ const client = new MCPClient(options.serverName ?? `browser-use-client-${this.clients.length + 1}`, command, args, options.env, options.clientOptions);
9
45
  await client.connect();
10
- this.clients.push(client);
11
- await this.registerTools(client);
12
- }
13
- async registerTools(client) {
14
- const tools = await client.listTools();
15
- for (const tool of tools) {
16
- // We need to convert JSON schema to Zod schema dynamically if we want to validate
17
- // For now, we might just use a generic schema or skip validation at the registry level
18
- // and let the MCP server validate.
19
- // However, the Registry expects a Zod schema.
20
- // We can create a dynamic Zod schema that accepts anything if we can't easily convert.
21
- // Or we can try to convert using json-schema-to-zod (if we had it) or just use z.any()
22
- const paramModel = z.any().describe(tool.description || '');
23
- // Register the action
24
- // Note: We need to access the singleton registry or pass it in.
25
- // Assuming we can use the decorator or manual registration.
26
- // Since we are registering dynamically, we might need a method on Registry to register actions at runtime.
27
- // Let's assume Registry has a static method or we can access the instance.
28
- // In the migration plan, Registry is a class.
29
- // We might need to modify Registry to support runtime registration if it doesn't already.
30
- // But wait, the Registry in `src/controller/registry/service.ts` has an `action` method which is a decorator.
31
- // It also has a `registry` property which holds the actions.
32
- // We'll assume we can access the global registry or pass it to this controller.
33
- // For now, I'll just log it as a placeholder for actual registration logic which might require
34
- // more complex integration with the Controller class.
35
- console.log(`Discovered MCP tool: ${tool.name}`);
46
+ const targetTools = options.tools ?? this.tools;
47
+ if (targetTools) {
48
+ await client.registerToTools(targetTools, options.toolFilter, options.prefix);
49
+ }
50
+ else {
51
+ logger.warning('MCPController.addServer connected but skipped tool registration because no Tools instance was provided');
36
52
  }
53
+ this.clients.push(client);
54
+ return client;
55
+ }
56
+ getClients() {
57
+ return [...this.clients];
58
+ }
59
+ async disconnectAll() {
60
+ await Promise.all(this.clients.map((client) => client.disconnect()));
61
+ this.clients = [];
37
62
  }
38
63
  }
@@ -50,16 +50,30 @@ export declare class MCPServer {
50
50
  private toolExecutionCount;
51
51
  private errorCount;
52
52
  private abortController;
53
+ private activeSessions;
54
+ private sessionTimeoutMinutes;
55
+ private sessionCleanupInterval;
53
56
  constructor(name: string, version: string);
54
57
  private resolvePath;
55
58
  private getDefaultProfileConfig;
56
59
  private getDefaultLlmConfig;
60
+ private seedOpenAiApiKeyFromConfig;
61
+ private createLlmFromModelName;
57
62
  private sanitizeProfileConfig;
58
63
  private buildDirectSessionProfile;
59
64
  private buildRetryProfile;
60
65
  private initializeLlmForDirectTools;
61
66
  private initializeFileSystem;
62
67
  private formatRetryResult;
68
+ private trackSession;
69
+ private updateSessionActivity;
70
+ private serializeTrackedSessions;
71
+ private shutdownSession;
72
+ private closeSessionById;
73
+ private closeAllTrackedSessions;
74
+ private cleanupExpiredSessions;
75
+ private startSessionCleanupLoop;
76
+ private stopSessionCleanupLoop;
63
77
  private setupHandlers;
64
78
  private ensureController;
65
79
  private ensureBrowserSession;