@juspay/neurolink 1.10.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -33
- package/README.md +16 -0
- package/dist/agent/direct-tools.d.ts +9 -9
- package/dist/cli/commands/agent-generate.d.ts +1 -2
- package/dist/cli/commands/agent-generate.js +5 -8
- package/dist/cli/commands/config.d.ts +2 -2
- package/dist/cli/commands/config.js +1 -1
- package/dist/cli/commands/mcp.js +91 -100
- package/dist/cli/commands/ollama.d.ts +2 -7
- package/dist/cli/commands/ollama.js +5 -8
- package/dist/cli/index.js +185 -276
- package/dist/core/factory.js +9 -10
- package/dist/index.d.ts +23 -0
- package/dist/index.js +35 -0
- package/dist/lib/agent/direct-tools.d.ts +9 -9
- package/dist/lib/core/factory.js +9 -10
- package/dist/lib/index.d.ts +23 -0
- package/dist/lib/index.js +35 -0
- package/dist/lib/mcp/adapters/plugin-bridge.d.ts +39 -0
- package/dist/lib/mcp/adapters/plugin-bridge.js +82 -0
- package/dist/lib/mcp/auto-discovery.d.ts +38 -96
- package/dist/lib/mcp/auto-discovery.js +100 -744
- package/dist/lib/mcp/client.js +4 -4
- package/dist/lib/mcp/context-manager.js +72 -1
- package/dist/lib/mcp/contracts/mcp-contract.d.ts +162 -0
- package/dist/lib/mcp/contracts/mcp-contract.js +58 -0
- package/dist/lib/mcp/core/plugin-manager.d.ts +45 -0
- package/dist/lib/mcp/core/plugin-manager.js +110 -0
- package/dist/lib/mcp/demo/plugin-demo.d.ts +20 -0
- package/dist/lib/mcp/demo/plugin-demo.js +116 -0
- package/dist/lib/mcp/ecosystem.d.ts +75 -0
- package/dist/lib/mcp/ecosystem.js +161 -0
- package/dist/lib/mcp/external-client.d.ts +88 -0
- package/dist/lib/mcp/external-client.js +323 -0
- package/dist/lib/mcp/external-manager.d.ts +112 -0
- package/dist/lib/mcp/external-manager.js +302 -0
- package/dist/lib/mcp/factory.d.ts +4 -4
- package/dist/lib/mcp/function-calling.js +59 -34
- package/dist/lib/mcp/index.d.ts +39 -184
- package/dist/lib/mcp/index.js +72 -150
- package/dist/lib/mcp/initialize.js +5 -5
- package/dist/lib/mcp/logging.d.ts +27 -60
- package/dist/lib/mcp/logging.js +77 -165
- package/dist/lib/mcp/neurolink-mcp-client.js +31 -3
- package/dist/lib/mcp/orchestrator.d.ts +1 -1
- package/dist/lib/mcp/orchestrator.js +13 -12
- package/dist/lib/mcp/plugin-manager.d.ts +98 -0
- package/dist/lib/mcp/plugin-manager.js +294 -0
- package/dist/lib/mcp/plugins/core/filesystem-mcp.d.ts +35 -0
- package/dist/lib/mcp/plugins/core/filesystem-mcp.js +139 -0
- package/dist/lib/mcp/plugins/filesystem-mcp.d.ts +36 -0
- package/dist/lib/mcp/plugins/filesystem-mcp.js +54 -0
- package/dist/lib/mcp/registry.d.ts +27 -176
- package/dist/lib/mcp/registry.js +31 -372
- package/dist/lib/mcp/security-manager.d.ts +85 -0
- package/dist/lib/mcp/security-manager.js +344 -0
- package/dist/lib/mcp/servers/ai-providers/ai-workflow-tools.d.ts +2 -2
- package/dist/lib/mcp/tool-integration.d.ts +4 -14
- package/dist/lib/mcp/tool-integration.js +43 -21
- package/dist/lib/mcp/tool-registry.d.ts +66 -0
- package/dist/lib/mcp/tool-registry.js +160 -0
- package/dist/lib/mcp/unified-mcp.d.ts +123 -0
- package/dist/lib/mcp/unified-mcp.js +246 -0
- package/dist/lib/mcp/unified-registry.d.ts +42 -229
- package/dist/lib/mcp/unified-registry.js +96 -1346
- package/dist/lib/neurolink.d.ts +3 -4
- package/dist/lib/neurolink.js +17 -18
- package/dist/lib/providers/agent-enhanced-provider.js +2 -2
- package/dist/lib/providers/amazonBedrock.js +2 -2
- package/dist/lib/providers/anthropic.js +3 -3
- package/dist/lib/providers/azureOpenAI.js +3 -3
- package/dist/lib/providers/function-calling-provider.js +34 -25
- package/dist/lib/providers/googleAIStudio.js +3 -3
- package/dist/lib/providers/googleVertexAI.js +2 -2
- package/dist/lib/providers/huggingFace.js +2 -2
- package/dist/lib/providers/mcp-provider.js +33 -5
- package/dist/lib/providers/mistralAI.js +2 -2
- package/dist/lib/providers/ollama.js +2 -2
- package/dist/lib/providers/openAI.js +2 -2
- package/dist/lib/utils/providerUtils-fixed.js +9 -9
- package/dist/mcp/adapters/plugin-bridge.d.ts +39 -0
- package/dist/mcp/adapters/plugin-bridge.js +82 -0
- package/dist/mcp/auto-discovery.d.ts +38 -96
- package/dist/mcp/auto-discovery.js +100 -745
- package/dist/mcp/client.js +4 -4
- package/dist/mcp/context-manager.js +72 -1
- package/dist/mcp/contracts/mcp-contract.d.ts +162 -0
- package/dist/mcp/contracts/mcp-contract.js +58 -0
- package/dist/mcp/core/plugin-manager.d.ts +45 -0
- package/dist/mcp/core/plugin-manager.js +110 -0
- package/dist/mcp/demo/plugin-demo.d.ts +20 -0
- package/dist/mcp/demo/plugin-demo.js +116 -0
- package/dist/mcp/ecosystem.d.ts +75 -0
- package/dist/mcp/ecosystem.js +162 -0
- package/dist/mcp/external-client.d.ts +88 -0
- package/dist/mcp/external-client.js +323 -0
- package/dist/mcp/external-manager.d.ts +112 -0
- package/dist/mcp/external-manager.js +302 -0
- package/dist/mcp/factory.d.ts +4 -4
- package/dist/mcp/function-calling.js +59 -34
- package/dist/mcp/index.d.ts +39 -184
- package/dist/mcp/index.js +72 -150
- package/dist/mcp/initialize.js +5 -5
- package/dist/mcp/logging.d.ts +27 -60
- package/dist/mcp/logging.js +77 -165
- package/dist/mcp/neurolink-mcp-client.js +31 -3
- package/dist/mcp/orchestrator.d.ts +1 -1
- package/dist/mcp/orchestrator.js +13 -12
- package/dist/mcp/plugin-manager.d.ts +98 -0
- package/dist/mcp/plugin-manager.js +295 -0
- package/dist/mcp/plugins/core/filesystem-mcp.d.ts +35 -0
- package/dist/mcp/plugins/core/filesystem-mcp.js +139 -0
- package/dist/mcp/plugins/core/neurolink-mcp.json +17 -0
- package/dist/mcp/plugins/filesystem-mcp.d.ts +36 -0
- package/dist/mcp/plugins/filesystem-mcp.js +54 -0
- package/dist/mcp/registry.d.ts +27 -176
- package/dist/mcp/registry.js +31 -372
- package/dist/mcp/security-manager.d.ts +85 -0
- package/dist/mcp/security-manager.js +344 -0
- package/dist/mcp/servers/ai-providers/ai-workflow-tools.d.ts +2 -2
- package/dist/mcp/tool-integration.d.ts +4 -14
- package/dist/mcp/tool-integration.js +43 -21
- package/dist/mcp/tool-registry.d.ts +66 -0
- package/dist/mcp/tool-registry.js +160 -0
- package/dist/mcp/unified-mcp.d.ts +123 -0
- package/dist/mcp/unified-mcp.js +246 -0
- package/dist/mcp/unified-registry.d.ts +42 -229
- package/dist/mcp/unified-registry.js +96 -1345
- package/dist/neurolink.d.ts +3 -4
- package/dist/neurolink.js +17 -18
- package/dist/providers/agent-enhanced-provider.js +2 -2
- package/dist/providers/amazonBedrock.js +2 -2
- package/dist/providers/anthropic.js +3 -3
- package/dist/providers/azureOpenAI.js +3 -3
- package/dist/providers/function-calling-provider.js +34 -25
- package/dist/providers/googleAIStudio.js +3 -3
- package/dist/providers/googleVertexAI.js +2 -2
- package/dist/providers/huggingFace.js +2 -2
- package/dist/providers/mcp-provider.js +33 -5
- package/dist/providers/mistralAI.js +2 -2
- package/dist/providers/ollama.js +2 -2
- package/dist/providers/openAI.js +2 -2
- package/dist/utils/providerUtils-fixed.js +9 -9
- package/package.json +1 -1
package/dist/mcp/logging.js
CHANGED
|
@@ -1,183 +1,95 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* MCP Logging Utility
|
|
3
|
+
* Centralized logging for the MCP ecosystem
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
5
|
+
class MCPLogger {
|
|
6
|
+
logLevel = "info";
|
|
7
|
+
logs = [];
|
|
8
|
+
maxLogs = 1000;
|
|
9
|
+
constructor() {
|
|
10
|
+
// Set log level from environment
|
|
11
|
+
const envLevel = process.env.MCP_LOG_LEVEL?.toLowerCase();
|
|
12
|
+
if (envLevel && ["debug", "info", "warn", "error"].includes(envLevel)) {
|
|
13
|
+
this.logLevel = envLevel;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
setLogLevel(level) {
|
|
17
|
+
this.logLevel = level;
|
|
18
|
+
}
|
|
19
|
+
shouldLog(level) {
|
|
20
|
+
const levels = ["debug", "info", "warn", "error"];
|
|
21
|
+
return levels.indexOf(level) >= levels.indexOf(this.logLevel);
|
|
22
|
+
}
|
|
23
|
+
log(level, message, data) {
|
|
24
|
+
if (!this.shouldLog(level)) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const entry = {
|
|
28
|
+
level,
|
|
29
|
+
message,
|
|
30
|
+
timestamp: new Date(),
|
|
31
|
+
data,
|
|
32
|
+
};
|
|
33
|
+
// Store log entry
|
|
34
|
+
this.logs.push(entry);
|
|
35
|
+
// Trim old logs
|
|
36
|
+
if (this.logs.length > this.maxLogs) {
|
|
37
|
+
this.logs = this.logs.slice(-this.maxLogs);
|
|
38
|
+
}
|
|
39
|
+
// Console output
|
|
40
|
+
const timestamp = entry.timestamp.toISOString();
|
|
41
|
+
const prefix = `[${timestamp}] [MCP:${level.toUpperCase()}]`;
|
|
42
|
+
switch (level) {
|
|
43
|
+
case "debug":
|
|
44
|
+
console.debug(prefix, message, data ? data : "");
|
|
28
45
|
break;
|
|
29
|
-
case "
|
|
30
|
-
|
|
46
|
+
case "info":
|
|
47
|
+
console.info(prefix, message, data ? data : "");
|
|
31
48
|
break;
|
|
32
|
-
case "
|
|
33
|
-
|
|
49
|
+
case "warn":
|
|
50
|
+
console.warn(prefix, message, data ? data : "");
|
|
34
51
|
break;
|
|
35
|
-
case "
|
|
36
|
-
|
|
52
|
+
case "error":
|
|
53
|
+
console.error(prefix, message, data ? data : "");
|
|
37
54
|
break;
|
|
38
55
|
}
|
|
39
|
-
this.config = {
|
|
40
|
-
level: defaultLevel,
|
|
41
|
-
prefix: "",
|
|
42
|
-
colors: true,
|
|
43
|
-
timestamp: false,
|
|
44
|
-
...config,
|
|
45
|
-
};
|
|
46
56
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
*/
|
|
50
|
-
setLevel(level) {
|
|
51
|
-
this.config.level = level;
|
|
57
|
+
debug(message, data) {
|
|
58
|
+
this.log("debug", message, data);
|
|
52
59
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
*/
|
|
56
|
-
getLevel() {
|
|
57
|
-
return this.config.level;
|
|
60
|
+
info(message, data) {
|
|
61
|
+
this.log("info", message, data);
|
|
58
62
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
*/
|
|
62
|
-
error(message, ...args) {
|
|
63
|
-
if (this.config.level >= LogLevel.ERROR) {
|
|
64
|
-
this.log("ERROR", message, ...args);
|
|
65
|
-
}
|
|
63
|
+
warn(message, data) {
|
|
64
|
+
this.log("warn", message, data);
|
|
66
65
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
*/
|
|
70
|
-
warn(message, ...args) {
|
|
71
|
-
if (this.config.level >= LogLevel.WARN) {
|
|
72
|
-
this.log("WARN", message, ...args);
|
|
73
|
-
}
|
|
66
|
+
error(message, data) {
|
|
67
|
+
this.log("error", message, data);
|
|
74
68
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
info(message, ...args) {
|
|
79
|
-
if (this.config.level >= LogLevel.INFO) {
|
|
80
|
-
this.log("INFO", message, ...args);
|
|
69
|
+
getLogs(level) {
|
|
70
|
+
if (level) {
|
|
71
|
+
return this.logs.filter((log) => log.level === level);
|
|
81
72
|
}
|
|
73
|
+
return [...this.logs];
|
|
82
74
|
}
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
}
|
|
75
|
+
clearLogs() {
|
|
76
|
+
this.logs = [];
|
|
139
77
|
}
|
|
140
78
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
export const
|
|
145
|
-
|
|
146
|
-
|
|
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
|
-
*/
|
|
79
|
+
// Export singleton instance
|
|
80
|
+
export const mcpLogger = new MCPLogger();
|
|
81
|
+
// Additional logger instances for different modules
|
|
82
|
+
export const autoDiscoveryLogger = mcpLogger;
|
|
83
|
+
export const registryLogger = mcpLogger;
|
|
84
|
+
export const unifiedRegistryLogger = mcpLogger;
|
|
85
|
+
// Global log level setter
|
|
159
86
|
export function setGlobalMCPLogLevel(level) {
|
|
160
|
-
mcpLogger.
|
|
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
|
-
}
|
|
87
|
+
mcpLogger.setLogLevel(level);
|
|
183
88
|
}
|
|
89
|
+
// Export LogLevel enum for runtime use
|
|
90
|
+
export const LogLevels = {
|
|
91
|
+
debug: "debug",
|
|
92
|
+
info: "info",
|
|
93
|
+
warn: "warn",
|
|
94
|
+
error: "error",
|
|
95
|
+
};
|
|
@@ -218,11 +218,39 @@ Response (JSON array only):`;
|
|
|
218
218
|
// Create execution context
|
|
219
219
|
const context = {
|
|
220
220
|
sessionId: this.sessionId,
|
|
221
|
-
userId: this.config.userId,
|
|
222
|
-
organizationId: this.config.organizationId,
|
|
223
|
-
aiProvider: this.config.providerName,
|
|
221
|
+
userId: this.config.userId || "anonymous",
|
|
222
|
+
organizationId: this.config.organizationId || "default",
|
|
223
|
+
aiProvider: this.config.providerName || "unknown",
|
|
224
224
|
modelId: this.config.modelName,
|
|
225
225
|
timestamp: Date.now(),
|
|
226
|
+
// Required properties
|
|
227
|
+
secureFS: {
|
|
228
|
+
readFile: async () => {
|
|
229
|
+
throw new Error("secureFS not configured");
|
|
230
|
+
},
|
|
231
|
+
writeFile: async () => {
|
|
232
|
+
throw new Error("secureFS not configured");
|
|
233
|
+
},
|
|
234
|
+
readdir: async () => {
|
|
235
|
+
throw new Error("secureFS not configured");
|
|
236
|
+
},
|
|
237
|
+
stat: async () => {
|
|
238
|
+
throw new Error("secureFS not configured");
|
|
239
|
+
},
|
|
240
|
+
mkdir: async () => {
|
|
241
|
+
throw new Error("secureFS not configured");
|
|
242
|
+
},
|
|
243
|
+
exists: async () => false,
|
|
244
|
+
},
|
|
245
|
+
path: {
|
|
246
|
+
join: (...paths) => require("path").join(...paths),
|
|
247
|
+
resolve: (...paths) => require("path").resolve(...paths),
|
|
248
|
+
relative: (from, to) => require("path").relative(from, to),
|
|
249
|
+
dirname: (path) => require("path").dirname(path),
|
|
250
|
+
basename: (path, ext) => require("path").basename(path, ext),
|
|
251
|
+
},
|
|
252
|
+
grantedPermissions: [],
|
|
253
|
+
log: console.log,
|
|
226
254
|
};
|
|
227
255
|
// Emit tool start event
|
|
228
256
|
this.executionCount++;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Coordinates factory, registry, context, and AI tools for seamless operation
|
|
5
5
|
*/
|
|
6
6
|
import type { ToolResult } from "./factory.js";
|
|
7
|
-
import { MCPToolRegistry, type ToolExecutionOptions } from "./registry.js";
|
|
7
|
+
import { MCPToolRegistry, type ToolExecutionOptions } from "./tool-registry.js";
|
|
8
8
|
import { ContextManager, type ContextRequest } from "./context-manager.js";
|
|
9
9
|
/**
|
|
10
10
|
* Pipeline execution options
|
package/dist/mcp/orchestrator.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Central orchestrator for coordinated tool execution with pipeline management
|
|
4
4
|
* Coordinates factory, registry, context, and AI tools for seamless operation
|
|
5
5
|
*/
|
|
6
|
-
import { MCPToolRegistry, defaultToolRegistry, } from "./registry.js";
|
|
6
|
+
import { MCPToolRegistry, defaultToolRegistry, } from "./tool-registry.js";
|
|
7
7
|
import { ContextManager, defaultContextManager, createExecutionContext, } from "./context-manager.js";
|
|
8
8
|
import { aiCoreServer } from "./servers/ai-providers/ai-core-server.js";
|
|
9
9
|
/**
|
|
@@ -25,7 +25,7 @@ export class MCPOrchestrator {
|
|
|
25
25
|
*/
|
|
26
26
|
async initializeDefaultServers() {
|
|
27
27
|
try {
|
|
28
|
-
await this.registry.registerServer(aiCoreServer);
|
|
28
|
+
await this.registry.registerServer(aiCoreServer.id, aiCoreServer);
|
|
29
29
|
console.log("[Orchestrator] Initialized with AI Core Server");
|
|
30
30
|
}
|
|
31
31
|
catch (error) {
|
|
@@ -46,7 +46,7 @@ export class MCPOrchestrator {
|
|
|
46
46
|
const context = this.contextManager.createContext(contextRequest);
|
|
47
47
|
console.log(`[Orchestrator] Executing tool '${toolName}' in session ${context.sessionId}`);
|
|
48
48
|
// Execute tool through registry
|
|
49
|
-
const result = await this.registry.executeTool(toolName, params, context
|
|
49
|
+
const result = await this.registry.executeTool(toolName, params, context);
|
|
50
50
|
console.log(`[Orchestrator] Tool '${toolName}' execution ${result.success ? "completed" : "failed"}`);
|
|
51
51
|
return result;
|
|
52
52
|
}
|
|
@@ -88,16 +88,14 @@ export class MCPOrchestrator {
|
|
|
88
88
|
const stepId = step.stepId || `step-${stepsExecuted + 1}`;
|
|
89
89
|
try {
|
|
90
90
|
console.log(`[Orchestrator] Executing step: ${stepId} (${step.toolName})`);
|
|
91
|
-
const stepResult = await this.registry.executeTool(step.toolName, step.params, context
|
|
92
|
-
...step.options,
|
|
93
|
-
validateInput: validateInputs,
|
|
94
|
-
trackMetrics,
|
|
95
|
-
timeoutMs: timeout / steps.length, // Distribute timeout across steps
|
|
96
|
-
});
|
|
91
|
+
const stepResult = await this.registry.executeTool(step.toolName, step.params, context);
|
|
97
92
|
results.set(stepId, stepResult);
|
|
98
93
|
stepsExecuted++;
|
|
99
94
|
if (!stepResult.success) {
|
|
100
|
-
|
|
95
|
+
const errorMessage = stepResult.error instanceof Error
|
|
96
|
+
? stepResult.error.message
|
|
97
|
+
: stepResult.error || "Unknown error";
|
|
98
|
+
errors.set(stepId, errorMessage);
|
|
101
99
|
if (stopOnError) {
|
|
102
100
|
console.error(`[Orchestrator] Pipeline ${pipelineId} stopped due to error in step ${stepId}`);
|
|
103
101
|
break;
|
|
@@ -300,10 +298,13 @@ export class MCPOrchestrator {
|
|
|
300
298
|
executing.add(stepId);
|
|
301
299
|
const step = stepMap.get(stepId);
|
|
302
300
|
try {
|
|
303
|
-
const result = await this.registry.executeTool(step.toolName, step.params, context
|
|
301
|
+
const result = await this.registry.executeTool(step.toolName, step.params, context);
|
|
304
302
|
results.set(stepId, result);
|
|
305
303
|
if (!result.success) {
|
|
306
|
-
|
|
304
|
+
const errorMessage = result.error instanceof Error
|
|
305
|
+
? result.error.message
|
|
306
|
+
: result.error || "Unknown error";
|
|
307
|
+
errors.set(stepId, errorMessage);
|
|
307
308
|
}
|
|
308
309
|
}
|
|
309
310
|
catch (error) {
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PluginManager - Central Orchestrator for MCP Lifecycle
|
|
3
|
+
* Implements generic factory pattern with manifest-based discovery
|
|
4
|
+
* Based on research blueprint for extensible plugin architecture
|
|
5
|
+
*/
|
|
6
|
+
import { MCP } from "./contracts/mcp-contract.js";
|
|
7
|
+
import type { MCPMetadata } from "./contracts/mcp-contract.js";
|
|
8
|
+
/**
|
|
9
|
+
* Plugin Manager Configuration
|
|
10
|
+
*/
|
|
11
|
+
interface PluginManagerConfig {
|
|
12
|
+
/** Enable/disable plugin discovery */
|
|
13
|
+
enableDiscovery?: boolean;
|
|
14
|
+
/** Custom plugin directories */
|
|
15
|
+
pluginDirectories?: string[];
|
|
16
|
+
/** Security level for plugins */
|
|
17
|
+
securityLevel?: "strict" | "moderate" | "permissive";
|
|
18
|
+
/** Maximum plugins to load */
|
|
19
|
+
maxPlugins?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Central Plugin Manager implementing the research blueprint
|
|
23
|
+
*/
|
|
24
|
+
export declare class PluginManager {
|
|
25
|
+
private static instance;
|
|
26
|
+
private mcpConstructors;
|
|
27
|
+
private mcpInstances;
|
|
28
|
+
private discoveredMCPs;
|
|
29
|
+
private securityManager;
|
|
30
|
+
private initialized;
|
|
31
|
+
private config;
|
|
32
|
+
private constructor();
|
|
33
|
+
/**
|
|
34
|
+
* Get the singleton instance
|
|
35
|
+
*/
|
|
36
|
+
static getInstance(config?: PluginManagerConfig): PluginManager;
|
|
37
|
+
/**
|
|
38
|
+
* Initialize the plugin manager with discovery
|
|
39
|
+
*/
|
|
40
|
+
initialize(): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Discover plugins following research blueprint priority:
|
|
43
|
+
* 1. Core plugins (bundled)
|
|
44
|
+
* 2. Project plugins (./neurolink-mcp/)
|
|
45
|
+
* 3. Installed plugins (node_modules)
|
|
46
|
+
*/
|
|
47
|
+
private discoverPlugins;
|
|
48
|
+
/**
|
|
49
|
+
* Discover core plugins bundled with NeuroLink
|
|
50
|
+
*/
|
|
51
|
+
private discoverCorePlugins;
|
|
52
|
+
/**
|
|
53
|
+
* Discover project-local plugins
|
|
54
|
+
*/
|
|
55
|
+
private discoverProjectPlugins;
|
|
56
|
+
/**
|
|
57
|
+
* Discover installed plugins from node_modules
|
|
58
|
+
*/
|
|
59
|
+
private discoverInstalledPlugins;
|
|
60
|
+
/**
|
|
61
|
+
* Discover plugins in a specific directory
|
|
62
|
+
*/
|
|
63
|
+
private discoverPluginsInDirectory;
|
|
64
|
+
/**
|
|
65
|
+
* Validate manifest structure
|
|
66
|
+
*/
|
|
67
|
+
private validateManifest;
|
|
68
|
+
/**
|
|
69
|
+
* Generic Factory Method - Creates type-safe MCP instances
|
|
70
|
+
* Core implementation of the research blueprint
|
|
71
|
+
*/
|
|
72
|
+
createInstance<T extends MCP>(name: string, config: unknown): Promise<T>;
|
|
73
|
+
/**
|
|
74
|
+
* Get or load constructor for an MCP
|
|
75
|
+
*/
|
|
76
|
+
private getConstructor;
|
|
77
|
+
/**
|
|
78
|
+
* List all discovered MCPs
|
|
79
|
+
*/
|
|
80
|
+
listDiscovered(): MCPMetadata[];
|
|
81
|
+
/**
|
|
82
|
+
* Get metadata for a specific MCP
|
|
83
|
+
*/
|
|
84
|
+
getMetadata(name: string): MCPMetadata | null;
|
|
85
|
+
/**
|
|
86
|
+
* Get discovery statistics
|
|
87
|
+
*/
|
|
88
|
+
getDiscoveryStats(): Record<string, number>;
|
|
89
|
+
/**
|
|
90
|
+
* Dispose of all instances and cleanup
|
|
91
|
+
*/
|
|
92
|
+
dispose(): Promise<void>;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Export singleton instance getter
|
|
96
|
+
*/
|
|
97
|
+
export declare const pluginManager: PluginManager;
|
|
98
|
+
export {};
|