@skillsmith/core 0.2.0 → 0.4.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 (469) hide show
  1. package/README.md +235 -4
  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 +71 -6
  116. package/dist/src/analysis/types.d.ts.map +1 -1
  117. package/dist/src/analysis/types.js +36 -3
  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/AnalyticsRepository.d.ts +4 -0
  124. package/dist/src/analytics/AnalyticsRepository.d.ts.map +1 -1
  125. package/dist/src/analytics/AnalyticsRepository.js +26 -44
  126. package/dist/src/analytics/AnalyticsRepository.js.map +1 -1
  127. package/dist/src/analytics/schema.d.ts +1 -1
  128. package/dist/src/analytics/schema.d.ts.map +1 -1
  129. package/dist/src/analytics/schema.js +140 -0
  130. package/dist/src/analytics/schema.js.map +1 -1
  131. package/dist/src/api/cache.d.ts +24 -1
  132. package/dist/src/api/cache.d.ts.map +1 -1
  133. package/dist/src/api/cache.js +50 -2
  134. package/dist/src/api/cache.js.map +1 -1
  135. package/dist/src/api/client.d.ts +140 -6
  136. package/dist/src/api/client.d.ts.map +1 -1
  137. package/dist/src/api/client.js +222 -21
  138. package/dist/src/api/client.js.map +1 -1
  139. package/dist/src/api/index.d.ts +2 -0
  140. package/dist/src/api/index.d.ts.map +1 -1
  141. package/dist/src/api/index.js +7 -0
  142. package/dist/src/api/index.js.map +1 -1
  143. package/dist/src/api/types.d.ts +251 -0
  144. package/dist/src/api/types.d.ts.map +1 -0
  145. package/dist/src/api/types.js +9 -0
  146. package/dist/src/api/types.js.map +1 -0
  147. package/dist/src/benchmarks/memory/MemoryProfiler.d.ts.map +1 -1
  148. package/dist/src/benchmarks/memory/MemoryProfiler.js.map +1 -1
  149. package/dist/src/billing/BillingService.d.ts +139 -0
  150. package/dist/src/billing/BillingService.d.ts.map +1 -0
  151. package/dist/src/billing/BillingService.js +393 -0
  152. package/dist/src/billing/BillingService.js.map +1 -0
  153. package/dist/src/billing/GDPRComplianceService.d.ts +176 -0
  154. package/dist/src/billing/GDPRComplianceService.d.ts.map +1 -0
  155. package/dist/src/billing/GDPRComplianceService.js +361 -0
  156. package/dist/src/billing/GDPRComplianceService.js.map +1 -0
  157. package/dist/src/billing/StripeClient.d.ts +177 -0
  158. package/dist/src/billing/StripeClient.d.ts.map +1 -0
  159. package/dist/src/billing/StripeClient.js +462 -0
  160. package/dist/src/billing/StripeClient.js.map +1 -0
  161. package/dist/src/billing/StripeReconciliationJob.d.ts +95 -0
  162. package/dist/src/billing/StripeReconciliationJob.d.ts.map +1 -0
  163. package/dist/src/billing/StripeReconciliationJob.js +405 -0
  164. package/dist/src/billing/StripeReconciliationJob.js.map +1 -0
  165. package/dist/src/billing/StripeWebhookHandler.d.ts +92 -0
  166. package/dist/src/billing/StripeWebhookHandler.d.ts.map +1 -0
  167. package/dist/src/billing/StripeWebhookHandler.js +409 -0
  168. package/dist/src/billing/StripeWebhookHandler.js.map +1 -0
  169. package/dist/src/billing/index.d.ts +18 -0
  170. package/dist/src/billing/index.d.ts.map +1 -0
  171. package/dist/src/billing/index.js +19 -0
  172. package/dist/src/billing/index.js.map +1 -0
  173. package/dist/src/billing/types.d.ts +266 -0
  174. package/dist/src/billing/types.d.ts.map +1 -0
  175. package/dist/src/billing/types.js +23 -0
  176. package/dist/src/billing/types.js.map +1 -0
  177. package/dist/src/db/schema.d.ts +1 -1
  178. package/dist/src/db/schema.d.ts.map +1 -1
  179. package/dist/src/db/schema.js +41 -1
  180. package/dist/src/db/schema.js.map +1 -1
  181. package/dist/src/embeddings/hnsw-store.d.ts +568 -0
  182. package/dist/src/embeddings/hnsw-store.d.ts.map +1 -0
  183. package/dist/src/embeddings/hnsw-store.js +805 -0
  184. package/dist/src/embeddings/hnsw-store.js.map +1 -0
  185. package/dist/src/embeddings/index.d.ts +2 -0
  186. package/dist/src/embeddings/index.d.ts.map +1 -1
  187. package/dist/src/embeddings/index.js +2 -0
  188. package/dist/src/embeddings/index.js.map +1 -1
  189. package/dist/src/errors.d.ts +1 -0
  190. package/dist/src/errors.d.ts.map +1 -1
  191. package/dist/src/errors.js +1 -0
  192. package/dist/src/errors.js.map +1 -1
  193. package/dist/src/index.d.ts +5 -3
  194. package/dist/src/index.d.ts.map +1 -1
  195. package/dist/src/index.js +8 -4
  196. package/dist/src/index.js.map +1 -1
  197. package/dist/src/learning/PatternStore.d.ts +457 -0
  198. package/dist/src/learning/PatternStore.d.ts.map +1 -0
  199. package/dist/src/learning/PatternStore.js +893 -0
  200. package/dist/src/learning/PatternStore.js.map +1 -0
  201. package/dist/src/learning/ReasoningBankIntegration.d.ts +403 -0
  202. package/dist/src/learning/ReasoningBankIntegration.d.ts.map +1 -0
  203. package/dist/src/learning/ReasoningBankIntegration.js +627 -0
  204. package/dist/src/learning/ReasoningBankIntegration.js.map +1 -0
  205. package/dist/src/learning/index.d.ts +15 -0
  206. package/dist/src/learning/index.d.ts.map +1 -0
  207. package/dist/src/learning/index.js +15 -0
  208. package/dist/src/learning/index.js.map +1 -0
  209. package/dist/src/repositories/IndexerRepository.d.ts.map +1 -1
  210. package/dist/src/repositories/IndexerRepository.js +1 -0
  211. package/dist/src/repositories/IndexerRepository.js.map +1 -1
  212. package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
  213. package/dist/src/repositories/SkillRepository.js +1 -0
  214. package/dist/src/repositories/SkillRepository.js.map +1 -1
  215. package/dist/src/repositories/SyncConfigRepository.d.ts +91 -0
  216. package/dist/src/repositories/SyncConfigRepository.d.ts.map +1 -0
  217. package/dist/src/repositories/SyncConfigRepository.js +202 -0
  218. package/dist/src/repositories/SyncConfigRepository.js.map +1 -0
  219. package/dist/src/repositories/SyncHistoryRepository.d.ts +104 -0
  220. package/dist/src/repositories/SyncHistoryRepository.d.ts.map +1 -0
  221. package/dist/src/repositories/SyncHistoryRepository.js +235 -0
  222. package/dist/src/repositories/SyncHistoryRepository.js.map +1 -0
  223. package/dist/src/repositories/quarantine/QuarantineRepository.d.ts.map +1 -1
  224. package/dist/src/repositories/quarantine/QuarantineRepository.js.map +1 -1
  225. package/dist/src/repositories/quarantine/query-builder.d.ts.map +1 -1
  226. package/dist/src/repositories/quarantine/query-builder.js +1 -1
  227. package/dist/src/repositories/quarantine/query-builder.js.map +1 -1
  228. package/dist/src/routing/SONARouter.d.ts +154 -0
  229. package/dist/src/routing/SONARouter.d.ts.map +1 -0
  230. package/dist/src/routing/SONARouter.js +679 -0
  231. package/dist/src/routing/SONARouter.js.map +1 -0
  232. package/dist/src/routing/index.d.ts +9 -0
  233. package/dist/src/routing/index.d.ts.map +1 -0
  234. package/dist/src/routing/index.js +10 -0
  235. package/dist/src/routing/index.js.map +1 -0
  236. package/dist/src/routing/types.d.ts +331 -0
  237. package/dist/src/routing/types.d.ts.map +1 -0
  238. package/dist/src/routing/types.js +203 -0
  239. package/dist/src/routing/types.js.map +1 -0
  240. package/dist/src/scripts/__tests__/scan-imported-skills.test.js +8 -3
  241. package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
  242. package/dist/src/scripts/github-import/github-client.d.ts +30 -2
  243. package/dist/src/scripts/github-import/github-client.d.ts.map +1 -1
  244. package/dist/src/scripts/github-import/github-client.js +293 -4
  245. package/dist/src/scripts/github-import/github-client.js.map +1 -1
  246. package/dist/src/scripts/github-import/index.js +3 -10
  247. package/dist/src/scripts/github-import/index.js.map +1 -1
  248. package/dist/src/scripts/github-import/types.d.ts +6 -0
  249. package/dist/src/scripts/github-import/types.d.ts.map +1 -1
  250. package/dist/src/scripts/github-import/types.js +3 -0
  251. package/dist/src/scripts/github-import/types.js.map +1 -1
  252. package/dist/src/scripts/import-github-skills.js +10 -5
  253. package/dist/src/scripts/import-github-skills.js.map +1 -1
  254. package/dist/src/scripts/merge-skills.d.ts +56 -0
  255. package/dist/src/scripts/merge-skills.d.ts.map +1 -0
  256. package/dist/src/scripts/merge-skills.js +411 -0
  257. package/dist/src/scripts/merge-skills.js.map +1 -0
  258. package/dist/src/scripts/skill-scanner/index.d.ts +9 -2
  259. package/dist/src/scripts/skill-scanner/index.d.ts.map +1 -1
  260. package/dist/src/scripts/skill-scanner/index.js +98 -7
  261. package/dist/src/scripts/skill-scanner/index.js.map +1 -1
  262. package/dist/src/scripts/skill-scanner/logger.d.ts +51 -0
  263. package/dist/src/scripts/skill-scanner/logger.d.ts.map +1 -1
  264. package/dist/src/scripts/skill-scanner/logger.js +255 -1
  265. package/dist/src/scripts/skill-scanner/logger.js.map +1 -1
  266. package/dist/src/scripts/skill-scanner/reporter.d.ts +1 -1
  267. package/dist/src/scripts/skill-scanner/reporter.d.ts.map +1 -1
  268. package/dist/src/scripts/skill-scanner/reporter.js +67 -15
  269. package/dist/src/scripts/skill-scanner/reporter.js.map +1 -1
  270. package/dist/src/scripts/skill-scanner/scanner.d.ts +5 -2
  271. package/dist/src/scripts/skill-scanner/scanner.d.ts.map +1 -1
  272. package/dist/src/scripts/skill-scanner/scanner.js +156 -39
  273. package/dist/src/scripts/skill-scanner/scanner.js.map +1 -1
  274. package/dist/src/scripts/skill-scanner/trust-scorer.d.ts.map +1 -1
  275. package/dist/src/scripts/skill-scanner/trust-scorer.js.map +1 -1
  276. package/dist/src/scripts/skill-scanner/types.d.ts +44 -0
  277. package/dist/src/scripts/skill-scanner/types.d.ts.map +1 -1
  278. package/dist/src/scripts/validation/index.js +1 -2
  279. package/dist/src/scripts/validation/index.js.map +1 -1
  280. package/dist/src/scripts/validation/pipeline.d.ts.map +1 -1
  281. package/dist/src/scripts/validation/pipeline.js.map +1 -1
  282. package/dist/src/scripts/validation/types.d.ts +2 -2
  283. package/dist/src/security/SkillSandbox.d.ts +156 -0
  284. package/dist/src/security/SkillSandbox.d.ts.map +1 -0
  285. package/dist/src/security/SkillSandbox.js +303 -0
  286. package/dist/src/security/SkillSandbox.js.map +1 -0
  287. package/dist/src/security/index.d.ts +3 -1
  288. package/dist/src/security/index.d.ts.map +1 -1
  289. package/dist/src/security/index.js +5 -1
  290. package/dist/src/security/index.js.map +1 -1
  291. package/dist/src/security/rate-limiter/presets.d.ts +12 -0
  292. package/dist/src/security/rate-limiter/presets.d.ts.map +1 -1
  293. package/dist/src/security/rate-limiter/presets.js +12 -0
  294. package/dist/src/security/rate-limiter/presets.js.map +1 -1
  295. package/dist/src/security/sanitization.d.ts +85 -0
  296. package/dist/src/security/sanitization.d.ts.map +1 -1
  297. package/dist/src/security/sanitization.js +133 -0
  298. package/dist/src/security/sanitization.js.map +1 -1
  299. package/dist/src/security/scanner/SecurityScanner.d.ts +23 -0
  300. package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -1
  301. package/dist/src/security/scanner/SecurityScanner.js +232 -28
  302. package/dist/src/security/scanner/SecurityScanner.js.map +1 -1
  303. package/dist/src/security/scanner/patterns.d.ts +13 -0
  304. package/dist/src/security/scanner/patterns.d.ts.map +1 -1
  305. package/dist/src/security/scanner/patterns.js +51 -0
  306. package/dist/src/security/scanner/patterns.js.map +1 -1
  307. package/dist/src/security/scanner/types.d.ts +13 -1
  308. package/dist/src/security/scanner/types.d.ts.map +1 -1
  309. package/dist/src/security/scanner/weights.d.ts.map +1 -1
  310. package/dist/src/security/scanner/weights.js +1 -0
  311. package/dist/src/security/scanner/weights.js.map +1 -1
  312. package/dist/src/services/SearchService.d.ts.map +1 -1
  313. package/dist/src/services/SearchService.js +1 -0
  314. package/dist/src/services/SearchService.js.map +1 -1
  315. package/dist/src/session/SessionHealthMonitor.d.ts +1 -1
  316. package/dist/src/session/SessionHealthMonitor.d.ts.map +1 -1
  317. package/dist/src/session/SessionHealthMonitor.js +1 -1
  318. package/dist/src/session/SessionHealthMonitor.js.map +1 -1
  319. package/dist/src/session/SessionManager.d.ts +7 -0
  320. package/dist/src/session/SessionManager.d.ts.map +1 -1
  321. package/dist/src/session/SessionManager.js +117 -10
  322. package/dist/src/session/SessionManager.js.map +1 -1
  323. package/dist/src/sync/BackgroundSyncService.d.ts +90 -0
  324. package/dist/src/sync/BackgroundSyncService.d.ts.map +1 -0
  325. package/dist/src/sync/BackgroundSyncService.js +214 -0
  326. package/dist/src/sync/BackgroundSyncService.js.map +1 -0
  327. package/dist/src/sync/SyncEngine.d.ts +76 -0
  328. package/dist/src/sync/SyncEngine.d.ts.map +1 -0
  329. package/dist/src/sync/SyncEngine.js +292 -0
  330. package/dist/src/sync/SyncEngine.js.map +1 -0
  331. package/dist/src/sync/index.d.ts +11 -0
  332. package/dist/src/sync/index.d.ts.map +1 -0
  333. package/dist/src/sync/index.js +14 -0
  334. package/dist/src/sync/index.js.map +1 -0
  335. package/dist/src/telemetry/index.d.ts +1 -1
  336. package/dist/src/telemetry/index.d.ts.map +1 -1
  337. package/dist/src/telemetry/index.js +2 -2
  338. package/dist/src/telemetry/index.js.map +1 -1
  339. package/dist/src/telemetry/posthog.d.ts +27 -5
  340. package/dist/src/telemetry/posthog.d.ts.map +1 -1
  341. package/dist/src/telemetry/posthog.js +20 -5
  342. package/dist/src/telemetry/posthog.js.map +1 -1
  343. package/dist/src/testing/MultiLLMProvider.d.ts +374 -0
  344. package/dist/src/testing/MultiLLMProvider.d.ts.map +1 -0
  345. package/dist/src/testing/MultiLLMProvider.js +720 -0
  346. package/dist/src/testing/MultiLLMProvider.js.map +1 -0
  347. package/dist/src/testing/index.d.ts +8 -0
  348. package/dist/src/testing/index.d.ts.map +1 -0
  349. package/dist/src/testing/index.js +9 -0
  350. package/dist/src/testing/index.js.map +1 -0
  351. package/dist/src/types/skill.d.ts +3 -0
  352. package/dist/src/types/skill.d.ts.map +1 -1
  353. package/dist/src/types.d.ts +5 -1
  354. package/dist/src/types.d.ts.map +1 -1
  355. package/dist/src/types.js +2 -2
  356. package/dist/src/types.js.map +1 -1
  357. package/dist/tests/SecurityScanner.test.js +337 -1
  358. package/dist/tests/SecurityScanner.test.js.map +1 -1
  359. package/dist/tests/adapters-factory.test.d.ts +13 -0
  360. package/dist/tests/adapters-factory.test.d.ts.map +1 -0
  361. package/dist/tests/adapters-factory.test.js +308 -0
  362. package/dist/tests/adapters-factory.test.js.map +1 -0
  363. package/dist/tests/adapters-java.test.d.ts +13 -0
  364. package/dist/tests/adapters-java.test.d.ts.map +1 -0
  365. package/dist/tests/adapters-java.test.js +925 -0
  366. package/dist/tests/adapters-java.test.js.map +1 -0
  367. package/dist/tests/api/client.validation.test.d.ts +7 -0
  368. package/dist/tests/api/client.validation.test.d.ts.map +1 -0
  369. package/dist/tests/api/client.validation.test.js +183 -0
  370. package/dist/tests/api/client.validation.test.js.map +1 -0
  371. package/dist/tests/billing/BillingService.test.d.ts +7 -0
  372. package/dist/tests/billing/BillingService.test.d.ts.map +1 -0
  373. package/dist/tests/billing/BillingService.test.js +168 -0
  374. package/dist/tests/billing/BillingService.test.js.map +1 -0
  375. package/dist/tests/billing/GDPRCompliance.test.d.ts +7 -0
  376. package/dist/tests/billing/GDPRCompliance.test.d.ts.map +1 -0
  377. package/dist/tests/billing/GDPRCompliance.test.js +195 -0
  378. package/dist/tests/billing/GDPRCompliance.test.js.map +1 -0
  379. package/dist/tests/billing/StripeReconciliation.test.d.ts +7 -0
  380. package/dist/tests/billing/StripeReconciliation.test.d.ts.map +1 -0
  381. package/dist/tests/billing/StripeReconciliation.test.js +266 -0
  382. package/dist/tests/billing/StripeReconciliation.test.js.map +1 -0
  383. package/dist/tests/billing/stripe-validators.test.d.ts +7 -0
  384. package/dist/tests/billing/stripe-validators.test.d.ts.map +1 -0
  385. package/dist/tests/billing/stripe-validators.test.js +107 -0
  386. package/dist/tests/billing/stripe-validators.test.js.map +1 -0
  387. package/dist/tests/embeddings/hnsw-store.test.d.ts +7 -0
  388. package/dist/tests/embeddings/hnsw-store.test.d.ts.map +1 -0
  389. package/dist/tests/embeddings/hnsw-store.test.js +295 -0
  390. package/dist/tests/embeddings/hnsw-store.test.js.map +1 -0
  391. package/dist/tests/integration/neural/e2e-learning.test.d.ts +17 -0
  392. package/dist/tests/integration/neural/e2e-learning.test.d.ts.map +1 -0
  393. package/dist/tests/integration/neural/e2e-learning.test.js +238 -0
  394. package/dist/tests/integration/neural/e2e-learning.test.js.map +1 -0
  395. package/dist/tests/integration/neural/helpers.d.ts +132 -0
  396. package/dist/tests/integration/neural/helpers.d.ts.map +1 -0
  397. package/dist/tests/integration/neural/helpers.js +287 -0
  398. package/dist/tests/integration/neural/helpers.js.map +1 -0
  399. package/dist/tests/integration/neural/personalization.test.d.ts +21 -0
  400. package/dist/tests/integration/neural/personalization.test.d.ts.map +1 -0
  401. package/dist/tests/integration/neural/personalization.test.js +304 -0
  402. package/dist/tests/integration/neural/personalization.test.js.map +1 -0
  403. package/dist/tests/integration/neural/preference-learner.test.d.ts +23 -0
  404. package/dist/tests/integration/neural/preference-learner.test.d.ts.map +1 -0
  405. package/dist/tests/integration/neural/preference-learner.test.js +289 -0
  406. package/dist/tests/integration/neural/preference-learner.test.js.map +1 -0
  407. package/dist/tests/integration/neural/privacy.test.d.ts +19 -0
  408. package/dist/tests/integration/neural/privacy.test.d.ts.map +1 -0
  409. package/dist/tests/integration/neural/privacy.test.js +249 -0
  410. package/dist/tests/integration/neural/privacy.test.js.map +1 -0
  411. package/dist/tests/integration/neural/setup.d.ts +175 -0
  412. package/dist/tests/integration/neural/setup.d.ts.map +1 -0
  413. package/dist/tests/integration/neural/setup.js +487 -0
  414. package/dist/tests/integration/neural/setup.js.map +1 -0
  415. package/dist/tests/integration/neural/signal-collection.test.d.ts +21 -0
  416. package/dist/tests/integration/neural/signal-collection.test.d.ts.map +1 -0
  417. package/dist/tests/integration/neural/signal-collection.test.js +232 -0
  418. package/dist/tests/integration/neural/signal-collection.test.js.map +1 -0
  419. package/dist/tests/language-detector.test.d.ts +13 -0
  420. package/dist/tests/language-detector.test.d.ts.map +1 -0
  421. package/dist/tests/language-detector.test.js +674 -0
  422. package/dist/tests/language-detector.test.js.map +1 -0
  423. package/dist/tests/learning/PatternStore.test.d.ts +8 -0
  424. package/dist/tests/learning/PatternStore.test.d.ts.map +1 -0
  425. package/dist/tests/learning/PatternStore.test.js +589 -0
  426. package/dist/tests/learning/PatternStore.test.js.map +1 -0
  427. package/dist/tests/learning/ReasoningBankIntegration.test.d.ts +8 -0
  428. package/dist/tests/learning/ReasoningBankIntegration.test.d.ts.map +1 -0
  429. package/dist/tests/learning/ReasoningBankIntegration.test.js +269 -0
  430. package/dist/tests/learning/ReasoningBankIntegration.test.js.map +1 -0
  431. package/dist/tests/routing/SONARouter.test.d.ts +8 -0
  432. package/dist/tests/routing/SONARouter.test.d.ts.map +1 -0
  433. package/dist/tests/routing/SONARouter.test.js +400 -0
  434. package/dist/tests/routing/SONARouter.test.js.map +1 -0
  435. package/dist/tests/security/ContinuousSecurity.test.js +10 -12
  436. package/dist/tests/security/ContinuousSecurity.test.js.map +1 -1
  437. package/dist/tests/security/SkillSandbox.test.d.ts +8 -0
  438. package/dist/tests/security/SkillSandbox.test.d.ts.map +1 -0
  439. package/dist/tests/security/SkillSandbox.test.js +321 -0
  440. package/dist/tests/security/SkillSandbox.test.js.map +1 -0
  441. package/dist/tests/sync/SyncConfigRepository.test.d.ts +7 -0
  442. package/dist/tests/sync/SyncConfigRepository.test.d.ts.map +1 -0
  443. package/dist/tests/sync/SyncConfigRepository.test.js +154 -0
  444. package/dist/tests/sync/SyncConfigRepository.test.js.map +1 -0
  445. package/dist/tests/sync/SyncEngine.test.d.ts +7 -0
  446. package/dist/tests/sync/SyncEngine.test.d.ts.map +1 -0
  447. package/dist/tests/sync/SyncEngine.test.js +300 -0
  448. package/dist/tests/sync/SyncEngine.test.js.map +1 -0
  449. package/dist/tests/sync/SyncHistoryRepository.test.d.ts +7 -0
  450. package/dist/tests/sync/SyncHistoryRepository.test.d.ts.map +1 -0
  451. package/dist/tests/sync/SyncHistoryRepository.test.js +220 -0
  452. package/dist/tests/sync/SyncHistoryRepository.test.js.map +1 -0
  453. package/dist/tests/telemetry/posthog.test.d.ts +13 -0
  454. package/dist/tests/telemetry/posthog.test.d.ts.map +1 -0
  455. package/dist/tests/telemetry/posthog.test.js +600 -0
  456. package/dist/tests/telemetry/posthog.test.js.map +1 -0
  457. package/dist/tests/testing/MultiLLMProvider.test.d.ts +14 -0
  458. package/dist/tests/testing/MultiLLMProvider.test.d.ts.map +1 -0
  459. package/dist/tests/testing/MultiLLMProvider.test.js +438 -0
  460. package/dist/tests/testing/MultiLLMProvider.test.js.map +1 -0
  461. package/package.json +20 -6
  462. package/dist/src/security/RateLimiter.d.ts +0 -337
  463. package/dist/src/security/RateLimiter.d.ts.map +0 -1
  464. package/dist/src/security/RateLimiter.js +0 -782
  465. package/dist/src/security/RateLimiter.js.map +0 -1
  466. package/dist/src/security/scanner.d.ts +0 -151
  467. package/dist/src/security/scanner.d.ts.map +0 -1
  468. package/dist/src/security/scanner.js +0 -599
  469. package/dist/src/security/scanner.js.map +0 -1
@@ -1,11 +1,18 @@
1
1
  /**
2
2
  * SMI-864: Security Scanner for Imported Skills
3
3
  * SMI-1189: Refactored into modular structure
4
+ * SMI-XXX: Improved output format with progress bars, tables, and JSON support
4
5
  *
5
6
  * Scans all skills from imported-skills.json for security vulnerabilities
6
7
  * and categorizes them by severity level.
7
8
  *
8
- * Usage: npx tsx packages/core/src/scripts/skill-scanner/index.ts [path-to-imported-skills.json]
9
+ * Usage: npx tsx packages/core/src/scripts/skill-scanner/index.ts [options] [path-to-imported-skills.json]
10
+ *
11
+ * Options:
12
+ * --json Output results in JSON format (machine-readable, CI-friendly)
13
+ * --verbose Show detailed output including all findings
14
+ * --quiet Minimal output (only errors and final summary)
15
+ * --help Show this help message
9
16
  *
10
17
  * Output Files:
11
18
  * - data/security-report.json: Full security report with all findings
@@ -20,19 +27,103 @@ export * from './trust-scorer.js';
20
27
  export * from './file-scanner.js';
21
28
  export * from './logger.js';
22
29
  export * from './reporter.js';
23
- export { scanImportedSkills, DEFAULT_CONFIG } from './scanner.js';
30
+ export { scanImportedSkills, DEFAULT_CONFIG, DEFAULT_CLI_OPTIONS } from './scanner.js';
31
+ /**
32
+ * Parse command line arguments
33
+ *
34
+ * @param args - Command line arguments (process.argv.slice(2))
35
+ * @returns Parsed CLI options and input path
36
+ */
37
+ function parseArgs(args) {
38
+ const options = {};
39
+ let inputPath = DEFAULT_CONFIG.defaultInput;
40
+ for (const arg of args) {
41
+ if (arg === '--json') {
42
+ options.json = true;
43
+ }
44
+ else if (arg === '--verbose' || arg === '-v') {
45
+ options.verbose = true;
46
+ }
47
+ else if (arg === '--quiet' || arg === '-q') {
48
+ options.quiet = true;
49
+ }
50
+ else if (arg === '--help' || arg === '-h') {
51
+ printHelp();
52
+ process.exit(0);
53
+ }
54
+ else if (!arg.startsWith('-')) {
55
+ inputPath = arg;
56
+ }
57
+ else {
58
+ console.error(`Unknown option: ${arg}`);
59
+ console.error('Use --help for usage information');
60
+ process.exit(1);
61
+ }
62
+ }
63
+ // Validate conflicting options
64
+ if (options.verbose && options.quiet) {
65
+ console.error('Error: --verbose and --quiet cannot be used together');
66
+ process.exit(1);
67
+ }
68
+ return { options, inputPath };
69
+ }
70
+ /**
71
+ * Print help message
72
+ */
73
+ function printHelp() {
74
+ console.log(`
75
+ Skillsmith Security Scanner
76
+
77
+ Usage: npx tsx packages/core/src/scripts/scan-imported-skills.ts [options] [input-file]
78
+
79
+ Options:
80
+ --json Output results in JSON format (machine-readable, CI-friendly)
81
+ --verbose Show detailed output including all findings
82
+ --quiet Minimal output (only errors and final summary)
83
+ --help, -h Show this help message
84
+
85
+ Arguments:
86
+ input-file Path to imported-skills.json (default: ./data/imported-skills.json)
87
+
88
+ Examples:
89
+ # Basic scan with human-readable output
90
+ npx tsx packages/core/src/scripts/scan-imported-skills.ts
91
+
92
+ # JSON output for CI pipelines
93
+ npx tsx packages/core/src/scripts/scan-imported-skills.ts --json
94
+
95
+ # Scan specific file
96
+ npx tsx packages/core/src/scripts/scan-imported-skills.ts ./custom-skills.json
97
+
98
+ # JSON output to file
99
+ npx tsx packages/core/src/scripts/scan-imported-skills.ts --json > results.json
100
+
101
+ Output Files:
102
+ - data/security-report.json Full security report with all findings
103
+ - data/quarantine-skills.json Skills with HIGH/CRITICAL findings (blocked)
104
+ - data/safe-skills.json Skills approved for import (passed security scan)
105
+ `);
106
+ }
24
107
  /**
25
108
  * CLI entry point
26
109
  */
27
110
  async function main() {
28
- // Get input file from command line args or use default
29
- const inputPath = process.argv[2] || DEFAULT_CONFIG.defaultInput;
111
+ const args = process.argv.slice(2);
112
+ const { options, inputPath } = parseArgs(args);
30
113
  try {
31
- await scanImportedSkills(inputPath);
114
+ await scanImportedSkills(inputPath, DEFAULT_CONFIG, options);
32
115
  }
33
116
  catch (error) {
34
- console.error('Fatal error:', error.message);
35
- console.error(error.stack);
117
+ if (options.json) {
118
+ console.log(JSON.stringify({
119
+ success: false,
120
+ error: error.message,
121
+ }));
122
+ }
123
+ else {
124
+ console.error('Fatal error:', error.message);
125
+ console.error(error.stack);
126
+ }
36
127
  process.exit(1);
37
128
  }
38
129
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/scripts/skill-scanner/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAEjE,2CAA2C;AAC3C,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAEjE;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,uDAAuD;IACvD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,YAAY,CAAA;IAEhE,IAAI,CAAC;QACH,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAA;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,cAAc,EAAG,KAAe,CAAC,OAAO,CAAC,CAAA;QACvD,OAAO,CAAC,KAAK,CAAE,KAAe,CAAC,KAAK,CAAC,CAAA;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAA;IACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/scripts/skill-scanner/index.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  /**
2
2
  * SMI-1189: Logger
3
+ * SMI-XXX: Improved output format with progress bars and tables
3
4
  *
4
5
  * Logging utilities for the security scanner.
5
6
  */
6
7
  import type { SecurityFinding } from '../../security/index.js';
8
+ import type { SkillScanResult } from './types.js';
7
9
  /**
8
10
  * Formats a duration in milliseconds to human-readable string
9
11
  *
@@ -56,4 +58,53 @@ export declare function logCompletion(processed: number, total: number): void;
56
58
  * @param description - Optional description of the file
57
59
  */
58
60
  export declare function logFileOutput(filename: string, count: number, description?: string): void;
61
+ /**
62
+ * Log the initial scan summary banner
63
+ *
64
+ * @param skillCount - Total number of skills to scan
65
+ * @param inputPath - Path to input file
66
+ * @param outputDir - Output directory
67
+ */
68
+ export declare function logScanStart(skillCount: number, inputPath: string, outputDir: string): void;
69
+ /**
70
+ * Create a progress bar string
71
+ *
72
+ * @param current - Current progress value
73
+ * @param total - Total value
74
+ * @param width - Width of the progress bar in characters
75
+ * @returns Progress bar string
76
+ */
77
+ export declare function createProgressBar(current: number, total: number, width?: number): string;
78
+ /**
79
+ * Log progress with a visual progress bar
80
+ *
81
+ * @param processed - Number of items processed
82
+ * @param total - Total number of items
83
+ * @param inPlace - Whether to update in place (overwrite previous line)
84
+ */
85
+ export declare function logProgressBar(processed: number, total: number, inPlace?: boolean): void;
86
+ /**
87
+ * Clear the progress line and move to new line
88
+ */
89
+ export declare function clearProgressLine(): void;
90
+ /**
91
+ * Log a table of quarantined skills
92
+ *
93
+ * @param results - Array of quarantined scan results
94
+ * @param maxRows - Maximum number of rows to display
95
+ */
96
+ export declare function logQuarantineTable(results: SkillScanResult[], maxRows?: number): void;
97
+ /**
98
+ * Log a summary of safe skills
99
+ *
100
+ * @param results - Array of safe scan results
101
+ * @param maxDisplay - Maximum number to display
102
+ */
103
+ export declare function logSafeSkillsSummary(results: SkillScanResult[], maxDisplay?: number): void;
104
+ /**
105
+ * Log categorized results by severity
106
+ *
107
+ * @param results - Array of scan results
108
+ */
109
+ export declare function logCategorizedResults(results: SkillScanResult[]): void;
59
110
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../src/scripts/skill-scanner/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,yBAAyB,CAAA;AAYhF;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAK7C;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAW1E;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,KAAK,CAAC,eAAe,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EACtD,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,IAAI,CAUN;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAElE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAEpE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAGzF"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../src/scripts/skill-scanner/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,yBAAyB,CAAA;AAChF,OAAO,KAAK,EAAoB,eAAe,EAAE,MAAM,YAAY,CAAA;AA+DnE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAK7C;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAW1E;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,KAAK,CAAC,eAAe,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EACtD,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,IAAI,CAUN;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAElE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAEpE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAIzF;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAe3F;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,MAAM,CAS5F;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,OAAc,GAAG,IAAI,CAS9F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAIxC;AAyBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,OAAO,GAAE,MAAW,GAAG,IAAI,CAyDzF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,UAAU,GAAE,MAAU,GAAG,IAAI,CAyB7F;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CA4DtE"}
@@ -1,5 +1,6 @@
1
1
  /**
2
2
  * SMI-1189: Logger
3
+ * SMI-XXX: Improved output format with progress bars and tables
3
4
  *
4
5
  * Logging utilities for the security scanner.
5
6
  */
@@ -12,6 +13,53 @@ const SEVERITY_ICONS = {
12
13
  medium: '[MEDIUM] ',
13
14
  low: '[LOW] ',
14
15
  };
16
+ /**
17
+ * ANSI color codes for terminal output
18
+ */
19
+ const COLORS = {
20
+ reset: '\x1b[0m',
21
+ bold: '\x1b[1m',
22
+ dim: '\x1b[2m',
23
+ red: '\x1b[31m',
24
+ green: '\x1b[32m',
25
+ yellow: '\x1b[33m',
26
+ blue: '\x1b[34m',
27
+ magenta: '\x1b[35m',
28
+ cyan: '\x1b[36m',
29
+ white: '\x1b[37m',
30
+ bgRed: '\x1b[41m',
31
+ bgGreen: '\x1b[42m',
32
+ bgYellow: '\x1b[43m',
33
+ };
34
+ /**
35
+ * Check if colors should be used (TTY and not CI)
36
+ */
37
+ function useColors() {
38
+ return process.stdout.isTTY && !process.env.CI && !process.env.NO_COLOR;
39
+ }
40
+ /**
41
+ * Apply color to text if colors are enabled
42
+ */
43
+ function colorize(text, color) {
44
+ return useColors() ? `${COLORS[color]}${text}${COLORS.reset}` : text;
45
+ }
46
+ /**
47
+ * Get color for severity level
48
+ */
49
+ function getSeverityColor(severity) {
50
+ switch (severity.toUpperCase()) {
51
+ case 'CRITICAL':
52
+ return 'red';
53
+ case 'HIGH':
54
+ return 'magenta';
55
+ case 'MEDIUM':
56
+ return 'yellow';
57
+ case 'LOW':
58
+ return 'cyan';
59
+ default:
60
+ return 'white';
61
+ }
62
+ }
15
63
  /**
16
64
  * Formats a duration in milliseconds to human-readable string
17
65
  *
@@ -99,6 +147,212 @@ export function logCompletion(processed, total) {
99
147
  */
100
148
  export function logFileOutput(filename, count, description) {
101
149
  const desc = description ? ` ${description}` : '';
102
- console.log(` [OK] ${filename} (${count} skills${desc})`);
150
+ const checkmark = colorize('[OK]', 'green');
151
+ console.log(` ${checkmark} ${filename} (${count} skills${desc})`);
152
+ }
153
+ /**
154
+ * Log the initial scan summary banner
155
+ *
156
+ * @param skillCount - Total number of skills to scan
157
+ * @param inputPath - Path to input file
158
+ * @param outputDir - Output directory
159
+ */
160
+ export function logScanStart(skillCount, inputPath, outputDir) {
161
+ const border = '='.repeat(60);
162
+ console.log();
163
+ console.log(colorize(border, 'cyan'));
164
+ console.log(colorize(' SKILLSMITH SECURITY SCANNER', 'bold'));
165
+ console.log(colorize(border, 'cyan'));
166
+ console.log();
167
+ console.log(` ${colorize('Input:', 'dim')} ${inputPath}`);
168
+ console.log(` ${colorize('Output:', 'dim')} ${outputDir}`);
169
+ console.log(` ${colorize('Skills:', 'dim')} ${colorize(skillCount.toString(), 'bold')} skills to scan`);
170
+ console.log();
171
+ console.log(colorize(border, 'cyan'));
172
+ console.log();
173
+ }
174
+ /**
175
+ * Create a progress bar string
176
+ *
177
+ * @param current - Current progress value
178
+ * @param total - Total value
179
+ * @param width - Width of the progress bar in characters
180
+ * @returns Progress bar string
181
+ */
182
+ export function createProgressBar(current, total, width = 30) {
183
+ const percentage = Math.min(current / total, 1);
184
+ const filled = Math.round(width * percentage);
185
+ const empty = width - filled;
186
+ const filledChar = useColors() ? '█' : '#';
187
+ const emptyChar = useColors() ? '░' : '-';
188
+ const bar = filledChar.repeat(filled) + emptyChar.repeat(empty);
189
+ const pct = (percentage * 100).toFixed(1).padStart(5);
190
+ return `[${bar}] ${pct}%`;
191
+ }
192
+ /**
193
+ * Log progress with a visual progress bar
194
+ *
195
+ * @param processed - Number of items processed
196
+ * @param total - Total number of items
197
+ * @param inPlace - Whether to update in place (overwrite previous line)
198
+ */
199
+ export function logProgressBar(processed, total, inPlace = true) {
200
+ const bar = createProgressBar(processed, total);
201
+ const status = `${processed.toString().padStart(total.toString().length)}/${total}`;
202
+ if (inPlace && process.stdout.isTTY) {
203
+ process.stdout.write(`\r Scanning: ${bar} ${status}`);
204
+ }
205
+ else {
206
+ console.log(` Scanning: ${bar} ${status}`);
207
+ }
208
+ }
209
+ /**
210
+ * Clear the progress line and move to new line
211
+ */
212
+ export function clearProgressLine() {
213
+ if (process.stdout.isTTY) {
214
+ process.stdout.write('\r' + ' '.repeat(80) + '\r');
215
+ }
216
+ }
217
+ /**
218
+ * Truncate a string to a maximum length with ellipsis
219
+ *
220
+ * @param str - String to truncate
221
+ * @param maxLen - Maximum length
222
+ * @returns Truncated string
223
+ */
224
+ function truncate(str, maxLen) {
225
+ if (str.length <= maxLen)
226
+ return str;
227
+ return str.slice(0, maxLen - 3) + '...';
228
+ }
229
+ /**
230
+ * Pad a string to a fixed width
231
+ *
232
+ * @param str - String to pad
233
+ * @param width - Target width
234
+ * @returns Padded string
235
+ */
236
+ function padRight(str, width) {
237
+ return str.length >= width ? str.slice(0, width) : str + ' '.repeat(width - str.length);
238
+ }
239
+ /**
240
+ * Log a table of quarantined skills
241
+ *
242
+ * @param results - Array of quarantined scan results
243
+ * @param maxRows - Maximum number of rows to display
244
+ */
245
+ export function logQuarantineTable(results, maxRows = 20) {
246
+ const quarantined = results.filter((r) => r.isQuarantined);
247
+ if (quarantined.length === 0) {
248
+ console.log(colorize(' No quarantined skills found.', 'green'));
249
+ return;
250
+ }
251
+ // Sort by risk score descending
252
+ const sorted = [...quarantined].sort((a, b) => b.scanReport.riskScore - a.scanReport.riskScore);
253
+ // Column widths
254
+ const colWidths = { skillId: 35, risk: 6, severity: 10, finding: 40 };
255
+ const totalWidth = colWidths.skillId + colWidths.risk + colWidths.severity + colWidths.finding + 11;
256
+ // Header
257
+ const headerBorder = '-'.repeat(totalWidth);
258
+ console.log(colorize(headerBorder, 'dim'));
259
+ console.log(` ${colorize(padRight('Skill ID', colWidths.skillId), 'bold')} | ` +
260
+ `${colorize(padRight('Risk', colWidths.risk), 'bold')} | ` +
261
+ `${colorize(padRight('Severity', colWidths.severity), 'bold')} | ` +
262
+ `${colorize(padRight('Top Finding', colWidths.finding), 'bold')}`);
263
+ console.log(colorize(headerBorder, 'dim'));
264
+ // Rows
265
+ const displayRows = sorted.slice(0, maxRows);
266
+ for (const result of displayRows) {
267
+ const topFinding = result.scanReport.findings.length > 0
268
+ ? `${result.scanReport.findings[0].type}: ${result.scanReport.findings[0].message}`
269
+ : 'N/A';
270
+ const severityColored = colorize(padRight(result.severityCategory, colWidths.severity), getSeverityColor(result.severityCategory));
271
+ console.log(` ${padRight(truncate(result.skillId, colWidths.skillId), colWidths.skillId)} | ` +
272
+ `${padRight(result.scanReport.riskScore.toString(), colWidths.risk)} | ` +
273
+ `${severityColored} | ` +
274
+ `${truncate(topFinding, colWidths.finding)}`);
275
+ }
276
+ console.log(colorize(headerBorder, 'dim'));
277
+ // Show remaining count if truncated
278
+ if (quarantined.length > maxRows) {
279
+ console.log(colorize(` ... and ${quarantined.length - maxRows} more quarantined skills`, 'dim'));
280
+ }
281
+ console.log();
282
+ }
283
+ /**
284
+ * Log a summary of safe skills
285
+ *
286
+ * @param results - Array of safe scan results
287
+ * @param maxDisplay - Maximum number to display
288
+ */
289
+ export function logSafeSkillsSummary(results, maxDisplay = 5) {
290
+ const safe = results.filter((r) => !r.isQuarantined);
291
+ if (safe.length === 0) {
292
+ console.log(colorize(' No safe skills found.', 'yellow'));
293
+ return;
294
+ }
295
+ // Sort by risk score ascending (lowest risk first)
296
+ const sorted = [...safe].sort((a, b) => a.scanReport.riskScore - b.scanReport.riskScore);
297
+ console.log(colorize(` ${safe.length} skills passed security checks:`, 'green'));
298
+ console.log();
299
+ const displayRows = sorted.slice(0, maxDisplay);
300
+ for (const result of displayRows) {
301
+ const riskLabel = result.scanReport.riskScore === 0 ? 'clean' : `risk: ${result.scanReport.riskScore}`;
302
+ console.log(` ${colorize('[SAFE]', 'green')} ${result.skillId} (${riskLabel})`);
303
+ }
304
+ if (safe.length > maxDisplay) {
305
+ console.log(colorize(` ... and ${safe.length - maxDisplay} more safe skills`, 'dim'));
306
+ }
307
+ console.log();
308
+ }
309
+ /**
310
+ * Log categorized results by severity
311
+ *
312
+ * @param results - Array of scan results
313
+ */
314
+ export function logCategorizedResults(results) {
315
+ const categories = {
316
+ CRITICAL: [],
317
+ HIGH: [],
318
+ MEDIUM: [],
319
+ LOW: [],
320
+ SAFE: [],
321
+ };
322
+ for (const result of results) {
323
+ if (result.isQuarantined) {
324
+ categories[result.severityCategory].push(result);
325
+ }
326
+ else {
327
+ categories.SAFE.push(result);
328
+ }
329
+ }
330
+ logHeader('RESULTS BY CATEGORY');
331
+ // Safe skills
332
+ if (categories.SAFE.length > 0) {
333
+ console.log(` ${colorize('[SAFE]', 'green')} ${categories.SAFE.length} skills - ` +
334
+ colorize('Ready for import', 'dim'));
335
+ }
336
+ // Low severity
337
+ if (categories.LOW.length > 0) {
338
+ console.log(` ${colorize('[LOW]', 'cyan')} ${categories.LOW.length} skills - ` +
339
+ colorize('Minor findings, generally safe', 'dim'));
340
+ }
341
+ // Medium severity
342
+ if (categories.MEDIUM.length > 0) {
343
+ console.log(` ${colorize('[MEDIUM]', 'yellow')} ${categories.MEDIUM.length} skills - ` +
344
+ colorize('Review recommended', 'dim'));
345
+ }
346
+ // High severity
347
+ if (categories.HIGH.length > 0) {
348
+ console.log(` ${colorize('[HIGH]', 'magenta')} ${categories.HIGH.length} skills - ` +
349
+ colorize('Security review required', 'dim'));
350
+ }
351
+ // Critical severity
352
+ if (categories.CRITICAL.length > 0) {
353
+ console.log(` ${colorize('[CRITICAL]', 'red')} ${categories.CRITICAL.length} skills - ` +
354
+ colorize('Do NOT import without thorough review', 'dim'));
355
+ }
356
+ console.log();
103
357
  }
104
358
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../src/scripts/skill-scanner/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../src/scripts/skill-scanner/logger.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@
6
6
  import type { SecuritySeverity } from '../../security/index.js';
7
7
  import type { SkillScanResult, SecurityReportOutput, QuarantineOutput, SafeSkillsOutput, FindingWithContext } from './types.js';
8
8
  /**
9
- * Log summary statistics to console
9
+ * Log summary statistics to console with improved formatting
10
10
  *
11
11
  * @param results - Array of scan results
12
12
  */
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../../../src/scripts/skill-scanner/reporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,YAAY,CAAA;AAQnB;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAyB3D;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,kBAAkB,EAAE,EAC9B,KAAK,GAAE,MAAW,GACjB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,gBAAgB,CAAA;CAAE,CAAC,CA0BpE;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,eAAe,EAAE,EAC1B,QAAQ,EAAE,kBAAkB,EAAE,EAC9B,SAAS,EAAE,MAAM,GAChB,oBAAoB,CAsBtB;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,eAAe,EAAE,GACzB,gBAAgB,CAmBlB;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,eAAe,EAAE,GACzB,gBAAgB,CAclB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,EAAE,EAC1B,aAAa,EAAE,MAAM,GACpB,IAAI,CAkBN"}
1
+ {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../../../src/scripts/skill-scanner/reporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,YAAY,CAAA;AA8CnB;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CA0D3D;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,kBAAkB,EAAE,EAC9B,KAAK,GAAE,MAAW,GACjB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,gBAAgB,CAAA;CAAE,CAAC,CA0BpE;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,eAAe,EAAE,EAC1B,QAAQ,EAAE,kBAAkB,EAAE,EAC9B,SAAS,EAAE,MAAM,GAChB,oBAAoB,CAsBtB;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,gBAAgB,CAmBrF;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,gBAAgB,CAcrF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAkB1F"}
@@ -6,7 +6,41 @@
6
6
  import { countBySeverity } from './categorizer.js';
7
7
  import { calculateAverageRiskScore, calculateMaxRiskScore, getPassFailStats, } from './trust-scorer.js';
8
8
  /**
9
- * Log summary statistics to console
9
+ * ANSI color codes for terminal output
10
+ */
11
+ const COLORS = {
12
+ reset: '\x1b[0m',
13
+ bold: '\x1b[1m',
14
+ dim: '\x1b[2m',
15
+ red: '\x1b[31m',
16
+ green: '\x1b[32m',
17
+ yellow: '\x1b[33m',
18
+ cyan: '\x1b[36m',
19
+ magenta: '\x1b[35m',
20
+ };
21
+ /**
22
+ * Check if colors should be used
23
+ */
24
+ function useColors() {
25
+ return process.stdout.isTTY && !process.env.CI && !process.env.NO_COLOR;
26
+ }
27
+ /**
28
+ * Apply color to text if colors are enabled
29
+ */
30
+ function colorize(text, color) {
31
+ return useColors() ? `${COLORS[color]}${text}${COLORS.reset}` : text;
32
+ }
33
+ /**
34
+ * Create a visual bar for statistics
35
+ */
36
+ function createStatBar(value, total, width = 20) {
37
+ const percentage = total > 0 ? value / total : 0;
38
+ const filled = Math.round(width * percentage);
39
+ const bar = '█'.repeat(filled) + '░'.repeat(width - filled);
40
+ return bar;
41
+ }
42
+ /**
43
+ * Log summary statistics to console with improved formatting
10
44
  *
11
45
  * @param results - Array of scan results
12
46
  */
@@ -16,22 +50,40 @@ export function logSummary(results) {
16
50
  const bySeverity = countBySeverity(results);
17
51
  const avgRiskScore = calculateAverageRiskScore(results);
18
52
  const maxRiskScore = calculateMaxRiskScore(results);
19
- console.log('\n' + '='.repeat(60));
20
- console.log(' SCAN SUMMARY');
21
- console.log('='.repeat(60));
22
- console.log(` Total Skills Scanned: ${total}`);
23
- console.log(` Passed (Safe): ${passed} (${((passed / total) * 100).toFixed(1)}%)`);
24
- console.log(` Quarantined: ${quarantined} (${((quarantined / total) * 100).toFixed(1)}%)`);
53
+ const border = '═'.repeat(60);
54
+ const thinBorder = '─'.repeat(60);
55
+ console.log();
56
+ console.log(colorize(border, 'cyan'));
57
+ console.log(colorize(' SCAN SUMMARY', 'bold'));
58
+ console.log(colorize(border, 'cyan'));
59
+ console.log();
60
+ // Main stats with visual bars
61
+ const passedPct = total > 0 ? ((passed / total) * 100).toFixed(1) : '0.0';
62
+ const quarantinedPct = total > 0 ? ((quarantined / total) * 100).toFixed(1) : '0.0';
63
+ console.log(` ${colorize('Total Skills Scanned:', 'bold')} ${total}`);
64
+ console.log();
65
+ console.log(` ${colorize('Safe (Passed):', 'green')} ${passed.toString().padStart(4)} ${createStatBar(passed, total)} ${passedPct}%`);
66
+ console.log(` ${colorize('Quarantined:', 'red')} ${quarantined.toString().padStart(4)} ${createStatBar(quarantined, total)} ${quarantinedPct}%`);
67
+ console.log();
68
+ console.log(colorize(thinBorder, 'dim'));
69
+ console.log();
70
+ // Severity breakdown
71
+ console.log(` ${colorize('By Severity:', 'bold')}`);
72
+ console.log();
73
+ console.log(` ${colorize('CRITICAL:', 'red')} ${bySeverity.CRITICAL.toString().padStart(4)} ${createStatBar(bySeverity.CRITICAL, total, 15)}`);
74
+ console.log(` ${colorize('HIGH:', 'magenta')} ${bySeverity.HIGH.toString().padStart(4)} ${createStatBar(bySeverity.HIGH, total, 15)}`);
75
+ console.log(` ${colorize('MEDIUM:', 'yellow')} ${bySeverity.MEDIUM.toString().padStart(4)} ${createStatBar(bySeverity.MEDIUM, total, 15)}`);
76
+ console.log(` ${colorize('LOW:', 'cyan')} ${bySeverity.LOW.toString().padStart(4)} ${createStatBar(bySeverity.LOW, total, 15)}`);
77
+ console.log();
78
+ console.log(colorize(thinBorder, 'dim'));
79
+ console.log();
80
+ // Risk score stats
81
+ console.log(` ${colorize('Risk Scores:', 'bold')}`);
82
+ console.log(` Average: ${avgRiskScore.toFixed(1)}`);
83
+ console.log(` Maximum: ${maxRiskScore}`);
25
84
  console.log();
26
- console.log(' By Severity:');
27
- console.log(` CRITICAL: ${bySeverity.CRITICAL}`);
28
- console.log(` HIGH: ${bySeverity.HIGH}`);
29
- console.log(` MEDIUM: ${bySeverity.MEDIUM}`);
30
- console.log(` LOW: ${bySeverity.LOW}`);
85
+ console.log(colorize(border, 'cyan'));
31
86
  console.log();
32
- console.log(` Average Risk Score: ${avgRiskScore.toFixed(1)}`);
33
- console.log(` Maximum Risk Score: ${maxRiskScore}`);
34
- console.log('='.repeat(60) + '\n');
35
87
  }
36
88
  /**
37
89
  * Calculate top findings by type