@stackguide/mcp-server 2.4.0 → 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.
Files changed (38) hide show
  1. package/README.md +82 -16
  2. package/dist/config/healthWeights.d.ts +87 -0
  3. package/dist/config/healthWeights.d.ts.map +1 -0
  4. package/dist/config/healthWeights.js +238 -0
  5. package/dist/config/healthWeights.js.map +1 -0
  6. package/dist/config/types.d.ts +104 -0
  7. package/dist/config/types.d.ts.map +1 -1
  8. package/dist/config/types.js.map +1 -1
  9. package/dist/handlers/generate.d.ts +6 -0
  10. package/dist/handlers/generate.d.ts.map +1 -1
  11. package/dist/handlers/generate.js +81 -5
  12. package/dist/handlers/generate.js.map +1 -1
  13. package/dist/handlers/health.d.ts +7 -0
  14. package/dist/handlers/health.d.ts.map +1 -1
  15. package/dist/handlers/health.js +151 -69
  16. package/dist/handlers/health.js.map +1 -1
  17. package/dist/handlers/review.d.ts +12 -0
  18. package/dist/handlers/review.d.ts.map +1 -1
  19. package/dist/handlers/review.js +220 -21
  20. package/dist/handlers/review.js.map +1 -1
  21. package/dist/services/analysisCache.d.ts +110 -0
  22. package/dist/services/analysisCache.d.ts.map +1 -0
  23. package/dist/services/analysisCache.js +233 -0
  24. package/dist/services/analysisCache.js.map +1 -0
  25. package/dist/services/codeAnalyzer.d.ts +73 -30
  26. package/dist/services/codeAnalyzer.d.ts.map +1 -1
  27. package/dist/services/codeAnalyzer.js +384 -36
  28. package/dist/services/codeAnalyzer.js.map +1 -1
  29. package/dist/services/conventionDetector.d.ts +40 -0
  30. package/dist/services/conventionDetector.d.ts.map +1 -0
  31. package/dist/services/conventionDetector.js +465 -0
  32. package/dist/services/conventionDetector.js.map +1 -0
  33. package/dist/services/cursorDirectory.d.ts +29 -2
  34. package/dist/services/cursorDirectory.d.ts.map +1 -1
  35. package/dist/services/cursorDirectory.js +260 -9
  36. package/dist/services/cursorDirectory.js.map +1 -1
  37. package/dist/utils/validation.d.ts +2 -2
  38. package/package.json +1 -1
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Analysis Cache Service
3
+ * Caches code analysis results by file hash to avoid re-analyzing unchanged files
4
+ */
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import * as crypto from 'crypto';
8
+ import { logger } from '../utils/logger.js';
9
+ const CACHE_VERSION = '1.0.0';
10
+ const CACHE_TTL = 24 * 60 * 60 * 1000; // 24 hours
11
+ const CACHE_DIR = '.stackguide';
12
+ const CACHE_FILE = 'analysis-cache.json';
13
+ /**
14
+ * Compute SHA256 hash of file content
15
+ */
16
+ export function computeFileHash(content) {
17
+ return crypto.createHash('sha256').update(content).digest('hex').slice(0, 16);
18
+ }
19
+ /**
20
+ * Get cache directory path for a project
21
+ */
22
+ export function getCacheDir(projectPath) {
23
+ return path.join(projectPath, CACHE_DIR);
24
+ }
25
+ /**
26
+ * Get cache file path for a project
27
+ */
28
+ export function getCacheFilePath(projectPath) {
29
+ return path.join(getCacheDir(projectPath), CACHE_FILE);
30
+ }
31
+ /**
32
+ * Load cache from disk
33
+ */
34
+ export function loadCache(projectPath) {
35
+ const cachePath = getCacheFilePath(projectPath);
36
+ try {
37
+ if (fs.existsSync(cachePath)) {
38
+ const data = fs.readFileSync(cachePath, 'utf-8');
39
+ const cache = JSON.parse(data);
40
+ // Invalidate cache if version mismatch
41
+ if (cache.version !== CACHE_VERSION) {
42
+ logger.debug('Cache version mismatch, starting fresh');
43
+ return createEmptyCache();
44
+ }
45
+ return cache;
46
+ }
47
+ }
48
+ catch (error) {
49
+ logger.debug('Failed to load cache, starting fresh', { error });
50
+ }
51
+ return createEmptyCache();
52
+ }
53
+ /**
54
+ * Save cache to disk
55
+ */
56
+ export function saveCache(projectPath, cache) {
57
+ const cacheDir = getCacheDir(projectPath);
58
+ const cachePath = getCacheFilePath(projectPath);
59
+ try {
60
+ // Ensure cache directory exists
61
+ if (!fs.existsSync(cacheDir)) {
62
+ fs.mkdirSync(cacheDir, { recursive: true });
63
+ }
64
+ // Clean expired entries before saving
65
+ const cleanedCache = cleanExpiredEntries(cache);
66
+ fs.writeFileSync(cachePath, JSON.stringify(cleanedCache, null, 2));
67
+ logger.debug('Cache saved', { entries: Object.keys(cleanedCache.entries).length });
68
+ }
69
+ catch (error) {
70
+ logger.debug('Failed to save cache', { error });
71
+ }
72
+ }
73
+ /**
74
+ * Create empty cache store
75
+ */
76
+ export function createEmptyCache() {
77
+ return {
78
+ version: CACHE_VERSION,
79
+ entries: {}
80
+ };
81
+ }
82
+ /**
83
+ * Clean expired entries from cache
84
+ */
85
+ export function cleanExpiredEntries(cache) {
86
+ const now = Date.now();
87
+ const cleanedEntries = {};
88
+ for (const [filePath, entry] of Object.entries(cache.entries)) {
89
+ if (now - entry.timestamp < CACHE_TTL) {
90
+ cleanedEntries[filePath] = entry;
91
+ }
92
+ }
93
+ return {
94
+ version: cache.version,
95
+ entries: cleanedEntries
96
+ };
97
+ }
98
+ /**
99
+ * Get cached analysis result if valid
100
+ */
101
+ export function getCachedResult(cache, filePath, content) {
102
+ const entry = cache.entries[filePath];
103
+ if (!entry) {
104
+ return null;
105
+ }
106
+ const currentHash = computeFileHash(content);
107
+ // Check if hash matches and entry is not expired
108
+ if (entry.hash === currentHash && Date.now() - entry.timestamp < CACHE_TTL) {
109
+ logger.debug('Cache hit', { filePath });
110
+ return entry.result;
111
+ }
112
+ logger.debug('Cache miss', { filePath, reason: entry.hash !== currentHash ? 'hash mismatch' : 'expired' });
113
+ return null;
114
+ }
115
+ /**
116
+ * Store analysis result in cache
117
+ */
118
+ export function setCachedResult(cache, filePath, content, result) {
119
+ cache.entries[filePath] = {
120
+ hash: computeFileHash(content),
121
+ result,
122
+ timestamp: Date.now(),
123
+ version: CACHE_VERSION
124
+ };
125
+ }
126
+ /**
127
+ * Invalidate cache entry for a file
128
+ */
129
+ export function invalidateCacheEntry(cache, filePath) {
130
+ delete cache.entries[filePath];
131
+ }
132
+ /**
133
+ * Clear all cache entries
134
+ */
135
+ export function clearCache(projectPath) {
136
+ const cachePath = getCacheFilePath(projectPath);
137
+ try {
138
+ if (fs.existsSync(cachePath)) {
139
+ fs.unlinkSync(cachePath);
140
+ logger.debug('Cache cleared');
141
+ }
142
+ }
143
+ catch (error) {
144
+ logger.debug('Failed to clear cache', { error });
145
+ }
146
+ }
147
+ /**
148
+ * Get cache statistics
149
+ */
150
+ export function getCacheStats(cache) {
151
+ const now = Date.now();
152
+ let validEntries = 0;
153
+ let expiredEntries = 0;
154
+ let oldestEntry = null;
155
+ let newestEntry = null;
156
+ for (const entry of Object.values(cache.entries)) {
157
+ if (now - entry.timestamp < CACHE_TTL) {
158
+ validEntries++;
159
+ }
160
+ else {
161
+ expiredEntries++;
162
+ }
163
+ if (oldestEntry === null || entry.timestamp < oldestEntry) {
164
+ oldestEntry = entry.timestamp;
165
+ }
166
+ if (newestEntry === null || entry.timestamp > newestEntry) {
167
+ newestEntry = entry.timestamp;
168
+ }
169
+ }
170
+ return {
171
+ totalEntries: Object.keys(cache.entries).length,
172
+ validEntries,
173
+ expiredEntries,
174
+ oldestEntry,
175
+ newestEntry
176
+ };
177
+ }
178
+ /**
179
+ * AnalysisCacheManager - High-level API for managing analysis cache
180
+ */
181
+ export class AnalysisCacheManager {
182
+ projectPath;
183
+ cache;
184
+ dirty = false;
185
+ constructor(projectPath) {
186
+ this.projectPath = projectPath;
187
+ this.cache = loadCache(projectPath);
188
+ }
189
+ /**
190
+ * Get cached result or null if not found/invalid
191
+ */
192
+ get(filePath, content) {
193
+ return getCachedResult(this.cache, filePath, content);
194
+ }
195
+ /**
196
+ * Store result in cache
197
+ */
198
+ set(filePath, content, result) {
199
+ setCachedResult(this.cache, filePath, content, result);
200
+ this.dirty = true;
201
+ }
202
+ /**
203
+ * Invalidate a specific file
204
+ */
205
+ invalidate(filePath) {
206
+ invalidateCacheEntry(this.cache, filePath);
207
+ this.dirty = true;
208
+ }
209
+ /**
210
+ * Save cache to disk if modified
211
+ */
212
+ save() {
213
+ if (this.dirty) {
214
+ saveCache(this.projectPath, this.cache);
215
+ this.dirty = false;
216
+ }
217
+ }
218
+ /**
219
+ * Get cache statistics
220
+ */
221
+ getStats() {
222
+ return getCacheStats(this.cache);
223
+ }
224
+ /**
225
+ * Clear all cache
226
+ */
227
+ clear() {
228
+ clearCache(this.projectPath);
229
+ this.cache = createEmptyCache();
230
+ this.dirty = false;
231
+ }
232
+ }
233
+ //# sourceMappingURL=analysisCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysisCache.js","sourceRoot":"","sources":["../../src/services/analysisCache.ts"],"names":[],"mappings":"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"}
@@ -1,37 +1,74 @@
1
1
  /**
2
- * Code Analyzer Service
3
- * Analyzes code against rules and patterns to find issues
2
+ * Code Analyzer Service - v3.0.0
3
+ * Unified rule pipeline that supports builtin, user, and project rules
4
4
  */
5
- export interface QuickFix {
6
- description: string;
7
- before: string;
8
- after: string;
9
- isRegex?: boolean;
10
- }
11
- export interface CodeIssue {
12
- severity: 'error' | 'warning' | 'info' | 'suggestion';
13
- rule: string;
14
- category: string;
15
- message: string;
16
- line?: number;
17
- column?: number;
18
- code?: string;
19
- suggestion?: string;
20
- quickFix?: QuickFix;
21
- }
22
- export interface AnalysisResult {
23
- file: string;
24
- language: string;
25
- issues: CodeIssue[];
26
- score: number;
27
- summary: {
28
- errors: number;
29
- warnings: number;
30
- info: number;
31
- suggestions: number;
5
+ import { PatternRule, CodeIssue, AnalysisResult, QuickFix } from '../config/types.js';
6
+ export type { QuickFix, CodeIssue, AnalysisResult };
7
+ /**
8
+ * In-memory registry of all active rules
9
+ */
10
+ declare class RuleRegistry {
11
+ private builtinRules;
12
+ private userRules;
13
+ private projectRules;
14
+ /**
15
+ * Get all builtin rules
16
+ */
17
+ getBuiltinRules(): PatternRule[];
18
+ /**
19
+ * Get all user-defined rules
20
+ */
21
+ getUserRules(): PatternRule[];
22
+ /**
23
+ * Get all project-specific rules
24
+ */
25
+ getProjectRules(): PatternRule[];
26
+ /**
27
+ * Get all active rules, sorted by priority (highest first)
28
+ */
29
+ getAllRules(): PatternRule[];
30
+ /**
31
+ * Register a user-defined pattern rule
32
+ */
33
+ registerUserRule(rule: Omit<PatternRule, 'source' | 'type'>): void;
34
+ /**
35
+ * Register a project-specific pattern rule
36
+ */
37
+ registerProjectRule(rule: Omit<PatternRule, 'source' | 'type'>): void;
38
+ /**
39
+ * Register multiple project rules at once
40
+ */
41
+ registerProjectRules(rules: Array<Omit<PatternRule, 'source' | 'type'>>): void;
42
+ /**
43
+ * Clear all user rules
44
+ */
45
+ clearUserRules(): void;
46
+ /**
47
+ * Clear all project rules
48
+ */
49
+ clearProjectRules(): void;
50
+ /**
51
+ * Disable a builtin rule by ID
52
+ */
53
+ disableBuiltinRule(ruleId: string): boolean;
54
+ /**
55
+ * Enable a builtin rule by ID
56
+ */
57
+ enableBuiltinRule(ruleId: string): boolean;
58
+ /**
59
+ * Get statistics about registered rules
60
+ */
61
+ getStats(): {
62
+ builtin: number;
63
+ user: number;
64
+ project: number;
65
+ total: number;
32
66
  };
33
- quickFixes?: QuickFix[];
34
67
  }
68
+ export declare const ruleRegistry: RuleRegistry;
69
+ /**
70
+ * Analyze code using the unified rule pipeline
71
+ */
35
72
  export declare function analyzeCode(file: string, content: string, focus?: 'all' | 'security' | 'performance' | 'architecture' | 'coding-standards'): AnalysisResult;
36
73
  export declare function analyzeMultipleFiles(files: Array<{
37
74
  path: string;
@@ -43,7 +80,13 @@ export declare function analyzeMultipleFiles(files: Array<{
43
80
  totalIssues: number;
44
81
  averageScore: number;
45
82
  summary: AnalysisResult['summary'];
83
+ rulesApplied: AnalysisResult['rulesApplied'];
46
84
  };
47
85
  };
48
86
  export declare function formatAnalysisReport(result: AnalysisResult): string;
87
+ /**
88
+ * Parse a user-defined rule content to extract pattern rules
89
+ * This bridges the gap between RuleManager's documentation rules and analysis rules
90
+ */
91
+ export declare function parseUserRuleToPatternRule(ruleId: string, content: string, category: string): PatternRule | null;
49
92
  //# sourceMappingURL=codeAnalyzer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codeAnalyzer.d.ts","sourceRoot":"","sources":["../../src/services/codeAnalyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,YAAY,CAAC;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;CACzB;AAqYD,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,KAAK,GAAG,UAAU,GAAG,aAAa,GAAG,cAAc,GAAG,kBAA0B,GACtF,cAAc,CAoFhB;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAC/C,KAAK,GAAE,KAAK,GAAG,UAAU,GAAG,aAAa,GAAG,cAAc,GAAG,kBAA0B,GACtF;IACD,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;KACpC,CAAC;CACH,CAwBA;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAgDnE"}
1
+ {"version":3,"file":"codeAnalyzer.d.ts","sourceRoot":"","sources":["../../src/services/codeAnalyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,WAAW,EACX,SAAS,EACT,cAAc,EACd,QAAQ,EAGT,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;AAifpD;;GAEG;AACH,cAAM,YAAY;IAChB,OAAO,CAAC,YAAY,CAA6C;IACjE,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,YAAY,CAAqB;IAEzC;;OAEG;IACH,eAAe,IAAI,WAAW,EAAE;IAIhC;;OAEG;IACH,YAAY,IAAI,WAAW,EAAE;IAI7B;;OAEG;IACH,eAAe,IAAI,WAAW,EAAE;IAIhC;;OAEG;IACH,WAAW,IAAI,WAAW,EAAE;IAW5B;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,MAAM,CAAC,GAAG,IAAI;IAclE;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,MAAM,CAAC,GAAG,IAAI;IAcrE;;OAEG;IACH,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI;IAM9E;;OAEG;IACH,cAAc,IAAI,IAAI;IAKtB;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAKzB;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAU3C;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAU1C;;OAEG;IACH,QAAQ,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;CAM9E;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC;AA8B/C;;GAEG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,KAAK,GAAG,UAAU,GAAG,aAAa,GAAG,cAAc,GAAG,kBAA0B,GACtF,cAAc,CA8GhB;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAC/C,KAAK,GAAE,KAAK,GAAG,UAAU,GAAG,aAAa,GAAG,cAAc,GAAG,kBAA0B,GACtF;IACD,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;QACnC,YAAY,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;KAC9C,CAAC;CACH,CA+BA;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAmDnE;AAMD;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,WAAW,GAAG,IAAI,CA6CpB"}