mcp-adr-analysis-server 2.6.20 → 2.7.18

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 (35) hide show
  1. package/README.md +12 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/index.d.ts.map +1 -1
  4. package/dist/src/index.js +54 -9
  5. package/dist/src/index.js.map +1 -1
  6. package/dist/src/resources/deployment-status-resource.d.ts.map +1 -1
  7. package/dist/src/resources/deployment-status-resource.js +31 -24
  8. package/dist/src/resources/deployment-status-resource.js.map +1 -1
  9. package/dist/src/tools/adr-suggestion-tool.js +2 -1
  10. package/dist/src/tools/adr-suggestion-tool.js.map +1 -1
  11. package/dist/src/tools/ce-mcp-tools.d.ts +14 -1
  12. package/dist/src/tools/ce-mcp-tools.d.ts.map +1 -1
  13. package/dist/src/tools/ce-mcp-tools.js +27 -1
  14. package/dist/src/tools/ce-mcp-tools.js.map +1 -1
  15. package/dist/src/tools/tool-catalog.d.ts +1 -1
  16. package/dist/src/tools/tool-catalog.js +59 -59
  17. package/dist/src/tools/tool-catalog.js.map +1 -1
  18. package/dist/src/tools/tool-dispatcher.d.ts +1 -1
  19. package/dist/src/tools/tool-dispatcher.js +1 -1
  20. package/dist/src/tools/tree-sitter-code-tools.d.ts +6 -1
  21. package/dist/src/tools/tree-sitter-code-tools.d.ts.map +1 -1
  22. package/dist/src/tools/tree-sitter-code-tools.js +6 -1
  23. package/dist/src/tools/tree-sitter-code-tools.js.map +1 -1
  24. package/dist/src/utils/adr-discovery.d.ts.map +1 -1
  25. package/dist/src/utils/adr-discovery.js +33 -5
  26. package/dist/src/utils/adr-discovery.js.map +1 -1
  27. package/dist/src/utils/knowledge-graph-manager.d.ts +11 -0
  28. package/dist/src/utils/knowledge-graph-manager.d.ts.map +1 -1
  29. package/dist/src/utils/knowledge-graph-manager.js +52 -6
  30. package/dist/src/utils/knowledge-graph-manager.js.map +1 -1
  31. package/package.json +2 -1
  32. package/dist/src/utils/monitoring.d.ts +0 -249
  33. package/dist/src/utils/monitoring.d.ts.map +0 -1
  34. package/dist/src/utils/monitoring.js +0 -513
  35. package/dist/src/utils/monitoring.js.map +0 -1
@@ -1,513 +0,0 @@
1
- /**
2
- * Monitoring and Analytics Framework
3
- *
4
- * Provides comprehensive monitoring and analytics for MCP server:
5
- * - Request/response tracking
6
- * - Performance metrics (latency, throughput)
7
- * - Error tracking and reporting
8
- * - Resource usage analytics
9
- * - Cache performance metrics
10
- * - Tool execution metrics
11
- * - Health checks
12
- * - Metrics aggregation and reporting
13
- */
14
- /**
15
- * Metric types for categorization
16
- */
17
- export var MetricType;
18
- (function (MetricType) {
19
- MetricType["COUNTER"] = "counter";
20
- MetricType["GAUGE"] = "gauge";
21
- MetricType["HISTOGRAM"] = "histogram";
22
- MetricType["TIMER"] = "timer";
23
- })(MetricType || (MetricType = {}));
24
- /**
25
- * Metric category for organization
26
- */
27
- export var MetricCategory;
28
- (function (MetricCategory) {
29
- MetricCategory["REQUEST"] = "request";
30
- MetricCategory["RESOURCE"] = "resource";
31
- MetricCategory["TOOL"] = "tool";
32
- MetricCategory["CACHE"] = "cache";
33
- MetricCategory["ERROR"] = "error";
34
- MetricCategory["PERFORMANCE"] = "performance";
35
- MetricCategory["SYSTEM"] = "system";
36
- })(MetricCategory || (MetricCategory = {}));
37
- /**
38
- * Default monitoring configuration
39
- */
40
- const DEFAULT_CONFIG = {
41
- enabled: true,
42
- metricsRetentionMs: 3600000, // 1 hour
43
- aggregationIntervalMs: 60000, // 1 minute
44
- maxMetricsInMemory: 10000,
45
- enableHealthChecks: true,
46
- healthCheckIntervalMs: 30000, // 30 seconds
47
- };
48
- /**
49
- * Monitoring manager class
50
- */
51
- export class MonitoringManager {
52
- config;
53
- metrics = [];
54
- requests = new Map();
55
- healthChecks = new Map();
56
- aggregationTimer = null;
57
- healthCheckTimer = null;
58
- startTime;
59
- constructor(config = {}) {
60
- this.config = { ...DEFAULT_CONFIG, ...config };
61
- this.startTime = new Date().toISOString();
62
- if (this.config.enabled) {
63
- this.startAggregation();
64
- if (this.config.enableHealthChecks) {
65
- this.startHealthChecks();
66
- }
67
- }
68
- }
69
- /**
70
- * Record a counter metric (incrementing value)
71
- */
72
- recordCounter(name, category, value = 1, tags, metadata) {
73
- if (!this.config.enabled)
74
- return;
75
- const metric = {
76
- name,
77
- type: MetricType.COUNTER,
78
- category,
79
- value,
80
- timestamp: new Date().toISOString(),
81
- };
82
- if (tags) {
83
- metric.tags = tags;
84
- }
85
- if (metadata) {
86
- metric.metadata = metadata;
87
- }
88
- this.addMetric(metric);
89
- }
90
- /**
91
- * Record a gauge metric (point-in-time value)
92
- */
93
- recordGauge(name, category, value, tags, metadata) {
94
- if (!this.config.enabled)
95
- return;
96
- const metric = {
97
- name,
98
- type: MetricType.GAUGE,
99
- category,
100
- value,
101
- timestamp: new Date().toISOString(),
102
- };
103
- if (tags) {
104
- metric.tags = tags;
105
- }
106
- if (metadata) {
107
- metric.metadata = metadata;
108
- }
109
- this.addMetric(metric);
110
- }
111
- /**
112
- * Record a histogram value (for distribution analysis)
113
- */
114
- recordHistogram(name, category, value, tags, metadata) {
115
- if (!this.config.enabled)
116
- return;
117
- const metric = {
118
- name,
119
- type: MetricType.HISTOGRAM,
120
- category,
121
- value,
122
- timestamp: new Date().toISOString(),
123
- };
124
- if (tags) {
125
- metric.tags = tags;
126
- }
127
- if (metadata) {
128
- metric.metadata = metadata;
129
- }
130
- this.addMetric(metric);
131
- }
132
- /**
133
- * Start tracking a request
134
- */
135
- startRequest(requestId, type, name, metadata) {
136
- if (!this.config.enabled)
137
- return;
138
- const request = {
139
- requestId,
140
- type,
141
- name,
142
- startTime: new Date().toISOString(),
143
- status: 'pending',
144
- };
145
- if (metadata) {
146
- request.metadata = metadata;
147
- }
148
- this.requests.set(requestId, request);
149
- this.recordCounter('request.started', MetricCategory.REQUEST, 1, { type, name });
150
- }
151
- /**
152
- * Complete a request successfully
153
- */
154
- completeRequest(requestId, metadata) {
155
- if (!this.config.enabled)
156
- return;
157
- const request = this.requests.get(requestId);
158
- if (!request)
159
- return;
160
- const endTime = new Date().toISOString();
161
- const duration = new Date(endTime).getTime() - new Date(request.startTime).getTime();
162
- request.endTime = endTime;
163
- request.duration = duration;
164
- request.status = 'success';
165
- if (metadata) {
166
- request.metadata = { ...request.metadata, ...metadata };
167
- }
168
- this.recordCounter('request.completed', MetricCategory.REQUEST, 1, {
169
- type: request.type,
170
- name: request.name,
171
- });
172
- this.recordHistogram('request.duration', MetricCategory.PERFORMANCE, duration, {
173
- type: request.type,
174
- name: request.name,
175
- });
176
- }
177
- /**
178
- * Mark a request as failed
179
- */
180
- failRequest(requestId, error, metadata) {
181
- if (!this.config.enabled)
182
- return;
183
- const request = this.requests.get(requestId);
184
- if (!request)
185
- return;
186
- const endTime = new Date().toISOString();
187
- const duration = new Date(endTime).getTime() - new Date(request.startTime).getTime();
188
- request.endTime = endTime;
189
- request.duration = duration;
190
- request.status = 'error';
191
- request.error = error;
192
- if (metadata) {
193
- request.metadata = { ...request.metadata, ...metadata };
194
- }
195
- this.recordCounter('request.failed', MetricCategory.REQUEST, 1, {
196
- type: request.type,
197
- name: request.name,
198
- });
199
- this.recordCounter('error.total', MetricCategory.ERROR, 1, {
200
- type: request.type,
201
- name: request.name,
202
- error,
203
- });
204
- }
205
- /**
206
- * Record cache hit
207
- */
208
- recordCacheHit(cacheKey) {
209
- if (!this.config.enabled)
210
- return;
211
- this.recordCounter('cache.hit', MetricCategory.CACHE, 1, { key: cacheKey });
212
- }
213
- /**
214
- * Record cache miss
215
- */
216
- recordCacheMiss(cacheKey) {
217
- if (!this.config.enabled)
218
- return;
219
- this.recordCounter('cache.miss', MetricCategory.CACHE, 1, { key: cacheKey });
220
- }
221
- /**
222
- * Register a health check
223
- */
224
- registerHealthCheck(_name, _check) {
225
- // Store health check function for periodic execution
226
- // Implementation would store the check function and run it periodically
227
- // For now, we'll just track the results when manually called
228
- }
229
- /**
230
- * Run a health check
231
- */
232
- async runHealthCheck(name, check) {
233
- const startTime = Date.now();
234
- const timestamp = new Date().toISOString();
235
- try {
236
- const result = await check();
237
- const duration = Date.now() - startTime;
238
- const healthCheck = {
239
- name,
240
- status: result.status,
241
- timestamp,
242
- duration,
243
- };
244
- if (result.message) {
245
- healthCheck.message = result.message;
246
- }
247
- this.healthChecks.set(name, healthCheck);
248
- return healthCheck;
249
- }
250
- catch (error) {
251
- const duration = Date.now() - startTime;
252
- const healthCheck = {
253
- name,
254
- status: 'unhealthy',
255
- message: error instanceof Error ? error.message : 'Unknown error',
256
- timestamp,
257
- duration,
258
- };
259
- this.healthChecks.set(name, healthCheck);
260
- return healthCheck;
261
- }
262
- }
263
- /**
264
- * Get all health checks
265
- */
266
- getHealthChecks() {
267
- return Array.from(this.healthChecks.values());
268
- }
269
- /**
270
- * Get overall health status
271
- */
272
- getHealthStatus() {
273
- const checks = this.getHealthChecks();
274
- if (checks.length === 0)
275
- return 'healthy';
276
- const unhealthy = checks.filter(c => c.status === 'unhealthy');
277
- const degraded = checks.filter(c => c.status === 'degraded');
278
- if (unhealthy.length > 0)
279
- return 'unhealthy';
280
- if (degraded.length > 0)
281
- return 'degraded';
282
- return 'healthy';
283
- }
284
- /**
285
- * Get performance snapshot
286
- */
287
- getPerformanceSnapshot() {
288
- const now = new Date().toISOString();
289
- const requests = Array.from(this.requests.values());
290
- const total = requests.length;
291
- const success = requests.filter(r => r.status === 'success').length;
292
- const error = requests.filter(r => r.status === 'error').length;
293
- const pending = requests.filter(r => r.status === 'pending').length;
294
- // Calculate latency percentiles
295
- const durations = requests
296
- .filter(r => r.duration !== undefined)
297
- .map(r => r.duration)
298
- .sort((a, b) => a - b);
299
- const latency = this.calculatePercentiles(durations);
300
- // Calculate throughput
301
- const oneMinuteAgo = Date.now() - 60000;
302
- const recentRequests = requests.filter(r => r.startTime && new Date(r.startTime).getTime() > oneMinuteAgo);
303
- const throughput = {
304
- requestsPerSecond: recentRequests.length / 60,
305
- requestsPerMinute: recentRequests.length,
306
- };
307
- // Cache metrics
308
- const cacheHits = this.getMetricSum('cache.hit', MetricCategory.CACHE);
309
- const cacheMisses = this.getMetricSum('cache.miss', MetricCategory.CACHE);
310
- const cacheTotal = cacheHits + cacheMisses;
311
- const hitRate = cacheTotal > 0 ? cacheHits / cacheTotal : 0;
312
- // Error metrics
313
- const errorMetrics = this.metrics.filter(m => m.category === MetricCategory.ERROR);
314
- const errorsByType = {};
315
- for (const metric of errorMetrics) {
316
- const errorType = metric.tags?.['error'] || 'unknown';
317
- errorsByType[errorType] = (errorsByType[errorType] || 0) + metric.value;
318
- }
319
- return {
320
- timestamp: now,
321
- requests: { total, success, error, pending },
322
- latency,
323
- throughput,
324
- cache: {
325
- hitRate,
326
- totalHits: cacheHits,
327
- totalMisses: cacheMisses,
328
- },
329
- errors: {
330
- total: error,
331
- byType: errorsByType,
332
- },
333
- };
334
- }
335
- /**
336
- * Get metric statistics by name and category
337
- */
338
- getMetricStats(name, category) {
339
- const metricValues = this.metrics
340
- .filter(m => m.name === name && m.category === category)
341
- .map(m => m.value)
342
- .sort((a, b) => a - b);
343
- if (metricValues.length === 0)
344
- return null;
345
- return this.calculateStats(metricValues);
346
- }
347
- /**
348
- * Get all metrics
349
- */
350
- getMetrics() {
351
- return [...this.metrics];
352
- }
353
- /**
354
- * Get metrics by category
355
- */
356
- getMetricsByCategory(category) {
357
- return this.metrics.filter(m => m.category === category);
358
- }
359
- /**
360
- * Get recent requests
361
- */
362
- getRecentRequests(limit = 100) {
363
- return Array.from(this.requests.values())
364
- .sort((a, b) => new Date(b.startTime).getTime() - new Date(a.startTime).getTime())
365
- .slice(0, limit);
366
- }
367
- /**
368
- * Clear old metrics based on retention policy
369
- */
370
- cleanup() {
371
- const cutoff = Date.now() - this.config.metricsRetentionMs;
372
- const initialCount = this.metrics.length;
373
- this.metrics = this.metrics.filter(m => new Date(m.timestamp).getTime() > cutoff);
374
- // Also clean up old requests
375
- const requestsToDelete = [];
376
- for (const [id, request] of this.requests.entries()) {
377
- if (request.endTime && new Date(request.endTime).getTime() < cutoff) {
378
- requestsToDelete.push(id);
379
- }
380
- }
381
- requestsToDelete.forEach(id => this.requests.delete(id));
382
- return initialCount - this.metrics.length;
383
- }
384
- /**
385
- * Reset all metrics
386
- */
387
- reset() {
388
- this.metrics = [];
389
- this.requests.clear();
390
- this.healthChecks.clear();
391
- }
392
- /**
393
- * Stop monitoring
394
- */
395
- stop() {
396
- if (this.aggregationTimer) {
397
- clearInterval(this.aggregationTimer);
398
- this.aggregationTimer = null;
399
- }
400
- if (this.healthCheckTimer) {
401
- clearInterval(this.healthCheckTimer);
402
- this.healthCheckTimer = null;
403
- }
404
- }
405
- /**
406
- * Get uptime in milliseconds
407
- */
408
- getUptime() {
409
- return Date.now() - new Date(this.startTime).getTime();
410
- }
411
- /**
412
- * Export metrics to JSON
413
- */
414
- exportMetrics() {
415
- return JSON.stringify({
416
- metrics: this.metrics,
417
- requests: Array.from(this.requests.values()),
418
- healthChecks: Array.from(this.healthChecks.values()),
419
- performance: this.getPerformanceSnapshot(),
420
- uptime: this.getUptime(),
421
- timestamp: new Date().toISOString(),
422
- }, null, 2);
423
- }
424
- // Private methods
425
- addMetric(metric) {
426
- this.metrics.push(metric);
427
- // Enforce max metrics limit
428
- if (this.metrics.length > this.config.maxMetricsInMemory) {
429
- const toRemove = this.metrics.length - this.config.maxMetricsInMemory;
430
- this.metrics.splice(0, toRemove);
431
- }
432
- }
433
- getMetricSum(name, category) {
434
- return this.metrics
435
- .filter(m => m.name === name && m.category === category)
436
- .reduce((sum, m) => sum + m.value, 0);
437
- }
438
- calculatePercentiles(values) {
439
- if (values.length === 0) {
440
- return { p50: 0, p95: 0, p99: 0, avg: 0 };
441
- }
442
- const sorted = [...values].sort((a, b) => a - b);
443
- const avg = sorted.reduce((sum, v) => sum + v, 0) / sorted.length;
444
- return {
445
- p50: this.percentile(sorted, 50),
446
- p95: this.percentile(sorted, 95),
447
- p99: this.percentile(sorted, 99),
448
- avg,
449
- };
450
- }
451
- calculateStats(values) {
452
- if (values.length === 0) {
453
- return { count: 0, sum: 0, min: 0, max: 0, avg: 0, p50: 0, p95: 0, p99: 0 };
454
- }
455
- const sorted = [...values].sort((a, b) => a - b);
456
- const sum = sorted.reduce((s, v) => s + v, 0);
457
- const avg = sum / sorted.length;
458
- return {
459
- count: sorted.length,
460
- sum,
461
- min: sorted[0],
462
- max: sorted[sorted.length - 1],
463
- avg,
464
- p50: this.percentile(sorted, 50),
465
- p95: this.percentile(sorted, 95),
466
- p99: this.percentile(sorted, 99),
467
- };
468
- }
469
- percentile(sorted, p) {
470
- if (sorted.length === 0)
471
- return 0;
472
- const index = Math.ceil((p / 100) * sorted.length) - 1;
473
- return sorted[Math.max(0, index)] || 0;
474
- }
475
- startAggregation() {
476
- this.aggregationTimer = setInterval(() => {
477
- this.cleanup();
478
- }, this.config.aggregationIntervalMs);
479
- }
480
- startHealthChecks() {
481
- // Placeholder for periodic health check execution
482
- this.healthCheckTimer = setInterval(() => {
483
- // Would run registered health checks here
484
- }, this.config.healthCheckIntervalMs);
485
- }
486
- }
487
- /**
488
- * Singleton monitoring instance
489
- */
490
- export const monitoring = new MonitoringManager();
491
- /**
492
- * Helper to track async operations
493
- */
494
- export async function trackOperation(operation, name, category, tags) {
495
- const startTime = Date.now();
496
- try {
497
- const result = await operation();
498
- const duration = Date.now() - startTime;
499
- monitoring.recordHistogram(`${name}.duration`, category, duration, tags);
500
- monitoring.recordCounter(`${name}.success`, category, 1, tags);
501
- return result;
502
- }
503
- catch (error) {
504
- const duration = Date.now() - startTime;
505
- monitoring.recordHistogram(`${name}.duration`, category, duration, tags);
506
- monitoring.recordCounter(`${name}.error`, category, 1, {
507
- ...tags,
508
- error: error instanceof Error ? error.message : 'Unknown error',
509
- });
510
- throw error;
511
- }
512
- }
513
- //# sourceMappingURL=monitoring.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"monitoring.js","sourceRoot":"","sources":["../../../src/utils/monitoring.ts"],"names":[],"mappings":"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"}