@skillsmith/core 0.2.0 → 2.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 (233) hide show
  1. package/README.md +233 -2
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/analysis/__tests__/incremental.test.d.ts +13 -0
  4. package/dist/src/analysis/__tests__/incremental.test.d.ts.map +1 -0
  5. package/dist/src/analysis/__tests__/incremental.test.js +515 -0
  6. package/dist/src/analysis/__tests__/incremental.test.js.map +1 -0
  7. package/dist/src/analysis/__tests__/integration.test.d.ts +14 -0
  8. package/dist/src/analysis/__tests__/integration.test.d.ts.map +1 -0
  9. package/dist/src/analysis/__tests__/integration.test.js +1059 -0
  10. package/dist/src/analysis/__tests__/integration.test.js.map +1 -0
  11. package/dist/src/analysis/__tests__/metrics.test.d.ts +9 -0
  12. package/dist/src/analysis/__tests__/metrics.test.d.ts.map +1 -0
  13. package/dist/src/analysis/__tests__/metrics.test.js +369 -0
  14. package/dist/src/analysis/__tests__/metrics.test.js.map +1 -0
  15. package/dist/src/analysis/__tests__/performance.test.d.ts +15 -0
  16. package/dist/src/analysis/__tests__/performance.test.d.ts.map +1 -0
  17. package/dist/src/analysis/__tests__/performance.test.js +402 -0
  18. package/dist/src/analysis/__tests__/performance.test.js.map +1 -0
  19. package/dist/src/analysis/adapters/__tests__/go.test.d.ts +12 -0
  20. package/dist/src/analysis/adapters/__tests__/go.test.d.ts.map +1 -0
  21. package/dist/src/analysis/adapters/__tests__/go.test.js +561 -0
  22. package/dist/src/analysis/adapters/__tests__/go.test.js.map +1 -0
  23. package/dist/src/analysis/adapters/__tests__/python.test.d.ts +11 -0
  24. package/dist/src/analysis/adapters/__tests__/python.test.d.ts.map +1 -0
  25. package/dist/src/analysis/adapters/__tests__/python.test.js +669 -0
  26. package/dist/src/analysis/adapters/__tests__/python.test.js.map +1 -0
  27. package/dist/src/analysis/adapters/__tests__/rust.test.d.ts +12 -0
  28. package/dist/src/analysis/adapters/__tests__/rust.test.d.ts.map +1 -0
  29. package/dist/src/analysis/adapters/__tests__/rust.test.js +676 -0
  30. package/dist/src/analysis/adapters/__tests__/rust.test.js.map +1 -0
  31. package/dist/src/analysis/adapters/__tests__/typescript.test.d.ts +14 -0
  32. package/dist/src/analysis/adapters/__tests__/typescript.test.d.ts.map +1 -0
  33. package/dist/src/analysis/adapters/__tests__/typescript.test.js +381 -0
  34. package/dist/src/analysis/adapters/__tests__/typescript.test.js.map +1 -0
  35. package/dist/src/analysis/adapters/base.d.ts +83 -0
  36. package/dist/src/analysis/adapters/base.d.ts.map +1 -0
  37. package/dist/src/analysis/adapters/base.js +40 -0
  38. package/dist/src/analysis/adapters/base.js.map +1 -0
  39. package/dist/src/analysis/adapters/factory.d.ts +150 -0
  40. package/dist/src/analysis/adapters/factory.d.ts.map +1 -0
  41. package/dist/src/analysis/adapters/factory.js +244 -0
  42. package/dist/src/analysis/adapters/factory.js.map +1 -0
  43. package/dist/src/analysis/adapters/go.d.ts +131 -0
  44. package/dist/src/analysis/adapters/go.d.ts.map +1 -0
  45. package/dist/src/analysis/adapters/go.js +414 -0
  46. package/dist/src/analysis/adapters/go.js.map +1 -0
  47. package/dist/src/analysis/adapters/index.d.ts +20 -0
  48. package/dist/src/analysis/adapters/index.d.ts.map +1 -0
  49. package/dist/src/analysis/adapters/index.js +23 -0
  50. package/dist/src/analysis/adapters/index.js.map +1 -0
  51. package/dist/src/analysis/adapters/java.d.ts +154 -0
  52. package/dist/src/analysis/adapters/java.d.ts.map +1 -0
  53. package/dist/src/analysis/adapters/java.js +407 -0
  54. package/dist/src/analysis/adapters/java.js.map +1 -0
  55. package/dist/src/analysis/adapters/python.d.ts +165 -0
  56. package/dist/src/analysis/adapters/python.d.ts.map +1 -0
  57. package/dist/src/analysis/adapters/python.js +475 -0
  58. package/dist/src/analysis/adapters/python.js.map +1 -0
  59. package/dist/src/analysis/adapters/rust.d.ts +116 -0
  60. package/dist/src/analysis/adapters/rust.d.ts.map +1 -0
  61. package/dist/src/analysis/adapters/rust.js +476 -0
  62. package/dist/src/analysis/adapters/rust.js.map +1 -0
  63. package/dist/src/analysis/adapters/typescript.d.ts +68 -0
  64. package/dist/src/analysis/adapters/typescript.d.ts.map +1 -0
  65. package/dist/src/analysis/adapters/typescript.js +79 -0
  66. package/dist/src/analysis/adapters/typescript.js.map +1 -0
  67. package/dist/src/analysis/aggregator.d.ts +193 -0
  68. package/dist/src/analysis/aggregator.d.ts.map +1 -0
  69. package/dist/src/analysis/aggregator.js +283 -0
  70. package/dist/src/analysis/aggregator.js.map +1 -0
  71. package/dist/src/analysis/cache.d.ts +180 -0
  72. package/dist/src/analysis/cache.d.ts.map +1 -0
  73. package/dist/src/analysis/cache.js +279 -0
  74. package/dist/src/analysis/cache.js.map +1 -0
  75. package/dist/src/analysis/file-streamer.d.ts +136 -0
  76. package/dist/src/analysis/file-streamer.d.ts.map +1 -0
  77. package/dist/src/analysis/file-streamer.js +291 -0
  78. package/dist/src/analysis/file-streamer.js.map +1 -0
  79. package/dist/src/analysis/incremental-parser.d.ts +186 -0
  80. package/dist/src/analysis/incremental-parser.d.ts.map +1 -0
  81. package/dist/src/analysis/incremental-parser.js +291 -0
  82. package/dist/src/analysis/incremental-parser.js.map +1 -0
  83. package/dist/src/analysis/incremental.d.ts +186 -0
  84. package/dist/src/analysis/incremental.d.ts.map +1 -0
  85. package/dist/src/analysis/incremental.js +247 -0
  86. package/dist/src/analysis/incremental.js.map +1 -0
  87. package/dist/src/analysis/index.d.ts +25 -3
  88. package/dist/src/analysis/index.d.ts.map +1 -1
  89. package/dist/src/analysis/index.js +45 -3
  90. package/dist/src/analysis/index.js.map +1 -1
  91. package/dist/src/analysis/language-detector.d.ts +92 -0
  92. package/dist/src/analysis/language-detector.d.ts.map +1 -0
  93. package/dist/src/analysis/language-detector.js +602 -0
  94. package/dist/src/analysis/language-detector.js.map +1 -0
  95. package/dist/src/analysis/memory-monitor.d.ts +199 -0
  96. package/dist/src/analysis/memory-monitor.d.ts.map +1 -0
  97. package/dist/src/analysis/memory-monitor.js +271 -0
  98. package/dist/src/analysis/memory-monitor.js.map +1 -0
  99. package/dist/src/analysis/metrics.d.ts +300 -0
  100. package/dist/src/analysis/metrics.d.ts.map +1 -0
  101. package/dist/src/analysis/metrics.js +537 -0
  102. package/dist/src/analysis/metrics.js.map +1 -0
  103. package/dist/src/analysis/router.d.ts +264 -0
  104. package/dist/src/analysis/router.d.ts.map +1 -0
  105. package/dist/src/analysis/router.js +398 -0
  106. package/dist/src/analysis/router.js.map +1 -0
  107. package/dist/src/analysis/tree-cache.d.ts +208 -0
  108. package/dist/src/analysis/tree-cache.d.ts.map +1 -0
  109. package/dist/src/analysis/tree-cache.js +288 -0
  110. package/dist/src/analysis/tree-cache.js.map +1 -0
  111. package/dist/src/analysis/tree-sitter/manager.d.ts +141 -0
  112. package/dist/src/analysis/tree-sitter/manager.d.ts.map +1 -0
  113. package/dist/src/analysis/tree-sitter/manager.js +239 -0
  114. package/dist/src/analysis/tree-sitter/manager.js.map +1 -0
  115. package/dist/src/analysis/types.d.ts +69 -6
  116. package/dist/src/analysis/types.d.ts.map +1 -1
  117. package/dist/src/analysis/types.js +23 -2
  118. package/dist/src/analysis/types.js.map +1 -1
  119. package/dist/src/analysis/worker-pool.d.ts +141 -0
  120. package/dist/src/analysis/worker-pool.d.ts.map +1 -0
  121. package/dist/src/analysis/worker-pool.js +418 -0
  122. package/dist/src/analysis/worker-pool.js.map +1 -0
  123. package/dist/src/analytics/schema.d.ts +1 -1
  124. package/dist/src/analytics/schema.d.ts.map +1 -1
  125. package/dist/src/analytics/schema.js +72 -0
  126. package/dist/src/analytics/schema.js.map +1 -1
  127. package/dist/src/api/cache.d.ts +24 -1
  128. package/dist/src/api/cache.d.ts.map +1 -1
  129. package/dist/src/api/cache.js +50 -2
  130. package/dist/src/api/cache.js.map +1 -1
  131. package/dist/src/api/client.d.ts +132 -2
  132. package/dist/src/api/client.d.ts.map +1 -1
  133. package/dist/src/api/client.js +214 -18
  134. package/dist/src/api/client.js.map +1 -1
  135. package/dist/src/api/index.d.ts +2 -0
  136. package/dist/src/api/index.d.ts.map +1 -1
  137. package/dist/src/api/index.js +7 -0
  138. package/dist/src/api/index.js.map +1 -1
  139. package/dist/src/api/types.d.ts +251 -0
  140. package/dist/src/api/types.d.ts.map +1 -0
  141. package/dist/src/api/types.js +9 -0
  142. package/dist/src/api/types.js.map +1 -0
  143. package/dist/src/benchmarks/memory/MemoryProfiler.d.ts.map +1 -1
  144. package/dist/src/benchmarks/memory/MemoryProfiler.js.map +1 -1
  145. package/dist/src/embeddings/index.d.ts.map +1 -1
  146. package/dist/src/embeddings/index.js.map +1 -1
  147. package/dist/src/errors.d.ts +1 -0
  148. package/dist/src/errors.d.ts.map +1 -1
  149. package/dist/src/errors.js +1 -0
  150. package/dist/src/errors.js.map +1 -1
  151. package/dist/src/index.d.ts +3 -3
  152. package/dist/src/index.d.ts.map +1 -1
  153. package/dist/src/index.js +4 -4
  154. package/dist/src/index.js.map +1 -1
  155. package/dist/src/repositories/IndexerRepository.d.ts.map +1 -1
  156. package/dist/src/repositories/IndexerRepository.js +1 -0
  157. package/dist/src/repositories/IndexerRepository.js.map +1 -1
  158. package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
  159. package/dist/src/repositories/SkillRepository.js +1 -0
  160. package/dist/src/repositories/SkillRepository.js.map +1 -1
  161. package/dist/src/repositories/quarantine/QuarantineRepository.d.ts.map +1 -1
  162. package/dist/src/repositories/quarantine/QuarantineRepository.js.map +1 -1
  163. package/dist/src/repositories/quarantine/query-builder.d.ts.map +1 -1
  164. package/dist/src/repositories/quarantine/query-builder.js +1 -1
  165. package/dist/src/repositories/quarantine/query-builder.js.map +1 -1
  166. package/dist/src/scripts/__tests__/scan-imported-skills.test.js +3 -3
  167. package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
  168. package/dist/src/scripts/github-import/index.js.map +1 -1
  169. package/dist/src/scripts/import-github-skills.js +1 -1
  170. package/dist/src/scripts/import-github-skills.js.map +1 -1
  171. package/dist/src/scripts/skill-scanner/reporter.d.ts.map +1 -1
  172. package/dist/src/scripts/skill-scanner/reporter.js.map +1 -1
  173. package/dist/src/scripts/skill-scanner/scanner.d.ts.map +1 -1
  174. package/dist/src/scripts/skill-scanner/scanner.js.map +1 -1
  175. package/dist/src/scripts/skill-scanner/trust-scorer.d.ts.map +1 -1
  176. package/dist/src/scripts/skill-scanner/trust-scorer.js.map +1 -1
  177. package/dist/src/scripts/validation/index.js +1 -2
  178. package/dist/src/scripts/validation/index.js.map +1 -1
  179. package/dist/src/scripts/validation/pipeline.d.ts.map +1 -1
  180. package/dist/src/scripts/validation/pipeline.js.map +1 -1
  181. package/dist/src/scripts/validation/types.d.ts +2 -2
  182. package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -1
  183. package/dist/src/security/scanner/SecurityScanner.js.map +1 -1
  184. package/dist/src/services/SearchService.d.ts.map +1 -1
  185. package/dist/src/services/SearchService.js +1 -0
  186. package/dist/src/services/SearchService.js.map +1 -1
  187. package/dist/src/session/SessionHealthMonitor.d.ts +1 -1
  188. package/dist/src/session/SessionHealthMonitor.d.ts.map +1 -1
  189. package/dist/src/session/SessionHealthMonitor.js +1 -1
  190. package/dist/src/session/SessionHealthMonitor.js.map +1 -1
  191. package/dist/src/telemetry/index.d.ts +1 -1
  192. package/dist/src/telemetry/index.d.ts.map +1 -1
  193. package/dist/src/telemetry/index.js +2 -2
  194. package/dist/src/telemetry/index.js.map +1 -1
  195. package/dist/src/telemetry/posthog.d.ts +27 -5
  196. package/dist/src/telemetry/posthog.d.ts.map +1 -1
  197. package/dist/src/telemetry/posthog.js +20 -5
  198. package/dist/src/telemetry/posthog.js.map +1 -1
  199. package/dist/src/types/skill.d.ts +3 -0
  200. package/dist/src/types/skill.d.ts.map +1 -1
  201. package/dist/src/types.d.ts +2 -1
  202. package/dist/src/types.d.ts.map +1 -1
  203. package/dist/src/types.js +2 -2
  204. package/dist/src/types.js.map +1 -1
  205. package/dist/tests/adapters-factory.test.d.ts +13 -0
  206. package/dist/tests/adapters-factory.test.d.ts.map +1 -0
  207. package/dist/tests/adapters-factory.test.js +308 -0
  208. package/dist/tests/adapters-factory.test.js.map +1 -0
  209. package/dist/tests/adapters-java.test.d.ts +13 -0
  210. package/dist/tests/adapters-java.test.d.ts.map +1 -0
  211. package/dist/tests/adapters-java.test.js +925 -0
  212. package/dist/tests/adapters-java.test.js.map +1 -0
  213. package/dist/tests/api/client.validation.test.d.ts +7 -0
  214. package/dist/tests/api/client.validation.test.d.ts.map +1 -0
  215. package/dist/tests/api/client.validation.test.js +183 -0
  216. package/dist/tests/api/client.validation.test.js.map +1 -0
  217. package/dist/tests/language-detector.test.d.ts +13 -0
  218. package/dist/tests/language-detector.test.d.ts.map +1 -0
  219. package/dist/tests/language-detector.test.js +674 -0
  220. package/dist/tests/language-detector.test.js.map +1 -0
  221. package/dist/tests/telemetry/posthog.test.d.ts +13 -0
  222. package/dist/tests/telemetry/posthog.test.d.ts.map +1 -0
  223. package/dist/tests/telemetry/posthog.test.js +600 -0
  224. package/dist/tests/telemetry/posthog.test.js.map +1 -0
  225. package/package.json +5 -6
  226. package/dist/src/security/RateLimiter.d.ts +0 -337
  227. package/dist/src/security/RateLimiter.d.ts.map +0 -1
  228. package/dist/src/security/RateLimiter.js +0 -782
  229. package/dist/src/security/RateLimiter.js.map +0 -1
  230. package/dist/src/security/scanner.d.ts +0 -151
  231. package/dist/src/security/scanner.d.ts.map +0 -1
  232. package/dist/src/security/scanner.js +0 -599
  233. package/dist/src/security/scanner.js.map +0 -1
@@ -0,0 +1,239 @@
1
+ /**
2
+ * SMI-1303: Tree-sitter Parser Manager
3
+ *
4
+ * Manages tree-sitter parser instances with lazy loading.
5
+ * Uses web-tree-sitter (WASM) to avoid native module conflicts.
6
+ *
7
+ * @see docs/architecture/multi-language-analysis.md
8
+ * @see ADR-002: Docker glibc Requirement
9
+ * @module analysis/tree-sitter/manager
10
+ */
11
+ /**
12
+ * Manages tree-sitter parser instances with lazy loading
13
+ *
14
+ * Parsers are loaded on-demand and cached for reuse.
15
+ * Uses WASM-based web-tree-sitter to avoid native module issues.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const manager = new TreeSitterManager()
20
+ * const parser = await manager.getParser('python')
21
+ * const tree = parser.parse('def main(): pass')
22
+ * manager.dispose()
23
+ * ```
24
+ */
25
+ export class TreeSitterManager {
26
+ parsers = new Map();
27
+ loading = new Map();
28
+ maxParsers;
29
+ initialized = false;
30
+ initPromise = null;
31
+ ParserClass = null;
32
+ // SMI-1333: Track access order for proper LRU eviction
33
+ accessOrder = [];
34
+ constructor(options = {}) {
35
+ this.maxParsers = options.maxParsers ?? 6;
36
+ }
37
+ /**
38
+ * SMI-1333: Update access order for LRU tracking
39
+ * Moves the accessed language to the end (most recently used)
40
+ */
41
+ updateAccessOrder(language) {
42
+ const index = this.accessOrder.indexOf(language);
43
+ if (index > -1) {
44
+ this.accessOrder.splice(index, 1);
45
+ }
46
+ this.accessOrder.push(language);
47
+ }
48
+ /**
49
+ * Initialize web-tree-sitter (must be called before first use)
50
+ *
51
+ * This initializes the WASM runtime. Called automatically by getParser().
52
+ */
53
+ async initialize() {
54
+ if (this.initialized)
55
+ return;
56
+ if (this.initPromise) {
57
+ await this.initPromise;
58
+ return;
59
+ }
60
+ this.initPromise = this.doInitialize();
61
+ await this.initPromise;
62
+ }
63
+ async doInitialize() {
64
+ try {
65
+ // Dynamic import for web-tree-sitter (WASM-based)
66
+ // @ts-expect-error - Optional dependency, may not have type declarations
67
+ const TreeSitter = await import('web-tree-sitter');
68
+ await TreeSitter.default.init();
69
+ this.ParserClass = TreeSitter.default;
70
+ this.initialized = true;
71
+ }
72
+ catch {
73
+ // Fallback: try native tree-sitter if WASM unavailable
74
+ try {
75
+ // @ts-expect-error - Optional dependency, may not have type declarations
76
+ const TreeSitterNative = await import('tree-sitter');
77
+ this.ParserClass = TreeSitterNative.default;
78
+ this.initialized = true;
79
+ }
80
+ catch {
81
+ throw new Error('tree-sitter is not available. Install web-tree-sitter or tree-sitter to enable multi-language analysis.');
82
+ }
83
+ }
84
+ }
85
+ /**
86
+ * Get parser for a language, loading if necessary
87
+ *
88
+ * Parsers are cached for reuse. If the maximum number of
89
+ * parsers is reached, the least recently used is evicted.
90
+ *
91
+ * @param language - Language to get parser for
92
+ * @returns Configured parser instance
93
+ * @throws Error if language is not supported or tree-sitter unavailable
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * const parser = await manager.getParser('python')
98
+ * const tree = parser.parse(pythonCode)
99
+ * ```
100
+ */
101
+ async getParser(language) {
102
+ // Ensure initialized
103
+ await this.initialize();
104
+ // Return cached parser
105
+ const cached = this.parsers.get(language);
106
+ if (cached) {
107
+ // SMI-1333: Update access order on cache hit
108
+ this.updateAccessOrder(language);
109
+ return cached;
110
+ }
111
+ // Return in-progress load
112
+ const loading = this.loading.get(language);
113
+ if (loading) {
114
+ return loading;
115
+ }
116
+ // Start new load
117
+ const loadPromise = this.loadParser(language);
118
+ this.loading.set(language, loadPromise);
119
+ try {
120
+ const parser = await loadPromise;
121
+ // SMI-1333: Evict LRU (first in accessOrder) if at capacity
122
+ if (this.parsers.size >= this.maxParsers) {
123
+ const lru = this.accessOrder.shift();
124
+ if (lru) {
125
+ const oldParser = this.parsers.get(lru);
126
+ oldParser?.delete();
127
+ this.parsers.delete(lru);
128
+ }
129
+ }
130
+ this.parsers.set(language, parser);
131
+ // SMI-1333: Track new parser in access order
132
+ this.updateAccessOrder(language);
133
+ return parser;
134
+ }
135
+ finally {
136
+ this.loading.delete(language);
137
+ }
138
+ }
139
+ /**
140
+ * Load a parser for a specific language
141
+ */
142
+ async loadParser(language) {
143
+ if (!this.ParserClass) {
144
+ throw new Error('TreeSitterManager not initialized. Call initialize() first.');
145
+ }
146
+ const parser = new this.ParserClass();
147
+ const languageModule = await this.loadLanguageModule(language);
148
+ parser.setLanguage(languageModule);
149
+ return parser;
150
+ }
151
+ /**
152
+ * Load the language module for tree-sitter
153
+ */
154
+ async loadLanguageModule(language) {
155
+ try {
156
+ switch (language) {
157
+ case 'typescript':
158
+ case 'javascript': {
159
+ // @ts-expect-error - Optional dependency, may not have type declarations
160
+ const mod = await import('tree-sitter-typescript');
161
+ // tree-sitter-typescript exports { typescript, tsx }
162
+ return mod.typescript;
163
+ }
164
+ case 'python': {
165
+ // @ts-expect-error - Optional dependency, may not have type declarations
166
+ const mod = await import('tree-sitter-python');
167
+ return mod.default;
168
+ }
169
+ case 'go': {
170
+ // @ts-expect-error - Optional dependency, may not have type declarations
171
+ const mod = await import('tree-sitter-go');
172
+ return mod.default;
173
+ }
174
+ case 'rust': {
175
+ // @ts-expect-error - Optional dependency, may not have type declarations
176
+ const mod = await import('tree-sitter-rust');
177
+ return mod.default;
178
+ }
179
+ case 'java': {
180
+ // @ts-expect-error - Optional dependency, may not have type declarations
181
+ const mod = await import('tree-sitter-java');
182
+ return mod.default;
183
+ }
184
+ default:
185
+ throw new Error(`Unsupported language: ${language}`);
186
+ }
187
+ }
188
+ catch (error) {
189
+ const err = error;
190
+ throw new Error(`Failed to load tree-sitter language module for ${language}: ${err.message}. ` +
191
+ `Make sure tree-sitter-${language} is installed.`);
192
+ }
193
+ }
194
+ /**
195
+ * Check if a language is available
196
+ *
197
+ * @param language - Language to check
198
+ * @returns True if the language can be loaded
199
+ */
200
+ async isLanguageAvailable(language) {
201
+ try {
202
+ await this.loadLanguageModule(language);
203
+ return true;
204
+ }
205
+ catch {
206
+ return false;
207
+ }
208
+ }
209
+ /**
210
+ * Get list of currently loaded languages
211
+ */
212
+ getLoadedLanguages() {
213
+ return Array.from(this.parsers.keys());
214
+ }
215
+ /**
216
+ * Clean up all parser resources
217
+ *
218
+ * Call this when the manager is no longer needed
219
+ * to free memory and WASM resources.
220
+ */
221
+ dispose() {
222
+ for (const parser of this.parsers.values()) {
223
+ try {
224
+ parser.delete();
225
+ }
226
+ catch {
227
+ // Ignore errors during cleanup
228
+ }
229
+ }
230
+ this.parsers.clear();
231
+ this.loading.clear();
232
+ // SMI-1333: Clear access order
233
+ this.accessOrder = [];
234
+ this.initialized = false;
235
+ this.initPromise = null;
236
+ this.ParserClass = null;
237
+ }
238
+ }
239
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../src/analysis/tree-sitter/manager.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,39 @@
1
1
  /**
2
2
  * SMI-600: Codebase Analysis Types
3
3
  * SMI-1189: Extracted from CodebaseAnalyzer.ts
4
+ * SMI-1303: Extended with multi-language support
4
5
  *
5
- * Type definitions for codebase analysis functionality.
6
+ * Type definitions for multi-language codebase analysis.
6
7
  *
7
8
  * @see ADR-010: Codebase Analysis Scope
9
+ * @see docs/architecture/multi-language-analysis.md
10
+ * @module analysis/types
8
11
  */
9
12
  /**
10
- * Supported file extensions for analysis
13
+ * Supported languages for multi-language analysis
14
+ */
15
+ export type SupportedLanguage = 'typescript' | 'javascript' | 'python' | 'go' | 'rust' | 'java';
16
+ /**
17
+ * Supported file extensions for analysis (legacy, for backwards compatibility)
11
18
  */
12
19
  export declare const SUPPORTED_EXTENSIONS: string[];
20
+ /**
21
+ * Multi-language file extensions mapping
22
+ */
23
+ export declare const LANGUAGE_EXTENSIONS: Record<SupportedLanguage, string[]>;
13
24
  /**
14
25
  * Default directories to exclude from analysis
15
26
  */
16
27
  export declare const DEFAULT_EXCLUDE_DIRS: string[];
28
+ /**
29
+ * Export kind enumeration (extended for multi-language)
30
+ */
31
+ export type ExportKind = 'function' | 'class' | 'variable' | 'type' | 'interface' | 'enum' | 'struct' | 'trait' | 'module' | 'unknown';
17
32
  /**
18
33
  * Import information extracted from source files
19
34
  */
20
35
  export interface ImportInfo {
21
- /** Module specifier (e.g., 'react', './utils') */
36
+ /** Module specifier (e.g., 'react', './utils', 'os') */
22
37
  module: string;
23
38
  /** Named imports (e.g., ['useState', 'useEffect']) */
24
39
  namedImports: string[];
@@ -30,6 +45,10 @@ export interface ImportInfo {
30
45
  isTypeOnly: boolean;
31
46
  /** Source file where import was found */
32
47
  sourceFile: string;
48
+ /** Source language */
49
+ language?: SupportedLanguage;
50
+ /** Line number */
51
+ line?: number;
33
52
  }
34
53
  /**
35
54
  * Export information extracted from source files
@@ -37,12 +56,18 @@ export interface ImportInfo {
37
56
  export interface ExportInfo {
38
57
  /** Exported name */
39
58
  name: string;
40
- /** Kind of export (function, class, variable, type, interface) */
41
- kind: 'function' | 'class' | 'variable' | 'type' | 'interface' | 'enum' | 'unknown';
59
+ /** Kind of export (function, class, variable, type, interface, etc.) */
60
+ kind: ExportKind;
42
61
  /** Whether this is a default export */
43
62
  isDefault: boolean;
44
63
  /** Source file where export was found */
45
64
  sourceFile: string;
65
+ /** Source language */
66
+ language?: SupportedLanguage;
67
+ /** Visibility (for Go, Rust, Java) */
68
+ visibility?: 'public' | 'private' | 'protected' | 'internal';
69
+ /** Line number */
70
+ line?: number;
46
71
  }
47
72
  /**
48
73
  * Function information extracted from source files
@@ -60,6 +85,14 @@ export interface FunctionInfo {
60
85
  sourceFile: string;
61
86
  /** Line number */
62
87
  line: number;
88
+ /** Source language */
89
+ language?: SupportedLanguage;
90
+ /** Method receiver (Go) */
91
+ receiver?: string;
92
+ /** Decorators (Python, Java) */
93
+ decorators?: string[];
94
+ /** Attributes (Rust) */
95
+ attributes?: string[];
63
96
  }
64
97
  /**
65
98
  * Detected framework information
@@ -97,7 +130,7 @@ export interface CodebaseContext {
97
130
  functions: FunctionInfo[];
98
131
  /** Detected frameworks */
99
132
  frameworks: FrameworkInfo[];
100
- /** Dependencies from package.json */
133
+ /** Dependencies from all package managers */
101
134
  dependencies: DependencyInfo[];
102
135
  /** File statistics */
103
136
  stats: {
@@ -105,6 +138,8 @@ export interface CodebaseContext {
105
138
  totalFiles: number;
106
139
  /** Files by extension */
107
140
  filesByExtension: Record<string, number>;
141
+ /** Files by language (optional for backward compatibility) */
142
+ filesByLanguage?: Record<SupportedLanguage, number>;
108
143
  /** Total lines of code (approximate) */
109
144
  totalLines: number;
110
145
  };
@@ -114,6 +149,10 @@ export interface CodebaseContext {
114
149
  durationMs: number;
115
150
  /** Analyzer version */
116
151
  version: string;
152
+ /** Languages detected (optional for backward compatibility) */
153
+ languages?: SupportedLanguage[];
154
+ /** Cache hit rate (0-1, optional for backward compatibility) */
155
+ cacheHitRate?: number;
117
156
  };
118
157
  }
119
158
  /**
@@ -135,4 +174,28 @@ export interface ParseResult {
135
174
  exports: ExportInfo[];
136
175
  functions: FunctionInfo[];
137
176
  }
177
+ /**
178
+ * Framework detection rule
179
+ */
180
+ export interface FrameworkRule {
181
+ /** Framework name */
182
+ name: string;
183
+ /** Dependency indicators (package names) */
184
+ depIndicators: string[];
185
+ /** Import indicators (module specifiers) */
186
+ importIndicators: string[];
187
+ }
188
+ /**
189
+ * Cache statistics
190
+ */
191
+ export interface CacheStats {
192
+ /** Current size in bytes */
193
+ size: number;
194
+ /** Number of entries */
195
+ entries: number;
196
+ /** Maximum size in bytes */
197
+ maxSize: number;
198
+ /** Cache hit rate (0-1) */
199
+ hitRate: number;
200
+ }
138
201
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/analysis/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/analysis/types.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,29 @@
1
1
  /**
2
2
  * SMI-600: Codebase Analysis Types
3
3
  * SMI-1189: Extracted from CodebaseAnalyzer.ts
4
+ * SMI-1303: Extended with multi-language support
4
5
  *
5
- * Type definitions for codebase analysis functionality.
6
+ * Type definitions for multi-language codebase analysis.
6
7
  *
7
8
  * @see ADR-010: Codebase Analysis Scope
9
+ * @see docs/architecture/multi-language-analysis.md
10
+ * @module analysis/types
8
11
  */
9
12
  /**
10
- * Supported file extensions for analysis
13
+ * Supported file extensions for analysis (legacy, for backwards compatibility)
11
14
  */
12
15
  export const SUPPORTED_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'];
16
+ /**
17
+ * Multi-language file extensions mapping
18
+ */
19
+ export const LANGUAGE_EXTENSIONS = {
20
+ typescript: ['.ts', '.tsx', '.mts', '.cts'],
21
+ javascript: ['.js', '.jsx', '.mjs', '.cjs'],
22
+ python: ['.py', '.pyi', '.pyw'],
23
+ go: ['.go'],
24
+ rust: ['.rs'],
25
+ java: ['.java'],
26
+ };
13
27
  /**
14
28
  * Default directories to exclude from analysis
15
29
  */
@@ -21,5 +35,12 @@ export const DEFAULT_EXCLUDE_DIRS = [
21
35
  'coverage',
22
36
  '.next',
23
37
  '.nuxt',
38
+ '__pycache__',
39
+ '.pytest_cache',
40
+ 'target',
41
+ 'vendor',
42
+ 'venv',
43
+ '.venv',
44
+ 'env',
24
45
  ];
25
46
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/analysis/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAElF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,cAAc;IACd,MAAM;IACN,OAAO;IACP,MAAM;IACN,UAAU;IACV,OAAO;IACP,OAAO;CACR,CAAA"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/analysis/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAElF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAwC;IACtE,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IAC3C,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IAC3C,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;IAC/B,EAAE,EAAE,CAAC,KAAK,CAAC;IACX,IAAI,EAAE,CAAC,KAAK,CAAC;IACb,IAAI,EAAE,CAAC,OAAO,CAAC;CAChB,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,cAAc;IACd,MAAM;IACN,OAAO;IACP,MAAM;IACN,UAAU;IACV,OAAO;IACP,OAAO;IACP,aAAa;IACb,eAAe;IACf,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,OAAO;IACP,KAAK;CACN,CAAA"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * SMI-1308: Worker Thread Pool for Parallel File Parsing
3
+ * SMI-1337: Added metrics integration
4
+ *
5
+ * Uses Node.js worker_threads for true parallelism,
6
+ * bypassing the single-threaded event loop limitation.
7
+ *
8
+ * @see docs/architecture/multi-language-analysis.md
9
+ * @module analysis/worker-pool
10
+ */
11
+ import { isMainThread, parentPort, workerData } from 'worker_threads';
12
+ import { EventEmitter } from 'events';
13
+ import type { ParseResult } from './types.js';
14
+ import { type AnalysisMetrics } from './metrics.js';
15
+ /**
16
+ * Task to be parsed by a worker
17
+ */
18
+ export interface ParseTask {
19
+ /** Path to the file */
20
+ filePath: string;
21
+ /** File content to parse */
22
+ content: string;
23
+ /** Programming language */
24
+ language: string;
25
+ }
26
+ /**
27
+ * Result from a worker parse operation
28
+ */
29
+ export interface WorkerResult {
30
+ /** Path to the file */
31
+ filePath: string;
32
+ /** Parse result */
33
+ result: ParseResult;
34
+ /** Time taken to parse in milliseconds */
35
+ durationMs: number;
36
+ /** Error message if parsing failed */
37
+ error?: string;
38
+ }
39
+ /**
40
+ * Options for ParserWorkerPool
41
+ */
42
+ export interface WorkerPoolOptions {
43
+ /** Number of workers in pool (default: CPU cores - 1) */
44
+ poolSize?: number;
45
+ /** Minimum batch size to use workers (default: 10) */
46
+ minBatchForWorkers?: number;
47
+ /** Custom metrics instance (uses default if not provided) */
48
+ metrics?: AnalysisMetrics;
49
+ }
50
+ export declare class ParserWorkerPool extends EventEmitter {
51
+ private workers;
52
+ private taskQueue;
53
+ private activeWorkers;
54
+ private readonly poolSize;
55
+ private readonly minBatchForWorkers;
56
+ private readonly metrics;
57
+ private disposed;
58
+ private router;
59
+ private routerPromise;
60
+ constructor(options?: WorkerPoolOptions);
61
+ /**
62
+ * SMI-1330/1331: Get or create shared router instance
63
+ * Lazily initializes the router on first use and caches it
64
+ */
65
+ private getRouter;
66
+ /**
67
+ * SMI-1330/1331: Initialize router with all adapters
68
+ */
69
+ private initializeRouter;
70
+ /**
71
+ * Parse files in parallel using worker threads
72
+ *
73
+ * SMI-1337: Records worker pool metrics.
74
+ *
75
+ * @param tasks - Array of parse tasks
76
+ * @returns Array of worker results
77
+ * @throws Error if pool has been disposed
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * const results = await pool.parseFiles([
82
+ * { filePath: 'a.ts', content: 'export const a = 1', language: 'typescript' },
83
+ * { filePath: 'b.ts', content: 'export const b = 2', language: 'typescript' },
84
+ * ])
85
+ * ```
86
+ */
87
+ parseFiles(tasks: ParseTask[]): Promise<WorkerResult[]>;
88
+ /**
89
+ * Record parse metrics for completed results
90
+ * SMI-1337: Helper to record metrics after parsing
91
+ */
92
+ private recordParseMetrics;
93
+ /**
94
+ * Get language from file extension
95
+ * SMI-1337: Helper for metrics
96
+ */
97
+ private getLanguageFromExtension;
98
+ /**
99
+ * Parse files inline (no workers)
100
+ *
101
+ * Used for small batches where worker overhead exceeds benefit.
102
+ * SMI-1330/1331: Uses cached router to avoid recreation overhead
103
+ */
104
+ private parseInline;
105
+ /**
106
+ * Parse files using worker threads
107
+ *
108
+ * Chunks tasks across available workers for parallel processing.
109
+ */
110
+ private parseWithWorkers;
111
+ /**
112
+ * Dispatch a chunk of tasks to a worker
113
+ */
114
+ private dispatchToWorker;
115
+ /**
116
+ * Chunk an array into smaller arrays
117
+ */
118
+ private chunkArray;
119
+ /**
120
+ * Get pool statistics
121
+ *
122
+ * SMI-1337: Also updates metrics.
123
+ *
124
+ * @returns Current pool statistics
125
+ */
126
+ getStats(): {
127
+ poolSize: number;
128
+ activeWorkers: number;
129
+ queuedTasks: number;
130
+ utilization: number;
131
+ };
132
+ /**
133
+ * Dispose of worker pool
134
+ *
135
+ * Terminates all workers and clears the task queue.
136
+ * SMI-1330/1331: Also disposes cached router
137
+ */
138
+ dispose(): void;
139
+ }
140
+ export { isMainThread, parentPort, workerData };
141
+ //# sourceMappingURL=worker-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-pool.d.ts","sourceRoot":"","sources":["../../../src/analysis/worker-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAU,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE7E,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAA;AAEvE;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,mBAAmB;IACnB,MAAM,EAAE,WAAW,CAAA;IACnB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAA;IAClB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,sDAAsD;IACtD,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,eAAe,CAAA;CAC1B;AA8BD,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,SAAS,CAIV;IACP,OAAO,CAAC,aAAa,CAAI;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAQ;IAExB,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,aAAa,CAA2C;gBAEpD,OAAO,GAAE,iBAAsB;IAO3C;;;OAGG;YACW,SAAS;IASvB;;OAEG;YACW,gBAAgB;IAkB9B;;;;;;;;;;;;;;;;OAgBG;IACG,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAwB7D;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAqBhC;;;;;OAKG;YACW,WAAW;IAsCzB;;;;OAIG;YACW,gBAAgB;IAU9B;;OAEG;YACW,gBAAgB;IAyK9B;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;;;;;OAMG;IACH,QAAQ,IAAI;QACV,QAAQ,EAAE,MAAM,CAAA;QAChB,aAAa,EAAE,MAAM,CAAA;QACrB,WAAW,EAAE,MAAM,CAAA;QACnB,WAAW,EAAE,MAAM,CAAA;KACpB;IAcD;;;;;OAKG;IACH,OAAO,IAAI,IAAI;CAchB;AAGD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,CAAA"}