@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,537 @@
1
+ /**
2
+ * SMI-1337: Analysis Pipeline Metrics and Telemetry
3
+ *
4
+ * Provides metrics collection for the multi-language analysis pipeline:
5
+ * - Files parsed per language (counter)
6
+ * - Parse duration by language (histogram)
7
+ * - Cache hit/miss rates (gauge)
8
+ * - Worker pool utilization (gauge)
9
+ * - Memory usage (gauge)
10
+ * - Error counts by type (counter)
11
+ *
12
+ * Configuration:
13
+ * - SKILLSMITH_TELEMETRY_ENABLED: Master switch for all telemetry (default: auto)
14
+ * - SKILLSMITH_ANALYSIS_METRICS_ENABLED: Enable/disable analysis metrics (default: true)
15
+ *
16
+ * Graceful Fallback:
17
+ * - If OpenTelemetry packages are not installed, uses in-memory implementations
18
+ * - Metrics APIs remain functional for local statistics
19
+ *
20
+ * @see docs/architecture/multi-language-analysis.md
21
+ * @module analysis/metrics
22
+ */
23
+ /**
24
+ * In-memory counter implementation
25
+ */
26
+ class InMemoryCounter {
27
+ values = new Map();
28
+ add(value, labels) {
29
+ const key = labels ? JSON.stringify(labels) : '';
30
+ const current = this.values.get(key) ?? 0;
31
+ this.values.set(key, current + value);
32
+ }
33
+ increment(labels) {
34
+ this.add(1, labels);
35
+ }
36
+ getValues() {
37
+ return new Map(this.values);
38
+ }
39
+ getTotal() {
40
+ let total = 0;
41
+ for (const count of this.values.values()) {
42
+ total += count;
43
+ }
44
+ return total;
45
+ }
46
+ reset() {
47
+ this.values.clear();
48
+ }
49
+ }
50
+ /**
51
+ * In-memory histogram implementation
52
+ */
53
+ class InMemoryHistogram {
54
+ values = [];
55
+ labeledValues = new Map();
56
+ record(value, labels) {
57
+ this.values.push(value);
58
+ if (labels) {
59
+ const key = JSON.stringify(labels);
60
+ const arr = this.labeledValues.get(key) ?? [];
61
+ arr.push(value);
62
+ this.labeledValues.set(key, arr);
63
+ }
64
+ }
65
+ getStats() {
66
+ if (this.values.length === 0) {
67
+ return { count: 0, sum: 0, mean: 0, p50: 0, p95: 0, p99: 0 };
68
+ }
69
+ const sorted = [...this.values].sort((a, b) => a - b);
70
+ const sum = sorted.reduce((acc, v) => acc + v, 0);
71
+ const mean = sum / sorted.length;
72
+ const percentile = (p) => {
73
+ const index = Math.ceil((p / 100) * sorted.length) - 1;
74
+ return sorted[Math.max(0, index)];
75
+ };
76
+ return {
77
+ count: sorted.length,
78
+ sum,
79
+ mean,
80
+ p50: percentile(50),
81
+ p95: percentile(95),
82
+ p99: percentile(99),
83
+ };
84
+ }
85
+ getStatsByLabel(labels) {
86
+ const key = JSON.stringify(labels);
87
+ const values = this.labeledValues.get(key) ?? [];
88
+ if (values.length === 0) {
89
+ return { count: 0, sum: 0, mean: 0, p50: 0, p95: 0, p99: 0 };
90
+ }
91
+ const sorted = [...values].sort((a, b) => a - b);
92
+ const sum = sorted.reduce((acc, v) => acc + v, 0);
93
+ const mean = sum / sorted.length;
94
+ const percentile = (p) => {
95
+ const index = Math.ceil((p / 100) * sorted.length) - 1;
96
+ return sorted[Math.max(0, index)];
97
+ };
98
+ return {
99
+ count: sorted.length,
100
+ sum,
101
+ mean,
102
+ p50: percentile(50),
103
+ p95: percentile(95),
104
+ p99: percentile(99),
105
+ };
106
+ }
107
+ reset() {
108
+ this.values = [];
109
+ this.labeledValues.clear();
110
+ }
111
+ }
112
+ /**
113
+ * In-memory gauge implementation
114
+ */
115
+ class InMemoryGauge {
116
+ values = new Map();
117
+ set(value, labels) {
118
+ const key = labels ? JSON.stringify(labels) : '';
119
+ this.values.set(key, value);
120
+ }
121
+ getValue(labels) {
122
+ const key = labels ? JSON.stringify(labels) : '';
123
+ return this.values.get(key) ?? 0;
124
+ }
125
+ getAllValues() {
126
+ return new Map(this.values);
127
+ }
128
+ reset() {
129
+ this.values.clear();
130
+ }
131
+ }
132
+ /**
133
+ * Analysis Pipeline Metrics Collector
134
+ *
135
+ * Provides comprehensive metrics collection for the multi-language
136
+ * analysis pipeline with graceful fallback when telemetry is unavailable.
137
+ *
138
+ * @example
139
+ * ```typescript
140
+ * const metrics = new AnalysisMetrics()
141
+ *
142
+ * // Record file parse
143
+ * metrics.recordFileParsed('typescript')
144
+ *
145
+ * // Record parse duration
146
+ * metrics.recordParseDuration('typescript', 15.5)
147
+ *
148
+ * // Record cache operations
149
+ * metrics.recordCacheHit()
150
+ * metrics.recordCacheMiss()
151
+ *
152
+ * // Get snapshot
153
+ * const snapshot = metrics.getSnapshot()
154
+ * console.log(`Parse p95: ${snapshot.parseDuration.stats.p95}ms`)
155
+ * ```
156
+ */
157
+ export class AnalysisMetrics {
158
+ enabled;
159
+ prefix;
160
+ // File parsing metrics
161
+ filesParsed;
162
+ parseDuration;
163
+ // Cache metrics
164
+ cacheHits;
165
+ cacheMisses;
166
+ cacheSize;
167
+ // Worker pool metrics
168
+ workerPoolActive;
169
+ workerPoolQueued;
170
+ workerPoolUtilization;
171
+ // Memory metrics
172
+ memoryHeapUsed;
173
+ memoryHeapTotal;
174
+ memoryRss;
175
+ // Error metrics
176
+ errorCount;
177
+ // Aggregator metrics
178
+ aggregatorFilesProcessed;
179
+ aggregatorImports;
180
+ aggregatorExports;
181
+ aggregatorFunctions;
182
+ constructor(config = {}) {
183
+ // Check master telemetry switch
184
+ const telemetryDisabled = process.env.SKILLSMITH_TELEMETRY_ENABLED === 'false';
185
+ const metricsDisabled = process.env.SKILLSMITH_ANALYSIS_METRICS_ENABLED === 'false';
186
+ this.enabled = config.enabled !== false && !telemetryDisabled && !metricsDisabled;
187
+ this.prefix = config.metricPrefix ?? 'skillsmith.analysis';
188
+ // Initialize all metrics
189
+ this.filesParsed = new InMemoryCounter();
190
+ this.parseDuration = new InMemoryHistogram();
191
+ this.cacheHits = new InMemoryCounter();
192
+ this.cacheMisses = new InMemoryCounter();
193
+ this.cacheSize = new InMemoryGauge();
194
+ this.workerPoolActive = new InMemoryGauge();
195
+ this.workerPoolQueued = new InMemoryGauge();
196
+ this.workerPoolUtilization = new InMemoryGauge();
197
+ this.memoryHeapUsed = new InMemoryGauge();
198
+ this.memoryHeapTotal = new InMemoryGauge();
199
+ this.memoryRss = new InMemoryGauge();
200
+ this.errorCount = new InMemoryCounter();
201
+ this.aggregatorFilesProcessed = new InMemoryGauge();
202
+ this.aggregatorImports = new InMemoryGauge();
203
+ this.aggregatorExports = new InMemoryGauge();
204
+ this.aggregatorFunctions = new InMemoryGauge();
205
+ }
206
+ /**
207
+ * Check if metrics collection is enabled
208
+ */
209
+ isEnabled() {
210
+ return this.enabled;
211
+ }
212
+ /**
213
+ * Record a file being parsed
214
+ *
215
+ * @param language - The language of the parsed file
216
+ */
217
+ recordFileParsed(language) {
218
+ if (!this.enabled)
219
+ return;
220
+ this.filesParsed.increment({ language });
221
+ }
222
+ /**
223
+ * Record parse duration for a file
224
+ *
225
+ * @param language - The language of the parsed file
226
+ * @param durationMs - Parse duration in milliseconds
227
+ */
228
+ recordParseDuration(language, durationMs) {
229
+ if (!this.enabled)
230
+ return;
231
+ this.parseDuration.record(durationMs, { language });
232
+ }
233
+ /**
234
+ * Record a cache hit
235
+ *
236
+ * @param language - Optional language for the cache hit
237
+ */
238
+ recordCacheHit(language) {
239
+ if (!this.enabled)
240
+ return;
241
+ this.cacheHits.increment(language ? { language } : undefined);
242
+ }
243
+ /**
244
+ * Record a cache miss
245
+ *
246
+ * @param language - Optional language for the cache miss
247
+ */
248
+ recordCacheMiss(language) {
249
+ if (!this.enabled)
250
+ return;
251
+ this.cacheMisses.increment(language ? { language } : undefined);
252
+ }
253
+ /**
254
+ * Update cache size
255
+ *
256
+ * @param size - Current cache size in bytes
257
+ * @param entries - Current number of cache entries
258
+ */
259
+ updateCacheSize(size, entries) {
260
+ if (!this.enabled)
261
+ return;
262
+ this.cacheSize.set(size);
263
+ if (entries !== undefined) {
264
+ this.cacheSize.set(entries, { metric: 'entries' });
265
+ }
266
+ }
267
+ /**
268
+ * Update worker pool metrics
269
+ *
270
+ * @param activeWorkers - Number of currently active workers
271
+ * @param queuedTasks - Number of tasks waiting in queue
272
+ * @param poolSize - Total pool size for utilization calculation
273
+ */
274
+ updateWorkerPool(activeWorkers, queuedTasks, poolSize) {
275
+ if (!this.enabled)
276
+ return;
277
+ this.workerPoolActive.set(activeWorkers);
278
+ this.workerPoolQueued.set(queuedTasks);
279
+ if (poolSize && poolSize > 0) {
280
+ this.workerPoolUtilization.set(activeWorkers / poolSize);
281
+ }
282
+ }
283
+ /**
284
+ * Update memory usage metrics
285
+ *
286
+ * Records current Node.js memory usage stats.
287
+ */
288
+ updateMemoryUsage() {
289
+ if (!this.enabled)
290
+ return;
291
+ const usage = process.memoryUsage();
292
+ this.memoryHeapUsed.set(usage.heapUsed);
293
+ this.memoryHeapTotal.set(usage.heapTotal);
294
+ this.memoryRss.set(usage.rss);
295
+ }
296
+ /**
297
+ * Record an error
298
+ *
299
+ * @param errorType - Type/category of the error
300
+ * @param language - Optional language context
301
+ */
302
+ recordError(errorType, language) {
303
+ if (!this.enabled)
304
+ return;
305
+ const labels = { errorType };
306
+ if (language) {
307
+ labels.language = language;
308
+ }
309
+ this.errorCount.increment(labels);
310
+ }
311
+ /**
312
+ * Update aggregator metrics
313
+ *
314
+ * @param filesProcessed - Number of files processed
315
+ * @param imports - Total imports found
316
+ * @param exports - Total exports found
317
+ * @param functions - Total functions found
318
+ */
319
+ updateAggregatorStats(filesProcessed, imports, exports, functions) {
320
+ if (!this.enabled)
321
+ return;
322
+ this.aggregatorFilesProcessed.set(filesProcessed);
323
+ this.aggregatorImports.set(imports);
324
+ this.aggregatorExports.set(exports);
325
+ this.aggregatorFunctions.set(functions);
326
+ }
327
+ /**
328
+ * Get cache hit rate
329
+ *
330
+ * @returns Cache hit rate as a decimal (0-1)
331
+ */
332
+ getCacheHitRate() {
333
+ const hits = this.cacheHits.getTotal();
334
+ const misses = this.cacheMisses.getTotal();
335
+ const total = hits + misses;
336
+ return total > 0 ? hits / total : 0;
337
+ }
338
+ /**
339
+ * Get files parsed by language
340
+ *
341
+ * @returns Map of language to count
342
+ */
343
+ getFilesByLanguage() {
344
+ const result = {};
345
+ for (const [key, count] of this.filesParsed.getValues()) {
346
+ if (key) {
347
+ try {
348
+ const labels = JSON.parse(key);
349
+ if (labels.language) {
350
+ result[labels.language] = count;
351
+ }
352
+ }
353
+ catch {
354
+ // Invalid key format, skip
355
+ }
356
+ }
357
+ }
358
+ return result;
359
+ }
360
+ /**
361
+ * Get parse duration stats by language
362
+ *
363
+ * @param language - Language to get stats for
364
+ * @returns Duration statistics
365
+ */
366
+ getParseDurationByLanguage(language) {
367
+ return this.parseDuration.getStatsByLabel({ language });
368
+ }
369
+ /**
370
+ * Get complete metrics snapshot
371
+ *
372
+ * @returns Snapshot of all current metrics
373
+ */
374
+ getSnapshot() {
375
+ const hits = this.cacheHits.getTotal();
376
+ const misses = this.cacheMisses.getTotal();
377
+ const cacheTotal = hits + misses;
378
+ // Build by-language parse stats
379
+ const byLanguageStats = {};
380
+ const languages = [
381
+ 'typescript',
382
+ 'javascript',
383
+ 'python',
384
+ 'go',
385
+ 'rust',
386
+ 'java',
387
+ ];
388
+ for (const lang of languages) {
389
+ const stats = this.getParseDurationByLanguage(lang);
390
+ if (stats.count > 0) {
391
+ byLanguageStats[lang] = stats;
392
+ }
393
+ }
394
+ // Build error counts by type
395
+ const errorsByType = {};
396
+ for (const [key, count] of this.errorCount.getValues()) {
397
+ if (key) {
398
+ try {
399
+ const labels = JSON.parse(key);
400
+ if (labels.errorType) {
401
+ errorsByType[labels.errorType] = (errorsByType[labels.errorType] ?? 0) + count;
402
+ }
403
+ }
404
+ catch {
405
+ // Invalid key format, skip
406
+ }
407
+ }
408
+ }
409
+ return {
410
+ timestamp: new Date().toISOString(),
411
+ filesParsed: {
412
+ total: this.filesParsed.getTotal(),
413
+ byLanguage: this.getFilesByLanguage(),
414
+ },
415
+ parseDuration: {
416
+ stats: this.parseDuration.getStats(),
417
+ byLanguage: byLanguageStats,
418
+ },
419
+ cache: {
420
+ hits,
421
+ misses,
422
+ hitRate: cacheTotal > 0 ? hits / cacheTotal : 0,
423
+ size: this.cacheSize.getValue(),
424
+ },
425
+ workerPool: {
426
+ activeWorkers: this.workerPoolActive.getValue(),
427
+ queuedTasks: this.workerPoolQueued.getValue(),
428
+ utilization: this.workerPoolUtilization.getValue(),
429
+ },
430
+ memory: {
431
+ heapUsed: this.memoryHeapUsed.getValue(),
432
+ heapTotal: this.memoryHeapTotal.getValue(),
433
+ rss: this.memoryRss.getValue(),
434
+ },
435
+ errors: {
436
+ total: this.errorCount.getTotal(),
437
+ byType: errorsByType,
438
+ },
439
+ aggregator: {
440
+ filesProcessed: this.aggregatorFilesProcessed.getValue(),
441
+ totalImports: this.aggregatorImports.getValue(),
442
+ totalExports: this.aggregatorExports.getValue(),
443
+ totalFunctions: this.aggregatorFunctions.getValue(),
444
+ },
445
+ };
446
+ }
447
+ /**
448
+ * Reset all metrics
449
+ */
450
+ reset() {
451
+ this.filesParsed.reset();
452
+ this.parseDuration.reset();
453
+ this.cacheHits.reset();
454
+ this.cacheMisses.reset();
455
+ this.cacheSize.reset();
456
+ this.workerPoolActive.reset();
457
+ this.workerPoolQueued.reset();
458
+ this.workerPoolUtilization.reset();
459
+ this.memoryHeapUsed.reset();
460
+ this.memoryHeapTotal.reset();
461
+ this.memoryRss.reset();
462
+ this.errorCount.reset();
463
+ this.aggregatorFilesProcessed.reset();
464
+ this.aggregatorImports.reset();
465
+ this.aggregatorExports.reset();
466
+ this.aggregatorFunctions.reset();
467
+ }
468
+ }
469
+ // Default metrics instance
470
+ let defaultAnalysisMetrics = null;
471
+ /**
472
+ * Get the default analysis metrics instance
473
+ *
474
+ * @returns The shared AnalysisMetrics instance
475
+ */
476
+ export function getAnalysisMetrics() {
477
+ if (!defaultAnalysisMetrics) {
478
+ defaultAnalysisMetrics = new AnalysisMetrics();
479
+ }
480
+ return defaultAnalysisMetrics;
481
+ }
482
+ /**
483
+ * Initialize the default analysis metrics instance
484
+ *
485
+ * @param config - Optional configuration
486
+ * @returns The initialized AnalysisMetrics instance
487
+ */
488
+ export function initializeAnalysisMetrics(config) {
489
+ if (defaultAnalysisMetrics) {
490
+ defaultAnalysisMetrics.reset();
491
+ }
492
+ defaultAnalysisMetrics = new AnalysisMetrics(config);
493
+ return defaultAnalysisMetrics;
494
+ }
495
+ /**
496
+ * Helper: Time an async operation and record to analysis metrics
497
+ *
498
+ * @param language - Language being parsed
499
+ * @param fn - Async function to time
500
+ * @param metrics - Optional metrics instance (uses default if not provided)
501
+ * @returns Result of the function
502
+ */
503
+ export async function timeParseAsync(language, fn, metrics) {
504
+ const m = metrics ?? getAnalysisMetrics();
505
+ const start = performance.now();
506
+ try {
507
+ const result = await fn();
508
+ m.recordFileParsed(language);
509
+ return result;
510
+ }
511
+ finally {
512
+ const duration = performance.now() - start;
513
+ m.recordParseDuration(language, duration);
514
+ }
515
+ }
516
+ /**
517
+ * Helper: Time a sync operation and record to analysis metrics
518
+ *
519
+ * @param language - Language being parsed
520
+ * @param fn - Function to time
521
+ * @param metrics - Optional metrics instance (uses default if not provided)
522
+ * @returns Result of the function
523
+ */
524
+ export function timeParseSync(language, fn, metrics) {
525
+ const m = metrics ?? getAnalysisMetrics();
526
+ const start = performance.now();
527
+ try {
528
+ const result = fn();
529
+ m.recordFileParsed(language);
530
+ return result;
531
+ }
532
+ finally {
533
+ const duration = performance.now() - start;
534
+ m.recordParseDuration(language, duration);
535
+ }
536
+ }
537
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/analysis/metrics.ts"],"names":[],"mappings":"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"}