@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/handlers/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Health handler - Project Health Score Analysis
|
|
3
|
+
* Phase 6: Advanced Features
|
|
4
|
+
*
|
|
5
|
+
* Improvements:
|
|
6
|
+
* - Configurable weights via stackguide.config.json
|
|
7
|
+
* - Historical tracking of health scores
|
|
8
|
+
* - Project-specific benchmarking
|
|
9
|
+
*/
|
|
10
|
+
import { ServerState, ToolResponse } from './types.js';
|
|
11
|
+
interface HealthArgs {
|
|
12
|
+
projectPath?: string;
|
|
13
|
+
detailed?: boolean;
|
|
14
|
+
showWeights?: boolean;
|
|
15
|
+
saveHistory?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function handleHealth(args: HealthArgs, state: ServerState): Promise<ToolResponse>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/handlers/health.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAgB,MAAM,YAAY,CAAC;AAWrE,UAAU,UAAU;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAkUD,wBAAsB,YAAY,CAChC,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,YAAY,CAAC,CA+GvB"}
|
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Health handler - Project Health Score Analysis
|
|
3
|
+
* Phase 6: Advanced Features
|
|
4
|
+
*
|
|
5
|
+
* Improvements:
|
|
6
|
+
* - Configurable weights via stackguide.config.json
|
|
7
|
+
* - Historical tracking of health scores
|
|
8
|
+
* - Project-specific benchmarking
|
|
9
|
+
*/
|
|
10
|
+
import * as fs from 'fs';
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
import { jsonResponse } from './types.js';
|
|
13
|
+
import { logger } from '../utils/logger.js';
|
|
14
|
+
import { analyzeCode } from '../services/codeAnalyzer.js';
|
|
15
|
+
import { getHealthWeights, getGradeFromScore, calculateIssueDeduction, getWeightsDocumentation } from '../config/healthWeights.js';
|
|
16
|
+
const HISTORY_FILE = '.stackguide/health-history.json';
|
|
17
|
+
const MAX_HISTORY_ENTRIES = 100;
|
|
18
|
+
function getGradeEmoji(grade) {
|
|
19
|
+
const emojis = {
|
|
20
|
+
A: '🌟',
|
|
21
|
+
B: '✅',
|
|
22
|
+
C: '⚠️',
|
|
23
|
+
D: '🔶',
|
|
24
|
+
F: '❌',
|
|
25
|
+
};
|
|
26
|
+
return emojis[grade] || '❓';
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Load health history from disk
|
|
30
|
+
*/
|
|
31
|
+
function loadHealthHistory(projectPath) {
|
|
32
|
+
const historyPath = path.join(projectPath, HISTORY_FILE);
|
|
33
|
+
try {
|
|
34
|
+
if (fs.existsSync(historyPath)) {
|
|
35
|
+
const content = fs.readFileSync(historyPath, 'utf-8');
|
|
36
|
+
return JSON.parse(content);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
logger.debug('Failed to load health history', { error });
|
|
41
|
+
}
|
|
42
|
+
return { projectPath, entries: [] };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Save health history to disk
|
|
46
|
+
*/
|
|
47
|
+
function saveHealthHistory(projectPath, history) {
|
|
48
|
+
const historyPath = path.join(projectPath, HISTORY_FILE);
|
|
49
|
+
const historyDir = path.dirname(historyPath);
|
|
50
|
+
try {
|
|
51
|
+
if (!fs.existsSync(historyDir)) {
|
|
52
|
+
fs.mkdirSync(historyDir, { recursive: true });
|
|
53
|
+
}
|
|
54
|
+
// Limit history entries
|
|
55
|
+
if (history.entries.length > MAX_HISTORY_ENTRIES) {
|
|
56
|
+
history.entries = history.entries.slice(-MAX_HISTORY_ENTRIES);
|
|
57
|
+
}
|
|
58
|
+
fs.writeFileSync(historyPath, JSON.stringify(history, null, 2));
|
|
59
|
+
logger.debug('Saved health history');
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
logger.debug('Failed to save health history', { error });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Add entry to health history
|
|
67
|
+
*/
|
|
68
|
+
function addHistoryEntry(projectPath, score, grade, categories) {
|
|
69
|
+
const history = loadHealthHistory(projectPath);
|
|
70
|
+
history.entries.push({
|
|
71
|
+
timestamp: new Date().toISOString(),
|
|
72
|
+
score,
|
|
73
|
+
grade,
|
|
74
|
+
categories: Object.fromEntries(categories.map(c => [c.name, c.score]))
|
|
75
|
+
});
|
|
76
|
+
saveHealthHistory(projectPath, history);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get health trend from history
|
|
80
|
+
*/
|
|
81
|
+
function getHealthTrend(projectPath) {
|
|
82
|
+
const history = loadHealthHistory(projectPath);
|
|
83
|
+
if (history.entries.length < 2) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
const recent = history.entries.slice(-5);
|
|
87
|
+
const oldest = recent[0].score;
|
|
88
|
+
const newest = recent[recent.length - 1].score;
|
|
89
|
+
const change = newest - oldest;
|
|
90
|
+
if (change > 5)
|
|
91
|
+
return { trend: 'improving', change };
|
|
92
|
+
if (change < -5)
|
|
93
|
+
return { trend: 'declining', change };
|
|
94
|
+
return { trend: 'stable', change };
|
|
95
|
+
}
|
|
96
|
+
// Analyze configuration quality
|
|
97
|
+
function analyzeConfiguration(state, weights) {
|
|
98
|
+
const issues = [];
|
|
99
|
+
const suggestions = [];
|
|
100
|
+
const maxScore = weights.categories.configuration.maxScore;
|
|
101
|
+
let score = maxScore;
|
|
102
|
+
const hasConfig = !!state.activeProjectType;
|
|
103
|
+
const hasRules = state.loadedRules.length > 0;
|
|
104
|
+
const hasKnowledge = state.loadedKnowledge.length > 0;
|
|
105
|
+
if (!hasConfig) {
|
|
106
|
+
issues.push('No project type configured');
|
|
107
|
+
suggestions.push('Run setup to configure your project type');
|
|
108
|
+
score -= maxScore * 0.25;
|
|
109
|
+
}
|
|
110
|
+
if (!hasRules) {
|
|
111
|
+
issues.push('No rules loaded');
|
|
112
|
+
suggestions.push('Run setup to load rules for your project');
|
|
113
|
+
score -= maxScore * 0.25;
|
|
114
|
+
}
|
|
115
|
+
if (!hasKnowledge) {
|
|
116
|
+
issues.push('No knowledge base loaded');
|
|
117
|
+
suggestions.push('Run setup to load knowledge base');
|
|
118
|
+
score -= maxScore * 0.25;
|
|
119
|
+
}
|
|
120
|
+
if (state.activeConfiguration?.customRules?.length === 0) {
|
|
121
|
+
suggestions.push('Consider adding custom rules for your project');
|
|
122
|
+
score -= maxScore * 0.1;
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
name: weights.categories.configuration.name,
|
|
126
|
+
score: Math.max(0, Math.round(score)),
|
|
127
|
+
maxScore,
|
|
128
|
+
issues,
|
|
129
|
+
suggestions,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
// Analyze code quality based on review results
|
|
133
|
+
function analyzeCodeQuality(analysisResult, weights) {
|
|
134
|
+
const issues = [];
|
|
135
|
+
const suggestions = [];
|
|
136
|
+
const maxScore = weights.categories.codeQuality.maxScore;
|
|
137
|
+
let score = maxScore;
|
|
138
|
+
if (!analysisResult) {
|
|
139
|
+
return {
|
|
140
|
+
name: weights.categories.codeQuality.name,
|
|
141
|
+
score: Math.round(maxScore * 0.5),
|
|
142
|
+
maxScore,
|
|
143
|
+
issues: ['No code analysis performed'],
|
|
144
|
+
suggestions: ['Run review tool to analyze code'],
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
// Deduct points based on issues using configurable weights
|
|
148
|
+
const criticalCount = analysisResult.issues.filter(i => i.severity === 'error').length;
|
|
149
|
+
const warningCount = analysisResult.issues.filter(i => i.severity === 'warning').length;
|
|
150
|
+
const infoCount = analysisResult.issues.filter(i => i.severity === 'info').length;
|
|
151
|
+
score -= calculateIssueDeduction('error', criticalCount, weights);
|
|
152
|
+
score -= calculateIssueDeduction('warning', warningCount, weights);
|
|
153
|
+
score -= calculateIssueDeduction('info', infoCount, weights);
|
|
154
|
+
if (criticalCount > 0) {
|
|
155
|
+
issues.push(`${criticalCount} critical issue(s) found`);
|
|
156
|
+
}
|
|
157
|
+
if (warningCount > 0) {
|
|
158
|
+
issues.push(`${warningCount} warning(s) found`);
|
|
159
|
+
}
|
|
160
|
+
// Add specific suggestions based on patterns
|
|
161
|
+
const categories = new Set(analysisResult.issues.map(i => i.category));
|
|
162
|
+
if (categories.has('security')) {
|
|
163
|
+
suggestions.push('Address security vulnerabilities immediately');
|
|
164
|
+
}
|
|
165
|
+
if (categories.has('performance')) {
|
|
166
|
+
suggestions.push('Review performance optimizations');
|
|
167
|
+
}
|
|
168
|
+
if (categories.has('maintainability')) {
|
|
169
|
+
suggestions.push('Refactor for better maintainability');
|
|
170
|
+
}
|
|
171
|
+
if (categories.has('best-practice')) {
|
|
172
|
+
suggestions.push('Follow framework best practices');
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
name: weights.categories.codeQuality.name,
|
|
176
|
+
score: Math.max(0, Math.min(maxScore, Math.round(score))),
|
|
177
|
+
maxScore,
|
|
178
|
+
issues,
|
|
179
|
+
suggestions,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
// Analyze structure
|
|
183
|
+
function analyzeStructure(state, weights) {
|
|
184
|
+
const issues = [];
|
|
185
|
+
const suggestions = [];
|
|
186
|
+
const maxScore = weights.categories.structure.maxScore;
|
|
187
|
+
let score = maxScore;
|
|
188
|
+
// Check if project type is detected
|
|
189
|
+
if (!state.activeProjectType) {
|
|
190
|
+
issues.push('Project structure not analyzed');
|
|
191
|
+
suggestions.push('Run setup to detect project structure');
|
|
192
|
+
score -= maxScore * 0.5;
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
// Project type detected - good structure
|
|
196
|
+
if (state.loadedRules.length < 3) {
|
|
197
|
+
suggestions.push('Load more rules for comprehensive guidance');
|
|
198
|
+
score -= maxScore * 0.25;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
name: weights.categories.structure.name,
|
|
203
|
+
score: Math.max(0, Math.round(score)),
|
|
204
|
+
maxScore,
|
|
205
|
+
issues,
|
|
206
|
+
suggestions,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
// Analyze documentation
|
|
210
|
+
function analyzeDocumentation(state, weights) {
|
|
211
|
+
const issues = [];
|
|
212
|
+
const suggestions = [];
|
|
213
|
+
const maxScore = weights.categories.documentation.maxScore;
|
|
214
|
+
let score = maxScore;
|
|
215
|
+
if (state.loadedKnowledge.length === 0) {
|
|
216
|
+
issues.push('No knowledge/documentation loaded');
|
|
217
|
+
score -= maxScore * 0.33;
|
|
218
|
+
}
|
|
219
|
+
if (!state.activeProjectType) {
|
|
220
|
+
suggestions.push('Configure project type for tailored documentation');
|
|
221
|
+
score -= maxScore * 0.2;
|
|
222
|
+
}
|
|
223
|
+
return {
|
|
224
|
+
name: weights.categories.documentation.name,
|
|
225
|
+
score: Math.max(0, Math.round(score)),
|
|
226
|
+
maxScore,
|
|
227
|
+
issues,
|
|
228
|
+
suggestions,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
// Analyze testing readiness
|
|
232
|
+
function analyzeTestingReadiness(state, weights) {
|
|
233
|
+
const issues = [];
|
|
234
|
+
const suggestions = [];
|
|
235
|
+
const maxScore = weights.categories.testing.maxScore;
|
|
236
|
+
let score = maxScore;
|
|
237
|
+
// Check if project has testing setup (inferred from project type)
|
|
238
|
+
const hasTestingSupport = state.activeProjectType?.includes('typescript') ||
|
|
239
|
+
state.activeProjectType?.includes('react') ||
|
|
240
|
+
state.activeProjectType?.includes('node');
|
|
241
|
+
if (!hasTestingSupport) {
|
|
242
|
+
suggestions.push('Consider adding a testing framework');
|
|
243
|
+
score -= maxScore * 0.33;
|
|
244
|
+
}
|
|
245
|
+
// Check if any loaded rules mention testing
|
|
246
|
+
const hasTestingRules = state.loadedRules.some(r => r.content?.toLowerCase().includes('test') || r.name?.toLowerCase().includes('test'));
|
|
247
|
+
if (!hasTestingRules) {
|
|
248
|
+
suggestions.push('Add custom rules for testing guidelines');
|
|
249
|
+
score -= maxScore * 0.13;
|
|
250
|
+
}
|
|
251
|
+
return {
|
|
252
|
+
name: weights.categories.testing.name,
|
|
253
|
+
score: Math.max(0, Math.round(score)),
|
|
254
|
+
maxScore,
|
|
255
|
+
issues,
|
|
256
|
+
suggestions,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
export async function handleHealth(args, state) {
|
|
260
|
+
const { detailed = true, showWeights = false, saveHistory = true } = args;
|
|
261
|
+
const projectPath = process.cwd();
|
|
262
|
+
logger.info('Generating health report', { detailed, showWeights });
|
|
263
|
+
// Load configurable weights
|
|
264
|
+
const weights = getHealthWeights(projectPath);
|
|
265
|
+
// Show weights documentation if requested
|
|
266
|
+
if (showWeights) {
|
|
267
|
+
return jsonResponse({
|
|
268
|
+
documentation: getWeightsDocumentation(weights),
|
|
269
|
+
currentWeights: weights
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
// Perform a sample code analysis if rules are loaded
|
|
273
|
+
let codeAnalysis = null;
|
|
274
|
+
if (state.loadedRules.length > 0 && state.activeProjectType) {
|
|
275
|
+
// Use first rule content as sample for basic analysis
|
|
276
|
+
const sampleContent = state.loadedRules[0]?.content || '';
|
|
277
|
+
try {
|
|
278
|
+
codeAnalysis = analyzeCode('sample.ts', sampleContent, 'all');
|
|
279
|
+
}
|
|
280
|
+
catch (e) {
|
|
281
|
+
logger.warn('Code analysis failed', { error: e });
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// Collect all category scores using configurable weights
|
|
285
|
+
const categories = [
|
|
286
|
+
analyzeConfiguration(state, weights),
|
|
287
|
+
analyzeCodeQuality(codeAnalysis, weights),
|
|
288
|
+
analyzeStructure(state, weights),
|
|
289
|
+
analyzeDocumentation(state, weights),
|
|
290
|
+
analyzeTestingReadiness(state, weights),
|
|
291
|
+
];
|
|
292
|
+
// Calculate overall score
|
|
293
|
+
const totalScore = categories.reduce((sum, cat) => sum + cat.score, 0);
|
|
294
|
+
const maxTotalScore = categories.reduce((sum, cat) => sum + cat.maxScore, 0);
|
|
295
|
+
const overallScore = Math.round((totalScore / maxTotalScore) * 100);
|
|
296
|
+
const grade = getGradeFromScore(overallScore, weights);
|
|
297
|
+
// Save to history if enabled
|
|
298
|
+
if (saveHistory) {
|
|
299
|
+
addHistoryEntry(projectPath, overallScore, grade, categories);
|
|
300
|
+
}
|
|
301
|
+
// Get health trend
|
|
302
|
+
const trend = getHealthTrend(projectPath);
|
|
303
|
+
// Collect critical issues
|
|
304
|
+
const criticalIssues = categories
|
|
305
|
+
.flatMap(cat => cat.issues)
|
|
306
|
+
.filter(issue => issue.includes('critical') ||
|
|
307
|
+
issue.includes('security') ||
|
|
308
|
+
issue.includes('not configured'));
|
|
309
|
+
// Top recommendations
|
|
310
|
+
const recommendations = categories
|
|
311
|
+
.flatMap(cat => cat.suggestions)
|
|
312
|
+
.slice(0, 5);
|
|
313
|
+
// Generate summary
|
|
314
|
+
const summary = generateSummary(grade, overallScore, categories);
|
|
315
|
+
const report = {
|
|
316
|
+
overallScore,
|
|
317
|
+
grade,
|
|
318
|
+
categories,
|
|
319
|
+
summary,
|
|
320
|
+
criticalIssues,
|
|
321
|
+
recommendations,
|
|
322
|
+
};
|
|
323
|
+
if (!detailed) {
|
|
324
|
+
return jsonResponse({
|
|
325
|
+
score: overallScore,
|
|
326
|
+
grade: `${getGradeEmoji(grade)} ${grade}`,
|
|
327
|
+
summary,
|
|
328
|
+
trend: trend ? `${trend.trend} (${trend.change > 0 ? '+' : ''}${trend.change})` : undefined,
|
|
329
|
+
topRecommendations: recommendations.slice(0, 3),
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
return jsonResponse({
|
|
333
|
+
header: `🏥 Project Health Report`,
|
|
334
|
+
score: `${overallScore}/100`,
|
|
335
|
+
grade: `${getGradeEmoji(grade)} Grade: ${grade}`,
|
|
336
|
+
trend: trend ? {
|
|
337
|
+
direction: trend.trend,
|
|
338
|
+
change: `${trend.change > 0 ? '+' : ''}${trend.change} points`,
|
|
339
|
+
emoji: trend.trend === 'improving' ? '📈' : trend.trend === 'declining' ? '📉' : '➡️'
|
|
340
|
+
} : undefined,
|
|
341
|
+
summary,
|
|
342
|
+
categories: categories.map(cat => ({
|
|
343
|
+
name: cat.name,
|
|
344
|
+
score: `${cat.score}/${cat.maxScore}`,
|
|
345
|
+
percentage: Math.round((cat.score / cat.maxScore) * 100),
|
|
346
|
+
status: cat.score >= cat.maxScore * 0.8 ? '✅' : cat.score >= cat.maxScore * 0.5 ? '⚠️' : '❌',
|
|
347
|
+
issues: cat.issues.length > 0 ? cat.issues : undefined,
|
|
348
|
+
suggestions: cat.suggestions.length > 0 ? cat.suggestions : undefined,
|
|
349
|
+
})),
|
|
350
|
+
criticalIssues: criticalIssues.length > 0 ? criticalIssues : undefined,
|
|
351
|
+
recommendations,
|
|
352
|
+
weightsUsed: weights.version,
|
|
353
|
+
nextSteps: generateNextSteps(report),
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
function generateSummary(grade, score, categories) {
|
|
357
|
+
const weakAreas = categories
|
|
358
|
+
.filter(cat => cat.score < cat.maxScore * 0.6)
|
|
359
|
+
.map(cat => cat.name.toLowerCase());
|
|
360
|
+
if (grade === 'A') {
|
|
361
|
+
return 'Excellent! Your project is in great health with minimal issues.';
|
|
362
|
+
}
|
|
363
|
+
else if (grade === 'B') {
|
|
364
|
+
return 'Good project health with some areas for improvement.';
|
|
365
|
+
}
|
|
366
|
+
else if (grade === 'C') {
|
|
367
|
+
return `Moderate health. Focus on improving: ${weakAreas.join(', ')}.`;
|
|
368
|
+
}
|
|
369
|
+
else if (grade === 'D') {
|
|
370
|
+
return `Project needs attention. Weak areas: ${weakAreas.join(', ')}.`;
|
|
371
|
+
}
|
|
372
|
+
return `Critical issues detected. Address: ${weakAreas.join(', ')} immediately.`;
|
|
373
|
+
}
|
|
374
|
+
function generateNextSteps(report) {
|
|
375
|
+
const steps = [];
|
|
376
|
+
if (report.grade === 'F' || report.grade === 'D') {
|
|
377
|
+
steps.push('1. Address critical issues first');
|
|
378
|
+
steps.push('2. Run setup to configure project properly');
|
|
379
|
+
}
|
|
380
|
+
if (report.criticalIssues.length > 0) {
|
|
381
|
+
steps.push('Run review on critical files');
|
|
382
|
+
}
|
|
383
|
+
const lowCategories = report.categories.filter(c => c.score < c.maxScore * 0.5);
|
|
384
|
+
lowCategories.forEach(cat => {
|
|
385
|
+
if (cat.name === 'Configuration') {
|
|
386
|
+
steps.push('Configure project with: stackguide setup');
|
|
387
|
+
}
|
|
388
|
+
else if (cat.name === 'Code Quality') {
|
|
389
|
+
steps.push('Analyze code with: stackguide review');
|
|
390
|
+
}
|
|
391
|
+
else if (cat.name === 'Documentation') {
|
|
392
|
+
steps.push('Check docs with: stackguide docs');
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
if (steps.length === 0) {
|
|
396
|
+
steps.push('Continue maintaining good practices');
|
|
397
|
+
steps.push('Regularly run health checks');
|
|
398
|
+
}
|
|
399
|
+
return steps.slice(0, 5);
|
|
400
|
+
}
|
|
401
|
+
//# sourceMappingURL=health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/handlers/health.ts"],"names":[],"mappings":"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"}
|
package/dist/handlers/help.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { ToolResponse } from './types.js';
|
|
5
5
|
interface HelpArgs {
|
|
6
|
-
topic?: 'setup' | 'rules' | 'review' | 'cursor' | 'docs' | 'config' | 'all';
|
|
6
|
+
topic?: 'setup' | 'rules' | 'review' | 'cursor' | 'docs' | 'config' | 'generate' | 'health' | 'all';
|
|
7
7
|
}
|
|
8
8
|
export declare function handleHelp(args: HelpArgs): Promise<ToolResponse>;
|
|
9
9
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/handlers/help.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAgB,MAAM,YAAY,CAAC;AAExD,UAAU,QAAQ;IAChB,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/handlers/help.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAgB,MAAM,YAAY,CAAC;AAExD,UAAU,QAAQ;IAChB,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC;CACrG;AA+FD,wBAAsB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CA8CtE"}
|
package/dist/handlers/help.js
CHANGED
|
@@ -5,11 +5,16 @@ import { SUPPORTED_PROJECTS } from '../config/types.js';
|
|
|
5
5
|
import { textResponse } from './types.js';
|
|
6
6
|
const helpContent = {
|
|
7
7
|
setup: `## setup
|
|
8
|
-
Configure StackGuide for your project.
|
|
8
|
+
Configure StackGuide for your project with interactive wizard.
|
|
9
9
|
|
|
10
10
|
**Auto-detect:** \`setup\` or \`setup path:"."\`
|
|
11
11
|
**Manual:** \`setup type:"react-typescript"\`
|
|
12
12
|
|
|
13
|
+
The wizard will provide:
|
|
14
|
+
- Recommended tools and VS Code extensions
|
|
15
|
+
- Tips specific to your project type
|
|
16
|
+
- Next steps for optimal setup
|
|
17
|
+
|
|
13
18
|
Available types: ${Object.keys(SUPPORTED_PROJECTS).join(', ')}`,
|
|
14
19
|
rules: `## rules
|
|
15
20
|
Manage coding rules.
|
|
@@ -19,12 +24,17 @@ Manage coding rules.
|
|
|
19
24
|
**Get:** \`rules action:"get" query:"rule-id"\`
|
|
20
25
|
**Select:** \`rules action:"select" ids:["id1","id2"]\``,
|
|
21
26
|
review: `## review
|
|
22
|
-
Review code against active rules.
|
|
27
|
+
Review code against active rules with Quick Fix suggestions.
|
|
23
28
|
|
|
24
29
|
**File:** \`review file:"src/index.ts"\`
|
|
25
30
|
**URL:** \`review url:"https://..."\`
|
|
26
31
|
**Project:** \`review project:true\`
|
|
27
|
-
**Focus:** \`review project:true focus:"security"
|
|
32
|
+
**Focus:** \`review project:true focus:"security"\`
|
|
33
|
+
|
|
34
|
+
Now includes:
|
|
35
|
+
- 🔧 Quick Fix suggestions with code replacements
|
|
36
|
+
- Score (0-100) for code quality
|
|
37
|
+
- Categorized issues by severity`,
|
|
28
38
|
cursor: `## cursor
|
|
29
39
|
Browse cursor.directory community rules.
|
|
30
40
|
|
|
@@ -44,7 +54,39 @@ Save and load configurations.
|
|
|
44
54
|
|
|
45
55
|
**Save:** \`config action:"save" name:"my-config"\`
|
|
46
56
|
**Load:** \`config action:"load" id:"config-id"\`
|
|
47
|
-
**List:** \`config action:"list"
|
|
57
|
+
**List:** \`config action:"list"\``,
|
|
58
|
+
generate: `## generate
|
|
59
|
+
Generate boilerplate code from templates.
|
|
60
|
+
|
|
61
|
+
**Component:** \`generate type:"component" name:"UserCard"\`
|
|
62
|
+
**Hook:** \`generate type:"hook" name:"useAuth"\`
|
|
63
|
+
**Service:** \`generate type:"service" name:"ApiService"\`
|
|
64
|
+
**Test:** \`generate type:"test" name:"UserCard"\`
|
|
65
|
+
**API:** \`generate type:"api" name:"Users"\`
|
|
66
|
+
**Model:** \`generate type:"model" name:"User"\`
|
|
67
|
+
**Utility:** \`generate type:"util" name:"Format"\`
|
|
68
|
+
|
|
69
|
+
**Options:**
|
|
70
|
+
- typescript: true/false (auto-detected)
|
|
71
|
+
- withTests: include test file
|
|
72
|
+
- withStyles: include CSS module (components)
|
|
73
|
+
- framework: "nextjs", "express", "vitest", "jest"`,
|
|
74
|
+
health: `## health
|
|
75
|
+
Get project health score and recommendations.
|
|
76
|
+
|
|
77
|
+
**Basic:** \`health\`
|
|
78
|
+
**Detailed:** \`health detailed:true\`
|
|
79
|
+
|
|
80
|
+
Returns:
|
|
81
|
+
- Overall score (0-100) with grade (A-F)
|
|
82
|
+
- Category breakdown:
|
|
83
|
+
- Configuration
|
|
84
|
+
- Code Quality
|
|
85
|
+
- Project Structure
|
|
86
|
+
- Documentation
|
|
87
|
+
- Testing Readiness
|
|
88
|
+
- Critical issues
|
|
89
|
+
- Top recommendations`
|
|
48
90
|
};
|
|
49
91
|
export async function handleHelp(args) {
|
|
50
92
|
const { topic = 'all' } = args;
|
|
@@ -52,23 +94,41 @@ export async function handleHelp(args) {
|
|
|
52
94
|
return textResponse(`# StackGuide Help
|
|
53
95
|
|
|
54
96
|
## Quick Start
|
|
55
|
-
1. \`setup\` - Auto-configure for your project
|
|
97
|
+
1. \`setup\` - Auto-configure for your project (with wizard)
|
|
56
98
|
2. \`context\` - See loaded rules
|
|
57
99
|
3. \`review file:"src/index.ts"\` - Review your code
|
|
100
|
+
4. \`health\` - Check project health
|
|
101
|
+
|
|
102
|
+
## Available Tools (12)
|
|
58
103
|
|
|
59
|
-
|
|
60
|
-
- **setup** - Configure project
|
|
104
|
+
### Core Tools
|
|
105
|
+
- **setup** - Configure project with interactive wizard
|
|
61
106
|
- **context** - View current context
|
|
62
|
-
- **rules** - Manage rules
|
|
107
|
+
- **rules** - Manage coding rules
|
|
63
108
|
- **knowledge** - Access knowledge base
|
|
64
|
-
- **review** - Code review
|
|
109
|
+
- **review** - Code review with Quick Fixes
|
|
110
|
+
|
|
111
|
+
### Advanced Features
|
|
112
|
+
- **generate** - Generate boilerplate code (NEW!)
|
|
113
|
+
- **health** - Project health score (NEW!)
|
|
114
|
+
|
|
115
|
+
### Integration Tools
|
|
65
116
|
- **cursor** - Browse cursor.directory
|
|
66
117
|
- **docs** - Web documentation
|
|
67
118
|
- **config** - Save/load configurations
|
|
68
119
|
- **custom_rule** - Create custom rules
|
|
120
|
+
- **help** - This help content
|
|
121
|
+
|
|
122
|
+
## Examples
|
|
123
|
+
\`\`\`
|
|
124
|
+
setup type:"react-typescript"
|
|
125
|
+
generate type:"component" name:"UserCard"
|
|
126
|
+
review file:"src/App.tsx" focus:"performance"
|
|
127
|
+
health detailed:true
|
|
128
|
+
\`\`\`
|
|
69
129
|
|
|
70
130
|
Use \`help topic:"setup"\` for details on a specific tool.`);
|
|
71
131
|
}
|
|
72
|
-
return textResponse(helpContent[topic] || `Unknown topic: ${topic}. Available: setup, rules, review, cursor, docs, config, all`);
|
|
132
|
+
return textResponse(helpContent[topic] || `Unknown topic: ${topic}. Available: setup, rules, review, cursor, docs, config, generate, health, all`);
|
|
73
133
|
}
|
|
74
134
|
//# sourceMappingURL=help.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/handlers/help.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAgB,YAAY,EAAE,MAAM,YAAY,CAAC;AAMxD,MAAM,WAAW,GAA2B;IAC1C,KAAK,EAAE
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/handlers/help.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAgB,YAAY,EAAE,MAAM,YAAY,CAAC;AAMxD,MAAM,WAAW,GAA2B;IAC1C,KAAK,EAAE;;;;;;;;;;;mBAWU,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;IAE7D,KAAK,EAAE;;;;;;wDAM+C;IAEtD,MAAM,EAAE;;;;;;;;;;;iCAWuB;IAE/B,MAAM,EAAE;;;;;;;wDAO8C;IAEtD,IAAI,EAAE;;;;;mDAK2C;IAEjD,MAAM,EAAE;;;;;mCAKyB;IAEjC,QAAQ,EAAE;;;;;;;;;;;;;;;mDAeuC;IAEjD,MAAM,EAAE;;;;;;;;;;;;;;;sBAeY;CACrB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAc;IAC7C,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;IAE/B,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACpB,OAAO,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2DAoCmC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,YAAY,CACjB,WAAW,CAAC,KAAK,CAAC,IAAI,kBAAkB,KAAK,gFAAgF,CAC9H,CAAC;AACJ,CAAC"}
|
package/dist/handlers/index.d.ts
CHANGED
|
@@ -11,5 +11,7 @@ export { handleDocs } from './docs.js';
|
|
|
11
11
|
export { handleConfig } from './config.js';
|
|
12
12
|
export { handleCustomRule } from './custom-rule.js';
|
|
13
13
|
export { handleHelp } from './help.js';
|
|
14
|
+
export { handleGenerate } from './generate.js';
|
|
15
|
+
export { handleHealth } from './health.js';
|
|
14
16
|
export * from './types.js';
|
|
15
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,cAAc,YAAY,CAAC"}
|
package/dist/handlers/index.js
CHANGED
|
@@ -11,5 +11,7 @@ export { handleDocs } from './docs.js';
|
|
|
11
11
|
export { handleConfig } from './config.js';
|
|
12
12
|
export { handleCustomRule } from './custom-rule.js';
|
|
13
13
|
export { handleHelp } from './help.js';
|
|
14
|
+
export { handleGenerate } from './generate.js';
|
|
15
|
+
export { handleHealth } from './health.js';
|
|
14
16
|
export * from './types.js';
|
|
15
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,cAAc,YAAY,CAAC"}
|