@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,602 @@
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
+ /**
14
+ * Shebang patterns for language detection
15
+ * Note: Order matters - more specific patterns should come first
16
+ */
17
+ const SHEBANG_PATTERNS = [
18
+ // TypeScript runners (more specific, must come before node)
19
+ { pattern: /^#!.*ts-node/i, language: 'typescript' },
20
+ { pattern: /^#!.*npx\s+tsx/i, language: 'typescript' },
21
+ { pattern: /^#!.*deno/i, language: 'typescript' },
22
+ { pattern: /^#!.*bun/i, language: 'typescript' },
23
+ // JavaScript/Node (general)
24
+ { pattern: /^#!.*node\b/i, language: 'javascript' },
25
+ { pattern: /^#!.*\/env\s+node\b/i, language: 'javascript' },
26
+ // Python
27
+ { pattern: /^#!.*python3?\b/i, language: 'python' },
28
+ { pattern: /^#!.*\/env\s+python\b/i, language: 'python' },
29
+ ];
30
+ const CONTENT_PATTERNS = [
31
+ // TypeScript specific
32
+ {
33
+ pattern: /^import\s+type\s+\{/m,
34
+ language: 'typescript',
35
+ weight: 0.9,
36
+ description: 'type-only import',
37
+ },
38
+ {
39
+ pattern: /:\s*(string|number|boolean|any|void|never)\b/m,
40
+ language: 'typescript',
41
+ weight: 0.7,
42
+ description: 'type annotation',
43
+ },
44
+ {
45
+ pattern: /interface\s+\w+\s*\{/m,
46
+ language: 'typescript',
47
+ weight: 0.7,
48
+ description: 'interface declaration',
49
+ },
50
+ {
51
+ pattern: /type\s+\w+\s*=\s*\{/m,
52
+ language: 'typescript',
53
+ weight: 0.7,
54
+ description: 'type alias',
55
+ },
56
+ {
57
+ pattern: /<\w+(?:,\s*\w+)*>\s*\(/m,
58
+ language: 'typescript',
59
+ weight: 0.6,
60
+ description: 'generic function call',
61
+ },
62
+ {
63
+ pattern: /as\s+\w+\s*[;,)\]}]/m,
64
+ language: 'typescript',
65
+ weight: 0.5,
66
+ description: 'type assertion',
67
+ },
68
+ // JavaScript/TypeScript common
69
+ {
70
+ pattern: /^import\s+.*\s+from\s+['"`]/m,
71
+ language: 'javascript',
72
+ weight: 0.6,
73
+ description: 'ES module import',
74
+ },
75
+ {
76
+ pattern: /^export\s+(default\s+)?(function|class|const|let|var)/m,
77
+ language: 'javascript',
78
+ weight: 0.6,
79
+ description: 'ES module export',
80
+ },
81
+ {
82
+ pattern: /const\s+\w+\s*=\s*(async\s+)?\(/m,
83
+ language: 'javascript',
84
+ weight: 0.5,
85
+ description: 'arrow function',
86
+ },
87
+ {
88
+ pattern: /require\s*\(\s*['"`]/m,
89
+ language: 'javascript',
90
+ weight: 0.5,
91
+ description: 'CommonJS require',
92
+ },
93
+ {
94
+ pattern: /module\.exports\s*=/m,
95
+ language: 'javascript',
96
+ weight: 0.5,
97
+ description: 'CommonJS export',
98
+ },
99
+ { pattern: /=>\s*\{/m, language: 'javascript', weight: 0.4, description: 'arrow function body' },
100
+ {
101
+ pattern: /async\s+function/m,
102
+ language: 'javascript',
103
+ weight: 0.4,
104
+ description: 'async function',
105
+ },
106
+ { pattern: /\bawait\s+/m, language: 'javascript', weight: 0.4, description: 'await expression' },
107
+ // Python
108
+ {
109
+ pattern: /^from\s+\w+\s+import\s+/m,
110
+ language: 'python',
111
+ weight: 0.8,
112
+ description: 'from import',
113
+ },
114
+ {
115
+ pattern: /^import\s+\w+(\s*,\s*\w+)*\s*$/m,
116
+ language: 'python',
117
+ weight: 0.7,
118
+ description: 'simple import',
119
+ },
120
+ {
121
+ pattern: /def\s+\w+\s*\([^)]*\)\s*(->\s*\w+)?\s*:/m,
122
+ language: 'python',
123
+ weight: 0.8,
124
+ description: 'function definition',
125
+ },
126
+ {
127
+ pattern: /class\s+\w+(\s*\([^)]*\))?\s*:/m,
128
+ language: 'python',
129
+ weight: 0.8,
130
+ description: 'class definition',
131
+ },
132
+ {
133
+ pattern: /if\s+__name__\s*==\s*['"`]__main__['"`]/m,
134
+ language: 'python',
135
+ weight: 0.9,
136
+ description: 'main guard',
137
+ },
138
+ {
139
+ pattern: /@\w+(\.\w+)*(\s*\([^)]*\))?\s*$/m,
140
+ language: 'python',
141
+ weight: 0.5,
142
+ description: 'decorator',
143
+ },
144
+ { pattern: /:\s*$/m, language: 'python', weight: 0.3, description: 'colon line ending' },
145
+ { pattern: /^\s*elif\s+/m, language: 'python', weight: 0.7, description: 'elif keyword' },
146
+ { pattern: /\bself\.\w+/m, language: 'python', weight: 0.6, description: 'self reference' },
147
+ // Go
148
+ {
149
+ pattern: /^package\s+\w+\s*$/m,
150
+ language: 'go',
151
+ weight: 0.9,
152
+ description: 'package declaration',
153
+ },
154
+ { pattern: /^import\s*\(\s*$/m, language: 'go', weight: 0.8, description: 'import block' },
155
+ {
156
+ pattern: /func\s+\w+\s*\([^)]*\)\s*\{/m,
157
+ language: 'go',
158
+ weight: 0.8,
159
+ description: 'function declaration',
160
+ },
161
+ {
162
+ pattern: /func\s+\(\w+\s+\*?\w+\)\s+\w+\s*\(/m,
163
+ language: 'go',
164
+ weight: 0.9,
165
+ description: 'method with receiver',
166
+ },
167
+ { pattern: /:=\s*/m, language: 'go', weight: 0.7, description: 'short variable declaration' },
168
+ { pattern: /\bdefer\s+/m, language: 'go', weight: 0.8, description: 'defer statement' },
169
+ { pattern: /\bgo\s+\w+\s*\(/m, language: 'go', weight: 0.8, description: 'goroutine' },
170
+ { pattern: /\bchan\s+\w+/m, language: 'go', weight: 0.8, description: 'channel type' },
171
+ {
172
+ pattern: /type\s+\w+\s+struct\s*\{/m,
173
+ language: 'go',
174
+ weight: 0.9,
175
+ description: 'struct definition',
176
+ },
177
+ {
178
+ pattern: /type\s+\w+\s+interface\s*\{/m,
179
+ language: 'go',
180
+ weight: 0.9,
181
+ description: 'interface definition',
182
+ },
183
+ // Rust
184
+ { pattern: /^use\s+\w+(::\w+)*/m, language: 'rust', weight: 0.8, description: 'use statement' },
185
+ {
186
+ pattern: /fn\s+\w+\s*(<[^>]+>)?\s*\([^)]*\)\s*(->|{)/m,
187
+ language: 'rust',
188
+ weight: 0.8,
189
+ description: 'function definition',
190
+ },
191
+ {
192
+ pattern: /pub\s+(fn|struct|enum|trait|mod)\s+/m,
193
+ language: 'rust',
194
+ weight: 0.9,
195
+ description: 'public declaration',
196
+ },
197
+ { pattern: /impl(\s+<[^>]+>)?\s+\w+/m, language: 'rust', weight: 0.9, description: 'impl block' },
198
+ { pattern: /let\s+(mut\s+)?\w+\s*:/m, language: 'rust', weight: 0.7, description: 'let binding' },
199
+ {
200
+ pattern: /\bmatch\s+\w+\s*\{/m,
201
+ language: 'rust',
202
+ weight: 0.8,
203
+ description: 'match expression',
204
+ },
205
+ { pattern: /\bOption<\w+>/m, language: 'rust', weight: 0.8, description: 'Option type' },
206
+ { pattern: /\bResult<\w+,\s*\w+>/m, language: 'rust', weight: 0.8, description: 'Result type' },
207
+ { pattern: /\bunwrap\(\)/m, language: 'rust', weight: 0.7, description: 'unwrap call' },
208
+ { pattern: /\?\s*;/m, language: 'rust', weight: 0.7, description: 'try operator' },
209
+ { pattern: /#\[derive\(/m, language: 'rust', weight: 0.9, description: 'derive macro' },
210
+ { pattern: /#\[\w+(\([^)]*\))?\]/m, language: 'rust', weight: 0.7, description: 'attribute' },
211
+ // Java
212
+ {
213
+ pattern: /^package\s+[\w.]+\s*;/m,
214
+ language: 'java',
215
+ weight: 0.9,
216
+ description: 'package declaration',
217
+ },
218
+ {
219
+ pattern: /^import\s+[\w.]+\s*;/m,
220
+ language: 'java',
221
+ weight: 0.8,
222
+ description: 'import statement',
223
+ },
224
+ { pattern: /public\s+class\s+\w+/m, language: 'java', weight: 0.9, description: 'public class' },
225
+ {
226
+ pattern: /private\s+(static\s+)?\w+\s+\w+\s*[;=]/m,
227
+ language: 'java',
228
+ weight: 0.7,
229
+ description: 'private field',
230
+ },
231
+ {
232
+ pattern: /public\s+(static\s+)?\w+\s+\w+\s*\(/m,
233
+ language: 'java',
234
+ weight: 0.8,
235
+ description: 'public method',
236
+ },
237
+ { pattern: /@Override/m, language: 'java', weight: 0.9, description: 'Override annotation' },
238
+ { pattern: /System\.out\.print/m, language: 'java', weight: 0.8, description: 'System.out' },
239
+ { pattern: /new\s+\w+\s*\(/m, language: 'java', weight: 0.4, description: 'new expression' },
240
+ { pattern: /extends\s+\w+/m, language: 'java', weight: 0.5, description: 'extends clause' },
241
+ { pattern: /implements\s+\w+/m, language: 'java', weight: 0.6, description: 'implements clause' },
242
+ ];
243
+ /**
244
+ * Keyword frequency analysis for statistical detection
245
+ */
246
+ const LANGUAGE_KEYWORDS = {
247
+ typescript: [
248
+ 'interface',
249
+ 'type',
250
+ 'enum',
251
+ 'namespace',
252
+ 'declare',
253
+ 'readonly',
254
+ 'private',
255
+ 'protected',
256
+ 'public',
257
+ 'abstract',
258
+ 'implements',
259
+ 'extends',
260
+ 'as',
261
+ 'is',
262
+ 'keyof',
263
+ 'typeof',
264
+ 'infer',
265
+ 'never',
266
+ 'unknown',
267
+ 'any',
268
+ ],
269
+ javascript: [
270
+ 'const',
271
+ 'let',
272
+ 'var',
273
+ 'function',
274
+ 'class',
275
+ 'async',
276
+ 'await',
277
+ 'import',
278
+ 'export',
279
+ 'default',
280
+ 'from',
281
+ 'require',
282
+ 'module',
283
+ 'undefined',
284
+ 'null',
285
+ 'this',
286
+ 'new',
287
+ 'typeof',
288
+ 'instanceof',
289
+ ],
290
+ python: [
291
+ 'def',
292
+ 'class',
293
+ 'import',
294
+ 'from',
295
+ 'as',
296
+ 'if',
297
+ 'elif',
298
+ 'else',
299
+ 'for',
300
+ 'while',
301
+ 'try',
302
+ 'except',
303
+ 'finally',
304
+ 'with',
305
+ 'lambda',
306
+ 'return',
307
+ 'yield',
308
+ 'raise',
309
+ 'pass',
310
+ 'break',
311
+ 'continue',
312
+ 'True',
313
+ 'False',
314
+ 'None',
315
+ 'self',
316
+ 'cls',
317
+ 'async',
318
+ 'await',
319
+ ],
320
+ go: [
321
+ 'package',
322
+ 'import',
323
+ 'func',
324
+ 'var',
325
+ 'const',
326
+ 'type',
327
+ 'struct',
328
+ 'interface',
329
+ 'map',
330
+ 'chan',
331
+ 'go',
332
+ 'select',
333
+ 'defer',
334
+ 'range',
335
+ 'make',
336
+ 'new',
337
+ 'append',
338
+ 'len',
339
+ 'cap',
340
+ 'nil',
341
+ 'true',
342
+ 'false',
343
+ ],
344
+ rust: [
345
+ 'fn',
346
+ 'let',
347
+ 'mut',
348
+ 'const',
349
+ 'static',
350
+ 'struct',
351
+ 'enum',
352
+ 'trait',
353
+ 'impl',
354
+ 'use',
355
+ 'mod',
356
+ 'pub',
357
+ 'crate',
358
+ 'self',
359
+ 'super',
360
+ 'where',
361
+ 'match',
362
+ 'if',
363
+ 'else',
364
+ 'loop',
365
+ 'while',
366
+ 'for',
367
+ 'in',
368
+ 'return',
369
+ 'break',
370
+ 'continue',
371
+ 'move',
372
+ 'ref',
373
+ 'unsafe',
374
+ 'async',
375
+ 'await',
376
+ ],
377
+ java: [
378
+ 'public',
379
+ 'private',
380
+ 'protected',
381
+ 'class',
382
+ 'interface',
383
+ 'enum',
384
+ 'extends',
385
+ 'implements',
386
+ 'static',
387
+ 'final',
388
+ 'abstract',
389
+ 'void',
390
+ 'new',
391
+ 'this',
392
+ 'super',
393
+ 'return',
394
+ 'if',
395
+ 'else',
396
+ 'for',
397
+ 'while',
398
+ 'try',
399
+ 'catch',
400
+ 'finally',
401
+ 'throw',
402
+ 'throws',
403
+ 'synchronized',
404
+ 'package',
405
+ 'import',
406
+ 'null',
407
+ 'true',
408
+ 'false',
409
+ 'instanceof',
410
+ ],
411
+ };
412
+ /**
413
+ * Detects programming language from file content
414
+ *
415
+ * Uses multiple heuristics in order of reliability:
416
+ * 1. Shebang analysis (highest confidence)
417
+ * 2. Content patterns (high confidence)
418
+ * 3. Statistical keyword analysis (lower confidence)
419
+ *
420
+ * @example
421
+ * ```typescript
422
+ * const detector = new LanguageDetector()
423
+ *
424
+ * // Detect from shebang
425
+ * const result1 = detector.detect('#!/usr/bin/env python3\nprint("hello")')
426
+ * // { language: 'python', confidence: 1.0, method: 'shebang', evidence: ['shebang: #!/usr/bin/env python3'] }
427
+ *
428
+ * // Detect from patterns
429
+ * const result2 = detector.detect('fn main() {\n println!("Hello");\n}')
430
+ * // { language: 'rust', confidence: 0.85, method: 'pattern', evidence: ['function definition'] }
431
+ * ```
432
+ */
433
+ export class LanguageDetector {
434
+ /** Minimum confidence threshold for detection */
435
+ minConfidence;
436
+ constructor(options = {}) {
437
+ this.minConfidence = options.minConfidence ?? 0.3;
438
+ }
439
+ /**
440
+ * Detect language from file content
441
+ *
442
+ * @param content - File content to analyze
443
+ * @returns Detection result with language, confidence, and evidence
444
+ */
445
+ detect(content) {
446
+ // Try shebang first (highest confidence)
447
+ const shebangResult = this.detectByShebang(content);
448
+ if (shebangResult.language && shebangResult.confidence >= this.minConfidence) {
449
+ return shebangResult;
450
+ }
451
+ // Try content patterns
452
+ const patternResult = this.detectByPatterns(content);
453
+ if (patternResult.language && patternResult.confidence >= this.minConfidence) {
454
+ return patternResult;
455
+ }
456
+ // Fall back to statistical analysis
457
+ const statisticalResult = this.detectByStatistics(content);
458
+ if (statisticalResult.language && statisticalResult.confidence >= this.minConfidence) {
459
+ return statisticalResult;
460
+ }
461
+ // No confident detection
462
+ return {
463
+ language: null,
464
+ confidence: 0,
465
+ method: 'none',
466
+ evidence: [],
467
+ };
468
+ }
469
+ /**
470
+ * Detect language from shebang line
471
+ */
472
+ detectByShebang(content) {
473
+ const firstLine = content.split('\n')[0]?.trim() ?? '';
474
+ if (!firstLine.startsWith('#!')) {
475
+ return { language: null, confidence: 0, method: 'shebang', evidence: [] };
476
+ }
477
+ for (const { pattern, language } of SHEBANG_PATTERNS) {
478
+ if (pattern.test(firstLine)) {
479
+ return {
480
+ language,
481
+ confidence: 1.0,
482
+ method: 'shebang',
483
+ evidence: [`shebang: ${firstLine}`],
484
+ };
485
+ }
486
+ }
487
+ return { language: null, confidence: 0, method: 'shebang', evidence: [] };
488
+ }
489
+ /**
490
+ * Detect language from content patterns
491
+ */
492
+ detectByPatterns(content) {
493
+ const scores = new Map();
494
+ for (const { pattern, language, weight, description } of CONTENT_PATTERNS) {
495
+ if (pattern.test(content)) {
496
+ const current = scores.get(language) ?? { score: 0, evidence: [] };
497
+ current.score += weight;
498
+ current.evidence.push(description);
499
+ scores.set(language, current);
500
+ }
501
+ }
502
+ // Find best match
503
+ let bestLanguage = null;
504
+ let bestScore = 0;
505
+ let bestEvidence = [];
506
+ for (const [language, { score, evidence }] of scores) {
507
+ if (score > bestScore) {
508
+ bestScore = score;
509
+ bestLanguage = language;
510
+ bestEvidence = evidence;
511
+ }
512
+ }
513
+ // Normalize confidence to 0-1 range (cap at 1.0)
514
+ const confidence = Math.min(bestScore / 3, 1.0);
515
+ // Upgrade JavaScript to TypeScript if TypeScript-specific patterns found
516
+ if (bestLanguage === 'javascript') {
517
+ const tsScore = scores.get('typescript')?.score ?? 0;
518
+ if (tsScore > 0) {
519
+ bestLanguage = 'typescript';
520
+ bestEvidence = [...bestEvidence, ...(scores.get('typescript')?.evidence ?? [])];
521
+ }
522
+ }
523
+ return {
524
+ language: bestLanguage,
525
+ confidence,
526
+ method: 'pattern',
527
+ evidence: bestEvidence.slice(0, 5), // Limit evidence
528
+ };
529
+ }
530
+ /**
531
+ * Detect language by statistical keyword analysis
532
+ */
533
+ detectByStatistics(content) {
534
+ const contentLower = content.toLowerCase();
535
+ const words = contentLower.split(/\W+/).filter((w) => w.length > 1);
536
+ const wordSet = new Set(words);
537
+ const wordCount = words.length;
538
+ if (wordCount === 0) {
539
+ return { language: null, confidence: 0, method: 'statistical', evidence: [] };
540
+ }
541
+ const scores = new Map();
542
+ for (const [language, keywords] of Object.entries(LANGUAGE_KEYWORDS)) {
543
+ const matchedKeywords = [];
544
+ for (const keyword of keywords) {
545
+ if (wordSet.has(keyword.toLowerCase())) {
546
+ matchedKeywords.push(keyword);
547
+ }
548
+ }
549
+ if (matchedKeywords.length > 0) {
550
+ scores.set(language, {
551
+ matches: matchedKeywords.length,
552
+ keywords: matchedKeywords,
553
+ });
554
+ }
555
+ }
556
+ // Find best match with highest keyword density
557
+ let bestLanguage = null;
558
+ let bestScore = 0;
559
+ let bestKeywords = [];
560
+ for (const [language, { matches, keywords }] of scores) {
561
+ // Normalize by total keyword count for fairness
562
+ const normalizedScore = matches / LANGUAGE_KEYWORDS[language].length;
563
+ if (normalizedScore > bestScore) {
564
+ bestScore = normalizedScore;
565
+ bestLanguage = language;
566
+ bestKeywords = keywords;
567
+ }
568
+ }
569
+ // Lower confidence for statistical method
570
+ const confidence = Math.min(bestScore * 2, 0.7);
571
+ return {
572
+ language: bestLanguage,
573
+ confidence,
574
+ method: 'statistical',
575
+ evidence: bestKeywords.slice(0, 5).map((k) => `keyword: ${k}`),
576
+ };
577
+ }
578
+ /**
579
+ * Get confidence threshold
580
+ */
581
+ getMinConfidence() {
582
+ return this.minConfidence;
583
+ }
584
+ /**
585
+ * Set confidence threshold
586
+ */
587
+ setMinConfidence(threshold) {
588
+ this.minConfidence = Math.max(0, Math.min(1, threshold));
589
+ }
590
+ }
591
+ /**
592
+ * Convenience function to detect language
593
+ *
594
+ * @param content - File content to analyze
595
+ * @param options - Detection options
596
+ * @returns Detection result
597
+ */
598
+ export function detectLanguage(content, options) {
599
+ const detector = new LanguageDetector(options);
600
+ return detector.detect(content);
601
+ }
602
+ //# sourceMappingURL=language-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-detector.js","sourceRoot":"","sources":["../../../src/analysis/language-detector.ts"],"names":[],"mappings":"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"}