@stackguide/mcp-server 2.3.2 → 3.0.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/README.md +82 -16
- package/dist/config/healthWeights.d.ts +87 -0
- package/dist/config/healthWeights.d.ts.map +1 -0
- package/dist/config/healthWeights.js +238 -0
- package/dist/config/healthWeights.js.map +1 -0
- package/dist/config/types.d.ts +104 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/handlers/generate.d.ts +24 -0
- package/dist/handlers/generate.d.ts.map +1 -0
- package/dist/handlers/generate.js +845 -0
- package/dist/handlers/generate.js.map +1 -0
- package/dist/handlers/health.d.ts +19 -0
- package/dist/handlers/health.d.ts.map +1 -0
- package/dist/handlers/health.js +401 -0
- package/dist/handlers/health.js.map +1 -0
- package/dist/handlers/help.d.ts +1 -1
- package/dist/handlers/help.d.ts.map +1 -1
- package/dist/handlers/help.js +70 -10
- package/dist/handlers/help.js.map +1 -1
- package/dist/handlers/index.d.ts +2 -0
- package/dist/handlers/index.d.ts.map +1 -1
- package/dist/handlers/index.js +2 -0
- package/dist/handlers/index.js.map +1 -1
- package/dist/handlers/review.d.ts +12 -0
- package/dist/handlers/review.d.ts.map +1 -1
- package/dist/handlers/review.js +220 -21
- package/dist/handlers/review.js.map +1 -1
- package/dist/handlers/setup.d.ts +1 -0
- package/dist/handlers/setup.d.ts.map +1 -1
- package/dist/handlers/setup.js +102 -5
- package/dist/handlers/setup.js.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/services/analysisCache.d.ts +110 -0
- package/dist/services/analysisCache.d.ts.map +1 -0
- package/dist/services/analysisCache.js +233 -0
- package/dist/services/analysisCache.js.map +1 -0
- package/dist/services/codeAnalyzer.d.ts +73 -22
- package/dist/services/codeAnalyzer.d.ts.map +1 -1
- package/dist/services/codeAnalyzer.js +462 -44
- package/dist/services/codeAnalyzer.js.map +1 -1
- package/dist/services/conventionDetector.d.ts +40 -0
- package/dist/services/conventionDetector.d.ts.map +1 -0
- package/dist/services/conventionDetector.js +465 -0
- package/dist/services/conventionDetector.js.map +1 -0
- package/dist/services/cursorDirectory.d.ts +29 -2
- package/dist/services/cursorDirectory.d.ts.map +1 -1
- package/dist/services/cursorDirectory.js +260 -9
- package/dist/services/cursorDirectory.js.map +1 -1
- package/dist/tools/definitions.d.ts +125 -0
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +62 -1
- package/dist/tools/definitions.js.map +1 -1
- package/dist/utils/validation.d.ts +2 -2
- package/package.json +1 -1
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Review handler - code review against active rules
|
|
3
3
|
* Phase 3: Real code analysis with pattern matching
|
|
4
|
+
*
|
|
5
|
+
* Improvements:
|
|
6
|
+
* - Removed file limit (was 50, now unlimited)
|
|
7
|
+
* - Parallel file analysis with batching
|
|
8
|
+
* - Respects .gitignore patterns
|
|
9
|
+
* - Configurable scan depth (default 10)
|
|
10
|
+
* - Incremental mode using git diff
|
|
11
|
+
* - Analysis caching by file hash
|
|
4
12
|
*/
|
|
5
13
|
import { ServerState, ToolResponse } from './types.js';
|
|
6
14
|
interface ReviewArgs {
|
|
@@ -8,6 +16,10 @@ interface ReviewArgs {
|
|
|
8
16
|
url?: string;
|
|
9
17
|
project?: boolean;
|
|
10
18
|
focus?: 'all' | 'security' | 'performance' | 'architecture' | 'coding-standards';
|
|
19
|
+
incremental?: boolean;
|
|
20
|
+
maxDepth?: number;
|
|
21
|
+
maxFiles?: number;
|
|
22
|
+
useCache?: boolean;
|
|
11
23
|
}
|
|
12
24
|
export declare function handleReview(args: ReviewArgs, state: ServerState): Promise<ToolResponse>;
|
|
13
25
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/handlers/review.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/handlers/review.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,OAAO,EAAE,WAAW,EAAE,YAAY,EAA8B,MAAM,YAAY,CAAC;AAGnF,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,aAAa,GAAG,cAAc,GAAG,kBAAkB,CAAC;IACjF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAgJD,wBAAsB,YAAY,CAChC,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,YAAY,CAAC,CAuPvB"}
|
package/dist/handlers/review.js
CHANGED
|
@@ -1,17 +1,147 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Review handler - code review against active rules
|
|
3
3
|
* Phase 3: Real code analysis with pattern matching
|
|
4
|
+
*
|
|
5
|
+
* Improvements:
|
|
6
|
+
* - Removed file limit (was 50, now unlimited)
|
|
7
|
+
* - Parallel file analysis with batching
|
|
8
|
+
* - Respects .gitignore patterns
|
|
9
|
+
* - Configurable scan depth (default 10)
|
|
10
|
+
* - Incremental mode using git diff
|
|
11
|
+
* - Analysis caching by file hash
|
|
4
12
|
*/
|
|
5
13
|
import * as rulesProvider from '../resources/rulesProvider.js';
|
|
6
14
|
import * as knowledgeProvider from '../resources/knowledgeProvider.js';
|
|
7
15
|
import * as autoDetect from '../services/autoDetect.js';
|
|
8
|
-
import { analyzeCode,
|
|
16
|
+
import { analyzeCode, formatAnalysisReport } from '../services/codeAnalyzer.js';
|
|
17
|
+
import { AnalysisCacheManager } from '../services/analysisCache.js';
|
|
9
18
|
import { jsonResponse, textResponse } from './types.js';
|
|
10
19
|
import { logger } from '../utils/logger.js';
|
|
20
|
+
// Default ignore patterns (in addition to .gitignore)
|
|
21
|
+
const DEFAULT_IGNORE_PATTERNS = [
|
|
22
|
+
'node_modules',
|
|
23
|
+
'__pycache__',
|
|
24
|
+
'venv',
|
|
25
|
+
'.venv',
|
|
26
|
+
'dist',
|
|
27
|
+
'build',
|
|
28
|
+
'vendor',
|
|
29
|
+
'.git',
|
|
30
|
+
'.next',
|
|
31
|
+
'.nuxt',
|
|
32
|
+
'coverage',
|
|
33
|
+
'.cache',
|
|
34
|
+
'tmp',
|
|
35
|
+
'temp',
|
|
36
|
+
'.turbo',
|
|
37
|
+
'out',
|
|
38
|
+
'.output',
|
|
39
|
+
];
|
|
40
|
+
/**
|
|
41
|
+
* Parse .gitignore file and return patterns
|
|
42
|
+
*/
|
|
43
|
+
function parseGitignore(projectPath) {
|
|
44
|
+
const fs = require('fs');
|
|
45
|
+
const path = require('path');
|
|
46
|
+
const gitignorePath = path.join(projectPath, '.gitignore');
|
|
47
|
+
if (!fs.existsSync(gitignorePath)) {
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const content = fs.readFileSync(gitignorePath, 'utf-8');
|
|
52
|
+
return content
|
|
53
|
+
.split('\n')
|
|
54
|
+
.map((line) => line.trim())
|
|
55
|
+
.filter((line) => line && !line.startsWith('#'));
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Check if a path should be ignored
|
|
63
|
+
*/
|
|
64
|
+
function shouldIgnore(relativePath, ignorePatterns) {
|
|
65
|
+
const parts = relativePath.split('/');
|
|
66
|
+
for (const pattern of ignorePatterns) {
|
|
67
|
+
// Simple pattern matching
|
|
68
|
+
if (pattern.startsWith('/')) {
|
|
69
|
+
// Root-relative pattern
|
|
70
|
+
if (relativePath.startsWith(pattern.slice(1)))
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
else if (pattern.endsWith('/')) {
|
|
74
|
+
// Directory pattern
|
|
75
|
+
const dir = pattern.slice(0, -1);
|
|
76
|
+
if (parts.includes(dir))
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
else if (pattern.includes('*')) {
|
|
80
|
+
// Glob pattern (simple)
|
|
81
|
+
const regex = new RegExp('^' + pattern.replace(/\*/g, '.*') + '$');
|
|
82
|
+
if (parts.some(p => regex.test(p)))
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
// Simple name match
|
|
87
|
+
if (parts.includes(pattern))
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get list of changed files from git
|
|
95
|
+
*/
|
|
96
|
+
async function getChangedFiles(projectPath) {
|
|
97
|
+
const { exec } = require('child_process');
|
|
98
|
+
const { promisify } = require('util');
|
|
99
|
+
const execAsync = promisify(exec);
|
|
100
|
+
try {
|
|
101
|
+
// Get both staged and unstaged changes
|
|
102
|
+
const { stdout } = await execAsync('git diff --name-only HEAD && git diff --name-only --cached', { cwd: projectPath });
|
|
103
|
+
return [...new Set(stdout.trim().split('\n').filter(Boolean))];
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
logger.debug('Git not available or not a git repository');
|
|
107
|
+
return [];
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Analyze files in parallel batches
|
|
112
|
+
*/
|
|
113
|
+
async function analyzeFilesParallel(files, focus, cacheManager, batchSize = 10) {
|
|
114
|
+
const results = [];
|
|
115
|
+
let cacheHits = 0;
|
|
116
|
+
let cacheMisses = 0;
|
|
117
|
+
for (let i = 0; i < files.length; i += batchSize) {
|
|
118
|
+
const batch = files.slice(i, i + batchSize);
|
|
119
|
+
const batchResults = await Promise.all(batch.map(async (file) => {
|
|
120
|
+
// Check cache first
|
|
121
|
+
if (cacheManager) {
|
|
122
|
+
const cached = cacheManager.get(file.path, file.content);
|
|
123
|
+
if (cached) {
|
|
124
|
+
cacheHits++;
|
|
125
|
+
return cached;
|
|
126
|
+
}
|
|
127
|
+
cacheMisses++;
|
|
128
|
+
}
|
|
129
|
+
// Analyze file
|
|
130
|
+
const result = analyzeCode(file.path, file.content, focus);
|
|
131
|
+
// Store in cache
|
|
132
|
+
if (cacheManager) {
|
|
133
|
+
cacheManager.set(file.path, file.content, result);
|
|
134
|
+
}
|
|
135
|
+
return result;
|
|
136
|
+
}));
|
|
137
|
+
results.push(...batchResults);
|
|
138
|
+
}
|
|
139
|
+
return { files: results, cacheHits, cacheMisses };
|
|
140
|
+
}
|
|
11
141
|
export async function handleReview(args, state) {
|
|
12
|
-
const { file, url, project: reviewProject, focus = 'all' } = args;
|
|
142
|
+
const { file, url, project: reviewProject, focus = 'all', incremental = false, maxDepth = 10, maxFiles, useCache = true } = args;
|
|
13
143
|
const focusValue = focus;
|
|
14
|
-
logger.debug('Review requested', { file, url, reviewProject, focus });
|
|
144
|
+
logger.debug('Review requested', { file, url, reviewProject, focus, incremental, maxDepth });
|
|
15
145
|
// Auto-detect if not configured
|
|
16
146
|
if (!state.activeProjectType) {
|
|
17
147
|
const detection = autoDetect.detectProjectType(process.cwd());
|
|
@@ -28,28 +158,66 @@ export async function handleReview(args, state) {
|
|
|
28
158
|
const fs = await import('fs');
|
|
29
159
|
const path = await import('path');
|
|
30
160
|
const projectPath = process.cwd();
|
|
161
|
+
// Initialize cache if enabled
|
|
162
|
+
const cacheManager = useCache ? new AnalysisCacheManager(projectPath) : null;
|
|
163
|
+
// Parse .gitignore patterns
|
|
164
|
+
const gitignorePatterns = parseGitignore(projectPath);
|
|
165
|
+
const allIgnorePatterns = [...DEFAULT_IGNORE_PATTERNS, ...gitignorePatterns];
|
|
166
|
+
// Get changed files if incremental mode
|
|
167
|
+
let changedFiles = null;
|
|
168
|
+
if (incremental) {
|
|
169
|
+
changedFiles = await getChangedFiles(projectPath);
|
|
170
|
+
if (changedFiles.length === 0) {
|
|
171
|
+
return jsonResponse({
|
|
172
|
+
type: 'project-review',
|
|
173
|
+
projectType: state.activeProjectType,
|
|
174
|
+
focus: focusValue,
|
|
175
|
+
message: 'No changed files found. Run without incremental:true to analyze all files.',
|
|
176
|
+
filesAnalyzed: 0
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
logger.debug('Incremental mode: analyzing changed files', { count: changedFiles.length });
|
|
180
|
+
}
|
|
31
181
|
const filesToAnalyze = [];
|
|
32
182
|
const exts = ['.ts', '.tsx', '.js', '.jsx', '.py', '.go', '.rs', '.rb', '.php'];
|
|
183
|
+
let skippedByIgnore = 0;
|
|
184
|
+
let skippedBySize = 0;
|
|
33
185
|
function scan(dir, depth = 0) {
|
|
34
|
-
if (depth >
|
|
186
|
+
if (depth > maxDepth)
|
|
187
|
+
return;
|
|
188
|
+
if (maxFiles && filesToAnalyze.length >= maxFiles)
|
|
35
189
|
return;
|
|
36
190
|
try {
|
|
37
191
|
const items = fs.readdirSync(dir);
|
|
38
192
|
for (const item of items) {
|
|
39
|
-
if (
|
|
193
|
+
if (maxFiles && filesToAnalyze.length >= maxFiles)
|
|
194
|
+
return;
|
|
195
|
+
if (item.startsWith('.'))
|
|
40
196
|
continue;
|
|
41
197
|
const full = path.join(dir, item);
|
|
198
|
+
const relativePath = path.relative(projectPath, full);
|
|
199
|
+
// Check ignore patterns
|
|
200
|
+
if (shouldIgnore(relativePath, allIgnorePatterns)) {
|
|
201
|
+
skippedByIgnore++;
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
42
204
|
const stat = fs.statSync(full);
|
|
43
205
|
if (stat.isDirectory()) {
|
|
44
206
|
scan(full, depth + 1);
|
|
45
207
|
}
|
|
46
|
-
else if (exts.some(e => item.endsWith(e))
|
|
208
|
+
else if (exts.some(e => item.endsWith(e))) {
|
|
209
|
+
// Check file size (skip files > 100KB)
|
|
210
|
+
if (stat.size > 100000) {
|
|
211
|
+
skippedBySize++;
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
// In incremental mode, only analyze changed files
|
|
215
|
+
if (changedFiles && !changedFiles.includes(relativePath)) {
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
47
218
|
try {
|
|
48
219
|
const content = fs.readFileSync(full, 'utf-8');
|
|
49
|
-
filesToAnalyze.push({
|
|
50
|
-
path: path.relative(projectPath, full),
|
|
51
|
-
content
|
|
52
|
-
});
|
|
220
|
+
filesToAnalyze.push({ path: relativePath, content });
|
|
53
221
|
}
|
|
54
222
|
catch { /* ignore unreadable files */ }
|
|
55
223
|
}
|
|
@@ -58,26 +226,54 @@ export async function handleReview(args, state) {
|
|
|
58
226
|
catch { /* ignore */ }
|
|
59
227
|
}
|
|
60
228
|
scan(projectPath);
|
|
61
|
-
//
|
|
62
|
-
const
|
|
63
|
-
const
|
|
229
|
+
// Analyze files in parallel with caching
|
|
230
|
+
const startTime = Date.now();
|
|
231
|
+
const { files: analysisResults, cacheHits, cacheMisses } = await analyzeFilesParallel(filesToAnalyze, focusValue, cacheManager);
|
|
232
|
+
// Save cache
|
|
233
|
+
if (cacheManager) {
|
|
234
|
+
cacheManager.save();
|
|
235
|
+
}
|
|
236
|
+
const analysisTime = Date.now() - startTime;
|
|
237
|
+
// Aggregate results
|
|
238
|
+
const overall = {
|
|
239
|
+
totalFiles: analysisResults.length,
|
|
240
|
+
averageScore: analysisResults.length > 0
|
|
241
|
+
? Math.round(analysisResults.reduce((sum, r) => sum + r.score, 0) / analysisResults.length)
|
|
242
|
+
: 100,
|
|
243
|
+
summary: {
|
|
244
|
+
errors: analysisResults.reduce((sum, r) => sum + r.summary.errors, 0),
|
|
245
|
+
warnings: analysisResults.reduce((sum, r) => sum + r.summary.warnings, 0),
|
|
246
|
+
info: analysisResults.reduce((sum, r) => sum + r.summary.info, 0),
|
|
247
|
+
suggestions: analysisResults.reduce((sum, r) => sum + r.summary.suggestions, 0),
|
|
248
|
+
}
|
|
249
|
+
};
|
|
64
250
|
// Format report
|
|
65
251
|
const report = [];
|
|
66
252
|
report.push(`# Project Review Report`);
|
|
67
253
|
report.push(`**Project Type:** ${state.activeProjectType || 'auto-detected'}`);
|
|
68
254
|
report.push(`**Focus:** ${focusValue}`);
|
|
69
|
-
report.push(`**Files Analyzed:** ${
|
|
255
|
+
report.push(`**Files Analyzed:** ${overall.totalFiles}`);
|
|
256
|
+
if (incremental) {
|
|
257
|
+
report.push(`**Mode:** Incremental (changed files only)`);
|
|
258
|
+
}
|
|
259
|
+
report.push(`**Analysis Time:** ${analysisTime}ms`);
|
|
260
|
+
if (useCache) {
|
|
261
|
+
report.push(`**Cache:** ${cacheHits} hits, ${cacheMisses} misses`);
|
|
262
|
+
}
|
|
263
|
+
if (skippedByIgnore > 0 || skippedBySize > 0) {
|
|
264
|
+
report.push(`**Skipped:** ${skippedByIgnore} by ignore patterns, ${skippedBySize} by size limit`);
|
|
265
|
+
}
|
|
70
266
|
report.push('');
|
|
71
|
-
report.push(`## Overall Score: ${
|
|
267
|
+
report.push(`## Overall Score: ${overall.averageScore}/100`);
|
|
72
268
|
report.push('');
|
|
73
269
|
report.push('### Summary');
|
|
74
|
-
report.push(`- 🔴 Errors: ${
|
|
75
|
-
report.push(`- 🟡 Warnings: ${
|
|
76
|
-
report.push(`- 🔵 Info: ${
|
|
77
|
-
report.push(`- 💡 Suggestions: ${
|
|
270
|
+
report.push(`- 🔴 Errors: ${overall.summary.errors}`);
|
|
271
|
+
report.push(`- 🟡 Warnings: ${overall.summary.warnings}`);
|
|
272
|
+
report.push(`- 🔵 Info: ${overall.summary.info}`);
|
|
273
|
+
report.push(`- 💡 Suggestions: ${overall.summary.suggestions}`);
|
|
78
274
|
report.push('');
|
|
79
275
|
// Top issues by file (only files with issues)
|
|
80
|
-
const filesWithIssues =
|
|
276
|
+
const filesWithIssues = analysisResults
|
|
81
277
|
.filter(f => f.issues.length > 0)
|
|
82
278
|
.sort((a, b) => b.issues.length - a.issues.length)
|
|
83
279
|
.slice(0, 10);
|
|
@@ -106,8 +302,11 @@ export async function handleReview(args, state) {
|
|
|
106
302
|
type: 'project-review',
|
|
107
303
|
projectType: state.activeProjectType,
|
|
108
304
|
focus: focusValue,
|
|
109
|
-
analysis:
|
|
305
|
+
analysis: overall,
|
|
110
306
|
filesWithIssues: filesWithIssues.length,
|
|
307
|
+
analysisTime: `${analysisTime}ms`,
|
|
308
|
+
cache: useCache ? { hits: cacheHits, misses: cacheMisses } : undefined,
|
|
309
|
+
incremental,
|
|
111
310
|
report: report.join('\n')
|
|
112
311
|
});
|
|
113
312
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/handlers/review.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/handlers/review.ts"],"names":[],"mappings":"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"}
|
package/dist/handlers/setup.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Setup handler - configures StackGuide for a project
|
|
3
|
+
* Includes interactive wizard with recommendations
|
|
3
4
|
*/
|
|
4
5
|
import { ServerState, ToolResponse } from './types.js';
|
|
5
6
|
export declare function handleSetup(args: unknown, state: ServerState): Promise<ToolResponse>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/handlers/setup.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/handlers/setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,WAAW,EAAE,YAAY,EAA+B,MAAM,YAAY,CAAC;AAmEpF,wBAAsB,WAAW,CAC/B,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,YAAY,CAAC,CAgIvB"}
|
package/dist/handlers/setup.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Setup handler - configures StackGuide for a project
|
|
3
|
+
* Includes interactive wizard with recommendations
|
|
3
4
|
*/
|
|
4
5
|
import { SUPPORTED_PROJECTS } from '../config/types.js';
|
|
5
6
|
import * as rulesProvider from '../resources/rulesProvider.js';
|
|
@@ -8,6 +9,62 @@ import * as autoDetect from '../services/autoDetect.js';
|
|
|
8
9
|
import { jsonResponse, errorResponse } from './types.js';
|
|
9
10
|
import { logger } from '../utils/logger.js';
|
|
10
11
|
import { SetupInputSchema, validate } from '../utils/validation.js';
|
|
12
|
+
// Recommendations based on project type
|
|
13
|
+
const PROJECT_RECOMMENDATIONS = {
|
|
14
|
+
'react-typescript': {
|
|
15
|
+
tools: ['ESLint', 'Prettier', 'TypeScript strict mode'],
|
|
16
|
+
extensions: ['ES7+ React/Redux/React-Native snippets', 'Auto Import', 'Error Lens'],
|
|
17
|
+
commands: ['review focus:"performance"', 'generate type:"component" name:"MyComponent"'],
|
|
18
|
+
tips: [
|
|
19
|
+
'Use functional components with hooks',
|
|
20
|
+
'Memoize expensive computations with useMemo',
|
|
21
|
+
'Keep components small and focused'
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
'nextjs': {
|
|
25
|
+
tools: ['ESLint Next.js config', 'Prettier', 'TypeScript'],
|
|
26
|
+
extensions: ['Next.js snippets', 'Tailwind CSS IntelliSense'],
|
|
27
|
+
commands: ['review focus:"performance"', 'docs url:"https://nextjs.org/docs"'],
|
|
28
|
+
tips: [
|
|
29
|
+
'Use Server Components by default',
|
|
30
|
+
'Leverage ISR for dynamic content',
|
|
31
|
+
'Optimize images with next/image'
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
'node-typescript': {
|
|
35
|
+
tools: ['ESLint', 'Prettier', 'ts-node-dev'],
|
|
36
|
+
extensions: ['REST Client', 'Thunder Client', 'Error Lens'],
|
|
37
|
+
commands: ['review focus:"security"', 'generate type:"api" name:"Users"'],
|
|
38
|
+
tips: [
|
|
39
|
+
'Use dependency injection for testability',
|
|
40
|
+
'Validate all inputs with Zod',
|
|
41
|
+
'Structure with clean architecture'
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
'python': {
|
|
45
|
+
tools: ['Black', 'Ruff', 'mypy'],
|
|
46
|
+
extensions: ['Pylance', 'Python Debugger', 'autoDocstring'],
|
|
47
|
+
commands: ['review focus:"security"', 'generate type:"test" name:"api_tests"'],
|
|
48
|
+
tips: [
|
|
49
|
+
'Use type hints everywhere',
|
|
50
|
+
'Follow PEP 8 conventions',
|
|
51
|
+
'Use virtual environments'
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
'default': {
|
|
55
|
+
tools: ['ESLint/appropriate linter', 'Prettier/formatter'],
|
|
56
|
+
extensions: ['Error Lens', 'GitLens'],
|
|
57
|
+
commands: ['review', 'context', 'health'],
|
|
58
|
+
tips: [
|
|
59
|
+
'Run review regularly',
|
|
60
|
+
'Keep dependencies updated',
|
|
61
|
+
'Write tests for critical paths'
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
function getRecommendations(projectType) {
|
|
66
|
+
return PROJECT_RECOMMENDATIONS[projectType] || PROJECT_RECOMMENDATIONS['default'];
|
|
67
|
+
}
|
|
11
68
|
export async function handleSetup(args, state) {
|
|
12
69
|
const startTime = Date.now();
|
|
13
70
|
// Validate input
|
|
@@ -34,6 +91,7 @@ export async function handleSetup(args, state) {
|
|
|
34
91
|
createdAt: new Date().toISOString(),
|
|
35
92
|
updatedAt: new Date().toISOString()
|
|
36
93
|
};
|
|
94
|
+
const recommendations = getRecommendations(projectType);
|
|
37
95
|
logger.tool('setup', args, startTime);
|
|
38
96
|
return jsonResponse({
|
|
39
97
|
success: true,
|
|
@@ -41,7 +99,20 @@ export async function handleSetup(args, state) {
|
|
|
41
99
|
projectType,
|
|
42
100
|
rulesLoaded: state.loadedRules.length,
|
|
43
101
|
knowledgeLoaded: state.loadedKnowledge.length,
|
|
44
|
-
|
|
102
|
+
wizard: {
|
|
103
|
+
step: '1/3 - Setup Complete ✓',
|
|
104
|
+
recommendations: {
|
|
105
|
+
suggestedTools: recommendations.tools,
|
|
106
|
+
vsCodeExtensions: recommendations.extensions,
|
|
107
|
+
tips: recommendations.tips
|
|
108
|
+
},
|
|
109
|
+
nextSteps: [
|
|
110
|
+
`📋 Run \`context\` to see ${state.loadedRules.length} loaded rules`,
|
|
111
|
+
`🔍 Run \`review\` to analyze your code`,
|
|
112
|
+
`🏥 Run \`health\` to check project health`,
|
|
113
|
+
...recommendations.commands.map(cmd => `💡 Try: \`${cmd}\``)
|
|
114
|
+
]
|
|
115
|
+
}
|
|
45
116
|
});
|
|
46
117
|
}
|
|
47
118
|
// Auto-detect project type
|
|
@@ -50,9 +121,19 @@ export async function handleSetup(args, state) {
|
|
|
50
121
|
logger.warn('Auto-detection failed', { path: resolvedPath });
|
|
51
122
|
return jsonResponse({
|
|
52
123
|
success: false,
|
|
53
|
-
message: 'Could not auto-detect project type',
|
|
54
|
-
|
|
55
|
-
|
|
124
|
+
message: '🔍 Could not auto-detect project type',
|
|
125
|
+
wizard: {
|
|
126
|
+
step: '1/3 - Detection',
|
|
127
|
+
status: 'needs_input',
|
|
128
|
+
question: 'What type of project is this?',
|
|
129
|
+
options: Object.entries(SUPPORTED_PROJECTS).map(([key, val]) => ({
|
|
130
|
+
value: key,
|
|
131
|
+
label: val.name,
|
|
132
|
+
description: val.description
|
|
133
|
+
})),
|
|
134
|
+
hint: 'Use: setup type:"react-typescript"',
|
|
135
|
+
availableTypes: Object.keys(SUPPORTED_PROJECTS)
|
|
136
|
+
}
|
|
56
137
|
});
|
|
57
138
|
}
|
|
58
139
|
const detectedType = detection.projectType;
|
|
@@ -70,6 +151,7 @@ export async function handleSetup(args, state) {
|
|
|
70
151
|
createdAt: new Date().toISOString(),
|
|
71
152
|
updatedAt: new Date().toISOString()
|
|
72
153
|
};
|
|
154
|
+
const recommendations = getRecommendations(detectedType);
|
|
73
155
|
logger.tool('setup', { path: projectPath, type: projectType, detected: detectedType }, startTime);
|
|
74
156
|
return jsonResponse({
|
|
75
157
|
success: true,
|
|
@@ -82,7 +164,22 @@ export async function handleSetup(args, state) {
|
|
|
82
164
|
},
|
|
83
165
|
rulesLoaded: state.loadedRules.length,
|
|
84
166
|
knowledgeLoaded: state.loadedKnowledge.length,
|
|
85
|
-
|
|
167
|
+
wizard: {
|
|
168
|
+
step: '1/3 - Setup Complete ✓',
|
|
169
|
+
detectedAs: project.name,
|
|
170
|
+
confidenceLevel: detection.confidence === 'high' ? 'High' : detection.confidence === 'medium' ? 'Medium' : 'Low',
|
|
171
|
+
recommendations: {
|
|
172
|
+
suggestedTools: recommendations.tools,
|
|
173
|
+
vsCodeExtensions: recommendations.extensions,
|
|
174
|
+
tips: recommendations.tips
|
|
175
|
+
},
|
|
176
|
+
nextSteps: [
|
|
177
|
+
`📋 Run \`context\` to see ${state.loadedRules.length} loaded rules`,
|
|
178
|
+
`🔍 Run \`review\` to analyze your code`,
|
|
179
|
+
`🏥 Run \`health\` to check project health`,
|
|
180
|
+
...recommendations.commands.map(cmd => `💡 Try: \`${cmd}\``)
|
|
181
|
+
]
|
|
182
|
+
}
|
|
86
183
|
});
|
|
87
184
|
}
|
|
88
185
|
//# sourceMappingURL=setup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/handlers/setup.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/handlers/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -24,7 +24,7 @@ import * as ruleManager from './services/ruleManager.js';
|
|
|
24
24
|
import * as webDocs from './services/webDocumentation.js';
|
|
25
25
|
import * as autoDetect from './services/autoDetect.js';
|
|
26
26
|
import { toolDefinitions } from './tools/definitions.js';
|
|
27
|
-
import { handleSetup, handleContext, handleRules, handleKnowledge, handleReview, handleCursor, handleDocs, handleConfig, handleCustomRule, handleHelp, textResponse } from './handlers/index.js';
|
|
27
|
+
import { handleSetup, handleContext, handleRules, handleKnowledge, handleReview, handleCursor, handleDocs, handleConfig, handleCustomRule, handleHelp, handleGenerate, handleHealth, textResponse } from './handlers/index.js';
|
|
28
28
|
import { logger } from './utils/logger.js';
|
|
29
29
|
// ==================== SERVER STATE ====================
|
|
30
30
|
const serverState = {
|
|
@@ -36,7 +36,7 @@ const serverState = {
|
|
|
36
36
|
// ==================== CREATE SERVER ====================
|
|
37
37
|
const server = new Server({
|
|
38
38
|
name: 'stackguide-mcp',
|
|
39
|
-
version: '2.
|
|
39
|
+
version: '2.4.0',
|
|
40
40
|
}, {
|
|
41
41
|
capabilities: {
|
|
42
42
|
tools: {},
|
|
@@ -74,6 +74,10 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
74
74
|
return await handleCustomRule(args, serverState);
|
|
75
75
|
case 'help':
|
|
76
76
|
return await handleHelp(args);
|
|
77
|
+
case 'generate':
|
|
78
|
+
return await handleGenerate(args, serverState);
|
|
79
|
+
case 'health':
|
|
80
|
+
return await handleHealth(args, serverState);
|
|
77
81
|
default:
|
|
78
82
|
logger.warn(`Unknown tool: ${name}`);
|
|
79
83
|
return textResponse(`Unknown tool: ${name}`);
|