@stackguide/mcp-server 3.2.0 → 3.8.1

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 (177) hide show
  1. package/README.md +315 -9
  2. package/dist/config/persistence.d.ts +16 -0
  3. package/dist/config/persistence.d.ts.map +1 -1
  4. package/dist/config/persistence.js +53 -0
  5. package/dist/config/persistence.js.map +1 -1
  6. package/dist/handlers/analyze.d.ts +11 -0
  7. package/dist/handlers/analyze.d.ts.map +1 -0
  8. package/dist/handlers/analyze.js +274 -0
  9. package/dist/handlers/analyze.js.map +1 -0
  10. package/dist/handlers/config.d.ts +1 -8
  11. package/dist/handlers/config.d.ts.map +1 -1
  12. package/dist/handlers/config.js +7 -1
  13. package/dist/handlers/config.js.map +1 -1
  14. package/dist/handlers/context.d.ts +1 -5
  15. package/dist/handlers/context.d.ts.map +1 -1
  16. package/dist/handlers/context.js +7 -1
  17. package/dist/handlers/context.js.map +1 -1
  18. package/dist/handlers/cursor.d.ts +1 -7
  19. package/dist/handlers/cursor.d.ts.map +1 -1
  20. package/dist/handlers/cursor.js +7 -1
  21. package/dist/handlers/cursor.js.map +1 -1
  22. package/dist/handlers/custom-rule.d.ts +1 -11
  23. package/dist/handlers/custom-rule.d.ts.map +1 -1
  24. package/dist/handlers/custom-rule.js +7 -1
  25. package/dist/handlers/custom-rule.js.map +1 -1
  26. package/dist/handlers/docs.d.ts +1 -8
  27. package/dist/handlers/docs.d.ts.map +1 -1
  28. package/dist/handlers/docs.js +7 -1
  29. package/dist/handlers/docs.js.map +1 -1
  30. package/dist/handlers/generate.d.ts +1 -13
  31. package/dist/handlers/generate.d.ts.map +1 -1
  32. package/dist/handlers/generate.js +6 -3
  33. package/dist/handlers/generate.js.map +1 -1
  34. package/dist/handlers/health.d.ts +1 -8
  35. package/dist/handlers/health.d.ts.map +1 -1
  36. package/dist/handlers/health.js +11 -3
  37. package/dist/handlers/health.js.map +1 -1
  38. package/dist/handlers/help.d.ts +1 -5
  39. package/dist/handlers/help.d.ts.map +1 -1
  40. package/dist/handlers/help.js +7 -1
  41. package/dist/handlers/help.js.map +1 -1
  42. package/dist/handlers/index.d.ts +1 -0
  43. package/dist/handlers/index.d.ts.map +1 -1
  44. package/dist/handlers/index.js +1 -0
  45. package/dist/handlers/index.js.map +1 -1
  46. package/dist/handlers/knowledge.d.ts +1 -8
  47. package/dist/handlers/knowledge.d.ts.map +1 -1
  48. package/dist/handlers/knowledge.js +7 -1
  49. package/dist/handlers/knowledge.js.map +1 -1
  50. package/dist/handlers/prompts.d.ts +31 -0
  51. package/dist/handlers/prompts.d.ts.map +1 -0
  52. package/dist/handlers/prompts.js +225 -0
  53. package/dist/handlers/prompts.js.map +1 -0
  54. package/dist/handlers/resources.d.ts +27 -0
  55. package/dist/handlers/resources.d.ts.map +1 -0
  56. package/dist/handlers/resources.js +210 -0
  57. package/dist/handlers/resources.js.map +1 -0
  58. package/dist/handlers/review.d.ts.map +1 -1
  59. package/dist/handlers/review.js +18 -1
  60. package/dist/handlers/review.js.map +1 -1
  61. package/dist/handlers/rules.d.ts +1 -9
  62. package/dist/handlers/rules.d.ts.map +1 -1
  63. package/dist/handlers/rules.js +7 -1
  64. package/dist/handlers/rules.js.map +1 -1
  65. package/dist/handlers/setup.d.ts +1 -0
  66. package/dist/handlers/setup.d.ts.map +1 -1
  67. package/dist/handlers/setup.js +42 -0
  68. package/dist/handlers/setup.js.map +1 -1
  69. package/dist/index.d.ts +4 -2
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +29 -417
  72. package/dist/index.js.map +1 -1
  73. package/dist/router/index.d.ts +69 -0
  74. package/dist/router/index.d.ts.map +1 -0
  75. package/dist/router/index.js +151 -0
  76. package/dist/router/index.js.map +1 -0
  77. package/dist/services/ast/analyzer.d.ts +55 -0
  78. package/dist/services/ast/analyzer.d.ts.map +1 -0
  79. package/dist/services/ast/analyzer.js +268 -0
  80. package/dist/services/ast/analyzer.js.map +1 -0
  81. package/dist/services/ast/index.d.ts +10 -0
  82. package/dist/services/ast/index.d.ts.map +1 -0
  83. package/dist/services/ast/index.js +12 -0
  84. package/dist/services/ast/index.js.map +1 -0
  85. package/dist/services/ast/rules.d.ts +13 -0
  86. package/dist/services/ast/rules.d.ts.map +1 -0
  87. package/dist/services/ast/rules.js +358 -0
  88. package/dist/services/ast/rules.js.map +1 -0
  89. package/dist/services/ast/treeSitterParser.d.ts +54 -0
  90. package/dist/services/ast/treeSitterParser.d.ts.map +1 -0
  91. package/dist/services/ast/treeSitterParser.js +394 -0
  92. package/dist/services/ast/treeSitterParser.js.map +1 -0
  93. package/dist/services/ast/types.d.ts +167 -0
  94. package/dist/services/ast/types.d.ts.map +1 -0
  95. package/dist/services/ast/types.js +35 -0
  96. package/dist/services/ast/types.js.map +1 -0
  97. package/dist/services/codeAnalyzer.d.ts.map +1 -1
  98. package/dist/services/codeAnalyzer.js +43 -3
  99. package/dist/services/codeAnalyzer.js.map +1 -1
  100. package/dist/services/httpClient.d.ts +45 -0
  101. package/dist/services/httpClient.d.ts.map +1 -0
  102. package/dist/services/httpClient.js +309 -0
  103. package/dist/services/httpClient.js.map +1 -0
  104. package/dist/services/intelligence/configGenerator.d.ts +28 -0
  105. package/dist/services/intelligence/configGenerator.d.ts.map +1 -0
  106. package/dist/services/intelligence/configGenerator.js +404 -0
  107. package/dist/services/intelligence/configGenerator.js.map +1 -0
  108. package/dist/services/intelligence/dependencyAdvisor.d.ts +24 -0
  109. package/dist/services/intelligence/dependencyAdvisor.d.ts.map +1 -0
  110. package/dist/services/intelligence/dependencyAdvisor.js +404 -0
  111. package/dist/services/intelligence/dependencyAdvisor.js.map +1 -0
  112. package/dist/services/intelligence/index.d.ts +12 -0
  113. package/dist/services/intelligence/index.d.ts.map +1 -0
  114. package/dist/services/intelligence/index.js +16 -0
  115. package/dist/services/intelligence/index.js.map +1 -0
  116. package/dist/services/intelligence/projectFs.d.ts +11 -0
  117. package/dist/services/intelligence/projectFs.d.ts.map +1 -0
  118. package/dist/services/intelligence/projectFs.js +30 -0
  119. package/dist/services/intelligence/projectFs.js.map +1 -0
  120. package/dist/services/intelligence/projectIntelligence.d.ts +26 -0
  121. package/dist/services/intelligence/projectIntelligence.d.ts.map +1 -0
  122. package/dist/services/intelligence/projectIntelligence.js +344 -0
  123. package/dist/services/intelligence/projectIntelligence.js.map +1 -0
  124. package/dist/services/intelligence/structureAnalyzer.d.ts +27 -0
  125. package/dist/services/intelligence/structureAnalyzer.d.ts.map +1 -0
  126. package/dist/services/intelligence/structureAnalyzer.js +286 -0
  127. package/dist/services/intelligence/structureAnalyzer.js.map +1 -0
  128. package/dist/services/intelligence/templates.d.ts +22 -0
  129. package/dist/services/intelligence/templates.d.ts.map +1 -0
  130. package/dist/services/intelligence/templates.js +521 -0
  131. package/dist/services/intelligence/templates.js.map +1 -0
  132. package/dist/services/intelligence/types.d.ts +222 -0
  133. package/dist/services/intelligence/types.d.ts.map +1 -0
  134. package/dist/services/intelligence/types.js +7 -0
  135. package/dist/services/intelligence/types.js.map +1 -0
  136. package/dist/services/projectFs.d.ts +85 -0
  137. package/dist/services/projectFs.d.ts.map +1 -0
  138. package/dist/services/projectFs.js +287 -0
  139. package/dist/services/projectFs.js.map +1 -0
  140. package/dist/services/rulesEngine.d.ts +255 -0
  141. package/dist/services/rulesEngine.d.ts.map +1 -0
  142. package/dist/services/rulesEngine.js +483 -0
  143. package/dist/services/rulesEngine.js.map +1 -0
  144. package/dist/services/webDocumentation.d.ts +9 -0
  145. package/dist/services/webDocumentation.d.ts.map +1 -1
  146. package/dist/services/webDocumentation.js +144 -1
  147. package/dist/services/webDocumentation.js.map +1 -1
  148. package/dist/storage/index.d.ts +7 -0
  149. package/dist/storage/index.d.ts.map +1 -0
  150. package/dist/storage/index.js +7 -0
  151. package/dist/storage/index.js.map +1 -0
  152. package/dist/storage/sqlite.d.ts +92 -0
  153. package/dist/storage/sqlite.d.ts.map +1 -0
  154. package/dist/storage/sqlite.js +471 -0
  155. package/dist/storage/sqlite.js.map +1 -0
  156. package/dist/storage/types.d.ts +147 -0
  157. package/dist/storage/types.d.ts.map +1 -0
  158. package/dist/storage/types.js +13 -0
  159. package/dist/storage/types.js.map +1 -0
  160. package/dist/tools/definitions.d.ts +87 -0
  161. package/dist/tools/definitions.d.ts.map +1 -1
  162. package/dist/tools/definitions.js +34 -0
  163. package/dist/tools/definitions.js.map +1 -1
  164. package/dist/utils/logger.d.ts +11 -2
  165. package/dist/utils/logger.d.ts.map +1 -1
  166. package/dist/utils/logger.js +30 -2
  167. package/dist/utils/logger.js.map +1 -1
  168. package/dist/utils/validation.d.ts +3 -3
  169. package/dist/validation/index.d.ts +8 -0
  170. package/dist/validation/index.d.ts.map +1 -0
  171. package/dist/validation/index.js +19 -0
  172. package/dist/validation/index.js.map +1 -0
  173. package/dist/validation/schemas.d.ts +341 -0
  174. package/dist/validation/schemas.d.ts.map +1 -0
  175. package/dist/validation/schemas.js +244 -0
  176. package/dist/validation/schemas.js.map +1 -0
  177. package/package.json +9 -2
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Router - Handler Registry Pattern for MCP Server
3
+ * Replaces switch statements with clean registry-based routing
4
+ * @version 3.6.0
5
+ */
6
+ import { textResponse } from '../handlers/index.js';
7
+ import { logger } from '../utils/logger.js';
8
+ // ============================================================================
9
+ // Tool Router
10
+ // ============================================================================
11
+ class ToolRouter {
12
+ handlers = new Map();
13
+ register(name, handler, schema) {
14
+ if (this.handlers.has(name)) {
15
+ logger.warn(`Overwriting handler for tool: ${name}`);
16
+ }
17
+ this.handlers.set(name, { handler, schema });
18
+ return this;
19
+ }
20
+ registerWithSchema(name, schema, handler) {
21
+ return this.register(name, handler, schema);
22
+ }
23
+ registerAll(handlers) {
24
+ for (const [name, handler] of Object.entries(handlers)) {
25
+ this.register(name, handler);
26
+ }
27
+ return this;
28
+ }
29
+ has(name) {
30
+ return this.handlers.has(name);
31
+ }
32
+ async handle(name, args, state) {
33
+ const registered = this.handlers.get(name);
34
+ if (!registered) {
35
+ logger.warn(`Unknown tool: ${name}`);
36
+ return textResponse(`Unknown tool: ${name}`);
37
+ }
38
+ const { handler, schema } = registered;
39
+ const startTime = Date.now();
40
+ logger.debug(`Tool called: ${name}`, { args });
41
+ try {
42
+ // Validate input if schema is provided
43
+ let validatedArgs = args;
44
+ if (schema) {
45
+ const result = schema.safeParse(args);
46
+ if (!result.success) {
47
+ const errorMessages = result.error.issues.map(issue => {
48
+ const path = issue.path.join('.');
49
+ return path ? `${path}: ${issue.message}` : issue.message;
50
+ }).join('; ');
51
+ logger.warn(`Validation failed for ${name}`, { errors: errorMessages });
52
+ return textResponse(`Invalid input for "${name}": ${errorMessages}`);
53
+ }
54
+ validatedArgs = result.data;
55
+ }
56
+ const result = await handler(validatedArgs, state);
57
+ return result;
58
+ }
59
+ catch (error) {
60
+ const message = error instanceof Error ? error.message : String(error);
61
+ logger.error(`Tool error: ${name}`, { error: message });
62
+ return textResponse(`Error executing tool "${name}": ${message}`);
63
+ }
64
+ finally {
65
+ logger.debug(`Tool completed: ${name}`, { duration: `${Date.now() - startTime}ms` });
66
+ }
67
+ }
68
+ listTools() {
69
+ return Array.from(this.handlers.keys());
70
+ }
71
+ }
72
+ class ResourceRouter {
73
+ routes = [];
74
+ register(pattern, reader) {
75
+ this.routes.push({ pattern, reader });
76
+ return this;
77
+ }
78
+ async read(uri, state) {
79
+ for (const route of this.routes) {
80
+ const matches = typeof route.pattern === 'string'
81
+ ? uri === route.pattern
82
+ : route.pattern.test(uri);
83
+ if (matches) {
84
+ try {
85
+ const result = await route.reader(uri, state);
86
+ if (result)
87
+ return result;
88
+ }
89
+ catch (error) {
90
+ const message = error instanceof Error ? error.message : String(error);
91
+ return {
92
+ contents: [{
93
+ uri,
94
+ mimeType: 'text/plain',
95
+ text: `Error reading resource: ${message}`
96
+ }]
97
+ };
98
+ }
99
+ }
100
+ }
101
+ return {
102
+ contents: [{
103
+ uri,
104
+ mimeType: 'text/plain',
105
+ text: 'Resource not found'
106
+ }]
107
+ };
108
+ }
109
+ }
110
+ // ============================================================================
111
+ // Prompt Router
112
+ // ============================================================================
113
+ class PromptRouter {
114
+ handlers = new Map();
115
+ register(name, handler) {
116
+ this.handlers.set(name, handler);
117
+ return this;
118
+ }
119
+ async handle(name, args, state) {
120
+ const handler = this.handlers.get(name);
121
+ if (!handler) {
122
+ return {
123
+ messages: [{
124
+ role: 'user',
125
+ content: { type: 'text', text: `Unknown prompt: ${name}` }
126
+ }]
127
+ };
128
+ }
129
+ return handler(args, state);
130
+ }
131
+ listPrompts() {
132
+ return Array.from(this.handlers.keys());
133
+ }
134
+ }
135
+ // ============================================================================
136
+ // Factory Functions
137
+ // ============================================================================
138
+ export function createToolRouter() {
139
+ return new ToolRouter();
140
+ }
141
+ export function createResourceRouter() {
142
+ return new ResourceRouter();
143
+ }
144
+ export function createPromptRouter() {
145
+ return new PromptRouter();
146
+ }
147
+ // ============================================================================
148
+ // Exports
149
+ // ============================================================================
150
+ export { ToolRouter, ResourceRouter, PromptRouter };
151
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Tree-Sitter Analyzer
3
+ * High-level API for AST-based code analysis
4
+ * @version 3.5.0
5
+ */
6
+ import { parseCode, parseCodeCached, detectLanguage, extractMetrics, findNodesByType, walkAST, clearASTParserCache, getSupportedLanguages } from './treeSitterParser.js';
7
+ import { ALL_TREE_SITTER_RULES, getRulesForLanguage } from './rules.js';
8
+ import type { ParsedAST, TreeSitterRule, TreeSitterIssue, TreeSitterContext, TreeSitterAnalysisResult, TreeSitterMetrics, SupportedASTLanguage, ASTNode } from './types.js';
9
+ /**
10
+ * Analyze code using tree-sitter AST
11
+ */
12
+ export declare function analyzeWithTreeSitter(code: string, filePath: string, options?: {
13
+ language?: SupportedASTLanguage;
14
+ categories?: Array<TreeSitterRule['category']>;
15
+ useCache?: boolean;
16
+ }): Promise<TreeSitterAnalysisResult | null>;
17
+ /**
18
+ * Analyze multiple files
19
+ */
20
+ export declare function analyzeMultipleWithTreeSitter(files: Array<{
21
+ path: string;
22
+ code: string;
23
+ }>, options?: {
24
+ categories?: Array<TreeSitterRule['category']>;
25
+ maxConcurrent?: number;
26
+ }): Promise<TreeSitterAnalysisResult[]>;
27
+ /**
28
+ * Aggregate metrics from multiple analysis results
29
+ */
30
+ export declare function aggregateMetrics(results: TreeSitterAnalysisResult[]): {
31
+ totalFiles: number;
32
+ totalIssues: number;
33
+ issuesBySeverity: Record<string, number>;
34
+ issuesByCategory: Record<string, number>;
35
+ avgMetrics: TreeSitterMetrics;
36
+ };
37
+ /**
38
+ * Generate a markdown report from analysis results
39
+ */
40
+ export declare function generateReport(result: TreeSitterAnalysisResult): string;
41
+ /**
42
+ * Convert tree-sitter issues to codeAnalyzer format
43
+ */
44
+ export declare function convertToCodeIssues(issues: TreeSitterIssue[]): Array<{
45
+ ruleId: string;
46
+ message: string;
47
+ severity: string;
48
+ line: number;
49
+ column: number;
50
+ suggestion?: string;
51
+ source: 'tree-sitter';
52
+ }>;
53
+ export { parseCode, parseCodeCached, detectLanguage, extractMetrics, findNodesByType, walkAST, clearASTParserCache, getSupportedLanguages, ALL_TREE_SITTER_RULES, getRulesForLanguage };
54
+ export type { ParsedAST, TreeSitterRule, TreeSitterIssue, TreeSitterContext, TreeSitterAnalysisResult, TreeSitterMetrics, SupportedASTLanguage, ASTNode };
55
+ //# sourceMappingURL=analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../../src/services/ast/analyzer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,SAAS,EACT,eAAe,EACf,cAAc,EACd,cAAc,EACd,eAAe,EACf,OAAO,EACP,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,EAEpB,OAAO,EACR,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,UAAU,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACf,GACL,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CA4D1C;AAwED;;GAEG;AACH,wBAAsB,6BAA6B,CACjD,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5C,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/C,aAAa,CAAC,EAAE,MAAM,CAAC;CACnB,GACL,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAqBrC;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,wBAAwB,EAAE,GAAG;IACrE,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,UAAU,EAAE,iBAAiB,CAAC;CAC/B,CA4DA;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,wBAAwB,GAAG,MAAM,CAmDvE;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC,CAUD;AAMD,OAAO,EACL,SAAS,EACT,eAAe,EACf,cAAc,EACd,cAAc,EACd,eAAe,EACf,OAAO,EACP,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACpB,CAAC;AAEF,YAAY,EACV,SAAS,EACT,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,EACpB,OAAO,EACR,CAAC"}
@@ -0,0 +1,268 @@
1
+ /**
2
+ * Tree-Sitter Analyzer
3
+ * High-level API for AST-based code analysis
4
+ * @version 3.5.0
5
+ */
6
+ import { logger } from '../../utils/logger.js';
7
+ import { parseCode, parseCodeCached, detectLanguage, extractMetrics, findNodesByType, walkAST, clearASTParserCache, getSupportedLanguages } from './treeSitterParser.js';
8
+ import { ALL_TREE_SITTER_RULES, getRulesForLanguage } from './rules.js';
9
+ // ============================================================================
10
+ // Main Analysis Functions
11
+ // ============================================================================
12
+ /**
13
+ * Analyze code using tree-sitter AST
14
+ */
15
+ export async function analyzeWithTreeSitter(code, filePath, options = {}) {
16
+ const startTime = Date.now();
17
+ const { categories, useCache = true } = options;
18
+ const language = options.language || detectLanguage(filePath);
19
+ if (!language) {
20
+ logger.debug(`Unsupported file type for tree-sitter: ${filePath}`);
21
+ return null;
22
+ }
23
+ // Parse the code
24
+ const ast = useCache
25
+ ? await parseCodeCached(code, filePath, language)
26
+ : await parseCode(code, filePath, language);
27
+ if (!ast) {
28
+ return null;
29
+ }
30
+ // Get applicable rules
31
+ let rules = getRulesForLanguage(language);
32
+ if (categories && categories.length > 0) {
33
+ const categorySet = new Set(categories);
34
+ rules = rules.filter(r => categorySet.has(r.category));
35
+ }
36
+ // Run rules
37
+ const issues = [];
38
+ for (const rule of rules) {
39
+ try {
40
+ const ruleIssues = await runRule(rule, ast, code, filePath);
41
+ issues.push(...ruleIssues);
42
+ }
43
+ catch (error) {
44
+ logger.warn(`Rule ${rule.id} failed`, { error: String(error) });
45
+ }
46
+ }
47
+ // Extract metrics
48
+ const metrics = extractMetrics(ast);
49
+ const result = {
50
+ filePath,
51
+ language,
52
+ issues,
53
+ metrics,
54
+ parseTime: ast.parseTime,
55
+ analysisTime: Date.now() - startTime
56
+ };
57
+ logger.info('Tree-sitter analysis complete', {
58
+ file: filePath,
59
+ language,
60
+ issuesFound: issues.length,
61
+ rulesApplied: rules.length,
62
+ time: result.analysisTime
63
+ });
64
+ return result;
65
+ }
66
+ /**
67
+ * Run a single rule against the AST
68
+ */
69
+ async function runRule(rule, ast, code, filePath) {
70
+ const context = {
71
+ filePath,
72
+ code,
73
+ ast
74
+ };
75
+ // For now, we use a simplified pattern matching approach
76
+ // since tree-sitter queries require the actual tree-sitter tree
77
+ // We'll match patterns by walking the AST
78
+ const matches = findMatchingNodes(ast, rule);
79
+ if (matches.length === 0) {
80
+ return [];
81
+ }
82
+ return rule.check(matches, context);
83
+ }
84
+ /**
85
+ * Find nodes matching a rule's pattern
86
+ * This is a simplified matcher that works with our converted AST nodes
87
+ */
88
+ function findMatchingNodes(ast, rule) {
89
+ const matches = [];
90
+ // Extract node types from the query pattern
91
+ // Pattern format: (node_type ...) @capture
92
+ const nodeTypeMatch = rule.query.match(/\((\w+)/);
93
+ const captureMatch = rule.query.match(/@(\w+)/g);
94
+ if (!nodeTypeMatch) {
95
+ return matches;
96
+ }
97
+ const targetType = nodeTypeMatch[1];
98
+ const captureNames = captureMatch?.map(c => c.slice(1)) || ['match'];
99
+ // Walk AST and find matching nodes
100
+ walkAST(ast.rootNode, {
101
+ enter: (node) => {
102
+ if (node.type === targetType) {
103
+ // Create a match with the node as a capture
104
+ matches.push({
105
+ pattern: 0,
106
+ captures: captureNames.map(name => ({
107
+ name,
108
+ node
109
+ }))
110
+ });
111
+ }
112
+ }
113
+ });
114
+ return matches;
115
+ }
116
+ // ============================================================================
117
+ // Batch Analysis
118
+ // ============================================================================
119
+ /**
120
+ * Analyze multiple files
121
+ */
122
+ export async function analyzeMultipleWithTreeSitter(files, options = {}) {
123
+ const { maxConcurrent = 5 } = options;
124
+ const results = [];
125
+ // Process in batches
126
+ for (let i = 0; i < files.length; i += maxConcurrent) {
127
+ const batch = files.slice(i, i + maxConcurrent);
128
+ const batchPromises = batch.map(file => analyzeWithTreeSitter(file.code, file.path, options));
129
+ const batchResults = await Promise.all(batchPromises);
130
+ for (const result of batchResults) {
131
+ if (result) {
132
+ results.push(result);
133
+ }
134
+ }
135
+ }
136
+ return results;
137
+ }
138
+ // ============================================================================
139
+ // Metrics Aggregation
140
+ // ============================================================================
141
+ /**
142
+ * Aggregate metrics from multiple analysis results
143
+ */
144
+ export function aggregateMetrics(results) {
145
+ const issuesBySeverity = {
146
+ error: 0,
147
+ warning: 0,
148
+ info: 0,
149
+ suggestion: 0
150
+ };
151
+ const issuesByCategory = {};
152
+ const sumMetrics = {
153
+ loc: 0,
154
+ functions: 0,
155
+ classes: 0,
156
+ maxNestingDepth: 0,
157
+ complexity: 0,
158
+ imports: 0
159
+ };
160
+ for (const result of results) {
161
+ // Count issues
162
+ for (const issue of result.issues) {
163
+ issuesBySeverity[issue.severity] = (issuesBySeverity[issue.severity] || 0) + 1;
164
+ // Extract category from rule ID prefix
165
+ const rulePrefix = issue.ruleId.split('-')[1]?.substring(0, 2);
166
+ const category = rulePrefix === 'SE' ? 'security' :
167
+ rulePrefix === 'BP' ? 'best-practices' :
168
+ rulePrefix === 'PE' ? 'performance' :
169
+ rulePrefix === 'MA' ? 'maintainability' :
170
+ 'other';
171
+ issuesByCategory[category] = (issuesByCategory[category] || 0) + 1;
172
+ }
173
+ // Sum metrics
174
+ sumMetrics.loc += result.metrics.loc;
175
+ sumMetrics.functions += result.metrics.functions;
176
+ sumMetrics.classes += result.metrics.classes;
177
+ sumMetrics.maxNestingDepth = Math.max(sumMetrics.maxNestingDepth, result.metrics.maxNestingDepth);
178
+ sumMetrics.complexity += result.metrics.complexity;
179
+ sumMetrics.imports += result.metrics.imports;
180
+ }
181
+ const totalFiles = results.length;
182
+ return {
183
+ totalFiles,
184
+ totalIssues: results.reduce((sum, r) => sum + r.issues.length, 0),
185
+ issuesBySeverity,
186
+ issuesByCategory,
187
+ avgMetrics: {
188
+ loc: Math.round(sumMetrics.loc / totalFiles) || 0,
189
+ functions: Math.round(sumMetrics.functions / totalFiles) || 0,
190
+ classes: Math.round(sumMetrics.classes / totalFiles) || 0,
191
+ maxNestingDepth: sumMetrics.maxNestingDepth,
192
+ complexity: Math.round(sumMetrics.complexity / totalFiles) || 0,
193
+ imports: Math.round(sumMetrics.imports / totalFiles) || 0
194
+ }
195
+ };
196
+ }
197
+ // ============================================================================
198
+ // Report Generation
199
+ // ============================================================================
200
+ /**
201
+ * Generate a markdown report from analysis results
202
+ */
203
+ export function generateReport(result) {
204
+ const { filePath, language, issues, metrics, parseTime, analysisTime } = result;
205
+ let report = `# Code Analysis Report\n\n`;
206
+ report += `**File:** ${filePath}\n`;
207
+ report += `**Language:** ${language}\n`;
208
+ report += `**Parse Time:** ${parseTime}ms\n`;
209
+ report += `**Analysis Time:** ${analysisTime}ms\n\n`;
210
+ // Metrics
211
+ report += `## Metrics\n\n`;
212
+ report += `| Metric | Value |\n`;
213
+ report += `|--------|-------|\n`;
214
+ report += `| Lines of Code | ${metrics.loc} |\n`;
215
+ report += `| Functions | ${metrics.functions} |\n`;
216
+ report += `| Classes | ${metrics.classes} |\n`;
217
+ report += `| Cyclomatic Complexity | ${metrics.complexity} |\n`;
218
+ report += `| Max Nesting Depth | ${metrics.maxNestingDepth} |\n`;
219
+ report += `| Imports | ${metrics.imports} |\n\n`;
220
+ // Issues
221
+ if (issues.length === 0) {
222
+ report += `## Issues\n\nāœ… No issues found!\n`;
223
+ }
224
+ else {
225
+ const errors = issues.filter(i => i.severity === 'error');
226
+ const warnings = issues.filter(i => i.severity === 'warning');
227
+ const infos = issues.filter(i => i.severity === 'info' || i.severity === 'suggestion');
228
+ report += `## Issues (${issues.length} total)\n\n`;
229
+ report += `- šŸ”“ Errors: ${errors.length}\n`;
230
+ report += `- 🟠 Warnings: ${warnings.length}\n`;
231
+ report += `- šŸ”µ Info: ${infos.length}\n\n`;
232
+ for (const issue of issues) {
233
+ const icon = issue.severity === 'error' ? 'šŸ”“' :
234
+ issue.severity === 'warning' ? '🟠' : 'šŸ”µ';
235
+ report += `### ${icon} ${issue.ruleId}: ${issue.message}\n\n`;
236
+ report += `**Line ${issue.line}:${issue.column}**\n\n`;
237
+ if (issue.suggestion) {
238
+ report += `šŸ’” **Suggestion:** ${issue.suggestion}\n\n`;
239
+ }
240
+ if (issue.quickFix) {
241
+ report += `šŸ”§ **Quick Fix:** ${issue.quickFix.description}\n\n`;
242
+ }
243
+ }
244
+ }
245
+ return report;
246
+ }
247
+ // ============================================================================
248
+ // Integration Helpers
249
+ // ============================================================================
250
+ /**
251
+ * Convert tree-sitter issues to codeAnalyzer format
252
+ */
253
+ export function convertToCodeIssues(issues) {
254
+ return issues.map(issue => ({
255
+ ruleId: issue.ruleId,
256
+ message: issue.message,
257
+ severity: issue.severity,
258
+ line: issue.line,
259
+ column: issue.column,
260
+ suggestion: issue.suggestion,
261
+ source: 'tree-sitter'
262
+ }));
263
+ }
264
+ // ============================================================================
265
+ // Exports
266
+ // ============================================================================
267
+ export { parseCode, parseCodeCached, detectLanguage, extractMetrics, findNodesByType, walkAST, clearASTParserCache, getSupportedLanguages, ALL_TREE_SITTER_RULES, getRulesForLanguage };
268
+ //# sourceMappingURL=analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../../src/services/ast/analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * AST Analysis Module
3
+ * Real AST-based code analysis using tree-sitter
4
+ * @version 3.5.0
5
+ */
6
+ export { analyzeWithTreeSitter, analyzeMultipleWithTreeSitter, aggregateMetrics, generateReport, convertToCodeIssues } from './analyzer.js';
7
+ export { parseCode, parseCodeCached, detectLanguage, extractMetrics, findNodesByType, walkAST, clearASTParserCache, getSupportedLanguages } from './treeSitterParser.js';
8
+ export { ALL_TREE_SITTER_RULES, getRulesForLanguage, TYPESCRIPT_RULES, PYTHON_RULES, GO_RULES, RUST_RULES } from './rules.js';
9
+ export type { ASTNode, ASTNodeLocation, ParsedAST, SupportedASTLanguage, TreeSitterRule, TreeSitterIssue, TreeSitterQuickFix, TreeSitterContext, TreeSitterAnalysisResult, TreeSitterMetrics, ASTQueryMatch, ASTCapture, ASTVisitor, CommonNodeTypes } from './types.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/ast/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACpB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,SAAS,EACT,eAAe,EACf,cAAc,EACd,cAAc,EACd,eAAe,EACf,OAAO,EACP,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,UAAU,EACX,MAAM,YAAY,CAAC;AAGpB,YAAY,EAEV,OAAO,EACP,eAAe,EACf,SAAS,EAGT,oBAAoB,EAGpB,cAAc,EACd,eAAe,EACf,kBAAkB,EAGlB,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,EAGjB,aAAa,EACb,UAAU,EAGV,UAAU,EAGV,eAAe,EAChB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * AST Analysis Module
3
+ * Real AST-based code analysis using tree-sitter
4
+ * @version 3.5.0
5
+ */
6
+ // Main analyzer
7
+ export { analyzeWithTreeSitter, analyzeMultipleWithTreeSitter, aggregateMetrics, generateReport, convertToCodeIssues } from './analyzer.js';
8
+ // Parser utilities
9
+ export { parseCode, parseCodeCached, detectLanguage, extractMetrics, findNodesByType, walkAST, clearASTParserCache, getSupportedLanguages } from './treeSitterParser.js';
10
+ // Rules
11
+ export { ALL_TREE_SITTER_RULES, getRulesForLanguage, TYPESCRIPT_RULES, PYTHON_RULES, GO_RULES, RUST_RULES } from './rules.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/ast/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gBAAgB;AAChB,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACpB,MAAM,eAAe,CAAC;AAEvB,mBAAmB;AACnB,OAAO,EACL,SAAS,EACT,eAAe,EACf,cAAc,EACd,cAAc,EACd,eAAe,EACf,OAAO,EACP,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,uBAAuB,CAAC;AAE/B,QAAQ;AACR,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,UAAU,EACX,MAAM,YAAY,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Tree-Sitter AST Rules
3
+ * Semantic analysis rules using tree-sitter pattern matching
4
+ * @version 3.5.0
5
+ */
6
+ import type { TreeSitterRule } from './types.js';
7
+ export declare const TYPESCRIPT_RULES: TreeSitterRule[];
8
+ export declare const PYTHON_RULES: TreeSitterRule[];
9
+ export declare const GO_RULES: TreeSitterRule[];
10
+ export declare const RUST_RULES: TreeSitterRule[];
11
+ export declare const ALL_TREE_SITTER_RULES: TreeSitterRule[];
12
+ export declare function getRulesForLanguage(language: string): TreeSitterRule[];
13
+ //# sourceMappingURL=rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../src/services/ast/rules.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAiB,cAAc,EAAsC,MAAM,YAAY,CAAC;AA4XpG,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAI5C,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,cAAc,EAGxC,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,cAAc,EAEpC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,cAAc,EAEtC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,cAAc,EAEjD,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE,CAUtE"}