@stackguide/mcp-server 3.1.0 → 3.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.
Files changed (80) hide show
  1. package/README.md +59 -2
  2. package/dist/config/types.d.ts +1 -0
  3. package/dist/config/types.d.ts.map +1 -1
  4. package/dist/config/types.js.map +1 -1
  5. package/dist/handlers/analyze.d.ts +11 -0
  6. package/dist/handlers/analyze.d.ts.map +1 -0
  7. package/dist/handlers/analyze.js +274 -0
  8. package/dist/handlers/analyze.js.map +1 -0
  9. package/dist/handlers/index.d.ts +1 -0
  10. package/dist/handlers/index.d.ts.map +1 -1
  11. package/dist/handlers/index.js +1 -0
  12. package/dist/handlers/index.js.map +1 -1
  13. package/dist/handlers/setup.d.ts +1 -0
  14. package/dist/handlers/setup.d.ts.map +1 -1
  15. package/dist/handlers/setup.js +42 -0
  16. package/dist/handlers/setup.js.map +1 -1
  17. package/dist/index.js +4 -2
  18. package/dist/index.js.map +1 -1
  19. package/dist/services/codeAnalyzer.d.ts +5 -1
  20. package/dist/services/codeAnalyzer.d.ts.map +1 -1
  21. package/dist/services/codeAnalyzer.js +39 -2
  22. package/dist/services/codeAnalyzer.js.map +1 -1
  23. package/dist/services/intelligence/configGenerator.d.ts +28 -0
  24. package/dist/services/intelligence/configGenerator.d.ts.map +1 -0
  25. package/dist/services/intelligence/configGenerator.js +404 -0
  26. package/dist/services/intelligence/configGenerator.js.map +1 -0
  27. package/dist/services/intelligence/dependencyAdvisor.d.ts +24 -0
  28. package/dist/services/intelligence/dependencyAdvisor.d.ts.map +1 -0
  29. package/dist/services/intelligence/dependencyAdvisor.js +404 -0
  30. package/dist/services/intelligence/dependencyAdvisor.js.map +1 -0
  31. package/dist/services/intelligence/index.d.ts +12 -0
  32. package/dist/services/intelligence/index.d.ts.map +1 -0
  33. package/dist/services/intelligence/index.js +16 -0
  34. package/dist/services/intelligence/index.js.map +1 -0
  35. package/dist/services/intelligence/projectIntelligence.d.ts +26 -0
  36. package/dist/services/intelligence/projectIntelligence.d.ts.map +1 -0
  37. package/dist/services/intelligence/projectIntelligence.js +344 -0
  38. package/dist/services/intelligence/projectIntelligence.js.map +1 -0
  39. package/dist/services/intelligence/structureAnalyzer.d.ts +27 -0
  40. package/dist/services/intelligence/structureAnalyzer.d.ts.map +1 -0
  41. package/dist/services/intelligence/structureAnalyzer.js +286 -0
  42. package/dist/services/intelligence/structureAnalyzer.js.map +1 -0
  43. package/dist/services/intelligence/templates.d.ts +22 -0
  44. package/dist/services/intelligence/templates.d.ts.map +1 -0
  45. package/dist/services/intelligence/templates.js +521 -0
  46. package/dist/services/intelligence/templates.js.map +1 -0
  47. package/dist/services/intelligence/types.d.ts +222 -0
  48. package/dist/services/intelligence/types.d.ts.map +1 -0
  49. package/dist/services/intelligence/types.js +7 -0
  50. package/dist/services/intelligence/types.js.map +1 -0
  51. package/dist/services/parsers/baseParser.d.ts +44 -0
  52. package/dist/services/parsers/baseParser.d.ts.map +1 -0
  53. package/dist/services/parsers/baseParser.js +177 -0
  54. package/dist/services/parsers/baseParser.js.map +1 -0
  55. package/dist/services/parsers/goParser.d.ts +28 -0
  56. package/dist/services/parsers/goParser.d.ts.map +1 -0
  57. package/dist/services/parsers/goParser.js +590 -0
  58. package/dist/services/parsers/goParser.js.map +1 -0
  59. package/dist/services/parsers/index.d.ts +62 -0
  60. package/dist/services/parsers/index.d.ts.map +1 -0
  61. package/dist/services/parsers/index.js +121 -0
  62. package/dist/services/parsers/index.js.map +1 -0
  63. package/dist/services/parsers/pythonParser.d.ts +28 -0
  64. package/dist/services/parsers/pythonParser.d.ts.map +1 -0
  65. package/dist/services/parsers/pythonParser.js +663 -0
  66. package/dist/services/parsers/pythonParser.js.map +1 -0
  67. package/dist/services/parsers/rustParser.d.ts +28 -0
  68. package/dist/services/parsers/rustParser.d.ts.map +1 -0
  69. package/dist/services/parsers/rustParser.js +654 -0
  70. package/dist/services/parsers/rustParser.js.map +1 -0
  71. package/dist/services/parsers/types.d.ts +241 -0
  72. package/dist/services/parsers/types.d.ts.map +1 -0
  73. package/dist/services/parsers/types.js +47 -0
  74. package/dist/services/parsers/types.js.map +1 -0
  75. package/dist/tools/definitions.d.ts +87 -0
  76. package/dist/tools/definitions.d.ts.map +1 -1
  77. package/dist/tools/definitions.js +34 -0
  78. package/dist/tools/definitions.js.map +1 -1
  79. package/dist/utils/validation.d.ts +2 -2
  80. package/package.json +1 -1
@@ -0,0 +1,344 @@
1
+ /**
2
+ * Project Intelligence Service
3
+ * Main orchestrator for project analysis and recommendations
4
+ * @version 3.3.0
5
+ */
6
+ import * as path from 'path';
7
+ import { analyzeStructure } from './structureAnalyzer.js';
8
+ import { analyzeConfigurations, generateSmartConfig, applyConfigFix } from './configGenerator.js';
9
+ import { analyzeDependencies, generateInstallCommand } from './dependencyAdvisor.js';
10
+ import * as autoDetect from '../autoDetect.js';
11
+ /**
12
+ * Generate comprehensive project intelligence report
13
+ */
14
+ export async function generateIntelligenceReport(projectPath) {
15
+ const timestamp = new Date().toISOString();
16
+ const absolutePath = path.resolve(projectPath);
17
+ // First, detect project type
18
+ const detection = autoDetect.detectProjectType(absolutePath);
19
+ const projectType = detection.projectType || 'react-typescript';
20
+ const confidence = detection.confidence;
21
+ // Run all analyses
22
+ const structure = analyzeStructure(absolutePath, projectType);
23
+ const configuration = analyzeConfigurations(absolutePath, projectType);
24
+ const dependencies = analyzeDependencies(absolutePath, projectType);
25
+ // Calculate overall score
26
+ const overallScore = calculateOverallScore(structure, configuration, dependencies);
27
+ const grade = scoreToGrade(overallScore);
28
+ // Generate priority actions
29
+ const priorityActions = generatePriorityActions(structure, configuration, dependencies);
30
+ // Generate workflow steps
31
+ const suggestedWorkflow = generateWorkflow(priorityActions, dependencies.packageManager);
32
+ // Estimate effort
33
+ const estimatedEffort = estimateEffort(priorityActions);
34
+ return {
35
+ timestamp,
36
+ projectPath: absolutePath,
37
+ projectType,
38
+ confidence,
39
+ overallScore,
40
+ grade,
41
+ structure,
42
+ configuration,
43
+ dependencies,
44
+ priorityActions,
45
+ suggestedWorkflow,
46
+ estimatedEffort
47
+ };
48
+ }
49
+ /**
50
+ * Calculate overall project health score
51
+ */
52
+ function calculateOverallScore(structure, configuration, dependencies) {
53
+ // Weighted average
54
+ const weights = {
55
+ structure: 0.25,
56
+ configuration: 0.35,
57
+ dependencies: 0.40
58
+ };
59
+ return Math.round(structure.structureScore * weights.structure +
60
+ configuration.configScore * weights.configuration +
61
+ dependencies.dependencyScore * weights.dependencies);
62
+ }
63
+ /**
64
+ * Convert score to letter grade
65
+ */
66
+ function scoreToGrade(score) {
67
+ if (score >= 90)
68
+ return 'A';
69
+ if (score >= 80)
70
+ return 'B';
71
+ if (score >= 70)
72
+ return 'C';
73
+ if (score >= 60)
74
+ return 'D';
75
+ return 'F';
76
+ }
77
+ /**
78
+ * Generate priority actions from analyses
79
+ */
80
+ function generatePriorityActions(structure, configuration, dependencies) {
81
+ const actions = [];
82
+ let actionId = 1;
83
+ // Structure actions
84
+ for (const dir of structure.missingDirs.filter(d => d.priority === 'high')) {
85
+ actions.push({
86
+ id: `struct-${actionId++}`,
87
+ category: 'structure',
88
+ priority: 'high',
89
+ title: `Create ${dir.path} directory`,
90
+ description: dir.purpose,
91
+ command: `mkdir -p ${dir.path}`,
92
+ autoApplicable: true
93
+ });
94
+ }
95
+ for (const improvement of structure.improvements.filter(i => i.priority === 'high')) {
96
+ actions.push({
97
+ id: `struct-${actionId++}`,
98
+ category: 'structure',
99
+ priority: 'high',
100
+ title: improvement.description,
101
+ description: `${improvement.type} operation suggested`,
102
+ autoApplicable: false
103
+ });
104
+ }
105
+ // Configuration actions
106
+ for (const rec of configuration.recommendedConfigs.filter(r => r.priority === 'critical' || r.priority === 'high')) {
107
+ actions.push({
108
+ id: `config-${actionId++}`,
109
+ category: 'config',
110
+ priority: rec.priority === 'critical' ? 'critical' : 'high',
111
+ title: `Add ${rec.filename}`,
112
+ description: rec.reason,
113
+ autoApplicable: true
114
+ });
115
+ }
116
+ for (const issue of configuration.issues.filter(i => i.severity === 'error' || i.severity === 'warning')) {
117
+ actions.push({
118
+ id: `config-${actionId++}`,
119
+ category: 'config',
120
+ priority: issue.severity === 'error' ? 'high' : 'medium',
121
+ title: issue.message,
122
+ description: issue.suggestion,
123
+ autoApplicable: issue.autoFixable
124
+ });
125
+ }
126
+ // Dependency actions
127
+ const highPriorityDeps = dependencies.recommendedAdditions.filter(d => d.priority === 'high');
128
+ if (highPriorityDeps.length > 0) {
129
+ actions.push({
130
+ id: `deps-${actionId++}`,
131
+ category: 'dependencies',
132
+ priority: 'high',
133
+ title: `Install missing dependencies`,
134
+ description: `Missing: ${highPriorityDeps.map(d => d.name).join(', ')}`,
135
+ command: generateInstallCommand(highPriorityDeps, dependencies.packageManager, true),
136
+ autoApplicable: true
137
+ });
138
+ }
139
+ // Security actions for vulnerabilities
140
+ for (const vuln of dependencies.vulnerabilities.filter(v => v.severity === 'critical' || v.severity === 'high')) {
141
+ actions.push({
142
+ id: `sec-${actionId++}`,
143
+ category: 'security',
144
+ priority: vuln.severity === 'critical' ? 'critical' : 'high',
145
+ title: `Fix ${vuln.package} vulnerability`,
146
+ description: vuln.title,
147
+ command: vuln.fixedIn ? `npm update ${vuln.package}` : undefined,
148
+ autoApplicable: !!vuln.fixedIn
149
+ });
150
+ }
151
+ // Sort by priority
152
+ const priorityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
153
+ actions.sort((a, b) => priorityOrder[a.priority] - priorityOrder[b.priority]);
154
+ return actions;
155
+ }
156
+ /**
157
+ * Generate suggested workflow steps
158
+ */
159
+ function generateWorkflow(actions, packageManager) {
160
+ const steps = [];
161
+ let order = 1;
162
+ // Group actions by category
163
+ const criticalActions = actions.filter(a => a.priority === 'critical');
164
+ const configActions = actions.filter(a => a.category === 'config' && a.priority !== 'critical');
165
+ const depActions = actions.filter(a => a.category === 'dependencies');
166
+ const structureActions = actions.filter(a => a.category === 'structure');
167
+ // Step 1: Critical issues first
168
+ if (criticalActions.length > 0) {
169
+ steps.push({
170
+ order: order++,
171
+ title: 'Fix Critical Issues',
172
+ description: `Address ${criticalActions.length} critical issue(s) before proceeding`,
173
+ estimatedTime: '15-30 min',
174
+ optional: false
175
+ });
176
+ }
177
+ // Step 2: Install dependencies
178
+ if (depActions.length > 0) {
179
+ const installCmd = packageManager === 'pnpm' ? 'pnpm add -D' :
180
+ packageManager === 'yarn' ? 'yarn add -D' : 'npm install -D';
181
+ steps.push({
182
+ order: order++,
183
+ title: 'Install Development Dependencies',
184
+ description: 'Add missing linting, testing, and DX tools',
185
+ command: depActions.find(a => a.command)?.command,
186
+ estimatedTime: '2-5 min',
187
+ optional: false
188
+ });
189
+ }
190
+ // Step 3: Add configuration files
191
+ if (configActions.length > 0) {
192
+ steps.push({
193
+ order: order++,
194
+ title: 'Configure Development Tools',
195
+ description: `Add ${configActions.length} configuration file(s)`,
196
+ estimatedTime: '10-20 min',
197
+ optional: false
198
+ });
199
+ }
200
+ // Step 4: Organize structure
201
+ if (structureActions.length > 0) {
202
+ steps.push({
203
+ order: order++,
204
+ title: 'Improve Project Structure',
205
+ description: `Create ${structureActions.length} missing directories`,
206
+ estimatedTime: '5-10 min',
207
+ optional: true
208
+ });
209
+ }
210
+ // Step 5: Run initial checks
211
+ steps.push({
212
+ order: order++,
213
+ title: 'Verify Setup',
214
+ description: 'Run linting and tests to verify configuration',
215
+ command: packageManager === 'pnpm' ? 'pnpm lint && pnpm test' :
216
+ packageManager === 'yarn' ? 'yarn lint && yarn test' : 'npm run lint && npm test',
217
+ estimatedTime: '2-5 min',
218
+ optional: false
219
+ });
220
+ // Step 6: Commit changes
221
+ steps.push({
222
+ order: order++,
223
+ title: 'Commit Configuration',
224
+ description: 'Commit the new configuration to version control',
225
+ command: 'git add -A && git commit -m "chore: add project configuration"',
226
+ estimatedTime: '1 min',
227
+ optional: false
228
+ });
229
+ return steps;
230
+ }
231
+ /**
232
+ * Estimate effort to fix all issues
233
+ */
234
+ function estimateEffort(actions) {
235
+ const criticalCount = actions.filter(a => a.priority === 'critical').length;
236
+ const highCount = actions.filter(a => a.priority === 'high').length;
237
+ const totalCount = actions.length;
238
+ if (criticalCount > 2 || totalCount > 10)
239
+ return 'significant';
240
+ if (highCount > 3 || totalCount > 5)
241
+ return 'moderate';
242
+ return 'minimal';
243
+ }
244
+ /**
245
+ * Apply auto-fixable actions
246
+ */
247
+ export async function applyAutoFixes(report, onlyCategory) {
248
+ const applied = [];
249
+ const failed = [];
250
+ const actionsToApply = report.priorityActions.filter(a => {
251
+ if (!a.autoApplicable)
252
+ return false;
253
+ if (onlyCategory && a.category !== onlyCategory)
254
+ return false;
255
+ return true;
256
+ });
257
+ for (const action of actionsToApply) {
258
+ // For now, just report what would be applied
259
+ // Actual implementation would execute commands/write files
260
+ applied.push(action.title);
261
+ }
262
+ return { applied, failed };
263
+ }
264
+ /**
265
+ * Format intelligence report for display
266
+ */
267
+ export function formatIntelligenceReport(report) {
268
+ const lines = [];
269
+ // Header
270
+ lines.push('# 🧠 Project Intelligence Report');
271
+ lines.push('');
272
+ lines.push(`**Project:** ${report.projectPath}`);
273
+ lines.push(`**Type:** ${report.projectType} (${report.confidence} confidence)`);
274
+ lines.push(`**Generated:** ${new Date(report.timestamp).toLocaleString()}`);
275
+ lines.push('');
276
+ // Overall Score
277
+ const gradeEmoji = {
278
+ 'A': '🌟',
279
+ 'B': '✨',
280
+ 'C': '👍',
281
+ 'D': '⚠️',
282
+ 'F': '🚨'
283
+ };
284
+ lines.push(`## Overall Score: ${report.overallScore}/100 ${gradeEmoji[report.grade]} Grade ${report.grade}`);
285
+ lines.push('');
286
+ // Category breakdown
287
+ lines.push('### Category Scores');
288
+ lines.push(`- **Structure:** ${report.structure.structureScore}/100`);
289
+ lines.push(`- **Configuration:** ${report.configuration.configScore}/100`);
290
+ lines.push(`- **Dependencies:** ${report.dependencies.dependencyScore}/100`);
291
+ lines.push('');
292
+ // Priority Actions
293
+ if (report.priorityActions.length > 0) {
294
+ lines.push('## 🎯 Priority Actions');
295
+ lines.push('');
296
+ const criticalActions = report.priorityActions.filter(a => a.priority === 'critical');
297
+ const highActions = report.priorityActions.filter(a => a.priority === 'high');
298
+ if (criticalActions.length > 0) {
299
+ lines.push('### 🚨 Critical');
300
+ for (const action of criticalActions) {
301
+ lines.push(`- **${action.title}**: ${action.description}`);
302
+ if (action.command)
303
+ lines.push(` - \`${action.command}\``);
304
+ }
305
+ lines.push('');
306
+ }
307
+ if (highActions.length > 0) {
308
+ lines.push('### ⚡ High Priority');
309
+ for (const action of highActions.slice(0, 5)) {
310
+ lines.push(`- **${action.title}**: ${action.description}`);
311
+ if (action.command)
312
+ lines.push(` - \`${action.command}\``);
313
+ }
314
+ if (highActions.length > 5) {
315
+ lines.push(` - ...and ${highActions.length - 5} more`);
316
+ }
317
+ lines.push('');
318
+ }
319
+ }
320
+ // Suggested Workflow
321
+ if (report.suggestedWorkflow.length > 0) {
322
+ lines.push('## 📋 Suggested Workflow');
323
+ lines.push('');
324
+ for (const step of report.suggestedWorkflow) {
325
+ const optional = step.optional ? ' _(optional)_' : '';
326
+ lines.push(`${step.order}. **${step.title}**${optional}`);
327
+ lines.push(` ${step.description}`);
328
+ if (step.command)
329
+ lines.push(` \`${step.command}\``);
330
+ lines.push(` ⏱️ ${step.estimatedTime}`);
331
+ lines.push('');
332
+ }
333
+ }
334
+ // Estimated Effort
335
+ const effortEmoji = {
336
+ 'minimal': '✅',
337
+ 'moderate': '🔧',
338
+ 'significant': '🏗️'
339
+ };
340
+ lines.push(`## 📊 Estimated Effort: ${effortEmoji[report.estimatedEffort]} ${report.estimatedEffort.charAt(0).toUpperCase() + report.estimatedEffort.slice(1)}`);
341
+ return lines.join('\n');
342
+ }
343
+ export { analyzeStructure, analyzeConfigurations, analyzeDependencies, generateSmartConfig, applyConfigFix, generateInstallCommand };
344
+ //# sourceMappingURL=projectIntelligence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectIntelligence.js","sourceRoot":"","sources":["../../../src/services/intelligence/projectIntelligence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Project Structure Analyzer
3
+ * Analyzes project structure and suggests improvements
4
+ * @version 3.3.0
5
+ */
6
+ import type { StructureAnalysis } from './types.js';
7
+ /**
8
+ * Analyze project structure against framework template
9
+ */
10
+ export declare function analyzeStructure(projectPath: string, projectType: string): StructureAnalysis;
11
+ /**
12
+ * Scan directory recursively
13
+ */
14
+ declare function scanDirectory(dirPath: string, maxDepth: number, currentDepth?: number): {
15
+ dirs: string[];
16
+ files: string[];
17
+ };
18
+ /**
19
+ * Get directory purpose description
20
+ */
21
+ declare function getDirPurpose(dir: string, projectType: string): string;
22
+ /**
23
+ * Get file purpose description
24
+ */
25
+ declare function getFilePurpose(file: string): string;
26
+ export { scanDirectory, getDirPurpose, getFilePurpose };
27
+ //# sourceMappingURL=structureAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structureAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/services/intelligence/structureAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,iBAAiB,EAIlB,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,iBAAiB,CAoF5F;AAED;;GAEG;AACH,iBAAS,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,SAAI,GAAG;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAiC/G;AAwBD;;GAEG;AACH,iBAAS,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CA4C/D;AAED;;GAEG;AACH,iBAAS,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAqC5C;AAsFD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC"}