@skillsmith/core 0.1.2 → 0.2.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 (325) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/src/analysis/CodebaseAnalyzer.d.ts +4 -134
  3. package/dist/src/analysis/CodebaseAnalyzer.d.ts.map +1 -1
  4. package/dist/src/analysis/CodebaseAnalyzer.js +7 -315
  5. package/dist/src/analysis/CodebaseAnalyzer.js.map +1 -1
  6. package/dist/src/analysis/framework-detector.d.ts +47 -0
  7. package/dist/src/analysis/framework-detector.d.ts.map +1 -0
  8. package/dist/src/analysis/framework-detector.js +151 -0
  9. package/dist/src/analysis/framework-detector.js.map +1 -0
  10. package/dist/src/analysis/index.d.ts +6 -1
  11. package/dist/src/analysis/index.d.ts.map +1 -1
  12. package/dist/src/analysis/index.js +10 -1
  13. package/dist/src/analysis/index.js.map +1 -1
  14. package/dist/src/analysis/parsers.d.ts +43 -0
  15. package/dist/src/analysis/parsers.d.ts.map +1 -0
  16. package/dist/src/analysis/parsers.js +219 -0
  17. package/dist/src/analysis/parsers.js.map +1 -0
  18. package/dist/src/analysis/types.d.ts +138 -0
  19. package/dist/src/analysis/types.d.ts.map +1 -0
  20. package/dist/src/analysis/types.js +25 -0
  21. package/dist/src/analysis/types.js.map +1 -0
  22. package/dist/src/analytics/AnalyticsRepository.d.ts.map +1 -1
  23. package/dist/src/analytics/AnalyticsRepository.js +4 -4
  24. package/dist/src/analytics/AnalyticsRepository.js.map +1 -1
  25. package/dist/src/api/cache.d.ts +108 -0
  26. package/dist/src/api/cache.d.ts.map +1 -0
  27. package/dist/src/api/cache.js +216 -0
  28. package/dist/src/api/cache.js.map +1 -0
  29. package/dist/src/api/client.d.ts +152 -0
  30. package/dist/src/api/client.d.ts.map +1 -0
  31. package/dist/src/api/client.js +221 -0
  32. package/dist/src/api/client.js.map +1 -0
  33. package/dist/src/api/index.d.ts +10 -0
  34. package/dist/src/api/index.d.ts.map +1 -0
  35. package/dist/src/api/index.js +10 -0
  36. package/dist/src/api/index.js.map +1 -0
  37. package/dist/src/benchmarks/BenchmarkRunner.d.ts +6 -175
  38. package/dist/src/benchmarks/BenchmarkRunner.d.ts.map +1 -1
  39. package/dist/src/benchmarks/BenchmarkRunner.js +6 -123
  40. package/dist/src/benchmarks/BenchmarkRunner.js.map +1 -1
  41. package/dist/src/benchmarks/MemoryProfiler.d.ts +4 -262
  42. package/dist/src/benchmarks/MemoryProfiler.d.ts.map +1 -1
  43. package/dist/src/benchmarks/MemoryProfiler.js +4 -400
  44. package/dist/src/benchmarks/MemoryProfiler.js.map +1 -1
  45. package/dist/src/benchmarks/comparator.d.ts +38 -0
  46. package/dist/src/benchmarks/comparator.d.ts.map +1 -0
  47. package/dist/src/benchmarks/comparator.js +81 -0
  48. package/dist/src/benchmarks/comparator.js.map +1 -0
  49. package/dist/src/benchmarks/formatters.d.ts +30 -0
  50. package/dist/src/benchmarks/formatters.d.ts.map +1 -0
  51. package/dist/src/benchmarks/formatters.js +88 -0
  52. package/dist/src/benchmarks/formatters.js.map +1 -0
  53. package/dist/src/benchmarks/index.d.ts +5 -1
  54. package/dist/src/benchmarks/index.d.ts.map +1 -1
  55. package/dist/src/benchmarks/index.js +9 -2
  56. package/dist/src/benchmarks/index.js.map +1 -1
  57. package/dist/src/benchmarks/memory/MemoryProfiler.d.ts +165 -0
  58. package/dist/src/benchmarks/memory/MemoryProfiler.d.ts.map +1 -0
  59. package/dist/src/benchmarks/memory/MemoryProfiler.js +312 -0
  60. package/dist/src/benchmarks/memory/MemoryProfiler.js.map +1 -0
  61. package/dist/src/benchmarks/memory/baseline-manager.d.ts +64 -0
  62. package/dist/src/benchmarks/memory/baseline-manager.d.ts.map +1 -0
  63. package/dist/src/benchmarks/memory/baseline-manager.js +95 -0
  64. package/dist/src/benchmarks/memory/baseline-manager.js.map +1 -0
  65. package/dist/src/benchmarks/memory/index.d.ts +12 -0
  66. package/dist/src/benchmarks/memory/index.d.ts.map +1 -0
  67. package/dist/src/benchmarks/memory/index.js +12 -0
  68. package/dist/src/benchmarks/memory/index.js.map +1 -0
  69. package/dist/src/benchmarks/memory/leak-detector.d.ts +23 -0
  70. package/dist/src/benchmarks/memory/leak-detector.d.ts.map +1 -0
  71. package/dist/src/benchmarks/memory/leak-detector.js +46 -0
  72. package/dist/src/benchmarks/memory/leak-detector.js.map +1 -0
  73. package/dist/src/benchmarks/memory/regression-detector.d.ts +17 -0
  74. package/dist/src/benchmarks/memory/regression-detector.d.ts.map +1 -0
  75. package/dist/src/benchmarks/memory/regression-detector.js +56 -0
  76. package/dist/src/benchmarks/memory/regression-detector.js.map +1 -0
  77. package/dist/src/benchmarks/memory/types.d.ts +111 -0
  78. package/dist/src/benchmarks/memory/types.d.ts.map +1 -0
  79. package/dist/src/benchmarks/memory/types.js +7 -0
  80. package/dist/src/benchmarks/memory/types.js.map +1 -0
  81. package/dist/src/benchmarks/memory/utils.d.ts +17 -0
  82. package/dist/src/benchmarks/memory/utils.d.ts.map +1 -0
  83. package/dist/src/benchmarks/memory/utils.js +29 -0
  84. package/dist/src/benchmarks/memory/utils.js.map +1 -0
  85. package/dist/src/benchmarks/types.d.ts +175 -0
  86. package/dist/src/benchmarks/types.d.ts.map +1 -0
  87. package/dist/src/benchmarks/types.js +20 -0
  88. package/dist/src/benchmarks/types.js.map +1 -0
  89. package/dist/src/index.d.ts +4 -2
  90. package/dist/src/index.d.ts.map +1 -1
  91. package/dist/src/index.js +7 -3
  92. package/dist/src/index.js.map +1 -1
  93. package/dist/src/repositories/QuarantineRepository.d.ts +4 -251
  94. package/dist/src/repositories/QuarantineRepository.d.ts.map +1 -1
  95. package/dist/src/repositories/QuarantineRepository.js +4 -441
  96. package/dist/src/repositories/QuarantineRepository.js.map +1 -1
  97. package/dist/src/repositories/quarantine/QuarantineRepository.d.ts +168 -0
  98. package/dist/src/repositories/quarantine/QuarantineRepository.d.ts.map +1 -0
  99. package/dist/src/repositories/quarantine/QuarantineRepository.js +341 -0
  100. package/dist/src/repositories/quarantine/QuarantineRepository.js.map +1 -0
  101. package/dist/src/repositories/quarantine/index.d.ts +10 -0
  102. package/dist/src/repositories/quarantine/index.d.ts.map +1 -0
  103. package/dist/src/repositories/quarantine/index.js +10 -0
  104. package/dist/src/repositories/quarantine/index.js.map +1 -0
  105. package/dist/src/repositories/quarantine/queries.d.ts +58 -0
  106. package/dist/src/repositories/quarantine/queries.d.ts.map +1 -0
  107. package/dist/src/repositories/quarantine/queries.js +88 -0
  108. package/dist/src/repositories/quarantine/queries.js.map +1 -0
  109. package/dist/src/repositories/quarantine/query-builder.d.ts +44 -0
  110. package/dist/src/repositories/quarantine/query-builder.d.ts.map +1 -0
  111. package/dist/src/repositories/quarantine/query-builder.js +87 -0
  112. package/dist/src/repositories/quarantine/query-builder.js.map +1 -0
  113. package/dist/src/repositories/quarantine/types.d.ts +155 -0
  114. package/dist/src/repositories/quarantine/types.d.ts.map +1 -0
  115. package/dist/src/repositories/quarantine/types.js +13 -0
  116. package/dist/src/repositories/quarantine/types.js.map +1 -0
  117. package/dist/src/scripts/__tests__/scan-imported-skills.test.d.ts +1 -0
  118. package/dist/src/scripts/__tests__/scan-imported-skills.test.d.ts.map +1 -1
  119. package/dist/src/scripts/__tests__/scan-imported-skills.test.js +7 -43
  120. package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
  121. package/dist/src/scripts/github-import/checkpoint.d.ts +21 -0
  122. package/dist/src/scripts/github-import/checkpoint.d.ts.map +1 -0
  123. package/dist/src/scripts/github-import/checkpoint.js +52 -0
  124. package/dist/src/scripts/github-import/checkpoint.js.map +1 -0
  125. package/dist/src/scripts/github-import/deduplication.d.ts +15 -0
  126. package/dist/src/scripts/github-import/deduplication.d.ts.map +1 -0
  127. package/dist/src/scripts/github-import/deduplication.js +33 -0
  128. package/dist/src/scripts/github-import/deduplication.js.map +1 -0
  129. package/dist/src/scripts/github-import/github-client.d.ts +29 -0
  130. package/dist/src/scripts/github-import/github-client.d.ts.map +1 -0
  131. package/dist/src/scripts/github-import/github-client.js +184 -0
  132. package/dist/src/scripts/github-import/github-client.js.map +1 -0
  133. package/dist/src/scripts/github-import/index.d.ts +29 -0
  134. package/dist/src/scripts/github-import/index.d.ts.map +1 -0
  135. package/dist/src/scripts/github-import/index.js +198 -0
  136. package/dist/src/scripts/github-import/index.js.map +1 -0
  137. package/dist/src/scripts/github-import/output.d.ts +12 -0
  138. package/dist/src/scripts/github-import/output.d.ts.map +1 -0
  139. package/dist/src/scripts/github-import/output.js +34 -0
  140. package/dist/src/scripts/github-import/output.js.map +1 -0
  141. package/dist/src/scripts/github-import/types.d.ts +108 -0
  142. package/dist/src/scripts/github-import/types.d.ts.map +1 -0
  143. package/dist/src/scripts/github-import/types.js +44 -0
  144. package/dist/src/scripts/github-import/types.js.map +1 -0
  145. package/dist/src/scripts/github-import/utils.d.ts +13 -0
  146. package/dist/src/scripts/github-import/utils.d.ts.map +1 -0
  147. package/dist/src/scripts/github-import/utils.js +28 -0
  148. package/dist/src/scripts/github-import/utils.js.map +1 -0
  149. package/dist/src/scripts/import-github-skills.d.ts +3 -12
  150. package/dist/src/scripts/import-github-skills.d.ts.map +1 -1
  151. package/dist/src/scripts/import-github-skills.js +18 -398
  152. package/dist/src/scripts/import-github-skills.js.map +1 -1
  153. package/dist/src/scripts/scan-imported-skills.d.ts +7 -7
  154. package/dist/src/scripts/scan-imported-skills.d.ts.map +1 -1
  155. package/dist/src/scripts/scan-imported-skills.js +8 -397
  156. package/dist/src/scripts/scan-imported-skills.js.map +1 -1
  157. package/dist/src/scripts/skill-scanner/categorizer.d.ts +43 -0
  158. package/dist/src/scripts/skill-scanner/categorizer.d.ts.map +1 -0
  159. package/dist/src/scripts/skill-scanner/categorizer.js +61 -0
  160. package/dist/src/scripts/skill-scanner/categorizer.js.map +1 -0
  161. package/dist/src/scripts/skill-scanner/file-scanner.d.ts +43 -0
  162. package/dist/src/scripts/skill-scanner/file-scanner.d.ts.map +1 -0
  163. package/dist/src/scripts/skill-scanner/file-scanner.js +90 -0
  164. package/dist/src/scripts/skill-scanner/file-scanner.js.map +1 -0
  165. package/dist/src/scripts/skill-scanner/index.d.ts +22 -0
  166. package/dist/src/scripts/skill-scanner/index.d.ts.map +1 -0
  167. package/dist/src/scripts/skill-scanner/index.js +43 -0
  168. package/dist/src/scripts/skill-scanner/index.js.map +1 -0
  169. package/dist/src/scripts/skill-scanner/logger.d.ts +59 -0
  170. package/dist/src/scripts/skill-scanner/logger.d.ts.map +1 -0
  171. package/dist/src/scripts/skill-scanner/logger.js +104 -0
  172. package/dist/src/scripts/skill-scanner/logger.js.map +1 -0
  173. package/dist/src/scripts/skill-scanner/reporter.d.ts +56 -0
  174. package/dist/src/scripts/skill-scanner/reporter.d.ts.map +1 -0
  175. package/dist/src/scripts/skill-scanner/reporter.js +166 -0
  176. package/dist/src/scripts/skill-scanner/reporter.js.map +1 -0
  177. package/dist/src/scripts/skill-scanner/scanner.d.ts +44 -0
  178. package/dist/src/scripts/skill-scanner/scanner.d.ts.map +1 -0
  179. package/dist/src/scripts/skill-scanner/scanner.js +140 -0
  180. package/dist/src/scripts/skill-scanner/scanner.js.map +1 -0
  181. package/dist/src/scripts/skill-scanner/trust-scorer.d.ts +59 -0
  182. package/dist/src/scripts/skill-scanner/trust-scorer.d.ts.map +1 -0
  183. package/dist/src/scripts/skill-scanner/trust-scorer.js +62 -0
  184. package/dist/src/scripts/skill-scanner/trust-scorer.js.map +1 -0
  185. package/dist/src/scripts/skill-scanner/types.d.ts +98 -0
  186. package/dist/src/scripts/skill-scanner/types.d.ts.map +1 -0
  187. package/dist/src/scripts/skill-scanner/types.js +7 -0
  188. package/dist/src/scripts/skill-scanner/types.js.map +1 -0
  189. package/dist/src/scripts/validate-skills.d.ts +3 -172
  190. package/dist/src/scripts/validate-skills.d.ts.map +1 -1
  191. package/dist/src/scripts/validate-skills.js +6 -519
  192. package/dist/src/scripts/validate-skills.js.map +1 -1
  193. package/dist/src/scripts/validation/deduplication.d.ts +23 -0
  194. package/dist/src/scripts/validation/deduplication.d.ts.map +1 -0
  195. package/dist/src/scripts/validation/deduplication.js +127 -0
  196. package/dist/src/scripts/validation/deduplication.js.map +1 -0
  197. package/dist/src/scripts/validation/field-validators.d.ts +9 -0
  198. package/dist/src/scripts/validation/field-validators.d.ts.map +1 -0
  199. package/dist/src/scripts/validation/field-validators.js +135 -0
  200. package/dist/src/scripts/validation/field-validators.js.map +1 -0
  201. package/dist/src/scripts/validation/index.d.ts +29 -0
  202. package/dist/src/scripts/validation/index.d.ts.map +1 -0
  203. package/dist/src/scripts/validation/index.js +84 -0
  204. package/dist/src/scripts/validation/index.js.map +1 -0
  205. package/dist/src/scripts/validation/normalizers.d.ts +29 -0
  206. package/dist/src/scripts/validation/normalizers.d.ts.map +1 -0
  207. package/dist/src/scripts/validation/normalizers.js +79 -0
  208. package/dist/src/scripts/validation/normalizers.js.map +1 -0
  209. package/dist/src/scripts/validation/pipeline.d.ts +13 -0
  210. package/dist/src/scripts/validation/pipeline.d.ts.map +1 -0
  211. package/dist/src/scripts/validation/pipeline.js +126 -0
  212. package/dist/src/scripts/validation/pipeline.js.map +1 -0
  213. package/dist/src/scripts/validation/types.d.ts +128 -0
  214. package/dist/src/scripts/validation/types.d.ts.map +1 -0
  215. package/dist/src/scripts/validation/types.js +43 -0
  216. package/dist/src/scripts/validation/types.js.map +1 -0
  217. package/dist/src/security/index.d.ts +5 -4
  218. package/dist/src/security/index.d.ts.map +1 -1
  219. package/dist/src/security/index.js +8 -2
  220. package/dist/src/security/index.js.map +1 -1
  221. package/dist/src/security/rate-limiter/RateLimiter.d.ts +86 -0
  222. package/dist/src/security/rate-limiter/RateLimiter.d.ts.map +1 -0
  223. package/dist/src/security/rate-limiter/RateLimiter.js +260 -0
  224. package/dist/src/security/rate-limiter/RateLimiter.js.map +1 -0
  225. package/dist/src/security/rate-limiter/constants.d.ts +15 -0
  226. package/dist/src/security/rate-limiter/constants.d.ts.map +1 -0
  227. package/dist/src/security/rate-limiter/constants.js +15 -0
  228. package/dist/src/security/rate-limiter/constants.js.map +1 -0
  229. package/dist/src/security/rate-limiter/errors.d.ts +22 -0
  230. package/dist/src/security/rate-limiter/errors.d.ts.map +1 -0
  231. package/dist/src/security/rate-limiter/errors.js +32 -0
  232. package/dist/src/security/rate-limiter/errors.js.map +1 -0
  233. package/dist/src/security/rate-limiter/index.d.ts +12 -0
  234. package/dist/src/security/rate-limiter/index.d.ts.map +1 -0
  235. package/dist/src/security/rate-limiter/index.js +16 -0
  236. package/dist/src/security/rate-limiter/index.js.map +1 -0
  237. package/dist/src/security/rate-limiter/metrics-manager.d.ts +55 -0
  238. package/dist/src/security/rate-limiter/metrics-manager.d.ts.map +1 -0
  239. package/dist/src/security/rate-limiter/metrics-manager.js +144 -0
  240. package/dist/src/security/rate-limiter/metrics-manager.js.map +1 -0
  241. package/dist/src/security/rate-limiter/presets.d.ts +52 -0
  242. package/dist/src/security/rate-limiter/presets.d.ts.map +1 -0
  243. package/dist/src/security/rate-limiter/presets.js +53 -0
  244. package/dist/src/security/rate-limiter/presets.js.map +1 -0
  245. package/dist/src/security/rate-limiter/queue-manager.d.ts +59 -0
  246. package/dist/src/security/rate-limiter/queue-manager.d.ts.map +1 -0
  247. package/dist/src/security/rate-limiter/queue-manager.js +189 -0
  248. package/dist/src/security/rate-limiter/queue-manager.js.map +1 -0
  249. package/dist/src/security/rate-limiter/storage.d.ts +34 -0
  250. package/dist/src/security/rate-limiter/storage.d.ts.map +1 -0
  251. package/dist/src/security/rate-limiter/storage.js +80 -0
  252. package/dist/src/security/rate-limiter/storage.js.map +1 -0
  253. package/dist/src/security/rate-limiter/token-bucket.d.ts +44 -0
  254. package/dist/src/security/rate-limiter/token-bucket.d.ts.map +1 -0
  255. package/dist/src/security/rate-limiter/token-bucket.js +99 -0
  256. package/dist/src/security/rate-limiter/token-bucket.js.map +1 -0
  257. package/dist/src/security/rate-limiter/types.d.ts +104 -0
  258. package/dist/src/security/rate-limiter/types.d.ts.map +1 -0
  259. package/dist/src/security/rate-limiter/types.js +7 -0
  260. package/dist/src/security/rate-limiter/types.js.map +1 -0
  261. package/dist/src/security/scanner/SecurityScanner.d.ts +94 -0
  262. package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -0
  263. package/dist/src/security/scanner/SecurityScanner.js +403 -0
  264. package/dist/src/security/scanner/SecurityScanner.js.map +1 -0
  265. package/dist/src/security/scanner/index.d.ts +11 -0
  266. package/dist/src/security/scanner/index.d.ts.map +1 -0
  267. package/dist/src/security/scanner/index.js +14 -0
  268. package/dist/src/security/scanner/index.js.map +1 -0
  269. package/dist/src/security/scanner/patterns.d.ts +14 -0
  270. package/dist/src/security/scanner/patterns.d.ts.map +1 -0
  271. package/dist/src/security/scanner/patterns.js +147 -0
  272. package/dist/src/security/scanner/patterns.js.map +1 -0
  273. package/dist/src/security/scanner/regex-utils.d.ts +33 -0
  274. package/dist/src/security/scanner/regex-utils.d.ts.map +1 -0
  275. package/dist/src/security/scanner/regex-utils.js +41 -0
  276. package/dist/src/security/scanner/regex-utils.js.map +1 -0
  277. package/dist/src/security/scanner/types.d.ts +63 -0
  278. package/dist/src/security/scanner/types.d.ts.map +1 -0
  279. package/dist/src/security/scanner/types.js +7 -0
  280. package/dist/src/security/scanner/types.js.map +1 -0
  281. package/dist/src/security/scanner/weights.d.ts +15 -0
  282. package/dist/src/security/scanner/weights.d.ts.map +1 -0
  283. package/dist/src/security/scanner/weights.js +28 -0
  284. package/dist/src/security/scanner/weights.js.map +1 -0
  285. package/dist/src/session/SessionHealthMonitor.d.ts +5 -168
  286. package/dist/src/session/SessionHealthMonitor.d.ts.map +1 -1
  287. package/dist/src/session/SessionHealthMonitor.js +22 -91
  288. package/dist/src/session/SessionHealthMonitor.js.map +1 -1
  289. package/dist/src/session/health-checks.d.ts +37 -0
  290. package/dist/src/session/health-checks.d.ts.map +1 -0
  291. package/dist/src/session/health-checks.js +64 -0
  292. package/dist/src/session/health-checks.js.map +1 -0
  293. package/dist/src/session/health-types.d.ts +78 -0
  294. package/dist/src/session/health-types.d.ts.map +1 -0
  295. package/dist/src/session/health-types.js +16 -0
  296. package/dist/src/session/health-types.js.map +1 -0
  297. package/dist/src/session/index.d.ts +5 -1
  298. package/dist/src/session/index.d.ts.map +1 -1
  299. package/dist/src/session/index.js +9 -0
  300. package/dist/src/session/index.js.map +1 -1
  301. package/dist/src/session/metrics-collector.d.ts +23 -0
  302. package/dist/src/session/metrics-collector.d.ts.map +1 -0
  303. package/dist/src/session/metrics-collector.js +44 -0
  304. package/dist/src/session/metrics-collector.js.map +1 -0
  305. package/dist/src/session/typed-event-emitter.d.ts +70 -0
  306. package/dist/src/session/typed-event-emitter.d.ts.map +1 -0
  307. package/dist/src/session/typed-event-emitter.js +79 -0
  308. package/dist/src/session/typed-event-emitter.js.map +1 -0
  309. package/dist/src/sources/BaseSourceAdapter.d.ts +1 -1
  310. package/dist/src/sources/BaseSourceAdapter.d.ts.map +1 -1
  311. package/dist/src/sources/BaseSourceAdapter.js +2 -2
  312. package/dist/src/sources/BaseSourceAdapter.js.map +1 -1
  313. package/dist/src/telemetry/index.d.ts +1 -0
  314. package/dist/src/telemetry/index.d.ts.map +1 -1
  315. package/dist/src/telemetry/index.js +2 -0
  316. package/dist/src/telemetry/index.js.map +1 -1
  317. package/dist/src/telemetry/posthog.d.ts +125 -0
  318. package/dist/src/telemetry/posthog.d.ts.map +1 -0
  319. package/dist/src/telemetry/posthog.js +198 -0
  320. package/dist/src/telemetry/posthog.js.map +1 -0
  321. package/dist/tests/RateLimiter.test.js +4 -4
  322. package/dist/tests/RateLimiter.test.js.map +1 -1
  323. package/dist/tests/e2e/security/security.e2e.test.js +3 -3
  324. package/dist/tests/e2e/security/security.e2e.test.js.map +1 -1
  325. package/package.json +2 -1
@@ -1,528 +1,19 @@
1
1
  /**
2
2
  * SMI-863: Skill Validation and Deduplication Pipeline
3
3
  *
4
- * Validates skill data against schema rules and deduplicates
5
- * entries using repository URL as primary key with source priority.
4
+ * This file re-exports from the split validation module for backwards compatibility.
5
+ * See ./validation/ for the implementation.
6
6
  *
7
7
  * Usage:
8
8
  * npx tsx packages/core/src/scripts/validate-skills.ts [--input skills.json] [--output-dir data]
9
- *
10
- * Validation Rules:
11
- * 1. Name present (non-empty)
12
- * 2. Author present (use repo owner if missing)
13
- * 3. Description present (use first 100 chars of name if missing)
14
- * 4. Valid ID format (author/name)
15
- * 5. Quality score 0-100
16
- * 6. Valid trust tier enum
17
- *
18
- * Deduplication:
19
- * - Primary key: repo_url
20
- * - Source priority: anthropic-official (100) > github (80) > claude-plugins (40)
21
- * - Keep higher quality score on conflict
22
- * - Semantic similarity detection (threshold 0.85)
23
9
  */
10
+ // Re-export everything from the validation module
11
+ export * from './validation/index.js';
12
+ // Import and re-run the CLI if this file is executed directly
24
13
  import * as fs from 'fs';
25
- import * as path from 'path';
26
- import { createHash } from 'crypto';
27
- import { z } from 'zod';
28
- import { EmbeddingService } from '../embeddings/index.js';
29
- // ============================================================================
30
- // Configuration
31
- // ============================================================================
32
- const CONFIG = {
33
- /** Default input file path */
34
- DEFAULT_INPUT: './data/skills.json',
35
- /** Default output directory */
36
- DEFAULT_OUTPUT_DIR: './data',
37
- /** Semantic similarity threshold for duplicate detection */
38
- SIMILARITY_THRESHOLD: 0.85,
39
- /** Source priority scores */
40
- SOURCE_PRIORITY: {
41
- 'anthropic-official': 100,
42
- github: 80,
43
- 'claude-plugins': 40,
44
- unknown: 0,
45
- },
46
- /** Valid trust tiers */
47
- VALID_TRUST_TIERS: ['verified', 'community', 'experimental', 'unknown'],
48
- };
49
- // ============================================================================
50
- // Zod Schema for Validation
51
- // ============================================================================
52
- const TrustTierSchema = z.enum(CONFIG.VALID_TRUST_TIERS);
53
- const _ValidatedSkillSchema = z.object({
54
- id: z
55
- .string()
56
- .min(1)
57
- .regex(/^[^/]+\/[^/]+$/, 'ID must be in format author/name'),
58
- name: z.string().min(1),
59
- description: z.string().min(1),
60
- author: z.string().min(1),
61
- repo_url: z.string().url().nullable(),
62
- quality_score: z.number().min(0).max(100),
63
- trust_tier: TrustTierSchema,
64
- tags: z.array(z.string()),
65
- source: z.string().min(1),
66
- });
67
- // ============================================================================
68
- // Utility Functions
69
- // ============================================================================
70
- /**
71
- * Extract owner from repo URL
72
- */
73
- function extractOwnerFromRepoUrl(repoUrl) {
74
- if (!repoUrl)
75
- return null;
76
- try {
77
- const url = new URL(repoUrl);
78
- const parts = url.pathname.split('/').filter(Boolean);
79
- return parts[0] || null;
80
- }
81
- catch {
82
- return null;
83
- }
84
- }
85
- /**
86
- * Generate skill ID from author and name
87
- */
88
- function generateSkillId(author, name) {
89
- const sanitize = (s) => s
90
- .toLowerCase()
91
- .replace(/[^a-z0-9-_]/g, '-')
92
- .replace(/-+/g, '-')
93
- .replace(/^-|-$/g, '');
94
- return `${sanitize(author)}/${sanitize(name)}`;
95
- }
96
- /**
97
- * Normalize quality score to 0-100 range
98
- */
99
- function normalizeQualityScore(score) {
100
- if (score === null || score === undefined)
101
- return 50; // Default score
102
- // If score is 0-1, convert to 0-100
103
- if (score >= 0 && score <= 1) {
104
- return Math.round(score * 100);
105
- }
106
- // Clamp to 0-100
107
- return Math.max(0, Math.min(100, Math.round(score)));
108
- }
109
- /**
110
- * Normalize trust tier to valid enum value
111
- */
112
- function normalizeTrustTier(tier) {
113
- if (!tier)
114
- return 'unknown';
115
- const normalized = tier.toLowerCase().trim();
116
- // Map common variations
117
- const mappings = {
118
- verified: 'verified',
119
- official: 'verified',
120
- 'anthropic-official': 'verified',
121
- community: 'community',
122
- experimental: 'experimental',
123
- beta: 'experimental',
124
- unknown: 'unknown',
125
- unverified: 'unknown',
126
- standard: 'community',
127
- };
128
- return mappings[normalized] || 'unknown';
129
- }
130
- /**
131
- * Normalize source name
132
- */
133
- function normalizeSource(source) {
134
- if (!source)
135
- return 'unknown';
136
- return source.toLowerCase().trim();
137
- }
138
- /**
139
- * Generate hash for repo URL deduplication
140
- */
141
- function hashRepoUrl(repoUrl) {
142
- return createHash('md5').update(repoUrl.toLowerCase().trim()).digest('hex');
143
- }
144
- // ============================================================================
145
- // Validation Functions
146
- // ============================================================================
147
- /**
148
- * Validate a single skill and apply auto-fixes where possible
149
- */
150
- function validateSkill(raw) {
151
- const errors = [];
152
- const warnings = [];
153
- const fixes = [];
154
- // Normalize field names (handle both snake_case and camelCase)
155
- const repoUrl = raw.repo_url ?? raw.repoUrl ?? null;
156
- const qualityScore = raw.quality_score ?? raw.qualityScore ?? null;
157
- const trustTier = raw.trust_tier ?? raw.trustTier ?? null;
158
- // 1. Validate name (required)
159
- const name = raw.name?.trim() || '';
160
- if (!name) {
161
- errors.push({ field: 'name', message: 'Name is required and cannot be empty' });
162
- }
163
- // 2. Validate author (use repo owner if missing)
164
- let author = raw.author?.trim() || '';
165
- if (!author) {
166
- const ownerFromUrl = extractOwnerFromRepoUrl(repoUrl);
167
- if (ownerFromUrl) {
168
- author = ownerFromUrl;
169
- fixes.push(`Auto-filled author from repo URL: "${author}"`);
170
- }
171
- else {
172
- errors.push({
173
- field: 'author',
174
- message: 'Author is required (could not extract from repo URL)',
175
- });
176
- }
177
- }
178
- // 3. Validate description (use first 100 chars of name if missing)
179
- let description = raw.description?.trim() || '';
180
- if (!description) {
181
- if (name) {
182
- description = name.length > 100 ? name.substring(0, 100) + '...' : name;
183
- fixes.push(`Auto-filled description from name: "${description}"`);
184
- }
185
- else {
186
- errors.push({ field: 'description', message: 'Description is required' });
187
- }
188
- }
189
- // 4. Validate ID format (author/name)
190
- let id = raw.id?.trim() || '';
191
- if (!id && author && name) {
192
- id = generateSkillId(author, name);
193
- fixes.push(`Auto-generated ID: "${id}"`);
194
- }
195
- if (id && !id.match(/^[^/]+\/[^/]+$/)) {
196
- if (author && name) {
197
- const newId = generateSkillId(author, name);
198
- fixes.push(`Fixed invalid ID format: "${id}" -> "${newId}"`);
199
- id = newId;
200
- }
201
- else {
202
- errors.push({
203
- field: 'id',
204
- message: 'ID must be in format author/name',
205
- value: id,
206
- });
207
- }
208
- }
209
- // 5. Validate quality score (0-100)
210
- const normalizedScore = normalizeQualityScore(qualityScore);
211
- if (qualityScore !== null && qualityScore !== undefined) {
212
- if (qualityScore < 0 || qualityScore > 100) {
213
- if (qualityScore >= 0 && qualityScore <= 1) {
214
- fixes.push(`Normalized quality score from 0-1 to 0-100: ${qualityScore} -> ${normalizedScore}`);
215
- }
216
- else {
217
- fixes.push(`Clamped quality score to 0-100: ${qualityScore} -> ${normalizedScore}`);
218
- }
219
- }
220
- }
221
- else {
222
- warnings.push('Quality score missing, defaulted to 50');
223
- }
224
- // 6. Validate trust tier (enum)
225
- const normalizedTrustTier = normalizeTrustTier(trustTier);
226
- if (trustTier && !CONFIG.VALID_TRUST_TIERS.includes(trustTier)) {
227
- fixes.push(`Normalized trust tier: "${trustTier}" -> "${normalizedTrustTier}"`);
228
- }
229
- // Validate source
230
- const source = normalizeSource(raw.source);
231
- if (!raw.source) {
232
- warnings.push('Source missing, defaulted to "unknown"');
233
- }
234
- // Validate tags
235
- const tags = Array.isArray(raw.tags) ? raw.tags.filter((t) => typeof t === 'string') : [];
236
- // Check repo_url format if present
237
- if (repoUrl) {
238
- try {
239
- new URL(repoUrl);
240
- }
241
- catch {
242
- warnings.push(`Invalid repo URL format: "${repoUrl}"`);
243
- }
244
- }
245
- // Build validated skill if no critical errors
246
- if (errors.length === 0 && name && author && description && id) {
247
- const validatedSkill = {
248
- id,
249
- name,
250
- description,
251
- author,
252
- repo_url: repoUrl,
253
- quality_score: normalizedScore,
254
- trust_tier: normalizedTrustTier,
255
- tags,
256
- source,
257
- };
258
- return {
259
- valid: true,
260
- skill: validatedSkill,
261
- original: raw,
262
- errors: [],
263
- warnings,
264
- fixes,
265
- };
266
- }
267
- return {
268
- valid: false,
269
- skill: null,
270
- original: raw,
271
- errors,
272
- warnings,
273
- fixes,
274
- };
275
- }
276
- // ============================================================================
277
- // Deduplication Functions
278
- // ============================================================================
279
- /**
280
- * Compare two skills and determine which to keep based on source priority and quality
281
- */
282
- function compareSkillsForDedup(a, b) {
283
- const priorityA = CONFIG.SOURCE_PRIORITY[a.source] ?? CONFIG.SOURCE_PRIORITY.unknown;
284
- const priorityB = CONFIG.SOURCE_PRIORITY[b.source] ?? CONFIG.SOURCE_PRIORITY.unknown;
285
- // Higher source priority wins
286
- if (priorityA !== priorityB) {
287
- return priorityA > priorityB ? 'a' : 'b';
288
- }
289
- // Same source priority - higher quality score wins
290
- return a.quality_score >= b.quality_score ? 'a' : 'b';
291
- }
292
- /**
293
- * Deduplicate skills by repo_url
294
- */
295
- function deduplicateByRepoUrl(skills) {
296
- const seen = new Map();
297
- const duplicates = [];
298
- for (const skill of skills) {
299
- if (!skill.repo_url) {
300
- // Skills without repo_url are kept (will be checked for semantic similarity)
301
- // Use ID as key for skills without repo_url
302
- const key = `no-url:${skill.id}`;
303
- if (!seen.has(key)) {
304
- seen.set(key, skill);
305
- }
306
- continue;
307
- }
308
- const key = hashRepoUrl(skill.repo_url);
309
- const existing = seen.get(key);
310
- if (existing) {
311
- const winner = compareSkillsForDedup(existing, skill);
312
- if (winner === 'b') {
313
- duplicates.push({
314
- kept: skill,
315
- discarded: existing,
316
- reason: 'repo_url',
317
- });
318
- seen.set(key, skill);
319
- }
320
- else {
321
- duplicates.push({
322
- kept: existing,
323
- discarded: skill,
324
- reason: 'repo_url',
325
- });
326
- }
327
- }
328
- else {
329
- seen.set(key, skill);
330
- }
331
- }
332
- return {
333
- unique: Array.from(seen.values()),
334
- duplicates,
335
- };
336
- }
337
- /**
338
- * Detect semantic duplicates using embedding similarity
339
- */
340
- async function detectSemanticDuplicates(skills, threshold = CONFIG.SIMILARITY_THRESHOLD) {
341
- if (skills.length === 0) {
342
- return { unique: [], duplicates: [] };
343
- }
344
- // Use fallback mode for faster processing
345
- const embeddingService = new EmbeddingService({ useFallback: true });
346
- const duplicates = [];
347
- const unique = [];
348
- const embeddings = new Map();
349
- try {
350
- // Generate embeddings for all skills
351
- for (const skill of skills) {
352
- const text = `${skill.name} ${skill.description}`;
353
- const embedding = await embeddingService.embed(text);
354
- embeddings.set(skill.id, embedding);
355
- }
356
- // Check each skill against accepted unique skills
357
- for (const skill of skills) {
358
- const skillEmbedding = embeddings.get(skill.id);
359
- let isDuplicate = false;
360
- for (const uniqueSkill of unique) {
361
- const uniqueEmbedding = embeddings.get(uniqueSkill.id);
362
- const similarity = embeddingService.cosineSimilarity(skillEmbedding, uniqueEmbedding);
363
- if (similarity >= threshold) {
364
- // Found semantic duplicate
365
- const winner = compareSkillsForDedup(uniqueSkill, skill);
366
- if (winner === 'b') {
367
- // New skill is better - swap
368
- const index = unique.indexOf(uniqueSkill);
369
- unique[index] = skill;
370
- duplicates.push({
371
- kept: skill,
372
- discarded: uniqueSkill,
373
- reason: 'semantic_similarity',
374
- similarity,
375
- });
376
- }
377
- else {
378
- duplicates.push({
379
- kept: uniqueSkill,
380
- discarded: skill,
381
- reason: 'semantic_similarity',
382
- similarity,
383
- });
384
- }
385
- isDuplicate = true;
386
- break;
387
- }
388
- }
389
- if (!isDuplicate) {
390
- unique.push(skill);
391
- }
392
- }
393
- }
394
- finally {
395
- embeddingService.close();
396
- }
397
- return { unique, duplicates };
398
- }
399
- // ============================================================================
400
- // Pipeline Functions
401
- // ============================================================================
402
- /**
403
- * Run the complete validation and deduplication pipeline
404
- */
405
- export async function runValidationPipeline(inputPath, outputDir) {
406
- console.log('='.repeat(60));
407
- console.log('SMI-863: Skill Validation and Deduplication Pipeline');
408
- console.log('='.repeat(60));
409
- console.log();
410
- // Read input file
411
- console.log(`Reading input: ${inputPath}`);
412
- const inputData = JSON.parse(fs.readFileSync(inputPath, 'utf-8'));
413
- const rawSkills = Array.isArray(inputData) ? inputData : inputData.skills || [];
414
- console.log(`Found ${rawSkills.length} skills to process`);
415
- console.log();
416
- // Validate all skills
417
- console.log('Phase 1: Validation');
418
- console.log('-'.repeat(40));
419
- const validationResults = rawSkills.map(validateSkill);
420
- const validSkills = validationResults.filter((r) => r.valid).map((r) => r.skill);
421
- const invalidResults = validationResults.filter((r) => !r.valid);
422
- console.log(` Valid: ${validSkills.length}`);
423
- console.log(` Invalid: ${invalidResults.length}`);
424
- console.log(` Auto-fixes applied: ${validationResults.reduce((sum, r) => sum + r.fixes.length, 0)}`);
425
- console.log();
426
- // Deduplicate by repo_url
427
- console.log('Phase 2: Deduplication by repo_url');
428
- console.log('-'.repeat(40));
429
- const repoUrlDedup = deduplicateByRepoUrl(validSkills);
430
- console.log(` Before: ${validSkills.length}`);
431
- console.log(` After: ${repoUrlDedup.unique.length}`);
432
- console.log(` Duplicates: ${repoUrlDedup.duplicates.length}`);
433
- console.log();
434
- // Semantic similarity detection
435
- console.log('Phase 3: Semantic similarity detection');
436
- console.log('-'.repeat(40));
437
- const semanticDedup = await detectSemanticDuplicates(repoUrlDedup.unique);
438
- console.log(` Before: ${repoUrlDedup.unique.length}`);
439
- console.log(` After: ${semanticDedup.unique.length}`);
440
- console.log(` Semantic duplicates: ${semanticDedup.duplicates.length}`);
441
- console.log();
442
- // Combine all duplicates
443
- const allDuplicates = [...repoUrlDedup.duplicates, ...semanticDedup.duplicates];
444
- // Build validation report
445
- const errorsByField = {};
446
- for (const result of invalidResults) {
447
- for (const error of result.errors) {
448
- errorsByField[error.field] = (errorsByField[error.field] || 0) + 1;
449
- }
450
- }
451
- const validationReport = {
452
- timestamp: new Date().toISOString(),
453
- summary: {
454
- total_input: rawSkills.length,
455
- valid_skills: validSkills.length,
456
- invalid_skills: invalidResults.length,
457
- duplicates_removed: allDuplicates.length,
458
- auto_fixes_applied: validationResults.reduce((sum, r) => sum + r.fixes.length, 0),
459
- errors_by_field: errorsByField,
460
- },
461
- errors: invalidResults.map((r) => ({
462
- skill_id: r.original.id,
463
- skill_name: r.original.name,
464
- errors: r.errors,
465
- })),
466
- warnings: validationResults
467
- .filter((r) => r.warnings.length > 0)
468
- .map((r) => ({
469
- skill_id: r.skill?.id || r.original.id,
470
- skill_name: r.skill?.name || r.original.name,
471
- warnings: r.warnings,
472
- })),
473
- fixes: validationResults
474
- .filter((r) => r.fixes.length > 0)
475
- .map((r) => ({
476
- skill_id: r.skill?.id || r.original.id,
477
- skill_name: r.skill?.name || r.original.name,
478
- fixes: r.fixes,
479
- })),
480
- };
481
- // Build duplicates report
482
- const duplicatesReport = {
483
- timestamp: new Date().toISOString(),
484
- summary: {
485
- total_duplicates: allDuplicates.length,
486
- by_repo_url: repoUrlDedup.duplicates.length,
487
- by_semantic_similarity: semanticDedup.duplicates.length,
488
- },
489
- duplicates: allDuplicates,
490
- };
491
- // Write output files
492
- console.log('Phase 4: Writing output files');
493
- console.log('-'.repeat(40));
494
- // Ensure output directory exists
495
- if (!fs.existsSync(outputDir)) {
496
- fs.mkdirSync(outputDir, { recursive: true });
497
- }
498
- const validatedSkillsPath = path.join(outputDir, 'validated-skills.json');
499
- const validationReportPath = path.join(outputDir, 'validation-report.json');
500
- const duplicatesReportPath = path.join(outputDir, 'duplicates-report.json');
501
- fs.writeFileSync(validatedSkillsPath, JSON.stringify(semanticDedup.unique, null, 2));
502
- console.log(` Validated skills: ${validatedSkillsPath}`);
503
- fs.writeFileSync(validationReportPath, JSON.stringify(validationReport, null, 2));
504
- console.log(` Validation report: ${validationReportPath}`);
505
- fs.writeFileSync(duplicatesReportPath, JSON.stringify(duplicatesReport, null, 2));
506
- console.log(` Duplicates report: ${duplicatesReportPath}`);
507
- console.log();
508
- console.log('='.repeat(60));
509
- console.log('Pipeline Complete');
510
- console.log('='.repeat(60));
511
- console.log(` Final skill count: ${semanticDedup.unique.length}`);
512
- console.log(` Total duplicates removed: ${allDuplicates.length}`);
513
- console.log(` Validation errors: ${invalidResults.length}`);
514
- return {
515
- validatedSkills: semanticDedup.unique,
516
- validationReport,
517
- duplicatesReport,
518
- };
519
- }
520
- // ============================================================================
521
- // CLI Entry Point
522
- // ============================================================================
14
+ import { CONFIG, runValidationPipeline } from './validation/index.js';
523
15
  async function main() {
524
16
  const args = process.argv.slice(2);
525
- // Parse arguments
526
17
  let inputPath = CONFIG.DEFAULT_INPUT;
527
18
  let outputDir = CONFIG.DEFAULT_OUTPUT_DIR;
528
19
  for (let i = 0; i < args.length; i++) {
@@ -549,7 +40,6 @@ Output files:
549
40
  process.exit(0);
550
41
  }
551
42
  }
552
- // Validate input file exists
553
43
  if (!fs.existsSync(inputPath)) {
554
44
  console.error(`Error: Input file not found: ${inputPath}`);
555
45
  process.exit(1);
@@ -562,11 +52,8 @@ Output files:
562
52
  process.exit(1);
563
53
  }
564
54
  }
565
- // Run if executed directly
566
55
  const isMainModule = process.argv[1]?.includes('validate-skills');
567
56
  if (isMainModule) {
568
57
  main().catch(console.error);
569
58
  }
570
- // Export for testing
571
- export { CONFIG, validateSkill, deduplicateByRepoUrl, detectSemanticDuplicates, compareSkillsForDedup, extractOwnerFromRepoUrl, generateSkillId, normalizeQualityScore, normalizeTrustTier, normalizeSource, hashRepoUrl, };
572
59
  //# sourceMappingURL=validate-skills.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate-skills.js","sourceRoot":"","sources":["../../../src/scripts/validate-skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate-skills.js","sourceRoot":"","sources":["../../../src/scripts/validate-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,kDAAkD;AAClD,cAAc,uBAAuB,CAAA;AAErC,8DAA8D;AAC9D,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAErE,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAElC,IAAI,SAAS,GAAW,MAAM,CAAC,aAAa,CAAA;IAC5C,IAAI,SAAS,GAAW,MAAM,CAAC,kBAAkB,CAAA;IAEjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACzC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QACvB,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,cAAc,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACrD,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QACvB,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC;;;;2DAIyC,MAAM,CAAC,aAAa;gEACf,MAAM,CAAC,kBAAkB;;;;;;;CAOxF,CAAC,CAAA;YACI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,gCAAgC,SAAS,EAAE,CAAC,CAAA;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,qBAAqB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAA;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA;AACjE,IAAI,YAAY,EAAE,CAAC;IACjB,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7B,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * SMI-863: Deduplication functions for skill validation
3
+ */
4
+ import { ValidatedSkill, DuplicateEntry } from './types.js';
5
+ /**
6
+ * Compare two skills and determine which to keep based on source priority and quality
7
+ */
8
+ export declare function compareSkillsForDedup(a: ValidatedSkill, b: ValidatedSkill): 'a' | 'b';
9
+ /**
10
+ * Deduplicate skills by repo_url
11
+ */
12
+ export declare function deduplicateByRepoUrl(skills: ValidatedSkill[]): {
13
+ unique: ValidatedSkill[];
14
+ duplicates: DuplicateEntry[];
15
+ };
16
+ /**
17
+ * Detect semantic duplicates using embedding similarity
18
+ */
19
+ export declare function detectSemanticDuplicates(skills: ValidatedSkill[], threshold?: number): Promise<{
20
+ unique: ValidatedSkill[];
21
+ duplicates: DuplicateEntry[];
22
+ }>;
23
+ //# sourceMappingURL=deduplication.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deduplication.d.ts","sourceRoot":"","sources":["../../../../src/scripts/validation/deduplication.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAU,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAGnE;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,GAAG,GAAG,GAAG,GAAG,CAWrF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG;IAC9D,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,UAAU,EAAE,cAAc,EAAE,CAAA;CAC7B,CA2CA;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,cAAc,EAAE,EACxB,SAAS,GAAE,MAAoC,GAC9C,OAAO,CAAC;IACT,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,UAAU,EAAE,cAAc,EAAE,CAAA;CAC7B,CAAC,CA+DD"}