@juspay/neurolink 1.5.3 → 1.9.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 (176) hide show
  1. package/CHANGELOG.md +241 -1
  2. package/README.md +113 -20
  3. package/dist/agent/direct-tools.d.ts +1203 -0
  4. package/dist/agent/direct-tools.js +387 -0
  5. package/dist/cli/commands/agent-generate.d.ts +2 -0
  6. package/dist/cli/commands/agent-generate.js +70 -0
  7. package/dist/cli/commands/config.d.ts +76 -9
  8. package/dist/cli/commands/config.js +358 -233
  9. package/dist/cli/commands/mcp.d.ts +2 -1
  10. package/dist/cli/commands/mcp.js +874 -146
  11. package/dist/cli/commands/ollama.d.ts +8 -0
  12. package/dist/cli/commands/ollama.js +333 -0
  13. package/dist/cli/index.js +591 -327
  14. package/dist/cli/utils/complete-setup.d.ts +19 -0
  15. package/dist/cli/utils/complete-setup.js +81 -0
  16. package/dist/cli/utils/env-manager.d.ts +44 -0
  17. package/dist/cli/utils/env-manager.js +226 -0
  18. package/dist/cli/utils/interactive-setup.d.ts +48 -0
  19. package/dist/cli/utils/interactive-setup.js +302 -0
  20. package/dist/core/dynamic-models.d.ts +208 -0
  21. package/dist/core/dynamic-models.js +250 -0
  22. package/dist/core/factory.d.ts +13 -6
  23. package/dist/core/factory.js +180 -50
  24. package/dist/core/types.d.ts +8 -3
  25. package/dist/core/types.js +7 -4
  26. package/dist/index.d.ts +16 -16
  27. package/dist/index.js +16 -16
  28. package/dist/lib/agent/direct-tools.d.ts +1203 -0
  29. package/dist/lib/agent/direct-tools.js +387 -0
  30. package/dist/lib/core/dynamic-models.d.ts +208 -0
  31. package/dist/lib/core/dynamic-models.js +250 -0
  32. package/dist/lib/core/factory.d.ts +13 -6
  33. package/dist/lib/core/factory.js +180 -50
  34. package/dist/lib/core/types.d.ts +8 -3
  35. package/dist/lib/core/types.js +7 -4
  36. package/dist/lib/index.d.ts +16 -16
  37. package/dist/lib/index.js +16 -16
  38. package/dist/lib/mcp/auto-discovery.d.ts +120 -0
  39. package/dist/lib/mcp/auto-discovery.js +793 -0
  40. package/dist/lib/mcp/client.d.ts +66 -0
  41. package/dist/lib/mcp/client.js +245 -0
  42. package/dist/lib/mcp/config.d.ts +31 -0
  43. package/dist/lib/mcp/config.js +74 -0
  44. package/dist/lib/mcp/context-manager.d.ts +4 -4
  45. package/dist/lib/mcp/context-manager.js +24 -18
  46. package/dist/lib/mcp/factory.d.ts +28 -11
  47. package/dist/lib/mcp/factory.js +36 -29
  48. package/dist/lib/mcp/function-calling.d.ts +51 -0
  49. package/dist/lib/mcp/function-calling.js +510 -0
  50. package/dist/lib/mcp/index.d.ts +190 -0
  51. package/dist/lib/mcp/index.js +156 -0
  52. package/dist/lib/mcp/initialize-tools.d.ts +28 -0
  53. package/dist/lib/mcp/initialize-tools.js +209 -0
  54. package/dist/lib/mcp/initialize.d.ts +17 -0
  55. package/dist/lib/mcp/initialize.js +51 -0
  56. package/dist/lib/mcp/logging.d.ts +71 -0
  57. package/dist/lib/mcp/logging.js +183 -0
  58. package/dist/lib/mcp/manager.d.ts +67 -0
  59. package/dist/lib/mcp/manager.js +176 -0
  60. package/dist/lib/mcp/neurolink-mcp-client.d.ts +96 -0
  61. package/dist/lib/mcp/neurolink-mcp-client.js +417 -0
  62. package/dist/lib/mcp/orchestrator.d.ts +3 -3
  63. package/dist/lib/mcp/orchestrator.js +46 -43
  64. package/dist/lib/mcp/registry.d.ts +2 -2
  65. package/dist/lib/mcp/registry.js +42 -33
  66. package/dist/lib/mcp/servers/ai-providers/ai-analysis-tools.d.ts +1 -1
  67. package/dist/lib/mcp/servers/ai-providers/ai-analysis-tools.js +205 -66
  68. package/dist/lib/mcp/servers/ai-providers/ai-core-server.js +143 -99
  69. package/dist/lib/mcp/servers/ai-providers/ai-workflow-tools.d.ts +6 -6
  70. package/dist/lib/mcp/servers/ai-providers/ai-workflow-tools.js +404 -251
  71. package/dist/lib/mcp/servers/utilities/utility-server.d.ts +8 -0
  72. package/dist/lib/mcp/servers/utilities/utility-server.js +326 -0
  73. package/dist/lib/mcp/tool-integration.d.ts +67 -0
  74. package/dist/lib/mcp/tool-integration.js +179 -0
  75. package/dist/lib/mcp/unified-registry.d.ts +269 -0
  76. package/dist/lib/mcp/unified-registry.js +1411 -0
  77. package/dist/lib/neurolink.d.ts +68 -6
  78. package/dist/lib/neurolink.js +314 -42
  79. package/dist/lib/providers/agent-enhanced-provider.d.ts +59 -0
  80. package/dist/lib/providers/agent-enhanced-provider.js +242 -0
  81. package/dist/lib/providers/amazonBedrock.d.ts +3 -3
  82. package/dist/lib/providers/amazonBedrock.js +54 -50
  83. package/dist/lib/providers/anthropic.d.ts +2 -2
  84. package/dist/lib/providers/anthropic.js +92 -84
  85. package/dist/lib/providers/azureOpenAI.d.ts +2 -2
  86. package/dist/lib/providers/azureOpenAI.js +97 -86
  87. package/dist/lib/providers/function-calling-provider.d.ts +70 -0
  88. package/dist/lib/providers/function-calling-provider.js +359 -0
  89. package/dist/lib/providers/googleAIStudio.d.ts +10 -5
  90. package/dist/lib/providers/googleAIStudio.js +60 -38
  91. package/dist/lib/providers/googleVertexAI.d.ts +3 -3
  92. package/dist/lib/providers/googleVertexAI.js +96 -86
  93. package/dist/lib/providers/huggingFace.d.ts +31 -0
  94. package/dist/lib/providers/huggingFace.js +362 -0
  95. package/dist/lib/providers/index.d.ts +14 -8
  96. package/dist/lib/providers/index.js +18 -12
  97. package/dist/lib/providers/mcp-provider.d.ts +62 -0
  98. package/dist/lib/providers/mcp-provider.js +183 -0
  99. package/dist/lib/providers/mistralAI.d.ts +32 -0
  100. package/dist/lib/providers/mistralAI.js +223 -0
  101. package/dist/lib/providers/ollama.d.ts +51 -0
  102. package/dist/lib/providers/ollama.js +508 -0
  103. package/dist/lib/providers/openAI.d.ts +7 -3
  104. package/dist/lib/providers/openAI.js +45 -33
  105. package/dist/lib/utils/logger.js +2 -2
  106. package/dist/lib/utils/providerUtils.js +59 -22
  107. package/dist/mcp/auto-discovery.d.ts +120 -0
  108. package/dist/mcp/auto-discovery.js +794 -0
  109. package/dist/mcp/client.d.ts +66 -0
  110. package/dist/mcp/client.js +245 -0
  111. package/dist/mcp/config.d.ts +31 -0
  112. package/dist/mcp/config.js +74 -0
  113. package/dist/mcp/context-manager.d.ts +4 -4
  114. package/dist/mcp/context-manager.js +24 -18
  115. package/dist/mcp/factory.d.ts +28 -11
  116. package/dist/mcp/factory.js +36 -29
  117. package/dist/mcp/function-calling.d.ts +51 -0
  118. package/dist/mcp/function-calling.js +510 -0
  119. package/dist/mcp/index.d.ts +190 -0
  120. package/dist/mcp/index.js +156 -0
  121. package/dist/mcp/initialize-tools.d.ts +28 -0
  122. package/dist/mcp/initialize-tools.js +210 -0
  123. package/dist/mcp/initialize.d.ts +17 -0
  124. package/dist/mcp/initialize.js +51 -0
  125. package/dist/mcp/logging.d.ts +71 -0
  126. package/dist/mcp/logging.js +183 -0
  127. package/dist/mcp/manager.d.ts +67 -0
  128. package/dist/mcp/manager.js +176 -0
  129. package/dist/mcp/neurolink-mcp-client.d.ts +96 -0
  130. package/dist/mcp/neurolink-mcp-client.js +417 -0
  131. package/dist/mcp/orchestrator.d.ts +3 -3
  132. package/dist/mcp/orchestrator.js +46 -43
  133. package/dist/mcp/registry.d.ts +2 -2
  134. package/dist/mcp/registry.js +42 -33
  135. package/dist/mcp/servers/ai-providers/ai-analysis-tools.d.ts +1 -1
  136. package/dist/mcp/servers/ai-providers/ai-analysis-tools.js +205 -66
  137. package/dist/mcp/servers/ai-providers/ai-core-server.js +143 -99
  138. package/dist/mcp/servers/ai-providers/ai-workflow-tools.d.ts +6 -6
  139. package/dist/mcp/servers/ai-providers/ai-workflow-tools.js +404 -253
  140. package/dist/mcp/servers/utilities/utility-server.d.ts +8 -0
  141. package/dist/mcp/servers/utilities/utility-server.js +326 -0
  142. package/dist/mcp/tool-integration.d.ts +67 -0
  143. package/dist/mcp/tool-integration.js +179 -0
  144. package/dist/mcp/unified-registry.d.ts +269 -0
  145. package/dist/mcp/unified-registry.js +1411 -0
  146. package/dist/neurolink.d.ts +68 -6
  147. package/dist/neurolink.js +314 -42
  148. package/dist/providers/agent-enhanced-provider.d.ts +59 -0
  149. package/dist/providers/agent-enhanced-provider.js +242 -0
  150. package/dist/providers/amazonBedrock.d.ts +3 -3
  151. package/dist/providers/amazonBedrock.js +54 -50
  152. package/dist/providers/anthropic.d.ts +2 -2
  153. package/dist/providers/anthropic.js +92 -84
  154. package/dist/providers/azureOpenAI.d.ts +2 -2
  155. package/dist/providers/azureOpenAI.js +97 -86
  156. package/dist/providers/function-calling-provider.d.ts +70 -0
  157. package/dist/providers/function-calling-provider.js +359 -0
  158. package/dist/providers/googleAIStudio.d.ts +10 -5
  159. package/dist/providers/googleAIStudio.js +60 -38
  160. package/dist/providers/googleVertexAI.d.ts +3 -3
  161. package/dist/providers/googleVertexAI.js +96 -86
  162. package/dist/providers/huggingFace.d.ts +31 -0
  163. package/dist/providers/huggingFace.js +362 -0
  164. package/dist/providers/index.d.ts +14 -8
  165. package/dist/providers/index.js +18 -12
  166. package/dist/providers/mcp-provider.d.ts +62 -0
  167. package/dist/providers/mcp-provider.js +183 -0
  168. package/dist/providers/mistralAI.d.ts +32 -0
  169. package/dist/providers/mistralAI.js +223 -0
  170. package/dist/providers/ollama.d.ts +51 -0
  171. package/dist/providers/ollama.js +508 -0
  172. package/dist/providers/openAI.d.ts +7 -3
  173. package/dist/providers/openAI.js +45 -33
  174. package/dist/utils/logger.js +2 -2
  175. package/dist/utils/providerUtils.js +59 -22
  176. package/package.json +28 -4
@@ -0,0 +1,71 @@
1
+ /**
2
+ * NeuroLink MCP Logging System
3
+ * Provides configurable logging with different verbosity levels
4
+ */
5
+ export declare enum LogLevel {
6
+ SILENT = 0,
7
+ ERROR = 1,
8
+ WARN = 2,
9
+ INFO = 3,
10
+ DEBUG = 4
11
+ }
12
+ export interface LoggerConfig {
13
+ level: LogLevel;
14
+ prefix?: string;
15
+ colors?: boolean;
16
+ timestamp?: boolean;
17
+ }
18
+ /**
19
+ * Configurable logger for MCP operations
20
+ */
21
+ export declare class MCPLogger {
22
+ private config;
23
+ constructor(config?: Partial<LoggerConfig>);
24
+ /**
25
+ * Set log level
26
+ */
27
+ setLevel(level: LogLevel): void;
28
+ /**
29
+ * Get current log level
30
+ */
31
+ getLevel(): LogLevel;
32
+ /**
33
+ * Log an error message
34
+ */
35
+ error(message: string, ...args: any[]): void;
36
+ /**
37
+ * Log a warning message
38
+ */
39
+ warn(message: string, ...args: any[]): void;
40
+ /**
41
+ * Log an info message
42
+ */
43
+ info(message: string, ...args: any[]): void;
44
+ /**
45
+ * Log a debug message
46
+ */
47
+ debug(message: string, ...args: any[]): void;
48
+ /**
49
+ * Internal logging method
50
+ */
51
+ private log;
52
+ }
53
+ /**
54
+ * Create logger instances for different MCP components
55
+ */
56
+ export declare const createLogger: (component: string) => MCPLogger;
57
+ /**
58
+ * Default loggers for common MCP components
59
+ */
60
+ export declare const mcpLogger: MCPLogger;
61
+ export declare const autoDiscoveryLogger: MCPLogger;
62
+ export declare const registryLogger: MCPLogger;
63
+ export declare const unifiedRegistryLogger: MCPLogger;
64
+ /**
65
+ * Utility function to set global MCP log level
66
+ */
67
+ export declare function setGlobalMCPLogLevel(level: LogLevel): void;
68
+ /**
69
+ * Utility function to parse log level from string
70
+ */
71
+ export declare function parseLogLevel(level: string): LogLevel;
@@ -0,0 +1,183 @@
1
+ /**
2
+ * NeuroLink MCP Logging System
3
+ * Provides configurable logging with different verbosity levels
4
+ */
5
+ export var LogLevel;
6
+ (function (LogLevel) {
7
+ LogLevel[LogLevel["SILENT"] = 0] = "SILENT";
8
+ LogLevel[LogLevel["ERROR"] = 1] = "ERROR";
9
+ LogLevel[LogLevel["WARN"] = 2] = "WARN";
10
+ LogLevel[LogLevel["INFO"] = 3] = "INFO";
11
+ LogLevel[LogLevel["DEBUG"] = 4] = "DEBUG";
12
+ })(LogLevel || (LogLevel = {}));
13
+ /**
14
+ * Configurable logger for MCP operations
15
+ */
16
+ export class MCPLogger {
17
+ config;
18
+ constructor(config = {}) {
19
+ // Determine log level from environment or default to SILENT
20
+ const envLogLevel = process.env.NEUROLINK_MCP_LOG_LEVEL?.toUpperCase();
21
+ let defaultLevel = LogLevel.SILENT;
22
+ switch (envLogLevel) {
23
+ case "SILENT":
24
+ defaultLevel = LogLevel.SILENT;
25
+ break;
26
+ case "ERROR":
27
+ defaultLevel = LogLevel.ERROR;
28
+ break;
29
+ case "WARN":
30
+ defaultLevel = LogLevel.WARN;
31
+ break;
32
+ case "INFO":
33
+ defaultLevel = LogLevel.INFO;
34
+ break;
35
+ case "DEBUG":
36
+ defaultLevel = LogLevel.DEBUG;
37
+ break;
38
+ }
39
+ this.config = {
40
+ level: defaultLevel,
41
+ prefix: "",
42
+ colors: true,
43
+ timestamp: false,
44
+ ...config,
45
+ };
46
+ }
47
+ /**
48
+ * Set log level
49
+ */
50
+ setLevel(level) {
51
+ this.config.level = level;
52
+ }
53
+ /**
54
+ * Get current log level
55
+ */
56
+ getLevel() {
57
+ return this.config.level;
58
+ }
59
+ /**
60
+ * Log an error message
61
+ */
62
+ error(message, ...args) {
63
+ if (this.config.level >= LogLevel.ERROR) {
64
+ this.log("ERROR", message, ...args);
65
+ }
66
+ }
67
+ /**
68
+ * Log a warning message
69
+ */
70
+ warn(message, ...args) {
71
+ if (this.config.level >= LogLevel.WARN) {
72
+ this.log("WARN", message, ...args);
73
+ }
74
+ }
75
+ /**
76
+ * Log an info message
77
+ */
78
+ info(message, ...args) {
79
+ if (this.config.level >= LogLevel.INFO) {
80
+ this.log("INFO", message, ...args);
81
+ }
82
+ }
83
+ /**
84
+ * Log a debug message
85
+ */
86
+ debug(message, ...args) {
87
+ if (this.config.level >= LogLevel.DEBUG) {
88
+ this.log("DEBUG", message, ...args);
89
+ }
90
+ }
91
+ /**
92
+ * Internal logging method
93
+ */
94
+ log(level, message, ...args) {
95
+ let output = "";
96
+ // Add timestamp if enabled
97
+ if (this.config.timestamp) {
98
+ output += `[${new Date().toISOString()}] `;
99
+ }
100
+ // Add prefix if configured
101
+ if (this.config.prefix) {
102
+ output += `[${this.config.prefix}] `;
103
+ }
104
+ // Add log level
105
+ if (this.config.colors) {
106
+ switch (level) {
107
+ case "ERROR":
108
+ output += `\x1b[31m[${level}]\x1b[0m `;
109
+ break;
110
+ case "WARN":
111
+ output += `\x1b[33m[${level}]\x1b[0m `;
112
+ break;
113
+ case "INFO":
114
+ output += `\x1b[36m[${level}]\x1b[0m `;
115
+ break;
116
+ case "DEBUG":
117
+ output += `\x1b[90m[${level}]\x1b[0m `;
118
+ break;
119
+ default:
120
+ output += `[${level}] `;
121
+ }
122
+ }
123
+ else {
124
+ output += `[${level}] `;
125
+ }
126
+ // Add message
127
+ output += message;
128
+ // Use appropriate console method
129
+ switch (level) {
130
+ case "ERROR":
131
+ console.error(output, ...args);
132
+ break;
133
+ case "WARN":
134
+ console.warn(output, ...args);
135
+ break;
136
+ default:
137
+ console.log(output, ...args);
138
+ }
139
+ }
140
+ }
141
+ /**
142
+ * Create logger instances for different MCP components
143
+ */
144
+ export const createLogger = (component) => {
145
+ return new MCPLogger({
146
+ prefix: component,
147
+ });
148
+ };
149
+ /**
150
+ * Default loggers for common MCP components
151
+ */
152
+ export const mcpLogger = createLogger("MCP");
153
+ export const autoDiscoveryLogger = createLogger("MCPAutoDiscovery");
154
+ export const registryLogger = createLogger("MCPRegistry");
155
+ export const unifiedRegistryLogger = createLogger("UnifiedMCPRegistry");
156
+ /**
157
+ * Utility function to set global MCP log level
158
+ */
159
+ export function setGlobalMCPLogLevel(level) {
160
+ mcpLogger.setLevel(level);
161
+ autoDiscoveryLogger.setLevel(level);
162
+ registryLogger.setLevel(level);
163
+ unifiedRegistryLogger.setLevel(level);
164
+ }
165
+ /**
166
+ * Utility function to parse log level from string
167
+ */
168
+ export function parseLogLevel(level) {
169
+ switch (level.toUpperCase()) {
170
+ case "SILENT":
171
+ return LogLevel.SILENT;
172
+ case "ERROR":
173
+ return LogLevel.ERROR;
174
+ case "WARN":
175
+ return LogLevel.WARN;
176
+ case "INFO":
177
+ return LogLevel.INFO;
178
+ case "DEBUG":
179
+ return LogLevel.DEBUG;
180
+ default:
181
+ return LogLevel.WARN;
182
+ }
183
+ }
@@ -0,0 +1,67 @@
1
+ /**
2
+ * NeuroLink MCP Manager
3
+ * Manages MCP client instances following Lighthouse's session-based pattern
4
+ */
5
+ import { NeuroLinkMCPClient } from "./client.js";
6
+ import type { MCPClientConfig } from "./client.js";
7
+ /**
8
+ * MCP Manager - Factory pattern for managing multiple client instances
9
+ * Following Lighthouse's session-based architecture
10
+ */
11
+ export declare class NeuroLinkMCPManager {
12
+ private static instances;
13
+ private static lastCleanup;
14
+ private static cleanupInterval;
15
+ /**
16
+ * Get or create an MCP client instance for a session
17
+ */
18
+ static getInstance(sessionId: string, config?: Partial<MCPClientConfig>): NeuroLinkMCPClient;
19
+ /**
20
+ * Remove the oldest instance based on creation time
21
+ */
22
+ private static removeOldestInstance;
23
+ /**
24
+ * Clean up instances that haven't been used recently
25
+ */
26
+ private static cleanupOldInstances;
27
+ /**
28
+ * Get list of active session IDs
29
+ */
30
+ static getActiveSessionIds(): string[];
31
+ /**
32
+ * Remove a specific instance
33
+ */
34
+ static removeInstance(sessionId: string): Promise<boolean>;
35
+ /**
36
+ * Get instance count
37
+ */
38
+ static getInstanceCount(): number;
39
+ /**
40
+ * Get maximum allowed instances
41
+ */
42
+ static getMaxInstances(): number;
43
+ /**
44
+ * Get statistics for all instances
45
+ */
46
+ static getAllStats(): {
47
+ instanceCount: number;
48
+ maxInstances: number;
49
+ instances: Record<string, any>;
50
+ };
51
+ /**
52
+ * Clear all instances (for testing or shutdown)
53
+ */
54
+ static clearAll(): Promise<void>;
55
+ }
56
+ /**
57
+ * Convenience function to get MCP manager instance
58
+ */
59
+ export declare function getMCPManager(sessionId: string, config?: Partial<MCPClientConfig>): NeuroLinkMCPClient;
60
+ /**
61
+ * Convenience function to remove MCP manager instance
62
+ */
63
+ export declare function removeMCPManager(sessionId: string): Promise<boolean>;
64
+ /**
65
+ * Export manager for direct access if needed
66
+ */
67
+ export { NeuroLinkMCPManager as MCPManager };
@@ -0,0 +1,176 @@
1
+ /**
2
+ * NeuroLink MCP Manager
3
+ * Manages MCP client instances following Lighthouse's session-based pattern
4
+ */
5
+ import { createMCPClient } from "./client.js";
6
+ import { logger } from "../utils/logger.js";
7
+ /**
8
+ * Maximum number of concurrent MCP instances
9
+ */
10
+ const MAX_MCP_INSTANCES = 50;
11
+ /**
12
+ * Default MCP configuration
13
+ */
14
+ const DEFAULT_MCP_CONFIG = {
15
+ logLevel: "info",
16
+ };
17
+ /**
18
+ * MCP Manager - Factory pattern for managing multiple client instances
19
+ * Following Lighthouse's session-based architecture
20
+ */
21
+ export class NeuroLinkMCPManager {
22
+ static instances = new Map();
23
+ static lastCleanup = Date.now();
24
+ static cleanupInterval = 60000; // 1 minute
25
+ /**
26
+ * Get or create an MCP client instance for a session
27
+ */
28
+ static getInstance(sessionId, config) {
29
+ // Periodic cleanup of old instances
30
+ if (Date.now() - this.lastCleanup > this.cleanupInterval) {
31
+ this.cleanupOldInstances();
32
+ }
33
+ // Return existing instance if available
34
+ if (this.instances.has(sessionId)) {
35
+ const instance = this.instances.get(sessionId);
36
+ logger.debug(`[MCP Manager] Returning existing instance for session ${sessionId}`);
37
+ return instance;
38
+ }
39
+ // Check if we've reached the maximum number of instances
40
+ if (this.instances.size >= MAX_MCP_INSTANCES) {
41
+ // Remove the oldest instance to make room
42
+ this.removeOldestInstance();
43
+ }
44
+ // Create new instance
45
+ const fullConfig = {
46
+ sessionId,
47
+ ...DEFAULT_MCP_CONFIG,
48
+ ...config,
49
+ };
50
+ const instance = createMCPClient(fullConfig);
51
+ this.instances.set(sessionId, instance);
52
+ logger.info(`[MCP Manager] Created new instance for session ${sessionId}`, {
53
+ instanceCount: this.instances.size,
54
+ config: fullConfig,
55
+ });
56
+ return instance;
57
+ }
58
+ /**
59
+ * Remove the oldest instance based on creation time
60
+ */
61
+ static removeOldestInstance() {
62
+ let oldestSessionId = null;
63
+ let oldestTime = Date.now();
64
+ // Find the oldest instance
65
+ for (const [sessionId, instance] of this.instances.entries()) {
66
+ const stats = instance.getStats();
67
+ const creationTime = Date.now() - stats.uptime;
68
+ if (creationTime < oldestTime) {
69
+ oldestTime = creationTime;
70
+ oldestSessionId = sessionId;
71
+ }
72
+ }
73
+ if (oldestSessionId) {
74
+ const instance = this.instances.get(oldestSessionId);
75
+ instance.disconnect();
76
+ this.instances.delete(oldestSessionId);
77
+ logger.info(`[MCP Manager] Removed oldest instance`, {
78
+ sessionId: oldestSessionId,
79
+ remainingInstances: this.instances.size,
80
+ });
81
+ }
82
+ }
83
+ /**
84
+ * Clean up instances that haven't been used recently
85
+ */
86
+ static cleanupOldInstances() {
87
+ const now = Date.now();
88
+ const maxIdleTime = 300000; // 5 minutes
89
+ const toRemove = [];
90
+ for (const [sessionId, instance] of this.instances.entries()) {
91
+ const stats = instance.getStats();
92
+ // If no executions in the last 5 minutes, mark for removal
93
+ if (stats.executionCount === 0 && now - stats.uptime > maxIdleTime) {
94
+ toRemove.push(sessionId);
95
+ }
96
+ }
97
+ for (const sessionId of toRemove) {
98
+ const instance = this.instances.get(sessionId);
99
+ instance.disconnect();
100
+ this.instances.delete(sessionId);
101
+ }
102
+ if (toRemove.length > 0) {
103
+ logger.info(`[MCP Manager] Cleaned up ${toRemove.length} idle instances`);
104
+ }
105
+ this.lastCleanup = now;
106
+ }
107
+ /**
108
+ * Get list of active session IDs
109
+ */
110
+ static getActiveSessionIds() {
111
+ return Array.from(this.instances.keys());
112
+ }
113
+ /**
114
+ * Remove a specific instance
115
+ */
116
+ static async removeInstance(sessionId) {
117
+ const instance = this.instances.get(sessionId);
118
+ if (instance) {
119
+ await instance.disconnect();
120
+ return this.instances.delete(sessionId);
121
+ }
122
+ return false;
123
+ }
124
+ /**
125
+ * Get instance count
126
+ */
127
+ static getInstanceCount() {
128
+ return this.instances.size;
129
+ }
130
+ /**
131
+ * Get maximum allowed instances
132
+ */
133
+ static getMaxInstances() {
134
+ return MAX_MCP_INSTANCES;
135
+ }
136
+ /**
137
+ * Get statistics for all instances
138
+ */
139
+ static getAllStats() {
140
+ const stats = {};
141
+ for (const [sessionId, instance] of this.instances.entries()) {
142
+ stats[sessionId] = instance.getStats();
143
+ }
144
+ return {
145
+ instanceCount: this.instances.size,
146
+ maxInstances: MAX_MCP_INSTANCES,
147
+ instances: stats,
148
+ };
149
+ }
150
+ /**
151
+ * Clear all instances (for testing or shutdown)
152
+ */
153
+ static async clearAll() {
154
+ for (const instance of this.instances.values()) {
155
+ await instance.disconnect();
156
+ }
157
+ this.instances.clear();
158
+ logger.info("[MCP Manager] Cleared all instances");
159
+ }
160
+ }
161
+ /**
162
+ * Convenience function to get MCP manager instance
163
+ */
164
+ export function getMCPManager(sessionId, config) {
165
+ return NeuroLinkMCPManager.getInstance(sessionId, config);
166
+ }
167
+ /**
168
+ * Convenience function to remove MCP manager instance
169
+ */
170
+ export async function removeMCPManager(sessionId) {
171
+ return NeuroLinkMCPManager.removeInstance(sessionId);
172
+ }
173
+ /**
174
+ * Export manager for direct access if needed
175
+ */
176
+ export { NeuroLinkMCPManager as MCPManager };
@@ -0,0 +1,96 @@
1
+ /**
2
+ * NeuroLink MCP Client with Automatic Tool Detection
3
+ * Implements automatic tool execution based on prompt analysis
4
+ * Following Lighthouse's pattern of prompt-based tool invocation
5
+ */
6
+ import { EventEmitter } from "events";
7
+ import type { AIProvider } from "../core/types.js";
8
+ import type { NeuroLinkMCPTool } from "./factory.js";
9
+ /**
10
+ * Tool Detection Pattern
11
+ */
12
+ interface ToolDetectionPattern {
13
+ patterns: RegExp[];
14
+ toolName: string;
15
+ paramExtractor?: (prompt: string) => Record<string, unknown>;
16
+ }
17
+ /**
18
+ * MCP Client Configuration
19
+ */
20
+ export interface NeuroLinkMCPClientConfig {
21
+ provider: AIProvider;
22
+ providerName?: string;
23
+ modelName?: string;
24
+ sessionId?: string;
25
+ userId?: string;
26
+ organizationId?: string;
27
+ }
28
+ /**
29
+ * NeuroLink MCP Client with Automatic Tool Detection
30
+ */
31
+ export declare class NeuroLinkMCPClient extends EventEmitter {
32
+ private provider;
33
+ private tools;
34
+ private toolPatterns;
35
+ private config;
36
+ private sessionId;
37
+ private executionCount;
38
+ constructor(config: NeuroLinkMCPClientConfig);
39
+ /**
40
+ * Initialize default tool detection patterns
41
+ */
42
+ private initializeDefaultPatterns;
43
+ /**
44
+ * Register a tool with automatic detection patterns
45
+ */
46
+ registerTool(tool: NeuroLinkMCPTool, patterns?: ToolDetectionPattern): void;
47
+ /**
48
+ * Extract tool parameters using AI
49
+ * No hardcoded patterns - let AI figure out the parameters
50
+ */
51
+ private extractToolParameters;
52
+ /**
53
+ * Analyze prompt to detect required tools
54
+ * TRUE AUTOMATIC DETECTION - AI decides which tools to use
55
+ */
56
+ private analyzePrompt;
57
+ /**
58
+ * Execute detected tools
59
+ */
60
+ private executeTools;
61
+ /**
62
+ * Generate response with tool results incorporated
63
+ */
64
+ private generateResponse;
65
+ /**
66
+ * Send a prompt and automatically execute any needed tools
67
+ */
68
+ sendPrompt(prompt: string): Promise<string>;
69
+ /**
70
+ * Get registered tools
71
+ */
72
+ getTools(): Record<string, {
73
+ description?: string;
74
+ inputSchema?: unknown;
75
+ }>;
76
+ /**
77
+ * Get session statistics
78
+ */
79
+ getStats(): {
80
+ sessionId: string;
81
+ toolCount: number;
82
+ patternCount: number;
83
+ executionCount: number;
84
+ provider: string | undefined;
85
+ model: string | undefined;
86
+ };
87
+ /**
88
+ * Clean up resources
89
+ */
90
+ cleanup(): Promise<void>;
91
+ }
92
+ /**
93
+ * Create a new NeuroLink MCP Client instance
94
+ */
95
+ export declare function createNeuroLinkMCPClient(config: NeuroLinkMCPClientConfig): NeuroLinkMCPClient;
96
+ export {};