@juspay/neurolink 3.0.1 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +66 -6
- package/README.md +318 -27
- package/dist/agent/direct-tools.d.ts +6 -6
- package/dist/chat/client-utils.d.ts +92 -0
- package/dist/chat/client-utils.js +298 -0
- package/dist/chat/index.d.ts +27 -0
- package/dist/chat/index.js +41 -0
- package/dist/chat/session-storage.d.ts +77 -0
- package/dist/chat/session-storage.js +233 -0
- package/dist/chat/session.d.ts +95 -0
- package/dist/chat/session.js +257 -0
- package/dist/chat/sse-handler.d.ts +49 -0
- package/dist/chat/sse-handler.js +266 -0
- package/dist/chat/types.d.ts +73 -0
- package/dist/chat/types.js +5 -0
- package/dist/chat/websocket-chat-handler.d.ts +36 -0
- package/dist/chat/websocket-chat-handler.js +262 -0
- package/dist/cli/commands/config.js +12 -12
- package/dist/cli/commands/mcp.js +3 -4
- package/dist/cli/index.d.ts +0 -7
- package/dist/cli/index.js +247 -28
- package/dist/config/configManager.d.ts +60 -0
- package/dist/config/configManager.js +300 -0
- package/dist/config/types.d.ts +136 -0
- package/dist/config/types.js +43 -0
- package/dist/core/analytics.d.ts +23 -0
- package/dist/core/analytics.js +131 -0
- package/dist/core/constants.d.ts +41 -0
- package/dist/core/constants.js +50 -0
- package/dist/core/defaults.d.ts +18 -0
- package/dist/core/defaults.js +29 -0
- package/dist/core/evaluation-config.d.ts +29 -0
- package/dist/core/evaluation-config.js +144 -0
- package/dist/core/evaluation-providers.d.ts +30 -0
- package/dist/core/evaluation-providers.js +187 -0
- package/dist/core/evaluation.d.ts +117 -0
- package/dist/core/evaluation.js +528 -0
- package/dist/core/factory.js +33 -25
- package/dist/core/types.d.ts +165 -6
- package/dist/core/types.js +3 -4
- package/dist/index.d.ts +9 -4
- package/dist/index.js +25 -4
- package/dist/lib/agent/direct-tools.d.ts +6 -6
- package/dist/lib/chat/client-utils.d.ts +92 -0
- package/dist/lib/chat/client-utils.js +298 -0
- package/dist/lib/chat/index.d.ts +27 -0
- package/dist/lib/chat/index.js +41 -0
- package/dist/lib/chat/session-storage.d.ts +77 -0
- package/dist/lib/chat/session-storage.js +233 -0
- package/dist/lib/chat/session.d.ts +95 -0
- package/dist/lib/chat/session.js +257 -0
- package/dist/lib/chat/sse-handler.d.ts +49 -0
- package/dist/lib/chat/sse-handler.js +266 -0
- package/dist/lib/chat/types.d.ts +73 -0
- package/dist/lib/chat/types.js +5 -0
- package/dist/lib/chat/websocket-chat-handler.d.ts +36 -0
- package/dist/lib/chat/websocket-chat-handler.js +262 -0
- package/dist/lib/config/configManager.d.ts +60 -0
- package/dist/lib/config/configManager.js +300 -0
- package/dist/lib/config/types.d.ts +136 -0
- package/dist/lib/config/types.js +43 -0
- package/dist/lib/core/analytics.d.ts +23 -0
- package/dist/lib/core/analytics.js +131 -0
- package/dist/lib/core/constants.d.ts +41 -0
- package/dist/lib/core/constants.js +50 -0
- package/dist/lib/core/defaults.d.ts +18 -0
- package/dist/lib/core/defaults.js +29 -0
- package/dist/lib/core/evaluation-config.d.ts +29 -0
- package/dist/lib/core/evaluation-config.js +144 -0
- package/dist/lib/core/evaluation-providers.d.ts +30 -0
- package/dist/lib/core/evaluation-providers.js +187 -0
- package/dist/lib/core/evaluation.d.ts +117 -0
- package/dist/lib/core/evaluation.js +528 -0
- package/dist/lib/core/factory.js +33 -26
- package/dist/lib/core/types.d.ts +165 -6
- package/dist/lib/core/types.js +3 -4
- package/dist/lib/index.d.ts +9 -4
- package/dist/lib/index.js +25 -4
- package/dist/lib/mcp/contracts/mcpContract.d.ts +118 -0
- package/dist/lib/mcp/contracts/mcpContract.js +5 -0
- package/dist/lib/mcp/dynamic-chain-executor.d.ts +201 -0
- package/dist/lib/mcp/dynamic-chain-executor.js +489 -0
- package/dist/lib/mcp/dynamic-orchestrator.d.ts +109 -0
- package/dist/lib/mcp/dynamic-orchestrator.js +351 -0
- package/dist/lib/mcp/error-manager.d.ts +254 -0
- package/dist/lib/mcp/error-manager.js +501 -0
- package/dist/lib/mcp/error-recovery.d.ts +158 -0
- package/dist/lib/mcp/error-recovery.js +405 -0
- package/dist/lib/mcp/function-calling.js +11 -3
- package/dist/lib/mcp/health-monitor.d.ts +256 -0
- package/dist/lib/mcp/health-monitor.js +621 -0
- package/dist/lib/mcp/logging.js +5 -0
- package/dist/lib/mcp/neurolink-mcp-client.js +2 -1
- package/dist/lib/mcp/orchestrator.d.ts +136 -5
- package/dist/lib/mcp/orchestrator.js +332 -16
- package/dist/lib/mcp/registry.d.ts +71 -16
- package/dist/lib/mcp/registry.js +104 -6
- package/dist/lib/mcp/semaphore-manager.d.ts +137 -0
- package/dist/lib/mcp/semaphore-manager.js +329 -0
- package/dist/lib/mcp/servers/ai-providers/ai-workflow-tools.d.ts +2 -2
- package/dist/lib/mcp/servers/ai-providers/ai-workflow-tools.js +5 -4
- package/dist/lib/mcp/session-manager.d.ts +186 -0
- package/dist/lib/mcp/session-manager.js +400 -0
- package/dist/lib/mcp/session-persistence.d.ts +93 -0
- package/dist/lib/mcp/session-persistence.js +298 -0
- package/dist/lib/mcp/tool-integration.js +1 -1
- package/dist/lib/mcp/tool-registry.d.ts +55 -34
- package/dist/lib/mcp/tool-registry.js +111 -97
- package/dist/lib/mcp/transport-manager.d.ts +153 -0
- package/dist/lib/mcp/transport-manager.js +330 -0
- package/dist/lib/mcp/unified-mcp.js +6 -1
- package/dist/lib/mcp/unified-registry.d.ts +54 -5
- package/dist/lib/mcp/unified-registry.js +139 -6
- package/dist/lib/neurolink.d.ts +101 -0
- package/dist/lib/neurolink.js +147 -1
- package/dist/lib/providers/agent-enhanced-provider.d.ts +11 -2
- package/dist/lib/providers/agent-enhanced-provider.js +86 -15
- package/dist/lib/providers/amazonBedrock.d.ts +9 -1
- package/dist/lib/providers/amazonBedrock.js +26 -2
- package/dist/lib/providers/analytics-helper.d.ts +53 -0
- package/dist/lib/providers/analytics-helper.js +151 -0
- package/dist/lib/providers/anthropic.d.ts +11 -1
- package/dist/lib/providers/anthropic.js +29 -4
- package/dist/lib/providers/azureOpenAI.d.ts +3 -1
- package/dist/lib/providers/azureOpenAI.js +28 -4
- package/dist/lib/providers/function-calling-provider.d.ts +9 -1
- package/dist/lib/providers/function-calling-provider.js +14 -1
- package/dist/lib/providers/googleAIStudio.d.ts +15 -1
- package/dist/lib/providers/googleAIStudio.js +32 -2
- package/dist/lib/providers/googleVertexAI.d.ts +9 -1
- package/dist/lib/providers/googleVertexAI.js +31 -2
- package/dist/lib/providers/huggingFace.d.ts +3 -1
- package/dist/lib/providers/huggingFace.js +26 -3
- package/dist/lib/providers/mcp-provider.d.ts +9 -1
- package/dist/lib/providers/mcp-provider.js +12 -0
- package/dist/lib/providers/mistralAI.d.ts +3 -1
- package/dist/lib/providers/mistralAI.js +25 -2
- package/dist/lib/providers/ollama.d.ts +3 -1
- package/dist/lib/providers/ollama.js +27 -4
- package/dist/lib/providers/openAI.d.ts +15 -1
- package/dist/lib/providers/openAI.js +32 -2
- package/dist/lib/proxy/proxy-fetch.js +8 -7
- package/dist/lib/services/streaming/streaming-manager.d.ts +29 -0
- package/dist/lib/services/streaming/streaming-manager.js +244 -0
- package/dist/lib/services/types.d.ts +155 -0
- package/dist/lib/services/types.js +2 -0
- package/dist/lib/services/websocket/websocket-server.d.ts +34 -0
- package/dist/lib/services/websocket/websocket-server.js +304 -0
- package/dist/lib/telemetry/index.d.ts +15 -0
- package/dist/lib/telemetry/index.js +22 -0
- package/dist/lib/telemetry/telemetry-service.d.ts +47 -0
- package/dist/lib/telemetry/telemetry-service.js +259 -0
- package/dist/lib/utils/streaming-utils.d.ts +67 -0
- package/dist/lib/utils/streaming-utils.js +201 -0
- package/dist/mcp/contracts/mcpContract.d.ts +118 -0
- package/dist/mcp/contracts/mcpContract.js +5 -0
- package/dist/mcp/dynamic-chain-executor.d.ts +201 -0
- package/dist/mcp/dynamic-chain-executor.js +489 -0
- package/dist/mcp/dynamic-orchestrator.d.ts +109 -0
- package/dist/mcp/dynamic-orchestrator.js +351 -0
- package/dist/mcp/error-manager.d.ts +254 -0
- package/dist/mcp/error-manager.js +501 -0
- package/dist/mcp/error-recovery.d.ts +158 -0
- package/dist/mcp/error-recovery.js +405 -0
- package/dist/mcp/function-calling.js +11 -3
- package/dist/mcp/health-monitor.d.ts +256 -0
- package/dist/mcp/health-monitor.js +621 -0
- package/dist/mcp/logging.js +5 -0
- package/dist/mcp/neurolink-mcp-client.js +2 -1
- package/dist/mcp/orchestrator.d.ts +136 -5
- package/dist/mcp/orchestrator.js +332 -16
- package/dist/mcp/plugins/core/neurolink-mcp.json +15 -15
- package/dist/mcp/registry.d.ts +71 -16
- package/dist/mcp/registry.js +104 -6
- package/dist/mcp/semaphore-manager.d.ts +137 -0
- package/dist/mcp/semaphore-manager.js +329 -0
- package/dist/mcp/servers/ai-providers/ai-workflow-tools.d.ts +2 -2
- package/dist/mcp/servers/ai-providers/ai-workflow-tools.js +5 -4
- package/dist/mcp/session-manager.d.ts +186 -0
- package/dist/mcp/session-manager.js +400 -0
- package/dist/mcp/session-persistence.d.ts +93 -0
- package/dist/mcp/session-persistence.js +299 -0
- package/dist/mcp/tool-integration.js +1 -1
- package/dist/mcp/tool-registry.d.ts +55 -34
- package/dist/mcp/tool-registry.js +111 -97
- package/dist/mcp/transport-manager.d.ts +153 -0
- package/dist/mcp/transport-manager.js +331 -0
- package/dist/mcp/unified-mcp.js +6 -1
- package/dist/mcp/unified-registry.d.ts +54 -5
- package/dist/mcp/unified-registry.js +139 -6
- package/dist/neurolink.d.ts +101 -0
- package/dist/neurolink.js +147 -1
- package/dist/providers/agent-enhanced-provider.d.ts +11 -2
- package/dist/providers/agent-enhanced-provider.js +86 -15
- package/dist/providers/amazonBedrock.d.ts +9 -1
- package/dist/providers/amazonBedrock.js +26 -2
- package/dist/providers/analytics-helper.d.ts +53 -0
- package/dist/providers/analytics-helper.js +151 -0
- package/dist/providers/anthropic.d.ts +11 -1
- package/dist/providers/anthropic.js +29 -4
- package/dist/providers/azureOpenAI.d.ts +3 -1
- package/dist/providers/azureOpenAI.js +29 -4
- package/dist/providers/function-calling-provider.d.ts +9 -1
- package/dist/providers/function-calling-provider.js +14 -1
- package/dist/providers/googleAIStudio.d.ts +15 -1
- package/dist/providers/googleAIStudio.js +32 -2
- package/dist/providers/googleVertexAI.d.ts +9 -1
- package/dist/providers/googleVertexAI.js +31 -2
- package/dist/providers/huggingFace.d.ts +3 -1
- package/dist/providers/huggingFace.js +26 -3
- package/dist/providers/mcp-provider.d.ts +9 -1
- package/dist/providers/mcp-provider.js +12 -0
- package/dist/providers/mistralAI.d.ts +3 -1
- package/dist/providers/mistralAI.js +25 -2
- package/dist/providers/ollama.d.ts +3 -1
- package/dist/providers/ollama.js +27 -4
- package/dist/providers/openAI.d.ts +15 -1
- package/dist/providers/openAI.js +33 -2
- package/dist/proxy/proxy-fetch.js +8 -7
- package/dist/services/streaming/streaming-manager.d.ts +29 -0
- package/dist/services/streaming/streaming-manager.js +244 -0
- package/dist/services/types.d.ts +155 -0
- package/dist/services/types.js +2 -0
- package/dist/services/websocket/websocket-server.d.ts +34 -0
- package/dist/services/websocket/websocket-server.js +304 -0
- package/dist/telemetry/index.d.ts +15 -0
- package/dist/telemetry/index.js +22 -0
- package/dist/telemetry/telemetry-service.d.ts +47 -0
- package/dist/telemetry/telemetry-service.js +261 -0
- package/dist/utils/streaming-utils.d.ts +67 -0
- package/dist/utils/streaming-utils.js +201 -0
- package/package.json +245 -228
package/dist/mcp/registry.d.ts
CHANGED
|
@@ -1,16 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* MCP Registry -
|
|
2
|
+
* MCP Registry - Industry Standard Interface with camelCase
|
|
3
3
|
*/
|
|
4
|
-
import type {
|
|
4
|
+
import type { DiscoveredMcp, ExecutionContext, ToolInfo } from "./contracts/mcpContract.js";
|
|
5
|
+
/**
|
|
6
|
+
* MCP Registry interface with optional methods for maximum flexibility
|
|
7
|
+
*/
|
|
8
|
+
export interface McpRegistry {
|
|
9
|
+
registerServer?(serverId: string, serverConfig?: unknown, context?: ExecutionContext): Promise<void>;
|
|
10
|
+
executeTool?<T = unknown>(toolName: string, args?: unknown, context?: ExecutionContext): Promise<T>;
|
|
11
|
+
listTools?(context?: ExecutionContext): Promise<ToolInfo[]>;
|
|
12
|
+
}
|
|
5
13
|
/**
|
|
6
14
|
* Simple MCP registry for plugin management
|
|
15
|
+
* Maintains backward compatibility with existing code
|
|
7
16
|
*/
|
|
8
|
-
export declare class MCPRegistry {
|
|
17
|
+
export declare class MCPRegistry implements McpRegistry {
|
|
9
18
|
private plugins;
|
|
10
19
|
/**
|
|
11
20
|
* Register a plugin
|
|
12
21
|
*/
|
|
13
|
-
register(plugin:
|
|
22
|
+
register(plugin: DiscoveredMcp): void;
|
|
14
23
|
/**
|
|
15
24
|
* Unregister a plugin
|
|
16
25
|
*/
|
|
@@ -18,11 +27,11 @@ export declare class MCPRegistry {
|
|
|
18
27
|
/**
|
|
19
28
|
* Get a plugin
|
|
20
29
|
*/
|
|
21
|
-
get(name: string):
|
|
30
|
+
get(name: string): DiscoveredMcp | undefined;
|
|
22
31
|
/**
|
|
23
32
|
* List all plugins
|
|
24
33
|
*/
|
|
25
|
-
list():
|
|
34
|
+
list(): DiscoveredMcp[];
|
|
26
35
|
/**
|
|
27
36
|
* Check if plugin exists
|
|
28
37
|
*/
|
|
@@ -31,17 +40,63 @@ export declare class MCPRegistry {
|
|
|
31
40
|
* Clear all plugins
|
|
32
41
|
*/
|
|
33
42
|
clear(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Register a server (compatible with new interface)
|
|
45
|
+
*/
|
|
46
|
+
registerServer(serverId: string, serverConfig?: unknown, context?: ExecutionContext): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Execute a tool (mock implementation for tests)
|
|
49
|
+
*/
|
|
50
|
+
executeTool<T = unknown>(toolName: string, args?: unknown, context?: ExecutionContext): Promise<T>;
|
|
51
|
+
/**
|
|
52
|
+
* List all tools (compatible with new interface)
|
|
53
|
+
*/
|
|
54
|
+
listTools(context?: ExecutionContext): Promise<ToolInfo[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Register a server (legacy sync version)
|
|
57
|
+
*/
|
|
58
|
+
registerServerSync(plugin: DiscoveredMcp): void;
|
|
59
|
+
/**
|
|
60
|
+
* Execute a tool (legacy sync version)
|
|
61
|
+
*/
|
|
62
|
+
executeToolSync(toolName: string, args?: unknown): any;
|
|
63
|
+
/**
|
|
64
|
+
* List all tools (legacy sync version)
|
|
65
|
+
*/
|
|
66
|
+
listToolsSync(): Array<{
|
|
67
|
+
name: string;
|
|
68
|
+
description?: string;
|
|
69
|
+
}>;
|
|
70
|
+
/**
|
|
71
|
+
* List all registered server IDs
|
|
72
|
+
*
|
|
73
|
+
* Returns an array of server IDs that are currently registered in the MCP registry.
|
|
74
|
+
* This complements listTools() by providing server-level information, while listTools()
|
|
75
|
+
* provides tool-level information across all servers.
|
|
76
|
+
*
|
|
77
|
+
* @returns Array of registered server identifier strings
|
|
78
|
+
* @see listTools() for getting detailed tool information from all servers
|
|
79
|
+
* @see list() for getting complete server metadata objects
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```typescript
|
|
83
|
+
* const serverIds = registry.listServers();
|
|
84
|
+
* // ['ai-core', 'external-api', 'database-connector']
|
|
85
|
+
*
|
|
86
|
+
* // Compare with listTools() for comprehensive overview:
|
|
87
|
+
* const servers = registry.listServers(); // ['server1', 'server2']
|
|
88
|
+
* const tools = await registry.listTools(); // [{ name: 'tool1', serverId: 'server1' }, ...]
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
listServers(): string[];
|
|
34
92
|
}
|
|
35
93
|
/**
|
|
36
|
-
*
|
|
94
|
+
* Enhanced MCP Registry implementation with config integration
|
|
95
|
+
* Will be implemented in Phase 3.2
|
|
37
96
|
*/
|
|
38
|
-
export declare
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
preferredSource?: string;
|
|
44
|
-
fallbackEnabled?: boolean;
|
|
45
|
-
validateBeforeExecution?: boolean;
|
|
46
|
-
timeoutMs?: number;
|
|
97
|
+
export declare class McpRegistryImpl implements McpRegistry {
|
|
98
|
+
private baseRegistry;
|
|
99
|
+
registerServer(serverId: string, serverConfig?: unknown, context?: ExecutionContext): Promise<void>;
|
|
100
|
+
executeTool<T = unknown>(toolName: string, args?: unknown, context?: ExecutionContext): Promise<T>;
|
|
101
|
+
listTools(context?: ExecutionContext): Promise<ToolInfo[]>;
|
|
47
102
|
}
|
package/dist/mcp/registry.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* MCP Registry -
|
|
2
|
+
* MCP Registry - Industry Standard Interface with camelCase
|
|
3
3
|
*/
|
|
4
4
|
import { registryLogger } from "./logging.js";
|
|
5
5
|
/**
|
|
6
6
|
* Simple MCP registry for plugin management
|
|
7
|
+
* Maintains backward compatibility with existing code
|
|
7
8
|
*/
|
|
8
9
|
export class MCPRegistry {
|
|
9
10
|
plugins = new Map();
|
|
@@ -49,11 +50,108 @@ export class MCPRegistry {
|
|
|
49
50
|
this.plugins.clear();
|
|
50
51
|
registryLogger.info("Registry cleared");
|
|
51
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Register a server (compatible with new interface)
|
|
55
|
+
*/
|
|
56
|
+
async registerServer(serverId, serverConfig, context) {
|
|
57
|
+
const plugin = {
|
|
58
|
+
metadata: {
|
|
59
|
+
name: serverId,
|
|
60
|
+
description: typeof serverConfig === "object" && serverConfig
|
|
61
|
+
? serverConfig.description || "No description"
|
|
62
|
+
: "No description",
|
|
63
|
+
},
|
|
64
|
+
tools: typeof serverConfig === "object" && serverConfig
|
|
65
|
+
? serverConfig.tools
|
|
66
|
+
: {},
|
|
67
|
+
configuration: typeof serverConfig === "object" && serverConfig
|
|
68
|
+
? serverConfig
|
|
69
|
+
: {},
|
|
70
|
+
};
|
|
71
|
+
this.register(plugin);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Execute a tool (mock implementation for tests)
|
|
75
|
+
*/
|
|
76
|
+
async executeTool(toolName, args, context) {
|
|
77
|
+
registryLogger.info(`Executing tool: ${toolName}`);
|
|
78
|
+
return { result: `Mock execution of ${toolName}`, args };
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* List all tools (compatible with new interface)
|
|
82
|
+
*/
|
|
83
|
+
async listTools(context) {
|
|
84
|
+
const tools = this.list().map((plugin) => ({
|
|
85
|
+
name: plugin.metadata.name,
|
|
86
|
+
description: plugin.metadata.description || "No description",
|
|
87
|
+
serverId: plugin.metadata.name,
|
|
88
|
+
category: "general",
|
|
89
|
+
}));
|
|
90
|
+
return tools;
|
|
91
|
+
}
|
|
92
|
+
// Legacy methods for backward compatibility
|
|
93
|
+
/**
|
|
94
|
+
* Register a server (legacy sync version)
|
|
95
|
+
*/
|
|
96
|
+
registerServerSync(plugin) {
|
|
97
|
+
this.register(plugin);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Execute a tool (legacy sync version)
|
|
101
|
+
*/
|
|
102
|
+
executeToolSync(toolName, args) {
|
|
103
|
+
registryLogger.info(`Executing tool (sync): ${toolName}`);
|
|
104
|
+
return { result: `Mock execution of ${toolName}`, args };
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* List all tools (legacy sync version)
|
|
108
|
+
*/
|
|
109
|
+
listToolsSync() {
|
|
110
|
+
const tools = this.list().map((plugin) => ({
|
|
111
|
+
name: plugin.metadata.name,
|
|
112
|
+
description: plugin.metadata.description || "No description",
|
|
113
|
+
}));
|
|
114
|
+
return tools;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* List all registered server IDs
|
|
118
|
+
*
|
|
119
|
+
* Returns an array of server IDs that are currently registered in the MCP registry.
|
|
120
|
+
* This complements listTools() by providing server-level information, while listTools()
|
|
121
|
+
* provides tool-level information across all servers.
|
|
122
|
+
*
|
|
123
|
+
* @returns Array of registered server identifier strings
|
|
124
|
+
* @see listTools() for getting detailed tool information from all servers
|
|
125
|
+
* @see list() for getting complete server metadata objects
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```typescript
|
|
129
|
+
* const serverIds = registry.listServers();
|
|
130
|
+
* // ['ai-core', 'external-api', 'database-connector']
|
|
131
|
+
*
|
|
132
|
+
* // Compare with listTools() for comprehensive overview:
|
|
133
|
+
* const servers = registry.listServers(); // ['server1', 'server2']
|
|
134
|
+
* const tools = await registry.listTools(); // [{ name: 'tool1', serverId: 'server1' }, ...]
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
listServers() {
|
|
138
|
+
return Array.from(this.plugins.keys());
|
|
139
|
+
}
|
|
52
140
|
}
|
|
53
141
|
/**
|
|
54
|
-
*
|
|
142
|
+
* Enhanced MCP Registry implementation with config integration
|
|
143
|
+
* Will be implemented in Phase 3.2
|
|
55
144
|
*/
|
|
56
|
-
export
|
|
57
|
-
|
|
58
|
-
// Additional
|
|
59
|
-
|
|
145
|
+
export class McpRegistryImpl {
|
|
146
|
+
baseRegistry = new MCPRegistry();
|
|
147
|
+
// Additional implementation will be added in Phase 3.2
|
|
148
|
+
async registerServer(serverId, serverConfig, context) {
|
|
149
|
+
return this.baseRegistry.registerServer(serverId, serverConfig, context);
|
|
150
|
+
}
|
|
151
|
+
async executeTool(toolName, args, context) {
|
|
152
|
+
return this.baseRegistry.executeTool(toolName, args, context);
|
|
153
|
+
}
|
|
154
|
+
async listTools(context) {
|
|
155
|
+
return this.baseRegistry.listTools(context);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NeuroLink MCP Semaphore Manager
|
|
3
|
+
* Prevents race conditions in concurrent tool executions using a robust semaphore pattern
|
|
4
|
+
* Based on proven patterns from 1MCP reference implementation
|
|
5
|
+
*/
|
|
6
|
+
import type { NeuroLinkExecutionContext } from "./factory.js";
|
|
7
|
+
/**
|
|
8
|
+
* Semaphore operation result
|
|
9
|
+
*/
|
|
10
|
+
export interface SemaphoreResult<T> {
|
|
11
|
+
success: boolean;
|
|
12
|
+
result?: T;
|
|
13
|
+
error?: Error;
|
|
14
|
+
waitTime: number;
|
|
15
|
+
executionTime: number;
|
|
16
|
+
queueDepth: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Semaphore statistics
|
|
20
|
+
*/
|
|
21
|
+
export interface SemaphoreStats {
|
|
22
|
+
activeOperations: number;
|
|
23
|
+
queuedOperations: number;
|
|
24
|
+
totalOperations: number;
|
|
25
|
+
totalWaitTime: number;
|
|
26
|
+
averageWaitTime: number;
|
|
27
|
+
peakQueueDepth: number;
|
|
28
|
+
lastActivity: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Semaphore Manager for concurrent operation control
|
|
32
|
+
* Implements the proven semaphore pattern from 1MCP to prevent race conditions
|
|
33
|
+
*/
|
|
34
|
+
export declare class SemaphoreManager {
|
|
35
|
+
private locks;
|
|
36
|
+
private queues;
|
|
37
|
+
private stats;
|
|
38
|
+
private globalStats;
|
|
39
|
+
/**
|
|
40
|
+
* Acquire a semaphore and execute an operation
|
|
41
|
+
* Ensures exclusive access to resources identified by the key
|
|
42
|
+
*
|
|
43
|
+
* @param key Unique identifier for the resource
|
|
44
|
+
* @param operation Async operation to execute with exclusive access
|
|
45
|
+
* @param context Optional execution context for enhanced tracking
|
|
46
|
+
* @returns Result of the operation with timing metrics
|
|
47
|
+
*/
|
|
48
|
+
acquire<T>(key: string, operation: () => Promise<T>, context?: NeuroLinkExecutionContext): Promise<SemaphoreResult<T>>;
|
|
49
|
+
/**
|
|
50
|
+
* Try to acquire a semaphore without waiting
|
|
51
|
+
* Returns immediately if the resource is locked
|
|
52
|
+
*
|
|
53
|
+
* @param key Unique identifier for the resource
|
|
54
|
+
* @param operation Async operation to execute if lock is available
|
|
55
|
+
* @param context Optional execution context
|
|
56
|
+
* @returns Result of the operation or null if resource is locked
|
|
57
|
+
*/
|
|
58
|
+
tryAcquire<T>(key: string, operation: () => Promise<T>, context?: NeuroLinkExecutionContext): Promise<SemaphoreResult<T> | null>;
|
|
59
|
+
/**
|
|
60
|
+
* Check if a resource is currently locked
|
|
61
|
+
*
|
|
62
|
+
* @param key Resource identifier
|
|
63
|
+
* @returns True if the resource is locked
|
|
64
|
+
*/
|
|
65
|
+
isLocked(key: string): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Get the current queue depth for a resource
|
|
68
|
+
*
|
|
69
|
+
* @param key Resource identifier
|
|
70
|
+
* @returns Number of operations waiting for this resource
|
|
71
|
+
*/
|
|
72
|
+
getQueueDepth(key: string): number;
|
|
73
|
+
/**
|
|
74
|
+
* Get statistics for a specific resource or global stats
|
|
75
|
+
*
|
|
76
|
+
* @param key Optional resource identifier
|
|
77
|
+
* @returns Semaphore statistics
|
|
78
|
+
*/
|
|
79
|
+
getStats(key?: string): SemaphoreStats;
|
|
80
|
+
/**
|
|
81
|
+
* Clear all semaphores (use with caution)
|
|
82
|
+
* This will reject all pending operations
|
|
83
|
+
*/
|
|
84
|
+
clearAll(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Update queue depth statistics
|
|
87
|
+
*
|
|
88
|
+
* @private
|
|
89
|
+
*/
|
|
90
|
+
private updateQueueDepth;
|
|
91
|
+
/**
|
|
92
|
+
* Increment active operations counter
|
|
93
|
+
*
|
|
94
|
+
* @private
|
|
95
|
+
*/
|
|
96
|
+
private incrementActiveOperations;
|
|
97
|
+
/**
|
|
98
|
+
* Decrement active operations counter
|
|
99
|
+
*
|
|
100
|
+
* @private
|
|
101
|
+
*/
|
|
102
|
+
private decrementActiveOperations;
|
|
103
|
+
/**
|
|
104
|
+
* Update timing statistics
|
|
105
|
+
*
|
|
106
|
+
* @private
|
|
107
|
+
*/
|
|
108
|
+
private updateStats;
|
|
109
|
+
/**
|
|
110
|
+
* Create empty statistics object
|
|
111
|
+
*
|
|
112
|
+
* @private
|
|
113
|
+
*/
|
|
114
|
+
private createEmptyStats;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Default semaphore manager instance
|
|
118
|
+
*/
|
|
119
|
+
export declare const defaultSemaphoreManager: SemaphoreManager;
|
|
120
|
+
/**
|
|
121
|
+
* Utility function to acquire semaphore with default manager
|
|
122
|
+
*
|
|
123
|
+
* @param key Resource identifier
|
|
124
|
+
* @param operation Operation to execute
|
|
125
|
+
* @param context Optional execution context
|
|
126
|
+
* @returns Operation result with metrics
|
|
127
|
+
*/
|
|
128
|
+
export declare function acquireSemaphore<T>(key: string, operation: () => Promise<T>, context?: NeuroLinkExecutionContext): Promise<SemaphoreResult<T>>;
|
|
129
|
+
/**
|
|
130
|
+
* Utility function to try acquiring semaphore without waiting
|
|
131
|
+
*
|
|
132
|
+
* @param key Resource identifier
|
|
133
|
+
* @param operation Operation to execute
|
|
134
|
+
* @param context Optional execution context
|
|
135
|
+
* @returns Operation result or null if locked
|
|
136
|
+
*/
|
|
137
|
+
export declare function tryAcquireSemaphore<T>(key: string, operation: () => Promise<T>, context?: NeuroLinkExecutionContext): Promise<SemaphoreResult<T> | null>;
|