sdlc-agent-4-enterprise-server 1.45.0 → 1.46.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/dist/engine/parsers/languages/cpp.js +1 -1
- package/dist/engine/parsers/languages/cpp.js.map +1 -1
- package/dist/engine/parsers/languages/jsp-parser.js +2 -2
- package/dist/engine/parsers/languages/jsp-parser.js.map +1 -1
- package/dist/modules/orchestration/McpClientManager.d.ts +7 -17
- package/dist/modules/orchestration/McpClientManager.js +39 -190
- package/dist/modules/orchestration/McpClientManager.js.map +1 -1
- package/dist/modules/orchestration/McpServerConfigLoader.d.ts +20 -0
- package/dist/modules/orchestration/McpServerConfigLoader.js +66 -0
- package/dist/modules/orchestration/McpServerConfigLoader.js.map +1 -0
- package/dist/modules/orchestration/ProxiedToolRegistry.d.ts +25 -0
- package/dist/modules/orchestration/ProxiedToolRegistry.js +55 -0
- package/dist/modules/orchestration/ProxiedToolRegistry.js.map +1 -0
- package/dist/modules/orchestration/health/HealthCoordinator.d.ts +42 -0
- package/dist/modules/orchestration/health/HealthCoordinator.js +112 -0
- package/dist/modules/orchestration/health/HealthCoordinator.js.map +1 -0
- package/dist/modules/orchestration/health/ReconnectManager.js +0 -1
- package/dist/modules/orchestration/health/ReconnectManager.js.map +1 -1
- package/dist/modules/packages/model/PackageConfig.d.ts +10 -0
- package/dist/modules/packages/model/PackageConfig.js +10 -0
- package/dist/modules/packages/model/PackageConfig.js.map +1 -0
- package/dist/modules/packages/repository/PackageConfigRepository.d.ts +13 -0
- package/dist/modules/packages/repository/PackageConfigRepository.js +20 -0
- package/dist/modules/packages/repository/PackageConfigRepository.js.map +1 -0
- package/dist/modules/packages/routes/packages.d.ts +2 -0
- package/dist/modules/packages/routes/packages.js +37 -0
- package/dist/modules/packages/routes/packages.js.map +1 -0
- package/dist/modules/packages/service/PackageService.d.ts +9 -0
- package/dist/modules/packages/service/PackageService.js +23 -0
- package/dist/modules/packages/service/PackageService.js.map +1 -0
- package/dist/modules/sandbox/tools/command-builders.d.ts +14 -0
- package/dist/modules/sandbox/tools/command-builders.js +109 -0
- package/dist/modules/sandbox/tools/command-builders.js.map +1 -0
- package/dist/modules/sandbox/tools/tool-handlers.d.ts +1 -0
- package/dist/modules/sandbox/tools/tool-handlers.js +2 -103
- package/dist/modules/sandbox/tools/tool-handlers.js.map +1 -1
- package/dist/server/routes/api.js +3 -0
- package/dist/server/routes/api.js.map +1 -1
- package/eslint.config.js +20 -5
- package/package.json +1 -1
- package/src/engine/parsers/languages/cpp.ts +1 -1
- package/src/engine/parsers/languages/jsp-parser.js +2 -2
- package/src/modules/orchestration/McpClientManager.ts +39 -177
- package/src/modules/orchestration/McpServerConfigLoader.ts +78 -0
- package/src/modules/orchestration/ProxiedToolRegistry.ts +60 -0
- package/src/modules/orchestration/health/HealthCoordinator.ts +131 -0
- package/src/modules/orchestration/health/ReconnectManager.ts +1 -1
- package/src/modules/packages/__tests__/PackageService.property.test.ts +22 -0
- package/src/modules/packages/__tests__/PackageService.test.ts +26 -0
- package/src/modules/packages/__tests__/packages.integration.test.ts +28 -0
- package/src/modules/packages/model/PackageConfig.ts +20 -0
- package/src/modules/packages/repository/PackageConfigRepository.ts +29 -0
- package/src/modules/packages/routes/packages.ts +42 -0
- package/src/modules/packages/service/PackageService.ts +24 -0
- package/src/modules/pega/__tests__/PegaSymbolSync.test.ts +2 -1
- package/src/modules/sandbox/tools/command-builders.ts +123 -0
- package/src/modules/sandbox/tools/tool-handlers.ts +11 -115
- package/src/server/routes/api.ts +4 -0
- package/vitest.config.ts +18 -1
|
@@ -8,7 +8,7 @@ export const CPP_PATTERNS = [
|
|
|
8
8
|
{ regex: /^\s*(?:template\s*<[^>]*>\s*)?class\s+(\w+)/m, kind: 'class', nameGroup: 1 },
|
|
9
9
|
{ regex: /^\s*namespace\s+(\w+)/m, kind: 'namespace', nameGroup: 1 },
|
|
10
10
|
{ regex: /^\s*struct\s+(\w+)/m, kind: 'struct', nameGroup: 1 },
|
|
11
|
-
{ regex: /^\s*(?!if|for|while|switch|return|catch|do|else|delete|new|sizeof|throw|using|template|try|lock|assert)\w[\w
|
|
11
|
+
{ regex: /^\s*(?!if|for|while|switch|return|catch|do|else|delete|new|sizeof|throw|using|template|try|lock|assert)\w[\w:<>&*~]*\s+(\w+)\s*\(/m, kind: 'function', nameGroup: 1 },
|
|
12
12
|
{ regex: /^\s*enum\s+(?:\w+\s+)?(\w+)/m, kind: 'enum', nameGroup: 1 },
|
|
13
13
|
{ regex: /^\s*using\s+(\w+)\s*=/m, kind: 'type', nameGroup: 1 },
|
|
14
14
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cpp.js","sourceRoot":"","sources":["../../../../src/engine/parsers/languages/cpp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,EAAE,KAAK,EAAE,8CAA8C,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE;IACtF,EAAE,KAAK,EAAE,wBAAwB,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,EAAE;IACpE,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE;IAC9D,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"cpp.js","sourceRoot":"","sources":["../../../../src/engine/parsers/languages/cpp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,EAAE,KAAK,EAAE,8CAA8C,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE;IACtF,EAAE,KAAK,EAAE,wBAAwB,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,EAAE;IACpE,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE;IAC9D,EAAE,KAAK,EAAE,oIAAoI,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE;IAC/K,EAAE,KAAK,EAAE,8BAA8B,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE;IACrE,EAAE,KAAK,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE;CAChE,CAAC"}
|
|
@@ -64,7 +64,7 @@ export default class JspParser extends GenericTreeSitterParser {
|
|
|
64
64
|
walk(node.child(i));
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
|
-
catch { }
|
|
67
|
+
catch { /* ignore: snippet extraction is best-effort */ }
|
|
68
68
|
};
|
|
69
69
|
walk(root);
|
|
70
70
|
const javaCode = javaSnippets.join('\n');
|
|
@@ -83,7 +83,7 @@ export default class JspParser extends GenericTreeSitterParser {
|
|
|
83
83
|
signature: ''
|
|
84
84
|
});
|
|
85
85
|
}
|
|
86
|
-
const methodRegex = /(public|private|protected)?\s*(static)?\s*[\w
|
|
86
|
+
const methodRegex = /(public|private|protected)?\s*(static)?\s*[\w<>[\]]+\s+([A-Za-z_]\w*)\s*\([^)]*\)\s*\{/g;
|
|
87
87
|
while ((m = methodRegex.exec(javaCode)) !== null) {
|
|
88
88
|
symbols.push({
|
|
89
89
|
name: m[3],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsp-parser.js","sourceRoot":"","sources":["../../../../src/engine/parsers/languages/jsp-parser.js"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"jsp-parser.js","sourceRoot":"","sources":["../../../../src/engine/parsers/languages/jsp-parser.js"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* McpClientManager — Facade for child MCP server management with health monitoring.
|
|
3
|
-
* SA4E-37:
|
|
3
|
+
* SA4E-37: health check, auto-reconnect, connection state tracking.
|
|
4
|
+
* SA4E-223: config discovery (McpServerConfigLoader), tool registry
|
|
5
|
+
* (ProxiedToolRegistry) and health wiring (HealthCoordinator) extracted
|
|
6
|
+
* to keep this file <= 200 lines.
|
|
4
7
|
*/
|
|
5
8
|
import type { Logger } from 'pino';
|
|
6
9
|
import type { ToolDefinition } from '../../types/tool.js';
|
|
@@ -8,20 +11,14 @@ import type { ServerConfig } from './McpConfigService.js';
|
|
|
8
11
|
import type { HealthCheckConfig, ServerStatusEntry, ServerStateChangeCallback, Unsubscribe } from './types/health.js';
|
|
9
12
|
export declare class McpClientManager {
|
|
10
13
|
private clients;
|
|
11
|
-
private toolsToServer;
|
|
12
|
-
private proxiedTools;
|
|
13
14
|
private serverConfigs;
|
|
14
|
-
/** Tool names provided locally by the orchestrator/registry — child servers must never shadow these. */
|
|
15
|
-
private reservedToolNames;
|
|
16
15
|
private logger;
|
|
17
|
-
private healthConfig;
|
|
18
16
|
private stateTracker;
|
|
19
|
-
private
|
|
20
|
-
private
|
|
17
|
+
private toolRegistry;
|
|
18
|
+
private configLoader;
|
|
19
|
+
private health;
|
|
21
20
|
constructor(logger: Logger);
|
|
22
21
|
initializeAll(): Promise<void>;
|
|
23
|
-
private normalizeTransportType;
|
|
24
|
-
private loadDbServers;
|
|
25
22
|
getProxiedTools(): ToolDefinition[];
|
|
26
23
|
getServersStatus(): ServerStatusEntry[];
|
|
27
24
|
/**
|
|
@@ -42,12 +39,5 @@ export declare class McpClientManager {
|
|
|
42
39
|
setHealthCheckConfig(config: Partial<HealthCheckConfig>): void;
|
|
43
40
|
isServerConnected(name: string): boolean;
|
|
44
41
|
getServerToolCount(name: string): number;
|
|
45
|
-
private getConnectedClients;
|
|
46
|
-
private handlePingFailed;
|
|
47
|
-
private handleReconnectSuccess;
|
|
48
|
-
private handleReconnectFailed;
|
|
49
|
-
private handleMaxRetriesExhausted;
|
|
50
42
|
private registerServerTools;
|
|
51
|
-
private clearServerTools;
|
|
52
|
-
private getErrorMsg;
|
|
53
43
|
}
|
|
@@ -1,106 +1,52 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* McpClientManager — Facade for child MCP server management with health monitoring.
|
|
3
|
-
* SA4E-37:
|
|
3
|
+
* SA4E-37: health check, auto-reconnect, connection state tracking.
|
|
4
|
+
* SA4E-223: config discovery (McpServerConfigLoader), tool registry
|
|
5
|
+
* (ProxiedToolRegistry) and health wiring (HealthCoordinator) extracted
|
|
6
|
+
* to keep this file <= 200 lines.
|
|
4
7
|
*/
|
|
5
|
-
import * as fs from 'fs';
|
|
6
|
-
import * as path from 'path';
|
|
7
8
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
8
|
-
import { McpServerConfigRepository } from './McpServerConfigRepository.js';
|
|
9
|
-
import { PRODUCTION_HEALTH_CONFIG } from './types/health.js';
|
|
10
9
|
import { ConnectionStateTracker } from './health/ConnectionStateTracker.js';
|
|
11
|
-
import {
|
|
12
|
-
import { ReconnectManager } from './health/ReconnectManager.js';
|
|
10
|
+
import { HealthCoordinator } from './health/HealthCoordinator.js';
|
|
13
11
|
import { createTransport } from './health/TransportFactory.js';
|
|
12
|
+
import { McpServerConfigLoader } from './McpServerConfigLoader.js';
|
|
13
|
+
import { ProxiedToolRegistry } from './ProxiedToolRegistry.js';
|
|
14
14
|
export class McpClientManager {
|
|
15
15
|
clients = new Map();
|
|
16
|
-
toolsToServer = new Map();
|
|
17
|
-
proxiedTools = [];
|
|
18
16
|
serverConfigs = new Map();
|
|
19
|
-
/** Tool names provided locally by the orchestrator/registry — child servers must never shadow these. */
|
|
20
|
-
reservedToolNames = new Set();
|
|
21
17
|
logger;
|
|
22
|
-
healthConfig;
|
|
23
18
|
stateTracker;
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
toolRegistry;
|
|
20
|
+
configLoader;
|
|
21
|
+
health;
|
|
26
22
|
constructor(logger) {
|
|
27
23
|
this.logger = logger.child({ component: 'McpClientManager' });
|
|
28
|
-
this.healthConfig = { ...PRODUCTION_HEALTH_CONFIG };
|
|
29
24
|
this.stateTracker = new ConnectionStateTracker(logger);
|
|
30
|
-
this.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
onMaxRetriesExhausted: (name) => this.handleMaxRetriesExhausted(name),
|
|
25
|
+
this.toolRegistry = new ProxiedToolRegistry(logger);
|
|
26
|
+
this.configLoader = new McpServerConfigLoader(logger);
|
|
27
|
+
this.health = new HealthCoordinator({
|
|
28
|
+
logger,
|
|
29
|
+
stateTracker: this.stateTracker,
|
|
30
|
+
clients: this.clients,
|
|
31
|
+
serverConfigs: this.serverConfigs,
|
|
32
|
+
toolRegistry: this.toolRegistry,
|
|
39
33
|
});
|
|
40
34
|
}
|
|
41
35
|
async initializeAll() {
|
|
42
|
-
const
|
|
43
|
-
const
|
|
44
|
-
const configPath = path.resolve(workspace, dataDir, 'orchestration.json');
|
|
45
|
-
if (fs.existsSync(configPath)) {
|
|
36
|
+
const servers = await this.configLoader.loadAll();
|
|
37
|
+
for (const { name, config } of servers) {
|
|
46
38
|
try {
|
|
47
|
-
|
|
48
|
-
const config = JSON.parse(raw);
|
|
49
|
-
const servers = Object.entries(config.mcpServers || {});
|
|
50
|
-
this.logger.info({ count: servers.length, source: 'file' }, 'Connecting child MCP servers from orchestration.json');
|
|
51
|
-
for (const [name, serverConfig] of servers) {
|
|
52
|
-
try {
|
|
53
|
-
await this.connectServer(name, serverConfig);
|
|
54
|
-
}
|
|
55
|
-
catch (err) {
|
|
56
|
-
this.logger.error({ err, server: name }, 'Failed to connect child server (will retry via health monitor)');
|
|
57
|
-
if (!this.stateTracker.getState(name))
|
|
58
|
-
this.stateTracker.register(name);
|
|
59
|
-
this.serverConfigs.set(name, serverConfig);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
39
|
+
await this.connectServer(name, config);
|
|
62
40
|
}
|
|
63
41
|
catch (err) {
|
|
64
|
-
this.logger.error({ err,
|
|
42
|
+
this.logger.error({ err, server: name }, 'Failed to connect child server (will retry via health monitor)');
|
|
43
|
+
if (!this.stateTracker.getState(name))
|
|
44
|
+
this.stateTracker.register(name);
|
|
45
|
+
this.serverConfigs.set(name, config);
|
|
65
46
|
}
|
|
66
47
|
}
|
|
67
|
-
else {
|
|
68
|
-
this.logger.info({ configPath }, 'No orchestration.json found, skipping child servers');
|
|
69
|
-
}
|
|
70
|
-
await this.loadDbServers();
|
|
71
|
-
}
|
|
72
|
-
normalizeTransportType(config) {
|
|
73
|
-
const type = config.type || config.transportType;
|
|
74
|
-
if (type === 'streamable-http') {
|
|
75
|
-
return { ...config, type: 'httpStream', transportType: 'httpStream' };
|
|
76
|
-
}
|
|
77
|
-
return config;
|
|
78
48
|
}
|
|
79
|
-
|
|
80
|
-
try {
|
|
81
|
-
const servers = await McpServerConfigRepository.listEnabledServers();
|
|
82
|
-
this.logger.info({ count: servers.length, source: 'db' }, 'Connecting child MCP servers from DB');
|
|
83
|
-
for (const cfg of servers) {
|
|
84
|
-
const name = cfg.name;
|
|
85
|
-
if (name === 'code-intelligence' || name === 'code-intel')
|
|
86
|
-
continue;
|
|
87
|
-
try {
|
|
88
|
-
const normalized = this.normalizeTransportType(cfg);
|
|
89
|
-
await this.connectServer(name, normalized);
|
|
90
|
-
}
|
|
91
|
-
catch (err) {
|
|
92
|
-
this.logger.error({ err, server: name }, 'Failed to connect DB server (will retry via health monitor)');
|
|
93
|
-
if (!this.stateTracker.getState(name))
|
|
94
|
-
this.stateTracker.register(name);
|
|
95
|
-
this.serverConfigs.set(name, cfg);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
catch (err) {
|
|
100
|
-
this.logger.warn({ err }, 'Failed to load DB servers, continuing startup');
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
getProxiedTools() { return this.proxiedTools; }
|
|
49
|
+
getProxiedTools() { return this.toolRegistry.getProxiedTools(); }
|
|
104
50
|
getServersStatus() {
|
|
105
51
|
return this.stateTracker.getAllStatuses((name) => this.getServerToolCount(name));
|
|
106
52
|
}
|
|
@@ -109,15 +55,15 @@ export class McpClientManager {
|
|
|
109
55
|
* Any child server attempting to register a tool with one of these names will be skipped,
|
|
110
56
|
* preventing it from shadowing the locally-provided (correct) handler. SA4E-218.
|
|
111
57
|
*/
|
|
112
|
-
setReservedToolNames(names) { this.
|
|
113
|
-
ownsTool(toolName) { return this.
|
|
58
|
+
setReservedToolNames(names) { this.toolRegistry.setReservedToolNames(names); }
|
|
59
|
+
ownsTool(toolName) { return this.toolRegistry.ownsTool(toolName); }
|
|
114
60
|
async executeTool(toolName, args) {
|
|
115
|
-
const serverName = this.
|
|
61
|
+
const serverName = this.toolRegistry.getOwningServer(toolName);
|
|
116
62
|
if (!serverName)
|
|
117
63
|
throw new Error(`Tool ${toolName} is not managed by any child server`);
|
|
118
64
|
const state = this.stateTracker.getState(serverName);
|
|
119
65
|
if (state !== 'connected')
|
|
120
|
-
throw new Error(this.getErrorMsg(serverName, state));
|
|
66
|
+
throw new Error(this.health.getErrorMsg(serverName, state));
|
|
121
67
|
const client = this.clients.get(serverName);
|
|
122
68
|
if (!client)
|
|
123
69
|
throw new Error(`Client for server ${serverName} is disconnected`);
|
|
@@ -128,7 +74,6 @@ export class McpClientManager {
|
|
|
128
74
|
async connectServer(name, config) {
|
|
129
75
|
if (config.disabled || name === 'code-intelligence')
|
|
130
76
|
return;
|
|
131
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
132
77
|
const transport = createTransport(name, config);
|
|
133
78
|
const client = new Client({ name: 'code-intel-orchestrator', version: '1.0.0' }, { capabilities: {} });
|
|
134
79
|
await Promise.race([
|
|
@@ -144,7 +89,7 @@ export class McpClientManager {
|
|
|
144
89
|
this.logger.info({ name, tools: this.getServerToolCount(name) }, 'Server connected');
|
|
145
90
|
}
|
|
146
91
|
async disconnectServer(name) {
|
|
147
|
-
this.
|
|
92
|
+
this.health.cancelReconnect(name);
|
|
148
93
|
const client = this.clients.get(name);
|
|
149
94
|
if (client) {
|
|
150
95
|
try {
|
|
@@ -155,7 +100,7 @@ export class McpClientManager {
|
|
|
155
100
|
}
|
|
156
101
|
this.clients.delete(name);
|
|
157
102
|
}
|
|
158
|
-
this.clearServerTools(name);
|
|
103
|
+
this.toolRegistry.clearServerTools(name);
|
|
159
104
|
this.stateTracker.transition(name, 'disconnected');
|
|
160
105
|
this.serverConfigs.delete(name);
|
|
161
106
|
}
|
|
@@ -170,8 +115,8 @@ export class McpClientManager {
|
|
|
170
115
|
}
|
|
171
116
|
}
|
|
172
117
|
}
|
|
173
|
-
startHealthMonitor() { this.
|
|
174
|
-
stopHealthMonitor() { this.
|
|
118
|
+
startHealthMonitor() { this.health.start(); }
|
|
119
|
+
stopHealthMonitor() { this.health.stop(); }
|
|
175
120
|
async reconnectServer(name) {
|
|
176
121
|
const state = this.stateTracker.getState(name);
|
|
177
122
|
if (state === undefined)
|
|
@@ -185,115 +130,19 @@ export class McpClientManager {
|
|
|
185
130
|
const config = this.serverConfigs.get(name);
|
|
186
131
|
if (!config)
|
|
187
132
|
throw new Error(`Server config not found for '${name}'`);
|
|
188
|
-
this.
|
|
133
|
+
this.health.scheduleReconnect(name, config, 1);
|
|
189
134
|
}
|
|
190
135
|
onServerStateChange(cb) {
|
|
191
136
|
return this.stateTracker.onStateChange(cb);
|
|
192
137
|
}
|
|
193
|
-
setHealthCheckConfig(config) {
|
|
194
|
-
this.healthConfig = { ...this.healthConfig, ...config };
|
|
195
|
-
this.healthMonitor.updateConfig(this.healthConfig);
|
|
196
|
-
this.reconnectManager.updateConfig(this.healthConfig);
|
|
197
|
-
}
|
|
138
|
+
setHealthCheckConfig(config) { this.health.updateConfig(config); }
|
|
198
139
|
isServerConnected(name) {
|
|
199
140
|
return this.clients.has(name) && this.stateTracker.getState(name) === 'connected';
|
|
200
141
|
}
|
|
201
|
-
getServerToolCount(name) {
|
|
202
|
-
let count = 0;
|
|
203
|
-
for (const [, sn] of this.toolsToServer.entries()) {
|
|
204
|
-
if (sn === name)
|
|
205
|
-
count++;
|
|
206
|
-
}
|
|
207
|
-
return count;
|
|
208
|
-
}
|
|
142
|
+
getServerToolCount(name) { return this.toolRegistry.getToolCount(name); }
|
|
209
143
|
// --- Private ---
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
for (const [name, client] of this.clients.entries()) {
|
|
213
|
-
if (this.stateTracker.getState(name) === 'connected')
|
|
214
|
-
connected.set(name, client);
|
|
215
|
-
}
|
|
216
|
-
return connected;
|
|
217
|
-
}
|
|
218
|
-
handlePingFailed(name, error) {
|
|
219
|
-
this.stateTracker.recordPingFailure(name, error);
|
|
220
|
-
if (!this.stateTracker.isThresholdBreached(name, this.healthConfig.failureThreshold))
|
|
221
|
-
return;
|
|
222
|
-
this.stateTracker.transition(name, 'unhealthy', error);
|
|
223
|
-
this.stateTracker.transition(name, 'reconnecting');
|
|
224
|
-
const config = this.serverConfigs.get(name);
|
|
225
|
-
if (!config)
|
|
226
|
-
return;
|
|
227
|
-
const entry = this.stateTracker.getEntry(name);
|
|
228
|
-
if (!entry)
|
|
229
|
-
return;
|
|
230
|
-
entry.reconnectAttempts = 1;
|
|
231
|
-
const next = this.reconnectManager.scheduleReconnect(name, config, 1);
|
|
232
|
-
if (next)
|
|
233
|
-
entry.nextRetryAt = next;
|
|
234
|
-
}
|
|
235
|
-
handleReconnectSuccess(name, client) {
|
|
236
|
-
this.clients.set(name, client);
|
|
237
|
-
this.clearServerTools(name);
|
|
238
|
-
void this.registerServerTools(name, client).then(() => {
|
|
239
|
-
this.stateTracker.resetReconnectState(name);
|
|
240
|
-
this.stateTracker.transition(name, 'connected');
|
|
241
|
-
this.logger.info({ server: name }, 'Reconnected successfully');
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
handleReconnectFailed(name, attempt, error) {
|
|
245
|
-
const entry = this.stateTracker.getEntry(name);
|
|
246
|
-
if (!entry)
|
|
247
|
-
return;
|
|
248
|
-
entry.reconnectAttempts = attempt + 1;
|
|
249
|
-
entry.lastError = error;
|
|
250
|
-
const config = this.serverConfigs.get(name);
|
|
251
|
-
if (!config)
|
|
252
|
-
return;
|
|
253
|
-
const next = this.reconnectManager.scheduleReconnect(name, config, attempt + 1);
|
|
254
|
-
if (next)
|
|
255
|
-
entry.nextRetryAt = next;
|
|
256
|
-
}
|
|
257
|
-
handleMaxRetriesExhausted(name) {
|
|
258
|
-
this.stateTracker.transition(name, 'failed');
|
|
259
|
-
this.logger.error({ server: name, attempts: this.healthConfig.maxRetries }, 'Max retries exhausted');
|
|
260
|
-
}
|
|
261
|
-
async registerServerTools(name, client) {
|
|
262
|
-
const toolsResult = await client.listTools();
|
|
263
|
-
for (const tool of toolsResult.tools ?? []) {
|
|
264
|
-
// SA4E-218: never allow a child server to shadow a locally-provided (reserved) tool.
|
|
265
|
-
if (this.reservedToolNames.has(tool.name)) {
|
|
266
|
-
this.logger.warn({ tool: tool.name, server: name }, 'Skipping child tool registration: name conflicts with a locally-provided (reserved) tool — preventing shadowing');
|
|
267
|
-
continue;
|
|
268
|
-
}
|
|
269
|
-
this.toolsToServer.set(tool.name, name);
|
|
270
|
-
this.proxiedTools.push({
|
|
271
|
-
name: tool.name, description: tool.description ?? '',
|
|
272
|
-
category: name, inputSchema: tool.inputSchema,
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
clearServerTools(name) {
|
|
277
|
-
const names = [];
|
|
278
|
-
for (const [tn, sn] of this.toolsToServer.entries()) {
|
|
279
|
-
if (sn === name)
|
|
280
|
-
names.push(tn);
|
|
281
|
-
}
|
|
282
|
-
for (const tn of names)
|
|
283
|
-
this.toolsToServer.delete(tn);
|
|
284
|
-
this.proxiedTools = this.proxiedTools.filter((t) => !names.includes(t.name));
|
|
285
|
-
}
|
|
286
|
-
getErrorMsg(name, state) {
|
|
287
|
-
const max = this.healthConfig.maxRetries;
|
|
288
|
-
if (state === 'reconnecting') {
|
|
289
|
-
const a = this.stateTracker.getEntry(name)?.reconnectAttempts ?? 0;
|
|
290
|
-
return `Server '${name}' is currently reconnecting (attempt ${a}/${max}). Tool call rejected.`;
|
|
291
|
-
}
|
|
292
|
-
if (state === 'failed')
|
|
293
|
-
return `Server '${name}' has failed after ${max} reconnect attempts. Manual reconnection required.`;
|
|
294
|
-
if (state === 'unhealthy')
|
|
295
|
-
return `Server '${name}' is unhealthy. Reconnection will be attempted shortly.`;
|
|
296
|
-
return `Server '${name}' is not connected (state: ${state}).`;
|
|
144
|
+
registerServerTools(name, client) {
|
|
145
|
+
return this.toolRegistry.registerServerTools(name, client);
|
|
297
146
|
}
|
|
298
147
|
}
|
|
299
148
|
//# sourceMappingURL=McpClientManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpClientManager.js","sourceRoot":"","sources":["../../../src/modules/orchestration/McpClientManager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"McpClientManager.js","sourceRoot":"","sources":["../../../src/modules/orchestration/McpClientManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* McpServerConfigLoader — discovers child MCP server configs from orchestration.json and the DB.
|
|
3
|
+
* Extracted from McpClientManager (SA4E-223 line-count gate, <= 200 lines/file).
|
|
4
|
+
*/
|
|
5
|
+
import type { Logger } from 'pino';
|
|
6
|
+
import type { ServerConfig } from './McpConfigService.js';
|
|
7
|
+
export interface DiscoveredServer {
|
|
8
|
+
name: string;
|
|
9
|
+
config: ServerConfig;
|
|
10
|
+
}
|
|
11
|
+
export declare class McpServerConfigLoader {
|
|
12
|
+
private logger;
|
|
13
|
+
constructor(logger: Logger);
|
|
14
|
+
/** Returns all enabled child servers, file-based entries first, then DB entries. */
|
|
15
|
+
loadAll(): Promise<DiscoveredServer[]>;
|
|
16
|
+
/** Normalize legacy 'streamable-http' transport type to the current 'httpStream' value. */
|
|
17
|
+
private normalizeTransportType;
|
|
18
|
+
private loadFileServers;
|
|
19
|
+
private loadDbServers;
|
|
20
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* McpServerConfigLoader — discovers child MCP server configs from orchestration.json and the DB.
|
|
3
|
+
* Extracted from McpClientManager (SA4E-223 line-count gate, <= 200 lines/file).
|
|
4
|
+
*/
|
|
5
|
+
import * as fs from 'fs';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import { McpServerConfigRepository } from './McpServerConfigRepository.js';
|
|
8
|
+
export class McpServerConfigLoader {
|
|
9
|
+
logger;
|
|
10
|
+
constructor(logger) {
|
|
11
|
+
this.logger = logger.child({ component: 'McpServerConfigLoader' });
|
|
12
|
+
}
|
|
13
|
+
/** Returns all enabled child servers, file-based entries first, then DB entries. */
|
|
14
|
+
async loadAll() {
|
|
15
|
+
const [fromFile, fromDb] = await Promise.all([this.loadFileServers(), this.loadDbServers()]);
|
|
16
|
+
return [...fromFile, ...fromDb];
|
|
17
|
+
}
|
|
18
|
+
/** Normalize legacy 'streamable-http' transport type to the current 'httpStream' value. */
|
|
19
|
+
normalizeTransportType(config) {
|
|
20
|
+
const type = config.type || config.transportType;
|
|
21
|
+
if (type === 'streamable-http') {
|
|
22
|
+
return { ...config, type: 'httpStream', transportType: 'httpStream' };
|
|
23
|
+
}
|
|
24
|
+
return config;
|
|
25
|
+
}
|
|
26
|
+
async loadFileServers() {
|
|
27
|
+
const servers = [];
|
|
28
|
+
const workspace = process.env.CODE_INTEL_WORKSPACE || process.cwd();
|
|
29
|
+
const dataDir = process.env.CODE_INTEL_DATA_DIR || '.code-intel';
|
|
30
|
+
const configPath = path.resolve(workspace, dataDir, 'orchestration.json');
|
|
31
|
+
if (!fs.existsSync(configPath)) {
|
|
32
|
+
this.logger.info({ configPath }, 'No orchestration.json found, skipping child servers');
|
|
33
|
+
return servers;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const raw = fs.readFileSync(configPath, 'utf-8');
|
|
37
|
+
const config = JSON.parse(raw);
|
|
38
|
+
const entries = Object.entries(config.mcpServers || {});
|
|
39
|
+
this.logger.info({ count: entries.length, source: 'file' }, 'Discovered child MCP servers from orchestration.json');
|
|
40
|
+
for (const [name, serverConfig] of entries) {
|
|
41
|
+
servers.push({ name, config: this.normalizeTransportType(serverConfig) });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
this.logger.error({ err, configPath }, 'Failed to read orchestration.json');
|
|
46
|
+
}
|
|
47
|
+
return servers;
|
|
48
|
+
}
|
|
49
|
+
async loadDbServers() {
|
|
50
|
+
const servers = [];
|
|
51
|
+
try {
|
|
52
|
+
const dbConfigs = await McpServerConfigRepository.listEnabledServers();
|
|
53
|
+
this.logger.info({ count: dbConfigs.length, source: 'db' }, 'Discovered child MCP servers from DB');
|
|
54
|
+
for (const cfg of dbConfigs) {
|
|
55
|
+
if (cfg.name === 'code-intelligence' || cfg.name === 'code-intel')
|
|
56
|
+
continue;
|
|
57
|
+
servers.push({ name: cfg.name, config: this.normalizeTransportType(cfg) });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
this.logger.warn({ err }, 'Failed to load DB servers, continuing startup');
|
|
62
|
+
}
|
|
63
|
+
return servers;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=McpServerConfigLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpServerConfigLoader.js","sourceRoot":"","sources":["../../../src/modules/orchestration/McpServerConfigLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProxiedToolRegistry — tracks tools proxied from child MCP servers.
|
|
3
|
+
* SA4E-218: reserved (locally-provided) tool names are never shadowed by child servers.
|
|
4
|
+
* Extracted from McpClientManager (SA4E-223 line-count gate, <= 200 lines/file).
|
|
5
|
+
*/
|
|
6
|
+
import type { Logger } from 'pino';
|
|
7
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
8
|
+
import type { ToolDefinition } from '../../types/tool.js';
|
|
9
|
+
export declare class ProxiedToolRegistry {
|
|
10
|
+
private toolsToServer;
|
|
11
|
+
private proxiedTools;
|
|
12
|
+
/** Tool names provided locally by the orchestrator/registry — child servers must never shadow these. */
|
|
13
|
+
private reservedToolNames;
|
|
14
|
+
private logger;
|
|
15
|
+
constructor(logger: Logger);
|
|
16
|
+
/** Reserve a set of tool names that are provided locally by the orchestrator/registry. */
|
|
17
|
+
setReservedToolNames(names: Set<string>): void;
|
|
18
|
+
ownsTool(toolName: string): boolean;
|
|
19
|
+
/** Returns the child server name owning a tool, or undefined if not proxied. */
|
|
20
|
+
getOwningServer(toolName: string): string | undefined;
|
|
21
|
+
getProxiedTools(): ToolDefinition[];
|
|
22
|
+
getToolCount(serverName: string): number;
|
|
23
|
+
registerServerTools(name: string, client: Client): Promise<void>;
|
|
24
|
+
clearServerTools(name: string): void;
|
|
25
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProxiedToolRegistry — tracks tools proxied from child MCP servers.
|
|
3
|
+
* SA4E-218: reserved (locally-provided) tool names are never shadowed by child servers.
|
|
4
|
+
* Extracted from McpClientManager (SA4E-223 line-count gate, <= 200 lines/file).
|
|
5
|
+
*/
|
|
6
|
+
export class ProxiedToolRegistry {
|
|
7
|
+
toolsToServer = new Map();
|
|
8
|
+
proxiedTools = [];
|
|
9
|
+
/** Tool names provided locally by the orchestrator/registry — child servers must never shadow these. */
|
|
10
|
+
reservedToolNames = new Set();
|
|
11
|
+
logger;
|
|
12
|
+
constructor(logger) {
|
|
13
|
+
this.logger = logger.child({ component: 'ProxiedToolRegistry' });
|
|
14
|
+
}
|
|
15
|
+
/** Reserve a set of tool names that are provided locally by the orchestrator/registry. */
|
|
16
|
+
setReservedToolNames(names) { this.reservedToolNames = names; }
|
|
17
|
+
ownsTool(toolName) { return this.toolsToServer.has(toolName); }
|
|
18
|
+
/** Returns the child server name owning a tool, or undefined if not proxied. */
|
|
19
|
+
getOwningServer(toolName) { return this.toolsToServer.get(toolName); }
|
|
20
|
+
getProxiedTools() { return this.proxiedTools; }
|
|
21
|
+
getToolCount(serverName) {
|
|
22
|
+
let count = 0;
|
|
23
|
+
for (const [, sn] of this.toolsToServer.entries()) {
|
|
24
|
+
if (sn === serverName)
|
|
25
|
+
count++;
|
|
26
|
+
}
|
|
27
|
+
return count;
|
|
28
|
+
}
|
|
29
|
+
async registerServerTools(name, client) {
|
|
30
|
+
const toolsResult = await client.listTools();
|
|
31
|
+
for (const tool of toolsResult.tools ?? []) {
|
|
32
|
+
// SA4E-218: never allow a child server to shadow a locally-provided (reserved) tool.
|
|
33
|
+
if (this.reservedToolNames.has(tool.name)) {
|
|
34
|
+
this.logger.warn({ tool: tool.name, server: name }, 'Skipping child tool registration: name conflicts with a locally-provided (reserved) tool — preventing shadowing');
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
this.toolsToServer.set(tool.name, name);
|
|
38
|
+
this.proxiedTools.push({
|
|
39
|
+
name: tool.name, description: tool.description ?? '',
|
|
40
|
+
category: name, inputSchema: tool.inputSchema,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
clearServerTools(name) {
|
|
45
|
+
const names = [];
|
|
46
|
+
for (const [tn, sn] of this.toolsToServer.entries()) {
|
|
47
|
+
if (sn === name)
|
|
48
|
+
names.push(tn);
|
|
49
|
+
}
|
|
50
|
+
for (const tn of names)
|
|
51
|
+
this.toolsToServer.delete(tn);
|
|
52
|
+
this.proxiedTools = this.proxiedTools.filter((t) => !names.includes(t.name));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=ProxiedToolRegistry.js.map
|