statecli-mcp-server 0.2.0 → 0.3.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/cross-file-impact.d.ts +85 -0
- package/dist/cross-file-impact.d.ts.map +1 -0
- package/dist/cross-file-impact.js +338 -0
- package/dist/cross-file-impact.js.map +1 -0
- package/dist/dependency-tracker.d.ts +78 -0
- package/dist/dependency-tracker.d.ts.map +1 -0
- package/dist/dependency-tracker.js +334 -0
- package/dist/dependency-tracker.js.map +1 -0
- package/dist/enhanced-mcp-server.d.ts +15 -0
- package/dist/enhanced-mcp-server.d.ts.map +1 -1
- package/dist/enhanced-mcp-server.js +240 -1
- package/dist/enhanced-mcp-server.js.map +1 -1
- package/dist/rollback-preview.d.ts +77 -0
- package/dist/rollback-preview.d.ts.map +1 -0
- package/dist/rollback-preview.js +244 -0
- package/dist/rollback-preview.js.map +1 -0
- package/dist/test-awareness.d.ts +85 -0
- package/dist/test-awareness.d.ts.map +1 -0
- package/dist/test-awareness.js +329 -0
- package/dist/test-awareness.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Test Awareness - Track test pass/fail after edits
|
|
4
|
+
*
|
|
5
|
+
* Monitors test results and correlates them with code changes.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.TestAwareness = void 0;
|
|
42
|
+
const child_process_1 = require("child_process");
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
class TestAwareness {
|
|
45
|
+
statecli;
|
|
46
|
+
projectPath;
|
|
47
|
+
testHistory = [];
|
|
48
|
+
testCommand;
|
|
49
|
+
testFramework;
|
|
50
|
+
constructor(statecli, projectPath = '.', options) {
|
|
51
|
+
this.statecli = statecli;
|
|
52
|
+
this.projectPath = path.resolve(projectPath);
|
|
53
|
+
this.testFramework = options?.testFramework || this.detectTestFramework();
|
|
54
|
+
this.testCommand = options?.testCommand || this.getDefaultTestCommand();
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Run tests and track results
|
|
58
|
+
*/
|
|
59
|
+
runTests(options) {
|
|
60
|
+
const startTime = Date.now();
|
|
61
|
+
let results = [];
|
|
62
|
+
try {
|
|
63
|
+
const output = this.executeTests(options?.files, options?.grep);
|
|
64
|
+
results = this.parseTestOutput(output);
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
// Tests might fail but still produce output
|
|
68
|
+
results = this.parseTestOutput(error.stdout || error.message);
|
|
69
|
+
}
|
|
70
|
+
const summary = {
|
|
71
|
+
timestamp: new Date().toISOString(),
|
|
72
|
+
total: results.length,
|
|
73
|
+
passed: results.filter(r => r.status === 'passed').length,
|
|
74
|
+
failed: results.filter(r => r.status === 'failed').length,
|
|
75
|
+
skipped: results.filter(r => r.status === 'skipped').length,
|
|
76
|
+
duration: Date.now() - startTime,
|
|
77
|
+
results,
|
|
78
|
+
relatedChanges: options?.trackChanges ? this.getRecentChanges() : []
|
|
79
|
+
};
|
|
80
|
+
this.testHistory.push(summary);
|
|
81
|
+
// Track in StateCLI
|
|
82
|
+
this.statecli.track('test', 'run', {
|
|
83
|
+
...summary,
|
|
84
|
+
results: results.slice(0, 20) // Limit stored results
|
|
85
|
+
}, 'test-awareness');
|
|
86
|
+
return summary;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get test impact for a changed file
|
|
90
|
+
*/
|
|
91
|
+
analyzeTestImpact(changedFile) {
|
|
92
|
+
const normalizedPath = path.normalize(changedFile);
|
|
93
|
+
const affectedTests = this.findAffectedTests(normalizedPath);
|
|
94
|
+
// Get previous test status
|
|
95
|
+
const lastRun = this.testHistory[this.testHistory.length - 1];
|
|
96
|
+
let previousStatus = 'unknown';
|
|
97
|
+
if (lastRun) {
|
|
98
|
+
const relevantTests = lastRun.results.filter(r => affectedTests.includes(r.testName) || r.file === normalizedPath);
|
|
99
|
+
if (relevantTests.length > 0) {
|
|
100
|
+
previousStatus = relevantTests.every(t => t.status === 'passed') ? 'passed' : 'failed';
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Generate recommendation
|
|
104
|
+
let recommendation = '';
|
|
105
|
+
if (affectedTests.length === 0) {
|
|
106
|
+
recommendation = 'No tests found for this file. Consider adding test coverage.';
|
|
107
|
+
}
|
|
108
|
+
else if (previousStatus === 'failed') {
|
|
109
|
+
recommendation = `${affectedTests.length} tests were already failing. Fix existing issues first.`;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
recommendation = `Run ${affectedTests.length} affected tests to verify your changes.`;
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
changedFile: normalizedPath,
|
|
116
|
+
affectedTests,
|
|
117
|
+
previousStatus,
|
|
118
|
+
currentStatus: 'unknown',
|
|
119
|
+
recommendation
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Run tests for specific changed files and compare results
|
|
124
|
+
*/
|
|
125
|
+
async testAfterChange(changedFiles) {
|
|
126
|
+
// Analyze impact for each file
|
|
127
|
+
const impacts = changedFiles.map(f => this.analyzeTestImpact(f));
|
|
128
|
+
// Collect all affected tests
|
|
129
|
+
const allAffectedTests = [...new Set(impacts.flatMap(i => i.affectedTests))];
|
|
130
|
+
// Run affected tests
|
|
131
|
+
const summary = this.runTests({
|
|
132
|
+
files: allAffectedTests.length > 0 ? allAffectedTests : undefined,
|
|
133
|
+
trackChanges: true
|
|
134
|
+
});
|
|
135
|
+
// Find regressions (tests that were passing but now fail)
|
|
136
|
+
const regressions = this.findRegressions(summary);
|
|
137
|
+
// Update impact status
|
|
138
|
+
for (const impact of impacts) {
|
|
139
|
+
const relevantResults = summary.results.filter(r => impact.affectedTests.includes(r.testName));
|
|
140
|
+
if (relevantResults.length > 0) {
|
|
141
|
+
impact.currentStatus = relevantResults.every(t => t.status === 'passed') ? 'passed' : 'failed';
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return { impacts, summary, regressions };
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get test history
|
|
148
|
+
*/
|
|
149
|
+
getTestHistory(limit = 10) {
|
|
150
|
+
return this.testHistory.slice(-limit);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get failing tests
|
|
154
|
+
*/
|
|
155
|
+
getFailingTests() {
|
|
156
|
+
const lastRun = this.testHistory[this.testHistory.length - 1];
|
|
157
|
+
if (!lastRun)
|
|
158
|
+
return [];
|
|
159
|
+
return lastRun.results.filter(r => r.status === 'failed');
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Suggest which tests to run based on recent changes
|
|
163
|
+
*/
|
|
164
|
+
suggestTests() {
|
|
165
|
+
const recentChanges = this.getRecentChanges();
|
|
166
|
+
const suggested = [];
|
|
167
|
+
for (const change of recentChanges) {
|
|
168
|
+
const affected = this.findAffectedTests(change);
|
|
169
|
+
suggested.push(...affected);
|
|
170
|
+
}
|
|
171
|
+
const unique = [...new Set(suggested)];
|
|
172
|
+
let coverage = 'none';
|
|
173
|
+
let reason = '';
|
|
174
|
+
if (unique.length === 0) {
|
|
175
|
+
reason = 'No tests found for recent changes. Consider running full test suite.';
|
|
176
|
+
}
|
|
177
|
+
else if (unique.length < 5) {
|
|
178
|
+
coverage = 'partial';
|
|
179
|
+
reason = `Found ${unique.length} tests related to your changes.`;
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
coverage = 'full';
|
|
183
|
+
reason = `Found ${unique.length} tests. Consider running full suite.`;
|
|
184
|
+
}
|
|
185
|
+
return { suggested: unique, reason, coverage };
|
|
186
|
+
}
|
|
187
|
+
detectTestFramework() {
|
|
188
|
+
try {
|
|
189
|
+
const pkg = require(path.join(this.projectPath, 'package.json'));
|
|
190
|
+
if (pkg.devDependencies?.jest || pkg.dependencies?.jest)
|
|
191
|
+
return 'jest';
|
|
192
|
+
if (pkg.devDependencies?.vitest || pkg.dependencies?.vitest)
|
|
193
|
+
return 'vitest';
|
|
194
|
+
if (pkg.devDependencies?.mocha || pkg.dependencies?.mocha)
|
|
195
|
+
return 'mocha';
|
|
196
|
+
}
|
|
197
|
+
catch { }
|
|
198
|
+
// Check for Python
|
|
199
|
+
try {
|
|
200
|
+
(0, child_process_1.execSync)('python -c "import pytest"', { cwd: this.projectPath, stdio: 'pipe' });
|
|
201
|
+
return 'pytest';
|
|
202
|
+
}
|
|
203
|
+
catch { }
|
|
204
|
+
return 'custom';
|
|
205
|
+
}
|
|
206
|
+
getDefaultTestCommand() {
|
|
207
|
+
switch (this.testFramework) {
|
|
208
|
+
case 'jest': return 'npx jest --json';
|
|
209
|
+
case 'vitest': return 'npx vitest run --reporter=json';
|
|
210
|
+
case 'mocha': return 'npx mocha --reporter json';
|
|
211
|
+
case 'pytest': return 'python -m pytest --tb=short -q';
|
|
212
|
+
default: return 'npm test';
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
executeTests(files, grep) {
|
|
216
|
+
let command = this.testCommand;
|
|
217
|
+
if (files && files.length > 0) {
|
|
218
|
+
command += ` ${files.join(' ')}`;
|
|
219
|
+
}
|
|
220
|
+
if (grep) {
|
|
221
|
+
command += ` --grep "${grep}"`;
|
|
222
|
+
}
|
|
223
|
+
try {
|
|
224
|
+
return (0, child_process_1.execSync)(command, {
|
|
225
|
+
cwd: this.projectPath,
|
|
226
|
+
encoding: 'utf-8',
|
|
227
|
+
stdio: ['pipe', 'pipe', 'pipe']
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
return error.stdout || error.stderr || '';
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
parseTestOutput(output) {
|
|
235
|
+
const results = [];
|
|
236
|
+
// Try to parse JSON output
|
|
237
|
+
try {
|
|
238
|
+
const json = JSON.parse(output);
|
|
239
|
+
if (json.testResults) {
|
|
240
|
+
// Jest format
|
|
241
|
+
for (const suite of json.testResults) {
|
|
242
|
+
for (const test of suite.assertionResults || []) {
|
|
243
|
+
results.push({
|
|
244
|
+
testName: test.fullName || test.title,
|
|
245
|
+
status: test.status === 'passed' ? 'passed' :
|
|
246
|
+
test.status === 'pending' ? 'skipped' : 'failed',
|
|
247
|
+
duration: test.duration || 0,
|
|
248
|
+
errorMessage: test.failureMessages?.join('\n'),
|
|
249
|
+
file: suite.name
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return results;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
catch { }
|
|
257
|
+
// Fallback: parse text output
|
|
258
|
+
const lines = output.split('\n');
|
|
259
|
+
for (const line of lines) {
|
|
260
|
+
if (line.includes('✓') || line.includes('PASS')) {
|
|
261
|
+
const match = line.match(/[✓√]\s+(.+?)(?:\s+\((\d+)\s*ms\))?$/);
|
|
262
|
+
if (match) {
|
|
263
|
+
results.push({
|
|
264
|
+
testName: match[1].trim(),
|
|
265
|
+
status: 'passed',
|
|
266
|
+
duration: parseInt(match[2] || '0')
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
else if (line.includes('✗') || line.includes('FAIL') || line.includes('×')) {
|
|
271
|
+
const match = line.match(/[✗×]\s+(.+?)(?:\s+\((\d+)\s*ms\))?$/);
|
|
272
|
+
if (match) {
|
|
273
|
+
results.push({
|
|
274
|
+
testName: match[1].trim(),
|
|
275
|
+
status: 'failed',
|
|
276
|
+
duration: parseInt(match[2] || '0')
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return results;
|
|
282
|
+
}
|
|
283
|
+
findAffectedTests(filePath) {
|
|
284
|
+
const affected = [];
|
|
285
|
+
const baseName = path.basename(filePath, path.extname(filePath));
|
|
286
|
+
// Common patterns for test files
|
|
287
|
+
const testPatterns = [
|
|
288
|
+
`${baseName}.test`,
|
|
289
|
+
`${baseName}.spec`,
|
|
290
|
+
`${baseName}_test`,
|
|
291
|
+
`test_${baseName}`,
|
|
292
|
+
`${baseName}Test`
|
|
293
|
+
];
|
|
294
|
+
// Check test history for tests that include the file
|
|
295
|
+
for (const run of this.testHistory) {
|
|
296
|
+
for (const result of run.results) {
|
|
297
|
+
if (result.file?.includes(baseName) ||
|
|
298
|
+
testPatterns.some(p => result.testName.toLowerCase().includes(p.toLowerCase()))) {
|
|
299
|
+
affected.push(result.testName);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return [...new Set(affected)];
|
|
304
|
+
}
|
|
305
|
+
findRegressions(currentRun) {
|
|
306
|
+
if (this.testHistory.length < 2)
|
|
307
|
+
return [];
|
|
308
|
+
const previousRun = this.testHistory[this.testHistory.length - 2];
|
|
309
|
+
const regressions = [];
|
|
310
|
+
for (const current of currentRun.results) {
|
|
311
|
+
if (current.status === 'failed') {
|
|
312
|
+
const previous = previousRun.results.find(p => p.testName === current.testName);
|
|
313
|
+
if (previous && previous.status === 'passed') {
|
|
314
|
+
regressions.push(current);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
return regressions;
|
|
319
|
+
}
|
|
320
|
+
getRecentChanges() {
|
|
321
|
+
const replay = this.statecli.replay('file:*');
|
|
322
|
+
return replay.changes
|
|
323
|
+
.slice(-10)
|
|
324
|
+
.map(c => c.after?.['filePath'] || '')
|
|
325
|
+
.filter(Boolean);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
exports.TestAwareness = TestAwareness;
|
|
329
|
+
//# sourceMappingURL=test-awareness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-awareness.js","sourceRoot":"","sources":["../src/test-awareness.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "statecli-mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"mcpName": "io.github.charo360/statecli",
|
|
5
5
|
"description": "MCP Server for State Replay & Self-Debugging - Memory, replay, and undo capability for AI agents",
|
|
6
6
|
"main": "./dist/index.js",
|