@juspay/neurolink 1.6.0 → 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.
- package/CHANGELOG.md +193 -7
- package/README.md +100 -17
- package/dist/agent/direct-tools.d.ts +1203 -0
- package/dist/agent/direct-tools.js +387 -0
- package/dist/cli/commands/agent-generate.d.ts +2 -0
- package/dist/cli/commands/agent-generate.js +70 -0
- package/dist/cli/commands/config.d.ts +6 -6
- package/dist/cli/commands/config.js +326 -273
- package/dist/cli/commands/mcp.d.ts +2 -1
- package/dist/cli/commands/mcp.js +874 -146
- package/dist/cli/commands/ollama.d.ts +1 -1
- package/dist/cli/commands/ollama.js +153 -143
- package/dist/cli/index.js +589 -323
- package/dist/cli/utils/complete-setup.d.ts +19 -0
- package/dist/cli/utils/complete-setup.js +81 -0
- package/dist/cli/utils/env-manager.d.ts +44 -0
- package/dist/cli/utils/env-manager.js +226 -0
- package/dist/cli/utils/interactive-setup.d.ts +48 -0
- package/dist/cli/utils/interactive-setup.js +302 -0
- package/dist/core/dynamic-models.d.ts +208 -0
- package/dist/core/dynamic-models.js +250 -0
- package/dist/core/factory.d.ts +13 -6
- package/dist/core/factory.js +176 -61
- package/dist/core/types.d.ts +4 -2
- package/dist/core/types.js +4 -4
- package/dist/index.d.ts +16 -16
- package/dist/index.js +16 -16
- package/dist/lib/agent/direct-tools.d.ts +1203 -0
- package/dist/lib/agent/direct-tools.js +387 -0
- package/dist/lib/core/dynamic-models.d.ts +208 -0
- package/dist/lib/core/dynamic-models.js +250 -0
- package/dist/lib/core/factory.d.ts +13 -6
- package/dist/lib/core/factory.js +176 -61
- package/dist/lib/core/types.d.ts +4 -2
- package/dist/lib/core/types.js +4 -4
- package/dist/lib/index.d.ts +16 -16
- package/dist/lib/index.js +16 -16
- package/dist/lib/mcp/auto-discovery.d.ts +120 -0
- package/dist/lib/mcp/auto-discovery.js +793 -0
- package/dist/lib/mcp/client.d.ts +66 -0
- package/dist/lib/mcp/client.js +245 -0
- package/dist/lib/mcp/config.d.ts +31 -0
- package/dist/lib/mcp/config.js +74 -0
- package/dist/lib/mcp/context-manager.d.ts +4 -4
- package/dist/lib/mcp/context-manager.js +24 -18
- package/dist/lib/mcp/factory.d.ts +28 -11
- package/dist/lib/mcp/factory.js +36 -29
- package/dist/lib/mcp/function-calling.d.ts +51 -0
- package/dist/lib/mcp/function-calling.js +510 -0
- package/dist/lib/mcp/index.d.ts +190 -0
- package/dist/lib/mcp/index.js +156 -0
- package/dist/lib/mcp/initialize-tools.d.ts +28 -0
- package/dist/lib/mcp/initialize-tools.js +209 -0
- package/dist/lib/mcp/initialize.d.ts +17 -0
- package/dist/lib/mcp/initialize.js +51 -0
- package/dist/lib/mcp/logging.d.ts +71 -0
- package/dist/lib/mcp/logging.js +183 -0
- package/dist/lib/mcp/manager.d.ts +67 -0
- package/dist/lib/mcp/manager.js +176 -0
- package/dist/lib/mcp/neurolink-mcp-client.d.ts +96 -0
- package/dist/lib/mcp/neurolink-mcp-client.js +417 -0
- package/dist/lib/mcp/orchestrator.d.ts +3 -3
- package/dist/lib/mcp/orchestrator.js +46 -43
- package/dist/lib/mcp/registry.d.ts +2 -2
- package/dist/lib/mcp/registry.js +42 -33
- package/dist/lib/mcp/servers/ai-providers/ai-analysis-tools.d.ts +1 -1
- package/dist/lib/mcp/servers/ai-providers/ai-analysis-tools.js +204 -65
- package/dist/lib/mcp/servers/ai-providers/ai-core-server.js +142 -102
- package/dist/lib/mcp/servers/ai-providers/ai-workflow-tools.d.ts +6 -6
- package/dist/lib/mcp/servers/ai-providers/ai-workflow-tools.js +197 -142
- package/dist/lib/mcp/servers/utilities/utility-server.d.ts +8 -0
- package/dist/lib/mcp/servers/utilities/utility-server.js +326 -0
- package/dist/lib/mcp/tool-integration.d.ts +67 -0
- package/dist/lib/mcp/tool-integration.js +179 -0
- package/dist/lib/mcp/unified-registry.d.ts +269 -0
- package/dist/lib/mcp/unified-registry.js +1411 -0
- package/dist/lib/neurolink.d.ts +68 -6
- package/dist/lib/neurolink.js +304 -42
- package/dist/lib/providers/agent-enhanced-provider.d.ts +59 -0
- package/dist/lib/providers/agent-enhanced-provider.js +242 -0
- package/dist/lib/providers/amazonBedrock.d.ts +3 -3
- package/dist/lib/providers/amazonBedrock.js +54 -50
- package/dist/lib/providers/anthropic.d.ts +2 -2
- package/dist/lib/providers/anthropic.js +92 -84
- package/dist/lib/providers/azureOpenAI.d.ts +2 -2
- package/dist/lib/providers/azureOpenAI.js +97 -86
- package/dist/lib/providers/function-calling-provider.d.ts +70 -0
- package/dist/lib/providers/function-calling-provider.js +359 -0
- package/dist/lib/providers/googleAIStudio.d.ts +10 -5
- package/dist/lib/providers/googleAIStudio.js +60 -38
- package/dist/lib/providers/googleVertexAI.d.ts +3 -3
- package/dist/lib/providers/googleVertexAI.js +96 -86
- package/dist/lib/providers/huggingFace.d.ts +3 -3
- package/dist/lib/providers/huggingFace.js +70 -63
- package/dist/lib/providers/index.d.ts +11 -11
- package/dist/lib/providers/index.js +18 -18
- package/dist/lib/providers/mcp-provider.d.ts +62 -0
- package/dist/lib/providers/mcp-provider.js +183 -0
- package/dist/lib/providers/mistralAI.d.ts +3 -3
- package/dist/lib/providers/mistralAI.js +42 -36
- package/dist/lib/providers/ollama.d.ts +4 -4
- package/dist/lib/providers/ollama.js +113 -98
- package/dist/lib/providers/openAI.d.ts +7 -3
- package/dist/lib/providers/openAI.js +45 -33
- package/dist/lib/utils/logger.js +2 -2
- package/dist/lib/utils/providerUtils.js +53 -31
- package/dist/mcp/auto-discovery.d.ts +120 -0
- package/dist/mcp/auto-discovery.js +794 -0
- package/dist/mcp/client.d.ts +66 -0
- package/dist/mcp/client.js +245 -0
- package/dist/mcp/config.d.ts +31 -0
- package/dist/mcp/config.js +74 -0
- package/dist/mcp/context-manager.d.ts +4 -4
- package/dist/mcp/context-manager.js +24 -18
- package/dist/mcp/factory.d.ts +28 -11
- package/dist/mcp/factory.js +36 -29
- package/dist/mcp/function-calling.d.ts +51 -0
- package/dist/mcp/function-calling.js +510 -0
- package/dist/mcp/index.d.ts +190 -0
- package/dist/mcp/index.js +156 -0
- package/dist/mcp/initialize-tools.d.ts +28 -0
- package/dist/mcp/initialize-tools.js +210 -0
- package/dist/mcp/initialize.d.ts +17 -0
- package/dist/mcp/initialize.js +51 -0
- package/dist/mcp/logging.d.ts +71 -0
- package/dist/mcp/logging.js +183 -0
- package/dist/mcp/manager.d.ts +67 -0
- package/dist/mcp/manager.js +176 -0
- package/dist/mcp/neurolink-mcp-client.d.ts +96 -0
- package/dist/mcp/neurolink-mcp-client.js +417 -0
- package/dist/mcp/orchestrator.d.ts +3 -3
- package/dist/mcp/orchestrator.js +46 -43
- package/dist/mcp/registry.d.ts +2 -2
- package/dist/mcp/registry.js +42 -33
- package/dist/mcp/servers/ai-providers/ai-analysis-tools.d.ts +1 -1
- package/dist/mcp/servers/ai-providers/ai-analysis-tools.js +204 -65
- package/dist/mcp/servers/ai-providers/ai-core-server.js +142 -102
- package/dist/mcp/servers/ai-providers/ai-workflow-tools.d.ts +6 -6
- package/dist/mcp/servers/ai-providers/ai-workflow-tools.js +197 -142
- package/dist/mcp/servers/utilities/utility-server.d.ts +8 -0
- package/dist/mcp/servers/utilities/utility-server.js +326 -0
- package/dist/mcp/tool-integration.d.ts +67 -0
- package/dist/mcp/tool-integration.js +179 -0
- package/dist/mcp/unified-registry.d.ts +269 -0
- package/dist/mcp/unified-registry.js +1411 -0
- package/dist/neurolink.d.ts +68 -6
- package/dist/neurolink.js +304 -42
- package/dist/providers/agent-enhanced-provider.d.ts +59 -0
- package/dist/providers/agent-enhanced-provider.js +242 -0
- package/dist/providers/amazonBedrock.d.ts +3 -3
- package/dist/providers/amazonBedrock.js +54 -50
- package/dist/providers/anthropic.d.ts +2 -2
- package/dist/providers/anthropic.js +92 -84
- package/dist/providers/azureOpenAI.d.ts +2 -2
- package/dist/providers/azureOpenAI.js +97 -86
- package/dist/providers/function-calling-provider.d.ts +70 -0
- package/dist/providers/function-calling-provider.js +359 -0
- package/dist/providers/googleAIStudio.d.ts +10 -5
- package/dist/providers/googleAIStudio.js +60 -38
- package/dist/providers/googleVertexAI.d.ts +3 -3
- package/dist/providers/googleVertexAI.js +96 -86
- package/dist/providers/huggingFace.d.ts +3 -3
- package/dist/providers/huggingFace.js +70 -63
- package/dist/providers/index.d.ts +11 -11
- package/dist/providers/index.js +18 -18
- package/dist/providers/mcp-provider.d.ts +62 -0
- package/dist/providers/mcp-provider.js +183 -0
- package/dist/providers/mistralAI.d.ts +3 -3
- package/dist/providers/mistralAI.js +42 -36
- package/dist/providers/ollama.d.ts +4 -4
- package/dist/providers/ollama.js +113 -98
- package/dist/providers/openAI.d.ts +7 -3
- package/dist/providers/openAI.js +45 -33
- package/dist/utils/logger.js +2 -2
- package/dist/utils/providerUtils.js +53 -31
- package/package.json +175 -161
|
@@ -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 {};
|