@skillsmith/core 0.7.2 → 0.8.1

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 (266) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/analytics/ROIDashboardService.compute.d.ts +17 -0
  4. package/dist/src/analytics/ROIDashboardService.compute.d.ts.map +1 -0
  5. package/dist/src/analytics/ROIDashboardService.compute.js +134 -0
  6. package/dist/src/analytics/ROIDashboardService.compute.js.map +1 -0
  7. package/dist/src/analytics/ROIDashboardService.d.ts +0 -8
  8. package/dist/src/analytics/ROIDashboardService.d.ts.map +1 -1
  9. package/dist/src/analytics/ROIDashboardService.js +9 -138
  10. package/dist/src/analytics/ROIDashboardService.js.map +1 -1
  11. package/dist/src/api/client.types.d.ts +5 -0
  12. package/dist/src/api/client.types.d.ts.map +1 -1
  13. package/dist/src/api/index.d.ts +1 -0
  14. package/dist/src/api/index.d.ts.map +1 -1
  15. package/dist/src/api/index.js +4 -0
  16. package/dist/src/api/index.js.map +1 -1
  17. package/dist/src/api/schemas.compatibility.test.d.ts +11 -0
  18. package/dist/src/api/schemas.compatibility.test.d.ts.map +1 -0
  19. package/dist/src/api/schemas.compatibility.test.js +38 -0
  20. package/dist/src/api/schemas.compatibility.test.js.map +1 -0
  21. package/dist/src/api/schemas.d.ts +16 -9
  22. package/dist/src/api/schemas.d.ts.map +1 -1
  23. package/dist/src/api/schemas.js +13 -4
  24. package/dist/src/api/schemas.js.map +1 -1
  25. package/dist/src/api/schemas.license.test.d.ts +11 -0
  26. package/dist/src/api/schemas.license.test.d.ts.map +1 -0
  27. package/dist/src/api/schemas.license.test.js +51 -0
  28. package/dist/src/api/schemas.license.test.js.map +1 -0
  29. package/dist/src/api/types.d.ts +18 -3
  30. package/dist/src/api/types.d.ts.map +1 -1
  31. package/dist/src/api/types.js +29 -2
  32. package/dist/src/api/types.js.map +1 -1
  33. package/dist/src/audit/remote-audit.d.ts +41 -0
  34. package/dist/src/audit/remote-audit.d.ts.map +1 -1
  35. package/dist/src/audit/remote-audit.js +71 -28
  36. package/dist/src/audit/remote-audit.js.map +1 -1
  37. package/dist/src/audit/remote-audit.test.js +89 -1
  38. package/dist/src/audit/remote-audit.test.js.map +1 -1
  39. package/dist/src/compatibility/slugs.d.ts +34 -0
  40. package/dist/src/compatibility/slugs.d.ts.map +1 -0
  41. package/dist/src/compatibility/slugs.js +57 -0
  42. package/dist/src/compatibility/slugs.js.map +1 -0
  43. package/dist/src/db/schema-sql.d.ts +1 -1
  44. package/dist/src/db/schema-sql.d.ts.map +1 -1
  45. package/dist/src/db/schema-sql.js +1 -1
  46. package/dist/src/embeddings/probe.d.ts +62 -0
  47. package/dist/src/embeddings/probe.d.ts.map +1 -0
  48. package/dist/src/embeddings/probe.js +89 -0
  49. package/dist/src/embeddings/probe.js.map +1 -0
  50. package/dist/src/exports/types.d.ts +1 -0
  51. package/dist/src/exports/types.d.ts.map +1 -1
  52. package/dist/src/exports/types.js +4 -0
  53. package/dist/src/exports/types.js.map +1 -1
  54. package/dist/src/index.d.ts +6 -3
  55. package/dist/src/index.d.ts.map +1 -1
  56. package/dist/src/index.js +7 -3
  57. package/dist/src/index.js.map +1 -1
  58. package/dist/src/indexer/GitHubIndexer.d.ts.map +1 -1
  59. package/dist/src/indexer/GitHubIndexer.js +1 -1
  60. package/dist/src/indexer/GitHubIndexer.js.map +1 -1
  61. package/dist/src/provenance/SourceRecoveryService.d.ts +48 -0
  62. package/dist/src/provenance/SourceRecoveryService.d.ts.map +1 -0
  63. package/dist/src/provenance/SourceRecoveryService.js +182 -0
  64. package/dist/src/provenance/SourceRecoveryService.js.map +1 -0
  65. package/dist/src/provenance/backfill.d.ts +47 -0
  66. package/dist/src/provenance/backfill.d.ts.map +1 -0
  67. package/dist/src/provenance/backfill.js +206 -0
  68. package/dist/src/provenance/backfill.js.map +1 -0
  69. package/dist/src/provenance/git-config.d.ts +22 -0
  70. package/dist/src/provenance/git-config.d.ts.map +1 -0
  71. package/dist/src/provenance/git-config.js +117 -0
  72. package/dist/src/provenance/git-config.js.map +1 -0
  73. package/dist/src/provenance/index.d.ts +12 -0
  74. package/dist/src/provenance/index.d.ts.map +1 -0
  75. package/dist/src/provenance/index.js +12 -0
  76. package/dist/src/provenance/index.js.map +1 -0
  77. package/dist/src/provenance/local-skill-scan.d.ts +35 -0
  78. package/dist/src/provenance/local-skill-scan.d.ts.map +1 -0
  79. package/dist/src/provenance/local-skill-scan.js +79 -0
  80. package/dist/src/provenance/local-skill-scan.js.map +1 -0
  81. package/dist/src/provenance/plugin-manifest.d.ts +16 -0
  82. package/dist/src/provenance/plugin-manifest.d.ts.map +1 -0
  83. package/dist/src/provenance/plugin-manifest.js +52 -0
  84. package/dist/src/provenance/plugin-manifest.js.map +1 -0
  85. package/dist/src/provenance/types.d.ts +86 -0
  86. package/dist/src/provenance/types.d.ts.map +1 -0
  87. package/dist/src/provenance/types.js +21 -0
  88. package/dist/src/provenance/types.js.map +1 -0
  89. package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
  90. package/dist/src/repositories/SkillRepository.js +3 -1
  91. package/dist/src/repositories/SkillRepository.js.map +1 -1
  92. package/dist/src/scripts/__tests__/scan-imported-skills.test.js +10 -0
  93. package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
  94. package/dist/src/scripts/validation/normalizers.d.ts.map +1 -1
  95. package/dist/src/scripts/validation/normalizers.js +9 -7
  96. package/dist/src/scripts/validation/normalizers.js.map +1 -1
  97. package/dist/src/scripts/validation/types.d.ts +8 -2
  98. package/dist/src/scripts/validation/types.d.ts.map +1 -1
  99. package/dist/src/scripts/validation/types.js +10 -2
  100. package/dist/src/scripts/validation/types.js.map +1 -1
  101. package/dist/src/security/scanner/SecurityScanner.d.ts +0 -7
  102. package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -1
  103. package/dist/src/security/scanner/SecurityScanner.exec.d.ts +56 -0
  104. package/dist/src/security/scanner/SecurityScanner.exec.d.ts.map +1 -0
  105. package/dist/src/security/scanner/SecurityScanner.exec.js +255 -0
  106. package/dist/src/security/scanner/SecurityScanner.exec.js.map +1 -0
  107. package/dist/src/security/scanner/SecurityScanner.helpers.d.ts.map +1 -1
  108. package/dist/src/security/scanner/SecurityScanner.helpers.js +17 -1
  109. package/dist/src/security/scanner/SecurityScanner.helpers.js.map +1 -1
  110. package/dist/src/security/scanner/SecurityScanner.js +34 -199
  111. package/dist/src/security/scanner/SecurityScanner.js.map +1 -1
  112. package/dist/src/security/scanner/SecurityScanner.scanners.d.ts +22 -0
  113. package/dist/src/security/scanner/SecurityScanner.scanners.d.ts.map +1 -0
  114. package/dist/src/security/scanner/SecurityScanner.scanners.js +213 -0
  115. package/dist/src/security/scanner/SecurityScanner.scanners.js.map +1 -0
  116. package/dist/src/security/scanner/index.d.ts +1 -1
  117. package/dist/src/security/scanner/index.d.ts.map +1 -1
  118. package/dist/src/security/scanner/index.js +1 -1
  119. package/dist/src/security/scanner/index.js.map +1 -1
  120. package/dist/src/security/scanner/patterns.d.ts +21 -0
  121. package/dist/src/security/scanner/patterns.d.ts.map +1 -1
  122. package/dist/src/security/scanner/patterns.js +34 -0
  123. package/dist/src/security/scanner/patterns.js.map +1 -1
  124. package/dist/src/security/scanner/types.d.ts +3 -1
  125. package/dist/src/security/scanner/types.d.ts.map +1 -1
  126. package/dist/src/security/scanner/weights.d.ts.map +1 -1
  127. package/dist/src/security/scanner/weights.js +6 -0
  128. package/dist/src/security/scanner/weights.js.map +1 -1
  129. package/dist/src/services/SearchService.helpers.d.ts.map +1 -1
  130. package/dist/src/services/SearchService.helpers.js +2 -0
  131. package/dist/src/services/SearchService.helpers.js.map +1 -1
  132. package/dist/src/services/SearchService.types.d.ts +1 -0
  133. package/dist/src/services/SearchService.types.d.ts.map +1 -1
  134. package/dist/src/services/skill-installation.helpers.d.ts +2 -26
  135. package/dist/src/services/skill-installation.helpers.d.ts.map +1 -1
  136. package/dist/src/services/skill-installation.helpers.js +2 -120
  137. package/dist/src/services/skill-installation.helpers.js.map +1 -1
  138. package/dist/src/services/skill-installation.io.d.ts +43 -0
  139. package/dist/src/services/skill-installation.io.d.ts.map +1 -0
  140. package/dist/src/services/skill-installation.io.js +176 -0
  141. package/dist/src/services/skill-installation.io.js.map +1 -0
  142. package/dist/src/services/skill-installation.service.d.ts.map +1 -1
  143. package/dist/src/services/skill-installation.service.js +51 -113
  144. package/dist/src/services/skill-installation.service.js.map +1 -1
  145. package/dist/src/services/skill-installation.types.d.ts.map +1 -1
  146. package/dist/src/services/skill-installation.types.js +9 -0
  147. package/dist/src/services/skill-installation.types.js.map +1 -1
  148. package/dist/src/services/skill-installation.validate.d.ts +44 -0
  149. package/dist/src/services/skill-installation.validate.d.ts.map +1 -0
  150. package/dist/src/services/skill-installation.validate.js +134 -0
  151. package/dist/src/services/skill-installation.validate.js.map +1 -0
  152. package/dist/src/telemetry/index.d.ts +2 -1
  153. package/dist/src/telemetry/index.d.ts.map +1 -1
  154. package/dist/src/telemetry/index.js +4 -1
  155. package/dist/src/telemetry/index.js.map +1 -1
  156. package/dist/src/telemetry/posthog.d.ts +19 -1
  157. package/dist/src/telemetry/posthog.d.ts.map +1 -1
  158. package/dist/src/telemetry/posthog.js +14 -0
  159. package/dist/src/telemetry/posthog.js.map +1 -1
  160. package/dist/src/telemetry/wrap.bench.d.ts +13 -0
  161. package/dist/src/telemetry/wrap.bench.d.ts.map +1 -0
  162. package/dist/src/telemetry/wrap.bench.js +41 -0
  163. package/dist/src/telemetry/wrap.bench.js.map +1 -0
  164. package/dist/src/telemetry/wrap.d.ts +75 -0
  165. package/dist/src/telemetry/wrap.d.ts.map +1 -0
  166. package/dist/src/telemetry/wrap.js +124 -0
  167. package/dist/src/telemetry/wrap.js.map +1 -0
  168. package/dist/src/telemetry/wrap.test.d.ts +14 -0
  169. package/dist/src/telemetry/wrap.test.d.ts.map +1 -0
  170. package/dist/src/telemetry/wrap.test.js +283 -0
  171. package/dist/src/telemetry/wrap.test.js.map +1 -0
  172. package/dist/src/types/skill.d.ts +6 -1
  173. package/dist/src/types/skill.d.ts.map +1 -1
  174. package/dist/src/types/skill.js.map +1 -1
  175. package/dist/src/types.d.ts +25 -1
  176. package/dist/src/types.d.ts.map +1 -1
  177. package/dist/src/types.js +3 -1
  178. package/dist/src/types.js.map +1 -1
  179. package/dist/tests/GitHubIndexer.edge-cases.test.js +2 -2
  180. package/dist/tests/GitHubIndexer.repository.test.d.ts +10 -0
  181. package/dist/tests/GitHubIndexer.repository.test.d.ts.map +1 -0
  182. package/dist/tests/GitHubIndexer.repository.test.js +190 -0
  183. package/dist/tests/GitHubIndexer.repository.test.js.map +1 -0
  184. package/dist/tests/GitHubIndexer.test.d.ts +2 -1
  185. package/dist/tests/GitHubIndexer.test.d.ts.map +1 -1
  186. package/dist/tests/GitHubIndexer.test.js +5 -183
  187. package/dist/tests/GitHubIndexer.test.js.map +1 -1
  188. package/dist/tests/QuarantineRepository.review-state-machine.test.d.ts +14 -0
  189. package/dist/tests/QuarantineRepository.review-state-machine.test.d.ts.map +1 -0
  190. package/dist/tests/QuarantineRepository.review-state-machine.test.js +296 -0
  191. package/dist/tests/QuarantineRepository.review-state-machine.test.js.map +1 -0
  192. package/dist/tests/RawUrlSourceAdapter.security.test.js +3 -2
  193. package/dist/tests/RawUrlSourceAdapter.security.test.js.map +1 -1
  194. package/dist/tests/SecurityScanner.exec.test.d.ts +11 -0
  195. package/dist/tests/SecurityScanner.exec.test.d.ts.map +1 -0
  196. package/dist/tests/SecurityScanner.exec.test.js +190 -0
  197. package/dist/tests/SecurityScanner.exec.test.js.map +1 -0
  198. package/dist/tests/SwarmIndexer.test.js +2 -2
  199. package/dist/tests/api/client.validation.test.js +7 -4
  200. package/dist/tests/api/client.validation.test.js.map +1 -1
  201. package/dist/tests/embeddings/probe.test.d.ts +13 -0
  202. package/dist/tests/embeddings/probe.test.d.ts.map +1 -0
  203. package/dist/tests/embeddings/probe.test.js +154 -0
  204. package/dist/tests/embeddings/probe.test.js.map +1 -0
  205. package/dist/tests/fixtures/api-responses/index.js +1 -1
  206. package/dist/tests/fixtures/api-responses/index.js.map +1 -1
  207. package/dist/tests/integration/QuarantineService.concurrency.test.d.ts +34 -0
  208. package/dist/tests/integration/QuarantineService.concurrency.test.d.ts.map +1 -0
  209. package/dist/tests/integration/QuarantineService.concurrency.test.js +280 -0
  210. package/dist/tests/integration/QuarantineService.concurrency.test.js.map +1 -0
  211. package/dist/tests/integration/openapi-contract.test.d.ts +16 -0
  212. package/dist/tests/integration/openapi-contract.test.d.ts.map +1 -0
  213. package/dist/tests/integration/openapi-contract.test.js +231 -0
  214. package/dist/tests/integration/openapi-contract.test.js.map +1 -0
  215. package/dist/tests/provenance/SourceRecoveryService.test.d.ts +2 -0
  216. package/dist/tests/provenance/SourceRecoveryService.test.d.ts.map +1 -0
  217. package/dist/tests/provenance/SourceRecoveryService.test.js +132 -0
  218. package/dist/tests/provenance/SourceRecoveryService.test.js.map +1 -0
  219. package/dist/tests/provenance/backfill.test.d.ts +2 -0
  220. package/dist/tests/provenance/backfill.test.d.ts.map +1 -0
  221. package/dist/tests/provenance/backfill.test.js +278 -0
  222. package/dist/tests/provenance/backfill.test.js.map +1 -0
  223. package/dist/tests/provenance/git-config.test.d.ts +2 -0
  224. package/dist/tests/provenance/git-config.test.d.ts.map +1 -0
  225. package/dist/tests/provenance/git-config.test.js +73 -0
  226. package/dist/tests/provenance/git-config.test.js.map +1 -0
  227. package/dist/tests/provenance/local-skill-scan.test.d.ts +2 -0
  228. package/dist/tests/provenance/local-skill-scan.test.d.ts.map +1 -0
  229. package/dist/tests/provenance/local-skill-scan.test.js +51 -0
  230. package/dist/tests/provenance/local-skill-scan.test.js.map +1 -0
  231. package/dist/tests/provenance/plugin-manifest.test.d.ts +2 -0
  232. package/dist/tests/provenance/plugin-manifest.test.d.ts.map +1 -0
  233. package/dist/tests/provenance/plugin-manifest.test.js +49 -0
  234. package/dist/tests/provenance/plugin-manifest.test.js.map +1 -0
  235. package/dist/tests/scripts/import-to-database.test.js +7 -1
  236. package/dist/tests/scripts/import-to-database.test.js.map +1 -1
  237. package/dist/tests/security/scanner-regression-guard.test.js +5 -1
  238. package/dist/tests/security/scanner-regression-guard.test.js.map +1 -1
  239. package/dist/tests/security.test.js +45 -0
  240. package/dist/tests/security.test.js.map +1 -1
  241. package/dist/tests/services/aidefence-feedback.test.js +2 -0
  242. package/dist/tests/services/aidefence-feedback.test.js.map +1 -1
  243. package/dist/tests/services/dep-quarantine-check.test.js +1 -1
  244. package/dist/tests/services/dep-quarantine-check.test.js.map +1 -1
  245. package/dist/tests/skill-scanner/allowlist.test.js +8 -1
  246. package/dist/tests/skill-scanner/allowlist.test.js.map +1 -1
  247. package/dist/tests/unit/services/skill-installation.gap1.test.d.ts +12 -0
  248. package/dist/tests/unit/services/skill-installation.gap1.test.d.ts.map +1 -0
  249. package/dist/tests/unit/services/skill-installation.gap1.test.js +96 -0
  250. package/dist/tests/unit/services/skill-installation.gap1.test.js.map +1 -0
  251. package/dist/tests/unit/services/skill-installation.io.test.d.ts +11 -0
  252. package/dist/tests/unit/services/skill-installation.io.test.d.ts.map +1 -0
  253. package/dist/tests/unit/services/skill-installation.io.test.js +130 -0
  254. package/dist/tests/unit/services/skill-installation.io.test.js.map +1 -0
  255. package/dist/tests/validate-skills.dedup.test.d.ts +5 -0
  256. package/dist/tests/validate-skills.dedup.test.d.ts.map +1 -0
  257. package/dist/tests/validate-skills.dedup.test.js +241 -0
  258. package/dist/tests/validate-skills.dedup.test.js.map +1 -0
  259. package/dist/tests/validate-skills.normalizers.test.d.ts +5 -0
  260. package/dist/tests/validate-skills.normalizers.test.d.ts.map +1 -0
  261. package/dist/tests/validate-skills.normalizers.test.js +109 -0
  262. package/dist/tests/validate-skills.normalizers.test.js.map +1 -0
  263. package/dist/tests/validate-skills.test.d.ts +1 -1
  264. package/dist/tests/validate-skills.test.js +7 -345
  265. package/dist/tests/validate-skills.test.js.map +1 -1
  266. package/package.json +29 -8
@@ -0,0 +1,17 @@
1
+ /**
2
+ * ROI Dashboard computation helpers — extracted from ROIDashboardService.ts
3
+ * to keep the main service file under the 500-line governance limit.
4
+ */
5
+ import type { AnalyticsRepository } from './AnalyticsRepository.js';
6
+ import type { ROIDashboard, ROIMetrics, UsageEvent } from './types.js';
7
+ export declare function calculateTimeSaved(events: UsageEvent[], timeSavedPerSuccess: number): number;
8
+ export declare function groupBySkill(events: UsageEvent[]): Record<string, UsageEvent[]>;
9
+ export declare function calculateWeeklyTrend(events: UsageEvent[], startDate: string, endDate: string, timeSavedPerSuccess: number): Array<{
10
+ week: string;
11
+ timeSaved: number;
12
+ }>;
13
+ export declare function computeStakeholderROIOnTheFly(repo: AnalyticsRepository, startDate: string, endDate: string, assertRange: (s: string, e: string) => void): ROIDashboard['stakeholder'];
14
+ export declare function computeUserMetrics(repo: AnalyticsRepository, userId: string, startDate: string, endDate: string, timeSavedPerSuccess: number, valuePerMinute: number): Omit<ROIMetrics, 'id' | 'createdAt'>;
15
+ export declare function computeSkillMetrics(repo: AnalyticsRepository, skillId: string, startDate: string, endDate: string, timeSavedPerSuccess: number, valuePerMinute: number): Omit<ROIMetrics, 'id' | 'createdAt'>;
16
+ export declare function computeDailyMetrics(startDate: string, endDate: string): Omit<ROIMetrics, 'id' | 'createdAt'>;
17
+ //# sourceMappingURL=ROIDashboardService.compute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ROIDashboardService.compute.d.ts","sourceRoot":"","sources":["../../../src/analytics/ROIDashboardService.compute.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEtE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAG5F;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAS/E;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,UAAU,EAAE,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,mBAAmB,EAAE,MAAM,GAC1B,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAyB5C;AAUD,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,mBAAmB,EACzB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,GAC1C,YAAY,CAAC,aAAa,CAAC,CAoB7B;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,mBAAmB,EACzB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,mBAAmB,EAAE,MAAM,EAC3B,cAAc,EAAE,MAAM,GACrB,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,CAAC,CA6BtC;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,mBAAmB,EAAE,MAAM,EAC3B,cAAc,EAAE,MAAM,GACrB,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,CAAC,CA6BtC;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,CAAC,CAgBtC"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * ROI Dashboard computation helpers — extracted from ROIDashboardService.ts
3
+ * to keep the main service file under the 500-line governance limit.
4
+ */
5
+ export function calculateTimeSaved(events, timeSavedPerSuccess) {
6
+ const successCount = events.filter((e) => e.eventType === 'success').length;
7
+ return successCount * timeSavedPerSuccess;
8
+ }
9
+ export function groupBySkill(events) {
10
+ const groups = {};
11
+ for (const event of events) {
12
+ if (!groups[event.skillId]) {
13
+ groups[event.skillId] = [];
14
+ }
15
+ groups[event.skillId].push(event);
16
+ }
17
+ return groups;
18
+ }
19
+ export function calculateWeeklyTrend(events, startDate, endDate, timeSavedPerSuccess) {
20
+ // Filter events to the requested inclusive range (SMI-1683 / GitHub #603).
21
+ // ISO-8601 timestamps sort lexicographically, so string comparison is correct.
22
+ const filtered = events.filter((event) => event.timestamp >= startDate && event.timestamp <= endDate);
23
+ // Group filtered events by week
24
+ const weeklyGroups = {};
25
+ for (const event of filtered) {
26
+ const weekStart = getWeekStart(event.timestamp);
27
+ if (!weeklyGroups[weekStart]) {
28
+ weeklyGroups[weekStart] = [];
29
+ }
30
+ weeklyGroups[weekStart].push(event);
31
+ }
32
+ // Calculate time saved per week
33
+ return Object.entries(weeklyGroups)
34
+ .map(([week, weekEvents]) => ({
35
+ week,
36
+ timeSaved: calculateTimeSaved(weekEvents, timeSavedPerSuccess),
37
+ }))
38
+ .sort((a, b) => a.week.localeCompare(b.week));
39
+ }
40
+ function getWeekStart(timestamp) {
41
+ const date = new Date(timestamp);
42
+ const day = date.getDay();
43
+ const diff = date.getDate() - day + (day === 0 ? -6 : 1); // Adjust for Sunday
44
+ const weekStart = new Date(date.setDate(diff));
45
+ return weekStart.toISOString().split('T')[0];
46
+ }
47
+ export function computeStakeholderROIOnTheFly(repo, startDate, endDate, assertRange) {
48
+ // SMI-1683 scope: validate the date range even though the on-the-fly branch
49
+ // still returns zeroed stakeholder data. This guards callers from passing
50
+ // malformed ranges while the event-query implementation remains deferred.
51
+ //
52
+ // DESCOPE: The actual event aggregation (users, activations, time saved,
53
+ // leaderboard) lands in SMI-4296. Until then this method intentionally
54
+ // returns a zeroed struct regardless of the events present in the range,
55
+ // and the unit test for this branch asserts the zeroed shape to document
56
+ // the incompleteness.
57
+ assertRange(startDate, endDate);
58
+ return {
59
+ totalUsers: 0,
60
+ totalActivations: 0,
61
+ avgTimeSavedPerUser: 0,
62
+ totalEstimatedValue: 0,
63
+ adoptionRate: 0,
64
+ skillLeaderboard: [],
65
+ };
66
+ }
67
+ export function computeUserMetrics(repo, userId, startDate, endDate, timeSavedPerSuccess, valuePerMinute) {
68
+ const events = repo.getUsageEventsForUser(userId, startDate, endDate);
69
+ const totalActivations = events.filter((e) => e.eventType === 'activation').length;
70
+ const totalInvocations = events.filter((e) => e.eventType === 'invocation').length;
71
+ const totalSuccesses = events.filter((e) => e.eventType === 'success').length;
72
+ const totalFailures = events.filter((e) => e.eventType === 'failure').length;
73
+ const valueScores = events.filter((e) => e.valueScore != null).map((e) => e.valueScore);
74
+ const avgValueScore = valueScores.length > 0 ? valueScores.reduce((sum, s) => sum + s, 0) / valueScores.length : 0;
75
+ const estimatedTimeSaved = totalSuccesses * timeSavedPerSuccess;
76
+ const estimatedValueUsd = estimatedTimeSaved * valuePerMinute;
77
+ return {
78
+ metricType: 'user',
79
+ entityId: userId,
80
+ periodStart: startDate,
81
+ periodEnd: endDate,
82
+ totalActivations,
83
+ totalInvocations,
84
+ totalSuccesses,
85
+ totalFailures,
86
+ avgValueScore,
87
+ estimatedTimeSaved,
88
+ estimatedValueUsd,
89
+ computedAt: new Date().toISOString(),
90
+ };
91
+ }
92
+ export function computeSkillMetrics(repo, skillId, startDate, endDate, timeSavedPerSuccess, valuePerMinute) {
93
+ const events = repo.getUsageEventsForSkill(skillId, startDate, endDate);
94
+ const totalActivations = events.filter((e) => e.eventType === 'activation').length;
95
+ const totalInvocations = events.filter((e) => e.eventType === 'invocation').length;
96
+ const totalSuccesses = events.filter((e) => e.eventType === 'success').length;
97
+ const totalFailures = events.filter((e) => e.eventType === 'failure').length;
98
+ const valueScores = events.filter((e) => e.valueScore != null).map((e) => e.valueScore);
99
+ const avgValueScore = valueScores.length > 0 ? valueScores.reduce((sum, s) => sum + s, 0) / valueScores.length : 0;
100
+ const estimatedTimeSaved = totalSuccesses * timeSavedPerSuccess;
101
+ const estimatedValueUsd = estimatedTimeSaved * valuePerMinute;
102
+ return {
103
+ metricType: 'skill',
104
+ entityId: skillId,
105
+ periodStart: startDate,
106
+ periodEnd: endDate,
107
+ totalActivations,
108
+ totalInvocations,
109
+ totalSuccesses,
110
+ totalFailures,
111
+ avgValueScore,
112
+ estimatedTimeSaved,
113
+ estimatedValueUsd,
114
+ computedAt: new Date().toISOString(),
115
+ };
116
+ }
117
+ export function computeDailyMetrics(startDate, endDate) {
118
+ // In production, aggregate from all events
119
+ // For now, return empty metrics
120
+ return {
121
+ metricType: 'daily',
122
+ periodStart: startDate,
123
+ periodEnd: endDate,
124
+ totalActivations: 0,
125
+ totalInvocations: 0,
126
+ totalSuccesses: 0,
127
+ totalFailures: 0,
128
+ avgValueScore: 0,
129
+ estimatedTimeSaved: 0,
130
+ estimatedValueUsd: 0,
131
+ computedAt: new Date().toISOString(),
132
+ };
133
+ }
134
+ //# sourceMappingURL=ROIDashboardService.compute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ROIDashboardService.compute.js","sourceRoot":"","sources":["../../../src/analytics/ROIDashboardService.compute.ts"],"names":[],"mappings":"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"}
@@ -104,13 +104,5 @@ export declare class ROIDashboardService {
104
104
  * 3. Ordering — rejects when `startDate >= endDate`.
105
105
  */
106
106
  private assertValidRange;
107
- private calculateTimeSaved;
108
- private groupBySkill;
109
- private calculateWeeklyTrend;
110
- private getWeekStart;
111
- private computeStakeholderROIOnTheFly;
112
- private computeUserMetrics;
113
- private computeSkillMetrics;
114
- private computeDailyMetrics;
115
107
  }
116
108
  //# sourceMappingURL=ROIDashboardService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ROIDashboardService.d.ts","sourceRoot":"","sources":["../../../src/analytics/ROIDashboardService.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAI3E,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAc,MAAM,YAAY,CAAA;AAEpF,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAKD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,QAC+C,CAAA;AAE3E,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAI;IAC3C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAI;gBAEzB,EAAE,EAAE,YAAY;IAI5B;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,YAAY,CAAC,MAAM,CAAC;IAKnE;;;OAGG;IACH,OAAO,CAAC,YAAY;IAiCpB;;;OAGG;IACH,iBAAiB,CAAC,IAAI,GAAE,MAAW,GAAG,YAAY,CAAC,aAAa,CAAC;IAKjE;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA0C3B;;;;;;;;;;;;;OAaG;IACH,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,YAAY;IAU7D;;;OAGG;IACH,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,GAAG,UAAU,EAAE;IAyBhE;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,MAAW,GAAG,MAAM;IAoB1F;;OAEG;IACH,cAAc,IAAI,IAAI;IAWtB,OAAO,CAAC,YAAY;IAmBpB;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,oBAAoB;IA+B5B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,6BAA6B;IAyBrC,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,mBAAmB;IAmC3B,OAAO,CAAC,mBAAmB;CAoB5B"}
1
+ {"version":3,"file":"ROIDashboardService.d.ts","sourceRoot":"","sources":["../../../src/analytics/ROIDashboardService.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAa3E,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAExE,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAKD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,QAC+C,CAAA;AAE3E,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAI;IAC3C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAI;gBAEzB,EAAE,EAAE,YAAY;IAI5B;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,YAAY,CAAC,MAAM,CAAC;IAKnE;;;OAGG;IACH,OAAO,CAAC,YAAY;IAsCpB;;;OAGG;IACH,iBAAiB,CAAC,IAAI,GAAE,MAAW,GAAG,YAAY,CAAC,aAAa,CAAC;IAKjE;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA4C3B;;;;;;;;;;;;;OAaG;IACH,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,YAAY;IAU7D;;;OAGG;IACH,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,GAAG,UAAU,EAAE;IAuChE;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,MAAW,GAAG,MAAM;IAoB1F;;OAEG;IACH,cAAc,IAAI,IAAI;IAStB,OAAO,CAAC,YAAY;IAmBpB;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,gBAAgB;CAyBzB"}
@@ -10,6 +10,7 @@
10
10
  import { ValidationError } from '../validation/validation-error.js';
11
11
  import { AnalyticsRepository } from './AnalyticsRepository.js';
12
12
  import { convertROIToCSV } from './ROIDashboardService.csv.js';
13
+ import { calculateTimeSaved, groupBySkill, calculateWeeklyTrend, computeStakeholderROIOnTheFly, computeUserMetrics, computeSkillMetrics, computeDailyMetrics, } from './ROIDashboardService.compute.js';
13
14
  /** Default window applied by {@link ROIDashboardService.getDashboard} when both dates are omitted. */
14
15
  const DEFAULT_DASHBOARD_WINDOW_DAYS = 30;
15
16
  /**
@@ -43,21 +44,21 @@ export class ROIDashboardService {
43
44
  // Get user's usage events
44
45
  const events = this.repo.getUsageEventsForUser(userId, startDate, endDate);
45
46
  // Calculate total time saved
46
- const totalTimeSaved = this.calculateTimeSaved(events);
47
+ const totalTimeSaved = calculateTimeSaved(events, this.TIME_SAVED_PER_SUCCESS);
47
48
  // Estimate value in USD
48
49
  const estimatedValueUsd = totalTimeSaved * this.VALUE_PER_MINUTE;
49
50
  // Get top skills for this user
50
- const skillUsage = this.groupBySkill(events);
51
+ const skillUsage = groupBySkill(events);
51
52
  const topSkills = Object.entries(skillUsage)
52
53
  .map(([skillId, skillEvents]) => ({
53
54
  skillId,
54
55
  skillName: skillId, // In production, lookup skill name from skills table
55
- timeSaved: this.calculateTimeSaved(skillEvents),
56
+ timeSaved: calculateTimeSaved(skillEvents, this.TIME_SAVED_PER_SUCCESS),
56
57
  }))
57
58
  .sort((a, b) => b.timeSaved - a.timeSaved)
58
59
  .slice(0, 5);
59
60
  // Calculate weekly trend (filtered to [startDate, endDate])
60
- const weeklyTrend = this.calculateWeeklyTrend(events, startDate, endDate);
61
+ const weeklyTrend = calculateWeeklyTrend(events, startDate, endDate, this.TIME_SAVED_PER_SUCCESS);
61
62
  return {
62
63
  userId,
63
64
  totalTimeSaved,
@@ -83,7 +84,7 @@ export class ROIDashboardService {
83
84
  const metrics = this.repo.getROIMetrics('daily', startDate, endDate);
84
85
  if (metrics.length === 0) {
85
86
  // No precomputed metrics, compute on-the-fly (slower)
86
- return this.computeStakeholderROIOnTheFly(startDate, endDate);
87
+ return computeStakeholderROIOnTheFly(this.repo, startDate, endDate, (a, b) => this.assertValidRange(a, b));
87
88
  }
88
89
  // Aggregate from precomputed metrics
89
90
  const totalActivations = metrics.reduce((sum, m) => sum + m.totalActivations, 0);
@@ -146,17 +147,17 @@ export class ROIDashboardService {
146
147
  const computed = [];
147
148
  if (options.userId) {
148
149
  // Compute for specific user
149
- const metrics = this.computeUserMetrics(options.userId, startDate, endDate);
150
+ const metrics = computeUserMetrics(this.repo, options.userId, startDate, endDate, this.TIME_SAVED_PER_SUCCESS, this.VALUE_PER_MINUTE);
150
151
  computed.push(this.repo.storeROIMetrics(metrics));
151
152
  }
152
153
  else if (options.skillId) {
153
154
  // Compute for specific skill
154
- const metrics = this.computeSkillMetrics(options.skillId, startDate, endDate);
155
+ const metrics = computeSkillMetrics(this.repo, options.skillId, startDate, endDate, this.TIME_SAVED_PER_SUCCESS, this.VALUE_PER_MINUTE);
155
156
  computed.push(this.repo.storeROIMetrics(metrics));
156
157
  }
157
158
  else {
158
159
  // Compute daily aggregate
159
- const metrics = this.computeDailyMetrics(startDate, endDate);
160
+ const metrics = computeDailyMetrics(startDate, endDate);
160
161
  computed.push(this.repo.storeROIMetrics(metrics));
161
162
  }
162
163
  return computed;
@@ -188,7 +189,6 @@ export class ROIDashboardService {
188
189
  this.computeROIMetrics({ startDate, endDate });
189
190
  // In production, also compute per-user and per-skill metrics
190
191
  }
191
- // ==================== Private Helper Methods ====================
192
192
  getDateRange(days) {
193
193
  // SMI-4317: fail fast on non-positive-integer `days`. Without this guard,
194
194
  // `getUserROI(userId, -5)` silently inverts the range (start > end), which
@@ -244,134 +244,5 @@ export class ROIDashboardService {
244
244
  throw new ValidationError('Invalid range: startDate must be before endDate', 'INVALID_DATE_RANGE');
245
245
  }
246
246
  }
247
- calculateTimeSaved(events) {
248
- const successCount = events.filter((e) => e.eventType === 'success').length;
249
- return successCount * this.TIME_SAVED_PER_SUCCESS;
250
- }
251
- groupBySkill(events) {
252
- const groups = {};
253
- for (const event of events) {
254
- if (!groups[event.skillId]) {
255
- groups[event.skillId] = [];
256
- }
257
- groups[event.skillId].push(event);
258
- }
259
- return groups;
260
- }
261
- calculateWeeklyTrend(events, startDate, endDate) {
262
- // Filter events to the requested inclusive range (SMI-1683 / GitHub #603).
263
- // ISO-8601 timestamps sort lexicographically, so string comparison is correct.
264
- const filtered = events.filter((event) => event.timestamp >= startDate && event.timestamp <= endDate);
265
- // Group filtered events by week
266
- const weeklyGroups = {};
267
- for (const event of filtered) {
268
- const weekStart = this.getWeekStart(event.timestamp);
269
- if (!weeklyGroups[weekStart]) {
270
- weeklyGroups[weekStart] = [];
271
- }
272
- weeklyGroups[weekStart].push(event);
273
- }
274
- // Calculate time saved per week
275
- return Object.entries(weeklyGroups)
276
- .map(([week, weekEvents]) => ({
277
- week,
278
- timeSaved: this.calculateTimeSaved(weekEvents),
279
- }))
280
- .sort((a, b) => a.week.localeCompare(b.week));
281
- }
282
- getWeekStart(timestamp) {
283
- const date = new Date(timestamp);
284
- const day = date.getDay();
285
- const diff = date.getDate() - day + (day === 0 ? -6 : 1); // Adjust for Sunday
286
- const weekStart = new Date(date.setDate(diff));
287
- return weekStart.toISOString().split('T')[0];
288
- }
289
- computeStakeholderROIOnTheFly(startDate, endDate) {
290
- // SMI-1683 scope: validate the date range even though the on-the-fly branch
291
- // still returns zeroed stakeholder data. This guards callers from passing
292
- // malformed ranges while the event-query implementation remains deferred.
293
- //
294
- // DESCOPE: The actual event aggregation (users, activations, time saved,
295
- // leaderboard) lands in SMI-4296. Until then this method intentionally
296
- // returns a zeroed struct regardless of the events present in the range,
297
- // and the unit test for this branch asserts the zeroed shape to document
298
- // the incompleteness.
299
- this.assertValidRange(startDate, endDate);
300
- return {
301
- totalUsers: 0,
302
- totalActivations: 0,
303
- avgTimeSavedPerUser: 0,
304
- totalEstimatedValue: 0,
305
- adoptionRate: 0,
306
- skillLeaderboard: [],
307
- };
308
- }
309
- computeUserMetrics(userId, startDate, endDate) {
310
- const events = this.repo.getUsageEventsForUser(userId, startDate, endDate);
311
- const totalActivations = events.filter((e) => e.eventType === 'activation').length;
312
- const totalInvocations = events.filter((e) => e.eventType === 'invocation').length;
313
- const totalSuccesses = events.filter((e) => e.eventType === 'success').length;
314
- const totalFailures = events.filter((e) => e.eventType === 'failure').length;
315
- const valueScores = events.filter((e) => e.valueScore != null).map((e) => e.valueScore);
316
- const avgValueScore = valueScores.length > 0 ? valueScores.reduce((sum, s) => sum + s, 0) / valueScores.length : 0;
317
- const estimatedTimeSaved = totalSuccesses * this.TIME_SAVED_PER_SUCCESS;
318
- const estimatedValueUsd = estimatedTimeSaved * this.VALUE_PER_MINUTE;
319
- return {
320
- metricType: 'user',
321
- entityId: userId,
322
- periodStart: startDate,
323
- periodEnd: endDate,
324
- totalActivations,
325
- totalInvocations,
326
- totalSuccesses,
327
- totalFailures,
328
- avgValueScore,
329
- estimatedTimeSaved,
330
- estimatedValueUsd,
331
- computedAt: new Date().toISOString(),
332
- };
333
- }
334
- computeSkillMetrics(skillId, startDate, endDate) {
335
- const events = this.repo.getUsageEventsForSkill(skillId, startDate, endDate);
336
- const totalActivations = events.filter((e) => e.eventType === 'activation').length;
337
- const totalInvocations = events.filter((e) => e.eventType === 'invocation').length;
338
- const totalSuccesses = events.filter((e) => e.eventType === 'success').length;
339
- const totalFailures = events.filter((e) => e.eventType === 'failure').length;
340
- const valueScores = events.filter((e) => e.valueScore != null).map((e) => e.valueScore);
341
- const avgValueScore = valueScores.length > 0 ? valueScores.reduce((sum, s) => sum + s, 0) / valueScores.length : 0;
342
- const estimatedTimeSaved = totalSuccesses * this.TIME_SAVED_PER_SUCCESS;
343
- const estimatedValueUsd = estimatedTimeSaved * this.VALUE_PER_MINUTE;
344
- return {
345
- metricType: 'skill',
346
- entityId: skillId,
347
- periodStart: startDate,
348
- periodEnd: endDate,
349
- totalActivations,
350
- totalInvocations,
351
- totalSuccesses,
352
- totalFailures,
353
- avgValueScore,
354
- estimatedTimeSaved,
355
- estimatedValueUsd,
356
- computedAt: new Date().toISOString(),
357
- };
358
- }
359
- computeDailyMetrics(startDate, endDate) {
360
- // In production, aggregate from all events
361
- // For now, return empty metrics
362
- return {
363
- metricType: 'daily',
364
- periodStart: startDate,
365
- periodEnd: endDate,
366
- totalActivations: 0,
367
- totalInvocations: 0,
368
- totalSuccesses: 0,
369
- totalFailures: 0,
370
- avgValueScore: 0,
371
- estimatedTimeSaved: 0,
372
- estimatedValueUsd: 0,
373
- computedAt: new Date().toISOString(),
374
- };
375
- }
376
247
  }
377
248
  //# sourceMappingURL=ROIDashboardService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ROIDashboardService.js","sourceRoot":"","sources":["../../../src/analytics/ROIDashboardService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ROIDashboardService.js","sourceRoot":"","sources":["../../../src/analytics/ROIDashboardService.ts"],"names":[],"mappings":"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"}
@@ -63,6 +63,11 @@ export interface ApiSearchResult {
63
63
  last_scanned_at?: string | null;
64
64
  /** SMI-4240: Security findings array (jsonb); length drives findingsCount */
65
65
  security_findings?: unknown[] | null;
66
+ /**
67
+ * SMI-5327: SPDX license identifier surfaced by skills-get / skills-search.
68
+ * Null means "unknown / not detected" — NOT public domain or "no restrictions".
69
+ */
70
+ license?: string | null;
66
71
  }
67
72
  /**
68
73
  * Recommendation request
@@ -1 +1 @@
1
- {"version":3,"file":"client.types.d.ts","sourceRoot":"","sources":["../../../src/api/client.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.types.d.ts","sourceRoot":"","sources":["../../../src/api/client.types.ts"],"names":[],"mappings":"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"}
@@ -9,5 +9,6 @@
9
9
  export { SkillsmithApiClient, createApiClient, generateAnonymousId, ApiClientError, type ApiClientConfig, type ApiResponse, type ApiErrorResponse, type ApiSearchResult, type RecommendationRequest, type TelemetryEvent, } from './client.js';
10
10
  export { EventBatcher, createEventBatcher, type EventBatcherOptions, type BatchFlushFn, } from './event-batcher.js';
11
11
  export { ApiCache, createCache, getGlobalCache, DEFAULT_TTL, type CacheConfig, type CacheStats, } from './cache.js';
12
+ export { API_TRUST_TIERS, API_CATEGORIES } from './types.js';
12
13
  export type { ApiTrustTier, ApiCategory, ApiProjectType, ApiSkill, ApiSearchResult as OpenApiSearchResult, RecommendedSkill, SearchParams, SearchResponse, SearchResponseMeta, RecommendParams, RecommendResponse, RecommendResponseMeta, SkillResponse, HealthStatus, TelemetryEventType, TelemetryMetadata, TelemetryEventPayload, TelemetryResponse, ApiErrorResponse as OpenApiErrorResponse, RateLimitInfo, ApiClientOptions, ApiResponse as OpenApiResponse, } from './types.js';
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,GACpB,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAA;AAM3B,OAAO,EACL,QAAQ,EACR,WAAW,EACX,cAAc,EACd,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,UAAU,GAChB,MAAM,YAAY,CAAA;AAMnB,YAAY,EAEV,YAAY,EACZ,WAAW,EACX,cAAc,EAEd,QAAQ,EACR,eAAe,IAAI,mBAAmB,EACtC,gBAAgB,EAEhB,YAAY,EACZ,cAAc,EACd,kBAAkB,EAElB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EAErB,aAAa,EAEb,YAAY,EAEZ,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EAEjB,gBAAgB,IAAI,oBAAoB,EAExC,aAAa,EAEb,gBAAgB,EAEhB,WAAW,IAAI,eAAe,GAC/B,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,GACpB,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAA;AAM3B,OAAO,EACL,QAAQ,EACR,WAAW,EACX,cAAc,EACd,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,UAAU,GAChB,MAAM,YAAY,CAAA;AAMnB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE5D,YAAY,EAEV,YAAY,EACZ,WAAW,EACX,cAAc,EAEd,QAAQ,EACR,eAAe,IAAI,mBAAmB,EACtC,gBAAgB,EAEhB,YAAY,EACZ,cAAc,EACd,kBAAkB,EAElB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EAErB,aAAa,EAEb,YAAY,EAEZ,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EAEjB,gBAAgB,IAAI,oBAAoB,EAExC,aAAa,EAEb,gBAAgB,EAEhB,WAAW,IAAI,eAAe,GAC/B,MAAM,YAAY,CAAA"}
@@ -16,4 +16,8 @@ export { EventBatcher, createEventBatcher, } from './event-batcher.js';
16
16
  // API Cache
17
17
  // ============================================================================
18
18
  export { ApiCache, createCache, getGlobalCache, DEFAULT_TTL, } from './cache.js';
19
+ // ============================================================================
20
+ // API Types (OpenAPI-aligned)
21
+ // ============================================================================
22
+ export { API_TRUST_TIERS, API_CATEGORIES } from './types.js';
19
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,cAAc,GAOf,MAAM,aAAa,CAAA;AAEpB,2BAA2B;AAC3B,OAAO,EACL,YAAY,EACZ,kBAAkB,GAGnB,MAAM,oBAAoB,CAAA;AAE3B,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,OAAO,EACL,QAAQ,EACR,WAAW,EACX,cAAc,EACd,WAAW,GAGZ,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,cAAc,GAOf,MAAM,aAAa,CAAA;AAEpB,2BAA2B;AAC3B,OAAO,EACL,YAAY,EACZ,kBAAkB,GAGnB,MAAM,oBAAoB,CAAA;AAE3B,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,OAAO,EACL,QAAQ,EACR,WAAW,EACX,cAAc,EACd,WAAW,GAGZ,MAAM,YAAY,CAAA;AAEnB,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * SMI-5178: regression guard for the Zod strip boundary.
3
+ *
4
+ * ApiSearchResultSchema is a `z.object` (strip-by-default). Any field skills-search
5
+ * hydrates but the schema does not declare is silently dropped before the MCP
6
+ * `search` tool can read it — which would make the compatibility filter / the
7
+ * restrictive cross-tool default a permanent no-op. This test fails the moment
8
+ * `compatibility` is removed from the schema.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=schemas.compatibility.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.compatibility.test.d.ts","sourceRoot":"","sources":["../../../src/api/schemas.compatibility.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * SMI-5178: regression guard for the Zod strip boundary.
3
+ *
4
+ * ApiSearchResultSchema is a `z.object` (strip-by-default). Any field skills-search
5
+ * hydrates but the schema does not declare is silently dropped before the MCP
6
+ * `search` tool can read it — which would make the compatibility filter / the
7
+ * restrictive cross-tool default a permanent no-op. This test fails the moment
8
+ * `compatibility` is removed from the schema.
9
+ */
10
+ import { describe, it, expect } from 'vitest';
11
+ import { ApiSearchResultSchema } from './schemas.js';
12
+ describe('ApiSearchResultSchema — compatibility passthrough (SMI-5178)', () => {
13
+ it('retains a compatibility array through parse (not stripped)', () => {
14
+ const parsed = ApiSearchResultSchema.parse({
15
+ id: 'acme/skill',
16
+ name: 'skill',
17
+ description: 'desc',
18
+ author: 'acme',
19
+ quality_score: 0.9,
20
+ trust_tier: 'verified',
21
+ tags: ['testing'],
22
+ compatibility: ['claude-code', 'copilot'],
23
+ });
24
+ expect(parsed.compatibility).toEqual(['claude-code', 'copilot']);
25
+ });
26
+ it('is optional — absent compatibility parses without error', () => {
27
+ const parsed = ApiSearchResultSchema.parse({
28
+ id: 'acme/skill',
29
+ name: 'skill',
30
+ description: null,
31
+ author: null,
32
+ quality_score: null,
33
+ tags: [],
34
+ });
35
+ expect(parsed.compatibility).toBeUndefined();
36
+ });
37
+ });
38
+ //# sourceMappingURL=schemas.compatibility.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.compatibility.test.js","sourceRoot":"","sources":["../../../src/api/schemas.compatibility.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAEpD,QAAQ,CAAC,8DAA8D,EAAE,GAAG,EAAE;IAC5E,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC;YACzC,EAAE,EAAE,YAAY;YAChB,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,MAAM;YACnB,MAAM,EAAE,MAAM;YACd,aAAa,EAAE,GAAG;YAClB,UAAU,EAAE,UAAU;YACtB,IAAI,EAAE,CAAC,SAAS,CAAC;YACjB,aAAa,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC;SAC1C,CAAC,CAAA;QACF,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC;YACzC,EAAE,EAAE,YAAY;YAChB,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,IAAI;YACZ,aAAa,EAAE,IAAI;YACnB,IAAI,EAAE,EAAE;SACT,CAAC,CAAA;QACF,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,aAAa,EAAE,CAAA;IAC9C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}