mcp-adr-analysis-server 2.1.19 → 2.1.22

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 (227) hide show
  1. package/README.md +1 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/config/ai-config.d.ts +54 -6
  4. package/dist/src/config/ai-config.d.ts.map +1 -1
  5. package/dist/src/config/ai-config.js +69 -6
  6. package/dist/src/config/ai-config.js.map +1 -1
  7. package/dist/src/config/ape-descriptions.d.ts +77 -0
  8. package/dist/src/config/ape-descriptions.d.ts.map +1 -0
  9. package/dist/src/config/ape-descriptions.js +177 -0
  10. package/dist/src/config/ape-descriptions.js.map +1 -0
  11. package/dist/src/index.d.ts +40 -0
  12. package/dist/src/index.d.ts.map +1 -1
  13. package/dist/src/index.js +564 -8
  14. package/dist/src/index.js.map +1 -1
  15. package/dist/src/prompts/adr-suggestion-prompts.d.ts +5 -0
  16. package/dist/src/prompts/adr-suggestion-prompts.d.ts.map +1 -1
  17. package/dist/src/prompts/adr-suggestion-prompts.js +22 -1
  18. package/dist/src/prompts/adr-suggestion-prompts.js.map +1 -1
  19. package/dist/src/prompts/prompt-catalog.d.ts +95 -0
  20. package/dist/src/prompts/prompt-catalog.d.ts.map +1 -0
  21. package/dist/src/prompts/prompt-catalog.js +300 -0
  22. package/dist/src/prompts/prompt-catalog.js.map +1 -0
  23. package/dist/src/resources/adrs-discovered-resource.d.ts +124 -0
  24. package/dist/src/resources/adrs-discovered-resource.d.ts.map +1 -0
  25. package/dist/src/resources/adrs-discovered-resource.js +174 -0
  26. package/dist/src/resources/adrs-discovered-resource.js.map +1 -0
  27. package/dist/src/resources/adrs-review-resource.d.ts +82 -0
  28. package/dist/src/resources/adrs-review-resource.d.ts.map +1 -0
  29. package/dist/src/resources/adrs-review-resource.js +160 -0
  30. package/dist/src/resources/adrs-review-resource.js.map +1 -0
  31. package/dist/src/resources/architectural-context-resource.d.ts +95 -0
  32. package/dist/src/resources/architectural-context-resource.d.ts.map +1 -0
  33. package/dist/src/resources/architectural-context-resource.js +428 -0
  34. package/dist/src/resources/architectural-context-resource.js.map +1 -0
  35. package/dist/src/resources/conversation-snapshot-resource.d.ts +92 -0
  36. package/dist/src/resources/conversation-snapshot-resource.d.ts.map +1 -0
  37. package/dist/src/resources/conversation-snapshot-resource.js +122 -0
  38. package/dist/src/resources/conversation-snapshot-resource.js.map +1 -0
  39. package/dist/src/resources/deployment-status-resource.js +1 -1
  40. package/dist/src/resources/deployment-status-resource.js.map +1 -1
  41. package/dist/src/resources/environment-analysis-resource.js +1 -1
  42. package/dist/src/resources/environment-analysis-resource.js.map +1 -1
  43. package/dist/src/resources/knowledge-graph-resource.d.ts +129 -0
  44. package/dist/src/resources/knowledge-graph-resource.d.ts.map +1 -0
  45. package/dist/src/resources/knowledge-graph-resource.js +217 -0
  46. package/dist/src/resources/knowledge-graph-resource.js.map +1 -0
  47. package/dist/src/resources/memory-expand-resource.d.ts +90 -0
  48. package/dist/src/resources/memory-expand-resource.d.ts.map +1 -0
  49. package/dist/src/resources/memory-expand-resource.js +176 -0
  50. package/dist/src/resources/memory-expand-resource.js.map +1 -0
  51. package/dist/src/resources/memory-stats-resource.d.ts +77 -0
  52. package/dist/src/resources/memory-stats-resource.d.ts.map +1 -0
  53. package/dist/src/resources/memory-stats-resource.js +108 -0
  54. package/dist/src/resources/memory-stats-resource.js.map +1 -0
  55. package/dist/src/resources/project-metrics-resource.js +1 -1
  56. package/dist/src/resources/project-metrics-resource.js.map +1 -1
  57. package/dist/src/resources/resource-cache.d.ts.map +1 -1
  58. package/dist/src/resources/resource-cache.js +2 -1
  59. package/dist/src/resources/resource-cache.js.map +1 -1
  60. package/dist/src/resources/server-context-resource.d.ts +69 -0
  61. package/dist/src/resources/server-context-resource.d.ts.map +1 -0
  62. package/dist/src/resources/server-context-resource.js +104 -0
  63. package/dist/src/resources/server-context-resource.js.map +1 -0
  64. package/dist/src/resources/tool-catalog-resource.d.ts +122 -0
  65. package/dist/src/resources/tool-catalog-resource.d.ts.map +1 -0
  66. package/dist/src/resources/tool-catalog-resource.js +167 -0
  67. package/dist/src/resources/tool-catalog-resource.js.map +1 -0
  68. package/dist/src/tools/adr-bootstrap-validation-tool.d.ts.map +1 -1
  69. package/dist/src/tools/adr-bootstrap-validation-tool.js +7 -6
  70. package/dist/src/tools/adr-bootstrap-validation-tool.js.map +1 -1
  71. package/dist/src/tools/adr-suggestion-tool.d.ts +5 -0
  72. package/dist/src/tools/adr-suggestion-tool.d.ts.map +1 -1
  73. package/dist/src/tools/adr-suggestion-tool.js +40 -71
  74. package/dist/src/tools/adr-suggestion-tool.js.map +1 -1
  75. package/dist/src/tools/bootstrap-validation-loop-tool.d.ts +23 -1
  76. package/dist/src/tools/bootstrap-validation-loop-tool.d.ts.map +1 -1
  77. package/dist/src/tools/bootstrap-validation-loop-tool.js +15 -5
  78. package/dist/src/tools/bootstrap-validation-loop-tool.js.map +1 -1
  79. package/dist/src/tools/ce-mcp-tools.d.ts +291 -0
  80. package/dist/src/tools/ce-mcp-tools.d.ts.map +1 -0
  81. package/dist/src/tools/ce-mcp-tools.js +1188 -0
  82. package/dist/src/tools/ce-mcp-tools.js.map +1 -0
  83. package/dist/src/tools/content-masking-tool.d.ts +11 -0
  84. package/dist/src/tools/content-masking-tool.d.ts.map +1 -1
  85. package/dist/src/tools/content-masking-tool.js +13 -6
  86. package/dist/src/tools/content-masking-tool.js.map +1 -1
  87. package/dist/src/tools/deployment-readiness-tool.d.ts +11 -0
  88. package/dist/src/tools/deployment-readiness-tool.d.ts.map +1 -1
  89. package/dist/src/tools/deployment-readiness-tool.js +10 -4
  90. package/dist/src/tools/deployment-readiness-tool.js.map +1 -1
  91. package/dist/src/tools/environment-analysis-tool.d.ts +96 -1
  92. package/dist/src/tools/environment-analysis-tool.d.ts.map +1 -1
  93. package/dist/src/tools/environment-analysis-tool.js +38 -46
  94. package/dist/src/tools/environment-analysis-tool.js.map +1 -1
  95. package/dist/src/tools/research-question-tool.d.ts.map +1 -1
  96. package/dist/src/tools/research-question-tool.js +3 -2
  97. package/dist/src/tools/research-question-tool.js.map +1 -1
  98. package/dist/src/tools/review-existing-adrs-tool.d.ts +5 -0
  99. package/dist/src/tools/review-existing-adrs-tool.d.ts.map +1 -1
  100. package/dist/src/tools/review-existing-adrs-tool.js +123 -42
  101. package/dist/src/tools/review-existing-adrs-tool.js.map +1 -1
  102. package/dist/src/tools/rule-generation-tool.d.ts.map +1 -1
  103. package/dist/src/tools/rule-generation-tool.js +3 -5
  104. package/dist/src/tools/rule-generation-tool.js.map +1 -1
  105. package/dist/src/tools/search-codebase-tool.d.ts +148 -0
  106. package/dist/src/tools/search-codebase-tool.d.ts.map +1 -0
  107. package/dist/src/tools/search-codebase-tool.js +406 -0
  108. package/dist/src/tools/search-codebase-tool.js.map +1 -0
  109. package/dist/src/tools/smart-git-push-tool-v2.js +1 -1
  110. package/dist/src/tools/smart-git-push-tool-v2.js.map +1 -1
  111. package/dist/src/tools/tool-catalog.d.ts +134 -0
  112. package/dist/src/tools/tool-catalog.d.ts.map +1 -0
  113. package/dist/src/tools/tool-catalog.js +1431 -0
  114. package/dist/src/tools/tool-catalog.js.map +1 -0
  115. package/dist/src/tools/tool-chain-orchestrator.d.ts +11 -2
  116. package/dist/src/tools/tool-chain-orchestrator.d.ts.map +1 -1
  117. package/dist/src/tools/tool-chain-orchestrator.js +11 -2
  118. package/dist/src/tools/tool-chain-orchestrator.js.map +1 -1
  119. package/dist/src/tools/tool-dispatcher.d.ts +98 -0
  120. package/dist/src/tools/tool-dispatcher.d.ts.map +1 -0
  121. package/dist/src/tools/tool-dispatcher.js +225 -0
  122. package/dist/src/tools/tool-dispatcher.js.map +1 -0
  123. package/dist/src/tools/tree-sitter-code-tools.d.ts +184 -0
  124. package/dist/src/tools/tree-sitter-code-tools.d.ts.map +1 -0
  125. package/dist/src/tools/tree-sitter-code-tools.js +642 -0
  126. package/dist/src/tools/tree-sitter-code-tools.js.map +1 -0
  127. package/dist/src/tools/troubleshoot-guided-workflow-tool.d.ts +22 -0
  128. package/dist/src/tools/troubleshoot-guided-workflow-tool.d.ts.map +1 -1
  129. package/dist/src/tools/troubleshoot-guided-workflow-tool.js +20 -3
  130. package/dist/src/tools/troubleshoot-guided-workflow-tool.js.map +1 -1
  131. package/dist/src/tools/update-knowledge-tool.d.ts +89 -0
  132. package/dist/src/tools/update-knowledge-tool.d.ts.map +1 -0
  133. package/dist/src/tools/update-knowledge-tool.js +222 -0
  134. package/dist/src/tools/update-knowledge-tool.js.map +1 -0
  135. package/dist/src/types/ce-mcp.d.ts +248 -0
  136. package/dist/src/types/ce-mcp.d.ts.map +1 -0
  137. package/dist/src/types/ce-mcp.js +27 -0
  138. package/dist/src/types/ce-mcp.js.map +1 -0
  139. package/dist/src/utils/adr-context-detector.js +1 -1
  140. package/dist/src/utils/adr-context-detector.js.map +1 -1
  141. package/dist/src/utils/adr-planning-task-integration.d.ts +260 -0
  142. package/dist/src/utils/adr-planning-task-integration.d.ts.map +1 -0
  143. package/dist/src/utils/adr-planning-task-integration.js +466 -0
  144. package/dist/src/utils/adr-planning-task-integration.js.map +1 -0
  145. package/dist/src/utils/adr-timeline-extractor.d.ts.map +1 -1
  146. package/dist/src/utils/adr-timeline-extractor.js +3 -2
  147. package/dist/src/utils/adr-timeline-extractor.js.map +1 -1
  148. package/dist/src/utils/ai-executor.d.ts +10 -0
  149. package/dist/src/utils/ai-executor.d.ts.map +1 -1
  150. package/dist/src/utils/ai-executor.js +14 -3
  151. package/dist/src/utils/ai-executor.js.map +1 -1
  152. package/dist/src/utils/automatic-prompt-engineering.d.ts +5 -0
  153. package/dist/src/utils/automatic-prompt-engineering.d.ts.map +1 -1
  154. package/dist/src/utils/automatic-prompt-engineering.js +10 -90
  155. package/dist/src/utils/automatic-prompt-engineering.js.map +1 -1
  156. package/dist/src/utils/bootstrap-task-integration.d.ts +214 -0
  157. package/dist/src/utils/bootstrap-task-integration.d.ts.map +1 -0
  158. package/dist/src/utils/bootstrap-task-integration.js +365 -0
  159. package/dist/src/utils/bootstrap-task-integration.js.map +1 -0
  160. package/dist/src/utils/dag-executor.d.ts.map +1 -1
  161. package/dist/src/utils/dag-executor.js +48 -15
  162. package/dist/src/utils/dag-executor.js.map +1 -1
  163. package/dist/src/utils/deployment-task-integration.d.ts +260 -0
  164. package/dist/src/utils/deployment-task-integration.d.ts.map +1 -0
  165. package/dist/src/utils/deployment-task-integration.js +393 -0
  166. package/dist/src/utils/deployment-task-integration.js.map +1 -0
  167. package/dist/src/utils/dynamic-deployment-intelligence.js +1 -1
  168. package/dist/src/utils/dynamic-deployment-intelligence.js.map +1 -1
  169. package/dist/src/utils/enhanced-logging.d.ts +3 -0
  170. package/dist/src/utils/enhanced-logging.d.ts.map +1 -1
  171. package/dist/src/utils/enhanced-logging.js +9 -30
  172. package/dist/src/utils/enhanced-logging.js.map +1 -1
  173. package/dist/src/utils/environment-capability-registry.js +1 -1
  174. package/dist/src/utils/environment-capability-registry.js.map +1 -1
  175. package/dist/src/utils/file-system.d.ts.map +1 -1
  176. package/dist/src/utils/file-system.js +33 -3
  177. package/dist/src/utils/file-system.js.map +1 -1
  178. package/dist/src/utils/gitleaks-detector.js +1 -1
  179. package/dist/src/utils/gitleaks-detector.js.map +1 -1
  180. package/dist/src/utils/knowledge-graph-manager.d.ts +13 -0
  181. package/dist/src/utils/knowledge-graph-manager.d.ts.map +1 -1
  182. package/dist/src/utils/knowledge-graph-manager.js +13 -0
  183. package/dist/src/utils/knowledge-graph-manager.js.map +1 -1
  184. package/dist/src/utils/prompt-execution.d.ts +29 -1
  185. package/dist/src/utils/prompt-execution.d.ts.map +1 -1
  186. package/dist/src/utils/prompt-execution.js +29 -1
  187. package/dist/src/utils/prompt-execution.js.map +1 -1
  188. package/dist/src/utils/research-orchestrator.d.ts +87 -1
  189. package/dist/src/utils/research-orchestrator.d.ts.map +1 -1
  190. package/dist/src/utils/research-orchestrator.js +121 -17
  191. package/dist/src/utils/research-orchestrator.js.map +1 -1
  192. package/dist/src/utils/research-task-integration.d.ts +297 -0
  193. package/dist/src/utils/research-task-integration.d.ts.map +1 -0
  194. package/dist/src/utils/research-task-integration.js +449 -0
  195. package/dist/src/utils/research-task-integration.js.map +1 -0
  196. package/dist/src/utils/ripgrep-wrapper.d.ts.map +1 -1
  197. package/dist/src/utils/ripgrep-wrapper.js +17 -3
  198. package/dist/src/utils/ripgrep-wrapper.js.map +1 -1
  199. package/dist/src/utils/sandbox-executor.d.ts +145 -0
  200. package/dist/src/utils/sandbox-executor.d.ts.map +1 -0
  201. package/dist/src/utils/sandbox-executor.js +642 -0
  202. package/dist/src/utils/sandbox-executor.js.map +1 -0
  203. package/dist/src/utils/server-context-generator.d.ts +5 -0
  204. package/dist/src/utils/server-context-generator.d.ts.map +1 -1
  205. package/dist/src/utils/server-context-generator.js +38 -0
  206. package/dist/src/utils/server-context-generator.js.map +1 -1
  207. package/dist/src/utils/task-manager.d.ts +239 -0
  208. package/dist/src/utils/task-manager.d.ts.map +1 -0
  209. package/dist/src/utils/task-manager.js +528 -0
  210. package/dist/src/utils/task-manager.js.map +1 -0
  211. package/dist/src/utils/task-persistence.d.ts +82 -0
  212. package/dist/src/utils/task-persistence.d.ts.map +1 -0
  213. package/dist/src/utils/task-persistence.js +248 -0
  214. package/dist/src/utils/task-persistence.js.map +1 -0
  215. package/dist/src/utils/test-aware-defaults.d.ts +57 -0
  216. package/dist/src/utils/test-aware-defaults.d.ts.map +1 -0
  217. package/dist/src/utils/test-aware-defaults.js +71 -0
  218. package/dist/src/utils/test-aware-defaults.js.map +1 -0
  219. package/dist/src/utils/tree-sitter-analyzer.d.ts +42 -5
  220. package/dist/src/utils/tree-sitter-analyzer.d.ts.map +1 -1
  221. package/dist/src/utils/tree-sitter-analyzer.js +499 -17
  222. package/dist/src/utils/tree-sitter-analyzer.js.map +1 -1
  223. package/package.json +25 -20
  224. package/dist/src/tools/smart-git-push-tool.d.ts +0 -55
  225. package/dist/src/tools/smart-git-push-tool.d.ts.map +0 -1
  226. package/dist/src/tools/smart-git-push-tool.js +0 -1011
  227. package/dist/src/tools/smart-git-push-tool.js.map +0 -1
@@ -0,0 +1,642 @@
1
+ /**
2
+ * Tree-Sitter Code Analysis Tools
3
+ *
4
+ * Provides deterministic code structure analysis tools for MCP.
5
+ * These tools replace non-deterministic ripgrep-based search with
6
+ * AST-based structural analysis.
7
+ *
8
+ * Design Philosophy (per ADR-016):
9
+ * - Tools provide deterministic data
10
+ * - LLM handles reasoning and semantic matching
11
+ * - Same input always produces same output
12
+ *
13
+ * @see docs/adrs/adr-016-replace-ripgrep-with-tree-sitter.md
14
+ */
15
+ import { readFileSync, readdirSync, statSync, existsSync } from 'fs';
16
+ import { join, extname, relative } from 'path';
17
+ import { TreeSitterAnalyzer, } from '../utils/tree-sitter-analyzer.js';
18
+ // Singleton analyzer instance
19
+ let analyzerInstance = null;
20
+ function getAnalyzer() {
21
+ if (!analyzerInstance) {
22
+ analyzerInstance = new TreeSitterAnalyzer();
23
+ }
24
+ return analyzerInstance;
25
+ }
26
+ // Language detection by extension
27
+ const EXTENSION_TO_LANGUAGE = {
28
+ '.ts': 'typescript',
29
+ '.tsx': 'typescript',
30
+ '.js': 'javascript',
31
+ '.jsx': 'javascript',
32
+ '.mjs': 'javascript',
33
+ '.py': 'python',
34
+ '.yml': 'yaml',
35
+ '.yaml': 'yaml',
36
+ '.json': 'json',
37
+ '.sh': 'bash',
38
+ '.bash': 'bash',
39
+ '.tf': 'terraform',
40
+ '.tfvars': 'terraform',
41
+ };
42
+ /**
43
+ * Get deterministic file structure of a project
44
+ *
45
+ * Returns a complete file tree without any search or filtering.
46
+ * The LLM can then decide which files are relevant.
47
+ */
48
+ export async function getFileStructure(projectPath, options = {}) {
49
+ const { maxDepth = 10, includeHidden = false, excludePatterns = ['node_modules', 'dist', '.git', '__pycache__', '.pytest_cache', 'coverage'], } = options;
50
+ const entries = [];
51
+ const filesByLanguage = {};
52
+ let totalDirectories = 0;
53
+ function shouldExclude(name) {
54
+ if (!includeHidden && name.startsWith('.'))
55
+ return true;
56
+ // Use exact matching only to avoid excluding directories like "distribution" when "dist" is excluded
57
+ return excludePatterns.some(pattern => name === pattern);
58
+ }
59
+ function walkDirectory(dirPath, depth) {
60
+ if (depth > maxDepth)
61
+ return;
62
+ try {
63
+ const items = readdirSync(dirPath);
64
+ for (const item of items.sort()) {
65
+ if (shouldExclude(item))
66
+ continue;
67
+ const fullPath = join(dirPath, item);
68
+ const relativePath = relative(projectPath, fullPath);
69
+ try {
70
+ const stats = statSync(fullPath);
71
+ if (stats.isDirectory()) {
72
+ totalDirectories++;
73
+ entries.push({
74
+ path: fullPath,
75
+ relativePath,
76
+ type: 'directory',
77
+ });
78
+ walkDirectory(fullPath, depth + 1);
79
+ }
80
+ else if (stats.isFile()) {
81
+ const ext = extname(item).toLowerCase();
82
+ const language = EXTENSION_TO_LANGUAGE[ext] || 'other';
83
+ filesByLanguage[language] = (filesByLanguage[language] || 0) + 1;
84
+ entries.push({
85
+ path: fullPath,
86
+ relativePath,
87
+ type: 'file',
88
+ extension: ext,
89
+ language,
90
+ size: stats.size,
91
+ });
92
+ }
93
+ }
94
+ catch {
95
+ // Skip files we can't stat
96
+ }
97
+ }
98
+ }
99
+ catch {
100
+ // Skip directories we can't read
101
+ }
102
+ }
103
+ walkDirectory(projectPath, 0);
104
+ return {
105
+ root: projectPath,
106
+ totalFiles: entries.filter(e => e.type === 'file').length,
107
+ totalDirectories,
108
+ filesByLanguage,
109
+ entries,
110
+ };
111
+ }
112
+ /**
113
+ * Get AST-extracted imports from a file
114
+ *
115
+ * Returns deterministic list of all imports/requires in a file.
116
+ */
117
+ export async function getImports(filePath) {
118
+ const analyzer = getAnalyzer();
119
+ const analysis = await analyzer.analyzeFile(filePath);
120
+ const externalDependencies = analysis.imports
121
+ .filter(imp => imp.isExternal)
122
+ .map(imp => imp.module);
123
+ const internalDependencies = analysis.imports
124
+ .filter(imp => !imp.isExternal)
125
+ .map(imp => imp.module);
126
+ return {
127
+ file: filePath,
128
+ language: analysis.language,
129
+ imports: analysis.imports,
130
+ externalDependencies: [...new Set(externalDependencies)],
131
+ internalDependencies: [...new Set(internalDependencies)],
132
+ };
133
+ }
134
+ /**
135
+ * Get AST-extracted exports from a file
136
+ *
137
+ * Returns deterministic list of all exports in a file.
138
+ */
139
+ export async function getExports(filePath) {
140
+ const content = readFileSync(filePath, 'utf-8');
141
+ const ext = extname(filePath).toLowerCase();
142
+ const language = EXTENSION_TO_LANGUAGE[ext] || 'other';
143
+ const exports = [];
144
+ let hasDefaultExport = false;
145
+ // Parse exports based on language
146
+ if (language === 'typescript' || language === 'javascript') {
147
+ // ES6 named exports: export const/function/class/type/interface
148
+ const namedExportRegex = /export\s+(const|let|var|function|class|type|interface|enum)\s+(\w+)/g;
149
+ let match;
150
+ while ((match = namedExportRegex.exec(content)) !== null) {
151
+ const lineNum = content.substring(0, match.index).split('\n').length;
152
+ const name = match[2] ?? '';
153
+ const type = match[1] ?? 'variable';
154
+ if (name) {
155
+ exports.push({
156
+ name,
157
+ type: type,
158
+ location: { line: lineNum, column: 0 },
159
+ isDefault: false,
160
+ });
161
+ }
162
+ }
163
+ // Default exports: export default
164
+ const defaultExportRegex = /export\s+default\s+(?:(class|function)\s+)?(\w+)?/g;
165
+ while ((match = defaultExportRegex.exec(content)) !== null) {
166
+ hasDefaultExport = true;
167
+ const lineNum = content.substring(0, match.index).split('\n').length;
168
+ const name = match[2] || 'default';
169
+ const type = match[1] || 'default';
170
+ exports.push({
171
+ name,
172
+ type: type,
173
+ location: { line: lineNum, column: 0 },
174
+ isDefault: true,
175
+ });
176
+ }
177
+ // Re-exports: export { ... } from '...'
178
+ const reExportRegex = /export\s+\{([^}]+)\}/g;
179
+ while ((match = reExportRegex.exec(content)) !== null) {
180
+ const lineNum = content.substring(0, match.index).split('\n').length;
181
+ const namesStr = match[1] ?? '';
182
+ const parsedNames = namesStr.split(',').map(n => {
183
+ const parts = n.trim().split(' as ');
184
+ return (parts[0] ?? '').trim();
185
+ });
186
+ for (const name of parsedNames) {
187
+ if (name && !exports.some(e => e.name === name)) {
188
+ exports.push({
189
+ name,
190
+ type: 'variable',
191
+ location: { line: lineNum, column: 0 },
192
+ isDefault: false,
193
+ });
194
+ }
195
+ }
196
+ }
197
+ }
198
+ else if (language === 'python') {
199
+ // Python module-level definitions (implicitly exported)
200
+ const defRegex = /^(def|class)\s+(\w+)/gm;
201
+ let match;
202
+ while ((match = defRegex.exec(content)) !== null) {
203
+ const lineNum = content.substring(0, match.index).split('\n').length;
204
+ const name = match[2] ?? '';
205
+ const defType = match[1] ?? 'def';
206
+ if (name) {
207
+ exports.push({
208
+ name,
209
+ type: defType === 'def' ? 'function' : 'class',
210
+ location: { line: lineNum, column: 0 },
211
+ isDefault: false,
212
+ });
213
+ }
214
+ }
215
+ // __all__ definition - check for explicit exports
216
+ const allRegex = /__all__\s*=\s*\[([^\]]+)\]/;
217
+ const allMatch = content.match(allRegex);
218
+ if (allMatch && allMatch[1]) {
219
+ // Mark only __all__ items as explicitly exported (future enhancement)
220
+ // Currently just acknowledging existence
221
+ }
222
+ }
223
+ return {
224
+ file: filePath,
225
+ language,
226
+ exports,
227
+ hasDefaultExport,
228
+ namedExports: exports.filter(e => !e.isDefault).map(e => e.name),
229
+ };
230
+ }
231
+ /**
232
+ * Get AST-extracted functions from a file
233
+ *
234
+ * Returns deterministic list of all functions with signatures.
235
+ */
236
+ export async function getFunctions(filePath) {
237
+ const analyzer = getAnalyzer();
238
+ const analysis = await analyzer.analyzeFile(filePath);
239
+ const securitySensitiveFunctions = analysis.functions
240
+ .filter(fn => fn.securitySensitive)
241
+ .map(fn => fn.name);
242
+ return {
243
+ file: filePath,
244
+ language: analysis.language,
245
+ functions: analysis.functions,
246
+ totalFunctions: analysis.functions.length,
247
+ securitySensitiveFunctions,
248
+ };
249
+ }
250
+ /**
251
+ * Get classes, interfaces, and types from a file
252
+ *
253
+ * Returns deterministic list of class/interface/type definitions.
254
+ */
255
+ export async function getClasses(filePath) {
256
+ const content = readFileSync(filePath, 'utf-8');
257
+ const ext = extname(filePath).toLowerCase();
258
+ const language = EXTENSION_TO_LANGUAGE[ext] || 'other';
259
+ const classes = [];
260
+ const interfaces = [];
261
+ const types = [];
262
+ if (language === 'typescript' || language === 'javascript') {
263
+ // Parse classes
264
+ const classRegex = /(export\s+)?(class)\s+(\w+)(?:\s+extends\s+\w+)?(?:\s+implements\s+[\w,\s]+)?\s*\{/g;
265
+ let match;
266
+ while ((match = classRegex.exec(content)) !== null) {
267
+ const lineNum = content.substring(0, match.index).split('\n').length;
268
+ const className = match[3] ?? '';
269
+ const isExported = !!match[1];
270
+ if (className) {
271
+ // Extract methods (simplified)
272
+ const classBody = extractBraceBlock(content, match.index + match[0].length - 1);
273
+ const methods = extractMethods(classBody);
274
+ const properties = extractProperties(classBody);
275
+ classes.push({
276
+ name: className,
277
+ type: 'class',
278
+ methods,
279
+ properties,
280
+ location: { line: lineNum, column: 0 },
281
+ exported: isExported,
282
+ });
283
+ }
284
+ }
285
+ // Parse interfaces (TypeScript)
286
+ const interfaceRegex = /(export\s+)?(interface)\s+(\w+)(?:<[^>]+>)?\s*(?:extends\s+[\w,\s<>]+)?\s*\{/g;
287
+ while ((match = interfaceRegex.exec(content)) !== null) {
288
+ const lineNum = content.substring(0, match.index).split('\n').length;
289
+ const interfaceName = match[3] ?? '';
290
+ const isExported = !!match[1];
291
+ if (interfaceName) {
292
+ const interfaceBody = extractBraceBlock(content, match.index + match[0].length - 1);
293
+ const methods = extractInterfaceMethods(interfaceBody);
294
+ const properties = extractInterfaceProperties(interfaceBody);
295
+ interfaces.push({
296
+ name: interfaceName,
297
+ type: 'interface',
298
+ methods,
299
+ properties,
300
+ location: { line: lineNum, column: 0 },
301
+ exported: isExported,
302
+ });
303
+ }
304
+ }
305
+ // Parse type aliases
306
+ const typeRegex = /(export\s+)?type\s+(\w+)(?:<[^>]+>)?\s*=/g;
307
+ while ((match = typeRegex.exec(content)) !== null) {
308
+ const lineNum = content.substring(0, match.index).split('\n').length;
309
+ const typeName = match[2] ?? '';
310
+ const isExported = !!match[1];
311
+ if (typeName) {
312
+ types.push({
313
+ name: typeName,
314
+ type: 'type',
315
+ methods: [],
316
+ properties: [],
317
+ location: { line: lineNum, column: 0 },
318
+ exported: isExported,
319
+ });
320
+ }
321
+ }
322
+ }
323
+ else if (language === 'python') {
324
+ // Parse Python classes (including nested classes with indentation)
325
+ const classRegex = /^(\s*)class\s+(\w+)(?:\([^)]*\))?:/gm;
326
+ let match;
327
+ while ((match = classRegex.exec(content)) !== null) {
328
+ const lineNum = content.substring(0, match.index).split('\n').length;
329
+ const classIndent = match[1]?.length ?? 0;
330
+ const className = match[2] ?? '';
331
+ if (className) {
332
+ // Extract methods from class body, passing the class indentation level
333
+ const classBodyStart = match.index + match[0].length;
334
+ const methods = extractPythonMethods(content, classBodyStart, classIndent);
335
+ classes.push({
336
+ name: className,
337
+ type: 'class',
338
+ methods,
339
+ properties: [],
340
+ location: { line: lineNum, column: classIndent },
341
+ exported: !className.startsWith('_'),
342
+ });
343
+ }
344
+ }
345
+ }
346
+ return {
347
+ file: filePath,
348
+ language,
349
+ classes,
350
+ interfaces,
351
+ types,
352
+ };
353
+ }
354
+ /**
355
+ * Get project dependencies from manifest files
356
+ *
357
+ * Parses package.json, requirements.txt, etc. for dependencies.
358
+ */
359
+ export async function getDependencies(projectPath) {
360
+ const dependencies = [];
361
+ // Check package.json
362
+ const packageJsonPath = join(projectPath, 'package.json');
363
+ if (existsSync(packageJsonPath)) {
364
+ try {
365
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
366
+ // Production dependencies
367
+ if (packageJson.dependencies) {
368
+ for (const [name, version] of Object.entries(packageJson.dependencies)) {
369
+ dependencies.push({
370
+ name,
371
+ version: String(version),
372
+ type: 'production',
373
+ source: 'package.json',
374
+ });
375
+ }
376
+ }
377
+ // Development dependencies
378
+ if (packageJson.devDependencies) {
379
+ for (const [name, version] of Object.entries(packageJson.devDependencies)) {
380
+ dependencies.push({
381
+ name,
382
+ version: String(version),
383
+ type: 'development',
384
+ source: 'package.json',
385
+ });
386
+ }
387
+ }
388
+ // Peer dependencies
389
+ if (packageJson.peerDependencies) {
390
+ for (const [name, version] of Object.entries(packageJson.peerDependencies)) {
391
+ dependencies.push({
392
+ name,
393
+ version: String(version),
394
+ type: 'peer',
395
+ source: 'package.json',
396
+ });
397
+ }
398
+ }
399
+ // Optional dependencies
400
+ if (packageJson.optionalDependencies) {
401
+ for (const [name, version] of Object.entries(packageJson.optionalDependencies)) {
402
+ dependencies.push({
403
+ name,
404
+ version: String(version),
405
+ type: 'optional',
406
+ source: 'package.json',
407
+ });
408
+ }
409
+ }
410
+ }
411
+ catch {
412
+ // Invalid package.json
413
+ }
414
+ }
415
+ // Check requirements.txt
416
+ const requirementsPath = join(projectPath, 'requirements.txt');
417
+ if (existsSync(requirementsPath)) {
418
+ try {
419
+ const content = readFileSync(requirementsPath, 'utf-8');
420
+ const lines = content.split('\n');
421
+ for (const line of lines) {
422
+ const trimmed = line.trim();
423
+ if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith('-'))
424
+ continue;
425
+ // Parse requirement: name==version, name>=version, name, etc.
426
+ const match = trimmed.match(/^([a-zA-Z0-9_-]+)(?:[=<>!~]+(.+))?/);
427
+ if (match && match[1]) {
428
+ dependencies.push({
429
+ name: match[1],
430
+ version: match[2] ?? '*',
431
+ type: 'production',
432
+ source: 'requirements.txt',
433
+ });
434
+ }
435
+ }
436
+ }
437
+ catch {
438
+ // Invalid requirements.txt
439
+ }
440
+ }
441
+ // Check pyproject.toml (Poetry/PEP 621)
442
+ const pyprojectPath = join(projectPath, 'pyproject.toml');
443
+ if (existsSync(pyprojectPath)) {
444
+ try {
445
+ const content = readFileSync(pyprojectPath, 'utf-8');
446
+ // Simple TOML parsing for dependencies
447
+ const depsMatch = content.match(/\[tool\.poetry\.dependencies\]([\s\S]*?)(?=\[|$)/);
448
+ if (depsMatch && depsMatch[1]) {
449
+ const depsSection = depsMatch[1];
450
+ const depLines = depsSection.match(/^(\w+)\s*=\s*["']?([^"'\n]+)["']?/gm) ?? [];
451
+ for (const line of depLines) {
452
+ const [name, version] = line.split('=').map(s => s.trim().replace(/['"]/g, ''));
453
+ if (name && name !== 'python') {
454
+ dependencies.push({
455
+ name,
456
+ version: version || '*',
457
+ type: 'production',
458
+ source: 'pyproject.toml',
459
+ });
460
+ }
461
+ }
462
+ }
463
+ }
464
+ catch {
465
+ // Invalid pyproject.toml
466
+ }
467
+ }
468
+ // Calculate by type
469
+ const byType = {};
470
+ for (const dep of dependencies) {
471
+ byType[dep.type] = (byType[dep.type] || 0) + 1;
472
+ }
473
+ return {
474
+ projectPath,
475
+ dependencies,
476
+ totalCount: dependencies.length,
477
+ byType,
478
+ };
479
+ }
480
+ /**
481
+ * Perform full tree-sitter analysis on a file
482
+ *
483
+ * Returns complete AST analysis result.
484
+ */
485
+ export async function analyzeFile(filePath) {
486
+ const analyzer = getAnalyzer();
487
+ return analyzer.analyzeFile(filePath);
488
+ }
489
+ /**
490
+ * Analyze multiple files in a directory
491
+ *
492
+ * Returns analysis results for all code files.
493
+ */
494
+ export async function analyzeDirectory(dirPath, options = {}) {
495
+ const { extensions = ['.ts', '.tsx', '.js', '.jsx', '.py', '.yaml', '.yml', '.json', '.sh', '.tf'], maxFiles = 100, recursive = true, } = options;
496
+ const results = [];
497
+ const errors = [];
498
+ let fileCount = 0;
499
+ async function processDirectory(currentPath) {
500
+ if (fileCount >= maxFiles)
501
+ return;
502
+ try {
503
+ const items = readdirSync(currentPath);
504
+ for (const item of items) {
505
+ if (fileCount >= maxFiles)
506
+ break;
507
+ const fullPath = join(currentPath, item);
508
+ // Skip common non-code directories
509
+ if (['node_modules', 'dist', '.git', '__pycache__', 'coverage'].includes(item)) {
510
+ continue;
511
+ }
512
+ try {
513
+ const stats = statSync(fullPath);
514
+ if (stats.isDirectory() && recursive) {
515
+ await processDirectory(fullPath);
516
+ }
517
+ else if (stats.isFile()) {
518
+ const ext = extname(item).toLowerCase();
519
+ if (extensions.includes(ext)) {
520
+ try {
521
+ const analysis = await analyzeFile(fullPath);
522
+ results.push({ path: fullPath, analysis });
523
+ fileCount++;
524
+ }
525
+ catch (err) {
526
+ errors.push(`Failed to analyze ${fullPath}: ${err}`);
527
+ }
528
+ }
529
+ }
530
+ }
531
+ catch {
532
+ // Skip files we can't access
533
+ }
534
+ }
535
+ }
536
+ catch (err) {
537
+ errors.push(`Failed to read directory ${currentPath}: ${err}`);
538
+ }
539
+ }
540
+ await processDirectory(dirPath);
541
+ return { files: results, errors };
542
+ }
543
+ // Helper functions for parsing
544
+ function extractBraceBlock(content, startIndex) {
545
+ let depth = 1;
546
+ let i = startIndex + 1;
547
+ while (i < content.length && depth > 0) {
548
+ if (content[i] === '{')
549
+ depth++;
550
+ else if (content[i] === '}')
551
+ depth--;
552
+ i++;
553
+ }
554
+ return content.substring(startIndex + 1, i - 1);
555
+ }
556
+ function extractMethods(classBody) {
557
+ const methods = [];
558
+ const methodRegex = /(?:async\s+)?(\w+)\s*\([^)]*\)\s*(?::\s*[^{]+)?\s*\{/g;
559
+ let match;
560
+ while ((match = methodRegex.exec(classBody)) !== null) {
561
+ const methodName = match[1];
562
+ if (methodName && !['constructor', 'if', 'while', 'for', 'switch'].includes(methodName)) {
563
+ methods.push(methodName);
564
+ }
565
+ }
566
+ return [...new Set(methods)];
567
+ }
568
+ function extractProperties(classBody) {
569
+ const properties = [];
570
+ const propRegex = /(?:private|public|protected|readonly)?\s*(\w+)\s*(?::\s*[^;=]+)?(?:=|;)/g;
571
+ let match;
572
+ while ((match = propRegex.exec(classBody)) !== null) {
573
+ const propName = match[1];
574
+ if (propName && !['constructor', 'return', 'const', 'let', 'var'].includes(propName)) {
575
+ properties.push(propName);
576
+ }
577
+ }
578
+ return [...new Set(properties)];
579
+ }
580
+ function extractInterfaceMethods(interfaceBody) {
581
+ const methods = [];
582
+ const methodRegex = /(\w+)\s*\([^)]*\)\s*:/g;
583
+ let match;
584
+ while ((match = methodRegex.exec(interfaceBody)) !== null) {
585
+ const methodName = match[1];
586
+ if (methodName) {
587
+ methods.push(methodName);
588
+ }
589
+ }
590
+ return [...new Set(methods)];
591
+ }
592
+ function extractInterfaceProperties(interfaceBody) {
593
+ const properties = [];
594
+ const propRegex = /(\w+)\s*\??\s*:/g;
595
+ let match;
596
+ while ((match = propRegex.exec(interfaceBody)) !== null) {
597
+ const propName = match[1];
598
+ if (propName && !properties.includes(propName)) {
599
+ properties.push(propName);
600
+ }
601
+ }
602
+ return [...new Set(properties)];
603
+ }
604
+ function extractPythonMethods(content, startIndex, classIndent = 0) {
605
+ const methods = [];
606
+ // Expected method indentation is one level deeper than class (typically 4 spaces)
607
+ const expectedMethodIndent = classIndent + 4;
608
+ // Split content from startIndex into lines for line-by-line analysis
609
+ const remainingContent = content.substring(startIndex);
610
+ const lines = remainingContent.split('\n');
611
+ for (const line of lines) {
612
+ // Skip empty lines and comments
613
+ if (line.trim() === '' || line.trim().startsWith('#')) {
614
+ continue;
615
+ }
616
+ // Calculate line indentation (count leading spaces)
617
+ const lineIndent = line.length - line.trimStart().length;
618
+ // If we hit something at class level or less indentation (except empty/comment), class body ends
619
+ if (lineIndent <= classIndent && line.trim() !== '') {
620
+ break;
621
+ }
622
+ // Check for nested class at method level - skip it and its contents
623
+ const nestedClassMatch = line.match(/^(\s*)class\s+(\w+)/);
624
+ if (nestedClassMatch) {
625
+ // Nested class detected - don't include its methods in outer class
626
+ continue;
627
+ }
628
+ // Only match methods at exactly one indentation level deeper than the class
629
+ // This prevents capturing nested class methods
630
+ const methodMatch = line.match(/^(\s*)def\s+(\w+)\s*\(/);
631
+ if (methodMatch) {
632
+ const methodIndent = methodMatch[1]?.length ?? 0;
633
+ const methodName = methodMatch[2];
634
+ // Only capture methods at the expected indentation level
635
+ if (methodName && methodIndent === expectedMethodIndent) {
636
+ methods.push(methodName);
637
+ }
638
+ }
639
+ }
640
+ return methods;
641
+ }
642
+ //# sourceMappingURL=tree-sitter-code-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-sitter-code-tools.js","sourceRoot":"","sources":["../../../src/tools/tree-sitter-code-tools.ts"],"names":[],"mappings":"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"}