mcp-adr-analysis-server 2.1.9 → 2.1.11

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 (94) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/src/index.d.ts +9 -0
  3. package/dist/src/index.d.ts.map +1 -1
  4. package/dist/src/index.js +129 -0
  5. package/dist/src/index.js.map +1 -1
  6. package/dist/src/templates/domain-knowledge-templates.d.ts.map +1 -1
  7. package/dist/src/templates/domain-knowledge-templates.js +49 -49
  8. package/dist/src/templates/domain-knowledge-templates.js.map +1 -1
  9. package/dist/src/tools/adr-suggestion-tool.d.ts +2 -2
  10. package/dist/src/tools/adr-suggestion-tool.d.ts.map +1 -1
  11. package/dist/src/tools/adr-suggestion-tool.js +125 -11
  12. package/dist/src/tools/adr-suggestion-tool.js.map +1 -1
  13. package/dist/src/tools/adr-validation-tool.d.ts +46 -0
  14. package/dist/src/tools/adr-validation-tool.d.ts.map +1 -0
  15. package/dist/src/tools/adr-validation-tool.js +320 -0
  16. package/dist/src/tools/adr-validation-tool.js.map +1 -0
  17. package/dist/src/tools/deployment-analysis-tool.d.ts.map +1 -1
  18. package/dist/src/tools/deployment-analysis-tool.js +35 -1
  19. package/dist/src/tools/deployment-analysis-tool.js.map +1 -1
  20. package/dist/src/tools/deployment-guidance-tool.d.ts.map +1 -1
  21. package/dist/src/tools/deployment-guidance-tool.js +78 -24
  22. package/dist/src/tools/deployment-guidance-tool.js.map +1 -1
  23. package/dist/src/tools/deployment-readiness-tool.d.ts.map +1 -1
  24. package/dist/src/tools/deployment-readiness-tool.js +151 -4
  25. package/dist/src/tools/deployment-readiness-tool.js.map +1 -1
  26. package/dist/src/tools/environment-analysis-tool.d.ts.map +1 -1
  27. package/dist/src/tools/environment-analysis-tool.js +36 -1
  28. package/dist/src/tools/environment-analysis-tool.js.map +1 -1
  29. package/dist/src/tools/interactive-adr-planning-tool.d.ts.map +1 -1
  30. package/dist/src/tools/interactive-adr-planning-tool.js +82 -9
  31. package/dist/src/tools/interactive-adr-planning-tool.js.map +1 -1
  32. package/dist/src/tools/perform-research-tool.d.ts +17 -0
  33. package/dist/src/tools/perform-research-tool.d.ts.map +1 -0
  34. package/dist/src/tools/perform-research-tool.js +180 -0
  35. package/dist/src/tools/perform-research-tool.js.map +1 -0
  36. package/dist/src/tools/research-question-tool.d.ts.map +1 -1
  37. package/dist/src/tools/research-question-tool.js +11 -9
  38. package/dist/src/tools/research-question-tool.js.map +1 -1
  39. package/dist/src/tools/review-existing-adrs-tool.d.ts.map +1 -1
  40. package/dist/src/tools/review-existing-adrs-tool.js +38 -2
  41. package/dist/src/tools/review-existing-adrs-tool.js.map +1 -1
  42. package/dist/src/tools/troubleshoot-guided-workflow-tool.d.ts.map +1 -1
  43. package/dist/src/tools/troubleshoot-guided-workflow-tool.js +89 -0
  44. package/dist/src/tools/troubleshoot-guided-workflow-tool.js.map +1 -1
  45. package/dist/src/types/conversation-context.d.ts.map +1 -1
  46. package/dist/src/types/conversation-context.js +12 -12
  47. package/dist/src/types/conversation-context.js.map +1 -1
  48. package/dist/src/utils/ai-executor.d.ts.map +1 -1
  49. package/dist/src/utils/ai-executor.js +3 -3
  50. package/dist/src/utils/ai-executor.js.map +1 -1
  51. package/dist/src/utils/apply-cot-enhancement.d.ts.map +1 -1
  52. package/dist/src/utils/apply-cot-enhancement.js +15 -15
  53. package/dist/src/utils/apply-cot-enhancement.js.map +1 -1
  54. package/dist/src/utils/automatic-prompt-engineering.d.ts.map +1 -1
  55. package/dist/src/utils/automatic-prompt-engineering.js +68 -58
  56. package/dist/src/utils/automatic-prompt-engineering.js.map +1 -1
  57. package/dist/src/utils/deployment-analysis.d.ts.map +1 -1
  58. package/dist/src/utils/deployment-analysis.js +13 -8
  59. package/dist/src/utils/deployment-analysis.js.map +1 -1
  60. package/dist/src/utils/environment-analysis.d.ts.map +1 -1
  61. package/dist/src/utils/environment-analysis.js +59 -43
  62. package/dist/src/utils/environment-analysis.js.map +1 -1
  63. package/dist/src/utils/environment-capability-registry.d.ts +101 -0
  64. package/dist/src/utils/environment-capability-registry.d.ts.map +1 -0
  65. package/dist/src/utils/environment-capability-registry.js +489 -0
  66. package/dist/src/utils/environment-capability-registry.js.map +1 -0
  67. package/dist/src/utils/index.d.ts +3 -3
  68. package/dist/src/utils/index.d.ts.map +1 -1
  69. package/dist/src/utils/index.js +3 -3
  70. package/dist/src/utils/index.js.map +1 -1
  71. package/dist/src/utils/knowledge-generation.d.ts.map +1 -1
  72. package/dist/src/utils/knowledge-generation.js +61 -35
  73. package/dist/src/utils/knowledge-generation.js.map +1 -1
  74. package/dist/src/utils/knowledge-graph-manager.d.ts +4 -0
  75. package/dist/src/utils/knowledge-graph-manager.d.ts.map +1 -1
  76. package/dist/src/utils/knowledge-graph-manager.js +8 -0
  77. package/dist/src/utils/knowledge-graph-manager.js.map +1 -1
  78. package/dist/src/utils/llm-artifact-detector.d.ts.map +1 -1
  79. package/dist/src/utils/llm-artifact-detector.js +28 -24
  80. package/dist/src/utils/llm-artifact-detector.js.map +1 -1
  81. package/dist/src/utils/prompt-composition.d.ts.map +1 -1
  82. package/dist/src/utils/prompt-composition.js +1 -4
  83. package/dist/src/utils/prompt-composition.js.map +1 -1
  84. package/dist/src/utils/reflexion.d.ts.map +1 -1
  85. package/dist/src/utils/reflexion.js +51 -42
  86. package/dist/src/utils/reflexion.js.map +1 -1
  87. package/dist/src/utils/research-orchestrator.d.ts +77 -0
  88. package/dist/src/utils/research-orchestrator.d.ts.map +1 -0
  89. package/dist/src/utils/research-orchestrator.js +450 -0
  90. package/dist/src/utils/research-orchestrator.js.map +1 -0
  91. package/dist/src/utils/tree-sitter-analyzer.d.ts.map +1 -1
  92. package/dist/src/utils/tree-sitter-analyzer.js +83 -11
  93. package/dist/src/utils/tree-sitter-analyzer.js.map +1 -1
  94. package/package.json +1 -1
@@ -0,0 +1,450 @@
1
+ /**
2
+ * Research Orchestrator
3
+ *
4
+ * Coordinates multi-source research with cascading fallback:
5
+ * 1. Project Files (local, fast, free)
6
+ * 2. Knowledge Graph (in-memory, instant)
7
+ * 3. Environment Resources (live runtime data)
8
+ * 4. Web Search (external, last resort)
9
+ */
10
+ import { promises as fs } from 'fs';
11
+ import * as path from 'path';
12
+ import { EnhancedLogger } from './enhanced-logging.js';
13
+ // import { KnowledgeGraphManager } from './knowledge-graph-manager.js'; // TODO: Implement KG query
14
+ import { findFiles } from './file-system.js';
15
+ import { scanProjectStructure } from './actual-file-operations.js';
16
+ import { searchWithRipgrep, isRipgrepAvailable } from './ripgrep-wrapper.js';
17
+ import { TreeSitterAnalyzer } from './tree-sitter-analyzer.js';
18
+ export class ResearchOrchestrator {
19
+ logger;
20
+ projectPath;
21
+ adrDirectory;
22
+ confidenceThreshold = 0.6;
23
+ constructor(projectPath, adrDirectory) {
24
+ this.logger = new EnhancedLogger();
25
+ this.projectPath = projectPath || process.cwd();
26
+ this.adrDirectory = adrDirectory || 'docs/adrs';
27
+ }
28
+ /**
29
+ * Answer a research question using cascading source hierarchy
30
+ */
31
+ async answerResearchQuestion(question) {
32
+ const startTime = Date.now();
33
+ this.logger.info(`Starting research for question: "${question}"`, 'ResearchOrchestrator');
34
+ const answer = {
35
+ question,
36
+ sources: [],
37
+ confidence: 0,
38
+ needsWebSearch: false,
39
+ metadata: {
40
+ duration: 0,
41
+ sourcesQueried: [],
42
+ filesAnalyzed: 0,
43
+ },
44
+ };
45
+ try {
46
+ // SOURCE 1: PROJECT FILES
47
+ this.logger.info('📁 Searching project files...', 'ResearchOrchestrator');
48
+ const projectData = await this.searchProjectFiles(question);
49
+ if (projectData.found) {
50
+ answer.sources.push({
51
+ type: 'project_files',
52
+ data: projectData,
53
+ confidence: 0.9,
54
+ timestamp: new Date().toISOString(),
55
+ });
56
+ answer.metadata.sourcesQueried.push('project_files');
57
+ answer.metadata.filesAnalyzed = projectData.files?.length || 0;
58
+ this.logger.info(`Found ${projectData.files?.length || 0} relevant project files`, 'ResearchOrchestrator');
59
+ }
60
+ // SOURCE 2: KNOWLEDGE GRAPH
61
+ this.logger.info('🧠 Querying knowledge graph...', 'ResearchOrchestrator');
62
+ const knowledgeData = await this.queryKnowledgeGraph(question);
63
+ if (knowledgeData.found) {
64
+ answer.sources.push({
65
+ type: 'knowledge_graph',
66
+ data: knowledgeData,
67
+ confidence: 0.85,
68
+ timestamp: new Date().toISOString(),
69
+ });
70
+ answer.metadata.sourcesQueried.push('knowledge_graph');
71
+ this.logger.info(`Found ${knowledgeData.nodes?.length || 0} relevant knowledge graph nodes`, 'ResearchOrchestrator');
72
+ }
73
+ // SOURCE 3: ENVIRONMENT RESOURCES
74
+ this.logger.info('🔧 Checking environment resources...', 'ResearchOrchestrator');
75
+ const envData = await this.queryEnvironment(question);
76
+ if (envData.found) {
77
+ answer.sources.push({
78
+ type: 'environment',
79
+ data: envData,
80
+ confidence: 0.95,
81
+ timestamp: new Date().toISOString(),
82
+ });
83
+ answer.metadata.sourcesQueried.push('environment');
84
+ this.logger.info(`Found environment data from ${envData.capabilities?.length || 0} capabilities`, 'ResearchOrchestrator');
85
+ }
86
+ // Calculate overall confidence
87
+ answer.confidence = this.calculateConfidence(answer.sources);
88
+ this.logger.info(`Research confidence: ${(answer.confidence * 100).toFixed(1)}%`, 'ResearchOrchestrator');
89
+ // SOURCE 4: WEB SEARCH (fallback)
90
+ if (answer.confidence < this.confidenceThreshold) {
91
+ this.logger.warn(`Confidence below threshold (${this.confidenceThreshold}), web search recommended`, 'ResearchOrchestrator');
92
+ answer.needsWebSearch = true;
93
+ }
94
+ // Generate synthesized answer
95
+ answer.answer = this.synthesizeAnswer(answer);
96
+ answer.metadata.duration = Date.now() - startTime;
97
+ this.logger.info(`Research completed in ${answer.metadata.duration}ms`, 'ResearchOrchestrator', { confidence: answer.confidence, sources: answer.metadata.sourcesQueried });
98
+ return answer;
99
+ }
100
+ catch (_error) {
101
+ this.logger.error('Research orchestration failed', 'ResearchOrchestrator', _error);
102
+ throw _error;
103
+ }
104
+ }
105
+ /**
106
+ * SOURCE 1: Search project files (Enhanced with tree-sitter, ripgrep, and actual file ops)
107
+ */
108
+ async searchProjectFiles(question) {
109
+ const results = {
110
+ found: false,
111
+ files: [],
112
+ content: {},
113
+ relevance: {},
114
+ parseAnalysis: {},
115
+ };
116
+ try {
117
+ const questionLower = question.toLowerCase();
118
+ const keywords = this.extractKeywords(question);
119
+ this.logger.info(`Searching project files with keywords: ${keywords.join(', ')}`, 'ResearchOrchestrator');
120
+ // PHASE 1: Use actual-file-operations for structured project scan
121
+ const projectStructure = await scanProjectStructure(this.projectPath, {
122
+ readContent: false,
123
+ maxFileSize: 100000,
124
+ includeHidden: false,
125
+ });
126
+ // PHASE 2: Match relevant file categories based on question intent
127
+ const relevantFiles = [];
128
+ if (questionLower.match(/docker|container/i)) {
129
+ relevantFiles.push(...projectStructure.dockerFiles.map(f => f.path));
130
+ }
131
+ if (questionLower.match(/kubernetes|k8s|pod|deployment/i)) {
132
+ relevantFiles.push(...projectStructure.kubernetesFiles.map(f => f.path));
133
+ }
134
+ if (questionLower.match(/dependency|package|library/i)) {
135
+ relevantFiles.push(...projectStructure.packageFiles.map(f => f.path));
136
+ }
137
+ if (questionLower.match(/config|configuration|environment|env/i)) {
138
+ relevantFiles.push(...projectStructure.configFiles.map(f => f.path));
139
+ relevantFiles.push(...projectStructure.environmentFiles.map(f => f.path));
140
+ }
141
+ if (questionLower.match(/build|ci|cd|pipeline/i)) {
142
+ relevantFiles.push(...projectStructure.buildFiles.map(f => f.path));
143
+ relevantFiles.push(...projectStructure.ciFiles.map(f => f.path));
144
+ }
145
+ if (questionLower.match(/test|testing|spec/i)) {
146
+ // Use fast-glob to find test files
147
+ const testResults = await findFiles(this.projectPath, [
148
+ '**/*.test.ts',
149
+ '**/*.spec.ts',
150
+ '**/*.test.js',
151
+ '**/*.spec.js',
152
+ '**/tests/**',
153
+ '**/test/**',
154
+ ]);
155
+ relevantFiles.push(...testResults.files.map(f => f.path));
156
+ }
157
+ // PHASE 3: Always include ADRs
158
+ const adrPath = path.join(this.projectPath, this.adrDirectory);
159
+ try {
160
+ const adrResults = await findFiles(adrPath, ['**/*.md']);
161
+ relevantFiles.push(...adrResults.files.map(f => f.path));
162
+ }
163
+ catch {
164
+ this.logger.warn(`ADR directory not found: ${adrPath}`, 'ResearchOrchestrator');
165
+ }
166
+ // PHASE 4: Use ripgrep for keyword search (if available)
167
+ const hasRipgrep = await isRipgrepAvailable();
168
+ if (hasRipgrep && keywords.length > 0) {
169
+ this.logger.info('Using ripgrep for fast keyword search', 'ResearchOrchestrator');
170
+ try {
171
+ const ripgrepFiles = await searchWithRipgrep({
172
+ pattern: keywords.join('|'),
173
+ path: this.projectPath,
174
+ caseInsensitive: true,
175
+ });
176
+ relevantFiles.push(...ripgrepFiles);
177
+ }
178
+ catch {
179
+ this.logger.warn('Ripgrep search failed, continuing with other methods', 'ResearchOrchestrator');
180
+ }
181
+ }
182
+ // Remove duplicates
183
+ results.files = [...new Set(relevantFiles)];
184
+ if (results.files.length === 0) {
185
+ this.logger.info('No relevant files found', 'ResearchOrchestrator');
186
+ return results;
187
+ }
188
+ results.found = true;
189
+ // PHASE 5: Read and analyze files with tree-sitter
190
+ const analyzer = new TreeSitterAnalyzer();
191
+ for (const file of results.files.slice(0, 50)) {
192
+ // Limit to 50 files for performance
193
+ try {
194
+ const content = await fs.readFile(file, 'utf-8');
195
+ // Calculate text-based relevance
196
+ const relevance = this.calculateRelevance(content, question);
197
+ if (relevance > 0.2) {
198
+ // Lower threshold for tree-sitter analysis
199
+ results.content[file] = content;
200
+ results.relevance[file] = relevance;
201
+ // PHASE 6: Use tree-sitter for AST-based analysis
202
+ if (this.shouldParse(file)) {
203
+ try {
204
+ const analysis = await analyzer.analyzeFile(file, content);
205
+ // Enhance relevance based on AST analysis
206
+ let astRelevance = relevance;
207
+ // Check for infrastructure references
208
+ if (analysis.infraStructure && analysis.infraStructure.length > 0) {
209
+ // Extract provider types and resource names from infrastructure analysis
210
+ const infraProviders = analysis.infraStructure.map(i => i.provider);
211
+ const infraResources = analysis.infraStructure.map(i => i.name);
212
+ // Check if question keywords match infrastructure providers or resources
213
+ const matchingProviders = keywords.filter(k => infraProviders.some(p => p.toLowerCase().includes(k.toLowerCase())));
214
+ const matchingResources = keywords.filter(k => infraResources.some(r => r.toLowerCase().includes(k.toLowerCase())));
215
+ const totalMatches = matchingProviders.length + matchingResources.length;
216
+ if (totalMatches > 0) {
217
+ astRelevance += 0.2 * Math.min(totalMatches, 3); // Cap bonus at 0.6
218
+ }
219
+ }
220
+ // Check for imports/dependencies
221
+ if (analysis.imports && keywords.some(k => k.match(/import|require|dependency/i))) {
222
+ astRelevance += 0.1;
223
+ }
224
+ // Update relevance
225
+ results.relevance[file] = Math.min(astRelevance, 1.0);
226
+ results.parseAnalysis[file] = {
227
+ language: analysis.language,
228
+ hasInfrastructure: !!analysis.infraStructure,
229
+ functionCount: analysis.functions?.length || 0,
230
+ importCount: analysis.imports?.length || 0,
231
+ };
232
+ this.logger.debug(`Tree-sitter analysis for ${file}: ${analysis.language}, relevance: ${results.relevance[file]}`, 'ResearchOrchestrator');
233
+ }
234
+ catch {
235
+ this.logger.debug(`Tree-sitter parsing failed for ${file}, using text-based analysis`, 'ResearchOrchestrator');
236
+ }
237
+ }
238
+ }
239
+ }
240
+ catch {
241
+ this.logger.warn(`Failed to read file: ${file}`, 'ResearchOrchestrator');
242
+ }
243
+ }
244
+ // Sort files by relevance
245
+ results.files = results.files
246
+ .filter(f => (results.relevance[f] ?? 0) > 0.2)
247
+ .sort((a, b) => (results.relevance[b] || 0) - (results.relevance[a] || 0))
248
+ .slice(0, 20); // Top 20 most relevant files
249
+ this.logger.info(`Found ${results.files.length} relevant files (analyzed with tree-sitter)`, 'ResearchOrchestrator');
250
+ return results;
251
+ }
252
+ catch (error) {
253
+ this.logger.error('Project file search failed', 'ResearchOrchestrator', error);
254
+ return results;
255
+ }
256
+ }
257
+ /**
258
+ * Check if file should be parsed with tree-sitter
259
+ */
260
+ shouldParse(filePath) {
261
+ const parsableExtensions = [
262
+ '.ts',
263
+ '.tsx',
264
+ '.js',
265
+ '.jsx',
266
+ '.py',
267
+ '.yaml',
268
+ '.yml',
269
+ '.json',
270
+ '.sh',
271
+ '.bash',
272
+ '.tf',
273
+ '.hcl',
274
+ ];
275
+ return parsableExtensions.some(ext => filePath.endsWith(ext));
276
+ }
277
+ /**
278
+ * SOURCE 2: Query knowledge graph
279
+ */
280
+ async queryKnowledgeGraph(_question) {
281
+ try {
282
+ // TODO: Implement actual knowledge graph query using KnowledgeGraphManager
283
+ // const kgManager = new KnowledgeGraphManager();
284
+ // const keywords = this.extractKeywords(question);
285
+ // Query knowledge graph (placeholder - implement based on your KG structure)
286
+ const results = {
287
+ found: false,
288
+ nodes: [],
289
+ relationships: [],
290
+ };
291
+ // TODO: Implement actual knowledge graph query
292
+ // For now, return empty results
293
+ return results;
294
+ }
295
+ catch (_error) {
296
+ this.logger.error('Knowledge graph query failed', 'ResearchOrchestrator', _error);
297
+ return { found: false, nodes: [], relationships: [] };
298
+ }
299
+ }
300
+ /**
301
+ * SOURCE 3: Query environment resources
302
+ */
303
+ async queryEnvironment(question) {
304
+ try {
305
+ // Import dynamically to avoid circular dependencies
306
+ const { EnvironmentCapabilityRegistry } = await import('./environment-capability-registry.js');
307
+ const envRegistry = new EnvironmentCapabilityRegistry(this.projectPath);
308
+ // Discover available capabilities
309
+ await envRegistry.discoverCapabilities();
310
+ // Query relevant capabilities
311
+ const results = await envRegistry.query(question);
312
+ return {
313
+ found: results.length > 0,
314
+ capabilities: envRegistry.listCapabilities(),
315
+ data: results,
316
+ };
317
+ }
318
+ catch {
319
+ this.logger.warn('Environment query failed (capability registry not available)', 'ResearchOrchestrator');
320
+ return { found: false, capabilities: [], data: [] };
321
+ }
322
+ }
323
+ /**
324
+ * Calculate confidence score from multiple sources
325
+ */
326
+ calculateConfidence(sources) {
327
+ if (sources.length === 0)
328
+ return 0;
329
+ // Weighted confidence calculation
330
+ const totalConfidence = sources.reduce((sum, s) => sum + s.confidence, 0);
331
+ const avgConfidence = totalConfidence / sources.length;
332
+ // Bonus for multiple sources
333
+ const sourceBonus = Math.min(sources.length * 0.05, 0.15);
334
+ return Math.min(avgConfidence + sourceBonus, 1.0);
335
+ }
336
+ /**
337
+ * Synthesize answer from multiple sources
338
+ */
339
+ synthesizeAnswer(research) {
340
+ if (research.sources.length === 0) {
341
+ return 'No relevant information found in project files, knowledge graph, or environment.';
342
+ }
343
+ const parts = [];
344
+ // Add project file findings
345
+ const projectFiles = research.sources.find(s => s.type === 'project_files');
346
+ if (projectFiles && projectFiles.data.files?.length > 0) {
347
+ parts.push(`Found ${projectFiles.data.files.length} relevant project file(s).`);
348
+ }
349
+ // Add knowledge graph findings
350
+ const knowledgeGraph = research.sources.find(s => s.type === 'knowledge_graph');
351
+ if (knowledgeGraph && knowledgeGraph.data.nodes?.length > 0) {
352
+ parts.push(`Identified ${knowledgeGraph.data.nodes.length} related architectural decision(s).`);
353
+ }
354
+ // Add environment findings
355
+ const environment = research.sources.find(s => s.type === 'environment');
356
+ if (environment && environment.data.capabilities?.length > 0) {
357
+ parts.push(`Detected ${environment.data.capabilities.length} environment capability(ies): ${environment.data.capabilities.join(', ')}.`);
358
+ }
359
+ if (research.needsWebSearch) {
360
+ parts.push('Additional web research recommended for comprehensive answer.');
361
+ }
362
+ return parts.join(' ');
363
+ }
364
+ /**
365
+ /**
366
+ * Calculate relevance score for content
367
+ */
368
+ calculateRelevance(content, question) {
369
+ const contentLower = content.toLowerCase();
370
+ const questionLower = question.toLowerCase();
371
+ // Extract keywords from question
372
+ const keywords = this.extractKeywords(question);
373
+ let score = 0;
374
+ for (const keyword of keywords) {
375
+ if (contentLower.includes(keyword.toLowerCase())) {
376
+ score += 0.2;
377
+ }
378
+ }
379
+ // Bonus for exact question phrases
380
+ const questionWords = questionLower.split(/\s+/).filter(w => w.length > 3);
381
+ for (const word of questionWords) {
382
+ if (contentLower.includes(word)) {
383
+ score += 0.1;
384
+ }
385
+ }
386
+ return Math.min(score, 1.0);
387
+ }
388
+ /**
389
+ * Extract keywords from question
390
+ */
391
+ extractKeywords(question) {
392
+ // Remove common words
393
+ const stopWords = new Set([
394
+ 'the',
395
+ 'is',
396
+ 'are',
397
+ 'was',
398
+ 'were',
399
+ 'what',
400
+ 'when',
401
+ 'where',
402
+ 'why',
403
+ 'how',
404
+ 'which',
405
+ 'who',
406
+ 'a',
407
+ 'an',
408
+ 'and',
409
+ 'or',
410
+ 'but',
411
+ 'in',
412
+ 'on',
413
+ 'at',
414
+ 'to',
415
+ 'for',
416
+ 'with',
417
+ 'about',
418
+ 'as',
419
+ 'by',
420
+ 'from',
421
+ 'of',
422
+ 'can',
423
+ 'could',
424
+ 'should',
425
+ 'would',
426
+ 'do',
427
+ 'does',
428
+ 'did',
429
+ 'have',
430
+ 'has',
431
+ 'had',
432
+ 'we',
433
+ 'our',
434
+ 'us',
435
+ ]);
436
+ const words = question
437
+ .toLowerCase()
438
+ .replace(/[^\w\s-]/g, ' ')
439
+ .split(/\s+/)
440
+ .filter(w => w.length > 2 && !stopWords.has(w));
441
+ return [...new Set(words)];
442
+ }
443
+ /**
444
+ * Set confidence threshold for web search fallback
445
+ */
446
+ setConfidenceThreshold(threshold) {
447
+ this.confidenceThreshold = Math.max(0, Math.min(1, threshold));
448
+ }
449
+ }
450
+ //# sourceMappingURL=research-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research-orchestrator.js","sourceRoot":"","sources":["../../../src/utils/research-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tree-sitter-analyzer.d.ts","sourceRoot":"","sources":["../../../src/utils/tree-sitter-analyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tree-sitter-analyzer.d.ts","sourceRoot":"","sources":["../../../src/utils/tree-sitter-analyzer.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,11 @@ export class TreeSitterAnalyzer {
30
30
  * Initialize tree-sitter parsers with graceful fallback
31
31
  */
32
32
  async initializeParsers() {
33
+ // Skip tree-sitter initialization in test environment
34
+ if (process.env['NODE_ENV'] === 'test' || process.env['JEST_WORKER_ID'] !== undefined) {
35
+ this.initialized = false;
36
+ return;
37
+ }
33
38
  try {
34
39
  // Initialize core parsers for enterprise stack
35
40
  await this.loadParser('typescript', 'tree-sitter-typescript');
@@ -48,6 +53,10 @@ export class TreeSitterAnalyzer {
48
53
  }
49
54
  }
50
55
  async loadParser(language, packageName) {
56
+ // Skip loading parsers in test environment
57
+ if (process.env['NODE_ENV'] === 'test' || process.env['JEST_WORKER_ID'] !== undefined) {
58
+ return;
59
+ }
51
60
  try {
52
61
  const TreeSitterModule = await import('tree-sitter');
53
62
  const TreeSitter = TreeSitterModule.default || TreeSitterModule;
@@ -69,7 +78,10 @@ export class TreeSitterAnalyzer {
69
78
  this.parsers.set(language, parser);
70
79
  }
71
80
  catch (error) {
72
- console.warn(`Failed to load ${language} parser:`, error);
81
+ // Silently skip parser loading errors in test environment
82
+ if (process.env['NODE_ENV'] !== 'test' && process.env['JEST_WORKER_ID'] === undefined) {
83
+ console.warn(`Failed to load ${language} parser:`, error);
84
+ }
73
85
  }
74
86
  }
75
87
  /**
@@ -464,13 +476,44 @@ export class TreeSitterAnalyzer {
464
476
  };
465
477
  // Basic regex-based secret detection
466
478
  const secretPatterns = [
467
- { pattern: /(?:api[_-]?key|apikey)[:=]\s*['""]([^'""]+)['""]?/i, type: 'api_key' },
468
- { pattern: /(?:password|pwd|pass)[:=]\s*['""]([^'""]+)['""]?/i, type: 'password' },
469
- { pattern: /(?:token|auth)[:=]\s*['""]([^'""]+)['""]?/i, type: 'token' },
470
479
  {
471
- pattern: /(?:secret|private[_-]?key)[:=]\s*['""]([^'""]+)['""]?/i,
480
+ pattern: /["']?(?:api[_-]?key|apikey)["']?\s*[:=\s]\s*["']([^"']+)["']/i,
481
+ type: 'api_key',
482
+ },
483
+ {
484
+ pattern: /["']?(?:password|pwd|pass)["']?\s*[:=\s]\s*["']([^"']+)["']/i,
485
+ type: 'password',
486
+ },
487
+ { pattern: /["']?(?:token|auth)["']?\s*[:=\s]\s*["']([^"']+)["']/i, type: 'token' },
488
+ {
489
+ pattern: /["']?(?:secret|private[_-]?key)["']?\s*[:=\s]\s*["']([^"']+)["']/i,
490
+ type: 'private_key',
491
+ },
492
+ // AWS Access Key - specific pattern (environment variable style)
493
+ {
494
+ pattern: /AWS_ACCESS_KEY_ID\s*[:=]\s*["']?((?:AKIA|ASIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA)[A-Z0-9]{16})["']?/i,
495
+ type: 'api_key',
496
+ },
497
+ // AWS Access Key - generic pattern (any variable name with AWS key format)
498
+ {
499
+ pattern: /["']?((?:AKIA|ASIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA)[A-Z0-9]{16})["']?/,
500
+ type: 'api_key',
501
+ },
502
+ // AWS Secret Key - specific pattern (40 chars)
503
+ {
504
+ pattern: /AWS_SECRET_ACCESS_KEY\s*[:=]\s*["']?([A-Za-z0-9+/]{40})["']?/i,
505
+ type: 'private_key',
506
+ },
507
+ // Generic AWS secret assignment
508
+ {
509
+ pattern: /(?:aws_secret|secret_key)\s*[:=]\s*["']([A-Za-z0-9+/]{40})["']/i,
472
510
  type: 'private_key',
473
511
  },
512
+ // YAML/Dockerfile environment variables with hardcoded values
513
+ {
514
+ pattern: /(?:value|ENV\s+\w+)\s*[:=]?\s*["']([a-zA-Z0-9_-]{10,})["']/i,
515
+ type: 'credential',
516
+ },
474
517
  ];
475
518
  lines.forEach((line, index) => {
476
519
  secretPatterns.forEach(({ pattern, type }) => {
@@ -485,6 +528,16 @@ export class TreeSitterAnalyzer {
485
528
  });
486
529
  }
487
530
  });
531
+ // Detect privilege escalation in Dockerfile
532
+ if (language === 'dockerfile' && /USER\s+root/i.test(line)) {
533
+ result.securityIssues.push({
534
+ type: 'privilege_escalation',
535
+ severity: 'high',
536
+ location: { line: index + 1, column: 0 },
537
+ message: 'Running as root user',
538
+ suggestion: 'Use a non-root user',
539
+ });
540
+ }
488
541
  });
489
542
  result.hasSecrets = result.secrets.length > 0;
490
543
  return result;
@@ -558,15 +611,34 @@ export class TreeSitterAnalyzer {
558
611
  return 'credential';
559
612
  }
560
613
  detectSecretPattern(text) {
561
- // AWS Access Key
562
- if (/^AKIA[0-9A-Z]{16}$/.test(text))
563
- return 'api_key';
564
- // Generic API key patterns
565
- if (/^[A-Za-z0-9]{32,}$/.test(text) && text.length >= 32)
614
+ // AWS Access Key (various types)
615
+ if (/^(A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}$/.test(text)) {
566
616
  return 'api_key';
617
+ }
618
+ // AWS Secret Key (40 characters, base64-like) - using boundary detection
619
+ if (/^[A-Za-z0-9+/]{40}$/.test(text)) {
620
+ return 'private_key';
621
+ }
622
+ // AWS Session Token (longer, base64-like)
623
+ if (/^[A-Za-z0-9+/=]{100,}$/.test(text)) {
624
+ return 'token';
625
+ }
567
626
  // JWT Token
568
- if (/^eyJ[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_.+/]*$/.test(text))
627
+ if (/^eyJ[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_.+/]*$/.test(text)) {
628
+ return 'token';
629
+ }
630
+ // GitHub Personal Access Token
631
+ if (/^ghp_[A-Za-z0-9]{36}$/.test(text)) {
632
+ return 'token';
633
+ }
634
+ // Slack tokens
635
+ if (/^xox[baprs]-[0-9]{12}-[0-9]{12}-[a-zA-Z0-9]{24}$/.test(text)) {
569
636
  return 'token';
637
+ }
638
+ // Generic API key patterns (32+ alphanumeric)
639
+ if (/^[A-Za-z0-9]{32,64}$/.test(text) && text.length >= 32) {
640
+ return 'api_key';
641
+ }
570
642
  return null;
571
643
  }
572
644
  isAnsibleFile(filename, content) {