@monoes/monomindcli 1.15.3 → 1.15.5
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/src/mcp-client.d.ts.map +1 -1
- package/dist/src/mcp-client.js +7 -0
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-tools/coherence/causal-infer.d.ts +15 -0
- package/dist/src/mcp-tools/coherence/causal-infer.d.ts.map +1 -0
- package/dist/src/mcp-tools/coherence/causal-infer.js +347 -0
- package/dist/src/mcp-tools/coherence/causal-infer.js.map +1 -0
- package/dist/src/mcp-tools/coherence/coherence-check.d.ts +15 -0
- package/dist/src/mcp-tools/coherence/coherence-check.d.ts.map +1 -0
- package/dist/src/mcp-tools/coherence/coherence-check.js +206 -0
- package/dist/src/mcp-tools/coherence/coherence-check.js.map +1 -0
- package/dist/src/mcp-tools/coherence/consensus-verify.d.ts +15 -0
- package/dist/src/mcp-tools/coherence/consensus-verify.d.ts.map +1 -0
- package/dist/src/mcp-tools/coherence/consensus-verify.js +303 -0
- package/dist/src/mcp-tools/coherence/consensus-verify.js.map +1 -0
- package/dist/src/mcp-tools/coherence/memory-gate.d.ts +15 -0
- package/dist/src/mcp-tools/coherence/memory-gate.d.ts.map +1 -0
- package/dist/src/mcp-tools/coherence/memory-gate.js +266 -0
- package/dist/src/mcp-tools/coherence/memory-gate.js.map +1 -0
- package/dist/src/mcp-tools/coherence/quantum-topology.d.ts +15 -0
- package/dist/src/mcp-tools/coherence/quantum-topology.d.ts.map +1 -0
- package/dist/src/mcp-tools/coherence/quantum-topology.js +406 -0
- package/dist/src/mcp-tools/coherence/quantum-topology.js.map +1 -0
- package/dist/src/mcp-tools/coherence/spectral-analyze.d.ts +15 -0
- package/dist/src/mcp-tools/coherence/spectral-analyze.d.ts.map +1 -0
- package/dist/src/mcp-tools/coherence/spectral-analyze.js +293 -0
- package/dist/src/mcp-tools/coherence/spectral-analyze.js.map +1 -0
- package/dist/src/mcp-tools/coherence/types.d.ts +277 -0
- package/dist/src/mcp-tools/coherence/types.d.ts.map +1 -0
- package/dist/src/mcp-tools/coherence/types.js +159 -0
- package/dist/src/mcp-tools/coherence/types.js.map +1 -0
- package/dist/src/mcp-tools/coherence-tools.d.ts +9 -0
- package/dist/src/mcp-tools/coherence-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/coherence-tools.js +25 -0
- package/dist/src/mcp-tools/coherence-tools.js.map +1 -0
- package/dist/src/mcp-tools/quality/chaos-resilience/chaos-inject.d.ts +163 -0
- package/dist/src/mcp-tools/quality/chaos-resilience/chaos-inject.d.ts.map +1 -0
- package/dist/src/mcp-tools/quality/chaos-resilience/chaos-inject.js +414 -0
- package/dist/src/mcp-tools/quality/chaos-resilience/chaos-inject.js.map +1 -0
- package/dist/src/mcp-tools/quality/coverage-analysis/analyze-coverage.d.ts +128 -0
- package/dist/src/mcp-tools/quality/coverage-analysis/analyze-coverage.d.ts.map +1 -0
- package/dist/src/mcp-tools/quality/coverage-analysis/analyze-coverage.js +375 -0
- package/dist/src/mcp-tools/quality/coverage-analysis/analyze-coverage.js.map +1 -0
- package/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.d.ts +161 -0
- package/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.d.ts.map +1 -0
- package/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.js +423 -0
- package/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.js.map +1 -0
- package/dist/src/mcp-tools/quality/coverage-analysis/track-trends.d.ts +165 -0
- package/dist/src/mcp-tools/quality/coverage-analysis/track-trends.d.ts.map +1 -0
- package/dist/src/mcp-tools/quality/coverage-analysis/track-trends.js +395 -0
- package/dist/src/mcp-tools/quality/coverage-analysis/track-trends.js.map +1 -0
- package/dist/src/mcp-tools/quality/defect-intelligence/analyze-root-cause.d.ts +165 -0
- package/dist/src/mcp-tools/quality/defect-intelligence/analyze-root-cause.d.ts.map +1 -0
- package/dist/src/mcp-tools/quality/defect-intelligence/analyze-root-cause.js +508 -0
- package/dist/src/mcp-tools/quality/defect-intelligence/analyze-root-cause.js.map +1 -0
- package/dist/src/mcp-tools/quality/defect-intelligence/find-similar-defects.d.ts +147 -0
- package/dist/src/mcp-tools/quality/defect-intelligence/find-similar-defects.d.ts.map +1 -0
- package/dist/src/mcp-tools/quality/defect-intelligence/find-similar-defects.js +391 -0
- package/dist/src/mcp-tools/quality/defect-intelligence/find-similar-defects.js.map +1 -0
- package/dist/src/mcp-tools/quality/defect-intelligence/predict-defects.d.ts +147 -0
- package/dist/src/mcp-tools/quality/defect-intelligence/predict-defects.d.ts.map +1 -0
- package/dist/src/mcp-tools/quality/defect-intelligence/predict-defects.js +422 -0
- package/dist/src/mcp-tools/quality/defect-intelligence/predict-defects.js.map +1 -0
- package/dist/src/mcp-tools/quality/quality-assessment/assess-readiness.d.ts +185 -0
- package/dist/src/mcp-tools/quality/quality-assessment/assess-readiness.d.ts.map +1 -0
- package/dist/src/mcp-tools/quality/quality-assessment/assess-readiness.js +437 -0
- package/dist/src/mcp-tools/quality/quality-assessment/assess-readiness.js.map +1 -0
- package/dist/src/mcp-tools/quality/quality-assessment/calculate-risk.d.ts +166 -0
- package/dist/src/mcp-tools/quality/quality-assessment/calculate-risk.d.ts.map +1 -0
- package/dist/src/mcp-tools/quality/quality-assessment/calculate-risk.js +410 -0
- package/dist/src/mcp-tools/quality/quality-assessment/calculate-risk.js.map +1 -0
- package/dist/src/mcp-tools/quality/quality-assessment/evaluate-quality-gate.d.ts +201 -0
- package/dist/src/mcp-tools/quality/quality-assessment/evaluate-quality-gate.d.ts.map +1 -0
- package/dist/src/mcp-tools/quality/quality-assessment/evaluate-quality-gate.js +363 -0
- package/dist/src/mcp-tools/quality/quality-assessment/evaluate-quality-gate.js.map +1 -0
- package/dist/src/mcp-tools/quality/security-compliance/audit-compliance.d.ts +166 -0
- package/dist/src/mcp-tools/quality/security-compliance/audit-compliance.d.ts.map +1 -0
- package/dist/src/mcp-tools/quality/security-compliance/audit-compliance.js +394 -0
- package/dist/src/mcp-tools/quality/security-compliance/audit-compliance.js.map +1 -0
- package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.d.ts +129 -0
- package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.d.ts.map +1 -0
- package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.js +383 -0
- package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.js.map +1 -0
- package/dist/src/mcp-tools/quality/security-compliance/security-scan.d.ts +171 -0
- package/dist/src/mcp-tools/quality/security-compliance/security-scan.d.ts.map +1 -0
- package/dist/src/mcp-tools/quality/security-compliance/security-scan.js +476 -0
- package/dist/src/mcp-tools/quality/security-compliance/security-scan.js.map +1 -0
- package/dist/src/mcp-tools/quality/test-generation/generate-tests.d.ts +147 -0
- package/dist/src/mcp-tools/quality/test-generation/generate-tests.d.ts.map +1 -0
- package/dist/src/mcp-tools/quality/test-generation/generate-tests.js +400 -0
- package/dist/src/mcp-tools/quality/test-generation/generate-tests.js.map +1 -0
- package/dist/src/mcp-tools/quality/test-generation/suggest-tests.d.ts +145 -0
- package/dist/src/mcp-tools/quality/test-generation/suggest-tests.d.ts.map +1 -0
- package/dist/src/mcp-tools/quality/test-generation/suggest-tests.js +328 -0
- package/dist/src/mcp-tools/quality/test-generation/suggest-tests.js.map +1 -0
- package/dist/src/mcp-tools/quality/test-generation/tdd-cycle.d.ts +126 -0
- package/dist/src/mcp-tools/quality/test-generation/tdd-cycle.d.ts.map +1 -0
- package/dist/src/mcp-tools/quality/test-generation/tdd-cycle.js +348 -0
- package/dist/src/mcp-tools/quality/test-generation/tdd-cycle.js.map +1 -0
- package/dist/src/mcp-tools/quality-tools.d.ts +9 -0
- package/dist/src/mcp-tools/quality-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/quality-tools.js +308 -0
- package/dist/src/mcp-tools/quality-tools.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* chaos-inject.ts - Chaos failure injection MCP tool handler
|
|
3
|
+
*
|
|
4
|
+
* Injects controlled failures for resilience testing including network
|
|
5
|
+
* latency, process termination, resource exhaustion, and more.
|
|
6
|
+
* Includes dryRun safety mode.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
// Input schema for chaos-inject tool
|
|
10
|
+
export const ChaosInjectInputSchema = z.object({
|
|
11
|
+
target: z.string().describe('Target service/component for chaos injection'),
|
|
12
|
+
failureType: z
|
|
13
|
+
.enum([
|
|
14
|
+
'network-latency',
|
|
15
|
+
'network-partition',
|
|
16
|
+
'cpu-stress',
|
|
17
|
+
'memory-pressure',
|
|
18
|
+
'disk-failure',
|
|
19
|
+
'process-kill',
|
|
20
|
+
'dns-failure',
|
|
21
|
+
'dependency-failure',
|
|
22
|
+
'clock-skew',
|
|
23
|
+
'packet-loss',
|
|
24
|
+
])
|
|
25
|
+
.describe('Type of failure to inject'),
|
|
26
|
+
duration: z.number().min(1).max(3600).default(30).describe('Duration in seconds'),
|
|
27
|
+
intensity: z.number().min(0).max(1).default(0.5).describe('Intensity 0-1'),
|
|
28
|
+
dryRun: z.boolean().default(true).describe('If true, simulate without actual injection'),
|
|
29
|
+
rollbackOnFailure: z.boolean().default(true).describe('Auto-rollback if issues detected'),
|
|
30
|
+
monitorMetrics: z.boolean().default(true).describe('Monitor system metrics during chaos'),
|
|
31
|
+
notifyChannels: z.array(z.string()).default([]).describe('Notification channels'),
|
|
32
|
+
parameters: z
|
|
33
|
+
.object({
|
|
34
|
+
latencyMs: z.number().optional().describe('Latency to add in ms'),
|
|
35
|
+
packetLossPercent: z.number().optional().describe('Packet loss percentage'),
|
|
36
|
+
cpuCores: z.number().optional().describe('Number of CPU cores to stress'),
|
|
37
|
+
memoryPercent: z.number().optional().describe('Memory pressure percentage'),
|
|
38
|
+
targetProcesses: z.array(z.string()).optional().describe('Processes to target'),
|
|
39
|
+
})
|
|
40
|
+
.optional()
|
|
41
|
+
.describe('Type-specific parameters'),
|
|
42
|
+
});
|
|
43
|
+
/**
|
|
44
|
+
* MCP Tool Handler for chaos-inject
|
|
45
|
+
*/
|
|
46
|
+
export async function handler(input, context) {
|
|
47
|
+
const startTime = Date.now();
|
|
48
|
+
const experimentId = `chaos-${Date.now()}-${Math.random().toString(36).substring(7)}`;
|
|
49
|
+
try {
|
|
50
|
+
// Validate input
|
|
51
|
+
const validatedInput = ChaosInjectInputSchema.parse(input);
|
|
52
|
+
// SAFETY: Check for dry run mode
|
|
53
|
+
if (!validatedInput.dryRun) {
|
|
54
|
+
// In a real implementation, would require explicit confirmation
|
|
55
|
+
// For MCP tool, we default to dry run for safety
|
|
56
|
+
console.warn('Non-dry-run chaos injection requested - proceeding with simulation');
|
|
57
|
+
}
|
|
58
|
+
// Generate experiment timeline
|
|
59
|
+
const timeline = [];
|
|
60
|
+
const experimentStart = new Date().toISOString();
|
|
61
|
+
timeline.push({
|
|
62
|
+
timestamp: experimentStart,
|
|
63
|
+
event: 'Experiment initialized',
|
|
64
|
+
type: 'info',
|
|
65
|
+
details: `Chaos experiment ${experimentId} created for ${validatedInput.target}`,
|
|
66
|
+
});
|
|
67
|
+
// Capture baseline metrics
|
|
68
|
+
const baseline = captureMetricSnapshot('baseline');
|
|
69
|
+
timeline.push({
|
|
70
|
+
timestamp: new Date().toISOString(),
|
|
71
|
+
event: 'Baseline captured',
|
|
72
|
+
type: 'info',
|
|
73
|
+
details: `CPU: ${baseline.cpu}%, Memory: ${baseline.memory}%, Latency: ${baseline.networkLatency}ms`,
|
|
74
|
+
});
|
|
75
|
+
// Prepare injection details
|
|
76
|
+
const injection = prepareInjection(validatedInput);
|
|
77
|
+
timeline.push({
|
|
78
|
+
timestamp: new Date().toISOString(),
|
|
79
|
+
event: 'Injection prepared',
|
|
80
|
+
type: 'info',
|
|
81
|
+
details: `${validatedInput.failureType} injection ready for ${injection.affectedComponents.length} components`,
|
|
82
|
+
});
|
|
83
|
+
// Simulate chaos (or actually inject if not dry run)
|
|
84
|
+
const chaosResult = await simulateChaos(validatedInput, injection, validatedInput.dryRun);
|
|
85
|
+
// Add chaos events to timeline
|
|
86
|
+
timeline.push(...chaosResult.events);
|
|
87
|
+
// Capture during-chaos metrics
|
|
88
|
+
const duringChaos = captureMetricSnapshot('during-chaos', chaosResult.degradation);
|
|
89
|
+
timeline.push({
|
|
90
|
+
timestamp: new Date().toISOString(),
|
|
91
|
+
event: 'During-chaos metrics',
|
|
92
|
+
type: chaosResult.degradation > 50 ? 'warning' : 'info',
|
|
93
|
+
details: `CPU: ${duringChaos.cpu}%, Error rate: ${duringChaos.errorRate}%`,
|
|
94
|
+
});
|
|
95
|
+
// Check for rollback
|
|
96
|
+
let rollbackRequired = false;
|
|
97
|
+
let rollbackCompleted = false;
|
|
98
|
+
if (validatedInput.rollbackOnFailure && chaosResult.degradation > 80) {
|
|
99
|
+
rollbackRequired = true;
|
|
100
|
+
timeline.push({
|
|
101
|
+
timestamp: new Date().toISOString(),
|
|
102
|
+
event: 'Rollback triggered',
|
|
103
|
+
type: 'warning',
|
|
104
|
+
details: 'System degradation exceeded threshold, initiating rollback',
|
|
105
|
+
});
|
|
106
|
+
// Simulate rollback
|
|
107
|
+
await simulateRollback();
|
|
108
|
+
rollbackCompleted = true;
|
|
109
|
+
timeline.push({
|
|
110
|
+
timestamp: new Date().toISOString(),
|
|
111
|
+
event: 'Rollback completed',
|
|
112
|
+
type: 'recovery',
|
|
113
|
+
details: 'System restored to pre-chaos state',
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
// Capture after-chaos metrics
|
|
117
|
+
const afterChaos = captureMetricSnapshot('after-chaos', rollbackCompleted ? 0 : chaosResult.degradation * 0.3);
|
|
118
|
+
timeline.push({
|
|
119
|
+
timestamp: new Date().toISOString(),
|
|
120
|
+
event: 'Experiment completed',
|
|
121
|
+
type: 'info',
|
|
122
|
+
details: `Recovery time: ${chaosResult.recoveryTime}s`,
|
|
123
|
+
});
|
|
124
|
+
// Calculate impact
|
|
125
|
+
const impact = assessImpact(chaosResult, validatedInput.target);
|
|
126
|
+
// Generate recommendations
|
|
127
|
+
const recommendations = generateRecommendations(chaosResult, impact);
|
|
128
|
+
// Build result
|
|
129
|
+
const result = {
|
|
130
|
+
success: true,
|
|
131
|
+
experimentId,
|
|
132
|
+
status: {
|
|
133
|
+
state: validatedInput.dryRun ? 'dry-run' : 'completed',
|
|
134
|
+
progress: 100,
|
|
135
|
+
startTime: experimentStart,
|
|
136
|
+
endTime: new Date().toISOString(),
|
|
137
|
+
rollbackRequired,
|
|
138
|
+
rollbackCompleted,
|
|
139
|
+
},
|
|
140
|
+
injection,
|
|
141
|
+
impact,
|
|
142
|
+
metrics: {
|
|
143
|
+
baseline,
|
|
144
|
+
duringChaos,
|
|
145
|
+
afterChaos,
|
|
146
|
+
degradation: chaosResult.degradation,
|
|
147
|
+
recoveryTime: chaosResult.recoveryTime,
|
|
148
|
+
},
|
|
149
|
+
timeline,
|
|
150
|
+
recommendations,
|
|
151
|
+
metadata: {
|
|
152
|
+
experimentId,
|
|
153
|
+
createdAt: experimentStart,
|
|
154
|
+
completedAt: new Date().toISOString(),
|
|
155
|
+
dryRun: validatedInput.dryRun,
|
|
156
|
+
version: '3.2.3',
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
return {
|
|
160
|
+
content: [
|
|
161
|
+
{
|
|
162
|
+
type: 'text',
|
|
163
|
+
text: JSON.stringify(result, null, 2),
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
170
|
+
return {
|
|
171
|
+
content: [
|
|
172
|
+
{
|
|
173
|
+
type: 'text',
|
|
174
|
+
text: JSON.stringify({
|
|
175
|
+
success: false,
|
|
176
|
+
experimentId,
|
|
177
|
+
error: errorMessage,
|
|
178
|
+
status: {
|
|
179
|
+
state: 'aborted',
|
|
180
|
+
progress: 0,
|
|
181
|
+
rollbackRequired: false,
|
|
182
|
+
rollbackCompleted: false,
|
|
183
|
+
},
|
|
184
|
+
metadata: {
|
|
185
|
+
experimentId,
|
|
186
|
+
createdAt: new Date().toISOString(),
|
|
187
|
+
dryRun: input.dryRun ?? true,
|
|
188
|
+
},
|
|
189
|
+
}, null, 2),
|
|
190
|
+
},
|
|
191
|
+
],
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
function captureMetricSnapshot(phase, degradation = 0) {
|
|
196
|
+
const baseMetrics = {
|
|
197
|
+
cpu: 35,
|
|
198
|
+
memory: 60,
|
|
199
|
+
networkLatency: 15,
|
|
200
|
+
errorRate: 0.5,
|
|
201
|
+
requestsPerSecond: 1000,
|
|
202
|
+
};
|
|
203
|
+
// Apply degradation
|
|
204
|
+
return {
|
|
205
|
+
timestamp: new Date().toISOString(),
|
|
206
|
+
cpu: Math.min(100, baseMetrics.cpu + degradation * 0.5),
|
|
207
|
+
memory: Math.min(100, baseMetrics.memory + degradation * 0.3),
|
|
208
|
+
networkLatency: baseMetrics.networkLatency * (1 + degradation / 50),
|
|
209
|
+
errorRate: Math.min(100, baseMetrics.errorRate + degradation * 0.5),
|
|
210
|
+
requestsPerSecond: Math.max(0, baseMetrics.requestsPerSecond * (1 - degradation / 150)),
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
function prepareInjection(input) {
|
|
214
|
+
const affectedComponents = determineAffectedComponents(input.target, input.failureType);
|
|
215
|
+
return {
|
|
216
|
+
type: input.failureType,
|
|
217
|
+
target: input.target,
|
|
218
|
+
intensity: input.intensity,
|
|
219
|
+
duration: input.duration,
|
|
220
|
+
parameters: {
|
|
221
|
+
...input.parameters,
|
|
222
|
+
failureType: input.failureType,
|
|
223
|
+
},
|
|
224
|
+
affectedComponents,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
function determineAffectedComponents(target, failureType) {
|
|
228
|
+
const components = [target];
|
|
229
|
+
// Add dependent components based on failure type
|
|
230
|
+
if (failureType.includes('network')) {
|
|
231
|
+
components.push(`${target}-lb`, `${target}-gateway`);
|
|
232
|
+
}
|
|
233
|
+
if (failureType.includes('cpu') || failureType.includes('memory')) {
|
|
234
|
+
components.push(`${target}-worker`, `${target}-cache`);
|
|
235
|
+
}
|
|
236
|
+
if (failureType.includes('dependency')) {
|
|
237
|
+
components.push(`${target}-db`, `${target}-queue`);
|
|
238
|
+
}
|
|
239
|
+
return components;
|
|
240
|
+
}
|
|
241
|
+
async function simulateChaos(input, injection, dryRun) {
|
|
242
|
+
const events = [];
|
|
243
|
+
// Simulate injection start
|
|
244
|
+
events.push({
|
|
245
|
+
timestamp: new Date().toISOString(),
|
|
246
|
+
event: dryRun ? 'Simulating chaos injection' : 'Chaos injection started',
|
|
247
|
+
type: 'info',
|
|
248
|
+
details: `${input.failureType} at ${input.intensity * 100}% intensity`,
|
|
249
|
+
});
|
|
250
|
+
// Calculate degradation based on failure type and intensity
|
|
251
|
+
const degradation = calculateDegradation(input.failureType, input.intensity);
|
|
252
|
+
// Simulate duration
|
|
253
|
+
const durationEvents = simulateDurationEvents(input.duration, degradation);
|
|
254
|
+
events.push(...durationEvents);
|
|
255
|
+
// Simulate recovery
|
|
256
|
+
const recoveryTime = calculateRecoveryTime(input.failureType, degradation);
|
|
257
|
+
events.push({
|
|
258
|
+
timestamp: new Date().toISOString(),
|
|
259
|
+
event: dryRun ? 'Simulation complete' : 'Chaos injection ended',
|
|
260
|
+
type: 'info',
|
|
261
|
+
details: `Duration: ${input.duration}s, Peak degradation: ${degradation.toFixed(1)}%`,
|
|
262
|
+
});
|
|
263
|
+
return {
|
|
264
|
+
degradation,
|
|
265
|
+
recoveryTime,
|
|
266
|
+
events,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
function calculateDegradation(failureType, intensity) {
|
|
270
|
+
const baseDegradation = {
|
|
271
|
+
'network-latency': 30,
|
|
272
|
+
'network-partition': 90,
|
|
273
|
+
'cpu-stress': 50,
|
|
274
|
+
'memory-pressure': 45,
|
|
275
|
+
'disk-failure': 60,
|
|
276
|
+
'process-kill': 95,
|
|
277
|
+
'dns-failure': 80,
|
|
278
|
+
'dependency-failure': 70,
|
|
279
|
+
'clock-skew': 20,
|
|
280
|
+
'packet-loss': 40,
|
|
281
|
+
};
|
|
282
|
+
const base = baseDegradation[failureType] || 50;
|
|
283
|
+
return base * intensity + Math.random() * 10;
|
|
284
|
+
}
|
|
285
|
+
function calculateRecoveryTime(failureType, degradation) {
|
|
286
|
+
const baseRecovery = {
|
|
287
|
+
'network-latency': 2,
|
|
288
|
+
'network-partition': 30,
|
|
289
|
+
'cpu-stress': 5,
|
|
290
|
+
'memory-pressure': 10,
|
|
291
|
+
'disk-failure': 60,
|
|
292
|
+
'process-kill': 45,
|
|
293
|
+
'dns-failure': 15,
|
|
294
|
+
'dependency-failure': 20,
|
|
295
|
+
'clock-skew': 5,
|
|
296
|
+
'packet-loss': 3,
|
|
297
|
+
};
|
|
298
|
+
const base = baseRecovery[failureType] || 15;
|
|
299
|
+
return Math.round(base * (1 + degradation / 100));
|
|
300
|
+
}
|
|
301
|
+
function simulateDurationEvents(duration, degradation) {
|
|
302
|
+
const events = [];
|
|
303
|
+
// Add mid-point event
|
|
304
|
+
if (duration > 10) {
|
|
305
|
+
events.push({
|
|
306
|
+
timestamp: new Date().toISOString(),
|
|
307
|
+
event: 'Chaos in progress',
|
|
308
|
+
type: degradation > 60 ? 'warning' : 'info',
|
|
309
|
+
details: `Current degradation: ${degradation.toFixed(1)}%`,
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
// Add high degradation warning
|
|
313
|
+
if (degradation > 70) {
|
|
314
|
+
events.push({
|
|
315
|
+
timestamp: new Date().toISOString(),
|
|
316
|
+
event: 'High degradation detected',
|
|
317
|
+
type: 'warning',
|
|
318
|
+
details: `System showing ${degradation.toFixed(1)}% degradation`,
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
return events;
|
|
322
|
+
}
|
|
323
|
+
async function simulateRollback() {
|
|
324
|
+
// Simulate rollback delay
|
|
325
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
326
|
+
}
|
|
327
|
+
function assessImpact(chaosResult, target) {
|
|
328
|
+
const degradation = chaosResult.degradation;
|
|
329
|
+
const severity = degradation >= 90
|
|
330
|
+
? 'critical'
|
|
331
|
+
: degradation >= 70
|
|
332
|
+
? 'high'
|
|
333
|
+
: degradation >= 40
|
|
334
|
+
? 'medium'
|
|
335
|
+
: degradation >= 10
|
|
336
|
+
? 'low'
|
|
337
|
+
: 'none';
|
|
338
|
+
// Calculate affected requests
|
|
339
|
+
const totalRequests = 10000;
|
|
340
|
+
const failedRequests = Math.round(totalRequests * (degradation / 100) * 0.5);
|
|
341
|
+
return {
|
|
342
|
+
severity,
|
|
343
|
+
systemsAffected: [target, `${target}-dependent`],
|
|
344
|
+
usersAffected: Math.round(failedRequests / 10),
|
|
345
|
+
recoveryTime: chaosResult.recoveryTime,
|
|
346
|
+
dataLoss: false,
|
|
347
|
+
serviceDisruption: {
|
|
348
|
+
totalRequests,
|
|
349
|
+
failedRequests,
|
|
350
|
+
errorRate: Math.round((failedRequests / totalRequests) * 100 * 10) / 10,
|
|
351
|
+
avgLatency: 15 + degradation * 2,
|
|
352
|
+
p99Latency: 50 + degradation * 5,
|
|
353
|
+
},
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
function generateRecommendations(chaosResult, impact) {
|
|
357
|
+
const recommendations = [];
|
|
358
|
+
// High degradation recommendations
|
|
359
|
+
if (chaosResult.degradation > 70) {
|
|
360
|
+
recommendations.push({
|
|
361
|
+
category: 'resilience',
|
|
362
|
+
priority: 'high',
|
|
363
|
+
finding: 'System showed significant degradation under chaos',
|
|
364
|
+
recommendation: 'Implement circuit breakers and fallback mechanisms',
|
|
365
|
+
evidence: `${chaosResult.degradation.toFixed(1)}% degradation observed`,
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
// Slow recovery recommendations
|
|
369
|
+
if (chaosResult.recoveryTime > 30) {
|
|
370
|
+
recommendations.push({
|
|
371
|
+
category: 'recovery',
|
|
372
|
+
priority: 'high',
|
|
373
|
+
finding: 'Recovery time exceeds acceptable threshold',
|
|
374
|
+
recommendation: 'Implement automatic scaling and health checks',
|
|
375
|
+
evidence: `Recovery time: ${chaosResult.recoveryTime}s`,
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
// Error rate recommendations
|
|
379
|
+
if (impact.serviceDisruption.errorRate > 10) {
|
|
380
|
+
recommendations.push({
|
|
381
|
+
category: 'resilience',
|
|
382
|
+
priority: 'medium',
|
|
383
|
+
finding: 'High error rate during chaos injection',
|
|
384
|
+
recommendation: 'Add retry logic with exponential backoff',
|
|
385
|
+
evidence: `Error rate: ${impact.serviceDisruption.errorRate}%`,
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
// General recommendations
|
|
389
|
+
recommendations.push({
|
|
390
|
+
category: 'monitoring',
|
|
391
|
+
priority: 'medium',
|
|
392
|
+
finding: 'Chaos testing revealed system behavior under failure',
|
|
393
|
+
recommendation: 'Set up alerting for similar degradation patterns',
|
|
394
|
+
evidence: 'Observed metrics during chaos experiment',
|
|
395
|
+
}, {
|
|
396
|
+
category: 'configuration',
|
|
397
|
+
priority: 'low',
|
|
398
|
+
finding: 'System configuration may benefit from tuning',
|
|
399
|
+
recommendation: 'Review timeout and retry configurations',
|
|
400
|
+
evidence: 'Latency patterns observed during chaos',
|
|
401
|
+
});
|
|
402
|
+
return recommendations;
|
|
403
|
+
}
|
|
404
|
+
// Export tool definition for MCP registration
|
|
405
|
+
export const toolDefinition = {
|
|
406
|
+
name: 'aqe/chaos-inject',
|
|
407
|
+
description: 'Inject chaos failures for resilience testing with dryRun safety mode',
|
|
408
|
+
category: 'chaos-resilience',
|
|
409
|
+
version: '3.2.3',
|
|
410
|
+
inputSchema: ChaosInjectInputSchema,
|
|
411
|
+
handler,
|
|
412
|
+
};
|
|
413
|
+
export default toolDefinition;
|
|
414
|
+
//# sourceMappingURL=chaos-inject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chaos-inject.js","sourceRoot":"","sources":["../../../../../src/mcp-tools/quality/chaos-resilience/chaos-inject.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* analyze-coverage.ts - O(log n) Johnson-Lindenstrauss coverage analysis
|
|
3
|
+
*
|
|
4
|
+
* Performs efficient coverage analysis using Johnson-Lindenstrauss random
|
|
5
|
+
* projection for O(log n) gap detection instead of O(n) full scan.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
export declare const AnalyzeCoverageInputSchema: z.ZodObject<{
|
|
9
|
+
targetPath: z.ZodString;
|
|
10
|
+
coverageReport: z.ZodOptional<z.ZodString>;
|
|
11
|
+
algorithm: z.ZodDefault<z.ZodEnum<{
|
|
12
|
+
"johnson-lindenstrauss": "johnson-lindenstrauss";
|
|
13
|
+
"full-scan": "full-scan";
|
|
14
|
+
}>>;
|
|
15
|
+
prioritize: z.ZodDefault<z.ZodBoolean>;
|
|
16
|
+
includeFileDetails: z.ZodDefault<z.ZodBoolean>;
|
|
17
|
+
thresholds: z.ZodOptional<z.ZodObject<{
|
|
18
|
+
line: z.ZodDefault<z.ZodNumber>;
|
|
19
|
+
branch: z.ZodDefault<z.ZodNumber>;
|
|
20
|
+
function: z.ZodDefault<z.ZodNumber>;
|
|
21
|
+
}, z.core.$strip>>;
|
|
22
|
+
projectionDimension: z.ZodDefault<z.ZodNumber>;
|
|
23
|
+
}, z.core.$strip>;
|
|
24
|
+
export type AnalyzeCoverageInput = z.infer<typeof AnalyzeCoverageInputSchema>;
|
|
25
|
+
export interface AnalyzeCoverageOutput {
|
|
26
|
+
success: boolean;
|
|
27
|
+
summary: CoverageSummary;
|
|
28
|
+
gaps: CoverageGap[];
|
|
29
|
+
files: FileCoverage[];
|
|
30
|
+
thresholdResults: ThresholdResult[];
|
|
31
|
+
algorithm: AlgorithmInfo;
|
|
32
|
+
metadata: AnalysisMetadata;
|
|
33
|
+
}
|
|
34
|
+
export interface CoverageSummary {
|
|
35
|
+
lines: CoverageMetric;
|
|
36
|
+
branches: CoverageMetric;
|
|
37
|
+
functions: CoverageMetric;
|
|
38
|
+
statements: CoverageMetric;
|
|
39
|
+
overall: number;
|
|
40
|
+
trend: 'improving' | 'declining' | 'stable';
|
|
41
|
+
}
|
|
42
|
+
export interface CoverageMetric {
|
|
43
|
+
covered: number;
|
|
44
|
+
total: number;
|
|
45
|
+
percentage: number;
|
|
46
|
+
}
|
|
47
|
+
export interface CoverageGap {
|
|
48
|
+
id: string;
|
|
49
|
+
type: 'line' | 'branch' | 'function';
|
|
50
|
+
file: string;
|
|
51
|
+
location: {
|
|
52
|
+
startLine: number;
|
|
53
|
+
endLine: number;
|
|
54
|
+
};
|
|
55
|
+
risk: 'critical' | 'high' | 'medium' | 'low';
|
|
56
|
+
riskScore: number;
|
|
57
|
+
reason: string;
|
|
58
|
+
suggestions: string[];
|
|
59
|
+
}
|
|
60
|
+
export interface FileCoverage {
|
|
61
|
+
path: string;
|
|
62
|
+
lines: CoverageMetric;
|
|
63
|
+
branches: CoverageMetric;
|
|
64
|
+
functions: CoverageMetric;
|
|
65
|
+
uncoveredRanges: Array<{
|
|
66
|
+
start: number;
|
|
67
|
+
end: number;
|
|
68
|
+
}>;
|
|
69
|
+
complexity: number;
|
|
70
|
+
}
|
|
71
|
+
export interface ThresholdResult {
|
|
72
|
+
metric: string;
|
|
73
|
+
threshold: number;
|
|
74
|
+
actual: number;
|
|
75
|
+
passed: boolean;
|
|
76
|
+
gap: number;
|
|
77
|
+
}
|
|
78
|
+
export interface AlgorithmInfo {
|
|
79
|
+
name: string;
|
|
80
|
+
complexity: string;
|
|
81
|
+
projectionDimension?: number;
|
|
82
|
+
accuracy: number;
|
|
83
|
+
speedup: number;
|
|
84
|
+
}
|
|
85
|
+
export interface AnalysisMetadata {
|
|
86
|
+
analyzedAt: string;
|
|
87
|
+
durationMs: number;
|
|
88
|
+
filesAnalyzed: number;
|
|
89
|
+
totalLines: number;
|
|
90
|
+
algorithm: string;
|
|
91
|
+
}
|
|
92
|
+
export interface ToolContext {
|
|
93
|
+
get<T>(key: string): T | undefined;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* MCP Tool Handler for analyze-coverage
|
|
97
|
+
*/
|
|
98
|
+
export declare function handler(input: AnalyzeCoverageInput, context: ToolContext): Promise<{
|
|
99
|
+
content: Array<{
|
|
100
|
+
type: 'text';
|
|
101
|
+
text: string;
|
|
102
|
+
}>;
|
|
103
|
+
}>;
|
|
104
|
+
export declare const toolDefinition: {
|
|
105
|
+
name: string;
|
|
106
|
+
description: string;
|
|
107
|
+
category: string;
|
|
108
|
+
version: string;
|
|
109
|
+
inputSchema: z.ZodObject<{
|
|
110
|
+
targetPath: z.ZodString;
|
|
111
|
+
coverageReport: z.ZodOptional<z.ZodString>;
|
|
112
|
+
algorithm: z.ZodDefault<z.ZodEnum<{
|
|
113
|
+
"johnson-lindenstrauss": "johnson-lindenstrauss";
|
|
114
|
+
"full-scan": "full-scan";
|
|
115
|
+
}>>;
|
|
116
|
+
prioritize: z.ZodDefault<z.ZodBoolean>;
|
|
117
|
+
includeFileDetails: z.ZodDefault<z.ZodBoolean>;
|
|
118
|
+
thresholds: z.ZodOptional<z.ZodObject<{
|
|
119
|
+
line: z.ZodDefault<z.ZodNumber>;
|
|
120
|
+
branch: z.ZodDefault<z.ZodNumber>;
|
|
121
|
+
function: z.ZodDefault<z.ZodNumber>;
|
|
122
|
+
}, z.core.$strip>>;
|
|
123
|
+
projectionDimension: z.ZodDefault<z.ZodNumber>;
|
|
124
|
+
}, z.core.$strip>;
|
|
125
|
+
handler: typeof handler;
|
|
126
|
+
};
|
|
127
|
+
export default toolDefinition;
|
|
128
|
+
//# sourceMappingURL=analyze-coverage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-coverage.d.ts","sourceRoot":"","sources":["../../../../../src/mcp-tools/quality/coverage-analysis/analyze-coverage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;iBAuBrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAG9E,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,cAAc,CAAC;IAC1B,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;CAC7C;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,cAAc,CAAC;IAC1B,eAAe,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;CACpC;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,KAAK,EAAE,oBAAoB,EAC3B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAkG7D;AA8SD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;CAO1B,CAAC;AAEF,eAAe,cAAc,CAAC"}
|