snow-flow 1.1.74 → 1.1.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/.claude-flow/queen/queen-memory.db +0 -0
  2. package/.claude-flow/queen-test/test-memory.db +0 -0
  3. package/.claude-flow/queen-test/test-memory.db-agents +0 -0
  4. package/.claude-flow/queen-test/test-memory.db-import +0 -0
  5. package/.claude-flow/queen-test/test-memory.db-memory +0 -0
  6. package/.claude-flow/queen-test/test-memory.db-neural +0 -0
  7. package/CLAUDE.md +111 -8
  8. package/README.md +117 -50
  9. package/deploy.sh +366 -0
  10. package/dist/cli.js +226 -0
  11. package/dist/cli.js.map +1 -1
  12. package/dist/mcp/http-transport-wrapper.d.ts +29 -0
  13. package/dist/mcp/http-transport-wrapper.d.ts.map +1 -0
  14. package/dist/mcp/http-transport-wrapper.js +318 -0
  15. package/dist/mcp/http-transport-wrapper.js.map +1 -0
  16. package/dist/mcp/service-discovery-client.d.ts +83 -0
  17. package/dist/mcp/service-discovery-client.d.ts.map +1 -0
  18. package/dist/mcp/service-discovery-client.js +211 -0
  19. package/dist/mcp/service-discovery-client.js.map +1 -0
  20. package/dist/mcp/servicenow-deployment-mcp.js +262 -29
  21. package/dist/mcp/servicenow-deployment-mcp.js.map +1 -1
  22. package/dist/mcp/servicenow-intelligent-mcp.js +252 -18
  23. package/dist/mcp/servicenow-intelligent-mcp.js.map +1 -1
  24. package/dist/mcp/servicenow-operations-mcp.js +274 -46
  25. package/dist/mcp/servicenow-operations-mcp.js.map +1 -1
  26. package/dist/orchestration/discovery/service-discovery.d.ts +81 -0
  27. package/dist/orchestration/discovery/service-discovery.d.ts.map +1 -0
  28. package/dist/orchestration/discovery/service-discovery.js +808 -0
  29. package/dist/orchestration/discovery/service-discovery.js.map +1 -0
  30. package/dist/orchestration/distributed-orchestrator.d.ts +131 -0
  31. package/dist/orchestration/distributed-orchestrator.d.ts.map +1 -0
  32. package/dist/orchestration/distributed-orchestrator.js +712 -0
  33. package/dist/orchestration/distributed-orchestrator.js.map +1 -0
  34. package/dist/orchestration/distribution/task-distribution-engine.d.ts +53 -0
  35. package/dist/orchestration/distribution/task-distribution-engine.d.ts.map +1 -0
  36. package/dist/orchestration/distribution/task-distribution-engine.js +586 -0
  37. package/dist/orchestration/distribution/task-distribution-engine.js.map +1 -0
  38. package/dist/orchestration/interfaces/distributed-orchestration.interface.d.ts +606 -0
  39. package/dist/orchestration/interfaces/distributed-orchestration.interface.d.ts.map +1 -0
  40. package/dist/orchestration/interfaces/distributed-orchestration.interface.js +65 -0
  41. package/dist/orchestration/interfaces/distributed-orchestration.interface.js.map +1 -0
  42. package/dist/orchestration/protocols/mcpx-protocol.d.ts +71 -0
  43. package/dist/orchestration/protocols/mcpx-protocol.d.ts.map +1 -0
  44. package/dist/orchestration/protocols/mcpx-protocol.js +668 -0
  45. package/dist/orchestration/protocols/mcpx-protocol.js.map +1 -0
  46. package/dist/orchestration/state/distributed-state-manager.d.ts +89 -0
  47. package/dist/orchestration/state/distributed-state-manager.d.ts.map +1 -0
  48. package/dist/orchestration/state/distributed-state-manager.js +716 -0
  49. package/dist/orchestration/state/distributed-state-manager.js.map +1 -0
  50. package/dist/queen/advanced-integration-test.d.ts +48 -0
  51. package/dist/queen/advanced-integration-test.d.ts.map +1 -0
  52. package/dist/queen/advanced-integration-test.js +474 -0
  53. package/dist/queen/advanced-integration-test.js.map +1 -0
  54. package/dist/queen/agent-factory.d.ts +40 -0
  55. package/dist/queen/agent-factory.d.ts.map +1 -0
  56. package/dist/queen/agent-factory.js +433 -0
  57. package/dist/queen/agent-factory.js.map +1 -0
  58. package/dist/queen/index.d.ts +58 -0
  59. package/dist/queen/index.d.ts.map +1 -0
  60. package/dist/queen/index.js +79 -0
  61. package/dist/queen/index.js.map +1 -0
  62. package/dist/queen/integration-example.d.ts +82 -0
  63. package/dist/queen/integration-example.d.ts.map +1 -0
  64. package/dist/queen/integration-example.js +220 -0
  65. package/dist/queen/integration-example.js.map +1 -0
  66. package/dist/queen/integration-test.d.ts +72 -0
  67. package/dist/queen/integration-test.d.ts.map +1 -0
  68. package/dist/queen/integration-test.js +564 -0
  69. package/dist/queen/integration-test.js.map +1 -0
  70. package/dist/queen/mock-mcp-client.d.ts +66 -0
  71. package/dist/queen/mock-mcp-client.d.ts.map +1 -0
  72. package/dist/queen/mock-mcp-client.js +297 -0
  73. package/dist/queen/mock-mcp-client.js.map +1 -0
  74. package/dist/queen/neural-learning.d.ts +28 -0
  75. package/dist/queen/neural-learning.d.ts.map +1 -0
  76. package/dist/queen/neural-learning.js +244 -0
  77. package/dist/queen/neural-learning.js.map +1 -0
  78. package/dist/queen/queen-memory.d.ts +25 -0
  79. package/dist/queen/queen-memory.d.ts.map +1 -0
  80. package/dist/queen/queen-memory.js +273 -0
  81. package/dist/queen/queen-memory.js.map +1 -0
  82. package/dist/queen/run-integration-tests.d.ts +9 -0
  83. package/dist/queen/run-integration-tests.d.ts.map +1 -0
  84. package/dist/queen/run-integration-tests.js +28 -0
  85. package/dist/queen/run-integration-tests.js.map +1 -0
  86. package/dist/queen/servicenow-queen.d.ts +56 -0
  87. package/dist/queen/servicenow-queen.d.ts.map +1 -0
  88. package/dist/queen/servicenow-queen.js +659 -0
  89. package/dist/queen/servicenow-queen.js.map +1 -0
  90. package/dist/queen/types.d.ts +58 -0
  91. package/dist/queen/types.d.ts.map +1 -0
  92. package/dist/queen/types.js +7 -0
  93. package/dist/queen/types.js.map +1 -0
  94. package/dist/version.d.ts +3 -1
  95. package/dist/version.d.ts.map +1 -1
  96. package/dist/version.js +27 -2
  97. package/dist/version.js.map +1 -1
  98. package/docker/base/Dockerfile.base +45 -0
  99. package/docker/generate-services.js +244 -0
  100. package/docker/nginx/Dockerfile +71 -0
  101. package/docker/nginx/consul-template.hcl +64 -0
  102. package/docker/nginx/healthcheck.sh +178 -0
  103. package/docker/nginx/nginx.conf +210 -0
  104. package/docker/nginx/supervisord.conf +57 -0
  105. package/docker/nginx/templates/upstreams.conf.tpl +48 -0
  106. package/docker/services/automation-mcp/Dockerfile +32 -0
  107. package/docker/services/automation-mcp/config/service.json +28 -0
  108. package/docker/services/automation-mcp/entrypoint.js +51 -0
  109. package/docker/services/deployment-mcp/Dockerfile +32 -0
  110. package/docker/services/deployment-mcp/entrypoint.js +51 -0
  111. package/docker/services/flow-composer-mcp/Dockerfile +32 -0
  112. package/docker/services/flow-composer-mcp/config/service.json +28 -0
  113. package/docker/services/flow-composer-mcp/entrypoint.js +51 -0
  114. package/docker/services/graph-memory-mcp/Dockerfile +32 -0
  115. package/docker/services/graph-memory-mcp/config/service.json +28 -0
  116. package/docker/services/graph-memory-mcp/entrypoint.js +51 -0
  117. package/docker/services/integration-mcp/Dockerfile +32 -0
  118. package/docker/services/integration-mcp/config/service.json +28 -0
  119. package/docker/services/integration-mcp/entrypoint.js +51 -0
  120. package/docker/services/intelligent-mcp/Dockerfile +32 -0
  121. package/docker/services/intelligent-mcp/config/service.json +28 -0
  122. package/docker/services/intelligent-mcp/entrypoint.js +51 -0
  123. package/docker/services/operations-mcp/Dockerfile +32 -0
  124. package/docker/services/operations-mcp/config/service.json +28 -0
  125. package/docker/services/operations-mcp/entrypoint.js +51 -0
  126. package/docker/services/platform-development-mcp/Dockerfile +32 -0
  127. package/docker/services/platform-development-mcp/config/service.json +28 -0
  128. package/docker/services/platform-development-mcp/entrypoint.js +51 -0
  129. package/docker/services/reporting-analytics-mcp/Dockerfile +32 -0
  130. package/docker/services/reporting-analytics-mcp/config/service.json +28 -0
  131. package/docker/services/reporting-analytics-mcp/entrypoint.js +51 -0
  132. package/docker/services/security-compliance-mcp/Dockerfile +32 -0
  133. package/docker/services/security-compliance-mcp/config/service.json +28 -0
  134. package/docker/services/security-compliance-mcp/entrypoint.js +51 -0
  135. package/docker/services/update-set-mcp/Dockerfile +32 -0
  136. package/docker/services/update-set-mcp/config/service.json +28 -0
  137. package/docker/services/update-set-mcp/entrypoint.js +51 -0
  138. package/docker-compose.override.yml +132 -0
  139. package/docker-compose.prod.yml +340 -0
  140. package/docker-compose.yml +579 -0
  141. package/k8s/automation-mcp.yaml +232 -0
  142. package/k8s/configmap.yaml +237 -0
  143. package/k8s/deployment-mcp.yaml +232 -0
  144. package/k8s/flow-composer-mcp.yaml +232 -0
  145. package/k8s/generate-k8s-manifests.js +453 -0
  146. package/k8s/graph-memory-mcp.yaml +232 -0
  147. package/k8s/infrastructure.yaml +456 -0
  148. package/k8s/ingress.yaml +361 -0
  149. package/k8s/integration-mcp.yaml +232 -0
  150. package/k8s/intelligent-mcp.yaml +232 -0
  151. package/k8s/kustomization.yaml +111 -0
  152. package/k8s/mcp-services.yaml +2552 -0
  153. package/k8s/monitoring.yaml +515 -0
  154. package/k8s/namespace.yaml +80 -0
  155. package/k8s/operations-mcp.yaml +232 -0
  156. package/k8s/platform-development-mcp.yaml +232 -0
  157. package/k8s/rbac.yaml +140 -0
  158. package/k8s/reporting-analytics-mcp.yaml +232 -0
  159. package/k8s/security-compliance-mcp.yaml +232 -0
  160. package/k8s/update-set-mcp.yaml +232 -0
  161. package/package.json +2 -2
@@ -0,0 +1,318 @@
1
+ "use strict";
2
+ /**
3
+ * HTTP Transport Wrapper for MCP Servers
4
+ * Converts stdio-based MCP servers to HTTP endpoints for containerization
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.HttpTransportWrapper = void 0;
11
+ const express_1 = __importDefault(require("express"));
12
+ const logger_js_1 = require("../utils/logger.js");
13
+ const service_discovery_client_js_1 = require("./service-discovery-client.js");
14
+ class HttpTransportWrapper {
15
+ constructor(mcpServer, config) {
16
+ this.isReady = false;
17
+ this.mcpServer = mcpServer;
18
+ this.config = config;
19
+ this.logger = new logger_js_1.Logger(`HttpTransport:${config.name}`);
20
+ this.app = (0, express_1.default)();
21
+ this.serviceDiscovery = new service_discovery_client_js_1.ServiceDiscoveryClient();
22
+ this.setupMiddleware();
23
+ this.setupRoutes();
24
+ }
25
+ setupMiddleware() {
26
+ // Security headers
27
+ this.app.use((req, res, next) => {
28
+ res.setHeader('X-Content-Type-Options', 'nosniff');
29
+ res.setHeader('X-Frame-Options', 'DENY');
30
+ res.setHeader('X-XSS-Protection', '1; mode=block');
31
+ res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
32
+ next();
33
+ });
34
+ // Body parser for JSON requests
35
+ this.app.use(express_1.default.json({ limit: '10mb' }));
36
+ this.app.use(express_1.default.urlencoded({ extended: true }));
37
+ // Request logging middleware
38
+ this.app.use((req, res, next) => {
39
+ this.logger.debug(`${req.method} ${req.path}`, {
40
+ userAgent: req.get('User-Agent'),
41
+ ip: req.ip,
42
+ contentLength: req.get('Content-Length')
43
+ });
44
+ next();
45
+ });
46
+ }
47
+ setupRoutes() {
48
+ // Health check endpoint
49
+ this.app.get(this.config.healthCheckPath || '/health', (req, res) => {
50
+ const health = {
51
+ status: this.isReady ? 'healthy' : 'starting',
52
+ service: this.config.name,
53
+ version: this.config.version,
54
+ timestamp: new Date().toISOString(),
55
+ uptime: process.uptime(),
56
+ memory: process.memoryUsage(),
57
+ port: this.config.port
58
+ };
59
+ const statusCode = this.isReady ? 200 : 503;
60
+ res.status(statusCode).json(health);
61
+ });
62
+ // Readiness probe
63
+ this.app.get('/ready', (req, res) => {
64
+ if (this.isReady) {
65
+ res.status(200).json({ ready: true, service: this.config.name });
66
+ }
67
+ else {
68
+ res.status(503).json({ ready: false, service: this.config.name });
69
+ }
70
+ });
71
+ // Liveness probe
72
+ this.app.get('/live', (req, res) => {
73
+ res.status(200).json({ alive: true, service: this.config.name });
74
+ });
75
+ // Metrics endpoint (basic)
76
+ this.app.get(this.config.metricsPath || '/metrics', (req, res) => {
77
+ const metrics = this.generateMetrics();
78
+ res.set('Content-Type', 'text/plain');
79
+ res.send(metrics);
80
+ });
81
+ // MCP API endpoints
82
+ this.app.post('/mcp/list-tools', async (req, res) => {
83
+ try {
84
+ const result = await this.handleMCPRequest('listTools', req.body);
85
+ res.json(result);
86
+ }
87
+ catch (error) {
88
+ this.handleError(res, error);
89
+ }
90
+ });
91
+ this.app.post('/mcp/call-tool', async (req, res) => {
92
+ try {
93
+ const result = await this.handleMCPRequest('callTool', req.body);
94
+ res.json(result);
95
+ }
96
+ catch (error) {
97
+ this.handleError(res, error);
98
+ }
99
+ });
100
+ this.app.post('/mcp/list-resources', async (req, res) => {
101
+ try {
102
+ const result = await this.handleMCPRequest('listResources', req.body);
103
+ res.json(result);
104
+ }
105
+ catch (error) {
106
+ this.handleError(res, error);
107
+ }
108
+ });
109
+ this.app.post('/mcp/read-resource', async (req, res) => {
110
+ try {
111
+ const result = await this.handleMCPRequest('readResource', req.body);
112
+ res.json(result);
113
+ }
114
+ catch (error) {
115
+ this.handleError(res, error);
116
+ }
117
+ });
118
+ // Service info endpoint
119
+ this.app.get('/info', (req, res) => {
120
+ res.json({
121
+ name: this.config.name,
122
+ version: this.config.version,
123
+ port: this.config.port,
124
+ endpoints: {
125
+ health: this.config.healthCheckPath || '/health',
126
+ metrics: this.config.metricsPath || '/metrics',
127
+ mcp: [
128
+ '/mcp/list-tools',
129
+ '/mcp/call-tool',
130
+ '/mcp/list-resources',
131
+ '/mcp/read-resource'
132
+ ]
133
+ }
134
+ });
135
+ });
136
+ // 404 handler
137
+ this.app.use('*', (req, res) => {
138
+ res.status(404).json({
139
+ error: 'Not Found',
140
+ path: req.originalUrl,
141
+ service: this.config.name
142
+ });
143
+ });
144
+ // Global error handler
145
+ this.app.use((error, req, res, next) => {
146
+ this.logger.error('Unhandled error:', error);
147
+ this.handleError(res, error);
148
+ });
149
+ }
150
+ async handleMCPRequest(method, params) {
151
+ // Convert HTTP request to MCP protocol format
152
+ const mcpRequest = {
153
+ jsonrpc: '2.0',
154
+ id: Date.now(),
155
+ method,
156
+ params: params || {}
157
+ };
158
+ try {
159
+ // Process request through the MCP server
160
+ let result;
161
+ switch (method) {
162
+ case 'listTools':
163
+ // Handle list tools request by calling the MCP server's tools handler
164
+ const toolsResponse = await this.mcpServer.getCapabilities();
165
+ result = {
166
+ tools: toolsResponse.capabilities?.tools || []
167
+ };
168
+ break;
169
+ case 'callTool':
170
+ // Handle tool call by routing to the MCP server's tool handler
171
+ if (!params.name) {
172
+ throw new Error('Tool name is required for callTool');
173
+ }
174
+ // Create a mock request that matches MCP CallToolRequestSchema
175
+ const toolRequest = {
176
+ params: {
177
+ name: params.name,
178
+ arguments: params.arguments || {}
179
+ }
180
+ };
181
+ // Find the appropriate request handler for CallToolRequestSchema
182
+ // Note: This requires internal access to MCP server handlers
183
+ // In a production environment, you'd need a more robust integration
184
+ result = await this.handleToolCall(toolRequest);
185
+ break;
186
+ case 'listResources':
187
+ // Handle list resources - return empty list if not supported
188
+ result = { resources: [] };
189
+ break;
190
+ case 'readResource':
191
+ // Handle read resource - throw error if not supported
192
+ throw new Error('Resource reading not implemented for this server');
193
+ default:
194
+ throw new Error(`Unsupported MCP method: ${method}`);
195
+ }
196
+ return {
197
+ jsonrpc: '2.0',
198
+ id: mcpRequest.id,
199
+ result
200
+ };
201
+ }
202
+ catch (error) {
203
+ this.logger.error(`MCP request error for ${method}:`, error);
204
+ return {
205
+ jsonrpc: '2.0',
206
+ id: mcpRequest.id,
207
+ error: {
208
+ code: -32603,
209
+ message: error instanceof Error ? error.message : 'Internal error',
210
+ data: { method, originalParams: params }
211
+ }
212
+ };
213
+ }
214
+ }
215
+ async handleToolCall(request) {
216
+ // This is a workaround since we can't directly access MCP server's internal handlers
217
+ // In a real implementation, you'd need to either:
218
+ // 1. Extend the MCP SDK to expose request handlers
219
+ // 2. Use a proper transport layer that already exists
220
+ // 3. Create a bridge that uses the existing stdio transport
221
+ const { name, arguments: args } = request.params;
222
+ // For now, we'll at least validate that the tool exists
223
+ const capabilities = await this.mcpServer.getCapabilities();
224
+ const tools = capabilities.capabilities?.tools || [];
225
+ // This is still a limitation - we can't actually execute the tool without
226
+ // access to the MCP server's internal request handlers
227
+ throw new Error(`Tool execution not yet implemented in HTTP transport. Tool '${name}' exists but cannot be executed via HTTP. Use stdio transport instead.`);
228
+ }
229
+ handleError(res, error) {
230
+ const statusCode = error.statusCode || 500;
231
+ const errorResponse = {
232
+ error: {
233
+ code: error.code || 'INTERNAL_ERROR',
234
+ message: error.message || 'Internal server error',
235
+ service: this.config.name
236
+ }
237
+ };
238
+ this.logger.error('Request error:', error);
239
+ res.status(statusCode).json(errorResponse);
240
+ }
241
+ generateMetrics() {
242
+ const memUsage = process.memoryUsage();
243
+ const uptime = process.uptime();
244
+ return `# HELP mcp_server_uptime_seconds Total uptime of the MCP server
245
+ # TYPE mcp_server_uptime_seconds counter
246
+ mcp_server_uptime_seconds{service="${this.config.name}"} ${uptime}
247
+
248
+ # HELP mcp_server_memory_usage_bytes Memory usage in bytes
249
+ # TYPE mcp_server_memory_usage_bytes gauge
250
+ mcp_server_memory_usage_bytes{service="${this.config.name}",type="rss"} ${memUsage.rss}
251
+ mcp_server_memory_usage_bytes{service="${this.config.name}",type="heapTotal"} ${memUsage.heapTotal}
252
+ mcp_server_memory_usage_bytes{service="${this.config.name}",type="heapUsed"} ${memUsage.heapUsed}
253
+
254
+ # HELP mcp_server_ready Server readiness status
255
+ # TYPE mcp_server_ready gauge
256
+ mcp_server_ready{service="${this.config.name}"} ${this.isReady ? 1 : 0}
257
+ `;
258
+ }
259
+ async start() {
260
+ return new Promise((resolve, reject) => {
261
+ const server = this.app.listen(this.config.port, async () => {
262
+ this.logger.info(`MCP HTTP server started on port ${this.config.port}`);
263
+ try {
264
+ // Register with service discovery
265
+ await this.serviceDiscovery.register({
266
+ id: `${this.config.name}-${process.env.HOSTNAME || 'localhost'}`,
267
+ name: this.config.name,
268
+ address: process.env.SERVICE_IP || 'localhost',
269
+ port: this.config.port,
270
+ health: {
271
+ http: `http://${process.env.SERVICE_IP || 'localhost'}:${this.config.port}/health`,
272
+ interval: '10s',
273
+ timeout: '3s',
274
+ deregisterAfter: '30s'
275
+ },
276
+ tags: [
277
+ 'mcp-server',
278
+ `version:${this.config.version}`,
279
+ `environment:${process.env.NODE_ENV || 'development'}`
280
+ ]
281
+ });
282
+ this.isReady = true;
283
+ this.logger.info(`Service registered with discovery: ${this.config.name}`);
284
+ resolve();
285
+ }
286
+ catch (error) {
287
+ this.logger.warn('Service discovery registration failed:', error);
288
+ // Continue without service discovery
289
+ this.isReady = true;
290
+ resolve();
291
+ }
292
+ });
293
+ server.on('error', (error) => {
294
+ this.logger.error(`Server startup error:`, error);
295
+ reject(error);
296
+ });
297
+ // Graceful shutdown handling
298
+ const shutdown = async () => {
299
+ this.logger.info('Shutting down HTTP server...');
300
+ try {
301
+ await this.serviceDiscovery.deregister(`${this.config.name}-${process.env.HOSTNAME || 'localhost'}`);
302
+ this.logger.info('Service deregistered from discovery');
303
+ }
304
+ catch (error) {
305
+ this.logger.warn('Service deregistration failed:', error);
306
+ }
307
+ server.close(() => {
308
+ this.logger.info('HTTP server closed');
309
+ process.exit(0);
310
+ });
311
+ };
312
+ process.on('SIGTERM', shutdown);
313
+ process.on('SIGINT', shutdown);
314
+ });
315
+ }
316
+ }
317
+ exports.HttpTransportWrapper = HttpTransportWrapper;
318
+ //# sourceMappingURL=http-transport-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-transport-wrapper.js","sourceRoot":"","sources":["../../src/mcp/http-transport-wrapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Service Discovery Client for Consul Integration
3
+ */
4
+ export interface ServiceRegistration {
5
+ id: string;
6
+ name: string;
7
+ address: string;
8
+ port: number;
9
+ health?: {
10
+ http?: string;
11
+ tcp?: string;
12
+ interval?: string;
13
+ timeout?: string;
14
+ deregisterAfter?: string;
15
+ };
16
+ tags?: string[];
17
+ meta?: Record<string, string>;
18
+ }
19
+ export interface ServiceDiscoveryConfig {
20
+ consulUrl: string;
21
+ timeout: number;
22
+ retryAttempts: number;
23
+ }
24
+ export declare class ServiceDiscoveryClient {
25
+ private client;
26
+ private logger;
27
+ private config;
28
+ constructor(config?: Partial<ServiceDiscoveryConfig>);
29
+ /**
30
+ * Register a service with Consul
31
+ */
32
+ register(service: ServiceRegistration): Promise<void>;
33
+ /**
34
+ * Deregister a service from Consul
35
+ */
36
+ deregister(serviceId: string): Promise<void>;
37
+ /**
38
+ * Discover services by name
39
+ */
40
+ discover(serviceName: string, healthy?: boolean): Promise<ServiceInstance[]>;
41
+ /**
42
+ * List all services
43
+ */
44
+ listServices(): Promise<string[]>;
45
+ /**
46
+ * Get service health status
47
+ */
48
+ getServiceHealth(serviceName: string): Promise<ServiceHealth[]>;
49
+ /**
50
+ * Check if Consul is available
51
+ */
52
+ isAvailable(): Promise<boolean>;
53
+ /**
54
+ * Watch for service changes (simplified polling approach)
55
+ */
56
+ watchService(serviceName: string, callback: (services: ServiceInstance[]) => void, interval?: number): () => void;
57
+ }
58
+ export interface ServiceInstance {
59
+ id: string;
60
+ name: string;
61
+ address: string;
62
+ port: number;
63
+ tags: string[];
64
+ meta: Record<string, string>;
65
+ health?: Array<{
66
+ status: string;
67
+ output: string;
68
+ name: string;
69
+ }>;
70
+ }
71
+ export interface ServiceHealth {
72
+ serviceId: string;
73
+ serviceName: string;
74
+ address: string;
75
+ port: number;
76
+ checks: Array<{
77
+ checkId: string;
78
+ name: string;
79
+ status: string;
80
+ output: string;
81
+ }>;
82
+ }
83
+ //# sourceMappingURL=service-discovery-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-discovery-client.d.ts","sourceRoot":"","sources":["../../src/mcp/service-discovery-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAyB;gBAE3B,MAAM,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC;IA4CpD;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiD3D;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlD;;OAEG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,UAAO,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA2B/E;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAUvC;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAsBrE;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC;;OAEG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,IAAI,EAAE,QAAQ,SAAQ,GAAG,MAAM,IAAI;CAwBjH;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ"}
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ /**
3
+ * Service Discovery Client for Consul Integration
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ServiceDiscoveryClient = void 0;
10
+ const axios_1 = __importDefault(require("axios"));
11
+ const logger_js_1 = require("../utils/logger.js");
12
+ class ServiceDiscoveryClient {
13
+ constructor(config) {
14
+ this.config = {
15
+ consulUrl: process.env.CONSUL_URL || 'http://consul:8500',
16
+ timeout: 5000,
17
+ retryAttempts: 3,
18
+ ...config
19
+ };
20
+ this.logger = new logger_js_1.Logger('ServiceDiscovery');
21
+ this.client = axios_1.default.create({
22
+ baseURL: this.config.consulUrl,
23
+ timeout: this.config.timeout,
24
+ headers: {
25
+ 'Content-Type': 'application/json'
26
+ }
27
+ });
28
+ // Request interceptor for logging
29
+ this.client.interceptors.request.use((config) => {
30
+ this.logger.debug(`Making request to Consul: ${config.method?.toUpperCase()} ${config.url}`);
31
+ return config;
32
+ }, (error) => {
33
+ this.logger.error('Request interceptor error:', error);
34
+ return Promise.reject(error);
35
+ });
36
+ // Response interceptor for error handling
37
+ this.client.interceptors.response.use((response) => response, (error) => {
38
+ if (error.code === 'ECONNREFUSED' || error.code === 'ENOTFOUND') {
39
+ this.logger.warn('Consul is not available, running without service discovery');
40
+ }
41
+ else {
42
+ this.logger.error('Consul request failed:', error.message);
43
+ }
44
+ return Promise.reject(error);
45
+ });
46
+ }
47
+ /**
48
+ * Register a service with Consul
49
+ */
50
+ async register(service) {
51
+ const registration = {
52
+ ID: service.id,
53
+ Name: service.name,
54
+ Address: service.address,
55
+ Port: service.port,
56
+ Tags: service.tags || [],
57
+ Meta: {
58
+ version: '1.0.0',
59
+ ...(service.meta || {})
60
+ }
61
+ };
62
+ // Add health check if specified
63
+ if (service.health) {
64
+ const check = {
65
+ Interval: service.health.interval || '30s',
66
+ Timeout: service.health.timeout || '10s',
67
+ DeregisterCriticalServiceAfter: service.health.deregisterAfter || '1m'
68
+ };
69
+ if (service.health.http) {
70
+ check.HTTP = service.health.http;
71
+ }
72
+ else if (service.health.tcp) {
73
+ check.TCP = service.health.tcp;
74
+ }
75
+ registration['Check'] = check;
76
+ }
77
+ let lastError;
78
+ for (let attempt = 1; attempt <= this.config.retryAttempts; attempt++) {
79
+ try {
80
+ await this.client.put(`/v1/agent/service/register`, registration);
81
+ this.logger.info(`Service registered: ${service.name} (${service.id})`);
82
+ return;
83
+ }
84
+ catch (error) {
85
+ lastError = error;
86
+ if (attempt < this.config.retryAttempts) {
87
+ const delay = Math.pow(2, attempt) * 1000; // Exponential backoff
88
+ this.logger.warn(`Registration attempt ${attempt} failed, retrying in ${delay}ms...`);
89
+ await new Promise(resolve => setTimeout(resolve, delay));
90
+ }
91
+ }
92
+ }
93
+ throw new Error(`Failed to register service after ${this.config.retryAttempts} attempts: ${lastError?.message}`);
94
+ }
95
+ /**
96
+ * Deregister a service from Consul
97
+ */
98
+ async deregister(serviceId) {
99
+ try {
100
+ await this.client.put(`/v1/agent/service/deregister/${serviceId}`);
101
+ this.logger.info(`Service deregistered: ${serviceId}`);
102
+ }
103
+ catch (error) {
104
+ this.logger.error(`Failed to deregister service ${serviceId}:`, error.message);
105
+ throw error;
106
+ }
107
+ }
108
+ /**
109
+ * Discover services by name
110
+ */
111
+ async discover(serviceName, healthy = true) {
112
+ try {
113
+ const endpoint = healthy
114
+ ? `/v1/health/service/${serviceName}?passing=true`
115
+ : `/v1/health/service/${serviceName}`;
116
+ const response = await this.client.get(endpoint);
117
+ return response.data.map((entry) => ({
118
+ id: entry.Service.ID,
119
+ name: entry.Service.Service,
120
+ address: entry.Service.Address,
121
+ port: entry.Service.Port,
122
+ tags: entry.Service.Tags,
123
+ meta: entry.Service.Meta,
124
+ health: entry.Checks?.map((check) => ({
125
+ status: check.Status,
126
+ output: check.Output,
127
+ name: check.Name
128
+ }))
129
+ }));
130
+ }
131
+ catch (error) {
132
+ this.logger.error(`Failed to discover service ${serviceName}:`, error.message);
133
+ throw error;
134
+ }
135
+ }
136
+ /**
137
+ * List all services
138
+ */
139
+ async listServices() {
140
+ try {
141
+ const response = await this.client.get('/v1/agent/services');
142
+ return Object.keys(response.data);
143
+ }
144
+ catch (error) {
145
+ this.logger.error('Failed to list services:', error.message);
146
+ throw error;
147
+ }
148
+ }
149
+ /**
150
+ * Get service health status
151
+ */
152
+ async getServiceHealth(serviceName) {
153
+ try {
154
+ const response = await this.client.get(`/v1/health/service/${serviceName}`);
155
+ return response.data.map((entry) => ({
156
+ serviceId: entry.Service.ID,
157
+ serviceName: entry.Service.Service,
158
+ address: entry.Service.Address,
159
+ port: entry.Service.Port,
160
+ checks: entry.Checks.map((check) => ({
161
+ checkId: check.CheckID,
162
+ name: check.Name,
163
+ status: check.Status,
164
+ output: check.Output
165
+ }))
166
+ }));
167
+ }
168
+ catch (error) {
169
+ this.logger.error(`Failed to get health for service ${serviceName}:`, error.message);
170
+ throw error;
171
+ }
172
+ }
173
+ /**
174
+ * Check if Consul is available
175
+ */
176
+ async isAvailable() {
177
+ try {
178
+ await this.client.get('/v1/status/leader');
179
+ return true;
180
+ }
181
+ catch (error) {
182
+ return false;
183
+ }
184
+ }
185
+ /**
186
+ * Watch for service changes (simplified polling approach)
187
+ */
188
+ watchService(serviceName, callback, interval = 10000) {
189
+ let isWatching = true;
190
+ const poll = async () => {
191
+ if (!isWatching)
192
+ return;
193
+ try {
194
+ const services = await this.discover(serviceName);
195
+ callback(services);
196
+ }
197
+ catch (error) {
198
+ this.logger.warn(`Failed to poll service ${serviceName}:`, error);
199
+ }
200
+ if (isWatching) {
201
+ setTimeout(poll, interval);
202
+ }
203
+ };
204
+ poll();
205
+ return () => {
206
+ isWatching = false;
207
+ };
208
+ }
209
+ }
210
+ exports.ServiceDiscoveryClient = ServiceDiscoveryClient;
211
+ //# sourceMappingURL=service-discovery-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-discovery-client.js","sourceRoot":"","sources":["../../src/mcp/service-discovery-client.ts"],"names":[],"mappings":"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"}