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.
@@ -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.2.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",