atlas-pipeline-mcp 1.0.17 → 1.0.19
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/README.md +54 -1
- package/dist/benchmark.d.ts +12 -0
- package/dist/benchmark.d.ts.map +1 -0
- package/dist/benchmark.js +183 -0
- package/dist/benchmark.js.map +1 -0
- package/dist/mcp.d.ts +14 -0
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +297 -8
- package/dist/mcp.js.map +1 -1
- package/dist/pipeline.d.ts +13 -3
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +36 -5
- package/dist/pipeline.js.map +1 -1
- package/dist/providers/llm-provider.d.ts +11 -5
- package/dist/providers/llm-provider.d.ts.map +1 -1
- package/dist/providers/llm-provider.js +32 -6
- package/dist/providers/llm-provider.js.map +1 -1
- package/dist/tools/debug.d.ts +101 -0
- package/dist/tools/debug.d.ts.map +1 -0
- package/dist/tools/debug.js +712 -0
- package/dist/tools/debug.js.map +1 -0
- package/dist/tools/docs.d.ts +94 -0
- package/dist/tools/docs.d.ts.map +1 -0
- package/dist/tools/docs.js +508 -0
- package/dist/tools/docs.js.map +1 -0
- package/dist/tools/explain.d.ts +82 -0
- package/dist/tools/explain.d.ts.map +1 -0
- package/dist/tools/explain.js +543 -0
- package/dist/tools/explain.js.map +1 -0
- package/dist/tools/security.d.ts +45 -0
- package/dist/tools/security.d.ts.map +1 -0
- package/dist/tools/security.js +417 -0
- package/dist/tools/security.js.map +1 -0
- package/dist/tools/testgen.d.ts +52 -0
- package/dist/tools/testgen.d.ts.map +1 -0
- package/dist/tools/testgen.js +413 -0
- package/dist/tools/testgen.js.map +1 -0
- package/dist/tools/think.d.ts +223 -0
- package/dist/tools/think.d.ts.map +1 -0
- package/dist/tools/think.js +529 -0
- package/dist/tools/think.js.map +1 -0
- package/dist/types.d.ts +10 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +17 -4
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +86 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +158 -1
- package/dist/utils.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Server - Test Generation Tool
|
|
3
|
+
*
|
|
4
|
+
* Automatic test generation capabilities:
|
|
5
|
+
* - Unit test generation
|
|
6
|
+
* - Integration test generation
|
|
7
|
+
* - Test case extraction from code
|
|
8
|
+
* - Mock/stub generation
|
|
9
|
+
* - Edge case identification
|
|
10
|
+
* - Coverage suggestions
|
|
11
|
+
*/
|
|
12
|
+
import { getActiveProvider, isNoLLMMode } from '../providers/index.js';
|
|
13
|
+
import { logger } from '../utils.js';
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Test Generation
|
|
16
|
+
// ============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Generate tests for the given code
|
|
19
|
+
*/
|
|
20
|
+
export async function generateTests(code, options = {}) {
|
|
21
|
+
const { language, framework = 'auto', testType = 'unit', functionName, context } = options;
|
|
22
|
+
logger.debug({ language, framework, testType }, 'Starting test generation');
|
|
23
|
+
// Detect language and framework if not provided
|
|
24
|
+
const detectedLanguage = language ?? detectLanguage(code);
|
|
25
|
+
const detectedFramework = framework === 'auto' ? detectFramework(detectedLanguage) : framework;
|
|
26
|
+
// Extract function signatures and analyze code structure
|
|
27
|
+
const codeAnalysis = analyzeCodeForTesting(code, detectedLanguage);
|
|
28
|
+
// Generate test cases
|
|
29
|
+
let testCases;
|
|
30
|
+
let generatedCode;
|
|
31
|
+
let mocks = [];
|
|
32
|
+
let imports = [];
|
|
33
|
+
if (!isNoLLMMode()) {
|
|
34
|
+
try {
|
|
35
|
+
const aiResult = await generateTestsWithAI(code, {
|
|
36
|
+
language: detectedLanguage,
|
|
37
|
+
framework: detectedFramework,
|
|
38
|
+
testType,
|
|
39
|
+
functionName,
|
|
40
|
+
context,
|
|
41
|
+
codeAnalysis,
|
|
42
|
+
});
|
|
43
|
+
testCases = aiResult.testCases;
|
|
44
|
+
generatedCode = aiResult.code;
|
|
45
|
+
mocks = aiResult.mocks;
|
|
46
|
+
imports = aiResult.imports;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
logger.warn({ error }, 'AI test generation failed, using heuristic generation');
|
|
50
|
+
const heuristicResult = generateHeuristicTests(code, detectedLanguage, detectedFramework, codeAnalysis);
|
|
51
|
+
testCases = heuristicResult.testCases;
|
|
52
|
+
generatedCode = heuristicResult.code;
|
|
53
|
+
imports = heuristicResult.imports;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
const heuristicResult = generateHeuristicTests(code, detectedLanguage, detectedFramework, codeAnalysis);
|
|
58
|
+
testCases = heuristicResult.testCases;
|
|
59
|
+
generatedCode = heuristicResult.code;
|
|
60
|
+
imports = heuristicResult.imports;
|
|
61
|
+
}
|
|
62
|
+
// Generate coverage suggestions
|
|
63
|
+
const coverage = generateCoverageSuggestions(code, testCases, codeAnalysis);
|
|
64
|
+
// Generate recommendations
|
|
65
|
+
const recommendations = generateTestRecommendations(testCases, coverage, detectedFramework);
|
|
66
|
+
return {
|
|
67
|
+
tests: {
|
|
68
|
+
code: generatedCode,
|
|
69
|
+
framework: detectedFramework,
|
|
70
|
+
testCases,
|
|
71
|
+
imports,
|
|
72
|
+
mocks,
|
|
73
|
+
},
|
|
74
|
+
coverage,
|
|
75
|
+
recommendations,
|
|
76
|
+
generatedAt: new Date().toISOString(),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function analyzeCodeForTesting(code, language) {
|
|
80
|
+
const analysis = {
|
|
81
|
+
functions: [],
|
|
82
|
+
classes: [],
|
|
83
|
+
exports: [],
|
|
84
|
+
dependencies: [],
|
|
85
|
+
hasAsync: false,
|
|
86
|
+
hasCallbacks: false,
|
|
87
|
+
};
|
|
88
|
+
// Detect functions based on language
|
|
89
|
+
if (['typescript', 'javascript'].includes(language.toLowerCase())) {
|
|
90
|
+
// Function declarations
|
|
91
|
+
const funcRegex = /(?:export\s+)?(?:async\s+)?function\s+(\w+)\s*\(([^)]*)\)(?:\s*:\s*([^{]+))?/g;
|
|
92
|
+
let match;
|
|
93
|
+
while ((match = funcRegex.exec(code)) !== null) {
|
|
94
|
+
analysis.functions.push({
|
|
95
|
+
name: match[1],
|
|
96
|
+
params: match[2] ? match[2].split(',').map(p => p.trim()) : [],
|
|
97
|
+
returnType: match[3]?.trim(),
|
|
98
|
+
isAsync: code.slice(Math.max(0, match.index - 10), match.index).includes('async'),
|
|
99
|
+
isExported: code.slice(Math.max(0, match.index - 10), match.index).includes('export'),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
// Arrow functions
|
|
103
|
+
const arrowRegex = /(?:export\s+)?(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s+)?\([^)]*\)\s*(?::\s*[^=]+)?\s*=>/g;
|
|
104
|
+
while ((match = arrowRegex.exec(code)) !== null) {
|
|
105
|
+
const funcStart = match.index;
|
|
106
|
+
const isAsync = code.slice(funcStart, funcStart + 50).includes('async');
|
|
107
|
+
analysis.functions.push({
|
|
108
|
+
name: match[1],
|
|
109
|
+
params: [],
|
|
110
|
+
isAsync,
|
|
111
|
+
isExported: code.slice(Math.max(0, funcStart - 10), funcStart).includes('export'),
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
// Classes
|
|
115
|
+
const classRegex = /(?:export\s+)?class\s+(\w+)/g;
|
|
116
|
+
while ((match = classRegex.exec(code)) !== null) {
|
|
117
|
+
analysis.classes.push(match[1]);
|
|
118
|
+
}
|
|
119
|
+
// Check for async/callbacks
|
|
120
|
+
analysis.hasAsync = /async\s+|await\s+|\.then\s*\(|Promise/g.test(code);
|
|
121
|
+
analysis.hasCallbacks = /callback|cb\s*\(|done\s*\(/g.test(code);
|
|
122
|
+
// Dependencies (imports)
|
|
123
|
+
const importRegex = /import\s+.*\s+from\s+['"]([^'"]+)['"]/g;
|
|
124
|
+
while ((match = importRegex.exec(code)) !== null) {
|
|
125
|
+
analysis.dependencies.push(match[1]);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else if (language.toLowerCase() === 'python') {
|
|
129
|
+
// Python function detection
|
|
130
|
+
const pyFuncRegex = /(?:async\s+)?def\s+(\w+)\s*\(([^)]*)\)/g;
|
|
131
|
+
let match;
|
|
132
|
+
while ((match = pyFuncRegex.exec(code)) !== null) {
|
|
133
|
+
analysis.functions.push({
|
|
134
|
+
name: match[1],
|
|
135
|
+
params: match[2] ? match[2].split(',').map(p => p.trim().split(':')[0].trim()) : [],
|
|
136
|
+
isAsync: code.slice(Math.max(0, match.index - 10), match.index).includes('async'),
|
|
137
|
+
isExported: true, // Python doesn't have explicit exports
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
// Python classes
|
|
141
|
+
const pyClassRegex = /class\s+(\w+)/g;
|
|
142
|
+
while ((match = pyClassRegex.exec(code)) !== null) {
|
|
143
|
+
analysis.classes.push(match[1]);
|
|
144
|
+
}
|
|
145
|
+
analysis.hasAsync = /async\s+def|await\s+/g.test(code);
|
|
146
|
+
}
|
|
147
|
+
return analysis;
|
|
148
|
+
}
|
|
149
|
+
// ============================================================================
|
|
150
|
+
// AI Test Generation
|
|
151
|
+
// ============================================================================
|
|
152
|
+
async function generateTestsWithAI(code, options) {
|
|
153
|
+
const provider = await getActiveProvider();
|
|
154
|
+
const prompt = `Generate comprehensive ${options.testType} tests for this code.
|
|
155
|
+
|
|
156
|
+
## Code to Test
|
|
157
|
+
\`\`\`${options.language}
|
|
158
|
+
${code}
|
|
159
|
+
\`\`\`
|
|
160
|
+
|
|
161
|
+
## Requirements
|
|
162
|
+
- Framework: ${options.framework}
|
|
163
|
+
- Language: ${options.language}
|
|
164
|
+
- Test Type: ${options.testType}
|
|
165
|
+
${options.functionName ? `- Focus on function: ${options.functionName}` : ''}
|
|
166
|
+
${options.context ? `- Context: ${options.context}` : ''}
|
|
167
|
+
|
|
168
|
+
## Functions Found
|
|
169
|
+
${options.codeAnalysis.functions.map(f => `- ${f.name}(${f.params.join(', ')})`).join('\n')}
|
|
170
|
+
|
|
171
|
+
## Generate Tests That Cover:
|
|
172
|
+
1. Happy path scenarios
|
|
173
|
+
2. Edge cases (null, undefined, empty, boundary values)
|
|
174
|
+
3. Error handling
|
|
175
|
+
4. Async behavior (if applicable)
|
|
176
|
+
|
|
177
|
+
## Output Format
|
|
178
|
+
{
|
|
179
|
+
"code": "Complete test file code",
|
|
180
|
+
"testCases": [
|
|
181
|
+
{
|
|
182
|
+
"name": "test name",
|
|
183
|
+
"description": "what it tests",
|
|
184
|
+
"type": "unit|integration|e2e",
|
|
185
|
+
"input": "input description",
|
|
186
|
+
"expectedOutput": "expected output",
|
|
187
|
+
"edgeCase": true/false
|
|
188
|
+
}
|
|
189
|
+
],
|
|
190
|
+
"mocks": ["mock descriptions"],
|
|
191
|
+
"imports": ["required imports"]
|
|
192
|
+
}`;
|
|
193
|
+
const response = await provider.completeJson(prompt, {
|
|
194
|
+
systemPrompt: 'You are an expert test engineer. Generate comprehensive, well-structured tests with good coverage. Return valid JSON only.',
|
|
195
|
+
temperature: 0.3,
|
|
196
|
+
maxTokens: 4096,
|
|
197
|
+
});
|
|
198
|
+
if (response.data) {
|
|
199
|
+
return response.data;
|
|
200
|
+
}
|
|
201
|
+
throw new Error('Failed to generate tests with AI');
|
|
202
|
+
}
|
|
203
|
+
// ============================================================================
|
|
204
|
+
// Heuristic Test Generation
|
|
205
|
+
// ============================================================================
|
|
206
|
+
function generateHeuristicTests(code, language, framework, analysis) {
|
|
207
|
+
const testCases = [];
|
|
208
|
+
const imports = [];
|
|
209
|
+
let testCode = '';
|
|
210
|
+
if (['typescript', 'javascript'].includes(language.toLowerCase())) {
|
|
211
|
+
// Generate Jest/Vitest style tests
|
|
212
|
+
const isVitest = framework === 'vitest';
|
|
213
|
+
imports.push(isVitest
|
|
214
|
+
? `import { describe, it, expect, beforeEach, afterEach } from 'vitest';`
|
|
215
|
+
: `import { describe, it, expect, beforeEach, afterEach } from '@jest/globals';`);
|
|
216
|
+
testCode = `${imports.join('\n')}
|
|
217
|
+
// Import the module to test
|
|
218
|
+
// import { ${analysis.functions.map(f => f.name).join(', ')} } from './module';
|
|
219
|
+
|
|
220
|
+
`;
|
|
221
|
+
for (const func of analysis.functions) {
|
|
222
|
+
testCode += `describe('${func.name}', () => {\n`;
|
|
223
|
+
// Happy path test
|
|
224
|
+
testCode += ` it('should work correctly with valid input', ${func.isAsync ? 'async ' : ''}() => {\n`;
|
|
225
|
+
testCode += ` // Arrange\n`;
|
|
226
|
+
testCode += ` const input = ${generateSampleInput(func.params)};\n`;
|
|
227
|
+
testCode += ` \n`;
|
|
228
|
+
testCode += ` // Act\n`;
|
|
229
|
+
testCode += ` const result = ${func.isAsync ? 'await ' : ''}${func.name}(${func.params.length > 0 ? 'input' : ''});\n`;
|
|
230
|
+
testCode += ` \n`;
|
|
231
|
+
testCode += ` // Assert\n`;
|
|
232
|
+
testCode += ` expect(result).toBeDefined();\n`;
|
|
233
|
+
testCode += ` });\n\n`;
|
|
234
|
+
testCases.push({
|
|
235
|
+
name: `${func.name} - happy path`,
|
|
236
|
+
description: 'Tests basic functionality with valid input',
|
|
237
|
+
type: 'unit',
|
|
238
|
+
input: 'valid input',
|
|
239
|
+
expectedOutput: 'expected result',
|
|
240
|
+
edgeCase: false,
|
|
241
|
+
});
|
|
242
|
+
// Edge case: empty input
|
|
243
|
+
if (func.params.length > 0) {
|
|
244
|
+
testCode += ` it('should handle empty/null input gracefully', ${func.isAsync ? 'async ' : ''}() => {\n`;
|
|
245
|
+
testCode += ` // Test with null/undefined/empty values\n`;
|
|
246
|
+
testCode += ` expect(() => ${func.name}(null)).toThrow();\n`;
|
|
247
|
+
testCode += ` });\n\n`;
|
|
248
|
+
testCases.push({
|
|
249
|
+
name: `${func.name} - null input`,
|
|
250
|
+
description: 'Tests behavior with null/undefined input',
|
|
251
|
+
type: 'unit',
|
|
252
|
+
input: 'null/undefined',
|
|
253
|
+
expectedOutput: 'should throw or handle gracefully',
|
|
254
|
+
edgeCase: true,
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
// Error handling test
|
|
258
|
+
testCode += ` it('should handle errors correctly', ${func.isAsync ? 'async ' : ''}() => {\n`;
|
|
259
|
+
testCode += ` // Test error scenarios\n`;
|
|
260
|
+
testCode += ` // Add specific error test cases here\n`;
|
|
261
|
+
testCode += ` });\n`;
|
|
262
|
+
testCases.push({
|
|
263
|
+
name: `${func.name} - error handling`,
|
|
264
|
+
description: 'Tests error handling behavior',
|
|
265
|
+
type: 'unit',
|
|
266
|
+
input: 'invalid input',
|
|
267
|
+
expectedOutput: 'error or error message',
|
|
268
|
+
edgeCase: true,
|
|
269
|
+
});
|
|
270
|
+
testCode += `});\n\n`;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
else if (language.toLowerCase() === 'python') {
|
|
274
|
+
// Generate pytest style tests
|
|
275
|
+
imports.push('import pytest');
|
|
276
|
+
testCode = `${imports.join('\n')}
|
|
277
|
+
# Import the module to test
|
|
278
|
+
# from module import ${analysis.functions.map(f => f.name).join(', ')}
|
|
279
|
+
|
|
280
|
+
`;
|
|
281
|
+
for (const func of analysis.functions) {
|
|
282
|
+
testCode += `class Test${capitalize(func.name)}:\n`;
|
|
283
|
+
// Happy path
|
|
284
|
+
testCode += ` def test_${func.name}_with_valid_input(self):\n`;
|
|
285
|
+
testCode += ` """Test ${func.name} with valid input."""\n`;
|
|
286
|
+
testCode += ` # Arrange\n`;
|
|
287
|
+
testCode += ` # input_data = ...\n`;
|
|
288
|
+
testCode += ` \n`;
|
|
289
|
+
testCode += ` # Act\n`;
|
|
290
|
+
testCode += ` # result = ${func.name}(input_data)\n`;
|
|
291
|
+
testCode += ` \n`;
|
|
292
|
+
testCode += ` # Assert\n`;
|
|
293
|
+
testCode += ` # assert result is not None\n`;
|
|
294
|
+
testCode += ` pass\n\n`;
|
|
295
|
+
testCases.push({
|
|
296
|
+
name: `test_${func.name}_with_valid_input`,
|
|
297
|
+
description: 'Tests basic functionality with valid input',
|
|
298
|
+
type: 'unit',
|
|
299
|
+
input: 'valid input',
|
|
300
|
+
expectedOutput: 'expected result',
|
|
301
|
+
edgeCase: false,
|
|
302
|
+
});
|
|
303
|
+
// Edge case
|
|
304
|
+
testCode += ` def test_${func.name}_with_none_input(self):\n`;
|
|
305
|
+
testCode += ` """Test ${func.name} with None input."""\n`;
|
|
306
|
+
testCode += ` with pytest.raises((TypeError, ValueError)):\n`;
|
|
307
|
+
testCode += ` ${func.name}(None)\n\n`;
|
|
308
|
+
testCases.push({
|
|
309
|
+
name: `test_${func.name}_with_none_input`,
|
|
310
|
+
description: 'Tests behavior with None input',
|
|
311
|
+
type: 'unit',
|
|
312
|
+
input: 'None',
|
|
313
|
+
expectedOutput: 'raises exception',
|
|
314
|
+
edgeCase: true,
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
// Generic test template
|
|
320
|
+
testCode = `// Test file for ${language}\n// Add your test cases here\n`;
|
|
321
|
+
}
|
|
322
|
+
return { code: testCode, testCases, imports };
|
|
323
|
+
}
|
|
324
|
+
// ============================================================================
|
|
325
|
+
// Helper Functions
|
|
326
|
+
// ============================================================================
|
|
327
|
+
function detectLanguage(code) {
|
|
328
|
+
if (code.includes('interface ') || code.includes(': string') || code.includes(': number')) {
|
|
329
|
+
return 'typescript';
|
|
330
|
+
}
|
|
331
|
+
if (code.includes('function ') || code.includes('=>') || code.includes('const ')) {
|
|
332
|
+
return 'javascript';
|
|
333
|
+
}
|
|
334
|
+
if (code.includes('def ') && code.includes(':')) {
|
|
335
|
+
return 'python';
|
|
336
|
+
}
|
|
337
|
+
if (code.includes('func ') && code.includes('package ')) {
|
|
338
|
+
return 'go';
|
|
339
|
+
}
|
|
340
|
+
return 'javascript';
|
|
341
|
+
}
|
|
342
|
+
function detectFramework(language) {
|
|
343
|
+
switch (language.toLowerCase()) {
|
|
344
|
+
case 'typescript':
|
|
345
|
+
case 'javascript':
|
|
346
|
+
return 'vitest';
|
|
347
|
+
case 'python':
|
|
348
|
+
return 'pytest';
|
|
349
|
+
case 'go':
|
|
350
|
+
return 'go_test';
|
|
351
|
+
case 'ruby':
|
|
352
|
+
return 'rspec';
|
|
353
|
+
default:
|
|
354
|
+
return 'jest';
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
function generateSampleInput(params) {
|
|
358
|
+
if (params.length === 0)
|
|
359
|
+
return '{}';
|
|
360
|
+
if (params.length === 1)
|
|
361
|
+
return `'test-value'`;
|
|
362
|
+
return `{ ${params.map(p => `${p.split(':')[0].trim()}: 'value'`).join(', ')} }`;
|
|
363
|
+
}
|
|
364
|
+
function capitalize(str) {
|
|
365
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
366
|
+
}
|
|
367
|
+
function generateCoverageSuggestions(code, testCases, analysis) {
|
|
368
|
+
const totalFunctions = analysis.functions.length;
|
|
369
|
+
const testedFunctions = new Set(testCases.map(tc => tc.name.split(' ')[0])).size;
|
|
370
|
+
const estimatedCoverage = totalFunctions > 0
|
|
371
|
+
? Math.round((testedFunctions / totalFunctions) * 70) // Assume 70% max from generated tests
|
|
372
|
+
: 50;
|
|
373
|
+
const uncoveredPaths = [];
|
|
374
|
+
const suggestedAdditionalTests = [];
|
|
375
|
+
// Check for untested scenarios
|
|
376
|
+
if (analysis.hasAsync && !testCases.some(tc => tc.description.includes('async'))) {
|
|
377
|
+
suggestedAdditionalTests.push('Add tests for async error handling and timeout scenarios');
|
|
378
|
+
}
|
|
379
|
+
if (analysis.hasCallbacks && !testCases.some(tc => tc.description.includes('callback'))) {
|
|
380
|
+
suggestedAdditionalTests.push('Add tests for callback error scenarios');
|
|
381
|
+
}
|
|
382
|
+
// Suggest edge cases
|
|
383
|
+
suggestedAdditionalTests.push('Add boundary value tests (min/max values)');
|
|
384
|
+
suggestedAdditionalTests.push('Add performance/load tests for critical paths');
|
|
385
|
+
suggestedAdditionalTests.push('Add integration tests with external dependencies');
|
|
386
|
+
return {
|
|
387
|
+
estimatedCoverage,
|
|
388
|
+
uncoveredPaths,
|
|
389
|
+
suggestedAdditionalTests,
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
function generateTestRecommendations(testCases, coverage, framework) {
|
|
393
|
+
const recommendations = [];
|
|
394
|
+
// Coverage recommendations
|
|
395
|
+
if (coverage.estimatedCoverage < 80) {
|
|
396
|
+
recommendations.push(`Aim for at least 80% code coverage (currently estimated at ${coverage.estimatedCoverage}%)`);
|
|
397
|
+
}
|
|
398
|
+
// Edge case recommendations
|
|
399
|
+
const edgeCaseCount = testCases.filter(tc => tc.edgeCase).length;
|
|
400
|
+
if (edgeCaseCount < 3) {
|
|
401
|
+
recommendations.push('Add more edge case tests (boundary values, null checks, error scenarios)');
|
|
402
|
+
}
|
|
403
|
+
// Framework-specific recommendations
|
|
404
|
+
if (framework === 'jest' || framework === 'vitest') {
|
|
405
|
+
recommendations.push('Consider using snapshot testing for UI components');
|
|
406
|
+
recommendations.push('Use beforeEach/afterEach for proper test isolation');
|
|
407
|
+
}
|
|
408
|
+
// General recommendations
|
|
409
|
+
recommendations.push('Run tests with coverage reporting enabled');
|
|
410
|
+
recommendations.push('Add CI/CD integration to run tests on every commit');
|
|
411
|
+
return recommendations;
|
|
412
|
+
}
|
|
413
|
+
//# sourceMappingURL=testgen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testgen.js","sourceRoot":"","sources":["../../src/tools/testgen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atlas Server - Advanced Sequential Thinking Tool
|
|
3
|
+
*
|
|
4
|
+
* Enhanced reasoning capabilities beyond basic sequential thinking:
|
|
5
|
+
* - Dynamic thought branching with merge support
|
|
6
|
+
* - Hypothesis generation and verification
|
|
7
|
+
* - Confidence scoring and uncertainty tracking
|
|
8
|
+
* - Automatic insight extraction
|
|
9
|
+
* - Deadend detection and smart backtracking
|
|
10
|
+
* - AI-enhanced reasoning when LLM available
|
|
11
|
+
* - Thought summarization and compression
|
|
12
|
+
* - Memory of key conclusions
|
|
13
|
+
* - Session persistence with LRU eviction
|
|
14
|
+
*
|
|
15
|
+
* Performance Features:
|
|
16
|
+
* - Optimized session lookup with Map
|
|
17
|
+
* - Lazy AI enhancement (only when needed)
|
|
18
|
+
* - Efficient insight extraction using pre-compiled patterns
|
|
19
|
+
* - Memory-efficient session cleanup
|
|
20
|
+
*
|
|
21
|
+
* @module think
|
|
22
|
+
* @author Nishant Unavane
|
|
23
|
+
* @version 1.1.0
|
|
24
|
+
*/
|
|
25
|
+
export interface ThoughtInput {
|
|
26
|
+
thought: string;
|
|
27
|
+
thoughtNumber: number;
|
|
28
|
+
totalThoughts: number;
|
|
29
|
+
nextThoughtNeeded: boolean;
|
|
30
|
+
isRevision?: boolean;
|
|
31
|
+
revisesThought?: number;
|
|
32
|
+
branchFromThought?: number;
|
|
33
|
+
branchId?: string;
|
|
34
|
+
mergeBranches?: string[];
|
|
35
|
+
thoughtType?: ThoughtType;
|
|
36
|
+
confidence?: number;
|
|
37
|
+
hypothesis?: string;
|
|
38
|
+
verificationResult?: 'confirmed' | 'refuted' | 'partial' | 'inconclusive';
|
|
39
|
+
isDeadEnd?: boolean;
|
|
40
|
+
keyInsight?: string;
|
|
41
|
+
needsMoreThoughts?: boolean;
|
|
42
|
+
problemContext?: string;
|
|
43
|
+
constraints?: string[];
|
|
44
|
+
}
|
|
45
|
+
export type ThoughtType = 'analysis' | 'hypothesis' | 'verification' | 'revision' | 'synthesis' | 'conclusion' | 'question' | 'exploration' | 'backtrack' | 'insight';
|
|
46
|
+
export interface ThoughtRecord extends ThoughtInput {
|
|
47
|
+
timestamp: string;
|
|
48
|
+
aiEnhancement?: string;
|
|
49
|
+
extractedInsights: string[];
|
|
50
|
+
confidenceHistory: number[];
|
|
51
|
+
}
|
|
52
|
+
export interface Branch {
|
|
53
|
+
id: string;
|
|
54
|
+
name?: string;
|
|
55
|
+
parentThought: number;
|
|
56
|
+
thoughts: ThoughtRecord[];
|
|
57
|
+
status: 'active' | 'merged' | 'abandoned' | 'deadend';
|
|
58
|
+
hypothesis?: string;
|
|
59
|
+
conclusion?: string;
|
|
60
|
+
}
|
|
61
|
+
export interface ThinkingSession {
|
|
62
|
+
id: string;
|
|
63
|
+
startTime: string;
|
|
64
|
+
lastAccessTime: number;
|
|
65
|
+
problem: string;
|
|
66
|
+
thoughts: ThoughtRecord[];
|
|
67
|
+
branches: Record<string, Branch>;
|
|
68
|
+
currentBranch: string | null;
|
|
69
|
+
hypotheses: Hypothesis[];
|
|
70
|
+
keyInsights: string[];
|
|
71
|
+
deadEnds: DeadEnd[];
|
|
72
|
+
conclusion?: Conclusion;
|
|
73
|
+
overallConfidence: number;
|
|
74
|
+
}
|
|
75
|
+
export interface Hypothesis {
|
|
76
|
+
id: string;
|
|
77
|
+
statement: string;
|
|
78
|
+
proposedAt: number;
|
|
79
|
+
status: 'proposed' | 'testing' | 'confirmed' | 'refuted' | 'partial';
|
|
80
|
+
evidence: Evidence[];
|
|
81
|
+
confidence: number;
|
|
82
|
+
}
|
|
83
|
+
export interface Evidence {
|
|
84
|
+
thoughtNumber: number;
|
|
85
|
+
type: 'supports' | 'refutes' | 'neutral';
|
|
86
|
+
description: string;
|
|
87
|
+
weight: number;
|
|
88
|
+
}
|
|
89
|
+
export interface DeadEnd {
|
|
90
|
+
thoughtNumber: number;
|
|
91
|
+
reason: string;
|
|
92
|
+
lessonsLearned: string[];
|
|
93
|
+
backtrackTo: number;
|
|
94
|
+
}
|
|
95
|
+
export interface Conclusion {
|
|
96
|
+
answer: string;
|
|
97
|
+
confidence: number;
|
|
98
|
+
supportingThoughts: number[];
|
|
99
|
+
alternativeConsidered: string[];
|
|
100
|
+
caveats: string[];
|
|
101
|
+
}
|
|
102
|
+
export interface ThinkingResult {
|
|
103
|
+
thoughtNumber: number;
|
|
104
|
+
totalThoughts: number;
|
|
105
|
+
nextThoughtNeeded: boolean;
|
|
106
|
+
currentBranch: string | null;
|
|
107
|
+
branches: string[];
|
|
108
|
+
thoughtHistoryLength: number;
|
|
109
|
+
currentConfidence: number;
|
|
110
|
+
activeHypotheses: number;
|
|
111
|
+
keyInsightsCount: number;
|
|
112
|
+
deadEndsEncountered: number;
|
|
113
|
+
aiSuggestion?: string;
|
|
114
|
+
recommendedNextStep?: string;
|
|
115
|
+
progressSummary: string;
|
|
116
|
+
conclusion?: Conclusion;
|
|
117
|
+
processingTimeMs?: number;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Advanced Thinking Server with optimized session management
|
|
121
|
+
* - LRU eviction for memory management
|
|
122
|
+
* - Efficient insight extraction
|
|
123
|
+
* - Lazy AI enhancement
|
|
124
|
+
*/
|
|
125
|
+
export declare class AdvancedThinkingServer {
|
|
126
|
+
private sessions;
|
|
127
|
+
private currentSession;
|
|
128
|
+
private cleanupTimer;
|
|
129
|
+
constructor();
|
|
130
|
+
/**
|
|
131
|
+
* Start periodic cleanup of stale sessions
|
|
132
|
+
*/
|
|
133
|
+
private startCleanupTimer;
|
|
134
|
+
/**
|
|
135
|
+
* Clean up sessions that haven't been accessed recently
|
|
136
|
+
*/
|
|
137
|
+
private cleanupStaleSessions;
|
|
138
|
+
/**
|
|
139
|
+
* Shutdown and cleanup
|
|
140
|
+
*/
|
|
141
|
+
shutdown(): void;
|
|
142
|
+
/**
|
|
143
|
+
* Start a new thinking session
|
|
144
|
+
*/
|
|
145
|
+
startSession(problem: string, sessionId?: string): string;
|
|
146
|
+
/**
|
|
147
|
+
* Get session count for monitoring
|
|
148
|
+
*/
|
|
149
|
+
getSessionCount(): number;
|
|
150
|
+
/**
|
|
151
|
+
* Process a thought and return the result
|
|
152
|
+
*/
|
|
153
|
+
processThought(input: ThoughtInput): Promise<ThinkingResult>;
|
|
154
|
+
/**
|
|
155
|
+
* Extract insights from thought text
|
|
156
|
+
*/
|
|
157
|
+
private extractInsights;
|
|
158
|
+
/**
|
|
159
|
+
* Handle branching logic
|
|
160
|
+
*/
|
|
161
|
+
private handleBranching;
|
|
162
|
+
/**
|
|
163
|
+
* Handle merging of branches
|
|
164
|
+
*/
|
|
165
|
+
private handleMerge;
|
|
166
|
+
/**
|
|
167
|
+
* Add a new hypothesis
|
|
168
|
+
*/
|
|
169
|
+
private addHypothesis;
|
|
170
|
+
/**
|
|
171
|
+
* Update hypothesis status based on verification
|
|
172
|
+
*/
|
|
173
|
+
private updateHypothesisStatus;
|
|
174
|
+
/**
|
|
175
|
+
* Record a dead end
|
|
176
|
+
*/
|
|
177
|
+
private recordDeadEnd;
|
|
178
|
+
/**
|
|
179
|
+
* Find the best point to backtrack to
|
|
180
|
+
*/
|
|
181
|
+
private findBacktrackPoint;
|
|
182
|
+
/**
|
|
183
|
+
* Calculate overall confidence
|
|
184
|
+
*/
|
|
185
|
+
private calculateOverallConfidence;
|
|
186
|
+
/**
|
|
187
|
+
* Get AI enhancement for the current thinking
|
|
188
|
+
*/
|
|
189
|
+
private getAIEnhancement;
|
|
190
|
+
/**
|
|
191
|
+
* Generate a progress summary
|
|
192
|
+
*/
|
|
193
|
+
private generateProgressSummary;
|
|
194
|
+
/**
|
|
195
|
+
* Generate final conclusion
|
|
196
|
+
*/
|
|
197
|
+
private generateConclusion;
|
|
198
|
+
/**
|
|
199
|
+
* Get current session
|
|
200
|
+
*/
|
|
201
|
+
getSession(): ThinkingSession | null;
|
|
202
|
+
/**
|
|
203
|
+
* Reset the server
|
|
204
|
+
*/
|
|
205
|
+
reset(): void;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Process a thought using the advanced thinking server
|
|
209
|
+
*/
|
|
210
|
+
export declare function processThought(input: ThoughtInput): Promise<ThinkingResult>;
|
|
211
|
+
/**
|
|
212
|
+
* Start a new thinking session
|
|
213
|
+
*/
|
|
214
|
+
export declare function startSession(problem: string): string;
|
|
215
|
+
/**
|
|
216
|
+
* Reset the thinking server
|
|
217
|
+
*/
|
|
218
|
+
export declare function resetThinking(): void;
|
|
219
|
+
/**
|
|
220
|
+
* Get the current session
|
|
221
|
+
*/
|
|
222
|
+
export declare function getCurrentSession(): ThinkingSession | null;
|
|
223
|
+
//# sourceMappingURL=think.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"think.d.ts","sourceRoot":"","sources":["../../src/tools/think.ts"],"names":[],"mappings":"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"}
|