@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,247 @@
1
+ /**
2
+ * SMI-1309: Incremental Parsing Support
3
+ *
4
+ * Edit tracking utilities for multi-language AST analysis.
5
+ * Enables efficient incremental parsing by detecting minimal
6
+ * edit regions between old and new content.
7
+ *
8
+ * @see docs/architecture/multi-language-analysis.md
9
+ * @module analysis/incremental
10
+ */
11
+ /**
12
+ * Calculate file edit from content diff
13
+ *
14
+ * Converts a simple diff into the format required by
15
+ * tree-sitter's incremental parsing API.
16
+ *
17
+ * @param oldContent - Original file content
18
+ * @param newContent - Updated file content
19
+ * @param changeStart - Start index of the change
20
+ * @param changeEnd - End index in old content
21
+ * @param newText - Replacement text
22
+ * @returns FileEdit structure for tree-sitter
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const edit = calculateEdit(
27
+ * 'hello world',
28
+ * 'hello there world',
29
+ * 6, // after 'hello '
30
+ * 6, // no text removed
31
+ * 'there ' // inserted text
32
+ * )
33
+ * tree.edit(edit)
34
+ * ```
35
+ */
36
+ export function calculateEdit(oldContent, newContent, changeStart, changeEnd, newText) {
37
+ const startPosition = indexToPosition(oldContent, changeStart);
38
+ const oldEndPosition = indexToPosition(oldContent, changeEnd);
39
+ const newEndPosition = indexToPosition(newContent, changeStart + newText.length);
40
+ return {
41
+ startIndex: changeStart,
42
+ oldEndIndex: changeEnd,
43
+ newEndIndex: changeStart + newText.length,
44
+ startPosition,
45
+ oldEndPosition,
46
+ newEndPosition,
47
+ };
48
+ }
49
+ /**
50
+ * Convert byte index to row/column position
51
+ *
52
+ * Scans through content counting newlines to determine
53
+ * the row and column for a given byte offset.
54
+ *
55
+ * @param content - File content to scan
56
+ * @param index - Byte offset to convert
57
+ * @returns Position with row and column (both zero-based)
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * const pos = indexToPosition('hello\nworld', 8)
62
+ * // pos = { row: 1, column: 2 } (the 'r' in 'world')
63
+ * ```
64
+ */
65
+ export function indexToPosition(content, index) {
66
+ let row = 0;
67
+ let column = 0;
68
+ const limit = Math.min(index, content.length);
69
+ for (let i = 0; i < limit; i++) {
70
+ if (content[i] === '\n') {
71
+ row++;
72
+ column = 0;
73
+ }
74
+ else {
75
+ column++;
76
+ }
77
+ }
78
+ return { row, column };
79
+ }
80
+ /**
81
+ * Convert row/column position to byte index
82
+ *
83
+ * Scans through content to find the byte offset for
84
+ * a given row and column position.
85
+ *
86
+ * @param content - File content to scan
87
+ * @param position - Position to convert
88
+ * @returns Byte offset, or content length if position is past end
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * const index = positionToIndex('hello\nworld', { row: 1, column: 2 })
93
+ * // index = 8 (the 'r' in 'world')
94
+ * ```
95
+ */
96
+ export function positionToIndex(content, position) {
97
+ let currentRow = 0;
98
+ let currentColumn = 0;
99
+ for (let i = 0; i < content.length; i++) {
100
+ if (currentRow === position.row && currentColumn === position.column) {
101
+ return i;
102
+ }
103
+ if (content[i] === '\n') {
104
+ currentRow++;
105
+ currentColumn = 0;
106
+ }
107
+ else {
108
+ currentColumn++;
109
+ }
110
+ }
111
+ return content.length;
112
+ }
113
+ /**
114
+ * Find the minimal edit between two strings
115
+ *
116
+ * Uses a simple prefix/suffix matching algorithm to find
117
+ * the smallest region that changed between old and new content.
118
+ * Returns null if contents are identical.
119
+ *
120
+ * @param oldContent - Original string
121
+ * @param newContent - Modified string
122
+ * @returns EditDiff describing the change, or null if identical
123
+ *
124
+ * @example
125
+ * ```typescript
126
+ * const diff = findMinimalEdit('hello world', 'hello there world')
127
+ * // diff = { changeStart: 6, changeEnd: 6, newText: 'there ' }
128
+ *
129
+ * const same = findMinimalEdit('hello', 'hello')
130
+ * // same = null
131
+ * ```
132
+ */
133
+ export function findMinimalEdit(oldContent, newContent) {
134
+ if (oldContent === newContent) {
135
+ return null;
136
+ }
137
+ // Find common prefix length
138
+ let prefixLength = 0;
139
+ const minLength = Math.min(oldContent.length, newContent.length);
140
+ while (prefixLength < minLength && oldContent[prefixLength] === newContent[prefixLength]) {
141
+ prefixLength++;
142
+ }
143
+ // Find common suffix length (after prefix)
144
+ let oldSuffixStart = oldContent.length;
145
+ let newSuffixStart = newContent.length;
146
+ while (oldSuffixStart > prefixLength &&
147
+ newSuffixStart > prefixLength &&
148
+ oldContent[oldSuffixStart - 1] === newContent[newSuffixStart - 1]) {
149
+ oldSuffixStart--;
150
+ newSuffixStart--;
151
+ }
152
+ return {
153
+ changeStart: prefixLength,
154
+ changeEnd: oldSuffixStart,
155
+ newText: newContent.slice(prefixLength, newSuffixStart),
156
+ };
157
+ }
158
+ /**
159
+ * Merge multiple edits into a single encompassing edit
160
+ *
161
+ * Useful when multiple small edits occur and need to be
162
+ * applied as a single incremental update.
163
+ *
164
+ * Note: This is a simplistic merge that finds the bounding
165
+ * region. It may over-invalidate if edits are far apart.
166
+ *
167
+ * @param edits - Array of edits to merge
168
+ * @returns Single merged edit, or null if array is empty
169
+ *
170
+ * @example
171
+ * ```typescript
172
+ * const merged = batchEdits([
173
+ * { changeStart: 0, changeEnd: 5, newText: 'HELLO' },
174
+ * { changeStart: 10, changeEnd: 15, newText: 'WORLD' }
175
+ * ])
176
+ * // merged encompasses both edit regions
177
+ * ```
178
+ */
179
+ export function batchEdits(edits) {
180
+ if (edits.length === 0) {
181
+ return null;
182
+ }
183
+ if (edits.length === 1) {
184
+ return edits[0];
185
+ }
186
+ // Sort by start position
187
+ const sorted = [...edits].sort((a, b) => a.changeStart - b.changeStart);
188
+ // Find the bounding box of all edits
189
+ let minStart = sorted[0].changeStart;
190
+ let maxEnd = sorted[0].changeEnd;
191
+ let combinedNewText = '';
192
+ let lastEnd = sorted[0].changeStart;
193
+ for (const edit of sorted) {
194
+ // Check for gaps between edits
195
+ if (edit.changeStart > lastEnd) {
196
+ // Gap exists - this is a complex case
197
+ // For simplicity, we merge anyway and note it may over-invalidate
198
+ }
199
+ minStart = Math.min(minStart, edit.changeStart);
200
+ maxEnd = Math.max(maxEnd, edit.changeEnd);
201
+ combinedNewText += edit.newText;
202
+ lastEnd = edit.changeEnd;
203
+ }
204
+ return {
205
+ changeStart: minStart,
206
+ changeEnd: maxEnd,
207
+ newText: combinedNewText,
208
+ };
209
+ }
210
+ /**
211
+ * Check if an edit is a simple insertion (no deletion)
212
+ *
213
+ * @param edit - Edit to check
214
+ * @returns True if edit only inserts text
215
+ */
216
+ export function isInsertion(edit) {
217
+ return edit.changeStart === edit.changeEnd && edit.newText.length > 0;
218
+ }
219
+ /**
220
+ * Check if an edit is a simple deletion (no insertion)
221
+ *
222
+ * @param edit - Edit to check
223
+ * @returns True if edit only deletes text
224
+ */
225
+ export function isDeletion(edit) {
226
+ return edit.changeStart < edit.changeEnd && edit.newText.length === 0;
227
+ }
228
+ /**
229
+ * Check if an edit is a replacement (both deletion and insertion)
230
+ *
231
+ * @param edit - Edit to check
232
+ * @returns True if edit replaces text
233
+ */
234
+ export function isReplacement(edit) {
235
+ return edit.changeStart < edit.changeEnd && edit.newText.length > 0;
236
+ }
237
+ /**
238
+ * Calculate the size delta of an edit
239
+ *
240
+ * @param edit - Edit to analyze
241
+ * @returns Positive for growth, negative for shrinkage, zero for same size
242
+ */
243
+ export function editSizeDelta(edit) {
244
+ const deletedLength = edit.changeEnd - edit.changeStart;
245
+ return edit.newText.length - deletedLength;
246
+ }
247
+ //# sourceMappingURL=incremental.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incremental.js","sourceRoot":"","sources":["../../../src/analysis/incremental.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,37 @@
1
1
  /**
2
2
  * SMI-600: Codebase Analysis Module
3
3
  * SMI-1189: Updated to export from split modules
4
+ * SMI-1303: Extended with multi-language support
5
+ * SMI-1337: Added metrics and telemetry
4
6
  *
5
- * Provides tools for analyzing TypeScript/JavaScript codebases
7
+ * Provides tools for analyzing multi-language codebases
6
8
  * to extract context for skill recommendations.
7
9
  *
8
10
  * @see ADR-010: Codebase Analysis Scope
11
+ * @see docs/architecture/multi-language-analysis.md
9
12
  */
10
13
  export { CodebaseAnalyzer } from './CodebaseAnalyzer.js';
11
14
  export { default } from './CodebaseAnalyzer.js';
12
- export { SUPPORTED_EXTENSIONS, DEFAULT_EXCLUDE_DIRS, type ImportInfo, type ExportInfo, type FunctionInfo, type FrameworkInfo, type DependencyInfo, type CodebaseContext, type AnalyzeOptions, type ParseResult, } from './types.js';
15
+ export { SUPPORTED_EXTENSIONS, DEFAULT_EXCLUDE_DIRS, LANGUAGE_EXTENSIONS, type SupportedLanguage, type ImportInfo, type ExportInfo, type ExportKind, type FunctionInfo, type FrameworkInfo, type FrameworkRule, type DependencyInfo, type CodebaseContext, type AnalyzeOptions, type ParseResult, type CacheStats, } from './types.js';
13
16
  export { parseFile, extractImport, extractExport, extractFunction } from './parsers.js';
14
- export { detectFrameworks, hasFramework, getPrimaryFramework, FRAMEWORK_RULES, type FrameworkRule, } from './framework-detector.js';
17
+ export { detectFrameworks, hasFramework, getPrimaryFramework, FRAMEWORK_RULES, } from './framework-detector.js';
18
+ export { LanguageRouter, type LanguageRouterOptions } from './router.js';
19
+ export { AdapterFactory } from './adapters/factory.js';
20
+ export { LanguageDetector, detectLanguage, type LanguageDetectionResult, } from './language-detector.js';
21
+ export { ParseCache, type ParseCacheOptions } from './cache.js';
22
+ export { ResultAggregator, type AggregatorInput, type AggregatorMetadata, type AggregatorOptions, } from './aggregator.js';
23
+ export { AnalysisMetrics, getAnalysisMetrics, initializeAnalysisMetrics, timeParseAsync, timeParseSync, type AnalysisMetricsConfig, type AnalysisMetricsSnapshot, } from './metrics.js';
24
+ export { TreeSitterManager, type TreeSitterManagerOptions, type TreeSitterParser, type TreeSitterTree, type TreeSitterNode, type TreeSitterLanguage, } from './tree-sitter/manager.js';
25
+ export { LanguageAdapter, type LanguageInfo } from './adapters/base.js';
26
+ export { TypeScriptAdapter } from './adapters/typescript.js';
27
+ export { PythonAdapter } from './adapters/python.js';
28
+ export { GoAdapter, parseGoMod, type GoModInfo, type GoExportInfo, type GoFunctionInfo, } from './adapters/go.js';
29
+ export { RustAdapter, parseCargoToml, type RustExportInfo, type RustFunctionInfo, type CargoDependency, } from './adapters/rust.js';
30
+ export { JavaAdapter, parsePomXml, parseBuildGradle, type JavaExportInfo, type JavaFunctionInfo, type MavenDependency, } from './adapters/java.js';
31
+ export { ParserWorkerPool, type ParseTask, type WorkerResult, type WorkerPoolOptions, } from './worker-pool.js';
32
+ export { MemoryMonitor, type MemoryStats, type CleanupResult, type MemoryMonitorOptions, } from './memory-monitor.js';
33
+ export { streamFiles, batchReadFiles, readFilesAsMap, filterByExtension, getFileExtension, estimateMemoryUsage, type FileContent, type StreamOptions, type BatchReadOptions, } from './file-streamer.js';
34
+ export { calculateEdit, indexToPosition, positionToIndex, findMinimalEdit, batchEdits, isInsertion, isDeletion, isReplacement, editSizeDelta, type Point, type FileEdit, type EditDiff, } from './incremental.js';
35
+ export { TreeCache, type CachedTree, type TreeCacheStats, type TreeCacheOptions, } from './tree-cache.js';
36
+ export { IncrementalParser, type IncrementalParseResult, type IncrementalParserOptions, type IncrementalParserStats, } from './incremental-parser.js';
15
37
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analysis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAG/C,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,WAAW,GACjB,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAGvF,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,KAAK,aAAa,GACnB,MAAM,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analysis/index.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,61 @@
1
1
  /**
2
2
  * SMI-600: Codebase Analysis Module
3
3
  * SMI-1189: Updated to export from split modules
4
+ * SMI-1303: Extended with multi-language support
5
+ * SMI-1337: Added metrics and telemetry
4
6
  *
5
- * Provides tools for analyzing TypeScript/JavaScript codebases
7
+ * Provides tools for analyzing multi-language codebases
6
8
  * to extract context for skill recommendations.
7
9
  *
8
10
  * @see ADR-010: Codebase Analysis Scope
11
+ * @see docs/architecture/multi-language-analysis.md
9
12
  */
10
13
  // Main analyzer class
11
14
  export { CodebaseAnalyzer } from './CodebaseAnalyzer.js';
12
15
  export { default } from './CodebaseAnalyzer.js';
13
- // Types and constants
14
- export { SUPPORTED_EXTENSIONS, DEFAULT_EXCLUDE_DIRS, } from './types.js';
16
+ // Types and constants (extended for multi-language support)
17
+ export {
18
+ // Constants
19
+ SUPPORTED_EXTENSIONS, DEFAULT_EXCLUDE_DIRS, LANGUAGE_EXTENSIONS, } from './types.js';
15
20
  // Parser functions
16
21
  export { parseFile, extractImport, extractExport, extractFunction } from './parsers.js';
17
22
  // Framework detection
18
23
  export { detectFrameworks, hasFramework, getPrimaryFramework, FRAMEWORK_RULES, } from './framework-detector.js';
24
+ // SMI-1303: Multi-language infrastructure
25
+ // Language router for dispatching to appropriate adapters
26
+ export { LanguageRouter } from './router.js';
27
+ // SMI-1339: Adapter Factory Pattern
28
+ export { AdapterFactory } from './adapters/factory.js';
29
+ // SMI-1340: Language Detection for extensionless files
30
+ export { LanguageDetector, detectLanguage, } from './language-detector.js';
31
+ // Parse result caching
32
+ export { ParseCache } from './cache.js';
33
+ // Result aggregation
34
+ export { ResultAggregator, } from './aggregator.js';
35
+ // SMI-1337: Analysis metrics and telemetry
36
+ export { AnalysisMetrics, getAnalysisMetrics, initializeAnalysisMetrics, timeParseAsync, timeParseSync, } from './metrics.js';
37
+ // Tree-sitter parser management
38
+ export { TreeSitterManager, } from './tree-sitter/manager.js';
39
+ // Language adapters
40
+ export { LanguageAdapter } from './adapters/base.js';
41
+ // Re-export specific adapters
42
+ export { TypeScriptAdapter } from './adapters/typescript.js';
43
+ export { PythonAdapter } from './adapters/python.js';
44
+ export { GoAdapter, parseGoMod, } from './adapters/go.js';
45
+ export { RustAdapter, parseCargoToml, } from './adapters/rust.js';
46
+ export { JavaAdapter, parsePomXml, parseBuildGradle, } from './adapters/java.js';
47
+ // SMI-1308: Performance optimization modules
48
+ // Worker thread pool for parallel file parsing
49
+ export { ParserWorkerPool, } from './worker-pool.js';
50
+ // Memory usage monitoring and cleanup
51
+ export { MemoryMonitor, } from './memory-monitor.js';
52
+ // Memory-efficient file streaming
53
+ export { streamFiles, batchReadFiles, readFilesAsMap, filterByExtension, getFileExtension, estimateMemoryUsage, } from './file-streamer.js';
54
+ // SMI-1309: Incremental Parsing & Tree Caching
55
+ // Edit tracking utilities
56
+ export { calculateEdit, indexToPosition, positionToIndex, findMinimalEdit, batchEdits, isInsertion, isDeletion, isReplacement, editSizeDelta, } from './incremental.js';
57
+ // Tree caching for incremental parsing
58
+ export { TreeCache, } from './tree-cache.js';
59
+ // Incremental parser coordinator
60
+ export { IncrementalParser, } from './incremental-parser.js';
19
61
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analysis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,sBAAsB;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAE/C,sBAAsB;AACtB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GASrB,MAAM,YAAY,CAAA;AAEnB,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEvF,sBAAsB;AACtB,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,eAAe,GAEhB,MAAM,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analysis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,sBAAsB;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAE/C,4DAA4D;AAC5D,OAAO;AACL,YAAY;AACZ,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,GAcpB,MAAM,YAAY,CAAA;AAEnB,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEvF,sBAAsB;AACtB,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,eAAe,GAChB,MAAM,yBAAyB,CAAA;AAEhC,0CAA0C;AAE1C,0DAA0D;AAC1D,OAAO,EAAE,cAAc,EAA8B,MAAM,aAAa,CAAA;AAExE,oCAAoC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,uDAAuD;AACvD,OAAO,EACL,gBAAgB,EAChB,cAAc,GAEf,MAAM,wBAAwB,CAAA;AAE/B,uBAAuB;AACvB,OAAO,EAAE,UAAU,EAA0B,MAAM,YAAY,CAAA;AAE/D,qBAAqB;AACrB,OAAO,EACL,gBAAgB,GAIjB,MAAM,iBAAiB,CAAA;AAExB,2CAA2C;AAC3C,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,yBAAyB,EACzB,cAAc,EACd,aAAa,GAGd,MAAM,cAAc,CAAA;AAErB,gCAAgC;AAChC,OAAO,EACL,iBAAiB,GAMlB,MAAM,0BAA0B,CAAA;AAEjC,oBAAoB;AACpB,OAAO,EAAE,eAAe,EAAqB,MAAM,oBAAoB,CAAA;AAEvE,8BAA8B;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EACL,SAAS,EACT,UAAU,GAIX,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,WAAW,EACX,cAAc,GAIf,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,WAAW,EACX,WAAW,EACX,gBAAgB,GAIjB,MAAM,oBAAoB,CAAA;AAE3B,6CAA6C;AAE7C,+CAA+C;AAC/C,OAAO,EACL,gBAAgB,GAIjB,MAAM,kBAAkB,CAAA;AAEzB,sCAAsC;AACtC,OAAO,EACL,aAAa,GAId,MAAM,qBAAqB,CAAA;AAE5B,kCAAkC;AAClC,OAAO,EACL,WAAW,EACX,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GAIpB,MAAM,oBAAoB,CAAA;AAE3B,+CAA+C;AAE/C,0BAA0B;AAC1B,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,EACf,eAAe,EACf,UAAU,EACV,WAAW,EACX,UAAU,EACV,aAAa,EACb,aAAa,GAId,MAAM,kBAAkB,CAAA;AAEzB,uCAAuC;AACvC,OAAO,EACL,SAAS,GAIV,MAAM,iBAAiB,CAAA;AAExB,iCAAiC;AACjC,OAAO,EACL,iBAAiB,GAIlB,MAAM,yBAAyB,CAAA"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * SMI-1340: Language Detection Heuristics
3
+ *
4
+ * Detects programming language of files without extensions using:
5
+ * - Shebang analysis (#!/usr/bin/python, #!/bin/bash, etc.)
6
+ * - Content patterns (import statements, syntax markers)
7
+ * - Magic bytes detection
8
+ * - Statistical analysis of keywords
9
+ *
10
+ * @see docs/architecture/multi-language-analysis.md
11
+ * @module analysis/language-detector
12
+ */
13
+ import type { SupportedLanguage } from './types.js';
14
+ /**
15
+ * Detection result with confidence score
16
+ */
17
+ export interface LanguageDetectionResult {
18
+ /** Detected language (null if unknown) */
19
+ language: SupportedLanguage | null;
20
+ /** Confidence score (0-1) */
21
+ confidence: number;
22
+ /** Detection method that succeeded */
23
+ method: 'shebang' | 'pattern' | 'magic' | 'statistical' | 'none';
24
+ /** Evidence for the detection */
25
+ evidence: string[];
26
+ }
27
+ /**
28
+ * Detects programming language from file content
29
+ *
30
+ * Uses multiple heuristics in order of reliability:
31
+ * 1. Shebang analysis (highest confidence)
32
+ * 2. Content patterns (high confidence)
33
+ * 3. Statistical keyword analysis (lower confidence)
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * const detector = new LanguageDetector()
38
+ *
39
+ * // Detect from shebang
40
+ * const result1 = detector.detect('#!/usr/bin/env python3\nprint("hello")')
41
+ * // { language: 'python', confidence: 1.0, method: 'shebang', evidence: ['shebang: #!/usr/bin/env python3'] }
42
+ *
43
+ * // Detect from patterns
44
+ * const result2 = detector.detect('fn main() {\n println!("Hello");\n}')
45
+ * // { language: 'rust', confidence: 0.85, method: 'pattern', evidence: ['function definition'] }
46
+ * ```
47
+ */
48
+ export declare class LanguageDetector {
49
+ /** Minimum confidence threshold for detection */
50
+ private minConfidence;
51
+ constructor(options?: {
52
+ minConfidence?: number;
53
+ });
54
+ /**
55
+ * Detect language from file content
56
+ *
57
+ * @param content - File content to analyze
58
+ * @returns Detection result with language, confidence, and evidence
59
+ */
60
+ detect(content: string): LanguageDetectionResult;
61
+ /**
62
+ * Detect language from shebang line
63
+ */
64
+ detectByShebang(content: string): LanguageDetectionResult;
65
+ /**
66
+ * Detect language from content patterns
67
+ */
68
+ detectByPatterns(content: string): LanguageDetectionResult;
69
+ /**
70
+ * Detect language by statistical keyword analysis
71
+ */
72
+ detectByStatistics(content: string): LanguageDetectionResult;
73
+ /**
74
+ * Get confidence threshold
75
+ */
76
+ getMinConfidence(): number;
77
+ /**
78
+ * Set confidence threshold
79
+ */
80
+ setMinConfidence(threshold: number): void;
81
+ }
82
+ /**
83
+ * Convenience function to detect language
84
+ *
85
+ * @param content - File content to analyze
86
+ * @param options - Detection options
87
+ * @returns Detection result
88
+ */
89
+ export declare function detectLanguage(content: string, options?: {
90
+ minConfidence?: number;
91
+ }): LanguageDetectionResult;
92
+ //# sourceMappingURL=language-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-detector.d.ts","sourceRoot":"","sources":["../../../src/analysis/language-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,0CAA0C;IAC1C,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAClC,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,sCAAsC;IACtC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,GAAG,MAAM,CAAA;IAChE,iCAAiC;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAyaD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,gBAAgB;IAC3B,iDAAiD;IACjD,OAAO,CAAC,aAAa,CAAQ;gBAEjB,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO;IAIpD;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB;IA4BhD;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB;IAqBzD;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB;IA6C1D;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB;IA0D5D;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAG1C;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC,uBAAuB,CAGzB"}