@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,15 +1,15 @@
1
1
  /**
2
2
  * SMI-864: Security Scanner for Imported Skills
3
+ * SMI-1189: This file is now a thin wrapper for backwards compatibility.
3
4
  *
4
- * Scans all skills from imported-skills.json for security vulnerabilities
5
- * and categorizes them by severity level.
5
+ * The implementation has been refactored into modular files:
6
+ * - packages/core/src/scripts/skill-scanner/
6
7
  *
7
8
  * Usage: npx tsx packages/core/src/scripts/scan-imported-skills.ts [path-to-imported-skills.json]
8
9
  *
9
- * Output Files:
10
- * - data/security-report.json: Full security report with all findings
11
- * - data/quarantine-skills.json: Skills with HIGH/CRITICAL findings (blocked)
12
- * - data/safe-skills.json: Skills approved for import (passed security scan)
10
+ * For direct imports, use:
11
+ * import { scanImportedSkills } from './skill-scanner/index.js'
13
12
  */
14
- export {};
13
+ export * from './skill-scanner/index.js';
14
+ import './skill-scanner/index.js';
15
15
  //# sourceMappingURL=scan-imported-skills.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scan-imported-skills.d.ts","sourceRoot":"","sources":["../../../src/scripts/scan-imported-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
1
+ {"version":3,"file":"scan-imported-skills.d.ts","sourceRoot":"","sources":["../../../src/scripts/scan-imported-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,cAAc,0BAA0B,CAAA;AAGxC,OAAO,0BAA0B,CAAA"}
@@ -1,405 +1,16 @@
1
1
  /**
2
2
  * SMI-864: Security Scanner for Imported Skills
3
+ * SMI-1189: This file is now a thin wrapper for backwards compatibility.
3
4
  *
4
- * Scans all skills from imported-skills.json for security vulnerabilities
5
- * and categorizes them by severity level.
5
+ * The implementation has been refactored into modular files:
6
+ * - packages/core/src/scripts/skill-scanner/
6
7
  *
7
8
  * Usage: npx tsx packages/core/src/scripts/scan-imported-skills.ts [path-to-imported-skills.json]
8
9
  *
9
- * Output Files:
10
- * - data/security-report.json: Full security report with all findings
11
- * - data/quarantine-skills.json: Skills with HIGH/CRITICAL findings (blocked)
12
- * - data/safe-skills.json: Skills approved for import (passed security scan)
10
+ * For direct imports, use:
11
+ * import { scanImportedSkills } from './skill-scanner/index.js'
13
12
  */
14
- import * as fs from 'fs/promises';
15
- import { existsSync, mkdirSync } from 'fs';
16
- import * as path from 'path';
17
- import { SecurityScanner } from '../security/scanner.js';
18
- // ============================================================================
19
- // Configuration
20
- // ============================================================================
21
- const CONFIG = {
22
- /** Default input file path */
23
- DEFAULT_INPUT: './data/imported-skills.json',
24
- /** Output directory for reports */
25
- OUTPUT_DIR: './data',
26
- /** Risk threshold for quarantine (skills at or above this are quarantined) */
27
- QUARANTINE_THRESHOLD: 40,
28
- /** Scanner options */
29
- SCANNER_OPTIONS: {
30
- riskThreshold: 40,
31
- },
32
- };
33
- // ============================================================================
34
- // Utility Functions
35
- // ============================================================================
36
- /**
37
- * Determines the severity category based on the highest severity finding
38
- */
39
- function determineSeverityCategory(findings) {
40
- if (findings.some((f) => f.severity === 'critical'))
41
- return 'CRITICAL';
42
- if (findings.some((f) => f.severity === 'high'))
43
- return 'HIGH';
44
- if (findings.some((f) => f.severity === 'medium'))
45
- return 'MEDIUM';
46
- return 'LOW';
47
- }
48
- /**
49
- * Determines if a skill should be quarantined based on findings
50
- */
51
- function shouldQuarantine(report) {
52
- // Quarantine if:
53
- // 1. Has critical or high severity findings
54
- // 2. Risk score exceeds threshold
55
- // 3. Scan failed (passed = false)
56
- return (!report.passed ||
57
- report.riskScore >= CONFIG.QUARANTINE_THRESHOLD ||
58
- report.findings.some((f) => f.severity === 'critical' || f.severity === 'high'));
59
- }
60
- /**
61
- * Extracts scannable content from an imported skill
62
- * Combines all text fields that should be scanned
63
- */
64
- function extractScannableContent(skill) {
65
- const parts = [];
66
- if (skill.name)
67
- parts.push(`# ${skill.name}`);
68
- if (skill.description)
69
- parts.push(skill.description);
70
- if (skill.content)
71
- parts.push(skill.content);
72
- if (skill.instructions)
73
- parts.push(skill.instructions);
74
- if (skill.trigger)
75
- parts.push(skill.trigger);
76
- if (skill.tags?.length)
77
- parts.push(`Tags: ${skill.tags.join(', ')}`);
78
- // Include metadata if present
79
- if (skill.metadata) {
80
- try {
81
- parts.push(JSON.stringify(skill.metadata));
82
- }
83
- catch {
84
- // Ignore serialization errors
85
- }
86
- }
87
- return parts.join('\n\n');
88
- }
89
- /**
90
- * Formats a duration in milliseconds to human-readable string
91
- */
92
- function formatDuration(ms) {
93
- if (ms < 1000)
94
- return `${ms.toFixed(0)}ms`;
95
- if (ms < 60000)
96
- return `${(ms / 1000).toFixed(1)}s`;
97
- return `${(ms / 60000).toFixed(1)}m`;
98
- }
99
- // ============================================================================
100
- // Logging Functions
101
- // ============================================================================
102
- function logHeader(title) {
103
- const border = '='.repeat(60);
104
- console.log(`\n${border}`);
105
- console.log(` ${title}`);
106
- console.log(`${border}\n`);
107
- }
108
- function logFinding(finding, skillId) {
109
- const severityIcon = {
110
- critical: '[CRITICAL]',
111
- high: '[HIGH] ',
112
- medium: '[MEDIUM] ',
113
- low: '[LOW] ',
114
- };
115
- console.log(` ${severityIcon[finding.severity]} ${finding.type}`);
116
- console.log(` Skill: ${skillId}`);
117
- console.log(` ${finding.message}`);
118
- if (finding.lineNumber) {
119
- console.log(` Line: ${finding.lineNumber}`);
120
- }
121
- if (finding.location) {
122
- console.log(` Location: ${finding.location.slice(0, 80)}...`);
123
- }
124
- console.log();
125
- }
126
- function logSummary(results) {
127
- const total = results.length;
128
- const passed = results.filter((r) => !r.isQuarantined).length;
129
- const quarantined = results.filter((r) => r.isQuarantined).length;
130
- const bySeverity = {
131
- CRITICAL: 0,
132
- HIGH: 0,
133
- MEDIUM: 0,
134
- LOW: 0,
135
- };
136
- for (const result of results) {
137
- bySeverity[result.severityCategory]++;
138
- }
139
- const avgRiskScore = results.reduce((sum, r) => sum + r.scanReport.riskScore, 0) / Math.max(total, 1);
140
- const maxRiskScore = Math.max(...results.map((r) => r.scanReport.riskScore), 0);
141
- console.log('\n' + '='.repeat(60));
142
- console.log(' SCAN SUMMARY');
143
- console.log('='.repeat(60));
144
- console.log(` Total Skills Scanned: ${total}`);
145
- console.log(` Passed (Safe): ${passed} (${((passed / total) * 100).toFixed(1)}%)`);
146
- console.log(` Quarantined: ${quarantined} (${((quarantined / total) * 100).toFixed(1)}%)`);
147
- console.log();
148
- console.log(' By Severity:');
149
- console.log(` CRITICAL: ${bySeverity.CRITICAL}`);
150
- console.log(` HIGH: ${bySeverity.HIGH}`);
151
- console.log(` MEDIUM: ${bySeverity.MEDIUM}`);
152
- console.log(` LOW: ${bySeverity.LOW}`);
153
- console.log();
154
- console.log(` Average Risk Score: ${avgRiskScore.toFixed(1)}`);
155
- console.log(` Maximum Risk Score: ${maxRiskScore}`);
156
- console.log('='.repeat(60) + '\n');
157
- }
158
- // ============================================================================
159
- // Main Scanning Logic
160
- // ============================================================================
161
- async function scanImportedSkills(inputPath) {
162
- const startTime = performance.now();
163
- logHeader('SMI-864: Security Scanner for Imported Skills');
164
- console.log(`Input file: ${inputPath}`);
165
- console.log(`Output directory: ${CONFIG.OUTPUT_DIR}`);
166
- console.log();
167
- // Validate input file exists
168
- if (!existsSync(inputPath)) {
169
- console.error(`Error: Input file not found: ${inputPath}`);
170
- console.error('Usage: npx tsx packages/core/src/scripts/scan-imported-skills.ts [path-to-imported-skills.json]');
171
- process.exit(1);
172
- }
173
- // Ensure output directory exists
174
- if (!existsSync(CONFIG.OUTPUT_DIR)) {
175
- mkdirSync(CONFIG.OUTPUT_DIR, { recursive: true });
176
- }
177
- // Read and parse imported skills
178
- console.log('Reading imported skills...');
179
- let skills;
180
- try {
181
- const content = await fs.readFile(inputPath, 'utf-8');
182
- const parsed = JSON.parse(content);
183
- // Handle both array format and object with skills property
184
- if (Array.isArray(parsed)) {
185
- skills = parsed;
186
- }
187
- else if (typeof parsed === 'object' &&
188
- parsed !== null &&
189
- 'skills' in parsed &&
190
- Array.isArray(parsed.skills)) {
191
- skills = parsed.skills;
192
- }
193
- else {
194
- throw new Error('Invalid format: expected array or object with skills array');
195
- }
196
- }
197
- catch (error) {
198
- console.error(`Error reading/parsing input file: ${error.message}`);
199
- process.exit(1);
200
- }
201
- console.log(`Found ${skills.length} skills to scan\n`);
202
- // Initialize scanner
203
- const scanner = new SecurityScanner(CONFIG.SCANNER_OPTIONS);
204
- // Scan all skills
205
- const results = [];
206
- const allFindings = [];
207
- let processedCount = 0;
208
- console.log('Scanning skills...');
209
- for (const skill of skills) {
210
- processedCount++;
211
- // Extract content to scan
212
- const content = extractScannableContent(skill);
213
- // Run security scan
214
- const report = scanner.scan(skill.id, content);
215
- // Determine categorization
216
- const severityCategory = determineSeverityCategory(report.findings);
217
- const isQuarantined = shouldQuarantine(report);
218
- // Create result entry
219
- const result = {
220
- skillId: skill.id,
221
- skillName: skill.name,
222
- author: skill.author || 'unknown',
223
- source: skill.source || 'unknown',
224
- scanReport: report,
225
- severityCategory,
226
- isQuarantined,
227
- scanTimestamp: new Date().toISOString(),
228
- };
229
- results.push(result);
230
- // Collect findings with skill context
231
- for (const finding of report.findings) {
232
- allFindings.push({ ...finding, skillId: skill.id });
233
- }
234
- // Log progress every 100 skills
235
- if (processedCount % 100 === 0) {
236
- console.log(` Processed ${processedCount}/${skills.length} skills...`);
237
- }
238
- }
239
- console.log(` Completed: ${processedCount}/${skills.length} skills\n`);
240
- // Log critical and high findings
241
- const criticalFindings = allFindings.filter((f) => f.severity === 'critical');
242
- const highFindings = allFindings.filter((f) => f.severity === 'high');
243
- if (criticalFindings.length > 0) {
244
- logHeader('CRITICAL FINDINGS');
245
- for (const finding of criticalFindings.slice(0, 20)) {
246
- logFinding(finding, finding.skillId);
247
- }
248
- if (criticalFindings.length > 20) {
249
- console.log(` ... and ${criticalFindings.length - 20} more critical findings\n`);
250
- }
251
- }
252
- if (highFindings.length > 0) {
253
- logHeader('HIGH SEVERITY FINDINGS');
254
- for (const finding of highFindings.slice(0, 10)) {
255
- logFinding(finding, finding.skillId);
256
- }
257
- if (highFindings.length > 10) {
258
- console.log(` ... and ${highFindings.length - 10} more high severity findings\n`);
259
- }
260
- }
261
- // Print summary
262
- logSummary(results);
263
- // Calculate top findings by type
264
- const findingCounts = new Map();
265
- for (const finding of allFindings) {
266
- const existing = findingCounts.get(finding.type);
267
- if (existing) {
268
- existing.count++;
269
- // Keep the highest severity seen for this type
270
- if (finding.severity === 'critical' ||
271
- (finding.severity === 'high' && existing.severity !== 'critical') ||
272
- (finding.severity === 'medium' &&
273
- existing.severity !== 'critical' &&
274
- existing.severity !== 'high')) {
275
- existing.severity = finding.severity;
276
- }
277
- }
278
- else {
279
- findingCounts.set(finding.type, { count: 1, severity: finding.severity });
280
- }
281
- }
282
- const topFindings = Array.from(findingCounts.entries())
283
- .map(([type, data]) => ({ type, count: data.count, severity: data.severity }))
284
- .sort((a, b) => b.count - a.count)
285
- .slice(0, 10);
286
- // Calculate summary statistics
287
- const total = results.length;
288
- const passed = results.filter((r) => !r.isQuarantined).length;
289
- const quarantined = results.filter((r) => r.isQuarantined).length;
290
- const bySeverity = {
291
- CRITICAL: results.filter((r) => r.severityCategory === 'CRITICAL').length,
292
- HIGH: results.filter((r) => r.severityCategory === 'HIGH').length,
293
- MEDIUM: results.filter((r) => r.severityCategory === 'MEDIUM').length,
294
- LOW: results.filter((r) => r.severityCategory === 'LOW').length,
295
- };
296
- const avgRiskScore = results.reduce((sum, r) => sum + r.scanReport.riskScore, 0) / Math.max(total, 1);
297
- const maxRiskScore = Math.max(...results.map((r) => r.scanReport.riskScore), 0);
298
- // Generate output files
299
- console.log('Generating output files...\n');
300
- // 1. Full security report
301
- const securityReport = {
302
- scanDate: new Date().toISOString(),
303
- inputFile: inputPath,
304
- summary: {
305
- totalScanned: total,
306
- passed,
307
- quarantined,
308
- bySeverity,
309
- averageRiskScore: Math.round(avgRiskScore * 100) / 100,
310
- maxRiskScore,
311
- },
312
- results,
313
- topFindings,
314
- };
315
- const reportPath = path.join(CONFIG.OUTPUT_DIR, 'security-report.json');
316
- await fs.writeFile(reportPath, JSON.stringify(securityReport, null, 2));
317
- console.log(` [OK] security-report.json (${total} skills)`);
318
- // 2. Quarantine list (HIGH/CRITICAL)
319
- const quarantinedSkills = results.filter((r) => r.isQuarantined);
320
- const quarantineOutput = {
321
- generatedAt: new Date().toISOString(),
322
- reason: 'Skills with HIGH or CRITICAL security findings, or risk score >= 40',
323
- count: quarantinedSkills.length,
324
- skills: quarantinedSkills.map((r) => ({
325
- skillId: r.skillId,
326
- skillName: r.skillName,
327
- author: r.author,
328
- riskScore: r.scanReport.riskScore,
329
- severityCategory: r.severityCategory,
330
- topFindings: r.scanReport.findings
331
- .filter((f) => f.severity === 'critical' || f.severity === 'high')
332
- .slice(0, 5)
333
- .map((f) => `${f.type}: ${f.message}`),
334
- })),
335
- };
336
- const quarantinePath = path.join(CONFIG.OUTPUT_DIR, 'quarantine-skills.json');
337
- await fs.writeFile(quarantinePath, JSON.stringify(quarantineOutput, null, 2));
338
- console.log(` [OK] quarantine-skills.json (${quarantinedSkills.length} skills blocked)`);
339
- // 3. Safe skills list (approved for import)
340
- const safeSkills = results.filter((r) => !r.isQuarantined);
341
- const safeOutput = {
342
- generatedAt: new Date().toISOString(),
343
- count: safeSkills.length,
344
- skills: safeSkills.map((r) => ({
345
- skillId: r.skillId,
346
- skillName: r.skillName,
347
- author: r.author,
348
- source: r.source,
349
- riskScore: r.scanReport.riskScore,
350
- })),
351
- };
352
- const safePath = path.join(CONFIG.OUTPUT_DIR, 'safe-skills.json');
353
- await fs.writeFile(safePath, JSON.stringify(safeOutput, null, 2));
354
- console.log(` [OK] safe-skills.json (${safeSkills.length} skills approved)`);
355
- // Final timing
356
- const endTime = performance.now();
357
- const duration = formatDuration(endTime - startTime);
358
- console.log('\n' + '='.repeat(60));
359
- console.log(' SCAN COMPLETE');
360
- console.log('='.repeat(60));
361
- console.log(` Duration: ${duration}`);
362
- console.log(` Skills per second: ${((total / (endTime - startTime)) * 1000).toFixed(1)}`);
363
- console.log();
364
- console.log(' Output files:');
365
- console.log(` - ${reportPath}`);
366
- console.log(` - ${quarantinePath}`);
367
- console.log(` - ${safePath}`);
368
- console.log('='.repeat(60) + '\n');
369
- // Recommendations
370
- console.log('RECOMMENDATIONS:');
371
- if (quarantinedSkills.length > 0) {
372
- console.log(` - ${quarantinedSkills.length} skills have been quarantined`);
373
- console.log(' - Review quarantine-skills.json for manual triage');
374
- console.log(' - Critical/high findings require security review before import');
375
- }
376
- if (criticalFindings.length > 0) {
377
- console.log(` - ${criticalFindings.length} CRITICAL findings detected`);
378
- console.log(' - These skills should NOT be imported without thorough review');
379
- }
380
- if (safeSkills.length > 0) {
381
- console.log(` - ${safeSkills.length} skills passed security checks`);
382
- console.log(' - These are ready for import from safe-skills.json');
383
- }
384
- console.log();
385
- }
386
- // ============================================================================
387
- // Entry Point
388
- // ============================================================================
389
- async function main() {
390
- // Get input file from command line args or use default
391
- const inputPath = process.argv[2] || CONFIG.DEFAULT_INPUT;
392
- try {
393
- await scanImportedSkills(inputPath);
394
- }
395
- catch (error) {
396
- console.error('Fatal error:', error.message);
397
- console.error(error.stack);
398
- process.exit(1);
399
- }
400
- }
401
- main().catch((error) => {
402
- console.error('Unhandled error:', error);
403
- process.exit(1);
404
- });
13
+ export * from './skill-scanner/index.js';
14
+ // Re-run the CLI entry point
15
+ import './skill-scanner/index.js';
405
16
  //# sourceMappingURL=scan-imported-skills.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scan-imported-skills.js","sourceRoot":"","sources":["../../../src/scripts/scan-imported-skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scan-imported-skills.js","sourceRoot":"","sources":["../../../src/scripts/scan-imported-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,cAAc,0BAA0B,CAAA;AAExC,6BAA6B;AAC7B,OAAO,0BAA0B,CAAA"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * SMI-1189: Skill Categorizer
3
+ *
4
+ * Skill categorization and severity determination logic.
5
+ */
6
+ import type { SecurityFinding } from '../../security/index.js';
7
+ import type { SeverityCategory } from './types.js';
8
+ export type { SeverityCategory };
9
+ /**
10
+ * Determines the severity category based on the highest severity finding
11
+ *
12
+ * @param findings - Array of security findings
13
+ * @returns The highest severity category found
14
+ */
15
+ export declare function determineSeverityCategory(findings: SecurityFinding[]): SeverityCategory;
16
+ /**
17
+ * Initialize empty severity counts
18
+ *
19
+ * @returns Record with all severity categories set to 0
20
+ */
21
+ export declare function initializeSeverityCounts(): Record<SeverityCategory, number>;
22
+ /**
23
+ * Count skills by severity category
24
+ *
25
+ * @param results - Array of scan results with severity categories
26
+ * @returns Record mapping severity categories to counts
27
+ */
28
+ export declare function countBySeverity(results: Array<{
29
+ severityCategory: SeverityCategory;
30
+ }>): Record<SeverityCategory, number>;
31
+ /**
32
+ * Sort severity categories by priority (most severe first)
33
+ */
34
+ export declare const SEVERITY_PRIORITY: SeverityCategory[];
35
+ /**
36
+ * Compare two severity categories
37
+ *
38
+ * @param a - First severity category
39
+ * @param b - Second severity category
40
+ * @returns Negative if a is more severe, positive if b is more severe
41
+ */
42
+ export declare function compareSeverity(a: SeverityCategory, b: SeverityCategory): number;
43
+ //# sourceMappingURL=categorizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categorizer.d.ts","sourceRoot":"","sources":["../../../../src/scripts/skill-scanner/categorizer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAGlD,YAAY,EAAE,gBAAgB,EAAE,CAAA;AAEhC;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,gBAAgB,CAKvF;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAO3E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,KAAK,CAAC;IAAE,gBAAgB,EAAE,gBAAgB,CAAA;CAAE,CAAC,GACrD,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAQlC;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,EAA0C,CAAA;AAE1F;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAEhF"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * SMI-1189: Skill Categorizer
3
+ *
4
+ * Skill categorization and severity determination logic.
5
+ */
6
+ /**
7
+ * Determines the severity category based on the highest severity finding
8
+ *
9
+ * @param findings - Array of security findings
10
+ * @returns The highest severity category found
11
+ */
12
+ export function determineSeverityCategory(findings) {
13
+ if (findings.some((f) => f.severity === 'critical'))
14
+ return 'CRITICAL';
15
+ if (findings.some((f) => f.severity === 'high'))
16
+ return 'HIGH';
17
+ if (findings.some((f) => f.severity === 'medium'))
18
+ return 'MEDIUM';
19
+ return 'LOW';
20
+ }
21
+ /**
22
+ * Initialize empty severity counts
23
+ *
24
+ * @returns Record with all severity categories set to 0
25
+ */
26
+ export function initializeSeverityCounts() {
27
+ return {
28
+ CRITICAL: 0,
29
+ HIGH: 0,
30
+ MEDIUM: 0,
31
+ LOW: 0,
32
+ };
33
+ }
34
+ /**
35
+ * Count skills by severity category
36
+ *
37
+ * @param results - Array of scan results with severity categories
38
+ * @returns Record mapping severity categories to counts
39
+ */
40
+ export function countBySeverity(results) {
41
+ const counts = initializeSeverityCounts();
42
+ for (const result of results) {
43
+ counts[result.severityCategory]++;
44
+ }
45
+ return counts;
46
+ }
47
+ /**
48
+ * Sort severity categories by priority (most severe first)
49
+ */
50
+ export const SEVERITY_PRIORITY = ['CRITICAL', 'HIGH', 'MEDIUM', 'LOW'];
51
+ /**
52
+ * Compare two severity categories
53
+ *
54
+ * @param a - First severity category
55
+ * @param b - Second severity category
56
+ * @returns Negative if a is more severe, positive if b is more severe
57
+ */
58
+ export function compareSeverity(a, b) {
59
+ return SEVERITY_PRIORITY.indexOf(a) - SEVERITY_PRIORITY.indexOf(b);
60
+ }
61
+ //# sourceMappingURL=categorizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categorizer.js","sourceRoot":"","sources":["../../../../src/scripts/skill-scanner/categorizer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAA2B;IACnE,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC;QAAE,OAAO,UAAU,CAAA;IACtE,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC;QAAE,OAAO,MAAM,CAAA;IAC9D,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAA;IAClE,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,QAAQ,EAAE,CAAC;QACX,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;QACT,GAAG,EAAE,CAAC;KACP,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAsD;IAEtD,MAAM,MAAM,GAAG,wBAAwB,EAAE,CAAA;IAEzC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAA;IACnC,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;AAE1F;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,CAAmB,EAAE,CAAmB;IACtE,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AACpE,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * SMI-1189: File Scanner
3
+ *
4
+ * File system scanning and content extraction.
5
+ */
6
+ import type { ImportedSkill } from './types.js';
7
+ /**
8
+ * Extracts scannable content from an imported skill
9
+ * Combines all text fields that should be scanned
10
+ *
11
+ * @param skill - The imported skill to extract content from
12
+ * @returns Combined text content for scanning
13
+ */
14
+ export declare function extractScannableContent(skill: ImportedSkill): string;
15
+ /**
16
+ * Read and parse imported skills from a JSON file
17
+ *
18
+ * @param inputPath - Path to the imported skills JSON file
19
+ * @returns Array of imported skills
20
+ * @throws Error if file cannot be read or parsed
21
+ */
22
+ export declare function readImportedSkills(inputPath: string): Promise<ImportedSkill[]>;
23
+ /**
24
+ * Ensure a directory exists, creating it if necessary
25
+ *
26
+ * @param dirPath - Path to the directory
27
+ */
28
+ export declare function ensureDirectoryExists(dirPath: string): void;
29
+ /**
30
+ * Check if a file exists
31
+ *
32
+ * @param filePath - Path to the file
33
+ * @returns true if file exists
34
+ */
35
+ export declare function fileExists(filePath: string): boolean;
36
+ /**
37
+ * Write JSON data to a file
38
+ *
39
+ * @param filePath - Path to the output file
40
+ * @param data - Data to write
41
+ */
42
+ export declare function writeJsonFile(filePath: string, data: unknown): Promise<void>;
43
+ //# sourceMappingURL=file-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-scanner.d.ts","sourceRoot":"","sources":["../../../../src/scripts/skill-scanner/file-scanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAoBpE;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAmBpF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI3D;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAElF"}